bug-groff
[Top][All Lists]
Advanced

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

[bug #64484] [troff] .device and \X should behave similarly


From: G. Branden Robinson
Subject: [bug #64484] [troff] .device and \X should behave similarly
Date: Tue, 3 Sep 2024 22:56:53 -0400 (EDT)

Update of bug #64484 (group groff):

                  Status:               Postponed => In Progress            
                 Summary: [troff] \X escape sequence should read its argument
in (something like) copy mode => [troff] .device and \X should behave
similarly

    _______________________________________________________

Follow-up Comment #21:

Restoring original summary, more or less, and un-postponing.

1.  \X should encode special characters in its argument in `\[uXXXX]` form. 
This is done.

2.  The `device` request should do the same.

3.  Neither `\X` or `device` should cause a blanket flush of 5 different
things:


   set_font(tf);
   glyph_color(gcol);
   fill_color(fcol);
   flush_tbuf();
   do_motion();


Right now they both do, and this causes documents to regress.  People have
undertaken baffling workarounds like:


.      nop \!x X ps:exec [/Dest /\\*[PDFBOOKMARK.NAME] /Title (\\*[pdf:title])
/Level \\n[pdf:bm.lev] /OUT pdfmark


...which really should be expressible as:


.      device ps:exec [/Dest /\\*[PDFBOOKMARK.NAME] /Title (\\*[pdf:title])
/Level \\n[pdf:bm.lev] /OUT pdfmark


(That's from "pdf.tmac"'s `pdfbookmark` macro definition, which is why the
backslashes are doubled.)

Extend the `fl` request to take letter arguments encoding which bits of state
should marked dirty, or flushed, depending on how you look at it.

f set_font()
m glyph_color()
M fill_color()
t flush_tbuf()
p do_motion()

These aren't the world's best mnemonics.  Lots of collisions here:
font/fill/flush, m/M/motion.  But we need _something_.

Maybe we can read an "identifier" (word) at a time and `strcmp()` it.  That'd
be less gross.

Most device extension commands won't need to perform a flush, because they
don't dirty any of these states.  sboxes is an exception.  But all it needs to
dirty is the fill color (and _maybe_ the glyph color, because of the box
edges?)...but not the rest.  `do_motion()` in particular appears to cause
grief, and breaks Peter's _mom_ documents, unaligning the shaded boxes with
the text that's supposed to be in them.

Possibly once all this is done we won't need the long-undocumented `tag` and
`taga` ("tag append") requests anymore.  I get the feeling they were stuck in
to avoid the state-flushing problems described above.  One bit I don't
understand is what's being "appended": both write out "x X" commands,
seemingly right away.  `taga` has very limited use: one invocation in
"devtag.tmac", which calls it from one macro "DEVTAG-NEXT", which itself has
only one caller anywhere, "DEVTAG-COL-NEXT".  _me_ and _ms_ (and only those)
call that, but I don't know if columnated HTML output works with those
packages in the first place.  Find out.  If it doesn't, nothing is lost if we
"break" it.


    _______________________________________________________

Reply to this item at:

  <https://savannah.gnu.org/bugs/?64484>

_______________________________________________
Message sent via Savannah
https://savannah.gnu.org/

Attachment: signature.asc
Description: PGP signature


reply via email to

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