> Приветствую, друзья. Подскажите пожалуйста как можно работать с кириллицей в Instead. Я имею ввиду функции len; sub и другие, работающие с однобайтовой кодировкой символов.
Привет!
На самом деле, в метапарсере есть такой код. Он написан на Lua. Но, в последней версии INSTEAD есть и C реализация, которая помогает этому Lua коду.
Наверное, проще всего посмотреть как это сделано в МП. Даю наводку:
https://github.com/instead-hub/metaparser/blob/master/parser/mp.lua#L87
Функция, которая из строки делает массив литер.
Рядом есть более примитивные функции: utf_len, utf_char, utf_ff и utf_bb.
А вот как определяется, какую из реализаций брать -- на Lua или на C. Чтобы работало и со старым и с новым INSTEAD:
utf = {
bb = std.rawget(_G, 'utf8_prev') or utf_bb;
ff = std.rawget(_G, 'utf8_next') or utf_ff;
len = std.rawget(_G, 'utf8_len') or utf_len;
char = std.rawget(_G, 'utf8_char') or utf_char;
};
Прототипы функций если надо я могу вспомнить, но наверное есть смысл сначала посмотреть код, может быть там и так всё будет понятно. Навскидку:
utf_len, очевидно, возвращает число литер;
utf_char(строка, номер) - возвращает литеру по позиции;
utf_ff(строка, смещение) - возвращает смещение следующей литеры;
utf_bb(строка, смещение конца) - возвращает смещение предыдущей литеры;