package net.sf.latexdraw.res2po;
import java.io.*;
/**
* This file is part of LaTeXDraw.<br>
* Copyright (c) 2005-2011 Arnaud BLOUIN<br>
* <br>
* LaTeXDraw is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free Software
* Foundation; either version 2 of the License, or (at your option) any later version.
* <br>
* LaTeXDraw is distributed without any warranty; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.<br>
* <br>
* @author Arnaud BLOUIN
*/
public class Res2Po {
public static void main(final String argc[]) {
if(argc.length<4)
throw new IllegalArgumentException();
generatePo(new File(argc[0]), new File(argc[1]), new File(argc[2]), argc[3]);
}
public static void generatePo(final File baseDir, final File inputDir, final File outputDir, final String id) {
if(inputDir==null || !inputDir.canRead() || outputDir==null || !outputDir.canWrite() || id==null || !outputDir.isDirectory() || !inputDir.isDirectory())
throw new IllegalArgumentException();
FileFilter filter = new PropertiesFilter();
File[] filesBase = baseDir.listFiles(filter);
File f, f2;
for(int i=0; i<filesBase.length; i++) {
f = new File(outputDir+File.separator+
filesBase[i].getPath().substring(filesBase[i].getPath().lastIndexOf(File.separator), filesBase[i].getPath().lastIndexOf("."))+
"-" + id + ".po");
try {
FileReader flB = new FileReader(filesBase[i]);
BufferedReader brB = new BufferedReader(flB);
FileOutputStream fos = new FileOutputStream(f);
OutputStreamWriter osw = new OutputStreamWriter(fos);
BufferedWriter bw = new BufferedWriter(osw);
f2 = new File(inputDir+File.separator+filesBase[i].getName());
if(f2.canRead())
{
FileInputStream fis = new FileInputStream(f2);
InputStreamReader isr = new InputStreamReader(fis);
BufferedReader brI = new BufferedReader(isr);
generatePo(brB, brI, bw, id);
brI.close();
isr.close();
fis.close();
}
else
generateFullPo(brB, bw, id);
bw.close();
osw.close();
fos.close();
brB.close();
flB.close();
FileWriter fwPOT = new FileWriter(new File(outputDir+File.separator+
filesBase[i].getPath().substring(filesBase[i].getPath().lastIndexOf(File.separator),
filesBase[i].getPath().lastIndexOf(".")) + ".pot"));
BufferedWriter bwPOT = new BufferedWriter(fwPOT);
flB = new FileReader(filesBase[i]);
brB = new BufferedReader(flB);
generatePot(brB, bwPOT);
brB.close();
flB.close();
bwPOT.close();
fwPOT.close();
}
catch(Exception e) { e.printStackTrace(); }
}
}
private static void generatePo(final BufferedReader brB, final BufferedReader brI, final BufferedWriter bw, final String id) {
if(brB==null || brI==null || bw==null)
return ;
try {
bw.write("msgid \"\"\n");
bw.write("msgstr \"\"\n");
bw.write("\"Project-Id-Version: "+ id + "\\n\"\n");
bw.write("\"Content-Type: text/plain; charset=utf-8\\n\"\n\n");
String line1 = brB.readLine(), line2 = brI.readLine();
while(line1!=null && line2!=null) {
if(line1.contains("=")) {
String[] str1 = line1.split("=", 2);
String[] str2 = line2.split("=", 2);
if(!str1[0].equals(str2[0]))
throw new IOException("Pas bonne ligne :" + line1 + " " + line2);
str1[1] = replaceASCIIAccent(str1[1]);//FIXME must use the new conversion process.
str2[1] = replaceASCIIAccent(str2[1]);
str1[1] = str1[1].replace("\\", "");
str2[1] = str2[1].replace("\\", "");
bw.write("#: " + str1[0].replace(".", ":") + "\n");
bw.write("msgid \"" + str1[1] + "\"\n");
bw.write("msgstr \"" + str2[1] + "\"\n");
bw.write('\n');
}
line1 = brB.readLine();
line2 = brI.readLine();
}
if((line1!=null && line1.contains("=")) || (line2!=null && line2.contains("=")))
throw new IOException("Fichier pas égaux !" + line1 + " " + line2);
}
catch(IOException e) {
e.printStackTrace();
}
}
public static String replaceASCIIAccent(final String str) {
if(str==null)
return "";
String newStr = str.replace("\\u00C0", "À");
newStr = newStr.replace("\\u00C1", "Á");
newStr = newStr.replace("\\u00C2", "Â");
newStr = newStr.replace("\\u00C3", "Ã");
newStr = newStr.replace("\\u00C4", "Ä");
newStr = newStr.replace("\\u00C5", "Å");
newStr = newStr.replace("\\u00C6", "Æ");
newStr = newStr.replace("\\u00C7", "Ç");
newStr = newStr.replace("\\u00C8", "È");
newStr = newStr.replace("\\u00C9", "É");
newStr = newStr.replace("\\u00CA", "Ê");
newStr = newStr.replace("\\u00CB", "Ë");
newStr = newStr.replace("\\u00CC", "Ì");
newStr = newStr.replace("\\u00CD", "Í");
newStr = newStr.replace("\\u00CE", "Î");
newStr = newStr.replace("\\u00CF", "Ï");
newStr = newStr.replace("\\u00D0", "Ð");
newStr = newStr.replace("\\u00D1", "Ñ");
newStr = newStr.replace("\\u00D2", "Ò");
newStr = newStr.replace("\\u00D3", "Ó");
newStr = newStr.replace("\\u00D4", "Ô");
newStr = newStr.replace("\\u00D5", "Õ");
newStr = newStr.replace("\\u00D6", "Ö");
newStr = newStr.replace("\\u00D7", "×");
newStr = newStr.replace("\\u00D8", "Ø");
newStr = newStr.replace("\\u00D9", "Ù");
newStr = newStr.replace("\\u00DA", "Ú");
newStr = newStr.replace("\\u00DB", "Û");
newStr = newStr.replace("\\u00DC", "Ü");
newStr = newStr.replace("\\u00DD", "Ý");
newStr = newStr.replace("\\u00DE", "Þ");
newStr = newStr.replace("\\u00DF", "ß");
newStr = newStr.replace("\\u00E0", "à");
newStr = newStr.replace("\\u00E1", "á");
newStr = newStr.replace("\\u00E2", "â");
newStr = newStr.replace("\\u00E3", "ã");
newStr = newStr.replace("\\u00E4", "ä");
newStr = newStr.replace("\\u00E5", "å");
newStr = newStr.replace("\\u00E6", "æ");
newStr = newStr.replace("\\u00E7", "ç");
newStr = newStr.replace("\\u00E8", "è");
newStr = newStr.replace("\\u00E9", "é");
newStr = newStr.replace("\\u00EA", "ê");
newStr = newStr.replace("\\u00EB", "ë");
newStr = newStr.replace("\\u00EC", "ì");
newStr = newStr.replace("\\u00ED", "í");
newStr = newStr.replace("\\u00EE", "î");
newStr = newStr.replace("\\u00EF", "ï");
newStr = newStr.replace("\\u00F0", "ð");
newStr = newStr.replace("\\u00F1", "ñ");
newStr = newStr.replace("\\u00F2", "ò");
newStr = newStr.replace("\\u00F3", "ó");
newStr = newStr.replace("\\u00F4", "ô");
newStr = newStr.replace("\\u00F5", "õ");
newStr = newStr.replace("\\u00F6", "ö");
newStr = newStr.replace("\\u00F7", "÷");
newStr = newStr.replace("\\u00F8", "ø");
newStr = newStr.replace("\\u00F9", "ù");
newStr = newStr.replace("\\u00FA", "ú");
newStr = newStr.replace("\\u00FB", "û");
newStr = newStr.replace("\\u00FC", "ü");
newStr = newStr.replace("\\u00FD", "ý");
newStr = newStr.replace("\\u00FE", "þ");
newStr = newStr.replace("\\u00FF", "ÿ");
newStr = newStr.replace("\\u00B0", "°");
return newStr;
}
protected static void generatePot(final BufferedReader br, final BufferedWriter bw) {
if(br==null || bw==null)
return ;
try {
bw.write("msgid \"\"\n");
bw.write("msgstr \"\"\n");
bw.write("\"Project-Id-Version: PACKAGE VERSION\\n\"\n");
bw.write("\"Content-Type: text/plain; charset=utf-8\\n\"\n\n");
String line = br.readLine();
while(line!=null) {
if(line.contains("=")) {
String[] str = line.split("=", 2);
str[1] = replaceASCIIAccent(str[1]);
str[1] = str[1].replace("\\", "");
bw.write("#: " + str[0].replace(".", ":") + "\n");
bw.write("msgid \"" + str[1] + "\"\n");
bw.write("msgstr \"\"\n");
bw.write('\n');
}
line = br.readLine();
}
}
catch(IOException e) {
e.printStackTrace();
}
}
private static void generateFullPo(final BufferedReader br, final BufferedWriter bw, final String id) {
if(br==null || bw==null || id==null)
return ;
try {
bw.write("msgid \"\"\n");
bw.write("msgstr \"\"\n");
bw.write("\"Project-Id-Version: "+ id + "\\n\"\n");
bw.write("\"Content-Type: text/plain; charset=utf-8\\n\"\n\n");
String line = br.readLine();
while(line!=null) {
if(line.contains("=")) {
String[] str = line.split("=", 2);
str[1] = str[1].replace("\\u00E", "é");
str[1] = str[1].replace("\\", "");
bw.write("#: " + str[0].replace(".", ":") + "\n");
bw.write("msgid \"" + str[1] + "\"\n");
bw.write("msgstr \"" + str[1] + "\"\n");
bw.write('\n');
}
line = br.readLine();
}
}
catch(IOException e) {
e.printStackTrace();
}
}
}