diff options
Diffstat (limited to 'libjava/gnu/xml/xpath/XPathTokenizer.java')
-rw-r--r-- | libjava/gnu/xml/xpath/XPathTokenizer.java | 592 |
1 files changed, 0 insertions, 592 deletions
diff --git a/libjava/gnu/xml/xpath/XPathTokenizer.java b/libjava/gnu/xml/xpath/XPathTokenizer.java deleted file mode 100644 index a287137827b..00000000000 --- a/libjava/gnu/xml/xpath/XPathTokenizer.java +++ /dev/null @@ -1,592 +0,0 @@ -/* XPathTokenizer.java -- - Copyright (C) 2004 Free Software Foundation, Inc. - -This file is part of GNU Classpath. - -GNU Classpath is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -GNU Classpath is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GNU Classpath; see the file COPYING. If not, write to the -Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -02110-1301 USA. - -Linking this library statically or dynamically with other modules is -making a combined work based on this library. Thus, the terms and -conditions of the GNU General Public License cover the whole -combination. - -As a special exception, the copyright holders of this library give you -permission to link this library with independent modules to produce an -executable, regardless of the license terms of these independent -modules, and to copy and distribute the resulting executable under -terms of your choice, provided that you also meet, for each linked -independent module, the terms and conditions of the license of that -module. An independent module is a module which is not derived from -or based on this library. If you modify this library, you may extend -this exception to your version of the library, but you are not -obligated to do so. If you do not wish to do so, delete this -exception statement from your version. */ - -package gnu.xml.xpath; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.Reader; -import java.io.StringReader; -import java.util.Map; -import java.util.TreeMap; - -/*import antlr.Token; -import antlr.TokenStream; -import antlr.TokenStreamException; -import antlr.TokenStreamIOException;*/ - -/** - * XPath 1.0 expression tokenizer. - * - * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a> - */ -public class XPathTokenizer -implements XPathParser.yyInput -//implements TokenStream -{ - - static class XPathToken - //extends Token - { - - int type; - String val; - - XPathToken (int type) - { - this (type, null); - } - - XPathToken (int type, String val) - { - //super (type); - this.type = type; - this.val = val; - } - - public String getText () - { - return val; - } - - public String toString () - { - return val; - } - - } - - static final Map keywords = new TreeMap (); - static - { - keywords.put ("ancestor", new Integer (XPathParser.ANCESTOR)); - keywords.put ("ancestor-or-self", new Integer (XPathParser.ANCESTOR_OR_SELF)); - keywords.put ("attribute", new Integer (XPathParser.ATTRIBUTE)); - keywords.put ("child", new Integer (XPathParser.CHILD)); - keywords.put ("descendant", new Integer (XPathParser.DESCENDANT)); - keywords.put ("descendant-or-self", new Integer (XPathParser.DESCENDANT_OR_SELF)); - keywords.put ("following", new Integer (XPathParser.FOLLOWING)); - keywords.put ("following-sibling", new Integer (XPathParser.FOLLOWING_SIBLING)); - keywords.put ("namespace", new Integer (XPathParser.NAMESPACE)); - keywords.put ("parent", new Integer (XPathParser.PARENT)); - keywords.put ("preceding", new Integer (XPathParser.PRECEDING)); - keywords.put ("preceding-sibling", new Integer (XPathParser.PRECEDING_SIBLING)); - keywords.put ("self", new Integer (XPathParser.SELF)); - keywords.put ("div", new Integer (XPathParser.DIV)); - keywords.put ("mod", new Integer (XPathParser.MOD)); - keywords.put ("or", new Integer (XPathParser.OR)); - keywords.put ("and", new Integer (XPathParser.AND)); - keywords.put ("comment", new Integer (XPathParser.COMMENT)); - keywords.put ("processing-instruction", new Integer (XPathParser.PROCESSING_INSTRUCTION)); - keywords.put ("text", new Integer (XPathParser.TEXT)); - keywords.put ("node", new Integer (XPathParser.NODE)); - } - - Reader in; - XPathToken token; - XPathToken lastToken; - - public XPathTokenizer (String expr) - { - this (new StringReader (expr)); - } - - XPathTokenizer (Reader in) - { - this.in = in.markSupported () ? in : new BufferedReader (in); - } - - /* Begin ANTLR specific * - - public Token nextToken () - throws TokenStreamException - { - try - { - if (!advance ()) - { - throw new TokenStreamException ("eof"); - } - token (); - return token; - } - catch (IOException e) - { - throw new TokenStreamIOException (e); - } - } - - * End ANTLR specific */ - - public boolean advance () - throws IOException - { - lastToken = token; - int c = in.read (); - switch (c) - { - case -1: // eof - return false; - case 0x20: - case 0x09: - case 0x0d: - case 0x0a: // skip whitespace - return advance (); - case 0x22: // " - case 0x27: // ' - token = consume_literal (c); - break; - case 0x28: // ( - token = new XPathToken (XPathParser.LP); - break; - case 0x29: // ) - token = new XPathToken (XPathParser.RP); - break; - case 0x5b: // [ - token = new XPathToken (XPathParser.LB); - break; - case 0x5d: // ] - token = new XPathToken (XPathParser.RB); - break; - case 0x2c: // , - token = new XPathToken (XPathParser.COMMA); - break; - case 0x7c: // | - token = new XPathToken (XPathParser.PIPE); - break; - case 0x2f: // / - in.mark (1); - int d1 = in.read (); - if (d1 == 0x2f) - { - token = new XPathToken (XPathParser.DOUBLE_SLASH); - } - else - { - in.reset (); - token = new XPathToken (XPathParser.SLASH); - } - break; - case 0x3d: // = - token = new XPathToken (XPathParser.EQ); - break; - case 0x21: // ! - in.mark (1); - int d2 = in.read (); - if (d2 == 0x3d) // = - { - token = new XPathToken (XPathParser.NE); - } - else - { - in.reset (); - token = new XPathToken (XPathParser.yyErrorCode); - } - break; - case 0x3e: // > - in.mark (1); - int d3 = in.read (); - if (d3 == 0x3d) // = - { - token = new XPathToken (XPathParser.GTE); - } - else - { - in.reset (); - token = new XPathToken (XPathParser.GT); - } - break; - case 0x3c: // < - in.mark (1); - int d4 = in.read (); - if (d4 == 0x3d) // = - { - token = new XPathToken (XPathParser.LTE); - } - else - { - in.reset (); - token = new XPathToken (XPathParser.LT); - } - break; - case 0x2b: // + - token = new XPathToken (XPathParser.PLUS); - break; - case 0x2d: // - - token = new XPathToken (XPathParser.MINUS); - break; - case 0x40: // @ - token = new XPathToken (XPathParser.AT); - break; - case 0x2a: // * - token = new XPathToken (XPathParser.STAR); - break; - case 0x24: // $ - token = new XPathToken (XPathParser.DOLLAR); - break; - case 0x3a: // : - in.mark (1); - int d5 = in.read (); - if (d5 == 0x3a) - { - token = new XPathToken (XPathParser.DOUBLE_COLON); - } - else - { - in.reset (); - token = new XPathToken (XPathParser.COLON); - } - break; - case 0x2e: // . - in.mark (1); - int d6 = in.read (); - if (d6 == 0x2e) - { - token = new XPathToken (XPathParser.DOUBLE_DOT); - } - else - { - in.reset (); - token = new XPathToken (XPathParser.DOT); - } - break; - default: - if (c >= 0x30 && c <= 0x39) - { - token = consume_digits (c); - } - else if (c == 0x5f || Character.isLetter ((char) c)) - { - token = consume_name (c); - } - else - { - token = new XPathToken (XPathParser.yyErrorCode); - } - } - return true; - } - - public int token () - { - return token.type; - } - - public Object value () - { - return token.val; - } - - XPathToken consume_literal (int delimiter) - throws IOException - { - StringBuffer buf = new StringBuffer (); - while (true) - { - int c = in.read (); - if (c == -1) - { - return new XPathToken (XPathParser.yyErrorCode); - } - else if (c == delimiter) - { - return new XPathToken (XPathParser.LITERAL, buf.toString ()); - } - else - { - buf.append ((char) c); - } - } - } - - XPathToken consume_digits (int c) - throws IOException - { - StringBuffer buf = new StringBuffer (); - buf.append ((char) c); - while (true) - { - in.mark (1); - c = in.read (); - if (c >= 0x30 && c <= 0x39) - { - buf.append ((char) c); - } - else - { - in.reset (); - return new XPathToken (XPathParser.DIGITS, buf.toString ()); - } - } - } - - XPathToken consume_name (int c) - throws IOException - { - StringBuffer buf = new StringBuffer (); - buf.append ((char) c); - while (true) - { - in.mark (1); - c = in.read (); - if (isNameChar (c)) - { - buf.append ((char) c); - } - else - { - in.reset (); - String name = buf.toString (); - Integer keyword = (Integer) keywords.get (name); - if (keyword == null) - { - return new XPathToken (XPathParser.NAME, name); - } - else - { - int val = keyword.intValue (); - switch (val) - { - case XPathParser.NODE: - case XPathParser.COMMENT: - case XPathParser.TEXT: - case XPathParser.PROCESSING_INSTRUCTION: - // Consume subsequent ( - in.mark (1); - do - { - c = in.read (); - } - while (c == 0x20 || c == 0x09); - if (c != 0x28) - { - in.reset (); - return new XPathToken (XPathParser.NAME, name); - } - break; - case XPathParser.CHILD: - case XPathParser.PARENT: - case XPathParser.SELF: - case XPathParser.DESCENDANT: - case XPathParser.ANCESTOR: - case XPathParser.DESCENDANT_OR_SELF: - case XPathParser.ANCESTOR_OR_SELF: - case XPathParser.ATTRIBUTE: - case XPathParser.NAMESPACE: - case XPathParser.FOLLOWING: - case XPathParser.FOLLOWING_SIBLING: - case XPathParser.PRECEDING: - case XPathParser.PRECEDING_SIBLING: - // Check that this is an axis specifier - in.mark(1); - do - { - c = in.read(); - } - while (c == 0x20 || c == 0x09); - if (c == 0x3a) - { - c = in.read(); - if (c == 0x3a) - { - in.reset(); - return new XPathToken(val); - } - } - in.reset(); - return new XPathToken(XPathParser.NAME, name); - case XPathParser.DIV: - case XPathParser.MOD: - // May be a name - if (lastToken == null) - { - return new XPathToken(XPathParser.NAME, name); - } - switch (lastToken.type) - { - case XPathParser.LP: - case XPathParser.LB: - case XPathParser.COMMA: - case XPathParser.PIPE: - case XPathParser.EQ: - case XPathParser.NE: - case XPathParser.GT: - case XPathParser.LT: - case XPathParser.GTE: - case XPathParser.LTE: - case XPathParser.PLUS: - case XPathParser.MINUS: - case XPathParser.STAR: - case XPathParser.AT: - case XPathParser.DOLLAR: - case XPathParser.COLON: - case XPathParser.DOUBLE_COLON: - case XPathParser.DIV: - case XPathParser.MOD: - case XPathParser.OR: - case XPathParser.AND: - case XPathParser.SLASH: - return new XPathToken(XPathParser.NAME, name); - } - break; - } - return new XPathToken (val); - } - } - } - } - - boolean isNameChar (int c) - { - /* Name */ - return (c == 0x5f - || c == 0x2d - || c == 0x2e - || (c >= 0x30 && c <= 0x39) - /* CombiningChar */ - || (c >= 0x0300 && c <= 0x0345) - || (c >= 0x0360 && c <= 0x0361) - || (c >= 0x0483 && c <= 0x0486) - || (c >= 0x0591 && c <= 0x05A1) - || (c >= 0x05A3 && c <= 0x05B9) - || (c >= 0x05BB && c <= 0x05BD) - || c == 0x05BF - || (c >= 0x05C1 && c <= 0x05C2) - || c == 0x05C4 - || (c >= 0x064B && c <= 0x0652) - || c == 0x0670 - || (c >= 0x06D6 && c <= 0x06DC) - || (c >= 0x06DD && c <= 0x06DF) - || (c >= 0x06E0 && c <= 0x06E4) - || (c >= 0x06E7 && c <= 0x06E8) - || (c >= 0x06EA && c <= 0x06ED) - || (c >= 0x0901 && c <= 0x0903) - || c == 0x093C - || (c >= 0x093E && c <= 0x094C) - || c == 0x094D - || (c >= 0x0951 && c <= 0x0954) - || (c >= 0x0962 && c <= 0x0963) - || (c >= 0x0981 && c <= 0x0983) - || c == 0x09BC - || c == 0x09BE - || c == 0x09BF - || (c >= 0x09C0 && c <= 0x09C4) - || (c >= 0x09C7 && c <= 0x09C8) - || (c >= 0x09CB && c <= 0x09CD) - || c == 0x09D7 - || (c >= 0x09E2 && c <= 0x09E3) - || c == 0x0A02 - || c == 0x0A3C - || c == 0x0A3E - || c == 0x0A3F - || (c >= 0x0A40 && c <= 0x0A42) - || (c >= 0x0A47 && c <= 0x0A48) - || (c >= 0x0A4B && c <= 0x0A4D) - || (c >= 0x0A70 && c <= 0x0A71) - || (c >= 0x0A81 && c <= 0x0A83) - || c == 0x0ABC - || (c >= 0x0ABE && c <= 0x0AC5) - || (c >= 0x0AC7 && c <= 0x0AC9) - || (c >= 0x0ACB && c <= 0x0ACD) - || (c >= 0x0B01 && c <= 0x0B03) - || c == 0x0B3C - || (c >= 0x0B3E && c <= 0x0B43) - || (c >= 0x0B47 && c <= 0x0B48) - || (c >= 0x0B4B && c <= 0x0B4D) - || (c >= 0x0B56 && c <= 0x0B57) - || (c >= 0x0B82 && c <= 0x0B83) - || (c >= 0x0BBE && c <= 0x0BC2) - || (c >= 0x0BC6 && c <= 0x0BC8) - || (c >= 0x0BCA && c <= 0x0BCD) - || c == 0x0BD7 - || (c >= 0x0C01 && c <= 0x0C03) - || (c >= 0x0C3E && c <= 0x0C44) - || (c >= 0x0C46 && c <= 0x0C48) - || (c >= 0x0C4A && c <= 0x0C4D) - || (c >= 0x0C55 && c <= 0x0C56) - || (c >= 0x0C82 && c <= 0x0C83) - || (c >= 0x0CBE && c <= 0x0CC4) - || (c >= 0x0CC6 && c <= 0x0CC8) - || (c >= 0x0CCA && c <= 0x0CCD) - || (c >= 0x0CD5 && c <= 0x0CD6) - || (c >= 0x0D02 && c <= 0x0D03) - || (c >= 0x0D3E && c <= 0x0D43) - || (c >= 0x0D46 && c <= 0x0D48) - || (c >= 0x0D4A && c <= 0x0D4D) - || c == 0x0D57 - || c == 0x0E31 - || (c >= 0x0E34 && c <= 0x0E3A) - || (c >= 0x0E47 && c <= 0x0E4E) - || c == 0x0EB1 - || (c >= 0x0EB4 && c <= 0x0EB9) - || (c >= 0x0EBB && c <= 0x0EBC) - || (c >= 0x0EC8 && c <= 0x0ECD) - || (c >= 0x0F18 && c <= 0x0F19) - || c == 0x0F35 - || c == 0x0F37 - || c == 0x0F39 - || c == 0x0F3E - || c == 0x0F3F - || (c >= 0x0F71 && c <= 0x0F84) - || (c >= 0x0F86 && c <= 0x0F8B) - || (c >= 0x0F90 && c <= 0x0F95) - || c == 0x0F97 - || (c >= 0x0F99 && c <= 0x0FAD) - || (c >= 0x0FB1 && c <= 0x0FB7) - || c == 0x0FB9 - || (c >= 0x20D0 && c <= 0x20DC) - || c == 0x20E1 - || (c >= 0x302A && c <= 0x302F) - || c == 0x3099 - || c == 0x309A - /* Extender */ - || c == 0x00B7 - || c == 0x02D0 - || c == 0x02D1 - || c == 0x0387 - || c == 0x0640 - || c == 0x0E46 - || c == 0x0EC6 - || c == 0x3005 - || (c >= 0x3031 && c <= 0x3035) - || (c >= 0x309D && c <= 0x309E) - || (c >= 0x30FC && c <= 0x30FE) - /* Name */ - || Character.isLetter ((char) c)); - } - -} |