@Override public boolean isWorthy(DocOp op) { try { op.apply(CHECKER); } catch (True t) { return true; } return false; } };
private DocOp composeOperations(DocOp op1, DocOp op2) throws OperationException { target = defaultTarget; int op1Index = 0; int op2Index = 0; while (op1Index < op1.size()) { op1.applyComponent(op1Index++, target); while (target.isPostTarget()) { if (op2Index >= op2.size()) { throw new OperationException("Document size mismatch: " + "op1 resulting length=" + DocOpUtil.resultingDocumentLength(op1) + ", op2 initial length=" + DocOpUtil.initialDocumentLength(op2)); } op2.applyComponent(op2Index++, target); } } if (op2Index < op2.size()) { target = new FinisherPostTarget(); while (op2Index < op2.size()) { op2.applyComponent(op2Index++, target); } } flushAnnotations(); return normalizer.finish(); }
private boolean equalComponent(DocOp a, DocOp b, int i) { DocOpComponentType type = a.getType(i); if (type != b.getType(i)) { return false; return equal(a.getAnnotationBoundary(i), b.getAnnotationBoundary(i)); return equal(a.getCharactersString(i), b.getCharactersString(i)); return equal(a.getElementStartTag(i), b.getElementStartTag(i)) && equal(a.getElementStartAttributes(i), b.getElementStartAttributes(i)); return a.getRetainItemCount(i) == b.getRetainItemCount(i); return equal(a.getDeleteCharactersString(i), b.getDeleteCharactersString(i)); return equal(a.getDeleteElementStartTag(i), b.getDeleteElementStartTag(i)) && equal(a.getDeleteElementStartAttributes(i), b.getDeleteElementStartAttributes(i)); return equal(a.getReplaceAttributesOldAttributes(i), b.getReplaceAttributesOldAttributes(i)) && equal(a.getReplaceAttributesNewAttributes(i), b.getReplaceAttributesNewAttributes(i)); return equal(a.getUpdateAttributesUpdate(i), b.getUpdateAttributesUpdate(i));
@Override public int size() { return op.size(); } };
@Override public void applyComponent(int i, DocInitializationCursor c) { op.applyComponent(i, InitializationCursorAdapter.adapt(c)); }
@Override public AnnotationBoundaryMap getAnnotationBoundary(int i) { return op.getAnnotationBoundary(i); }
@Override public String getCharactersString(int i) { return op.getCharactersString(i); }
@Override public Attributes getElementStartAttributes(int i) { return op.getElementStartAttributes(i); }
while (clientIndex < clientOp.size()) { clientOp.applyComponent(clientIndex++, clientTarget); while (clientPosition.get() > 0) { if (serverIndex >= serverOp.size()) { throw new TransformException("Ran out of " + serverOp.size() + " server op components after " + clientIndex + " of " + clientOp.size() + " client op components, with " + clientPosition.get() + " spare positions"); serverOp.applyComponent(serverIndex++, serverTarget); while (serverIndex < serverOp.size()) { serverOp.applyComponent(serverIndex++, serverTarget);
op.apply(new DocOpCursor() { @Override public void deleteCharacters(String chars) {
public void testNoRedundantSkips() throws OperationException { IndexedDocument<Node, Element, Text> doc = DocProviders.POJO.parse("abcdefghijkl"); Nindo.Builder b; b = new Nindo.Builder(); b.skip(1); b.startAnnotation("a", "1"); b.skip(1); b.startAnnotation("b", "1"); b.skip(1); b.endAnnotation("a"); b.skip(1); b.startAnnotation("c", "1"); b.skip(1); b.endAnnotation("c"); b.skip(1); b.endAnnotation("b"); b.skip(1); b.startAnnotation("c", "1"); b.skip(1); b.endAnnotation("c"); checkApply(doc, b.build()); b = new Nindo.Builder(); b.startAnnotation("z", "1"); b.skip(doc.size()); b.endAnnotation("z"); DocOp docOp = doc.consumeAndReturnInvertible(b.build()); assertEquals(3, docOp.size()); }
while (insertionIndex < insertionOp.size()) { insertionOp.applyComponent(insertionIndex++, insertionTarget); while (insertionPosition.get() > 0) { if (noninsertionIndex >= noninsertionOp.size()) { throw new TransformException("Ran out of " + noninsertionOp.size() + " noninsertion op components after " + insertionIndex + " of " + insertionOp.size() + " insertion op components, with " + insertionPosition.get() + " spare positions"); noninsertionOp.applyComponent(noninsertionIndex++, noninsertionTarget); while (noninsertionIndex < noninsertionOp.size()) { noninsertionOp.applyComponent(noninsertionIndex++, noninsertionTarget);
op.apply(new DocOpCursor() { @Override public void deleteCharacters(String chars) {
public void testNoRedundantSkips() throws OperationException { IndexedDocument<Node, Element, Text> doc = DocProviders.POJO.parse("abcdefghijkl"); Nindo.Builder b; b = new Nindo.Builder(); b.skip(1); b.startAnnotation("a", "1"); b.skip(1); b.startAnnotation("b", "1"); b.skip(1); b.endAnnotation("a"); b.skip(1); b.startAnnotation("c", "1"); b.skip(1); b.endAnnotation("c"); b.skip(1); b.endAnnotation("b"); b.skip(1); b.startAnnotation("c", "1"); b.skip(1); b.endAnnotation("c"); checkApply(doc, b.build()); b = new Nindo.Builder(); b.startAnnotation("z", "1"); b.skip(doc.size()); b.endAnnotation("z"); DocOp docOp = doc.consumeAndReturnInvertible(b.build()); assertEquals(3, docOp.size()); }
while (clientIndex < clientOp.size()) { clientOp.applyComponent(clientIndex++, clientTarget); while (clientPosition.get() > 0) { if (serverIndex >= serverOp.size()) { throw new TransformException("Ran out of " + serverOp.size() + " server op components after " + clientIndex + " of " + clientOp.size() + " client op components, with " + clientPosition.get() + " spare positions"); serverOp.applyComponent(serverIndex++, serverTarget); while (serverIndex < serverOp.size()) { serverOp.applyComponent(serverIndex++, serverTarget);
private void apply(final DocOpCursor target) { source.apply(new DocOpCursor() { @Override public void deleteCharacters(String chars) {
while (preservationIndex < preservationOp.size()) { preservationOp.applyComponent(preservationIndex++, preservationTarget); while (preservationPosition.get() > 0) { if (deletionIndex >= deletionOp.size()) { throw new TransformException("Ran out of " + deletionOp.size() + " deletion op components after " + preservationIndex + " of " + preservationOp.size() + " preservation op components, with " + preservationPosition.get() + " spare positions"); deletionOp.applyComponent(deletionIndex++, deletionTarget); while (deletionIndex < deletionOp.size()) { deletionOp.applyComponent(deletionIndex++, deletionTarget);
public static String toConciseString(DocOp op) { final StringBuilder b = new StringBuilder(); op.apply(createConciseStringBuilder(op, b)); return b.toString(); }
while (preservationIndex < preservationOp.size()) { preservationOp.applyComponent(preservationIndex++, preservationTarget); while (preservationPosition.get() > 0) { if (deletionIndex >= deletionOp.size()) { throw new TransformException("Ran out of " + deletionOp.size() + " deletion op components after " + preservationIndex + " of " + preservationOp.size() + " preservation op components, with " + preservationPosition.get() + " spare positions"); deletionOp.applyComponent(deletionIndex++, deletionTarget); while (deletionIndex < deletionOp.size()) { deletionOp.applyComponent(deletionIndex++, deletionTarget);