Newer
Older
KisoJikkenNWP / src / main / java / istlab / KisoJikken / Test / StyleTestDemo.java
@motoki miura motoki miura on 5 Nov 2022 5 KB test
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");
      atmf.putMapping("text/plain", "istlab.KisoJikken.Test.PlainTextTokenMaker");
      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\n  https://www.istlab.info/  ");
      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);
      });
   }

}