math_font_rep::math_font_rep ( string name, scheme_tree t, font base, font error): font_rep (name, base), base_fn (base), error_fn (error), math (load_translator (as_string (t[1][0]))), rubber (load_translator (as_string (t[2][0]))), italic (load_translator ("italic")), font_name (N(t[1])-1), font_table (N(t[1])-1), rubber_name (N(t[2])-1), rubber_table (N(t[2])-1) { int i; for (i=1; i<N(t[1]); i++) font_name[i-1]= t[1][i]; for (i=1; i<N(t[2]); i++) rubber_name[i-1]= t[2][i]; }
static void initialize_virtual () { if (virt_initialized) return; std_virt << string ("long") << string ("negate") << string ("misc"); for (int i=0; i<N(std_virt); i++) std_trl << load_translator (std_virt[i]); virt_initialized= true; }
poor_rubber_font_rep::poor_rubber_font_rep (string name, font base2): font_rep (name, base2), base (base2) { this->copy_math_pars (base); initialized << true; larger << base; for (int i=1; i<=2*MAGNIFIED_NUMBER+4; i++) { initialized << false; larger << base; } virt= load_translator ("emu-large"); }
translator load_translator (string name) { if (translator::instances -> contains (name)) return translator (name); string s, r; string file_name= name * ".enc"; if (DEBUG_STD) debug_fonts << "Loading " << file_name << "\n"; url u ("$TEXMACS_HOME_PATH/fonts/enc:$TEXMACS_PATH/fonts/enc", file_name); if (load_string (u, s, false)) return load_virtual (name); translator trl= tm_new<translator_rep> (name); int i, j, num=0; for (i=0; i<N(s); i++) switch (s[i]) { case '\"': // " r= ""; for (i++; i<N(s); i++) { if ((s[i]=='\\') && (i<N(s)-1)) i++; else if (s[i]=='\"') break; // " r << s[i]; } trl << r; num= 0; break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if (i==N(s)-1) break; num= 10*num+ ((int) s[i])- ((int) '0'); trl << num; break; case '*': if (i==N(s)-1) break; num= 256*num; trl << num; break; case '[': i++; j=i; while ((i<N(s)) && (s[i]!=']')) i++; trl << load_translator (s (j, i)); break; default: num= 0; } return trl; }