lilypond-0.1.56
[lilypond.git] / lily / translator-ctors.cc
blob2da67c365d39cff1e2164291e3c1e88a0fcdd21f
1 /*
2 translator-ctors.cc -- implement Translator construction
4 source file of the GNU LilyPond music typesetter
6 (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
7 */
9 #include "proto.hh"
10 #include "plist.hh"
11 #include "translator.hh"
12 #include "dictionary.hh"
13 #include "debug.hh"
15 Dictionary<Translator*> *global_translator_dict_p=0;
17 void
18 add_translator (Translator *t)
20 if (!global_translator_dict_p)
21 global_translator_dict_p = new Dictionary<Translator*>;
23 global_translator_dict_p->elem (t->name ()) = t;
26 Translator*
27 get_translator_l (String s)
29 if (global_translator_dict_p->elt_b (s))
31 return (*global_translator_dict_p)[s];
34 error (_("Unknown translator `") + s +"\'");
35 return 0;
38 Array<Translator_ctor> *ctor_global_static_arr_p_;
42 Very special greetings go out to Steve Jobs for creating a system
43 that doesn't handle global construction correctly.
45 void
46 add_constructor (Translator_ctor c)
48 if (!ctor_global_static_arr_p_)
49 ctor_global_static_arr_p_ = new Array<Translator_ctor>;
50 ctor_global_static_arr_p_->push (c);
53 void
54 call_constructors ()
56 for (int i=0; i < ctor_global_static_arr_p_->size (); i++)
57 add_translator (ctor_global_static_arr_p_->elem (i) ());