diff --git a/.gitignore b/.gitignore index 6b6c070..8a4130b 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,5 @@ *.jar *.class -*.lst \ No newline at end of file +*.lst +*~ \ No newline at end of file diff --git a/pom.xml b/pom.xml index 673a1b4..3bf1bde 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ istlab.KisoJikkenNWP KisoJikkenNWP jar - 0.71 + 0.72 KisoJikkenNWP http://maven.apache.org diff --git a/src/main/java/istlab/KisoJikken/CommandRunner.java b/src/main/java/istlab/KisoJikken/CommandRunner.java index a7d5313..b35bd3b 100644 --- a/src/main/java/istlab/KisoJikken/CommandRunner.java +++ b/src/main/java/istlab/KisoJikken/CommandRunner.java @@ -6,6 +6,8 @@ import java.util.List; public class CommandRunner implements Runnable { + public static String prompt = "> "; + String command; Thread thread; @@ -51,13 +53,13 @@ processBuilder.directory(new File(workingDir)); // processBuilder.inheritIO(); JTAConsole con = new JTAConsole("(Exec) " + command); - con.Systemoutprintln("== 実行開始 =="); + con.Systemoutprintln("=== 実行開始 ==="); if (workingDir.equals(App.userhome + App.nwpsrc)) { - con.Systemoutprintln("> cd ~" + App.nwpsrc); + con.Systemoutprintln(prompt+"cd ~" + App.nwpsrc); } else { - con.Systemoutprintln("> cd " + workingDir); + con.Systemoutprintln(prompt+"cd " + workingDir); } - con.Systemoutprintln("> " + command); + con.Systemoutprintln(prompt + command); try { process = processBuilder.start(); @@ -74,7 +76,7 @@ } catch (IOException | InterruptedException e1) { e1.printStackTrace(); } - con.Systemoutprintln("== 終了 == (ALT+Wで閉じる)"); + con.Systemoutprintln("=== 終了 === (ALT+Wで閉じる)"); thread = null; // runB.setText("Run"); diff --git a/src/main/java/istlab/KisoJikken/Editor.java b/src/main/java/istlab/KisoJikken/Editor.java index 50dff41..1860dd5 100644 --- a/src/main/java/istlab/KisoJikken/Editor.java +++ b/src/main/java/istlab/KisoJikken/Editor.java @@ -53,6 +53,7 @@ file = f; textArea = new RSyntaxTextArea(20, 40); + // textArea.setSyntaxScheme(new SyntaxScheme(true)); textArea.setFont(new FontUIResource("sansserif", Font.PLAIN, 16)); getContentPane().add(new RTextScrollPane(textArea)); textArea.addKeyListener(this); diff --git a/src/main/java/istlab/KisoJikken/JCompiler.java b/src/main/java/istlab/KisoJikken/JCompiler.java index 21deb44..b58c4b1 100644 --- a/src/main/java/istlab/KisoJikken/JCompiler.java +++ b/src/main/java/istlab/KisoJikken/JCompiler.java @@ -39,10 +39,10 @@ processBuilder.redirectErrorStream(true); JTAConsole con = new JTAConsole("(Compile) javac "+pkgname+"/*.java"); con.setMainSrcByFileName(absolutePath); - con.Systemoutprintln("== コンパイル開始 =="); + con.Systemoutprintln("=== コンパイル開始 ==="); - con.Systemoutprintln("> cd ~" + App.nwpsrc); - con.Systemoutprintln("> javac -encoding UTF-8 " + pkgname + "/*.java"); + con.Systemoutprintln(CommandRunner.prompt+"cd ~" + App.nwpsrc); + con.Systemoutprintln(CommandRunner.prompt+"javac -encoding UTF-8 " + pkgname + "/*.java"); // ProcessBuilder processBuilder = new ProcessBuilder("pwd"); processBuilder.directory(new File(App.userhome + App.nwpsrc)); // processBuilder.inheritIO(); @@ -60,7 +60,7 @@ } catch (IOException | InterruptedException e1) { e1.printStackTrace(); } - con.Systemoutprintln("== コンパイル終了 == (ALT+Wで閉じる)"); + con.Systemoutprintln("=== コンパイル終了 === (ALT+Wで閉じる)"); thread = null; } } diff --git a/src/main/java/istlab/KisoJikken/JExecutor.java b/src/main/java/istlab/KisoJikken/JExecutor.java index cf4958b..fe8f631 100644 --- a/src/main/java/istlab/KisoJikken/JExecutor.java +++ b/src/main/java/istlab/KisoJikken/JExecutor.java @@ -52,9 +52,9 @@ processBuilder.redirectErrorStream(true); JTAConsole con = new JTAConsole("(Exec) java " + pkgname + "." + javafname + " " + commandLineOption); con.setMainSrcByFileName(absolutePath); - con.Systemoutprintln("== 実行開始 =="); - con.Systemoutprintln("> cd ~" + App.nwpsrc); - con.Systemoutprintln("> java " + pkgname + "." + javafname + " " + commandLineOption); + con.Systemoutprintln("=== 実行開始 ==="); + con.Systemoutprintln(CommandRunner.prompt+"cd ~" + App.nwpsrc); + con.Systemoutprintln(CommandRunner.prompt+"java " + pkgname + "." + javafname + " " + commandLineOption); // ProcessBuilder processBuilder = new ProcessBuilder("pwd"); processBuilder.directory(new File(App.userhome + App.nwpsrc)); // processBuilder.inheritIO(); @@ -68,7 +68,7 @@ e1.printStackTrace(); } - con.Systemoutprintln("== 実行終了 == (ALT+Wで閉じる)"); + con.Systemoutprintln("=== 実行終了 === (ALT+Wで閉じる)"); thread = null; } } diff --git a/src/main/java/istlab/KisoJikken/Launcher.java b/src/main/java/istlab/KisoJikken/Launcher.java index 83dda0c..2c1f392 100644 --- a/src/main/java/istlab/KisoJikken/Launcher.java +++ b/src/main/java/istlab/KisoJikken/Launcher.java @@ -29,7 +29,7 @@ public class Launcher extends JFrame implements MouseInputListener, KeyListener { public static Launcher theapp; - public static String version = "0.71"; + public static String version = "0.72"; // JPanel mainP; File root; JTree tree; diff --git a/src/main/java/istlab/KisoJikken/MyRSJTextArea.java b/src/main/java/istlab/KisoJikken/MyRSJTextArea.java index 5fdbdb1..52de34c 100644 --- a/src/main/java/istlab/KisoJikken/MyRSJTextArea.java +++ b/src/main/java/istlab/KisoJikken/MyRSJTextArea.java @@ -6,36 +6,63 @@ import javax.swing.JPopupMenu; import javax.swing.plaf.FontUIResource; +import org.fife.ui.rsyntaxtextarea.AbstractTokenMakerFactory; import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea; import org.fife.ui.rsyntaxtextarea.Style; -import org.fife.ui.rsyntaxtextarea.SyntaxConstants; import org.fife.ui.rsyntaxtextarea.SyntaxScheme; import org.fife.ui.rsyntaxtextarea.Token; +import org.fife.ui.rsyntaxtextarea.TokenMakerFactory; public class MyRSJTextArea extends RSyntaxTextArea { - public MyRSJTextArea(){ - setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_JAVA); + AbstractTokenMakerFactory atmf; + + public MyRSJTextArea() { + String syn = "Simple2"; + if (true) { + atmf = (AbstractTokenMakerFactory) TokenMakerFactory.getDefaultInstance(); + atmf.putMapping(syn, "istlab.KisoJikken.Test." + syn + "TokenMaker"); + } + setSyntaxEditingStyle(syn); setFont(new FontUIResource("sansserif", Font.PLAIN, 14)); - SyntaxScheme scheme = getSyntaxScheme(); + // SyntaxScheme scheme = getSyntaxScheme(); + SyntaxScheme scheme = new SyntaxScheme(false); // for(Style s : scheme.getStyles()){ - // System.out.println(s); + // System.out.println(s); // } Style baseStyle = new Style(Color.black); - for(int i=0;i<39;i++) scheme.setStyle(i, baseStyle); - Style commentStyle = new Style(new Color(0,128,0), new Color(255,255,0x66), new Font("SansSerif", Font.ITALIC, 14)); - Style commentStyle2 = new Style(new Color(0,128,0), new Color(0xcc,255,255), new Font("SansSerif", Font.ITALIC, 14)); - Style commentStyle3 = new Style(new Color(0xcc,0x00,0xcc), new Color(0xff,0xcc,0xff), new Font("SansSerif", Font.ITALIC, 14)); - int[] comlist = new int[]{Token.COMMENT_EOL, Token.COMMENT_KEYWORD, Token.COMMENT_MARKUP}; - for(int c: comlist) scheme.setStyle(c, commentStyle); - int[] comlist2 = new int[]{Token.COMMENT_MULTILINE}; - for(int c: comlist2) scheme.setStyle(c, commentStyle2); - int[] comlist3 = new int[]{Token.COMMENT_DOCUMENTATION}; - for(int c: comlist3) scheme.setStyle(c, commentStyle3); + for (int i = 0; i < 39; i++) + scheme.setStyle(i, baseStyle); + Style commentStyle = new Style(new Color(0, 128, 0), new Color(255, 255, 0x66), + new Font("SansSerif", Font.ITALIC, 14)); + Style commentStyle2 = new Style(new Color(0, 128, 0), new Color(0xcc, 255, 255), + new Font("SansSerif", Font.ITALIC, 14)); + Style commentStyle3 = new Style(new Color(0xcc, 0x00, 0xcc), new Color(0xff, 0xcc, 0xff), + new Font("SansSerif", Font.ITALIC, 14)); + Style commentStyle4 = new Style(new Color(0x33, 0x88, 0xcc), new Color(0xee, 0xee, 0xee), + new Font(Font.MONOSPACED, Font.PLAIN, 14)); + int[] comlist = new int[] { Token.COMMENT_EOL, Token.COMMENT_KEYWORD, Token.COMMENT_MARKUP }; + for (int c : comlist){ + scheme.setStyle(c, commentStyle); + } + int[] comlist2 = new int[] { Token.COMMENT_MULTILINE }; + for (int c : comlist2){ + scheme.setStyle(c, commentStyle2); + } + int[] comlist3 = new int[] { Token.COMMENT_DOCUMENTATION }; + for (int c : comlist3){ + scheme.setStyle(c, commentStyle3); + } + int[] comlist4 = new int[] { Token.ANNOTATION }; + for (int c : comlist4){ + scheme.setStyle(c, commentStyle4); + } + setSyntaxScheme(scheme); // scheme.getStyle(Token.COMMENT_EOL).background = Color.cyan; - // scheme.getStyle(Token.COMMENT_DOCUMENTATION).background = Color.cyan.brighter(); + // 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; @@ -51,17 +78,18 @@ // scheme.getStyle(Token.DATA_TYPE).foreground = Color.black; // scheme.getStyle(Token.ERROR_CHAR).foreground = Color.black; // scheme.getStyle(Token.LITERAL_CHAR).foreground = Color.black; - + setHighlightCurrentLine(false); // カーソル行のハイライトを消す setCodeFoldingEnabled(true); - + } @Override - protected void configurePopupMenu(JPopupMenu popupMenu){ + protected void configurePopupMenu(JPopupMenu popupMenu) { } + @Override - protected JPopupMenu createPopupMenu(){ + protected JPopupMenu createPopupMenu() { return null; } diff --git a/src/main/java/istlab/KisoJikken/ScriptRunner.java b/src/main/java/istlab/KisoJikken/ScriptRunner.java index c9dc7b6..2caca45 100644 --- a/src/main/java/istlab/KisoJikken/ScriptRunner.java +++ b/src/main/java/istlab/KisoJikken/ScriptRunner.java @@ -39,9 +39,9 @@ // processBuilder.inheritIO(); JTAConsole con = new JTAConsole("(Exec) " + scriptfile); con.setMainSrcByFileName(scriptfile); - con.Systemoutprintln("== 実行開始 =="); - con.Systemoutprintln("> cd ~" + App.nwpsrc); - con.Systemoutprintln("> "+scriptfile); + con.Systemoutprintln("=== 実行開始 ==="); + con.Systemoutprintln(CommandRunner.prompt+"cd ~" + App.nwpsrc); + con.Systemoutprintln(CommandRunner.prompt+scriptfile); try { process = processBuilder.start(); @@ -58,7 +58,7 @@ } catch (IOException | InterruptedException e1) { e1.printStackTrace(); } - con.Systemoutprintln("== 終了 == (ALT+Wで閉じる)"); + con.Systemoutprintln("=== 終了 === (ALT+Wで閉じる)"); thread = null; runB.setText("Run"); } diff --git a/src/main/java/istlab/KisoJikken/Test/AfterRewrite.php b/src/main/java/istlab/KisoJikken/Test/AfterRewrite.php new file mode 100755 index 0000000..f21412a --- /dev/null +++ b/src/main/java/istlab/KisoJikken/Test/AfterRewrite.php @@ -0,0 +1,43 @@ +#!/usr/bin/env php + 1) { + $line = str_replace("yyreset", "yyreset_GOMI", $line); + } + $out .= $line; + } else if (preg_match("/private boolean zzRefill\(/", $line)) { + $count_zzRefill++; + if ($count_zzRefill > 1) { + $line = str_replace("zzRefill", "zzRefill_GOMI", $line); + } + $out .= $line; + } else if (preg_match("/Character\.charCount\(zzInput\)/", $line)){ + $out .= "// ".$line; + } else if (preg_match("/if\ \(eof\)/", $line)){ + $passCheckpoint++; + $out .= $line; + } else { + if (preg_match("/zzInput = Character\.codePointAt\(zzBufferL\,\ zzCurrentPosL\,\ zzEndReadL\)/", $line)) { + $out .= " zzInput = zzBufferL[zzCurrentPosL++]; \n"; + } else { + $out .= $line; + } + } +} + +// もとのファイルに書き出し +// echo $out; +file_put_contents($argv[1], $out); +echo "Overwrote to {$argv[1]} .\n"; diff --git a/src/main/java/istlab/KisoJikken/Test/PlainCommentTokenMaker.java b/src/main/java/istlab/KisoJikken/Test/PlainCommentTokenMaker.java new file mode 100644 index 0000000..f2d7392 --- /dev/null +++ b/src/main/java/istlab/KisoJikken/Test/PlainCommentTokenMaker.java @@ -0,0 +1,1001 @@ +// DO NOT EDIT +// Generated by JFlex 1.8.2 http://jflex.de/ +// source: plaincomment.flex + +/* + * 11/07/2008 + * + * PlainTextTokenMaker.flex - Scanner for plain text files. + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. + * + * https://github.com/bobbylight/RSyntaxTextArea/wiki/Adding-Syntax-Highlighting-for-a-new-Language + * There are two zzRefill() and yyreset() methods + * You need to delete the second of each definition (the ones generated by the lexer) + * 後の2つを消す + * zzInput = zzBufferL[zzCurrentPosL++]; + */ +package istlab.KisoJikken.Test; +//package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * Scanner for plain text files. + * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker), so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

+ * + * The actual algorithm generated for scanning has, of course, not been + * modified.

+ * + * If you wish to regenerate this file yourself, keep in mind the following: + *

