Hi Georg,
I never worked on or with the simple API, which was once donated by IBM to
the toolkit, but I took a quick look into your problem.
As usual I have pasted your code example into one of the existing tests, in
this case in the simple API list regression tests of package
org.odftoolkit.simple.text.list
The short answer, there is no high level (simple) API for format of list
items aside of their numbering style. You need to add it to the simple API
or go back to the lower level ODFDOM API. To go lower you go back to the
XML level, you receive on the simple API list item its XML representation
via
item.getOdfElement()
and receive its paragraph children via
NodeList nodeList = item.getOdfElement().getElementsByTagName("text:p");
during creation of the typed XML DOM tree their is still the high level
ODFDOM paragraph class being used
org.odftoolkit.odfdom.doc.text.OdfTextParagraph
which you might want to use, but there should be other ways for instance to
enhance Simple API..
What it is in general missing in the current ODF Toolkit version but was
added by the open-xchange fork, are high level positions of user objects
within the document. Allowing not only to append some styles or search for
some special content string, but point to a position to format. See an
example of an ODF document with its representation as a list of changes (in
JSON) in my mail to the OASIS ODF working group -
https://lists.oasis-open.org/archives/office-collab/201507/msg00003.html
Your example in full within the test of :
org.odftoolkit.simple.text.list.ListItemTest
@Test
public void testFormatTextContent() {
try {
TextDocument odtdoc = (TextDocument)
TextDocument.loadDocument(ResourceUtilities
.getTestResourceAsStream(SAMPLE_LIST_DOCUMENT));
Section s1 = odtdoc.appendSection("myTest");
Paragraph p2 = s1.addParagraph("This is a paragraph...");
List list = s1.addList();
list.setDecorator(new NumberDecorator(odtdoc));
ListItem item = list.addItem("this is the first item");
item = list.addItem("this is the second item");
item = list.addItem("this is the third item");
NodeList nodeList = item.getOdfElement().getElementsByTagName("text:p");
if(nodeList.getLength() > 0){
TextPElement textP = (TextPElement) nodeList.item(0);
if(textP instanceof OdfTextParagraph){
String styleName = "P4";
String content = " More content!";
String spanStyleName = "Text";
String spanContent = " More Span!";
((OdfTextParagraph) textP).addStyledContent(styleName,
content).addStyledSpan(
spanStyleName, spanContent);
}
}
odtdoc.save(ResourceUtilities.getTestOutputFolder().concat("myExampleList.odt"));
}
The new XML being generated:
<text:section text:display="true" text:name="myTest"
text:style-name="a9a60a2">
<text:p>This is a paragraph...</text:p>
<text:list text:style-name="l4bd2d4" xml:id="list65104419">
<text:list-item>
<text:p text:style-name="a7af3c1">this is the first item</text:p>
</text:list-item>
<text:list-item>
<text:p text:style-name="a7af3c1">this is the second item</text:p>
</text:list-item>
<text:list-item>
<text:p text:style-name="a7af3c1">this is the third item</text:p>
</text:list-item>
</text:list>
</text:section>
For the XML handling of ODF, I usually like to use JEdit application on
desktop with the Archive extension allowing to open the content.xml within
the ODT file and to edit and save it back (strangely works not for MS
Office created ODT) and the XML JEdit extension to indent the XML with some
key shortcut..
Hope it helps,
Svante
On Thu, Oct 29, 2015 at 11:07 AM, Georg Füchsle <[email protected]>
wrote:
> Hallo,
>
> I create list Items by:
>
> Paragraph p2 = s1.addParagraph("This is a paragraph...");
>
> List list = s1.addList();
> list.setDecorator(new NumberDecorator(target));
> ListItem item = list.addItem("this is the first item");
> item = list.addItem("this is the second item");
> item = list.addItem("this is the third item");
>
> How can I format the content of a list item? I tried to retieve a
> TextSelection of the list item but i did not succeed.
>
> Thanks in advance.
>
> Gio
>