/** * Determines the structured document region of the place in PHP code where * completion was requested * * @return structured document region or <code>null</code> in case it could * not be determined */ protected IStructuredDocumentRegion determineStructuredDocumentRegion(IStructuredDocument document, int offset) { IStructuredDocumentRegion sdRegion = null; int lastOffset = offset; // find the structured document region: while (sdRegion == null && lastOffset >= 0) { sdRegion = document.getRegionAtCharacterOffset(lastOffset); lastOffset--; } return sdRegion; }
protected void updateStructuredDocumentRegion() { fStructuredDocumentRegion = fStructuredModel.getStructuredDocument().getRegionAtCharacterOffset(fCaretPosition); if (fStructuredDocumentRegion != null) { fStructuredDocumentRegionText = fStructuredDocumentRegion.getText(); } else { fStructuredDocumentRegionText = ""; //$NON-NLS-1$ } }
protected void setInternalPartition(int offset, int length, String type) { String localType = type; if (type == IHTMLPartitions.SCRIPT) { IStructuredDocumentRegion node = fStructuredDocument.getRegionAtCharacterOffset(offset); if (node != null) { localType = getScriptingPartitionType(node); } } super.setInternalPartition(offset, length, localType); }
/** * */ private IStructuredDocumentRegionList getStructuredDocumentRegionList(int start, int end) { IStructuredDocumentRegionList nodeList = null; if (0 <= start && start <= end) { ICSSModel model = fDocument.getModel(); if (model instanceof CSSModelImpl) { IStructuredDocument structuredDocument = ((CSSModelImpl) model).getStructuredDocument(); if (structuredDocument != null) { IStructuredDocumentRegion startNode = structuredDocument.getRegionAtCharacterOffset(start); IStructuredDocumentRegion endNode = structuredDocument.getRegionAtCharacterOffset(end - 1); if (startNode != null && endNode != null) { nodeList = new CoreNodeList(startNode, endNode); } } } } return nodeList; }
public IStructuredTypedRegion createPartition(int offset, int length, String type) { if (type == IHTMLPartitions.SCRIPT) { IStructuredDocumentRegion node = fStructuredDocument.getRegionAtCharacterOffset(offset); if (node != null) { String stype = getScriptingPartitionType(node); return super.createPartition(offset, length, stype); } } return super.createPartition(offset, length, type); }
/** * */ public void reset(IStructuredDocument structuredDocument, int index) { documentRegion = structuredDocument.getRegionAtCharacterOffset(index); curDocumentRegion = documentRegion; if (documentRegion != null) { ITextRegion region = documentRegion.getRegionAtCharacterOffset(index); current = documentRegion.getRegions().indexOf(region); } }
/** * Old Nodes: --[O1]--[O2]--[O3]--- : / \ Current Nodes: * ---[C1]-----[C2]-----[C3]-----[C4]--- * * Input: O1 -> Output: O2 Input: O2 -> Output: O3 Input: O3 -> Output: C4 * Input: Cn -> Output: Cn+1 */ public IStructuredDocumentRegion getNextNode(IStructuredDocumentRegion node) { IStructuredDocumentRegion nextNode = null; if (node != null) { nextNode = node.getNext(); if (nextNode == null) { if (isOldNode(node)) { // this may be the end of old flatnodes int newStart = node.getEnd() - fLengthDifference; nextNode = fStructuredDocument.getRegionAtCharacterOffset(newStart); } } } return nextNode; }
/** * Old Nodes: --[O1]--[O2]--[O3]--- : / \ Current Nodes: * ---[C1]-----[C2]-----[C3]-----[C4]--- * * Input: O1 -> Output: C1 Input: O2 -> Output: O1 Input: O3 -> Output: O2 * Input: Cn -> Output: Cn-1 */ public IStructuredDocumentRegion getPrevNode(IStructuredDocumentRegion node) { IStructuredDocumentRegion prevNode = null; if (node != null) { prevNode = node.getPrevious(); if (prevNode == null) { if (isOldNode(node)) { // this may be the start of old flatnodes int newEnd = node.getStart() - 1; prevNode = fStructuredDocument.getRegionAtCharacterOffset(newEnd); } } } return prevNode; }
/** * Old Nodes: --[O1]--[O2]--[O3]--- : / \ Current Nodes: * ---[C1]-----[C2]-----[C3]-----[C4]--- * * Input: O* -> Output: C1 Input: Cn -> Output: Cn-1 */ public IStructuredDocumentRegion getPrevNodeInCurrent(IStructuredDocumentRegion node) { IStructuredDocumentRegion prevNode = null; if (isOldNode(node)) { IStructuredDocumentRegion oldStartNode = fOldStructuredDocumentRegionList.item(0); int newEnd = oldStartNode.getStart() - 1; prevNode = fStructuredDocument.getRegionAtCharacterOffset(newEnd); } else if (node != null) { prevNode = node.getPrevious(); } return prevNode; }
/** * */ public int getChildInsertPos(ICSSNode node) { int n = ((IndexedRegion) node).getEndOffset(); if (n > 0) { IStructuredDocumentRegion flatNode = node.getOwnerDocument().getModel().getStructuredDocument().getRegionAtCharacterOffset(n - 1); if (flatNode.getRegionAtCharacterOffset(n - 1).getType() == CSSRegionContexts.CSS_DELIMITER) return n - 1; return n; } return -1; }
/** * */ public int getChildInsertPos(ICSSNode node) { int n = ((IndexedRegion) node).getEndOffset(); if (n > 0) { IStructuredDocumentRegion flatNode = node.getOwnerDocument().getModel().getStructuredDocument().getRegionAtCharacterOffset(n - 1); if (flatNode.getRegionAtCharacterOffset(n - 1).getType() == CSSRegionContexts.CSS_DECLARATION_VALUE_PARENTHESIS_CLOSE) return n - 1; return n; } return -1; }
if (name1.equalsIgnoreCase(HTML40Namespace.ElementName.SCRIPT) && name2.equalsIgnoreCase(HTML40Namespace.ElementName.SCRIPT)) return getScriptingPartitionType(fStructuredDocument.getRegionAtCharacterOffset(previousNode.getStartOffset(previousStartTagNameRegion))); else if (name1.equalsIgnoreCase(HTML40Namespace.ElementName.STYLE) && name2.equalsIgnoreCase(HTML40Namespace.ElementName.STYLE)) return ICSSPartitions.STYLE;
/** * Old Nodes: --[O1]--[O2]--[O3]--- : / \ Current Nodes: * ---[C1]-----[C2]-----[C3]-----[C4]--- * * Input: O* -> Output: C4 Input: Cn -> Output: Cn+1 */ public IStructuredDocumentRegion getNextNodeInCurrent(IStructuredDocumentRegion node) { IStructuredDocumentRegion nextNode = null; if (isOldNode(node)) { IStructuredDocumentRegion oldEndNode = fOldStructuredDocumentRegionList.item(fOldStructuredDocumentRegionList.getLength() - 1); int newStart = oldEndNode.getEnd() - fLengthDifference; nextNode = fStructuredDocument.getRegionAtCharacterOffset(newStart); } else if (node != null) { nextNode = node.getNext(); } return nextNode; }
/** * */ public int getChildInsertPos(ICSSNode node) { int n = ((IndexedRegion) node).getEndOffset(); if (n > 0) { IStructuredDocumentRegion flatNode = node.getOwnerDocument().getModel().getStructuredDocument().getRegionAtCharacterOffset(n - 1); if (flatNode.getRegionAtCharacterOffset(n - 1).getType() == CSSRegionContexts.CSS_DELIMITER) return n - 1; return n; } return -1; }
/** * */ public int getChildInsertPos(ICSSNode node) { int n = ((IndexedRegion) node).getEndOffset(); if (n > 0) { IStructuredDocumentRegion flatNode = node.getOwnerDocument().getModel().getStructuredDocument().getRegionAtCharacterOffset(n - 1); if (flatNode.getRegionAtCharacterOffset(n - 1).getType() == CSSRegionContexts.CSS_LBRACE) return n - 1; return n; } return -1; }
public IContextInformation[] getAttributeInformation(int offset) { /* * need to take care of special cases w/ ambiguous regions <tag>| * </tag> also end tags.. */ IContextInformation[] results = EMPTY_CONTEXT_INFO; IStructuredDocumentRegion sdRegion = fModelUtil.getDocument().getRegionAtCharacterOffset(offset); if (!canProposeInfo(sdRegion)) { return EMPTY_CONTEXT_INFO; } IDOMNode node = fModelUtil.getXMLNode(offset); if (node != null) { switch (node.getNodeType()) { case Node.ELEMENT_NODE : results = getInfoForElement(node); break; // future... // case Node.TEXT_NODE : // results = getInfoForText(node); // break; } } return results; }
protected void performValidation(IFile f, IReporter reporter, IStructuredModel model, IRegion validateRegion) { IStructuredDocument sDoc = model.getStructuredDocument(); // iterate all document regions IStructuredDocumentRegion region = sDoc.getRegionAtCharacterOffset(validateRegion.getOffset()); while (region != null && !reporter.isCancelled() && (region.getStartOffset() <= (validateRegion.getOffset() + validateRegion.getLength()))) { if (region.getType() == DOMJSPRegionContexts.JSP_DIRECTIVE_NAME) { // only checking directives processDirective(reporter, f, model, region); fTaglibPrefixes.clear(); } else if (region.getType() == DOMRegionContext.XML_TAG_NAME) { // and jsp tags String tagName = getStartTagName(region); int colonPosition = tagName.indexOf(':'); if (colonPosition > -1) { // get tag's prefix and check if it's really a jsp action // tag String prefix = tagName.substring(0, colonPosition); if (getTaglibPrefixes(sDoc).contains(prefix)) processDirective(reporter, f, model, region); } } region = region.getNext(); } }
/** * */ public int getChildInsertPos(ICSSNode node) { int n = ((IndexedRegion) node).getEndOffset(); if (n > 0) { IStructuredDocumentRegion flatNode = node.getOwnerDocument().getModel().getStructuredDocument().getRegionAtCharacterOffset(n - 1); if (flatNode.getRegionAtCharacterOffset(n - 1).getType() == CSSRegionContexts.CSS_RBRACE) return n - 1; else return n; } return -1; } }
public String getPartitionType(ITextRegion region, int offset) { String result = null; if (region.getType() == DOMRegionContext.XML_COMMENT_TEXT) result = IXMLPartitions.XML_COMMENT; else if (region.getType() == DOMRegionContext.XML_CDATA_TEXT) result = IXMLPartitions.XML_CDATA; else if (region.getType() == DOMRegionContext.XML_PI_CONTENT) { /** * Grammatically, it's impossible to get a PI_CONTENT region * without a preceding XML_TAG_NAME region. Relying on this, * extract the target processor name and create a partition type * dynamically. */ IStructuredDocumentRegion docRegion = fStructuredDocument.getRegionAtCharacterOffset(offset); ITextRegion name = docRegion.getRegionAtCharacterOffset(docRegion.getStartOffset() + region.getStart() - 1); result = IXMLPartitions.PROCESSING_INSTRUCTION_PREFIX + docRegion.getText(name).toUpperCase(Locale.ENGLISH); } else if (region.getType() == DOMRegionContext.XML_PI_OPEN) result = IXMLPartitions.XML_PI; else if (region.getType() == DOMRegionContext.XML_DOCTYPE_DECLARATION) result = IXMLPartitions.XML_DECLARATION; else if (region.getType() == DOMRegionContext.XML_DOCTYPE_INTERNAL_SUBSET) result = IXMLPartitions.DTD_SUBSET; else result = super.getPartitionType(region, offset); return result; }
/** * */ public int getChildInsertPos(ICSSNode node) { int n = ((IndexedRegion) node).getEndOffset(); if (n > 0) { IStructuredDocument structuredDocument = node.getOwnerDocument().getModel().getStructuredDocument(); IStructuredDocumentRegion flatNode = structuredDocument.getRegionAtCharacterOffset(n - 1); ITextRegion region = flatNode.getRegionAtCharacterOffset(n - 1); RegionIterator it = new RegionIterator(flatNode, region); while (it.hasPrev()) { ITextRegion reg = it.prev(); if (reg.getType() == CSSRegionContexts.CSS_CDC) return it.getStructuredDocumentRegion().getStartOffset(reg); } return n; } return -1; }