From cfd3bebfcc081e0a1f53e218ee69ae4984a07423 Mon Sep 17 00:00:00 2001 From: Francesco Abbate Date: Fri, 18 Jun 2021 12:00:24 +0200 Subject: [PATCH] Provide specific syntax plugin for C++ We have only the problem to attribute the .h either to C or C++ but we don't have currently any way to discriminate them. --- data/plugins/language_c.lua | 2 +- data/plugins/language_cpp.lua | 69 +++++++++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 data/plugins/language_cpp.lua diff --git a/data/plugins/language_c.lua b/data/plugins/language_c.lua index b311884b..836e1692 100644 --- a/data/plugins/language_c.lua +++ b/data/plugins/language_c.lua @@ -2,7 +2,7 @@ local syntax = require "core.syntax" syntax.add { - files = { "%.c$", "%.h$", "%.inl$", "%.cpp$", "%.hpp$" }, + files = { "%.c$", "%.h$", "%.inl$" }, comment = "//", patterns = { { pattern = "//.-\n", type = "comment" }, diff --git a/data/plugins/language_cpp.lua b/data/plugins/language_cpp.lua new file mode 100644 index 00000000..2e3b7924 --- /dev/null +++ b/data/plugins/language_cpp.lua @@ -0,0 +1,69 @@ +-- mod-version:1 -- lite-xl 1.16 +local syntax = require "core.syntax" + +syntax.add { + files = { "%.cpp$", "%.h$", "%.hpp$", "%.inl$" }, + comment = "//", + patterns = { + { pattern = "//.-\n", type = "comment" }, + { pattern = { "/%*", "%*/" }, type = "comment" }, + { pattern = { '"', '"', '\\' }, type = "string" }, + { pattern = { "'", "'", '\\' }, type = "string" }, + { pattern = "0x%x+", type = "number" }, + { pattern = "%d+[%d%.eE]*f?", type = "number" }, + { pattern = "%.?%d+f?", type = "number" }, + { pattern = "[%+%-=/%*%^%%<>!~|&]", type = "operator" }, + { pattern = "struct%s()[%a_][%w_]*", type = {"keyword", "keyword2"} }, + { pattern = "class%s()[%a_][%w_]*", type = {"keyword", "keyword2"} }, + { pattern = "union%s()[%a_][%w_]*", type = {"keyword", "keyword2"} }, + { pattern = "namespace%s()[%a_][%w_]*", type = {"keyword", "keyword2"} }, + { pattern = "[%a_][%w_]*::", type = "symbol" }, + { pattern = "::", type = "symbol" }, + -- { pattern = "[%a_][%w_]*%f[(]", type = "function" }, + { pattern = "[%a_][%w_]*", type = "symbol" }, + { pattern = "#include%s()<.->", type = {"keyword", "string"} }, + { pattern = "#[%a_][%w_]*", type = "keyword" }, + }, + symbols = { + ["if"] = "keyword", + ["then"] = "keyword", + ["else"] = "keyword", + ["elseif"] = "keyword", + ["do"] = "keyword", + ["while"] = "keyword", + ["for"] = "keyword", + ["break"] = "keyword", + ["continue"] = "keyword", + ["return"] = "keyword", + ["goto"] = "keyword", + ["typedef"] = "keyword", + ["enum"] = "keyword", + ["extern"] = "keyword", + ["static"] = "keyword", + ["volatile"] = "keyword", + ["const"] = "keyword", + ["inline"] = "keyword", + ["switch"] = "keyword", + ["case"] = "keyword", + ["default"] = "keyword", + ["auto"] = "keyword", + ["void"] = "keyword", + ["template"] = "keyword", + ["typename"] = "keyword", + ["int"] = "keyword2", + ["short"] = "keyword2", + ["long"] = "keyword2", + ["float"] = "keyword2", + ["double"] = "keyword2", + ["char"] = "keyword2", + ["unsigned"] = "keyword2", + ["bool"] = "keyword2", + ["true"] = "literal", + ["false"] = "literal", + ["nullptr"] = "literal", + ["public"] = "keyword", + ["private"] = "keyword", + ["protected"] = "keyword", + }, +} +