Steffen "Daode" Nurpmeso <sdaoden@gmail.com> wrote: |And then there is the script, rewritten to comply to the new |syntax. And it produces much nicer HTML output, it is oh so |pretty now, | |Of course checking still works, and is also more sophisticated |than before. And then there is the idea that Russ Allbery brought up, converting the data to POD. I've not finished that yet, and it's 2 o'clock in the morning ;/. There are at least two problems unresolved. The first is that we must not loose the original formatting of plain text comments; we cannot simply indent because then L<> etc. are not expanded, then. The second is that the patch does not yet expand entitities. The third is that for this to be real neat we had to inject =head lines. I'll look at that at a later time, when my small mailer is really ready :-/, but i'm thankful for any suggestion, of course. Thanks and ciao --steffen
From deb0b0ec9f1f31c837deb38969eb7034a7b2d100 Mon Sep 17 00:00:00 2001 Message-Id: <deb0b0ec9f1f31c837deb38969eb7034a7b2d100.1359248654.git.sdaoden@gmail.com> From: "Steffen \"Daode\" Nurpmeso" <sdaoden@gmail.com> Date: Sun, 27 Jan 2013 01:00:22 +0100 Subject: [PATCH] workht.pl: intermediate POD mode that does not work
--- workht.pl | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 68 insertions(+), 2 deletions(-) diff --git a/workht.pl b/workht.pl index 56ee83c..c13e665 100644 --- a/workht.pl +++ b/workht.pl @@ -4,7 +4,11 @@ require 5.008_001; #@ Public domain, 2013, Steffen Nurpmeso. #@ Synopsis: #@ workht.pl html < DATA_FILE | elinks -force-html -dump 1 +#@ workht.pl pod < DATA_FILE | pod2XY +#@ workht.pl newpod < DATA_FILE | pod2XY #@ workht.pl check < DATA_FILE > NEW_DATA_FILE +#@ The *pod* and *newpod* modes produce perl(1) Pod output that can be +#@ converted using any STDIN-aware pod2XY parser; see below for the difference. #@ The *check* mode requires an installed curl(1) (<http://curl.haxx.se>); #@ Input data notes: #@ - Only comment lines (\s*#) are recognized. @@ -17,8 +21,8 @@ require 5.008_001; #@ work.) #@ - A link may be followed by WS and a link text in parenthesis ('\([^)]*?\)'); #@ If no link text exists, the URL is used as the link content, too. -#@ Note this only works in *html* mode, otherwise it'll always be the URL, -#@ and the text in parenthesis will be left as is. +#@ Note this only works in the *html* and *newpod* modes, otherwise it'll +#@ always be the URL, and the text in parenthesis will be left as is. #@ - A link may also be followed by WS, a backslash and a LF ('\s*\\$'), #@ in which case the link text in parenthesis may be placed on the very next #@ line. @@ -69,6 +73,8 @@ sub main_fun { usage($EX_NOINPUT); } mode_html() if $ARGV[0] eq 'html'; + mode_pod(0) if $ARGV[0] eq 'pod'; + mode_pod(1) if $ARGV[0] eq 'newpod'; mode_check() if $ARGV[0] eq 'check'; usage($EX_USAGE); } @@ -77,9 +83,15 @@ sub usage { print STDERR <<__EOT__; Synopsis: workht.pl html < DATA_FILE | elinks -force-html -dump 1 + workht.pl pod < DATA_FILE | pod2XY + workht.pl newpod < DATA_FILE | pod2XY workht.pl check < DATA_FILE > NEW_DATA_FILE The *html* mode generates a very simple HTML page with hyperlinks. +The *pod* and *newpod* modes produce perl(1) Pod output that can be +converted using any STDIN-aware pod2XY parser, e.g., pod2text; +the difference in between them is that *newpod* produces L<TEXT|URL> +markup, whereas *pod* uses the backward compatible L<URL> form only. The *check* mode requires an installed curl(1) (<http://curl.haxx.se>). __EOT__ @@ -153,6 +165,60 @@ __EOT__ exit($ESTAT) } +sub mode_pod { + my $newpod = $_[0]; + + Line::parse_input(); + + die unless print "=head1 IANA TZ database file\n\n"; + + my ($lnl, $mode) = (1, 0); + while (defined(my $lo = shift @$INPUT)) { + if (! $lo->{ISCOMM}) { + if ($lo->{DATA} !~ /^\s*$/) { + if ($mode != 1) { + $mode = 1; + if (! $lnl) { + die unless print "\n"; + } + } + die unless print "\t"; + $lnl = 0; + } else { + $lnl = 1; + } + die unless print $lo->{DATA}, "\n"; + next; + } + if ($mode) { + $mode = 0; + if (! $lnl) { + die unless print "\n"; + } + } + $lnl = 0; + + my ($l, $rest) = ('', substr $lo->{DATA}, $lo->{ISCOMM}); + Line::join_follow(\$lo, \$rest, $INPUT) if $lo->{FOLLOW}; + + while ($rest =~ $SCHEME_URL) { + $l .= $1 ? $1 : ''; + $rest = $3; + my $url = $2; + my $text; + if ($newpod && $rest =~ $SCHEME_TEXT) { + $rest = $2; + $l .= 'L<' . $1 . '|' . $url . '>'; + } else { + $l .= 'L<' . $url . '>'; + } + } + $l .= $rest if $rest; + die unless print $l, "\n"; + } + exit($ESTAT) +} + sub mode_check { Line::parse_input(); -- 1.7.9.rc2.1.g69204