Skip to content

Commit 02c01c5

Browse files
feat(languages): add Godot, GLSL, and PO highlighting
Godot projects mix shaders, scene/resource text, compute GLSL, and gettext catalogs with GDScript. Without dedicated lexers those files fall back to C++/INI-like coloring that mis-highlights keywords, section keys, and PO msgid/msgstr. - Reuse LexCPP for GLSL-like Godot shaders while keeping layout qualifier names from stealing user identifiers. - Use LexProps for tscn/tres so slash-separated keys stay one token. - Register PO so translators get msgid/msgstr/fuzzy styles.
1 parent de79486 commit 02c01c5

6 files changed

Lines changed: 435 additions & 0 deletions

File tree

‎src/languages/gdshader.lua‎

Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
local L = {}
2+
3+
-- Godot shading language is GLSL-like (C comments, #include/#define), so it
4+
-- runs on LexCPP. Word lists follow the Godot 4 shader reference.
5+
L.lexer = "cpp"
6+
7+
L.singleLineComment = "// "
8+
9+
L.tabSize = 4
10+
11+
L.extensions = {
12+
"gdshader",
13+
"gdshaderinc",
14+
}
15+
16+
L.properties = {
17+
["fold.cpp.comment.explicit"] = "0",
18+
["lexer.cpp.track.preprocessor"] = "0",
19+
}
20+
21+
L.keywords = {
22+
-- Declarations, qualifiers, flow control.
23+
[0] = "break case const continue default discard do else false flat for global group_uniforms highp if in inout instance lowp mediump out render_mode return shader_type smooth stencil_mode struct switch true uniform varying while",
24+
-- Data types.
25+
[1] = "bool bvec2 bvec3 bvec4 float int isampler2D isampler2DArray isampler3D ivec2 ivec3 ivec4 mat2 mat3 mat4 sampler2D sampler2DArray sampler3D samplerCube samplerCubeArray samplerExternalOES uint usampler2D usampler2DArray usampler3D uvec2 uvec3 uvec4 vec2 vec3 vec4 void",
26+
-- Built-in functions, variables, constants and defines; shader types,
27+
-- render/stencil modes and uniform hints.
28+
[3] = "abs acos acosh all any asin asinh atan atanh bitCount bitfieldExtract bitfieldInsert bitfieldReverse ceil clamp cos cosh cross dFdx dFdxCoarse dFdxFine dFdy dFdyCoarse dFdyFine degrees determinant distance dot emit_subparticle equal exp exp2 faceforward findLSB findMSB floatBitsToInt floatBitsToUint floor fma fract frexp fwidth fwidthCoarse fwidthFine greaterThan greaterThanEqual imulExtended intBitsToFloat inverse inversesqrt isinf isnan ldexp length lessThan lessThanEqual log log2 matrixCompMult max min mix mod modf normalize not notEqual outerProduct packHalf2x16 packSnorm2x16 packSnorm4x8 packUnorm2x16 packUnorm4x8 pow radians reflect refract round roundEven screen_uv_to_sdf sdf_to_screen_uv sign sin sinh smoothstep sqrt step tan tanh texelFetch texture textureGather textureGrad textureLod textureProj textureProjGrad textureProjLod textureQueryLevels textureQueryLod textureSize texture_sdf texture_sdf_normal transpose trunc uaddCarry uintBitsToFloat umulExtended unpackHalf2x16 unpackSnorm2x16 unpackSnorm4x8 unpackUnorm2x16 unpackUnorm4x8 usubBorrow " ..
29+
"ACTIVE ALBEDO ALPHA ALPHA_ANTIALIASING_EDGE ALPHA_HASH_SCALE ALPHA_SCISSOR_THRESHOLD ALPHA_TEXTURE_COORDINATE AMOUNT_RATIO ANISOTROPY ANISOTROPY_FLOW AO AO_LIGHT_AFFECT AT_CUBEMAP_PASS AT_HALF_RES_PASS AT_LIGHT_PASS AT_QUARTER_RES_PASS ATTENUATION ATTRACTOR_FORCE BACKLIGHT BENT_NORMAL_MAP BINORMAL BONE_INDICES BONE_WEIGHTS CAMERA_DIRECTION_WORLD CAMERA_POSITION_WORLD CAMERA_VISIBLE_LAYERS CANVAS_MATRIX CLEARCOAT CLEARCOAT_GLOSS CLIP_SPACE_FAR COLLIDED COLLISION_DEPTH COLLISION_NORMAL COLOR CUSTOM CUSTOM0 CUSTOM1 CUSTOM2 CUSTOM3 DELTA DENSITY DEPTH DEPTH_TEXTURE DIFFUSE_LIGHT E EMISSION EMISSION_TRANSFORM EMITTER_VELOCITY EYEDIR EYE_OFFSET FLAG_EMIT_COLOR FLAG_EMIT_CUSTOM FLAG_EMIT_POSITION FLAG_EMIT_ROT_SCALE FLAG_EMIT_VELOCITY FOG FRAGCOORD FRONT_FACING HALF_RES_COLOR INDEX INSTANCE_CUSTOM INSTANCE_ID INTERPOLATE_TO_END INV_PROJECTION_MATRIX INV_VIEW_MATRIX IN_SHADOW_PASS IRRADIANCE IS_MULTIVIEW LIFETIME LIGHT LIGHT_COLOR LIGHT_DIRECTION LIGHT_ENERGY LIGHT_IS_DIRECTIONAL LIGHT_POSITION LIGHT_VERTEX LIGHT0_COLOR LIGHT0_DIRECTION LIGHT0_ENABLED LIGHT0_ENERGY LIGHT0_SIZE LIGHT1_COLOR LIGHT1_DIRECTION LIGHT1_ENABLED LIGHT1_ENERGY LIGHT1_SIZE LIGHT2_COLOR LIGHT2_DIRECTION LIGHT2_ENABLED LIGHT2_ENERGY LIGHT2_SIZE LIGHT3_COLOR LIGHT3_DIRECTION LIGHT3_ENABLED LIGHT3_ENERGY LIGHT3_SIZE MAIN_CAM_INV_VIEW_MATRIX MASS METALLIC MODELVIEW_MATRIX MODELVIEW_NORMAL_MATRIX MODEL_MATRIX MODEL_NORMAL_MATRIX NODE_POSITION_VIEW NODE_POSITION_WORLD NORMAL NORMAL_MAP NORMAL_MAP_DEPTH NORMAL_TEXTURE NUMBER OBJECT_POSITION OUTPUT_IS_SRGB PI POINT_COORD POINT_SIZE POSITION PREMUL_ALPHA_FACTOR PROJECTION_MATRIX QUARTER_RES_COLOR RADIANCE RANDOM_SEED REGION_RECT RESTART RESTART_COLOR RESTART_CUSTOM RESTART_POSITION RESTART_ROT_SCALE RESTART_VELOCITY RIM RIM_TINT ROUGHNESS SCREEN_MATRIX SCREEN_PIXEL_SIZE SCREEN_TEXTURE SCREEN_UV SDF SHADOW_MODULATE SHADOW_VERTEX SIZE SKY_COORDS SPECULAR SPECULAR_AMOUNT SPECULAR_LIGHT SPECULAR_SHININESS SPECULAR_SHININESS_TEXTURE SSS_STRENGTH SSS_TRANSMITTANCE_BOOST SSS_TRANSMITTANCE_COLOR SSS_TRANSMITTANCE_DEPTH TANGENT TAU TEXTURE TEXTURE_PIXEL_SIZE TIME TRANSFORM USERDATA1 USERDATA2 USERDATA3 USERDATA4 USERDATA5 USERDATA6 UV UV2 UVW VELOCITY VERTEX VERTEX_ID VIEW VIEWPORT_SIZE VIEW_INDEX VIEW_MATRIX VIEW_MONO_LEFT VIEW_RIGHT WORLD_POSITION Z_CLIP_SCALE CURRENT_RENDERER RENDERER_COMPATIBILITY RENDERER_FORWARD_PLUS RENDERER_MOBILE " ..
30+
"canvas_item fog particles sky spatial " ..
31+
"alpha_to_coverage alpha_to_coverage_and_one ambient_light_disabled blend_add blend_disabled blend_mix blend_mul blend_premul_alpha blend_sub collision_use_scale cull_back cull_disabled cull_front debug_shadow_splits depth_draw_always depth_draw_never depth_draw_opaque depth_prepass_alpha depth_test_default depth_test_disabled depth_test_inverted diffuse_burley diffuse_lambert diffuse_lambert_wrap diffuse_toon disable_fog disable_force disable_velocity ensure_correct_normals fog_disabled keep_data light_only particle_trails shadow_to_opacity shadows_disabled skip_vertex_transform specular_disabled specular_schlick_ggx specular_toon sss_mode_skin unshaded use_half_res_pass use_quarter_res_pass vertex_lighting wireframe world_vertex_coords " ..
32+
"compare_always compare_equal compare_greater compare_greater_or_equal compare_less compare_less_or_equal compare_not_equal write_if_depth_fail " ..
33+
"filter_linear filter_linear_mipmap filter_linear_mipmap_anisotropic filter_nearest filter_nearest_mipmap filter_nearest_mipmap_anisotropic hint_anisotropy hint_default_black hint_default_transparent hint_default_white hint_depth_texture hint_enum hint_normal hint_normal_roughness_texture hint_range hint_roughness_a hint_roughness_b hint_roughness_g hint_roughness_gray hint_roughness_normal hint_roughness_r hint_screen_texture instance_index repeat_disable repeat_enable source_color",
34+
[5] = "FIXME TODO XXX HACK NOTE",
35+
}
36+
37+
L.styles = {
38+
["PREPROCESSOR"] = {
39+
id = 9,
40+
fgColor = rgb(0x804000),
41+
bgColor = rgb(0xFFFFFF),
42+
},
43+
["DEFAULT"] = {
44+
id = 11,
45+
fgColor = rgb(0x000000),
46+
bgColor = rgb(0xFFFFFF),
47+
},
48+
["INSTRUCTION WORD"] = {
49+
id = 5,
50+
fgColor = rgb(0x0000FF),
51+
bgColor = rgb(0xFFFFFF),
52+
fontStyle = 1,
53+
},
54+
["TYPE WORD"] = {
55+
id = 16,
56+
fgColor = rgb(0x8000FF),
57+
bgColor = rgb(0xFFFFFF),
58+
},
59+
["BUILTINS"] = {
60+
id = 19,
61+
fgColor = rgb(0x880088),
62+
bgColor = rgb(0xFFFFFF),
63+
fontStyle = 1,
64+
},
65+
["NUMBER"] = {
66+
id = 4,
67+
fgColor = rgb(0xFF8000),
68+
bgColor = rgb(0xFFFFFF),
69+
},
70+
["STRING"] = {
71+
id = 6,
72+
fgColor = rgb(0x808080),
73+
bgColor = rgb(0xFFFFFF),
74+
},
75+
["CHARACTER"] = {
76+
id = 7,
77+
fgColor = rgb(0x808080),
78+
bgColor = rgb(0xFFFFFF),
79+
},
80+
["OPERATOR"] = {
81+
id = 10,
82+
fgColor = rgb(0x000080),
83+
bgColor = rgb(0xFFFFFF),
84+
fontStyle = 1,
85+
},
86+
["COMMENT"] = {
87+
id = 1,
88+
fgColor = rgb(0x008000),
89+
bgColor = rgb(0xFFFFFF),
90+
},
91+
["COMMENT LINE"] = {
92+
id = 2,
93+
fgColor = rgb(0x008000),
94+
bgColor = rgb(0xFFFFFF),
95+
},
96+
["COMMENT DOC"] = {
97+
id = 3,
98+
fgColor = rgb(0x008080),
99+
bgColor = rgb(0xFFFFFF),
100+
},
101+
["COMMENT LINE DOC"] = {
102+
id = 15,
103+
fgColor = rgb(0x008080),
104+
bgColor = rgb(0xFFFFFF),
105+
},
106+
["PREPROCESSOR COMMENT"] = {
107+
id = 23,
108+
fgColor = rgb(0x008000),
109+
bgColor = rgb(0xFFFFFF),
110+
},
111+
["PREPROCESSOR COMMENT DOC"] = {
112+
id = 24,
113+
fgColor = rgb(0x008080),
114+
bgColor = rgb(0xFFFFFF),
115+
},
116+
["TASK MARKER"] = {
117+
id = 26,
118+
fgColor = rgb(0x008000),
119+
bgColor = rgb(0xFFFFFF),
120+
fontStyle = 1,
121+
},
122+
}
123+
return L

‎src/languages/glsl.lua‎

Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
local L = {}
2+
3+
-- GLSL (OpenGL / Vulkan dialect), as used by Godot compute shaders
4+
-- (RDShaderFile, with #[compute] section markers) and glslang's stage
5+
-- extensions. Layout qualifiers that are also common variable names
6+
-- (offset, index, set, location, component, align) are left out so they
7+
-- never highlight user identifiers.
8+
L.lexer = "cpp"
9+
10+
L.singleLineComment = "// "
11+
12+
L.tabSize = 4
13+
14+
L.first_line = {
15+
"^#version%s+%d+",
16+
"^#%[compute%]",
17+
}
18+
19+
L.extensions = {
20+
"glsl",
21+
"vert",
22+
"frag",
23+
"geom",
24+
"comp",
25+
"tesc",
26+
"tese",
27+
}
28+
29+
L.properties = {
30+
["fold.cpp.comment.explicit"] = "0",
31+
["lexer.cpp.track.preprocessor"] = "0",
32+
}
33+
34+
L.keywords = {
35+
-- Declarations, qualifiers, flow control.
36+
[0] = "attribute break buffer case centroid coherent const continue default discard do else false flat for highp if in inout invariant layout lowp mediump noperspective out patch precise precision readonly restrict return sample shared smooth struct subroutine switch true uniform varying volatile while writeonly",
37+
-- Data types.
38+
[1] = "atomic_uint bool bvec2 bvec3 bvec4 double dmat2 dmat2x2 dmat2x3 dmat2x4 dmat3 dmat3x2 dmat3x3 dmat3x4 dmat4 dmat4x2 dmat4x3 dmat4x4 dvec2 dvec3 dvec4 float int ivec2 ivec3 ivec4 mat2 mat2x2 mat2x3 mat2x4 mat3 mat3x2 mat3x3 mat3x4 mat4 mat4x2 mat4x3 mat4x4 uint uvec2 uvec3 uvec4 vec2 vec3 vec4 void " ..
39+
"sampler sampler1D sampler1DArray sampler1DArrayShadow sampler1DShadow sampler2D sampler2DArray sampler2DArrayShadow sampler2DMS sampler2DMSArray sampler2DRect sampler2DRectShadow sampler2DShadow sampler3D samplerBuffer samplerCube samplerCubeArray samplerCubeArrayShadow samplerCubeShadow samplerShadow " ..
40+
"isampler1D isampler1DArray isampler2D isampler2DArray isampler2DMS isampler2DMSArray isampler2DRect isampler3D isamplerBuffer isamplerCube isamplerCubeArray usampler1D usampler1DArray usampler2D usampler2DArray usampler2DMS usampler2DMSArray usampler2DRect usampler3D usamplerBuffer usamplerCube usamplerCubeArray " ..
41+
"image1D image1DArray image2D image2DArray image2DMS image2DMSArray image2DRect image3D imageBuffer imageCube imageCubeArray iimage1D iimage1DArray iimage2D iimage2DArray iimage2DMS iimage2DMSArray iimage2DRect iimage3D iimageBuffer iimageCube iimageCubeArray uimage1D uimage1DArray uimage2D uimage2DArray uimage2DMS uimage2DMSArray uimage2DRect uimage3D uimageBuffer uimageCube uimageCubeArray " ..
42+
"texture1D texture1DArray texture2D texture2DArray texture2DMS texture2DMSArray texture3D textureBuffer textureCube textureCubeArray subpassInput subpassInputMS isubpassInput isubpassInputMS usubpassInput usubpassInputMS",
43+
-- Built-in functions and variables, layout qualifiers, image formats.
44+
[3] = "EmitStreamVertex EmitVertex EndPrimitive EndStreamPrimitive abs acos acosh all any asin asinh atan atanh atomicAdd atomicAnd atomicCompSwap atomicCounter atomicCounterDecrement atomicCounterIncrement atomicExchange atomicMax atomicMin atomicOr atomicXor barrier bitCount bitfieldExtract bitfieldInsert bitfieldReverse ceil clamp cos cosh cross dFdx dFdxCoarse dFdxFine dFdy dFdyCoarse dFdyFine degrees determinant distance dot equal exp exp2 faceforward findLSB findMSB floatBitsToInt floatBitsToUint floor fma fract frexp fwidth fwidthCoarse fwidthFine greaterThan greaterThanEqual groupMemoryBarrier imageAtomicAdd imageAtomicAnd imageAtomicCompSwap imageAtomicExchange imageAtomicMax imageAtomicMin imageAtomicOr imageAtomicXor imageLoad imageSamples imageSize imageStore imulExtended intBitsToFloat interpolateAtCentroid interpolateAtOffset interpolateAtSample inverse inversesqrt isinf isnan ldexp length lessThan lessThanEqual log log2 matrixCompMult max memoryBarrier memoryBarrierAtomicCounter memoryBarrierBuffer memoryBarrierImage memoryBarrierShared min mix mod modf normalize not notEqual outerProduct packDouble2x32 packHalf2x16 packSnorm2x16 packSnorm4x8 packUnorm2x16 packUnorm4x8 pow radians reflect refract round roundEven sign sin sinh smoothstep sqrt step subpassLoad tan tanh texelFetch texelFetchOffset texture textureGather textureGatherOffset textureGatherOffsets textureGrad textureGradOffset textureLod textureLodOffset textureOffset textureProj textureProjGrad textureProjGradOffset textureProjLod textureProjLodOffset textureProjOffset textureQueryLevels textureQueryLod textureSamples textureSize transpose trunc uaddCarry uintBitsToFloat umulExtended unpackDouble2x32 unpackHalf2x16 unpackSnorm2x16 unpackSnorm4x8 unpackUnorm2x16 unpackUnorm4x8 usubBorrow " ..
45+
"gl_BaseInstance gl_BaseVertex gl_ClipDistance gl_CullDistance gl_DrawID gl_FragColor gl_FragCoord gl_FragData gl_FragDepth gl_FrontFacing gl_GlobalInvocationID gl_HelperInvocation gl_InstanceID gl_InstanceIndex gl_InvocationID gl_Layer gl_LocalInvocationID gl_LocalInvocationIndex gl_NumSubgroups gl_NumWorkGroups gl_PatchVerticesIn gl_PerVertex gl_PointCoord gl_PointSize gl_Position gl_PrimitiveID gl_PrimitiveIDIn gl_SampleID gl_SampleMask gl_SampleMaskIn gl_SamplePosition gl_SubgroupID gl_SubgroupInvocationID gl_SubgroupSize gl_TessCoord gl_TessLevelInner gl_TessLevelOuter gl_VertexID gl_VertexIndex gl_ViewIndex gl_ViewportIndex gl_WorkGroupID gl_WorkGroupSize gl_in gl_out " ..
46+
"binding column_major constant_id early_fragment_tests equal_spacing fractional_even_spacing fractional_odd_spacing input_attachment_index isolines line_strip lines_adjacency local_size_x local_size_x_id local_size_y local_size_y_id local_size_z local_size_z_id max_vertices origin_upper_left pixel_center_integer point_mode push_constant row_major std140 std430 triangle_strip triangles_adjacency " ..
47+
"r11f_g11f_b10f r16 r16_snorm r16f r16i r16ui r32f r32i r32ui r8 r8_snorm r8i r8ui rg16 rg16_snorm rg16f rg16i rg16ui rg32f rg32i rg32ui rg8 rg8_snorm rg8i rg8ui rgb10_a2 rgb10_a2ui rgba16 rgba16_snorm rgba16f rgba16i rgba16ui rgba32f rgba32i rgba32ui rgba8 rgba8_snorm rgba8i rgba8ui",
48+
[5] = "FIXME TODO XXX HACK NOTE",
49+
}
50+
51+
L.styles = {
52+
["PREPROCESSOR"] = {
53+
id = 9,
54+
fgColor = rgb(0x804000),
55+
bgColor = rgb(0xFFFFFF),
56+
},
57+
["DEFAULT"] = {
58+
id = 11,
59+
fgColor = rgb(0x000000),
60+
bgColor = rgb(0xFFFFFF),
61+
},
62+
["INSTRUCTION WORD"] = {
63+
id = 5,
64+
fgColor = rgb(0x0000FF),
65+
bgColor = rgb(0xFFFFFF),
66+
fontStyle = 1,
67+
},
68+
["TYPE WORD"] = {
69+
id = 16,
70+
fgColor = rgb(0x8000FF),
71+
bgColor = rgb(0xFFFFFF),
72+
},
73+
["BUILTINS"] = {
74+
id = 19,
75+
fgColor = rgb(0x880088),
76+
bgColor = rgb(0xFFFFFF),
77+
fontStyle = 1,
78+
},
79+
["NUMBER"] = {
80+
id = 4,
81+
fgColor = rgb(0xFF8000),
82+
bgColor = rgb(0xFFFFFF),
83+
},
84+
["STRING"] = {
85+
id = 6,
86+
fgColor = rgb(0x808080),
87+
bgColor = rgb(0xFFFFFF),
88+
},
89+
["CHARACTER"] = {
90+
id = 7,
91+
fgColor = rgb(0x808080),
92+
bgColor = rgb(0xFFFFFF),
93+
},
94+
["OPERATOR"] = {
95+
id = 10,
96+
fgColor = rgb(0x000080),
97+
bgColor = rgb(0xFFFFFF),
98+
fontStyle = 1,
99+
},
100+
["COMMENT"] = {
101+
id = 1,
102+
fgColor = rgb(0x008000),
103+
bgColor = rgb(0xFFFFFF),
104+
},
105+
["COMMENT LINE"] = {
106+
id = 2,
107+
fgColor = rgb(0x008000),
108+
bgColor = rgb(0xFFFFFF),
109+
},
110+
["COMMENT DOC"] = {
111+
id = 3,
112+
fgColor = rgb(0x008080),
113+
bgColor = rgb(0xFFFFFF),
114+
},
115+
["COMMENT LINE DOC"] = {
116+
id = 15,
117+
fgColor = rgb(0x008080),
118+
bgColor = rgb(0xFFFFFF),
119+
},
120+
["PREPROCESSOR COMMENT"] = {
121+
id = 23,
122+
fgColor = rgb(0x008000),
123+
bgColor = rgb(0xFFFFFF),
124+
},
125+
["PREPROCESSOR COMMENT DOC"] = {
126+
id = 24,
127+
fgColor = rgb(0x008080),
128+
bgColor = rgb(0xFFFFFF),
129+
},
130+
["TASK MARKER"] = {
131+
id = 26,
132+
fgColor = rgb(0x008000),
133+
bgColor = rgb(0xFFFFFF),
134+
fontStyle = 1,
135+
},
136+
}
137+
return L

‎src/languages/godotresource.lua‎

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
local L = {}
2+
3+
-- Godot's text resource and ConfigFile formats: [section attr="..."] headers,
4+
-- key = value lines, ';' comments. LexProps styles the whole key up to '=',
5+
-- which keeps slash paths (display/window/size/viewport_width) in one piece;
6+
-- LexTOML would split them at every '/'.
7+
L.lexer = "props"
8+
9+
L.singleLineComment = "; "
10+
11+
L.extensions = {
12+
"tscn",
13+
"tres",
14+
"escn",
15+
"godot",
16+
"import",
17+
"gdextension",
18+
"remap",
19+
"gdnlib",
20+
"gdns",
21+
}
22+
23+
L.filenames = {
24+
"export_presets.cfg",
25+
"override.cfg",
26+
}
27+
28+
L.keywords = {
29+
}
30+
31+
L.styles = {
32+
["DEFAULT"] = {
33+
id = 0,
34+
fgColor = rgb(0x000000),
35+
bgColor = rgb(0xFFFFFF),
36+
},
37+
["COMMENT"] = {
38+
id = 1,
39+
fgColor = rgb(0x008000),
40+
bgColor = rgb(0xFFFFFF),
41+
},
42+
["SECTION"] = {
43+
id = 2,
44+
fgColor = rgb(0x8000FF),
45+
bgColor = rgb(0xF2F4FF),
46+
fontStyle = 9,
47+
},
48+
["ASSIGNMENT"] = {
49+
id = 3,
50+
fgColor = rgb(0xFF0000),
51+
bgColor = rgb(0xFFFFFF),
52+
fontStyle = 1,
53+
},
54+
["DEFVAL"] = {
55+
id = 4,
56+
fgColor = rgb(0xFF0000),
57+
bgColor = rgb(0xFFFFFF),
58+
},
59+
["KEY"] = {
60+
id = 5,
61+
fgColor = rgb(0x0000FF),
62+
bgColor = rgb(0xFFFFFF),
63+
},
64+
}
65+
return L

0 commit comments

Comments
 (0)