Здравствуйте! Подскажите пожалуйста как задать кодировку с поддержкой кириллицы парсеру boost.spirit, чтобы alpha_p воспринимал кирилличиские символы . Или это делается както по другому?
Текст решил хранить в wstring
Инстанцирую парсер
std::wstring __cont = _content.toStdWString ();
parse_info<wchar_t const *> _info = parse(_cont.c_str(), _filter_grammar , nothing_p);
Описание грамматики
class filter_grammar : public grammar<filter_grammar>
{
public:
static filter_data _filter_data;
protected:
static std::pair<std::wstring,std::wstring> _replace_arg;
static std::wstring _remove_arg;
static std::wstring _duplicate_arg;
static std::wstring _errorstr;
static void err();
public:
template<typename ScannerT>
class definition {
public:
definition( const filter_grammar & self );
rule<ScannerT> const & start() const ;
private:
rule<ScannerT> filters, filter_replace, filter_remove, filter_duplicate,arg;
typedef definition _self;
};
};
template<typename ScannerT>
filter_grammar::definition<ScannerT>::definition( const filter_grammar & self )
{
filters = *(filter_replace|filter_remove|filter_duplicate);
filter_replace = str_p("replace_word")>>blank_p>>arg[assign_a(_replace_arg.first)]>>blank_p>>arg[assign_a(_replace_arg.second)]>>!(ch_p('\r'))>>ch_p('\n');
filter_remove = str_p("remove_word")>>blank_p>>arg[assign_a(_remove_arg)]>>!(ch_p('\r'))>>ch_p('\n');
filter_duplicate = str_p("duplicate_word")>>blank_p>>arg[assign_a(_duplicate_arg)][boost::bind(&filter_grammar::add_duplicate_arg)]>>!(ch_p('\r'))>>ch_p('\n');
arg = lexeme_d[+alpha_p];
}
template<typename ScannerT>
rule<ScannerT> const & filter_grammar::definition<ScannerT>::start() const
{
return filters;
}