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