[Po4a-devel]Some patches for the Man module

Nicolas François nicolas.francois@centraliens.net
Wed, 22 Sep 2004 23:19:30 +0200


--J/dobhs11T7y2rNN
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

Hello,

I should have released these patches a few time ago, but Alioth had troub=
les.
Sorry if this mail is a little bit long.


Some are still not "ready for production", and are provided to inform you
I'm working on those subjects (and also to grab some ideas).

I also had to work on the testsuite (the check script) and added a
stats.sh scripts for regression tests. Here are how this last script
formats regression tests statistics:
$ ./stats.sh orig work
        IGN    OK   OK2  WOK1  WOK2  WOK3   PBS WDIFF
  IGN  1698     0     0     0     0     0     0     0
   OK     0   125     0     0     0     0     0     0
  OK2     0     0  1564     4     2     0     0     0
 WOK1     0     8     0    89     0     1     0     0
 WOK2     0     0     0     0   208     0     0     1
 WOK3     0     2    11     2     4   301     3     0
  PBS     0    35   150    15    48    43   585    14
WDIFF     0     1     9     4     5     8     0    39
total:  4979 | 4979

(It takes two directories in argument, the two directories containing
results of the check script, i.e. the LISTE files. It creates a stats_wor=
k
directory.)

You can read this table like this:
11 man pages which were in the WOK3 category in orig are now in OK2.
Those pages can be found in stats_work/WOK3_OK2



The different categories are:
  IGN   man pages po4a refused to operate on (e.g. wad generated by
        Pod::Man)
  OK    diff -uBb didn't see any difference
        This can contain very rare misformatting
  OK2   diff -uBb didn't see any difference after converting hyphens to
        minus sign, `` to ", and '' to " in both man pages
        This contains a little bit more misformatting, for example an man
        page referring to an empty argument ('') should not display only =
".
  WOK1  wdiff doesn't see any difference after the same modifications
  WOK2  This tries to detect changes in the hyphenation of words (but has
        more false negative)
  WOK3  This removes minus signs, and thus detects more changes in
        hyphenation
  PBS   po4a preferred to stop processing the man page (non supported
        macro, ...)
  WDIFF These are probably bugs in po4a or in the man page (I started
        reporting some of them in the BTS, which is another way of
        improving po4a statistics)
      =20
In the table above, it is usually an improvement to have big numbers on
the bottom left corner (with the exception of the IGN column).

Here are the patches for the Man module:

  + comments
    It recognize some (probably incorrect, but usual) comment lines.
    Here are the results of the regression tests for this patch:
        IGN    OK   OK2  WOK1  WOK2  WOK3   PBS WDIFF
  IGN  1698     0     0     0     0     0     0     0
   OK     0   125     0     0     0     0     0     0
  OK2     0     0  1570     0     0     0     0     0
 WOK1     0     0     0    98     0     0     0     0
 WOK2     0     0     0     0   209     0     0     0
 WOK3     0     0     0     0     0   323     0     0
  PBS     0     0     3     0     1     1   885     0
WDIFF     0     0     1     1     0     1     0    63

  + nested_fonts
    It deals with the nested font issue.
    I have an idea on how to simplify it a lot, but I think it could be
    applied, because it is doing a good job.
    The only remaining issue is with "un-terminated" fonts, as in:
      Hello, my name is \fINicolas \fBFRAN=C7OIS
    IMHO, in groff, there is no nested font (with some exceptions, like
    SB, and some italic and bold faces, or by using exotic tmac).
    \fIfoo\fBbar\fR is equivalent to \fIfoo\fR\fBbar\fR (with the
    exception of the \fP).
    Here are the results of the regression tests for this patch:
        IGN    OK   OK2  WOK1  WOK2  WOK3   PBS WDIFF
  IGN  1698     0     0     0     0     0     0     0
   OK     0   125     0     0     0     0     0     0
  OK2     0     0  1562     0     0     0     8     0
 WOK1     0     0     0    98     0     0     0     0
 WOK2     0     0     0     0   209     0     0     0
 WOK3     0     1     6     2     1   307     6     0
  PBS     0     1    81     5    27    31   738     7
WDIFF     0     0     0     0     0     0     0    66

  + arg_next_line
    It allows arguments to be provided on the next line for some macros
    (.SH, .I, ..., .BR, ...)

    It works fine, but would require some cleanup (lots of redundant
    code).
    It can be applied cleanly on CVS, but require the 'nested_fonts' patc=
h
    to operate cleanly.
    Here are the results of the regression tests for this patch (with the
    previous patch also applied):
        IGN    OK   OK2  WOK1  WOK2  WOK3   PBS WDIFF
  IGN  1698     0     0     0     0     0     0     0
   OK     0   125     0     0     0     0     0     0
  OK2     0     0  1567     1     0     0     0     2
 WOK1     0     0     0    97     0     1     0     0
 WOK2     0     0     0     0   209     0     0     0
 WOK3     0     2    11     2     4   301     3     0
  PBS     0     1   109     9    34    32   692    13
