Load JSON files at compile time as C Strings
This commit is contained in:
parent
5639d33bb0
commit
61adc35bb0
12
Makefile
12
Makefile
@ -4,6 +4,8 @@ SOURCES = $(wildcard include/**/*.cpp src/network/*.cpp src/settings/*.cpp inclu
|
|||||||
OBJECTS = $(patsubst %.cpp,%.o, $(SOURCES))
|
OBJECTS = $(patsubst %.cpp,%.o, $(SOURCES))
|
||||||
TARGET = build/Tyro.a
|
TARGET = build/Tyro.a
|
||||||
|
|
||||||
|
JSON_FILES = $(patsubst config/%.json,%.json, $(wildcard config/*.json))
|
||||||
|
|
||||||
PROGRAM_SRC = $(wildcard src/*.cpp src/widgets/*.cpp)
|
PROGRAM_SRC = $(wildcard src/*.cpp src/widgets/*.cpp)
|
||||||
PROGRAM = build/Tyro
|
PROGRAM = build/Tyro
|
||||||
PROGRAM_OBJECTS = $(patsubst %.cpp,%.o, $(PROGRAM_SRC))
|
PROGRAM_OBJECTS = $(patsubst %.cpp,%.o, $(PROGRAM_SRC))
|
||||||
@ -17,11 +19,17 @@ CXXFLAGS = -Os
|
|||||||
TEST_SRC= $(wildcard tests/*.cpp)
|
TEST_SRC= $(wildcard tests/*.cpp)
|
||||||
TESTS = $(patsubst %.cpp,%,$(TEST_SRC))
|
TESTS = $(patsubst %.cpp,%,$(TEST_SRC))
|
||||||
|
|
||||||
all: build $(TARGET) $(PROGRAM)
|
all: build json_wrapper $(TARGET) $(PROGRAM)
|
||||||
|
|
||||||
dev: CXXFLAGS= $(DEV_CXXFLAGS)
|
dev: CXXFLAGS= $(DEV_CXXFLAGS)
|
||||||
dev: all
|
dev: all
|
||||||
|
|
||||||
|
json_wrapper: json_wrapper_build
|
||||||
|
$(foreach var, $(JSON_FILES), config/json2c config/$(var) $(patsubst %.json,config/%_json.h,$(var)) $(patsubst %.json,%_json,$(var));)
|
||||||
|
|
||||||
|
json_wrapper_build:
|
||||||
|
$(CC) config/json2c.c -o config/json2c
|
||||||
|
|
||||||
build:
|
build:
|
||||||
@mkdir -p build
|
@mkdir -p build
|
||||||
|
|
||||||
@ -57,6 +65,8 @@ tests: $(TESTS)
|
|||||||
sh ./tests/runtests.sh
|
sh ./tests/runtests.sh
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
|
rm config/json2c
|
||||||
|
rm config/*_json.h
|
||||||
rm -f *.o
|
rm -f *.o
|
||||||
rm -rf Tyro.app
|
rm -rf Tyro.app
|
||||||
rm -rf build $(OBJECTS) $(PROGRAM) $(TARGET) $(TESTS)
|
rm -rf build $(OBJECTS) $(PROGRAM) $(TARGET) $(TESTS)
|
||||||
|
66
config/json2c.c
Normal file
66
config/json2c.c
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
/*
|
||||||
|
* bin2c: A Program to convert binary data into C source code
|
||||||
|
* Copyright 2004 by Adrian Prantl <adrian@f4z.org>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
char* self = 0;
|
||||||
|
|
||||||
|
void usage() {
|
||||||
|
printf("Usage:\n%s input.bin output.h name\n\n", self);
|
||||||
|
}
|
||||||
|
|
||||||
|
void bail_out(const char* s1, const char* s2) {
|
||||||
|
fprintf(stderr, "%s: FATAL ERROR:\n%s%s\n", self, s1, s2);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char** argv) {
|
||||||
|
FILE *fi, *fo;
|
||||||
|
int c, i;
|
||||||
|
|
||||||
|
self = argv[0];
|
||||||
|
|
||||||
|
if (argc != 4) {
|
||||||
|
usage();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((fi = fopen(argv[1], "rb")) == 0)
|
||||||
|
bail_out("Cannot open input file ", argv[1]);
|
||||||
|
|
||||||
|
if ((fo = fopen(argv[2], "w")) == 0)
|
||||||
|
bail_out("Cannot open output file ", argv[2]);
|
||||||
|
|
||||||
|
if ((c = fgetc(fi)) != EOF) {
|
||||||
|
fprintf(fo, "#ifndef %s_H\n", argv[3]);
|
||||||
|
fprintf(fo, "#define %s_H\n\n", argv[3]);
|
||||||
|
fprintf(fo, "const char %s[] = {\n", argv[3]);
|
||||||
|
fprintf(fo, c < 16 ? " 0x%02x" : " 0x%02x", c);
|
||||||
|
}
|
||||||
|
|
||||||
|
i = 1;
|
||||||
|
while ((c = fgetc(fi)) != EOF) {
|
||||||
|
if (i < 12)
|
||||||
|
fprintf(fo, c < 16 ? ", 0x%02x" : ", 0x%02x", c);
|
||||||
|
else {
|
||||||
|
fprintf(fo, c < 16 ? ",\n 0x%02x" : ",\n 0x%02x", c);
|
||||||
|
i = 0;
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
fprintf(fo, "\n};\n\n");
|
||||||
|
fprintf(fo, "#endif\n");
|
||||||
|
|
||||||
|
printf("converted %s\n", argv[1]);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
55
config/languages.json
Normal file
55
config/languages.json
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
5
config/themes.json
Normal file
5
config/themes.json
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"solarized" : [
|
||||||
|
|
||||||
|
]
|
||||||
|
}
|
@ -14,7 +14,5 @@
|
|||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
#define JSON_INCLUDE(a, b) (string (b) = "(#include (a))")
|
|
||||||
|
|
||||||
#endif // TYRO_COMMON_H
|
#endif // TYRO_COMMON_H
|
||||||
|
|
||||||
|
@ -6,12 +6,14 @@
|
|||||||
|
|
||||||
TyroConfig::TyroConfig()
|
TyroConfig::TyroConfig()
|
||||||
{
|
{
|
||||||
string raw_json;
|
// Defines languages_json
|
||||||
JSON_INCLUDE("../../config/scintilla.json", raw_json);
|
#include "../../config/languages_json.h"
|
||||||
|
string json_string(languages_json);
|
||||||
|
|
||||||
cout << raw_json << endl;
|
if ( ! reader.parse(json_string, default_root))
|
||||||
|
{
|
||||||
reader.parse(raw_json, default_root);
|
cerr << reader.getFormattedErrorMessages() << endl;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TyroConfig::~TyroConfig()
|
TyroConfig::~TyroConfig()
|
||||||
@ -26,13 +28,5 @@ JsonValue TyroConfig::GetRoot()
|
|||||||
|
|
||||||
JsonValue TyroConfig::GetLang(string name)
|
JsonValue TyroConfig::GetLang(string name)
|
||||||
{
|
{
|
||||||
JsonValue root = this->GetRoot();
|
return default_root.get(name, JsonValue());
|
||||||
JsonValue lang = root.get("languages", "");
|
|
||||||
|
|
||||||
if (lang != "")
|
|
||||||
{
|
|
||||||
return lang.get(name, "");
|
|
||||||
}
|
|
||||||
|
|
||||||
return JsonValue("");
|
|
||||||
}
|
}
|
@ -35,7 +35,8 @@ bool EditPane::LoadAndHighlight(wxString filePath)
|
|||||||
this->StyleSetFaceName(i, "Anonymous Pro");
|
this->StyleSetFaceName(i, "Anonymous Pro");
|
||||||
}
|
}
|
||||||
|
|
||||||
JsonValue keywords_array = config->GetLang("cpp");
|
// Get the list of keywords for the current language
|
||||||
|
JsonValue keywords_array = config->GetLang("cpp").get("keywords", JsonValue());
|
||||||
|
|
||||||
this->StyleSetForeground (wxSTC_STYLE_DEFAULT, wxColor(101, 123, 131));
|
this->StyleSetForeground (wxSTC_STYLE_DEFAULT, wxColor(101, 123, 131));
|
||||||
this->StyleSetForeground(wxSTC_STYLE_INDENTGUIDE, wxColor(147, 161, 161));
|
this->StyleSetForeground(wxSTC_STYLE_INDENTGUIDE, wxColor(147, 161, 161));
|
||||||
@ -71,9 +72,16 @@ bool EditPane::LoadAndHighlight(wxString filePath)
|
|||||||
this->StyleSetBold(wxSTC_C_COMMENTDOCKEYWORD, true);
|
this->StyleSetBold(wxSTC_C_COMMENTDOCKEYWORD, true);
|
||||||
this->StyleSetBold(wxSTC_C_OPERATOR, true);
|
this->StyleSetBold(wxSTC_C_OPERATOR, true);
|
||||||
|
|
||||||
|
if (keywords_array.isArray())
|
||||||
|
{
|
||||||
this->SetKeyWords(0, keywords_array[0].asString());
|
this->SetKeyWords(0, keywords_array[0].asString());
|
||||||
this->SetKeyWords(1, keywords_array[1].asString());
|
this->SetKeyWords(1, keywords_array[1].asString());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cerr << "keywords array is not an array" << endl;
|
||||||
|
cerr << "keyword array is a " << keywords_array.type() << endl;
|
||||||
|
}
|
||||||
|
|
||||||
return this->LoadFile(filePath);
|
return this->LoadFile(filePath);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user