[Top][All Lists]
[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