%% %{ /* * Arabic Unicode to Buckwalter+ conversion * v. 0.9, Malcolm D. Hyman, 2002-11-12 * [this is a jflex specification] */ static public String ALPHA_TABLE = "'|>&<}AbptvjHxd*rzs$SDTZEg _fqklmnhwYy"; static public String POINT_TABLE = "FNKaui~o"; %} %class BuckwalterUnicodeLex %public %implements Lex %yylexthrow LexException %type java.lang.Character %unicode %char LETTER = [\u0621-\u063a\u0640-\u064a] POINT = [\u064b-\u0652] %% {LETTER} { return new Character(ALPHA_TABLE.charAt(yycharat(0) - 0x0621)); } {POINT} { return new Character(POINT_TABLE.charAt(yycharat(0) - 0x064b)); } \u0670 { // DAGGER ALIF return new Character('`'); } \u0671 { // WASLA-ON-ALIF return new Character('{'); } \u060c { // ARABIC COMMA return new Character(','); } \u061b { // ARABIC SEMICOLON return new Character(';'); } \u061f { // ARABIC QUESTION MARK return new Character('?'); } .|\n { return new Character(yycharat(0)); }