Skip to content

Commit

Permalink
Reapplying Christian's regex patch.
Browse files Browse the repository at this point in the history
Revert "Revert "Removed dependencies from regex library oro.jar""

This reverts commit ed7795e.
  • Loading branch information
damellis committed Oct 3, 2010
1 parent 4c26e07 commit fa4d058
Show file tree
Hide file tree
Showing 7 changed files with 56 additions and 76 deletions.
2 changes: 1 addition & 1 deletion app/build.xml
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@
excludes="**/tools/format/**"
encoding="UTF-8"
includeAntRuntime="false"
classpath="../core/core.jar; ${env.JAVA_HOME}/lib/tools.jar; lib/ant.jar; lib/ant-launcher.jar; lib/apple.jar; lib/ecj.jar; lib/jna.jar; lib/oro.jar; lib/RXTXcomm.jar" />
classpath="../core/core.jar; ${env.JAVA_HOME}/lib/tools.jar; lib/ant.jar; lib/ant-launcher.jar; lib/apple.jar; lib/ecj.jar; lib/jna.jar; lib/RXTXcomm.jar" />
</target>

<target name="build" depends="compile" description="Build PDE">
Expand Down
Binary file removed app/lib/oro.jar
Binary file not shown.
125 changes: 54 additions & 71 deletions app/src/processing/app/preproc/PdePreprocessor.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ Processing version Copyright (c) 2004-05 Ben Fry and Casey Reas
import java.io.*;
import java.util.*;

import com.oroinc.text.regex.*;
import java.util.regex.*;


