Hi!
As mentioned in a separate thread, I have a suggestion for the
charstyles situation, but it's important for me to first of all explain
another issue which bothers me with the current implementation of
charstyles. If I am correct, then understanding my problem will help to
understand some of the choices I make for that solution. But I'm doing
this in a separate thread, to try and keep things manageable (which may
or may not succeed).
So first, let me just say that I'm not very familiar with the charstyles
implementation, so please correct me if I'm wrong.
AFAIU, charstyle insets "work" (i.e., determine the font attributes as
they would appear in the latex output), in the following manner: when
such an inset is reached, and say it's a "noun" inset, then the command
for starting the "noun" command is output, followed by the text of the
inset, followed by the command for closing "noun".
The problem with this is that it's a *new* method for determining the
font attributes, which comes alongside the already existing method
(character-attributes). And as complicated as character-attributes are,
mixing two different methods for control fonts appearance is only going
to make things more complicated. Firstly, just because every time
someone now wants to somehow interact with font attributes, now two
different "places" have to be checked in order to determine the current
font attributes at a given position (1. what are the character
attributes at this position? 2. is this position inside an inset which
could affect font attributes? And note that the answer to (2) is not
trivial, even if it's the *only* method being used). Secondly, this can
lead to all kinds of situations of over-definition: what if the inset
determines one thing, but font-attributes determine another? Or, what if
you have two "emph" insets one inside the other --- using the current
implementation, I believe you'd get something like "\emph{bla bla
\emph{bla bla}}", which is probably *not* what we want. (To be sure,
with the current character attributes implementation, I'm not sure that
we'd get what we want, either: we'd probably get "\emph{bla bla bla
bla}", which is at least better, IMO. What we'd really want might depend
on the specific charstyles being used, but I don't see any good way to
even recognize this situation using insets. Using character attributes /
ranges I think it would be easier to recognize this situation). There is
no good way to deal with these kinds of situations using the current
mechanism.
And as far as I understand, we all agree that character attributes are
not going to be totally replaced by insets, so they're still going to be
around.
Also note that the fact that we ignore font attributes inside these
insets is forcing us to perform additional work which hides this fact
from the user: getDrawFont, draw --- we explicitly set the font used for
drawing, because the "true" font (as would be determined by the
character attributes) may not be what we want it to be.
For these reasons, I would prefer to see charstyle-insets work as
follows: the inset should make sure that inside it, the current_font is
set to the font settings required by this charstyle; and maybe also make
sure that the current_font can't be changed. Beyond that, no extra work
would be needed: no special output methods (i.e., no "latex command"
necessary in the layout, no special drawing methods --- all these would
be handled by the already existing character attributes mechanisms. But
the UI would still be that of an inset.
Does this sound reasonable?
Dov