class PerlCharTokenizer : public CharTokenizer, public PerlWrapper
{
public:
bool isTokenChar(wchar_t c) const
{
SV* obj = SvRV(obj_ref);
wchar_t ch[2];
ch[0] = c;
ch[1] = 0;
SV* pch = WCharToSv((wchar_t*)ch, sv_newmortal());
m.pushArgument(pch);
m.call(obj, "isTokenChar");
SV* ret = m.shiftReturn();
m.finish();
if (SvTRUE(ret))
return true;
return false;
}
wchar_t normalize(const wchar_t c) const
{
SV* obj = SvRV(obj_ref);
m.pushArgument(newSVpv("next", 4));
m.call(obj, "can");
SV* ret = m.shiftReturn();
m.finish();
if (SvTRUE(ret)) {
wchar_t *ret1, ret2;
wchar_t ch[2];
ch[0] = c;
ch[1] = 0;
SV* pch = WCharToSv((wchar_t*)ch, sv_newmortal());
m.pushArgument(pch);
m.call(obj, "normalize");
SV* ret = m.shiftReturn();
m.finish();
ret1 = SvToWChar(ret);
ret2 = ret1[0];
Safefree(ret1);
return ret2;
}
else
return CharTokenizer::normalize(c);
}
PerlCharTokenizer(Reader* reader) : CharTokenizer(reader), PerlWrapper() {}
void close()
{
SV* obj = SvRV(obj_ref);
CharTokenizer::close();
m.call(obj, "close");
m.finish();
}
bool next(Token* token)
{
SV* obj = SvRV(obj_ref);
m.pushArgument(newSVpv("next", 4));
m.call(obj, "can");
SV* ret = m.shiftReturn();
m.finish();
if (SvTRUE(ret)) {
SV* perl_token = PtrToSv("Lucene::Analysis::Token", (void*)token, sv_newmortal());
m.pushArgument(perl_token);
m.call(obj, "next");
SV* ret = m.shiftReturn();
m.finish();
if (SvTRUE(ret))
return true;
return false;
}
else
return CharTokenizer::next(token);
}
};