From b070c658458772feebbccd936eb40a60f55fc605 Mon Sep 17 00:00:00 2001 From: Vhati Date: Sun, 8 Sep 2013 04:03:50 -0400 Subject: [PATCH] Added sloppy parser patterns to recognize empty XML comments and CDATA --- .../vhati/modmanager/core/SloppyXMLParser.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/main/java/net/vhati/modmanager/core/SloppyXMLParser.java b/src/main/java/net/vhati/modmanager/core/SloppyXMLParser.java index 2d32f2e..6446632 100644 --- a/src/main/java/net/vhati/modmanager/core/SloppyXMLParser.java +++ b/src/main/java/net/vhati/modmanager/core/SloppyXMLParser.java @@ -57,7 +57,9 @@ import org.jdom2.input.JDOMParseException; public class SloppyXMLParser { private Pattern declPtn = Pattern.compile( "(\\s*)<[?]xml [^?]*[?]>" ); + private Pattern emptyCommentPtn = Pattern.compile( "(\\s*)" ); private Pattern commentPtn = Pattern.compile( "(?s)(\\s*)))*.)-->" ); + private Pattern emptyCDATAPtn = Pattern.compile( "(\\s*)" ); private Pattern cdataPtn = Pattern.compile( "(?s)(\\s*)))*.)\\]\\]>" ); private Pattern sTagPtn = Pattern.compile( "(\\s*)<(?:([\\w.-]+):)?([\\w.-]+)((?: [^>]+?)??)\\s*(/?)>" ); private Pattern eTagPtn = Pattern.compile( "([^<]*)]+)>" ); @@ -84,7 +86,9 @@ public class SloppyXMLParser { this.factory = factory; chunkPtns.add( declPtn ); + chunkPtns.add( emptyCommentPtn ); chunkPtns.add( commentPtn ); + chunkPtns.add( emptyCDATAPtn ); chunkPtns.add( cdataPtn ); chunkPtns.add( sTagPtn ); chunkPtns.add( eTagPtn ); @@ -123,6 +127,13 @@ public class SloppyXMLParser { // Don't care. addLineAndCol( lastLineAndCol, m.group(0) ); } + else if ( chunkPtn == emptyCommentPtn ) { + String whitespace = m.group( 1 ); + if ( whitespace.length() > 0 ) + factory.addContent( parentNode, factory.text( whitespace ) ); + + addLineAndCol( lastLineAndCol, s, m.start(), m.end() ); + } else if ( chunkPtn == commentPtn ) { String whitespace = m.group( 1 ); if ( whitespace.length() > 0 ) @@ -159,6 +170,13 @@ public class SloppyXMLParser { addLineAndCol( lastLineAndCol, s, m.start(), m.end() ); } + else if ( chunkPtn == emptyCDATAPtn ) { + String whitespace = m.group( 1 ); + if ( whitespace.length() > 0 ) + factory.addContent( parentNode, factory.text( whitespace ) ); + + addLineAndCol( lastLineAndCol, s, m.start(), m.end() ); + } else if ( chunkPtn == cdataPtn ) { String whitespace = m.group( 1 ); if ( whitespace.length() > 0 )