blob: 17a9f4952f510ce1664c028439103e7c6cf4fc56 [file] [log] [blame]
{#
FIXME: Do we need to put license blocks in generated files?
#}
{% macro license() %}
// Copyright (c) 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
{%- endmacro %}
{% macro trie_leaf(index, object, return_macro, lowercase_data) %}
{% set name, value = object.items()[0] %}
{% if name|length %}
if (
{%- for c in name -%}
{%- if lowercase_data -%}
{{ " && " if not loop.first }}toASCIILower(data[{{index + loop.index0}}]) == '{{c}}'
{%- else -%}
{{ " && " if not loop.first }}data[{{index + loop.index0}}] == '{{c}}'
{%- endif -%}
{%- endfor -%}
)
return {{ return_macro(value) }};
break;
{% else %}
return {{ return_macro(value) }};
{% endif %}
{% endmacro %}
{% macro trie_switch(trie, index, return_macro, lowercase_data) %}
{% if trie|length == 1 and trie.values()[0] is string %}
{{ trie_leaf(index, trie, return_macro, lowercase_data) -}}
{% else %}
{% if lowercase_data %}
switch (toASCIILower(data[{{index}}])) {
{% else %}
switch (data[{{index}}]) {
{% endif %}
{% for char, value in trie.items()|sort %}
case '{{char}}':
{{ trie_switch(value, index + 1, return_macro, lowercase_data) | indent(4) }}
{% endfor %}
}
break;
{% endif %}
{% endmacro %}
{% macro trie_length_switch(length_tries, return_macro, lowercase_data) %}
switch (length) {
{% for length, trie in length_tries %}
case {{ length }}:
{{ trie_switch(trie, 0, return_macro, lowercase_data) | indent(4) }}
{% endfor %}
}
{% endmacro %}