Documentation/Fields
Interoperability discussion:
There is one huge, glaring difference in Fields between LO and MS Word. Word does not automatically update the content of a field when the variable changes, but LO does.
NOTE: This is a work in progress. I'm trying to learn about fields and am noting my observations as I go along.
Fields in MS Word:
- do not automatically update when the variable changes.
- exception: PRINTDATE
- exception: SAVEDATE updates ONLY at FILEOPEN (yet LASTSAVEDBY never auto-updates)
- updated manually when the user selects a field and presses F9
- to update all fields, the Internet suggests Ctrl-A to select all, and then press F9
- can be edited by hand
- generally do not have the UI option to be "fixed" or unchangeable (although Ctrl-F11 will set fldLock'd for any field I expect)
- fldLocked fields can be updated by editing them and pressing OK
Fields in LO:
- always update automatically (unless FIXED)
- LO probably needs to be extended to allow the field an option to be manually updated. So a bit like "fixed"
- cannot be edited by hand when tied to a variable
- FIXED date format must be recognized as a valid date in order to work
- always can be marked as "fixed"
- this is a way to preserve/import a field whose displayString doesn't match the variableValue
- doing this will interfere with fldLock - which is rarely used since it is not easily UI accessible.
- this is a way to preserve/import a field whose displayString doesn't match the variableValue
Why not just import as plain text instead of a field?
- data loss in MS Word primarily
Things to watch out for during import:
- always make sure export also works (for all formats). DOCX export in particular is just bad/wrong, while RTF just seems to always work.
- import only works if the variableValue matches the displayString. If not, either mark as fixed, or treat as plain text instead.
- there are lots of reasons why it might not match. MS Word allows a lot of special formatting (upper, lower, title, sentence-case), or the user could have just typed something else.
Things to watch out for during export:
- make sure the MS Format doesn't support "locked" for that field type. If it does, then import has to handle that carefully.
- Date/Time are there for sure. See Read_F_DateTime.
Things to figure out:
- what is it with special characters like extra nulls etc. For example
lcl_GetExpandedField(const SwField &rField) { //replace LF 0x0A with VT 0x0B return rField.ExpandField(true, nullptr).replace(0x0A, 0x0B);