/[graveman]/graveman/current/src/themes.c
ViewVC logotype

Diff of /graveman/current/src/themes.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.5 by scresto, Fri Apr 22 00:04:33 2005 UTC revision 1.6 by scresto, Fri Apr 29 18:27:54 2005 UTC
# Line 24  Line 24 
24    
25  #include "graveman.h"  #include "graveman.h"
26    
27  #define THEME_NAME    "NAME="  #define THEME_NAME    "NAME"
28  #define THEME_DESC    "DESC="  #define THEME_DESC    "DESC"
29  #define THEME_AUTHOR  "AUTHOR="  #define THEME_AUTHOR  "AUTHOR"
30  #define THEME_VERSION "VERSION="  #define THEME_VERSION "VERSION"
31  #define THEME_DATE    "DATE="  #define THEME_DATE    "DATE"
32  #define THEME_URL     "URL="  #define THEME_URL     "URL"
33    #define THEME_ITEM    6
34    
35  Ttheme *free_theme(Ttheme *Atheme)  Ttheme *free_theme(Ttheme *Atheme)
36  {  {
# Line 44  Ttheme *free_theme(Ttheme *Atheme) Line 45  Ttheme *free_theme(Ttheme *Atheme)
45    return NULL;    return NULL;
46  }  }
47    
48    
49    /* on decompose une locale fr_FR.utf8@euro */
50    GSList *split_locale()
51    {
52      GSList *Lcurlocale = NULL;
53      gchar *s = Glocale;
54      gchar Lbuf[_BUF_SIZE];
55    #ifdef ENABLE_NLS
56      if (s) {
57        Lcurlocale = g_slist_append(Lcurlocale, g_strconcat("[", Glocale, "]=", NULL));
58    
59        g_strlcpy(Lbuf, Glocale, _BUF_SIZE-1);
60    
61        if ((s=strchr(Lbuf, '@'))) {
62          *s=0;
63          Lcurlocale = g_slist_append(Lcurlocale, g_strconcat("[", Lbuf, "]=", NULL));
64        }
65    
66        if (*Lbuf && ((s=strchr(Lbuf, '.')))) {
67          *s=0;
68          Lcurlocale = g_slist_append(Lcurlocale, g_strconcat("[", Lbuf, "]=", NULL));
69    
70          if (*Lbuf && ((s=strchr(Lbuf, '_')))) {
71            *s=0;
72            Lcurlocale = g_slist_append(Lcurlocale, g_strconcat("[", Lbuf, "]=", NULL));
73          }
74        }
75      }
76    #endif
77      Lcurlocale = g_slist_append(Lcurlocale, g_strdup("="));
78    
79      return Lcurlocale;
80    }
81    
82    GSList *free_locale(GSList *Alistlocale)
83    {
84      GSList *Lcurlocale = Alistlocale;
85      gpointer Ldata;
86    
87      while (Lcurlocale) {
88        if ((Ldata = Lcurlocale->data)) g_free(Ldata);
89        Lcurlocale = g_slist_next(Lcurlocale);
90      }
91    
92      g_slist_free(Alistlocale);
93    
94      return NULL;
95    }
96    
97  /* allocation theme */  /* allocation theme */
98  Ttheme *read_theme_desc(const gchar *Afile, GError **Aerror)  Ttheme *read_theme_desc(const gchar *Afile, GError **Aerror)
99  {  {
100    gchar *Lbuf;    gchar *Lbuf;
101    gchar **Larrbuf;    gchar **Larrbuf;
102    gint i;    gint i;
103    gchar *s;    gchar *s, *Ldata;
104    Ttheme *Ltheme = g_malloc0(sizeof(Ttheme));    Ttheme *Ltheme = g_malloc0(sizeof(Ttheme));
105      GSList *Llistlocale = split_locale();
106      GSList *Lcurlocale;
107      gint Ltrouve = 0;
108        
109    if (!g_file_get_contents(Afile, &Lbuf, NULL, Aerror)) return NULL;    if (!g_file_get_contents(Afile, &Lbuf, NULL, Aerror)) return NULL;
110    Larrbuf = g_strsplit(Lbuf, "\n", 0);    Larrbuf = g_strsplit(Lbuf, "\n", 0);
111    g_free(Lbuf);    g_free(Lbuf);
112    
113    for (i=0; Larrbuf[i]; i++) {  
114      s=ltrim(Larrbuf[i]);    for (Lcurlocale = Llistlocale; Lcurlocale; Lcurlocale = g_slist_next(Lcurlocale)) {
115      if (*s==';' || *s=='#' || !*s) continue;      if (!(Ldata = (gchar *)Lcurlocale->data)) continue;
116    
117      if (!strncmp(s, THEME_NAME, strlen(THEME_NAME))) {      for (i=0; Larrbuf[i]; i++) {
118        g_free(Ltheme->name);        s=ltrim(Larrbuf[i]);
119        Ltheme->name = g_strdup(ltrim(s+strlen(THEME_NAME)));        if (*s==';' || *s=='#' || !*s) continue;
120      } else if (!strncmp(s, THEME_DESC, strlen(THEME_DESC))) {  
121        g_free(Ltheme->desc);        if (!Ltheme->name && !strncmp(s, THEME_NAME, strlen(THEME_NAME)) &&
122        Ltheme->desc = g_strdup(ltrim(s+strlen(THEME_DESC)));            ((!*Ldata) || strstr(s, Ldata))) {
123      } else if (!strncmp(s, THEME_AUTHOR, strlen(THEME_AUTHOR))) {          Ltheme->name = g_strdup(strchr(s, '=')+1);
124        g_free(Ltheme->author);          Ltrouve ++;
125        Ltheme->author = g_strdup(ltrim(s+strlen(THEME_AUTHOR)));        } else if (!Ltheme->desc && !strncmp(s, THEME_DESC, strlen(THEME_DESC)) &&
126      } else if (!strncmp(s, THEME_VERSION, strlen(THEME_VERSION))) {            ((!*Ldata) || strstr(s, Ldata))) {
127        Ltheme->version = atoi(ltrim(s+strlen(THEME_VERSION)));          Ltheme->desc = g_strdup(strchr(s, '=')+1);
128      } else if (!strncmp(s, THEME_DATE, strlen(THEME_DATE))) {          Ltrouve ++;
129        g_free(Ltheme->date);        } else if (!Ltheme->author && !strncmp(s, THEME_AUTHOR, strlen(THEME_AUTHOR)) &&
130        Ltheme->date = g_strdup(ltrim(s+strlen(THEME_DATE)));            ((!*Ldata) || strstr(s, Ldata))) {
131      } else if (!strncmp(s, THEME_URL, strlen(THEME_URL))) {          Ltheme->author = g_strdup(strchr(s, '=')+1);
132        g_free(Ltheme->url);          Ltrouve ++;
133        Ltheme->url = g_strdup(ltrim(s+strlen(THEME_URL)));        } else if (!Ltheme->version && !strncmp(s, THEME_VERSION, strlen(THEME_VERSION)) &&
134              ((!*Ldata) || strstr(s, Ldata))) {
135            Ltheme->version = atoi(ltrim(strchr(s, '=')+1));
136            Ltrouve ++;
137          } else if (!Ltheme->date && !strncmp(s, THEME_DATE, strlen(THEME_DATE)) &&
138              ((!*Ldata) || strstr(s, Ldata))) {
139            Ltheme->date = g_strdup(ltrim(strchr(s, '=')+1));
140            Ltrouve ++;
141          } else if (!Ltheme->url && !strncmp(s, THEME_URL, strlen(THEME_URL)) &&
142              ((!*Ldata) || strstr(s, Ldata))) {
143            Ltheme->url = g_strdup(ltrim(strchr(s, '=')+1));
144            Ltrouve ++;
145          }
146    
147          if (Ltrouve == THEME_ITEM) break;
148      }      }
149    }    }
150    g_strfreev(Larrbuf);    g_strfreev(Larrbuf);
151    
152      Llistlocale = free_locale(Llistlocale);
153    
154    /* un theme valide doit au moins avoir un nom .. */    /* un theme valide doit au moins avoir un nom .. */
155    if (Ltheme->name && *Ltheme->name) {    if (Ltheme->name && *Ltheme->name) {
156      Ltheme->path = g_strdup(Afile);      Ltheme->path = g_strdup(Afile);

Legend:
Removed from v.1.5  
changed lines
  Added in v.1.6

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26