+ * + * @author Robert Futrell + * @version 0.5 + * + */ + +// See https://github.com/jflex-de/jflex/issues/222 +@SuppressWarnings("FallThrough") +public class PlainCommentTokenMaker extends AbstractJFlexCTokenMaker { + + /** This character denotes the end of file. */ + public static final int YYEOF = -1; + + /** Initial size of the lookahead buffer. */ + private static final int ZZ_BUFFERSIZE = 16384; + + // Lexical states. + public static final int YYINITIAL = 0; + public static final int MLC = 2; + public static final int DOCCOMMENT = 4; + public static final int EOL_COMMENT = 6; + public static final int TEXT_BLOCK = 8; + + /** + * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l + * ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l + * at the beginning of a line + * l is of the form l = 2*k, k a non negative integer + */ + private static final int ZZ_LEXSTATE[] = { + 0, 0, 1, 1, 2, 2, 3, 3, 4, 4 + }; + + /** + * Top-level table for translating characters to character classes + */ + private static final int [] ZZ_CMAP_TOP = zzUnpackcmap_top(); + + private static final String ZZ_CMAP_TOP_PACKED_0 = + "\1\0\37\u0100\1\u0200\267\u0100\10\u0300\u1020\u0100"; + + private static int [] zzUnpackcmap_top() { + int [] result = new int[4352]; + int offset = 0; + offset = zzUnpackcmap_top(ZZ_CMAP_TOP_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackcmap_top(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); + } + return j; + } + + + /** + * Second-level tables for translating characters to character classes + */ + private static final int [] ZZ_CMAP_BLOCKS = zzUnpackcmap_blocks(); + + private static final String ZZ_CMAP_BLOCKS_PACKED_0 = + "\11\0\1\1\1\2\3\3\22\0\1\1\1\0\1\4"+ + "\7\0\1\5\4\0\1\6\12\7\2\0\1\10\1\0"+ + "\1\11\1\0\1\12\32\13\1\0\1\14\4\0\5\13"+ + "\1\15\1\13\1\15\16\13\1\15\3\13\1\12\11\0"+ + "\1\3\u01a2\0\2\3\326\0\u0100\3"; + + private static int [] zzUnpackcmap_blocks() { + int [] result = new int[1024]; + int offset = 0; + offset = zzUnpackcmap_blocks(ZZ_CMAP_BLOCKS_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackcmap_blocks(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); + } + return j; + } + + /** + * Translates DFA states to action switch labels. + */ + private static final int [] ZZ_ACTION = zzUnpackAction(); + + private static final String ZZ_ACTION_PACKED_0 = + "\4\0\1\1\1\2\1\3\1\4\2\2\1\1\1\5"+ + "\3\1\1\6\3\1\1\7\1\1\1\10\1\1\1\11"+ + "\1\12\1\13\1\14\1\15\1\0\1\16\2\0\1\11"+ + "\1\17\1\20\1\21"; + + private static int [] zzUnpackAction() { + int [] result = new int[36]; + int offset = 0; + offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAction(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); + } + return j; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\16\0\34\0\52\0\70\0\106\0\124\0\106"+ + "\0\142\0\160\0\176\0\106\0\214\0\106\0\232\0\106"+ + "\0\250\0\266\0\304\0\106\0\322\0\106\0\340\0\356"+ + "\0\374\0\106\0\106\0\106\0\u010a\0\106\0\u0118\0\u0126"+ + "\0\106\0\u0134\0\106\0\106"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[36]; + int offset = 0; + offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackRowMap(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int high = packed.charAt(i++) << 16; + result[j++] = high | packed.charAt(i++); + } + return j; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\1\6\1\7\1\10\3\6\1\11\1\12\3\6\1\12"+ + "\1\6\1\12\2\13\1\14\2\13\1\15\7\13\1\16"+ + "\2\17\1\20\2\17\1\21\2\17\1\22\1\17\1\16"+ + "\2\17\1\16\2\23\1\24\12\23\1\16\2\25\1\26"+ + "\1\25\1\27\7\25\1\30\1\25\17\0\1\7\21\0"+ + "\1\31\1\32\16\0\1\12\3\0\1\12\1\0\1\12"+ + "\2\13\1\0\2\13\1\0\7\13\7\0\1\33\7\0"+ + "\2\17\1\0\2\17\1\0\2\17\1\0\1\17\1\0"+ + "\2\17\7\0\1\34\15\0\1\35\2\0\1\36\1\0"+ + "\1\37\1\0\1\37\2\23\1\0\12\23\1\0\2\25"+ + "\1\0\1\25\1\0\7\25\1\0\1\25\4\0\1\40"+ + "\11\0\2\41\2\0\12\41\5\0\1\42\21\0\1\36"+ + "\1\0\1\37\1\0\12\37\1\36\4\37\4\0\1\43"+ + "\17\0\1\44\7\0"; + + private static int [] zzUnpackTrans() { + int [] result = new int[322]; + int offset = 0; + offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackTrans(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + value--; + do result[j++] = value; while (--count > 0); + } + return j; + } + + + /** Error code for "Unknown internal scanner error". */ + private static final int ZZ_UNKNOWN_ERROR = 0; + /** Error code for "could not match input". */ + private static final int ZZ_NO_MATCH = 1; + /** Error code for "pushback value was too large". */ + private static final int ZZ_PUSHBACK_2BIG = 2; + + /** + * Error messages for {@link #ZZ_UNKNOWN_ERROR}, {@link #ZZ_NO_MATCH}, and + * {@link #ZZ_PUSHBACK_2BIG} respectively. + */ + private static final String ZZ_ERROR_MSG[] = { + "Unknown internal scanner error", + "Error: could not match input", + "Error: pushback value was too large" + }; + + /** + * ZZ_ATTRIBUTE[aState] contains the attributes of state {@code aState} + */ + private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); + + private static final String ZZ_ATTRIBUTE_PACKED_0 = + "\4\0\1\1\1\11\1\1\1\11\3\1\1\11\1\1"+ + "\1\11\1\1\1\11\3\1\1\11\1\1\1\11\3\1"+ + "\3\11\1\0\1\11\2\0\1\11\1\1\2\11"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[36]; + int offset = 0; + offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAttribute(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); + } + return j; + } + + /** Input device. */ + private java.io.Reader zzReader; + + /** Current state of the DFA. */ + private int zzState; + + /** Current lexical state. */ + private int zzLexicalState = YYINITIAL; + + /** + * This buffer contains the current text to be matched and is the source of the {@link #yytext()} + * string. + */ + private char zzBuffer[] = new char[ZZ_BUFFERSIZE]; + + /** Text position at the last accepting state. */ + private int zzMarkedPos; + + /** Current text position in the buffer. */ + private int zzCurrentPos; + + /** Marks the beginning of the {@link #yytext()} string in the buffer. */ + private int zzStartRead; + + /** Marks the last character in the buffer, that has been read from input. */ + private int zzEndRead; + + /** + * Whether the scanner is at the end of file. + * @see #yyatEOF + */ + private boolean zzAtEOF; + + /** + * The number of occupied positions in {@link #zzBuffer} beyond {@link #zzEndRead}. + * + *

