tools/pcre/132html
author Ruben Gonzalez <drifter01620@gmail.com>
Thu May 22 09:49:27 2014 -0400 (2014-05-22)
changeset 4378 568f4497ef4a
parent 3831 babd0eee3c5e
permissions -rwxr-xr-x
Update CS:GO team score gamedata.
dvander@2762
     1
#! /usr/bin/perl -w
dvander@2762
     2
dvander@2762
     3
# Script to turn PCRE man pages into HTML
dvander@2762
     4
dvander@2762
     5
dvander@2762
     6
# Subroutine to handle font changes and other escapes
dvander@2762
     7
dvander@2762
     8
sub do_line {
dvander@2762
     9
my($s) = $_[0];
dvander@2762
    10
dvander@2762
    11
$s =~ s/</&#60;/g;                   # Deal with < and >
dvander@2762
    12
$s =~ s/>/&#62;/g;
dvander@2762
    13
$s =~ s"\\fI(.*?)\\f[RP]"<i>$1</i>"g;
dvander@2762
    14
$s =~ s"\\fB(.*?)\\f[RP]"<b>$1</b>"g;
dvander@2762
    15
$s =~ s"\\e"\\"g;
dvander@2762
    16
$s =~ s/(?<=Copyright )\(c\)/&copy;/g;
dvander@2762
    17
$s;
dvander@2762
    18
}
dvander@2762
    19
dvander@2762
    20
# Subroutine to ensure not in a paragraph
dvander@2762
    21
dvander@2762
    22
sub end_para {
dvander@2762
    23
if ($inpara)
dvander@2762
    24
  {
dvander@2762
    25
  print TEMP "</PRE>\n" if ($inpre);
dvander@2762
    26
  print TEMP "</P>\n";
dvander@2762
    27
  }
dvander@2762
    28
$inpara = $inpre = 0;
dvander@2762
    29
$wrotetext = 0;
dvander@2762
    30
}
dvander@2762
    31
dvander@2762
    32
# Subroutine to start a new paragraph
dvander@2762
    33
dvander@2762
    34
sub new_para {
dvander@2762
    35
&end_para();
dvander@2762
    36
print TEMP "<P>\n";
dvander@2762
    37
$inpara = 1;
dvander@2762
    38
}
dvander@2762
    39
dvander@2762
    40
dvander@2762
    41
# Main program
dvander@2762
    42
dvander@2762
    43
$innf = 0;
dvander@2762
    44
$inpara = 0;
dvander@2762
    45
$inpre = 0;
dvander@2762
    46
$wrotetext = 0;
dvander@2762
    47
$toc = 0;
dvander@2762
    48
$ref = 1;
dvander@2762
    49
dvander@2762
    50
