X-Git-Url: http://www2.svjatoslav.eu/gitweb/?p=sixth.git;a=blobdiff_plain;f=src%2Fmain%2Fjava%2Feu%2Fsvjatoslav%2Fsixth%2Fcore%2Fdocument%2FDocument.java;h=c61d613842249402978b07ba39afc865df307542;hp=e4c45bdbcca645e80ad3d38cceb2bfae3d82f6e1;hb=HEAD;hpb=1f96525468e7f76c1ce817a8a7b22c93a39e40b4 diff --git a/src/main/java/eu/svjatoslav/sixth/core/document/Document.java b/src/main/java/eu/svjatoslav/sixth/core/document/Document.java deleted file mode 100644 index e4c45bd..0000000 --- a/src/main/java/eu/svjatoslav/sixth/core/document/Document.java +++ /dev/null @@ -1,110 +0,0 @@ -package eu.svjatoslav.sixth.core.document; - -import eu.svjatoslav.commons.string.tokenizer.InvalidSyntaxException; -import eu.svjatoslav.commons.string.tokenizer.Tokenizer; -import eu.svjatoslav.commons.string.tokenizer.TokenizerMatch; -import eu.svjatoslav.sixth.core.document.text.FormattedText; - -import static eu.svjatoslav.commons.string.tokenizer.Terminator.TerminationStrategy.PRESERVE; -import static eu.svjatoslav.sixth.core.document.Helper.*; -import static eu.svjatoslav.sixth.core.document.text.FormattedText.fromOrg; - -public class Document { - public final Heading rootHeading = new Heading( null , 0, null); - private Heading currentHeading = rootHeading; - - public Heading createHeading(FormattedText name, int targetLevel){ - if (currentHeading.level == (targetLevel - 1)){ - Heading newHeading = new Heading(name, targetLevel, currentHeading); - currentHeading.addChild(newHeading); - currentHeading = newHeading; - return newHeading; - } - - if (currentHeading.level > (targetLevel - 1)){ - currentHeading = currentHeading.parent; - return createHeading(name, targetLevel); - } - - Heading missingIntermediate = new Heading(fromOrg(""), currentHeading.level + 1, currentHeading); - currentHeading.addChild(missingIntermediate); - currentHeading = missingIntermediate; - return createHeading(name, targetLevel); - } - - public Heading getCurrentHeading(){ - return currentHeading; - } - - private void parseHeading(TokenizerMatch token) throws InvalidSyntaxException { - String[] headingSections = token.getRegExpGroups(); - int level = headingSections[0].length(); - String title = headingSections[1]; - createHeading(fromOrg(title), level); - } - - public void parse(String fileContentsAsString) throws InvalidSyntaxException { - final Tokenizer tokenizer = new Tokenizer(fileContentsAsString); - - // Org heading: - // "*** Example Heading 1234" - tokenizer.addTerminator(PRESERVE, "(\\*+)[ \\t](.*)\\r?\\n", TG_HEADING); - - // Org list. Examples: - // " + my list title" - // " - my list title" - tokenizer.addTerminator(PRESERVE, "([ \\t]*)(\\+|-)[ \\t]+(.*)?\\r?\\n", TG_LIST); - - // " * my list title" - tokenizer.addTerminator(PRESERVE, "([ \\t]+)(\\*)[ \\t]+(.*)?\\r?\\n", TG_LIST); - - // TODO: add numbered list - - // DocumentProperty: - // "#+OPTIONS: H:20 num:20" - tokenizer.addTerminator(PRESERVE, "#\\+[^\\s]+:.*\\r?\\n", TG_DOCUMENT_PROPERTY); - - // Drawer property: - // " :ID: 533734b9-0456-4448-9830-a43646345615" - tokenizer.addTerminator(PRESERVE, "([ \\t]*):([^\\s]+):(.*)\\r?\\n", TG_DRAWER_PROPERTY); - - - // multiline code block - tokenizer.addTerminator(PRESERVE, - "([ \\t]*)#\\+BEGIN_SRC" + // source begin identifier - "(([ \\t]+)(.*))?(\\r?\\n)" + // source block parameters - "((?:.|\\n|\\r)*?)" + // source content - "(\\r?\\n)([ \\t]*)#\\+END_SRC(.*)\\r?\\n" // source end identifier - , TG_MULTILINE_CODE); - - // verse - tokenizer.addTerminator(PRESERVE, - "([ \\t]*)#\\+BEGIN_VERSE" + // verse begin identifier - "(([ \\t]+)(.*))?(\\r?\\n)" + // verse block parameters - "((?:.|\\n|\\r)*?)" + // verse - "(\\r?\\n)([ \\t]*)#\\+END_VERSE(.*)\\r?\\n" // verse end identifier - , TG_VERSE); - - - // TODO: add support for export blocks: - // #+begin_export latex - // \clearpage - //#+end_export - - - // normal text - tokenizer.addTerminator(PRESERVE,".*\\r?\\n", TG_NORMAL_TEXT); - - while (tokenizer.hasMoreContent()) { - final TokenizerMatch tm = tokenizer.getNextToken(); - - if (tm.isGroup(TG_HEADING)){ - parseHeading(tm); - continue; - } - - currentHeading.parse(tm); - } - - } -}