📄 nkf.xs
字号:
#ifdef __cplusplusextern "C" {#endif#include "EXTERN.h"#include "perl.h"#include "XSUB.h"#ifdef __cplusplus}#endif/* we never use getc, ungetc */#undef getc#undef ungetc#define getc(f) (input_ctr>i_len?-1:input[input_ctr++])#define ungetc(c,f) input_ctr--#define INCSIZE 32#undef putchar#undef TRUE#undef FALSE#define putchar(c) nkf_putchar(c)static unsigned char *output;static unsigned char *input;static STRLEN input_ctr;static STRLEN i_len;static STRLEN output_ctr;static STRLEN o_len;static STRLEN incsize;int nkf_putchar(unsigned int c);SV *result;intnkf_putchar(unsigned int c) { if(output_ctr>=o_len) { o_len += incsize; SvGROW(result, o_len); incsize *= 2; output = SvPVX(result); } return output[output_ctr++] = c;}#define PERL_XS 1#include "../nkf.c"MODULE = NKF PACKAGE = NKF SV *nkf(...) PROTOTYPE: @ PREINIT: SV* sv; SV* last; char **argv; char *cp; char *data; STRLEN cplen,rlen; int i,argc; CODE: reinit(); for (i=0;SvOK(ST(i));i++); argc = i-1; for (i=0;i<argc;i++) { sv = ST(i); cp = SvPV(sv,cplen); if(*cp != '-') continue; arguments(cp); } data = SvPV(ST(argc),i_len); input_ctr = 0; if(iso8859_f && (oconv != j_oconv || !x0201_f )) { iso8859_f = FALSE; } /* allocate a result buffer */ incsize = INCSIZE; rlen = i_len+INCSIZE; result = newSV(rlen); input = data; output = SvPVX(result); o_len = rlen; output_ctr = 0; kanji_convert(NULL); nkf_putchar(0); RETVAL = result; SvPOK_on(RETVAL); SvCUR_set(RETVAL, strlen(output)); OUTPUT: RETVAL
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -