protected void updateTextRegion() { if (fStructuredDocumentRegion != null) { fTextRegion = fStructuredDocumentRegion.getRegionAtCharacterOffset(fCaretPosition); // if fTextRegion is null, it means we are at just past the last // fStructuredDocumentRegion, // at the very end of the document, so we'll use the last text // region in the document if (fTextRegion == null) { fTextRegion = fStructuredDocumentRegion.getRegionAtCharacterOffset(fCaretPosition - 1); } } else { fTextRegion = null; } } }
/** * */ 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); } }
protected void processElementAttrValueDoubleClicked2Times() { int prevRegionOffset = fStructuredDocumentRegion.getStartOffset(fTextRegion) - 1; ITextRegion prevRegion = fStructuredDocumentRegion.getRegionAtCharacterOffset(prevRegionOffset); if (prevRegion != null) { prevRegionOffset = fStructuredDocumentRegion.getStartOffset(prevRegion) - 1; prevRegion = fStructuredDocumentRegion.getRegionAtCharacterOffset(prevRegionOffset); if ((prevRegion != null) && (prevRegion.getType() == DOMRegionContext.XML_TAG_ATTRIBUTE_NAME)) { fStructuredTextViewer.setSelectedRange(fStructuredDocumentRegion.getStartOffset(prevRegion), fTextRegion.getTextEnd() - prevRegion.getStart()); } } }
/** * Retreives documentation to display in the hover help popup. * * @return String any documentation information to display * <code>null</code> if there is nothing to display. * */ protected String computeHoverHelp(ITextViewer textViewer, int documentPosition) { String result = null; IndexedRegion treeNode = ContentAssistUtils.getNodeAt(textViewer, documentPosition); if (treeNode == null) { return null; } Node node = (Node) treeNode; while ((node != null) && (node.getNodeType() == Node.TEXT_NODE) && (node.getParentNode() != null)) { node = node.getParentNode(); } IDOMNode parentNode = (IDOMNode) node; IStructuredDocumentRegion flatNode = ((IStructuredDocument) textViewer.getDocument()).getRegionAtCharacterOffset(documentPosition); if (flatNode != null) { ITextRegion region = flatNode.getRegionAtCharacterOffset(documentPosition); if (region != null) { result = computeRegionHelp(treeNode, parentNode, flatNode, region); } } return result; }
protected void processElementAttrEqualsDoubleClicked2Times() { int prevRegionOffset = fStructuredDocumentRegion.getStartOffset(fTextRegion) - 1; ITextRegion prevRegion = fStructuredDocumentRegion.getRegionAtCharacterOffset(prevRegionOffset); int nextRegionOffset = fStructuredDocumentRegion.getEndOffset(fTextRegion); ITextRegion nextRegion = fStructuredDocumentRegion.getRegionAtCharacterOffset(nextRegionOffset); if ((prevRegion != null) && (prevRegion.getType() == DOMRegionContext.XML_TAG_ATTRIBUTE_NAME) && (nextRegion != null) && (nextRegion.getType() == DOMRegionContext.XML_TAG_ATTRIBUTE_VALUE)) { fStructuredTextViewer.setSelectedRange(fStructuredDocumentRegion.getStartOffset(prevRegion), nextRegion.getTextEnd() - prevRegion.getStart()); } }
protected boolean doParserSpecificCheck(int offset, boolean partitionFound, IStructuredDocumentRegion sdRegion, IStructuredDocumentRegion previousStructuredDocumentRegion, ITextRegion next, ITextRegion previousStart) { // this was moved down to subclass of StructuredTextPartioner // for quick fix to transition problems. Heirarchy needs lots of // cleanup. if (previousStart != null && previousStart.getType() == DOMRegionContext.XML_TAG_OPEN && next.getType() == DOMRegionContext.XML_END_TAG_OPEN) { ITextRegion previousName = previousStructuredDocumentRegion.getRegionAtCharacterOffset(previousStructuredDocumentRegion.getEndOffset(previousStart)); ITextRegion nextName = sdRegion.getRegionAtCharacterOffset(sdRegion.getEndOffset(next)); if (previousName != null && nextName != null && previousName.getType() == DOMRegionContext.XML_TAG_NAME && nextName.getType() == DOMRegionContext.XML_TAG_NAME) { setInternalPartition(offset, 0, getPartitionTypeBetween(previousStructuredDocumentRegion, sdRegion)); partitionFound = true; } } return partitionFound; } }
private void getLocalRenameQuickAssistProposal(List proposals, ISourceViewer viewer, int offset) { IDOMNode node = (IDOMNode) getNodeAt(viewer, offset); IStructuredDocumentRegion startStructuredDocumentRegion = node == null ? null : node.getStartStructuredDocumentRegion(); IStructuredDocumentRegion endStructuredDocumentRegion = node == null ? null : node.getEndStructuredDocumentRegion(); ITextRegion region = null; int regionTextEndOffset = 0; if ((startStructuredDocumentRegion != null) && startStructuredDocumentRegion.containsOffset(offset)) { region = startStructuredDocumentRegion.getRegionAtCharacterOffset(offset); regionTextEndOffset = startStructuredDocumentRegion.getTextEndOffset(region); } else if ((endStructuredDocumentRegion != null) && endStructuredDocumentRegion.containsOffset(offset)) { region = endStructuredDocumentRegion.getRegionAtCharacterOffset(offset); regionTextEndOffset = endStructuredDocumentRegion.getTextEndOffset(region); } if ((region != null) && ((region.getType() == DOMRegionContext.XML_TAG_NAME) || (region.getType() == DOMRegionContext.XML_TAG_ATTRIBUTE_NAME)) && (offset <= regionTextEndOffset)) { proposals.add(new RenameInFileQuickAssistProposal()); } }
/** * @param proposals * @param viewer * @param offset */ protected void getLocalRenameQuickAssistProposal(ArrayList proposals, StructuredTextViewer viewer, int offset) { IDOMNode node = (IDOMNode) ContentAssistUtils.getNodeAt(viewer, offset); IStructuredDocumentRegion startStructuredDocumentRegion = node == null ? null : node.getStartStructuredDocumentRegion(); IStructuredDocumentRegion endStructuredDocumentRegion = node == null ? null : node.getEndStructuredDocumentRegion(); ITextRegion region = null; int regionTextEndOffset = 0; if ((startStructuredDocumentRegion != null) && startStructuredDocumentRegion.containsOffset(offset)) { region = startStructuredDocumentRegion.getRegionAtCharacterOffset(offset); regionTextEndOffset = startStructuredDocumentRegion.getTextEndOffset(region); } else if ((endStructuredDocumentRegion != null) && endStructuredDocumentRegion.containsOffset(offset)) { region = endStructuredDocumentRegion.getRegionAtCharacterOffset(offset); regionTextEndOffset = endStructuredDocumentRegion.getTextEndOffset(region); } if ((region != null) && ((region.getType() == DOMRegionContext.XML_TAG_NAME) || (region.getType() == DOMRegionContext.XML_TAG_ATTRIBUTE_NAME)) && (offset <= regionTextEndOffset)) { proposals.add(new RenameInFileQuickAssistProposal()); } }
protected void processElementAttrNameDoubleClicked2Times() { int nextRegionOffset = fStructuredDocumentRegion.getEndOffset(fTextRegion); ITextRegion nextRegion = fStructuredDocumentRegion.getRegionAtCharacterOffset(nextRegionOffset); if (nextRegion != null) { nextRegionOffset = fStructuredDocumentRegion.getEndOffset(nextRegion); nextRegion = fStructuredDocumentRegion.getRegionAtCharacterOffset(nextRegionOffset); if ((nextRegion != null) && (nextRegion.getType() == DOMRegionContext.XML_TAG_ATTRIBUTE_VALUE)) { fStructuredTextViewer.setSelectedRange(fStructuredDocumentRegion.getStartOffset(fTextRegion), nextRegion.getTextEnd() - fTextRegion.getStart()); } else { // attribute has no value fStructuredTextViewer.setSelectedRange(fStructuredDocumentRegion.getStart(), fStructuredDocumentRegion.getLength()); fDoubleClickCount = 0; } } }
/** * */ 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; }
/** * */ 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 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; } }
private String getNamedStyleAtOffset(int offset) { // ensure the offset is clean if (offset >= fDocument.getLength()) return getNamedStyleAtOffset(fDocument.getLength() - 1); else if (offset < 0) return getNamedStyleAtOffset(0); IStructuredDocumentRegion documentRegion = fDocument.getFirstStructuredDocumentRegion(); while (documentRegion != null && !documentRegion.containsOffset(offset)) { documentRegion = documentRegion.getNext(); } if (documentRegion != null) { // find the ITextRegion's Context at this offset ITextRegion interest = documentRegion.getRegionAtCharacterOffset(offset); if (interest == null) return null; if (offset > documentRegion.getTextEndOffset(interest)) return null; String regionContext = interest.getType(); if (regionContext == null) return null; // find the named style (internal/selectable name) for that // context String namedStyle = (String) fContextToStyleMap.get(regionContext); if (namedStyle != null) { return namedStyle; } } return null; }
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; }
protected ContentAssistRequest computeEqualsProposals(int documentPosition, String matchString, ITextRegion completionRegion, IDOMNode nodeAtOffset, IDOMNode node) { ContentAssistRequest contentAssistRequest = null; IStructuredDocumentRegion sdRegion = getStructuredDocumentRegion(documentPosition); ITextRegion valueRegion = node.getStartStructuredDocumentRegion().getRegionAtCharacterOffset(sdRegion.getStartOffset(completionRegion) + completionRegion.getLength()); if ((valueRegion != null) && (valueRegion.getType() == DOMRegionContext.XML_TAG_ATTRIBUTE_VALUE) && (sdRegion.getStartOffset(valueRegion) <= documentPosition)) { // replace the adjacent attribute value contentAssistRequest = newContentAssistRequest(nodeAtOffset, node, sdRegion, valueRegion, sdRegion.getStartOffset(valueRegion), valueRegion.getTextLength(), matchString); } else { // append an attribute value after the '=' contentAssistRequest = newContentAssistRequest(nodeAtOffset, node, sdRegion, completionRegion, documentPosition, 0, matchString); } addAttributeValueProposals(contentAssistRequest); return contentAssistRequest; }
/** * */ 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; }
/** * */ public int getAttrInsertPos(ICSSNode node, String attrName) { if (node == null || attrName == null || attrName.length() == 0) return -1; if (!ICSSPageRule.SELECTOR.equalsIgnoreCase(attrName)) return -1; ICSSAttr attr = (ICSSAttr) node.getAttributes().getNamedItem(ICSSPageRule.SELECTOR); if (attr != null && ((IndexedRegion) attr).getEndOffset() > 0) return ((IndexedRegion) attr).getStartOffset(); else if (((IndexedRegion) node).getEndOffset() > 0) { IStructuredDocumentRegion flatNode = node.getOwnerDocument().getModel().getStructuredDocument().getRegionAtCharacterOffset(((IndexedRegion) node).getStartOffset()); ITextRegion region = flatNode.getRegionAtCharacterOffset(((IndexedRegion) node).getStartOffset()); RegionIterator it = new RegionIterator(flatNode, region); while (it.hasNext()) { region = it.next(); if (region.getType() == CSSRegionContexts.CSS_LBRACE) { return it.getStructuredDocumentRegion().getStartOffset(region); } if (it.getStructuredDocumentRegion().getEndOffset(region) >= ((IndexedRegion) node).getEndOffset()) break; } } return ((IndexedRegion) node).getStartOffset(); }
if (flatNode == null) return 0; ITextRegion region = flatNode.getRegionAtCharacterOffset(insertPos); if (region == null) return 0;