private static <N, E extends N, T extends N> E nthEnclosingElement(IndexedDocument<N, E, T> doc, int pos, int depth) { assert depth >= 0; E e = Point.enclosingElement(doc, doc.locate(pos)); for (int i = 0; i < depth; i++) { assert e != null; e = doc.getParentElement(e); } return e; }
private void testHelper(String initialContent, int start, int end, String expectedContent) { IndexedDocument<Node, Element, Text> parse = DocProviders.POJO.parse(initialContent); SubTreeXmlRenderer<Node, Element, Text> renderer = new SubTreeXmlRenderer<Node, Element, Text>(parse); Element nearestCommonAncestor = parse.getDocumentElement(); XmlStringBuilder rendered = renderer.renderRange(parse.locate(start), parse.locate(end)); assertEquals(expectedContent, rendered.toString()); } }
private void testHelper(String initialContent, int start, int end, String expectedContent) { IndexedDocument<Node, Element, Text> parse = DocProviders.POJO.parse(initialContent); SubTreeXmlRenderer<Node, Element, Text> renderer = new SubTreeXmlRenderer<Node, Element, Text>(parse); Element nearestCommonAncestor = parse.getDocumentElement(); XmlStringBuilder rendered = renderer.renderRange(parse.locate(start), parse.locate(end)); assertEquals(expectedContent, rendered.toString()); } }
private static <N, E extends N, T extends N> int remainingCharactersInElement( IndexedDocument<N, E, T> doc, int pos) { if (pos >= doc.size()) { return 0; } Point<N> deletionPoint = doc.locate(pos); if (!deletionPoint.isInTextNode()) { return 0; } int offsetWithinNode = deletionPoint.getTextOffset(); N container = deletionPoint.getContainer(); assert doc.getNodeType(container) == NodeType.TEXT_NODE; int nodeLength = DocHelper.getItemSize(doc, container); int remainingChars = nodeLength - offsetWithinNode; assert remainingChars >= 0; while (true) { N next = doc.getNextSibling(container); if (next == null || doc.getNodeType(next) != NodeType.TEXT_NODE) { break; } remainingChars += DocHelper.getItemSize(doc, next); container = next; } return remainingChars; }
private void checkFindCharacter(String docXml, int start, String ch, boolean forward, int expectedLocation) { IndexedDocument<Node, Element, Text> doc = DocProviders.POJO.parse(docXml); Tx<Node> startPoint = DocHelper.normalizePoint(doc.locate(start), doc).asTextPoint(); assert startPoint != null : "Invalid start point"; Point<Node> found = TextLocator.findCharacter(doc, startPoint, ch, forward); assertNotNull(found); assertEquals(expectedLocation, doc.getLocation(found)); }
private void checkFindCharacter(String docXml, int start, String ch, boolean forward, int expectedLocation) { IndexedDocument<Node, Element, Text> doc = DocProviders.POJO.parse(docXml); Tx<Node> startPoint = DocHelper.normalizePoint(doc.locate(start), doc).asTextPoint(); assert startPoint != null : "Invalid start point"; Point<Node> found = TextLocator.findCharacter(doc, startPoint, ch, forward); assertNotNull(found); assertEquals(expectedLocation, doc.getLocation(found)); }
private void checkWordBoundary(String docXml, int start, boolean forward, int expectedLocation) { IndexedDocument<Node, Element, Text> doc = DocProviders.POJO.parse(docXml); Tx<Node> startPoint = DocHelper.normalizePoint(doc.locate(start), doc).asTextPoint(); assert startPoint != null : "Invalid start point"; Point<Node> found = TextLocator.getWordBoundary(startPoint, doc, forward); if (found != null) { assertEquals(expectedLocation, doc.getLocation(found)); } else { assertEquals(expectedLocation, -1); } } }
private void checkWordBoundary(String docXml, int start, boolean forward, int expectedLocation) { IndexedDocument<Node, Element, Text> doc = DocProviders.POJO.parse(docXml); Tx<Node> startPoint = DocHelper.normalizePoint(doc.locate(start), doc).asTextPoint(); assert startPoint != null : "Invalid start point"; Point<Node> found = TextLocator.getWordBoundary(startPoint, doc, forward); if (found != null) { assertEquals(expectedLocation, doc.getLocation(found)); } else { assertEquals(expectedLocation, -1); } } }
private Pair<Nindo, IndexedDocument<Node, Element, Text>> applyTokensToEmptyDoc( RichTextTokenizer tokens) { IndexedDocument<Node, Element, Text> doc = DocProviders.POJO.parse("<body><line/></body>"); Point<Node> insertAt = doc.locate(3); Nindo.Builder builder = new Nindo.Builder(); builder.skip(3); new RichTextMutationBuilder().applyMutations(tokens, builder, doc, insertAt.getContainer()); Nindo nindo = builder.build(); try { doc.consumeAndReturnInvertible(nindo); } catch (OperationException e) { fail("Operation Exception " + e); } return new Pair<Nindo, IndexedDocument<Node,Element,Text>>(nindo, doc); }
private Pair<Nindo, IndexedDocument<Node, Element, Text>> applyTokensToEmptyDoc( RichTextTokenizer tokens) { IndexedDocument<Node, Element, Text> doc = DocProviders.POJO.parse("<body><line/></body>"); Point<Node> insertAt = doc.locate(3); Nindo.Builder builder = new Nindo.Builder(); builder.skip(3); new RichTextMutationBuilder().applyMutations(tokens, builder, doc, insertAt.getContainer()); Nindo nindo = builder.build(); try { doc.consumeAndReturnInvertible(nindo); } catch (OperationException e) { fail("Operation Exception " + e); } return new Pair<Nindo, IndexedDocument<Node,Element,Text>>(nindo, doc); }
Point<Node> n = indexedDoc.locate(nodeLocation);
Point<Node> n = indexedDoc.locate(nodeLocation);
Point<Node> point = doc.locate(boundaryLocation); boolean detectSplitNecessary = point.isInTextNode() &&
Point<Node> point = doc.locate(boundaryLocation); boolean detectSplitNecessary = point.isInTextNode() &&