Config magic
This commit is contained in:
@@ -180,9 +180,102 @@ int CompileNewPlatform() {
|
||||
return result;
|
||||
}
|
||||
|
||||
char *ToColor(const char *value) {
|
||||
S8_String f = Fmt("{0x%.*s, 0x%.*s, 0x%.*s, 0x%.*s}", 2, value + 2, 2, value + 4, 2, value + 6, 2, value + 8);
|
||||
return f.str;
|
||||
}
|
||||
|
||||
void GenerateConfig() {
|
||||
struct Color {
|
||||
const char *name;
|
||||
const char *value;
|
||||
};
|
||||
|
||||
// clang-format off
|
||||
Array<Color> gruvbox = {};
|
||||
gruvbox.add({"GruvboxDark0Hard" , "0x1d2021ff"});
|
||||
gruvbox.add({"GruvboxDark0" , "0x282828ff"});
|
||||
gruvbox.add({"GruvboxDark0Soft" , "0x32302fff"});
|
||||
gruvbox.add({"GruvboxDark1" , "0x3c3836ff"});
|
||||
gruvbox.add({"GruvboxDark2" , "0x504945ff"});
|
||||
gruvbox.add({"GruvboxDark3" , "0x665c54ff"});
|
||||
gruvbox.add({"GruvboxDark4" , "0x7c6f64ff"});
|
||||
gruvbox.add({"GruvboxGray245" , "0x928374ff"});
|
||||
gruvbox.add({"GruvboxGray244" , "0x928374ff"});
|
||||
gruvbox.add({"GruvboxLight0Hard" , "0xf9f5d7ff"});
|
||||
gruvbox.add({"GruvboxLight0" , "0xfbf1c7ff"});
|
||||
gruvbox.add({"GruvboxLight0Soft" , "0xf2e5bcff"});
|
||||
gruvbox.add({"GruvboxLight1" , "0xebdbb2ff"});
|
||||
gruvbox.add({"GruvboxLight2" , "0xd5c4a1ff"});
|
||||
gruvbox.add({"GruvboxLight3" , "0xbdae93ff"});
|
||||
gruvbox.add({"GruvboxLight4" , "0xa89984ff"});
|
||||
gruvbox.add({"GruvboxBrightRed" , "0xfb4934ff"});
|
||||
gruvbox.add({"GruvboxBrightGreen" , "0xb8bb26ff"});
|
||||
gruvbox.add({"GruvboxBrightYellow" , "0xfabd2fff"});
|
||||
gruvbox.add({"GruvboxBrightBlue" , "0x83a598ff"});
|
||||
gruvbox.add({"GruvboxBrightPurple" , "0xd3869bff"});
|
||||
gruvbox.add({"GruvboxBrightAqua" , "0x8ec07cff"});
|
||||
gruvbox.add({"GruvboxBrightOrange" , "0xfe8019ff"});
|
||||
gruvbox.add({"GruvboxNeutralRed" , "0xcc241dff"});
|
||||
gruvbox.add({"GruvboxNeutralGreen" , "0x98971aff"});
|
||||
gruvbox.add({"GruvboxNeutralYellow", "0xd79921ff"});
|
||||
gruvbox.add({"GruvboxNeutralBlue" , "0x458588ff"});
|
||||
gruvbox.add({"GruvboxNeutralPurple", "0xb16286ff"});
|
||||
gruvbox.add({"GruvboxNeutralAqua" , "0x689d6aff"});
|
||||
gruvbox.add({"GruvboxNeutralOrange", "0xd65d0eff"});
|
||||
gruvbox.add({"GruvboxFadedRed" , "0x9d0006ff"});
|
||||
gruvbox.add({"GruvboxFadedGreen" , "0x79740eff"});
|
||||
gruvbox.add({"GruvboxFadedYellow" , "0xb57614ff"});
|
||||
gruvbox.add({"GruvboxFadedBlue" , "0x076678ff"});
|
||||
gruvbox.add({"GruvboxFadedPurple" , "0x8f3f71ff"});
|
||||
gruvbox.add({"GruvboxFadedAqua" , "0x427b58ff"});
|
||||
gruvbox.add({"GruvboxFadedOrange" , "0xaf3a03ff"});
|
||||
|
||||
Array<Color> colors = {};
|
||||
colors.add({"Text" , "GruvboxDark0Hard"});
|
||||
colors.add({"Background" , "GruvboxLight0Hard"});
|
||||
colors.add({"TextLineNumbers" , "GruvboxDark4"});
|
||||
colors.add({"ScrollbarBackground" , "GruvboxLight2"});
|
||||
colors.add({"ScrollbarScroller" , "GruvboxLight1"});
|
||||
colors.add({"ScrollbarScrollerSelected", "GruvboxLight0Hard"});
|
||||
colors.add({"LineHighlight" , "GruvboxLight1"});
|
||||
colors.add({"MainCaret" , "GruvboxDark0Hard"});
|
||||
colors.add({"SubCaret" , "GruvboxGray245"});
|
||||
colors.add({"Selection" , "GruvboxLight1"});
|
||||
colors.add({"WhitespaceDuringSelection", "GruvboxLight2"});
|
||||
// clang-format on
|
||||
|
||||
{
|
||||
MA_Scratch scratch;
|
||||
Array<S8_String> sb = {MA_GetAllocator(scratch)};
|
||||
{
|
||||
For(gruvbox) sb.add(Fmt("Color %s = %s;", it.name, ToColor(it.value)));
|
||||
For(colors) sb.add(Fmt("Color Color%s = %s;", it.name, it.value));
|
||||
}
|
||||
sb.add("String BaseLuaConfig = R\"==(");
|
||||
{
|
||||
For(gruvbox) sb.add(Fmt("local %s = %s", it.name, it.value));
|
||||
sb.add("Color = {}");
|
||||
For(colors) sb.add(Fmt("Color.%s = %s", it.name, it.value));
|
||||
}
|
||||
sb.add(")==\";");
|
||||
|
||||
sb.add("void ReloadColors() {");
|
||||
{
|
||||
For(colors) sb.add(Fmt(" Color%s = GetColor(\"%s\", Color%s);", it.name, it.name, it.name));
|
||||
}
|
||||
sb.add("}");
|
||||
|
||||
S8_String string = Merge(scratch, sb, "\n");
|
||||
OS_WriteFile("../src/text_editor/generated.cpp", string);
|
||||
}
|
||||
}
|
||||
|
||||
int main() {
|
||||
MA_InitScratch();
|
||||
SRC_InitCache(Perm, "te.cache");
|
||||
|
||||
GenerateConfig();
|
||||
int result = CompileTextEditor();
|
||||
// int result = CompileNewPlatform();
|
||||
|
||||
|
||||
@@ -47,4 +47,60 @@ Color ColorLineHighlight = GruvboxLight1;
|
||||
Color ColorMainCaret = GruvboxDark0Hard;
|
||||
Color ColorSubCaret = GruvboxGray245;
|
||||
Color ColorSelection = GruvboxLight1;
|
||||
Color ColorWhitespaceDuringSelection = GruvboxLight2;
|
||||
Color ColorWhitespaceDuringSelection = GruvboxLight2;
|
||||
|
||||
String BaseLuaConfig = R"==(
|
||||
|
||||
local GruvboxDark0Hard = 0x1d2021ff
|
||||
local GruvboxDark0 = 0x282828ff
|
||||
local GruvboxDark0Soft = 0x32302fff
|
||||
local GruvboxDark1 = 0x3c3836ff
|
||||
local GruvboxDark2 = 0x504945ff
|
||||
local GruvboxDark3 = 0x665c54ff
|
||||
local GruvboxDark4 = 0x7c6f64ff
|
||||
local GruvboxGray245 = 0x928374ff
|
||||
local GruvboxGray244 = 0x928374ff
|
||||
local GruvboxLight0Hard = 0xf9f5d7ff
|
||||
local GruvboxLight0 = 0xfbf1c7ff
|
||||
local GruvboxLight0Soft = 0xf2e5bcff
|
||||
local GruvboxLight1 = 0xebdbb2ff
|
||||
local GruvboxLight2 = 0xd5c4a1ff
|
||||
local GruvboxLight3 = 0xbdae93ff
|
||||
local GruvboxLight4 = 0xa89984ff
|
||||
local GruvboxBrightRed = 0xfb4934ff
|
||||
local GruvboxBrightGreen = 0xb8bb26ff
|
||||
local GruvboxBrightYellow = 0xfabd2fff
|
||||
local GruvboxBrightBlue = 0x83a598ff
|
||||
local GruvboxBrightPurple = 0xd3869bff
|
||||
local GruvboxBrightAqua = 0x8ec07cff
|
||||
local GruvboxBrightOrange = 0xfe8019ff
|
||||
local GruvboxNeutralRed = 0xcc241dff
|
||||
local GruvboxNeutralGreen = 0x98971aff
|
||||
local GruvboxNeutralYellow = 0xd79921ff
|
||||
local GruvboxNeutralBlue = 0x458588ff
|
||||
local GruvboxNeutralPurple = 0xb16286ff
|
||||
local GruvboxNeutralAqua = 0x689d6aff
|
||||
local GruvboxNeutralOrange = 0xd65d0eff
|
||||
local GruvboxFadedRed = 0x9d0006ff
|
||||
local GruvboxFadedGreen = 0x79740eff
|
||||
local GruvboxFadedYellow = 0xb57614ff
|
||||
local GruvboxFadedBlue = 0x076678ff
|
||||
local GruvboxFadedPurple = 0x8f3f71ff
|
||||
local GruvboxFadedAqua = 0x427b58ff
|
||||
local GruvboxFadedOrange = 0xaf3a03ff
|
||||
|
||||
Color = {}
|
||||
|
||||
Color.Text = GruvboxDark0Hard
|
||||
Color.Background = GruvboxLight0Hard
|
||||
Color.TextLineNumbers = GruvboxDark4
|
||||
Color.ScrollbarBackground = GruvboxLight2
|
||||
Color.ScrollbarScroller = GruvboxLight1
|
||||
Color.ScrollbarScrollerSelected = GruvboxLight0Hard
|
||||
Color.LineHighlight = GruvboxLight1
|
||||
Color.MainCaret = GruvboxDark0Hard
|
||||
Color.SubCaret = GruvboxGray245
|
||||
Color.Selection = GruvboxLight1
|
||||
Color.WhitespaceDuringSelection = GruvboxLight2
|
||||
|
||||
)==";
|
||||
112
src/text_editor/generated.cpp
Normal file
112
src/text_editor/generated.cpp
Normal file
@@ -0,0 +1,112 @@
|
||||
Color GruvboxDark0Hard = {0x1d, 0x20, 0x21, 0xff};
|
||||
Color GruvboxDark0 = {0x28, 0x28, 0x28, 0xff};
|
||||
Color GruvboxDark0Soft = {0x32, 0x30, 0x2f, 0xff};
|
||||
Color GruvboxDark1 = {0x3c, 0x38, 0x36, 0xff};
|
||||
Color GruvboxDark2 = {0x50, 0x49, 0x45, 0xff};
|
||||
Color GruvboxDark3 = {0x66, 0x5c, 0x54, 0xff};
|
||||
Color GruvboxDark4 = {0x7c, 0x6f, 0x64, 0xff};
|
||||
Color GruvboxGray245 = {0x92, 0x83, 0x74, 0xff};
|
||||
Color GruvboxGray244 = {0x92, 0x83, 0x74, 0xff};
|
||||
Color GruvboxLight0Hard = {0xf9, 0xf5, 0xd7, 0xff};
|
||||
Color GruvboxLight0 = {0xfb, 0xf1, 0xc7, 0xff};
|
||||
Color GruvboxLight0Soft = {0xf2, 0xe5, 0xbc, 0xff};
|
||||
Color GruvboxLight1 = {0xeb, 0xdb, 0xb2, 0xff};
|
||||
Color GruvboxLight2 = {0xd5, 0xc4, 0xa1, 0xff};
|
||||
Color GruvboxLight3 = {0xbd, 0xae, 0x93, 0xff};
|
||||
Color GruvboxLight4 = {0xa8, 0x99, 0x84, 0xff};
|
||||
Color GruvboxBrightRed = {0xfb, 0x49, 0x34, 0xff};
|
||||
Color GruvboxBrightGreen = {0xb8, 0xbb, 0x26, 0xff};
|
||||
Color GruvboxBrightYellow = {0xfa, 0xbd, 0x2f, 0xff};
|
||||
Color GruvboxBrightBlue = {0x83, 0xa5, 0x98, 0xff};
|
||||
Color GruvboxBrightPurple = {0xd3, 0x86, 0x9b, 0xff};
|
||||
Color GruvboxBrightAqua = {0x8e, 0xc0, 0x7c, 0xff};
|
||||
Color GruvboxBrightOrange = {0xfe, 0x80, 0x19, 0xff};
|
||||
Color GruvboxNeutralRed = {0xcc, 0x24, 0x1d, 0xff};
|
||||
Color GruvboxNeutralGreen = {0x98, 0x97, 0x1a, 0xff};
|
||||
Color GruvboxNeutralYellow = {0xd7, 0x99, 0x21, 0xff};
|
||||
Color GruvboxNeutralBlue = {0x45, 0x85, 0x88, 0xff};
|
||||
Color GruvboxNeutralPurple = {0xb1, 0x62, 0x86, 0xff};
|
||||
Color GruvboxNeutralAqua = {0x68, 0x9d, 0x6a, 0xff};
|
||||
Color GruvboxNeutralOrange = {0xd6, 0x5d, 0x0e, 0xff};
|
||||
Color GruvboxFadedRed = {0x9d, 0x00, 0x06, 0xff};
|
||||
Color GruvboxFadedGreen = {0x79, 0x74, 0x0e, 0xff};
|
||||
Color GruvboxFadedYellow = {0xb5, 0x76, 0x14, 0xff};
|
||||
Color GruvboxFadedBlue = {0x07, 0x66, 0x78, 0xff};
|
||||
Color GruvboxFadedPurple = {0x8f, 0x3f, 0x71, 0xff};
|
||||
Color GruvboxFadedAqua = {0x42, 0x7b, 0x58, 0xff};
|
||||
Color GruvboxFadedOrange = {0xaf, 0x3a, 0x03, 0xff};
|
||||
Color ColorText = GruvboxDark0Hard;
|
||||
Color ColorBackground = GruvboxLight0Hard;
|
||||
Color ColorTextLineNumbers = GruvboxDark4;
|
||||
Color ColorScrollbarBackground = GruvboxLight2;
|
||||
Color ColorScrollbarScroller = GruvboxLight1;
|
||||
Color ColorScrollbarScrollerSelected = GruvboxLight0Hard;
|
||||
Color ColorLineHighlight = GruvboxLight1;
|
||||
Color ColorMainCaret = GruvboxDark0Hard;
|
||||
Color ColorSubCaret = GruvboxGray245;
|
||||
Color ColorSelection = GruvboxLight1;
|
||||
Color ColorWhitespaceDuringSelection = GruvboxLight2;
|
||||
String BaseLuaConfig = R"==(
|
||||
local GruvboxDark0Hard = 0x1d2021ff
|
||||
local GruvboxDark0 = 0x282828ff
|
||||
local GruvboxDark0Soft = 0x32302fff
|
||||
local GruvboxDark1 = 0x3c3836ff
|
||||
local GruvboxDark2 = 0x504945ff
|
||||
local GruvboxDark3 = 0x665c54ff
|
||||
local GruvboxDark4 = 0x7c6f64ff
|
||||
local GruvboxGray245 = 0x928374ff
|
||||
local GruvboxGray244 = 0x928374ff
|
||||
local GruvboxLight0Hard = 0xf9f5d7ff
|
||||
local GruvboxLight0 = 0xfbf1c7ff
|
||||
local GruvboxLight0Soft = 0xf2e5bcff
|
||||
local GruvboxLight1 = 0xebdbb2ff
|
||||
local GruvboxLight2 = 0xd5c4a1ff
|
||||
local GruvboxLight3 = 0xbdae93ff
|
||||
local GruvboxLight4 = 0xa89984ff
|
||||
local GruvboxBrightRed = 0xfb4934ff
|
||||
local GruvboxBrightGreen = 0xb8bb26ff
|
||||
local GruvboxBrightYellow = 0xfabd2fff
|
||||
local GruvboxBrightBlue = 0x83a598ff
|
||||
local GruvboxBrightPurple = 0xd3869bff
|
||||
local GruvboxBrightAqua = 0x8ec07cff
|
||||
local GruvboxBrightOrange = 0xfe8019ff
|
||||
local GruvboxNeutralRed = 0xcc241dff
|
||||
local GruvboxNeutralGreen = 0x98971aff
|
||||
local GruvboxNeutralYellow = 0xd79921ff
|
||||
local GruvboxNeutralBlue = 0x458588ff
|
||||
local GruvboxNeutralPurple = 0xb16286ff
|
||||
local GruvboxNeutralAqua = 0x689d6aff
|
||||
local GruvboxNeutralOrange = 0xd65d0eff
|
||||
local GruvboxFadedRed = 0x9d0006ff
|
||||
local GruvboxFadedGreen = 0x79740eff
|
||||
local GruvboxFadedYellow = 0xb57614ff
|
||||
local GruvboxFadedBlue = 0x076678ff
|
||||
local GruvboxFadedPurple = 0x8f3f71ff
|
||||
local GruvboxFadedAqua = 0x427b58ff
|
||||
local GruvboxFadedOrange = 0xaf3a03ff
|
||||
Color = {}
|
||||
Color.Text = GruvboxDark0Hard
|
||||
Color.Background = GruvboxLight0Hard
|
||||
Color.TextLineNumbers = GruvboxDark4
|
||||
Color.ScrollbarBackground = GruvboxLight2
|
||||
Color.ScrollbarScroller = GruvboxLight1
|
||||
Color.ScrollbarScrollerSelected = GruvboxLight0Hard
|
||||
Color.LineHighlight = GruvboxLight1
|
||||
Color.MainCaret = GruvboxDark0Hard
|
||||
Color.SubCaret = GruvboxGray245
|
||||
Color.Selection = GruvboxLight1
|
||||
Color.WhitespaceDuringSelection = GruvboxLight2
|
||||
)==";
|
||||
void ReloadColors() {
|
||||
ColorText = GetColor("Text", ColorText);
|
||||
ColorBackground = GetColor("Background", ColorBackground);
|
||||
ColorTextLineNumbers = GetColor("TextLineNumbers", ColorTextLineNumbers);
|
||||
ColorScrollbarBackground = GetColor("ScrollbarBackground", ColorScrollbarBackground);
|
||||
ColorScrollbarScroller = GetColor("ScrollbarScroller", ColorScrollbarScroller);
|
||||
ColorScrollbarScrollerSelected = GetColor("ScrollbarScrollerSelected", ColorScrollbarScrollerSelected);
|
||||
ColorLineHighlight = GetColor("LineHighlight", ColorLineHighlight);
|
||||
ColorMainCaret = GetColor("MainCaret", ColorMainCaret);
|
||||
ColorSubCaret = GetColor("SubCaret", ColorSubCaret);
|
||||
ColorSelection = GetColor("Selection", ColorSelection);
|
||||
ColorWhitespaceDuringSelection = GetColor("WhitespaceDuringSelection", ColorWhitespaceDuringSelection);
|
||||
}
|
||||
@@ -137,8 +137,8 @@ String16 EvalString(Allocator allocator, String16 string16) {
|
||||
}
|
||||
}
|
||||
|
||||
Color GetColor(String name) {
|
||||
Color result = {0xFF, 0, 0xFF, 0xFF};
|
||||
Color GetColor(String name, Color default_color) {
|
||||
Color result = default_color;
|
||||
lua_getglobal(LuaState, "Color");
|
||||
defer { lua_pop(LuaState, 1); };
|
||||
if (lua_istable(LuaState, -1)) {
|
||||
|
||||
@@ -32,8 +32,7 @@
|
||||
|
||||
#include "lua.hpp"
|
||||
#include "lua_api.cpp"
|
||||
|
||||
#include "colors.cpp"
|
||||
#include "generated.cpp"
|
||||
#include "window_draw.cpp"
|
||||
|
||||
void HandleEvent(Event event) {
|
||||
@@ -219,19 +218,30 @@ int main()
|
||||
ReloadFont(16);
|
||||
InitLua();
|
||||
|
||||
Buffer *lua_buffer = NULL;
|
||||
Int lua_buffer_change_id = 0;
|
||||
{
|
||||
Allocator sys_allocator = GetSystemAllocator();
|
||||
Buffer *buffer = CreateBuffer(sys_allocator, "*scratch*");
|
||||
View *view = CreateView(buffer->id);
|
||||
}
|
||||
|
||||
Buffer *lua_buffer = NULL;
|
||||
Int lua_buffer_change_id = 0;
|
||||
{
|
||||
|
||||
// Init base config
|
||||
if (luaL_dostring(LuaState, BaseLuaConfig.data) == LUA_OK) {
|
||||
} else {
|
||||
Assert(0);
|
||||
}
|
||||
|
||||
// Init user config
|
||||
Scratch scratch;
|
||||
String lua_config_path = Format(scratch, "%.*s/init.lua", FmtString(ExeDir));
|
||||
lua_buffer = BufferOpenFile(lua_config_path);
|
||||
String16 string16 = GetString(*lua_buffer);
|
||||
String string = ToString(scratch, string16);
|
||||
if (luaL_dostring(LuaState, string.data) == LUA_OK) {
|
||||
ReloadColors();
|
||||
} else {
|
||||
__debugbreak();
|
||||
}
|
||||
@@ -287,6 +297,7 @@ int main()
|
||||
String16 string16 = GetString(*lua_buffer);
|
||||
String string = ToString(scratch, string16);
|
||||
if (luaL_dostring(LuaState, string.data) == LUA_OK) {
|
||||
ReloadColors();
|
||||
} else {
|
||||
}
|
||||
lua_buffer_change_id = lua_buffer->change_id;
|
||||
|
||||
@@ -7,7 +7,8 @@
|
||||
- file dock on left side
|
||||
- We can actually combine this with command window and lua, it's just going to be a buffer of
|
||||
- open "asd/asd/asd/asd"
|
||||
|
||||
- console buffer with output and errors
|
||||
- some popup for errors
|
||||
- word completion
|
||||
- Colored strings
|
||||
|
||||
|
||||
@@ -40,7 +40,7 @@ Scroller ComputeScrollerRect(Window *window) {
|
||||
|
||||
void DrawVisibleText(Window *window) {
|
||||
ProfileFunction();
|
||||
Color tint = GetColor("Text");
|
||||
Color tint = ColorText;
|
||||
View *view = GetActiveView(window);
|
||||
Buffer *buffer = GetBuffer(view->active_buffer);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user