From 470f1411d9a89c51ccdb4c187b002e7819c1584c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Fri, 23 May 2025 01:06:55 +0200 Subject: [PATCH] Added: #2404 Quick find in text/script editors - show number of occurences Fixed: AS1/2 improper selection of search result --- CHANGELOG.md | 3 + lib/jsyntaxpane-0.9.5.jar | Bin 606513 -> 607614 bytes .../actions/DocumentSearchData.java | 74 ++++++++++++++++-- .../actions/gui/QuickFindDialog.form | 18 +++-- .../actions/gui/QuickFindDialog.java | 33 ++++++-- .../resources/jsyntaxpane/Bundle.properties | 3 + .../jsyntaxpane/Bundle_cs.properties | 3 + .../flash/gui/ScrollPosStorage.java | 12 +++ .../flash/gui/action/ActionPanel.java | 31 ++++++-- 9 files changed, 150 insertions(+), 27 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cffc17a32..eb972db14 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ All notable changes to this project will be documented in this file. the new TOML file, when exists) - `-configFile` and `-storeConfigFile` commandline parameters for loading/storing configuration file - Option to .bat and .sh file to enable J2D_D3D_NO_HWCHECK +- [#2404] Quick find in text/script editors - show number of occurences ### Fixed - [#2456] FLA export - NullPointer exception while exporting to CS4 or lower via commandline @@ -18,6 +19,7 @@ All notable changes to this project will be documented in this file. - Resize export dialogs labels to match localized strings - AS1/2 debugger - deletion of SWD file after debugging - Proper freeing memory after SWF close +- AS1/2 improper selection of search result ## [23.0.1] - 2025-05-16 ### Fixed @@ -3800,6 +3802,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 +[#2404]: https://www.free-decompiler.com/flash/issues/2404 [#2456]: https://www.free-decompiler.com/flash/issues/2456 [#2427]: https://www.free-decompiler.com/flash/issues/2427 [#1826]: https://www.free-decompiler.com/flash/issues/1826 diff --git a/lib/jsyntaxpane-0.9.5.jar b/lib/jsyntaxpane-0.9.5.jar index 63409e2b9e5a7b489c2feb308520084c26a10109..67b2a6ce147cde51906bcd6c0c102727505fe828 100644 GIT binary patch delta 34002 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 cha?{(kfutM{}dr+|c2g%fOaR2}S delta 32519 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 diff --git a/libsrc/jsyntaxpane/jsyntaxpane/src/main/java/jsyntaxpane/actions/DocumentSearchData.java b/libsrc/jsyntaxpane/jsyntaxpane/src/main/java/jsyntaxpane/actions/DocumentSearchData.java index acda9688e..fec2c4f5c 100644 --- a/libsrc/jsyntaxpane/jsyntaxpane/src/main/java/jsyntaxpane/actions/DocumentSearchData.java +++ b/libsrc/jsyntaxpane/jsyntaxpane/src/main/java/jsyntaxpane/actions/DocumentSearchData.java @@ -15,6 +15,8 @@ package jsyntaxpane.actions; import java.awt.Component; import java.text.MessageFormat; +import java.util.Map; +import java.util.WeakHashMap; import java.util.logging.Level; import java.util.logging.Logger; import java.util.regex.Matcher; @@ -46,6 +48,10 @@ public class DocumentSearchData { private boolean wrap = true; private ReplaceDialog replaceDlg; private QuickFindDialog quickFindDlg; + /** + * JPEXS + */ + private Map currentOccurenceMap = new WeakHashMap<>(); /** * This prevent creating a new instance. You must call the getFromEditor @@ -55,6 +61,8 @@ public class DocumentSearchData { private DocumentSearchData() { } + + public Pattern getPattern() { return pattern; } @@ -176,20 +184,57 @@ public class DocumentSearchData { // go throw all matches, and stop when we reach current pos int start = -1; int end = -1; + int occurenceNumber = 0; //JPEXS while (matcher.find()) { if (matcher.end() >= dot) { break; } + occurenceNumber++; start = matcher.start(); end = matcher.end(); } if (end > 0) { target.select(start, end); + currentOccurenceMap.put(target, occurenceNumber); return true; } else { - return false; + return false; } } + + /** + * Gets search occurences. (JPEXS) + * + * @param target + * @return Number of occurences + */ + public int getOccurencesCount(JTextComponent target) { + if (getPattern() == null) { + return 0; + } + SyntaxDocument sDoc = ActionUtils.getSyntaxDocument(target); + if (sDoc == null) { + return 0; + } + Matcher matcher = sDoc.getMatcher(getPattern()); + int count = 0; + while (matcher.find()) { + count++; + } + return count; + } + + /** + * Gets current occurence number. (JPEXS) + * @param target + * @return Current occurence number. + */ + public int getCurrentOccurence(JTextComponent target) { + if (!currentOccurenceMap.containsKey(target)) { + return 0; + } + return currentOccurenceMap.get(target); + } /** * Perform a FindNext operation on the given text component. Position @@ -214,22 +259,37 @@ public class DocumentSearchData { if (start >= sDoc.getLength()) { start = sDoc.getLength(); } - Matcher matcher = sDoc.getMatcher(getPattern(), start); - if (matcher != null && matcher.find()) { - // since we used an offset in the matcher, the matcher location - // MUST be offset by that location - target.select(matcher.start() + start, matcher.end() + start); + Matcher matcher = sDoc.getMatcher(getPattern()); + + //JPEXS + int occurenceNumber = 0; + boolean found = false; + if (matcher != null) { + while(matcher.find()) { + occurenceNumber++; + if (matcher.start() >= start) { + found = true; + break; + } + } + } + + if (found) { //JPEXS + target.select(matcher.start(), matcher.end()); //JPEXS + currentOccurenceMap.put(target, occurenceNumber); return true; } else { if (isWrap()) { matcher = sDoc.getMatcher(getPattern()); if (matcher != null && matcher.find()) { target.select(matcher.start(), matcher.end()); + currentOccurenceMap.put(target, 1); return true; } else { + currentOccurenceMap.put(target, 0); return false; } - } else { + } else { return false; } } diff --git a/libsrc/jsyntaxpane/jsyntaxpane/src/main/java/jsyntaxpane/actions/gui/QuickFindDialog.form b/libsrc/jsyntaxpane/jsyntaxpane/src/main/java/jsyntaxpane/actions/gui/QuickFindDialog.form index 0a4d582d2..c029c6c01 100644 --- a/libsrc/jsyntaxpane/jsyntaxpane/src/main/java/jsyntaxpane/actions/gui/QuickFindDialog.form +++ b/libsrc/jsyntaxpane/jsyntaxpane/src/main/java/jsyntaxpane/actions/gui/QuickFindDialog.form @@ -46,7 +46,6 @@ - @@ -91,7 +90,6 @@ - @@ -108,13 +106,24 @@ - + + + + + + + + + + + + @@ -122,7 +131,6 @@ - @@ -136,7 +144,6 @@ - @@ -150,7 +157,6 @@ - diff --git a/libsrc/jsyntaxpane/jsyntaxpane/src/main/java/jsyntaxpane/actions/gui/QuickFindDialog.java b/libsrc/jsyntaxpane/jsyntaxpane/src/main/java/jsyntaxpane/actions/gui/QuickFindDialog.java index f596833a2..6c4102f02 100644 --- a/libsrc/jsyntaxpane/jsyntaxpane/src/main/java/jsyntaxpane/actions/gui/QuickFindDialog.java +++ b/libsrc/jsyntaxpane/jsyntaxpane/src/main/java/jsyntaxpane/actions/gui/QuickFindDialog.java @@ -87,6 +87,7 @@ public class QuickFindDialog extends javax.swing.JDialog public QuickFindDialog(final JTextComponent target, DocumentSearchData data) { super(ActionUtils.getFrameFor(target), false); initComponents(); + jToolBar1.setFloatable(false); SwingUtils.addEscapeListener(this); dsd = new WeakReference(data); getRootPane().setWindowDecorationStyle(JRootPane.NONE); @@ -159,6 +160,7 @@ public class QuickFindDialog extends javax.swing.JDialog jSeparator3 = new javax.swing.JToolBar.Separator(); jBtnPrev = new javax.swing.JButton(); jBtnNext = new javax.swing.JButton(); + jLblOccurences = new javax.swing.JLabel(); jChkIgnoreCase = new javax.swing.JCheckBox(); jChkRegExp = new javax.swing.JCheckBox(); jChkWrap = new javax.swing.JCheckBox(); @@ -172,7 +174,6 @@ public class QuickFindDialog extends javax.swing.JDialog setResizable(false); jToolBar1.setBorder(javax.swing.BorderFactory.createEtchedBorder()); - jToolBar1.setFloatable(false); jToolBar1.setRollover(true); jToolBar1.add(jSeparator1); @@ -192,7 +193,6 @@ public class QuickFindDialog extends javax.swing.JDialog jBtnPrev.setIcon(new javax.swing.ImageIcon(getClass().getResource("/META-INF/images/small-icons/go-up.png"))); // NOI18N jBtnPrev.setFocusable(false); jBtnPrev.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); - jBtnPrev.setOpaque(false); jBtnPrev.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); jBtnPrev.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { @@ -205,7 +205,6 @@ public class QuickFindDialog extends javax.swing.JDialog jBtnNext.setFocusable(false); jBtnNext.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); jBtnNext.setMargin(new java.awt.Insets(2, 2, 2, 2)); - jBtnNext.setOpaque(false); jBtnNext.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); jBtnNext.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { @@ -214,10 +213,13 @@ public class QuickFindDialog extends javax.swing.JDialog }); jToolBar1.add(jBtnNext); + jLblOccurences.setText(bundle.getString("QuickFindDialog.Occurences.Zero")); // NOI18N + jLblOccurences.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 5, 0, 5)); + jToolBar1.add(jLblOccurences); + jChkIgnoreCase.setMnemonic('C'); jChkIgnoreCase.setText(bundle.getString("QuickFindDialog.jChkIgnoreCase.text")); // NOI18N jChkIgnoreCase.setFocusable(false); - jChkIgnoreCase.setOpaque(false); jChkIgnoreCase.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); jToolBar1.add(jChkIgnoreCase); jChkIgnoreCase.addActionListener(this); @@ -225,7 +227,6 @@ public class QuickFindDialog extends javax.swing.JDialog jChkRegExp.setMnemonic('R'); jChkRegExp.setText(bundle.getString("QuickFindDialog.jChkRegExp.text")); // NOI18N jChkRegExp.setFocusable(false); - jChkRegExp.setOpaque(false); jChkRegExp.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); jToolBar1.add(jChkRegExp); jChkRegExp.addActionListener(this); @@ -233,7 +234,6 @@ public class QuickFindDialog extends javax.swing.JDialog jChkWrap.setMnemonic('W'); jChkWrap.setText(bundle.getString("QuickFindDialog.jChkWrap.text")); // NOI18N jChkWrap.setFocusable(false); - jChkWrap.setOpaque(false); jChkWrap.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); jToolBar1.add(jChkWrap); jChkWrap.addActionListener(this); @@ -264,6 +264,7 @@ public class QuickFindDialog extends javax.swing.JDialog } else { jLblStatus.setText(java.util.ResourceBundle.getBundle("jsyntaxpane/Bundle").getString("QuickFindDialog.NotFound")); } + updateOccurences(); }//GEN-LAST:event_jBtnNextActionPerformed private void jBtnPrevActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jBtnPrevActionPerformed @@ -272,8 +273,25 @@ public class QuickFindDialog extends javax.swing.JDialog } else { jLblStatus.setText(java.util.ResourceBundle.getBundle("jsyntaxpane/Bundle").getString("QuickFindDialog.NotFound")); } + updateOccurences(); }//GEN-LAST:event_jBtnPrevActionPerformed + //JPEXS + private void updateOccurences() { + if (dsd.get().getOccurencesCount(target.get()) == 0) + { + jLblOccurences.setText( + java.util.ResourceBundle.getBundle("jsyntaxpane/Bundle").getString("QuickFindDialog.Occurences.Zero") + ); + return; + } + jLblOccurences.setText( + java.util.ResourceBundle.getBundle("jsyntaxpane/Bundle").getString("QuickFindDialog.Occurences") + .replace("%current%", "" + dsd.get().getCurrentOccurence(target.get())) + .replace("%total%", "" + dsd.get().getOccurencesCount(target.get())) + ); + } + // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton jBtnNext; private javax.swing.JButton jBtnPrev; @@ -281,6 +299,7 @@ public class QuickFindDialog extends javax.swing.JDialog private javax.swing.JCheckBox jChkRegExp; private javax.swing.JCheckBox jChkWrap; private javax.swing.JLabel jLabel1; + private javax.swing.JLabel jLblOccurences; private javax.swing.JLabel jLblStatus; private javax.swing.JToolBar.Separator jSeparator1; private javax.swing.JToolBar.Separator jSeparator2; @@ -311,6 +330,7 @@ public class QuickFindDialog extends javax.swing.JDialog String toFind = jTxtFind.getText(); if (toFind == null || toFind.isEmpty()) { jLblStatus.setText(null); + jLblOccurences.setText(null); return; } try { @@ -327,6 +347,7 @@ public class QuickFindDialog extends javax.swing.JDialog } else { jLblStatus.setText(null); } + updateOccurences(); //JPEXS setSize(getPreferredSize()); pack(); } catch (PatternSyntaxException e) { diff --git a/libsrc/jsyntaxpane/jsyntaxpane/src/main/resources/jsyntaxpane/Bundle.properties b/libsrc/jsyntaxpane/jsyntaxpane/src/main/resources/jsyntaxpane/Bundle.properties index 61eb66f35..366c398d5 100644 --- a/libsrc/jsyntaxpane/jsyntaxpane/src/main/resources/jsyntaxpane/Bundle.properties +++ b/libsrc/jsyntaxpane/jsyntaxpane/src/main/resources/jsyntaxpane/Bundle.properties @@ -36,3 +36,6 @@ ScriptRunnerAction.ErrorExecutingScript = Error executing script:\\n ScriptRunnerAction.ScriptError = Script Error ScriptRunnerAction.ScriptEngineNotFound = Script Engine for [{0}] not found. Disable this Action? ShowAbbsAction.NoAbbsForType = No Abbreviations exist for this content type + +QuickFindDialog.Occurences = (%current%/%total%) +QuickFindDialog.Occurences.Zero = (0) \ No newline at end of file diff --git a/libsrc/jsyntaxpane/jsyntaxpane/src/main/resources/jsyntaxpane/Bundle_cs.properties b/libsrc/jsyntaxpane/jsyntaxpane/src/main/resources/jsyntaxpane/Bundle_cs.properties index c4f09c760..d301e295b 100644 --- a/libsrc/jsyntaxpane/jsyntaxpane/src/main/resources/jsyntaxpane/Bundle_cs.properties +++ b/libsrc/jsyntaxpane/jsyntaxpane/src/main/resources/jsyntaxpane/Bundle_cs.properties @@ -36,3 +36,6 @@ ScriptRunnerAction.ErrorExecutingScript = Chyba vykon\u00e1v\u00e1n\u00ed skript ScriptRunnerAction.ScriptError = Chyba skriptu ScriptRunnerAction.ScriptEngineNotFound = Engine skriptu [{0}] nenalezen. Zak\u00e1zat tuto akci? ShowAbbsAction.NoAbbsForType = Pro tento typ obsahu neexistuj\u00ed zkratky + +QuickFindDialog.Occurences = (%current%/%total%) +QuickFindDialog.Occurences.Zero = (0) \ No newline at end of file diff --git a/src/com/jpexs/decompiler/flash/gui/ScrollPosStorage.java b/src/com/jpexs/decompiler/flash/gui/ScrollPosStorage.java index bd4b2261e..501d111bb 100644 --- a/src/com/jpexs/decompiler/flash/gui/ScrollPosStorage.java +++ b/src/com/jpexs/decompiler/flash/gui/ScrollPosStorage.java @@ -252,12 +252,18 @@ public class ScrollPosStorage { return; } actionScriptCaret = mainPanel.getABCPanel().decompiledTextArea.getCaretPosition(); + if (mainPanel.getABCPanel().decompiledTextArea.getSelectionStart() > 0) { + actionScriptCaret = mainPanel.getABCPanel().decompiledTextArea.getSelectionStart(); + } actionScriptScrollHorizontal = mainPanel.getABCPanel().decompiledScrollPane.getHorizontalScrollBar().getValue(); actionScriptScrollVertical = mainPanel.getABCPanel().decompiledScrollPane.getVerticalScrollBar().getValue(); pcodeScrollHorizontal = mainPanel.getABCPanel().detailPanel.methodTraitPanel.methodCodePanel.getSourceScrollPane().getHorizontalScrollBar().getValue(); pcodeScrollVertical = mainPanel.getABCPanel().detailPanel.methodTraitPanel.methodCodePanel.getSourceScrollPane().getVerticalScrollBar().getValue(); pcodeCaret = mainPanel.getABCPanel().detailPanel.methodTraitPanel.methodCodePanel.getSourceTextArea().getCaretPosition(); + if (mainPanel.getABCPanel().detailPanel.methodTraitPanel.methodCodePanel.getSourceTextArea().getSelectionStart() > 0) { + pcodeCaret = mainPanel.getABCPanel().detailPanel.methodTraitPanel.methodCodePanel.getSourceTextArea().getSelectionStart(); + } } } else if (asmItem instanceof ASMSource) { @@ -272,9 +278,15 @@ public class ScrollPosStorage { actionScriptScrollHorizontal = ((JScrollPane) mainPanel.getActionPanel().decompiledEditor.getParent().getParent()).getHorizontalScrollBar().getValue(); actionScriptScrollVertical = ((JScrollPane) mainPanel.getActionPanel().decompiledEditor.getParent().getParent()).getVerticalScrollBar().getValue(); actionScriptCaret = mainPanel.getActionPanel().decompiledEditor.getCaretPosition(); + if (mainPanel.getActionPanel().decompiledEditor.getSelectionStart() > 0) { + actionScriptCaret = mainPanel.getActionPanel().decompiledEditor.getSelectionStart(); + } pcodeScrollHorizontal = ((JScrollPane) mainPanel.getActionPanel().editor.getParent().getParent()).getHorizontalScrollBar().getValue(); pcodeScrollVertical = ((JScrollPane) mainPanel.getActionPanel().editor.getParent().getParent()).getVerticalScrollBar().getValue(); pcodeCaret = mainPanel.getActionPanel().editor.getCaretPosition(); + if (mainPanel.getActionPanel().editor.getSelectionStart() > 0) { + pcodeCaret = mainPanel.getActionPanel().editor.getSelectionStart(); + } } } int folderPreviewScrollVertical = 0; diff --git a/src/com/jpexs/decompiler/flash/gui/action/ActionPanel.java b/src/com/jpexs/decompiler/flash/gui/action/ActionPanel.java index 97775de56..f89f3285e 100644 --- a/src/com/jpexs/decompiler/flash/gui/action/ActionPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/action/ActionPanel.java @@ -86,6 +86,8 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Timer; +import java.util.TimerTask; import java.util.concurrent.CancellationException; import java.util.logging.Level; import java.util.logging.Logger; @@ -1391,14 +1393,27 @@ public class ActionPanel extends JPanel implements SearchListener