home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 2004 May / DPPCPRO0504.ISO / May / Seatools / SeaTools.iso / tools / en / webhelp / webhelp.jar / BsscXML / BsscXMLParser.class (.txt) < prev    next >
Encoding:
Java Class File  |  2002-04-17  |  2.9 KB  |  138 lines

  1. package BsscXML;
  2.  
  3. import java.io.IOException;
  4. import java.io.Reader;
  5. import java.util.Stack;
  6.  
  7. public class BsscXMLParser implements IBsscXMLParser, Runnable {
  8.    private Stack m_processingElements = null;
  9.    private IBsscXMLDocumentBuilder m_document = null;
  10.    private boolean m_bReady;
  11.    private Reader m_is = null;
  12.  
  13.    public static String xmlToText(String var0) {
  14.       StringBuffer var1 = new StringBuffer();
  15.       int var2 = var0.length();
  16.  
  17.       for(int var3 = 0; var3 < var2; ++var3) {
  18.          if (var0.charAt(var3) == '&') {
  19.             if (var3 + 3 < var2 && var0.charAt(var3 + 1) == 'l' && var0.charAt(var3 + 2) == 't' && var0.charAt(var3 + 3) == ';') {
  20.                var1.append('<');
  21.                var3 += 3;
  22.             } else if (var3 + 3 < var2 && var0.charAt(var3 + 1) == 'g' && var0.charAt(var3 + 2) == 't' && var0.charAt(var3 + 3) == ';') {
  23.                var1.append('>');
  24.                var3 += 3;
  25.             } else if (var3 + 5 < var2 && var0.charAt(var3 + 1) == 'q' && var0.charAt(var3 + 2) == 'u' && var0.charAt(var3 + 3) == 'o' && var0.charAt(var3 + 4) == 't' && var0.charAt(var3 + 5) == ';') {
  26.                var1.append('"');
  27.                var3 += 5;
  28.             } else if (var3 + 4 < var2 && var0.charAt(var3 + 1) == 'a' && var0.charAt(var3 + 2) == 'm' && var0.charAt(var3 + 3) == 'p' && var0.charAt(var3 + 4) == ';') {
  29.                var1.append('&');
  30.                var3 += 4;
  31.             } else {
  32.                var1.append(var0.charAt(var3));
  33.             }
  34.          } else {
  35.             var1.append(var0.charAt(var3));
  36.          }
  37.       }
  38.  
  39.       return var1.toString();
  40.    }
  41.  
  42.    public void parse() {
  43.       if (this.m_is != null) {
  44.          this.parse(this.m_is);
  45.       }
  46.  
  47.    }
  48.  
  49.    public void parse(Reader var1) {
  50.       try {
  51.          BsscXMLTokenizer var2 = new BsscXMLTokenizer(this);
  52.          var2.tokenize(var1);
  53.          var1.close();
  54.       } catch (IOException var3) {
  55.          ((Throwable)var3).printStackTrace();
  56.       }
  57.    }
  58.  
  59.    public void beginElement(String var1) throws BsscXMLException {
  60.       IBsscXMLElementBuilder var2 = BsscXML.createElement(var1);
  61.       if (!this.m_processingElements.empty()) {
  62.          Object var3 = this.m_processingElements.peek();
  63.          if (!(var3 instanceof IBsscXMLElementBuilder)) {
  64.             throw new BsscXMLException("Type Mismatch!");
  65.          }
  66.  
  67.          ((IBsscXMLElementBuilder)var3).addChild(var2);
  68.          var2.setParent((IBsscXMLElementBuilder)var3);
  69.       } else {
  70.          if (this.m_document == null) {
  71.             throw new BsscXMLException("Internal Error!");
  72.          }
  73.  
  74.          this.m_document.setRoot(var2);
  75.       }
  76.  
  77.       this.m_processingElements.push(var2);
  78.    }
  79.  
  80.    public void findValue(String var1) throws BsscXMLException {
  81.       Object var2 = this.m_processingElements.peek();
  82.       if (var2 instanceof IBsscXMLElementBuilder) {
  83.          String var3 = xmlToText(var1);
  84.          ((IBsscXMLElementBuilder)var2).setValue(var3);
  85.       } else {
  86.          throw new BsscXMLException("Type Mismatch!");
  87.       }
  88.    }
  89.  
  90.    public void beginDocument() {
  91.    }
  92.  
  93.    public void endElement(String var1) throws BsscXMLException {
  94.       Object var2 = this.m_processingElements.peek();
  95.       if (var2 instanceof IBsscXMLElementBuilder) {
  96.          if (((IBsscXMLElementBuilder)var2).checkName(var1)) {
  97.             this.m_processingElements.pop();
  98.          } else {
  99.             throw new BsscXMLException("Bad XML Format!");
  100.          }
  101.       } else {
  102.          throw new BsscXMLException("Type Mismatch!");
  103.       }
  104.    }
  105.  
  106.    public BsscXMLParser(IBsscXMLConsumer var1) {
  107.       this.m_document = new BsscXMLDocument();
  108.       ((BsscXMLDocument)this.m_document).addConsumer(var1);
  109.       this.m_processingElements = new Stack();
  110.    }
  111.  
  112.    public void endDocument() throws BsscXMLException {
  113.       if (!this.m_processingElements.empty()) {
  114.          throw new BsscXMLException("Wrong XML Format!");
  115.       } else {
  116.          this.m_document.setReady(true);
  117.       }
  118.    }
  119.  
  120.    public void findAttr(String var1, String var2) throws BsscXMLException {
  121.       Object var3 = this.m_processingElements.peek();
  122.       if (var3 instanceof IBsscXMLElementBuilder) {
  123.          String var4 = xmlToText(var2);
  124.          ((IBsscXMLElementBuilder)var3).setAttribute(var1, var4);
  125.       } else {
  126.          throw new BsscXMLException("Type Mismatch!");
  127.       }
  128.    }
  129.  
  130.    public void run() {
  131.       this.parse();
  132.    }
  133.  
  134.    public void setSource(Reader var1) {
  135.       this.m_is = var1;
  136.    }
  137. }
  138.