]> git.donarmstrong.com Git - lilypond.git/blob - lily/font-metric.cc
release: 1.3.13
[lilypond.git] / lily / font-metric.cc
1 /*   
2   font-metric.cc --  implement Font_metric
3   
4   source file of the GNU LilyPond music typesetter
5   
6   (c) 1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
7   
8  */
9
10 #include <math.h>
11 #include <ctype.h>
12
13
14 #include "font-metric.hh"
15
16 Box
17 Font_metric::text_dimension (String text) const
18 {
19   Interval ydims;
20   Real w=0.0;
21   
22   for (int i = 0; i < text.length_i (); i++) 
23     {
24       
25       if (text[i]=='\\') 
26         {
27           for (i++; (i < text.length_i ()) && isalpha(text[i]); i++)
28             ;
29           // ugh.
30           i--; // Compensate for the increment in the outer loop!
31         }
32       else
33         {
34           Character_metric const *c = get_char ((unsigned char)text[i],false);
35
36           // Ugh, use the width of 'x' for unknown characters
37           if (c->dimensions()[X_AXIS].length () == 0) 
38             c = get_char ((unsigned char)'x',false);
39           
40           w += c->dimensions()[X_AXIS].length ();
41           ydims.unite (c->dimensions()[Y_AXIS]);
42         }
43     }
44   if (ydims.empty_b ())
45     ydims = Interval (0,0);
46
47   return Box(Interval (0, w), ydims);
48 }
49
50
51 Box
52 Scaled_font_metric::text_dimension (String t) const
53 {
54   Real realmag = pow (1.2, magstep_i_);
55   Box b (orig_l_->text_dimension (t));
56
57   return Box(b[X_AXIS]* realmag, b[Y_AXIS]*realmag);
58 }
59
60
61 Box
62 Character_metric::dimensions () const
63 {
64   return Box(Interval(0,0), Interval(0,0));
65 }
66
67 Font_metric::~Font_metric ()
68 {
69   unsmobify_self ();
70 }
71
72 Font_metric::Font_metric ()
73 {
74   self_scm_ = SCM_EOL;
75   smobify_self ();
76 }
77
78 Font_metric::Font_metric (Font_metric const &)
79 {
80 }
81
82 Character_metric::~Character_metric()
83 {
84 }
85
86 Character_metric const *
87 Font_metric::get_char (int, bool)const
88 {
89   return 0;
90 }
91
92 Scaled_font_metric::Scaled_font_metric (Font_metric* m, int s)
93 {
94   magstep_i_ = s;
95   orig_l_ = m;
96 }
97
98 SCM
99 Font_metric::description () const
100 {
101   return gh_cons (ly_symbol2scm (name_str_.ch_C()), gh_int2scm (0));
102 }
103
104
105 SCM
106 Scaled_font_metric::description () const
107 {
108   SCM od = orig_l_->description ();
109   gh_set_cdr_x (od, gh_int2scm (magstep_i_));
110   return od;
111 }
112
113
114 void
115 Font_metric::do_smobify_self ()
116 {
117 }
118
119 SCM
120 Font_metric::mark_smob (SCM s)
121 {
122   return SCM_EOL;
123 }
124
125 int
126 Font_metric::print_smob (SCM s, SCM port, scm_print_state * )
127 {
128   scm_puts ("#<Font_metric>", port);
129   
130   return 1;
131 }
132
133
134
135