diff options
| author | Albert Cervin <albert@acervin.com> | 2024-01-31 16:53:16 +0100 |
|---|---|---|
| committer | Albert Cervin <albert@acervin.com> | 2024-01-31 16:53:16 +0100 |
| commit | ef64c4d05794484e5affbf633f095877cc1422df (patch) | |
| tree | 782fd6684135de8a8eee483fe49cc5008fc62f7d /src | |
| parent | 703fde993cd672990242b31f8d28ba5180b4a6a0 (diff) | |
| download | dged-ef64c4d05794484e5affbf633f095877cc1422df.tar.gz dged-ef64c4d05794484e5affbf633f095877cc1422df.tar.xz dged-ef64c4d05794484e5affbf633f095877cc1422df.zip | |
Finish lang settings rework
Diffstat (limited to 'src')
| -rw-r--r-- | src/dged/buffer.c | 2 | ||||
| -rw-r--r-- | src/dged/lang.c | 21 | ||||
| -rw-r--r-- | src/dged/lang.h | 48 | ||||
| -rw-r--r-- | src/dged/syntax.c | 3 |
4 files changed, 71 insertions, 3 deletions
diff --git a/src/dged/buffer.c b/src/dged/buffer.c index e27c69c..ee11d6f 100644 --- a/src/dged/buffer.c +++ b/src/dged/buffer.c @@ -435,6 +435,8 @@ void buffer_destroy(struct buffer *buffer) { h->callback(buffer, h->userdata); } + lang_destroy(&buffer->lang); + text_destroy(buffer->text); buffer->text = NULL; diff --git a/src/dged/lang.c b/src/dged/lang.c index 7c7e478..e392136 100644 --- a/src/dged/lang.c +++ b/src/dged/lang.c @@ -60,7 +60,13 @@ void languages_init(bool register_default) { } } -struct language lang_from_settings(const char *id) { +void lang_destroy(struct language *lang) { + if (strlen(lang->id) != 3 || strncmp(lang->id, "fnd", 3) != 0) { + free((void *)lang->id); + } +} + +static struct language lang_from_settings(const char *id) { struct language l; l.id = strdup(id); @@ -93,7 +99,7 @@ struct language lang_from_settings(const char *id) { return l; } -void next_ext(const char *curr, const char **nxt, const char **end) { +static void next_ext(const char *curr, const char **nxt, const char **end) { if (curr == NULL) { *nxt = *end = NULL; return; @@ -138,6 +144,17 @@ void lang_setting_set(struct language *lang, const char *key, free((void *)langkey); } +void lang_setting_set_default(struct language *lang, const char *key, + struct setting_value value) { + const char *langkey = setting_join_key("languages", lang->id); + const char *setting_key = setting_join_key(langkey, key); + + settings_set_default(setting_key, value); + + free((void *)setting_key); + free((void *)langkey); +} + struct language lang_from_filename(const char *filename) { if (strlen(filename) == 0) { diff --git a/src/dged/lang.h b/src/dged/lang.h index 51d9ac3..8f8a604 100644 --- a/src/dged/lang.h +++ b/src/dged/lang.h @@ -4,6 +4,9 @@ #include <stdbool.h> #include <stdint.h> +struct setting; +struct setting_value; + /** * Settings for a programming language. */ @@ -30,6 +33,11 @@ struct language { void languages_init(bool register_default); /** + * Free up resources associated with a language. + */ +void lang_destroy(struct language *lang); + +/** * Get a language config by file name. * * @param[in] filename File name. @@ -46,4 +54,44 @@ struct language lang_from_filename(const char *filename); */ struct language lang_from_id(const char *id); +/** + * Get all settings associated with a language. + * + * @param lang The language to get settings for. + * @param settings Result array for settings. + * @param nsettings resulting number of settings placed in @ref settings. + */ +void lang_settings(struct language *lang, struct setting **settings[], + uint32_t *nsettings); + +/** + * Get a single setting for a language. + * + * @param lang The language to get setting for. + * @param key The setting key, relative to the language. + * + * @returns The setting if found, else NULL. + */ +struct setting *lang_setting(struct language *lang, const char *key); + +/** + * Set a setting for a language. + * + * @param lang The language to set for. + * @param key The setting key, relative to the language. + * @param value The value to set + */ +void lang_setting_set(struct language *lang, const char *key, + struct setting_value value); + +/** + * Set a default value for a language setting. + * + * @param lang The language to set for. + * @param key The setting key, relative to the language. + * @param value The value to set + */ +void lang_setting_set_default(struct language *lang, const char *key, + struct setting_value value); + #endif diff --git a/src/dged/syntax.c b/src/dged/syntax.c index e7828a5..5f94d60 100644 --- a/src/dged/syntax.c +++ b/src/dged/syntax.c @@ -347,7 +347,8 @@ static void update_parser(struct buffer *buffer, void *userdata, highlight = true; color = Color_Yellow; } else if (s8eq(cname, s8("number"))) { - highlight = false; + highlight = true; + color = Color_Yellow; } else if (s8eq(cname, s8("function")) || s8eq(cname, s8("function.macro")) || s8eq(cname, s8("function.method")) || |
