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 org.util.xml.element.Attribute;
009 import org.util.xml.parse.ElementParser;
010 import java.io.IOException;
011
012 /**
013 *
014 * @author masaru
015 */
016 public class AttributeParser extends ParseElement {
017
018 private NameParser name_parser_;
019 private EqParser eq_parser_;
020 private AttValueParser attvalue_parser_;
021 private SpaceParser space_parser_;
022 private Attribute attribute_;
023
024 public AttributeParser() {
025 name_parser_ = new NameParser();
026 eq_parser_ = new EqParser();
027 attvalue_parser_ = new AttValueParser();
028 space_parser_ = new SpaceParser();
029 }
030 public boolean match(char c) {
031 return name_parser_.allow(c);
032 }
033
034 public int parse(int next, ElementParser parser) throws XMLParseException, IOException {
035 String name = null, value = null;
036
037 if(next==-1) throw new XMLParseException("end of line");
038 next = name_parser_.parse((char)next, parser);
039 name = name_parser_.getReturnValue();
040
041 if(next==-1) throw new XMLParseException("end of line");
042
043 // next = eq_parser_.parse((char)next, parser);
044
045 // System.out.print("<"+name+":"+(char)next);
046 if(space_parser_.match((char)next))
047 next = space_parser_.parse(next, parser);
048
049 if(next==-1) throw new XMLParseException("end of line");
050
051 if(next=='=') {
052 next = parser.getChar();
053 if(space_parser_.match((char)next))
054 next = space_parser_.parse(next, parser);
055 if(next==-1) throw new XMLParseException("end of line");
056 next = attvalue_parser_.parse(next, parser);
057 value = attvalue_parser_.getReturnValue();
058 attribute_ = new Attribute(name, value);
059 } else {
060 attribute_ = new Attribute(name, "");
061 attribute_.setNoValue(true);
062 }
063
064 // System.out.println((char)next+">");
065
066
067 return next;
068 }
069 public Attribute getAttribute() {
070 return attribute_;
071 }
072 }