mst at libreoffice.org
Tue Aug 23 11:12:34 UTC 2022
On 19.08.22 15:41, Phillips Rogfield wrote:
> Dear developers,
> I would like to fix bug 81720
> Basically when you insert a ReferenceMark, if you put the cursor at the
> edge of it (start or end), and type something, it will expand on the
> reference mark instead of writing it as a “normal text”.
> You can find how to reproduce it in comment 22
> I have set up my environment, but I’m not sure where is the code that
> “checks” if something is a ReferenceMark, if anything.
> Can you point me in the right direction, please?
so firstly, while cross references are fields, the reference marks are
not fields in Writer.
there are 2 different kinds of reference mark, both represented by a
SwTextAttr with ID RES_TXTATR_REFMARK.
one has a dummy character in the text, CH_TXTATR_INWORD, and behaves
similar to a field - it does not have an end position, so it cannot mark
text, it only contains its dummy character.
the other has a start and end position, but no dummy character - this is
the one you're concerned about.
these SwTextAttr all exist in a SwpHints array that is a member
SwTextNode::m_pSwpHints, sorted in multiple different ways.
when editing the text, the hints start and end positions are adjusted in
SwTextNode::Update() and its base class SwContentIndexReg::Update() -
it's rather complex code but i think you need to tweak these functions
to fix the problem.
More information about the LibreOffice