Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

scripts/get_abi.pl: split label naming from xref logic



Instead of using a ReST compilant label while parsing,
move the label to ReST output. That makes the parsing logic
more generic, allowing it to provide other types of output.

As a side effect, now all files used to generate the output
will be output. We can later add command line arguments to
filter.

Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+samsung@kernel.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 4e6a6234
Loading
Loading
Loading
Loading
+53 −41
Original line number Original line Diff line number Diff line
@@ -49,17 +49,23 @@ sub parse_abi {
	my $name = $file;
	my $name = $file;
	$name =~ s,.*/,,;
	$name =~ s,.*/,,;


	my $nametag = "File $name";
	$data{$nametag}->{what} = "File $name";
	$data{$nametag}->{type} = "File";
	$data{$nametag}->{file} = $name;
	$data{$nametag}->{is_file} = 1;

	my $type = $file;
	my $type = $file;
	$type =~ s,.*/(.*)/.*,$1,;
	$type =~ s,.*/(.*)/.*,$1,;


	my $what;
	my $what;
	my $new_what;
	my $new_what;
	my $tag;
	my $tag;
	my $label;
	my $ln;
	my $ln;
	my $has_file;
	my $xrefs;
	my $xrefs;
	my $space;
	my $space;
	my @labels;
	my $label;


	print STDERR "Opening $file\n" if ($debug > 1);
	print STDERR "Opening $file\n" if ($debug > 1);
	open IN, $file;
	open IN, $file;
@@ -88,28 +94,13 @@ sub parse_abi {
					parse_error($file, $ln, "What '$what' doesn't have a description", "") if ($what && !$data{$what}->{description});
					parse_error($file, $ln, "What '$what' doesn't have a description", "") if ($what && !$data{$what}->{description});


					$what = $content;
					$what = $content;
					$label = $content;
					$new_what = 1;
					$new_what = 1;
				}
				}
				push @labels, [($content, $label)];
				$tag = $new_tag;
				$tag = $new_tag;


				if ($has_file) {
				push @{$data{$nametag}->{xrefs}}, [($content, $label)] if ($data{$nametag}->{what});
					$label = "abi_" . $content . " ";
					$label =~ tr/A-Z/a-z/;

					# Convert special chars to "_"
					$label =~s/[\x00-\x2f]+/_/g;
					$label =~s/[\x3a-\x40]+/_/g;
					$label =~s/[\x7b-\xff]+/_/g;
					$label =~ s,_+,_,g;
					$label =~ s,_$,,;

					$data{$what}->{label} .= $label;

					# Escape special chars from content
					$content =~s/([\x00-\x1f\x21-\x2f\x3a-\x40\x7b-\xff])/\\$1/g;

					$xrefs .= "- :ref:`$content <$label>`\n\n";
				}
				next;
				next;
			}
			}


@@ -117,6 +108,9 @@ sub parse_abi {
				$tag = $new_tag;
				$tag = $new_tag;


				if ($new_what) {
				if ($new_what) {
					@{$data{$what}->{label}} = @labels if ($data{$nametag}->{what});
					@labels = ();
					$label = "";
					$new_what = 0;
					$new_what = 0;


					$data{$what}->{type} = $type;
					$data{$what}->{type} = $type;
@@ -145,15 +139,8 @@ sub parse_abi {
		}
		}


		# Store any contents before tags at the database
		# Store any contents before tags at the database
		if (!$tag) {
		if (!$tag && $data{$nametag}->{what}) {
			next if (/^\n/);
			$data{$nametag}->{description} .= $_;

			my $my_what = "File $name";
			$data{$my_what}->{what} = "File $name";
			$data{$my_what}->{type} = "File";
			$data{$my_what}->{file} = $name;
			$data{$my_what}->{description} .= $_;
			$has_file = 1;
			next;
			next;
		}
		}


@@ -192,12 +179,8 @@ sub parse_abi {
		# Everything else is error
		# Everything else is error
		parse_error($file, $ln, "Unexpected line:", $_);
		parse_error($file, $ln, "Unexpected line:", $_);
	}
	}
	$data{$nametag}->{description} =~ s/^\n+//;
	close IN;
	close IN;

	if ($has_file) {
		my $my_what = "File $name";
		$data{$my_what}->{xrefs} = $xrefs;
	}
}
}


# Outputs the output on ReST format
# Outputs the output on ReST format
@@ -212,11 +195,22 @@ sub output_rest {
		my $bar = $w;
		my $bar = $w;
		$bar =~ s/./-/g;
		$bar =~ s/./-/g;


		if ($data{$what}->{label}) {
		foreach my $p (@{$data{$what}->{label}}) {
			my @labels = split(/\s/, $data{$what}->{label});
			my ($content, $label) = @{$p};
			foreach my $label (@labels) {
			$label = "abi_" . $label . " ";
			$label =~ tr/A-Z/a-z/;

			# Convert special chars to "_"
			$label =~s/([\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\xff])/_/g;
			$label =~ s,_+,_,g;
			$label =~ s,_$,,;

			$data{$what}->{label} .= $label;

			printf ".. _%s:\n\n", $label;
			printf ".. _%s:\n\n", $label;
			}

			# only one label is enough
			last;
		}
		}


		print "$w\n$bar\n\n";
		print "$w\n$bar\n\n";
@@ -243,10 +237,28 @@ sub output_rest {
				print "$desc\n\n";
				print "$desc\n\n";
			}
			}
		} else {
		} else {
			print "DESCRIPTION MISSING for $what\n\n";
			print "DESCRIPTION MISSING for $what\n\n" if (!$data{$what}->{is_file});
		}
		}


		printf "Has the following ABI:\n\n%s", $data{$what}->{xrefs} if ($data{$what}->{xrefs});
		if ($data{$what}->{xrefs}) {
			printf "Has the following ABI:\n\n";

			foreach my $p(@{$data{$what}->{xrefs}}) {
				my ($content, $label) = @{$p};
				$label = "abi_" . $label . " ";
				$label =~ tr/A-Z/a-z/;

				# Convert special chars to "_"
				$label =~s/([\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\xff])/_/g;
				$label =~ s,_+,_,g;
				$label =~ s,_$,,;

				# Escape special chars from content
				$content =~s/([\x00-\x1f\x21-\x2f\x3a-\x40\x7b-\xff])/\\$1/g;

				print "- :ref:`$content <$label>`\n\n";
			}
		}
	}
	}
}
}