(c) 1999--2004 Han-Wen Nienhuys <hanwen@cs.uu.nl>
Mats Bengtsson <matsb@s3.kth.se> (the ugly TeX parsing in text_dimension)
- */
+*/
+
+#include "font-metric.hh"
#include <math.h>
-#include <ctype.h>
+#include <cctype>
-#include "scaled-font-metric.hh"
+#include "modified-font-metric.hh"
#include "virtual-methods.hh"
#include "warn.hh"
#include "stencil.hh"
+
#include "ly-smobs.icc"
-#include "font-metric.hh"
-#include "string.hh"
Real
Font_metric::design_size () const
Stencil
Font_metric::find_by_name (String s) const
{
+ s.substitute_char ('-', "M");
int idx = name_to_index (s);
Box b;
SCM expr = SCM_EOL;
if (idx >= 0)
{
- expr = scm_list_3 (ly_symbol2scm ("char"),
+ expr = scm_list_3 (ly_symbol2scm ("named-glyph"),
self_scm (),
- scm_int2num (index_to_ascii (idx)));
+ scm_makfrom0str (s.to_str0 ())
+ );
b = get_indexed_char (idx);
}
IMPLEMENT_TYPE_P (Font_metric, "ly:font-metric?");
-LY_DEFINE (ly_find_glyph_by_name, "ly:find-glyph-by-name",
+LY_DEFINE (ly_font_get_glyph, "ly:font-get-glyph",
2, 0, 0,
(SCM font, SCM name),
- "This function retrieves a Stencil for the glyph named @var{name} "
- "in "
- "@var{font}. "
- "The font must be available as an AFM file. If the glyph "
- "is not found, @code{#f} is returned. ")
+ "Return a Stencil from @var{font} for the glyph named @var{name}. "
+ "@var{font} must be available as an AFM file. If the glyph "
+ "is not available, return @code{#f}.")
{
Font_metric *fm = unsmob_metrics (font);
SCM_ASSERT_TYPE (fm, font, SCM_ARG1, __FUNCTION__, "font-metric");
- SCM_ASSERT_TYPE (ly_c_string_p (name), name, SCM_ARG2, __FUNCTION__, "string");
+ SCM_ASSERT_TYPE (scm_is_string (name), name, SCM_ARG2, __FUNCTION__, "string");
Stencil m = fm->find_by_name (ly_scm2string (name));
{
Font_metric *fm = unsmob_metrics (font);
SCM_ASSERT_TYPE (fm, font, SCM_ARG1, __FUNCTION__, "font-metric");
- SCM_ASSERT_TYPE (ly_c_number_p (index), index, SCM_ARG2, __FUNCTION__, "number");
+ SCM_ASSERT_TYPE (scm_is_number (index), index, SCM_ARG2, __FUNCTION__, "number");
- return fm->get_ascii_char_stencil (ly_scm2int (index)).smobbed_copy ();
+ return fm->get_ascii_char_stencil (scm_to_int (index)).smobbed_copy ();
+}
+
+LY_DEFINE (ly_font_get_glyph_index, "ly:font-get-glyph-index",
+ 2, 0, 0,
+ (SCM font, SCM name),
+ "Return the index for @{name} in @var{font}.")
+{
+ Font_metric *fm = unsmob_metrics (font);
+ SCM_ASSERT_TYPE (fm, font, SCM_ARG1, __FUNCTION__, "font-metric");
+ SCM_ASSERT_TYPE (scm_is_string (name), name, SCM_ARG2, __FUNCTION__, "string");
+
+ return scm_from_int (fm->name_to_index (ly_scm2string (name)));
}
LY_DEFINE (ly_text_dimension,"ly:text-dimension",
Modified_font_metric*fm = dynamic_cast<Modified_font_metric*>
(unsmob_metrics (font));
SCM_ASSERT_TYPE (fm, font, SCM_ARG1, __FUNCTION__, "modified font metric");
- SCM_ASSERT_TYPE (ly_c_string_p (text), text, SCM_ARG2, __FUNCTION__, "string");
+ SCM_ASSERT_TYPE (scm_is_string (text), text, SCM_ARG2, __FUNCTION__, "string");
b = fm->text_dimension (ly_scm2string (text));
return scm_cons (ly_interval2scm (b[X_AXIS]), ly_interval2scm (b[Y_AXIS]));
}
-LY_DEFINE (ly_font_filename,"ly:font-filename",
+LY_DEFINE (ly_font_file_name,"ly:font-file-name",
1, 0, 0,
(SCM font),
"Given the font metric @var{font}, "
{
Font_metric *fm = unsmob_metrics (font);
SCM_ASSERT_TYPE (fm, font, SCM_ARG1, __FUNCTION__, "font-metric");
- return ly_car (fm->description_);
+ return scm_car (fm->description_);
}
{
Font_metric *fm = unsmob_metrics (font);
SCM_ASSERT_TYPE (fm, font, SCM_ARG1, __FUNCTION__, "font-metric");
- return ly_cdr (fm->description_);
+ return scm_cdr (fm->description_);
}
LY_DEFINE (ly_font_design_size,"ly:font-design-size", 1 , 0, 0,
Stencil
Font_metric::get_indexed_char_stencil (int code) const
{
- SCM at = scm_list_3 (ly_symbol2scm ("char"),
- self_scm (),
- scm_int2num (code));
+ int idx = index_to_ascii (code);
+ SCM at = scm_list_3 (ly_symbol2scm ("char"), self_scm (), scm_int2num (idx));
Box b = get_indexed_char (code);
return Stencil (b, at);
}
scm_makfrom0str (input_coding.to_str0 ()),
scm_makfrom0str (font_coding.to_str0 ()),
scm_int2num (code));
- return ly_scm2int (s);
+ return scm_to_int (s);
+}
+
+Offset
+Font_metric::attachment_point (String) const
+{
+ return Offset (0, 0);
}