add perl code for textbuffer-formats

- compatibility shim for new line

- make format accessible from perl

- fix perl line IDs being mixed up due to wrapper
This commit is contained in:
ailin-nemui 2019-08-08 21:54:30 +02:00
commit 57fb173130
7 changed files with 170 additions and 17 deletions

View file

@ -1,5 +1,7 @@
#define PERL_NO_GET_CONTEXT
#include "module.h"
#include "wrapper_buffer_line.h"
#include <irssi/src/fe-text/textbuffer-formats.h>
MODULE = Irssi::TextUI::TextBuffer PACKAGE = Irssi
PROTOTYPES: ENABLE
@ -12,7 +14,7 @@ Irssi::TextUI::Line
textbuffer_line_prev(line)
Irssi::TextUI::Line line
CODE:
RETVAL = line->prev;
RETVAL = perl_wrap_buffer_line(line->buffer, line->line->prev);
OUTPUT:
RETVAL
@ -20,13 +22,12 @@ Irssi::TextUI::Line
textbuffer_line_next(line)
Irssi::TextUI::Line line
CODE:
RETVAL = line->next;
RETVAL = perl_wrap_buffer_line(line->buffer, line->line->next);
OUTPUT:
RETVAL
void
textbuffer_line_get_text(buffer, line, coloring)
Irssi::TextUI::TextBuffer buffer
textbuffer_line_get_text(line, coloring)
Irssi::TextUI::Line line
int coloring
PREINIT:
@ -34,8 +35,36 @@ PREINIT:
SV *result;
PPCODE:
str = g_string_new(NULL);
textbuffer_line2text(buffer, line, coloring, str);
textbuffer_line2text(line->buffer, line->line, coloring, str);
result = new_pv(str->str);
XPUSHs(sv_2mortal(result));
g_string_free(str, TRUE);
void
textbuffer_line_get_format(line)
Irssi::TextUI::Line line
PREINIT:
HV *hv;
AV *av;
LINE_REC *l;
TEXT_BUFFER_FORMAT_REC *f;
int i;
PPCODE:
hv = newHV();
l = line->line;
if (l->info.format != NULL) {
f = l->info.format;
(void) hv_store(hv, "module", 6, new_pv(f->module), 0);
(void) hv_store(hv, "format", 6, new_pv(f->format), 0);
(void) hv_store(hv, "server_tag", 10, new_pv(f->server_tag), 0);
(void) hv_store(hv, "target", 6, new_pv(f->target), 0);
(void) hv_store(hv, "nick", 4, new_pv(f->nick), 0);
av = newAV();
for (i = 0; i < f->nargs; i++) {
av_push(av, new_pv(f->args[i]));
}
(void) hv_store(hv, "args", 4, newRV_noinc((SV *) av), 0);
} else {
(void) hv_store(hv, "text", 4, new_pv(l->info.text), 0);
}
XPUSHs(sv_2mortal(newRV_noinc((SV *) hv)));