WDIFF     0     0     0     0     0     0     0    66
    (here most of the new 'WDIFF' man pages are bug in the man page, and =
a
    bug was filed in the BTS)

  + dot_lines
    po4a generated some lines starting with a dot. In those cases, a \&
    should be added to allow the line to be displayed. (for exemple:
    .I ../file
    is displayed in groff, but
    \fI../fil/\fR won't be displayed
    It also fix the same issue for lines starting by a "'"
        IGN    OK   OK2  WOK1  WOK2  WOK3   PBS WDIFF
  IGN  1698     0     0     0     0     0     0     0
   OK     0   125     0     0     0     0     0     0
  OK2     0     0  1570     0     0     0     0     0
 WOK1     0     8     0    90     0     0     0     0
 WOK2     0     0     0     0   209     0     0     0
 WOK3     0     0     0     0     0   323     0     0
  PBS     0     0     0     0     0     0   890     0
WDIFF     0     1     5     0     0     0     0    60

  + hyphen
    I had a obligation to fix this because I said Martin that replacing
    hyphens by minus signs were always allowed.
    In fact, it should not be modified in
      - .so/.mso arguments
      - after a \s (font size modifier, e.g. \s-2)
    I also added a comment on why I *hate* hyphens.

    Here are the results of the regression tests for this patch:
        IGN    OK   OK2  WOK1  WOK2  WOK3   PBS WDIFF
  IGN  1698     0     0     0     0     0     0     0
   OK     0   125     0     0     0     0     0     0
  OK2     0     0  1570     0     0     0     0     0
 WOK1     0     0     0    98     0     0     0     0
 WOK2     0     0     0     0   209     0     0     0
 WOK3     0     0     0     0     0   323     0     0
  PBS     0     0     0     0     0     0   890     0
WDIFF     0     0     2     1     3     5     0    55

  + new_macros
    Some new macros:
      .R
      .EX and .EE
      .so and .mso
      .cs
      minimal support (when no argument is given) for:
        .ce
        .ul
        .cu

    Here are the results of the regression tests for this patch:
        IGN    OK   OK2  WOK1  WOK2  WOK3   PBS WDIFF
  IGN  1698     0     0     0     0     0     0     0
   OK     0   125     0     0     0     0     0     0
  OK2     0     0  1570     0     0     0     0     0
 WOK1     0     0     0    98     0     0     0     0
 WOK2     0     0     0     0   209     0     0     0
 WOK3     0     0     0     0     0   323     0     0
  PBS     0    27    11     0     0     1   843     8
WDIFF     0     0     0     0     0     0     0    66

  + escape
    It tries to deal with the \c escape.
    It still need some work.

  + others
    some other minor points that I could isolate from my working director=
y

  + split_args
    This fix an issue for the limits.conf man page.
    It was also reported in #268904
    It adds one string for the translation.

  + all
    all the above patch, and more.
    It also contains some comments that should be removed.
    The results are presented in the first table.


Comments (and commits;) are welcome.

Thanks for those who read this mail to the end,
--=20
Nekral

--J/dobhs11T7y2rNN
Content-Type: application/octet-stream
Content-Disposition: attachment; filename="patches.tar.bz2"
Content-Transfer-Encoding: base64

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
OTRiaLz3ya5udzcZyUaTeuD0RqWzOnG1pbpb2pqMoxwWupolqvEuWSBdMDwhoGZ1DKY13S+0
ELYVq6tCPmXE5oYtbMqihe+2GFuYtLNSlWojcob7AxlRW7S+FLWo1FxGhg3XuEOLkb5vcnBS
bYNYjnaJzuY+GoLRt2AHoiiPtxcGaSqYDRurY8pcB5iD3+8KZoVDYyucjaCxQMitRJincJDA
xB3SRUz0dqb2x7nqVSok9+oTq/pSWjmOaRRE4qkceJU9zuZ1VTbzQziD33nLiNqkckc6mD88
Um5KGZa6hxV11I5UpGySkqDRSMlaRuNVTmKlrYWspR1yeTW1PNkOf6jijs2q0MHFSiD0M5ZF
dR37H3gHKc4pYgjCCO51+LtmsV0S/Dqm0njiWzVMzhesTkDzNP85xFBkMeuO8J+BE6zgTSlu
tGJOSUc59qk3KVJ4wlMnp/S/nkZO9pPGur1MWqFUf0VLjNtjM4NVw7k72eleeUziilFL+n0x
0aGFGbKFBEo+EinaDw0d6fiqSp00Go61GirE4SLrAh70UMk8R3rAO4Jomtsp4YxCKcquyza+
sDA1klSSpKgolTc6OxktciR3rTM8E46NWTDOUplGmTCNGS8yu1S1GFe1gNFHBGrztUmuqTRN
z3nheCkE2CnUDYwhCMIMJGJBFfsIiG4o5kYCQ+QDxfh95HoPGcYHvojrkWGZN54H3j6R9o94
UUWfuZv8VGim49fxZszJSkJ/Apm730f4187E+FXWq1Po/fbWK2izCmGSyaPqhqmyLZDJTyu/
9j/ZTPYpoapsVbEZGEpSzY91HpbkjhOKlLliAunxCH6yASKhIKhSmQQU//F3JFOFCQr87uPw

--J/dobhs11T7y2rNN--