Mercurial > audlegacy
annotate src/audacious/tuple_formatter.c @ 3283:6062ef95818b trunk
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
author | William Pitcock <nenolod@atheme-project.org> |
---|---|
date | Thu, 09 Aug 2007 06:19:27 -0500 |
parents | |
children | 70789a2a5a65 |
rev | line source |
---|---|
3283
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
1 /* |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
2 * Audacious |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
3 * Copyright (c) 2007 William Pitcock |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
4 * |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
5 * This program is free software; you can redistribute it and/or modify |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
6 * it under the terms of the GNU General Public License as published by |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
7 * the Free Software Foundation; under version 3 of the License. |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
8 * |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
9 * This program is distributed in the hope that it will be useful, |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
12 * GNU General Public License for more details. |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
13 * |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
14 * You should have received a copy of the GNU General Public License |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
15 * along with this program. If not, see <http://www.gnu.org/licenses>. |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
16 * |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
17 * The Audacious team does not consider modular code linking to |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
18 * Audacious or using our public API to be a derived work. |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
19 */ |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
20 |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
21 #include <glib.h> |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
22 #include <mowgli.h> |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
23 |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
24 #include "tuple.h" |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
25 #include "tuple_formatter.h" |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
26 |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
27 /* |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
28 * the tuple formatter: |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
29 * |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
30 * this is a data-driven meta-language which eventually hopes to be |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
31 * turing complete. |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
32 * |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
33 * language constructs follow the following basic rules: |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
34 * - begin with ${ |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
35 * - end with } |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
36 * |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
37 * language constructs: |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
38 * - ${field}: prints a field |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
39 * - ${?field:expr}: evaluates expr if field exists |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
40 * - ${=field:"value"}: defines field in the currently iterated |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
41 * tuple as string value of "value" |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
42 * - ${=field:value}: defines field in the currently iterated |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
43 * tuple as integer value of "value" |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
44 * - ${==field,field:expr}: evaluates expr if both fields are the same |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
45 * - ${!=field,field:expr}: evaluates expr if both fields are not the same |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
46 * |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
47 * everything else is treated as raw text. |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
48 */ |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
49 |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
50 typedef struct { |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
51 Tuple *tuple; |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
52 GString str; |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
53 } TupleFormatterContext; |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
54 |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
55 /* processes a construct, e.g. "${?artist:artist is defined}" would |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
56 return "artist is defined" if artist is defined. */ |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
57 gchar * |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
58 tuple_formatter_process_construct(Tuple *tuple, const gchar *string) |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
59 { |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
60 TupleFormatterContext *ctx; |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
61 const gchar *iter; |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
62 gchar *out; |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
63 |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
64 g_return_val_if_fail(tuple != NULL, NULL); |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
65 g_return_val_if_fail(string != NULL, NULL); |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
66 |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
67 ctx = g_new0(TupleFormatterContext, 1); |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
68 |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
69 for (iter = string; *iter != '\0'; iter++) |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
70 { |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
71 /* if it's raw text, just copy the byte */ |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
72 if (*iter != '$') |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
73 g_string_append_c(&ctx->str, *iter); |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
74 else if (*(iter + 1) == '{') |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
75 { |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
76 GString expression = {}; |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
77 GString argument = {}; |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
78 GString *sel = &expression; |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
79 gchar *result; |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
80 |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
81 for (iter += 2; *iter != '\0'; iter++) |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
82 { |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
83 switch(*iter) |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
84 { |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
85 case '}': |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
86 break; |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
87 case ':': |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
88 sel = &argument; |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
89 break; |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
90 default: |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
91 g_string_append_c(sel, *iter); |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
92 break; |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
93 } |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
94 } |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
95 |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
96 if (expression.len == 0) |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
97 continue; |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
98 |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
99 result = tuple_formatter_process_expr(tuple, expression.str, argument.len ? argument.str : NULL); |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
100 if (result != NULL) |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
101 { |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
102 g_string_append(&ctx->str, result); |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
103 g_free(result); |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
104 } |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
105 |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
106 g_free(expression.str); |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
107 g_free(argument.str); |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
108 } |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
109 } |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
110 |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
111 out = g_strdup(ctx->str.str); |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
112 g_free(ctx->str.str); |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
113 g_free(ctx); |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
114 |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
115 return out; |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
116 } |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
117 |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
118 static GList *tuple_formatter_expr_list = NULL; |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
119 |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
120 typedef struct { |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
121 const gchar *name; |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
122 gboolean (*func)(Tuple *tuple, const gchar *expression); |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
123 } TupleFormatterExpression; |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
124 |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
125 /* processes an expression and optional argument pair. */ |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
126 gchar * |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
127 tuple_formatter_process_expr(Tuple *tuple, const gchar *expression, |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
128 const gchar *argument) |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
129 { |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
130 TupleFormatterExpression *expr = NULL; |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
131 GList *iter; |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
132 |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
133 g_return_val_if_fail(tuple != NULL, NULL); |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
134 g_return_val_if_fail(expression != NULL, NULL); |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
135 |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
136 for (iter = tuple_formatter_expr_list; iter != NULL; iter = iter->next) |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
137 { |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
138 TupleFormatterExpression *tmp = (TupleFormatterExpression *) iter->data; |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
139 |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
140 if (g_str_has_prefix(tmp->name, expression) == TRUE) |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
141 { |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
142 expr = tmp; |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
143 expression += strlen(tmp->name); |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
144 } |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
145 } |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
146 |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
147 /* ${artist} */ |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
148 if (expr == NULL && argument == NULL) |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
149 { |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
150 TupleValueType type = tuple_get_value_type(tuple, expression); |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
151 |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
152 switch(type) |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
153 { |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
154 case TUPLE_STRING: |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
155 return g_strdup(tuple_get_string(tuple, expression)); |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
156 break; |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
157 case TUPLE_INT: |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
158 return g_strdup_printf("%d", tuple_get_int(tuple, expression)); |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
159 break; |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
160 case TUPLE_UNKNOWN: |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
161 default: |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
162 return NULL; |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
163 } |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
164 } |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
165 else if (expr != NULL) |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
166 { |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
167 if (expr->func(tuple, expression) == TRUE && argument != NULL) |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
168 return tuple_formatter_process_construct(tuple, argument); |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
169 } |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
170 |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
171 return NULL; |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
172 } |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
173 |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
174 /* registers a formatter */ |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
175 void |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
176 tuple_formatter_register_expression(const gchar *keyword, |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
177 gboolean (*func)(Tuple *tuple, const gchar *argument)) |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
178 { |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
179 TupleFormatterExpression *expr; |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
180 |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
181 g_return_if_fail(keyword != NULL); |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
182 g_return_if_fail(func != NULL); |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
183 |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
184 expr = g_new0(TupleFormatterExpression, 1); |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
185 expr->name = keyword; |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
186 expr->func = func; |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
187 |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
188 tuple_formatter_expr_list = g_list_append(tuple_formatter_expr_list, expr); |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
189 } |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
190 |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
191 /* builtin-keyword: ${?arg}, returns TRUE if <arg> exists. */ |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
192 static gboolean |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
193 tuple_formatter_expression_exists(Tuple *tuple, const gchar *expression) |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
194 { |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
195 return (tuple_get_value_type(tuple, expression) != TUPLE_UNKNOWN) ? TRUE : FALSE; |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
196 } |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
197 |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
198 /* processes a string containing instructions. does initialization phases |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
199 if not already done */ |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
200 gchar * |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
201 tuple_formatter_process_string(Tuple *tuple, const gchar *string) |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
202 { |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
203 static gboolean initialized = FALSE; |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
204 |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
205 if (initialized == FALSE) |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
206 { |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
207 tuple_formatter_register_expression("?", tuple_formatter_expression_exists); |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
208 initialized = TRUE; |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
209 } |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
210 |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
211 return tuple_formatter_process_string(tuple, string); |
6062ef95818b
Add first revision parser code. May or may not work, not hooked up, so I can't test it yet. ;)
William Pitcock <nenolod@atheme-project.org>
parents:
diff
changeset
|
212 } |