Commit f82a8a74 authored by Mauro Carvalho Chehab's avatar Mauro Carvalho Chehab Committed by Greg Kroah-Hartman
Browse files

scripts: get_abi.pl: improve its parser to better catch up indentation



The original parser for indentation were relying on having
just one description for each "what". However, that's not
the case: there are a number of ABI symbols that got defined
multiple times.

Improve the parser for it to better handle descriptions
if entries are duplicated.

Acked-by: default avatarJonathan Corbet <corbet@lwn.net>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Link: https://lore.kernel.org/r/eb458bb30be0e5a89192d6057b2e8a7e910dbcb8.1604042072.git.mchehab+huawei@kernel.org


Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 61439c4a
Loading
Loading
Loading
Loading
+19 −23
Original line number Diff line number Diff line
@@ -147,17 +147,19 @@ sub parse_abi {
					parse_error($file, $ln, "'What:' should come first:", $_);
					next;
				}
				if ($tag eq "description") {
					# Preserve initial spaces for the first line
				if ($new_tag eq "description") {
					$sep =~ s,:, ,;
					$content = ' ' x length($new_tag) . $sep . $content;
					$content =~ s,^(\s*):,$1 ,;
					if ($content =~ m/^(\s*)(.*)$/) {
					while ($content =~ s/\t+/' ' x (length($&) * 8 - length($`) % 8)/e) {}
					if ($content =~ m/^(\s*)(\S.*)$/) {
						# Preserve initial spaces for the first line
						$space = $1;
						$content = $2;
						$content = "$2\n";
						$data{$what}->{$tag} .= $content;
					} else {
						undef($space);
					}
					while ($space =~ s/\t+/' ' x (length($&) * 8 - length($`) % 8)/e) {}

					$data{$what}->{$tag} .= "$content\n" if ($content);
				} else {
					$data{$what}->{$tag} = $content;
				}
@@ -174,28 +176,22 @@ sub parse_abi {
		if ($tag eq "description") {
			my $content = $_;
			while ($content =~ s/\t+/' ' x (length($&) * 8 - length($`) % 8)/e) {}
			if (!$data{$what}->{description}) {
				# Preserve initial spaces for the first line
				if ($content =~ m/^(\s*)(.*)$/) {
					$space = $1;
					$content = $2;
				}

				$data{$what}->{$tag} .= "$content\n" if ($content);
			} else {
			if (m/^\s*\n/) {
					$data{$what}->{$tag} .= $content;
				$data{$what}->{$tag} .= "\n";
				next;
			}

			if (!defined($space)) {
				# Preserve initial spaces for the first line
				if ($content =~ m/^(\s*)(\S.*)$/) {
					$space = $1;
					$content = "$2\n";
				}
			} else {
				$space = "" if (!($content =~ s/^($space)//));

#				# Compress spaces with tabs
#				$content =~ s<^ {8}> <\t>;
#				$content =~ s<^ {1,7}\t> <\t>;
#				$content =~ s< {1,7}\t> <\t>;
				$data{$what}->{$tag} .= $content;
			}
			$data{$what}->{$tag} .= $content;

			next;
		}
		if (m/^\s*(.*)/) {