@ -54,13 +54,14 @@ import java.util.LinkedList;
import java.util.List ;
import java.util.Map ;
import java.util.concurrent.ConcurrentHashMap ;
import java.util.regex.Pattern ;
import java.util.zip.GZIPInputStream ;
import net.yacy.cora.document.encoding.UTF8 ;
import net.yacy.cora.storage.Files ;
import net.yacy.cora.util.ConcurrentLog ;
import org.apache.commons.lang.StringUtils ;
import org.mozilla.intl.chardet.nsDetector ;
import org.mozilla.intl.chardet.nsPSMDetector ;
@ -419,11 +420,10 @@ public final class FileUtils {
return mb ;
}
private final static Pattern backslashbackslash = Pattern . compile ( "\\\\" ) ;
private final static Pattern unescaped_equal = Pattern . compile ( "=" ) ;
private final static Pattern escaped_equal = Pattern . compile ( "\\=" , Pattern . LITERAL ) ;
private final static Pattern escaped_newline = Pattern . compile ( "\\n" , Pattern . LITERAL ) ;
private final static Pattern escaped_backslash = Pattern . compile ( Pattern . quote ( "\\" ) , Pattern . LITERAL ) ;
private final static String [ ] unescaped_strings_in = { "\r\n" , "\r" , "\n" , "=" , "\\" } ;
private final static String [ ] escaped_strings_out = { "\\n" , "\\n" , "\\n" , "\\=" , "\\\\" } ;
private final static String [ ] escaped_strings_in = { "\\\\" , "\\n" , "\\=" } ;
private final static String [ ] unescaped_strings_out = { "\\" , "\n" , "=" } ;
public static void saveMap ( final File file , final Map < String , String > props , final String comment ) {
boolean err = false ;
@ -436,16 +436,13 @@ public final class FileUtils {
for ( final Map . Entry < String , String > entry : props . entrySet ( ) ) {
key = entry . getKey ( ) ;
if ( key ! = null ) {
key = backslashbackslash . matcher ( key ) . replaceAll ( "\\\\" ) ;
key = escaped_newline . matcher ( key ) . replaceAll ( "\\n" ) ;
key = unescaped_equal . matcher ( key ) . replaceAll ( "\\=" ) ;
key = StringUtils . replaceEach ( key , unescaped_strings_in , escaped_strings_out ) ;
}
if ( entry . getValue ( ) = = null ) {
value = "" ;
} else {
value = entry . getValue ( ) ;
value = backslashbackslash . matcher ( value ) . replaceAll ( "\\\\" ) ;
value = escaped_newline . matcher ( value ) . replaceAll ( "\\n" ) ;
value = StringUtils . replaceEach ( value , unescaped_strings_in , escaped_strings_out ) ;
}
pw . println ( key + "=" + value ) ;
}
@ -494,11 +491,8 @@ public final class FileUtils {
pos = line . indexOf ( '=' , pos + 1 ) ;
} while ( pos > 0 & & line . charAt ( pos - 1 ) = = '\\' ) ;
if ( pos > 0 ) try {
String key = escaped_equal . matcher ( line . substring ( 0 , pos ) . trim ( ) ) . replaceAll ( "=" ) ;
key = escaped_newline . matcher ( key ) . replaceAll ( "\n" ) ;
key = escaped_backslash . matcher ( key ) . replaceAll ( "\\" ) ;
String value = escaped_newline . matcher ( line . substring ( pos + 1 ) . trim ( ) ) . replaceAll ( "\n" ) ;
value = value . replace ( "\\\\" , "\\" ) ; // does not work: escaped_backslashbackslash.matcher(value).replaceAll("\\");
String key = StringUtils . replaceEach ( line . substring ( 0 , pos ) . trim ( ) , escaped_strings_in , unescaped_strings_out ) ;
String value = StringUtils . replaceEach ( line . substring ( pos + 1 ) . trim ( ) , escaped_strings_in , unescaped_strings_out ) ;
//System.out.println("key = " + key + ", value = " + value);
props . put ( key , value ) ;
} catch ( final IndexOutOfBoundsException e ) {