Better language detection

This commit is contained in:
Nico Mexis 2022-01-03 22:51:00 +01:00
parent 54fc4e5e48
commit 347b6acf0f
No known key found for this signature in database
GPG key ID: 27D6E17CE092AB78
3 changed files with 22 additions and 9 deletions

View file

@ -3,13 +3,11 @@ package the.bytecode.club.bytecodeviewer.gui.resourceviewer.viewer;
import java.awt.BorderLayout; import java.awt.BorderLayout;
import java.awt.Font; import java.awt.Font;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.io.File;
import javax.swing.ImageIcon; import javax.swing.ImageIcon;
import javax.swing.JButton; import javax.swing.JButton;
import javax.swing.JLabel; import javax.swing.JLabel;
import javax.swing.JPanel; import javax.swing.JPanel;
import org.apache.commons.io.FilenameUtils; import org.apache.commons.io.FilenameUtils;
import org.fife.ui.rsyntaxtextarea.FileTypeUtil;
import org.imgscalr.Scalr; import org.imgscalr.Scalr;
import the.bytecode.club.bytecodeviewer.BytecodeViewer; import the.bytecode.club.bytecodeviewer.BytecodeViewer;
import the.bytecode.club.bytecodeviewer.Configuration; import the.bytecode.club.bytecodeviewer.Configuration;
@ -21,6 +19,7 @@ import the.bytecode.club.bytecodeviewer.resources.Resource;
import the.bytecode.club.bytecodeviewer.resources.ResourceContainer; import the.bytecode.club.bytecodeviewer.resources.ResourceContainer;
import the.bytecode.club.bytecodeviewer.resources.ResourceType; import the.bytecode.club.bytecodeviewer.resources.ResourceType;
import the.bytecode.club.bytecodeviewer.util.MiscUtils; import the.bytecode.club.bytecodeviewer.util.MiscUtils;
import the.bytecode.club.bytecodeviewer.util.SyntaxLanguage;
/*************************************************************************** /***************************************************************************
* Bytecode Viewer (BCV) - Java & Android Reverse Engineering Suite * * Bytecode Viewer (BCV) - Java & Android Reverse Engineering Suite *
@ -144,7 +143,7 @@ public class FileViewer extends ResourceViewer
} }
textArea.setCodeFoldingEnabled(true); textArea.setCodeFoldingEnabled(true);
textArea.setSyntaxEditingStyle(FileTypeUtil.get().guessContentType(new File(nameLowerCase))); SyntaxLanguage.setLanguage(textArea, nameLowerCase);
textArea.setText(contentsAsString); textArea.setText(contentsAsString);
textArea.setFont(new Font(Font.MONOSPACED, Font.PLAIN, (int) BytecodeViewer.viewer.fontSpinner.getValue())); textArea.setFont(new Font(Font.MONOSPACED, Font.PLAIN, (int) BytecodeViewer.viewer.fontSpinner.getValue()));
textArea.setCaretPosition(0); textArea.setCaretPosition(0);

View file

@ -15,7 +15,6 @@ import javax.swing.JPanel;
import me.konloch.kontainer.io.DiskReader; import me.konloch.kontainer.io.DiskReader;
import me.konloch.kontainer.io.DiskWriter; import me.konloch.kontainer.io.DiskWriter;
import org.apache.commons.compress.utils.FileNameUtils; import org.apache.commons.compress.utils.FileNameUtils;
import org.fife.ui.rsyntaxtextarea.FileTypeUtil;
import the.bytecode.club.bytecodeviewer.BytecodeViewer; import the.bytecode.club.bytecodeviewer.BytecodeViewer;
import the.bytecode.club.bytecodeviewer.Configuration; import the.bytecode.club.bytecodeviewer.Configuration;
import the.bytecode.club.bytecodeviewer.gui.components.FileChooser; import the.bytecode.club.bytecodeviewer.gui.components.FileChooser;
@ -27,6 +26,7 @@ import the.bytecode.club.bytecodeviewer.translation.components.TranslatedJMenu;
import the.bytecode.club.bytecodeviewer.translation.components.TranslatedJMenuItem; import the.bytecode.club.bytecodeviewer.translation.components.TranslatedJMenuItem;
import the.bytecode.club.bytecodeviewer.util.DialogUtils; import the.bytecode.club.bytecodeviewer.util.DialogUtils;
import the.bytecode.club.bytecodeviewer.util.MiscUtils; import the.bytecode.club.bytecodeviewer.util.MiscUtils;
import the.bytecode.club.bytecodeviewer.util.SyntaxLanguage;
import static the.bytecode.club.bytecodeviewer.Constants.fs; import static the.bytecode.club.bytecodeviewer.Constants.fs;
import static the.bytecode.club.bytecodeviewer.Constants.tempDirectory; import static the.bytecode.club.bytecodeviewer.Constants.tempDirectory;
@ -88,7 +88,7 @@ public class PluginWriter extends JFrame
area.setOnCtrlS(this::save); area.setOnCtrlS(this::save);
area.setText(content); area.setText(content);
area.setCaretPosition(0); area.setCaretPosition(0);
area.setSyntaxEditingStyle(FileTypeUtil.get().guessContentType(new File(pluginName))); SyntaxLanguage.setLanguage(area, pluginName);
content = null; content = null;
JButton run = new JButton("Run"); JButton run = new JButton("Run");

View file

@ -1,6 +1,9 @@
package the.bytecode.club.bytecodeviewer.util; package the.bytecode.club.bytecodeviewer.util;
import java.io.File;
import java.util.function.BiFunction; import java.util.function.BiFunction;
import org.fife.ui.rsyntaxtextarea.FileTypeUtil;
import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea;
import org.fife.ui.rsyntaxtextarea.SyntaxConstants; import org.fife.ui.rsyntaxtextarea.SyntaxConstants;
/*************************************************************************** /***************************************************************************
@ -23,11 +26,8 @@ import org.fife.ui.rsyntaxtextarea.SyntaxConstants;
/** /**
* @author ThexXTURBOXx * @author ThexXTURBOXx
* @deprecated See {@link org.fife.ui.rsyntaxtextarea.FileTypeUtil#guessContentType(java.io.File)}
*/ */
@Deprecated public enum SyntaxLanguage {
public enum SyntaxLanguage
{
XML(SyntaxConstants.SYNTAX_STYLE_XML, XML(SyntaxConstants.SYNTAX_STYLE_XML,
(n, c) -> n.endsWith(".xml") || c.startsWith("<?xml") || c.startsWith("<xml")), (n, c) -> n.endsWith(".xml") || c.startsWith("<?xml") || c.startsWith("<xml")),
PYTHON(SyntaxConstants.SYNTAX_STYLE_PYTHON, (n, c) -> n.endsWith(".py") || n.endsWith(".python")), PYTHON(SyntaxConstants.SYNTAX_STYLE_PYTHON, (n, c) -> n.endsWith(".py") || n.endsWith(".python")),
@ -69,6 +69,8 @@ public enum SyntaxLanguage
public static final SyntaxLanguage[] VALUES = values(); public static final SyntaxLanguage[] VALUES = values();
private static final FileTypeUtil FILE_TYPE_UTIL = FileTypeUtil.get();
private final BiFunction<String, String, Boolean> criteria; private final BiFunction<String, String, Boolean> criteria;
private final String syntaxConstant; private final String syntaxConstant;
@ -86,6 +88,10 @@ public enum SyntaxLanguage
return syntaxConstant; return syntaxConstant;
} }
/**
* @deprecated See {@link #setLanguage(String, RSyntaxTextArea)}.
*/
@Deprecated
public static SyntaxLanguage detectLanguage(String fileName, String content) { public static SyntaxLanguage detectLanguage(String fileName, String content) {
for (SyntaxLanguage lang : VALUES) { for (SyntaxLanguage lang : VALUES) {
if (lang.isLanguage(fileName, content)) { if (lang.isLanguage(fileName, content)) {
@ -94,4 +100,12 @@ public enum SyntaxLanguage
} }
return NONE; return NONE;
} }
public static void setLanguage(RSyntaxTextArea area, String fileName) {
String type = FILE_TYPE_UTIL.guessContentType(new File(fileName));
if (type == null || type.equals(SyntaxConstants.SYNTAX_STYLE_NONE)) {
type = FILE_TYPE_UTIL.guessContentType(area);
}
area.setSyntaxEditingStyle(type);
}
} }