+ // matching entry in the unicodesymbols file.
+ if (math != tmp && text != tmp)
+ continue;
+ // If we found a combining command, we need to append
+ // the macro argument if this has not been done above.
+ if (tmp == combcmd && combining != uniend &&
+ k < cmdend && cmd[k] == '{') {
+ size_t l = k;
+ int count = 1;
+ while (l < cmdend && count && l != docstring::npos) {
+ l = cmd.find_first_of(from_ascii("{}"), l + 1);
+ if (cmd[l] == '{')
+ ++count;
+ else
+ --count;
+ }
+ if (l != docstring::npos) {
+ j = l;
+ subcmd = cmd.substr(i, j - i + 1);
+ }
+ }
+ // If the entry doesn't start with '\', we take note
+ // of the match and continue (this is not a ultimate
+ // acceptance, as some other entry may match a longer
+ // portion of the cmd string). However, if the entry
+ // does start with '\', we accept the match only if
+ // this is a valid macro, i.e., either it is a single
+ // (nonletter) char macro, or nothing else follows,
+ // or what follows is a nonletter char, or the last
+ // character is a }.
+ else if (tmp[0] != '\\'
+ || (tmp.size() == prefix + 1 &&
+ !isAlphaASCII(tmp[1]) &&
+ (prefix == 1 || !isAlphaASCII(tmp[2])))
+ || k == cmdend
+ || !isAlphaASCII(cmd[k])
+ || tmp[tmp.size() - 1] == '}'
+ ) {