1 package org.simantics.graph.compiler.internal.parsing;
\r
3 import java.io.InputStream;
\r
4 import java.nio.charset.Charset;
\r
5 import java.util.ArrayList;
\r
7 import org.simantics.databoard.util.StreamUtil;
\r
9 public class SourceSplitter {
\r
11 public static class SplitPoint {
\r
12 public final int characterId;
\r
13 public final int lineId;
\r
15 public SplitPoint(int characterId, int lineId) {
\r
16 this.characterId = characterId;
\r
17 this.lineId = lineId;
\r
21 public static ArrayList<SplitPoint> split(String source, int minSplit) {
\r
22 int length = source.length();
\r
26 ArrayList<SplitPoint> result = new ArrayList<SplitPoint>();
\r
27 result.add(new SplitPoint(0, 0));
\r
28 loop: for(int i=0;i<length;++i) {
\r
29 char c = source.charAt(i);
\r
34 c = source.charAt(i);
\r
40 } while(source.charAt(i) != '\n');
\r
45 if(source.charAt(i) == '\n')
\r
51 c = source.charAt(i);
\r
54 } while(c != '/' || source.charAt(i-1) != '*');
\r
59 c = source.charAt(i);
\r
69 c = source.charAt(i);
\r
80 c = source.charAt(i);
\r
85 c = source.charAt(i);
\r
91 c = source.charAt(i);
\r
94 else if(c == '"' && i < length-2 && source.charAt(i+1) == '"' && source.charAt(i+2) == '"') {
\r
108 c = source.charAt(i);
\r
113 else if(c == '\n') {
\r
135 c = source.charAt(i);
\r
140 c = source.charAt(i);
\r
146 /*System.out.println();
\r
147 System.out.print(lineId + "# ");
\r
148 System.out.print(c);
\r
150 if(i > lastSplit + minSplit && inPar == 0 && ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))) {
\r
151 result.add(new SplitPoint(i, lineId));
\r
160 //System.out.print(c);
\r
163 result.add(new SplitPoint(length, lineId));
\r
167 public static void main(String[] args) throws Exception {
\r
168 InputStream stream = SourceSplitter.class.getResourceAsStream("Layer0Deprecated.pgraph");
\r
169 String source = StreamUtil.readString(stream, Charset.forName("UTF-8"));
\r
172 ArrayList<SplitPoint> sps = split(source, 1000);
\r
173 for(int i=1;i<sps.size();++i) {
\r
174 SplitPoint begin = sps.get(i-1);
\r
175 SplitPoint end = sps.get(i);
\r
176 System.out.println("-- " + begin.lineId + ":" + end.lineId);
\r
177 System.out.print(source.subSequence(begin.characterId, end.characterId));
\r