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