summaryrefslogtreecommitdiff
path: root/src/dged
diff options
context:
space:
mode:
authorAlbert Cervin <albert@acervin.com>2024-01-31 16:53:16 +0100
committerAlbert Cervin <albert@acervin.com>2024-01-31 16:53:16 +0100
commitef64c4d05794484e5affbf633f095877cc1422df (patch)
tree782fd6684135de8a8eee483fe49cc5008fc62f7d /src/dged
parent703fde993cd672990242b31f8d28ba5180b4a6a0 (diff)
downloaddged-ef64c4d05794484e5affbf633f095877cc1422df.tar.gz
dged-ef64c4d05794484e5affbf633f095877cc1422df.tar.xz
dged-ef64c4d05794484e5affbf633f095877cc1422df.zip
Finish lang settings rework
Diffstat (limited to 'src/dged')
-rw-r--r--src/dged/buffer.c2
-rw-r--r--src/dged/lang.c21
-rw-r--r--src/dged/lang.h48
-rw-r--r--src/dged/syntax.c3
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")) ||