class HTMLElementName extends ElementName {

    final String completeNamespacedElementName;
    final String completeHTML5ElementName;




    static HTMLElementName forName(final String prefix, final String elementName) {<FILL_FUNCTION_BODY>}


    private HTMLElementName(
            final String prefix, final String elementName,
            final String completeNamespacedElementName,
            final String completeHTML5ElementName,
            final String[] completeElementNames) {

        super(prefix, elementName, completeElementNames);

        this.completeNamespacedElementName = completeNamespacedElementName;
        this.completeHTML5ElementName = completeHTML5ElementName;

    }



    public String getCompleteNamespacedElementName() {
        return this.completeNamespacedElementName;
    }

    public String getCompleteHTML5ElementName() {
        return this.completeHTML5ElementName;
    }


}


        final boolean hasPrefix = prefix != null && prefix.length() > 0;

        // No-suffix element names are allowed by the HTML5 Custom Element specification ("<tag->" is valid),
        // so we will just normalize to the empty string so that we treat them in the same way as no-name
        // elements in the textual template modes.
        final String nameElementName =
                (elementName == null || elementName.length() == 0)? "" : elementName.toLowerCase();

        final String namePrefix;
        final String completeNamespacedElementName;
        final String completeHTML5ElementName;
        final String[] completeAttributeNames;

        if (hasPrefix) {

            namePrefix = prefix.toLowerCase();
            completeNamespacedElementName = namePrefix + ":" + nameElementName;
            completeHTML5ElementName = namePrefix + "-" + nameElementName;
            completeAttributeNames = new String[] { completeNamespacedElementName, completeHTML5ElementName };

        } else {

            namePrefix = null;
            completeNamespacedElementName = nameElementName;
            completeHTML5ElementName = nameElementName;
            completeAttributeNames = new String[] { nameElementName };

        }

        return new HTMLElementName(
                namePrefix, nameElementName,
                completeNamespacedElementName, completeHTML5ElementName, completeAttributeNames);

    
<methods>public boolean equals(java.lang.Object) ,public java.lang.String[] getCompleteElementNames() ,public java.lang.String getElementName() ,public java.lang.String getPrefix() ,public int hashCode() ,public boolean isPrefixed() ,public java.lang.String toString() <variables>protected final non-sealed java.lang.String[] completeElementNames,protected final non-sealed java.lang.String elementName,private final non-sealed int h,protected final non-sealed java.lang.String prefix