When a lead/high surrogate has been read from the input stream into the final + * {@link #zzBuffer} position, this will have a value of 1; otherwise, it will have a value of 0. + */ + private int zzFinalHighSurrogate = 0; + + /** Number of newlines encountered up to the start of the matched text. */ + @SuppressWarnings("unused") + private int yyline; + + /** Number of characters from the last newline up to the start of the matched text. */ + @SuppressWarnings("unused") + private int yycolumn; + + /** Number of characters up to the start of the matched text. */ + @SuppressWarnings("unused") + private long yychar; + + /** Whether the scanner is currently at the beginning of a line. */ + @SuppressWarnings("unused") + private boolean zzAtBOL = true; + + /** Whether the user-EOF-code has already been executed. */ + @SuppressWarnings("unused") + private boolean zzEOFDone; + + /* user code: */ + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public PlainCommentTokenMaker() { + } + + /** + * Always returns TokenTypes.NULL, as there are no multiline + * tokens in properties files. + * + * @param text The line of tokens to examine. + * @param initialTokenType The token type to start with (i.e., the value + * of getLastTokenTypeOnLine for the line before + * text). + * @return TokenTypes.NULL. + */ + public int getLastTokenTypeOnLine(Segment text, int initialTokenType) { + return TokenTypes.NULL; + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @param link Whether this token is a hyperlink. + */ + private void addToken(int tokenType, boolean link) { + int so = zzStartRead + offsetShift; + super.addToken(zzBuffer, zzStartRead,zzMarkedPos-1, tokenType, so, link); + zzStartRead = zzMarkedPos; + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addHyperlinkToken(int, int, int) + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, false); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + * @param hyperlink Whether this token is a hyperlink. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset, boolean hyperlink) { + super.addToken(array, start,end, tokenType, startOffset, hyperlink); + zzStartRead = zzMarkedPos; + } + + + /** + * Returns the text to place at the beginning and end of a + * line to "comment" it in a this programming language. + * + * @return null, as there are no comments in plain text. + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "//", null }; + } + + + /** + * Always returns false, as you never want "mark occurrences" + * working in plain text files. + * + * @param type The token type. + * @return Whether tokens of this type should have "mark occurrences" + * enabled. + */ + @Override + public boolean getMarkOccurrencesOfTokenType(int type) { + return false; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + s = text; + try { + yyreset(zzReader); + yybegin(YYINITIAL); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * Resets the scanner to read from a new input stream. + * Does not close the old reader. + * + * All internal variables are reset, the old input stream + * cannot be reused (internal buffer is discarded and lost). + * Lexical state is set to YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(java.io.Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + // zzAtBOL = true; + zzAtEOF = false; + } + + + + /** + * Creates a new scanner + * + * @param in the java.io.Reader to read input from. + */ + public PlainCommentTokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Translates raw input code points to DFA table row + */ + private static int zzCMap(int input) { + int offset = input & 255; + return offset == input ? ZZ_CMAP_BLOCKS[offset] : ZZ_CMAP_BLOCKS[ZZ_CMAP_TOP[input >> 8] | offset]; + } + + /** + * Refills the input buffer. + * + * @return {@code false} iff there was new input. + * @exception java.io.IOException if any I/O-Error occurs + */ + private boolean zzRefill_GOMI() throws java.io.IOException { + + /* first: make room (if you can) */ + if (zzStartRead > 0) { + zzEndRead += zzFinalHighSurrogate; + zzFinalHighSurrogate = 0; + System.arraycopy(zzBuffer, zzStartRead, + zzBuffer, 0, + zzEndRead - zzStartRead); + + /* translate stored positions */ + zzEndRead -= zzStartRead; + zzCurrentPos -= zzStartRead; + zzMarkedPos -= zzStartRead; + zzStartRead = 0; + } + + /* is the buffer big enough? */ + if (zzCurrentPos >= zzBuffer.length - zzFinalHighSurrogate) { + /* if not: blow it up */ + char newBuffer[] = new char[zzBuffer.length * 2]; + System.arraycopy(zzBuffer, 0, newBuffer, 0, zzBuffer.length); + zzBuffer = newBuffer; + zzEndRead += zzFinalHighSurrogate; + zzFinalHighSurrogate = 0; + } + + /* fill the buffer with new input */ + int requested = zzBuffer.length - zzEndRead; + int numRead = zzReader.read(zzBuffer, zzEndRead, requested); + + /* not supposed to occur according to specification of java.io.Reader */ + if (numRead == 0) { + throw new java.io.IOException( + "Reader returned 0 characters. See JFlex examples/zero-reader for a workaround."); + } + if (numRead > 0) { + zzEndRead += numRead; + if (Character.isHighSurrogate(zzBuffer[zzEndRead - 1])) { + if (numRead == requested) { // We requested too few chars to encode a full Unicode character + --zzEndRead; + zzFinalHighSurrogate = 1; + } else { // There is room in the buffer for at least one more char + int c = zzReader.read(); // Expecting to read a paired low surrogate char + if (c == -1) { + return true; + } else { + zzBuffer[zzEndRead++] = (char)c; + } + } + } + /* potentially more input available */ + return false; + } + + /* numRead < 0 ==> end of stream */ + return true; + } + + + /** + * Closes the input reader. + * + * @throws java.io.IOException if the reader could not be closed. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; // indicate end of file + zzEndRead = zzStartRead; // invalidate buffer + + if (zzReader != null) { + zzReader.close(); + } + } + + + /** + * Resets the scanner to read from a new input stream. + * + *

Does not close the old reader. + * + *

All internal variables are reset, the old input stream cannot be reused (internal + * buffer is discarded and lost). Lexical state is set to {@code ZZ_INITIAL}. + * + *

Internal scan buffer is resized down to its initial length, if it has grown. + * + * @param reader The new input stream. + */ + public final void yyreset_GOMI(java.io.Reader reader) { + zzReader = reader; + zzEOFDone = false; + yyResetPosition(); + zzLexicalState = YYINITIAL; + if (zzBuffer.length > ZZ_BUFFERSIZE) { + zzBuffer = new char[ZZ_BUFFERSIZE]; + } + } + + /** + * Resets the input position. + */ + private final void yyResetPosition() { + zzAtBOL = true; + zzAtEOF = false; + zzCurrentPos = 0; + zzMarkedPos = 0; + zzStartRead = 0; + zzEndRead = 0; + zzFinalHighSurrogate = 0; + yyline = 0; + yycolumn = 0; + yychar = 0L; + } + + + /** + * Returns whether the scanner has reached the end of the reader it reads from. + * + * @return whether the scanner has reached EOF. + */ + public final boolean yyatEOF() { + return zzAtEOF; + } + + + /** + * Returns the current lexical state. + * + * @return the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state. + * + * @param newState the new lexical state + */ + public final void yybegin(int newState) { + zzLexicalState = newState; + } + + + /** + * Returns the text matched by the current regular expression. + * + * @return the matched text. + */ + public final String yytext() { + return new String(zzBuffer, zzStartRead, zzMarkedPos-zzStartRead); + } + + + /** + * Returns the character at the given position from the matched text. + * + *

It is equivalent to {@code yytext().charAt(pos)}, but faster. + * + * @param position the position of the character to fetch. A value from 0 to {@code yylength()-1}. + * + * @return the character at {@code position}. + */ + public final char yycharat(int position) { + return zzBuffer[zzStartRead + position]; + } + + + /** + * How many characters were matched. + * + * @return the length of the matched text region. + */ + public final int yylength() { + return zzMarkedPos-zzStartRead; + } + + + /** + * Reports an error that occurred while scanning. + * + *

In a well-formed scanner (no or only correct usage of {@code yypushback(int)} and a + * match-all fallback rule) this method will only be called with things that + * "Can't Possibly Happen". + * + *

If this method is called, something is seriously wrong (e.g. a JFlex bug producing a faulty + * scanner etc.). + * + *

Usual syntax/scanner level error handling should be done in error fallback rules. + * + * @param errorCode the code of the error message to display. + */ + private static void zzScanError(int errorCode) { + String message; + try { + message = ZZ_ERROR_MSG[errorCode]; + } catch (ArrayIndexOutOfBoundsException e) { + message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; + } + + throw new Error(message); + } + + + /** + * Pushes the specified amount of characters back into the input stream. + * + *

They will be read again by then next call of the scanning method. + * + * @param number the number of characters to be read again. This number must not be greater than + * {@link #yylength()}. + */ + public void yypushback(int number) { + if ( number > yylength() ) + zzScanError(ZZ_PUSHBACK_2BIG); + + zzMarkedPos -= number; + } + + + + + /** + * Resumes scanning until the next regular expression is matched, the end of input is encountered + * or an I/O-Error occurs. + * + * @return the next token. + * @exception java.io.IOException if any I/O-Error occurs. + */ + public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + int zzInput; + int zzAction; + + // cached fields: + int zzCurrentPosL; + int zzMarkedPosL; + int zzEndReadL = zzEndRead; + char[] zzBufferL = zzBuffer; + + int [] zzTransL = ZZ_TRANS; + int [] zzRowMapL = ZZ_ROWMAP; + int [] zzAttrL = ZZ_ATTRIBUTE; + + while (true) { + zzMarkedPosL = zzMarkedPos; + + zzAction = -1; + + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + zzState = ZZ_LEXSTATE[zzLexicalState]; + + // set up zzAction for empty match case: + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + } + + + zzForAction: { + while (true) { + + if (zzCurrentPosL < zzEndReadL) { + zzInput = zzBufferL[zzCurrentPosL++]; +// zzCurrentPosL += Character.charCount(zzInput); + } + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; + } + else { + zzInput = zzBufferL[zzCurrentPosL++]; +// zzCurrentPosL += Character.charCount(zzInput); + } + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMap(zzInput) ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + switch (zzLexicalState) { + case YYINITIAL: { + addNullToken(); return firstToken; + } // fall though + case 37: break; + case MLC: { + addToken(start,zzStartRead-1, TokenTypes.COMMENT_MULTILINE); return firstToken; + } // fall though + case 38: break; + case DOCCOMMENT: { + yybegin(YYINITIAL); addToken(start,zzEndRead, TokenTypes.COMMENT_DOCUMENTATION); return firstToken; + } // fall though + case 39: break; + case EOL_COMMENT: { + addToken(start,zzStartRead-1, TokenTypes.COMMENT_EOL); addNullToken(); return firstToken; + } // fall though + case 40: break; + case TEXT_BLOCK: { + addToken(start,zzStartRead-1, TokenTypes.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; + } // fall though + case 41: break; + default: + return null; + } + } + else { + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 1: + { + } + // fall through + case 18: break; + case 2: + { addToken(TokenTypes.IDENTIFIER, false); + } + // fall through + case 19: break; + case 3: + { addToken(TokenTypes.WHITESPACE, false); + } + // fall through + case 20: break; + case 4: + { addNullToken(); return firstToken; + } + // fall through + case 21: break; + case 5: + { addToken(start,zzStartRead-1, TokenTypes.COMMENT_MULTILINE); return firstToken; + } + // fall through + case 22: break; + case 6: + { addToken(start,zzStartRead-1, TokenTypes.COMMENT_DOCUMENTATION); return firstToken; + } + // fall through + case 23: break; + case 7: + { addToken(start,zzStartRead-1, TokenTypes.COMMENT_EOL); addNullToken(); return firstToken; + } + // fall through + case 24: break; + case 8: + { addToken(start,zzStartRead-1, TokenTypes.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; + } + // fall through + case 25: break; + case 9: + { /* Skip escaped chars, handles case: '\"""'. */ + } + // fall through + case 26: break; + case 10: + { start = zzMarkedPos-2; yybegin(MLC); + } + // fall through + case 27: break; + case 11: + { start = zzMarkedPos-2; yybegin(EOL_COMMENT); + } + // fall through + case 28: break; + case 12: + { yybegin(YYINITIAL); addToken(start,zzStartRead+1, TokenTypes.COMMENT_MULTILINE); + } + // fall through + case 29: break; + case 13: + { yybegin(YYINITIAL); addToken(start,zzStartRead+1, TokenTypes.COMMENT_DOCUMENTATION); + } + // fall through + case 30: break; + case 14: + { int temp=zzStartRead; addToken(start,zzStartRead-1, TokenTypes.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, TokenTypes.COMMENT_MARKUP); start = zzMarkedPos; + } + // fall through + case 31: break; + case 15: + { start = zzMarkedPos-3; yybegin(DOCCOMMENT); + } + // fall through + case 32: break; + case 16: + { yybegin(YYINITIAL); addToken(start,zzStartRead+2, TokenTypes.LITERAL_STRING_DOUBLE_QUOTE); + } + // fall through + case 33: break; + case 17: + { addToken(TokenTypes.COMMENT_MULTILINE); + } + // fall through + case 34: break; + default: + zzScanError(ZZ_NO_MATCH); + } + } + } + } + + +} diff --git a/src/main/java/istlab/KisoJikken/Test/PlainTextTokenMaker.java b/src/main/java/istlab/KisoJikken/Test/PlainTextTokenMaker.java index 59b34c6..edc94d1 100644 --- a/src/main/java/istlab/KisoJikken/Test/PlainTextTokenMaker.java +++ b/src/main/java/istlab/KisoJikken/Test/PlainTextTokenMaker.java @@ -22,7 +22,7 @@ import javax.swing.text.Segment; -import org.fife.ui.rsyntaxtextarea.AbstractJFlexTokenMaker; +import org.fife.ui.rsyntaxtextarea.AbstractJFlexCTokenMaker; import org.fife.ui.rsyntaxtextarea.Token; import org.fife.ui.rsyntaxtextarea.TokenImpl; import org.fife.ui.rsyntaxtextarea.TokenTypes; @@ -69,7 +69,7 @@ // See https://github.com/jflex-de/jflex/issues/222 @SuppressWarnings("FallThrough") -public class PlainTextTokenMaker extends AbstractJFlexTokenMaker { +public class PlainTextTokenMaker extends AbstractJFlexCTokenMaker { /** This character denotes the end of file. */ public static final int YYEOF = -1; @@ -128,13 +128,11 @@ private static final int [] ZZ_CMAP_BLOCKS = zzUnpackcmap_blocks(); private static final String ZZ_CMAP_BLOCKS_PACKED_0 = - "\11\0\1\1\1\2\3\3\22\0\1\1\1\4\1\5"+ - "\1\4\1\6\5\4\1\7\3\4\1\10\1\11\12\12"+ - "\1\13\1\4\1\14\1\4\1\15\1\4\1\16\32\17"+ - "\1\4\1\20\1\4\1\0\1\4\1\0\4\17\1\21"+ - "\1\22\1\17\1\23\1\24\2\17\1\25\3\17\1\26"+ - "\2\17\1\27\1\30\2\17\1\31\3\17\1\32\2\0"+ - "\1\4\6\0\1\3\u01a2\0\2\3\326\0\u0100\3"; + "\11\0\1\1\1\2\3\3\22\0\1\1\1\0\1\4"+ + "\7\0\1\5\4\0\1\6\12\7\2\0\1\10\1\0"+ + "\1\11\1\0\1\12\32\13\1\0\1\14\4\0\5\13"+ + "\1\15\1\13\1\15\16\13\1\15\3\13\1\12\11\0"+ + "\1\3\u01a2\0\2\3\326\0\u0100\3"; private static int [] zzUnpackcmap_blocks() { int [] result = new int[1024]; @@ -161,14 +159,13 @@ private static final int [] ZZ_ACTION = zzUnpackAction(); private static final String ZZ_ACTION_PACKED_0 = - "\5\0\1\1\1\2\1\3\5\1\1\4\1\5\5\4"+ - "\1\6\7\4\1\7\3\4\1\10\1\4\1\11\1\12"+ - "\1\13\4\1\1\14\4\0\1\15\1\0\1\16\12\0"+ - "\1\11\1\17\4\1\14\0\1\20\1\21\1\0\1\1"+ - "\1\22\2\0\1\23\2\0\1\24\2\0\1\25\10\0"; + "\5\0\1\1\1\2\1\3\2\1\1\4\1\5\3\4"+ + "\1\6\3\4\1\7\1\10\1\4\1\11\1\12\1\13"+ + "\1\14\1\15\1\0\1\16\2\0\1\11\1\17\1\20"+ + "\1\21"; private static int [] zzUnpackAction() { - int [] result = new int[99]; + int [] result = new int[35]; int offset = 0; offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); return result; @@ -193,22 +190,14 @@ private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); private static final String ZZ_ROWMAP_PACKED_0 = - "\0\0\0\33\0\66\0\121\0\154\0\207\0\242\0\207"+ - "\0\275\0\330\0\363\0\u010e\0\u0129\0\u0144\0\207\0\u015f"+ - "\0\u017a\0\u0195\0\u01b0\0\u01cb\0\207\0\u01e6\0\u0201\0\207"+ - "\0\u021c\0\u0237\0\u0252\0\u026d\0\207\0\u0288\0\u02a3\0\u02be"+ - "\0\207\0\u02d9\0\u02f4\0\u030f\0\207\0\u032a\0\u0345\0\u0360"+ - "\0\u037b\0\207\0\u0396\0\u03b1\0\u03cc\0\u03e7\0\207\0\u0402"+ - "\0\207\0\u041d\0\u0438\0\u0453\0\u046e\0\u0489\0\u04a4\0\u04bf"+ - "\0\u04da\0\u04f5\0\u0510\0\207\0\u052b\0\u0546\0\u0561\0\u057c"+ - "\0\u0597\0\u05b2\0\u05cd\0\u05e8\0\u0603\0\u061e\0\u0639\0\u0654"+ - "\0\u066f\0\u068a\0\u06a5\0\u06c0\0\u06db\0\207\0\207\0\u06f6"+ - "\0\u0711\0\u072c\0\u0747\0\u0762\0\u077d\0\u0798\0\u07b3\0\u07ce"+ - "\0\u07e9\0\u0804\0\u081f\0\u083a\0\u072c\0\u0855\0\u077d\0\u0870"+ - "\0\u07ce\0\u088b\0\u081f"; + "\0\0\0\16\0\34\0\52\0\70\0\106\0\124\0\106"+ + "\0\142\0\160\0\176\0\106\0\214\0\106\0\232\0\106"+ + "\0\250\0\266\0\304\0\106\0\106\0\322\0\340\0\356"+ + "\0\106\0\106\0\106\0\374\0\106\0\u010a\0\u0118\0\106"+ + "\0\u0126\0\106\0\106"; private static int [] zzUnpackRowMap() { - int [] result = new int[99]; + int [] result = new int[35]; int offset = 0; offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); return result; @@ -231,56 +220,22 @@ private static final int [] ZZ_TRANS = zzUnpackTrans(); private static final String ZZ_TRANS_PACKED_0 = - "\1\6\1\7\1\10\6\6\1\11\1\12\4\6\1\12"+ - "\1\6\1\12\1\13\1\14\5\12\1\15\1\6\2\16"+ - "\1\17\4\16\1\20\12\16\1\21\1\22\5\16\1\23"+ - "\1\16\2\24\1\25\4\24\1\26\4\24\1\27\1\24"+ - "\1\30\3\24\1\31\1\32\5\24\1\33\1\30\2\34"+ - "\1\35\17\34\1\36\1\37\5\34\1\40\1\34\2\0"+ - "\1\41\2\0\1\42\12\0\1\43\46\0\1\7\40\0"+ - "\1\44\1\0\1\45\33\0\1\12\4\0\1\12\1\0"+ - "\11\12\13\0\1\12\4\0\1\12\1\0\3\12\1\46"+ - "\3\12\1\47\1\12\13\0\1\12\4\0\1\12\1\0"+ - "\7\12\1\50\1\12\13\0\1\12\4\0\1\12\1\0"+ - "\10\12\1\51\1\0\2\16\1\0\4\16\1\0\12\16"+ - "\2\0\5\16\1\0\1\16\11\0\1\52\45\0\1\53"+ - "\3\0\1\54\32\0\1\55\33\0\1\56\1\0\2\24"+ - "\1\0\4\24\1\0\4\24\1\0\1\24\1\0\3\24"+ - "\2\0\5\24\13\0\1\57\32\0\1\60\3\0\1\61"+ - "\1\0\1\62\1\0\11\62\25\0\1\63\3\0\1\64"+ - "\32\0\1\65\33\0\1\66\1\0\2\34\1\0\17\34"+ - "\2\0\5\34\1\0\1\34\24\0\1\67\3\0\1\70"+ - "\32\0\1\71\33\0\1\72\6\0\1\73\25\0\2\74"+ - "\2\0\27\74\7\0\1\75\35\0\1\12\4\0\1\12"+ - "\1\0\4\12\1\76\4\12\13\0\1\12\4\0\1\12"+ - "\1\0\5\12\1\77\3\12\13\0\1\12\4\0\1\12"+ - "\1\0\7\12\1\100\1\12\13\0\1\12\4\0\1\12"+ - "\1\0\10\12\1\101\26\0\1\102\33\0\1\103\34\0"+ - "\1\104\33\0\1\105\16\0\1\61\1\0\1\62\1\0"+ - "\11\62\1\0\15\62\1\61\15\62\25\0\1\106\33\0"+ - "\1\107\34\0\1\110\33\0\1\111\26\0\1\112\33\0"+ - "\1\113\34\0\1\114\33\0\1\115\6\0\1\116\36\0"+ - "\1\117\33\0\1\12\4\0\1\12\1\0\1\77\10\12"+ - "\13\0\1\12\1\120\3\0\1\12\1\0\11\12\13\0"+ - "\1\12\4\0\1\12\1\0\5\12\1\121\3\12\11\0"+ - "\1\122\1\0\1\12\4\0\1\12\1\0\11\12\22\0"+ - "\1\103\24\0\1\123\45\0\1\124\14\0\1\125\43\0"+ - "\1\107\24\0\1\126\45\0\1\127\14\0\1\130\43\0"+ - "\1\113\24\0\1\131\45\0\1\132\14\0\1\133\33\0"+ - "\1\134\33\0\1\12\1\120\3\0\1\12\1\0\6\12"+ - "\1\77\2\12\5\0\1\135\1\0\1\122\2\135\2\122"+ - "\1\135\2\0\1\135\1\122\1\0\11\122\12\0\1\136"+ - "\34\0\1\123\13\0\1\103\7\0\1\137\1\0\1\125"+ - "\2\137\2\125\1\137\2\0\1\137\1\125\1\0\11\125"+ - "\12\0\1\140\34\0\1\126\13\0\1\107\7\0\1\141"+ - "\1\0\1\130\2\141\2\130\1\141\2\0\1\141\1\130"+ - "\1\0\11\130\12\0\1\142\34\0\1\131\13\0\1\113"+ - "\7\0\1\143\1\0\1\133\2\143\2\133\1\143\2\0"+ - "\1\143\1\133\1\0\11\133\12\0\1\122\32\0\1\125"+ - "\32\0\1\130\32\0\1\133\21\0"; + "\1\6\1\7\1\10\3\6\1\11\1\12\3\6\1\12"+ + "\1\6\1\12\2\13\1\14\2\13\1\15\7\13\1\16"+ + "\2\17\1\20\2\17\1\21\2\17\1\22\1\17\1\16"+ + "\2\17\1\16\2\23\1\24\12\23\1\16\2\0\1\25"+ + "\1\0\1\26\7\0\1\27\20\0\1\7\21\0\1\30"+ + "\1\31\16\0\1\12\3\0\1\12\1\0\1\12\2\13"+ + "\1\0\2\13\1\0\7\13\7\0\1\32\7\0\2\17"+ + "\1\0\2\17\1\0\2\17\1\0\1\17\1\0\2\17"+ + "\7\0\1\33\15\0\1\34\2\0\1\35\1\0\1\36"+ + "\1\0\1\36\2\23\1\0\12\23\5\0\1\37\11\0"+ + "\2\40\2\0\12\40\5\0\1\41\21\0\1\35\1\0"+ + "\1\36\1\0\12\36\1\35\4\36\4\0\1\42\17\0"+ + "\1\43\7\0"; private static int [] zzUnpackTrans() { - int [] result = new int[2214]; + int [] result = new int[308]; int offset = 0; offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); return result; @@ -323,14 +278,12 @@ private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); private static final String ZZ_ATTRIBUTE_PACKED_0 = - "\5\0\1\11\1\1\1\11\6\1\1\11\5\1\1\11"+ - "\2\1\1\11\4\1\1\11\3\1\1\11\3\1\1\11"+ - "\4\1\1\11\4\0\1\11\1\0\1\11\12\0\1\11"+ - "\5\1\14\0\2\11\1\0\2\1\2\0\1\1\2\0"+ - "\1\1\2\0\1\1\10\0"; + "\5\0\1\11\1\1\1\11\3\1\1\11\1\1\1\11"+ + "\1\1\1\11\3\1\2\11\3\1\3\11\1\0\1\11"+ + "\2\0\1\11\1\1\2\11"; private static int [] zzUnpackAttribute() { - int [] result = new int[99]; + int [] result = new int[35]; int offset = 0; offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); return result; @@ -457,7 +410,7 @@ private void addToken(int tokenType) { addToken(zzStartRead, zzMarkedPos-1, tokenType); } - + /** * Adds the token specified to the current linked list of tokens. * @@ -634,6 +587,7 @@ } + /** * Resets the input position. */ @@ -822,7 +776,8 @@ break zzForAction; } else { - zzInput = Character.codePointAt(zzBufferL, zzCurrentPosL, zzEndReadL); + zzInput = zzBufferL[zzCurrentPosL]; + // zzInput = Character.codePointAt(zzBufferL, zzCurrentPosL, zzEndReadL); zzCurrentPosL += Character.charCount(zzInput); } } @@ -849,23 +804,23 @@ case YYINITIAL: { addNullToken(); return firstToken; } // fall though - case 100: break; + case 36: break; case MLC: { addToken(start,zzStartRead-1, TokenTypes.COMMENT_MULTILINE); return firstToken; } // fall though - case 101: break; + case 37: break; case DOCCOMMENT: { yybegin(YYINITIAL); addToken(start,zzEndRead, TokenTypes.COMMENT_DOCUMENTATION); return firstToken; } // fall though - case 102: break; + case 38: break; case EOL_COMMENT: { addToken(start,zzStartRead-1, TokenTypes.COMMENT_EOL); addNullToken(); return firstToken; } // fall though - case 103: break; + case 39: break; case TEXT_BLOCK: { addToken(start,zzStartRead-1, TokenTypes.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } // fall though - case 104: break; + case 40: break; default: return null; } @@ -876,112 +831,87 @@ { addToken(TokenTypes.IDENTIFIER, false); } // fall through - case 22: break; + case 18: break; case 2: { addToken(TokenTypes.WHITESPACE, false); } // fall through - case 23: break; + case 19: break; case 3: { addNullToken(); return firstToken; } // fall through - case 24: break; + case 20: break; case 4: { } // fall through - case 25: break; + case 21: break; case 5: { addToken(start,zzStartRead-1, TokenTypes.COMMENT_MULTILINE); return firstToken; } // fall through - case 26: break; + case 22: break; case 6: { addToken(start,zzStartRead-1, TokenTypes.COMMENT_DOCUMENTATION); return firstToken; } // fall through - case 27: break; + case 23: break; case 7: { addToken(start,zzStartRead-1, TokenTypes.COMMENT_EOL); addNullToken(); return firstToken; } // fall through - case 28: break; + case 24: break; case 8: { addToken(start,zzStartRead-1, TokenTypes.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } // fall through - case 29: break; + case 25: break; case 9: { /* Skip escaped chars, handles case: '\"""'. */ } // fall through - case 30: break; + case 26: break; case 10: { start = zzMarkedPos-2; yybegin(MLC); } // fall through - case 31: break; + case 27: break; case 11: { start = zzMarkedPos-2; yybegin(EOL_COMMENT); } // fall through - case 32: break; + case 28: break; case 12: { yybegin(YYINITIAL); addToken(start,zzStartRead+1, TokenTypes.COMMENT_MULTILINE); } // fall through - case 33: break; + case 29: break; case 13: { yybegin(YYINITIAL); addToken(start,zzStartRead+1, TokenTypes.COMMENT_DOCUMENTATION); } // fall through - case 34: break; + case 30: break; case 14: { int temp=zzStartRead; addToken(start,zzStartRead-1, TokenTypes.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, TokenTypes.COMMENT_MARKUP); start = zzMarkedPos; } // fall through - case 35: break; + case 31: break; case 15: { start = zzMarkedPos-3; yybegin(DOCCOMMENT); } // fall through - case 36: break; + case 32: break; case 16: { yybegin(YYINITIAL); addToken(start,zzStartRead+2, TokenTypes.LITERAL_STRING_DOUBLE_QUOTE); } // fall through - case 37: break; + case 33: break; case 17: { addToken(TokenTypes.COMMENT_MULTILINE); } // fall through - case 38: break; - case 18: - { addToken(TokenTypes.IDENTIFIER, true); - } - // fall through - case 39: break; - case 19: - { int temp=zzStartRead; addToken(start,zzStartRead-1, TokenTypes.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, TokenTypes.COMMENT_MULTILINE); start = zzMarkedPos; - } - // fall through - case 40: break; - case 20: - { int temp = zzStartRead; - if (start <= zzStartRead - 1) { - addToken(start,zzStartRead-1, TokenTypes.COMMENT_DOCUMENTATION); - } - addHyperlinkToken(temp,zzMarkedPos-1, TokenTypes.COMMENT_DOCUMENTATION); - start = zzMarkedPos; - } - // fall through - case 41: break; - case 21: - { int temp=zzStartRead; addToken(start,zzStartRead-1, TokenTypes.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, TokenTypes.COMMENT_EOL); start = zzMarkedPos; - } - // fall through - case 42: break; + case 34: break; default: zzScanError(ZZ_NO_MATCH); } diff --git a/src/main/java/istlab/KisoJikken/Test/Simple2TokenMaker.java b/src/main/java/istlab/KisoJikken/Test/Simple2TokenMaker.java new file mode 100644 index 0000000..b4f4381 --- /dev/null +++ b/src/main/java/istlab/KisoJikken/Test/Simple2TokenMaker.java @@ -0,0 +1,1308 @@ +// DO NOT EDIT +// Generated by JFlex 1.8.2 http://jflex.de/ +// source: simple2.flex + +/* + * 11/13/2004 + * + * SimpleTokenMaker.java - Scanner for the Java programming language. + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. + */ +// package org.fife.ui.rsyntaxtextarea.modes; +package istlab.KisoJikken.Test; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * Scanner for the Java programming language.

+ * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker), so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

+ * + * The actual algorithm generated for scanning has, of course, not been + * modified.

+ * + * If you wish to regenerate this file yourself, keep in mind the following: + *

