home *** CD-ROM | disk | FTP | other *** search
- package com.ibm.xml.internal;
-
- import com.ibm.xml.framework.ChunkyCharArray;
- import com.ibm.xml.framework.ParserState;
- import com.ibm.xml.framework.ScanContentState;
- import com.ibm.xml.framework.StringPool;
- import com.ibm.xml.framework.XMLDocumentHandler;
- import com.ibm.xml.framework.XMLErrorHandler;
- import com.ibm.xml.framework.XMLReader;
- import com.ibm.xml.framework.XMLScanner;
- import java.io.Reader;
-
- final class CharReader extends XMLReader {
- protected static final int CHUNK_SHIFT = 14;
- protected static final int CHUNK_SIZE = 16384;
- protected static final int CHUNK_MASK = 16383;
- protected XMLScanner fScanner;
- protected XMLDocumentHandler fDocumentHandler;
- protected XMLErrorHandler fErrorHandler;
- protected StringPool fStringPool;
- protected Reader fReader;
- protected CharDataChunk fCurrentChunk;
- protected int fCurrentIndex;
- protected char[] fMostRecentData;
- protected int fMostRecentChar;
- protected int fLength;
- protected boolean fCheckOverflow = false;
- protected char[] fOverflow;
- protected int fOverflowOffset;
- protected int fOverflowEnd;
- protected int fOutputOffset;
- protected boolean fSkipLinefeed = false;
-
- CharReader(ParserState var1, String var2, String var3, Reader var4) throws Exception {
- super(var1, var2, var3);
- this.fReader = var4;
- this.fScanner = var1.getScanner();
- this.fStringPool = var1.cacheStringPool();
- this.fDocumentHandler = var1.getDocumentHandler();
- this.fErrorHandler = var1.getErrorHandler();
- this.fCurrentChunk = new CharDataChunk(this, this.fStringPool, (CharDataChunk)null);
- this.fillCurrentChunk();
- }
-
- public int addString(int var1, int var2) {
- return var2 == 0 ? 0 : this.fCurrentChunk.addString(var1, var2);
- }
-
- public int addSymbol(int var1, int var2) {
- return var2 == 0 ? 0 : this.fCurrentChunk.addSymbol(var1, var2, 0);
- }
-
- protected int addSymbol(int var1, int var2, int var3) {
- return var2 == 0 ? 0 : this.fCurrentChunk.addSymbol(var1, var2, var3);
- }
-
- public void append(ChunkyCharArray var1, int var2, int var3) {
- this.fCurrentChunk.append(var1, var2, var3);
- }
-
- protected int slowLoadNextChar() throws Exception {
- CharDataChunk var1 = this.fCurrentChunk;
- if (var1.fNextChunk != null) {
- var1 = this.fCurrentChunk;
- this.fCurrentChunk = var1.fNextChunk;
- this.fCurrentIndex = 0;
- var1 = this.fCurrentChunk;
- this.fMostRecentData = var1.fData;
- return this.fMostRecentChar = this.fMostRecentData[this.fCurrentIndex] & '\uffff';
- } else {
- this.fCurrentChunk = new CharDataChunk(this, this.fStringPool, this.fCurrentChunk);
- return this.fillCurrentChunk();
- }
- }
-
- protected int loadNextChar() throws Exception {
- ++super.fCurrentOffset;
- return ++this.fCurrentIndex == 16384 ? this.slowLoadNextChar() : (this.fMostRecentChar = this.fMostRecentData[this.fCurrentIndex] & '\uffff');
- }
-
- protected void checkEOF(int var1) {
- if (var1 > this.fLength) {
- throw new ArrayIndexOutOfBoundsException();
- }
- }
-
- public int skipOneChar() throws Exception {
- int var1 = this.fMostRecentChar;
- if (var1 == 0) {
- int var2 = super.fCurrentOffset + 1;
- if (var2 > this.fLength) {
- throw new ArrayIndexOutOfBoundsException();
- }
-
- ++super.fCharacterCounter;
- } else if (var1 == 10) {
- ++super.fLinefeedCounter;
- super.fCharacterCounter = 1;
- } else if (var1 >= 55296 && var1 < 56320) {
- ++super.fCharacterCounter;
- var1 = this.loadNextChar();
- if (var1 < 56320 || var1 >= 57344) {
- return super.fCurrentOffset;
- }
- } else {
- ++super.fCharacterCounter;
- }
-
- this.loadNextChar();
- return super.fCurrentOffset;
- }
-
- public int skipAsciiChar() throws Exception {
- ++super.fCharacterCounter;
- this.loadNextChar();
- return super.fCurrentOffset;
- }
-
- public int skipToChar(char var1) throws Exception {
- int var2 = this.fMostRecentChar;
-
- while(var2 != var1) {
- if (var2 == 0) {
- int var3 = super.fCurrentOffset + 1;
- if (var3 > this.fLength) {
- throw new ArrayIndexOutOfBoundsException();
- }
-
- ++super.fCharacterCounter;
- } else if (var2 == 10) {
- ++super.fLinefeedCounter;
- super.fCharacterCounter = 1;
- } else if (var2 >= 55296 && var2 < 56320) {
- ++super.fCharacterCounter;
- var2 = this.loadNextChar();
- if (var2 < 56320 || var2 >= 57344) {
- continue;
- }
- } else {
- ++super.fCharacterCounter;
- }
-
- var2 = this.loadNextChar();
- }
-
- return super.fCurrentOffset;
- }
-
- public int skipPastChar(char var1) throws Exception {
- int var2 = this.fMostRecentChar;
-
- while(var2 != var1) {
- if (var2 == 0) {
- int var3 = super.fCurrentOffset + 1;
- if (var3 > this.fLength) {
- throw new ArrayIndexOutOfBoundsException();
- }
-
- ++super.fCharacterCounter;
- } else if (var2 == 10) {
- ++super.fLinefeedCounter;
- super.fCharacterCounter = 1;
- } else if (var2 >= 55296 && var2 < 56320) {
- ++super.fCharacterCounter;
- var2 = this.loadNextChar();
- if (var2 < 56320 || var2 >= 57344) {
- continue;
- }
- } else {
- ++super.fCharacterCounter;
- }
-
- var2 = this.loadNextChar();
- }
-
- ++super.fCharacterCounter;
- this.loadNextChar();
- return super.fCurrentOffset;
- }
-
- public boolean skippedValidChar() throws Exception {
- int var1 = this.fMostRecentChar;
- if (var1 < 55296) {
- if (var1 < 32 && var1 != 9) {
- if (var1 == 10) {
- ++super.fLinefeedCounter;
- super.fCharacterCounter = 1;
- this.loadNextChar();
- return true;
- } else {
- if (var1 == 0) {
- int var2 = super.fCurrentOffset + 1;
- if (var2 > this.fLength) {
- throw new ArrayIndexOutOfBoundsException();
- }
- }
-
- return false;
- }
- } else {
- ++super.fCharacterCounter;
- this.loadNextChar();
- return true;
- }
- } else if (var1 > 65533) {
- return false;
- } else {
- if (var1 < 56320) {
- var1 = this.loadNextChar();
- if (var1 < 56320 || var1 >= 57344) {
- return false;
- }
- } else if (var1 < 57344) {
- return false;
- }
-
- ++super.fCharacterCounter;
- this.loadNextChar();
- return true;
- }
- }
-
- public boolean lookingAtValidChar() throws Exception {
- int var1 = this.fMostRecentChar;
- if (var1 < 32) {
- if (var1 == 0) {
- int var2 = super.fCurrentOffset + 1;
- if (var2 > this.fLength) {
- throw new ArrayIndexOutOfBoundsException();
- }
- }
-
- return var1 == 9 || var1 == 10;
- } else {
- return var1 <= 65533;
- }
- }
-
- public int skipInvalidChar(int var1) throws Exception {
- int var2 = this.fMostRecentChar;
- if (var2 == 10) {
- ++super.fLinefeedCounter;
- super.fCharacterCounter = 1;
- this.loadNextChar();
- } else {
- ++super.fCharacterCounter;
- if (var2 >= 55296 && var2 < 56320) {
- int var3 = this.loadNextChar();
- if (var3 >= 56320 && var3 < 57344) {
- var2 = (var2 - '\ud800' << 10) + (var3 - '\udc00') + 65536;
- this.loadNextChar();
- }
- } else {
- this.loadNextChar();
- }
- }
-
- switch (var1) {
- case 43:
- String var7 = var2 < 65536 ? (new Character((char)var2)).toString() : Integer.toHexString(var2);
- String var4 = Integer.toHexString(var2);
- this.fErrorHandler.error2(var1, this.fStringPool.addString(var7), this.fStringPool.addString(var4));
- break;
- case 63:
- case 85:
- String var6 = Integer.toHexString(var2);
- this.fErrorHandler.error1(var1, this.fStringPool.addString(var6));
- break;
- case 80:
- case 82:
- case 110:
- String var5 = var2 < 65536 ? (new Character((char)var2)).toString() : Integer.toHexString(var2);
- this.fErrorHandler.error1(var1, this.fStringPool.addString(var5));
- }
-
- return super.fCurrentOffset;
- }
-
- public boolean skippedChar(char var1) throws Exception {
- int var2 = this.fMostRecentChar;
- if (var2 != var1) {
- return false;
- } else {
- ++super.fCharacterCounter;
- ++super.fCurrentOffset;
- if (++this.fCurrentIndex == 16384) {
- this.slowLoadNextChar();
- } else {
- this.fMostRecentChar = this.fMostRecentData[this.fCurrentIndex] & '\uffff';
- }
-
- return true;
- }
- }
-
- public boolean lookingAtChar(char var1) throws Exception {
- int var2 = this.fMostRecentChar;
- return var2 == var1;
- }
-
- public boolean skippedSpace() throws Exception {
- int var1 = this.fMostRecentChar;
- if (var1 > 32) {
- return false;
- } else {
- if (var1 != 32 && var1 != 9) {
- if (var1 != 10) {
- return false;
- }
-
- ++super.fLinefeedCounter;
- super.fCharacterCounter = 1;
- } else {
- ++super.fCharacterCounter;
- }
-
- ++super.fCurrentOffset;
- if (++this.fCurrentIndex == 16384) {
- this.slowLoadNextChar();
- } else {
- this.fMostRecentChar = this.fMostRecentData[this.fCurrentIndex] & '\uffff';
- }
-
- return true;
- }
- }
-
- public boolean lookingAtSpace() {
- int var1 = this.fMostRecentChar;
- return var1 == 32 || var1 == 9 || var1 == 10;
- }
-
- public int skipPastSpaces() throws Exception {
- int var1 = this.fMostRecentChar;
-
- while(true) {
- if (var1 != 32 && var1 != 9) {
- if (var1 != 10) {
- return super.fCurrentOffset;
- }
-
- ++super.fLinefeedCounter;
- super.fCharacterCounter = 1;
- } else {
- ++super.fCharacterCounter;
- }
-
- var1 = this.loadNextChar();
- }
- }
-
- public int skipDecimalDigit() throws Exception {
- int var1 = this.fMostRecentChar;
- if (var1 >= 48 && var1 <= 57) {
- ++super.fCharacterCounter;
- this.loadNextChar();
- return var1 - 48;
- } else {
- return -1;
- }
- }
-
- public int skipHexDigit() throws Exception {
- int var1 = this.fMostRecentChar;
- if (var1 <= 102 && XMLReader.fgAsciiXDigitChar[var1] != 0) {
- ++super.fCharacterCounter;
- this.loadNextChar();
- return var1 - (var1 < 65 ? 48 : (var1 < 97 ? 65 : 97) - 10);
- } else {
- return -1;
- }
- }
-
- public boolean skippedAlpha() throws Exception {
- int var1 = this.fMostRecentChar;
- if (var1 <= 122 && XMLReader.fgAsciiAlphaChar[var1] != 0) {
- ++super.fCharacterCounter;
- this.loadNextChar();
- return true;
- } else {
- return false;
- }
- }
-
- protected boolean skippedAsciiCharWithFlag(byte var1) throws Exception {
- int var2 = this.fMostRecentChar;
- if (var2 < 128 && (XMLReader.fgCharFlags[var2] & var1) != 0) {
- ++super.fCharacterCounter;
- this.loadNextChar();
- return true;
- } else {
- return false;
- }
- }
-
- public boolean skippedVersionNum() throws Exception {
- return this.skippedAsciiCharWithFlag((byte)1);
- }
-
- public boolean skippedEncName() throws Exception {
- return this.skippedAsciiCharWithFlag((byte)2);
- }
-
- public boolean skippedPubidChar() throws Exception {
- int var1 = this.fMostRecentChar;
- if (var1 >= 128) {
- return false;
- } else if ((XMLReader.fgCharFlags[var1] & 4) != 0) {
- ++super.fCharacterCounter;
- this.loadNextChar();
- return true;
- } else if (var1 == 10) {
- ++super.fLinefeedCounter;
- super.fCharacterCounter = 1;
- this.loadNextChar();
- return true;
- } else {
- return false;
- }
- }
-
- public boolean skippedString(char[] var1) throws Exception {
- int var2 = var1.length;
- char[] var3 = this.fMostRecentData;
- int var4 = this.fCurrentIndex;
- if (var4 + var2 <= 16384) {
- for(int var11 = 0; var11 < var2; ++var11) {
- if (var3[var4++] != var1[var11]) {
- return false;
- }
- }
-
- super.fCharacterCounter += var2;
- super.fCurrentOffset += var2;
- this.fCurrentIndex = var4;
- if (var4 == 16384) {
- this.slowLoadNextChar();
- } else {
- this.fMostRecentChar = var3[var4] & '\uffff';
- }
-
- return true;
- } else {
- CharDataChunk var5 = this.fCurrentChunk;
- int var6 = super.fCurrentOffset;
- int var7 = var4;
- int var8 = 0;
-
- while(var4 < 16384) {
- if (var3[var4++] != var1[var8++]) {
- return false;
- }
- }
-
- this.slowLoadNextChar();
- var3 = this.fMostRecentData;
- var4 = 0;
-
- while(var8 < var2) {
- if (var3[var4++] != var1[var8++]) {
- this.fCurrentChunk = var5;
- this.fCurrentIndex = var7;
- super.fCurrentOffset = var6;
- this.fMostRecentData = var5.fData;
- this.fMostRecentChar = this.fMostRecentData[var7] & '\uffff';
- return false;
- }
- }
-
- super.fCharacterCounter += var2;
- super.fCurrentOffset += var2;
- this.fCurrentIndex = var4;
- if (var4 == 16384) {
- this.slowLoadNextChar();
- } else {
- this.fMostRecentChar = var3[var4] & '\uffff';
- }
-
- return true;
- }
- }
-
- public int scanName(char var1, int var2) throws Exception {
- int var3 = this.fMostRecentChar;
- if (var3 < 128) {
- if (XMLReader.fgAsciiInitialNameChar[var3] == 0) {
- return -1;
- }
- } else if ((XMLReader.fgCharFlags[var3] & 16) == 0) {
- return -1;
- }
-
- int var4 = super.fCurrentOffset;
- int var5 = this.fCurrentIndex;
- char[] var6 = this.fMostRecentData;
- ++var5;
- if (var5 == 16384) {
- this.fCurrentChunk = new CharDataChunk(this, this.fStringPool, this.fCurrentChunk);
- this.fillCurrentChunk();
- var5 = 0;
- var6 = this.fMostRecentData;
- }
-
- ++super.fCharacterCounter;
- ++super.fCurrentOffset;
- int var7 = 0;
- int var8 = 0;
-
- while(true) {
- var7 = StringHasher.hashChar(var7, var8++, var3);
- var3 = var6[var5] & '\uffff';
- if (var1 == var3) {
- break;
- }
-
- if (var3 < 128) {
- if (XMLReader.fgAsciiNameChar[var3] == 0) {
- break;
- }
- } else if ((XMLReader.fgCharFlags[var3] & 32) == 0) {
- break;
- }
-
- ++var5;
- if (var5 == 16384) {
- this.fCurrentChunk = new CharDataChunk(this, this.fStringPool, this.fCurrentChunk);
- this.fillCurrentChunk();
- var5 = 0;
- var6 = this.fMostRecentData;
- }
-
- ++super.fCharacterCounter;
- ++super.fCurrentOffset;
- }
-
- this.fCurrentIndex = var5;
- this.fMostRecentChar = var3;
- var7 = StringHasher.finishHash(var7);
- int var9 = super.fCurrentOffset - var4;
- int var10 = var9 == 0 ? 0 : this.fCurrentChunk.addSymbol(var4, var9, var7);
- return var2 != -1 && var2 != var10 ? -1 : var10;
- }
-
- public int skipPastName(char var1) throws Exception {
- int var2 = this.fMostRecentChar;
- if (var2 < 128) {
- if (XMLReader.fgAsciiInitialNameChar[var2] == 0) {
- return super.fCurrentOffset;
- }
- } else if ((XMLReader.fgCharFlags[var2] & 16) == 0) {
- return super.fCurrentOffset;
- }
-
- while(true) {
- ++super.fCharacterCounter;
- var2 = this.loadNextChar();
- if (var1 == var2) {
- return super.fCurrentOffset;
- }
-
- if (var2 < 128) {
- if (XMLReader.fgAsciiNameChar[var2] == 0) {
- return super.fCurrentOffset;
- }
- } else if ((XMLReader.fgCharFlags[var2] & 32) == 0) {
- return super.fCurrentOffset;
- }
- }
- }
-
- public int skipPastNmtoken(char var1) throws Exception {
- for(int var2 = this.fMostRecentChar; var1 != var2; var2 = this.loadNextChar()) {
- if (var2 < 128) {
- if (XMLReader.fgAsciiNameChar[var2] == 0) {
- return super.fCurrentOffset;
- }
- } else if ((XMLReader.fgCharFlags[var2] & 32) == 0) {
- return super.fCurrentOffset;
- }
-
- ++super.fCharacterCounter;
- }
-
- return super.fCurrentOffset;
- }
-
- public int scanContent(ScanContentState var1) throws Exception {
- CharDataChunk var2 = this.fCurrentChunk;
- if (var2.fPreviousChunk != null) {
- var2.fPreviousChunk.fNextChunk = null;
- var2.fPreviousChunk = null;
- }
-
- int var4;
- label246: {
- label254: {
- var8 = super.fCurrentOffset;
- int var3 = this.fMostRecentChar;
- if (var3 < 128) {
- switch (XMLReader.fgAsciiWSCharData[var3]) {
- case 0:
- ++super.fCharacterCounter;
- ++super.fCurrentOffset;
- if (++this.fCurrentIndex == 16384) {
- this.slowLoadNextChar();
- } else {
- this.fMostRecentChar = this.fMostRecentData[this.fCurrentIndex] & '\uffff';
- }
- break;
- case 1:
- ++super.fCharacterCounter;
- ++super.fCurrentOffset;
- if (++this.fCurrentIndex == 16384) {
- this.slowLoadNextChar();
- } else {
- this.fMostRecentChar = this.fMostRecentData[this.fCurrentIndex] & '\uffff';
- }
-
- if (!var1.inCDSect) {
- return 1;
- }
- break;
- case 2:
- ++super.fCharacterCounter;
- ++super.fCurrentOffset;
- if (++this.fCurrentIndex == 16384) {
- this.slowLoadNextChar();
- } else {
- this.fMostRecentChar = this.fMostRecentData[this.fCurrentIndex] & '\uffff';
- }
-
- if (!var1.inCDSect) {
- return 2;
- }
- break;
- case 3:
- ++super.fCharacterCounter;
- var3 = this.loadNextChar();
- if (var3 == 93) {
- if (this.fCurrentIndex + 1 == 16384) {
- CharDataChunk var12 = this.fCurrentChunk;
- int var14 = this.fCurrentIndex;
- int var16 = super.fCurrentOffset;
- if (this.loadNextChar() == 62) {
- break label254;
- }
-
- this.fCurrentChunk = var12;
- this.fCurrentIndex = var14;
- super.fCurrentOffset = var16;
- this.fMostRecentData = var12.fData;
- this.fMostRecentChar = 93;
- } else if (this.fMostRecentData[this.fCurrentIndex + 1] == '>') {
- ++this.fCurrentIndex;
- ++super.fCurrentOffset;
- break label254;
- }
- }
- break;
- case 4:
- return 4;
- case 5:
- label229:
- while(true) {
- if (var3 == 10) {
- ++super.fLinefeedCounter;
- super.fCharacterCounter = 1;
- } else {
- ++super.fCharacterCounter;
- }
-
- ++super.fCurrentOffset;
- if (++this.fCurrentIndex == 16384) {
- var3 = this.slowLoadNextChar();
- } else {
- var3 = this.fMostRecentChar = this.fMostRecentData[this.fCurrentIndex] & '\uffff';
- }
-
- if (var3 != 32 && var3 != 9 && var3 != 10) {
- if (var3 < 128) {
- switch (XMLReader.fgAsciiCharData[var3]) {
- case 0:
- ++super.fCharacterCounter;
- ++super.fCurrentOffset;
- if (++this.fCurrentIndex == 16384) {
- this.slowLoadNextChar();
- } else {
- this.fMostRecentChar = this.fMostRecentData[this.fCurrentIndex] & '\uffff';
- }
- break label229;
- case 1:
- if (!var1.inCDSect) {
- if (this.fDocumentHandler != null) {
- this.callWSCharDataHandler(var8, super.fCurrentOffset, false);
- }
-
- ++super.fCharacterCounter;
- this.loadNextChar();
- return 25;
- }
-
- ++super.fCharacterCounter;
- ++super.fCurrentOffset;
- if (++this.fCurrentIndex == 16384) {
- this.slowLoadNextChar();
- } else {
- this.fMostRecentChar = this.fMostRecentData[this.fCurrentIndex] & '\uffff';
- }
- break label229;
- case 2:
- if (!var1.inCDSect) {
- if (this.fDocumentHandler != null) {
- this.callWSCharDataHandler(var8, super.fCurrentOffset, false);
- }
-
- ++super.fCharacterCounter;
- this.loadNextChar();
- return 26;
- }
-
- ++super.fCharacterCounter;
- this.loadNextChar();
- break label229;
- case 3:
- var4 = super.fCurrentOffset;
- var3 = this.loadNextChar();
- if (var3 != 93) {
- ++super.fCharacterCounter;
- } else if (this.fCurrentIndex + 1 == 16384) {
- CharDataChunk var5 = this.fCurrentChunk;
- int var6 = this.fCurrentIndex;
- int var7 = super.fCurrentOffset;
- if (this.loadNextChar() == 62) {
- break label246;
- }
-
- this.fCurrentChunk = var5;
- this.fCurrentIndex = var6;
- super.fCurrentOffset = var7;
- this.fMostRecentData = var5.fData;
- this.fMostRecentChar = 93;
- ++super.fCharacterCounter;
- } else {
- if (this.fMostRecentData[this.fCurrentIndex + 1] == '>') {
- ++this.fCurrentIndex;
- ++super.fCurrentOffset;
- break label246;
- }
-
- ++super.fCharacterCounter;
- }
- break label229;
- case 4:
- if (this.fDocumentHandler != null) {
- this.callWSCharDataHandler(var8, super.fCurrentOffset, var1.inCDSect);
- }
-
- return 28;
- }
- } else if (!this.skipMultiByteCharData(var3)) {
- if (this.fDocumentHandler != null) {
- this.callWSCharDataHandler(var8, super.fCurrentOffset, var1.inCDSect);
- }
-
- return 28;
- }
- break;
- }
- }
- }
- } else if (!this.skipMultiByteCharData(var3)) {
- return 4;
- }
-
- var3 = this.skipAsciiCharData();
-
- label199:
- while(true) {
- while(var3 >= 128) {
- if (!this.skipMultiByteCharData(var3)) {
- if (this.fDocumentHandler != null) {
- this.callCharDataHandler(var8, super.fCurrentOffset, var1.inCDSect);
- }
-
- return 12;
- }
-
- var3 = this.fMostRecentChar;
- }
-
- switch (XMLReader.fgAsciiCharData[var3]) {
- case 0:
- ++super.fCharacterCounter;
- var3 = this.loadNextChar();
- break;
- case 1:
- if (!var1.inCDSect) {
- if (this.fDocumentHandler != null) {
- this.callCharDataHandler(var8, super.fCurrentOffset, false);
- }
-
- ++super.fCharacterCounter;
- ++super.fCurrentOffset;
- if (++this.fCurrentIndex == 16384) {
- this.slowLoadNextChar();
- } else {
- this.fMostRecentChar = this.fMostRecentData[this.fCurrentIndex] & '\uffff';
- }
-
- return 9;
- }
-
- ++super.fCharacterCounter;
- var3 = this.loadNextChar();
- break;
- case 2:
- if (!var1.inCDSect) {
- if (this.fDocumentHandler != null) {
- this.callCharDataHandler(var8, super.fCurrentOffset, false);
- }
-
- ++super.fCharacterCounter;
- this.loadNextChar();
- return 10;
- }
-
- ++super.fCharacterCounter;
- var3 = this.loadNextChar();
- break;
- case 3:
- var4 = super.fCurrentOffset;
- var3 = this.loadNextChar();
- if (var3 == 93) {
- if (this.fCurrentIndex + 1 == 16384) {
- CharDataChunk var15 = this.fCurrentChunk;
- int var17 = this.fCurrentIndex;
- int var18 = super.fCurrentOffset;
- if (this.loadNextChar() == 62) {
- break label199;
- }
-
- this.fCurrentChunk = var15;
- this.fCurrentIndex = var17;
- super.fCurrentOffset = var18;
- this.fMostRecentData = var15.fData;
- this.fMostRecentChar = 93;
- ++super.fCharacterCounter;
- } else {
- if (this.fMostRecentData[this.fCurrentIndex + 1] == '>') {
- ++this.fCurrentIndex;
- ++super.fCurrentOffset;
- break label199;
- }
-
- ++super.fCharacterCounter;
- }
- break;
- }
-
- ++super.fCharacterCounter;
- break;
- case 4:
- if (var3 != 10) {
- if (this.fDocumentHandler != null) {
- this.callCharDataHandler(var8, super.fCurrentOffset, var1.inCDSect);
- }
-
- return 12;
- }
-
- ++super.fLinefeedCounter;
- super.fCharacterCounter = 1;
- var3 = this.loadNextChar();
- }
- }
-
- this.loadNextChar();
- if (this.fDocumentHandler != null) {
- this.callCharDataHandler(var8, var4, var1.inCDSect);
- }
-
- super.fCharacterCounter += 3;
- if (var1.inCDSect) {
- var1.inCDSect = false;
- return this.scanContent(var1);
- }
-
- return 11;
- }
-
- this.loadNextChar();
- super.fCharacterCounter += 2;
- if (var1.inCDSect) {
- var1.inCDSect = false;
- return this.scanContent(var1);
- }
-
- return 3;
- }
-
- this.loadNextChar();
- if (this.fDocumentHandler != null) {
- this.callWSCharDataHandler(var8, var4, var1.inCDSect);
- }
-
- super.fCharacterCounter += 3;
- if (var1.inCDSect) {
- var1.inCDSect = false;
- return this.scanContent(var1);
- } else {
- return 27;
- }
- }
-
- protected boolean skipMultiByteCharData(int var1) throws Exception {
- if (var1 > 65533) {
- return false;
- } else if (var1 >= 901120 && var1 < 57344) {
- return false;
- } else {
- if (var1 >= 884736 && var1 < 56320) {
- var1 = this.loadNextChar();
- if (var1 < 901120 || var1 >= 57344) {
- return false;
- }
- }
-
- this.loadNextChar();
- return true;
- }
- }
-
- protected int skipAsciiCharData() throws Exception {
- int var1 = this.fCurrentIndex;
- int var2 = super.fCurrentOffset - var1;
-
- while(true) {
- for(char[] var3 = this.fMostRecentData; var1 < 16384; ++var1) {
- int var4 = var3[var1] & '\uffff';
- if (var4 >= 128) {
- super.fCurrentOffset = var2 + var1;
- this.fCurrentIndex = var1;
- this.fMostRecentChar = var4;
- return var4;
- }
-
- if (XMLReader.fgAsciiCharData[var4] != 0) {
- if (var4 != 10) {
- super.fCurrentOffset = var2 + var1;
- this.fCurrentIndex = var1;
- this.fMostRecentChar = var4;
- return var4;
- }
-
- ++super.fLinefeedCounter;
- super.fCharacterCounter = 1;
- } else {
- ++super.fCharacterCounter;
- }
- }
-
- var2 += var1;
- this.fCurrentChunk = new CharDataChunk(this, this.fStringPool, this.fCurrentChunk);
- this.fillCurrentChunk();
- var1 = 0;
- }
- }
-
- public void callCharDataHandler(int var1, int var2, boolean var3) throws Exception {
- int var4 = var2 - var1;
- if (!this.fDocumentHandler.sendCharDataAsCharArray()) {
- int var9 = var4 == 0 ? 0 : this.fCurrentChunk.addString(var1, var4);
- this.fDocumentHandler.characters(var9, var3);
- } else {
- CharDataChunk var5 = this.fCurrentChunk.chunkFor(var1);
- int var6 = var1 & 16383;
- if (var6 + var4 <= 16384) {
- if (var4 != 0) {
- this.fDocumentHandler.characters(var5.fData, var6, var4, var3);
- }
-
- } else {
- int var8 = 16384 - var6;
- this.fDocumentHandler.characters(var5.fData, var6, var8, var3);
- int var7 = var4 - var8;
-
- do {
- var5 = var5.fNextChunk;
- if (var5 == null) {
- this.fErrorHandler.error(167);
- }
-
- var8 = var7 <= 16384 ? var7 : 16384;
- this.fDocumentHandler.characters(var5.fData, 0, var8, var3);
- var7 -= var8;
- } while(var7 > 0);
-
- }
- }
- }
-
- public void callWSCharDataHandler(int var1, int var2, boolean var3) throws Exception {
- int var4 = this.fScanner.getCurrentContentSpecType();
- if (var4 != 4) {
- this.callCharDataHandler(var1, var2, var3);
- } else {
- int var5 = var2 - var1;
- if (!this.fDocumentHandler.sendCharDataAsCharArray()) {
- int var10 = var5 == 0 ? 0 : this.fCurrentChunk.addString(var1, var5);
- this.fDocumentHandler.ignorableWhitespace(var10, var3);
- } else {
- CharDataChunk var6 = this.fCurrentChunk.chunkFor(var1);
- int var7 = var1 & 16383;
- if (var7 + var5 <= 16384) {
- if (var5 != 0) {
- this.fDocumentHandler.ignorableWhitespace(var6.fData, var7, var5, var3);
- }
-
- } else {
- int var9 = 16384 - var7;
- this.fDocumentHandler.ignorableWhitespace(var6.fData, var7, var9, var3);
- int var8 = var5 - var9;
-
- do {
- var6 = var6.fNextChunk;
- var9 = var8 <= 16384 ? var8 : 16384;
- this.fDocumentHandler.ignorableWhitespace(var6.fData, 0, var9, var3);
- var8 -= var9;
- } while(var8 > 0);
-
- }
- }
- }
- }
-
- protected int fillCurrentChunk() throws Exception {
- this.fOutputOffset = 0;
- if (this.fCheckOverflow) {
- if (this.fOverflowEnd < 16384) {
- if (this.fOverflowEnd > 0) {
- this.fMostRecentData = new char[1 + this.fOverflowEnd - this.fOverflowOffset];
- this.copyNormalize(this.fOverflow, this.fOverflowOffset, this.fMostRecentData, this.fOutputOffset);
- } else {
- this.fMostRecentData = new char[1];
- }
-
- this.fMostRecentData[this.fOutputOffset] = 0;
- this.fOverflow = null;
- this.fLength += this.fOutputOffset;
- this.fCurrentIndex = 0;
- CharDataChunk var1 = this.fCurrentChunk;
- char[] var2 = this.fMostRecentData;
- var1.fData = var2;
- return this.fMostRecentChar = this.fMostRecentData[0];
- }
-
- this.fMostRecentData = new char[16384];
- this.copyNormalize(this.fOverflow, this.fOverflowOffset, this.fMostRecentData, this.fOutputOffset);
- this.fCheckOverflow = false;
- } else {
- if (this.fOverflow == null) {
- this.fOverflow = new char[16384];
- }
-
- this.fMostRecentData = null;
- }
-
- while(true) {
- this.fOverflowOffset = 0;
- this.fOverflowEnd = 0;
- int var4 = 16384;
- int var6 = 0;
-
- do {
- var6 = this.fReader.read(this.fOverflow, this.fOverflowEnd, var4);
- if (var6 == -1) {
- this.fReader.close();
- this.fReader = null;
- if (this.fMostRecentData == null) {
- this.fMostRecentData = new char[1 + this.fOverflowEnd];
- this.copyNormalize(this.fOverflow, this.fOverflowOffset, this.fMostRecentData, this.fOutputOffset);
- this.fOverflow = null;
- this.fMostRecentData[this.fOutputOffset] = 0;
- } else {
- boolean var3 = this.copyNormalize(this.fOverflow, this.fOverflowOffset, this.fMostRecentData, this.fOutputOffset);
- if (var3) {
- if (this.fOverflowEnd == 16384) {
- this.fCheckOverflow = true;
- this.fOverflowOffset = 0;
- this.fOverflowEnd = 0;
- } else {
- this.fOverflow = null;
- this.fMostRecentData[this.fOutputOffset] = 0;
- }
- } else {
- this.fCheckOverflow = true;
- }
- }
- break;
- }
-
- if (var6 > 0) {
- this.fOverflowEnd += var6;
- var4 -= var6;
- }
- } while(var4 > 0);
-
- if (var6 == -1) {
- break;
- }
-
- if (this.fMostRecentData != null) {
- boolean var9 = this.copyNormalize(this.fOverflow, this.fOverflowOffset, this.fMostRecentData, this.fOutputOffset);
- if (this.fOutputOffset == 16384) {
- if (!var9) {
- this.fCheckOverflow = true;
- }
- break;
- }
- } else {
- this.fMostRecentData = new char[16384];
- this.copyNormalize(this.fOverflow, this.fOverflowOffset, this.fMostRecentData, this.fOutputOffset);
- if (this.fOutputOffset == 16384) {
- break;
- }
- }
- }
-
- this.fLength += this.fOutputOffset;
- this.fCurrentIndex = 0;
- CharDataChunk var5 = this.fCurrentChunk;
- char[] var8 = this.fMostRecentData;
- var5.fData = var8;
- return this.fMostRecentChar = this.fMostRecentData[0];
- }
-
- protected boolean copyNormalize(char[] var1, int var2, char[] var3, int var4) throws Exception {
- int var5 = this.fOverflowEnd;
- int var6 = var3.length;
- if (var2 == var5) {
- return true;
- } else {
- char var7 = var1[var2];
- if (this.fSkipLinefeed) {
- this.fSkipLinefeed = false;
- if (var7 == '\n') {
- ++var2;
- if (var2 == var5) {
- this.fOverflowOffset = var2;
- this.fOutputOffset = var4;
- return true;
- }
-
- var7 = var1[var2];
- }
- }
-
- while(var4 < var6) {
- int var8 = var5 - var2;
- int var9 = var6 - var4;
- if (var8 > var9) {
- var8 = var9;
- }
-
- ++var2;
-
- do {
- for(; var7 == '\r'; ++var2) {
- var3[var4++] = '\n';
- if (var2 == var5) {
- this.fSkipLinefeed = true;
- this.fOverflowOffset = var2;
- this.fOutputOffset = var4;
- return true;
- }
-
- var7 = var1[var2];
- if (var7 == '\n') {
- ++var2;
- if (var2 == var5) {
- this.fOverflowOffset = var2;
- this.fOutputOffset = var4;
- return true;
- }
-
- var7 = var1[var2];
- }
-
- if (var4 == var6) {
- this.fOverflowOffset = var2;
- this.fOutputOffset = var4;
- return false;
- }
-
- var8 = var5 - var2;
- var9 = var6 - var4;
- if (var8 > var9) {
- var8 = var9;
- }
- }
-
- do {
- var3[var4++] = var7;
- --var8;
- if (var8 == 0) {
- break;
- }
-
- var7 = var1[var2++];
- } while(var7 != '\r');
- } while(var8 != 0);
-
- if (var2 == var5) {
- break;
- }
- }
-
- boolean var10 = var2 == var5;
- this.fOverflowOffset = var2;
- this.fOutputOffset = var4;
- return var10;
- }
- }
-
- protected boolean exitNormalize(int var1, int var2, boolean var3) {
- this.fOverflowOffset = var1;
- this.fOutputOffset = var2;
- return var3;
- }
- }
-