mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
46 lines
1.1 KiB
Cheetah
46 lines
1.1 KiB
Cheetah
{% 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
|