private OrgNodeInList parseHeading(int position, int level, String str) { OrgHead head = new OrgHead(); OrgNodeInList element = new OrgNodeInList(position, level, head); head.setState(stateMatcher.group(1)); title = stateMatcher.group(2).trim(); head.setPriority(m.group(1)); title = m.group(2).trim(); if (m.find()) { title = m.group(1).trim(); head.setTags(m.group(2).split(":")); head.setTitle(title);
if (head.getState() != null) { s.append(head.getState()).append(" "); if (head.getPriority() != null) { s.append("[#").append(head.getPriority()).append("] "); s.append(head.getTitle()); if (head.hasTags()) { String ts = tagsString(head.getTags()); if (head.hasClosed()) { s.append("\n"); appendIndent(s, level, isIndented); s.append("CLOSED: ").append(head.getClosed()); if (head.hasDeadline()) { if (hasUnderHead) { s.append(" "); s.append("DEADLINE: ").append(head.getDeadline()); if (head.hasScheduled()) { if (hasUnderHead) { s.append(" "); s.append("SCHEDULED: ").append(head.getScheduled());
@Test public void testContentLineStartingWithStar() { OrgHead head = new OrgHead(); OrgNodeInList nodeInList = new OrgNodeInList(1, 1, head); head.setTitle("Title"); head.setContent("*bold*"); String out = parserWriter.whiteSpacedHead(nodeInList, false); Assert.assertEquals("* Title\n\n*bold*\n\n", out); }
/** * Removes empty lines before and after the content. * Called before every announcement. */ private void trimContent(OrgHead head) { head.setContent(OrgStringUtils.trimLines(head.getContent())); }
@Test public void testContentLineLineNote() { OrgHead head = new OrgHead(); OrgNodeInList nodeInList = new OrgNodeInList(1, 1, head); head.setTitle("Title"); String out = parserWriter.whiteSpacedFilePreface("Content.\n\n") + parserWriter.whiteSpacedHead(nodeInList, false); Assert.assertEquals("Content.\n\n* Title\n", out); }
@Test public void testNoteBodyWithNewLinesNote() { OrgHead head1 = new OrgHead("Title 1"); head1.setContent("\n\n"); OrgNodeInList nodeInList1 = new OrgNodeInList(1, 1, head1); OrgHead head2 = new OrgHead("Title 2"); OrgNodeInList nodeInList2 = new OrgNodeInList(2, 1, head2); String out = parserWriter.whiteSpacedFilePreface("") + parserWriter.whiteSpacedHead(nodeInList1, false) + parserWriter.whiteSpacedHead(nodeInList2, false); Assert.assertEquals("* Title 1\n\n\n\n\n\n* Title 2\n", out); }
currentElement.getHead().setScheduled(OrgRange.parse(timeString)); break; currentElement.getHead().setClosed(OrgRange.parse(timeString)); break; currentElement.getHead().setDeadline(OrgRange.parse(timeString)); break; currentElement.head.addProperty( propertyMatcher.group(1), propertyMatcher.group(2) currentElement.getHead().appendContent(line); currentElement.getHead().appendContent("\n");
@Test public void testNotSeparateHeaderContentWithHeader() throws Exception { OrgParserSettings settings = new OrgParserSettings(); settings.separateHeaderAndContentWithNewLine = false; parserWriter = new OrgParserWriter(settings); OrgHead head1 = new OrgHead("Title 1"); head1.setContent("Content"); head1.addProperty("A", "B"); OrgNodeInList nodeInList1 = new OrgNodeInList(1, 1, head1); String out = parserWriter.whiteSpacedFilePreface("") + parserWriter.whiteSpacedHead(nodeInList1, false); Assert.assertEquals("* Title 1\n:PROPERTIES:\n:A: B\n:END:\nContent\n\n", out); }
@Test public void testProperties() throws IOException { String fileContent = "** TODO Note\n" + ":PROPERTIES:\n" + " :STYLE: habit\n" + " :LAST_REPEAT: [2009-10-19 Mon 00:36]\n" + " :END:"; OrgParsedFile file = parserBuilder.setInput(fileContent).build().parse(); OrgHead head = file.getHeadsInList().get(0).getHead(); Assert.assertTrue(head.hasProperties()); Assert.assertEquals(2, head.getProperties().size()); } }
@Test public void testComplicatedTimestamp() throws IOException { String fileContent = "** TODO Shave\n" + "SCHEDULED: <2009-10-17 Sat .+2d/4d>\n" + " - State \"DONE\" from \"TODO\" [2009-10-15 Thu]\n" + " - State \"DONE\" from \"TODO\" [2009-10-12 Mon]\n" + " :PROPERTIES:\n" + " :STYLE: habit\n" + " :LAST_REPEAT: [2009-10-19 Mon 00:36]\n" + " :END:"; OrgParsedFile file = parserBuilder.setInput(fileContent).build().parse(); Assert.assertEquals("", file.getFile().getPreface()); Assert.assertEquals("Shave", file.getHeadsInList().get(0).getHead().getTitle()); Assert.assertEquals("<2009-10-17 Sat .+2d/4d>", file.getHeadsInList().get(0).getHead().getScheduled().getStartTime().toString()); Assert.assertEquals("** TODO Shave\n" + "SCHEDULED: <2009-10-17 Sat .+2d/4d>\n" + " - State \"DONE\" from \"TODO\" [2009-10-15 Thu]\n" + " - State \"DONE\" from \"TODO\" [2009-10-12 Mon]\n" + " :PROPERTIES:\n" + " :STYLE: habit\n" + " :LAST_REPEAT: [2009-10-19 Mon 00:36]\n" + " :END:\n\n", file.toString()); }
public String toString() { StringBuilder s = new StringBuilder(); s.append(String.format("%2d ", position)); for (int i = 0; i < level; i++) { s.append("*"); } if (level > 0) { s.append(" "); } s.append(head != null ? head.getTitle() : "-"); return s.toString(); } }
@Test public void testNoteNote() { OrgNodeInList nodeInList1 = new OrgNodeInList(1, 1, new OrgHead("Title 1")); OrgNodeInList nodeInList2 = new OrgNodeInList(2, 1, new OrgHead("Title 2")); String out = parserWriter.whiteSpacedFilePreface("") + parserWriter.whiteSpacedHead(nodeInList1, false) + parserWriter.whiteSpacedHead(nodeInList2, false); Assert.assertEquals("* Title 1\n* Title 2\n", out); }
@Test public void testNoteContent() throws IOException { OrgHead head = parserBuilder.setInput("** Note").build().parse().getHeadsInList().get(0).getHead(); Assert.assertFalse("note should not have content", head.hasContent()); }
@Test public void testContentNote() { OrgHead head = new OrgHead(); OrgNodeInList headElement = new OrgNodeInList(1, 1, head); head.setTitle("Title"); String out = parserWriter.whiteSpacedFilePreface("Content.") + parserWriter.whiteSpacedHead(headElement, false); Assert.assertEquals("Content.\n\n* Title\n", out); }
@Test public void testNoteBodyNote() { OrgHead head1 = new OrgHead("Title 1"); head1.setContent("\n\nContent"); OrgNodeInList nodeInList1 = new OrgNodeInList(1, 1, head1); OrgHead head2 = new OrgHead("Title 2"); OrgNodeInList nodeInList2 = new OrgNodeInList(2, 1, head2); String out = parserWriter.whiteSpacedFilePreface("") + parserWriter.whiteSpacedHead(nodeInList1, false) + parserWriter.whiteSpacedHead(nodeInList2, false); Assert.assertEquals("* Title 1\n\n\n\nContent\n\n* Title 2\n", out); }
@Test public void testTags() throws IOException { OrgParsedFile file = parserBuilder.setInput("* TODO Test title parsing for tags: lala : lala :t1:t2: lala :t3:t4:\n").build().parse(); Assert.assertEquals(2, file.getHeadsInList().get(0).getHead().getTags().size()); Assert.assertTrue(file.getHeadsInList().get(0).getHead().getTags().contains("t3")); Assert.assertTrue(file.getHeadsInList().get(0).getHead().getTags().contains("t4")); }
public String toString() { StringBuilder s = new StringBuilder(); s.append(String.format("%2d %2d ", lft, rgt)); for (int i = 0; i < level; i++) { s.append("*"); } if (level > 0) { s.append(" "); } s.append(head.getTitle()); return s.toString(); } }