Newer
Older
SyntaxEditor / StyleTestDemo.java
package info.istlab.SyntaxEditor;

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.JScrollPane;
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;

public class StyleTestDemo extends JFrame {

   RSyntaxTextArea textArea;
   AbstractTokenMakerFactory atmf;

   public StyleTestDemo() {

      // JPanel contentPane = new JPanel(new BorderLayout());
      textArea = new RSyntaxTextArea();

      String[] syntaxis = new String[] { "My"};
      atmf = (AbstractTokenMakerFactory) TokenMakerFactory.getDefaultInstance();
      for (String syn : syntaxis) {
         atmf.putMapping("text/" + syn, "info.istlab.SyntaxEditor." + 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)); // 行番号を消す

      // 画面部品(component)の組みたて
      JScrollPane scrollPane = new JScrollPane(textArea);
      getContentPane().add(scrollPane, BorderLayout.CENTER);
      setTitle("MySyntax Demo");
      setDefaultCloseOperation(EXIT_ON_CLOSE); //ウィンドウのXを押したらプログラムを終了する

      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(e -> new InMemJavaC(textArea.getText()));
      north.add(execB);

      for(String syn: syntaxis){
         JButton javaB = new JButton(syn);
         javaB.addActionListener(e -> {
            textArea.setSyntaxEditingStyle("text/"+syn);
         });
         north.add(javaB);
      }

      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);
      });
   }
}