home *** CD-ROM | disk | FTP | other *** search
- package net.n3.nanoxml;
-
- import java.io.IOException;
- import java.io.Reader;
-
- class ContentReader extends Reader {
- private IXMLReader reader;
- private IXMLEntityResolver entityResolver;
- private char escapeChar;
- private char[] delimiter;
- private String charsReadTooMuch;
- private int charsToGo;
- private boolean useLowLevelReader;
- private boolean pastInitialPrefix;
-
- ContentReader(IXMLReader var1, IXMLEntityResolver var2, char var3, char[] var4, boolean var5, String var6) {
- this.delimiter = var4;
- this.charsToGo = this.delimiter.length;
- this.charsReadTooMuch = var6;
- this.useLowLevelReader = var5;
- this.pastInitialPrefix = false;
- this.reader = var1;
- this.entityResolver = var2;
- this.escapeChar = var3;
- }
-
- protected void finalize() throws Throwable {
- this.reader = null;
- this.entityResolver = null;
- this.delimiter = null;
- this.charsReadTooMuch = null;
- super.finalize();
- }
-
- public int read(char[] var1, int var2, int var3) throws IOException {
- int var4 = 0;
- boolean[] var5 = new boolean[]{false};
- if (var2 + var3 > var1.length) {
- var3 = var1.length - var2;
- }
-
- while(this.charsToGo > 0 && var4 < var3) {
- char var6;
- if (this.charsReadTooMuch.length() > 0) {
- var6 = this.charsReadTooMuch.charAt(0);
- this.charsReadTooMuch = this.charsReadTooMuch.substring(1);
- } else {
- this.pastInitialPrefix = true;
-
- try {
- if (this.useLowLevelReader) {
- var6 = this.reader.read();
- } else {
- var6 = XMLUtil.read(this.reader, var5, this.escapeChar, this.entityResolver);
- if (!var5[0] && var6 == '&') {
- this.reader.startNewStream(XMLUtil.scanEntity(var5, this.reader, this.escapeChar, this.entityResolver));
- var6 = this.reader.read();
- }
- }
- } catch (XMLParseException var8) {
- throw new RuntimeException(var8.getMessage());
- }
- }
-
- if (var5[0]) {
- var1[var2 + var4] = var6;
- ++var4;
- } else if (var6 == this.delimiter[this.charsToGo - 1] && this.pastInitialPrefix) {
- --this.charsToGo;
- } else if (this.charsToGo < this.delimiter.length) {
- this.charsReadTooMuch = new String(this.delimiter, this.charsToGo + 1, this.delimiter.length - this.charsToGo) + var6;
- this.charsToGo = this.delimiter.length;
- var1[var2 + var4] = this.delimiter[this.charsToGo - 1];
- ++var4;
- } else {
- var1[var2 + var4] = var6;
- ++var4;
- }
- }
-
- if (var4 == 0) {
- var4 = -1;
- }
-
- return var4;
- }
-
- public void close() throws IOException {
- while(this.charsToGo > 0) {
- char var1;
- if (this.charsReadTooMuch.length() > 0) {
- var1 = this.charsReadTooMuch.charAt(0);
- this.charsReadTooMuch = this.charsReadTooMuch.substring(1);
- } else if (this.useLowLevelReader) {
- var1 = this.reader.read();
- } else {
- try {
- var1 = XMLUtil.read(this.reader, (boolean[])null, this.escapeChar, this.entityResolver);
- } catch (XMLParseException var3) {
- throw new RuntimeException(var3.getMessage());
- }
- }
-
- if (var1 == this.delimiter[this.charsToGo - 1]) {
- --this.charsToGo;
- } else if (this.charsToGo < this.delimiter.length) {
- this.charsReadTooMuch = new String(this.delimiter, this.charsToGo + 1, this.delimiter.length - this.charsToGo) + var1;
- this.charsToGo = this.delimiter.length;
- }
- }
-
- }
- }
-