summaryrefslogtreecommitdiffstats
path: root/parser/html/java/htmlparser/translator-src
diff options
context:
space:
mode:
Diffstat (limited to 'parser/html/java/htmlparser/translator-src')
-rw-r--r--parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/AnnotationHelperVisitor.java16
-rw-r--r--parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/CppTypes.java19
-rw-r--r--parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/CppVisitor.java84
-rw-r--r--parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/HVisitor.java41
-rw-r--r--parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/Main.java19
-rw-r--r--parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/SymbolTable.java33
6 files changed, 116 insertions, 96 deletions
diff --git a/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/AnnotationHelperVisitor.java b/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/AnnotationHelperVisitor.java
index 337394a89..432f08b90 100644
--- a/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/AnnotationHelperVisitor.java
+++ b/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/AnnotationHelperVisitor.java
@@ -72,6 +72,10 @@ public class AnnotationHelperVisitor<T> extends VoidVisitorAdapter<T> {
return hasAnnotation("NoLength");
}
+ protected boolean unsigned() {
+ return hasAnnotation("Unsigned");
+ }
+
protected boolean auto() {
return hasAnnotation("Auto");
}
@@ -88,6 +92,18 @@ public class AnnotationHelperVisitor<T> extends VoidVisitorAdapter<T> {
return hasAnnotation("CharacterName");
}
+ protected boolean creator() {
+ return hasAnnotation("Creator");
+ }
+
+ protected boolean htmlCreator() {
+ return hasAnnotation("HtmlCreator");
+ }
+
+ protected boolean svgCreator() {
+ return hasAnnotation("SvgCreator");
+ }
+
private boolean hasAnnotation(String anno) {
if (currentAnnotations == null) {
return false;
diff --git a/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/CppTypes.java b/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/CppTypes.java
index 80216da0e..963d1ac68 100644
--- a/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/CppTypes.java
+++ b/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/CppTypes.java
@@ -117,7 +117,8 @@ public class CppTypes {
"nsHtml5String", "nsNameSpaceManager", "nsIContent", "nsTraceRefcnt",
"jArray", "nsHtml5ArrayCopy", "nsAHtml5TreeBuilderState",
"nsHtml5Atoms", "nsHtml5ByteReadable", "nsIUnicodeDecoder",
- "nsHtml5Macros", "nsIContentHandle" };
+ "nsHtml5Macros", "nsIContentHandle", "nsHtml5Portability",
+ "nsHtml5ContentCreatorFunction"};
private static final String[] OTHER_DECLATIONS = {};
@@ -192,6 +193,10 @@ public class CppTypes {
return "int32_t";
}
+ public String unsignedIntType() {
+ return "uint32_t";
+ }
+
public String stringType() {
return "nsHtml5String";
}
@@ -228,6 +233,18 @@ public class CppTypes {
return "nsIContentHandle*";
}
+ public String htmlCreatorType() {
+ return "mozilla::dom::HTMLContentCreatorFunction";
+ }
+
+ public String svgCreatorType() {
+ return "mozilla::dom::SVGContentCreatorFunction";
+ }
+
+ public String creatorType() {
+ return "nsHtml5ContentCreatorFunction";
+ }
+
public String xhtmlNamespaceLiteral() {
return "kNameSpaceID_XHTML";
}
diff --git a/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/CppVisitor.java b/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/CppVisitor.java
index f4f00070a..a97a9eba1 100644
--- a/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/CppVisitor.java
+++ b/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/CppVisitor.java
@@ -331,13 +331,7 @@ public class CppVisitor extends AnnotationHelperVisitor<LocalSymbolTable> {
} else if ("errorHandler".equals(n.getName())) {
printer.print(cppTypes.errorHandler());
} else {
- String prefixedName = javaClassName + "." + n.getName();
- String constant = symbolTable.cppDefinesByJavaNames.get(prefixedName);
- if (constant != null) {
- printer.print(constant);
- } else {
- printer.print(n.getName());
- }
+ printer.print(n.getName());
}
}
@@ -448,14 +442,6 @@ public class CppVisitor extends AnnotationHelperVisitor<LocalSymbolTable> {
printer.print("#include \"");
printer.print(className);
printer.printLn(".h\"");
- if ("AttributeName".equals(javaClassName)
- || "ElementName".equals(javaClassName)) {
- printer.print("#include \"");
- printer.print(cppTypes.classPrefix());
- printer.print("Releasable");
- printer.print(javaClassName);
- printer.printLn(".h\"");
- }
printer.printLn();
}
@@ -494,7 +480,15 @@ public class CppVisitor extends AnnotationHelperVisitor<LocalSymbolTable> {
name = cppTypes.stringType();
}
} else if ("T".equals(name) || "Object".equals(name)) {
- name = cppTypes.nodeType();
+ if (htmlCreator()) {
+ name = cppTypes.htmlCreatorType();
+ } else if (svgCreator()) {
+ name = cppTypes.svgCreatorType();
+ } else if (creator()) {
+ name = cppTypes.creatorType();
+ } else {
+ name = cppTypes.nodeType();
+ }
} else if ("TokenHandler".equals(name)) {
name = cppTypes.classPrefix() + "TreeBuilder*";
} else if ("EncodingDeclarationHandler".equals(name)) {
@@ -548,7 +542,11 @@ public class CppVisitor extends AnnotationHelperVisitor<LocalSymbolTable> {
case Float:
throw new IllegalStateException("Unsupported primitive.");
case Int:
- printer.print(cppTypes.intType());
+ if (unsigned()) {
+ printer.print(cppTypes.unsignedIntType());
+ } else {
+ printer.print(cppTypes.intType());
+ }
break;
case Long:
throw new IllegalStateException("Unsupported primitive.");
@@ -740,10 +738,14 @@ public class CppVisitor extends AnnotationHelperVisitor<LocalSymbolTable> {
printer.print(" ");
printer.print(className);
printer.print("::");
- if ("AttributeName".equals(n.getType().toString())) {
- printer.print("ATTR_");
- } else if ("ElementName".equals(n.getType().toString())) {
- printer.print("ELT_");
+ String clazzName = n.getType().toString();
+ String field = declarator.getId().toString();
+ if (symbolTable.isAttributeOrElementName(clazzName, field)) {
+ if ("AttributeName".equals(clazzName)) {
+ printer.print("ATTR_");
+ } else if ("ElementName".equals(clazzName)) {
+ printer.print("ELT_");
+ }
}
declarator.getId().accept(this, arg);
printer.print(" = ");
@@ -1079,26 +1081,22 @@ public class CppVisitor extends AnnotationHelperVisitor<LocalSymbolTable> {
if ("DocumentMode".equals(scope.toString())) {
// printer.print(cppTypes.documentModeType());
// printer.print(".");
+ } else if ("creator".equals(scope.toString()) || "this.creator".equals(scope.toString())) {
+ scope.accept(this, arg);
+ printer.print(".");
} else {
scope.accept(this, arg);
printer.print("->");
}
} else {
- String prefixedName = clazzName + "." + field;
- String constant = symbolTable.cppDefinesByJavaNames.get(prefixedName);
- if (constant != null) {
- printer.print(constant);
- return;
- } else {
- printer.print(cppTypes.classPrefix());
- printer.print(clazzName);
- printer.print("::");
- if (symbolTable.isNotAnAttributeOrElementName(field)) {
- if ("AttributeName".equals(clazzName)) {
- printer.print("ATTR_");
- } else if ("ElementName".equals(clazzName)) {
- printer.print("ELT_");
- }
+ printer.print(cppTypes.classPrefix());
+ printer.print(clazzName);
+ printer.print("::");
+ if (symbolTable.isAttributeOrElementName(clazzName, field)) {
+ if ("AttributeName".equals(clazzName)) {
+ printer.print("ATTR_");
+ } else if ("ElementName".equals(clazzName)) {
+ printer.print("ELT_");
}
}
}
@@ -1337,7 +1335,8 @@ public class CppVisitor extends AnnotationHelperVisitor<LocalSymbolTable> {
if (clazzName == null) {
scope.accept(this, arg);
if ("length".equals(n.getName())
- || "charAt".equals(n.getName())) {
+ || "charAt".equals(n.getName())
+ || "creator".equals(scope.toString())) {
printer.print(".");
} else {
printer.print("->");
@@ -1383,19 +1382,12 @@ public class CppVisitor extends AnnotationHelperVisitor<LocalSymbolTable> {
suppressPointer = true;
printTypeArgs(n.getTypeArgs(), arg);
- if ("createAttributeName".equals(currentMethod)
- || "elementNameByBuffer".equals(currentMethod)) {
- printer.print(cppTypes.classPrefix());
- printer.print("Releasable");
- printer.print(n.getType().getName());
- } else {
- n.getType().accept(this, arg);
- }
+ n.getType().accept(this, arg);
suppressPointer = false;
if ("AttributeName".equals(n.getType().getName())) {
List<Expression> args = n.getArgs();
- while (args.size() > 3) {
+ while (args != null && args.size() > 3) {
args.remove(3);
}
}
diff --git a/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/HVisitor.java b/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/HVisitor.java
index 25cf7aef1..902eb348a 100644
--- a/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/HVisitor.java
+++ b/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/HVisitor.java
@@ -37,7 +37,6 @@
package nu.validator.htmlparser.cpptranslate;
-import java.util.LinkedList;
import java.util.List;
import japa.parser.ast.body.FieldDeclaration;
@@ -45,12 +44,9 @@ import japa.parser.ast.body.MethodDeclaration;
import japa.parser.ast.body.ModifierSet;
import japa.parser.ast.body.Parameter;
import japa.parser.ast.body.VariableDeclarator;
-import japa.parser.ast.expr.IntegerLiteralExpr;
-import japa.parser.ast.expr.MethodCallExpr;
import japa.parser.ast.stmt.BlockStmt;
import japa.parser.ast.type.PrimitiveType;
import japa.parser.ast.type.ReferenceType;
-import japa.parser.ast.type.Type;
public class HVisitor extends CppVisitor {
@@ -60,8 +56,6 @@ public class HVisitor extends CppVisitor {
private Visibility previousVisibility = Visibility.NONE;
- private List<String> defines = new LinkedList<String>();
-
/**
* @see nu.validator.htmlparser.cpptranslate.CppVisitor#printMethodNamespace()
*/
@@ -145,10 +139,10 @@ public class HVisitor extends CppVisitor {
*/
@Override protected void endClassDeclaration() {
printModifiers(ModifierSet.PUBLIC | ModifierSet.STATIC);
- printer.printLn("void initializeStatics();");
+ printer.printLn("void initializeStatics();");
printModifiers(ModifierSet.PUBLIC | ModifierSet.STATIC);
- printer.printLn("void releaseStatics();");
-
+ printer.printLn("void releaseStatics();");
+
printer.unindent();
printer.unindent();
@@ -161,13 +155,6 @@ public class HVisitor extends CppVisitor {
printer.printLn("};");
printer.printLn();
-
- for (String define : defines) {
- printer.printLn(define);
- }
-
- printer.printLn();
- printer.printLn();
printer.printLn("#endif");
}
@@ -226,18 +213,16 @@ public class HVisitor extends CppVisitor {
throw new IllegalStateException(
"More than one variable declared by one declarator.");
}
- String name = javaClassName + "." + declarator.getId().getName();
- String value = declarator.getInit().toString();
- if ("Integer.MAX_VALUE".equals(value)) {
- value = cppTypes.maxInteger();
- }
- String longName = definePrefix + declarator.getId().getName();
- if (symbolTable.cppDefinesByJavaNames.containsKey(name)) {
- throw new IllegalStateException(
- "Duplicate #define constant local name: " + name);
- }
- symbolTable.cppDefinesByJavaNames.put(name, longName);
- defines.add("#define " + longName + " " + value);
+ printModifiers(modifiers);
+ printer.print("const ");
+ n.getType().accept(this, arg);
+ printer.print(" ");
+ declarator.getId().accept(this, arg);
+ printer.print(" = ");
+ declarator.getInit().accept(this, arg);
+ printer.printLn(";");
+ printer.printLn();
+ symbolTable.addPrimitiveConstant(javaClassName, declarator.getId().toString());
} else {
if (n.getType() instanceof ReferenceType) {
ReferenceType rt = (ReferenceType) n.getType();
diff --git a/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/Main.java b/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/Main.java
index 53347bd42..307d7d8a6 100644
--- a/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/Main.java
+++ b/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/Main.java
@@ -37,28 +37,26 @@
package nu.validator.htmlparser.cpptranslate;
-import japa.parser.JavaParser;
-import japa.parser.ParseException;
-import japa.parser.ast.CompilationUnit;
-
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
-import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
+import japa.parser.JavaParser;
+import japa.parser.ParseException;
+import japa.parser.ast.CompilationUnit;
+
public class Main {
static final String[] H_LIST = {
+ "AttributeName",
+ "ElementName",
"Tokenizer",
"TreeBuilder",
"MetaScanner",
- "AttributeName",
- "ElementName",
- "HtmlAttributes",
"StackNode",
"UTF16Buffer",
"StateSnapshot",
@@ -66,12 +64,11 @@ public class Main {
};
private static final String[] CPP_LIST = {
+ "AttributeName",
+ "ElementName",
"Tokenizer",
"TreeBuilder",
"MetaScanner",
- "AttributeName",
- "ElementName",
- "HtmlAttributes",
"StackNode",
"UTF16Buffer",
"StateSnapshot",
diff --git a/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/SymbolTable.java b/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/SymbolTable.java
index 970a2b64b..3619c923a 100644
--- a/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/SymbolTable.java
+++ b/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/SymbolTable.java
@@ -38,11 +38,13 @@
package nu.validator.htmlparser.cpptranslate;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.Map;
+import java.util.Set;
public class SymbolTable {
- public final Map<String, String> cppDefinesByJavaNames = new HashMap<String, String>();
+ private final Set<StringPair> primitiveConstants = new HashSet<StringPair>();
private final Map<StringPair, Type> fields = new HashMap<StringPair, Type>();
@@ -51,17 +53,24 @@ public class SymbolTable {
/**
* This is a sad hack to work around the fact the there's no real symbol
* table yet.
- *
- * @param name
+ *
+ * @param field
* @return
*/
- public boolean isNotAnAttributeOrElementName(String name) {
- return !("ATTRIBUTE_HASHES".equals(name)
- || "ATTRIBUTE_NAMES".equals(name)
- || "ELEMENT_HASHES".equals(name)
- || "ELEMENT_NAMES".equals(name) || "ALL_NO_NS".equals(name));
+ public boolean isAttributeOrElementName(String klazz, String field) {
+ if (isPrimitiveConstant(klazz, field)) {
+ return false;
+ }
+ return !("ATTRIBUTE_HASHES".equals(field)
+ || "ATTRIBUTE_NAMES".equals(field)
+ || "ELEMENT_HASHES".equals(field)
+ || "ELEMENT_NAMES".equals(field) || "ALL_NO_NS".equals(field));
}
-
+
+ public void addPrimitiveConstant(String klazz, String field) {
+ primitiveConstants.add(new StringPair(klazz, field));
+ }
+
public void putFieldType(String klazz, String field, Type type) {
fields.put(new StringPair(klazz, field), type);
}
@@ -69,7 +78,11 @@ public class SymbolTable {
public void putMethodReturnType(String klazz, String method, Type type) {
methodReturns.put(new StringPair(klazz, method), type);
}
-
+
+ public boolean isPrimitiveConstant(String klazz, String field) {
+ return primitiveConstants.contains(new StringPair(klazz, field));
+ }
+
public Type getFieldType(String klazz, String field) {
return fields.get(new StringPair(klazz, field));
}