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;
AbstractTokenMakerFactory atmf;
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();
String[] syntaxis = new String[] { "Simple2","Simple", "MyCustom", "PlainText" ,"WordTest"};
atmf = (AbstractTokenMakerFactory) TokenMakerFactory.getDefaultInstance();
for (String syn : syntaxis) {
atmf.putMapping("text/" + syn, "istlab.KisoJikken.Test." + syn + "TokenMaker");
}
textArea.setSyntaxEditingStyle("text/" + syntaxis[0]);
// 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 /*.java \ncomment // com\n https://www.istlab.info/ \n aaa /** asdf\n aaa \n */ \n aaa /* asdf\n aaa \n */ \n" +
"== コンパイル開始 ==\n> cd ~/NWP/src\n> javac -encoding UTF-8 j1/*.java\n==== end ===\n=== コンパイル終了 == (ALT+Wで閉じる)\n");
// textArea.setText("abc");
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");
for(String syn: syntaxis){
JButton javaB = new JButton(syn);
javaB.addActionListener(e -> {
textArea.setSyntaxEditingStyle("text/"+syn);
// 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);
});
}
}