X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.graph.compiler%2Fsrc%2Forg%2Fsimantics%2Fgraph%2Fcompiler%2Finternal%2Fparsing%2FSourceSplitter.java;fp=bundles%2Forg.simantics.graph.compiler%2Fsrc%2Forg%2Fsimantics%2Fgraph%2Fcompiler%2Finternal%2Fparsing%2FSourceSplitter.java;h=55be461784d3d13cdf79f7c9b306c4f768da32bf;hp=3f00c5b47f8c27e71a0d09b9ec6abb7eaab7b277;hb=0ae2b770234dfc3cbb18bd38f324125cf0faca07;hpb=24e2b34260f219f0d1644ca7a138894980e25b14 diff --git a/bundles/org.simantics.graph.compiler/src/org/simantics/graph/compiler/internal/parsing/SourceSplitter.java b/bundles/org.simantics.graph.compiler/src/org/simantics/graph/compiler/internal/parsing/SourceSplitter.java index 3f00c5b47..55be46178 100644 --- a/bundles/org.simantics.graph.compiler/src/org/simantics/graph/compiler/internal/parsing/SourceSplitter.java +++ b/bundles/org.simantics.graph.compiler/src/org/simantics/graph/compiler/internal/parsing/SourceSplitter.java @@ -1,181 +1,181 @@ -package org.simantics.graph.compiler.internal.parsing; - -import java.io.InputStream; -import java.nio.charset.Charset; -import java.util.ArrayList; - -import org.simantics.databoard.util.StreamUtil; - -public class SourceSplitter { - - public static class SplitPoint { - public final int characterId; - public final int lineId; - - public SplitPoint(int characterId, int lineId) { - this.characterId = characterId; - this.lineId = lineId; - } - } - - public static ArrayList split(String source, int minSplit) { - int length = source.length(); - int inPar = 0; - int lineId = 0; - int lastSplit = 0; - ArrayList result = new ArrayList(); - result.add(new SplitPoint(0, 0)); - loop: for(int i=0;i= length) - break loop; - c = source.charAt(i); - if(c == '\n') - ++lineId; - } while(c != '/' || source.charAt(i-1) != '*'); - } - break; - case '<': - ++i; - c = source.charAt(i); - if(c != 'h') { - if(c == '\n') - ++lineId; - break; - } - do { - ++i; - if(i == length) - break loop; - c = source.charAt(i); - if(c == '\n') { - ++lineId; - break; - } - } while(c != '>'); - break; - case '"': - ++i; - if(i == length) - break loop; - c = source.charAt(i); - if(c == '"') { - ++i; - if(i == length) - break loop; - c = source.charAt(i); - if(c == '"') { - while(true) { - ++i; - if(i >= length) - break; - c = source.charAt(i); - if(c == '\n') - ++lineId; - else if(c == '"' && i < length-2 && source.charAt(i+1) == '"' && source.charAt(i+2) == '"') { - i+=2; - break; - } - } - } - else - --i; - } - else { - while(true) { - ++i; - if(i >= length) - break; - c = source.charAt(i); - if(c == '"') - break; - else if(c == '\\') - ++i; - else if(c == '\n') { - ++lineId; - break; - } - } - } - break; - case '[': - case '{': - case '(': - ++inPar; - break; - case ']': - case '}': - case ')': - --inPar; - break; - case '\n': - ++lineId; - ++i; - if(i == length) - break; - c = source.charAt(i); - if(c == '\r') { - ++i; - if(i == length) - break; - c = source.charAt(i); - } - if(c == '\n') { - --i; - break; - } - /*System.out.println(); - System.out.print(lineId + "# "); - System.out.print(c); - */ - if(i > lastSplit + minSplit && inPar == 0 && ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))) { - result.add(new SplitPoint(i, lineId)); - lastSplit = i; - } - else - --i; - break; - case '\r': - break; - default: - //System.out.print(c); - } - } - result.add(new SplitPoint(length, lineId)); - return result; - } - - public static void main(String[] args) throws Exception { - InputStream stream = SourceSplitter.class.getResourceAsStream("Layer0Deprecated.pgraph"); - String source = StreamUtil.readString(stream, Charset.forName("UTF-8")); - stream.close(); - - ArrayList sps = split(source, 1000); - for(int i=1;i split(String source, int minSplit) { + int length = source.length(); + int inPar = 0; + int lineId = 0; + int lastSplit = 0; + ArrayList result = new ArrayList(); + result.add(new SplitPoint(0, 0)); + loop: for(int i=0;i= length) + break loop; + c = source.charAt(i); + if(c == '\n') + ++lineId; + } while(c != '/' || source.charAt(i-1) != '*'); + } + break; + case '<': + ++i; + c = source.charAt(i); + if(c != 'h') { + if(c == '\n') + ++lineId; + break; + } + do { + ++i; + if(i == length) + break loop; + c = source.charAt(i); + if(c == '\n') { + ++lineId; + break; + } + } while(c != '>'); + break; + case '"': + ++i; + if(i == length) + break loop; + c = source.charAt(i); + if(c == '"') { + ++i; + if(i == length) + break loop; + c = source.charAt(i); + if(c == '"') { + while(true) { + ++i; + if(i >= length) + break; + c = source.charAt(i); + if(c == '\n') + ++lineId; + else if(c == '"' && i < length-2 && source.charAt(i+1) == '"' && source.charAt(i+2) == '"') { + i+=2; + break; + } + } + } + else + --i; + } + else { + while(true) { + ++i; + if(i >= length) + break; + c = source.charAt(i); + if(c == '"') + break; + else if(c == '\\') + ++i; + else if(c == '\n') { + ++lineId; + break; + } + } + } + break; + case '[': + case '{': + case '(': + ++inPar; + break; + case ']': + case '}': + case ')': + --inPar; + break; + case '\n': + ++lineId; + ++i; + if(i == length) + break; + c = source.charAt(i); + if(c == '\r') { + ++i; + if(i == length) + break; + c = source.charAt(i); + } + if(c == '\n') { + --i; + break; + } + /*System.out.println(); + System.out.print(lineId + "# "); + System.out.print(c); + */ + if(i > lastSplit + minSplit && inPar == 0 && ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))) { + result.add(new SplitPoint(i, lineId)); + lastSplit = i; + } + else + --i; + break; + case '\r': + break; + default: + //System.out.print(c); + } + } + result.add(new SplitPoint(length, lineId)); + return result; + } + + public static void main(String[] args) throws Exception { + InputStream stream = SourceSplitter.class.getResourceAsStream("Layer0Deprecated.pgraph"); + String source = StreamUtil.readString(stream, Charset.forName("UTF-8")); + stream.close(); + + ArrayList sps = split(source, 1000); + for(int i=1;i