diff --git a/fine-third-default/fine-sjsxp/src/main/java/com/fr/third/javax/xml/stream/XMLEntityReaderImpl.java b/fine-third-default/fine-sjsxp/src/main/java/com/fr/third/javax/xml/stream/XMLEntityReaderImpl.java index 90801c0c2..048104416 100644 --- a/fine-third-default/fine-sjsxp/src/main/java/com/fr/third/javax/xml/stream/XMLEntityReaderImpl.java +++ b/fine-third-default/fine-sjsxp/src/main/java/com/fr/third/javax/xml/stream/XMLEntityReaderImpl.java @@ -183,6 +183,7 @@ public class XMLEntityReaderImpl extends XMLEntityReader { validContent[i]=true; } validContent[0x9]=true; + validContent[0xA]=true; validContent[0x26]=false; validContent[0x3C]=false; validContent[0x5D]=false; @@ -1353,6 +1354,27 @@ public class XMLEntityReaderImpl extends XMLEntityReader { break; } else if (XMLChar.isInvalid(c)) { + if(XMLChar.isHighSurrogate(c)){ + fCurrentEntity.position--; + if (fCurrentEntity.position - offset > 0){ + int length = fCurrentEntity.position - offset; + fCurrentEntity.columnNumber += length - newlines; + buffer.append(fCurrentEntity.ch, offset, length); + } + int high = this.scanChar(); + int low = this.peekChar(); + if (!XMLChar.isLowSurrogate(low)) { + return false; + } + int x = XMLChar.supplemental((char)high, (char)low); + if (isInvalid(x)) { + return false; + } + buffer.append((char)high); + buffer.append((char)low); + offset = ++fCurrentEntity.position; + break; + } fCurrentEntity.position--; int length = fCurrentEntity.position - offset; fCurrentEntity.columnNumber += length - newlines; @@ -1361,12 +1383,13 @@ public class XMLEntityReaderImpl extends XMLEntityReader { } } int length = fCurrentEntity.position - offset; - fCurrentEntity.columnNumber += length - newlines; - if (done) { - length -= delimLen; + if (length != 0){ + fCurrentEntity.columnNumber += length - newlines; + if (done) { + length -= delimLen; + } + buffer.append(fCurrentEntity.ch, offset, length); } - buffer.append(fCurrentEntity.ch, offset, length); - // return true if string was skipped if (DEBUG_BUFFER) { System.out.print(")scanData: ");