public void testTransformToTextOffset() { Document document = BasicFactories.documentProvider().parse( LineContainers.debugContainerWrap("123<gadget><state>foo</state></gadget>456")); ApiView api = new ApiView(document, mock(Wavelet.class)); // Assert the text offsets of <body>, <line> and </line>. assertEquals(0, api.transformToTextOffset(0)); assertEquals(0, api.transformToTextOffset(1)); assertEquals(0, api.transformToTextOffset(2)); // Assert the text offsets of 123. assertEquals(1, api.transformToTextOffset(3)); assertEquals(2, api.transformToTextOffset(4)); assertEquals(3, api.transformToTextOffset(5)); // Assert the text offsets of <gadget><state>foo</state></gadget>. assertEquals(4, api.transformToTextOffset(6)); assertEquals(4, api.transformToTextOffset(7)); assertEquals(4, api.transformToTextOffset(8)); assertEquals(4, api.transformToTextOffset(9)); assertEquals(4, api.transformToTextOffset(10)); assertEquals(4, api.transformToTextOffset(11)); assertEquals(4, api.transformToTextOffset(12)); // Assert the text offsets of 456. assertEquals(5, api.transformToTextOffset(13)); assertEquals(6, api.transformToTextOffset(14)); assertEquals(7, api.transformToTextOffset(15)); // Assert the text offset of </body> and after </body>. assertEquals(8, api.transformToTextOffset(16)); assertEquals(8, api.transformToTextOffset(17)); }
/** * Extracts all annotations that span inside the body tag of the given * document. * * @param doc the document to get the annotations from. * @param apiView provides a utility function to convert an xml offset point * into text offset. * @return the annotations represented as a list of {@link Annotation}. */ private static List<Annotation> extractAnnotations(Document doc, ApiView apiView) { List<Annotation> result = Lists.newArrayList(); for (RangedAnnotation<String> annotation : doc.rangedAnnotations(0, doc.size(), null)) { if (annotation.key() != null && annotation.value() != null) { int start = apiView.transformToTextOffset(annotation.start()); int end = apiView.transformToTextOffset(annotation.end()); result.add(new Annotation(annotation.key(), annotation.value(), new Range(start, end))); } } return result; } }
public void testTransformToTextOffset() { Document document = BasicFactories.documentProvider().parse( LineContainers.debugContainerWrap("123<gadget><state>foo</state></gadget>456")); ApiView api = new ApiView(document, mock(Wavelet.class)); // Assert the text offsets of <body>, <line> and </line>. assertEquals(0, api.transformToTextOffset(0)); assertEquals(0, api.transformToTextOffset(1)); assertEquals(0, api.transformToTextOffset(2)); // Assert the text offsets of 123. assertEquals(1, api.transformToTextOffset(3)); assertEquals(2, api.transformToTextOffset(4)); assertEquals(3, api.transformToTextOffset(5)); // Assert the text offsets of <gadget><state>foo</state></gadget>. assertEquals(4, api.transformToTextOffset(6)); assertEquals(4, api.transformToTextOffset(7)); assertEquals(4, api.transformToTextOffset(8)); assertEquals(4, api.transformToTextOffset(9)); assertEquals(4, api.transformToTextOffset(10)); assertEquals(4, api.transformToTextOffset(11)); assertEquals(4, api.transformToTextOffset(12)); // Assert the text offsets of 456. assertEquals(5, api.transformToTextOffset(13)); assertEquals(6, api.transformToTextOffset(14)); assertEquals(7, api.transformToTextOffset(15)); // Assert the text offset of </body> and after </body>. assertEquals(8, api.transformToTextOffset(16)); assertEquals(8, api.transformToTextOffset(17)); }
public static Map<Integer, Element> serialize(Document doc, Wavelet wavelet) { Map<Integer, Element> result = Maps.newHashMap(); ApiView apiView = new ApiView(doc, wavelet); Doc.N node = Blips.getBody(doc); if (node != null) { // The node is the body; we're after its children node = doc.getFirstChild(node); } while (node != null) { E element = doc.asElement(node); if (element != null) { Element apiElement = xmlToApiElement(doc, element, wavelet); if (apiElement != null) { result.put(apiView.transformToTextOffset(doc.getLocation(element)), apiElement); } } node = doc.getNextSibling(node); } return result; }
location = apiView.transformToTextOffset(location);