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.io.IOException; 009 import org.util.xml.parse.ElementParser; 010 011 /** 012 * parse space. 013 * S ::= (#x20 | #x9 | #xD | #xA)+ 014 * <a href="http://www.fxis.co.jp/xmlcafe/tmp/rec-xml.html#NT-S">W3C REC-xml-980210</a> 015 * @author masaru 016 */ 017 public class TextElementParser extends ParseElement { 018 019 private String return_value_; 020 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 StringBuffer sb = new StringBuffer(); 028 int next_word_ = -1; 029 int state = 0; 030 while(c!=-1) { 031 if(state == 0) { 032 if(allow(c)) { 033 sb.append((char)c); 034 state = 1; 035 } else throw new XMLParseException("parse error: cannot read text :"+c); 036 } else if (state == 1) { 037 if (allow(c)) { 038 sb.append((char)c); 039 }else { 040 next_word_ = c; 041 break; 042 } 043 } 044 c = parser.get(); 045 } 046 return_value_ = sb.toString(); 047 return next_word_; 048 } 049 050 @Override 051 public String getReturnValue() { 052 return return_value_; 053 } 054 055 public boolean allow(int c) { 056 return ((c!='<') && (c!='>') && (c!=-1)); 057 } 058 }