@@ -28,9 +28,9 @@ public class Tag implements Cloneable {
2828 private boolean formList = false ; // a control that appears in forms: input, textarea, output etc
2929 private boolean formSubmit = false ; // a control that can be submitted in a form: input etc
3030
31- private Tag (String tagName , String namespace ) {
31+ private Tag (String tagName , String normalName , String namespace ) {
3232 this .tagName = tagName ;
33- normalName = Normalizer . lowerCase ( tagName ) ;
33+ this . normalName = normalName ;
3434 this .namespace = namespace ;
3535 }
3636
@@ -67,15 +67,20 @@ public String namespace() {
6767 * @return The tag, either defined or new generic.
6868 */
6969 public static Tag valueOf (String tagName , String namespace , ParseSettings settings ) {
70+ return valueOf (tagName , ParseSettings .normalName (tagName ), namespace , settings );
71+ }
72+
73+ /** Tag.valueOf with the normalName via the token.normalName, to save redundant lower-casing passes. */
74+ static Tag valueOf (String tagName , String normalName , String namespace , ParseSettings settings ) {
75+ Validate .notNull (tagName );
76+ tagName = tagName .trim ();
7077 Validate .notEmpty (tagName );
7178 Validate .notNull (namespace );
7279 Tag tag = Tags .get (tagName );
7380 if (tag != null && tag .namespace .equals (namespace ))
7481 return tag ;
7582
76- tagName = settings .normalizeTag (tagName ); // the name we'll use
77- Validate .notEmpty (tagName );
78- String normalName = Normalizer .lowerCase (tagName ); // the lower-case name to get tag settings off
83+ tagName = settings .preserveTagCase () ? tagName : normalName ;
7984 tag = Tags .get (normalName );
8085 if (tag != null && tag .namespace .equals (namespace )) {
8186 if (settings .preserveTagCase () && !tagName .equals (normalName )) {
@@ -86,12 +91,13 @@ public static Tag valueOf(String tagName, String namespace, ParseSettings settin
8691 }
8792
8893 // not defined: create default; go anywhere, do anything! (incl be inside a <p>)
89- tag = new Tag (tagName , namespace );
94+ tag = new Tag (tagName , normalName , namespace );
9095 tag .isBlock = false ;
9196
9297 return tag ;
9398 }
9499
100+
95101 /**
96102 * Get a Tag by name. If not previously defined (unknown), returns a new generic tag, that can do anything.
97103 * <p>
@@ -304,7 +310,7 @@ private static void setupTags(String[] tagNames, Consumer<Tag> tagModifier) {
304310 for (String tagName : tagNames ) {
305311 Tag tag = Tags .get (tagName );
306312 if (tag == null ) {
307- tag = new Tag (tagName , Parser .NamespaceHtml );
313+ tag = new Tag (tagName , tagName , Parser .NamespaceHtml );
308314 Tags .put (tag .tagName , tag );
309315 }
310316 tagModifier .accept (tag );
0 commit comments