On Tue, Dec 12, 2017 at 03:53:41PM +0100, Michael Stahl wrote:
On 12.12.2017 14:22, Jens Tröger wrote:
Michael, I the case you describe would I not see the same UNO object address for the same
paragraph in the document? But iterating over the ToC’s paragraphs as described previously in
this thread, I get for the index view:
pyuno object
(com.sun.star.text.XTextContent)0x7feddb8d2638{implementationName=SwXParagraph, … }
and then for the global document view:
pyuno object
(com.sun.star.text.XTextContent)0x7fedd9f5f598{implementationName=SwXParagraph, … }
for the same first entry paragraph in the ToC. In fact, if I instantiate the ToC’s text range
three times, then I get three different objects for the first paragraph:
pyuno object (com.sun.star.text.XTextContent)0x7fc6b1d41188
pyuno object (com.sun.star.text.XTextContent)0x7fc6b1e66968
pyuno object (com.sun.star.text.XTextContent)0x7fc6b430e288
Do paragraphs have another unique identifier that associates these different instances as
objects representing the same document paragraph?
do you retain a reference to the paragraphs somewhere? Writer itself
doesn't keep the SwXParagraph alive, so if your extension drops the last
reference to it then it will be deleted and a new one created the next time.
This is getting interesting. If I get the first paragraph of the ToC
index twice then these are two different objects:
index_pars = index.Anchor
index_cursor = document.Text.createTextCursorByRange(index_pars)
index_parenum1 = index_cursor.createEnumeration()
while index_parenum1.hasMoreElements():
index_par1 = index_parenum1.nextElement()
index_parenum2 = index_cursor.createEnumeration()
while index_parenum2.hasMoreElements():
index_par2 = index_parenum2.nextElement()
print(index_par1 == index_par2)
If I do the same with the global document then the two paragraphs are
the same:
parenum1 = document.Text.createEnumeration()
while parenum1.hasMoreElements():
par1 = parenum1.nextElement()
parenum2 = document.Text.createEnumeration()
while parenum2.hasMoreElements():
par2 = parenum2.nextElement()
print(par1 == par2)
If I collect all ToC index paragraphs in a list first and then iterate
over the entire document then paragraphs that are part of the ToC index
are found:
TOCPARSET = set()
index_pars = index.Anchor
index_cursor = document.Text.createTextCursorByRange(index_pars)
index_parenum = index_cursor.createEnumeration()
while index_parenum.hasMoreElements():
index_par = index_parenum.nextElement()
TOCPARSET.add(index_par)
parenum = document.Text.createEnumeration()
while parenum.hasMoreElements():
par = parenum.nextElement()
print(par in TOCPARSET)
While I would have expected the first example to print True, the third
example works fine and tells me what I'm looking for.
Thanks!
Jens
--
Jens Tröger
http://savage.light-speed.de/
Context
- Re: Association between ToC index object and its paragraph content (continued)
Re: Association between ToC index object and its paragraph content · Jens Tröger
Privacy Policy |
Impressum (Legal Info) |
Copyright information: Unless otherwise specified, all text and images
on this website are licensed under the
Creative Commons Attribution-Share Alike 3.0 License.
This does not include the source code of LibreOffice, which is
licensed under the Mozilla Public License (
MPLv2).
"LibreOffice" and "The Document Foundation" are
registered trademarks of their corresponding registered owners or are
in actual use as trademarks in one or more countries. Their respective
logos and icons are also subject to international copyright laws. Use
thereof is explained in our
trademark policy.