1 package eu.svjatoslav.sixth.core.document;
3 import eu.svjatoslav.commons.string.String2;
4 import eu.svjatoslav.commons.string.tokenizer.InvalidSyntaxException;
5 import eu.svjatoslav.commons.string.tokenizer.Tokenizer;
6 import eu.svjatoslav.commons.string.tokenizer.TokenizerMatch;
9 import java.io.IOException;
11 import static eu.svjatoslav.commons.file.IOHelper.getFileContentsAsString;
12 import static eu.svjatoslav.commons.string.tokenizer.Terminator.TerminationStrategy.DROP;
13 import static eu.svjatoslav.commons.string.tokenizer.Terminator.TerminationStrategy.PRESERVE;
15 public class OrgParser {
17 private Document document;
19 public Document parse(File file) throws IOException, InvalidSyntaxException {
20 document = new Document();
22 Tokenizer lineTokenizer = getFileToLineTokenizer(getFileContentsAsString(file));
25 final TokenizerMatch line = lineTokenizer.getNextToken();
29 parseLine(line.token);
35 private void parseLine(String line) throws InvalidSyntaxException {
36 Tokenizer lineTokenizer = getLineTokenizer(line + "\n");
38 TokenizerMatch token = lineTokenizer.getNextToken();
39 if (token == null) return;
41 if (token.terminator == null)
44 if (token.token.startsWith("*")){
45 parseHeading(line, token);
50 private void parseHeading(String line, TokenizerMatch token) {
51 int level = token.token.length()-1;
52 document.createHeading(token.reminder, level);
55 private Tokenizer getLineTokenizer(String contents) {
56 final Tokenizer tokenizer = new Tokenizer(contents);
57 for (int i = 1; i<50; i++){
58 String prefix = new String2("*").repeat(i).toString();
59 tokenizer.addTerminator(prefix +" ","\n", PRESERVE);
64 private Tokenizer getFileToLineTokenizer(String contents) {
65 final Tokenizer tokenizer = new Tokenizer(contents);
68 // tokenizer.addTerminator(" ", DROP);
69 // tokenizer.addTerminator("\t", DROP);
70 // tokenizer.addTerminator("\n", DROP);
73 tokenizer.addTerminator("\n", DROP);
75 // tokenizer.addTerminator(";", PRESERVE);
76 // tokenizer.addTerminator("{", PRESERVE);
77 // tokenizer.addTerminator("}", PRESERVE);
78 // tokenizer.addTerminator("(", PRESERVE);
79 // tokenizer.addTerminator(")", PRESERVE);
80 // tokenizer.addTerminator("[", PRESERVE);
81 // tokenizer.addTerminator("]", PRESERVE);
82 // tokenizer.addTerminator("<", PRESERVE);
83 // tokenizer.addTerminator(">", PRESERVE);
84 // tokenizer.addTerminator(",", PRESERVE);
85 // tokenizer.addTerminator("@", PRESERVE);
88 // tokenizer.addTerminator("//", "\n", DROP);
89 // tokenizer.addTerminator("/*", "*/", DROP);
93 // private void parseImport(final Tokenizer tokenizer)
94 // throws InvalidSyntaxException {
96 // final Import imp = new Import();
98 // final TokenizerMatch match = tokenizer.getNextToken();
100 // if (match.token.equals("static")) {
101 // imp.isStatic = true;
102 // imp.path = tokenizer.getNextToken().token;
104 // imp.path = match.token;
108 // tokenizer.expectAndConsumeNextToken(";");
111 // private void parseInterface(final Tokenizer tokenizer)
112 // throws InvalidSyntaxException {
114 // final TokenizerMatch match = tokenizer.getNextToken();
115 // final Clazz clazz = new Clazz(packageName, match.token, tokenizer, true);
116 // // System.out.println(clazz.toString());
117 // classes.add(clazz);
120 // private void parsePackage(final Tokenizer tokenizer)
121 // throws InvalidSyntaxException {
123 // final TokenizerMatch match = tokenizer.getNextToken();
125 // packageName = match.token;
127 // tokenizer.expectAndConsumeNextToken(";");
130 public void skipUntilSemicolon(final Tokenizer tokenizer) throws InvalidSyntaxException {
132 final TokenizerMatch token = tokenizer.getNextToken();
137 if (token.token.equals(";"))