You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by je...@locus.apache.org on 2000/08/02 03:15:48 UTC
cvs commit: xml-xerces/java/src/org/apache/xerces/readers UTF8Reader.java
jeffreyr 00/08/01 18:15:48
Modified: java/src/org/apache/xerces/readers UTF8Reader.java
Log:
UTF8Reader.java
Revision Changes Path
1.6 +51 -31 xml-xerces/java/src/org/apache/xerces/readers/UTF8Reader.java
Index: UTF8Reader.java
===================================================================
RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/readers/UTF8Reader.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- UTF8Reader.java 2000/05/17 18:32:41 1.5
+++ UTF8Reader.java 2000/08/02 01:15:48 1.6
@@ -88,7 +88,7 @@
* the SUN java runtime compiler (JIT) and the code here has been
* carefully "crafted" to avoid those problems.
*
- * @version $Id: UTF8Reader.java,v 1.5 2000/05/17 18:32:41 jeffreyr Exp $
+ * @version $Id: UTF8Reader.java,v 1.6 2000/08/02 01:15:48 jeffreyr Exp $
*/
final class UTF8Reader extends XMLEntityReader {
//
@@ -146,7 +146,7 @@
fCurrentChunk = fCurrentChunk.nextChunk();
fCurrentIndex = 0;
fMostRecentData = fCurrentChunk.toByteArray();
- return (fMostRecentByte = fMostRecentData[fCurrentIndex] & 0xFF);
+ return(fMostRecentByte = fMostRecentData[fCurrentIndex] & 0xFF);
} else {
fCurrentChunk = UTF8DataChunk.createChunk(fStringPool, fCurrentChunk);
return fillCurrentChunk();
@@ -166,14 +166,14 @@
if (++fCurrentIndex == UTF8DataChunk.CHUNK_SIZE)
return slowLoadNextByte();
else
- return (fMostRecentByte = fMostRecentData[fCurrentIndex] & 0xFF);
+ return(fMostRecentByte = fMostRecentData[fCurrentIndex] & 0xFF);
}
}
//
//
//
private boolean atEOF(int offset) {
- return (offset > fLength);
+ return(offset > fLength);
}
//
//
@@ -425,20 +425,30 @@
// ch = ((0x0f & b0)<<18) + ((0x3f & b1)<<12) + ((0x3f & b2)<<6) + (0x3f & b3); // u uuuu zzzz yyyy yyxx xxxx (0x10000 to 0x1ffff)
// if (ch >= 0x110000)
boolean result = false;
- if (!(b0 > 0xF4 || (b0 == 0xF4 && b1 >= 0x90))) { // [#x10000-#x10FFFF]
- if (skipPastChar) {
- fCharacterCounter++;
- loadNextByte();
- return true;
+
+ if (( 0xf8 & b0 ) == 0xf0 ) {
+ if (!(b0 > 0xF4 || (b0 == 0xF4 && b1 >= 0x90))) { // [#x10000-#x10FFFF]
+ if (skipPastChar) {
+ fCharacterCounter++;
+ loadNextByte();
+ return true;
+ }
+ result = true;
}
- result = true;
+ fCurrentChunk = saveChunk;
+ fCurrentIndex = saveIndex;
+ fCurrentOffset = saveOffset;
+ fMostRecentData = saveChunk.toByteArray();
+ fMostRecentByte = b0;
+ return result;
+ } else{
+ fCurrentChunk = saveChunk;
+ fCurrentIndex = saveIndex;
+ fCurrentOffset = saveOffset;
+ fMostRecentData = saveChunk.toByteArray();
+ fMostRecentByte = b0;
+ return result;
}
- fCurrentChunk = saveChunk;
- fCurrentIndex = saveIndex;
- fCurrentOffset = saveOffset;
- fMostRecentData = saveChunk.toByteArray();
- fMostRecentByte = b0;
- return result;
}
//
//
@@ -794,7 +804,7 @@
int b1 = loadNextByte();
if ((0xe0 & b0) == 0xc0) { // 110yyyyy 10xxxxxx
ch = ((0x1f & b0)<<6) + (0x3f & b1);
- } else {
+ } else if(( 0xf8 & b0 ) == 0xf0 ){
int b2 = loadNextByte();
if ((0xf0 & b0) == 0xe0) { // 1110zzzz 10yyyyyy 10xxxxxx
// if ((ch >= 0xD800 && ch <= 0xDFFF) || ch >= 0xFFFE)
@@ -802,7 +812,7 @@
} else {
int b3 = loadNextByte(); // 11110uuu 10uuzzzz 10yyyyyy 10xxxxxx
ch = ((0x0f & b0)<<18) + ((0x3f & b1)<<12)
- + ((0x3f & b2)<<6) + (0x3f & b3);
+ + ((0x3f & b2)<<6) + (0x3f & b3);
}
}
}
@@ -2504,10 +2514,29 @@
loadNextByte();
return true;
}
+
int b3 = loadNextByte(); // 11110uuu 10uuzzzz 10yyyyyy 10xxxxxx
// ch = ((0x0f & b0)<<18) + ((0x3f & b1)<<12) + ((0x3f & b2)<<6) + (0x3f & b3); // u uuuu zzzz yyyy yyxx xxxx (0x10000 to 0x1ffff)
// if (ch >= 0x110000)
- if (b0 > 0xF4 || (b0 == 0xF4 && b1 >= 0x90)) {
+ if (( 0xf8 & b0 ) == 0xf0 ) {
+ if (b0 > 0xF4 || (b0 == 0xF4 && b1 >= 0x90)) {
+ fCurrentChunk = saveChunk;
+ fCurrentIndex = saveIndex;
+ fCurrentOffset = saveOffset;
+ fMostRecentData = saveChunk.toByteArray();
+ fMostRecentByte = b0;
+ return false;
+ }
+ int ch = ((0x0f & b0)<<18) + ((0x3f & b1)<<12) + ((0x3f & b2)<<6) + (0x3f & b3);
+ if (ch < 0x10000) {
+ appendCharData(ch);
+ } else {
+ appendCharData(((ch-0x00010000)>>10)+0xd800);
+ appendCharData(((ch-0x00010000)&0x3ff)+0xdc00);
+ }
+ loadNextByte();
+ return true;
+ } else {
fCurrentChunk = saveChunk;
fCurrentIndex = saveIndex;
fCurrentOffset = saveOffset;
@@ -2515,15 +2544,6 @@
fMostRecentByte = b0;
return false;
}
- int ch = ((0x0f & b0)<<18) + ((0x3f & b1)<<12) + ((0x3f & b2)<<6) + (0x3f & b3);
- if (ch < 0x10000) {
- appendCharData(ch);
- } else {
- appendCharData(((ch-0x00010000)>>10)+0xd800);
- appendCharData(((ch-0x00010000)&0x3ff)+0xdc00);
- }
- loadNextByte();
- return true;
}
private boolean skipMultiByteCharData(int b0) throws Exception {
UTF8DataChunk saveChunk = fCurrentChunk;
@@ -2696,7 +2716,7 @@
//
//
//
- private static final char[] cdata_string = { 'C','D','A','T','A','[' };
+ private static final char[] cdata_string = { 'C','D','A','T','A','['};
private StringPool.CharArrayRange fCharArrayRange = null;
private InputStream fInputStream = null;
private StringPool fStringPool = null;
@@ -2719,7 +2739,7 @@
fMostRecentData = buf;
fCurrentIndex = 0;
fCurrentChunk.setByteArray(fMostRecentData);
- return (fMostRecentByte = fMostRecentData[0] & 0xFF);
+ return(fMostRecentByte = fMostRecentData[0] & 0xFF);
}
if (buf == null)
buf = new byte[UTF8DataChunk.CHUNK_SIZE];
@@ -2753,6 +2773,6 @@
fLength += offset;
fCurrentIndex = 0;
fCurrentChunk.setByteArray(fMostRecentData);
- return (fMostRecentByte = fMostRecentData[0] & 0xFF);
+ return(fMostRecentByte = fMostRecentData[0] & 0xFF);
}
}