+ * + * @author Robert Futrell + * @version 1.0 + * + */ + +// See https://github.com/jflex-de/jflex/issues/222 +@SuppressWarnings("FallThrough") +public class Simple2TokenMaker extends AbstractJFlexCTokenMaker { + + /** This character denotes the end of file. */ + public static final int YYEOF = -1; + + /** Initial size of the lookahead buffer. */ + private static final int ZZ_BUFFERSIZE = 16384; + + // Lexical states. + public static final int YYINITIAL = 0; + public static final int MLC = 2; + public static final int DOCCOMMENT = 4; + public static final int EOL_COMMENT = 6; + public static final int TEXT_BLOCK = 8; + + /** + * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l + * ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l + * at the beginning of a line + * l is of the form l = 2*k, k a non negative integer + */ + private static final int ZZ_LEXSTATE[] = { + 0, 0, 1, 1, 2, 2, 3, 3, 4, 4 + }; + + /** + * Top-level table for translating characters to character classes + */ + private static final int [] ZZ_CMAP_TOP = zzUnpackcmap_top(); + + private static final String ZZ_CMAP_TOP_PACKED_0 = + "\1\0\1\u0100\1\u0200\1\u0300\1\u0400\1\u0500\1\u0600\1\u0700"+ + "\1\u0800\1\u0900\1\u0a00\1\u0b00\1\u0c00\1\u0d00\1\u0e00\1\u0f00"+ + "\1\u1000\1\u0100\1\u1100\1\u1200\1\u1300\1\u0100\1\u1400\1\u1500"+ + "\1\u1600\1\u1700\1\u1800\1\u1900\1\u1a00\1\u1b00\1\u0100\1\u1c00"+ + "\1\u1d00\1\u1e00\12\u1f00\1\u2000\1\u2100\1\u2200\1\u1f00\1\u2300"+ + "\1\u2400\2\u1f00\31\u0100\1\u2500\126\u0100\1\u2600\1\u0100\1\u2700"+ + "\1\u2800\1\u2900\1\u2a00\1\u2b00\1\u2c00\53\u0100\1\u2d00\10\u2e00"+ + "\31\u1f00\1\u0100\1\u2f00\1\u3000\1\u0100\1\u3100\1\u3200\1\u3300"+ + "\1\u3400\1\u3500\1\u3600\1\u3700\1\u3800\1\u3900\1\u0100\1\u3a00"+ + "\1\u3b00\1\u3c00\1\u3d00\1\u3e00\1\u3f00\1\u4000\1\u4100\1\u4200"+ + "\1\u4300\1\u4400\1\u4500\1\u4600\1\u4700\1\u4800\1\u4900\1\u4a00"+ + "\1\u4b00\1\u4c00\1\u4d00\1\u1f00\1\u4e00\1\u4f00\1\u5000\1\u5100"+ + "\3\u0100\1\u5200\1\u5300\1\u5400\11\u1f00\1\u5500\4\u0100\1\u5600"+ + "\17\u1f00\2\u0100\1\u5700\41\u1f00\2\u0100\1\u5800\1\u5900\2\u1f00"+ + "\1\u5a00\1\u5b00\27\u0100\1\u5c00\4\u0100\1\u5d00\1\u5e00\41\u1f00"+ + "\1\u5f00\1\u0100\1\u6000\1\u6100\11\u1f00\1\u6200\22\u1f00\1\u6300"+ + "\1\u1f00\1\u6400\1\u6500\1\u1f00\1\u6600\1\u6700\1\u6800\1\u6900"+ + "\2\u1f00\1\u6a00\4\u1f00\1\u6b00\1\u6c00\1\u6d00\1\u6e00\4\u1f00"+ + "\1\u6f00\1\u7000\1\u7100\2\u1f00\1\u7200\1\u1f00\1\u7300\14\u1f00"+ + "\1\u7400\4\u1f00\246\u0100\1\u7500\20\u0100\1\u7600\1\u7700\25\u0100"+ + "\1\u7800\34\u0100\1\u7900\14\u1f00\2\u0100\1\u7a00\5\u1f00\23\u0100"+ + "\1\u7b00\u0aec\u1f00\1\u7c00\1\u7d00\u02fe\u1f00"; + + private static int [] zzUnpackcmap_top() { + int [] result = new int[4352]; + int offset = 0; + offset = zzUnpackcmap_top(ZZ_CMAP_TOP_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackcmap_top(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); + } + return j; + } + + + /** + * Second-level tables for translating characters to character classes + */ + private static final int [] ZZ_CMAP_BLOCKS = zzUnpackcmap_blocks(); + + private static final String ZZ_CMAP_BLOCKS_PACKED_0 = + "\11\0\1\1\1\2\1\3\1\4\1\3\16\0\4\5"+ + "\1\6\1\5\1\7\1\5\1\10\4\5\1\11\1\12"+ + "\3\5\1\13\1\14\12\15\2\5\1\16\1\17\1\20"+ + "\1\5\1\21\3\22\1\23\1\22\1\24\13\25\1\26"+ + "\10\25\1\5\1\27\2\5\1\10\1\5\1\30\1\31"+ + "\1\32\1\33\1\34\1\35\1\36\1\37\1\40\1\41"+ + "\1\42\1\43\1\44\1\45\1\46\1\47\1\25\1\50"+ + "\1\51\1\52\1\53\1\54\1\55\1\56\1\57\1\25"+ + "\1\60\1\5\1\61\1\5\6\0\1\62\32\0\2\5"+ + "\4\10\4\5\1\10\2\5\1\0\7\5\1\10\4\5"+ + "\1\10\5\5\27\10\1\5\37\10\1\5\u01ca\10\4\5"+ + "\14\10\16\5\5\10\7\5\1\10\1\5\1\10\21\5"+ + "\160\0\5\10\1\5\2\10\2\5\4\10\1\5\1\10"+ + "\6\5\1\10\1\5\3\10\1\5\1\10\1\5\24\10"+ + "\1\5\123\10\1\5\213\10\1\5\5\0\2\5\246\10"+ + "\1\5\46\10\2\5\1\10\6\5\51\10\6\5\1\10"+ + "\1\5\55\0\1\5\1\0\1\5\2\0\1\5\2\0"+ + "\1\5\1\0\10\5\33\10\4\5\4\10\15\5\6\0"+ + "\5\5\1\10\4\5\13\0\1\5\1\0\3\5\53\10"+ + "\37\0\4\5\2\10\1\0\143\10\1\5\1\10\10\0"+ + "\1\5\6\0\2\10\2\0\1\5\4\0\2\10\12\0"+ + "\3\10\2\5\1\10\17\5\1\0\1\10\1\0\36\10"+ + "\33\0\2\5\131\10\13\0\1\10\16\5\12\0\41\10"+ + "\11\0\2\10\4\5\1\10\2\5\1\0\30\10\4\0"+ + "\1\10\11\0\1\10\3\0\1\10\5\0\22\5\31\10"+ + "\3\0\4\5\13\10\5\5\30\10\1\5\6\10\1\5"+ + "\2\0\6\5\10\0\52\10\72\0\66\10\3\0\1\10"+ + "\22\0\1\10\7\0\12\10\2\0\2\5\12\0\1\5"+ + "\20\10\3\0\1\5\10\10\2\5\2\10\2\5\26\10"+ + "\1\5\7\10\1\5\1\10\3\5\4\10\2\5\1\0"+ + "\1\10\7\0\2\5\2\0\2\5\3\0\1\10\10\5"+ + "\1\0\4\5\2\10\1\5\3\10\2\0\2\5\12\0"+ + "\4\10\7\5\2\10\1\5\1\0\2\5\3\0\1\5"+ + "\6\10\4\5\2\10\2\5\26\10\1\5\7\10\1\5"+ + "\2\10\1\5\2\10\1\5\2\10\2\5\1\0\1\5"+ + "\5\0\4\5\2\0\2\5\3\0\3\5\1\0\7\5"+ + "\4\10\1\5\1\10\7\5\14\0\3\10\1\0\13\5"+ + "\3\0\1\5\11\10\1\5\3\10\1\5\26\10\1\5"+ + "\7\10\1\5\2\10\1\5\5\10\2\5\1\0\1\10"+ + "\10\0\1\5\3\0\1\5\3\0\2\5\1\10\17\5"+ + "\2\10\2\0\2\5\12\0\1\5\1\10\7\5\1\10"+ + "\6\0\1\5\3\0\1\5\10\10\2\5\2\10\2\5"+ + "\26\10\1\5\7\10\1\5\2\10\1\5\5\10\2\5"+ + "\1\0\1\10\7\0\2\5\2\0\2\5\3\0\7\5"+ + "\3\0\4\5\2\10\1\5\3\10\2\0\2\5\12\0"+ + "\1\5\1\10\20\5\1\0\1\10\1\5\6\10\3\5"+ + "\3\10\1\5\4\10\3\5\2\10\1\5\1\10\1\5"+ + "\2\10\3\5\2\10\3\5\3\10\3\5\14\10\4\5"+ + "\5\0\3\5\3\0\1\5\4\0\2\5\1\10\6\5"+ + "\1\0\16\5\12\0\11\5\1\10\6\5\5\0\10\10"+ + "\1\5\3\10\1\5\27\10\1\5\20\10\2\5\1\0"+ + "\1\10\7\0\1\5\3\0\1\5\4\0\7\5\2\0"+ + "\1\5\3\10\2\5\1\10\2\5\2\10\2\0\2\5"+ + "\12\0\20\5\1\10\3\0\1\5\10\10\1\5\3\10"+ + "\1\5\27\10\1\5\12\10\1\5\5\10\2\5\1\0"+ + "\1\10\7\0\1\5\3\0\1\5\4\0\7\5\2\0"+ + "\6\5\2\10\1\5\2\10\2\0\2\5\12\0\1\5"+ + "\2\10\15\5\4\0\11\10\1\5\3\10\1\5\51\10"+ + "\2\0\1\10\7\0\1\5\3\0\1\5\4\0\1\10"+ + "\5\5\3\10\1\0\7\5\3\10\2\0\2\5\12\0"+ + "\12\5\6\10\1\5\3\0\1\5\22\10\3\5\30\10"+ + "\1\5\11\10\1\5\1\10\2\5\7\10\3\5\1\0"+ + "\4\5\6\0\1\5\1\0\1\5\10\0\6\5\12\0"+ + "\2\5\2\0\15\5\60\10\1\0\2\10\7\0\4\5"+ + "\10\10\10\0\1\5\12\0\47\5\2\10\1\5\1\10"+ + "\1\5\5\10\1\5\30\10\1\5\1\10\1\5\12\10"+ + "\1\0\2\10\11\0\1\10\2\5\5\10\1\5\1\10"+ + "\1\5\6\0\2\5\12\0\2\5\4\10\40\5\1\10"+ + "\27\5\2\0\6\5\12\0\13\5\1\0\1\5\1\0"+ + "\1\5\1\0\4\5\2\0\10\10\1\5\44\10\4\5"+ + "\24\0\1\5\2\0\5\10\13\0\1\5\44\0\11\5"+ + "\1\0\71\5\53\10\24\0\1\10\12\0\6\5\6\10"+ + "\4\0\4\10\3\0\1\10\3\0\2\10\7\0\3\10"+ + "\4\0\15\10\14\0\1\10\17\0\2\5\46\10\1\5"+ + "\1\10\5\5\1\10\2\5\53\10\1\5\115\10\1\5"+ + "\4\10\2\5\7\10\1\5\1\10\1\5\4\10\2\5"+ + "\51\10\1\5\4\10\2\5\41\10\1\5\4\10\2\5"+ + "\7\10\1\5\1\10\1\5\4\10\2\5\17\10\1\5"+ + "\71\10\1\5\4\10\2\5\103\10\2\5\3\0\40\5"+ + "\20\10\20\5\126\10\2\5\6\10\3\5\u016c\10\2\5"+ + "\21\10\1\5\32\10\5\5\113\10\3\5\13\10\7\5"+ + "\22\10\4\0\11\5\23\10\3\0\13\5\22\10\2\0"+ + "\14\5\15\10\1\5\3\10\1\5\2\0\14\5\64\10"+ + "\40\0\3\5\1\10\3\5\2\10\1\0\2\5\12\0"+ + "\41\5\17\0\6\5\131\10\7\5\5\10\2\0\42\10"+ + "\1\0\1\10\5\5\106\10\12\5\37\10\1\5\14\0"+ + "\4\5\14\0\12\5\12\0\36\10\2\5\5\10\13\5"+ + "\54\10\4\5\32\10\6\5\12\0\46\5\27\10\5\0"+ + "\4\5\65\10\12\0\1\5\35\0\2\5\13\0\6\5"+ + "\12\0\15\5\1\10\10\5\16\0\1\5\20\0\61\5"+ + "\5\0\57\10\21\0\10\10\3\5\12\0\21\5\11\0"+ + "\14\5\3\0\36\10\15\0\2\10\12\0\54\10\16\0"+ + "\14\5\44\10\24\0\10\5\12\0\3\5\3\10\12\0"+ + "\44\10\2\5\11\10\7\5\53\10\2\5\3\10\20\5"+ + "\3\0\1\5\25\0\4\10\1\0\6\10\1\0\2\10"+ + "\3\0\1\10\5\5\300\10\100\0\26\10\2\5\6\10"+ + "\2\5\46\10\2\5\6\10\2\5\10\10\1\5\1\10"+ + "\1\5\1\10\1\5\1\10\1\5\37\10\2\5\65\10"+ + "\1\5\7\10\1\5\1\10\3\5\3\10\1\5\7\10"+ + "\3\5\4\10\2\5\6\10\4\5\15\10\5\5\3\10"+ + "\1\5\7\10\16\5\5\0\30\5\2\3\5\0\20\5"+ + "\2\10\23\5\1\10\13\5\5\0\1\5\12\0\1\5"+ + "\1\10\15\5\1\10\20\5\15\10\3\5\41\10\17\5"+ + "\15\0\4\5\1\0\3\5\14\0\21\5\1\10\4\5"+ + "\1\10\2\5\12\10\1\5\1\10\3\5\5\10\6\5"+ + "\1\10\1\5\1\10\1\5\1\10\1\5\4\10\1\5"+ + "\13\10\2\5\4\10\5\5\5\10\4\5\1\10\21\5"+ + "\51\10\u0177\5\345\10\6\5\4\10\3\0\2\10\14\5"+ + "\46\10\1\5\1\10\5\5\1\10\2\5\70\10\7\5"+ + "\1\10\17\5\1\0\27\10\11\5\7\10\1\5\7\10"+ + "\1\5\7\10\1\5\7\10\1\5\7\10\1\5\7\10"+ + "\1\5\7\10\1\5\7\10\1\5\40\0\57\5\1\10"+ + "\325\5\3\10\31\5\11\10\6\0\1\5\5\10\2\5"+ + "\5\10\4\5\126\10\2\5\2\0\2\5\3\10\1\5"+ + "\132\10\1\5\4\10\5\5\53\10\1\5\136\10\21\5"+ + "\40\10\60\5\320\10\100\5\215\10\103\5\56\10\2\5"+ + "\15\10\3\5\20\10\12\0\2\10\24\5\57\10\1\0"+ + "\4\5\12\0\1\5\37\10\2\0\120\10\2\0\45\5"+ + "\11\10\2\5\147\10\2\5\100\10\5\5\2\10\1\5"+ + "\1\10\1\5\5\10\30\5\20\10\1\0\3\10\1\0"+ + "\4\10\1\0\27\10\5\0\4\5\1\0\13\5\1\10"+ + "\7\5\64\10\14\5\2\0\62\10\22\0\12\5\12\0"+ + "\6\5\22\0\6\10\3\5\1\10\1\5\2\10\13\0"+ + "\34\10\10\0\2\5\27\10\15\0\14\5\35\10\3\5"+ + "\4\0\57\10\16\0\16\5\1\10\12\0\6\5\5\10"+ + "\1\0\12\10\12\0\5\10\1\5\51\10\16\0\11\5"+ + "\3\10\1\0\10\10\2\0\2\5\12\0\6\5\27\10"+ + "\3\5\1\10\3\0\62\10\1\0\1\10\3\0\2\10"+ + "\2\0\5\10\2\0\1\10\1\0\1\10\30\5\3\10"+ + "\2\5\13\10\5\0\2\5\3\10\2\0\12\5\6\10"+ + "\2\5\6\10\2\5\6\10\11\5\7\10\1\5\7\10"+ + "\1\5\53\10\1\5\16\10\6\5\163\10\10\0\1\5"+ + "\2\0\2\5\12\0\6\5\244\10\14\5\27\10\4\5"+ + "\61\10\4\5\u0100\3\156\10\2\5\152\10\46\5\7\10"+ + "\14\5\5\10\5\5\1\10\1\0\12\10\1\5\15\10"+ + "\1\5\5\10\1\5\1\10\1\5\2\10\1\5\2\10"+ + "\1\5\154\10\41\5\153\10\22\5\100\10\2\5\66\10"+ + "\50\5\15\10\3\5\20\0\20\5\20\0\3\5\2\10"+ + "\30\5\3\10\31\5\1\10\6\5\5\10\1\5\207\10"+ + "\2\5\1\0\4\5\1\10\13\5\12\0\7\5\32\10"+ + "\4\5\1\10\1\5\32\10\13\5\131\10\3\5\6\10"+ + "\2\5\6\10\2\5\6\10\2\5\3\10\3\5\2\10"+ + "\3\5\2\10\22\5\3\0\4\5\14\10\1\5\32\10"+ + "\1\5\23\10\1\5\2\10\1\5\17\10\2\5\16\10"+ + "\42\5\173\10\105\5\65\10\210\5\1\0\202\5\35\10"+ + "\3\5\61\10\17\5\1\0\37\5\40\10\15\5\36\10"+ + "\5\5\46\10\5\0\5\5\36\10\2\5\44\10\4\5"+ + "\10\10\1\5\5\10\52\5\236\10\2\5\12\0\6\5"+ + "\44\10\4\5\44\10\4\5\50\10\10\5\64\10\14\5"+ + "\13\10\1\5\17\10\1\5\7\10\1\5\2\10\1\5"+ + "\13\10\1\5\17\10\1\5\7\10\1\5\2\10\103\5"+ + "\67\10\11\5\26\10\12\5\10\10\30\5\6\10\1\5"+ + "\52\10\1\5\11\10\105\5\6\10\2\5\1\10\1\5"+ + "\54\10\1\5\2\10\3\5\1\10\2\5\27\10\12\5"+ + "\27\10\11\5\37\10\101\5\23\10\1\5\2\10\12\5"+ + "\26\10\12\5\32\10\106\5\70\10\6\5\2\10\100\5"+ + "\1\10\3\0\1\5\2\0\5\5\4\0\4\10\1\5"+ + "\3\10\1\5\35\10\2\5\3\0\4\5\1\0\40\5"+ + "\35\10\3\5\35\10\43\5\10\10\1\5\34\10\2\0"+ + "\31\5\66\10\12\5\26\10\12\5\23\10\15\5\22\10"+ + "\156\5\111\10\67\5\63\10\15\5\63\10\15\5\44\10"+ + "\4\0\10\5\12\0\u0146\5\52\10\1\5\2\0\3\5"+ + "\2\10\116\5\35\10\12\5\1\10\10\5\26\10\13\0"+ + "\37\5\22\10\4\0\52\5\25\10\33\5\27\10\11\5"+ + "\3\0\65\10\17\0\37\5\13\0\2\10\2\0\1\10"+ + "\11\5\4\0\55\10\13\0\2\5\1\0\4\5\1\0"+ + "\12\5\1\0\2\5\31\10\7\5\12\0\6\5\3\0"+ + "\44\10\16\0\1\5\12\0\4\5\1\10\2\0\1\10"+ + "\10\5\43\10\1\0\2\5\1\10\11\5\3\0\60\10"+ + "\16\0\4\10\4\5\4\0\1\5\14\0\1\10\1\5"+ + "\1\10\43\5\22\10\1\5\31\10\14\0\6\5\1\0"+ + "\101\5\7\10\1\5\1\10\1\5\4\10\1\5\17\10"+ + "\1\5\12\10\7\5\57\10\14\0\5\5\12\0\6\5"+ + "\4\0\1\5\10\10\2\5\2\10\2\5\26\10\1\5"+ + "\7\10\1\5\2\10\1\5\5\10\1\5\2\0\1\10"+ + "\7\0\2\5\2\0\2\5\3\0\2\5\1\10\6\5"+ + "\1\0\5\5\5\10\2\0\2\5\7\0\3\5\5\0"+ + "\213\5\65\10\22\0\4\10\5\5\12\0\4\5\1\0"+ + "\3\10\36\5\60\10\24\0\2\10\1\5\1\10\10\5"+ + "\12\0\246\5\57\10\7\0\2\5\11\0\27\5\4\10"+ + "\2\0\42\5\60\10\21\0\3\5\1\10\13\5\12\0"+ + "\46\5\53\10\15\0\1\10\7\5\12\0\66\5\33\10"+ + "\2\5\17\0\4\5\12\0\6\5\7\10\271\5\54\10"+ + "\17\0\145\5\100\10\12\0\25\5\10\10\2\5\1\10"+ + "\2\5\10\10\1\5\2\10\1\5\30\10\6\0\1\5"+ + "\2\0\2\5\4\0\1\10\1\0\1\10\2\0\14\5"+ + "\12\0\106\5\10\10\2\5\47\10\7\0\2\5\7\0"+ + "\1\10\1\5\1\10\1\0\33\5\1\10\12\0\50\10"+ + "\7\0\1\10\4\0\10\5\1\0\10\5\1\10\13\0"+ + "\56\10\20\0\3\5\1\10\22\5\111\10\7\5\11\10"+ + "\1\5\45\10\10\0\1\5\10\0\1\10\17\5\12\0"+ + "\30\5\36\10\2\5\26\0\1\5\16\0\111\5\7\10"+ + "\1\5\2\10\1\5\46\10\6\0\3\5\1\0\1\5"+ + "\2\0\1\5\7\0\1\10\1\0\10\5\12\0\6\5"+ + "\6\10\1\5\2\10\1\5\40\10\5\0\1\5\2\0"+ + "\1\5\5\0\1\10\7\5\12\0\u0136\5\23\10\4\0"+ + "\271\5\1\10\54\5\4\10\37\5\232\10\146\5\157\10"+ + "\21\5\304\10\u014c\5\141\10\17\5\57\10\1\5\11\0"+ + "\307\5\107\10\271\5\71\10\7\5\37\10\1\5\12\0"+ + "\6\5\117\10\1\5\12\0\6\5\36\10\2\5\5\0"+ + "\13\5\60\10\7\0\11\5\4\10\14\5\12\0\11\5"+ + "\25\10\5\5\23\10\260\5\100\10\200\5\113\10\4\5"+ + "\1\0\1\10\67\0\7\5\4\0\15\10\100\5\2\10"+ + "\1\5\1\10\1\0\13\5\2\0\16\5\370\10\10\5"+ + "\326\10\52\5\11\10\u01e7\5\4\10\1\5\7\10\1\5"+ + "\2\10\1\5\43\10\55\5\3\10\21\5\4\10\10\5"+ + "\u018c\10\4\5\153\10\5\5\15\10\3\5\11\10\7\5"+ + "\12\10\3\5\2\0\1\5\4\0\134\5\56\0\2\5"+ + "\27\0\u011e\5\5\0\3\5\26\0\2\5\7\0\36\5"+ + "\4\0\224\5\3\0\273\5\125\10\1\5\107\10\1\5"+ + "\2\10\2\5\1\10\2\5\2\10\2\5\4\10\1\5"+ + "\14\10\1\5\1\10\1\5\7\10\1\5\101\10\1\5"+ + "\4\10\2\5\10\10\1\5\7\10\1\5\34\10\1\5"+ + "\4\10\1\5\5\10\1\5\1\10\3\5\7\10\1\5"+ + "\u0154\10\2\5\31\10\1\5\31\10\1\5\37\10\1\5"+ + "\31\10\1\5\37\10\1\5\31\10\1\5\37\10\1\5"+ + "\31\10\1\5\37\10\1\5\31\10\1\5\10\10\2\5"+ + "\151\0\4\5\62\0\10\5\1\0\16\5\1\0\26\5"+ + "\5\0\1\5\17\0\120\5\37\10\341\5\7\0\1\5"+ + "\21\0\2\5\7\0\1\5\2\0\1\5\5\0\325\5"+ + "\55\10\3\5\7\0\7\10\2\5\12\0\4\5\1\10"+ + "\u0141\5\36\10\1\0\21\5\54\10\16\0\5\5\1\10"+ + "\340\5\7\10\1\5\4\10\1\5\2\10\1\5\17\10"+ + "\1\5\305\10\13\5\7\0\51\5\104\10\7\0\1\10"+ + "\4\5\12\0\u0156\5\1\10\117\5\4\10\1\5\33\10"+ + "\1\5\2\10\1\5\1\10\2\5\1\10\1\5\12\10"+ + "\1\5\4\10\1\5\1\10\1\5\1\10\6\5\1\10"+ + "\4\5\1\10\1\5\1\10\1\5\1\10\1\5\3\10"+ + "\1\5\2\10\1\5\1\10\2\5\1\10\1\5\1\10"+ + "\1\5\1\10\1\5\1\10\1\5\1\10\1\5\2\10"+ + "\1\5\1\10\2\5\4\10\1\5\7\10\1\5\4\10"+ + "\1\5\4\10\1\5\1\10\1\5\12\10\1\5\21\10"+ + "\5\5\3\10\1\5\5\10\1\5\21\10\u0134\5\12\0"+ + "\6\5\340\10\40\5\71\10\7\5\336\10\2\5\u0182\10"+ + "\16\5\u0131\10\37\5\36\10\342\5\113\10\266\5\1\0"+ + "\36\5\140\0\200\5\360\0\20\5"; + + private static int [] zzUnpackcmap_blocks() { + int [] result = new int[32256]; + int offset = 0; + offset = zzUnpackcmap_blocks(ZZ_CMAP_BLOCKS_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackcmap_blocks(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); + } + return j; + } + + /** + * Translates DFA states to action switch labels. + */ + private static final int [] ZZ_ACTION = zzUnpackAction(); + + private static final String ZZ_ACTION_PACKED_0 = + "\4\0\1\1\1\2\1\3\1\4\3\2\1\5\1\1"+ + "\1\6\3\1\1\7\5\1\1\10\1\1\1\11\1\1"+ + "\1\12\1\13\1\14\2\0\1\5\1\15\1\16\1\0"+ + "\1\17\16\0\1\12\1\20\1\0\1\5\24\0\1\21"+ + "\1\22\14\0\1\23\75\0\1\23\31\0"; + + private static int [] zzUnpackAction() { + int [] result = new int[177]; + int offset = 0; + offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAction(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); + } + return j; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\63\0\146\0\231\0\314\0\377\0\u0132\0\377"+ + "\0\u0165\0\u0198\0\u01cb\0\u01fe\0\u0231\0\377\0\u0264\0\377"+ + "\0\u0297\0\377\0\u02ca\0\u02fd\0\u0330\0\u0363\0\u0396\0\377"+ + "\0\u03c9\0\377\0\u03fc\0\u042f\0\u0462\0\377\0\u0495\0\u04c8"+ + "\0\u04fb\0\377\0\377\0\u052e\0\377\0\u0561\0\u0594\0\u05c7"+ + "\0\u05fa\0\u062d\0\u0660\0\u0693\0\u06c6\0\u06f9\0\u072c\0\u075f"+ + "\0\u0792\0\u07c5\0\u07f8\0\377\0\u082b\0\u085e\0\u04c8\0\u0891"+ + "\0\u08c4\0\u08f7\0\u092a\0\u095d\0\u0990\0\u09c3\0\u09f6\0\u0a29"+ + "\0\u0a5c\0\u0a8f\0\u0ac2\0\u0af5\0\u0b28\0\u0b5b\0\u0b8e\0\u0bc1"+ + "\0\u0bf4\0\u0c27\0\u0c5a\0\377\0\377\0\u0c8d\0\u0cc0\0\u0cf3"+ + "\0\u0d26\0\u0d59\0\u0d8c\0\u0dbf\0\u0df2\0\u0e25\0\u0e58\0\u0e8b"+ + "\0\u0ebe\0\377\0\u0ef1\0\u0f24\0\u0f57\0\u0f8a\0\u0fbd\0\u0ff0"+ + "\0\u1023\0\u1056\0\u1089\0\u10bc\0\u10ef\0\u1122\0\u1155\0\u1188"+ + "\0\u11bb\0\u11ee\0\u1221\0\u1254\0\u1287\0\u12ba\0\u12ed\0\u1320"+ + "\0\u1353\0\u1386\0\u13b9\0\u13ec\0\u141f\0\u1452\0\u1485\0\u14b8"+ + "\0\u14eb\0\u151e\0\u1551\0\u1584\0\u15b7\0\u15ea\0\u161d\0\u1650"+ + "\0\u1683\0\u16b6\0\u16e9\0\u171c\0\u174f\0\u1782\0\u17b5\0\u17e8"+ + "\0\u181b\0\u184e\0\u1881\0\u18b4\0\u18e7\0\u191a\0\u194d\0\u1980"+ + "\0\u19b3\0\u19e6\0\u1a19\0\u1a4c\0\u1a7f\0\u1ab2\0\u1ae5\0\u1b18"+ + "\0\u1b4b\0\u1b7e\0\u1bb1\0\u1be4\0\u1c17\0\u1c4a\0\u1c7d\0\u1cb0"+ + "\0\u1ce3\0\u1d16\0\u1d49\0\u1d7c\0\u1daf\0\u1de2\0\u1e15\0\u1e48"+ + "\0\u1e7b\0\u1eae\0\u1ee1\0\u1f14\0\u1f47\0\u1f7a\0\u1fad\0\u1fe0"+ + "\0\u2013"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[177]; + int offset = 0; + offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackRowMap(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int high = packed.charAt(i++) << 16; + result[j++] = high | packed.charAt(i++); + } + return j; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\1\6\1\7\1\10\1\0\1\7\1\6\1\7\5\6"+ + "\1\11\2\6\1\12\1\13\1\14\40\6\1\0\2\15"+ + "\1\16\7\15\1\17\22\15\1\20\1\15\1\20\15\15"+ + "\1\20\5\15\2\21\1\22\7\21\1\23\3\21\1\24"+ + "\2\21\1\25\13\21\1\20\1\21\1\20\15\21\1\20"+ + "\2\21\1\26\2\21\2\27\1\30\32\27\1\20\1\27"+ + "\1\20\15\27\1\20\5\27\2\31\1\32\4\31\1\33"+ + "\17\31\1\34\33\31\64\0\1\7\2\0\1\7\1\0"+ + "\1\7\66\0\1\35\1\0\1\36\65\0\1\37\51\0"+ + "\1\40\64\0\1\41\11\0\5\41\1\0\30\41\3\0"+ + "\2\15\1\0\7\15\1\0\22\15\1\0\1\15\1\0"+ + "\15\15\1\0\5\15\14\0\1\42\46\0\2\21\1\0"+ + "\7\21\1\0\3\21\1\0\2\21\1\0\13\21\1\0"+ + "\1\21\1\0\15\21\1\0\2\21\1\0\2\21\14\0"+ + "\1\43\62\0\1\44\3\0\1\45\1\0\5\46\1\0"+ + "\30\46\33\0\1\47\1\0\1\50\1\51\1\52\3\0"+ + "\1\53\5\0\1\54\1\55\1\56\1\57\1\60\1\0"+ + "\1\61\27\0\1\62\41\0\2\27\1\0\32\27\1\0"+ + "\1\27\1\0\15\27\1\0\5\27\2\31\1\0\4\31"+ + "\1\0\17\31\1\0\33\31\7\0\1\63\53\0\2\64"+ + "\3\0\55\64\13\0\1\65\1\66\66\0\1\36\43\0"+ + "\2\67\1\0\6\67\1\0\51\67\1\41\7\0\1\41"+ + "\4\0\1\41\4\0\5\41\1\70\30\41\2\0\1\41"+ + "\20\0\1\45\1\0\5\46\1\0\30\46\3\0\20\46"+ + "\1\45\42\46\53\0\1\71\37\0\1\72\66\0\1\73"+ + "\104\0\1\74\51\0\1\75\46\0\1\76\61\0\1\77"+ + "\66\0\1\100\62\0\1\101\3\0\1\102\61\0\1\103"+ + "\6\0\1\104\4\0\1\105\43\0\1\106\60\0\1\107"+ + "\1\110\4\0\1\111\2\0\1\112\10\0\1\113\15\0"+ + "\1\114\67\0\1\115\107\0\1\116\74\0\1\117\61\0"+ + "\1\120\62\0\1\121\57\0\1\122\43\0\1\123\1\0"+ + "\1\124\63\0\1\125\16\0\1\126\61\0\1\127\61\0"+ + "\1\130\64\0\1\131\44\0\1\132\13\0\1\133\57\0"+ + "\1\134\65\0\1\135\45\0\1\136\101\0\1\137\60\0"+ + "\1\140\60\0\1\141\62\0\1\142\61\0\1\143\55\0"+ + "\1\144\52\0\1\145\62\0\1\146\47\0\1\147\4\0"+ + "\3\147\3\0\6\147\64\0\1\150\57\0\1\151\76\0"+ + "\1\152\56\0\1\153\52\0\1\154\6\0\1\155\53\0"+ + "\1\156\62\0\1\157\74\0\1\160\44\0\1\161\105\0"+ + "\1\162\47\0\1\163\54\0\1\164\64\0\1\165\11\0"+ + "\1\166\62\0\1\132\62\0\1\167\65\0\1\170\44\0"+ + "\1\171\61\0\1\172\67\0\1\173\70\0\1\174\4\0"+ + "\1\175\53\0\1\176\73\0\1\177\23\0\1\200\4\0"+ + "\3\200\3\0\6\200\73\0\1\201\52\0\1\202\60\0"+ + "\1\203\75\0\1\204\62\0\1\205\66\0\1\206\65\0"+ + "\1\132\54\0\1\207\55\0\1\210\63\0\1\132\66\0"+ + "\1\211\42\0\1\212\66\0\1\132\56\0\1\213\107\0"+ + "\1\214\55\0\1\215\52\0\1\216\56\0\1\217\54\0"+ + "\1\220\70\0\1\221\70\0\1\217\54\0\1\222\101\0"+ + "\1\171\37\0\1\6\47\0\1\223\4\0\3\223\3\0"+ + "\6\223\75\0\1\132\60\0\1\224\46\0\1\225\73\0"+ + "\1\164\71\0\1\170\43\0\1\164\74\0\1\226\51\0"+ + "\1\227\73\0\1\132\60\0\1\230\52\0\1\231\100\0"+ + "\1\132\51\0\1\226\70\0\1\211\14\0\61\217\1\132"+ + "\1\217\46\0\1\232\64\0\1\233\62\0\1\234\27\0"+ + "\1\41\4\0\3\41\3\0\6\41\75\0\1\235\42\0"+ + "\1\236\62\0\1\237\104\0\1\164\33\0\1\240\1\241"+ + "\107\0\1\242\57\0\1\243\54\0\1\244\52\0\1\245"+ + "\111\0\1\132\55\0\1\246\53\0\1\132\47\0\1\247"+ + "\72\0\1\250\52\0\1\251\104\0\1\217\62\0\1\252"+ + "\53\0\1\217\53\0\1\253\100\0\1\254\44\0\1\255"+ + "\63\0\1\256\50\0\1\257\72\0\1\132\57\0\1\132"+ + "\75\0\1\253\53\0\1\260\74\0\1\261\66\0\1\235"+ + "\42\0\1\217\30\0"; + + private static int [] zzUnpackTrans() { + int [] result = new int[8262]; + int offset = 0; + offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackTrans(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + value--; + do result[j++] = value; while (--count > 0); + } + return j; + } + + + /** Error code for "Unknown internal scanner error". */ + private static final int ZZ_UNKNOWN_ERROR = 0; + /** Error code for "could not match input". */ + private static final int ZZ_NO_MATCH = 1; + /** Error code for "pushback value was too large". */ + private static final int ZZ_PUSHBACK_2BIG = 2; + + /** + * Error messages for {@link #ZZ_UNKNOWN_ERROR}, {@link #ZZ_NO_MATCH}, and + * {@link #ZZ_PUSHBACK_2BIG} respectively. + */ + private static final String ZZ_ERROR_MSG[] = { + "Unknown internal scanner error", + "Error: could not match input", + "Error: pushback value was too large" + }; + + /** + * ZZ_ATTRIBUTE[aState] contains the attributes of state {@code aState} + */ + private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); + + private static final String ZZ_ATTRIBUTE_PACKED_0 = + "\4\0\1\1\1\11\1\1\1\11\5\1\1\11\1\1"+ + "\1\11\1\1\1\11\5\1\1\11\1\1\1\11\3\1"+ + "\1\11\2\0\1\1\2\11\1\0\1\11\16\0\1\11"+ + "\1\1\1\0\1\1\24\0\2\11\14\0\1\11\75\0"+ + "\1\1\31\0"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[177]; + int offset = 0; + offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAttribute(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); + } + return j; + } + + /** Input device. */ + private java.io.Reader zzReader; + + /** Current state of the DFA. */ + private int zzState; + + /** Current lexical state. */ + private int zzLexicalState = YYINITIAL; + + /** + * This buffer contains the current text to be matched and is the source of the {@link #yytext()} + * string. + */ + private char zzBuffer[] = new char[ZZ_BUFFERSIZE]; + + /** Text position at the last accepting state. */ + private int zzMarkedPos; + + /** Current text position in the buffer. */ + private int zzCurrentPos; + + /** Marks the beginning of the {@link #yytext()} string in the buffer. */ + private int zzStartRead; + + /** Marks the last character in the buffer, that has been read from input. */ + private int zzEndRead; + + /** + * Whether the scanner is at the end of file. + * @see #yyatEOF + */ + private boolean zzAtEOF; + + /** + * The number of occupied positions in {@link #zzBuffer} beyond {@link #zzEndRead}. + * + *

