From f6dfab27481b60975d55901354f075960ab97098 Mon Sep 17 00:00:00 2001 From: Vhati Date: Sun, 9 Mar 2014 03:44:40 -0400 Subject: [PATCH] Used EOLWriter to normalize line breaks instead of regex --- skel_common/readme_changelog.txt | 1 + .../net/vhati/modmanager/core/EOLWriter.java | 83 +++++++++++++++++++ .../vhati/modmanager/core/ModUtilities.java | 52 +++++++----- 3 files changed, 117 insertions(+), 19 deletions(-) create mode 100644 src/main/java/net/vhati/modmanager/core/EOLWriter.java diff --git a/skel_common/readme_changelog.txt b/skel_common/readme_changelog.txt index 2f7eef0..37ac7f9 100644 --- a/skel_common/readme_changelog.txt +++ b/skel_common/readme_changelog.txt @@ -9,6 +9,7 @@ Changelog - Changed modman.exe to fail rather than use VirtualStore - Added modman_admin.exe, which always runs as administrator - Added a Validate warning for junk files whose names end with a tilde +- Minor optimizations to reduce memory usage 1.4: - Cleaned up some dodgy code when initially prompting for FTL's location diff --git a/src/main/java/net/vhati/modmanager/core/EOLWriter.java b/src/main/java/net/vhati/modmanager/core/EOLWriter.java new file mode 100644 index 0000000..d0ab65e --- /dev/null +++ b/src/main/java/net/vhati/modmanager/core/EOLWriter.java @@ -0,0 +1,83 @@ +package net.vhati.modmanager.core; + +import java.io.FilterWriter; +import java.io.IOException; +import java.io.Writer; + + +/** + * A filter that replaces \r, \n, or \r\n, with a standard EOL string. + * + * Essentially, s.replaceAll( "\r(?!\n)|(?\n" ); - buf.append( dstText ); - buf.append( "\n\n\n\n" ); - buf.append( srcText ); - buf.append( "\n" ); + // Concatenate, filtering the stream to standardize newlines and encode. + // + CharsetEncoder encoder = Charset.forName( "UTF-8" ).newEncoder(); + ByteArrayOutputStream tmpData = new ByteArrayOutputStream(); + Writer writer = new EOLWriter( new BufferedWriter( new OutputStreamWriter( tmpData, encoder ) ), "\r\n" ); - String mergedString = Pattern.compile("\n").matcher( buf ).replaceAll("\r\n"); + writer.append( "\n" ); + writer.append( dstText ); + writer.append( "\n\n\n\n" ); + writer.append( srcText ); + writer.append( "\n" ); + writer.flush(); + InputStream result = new ByteArrayInputStream( tmpData.toByteArray() ); - InputStream result = encodeText( mergedString, "UTF-8", srcDescription+"+"+dstDescription ); return result; } @@ -227,12 +231,17 @@ public class ModUtilities { patcher.setGlobalPanic( globalPanic ); Document mergedDoc = patcher.patch( mainDoc, appendDoc ); - StringWriter writer = new StringWriter(); - SloppyXMLOutputProcessor.sloppyPrint( mergedDoc, writer, encoding ); - String mergedString = writer.toString(); - mergedString = mergedString.replaceAll( "\r(?!\n)|(?