blob: 6363a035e243999c8f54083667a5b17e7c1b3b58 [file] [log] [blame]
{% 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