--- rxvt-unicode/src/rxvtperl.xs 2006/01/02 17:17:02 1.2 +++ rxvt-unicode/src/rxvtperl.xs 2006/01/02 18:20:23 1.3 @@ -326,25 +326,68 @@ CODE: rxvt_fatal ("%s", msg); +NV +NOW () + CODE: + RETVAL = NOW; + OUTPUT: + RETVAL + +MODULE = urxvt PACKAGE = urxvt::term + int -wcswidth (SV *str) +rxvt_term::strwidth (SV *str) CODE: { wchar_t *wstr = sv2wcs (str); + + rxvt_push_locale (THIS->locale); RETVAL = wcswidth (wstr, wcslen (wstr)); + rxvt_pop_locale (); + free (wstr); } OUTPUT: RETVAL -NV -NOW () +SV * +rxvt_term::locale_encode (SV *str) CODE: - RETVAL = NOW; - OUTPUT: +{ + wchar_t *wstr = sv2wcs (str); + + rxvt_push_locale (THIS->locale); + char *mbstr = rxvt_wcstombs (wstr); + rxvt_pop_locale (); + + free (wstr); + + RETVAL = newSVpv (mbstr, 0); + free (mbstr); +} + OUTPUT: RETVAL -MODULE = urxvt PACKAGE = urxvt::term +SV * +rxvt_term::locale_decode (SV *octets) + CODE: +{ + STRLEN len; + char *data = SvPVbyte (octets, len); + + rxvt_push_locale (THIS->locale); + wchar_t *wstr = rxvt_mbstowcs (data, len); + rxvt_pop_locale (); + + char *str = rxvt_wcstoutf8 (wstr); + free (wstr); + + RETVAL = newSVpv (str, 0); + SvUTF8_on (RETVAL); + free (str); +} + OUTPUT: + RETVAL void rxvt_term::_resource (char *name, int index, SV *newval = 0) @@ -460,6 +503,14 @@ free (wtext); } +void +rxvt_term::tt_write (SV *octets) + INIT: + STRLEN len; + char *str = SvPVbyte (octets, len); + C_ARGS: + (unsigned char *)str, len + MODULE = urxvt PACKAGE = urxvt::timer SV *