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);
139 #*******************************
140 MODULE = Irssi::UI::Themes PACKAGE = Irssi::Server
141 #*******************************
144 printformat(server, target, level, format, ...)
151 char *arglist[MAX_FORMAT_PARAMS+1];
154 format_create_dest(&dest, server, target, level, NULL);
155 memset(arglist, 0, sizeof(arglist));
156 for (n = 4; n < items && n < MAX_FORMAT_PARAMS+4; n++) {
157 arglist[n-4] = SvPV(ST(n), PL_na);
160 printformat_perl(&dest, format, arglist);
162 #*******************************
163 MODULE = Irssi::UI::Themes PACKAGE = Irssi::UI::Window
164 #*******************************
167 printformat(window, level, format, ...)
168 Irssi::UI::Window window
173 char *arglist[MAX_FORMAT_PARAMS+1];
176 format_create_dest(&dest, NULL, NULL, level, window);
177 memset(arglist, 0, sizeof(arglist));
178 for (n = 3; n < items && n < MAX_FORMAT_PARAMS+3; n++) {
179 arglist[n-3] = SvPV(ST(n), PL_na);
182 printformat_perl(&dest, format, arglist);
184 #*******************************
185 MODULE = Irssi::UI::Themes PACKAGE = Irssi::Windowitem
186 #*******************************
189 printformat(item, level, format, ...)
190 Irssi::Windowitem item
195 char *arglist[MAX_FORMAT_PARAMS+1];
198 format_create_dest(&dest, item->server, item->name, level, NULL);
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::UI::Theme PREFIX = theme_
208 #*******************************
211 theme_format_expand(theme, format, flags=0)
212 Irssi::UI::Theme theme
219 ret = theme_format_expand(theme, format);
221 ret = theme_format_expand_data(theme, (const char **) &format, 'n', 'n',
222 NULL, NULL, EXPAND_FLAG_ROOT | flags);
224 XPUSHs(sv_2mortal(new_pv(ret)));
225 g_free_not_null(ret);