111 {
"bigtriangleup",
"△"},
112 {
"bigtriangledown",
"▽"},
113 {
"triangleleft",
"◃"},
114 {
"triangleright",
"▹"},
168 {
"leftrightarrow",
"↔"},
169 {
"Leftrightarrow",
"⇔"},
171 {
"hookleftarrow",
"↩"},
172 {
"leftharpoonup",
"↼"},
173 {
"leftharpoondown",
"↽"},
174 {
"rightleftharpoons",
"⇌"},
175 {
"longleftarrow",
"←"},
176 {
"Longleftarrow",
"⇐"},
177 {
"longrightarrow",
"→"},
178 {
"Longrightarrow",
"⇒"},
179 {
"longleftrightarrow",
"↔"},
180 {
"Longleftrightarrow",
"⇔"},
188 {
"hookrightarrow",
"↪"},
189 {
"rightharpoonup",
"⇀"},
190 {
"rightharpoondown",
"⇁"},
656 map<string,string> r;
657 for (
Symbol* s=symbs; s<symbs+nSyms; ++s)
658 r[s->first]=s->second;
672 if (strchr(
"`'^\"~=.",*
input) && *(
input+1)!=
'{')
680 if (strchr(
"`'^\"~=.uvHtcdb",*
input) && *(
input+1)==
'{')
682 const char* end=strchr(
input,
'}');
692 if (strchr(
"#$%&_{}",*
input))
693 return string(
input++,1);
708 const char lead=*
input;
709 if ((lead&0xC0)==0xC0) r+=*
input++;
710 if ((lead&0xE0)==0xE0) r+=*
input++;
711 if ((lead&0xF8)==0xF0) r+=*
input++;
712 if ((lead&0xC0)!=0xC0)
730 popMore.push_back(popAgain);
754 else if (*
input==
'\\')
770 if (stack.empty())
return;
773 if (!stack.back().empty() && stack.back()!=
"{")
774 *
this+=
"</"+stack.back()+
">";
777 }
while (!stack.empty() && !popMore.empty() && popMore.back());
782 if (*
input==
'{' || !tag.empty())
802 const map<string,string>::const_iterator repl=
latexSymbols.find(token);
805 else if (token==
"mathit" || token==
"mathcal")
806 process1arg(
"i",
input);
807 else if (token==
"mathrm" || token==
"mathsf")
808 process1arg(
"rm",
input);
809 else if (token==
"mathbf")
810 process1arg(
"b",
input);
811 else if (token==
"mathtt")
812 process1arg(
"tt",
input);
813 else if (token==
"sqrt")
817 const string index=parseOpt(
input);
818 *
this+=
"<small><sup>"+index+
"</sup></small>";
821 process1arg(
"",
input);
823 else if (token==
"verb")
827 const char delim=*
input++;
846 case '<':
return "<";
847 case '>':
return ">";
848 case '&':
return "&";
849 case '\'':
return "'";
850 case '\"':
return """;
851 default:
return string{&c,1};
864 r.processLaTeX(
input);
867 r.push(
"sub", ++
input);
870 r.push(
"sup", ++
input);
873 r.push(
"{", ++
input);
885 while (!r.stack.empty()) r.pop();
void push_back(const string &x, bool popAgain=false)
Result(const string &x="")
string parseLaTeXSym(const char *&input)
void processLaTeX(const char *&input)
struct anonymous_namespace{latexMarkup.cc}::Symbol symbolData[]
static string parseOpt(const char *&input)
Creation and access to the minskyTCL_obj object, which has code to record whenever Minsky's state cha...
map< string, string > populateSymbols(Symbol symbs[], size_t nSyms)
string utf8char(const char *&input)
string latexToPangoNonItalicised(const char *input)
map< string, string > latexSymbols
void push(const string &x, const char *&input)
void process1arg(const string &tag, const char *&input)