151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
|
0, // (free)
0, // block
0 // remark
])
function sort_all() {
var s, s2, p_voice, v, time, w, wmin, ir, multi,
prev, nb,
nv = voice_tb.length,
vtb = [],
vn = [], /* voice indexed by range */
mrest_time = -1
for (v = 0; v < nv; v++)
vtb.push(voice_tb[v].sym)
/* initialize the voice order */
var fl = 1, // start a new time sequence
sy = cur_sy,
sy_w = 0,
sy_time = 0,
new_sy = true
while (1) {
if (new_sy && fl) {
new_sy = false;
multi = -1;
vn = []
for (v = 0; v < nv; v++) {
if (!sy.voices[v]) {
sy.voices[v] = {
range: -1
}
|
|
<
<
<
|
>
|
|
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
|
0, // (free)
0, // block
0 // remark
])
function sort_all() {
var s, s2, p_voice, v, time, w, wmin, ir, multi,
prev, nb, ir2, v2, sy,
nv = voice_tb.length,
vtb = [],
vn = [], /* voice indexed by range */
mrest_time = -1
for (v = 0; v < nv; v++)
vtb.push(voice_tb[v].sym)
/* initialize the voice order */
var fl = 1, // start a new time sequence
new_sy = cur_sy
while (1) {
if (new_sy && fl) {
sy = new_sy;
new_sy = null;
multi = -1;
vn = []
for (v = 0; v < nv; v++) {
if (!sy.voices[v]) {
sy.voices[v] = {
range: -1
}
|
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
|
if (s.nmes == 1)
mrest_expand(s)
else if (multi > 0)
mrest_time = time
}
}
if (wmin > 127) {
if (new_sy && !fl) { // if %%score with no common voice
fl = 1
continue
}
break // done
}
/* if some multi-rest and many voices, expand */
if (time == mrest_time) {
nb = 0
for (ir = 0; ir < nv; ir++) {
v = vn[ir]
if (v == undefined)
|
|
<
<
<
<
<
|
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
|
if (s.nmes == 1)
mrest_expand(s)
else if (multi > 0)
mrest_time = time
}
}
if (wmin > 127)
break // done
/* if some multi-rest and many voices, expand */
if (time == mrest_time) {
nb = 0
for (ir = 0; ir < nv; ir++) {
v = vn[ir]
if (v == undefined)
|
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
|
s = vtb[v]
if (s && s.type == MREST)
mrest_expand(s)
}
}
}
// continue the time sequence after STAVES
if (sy_w) {
if (sy_w < 0) { // init
sy_w = wmin
} else if (sy_time == time && sy_w == wmin) {
fl = 0
} else {
sy_w = 0
}
}
/* link the vertical sequence */
for (ir = 0; ir < nv; ir++) {
v = vn[ir]
if (v == undefined)
break
s = vtb[v]
if (!s || s.time != time
|| w_tb[s.type] != wmin)
continue
if (s.type == STAVES) {
sy = s.sy;
new_sy = true;
sy_w = -1;
sy_time = s.time
}
if (fl) {
fl = 0;
s.seqst = true
}
s.ts_prev = prev
if (prev)
|
<
<
<
<
<
<
<
<
<
<
<
|
|
>
>
>
>
>
>
|
>
>
>
>
>
>
|
>
|
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
|
s = vtb[v]
if (s && s.type == MREST)
mrest_expand(s)
}
}
}
/* link the vertical sequence */
for (ir = 0; ir < nv; ir++) {
v = vn[ir]
if (v == undefined)
break
s = vtb[v]
if (!s || s.time != time
|| w_tb[s.type] != wmin)
continue
if (s.type == STAVES) {
new_sy = s.sy;
// set all voices of previous and next staff systems
// as reachable
for (ir2 = 0; ir2 < nv; ir2++) {
if (vn[ir2] == undefined)
break
}
for (v2 = 0; v2 < nv; v2++) {
if (!new_sy.voices[v2])
continue
ir = new_sy.voices[v2].range
if (ir < 0
|| sy.voices[v2].range >= 0)
continue
vn[ir2++] = v2
}
}
if (fl) {
fl = 0;
s.seqst = true
}
s.ts_prev = prev
if (prev)
|
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
|
}
curvoice.time = maxtime;
s = {
type: STAVES,
dur: 0
}
// put the staves before a measure bar (see draw_bar())
var s2 = curvoice.last_sym
if (s2 && s2.type == BAR && s2.time == maxtime) {
curvoice.last_sym = s2.prev
if (!s2.prev)
curvoice.sym = s2.prev; // null
sym_link(s);
s.next = s2;
s2.prev = s;
curvoice.last_sym = s2
if (s2.eoln) {
s.eoln = true;
delete s2.eoln
}
} else {
sym_link(s) // link the staves in this voice
}
par_sy.nstaff = nstaff;
new_syst();
s.sy = par_sy
}
staves_found = maxtime
|
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
|
<
|
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
|
}
curvoice.time = maxtime;
s = {
type: STAVES,
dur: 0
}
sym_link(s); // link the staves in this voice
par_sy.nstaff = nstaff;
new_syst();
s.sy = par_sy
}
staves_found = maxtime
|
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
|
if (is_voice_sig()) {
curvoice.clef = s
return
}
// clef change
/* the clef must appear before a key signature or a bar */
s2 = curvoice.last_sym
if (s2 && s2.prev
&& s2.time == curvoice.time // if no time skip
&& ((s2.type == KEY && !s2.k_none) || s2.type == BAR)) {
for (s3 = s2; s3.prev; s3 = s3.prev) {
switch (s3.prev.type) {
case KEY:
case BAR:
continue
}
break
}
curvoice.last_sym = s3.prev;
sym_link(s);
s.next = s3;
s3.prev = s;
curvoice.last_sym = s2
} else {
sym_link(s)
|
|
>
>
>
>
>
>
|
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
|
if (is_voice_sig()) {
curvoice.clef = s
return
}
// clef change
/* the clef must appear before a key signature or a bar */
for (s2 = curvoice.last_sym;
s2 && s2.prev && s2.time == curvoice.time;
s2 = s2.prev) {
if (w_tb[s2.type] != 0)
break
}
if (s2 && s2.prev
&& s2.time == curvoice.time // if no time skip
&& ((s2.type == KEY && !s2.k_none) || s2.type == BAR)) {
for (s3 = s2; s3.prev; s3 = s3.prev) {
switch (s3.prev.type) {
case KEY:
case BAR:
continue
}
break
}
s2 = curvoice.last_sym;
curvoice.last_sym = s3.prev;
sym_link(s);
s.next = s3;
s3.prev = s;
curvoice.last_sym = s2
} else {
sym_link(s)
|