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 public Document parse(File file) throws IOException, InvalidSyntaxException {
18 Document document = new Document();
20 Tokenizer lineTokenizer = getFileToLineTokenizer(getFileContentsAsString(file));
23 final TokenizerMatch line = lineTokenizer.getNextToken();
27 parseLine(line.token);
33 private void parseLine(String line) throws InvalidSyntaxException {
34 Tokenizer lineTokenizer = getLineTokenizer(line + "\n");
36 TokenizerMatch token = lineTokenizer.getNextToken();
37 if (token == null) return;
39 if (token.terminator == null)
42 if (token.token.startsWith("*")){
43 System.out.println("LINE: " + line);
44 System.out.println(token);
50 private Tokenizer getLineTokenizer(String contents) {
51 final Tokenizer tokenizer = new Tokenizer(contents);
52 for (int i = 1; i<50; i++){
53 String prefix = new String2("*").repeat(i).toString();
54 tokenizer.addTerminator(prefix +" ","\n", PRESERVE);
59 private Tokenizer getFileToLineTokenizer(String contents) {
60 final Tokenizer tokenizer = new Tokenizer(contents);
63 // tokenizer.addTerminator(" ", DROP);
64 // tokenizer.addTerminator("\t", DROP);
65 // tokenizer.addTerminator("\n", DROP);
68 tokenizer.addTerminator("\n", DROP);
70 // tokenizer.addTerminator(";", PRESERVE);
71 // tokenizer.addTerminator("{", PRESERVE);
72 // tokenizer.addTerminator("}", PRESERVE);
73 // tokenizer.addTerminator("(", PRESERVE);
74 // tokenizer.addTerminator(")", PRESERVE);
75 // tokenizer.addTerminator("[", PRESERVE);
76 // tokenizer.addTerminator("]", PRESERVE);
77 // tokenizer.addTerminator("<", PRESERVE);
78 // tokenizer.addTerminator(">", PRESERVE);
79 // tokenizer.addTerminator(",", PRESERVE);
80 // tokenizer.addTerminator("@", PRESERVE);
83 // tokenizer.addTerminator("//", "\n", DROP);
84 // tokenizer.addTerminator("/*", "*/", DROP);
88 // private void parseImport(final Tokenizer tokenizer)
89 // throws InvalidSyntaxException {
91 // final Import imp = new Import();
93 // final TokenizerMatch match = tokenizer.getNextToken();
95 // if (match.token.equals("static")) {
96 // imp.isStatic = true;
97 // imp.path = tokenizer.getNextToken().token;
99 // imp.path = match.token;
103 // tokenizer.expectAndConsumeNextToken(";");
106 // private void parseInterface(final Tokenizer tokenizer)
107 // throws InvalidSyntaxException {
109 // final TokenizerMatch match = tokenizer.getNextToken();
110 // final Clazz clazz = new Clazz(packageName, match.token, tokenizer, true);
111 // // System.out.println(clazz.toString());
112 // classes.add(clazz);
115 // private void parsePackage(final Tokenizer tokenizer)
116 // throws InvalidSyntaxException {
118 // final TokenizerMatch match = tokenizer.getNextToken();
120 // packageName = match.token;
122 // tokenizer.expectAndConsumeNextToken(";");
125 public void skipUntilSemicolon(final Tokenizer tokenizer) throws InvalidSyntaxException {
127 final TokenizerMatch token = tokenizer.getNextToken();
132 if (token.token.equals(";"))