diff --git a/CHANGELOG.md b/CHANGELOG.md index 1fc0d4493..06be157ff 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ All notable changes to this project will be documented in this file. ## [Unreleased] ### Fixed - #1114 Script search results dialogs closing on swf close +- #1159 Regexp syntax hilight when not a regexp (only division) ## [13.0.2] - 2021-02-10 ### Changed diff --git a/lib/jsyntaxpane-0.9.5.jar b/lib/jsyntaxpane-0.9.5.jar index a9f673245..81dd53e67 100644 Binary files a/lib/jsyntaxpane-0.9.5.jar and b/lib/jsyntaxpane-0.9.5.jar differ diff --git a/libsrc/ffdec_lib/testdata/as3_new/bin/as3_new.air.swf b/libsrc/ffdec_lib/testdata/as3_new/bin/as3_new.air.swf index cdba4fec5..6f9341cc3 100644 Binary files a/libsrc/ffdec_lib/testdata/as3_new/bin/as3_new.air.swf and b/libsrc/ffdec_lib/testdata/as3_new/bin/as3_new.air.swf differ diff --git a/libsrc/ffdec_lib/testdata/as3_new/bin/as3_new.flex.swf b/libsrc/ffdec_lib/testdata/as3_new/bin/as3_new.flex.swf index 35e348d35..06784e823 100644 Binary files a/libsrc/ffdec_lib/testdata/as3_new/bin/as3_new.flex.swf and b/libsrc/ffdec_lib/testdata/as3_new/bin/as3_new.flex.swf differ diff --git a/libsrc/ffdec_lib/testdata/as3_new/obj/as3_newConfig.old b/libsrc/ffdec_lib/testdata/as3_new/obj/as3_newConfig.old index c4f2d0660..c57d8900d 100644 --- a/libsrc/ffdec_lib/testdata/as3_new/obj/as3_newConfig.old +++ b/libsrc/ffdec_lib/testdata/as3_new/obj/as3_newConfig.old @@ -16,7 +16,7 @@ CONFIG::timeStamp - '10.02.2021' + '11.02.2021' CONFIG::air diff --git a/libsrc/ffdec_lib/testdata/as3_new/obj/as3_newConfig.xml b/libsrc/ffdec_lib/testdata/as3_new/obj/as3_newConfig.xml index c4f2d0660..c57d8900d 100644 --- a/libsrc/ffdec_lib/testdata/as3_new/obj/as3_newConfig.xml +++ b/libsrc/ffdec_lib/testdata/as3_new/obj/as3_newConfig.xml @@ -16,7 +16,7 @@ CONFIG::timeStamp - '10.02.2021' + '11.02.2021' CONFIG::air diff --git a/libsrc/ffdec_lib/testdata/as3_new/src/Main.as b/libsrc/ffdec_lib/testdata/as3_new/src/Main.as index a31beb195..f001221a3 100644 --- a/libsrc/ffdec_lib/testdata/as3_new/src/Main.as +++ b/libsrc/ffdec_lib/testdata/as3_new/src/Main.as @@ -102,6 +102,7 @@ package TestThisOutsideClass; TestImports; TestInitializer; + TestRegexpHilight; public function Main() { diff --git a/libsrc/ffdec_lib/testdata/as3_new/src/tests_classes/TestRegexpHilight.as b/libsrc/ffdec_lib/testdata/as3_new/src/tests_classes/TestRegexpHilight.as new file mode 100644 index 000000000..2d0f40ca9 --- /dev/null +++ b/libsrc/ffdec_lib/testdata/as3_new/src/tests_classes/TestRegexpHilight.as @@ -0,0 +1,23 @@ +package tests_classes +{ + /** + * ... + * @author JPEXS + */ + public class TestRegexpHilight + { + + public function run():void + { + var myregexp:RegExp = /[a-z0-9_]+/; + var a:Number = 10; + var b:Number = 20; + var notaregexp:Number = a / b + b / a; + + trace(myregexp); + trace(notaregexp); + } + + } + +} \ No newline at end of file diff --git a/libsrc/jsyntaxpane/jsyntaxpane/src/main/java/jsyntaxpane/actions/ScriptAction.java b/libsrc/jsyntaxpane/jsyntaxpane/src/main/java/jsyntaxpane/actions/ScriptAction.java index 18341c562..8fafa8b6d 100644 --- a/libsrc/jsyntaxpane/jsyntaxpane/src/main/java/jsyntaxpane/actions/ScriptAction.java +++ b/libsrc/jsyntaxpane/jsyntaxpane/src/main/java/jsyntaxpane/actions/ScriptAction.java @@ -81,7 +81,10 @@ public class ScriptAction extends DefaultSyntaxAction { * * @param url */ - public void getScriptFromURL(String url) { + public void getScriptFromURL(String url) { + if (engine == null) { + return; + } InputStream is = JarServiceProvider.findResource(url, this.getClass().getClassLoader()); if (is != null) { Reader reader = new InputStreamReader(is); diff --git a/libsrc/jsyntaxpane/jsyntaxpane/src/main/jflex/jsyntaxpane/lexers/actionscript.flex b/libsrc/jsyntaxpane/jsyntaxpane/src/main/jflex/jsyntaxpane/lexers/actionscript.flex index 23bd380e8..193a19d14 100644 --- a/libsrc/jsyntaxpane/jsyntaxpane/src/main/jflex/jsyntaxpane/lexers/actionscript.flex +++ b/libsrc/jsyntaxpane/jsyntaxpane/src/main/jflex/jsyntaxpane/lexers/actionscript.flex @@ -17,7 +17,12 @@ package jsyntaxpane.lexers; import jsyntaxpane.Token; import jsyntaxpane.TokenType; - +import javax.swing.text.Segment; +import java.io.CharArrayReader; +import java.io.IOException; +import java.util.logging.Logger; +import java.util.logging.Level; +import java.util.List; %% %public @@ -31,7 +36,7 @@ import jsyntaxpane.TokenType; %{ /** - * Create an empty lexer, yyrset will be called later to reset and assign + * Create an empty lexer, yyreset will be called later to reset and assign * the reader */ public ActionScriptLexer() { @@ -49,6 +54,26 @@ import jsyntaxpane.TokenType; private static String xmlTagName=""; + private Token prevToken = null; + + @Override + public void parse(Segment segment, int ofst, List tokens) { + try { + CharArrayReader reader = new CharArrayReader(segment.array, segment.offset, segment.count); + yyreset(reader); + this.offset = ofst; + prevToken = null; + Token t = yylex(); + prevToken = t; + for (; t != null; t = yylex()) { + prevToken = t; + tokens.add(t); + } + } catch (IOException ex) { + Logger.getLogger(DefaultJFlexLexer.class.getName()).log(Level.SEVERE, null, ex); + } + } + %} /* main character classes */ @@ -177,11 +202,20 @@ RegExp = \/([^\r\n/]|\\\/)+\/[a-z]* "true" { return token(TokenType.KEYWORD); } - {RegExp} { return token(TokenType.REGEX); } + {RegExp} { + if (prevToken == null || prevToken.type == TokenType.OPERATOR) { + return token(TokenType.REGEX); + } else { + int ch = yychar; + yypushback(yylength()-1); + // divide "/" operator + return token(TokenType.OPERATOR,ch,1); + } + } /* operators */ - "(" { return token(TokenType.OPERATOR, PARAN); } + "(" { return token(TokenType.OPERATOR, PARAN); } ")" { return token(TokenType.OPERATOR, -PARAN); } "{" { return token(TokenType.OPERATOR, CURLY); } "}" { return token(TokenType.OPERATOR, -CURLY); }