+2005-05-03 Han-Wen Nienhuys <hanwen@xs4all.nl>
+
+ * lily/open-type-font-scheme.cc (LY_DEFINE):
+ new function ly:otf-font-table-data.
+
2005-05-02 Han-Wen Nienhuys <hanwen@xs4all.nl>
* mf/GNUmakefile ($(outdir)/lilypond.map): remove rule.
SCM get_global_table () const;
SCM get_char_table () const;
+ String get_otf_table (String tag) const;
static SCM make_otf (String);
virtual String font_name () const;
virtual ~Open_type_font ();
SCM sym = scm_string_to_symbol (glyph);
return scm_hashq_ref (otf->get_char_table (), sym, SCM_EOL);
}
+
+
+LY_DEFINE(ly_otf_font_table_data, "ly:otf-font-table-data", 2, 0, 0,
+ (SCM font, SCM tag),
+ "Extract a table @var{tag} from @var{font}.")
+{
+ Modified_font_metric *fm
+ = dynamic_cast<Modified_font_metric *> (unsmob_metrics (font));
+
+ Open_type_font *otf = fm ? dynamic_cast<Open_type_font *> (fm->original_font ())
+ : dynamic_cast<Open_type_font *> (unsmob_metrics (font));
+
+
+ SCM_ASSERT_TYPE (otf, font, SCM_ARG1, __FUNCTION__, "Open type font");
+ SCM_ASSERT_TYPE (scm_is_string (tag), tag, SCM_ARG1, __FUNCTION__, "Open type font");
+
+ char ctag [5] = " ";
+
+ String tag_string = ly_scm2string (tag);
+ strncpy (ctag, tag_string.to_str0 (), tag_string.length());
+
+ String tab = otf->get_otf_table (String (ctag));
+
+ return scm_from_locale_stringn ((char const*) tab.to_bytes (), tab.length ());
+}
return 0;
}
+String
+Open_type_font::get_otf_table (String tag) const
+{
+ FT_ULong len;
+ FT_Byte *tab = load_table (tag.to_str0 (), face_, &len);
+
+ return String (tab, len);
+}
+
SCM
load_scheme_table (char const *tag_str, FT_Face face)
{