/**
Expand All @@ -49,16 +49,17 @@ public class PdePreprocessor {
// we always write one header: WProgram.h
public int headerCount = 1;

List prototypes;
// the prototypes that are generated by the preprocessor
List<String> prototypes;

// these ones have the .* at the end, since a class name might be at the end
// instead of .* which would make trouble other classes using this can lop
// off the . and anything after it to produce a package name consistently.
ArrayList<String> programImports;
List<String> programImports;

// imports just from the code folder, treated differently
// than the others, since the imports are auto-generated.
ArrayList<String> codeFolderImports;
List<String> codeFolderImports;

String indent;

Expand All @@ -79,6 +80,14 @@ public PdePreprocessor() {
indent = new String(indentChars);
}

/**
* Writes out the head of the c++ code generated for a sketch.
* Called from processing.app.Sketch.
* @param program the concatenated code from all tabs containing pde-files
* @param buildPath the path into which the processed pde-code is to be written
* @param name the name of the sketch
* @param codeFolderPackages unused param (leftover from processing)
*/
public int writePrefix(String program, String buildPath,
String sketchName, String codeFolderPackages[]) throws FileNotFoundException {
this.buildPath = buildPath;
Expand All @@ -93,7 +102,7 @@ public int writePrefix(String program, String buildPath,
// an OutOfMemoryError or NullPointerException will happen.
// again, not gonna bother tracking this down, but here's a hack.
// http://dev.processing.org/bugs/show_bug.cgi?id=16
String scrubbed = Sketch.scrubComments(program);
Sketch.scrubComments(program);
// If there are errors, an exception is thrown and this fxn exits.

if (Preferences.getBoolean("preproc.substitute_unicode")) {
Expand All @@ -117,14 +126,7 @@ public int writePrefix(String program, String buildPath,
// }
// }

prototypes = new ArrayList();

try {
prototypes = prototypes(program);
} catch (MalformedPatternException e) {
System.out.println("Internal error while pre-processing; " +
"not generating function prototypes.\n\n" + e);
}
prototypes = prototypes(program);

// store # of prototypes so that line number reporting can be adjusted
prototypeCount = prototypes.size();
Expand Down Expand Up @@ -193,7 +195,7 @@ public String write() throws java.lang.Exception {
}

// Write the pde program to the cpp file
protected void writeProgram(PrintStream out, String program, List prototypes) {
protected void writeProgram(PrintStream out, String program, List<String> prototypes) {
int prototypeInsertionPoint = firstStatement(program);

out.print(program.substring(0, prototypeInsertionPoint));
Expand All @@ -216,7 +218,7 @@ protected void writeProgram(PrintStream out, String program, List prototypes) {
protected void writeFooter(PrintStream out) throws java.lang.Exception {}


public ArrayList<String> getExtraImports() {
public List<String> getExtraImports() {
return programImports;
}

Expand All @@ -229,31 +231,23 @@ public ArrayList<String> getExtraImports() {
* or a pre-processor directive.
*/
public int firstStatement(String in) {
PatternMatcherInput input = new PatternMatcherInput(in);
PatternCompiler compiler = new Perl5Compiler();
PatternMatcher matcher = new Perl5Matcher();
Pattern pattern = null;
// whitespace
String p = "\\s+";

try {
pattern = compiler.compile(
// XXX: doesn't properly handle special single-quoted characters
// whitespace
"\\s+" + "|" +
// multi-line comment
"(/\\*[^*]*(?:\\*(?!/)[^*]*)*\\*/)" + "|" +
// single-line comment
"(//.*?$)" + "|" +
// pre-processor directive
"(#(?:\\\\\\n|.)*)",
Perl5Compiler.MULTILINE_MASK);
} catch (MalformedPatternException e) {
throw new RuntimeException("Internal error in firstStatement()", e);
}
// multi-line and single-line comment
//p += "|" + "(//\\s*?$)|(/\\*\\s*?\\*/)";
p += "|(/\\*[^*]*(?:\\*(?!/)[^*]*)*\\*/)|(//.*?$)";

// pre-processor directive
p += "|(#(?:\\\\\\n|.)*)";
Pattern pattern = Pattern.compile(p, Pattern.MULTILINE);

Matcher matcher = pattern.matcher(in);
int i = 0;
while (matcher.matchesPrefix(input, pattern)) {
i = matcher.getMatch().endOffset(0);
input.setCurrentOffset(i);
while (matcher.find()) {
if (matcher.start()!=i)
break;
i = matcher.end();
}

return i;
Expand All @@ -265,31 +259,24 @@ public int firstStatement(String in) {
* @param in the String to strip
* @return the stripped String
*/
public String strip(String in) throws MalformedPatternException {
PatternCompiler compiler = new Perl5Compiler();
PatternMatcher matcher = new Perl5Matcher();
Pattern pattern = compiler.compile(
// XXX: doesn't properly handle special single-quoted characters
// single-quoted character
"('.')" + "|" +
// double-quoted string
"(\"(?:[^\"\\\\]|\\\\.)*\")" + "|" +
// multi-line comment
"(/\\*[^*]*(?:\\*(?!/)[^*]*)*\\*/)" + "|" +
// single-line comment
"(//.*?$)" + "|" +
// pre-processor directive
"(^\\s*#.*?$)",
Perl5Compiler.MULTILINE_MASK);

while (matcher.contains(in, pattern)) {
MatchResult result = matcher.getMatch();
// XXX: should preserve newlines in the result so that line numbers of
// the stripped string correspond to those in the original source.
in = in.substring(0, result.beginOffset(0)) + " " + in.substring(result.endOffset(0));
}
public String strip(String in) {
// XXX: doesn't properly handle special single-quoted characters
// single-quoted character
String p = "('.')";

// double-quoted string
p += "|(\"(?:[^\"\\\\]|\\\\.)*\")";

return in;
// single and multi-line comment
//p += "|" + "(//\\s*?$)|(/\\*\\s*?\\*/)";
p += "|(//.*?$)|(/\\*[^*]*(?:\\*(?!/)[^*]*)*\\*/)";

// pre-processor directive
p += "|" + "(^\\s*#.*?$)";

Pattern pattern = Pattern.compile(p, Pattern.MULTILINE);
Matcher matcher = pattern.matcher(in);
return matcher.replaceAll(" ");
}

/**
Expand Down Expand Up @@ -324,21 +311,17 @@ private String collapseBraces(String in) {
return buffer.toString();
}

public List prototypes(String in) throws MalformedPatternException {
public ArrayList<String> prototypes(String in) {
in = collapseBraces(strip(in));

PatternMatcherInput input = new PatternMatcherInput(in);
PatternCompiler compiler = new Perl5Compiler();
PatternMatcher matcher = new Perl5Matcher();
// XXX: doesn't handle ... varargs
// XXX: doesn't handle function pointers
Pattern pattern = compiler.compile(
"[\\w\\[\\]\\*]+\\s+[\\[\\]\\*\\w\\s]+\\([,\\[\\]\\*\\w\\s]*\\)(?=\\s*\\{)");
List matches = new ArrayList();
Pattern pattern = Pattern.compile("[\\w\\[\\]\\*]+\\s+[&\\[\\]\\*\\w\\s]+\\([&,\\[\\]\\*\\w\\s]*\\)(?=\\s*\\{)");

while (matcher.contains(input, pattern)) {
matches.add(matcher.getMatch().group(0) + ";");
}
ArrayList<String> matches = new ArrayList<String>();
Matcher matcher = pattern.matcher(in);
while (matcher.find())
matches.add(matcher.group(0) + ";");

return matches;
}
Expand Down
1 change: 0 additions & 1 deletion build/build.xml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@
<include name="app/pde.jar" />
<include name="app/lib/ecj.jar" />
<include name="app/lib/jna.jar" />
<include name="app/lib/oro.jar" />
<include name="app/lib/RXTXcomm.jar" />
<include name="app/lib/ant.jar" />
<include name="app/lib/ant-launcher.jar" />
Expand Down
2 changes: 1 addition & 1 deletion build/macosx/template.app/Contents/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@
<!-- In 0149, removed /System/Library/Java from the CLASSPATH because
it can cause problems if users have installed weird files there.
http://dev.processing.org/bugs/show_bug.cgi?id=1045 -->
<string>$JAVAROOT/pde.jar:$JAVAROOT/core.jar:$JAVAROOT/antlr.jar:$JAVAROOT/ecj.jar:$JAVAROOT/registry.jar:$JAVAROOT/quaqua.jar:$JAVAROOT/oro.jar:$JAVAROOT/RXTXcomm.jar</string>
<string>$JAVAROOT/pde.jar:$JAVAROOT/core.jar:$JAVAROOT/antlr.jar:$JAVAROOT/ecj.jar:$JAVAROOT/registry.jar:$JAVAROOT/quaqua.jar:$JAVAROOT/RXTXcomm.jar</string>

<key>JVMArchs</key>
<array>
Expand Down
1 change: 0 additions & 1 deletion build/windows/launcher/config.xml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@
<cp>lib/core.jar</cp>
<cp>lib/jna.jar</cp>
<cp>lib/ecj.jar</cp>
<cp>lib/oro.jar</cp>
<cp>lib/RXTXcomm.jar</cp>
</classPath>
<jre>
Expand Down
1 change: 0 additions & 1 deletion todo.txt
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,6 @@ Sketch.java
PreProcessor.java
- split write() into writeHeader() and write() as in Processing?
- add getExtraImports() function instead of having Sketch grab them directly.
- don't use oro.jar

Base.java
- add keywords from libraries to the syntax coloring
Expand Down

0 comments on commit fa4d058

Please sign in to comment.