package istlab.KisoJikken.Test;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.plaf.FontUIResource;
import org.fife.ui.rsyntaxtextarea.AbstractTokenMakerFactory;
import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea;
import org.fife.ui.rsyntaxtextarea.SyntaxScheme;
import org.fife.ui.rsyntaxtextarea.Token;
import org.fife.ui.rsyntaxtextarea.TokenMakerFactory;
import org.fife.ui.rtextarea.RTextScrollPane;
import org.mdkt.compiler.InMemoryJavaCompiler;
public class StyleTestDemo extends JFrame {
RSyntaxTextArea textArea;
public StyleTestDemo() {
JPanel contentPane = new JPanel(new BorderLayout());
// RSyntaxDocument doc = new RSyntaxDocument();
// TokenMaker tokenMaker = new PlainTextTokenMaker();
// TokenMaker tokenMaker = new SimpleTokenMaker();
// doc.setSyntaxStyle(tokenMaker);
textArea = new RSyntaxTextArea();
AbstractTokenMakerFactory atmf = (AbstractTokenMakerFactory)TokenMakerFactory.getDefaultInstance();
atmf.putMapping("text/terminal", "istlab.KisoJikken.Test.SimpleTokenMaker");
atmf.putMapping("text/custom", "istlab.KisoJikken.Test.MyCustomTokenMaker");
textArea.setSyntaxEditingStyle("text/terminal");
// textArea.setCurrentLineHighlightColor(null); // カーソル行のハイライト色
textArea.setHighlightCurrentLine(false); // カーソル行のハイライトを消す
// textArea.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_NONE);
SyntaxScheme scheme = textArea.getSyntaxScheme();
scheme.getStyle(Token.COMMENT_EOL).background = Color.cyan;
scheme.getStyle(Token.COMMENT_DOCUMENTATION).background = Color.cyan.brighter();
scheme.getStyle(Token.COMMENT_KEYWORD).background = Color.green;
scheme.getStyle(Token.COMMENT_MARKUP).background = Color.gray;
scheme.getStyle(Token.COMMENT_MULTILINE).background = Color.yellow;
textArea.setText("initial text\ncomment // com");
textArea.revalidate();
// textArea.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_NONE);
textArea.setCodeFoldingEnabled(true);
textArea.setFont(new FontUIResource("sansserif", Font.PLAIN, 20));
contentPane.add(new RTextScrollPane(textArea,false)); // 行番号を消す
setContentPane(contentPane);
setTitle("MySyntax Demo");
setDefaultCloseOperation(EXIT_ON_CLOSE);
JPanel north = new JPanel();
JButton loadB = new JButton("Load");
loadB.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
InputStream is = getClass().getResourceAsStream("/Hello.java");
BufferedReader br = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
String line;
try {
while((line=br.readLine())!=null){
sb.append(line+"\n");
}
} catch (IOException e1) {
e1.printStackTrace();
}
textArea.setText(sb.toString());
}
});
north.add(loadB);
JButton saveB = new JButton("Save");
saveB.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println(textArea.getText());
}
});
north.add(saveB);
JButton execB = new JButton("Exec");
execB.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Class<?> helloClass;
try {
helloClass = InMemoryJavaCompiler.newInstance().compile("Hello", textArea.getText());
System.out.println(helloClass.getClass().getName());
System.out.println(helloClass.getDeclaredConstructor().newInstance().toString());
} catch (Exception e1) {
e1.printStackTrace();
}
}
});
north.add(execB);
// JOptionPane.showMessageDialog(null, "test");
// JButton javaB = new JButton("Java");
// javaB.addActionListener(e -> {
// doc.setSyntaxStyle(new JavaTokenMaker());
// textArea.setSyntaxEditingStyle("text/c");
// // doc.setSyntaxStyle("text/java");
// // textArea.setDocument(doc);
// } );
// north.add(javaB);
// JButton plainB = new JButton("Plain");
// javaB.addActionListener(e -> {
// doc.setSyntaxStyle(new PlainTextTokenMaker());
// textArea.setSyntaxEditingStyle("text/plain");
// // doc.setSyntaxStyle("text/plain");
// // textArea.setDocument(doc);
// } );
// north.add(plainB);
add(north, BorderLayout.NORTH);
pack();
setLocationRelativeTo(null);
}
public static void main(String[] args) {
// Instantiate GUI on the EDT.
SwingUtilities.invokeLater(() -> {
try {
String laf = UIManager.getSystemLookAndFeelClassName();
UIManager.setLookAndFeel(laf);
} catch (Exception e) {
/* Never happens */ }
new StyleTestDemo().setVisible(true);
});
}
}