/** * Calculate node's Indexed length in model. * * @param node * @return */ public static int getNodeLenth(Node node) { if (node != null && EditValidateUtil.validNode(node)) { return ((IndexedRegion) node).getEndOffset() - ((IndexedRegion) node).getStartOffset(); } return 0; }
return 0; IndexedRegion nnode = (IndexedRegion) node; if (insertPos <= 0 || !nnode.contains(insertPos - 1)) return 0; int pos = ((IndexedRegion) node.getFirstChild()).getEndOffset(); if (pos <= 0) pos = ((IndexedRegion) node).getStartOffset() + 6 /*
/** * * @return int * @param node * org.eclipse.wst.css.core.model.interfaces.ICSSNode * @param insertPos * int */ public int getLengthToReformatAfter(ICSSNode node, int insertPos) { if (node == null) return 0; IndexedRegion nnode = (IndexedRegion) node; if (insertPos < 0 || !nnode.contains(insertPos)) { if (node.getParentNode() != null && nnode.getEndOffset() <= 0) { CSSSourceGenerator pntFormatter = getParentFormatter(node); if (pntFormatter != null) return pntFormatter.getLengthToReformatAfter(node.getParentNode(), insertPos); } return 0; } return super.getLengthToReformatAfter(node, insertPos); }
/** * Return 'node' indexed start position Example: |<a></a>, the position is * indicated by '|' * * @param node * @return */ public static int getNodeStartIndex(Node node) { if (EditValidateUtil.validNode(node) && node instanceof IndexedRegion) { return ((IndexedRegion) node).getStartOffset(); } return -1; }
/** * */ public int getChildInsertPos(ICSSNode node) { int n = ((IndexedRegion) node).getEndOffset(); if (n > 0) return n; return -1; } }
/** * Returns the SSE DOM Attribute {@link IDOMAttr} by offset from the SSE DOM * node {@link IDOMNode}. * * @param E * the SSE DOM element {@link IDOMElement}. * @param region * the region. * @return */ public static final IDOMAttr getAttrByOffset(Node node, int offset) { if ((node instanceof IndexedRegion) && ((IndexedRegion) node).contains(offset) && node.hasAttributes()) { NamedNodeMap attrs = node.getAttributes(); for (int i = 0; i < attrs.getLength(); i++) { IndexedRegion attRegion = (IndexedRegion) attrs.item(i); if (attRegion.contains(offset)) return (IDOMAttr) attrs.item(i); } } return null; }
Text txt = (Text) ir; String data = txt.getData(); int dataSplitIndex = offset - ir.getStartOffset(); String beforeText = data.substring(0, dataSplitIndex); String afterText = data.substring(dataSplitIndex); parent.insertBefore(before, newElement); } else if(ir instanceof Element) { if(ir.getStartOffset() == offset) {
/** * Return 'node' indexed end position Example: <a></a>|, the position is * indicated by '|' * * @param node * @return */ public static int getNodeEndIndex(Node node) { if (EditValidateUtil.validNode(node) && node instanceof IndexedRegion) { return ((IndexedRegion) node).getEndOffset(); } return -1; }
/** * * @return int * @param node * org.eclipse.wst.css.core.model.interfaces.ICSSNode * @param insertPos * int */ public int getLengthToReformatBefore(ICSSNode node, int insertPos) { if (node == null) return 0; IndexedRegion nnode = (IndexedRegion) node; if (insertPos <= 0 || !nnode.contains(insertPos - 1)) { if (node.getParentNode() != null && nnode.getEndOffset() <= 0) { CSSSourceGenerator pntFormatter = getParentFormatter(node); if (pntFormatter != null) return pntFormatter.getLengthToReformatBefore(node.getParentNode(), insertPos); } return 0; } return super.getLengthToReformatBefore(node, insertPos); } }
/** * Returns the SSE DOM Attribute {@link IDOMAttr} by offset from the SSE DOM * node {@link IDOMNode}. * * @param E * the SSE DOM element {@link IDOMElement}. * @param region * the region. * @return */ public static final IDOMAttr getAttrByOffset(Node node, int offset) { if ((node instanceof IndexedRegion) && ((IndexedRegion) node).contains(offset) && node.hasAttributes()) { NamedNodeMap attrs = node.getAttributes(); for (int i = 0; i < attrs.getLength(); i++) { IndexedRegion attRegion = (IndexedRegion) attrs.item(i); if (attRegion.contains(offset)) return (IDOMAttr) attrs.item(i); } } return null; }
/** * */ public int getAttrInsertPos(ICSSNode node, String attrName) { if (node == null || attrName == null || attrName.length() == 0) return -1; if (!ICSSStyleRule.SELECTOR.equalsIgnoreCase(attrName)) return -1; ICSSAttr attr = (ICSSAttr) node.getAttributes().getNamedItem(ICSSStyleRule.SELECTOR); if (attr != null && ((IndexedRegion) attr).getEndOffset() > 0) return ((IndexedRegion) attr).getStartOffset(); else return ((IndexedRegion) node).getStartOffset(); }
/** * finds the element at offset, if other type of node at offset, will return it's parent element (if any) * * @param doc * @param offset * @return */ public static Element elementAtOffset(Document doc, int offset) { if(doc instanceof IDOMDocument) { IDOMDocument domDoc = (IDOMDocument) doc; IndexedRegion ir = domDoc.getModel().getIndexedRegion(offset); if(ir instanceof Element) { Element elem = (Element) ir; if(ir.getStartOffset() == offset) { // caret is before the tag, not within its bounds elem = (Element) elem.getParentNode(); } return elem; } Node parent = ((Node) ir).getParentNode(); if(parent instanceof Element) { return (Element) parent; } } return null; }
int end = selection.getOffset() + selection.getLength(); if (region != null) { if (end <= region.getEndOffset()) { while (region != null && region.getEndOffset() <= end && region.getEndOffset() < maxLength) { structures.add(region); region = model .getIndexedRegion(region.getEndOffset() + 1);
return 0; IndexedRegion nnode = (IndexedRegion) node; if (insertPos <= 0 || !nnode.contains(insertPos - 1)) return 0; if (region.getType() == CSSRegionContexts.CSS_LBRACE) break; if (nnode.getEndOffset() <= it.getStructuredDocumentRegion().getEndOffset(region)) break;
/** * Returns the attribute node within node at offset * * @param node * @param offset * @return Attr */ private Attr getCurrentAttrNode(Node node, int offset) { if ((node instanceof IndexedRegion) && ((IndexedRegion) node).contains(offset) && (node.hasAttributes())) { NamedNodeMap attrs = node.getAttributes(); // go through each attribute in node and if attribute contains // offset, return that attribute for (int i = 0; i < attrs.getLength(); ++i) { // assumption that if parent node is of type IndexedRegion, // then its attributes will also be of type IndexedRegion IndexedRegion attRegion = (IndexedRegion) attrs.item(i); if (attRegion.contains(offset)) { return (Attr) attrs.item(i); } } } return null; }
/** */ protected short preNode(ICSSNode node) { IndexedRegion iNode = (IndexedRegion) node; if (iNode.getStartOffset() <= end && start < iNode.getEndOffset()) { if (node.getNodeType() != ICSSNode.STYLESHEET_NODE) { IndexedRegion iFirstChild = (IndexedRegion) node.getFirstChild(); IndexedRegion iLastChild = (IndexedRegion) node.getLastChild(); if (iFirstChild == null || start < iFirstChild.getStartOffset() || iLastChild.getEndOffset() <= end) selectedNodes.add(node); } return TRAV_CONT; } if (iNode.getStartOffset() > end) return TRAV_STOP; else return TRAV_PRUNE; }
/** * */ protected boolean isIncludesPreEnd(ICSSNode node, IRegion region) { return (node.getFirstChild() != null && ((IndexedRegion) node.getFirstChild()).getStartOffset() == (region.getOffset() + region.getLength())); }
/** * */ protected void formatPost(ICSSNode node, StringBuffer source) { CSSCleanupStrategy stgy = getCleanupStrategy(node); int end = ((IndexedRegion) node).getEndOffset(); int start = (node.getLastChild() != null && ((IndexedRegion) node.getLastChild()).getEndOffset() > 0) ? ((IndexedRegion) node.getLastChild()).getEndOffset() : getChildInsertPos(node); if (end > 0 && start < end) { // format source IStructuredDocument structuredDocument = node.getOwnerDocument().getModel().getStructuredDocument(); CompoundRegion[] regions = getRegionsWithoutWhiteSpaces(structuredDocument, new FormatRegion(start, end - start), stgy); for (int i = 0; i < regions.length; i++) { appendDelimBefore(node, regions[i], source); source.append(decoratedRegion(regions[i], 0, stgy)); } } else { // generate source String delim = getLineDelimiter(node); source.append(delim); source.append(getIndent(node)); source.append("}");//$NON-NLS-1$ } }
return 0; IndexedRegion nnode = (IndexedRegion) node; if (insertPos < 0 || !nnode.contains(insertPos)) return 0;
/** * */ public int getAttrInsertPos(ICSSNode node, String attrName) { if (node == null || attrName == null || attrName.length() == 0) return -1; ICSSAttr attr = (ICSSAttr) node.getAttributes().getNamedItem(attrName); if (attr != null && ((IndexedRegion) attr).getEndOffset() > 0) return ((IndexedRegion) attr).getStartOffset(); IndexedRegion iNode = (IndexedRegion) node; if (iNode.getEndOffset() <= 0) return -1; /* * ITextRegion regions[] = * getRegionsWithoutWhiteSpaces(node.getOwnerDocument().getModel().getStructuredDocument(), * new FormatRegion(iNode.getStartOffset(), iNode.getEndOffset() - * iNode.getStartOffset() + 1)); for(int i=regions.length - 1; i >= 0; * i--) { if (regions[i].getType() == CSSRegionContexts.IMPORTANT_SYM) * return regions[i].getStartOffset(); } */ return iNode.getEndOffset(); }