graveman-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Graveman-cvs] Changes to graveman/current/src/themes.c


From: sylvain cresto
Subject: [Graveman-cvs] Changes to graveman/current/src/themes.c
Date: Fri, 29 Apr 2005 14:28:20 -0400

Index: graveman/current/src/themes.c
diff -u graveman/current/src/themes.c:1.5 graveman/current/src/themes.c:1.6
--- graveman/current/src/themes.c:1.5   Fri Apr 22 00:04:33 2005
+++ graveman/current/src/themes.c       Fri Apr 29 18:27:54 2005
@@ -24,12 +24,13 @@
 
 #include "graveman.h"
 
-#define THEME_NAME    "NAME="
-#define THEME_DESC    "DESC="
-#define THEME_AUTHOR  "AUTHOR="
-#define THEME_VERSION "VERSION="
-#define THEME_DATE    "DATE="
-#define THEME_URL     "URL="
+#define THEME_NAME    "NAME"
+#define THEME_DESC    "DESC"
+#define THEME_AUTHOR  "AUTHOR"
+#define THEME_VERSION "VERSION"
+#define THEME_DATE    "DATE"
+#define THEME_URL     "URL"
+#define THEME_ITEM    6
 
 Ttheme *free_theme(Ttheme *Atheme)
 {
@@ -44,44 +45,112 @@
   return NULL;
 }
 
