001    /*
002     * To change this template, choose Tools | Templates
003     * and open the template in the editor.
004     */
005    
006    package org.util.xml.parse;
007    
008    import java.util.ArrayList;
009    import java.io.IOException;
010    import org.util.xml.parse.ElementParser;
011    
012    /**
013     *
014     * @author masaru
015     */
016    public class NameParser extends ParseElement {
017    
018        private String result_value_;
019        
020        @Override
021        public boolean match(char c) {
022            return allow(c);
023        }
024    
025        @Override
026            public int parse(int c, ElementParser parser) throws XMLParseException, IOException {
027            
028            StringBuffer sb = new StringBuffer();
029            int next_word_ = -1;
030            int state = 0;
031            while(true) {
032                if(state == 0) {
033                    if(allow(c)) {
034                        state = 1;
035                        sb.append((char)c);
036                    } else
037                        throw new XMLParseException("parse error: cannot read name: this char is not allowd ("+(char)c+")");
038                }else if(state == 1) {
039                    if(allow(c)) sb.append((char)c);
040                    else {
041                        next_word_ = c;
042                        break;
043                    }
044                }
045                c = parser.get();
046            }
047            result_value_ = sb.toString();
048            return next_word_;
049        }
050        
051        public boolean allow(int c) {
052            return (!isSpace(c) && (c!='<') && (c!='>') && (c!='/') && (c!='!')
053                    && (c!='?') && (c!='=') && (c!='\"') && (c!='\'') && (c!=-1));
054        }
055    
056        @Override
057        public String getReturnValue() {
058            return result_value_.toString();
059        }
060    }