@@ -424,7 +424,10 @@ sub dewikify_chunk {
424
424
$str .= " \n ```$codelang \n $code \n ```\n " ;
425
425
}
426
426
} elsif ($dewikify_mode eq ' manpage' ) {
427
- $str =~ s /\. / \\ [char46]/ gms ; # make sure these can't become control codes.
427
+ # make sure these can't become part of roff syntax.
428
+ $str =~ s /\. / \\ [char46]/ gms ;
429
+ $str =~ s / "/ \\ (dq/ gms ;
430
+
428
431
if ($wikitype eq ' mediawiki' ) {
429
432
# Dump obvious wikilinks.
430
433
if (defined $apiprefixregex ) {
@@ -449,33 +452,52 @@ sub dewikify_chunk {
449
452
# bullets
450
453
$str =~ s / ^\* / \n\\\( bu / gm ;
451
454
} elsif ($wikitype eq ' md' ) {
455
+ # bullets
456
+ $str =~ s / ^\- / \n\\ (bu / gm ;
457
+ # merge paragraphs
458
+ $str =~ s / ^[ \t ]+// gm ;
459
+ $str =~ s / ([^\-\n ])\n ([^\-\n ])/ $1 $2 / g ;
460
+ $str =~ s /\n\n / \n .PP\n / g ;
461
+
452
462
# Dump obvious wikilinks.
453
463
if (defined $apiprefixregex ) {
454
- $str =~ s /\[ (\` ?$apiprefixregex[a-zA-Z0-9_]+\` ?)\]\( $apiprefixregex[a-zA-Z0-9_]+\) / \n .BR $1 \n / gms ;
464
+ my $apr = $apiprefixregex ;
465
+ if (!($apr =~ / \A\( .*\)\Z /s )) {
466
+ # we're relying on the apiprefixregex having a capturing group.
467
+ $apr = " (" . $apr . " )" ;
468
+ }
469
+ $str =~ s / (\S *?)\[\` ?($apr[a-zA-Z0-9_]+)\` ?\]\( $apr[a-zA-Z0-9_]+\) (\S *)\s */ \n .BR "" "$1 " "$2 " "$5 "\n / gm ;
470
+ # handle cases like "[x](x), [y](y), [z](z)" being separated.
471
+ while ($str =~ s / (\. BR[^\n ]*)\n\n\. BR/ $1 \n .BR/ gm ) {}
455
472
}
456
473
457
474
# links
458
475
$str =~ s /\[ (.*?)]\( (https?\:\/\/ .*?)\) / \n .URL "$2 " "$1 "\n / g ;
459
476
460
477
# <code></code> is also popular. :/
461
- $str =~ s /\s *\` (. *?)\`\ s */ \n .BR $1 \n / gms ;
478
+ $str =~ s /\s *( \S *?) \` ([^ \n ] *?)\` ( \S *) \ s */ \n .BR "" " $1 " " $2 " " $3 " \n / gms ;
462
479
463
480
# bold+italic (this looks bad, just make it bold).
464
- $str =~ s /\s *\* \*\*(. *?)\*\*\*\ s */ \n .B $1 \n / gms ;
481
+ $str =~ s /\s *( \S *?) \*\*\* ([^ \n ] *?)\*\*\* ( \S *) \ s */ \n .BR "" " $1 " " $2 " " $3 " \n / gms ;
465
482
466
483
# bold
467
- $str =~ s /\s *\*\* (. *?)\*\*\ s */ \n .B $1 \n / gms ;
484
+ $str =~ s /\s *( \S *?) \*\* ([^ \n ] *?)\*\* ( \S *) \ s */ \n .BR "" " $1 " " $2 " " $3 " \n / gms ;
468
485
469
486
# italic
470
- $str =~ s /\s *\* (.*?)\*\s */ \n .I $1 \n / gms ;
471
-
472
- # bullets
473
- $str =~ s / ^\- / \n\\\( bu / gm ;
487
+ $str =~ s /\s *(\S *?)\* ([^\n ]*?)\* (\S *)\s */ \n .IR "" "$1 " "$2 " "$3 "\n / gms ;
474
488
}
475
489
490
+ # cleanup unnecessary quotes
491
+ $str =~ s / (\. [IB]R?)(.*?) ""\n / $1$2 \n / gm ;
492
+ $str =~ s / (\. [IB]R?) "" ""(.*?)\n / $1$2 \n / gm ;
493
+ $str =~ s / "(\S +)"/ $1 / gm ;
494
+ # cleanup unnecessary whitespace
495
+ $str =~ s / +\n / \n / gm ;
496
+
476
497
if (defined $code ) {
477
498
$code =~ s /\A\n +// gms ;
478
499
$code =~ s /\n +\Z // gms ;
500
+ $code =~ s /\\ / \\ (rs/ gms ;
479
501
if ($dewikify_manpage_code_indent ) {
480
502
$str .= " \n .IP\n "
481
503
} else {
@@ -580,7 +602,7 @@ sub dewikify {
580
602
$retval .= dewikify_chunk($wikitype , $1 , $2 , $3 );
581
603
}
582
604
} elsif ($wikitype eq ' md' ) {
583
- while ($str =~ s /\A (.*?)\n ```(.*?)\n (.*?)\n ```\n // ms ) {
605
+ while ($str =~ s /\A (.*?)\n ? ```(.*?)\n (.*?)\n ```\n // ms ) {
584
606
$retval .= dewikify_chunk($wikitype , $1 , $2 , $3 );
585
607
}
586
608
}
@@ -2765,14 +2787,30 @@ sub generate_quickref {
2765
2787
my $wikitype = $wikitypes {$sym };
2766
2788
my $sectionsref = $wikisyms {$sym };
2767
2789
my $remarks = $sectionsref -> {' Remarks' };
2768
- my $params = $sectionsref -> {' Function Parameters' };
2769
2790
my $returns = $sectionsref -> {' Return Value' };
2770
2791
my $version = $sectionsref -> {' Version' };
2771
2792
my $threadsafety = $sectionsref -> {' Thread Safety' };
2772
2793
my $related = $sectionsref -> {' See Also' };
2773
2794
my $examples = $sectionsref -> {' Code Examples' };
2774
2795
my $deprecated = $sectionsref -> {' Deprecated' };
2775
2796
my $headerfile = $manpageheaderfiletext ;
2797
+
2798
+ my $params = undef ;
2799
+
2800
+ if ($symtype == -1) { # category documentation block.
2801
+ # nothing to be done here.
2802
+ } elsif (($symtype == 1) || (($symtype == 5))) { # we'll assume a typedef (5) with a \param is a function pointer typedef.
2803
+ $params = $sectionsref -> {' Function Parameters' };
2804
+ } elsif ($symtype == 2) {
2805
+ $params = $sectionsref -> {' Macro Parameters' };
2806
+ } elsif ($symtype == 3) {
2807
+ $params = $sectionsref -> {' Fields' };
2808
+ } elsif ($symtype == 4) {
2809
+ $params = $sectionsref -> {' Values' };
2810
+ } else {
2811
+ die (" Unexpected symtype $symtype " );
2812
+ }
2813
+
2776
2814
$headerfile =~ s /\% fname\% / $headersymslocation {$sym }/ g ;
2777
2815
$headerfile .= " \n " ;
2778
2816
@@ -2839,18 +2877,22 @@ sub generate_quickref {
2839
2877
$str .= dewikify($wikitype , $deprecated ) . " \n " ;
2840
2878
}
2841
2879
2880
+ my $incfile = $mainincludefname ;
2842
2881
if (defined $headerfile ) {
2843
- $str .= " .SH HEADER FILE\n " ;
2844
- $str .= dewikify($wikitype , $headerfile ) . " \n " ;
2882
+ if ($headerfile =~ / Defined in (.*)/ ) {
2883
+ $incfile = $1 ;
2884
+ }
2845
2885
}
2846
2886
2847
2887
$str .= " .SH SYNOPSIS\n " ;
2848
2888
$str .= " .nf\n " ;
2849
- $str .= " .B #include \\ (dq $mainincludefname \\ (dq \n " ;
2889
+ $str .= " .B #include < $incfile > \n " ;
2850
2890
$str .= " .PP\n " ;
2851
2891
2852
2892
my @decllines = split /\n/, $decl ;
2853
2893
foreach (@decllines ) {
2894
+ $_ =~ s /\\ / \\ (rs/ g ; # fix multiline macro defs
2895
+ $_ =~ s / "/ \\ (dq/ g ;
2854
2896
$str .= " .BI \" $_ \n " ;
2855
2897
}
2856
2898
$str .= " .fi\n " ;
@@ -2938,8 +2980,11 @@ sub generate_quickref {
2938
2980
}
2939
2981
2940
2982
if (defined $returns ) {
2983
+ # Chop datatype in parentheses off the front.
2984
+ if (!($returns =~ s /\A\( [^\[ ]*\[ [^\] ]*\]\( [^\) ]*\) [^\) ]*\) // ms )) {
2985
+ $returns =~ s /\A\( [^\) ]*\) // ms ;
2986
+ }
2941
2987
$returns = dewikify($wikitype , $returns );
2942
- $returns =~ s /\A\( .*?\)\s *// ; # Chop datatype in parentheses off the front.
2943
2988
$str .= " .SH RETURN VALUE\n " ;
2944
2989
$str .= " $returns \n " ;
2945
2990
}
@@ -2975,6 +3020,8 @@ sub generate_quickref {
2975
3020
s /\A\/ *// ;
2976
3021
s /\A\. BR\s +// ; # dewikify added this, but we want to handle it.
2977
3022
s /\A\. I\s +// ; # dewikify added this, but we want to handle it.
3023
+ s /\A\. PP\s *// ; # dewikify added this, but we want to handle it.
3024
+ s /\\\( bu// ; # dewikify added this, but we want to handle it.
2978
3025
s /\A\s *[\:\*\- ]\s *// ;
2979
3026
s /\A\s +// ;
2980
3027
s /\s +\Z // ;
0 commit comments