(byte indata[], int size)
| 68 | } |
| 69 | |
| 70 | public void parse(byte indata[], int size) throws XMLException, UnsupportedEncodingException{ |
| 71 | int dptr=0; |
| 72 | while (size>0) { |
| 73 | size--; |
| 74 | char c=(char)(indata[dptr++] &0xff); |
| 75 | switch (state) { |
| 76 | case PLAIN_TEXT: { |
| 77 | //parsing plain text |
| 78 | if (c=='<') { |
| 79 | state=TAGNAME; |
| 80 | |
| 81 | if (sbuf.length()>0) |
| 82 | eventListener.plainTextEncountered( parsePlainText(sbuf) ); |
| 83 | |
| 84 | sbuf=new StringBuffer(); |
| 85 | tagName=new StringBuffer(); |
| 86 | attr=null; |
| 87 | attr=new Vector(); |
| 88 | |
| 89 | continue; |
| 90 | } |
| 91 | sbuf.append(c); continue; |
| 92 | } |
| 93 | |
| 94 | case ATRNAME: |
| 95 | { |
| 96 | if (c=='?') continue; |
| 97 | if (c==' ') continue; |
| 98 | if (c=='=') continue; |
| 99 | if (c=='\'') { state=ATRVALQS; atrName=parsePlainText(sbuf); sbuf=new StringBuffer(); continue; } |
| 100 | if (c=='\"') { state=ATRVALQD; atrName=parsePlainText(sbuf); sbuf=new StringBuffer(); continue; } |
| 101 | |
| 102 | if (c!='>' && c!='/') { |
| 103 | sbuf.append(c); |
| 104 | continue; |
| 105 | } else { |
| 106 | state=TAGNAME; |
| 107 | sbuf=new StringBuffer(); |
| 108 | } |
| 109 | } |
| 110 | |
| 111 | case TAGNAME: |
| 112 | { |
| 113 | if (c=='?') continue; |
| 114 | if (c=='/') { |
| 115 | state=ENDTAGNAME; |
| 116 | sbuf=new StringBuffer(); |
| 117 | if (tagName.length()>0) { |
| 118 | String tn= parsePlainText(tagName); |
| 119 | eventListener.tagStart(localName(tn, TAGNAME), attr); |
| 120 | sbuf.append(tn); |
| 121 | } |
| 122 | continue; |
| 123 | } |
| 124 | if (c==' ') { state=ATRNAME; continue; } |
| 125 | if (c=='>') { |
| 126 | state=PLAIN_TEXT; |
| 127 | if (eventListener.tagStart(localName(parsePlainText(tagName), TAGNAME), attr)) |
no test coverage detected