From 86fa78e9d290c4d488a2bfdcfc573bc8bf7b4ded Mon Sep 17 00:00:00 2001 From: Armin Ronacher Date: Thu, 29 Nov 2007 19:42:40 +0100 Subject: [PATCH] added jinja tm bundle --HG-- branch : trunk --- ext/Commands/Help.tmCommand | 32 ++ ext/Commands/Validate Syntax.tmCommand | 59 ++ ext/Commands/Wrap in Tag.tmCommand | 26 + ext/Commands/Wrap in Variable Tag.tmCommand | 26 + .../Symbol List: Blocks.tmPreferences | 19 + ext/Snippets/abs.tmSnippet | 16 + ext/Snippets/batch.tmSnippet | 16 + ext/Snippets/block.tmSnippet | 18 + ext/Snippets/capitalize.tmSnippet | 16 + ext/Snippets/capture.tmSnippet | 16 + ext/Snippets/center.tmSnippet | 16 + ext/Snippets/default.tmSnippet | 16 + ext/Snippets/dformat.tmSnippet | 16 + ext/Snippets/dictsort.tmSnippet | 16 + ext/Snippets/escape.tmSnippet | 16 + ext/Snippets/extends.tmSnippet | 16 + ext/Snippets/filesizeformat.tmSnippet | 16 + ext/Snippets/filter.tmSnippet | 18 + ext/Snippets/first.tmSnippet | 16 + ext/Snippets/float.tmSnippet | 16 + ext/Snippets/for ___ in ___.tmSnippet | 18 + ext/Snippets/format.tmSnippet | 16 + ext/Snippets/if.tmSnippet | 18 + ext/Snippets/indent.tmSnippet | 16 + ext/Snippets/int.tmSnippet | 16 + ext/Snippets/join.tmSnippet | 16 + ext/Snippets/jsonencode.tmSnippet | 16 + ext/Snippets/last.tmSnippet | 16 + ext/Snippets/length.tmSnippet | 16 + ext/Snippets/lower.tmSnippet | 16 + ext/Snippets/macro.tmSnippet | 18 + ext/Snippets/markdown.tmSnippet | 16 + ext/Snippets/pprint.tmSnippet | 16 + ext/Snippets/random.tmSnippet | 16 + ext/Snippets/raw.tmSnippet | 18 + ext/Snippets/replace.tmSnippet | 16 + ext/Snippets/reverse.tmSnippet | 16 + ext/Snippets/round.tmSnippet | 16 + ext/Snippets/rst.tmSnippet | 16 + ext/Snippets/slice.tmSnippet | 16 + ext/Snippets/sort.tmSnippet | 16 + ext/Snippets/string.tmSnippet | 16 + ext/Snippets/striptags.tmSnippet | 16 + ext/Snippets/sum.tmSnippet | 16 + ext/Snippets/textile.tmSnippet | 16 + ext/Snippets/title.tmSnippet | 16 + ext/Snippets/trim.tmSnippet | 16 + ext/Snippets/truncate.tmSnippet | 16 + ext/Snippets/upper.tmSnippet | 16 + ext/Snippets/urlencode.tmSnippet | 16 + ext/Snippets/urlize.tmSnippet | 16 + ext/Snippets/wordcount.tmSnippet | 16 + ext/Snippets/wordwrap.tmSnippet | 16 + ext/Snippets/xmlattr.tmSnippet | 16 + .../HTML (Jinja Templates).tmLanguage | 29 + ext/Syntaxes/Jinja Templates.tmLanguage | 518 ++++++++++++++++++ ext/info.plist | 148 +++++ 57 files changed, 1653 insertions(+) create mode 100644 ext/Commands/Help.tmCommand create mode 100644 ext/Commands/Validate Syntax.tmCommand create mode 100644 ext/Commands/Wrap in Tag.tmCommand create mode 100644 ext/Commands/Wrap in Variable Tag.tmCommand create mode 100644 ext/Preferences/Symbol List: Blocks.tmPreferences create mode 100644 ext/Snippets/abs.tmSnippet create mode 100644 ext/Snippets/batch.tmSnippet create mode 100644 ext/Snippets/block.tmSnippet create mode 100644 ext/Snippets/capitalize.tmSnippet create mode 100644 ext/Snippets/capture.tmSnippet create mode 100644 ext/Snippets/center.tmSnippet create mode 100644 ext/Snippets/default.tmSnippet create mode 100644 ext/Snippets/dformat.tmSnippet create mode 100644 ext/Snippets/dictsort.tmSnippet create mode 100644 ext/Snippets/escape.tmSnippet create mode 100644 ext/Snippets/extends.tmSnippet create mode 100644 ext/Snippets/filesizeformat.tmSnippet create mode 100644 ext/Snippets/filter.tmSnippet create mode 100644 ext/Snippets/first.tmSnippet create mode 100644 ext/Snippets/float.tmSnippet create mode 100644 ext/Snippets/for ___ in ___.tmSnippet create mode 100644 ext/Snippets/format.tmSnippet create mode 100644 ext/Snippets/if.tmSnippet create mode 100644 ext/Snippets/indent.tmSnippet create mode 100644 ext/Snippets/int.tmSnippet create mode 100644 ext/Snippets/join.tmSnippet create mode 100644 ext/Snippets/jsonencode.tmSnippet create mode 100644 ext/Snippets/last.tmSnippet create mode 100644 ext/Snippets/length.tmSnippet create mode 100644 ext/Snippets/lower.tmSnippet create mode 100644 ext/Snippets/macro.tmSnippet create mode 100644 ext/Snippets/markdown.tmSnippet create mode 100644 ext/Snippets/pprint.tmSnippet create mode 100644 ext/Snippets/random.tmSnippet create mode 100644 ext/Snippets/raw.tmSnippet create mode 100644 ext/Snippets/replace.tmSnippet create mode 100644 ext/Snippets/reverse.tmSnippet create mode 100644 ext/Snippets/round.tmSnippet create mode 100644 ext/Snippets/rst.tmSnippet create mode 100644 ext/Snippets/slice.tmSnippet create mode 100644 ext/Snippets/sort.tmSnippet create mode 100644 ext/Snippets/string.tmSnippet create mode 100644 ext/Snippets/striptags.tmSnippet create mode 100644 ext/Snippets/sum.tmSnippet create mode 100644 ext/Snippets/textile.tmSnippet create mode 100644 ext/Snippets/title.tmSnippet create mode 100644 ext/Snippets/trim.tmSnippet create mode 100644 ext/Snippets/truncate.tmSnippet create mode 100644 ext/Snippets/upper.tmSnippet create mode 100644 ext/Snippets/urlencode.tmSnippet create mode 100644 ext/Snippets/urlize.tmSnippet create mode 100644 ext/Snippets/wordcount.tmSnippet create mode 100644 ext/Snippets/wordwrap.tmSnippet create mode 100644 ext/Snippets/xmlattr.tmSnippet create mode 100644 ext/Syntaxes/HTML (Jinja Templates).tmLanguage create mode 100644 ext/Syntaxes/Jinja Templates.tmLanguage create mode 100644 ext/info.plist diff --git a/ext/Commands/Help.tmCommand b/ext/Commands/Help.tmCommand new file mode 100644 index 0000000..d106dec --- /dev/null +++ b/ext/Commands/Help.tmCommand @@ -0,0 +1,32 @@ + + + + + beforeRunningCommand + nop + command + . "$TM_SUPPORT_PATH/lib/webpreview.sh" +html_header "Jinja Help" "Jinja Templates" + +Markdown.pl <<'EOF' + +This document describes the commands of the TextMate Jinja Templates bundle and how you can use it. For general Jinja help you should read the [Jinja Documentation](http:/jinja.pocoo.org/documentation/ "Jinja Documentation Overview"). + +## Requirements +The Jinja support requires Jinja to be installed in the default python interpreter the system uses. If Jinja is not installed you cannot use the syntax validator. + +EOF + +html_footer + input + document + name + Help + output + showAsHTML + scope + source.jinja, text.html.jinja + uuid + 44B1526F-5825-40A5-AB42-6433F1DD02D9 + + diff --git a/ext/Commands/Validate Syntax.tmCommand b/ext/Commands/Validate Syntax.tmCommand new file mode 100644 index 0000000..804906f --- /dev/null +++ b/ext/Commands/Validate Syntax.tmCommand @@ -0,0 +1,59 @@ + + + + + beforeRunningCommand + nop + command + . "$TM_SUPPORT_PATH/lib/webpreview.sh" +html_header "Jinja Syntax Validation" "Jinja Templates" + +export TMPFILE="$(mktemp -t tm_jinja_test__)" +cat /dev/stdin > $TMPFILE + +python <<'END' +try: + from jinja import Environment + from jinja.exceptions import TemplateSyntaxError + e = Environment() +except ImportError, e: + print "<h2>Error</h2>" + print "<p>Jinja is not installed on this system, cannot perform syntax check.</p>" +else: + import sys, os + from cgi import escape + + f = file(os.environ['TMPFILE']) + try: + source = f.read() + finally: + f.close() + try: + e.parse(source, os.environ['TM_FILEPATH']) + except TemplateSyntaxError, err: + print e.from_string(''' + <h2>Syntax Error in Line {{ err.lineno or '?' }}</h2> + <p>{{ err.message|e }}</p> + <p><a href="txmt://open/?url=file://{{ err.filename|urlencode }}&line={{ err.lineno }}">Go To Line</a></p> + ''').render(err=err) + else: + print '<h2>Success</h2>' + print '<p>no syntax errors found!</p>' +END + +html_footer +rm $TMPFILE + input + document + keyEquivalent + ^V + name + Validate Syntax + output + showAsHTML + scope + source.jinja, text.html.jinja + uuid + 07198D95-F344-47EB-B1F2-69F2DC10BA1F + + diff --git a/ext/Commands/Wrap in Tag.tmCommand b/ext/Commands/Wrap in Tag.tmCommand new file mode 100644 index 0000000..6343d2e --- /dev/null +++ b/ext/Commands/Wrap in Tag.tmCommand @@ -0,0 +1,26 @@ + + + + + beforeRunningCommand + nop + command + #!/usr/bin/env python +import sys +sys.stdout.write("{% ${1:%s}$2 %}$3" % sys.stdin.read().replace('}', '\\}')) + fallbackInput + word + input + selection + keyEquivalent + ^@b + name + Wrap in Tag + output + insertAsSnippet + scope + source.jinja, text.html.jinja + uuid + 04309583-742D-4470-8FA7-A12EF5536215 + + diff --git a/ext/Commands/Wrap in Variable Tag.tmCommand b/ext/Commands/Wrap in Variable Tag.tmCommand new file mode 100644 index 0000000..c488ee9 --- /dev/null +++ b/ext/Commands/Wrap in Variable Tag.tmCommand @@ -0,0 +1,26 @@ + + + + + beforeRunningCommand + nop + command + #!/usr/bin/env python +import sys +sys.stdout.write("{{ ${1:%s}$2 }}$3" % sys.stdin.read().replace('}', '\\}')) + fallbackInput + word + input + selection + keyEquivalent + ^@v + name + Wrap in Variable Tag + output + insertAsSnippet + scope + source.jinja, text.html.jinja + uuid + BD126F84-B849-407F-BE62-EF984946EB82 + + diff --git a/ext/Preferences/Symbol List: Blocks.tmPreferences b/ext/Preferences/Symbol List: Blocks.tmPreferences new file mode 100644 index 0000000..1ea7d49 --- /dev/null +++ b/ext/Preferences/Symbol List: Blocks.tmPreferences @@ -0,0 +1,19 @@ + + + + + name + Symbol List: Blocks + scope + meta.scope.jinja.tag variable.other.jinja.block + settings + + showInSymbolList + 1 + symbolTransformation + s/^\s*([a-zA-Z_][a-zA-Z0-9_]*)/block $1/ + + uuid + 889E682B-196A-4424-8A87-EBFDC86BAAFC + + diff --git a/ext/Snippets/abs.tmSnippet b/ext/Snippets/abs.tmSnippet new file mode 100644 index 0000000..c6acdf8 --- /dev/null +++ b/ext/Snippets/abs.tmSnippet @@ -0,0 +1,16 @@ + + + + + content + |abs + name + abs + scope + source.jinja, text.html.jinja + tabTrigger + | + uuid + 7E9487F0-B012-4735-96DA-124EF3C87B15 + + diff --git a/ext/Snippets/batch.tmSnippet b/ext/Snippets/batch.tmSnippet new file mode 100644 index 0000000..0702e87 --- /dev/null +++ b/ext/Snippets/batch.tmSnippet @@ -0,0 +1,16 @@ + + + + + content + |batch(${1:rows})$2 + name + batch + scope + source.jinja, text.html.jinja + tabTrigger + | + uuid + 13A0482A-4EA3-406C-A74B-90131C529E25 + + diff --git a/ext/Snippets/block.tmSnippet b/ext/Snippets/block.tmSnippet new file mode 100644 index 0000000..5d6396c --- /dev/null +++ b/ext/Snippets/block.tmSnippet @@ -0,0 +1,18 @@ + + + + + content + {% block $1 %} + $2 +{% endblock %} + name + block + scope + source.jinja, text.html.jinja + tabTrigger + block + uuid + 24C0F9CE-D3F1-4677-8A2E-EFFE776098F0 + + diff --git a/ext/Snippets/capitalize.tmSnippet b/ext/Snippets/capitalize.tmSnippet new file mode 100644 index 0000000..48d924e --- /dev/null +++ b/ext/Snippets/capitalize.tmSnippet @@ -0,0 +1,16 @@ + + + + + content + |capitalize + name + capitalize + scope + source.jinja, text.html.jinja + tabTrigger + | + uuid + 4CCD42F3-8E6E-4B96-9D5D-BFB81E714948 + + diff --git a/ext/Snippets/capture.tmSnippet b/ext/Snippets/capture.tmSnippet new file mode 100644 index 0000000..a117d6b --- /dev/null +++ b/ext/Snippets/capture.tmSnippet @@ -0,0 +1,16 @@ + + + + + content + |capture(${1:captured})$2 + name + capture + scope + source.jinja, text.html.jinja + tabTrigger + | + uuid + 21EA80D9-967D-4681-BD17-765F1688EE5A + + diff --git a/ext/Snippets/center.tmSnippet b/ext/Snippets/center.tmSnippet new file mode 100644 index 0000000..f6d057d --- /dev/null +++ b/ext/Snippets/center.tmSnippet @@ -0,0 +1,16 @@ + + + + + content + |center(${1:width})$2 + name + center + scope + source.jinja, text.html.jinja + tabTrigger + | + uuid + 65CCCA35-3231-4B63-B67D-5FB596D833C7 + + diff --git a/ext/Snippets/default.tmSnippet b/ext/Snippets/default.tmSnippet new file mode 100644 index 0000000..6dd704c --- /dev/null +++ b/ext/Snippets/default.tmSnippet @@ -0,0 +1,16 @@ + + + + + content + |default(${1:value})$2 + name + default + scope + source.jinja, text.html.jinja + tabTrigger + | + uuid + 3D708572-4CD6-40D6-9F3B-CC96784CC069 + + diff --git a/ext/Snippets/dformat.tmSnippet b/ext/Snippets/dformat.tmSnippet new file mode 100644 index 0000000..53f8965 --- /dev/null +++ b/ext/Snippets/dformat.tmSnippet @@ -0,0 +1,16 @@ + + + + + content + |dformat(${2:{$1\}})$3 + name + dformat + scope + source.jinja, text.html.jinja + tabTrigger + | + uuid + 3416F5A3-C0A2-4B4B-ABBA-9EA40207E2B4 + + diff --git a/ext/Snippets/dictsort.tmSnippet b/ext/Snippets/dictsort.tmSnippet new file mode 100644 index 0000000..a3e9f7c --- /dev/null +++ b/ext/Snippets/dictsort.tmSnippet @@ -0,0 +1,16 @@ + + + + + content + |dictsort + name + dictsort + scope + source.jinja, text.html.jinja + tabTrigger + | + uuid + 6721CF2A-9DA7-4A7E-85C2-FE609E100DE8 + + diff --git a/ext/Snippets/escape.tmSnippet b/ext/Snippets/escape.tmSnippet new file mode 100644 index 0000000..5d026e4 --- /dev/null +++ b/ext/Snippets/escape.tmSnippet @@ -0,0 +1,16 @@ + + + + + content + |e + name + escape + scope + source.jinja, text.html.jinja + tabTrigger + | + uuid + FDE05A63-E81C-474C-A1A9-47FD862F39EE + + diff --git a/ext/Snippets/extends.tmSnippet b/ext/Snippets/extends.tmSnippet new file mode 100644 index 0000000..7af79ca --- /dev/null +++ b/ext/Snippets/extends.tmSnippet @@ -0,0 +1,16 @@ + + + + + content + {% extends $1 %} + name + extends + scope + source.jinja, text.html.jinja + tabTrigger + extends + uuid + CE75CB61-2FDA-4139-B21E-7DE143FAFA1B + + diff --git a/ext/Snippets/filesizeformat.tmSnippet b/ext/Snippets/filesizeformat.tmSnippet new file mode 100644 index 0000000..cd47158 --- /dev/null +++ b/ext/Snippets/filesizeformat.tmSnippet @@ -0,0 +1,16 @@ + + + + + content + |filesizeformat + name + filesizeformat + scope + source.jinja, text.html.jinja + tabTrigger + | + uuid + 9B7F35A9-3A98-4736-9AB3-21BD9BFB5069 + + diff --git a/ext/Snippets/filter.tmSnippet b/ext/Snippets/filter.tmSnippet new file mode 100644 index 0000000..973e4bb --- /dev/null +++ b/ext/Snippets/filter.tmSnippet @@ -0,0 +1,18 @@ + + + + + content + {% filter ${1:filter_name} %} + $2 +{% endfilter %} + name + filter + scope + source.jinja, text.html.jinja + tabTrigger + filter + uuid + 85C07823-2B9D-4631-88E7-AEF4E1BE9482 + + diff --git a/ext/Snippets/first.tmSnippet b/ext/Snippets/first.tmSnippet new file mode 100644 index 0000000..81f4fb9 --- /dev/null +++ b/ext/Snippets/first.tmSnippet @@ -0,0 +1,16 @@ + + + + + content + |first + name + first + scope + source.jinja, text.html.jinja + tabTrigger + | + uuid + FDFF242A-F3FB-4A4C-BE1A-F1311158B32B + + diff --git a/ext/Snippets/float.tmSnippet b/ext/Snippets/float.tmSnippet new file mode 100644 index 0000000..d310ecb --- /dev/null +++ b/ext/Snippets/float.tmSnippet @@ -0,0 +1,16 @@ + + + + + content + |float + name + float + scope + source.jinja, text.html.jinja + tabTrigger + | + uuid + 4BA654F6-F412-4AF9-9CEA-72BD1A709AF4 + + diff --git a/ext/Snippets/for ___ in ___.tmSnippet b/ext/Snippets/for ___ in ___.tmSnippet new file mode 100644 index 0000000..25989e7 --- /dev/null +++ b/ext/Snippets/for ___ in ___.tmSnippet @@ -0,0 +1,18 @@ + + + + + content + {% for ${1:item} in ${2:$1s} %} + $3 +{% endfor %} + name + for + scope + source.jinja, text.html.jinja + tabTrigger + for + uuid + C0C77C85-3A4E-4DAE-AEE3-533FA0DEA0C0 + + diff --git a/ext/Snippets/format.tmSnippet b/ext/Snippets/format.tmSnippet new file mode 100644 index 0000000..6be669d --- /dev/null +++ b/ext/Snippets/format.tmSnippet @@ -0,0 +1,16 @@ + + + + + content + |format(${1:args})$2 + name + format + scope + source.jinja, text.html.jinja + tabTrigger + | + uuid + 93EEDABE-BC52-4883-AF3D-DE4A44C3C246 + + diff --git a/ext/Snippets/if.tmSnippet b/ext/Snippets/if.tmSnippet new file mode 100644 index 0000000..2391083 --- /dev/null +++ b/ext/Snippets/if.tmSnippet @@ -0,0 +1,18 @@ + + + + + content + {% if $1 %} + $1 +{% endif %} + name + if + scope + source.jinja, text.html.jinja + tabTrigger + if + uuid + 5B95AA2C-B0E7-4886-9A55-90C1939D39C8 + + diff --git a/ext/Snippets/indent.tmSnippet b/ext/Snippets/indent.tmSnippet new file mode 100644 index 0000000..2aa765c --- /dev/null +++ b/ext/Snippets/indent.tmSnippet @@ -0,0 +1,16 @@ + + + + + content + |indent(${1:width})$2 + name + indent + scope + source.jinja, text.html.jinja + tabTrigger + | + uuid + 307C3853-AA0B-441C-A3D4-DE5CAE2C1673 + + diff --git a/ext/Snippets/int.tmSnippet b/ext/Snippets/int.tmSnippet new file mode 100644 index 0000000..79455af --- /dev/null +++ b/ext/Snippets/int.tmSnippet @@ -0,0 +1,16 @@ + + + + + content + |int + name + int + scope + source.jinja, text.html.jinja + tabTrigger + | + uuid + 0A6ECEB6-410E-4CF5-823E-139E8769BA16 + + diff --git a/ext/Snippets/join.tmSnippet b/ext/Snippets/join.tmSnippet new file mode 100644 index 0000000..85f54a1 --- /dev/null +++ b/ext/Snippets/join.tmSnippet @@ -0,0 +1,16 @@ + + + + + content + |join(${1:''})$2 + name + join + scope + source.jinja, text.html.jinja + tabTrigger + | + uuid + FBD6F4B2-3206-4CA9-AE99-B2C78149A357 + + diff --git a/ext/Snippets/jsonencode.tmSnippet b/ext/Snippets/jsonencode.tmSnippet new file mode 100644 index 0000000..25c2c65 --- /dev/null +++ b/ext/Snippets/jsonencode.tmSnippet @@ -0,0 +1,16 @@ + + + + + content + |jsonencode + name + jsonencode + scope + source.jinja, text.html.jinja + tabTrigger + | + uuid + 93E22AC4-B2B8-426D-89C9-FB416F24F975 + + diff --git a/ext/Snippets/last.tmSnippet b/ext/Snippets/last.tmSnippet new file mode 100644 index 0000000..29bd222 --- /dev/null +++ b/ext/Snippets/last.tmSnippet @@ -0,0 +1,16 @@ + + + + + content + |last + name + last + scope + source.jinja, text.html.jinja + tabTrigger + | + uuid + 6B7CA02D-D6CF-4F16-9A1E-7610DAEBB43F + + diff --git a/ext/Snippets/length.tmSnippet b/ext/Snippets/length.tmSnippet new file mode 100644 index 0000000..104ddeb --- /dev/null +++ b/ext/Snippets/length.tmSnippet @@ -0,0 +1,16 @@ + + + + + content + |length + name + length + scope + source.jinja, text.html.jinja + tabTrigger + | + uuid + 7F5037F1-CCC2-4179-98CA-66D001144AC2 + + diff --git a/ext/Snippets/lower.tmSnippet b/ext/Snippets/lower.tmSnippet new file mode 100644 index 0000000..b720579 --- /dev/null +++ b/ext/Snippets/lower.tmSnippet @@ -0,0 +1,16 @@ + + + + + content + |lower + name + lower + scope + source.jinja, text.html.jinja + tabTrigger + | + uuid + 6F1D6BEF-3D53-4EC8-9C42-DF0D1D2E68C5 + + diff --git a/ext/Snippets/macro.tmSnippet b/ext/Snippets/macro.tmSnippet new file mode 100644 index 0000000..d064eeb --- /dev/null +++ b/ext/Snippets/macro.tmSnippet @@ -0,0 +1,18 @@ + + + + + content + {% macro ${1:macro_name}($2) %} + $3 +{% endmacro %} + name + macro + scope + source.jinja, text.html.jinja + tabTrigger + macro + uuid + D3BE8551-A17F-47A4-A47D-02F00124F984 + + diff --git a/ext/Snippets/markdown.tmSnippet b/ext/Snippets/markdown.tmSnippet new file mode 100644 index 0000000..adba556 --- /dev/null +++ b/ext/Snippets/markdown.tmSnippet @@ -0,0 +1,16 @@ + + + + + content + |markdown + name + markdown + scope + source.jinja, text.html.jinja + tabTrigger + | + uuid + 78EEA703-C74E-4D71-9DDA-5674E3AB50D7 + + diff --git a/ext/Snippets/pprint.tmSnippet b/ext/Snippets/pprint.tmSnippet new file mode 100644 index 0000000..6adfe95 --- /dev/null +++ b/ext/Snippets/pprint.tmSnippet @@ -0,0 +1,16 @@ + + + + + content + |pprint + name + pprint + scope + source.jinja, text.html.jinja + tabTrigger + | + uuid + 1B45C5DE-21D2-4E2A-B7C6-794C9D7ECB99 + + diff --git a/ext/Snippets/random.tmSnippet b/ext/Snippets/random.tmSnippet new file mode 100644 index 0000000..4a769c5 --- /dev/null +++ b/ext/Snippets/random.tmSnippet @@ -0,0 +1,16 @@ + + + + + content + |random + name + random + scope + source.jinja, text.html.jinja + tabTrigger + | + uuid + B964A222-F305-44C9-B23C-0D2A55112C43 + + diff --git a/ext/Snippets/raw.tmSnippet b/ext/Snippets/raw.tmSnippet new file mode 100644 index 0000000..45e5e53 --- /dev/null +++ b/ext/Snippets/raw.tmSnippet @@ -0,0 +1,18 @@ + + + + + content + {% raw %} + $1 +{% endraw %} + name + raw + scope + source.jinja, text.html.jinja + tabTrigger + raw + uuid + 73F00DE1-17B0-4C8C-B495-82A3689EB6F1 + + diff --git a/ext/Snippets/replace.tmSnippet b/ext/Snippets/replace.tmSnippet new file mode 100644 index 0000000..b06b40f --- /dev/null +++ b/ext/Snippets/replace.tmSnippet @@ -0,0 +1,16 @@ + + + + + content + |replace + name + replace + scope + source.jinja, text.html.jinja + tabTrigger + | + uuid + C2DF4AC6-C586-4F6C-9A97-916558C248D7 + + diff --git a/ext/Snippets/reverse.tmSnippet b/ext/Snippets/reverse.tmSnippet new file mode 100644 index 0000000..51913c6 --- /dev/null +++ b/ext/Snippets/reverse.tmSnippet @@ -0,0 +1,16 @@ + + + + + content + |reverse + name + reverse + scope + source.jinja, text.html.jinja + tabTrigger + | + uuid + 7DE5D7CF-81BB-4AB3-A9B8-938D47918237 + + diff --git a/ext/Snippets/round.tmSnippet b/ext/Snippets/round.tmSnippet new file mode 100644 index 0000000..d5ae782 --- /dev/null +++ b/ext/Snippets/round.tmSnippet @@ -0,0 +1,16 @@ + + + + + content + |round(${1:places})$2 + name + round + scope + source.jinja, text.html.jinja + tabTrigger + | + uuid + 95E641E1-CAA4-4984-B406-54FEC11D5F1B + + diff --git a/ext/Snippets/rst.tmSnippet b/ext/Snippets/rst.tmSnippet new file mode 100644 index 0000000..ad07034 --- /dev/null +++ b/ext/Snippets/rst.tmSnippet @@ -0,0 +1,16 @@ + + + + + content + |rst + name + rst + scope + source.jinja, text.html.jinja + tabTrigger + | + uuid + E0F620DA-1CDA-4913-AD04-CAC8C63089D8 + + diff --git a/ext/Snippets/slice.tmSnippet b/ext/Snippets/slice.tmSnippet new file mode 100644 index 0000000..4550ac0 --- /dev/null +++ b/ext/Snippets/slice.tmSnippet @@ -0,0 +1,16 @@ + + + + + content + |slice(${1:columns}) + name + slice + scope + source.jinja, text.html.jinja + tabTrigger + | + uuid + E527CC83-06C6-4B54-8FDC-61FB4554B251 + + diff --git a/ext/Snippets/sort.tmSnippet b/ext/Snippets/sort.tmSnippet new file mode 100644 index 0000000..f6e2dcd --- /dev/null +++ b/ext/Snippets/sort.tmSnippet @@ -0,0 +1,16 @@ + + + + + content + |sort + name + sort + scope + source.jinja, text.html.jinja + tabTrigger + | + uuid + 27647146-46AC-4F2A-9069-178E359E55DF + + diff --git a/ext/Snippets/string.tmSnippet b/ext/Snippets/string.tmSnippet new file mode 100644 index 0000000..8593ffb --- /dev/null +++ b/ext/Snippets/string.tmSnippet @@ -0,0 +1,16 @@ + + + + + content + |string + name + string + scope + source.jinja, text.html.jinja + tabTrigger + | + uuid + D64E1E71-A89E-4349-8178-97BC06A5B35F + + diff --git a/ext/Snippets/striptags.tmSnippet b/ext/Snippets/striptags.tmSnippet new file mode 100644 index 0000000..665fa3c --- /dev/null +++ b/ext/Snippets/striptags.tmSnippet @@ -0,0 +1,16 @@ + + + + + content + |striptags + name + striptags + scope + source.jinja, text.html.jinja + tabTrigger + | + uuid + 866F74E0-D58C-4BCB-A256-3D94CFB612D9 + + diff --git a/ext/Snippets/sum.tmSnippet b/ext/Snippets/sum.tmSnippet new file mode 100644 index 0000000..c937a63 --- /dev/null +++ b/ext/Snippets/sum.tmSnippet @@ -0,0 +1,16 @@ + + + + + content + |sum + name + sum + scope + source.jinja, text.html.jinja + tabTrigger + | + uuid + AE1A2C7A-2D10-466F-9EB0-E8B540E7BA6E + + diff --git a/ext/Snippets/textile.tmSnippet b/ext/Snippets/textile.tmSnippet new file mode 100644 index 0000000..64be825 --- /dev/null +++ b/ext/Snippets/textile.tmSnippet @@ -0,0 +1,16 @@ + + + + + content + |textile + name + textile + scope + source.jinja, text.html.jinja + tabTrigger + | + uuid + 2EB9BB55-E38C-4FA9-81B7-73B1A73F65C7 + + diff --git a/ext/Snippets/title.tmSnippet b/ext/Snippets/title.tmSnippet new file mode 100644 index 0000000..319f08f --- /dev/null +++ b/ext/Snippets/title.tmSnippet @@ -0,0 +1,16 @@ + + + + + content + |title + name + title + scope + source.jinja, text.html.jinja + tabTrigger + | + uuid + B99D5C37-BE6D-4397-9F32-90BD1A02E016 + + diff --git a/ext/Snippets/trim.tmSnippet b/ext/Snippets/trim.tmSnippet new file mode 100644 index 0000000..fed7c1c --- /dev/null +++ b/ext/Snippets/trim.tmSnippet @@ -0,0 +1,16 @@ + + + + + content + |trim + name + trim + scope + source.jinja, text.html.jinja + tabTrigger + | + uuid + A199B66F-5B1A-4210-9B22-1FC6738EAD76 + + diff --git a/ext/Snippets/truncate.tmSnippet b/ext/Snippets/truncate.tmSnippet new file mode 100644 index 0000000..29dfe28 --- /dev/null +++ b/ext/Snippets/truncate.tmSnippet @@ -0,0 +1,16 @@ + + + + + content + |truncate + name + truncate + scope + source.jinja, text.html.jinja + tabTrigger + | + uuid + 3F749711-C818-41C2-8FB0-844CD2839617 + + diff --git a/ext/Snippets/upper.tmSnippet b/ext/Snippets/upper.tmSnippet new file mode 100644 index 0000000..dd0dfab --- /dev/null +++ b/ext/Snippets/upper.tmSnippet @@ -0,0 +1,16 @@ + + + + + content + |upper + name + upper + scope + source.jinja, text.html.jinja + tabTrigger + | + uuid + 823ABA67-7CA7-4F4F-ACC1-7D84AAC56469 + + diff --git a/ext/Snippets/urlencode.tmSnippet b/ext/Snippets/urlencode.tmSnippet new file mode 100644 index 0000000..b09b40c --- /dev/null +++ b/ext/Snippets/urlencode.tmSnippet @@ -0,0 +1,16 @@ + + + + + content + |urlencode + name + urlencode + scope + source.jinja, text.html.jinja + tabTrigger + | + uuid + 1C0A622E-7F37-437F-95A3-5342DEA80B4E + + diff --git a/ext/Snippets/urlize.tmSnippet b/ext/Snippets/urlize.tmSnippet new file mode 100644 index 0000000..f1524b0 --- /dev/null +++ b/ext/Snippets/urlize.tmSnippet @@ -0,0 +1,16 @@ + + + + + content + |urlize(${1:40}, ${2:true})$3 + name + urlize + scope + source.jinja, text.html.jinja + tabTrigger + | + uuid + DEDD7EB3-FFD2-4BFD-8D59-5DA8ED0F567F + + diff --git a/ext/Snippets/wordcount.tmSnippet b/ext/Snippets/wordcount.tmSnippet new file mode 100644 index 0000000..fe86aec --- /dev/null +++ b/ext/Snippets/wordcount.tmSnippet @@ -0,0 +1,16 @@ + + + + + content + |wordcount + name + wordcount + scope + source.jinja, text.html.jinja + tabTrigger + | + uuid + 40423A4E-9ED4-402C-A5BB-193797A73101 + + diff --git a/ext/Snippets/wordwrap.tmSnippet b/ext/Snippets/wordwrap.tmSnippet new file mode 100644 index 0000000..0065f25 --- /dev/null +++ b/ext/Snippets/wordwrap.tmSnippet @@ -0,0 +1,16 @@ + + + + + content + |wordwrap + name + wordwrap + scope + source.jinja, text.html.jinja + tabTrigger + | + uuid + 6000AFC3-4398-4500-B055-296D17DDAB48 + + diff --git a/ext/Snippets/xmlattr.tmSnippet b/ext/Snippets/xmlattr.tmSnippet new file mode 100644 index 0000000..5e8fbeb --- /dev/null +++ b/ext/Snippets/xmlattr.tmSnippet @@ -0,0 +1,16 @@ + + + + + content + |xmlattr + name + xmlattr + scope + source.jinja, text.html.jinja + tabTrigger + | + uuid + CA8BCFEA-2BDB-4CB8-8E31-6388ECEF05BB + + diff --git a/ext/Syntaxes/HTML (Jinja Templates).tmLanguage b/ext/Syntaxes/HTML (Jinja Templates).tmLanguage new file mode 100644 index 0000000..3ef69f6 --- /dev/null +++ b/ext/Syntaxes/HTML (Jinja Templates).tmLanguage @@ -0,0 +1,29 @@ + + + + + fileTypes + + foldingStartMarker + (<(?i:(head|table|tr|div|style|script|ul|ol|form|dl))\b.*?>|{%\s*(block|filter|for|if|macro|raw)) + foldingStopMarker + (</(?i:(head|table|tr|div|style|script|ul|ol|form|dl))\b.*?>|{%\s*(endblock|endfilter|endfor|endif|endmacro|endraw)\s*%}) + name + HTML (Jinja Templates) + patterns + + + include + source.jinja + + + include + text.html.basic + + + scopeName + text.html.jinja + uuid + 488399C0-5D29-4704-BE85-E03A461C34E7 + + diff --git a/ext/Syntaxes/Jinja Templates.tmLanguage b/ext/Syntaxes/Jinja Templates.tmLanguage new file mode 100644 index 0000000..57e20ac --- /dev/null +++ b/ext/Syntaxes/Jinja Templates.tmLanguage @@ -0,0 +1,518 @@ + + + + + fileTypes + + foldingStartMarker + ({%\s*(block|filter|for|if|macro|raw)) + foldingStopMarker + ({%\s*(endblock|endfilter|endfor|endif|endmacro|endraw)\s*%}) + name + Jinja Templates + patterns + + + begin + ({%)\s*(raw)\s*(%}) + captures + + 1 + + name + entity.other.jinja.delimiter.tag + + 2 + + name + keyword.control.jinja + + 3 + + name + entity.other.jinja.delimiter.tag + + + end + ({%)\s*(endraw)\s*(%}) + name + comment.block.jinja.raw + + + begin + {#-? + captures + + 0 + + name + entity.other.jinja.delimiter.comment + + + end + -?#} + name + comment.block.jinja + + + begin + {{-? + captures + + 0 + + name + entity.other.jinja.delimiter.variable + + + end + -?}} + name + meta.scope.jinja.variable + patterns + + + include + #expression + + + + + begin + {%-? + captures + + 0 + + name + entity.other.jinja.delimiter.tag + + + end + -?%} + name + meta.scope.jinja.tag + patterns + + + include + #expression + + + + + repository + + escaped_char + + match + \\x[0-9A-F]{2} + name + constant.character.escape.hex.jinja + + escaped_unicode_char + + captures + + 1 + + name + constant.character.escape.unicode.16-bit-hex.jinja + + 2 + + name + constant.character.escape.unicode.32-bit-hex.jinja + + 3 + + name + constant.character.escape.unicode.name.jinja + + + match + (\\U[0-9A-Fa-f]{8})|(\\u[0-9A-Fa-f]{4})|(\\N\{[a-zA-Z ]+\}) + + expression + + patterns + + + captures + + 1 + + name + keyword.control.jinja + + 2 + + name + variable.other.jinja.block + + + match + \b(block)\s+([a-zA-Z_][a-zA-Z0-9_]*) + + + captures + + 1 + + name + keyword.control.jinja + + 2 + + name + variable.other.jinja.filter + + + match + \b(filter)\s+([a-zA-Z_][a-zA-Z0-9_]*) + + + captures + + 1 + + name + keyword.control.jinja + + 2 + + name + variable.other.jinja.test + + + match + \b(is)\s+([a-zA-Z_][a-zA-Z0-9_]*) + + + match + \b(and|block|call|cycle|elif|else|endblock|endcall|endfilter|endfor|endif|endmacro|endraw|endtrans|extends|filter|for|if|in|include|is|macro|not|or|pluralize|print|raw|recursive|set|trans)\b + name + keyword.control.jinja + + + match + \b(true|false|undefined|none|_)\b + name + constant.language.jinja + + + match + \b(loop|super)\b + name + variable.language.jinja + + + match + [a-zA-Z_][a-zA-Z0-9_]* + name + variable.other.jinja + + + match + (\+|\-|\*\*|\*|//|/|%) + name + keyword.operator.arithmetic.jinja + + + captures + + 1 + + name + punctuation.other.jinja + + 2 + + name + variable.other.jinja.filter + + + match + (\|)([a-zA-Z_][a-zA-Z0-9_]*) + + + captures + + 1 + + name + punctuation.other.jinja + + 2 + + name + variable.other.jinja.attribute + + + match + (\.)([a-zA-Z_][a-zA-Z0-9_]*) + + + begin + \[ + captures + + 0 + + name + punctuation.other.jinja + + + end + \] + patterns + + + include + #expression + + + + + begin + \( + captures + + 0 + + name + punctuation.other.jinja + + + end + \) + patterns + + + include + #expression + + + + + begin + \{ + captures + + 0 + + name + punctuation.other.jinja + + + end + \} + patterns + + + include + #expression + + + + + match + (\.|:|\||,) + name + punctuation.other.jinja + + + match + (==|<=|=>|<|>|!=) + name + keyword.operator.comparison.jinja + + + match + = + name + keyword.operator.assignment.jinja + + + begin + " + beginCaptures + + 0 + + name + punctuation.definition.string.begin.jinja + + + end + " + endCaptures + + 0 + + name + punctuation.definition.string.end.jinja + + + name + string.quoted.double.jinja + patterns + + + include + #string + + + + + begin + ' + beginCaptures + + 0 + + name + punctuation.definition.string.begin.jinja + + + end + ' + endCaptures + + 0 + + name + punctuation.definition.string.end.jinja + + + name + string.quoted.single.jinja + patterns + + + include + #string + + + + + begin + @/ + beginCaptures + + 0 + + name + punctuation.definition.regexp.begin.jinja + + + end + / + endCaptures + + 0 + + name + punctuation.definition.regexp.end.jinja + + + name + string.regexp.jinja + patterns + + + include + #simple_escapes + + + + + + simple_escapes + + captures + + 1 + + name + constant.character.escape.newline.jinja + + 10 + + name + constant.character.escape.tab.jinja + + 11 + + name + constant.character.escape.vertical-tab.jinja + + 2 + + name + constant.character.escape.backlash.jinja + + 3 + + name + constant.character.escape.double-quote.jinja + + 4 + + name + constant.character.escape.single-quote.jinja + + 5 + + name + constant.character.escape.bell.jinja + + 6 + + name + constant.character.escape.backspace.jinja + + 7 + + name + constant.character.escape.formfeed.jinja + + 8 + + name + constant.character.escape.linefeed.jinja + + 9 + + name + constant.character.escape.return.jinja + + + match + (\\\n)|(\\\\)|(\\\")|(\\')|(\\a)|(\\b)|(\\f)|(\\n)|(\\r)|(\\t)|(\\v) + + string + + patterns + + + include + #simple_escapes + + + include + #escaped_char + + + include + #escaped_unicode_char + + + + + scopeName + source.jinja + uuid + CB0F3F8E-6062-4610-85B3-8905C61AD85A + + diff --git a/ext/info.plist b/ext/info.plist new file mode 100644 index 0000000..196f5f0 --- /dev/null +++ b/ext/info.plist @@ -0,0 +1,148 @@ + + + + + mainMenu + + items + + 85E26B4F-795C-4380-AA26-EF994D3F1220 + 8AC9FEED-B1BB-49A7-94FE-EAE734A90C79 + 44B1526F-5825-40A5-AB42-6433F1DD02D9 + ------------------------------------ + 07198D95-F344-47EB-B1F2-69F2DC10BA1F + + submenus + + 85E26B4F-795C-4380-AA26-EF994D3F1220 + + items + + 5B95AA2C-B0E7-4886-9A55-90C1939D39C8 + 24C0F9CE-D3F1-4677-8A2E-EFFE776098F0 + D3BE8551-A17F-47A4-A47D-02F00124F984 + C0C77C85-3A4E-4DAE-AEE3-533FA0DEA0C0 + 85C07823-2B9D-4631-88E7-AEF4E1BE9482 + 73F00DE1-17B0-4C8C-B495-82A3689EB6F1 + CE75CB61-2FDA-4139-B21E-7DE143FAFA1B + + name + Snippets + + 8AC9FEED-B1BB-49A7-94FE-EAE734A90C79 + + items + + 7E9487F0-B012-4735-96DA-124EF3C87B15 + 13A0482A-4EA3-406C-A74B-90131C529E25 + 4CCD42F3-8E6E-4B96-9D5D-BFB81E714948 + 21EA80D9-967D-4681-BD17-765F1688EE5A + 65CCCA35-3231-4B63-B67D-5FB596D833C7 + 3D708572-4CD6-40D6-9F3B-CC96784CC069 + 3416F5A3-C0A2-4B4B-ABBA-9EA40207E2B4 + 6721CF2A-9DA7-4A7E-85C2-FE609E100DE8 + FDE05A63-E81C-474C-A1A9-47FD862F39EE + 9B7F35A9-3A98-4736-9AB3-21BD9BFB5069 + FDFF242A-F3FB-4A4C-BE1A-F1311158B32B + 4BA654F6-F412-4AF9-9CEA-72BD1A709AF4 + 93EEDABE-BC52-4883-AF3D-DE4A44C3C246 + 307C3853-AA0B-441C-A3D4-DE5CAE2C1673 + 0A6ECEB6-410E-4CF5-823E-139E8769BA16 + FBD6F4B2-3206-4CA9-AE99-B2C78149A357 + 93E22AC4-B2B8-426D-89C9-FB416F24F975 + 6B7CA02D-D6CF-4F16-9A1E-7610DAEBB43F + 7F5037F1-CCC2-4179-98CA-66D001144AC2 + 6F1D6BEF-3D53-4EC8-9C42-DF0D1D2E68C5 + 78EEA703-C74E-4D71-9DDA-5674E3AB50D7 + 1B45C5DE-21D2-4E2A-B7C6-794C9D7ECB99 + B964A222-F305-44C9-B23C-0D2A55112C43 + C2DF4AC6-C586-4F6C-9A97-916558C248D7 + 7DE5D7CF-81BB-4AB3-A9B8-938D47918237 + 95E641E1-CAA4-4984-B406-54FEC11D5F1B + E0F620DA-1CDA-4913-AD04-CAC8C63089D8 + E527CC83-06C6-4B54-8FDC-61FB4554B251 + 27647146-46AC-4F2A-9069-178E359E55DF + D64E1E71-A89E-4349-8178-97BC06A5B35F + 866F74E0-D58C-4BCB-A256-3D94CFB612D9 + AE1A2C7A-2D10-466F-9EB0-E8B540E7BA6E + 2EB9BB55-E38C-4FA9-81B7-73B1A73F65C7 + B99D5C37-BE6D-4397-9F32-90BD1A02E016 + A199B66F-5B1A-4210-9B22-1FC6738EAD76 + 3F749711-C818-41C2-8FB0-844CD2839617 + 823ABA67-7CA7-4F4F-ACC1-7D84AAC56469 + 1C0A622E-7F37-437F-95A3-5342DEA80B4E + DEDD7EB3-FFD2-4BFD-8D59-5DA8ED0F567F + 40423A4E-9ED4-402C-A5BB-193797A73101 + 6000AFC3-4398-4500-B055-296D17DDAB48 + CA8BCFEA-2BDB-4CB8-8E31-6388ECEF05BB + + name + Filters + + + + name + Jinja Templates + ordering + + CB0F3F8E-6062-4610-85B3-8905C61AD85A + 488399C0-5D29-4704-BE85-E03A461C34E7 + C0C77C85-3A4E-4DAE-AEE3-533FA0DEA0C0 + 5B95AA2C-B0E7-4886-9A55-90C1939D39C8 + 24C0F9CE-D3F1-4677-8A2E-EFFE776098F0 + D3BE8551-A17F-47A4-A47D-02F00124F984 + 85C07823-2B9D-4631-88E7-AEF4E1BE9482 + 73F00DE1-17B0-4C8C-B495-82A3689EB6F1 + CE75CB61-2FDA-4139-B21E-7DE143FAFA1B + 7E9487F0-B012-4735-96DA-124EF3C87B15 + 13A0482A-4EA3-406C-A74B-90131C529E25 + 4CCD42F3-8E6E-4B96-9D5D-BFB81E714948 + 21EA80D9-967D-4681-BD17-765F1688EE5A + 65CCCA35-3231-4B63-B67D-5FB596D833C7 + 3D708572-4CD6-40D6-9F3B-CC96784CC069 + 3416F5A3-C0A2-4B4B-ABBA-9EA40207E2B4 + 6721CF2A-9DA7-4A7E-85C2-FE609E100DE8 + FDE05A63-E81C-474C-A1A9-47FD862F39EE + 9B7F35A9-3A98-4736-9AB3-21BD9BFB5069 + FDFF242A-F3FB-4A4C-BE1A-F1311158B32B + 4BA654F6-F412-4AF9-9CEA-72BD1A709AF4 + 93EEDABE-BC52-4883-AF3D-DE4A44C3C246 + 307C3853-AA0B-441C-A3D4-DE5CAE2C1673 + 0A6ECEB6-410E-4CF5-823E-139E8769BA16 + FBD6F4B2-3206-4CA9-AE99-B2C78149A357 + 93E22AC4-B2B8-426D-89C9-FB416F24F975 + 6B7CA02D-D6CF-4F16-9A1E-7610DAEBB43F + 7F5037F1-CCC2-4179-98CA-66D001144AC2 + 6F1D6BEF-3D53-4EC8-9C42-DF0D1D2E68C5 + 78EEA703-C74E-4D71-9DDA-5674E3AB50D7 + 1B45C5DE-21D2-4E2A-B7C6-794C9D7ECB99 + B964A222-F305-44C9-B23C-0D2A55112C43 + C2DF4AC6-C586-4F6C-9A97-916558C248D7 + 7DE5D7CF-81BB-4AB3-A9B8-938D47918237 + 95E641E1-CAA4-4984-B406-54FEC11D5F1B + E0F620DA-1CDA-4913-AD04-CAC8C63089D8 + E527CC83-06C6-4B54-8FDC-61FB4554B251 + 27647146-46AC-4F2A-9069-178E359E55DF + D64E1E71-A89E-4349-8178-97BC06A5B35F + 866F74E0-D58C-4BCB-A256-3D94CFB612D9 + AE1A2C7A-2D10-466F-9EB0-E8B540E7BA6E + 2EB9BB55-E38C-4FA9-81B7-73B1A73F65C7 + B99D5C37-BE6D-4397-9F32-90BD1A02E016 + A199B66F-5B1A-4210-9B22-1FC6738EAD76 + 3F749711-C818-41C2-8FB0-844CD2839617 + 823ABA67-7CA7-4F4F-ACC1-7D84AAC56469 + 1C0A622E-7F37-437F-95A3-5342DEA80B4E + DEDD7EB3-FFD2-4BFD-8D59-5DA8ED0F567F + 40423A4E-9ED4-402C-A5BB-193797A73101 + 6000AFC3-4398-4500-B055-296D17DDAB48 + CA8BCFEA-2BDB-4CB8-8E31-6388ECEF05BB + 889E682B-196A-4424-8A87-EBFDC86BAAFC + 44B1526F-5825-40A5-AB42-6433F1DD02D9 + 07198D95-F344-47EB-B1F2-69F2DC10BA1F + BD126F84-B849-407F-BE62-EF984946EB82 + 04309583-742D-4470-8FA7-A12EF5536215 + + uuid + B4E6C4DD-43DB-473D-8E0F-662C5E64C31D + + -- 2.26.2