while ($#ARGV >= 0 && $ARGV[0] =~ /^-/)
dvander@2762
    51
  {
dvander@2762
    52
  $toc = 1 if $ARGV[0] eq "-toc";
dvander@2762
    53
  shift;
dvander@2762
    54
  }
dvander@2762
    55
dvander@2762
    56
# Initial output to STDOUT
dvander@2762
    57
dvander@2762
    58
print <<End ;
dvander@2762
    59
<html>
dvander@2762
    60
<head>
dvander@2762
    61
<title>$ARGV[0] specification</title>
dvander@2762
    62
</head>
dvander@2762
    63
<body bgcolor="#FFFFFF" text="#00005A" link="#0066FF" alink="#3399FF" vlink="#2222BB">
dvander@2762
    64
<h1>$ARGV[0] man page</h1>
dvander@2762
    65
<p>
dvander@2762
    66
Return to the <a href="index.html">PCRE index page</a>.
dvander@2762
    67
</p>
dvander@2762
    68
<p>
dvander@2762
    69
This page is part of the PCRE HTML documentation. It was generated automatically
dvander@2762
    70
from the original man page. If there is any nonsense in it, please consult the
dvander@2762
    71
man page, in case the conversion went wrong.
dvander@2762
    72
<br>
dvander@2762
    73
End
dvander@2762
    74
dvander@2762
    75
print "<ul>\n" if ($toc);
dvander@2762
    76
dvander@2762
    77
open(TEMP, ">/tmp/$$") || die "Can't open /tmp/$$ for output\n";
dvander@2762
    78
dvander@2762
    79
while (<STDIN>)
dvander@2762
    80
  {
dvander@2762
    81
  # Handle lines beginning with a dot
dvander@2762
    82
dvander@2762
    83
  if (/^\./)
dvander@2762
    84
    {
dvander@2762
    85
    # Some of the PCRE man pages used to contain instances of .br. However,
dvander@2762
    86
    # they should have all been removed because they cause trouble in some
dvander@2762
    87
    # (other) automated systems that translate man pages to HTML. Complain if
dvander@2762
    88
    # we find .br or .in (another macro that is deprecated).
dvander@2762
    89
dvander@2762
    90
    if (/^\.br/ || /^\.in/)
dvander@2762
    91
      {
dvander@2762
    92
      print STDERR "\n*** Deprecated macro encountered - rewrite needed\n";
dvander@2762
    93
      print STDERR "*** $_\n";
dvander@2762
    94
      die "*** Processing abandoned\n";
dvander@2762
    95
      }
dvander@2762
    96
dvander@2762
    97
    # Instead of .br, relevent "literal" sections are enclosed in .nf/.fi.
dvander@2762
    98
dvander@2762
    99
    elsif (/^\.nf/)
dvander@2762
   100
      {
dvander@2762
   101
      $innf = 1;
dvander@2762
   102
      }
dvander@2762
   103
dvander@2762
   104
    elsif (/^\.fi/)
dvander@2762
   105
      {
dvander@2762
   106
      $innf = 0;
dvander@2762
   107
      }
dvander@2762
   108
dvander@2762
   109
    # Handling .sp is subtle. If it is inside a literal section, do nothing if
dvander@2762
   110
    # the next line is a non literal text line; similarly, if not inside a
dvander@2762
   111
    # literal section, do nothing if a literal follows. The point being that
dvander@2762
   112
    # the <pre> and </pre> that delimit literal sections will do the spacing.
dvander@2762
   113
    # Always skip if no previous output.
dvander@2762
   114
dvander@2762
   115
    elsif (/^\.sp/)
dvander@2762
   116
      {
dvander@2762
   117
      if ($wrotetext)
dvander@2762
   118
        {
dvander@2762
   119
        $_ = <STDIN>;
dvander@2762
   120
        if ($inpre)
dvander@2762
   121
          {
dvander@2762
   122
          print TEMP "\n" if (/^[\s.]/);
dvander@2762
   123
          }
dvander@2762
   124
        else
dvander@2762
   125
          {
dvander@2762
   126
          print TEMP "<br>\n<br>\n" if (!/^[\s.]/);
dvander@2762
   127
          }
dvander@2762
   128
        redo;    # Now process the lookahead line we just read
dvander@2762
   129
        }
dvander@2762
   130
      }
dvander@2762
   131
    elsif (/^\.TP/ || /^\.PP/ || /^\.P/)
dvander@2762
   132
      {
dvander@2762
   133
      &new_para();
dvander@2762
   134
      }
dvander@2762
   135
    elsif (/^\.SH\s*("?)(.*)\1/)
dvander@2762
   136
      {
dvander@2762
   137
      # Ignore the NAME section
dvander@2762
   138
      if ($2 =~ /^NAME\b/)
dvander@2762
   139
        {
dvander@2762
   140
        <STDIN>;
dvander@2762
   141
        next;
dvander@2762
   142
        }
dvander@2762
   143
dvander@2762
   144
      &end_para();
dvander@2762
   145
      my($title) = &do_line($2);
dvander@2762
   146
      if ($toc)
dvander@2762
   147
        {
dvander@2762
   148
        printf("<li><a name=\"TOC%d\" href=\"#SEC%d\">$title</a>\n",
dvander@2762
   149
          $ref, $ref);
dvander@2762
   150
        printf TEMP ("<br><a name=\"SEC%d\" href=\"#TOC1\">$title</a><br>\n",
dvander@2762
   151
          $ref, $ref);
dvander@2762
   152
        $ref++;
dvander@2762
   153
        }
dvander@2762
   154
      else
dvander@2762
   155
        {
dvander@2762
   156
        print TEMP "<br><b>\n$title\n</b><br>\n";
dvander@2762
   157
        }
dvander@2762
   158
      }
dvander@2762
   159
    elsif (/^\.SS\s*("?)(.*)\1/)
dvander@2762
   160
      {
dvander@2762
   161
      &end_para();
dvander@2762
   162
      my($title) = &do_line($2);
dvander@2762
   163
      print TEMP "<br><b>\n$title\n</b><br>\n";
dvander@2762
   164
      }
dvander@2762
   165
    elsif (/^\.B\s*(.*)/)
dvander@2762
   166
      {
dvander@2762
   167
      &new_para() if (!$inpara);
dvander@2762
   168
      $_ = &do_line($1);
dvander@2762
   169
      s/"(.*?)"/$1/g;
dvander@2762
   170
      print TEMP "<b>$_</b>\n";
dvander@2762
   171
      $wrotetext = 1;
dvander@2762
   172
      }
dvander@2762
   173
    elsif (/^\.I\s*(.*)/)
dvander@2762
   174
      {
dvander@2762
   175
      &new_para() if (!$inpara);
dvander@2762
   176
      $_ = &do_line($1);
dvander@2762
   177
      s/"(.*?)"/$1/g;
dvander@2762
   178
      print TEMP "<i>$_</i>\n";
dvander@2762
   179
      $wrotetext = 1;
dvander@2762
   180
      }
dvander@2762
   181
dvander@2762
   182
    # A comment that starts "HREF" takes the next line as a name that
dvander@2762
   183
    # is turned into a hyperlink, using the text given, which might be
dvander@2762
   184
    # in a special font. If it ends in () or (digits) or punctuation, they
dvander@2762
   185
    # aren't part of the link.
dvander@2762
   186
dvander@2762
   187
    elsif (/^\.\\"\s*HREF/)
dvander@2762
   188
      {
dvander@2762
   189
      $_=<STDIN>;
dvander@2762
   190
      chomp;
dvander@2762
   191
      $_ = &do_line($_);
dvander@2762
   192
      $_ =~ s/\s+$//;
dvander@2762
   193
      $_ =~ /^(?:<.>)?([^<(]+)(?:\(\))?(?:<\/.>)?(?:\(\d+\))?[.,;:]?$/;
dvander@2762
   194
      print TEMP "<a href=\"$1.html\">$_</a>\n";
dvander@2762
   195
      }
dvander@2762
   196
dvander@2762
   197
    # A comment that starts "HTML" inserts literal HTML
dvander@2762
   198
dvander@2762
   199
    elsif (/^\.\\"\s*HTML\s*(.*)/)
dvander@2762
   200
      {
dvander@2762
   201
      print TEMP $1;
dvander@2762
   202
      }
dvander@2762
   203
dvander@2762
   204
    # A comment that starts < inserts that HTML at the end of the
dvander@2762
   205
    # *next* input line - so as not to get a newline between them.
dvander@2762
   206
dvander@2762
   207
    elsif (/^\.\\"\s*(<.*>)/)
dvander@2762
   208
      {
dvander@2762
   209
      my($markup) = $1;
dvander@2762
   210
      $_=<STDIN>;
dvander@2762
   211
      chomp;
dvander@2762
   212
      $_ = &do_line($_);
dvander@2762
   213
      $_ =~ s/\s+$//;
dvander@2762
   214
      print TEMP "$_$markup\n";
dvander@2762
   215
      }
dvander@2762
   216
dvander@2762
   217
    # A comment that starts JOIN joins the next two lines together, with one
dvander@2762
   218
    # space between them. Then that line is processed. This is used in some
dvander@2762
   219
    # displays where two lines are needed for the "man" version. JOINSH works
dvander@2762
   220
    # the same, except that it assumes this is a shell command, so removes
dvander@2762
   221
    # continuation backslashes.
dvander@2762
   222
dvander@2762
   223
    elsif (/^\.\\"\s*JOIN(SH)?/)
dvander@2762
   224
      {
dvander@2762
   225
      my($one,$two);
dvander@2762
   226
      $one = <STDIN>;
dvander@2762
   227
      $two = <STDIN>;
dvander@2762
   228
      $one =~ s/\s*\\e\s*$// if (defined($1));
dvander@2762
   229
      chomp($one);
dvander@2762
   230
      $two =~ s/^\s+//;
dvander@2762
   231
      $_ = "$one $two";
dvander@2762
   232
      redo;            # Process the joined lines
dvander@2762
   233
      }
dvander@2762
   234
skamonkey@3831
   235
    # .EX/.EE are used in the pcredemo page to bracket the entire program,
skamonkey@3831
   236
    # which is unmodified except for turning backslash into "\e".
skamonkey@3831
   237
skamonkey@3831
   238
    elsif (/^\.EX\s*$/)
skamonkey@3831
   239
      {
skamonkey@3831
   240
      print TEMP "<PRE>\n";
skamonkey@3831
   241
      while (<STDIN>)
skamonkey@3831
   242
        {
skamonkey@3831
   243
        last if /^\.EE\s*$/;
skamonkey@3831
   244
        s/\\e/\\/g;
skamonkey@3831
   245
        s/&/&amp;/g;
skamonkey@3831
   246
        s/</&lt;/g;
skamonkey@3831
   247
        s/>/&gt;/g;
skamonkey@3831
   248
        print TEMP;
skamonkey@3831
   249
        }
skamonkey@3831
   250
      }
skamonkey@3831
   251
dvander@2762
   252
    # Ignore anything not recognized
dvander@2762
   253
dvander@2762
   254
    next;
dvander@2762
   255
    }
dvander@2762
   256
dvander@2762
   257
  # Line does not begin with a dot. Replace blank lines with new paragraphs
dvander@2762
   258
dvander@2762
   259
  if (/^\s*$/)
dvander@2762
   260
    {
dvander@2762
   261
    &end_para() if ($wrotetext);
dvander@2762
   262
    next;
dvander@2762
   263
    }
dvander@2762
   264
dvander@2762
   265
  # Convert fonts changes and output an ordinary line. Ensure that indented
dvander@2762
   266
  # lines are marked as literal.
dvander@2762
   267
dvander@2762
   268
  $_ = &do_line($_);
dvander@2762
   269
  &new_para() if (!$inpara);
dvander@2762
   270
dvander@2762
   271
  if (/^\s/)
dvander@2762
   272
    {
dvander@2762
   273
    if (!$inpre)
dvander@2762
   274
      {
dvander@2762
   275
      print TEMP "<pre>\n";
dvander@2762
   276
      $inpre = 1;
dvander@2762
   277
      }
dvander@2762
   278
    }
dvander@2762
   279
  elsif ($inpre)
dvander@2762
   280
    {
dvander@2762
   281
    print TEMP "</pre>\n";
dvander@2762
   282
    $inpre = 0;
dvander@2762
   283
    }
dvander@2762
   284
dvander@2762
   285
  # Add <br> to the end of a non-literal line if we are within .nf/.fi
dvander@2762
   286
dvander@2762
   287
  $_ .= "<br>\n" if (!$inpre && $innf);
dvander@2762
   288
dvander@2762
   289
  print TEMP;
dvander@2762
   290
  $wrotetext = 1;
dvander@2762
   291
  }
dvander@2762
   292
dvander@2762
   293
# The TOC, if present, will have been written - terminate it
dvander@2762
   294
dvander@2762
   295
print "</ul>\n" if ($toc);
dvander@2762
   296
dvander@2762
   297
# Copy the remainder to the standard output
dvander@2762
   298
dvander@2762
   299
close(TEMP);
dvander@2762
   300
open(TEMP, "/tmp/$$") || die "Can't open /tmp/$$ for input\n";
dvander@2762
   301
dvander@2762
   302
print while (<TEMP>);
dvander@2762
   303
dvander@2762
   304
print <<End ;
dvander@2762
   305
<p>
dvander@2762
   306
Return to the <a href="index.html">PCRE index page</a>.
dvander@2762
   307
</p>
dvander@2762
   308
End
dvander@2762
   309
dvander@2762
   310
close(TEMP);
dvander@2762
   311
unlink("/tmp/$$");
dvander@2762
   312
dvander@2762
   313
# End