Index: lutinutil/src/java/org/codelutin/i18n/I18nFileReader.java diff -u lutinutil/src/java/org/codelutin/i18n/I18nFileReader.java:1.3 lutinutil/src/java/org/codelutin/i18n/I18nFileReader.java:1.4 --- lutinutil/src/java/org/codelutin/i18n/I18nFileReader.java:1.3 Fri Dec 21 10:33:29 2007 +++ lutinutil/src/java/org/codelutin/i18n/I18nFileReader.java Sun Mar 30 00:16:54 2008 @@ -23,30 +23,24 @@ * Created: Nov 22, 2004 * * @author Cédric Pineau - * @version $Revision: 1.3 $ + * @version $Revision: 1.4 $ * - * Last update : $Date: 2007-12-21 10:33:29 $ + * Last update : $Date: 2008-03-30 00:16:54 $ * by : $Author: tchemit $ */ package org.codelutin.i18n; +import java.io.BufferedReader; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; -import java.io.BufferedReader; import java.io.InputStreamReader; -import java.nio.ByteBuffer; -import java.nio.CharBuffer; import java.nio.charset.Charset; import java.util.Properties; import java.util.regex.Pattern; -import sun.nio.cs.StandardCharsets; - -/** - * Classe assurant la lecture et les possibles traitement nécessaires à I18n. - */ +/** Classe assurant la lecture et les possibles traitement nécessaires à I18n. */ public class I18nFileReader extends Properties { protected static final Pattern commentPattern = Pattern.compile("[^\\\\]#"); @@ -54,73 +48,48 @@ protected static final Pattern splitPattern = Pattern.compile("[^\\\\]="); private static final long serialVersionUID = 3611718334066783394L; - public void load2(InputStream inStream,String encodingTo) throws IOException { + public void load(InputStream inStream, String encodingTo) throws IOException { Charset charsetTo = Charset.forName(encodingTo); BufferedReader readerFile; - readerFile = new BufferedReader(new InputStreamReader(inStream,charsetTo)); + readerFile = new BufferedReader(new InputStreamReader(inStream, charsetTo)); String lineFile; StringBuilder builderFile; builderFile = new StringBuilder(); - while ((lineFile=readerFile.readLine())!=null) { + while ((lineFile = readerFile.readLine()) != null) { builderFile.append(lineFile).append('\n'); } readerFile.close(); super.load(new ByteArrayInputStream(builderFile.toString().getBytes())); } - /** - * - * @param inStream - * @param encoding - * @throws IOException - * @deprecated Ce code ne fonctionne pas lorsque les fichiers sont trop gros, - * de plus on n'obtient pas le même résultat si le fichier vient d'un jar - * ou du filesystem. Utiliser désormais la méthode {@link #load2(java.io.InputStream, String)} - * Attention, la nouvelle méthode prend comme second paramètres non pas - * l'encoding d'origine mais celui de destination. - * TODO Comprendre pourquoi cette différence. - * - */ - public void load(InputStream inStream, String encoding) throws IOException { - int available = inStream.available(); - byte[] bytes = new byte[available]; - inStream.read(bytes); - ByteBuffer buf = ByteBuffer.wrap(bytes); - Charset charset = new StandardCharsets().charsetForName(encoding); - CharBuffer charBuf = charset.decode(buf); - Charset utf8Charset = new StandardCharsets().charsetForName("ISO8859-1"); - ByteBuffer byteBuf = utf8Charset.encode(charBuf); - super.load(new ByteArrayInputStream(byteBuf.array())); - } - protected String interpretBackslashes(String message) { int backslashIndex = -1; - while ((backslashIndex = message.indexOf("\\", backslashIndex+1)) != -1) { + while ((backslashIndex = message.indexOf("\\", backslashIndex + 1)) != -1) { if (message.length() >= backslashIndex + 1) { char charNextToBackslash = message.charAt(backslashIndex + 1); char replacementChar; switch (charNextToBackslash) { - case '\\': - replacementChar = '\\'; - break; - case 't': - replacementChar = '\t'; - break; - case 'n': - replacementChar = '\n'; - break; - case ' ': - replacementChar = ' '; - break; - case '=': - replacementChar = '='; - break; - case ':': - replacementChar = ':'; - break; - default: - replacementChar = '\\'; - break; + case '\\': + replacementChar = '\\'; + break; + case 't': + replacementChar = '\t'; + break; + case 'n': + replacementChar = '\n'; + break; + case ' ': + replacementChar = ' '; + break; + case '=': + replacementChar = '='; + break; + case ':': + replacementChar = ':'; + break; + default: + replacementChar = '\\'; + break; } message = message.substring(0, backslashIndex) + replacementChar + message.substring(backslashIndex + 2); } @@ -128,53 +97,32 @@ return message; } -// public void store(OutputStream outStream, String header) throws IOException { -// BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(outStream, "UTF-8")); -// StringTokenizer tokens = new StringTokenizer(header, "\n"); -// while (tokens.hasMoreTokens()) { -// String line = tokens.nextToken(); -// if (!line.trim().startsWith("#")) { -// writer.write("#"); -// } -// writer.write(line + "\n"); -// } -// -// for (Iterator iter = super.keys().iterator(); iter.hasNext();) { -// String key = (String) iter.next(); -// String value = super.getProperty(key); -// key = serializeBackslashes(key); -// value = serializeBackslashes(value); -// writer.write(key+"="+value+"\n"); -// } -// writer.close(); -// } - private static char[] chars = {'\\', '\n', '\t', ' ', '=', ':'}; protected String serializeBackslashes(String message) { for (char c : chars) { int charIndex = -1; - while ((charIndex = message.indexOf(c, charIndex+2)) != -1) { + while ((charIndex = message.indexOf(c, charIndex + 2)) != -1) { String replacementString = "" + c; - switch(c) { - case '\\': - replacementString = "\\\\"; - break; - case '\t': - replacementString = "\\t"; - break; - case '\n': - replacementString = "\\n"; - break; - case ' ': - replacementString = "\\ "; - break; - case '=': - replacementString = "\\="; - break; - case ':': - replacementString = "\\:"; - break; + switch (c) { + case '\\': + replacementString = "\\\\"; + break; + case '\t': + replacementString = "\\t"; + break; + case '\n': + replacementString = "\\n"; + break; + case ' ': + replacementString = "\\ "; + break; + case '=': + replacementString = "\\="; + break; + case ':': + replacementString = "\\:"; + break; } message = message.substring(0, charIndex) + replacementString + message.substring(charIndex + 1); }