rem = empty_docstring();
bool const mathmode = cmdtype & MATH_CMD;
bool const textmode = cmdtype & TEXT_CMD;
+
+ // Easy case: the command is a complete entry of unicodesymbols.
+ for (const auto & unicodeSymbol : unicodesymbols) {
+ if (mathmode) {
+ for (const auto & command : unicodeSymbol.second.mathCommands()) {
+ if (command == cmd) {
+ docstring value;
+ value += unicodeSymbol.first;
+ needsTermination = !unicodeSymbol.second.mathNoTermination();
+ if (req && unicodeSymbol.second.mathFeature()
+ && !unicodeSymbol.second.mathPreamble().empty())
+ req->insert(unicodeSymbol.second.mathPreamble());
+ return value;
+ }
+ }
+ }
+ if (textmode) {
+ for (const auto & command : unicodeSymbol.second.textCommands()) {
+ if (command == cmd) {
+ docstring value;
+ value += unicodeSymbol.first;
+ needsTermination = !unicodeSymbol.second.textNoTermination();
+ if (req && unicodeSymbol.second.textFeature()
+ && !unicodeSymbol.second.textPreamble().empty())
+ req->insert(unicodeSymbol.second.textPreamble());
+ return value;
+ }
+ }
+ }
+ }
+
+ // Otherwise, try to map as many commands as possible, matching prefixes of the command.
docstring symbols;
size_t const cmdend = cmd.size();
size_t prefix = 0;