From 1dd803cf0f3ed07a0e9e8b49dd66b84152c64b27 Mon Sep 17 00:00:00 2001 From: Han-Wen Nienhuys Date: Mon, 2 May 2005 22:27:25 +0000 Subject: [PATCH] (LY_DEFINE): new function ly:otf-font-table-data. --- ChangeLog | 5 +++++ lily/include/open-type-font.hh | 1 + lily/open-type-font-scheme.cc | 25 +++++++++++++++++++++++++ lily/open-type-font.cc | 9 +++++++++ 4 files changed, 40 insertions(+) diff --git a/ChangeLog b/ChangeLog index 916b06837c..3d4dac1046 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2005-05-03 Han-Wen Nienhuys + + * lily/open-type-font-scheme.cc (LY_DEFINE): + new function ly:otf-font-table-data. + 2005-05-02 Han-Wen Nienhuys * mf/GNUmakefile ($(outdir)/lilypond.map): remove rule. diff --git a/lily/include/open-type-font.hh b/lily/include/open-type-font.hh index eea6204527..918a2cc5cb 100644 --- a/lily/include/open-type-font.hh +++ b/lily/include/open-type-font.hh @@ -32,6 +32,7 @@ public: 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 (); diff --git a/lily/open-type-font-scheme.cc b/lily/open-type-font-scheme.cc index 4430d14438..1473205210 100644 --- a/lily/open-type-font-scheme.cc +++ b/lily/open-type-font-scheme.cc @@ -34,3 +34,28 @@ LY_DEFINE (ly_otf_font_glyph_info, "ly:otf-font-glyph-info", 2, 0, 0, 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 (unsmob_metrics (font)); + + Open_type_font *otf = fm ? dynamic_cast (fm->original_font ()) + : dynamic_cast (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 ()); +} diff --git a/lily/open-type-font.cc b/lily/open-type-font.cc index ddde7dcfab..df0a23e7d5 100644 --- a/lily/open-type-font.cc +++ b/lily/open-type-font.cc @@ -37,6 +37,15 @@ load_table (char const *tag_str, FT_Face face, FT_ULong *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) { -- 2.39.5