1 Commits

Author SHA1 Message Date
dependabot[bot]
4b99683147 Bump jsoup from 1.14.3 to 1.15.3 in /code_gen
Bumps [jsoup](https://github.com/jhy/jsoup) from 1.14.3 to 1.15.3.
- [Release notes](https://github.com/jhy/jsoup/releases)
- [Changelog](https://github.com/jhy/jsoup/blob/master/CHANGES)
- [Commits](https://github.com/jhy/jsoup/compare/jsoup-1.14.3...jsoup-1.15.3)

---
updated-dependencies:
- dependency-name: org.jsoup:jsoup
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-09-01 23:55:56 +00:00
394 changed files with 3423 additions and 3123 deletions

View File

@@ -9,7 +9,7 @@ jobs:
strategy:
fail-fast: false
matrix:
java_version: [1.8, 11, 17]
java_version: [1.8, 9, 10, 11, 12, 13]
os: [windows-latest, macOS-latest, ubuntu-latest]
steps:
@@ -23,6 +23,6 @@ jobs:
if: contains(matrix.os, 'win') == false
run: chmod +x ./mvnw
- name: Build with Maven
run: ./mvnw verify --file pom.xml --batch-mode
run: ./mvnw verify --file library/pom.xml --batch-mode
env:
MAVEN_OPTS: -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn

1
.gitignore vendored
View File

@@ -11,5 +11,4 @@ hs_err_pid*
buildNumber.properties
### IntelliJ ###
*.iml
.idea/

View File

@@ -33,7 +33,7 @@ If you are on Windows, there should be no Problems.
### Reformatting of generated Java Code
As this Projects makes use of Code-Generation techniques in order to generate a more typesafe API without too much manual Work,
there is the `j2html-codegen/` directory which contains everything needed to generate the code.
there is the `code_gen/` directory which contains everything needed to generate the code.
For simplicity (and also to avoid extra dependencies), they do not format the code correctly.
@@ -51,7 +51,7 @@ The workflow (most of the time) consists of:
## Project Architecture
### j2html/src/main/java/j2html/TagCreator.java
### library/src/main/java/j2html/TagCreator.java
This is **the** central class in J2HTML. It provides the methods
for users of J2HTML to generate all HTML Tags.
@@ -80,7 +80,7 @@ html(
Each HTML Tag has it's own class, which makes it possible for each Tag to have
the correct Attributes and Methods to set those Attributes.
The classes are located in `j2html/src/main/java/j2html/tags/specialized` and follow the naming convention `tag_name + 'Tag.java'`, e.g. `BodyTag.java`.
The classes are located in `library/src/main/java/j2html/tags/specialized` and follow the naming convention `tag_name + 'Tag.java'`, e.g. `BodyTag.java`.
Notice that the first letter of the Tag is in uppercase.
Each Tag-specific class `implements` interfaces which correspond to the Attributes that can be set on these Tags.
@@ -128,7 +128,7 @@ If you find a way, that would be a great PR.
### Special classes/interfaces besides TagCreator.java
There are 3 classes which contain code-generating methods in `j2html-codegen/src/main/java/j2html_codegen/generators/`:
There are 3 classes which contain code-generating methods in `code_gen/src/main/java/j2html_codegen/generators/`:
- `AttributeInterfaceCodeGenerator.java` (generating the interfaces for the attributes)
- `SpecializedTagClassCodeGenerator.java` (generating the classes for the tags)
@@ -147,7 +147,7 @@ Attributes differ in their 'type' . Some of them can be set with numbers (which
Others can only be set or not set, others still have 3 states: set, unset, and not present.
To model these propertise, a single Attribute can be described by an instance of **AttrD.java**.
`j2html/src/main/java/j2html/tags/generators/AttributesList.java` contains the different Attributes, their properties,
`library/src/main/java/j2html/tags/generators/AttributesList.java` contains the different Attributes, their properties,
and the Tags they can be set on. It is the starting point for adding new Attributes and customizing their properties.

85
code_gen/pom.xml Normal file
View File

@@ -0,0 +1,85 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.j2html</groupId>
<artifactId>j2htmlcodegen</artifactId>
<version>1.0-SNAPSHOT</version>
<name>j2htmlcodegen</name>
<url>https://j2html.com/</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.15.3</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.squareup</groupId>
<artifactId>javapoet</artifactId>
<version>1.9.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.2.0</version>
</plugin>
<!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.2.0</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.10.1</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
<!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
<plugin>
<artifactId>maven-site-plugin</artifactId>
<version>3.7.1</version>
</plugin>
<plugin>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>3.0.0</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>

View File

@@ -1,7 +1,7 @@
package com.j2html.codegen;
package j2html_codegen;
import com.j2html.codegen.generators.SpecializedTagClassCodeGenerator;
import com.j2html.codegen.generators.AttributeInterfaceCodeGenerator;
import j2html_codegen.generators.AttributeInterfaceCodeGenerator;
import j2html_codegen.generators.SpecializedTagClassCodeGenerator;
import java.io.IOException;
import java.nio.file.Path;

View File

@@ -1,4 +1,4 @@
package com.j2html.codegen;
package j2html_codegen;
import java.io.File;
import java.io.IOException;

View File

@@ -1,9 +1,8 @@
package com.j2html.codegen.generators;
import com.j2html.codegen.GeneratorUtil;
import com.j2html.codegen.model.AttrD;
import com.j2html.codegen.model.AttributesList;
package j2html_codegen.generators;
import j2html_codegen.GeneratorUtil;
import j2html_codegen.model.AttrD;
import j2html_codegen.model.AttributesList;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;

View File

@@ -1,8 +1,8 @@
package com.j2html.codegen.generators;
package j2html_codegen.generators;
import com.j2html.codegen.GeneratorUtil;
import com.j2html.codegen.model.AttributesList;
import j2html_codegen.GeneratorUtil;
import j2html_codegen.model.AttributesList;
import java.io.IOException;
import java.nio.file.Files;
@@ -13,8 +13,8 @@ import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
import static com.j2html.codegen.generators.TagCreatorCodeGenerator.containerTags;
import static com.j2html.codegen.generators.TagCreatorCodeGenerator.emptyTags;
import static j2html_codegen.generators.TagCreatorCodeGenerator.containerTags;
import static j2html_codegen.generators.TagCreatorCodeGenerator.emptyTags;
public final class SpecializedTagClassCodeGenerator {

View File

@@ -1,4 +1,4 @@
package com.j2html.codegen.generators;
package j2html_codegen.generators;
import java.util.Arrays;
import java.util.List;

View File

@@ -1,11 +1,11 @@
package com.j2html.codegen.generators;
package j2html_codegen.generators;
import com.j2html.codegen.wattsi.AttributeDefinition;
import com.j2html.codegen.wattsi.ElementDefinition;
import com.j2html.codegen.wattsi.WattsiSource;
import com.squareup.javapoet.ClassName;
import com.squareup.javapoet.MethodSpec;
import com.squareup.javapoet.TypeSpec;
import j2html_codegen.wattsi.AttributeDefinition;
import j2html_codegen.wattsi.ElementDefinition;
import j2html_codegen.wattsi.WattsiSource;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
@@ -64,10 +64,10 @@ public class WattsiGenerator {
}
}
System.out.println(type.build().toString());
// System.out.println(type.build().toString());
}
// System.out.println(doc.select("dfn"));
System.out.println(doc.select("dfn"));
}
private static String methodName(String prefix, String... words){

View File

@@ -1,4 +1,4 @@
package com.j2html.codegen.model;
package j2html_codegen.model;
public final class AttrD {
//attribute descriptor

View File

@@ -1,4 +1,4 @@
package com.j2html.codegen.model;
package j2html_codegen.model;
import java.util.ArrayList;
import java.util.Arrays;

View File

@@ -1,4 +1,4 @@
package com.j2html.codegen.wattsi;
package j2html_codegen.wattsi;
public interface AttributeDefinition {

View File

@@ -1,11 +1,9 @@
package com.j2html.codegen.wattsi;
package j2html_codegen.wattsi;
public interface ElementDefinition {
String name();
boolean isSelfClosing();
boolean isObsolete();
}

View File

@@ -1,4 +1,4 @@
package com.j2html.codegen.wattsi;
package j2html_codegen.wattsi;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
@@ -99,11 +99,6 @@ public class WattsiSource {
return Reference.from(dfn.childNodes()).key;
}
@Override
public boolean isSelfClosing() {
return false;
}
@Override
public boolean isObsolete() {
return obsolete.contains(reference());

View File

@@ -1,4 +1,4 @@
package com.j2html.codegen;
package j2html_codegen;
import static org.junit.Assert.assertTrue;

View File

@@ -1,8 +1,8 @@
package com.j2html.codegen;
package j2html_codegen;
import com.j2html.codegen.generators.TagCreatorCodeGenerator;
import com.j2html.codegen.wattsi.ElementDefinition;
import com.j2html.codegen.wattsi.WattsiSource;
import j2html_codegen.generators.TagCreatorCodeGenerator;
import j2html_codegen.wattsi.ElementDefinition;
import j2html_codegen.wattsi.WattsiSource;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.junit.Before;

View File

@@ -1,86 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.j2html</groupId>
<artifactId>j2html-parent</artifactId>
<version>1.6.1-SNAPSHOT</version>
</parent>
<name>j2html-codegen</name>
<artifactId>j2html-codegen-maven-plugin</artifactId>
<packaging>maven-plugin</packaging>
<dependencies>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-plugin-api</artifactId>
<version>3.8.4</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.maven.plugin-tools</groupId>
<artifactId>maven-plugin-annotations</artifactId>
<version>3.6.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-project</artifactId>
<version>2.2.1</version>
<scope>provided</scope>
</dependency>
<!--
Note: The use of version properties below is to avoid
redefining these versions when using this maven plugin
in other projects. Using the more concise dependency-
management strategy for versioning doesn't work when
another project tries to detect this plugin's dependency
versions.
-->
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>${jsoup.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.squareup</groupId>
<artifactId>javapoet</artifactId>
<version>${javapoet.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>${mockito.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-plugin-plugin</artifactId>
<version>3.6.4</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>

View File

@@ -1,50 +0,0 @@
package com.j2html.codegen;
import com.j2html.codegen.model.AttrD;
import static com.j2html.codegen.generators.TagCreatorCodeGenerator.containerTags;
import static com.j2html.codegen.generators.TagCreatorCodeGenerator.emptyTags;
import static com.j2html.codegen.model.AttributesList.attributesDescriptive;
import static com.j2html.codegen.model.AttributesList.getCustomAttributesForHtmlTag;
import static java.lang.System.*;
public class Export {
public static void main(String[] args){
for (final String tag : emptyTags()) {
out.print("EMPTY-ELEMENT[");
out.print(tag);
out.print("]");
out.println();
}
for (final String tag : containerTags()) {
out.print("ELEMENT[");
out.print(tag);
out.print("]");
out.println();
}
out.println();
for(AttrD attr : attributesDescriptive()){
if(attr.hasArgument){
out.print("STRING");
}else{
out.print("BOOLEAN");
}
out.print("[");
out.print(attr.attr);
out.print("]");
out.println();
for(String tag : attr.tags){
out.print("ATTRIBUTE[");
out.print(tag);
out.print(":");
out.print(attr.attr);
out.print("]");
out.println();
}
out.println();
}
}
}

View File

@@ -1,199 +0,0 @@
package com.j2html.codegen;
import com.j2html.codegen.Model.Node;
import com.squareup.javapoet.*;
import javax.lang.model.element.Modifier;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.HashMap;
import java.util.Map;
import static com.j2html.codegen.Model.Metadata.ON_OFF;
import static com.j2html.codegen.Model.Metadata.SELF_CLOSING;
public class Generator {
public static final ClassName INSTANCE = ClassName.get("j2html.tags", "IInstance");
public static final ClassName TAG = ClassName.get("j2html.tags", "Tag");
public static final ClassName EMPTY_TAG = ClassName.get("j2html.tags", "EmptyTag");
public static final ClassName CONTAINER_TAG = ClassName.get("j2html.tags", "ContainerTag");
public static void main(String... args) throws IOException {
Path path = Paths.get("j2html-codegen", "src", "test", "resources", "html.model");
String definitions = new String(Files.readAllBytes(path));
Model model = new Model();
Parser.parse(definitions, model);
Path dir = Paths.get("/j2html/generated-source");
Files.createDirectories(dir);
generate(dir, "j2html.tags.attributes", "j2html.tags.specialized", model);
}
public static void generate(Path root, String attributePkg, String elementPkg, Model model) throws IOException {
Map<String, JavaFile> attributes = generateAttributePackage(attributePkg, model);
for (JavaFile file : attributes.values()) {
file.writeTo(root);
}
Map<String, JavaFile> elements = generateElementPackage(elementPkg, model, attributes);
for (JavaFile file : elements.values()) {
file.writeTo(root);
}
}
private static Map<String, JavaFile> generateElementPackage(String pkg, Model model, Map<String, JavaFile> attributes) {
Map<String, JavaFile> files = new HashMap<>();
// Convert all elements into classes.
for (Node element : model.elements()) {
ClassName className = ClassName.get(pkg, capitalize(element.name) + "Tag");
TypeSpec.Builder type = defineElementClass(element, className);
// Assign attributes to this element.
for (Node attribute : element.children) {
JavaFile file = attributes.get(attribute.name);
type.addSuperinterface(
ParameterizedTypeName.get(
ClassName.get(file.packageName, file.typeSpec.name),
className
)
);
}
files.put(
element.name,
JavaFile.builder(pkg, type.build())
.skipJavaLangImports(true)
.build()
);
}
return files;
}
private static Map<String, JavaFile> generateAttributePackage(String pkg, Model model) {
Map<String, JavaFile> files = new HashMap<>();
// Convert all attributes into classes.
for (Node attribute : model.attributes()) {
TypeSpec.Builder type = defineAttributeClass(pkg, attribute);
if (attribute.type.equals(Node.Type.STRING)) {
defineStringAttributeMethods(attribute, type);
} else if (attribute.type.equals(Node.Type.BOOLEAN) && !attribute.is(ON_OFF)) {
defineBooleanAttributeMethods(attribute, type);
} else if (attribute.type.equals(Node.Type.BOOLEAN) && attribute.is(ON_OFF)) {
defineOnOffAttributeMethods(attribute, type);
}
files.put(
attribute.name,
JavaFile.builder(pkg, type.build())
.skipJavaLangImports(true)
.build()
);
}
return files;
}
private static TypeSpec.Builder defineElementClass(Node element, ClassName className) {
MethodSpec constructor = MethodSpec.constructorBuilder()
.addModifiers(Modifier.PUBLIC)
.addStatement("super(\"" + element.name + "\")")
.build();
TypeSpec.Builder type = TypeSpec.classBuilder(className)
.addModifiers(Modifier.PUBLIC)
.superclass(
ParameterizedTypeName.get(element.is(SELF_CLOSING) ? EMPTY_TAG : CONTAINER_TAG, className)
)
.addMethod(constructor);
return type;
}
private static TypeSpec.Builder defineAttributeClass(String pkg, Node attribute) {
ClassName name = ClassName.get(pkg, "I" + capitalize(attribute.name));
return TypeSpec.interfaceBuilder(name)
.addSuperinterface(ParameterizedTypeName.get(INSTANCE, TypeVariableName.get("T")))
.addTypeVariable(TypeVariableName.get("T", ParameterizedTypeName.get(TAG, TypeVariableName.get("T"))))
.addModifiers(Modifier.PUBLIC);
}
private static void defineBooleanAttributeMethods(Node attribute, TypeSpec.Builder type) {
MethodSpec with = MethodSpec.methodBuilder(methodName("is", attribute.name))
.addModifiers(Modifier.PUBLIC, Modifier.DEFAULT)
.addStatement("return self().attr(\"" + attribute.name + "\")")
.returns(TypeVariableName.get("T"))
.build();
MethodSpec withCond = MethodSpec.methodBuilder(methodName("withCond", attribute.name))
.addModifiers(Modifier.PUBLIC, Modifier.DEFAULT)
.addParameter(TypeName.BOOLEAN, "enable", Modifier.FINAL)
.addStatement("return enable ? self().attr(\"" + attribute.name + "\") : self()")
.returns(TypeVariableName.get("T"))
.build();
type.addMethod(with);
type.addMethod(withCond);
}
private static void defineOnOffAttributeMethods(Node attribute, TypeSpec.Builder type) {
MethodSpec with = MethodSpec.methodBuilder(methodName("is", attribute.name))
.addModifiers(Modifier.PUBLIC, Modifier.DEFAULT)
.addStatement("return self().attr(\"" + attribute.name + "\", \"on\")")
.returns(TypeVariableName.get("T"))
.build();
MethodSpec withCond = MethodSpec.methodBuilder(methodName("withCond", attribute.name))
.addModifiers(Modifier.PUBLIC, Modifier.DEFAULT)
.addParameter(TypeName.BOOLEAN, "enable", Modifier.FINAL)
.addStatement("return enable ? self().attr(\"" + attribute.name + "\", \"on\") : self()")
.returns(TypeVariableName.get("T"))
.build();
type.addMethod(with);
type.addMethod(withCond);
}
private static void defineStringAttributeMethods(Node attribute, TypeSpec.Builder type) {
MethodSpec with = MethodSpec.methodBuilder(methodName("with", attribute.name))
.addModifiers(Modifier.PUBLIC, Modifier.DEFAULT)
.addParameter(String.class, parameter(attribute), Modifier.FINAL)
.addStatement("return self().attr(\"" + attribute.name + "\", " + parameter(attribute) + ")")
.returns(TypeVariableName.get("T"))
.build();
MethodSpec withCond = MethodSpec.methodBuilder(methodName("withCond", attribute.name))
.addModifiers(Modifier.PUBLIC, Modifier.DEFAULT)
.addParameter(TypeName.BOOLEAN, "enable", Modifier.FINAL)
.addParameter(String.class, parameter(attribute), Modifier.FINAL)
.addStatement("return enable ? self().attr(\"" + attribute.name + "\", " + parameter(attribute) + ") : self()")
.returns(TypeVariableName.get("T"))
.build();
type.addMethod(with);
type.addMethod(withCond);
}
private static String parameter(Node attribute) {
return attribute.name + "_";
}
private static String methodName(String... words) {
String[] camelCase = new String[words.length];
camelCase[0] = words[0];
for (int i = 1; i < words.length; i++) {
camelCase[i] = capitalize(words[i]);
}
return String.join("", camelCase);
}
private static String capitalize(String word) {
return word.substring(0, 1).toUpperCase() + word.substring(1).toLowerCase();
}
}

View File

@@ -1,65 +0,0 @@
package com.j2html.codegen;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugins.annotations.LifecyclePhase;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
import org.apache.maven.project.MavenProject;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
@Mojo(name = "generate-source-files", defaultPhase = LifecyclePhase.GENERATE_SOURCES)
public class J2htmlCodeGeneratorMojo extends AbstractMojo {
@Parameter(defaultValue = "${project}", required = true, readonly = true)
MavenProject project;
@Parameter(property = "modelFile", required = true)
String modelFile;
@Parameter(property = "attributePackage", required = true)
String attributePackage;
@Parameter(property = "tagPackage", required = true)
String tagPackage;
@Override
public void execute() throws MojoExecutionException, MojoFailureException {
getLog().debug("Model File: " + modelFile);
getLog().debug("Attribute Package: " + attributePackage);
getLog().debug("Tag Package: " + tagPackage);
String outputDirectory = project.getBuild().getDirectory() + "/generated-sources/j2html-codegen";
project.addCompileSourceRoot(outputDirectory);
getLog().debug("Generating J2Html sources in: " + outputDirectory);
String definitions;
try {
definitions = new String(Files.readAllBytes(Paths.get(modelFile)));
} catch (IOException e) {
throw new MojoFailureException("Unable to locate model file: " + modelFile, e);
}
Model model = new Model();
try {
Parser.parse(definitions, model);
}catch (RuntimeException e){
throw new MojoFailureException("Unable to parse model file.", e);
}
try {
Generator.generate(
Paths.get(outputDirectory).toAbsolutePath(),
attributePackage,
tagPackage,
model
);
} catch (IOException e) {
throw new MojoFailureException("Failed to generate source files.", e);
}
}
}

View File

@@ -1,171 +0,0 @@
package com.j2html.codegen;
import java.util.*;
import static com.j2html.codegen.Model.Metadata.ON_OFF;
import static com.j2html.codegen.Model.Metadata.SELF_CLOSING;
import static com.j2html.codegen.Model.Node.Type.*;
public class Model implements Parser.Listener {
private Map<String, Node> elements;
private Map<String, Node> attributes;
public Model() {
elements = new LinkedHashMap<>();
attributes = new LinkedHashMap<>();
}
public Collection<Node> elements(){
return elements.values();
}
public Collection<Node> attributes(){
return attributes.values();
}
public Node addElement(String name) {
return add(ELEMENT, name, elements);
}
public Node addBooleanAttribute(String name) {
return add(BOOLEAN, name, attributes);
}
public Node addStringAttribute(String name) {
return add(STRING, name, attributes);
}
public Node element(String name) {
if (!elements.containsKey(name)) {
throw new NodeDoesNotExist(name);
}
return elements.get(name);
}
public Node attribute(String name) {
if (!attributes.containsKey(name)) {
throw new NodeDoesNotExist(name);
}
return attributes.get(name);
}
private Node add(Node.Type type, String name, Map<String, Node> nodes) {
if (nodes.containsKey(name)) {
throw new NodeAlreadyExists(name);
}
Node node = new Node(type, name);
nodes.put(name, node);
return node;
}
@Override
public void lineCommented(int line, String txt) {
// Ignore.
}
@Override
public void elementDefined(int line, String name) {
attempt(() -> addElement(name), line);
}
@Override
public void emptyElementDefined(int line, String name) {
attempt(() -> addElement(name).annotate(SELF_CLOSING), line);
}
@Override
public void booleanDefined(int line, String name) {
attempt(() -> addBooleanAttribute(name), line);
}
@Override
public void onOffDefined(int line, String name) {
attempt(() -> addBooleanAttribute(name).annotate(ON_OFF), line);
}
@Override
public void stringDefined(int line, String name) {
attempt(() -> addStringAttribute(name), line);
}
@Override
public void attributeDefined(int line, String element, String name) {
attempt(() -> element(element).addChild(attribute(name)), line);
}
@Override
public void invalidLine(int line, String txt) {
throw new RuntimeException("Invalid line [" + line + "]: " + txt);
}
@FunctionalInterface
private interface Unsafe {
void call() throws RuntimeException;
}
private void attempt(Unsafe operation, int line) {
try {
operation.call();
} catch (RuntimeException e) {
throw new InvalidModel(e, line);
}
}
public static class Node {
enum Type {
ELEMENT,
BOOLEAN,
STRING
}
public final Type type;
public final String name;
public final List<Metadata> metadata;
public final List<Node> children;
private Node(Type type, String name) {
this.type = type;
this.name = name;
this.metadata = new ArrayList<>();
this.children = new ArrayList<>();
}
public void annotate(Metadata meta) {
metadata.add(meta);
}
public void addChild(Node node) {
children.add(node);
}
public boolean is(Metadata annotation){
return metadata.contains(annotation);
}
}
public enum Metadata {
SELF_CLOSING,
ON_OFF,
OBSOLETE
}
public static class InvalidModel extends RuntimeException {
public InvalidModel(Exception cause, int line) {
super(cause.getMessage() + ". At line " + line, cause);
}
}
public static class NodeAlreadyExists extends RuntimeException {
public NodeAlreadyExists(String name) {
super("Node already exists: " + name);
}
}
public static class NodeDoesNotExist extends RuntimeException {
public NodeDoesNotExist(String name) {
super("Node does not exist: " + name);
}
}
}

View File

@@ -1,91 +0,0 @@
package com.j2html.codegen;
import java.util.function.Consumer;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Parser {
private static final Pattern EMPTY_LINE_PATTERN = Pattern.compile("\\s*");
private static final Pattern COMMENT_PATTERN = Pattern.compile("#.*");
private static final Pattern NODE_PATTERN = Pattern.compile("(?<type>ELEMENT|EMPTY-ELEMENT|BOOLEAN|ONOFF|STRING)\\[(?<name>\\S+)\\]");
private static final Pattern ATTRIBUTE_PATTERN = Pattern.compile("ATTRIBUTE\\[(?<element>\\S+):(?<name>\\S+)\\]");
public interface Listener {
void lineCommented(int line, String txt);
void elementDefined(int line, String name);
void emptyElementDefined(int line, String name);
void booleanDefined(int line, String name);
void onOffDefined(int line, String name);
void stringDefined(int line, String name);
void attributeDefined(int line, String element, String name);
void invalidLine(int line, String txt);
}
public static void parse(String txt, Listener listener) {
String[] lines = txt.split("[\r\n]+");
for (int i = 0; i < lines.length; i++) {
int number = i + 1;
String line = lines[i];
if (match(EMPTY_LINE_PATTERN, line)) continue;
if (match(COMMENT_PATTERN, line, matcher -> {
listener.lineCommented(number, line);
})) continue;
if (match(NODE_PATTERN, line, matcher -> {
String type = matcher.group("type");
String name = matcher.group("name");
switch (type) {
case "ELEMENT":
listener.elementDefined(number, name);
break;
case "EMPTY-ELEMENT":
listener.emptyElementDefined(number, name);
break;
case "BOOLEAN":
listener.booleanDefined(number, name);
break;
case "ONOFF":
listener.onOffDefined(number, name);
break;
case "STRING":
listener.stringDefined(number, name);
break;
}
})) continue;
if (match(ATTRIBUTE_PATTERN, line, matcher -> {
listener.attributeDefined(
number,
matcher.group("element"),
matcher.group("name")
);
})) continue;
listener.invalidLine(number, line);
}
}
private static boolean match(Pattern pattern, String txt) {
return pattern.matcher(txt).matches();
}
private static boolean match(Pattern pattern, String txt, Consumer<Matcher> onMatch) {
Matcher matcher = pattern.matcher(txt);
if (matcher.matches()) {
onMatch.accept(matcher);
return true;
}
return false;
}
}

View File

@@ -1,69 +0,0 @@
package com.j2html.codegen;
import org.junit.Test;
import org.mockito.InOrder;
import java.util.function.Consumer;
import static org.mockito.Mockito.*;
public class ParserTest {
private void verifyParsing(String txt, Consumer<Parser.Listener> checks) {
Parser.Listener listener = mock(Parser.Listener.class);
Parser.parse(txt, listener);
checks.accept(listener);
}
@Test
public void an_empty_input_has_no_events() {
verifyParsing("", listener -> {
verifyNoInteractions(listener);
});
}
@Test
public void whitespace_has_no_events() {
verifyParsing(" \t\t\t\t", listener -> {
verifyNoInteractions(listener);
});
}
@Test
public void commented_lines_are_signaled() {
verifyParsing("#Comment 1.\n# Comment B?", listener -> {
InOrder order = inOrder(listener);
order.verify(listener).lineCommented(1, "#Comment 1.");
order.verify(listener).lineCommented(2, "# Comment B?");
});
}
@Test
public void node_definitions_are_signaled() {
verifyParsing("ELEMENT[a]\nEMPTY-ELEMENT[b]\nBOOLEAN[c]\nONOFF[d]\nSTRING[e]", listener -> {
InOrder order = inOrder(listener);
order.verify(listener).elementDefined(1, "a");
order.verify(listener).emptyElementDefined(2, "b");
order.verify(listener).booleanDefined(3, "c");
order.verify(listener).onOffDefined(4, "d");
order.verify(listener).stringDefined(5, "e");
});
}
@Test
public void attribute_definitions_are_signaled() {
verifyParsing("ATTRIBUTE[a:b]", listener -> {
InOrder order = inOrder(listener);
order.verify(listener).attributeDefined(1, "a", "b");
});
}
@Test
public void invalid_lines_are_signaled() {
verifyParsing("lol, I dunno!\nIt Broke...", listener -> {
InOrder order = inOrder(listener);
order.verify(listener).invalidLine(1, "lol, I dunno!");
order.verify(listener).invalidLine(2, "It Broke...");
});
}
}

View File

@@ -1,622 +0,0 @@
EMPTY-ELEMENT[area]
EMPTY-ELEMENT[base]
EMPTY-ELEMENT[br]
EMPTY-ELEMENT[col]
EMPTY-ELEMENT[embed]
EMPTY-ELEMENT[hr]
EMPTY-ELEMENT[img]
EMPTY-ELEMENT[input]
EMPTY-ELEMENT[keygen]
EMPTY-ELEMENT[link]
EMPTY-ELEMENT[meta]
EMPTY-ELEMENT[param]
EMPTY-ELEMENT[source]
EMPTY-ELEMENT[track]
EMPTY-ELEMENT[wbr]
ELEMENT[a]
ELEMENT[abbr]
ELEMENT[address]
ELEMENT[article]
ELEMENT[aside]
ELEMENT[audio]
ELEMENT[b]
ELEMENT[bdi]
ELEMENT[bdo]
ELEMENT[blockquote]
ELEMENT[body]
ELEMENT[button]
ELEMENT[canvas]
ELEMENT[caption]
ELEMENT[cite]
ELEMENT[code]
ELEMENT[colgroup]
ELEMENT[data]
ELEMENT[datalist]
ELEMENT[dd]
ELEMENT[del]
ELEMENT[details]
ELEMENT[dfn]
ELEMENT[dialog]
ELEMENT[div]
ELEMENT[dl]
ELEMENT[dt]
ELEMENT[em]
ELEMENT[fieldset]
ELEMENT[figcaption]
ELEMENT[figure]
ELEMENT[footer]
ELEMENT[form]
ELEMENT[h1]
ELEMENT[h2]
ELEMENT[h3]
ELEMENT[h4]
ELEMENT[h5]
ELEMENT[h6]
ELEMENT[head]
ELEMENT[header]
ELEMENT[html]
ELEMENT[i]
ELEMENT[iframe]
ELEMENT[ins]
ELEMENT[kbd]
ELEMENT[label]
ELEMENT[legend]
ELEMENT[li]
ELEMENT[main]
ELEMENT[map]
ELEMENT[mark]
ELEMENT[menu]
ELEMENT[menuitem]
ELEMENT[meter]
ELEMENT[nav]
ELEMENT[noscript]
ELEMENT[object]
ELEMENT[ol]
ELEMENT[optgroup]
ELEMENT[option]
ELEMENT[output]
ELEMENT[p]
ELEMENT[picture]
ELEMENT[pre]
ELEMENT[progress]
ELEMENT[q]
ELEMENT[rp]
ELEMENT[rt]
ELEMENT[ruby]
ELEMENT[s]
ELEMENT[samp]
ELEMENT[script]
ELEMENT[section]
ELEMENT[select]
ELEMENT[slot]
ELEMENT[small]
ELEMENT[span]
ELEMENT[strong]
ELEMENT[style]
ELEMENT[sub]
ELEMENT[summary]
ELEMENT[sup]
ELEMENT[table]
ELEMENT[tbody]
ELEMENT[td]
ELEMENT[template]
ELEMENT[textarea]
ELEMENT[tfoot]
ELEMENT[th]
ELEMENT[thead]
ELEMENT[time]
ELEMENT[title]
ELEMENT[tr]
ELEMENT[u]
ELEMENT[ul]
ELEMENT[var]
ELEMENT[video]
STRING[accept]
ATTRIBUTE[input:accept]
STRING[action]
ATTRIBUTE[form:action]
STRING[alt]
ATTRIBUTE[area:alt]
ATTRIBUTE[img:alt]
ATTRIBUTE[input:alt]
BOOLEAN[async]
ATTRIBUTE[script:async]
ONOFF[autocomplete]
ATTRIBUTE[form:autocomplete]
ATTRIBUTE[input:autocomplete]
BOOLEAN[autofocus]
ATTRIBUTE[button:autofocus]
ATTRIBUTE[input:autofocus]
ATTRIBUTE[select:autofocus]
ATTRIBUTE[textarea:autofocus]
BOOLEAN[autoplay]
ATTRIBUTE[audio:autoplay]
ATTRIBUTE[video:autoplay]
STRING[charset]
ATTRIBUTE[meta:charset]
ATTRIBUTE[script:charset]
BOOLEAN[checked]
ATTRIBUTE[input:checked]
STRING[cite]
ATTRIBUTE[blockquote:cite]
ATTRIBUTE[del:cite]
ATTRIBUTE[ins:cite]
ATTRIBUTE[q:cite]
STRING[cols]
ATTRIBUTE[textarea:cols]
STRING[colspan]
ATTRIBUTE[td:colspan]
ATTRIBUTE[th:colspan]
STRING[content]
ATTRIBUTE[meta:content]
BOOLEAN[controls]
ATTRIBUTE[audio:controls]
ATTRIBUTE[video:controls]
STRING[coords]
ATTRIBUTE[area:coords]
STRING[data]
ATTRIBUTE[object:data]
STRING[datetime]
ATTRIBUTE[del:datetime]
ATTRIBUTE[ins:datetime]
ATTRIBUTE[time:datetime]
BOOLEAN[default]
ATTRIBUTE[track:default]
BOOLEAN[defer]
ATTRIBUTE[script:defer]
STRING[dirname]
ATTRIBUTE[input:dirname]
ATTRIBUTE[textarea:dirname]
BOOLEAN[disabled]
ATTRIBUTE[button:disabled]
ATTRIBUTE[fieldset:disabled]
ATTRIBUTE[input:disabled]
ATTRIBUTE[optgroup:disabled]
ATTRIBUTE[option:disabled]
ATTRIBUTE[select:disabled]
ATTRIBUTE[textarea:disabled]
BOOLEAN[download]
ATTRIBUTE[a:download]
ATTRIBUTE[area:download]
STRING[enctype]
ATTRIBUTE[form:enctype]
STRING[for]
ATTRIBUTE[label:for]
ATTRIBUTE[output:for]
STRING[form]
ATTRIBUTE[button:form]
ATTRIBUTE[fieldset:form]
ATTRIBUTE[input:form]
ATTRIBUTE[label:form]
ATTRIBUTE[meter:form]
ATTRIBUTE[object:form]
ATTRIBUTE[output:form]
ATTRIBUTE[select:form]
ATTRIBUTE[textarea:form]
STRING[formaction]
ATTRIBUTE[button:formaction]
ATTRIBUTE[input:formaction]
STRING[headers]
ATTRIBUTE[td:headers]
ATTRIBUTE[th:headers]
STRING[height]
ATTRIBUTE[canvas:height]
ATTRIBUTE[embed:height]
ATTRIBUTE[iframe:height]
ATTRIBUTE[img:height]
ATTRIBUTE[input:height]
ATTRIBUTE[object:height]
ATTRIBUTE[video:height]
STRING[high]
ATTRIBUTE[meter:high]
STRING[href]
ATTRIBUTE[a:href]
ATTRIBUTE[area:href]
ATTRIBUTE[base:href]
ATTRIBUTE[link:href]
STRING[hreflang]
ATTRIBUTE[a:hreflang]
ATTRIBUTE[area:hreflang]
ATTRIBUTE[link:hreflang]
BOOLEAN[ismap]
ATTRIBUTE[img:ismap]
STRING[kind]
ATTRIBUTE[track:kind]
STRING[label]
ATTRIBUTE[track:label]
ATTRIBUTE[option:label]
ATTRIBUTE[optgroup:label]
STRING[list]
ATTRIBUTE[input:list]
BOOLEAN[loop]
ATTRIBUTE[audio:loop]
ATTRIBUTE[video:loop]
STRING[low]
ATTRIBUTE[meter:low]
STRING[max]
ATTRIBUTE[input:max]
ATTRIBUTE[meter:max]
ATTRIBUTE[progress:max]
STRING[maxlength]
ATTRIBUTE[input:maxlength]
ATTRIBUTE[textarea:maxlength]
STRING[media]
ATTRIBUTE[a:media]
ATTRIBUTE[area:media]
ATTRIBUTE[link:media]
ATTRIBUTE[source:media]
ATTRIBUTE[style:media]
STRING[method]
ATTRIBUTE[form:method]
STRING[min]
ATTRIBUTE[input:min]
ATTRIBUTE[meter:min]
BOOLEAN[multiple]
ATTRIBUTE[input:multiple]
ATTRIBUTE[select:multiple]
BOOLEAN[muted]
ATTRIBUTE[video:muted]
ATTRIBUTE[audio:muted]
STRING[name]
ATTRIBUTE[button:name]
ATTRIBUTE[fieldset:name]
ATTRIBUTE[form:name]
ATTRIBUTE[iframe:name]
ATTRIBUTE[input:name]
ATTRIBUTE[map:name]
ATTRIBUTE[meta:name]
ATTRIBUTE[object:name]
ATTRIBUTE[output:name]
ATTRIBUTE[param:name]
ATTRIBUTE[select:name]
ATTRIBUTE[slot:name]
ATTRIBUTE[textarea:name]
BOOLEAN[novalidate]
ATTRIBUTE[form:novalidate]
STRING[onabort]
ATTRIBUTE[audio:onabort]
ATTRIBUTE[embed:onabort]
ATTRIBUTE[img:onabort]
ATTRIBUTE[object:onabort]
ATTRIBUTE[video:onabort]
STRING[onafterprint]
ATTRIBUTE[body:onafterprint]
STRING[onbeforeprint]
ATTRIBUTE[body:onbeforeprint]
STRING[onbeforeunload]
ATTRIBUTE[body:onbeforeunload]
STRING[oncanplay]
ATTRIBUTE[audio:oncanplay]
ATTRIBUTE[embed:oncanplay]
ATTRIBUTE[object:oncanplay]
ATTRIBUTE[video:oncanplay]
STRING[oncanplaythrough]
ATTRIBUTE[audio:oncanplaythrough]
ATTRIBUTE[video:oncanplaythrough]
STRING[oncuechange]
ATTRIBUTE[track:oncuechange]
STRING[ondurationchange]
ATTRIBUTE[audio:ondurationchange]
ATTRIBUTE[video:ondurationchange]
STRING[onemptied]
ATTRIBUTE[audio:onemptied]
ATTRIBUTE[video:onemptied]
STRING[onended]
ATTRIBUTE[audio:onended]
ATTRIBUTE[video:onended]
STRING[onerror]
ATTRIBUTE[audio:onerror]
ATTRIBUTE[body:onerror]
ATTRIBUTE[embed:onerror]
ATTRIBUTE[img:onerror]
ATTRIBUTE[object:onerror]
ATTRIBUTE[script:onerror]
ATTRIBUTE[style:onerror]
ATTRIBUTE[video:onerror]
STRING[onhashchange]
ATTRIBUTE[body:onhashchange]
STRING[onload]
ATTRIBUTE[body:onload]
ATTRIBUTE[iframe:onload]
ATTRIBUTE[img:onload]
ATTRIBUTE[input:onload]
ATTRIBUTE[link:onload]
ATTRIBUTE[script:onload]
ATTRIBUTE[style:onload]
STRING[onloadeddata]
ATTRIBUTE[audio:onloadeddata]
ATTRIBUTE[video:onloadeddata]
STRING[onloadedmetadata]
ATTRIBUTE[audio:onloadedmetadata]
ATTRIBUTE[video:onloadedmetadata]
STRING[onloadstart]
ATTRIBUTE[audio:onloadstart]
ATTRIBUTE[video:onloadstart]
STRING[onoffline]
ATTRIBUTE[body:onoffline]
STRING[ononline]
ATTRIBUTE[body:ononline]
STRING[onpagehide]
ATTRIBUTE[body:onpagehide]
STRING[onpageshow]
ATTRIBUTE[body:onpageshow]
STRING[onpause]
ATTRIBUTE[audio:onpause]
ATTRIBUTE[video:onpause]
STRING[onplay]
ATTRIBUTE[audio:onplay]
ATTRIBUTE[video:onplay]
STRING[onplaying]
ATTRIBUTE[audio:onplaying]
ATTRIBUTE[video:onplaying]
STRING[onpopstate]
ATTRIBUTE[body:onpopstate]
STRING[onprogress]
ATTRIBUTE[audio:onprogress]
ATTRIBUTE[video:onprogress]
STRING[onratechange]
ATTRIBUTE[audio:onratechange]
ATTRIBUTE[video:onratechange]
STRING[onreset]
ATTRIBUTE[form:onreset]
STRING[onresize]
ATTRIBUTE[body:onresize]
STRING[onsearch]
ATTRIBUTE[input:onsearch]
STRING[onseeked]
ATTRIBUTE[audio:onseeked]
ATTRIBUTE[video:onseeked]
STRING[onseeking]
ATTRIBUTE[audio:onseeking]
ATTRIBUTE[video:onseeking]
STRING[onstalled]
ATTRIBUTE[audio:onstalled]
ATTRIBUTE[video:onstalled]
STRING[onstorage]
ATTRIBUTE[body:onstorage]
STRING[onsubmit]
ATTRIBUTE[form:onsubmit]
STRING[onsuspend]
ATTRIBUTE[audio:onsuspend]
ATTRIBUTE[video:onsuspend]
STRING[ontimeupdate]
ATTRIBUTE[audio:ontimeupdate]
ATTRIBUTE[video:ontimeupdate]
STRING[ontoggle]
ATTRIBUTE[details:ontoggle]
STRING[onunload]
ATTRIBUTE[body:onunload]
STRING[onvolumechanged]
ATTRIBUTE[audio:onvolumechanged]
ATTRIBUTE[video:onvolumechanged]
STRING[onwaiting]
ATTRIBUTE[audio:onwaiting]
ATTRIBUTE[video:onwaiting]
BOOLEAN[open]
ATTRIBUTE[details:open]
STRING[optimum]
ATTRIBUTE[meter:optimum]
STRING[pattern]
ATTRIBUTE[input:pattern]
STRING[placeholder]
ATTRIBUTE[input:placeholder]
ATTRIBUTE[textarea:placeholder]
STRING[poster]
ATTRIBUTE[video:poster]
STRING[preload]
ATTRIBUTE[audio:preload]
ATTRIBUTE[video:preload]
BOOLEAN[readonly]
ATTRIBUTE[input:readonly]
ATTRIBUTE[textarea:readonly]
STRING[rel]
ATTRIBUTE[a:rel]
ATTRIBUTE[area:rel]
ATTRIBUTE[form:rel]
ATTRIBUTE[link:rel]
BOOLEAN[required]
ATTRIBUTE[input:required]
ATTRIBUTE[select:required]
ATTRIBUTE[textarea:required]
BOOLEAN[reversed]
ATTRIBUTE[ol:reversed]
STRING[rows]
ATTRIBUTE[textarea:rows]
STRING[rowspan]
ATTRIBUTE[td:rowspan]
ATTRIBUTE[th:rowspan]
BOOLEAN[sandbox]
ATTRIBUTE[iframe:sandbox]
STRING[scope]
ATTRIBUTE[th:scope]
BOOLEAN[selected]
ATTRIBUTE[option:selected]
STRING[shape]
ATTRIBUTE[area:shape]
STRING[size]
ATTRIBUTE[input:size]
ATTRIBUTE[select:size]
STRING[sizes]
ATTRIBUTE[img:sizes]
ATTRIBUTE[link:sizes]
ATTRIBUTE[source:sizes]
STRING[span]
ATTRIBUTE[col:span]
ATTRIBUTE[colgroup:span]
STRING[src]
ATTRIBUTE[audio:src]
ATTRIBUTE[embed:src]
ATTRIBUTE[iframe:src]
ATTRIBUTE[img:src]
ATTRIBUTE[input:src]
ATTRIBUTE[script:src]
ATTRIBUTE[source:src]
ATTRIBUTE[track:src]
ATTRIBUTE[video:src]
STRING[srcdoc]
ATTRIBUTE[iframe:srcdoc]
STRING[srclang]
ATTRIBUTE[track:srclang]
STRING[srcset]
ATTRIBUTE[img:srcset]
ATTRIBUTE[source:srcset]
STRING[start]
ATTRIBUTE[ol:start]
STRING[step]
ATTRIBUTE[input:step]
STRING[target]
ATTRIBUTE[a:target]
ATTRIBUTE[area:target]
ATTRIBUTE[base:target]
ATTRIBUTE[form:target]
STRING[type]
ATTRIBUTE[a:type]
ATTRIBUTE[button:type]
ATTRIBUTE[embed:type]
ATTRIBUTE[input:type]
ATTRIBUTE[link:type]
ATTRIBUTE[menu:type]
ATTRIBUTE[object:type]
ATTRIBUTE[script:type]
ATTRIBUTE[source:type]
ATTRIBUTE[style:type]
STRING[usemap]
ATTRIBUTE[img:usemap]
ATTRIBUTE[object:usemap]
STRING[value]
ATTRIBUTE[button:value]
ATTRIBUTE[data:value]
ATTRIBUTE[input:value]
ATTRIBUTE[li:value]
ATTRIBUTE[option:value]
ATTRIBUTE[meter:value]
ATTRIBUTE[progress:value]
ATTRIBUTE[param:value]
STRING[width]
ATTRIBUTE[canvas:width]
ATTRIBUTE[embed:width]
ATTRIBUTE[iframe:width]
ATTRIBUTE[img:width]
ATTRIBUTE[input:width]
ATTRIBUTE[object:width]
ATTRIBUTE[video:width]
STRING[wrap]
ATTRIBUTE[textarea:wrap]

View File

@@ -1,130 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.j2html</groupId>
<artifactId>j2html-parent</artifactId>
<version>1.6.1-SNAPSHOT</version>
</parent>
<name>j2html-ext-mathml</name>
<artifactId>j2html-ext-mathml</artifactId>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.j2html</groupId>
<artifactId>j2html</artifactId>
<version>1.6.1-SNAPSHOT</version>
</dependency>
</dependencies>
<packaging>jar</packaging>
<build>
<plugins>
<plugin>
<groupId>com.j2html</groupId>
<artifactId>j2html-codegen-maven-plugin</artifactId>
<version>1.6.1-SNAPSHOT</version>
<executions>
<execution>
<goals>
<goal>generate-source-files</goal>
</goals>
</execution>
</executions>
<configuration>
<modelFile>${project.basedir}/src/main/models/mathml.model</modelFile>
<attributePackage>com.j2html.mathml.attributes</attributePackage>
<tagPackage>com.j2html.mathml.tags</tagPackage>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<executions>
<execution>
<id>default</id>
<goals>
<goal>perform</goal>
</goals>
<configuration>
<pomFileName>pom.xml</pomFileName>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
<manifest>
<addClasspath>true</addClasspath>
</manifest>
<manifestEntries>
<Automatic-Module-Name>com.j2html</Automatic-Module-Name>
</manifestEntries>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<executions>
<execution>
<id>bundle-manifest</id>
<phase>process-classes</phase>
<goals>
<goal>manifest</goal>
</goals>
</execution>
</executions>
</plugin>
<!--plugin>
<groupId>org.revapi</groupId>
<artifactId>revapi-maven-plugin</artifactId>
<configuration>
<oldArtifacts>
<artifact>com.j2html:j2html-ext-mathml:1.6.0</artifact>
</oldArtifacts>
<analysisConfiguration>
<revapi.differences>
<differences>
</differences>
</revapi.differences>
</analysisConfiguration>
</configuration>
</plugin-->
</plugins>
</build>
</project>

View File

@@ -1,247 +0,0 @@
package com.j2html.mathml;
import com.j2html.mathml.tags.*;
import j2html.tags.DomContent;
public class MathML {
public static AnnotationTag annotation(String text) {
return new AnnotationTag().withText(text);
}
public static AnnotationTag annotation(DomContent... dc) {
return new AnnotationTag().with(dc);
}
public static MactionTag maction(String text) {
return new MactionTag().withText(text);
}
public static MactionTag maction(DomContent... dc) {
return new MactionTag().with(dc);
}
public static MathTag math(String text) {
return new MathTag().withText(text);
}
public static MathTag math(DomContent... dc) {
return new MathTag().with(dc);
}
public static MerrorTag merror(String text) {
return new MerrorTag().withText(text);
}
public static MerrorTag merror(DomContent... dc) {
return new MerrorTag().with(dc);
}
public static MfracTag mfrac(String text) {
return new MfracTag().withText(text);
}
public static MfracTag mfrac(DomContent... dc) {
return new MfracTag().with(dc);
}
public static MiTag mi(String text) {
return new MiTag().withText(text);
}
public static MiTag mi(DomContent... dc) {
return new MiTag().with(dc);
}
public static MmultiscriptsTag mmultiscripts(String text) {
return new MmultiscriptsTag().withText(text);
}
public static MmultiscriptsTag mmultiscripts(DomContent... dc) {
return new MmultiscriptsTag().with(dc);
}
public static MnTag mn(String text) {
return new MnTag().withText(text);
}
public static MnTag mn(DomContent... dc) {
return new MnTag().with(dc);
}
public static MoTag mo(String text) {
return new MoTag().withText(text);
}
public static MoTag mo(DomContent... dc) {
return new MoTag().with(dc);
}
public static MoverTag mover(String text) {
return new MoverTag().withText(text);
}
public static MoverTag mover(DomContent... dc) {
return new MoverTag().with(dc);
}
public static MpaddedTag mpadded(String text) {
return new MpaddedTag().withText(text);
}
public static MpaddedTag mpadded(DomContent... dc) {
return new MpaddedTag().with(dc);
}
public static MphantomTag mphantom(String text) {
return new MphantomTag().withText(text);
}
public static MphantomTag mphantom(DomContent... dc) {
return new MphantomTag().with(dc);
}
public static MprescriptsTag mprescripts(String text) {
return new MprescriptsTag().withText(text);
}
public static MprescriptsTag mprescripts(DomContent... dc) {
return new MprescriptsTag().with(dc);
}
public static MrootTag mroot(String text) {
return new MrootTag().withText(text);
}
public static MrootTag mroot(DomContent... dc) {
return new MrootTag().with(dc);
}
public static MrowTag mrow(String text) {
return new MrowTag().withText(text);
}
public static MrowTag mrow(DomContent... dc) {
return new MrowTag().with(dc);
}
public static MsTag ms(String text) {
return new MsTag().withText(text);
}
public static MsTag ms(DomContent... dc) {
return new MsTag().with(dc);
}
public static MspaceTag mspace(String text) {
return new MspaceTag().withText(text);
}
public static MspaceTag mspace(DomContent... dc) {
return new MspaceTag().with(dc);
}
public static MsqrtTag msqrt(String text) {
return new MsqrtTag().withText(text);
}
public static MsqrtTag msqrt(DomContent... dc) {
return new MsqrtTag().with(dc);
}
public static MstyleTag mstyle(String text) {
return new MstyleTag().withText(text);
}
public static MstyleTag mstyle(DomContent... dc) {
return new MstyleTag().with(dc);
}
public static MsubTag msub(String text) {
return new MsubTag().withText(text);
}
public static MsubTag msub(DomContent... dc) {
return new MsubTag().with(dc);
}
public static MsubsupTag msubsup(String text) {
return new MsubsupTag().withText(text);
}
public static MsubsupTag msubsup(DomContent... dc) {
return new MsubsupTag().with(dc);
}
public static MsupTag msup(String text) {
return new MsupTag().withText(text);
}
public static MsupTag msup(DomContent... dc) {
return new MsupTag().with(dc);
}
public static MtableTag mtable(String text) {
return new MtableTag().withText(text);
}
public static MtableTag mtable(DomContent... dc) {
return new MtableTag().with(dc);
}
public static MtdTag mtd(String text) {
return new MtdTag().withText(text);
}
public static MtdTag mtd(DomContent... dc) {
return new MtdTag().with(dc);
}
public static MtextTag mtext(String text) {
return new MtextTag().withText(text);
}
public static MtextTag mtext(DomContent... dc) {
return new MtextTag().with(dc);
}
public static MtrTag mtr(String text) {
return new MtrTag().withText(text);
}
public static MtrTag mtr(DomContent... dc) {
return new MtrTag().with(dc);
}
public static MunderTag munder(String text) {
return new MunderTag().withText(text);
}
public static MunderTag munder(DomContent... dc) {
return new MunderTag().with(dc);
}
public static MunderoverTag munderover(String text) {
return new MunderoverTag().withText(text);
}
public static MunderoverTag munderover(DomContent... dc) {
return new MunderoverTag().with(dc);
}
public static NoneTag none(String text) {
return new NoneTag().withText(text);
}
public static NoneTag none(DomContent... dc) {
return new NoneTag().with(dc);
}
public static SemanticsTag semantics(String text) {
return new SemanticsTag().withText(text);
}
public static SemanticsTag semantics(DomContent... dc) {
return new SemanticsTag().with(dc);
}
}

View File

@@ -1,254 +0,0 @@
ELEMENT[annotation]
ELEMENT[maction]
ELEMENT[math]
ELEMENT[merror]
ELEMENT[mfrac]
ELEMENT[mi]
ELEMENT[mmultiscripts]
ELEMENT[mn]
ELEMENT[mo]
ELEMENT[mover]
ELEMENT[mpadded]
ELEMENT[mphantom]
ELEMENT[mprescripts]
ELEMENT[mroot]
ELEMENT[mrow]
ELEMENT[ms]
ELEMENT[mspace]
ELEMENT[msqrt]
ELEMENT[mstyle]
ELEMENT[msub]
ELEMENT[msubsup]
ELEMENT[msup]
ELEMENT[mtable]
ELEMENT[mtd]
ELEMENT[mtext]
ELEMENT[mtr]
ELEMENT[munder]
ELEMENT[munderover]
ELEMENT[none]
ELEMENT[semantics]
BOOLEAN[displaystyle]
ATTRIBUTE[annotation:displaystyle]
ATTRIBUTE[maction:displaystyle]
ATTRIBUTE[math:displaystyle]
ATTRIBUTE[merror:displaystyle]
ATTRIBUTE[mfrac:displaystyle]
ATTRIBUTE[mi:displaystyle]
ATTRIBUTE[mmultiscripts:displaystyle]
ATTRIBUTE[mn:displaystyle]
ATTRIBUTE[mo:displaystyle]
ATTRIBUTE[mover:displaystyle]
ATTRIBUTE[mpadded:displaystyle]
ATTRIBUTE[mphantom:displaystyle]
ATTRIBUTE[mprescripts:displaystyle]
ATTRIBUTE[mroot:displaystyle]
ATTRIBUTE[mrow:displaystyle]
ATTRIBUTE[ms:displaystyle]
ATTRIBUTE[mspace:displaystyle]
ATTRIBUTE[msqrt:displaystyle]
ATTRIBUTE[mstyle:displaystyle]
ATTRIBUTE[msub:displaystyle]
ATTRIBUTE[msubsup:displaystyle]
ATTRIBUTE[msup:displaystyle]
ATTRIBUTE[mtable:displaystyle]
ATTRIBUTE[mtd:displaystyle]
ATTRIBUTE[mtext:displaystyle]
ATTRIBUTE[mtr:displaystyle]
ATTRIBUTE[munder:displaystyle]
ATTRIBUTE[munderover:displaystyle]
ATTRIBUTE[none:displaystyle]
ATTRIBUTE[semantics:displaystyle]
BOOLEAN[mathbackground]
ATTRIBUTE[annotation:mathbackground]
ATTRIBUTE[maction:mathbackground]
ATTRIBUTE[math:mathbackground]
ATTRIBUTE[merror:mathbackground]
ATTRIBUTE[mfrac:mathbackground]
ATTRIBUTE[mi:mathbackground]
ATTRIBUTE[mmultiscripts:mathbackground]
ATTRIBUTE[mn:mathbackground]
ATTRIBUTE[mo:mathbackground]
ATTRIBUTE[mover:mathbackground]
ATTRIBUTE[mpadded:mathbackground]
ATTRIBUTE[mphantom:mathbackground]
ATTRIBUTE[mprescripts:mathbackground]
ATTRIBUTE[mroot:mathbackground]
ATTRIBUTE[mrow:mathbackground]
ATTRIBUTE[ms:mathbackground]
ATTRIBUTE[mspace:mathbackground]
ATTRIBUTE[msqrt:mathbackground]
ATTRIBUTE[mstyle:mathbackground]
ATTRIBUTE[msub:mathbackground]
ATTRIBUTE[msubsup:mathbackground]
ATTRIBUTE[msup:mathbackground]
ATTRIBUTE[mtable:mathbackground]
ATTRIBUTE[mtd:mathbackground]
ATTRIBUTE[mtext:mathbackground]
ATTRIBUTE[mtr:mathbackground]
ATTRIBUTE[munder:mathbackground]
ATTRIBUTE[munderover:mathbackground]
ATTRIBUTE[none:mathbackground]
ATTRIBUTE[semantics:mathbackground]
BOOLEAN[mathcolor]
ATTRIBUTE[annotation:mathcolor]
ATTRIBUTE[maction:mathcolor]
ATTRIBUTE[math:mathcolor]
ATTRIBUTE[merror:mathcolor]
ATTRIBUTE[mfrac:mathcolor]
ATTRIBUTE[mi:mathcolor]
ATTRIBUTE[mmultiscripts:mathcolor]
ATTRIBUTE[mn:mathcolor]
ATTRIBUTE[mo:mathcolor]
ATTRIBUTE[mover:mathcolor]
ATTRIBUTE[mpadded:mathcolor]
ATTRIBUTE[mphantom:mathcolor]
ATTRIBUTE[mprescripts:mathcolor]
ATTRIBUTE[mroot:mathcolor]
ATTRIBUTE[mrow:mathcolor]
ATTRIBUTE[ms:mathcolor]
ATTRIBUTE[mspace:mathcolor]
ATTRIBUTE[msqrt:mathcolor]
ATTRIBUTE[mstyle:mathcolor]
ATTRIBUTE[msub:mathcolor]
ATTRIBUTE[msubsup:mathcolor]
ATTRIBUTE[msup:mathcolor]
ATTRIBUTE[mtable:mathcolor]
ATTRIBUTE[mtd:mathcolor]
ATTRIBUTE[mtext:mathcolor]
ATTRIBUTE[mtr:mathcolor]
ATTRIBUTE[munder:mathcolor]
ATTRIBUTE[munderover:mathcolor]
ATTRIBUTE[none:mathcolor]
ATTRIBUTE[semantics:mathcolor]
BOOLEAN[mathsize]
ATTRIBUTE[annotation:mathsize]
ATTRIBUTE[maction:mathsize]
ATTRIBUTE[math:mathsize]
ATTRIBUTE[merror:mathsize]
ATTRIBUTE[mfrac:mathsize]
ATTRIBUTE[mi:mathsize]
ATTRIBUTE[mmultiscripts:mathsize]
ATTRIBUTE[mn:mathsize]
ATTRIBUTE[mo:mathsize]
ATTRIBUTE[mover:mathsize]
ATTRIBUTE[mpadded:mathsize]
ATTRIBUTE[mphantom:mathsize]
ATTRIBUTE[mprescripts:mathsize]
ATTRIBUTE[mroot:mathsize]
ATTRIBUTE[mrow:mathsize]
ATTRIBUTE[ms:mathsize]
ATTRIBUTE[mspace:mathsize]
ATTRIBUTE[msqrt:mathsize]
ATTRIBUTE[mstyle:mathsize]
ATTRIBUTE[msub:mathsize]
ATTRIBUTE[msubsup:mathsize]
ATTRIBUTE[msup:mathsize]
ATTRIBUTE[mtable:mathsize]
ATTRIBUTE[mtd:mathsize]
ATTRIBUTE[mtext:mathsize]
ATTRIBUTE[mtr:mathsize]
ATTRIBUTE[munder:mathsize]
ATTRIBUTE[munderover:mathsize]
ATTRIBUTE[none:mathsize]
ATTRIBUTE[semantics:mathsize]
BOOLEAN[mathvariant]
ATTRIBUTE[annotation:mathvariant]
ATTRIBUTE[maction:mathvariant]
ATTRIBUTE[math:mathvariant]
ATTRIBUTE[merror:mathvariant]
ATTRIBUTE[mfrac:mathvariant]
ATTRIBUTE[mi:mathvariant]
ATTRIBUTE[mmultiscripts:mathvariant]
ATTRIBUTE[mn:mathvariant]
ATTRIBUTE[mo:mathvariant]
ATTRIBUTE[mover:mathvariant]
ATTRIBUTE[mpadded:mathvariant]
ATTRIBUTE[mphantom:mathvariant]
ATTRIBUTE[mprescripts:mathvariant]
ATTRIBUTE[mroot:mathvariant]
ATTRIBUTE[mrow:mathvariant]
ATTRIBUTE[ms:mathvariant]
ATTRIBUTE[mspace:mathvariant]
ATTRIBUTE[msqrt:mathvariant]
ATTRIBUTE[mstyle:mathvariant]
ATTRIBUTE[msub:mathvariant]
ATTRIBUTE[msubsup:mathvariant]
ATTRIBUTE[msup:mathvariant]
ATTRIBUTE[mtable:mathvariant]
ATTRIBUTE[mtd:mathvariant]
ATTRIBUTE[mtext:mathvariant]
ATTRIBUTE[mtr:mathvariant]
ATTRIBUTE[munder:mathvariant]
ATTRIBUTE[munderover:mathvariant]
ATTRIBUTE[none:mathvariant]
ATTRIBUTE[semantics:mathvariant]
BOOLEAN[nonce]
ATTRIBUTE[annotation:nonce]
ATTRIBUTE[maction:nonce]
ATTRIBUTE[math:nonce]
ATTRIBUTE[merror:nonce]
ATTRIBUTE[mfrac:nonce]
ATTRIBUTE[mi:nonce]
ATTRIBUTE[mmultiscripts:nonce]
ATTRIBUTE[mn:nonce]
ATTRIBUTE[mo:nonce]
ATTRIBUTE[mover:nonce]
ATTRIBUTE[mpadded:nonce]
ATTRIBUTE[mphantom:nonce]
ATTRIBUTE[mprescripts:nonce]
ATTRIBUTE[mroot:nonce]
ATTRIBUTE[mrow:nonce]
ATTRIBUTE[ms:nonce]
ATTRIBUTE[mspace:nonce]
ATTRIBUTE[msqrt:nonce]
ATTRIBUTE[mstyle:nonce]
ATTRIBUTE[msub:nonce]
ATTRIBUTE[msubsup:nonce]
ATTRIBUTE[msup:nonce]
ATTRIBUTE[mtable:nonce]
ATTRIBUTE[mtd:nonce]
ATTRIBUTE[mtext:nonce]
ATTRIBUTE[mtr:nonce]
ATTRIBUTE[munder:nonce]
ATTRIBUTE[munderover:nonce]
ATTRIBUTE[none:nonce]
ATTRIBUTE[semantics:nonce]
BOOLEAN[scriptlevel]
ATTRIBUTE[annotation:scriptlevel]
ATTRIBUTE[maction:scriptlevel]
ATTRIBUTE[math:scriptlevel]
ATTRIBUTE[merror:scriptlevel]
ATTRIBUTE[mfrac:scriptlevel]
ATTRIBUTE[mi:scriptlevel]
ATTRIBUTE[mmultiscripts:scriptlevel]
ATTRIBUTE[mn:scriptlevel]
ATTRIBUTE[mo:scriptlevel]
ATTRIBUTE[mover:scriptlevel]
ATTRIBUTE[mpadded:scriptlevel]
ATTRIBUTE[mphantom:scriptlevel]
ATTRIBUTE[mprescripts:scriptlevel]
ATTRIBUTE[mroot:scriptlevel]
ATTRIBUTE[mrow:scriptlevel]
ATTRIBUTE[ms:scriptlevel]
ATTRIBUTE[mspace:scriptlevel]
ATTRIBUTE[msqrt:scriptlevel]
ATTRIBUTE[mstyle:scriptlevel]
ATTRIBUTE[msub:scriptlevel]
ATTRIBUTE[msubsup:scriptlevel]
ATTRIBUTE[msup:scriptlevel]
ATTRIBUTE[mtable:scriptlevel]
ATTRIBUTE[mtd:scriptlevel]
ATTRIBUTE[mtext:scriptlevel]
ATTRIBUTE[mtr:scriptlevel]
ATTRIBUTE[munder:scriptlevel]
ATTRIBUTE[munderover:scriptlevel]
ATTRIBUTE[none:scriptlevel]
ATTRIBUTE[semantics:scriptlevel]

View File

@@ -1,42 +0,0 @@
import org.junit.Test;
import static com.j2html.mathml.MathML.*;
import static org.junit.Assert.assertEquals;
public class MathMLTests {
@Test
public void all_tags_render_containers(){
assertEquals("<annotation></annotation>", annotation().render());
assertEquals("<maction></maction>", maction().render());
assertEquals("<math></math>", math().render());
assertEquals("<merror></merror>", merror().render());
assertEquals("<mfrac></mfrac>", mfrac().render());
assertEquals("<mi></mi>", mi().render());
assertEquals("<mmultiscripts></mmultiscripts>", mmultiscripts().render());
assertEquals("<mn></mn>", mn().render());
assertEquals("<mo></mo>", mo().render());
assertEquals("<mover></mover>", mover().render());
assertEquals("<mpadded></mpadded>", mpadded().render());
assertEquals("<mphantom></mphantom>", mphantom().render());
assertEquals("<mprescripts></mprescripts>", mprescripts().render());
assertEquals("<mroot></mroot>", mroot().render());
assertEquals("<mrow></mrow>", mrow().render());
assertEquals("<ms></ms>", ms().render());
assertEquals("<mspace></mspace>", mspace().render());
assertEquals("<msqrt></msqrt>", msqrt().render());
assertEquals("<mstyle></mstyle>", mstyle().render());
assertEquals("<msub></msub>", msub().render());
assertEquals("<msubsup></msubsup>", msubsup().render());
assertEquals("<msup></msup>", msup().render());
assertEquals("<mtable></mtable>", mtable().render());
assertEquals("<mtd></mtd>", mtd().render());
assertEquals("<mtext></mtext>", mtext().render());
assertEquals("<mtr></mtr>", mtr().render());
assertEquals("<munder></munder>", munder().render());
assertEquals("<munderover></munderover>", munderover().render());
assertEquals("<none></none>", none().render());
assertEquals("<semantics></semantics>", semantics().render());
}
}

101
j2html/.gitignore vendored
View File

@@ -1,101 +0,0 @@
# Created by https://www.gitignore.io
### Intellij ###
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm
*.iml
## Directory-based project format:
.idea/
# if you remove the above rule, at least ignore the following:
# User-specific stuff:
# .idea/workspace.xml
# .idea/tasks.xml
# .idea/dictionaries
# Sensitive or high-churn files:
# .idea/dataSources.ids
# .idea/dataSources.xml
# .idea/sqlDataSources.xml
# .idea/dynamic.xml
# .idea/uiDesigner.xml
# Gradle:
# .idea/gradle.xml
# .idea/libraries
# Mongo Explorer plugin:
# .idea/mongoSettings.xml
## File-based project format:
*.ipr
*.iws
## Plugin-specific files:
# IntelliJ
/out/
# mpeltonen/sbt-idea plugin
.idea_modules/
# JIRA plugin
atlassian-ide-plugin.xml
# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
### Windows ###
# Windows image file caches
Thumbs.db
ehthumbs.db
# Folder config file
Desktop.ini
# Recycle Bin used on file shares
$RECYCLE.BIN/
# Windows Installer files
*.cab
*.msi
*.msm
*.msp
# Windows shortcuts
*.lnk
### Java ###
*.class
# Mobile Tools for Java (J2ME)
.mtj.tmp/
# Package Files #
*.jar
*.war
*.ear
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
### Maven ###
target/
pom.xml.tag
pom.xml.releaseBackup
pom.xml.versionsBackup
pom.xml.next
release.properties
dependency-reduced-pom.xml
### Eclipse ###
.classpath
.project
.settings/
buildNumber.properties

View File

@@ -1,622 +0,0 @@
EMPTY-ELEMENT[area]
EMPTY-ELEMENT[base]
EMPTY-ELEMENT[br]
EMPTY-ELEMENT[col]
EMPTY-ELEMENT[embed]
EMPTY-ELEMENT[hr]
EMPTY-ELEMENT[img]
EMPTY-ELEMENT[input]
EMPTY-ELEMENT[keygen]
EMPTY-ELEMENT[link]
EMPTY-ELEMENT[meta]
EMPTY-ELEMENT[param]
EMPTY-ELEMENT[source]
EMPTY-ELEMENT[track]
EMPTY-ELEMENT[wbr]
ELEMENT[a]
ELEMENT[abbr]
ELEMENT[address]
ELEMENT[article]
ELEMENT[aside]
ELEMENT[audio]
ELEMENT[b]
ELEMENT[bdi]
ELEMENT[bdo]
ELEMENT[blockquote]
ELEMENT[body]
ELEMENT[button]
ELEMENT[canvas]
ELEMENT[caption]
ELEMENT[cite]
ELEMENT[code]
ELEMENT[colgroup]
ELEMENT[data]
ELEMENT[datalist]
ELEMENT[dd]
ELEMENT[del]
ELEMENT[details]
ELEMENT[dfn]
ELEMENT[dialog]
ELEMENT[div]
ELEMENT[dl]
ELEMENT[dt]
ELEMENT[em]
ELEMENT[fieldset]
ELEMENT[figcaption]
ELEMENT[figure]
ELEMENT[footer]
ELEMENT[form]
ELEMENT[h1]
ELEMENT[h2]
ELEMENT[h3]
ELEMENT[h4]
ELEMENT[h5]
ELEMENT[h6]
ELEMENT[head]
ELEMENT[header]
ELEMENT[html]
ELEMENT[i]
ELEMENT[iframe]
ELEMENT[ins]
ELEMENT[kbd]
ELEMENT[label]
ELEMENT[legend]
ELEMENT[li]
ELEMENT[main]
ELEMENT[map]
ELEMENT[mark]
ELEMENT[menu]
ELEMENT[menuitem]
ELEMENT[meter]
ELEMENT[nav]
ELEMENT[noscript]
ELEMENT[object]
ELEMENT[ol]
ELEMENT[optgroup]
ELEMENT[option]
ELEMENT[output]
ELEMENT[p]
ELEMENT[picture]
ELEMENT[pre]
ELEMENT[progress]
ELEMENT[q]
ELEMENT[rp]
ELEMENT[rt]
ELEMENT[ruby]
ELEMENT[s]
ELEMENT[samp]
ELEMENT[script]
ELEMENT[section]
ELEMENT[select]
ELEMENT[slot]
ELEMENT[small]
ELEMENT[span]
ELEMENT[strong]
ELEMENT[style]
ELEMENT[sub]
ELEMENT[summary]
ELEMENT[sup]
ELEMENT[table]
ELEMENT[tbody]
ELEMENT[td]
ELEMENT[template]
ELEMENT[textarea]
ELEMENT[tfoot]
ELEMENT[th]
ELEMENT[thead]
ELEMENT[time]
ELEMENT[title]
ELEMENT[tr]
ELEMENT[u]
ELEMENT[ul]
ELEMENT[var]
ELEMENT[video]
STRING[accept]
ATTRIBUTE[input:accept]
STRING[action]
ATTRIBUTE[form:action]
STRING[alt]
ATTRIBUTE[area:alt]
ATTRIBUTE[img:alt]
ATTRIBUTE[input:alt]
BOOLEAN[async]
ATTRIBUTE[script:async]
ONOFF[autocomplete]
ATTRIBUTE[form:autocomplete]
ATTRIBUTE[input:autocomplete]
BOOLEAN[autofocus]
ATTRIBUTE[button:autofocus]
ATTRIBUTE[input:autofocus]
ATTRIBUTE[select:autofocus]
ATTRIBUTE[textarea:autofocus]
BOOLEAN[autoplay]
ATTRIBUTE[audio:autoplay]
ATTRIBUTE[video:autoplay]
STRING[charset]
ATTRIBUTE[meta:charset]
ATTRIBUTE[script:charset]
BOOLEAN[checked]
ATTRIBUTE[input:checked]
STRING[cite]
ATTRIBUTE[blockquote:cite]
ATTRIBUTE[del:cite]
ATTRIBUTE[ins:cite]
ATTRIBUTE[q:cite]
STRING[cols]
ATTRIBUTE[textarea:cols]
STRING[colspan]
ATTRIBUTE[td:colspan]
ATTRIBUTE[th:colspan]
STRING[content]
ATTRIBUTE[meta:content]
BOOLEAN[controls]
ATTRIBUTE[audio:controls]
ATTRIBUTE[video:controls]
STRING[coords]
ATTRIBUTE[area:coords]
STRING[data]
ATTRIBUTE[object:data]
STRING[datetime]
ATTRIBUTE[del:datetime]
ATTRIBUTE[ins:datetime]
ATTRIBUTE[time:datetime]
BOOLEAN[default]
ATTRIBUTE[track:default]
BOOLEAN[defer]
ATTRIBUTE[script:defer]
STRING[dirname]
ATTRIBUTE[input:dirname]
ATTRIBUTE[textarea:dirname]
BOOLEAN[disabled]
ATTRIBUTE[button:disabled]
ATTRIBUTE[fieldset:disabled]
ATTRIBUTE[input:disabled]
ATTRIBUTE[optgroup:disabled]
ATTRIBUTE[option:disabled]
ATTRIBUTE[select:disabled]
ATTRIBUTE[textarea:disabled]
BOOLEAN[download]
ATTRIBUTE[a:download]
ATTRIBUTE[area:download]
STRING[enctype]
ATTRIBUTE[form:enctype]
STRING[for]
ATTRIBUTE[label:for]
ATTRIBUTE[output:for]
STRING[form]
ATTRIBUTE[button:form]
ATTRIBUTE[fieldset:form]
ATTRIBUTE[input:form]
ATTRIBUTE[label:form]
ATTRIBUTE[meter:form]
ATTRIBUTE[object:form]
ATTRIBUTE[output:form]
ATTRIBUTE[select:form]
ATTRIBUTE[textarea:form]
STRING[formaction]
ATTRIBUTE[button:formaction]
ATTRIBUTE[input:formaction]
STRING[headers]
ATTRIBUTE[td:headers]
ATTRIBUTE[th:headers]
STRING[height]
ATTRIBUTE[canvas:height]
ATTRIBUTE[embed:height]
ATTRIBUTE[iframe:height]
ATTRIBUTE[img:height]
ATTRIBUTE[input:height]
ATTRIBUTE[object:height]
ATTRIBUTE[video:height]
STRING[high]
ATTRIBUTE[meter:high]
STRING[href]
ATTRIBUTE[a:href]
ATTRIBUTE[area:href]
ATTRIBUTE[base:href]
ATTRIBUTE[link:href]
STRING[hreflang]
ATTRIBUTE[a:hreflang]
ATTRIBUTE[area:hreflang]
ATTRIBUTE[link:hreflang]
BOOLEAN[ismap]
ATTRIBUTE[img:ismap]
STRING[kind]
ATTRIBUTE[track:kind]
STRING[label]
ATTRIBUTE[track:label]
ATTRIBUTE[option:label]
ATTRIBUTE[optgroup:label]
STRING[list]
ATTRIBUTE[input:list]
BOOLEAN[loop]
ATTRIBUTE[audio:loop]
ATTRIBUTE[video:loop]
STRING[low]
ATTRIBUTE[meter:low]
STRING[max]
ATTRIBUTE[input:max]
ATTRIBUTE[meter:max]
ATTRIBUTE[progress:max]
STRING[maxlength]
ATTRIBUTE[input:maxlength]
ATTRIBUTE[textarea:maxlength]
STRING[media]
ATTRIBUTE[a:media]
ATTRIBUTE[area:media]
ATTRIBUTE[link:media]
ATTRIBUTE[source:media]
ATTRIBUTE[style:media]
STRING[method]
ATTRIBUTE[form:method]
STRING[min]
ATTRIBUTE[input:min]
ATTRIBUTE[meter:min]
BOOLEAN[multiple]
ATTRIBUTE[input:multiple]
ATTRIBUTE[select:multiple]
BOOLEAN[muted]
ATTRIBUTE[video:muted]
ATTRIBUTE[audio:muted]
STRING[name]
ATTRIBUTE[button:name]
ATTRIBUTE[fieldset:name]
ATTRIBUTE[form:name]
ATTRIBUTE[iframe:name]
ATTRIBUTE[input:name]
ATTRIBUTE[map:name]
ATTRIBUTE[meta:name]
ATTRIBUTE[object:name]
ATTRIBUTE[output:name]
ATTRIBUTE[param:name]
ATTRIBUTE[select:name]
ATTRIBUTE[slot:name]
ATTRIBUTE[textarea:name]
BOOLEAN[novalidate]
ATTRIBUTE[form:novalidate]
STRING[onabort]
ATTRIBUTE[audio:onabort]
ATTRIBUTE[embed:onabort]
ATTRIBUTE[img:onabort]
ATTRIBUTE[object:onabort]
ATTRIBUTE[video:onabort]
STRING[onafterprint]
ATTRIBUTE[body:onafterprint]
STRING[onbeforeprint]
ATTRIBUTE[body:onbeforeprint]
STRING[onbeforeunload]
ATTRIBUTE[body:onbeforeunload]
STRING[oncanplay]
ATTRIBUTE[audio:oncanplay]
ATTRIBUTE[embed:oncanplay]
ATTRIBUTE[object:oncanplay]
ATTRIBUTE[video:oncanplay]
STRING[oncanplaythrough]
ATTRIBUTE[audio:oncanplaythrough]
ATTRIBUTE[video:oncanplaythrough]
STRING[oncuechange]
ATTRIBUTE[track:oncuechange]
STRING[ondurationchange]
ATTRIBUTE[audio:ondurationchange]
ATTRIBUTE[video:ondurationchange]
STRING[onemptied]
ATTRIBUTE[audio:onemptied]
ATTRIBUTE[video:onemptied]
STRING[onended]
ATTRIBUTE[audio:onended]
ATTRIBUTE[video:onended]
STRING[onerror]
ATTRIBUTE[audio:onerror]
ATTRIBUTE[body:onerror]
ATTRIBUTE[embed:onerror]
ATTRIBUTE[img:onerror]
ATTRIBUTE[object:onerror]
ATTRIBUTE[script:onerror]
ATTRIBUTE[style:onerror]
ATTRIBUTE[video:onerror]
STRING[onhashchange]
ATTRIBUTE[body:onhashchange]
STRING[onload]
ATTRIBUTE[body:onload]
ATTRIBUTE[iframe:onload]
ATTRIBUTE[img:onload]
ATTRIBUTE[input:onload]
ATTRIBUTE[link:onload]
ATTRIBUTE[script:onload]
ATTRIBUTE[style:onload]
STRING[onloadeddata]
ATTRIBUTE[audio:onloadeddata]
ATTRIBUTE[video:onloadeddata]
STRING[onloadedmetadata]
ATTRIBUTE[audio:onloadedmetadata]
ATTRIBUTE[video:onloadedmetadata]
STRING[onloadstart]
ATTRIBUTE[audio:onloadstart]
ATTRIBUTE[video:onloadstart]
STRING[onoffline]
ATTRIBUTE[body:onoffline]
STRING[ononline]
ATTRIBUTE[body:ononline]
STRING[onpagehide]
ATTRIBUTE[body:onpagehide]
STRING[onpageshow]
ATTRIBUTE[body:onpageshow]
STRING[onpause]
ATTRIBUTE[audio:onpause]
ATTRIBUTE[video:onpause]
STRING[onplay]
ATTRIBUTE[audio:onplay]
ATTRIBUTE[video:onplay]
STRING[onplaying]
ATTRIBUTE[audio:onplaying]
ATTRIBUTE[video:onplaying]
STRING[onpopstate]
ATTRIBUTE[body:onpopstate]
STRING[onprogress]
ATTRIBUTE[audio:onprogress]
ATTRIBUTE[video:onprogress]
STRING[onratechange]
ATTRIBUTE[audio:onratechange]
ATTRIBUTE[video:onratechange]
STRING[onreset]
ATTRIBUTE[form:onreset]
STRING[onresize]
ATTRIBUTE[body:onresize]
STRING[onsearch]
ATTRIBUTE[input:onsearch]
STRING[onseeked]
ATTRIBUTE[audio:onseeked]
ATTRIBUTE[video:onseeked]
STRING[onseeking]
ATTRIBUTE[audio:onseeking]
ATTRIBUTE[video:onseeking]
STRING[onstalled]
ATTRIBUTE[audio:onstalled]
ATTRIBUTE[video:onstalled]
STRING[onstorage]
ATTRIBUTE[body:onstorage]
STRING[onsubmit]
ATTRIBUTE[form:onsubmit]
STRING[onsuspend]
ATTRIBUTE[audio:onsuspend]
ATTRIBUTE[video:onsuspend]
STRING[ontimeupdate]
ATTRIBUTE[audio:ontimeupdate]
ATTRIBUTE[video:ontimeupdate]
STRING[ontoggle]
ATTRIBUTE[details:ontoggle]
STRING[onunload]
ATTRIBUTE[body:onunload]
STRING[onvolumechanged]
ATTRIBUTE[audio:onvolumechanged]
ATTRIBUTE[video:onvolumechanged]
STRING[onwaiting]
ATTRIBUTE[audio:onwaiting]
ATTRIBUTE[video:onwaiting]
BOOLEAN[open]
ATTRIBUTE[details:open]
STRING[optimum]
ATTRIBUTE[meter:optimum]
STRING[pattern]
ATTRIBUTE[input:pattern]
STRING[placeholder]
ATTRIBUTE[input:placeholder]
ATTRIBUTE[textarea:placeholder]
STRING[poster]
ATTRIBUTE[video:poster]
STRING[preload]
ATTRIBUTE[audio:preload]
ATTRIBUTE[video:preload]
BOOLEAN[readonly]
ATTRIBUTE[input:readonly]
ATTRIBUTE[textarea:readonly]
STRING[rel]
ATTRIBUTE[a:rel]
ATTRIBUTE[area:rel]
ATTRIBUTE[form:rel]
ATTRIBUTE[link:rel]
BOOLEAN[required]
ATTRIBUTE[input:required]
ATTRIBUTE[select:required]
ATTRIBUTE[textarea:required]
BOOLEAN[reversed]
ATTRIBUTE[ol:reversed]
STRING[rows]
ATTRIBUTE[textarea:rows]
STRING[rowspan]
ATTRIBUTE[td:rowspan]
ATTRIBUTE[th:rowspan]
BOOLEAN[sandbox]
ATTRIBUTE[iframe:sandbox]
STRING[scope]
ATTRIBUTE[th:scope]
BOOLEAN[selected]
ATTRIBUTE[option:selected]
STRING[shape]
ATTRIBUTE[area:shape]
STRING[size]
ATTRIBUTE[input:size]
ATTRIBUTE[select:size]
STRING[sizes]
ATTRIBUTE[img:sizes]
ATTRIBUTE[link:sizes]
ATTRIBUTE[source:sizes]
STRING[span]
ATTRIBUTE[col:span]
ATTRIBUTE[colgroup:span]
STRING[src]
ATTRIBUTE[audio:src]
ATTRIBUTE[embed:src]
ATTRIBUTE[iframe:src]
ATTRIBUTE[img:src]
ATTRIBUTE[input:src]
ATTRIBUTE[script:src]
ATTRIBUTE[source:src]
ATTRIBUTE[track:src]
ATTRIBUTE[video:src]
STRING[srcdoc]
ATTRIBUTE[iframe:srcdoc]
STRING[srclang]
ATTRIBUTE[track:srclang]
STRING[srcset]
ATTRIBUTE[img:srcset]
ATTRIBUTE[source:srcset]
STRING[start]
ATTRIBUTE[ol:start]
STRING[step]
ATTRIBUTE[input:step]
STRING[target]
ATTRIBUTE[a:target]
ATTRIBUTE[area:target]
ATTRIBUTE[base:target]
ATTRIBUTE[form:target]
STRING[type]
ATTRIBUTE[a:type]
ATTRIBUTE[button:type]
ATTRIBUTE[embed:type]
ATTRIBUTE[input:type]
ATTRIBUTE[link:type]
ATTRIBUTE[menu:type]
ATTRIBUTE[object:type]
ATTRIBUTE[script:type]
ATTRIBUTE[source:type]
ATTRIBUTE[style:type]
STRING[usemap]
ATTRIBUTE[img:usemap]
ATTRIBUTE[object:usemap]
STRING[value]
ATTRIBUTE[button:value]
ATTRIBUTE[data:value]
ATTRIBUTE[input:value]
ATTRIBUTE[li:value]
ATTRIBUTE[option:value]
ATTRIBUTE[meter:value]
ATTRIBUTE[progress:value]
ATTRIBUTE[param:value]
STRING[width]
ATTRIBUTE[canvas:width]
ATTRIBUTE[embed:width]
ATTRIBUTE[iframe:width]
ATTRIBUTE[img:width]
ATTRIBUTE[input:width]
ATTRIBUTE[object:width]
ATTRIBUTE[video:width]
STRING[wrap]
ATTRIBUTE[textarea:wrap]

View File

@@ -1,79 +1,88 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.j2html</groupId>
<artifactId>j2html-parent</artifactId>
<version>1.6.1-SNAPSHOT</version>
<groupId>org.sonatype.oss</groupId>
<artifactId>oss-parent</artifactId>
<version>7</version>
</parent>
<name>j2html</name>
<groupId>com.j2html</groupId>
<artifactId>j2html</artifactId>
<version>1.6.1-SNAPSHOT</version>
<name>j2html</name>
<description>Java to HTML builder with a fluent API</description>
<url>http://j2html.com</url>
<licenses>
<license>
<name>The Apache Software License, Version 2.0</name>
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
<distribution>repo</distribution>
</license>
</licenses>
<scm>
<connection>scm:git:git@github.com:tipsy/j2html.git</connection>
<developerConnection>scm:git:git@github.com:tipsy/j2html.git</developerConnection>
<url>https://github.com/tipsy/j2html.git</url>
<tag>HEAD</tag>
</scm>
<developers>
<developer>
<name>David Åse</name>
</developer>
</developers>
<issueManagement>
<system>GitHub Issue Tracker</system>
<url>https://github.com/tipsy/j2html/issues</url>
</issueManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-library</artifactId>
<version>1.3</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.carrotsearch</groupId>
<artifactId>junit-benchmarks</artifactId>
<version>0.7.2</version>
<scope>test</scope>
</dependency>
<!-- performance test dependencies -->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId>
<version>1.7</version>
<scope>test</scope>
</dependency>
</dependencies>
<packaging>jar</packaging>
<build>
<plugins>
<plugin>
<groupId>com.j2html</groupId>
<artifactId>j2html-codegen-maven-plugin</artifactId>
<version>1.6.1-SNAPSHOT</version>
<executions>
<execution>
<goals>
<goal>generate-source-files</goal>
</goals>
</execution>
</executions>
<configuration>
<modelFile>${project.basedir}/src/main/models/html.model</modelFile>
<attributePackage>j2html.tags.attributes</attributePackage>
<tagPackage>j2html.tags.specialized</tagPackage>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.5.3</version>
<executions>
<execution>
<id>default</id>
@@ -81,25 +90,55 @@
<goal>perform</goal>
</goals>
<configuration>
<pomFileName>pom.xml</pomFileName>
<pomFileName>library/pom.xml</pomFileName>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.10.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<optimize>true</optimize>
<compilerArgs>
<arg>-Xlint:all</arg>
</compilerArgs>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>3.1.0</version>
<executions>
<execution>
<id>enforce-java</id>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<requireJavaVersion>
<version>[1.8,)</version>
</requireJavaVersion>
</rules>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.4.0</version>
<configuration>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.2</version>
<configuration>
<archive>
<manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
@@ -112,10 +151,10 @@
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>5.1.6</version>
<executions>
<execution>
<id>bundle-manifest</id>
@@ -126,10 +165,17 @@
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.revapi</groupId>
<artifactId>revapi-maven-plugin</artifactId>
<version>0.14.6</version>
<dependencies>
<dependency>
<groupId>org.revapi</groupId>
<artifactId>revapi-java</artifactId>
<version>0.26.1</version>
</dependency>
</dependencies>
<configuration>
<oldArtifacts>
<artifact>com.j2html:j2html:1.6.0</artifact>
@@ -142,7 +188,7 @@
<code>java.class.removed</code>
<old>class j2html.tags.specialized.GenerateTag</old>
<justification>
This class should never have been used. It was introduced
This class should never have been used. It was introduced
accidentally by find+replace in the code generator class.
</justification>
</item>
@@ -150,7 +196,44 @@
</revapi.differences>
</analysisConfiguration>
</configuration>
<executions>
<execution>
<id>check</id>
<goals><goal>check</goal></goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>sign-artifacts</id>
<activation>
<property>
<name>sign</name>
<value>true</value>
</property>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>3.0.1</version>
<executions>
<execution>
<id>sign-artifacts</id>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>

View File

@@ -0,0 +1,17 @@
package j2html.tags.attributes;
import j2html.tags.IInstance;
import j2html.tags.Tag;
public interface IAccept<T extends Tag<T>> extends IInstance<T> {
default T withAccept(final String accept_) {
return self().attr("accept", accept_);
}
default T withCondAccept(final boolean enable, final String accept_) {
if (enable) {
self().attr("accept", accept_);
}
return self();
}
}

View File

@@ -0,0 +1,17 @@
package j2html.tags.attributes;
import j2html.tags.IInstance;
import j2html.tags.Tag;
public interface IAction<T extends Tag<T>> extends IInstance<T> {
default T withAction(final String action_) {
return self().attr("action", action_);
}
default T withCondAction(final boolean enable, final String action_) {
if (enable) {
self().attr("action", action_);
}
return self();
}
}

View File

@@ -0,0 +1,17 @@
package j2html.tags.attributes;
import j2html.tags.IInstance;
import j2html.tags.Tag;
public interface IAlt<T extends Tag<T>> extends IInstance<T> {
default T withAlt(final String alt_) {
return self().attr("alt", alt_);
}
default T withCondAlt(final boolean enable, final String alt_) {
if (enable) {
self().attr("alt", alt_);
}
return self();
}
}

View File

@@ -0,0 +1,18 @@
package j2html.tags.attributes;
import j2html.tags.IInstance;
import j2html.tags.Tag;
public interface IAsync<T extends Tag<T>> extends IInstance<T> {
default T isAsync() {
self().attr("async");
return self();
}
default T withCondAsync(final boolean enable) {
if (enable) {
self().attr("async");
}
return self();
}
}

View File

@@ -0,0 +1,18 @@
package j2html.tags.attributes;
import j2html.tags.IInstance;
import j2html.tags.Tag;
public interface IAutocomplete<T extends Tag<T>> extends IInstance<T> {
default T isAutocomplete() {
self().attr("autocomplete", "on");
return self();
}
default T withCondAutocomplete(final boolean enable) {
if (enable) {
self().attr("autocomplete", "on");
}
return self();
}
}

View File

@@ -0,0 +1,18 @@
package j2html.tags.attributes;
import j2html.tags.IInstance;
import j2html.tags.Tag;
public interface IAutofocus<T extends Tag<T>> extends IInstance<T> {
default T isAutofocus() {
self().attr("autofocus");
return self();
}
default T withCondAutofocus(final boolean enable) {
if (enable) {
self().attr("autofocus");
}
return self();
}
}

View File

@@ -0,0 +1,18 @@
package j2html.tags.attributes;
import j2html.tags.IInstance;
import j2html.tags.Tag;
public interface IAutoplay<T extends Tag<T>> extends IInstance<T> {
default T isAutoplay() {
self().attr("autoplay");
return self();
}
default T withCondAutoplay(final boolean enable) {
if (enable) {
self().attr("autoplay");
}
return self();
}
}

View File

@@ -0,0 +1,17 @@
package j2html.tags.attributes;
import j2html.tags.IInstance;
import j2html.tags.Tag;
public interface ICharset<T extends Tag<T>> extends IInstance<T> {
default T withCharset(final String charset_) {
return self().attr("charset", charset_);
}
default T withCondCharset(final boolean enable, final String charset_) {
if (enable) {
self().attr("charset", charset_);
}
return self();
}
}

View File

@@ -0,0 +1,18 @@
package j2html.tags.attributes;
import j2html.tags.IInstance;
import j2html.tags.Tag;
public interface IChecked<T extends Tag<T>> extends IInstance<T> {
default T isChecked() {
self().attr("checked");
return self();
}
default T withCondChecked(final boolean enable) {
if (enable) {
self().attr("checked");
}
return self();
}
}

View File

@@ -0,0 +1,17 @@
package j2html.tags.attributes;
import j2html.tags.IInstance;
import j2html.tags.Tag;
public interface ICite<T extends Tag<T>> extends IInstance<T> {
default T withCite(final String cite_) {
return self().attr("cite", cite_);
}
default T withCondCite(final boolean enable, final String cite_) {
if (enable) {
self().attr("cite", cite_);
}
return self();
}
}

View File

@@ -0,0 +1,17 @@
package j2html.tags.attributes;
import j2html.tags.IInstance;
import j2html.tags.Tag;
public interface ICols<T extends Tag<T>> extends IInstance<T> {
default T withCols(final String cols_) {
return self().attr("cols", cols_);
}
default T withCondCols(final boolean enable, final String cols_) {
if (enable) {
self().attr("cols", cols_);
}
return self();
}
}

View File

@@ -0,0 +1,17 @@
package j2html.tags.attributes;
import j2html.tags.IInstance;
import j2html.tags.Tag;
public interface IColspan<T extends Tag<T>> extends IInstance<T> {
default T withColspan(final String colspan_) {
return self().attr("colspan", colspan_);
}
default T withCondColspan(final boolean enable, final String colspan_) {
if (enable) {
self().attr("colspan", colspan_);
}
return self();
}
}

View File

@@ -0,0 +1,17 @@
package j2html.tags.attributes;
import j2html.tags.IInstance;
import j2html.tags.Tag;
public interface IContent<T extends Tag<T>> extends IInstance<T> {
default T withContent(final String content_) {
return self().attr("content", content_);
}
default T withCondContent(final boolean enable, final String content_) {
if (enable) {
self().attr("content", content_);
}
return self();
}
}

View File

@@ -0,0 +1,18 @@
package j2html.tags.attributes;
import j2html.tags.IInstance;
import j2html.tags.Tag;
public interface IControls<T extends Tag<T>> extends IInstance<T> {
default T isControls() {
self().attr("controls");
return self();
}
default T withCondControls(final boolean enable) {
if (enable) {
self().attr("controls");
}
return self();
}
}

View File

@@ -0,0 +1,17 @@
package j2html.tags.attributes;
import j2html.tags.IInstance;
import j2html.tags.Tag;
public interface ICoords<T extends Tag<T>> extends IInstance<T> {
default T withCoords(final String coords_) {
return self().attr("coords", coords_);
}
default T withCondCoords(final boolean enable, final String coords_) {
if (enable) {
self().attr("coords", coords_);
}
return self();
}
}

View File

@@ -0,0 +1,17 @@
package j2html.tags.attributes;
import j2html.tags.IInstance;
import j2html.tags.Tag;
public interface IData<T extends Tag<T>> extends IInstance<T> {
default T withData(final String data_) {
return self().attr("data", data_);
}
default T withCondData(final boolean enable, final String data_) {
if (enable) {
self().attr("data", data_);
}
return self();
}
}

View File

@@ -0,0 +1,17 @@
package j2html.tags.attributes;
import j2html.tags.IInstance;
import j2html.tags.Tag;
public interface IDatetime<T extends Tag<T>> extends IInstance<T> {
default T withDatetime(final String datetime_) {
return self().attr("datetime", datetime_);
}
default T withCondDatetime(final boolean enable, final String datetime_) {
if (enable) {
self().attr("datetime", datetime_);
}
return self();
}
}

View File

@@ -0,0 +1,18 @@
package j2html.tags.attributes;
import j2html.tags.IInstance;
import j2html.tags.Tag;
public interface IDefault<T extends Tag<T>> extends IInstance<T> {
default T isDefault() {
self().attr("default");
return self();
}
default T withCondDefault(final boolean enable) {
if (enable) {
self().attr("default");
}
return self();
}
}

View File

@@ -0,0 +1,18 @@
package j2html.tags.attributes;
import j2html.tags.IInstance;
import j2html.tags.Tag;
public interface IDefer<T extends Tag<T>> extends IInstance<T> {
default T isDefer() {
self().attr("defer");
return self();
}
default T withCondDefer(final boolean enable) {
if (enable) {
self().attr("defer");
}
return self();
}
}

View File

@@ -0,0 +1,17 @@
package j2html.tags.attributes;
import j2html.tags.IInstance;
import j2html.tags.Tag;
public interface IDirname<T extends Tag<T>> extends IInstance<T> {
default T withDirname(final String dirname_) {
return self().attr("dirname", dirname_);
}
default T withCondDirname(final boolean enable, final String dirname_) {
if (enable) {
self().attr("dirname", dirname_);
}
return self();
}
}

View File

@@ -0,0 +1,18 @@
package j2html.tags.attributes;
import j2html.tags.IInstance;
import j2html.tags.Tag;
public interface IDisabled<T extends Tag<T>> extends IInstance<T> {
default T isDisabled() {
self().attr("disabled");
return self();
}
default T withCondDisabled(final boolean enable) {
if (enable) {
self().attr("disabled");
}
return self();
}
}

View File

@@ -0,0 +1,18 @@
package j2html.tags.attributes;
import j2html.tags.IInstance;
import j2html.tags.Tag;
public interface IDownload<T extends Tag<T>> extends IInstance<T> {
default T isDownload() {
self().attr("download");
return self();
}
default T withCondDownload(final boolean enable) {
if (enable) {
self().attr("download");
}
return self();
}
}

View File

@@ -0,0 +1,17 @@
package j2html.tags.attributes;
import j2html.tags.IInstance;
import j2html.tags.Tag;
public interface IEnctype<T extends Tag<T>> extends IInstance<T> {
default T withEnctype(final String enctype_) {
return self().attr("enctype", enctype_);
}
default T withCondEnctype(final boolean enable, final String enctype_) {
if (enable) {
self().attr("enctype", enctype_);
}
return self();
}
}

View File

@@ -0,0 +1,17 @@
package j2html.tags.attributes;
import j2html.tags.IInstance;
import j2html.tags.Tag;
public interface IFor<T extends Tag<T>> extends IInstance<T> {
default T withFor(final String for_) {
return self().attr("for", for_);
}
default T withCondFor(final boolean enable, final String for_) {
if (enable) {
self().attr("for", for_);
}
return self();
}
}

View File

@@ -0,0 +1,17 @@
package j2html.tags.attributes;
import j2html.tags.IInstance;
import j2html.tags.Tag;
public interface IForm<T extends Tag<T>> extends IInstance<T> {
default T withForm(final String form_) {
return self().attr("form", form_);
}
default T withCondForm(final boolean enable, final String form_) {
if (enable) {
self().attr("form", form_);
}
return self();
}
}

View File

@@ -0,0 +1,17 @@
package j2html.tags.attributes;
import j2html.tags.IInstance;
import j2html.tags.Tag;
public interface IFormaction<T extends Tag<T>> extends IInstance<T> {
default T withFormaction(final String formaction_) {
return self().attr("formaction", formaction_);
}
default T withCondFormaction(final boolean enable, final String formaction_) {
if (enable) {
self().attr("formaction", formaction_);
}
return self();
}
}

View File

@@ -0,0 +1,17 @@
package j2html.tags.attributes;
import j2html.tags.IInstance;
import j2html.tags.Tag;
public interface IHeaders<T extends Tag<T>> extends IInstance<T> {
default T withHeaders(final String headers_) {
return self().attr("headers", headers_);
}
default T withCondHeaders(final boolean enable, final String headers_) {
if (enable) {
self().attr("headers", headers_);
}
return self();
}
}

View File

@@ -0,0 +1,17 @@
package j2html.tags.attributes;
import j2html.tags.IInstance;
import j2html.tags.Tag;
public interface IHeight<T extends Tag<T>> extends IInstance<T> {
default T withHeight(final String height_) {
return self().attr("height", height_);
}
default T withCondHeight(final boolean enable, final String height_) {
if (enable) {
self().attr("height", height_);
}
return self();
}
}

View File

@@ -0,0 +1,17 @@
package j2html.tags.attributes;
import j2html.tags.IInstance;
import j2html.tags.Tag;
public interface IHigh<T extends Tag<T>> extends IInstance<T> {
default T withHigh(final String high_) {
return self().attr("high", high_);
}
default T withCondHigh(final boolean enable, final String high_) {
if (enable) {
self().attr("high", high_);
}
return self();
}
}

View File

@@ -0,0 +1,17 @@
package j2html.tags.attributes;
import j2html.tags.IInstance;
import j2html.tags.Tag;
public interface IHref<T extends Tag<T>> extends IInstance<T> {
default T withHref(final String href_) {
return self().attr("href", href_);
}
default T withCondHref(final boolean enable, final String href_) {
if (enable) {
self().attr("href", href_);
}
return self();
}
}

View File

@@ -0,0 +1,17 @@
package j2html.tags.attributes;
import j2html.tags.IInstance;
import j2html.tags.Tag;
public interface IHreflang<T extends Tag<T>> extends IInstance<T> {
default T withHreflang(final String hreflang_) {
return self().attr("hreflang", hreflang_);
}
default T withCondHreflang(final boolean enable, final String hreflang_) {
if (enable) {
self().attr("hreflang", hreflang_);
}
return self();
}
}

View File

@@ -0,0 +1,18 @@
package j2html.tags.attributes;
import j2html.tags.IInstance;
import j2html.tags.Tag;
public interface IIsmap<T extends Tag<T>> extends IInstance<T> {
default T isIsmap() {
self().attr("ismap");
return self();
}
default T withCondIsmap(final boolean enable) {
if (enable) {
self().attr("ismap");
}
return self();
}
}

View File

@@ -0,0 +1,17 @@
package j2html.tags.attributes;
import j2html.tags.IInstance;
import j2html.tags.Tag;
public interface IKind<T extends Tag<T>> extends IInstance<T> {
default T withKind(final String kind_) {
return self().attr("kind", kind_);
}
default T withCondKind(final boolean enable, final String kind_) {
if (enable) {
self().attr("kind", kind_);
}
return self();
}
}

View File

@@ -0,0 +1,17 @@
package j2html.tags.attributes;
import j2html.tags.IInstance;
import j2html.tags.Tag;
public interface ILabel<T extends Tag<T>> extends IInstance<T> {
default T withLabel(final String label_) {
return self().attr("label", label_);
}
default T withCondLabel(final boolean enable, final String label_) {
if (enable) {
self().attr("label", label_);
}
return self();
}
}

View File

@@ -0,0 +1,17 @@
package j2html.tags.attributes;
import j2html.tags.IInstance;
import j2html.tags.Tag;
public interface IList<T extends Tag<T>> extends IInstance<T> {
default T withList(final String list_) {
return self().attr("list", list_);
}
default T withCondList(final boolean enable, final String list_) {
if (enable) {
self().attr("list", list_);
}
return self();
}
}

View File

@@ -0,0 +1,18 @@
package j2html.tags.attributes;
import j2html.tags.IInstance;
import j2html.tags.Tag;
public interface ILoop<T extends Tag<T>> extends IInstance<T> {
default T isLoop() {
self().attr("loop");
return self();
}
default T withCondLoop(final boolean enable) {
if (enable) {
self().attr("loop");
}
return self();
}
}

View File

@@ -0,0 +1,17 @@
package j2html.tags.attributes;
import j2html.tags.IInstance;
import j2html.tags.Tag;
public interface ILow<T extends Tag<T>> extends IInstance<T> {
default T withLow(final String low_) {
return self().attr("low", low_);
}
default T withCondLow(final boolean enable, final String low_) {
if (enable) {
self().attr("low", low_);
}
return self();
}
}

View File

@@ -0,0 +1,17 @@
package j2html.tags.attributes;
import j2html.tags.IInstance;
import j2html.tags.Tag;
public interface IMax<T extends Tag<T>> extends IInstance<T> {
default T withMax(final String max_) {
return self().attr("max", max_);
}
default T withCondMax(final boolean enable, final String max_) {
if (enable) {
self().attr("max", max_);
}
return self();
}
}

View File

@@ -0,0 +1,17 @@
package j2html.tags.attributes;
import j2html.tags.IInstance;
import j2html.tags.Tag;
public interface IMaxlength<T extends Tag<T>> extends IInstance<T> {
default T withMaxlength(final String maxlength_) {
return self().attr("maxlength", maxlength_);
}
default T withCondMaxlength(final boolean enable, final String maxlength_) {
if (enable) {
self().attr("maxlength", maxlength_);
}
return self();
}
}

View File

@@ -0,0 +1,17 @@
package j2html.tags.attributes;
import j2html.tags.IInstance;
import j2html.tags.Tag;
public interface IMedia<T extends Tag<T>> extends IInstance<T> {
default T withMedia(final String media_) {
return self().attr("media", media_);
}
default T withCondMedia(final boolean enable, final String media_) {
if (enable) {
self().attr("media", media_);
}
return self();
}
}

View File

@@ -0,0 +1,17 @@
package j2html.tags.attributes;
import j2html.tags.IInstance;
import j2html.tags.Tag;
public interface IMethod<T extends Tag<T>> extends IInstance<T> {
default T withMethod(final String method_) {
return self().attr("method", method_);
}
default T withCondMethod(final boolean enable, final String method_) {
if (enable) {
self().attr("method", method_);
}
return self();
}
}

View File

@@ -0,0 +1,17 @@
package j2html.tags.attributes;
import j2html.tags.IInstance;
import j2html.tags.Tag;
public interface IMin<T extends Tag<T>> extends IInstance<T> {
default T withMin(final String min_) {
return self().attr("min", min_);
}
default T withCondMin(final boolean enable, final String min_) {
if (enable) {
self().attr("min", min_);
}
return self();
}
}

View File

@@ -0,0 +1,18 @@
package j2html.tags.attributes;
import j2html.tags.IInstance;
import j2html.tags.Tag;
public interface IMultiple<T extends Tag<T>> extends IInstance<T> {
default T isMultiple() {
self().attr("multiple");
return self();
}
default T withCondMultiple(final boolean enable) {
if (enable) {
self().attr("multiple");
}
return self();
}
}

View File

@@ -0,0 +1,18 @@
package j2html.tags.attributes;
import j2html.tags.IInstance;
import j2html.tags.Tag;
public interface IMuted<T extends Tag<T>> extends IInstance<T> {
default T isMuted() {
self().attr("muted");
return self();
}
default T withCondMuted(final boolean enable) {
if (enable) {
self().attr("muted");
}
return self();
}
}

View File

@@ -0,0 +1,17 @@
package j2html.tags.attributes;
import j2html.tags.IInstance;
import j2html.tags.Tag;
public interface IName<T extends Tag<T>> extends IInstance<T> {
default T withName(final String name_) {
return self().attr("name", name_);
}
default T withCondName(final boolean enable, final String name_) {
if (enable) {
self().attr("name", name_);
}
return self();
}
}

View File

@@ -0,0 +1,18 @@
package j2html.tags.attributes;
import j2html.tags.IInstance;
import j2html.tags.Tag;
public interface INovalidate<T extends Tag<T>> extends IInstance<T> {
default T isNovalidate() {
self().attr("novalidate");
return self();
}
default T withCondNovalidate(final boolean enable) {
if (enable) {
self().attr("novalidate");
}
return self();
}
}

View File

@@ -0,0 +1,17 @@
package j2html.tags.attributes;
import j2html.tags.IInstance;
import j2html.tags.Tag;
public interface IOnabort<T extends Tag<T>> extends IInstance<T> {
default T withOnabort(final String onabort_) {
return self().attr("onabort", onabort_);
}
default T withCondOnabort(final boolean enable, final String onabort_) {
if (enable) {
self().attr("onabort", onabort_);
}
return self();
}
}

Some files were not shown because too many files have changed in this diff Show More