2 paper-def.cc -- implement Paper_def
4 source file of the GNU LilyPond music typesetter
6 (c) 1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
11 #include "all-font-metrics.hh"
14 #include "paper-def.hh"
17 #include "score-engraver.hh"
18 #include "paper-score.hh"
19 #include "identifier.hh"
22 #include "dictionary-iter.hh"
23 #include "file-results.hh" // urg? header_global_p
24 #include "paper-outputter.hh"
25 #include "paper-stream.hh"
28 Paper_def::Paper_def ()
30 lookup_p_tab_p_ = new map<int, Lookup*>;
34 Paper_def::~Paper_def ()
36 for (map<int,Lookup*>::const_iterator ai = lookup_p_tab_p_->begin();
37 ai != lookup_p_tab_p_->end (); ai++)
42 delete lookup_p_tab_p_;
45 Paper_def::Paper_def (Paper_def const&s)
46 : Music_output_def (s)
48 shape_int_a_ = s.shape_int_a_;
49 lookup_p_tab_p_ = new map<int, Lookup*>;
51 for (map<int,Lookup*>::const_iterator ai = s.lookup_p_tab_p_->begin();
52 ai != s.lookup_p_tab_p_->end (); ai++)
54 Lookup * l = new Lookup (* (*ai).second);
55 set_lookup ((*ai).first, l);
61 Paper_def::get_var (String s) const
63 return get_realvar (ly_symbol2scm (s.ch_C()));
67 Paper_def::get_realvar (SCM s) const
69 if (!scope_p_->elem_b (s))
70 error (_f ("unknown paper variable: `%s'", ly_symbol2string (s)));
71 Real * p = scope_p_->elem (s)->access_content_Real (false);
74 error (_("not a real variable"));
82 FIXME. This is broken until we have a generic way of
83 putting lists inside the \paper block.
86 Paper_def::line_dimensions_int (int n) const
88 Real lw = get_var ("linewidth");
89 Real ind = n? 0.0:get_var ("indent");
91 return Interval (ind, lw);
95 Paper_def::set_lookup (int i, Lookup*l)
97 map<int,Lookup*> :: const_iterator it (lookup_p_tab_p_->find (i));
98 if (it != lookup_p_tab_p_->end ())
102 (*lookup_p_tab_p_)[i] = l;
110 Paper_def::interbeam_f (int multiplicity_i) const
112 if (multiplicity_i <= 3)
113 return get_var ("interbeam");
115 return get_var ("interbeam4");
120 Paper_def::print () const
123 Music_output_def::print ();
124 DEBUG_OUT << "Paper {";
125 for (map<int,Lookup*>::const_iterator ai = lookup_p_tab_p_->begin();
126 ai != lookup_p_tab_p_->end (); ai++)
128 DEBUG_OUT << "Lookup: " << (*ai).first
129 << " = " << (*ai).second->font_name_ << '\n';
136 Paper_def::lookup_l (int i) const
138 return (*lookup_p_tab_p_)[i];
143 int Paper_def::default_count_i_ = 0;
146 Paper_def::get_next_default_count () const
148 return default_count_i_ ++;
152 Paper_def::reset_default_count()
154 default_count_i_ = 0;
159 Paper_def::paper_stream_p () const
161 String outname = base_output_str ();
164 outname += String (".") + output_global_ch;
165 progress_indication (_f ("paper output to %s...",
166 outname == "-" ? String ("<stdout>") : outname));
169 target_str_global_array.push (outname);
170 return new Paper_stream (outname);
175 Paper_def::base_output_str () const
177 String str = get_default_output ();
181 str = default_outname_base_global;
182 int def = get_next_default_count ();
184 str += "-" + to_str (def);