PTPi pushed a commit to branch master
in repository groff.

commit 5a5f6cd4117bc009cd5c0e8b0b8ea7fbf29a15f7
Author: Peter Schaffter <pe...@schaffter.ca>
AuthorDate: Mon Jan 22 14:48:07 2024 -0500

    [mom]: Version 2.6_b, incorporate pdfpagenumbering
    
    * correctly maps printed page numbers to the PDF outline
    * adds new macro PDF_OUTLINE_PN
    * adds new macro TOC_MARGINS
    * code cleanup and trival refactoring
---
 contrib/mom/BUGS      |   6 ++
 contrib/mom/ChangeLog |   5 ++
 contrib/mom/NEWS      |   6 ++
 contrib/mom/om.tmac   | 159 +++++++++++++++++++++++++++++++++++++++-----------
 4 files changed, 141 insertions(+), 35 deletions(-)

diff --git a/contrib/mom/BUGS b/contrib/mom/BUGS
index 39e680a95..fb20de2e9 100644
--- a/contrib/mom/BUGS
+++ b/contrib/mom/BUGS
@@ -21,6 +21,12 @@ the Subject line or you risk my spam filters nuking your 
message.
 
 ====================================================================
 
+Version 2.6_a
+=============
+Document line lengths other than the default not being respected
+during toc formatting.
+---Fixed---
+
 Version 2.6
 ===========
 QUOTE and BLOCKQUOTE offsets misaligned across columns.
diff --git a/contrib/mom/ChangeLog b/contrib/mom/ChangeLog
index fe2b05a68..835f703da 100644
--- a/contrib/mom/ChangeLog
+++ b/contrib/mom/ChangeLog
@@ -1,3 +1,8 @@
+2024-01-22
+
+       * om.tmac (2.6_b): Add macro PDF_OUTLINE_PN (control pdf outline page
+       numbering).  Add macro TOC_MARGINS (set toc margins explicitly).
+
 2023-11-15
 
        * om.tmac: Fix QUOTE and BLOCKQUOTE offsets being misaligned
diff --git a/contrib/mom/NEWS b/contrib/mom/NEWS
index 64c63c983..e08514325 100644
--- a/contrib/mom/NEWS
+++ b/contrib/mom/NEWS
@@ -5,6 +5,12 @@
     are permitted in any medium without royalty provided the copyright
     notice and this notice are preserved.
 
+Release 2.6_b
+-------------
+PDF outline panel page numbers now map to printed page numbers.
+Macro PDF_OUTLINE_PN has been added; allows for controlling of PDF
+outline page numbering.
+
 Release 2.6
 -----------
 Refinements to Table of Contents to allow for multi-line heading
diff --git a/contrib/mom/om.tmac b/contrib/mom/om.tmac
index c7f3fb0d2..d3b5002a8 100644
--- a/contrib/mom/om.tmac
+++ b/contrib/mom/om.tmac
@@ -20,7 +20,7 @@ for more details.
 You should have received a copy of the GNU General Public License
 along with this program. If not, see <http://www.gnu.org/licenses/>.
 
-Version 2.6_a
+Version 2.6_b
 -------------
 Antoine de St-Exupéry asserted that elegance in engineering is
 achieved not when there is nothing left to add, but when there is
@@ -53,7 +53,7 @@ extensions, and float management).
 .if (\n[.x]\n[.y] < 118) \
 .   ab [mom]: You need GNU troff version 1.18 or higher to run this version of 
mom.
 \# Mom version
-.ds version 2.6_a
+.ds version 2.6_b
 .if dVERSION \{\
 .   ab [mom]: Version \*[version]
 .\}
