Devel-PPPort
view release on metacpan or search on metacpan
parts/inc/pv_tools view on Meta::CPAN
const U32 flags)
{
const U8 dq = (flags & PERL_PV_PRETTY_QUOTE) ? '"' : '%';
STRLEN escaped;
if (!(flags & PERL_PV_PRETTY_NOCLEAR))
sv_setpvs(dsv, "");
if (dq == '"')
sv_catpvs(dsv, "\"");
else if (flags & PERL_PV_PRETTY_LTGT)
sv_catpvs(dsv, "<");
if (start_color != NULL)
sv_catpv(dsv, D_PPP_CONSTPV_ARG(start_color));
pv_escape(dsv, str, count, max, &escaped, flags | PERL_PV_ESCAPE_NOCLEAR);
if (end_color != NULL)
sv_catpv(dsv, D_PPP_CONSTPV_ARG(end_color));
if (dq == '"')
sv_catpvs(dsv, "\"");
else if (flags & PERL_PV_PRETTY_LTGT)
sv_catpvs(dsv, ">");
if ((flags & PERL_PV_PRETTY_ELLIPSES) && escaped < count)
sv_catpvs(dsv, "...");
return SvPVX(dsv);
}
#endif
#endif
#ifndef pv_display
#if { NEED pv_display }
char *
pv_display(pTHX_ SV *dsv, const char *pv, STRLEN cur, STRLEN len, STRLEN pvlim)
{
pv_pretty(dsv, pv, cur, pvlim, NULL, NULL, PERL_PV_PRETTY_DUMP);
if (len > cur && pv[cur] == '\0')
sv_catpvs(dsv, "\\0");
return SvPVX(dsv);
}
#endif
#endif
=xsinit
#define NEED_pv_escape
#define NEED_pv_pretty
#define NEED_pv_display
=xsubs
void
pv_escape_can_unicode()
PPCODE:
#if defined(is_utf8_string) && defined(utf8_to_uvchr_buf)
XSRETURN_YES;
#else
XSRETURN_NO;
#endif
void
pv_pretty()
PREINIT:
char *rv;
PPCODE:
EXTEND(SP, 8);
ST(0) = sv_newmortal();
rv = pv_pretty(ST(0), "foobarbaz",
9, 40, NULL, NULL, 0);
ST(1) = sv_2mortal(newSVpv(rv, 0));
ST(2) = sv_newmortal();
rv = pv_pretty(ST(2), "pv_p\retty\n",
10, 40, "left", "right", PERL_PV_PRETTY_LTGT);
ST(3) = sv_2mortal(newSVpv(rv, 0));
ST(4) = sv_newmortal();
rv = pv_pretty(ST(4), "N\303\275 Batter\303\255",
12, 20, NULL, NULL, PERL_PV_ESCAPE_UNI_DETECT);
ST(5) = sv_2mortal(newSVpv(rv, 0));
ST(6) = sv_newmortal();
rv = pv_pretty(ST(6), "\303\201g\303\246tis Byrjun",
15, 18, NULL, NULL, PERL_PV_ESCAPE_UNI_DETECT|PERL_PV_PRETTY_ELLIPSES);
ST(7) = sv_2mortal(newSVpv(rv, 0));
XSRETURN(8);
void
pv_display()
PREINIT:
char *rv;
PPCODE:
EXTEND(SP, 4);
ST(0) = sv_newmortal();
rv = pv_display(ST(0), "foob\0rbaz", 9, 10, 20);
ST(1) = sv_2mortal(newSVpv(rv, 0));
ST(2) = sv_newmortal();
rv = pv_display(ST(2), "pv_display", 10, 11, 5);
ST(3) = sv_2mortal(newSVpv(rv, 0));
XSRETURN(4);
=tests plan => 13
my $uni = &Devel::PPPort::pv_escape_can_unicode();
# sanity check
ok($uni ? ivers($]) >= ivers("5.006") : ivers($]) < ivers("5.008"));
my @r;
@r = &Devel::PPPort::pv_pretty();
is($r[0], $r[1]);
is($r[0], "foobarbaz");
is($r[2], $r[3]);
is($r[2], '<leftpv_p\retty\nright>');
is($r[4], $r[5]);
if(ord("A") == 65) {
is($r[4], $uni ? 'N\375 Batter\355' : 'N\303\275 Batter\303');
}
else {
skip("Skip for non-ASCII platform");
}
is($r[6], $r[7]);
if(ord("A") == 65) {
is($r[6], $uni ? '\301g\346tis Byrju...' : '\303\201g\303\246t...');
}
else {
skip("Skip for non-ASCII platform");
}
@r = &Devel::PPPort::pv_display();
is($r[0], $r[1]);
is($r[0], '"foob\0rbaz"\0');
is($r[2], $r[3]);
ok($r[2] eq '"pv_di"...\0' ||
$r[2] eq '"pv_d"...\0'); # some perl implementations are broken... :(
( run in 2.381 seconds using v1.01-cache-2.11-cpan-56fb94df46f )