1
0
mirror of https://github.com/irssi/irssi.git synced 2024-12-04 14:46:39 -05:00

expose wcwidth and related to perl

This commit is contained in:
ailin-nemui 2018-11-12 13:14:02 +01:00
parent 60d2364989
commit 9e5e5d8625
2 changed files with 42 additions and 0 deletions

View File

@ -2,6 +2,8 @@
#include "module.h" #include "module.h"
#include "irssi-version.h" #include "irssi-version.h"
#include "core.h" #include "core.h"
#include "utf8.h"
#include "recode.h"
#include "pidwait.h" #include "pidwait.h"
#include "session.h" #include "session.h"
@ -687,6 +689,25 @@ CODE:
OUTPUT: OUTPUT:
RETVAL RETVAL
int
string_width(str)
char *str
C_ARGS:
str, is_utf8() ? TREAT_STRING_AS_UTF8 : TREAT_STRING_AS_BYTES
void
string_chars_for_width(str, width)
char *str
unsigned int width
PREINIT:
int retval;
unsigned int bytes;
PPCODE:
retval = string_chars_for_width(str, is_utf8() ? TREAT_STRING_AS_UTF8 : TREAT_STRING_AS_BYTES, width, &bytes);
mXPUSHi(retval);
mXPUSHu(bytes);
#******************************* #*******************************
MODULE = Irssi::Core PACKAGE = Irssi::Server MODULE = Irssi::Core PACKAGE = Irssi::Server
#******************************* #*******************************

View File

@ -205,6 +205,27 @@ gui_input_set_pos(pos)
CODE: CODE:
gui_entry_set_pos(active_entry, pos); gui_entry_set_pos(active_entry, pos);
int
wcwidth(c)
char *c
CODE:
if (term_type == TERM_TYPE_UTF8) {
unichar chr = g_utf8_get_char_validated((const char *) c, -1);
if (chr & 0x80000000) {
RETVAL = 1;
} else {
RETVAL = i_wcwidth(chr);
}
} else if (term_type != TERM_TYPE_BIG5 ||
c[1] == '\0' || !is_big5(c[0], c[1])) {
RETVAL = 1;
} else {
RETVAL = 2;
}
OUTPUT:
RETVAL
MODULE = Irssi::TextUI PACKAGE = Irssi::UI::Window MODULE = Irssi::TextUI PACKAGE = Irssi::UI::Window
void void