When a lead/high surrogate has been read from the input stream into the final + * {@link #zzBuffer} position, this will have a value of 1; otherwise, it will have a value of 0. + */ + private int zzFinalHighSurrogate = 0; + + /** Number of newlines encountered up to the start of the matched text. */ + @SuppressWarnings("unused") + private int yyline; + + /** Number of characters from the last newline up to the start of the matched text. */ + @SuppressWarnings("unused") + private int yycolumn; + + /** Number of characters up to the start of the matched text. */ + @SuppressWarnings("unused") + private long yychar; + + /** Whether the scanner is currently at the beginning of a line. */ + @SuppressWarnings("unused") + private boolean zzAtBOL = true; + + /** Whether the user-EOF-code has already been executed. */ + @SuppressWarnings("unused") + private boolean zzEOFDone; + + /* user code: */ + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public Simple2TokenMaker() { + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addHyperlinkToken(int, int, int) + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, false); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + * @param hyperlink Whether this token is a hyperlink. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, + int startOffset, boolean hyperlink) { + super.addToken(array, start,end, tokenType, startOffset, hyperlink); + zzStartRead = zzMarkedPos; + } + + + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "//", null }; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state; + switch (initialTokenType) { + case TokenTypes.COMMENT_MULTILINE: + state = MLC; + start = text.offset; + break; + case TokenTypes.COMMENT_DOCUMENTATION: + state = DOCCOMMENT; + start = text.offset; + break; + case TokenTypes.LITERAL_STRING_DOUBLE_QUOTE: + state = TEXT_BLOCK; + start = text.offset; + break; + default: + state = YYINITIAL; + } + + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * Resets the scanner to read from a new input stream. + * Does not close the old reader. + * + * All internal variables are reset, the old input stream + * cannot be reused (internal buffer is discarded and lost). + * Lexical state is set to YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtBOL = true; + zzAtEOF = false; + } + + + + + /** + * Creates a new scanner + * + * @param in the java.io.Reader to read input from. + */ + public Simple2TokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Translates raw input code points to DFA table row + */ + private static int zzCMap(int input) { + int offset = input & 255; + return offset == input ? ZZ_CMAP_BLOCKS[offset] : ZZ_CMAP_BLOCKS[ZZ_CMAP_TOP[input >> 8] | offset]; + } + + /** + * Refills the input buffer. + * + * @return {@code false} iff there was new input. + * @exception java.io.IOException if any I/O-Error occurs + */ + private boolean zzRefill_GOMI() throws java.io.IOException { + + /* first: make room (if you can) */ + if (zzStartRead > 0) { + zzEndRead += zzFinalHighSurrogate; + zzFinalHighSurrogate = 0; + System.arraycopy(zzBuffer, zzStartRead, + zzBuffer, 0, + zzEndRead - zzStartRead); + + /* translate stored positions */ + zzEndRead -= zzStartRead; + zzCurrentPos -= zzStartRead; + zzMarkedPos -= zzStartRead; + zzStartRead = 0; + } + + /* is the buffer big enough? */ + if (zzCurrentPos >= zzBuffer.length - zzFinalHighSurrogate) { + /* if not: blow it up */ + char newBuffer[] = new char[zzBuffer.length * 2]; + System.arraycopy(zzBuffer, 0, newBuffer, 0, zzBuffer.length); + zzBuffer = newBuffer; + zzEndRead += zzFinalHighSurrogate; + zzFinalHighSurrogate = 0; + } + + /* fill the buffer with new input */ + int requested = zzBuffer.length - zzEndRead; + int numRead = zzReader.read(zzBuffer, zzEndRead, requested); + + /* not supposed to occur according to specification of java.io.Reader */ + if (numRead == 0) { + throw new java.io.IOException( + "Reader returned 0 characters. See JFlex examples/zero-reader for a workaround."); + } + if (numRead > 0) { + zzEndRead += numRead; + if (Character.isHighSurrogate(zzBuffer[zzEndRead - 1])) { + if (numRead == requested) { // We requested too few chars to encode a full Unicode character + --zzEndRead; + zzFinalHighSurrogate = 1; + } else { // There is room in the buffer for at least one more char + int c = zzReader.read(); // Expecting to read a paired low surrogate char + if (c == -1) { + return true; + } else { + zzBuffer[zzEndRead++] = (char)c; + } + } + } + /* potentially more input available */ + return false; + } + + /* numRead < 0 ==> end of stream */ + return true; + } + + + /** + * Closes the input reader. + * + * @throws java.io.IOException if the reader could not be closed. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; // indicate end of file + zzEndRead = zzStartRead; // invalidate buffer + + if (zzReader != null) { + zzReader.close(); + } + } + + + /** + * Resets the scanner to read from a new input stream. + * + *

Does not close the old reader. + * + *

All internal variables are reset, the old input stream cannot be reused (internal + * buffer is discarded and lost). Lexical state is set to {@code ZZ_INITIAL}. + * + *

Internal scan buffer is resized down to its initial length, if it has grown. + * + * @param reader The new input stream. + */ + public final void yyreset_GOMI(java.io.Reader reader) { + zzReader = reader; + zzEOFDone = false; + yyResetPosition(); + zzLexicalState = YYINITIAL; + if (zzBuffer.length > ZZ_BUFFERSIZE) { + zzBuffer = new char[ZZ_BUFFERSIZE]; + } + } + + /** + * Resets the input position. + */ + private final void yyResetPosition() { + zzAtBOL = true; + zzAtEOF = false; + zzCurrentPos = 0; + zzMarkedPos = 0; + zzStartRead = 0; + zzEndRead = 0; + zzFinalHighSurrogate = 0; + yyline = 0; + yycolumn = 0; + yychar = 0L; + } + + + /** + * Returns whether the scanner has reached the end of the reader it reads from. + * + * @return whether the scanner has reached EOF. + */ + public final boolean yyatEOF() { + return zzAtEOF; + } + + + /** + * Returns the current lexical state. + * + * @return the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state. + * + * @param newState the new lexical state + */ + public final void yybegin(int newState) { + zzLexicalState = newState; + } + + + /** + * Returns the text matched by the current regular expression. + * + * @return the matched text. + */ + public final String yytext() { + return new String(zzBuffer, zzStartRead, zzMarkedPos-zzStartRead); + } + + + /** + * Returns the character at the given position from the matched text. + * + *

It is equivalent to {@code yytext().charAt(pos)}, but faster. + * + * @param position the position of the character to fetch. A value from 0 to {@code yylength()-1}. + * + * @return the character at {@code position}. + */ + public final char yycharat(int position) { + return zzBuffer[zzStartRead + position]; + } + + + /** + * How many characters were matched. + * + * @return the length of the matched text region. + */ + public final int yylength() { + return zzMarkedPos-zzStartRead; + } + + + /** + * Reports an error that occurred while scanning. + * + *

In a well-formed scanner (no or only correct usage of {@code yypushback(int)} and a + * match-all fallback rule) this method will only be called with things that + * "Can't Possibly Happen". + * + *

If this method is called, something is seriously wrong (e.g. a JFlex bug producing a faulty + * scanner etc.). + * + *

Usual syntax/scanner level error handling should be done in error fallback rules. + * + * @param errorCode the code of the error message to display. + */ + private static void zzScanError(int errorCode) { + String message; + try { + message = ZZ_ERROR_MSG[errorCode]; + } catch (ArrayIndexOutOfBoundsException e) { + message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; + } + + throw new Error(message); + } + + + /** + * Pushes the specified amount of characters back into the input stream. + * + *

They will be read again by then next call of the scanning method. + * + * @param number the number of characters to be read again. This number must not be greater than + * {@link #yylength()}. + */ + public void yypushback(int number) { + if ( number > yylength() ) + zzScanError(ZZ_PUSHBACK_2BIG); + + zzMarkedPos -= number; + } + + + + + /** + * Resumes scanning until the next regular expression is matched, the end of input is encountered + * or an I/O-Error occurs. + * + * @return the next token. + * @exception java.io.IOException if any I/O-Error occurs. + */ + public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + int zzInput; + int zzAction; + + // cached fields: + int zzCurrentPosL; + int zzMarkedPosL; + int zzEndReadL = zzEndRead; + char[] zzBufferL = zzBuffer; + + int [] zzTransL = ZZ_TRANS; + int [] zzRowMapL = ZZ_ROWMAP; + int [] zzAttrL = ZZ_ATTRIBUTE; + + while (true) { + zzMarkedPosL = zzMarkedPos; + + zzAction = -1; + + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + zzState = ZZ_LEXSTATE[zzLexicalState]; + + // set up zzAction for empty match case: + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + } + + + zzForAction: { + while (true) { + + if (zzCurrentPosL < zzEndReadL) { + zzInput = zzBufferL[zzCurrentPosL++]; +// zzCurrentPosL += Character.charCount(zzInput); + } + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; + } + else { + zzInput = zzBufferL[zzCurrentPosL++]; +// zzCurrentPosL += Character.charCount(zzInput); + } + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMap(zzInput) ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + switch (zzLexicalState) { + case YYINITIAL: { + addNullToken(); return firstToken; + } // fall though + case 178: break; + case MLC: { + addToken(start,zzStartRead-1, TokenTypes.COMMENT_MULTILINE); return firstToken; + } // fall though + case 179: break; + case DOCCOMMENT: { + yybegin(YYINITIAL); addToken(start,zzEndRead, TokenTypes.COMMENT_DOCUMENTATION); return firstToken; + } // fall though + case 180: break; + case EOL_COMMENT: { + addToken(start,zzStartRead-1, TokenTypes.COMMENT_EOL); addNullToken(); return firstToken; + } // fall though + case 181: break; + case TEXT_BLOCK: { + addToken(start,zzStartRead-1, TokenTypes.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; + } // fall though + case 182: break; + default: + return null; + } + } + else { + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 1: + { + } + // fall through + case 20: break; + case 2: + { addToken(TokenTypes.IDENTIFIER); + } + // fall through + case 21: break; + case 3: + { addToken(TokenTypes.WHITESPACE); + } + // fall through + case 22: break; + case 4: + { addNullToken(); return firstToken; + } + // fall through + case 23: break; + case 5: + { addToken(TokenTypes.ANNOTATION); + } + // fall through + case 24: break; + case 6: + { addToken(start,zzStartRead-1, TokenTypes.COMMENT_MULTILINE); return firstToken; + } + // fall through + case 25: break; + case 7: + { addToken(start,zzStartRead-1, TokenTypes.COMMENT_DOCUMENTATION); return firstToken; + } + // fall through + case 26: break; + case 8: + { addToken(start,zzStartRead-1, TokenTypes.COMMENT_EOL); addNullToken(); return firstToken; + } + // fall through + case 27: break; + case 9: + { addToken(start,zzStartRead-1, TokenTypes.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; + } + // fall through + case 28: break; + case 10: + { /* Skip escaped chars, handles case: '\"""'. */ + } + // fall through + case 29: break; + case 11: + { start = zzMarkedPos-2; yybegin(MLC); + } + // fall through + case 30: break; + case 12: + { start = zzMarkedPos-2; yybegin(EOL_COMMENT); + } + // fall through + case 31: break; + case 13: + { yybegin(YYINITIAL); addToken(start,zzStartRead+1, TokenTypes.COMMENT_MULTILINE); + } + // fall through + case 32: break; + case 14: + { yybegin(YYINITIAL); addToken(start,zzStartRead+1, TokenTypes.COMMENT_DOCUMENTATION); + } + // fall through + case 33: break; + case 15: + { int temp=zzStartRead; addToken(start,zzStartRead-1, TokenTypes.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, TokenTypes.COMMENT_MARKUP); start = zzMarkedPos; + } + // fall through + case 34: break; + case 16: + { start = zzMarkedPos-3; yybegin(DOCCOMMENT); + } + // fall through + case 35: break; + case 17: + { yybegin(YYINITIAL); addToken(start,zzStartRead+2, TokenTypes.LITERAL_STRING_DOUBLE_QUOTE); + } + // fall through + case 36: break; + case 18: + { addToken(TokenTypes.COMMENT_MULTILINE); + } + // fall through + case 37: break; + case 19: + { int temp = zzStartRead; + if (start <= zzStartRead - 1) { + addToken(start,zzStartRead-1, TokenTypes.COMMENT_DOCUMENTATION); + } + addToken(temp,zzMarkedPos-1, TokenTypes.COMMENT_KEYWORD); + start = zzMarkedPos; + } + // fall through + case 38: break; + default: + zzScanError(ZZ_NO_MATCH); + } + } + } + } + + +} diff --git a/src/main/java/istlab/KisoJikken/Test/SimpleTokenMaker.java b/src/main/java/istlab/KisoJikken/Test/SimpleTokenMaker.java index c05bb77..86b5fa2 100644 --- a/src/main/java/istlab/KisoJikken/Test/SimpleTokenMaker.java +++ b/src/main/java/istlab/KisoJikken/Test/SimpleTokenMaker.java @@ -718,9 +718,6 @@ public SimpleTokenMaker(Reader in) { this.zzReader = in; } - // public SimpleTokenMaker(java.io.Reader in) { - // this.zzReader = in; - // } /** diff --git a/src/main/java/istlab/KisoJikken/Test/StyleTestDemo.java b/src/main/java/istlab/KisoJikken/Test/StyleTestDemo.java index acafc6a..4f7e71b 100644 --- a/src/main/java/istlab/KisoJikken/Test/StyleTestDemo.java +++ b/src/main/java/istlab/KisoJikken/Test/StyleTestDemo.java @@ -28,6 +28,7 @@ public class StyleTestDemo extends JFrame { RSyntaxTextArea textArea; + AbstractTokenMakerFactory atmf; public StyleTestDemo() { @@ -38,17 +39,17 @@ // 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"); + 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(); @@ -56,13 +57,15 @@ 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.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)); // 行番号を消す + contentPane.add(new RTextScrollPane(textArea, false)); // 行番号を消す setContentPane(contentPane); setTitle("MySyntax Demo"); @@ -78,8 +81,8 @@ StringBuilder sb = new StringBuilder(); String line; try { - while((line=br.readLine())!=null){ - sb.append(line+"\n"); + while ((line = br.readLine()) != null) { + sb.append(line + "\n"); } } catch (IOException e1) { e1.printStackTrace(); @@ -118,30 +121,29 @@ 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); + 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); - // } ); + // 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) { diff --git a/src/main/java/istlab/KisoJikken/Test/WordTestTokenMaker.java b/src/main/java/istlab/KisoJikken/Test/WordTestTokenMaker.java new file mode 100644 index 0000000..ebff2de --- /dev/null +++ b/src/main/java/istlab/KisoJikken/Test/WordTestTokenMaker.java @@ -0,0 +1,837 @@ +// DO NOT EDIT +// Generated by JFlex 1.8.2 http://jflex.de/ +// source: wordtest.flex + +package istlab.KisoJikken.Test; +//package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.*; +import java.io.InputStreamReader; + + +// See https://github.com/jflex-de/jflex/issues/222 +@SuppressWarnings("FallThrough") +public class WordTestTokenMaker extends AbstractJFlexCTokenMaker { + + /** This character denotes the end of file. */ + public static final int YYEOF = -1; + + /** Initial size of the lookahead buffer. */ + private static final int ZZ_BUFFERSIZE = 16384; + + // Lexical states. + public static final int YYINITIAL = 0; + + /** + * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l + * ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l + * at the beginning of a line + * l is of the form l = 2*k, k a non negative integer + */ + private static final int ZZ_LEXSTATE[] = { + 0, 0 + }; + + /** + * Top-level table for translating characters to character classes + */ + private static final int [] ZZ_CMAP_TOP = zzUnpackcmap_top(); + + private static final String ZZ_CMAP_TOP_PACKED_0 = + "\1\0\37\u0100\1\u0200\267\u0100\10\u0300\u1020\u0100"; + + private static int [] zzUnpackcmap_top() { + int [] result = new int[4352]; + int offset = 0; + offset = zzUnpackcmap_top(ZZ_CMAP_TOP_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackcmap_top(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); + } + return j; + } + + + /** + * Second-level tables for translating characters to character classes + */ + private static final int [] ZZ_CMAP_BLOCKS = zzUnpackcmap_blocks(); + + private static final String ZZ_CMAP_BLOCKS_PACKED_0 = + "\12\0\1\1\3\2\72\0\1\3\34\0\1\4\2\0"+ + "\1\3\3\0\1\5\2\0\1\6\25\0\1\2\u01a2\0"+ + "\2\2\326\0\u0100\2"; + + private static int [] zzUnpackcmap_blocks() { + int [] result = new int[1024]; + int offset = 0; + offset = zzUnpackcmap_blocks(ZZ_CMAP_BLOCKS_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackcmap_blocks(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); + } + return j; + } + + /** + * Translates DFA states to action switch labels. + */ + private static final int [] ZZ_ACTION = zzUnpackAction(); + + private static final String ZZ_ACTION_PACKED_0 = + "\1\0\1\1\1\2\1\1\3\0\1\3"; + + private static int [] zzUnpackAction() { + int [] result = new int[8]; + int offset = 0; + offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAction(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); + } + return j; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\7\0\7\0\16\0\25\0\34\0\43\0\7"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[8]; + int offset = 0; + offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackRowMap(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int high = packed.charAt(i++) << 16; + result[j++] = high | packed.charAt(i++); + } + return j; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\1\2\1\3\1\0\1\4\3\2\13\0\1\5\7\0"+ + "\1\6\6\0\1\7\7\0\1\10"; + + private static int [] zzUnpackTrans() { + int [] result = new int[42]; + int offset = 0; + offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackTrans(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + value--; + do result[j++] = value; while (--count > 0); + } + return j; + } + + + /** Error code for "Unknown internal scanner error". */ + private static final int ZZ_UNKNOWN_ERROR = 0; + /** Error code for "could not match input". */ + private static final int ZZ_NO_MATCH = 1; + /** Error code for "pushback value was too large". */ + private static final int ZZ_PUSHBACK_2BIG = 2; + + /** + * Error messages for {@link #ZZ_UNKNOWN_ERROR}, {@link #ZZ_NO_MATCH}, and + * {@link #ZZ_PUSHBACK_2BIG} respectively. + */ + private static final String ZZ_ERROR_MSG[] = { + "Unknown internal scanner error", + "Error: could not match input", + "Error: pushback value was too large" + }; + + /** + * ZZ_ATTRIBUTE[aState] contains the attributes of state {@code aState} + */ + private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); + + private static final String ZZ_ATTRIBUTE_PACKED_0 = + "\1\0\2\11\1\1\3\0\1\11"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[8]; + int offset = 0; + offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAttribute(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); + } + return j; + } + + /** Input device. */ + private java.io.Reader zzReader; + + /** Current state of the DFA. */ + private int zzState; + + /** Current lexical state. */ + private int zzLexicalState = YYINITIAL; + + /** + * This buffer contains the current text to be matched and is the source of the {@link #yytext()} + * string. + */ + private char zzBuffer[] = new char[ZZ_BUFFERSIZE]; + + /** Text position at the last accepting state. */ + private int zzMarkedPos; + + /** Current text position in the buffer. */ + private int zzCurrentPos; + + /** Marks the beginning of the {@link #yytext()} string in the buffer. */ + private int zzStartRead; + + /** Marks the last character in the buffer, that has been read from input. */ + private int zzEndRead; + + /** + * Whether the scanner is at the end of file. + * @see #yyatEOF + */ + private boolean zzAtEOF; + + /** + * The number of occupied positions in {@link #zzBuffer} beyond {@link #zzEndRead}. + * + *

When a lead/high surrogate has been read from the input stream into the final + * {@link #zzBuffer} position, this will have a value of 1; otherwise, it will have a value of 0. + */ + private int zzFinalHighSurrogate = 0; + + /** Number of newlines encountered up to the start of the matched text. */ + @SuppressWarnings("unused") + private int yyline; + + /** Number of characters from the last newline up to the start of the matched text. */ + @SuppressWarnings("unused") + private int yycolumn; + + /** Number of characters up to the start of the matched text. */ + @SuppressWarnings("unused") + private long yychar; + + /** Whether the scanner is currently at the beginning of a line. */ + @SuppressWarnings("unused") + private boolean zzAtBOL = true; + + /** Whether the user-EOF-code has already been executed. */ + @SuppressWarnings("unused") + private boolean zzEOFDone; + + /* user code: */ + /* フィールドやメソッドはここに書く */ +/* public static void main(String[] args) throws IOException { + new Lexer0(new InputStreamReader(System.in)).yylex(); + } */ + public WordTestTokenMaker(){ + + } + + /** + * Always returns TokenTypes.NULL, as there are no multiline + * tokens in properties files. + * + * @param text The line of tokens to examine. + * @param initialTokenType The token type to start with (i.e., the value + * of getLastTokenTypeOnLine for the line before + * text). + * @return TokenTypes.NULL. + */ + public int getLastTokenTypeOnLine(Segment text, int initialTokenType) { + return TokenTypes.NULL; + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @param link Whether this token is a hyperlink. + */ + private void addToken(int tokenType, boolean link) { + int so = zzStartRead + offsetShift; + super.addToken(zzBuffer, zzStartRead,zzMarkedPos-1, tokenType, so, link); + zzStartRead = zzMarkedPos; + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addHyperlinkToken(int, int, int) + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, false); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + * @param hyperlink Whether this token is a hyperlink. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset, boolean hyperlink) { + super.addToken(array, start,end, tokenType, startOffset, hyperlink); + zzStartRead = zzMarkedPos; + } + + + /** + * Returns the text to place at the beginning and end of a + * line to "comment" it in a this programming language. + * + * @return null, as there are no comments in plain text. + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "//", null }; + } + + + /** + * Always returns false, as you never want "mark occurrences" + * working in plain text files. + * + * @param type The token type. + * @return Whether tokens of this type should have "mark occurrences" + * enabled. + */ + @Override + public boolean getMarkOccurrencesOfTokenType(int type) { + return false; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + s = text; + try { + yyreset(zzReader); + yybegin(YYINITIAL); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * Resets the scanner to read from a new input stream. + * Does not close the old reader. + * + * All internal variables are reset, the old input stream + * cannot be reused (internal buffer is discarded and lost). + * Lexical state is set to YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(java.io.Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + // zzAtBOL = true; + zzAtEOF = false; + } + + + + + /** + * Creates a new scanner + * + * @param in the java.io.Reader to read input from. + */ + public WordTestTokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Translates raw input code points to DFA table row + */ + private static int zzCMap(int input) { + int offset = input & 255; + return offset == input ? ZZ_CMAP_BLOCKS[offset] : ZZ_CMAP_BLOCKS[ZZ_CMAP_TOP[input >> 8] | offset]; + } + + /** + * Refills the input buffer. + * + * @return {@code false} iff there was new input. + * @exception java.io.IOException if any I/O-Error occurs + */ + private boolean zzRefill_GOMI() throws java.io.IOException { + + /* first: make room (if you can) */ + if (zzStartRead > 0) { + zzEndRead += zzFinalHighSurrogate; + zzFinalHighSurrogate = 0; + System.arraycopy(zzBuffer, zzStartRead, + zzBuffer, 0, + zzEndRead - zzStartRead); + + /* translate stored positions */ + zzEndRead -= zzStartRead; + zzCurrentPos -= zzStartRead; + zzMarkedPos -= zzStartRead; + zzStartRead = 0; + } + + /* is the buffer big enough? */ + if (zzCurrentPos >= zzBuffer.length - zzFinalHighSurrogate) { + /* if not: blow it up */ + char newBuffer[] = new char[zzBuffer.length * 2]; + System.arraycopy(zzBuffer, 0, newBuffer, 0, zzBuffer.length); + zzBuffer = newBuffer; + zzEndRead += zzFinalHighSurrogate; + zzFinalHighSurrogate = 0; + } + + /* fill the buffer with new input */ + int requested = zzBuffer.length - zzEndRead; + int numRead = zzReader.read(zzBuffer, zzEndRead, requested); + + /* not supposed to occur according to specification of java.io.Reader */ + if (numRead == 0) { + throw new java.io.IOException( + "Reader returned 0 characters. See JFlex examples/zero-reader for a workaround."); + } + if (numRead > 0) { + zzEndRead += numRead; + if (Character.isHighSurrogate(zzBuffer[zzEndRead - 1])) { + if (numRead == requested) { // We requested too few chars to encode a full Unicode character + --zzEndRead; + zzFinalHighSurrogate = 1; + } else { // There is room in the buffer for at least one more char + int c = zzReader.read(); // Expecting to read a paired low surrogate char + if (c == -1) { + return true; + } else { + zzBuffer[zzEndRead++] = (char)c; + } + } + } + /* potentially more input available */ + return false; + } + + /* numRead < 0 ==> end of stream */ + return true; + } + + + /** + * Closes the input reader. + * + * @throws java.io.IOException if the reader could not be closed. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; // indicate end of file + zzEndRead = zzStartRead; // invalidate buffer + + if (zzReader != null) { + zzReader.close(); + } + } + + + /** + * Resets the scanner to read from a new input stream. + * + *

Does not close the old reader. + * + *

All internal variables are reset, the old input stream cannot be reused (internal + * buffer is discarded and lost). Lexical state is set to {@code ZZ_INITIAL}. + * + *

Internal scan buffer is resized down to its initial length, if it has grown. + * + * @param reader The new input stream. + */ + public final void yyreset_GOMI(java.io.Reader reader) { + zzReader = reader; + zzEOFDone = false; + yyResetPosition(); + zzLexicalState = YYINITIAL; + if (zzBuffer.length > ZZ_BUFFERSIZE) { + zzBuffer = new char[ZZ_BUFFERSIZE]; + } + } + + /** + * Resets the input position. + */ + private final void yyResetPosition() { + zzAtBOL = true; + zzAtEOF = false; + zzCurrentPos = 0; + zzMarkedPos = 0; + zzStartRead = 0; + zzEndRead = 0; + zzFinalHighSurrogate = 0; + yyline = 0; + yycolumn = 0; + yychar = 0L; + } + + + /** + * Returns whether the scanner has reached the end of the reader it reads from. + * + * @return whether the scanner has reached EOF. + */ + public final boolean yyatEOF() { + return zzAtEOF; + } + + + /** + * Returns the current lexical state. + * + * @return the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state. + * + * @param newState the new lexical state + */ + public final void yybegin(int newState) { + zzLexicalState = newState; + } + + + /** + * Returns the text matched by the current regular expression. + * + * @return the matched text. + */ + public final String yytext() { + return new String(zzBuffer, zzStartRead, zzMarkedPos-zzStartRead); + } + + + /** + * Returns the character at the given position from the matched text. + * + *

It is equivalent to {@code yytext().charAt(pos)}, but faster. + * + * @param position the position of the character to fetch. A value from 0 to {@code yylength()-1}. + * + * @return the character at {@code position}. + */ + public final char yycharat(int position) { + return zzBuffer[zzStartRead + position]; + } + + + /** + * How many characters were matched. + * + * @return the length of the matched text region. + */ + public final int yylength() { + return zzMarkedPos-zzStartRead; + } + + + /** + * Reports an error that occurred while scanning. + * + *

In a well-formed scanner (no or only correct usage of {@code yypushback(int)} and a + * match-all fallback rule) this method will only be called with things that + * "Can't Possibly Happen". + * + *

If this method is called, something is seriously wrong (e.g. a JFlex bug producing a faulty + * scanner etc.). + * + *

Usual syntax/scanner level error handling should be done in error fallback rules. + * + * @param errorCode the code of the error message to display. + */ + private static void zzScanError(int errorCode) { + String message; + try { + message = ZZ_ERROR_MSG[errorCode]; + } catch (ArrayIndexOutOfBoundsException e) { + message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; + } + + throw new Error(message); + } + + + /** + * Pushes the specified amount of characters back into the input stream. + * + *

They will be read again by then next call of the scanning method. + * + * @param number the number of characters to be read again. This number must not be greater than + * {@link #yylength()}. + */ + public void yypushback(int number) { + if ( number > yylength() ) + zzScanError(ZZ_PUSHBACK_2BIG); + + zzMarkedPos -= number; + } + + + + + /** + * Resumes scanning until the next regular expression is matched, the end of input is encountered + * or an I/O-Error occurs. + * + * @return the next token. + * @exception java.io.IOException if any I/O-Error occurs. + */ + public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + int zzInput; + int zzAction; + + // cached fields: + int zzCurrentPosL; + int zzMarkedPosL; + int zzEndReadL = zzEndRead; + char[] zzBufferL = zzBuffer; + + int [] zzTransL = ZZ_TRANS; + int [] zzRowMapL = ZZ_ROWMAP; + int [] zzAttrL = ZZ_ATTRIBUTE; + + while (true) { + zzMarkedPosL = zzMarkedPos; + + zzAction = -1; + + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + zzState = ZZ_LEXSTATE[zzLexicalState]; + + // set up zzAction for empty match case: + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + } + + + zzForAction: { + while (true) { + + if (zzCurrentPosL < zzEndReadL) { + zzInput = Character.codePointAt(zzBufferL, zzCurrentPosL, zzEndReadL); + zzCurrentPosL += Character.charCount(zzInput); + } + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; + } + else { + zzInput = zzBufferL[zzCurrentPosL++]; + zzCurrentPosL += Character.charCount(zzInput); + } + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMap(zzInput) ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + switch (zzLexicalState) { + case YYINITIAL: { + addNullToken(); return firstToken; + } // fall though + case 9: break; + default: + return null; + } + } + else { + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 1: + { System.out.print(yytext()); addToken(TokenTypes.IDENTIFIER, false); + } + // fall through + case 4: break; + case 2: + { addNullToken(); return firstToken; + } + // fall through + case 5: break; + case 3: + { addToken(TokenTypes.COMMENT_EOL, false); + } + // fall through + case 6: break; + default: + zzScanError(ZZ_NO_MATCH); + } + } + } + } + + +} diff --git a/src/main/java/istlab/KisoJikken/Test/plaincomment.flex b/src/main/java/istlab/KisoJikken/Test/plaincomment.flex new file mode 100644 index 0000000..70a67f8 --- /dev/null +++ b/src/main/java/istlab/KisoJikken/Test/plaincomment.flex @@ -0,0 +1,341 @@ +/* + * 11/07/2008 + * + * PlainTextTokenMaker.flex - Scanner for plain text files. + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. + * + * https://github.com/bobbylight/RSyntaxTextArea/wiki/Adding-Syntax-Highlighting-for-a-new-Language + * There are two zzRefill() and yyreset() methods + * You need to delete the second of each definition (the ones generated by the lexer) + * 後の2つを消す + * zzInput = zzBufferL[zzCurrentPosL++]; + */ +package istlab.KisoJikken.Test; +//package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * Scanner for plain text files. + * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker), so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

+ * + * The actual algorithm generated for scanning has, of course, not been + * modified.

+ * + * If you wish to regenerate this file yourself, keep in mind the following: + *

+ * + * @author Robert Futrell + * @version 0.5 + * + */ +%% + +%public +%class PlainCommentTokenMaker +%extends AbstractJFlexCTokenMaker +%unicode +%type org.fife.ui.rsyntaxtextarea.Token + +%{ + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public PlainCommentTokenMaker() { + } + + /** + * Always returns TokenTypes.NULL, as there are no multiline + * tokens in properties files. + * + * @param text The line of tokens to examine. + * @param initialTokenType The token type to start with (i.e., the value + * of getLastTokenTypeOnLine for the line before + * text). + * @return TokenTypes.NULL. + */ + public int getLastTokenTypeOnLine(Segment text, int initialTokenType) { + return TokenTypes.NULL; + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @param link Whether this token is a hyperlink. + */ + private void addToken(int tokenType, boolean link) { + int so = zzStartRead + offsetShift; + super.addToken(zzBuffer, zzStartRead,zzMarkedPos-1, tokenType, so, link); + zzStartRead = zzMarkedPos; + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addHyperlinkToken(int, int, int) + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, false); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + * @param hyperlink Whether this token is a hyperlink. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset, boolean hyperlink) { + super.addToken(array, start,end, tokenType, startOffset, hyperlink); + zzStartRead = zzMarkedPos; + } + + + /** + * Returns the text to place at the beginning and end of a + * line to "comment" it in a this programming language. + * + * @return null, as there are no comments in plain text. + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "//", null }; + } + + + /** + * Always returns false, as you never want "mark occurrences" + * working in plain text files. + * + * @param type The token type. + * @return Whether tokens of this type should have "mark occurrences" + * enabled. + */ + @Override + public boolean getMarkOccurrencesOfTokenType(int type) { + return false; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + s = text; + try { + yyreset(zzReader); + yybegin(YYINITIAL); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * Resets the scanner to read from a new input stream. + * Does not close the old reader. + * + * All internal variables are reset, the old input stream + * cannot be reused (internal buffer is discarded and lost). + * Lexical state is set to YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(java.io.Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + // zzAtBOL = true; + zzAtEOF = false; + } + +%} + +LetterOrDigit = ([a-zA-Z0-9]) +Identifier = ({LetterOrDigit}+) +Separator = ([^a-zA-Z0-9 \t\n]) +WhiteSpace = ([ \t]+) +LineTerminator = ([\n]) + + +Letter = ([A-Za-z]) +MLCBegin = "/*" +MLCEnd = "*/" +DocCommentBegin = "/**" +LineCommentBegin = "//" + + +%state MLC +%state DOCCOMMENT +%state EOL_COMMENT +%state TEXT_BLOCK + +%% + + { + {Identifier} { addToken(TokenTypes.IDENTIFIER, false); } + {Separator} { addToken(TokenTypes.IDENTIFIER, false); } + {WhiteSpace} { addToken(TokenTypes.WHITESPACE, false); } + + /* Comment literals. */ + "/**/" { addToken(TokenTypes.COMMENT_MULTILINE); } + {MLCBegin} { start = zzMarkedPos-2; yybegin(MLC); } + {DocCommentBegin} { start = zzMarkedPos-3; yybegin(DOCCOMMENT); } + {LineCommentBegin} { start = zzMarkedPos-2; yybegin(EOL_COMMENT); } + + {LineTerminator} | + <> { addNullToken(); return firstToken; } + /* Catch any other (unhandled) characters and flag them as identifiers. */ +/* . { addToken(TokenTypes.ERROR_IDENTIFIER); } */ +} + + + { + + [^hwf\n\*]+ {} + [hwf] {} + {MLCEnd} { yybegin(YYINITIAL); addToken(start,zzStartRead+1, TokenTypes.COMMENT_MULTILINE); } + \* {} + \n | + <> { addToken(start,zzStartRead-1, TokenTypes.COMMENT_MULTILINE); return firstToken; } + +} + + + { + + [^hwf\@\{\n\<\*]+ {} + [hwf] {} + + "@" {} + "{" {} + \n { addToken(start,zzStartRead-1, TokenTypes.COMMENT_DOCUMENTATION); return firstToken; } + "<"[/]?({Letter}[^\>]*)?">" { int temp=zzStartRead; addToken(start,zzStartRead-1, TokenTypes.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, TokenTypes.COMMENT_MARKUP); start = zzMarkedPos; } + \< {} + {MLCEnd} { yybegin(YYINITIAL); addToken(start,zzStartRead+1, TokenTypes.COMMENT_DOCUMENTATION); } + \* {} + <> { yybegin(YYINITIAL); addToken(start,zzEndRead, TokenTypes.COMMENT_DOCUMENTATION); return firstToken; } + +} + + + { + [^hwf\n]+ {} + [hwf] {} + \n | + <> { addToken(start,zzStartRead-1, TokenTypes.COMMENT_EOL); addNullToken(); return firstToken; } + +} + + { + [^\"\\\n]* {} + \\.? { /* Skip escaped chars, handles case: '\"""'. */ } + \"\"\" { yybegin(YYINITIAL); addToken(start,zzStartRead+2, TokenTypes.LITERAL_STRING_DOUBLE_QUOTE); } + \" {} + \n | + <> { addToken(start,zzStartRead-1, TokenTypes.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } +} + diff --git a/src/main/java/istlab/KisoJikken/Test/plaintext.flex b/src/main/java/istlab/KisoJikken/Test/plaintext.flex index afdda94..9048f54 100644 --- a/src/main/java/istlab/KisoJikken/Test/plaintext.flex +++ b/src/main/java/istlab/KisoJikken/Test/plaintext.flex @@ -10,6 +10,7 @@ * There are two zzRefill() and yyreset() methods * You need to delete the second of each definition (the ones generated by the lexer) * 後の2つを消す + * zzInput = zzBufferL[zzCurrentPosL++]; */ package istlab.KisoJikken.Test; //package org.fife.ui.rsyntaxtextarea.modes; @@ -62,7 +63,7 @@ %public %class PlainTextTokenMaker -%extends AbstractJFlexTokenMaker +%extends AbstractJFlexCTokenMaker %unicode %type org.fife.ui.rsyntaxtextarea.Token @@ -115,7 +116,7 @@ private void addToken(int tokenType) { addToken(zzStartRead, zzMarkedPos-1, tokenType); } - + /** * Adds the token specified to the current linked list of tokens. * @@ -273,6 +274,7 @@ DocCommentBegin = "/**" LineCommentBegin = "//" +/* URLGenDelim = ([:\/\?#\[\]@]) URLSubDelim = ([\!\$&'\(\)\*\+,;=]) URLUnreserved = ({LetterOrDigit}|[_\-\.\~]) @@ -280,6 +282,7 @@ URLCharacters = ({URLCharacter}*) URLEndCharacter = ([\/\$]|{LetterOrDigit}) URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) +*/ %state MLC %state DOCCOMMENT @@ -289,7 +292,7 @@ %% { - {URL} { addToken(TokenTypes.IDENTIFIER, true); } +/* {URL} { addToken(TokenTypes.IDENTIFIER, true); } */ {Identifier} { addToken(TokenTypes.IDENTIFIER, false); } {Separator} { addToken(TokenTypes.IDENTIFIER, false); } {WhiteSpace} { addToken(TokenTypes.WHITESPACE, false); } @@ -309,7 +312,7 @@ { [^hwf\n\*]+ {} - {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, TokenTypes.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, TokenTypes.COMMENT_MULTILINE); start = zzMarkedPos; } +/* {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, TokenTypes.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, TokenTypes.COMMENT_MULTILINE); start = zzMarkedPos; }*/ [hwf] {} {MLCEnd} { yybegin(YYINITIAL); addToken(start,zzStartRead+1, TokenTypes.COMMENT_MULTILINE); } @@ -323,14 +326,14 @@ { [^hwf\@\{\n\<\*]+ {} - {URL} { +/* {URL} { int temp = zzStartRead; if (start <= zzStartRead - 1) { addToken(start,zzStartRead-1, TokenTypes.COMMENT_DOCUMENTATION); } addHyperlinkToken(temp,zzMarkedPos-1, TokenTypes.COMMENT_DOCUMENTATION); start = zzMarkedPos; - } + } */ [hwf] {} "@" {} @@ -347,7 +350,7 @@ { [^hwf\n]+ {} - {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, TokenTypes.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, TokenTypes.COMMENT_EOL); start = zzMarkedPos; } +/* {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, TokenTypes.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, TokenTypes.COMMENT_EOL); start = zzMarkedPos; } */ [hwf] {} \n | <> { addToken(start,zzStartRead-1, TokenTypes.COMMENT_EOL); addNullToken(); return firstToken; } diff --git a/src/main/java/istlab/KisoJikken/Test/simple2.flex b/src/main/java/istlab/KisoJikken/Test/simple2.flex new file mode 100644 index 0000000..51acd44 --- /dev/null +++ b/src/main/java/istlab/KisoJikken/Test/simple2.flex @@ -0,0 +1,416 @@ +/* + * 11/13/2004 + * + * SimpleTokenMaker.java - Scanner for the Java programming language. + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. + */ +// package org.fife.ui.rsyntaxtextarea.modes; +package istlab.KisoJikken.Test; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * Scanner for the Java programming language.

+ * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker), so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

+ * + * The actual algorithm generated for scanning has, of course, not been + * modified.

+ * + * If you wish to regenerate this file yourself, keep in mind the following: + *

    + *
  • The generated JavaTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
  • + *
  • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
  • + *
  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
  • + *
+ * + * @author Robert Futrell + * @version 1.0 + * + */ +%% + +%public +%class Simple2TokenMaker +%extends AbstractJFlexCTokenMaker +%unicode +%type org.fife.ui.rsyntaxtextarea.Token + + +%{ + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public Simple2TokenMaker() { + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addHyperlinkToken(int, int, int) + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, false); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + * @param hyperlink Whether this token is a hyperlink. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, + int startOffset, boolean hyperlink) { + super.addToken(array, start,end, tokenType, startOffset, hyperlink); + zzStartRead = zzMarkedPos; + } + + + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "//", null }; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state; + switch (initialTokenType) { + case TokenTypes.COMMENT_MULTILINE: + state = MLC; + start = text.offset; + break; + case TokenTypes.COMMENT_DOCUMENTATION: + state = DOCCOMMENT; + start = text.offset; + break; + case TokenTypes.LITERAL_STRING_DOUBLE_QUOTE: + state = TEXT_BLOCK; + start = text.offset; + break; + default: + state = YYINITIAL; + } + + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * Resets the scanner to read from a new input stream. + * Does not close the old reader. + * + * All internal variables are reset, the old input stream + * cannot be reused (internal buffer is discarded and lost). + * Lexical state is set to YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtBOL = true; + zzAtEOF = false; + } + + +%} + +Letter = ([A-Za-z]) +LetterOrUnderscore = ({Letter}|"_") +NonzeroDigit = ([1-9]) +BinaryDigit = ([0-1]) +Digit = ("0"|{NonzeroDigit}) +HexDigit = ({Digit}|[A-Fa-f]) +OctalDigit = ([0-7]) +AnyCharacterButApostropheOrBackSlash = ([^\\']) +AnyCharacterButDoubleQuoteOrBackSlash = ([^\\\"\n]) +EscapedSourceCharacter = ("u"{HexDigit}{HexDigit}{HexDigit}{HexDigit}) +Escape = ("\\"(([bstnfr\"'\\])|([0123]{OctalDigit}?{OctalDigit}?)|({OctalDigit}{OctalDigit}?)|{EscapedSourceCharacter})) +NonSeparator = ([^\t\f\r\n\ \(\)\{\}\[\]\;\,\.\=\>\<\!\~\?\:\+\-\*\/\&\|\^\%\"\']|"#"|"\\") +IdentifierStart = ([:jletter:]) +IdentifierPart = ([:jletterdigit:]|("\\"{EscapedSourceCharacter})) + +LineTerminator = (\n) +WhiteSpace = ([ \t\f]) + +CharLiteral = ([\']({AnyCharacterButApostropheOrBackSlash}|{Escape})[\']) +UnclosedCharLiteral = ([\'][^\'\n]*) +ErrorCharLiteral = ({UnclosedCharLiteral}[\']) +StringLiteral = ([\"]({AnyCharacterButDoubleQuoteOrBackSlash}|{Escape})*[\"]) +UnclosedStringLiteral = ([\"]([\\].|[^\\\"])*[^\"]?) +ErrorStringLiteral = ({UnclosedStringLiteral}[\"]) + +MLCBegin = "/*" +MLCEnd = "*/" +DocCommentBegin = "/**" +LineCommentBegin = ("//"|"===") +CommandEcho = ">\ "([^\n\)]+) + +DigitOrUnderscore = ({Digit}|[_]) +DigitsAndUnderscoresEnd = ({DigitOrUnderscore}*{Digit}) +IntegerHelper = (({NonzeroDigit}{DigitsAndUnderscoresEnd}?)|"0") +IntegerLiteral = ({IntegerHelper}[lL]?) + +BinaryDigitOrUnderscore = ({BinaryDigit}|[_]) +BinaryDigitsAndUnderscores = ({BinaryDigit}({BinaryDigitOrUnderscore}*{BinaryDigit})?) +BinaryLiteral = ("0"[bB]{BinaryDigitsAndUnderscores}) + +HexDigitOrUnderscore = ({HexDigit}|[_]) +HexDigitsAndUnderscores = ({HexDigit}({HexDigitOrUnderscore}*{HexDigit})?) +OctalDigitOrUnderscore = ({OctalDigit}|[_]) +OctalDigitsAndUnderscoresEnd= ({OctalDigitOrUnderscore}*{OctalDigit}) +HexHelper = ("0"(([xX]{HexDigitsAndUnderscores})|({OctalDigitsAndUnderscoresEnd}))) +HexLiteral = ({HexHelper}[lL]?) + +FloatHelper1 = ([fFdD]?) +FloatHelper2 = ([eE][+-]?{Digit}+{FloatHelper1}) +FloatLiteral1 = ({Digit}+"."({FloatHelper1}|{FloatHelper2}|{Digit}+({FloatHelper1}|{FloatHelper2}))) +FloatLiteral2 = ("."{Digit}+({FloatHelper1}|{FloatHelper2})) +FloatLiteral3 = ({Digit}+{FloatHelper2}) +FloatLiteral = ({FloatLiteral1}|{FloatLiteral2}|{FloatLiteral3}|({Digit}+[fFdD])) + +ErrorNumberFormat = (({IntegerLiteral}|{HexLiteral}|{FloatLiteral}){NonSeparator}+) +BooleanLiteral = ("true"|"false") + +Separator = ([\(\)\{\}\[\]]) +Separator2 = ([\;,.]) + +NonAssignmentOperator = ("+"|"-"|"<="|"^"|"++"|"<"|"*"|">="|"%"|"--"|">"|"/"|"!="|"?"|">>"|"!"|"&"|"=="|":"|">>"|"~"|"|"|"&&"|">>>") +AssignmentOperator = ("="|"-="|"*="|"/="|"|="|"&="|"^="|"+="|"%="|"<<="|">>="|">>>=") +Operator = ({NonAssignmentOperator}|{AssignmentOperator}) + +CurrentBlockTag = ("author"|"deprecated"|"exception"|"param"|"return"|"see"|"serial"|"serialData"|"serialField"|"since"|"throws"|"version") +ProposedBlockTag = ("category"|"example"|"tutorial"|"index"|"exclude"|"todo"|"internal"|"obsolete"|"threadsafety") +BlockTag = ({CurrentBlockTag}|{ProposedBlockTag}) +InlineTag = ("code"|"docRoot"|"inheritDoc"|"link"|"linkplain"|"literal"|"value") + +Identifier = ({IdentifierStart}{IdentifierPart}*) +ErrorIdentifier = ({NonSeparator}+) + +Annotation = ("@"{Identifier}?) + +URLGenDelim = ([:\/\?#\[\]@]) +URLSubDelim = ([\!\$&'\(\)\*\+,;=]) +URLUnreserved = ({LetterOrUnderscore}|{Digit}|[\-\.\~]) +URLCharacter = ({URLGenDelim}|{URLSubDelim}|{URLUnreserved}|[%]) +URLCharacters = ({URLCharacter}*) +URLEndCharacter = ([\/\$]|{Letter}|{Digit}) +/* URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) */ + + +%state MLC +%state DOCCOMMENT +%state EOL_COMMENT +%state TEXT_BLOCK + +%% + + { + + {LineTerminator} { addNullToken(); return firstToken; } + + {WhiteSpace}+ { addToken(TokenTypes.WHITESPACE); } + + {CommandEcho} { addToken(TokenTypes.ANNOTATION); } + + /* Comment literals. */ + "/**/" { addToken(TokenTypes.COMMENT_MULTILINE); } + {MLCBegin} { start = zzMarkedPos-2; yybegin(MLC); } + {DocCommentBegin} { start = zzMarkedPos-3; yybegin(DOCCOMMENT); } + {LineCommentBegin} { start = zzMarkedPos-2; yybegin(EOL_COMMENT); } + + /* Annotations. */ + {Annotation} { addToken(TokenTypes.ANNOTATION); } + + /* Ended with a line not in a string or comment. */ + <> { addNullToken(); return firstToken; } + + /* Catch any other (unhandled) characters and flag them as identifiers. */ + . { addToken(TokenTypes.IDENTIFIER); } + "/*.java" { addToken(TokenTypes.IDENTIFIER); } + +} + + + { + + [^hwf\n\*]+ {} +/* {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, TokenTypes.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, TokenTypes.COMMENT_MULTILINE); start = zzMarkedPos; }*/ + [hwf] {} + + {MLCEnd} { yybegin(YYINITIAL); addToken(start,zzStartRead+1, TokenTypes.COMMENT_MULTILINE); } + \* {} + \n | + <> { addToken(start,zzStartRead-1, TokenTypes.COMMENT_MULTILINE); return firstToken; } + +} + + + { + + [^hwf\@\{\n\<\*]+ {} +/* {URL} { + int temp = zzStartRead; + if (start <= zzStartRead - 1) { + addToken(start,zzStartRead-1, TokenTypes.COMMENT_DOCUMENTATION); + } + addHyperlinkToken(temp,zzMarkedPos-1, TokenTypes.COMMENT_DOCUMENTATION); + start = zzMarkedPos; + }*/ + [hwf] {} + + "@"{BlockTag} { + int temp = zzStartRead; + if (start <= zzStartRead - 1) { + addToken(start,zzStartRead-1, TokenTypes.COMMENT_DOCUMENTATION); + } + addToken(temp,zzMarkedPos-1, TokenTypes.COMMENT_KEYWORD); + start = zzMarkedPos; + } + "@" {} + "{@"{InlineTag}[^\}]*"}" { + int temp = zzStartRead; + if (start <= zzStartRead - 1) { + addToken(start,zzStartRead-1, TokenTypes.COMMENT_DOCUMENTATION); + } + addToken(temp,zzMarkedPos-1, TokenTypes.COMMENT_KEYWORD); + start = zzMarkedPos; + } + "{" {} + \n { addToken(start,zzStartRead-1, TokenTypes.COMMENT_DOCUMENTATION); return firstToken; } + "<"[/]?({Letter}[^\>]*)?">" { int temp=zzStartRead; addToken(start,zzStartRead-1, TokenTypes.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, TokenTypes.COMMENT_MARKUP); start = zzMarkedPos; } + \< {} + {MLCEnd} { yybegin(YYINITIAL); addToken(start,zzStartRead+1, TokenTypes.COMMENT_DOCUMENTATION); } + \* {} + <> { yybegin(YYINITIAL); addToken(start,zzEndRead, TokenTypes.COMMENT_DOCUMENTATION); return firstToken; } + +} + + + { + [^hwf\n]+ {} +/* {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, TokenTypes.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, TokenTypes.COMMENT_EOL); start = zzMarkedPos; } +*/ + [hwf] {} + \n | + <> { addToken(start,zzStartRead-1, TokenTypes.COMMENT_EOL); addNullToken(); return firstToken; } + +} + + { + [^\"\\\n]* {} + \\.? { /* Skip escaped chars, handles case: '\"""'. */ } + \"\"\" { yybegin(YYINITIAL); addToken(start,zzStartRead+2, TokenTypes.LITERAL_STRING_DOUBLE_QUOTE); } + \" {} + \n | + <> { addToken(start,zzStartRead-1, TokenTypes.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } +} diff --git a/src/main/java/istlab/KisoJikken/Test/wordtest.flex b/src/main/java/istlab/KisoJikken/Test/wordtest.flex new file mode 100644 index 0000000..59602a0 --- /dev/null +++ b/src/main/java/istlab/KisoJikken/Test/wordtest.flex @@ -0,0 +1,220 @@ +package istlab.KisoJikken.Test; +//package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.*; +import java.io.InputStreamReader; + +%% + +// 生成するクラスの名前 +%public +%class WordTestTokenMaker +%extends AbstractJFlexCTokenMaker +%unicode +%type org.fife.ui.rsyntaxtextarea.Token + + +%{ + /* フィールドやメソッドはここに書く */ +/* public static void main(String[] args) throws IOException { + new Lexer0(new InputStreamReader(System.in)).yylex(); + } */ + public WordTestTokenMaker(){ + + } + + /** + * Always returns TokenTypes.NULL, as there are no multiline + * tokens in properties files. + * + * @param text The line of tokens to examine. + * @param initialTokenType The token type to start with (i.e., the value + * of getLastTokenTypeOnLine for the line before + * text). + * @return TokenTypes.NULL. + */ + public int getLastTokenTypeOnLine(Segment text, int initialTokenType) { + return TokenTypes.NULL; + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @param link Whether this token is a hyperlink. + */ + private void addToken(int tokenType, boolean link) { + int so = zzStartRead + offsetShift; + super.addToken(zzBuffer, zzStartRead,zzMarkedPos-1, tokenType, so, link); + zzStartRead = zzMarkedPos; + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addHyperlinkToken(int, int, int) + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, false); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + * @param hyperlink Whether this token is a hyperlink. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset, boolean hyperlink) { + super.addToken(array, start,end, tokenType, startOffset, hyperlink); + zzStartRead = zzMarkedPos; + } + + + /** + * Returns the text to place at the beginning and end of a + * line to "comment" it in a this programming language. + * + * @return null, as there are no comments in plain text. + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "//", null }; + } + + + /** + * Always returns false, as you never want "mark occurrences" + * working in plain text files. + * + * @param type The token type. + * @return Whether tokens of this type should have "mark occurrences" + * enabled. + */ + @Override + public boolean getMarkOccurrencesOfTokenType(int type) { + return false; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + s = text; + try { + yyreset(zzReader); + yybegin(YYINITIAL); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * Resets the scanner to read from a new input stream. + * Does not close the old reader. + * + * All internal variables are reset, the old input stream + * cannot be reused (internal buffer is discarded and lost). + * Lexical state is set to YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(java.io.Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + // zzAtBOL = true; + zzAtEOF = false; + } + + +%} + + LineTerminator = ([\n]) + +%% + + { + /* ここに動作記述を書く。*/ + /* yytext()はマッチした文字列を返すメソッド */ + [hH]ello { addToken(TokenTypes.COMMENT_EOL, false); } + . { System.out.print(yytext()); addToken(TokenTypes.IDENTIFIER, false); } /* その他の文字はそのまま出力 */ + + {LineTerminator}| + <> { addNullToken(); return firstToken; } +} \ No newline at end of file