154 lines
5 KiB
Lua
154 lines
5 KiB
Lua
-- mod-version:3
|
|
local syntax = require "core.syntax"
|
|
|
|
local yaml_bracket_list = {
|
|
patterns = {
|
|
-- comments
|
|
{ pattern = { "#", "\n"}, type = "comment" },
|
|
-- strings
|
|
{ pattern = { '"', '"', '\\' }, type = "string" },
|
|
{ pattern = { "'", "'", '\\' }, type = "string" },
|
|
-- keys
|
|
{
|
|
pattern = "[%w%d]+%g+()%s*():()%s",
|
|
type = { "keyword2", "normal", "operator", "normal" }
|
|
},
|
|
-- variables
|
|
{ pattern = "%$%a%w+", type = "keyword" },
|
|
{ pattern = "%$%{%{.-%}%}", type = "keyword" },
|
|
-- numeric place holders
|
|
{ pattern = "%-?%.inf", type = "number" },
|
|
{ pattern = "%.NaN", type = "number" },
|
|
-- numbers
|
|
{ pattern = "[%+%-]?0%d+", type = "number" },
|
|
{ pattern = "[%+%-]?0x%x+", type = "number" },
|
|
{ pattern = "[%+%-]?%d+[,%.eE:%+%d]*%d+", type = "number" },
|
|
{ pattern = "[%+%-]?%d+", type = "number" },
|
|
-- others
|
|
{ pattern = ",", type = "operator" },
|
|
{ pattern = "%w+", type = "string" },
|
|
{
|
|
pattern = "[_%(%)%*@~`!%%%^&=%+%-\\;%.><%?/%s]+",
|
|
type = "string"
|
|
}
|
|
},
|
|
symbols = {}
|
|
}
|
|
|
|
syntax.add {
|
|
name = "YAML",
|
|
files = { "%.yml$", "%.yaml$" },
|
|
comment = "#",
|
|
space_handling = false,
|
|
patterns = {
|
|
--- rules that start with spaces first and those taking precedence
|
|
-- parent and child keys
|
|
{
|
|
pattern = "^[%w%d]+%g+%s*%f[:]",
|
|
type = "literal"
|
|
},
|
|
{
|
|
pattern = "^%s+[%w%d]+%g+%s*%f[:]",
|
|
type = "keyword2"
|
|
},
|
|
-- bracket lists after key declaration
|
|
{
|
|
pattern = { ":%s+%[", "%]" },
|
|
syntax = yaml_bracket_list, type = "operator"
|
|
},
|
|
{
|
|
pattern = { ":%s+{", "}" },
|
|
syntax = yaml_bracket_list, type = "operator"
|
|
},
|
|
-- child key
|
|
{
|
|
pattern = "^%s+()[%w%d]+%g+()%s*():()%s",
|
|
type = { "normal", "keyword2", "normal", "operator", "normal" }
|
|
},
|
|
-- child list element
|
|
{
|
|
pattern = "^%s+()%-()%s+()[%w%d]+%g+()%s*():()%s",
|
|
type = { "normal", "operator", "normal", "keyword2", "normal", "operator", "normal" }
|
|
},
|
|
-- unkeyed bracket lists
|
|
{
|
|
pattern = { "^%s*%[", "%]" },
|
|
syntax = yaml_bracket_list, type = "operator"
|
|
},
|
|
{
|
|
pattern = { "^%s*{", "}" },
|
|
syntax = yaml_bracket_list, type = "operator"
|
|
},
|
|
{
|
|
pattern = { "^%s*%-%s*%[", "%]" },
|
|
syntax = yaml_bracket_list, type = "operator"
|
|
},
|
|
{
|
|
pattern = { "^%s*%-%s*{", "}" },
|
|
syntax = yaml_bracket_list, type = "operator"
|
|
},
|
|
-- rule to optimize space handling
|
|
{ pattern = "%s+", type = "normal" },
|
|
--- all the other rules
|
|
-- comments
|
|
{ pattern = { "#", "\n"}, type = "comment" },
|
|
-- strings
|
|
{ pattern = { '"', '"', '\\' }, type = "string" },
|
|
{ pattern = { "'", "'", '\\' }, type = "string" },
|
|
-- extra bracket lists rules on explicit type
|
|
{
|
|
pattern = { "!!%w+%s+%[", "%]"},
|
|
syntax = yaml_bracket_list, type = "operator"
|
|
},
|
|
{
|
|
pattern = { "!!%w+%s+{", "}"},
|
|
syntax = yaml_bracket_list, type = "operator"
|
|
},
|
|
-- numeric place holders
|
|
{ pattern = "%-?%.inf", type = "number" },
|
|
{ pattern = "%.NaN", type = "number" },
|
|
-- parent list element
|
|
{
|
|
pattern = "^%-()%s+()[%w%d]+%g+()%s*():()%s",
|
|
type = { "operator", "normal", "keyword2", "normal", "operator", "normal" }
|
|
},
|
|
-- key label
|
|
{
|
|
pattern = "%&()%g+",
|
|
type = { "keyword", "literal" }
|
|
},
|
|
-- key elements expansion
|
|
{ pattern = "<<", type = "literal" },
|
|
{
|
|
pattern = "%*()[%w%d_]+",
|
|
type = { "keyword", "literal" }
|
|
},
|
|
-- explicit data types
|
|
{ pattern = "!!%g+", type = "keyword" },
|
|
-- parent key
|
|
{
|
|
pattern = "^[%w%d]+%g+()%s*():()%s",
|
|
type = { "literal", "normal", "operator", "normal" }
|
|
},
|
|
-- variables
|
|
{ pattern = "%$%a%w+", type = "keyword" },
|
|
{ pattern = "%$%{%{.-%}%}", type = "keyword" },
|
|
-- numbers
|
|
{ pattern = "[%+%-]?0%d+", type = "number" },
|
|
{ pattern = "[%+%-]?0x%x+", type = "number" },
|
|
{ pattern = "[%+%-]?%d+[,%.eE:%+%d]*%d+", type = "number" },
|
|
{ pattern = "[%+%-]?%d+", type = "number" },
|
|
-- special operators
|
|
{ pattern = "[%*%|%!>%%]", type = "keyword" },
|
|
{ pattern = "[%-%$:%?]+", type = "operator" },
|
|
-- Everything else as a string
|
|
{ pattern = "[%d%a_][%g_]*", type = "string" },
|
|
{ pattern = "%p+", type = "string" }
|
|
},
|
|
symbols = {
|
|
["true"] = "number",
|
|
["false"] = "number",
|
|
["y"] = "number",
|
|
["n"] = "number"
|
|
}
|
|
}
|