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 org.util.xml.parse.ElementParser;
010
011 /**
012 *
013 * @author masaru
014 */
015 public class EqParser extends ParseElement {
016
017 private SpaceParser space_parser_;
018
019 @Override
020 public boolean match(char c) {
021 return (isSpace(c) || c=='=');
022 }
023
024 @Override
025 public int parse(int c, ElementParser parser) throws Exception {
026 if(space_parser_==null) space_parser_ = new SpaceParser();
027 int next_word_ = -1;
028 int state = 0;
029 while(true) {
030 if(state == 0) {
031 if(isSpace(c)) ;
032 else if(c=='=') state = 1;
033 else {
034 parser.error(this);
035 return escape(parser, "cannot read = ("+(char)c+")");
036 }
037 }else if(state == 1) {
038 if(isSpace(c)) ;
039 else {
040 next_word_ = c;
041 break;
042 }
043 }
044 c = parser.getChar();
045 }
046 return next_word_;
047 }
048
049 @Override
050 public void listDependentParser(ArrayList<ParseElement> list) {
051 for(int i=0;i<list.size();i++)
052 if(list.get(i) instanceof SpaceParser) {
053 space_parser_ = (SpaceParser)list.get(i);
054 return;
055 }
056 space_parser_ = new SpaceParser();
057 list.add(space_parser_);
058 }
059 public int escape (ElementParser parser,String message) throws Exception {
060 try{throw new Exception("mark");}catch(Exception e){e.printStackTrace();}
061 System.out.println("this documents has error."+message);
062 System.out.println("skip---------------------");
063 int c = parser.get();
064 while(c!='>' && c!=-1) System.out.print((char)(c=parser.get()));
065 System.out.println("\n-------------------------");
066 return parser.get();
067 }
068 }