3 static void printformat_perl(TEXT_DEST_REC *dest, char *format, char **arglist)
8 module = g_strdup(perl_get_package());
9 formatnum = format_find_tag(module, format);
11 die("printformat(): unregistered format '%s'", format);
16 printformat_module_dest_charargs(module, dest, formatnum, arglist);
20 static void perl_unregister_theme(const char *package)
25 formats = g_hash_table_lookup(default_formats, package);
26 if (formats == NULL) return;
28 for (n = 0; formats[n].def != NULL; n++) {
29 g_free(formats[n].tag);
30 g_free(formats[n].def);
33 theme_unregister_module(package);
36 static void sig_script_destroyed(PERL_SCRIPT_REC *script)
38 perl_unregister_theme(script->package);
41 void perl_themes_init(void)
43 signal_add("script destroyed", (SIGNAL_FUNC) sig_script_destroyed);
46 void perl_themes_deinit(void)
48 signal_remove("script destroyed", (SIGNAL_FUNC) sig_script_destroyed);
51 MODULE = Irssi::UI::Themes PACKAGE = Irssi
57 RETVAL = current_theme;
62 EXPAND_FLAG_IGNORE_REPLACES()
64 RETVAL = EXPAND_FLAG_IGNORE_REPLACES;
69 EXPAND_FLAG_IGNORE_EMPTY()
71 RETVAL = EXPAND_FLAG_IGNORE_EMPTY;
76 EXPAND_FLAG_RECURSIVE_MASK()
78 RETVAL = EXPAND_FLAG_RECURSIVE_MASK;
83 theme_register(formats)
87 FORMAT_REC *formatrecs;
93 croak("formats is not a reference");
95 av = (AV *) SvRV(formats);
96 if (SvTYPE(av) != SVt_PVAV)
97 croak("formats is not a reference to a list");
100 if (len == 0 || (len & 1) != 0)
101 croak("formats list is invalid - not divisible by 2 (%d)", len);
103 formatrecs = g_new0(FORMAT_REC, len/2+2);
104 formatrecs[0].tag = g_strdup(perl_get_package());
105 formatrecs[0].def = g_strdup("Perl script");
107 for (fpos = 1, n = 0; n < len; n++, fpos++) {
108 key = SvPV(*av_fetch(av, n, 0), PL_na); n++;
109 value = SvPV(*av_fetch(av, n, 0), PL_na);
111 formatrecs[fpos].tag = g_strdup(key);
112 formatrecs[fpos].def = g_strdup(value);
113 formatrecs[fpos].params = MAX_FORMAT_PARAMS;
116 theme_register_module(perl_get_package(), formatrecs);
119 printformat(level, format, ...)
124 char *arglist[MAX_FORMAT_PARAMS+1];
127 format_create_dest(&dest, NULL, NULL, level, NULL);
128 memset(arglist, 0, sizeof(arglist));
129 for (n = 2; n < items && n < MAX_FORMAT_PARAMS+2; n++) {
130 arglist[n-2] = SvPV(ST(n), PL_na);
133 printformat_perl(&dest, format, arglist);
136 abstracts_register(abstracts)
143 if (!SvROK(abstracts))
144 croak("abstracts is not a reference to list");
145 av = (AV *) SvRV(abstracts);
147 if (len == 0 || (len & 1) != 0)
148 croak("abstracts list is invalid - not divisible by 2 (%d)", len);
150 for (i = 0; i < len; i++) {
151 key = SvPV(*av_fetch(av, i, 0), PL_na); i++;
152 value = SvPV(*av_fetch(av, i, 0), PL_na);
154 theme_set_default_abstract(key, value);
161 #*******************************
162 MODULE = Irssi::UI::Themes PACKAGE = Irssi::Server
163 #*******************************
166 printformat(server, target, level, format, ...)
173 char *arglist[MAX_FORMAT_PARAMS+1];
176 format_create_dest(&dest, server, target, level, NULL);
177 memset(arglist, 0, sizeof(arglist));
178 for (n = 4; n < items && n < MAX_FORMAT_PARAMS+4; n++) {
179 arglist[n-4] = SvPV(ST(n), PL_na);
182 printformat_perl(&dest, format, arglist);
184 #*******************************
185 MODULE = Irssi::UI::Themes PACKAGE = Irssi::UI::Window
186 #*******************************
189 printformat(window, level, format, ...)
190 Irssi::UI::Window window
195 char *arglist[MAX_FORMAT_PARAMS+1];
198 format_create_dest(&dest, NULL, NULL, level, window);
199 memset(arglist, 0, sizeof(arglist));
200 for (n = 3; n < items && n < MAX_FORMAT_PARAMS+3; n++) {
201 arglist[n-3] = SvPV(ST(n), PL_na);
204 printformat_perl(&dest, format, arglist);
206 #*******************************
207 MODULE = Irssi::UI::Themes PACKAGE = Irssi::Windowitem
208 #*******************************
211 printformat(item, level, format, ...)
212 Irssi::Windowitem item
217 char *arglist[MAX_FORMAT_PARAMS+1];
220 format_create_dest(&dest, item->server, item->visible_name, level, NULL);
221 memset(arglist, 0, sizeof(arglist));
222 for (n = 3; n < items && n < MAX_FORMAT_PARAMS+3; n++) {
223 arglist[n-3] = SvPV(ST(n), PL_na);
226 printformat_perl(&dest, format, arglist);
228 #*******************************
229 MODULE = Irssi::UI::Themes PACKAGE = Irssi::UI::Theme PREFIX = theme_
230 #*******************************
233 theme_format_expand(theme, format, flags=0)
234 Irssi::UI::Theme theme
241 ret = theme_format_expand(theme, format);
243 ret = theme_format_expand_data(theme, (const char **) &format, 'n', 'n',
244 NULL, NULL, EXPAND_FLAG_ROOT | flags);
246 XPUSHs(sv_2mortal(new_pv(ret)));
247 g_free_not_null(ret);
250 theme_get_format(theme, module, tag)
251 Irssi::UI::Theme theme
255 MODULE_THEME_REC *modtheme;
259 formats = g_hash_table_lookup(default_formats, module);
261 croak("Unknown module: %s", module);
263 for (i = 0; formats[i].def != NULL; i++) {
264 if (formats[i].tag != NULL &&
265 g_strcasecmp(formats[i].tag, tag) == 0)
269 if (formats[i].def == NULL)
270 croak("Unknown format tag: %s", tag);
272 modtheme = g_hash_table_lookup(theme->modules, module);
273 RETVAL = modtheme == NULL ? NULL : modtheme->formats[i];
275 RETVAL = formats[i].def;