diff --git a/java/src/processing/mode/java/pdex/ASTGenerator.java b/java/src/processing/mode/java/pdex/ASTGenerator.java index 6b0f47045..9ddf86951 100644 --- a/java/src/processing/mode/java/pdex/ASTGenerator.java +++ b/java/src/processing/mode/java/pdex/ASTGenerator.java @@ -3008,16 +3008,16 @@ public class ASTGenerator { int lineStartPdeOffset = ps.pdeCode.lastIndexOf('\n', startPdeOffset) + 1; int lineStopPdeOffset = ps.pdeCode.indexOf('\n', stopPdeOffset); - int snippetStartOffset = startPdeOffset - lineStartPdeOffset; - int snippetStopOffset = stopPdeOffset - lineStartPdeOffset; + int highlightStartOffset = startPdeOffset - lineStartPdeOffset; + int highlightStopOffset = stopPdeOffset - lineStartPdeOffset; // TODO: what a mess String line = ps.pdeCode.substring(lineStartPdeOffset, lineStopPdeOffset); - String pre = line.substring(0, snippetStartOffset) + String pre = line.substring(0, highlightStartOffset) .replace("&", "&").replace(">", ">").replace("<", "<"); - String highlight = line.substring(snippetStartOffset, snippetStopOffset) + String highlight = line.substring(highlightStartOffset, highlightStopOffset) .replace("&", "&").replace(">", ">").replace("<", "<"); - String post = line.substring(snippetStopOffset) + String post = line.substring(highlightStopOffset) .replace("&", "&").replace(">", ">").replace("<", "<"); line = pre + "" + highlight + "" + post; line = line.trim(); diff --git a/java/src/processing/mode/java/pdex/OffsetMatcher.java b/java/src/processing/mode/java/pdex/OffsetMatcher.java deleted file mode 100644 index d7baf23ae..000000000 --- a/java/src/processing/mode/java/pdex/OffsetMatcher.java +++ /dev/null @@ -1,267 +0,0 @@ -/* -*- mode: java; c-basic-offset: 2; indent-tabs-mode: nil -*- */ - -/* -Part of the Processing project - http://processing.org -Copyright (c) 2012-15 The Processing Foundation - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License version 2 -as published by the Free Software Foundation. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software Foundation, Inc. -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -*/ - -package processing.mode.java.pdex; - -import java.util.ArrayList; - - -/** - * Performs offset matching between PDE and Java code (one line of code only) - * @author Manindra Moharana - */ -public class OffsetMatcher { - public ArrayList offsetMatch; - String pdeCodeLine, javaCodeLine; - boolean matchingNeeded = false; - - - public OffsetMatcher(String pdeCode, String javaCode) { - this.pdeCodeLine = pdeCode; - this.javaCodeLine = javaCode; - if(pdeCodeLine.trim().equals(javaCodeLine.trim())){ //TODO: trim() needed here? - matchingNeeded = false; - offsetMatch = new ArrayList(); - //log("Offset Matching not needed"); - } else { - matchingNeeded = true; - minDistance(); - } - } - - - public int getPdeOffForJavaOff(int start, int length) { -// log("PDE :" + pdeCodeLine + "\nJAVA:" + javaCodeLine); -// log("getPdeOffForJavaOff() start:" + start + ", len " + length); - if(!matchingNeeded) return start; - int ans = getPdeOffForJavaOff(start); - int end = getPdeOffForJavaOff(start + length - 1); - if(ans == -1 || end == -1){ -// log("ans: " + ans + " end: " + end); - } else { -// log(start + " java start off, pde start off " -// + ans); -// log((start + length - 1) + " java end off, pde end off " -// + end); -// log("J: " + javaCodeLine.substring(start, start + length) + "\nP: " -// + pdeCodeLine.substring(ans, end + 1)); - } - return ans; - } - - - public int getJavaOffForPdeOff(int start, int length) { - if(!matchingNeeded) return start; - int ans = getJavaOffForPdeOff(start); -// log(start + " pde start off, java start off " -// + getJavaOffForPdeOff(start)); -// log((start + length - 1) + " pde end off, java end off " -// + getJavaOffForPdeOff(start + length - 1)); - return ans; - } - - - public int getPdeOffForJavaOff(int javaOff) { - if (!matchingNeeded) - return javaOff; - for (int i = offsetMatch.size() - 1; i >= 0; i--) { - if (offsetMatch.get(i).javaOffset < javaOff) { - continue; - } else if (offsetMatch.get(i).javaOffset == javaOff) { -// int j = i; - - // sometimes there are multiple repeated j offsets for a single pde offset - // so go to the last one, with bound check - while (i > 0 && offsetMatch.get(--i).javaOffset == javaOff) { -// log("MP " + offsetMatch.get(i).javaOffset + " " -// + offsetMatch.get(i).pdeOffset); - } - if (i + 1 < offsetMatch.size()) { // bounds check, see #2664 - int pdeOff = offsetMatch.get(++i).pdeOffset; - while (i > 0 && offsetMatch.get(--i).pdeOffset == pdeOff) { - } - } - int j = i + 1; - if (j > -1 && j < offsetMatch.size()) - return offsetMatch.get(j).pdeOffset; - } - - } - return -1; - } - - - public int getJavaOffForPdeOff(int pdeOff) { - if(!matchingNeeded) return pdeOff; - for (int i = offsetMatch.size() - 1; i >= 0; i--) { - if (offsetMatch.get(i).pdeOffset < pdeOff) { - continue; - } else if (offsetMatch.get(i).pdeOffset == pdeOff) { -// int j = i; - while (i > 0 && offsetMatch.get(--i).pdeOffset == pdeOff) { -// log("MP " + offsetMatch.get(i).javaOffset + " " -// + offsetMatch.get(i).pdeOffset); - } - if (i + 1 < offsetMatch.size()) { // bounds check, see #2664 - int javaOff = offsetMatch.get(++i).javaOffset; - while (i > 0 && offsetMatch.get(--i).javaOffset == javaOff) { - } - } - int j = i + 1; - if (j > -1 && j < offsetMatch.size()) - return offsetMatch.get(j).javaOffset; - } - - } - return -1; - } - - - /** - * Finds 'distance' between two Strings. - * See Edit Distance Problem - * https://secweb.cs.odu.edu/~zeil/cs361/web/website/Lectures/styles/pages/editdistance.html - * http://www.stanford.edu/class/cs124/lec/med.pdf - */ - private int minDistance() { - -// word1 = reverse(word1); -// word2 = reverse(word2); - int len1 = pdeCodeLine.length(); - int len2 = javaCodeLine.length(); - // log(pdeCodeLine + " len: " + len1); - // log(javaCodeLine + " len: " + len2); - // len1+1, len2+1, because finally return dp[len1][len2] - int[][] dp = new int[len1 + 1][len2 + 1]; - - for (int i = 0; i <= len1; i++) { - dp[i][0] = i; - } - - for (int j = 0; j <= len2; j++) { - dp[0][j] = j; - } - - //iterate though, and check last char - for (int i = 0; i < len1; i++) { - char c1 = pdeCodeLine.charAt(i); - for (int j = 0; j < len2; j++) { - char c2 = javaCodeLine.charAt(j); - //System.out.print(c1 + "<->" + c2); - //if last two chars equal - if (c1 == c2) { - //update dp value for +1 length - dp[i + 1][j + 1] = dp[i][j]; -// log(); - } else { - int replace = dp[i][j] + 1; - int insert = dp[i][j + 1] + 1; - int delete = dp[i + 1][j] + 1; -// if (replace < delete) { -// log(" --- D"); -// } else -// log(" --- R"); - int min = replace > insert ? insert : replace; - min = delete > min ? min : delete; - dp[i + 1][j + 1] = min; - } - } - } - - ArrayList alist = new ArrayList(); - offsetMatch = alist; - minDistInGrid(dp, len1, len2, 0, 0, pdeCodeLine.toCharArray(), - javaCodeLine.toCharArray(), alist); - return dp[len1][len2]; - } - - - private void minDistInGrid(int g[][], int i, int j, int fi, int fj, - char s1[], char s2[], ArrayList set) { -// if(i < s1.length)System.out.print(s1[i] + " <->"); -// if(j < s2.length)System.out.print(s2[j]); - if (i < s1.length && j < s2.length) { -// pdeCodeMap[k] = i; -// javaCodeMap[k] = j; - //System.out.print(s1[i] + " " + i + " <-> " + j + " " + s2[j]); - set.add(new OffsetPair(i, j)); -// if (s1[i] != s2[j]) -// System.out.println("--"); - } - //System.out.println(); - if (i == fi && j == fj) { - //System.out.println("Reached end."); - } else { - int a = Integer.MAX_VALUE, b = a, c = a; - if (i > 0) - a = g[i - 1][j]; - if (j > 0) - b = g[i][j - 1]; - if (i > 0 && j > 0) - c = g[i - 1][j - 1]; - int mini = Math.min(a, Math.min(b, c)); - if (mini == a) { - //System.out.println(s1[i + 1] + " " + s2[j]); - minDistInGrid(g, i - 1, j, fi, fj, s1, s2, set); - } else if (mini == b) { - //System.out.println(s1[i] + " " + s2[j + 1]); - minDistInGrid(g, i, j - 1, fi, fj, s1, s2, set); - } else if (mini == c) { - //System.out.println(s1[i + 1] + " " + s2[j + 1]); - minDistInGrid(g, i - 1, j - 1, fi, fj, s1, s2, set); - } - } - } - - - private class OffsetPair { - public final int pdeOffset, javaOffset; - - public OffsetPair(int pde, int java) { - pdeOffset = pde; - javaOffset = java; - } - } - - - /* - public static void main(String[] args) { -// minDistance("c = #qwerty;", "c = 0xffqwerty;"); - OffsetMatcher a; - -// a = new OffsetMatcher("int a = int(can); int ball;", -// "int a = PApplet.parseInt(can); int ball;"); -// a.getPdeOffForJavaOff(25, 3); -// a.getJavaOffForPdeOff(12, 3); -// minDistance("static void main(){;", "public static void main(){;"); -// minDistance("#bb00aa", "0xffbb00aa"); -// a = new OffsetMatcher("void test(ArrayList boids){", -// "public void test(ArrayList boids){"); -// a.getJavaOffForPdeOff(20,4); - a = new OffsetMatcher("}", "\n"); - a.getPdeOffForJavaOff(0,1); - a = new OffsetMatcher("color abc = #qwerty;", "int abc = 0xffqwerty;"); - a.getPdeOffForJavaOff(4, 3); -// a.getJavaOffForPdeOff(6, 3); -// distance("c = #bb00aa;", "c = 0xffbb00aa;"); - } - */ -} -