groff
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Groff] Re: PO Initialisation in 'ms' Macros Still Broken


From: Werner LEMBERG
Subject: [Groff] Re: PO Initialisation in 'ms' Macros Still Broken
Date: Fri, 16 Apr 2004 06:47:01 +0200 (CEST)

> The problem observed, back then, was that any attempt to initialise
> the PO register, before output of the first page had started, was
> overridden by the first page initialisation routine, in the 'ms'
> macro package.  Some patches were proposed at the time, but it would
> seem that they were never applied.

Thanks for reminding me, and thanks for your patch; I've applied it.

BTW, it has also been discussed how to handle fractional point sizes.
Attached is a patch (relative to the current CVS) which tries to solve
it -- any value larger than or equal to 1000 is handled as a
fractional point size times 1000; e.g. `.nr PS 12750' means 12.75
points.


    Werner
--- s.tmac      Fri Apr 16 06:34:21 2004
+++ s.tmac.fractional   Fri Apr 16 06:38:07 2004
@@ -188,7 +188,10 @@
 .di cov*au-div!\\n[cov*n-au]
 .nf
 .ft I
-.ps \\n[PS]
+.ie (\\n[PS] >= 1000) \
+.      ps (\\n[PS]z / 1000u)
+.el \
+.      ps \\n[PS]
 ..
 .de @AI
 .if !'\*(.T'html' address@hidden
@@ -201,7 +204,10 @@
 .      di cov*ai-div!\\n[cov*n-au]
 .      nf
 .      ft R
-.      ps \\n[PS]
+.      ie (\\n[PS] >= 1000) \
+.              ps (\\n[PS]z / 1000u)
+.      el \
+.              ps \\n[PS]
 .\}
 ..
 .de LP
@@ -999,10 +1005,23 @@
 .\" don't set LT so that it can be defaulted from LL
 .ie rLT .lt \\n[LT]u
 .el .lt \\n[LL]u
-.ps \\n[PS]
+.ie (\\n[PS] >= 1000) \
+.      ps (\\n[PS]z / 1000u)
+.el \
+.      ps \\n[PS]
 .\" don't set VS so that it can be defaulted from PS
-.ie rVS .par*vs \\n[VS]
-.el .par*vs \\n[PS]+2
+.ie rVS \{\
+.      ie (\\n[VS] >= 1000) \
+.              par*vs "(\\n[VS]p / 1000u)"
+.      el \
+.              par*vs \\n[VS]
+.\}
+.el \{\
+.      ie (\\n[PS] >= 1000) \
+.              par*vs "((\\n[PS]p / 1000u) + 2p)"
+.      el \
+.              par*vs \\n[PS]+2
+.\}
 .if dFAM .fam \\*[FAM]
 .if !rHY .nr HY 14
 .hy \\n[HY]
@@ -1034,16 +1053,37 @@
 .de address@hidden
 .if !rLT .nr LT \\n[LL]
 .if !rFL .nr FL \\n[LL]*5/6
-.if !rVS .nr VS \\n[PS]+2
+.if !rVS \{\
+.      ie (\\n[PS] >= 1000) \
+.              nr VS \\n[PS]+2000
+.      el \
+.              nr VS \\n[PS]+2
+.\}
 .if !rDI .nr DI .5i
-.if !rFPS .nr FPS \\n[PS]-2
-.if !rFVS .nr FVS \\n[FPS]+2
+.if !rFPS \{\
+.      ie (\\n[PS] >= 1000) \
+.              nr FPS \\n[PS]-2000
+.      el \
+.              nr FPS \\n[PS]-2
+.\}
+.if !rFVS \{\
+.      ie (\\n[FPS] >= 1000) \
+.              nr FVS \\n[FPS]+2000
+.      el \
+.              nr FVS \\n[FPS]+2
+.\}
 .\" don't change environment 0
 .ev h
-.ps \\n[PS]
+.ie (\\n[PS] >= 1000) \
+.      ps (\\n[PS]z / 1000u)
+.el \
+.      ps \\n[PS]
 .if !rQI .nr QI 5n
 .if !rPI .nr PI 5n
-.par*vs \\n[VS]
+.ie (\\n[VS] >= 1000) \
+.      par*vs "(\\n[VS]p / 1000u)"
+.el \
+.      par*vs \\n[VS]
 .if !rPD .nr PD .3v>?\n(.V
 .if !rDD .nr DD .5v>?\n(.V
 .if !rFI .nr FI 2n
@@ -1101,8 +1141,14 @@
 .in (u;\\n[\\n[.ev]:li]+\\n[\\n[.ev]:pli])
 .ft 1
 .fam \\*[FAM]
-.ps \\n[\\n[.ev]:PS]
-.par*vs \\n[\\n[.ev]:VS]
+.ie (\\n[\\n[.ev]:PS] >= 1000) \
+.      ps (\\n[\\n[.ev]:PS]z / 1000u)
+.el \
+.      ps \\n[\\n[.ev]:PS]
+.ie (\\n[\\n[.ev]:VS] >= 1000) \
+.      par*vs "(\\n[\\n[.ev]:VS]p / 1000u)"
+.el \
+.      par*vs \\n[\\n[.ev]:VS]
 .ls 1
 .TA
 .hy \\n[HY]
@@ -1357,7 +1403,10 @@
 ..
 .\" In paragraph macros.
 .de NL
-.ps \\n[\\n[.ev]:PS]
+.ie (\\n[\\n[.ev]:PS] >= 1000) \
+.      ps (\\n[\\n[.ev]:PS]z / 1000u)
+.el \
+.      ps \\n[\\n[.ev]:PS]
 ..
 .de SM
 .ps -2
@@ -1545,7 +1594,10 @@
 .1C
 .if !'\\$1'no' \{\
 .      ce 1
-.      ps \\n[PS]+2
+.      ie (\\n[PS] >= 1000) \
+.              ps ((\\n[PS]z / 1000u) + 2z)
+.      el \
+.              ps \\n[PS]+2
 .      ft B
 \\*[TOC]
 .      ft

reply via email to

[Prev in Thread] Current Thread [Next in Thread]