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