Пример #1
0
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];
}
Пример #2
0
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");
  }
}
Пример #3
0
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;
}