Added C2 syntax highlighting (SpartanJ/ecode#447).

This commit is contained in:
Martín Lucas Golini
2025-05-30 01:43:13 -03:00
parent 6f7dcf5f0f
commit a64bcb558b
5 changed files with 182 additions and 4 deletions

View File

@@ -23,8 +23,7 @@ void addC() {
"",
SyntaxPatternMatchType::RegEx },
{ { "[%a_][%w_]*%f[(]" }, "function" },
{ { "#[%a_][%w_]*" }, "symbol" },
{ { "[%a_][%w_]*" }, "symbol" },
{ { "#?[%a_][%w_]*" }, "symbol" },
},
{

View File

@@ -35,8 +35,7 @@ void addCPP() {
{ { "std%:%:[%w_]*" }, "keyword2" },
{ { "(%[)(%[)(%a[%w_]+)(%])(%])" },
{ "normal", "keyword", "keyword3", "keyword2", "keyword3", "keyword" } },
{ { "#[%a_][%w_]*" }, "symbol" },
{ { "[%a_][%w_]*" }, "symbol" },
{ { "#?[%a_][%w_]*" }, "symbol" },
},
{

View File

@@ -0,0 +1,165 @@
#include <eepp/ui/doc/languages/c3.hpp>
#include <eepp/ui/doc/syntaxdefinitionmanager.hpp>
namespace EE { namespace UI { namespace Doc { namespace Language {
SyntaxDefinition& addC2() {
auto& sd = SyntaxDefinitionManager::instance()->add(
{ "C2",
{ "%.c2$" },
{
{ { "//.-\n" }, "comment" },
{ { "/%*", "%*/" }, "comment" },
{ { "\"", "\"", "\\" }, "string" },
{ { "'", "'", "\\" }, "string" },
{ { "`", "`" }, "string" },
{ { "(type|struct|union)\\s+([A-Za-z][\\w_]*)" },
{ "keyword", "keyword", "keyword2" },
"",
SyntaxPatternMatchType::RegEx },
{ { "^%s*(import)%s+([%a][%w_%:,%s]*)%f[@;\n]" },
{ "normal", "keyword", "literal" } },
{ { "^%s*(module)%s+([%a][%w_%:%s%{%},]*)%s*%f[@;\n]" },
{ "normal", "keyword", "literal" } },
{ { "(fn)%s+([%a][%w_]*%*?%\?\?)%s+([%a][%w_]*)%.([%a_][%w_]*)%f[%(]" },
{ "normal", "keyword", "keyword2", "keyword2", "function" } },
{ { "(macro)%s+([%a][%w_]*%*?%\?\?)%s+([%a][%w_]*)%.([%a_][%w_]*)%f[%(]" },
{ "normal", "keyword", "keyword2", "keyword2", "function" } },
{ { "(fn)%s+([%a][%w_]*%*?%\?\?)%s+([%a][%w_]*)%f[%(]" },
{ "normal", "keyword", "keyword2", "function" } },
{ { "common_number_parser_o" }, "number", "", SyntaxPatternMatchType::Parser },
{ { "(if|for|while|switch)\\s*(?=\\()" },
{ "normal", "keyword", "keyword" },
"",
SyntaxPatternMatchType::RegEx },
{ { "[%a_][%w_]*%f[(]" }, "function" },
{ { "[<>~=+-*/%?]=" }, "operator" },
{ { "#?[%a_][%w_]*" }, "symbol" },
},
{
{ "fn", "keyword" },
{ "struct", "keyword" },
{ "type", "keyword" },
{ "enum", "keyword" },
{ "union", "keyword" },
{ "const", "keyword" },
{ "public", "keyword" },
{ "template", "keyword" },
{ "break", "keyword" },
{ "return", "keyword" },
{ "continue", "keyword" },
{ "asm", "keyword" },
{ "goto", "keyword" },
{ "fallthrough", "keyword" },
{ "volatile", "keyword" },
{ "if", "keyword" },
{ "else", "keyword" },
{ "switch", "keyword" },
{ "sswitch", "keyword" },
{ "case", "keyword" },
{ "default", "keyword" },
{ "while", "keyword" },
{ "for", "keyword" },
{ "do", "keyword" },
{ "sizeof", "keyword" },
{ "offsetof", "keyword" },
{ "elemsof", "keyword" },
{ "enum_min", "keyword" },
{ "enum_max", "keyword" },
{ "cast", "keyword" },
{ "to_container", "keyword" },
{ "assert", "keyword" },
{ "static_assert", "keyword" },
{ "export", "keyword" },
{ "packed", "keyword" },
{ "unused", "keyword" },
{ "unused_params", "keyword" },
{ "section", "keyword" },
{ "noreturn", "keyword" },
{ "inline", "keyword" },
{ "aligned", "keyword" },
{ "weak", "keyword" },
{ "opaque", "keyword" },
{ "printf_format", "keyword" },
{ "auto_file", "keyword" },
{ "auto_line", "keyword" },
{ "pure", "keyword" },
{ "bool", "keyword2" },
{ "f32", "keyword2" },
{ "f64", "keyword2" },
{ "i8", "keyword2" },
{ "i16", "keyword2" },
{ "i32", "keyword2" },
{ "i64", "keyword2" },
{ "isize", "keyword2" },
{ "u8", "keyword2" },
{ "u16", "keyword2" },
{ "u32", "keyword2" },
{ "u64", "keyword2" },
{ "usize", "keyword2" },
{ "char", "keyword2" },
{ "void", "keyword2" },
{ "reg8", "keyword2" },
{ "reg16", "keyword2" },
{ "reg32", "keyword2" },
{ "reg64", "keyword2" },
{ "c_char", "keyword2" },
{ "c_uchar", "keyword2" },
{ "c_int", "keyword2" },
{ "c_uint", "keyword2" },
{ "c_long", "keyword2" },
{ "c_longlong", "keyword2" },
{ "c_ulong", "keyword2" },
{ "c_ulonglong", "keyword2" },
{ "c_size", "keyword2" },
{ "c_ssize", "keyword2" },
{ "c_float", "keyword2" },
{ "c_double", "keyword2" },
{ "nil", "literal" },
{ "buildtime", "literal" },
{ "min_i8", "literal" },
{ "max_i8", "literal" },
{ "min_u8", "literal" },
{ "max_u8", "literal" },
{ "min_i16", "literal" },
{ "max_i16", "literal" },
{ "min_u16", "literal" },
{ "max_u16", "literal" },
{ "min_i32", "literal" },
{ "max_i32", "literal" },
{ "min_u32", "literal" },
{ "max_u32", "literal" },
{ "min_i64", "literal" },
{ "max_i64", "literal" },
{ "min_u64", "literal" },
{ "max_u64", "literal" },
{ "min_isize", "literal" },
{ "max_isize", "literal" },
{ "min_usize", "literal" },
{ "max_usize", "literal" },
{ "true", "literal" },
{ "false", "literal" },
{ "#if", "keyword" },
{ "#elif", "keyword" },
{ "#else", "keyword" },
{ "#endif", "keyword" },
{ "#define", "keyword" },
},
"//",
{}
} );
sd.setFoldRangeType( FoldRangeType::Braces ).setFoldBraces( { { '{', '}' } } );
return sd;
}
}}}} // namespace EE::UI::Doc::Language

View File

@@ -0,0 +1,12 @@
#ifndef EE_UI_DOC_C2
#define EE_UI_DOC_C2
#include <eepp/ui/doc/syntaxdefinition.hpp>
namespace EE { namespace UI { namespace Doc { namespace Language {
extern SyntaxDefinition& addC2();
}}}} // namespace EE::UI::Doc::Language
#endif

View File

@@ -9,6 +9,7 @@
#include <eepp/ui/doc/languages/blueprint.hpp>
#include <eepp/ui/doc/languages/brainfuck.hpp>
#include <eepp/ui/doc/languages/buzz.hpp>
#include <eepp/ui/doc/languages/c2.hpp>
#include <eepp/ui/doc/languages/c3.hpp>
#include <eepp/ui/doc/languages/carbon.hpp>
#include <eepp/ui/doc/languages/clojure.hpp>
@@ -176,6 +177,8 @@ void LanguagesSyntaxHighlighting::load() {
sdm->addPreDefinition(
{ "Buzz", []() -> SyntaxDefinition& { return addBuzz(); }, { "%.buzz$" } } );
sdm->addPreDefinition( { "C2", []() -> SyntaxDefinition& { return addC2(); }, { "%.c2$" } } );
sdm->addPreDefinition( { "C3", []() -> SyntaxDefinition& { return addC3(); }, { "%.c3t?$" } } );
sdm->addPreDefinition( {