#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
#include <buffer.h>
#include <houdini.h>
#define WRAPPER(name) \
SV *_##name(SV *input){ \
gh_buf buffer = GH_BUF_INIT; \
SV *result; \
STRLEN slen; \
char *src_string; \
\
if( !SvPOK(input) && !SvNOK(input) && !SvIOK(input) ) {\
croak( #name "() argument not a string"); \
} \
\
src_string = SvPV(input, slen); \
\
if( !houdini_##name( &buffer, src_string, slen ) ) { \
return newSVsv(input); \
} \
\
result = newSVpvn( buffer.ptr, buffer.size ); \
gh_buf_free(&buffer); \
SvUTF8_on(result); \
\
return result; \
}
WRAPPER(escape_html)
WRAPPER(unescape_html)
WRAPPER(escape_xml)
WRAPPER(escape_url)
WRAPPER(escape_uri)
WRAPPER(unescape_url)
WRAPPER(unescape_uri)
WRAPPER(escape_js)
WRAPPER(unescape_js)
WRAPPER(escape_href)
MODULE = Escape::Houdini PACKAGE = Escape::Houdini
SV *
escape_xml(str)
SV *str;
CODE:
RETVAL = _escape_xml(str);
OUTPUT:
RETVAL
SV *
escape_html(str)
SV *str;
CODE:
RETVAL = _escape_html(str);
OUTPUT:
RETVAL
SV *
unescape_html(str)
SV *str;
CODE:
RETVAL = _unescape_html(str);
OUTPUT:
RETVAL
SV *
escape_uri(str)
SV *str;
CODE:
RETVAL = _escape_uri(str);
OUTPUT:
RETVAL
SV *
escape_url(str)
SV *str;
CODE:
RETVAL = _escape_url(str);
OUTPUT:
RETVAL
SV *
escape_href(str)
SV *str;
CODE:
RETVAL = _escape_href(str);
OUTPUT:
RETVAL
SV *
unescape_uri(str)
SV *str;
CODE:
RETVAL = _unescape_uri(str);
OUTPUT:
RETVAL
SV *
unescape_url(str)
SV *str;
CODE:
RETVAL = _unescape_url(str);
OUTPUT:
RETVAL
SV *
escape_js(str)
SV *str;
CODE:
RETVAL = _escape_js(str);
OUTPUT:
RETVAL
SV *
unescape_js(str)
SV *str;
CODE:
RETVAL = _unescape_js(str);
OUTPUT:
RETVAL