scripts: get_abi.pl: improve its parser to better catch up indentation
authorMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Fri, 30 Oct 2020 07:40:23 +0000 (08:40 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 30 Oct 2020 12:02:25 +0000 (13:02 +0100)
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: Jonathan Corbet <corbet@lwn.net>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
Link: https://lore.kernel.org/r/eb458bb30be0e5a89192d6057b2e8a7e910dbcb8.1604042072.git.mchehab+huawei@kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
scripts/get_abi.pl

index 6a4d387..bd018eb 100755 (executable)
@@ -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}) {
+                       if (m/^\s*\n/) {
+                               $data{$what}->{$tag} .= "\n";
+                               next;
+                       }
+
+                       if (!defined($space)) {
                                # Preserve initial spaces for the first line
-                               if ($content =~ m/^(\s*)(.*)$/) {
+                               if ($content =~ m/^(\s*)(\S.*)$/) {
                                        $space = $1;
-                                       $content = $2;
+                                       $content = "$2\n";
                                }
-
-                               $data{$what}->{$tag} .= "$content\n" if ($content);
                        } else {
-                               if (m/^\s*\n/) {
-                                       $data{$what}->{$tag} .= $content;
-                                       next;
-                               }
-
                                $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*(.*)/) {