font poor_rubber_font_rep::get_font (int nr) { ASSERT (nr < N(larger), "wrong font number"); if (initialized[nr]) return larger[nr]; initialized[nr]= true; if (nr <= 2*MAGNIFIED_NUMBER + 1) { int hnr= nr / 2; double zoomy= pow (2.0, ((double) hnr) / 4.0); double zoomx= sqrt (zoomy); if ((nr & 1) == 1) zoomx= sqrt (zoomx); larger[nr]= poor_stretched_font (base, zoomx, zoomy); //larger[nr]= base->magnify (zoomx, zoomy); } else if (nr == 2*MAGNIFIED_NUMBER + 2 || nr == 2*MAGNIFIED_NUMBER + 3) { int hdpi= (72 * base->wpt + (PIXEL/2)) / PIXEL; int vdpi= (72 * base->hpt + (PIXEL/2)) / PIXEL; font vfn= virtual_font (base, "emu-large", base->size, hdpi, vdpi, false); double zoomy= pow (2.0, ((double) MAGNIFIED_NUMBER) / 4.0); double zoomx= sqrt (zoomy); if ((nr & 1) == 1) zoomx= sqrt (zoomx); larger[nr]= poor_stretched_font (vfn, zoomx, zoomy); //larger[nr]= vfn->magnify (zoomx, zoomy); } else larger[nr]= rubber_unicode_font (base); return larger[nr]; }
void smart_font_rep::initialize_font (int nr) { if (N(fn) <= nr) fn->resize (nr+1); if (!is_nil (fn[nr])) return; array<string> a= tuple_as_array (sm->fn_spec[nr]); if (a[0] == "math") fn[nr]= get_math_font (a[1], a[2], a[3], a[4]); else if (a[0] == "cyrillic") fn[nr]= get_cyrillic_font (a[1], a[2], a[3], a[4]); else if (a[0] == "special") fn[nr]= smart_font (family, variant, series, "right", sz, dpi); else if (a[0] == "other") { int ndpi= adjusted_dpi ("roman", variant, series, "mathitalic", 1); fn[nr]= smart_font ("roman", variant, series, "mathitalic", sz, ndpi); } else if (a[0] == "bold-math") fn[nr]= smart_font (family, variant, "bold", "right", sz, dpi); else if (a[0] == "fast-italic") fn[nr]= smart_font (family, variant, series, "italic", sz, dpi); else if (a[0] == "italic-math") fn[nr]= smart_font (family, variant, series, "italic", sz, dpi); else if (a[0] == "bold-italic-math") fn[nr]= smart_font (family, variant, "bold", "italic", sz, dpi); else if (a[0] == "tt") fn[nr]= smart_font (family, "tt", series, "right", sz, dpi); else if (a[0] == "ss") fn[nr]= smart_font (family, "tt", series, "right", sz, dpi); else if (a[0] == "bold-ss") fn[nr]= smart_font (family, "tt", "bold", "right", sz, dpi); else if (a[0] == "italic-ss") fn[nr]= smart_font (family, "tt", series, "italic", sz, dpi); else if (a[0] == "bold-italic-ss") fn[nr]= smart_font (family, "tt", "bold", "italic", sz, dpi); else if (a[0] == "cal" && N(a) == 1) fn[nr]= smart_font (family, "calligraphic", series, "italic", sz, dpi); else if (a[0] == "bold-cal") fn[nr]= smart_font (family, "calligraphic", "bold", "italic", sz, dpi); else if (a[0] == "frak") fn[nr]= smart_font (family, "gothic", series, "right", sz, dpi); else if (a[0] == "bold-frak") fn[nr]= smart_font (family, "gothic", "bold", "right", sz, dpi); else if (a[0] == "bbb" && N(a) == 1) fn[nr]= smart_font (family, "outline", series, "right", sz, dpi); else if (a[0] == "virtual") fn[nr]= virtual_font (this, a[1], sz, dpi); else { int ndpi= adjusted_dpi (a[0], a[1], a[2], a[3], as_int (a[4])); fn[nr]= closest_font (a[0], a[1], a[2], a[3], sz, ndpi, as_int (a[4])); } //cout << "Font " << nr << ", " << a << " -> " << fn[nr]->res_name << "\n"; if (fn[nr]->res_name == res_name) { failed_error << "Font " << nr << ", " << a << " -> " << fn[nr]->res_name << "\n"; FAILED ("substitution font loop detected"); } }
void math_font_rep::init_font (int fn_nr, font& fn) { tree t= font_name [fn_nr]; if (is_tuple (t, "virtual", 3)) fn= virtual_font (this, as_string (t[1]), as_int (t[2]), (int) tm_round (as_int (t[3]) * zf)); else fn= find_magnified_font (t, zf); ASSERT (!is_nil (fn), "font not found"); fn->copy_math_pars (base_fn); font_table [fn_nr]= fn; }