Page 1 of 1
Elments tab with java api
Posted: Fri Feb 14, 2014 12:16 am
by hmida
Hi,
I use WhatAttributesCanGoHereContext class to obtain a list of possible insert after the node elements, but the list is not identical with the items displayed in the tab element (after).
how I can have just the list of elements to be inserted after the node (as in the Elements tab) ?
here is my code :
Code: Select all
WhatElementsCanGoHereContext whatElementsCanGoHereContext = authorSchemaManager
.createWhatElementsCanGoHereContext(authorPageAccess.getCaretOffset());
if (whatElementsCanGoHereContext != null) {
List<CIElement> whatElementsCanGoHere = authorSchemaManager
.whatElementsCanGoHere(whatElementsCanGoHereContext);
if (whatElementsCanGoHere != null) {
for (CIElement ciElement : whatElementsCanGoHere) {
if("PAR_ET".equals(ciElement))
boolean find = true;
}
Best regards,
Hmida.
Re: Elments tab with java api
Posted: Fri Feb 14, 2014 9:53 am
by Radu
Hi Hmida,
If you want to know the list of elements which can be inserted after the current element you need to create the context based on a caret offset which is after the element, something like:
Code: Select all
AuthorNode nodeAtOffset = authorAccess.getDocumentController().getNodeAtOffset(authorPage.getCaretOffset());
int offsetAfter = nodeAtOffset.getEndOffset() + 1;
WhatElementsCanGoHereContext contextAfter = authorSchemaManager.createWhatElementsCanGoHereContext(offsetAfter);
Regards,
Radu
Re: Elments tab with java api
Posted: Sat Feb 15, 2014 12:55 pm
by hmida
Hi Radu,
This code work fine :
Code: Select all
if(position != null && position.equals("BEFOR")){
whatElementsCanGoHere = authorSchemaManager
.createWhatElementsCanGoHereContext(authorAccess
.getEditorAccess().getSelectionStart());
}else if(position != null && position.equals("AFTER")){
whatElementsCanGoHere = authorSchemaManager
.createWhatElementsCanGoHereContext(authorAccess
.getEditorAccess().getSelectionEnd());
}
if (whatElementsCanGoHere != null) {
List<CIElement> elements = authorSchemaManager.whatElementsCanGoHere(whatElementsCanGoHere);
if (elements != null) {
for (CIElement ciElement : elements) {
if(elementName != null && elementName.equals(ciElement.toString())){
canGoHere = true;
}
}}}
my xml doc :
Code: Select all
<Tag0>
<a>
<b> (user select this node)
<c>
<d>
</Tag0>
How can I initialize the context dynamically :
When the user select the node '<b>', I want to know if it can insert an element at the end of the section (between <d> and </ Tag0>).
Regards,
Hmida.
Re: Elments tab with java api
Posted: Mon Feb 17, 2014 10:56 am
by Radu
Hi Hmida,
How can I initialize the context dynamically :
When the user select the node '<b>', I want to know if it can insert an element at the end of the section (between <d> and </ Tag0>).
I'm sorry but I do not understand.
You also have the API:
ro.sync.exml.workspace.api.editor.page.author.WSAuthorEditorPageBase.getFullySelectedNode()
to give you the node which is currently fully selected by the user.
Each node has
getParent(),
getStartOffset() and
getEndOffset() methods.
Each parent node has a
ro.sync.ecss.extensions.api.node.AuthorParentNode.getContentNodes() method which can be used to iterate child nodes.
The general AuthorNode architecture which is exposed via the API looks like this:
http://www.oxygenxml.com/InstData/Edito ... ecture.gif
You have a hierarchy of nodes which point to a common sequence containing all the text nodes from the XML document.
Regards,
Radu