diff options
-rwxr-xr-x | scripts/kernel-doc | 41 |
1 files changed, 32 insertions, 9 deletions
diff --git a/scripts/kernel-doc b/scripts/kernel-doc index 1f5835115cad..1d1401807e95 100755 --- a/scripts/kernel-doc +++ b/scripts/kernel-doc | |||
@@ -5,6 +5,7 @@ use strict; | |||
5 | ## Copyright (c) 1998 Michael Zucchi, All Rights Reserved ## | 5 | ## Copyright (c) 1998 Michael Zucchi, All Rights Reserved ## |
6 | ## Copyright (C) 2000, 1 Tim Waugh <twaugh@redhat.com> ## | 6 | ## Copyright (C) 2000, 1 Tim Waugh <twaugh@redhat.com> ## |
7 | ## Copyright (C) 2001 Simon Huggins ## | 7 | ## Copyright (C) 2001 Simon Huggins ## |
8 | ## Copyright (C) 2005-2007 Randy Dunlap ## | ||
8 | ## ## | 9 | ## ## |
9 | ## #define enhancements by Armin Kuster <akuster@mvista.com> ## | 10 | ## #define enhancements by Armin Kuster <akuster@mvista.com> ## |
10 | ## Copyright (c) 2000 MontaVista Software, Inc. ## | 11 | ## Copyright (c) 2000 MontaVista Software, Inc. ## |
@@ -161,7 +162,7 @@ my $type_constant = '\%([-_\w]+)'; | |||
161 | my $type_func = '(\w+)\(\)'; | 162 | my $type_func = '(\w+)\(\)'; |
162 | my $type_param = '\@(\w+)'; | 163 | my $type_param = '\@(\w+)'; |
163 | my $type_struct = '\&((struct\s*)*[_\w]+)'; | 164 | my $type_struct = '\&((struct\s*)*[_\w]+)'; |
164 | my $type_struct_xml = '\\\amp;((struct\s*)*[_\w]+)'; | 165 | my $type_struct_xml = '\\&((struct\s*)*[_\w]+)'; |
165 | my $type_env = '(\$\w+)'; | 166 | my $type_env = '(\$\w+)'; |
166 | 167 | ||
167 | # Output conversion substitutions. | 168 | # Output conversion substitutions. |
@@ -173,7 +174,9 @@ my %highlights_html = ( $type_constant, "<i>\$1</i>", | |||
173 | $type_struct_xml, "<i>\$1</i>", | 174 | $type_struct_xml, "<i>\$1</i>", |
174 | $type_env, "<b><i>\$1</i></b>", | 175 | $type_env, "<b><i>\$1</i></b>", |
175 | $type_param, "<tt><b>\$1</b></tt>" ); | 176 | $type_param, "<tt><b>\$1</b></tt>" ); |
176 | my $blankline_html = "<p>"; | 177 | my $local_lt = "\\\\\\\\lt:"; |
178 | my $local_gt = "\\\\\\\\gt:"; | ||
179 | my $blankline_html = $local_lt . "p" . $local_gt; # was "<p>" | ||
177 | 180 | ||
178 | # XML, docbook format | 181 | # XML, docbook format |
179 | my %highlights_xml = ( "([^=])\\\"([^\\\"<]+)\\\"", "\$1<quote>\$2</quote>", | 182 | my %highlights_xml = ( "([^=])\\\"([^\\\"<]+)\\\"", "\$1<quote>\$2</quote>", |
@@ -391,17 +394,19 @@ sub output_highlight { | |||
391 | # confess "output_highlight got called with no args?\n"; | 394 | # confess "output_highlight got called with no args?\n"; |
392 | # } | 395 | # } |
393 | 396 | ||
397 | if ($output_mode eq "html") { | ||
398 | $contents = local_unescape($contents); | ||
399 | # convert data read & converted thru xml_escape() into &xyz; format: | ||
400 | $contents =~ s/\\\\\\/&/g; | ||
401 | } | ||
394 | # print STDERR "contents b4:$contents\n"; | 402 | # print STDERR "contents b4:$contents\n"; |
395 | eval $dohighlight; | 403 | eval $dohighlight; |
396 | die $@ if $@; | 404 | die $@ if $@; |
397 | if ($output_mode eq "html") { | ||
398 | $contents =~ s/\\\\//; | ||
399 | } | ||
400 | # print STDERR "contents af:$contents\n"; | 405 | # print STDERR "contents af:$contents\n"; |
401 | 406 | ||
402 | foreach $line (split "\n", $contents) { | 407 | foreach $line (split "\n", $contents) { |
403 | if ($line eq ""){ | 408 | if ($line eq ""){ |
404 | print $lineprefix, $blankline; | 409 | print $lineprefix, local_unescape($blankline); |
405 | } else { | 410 | } else { |
406 | $line =~ s/\\\\\\/\&/g; | 411 | $line =~ s/\\\\\\/\&/g; |
407 | if ($output_mode eq "man" && substr($line, 0, 1) eq ".") { | 412 | if ($output_mode eq "man" && substr($line, 0, 1) eq ".") { |
@@ -1752,7 +1757,13 @@ sub process_state3_type($$) { | |||
1752 | } | 1757 | } |
1753 | } | 1758 | } |
1754 | 1759 | ||
1755 | # replace <, >, and & | 1760 | # xml_escape: replace <, >, and & in the text stream; |
1761 | # | ||
1762 | # however, formatting controls that are generated internally/locally in the | ||
1763 | # kernel-doc script are not escaped here; instead, they begin life like | ||
1764 | # $blankline_html (4 of '\' followed by a mnemonic + ':'), then these strings | ||
1765 | # are converted to their mnemonic-expected output, without the 4 * '\' & ':', | ||
1766 | # just before actual output; (this is done by local_unescape()) | ||
1756 | sub xml_escape($) { | 1767 | sub xml_escape($) { |
1757 | my $text = shift; | 1768 | my $text = shift; |
1758 | if (($output_mode eq "text") || ($output_mode eq "man")) { | 1769 | if (($output_mode eq "text") || ($output_mode eq "man")) { |
@@ -1764,6 +1775,18 @@ sub xml_escape($) { | |||
1764 | return $text; | 1775 | return $text; |
1765 | } | 1776 | } |
1766 | 1777 | ||
1778 | # convert local escape strings to html | ||
1779 | # local escape strings look like: '\\\\menmonic:' (that's 4 backslashes) | ||
1780 | sub local_unescape($) { | ||
1781 | my $text = shift; | ||
1782 | if (($output_mode eq "text") || ($output_mode eq "man")) { | ||
1783 | return $text; | ||
1784 | } | ||
1785 | $text =~ s/\\\\\\\\lt:/</g; | ||
1786 | $text =~ s/\\\\\\\\gt:/>/g; | ||
1787 | return $text; | ||
1788 | } | ||
1789 | |||
1767 | sub process_file($) { | 1790 | sub process_file($) { |
1768 | my $file; | 1791 | my $file; |
1769 | my $identifier; | 1792 | my $identifier; |
@@ -1903,7 +1926,7 @@ sub process_file($) { | |||
1903 | } elsif ($state == 4) { | 1926 | } elsif ($state == 4) { |
1904 | # Documentation block | 1927 | # Documentation block |
1905 | if (/$doc_block/) { | 1928 | if (/$doc_block/) { |
1906 | dump_section($section, $contents); | 1929 | dump_section($section, xml_escape($contents)); |
1907 | output_intro({'sectionlist' => \@sectionlist, | 1930 | output_intro({'sectionlist' => \@sectionlist, |
1908 | 'sections' => \%sections }); | 1931 | 'sections' => \%sections }); |
1909 | $contents = ""; | 1932 | $contents = ""; |
@@ -1923,7 +1946,7 @@ sub process_file($) { | |||
1923 | } | 1946 | } |
1924 | elsif (/$doc_end/) | 1947 | elsif (/$doc_end/) |
1925 | { | 1948 | { |
1926 | dump_section($section, $contents); | 1949 | dump_section($section, xml_escape($contents)); |
1927 | output_intro({'sectionlist' => \@sectionlist, | 1950 | output_intro({'sectionlist' => \@sectionlist, |
1928 | 'sections' => \%sections }); | 1951 | 'sections' => \%sections }); |
1929 | $contents = ""; | 1952 | $contents = ""; |