diff --git a/CHANGELOG.md b/CHANGELOG.md index 73b3ce627..11d83f976 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ All notable changes to this project will be documented in this file. ## [Unreleased] +### Fixed +- [#2476] Dark interface skins identifiers highlighter visibility ## [24.0.0] - 2025-06-24 ### Added @@ -3869,6 +3871,7 @@ Major version of SWF to XML export changed to 2. [alpha 9]: https://github.com/jindrapetrik/jpexs-decompiler/compare/alpha8...alpha9 [alpha 8]: https://github.com/jindrapetrik/jpexs-decompiler/compare/alpha7...alpha8 [alpha 7]: https://github.com/jindrapetrik/jpexs-decompiler/releases/tag/alpha7 +[#2476]: https://www.free-decompiler.com/flash/issues/2476 [#2404]: https://www.free-decompiler.com/flash/issues/2404 [#1418]: https://www.free-decompiler.com/flash/issues/1418 [#289]: https://www.free-decompiler.com/flash/issues/289 diff --git a/lib/jsyntaxpane-0.9.5.jar b/lib/jsyntaxpane-0.9.5.jar index f390b1cc9..b8bb16c51 100644 Binary files a/lib/jsyntaxpane-0.9.5.jar and b/lib/jsyntaxpane-0.9.5.jar differ diff --git a/libsrc/jsyntaxpane/jsyntaxpane/src/main/java/jsyntaxpane/components/PairsMarker.java b/libsrc/jsyntaxpane/jsyntaxpane/src/main/java/jsyntaxpane/components/PairsMarker.java index 561e5abf0..c30bdb5a3 100644 --- a/libsrc/jsyntaxpane/jsyntaxpane/src/main/java/jsyntaxpane/components/PairsMarker.java +++ b/libsrc/jsyntaxpane/jsyntaxpane/src/main/java/jsyntaxpane/components/PairsMarker.java @@ -18,6 +18,7 @@ import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import jsyntaxpane.actions.*; import javax.swing.JEditorPane; +import javax.swing.UIManager; import javax.swing.event.CaretEvent; import javax.swing.event.CaretListener; import javax.swing.text.JTextComponent; @@ -67,6 +68,12 @@ public class PairsMarker implements CaretListener, SyntaxComponent, PropertyChan @Override public void config(Configuration config) { Color markerColor = config.getColor(PROPERTY_COLOR, new Color(0xeeee33)); + + Color editorBackground = UIManager.getColor("EditorPane.background"); + int light = (editorBackground.getRed() + editorBackground.getGreen() + editorBackground.getBlue()) / 3; + if (light < 128) { + markerColor = new Color(0x553322); + } this.marker = new Markers.SimpleMarker(markerColor); } diff --git a/libsrc/jsyntaxpane/jsyntaxpane/src/main/java/jsyntaxpane/components/TokenMarker.java b/libsrc/jsyntaxpane/jsyntaxpane/src/main/java/jsyntaxpane/components/TokenMarker.java index 2dd2d8bee..3d9013005 100644 --- a/libsrc/jsyntaxpane/jsyntaxpane/src/main/java/jsyntaxpane/components/TokenMarker.java +++ b/libsrc/jsyntaxpane/jsyntaxpane/src/main/java/jsyntaxpane/components/TokenMarker.java @@ -22,6 +22,7 @@ import java.util.Iterator; import java.util.Set; import java.util.logging.Logger; import javax.swing.JEditorPane; +import javax.swing.UIManager; import javax.swing.event.CaretEvent; import javax.swing.event.CaretListener; import jsyntaxpane.SyntaxDocument; @@ -101,6 +102,11 @@ public class TokenMarker implements SyntaxComponent, CaretListener, PropertyChan public void config(Configuration config) { Color markerColor = config.getColor( PROPERTY_COLOR, DEFAULT_COLOR); + Color editorBackground = UIManager.getColor("EditorPane.background"); + int light = (editorBackground.getRed() + editorBackground.getGreen() + editorBackground.getBlue()) / 3; + if (light < 128) { + markerColor = new Color(0x553322); + } this.marker = new Markers.SimpleMarker(markerColor); String types = config.getString( PROPERTY_TOKENTYPES, DEFAULT_TOKENTYPES); diff --git a/libsrc/jsyntaxpane/jsyntaxpane/src/main/java/jsyntaxpane/lexers/DefaultJFlexLexer.java b/libsrc/jsyntaxpane/jsyntaxpane/src/main/java/jsyntaxpane/lexers/DefaultJFlexLexer.java index 01919e7b5..5b26ee444 100644 --- a/libsrc/jsyntaxpane/jsyntaxpane/src/main/java/jsyntaxpane/lexers/DefaultJFlexLexer.java +++ b/libsrc/jsyntaxpane/jsyntaxpane/src/main/java/jsyntaxpane/lexers/DefaultJFlexLexer.java @@ -18,6 +18,7 @@ import jsyntaxpane.*; import java.io.IOException; import java.io.Reader; import java.util.List; +import java.util.Stack; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.text.Segment; @@ -33,6 +34,8 @@ public abstract class DefaultJFlexLexer implements Lexer { protected int tokenStart; protected int tokenLength; protected int offset; + + protected Stack pushedBack = new Stack<>(); /** * Helper method to create and return a new Token from of TokenType @@ -100,7 +103,7 @@ public abstract class DefaultJFlexLexer implements Lexer { CharArrayReader reader = new CharArrayReader(segment.array, segment.offset, segment.count); yyreset(reader); this.offset = ofst; - for (Token t = yylex(); t != null; t = yylex()) { + for (Token t = lex(); t != null; t = lex()) { tokens.add(t); } } catch (IOException ex) { @@ -115,6 +118,29 @@ public abstract class DefaultJFlexLexer implements Lexer { */ public abstract void yyreset(Reader reader); + + /** + * JPEXS: + * Pushes back token. + * @param token + */ + public void pushBack(Token token) { + pushedBack.push(token); + } + + /** + * JPEXS: + * Calls yylex, allows pushback + * @return + * @throws java.io.IOException + */ + public Token lex() throws java.io.IOException { + if (!pushedBack.isEmpty()) { + return pushedBack.pop(); + } + return yylex(); + } + /** * This is called to return the next Token from the Input Reader * @return next token, or null if no more tokens. diff --git a/libsrc/jsyntaxpane/jsyntaxpane/src/main/jflex/jsyntaxpane/lexers/flasm.flex b/libsrc/jsyntaxpane/jsyntaxpane/src/main/jflex/jsyntaxpane/lexers/flasm.flex index ceceb41b2..bf5ae7a98 100644 --- a/libsrc/jsyntaxpane/jsyntaxpane/src/main/jflex/jsyntaxpane/lexers/flasm.flex +++ b/libsrc/jsyntaxpane/jsyntaxpane/src/main/jflex/jsyntaxpane/lexers/flasm.flex @@ -83,7 +83,7 @@ StringCharacter = [^\r\n\"\\] Register= register{NumberLiteral} Constant= constant{NumberLiteral} -%state STRING,PARAMETERS +%state STRING,IDENT,PARAMETERS %% @@ -94,6 +94,7 @@ Constant= constant{NumberLiteral} {WhiteSpace} { } {Label} { + pushBack(token(TokenType.OPERATOR,yychar+yylength()-1,1)); return token(TokenType.IDENTIFIER,yychar,yylength()-1); } @@ -113,6 +114,9 @@ Constant= constant{NumberLiteral} tokenLength = 1; } + /* operator*/ + "," { return token(TokenType.OPERATOR);} + /* numeric literals */ {NumberLiteral} { return token(TokenType.NUMBER); } diff --git a/libsrc/jsyntaxpane/jsyntaxpane/src/main/jflex/jsyntaxpane/lexers/flasm3.flex b/libsrc/jsyntaxpane/jsyntaxpane/src/main/jflex/jsyntaxpane/lexers/flasm3.flex index 43592e8ca..45c4e532f 100644 --- a/libsrc/jsyntaxpane/jsyntaxpane/src/main/jflex/jsyntaxpane/lexers/flasm3.flex +++ b/libsrc/jsyntaxpane/jsyntaxpane/src/main/jflex/jsyntaxpane/lexers/flasm3.flex @@ -103,7 +103,10 @@ ExceptionTarget = "exceptiontarget "{PositiveNumberLiteral}":" } - {Label} {return token(TokenType.IDENTIFIER,yychar,yylength()-1); } + {Label} { + pushBack(token(TokenType.OPERATOR,yychar+yylength()-1,1)); + return token(TokenType.IDENTIFIER,yychar,yylength()-1); + } diff --git a/src/com/jpexs/decompiler/flash/gui/editor/VariableMarker.java b/src/com/jpexs/decompiler/flash/gui/editor/VariableMarker.java index 95fe97601..040b0f3ea 100644 --- a/src/com/jpexs/decompiler/flash/gui/editor/VariableMarker.java +++ b/src/com/jpexs/decompiler/flash/gui/editor/VariableMarker.java @@ -79,6 +79,7 @@ import javax.swing.JScrollBar; import javax.swing.JScrollPane; import javax.swing.ListSelectionModel; import javax.swing.SwingUtilities; +import javax.swing.UIManager; import javax.swing.event.CaretEvent; import javax.swing.event.CaretListener; import javax.swing.event.DocumentEvent; @@ -476,6 +477,14 @@ public class VariableMarker implements SyntaxComponent, CaretListener, PropertyC public void config(Configuration config) { Color markerColor = config.getColor(PROPERTY_COLOR, DEFAULT_COLOR); Color errorColor = config.getColor(PROPERTY_ERRORCOLOR, DEFAULT_ERRORCOLOR); + + + Color editorBackground = UIManager.getColor("EditorPane.background"); + int light = (editorBackground.getRed() + editorBackground.getGreen() + editorBackground.getBlue()) / 3; + if (light < 128) { + markerColor = new Color(0x443322); + } + this.marker = new OccurencesMarker(markerColor); this.errorMarker = new WavyUnderLinePainter(errorColor); //Markers.SimpleMarker(errorColor); String types = config.getString(