|
@@ -51,6 +51,12 @@ my $wikipreamble = undef;
|
|
|
my $wikiheaderfiletext = 'Defined in %fname%';
|
|
|
my $manpageheaderfiletext = 'Defined in %fname%';
|
|
|
my $headercategoryeval = undef;
|
|
|
+my $quickrefenabled = 0;
|
|
|
+my @quickrefcategoryorder;
|
|
|
+my $quickreftitle = undef;
|
|
|
+my $quickrefurl = undef;
|
|
|
+my $quickrefdesc = undef;
|
|
|
+my $quickrefmacroregex = undef;
|
|
|
my $changeformat = undef;
|
|
|
my $manpath = undef;
|
|
|
my $gitrev = undef;
|
|
@@ -122,6 +128,12 @@ if (defined $optionsfname) {
|
|
|
$wikiheaderfiletext = $val, next if $key eq 'wikiheaderfiletext';
|
|
|
$manpageheaderfiletext = $val, next if $key eq 'manpageheaderfiletext';
|
|
|
$headercategoryeval = $val, next if $key eq 'headercategoryeval';
|
|
|
+ $quickrefenabled = int($val), next if $key eq 'quickrefenabled';
|
|
|
+ @quickrefcategoryorder = split(/,/, $val), next if $key eq 'quickrefcategoryorder';
|
|
|
+ $quickreftitle = $val, next if $key eq 'quickreftitle';
|
|
|
+ $quickrefurl = $val, next if $key eq 'quickrefurl';
|
|
|
+ $quickrefdesc = $val, next if $key eq 'quickrefdesc';
|
|
|
+ $quickrefmacroregex = $val, next if $key eq 'quickrefmacroregex';
|
|
|
}
|
|
|
}
|
|
|
close(OPTIONS);
|
|
@@ -647,6 +659,7 @@ my %headersymsrettype = (); # $headersymsrettype{"SDL_OpenAudio"} -> string of C
|
|
|
my %wikitypes = (); # contains string of wiki page extension, like $wikitypes{"SDL_OpenAudio"} == 'mediawiki'
|
|
|
my %wikisyms = (); # contains references to hash of strings, each string being the full contents of a section of a wiki page, like $wikisyms{"SDL_OpenAudio"}{"Remarks"}.
|
|
|
my %wikisectionorder = (); # contains references to array, each array item being a key to a wikipage section in the correct order, like $wikisectionorder{"SDL_OpenAudio"}[2] == 'Remarks'
|
|
|
+my %quickreffuncorder = (); # contains references to array, each array item being a key to a category with functions in the order they appear in the headers, like $quickreffuncorder{"Audio"}[0] == 'SDL_GetNumAudioDrivers'
|
|
|
|
|
|
my %referenceonly = (); # $referenceonly{"Y"} -> symbol name that this symbol is bound to. This makes wiki pages that say "See X" where "X" is a typedef and "Y" is a define attached to it. These pages are generated in the wiki only and do not bridge to the headers or manpages.
|
|
|
|
|
@@ -720,6 +733,275 @@ sub sanitize_c_typename {
|
|
|
return $str;
|
|
|
}
|
|
|
|
|
|
+my %big_ascii = (
|
|
|
+ 'A' => [ "\x{20}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}\x{20}", "\x{2588}\x{2588}\x{2554}\x{2550}\x{2550}\x{2588}\x{2588}\x{2557}", "\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2551}", "\x{2588}\x{2588}\x{2554}\x{2550}\x{2550}\x{2588}\x{2588}\x{2551}", "\x{2588}\x{2588}\x{2551}\x{20}\x{20}\x{2588}\x{2588}\x{2551}", "\x{255A}\x{2550}\x{255D}\x{20}\x{20}\x{255A}\x{2550}\x{255D}" ],
|
|
|
+ 'B' => [ "\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}\x{20}", "\x{2588}\x{2588}\x{2554}\x{2550}\x{2550}\x{2588}\x{2588}\x{2557}", "\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2554}\x{255D}", "\x{2588}\x{2588}\x{2554}\x{2550}\x{2550}\x{2588}\x{2588}\x{2557}", "\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2554}\x{255D}", "\x{255A}\x{2550}\x{2550}\x{2550}\x{2550}\x{2550}\x{255D}\x{20}" ],
|
|
|
+ 'C' => [ "\x{20}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}", "\x{2588}\x{2588}\x{2554}\x{2550}\x{2550}\x{2550}\x{2550}\x{255D}", "\x{2588}\x{2588}\x{2551}\x{20}\x{20}\x{20}\x{20}\x{20}", "\x{2588}\x{2588}\x{2551}\x{20}\x{20}\x{20}\x{20}\x{20}", "\x{255A}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}", "\x{20}\x{255A}\x{2550}\x{2550}\x{2550}\x{2550}\x{2550}\x{255D}" ],
|
|
|
+ 'D' => [ "\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}\x{20}", "\x{2588}\x{2588}\x{2554}\x{2550}\x{2550}\x{2588}\x{2588}\x{2557}", "\x{2588}\x{2588}\x{2551}\x{20}\x{20}\x{2588}\x{2588}\x{2551}", "\x{2588}\x{2588}\x{2551}\x{20}\x{20}\x{2588}\x{2588}\x{2551}", "\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2554}\x{255D}", "\x{255A}\x{2550}\x{2550}\x{2550}\x{2550}\x{2550}\x{255D}\x{20}" ],
|
|
|
+ 'E' => [ "\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}", "\x{2588}\x{2588}\x{2554}\x{2550}\x{2550}\x{2550}\x{2550}\x{255D}", "\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}\x{20}\x{20}", "\x{2588}\x{2588}\x{2554}\x{2550}\x{2550}\x{255D}\x{20}\x{20}", "\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}", "\x{255A}\x{2550}\x{2550}\x{2550}\x{2550}\x{2550}\x{2550}\x{255D}" ],
|
|
|
+ 'F' => [ "\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}", "\x{2588}\x{2588}\x{2554}\x{2550}\x{2550}\x{2550}\x{2550}\x{255D}", "\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}\x{20}\x{20}", "\x{2588}\x{2588}\x{2554}\x{2550}\x{2550}\x{255D}\x{20}\x{20}", "\x{2588}\x{2588}\x{2551}\x{20}\x{20}\x{20}\x{20}\x{20}", "\x{255A}\x{2550}\x{255D}\x{20}\x{20}\x{20}\x{20}\x{20}" ],
|
|
|
+ 'G' => [ "\x{20}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}\x{20}", "\x{2588}\x{2588}\x{2554}\x{2550}\x{2550}\x{2550}\x{2550}\x{255D}\x{20}", "\x{2588}\x{2588}\x{2551}\x{20}\x{20}\x{2588}\x{2588}\x{2588}\x{2557}", "\x{2588}\x{2588}\x{2551}\x{20}\x{20}\x{20}\x{2588}\x{2588}\x{2551}", "\x{255A}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2554}\x{255D}", "\x{20}\x{255A}\x{2550}\x{2550}\x{2550}\x{2550}\x{2550}\x{255D}\x{20}" ],
|
|
|
+ 'H' => [ "\x{2588}\x{2588}\x{2557}\x{20}\x{20}\x{2588}\x{2588}\x{2557}", "\x{2588}\x{2588}\x{2551}\x{20}\x{20}\x{2588}\x{2588}\x{2551}", "\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2551}", "\x{2588}\x{2588}\x{2554}\x{2550}\x{2550}\x{2588}\x{2588}\x{2551}", "\x{2588}\x{2588}\x{2551}\x{20}\x{20}\x{2588}\x{2588}\x{2551}", "\x{255A}\x{2550}\x{255D}\x{20}\x{20}\x{255A}\x{2550}\x{255D}" ],
|
|
|
+ 'I' => [ "\x{2588}\x{2588}\x{2557}", "\x{2588}\x{2588}\x{2551}", "\x{2588}\x{2588}\x{2551}", "\x{2588}\x{2588}\x{2551}", "\x{2588}\x{2588}\x{2551}", "\x{255A}\x{2550}\x{255D}" ],
|
|
|
+ 'J' => [ "\x{20}\x{20}\x{20}\x{20}\x{20}\x{2588}\x{2588}\x{2557}", "\x{20}\x{20}\x{20}\x{20}\x{20}\x{2588}\x{2588}\x{2551}", "\x{20}\x{20}\x{20}\x{20}\x{20}\x{2588}\x{2588}\x{2551}", "\x{2588}\x{2588}\x{20}\x{20}\x{20}\x{2588}\x{2588}\x{2551}", "\x{255A}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2554}\x{255D}", "\x{20}\x{255A}\x{2550}\x{2550}\x{2550}\x{2550}\x{255D}\x{20}" ],
|
|
|
+ 'K' => [ "\x{2588}\x{2588}\x{2557}\x{20}\x{20}\x{2588}\x{2588}\x{2557}", "\x{2588}\x{2588}\x{2551}\x{20}\x{2588}\x{2588}\x{2554}\x{255D}", "\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2554}\x{255D}\x{20}", "\x{2588}\x{2588}\x{2554}\x{2550}\x{2588}\x{2588}\x{2557}\x{20}", "\x{2588}\x{2588}\x{2551}\x{20}\x{20}\x{2588}\x{2588}\x{2557}", "\x{255A}\x{2550}\x{255D}\x{20}\x{20}\x{255A}\x{2550}\x{255D}" ],
|
|
|
+ 'L' => [ "\x{2588}\x{2588}\x{2557}\x{20}\x{20}\x{20}\x{20}\x{20}", "\x{2588}\x{2588}\x{2551}\x{20}\x{20}\x{20}\x{20}\x{20}", "\x{2588}\x{2588}\x{2551}\x{20}\x{20}\x{20}\x{20}\x{20}", "\x{2588}\x{2588}\x{2551}\x{20}\x{20}\x{20}\x{20}\x{20}", "\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}", "\x{255A}\x{2550}\x{2550}\x{2550}\x{2550}\x{2550}\x{2550}\x{255D}" ],
|
|
|
+ 'M' => [ "\x{2588}\x{2588}\x{2588}\x{2557}\x{20}\x{20}\x{20}\x{2588}\x{2588}\x{2588}\x{2557}", "\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}\x{20}\x{2588}\x{2588}\x{2588}\x{2588}\x{2551}", "\x{2588}\x{2588}\x{2554}\x{2588}\x{2588}\x{2588}\x{2588}\x{2554}\x{2588}\x{2588}\x{2551}", "\x{2588}\x{2588}\x{2551}\x{255A}\x{2588}\x{2588}\x{2554}\x{255D}\x{2588}\x{2588}\x{2551}", "\x{2588}\x{2588}\x{2551}\x{20}\x{255A}\x{2550}\x{255D}\x{20}\x{2588}\x{2588}\x{2551}", "\x{255A}\x{2550}\x{255D}\x{20}\x{20}\x{20}\x{20}\x{20}\x{255A}\x{2550}\x{255D}" ],
|
|
|
+ 'N' => [ "\x{2588}\x{2588}\x{2588}\x{2557}\x{20}\x{20}\x{20}\x{2588}\x{2588}\x{2557}", "\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}\x{20}\x{20}\x{2588}\x{2588}\x{2551}", "\x{2588}\x{2588}\x{2554}\x{2588}\x{2588}\x{2557}\x{20}\x{2588}\x{2588}\x{2551}", "\x{2588}\x{2588}\x{2551}\x{255A}\x{2588}\x{2588}\x{2557}\x{2588}\x{2588}\x{2551}", "\x{2588}\x{2588}\x{2551}\x{20}\x{255A}\x{2588}\x{2588}\x{2588}\x{2588}\x{2551}", "\x{255A}\x{2550}\x{255D}\x{20}\x{20}\x{255A}\x{2550}\x{2550}\x{2550}\x{255D}" ],
|
|
|
+ 'O' => [ "\x{20}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}\x{20}", "\x{2588}\x{2588}\x{2554}\x{2550}\x{2550}\x{2550}\x{2588}\x{2588}\x{2557}", "\x{2588}\x{2588}\x{2551}\x{20}\x{20}\x{20}\x{2588}\x{2588}\x{2551}", "\x{2588}\x{2588}\x{2551}\x{20}\x{20}\x{20}\x{2588}\x{2588}\x{2551}", "\x{255A}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2554}\x{255D}", "\x{20}\x{255A}\x{2550}\x{2550}\x{2550}\x{2550}\x{2550}\x{255D}\x{20}" ],
|
|
|
+ 'P' => [ "\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}\x{20}", "\x{2588}\x{2588}\x{2554}\x{2550}\x{2550}\x{2588}\x{2588}\x{2557}", "\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2554}\x{255D}", "\x{2588}\x{2588}\x{2554}\x{2550}\x{2550}\x{2550}\x{255D}\x{20}", "\x{2588}\x{2588}\x{2551}\x{20}\x{20}\x{20}\x{20}\x{20}", "\x{255A}\x{2550}\x{255D}\x{20}\x{20}\x{20}\x{20}\x{20}" ],
|
|
|
+ 'Q' => [ "\x{20}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}", "\x{2588}\x{2588}\x{2554}\x{2550}\x{2550}\x{2550}\x{2588}\x{2588}\x{2557}", "\x{2588}\x{2588}\x{2551}\x{20}\x{20}\x{20}\x{2588}\x{2588}\x{2551}", "\x{2588}\x{2588}\x{2551}\x{2584}\x{2584}\x{20}\x{2588}\x{2588}\x{2551}", "\x{255A}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2554}\x{255D}", "\x{20}\x{255A}\x{2550}\x{2550}\x{2580}\x{2580}\x{2550}\x{255D}\x{20}" ],
|
|
|
+ 'R' => [ "\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}\x{20}", "\x{2588}\x{2588}\x{2554}\x{2550}\x{2550}\x{2588}\x{2588}\x{2557}", "\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2554}\x{255D}", "\x{2588}\x{2588}\x{2554}\x{2550}\x{2550}\x{2588}\x{2588}\x{2557}", "\x{2588}\x{2588}\x{2551}\x{20}\x{20}\x{2588}\x{2588}\x{2551}", "\x{255A}\x{2550}\x{255D}\x{20}\x{20}\x{255A}\x{2550}\x{255D}" ],
|
|
|
+ 'S' => [ "\x{20}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}", "\x{2588}\x{2588}\x{2554}\x{2550}\x{2550}\x{2550}\x{2550}\x{255D}", "\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}", "\x{255A}\x{2550}\x{2550}\x{2550}\x{2550}\x{2588}\x{2588}\x{2551}", "\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2554}\x{255D}", "\x{255A}\x{2550}\x{2550}\x{2550}\x{2550}\x{2550}\x{255D}\x{20}" ],
|
|
|
+ 'T' => [ "\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}", "\x{255A}\x{2550}\x{2550}\x{2588}\x{2588}\x{2554}\x{2550}\x{2550}\x{255D}", "\x{20}\x{20}\x{20}\x{2588}\x{2588}\x{2551}\x{20}\x{20}\x{20}", "\x{20}\x{20}\x{20}\x{2588}\x{2588}\x{2551}\x{20}\x{20}\x{20}", "\x{20}\x{20}\x{20}\x{2588}\x{2588}\x{2551}\x{20}\x{20}\x{20}", "\x{20}\x{20}\x{20}\x{255A}\x{2550}\x{255D}\x{20}\x{20}\x{20}" ],
|
|
|
+ 'U' => [ "\x{2588}\x{2588}\x{2557}\x{20}\x{20}\x{20}\x{2588}\x{2588}\x{2557}", "\x{2588}\x{2588}\x{2551}\x{20}\x{20}\x{20}\x{2588}\x{2588}\x{2551}", "\x{2588}\x{2588}\x{2551}\x{20}\x{20}\x{20}\x{2588}\x{2588}\x{2551}", "\x{2588}\x{2588}\x{2551}\x{20}\x{20}\x{20}\x{2588}\x{2588}\x{2551}", "\x{255A}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2554}\x{255D}", "\x{20}\x{255A}\x{2550}\x{2550}\x{2550}\x{2550}\x{2550}\x{255D}\x{20}" ],
|
|
|
+ 'V' => [ "\x{2588}\x{2588}\x{2557}\x{20}\x{20}\x{20}\x{2588}\x{2588}\x{2557}", "\x{2588}\x{2588}\x{2551}\x{20}\x{20}\x{20}\x{2588}\x{2588}\x{2551}", "\x{2588}\x{2588}\x{2551}\x{20}\x{20}\x{20}\x{2588}\x{2588}\x{2551}", "\x{255A}\x{2588}\x{2588}\x{2557}\x{20}\x{2588}\x{2588}\x{2554}\x{255D}", "\x{20}\x{255A}\x{2588}\x{2588}\x{2588}\x{2588}\x{2554}\x{255D}\x{20}", "\x{20}\x{20}\x{255A}\x{2550}\x{2550}\x{2550}\x{255D}\x{20}\x{20}" ],
|
|
|
+ 'W' => [ "\x{2588}\x{2588}\x{2557}\x{20}\x{20}\x{20}\x{20}\x{2588}\x{2588}\x{2557}", "\x{2588}\x{2588}\x{2551}\x{20}\x{20}\x{20}\x{20}\x{2588}\x{2588}\x{2551}", "\x{2588}\x{2588}\x{2551}\x{20}\x{2588}\x{2557}\x{20}\x{2588}\x{2588}\x{2551}", "\x{2588}\x{2588}\x{2551}\x{2588}\x{2588}\x{2588}\x{2557}\x{2588}\x{2588}\x{2551}", "\x{255A}\x{2588}\x{2588}\x{2588}\x{2554}\x{2588}\x{2588}\x{2588}\x{2554}\x{255D}", "\x{20}\x{255A}\x{2550}\x{2550}\x{255D}\x{255A}\x{2550}\x{2550}\x{255D}\x{20}" ],
|
|
|
+ 'X' => [ "\x{2588}\x{2588}\x{2557}\x{20}\x{20}\x{2588}\x{2588}\x{2557}", "\x{255A}\x{2588}\x{2588}\x{2557}\x{2588}\x{2588}\x{2554}\x{255D}", "\x{20}\x{255A}\x{2588}\x{2588}\x{2588}\x{2554}\x{255D}\x{20}", "\x{20}\x{2588}\x{2588}\x{2554}\x{2588}\x{2588}\x{2557}\x{20}", "\x{2588}\x{2588}\x{2554}\x{255D}\x{20}\x{2588}\x{2588}\x{2557}", "\x{255A}\x{2550}\x{255D}\x{20}\x{20}\x{255A}\x{2550}\x{255D}" ],
|
|
|
+ 'Y' => [ "\x{2588}\x{2588}\x{2557}\x{20}\x{20}\x{20}\x{2588}\x{2588}\x{2557}", "\x{255A}\x{2588}\x{2588}\x{2557}\x{20}\x{2588}\x{2588}\x{2554}\x{255D}", "\x{20}\x{255A}\x{2588}\x{2588}\x{2588}\x{2588}\x{2554}\x{255D}\x{20}", "\x{20}\x{20}\x{255A}\x{2588}\x{2588}\x{2554}\x{255D}\x{20}\x{20}", "\x{20}\x{20}\x{20}\x{2588}\x{2588}\x{2551}\x{20}\x{20}\x{20}", "\x{20}\x{20}\x{20}\x{255A}\x{2550}\x{255D}\x{20}\x{20}\x{20}" ],
|
|
|
+ 'Z' => [ "\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}", "\x{255A}\x{2550}\x{2550}\x{2588}\x{2588}\x{2588}\x{2554}\x{255D}", "\x{20}\x{20}\x{2588}\x{2588}\x{2588}\x{2554}\x{255D}\x{20}", "\x{20}\x{2588}\x{2588}\x{2588}\x{2554}\x{255D}\x{20}\x{20}", "\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}", "\x{255A}\x{2550}\x{2550}\x{2550}\x{2550}\x{2550}\x{2550}\x{255D}" ],
|
|
|
+ ' ' => [ "\x{20}\x{20}\x{20}\x{20}", "\x{20}\x{20}\x{20}\x{20}", "\x{20}\x{20}\x{20}\x{20}", "\x{20}\x{20}\x{20}\x{20}", "\x{20}\x{20}\x{20}\x{20}", "\x{20}\x{20}\x{20}\x{20}" ],
|
|
|
+ '.' => [ "\x{20}\x{20}\x{20}", "\x{20}\x{20}\x{20}", "\x{20}\x{20}\x{20}", "\x{20}\x{20}\x{20}", "\x{2588}\x{2588}\x{2557}", "\x{255A}\x{2550}\x{255D}" ],
|
|
|
+ ',' => [ "\x{20}\x{20}\x{20}", "\x{20}\x{20}\x{20}", "\x{20}\x{20}\x{20}", "\x{20}\x{20}\x{20}", "\x{2584}\x{2588}\x{2557}", "\x{255A}\x{2550}\x{255D}" ],
|
|
|
+ '/' => [ "\x{20}\x{20}\x{20}\x{20}\x{2588}\x{2588}\x{2557}", "\x{20}\x{20}\x{20}\x{2588}\x{2588}\x{2554}\x{255D}", "\x{20}\x{20}\x{2588}\x{2588}\x{2554}\x{255D}\x{20}", "\x{20}\x{2588}\x{2588}\x{2554}\x{255D}\x{20}\x{20}", "\x{2588}\x{2588}\x{2554}\x{255D}\x{20}\x{20}\x{20}", "\x{255A}\x{2550}\x{255D}\x{20}\x{20}\x{20}\x{20}" ],
|
|
|
+ '!' => [ "\x{2588}\x{2588}\x{2557}", "\x{2588}\x{2588}\x{2551}", "\x{2588}\x{2588}\x{2551}", "\x{255A}\x{2550}\x{255D}", "\x{2588}\x{2588}\x{2557}", "\x{255A}\x{2550}\x{255D}" ],
|
|
|
+ '0' => [ "\x{20}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}\x{20}", "\x{2588}\x{2588}\x{2554}\x{2550}\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}", "\x{2588}\x{2588}\x{2551}\x{2588}\x{2588}\x{2554}\x{2588}\x{2588}\x{2551}", "\x{2588}\x{2588}\x{2588}\x{2588}\x{2554}\x{255D}\x{2588}\x{2588}\x{2551}", "\x{255A}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2554}\x{255D}", "\x{20}\x{255A}\x{2550}\x{2550}\x{2550}\x{2550}\x{2550}\x{255D}\x{20}" ],
|
|
|
+ '1' => [ "\x{20}\x{2588}\x{2588}\x{2557}", "\x{2588}\x{2588}\x{2588}\x{2551}", "\x{255A}\x{2588}\x{2588}\x{2551}", "\x{20}\x{2588}\x{2588}\x{2551}", "\x{20}\x{2588}\x{2588}\x{2551}", "\x{20}\x{255A}\x{2550}\x{255D}" ],
|
|
|
+ '2' => [ "\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}\x{20}", "\x{255A}\x{2550}\x{2550}\x{2550}\x{2550}\x{2588}\x{2588}\x{2557}", "\x{20}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2554}\x{255D}", "\x{2588}\x{2588}\x{2554}\x{2550}\x{2550}\x{2550}\x{255D}\x{20}", "\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}", "\x{255A}\x{2550}\x{2550}\x{2550}\x{2550}\x{2550}\x{2550}\x{255D}" ],
|
|
|
+ '3' => [ "\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}\x{20}", "\x{255A}\x{2550}\x{2550}\x{2550}\x{2550}\x{2588}\x{2588}\x{2557}", "\x{20}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2554}\x{255D}", "\x{20}\x{255A}\x{2550}\x{2550}\x{2550}\x{2588}\x{2588}\x{2557}", "\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2554}\x{255D}", "\x{255A}\x{2550}\x{2550}\x{2550}\x{2550}\x{2550}\x{255D}\x{20}" ],
|
|
|
+ '4' => [ "\x{2588}\x{2588}\x{2557}\x{20}\x{20}\x{2588}\x{2588}\x{2557}", "\x{2588}\x{2588}\x{2551}\x{20}\x{20}\x{2588}\x{2588}\x{2551}", "\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2551}", "\x{255A}\x{2550}\x{2550}\x{2550}\x{2550}\x{2588}\x{2588}\x{2551}", "\x{20}\x{20}\x{20}\x{20}\x{20}\x{2588}\x{2588}\x{2551}", "\x{20}\x{20}\x{20}\x{20}\x{20}\x{255A}\x{2550}\x{255D}" ],
|
|
|
+ '5' => [ "\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}", "\x{2588}\x{2588}\x{2554}\x{2550}\x{2550}\x{2550}\x{2550}\x{255D}", "\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}", "\x{255A}\x{2550}\x{2550}\x{2550}\x{2550}\x{2588}\x{2588}\x{2551}", "\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2551}", "\x{255A}\x{2550}\x{2550}\x{2550}\x{2550}\x{2550}\x{2550}\x{255D}" ],
|
|
|
+ '6' => [ "\x{20}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}\x{20}", "\x{2588}\x{2588}\x{2554}\x{2550}\x{2550}\x{2550}\x{2550}\x{255D}\x{20}", "\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}\x{20}", "\x{2588}\x{2588}\x{2554}\x{2550}\x{2550}\x{2550}\x{2588}\x{2588}\x{2557}", "\x{255A}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2554}\x{255D}", "\x{20}\x{255A}\x{2550}\x{2550}\x{2550}\x{2550}\x{2550}\x{255D}\x{20}" ],
|
|
|
+ '7' => [ "\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}", "\x{255A}\x{2550}\x{2550}\x{2550}\x{2550}\x{2588}\x{2588}\x{2551}", "\x{20}\x{20}\x{20}\x{20}\x{2588}\x{2588}\x{2554}\x{255D}", "\x{20}\x{20}\x{20}\x{2588}\x{2588}\x{2554}\x{255D}\x{20}", "\x{20}\x{20}\x{20}\x{2588}\x{2588}\x{2551}\x{20}\x{20}", "\x{20}\x{20}\x{20}\x{255A}\x{2550}\x{255D}\x{20}\x{20}" ],
|
|
|
+ '8' => [ "\x{20}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}\x{20}", "\x{2588}\x{2588}\x{2554}\x{2550}\x{2550}\x{2588}\x{2588}\x{2557}", "\x{255A}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2554}\x{255D}", "\x{2588}\x{2588}\x{2554}\x{2550}\x{2550}\x{2588}\x{2588}\x{2557}", "\x{255A}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2554}\x{255D}", "\x{20}\x{255A}\x{2550}\x{2550}\x{2550}\x{2550}\x{255D}\x{20}" ],
|
|
|
+ '9' => [ "\x{20}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2557}\x{20}", "\x{2588}\x{2588}\x{2554}\x{2550}\x{2550}\x{2588}\x{2588}\x{2557}", "\x{255A}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2551}", "\x{20}\x{255A}\x{2550}\x{2550}\x{2550}\x{2588}\x{2588}\x{2551}", "\x{20}\x{2588}\x{2588}\x{2588}\x{2588}\x{2588}\x{2554}\x{255D}", "\x{20}\x{255A}\x{2550}\x{2550}\x{2550}\x{2550}\x{255D}\x{20}" ],
|
|
|
+);
|
|
|
+
|
|
|
+sub print_big_ascii_string {
|
|
|
+ my $fh = shift;
|
|
|
+ my $str = shift;
|
|
|
+ my $comment = shift;
|
|
|
+ my $lowascii = shift;
|
|
|
+ $comment = '' if not defined $comment;
|
|
|
+ $lowascii = 0 if not defined $lowascii;
|
|
|
+
|
|
|
+ my @chars = split //, $str;
|
|
|
+ my $charcount = scalar(@chars);
|
|
|
+
|
|
|
+ binmode($fh, ":utf8");
|
|
|
+
|
|
|
+ my $maxrows = $lowascii ? 5 : 6;
|
|
|
+
|
|
|
+ for(my $rownum = 0; $rownum < $maxrows; $rownum++){
|
|
|
+ print $fh $comment;
|
|
|
+ my $charidx = 0;
|
|
|
+ foreach my $ch (@chars) {
|
|
|
+ my $rowsref = $big_ascii{uc($ch)};
|
|
|
+ die("Don't have a big ascii entry for '$ch'!\n") if not defined $rowsref;
|
|
|
+ my $row = @$rowsref[$rownum];
|
|
|
+
|
|
|
+ if ($lowascii) {
|
|
|
+ my @x = split //, $row;
|
|
|
+ foreach (@x) {
|
|
|
+ my $v = ($_ eq "\x{2588}") ? 'X' : ' ';
|
|
|
+ print $fh $v;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ print $fh $row;
|
|
|
+ }
|
|
|
+
|
|
|
+ $charidx++;
|
|
|
+
|
|
|
+ if ($charidx < $charcount) {
|
|
|
+ print $fh " ";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ print $fh "\n";
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+sub generate_quickref {
|
|
|
+ my $briefsref = shift;
|
|
|
+ my $path = shift;
|
|
|
+ my $lowascii = shift;
|
|
|
+
|
|
|
+ # !!! FIXME: this gitrev and majorver/etc stuff is copy/pasted a few times now.
|
|
|
+ if (!$gitrev) {
|
|
|
+ $gitrev = `cd "$srcpath" ; git rev-list HEAD~..`;
|
|
|
+ chomp($gitrev);
|
|
|
+ }
|
|
|
+
|
|
|
+ # !!! FIXME
|
|
|
+ open(FH, '<', "$srcpath/$versionfname") or die("Can't open '$srcpath/$versionfname': $!\n");
|
|
|
+ my $majorver = 0;
|
|
|
+ my $minorver = 0;
|
|
|
+ my $microver = 0;
|
|
|
+ while (<FH>) {
|
|
|
+ chomp;
|
|
|
+ if (/$versionmajorregex/) {
|
|
|
+ $majorver = int($1);
|
|
|
+ } elsif (/$versionminorregex/) {
|
|
|
+ $minorver = int($1);
|
|
|
+ } elsif (/$versionmicroregex/) {
|
|
|
+ $microver = int($1);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ close(FH);
|
|
|
+ my $fullversion = "$majorver.$minorver.$microver";
|
|
|
+
|
|
|
+ my $tmppath = "$path.tmp";
|
|
|
+ open(my $fh, '>', $tmppath) or die("Can't open '$tmppath': $!\n");
|
|
|
+
|
|
|
+ if (not @quickrefcategoryorder) {
|
|
|
+ @quickrefcategoryorder = sort keys %headercategorydocs;
|
|
|
+ }
|
|
|
+
|
|
|
+ #my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = gmtime(time);
|
|
|
+ #my $datestr = sprintf("%04d-%02d-%02d %02d:%02d:%02d GMT", $year+1900, $mon+1, $mday, $hour, $min, $sec);
|
|
|
+
|
|
|
+ print $fh "<!-- DO NOT EDIT THIS PAGE ON THE WIKI. IT WILL BE OVERWRITTEN BY WIKIHEADERS AND CHANGES WILL BE LOST! -->\n\n";
|
|
|
+
|
|
|
+ # Just something to test big_ascii output.
|
|
|
+ #print_big_ascii_string($fh, "ABCDEFGHIJ", $lowascii);
|
|
|
+ #print_big_ascii_string($fh, "KLMNOPQRST", $lowascii);
|
|
|
+ #print_big_ascii_string($fh, "UVWXYZ0123", $lowascii);
|
|
|
+ #print_big_ascii_string($fh, "456789JT3A", $lowascii);
|
|
|
+ #print_big_ascii_string($fh, "hello, a.b/c!!", $lowascii);
|
|
|
+
|
|
|
+ # Dan Bechard's work was on an SDL2 cheatsheet:
|
|
|
+ # https://blog.theprogrammingjunkie.com/post/sdl2-cheatsheet/
|
|
|
+
|
|
|
+ if ($lowascii) {
|
|
|
+ print $fh "If you want to paste this into a text editor that can handle\n";
|
|
|
+ print $fh "fancy Unicode section headers, try using\n";
|
|
|
+ print $fh "[QuickReference](QuickReference) instead.\n\n";
|
|
|
+ } else {
|
|
|
+ print $fh "If you want to paste this into a text editor that can't handle\n";
|
|
|
+ print $fh "the fancy Unicode section headers, try using\n";
|
|
|
+ print $fh "[QuickReferenceNoUnicode](QuickReferenceNoUnicode) instead.\n\n";
|
|
|
+ }
|
|
|
+
|
|
|
+ print $fh "```c\n";
|
|
|
+ print $fh "// $quickreftitle\n" if defined $quickreftitle;
|
|
|
+ print $fh "//\n";
|
|
|
+ print $fh "// $quickrefurl\n//\n" if defined $quickrefurl;
|
|
|
+ print $fh "// $quickrefdesc\n" if defined $quickrefdesc;
|
|
|
+ #print $fh "// When this document was written: $datestr\n";
|
|
|
+ print $fh "// Based on $projectshortname version $fullversion\n";
|
|
|
+ #print $fh "// git revision $gitrev\n";
|
|
|
+ print $fh "//\n";
|
|
|
+ print $fh "// This can be useful in an IDE with search and syntax highlighting.\n";
|
|
|
+ print $fh "//\n";
|
|
|
+ print $fh "// Original idea for this document came from Dan Bechard (thanks!)\n";
|
|
|
+ print $fh "// ASCII art generated by: https://patorjk.com/software/taag/#p=display&f=ANSI%20Shadow (with modified 'S' for readability)\n\n";
|
|
|
+
|
|
|
+ foreach (@quickrefcategoryorder) {
|
|
|
+ my $cat = $_;
|
|
|
+ my $maxlen = 0;
|
|
|
+ my @csigs = ();
|
|
|
+ my $funcorderref = $quickreffuncorder{$cat};
|
|
|
+ next if not defined $funcorderref;
|
|
|
+
|
|
|
+ foreach (@$funcorderref) {
|
|
|
+ my $sym = $_;
|
|
|
+ my $csig = '';
|
|
|
+
|
|
|
+ if ($headersymstype{$sym} == 1) { # function
|
|
|
+ $csig = "${headersymsrettype{$sym}} $sym";
|
|
|
+ my $fnsigparams = $headersymsparaminfo{$sym};
|
|
|
+ if (not defined($fnsigparams)) {
|
|
|
+ $csig .= '(void);';
|
|
|
+ } else {
|
|
|
+ my $sep = '(';
|
|
|
+ for (my $i = 0; $i < scalar(@$fnsigparams); $i += 2) {
|
|
|
+ my $paramname = @$fnsigparams[$i];
|
|
|
+ my $paramtype = @$fnsigparams[$i+1];
|
|
|
+ my $spc = ($paramtype =~ /\*\Z/) ? '' : ' ';
|
|
|
+ $csig .= "$sep$paramtype$spc$paramname";
|
|
|
+ $sep = ', ';
|
|
|
+ }
|
|
|
+ $csig .= ");";
|
|
|
+ }
|
|
|
+ } elsif ($headersymstype{$sym} == 2) { # macro
|
|
|
+ next if defined $quickrefmacroregex && not $sym =~ /$quickrefmacroregex/;
|
|
|
+
|
|
|
+ $csig = (split /\n/, $headerdecls{$sym})[0]; # get the first line from a multiline string.
|
|
|
+ if (not $csig =~ s/\A(\#define [a-zA-Z0-9_]*\(.*?\))(\s+.*)?\Z/$1/) {
|
|
|
+ $csig =~ s/\A(\#define [a-zA-Z0-9_]*)(\s+.*)?\Z/$1/;
|
|
|
+ }
|
|
|
+ chomp($csig);
|
|
|
+ }
|
|
|
+
|
|
|
+ my $len = length($csig);
|
|
|
+ $maxlen = $len if $len > $maxlen;
|
|
|
+
|
|
|
+ push @csigs, $sym;
|
|
|
+ push @csigs, $csig;
|
|
|
+ }
|
|
|
+
|
|
|
+ $maxlen += 2;
|
|
|
+
|
|
|
+ next if (not @csigs);
|
|
|
+
|
|
|
+ print $fh "\n";
|
|
|
+ print_big_ascii_string($fh, $cat, '// ', $lowascii);
|
|
|
+ print $fh "\n";
|
|
|
+
|
|
|
+ while (@csigs) {
|
|
|
+ my $sym = shift @csigs;
|
|
|
+ my $csig = shift @csigs;
|
|
|
+ my $brief = $$briefsref{$sym};
|
|
|
+ if (defined $brief) {
|
|
|
+ $brief = "$brief";
|
|
|
+ chomp($brief);
|
|
|
+ $brief = dewikify($wikitypes{$sym}, $brief);
|
|
|
+ my $spaces = ' ' x ($maxlen - length($csig));
|
|
|
+ $brief = "$spaces// $brief";
|
|
|
+ } else {
|
|
|
+ $brief = '';
|
|
|
+ }
|
|
|
+ print $fh "$csig$brief\n";
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ print $fh "```\n\n";
|
|
|
+
|
|
|
+ close($fh);
|
|
|
+
|
|
|
+# # Don't overwrite the file if nothing has changed besides the timestamp
|
|
|
+# # and git revision.
|
|
|
+# my $matches = 1;
|
|
|
+# if ( not -f $path ) {
|
|
|
+# $matches = 0; # always write if the file hasn't been created yet.
|
|
|
+# } else {
|
|
|
+# open(my $fh_a, '<', $tmppath) or die("Can't open '$tmppath': $!\n");
|
|
|
+# open(my $fh_b, '<', $path) or die("Can't open '$path': $!\n");
|
|
|
+# while (1) {
|
|
|
+# my $a = <$fh_a>;
|
|
|
+# my $b = <$fh_b>;
|
|
|
+# $matches = 0, last if ((not defined $a) != (not defined $b));
|
|
|
+# last if ((not defined $a) || (not defined $b));
|
|
|
+# if ($a ne $b) {
|
|
|
+# next if ($a =~ /\A\/\/ When this document was written:/);
|
|
|
+# next if ($a =~ /\A\/\/ git revision /);
|
|
|
+# $matches = 0;
|
|
|
+# last;
|
|
|
+# }
|
|
|
+# }
|
|
|
+#
|
|
|
+# close($fh_a);
|
|
|
+# close($fh_b);
|
|
|
+# }
|
|
|
+#
|
|
|
+# if ($matches) {
|
|
|
+# unlink($tmppath); # it's the same file except maybe the date/gitrev. Don't overwrite it.
|
|
|
+# } else {
|
|
|
+# rename($tmppath, $path) or die("Can't rename '$tmppath' to '$path': $!\n");
|
|
|
+# }
|
|
|
+ rename($tmppath, $path) or die("Can't rename '$tmppath' to '$path': $!\n");
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
my $incpath = "$srcpath";
|
|
|
$incpath .= "/$incsubdir" if $incsubdir ne '';
|
|
|
|
|
@@ -749,10 +1031,12 @@ while (my $d = readdir(DH)) {
|
|
|
}
|
|
|
|
|
|
my @contents = ();
|
|
|
+ my @function_order = ();
|
|
|
my $ignoring_lines = 0;
|
|
|
my $header_comment = -1;
|
|
|
my $saw_category_doxygen = -1;
|
|
|
my $lineno = 0;
|
|
|
+
|
|
|
while (<FH>) {
|
|
|
chomp;
|
|
|
$lineno++;
|
|
@@ -1073,7 +1357,6 @@ while (my $d = readdir(DH)) {
|
|
|
}
|
|
|
}
|
|
|
$decl .= $additional_decl;
|
|
|
-
|
|
|
} elsif ($symtype == 2) { # a macro
|
|
|
if ($decl =~ /\A\s*\#\s*define\s+(.*?)(\(.*?\)|)\s+/) {
|
|
|
$sym = $1;
|
|
@@ -1301,6 +1584,7 @@ while (my $d = readdir(DH)) {
|
|
|
$headersymstype{$sym} = $symtype;
|
|
|
$headersymsparaminfo{$sym} = \@paraminfo if (scalar(@paraminfo) > 0);
|
|
|
$headersymsrettype{$sym} = $rettype if (defined($rettype));
|
|
|
+ push @function_order, $sym if ($symtype == 1) || ($symtype == 2);
|
|
|
push @contents, join("\n", @templines);
|
|
|
push @contents, join("\n", @decllines) if (scalar(@decllines) > 0);
|
|
|
}
|
|
@@ -1309,6 +1593,7 @@ while (my $d = readdir(DH)) {
|
|
|
close(FH);
|
|
|
|
|
|
$headers{$dent} = \@contents;
|
|
|
+ $quickreffuncorder{$current_wiki_category} = \@function_order if defined $current_wiki_category;
|
|
|
}
|
|
|
closedir(DH);
|
|
|
|
|
@@ -1785,6 +2070,8 @@ if ($copy_direction == 1) { # --copy-to-headers
|
|
|
|
|
|
} elsif ($copy_direction == -1) { # --copy-to-wiki
|
|
|
|
|
|
+ my %briefs = (); # $briefs{'SDL_OpenAudio'} -> the \brief string for the function.
|
|
|
+
|
|
|
if (defined $changeformat) {
|
|
|
$dewikify_mode = $changeformat;
|
|
|
$wordwrap_mode = $changeformat;
|
|
@@ -1856,6 +2143,8 @@ if ($copy_direction == 1) { # --copy-to-headers
|
|
|
$sections{'Remarks'} = "$remarks\n" if $remarks ne '';
|
|
|
$sections{'Syntax'} = $syntax;
|
|
|
|
|
|
+ $briefs{$sym} = $brief;
|
|
|
+
|
|
|
my %params = (); # have to parse these and build up the wiki tables after, since Markdown needs to know the length of the largest string. :/
|
|
|
my @paramsorder = ();
|
|
|
my $fnsigparams = $headersymsparaminfo{$sym};
|
|
@@ -2415,6 +2704,11 @@ __EOF__
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ # Write out quick reference pages...
|
|
|
+ if ($quickrefenabled) {
|
|
|
+ generate_quickref(\%briefs, "$wikipath/QuickReference.md", 0);
|
|
|
+ generate_quickref(\%briefs, "$wikipath/QuickReferenceNoUnicode.md", 1);
|
|
|
+ }
|
|
|
} elsif ($copy_direction == -2) { # --copy-to-manpages
|
|
|
# This only takes from the wiki data, since it has sections we omit from the headers, like code examples.
|
|
|
|