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");
}
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;
}
}
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;
}
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);
}
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();
}
Aggregations