X-Git-Url: https://code.wpia.club/?p=gigi.git;a=blobdiff_plain;f=util-testing%2Forg%2Fcacert%2Fgigi%2Flocalisation%2FTranslationCollector.java;fp=util-testing%2Forg%2Fcacert%2Fgigi%2Flocalisation%2FTranslationCollector.java;h=dc2e89c1a3d2f7a40dfaba40dd392f8531e8ba4f;hp=25a0e8d5d0292066969d6634f5c90d70ca698804;hb=cb5910c228171e38c8abfecbd99cef9eda2cca72;hpb=44cd191010b3e67c80127e05ee78e94032edd8dc diff --git a/util-testing/org/cacert/gigi/localisation/TranslationCollector.java b/util-testing/org/cacert/gigi/localisation/TranslationCollector.java index 25a0e8d5..dc2e89c1 100644 --- a/util-testing/org/cacert/gigi/localisation/TranslationCollector.java +++ b/util-testing/org/cacert/gigi/localisation/TranslationCollector.java @@ -1,4 +1,5 @@ package org.cacert.gigi.localisation; + import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; @@ -35,236 +36,222 @@ import org.eclipse.jdt.internal.compiler.parser.Parser; import org.eclipse.jdt.internal.compiler.problem.ProblemReporter; public class TranslationCollector { - static class TranslationEntry implements Comparable { - String text; - String occur1; - List occur; - public TranslationEntry(String text, String occur) { - this.text = text; - occur1 = occur; - } - public List getOccur() { - if (occur == null) { - return Arrays.asList(occur1); - } - return occur; - } - public void add(String t) { - if (occur == null) { - occur = new ArrayList<>(Arrays.asList(occur1)); - } - occur.add(t); - } - @Override - public int compareTo(TranslationEntry o) { - int i = occur1.compareTo(o.occur1); - if (i != 0) { - return i; - } - - return text.compareTo(o.text); - } - } - - private HashMap translations = new HashMap<>(); - - public final File base; - - public TranslationCollector(File base, File conf) { - this.base = base; - taint = new LinkedList<>(); - for (String s : new FileIterable(conf)) { - taint.add(TaintSource.parseTaint(s)); - } - } - public void run(File out) throws IOException { - scanTemplates(); - scanCode(taint); - - System.out - .println("Total Translatable Strings: " + translations.size()); - TreeSet trs = new TreeSet<>(translations.values()); - writePOFile(out, trs); - - } - - public void add(String text, String line) { - if(text.contains("\r") || text.contains("\n")){ - throw new Error("Malformed translation in " + line); - } - TranslationEntry i = translations.get(text); - if (i == null) { - translations.put(text, new TranslationEntry(text, line)); - return; - } - i.add(line); - } - - private void scanCode(LinkedList taint) throws Error { - PrintWriter out = new PrintWriter(System.out); - Main m = new Main(out, out, false, null, null); - File[] fs = recurse( - new File(new File(new File(base, "src"), "org"), "cacert"), - new LinkedList(), ".java").toArray(new File[0]); - String[] t = new String[fs.length + 3]; - t[0] = "-cp"; - t[1] = new File(base, "bin").getAbsolutePath(); - t[2] = "-7"; - for (int i = 0; i < fs.length; i++) { - t[i + 3] = fs[i].getAbsolutePath(); - } - m.configure(t); - FileSystem environment = m.getLibraryAccess(); - CompilerOptions compilerOptions = new CompilerOptions(m.options);//new HashMap<>());//m.options); - compilerOptions.performMethodsFullRecovery = false; - compilerOptions.performStatementsRecovery = false; - //check - compilerOptions.sourceLevel = ClassFileConstants.JDK1_7; - compilerOptions.complianceLevel = ClassFileConstants.JDK1_7; - compilerOptions.originalComplianceLevel = ClassFileConstants.JDK1_7; - - ProblemReporter pr = new ProblemReporter(m.getHandlingPolicy(), - compilerOptions, m.getProblemFactory()); - ITypeRequestor tr = new ITypeRequestor() { - - @Override - public void accept(ISourceType[] sourceType, - PackageBinding packageBinding, - AccessRestriction accessRestriction) { - throw new IllegalStateException("source type not implemented"); - } - - @Override - public void accept(IBinaryType binaryType, - PackageBinding packageBinding, - AccessRestriction accessRestriction) { - le.createBinaryTypeFrom(binaryType, packageBinding, - accessRestriction); - } - - @Override - public void accept(ICompilationUnit unit, - AccessRestriction accessRestriction) { - throw new IllegalStateException( - "compilation unit not implemented"); - } - }; - le = new LookupEnvironment(tr, compilerOptions, pr, environment); - Parser parser = new Parser(pr, - compilerOptions.parseLiteralExpressionsAsConstants); - CompilationUnit[] sourceUnits = m.getCompilationUnits(); - CompilationUnitDeclaration[] parsedUnits = new CompilationUnitDeclaration[sourceUnits.length]; - for (int i = 0; i < parsedUnits.length; i++) { - - CompilationResult unitResult = new CompilationResult( - sourceUnits[i], i, parsedUnits.length, - compilerOptions.maxProblemsPerUnit); - CompilationUnitDeclaration parsedUnit = parser.parse( - sourceUnits[i], unitResult); - le.buildTypeBindings(parsedUnit, null /*no access restriction*/); - parsedUnits[i] = parsedUnit; - } - le.completeTypeBindings(); - for (int i = 0; i < parsedUnits.length; i++) { - CompilationUnitDeclaration parsedUnit = parsedUnits[i]; - - parser.getMethodBodies(parsedUnit); - parsedUnit.scope.faultInTypes(); - parsedUnit.scope.verifyMethods(le.methodVerifier()); - parsedUnit.resolve(); - } - for (int i = 0; i < parsedUnits.length; i++) { - CompilationUnitDeclaration parsedUnit = parsedUnits[i]; - if (parsedUnit.compilationResult.problems != null) { - int err = 0; - for (int c = 0; c < parsedUnit.compilationResult.problemCount; c++) { - CategorizedProblem problem = parsedUnit.compilationResult.problems[c]; - if (problem.isError()) { - err++; - } - if (OUTPUT_WARNINGS || problem.isError()) { - System.out.println(problem); - StringBuilder prob = new StringBuilder(); - prob.append(parsedUnit.compilationResult.fileName); - prob.append(":"); - prob.append(problem.getSourceLineNumber()); - System.out.println(prob.toString()); - } - } - if (err > 0) { - throw new Error(); - } - } - - if (parsedUnit.types == null) { - System.out.println("No types"); - - } else { - TranslationCollectingVisitor v = new TranslationCollectingVisitor( - parsedUnit, - taint.toArray(new TaintSource[taint.size()]), this); - for (TypeDeclaration td : parsedUnit.types) { - td.traverse(v, td.scope); - } - } - parsedUnits[i] = parsedUnit; - } - } - private void scanTemplates() throws UnsupportedEncodingException, - FileNotFoundException { - File[] ts = recurse( - new File(new File(new File(base, "src"), "org"), "cacert"), - new LinkedList(), ".templ").toArray(new File[0]); - for (File file : ts) { - Template t = new Template(new InputStreamReader( - new FileInputStream(file), "UTF-8")); - LinkedList i = new LinkedList(); - t.addTranslations(i); - for (String string : i) { - add(string, - file.getAbsolutePath().substring( - base.getAbsolutePath().length() + 1) - + ":1"); - } - } - } - - static LookupEnvironment le; - private static final boolean OUTPUT_WARNINGS = false; - - private LinkedList taint; - public static void main(String[] args) throws IOException { - new TranslationCollector(new File(args[1]), new File(args[0])) - .run(new File(args[2])); - } - - public static void writePOFile(File target, - Collection strings) throws IOException { - PrintWriter out = new PrintWriter(target); - for (TranslationEntry s : strings) { - out.print("#:"); - for (String st : s.getOccur()) { - out.print(" " + st); - } - out.println(); - out.println("msgid \"" - + s.text.replace("\\", "\\\\").replace("\"", "\\\"") + "\""); - out.println("msgstr \"\""); - out.println(); - } - out.close(); - } - - private static List recurse(File file, List toAdd, String pt) { - if (file.isDirectory()) { - for (File f : file.listFiles()) { - recurse(f, toAdd, pt); - } - } else { - if (file.getName().endsWith(pt)) { - toAdd.add(file); - } - } - return toAdd; - } + + static class TranslationEntry implements Comparable { + + String text; + + String occur1; + + List occur; + + public TranslationEntry(String text, String occur) { + this.text = text; + occur1 = occur; + } + + public List getOccur() { + if (occur == null) { + return Arrays.asList(occur1); + } + return occur; + } + + public void add(String t) { + if (occur == null) { + occur = new ArrayList<>(Arrays.asList(occur1)); + } + occur.add(t); + } + + @Override + public int compareTo(TranslationEntry o) { + int i = occur1.compareTo(o.occur1); + if (i != 0) { + return i; + } + + return text.compareTo(o.text); + } + } + + private HashMap translations = new HashMap<>(); + + public final File base; + + public TranslationCollector(File base, File conf) { + this.base = base; + taint = new LinkedList<>(); + for (String s : new FileIterable(conf)) { + taint.add(TaintSource.parseTaint(s)); + } + } + + public void run(File out) throws IOException { + scanTemplates(); + scanCode(taint); + + System.out.println("Total Translatable Strings: " + translations.size()); + TreeSet trs = new TreeSet<>(translations.values()); + writePOFile(out, trs); + + } + + public void add(String text, String line) { + if (text.contains("\r") || text.contains("\n")) { + throw new Error("Malformed translation in " + line); + } + TranslationEntry i = translations.get(text); + if (i == null) { + translations.put(text, new TranslationEntry(text, line)); + return; + } + i.add(line); + } + + private void scanCode(LinkedList taint) throws Error { + PrintWriter out = new PrintWriter(System.out); + Main m = new Main(out, out, false, null, null); + File[] fs = recurse(new File(new File(new File(base, "src"), "org"), "cacert"), new LinkedList(), ".java").toArray(new File[0]); + String[] t = new String[fs.length + 3]; + t[0] = "-cp"; + t[1] = new File(base, "bin").getAbsolutePath(); + t[2] = "-7"; + for (int i = 0; i < fs.length; i++) { + t[i + 3] = fs[i].getAbsolutePath(); + } + m.configure(t); + FileSystem environment = m.getLibraryAccess(); + CompilerOptions compilerOptions = new CompilerOptions(m.options);// new + // HashMap<>());//m.options); + compilerOptions.performMethodsFullRecovery = false; + compilerOptions.performStatementsRecovery = false; + // check + compilerOptions.sourceLevel = ClassFileConstants.JDK1_7; + compilerOptions.complianceLevel = ClassFileConstants.JDK1_7; + compilerOptions.originalComplianceLevel = ClassFileConstants.JDK1_7; + + ProblemReporter pr = new ProblemReporter(m.getHandlingPolicy(), compilerOptions, m.getProblemFactory()); + ITypeRequestor tr = new ITypeRequestor() { + + @Override + public void accept(ISourceType[] sourceType, PackageBinding packageBinding, AccessRestriction accessRestriction) { + throw new IllegalStateException("source type not implemented"); + } + + @Override + public void accept(IBinaryType binaryType, PackageBinding packageBinding, AccessRestriction accessRestriction) { + le.createBinaryTypeFrom(binaryType, packageBinding, accessRestriction); + } + + @Override + public void accept(ICompilationUnit unit, AccessRestriction accessRestriction) { + throw new IllegalStateException("compilation unit not implemented"); + } + }; + le = new LookupEnvironment(tr, compilerOptions, pr, environment); + Parser parser = new Parser(pr, compilerOptions.parseLiteralExpressionsAsConstants); + CompilationUnit[] sourceUnits = m.getCompilationUnits(); + CompilationUnitDeclaration[] parsedUnits = new CompilationUnitDeclaration[sourceUnits.length]; + for (int i = 0; i < parsedUnits.length; i++) { + + CompilationResult unitResult = new CompilationResult(sourceUnits[i], i, parsedUnits.length, compilerOptions.maxProblemsPerUnit); + CompilationUnitDeclaration parsedUnit = parser.parse(sourceUnits[i], unitResult); + le.buildTypeBindings(parsedUnit, null /* no access restriction */); + parsedUnits[i] = parsedUnit; + } + le.completeTypeBindings(); + for (int i = 0; i < parsedUnits.length; i++) { + CompilationUnitDeclaration parsedUnit = parsedUnits[i]; + + parser.getMethodBodies(parsedUnit); + parsedUnit.scope.faultInTypes(); + parsedUnit.scope.verifyMethods(le.methodVerifier()); + parsedUnit.resolve(); + } + for (int i = 0; i < parsedUnits.length; i++) { + CompilationUnitDeclaration parsedUnit = parsedUnits[i]; + if (parsedUnit.compilationResult.problems != null) { + int err = 0; + for (int c = 0; c < parsedUnit.compilationResult.problemCount; c++) { + CategorizedProblem problem = parsedUnit.compilationResult.problems[c]; + if (problem.isError()) { + err++; + } + if (OUTPUT_WARNINGS || problem.isError()) { + System.out.println(problem); + StringBuilder prob = new StringBuilder(); + prob.append(parsedUnit.compilationResult.fileName); + prob.append(":"); + prob.append(problem.getSourceLineNumber()); + System.out.println(prob.toString()); + } + } + if (err > 0) { + throw new Error(); + } + } + + if (parsedUnit.types == null) { + System.out.println("No types"); + + } else { + TranslationCollectingVisitor v = new TranslationCollectingVisitor(parsedUnit, taint.toArray(new TaintSource[taint.size()]), this); + for (TypeDeclaration td : parsedUnit.types) { + td.traverse(v, td.scope); + } + } + parsedUnits[i] = parsedUnit; + } + } + + private void scanTemplates() throws UnsupportedEncodingException, FileNotFoundException { + File[] ts = recurse(new File(new File(new File(base, "src"), "org"), "cacert"), new LinkedList(), ".templ").toArray(new File[0]); + for (File file : ts) { + Template t = new Template(new InputStreamReader(new FileInputStream(file), "UTF-8")); + LinkedList i = new LinkedList(); + t.addTranslations(i); + for (String string : i) { + add(string, file.getAbsolutePath().substring(base.getAbsolutePath().length() + 1) + ":1"); + } + } + } + + static LookupEnvironment le; + + private static final boolean OUTPUT_WARNINGS = false; + + private LinkedList taint; + + public static void main(String[] args) throws IOException { + new TranslationCollector(new File(args[1]), new File(args[0])).run(new File(args[2])); + } + + public static void writePOFile(File target, Collection strings) throws IOException { + PrintWriter out = new PrintWriter(target); + for (TranslationEntry s : strings) { + out.print("#:"); + for (String st : s.getOccur()) { + out.print(" " + st); + } + out.println(); + out.println("msgid \"" + s.text.replace("\\", "\\\\").replace("\"", "\\\"") + "\""); + out.println("msgstr \"\""); + out.println(); + } + out.close(); + } + + private static List recurse(File file, List toAdd, String pt) { + if (file.isDirectory()) { + for (File f : file.listFiles()) { + recurse(f, toAdd, pt); + } + } else { + if (file.getName().endsWith(pt)) { + toAdd.add(file); + } + } + return toAdd; + } }