Search in sources :

Example 1 with InspectingVisitor

use of org.activityinfo.i18n.tools.parser.InspectingVisitor in project activityinfo by bedatadriven.

the class Check method verifyTermKeysAreGloballyUnique.

private void verifyTermKeysAreGloballyUnique() {
    Map<String, ResourceClass> keys = Maps.newHashMap();
    for (String className : Project.INSTANCE.getResourceClasses()) {
        ResourceClass resourceClass = new ResourceClass(Project.INSTANCE.getSourceDirectory(), className);
        InspectingVisitor visitor = resourceClass.inspect();
        for (String key : visitor.getKeys()) {
            ResourceClass previousDefinition = keys.put(key, resourceClass);
            if (previousDefinition != null) {
                System.err.println(String.format("Duplicate term key '%s' in %s (previously defined in %s)", key, resourceClass.getClassName(), previousDefinition.getClassName()));
                failed = true;
            }
        }
    }
    System.out.println("Found " + keys.size() + " unique term keys");
}
Also used : InspectingVisitor(org.activityinfo.i18n.tools.parser.InspectingVisitor) ResourceClass(org.activityinfo.i18n.tools.model.ResourceClass)

Example 2 with InspectingVisitor

use of org.activityinfo.i18n.tools.parser.InspectingVisitor in project activityinfo by bedatadriven.

the class Check method checkForXmlEntities.

private void checkForXmlEntities() throws IOException {
    Pattern entityPattern = Pattern.compile("&#?[A-Za-z0-9]+;");
    boolean entityFound = false;
    for (String className : Project.INSTANCE.getResourceClasses()) {
        ResourceClass resourceClass = new ResourceClass(Project.INSTANCE.getSourceDirectory(), className);
        InspectingVisitor visitor = resourceClass.inspect();
        for (ResourceClassTerm term : visitor.getTerms()) {
            Matcher matcher = entityPattern.matcher(term.getDefaultTranslation());
            if (matcher.find()) {
                System.err.println(String.format("Term %s in %s uses the XML entity %s.", term.getKey(), className, matcher.group()));
                entityFound = true;
            }
        }
        for (String language : Project.INSTANCE.getLanguages()) {
            File resourceFile = resourceClass.getResourceFile(language);
            Map<String, String> translations = resourceClass.readResource(language);
            for (String key : translations.keySet()) {
                String translation = translations.get(key);
                Matcher matcher = entityPattern.matcher(translation);
                if (matcher.find()) {
                    System.err.println(String.format("Translation %s in %s uses XML entity %s", key, resourceFile.getName(), matcher.group()));
                    entityFound = true;
                }
            }
        }
    }
    if (entityFound) {
        System.err.println("XML Entities should not be used in terms because they are not parsed in many contexts.");
        System.err.println("Use unicode escapes instead.");
        failed = true;
    }
}
Also used : Pattern(java.util.regex.Pattern) ResourceClassTerm(org.activityinfo.i18n.tools.model.ResourceClassTerm) Matcher(java.util.regex.Matcher) InspectingVisitor(org.activityinfo.i18n.tools.parser.InspectingVisitor) File(java.io.File) ResourceClass(org.activityinfo.i18n.tools.model.ResourceClass)

Example 3 with InspectingVisitor

use of org.activityinfo.i18n.tools.parser.InspectingVisitor in project activityinfo by bedatadriven.

the class ResourceClass method inspect.

public InspectingVisitor inspect() {
    // Extract keys from the resource file
    InspectingVisitor visitor = new InspectingVisitor(getJavaSourceFile().getName());
    try {
        CompilationUnit cu = parseJavaSource();
        visitor.visit(cu, null);
    } catch (Exception e) {
        throw new RuntimeException("Exception parsing " + getJavaSourceFile() + ": " + e.getMessage(), e);
    }
    return visitor;
}
Also used : CompilationUnit(com.github.javaparser.ast.CompilationUnit) InspectingVisitor(org.activityinfo.i18n.tools.parser.InspectingVisitor) ParseException(com.github.javaparser.ParseException)

Example 4 with InspectingVisitor

use of org.activityinfo.i18n.tools.parser.InspectingVisitor in project activityinfo by bedatadriven.

the class PropertiesBuilder method addAll.

public void addAll(ResourceClass resourceClass, TranslationSet translations) {
    InspectingVisitor visitor = resourceClass.inspect();
    if (visitor.isMessageSubtype()) {
        this.translationDecorator = new MessageDecorator();
    }
    addAll(visitor.getKeys(), translations);
}
Also used : InspectingVisitor(org.activityinfo.i18n.tools.parser.InspectingVisitor)

Example 5 with InspectingVisitor

use of org.activityinfo.i18n.tools.parser.InspectingVisitor in project activityinfo by bedatadriven.

the class Pull method validateMessages.

private TranslationSet validateMessages(ResourceClass resourceClass, CompilationUnit cu, TranslationSet translationSet) throws IOException {
    InspectingVisitor inspector = new InspectingVisitor(resourceClass.getJavaSourceFile().getName());
    inspector.visit(cu, null);
    for (ResourceClassTerm resourceClassTerm : inspector.getTerms()) {
        checkForNewline(resourceClassTerm, translationSet);
    }
    if (!inspector.isMessageSubtype()) {
        return translationSet;
    }
    ValidatingVisitor validator = new ValidatingVisitor(translationSet);
    validator.visit(cu, null);
    return validator.getValidatedSet();
}
Also used : ResourceClassTerm(org.activityinfo.i18n.tools.model.ResourceClassTerm) ValidatingVisitor(org.activityinfo.i18n.tools.parser.ValidatingVisitor) InspectingVisitor(org.activityinfo.i18n.tools.parser.InspectingVisitor)

Aggregations

InspectingVisitor (org.activityinfo.i18n.tools.parser.InspectingVisitor)6 ResourceClass (org.activityinfo.i18n.tools.model.ResourceClass)3 ResourceClassTerm (org.activityinfo.i18n.tools.model.ResourceClassTerm)3 ParseException (com.github.javaparser.ParseException)1 CompilationUnit (com.github.javaparser.ast.CompilationUnit)1 File (java.io.File)1 Matcher (java.util.regex.Matcher)1 Pattern (java.util.regex.Pattern)1 ValidatingVisitor (org.activityinfo.i18n.tools.parser.ValidatingVisitor)1