Date: prev next · Thread: first prev next last
2017 Archives by date, by thread · List index


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


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.