@@ -5916,8 +5916,8 @@ SMALLCAPS takes precedence.
 .       B_MARGIN \\n[#FOOTER_MARGIN]u+\\n[#FOOTER_GAP]u
 .    if !\\n[#HEADER_RULE_GAP] .HEADER_RULE_GAP 4p
 .    if !\\n[#FOOTER_RULE_GAP] .FOOTER_RULE_GAP 4p
-.    if !r #HDRFTR_RULE     .HDRFTR_RULE
-.    if !r #PAGE_NUM_SET    .PAGENUMBER 1
+.    if !r #HDRFTR_RULE  .HDRFTR_RULE
+.    if !r #PAGE_NUM_SET .PAGENUMBER 1
 .\" Read in number registers and strings for type parameters
 .    nr #DOC_L_MARGIN \\n[#L_MARGIN]
 .    nr #DOC_L_LENGTH \\n[#L_LENGTH]
@@ -6094,6 +6094,12 @@ SMALLCAPS takes precedence.
 .      rm label-type
 .      rm spec-type
 .   \}
+.\" Default TOC margins
+.   if !\\n[#TOC_MARGINS_SET] \{\
+.      nr #TOC_MARGINS_SET 1
+.      nr #TOC_L_MARGIN \\n[#L_MARGIN]
+.      nr #TOC_L_LENGTH \\n[#L_LENGTH]
+.   \}
 .\" String defaults for both PRINTSTYLEs
 .    ie \\n[#DOC_TYPE]=1 \{\
 .       ie '\\*[$DOCTITLE]'' \{\
@@ -7206,10 +7212,7 @@ $\\*[DOC_]COVERTITLE_\\n+[#\\*[DOC_]COVERTITLE_NUM] 
\\$\\n[#\\*[DOC_]COVERTITLE_
 .       evc 0
 \!.     if \\\\n[#\\*[DOC_]COVERTEXT_ONLY] \
 .          sp |\\\\n[#T_MARGIN]u-\\\\n[#DOC_LEAD]u
-\!.     ie !\\n[#\\*[DOC_]COVERTEXT_START_POS] \{\
-\!.        sp |\\n[.p]u/3u-1v
-\!.     \}
-\!.     el \{\
+\!.     if \\n[#\\*[DOC_]COVERTEXT_START_POS] \{\
 \!.        vs 0
 \!.        sp |0i
 \!.        vs \\\\n[#DOC_LEAD]u+\\\\*[$\\*[DOC_]COVER_LEAD_ADJ]
@@ -7440,6 +7443,7 @@ $\\*[DOC_]COVERTITLE_\\n+[#\\*[DOC_]COVERTITLE_NUM] 
\\$\\n[#\\*[DOC_]COVERTITLE_
 .       rr #COLUMNS
 .    \}
 .    ds PDF_BM
+.    if '\\*[.T]'pdf' .pdfpagenumbering
 .    ie '\\$0'DO_DOC_COVER' \{\
 .       ds  DOC_  DOC_
 .       nr #DOC_COVER_DONE 1
@@ -7461,11 +7465,11 @@ $\\*[DOC_]COVERTITLE_\\n+[#\\*[DOC_]COVERTITLE_NUM] 
\\$\\n[#\\*[DOC_]COVERTITLE_
 .    if \\n[.ns] .rs
 .    if '\\$0'DO_COVER' \{\
 .       if \\n[TOC.RELOCATE]==5 \
-.          if !rTOC_BH .TOC_BEFORE_HERE
+.          if !\\n[TOC_BH] .TOC_BEFORE_HERE
 .    \}
 .    if '\\$0'DO_DOC_COVER' \{\
 .       if \\n[TOC.RELOCATE]==3 \
-.          if !rTOC_BH .TOC_BEFORE_HERE
+.          if !\\n[TOC_BH] .TOC_BEFORE_HERE
 .    \}
 .    RV_HARD_SET_MARGINS
 .\" Cover image
@@ -7829,17 +7833,17 @@ $\\*[DOC_]COVERTITLE_\\n+[#\\*[DOC_]COVERTITLE_NUM] 
\\$\\n[#\\*[DOC_]COVERTITLE_
 .       rm MISC_DIV
 .       rr #MISC_DEPTH
 .    \}
-.    if \\n[TOC.RELOCATE]==1 \{\
+.    if \\n[TOC.RELOCATE]=1 \{\
 .       if !\\n[#COVER_BLANKPAGE] \
-.          if !rTOC_BH .TOC_AFTER_HERE
+.          if !\\n[TOC_BH] .TOC_AFTER_HERE
 .    \}
 .    if '\\$0'DO_COVER' \{\
-.       if \\n[TOC.RELOCATE]==6 \
-.          if !rTOC_BH .TOC_AFTER_HERE
+.       if \\n[TOC.RELOCATE]=6 \
+.          if !\\n[TOC_BH] .TOC_AFTER_HERE
 .    \}
 .    if '\\$0'DO_DOC_COVER' \{\
-.       if \\n[TOC.RELOCATE]==4 \
-.          if !rTOC_BH .TOC_AFTER_HERE
+.       if \\n[TOC.RELOCATE]=4 \
+.          if !\\n[TOC_BH] .TOC_AFTER_HERE
 .    \}
 .    END_COVER
 .END
@@ -7872,7 +7876,7 @@ $\\*[DOC_]COVERTITLE_\\n+[#\\*[DOC_]COVERTITLE_NUM] 
\\$\\n[#\\*[DOC_]COVERTITLE_
 .    if \\n[#PAGINATION_WAS_ON]=1 .nr % +1
 .    ie \\n[#\\*[DOC_]COVER_BLANKPAGE]=1 \{\
 .       if \\n[TOC.RELOCATE] \
-.          if !\\n[#TOC_BH] .TOC_AFTER_HERE
+.          if !\\n[TOC_BH] .TOC_AFTER_HERE
 .\" Without the empty PDF_BOOKMARK, (doc)cover BLANKPAGE causes
 .\" the PDF outline to place the first doc or chapter before the TOC,
 .\" even though PDF output is correct.
@@ -8242,6 +8246,13 @@ $\\*[DOC_]COVERTITLE_\\n+[#\\*[DOC_]COVERTITLE_NUM] 
\\$\\n[#\\*[DOC_]COVERTITLE_
 .       sp |\\n[#T_MARGIN]u-\\n[#DOC_LEAD]u
 .       vpt
 .    \}
+.    if '\\*[.T]'pdf' \{\
+.       nr #PDF_PN \\n%+\\n[#PAGE_NUM_ADJ]
+.       ds $PDF_PN_FORMAT \\*[$PAGENUM_STYLE]
+.       substring $PDF_PN_FORMAT  0 0
+.       if !\\n[#ADVANCE_FROM_TOP] .sp -1
+.       pdfpagenumbering \\*[$PDF_PN_FORMAT] . \\n[#PDF_PN]
+.    \}
 .END
 \#
 .MAC RR_ADVANCE_FROM_TOP END
@@ -10718,7 +10729,7 @@ Shimming must be disabled with NO_SHIM before using 
FLEX.
 .MAC DO_FOOTER END
 .\" Kill pdfbackground if BoxStop causes a page break
 .    if r pdfbxstop \{\
-.       pdfbackground off
+.       if '\\*[.T]'pdf' .pdfbackground off
 .       rr pdfbx-running
 .    \}
 .\" Part of workaround for refer spitting out a blank page if the
@@ -15593,11 +15604,16 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 \# Enter leaders and page numbers
 \#
 .MAC TOC_PN END
-.    ps \\n[#TOC_PS]u
 .    length #PN_STRING_LEN \\n[#TOC_ENTRY_PN]
 .    nr #PAD \\n[#TOC_PN_PADDING]-\\n[#PN_STRING_LEN]
-.    nop \h'-.33m'\\a\h'\w'\0'u*\\n[#PAD]u'\
+.    if \\n[#PRINT_STYLE]=1 \{\
+.       nop \\a\h'\w'\0'u*\\n[#PAD]u'\\$1
+.    \}
+.    if \\n[#PRINT_STYLE]=2 \{\
+.       ps \\n[#TOC_PS]u
+.       nop \h'-.33m'\\a\h'\w'\0'u*\\n[#PAD]u'\
 \f[\\*[$TOC_PN_FAM]\\*[$TOC_PN_FT]]\s+[\\*[$TOC_PN_SIZE_CHANGE]]\h'.33m'\\$1
+.    \}
 .    br
 .    di
 .    ll
@@ -15609,7 +15625,10 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 \# TOC collector
 \#
 .MAC TO_TOC END
-.    if !'\\n[.ev]'TOC_EV' .ev TOC_EV
+.    if !'\\n[.ev]'TOC_EV' \{\
+.       ev TOC_EV
+.       evc 0
+.    \}
 .    nr #TOC_CH_NUM_INDENT \w'\\*[$TOC_CH_NUM]'
 .    da TOC_ENTRIES
 .    vs \\*[$TOC_LEAD]
@@ -15617,15 +15636,15 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .       rr #SKIP_ENTRY
 \!.  \}
 \!.  el \{\
-\!.     po \\n[#L_MARGIN]u
-\!.     ll \\n[#DOC_L_LENGTH]u
-.       ie \\n[#PRINT_STYLE]=1 \{\
+.       po \\n[#TOC_L_MARGIN]u
+.       ll \\n[#TOC_L_LENGTH]u
+.       if \\n[#PRINT_STYLE]=1 \{\
 .          fam \\*[$TYPEWRITER_FAM]
 .          ft  R
 .          ps \\*[$TYPEWRITER_PS]
 .          ds _TYPEWRITE _TYPEWRITE
 .       \}
-.       el \{\
+.       if \\n[#PRINT_STYLE]=2 \{\
 .          ie '\\$0'HD_TO_TOC' \
 .             ps \\n[#TOC_PS]u\\*[$TOC_HEAD_\\n[#LEVEL]_SIZE]
 .          el \{\
@@ -15633,8 +15652,6 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .             ft  \\*[$TOC_TITLE_FT]
 .             ps  \\n[#TOC_PS]u\\*[$TOC_TITLE_SIZE]
 .          \}
-.       \}
-.       if \\n[#PRINT_STYLE]=2 \{\
 .          rm _TYPEWRITE
 .          if \\n[#SPACE_TOC_ITEMS] \{\
 .             if \\n[#POST_TOP]=1 \{\
@@ -15747,6 +15764,23 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 \# Control macros for toc
 \# ----------------------
 \#
+\# TOC_MARGINS
+\# -----------
+\# *Arguments:
+\#   <toc left margin> <toc right margin>
+\# *Function:
+\#   Sets page margins for the Table of Contents.
+\# *Notes:
+\#   If not invoked by user, mom sets these to match the document
+\#   left margin and document line length at the first invocation of
+\#   START.
+\#
+.MAC TOC_MARGINS END
+.    nr #TOC_MARGINS_SET 1
+.    nr #TOC_L_MARGIN \\$1
+.    nr #TOC_L_LENGTH \\n[#PAGE_WIDTH]u-\\n[#TOC_L_MARGIN]u-\\$2
+.END
+\#
 \# TOC TITLE STYLE
 \# ---------------
 \# *Arguments:
@@ -16141,8 +16175,8 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .    if !r #TOC_START_PAGENUM .nr #TOC_START_PAGENUM 1
 .    PAGENUMBER \\n[#TOC_START_PAGENUM]
 .    if \\n[#LINENUMBERS]=2 .nr #LINENUMBERS 3
-.    L_MARGIN \\n[#DOC_L_MARGIN]u
-.    LL       \\n[#DOC_L_LENGTH]u
+.    L_MARGIN \\n[#TOC_L_MARGIN]u
+.    LL       \\n[#TOC_L_LENGTH]u
 .    HEADER_CENTER "\\*[$TOC_HEADER_STRING]
 .    if \\n[#SLANT_ON] .nop \\*[SLANTX]
 .    PAGENUM_STYLE \\*[$TOC_PN_STYLE]
@@ -16153,9 +16187,11 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .       TRAPS
 .    \}
 .    el .DOC_LEAD \\*[$TOC_LEAD]
+.    if '\\*[.T]'ps'  .nr #SPACE_CORRECTION 1
+.    if '\\*[.T]'pdf' .nr #SPACE_CORRECTION 2
 .    ie \\n[#TOC_HEADER_V_POS] \
-.      DOCHEADER OFF \\n[#TOC_HEADER_V_POS]u-\\n[#DOC_LEAD]u
-.    el .DOCHEADER OFF \\n[#T_MARGIN]u-\\n[#DOC_LEAD]u
+.       DOCHEADER OFF \\n[#TOC_HEADER_V_POS]u-\\n[#DOC_LEAD]u
+.    el .DOCHEADER OFF 
\\n[#T_MARGIN]u-(\\n[#DOC_LEAD]u*\\n[#SPACE_CORRECTION]u)
 .    if (\\n[#PRINT_STYLE]=1)&(\\n[#SINGLE_SPACE]=1) \
 .       DOCHEADER OFF \\n[#T_MARGIN]u-(\\n[#DOC_LEAD]u*2u)
 .    START
@@ -16186,7 +16222,7 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .    CAPS OFF
 .    if \\n[#TOC_HEADER_COLOR]=1 .gcolor default
 .    br
-.    sp
+.    if \\n[#PRINT_STYLE]=2 .sp
 .    SHIM_1
 .    nf
 .    TOC_ENTRIES
@@ -17118,6 +17154,7 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 \#   N.B.--the START macro must be used after every COLLATE
 \#
 .MAC COLLATE END
+.    if \\n[#COLLATED_DOC] .rr #SKIP_ENTRY
 .    if dPDF.EXPORT .tm .ds pre-collate-\\n% \\n%@\\n[#COL_NUM]
 .    if \\n[defer] \{\
 .       nr #BLANKPAGE_AFTER_DEFER 1
@@ -24401,7 +24438,8 @@ No room to start \\*[MN-pos] margin note #\\n[MN-curr] 
on page \\n[#P].
 . mk
 . sp \\*[wt]/2u
 .
-. pdfbackground \\*[type] \\n[l]z \\n[t]z \\n[r]z \\n[b]z \\*[wt]
+. if '\\*[.T]'pdf' \
+.   pdfbackground \\*[type] \\n[l]z \\n[t]z \\n[r]z \\n[b]z \\*[wt]
 .
 .\" Always start at wt+gap
 . ie \\n[#IL_ACTIVE]:\\n[#IBL_ACTIVE] \
@@ -24474,7 +24512,7 @@ No room to start \\*[MN-pos] margin note #\\n[MN-curr] 
on page \\n[#P].
 . if \\n[img*pdfbx]=2 \
 .   sp -.5
 .
-. pdfbackground off
+. if '\\*[.T]'pdf' .pdfbackground off
 .
 . EOL
 . if \\n[.t]<1v \{\
@@ -24507,7 +24545,8 @@ No room to start \\*[MN-pos] margin note #\\n[MN-curr] 
on page \\n[#P].
 .   sp -.5
 . if \\n[#QUOTE] .sp -.5+(\\*[wt\\n[stack]]/2u)
 . nr pdfbx-end \\n[nl]
-. it 2 rr-pdfbx-end
+. ie '\\n[.z]'' .it 2 rr-pdfbx-end
+. el \!.it 2 rr-pdfbx-end
 . rr pdfbxstop-consec
 . ie '\\n[.z]'' .rr pdfbx-running
 . el \{\
@@ -24590,6 +24629,56 @@ No room to start \\*[MN-pos] margin note #\\n[MN-curr] 
on page \\n[#P].
 . \}
 ..
 \#
+\# PDF outline page numbering
+\#
+\# PDF_OUTLINE_PN
+\# --------------
+\# *Arguments:
+\#   SUSPEND / RESUME
+\#    or
+\#   [FORMAT <format>] [PREFIX <prefix>] [PAGE <page number>]
+\# *Function:
+\#   Suspend, resume, or set parameters for pagenumbering that
+\#   appears in the pdf outline.
+\#
+.MAC PDF_OUTLINE_PN END
+.    if '\\*[.T]'pdf' \{\
+.       if '\\$1'SUSPEND' \{\
+.          pdfpagenumbering
+.          return
+.       \}
+.       if '\\$1'RESUME' \{\
+.          if '\\*[$PDF_PN_FORMAT]'' .ds $PDF_PN_FORMAT D
+.          if '\\*[$PDF_PN_PRFX]''   .ds $PDF_PN_PRFX .
+.          if !\\n[#PDF_PN]          .nr #PDF_PN \\n%+\\n[#PAGE_NUM_ADJ]
+.          pdfpagenumbering \
+              \\*[$PDF_PN_FORMAT] \\*[$PDF_PN_PRFX] \\n[#PDF_PN]
+.          return
+.       \}
+.       rm $PDF_PN_FORMAT
+.       rm $PDF_PN_PRFX
+.       rr #PDF_PN
+.       while \\n[.$]>0 \{\
+.         if '\\$1'FORMAT' \{\
+.           ds $PDF_PN_FORMAT \\$2
+.           shift 2
+.         \}
+.         if '\\$1'PREFIX'  \{\
+.           ds $PDF_PN_PRFX \\$2
+.           shift 2
+.         \}
+.         if '\\$1'PAGE'  \{\
+.           nr #PDF_PN \\$2
+.           shift 2
+.         \}
+.       \}
+.       if '\\*[$PDF_PN_FORMAT]'' .ds $PDF_PN_FORMAT D
+.       if '\\*[$PDF_PN_PRFX]''   .ds $PDF_PN_PRFX .
+.       if !\\n[#PDF_PN]    .nr #PDF_PN \\n%+\\n[#PAGE_NUM_ADJ]
+.       pdfpagenumbering \\*[$PDF_PN_FORMAT] \\*[$PDF_PN_PRFX] \\n[#PDF_PN]
+.   \}
+.END
+\#
 \# Local Variables:
 \# mode: nroff
 \# End:

_______________________________________________
Groff-commit mailing list
Groff-commit@gnu.org
https://lists.gnu.org/mailman/listinfo/groff-commit

Reply via email to