+
+/* on decompose une locale address@hidden */
+GSList *split_locale()
+{
+  GSList *Lcurlocale = NULL;
+  gchar *s = Glocale;
+  gchar Lbuf[_BUF_SIZE];
+#ifdef ENABLE_NLS
+  if (s) {
+    Lcurlocale = g_slist_append(Lcurlocale, g_strconcat("[", Glocale, "]=", 
NULL));
+
+    g_strlcpy(Lbuf, Glocale, _BUF_SIZE-1);
+
+    if ((s=strchr(Lbuf, '@'))) {
+      *s=0;
+      Lcurlocale = g_slist_append(Lcurlocale, g_strconcat("[", Lbuf, "]=", 
NULL));
+    }
+
+    if (*Lbuf && ((s=strchr(Lbuf, '.')))) {
+      *s=0;
+      Lcurlocale = g_slist_append(Lcurlocale, g_strconcat("[", Lbuf, "]=", 
NULL));
+
+      if (*Lbuf && ((s=strchr(Lbuf, '_')))) {
+        *s=0;
+        Lcurlocale = g_slist_append(Lcurlocale, g_strconcat("[", Lbuf, "]=", 
NULL));
+      }
+    }
+  }
+#endif
+  Lcurlocale = g_slist_append(Lcurlocale, g_strdup("="));
+
+  return Lcurlocale;
+}
+
+GSList *free_locale(GSList *Alistlocale)
+{
+  GSList *Lcurlocale = Alistlocale;
+  gpointer Ldata;
+
+  while (Lcurlocale) {
+    if ((Ldata = Lcurlocale->data)) g_free(Ldata);
+    Lcurlocale = g_slist_next(Lcurlocale);
+  }
+
+  g_slist_free(Alistlocale);
+
+  return NULL;
+}
+
 /* allocation theme */
 Ttheme *read_theme_desc(const gchar *Afile, GError **Aerror)
 {
   gchar *Lbuf;
   gchar **Larrbuf;
   gint i;
-  gchar *s;
+  gchar *s, *Ldata;
   Ttheme *Ltheme = g_malloc0(sizeof(Ttheme));
+  GSList *Llistlocale = split_locale();
+  GSList *Lcurlocale;
+  gint Ltrouve = 0;
   
   if (!g_file_get_contents(Afile, &Lbuf, NULL, Aerror)) return NULL;
   Larrbuf = g_strsplit(Lbuf, "\n", 0);
   g_free(Lbuf);
 
-  for (i=0; Larrbuf[i]; i++) {
-    s=ltrim(Larrbuf[i]);
-    if (*s==';' || *s=='#' || !*s) continue;
-
-    if (!strncmp(s, THEME_NAME, strlen(THEME_NAME))) {
-      g_free(Ltheme->name);
-      Ltheme->name = g_strdup(ltrim(s+strlen(THEME_NAME)));
-    } else if (!strncmp(s, THEME_DESC, strlen(THEME_DESC))) {
-      g_free(Ltheme->desc);
-      Ltheme->desc = g_strdup(ltrim(s+strlen(THEME_DESC)));
-    } else if (!strncmp(s, THEME_AUTHOR, strlen(THEME_AUTHOR))) {
-      g_free(Ltheme->author);
-      Ltheme->author = g_strdup(ltrim(s+strlen(THEME_AUTHOR)));
-    } else if (!strncmp(s, THEME_VERSION, strlen(THEME_VERSION))) {
-      Ltheme->version = atoi(ltrim(s+strlen(THEME_VERSION)));
-    } else if (!strncmp(s, THEME_DATE, strlen(THEME_DATE))) {
-      g_free(Ltheme->date);
-      Ltheme->date = g_strdup(ltrim(s+strlen(THEME_DATE)));
-    } else if (!strncmp(s, THEME_URL, strlen(THEME_URL))) {
-      g_free(Ltheme->url);
-      Ltheme->url = g_strdup(ltrim(s+strlen(THEME_URL)));
+
+  for (Lcurlocale = Llistlocale; Lcurlocale; Lcurlocale = 
g_slist_next(Lcurlocale)) {
+    if (!(Ldata = (gchar *)Lcurlocale->data)) continue;
+
+    for (i=0; Larrbuf[i]; i++) {
+      s=ltrim(Larrbuf[i]);
+      if (*s==';' || *s=='#' || !*s) continue;
+
+      if (!Ltheme->name && !strncmp(s, THEME_NAME, strlen(THEME_NAME)) && 
+          ((!*Ldata) || strstr(s, Ldata))) {
+        Ltheme->name = g_strdup(strchr(s, '=')+1);
+        Ltrouve ++;
+      } else if (!Ltheme->desc && !strncmp(s, THEME_DESC, strlen(THEME_DESC)) 
&&
+          ((!*Ldata) || strstr(s, Ldata))) {
+        Ltheme->desc = g_strdup(strchr(s, '=')+1);
+        Ltrouve ++;
+      } else if (!Ltheme->author && !strncmp(s, THEME_AUTHOR, 
strlen(THEME_AUTHOR)) &&
+          ((!*Ldata) || strstr(s, Ldata))) {
+        Ltheme->author = g_strdup(strchr(s, '=')+1);
+        Ltrouve ++;
+      } else if (!Ltheme->version && !strncmp(s, THEME_VERSION, 
strlen(THEME_VERSION)) &&
+          ((!*Ldata) || strstr(s, Ldata))) {
+        Ltheme->version = atoi(ltrim(strchr(s, '=')+1));
+        Ltrouve ++;
+      } else if (!Ltheme->date && !strncmp(s, THEME_DATE, strlen(THEME_DATE)) 
&&
+          ((!*Ldata) || strstr(s, Ldata))) {
+        Ltheme->date = g_strdup(ltrim(strchr(s, '=')+1));
+        Ltrouve ++;
+      } else if (!Ltheme->url && !strncmp(s, THEME_URL, strlen(THEME_URL)) &&
+          ((!*Ldata) || strstr(s, Ldata))) {
+        Ltheme->url = g_strdup(ltrim(strchr(s, '=')+1));
+        Ltrouve ++;
+      }
+
+      if (Ltrouve == THEME_ITEM) break;
     }
   }
   g_strfreev(Larrbuf);
 
+  Llistlocale = free_locale(Llistlocale);
+
   /* un theme valide doit au moins avoir un nom .. */
   if (Ltheme->name && *Ltheme->name) {
     Ltheme->path = g_strdup(Afile);




reply via email to

[Prev in Thread] Current Thread [Next in Thread]