{% 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 "config.h"
#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
