scripts: get_abi.pl: parse description line per line
authorMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Thu, 25 Mar 2021 10:38:26 +0000 (11:38 +0100)
committerJonathan Corbet <corbet@lwn.net>
Wed, 31 Mar 2021 19:53:16 +0000 (13:53 -0600)
Change the description parsing logic in rst mode in order
to parse it line per line.

The end result is the same, but doing line per line allows
to add some code to escape literal blocks when seeking for
cross-references.

Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
Link: https://lore.kernel.org/r/d33cfa2e59ecf8f28d4ed7de7402468cf2168921.1616668017.git.mchehab+huawei@kernel.org
Signed-off-by: Jonathan Corbet <corbet@lwn.net>
scripts/get_abi.pl

index eb1a23103afa29e65466b788394c7af93523cf17..e5d1da492c1e9495b7d84c6373b49b3a7863dd3c 100755 (executable)
@@ -381,34 +381,41 @@ sub output_rest {
 
                                # Enrich text by creating cross-references
 
-                               $desc =~ s,Documentation/(?!devicetree)(\S+)\.rst,:doc:`/$1`,g;
-
-                               my @matches = $desc =~ m,Documentation/ABI/([\w\/\-]+),g;
-                               foreach my $f (@matches) {
-                                       my $xref = $f;
-                                       my $path = $f;
-                                       $path =~ s,.*/(.*/.*),$1,;;
-                                       $path =~ s,[/\-],_,g;;
-                                       $xref .= " <abi_file_" . $path . ">";
-                                       $desc =~ s,\bDocumentation/ABI/$f\b,:ref:`$xref`,g;
-                               }
+                               my $new_desc = "";
+                               open(my $fh, "+<", \$desc);
+                               while (my $d = <$fh>) {
+                                       $d =~ s,Documentation/(?!devicetree)(\S+)\.rst,:doc:`/$1`,g;
+
+                                       my @matches = $d =~ m,Documentation/ABI/([\w\/\-]+),g;
+                                       foreach my $f (@matches) {
+                                               my $xref = $f;
+                                               my $path = $f;
+                                               $path =~ s,.*/(.*/.*),$1,;;
+                                               $path =~ s,[/\-],_,g;;
+                                               $xref .= " <abi_file_" . $path . ">";
+                                               $d =~ s,\bDocumentation/ABI/$f\b,:ref:`$xref`,g;
+                                       }
 
-                               # Seek for cross reference symbols like /sys/...
-                               @matches = $desc =~ m/$xref_match/g;
+                                       # Seek for cross reference symbols like /sys/...
+                                       @matches = $d =~ m/$xref_match/g;
 
-                               foreach my $s (@matches) {
-                                       next if (!($s =~ m,/,));
-                                       if (defined($data{$s}) && defined($data{$s}->{label})) {
-                                               my $xref = $s;
+                                       foreach my $s (@matches) {
+                                               next if (!($s =~ m,/,));
+                                               if (defined($data{$s}) && defined($data{$s}->{label})) {
+                                                       my $xref = $s;
 
-                                               $xref =~ s/$symbols/\\$1/g;
-                                               $xref = ":ref:`$xref <" . $data{$s}->{label} . ">`";
+                                                       $xref =~ s/$symbols/\\$1/g;
+                                                       $xref = ":ref:`$xref <" . $data{$s}->{label} . ">`";
 
-                                               $desc =~ s,$start$s$bondary,$1$xref$2,g;
+                                                       $d =~ s,$start$s$bondary,$1$xref$2,g;
+                                               }
                                        }
+                                       $new_desc .= $d;
                                }
+                               close $fh;
+
 
-                               print "$desc\n\n";
+                               print "$new_desc\n\n";
                        } else {
                                $desc =~ s/^\s+//;