]> git.donarmstrong.com Git - lilypond.git/blob - src/inputcommand.cc
release: 0.0.19
[lilypond.git] / src / inputcommand.cc
1 #include "inputcommand.hh"
2 #include "debug.hh"
3 #include "command.hh"
4
5 Input_command::Input_command()
6 {
7 }
8
9 Input_command::Input_command(Real )
10 {
11 }
12
13 Input_command::operator Command()
14 {
15     Command c;
16     if (!args.sz())
17         return c;
18     
19     c.code = INTERPRET;
20     String s = args[0];
21         
22     int p=0;
23     if (s == "KEY")
24         p = 200;
25     else if (s=="CLEF")
26         p = 190;
27     else if (s == "METER")
28         p = 180;
29     else if (s == "BAR")
30         p = 170;
31     else if (s == "GROUPING")
32         p = 160;
33     
34     c.priority = p;
35     c.args = args;
36     
37     return c;    
38 }
39
40
41 Input_command*
42 get_partial_command(Real u)
43 {
44     Input_command*c = new Input_command;
45     c->args.add("PARTIAL");
46     c->args.add(u);
47     return c;
48 }
49
50 Input_command*
51 get_grouping_command(Real r,svec<int>a ) 
52 {
53     Input_command*c = get_grouping_command(a);
54     c->args.insert(r,1);
55     return c;
56 }
57
58 Input_command*
59 get_grouping_command(svec<int>a ) 
60 {
61     Input_command*c = new Input_command;
62     c->args.add("GROUPING");    
63     for (int i=0; i < a.sz(); i ++)
64         c->args.add(a[i]);
65
66     return c;
67 }
68
69 Input_command*
70 get_key_interpret_command(svec<int >a ) 
71 {
72     Input_command*c = new Input_command;
73     c->args.add("KEY");
74     for (int i=0; i < a.sz(); i ++) {
75         c->args.add(a[i]);
76     }
77     return c;
78 }
79
80 Input_command*
81 get_reset_command()
82 {
83     Input_command*c = new Input_command;
84     c->args.add("RESET");
85     return c;
86 }
87
88 Input_command *
89 get_meterchange_command(int n, int m)
90 {
91     Input_command*c = new Input_command;
92
93     c->args.add( "METER");
94     c->args.add( n );
95     c->args.add( m );
96
97     return c;
98 }
99
100 Input_command *
101 get_bar_command()
102 {
103     Input_command*c = new Input_command;
104
105     c->args.add( "BAR");
106     c->args.add( "|");
107
108     return c;
109 }
110
111 Input_command *
112 get_skip_command(int n, Real m)
113 {
114     Input_command*c = new Input_command;
115     
116     c->args.add( "SKIP");
117     c->args.add( n );
118     c->args.add( m );
119
120     return c;
121 }
122
123
124 void
125 Input_command::print()const
126 {
127     mtor << "{ ";
128     if (args.sz()) {
129         mtor<< " args: ";
130         for (int i = 0; i<args.sz(); i++)
131             mtor << "`"<<args[i] <<"',";
132     }
133     mtor << "}\n";
134 }
135
136 Input_command*
137 get_clef_interpret_command(String w)
138 {
139     Input_command*c = new Input_command;
140     c->args.add("CLEF");
141     c->args.add(w);
142     return c;
143 }
144
145 svec<int>
146 get_default_grouping(int count)
147 {
148     svec<int> s;
149     if (!(count % 3 )) {
150         for (int i=0; i < count/3; i++)
151             s.add(3);
152     } else if (!(count %2)) {
153         for (int i=0; i < count/2; i++)
154             s.add(2);
155     }else {
156         s.add(2);
157         s.concat(get_default_grouping(count-2));
158     }
159     return s;
160 }