#include "open-type-font.hh"
#include "pango-font.hh"
#include "scm-hash.hh"
-#include "tfm.hh"
#include "warn.hh"
-static char const *default_font_str0_ = "cmr10";
-All_font_metrics::All_font_metrics (std::string path)
+Index_to_charcode_map const *
+All_font_metrics::get_index_to_charcode_map (string filename, FT_Face face)
+{
+ if (filename_charcode_maps_map_.find (filename)
+ == filename_charcode_maps_map_.end ())
+ filename_charcode_maps_map_[filename] = make_index_to_charcode_map (face);
+
+ return &filename_charcode_maps_map_[filename];
+}
+
+
+All_font_metrics::All_font_metrics (string path)
{
- tfm_dict_ = new Scheme_hash_table;
otf_dict_ = new Scheme_hash_table;
#if HAVE_PANGO_FT2
All_font_metrics::~All_font_metrics ()
{
- tfm_dict_->unprotect ();
otf_dict_->unprotect ();
#if HAVE_PANGO_FT2
if (!pango_dict_->try_retrieve (key, &val))
{
if (be_verbose_global)
- progress_indication ("[" + std::string (pango_fn));
+ progress_indication ("[" + string (pango_fn));
Pango_font *pf = new Pango_font (pango_ft2_fontmap_,
description,
#endif
-std::string
-kpathsea_find_file (std::string name, std::string ext)
+string
+kpathsea_find_file (string name, string ext)
{
name += "." + ext;
- std::string path = global_path.find (name);
+ string path = global_path.find (name);
if (path.length () > 0)
return path;
}
Open_type_font *
-All_font_metrics::find_otf (std::string name)
+All_font_metrics::find_otf (string name)
{
SCM sname = ly_symbol2scm (name.c_str ());
SCM name_string = scm_makfrom0str (name.c_str ());
SCM val;
if (!otf_dict_->try_retrieve (sname, &val))
{
- std::string file_name;
+ string file_name;
if (file_name.empty ())
file_name = search_path_.find (name + ".otf");
return dynamic_cast<Open_type_font *> (unsmob_metrics (val));
}
-Tex_font_metric *
-All_font_metrics::find_tfm (std::string name)
-{
- SCM sname = ly_symbol2scm (name.c_str ());
- SCM name_string = scm_makfrom0str (name.c_str ());
- SCM val;
- if (!tfm_dict_->try_retrieve (sname, &val))
- {
- std::string file_name;
-
- if (file_name.empty ())
- {
- /* FIXME: should add "cork-" prefix to lm* fonts. How to do
- that, cleanly? */
- std::string p = kpathsea_find_file (name, "tfm");
- if (p.length ())
- file_name = p;
- }
-
- if (file_name.empty ())
- file_name = search_path_.find (name + ".tfm");
- if (file_name.empty ())
- return 0;
-
- if (be_verbose_global)
- progress_indication ("[" + file_name);
-
- val = Tex_font_metric::make_tfm (file_name);
-
- if (be_verbose_global)
- progress_indication ("]");
-
- unsmob_metrics (val)->file_name_ = file_name;
- unsmob_metrics (val)->description_ = scm_cons (name_string,
- scm_from_double (1.0));
- tfm_dict_->set (sname, val);
- unsmob_metrics (val)->unprotect ();
- }
-
- return dynamic_cast<Tex_font_metric *> (unsmob_metrics (val));
-}
-
Font_metric *
-All_font_metrics::find_font (std::string name)
+All_font_metrics::find_font (string name)
{
Font_metric *f = find_otf (name);
if (!f)
{
- f = find_tfm (name);
- }
-
- if (!f)
- {
- warning (_f ("can't find font: `%s'", name.c_str ()));
- warning (_ ("loading default font"));
+ error (_f ("cannot find font: `%s'", name.c_str ()));
}
- std::string def_name = default_font_str0_;
+ return f;
+}
- if (!f)
- f = find_tfm (def_name);
+All_font_metrics *all_fonts_global;
- if (!f)
- {
- error (_f ("can't find default font: `%s'", def_name.c_str ()));
- error (_f ("(search path: `%s')", search_path_.to_string ()));
- error (_ ("giving up"));
- }
+LY_DEFINE (ly_reset_all_fonts, "ly:reset-all-fonts", 0, 0, 0,
+ (),
+ "Forget all about previously loaded fonts. ")
+{
+ delete all_fonts_global;
+ all_fonts_global = new All_font_metrics (global_path.to_string ());
- return f;
+ return SCM_UNSPECIFIED;
}
-All_font_metrics *all_fonts_global;
LY_DEFINE (ly_font_load, "ly:font-load", 1, 0, 0,
(SCM name),
return fm->self_scm ();
}
+