{% from 'macros.tmpl' import license %}
{{license()}}
{% macro trie_switch(trie, index) %}
{# FIXME: No need to switch if there's only a single item in the subtrie:
   can just have an if statement as we're currently doing for leaves. #}
switch (data[{{index}}]) {
{% for char, subtrie, tag, conditions in trie %}
case '{{char}}':
    {% if subtrie %}{# Recurse on subtrie #}
    {{trie_switch(subtrie, index + 1) | indent}}
    {% elif conditions %}{# Check suffix #}
    if ({{conditions | join(' && ')}})
        return {{tag}}Tag.localName().impl();
    return 0;
    {% else %}{# Terminal node (no suffix) #}
    return {{tag}}Tag.localName().impl();
    {% endif %}
{% endfor %}
}
return 0;
{% endmacro %}

#include "{{namespace}}ElementLookupTrie.h"

#include "{{namespace}}Names.h"

namespace blink {

using namespace {{namespace}}Names;

StringImpl* lookup{{namespace}}Tag(const UChar* data, unsigned length)
{
    ASSERT(data);
    ASSERT(length);
    switch (length) {
    {% for length, trie in length_tries %}
    case {{length}}:
        {{trie_switch(trie, 0) | indent(8)}}
    {% endfor %}
    }
    return 0;
}

} // namespace blink
