"Fossies" - the Fresh Open Source Software Archive

Member "Grutatxt-2.20/grutatxt" (13 Mar 2019, 8329 Bytes) of package /linux/www/Grutatxt-2.20.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) Perl source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file.

    1 #!/usr/bin/perl
    2 
    3 use lib '.';
    4 
    5 #
    6 #   Grutatxt - A text to HTML (and other things) converter
    7 #
    8 #   Angel Ortega <angel@triptico.com> et al.
    9 #
   10 #   This software is released into the public domain.
   11 #   NO WARRANTY. See file LICENSE for details.
   12 #
   13 
   14 use Getopt::Long;
   15 use locale;
   16 use Grutatxt;
   17 
   18 $VERSION = $Grutatxt::VERSION . ':1';
   19 
   20 # input file
   21 $input_file = '-';
   22 
   23 # output file
   24 $output_file = '>-';
   25 
   26 # CSS information
   27 $css = '';
   28 $embed_css = 0;
   29 
   30 # page title
   31 $title = '';
   32 
   33 # offset for the h? headers
   34 $header_offset = 0;
   35 
   36 # default mode
   37 $mode = 'HTML';
   38 
   39 # use real dl
   40 $dl_as_dl = 0;
   41 
   42 # troff table type
   43 $table_type = 'allbox';
   44 
   45 # abstract line number
   46 $abstract = 0;
   47 
   48 # marks
   49 @marks = ();
   50 
   51 # man page section
   52 $man_section = 1;
   53 
   54 # default tab size in LaTeX mode
   55 $tabsize = 8;
   56 
   57 # avoid time signature
   58 $no_time_sig = 0;
   59 
   60 # disable pure verbatim mode
   61 $no_pure_verbatim = 0;
   62 
   63 # enable TOC
   64 $toc = 0;
   65 
   66 #####################################################################
   67 
   68 # parse options
   69 if (!GetOptions('i|input=s' =>  \$input_file,
   70         'o|output=s'        =>  \$output_file,
   71         'c|css=s'           =>  \$css,
   72         'e|embed-css'       =>  \$embed_css,
   73         't|title=s'         =>  \$title,
   74         'f|header-offset=s' =>  \$header_offset,
   75         'b|table-headers'   =>  \$table_headers,
   76         'ct|center-tables'  =>  \$center_tables,
   77         'xt|expand-tables'  =>  \$expand_tables,
   78         'sp|strip-parens'   =>  \$strip_parens,
   79         'ts|tabsize=s'      =>      \$tabsize,
   80         'nb|no-body'        =>  \$no_body,
   81         'v|version'         =>  \$version,
   82         'h|help'            =>  \$usage,
   83         'm|mode=s'          =>  \$mode,
   84         's|man-section=s'   =>  \$man_section,
   85         'docclass=s'        =>  \$latex_docclass,
   86         'papersize=s'       =>  \$papersize,
   87         'encoding=s'        =>  \$encoding,
   88         'dl'                =>  \$dl_as_dl,
   89         'no-time-sig'       =>  \$no_time_sig,
   90         'no-pure-verbatim'  =>  \$no_pure_verbatim,
   91         'toc'               =>  \$toc,
   92         'href-new-window'   =>  \$href_new_window
   93     ) or $usage) {
   94     usage();
   95 }
   96 
   97 if ($version) {
   98     print "$VERSION\n"; exit(0);
   99 }
  100 
  101 open I, $input_file or die "Can't open $input_file: $!";
  102 open O, ">$output_file" or die "Can't create $output_file: $!";
  103 
  104 # if utf-8 encoding is wanted, set the filehandles as utf-8
  105 # so that regular expressions match all characters
  106 # (this is crap)
  107 if (defined($encoding) && $encoding =~ /^utf-?8/i) {
  108     binmode(I, ":utf8");
  109     binmode(O, ":utf8");
  110 }
  111 
  112 $content = join('',<I>);
  113 close I;
  114 
  115 $content_title = '';
  116 
  117 # make tab to space conversion only in LaTeX mode
  118 $tabsize = 0 unless $mode =~ /^latex$/i;
  119 
  120 $grutatxt = new Grutatxt(
  121         'mode'             => $mode,
  122         'header-offset'    => $header_offset,
  123         'table-headers'    => $table_headers,
  124         'center-tables'    => $center_tables,
  125         'expand-tables'    => $expand_tables,
  126         'strip-parens'     => $strip_parens,
  127         'strip-dollars'    => $strip_dollars,
  128         'tabsize'          => $tabsize,
  129         'dl-as-dl'         => $dl_as_dl,
  130         'table-type'       => $table_type,
  131         'title'            => \$content_title,
  132         'abstract'         => \$abstract,
  133         'marks'            => \@marks,
  134         'page-name'        => $title,
  135         'section'          => $man_section,
  136         'docclass'         => $latex_docclass,
  137         'papersize'        => $papersize,
  138         'encoding'         => $encoding,
  139         'no-pure-verbatim' => $no_pure_verbatim,
  140         'toc'              => $toc,
  141         'href-new-window'  => $href_new_window
  142         );
  143 
  144 @result = $grutatxt->process($content);
  145 
  146 if ($mode eq 'HTML') {
  147     if (scalar(@marks) && @marks[0]) {
  148         $abstract = $marks[0] - 1;
  149     }
  150 
  151     @result = (
  152         @result[0 .. $abstract],
  153         '<->',
  154         @result[$abstract + 1 .. scalar(@result)]
  155     );
  156 }
  157 
  158 $title = $content_title unless $title;
  159 $no_body = 1 unless $mode =~ /^html$/i;
  160 
  161 unless ($no_body) {
  162     print O "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\"\n";
  163     print O "   \"http://www.w3.org/TR/REC-html40/loose.dtd\">\n";
  164     print O "<html><head>\n";
  165     print O "<meta http-equiv='Content-Type' content='text/html; charset=" .
  166         ($encoding || 'utf-8') . "'>\n";
  167     print O "<title>$title</title>\n";
  168 
  169     printf O "<!-- converted from text by grutatxt $VERSION on %s -->\n", scalar(localtime)
  170         unless $no_time_sig;
  171 
  172     if ($css) {
  173         if ($embed_css) {
  174             if (open C, $css) {
  175                 my ($c) = join('', <C>);
  176                 close C;
  177 
  178                 print O "<style type='text/css'>\n";
  179                 print O $c . "\n";
  180                 print O "</style>\n";
  181             }
  182             else {
  183                 die "Can't open '$css' CSS file.";
  184             }
  185         }
  186         else {
  187             print O "<link rel=StyleSheet href='$css' type='text/css'>";
  188         }
  189     }
  190 
  191     print O "</head><body>\n";
  192 }
  193 
  194 foreach my $l (@result) {
  195     print O "$l\n";
  196 }
  197 
  198 print O "</body></html>\n" unless $no_body;
  199 
  200 close O;
  201 
  202 exit(0);
  203 
  204 
  205 sub usage
  206 {
  207     print "grutatxt $VERSION - Grutatxt format processor\n";
  208     print "Angel Ortega <angel\@triptico.com> et al.\n";
  209     print "This software is released into the public domain. NO WARRANTY.\n\n";
  210 
  211     print "Usage:\n";
  212     print "\n";
  213     print "grutatxt [options] < input_text_file > output_html_file\n";
  214     print "\n";
  215     print "Global options:\n\n";
  216     print "    -i|--input=FILE            Input file (STDIN)\n";
  217     print "    -o|--output=FILE           Output file (STDOUT)\n";
  218     print "    -t|--title=TITLE           Document title (if unset,\n";
  219     print "                               level 1 heading is used)\n";
  220     print "    -sp|--strip-parens         Strip parentheses in function\n";
  221     print "                               names (shown monospaced anyway)\n";
  222     print "    -sd|--strip-dollars        Strip leading \$ in variable\n";
  223     print "                               names (shown monospaced anyway)\n";
  224     print "    -m|--mode=[HTML|troff|man|latex|rtf]\n";
  225     print "                               Output mode: HTML, troff, man, LaTEX or RTF\n";
  226     print "                               (default: HTML)\n";
  227     print "    --no-time-sig              Avoid time signature in HTML comment\n";
  228     print "    --no-pure-verbatim         Disable pure verbatim mode\n";
  229     print "    --toc                      Add a table of contents after abstract\n\n";
  230     print "HTML options:\n\n";
  231     print "    -c|--css=CSS_URL_OR_FILE   CSS URL (or file if using --embed-css)\n";
  232     print "    -e|--embed-css             Embed CSS instead of linking to it\n";
  233     print "    -f|--header-offset=NUMBER  Offset to add to <h1>,\n";
  234     print "                               <h2>... headers (default 0)\n";
  235     print "    -b|--table-headers         Use <th> instead of <td> in\n";
  236     print "                               the first row of each table\n";
  237     print "    -ct|--center-tables        Centers the tables\n";
  238     print "    -xt|--expand-tables        Expands the tables (width=100\%)\n";
  239     print "    -nb|-no-body               Don't generate <html><body>...\n";
  240     print "                               </body></html> enclosing\n";
  241     print "    --encoding=ENCODING        Character encoding (default: utf-8)\n";
  242     print "    -dl                        Use real <dl>, <dd> and <dt>\n";
  243     print "                               instead of tables in definition lists\n";
  244     print "    --href-new-window          Open links in new windows/tabs\n\n";
  245     print "troff options:\n\n";
  246     print "    --table-type=TYPE          Table type. Possible values:\n";
  247     print "                               box, allbox, doublebox (default allbox)\n";
  248     print "man options:\n\n";
  249     print "    -s|--man-section=SECTION   Man page section (default: 1)\n\n";
  250     print "LaTeX options:\n\n";
  251     print "    --docclass=CLASS           Document class (default: report)\n";
  252     print "    --papersize=SIZE           Paper size (default: a4paper)\n";
  253     print "    --encoding=ENCODING        Character encoding (default: latin1)\n";
  254     print "    -ts|--tabsize=NUMBER       Tab size for tab to space conversions in\n";
  255     print "                               LaTeX verbatim environment (default: 8)\n";
  256 
  257     exit(1);
  258 }