Follow-up Comment #1, bug#65097 (group groff): If I look at the output produced by:-
pdfmom ../doc/automake.mom -P-d | less I can see:- % x X ps: exec 0 setlinejoin %% V12000 0 j % V12000 % H72000 % x X ps: exec 0 setlinecap %% wh2500 0 J So the "0 j" has been emitted in response to the 0 setlinejoin, and "0 J" for the 0 setlinecap. So the code is working as expected. Before the last change to accomodate both on the same command the code was essentially one switch statement dealing with all the \X'ps: ...' commands which gropdf is designed to handle, documented in gropdf.1. Since the change, it is now two switch statements, an else clause at the end of the second switch will fire even if the command was handled as part of the first switch. Even without the split into two switches, an else clause to trap unhandled \X'ps: ...' commands is futile because the grops man page documenting the device control commands would allow complete postscript programs to be passed to the printer, which a pdf file would not understand. An example is this (which mom passes as a \Y'ps: ...' command):- % x X ps: def %% +grops begin %% +/decornone { grops begin /X { } def /Y { } def /y2 -1 def end } def %% +/decorline { grops begin u neg /uld exch def u /ulw exch def %% + /X { currentpoint /y0 exch def /x0 exch def } def %% + /Y { currentpoint /y1 exch def /x1 exch def %% + drawline /x2 x1 def /y2 y1 def } def end } def %% +/drawline { gsave ulw setlinewidth 0 setlinecap x1 y1 uld sub moveto %% + y2 y0 eq { x2 y2 } { x0 y0 } ifelse uld sub lineto stroke %% + grestore } def %% +decornone %% +/uld 0 def %% +/ulw 0 def %% +/A { X show Y } def %% +/B { 0 SC 3 -1 roll X widthshow Y } def %% +/C { 0 exch X ashow Y } def %% +/D { 0 exch 0 SC 5 2 roll X awidthshow Y } def %% +/E { 0 rmoveto X show Y } def %% +/F { 0 rmoveto 0 SC 3 -1 roll X widthshow Y } def %% +/G { 0 rmoveto 0 exch X ashow Y } def %% +/H { 0 rmoveto 0 exch 0 SC 5 2 roll X awidthshow Y } def %% +/I { 0 exch rmoveto X show Y } def %% +/J { 0 exch rmoveto 0 SC 3 -1 roll X widthshow Y } def %% +/K { 0 exch rmoveto 0 exch X ashow Y } def %% +/L { 0 exch rmoveto 0 exch 0 SC 5 2 roll X awidthshow Y } def %% +/M { rmoveto X show Y } def %% +/N { rmoveto 0 SC 3 -1 roll X widthshow Y } def %% +/O { rmoveto 0 exch X ashow Y } def %% +/P { rmoveto 0 exch 0 SC 5 2 roll X awidthshow Y } def %% +/Q { moveto X show Y } def %% +/R { moveto 0 SC 3 -1 roll X widthshow Y } def %% +/S { moveto 0 exch X ashow Y } def %% +/T { moveto 0 exch 0 SC 5 2 roll X awidthshow Y } def %% +end %% + This is pure postscript code which is not part of the pdf standard, so all gropdf can do is consume it, on the assumption it will mean something if the same document is run through grops. _______________________________________________________ Reply to this item at: <https://savannah.gnu.org/bugs/?65097> _______________________________________________ Message sent via Savannah https://savannah.gnu.org/