changed Makefile; build all commands as an own file
[NeonServV5.git] / lang.c
diff --git a/lang.c b/lang.c
index e515c2b4b0ee7ccb380833c4f879a6dc3cdb4182..e50e752741e1a2a54e6812c6c96b2d09b16c2d05 100644 (file)
--- a/lang.c
+++ b/lang.c
@@ -44,6 +44,7 @@ static struct language* add_language(char *langtag, char *langname) {
     lang->langname = strdup(langname);
     struct language_table **entrys = calloc(27, sizeof(*entrys));
     lang->entrys = entrys;
+    langdict[cindex] = lang;
     return lang;
 }
 
@@ -85,7 +86,7 @@ struct language* get_language_by_tag(char *tag) {
     int cindex;
     for(cindex = 0; cindex < MAXLANGUAGES; cindex++) {
         if(langdict[cindex] == NULL) break;
-        if(!strcmp(langdict[cindex]->langtag, tag))
+        if(!stricmp(langdict[cindex]->langtag, tag))
             return langdict[cindex];
     }
     return NULL;
@@ -95,7 +96,7 @@ struct language* get_language_by_name(char *name) {
     int cindex;
     for(cindex = 0; cindex < MAXLANGUAGES; cindex++) {
         if(langdict[cindex] == NULL) break;
-        if(!strcmp(langdict[cindex]->langname, name))
+        if(!stricmp(langdict[cindex]->langname, name))
             return langdict[cindex];
     }
     return NULL;
@@ -110,19 +111,8 @@ struct language* get_default_language() {
 void register_default_language_table(const struct default_language_entry *msgtab) {
     if(lang_c == NULL) 
         lang_c = add_language(DEFAULT_LANG_TAG, DEFAULT_LANG_NAME);
-    struct language_table *lang_entry;
-    int cindex;
     while(msgtab->ident) {
-        cindex = get_entry_index(msgtab->ident);
-        lang_entry = malloc(sizeof(*lang_entry));
-        if (!lang_entry) {
-            perror("malloc() failed");
-            return;
-        }
-        lang_entry->ident = strdup(msgtab->ident);
-        lang_entry->text = strdup(msgtab->text);
-        lang_entry->next = lang_c->entrys[cindex];
-        lang_c->entrys[cindex] = lang_entry;
+        register_language_string(lang_c, msgtab->ident, msgtab->text);
         msgtab++;
     }
 }
@@ -134,8 +124,36 @@ void register_language_string(struct language *lang, char *ident, char *text) {
         perror("malloc() failed");
         return;
     }
+    
     lang_entry->ident = strdup(ident);
-    lang_entry->text = strdup(text);
+    //replace all:
+    //$b to \002
+    //$k to \003
+    char txt[MAXLEN];
+    strcpy(txt, text);
+    char tmp[MAXLEN];
+    int tmppos = 0;
+    char *a, *b = txt;
+    do {
+        a = strstr(b, "$");
+        if(a) *a = '\0';
+        tmppos += sprintf(tmp + tmppos, "%s", b);
+        if(a) {
+            switch(a[1]) {
+                case 'b':
+                    tmp[tmppos++] = '\002';
+                    break;
+                case 'k':
+                    tmp[tmppos++] = '\003';
+                    break;
+                default:
+                    //unknown - just write it
+                    tmppos += sprintf(tmp + tmppos, "$%c", a[1]);
+            }
+            b = a+2;
+        }
+    } while(a);
+    lang_entry->text = strdup(tmp);
     lang_entry->next = lang->entrys[cindex];
     lang->entrys[cindex] = lang_entry;
 }
@@ -153,6 +171,11 @@ char *get_language_string(struct UserNode *user, const char* msg_ident) {
         if(!strcmp(entry->ident, msg_ident))
             return entry->text;
     }
+    if(lang == lang_c) return NULL;
+    for(entry = lang_c->entrys[cindex]; entry; entry = entry->next) {
+        if(!strcmp(entry->ident, msg_ident))
+            return entry->text;
+    }
     return NULL;
 }