{#
    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 %}


{% macro print_if(predicate, str) -%}
{% if predicate %}{{str}}{% endif %}
{%- endmacro %}
