3 void printformat_perl(TEXT_DEST_REC *dest, char *format, char **arglist)
9 module = g_strdup(perl_get_package());
10 formatnum = format_find_tag(module, format);
12 die("printformat(): unregistered format '%s'", format);
17 theme = dest->window->theme == NULL ? current_theme :
19 signal_emit("print format", 5, theme, module,
20 dest, GINT_TO_POINTER(formatnum), arglist);
22 str = format_get_text_theme_charargs(theme, module, dest, formatnum, arglist);
23 if (*str != '\0') printtext_dest(dest, "%s", str);
28 static void perl_unregister_theme(const char *package)
33 formats = g_hash_table_lookup(default_formats, package);
34 if (formats == NULL) return;
36 for (n = 0; formats[n].def != NULL; n++) {
37 g_free(formats[n].tag);
38 g_free(formats[n].def);
41 theme_unregister_module(package);
44 static void sig_script_destroyed(PERL_SCRIPT_REC *script)
46 perl_unregister_theme(script->package);
49 void perl_themes_init(void)
51 signal_add("script destroyed", (SIGNAL_FUNC) sig_script_destroyed);
54 void perl_themes_deinit(void)
56 signal_remove("script destroyed", (SIGNAL_FUNC) sig_script_destroyed);
59 MODULE = Irssi::UI::Themes PACKAGE = Irssi
65 RETVAL = current_theme;
70 EXPAND_FLAG_IGNORE_REPLACES()
72 RETVAL = EXPAND_FLAG_IGNORE_REPLACES;
77 EXPAND_FLAG_IGNORE_EMPTY()
79 RETVAL = EXPAND_FLAG_IGNORE_EMPTY;
84 EXPAND_FLAG_RECURSIVE_MASK()
86 RETVAL = EXPAND_FLAG_RECURSIVE_MASK;
91 theme_register(formats)
95 FORMAT_REC *formatrecs;
101 croak("formats is not a reference to list");
102 av = (AV *) SvRV(formats);
104 if (len == 0 || (len & 1) != 0)
105 croak("formats list is invalid - not divisible by 2 (%d)", len);
107 formatrecs = g_new0(FORMAT_REC, len/2+2);
108 formatrecs[0].tag = g_strdup(perl_get_package());
109 formatrecs[0].def = g_strdup("Perl script");
111 for (fpos = 1, n = 0; n < len; n++, fpos++) {
112 key = SvPV(*av_fetch(av, n, 0), PL_na); n++;
113 value = SvPV(*av_fetch(av, n, 0), PL_na);
115 formatrecs[fpos].tag = g_strdup(key);
116 formatrecs[fpos].def = g_strdup(value);
117 formatrecs[fpos].params = MAX_FORMAT_PARAMS;
120 theme_register_module(perl_get_package(), formatrecs);
123 printformat(level, format, ...)
128 char *arglist[MAX_FORMAT_PARAMS+1];
131 format_create_dest(&dest, NULL, NULL, level, NULL);
132 memset(arglist, 0, sizeof(arglist));
133 for (n = 2; n < items && n < MAX_FORMAT_PARAMS+2; n++) {
134 arglist[n-2] = SvPV(ST(n), PL_na);
137 printformat_perl(&dest, format, arglist);
140 abstracts_register(abstracts)
147 if (!SvROK(abstracts))
148 croak("abstracts is not a reference to list");
149 av = (AV *) SvRV(abstracts);
151 if (len == 0 || (len & 1) != 0)
152 croak("abstracts list is invalid - not divisible by 2 (%d)", len);
154 for (i = 0; i < len; i++) {
155 key = SvPV(*av_fetch(av, i, 0), PL_na); i++;
156 value = SvPV(*av_fetch(av, i, 0), PL_na);
158 theme_set_default_abstract(key, value);
165 #*******************************
166 MODULE = Irssi::UI::Themes PACKAGE = Irssi::Server
167 #*******************************
170 printformat(server, target, level, format, ...)
177 char *arglist[MAX_FORMAT_PARAMS+1];
180 format_create_dest(&dest, server, target, level, NULL);
181 memset(arglist, 0, sizeof(arglist));
182 for (n = 4; n < items && n < MAX_FORMAT_PARAMS+4; n++) {
183 arglist[n-4] = SvPV(ST(n), PL_na);
186 printformat_perl(&dest, format, arglist);
188 #*******************************
189 MODULE = Irssi::UI::Themes PACKAGE = Irssi::UI::Window
190 #*******************************
193 printformat(window, level, format, ...)
194 Irssi::UI::Window window
199 char *arglist[MAX_FORMAT_PARAMS+1];
202 format_create_dest(&dest, NULL, NULL, level, window);
203 memset(arglist, 0, sizeof(arglist));
204 for (n = 3; n < items && n < MAX_FORMAT_PARAMS+3; n++) {
205 arglist[n-3] = SvPV(ST(n), PL_na);
208 printformat_perl(&dest, format, arglist);
210 #*******************************
211 MODULE = Irssi::UI::Themes PACKAGE = Irssi::Windowitem
212 #*******************************
215 printformat(item, level, format, ...)
216 Irssi::Windowitem item
221 char *arglist[MAX_FORMAT_PARAMS+1];
224 format_create_dest(&dest, item->server, item->visible_name, level, NULL);
225 memset(arglist, 0, sizeof(arglist));
226 for (n = 3; n < items && n < MAX_FORMAT_PARAMS+3; n++) {
227 arglist[n-3] = SvPV(ST(n), PL_na);
230 printformat_perl(&dest, format, arglist);
232 #*******************************
233 MODULE = Irssi::UI::Themes PACKAGE = Irssi::UI::Theme PREFIX = theme_
234 #*******************************
237 theme_format_expand(theme, format, flags=0)
238 Irssi::UI::Theme theme
245 ret = theme_format_expand(theme, format);
247 ret = theme_format_expand_data(theme, (const char **) &format, 'n', 'n',
248 NULL, NULL, EXPAND_FLAG_ROOT | flags);
250 XPUSHs(sv_2mortal(new_pv(ret)));
251 g_free_not_null(ret);
254 theme_get_format(theme, module, tag)
255 Irssi::UI::Theme theme
259 MODULE_THEME_REC *modtheme;
263 formats = g_hash_table_lookup(default_formats, module);
265 croak("Unknown module: %s", module);
267 for (i = 0; formats[i].def != NULL; i++) {
268 if (formats[i].tag != NULL &&
269 g_strcasecmp(formats[i].tag, tag) == 0)
273 if (formats[i].def == NULL)
274 croak("Unknown format tag: %s", tag);
276 modtheme = g_hash_table_lookup(theme->modules, module);
277 RETVAL = modtheme == NULL ? NULL : modtheme->formats[i];
279 RETVAL = formats[i].def;