PTPi pushed a commit to branch master in repository groff. commit 9cc13da0893323217ffd02070adf54c6134e1f5f Author: Peter Schaffter <pe...@schaffter.ca> AuthorDate: Tue Jul 15 13:18:12 2025 -0400
Improves management of multi-line headings. Adds DEFAULT (1/10 of prevailing leading) to acceptable BASELINE_ADJUST arguments in HEADING_STYLE. --- contrib/mom/om.tmac | 189 ++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 160 insertions(+), 29 deletions(-) diff --git a/contrib/mom/om.tmac b/contrib/mom/om.tmac index fd934e474..2cd536893 100644 --- a/contrib/mom/om.tmac +++ b/contrib/mom/om.tmac @@ -6636,6 +6636,28 @@ SMALLCAPS takes precedence. . nr #AUTOLEAD_VALUE \\n[#SAVED_AUTOLEAD_VALUE] . \} . if !\\n[#SKIP_TRAPS] .TRAPS +.\" Adjust these here if HEADING_STYLEs have been set already. +.\" They need #DOC_LEAD from TRAPS to calculate the default baseline-adj +.\" in the event that none was given +. nr #LEVEL 0 1 \" loop step +. nr #LOOP 9 \" loop count +. while \\n+[#LEVEL]<=\\n[#LOOP] \{\ +. if '\\*[$HEAD_\\n[#LEVEL]_BASELINE_ADJ]'' \ +. ds $HEAD_\\n[#LEVEL]_BASELINE_ADJ \\n[#DOC_LEAD]/10 +. if !'\\*[$HEAD_\\n[#LEVEL]_UL_GAP]'' \{\ +. nr #UL_RAISE \ +\\*[$STORED_HEAD_\\n[#LEVEL]_UL_GAP]-(\\*[$HEAD_\\n[#LEVEL]_BASELINE_ADJ]) +. ds $HEAD_\\n[#LEVEL]_UL_GAP \\n[#UL_RAISE]u +. rr #UL_RAISE +. \} +. if !'\\*[$HEAD_\\n[#LEVEL]_UL2_GAP_1]'' \{\ +. nr #UL_RAISE \ +\\*[$STORED_HEAD_\\n[#LEVEL]_UL2_GAP_1]-(\\*[$HEAD_\\n[#LEVEL]_BASELINE_ADJ]) +. ds $HEAD_\\n[#LEVEL]_UL2_GAP_1 \\n[#UL_RAISE]u +. rr #UL_RAISE +. \} +. \} +. rr #LEVEL . rr #SKIP_TRAPS . if \\n[#REMOVE_ADJ] .DOC_LEAD \\n[#DOC_LEAD]u-\\n[#DOC_LEAD_ADJ]u . if (\\n[#FOOTER_MARGIN]+\\n[.v]>=\\n[#B_MARGIN]) \{\ @@ -7080,8 +7102,8 @@ SMALLCAPS takes precedence. . sp -1 . \} . vs \\n[#DOC_LEAD]u -. if \\n[#SINGLE_SPACE] .sp 2 -.sp +. ie \\n[#SINGLE_SPACE] .sp 2 +. el .sp .END \# .MAC NAMED_DOCHEADER END @@ -8239,8 +8261,6 @@ $\\*[DOC_]COVERTITLE_\\n+[#\\*[DOC_]COVERTITLE_NUM] \\$\\n[#\\*[DOC_]COVERTITLE_ . if \\n[.ns] .rs . ev DOCHEADER . evc 0 -. if \\n[#DOCHEADER_COLOR]=1 \ -. COLOR \\*[$DOCHEADER_COLOR] . L_MARGIN \\n[#DOC_L_MARGIN]u . LL \\n[#DOC_L_LENGTH]u . ta \\n[.l]u @@ -8257,8 +8277,6 @@ $\\*[DOC_]COVERTITLE_\\n+[#\\*[DOC_]COVERTITLE_NUM] \\$\\n[#\\*[DOC_]COVERTITLE_ . \} . ev DOCHEADER . evc 0 -. if \\n[#DOCHEADER_COLOR]=1 \ -. COLOR \\*[$DOCHEADER_COLOR] . L_MARGIN \\n[#DOC_L_MARGIN]u . LL \\n[#DOC_L_LENGTH]u . ta \\n[.l]u @@ -8351,9 +8369,9 @@ $\\*[DOC_]COVERTITLE_\\n+[#\\*[DOC_]COVERTITLE_NUM] \\$\\n[#\\*[DOC_]COVERTITLE_ . 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] . \} +. RESTORE_SPACE . if \\n[#COLUMNS] .mk dc .END \# @@ -8595,7 +8613,7 @@ $\\*[DOC_]COVERTITLE_\\n+[#\\*[DOC_]COVERTITLE_NUM] \\$\\n[#\\*[DOC_]COVERTITLE_ \# First, a little convenience macro \# .MAC PROCESS_SHIM END -. if !\\n[nl]=\\n[#VALID_BASELINE] \{\ +. if !\\n[#CURRENT_V_POS]=\\n[#VALID_BASELINE] \{\ . while \\n+[#VALID_BASELINE]<\\n[#CURRENT_V_POS] . . nr #SHIM \\n[#VALID_BASELINE]-\\n[#CURRENT_V_POS] . \} @@ -8630,7 +8648,10 @@ Flex-spacing must be disabled with NO_FLEX before using SHIM. . \} . \} . nr #VALID_BASELINE \\n[#T_MARGIN]-\\n[#DOC_LEAD] \\n[#DOC_LEAD] -. if !r#CURRENT_V_POS .nr #CURRENT_V_POS \\n[.d] +. if !r#CURRENT_V_POS \{\ +. ie !'\\n[.z]'' .nr #CURRENT_V_POS \\n[.d] +. el .nr #CURRENT_V_POS \\n[nl] +. \} . ie \\n[#ADVANCE_FROM_TOP] \{\ . ie \\n[#CURRENT_V_POS]<(\\n[#T_MARGIN]-1v) \{\ . while \\n-[#VALID_BASELINE]>\\n[#CURRENT_V_POS] . @@ -8643,7 +8664,8 @@ Flex-spacing must be disabled with NO_FLEX before using SHIM. . nr #SHIM_MAX \\n[#DOC_LEAD]*10/15 . if !\\n[#CALCULATE_ONLY] \{\ . if !\\n[defer-count] \ -. if \\n[#SHIM]>\\n[#SHIM_MAX] .sp -1 +. if !\\n[#TOC] \ +. if \\n[#SHIM]>\\n[#SHIM_MAX] .sp -1 ' sp \\n[#SHIM]u . \} . rr #CURRENT_V_POS @@ -9360,6 +9382,7 @@ Shimming must be disabled with NO_SHIM before using FLEX. . rs . nop \& . sp -1 +. if \\n[#START] .sp -1 . if \\n[#FILLED] \{\ . fi . rr #FILLED @@ -11071,12 +11094,33 @@ Shimming must be disabled with NO_SHIM before using FLEX. . if !\\n[@TOP] \{\ . nr #HEAD 1 . ie !\\n[#START] \{\ -. nr #HEADING_NEEDS \\n[#NUM_ARGS]v+\\*[$HEAD_\\n[#LEVEL]_NEEDS]v+1v -. if \\n[#HEAD_\\n[#LEVEL]_SPACE_AFTER] .nr #HEADING_NEEDS +1v +. ie \\n[#NUM_ARGS]=1 \ +. nr #HEADING_NEEDS \ +\\n[#NUM_ARGS]v+\\*[$HEAD_\\n[#LEVEL]_NEEDS]v +. el \{\ +. vs \\n[.v]u\\*[$HEAD_\\n[#LEVEL]_LEAD] +. nr #HEADING_NEEDS \\n[.v]*(\\n[#NUM_ARGS]-1) +. nr #HEADING_NEEDS +(\\n[#DOC_LEAD]*\\*[$HEAD_\\n[#LEVEL]_NEEDS]) +. nr nl +\\n[#HEADING_NEEDS] +. nr #CURRENT_V_POS \\n[nl] +. nr #CALCULATE_ONLY 1 +. SHIM +. nr #HEADING_NEEDS +\\n[#SHIM] +. nr nl -(\\n[#HEADING_NEEDS]+\\n[#SHIM]) +. rr #CURRENT_V_POS +. rr #CALCULATE_ONLY +. vs +. \} +. if \\n[#HEAD_\\n[#LEVEL]_SPACE_AFTER] \ +. nr #HEADING_NEEDS +1v . ch RR_ADVANCE_FROM_TOP -. if \\n[.t]<\\n[#HEADING_NEEDS] .sp \\n[.t]u -. vpt 0 -. if !\\n[pdfbx-top] \ +. if (\\n[.t]-\\n[#HEADING_NEEDS])=1 \ +. nr #HEADING_NEEDS +1 +. if \\n[.t]<=\\n[#HEADING_NEEDS] \{\ +. nr #HEADING_DEFERRED 1 +. sp \\n[.t]u +. \} +. if !r pdfbx-top \ . if !\\n[#SPACE_ADDED] .if !\\n[#LINEBREAK] .sp . \} . el \{\ @@ -11101,12 +11145,11 @@ Shimming must be disabled with NO_SHIM before using FLEX. . el \{\ . if !\\n[#NO_FLEX] \ . if !\\n[#HEAD_\\n[#LEVEL]_NO_FLEX] \ -. if !r pdfbx-top .FLEX +. if !r pdfbx-top .FLEX . \} . \} . \} . el .rr #SPACE_ADDED -. vpt . \} . el \{\ . if \\n[#NUM_ARGS]>1 \{\ @@ -11128,6 +11171,17 @@ Shimming must be disabled with NO_SHIM before using FLEX. . \} . ev HEADING . evc 0 +. if !'\\*[$HEAD_\\n[#LEVEL]_LEAD]'' \{\ +. ds $HEAD_LEAD_OP \\*[$HEAD_\\n[#LEVEL]_LEAD] +. substring $HEAD_LEAD_OP 0 0 +. ds $HEAD_LEAD \\*[$HEAD_\\n[#LEVEL]_LEAD] +. substring $HEAD_LEAD 1 -1 +. ie '\\*[$HEAD_LEAD_OP]'+' .ds $HEAD_LEAD_OP - +. el .ds $HEAD_LEAD_OP +. sp \\*[$HEAD_LEAD_OP]\\*[$HEAD_LEAD]*(\\n[#NUM_ARGS]u) +. rm $HEAD_LEAD_OP +. rm $HEAD_LEAD +. \} .\" Style . if \\n[#PRINT_STYLE]=2 \{\ . fam \\*[$HEAD_\\n[#LEVEL]_FAM] @@ -11135,7 +11189,7 @@ Shimming must be disabled with NO_SHIM before using FLEX. . ps \\n[#DOC_PT_SIZE]u\\*[$HEAD_\\n[#LEVEL]_SIZE] . if !\\n[#PARAHEAD] \ . vs \\n[#DOC_LEAD]u\\*[$HEAD_\\n[#LEVEL]_LEAD] -. if \\n[pdfbx-top] \{\ +. if r pdfbx-top \{\ . SIZESPECS . ie \\n[#PP]=0 \{\ . rt @@ -11366,6 +11420,11 @@ Shimming must be disabled with NO_SHIM before using FLEX. \w'\\*[$HD_NUM]\\$[\\n[#ARG_NUM]]'+\w'\[parahead-spacer]' . if (\\n[#HEAD_\\n[#LEVEL]_UNDERSCORE]=0)&(\\n[#HEAD_\\n[#LEVEL]_UNDERSCORE2]=0) \{\ . ie \\n[#HD_NUM_INDENT] \{\ +. if \\n[@TOP] \{\ +. sp |\\n[#T_MARGIN]u-1 +. rr @TOP +. ch RR_@TOP +. \} . if !'\\*[$HEAD_\\n[#LEVEL]_QUAD]'CENTER' \ . ti \\n[#HD_NUM_INDENT]u . PRINT \ @@ -11374,6 +11433,11 @@ Shimming must be disabled with NO_SHIM before using FLEX. . \} . el \{\ . ie !\\n[#PARAHEAD] \{\ +. if \\n[@TOP] \{\ +. sp |\\n[#T_MARGIN]u-1 +. rr @TOP +. ch RR_@TOP +. \} . PRINT \ "\v'-\\*[$HEAD_\\n[#LEVEL]_BASELINE_ADJ]'\\*[$HD_NUM]\\$[\\n[#ARG_NUM]] . br @@ -11405,6 +11469,11 @@ Shimming must be disabled with NO_SHIM before using FLEX. . nr #SAVED_UL_WEIGHT \\n[#UNDERSCORE_WEIGHT] . UNDERSCORE_WEIGHT \\*[$HEAD_\\n[#LEVEL]_UL_WEIGHT] . ie \\n[#HD_NUM_INDENT] \{\ +. if \\n[@TOP] \{\ +. sp |\\n[#T_MARGIN]u-1 +. rr @TOP +. ch RR_@TOP +. \} . if !'\\*[$HEAD_\\n[#LEVEL]_QUAD]'CENTER' \ . ti \\n[#HD_NUM_INDENT]u . UNDERSCORE \\*[$HEAD_\\n[#LEVEL]_UL_GAP] \ @@ -11413,6 +11482,11 @@ Shimming must be disabled with NO_SHIM before using FLEX. . \} . el \{\ . ie !\\n[#PARAHEAD] \{\ +. if \\n[@TOP] \{\ +. sp |\\n[#T_MARGIN]u-1 +. rr @TOP +. ch RR_@TOP +. \} . UNDERSCORE \\*[$HEAD_\\n[#LEVEL]_UL_GAP] \ "\v'-\\*[$HEAD_\\n[#LEVEL]_BASELINE_ADJ]'\\*[$HD_NUM]\\$[\\n[#ARG_NUM]] . br @@ -11440,6 +11514,11 @@ Shimming must be disabled with NO_SHIM before using FLEX. . nr #SAVED_UL2_WEIGHT \\n[#UNDERSCORE_WEIGHT] . UNDERSCORE_WEIGHT \\*[$HEAD_\\n[#LEVEL]_UL2_WEIGHT] . ie \\n[#HD_NUM_INDENT] \{\ +. if \\n[@TOP] \{\ +. sp |\\n[#T_MARGIN]u-1 +. rr @TOP +. ch RR_@TOP +. \} . if !'\\*[$HEAD_\\n[#LEVEL]_QUAD]'CENTER' \ . ti \\n[#HD_NUM_INDENT]u . UNDERSCORE2 \\*[$HEAD_\\n[#LEVEL]_UL2_GAP_1] \ @@ -11449,6 +11528,11 @@ Shimming must be disabled with NO_SHIM before using FLEX. . \} . el \{\ . ie !\\n[#PARAHEAD] \{\ +. if \\n[@TOP] \{\ +. sp |\\n[#T_MARGIN]u-1 +. rr @TOP +. ch RR_@TOP +. \} . UNDERSCORE2 \\*[$HEAD_\\n[#LEVEL]_UL2_GAP_1] \ \\*[$HEAD_\\n[#LEVEL]_UL2_GAP_2] \ "\v'-\\*[$HEAD_\\n[#LEVEL]_BASELINE_ADJ]'\\*[$HD_NUM]\\$[\\n[#ARG_NUM]] @@ -11480,8 +11564,6 @@ Shimming must be disabled with NO_SHIM before using FLEX. . ds $HEAD_\\n[#LEVEL]_BASELINE_ADJ \\*[$RESTORE_ADJ] . if !\\n[#PARAHEAD] .sp \\*[$HEAD_\\n[#LEVEL]_BASELINE_ADJ] . \} -. if !\\n[#PARAHEAD] \ -. if \\n[#HEAD_\\n[#LEVEL]_SPACE_AFTER] .sp . if \\n[#CAPS_OFF] \{\ . CAPS OFF . rr #CAPS_OFF @@ -11512,7 +11594,26 @@ Shimming must be disabled with NO_SHIM before using FLEX. . ie !\\n[pdfbx-running] .ti \\n[#PP_TEXT_OFFSET]u . el .ti \\n[#PP_TEXT_OFFSET]u+\\*[wt\\n[stack]]+\\*[gap\\n[stack]]u . \} -. if !\\n[#PARAHEAD] .nr #PP 0 +. if !\\n[#PARAHEAD] \{\ +. if !\\n[#NUM_ARGS]=1 \{\ +. if !'\\*[$HEAD_\\n[#LEVEL]_LEAD]'' \{\ +. SHIM_1 +. \} +. if \\n[#HEADING_DEFERRED] \{\ +. nr nl-1 \\n[nl] +. sp 1 +. nr nl-2 \\n[nl] +. sp -1 +. if (\\n[nl-2]-\\n[nl-1])<(\\*[$HEADING_\\n[#LEVEL]_BASELINE_ADJ]) .sp +. rr nl-1 +. rr nl-2 +. rr #HEADING_DEFERRED +. \} +. \} +. nr #PP 0 +. \} +. if !\\n[#PARAHEAD] \ +. if \\n[#HEAD_\\n[#LEVEL]_SPACE_AFTER] .sp . rr #PARAHEAD . if \\n[#LB_4_HD] .rr #LB_4_HD . if \\n[#QUOTE_4_HD] .rr #QUOTE_4_HD @@ -11542,6 +11643,8 @@ Shimming must be disabled with NO_SHIM before using FLEX. \# BASELINE_ADJUST \#---when called as TOC_ENTRY_STYLE this is also available--- \# INDENT +\# SPACE_BEFORE +\# SPACE_BENEATH \# *Function: \# Sets up complete style parameters for HEADING <level>. If \# invoked as TOC_ENTRY_STYLE, sets up parameters for the @@ -11592,6 +11695,7 @@ Shimming must be disabled with NO_SHIM before using FLEX. . ab [mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c]. . \} . ds $HEAD_\\n[#LEVEL]_UL_GAP \\$1 +. ds $STORED_HEAD_\\n[#LEVEL]_UL_GAP \\$1 . shift . \} . if '\\$1'NO_UNDERSCORE' \{\ @@ -11614,6 +11718,7 @@ Shimming must be disabled with NO_SHIM before using FLEX. . ab [mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c]. . \} . ds $HEAD_\\n[#LEVEL]_UL2_GAP_1 \\$1 +. ds $STORED_HEAD_\\n[#LEVEL]_UL2_GAP_1 \\$1 . shift . if '\\$1'' \{\ . tm1 "[mom]: The UNDERSCORE2 argument to \\$0 requires an inter-rule gap. @@ -11692,7 +11797,9 @@ Shimming must be disabled with NO_SHIM before using FLEX. . \} . if '\\$1'BASELINE_ADJUST' \{\ . shift -. ds $HEAD_\\n[#LEVEL]_BASELINE_ADJ \\$1 +. ie '\\$1'DEFAULT' \ +. ds $HEAD_\\n[#LEVEL]_BASELINE_ADJ \\n[#DOC_LEAD]/10 +. el .ds $HEAD_\\n[#LEVEL]_BASELINE_ADJ \\$1 . shift . \} . if '\\$1'CAPS' \{\ @@ -11724,6 +11831,7 @@ Shimming must be disabled with NO_SHIM before using FLEX. . shift . ie \B'\\$1' \{\ . PREFIX_CHAPTER_NUMBER \\$1 +. shift . \} . el .PREFIX_CHAPTER_NUMBER . \} @@ -11755,6 +11863,16 @@ Shimming must be disabled with NO_SHIM before using FLEX. . shift . \} . \} +. if \\n[#HEAD_\\n[#LEVEL]_UNDERSCORE] \{\ +. nr #UL_RAISE \\*[$STORED_HEAD_\\n[#LEVEL]_UL_GAP]-(\\*[$HEAD_\\n[#LEVEL]_BASELINE_ADJ]) +. ds $HEAD_\\n[#LEVEL]_UL_GAP \\n[#UL_RAISE]u +. rr #UL_RAISE +. \} +. if \\n[#HEAD_\\n[#LEVEL]_UNDERSCORE2] \{\ +. nr #UL_RAISE \\*[$STORED_HEAD_\\n[#LEVEL]_UL2_GAP_1]-(\\*[$HEAD_\\n[#LEVEL]_BASELINE_ADJ]) +. ds $HEAD_\\n[#LEVEL]_UL2_GAP_1 \\n[#UL_RAISE]u +. rr #UL_RAISE +. \} . rr #LEVEL . if d$TOC .rm $TOC .END @@ -16353,9 +16471,7 @@ EN-\\n[#CH_NUM]\\n[#EN_NUMBER]-body \s-2\v'-\\n[#DOC_LEAD]u/7u'\\n[#EN_NUMBER]\| . CAPS OFF . if \\n[#TOC_HEADER_COLOR]=1 .gcolor default . br -. RESTORE_SPACE . sp -. SHIM_1 . nf . TOC_ENTRIES . if \\n[#LINENUMBERS]=3 \{\ @@ -21074,9 +21190,9 @@ EN-\\n[#CH_NUM]\\n[#EN_NUMBER]-body \s-2\v'-\\n[#DOC_LEAD]u/7u'\\n[#EN_NUMBER]\| . \} . el \{\ . if \\n[.ns] .if !(\\n[nl]=\\n[#PAGE_TOP]) .rs -. if !\\n[pdfbx-top] .sp \\n[#DOC_LEAD]u/2u +. if !r pdfbx-top .sp \\n[#DOC_LEAD]u/2u . \} -. if \\n[pdfbx-top] \{\ +. if r pdfbx-top \{\ . ps \\*[tbl*caption-size-change] . SIZESPECS . ps @@ -22140,7 +22256,7 @@ does not fit on page \\n[pgnum]\\*[col-num]. . if (\\n[grap]=1)&(\\n[pic*caption-after-label]=1) \ \!. sp -2 . if \\n[pdfbx-running] \{\ -. if \\n[pdfbx-top] \{\ +. if r pdfbx-top \{\ . ie !\\n[pic*left] \!.in -\\*[gap\\n[stack]]u*2u . el .in -\\*[wt\\n[stack]] . \} @@ -23946,7 +24062,7 @@ No room to start \\*[MN-pos] margin note #\\n[MN-curr] on page \\n[#P]. . \} . \} . if r IMG \{\ -. if \\n[pdfbx-top] \ +. if r pdfbx-top \ . rt . sp (\\*[wt\\n[stack]]/2u)+\\*[gap\\n[stack]]u . nr img*pdfbx 1 @@ -24358,38 +24474,52 @@ No room to start \\*[MN-pos] margin note #\\n[MN-curr] on page \\n[#P]. \# .de rr-pdfbx-top . rr pdfbx-top +. it .. \# .de rr-pdfbx-end . rr pdfbx-end +. it .. \# .de rr-pdfbxstop . rr pdfbxstop +. it .. \# .de rr-pic*pdfbx . rr pic*pdfbx +. it .. \# .de rr-tbl*pdfbx . rr tbl*pdfbx +. it .. \# .de rr-img*pdfbx . rr img*pdfbx +. it .. \# .de rr-pdfbx-post-q . rr pdfbx-post-q +. it .. \# .de rr-pdfbx-div-start . rr pdfbx-div-start +. it .. \# .de rr-boxed-heading . rr boxed-heading +. it +.. +\# +.de rr-post-box +. rr post-box +. ch rr-post-box .. \# \# Heavy lifting macros called from BOX. @@ -24677,7 +24807,7 @@ No room to start \\*[MN-pos] margin note #\\n[MN-curr] on page \\n[#P]. . if \\n[img*pdfbx]=2 \ . sp -.5 . if \\n[boxed-heading] \{\ -. if !\\n[pdfbx-newpage] .sp -1 +. if !\\n[pdfbx-newpage] .sp -1-\\n[#SHIM]u . rr pdfbx-newpage . sp -(\\*[$HEAD_\\n[#LEVEL]_BASELINE_ADJ])u . rr boxed-heading @@ -24799,6 +24929,7 @@ No room to start \\*[MN-pos] margin note #\\n[MN-curr] on page \\n[#P]. . \} . \} . nr post-box 1 +. wh \\n[.d]u+1v rr-post-box .. \# \# PDF outline page numbering _______________________________________________ groff-commit mailing list groff-commit@gnu.org https://lists.gnu.org/mailman/listinfo/groff-commit