[Top][All Lists]
[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);