Mercurial > audlegacy
comparison src/audacious/tuple_formatter.c @ 3335:63d7947d7376 trunk
simplified the tuple formatter a bit
author | Giacomo Lozito <james@develia.org> |
---|---|
date | Sat, 11 Aug 2007 20:32:13 +0200 |
parents | 9c53688bb559 |
children | 07ed916b7176 |
comparison
equal
deleted
inserted
replaced
3334:ea806daf3ef0 | 3335:63d7947d7376 |
---|---|
84 | 84 |
85 /* parsers are ugly */ | 85 /* parsers are ugly */ |
86 for (iter = string; *iter != '\0'; iter++) | 86 for (iter = string; *iter != '\0'; iter++) |
87 { | 87 { |
88 /* if it's raw text, just copy the byte */ | 88 /* if it's raw text, just copy the byte */ |
89 if (*iter != '$' && *iter != '%' && (*iter != '}' || (*iter == '}' && level > 0))) | 89 if (*iter != '$' && *iter != '%' && *iter != '}' ) |
90 { | |
91 g_string_append_c(ctx->str, *iter); | |
92 } | |
93 else if (*iter == '}' && level > 0) | |
90 { | 94 { |
91 level--; | 95 level--; |
92 g_string_append_c(ctx->str, *iter); | |
93 } | 96 } |
94 else if (g_str_has_prefix(iter, "${") == TRUE) | 97 else if (g_str_has_prefix(iter, "${") == TRUE) |
95 { | 98 { |
96 GString *expression = g_string_new(""); | 99 GString *expression = g_string_new(""); |
97 GString *argument = g_string_new(""); | 100 GString *argument = g_string_new(""); |
98 GString *sel = expression; | 101 GString *sel = expression; |
99 gchar *result; | 102 gchar *result; |
100 gboolean rewind = FALSE; | 103 level++; |
101 | 104 |
102 for (iter += 2; *iter != '\0'; iter++) | 105 for (iter += 2; *iter != '\0'; iter++) |
103 { | 106 { |
104 if (*iter == ':') | 107 if (*iter == ':') |
105 { | 108 { |
106 level++; | |
107 if (sel != argument) | 109 if (sel != argument) |
108 { | 110 { |
109 sel = argument; | 111 sel = argument; |
110 continue; | 112 continue; |
111 } | 113 } |
123 } | 125 } |
124 } | 126 } |
125 else if (*iter == '}' && (sel == argument)) | 127 else if (*iter == '}' && (sel == argument)) |
126 { | 128 { |
127 level--; | 129 level--; |
128 if (level + 1 > 0) | 130 if (level == 0) |
129 { | 131 break; |
130 iter++; | 132 else |
131 rewind = *(iter - 1) == '}' && *iter != '}'; | 133 g_string_append_c(sel, *iter); |
132 break; | |
133 } | |
134 g_string_append_c(sel, *iter); | |
135 } | 134 } |
136 else if (*iter == '}' && ((sel != argument))) | 135 else if (*iter == '}' && ((sel != argument))) |
137 break; | 136 break; |
138 else | 137 else |
139 g_string_append_c(sel, *iter); | 138 g_string_append_c(sel, *iter); |
156 g_string_free(expression, TRUE); | 155 g_string_free(expression, TRUE); |
157 g_string_free(argument, TRUE); | 156 g_string_free(argument, TRUE); |
158 | 157 |
159 if (*iter == '\0') | 158 if (*iter == '\0') |
160 break; | 159 break; |
161 | |
162 if (rewind) | |
163 iter--; | |
164 } | 160 } |
165 else if (g_str_has_prefix(iter, "%{") == TRUE) | 161 else if (g_str_has_prefix(iter, "%{") == TRUE) |
166 { | 162 { |
167 GString *expression = g_string_new(""); | 163 GString *expression = g_string_new(""); |
168 GString *argument = g_string_new(""); | 164 GString *argument = g_string_new(""); |
169 GString *sel = expression; | 165 GString *sel = expression; |
170 gchar *result; | 166 gchar *result; |
171 gboolean rewind = FALSE; | 167 level++; |
172 | 168 |
173 for (iter += 2; *iter != '\0'; iter++) | 169 for (iter += 2; *iter != '\0'; iter++) |
174 { | 170 { |
175 if (*iter == ':') | 171 if (*iter == ':') |
176 { | 172 { |
177 level++; | |
178 if (sel != argument) | 173 if (sel != argument) |
179 { | 174 { |
180 sel = argument; | 175 sel = argument; |
181 continue; | 176 continue; |
182 } | 177 } |
194 } | 189 } |
195 } | 190 } |
196 else if (*iter == '}' && (sel == argument)) | 191 else if (*iter == '}' && (sel == argument)) |
197 { | 192 { |
198 level--; | 193 level--; |
199 if (level + 1 > 0) | 194 if (level == 0) |
200 { | 195 break; |
201 iter++; | 196 else |
202 rewind = *(iter - 1) == '}' && *iter != '}'; | |
203 break; | |
204 } | |
205 g_string_append_c(sel, *iter); | 197 g_string_append_c(sel, *iter); |
206 } | 198 } |
207 else if (*iter == '}' && ((sel != argument))) | 199 else if (*iter == '}' && ((sel != argument))) |
208 break; | 200 break; |
209 else | 201 else |
227 g_string_free(expression, TRUE); | 219 g_string_free(expression, TRUE); |
228 g_string_free(argument, TRUE); | 220 g_string_free(argument, TRUE); |
229 | 221 |
230 if (*iter == '\0') | 222 if (*iter == '\0') |
231 break; | 223 break; |
232 | |
233 if (rewind) | |
234 iter--; | |
235 } | 224 } |
236 } | 225 } |
237 | 226 |
238 out = g_strdup(ctx->str->str); | 227 out = g_strdup(ctx->str->str); |
239 g_string_free(ctx->str, TRUE); | 228 g_string_free(ctx->str, TRUE); |