Re: Fields for Zotero

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

 



On 17.08.22 12:49, Phillips Rogfield wrote:
Hi Michael,

thanks for your answer.

 1.

    My current understanding is that the proposed
    |com.sun.star.text.TextField.Bibliography| is the implementation for
    “Insert -> Table of Contents and Index -> Bibliography Entry” of
    LibreOffice Writer.
    Is that right?

yes

    If it is, then it would mean that LibreOffice would manage the
    citation process (insert citations and bibliography). Right?

yes

    We don’t want that. We want Zotero to manage it instead. We want
    Zotero to tell LibreOffice what an inline citation looks like and
    what a bibliography looks like.
    The alternative would be to import the Zotero database in
    LibreOffice, and then tell LibreOffice what the correct citation
    style is, and keep the database updated when the Zotero database
    changes, and keep the citation style updated when it changes.
    That looks too cumbersome.
    But maybe I’m failing to understand the process, I have no
    experience with LibreOffice citation management. I have always used
    Zotero.

 2.

        the other option is, you could insert this with arbitrary
        content via the Fieldmark service, and since about version 7.3
        this kind of works in the document model and can be stored as an
        ODF extension in addition to DOCX/RTF.

That sounds good, but the Fieldmark seems to lack documentation?

yes, it was in a really poor state until recently.

i think by default it should insert a "text fieldmark", which consists of 3 dummy characters in the text, corresponding to the 3 "fldChar" elements in DOCX.

there are bizarrely-named properties in a container that can be retrieved via getParameters() but i don't think they're relevant to text fieldmarks.

oh, one problem is there isn't a good way to retrieve the position of the separator character currently; it's possible via XTextPortionEnumeration (used by ODF export) but that's hardly convenient.

    however there is currently no implementation of /expanding/ the
    fieldmark, that is, there is no code to evaluate the fieldmark
    command and overwrite the fieldmark result.

I have no idea what that means.
I’m sorry for my lack of knowledge.

for Writer's native fields, if you go to Tools->Update->Fields it will replace the content; this isn't implemented for fieldmarks.

Does it mean that we can’t, from a LibreOffice Writer Java extension, retrieve the code of the fieldmark and tell LibreOffice what it should print instead of the code?

no, it means you have to do that because Writer won't do it for you.

you can get fieldmark's anchor via XTextRange and then create a cursor and move it 1 to the right from the start to insert the command, and 1 to the left from the end to insert the result.

If so, on one hand it is exactly what we need, on the other hand it seems it is already working?
LibreOffice already shows the correct text, not the code.
I believe it shows the text in the tag |w:fldChar|, not the one in the tag |w:instrTex| (which contains the code).
Is that correct?

it can show either, you can switch with View->Field Names.

(the user can also edit the field command when it's visible, same as in Word.)

I hereby attach a document with a Zotero inline citation in the Microsoft Word “Fields” format, for reference. We can take it as a reference implementation.

you can insert basically the same thing via the API. well, the DOCX filter used the API to insert it :)

looks like 7.3 can already round-trip this, although it imports the field currently in the "old" way: the command is not inserted as document text, but as one of those weirdly named parameters as a plain string - the import might need a bit of fixing there...

(there's a config setting Filter::Microsoft::Import::ForceImportWWFieldsAsGenericFields to force DOCX to import every field as a fieldmark with command and result)

debugging tip, you can get an XML dump of document model with Shift+F12 when you set env var SW_DEBUG=T:

      <SwTextNode ptr="0x556258bc6830" index="9">
        <m_Text>Tddest **(Abadie, 2005)* sad</m_Text>
[...]
    <fieldmarks>
      <Fieldmark fieldname="vnd.oasis.opendocument.field.UNHANDLED" fieldHelptext="">
        <MarkBase name="Bookmark">
          <markPos>
            <SwPosition nNode="9" nContent="7"/>
          </markPos>
          <otherMarkPos>
            <SwPosition nNode="9" nContent="24"/>
          </otherMarkPos>
        </MarkBase>
        <parameters>
          <parameter name="vnd.oasis.opendocument.field.code" value="&quot;ADDIN ZOTERO_ITEM CSL_CITATION {\&quot;citationID\&quot;: [long text cut] "
        </parameters>
      </Fieldmark>

here you can marvel at the fact that somebody thought it a good idea to name parameters that have nothing to do with ODF and are for DOCX "vnd.oasis.opendocument.*".

Best.

On 16/08/2022 12:06, Michael Stahl wrote:

On 16.08.22 09:03, Phillips Rogfield wrote:
Hi Miklos,

thank you very much for your answer!

Let’s make sure we are on the same page here.

Zotero is already able to write its citation with LibreOffice.
To do so, it currently uses one of two methods, at user’s choice:
(1) ReferenceMarks, which are NOT compatible with Microsoft Word
(2) Bookmarks, which are SOMEHOW compatible with Microsoft Word, in the sense that you can’t put citations in footnotes, and they tend to break very easily.

Instead, the Zotero plugin for Microsoft Word uses:
(1) Fields, which are NOT compatible with LibreOffice
(2) Bookmarks, see above.

The point of this post is to allow the plugin for LibreOffice to use “Fields”.

In particular, I have to use the UNO interface to write the following in the |word/document.xml| file inside a .docx file:

|<w:r> <w:fldChar w:fldCharType="begin"/> </w:r> <w:r> <w:instrText xml:space="preserve"> [some text here] </w:instrText> </w:r> <w:r> <w:fldChar w:fldCharType="separate"/> </w:r> <w:r w:rsidRPr="007C09F6"> <w:rPr> <w:rFonts w:ascii="Calibri" w:hAnsi="Calibri" w:cs="Calibri"/> </w:rPr> <w:t> [some text here] </w:t> </w:r> <w:r> <w:fldChar w:fldCharType="end"/> </w:r> |

would the |com.sun.star.text.TextField.Bibliography| interface allow me to write the above code?

kind of, there is code to export it as a CITATION field in DocxAttributeOutput::EndField_Impl in sw/source/filter/ww8/docxattributeoutput.cxx.

the other option is, you could insert this with arbitrary content via the Fieldmark service, and since about version 7.3 this kind of works in the document model and can be stored as an ODF extension in addition to DOCX/RTF.

however there is currently no implementation of *expanding* the fieldmark, that is, there is no code to evaluate the fieldmark command and overwrite the fieldmark result.




[Index of Archives]     [LARTC]     [Bugtraq]     [Yosemite Forum]     [Photo]

  Powered by Linux