[PATCH] devel: make man-to-mdwn.pl to work with generated manual pages
authorTomi Ollila <tomi.ollila@iki.fi>
Wed, 7 May 2014 21:24:39 +0000 (00:24 +0300)
committerW. Trevor King <wking@tremily.us>
Fri, 7 Nov 2014 18:02:20 +0000 (10:02 -0800)
0b/5a471d7a46c43fe5872920231caceab13d2814 [new file with mode: 0644]

diff --git a/0b/5a471d7a46c43fe5872920231caceab13d2814 b/0b/5a471d7a46c43fe5872920231caceab13d2814
new file mode 100644 (file)
index 0000000..ac4b341
--- /dev/null
@@ -0,0 +1,162 @@
+Return-Path: <too@guru-group.fi>\r
+X-Original-To: notmuch@notmuchmail.org\r
+Delivered-To: notmuch@notmuchmail.org\r
+Received: from localhost (localhost [127.0.0.1])\r
+       by olra.theworths.org (Postfix) with ESMTP id 5C676431FBF\r
+       for <notmuch@notmuchmail.org>; Wed,  7 May 2014 14:24:50 -0700 (PDT)\r
+X-Virus-Scanned: Debian amavisd-new at olra.theworths.org\r
+X-Spam-Flag: NO\r
+X-Spam-Score: 0\r
+X-Spam-Level: \r
+X-Spam-Status: No, score=0 tagged_above=-999 required=5 tests=[none]\r
+       autolearn=disabled\r
+Received: from olra.theworths.org ([127.0.0.1])\r
+       by localhost (olra.theworths.org [127.0.0.1]) (amavisd-new, port 10024)\r
+       with ESMTP id llgTAAKsAXcL for <notmuch@notmuchmail.org>;\r
+       Wed,  7 May 2014 14:24:44 -0700 (PDT)\r
+Received: from guru.guru-group.fi (guru.guru-group.fi [46.183.73.34])\r
+       by olra.theworths.org (Postfix) with ESMTP id 92F60431FAE\r
+       for <notmuch@notmuchmail.org>; Wed,  7 May 2014 14:24:44 -0700 (PDT)\r
+Received: by guru.guru-group.fi (Postfix, from userid 501)\r
+       id 2DD0D1000F2; Thu,  8 May 2014 00:24:40 +0300 (EEST)\r
+From: Tomi Ollila <tomi.ollila@iki.fi>\r
+To: notmuch@notmuchmail.org\r
+Subject: [PATCH] devel: make man-to-mdwn.pl to work with generated manual\r
+ pages\r
+Date: Thu,  8 May 2014 00:24:39 +0300\r
+Message-Id: <1399497879-27392-1-git-send-email-tomi.ollila@iki.fi>\r
+X-Mailer: git-send-email 1.8.0\r
+Cc: tomi.ollila@iki.fi\r
+X-BeenThere: notmuch@notmuchmail.org\r
+X-Mailman-Version: 2.1.13\r
+Precedence: list\r
+List-Id: "Use and development of the notmuch mail system."\r
+       <notmuch.notmuchmail.org>\r
+List-Unsubscribe: <http://notmuchmail.org/mailman/options/notmuch>,\r
+       <mailto:notmuch-request@notmuchmail.org?subject=unsubscribe>\r
+List-Archive: <http://notmuchmail.org/pipermail/notmuch>\r
+List-Post: <mailto:notmuch@notmuchmail.org>\r
+List-Help: <mailto:notmuch-request@notmuchmail.org?subject=help>\r
+List-Subscribe: <http://notmuchmail.org/mailman/listinfo/notmuch>,\r
+       <mailto:notmuch-request@notmuchmail.org?subject=subscribe>\r
+X-List-Received-Date: Wed, 07 May 2014 21:24:50 -0000\r
+\r
+The new manual pages converted from rst using sphinx or rst2man\r
+has somewhat different syntax. man-to-mdwn.pl is now adjusted\r
+to produce even better output from this syntax (a bug ot two\r
+was fixed along the adjustents done).\r
+This tool still produces better results than just using the\r
+html pages generated using sphinx / rst2html. For example those\r
+tools don't create inter-page hyperlinks -- and the preformatted\r
+pages written by man-to-mdwn.pl just works well with manual page\r
+content.\r
+---\r
+\r
+With the notmuch-wiki commit b2e421fc7 (Thu May 8 00:12:05 2014 +0300)\r
+the manpages* content is generated by this tool on scientific linux 6.2\r
+machine and no manual post-editing was done.\r
+\r
+ devel/man-to-mdwn.pl | 33 ++++++++++++++++-----------------\r
+ 1 file changed, 16 insertions(+), 17 deletions(-)\r
+\r
+diff --git a/devel/man-to-mdwn.pl b/devel/man-to-mdwn.pl\r
+index 4b59bd663698..64e6202ae970 100755\r
+--- a/devel/man-to-mdwn.pl\r
++++ b/devel/man-to-mdwn.pl\r
+@@ -6,18 +6,18 @@\r
+ # This program is used to generate mdwn-formatted notmuch manual pages\r
+ # for notmuch wiki. Example run:\r
+ #\r
+-# $ ./devel/man-to-mdwn.pl man ../notmuch-wiki\r
++# $ ./devel/man-to-mdwn.pl doc/_build/man ../notmuch-wiki\r
+ #\r
+ # In case taken into more generic use, modify these comments and examples.\r
\r
+-use 5.8.1;\r
++use 5.10.1;\r
+ use strict;\r
+ use warnings;\r
\r
+ unless (@ARGV == 2) {\r
+     warn "\n$0 <source-directory> <destination-directory>\n\n";\r
+     # Remove/edit this comment if this script is taken into generic use.\r
+-    warn "Example: ./devel/man-to-mdwn.pl man ../notmuch-wiki\n\n";\r
++    warn "Example: ./devel/man-to-mdwn.pl doc/_build/man ../notmuch-wiki\n\n";\r
+     exit 1;\r
+ }\r
\r
+@@ -48,11 +48,6 @@ while (<P>)\r
+ }\r
+ close P;\r
\r
+-#undef $ENV{'GROFF_NO_SGR'};\r
+-#delete $ENV{'GROFF_NO_SGR'};\r
+-$ENV{'GROFF_NO_SGR'} = '1';\r
+-$ENV{'TERM'} = 'vt100'; # does this matter ?\r
+-\r
+ my %htmlqh = qw/& &amp;   < &lt;   > &gt;   ' &apos;   " &quot;/;\r
+ # do html quotation to $_[0] (which is an alias to the given arg)\r
+ sub htmlquote($)\r
+@@ -70,8 +65,10 @@ while (my ($k, $v) = each %fhash)\r
+     #next if -l $v; # skip symlinks here. -- not... references there may be.\r
\r
+     my @lines;\r
+-    #open I, '-|', qw/groff -man -T utf8/, $v;\r
+-    open I, '-|', qw/groff -man -T latin1/, $v; # this and GROFF_NO_SGR='1'\r
++    open I, '-|', qw/env -i/, "PATH=$ENV{PATH}",\r
++      qw/GROFF_NO_SGR=1 TERM=vt100 LANG=en_US.utf8 LC_ALL=en_US.utf8/,\r
++      qw/man/, $v;\r
++      #qw/man -t -E utf8 -T utf8/, $v; # <- needs newer man...\r
\r
+     my ($emptyline, $pre, $hl) = (0, 0, 'h1');\r
+     while (<I>) {\r
+@@ -79,13 +76,15 @@ while (my ($k, $v) = each %fhash)\r
+           $emptyline = 1;\r
+           next;\r
+       }\r
+-      s/(?<=\S)\s{8,}.*//; # $hl = 'h1' if s/(?<=\S)\s{8,}.*//;\r
+-      htmlquote $_;\r
++      # keep only leftmost in lines like 'NOTMUCH(1)   notmuch   NOTMUCH(1)'\r
++      s/\S\K\s{8,}\S.+\s{8,}\S.*//; # $hl = 'h1' if s/(?<=\S)\s{8,}.*//;\r
+       s/[_&]\010&/&/g;\r
+-      s/((?:_\010[^_])+)/<u>$1<\/u>/g;\r
++      s/((?:_\010[^_])+)/\001u\002$1\001\/u\002/g;\r
+       s/_\010(.)/$1/g;\r
+-      s/((?:.\010.)+)/<b>$1<\/b>/g;\r
++      s/((?:.\010.)+)/\001b\002$1\001\/b\002/g;\r
+       s/.\010(.)/$1/g;\r
++      htmlquote $_;\r
++      s/\001/</g; s/\002/>/g;\r
\r
+       if (/^\S/) {\r
+           $pre = 0, push @lines, "</pre>\n" if $pre;\r
+@@ -116,7 +115,7 @@ while (my ($k, $v) = each %fhash)\r
+     my $pe = '';\r
+     foreach (@lines) {\r
+       if ($pe) {\r
+-          if (s/^(\s+)<b>([^<]+)<\/b>\((\d+)\)//) {\r
++          if (s/^(\s+)<b>([^<]+)\((\d+)\)<\/b>//) {\r
+               my $link = maymakelink "$pe-$2-$3";\r
+               $link = maymakelink "$pe$2-$3" unless $link;\r
+               if ($link) {\r
+@@ -132,7 +131,7 @@ while (my ($k, $v) = each %fhash)\r
+           }\r
+           $pe = '';\r
+       }\r
+-      s/<b>([^<]+)<\/b>\((\d+)\)/mayconvert($1, $2)/ge;\r
++      s/<b>([^<]+)\((\d+)\)<\/b>/mayconvert($1, $2)/ge;\r
+       $pe = $1 if s/<b>([^<]+)-<\/b>\s*$//;\r
+       print $_;\r
+     }\r
+@@ -169,7 +168,7 @@ foreach (sort srt values %fhash)\r
+     open I, '<', $in or die $!;\r
+     my $s;\r
+     while (<I>) {\r
+-      if (/^\s*[.]TH\s+\S+\s+(\S+)/) {\r
++      if (/^\s*[.]TH\s+\S+\s+"?(\S+?)"?\s/) {\r
+           $s = $1;\r
+           last;\r
+       }\r
+-- \r
+1.8.0\r
+\r