ContentAssistRequest contentAssistRequest = null;
IStructuredDocumentRegion sdRegion = getStructuredDocumentRegion(documentPosition);
if (sdRegion != nodeAtOffset.getFirstStructuredDocumentRegion()) {
// completing the *first* tag in "<tagname1 |<tagname2"
IDOMNode actualNode = (IDOMNode) node.getModel().getIndexedRegion(
sdRegion.getStartOffset(completionRegion));
if (actualNode != null) {
if (actualNode.getFirstStructuredDocumentRegion() == sdRegion) {
// start tag
if (documentPosition > sdRegion
.getStartOffset(completionRegion)
+ completionRegion.getLength()) {
// it's attributes
contentAssistRequest = new ContentAssistRequest(
actualNode, actualNode, sdRegion,
completionRegion, documentPosition
- matchString.length(),
matchString.length(), matchString);
if (node.getStructuredDocument()
.getRegionAtCharacterOffset(
sdRegion.getStartOffset(completionRegion) - 1)
.getRegionAtCharacterOffset(
sdRegion.getStartOffset(completionRegion) - 1)
.getType() == DOMRegionContext.XML_TAG_OPEN) {
addAttributeNameProposals(contentAssistRequest,
context);
}
addTagCloseProposals(contentAssistRequest, context);
} else {
// it's name
contentAssistRequest = new ContentAssistRequest(
actualNode, actualNode.getParentNode(),
sdRegion, completionRegion, documentPosition
- matchString.length(),
matchString.length(), matchString);
addTagNameProposals(contentAssistRequest,
getElementPosition(actualNode), context);
}
} else {
if (documentPosition >= sdRegion
.getStartOffset(completionRegion)
+ completionRegion.getLength()) {
// insert name
contentAssistRequest = new ContentAssistRequest(
actualNode, actualNode.getParentNode(),
sdRegion, completionRegion, documentPosition,
0, matchString);
} else {
// replace name
contentAssistRequest = new ContentAssistRequest(
actualNode, actualNode.getParentNode(),
sdRegion, completionRegion,
sdRegion.getStartOffset(completionRegion),
completionRegion.getTextLength(), matchString);
}
addEndTagNameProposals(contentAssistRequest, context);
}
}
} else {
if (documentPosition > sdRegion.getStartOffset(completionRegion)
+ completionRegion.getTextLength()) {
// unclosed tag with only a name; should prompt for attributes
// and a close instead
contentAssistRequest = new ContentAssistRequest(nodeAtOffset,
node, sdRegion, completionRegion, documentPosition
- matchString.length(), matchString.length(),
matchString);
addAttributeNameProposals(contentAssistRequest, context);
addTagCloseProposals(contentAssistRequest, context);
} else {
if (sdRegion.getRegions().get(0).getType() != DOMRegionContext.XML_END_TAG_OPEN) {
int replaceLength = documentPosition
- sdRegion.getStartOffset(completionRegion);
contentAssistRequest = new ContentAssistRequest(node,
node.getParentNode(), sdRegion, completionRegion,
sdRegion.getStartOffset(completionRegion),
replaceLength, matchString);
addTagNameProposals(contentAssistRequest,
getElementPosition(nodeAtOffset), context);
} else {
IDOMNode actualNode = (IDOMNode) node.getModel()
.getIndexedRegion(documentPosition);
if (actualNode != null) {
if (documentPosition >= sdRegion
.getStartOffset(completionRegion)
+ completionRegion.getTextLength()) {
contentAssistRequest = new ContentAssistRequest(
actualNode, actualNode.getParentNode(),
sdRegion, completionRegion,
documentPosition, 0, matchString);
} else {
contentAssistRequest = new ContentAssistRequest(
actualNode, actualNode.getParentNode(),
sdRegion, completionRegion,
sdRegion.getStartOffset(completionRegion),
completionRegion.getTextLength(),
matchString);
}