mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/AbuseFilter.git
synced 2024-11-25 06:26:03 +00:00
61 lines
1.6 KiB
C++
61 lines
1.6 KiB
C++
|
/*
|
||
|
* Copyright (c) 2008 Andrew Garrett.
|
||
|
* Copyright (c) 2008 River Tarnell <river@wikimedia.org>
|
||
|
* Derived from public domain code contributed by Victor Vasiliev.
|
||
|
*
|
||
|
* Permission is granted to anyone to use this software for any purpose,
|
||
|
* including commercial applications, and to alter it and redistribute it
|
||
|
* freely. This software is provided 'as-is', without any express or
|
||
|
* implied warranty.
|
||
|
*/
|
||
|
|
||
|
#include <iostream>
|
||
|
|
||
|
#include "parser.h"
|
||
|
#include "afstring.h"
|
||
|
|
||
|
template<typename charT>
|
||
|
afp::basic_datum<charT>
|
||
|
f_add(std::vector<afp::basic_datum<charT> > const &args)
|
||
|
{
|
||
|
return args[0] + args[1];
|
||
|
}
|
||
|
|
||
|
template<typename charT>
|
||
|
afp::basic_datum<charT>
|
||
|
f_norm(std::vector<afp::basic_datum<charT> > const &args)
|
||
|
{
|
||
|
return args[0];
|
||
|
}
|
||
|
|
||
|
template<typename charT>
|
||
|
afp::basic_datum<charT>
|
||
|
f_length(std::vector<afp::basic_datum<charT> > const &args)
|
||
|
{
|
||
|
return afp::basic_datum<charT>::from_int(args[0].toString().size());
|
||
|
}
|
||
|
int
|
||
|
main(int argc, char **argv)
|
||
|
{
|
||
|
if (argc != 2) {
|
||
|
std::cerr << boost::format("usage: %s <expr>\n")
|
||
|
% argv[0];
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
afp::u32expressor e;
|
||
|
|
||
|
e.add_variable(make_u32fray("ONE"), afp::u32datum::from_int(1));
|
||
|
e.add_variable(make_u32fray("TWO"), afp::u32datum::from_int(2));
|
||
|
e.add_variable(make_u32fray("THREE"), afp::u32datum::from_int(3));
|
||
|
e.add_function(make_u32fray("add"), f_add<UChar32>);
|
||
|
e.add_function(make_u32fray("norm"), f_norm<UChar32>);
|
||
|
e.add_function(make_u32fray("length"), f_length<UChar32>);
|
||
|
|
||
|
try {
|
||
|
e.print_xml(std::cout, make_u32fray(argv[1]));
|
||
|
} catch (std::exception &e) {
|
||
|
std::cout << "parsing failed: " << e.what() << '\n';
|
||
|
}
|
||
|
}
|