Я пытаюсь разобрать escape-коды LaTeX (например, \alpha
) в символы Unicode (математические) (например, U+1D6FC
).
Прямо сейчас это означает, что я использую этот symbols
парсер (правило):
struct greek_lower_case_letters_ : x3::symbols<char32_t>
{
greek_lower_case_letters_::greek_lower_case_letters_()
{
add("alpha", U'\u03B1');
}
} greek_lower_case_letter;
Это работает нормально, но означает, что в результате я получаю std::u32string
. Мне нужен элегантный способ сохранить кодовые точки Unicode в коде (возможно, для будущей автоматизации) и по причинам обслуживания. Есть ли способ заставить этот парсер анализировать в UTF-8 std::string
?
Я думал о преобразовании структуры symbols
в структуру std::string
, но это было бы крайне неэффективно (знаю, преждевременная оптимизация, бла-бла).
Я надеялся, что есть какой-то элегантный способ вместо того, чтобы проходить через кучу обручей, чтобы заставить это работать (symbols
добавление строк к результату).
Однако я боюсь, что использование значений кодовых точек и желание UTF8 повлечет за собой затраты времени выполнения преобразования (или возможно ли преобразование constexpr
UTF32-> UTF8?).