Lines Matching defs:s

72 function error(sev,s,msg,a1,a2,a3,a4){var i,j,regex,tmp
75 if(s){if(s.err)
77 s.err=true}
86 if(s&&s.fname)
87 errbld(sev,msg,s.fname,s.istart)
95 function syntax(sev,msg,a1,a2,a3,a4){var s={fname:parse.fname,istart:parse.istart+parse.line.index}
96 error(sev,s,msg,a1,a2,a3,a4)}
124 function up_p(s,pos){switch(pos){case C.SL_ABOVE:return true
126 if(s.multi&&s.multi!=0)
127 return s.multi>0
128 if(!s.p_v.have_ly)
130 return s.pos.voc!=C.SL_ABOVE}
131 function d_arp(de){var m,h,dx,s=de.s,dd=de.dd,xc=5
132 if(s.type==C.NOTE){for(m=0;m<=s.nhd;m++){if(s.notes[m].acc){dx=5+s.notes[m].shac}else{dx=6-s.notes[m].shhd
133 switch(s.head){case C.SQUARE:dx+=3.5
139 h=3*(s.notes[s.nhd].pit-s.notes[0].pit)+4;m=dd.h
141 h=m;de.has_val=true;de.val=h;de.x-=xc;de.y=3*(s.notes[0].pit-18)-3}
144 var s,dd,dd2,up,x,dx,x2,i,s2=de.s,de2=de.start,de2_prev,de_next;s=de2.s;x=s.x+3;i=de2.ix
149 if(de2_prev&&de2_prev.s==s&&((de.up&&!de2_prev.up)||(!de.up&&de2_prev.up))){dd2=de2_prev.dd
155 if(de_next&&de_next.s==s&&((de.up&&!de_next.up)||(!de.up&&de_next.up))){dd2=de_next.dd
162 function d_near(de){var y,up,s=de.s,dd=de.dd
164 if(s.multi)
165 up=s.multi>0
167 up=s.stem<0
168 if(up){y=s.ymx|0}else if(dd.name[0]=='w'){de.inv=true
169 y=s.ymn}else{y=s.ymn-dd.h}
173 s.ymx=y+dd.h
175 s.ymn=y-dd.h
177 s.ymn=y
179 if(s.type==C.NOTE)
180 de.x+=s.notes[s.stem>=0?0:s.nhd].shhd
181 if(dd.name[0]=='d'&&s.nflags>=-1){if(up){if(s.stem>0)
182 de.x+=3.5}else{if(s.stem<0)
184 function d_pf(de){var dd2,x2,x,up,s=de.s,dd=de.dd,de_prev;if(de.ldst)
188 de.val=dd.wl+dd.wr;up=up_p(s,s.pos.vol)
190 de.up=true;x=s.x-dd.wl
192 if(de_prev.s==s&&((de.up&&!de_prev.up)||(!de.up&&de_prev.up))){dd2=de_prev.dd
195 de.x=x;de.y=y_get(s.st,up,x,de.val)
198 function d_slide(de){var m,dx,s=de.s,yc=s.notes[0].pit,xc=5
199 for(m=0;m<=s.nhd;m++){if(s.notes[m].acc){dx=4+s.notes[m].shac}else{dx=5-s.notes[m].shhd
200 switch(s.head){case C.SQUARE:dx+=3.5
204 if(s.notes[m].pit<=yc+3&&dx>xc)
209 var up,y,w,tmp,dd=de.dd,de2=de.prev,s2=de.s,st=s2.st,s=de.start.s,x=s.x
210 if(de2){x=de2.s.x+de.dd.wl+2
226 if(up){tmp=staff_tb[s.st].topbar+2
228 y=tmp}else{tmp=staff_tb[s.st].botbar-2
239 s.ymx=s2.ymx=y
241 s.ymn=s2.ymn=y}
246 var yc,up,inv,s=de.s,dd=de.dd,x=de.x,w=dd.wl+dd.wr,stafft=staff_tb[s.st].topbar+2,staffb=staff_tb[s.st].botbar-2
247 if(s.nhd)
248 x+=s.notes[s.stem>=0?0:s.nhd].shhd;up=-1
249 if(dd.func==4){up=0}else if(s.pos){switch(s.pos.orn){case C.SL_ABOVE:up=1
253 switch(dd.glyph){case"accent":case"roll":if(!up||(up<0&&(s.multi<0||(!s.multi&&s.stem>0)))){yc=y_get(s.st,false,s.x-dd.wl,w)-2
255 yc=staffb;yc-=dd.h;y_set(s.st,false,s.x,0,yc);inv=true;s.ymn=yc}else{yc=y_get(s.st,true,s.x-dd.wl,w)+2
257 yc=stafft;y_set(s.st,true,s.x-dd.wl,w,yc+dd.h);s.ymx=yc+dd.h}
260 if(dd.glyph=="brth"&&yc<s.ymx)
261 yc=s.ymx
262 for(s=s.ts_next;s;s=s.ts_next)
263 if(s.seqst)
265 x+=((s?s.x:realwidth)-x)*.45
269 if(dd.name!="invertedfermata"&&(up>0||(up<0&&s.multi>=0))){yc=y_get(s.st,true,s.x-dd.wl,w)+2+dd.hd
271 yc=stafft;y_set(s.st,true,s.x-dd.wl,w,yc+dd.h);s.ymx=yc+dd.h}else{yc=y_get(s.st,false,s.x-dd.wl,w)-3+dd.hd
273 yc=staffb;yc-=dd.h;y_set(s.st,false,s.x-dd.wl,w,yc-dd.hd)
275 inv=true;s.ymn=yc}
280 function deco_add(param){var dv=param.match(/(\S*)\s+(.*)/);decos[dv[1]]=dv[2]}
285 a=text.match(/(\d+)\s+(.+?)\s+([0-9.,]+)\s+([0-9.]+)\s+([0-9.]+)/)
318 function deco_cnv(a_dcn,s,prev){var i,j,dd,dcn,note,nd=a_dcn.length
323 switch(dd.func){case 0:if(s.type==C.BAR&&dd.name=="dot"){s.bar_dotted=true
325 case 1:case 2:if(!s.notes){error(1,s,errs.must_note_rest,dd.name)
328 case 8:if(s.type!=C.NOTE){error(1,s,errs.must_note,dd.name)
330 note=s.notes[s.nhd]
335 case 9:if(!s.notes){error(1,s,errs.must_note_rest,dd.name)
337 for(j=0;j<=s.nhd;j++){note=s.notes[j]
343 case 10:if(s.notes){for(j=0;j<=s.nhd;j++)
344 s.notes[j].color=dd.name}else{s.color=dd.name}
346 case 32:s.invis=true
348 case 33:if(s.type!=C.BAR){error(1,s,"!beamon! must be on a bar")
350 s.beam_on=true
352 case 34:if(s.type!=C.NOTE||!prev||prev.type!=C.NOTE||s.dur!=prev.dur){error(1,s,"!$1! must be on the last of a couple of notes",dd.name)
354 s.trem2=true;s.beam_end=true;s.beam_st=false;prev.beam_st=true;prev.beam_end=false;s.ntrem=prev.ntrem=Number(dd.name[4]);for(j=0;j<=s.nhd;j++)
355 s.notes[j].dur*=2;for(j=0;j<=prev.nhd;j++)
358 case 35:if(s.type!=C.NOTE){error(1,s,errs.must_note,dd.name)
360 s.xstem=true;continue
361 case 36:if(s.type!=C.NOTE){error(1,s,errs.must_note,dd.name)
364 s.beam_br1=true
366 s.beam_br2=true
368 case 37:s.rbstop=1
370 case 38:if(s.type!=C.NOTE){error(1,s,errs.must_note,dd.name)
372 s.trem1=true;s.ntrem=dd.name.length
374 case 39:if(s.type!=C.NOTE){error(1,s,errs.must_note,dd.name)
376 s.feathered_beam=dd.name[5]=='a'?1:-1;continue
377 case 40:s.stemless=true
379 case 41:s.rbstop=2
381 case 42:if(!s.notes[0].acc)
383 dcn="sacc"+s.notes[0].acc.toString()
386 if(!dd){error(1,s,errs.bad_val,"!editorial!")
388 delete s.notes[0].acc
389 curvoice.acc[s.notes[0].pit+19]=0
391 case 43:j=curvoice.acc[s.notes[0].pit+19]
392 if(s.notes[0].acc||!j)
394 if(!s.notes[0].a_dcn)
395 s.notes[0].a_dcn=[]
396 s.notes[0].a_dcn.push("cacc"+j)
398 if(!s.a_dd)
399 s.a_dd=[]
400 s.a_dd.push(dd)}}
401 function deco_update(s,dx){var i,de,nd=a_de.length
403 if(de.s==s)
405 function deco_width(s){var dd,i,wl=0,a_dd=s.a_dd,nd=a_dd.length
413 case 3:switch(dd.glyph){case"brth":case"lphr":case"mphr":case"sphr":if(s.wr<20)
414 s.wr=20
417 if(wl!=0&&s.prev&&s.prev.type==C.BAR)
422 var de,de2,dd,s,note,f,st,x,y,y2,ym,uf,i,str,a,new_de=[],ymid=[]
433 s=de.s
435 if(i>0){if(s.stem>=0)
440 set_sscale(s.st)
442 set_scale(s);st=de.st;if(!staff_tb[st].topbar)
445 if(de.m!=undefined){note=s.notes[de.m];if(note.shhd)
460 anno_start(s,'deco')
471 g_close();anno_stop(s,'deco')}
473 function draw_deco_near(){var s,g
474 function ldeco_update(s){var i,de,x=s.x-s.wl,nd=a_de.length
475 for(i=0;i<nd;i++){de=a_de[i];de.ix=i;de.s.x=de.x=x;de.defl.nost=true}}
476 function create_deco(s){var dd,k,l,pos,de,x,nd=s.a_dd.length
477 for(k=0;k<nd;k++){dd=s.a_dd[k]
480 case 3:case 4:pos=s.pos.orn
482 case 6:pos=s.pos.vol
484 case 7:pos=s.pos.dyn
488 de={s:s,dd:dd,st:s.st,ix:a_de.length,defl:{},x:s.x,y:s.y,}
489 if(s.type==C.BAR)
490 de.x-=s.wl/2-2
496 function create_dh(s,m){var f,str,de,uf,k,dcn,dd,note=s.notes[m],nd=note.a_dcn.length
510 case 40:s.stemless=true
512 de={s:s,dd:dd,st:s.st,m:m,ix:0,defl:{},x:s.x,y:3*(note.pit-18),}
515 function create_all(s){if(s.a_dd)
516 create_deco(s)
517 if(s.notes){for(var m=0;m<s.notes.length;m++){if(s.notes[m].a_dcn)
518 create_dh(s,m)}}}
519 function ll_deco(){var i,j,de,de2,dd,dd2,v,s,st,n_de=a_de.length
523 dd=de.dd;dd2=dd.dd_en;s=de.s;v=s.v
525 if(!de2.start&&de2.dd==dd2&&de2.s.v==v)
527 if(j==n_de){st=s.st;for(j=i+1;j<n_de;j++){de2=a_de[j]
528 if(!de2.start&&de2.dd==dd2&&de2.s.st==st)
530 if(j==n_de){de2={s:s,st:de.st,dd:dd2,ix:a_de.length-1,x:realwidth-6,y:s.y,lden:true,defl:{noen:true}}
531 if(de2.x<s.x+10)
532 de2.x=s.x+10
536 if(i>0&&a_de[i-1].s.time==de.s.time&&a_de[i-1].dd.name.slice(0,dd.name.length-1)==dd.name.slice(0,dd.name.length-1))
541 s=de2.s;de={s:prev_scut(s),st:de2.st,dd:de2.dd.dd_st,ix:a_de.length-1,y:s.y,ldst:true}
542 de.x=de.s.x
545 for(s=tsfirst;s;s=s.ts_next){switch(s.type){case C.CLEF:case C.KEY:case C.METER:continue}
548 ldeco_update(s)
549 for(;s;s=s.ts_next){switch(s.type){case C.BAR:case C.MREST:case C.NOTE:case C.REST:case C.SPACE:break
550 case C.GRACE:for(g=s.extra;g;g=g.next)
554 create_all(s)}
560 function draw_deco_staff(){var s,p_voice,y,i,v,de,dd,minmax=new Array(nstaff+1),nd=a_de.length
561 function draw_repbra(p_voice){var s,s1,x,y,y2,i,p,w,wh,first_repeat;y=staff_tb[p_voice.st].topbar+25
562 for(s=p_voice.sym;s;s=s.next){if(s.type!=C.BAR)
564 if(!s.rbstart||s.norepbra)
566 if(!s.next)
568 if(!first_repeat){first_repeat=s;set_font("repeat")}
569 s1=s
570 for(;;){if(!s.next)
572 s=s.next
573 if(s.rbstop)
575 y2=y_get(p_voice.st,true,s1.x,s.x-s1.x)
582 if(s.rbstart)
583 s=s.prev}
584 s=first_repeat
585 if(!s)
588 for(;s;s=s.next){if(!s.rbstart||s.norepbra)
590 s1=s
591 while(1){if(!s.next)
593 s=s.next
594 if(s.rbstop)
596 if(s1==s)
599 if(cfmt.measurenb>0&s.bar_num&&s.bar_num%cfmt.measurenb)
601 if(s.type!=C.BAR){w=s.rbstop?0:s.x-realwidth+4}else if((s.bar_type.length>1&&s.bar_type!="[]")||s.bar_type=="]"){if(s1.st>0&&!(cur_sy.staves[s1.st-1].flags&STOP_BAR))
602 w=s.wl
603 else if(s.bar_type.slice(-1)==':')
605 else if(s.bar_type[0]!=':')
608 w=8}else{w=s.rbstop?0:8}
609 w=(s.x-x-w)
610 if(!s.next&&!s.rbstop&&!p_voice.bar_start){p_voice.bar_start=clone(s);p_voice.bar_start.type=C.BAR;p_voice.bar_start.bar_type=""
616 if(s.rbstop==2)
618 if(s.rbstart)
619 s=s.prev}}
649 function draw_measnb(){var s,st,bar_num,x,y,w,any_nb,font_size,w0,sy=cur_sy
657 set_font("measure");w0=cwidf('0');s=tsfirst;bar_num=gene.nbar
660 y=staff_tb[st].topbar+14;xy_str(0,y,bar_num.toString());y_set(st,true,0,20,y+gene.curfont.size+2)}else if(bar_num%cfmt.measurenb==0){for(;;s=s.ts_next){switch(s.type){case C.CLEF:case C.KEY:case C.METER:case C.STBRK:continue}
662 if(s.type!=C.BAR||!s.bar_num){if(s.prev)
663 s=s.prev;any_nb=true;w=w0
668 x=s.x+s.wr+1
675 for(;s;s=s.ts_next){switch(s.type){case C.STAVES:sy=s.sy
681 case C.BAR:if(!s.bar_num||s.bar_num<=1)
684 bar_num=s.bar_num
685 if(cfmt.measurenb==0||(bar_num%cfmt.measurenb)!=0||!s.next||s.bar_mrep)
693 x=s.x-w*(s.text?.6:.4)
697 if(s.next.type==C.NOTE){if(s.next.stem>0){if(y<s.next.ys-gene.curfont.size)
698 y=s.next.ys-gene.curfont.size}else{if(y<s.next.y)
699 y=s.next.y}}
707 function draw_partempo(st,top){var s,some_part,some_tempo,h,w,y,dy=0,ht=0
709 for(s=tsfirst;s;s=s.ts_next){if(s.type!=C.TEMPO||s.invis)
712 some_tempo=s;w=s.tempo_wh[0]
713 if(s.time==0&&s.x>40)
714 s.x=40;y=y_get(st,true,s.x-16,w)
717 if(x>=s.x-16&&!(dosh&(shift>>1)))
718 dosh|=shift;shift<<=1;x=s.x-16+w}
724 for(s=some_tempo;s;s=s.ts_next){if(s.type!=C.TEMPO||s.invis)
726 if(user.anno_start||user.anno_stop){s.wl=16;s.wr=30;s.ymn=(dosh&1)?h:y;s.ymx=s.ymn+14;anno_start(s)}
727 writempo(s,s.x-16,(dosh&1)?h:y);anno_stop(s);dosh>>=1
728 while(s.ts_next&&s.ts_next.type==C.TEMPO)
729 s=s.ts_next}}
731 for(s=tsfirst;s;s=s.ts_next){if(s.type!=C.PART||s.invis)
733 if(!some_part){some_part=s;set_font("parts");h=gene.curfont.size+2+
735 w=strwh(s.text)[0];y=y_get(st,true,s.x-10,w+3)
741 for(s=some_part;s;s=s.ts_next){if(s.type!=C.PART||s.invis)
743 s.x-=10;if(user.anno_start||user.anno_stop){w=strwh(s.text)[0];s.wl=0;s.wr=w;s.ymn=-ht-h;s.ymx=s.ymn+h;anno_start(s)}
744 xy_str(s.x,2-ht-h,s.text);anno_stop(s)
745 while(s.ts_next&&s.ts_next.type==C.PART)
746 s=s.ts_next}}
762 function sym_dup(s){var m,note
763 s=clone(s)
764 s.invis=true
765 delete s.extra;delete s.text
766 delete s.a_gch
767 delete s.a_ly
768 delete s.a_dd;delete s.tp
769 s.notes=clone(s.notes)
770 for(m=0;m<=s.nhd;m++){note=s.notes[m]=clone(s.notes[m])
772 return s}
774 Abc.prototype.calculate_beam=function(bm,s1){var s,s2,g,notes,nflags,st,v,two_staves,two_dir,x,y,ys,a,b,stem_err,max_stem_err,p_min,p_max,s_closest,stem_xoff,scale,visible,dy
775 if(!s1.beam_st){s=sym_dup(s1);lkvsym(s,s1);lktsym(s,s1);s.x-=12
776 if(s.x>s1.prev.x+12)
777 s.x=s1.prev.x+12;s.beam_st=true
778 delete s.beam_end;s.tmp=true
779 delete s.sls;s1=s}
793 s=sym_dup(s2);s.next=s2.next
794 if(s.next)
795 s.next.prev=s;s2.next=s;s.prev=s2;s.ts_next=s2.ts_next
796 if(s.ts_next)
797 s.ts_next.ts_prev=s;s2.ts_next=s;s.ts_prev=s2
798 delete s.beam_st;s.beam_end=true;s.tmp=true
799 delete s.sls;s.x+=12
800 if(s.x<realwidth-12)
801 s.x=realwidth-12;s2=s;notes++
809 for(s=s1;;s=s.next){if(s.type!=C.NOTE)
811 if((scale=s.p_v.scale)==1)
812 scale=staff_tb[s.st].staffscale
813 if(s.stem>=0){x=stem_xoff+s.notes[0].shhd
814 if(s.notes[s.nhd].pit>p_max){p_max=s.notes[s.nhd].pit;s_closest=s}}else{x=-stem_xoff+s.notes[s.nhd].shhd
815 if(s.notes[0].pit<p_min){p_min=s.notes[0].pit;s_closest=s}}
816 s.xs=s.x+x*scale;if(s==s2)
818 if(s.grace&&cfmt.flatbeams)
828 max_stem_err=0;s=s1
835 while(s.ts_prev&&s.ts_prev.type==C.NOTE&&s.ts_prev.time==s.time&&s.ts_prev.x>s1.xs)
836 s=s.ts_prev
837 for(;s&&s.time<=s2.time;s=s.ts_next){if(s.type!=C.NOTE||s.invis||(s.st!=st&&s.v!=v)){continue}
838 x=s.v==v?s.xs:s.x;ys=a*x+b-staff_tb[s.st].y
839 if(s.v==v){stem_err=min_tb[s.nhd==0?0:1][s.nflags]
840 if(s.stem>0){if(s.notes[s.nhd].pit>26){stem_err-=2
841 if(s.notes[s.nhd].pit>28)
843 stem_err-=ys-3*(s.notes[s.nhd].pit-18)}else{if(s.notes[0].pit<18){stem_err-=2
844 if(s.notes[0].pit<16)
846 stem_err-=3*(s.notes[0].pit-18)-ys}
847 stem_err+=BEAM_DEPTH+BEAM_SHIFT*(s.nflags-1)}else{if(s1.stem>0){if(s.stem>0){if(s.ymn>ys+4||s.ymx<ys-beam_h-2)
849 if(s.v>v)
850 stem_err=s.ymx-ys
852 stem_err=s.ymn+8-ys}else{stem_err=s.ymx-ys}}else{if(s.stem<0){if(s.ymx<ys-4||s.ymn>ys-beam_h-2)
854 if(s.v<v)
855 stem_err=ys-s.ymn
857 stem_err=ys-s.ymx+8}else{stem_err=ys-s.ymn}}
860 max_stem_err=stem_err}}else{for(;;s=s.next){ys=a*s.xs+b-staff_tb[s.st].y;stem_err=GSTEM-2
861 if(s.stem>0)
862 stem_err-=ys-(3*(s.notes[s.nhd].pit-18))
864 stem_err+=ys-(3*(s.notes[0].pit-18));stem_err+=3*(s.nflags-1)
867 if(s==s2)
872 for(s=s1.next;;s=s.next){switch(s.type){case C.REST:g=s.ts_next
875 case C.BAR:if(s.invis)
877 case C.CLEF:y=a*s.x+b
878 if(s1.stem>0){y=s.ymx-y
882 b+=y}else{y=s.ymn-y
888 case C.GRACE:for(g=s.extra;g;g=g.next){y=a*g.x+b
899 if(s==s2)
903 for(s=s1;;s=s.next){switch(s.type){case C.NOTE:s.ys=a*s.xs+b-staff_tb[s.st].y
904 if(s.stem>0){s.ymx=s.ys+2.5
905 if(s.ts_prev&&s.ts_prev.stem>0&&s.ts_prev.st==s.st&&s.ts_prev.ymn<s.ymx&&s.ts_prev.x==s.x&&s.notes[0].shhd==0){s.ts_prev.x-=3;s.ts_prev.xs-=3}}else{s.ymn=s.ys-2.5}
907 case C.REST:y=a*s.x+b-staff_tb[s.st].y
909 +(s.head!=C.FULL?4:9)
913 if(s.y<=y)
917 if(s.y>=y)
919 if(s.head!=C.FULL)
920 y=(((y+3+12)/6)|0)*6-12;s.y=y
922 if(s==s2)
928 function draw_beams(bm){var s,i,beam_dir,shift,bshift,bstub,bh,da,k,k1,k2,x1,s1=bm.s1,s2=bm.s2
929 function draw_beam(x1,x2,dy,h,bm,n){var y1,dy2,s=bm.s1,nflags=s.nflags
930 if(s.ntrem)
931 nflags-=s.ntrem
932 if(s.trem2&&n>nflags){if(s.dur>=C.BLEN/2){x1=s.x+6;x2=bm.s2.x-6}else if(s.dur<C.BLEN/4){x1+=5;x2-=6}}
942 for(s=s1;;s=s.next){if(s.type==C.NOTE&&s.stem!=beam_dir)
943 s.ys=bm.a*s.xs+bm.b
944 -staff_tb[s.st].y
945 +bshift*(s.nflags-1)*s.stem
947 if(s==s2)
956 for(s=s1;;s=s.next){if(s.type!=C.NOTE||s.nflags<i){if(s==s2)
959 if(s.trem1&&i>s.nflags-s.ntrem){x1=(s.dur>=C.BLEN/2)?s.x:s.xs;draw_beam(x1-5,x1+5,(shift+2.5)*beam_dir,bh,bm,i)
960 if(s==s2)
963 k1=s
964 while(1){if(s==s2)
966 k=s.next
971 s=k}
972 k2=s
986 if(s==s2)
1032 function draw_meter(s){if(!s.a_meter)
1034 var dx,i,j,meter,x,st=s.st,p_staff=staff_tb[st],y=p_staff.y;if(p_staff.stafflines!='|||||')
1036 for(i=0;i<s.a_meter.length;i++){meter=s.a_meter[i];x=s.x+s.x_meter[i]
1066 Abc.prototype.draw_hl=function(s){var i,j,n,note,hla=[],st=s.st,p_staff=staff_tb[st]
1069 for(i=0;i<=s.nhd;i++){note=s.notes[i]
1075 var dx1,dx2,hl,shhd,hlp,stafflines=p_staff.stafflines,top=stafflines.length-1,yu=top,bot=p_staff.botline/6,yl=bot,dx=s.grace?4:hw_tb[s.head]*1.3
1076 note=s.notes[s.stem<0?s.nhd:0]
1085 set_hl(p_staff,hlp>>1,s.x,dx1,dx2)}
1089 set_hl(p_staff,yl,s.x,dx1,dx2)
1091 set_hl(p_staff,yu,s.x,dx1,dx2)
1100 set_hl(p_staff,i,s.x,dx1,dx2)}}
1102 Abc.prototype.draw_keysig=function(x,s){if(s.k_none||s.k_play)
1104 var old_sf=s.k_old_sf,st=s.st,staffb=staff_tb[st].y,i,shift,p_seq,clef_ix=s.k_y_clef
1109 if(!s.k_a_acc){if(cfmt.cancelkey||s.k_sf==0){if(s.k_sf==0||old_sf*s.k_sf<0){shift=sharp_cl[clef_ix];p_seq=shift>9?sharp1:sharp2
1113 if(s.k_sf!=0)
1115 if(s.k_sf>0){shift=sharp_cl[clef_ix];p_seq=shift>9?sharp1:sharp2
1116 for(i=0;i<s.k_sf;i++){xygl(x,staffb+shift,"acc1");shift+=p_seq[i];x+=5.5}
1119 if(s.k_sf<0){shift=flat_cl[clef_ix];p_seq=shift<18?flat1:flat2
1120 for(i=0;i>s.k_sf;i--){xygl(x,staffb+shift,"acc-1");shift+=p_seq[-i];x+=5.5}
1122 for(;i>old_sf;i--){xygl(x,staffb+shift,"acc3");shift+=p_seq[-i];x+=5.5}}}}else if(s.k_a_acc.length){var acc,last_acc=s.k_a_acc[0].acc,last_shift=100,s2={st:st,nhd:0,notes:[{}]}
1123 for(i=0;i<s.k_a_acc.length;i++){acc=s.k_a_acc[i];shift=(s.k_y_clef
1141 function draw_rest(s){var s2,i,j,x,y,yb,bx,p_staff=staff_tb[s.st]
1142 if(s.dur_orig==s.p_v.meter.wmeasure||(s.rep_nb&&s.rep_nb>=0)){if(s.dur<C.BLEN*2)
1143 s.nflags=-2
1144 else if(s.dur<C.BLEN*4)
1145 s.nflags=-3
1147 s.nflags=-4;s.dots=0;s2=s.ts_next
1148 while(s2.time!=s.time+s.dur&&s2.ts_next)
1151 s2=s
1154 if(s.a_dd)
1155 deco_update(s,x-s.x);s.x=x}else{x=s.x
1156 if(s.notes[0].shhd)
1157 x+=s.notes[0].shhd*stv_g.scale}
1158 if(s.invis)
1161 if(s.rep_nb){set_sscale(s.st);anno_start(s);if(p_staff.stafflines=='|||||')
1165 if(s.rep_nb<0){xygl(x,yb,"srep")}else{xygl(x,yb,"mrep")
1166 if(s.rep_nb>2&&s.v==cur_sy.top_voice&&cfmt.measrepnb>0&&!(s.rep_nb%cfmt.measrepnb))
1167 nrep_out(x,yb+p_staff.topbar,s.rep_nb)}
1168 anno_a.push(s)
1170 set_scale(s);anno_start(s);if(s.notes[0].color)
1171 set_color(s.notes[0].color);y=s.y;i=5-s.nflags
1174 if(!s.notes[0].invis)
1187 if(s.dots){x+=8;y+=yb+3
1188 j=s.dots
1189 i=(s.dur_orig/12)>>((5-s.nflags)-j)
1192 set_color();anno_a.push(s)}
1193 function draw_gracenotes(s){var yy,x0,y0,x1,y1,x2,y2,x3,y3,bet1,bet2,slur,dy1,dy2,g,last,note,bm={}
1194 for(g=s.extra;g;g=g.next){if(g.beam_st&&!g.beam_end){if(self.calculate_beam(bm,g))
1199 anno_a.push(s)
1204 if(s.sappo){g=s.extra
1211 if(s.p_v.ckey.k_bagpipe||!cfmt.graceslurs||slur||s.tie_s||!s.next||s.next.type!=C.NOTE)
1214 if(((g.stem>=0||s.multi<0)&&g.notes[0].pit<=28)||g.notes[0].pit<16){yy=127
1215 for(g=s.extra;g;g=g.next){if(g.y<yy){yy=g.y;last=g}}
1217 if(s.extra!=last){x0-=4;y0+=1}
1218 s=s.next;x3=s.x-1
1219 if(s.stem<0&&s.nflags>-2)
1220 x3-=4;y3=3*(s.notes[0].pit-18)-5;dy1=(x3-x0)*.4
1223 if(y0>y3+7){x0=last.x-1;y0+=.5;y3+=6.5;x3=s.x-5.5;dy1=(y0-y3)*.8;dy2=(y0-y3)*.2;bet1=0}else if(y3>y0+4){y3=y0+4;x0=last.x+2;y0=last.y-4}}else{yy=-127
1224 for(g=s.extra;g;g=g.next){if(g.y>yy){yy=g.y;last=g}}
1226 if(s.extra!=last){x0-=4;y0-=1}
1227 s=s.next;x3=s.x-1
1228 if(s.stem>=0&&s.nflags>-2)
1229 x3-=2;y3=3*(s.notes[s.nhd].pit-18)+5;dy1=(x0-x3)*.4
1232 if(y0<y3-7){x0=last.x-1;y0-=.5;y3-=6.5;x3=s.x-5.5;dy1=(y0-y3)*.8;dy2=(y0-y3)*.2;bet1=0}else if(y3<y0-4){y3=y0-4;x0=last.x+2;y0=last.y+4}}
1233 x1=bet1*x3+(1-bet1)*x0-x0;y1=bet1*y3+(1-bet1)*y0-dy1-y0;x2=bet2*x3+(1-bet2)*x0-x0;y2=bet2*y3+(1-bet2)*y0-dy2-y0;anno_start(s,'slur');xypath(x0,y0+staff_tb[s.st].y);output+='c'+x1.toFixed(1)+' '+(-y1).toFixed(1)+' '+x2.toFixed(1)+' '+(-y2).toFixed(1)+' '+(x3-x0).toFixed(1)+' '+(-y3+y0).toFixed(1)+'"/>\n';anno_stop(s,'slur')}
1234 function setdoty(s,y_tb){var m,m1,y
1235 for(m=0;m<=s.nhd;m++){y=3*(s.notes[m].pit-18)
1236 if((y%6)==0){if(s.dot_low)
1241 for(m=0;m<s.nhd;m++){if(y_tb[m+1]>y_tb[m])
1247 if(3*(s.notes[m1].pit-18)-y_tb[m1]<y_tb[m+1]-3*(s.notes[m+1].pit-18)){while(m1<=m)
1249 function x_head(s,note){return s.x+note.shhd*stv_g.scale}
1250 function y_head(s,note){return staff_tb[s.st].y+3*(note.pit-18)}
1251 function draw_basic_note(x,s,m,y_tb){var i,p,yy,dotx,doty,inv,old_color=false,note=s.notes[m],staffb=staff_tb[s.st].y,y=3*(note.pit-18),shhd=note.shhd*stv_g.scale,x_note=x+shhd,y_note=y+staffb
1252 var elts=identify_note(s,note.dur),head=elts[0],dots=elts[1],nflags=elts[2]
1253 if(note.invis){}else if(s.grace){p="ghd";x_note-=4.5*stv_g.scale}else if(note.map&&note.map[0]){i=s.head;p=note.map[0][i]
1257 if(i>=0){if(s.stem>=0)
1260 p=p.slice(i+1)}}else if(s.type==C.CUSTOS){p="custos"}else{switch(head){case C.OVAL:p="HD"
1262 case C.OVALBARS:if(s.head!=C.SQUARE){p="HDD"
1265 inv=s.stem>0}
1266 if(!tsnext&&s.next&&s.next.type==C.BAR&&!s.next.next)
1281 if(dots){dotx=x+(7.7+s.xmx)*stv_g.scale
1282 if(y_tb[m]==undefined){y_tb[m]=3*(s.notes[m].pit-18)
1283 if((s.notes[m].pit&1)==0)
1290 if(!s.grace){draw_acc(x,y+staffb,note.acc)}else{g_open(x,y+staffb,0,.75);draw_acc(0,0,note.acc)
1294 function draw_note(s,fl){var s2,i,m,y,staffb,slen,c,nflags,x,y,note,y_tb=new Array(s.nhd+1)
1295 if(s.dots)
1296 setdoty(s,y_tb)
1297 note=s.notes[s.stem<0?s.nhd:0];x=x_head(s,note)
1298 staffb=staff_tb[s.st].y
1299 self.draw_hl(s)
1300 y=y_head(s,note)
1301 if(!s.stemless){slen=s.ys-s.y;nflags=s.nflags
1302 if(s.ntrem)
1303 nflags-=s.ntrem
1304 if(!fl||nflags<=0){if(s.nflags>0){if(s.stem>=0)
1308 out_stem(x,y,slen,s.grace)}else{out_stem(x,y,slen,s.grace,nflags,cfmt.straightflags)}}else if(s.xstem){s2=s.ts_prev;slen=(s2.stem>0?s2.y:s2.ys)-s.y;slen+=staff_tb[s2.st].y-staffb;out_stem(x,y,slen)}
1309 if(fl&&s.trem1){var ntrem=s.ntrem||0,x1=x;slen=3*(s.notes[s.stem>0?s.nhd:0].pit-18)
1310 if(s.head==C.FULL||s.head==C.EMPTY){x1+=(s.grace?GSTEM_XOFF:3.5)*s.stem
1311 if(s.stem>0)
1314 slen-=6+5.4}else{if(s.stem>0)
1318 slen/=s.p_v.scale;out_trem(x1,staffb+slen,ntrem)}
1319 x=s.x
1320 for(m=0;m<=s.nhd;m++)
1321 draw_basic_note(x,s,m,y_tb)}
1322 function prev_scut(s){while(s.prev){s=s.prev
1323 if(s.rbstart)
1324 return s}
1325 s=s.p_v.sym
1326 while(s.type!=C.CLEF)
1327 s=s.ts_prev
1328 if(s.next&&s.next.type==C.KEY)
1329 s=s.next
1330 if(s.next&&s.next.type==C.METER)
1331 return s.next
1332 return s}
1333 function slur_direction(k1,k2){var s,some_upstem,low,dir
1344 for(s=k1;;s=s.next){if(s.type==C.NOTE){if(!s.stemless){if(s.stem<0)
1347 if(s.notes[0].pit<22)
1349 if(s.time==k2.time)
1515 function draw_slurs(s,last){var gr1,i,m,note,sls,nsls
1516 function draw_sls(s,sl,snote){var k,v,i,dir,path=[],enote=sl.note,s2=enote.s
1519 if(tsnext&&s2.time>=tsnext.time){s.p_v.sls.push(sl);s2=s.p_v.s_next.prev
1521 s2=s2.next;sl=Object.create(sl);sl.note={s:s2}}
1524 default:dir=s.v!=s2.v?1:slur_direction(s,s2)
1528 if(s.v==s2.v){v=s.v}if(!cur_sy.voices[s.v]||!cur_sy.voices[s2.v]){v=s.v>s2.v?s.v:s2.v}else if(dir*(cur_sy.voices[s.v].range<=cur_sy.voices[s2.v].range?1:-1)>0)
1529 v=s.v
1532 if(gr1&&!(s2.grace&&s.v==s2.v&&s.time==s2.time)){do{path.push(s);s=s.next}while(s);s=gr1.next}else{path.push(s);if(s.grace)
1533 s=s.next
1535 s=s.ts_next}
1536 if(!s2.grace){while(s){if(s.v==v)
1537 path.push(s)
1538 if(s==s2)
1540 s=s.ts_next}}else if(s.grace){while(1){path.push(s)
1541 if(s==s2)
1543 s=s.next}}else{k=s2
1546 while(1){if(s.v==v)
1547 path.push(s)
1548 if(s.extra==k)
1550 s=s.ts_next}
1551 s=k
1552 while(1){path.push(s)
1553 if(s==s2)
1555 s=s.next}}
1556 for(i=1;i<path.length-1;i++){s=path[i]
1557 if(s.sls||s.sl1)
1558 draw_slurs(s,last)
1559 if(s.tp)
1560 draw_tuplet(s)}
1563 while(1){if(!s||s==last){if(!gr1||!(s=gr1.next)||s==last)
1566 if(s.type==C.GRACE){gr1=s;s=s.extra
1568 if(s.sls){sls=s.sls
1569 s.sls=null
1571 for(i=0;i<sls.length;i++){if(!draw_sls(s,sls[i]))
1574 s.sls=nsls}
1575 if(s.sl1){for(m=0;m<=s.nhd;m++){note=s.notes[m]
1579 for(i=0;i<sls.length;i++){if(!draw_sls(s,sls[i],note))
1583 s=s.next}}
1732 function draw_note_ties(not1,job){var m,x1,x2,s,y,h,time,not2=not1.tie_n,p=job==2?not1.pit:not2.pit,dir=(not1.tie_ty&0x07)==C.SL_ABOVE?1:-1,s1=not1.s,st=s1.st,s2=not2.s,x2=s2.x,sh=not1.shhd
1764 for(s=s1.ts_next;s;s=s.ts_next)
1765 if(s.time>time)
1767 x2=s?s.x:realwidth}
1782 not1.tie_n={s:k2||k1}
1789 if(!not1.s)
1790 not1.s=k1
1810 if(!not3.s)
1811 not3.s=k3
1820 function draw_all_ties(p_voice){var s,s1,s2,clef_chg,time,x,dx,s_next,m
1825 while(1){for(s1=s_next;s1;s1=s1.next){if(s1.ti2&&(s1!=s_next||!s_next.prev)){s=s1.ti2
1826 s.x=s1.x
1827 s2=s.next
1828 s.next=s1
1829 s.st=s1.st
1830 s.time=s1.time-s.dur
1831 draw_ties(s,s1,1)
1832 s.next=s2}
1839 s=s1
1840 while(1){if(!s.next){s2=s
1841 s=null
1843 s=s.next
1844 if(s==s2)
1846 s=s1
1847 while(1){if(!s.ts_next){s=null
1849 s=s.ts_next
1850 if(s==s2)
1852 if(!s){s2=s1
1855 if(!s){draw_ties_g(s1,s2,2);break}
1856 time=s1.time+s.dur
1857 for(s=s1.ts_next;s!=s2;s=s.ts_next){if(s.st!=s1.st)
1859 if(s.time>time)
1861 if(s.type==C.CLEF){clef_chg=true
1870 function draw_sym_near(){var p_voice,p_st,s,v,st,y,g,w,i,st,dx,top,bot,ymn,output_sav=output;function set_yab(s1,s2){var y,k=realwidth/YSTEP,i=(s1.x/k)|0,j=(s2.x/k)|0,a=(s1.ys-s2.ys)/(s1.xs-s2.xs),b=s1.ys-s1.xs*a,p_st=staff_tb[s1.st]
1886 for(s=p_voice.sym;s;s=s.next){switch(s.type){case C.GRACE:for(g=s.extra;g;g=g.next){if(g.beam_st&&!g.beam_end){self.calculate_beam(bm,g)
1890 case C.NOTE:if((s.beam_st&&!s.beam_end)||(first_note&&!s.beam_st)){first_note=false;self.calculate_beam(bm,s)
1892 set_yab(s,bm.s2)}
1895 for(s=tsfirst;s;s=s.ts_next){if(s.invis)
1897 switch(s.type){case C.GRACE:for(g=s.extra;g;g=g.next){y_set(s.st,true,g.x-2,4,g.ymx+1);y_set(s.st,false,g.x-2,4,g.ymn-5)}
1899 case C.MREST:y_set(s.st,true,s.x+16,32,s.ymx+2)
1901 default:y_set(s.st,true,s.x-s.wl,s.wl+s.wr,s.ymx+2);y_set(s.st,false,s.x-s.wl,s.wl+s.wr,s.ymn-2)
1904 if(s.stem>0){if(s.stemless){dx=-5;w=10}else if(s.beam_st){dx=3;w=s.beam_end?4:10}else{dx=-8;w=s.beam_end?11:16}
1905 y_set(s.st,true,s.x+dx,w,s.ymx);ymn=s.ymn
1906 if(s.notes[0].acc&&ymn>3*(s.notes[0].pit-18)-9)
1907 ymn=3*(s.notes[0].pit-18)-9
1908 y_set(s.st,false,s.x-s.wl,s.wl+s.wr,ymn)}else{y_set(s.st,true,s.x-s.wl,s.wl+s.wr,s.ymx);if(s.stemless){dx=-5;w=10}else if(s.beam_st){dx=-6;w=s.beam_end?4:10}else{dx=-8;w=s.beam_end?5:16}
1909 dx+=s.notes[0].shhd;y_set(s.st,false,s.x+dx,w,s.ymn)}
1910 if(s.notes[s.nhd].acc){y=s.y+8
1911 if(s.ymx<y)
1912 s.ymx=y;y_set(s.st,true,s.x,0,y)}
1913 if(s.notes[0].acc){y=s.y
1914 if(s.notes[0].acc==1||s.notes[0].acc==3)
1918 if(s.ymn>y)
1919 s.ymn=y;y_set(s.st,false,s.x,0,y)}}
1921 for(v=0;v<voice_tb.length;v++){p_voice=voice_tb[v];s=p_voice.sym
1922 if(!s)
1924 set_color(s.color);st=p_voice.st;for(;s;s=s.next){if(s.play)
1926 if(s.tp)
1927 draw_tuplet(s)
1928 if(s.sls||s.sl1)
1929 draw_slurs(s)}}
1986 function set_staff(){var s,i,st,prev_staff,v,y,staffsep,dy,maxsep,mbot,val,p_voice,p_staff,sy=cur_sy
2044 function draw_systems(indent){var s,s2,st,x,x2,res,sy,staves_bar,bar_force,xstaff=[],stl=[],bar_bot=[],bar_height=[],ba=[],sb=[],thb=[]
2076 function draw_bar(s,bot,h){var i,s2,yb,w,bar_type=s.bar_type,st=s.st,p_staff=staff_tb[st],x=s.x
2077 if(st!=0&&s.ts_prev&&s.ts_prev.type!=C.BAR)
2078 h=p_staff.topbar*p_staff.staffscale;s.ymx=s.ymn+h;anno_start(s)
2079 if(s.color)
2080 set_color(s.color);yb=p_staff.y+12;if(p_staff.stafflines!='|||||')
2082 if(s.bar_mrep){set_sscale(st)
2083 if(s.bar_mrep==1){for(s2=s.prev;s2.type!=C.REST;s2=s2.prev);xygl(s2.x,yb,"mrep")}else{xygl(x,yb,"mrep2")
2084 if(s.v==cur_sy.top_voice)
2085 nrep_out(x,yb+p_staff.topbar,s.bar_mrep)}}
2088 for(i=bar_type.length;--i>=0;){switch(bar_type[i]){case"|":if(s.bar_dotted){set_sscale(-1);w=(5*p_staff.staffscale).toFixed(1);out_XYAB('<path class="bW" stroke-dasharray="A,A" d="MX Yv-G"/>\n',x,bot,w,h)}else if(s.color){out_XYAB('<path class="bW" d="MX Yv-F"/>\n',x,bot,h)}else{sb.push(new Float32Array([x,bot,h]))}
2090 default:x-=3;if(s.color)
2098 set_color();anno_stop(s)}
2117 for(s=tsfirst;s;s=s.ts_next){if(bar_force&&s.time!=bar_force){bar_force=0
2121 switch(s.type){case C.STAVES:staves_bar=s.ts_prev.type==C.BAR?s.ts_prev.x:0
2122 if(!staves_bar){for(s2=s.ts_next;s2;s2=s2.ts_next){if(s2.time!=s.time)
2129 sy=s.sy
2131 if(x<0){if(sy.st_print[st]){xstaff[st]=staves_bar?staves_bar:(s.x-s.wl-2)
2136 if(staves_bar){x2=staves_bar;bar_force=s.time}else{x2=s.x-s.wl-2;xstaff[st]=-1}
2142 case C.BAR:if(s.second||s.invis||!s.bar_type)
2144 ba.push([s,bar_bot[s.st],bar_height[s.st]])
2146 case C.STBRK:if(cur_sy.voices[s.v]&&cur_sy.voices[s.v].range==0){if(s.xmx>14){var nv=0
2149 for(s2=s.ts_next;s2;s2=s2.ts_next){if(s2.type!=C.STBRK)
2153 draw_lstaff(s.x)}}
2154 st=s.st;x=xstaff[st]
2155 if(x>=0){s2=s.prev
2158 x2=s2.type==C.BAR?s2.x:s.x-s.xmx
2162 xstaff[st]=s.x}
2172 Abc.prototype.draw_symbols=function(p_voice){var bm={},s,g,x,y,st;for(s=p_voice.sym;s;s=s.next){if(s.invis){switch(s.type){case C.KEY:p_voice.ckey=s
2175 st=s.st
2176 x=s.x;set_color(s.color)
2177 switch(s.type){case C.NOTE:set_scale(s)
2178 if(s.beam_st&&!s.beam_end){if(self.calculate_beam(bm,s))
2180 if(!s.invis){anno_start(s);draw_note(s,!bm.s2);anno_a.push(s)}
2181 if(s==bm.s2)
2186 draw_rest(s);break
2188 case C.CLEF:if(s.time>=staff_tb[st].clef.time)
2189 staff_tb[st].clef=s
2190 if(s.second||!staff_tb[st].topbar)
2192 set_color();set_sscale(st);anno_start(s);y=staff_tb[st].y
2193 if(s.clef_name)
2194 xygl(x,y+s.y,s.clef_name)
2195 else if(!s.clef_small)
2196 xygl(x,y+s.y,s.clef_type+"clef")
2198 xygl(x,y+s.y,"s"+s.clef_type+"clef")
2199 if(s.clef_octave){if(s.clef_octave>0){y+=s.ymx-10
2200 if(s.clef_small)
2201 y-=1}else{y+=s.ymn+6
2202 if(s.clef_small)
2205 anno_a.push(s)
2207 case C.METER:p_voice.meter=s
2208 if(s.second||!staff_tb[s.st].topbar)
2210 set_color();set_sscale(s.st);anno_start(s);draw_meter(s);anno_a.push(s)
2212 case C.KEY:p_voice.ckey=s
2213 if(s.second||!staff_tb[s.st].topbar)
2215 set_color();set_sscale(s.st);anno_start(s);self.draw_keysig(x,s);anno_a.push(s)
2217 case C.MREST:set_scale(s);x+=32;anno_start(s);xygl(x,staff_tb[s.st].y+12,"mrest");out_XYAB('<text style="font:bold 15px serif"\n\
2218 x ="X" y="Y" text-anchor="middle">A</text>\n',x,staff_tb[s.st].y+28,s.nmes);anno_a.push(s)
2220 case C.GRACE:set_scale(s);draw_gracenotes(s)
2223 case C.CUSTOS:set_scale(s);draw_note(s,0)
2226 default:error(2,s,"draw_symbols - Cannot draw symbol "+s.type)
2265 function set_tie_dir(s){var i,ntie,dir,sec,pit,ty
2266 for(;s;s=s.next){if(!s.tie_s)
2268 if(s.multi!=0){dir=s.multi>0?C.SL_ABOVE:C.SL_BELOW
2269 for(i=0;i<=s.nhd;i++){ty=s.notes[i].tie_ty
2272 s.notes[i].tie_ty=(ty&C.SL_DOTTED)|dir}
2275 for(i=0;i<=s.nhd;i++){if(s.notes[i].tie_ty){ntie++
2276 if(pit<128&&s.notes[i].pit<=pit+1)
2277 sec++;pit=s.notes[i].pit}}
2278 if(ntie<=1){dir=s.stem<0?C.SL_ABOVE:C.SL_BELOW
2279 for(i=0;i<=s.nhd;i++){ty=s.notes[i].tie_ty
2281 s.notes[i].tie_ty=(ty&C.SL_DOTTED)|dir
2285 for(i=0;i<=s.nhd;i++){ty=s.notes[i].tie_ty
2288 if(ntie==0){if(s.notes[i].pit>=22)
2291 s.notes[i].tie_ty=(ty&C.SL_DOTTED)|dir
2296 for(i=0;i<=s.nhd;i++){ty=s.notes[i].tie_ty
2300 s.notes[i].tie_ty=(ty&C.SL_DOTTED)|dir
2305 for(i=0;i<=s.nhd;i++){if(s.notes[i].tie_ty){if(pit<128&&s.notes[i].pit<=pit+1){ntie=i
2307 pit=s.notes[i].pit}}
2309 for(i=0;i<=s.nhd;i++){ty=s.notes[i].tie_ty
2315 s.notes[i].tie_ty=(ty&C.SL_DOTTED)|dir}}}
2316 function set_tie_room(){var p_voice,s,s2,v,dx,y,dy
2317 for(v=0;v<voice_tb.length;v++){p_voice=voice_tb[v];s=p_voice.sym
2318 if(!s)
2320 s=s.next
2321 if(!s)
2323 set_tie_dir(s)
2324 for(;s;s=s.next){if(!s.tie_s)
2326 if(s.notes[0].pit<20&&s.notes[0].tie_ty&&(s.notes[0].tie_ty&0x07)==C.SL_BELOW);else if(s.notes[s.nhd].pit>24&&s.notes[s.nhd].tie_ty&&(s.notes[s.nhd].tie_ty&0x07)==C.SL_ABOVE);else
2328 s2=s.next
2331 if(s2){if(s2.st!=s.st)
2333 dx=s2.x-s.x-10}else{dx=realwidth-s.x-10}
2340 if(s.notes[s.nhd].pit>24){y=3*(s.notes[s.nhd].pit-18)+dy
2341 if(s.ymx<y)
2342 s.ymx=y
2344 s2.ymx=y;y_set(s.st,true,s.x+5,dx,y)}
2345 if(s.notes[0].pit<20){y=3*(s.notes[0].pit-18)-dy
2346 if(s.ymn>y)
2347 s.ymn=y
2349 s2.ymn=y;y_set(s.st,false,s.x+5,dx,y)}}}}
2774 cfmt[xxxfont]=font;a=p.match(/\s+(no)?box(\s|$)/)
2779 a=p.match(/\s+padding=([\d.]+)(\s|$)/)
2782 a=p.match(/\s+class=(.*?)(\s|$)/)
2784 a=p.match(/\s+wadj=(.*?)(\s|$)/)
2795 a=p.match(/\s+([0-9.]+|\*)$/)
2844 var textopt={align:'j',center:'c',fill:'f',justify:'j',ragged:'f',right:'r',skip:'s'}
2851 function set_writefields(parm){var c,i,a=parm.split(/\s+/)
2892 case"chordalias":v=param.split(/\s+/)
2926 case"gracespace":v=param.split(/\s+/)
2933 case"tuplets":cfmt[cmd]=param.split(/\s+/);v=cfmt[cmd][3]
2949 case"pos":cmd=param.split(/\s+/);set_pos(cmd[0],cmd[1])
3126 function tosvg(in_fname,file,bol,eof){var i,c,eol,end,select,line0,line1,last_info,opt,text,a,b,s,pscom,txt_add='\n'
3144 src=src.replace(/([^\\])%.*/,'$1').replace(/\\%/g,'%');src=src.replace(/\s+$/,'')
3227 a=text.match(/([^\s]+)\s*(.*)/)
3266 text=file.slice(bol,eol);a=text.match(/([^\s]+)\s*(.*)/)
3318 s=new_block("title");s.text=text
3339 case's':if(parse.state!=3||cfmt.writefields.indexOf(line0)<0)
3373 function identify_note(s,dur_o){var head,flags,dots=0,dur=dur_o
3375 error(1,s,"Invalid note duration $1",dur);dur/=12
3377 error(1,s,"Note too short")
3381 if((dur+1)&dur){if(s.type!=C.REST||dur_o!=s.p_v.wmeasure)
3382 error(0,s,"Non standard note duration $1",dur_o)}
3386 if(flags>=0){head=C.FULL}else switch(flags){default:error(1,s,"Note too long")
3397 function set_head_shift(s){var i,i1,i2,d,ps,dx,dx_head=dx_tb[s.head],dir=s.stem,n=s.nhd
3401 if(s.grace)
3403 if(dir>=0){i1=1;i2=n+1;ps=s.notes[0].pit}else{dx=-dx;i1=n-1;i2=-1;ps=s.notes[n].pit}
3405 for(i=i1;i!=i2;i+=dir){d=s.notes[i].pit-ps;ps=s.notes[i].pit
3406 if(!d){if(shift){var new_dx=s.notes[i].shhd=s.notes[i-dir].shhd+dx
3410 if(i+dir!=i2&&ps+dir==s.notes[i+dir].pit){s.notes[i].shhd=-dx
3416 if(d>3||(d>=2&&s.head!=C.SQUARE)){shift=false}else{shift=!shift
3417 if(shift){s.notes[i].shhd=dx
3420 s.xmx=dx_max}
3476 function set_acc_shft(){var s,s2,st,i,acc,st,t,dx_head,notes
3477 s=tsfirst
3478 while(s){if(s.type!=C.NOTE||s.invis){s=s.ts_next
3480 st=s.st;t=s.time;acc=false
3481 for(s2=s;s2;s2=s2.ts_next){if(s2.time!=t||s2.type!=C.NOTE||s2.st!=st)
3487 if(!acc){s=s2
3489 dx_head=dx_tb[s.head]
3491 for(;s!=s2;s=s.ts_next)
3492 Array.prototype.push.apply(notes,s.notes)
3495 function lkvsym(s,next){s.next=next;s.prev=next.prev
3496 if(s.prev)
3497 s.prev.next=s
3499 s.p_v.sym=s;next.prev=s}
3500 function lktsym(s,next){s.ts_next=next
3501 if(next){s.ts_prev=next.ts_prev
3502 if(s.ts_prev)
3503 s.ts_prev.ts_next=s;next.ts_prev=s}else{error(2,s,"Bad linkage")
3504 s.ts_prev=null}
3505 s.seqst=!s.ts_prev||s.time!=s.ts_prev.time||(w_tb[s.ts_prev.type]!=w_tb[s.type]&&w_tb[s.ts_prev.type]!=0)
3508 next.seqst=next.time!=s.time||(w_tb[s.type]!=w_tb[next.type]&&w_tb[s.type]!=0)
3512 function unlksym(s){if(s.next)
3513 s.next.prev=s.prev
3514 if(s.prev)
3515 s.prev.next=s.next
3517 s.p_v.sym=s.next
3518 if(s.ts_next){if(s.seqst){if(s.ts_next.seqst){s.ts_next.shrink+=s.shrink;s.ts_next.space+=s.space}else{s.ts_next.seqst=true;s.ts_next.shrink=s.shrink;s.ts_next.space=s.space}}else{if(s.ts_next.seqst&&s.ts_prev&&s.ts_prev.seqst&&!w_tb[s.ts_prev.type]){s.ts_next.seqst=false
3519 s.shrink=s.ts_next.shrink
3520 s.space=s.ts_next.space}}
3521 s.ts_next.ts_prev=s.ts_prev}
3522 if(s.ts_prev)
3523 s.ts_prev.ts_next=s.ts_next
3524 if(tsfirst==s)
3525 tsfirst=s.ts_next
3526 if(tsnext==s)
3527 tsnext=s.ts_next}
3528 function insert_clef(s,clef_type,clef_line){var p_voice=s.p_v,new_s,st=s.st
3529 if(s.type==C.BAR&&s.prev&&s.prev.type==C.BAR&&s.prev.bar_type[0]!=':')
3530 s=s.prev;p_voice.last_sym=s.prev
3532 p_voice.sym=null;p_voice.time=s.time;new_s=sym_add(p_voice,C.CLEF);new_s.next=s;s.prev=new_s;new_s.clef_type=clef_type;new_s.clef_line=clef_line;new_s.st=st;new_s.clef_small=true
3534 new_s.notes[0]={pit:s.notes[0].pit}
3535 new_s.nhd=0;while(!s.seqst)
3536 s=s.ts_prev;lktsym(new_s,s)
3538 function set_float(){var p_voice,st,staff_chg,v,s,s1,up,down
3541 for(s=p_voice.sym;s;s=s.next){if(!s.floating){while(s&&!s.floating)
3542 s=s.next
3543 if(!s)
3546 if(!s.dur){if(staff_chg)
3547 s.st++
3549 if(s.notes[0].pit>=19){staff_chg=false
3551 if(s.notes[s.nhd].pit<=12){staff_chg=true
3552 s.st++
3555 for(s1=s.ts_prev;s1;s1=s1.ts_prev){if(s1.st!=st||s1.v==s.v)
3561 s.st++
3563 if(s.notes[s.nhd].pit>up-3){staff_chg=false
3566 for(s1=s.ts_next;s1;s1=s1.ts_next){if(s1.st!=st+1||s1.v==s.v)
3572 s.st++
3574 if(s.notes[0].pit<down+3){staff_chg=true
3575 s.st++
3577 up-=s.notes[s.nhd].pit
3578 down=s.notes[0].pit-down
3583 s.st++}}}
3584 function set_graceoffs(s){var next,m,dx,x,gspleft=cfmt.gracespace[0],gspinside=cfmt.gracespace[1],gspright=cfmt.gracespace[2],g=s.extra;if(s.prev&&s.prev.type==C.BAR)
3603 next=s.next
3609 function set_w_chs(s){var i,ch,w0,s0,dw,x=0,n=0
3610 for(;s;s=s.ts_next){if(s.shrink){x+=s.shrink;n++}
3611 if(!s.a_gch)
3613 for(i=0;i<s.a_gch.length;i++){ch=s.a_gch[i]
3616 if(w0){if(w0>x+ch.x){if(s.prev&&s.prev.type==C.BAR)
3622 if(s0==s||s0.type==C.BAR)
3624 s0=s;w0=ch.text.wh[0];n=0;x=0
3626 function gchord_width(s,wlnote,wlw){var gch,w,ix,arspc=0
3627 for(ix=0;ix<s.a_gch.length;ix++){gch=s.a_gch[ix]
3632 case'>':w=gch.text.wh[0]+s.wr
3636 if(s.wr<arspc)
3637 s.wr=arspc
3639 Abc.prototype.set_width=function(s){var s2,i,m,xx,w,wlnote,wlw,acc,bar_type,meter,last_acc,n1,n2,esp,tmp
3640 if(s.play){s.wl=s.wr=0
3642 switch(s.type){case C.NOTE:case C.REST:s.wr=wlnote=hw_tb[s.head]
3643 if(s.xmx>0)
3644 s.wr+=s.xmx+4;for(s2=s.prev;s2;s2=s2.prev){if(w_tb[s2.type]!=0)
3648 for(m=0;m<=s.nhd;m++){xx=s.notes[m].shhd
3651 acc=s.notes[m].acc
3652 if(acc){tmp=s.notes[m].shac+
3658 if(s.a_dd)
3659 wlnote+=deco_width(s)
3660 if(s.beam_st&&s.beam_end&&s.stem>0&&s.nflags>0){if(s.wr<s.xmx+9)
3661 s.wr=s.xmx+9}
3662 if(s.dots){if(s.wl==undefined)
3663 switch(s.head){case C.SQUARE:case C.OVALBARS:s.xmx+=3
3665 case C.OVAL:s.xmx+=1
3667 if(s.wr<s.xmx+8)
3668 s.wr=s.xmx+8
3669 if(s.dots>=2)
3670 s.wr+=3.5*(s.dots-1)}
3671 if(s.trem2&&s.beam_end&&wlnote<20)
3674 if(s2){switch(s2.type){case C.NOTE:if(s2.stem>0&&s.stem<0){if(wlw<7)
3676 if((s.y>27&&s2.y>27)||(s.y<-3&&s2.y<-3)){if(wlw<6)
3687 if(s.a_gch)
3688 wlw=gchord_width(s,wlnote,wlw)
3689 if(s.a_ly)
3690 wlw=ly_width(s,wlw)
3692 s.wl=wlnote-4.5
3694 s.wl=wlw
3696 case C.SPACE:xx=s.width/2;s.wr=xx
3697 if(s.a_gch)
3698 xx=gchord_width(s,xx,xx)
3699 if(s.a_dd)
3700 xx+=deco_width(s);s.wl=xx
3702 case C.BAR:bar_type=s.bar_type
3711 s.wl=w
3712 if(s.next&&s.next.type!=C.METER)
3713 s.wr=7
3715 s.wr=5
3716 for(s2=s.prev;s2;s2=s2.prev){if(w_tb[s2.type]!=0){if(s2.type==C.GRACE)
3717 s.wl-=8
3719 if(s.a_dd)
3720 s.wl+=deco_width(s)
3721 if(s.text&&s.text.length<4&&s.next&&s.next.a_gch){set_font("repeat");s.wr+=strwh(s.text)[0]+2
3722 if(cfmt.measurenb>0&s.bar_num&&s.bar_num%cfmt.measurenb)
3723 s.wr+=4}
3725 case C.CLEF:if(s.invis){s.wl=s.wr=1
3727 s.wl=s.clef_small?11:12
3728 s.wr=s.clef_small?10:12
3729 if(s.next&&s.next.type==C.BAR)
3730 s.wr-=4
3732 case C.KEY:if((!s.k_a_acc&&!s.k_sf&&!s.k_old_sf)||s.k_none||s.k_play){s.wl=s.wr=0
3734 s.wl=3;esp=4
3735 if(!s.k_a_acc){n1=s.k_sf
3736 if(s.k_old_sf&&(cfmt.cancelkey||n1==0))
3737 n2=s.k_old_sf
3747 n1=-n1;esp+=3}}else{n1=n2=s.k_a_acc.length
3749 last_acc=s.k_a_acc[0].acc
3750 for(i=1;i<n2;i++){acc=s.k_a_acc[i]
3751 if(acc.pit>s.k_a_acc[i-1].pit+6||acc.pit<s.k_a_acc[i-1].pit-6)
3755 s.wr=5.5*n1+esp
3757 case C.METER:wlw=0;s.x_meter=[]
3758 for(i=0;i<s.a_meter.length;i++){meter=s.a_meter[i]
3759 switch(meter.top[0]){case'C':case'c':case'o':s.x_meter[i]=wlw+6;wlw+=12
3761 case'.':case'|':s.x_meter[i]=s.x_meter[i-1]
3772 s.x_meter[i]=wlw+w/2
3774 s.wl=0;s.wr=wlw+6
3776 case C.MREST:s.wl=6;s.wr=66
3778 case C.GRACE:if(s.invis)
3780 s.wl=set_graceoffs(s);s.wr=0
3781 if(s.a_ly)
3782 ly_width(s,wlw)
3784 case C.STBRK:s.wl=s.xmx
3785 if(s.next&&s.next.type==C.CLEF){s.wr=2
3786 delete s.next.clef_small}else{s.wr=8}
3788 case C.CUSTOS:s.wl=s.wr=4
3790 case C.TEMPO:tempo_build(s)
3793 default:error(2,s,"set_width - Cannot set width for symbol $1",s.type)
3795 s.wl=s.wr=0}
3796 function time2space(s,len){var i,l,space
3800 len/=2}else if(!s.next&&len>=C.BLEN){len/=2}
3826 function set_space(s,ptime){var space,len,s2,stemdir
3827 len=s.time-ptime
3828 if(!len){switch(s.type){case C.MREST:return s.wl}
3830 if(s.ts_prev.type==C.MREST)
3832 space=time2space(s,len)
3833 while(!s.dur){switch(s.type){case C.BAR:return space*.9-7
3834 case C.CLEF:return space-s.wl-s.wr
3835 case C.BLOCK:case C.PART:case C.REMARK:case C.STAVES:case C.TEMPO:s=s.ts_next
3836 if(!s)
3840 if(s.dur&&len<=C.BLEN/4){s2=s
3846 if(s.type==C.NOTE&&s.nflags>=-1&&s.stem>0){stemdir=true
3847 for(s2=s.ts_prev;s2&&s2.time==ptime;s2=s2.ts_prev){if(s2.type==C.NOTE&&(s2.nflags<-1||s2.stem>0)){stemdir=false
3849 if(stemdir){for(s2=s.ts_next;s2&&s2.time==s.time;s2=s2.ts_next){if(s2.type==C.NOTE&&(s2.nflags<-1||s2.stem<0)){stemdir=false
3854 function set_sp_tup(s,s_et){var tim=s.time,ttim=s_et.time-tim,sp=time2space(s,ttim),s2=s,wsp=0
3862 while(1){s=s.ts_next
3863 if(s.seqst){s.space=sp*(s.time-tim)
3864 tim=s.time}
3865 if(s==s_et)
3867 function _bar(s){return{type:C.BAR,bar_type:"|",fname:s.fname,istart:s.istart,iend:s.iend,v:s.v,p_v:s.p_v,st:s.st,dur:0,nhd:0,notes:[{pit:s.notes?s.notes[0].pit:22}],prev:s}}
3868 function add_end_bar(s){var b=_bar(s)
3871 b.time=s.time+s.dur/2
3874 b.ts_prev=s
3875 b.next=s.next
3876 b.ts_next=s.ts_next
3877 b.shrink=s.wr+3
3878 if(s.next)
3879 s.next.prev=b
3880 if(s.ts_next)
3881 s.ts_next.ts_prev=b
3882 s.next=s.ts_next=b
3883 b.space=set_space(b,s.time)
3885 function set_allsymwidth(){var maxx,val,st,s_chs,tim,stup,s=tsfirst,s2=s,xa=0,xl=[],wr=[]
3887 tim=s.time
3888 while(1){do{if(s.a_gch&&!s_chs)
3889 s_chs=s;self.set_width(s);st=s.st
3893 wr[st]=0;val=xl[st]+wr[st]+s.wl
3896 s=s.ts_next}while(s&&!s.seqst);s2.shrink=maxx-xa
3906 if(!s)
3916 function to_rest(so){var s=clone(so)
3917 s.prev.next=so.ts_prev=so.prev=s.ts_prev.ts_next=s
3918 s.next=s.ts_next=so
3921 s.type=C.REST
3922 delete s.in_tuplet
3923 delete s.sl1
3924 delete s.a_dd
3925 delete s.a_gch
3926 delete s.sls
3927 return s}
3928 function set_repeat(s){var s2,s3,i,j,dur,n=s.repeat_n,k=s.repeat_k,st=s.st,v=s.v
3929 s.repeat_n=0
3931 for(s3=s.prev;s3;s3=s3.prev){if(!s3.dur){if(s3.type==C.BAR){error(1,s3,"Bar in repeat sequence")
3936 if(!s3){error(1,s,errs.not_enough_n)
3938 dur=s.time-s3.time;i=k*n
3939 for(s2=s;s2;s2=s2.next){if(!s2.dur){if(s2.type==C.BAR){error(1,s2,"Bar in repeat sequence")
3944 if(!s2||!s2.next){error(1,s,errs.not_enough_n)
3946 for(s2=s.prev;s2!=s3;s2=s2.prev){if(s2.type==C.NOTE){s2.beam_end=true
3949 if(s.dur)
3950 i--;s2=s.ts_next
3957 s=to_rest(s)
3958 s.dur=s.notes[0].dur=dur;s.rep_nb=-1;s.beam_st=true;self.set_width(s)
3959 s.head=C.SQUARE;for(s=s2;s;s=s.ts_next){if(s.st==st&&s.v==v&&s.dur)
3963 for(s2=s.prev.prev;s2;s2=s2.prev){if(s2.type==C.BAR||s2.time==tsfirst.time){if(--i<=0)
3965 if(!s2){error(1,s,errs.not_enough_m)
3967 dur=s.time-s2.time
3972 for(s2=s;s2;s2=s2.next){if(s2.type==C.BAR){if(--i<=0)
3974 if(!s2){error(1,s,errs.not_enough_m)
3978 if(!s2){error(1,s,errs.not_enough_m)
3982 if(n==2){s3=s
3983 for(s2=s.ts_next;;s2=s2.ts_next){if(s2.st!=st)
4005 s3=s
4019 function custos_add(s){var p_voice,new_s,i,s2=s
4025 p_voice=s.p_v;p_voice.last_sym=s.prev;p_voice.time=s.time;new_s=sym_add(p_voice,C.CUSTOS);new_s.next=s;s.prev=new_s;lktsym(new_s,s);new_s.shrink=s.shrink
4028 for(i=0;i<s.notes.length;i++){new_s.notes[i]={pit:s2.notes[i].pit,shhd:0,dur:C.BLEN/4}}
4030 function set_nl(s){var p_voice,done,tim,ptyp
4031 function bardiv(so){var s,s1,s2,t1,t2,i
4032 function new_type(s){var t=s.bar_type.match(/(:*)([^:]*)(:*)/)
4038 s=so
4039 while(s.ts_prev&&s.ts_prev.time==so.time){s=s.ts_prev
4040 if(s.bar_type)
4041 s1=s}
4044 for(s=so;;s=s.ts_next){switch(s.type){default:if(w_tb[s.type])
4053 while(1){if(s.type!=C.BAR||s.v>s2.v)
4055 s=s.ts_next}
4056 lktsym(s2,s)
4057 if(s==so)
4065 function set_eol(s){if(cfmt.custos&&voice_tb.length==1)
4066 custos_add(s)
4067 s.nl=true
4068 s=s.ts_prev
4069 if(s.type!=C.BAR)
4070 add_end_bar(s)}
4071 function do_warn(s){var s1,s2,s3
4072 for(s2=s;s2;s2=s2.ts_next){switch(s2.type){case C.KEY:if(!cfmt.keywarn||(!s2.k_a_acc&&!s2.k_sf&&!s2.k_old_sf)||s2.k_none||s2.k_play)
4074 for(s1=s.ts_prev;s1;s1=s1.ts_prev){if(s1.type!=C.METER)
4078 s1=s.ts_prev}
4081 if(s2.type==C.CLEF){for(s1=s.ts_prev;s1;s1=s1.ts_prev){switch(s1.type){case C.BAR:case C.KEY:case C.METER:continue}
4085 if(s3.ts_next==s)
4086 s.seqst=true
4100 s=bardiv(s)
4101 do_warn(s)
4102 switch(s.ts_prev.type){case C.STAVES:break
4103 case C.GRACE:s=s.next
4104 if(!s)
4105 return s
4106 default:set_eol(s)
4107 return s}
4108 for(s=s.ts_prev;s;s=s.ts_prev){if(s.seqst&&s.type!=C.CLEF)
4111 ptyp=s.type
4112 for(;;s=s.ts_next){if(!s)
4113 return s
4114 if(s.type==ptyp)
4116 ptyp=s.type
4119 switch(s.type){case C.STAVES:if(!s.ts_prev)
4121 if(s.ts_prev.type==C.BAR)
4123 while(s.ts_next){if(w_tb[s.ts_next.type]!=0&&s.ts_next.type!=C.CLEF)
4125 s=s.ts_next}
4126 if(!s.ts_next||s.ts_next.type!=C.BAR)
4128 s=s.ts_next
4132 case C.STBRK:if(!s.stbrk_forced)
4133 unlksym(s)
4140 default:if(!done||(s.prev&&s.prev.type==C.GRACE))
4144 set_eol(s)
4145 return s}
4150 function get_width(s,next){var shrink,space,w=0,wmx=0,sp_fac=(1-cfmt.maxshrink)
4151 while(s!=next){if(s.seqst){shrink=s.shrink
4153 if((space=s.space)<shrink)
4158 s.x=w}
4159 s=s.ts_next}
4163 function set_lines(s,next,lwidth,indent){var first,s2,s3,x,xmin,xmid,xmax,wwidth,shrink,space,ws,nlines,last=next?next.ts_prev:null
4164 ws=get_width(s,next)
4175 s2=first=s;xmin=s.x-s.shrink-indent;xmax=xmin+lwidth;xmid=xmin+wwidth/nlines;xmin+=wwidth/nlines*cfmt.breaklimit;for(s=s.ts_next;s!=next;s=s.ts_next){if(!s.x)
4177 if(s.type==C.BAR)
4178 s2=s
4179 if(s.x>=xmin)
4181 if(s==next){if(next)
4185 for(;s!=next;s=s.ts_next){x=s.x
4190 if(s.type!=C.BAR)
4192 if(x<xmid){s3=s
4195 s3=s
4197 if(!s3){var beam=0,bar_time=s2.time;xmax-=8;s=s2;for(;s!=next;s=s.ts_next){if(s.beam_st)
4199 if(s.beam_end&&beam>0)
4201 x=s.x
4204 if(x+s.wr>=xmax)
4206 if(beam||s.in_tuplet)
4208 if((s.time-bar_time)%(C.BLEN/4)==0){s3=s
4210 if(!s3||s.x<xmid){s3=s
4214 if(xmid-s3.x<s.x-xmid)
4216 s3=s
4218 if(!s3){s3=s=s2
4219 for(;s!=next;s=s.ts_next){x=s.x
4222 if(s.x<xmid){s3=s
4226 if(xmid-s3.x<s.x-xmid)
4228 s3=s
4230 s=s3
4231 while(s.ts_next){s=s.ts_next
4232 if(s.seqst)
4234 if(s.nl){error(0,s,"Line split problem - adjust maxshrink and/or breaklimit");nlines=2
4235 for(s=s.ts_next;s!=next;s=s.ts_next){if(!s.x)
4239 s=set_nl(s)
4240 if(!s||(next&&s.time>=next.time))
4242 wwidth-=s.x-first.x;indent=0}
4243 return s}
4244 function cut_tune(lwidth,indent){var s2,i,s=tsfirst
4250 if(cfmt.barsperstaff){i=cfmt.barsperstaff;for(s2=s;s2;s2=s2.ts_next){if(s2.type!=C.BAR||!s2.bar_num||--i>0)
4257 s2=s
4258 for(;s;s=s.ts_next){if(!s.ts_next){s=null}else if(!s.soln){continue}else{s.soln=false
4259 while(!s.seqst)
4260 s=s.ts_prev}
4261 s2=set_lines(s2,s,lwidth,indent)
4264 s=s2
4266 function set_yval(s){switch(s.type){case C.CLEF:if(s.second||s.invis){s.ymx=s.ymn=12
4268 s.y=(s.clef_line-1)*6
4269 switch(s.clef_type){default:s.ymx=s.y+28
4270 s.ymn=s.y-14
4272 case"c":s.ymx=s.y+13
4273 s.ymn=s.y-11
4275 case"b":s.ymx=s.y+7
4276 s.ymn=s.y-12
4278 if(s.clef_small){s.ymx-=2;s.ymn+=2}
4279 if(s.ymx<26)
4280 s.ymx=26
4281 if(s.ymn>-1)
4282 s.ymn=-1
4283 if(s.clef_octave){if(s.clef_octave>0)
4284 s.ymx+=12
4286 s.ymn-=12}
4288 case C.KEY:if(s.k_sf>2)
4289 s.ymx=24+10
4290 else if(s.k_sf>0)
4291 s.ymx=24+6
4293 s.ymx=24+2;s.ymn=-2
4295 default:s.ymx=24;s.ymn=0
4297 function set_ottava(){var s,st,delta,note,g,o,m=nstaff+1,staff_d=new Int16Array(new Array(m*2)),staff_noo=new Int8Array(new Array(m))
4298 function ottava_add(s,ottava,start){var dc_st=["15mb(","8vb(",null,"8va(","15ma("],dc_en=["15mb)","8vb)",null,"8va)","15ma)"];deco_cnv([(start?dc_st:dc_en)[2+ottava]],s)}
4300 for(s=tsfirst;s;s=s.ts_next){st=s.st
4301 if(s.ottava!=undefined)
4302 while(s.ottava.length){o=s.ottava.shift()
4303 if(o){if(staff_noo[st]++==0){ottava_add(s,o,true)
4304 staff_d[st]=-o*7}}else{if(--staff_noo[st]==0){ottava_add(s,-staff_d[st]/7);staff_d[st]=0}}}
4305 switch(s.type){case C.REST:if(voice_tb.length==1)
4308 if(delta&&!s.p_v.ckey.k_drum){for(m=s.nhd;m>=0;m--){note=s.notes[m];if(!note.opit)
4311 case C.GRACE:for(g=s.extra;g;g=g.next){delta=staff_d[st]
4312 if(delta&&!s.p_v.ckey.k_drum){for(m=0;m<=g.nhd;m++){note=g.notes[m]
4317 function mrest_expand(){var s,s2
4318 function mexp(s){var s2,s3,s4,next,tim,nbar,nb=s.nmes,dur=s.dur/nb
4319 s.type=C.REST
4320 s.dur=s.dur_orig=dur
4321 s.nflags=-2
4322 s.head=C.FULL
4323 tim=s.time+dur
4324 s2=next=s.next
4327 nbar=s2.bar_num-s.nmes
4328 s3=s2=s
4333 lkvsym(s2,next)}else{s2=_bar(s)
4334 s.next=s2}
4338 while(s3&&s3.v<s.v&&s3.type==C.BAR)
4342 delete s3.bar_num}else{s3=s
4355 s4=clone(s)
4365 while(s3&&s3.v<s.v){s3=s3.ts_next
4368 if(s3){lktsym(s4,s3)}else{s3=s
4375 s=s3=s4}}
4376 for(s=tsfirst;s;s=s.ts_next){if(s.type!=C.MREST)
4378 if(!s.seqst&&w_tb[s.ts_prev.type]){s2=s}else{s2=s.ts_next
4379 while(!s2.seqst){if(s2.type!=C.MREST||s2.nmes!=s.nmes)
4382 if(!s2.seqst){while(s.type==C.MREST){mexp(s)
4383 s=s.ts_next}}else{s=s2.ts_prev}}}
4384 function set_auto_clef(st,s_start,clef_type_start){var s,min,max,time,s2,s3;max=12;min=20
4385 for(s=s_start;s;s=s.ts_next){if(s.type==C.STAVES&&s!=s_start)
4387 if(s.st!=st)
4389 if(s.type!=C.NOTE){if(s.type==C.CLEF){if(s.clef_type!='a')
4391 unlksym(s)}
4393 if(s.notes[0].pit<min)
4394 min=s.notes[0].pit
4395 if(s.notes[s.nhd].pit>max)
4396 max=s.notes[s.nhd].pit}
4405 var clef_type=clef_type_start,s_last=s,s_last_chg=null
4406 for(s=s_start;s!=s_last;s=s.ts_next){if(s.type==C.STAVES&&s!=s_start)
4408 if(s.st!=st||s.type!=C.NOTE)
4410 time=s.time
4411 if(clef_type=='t'){if(s.notes[0].pit>12||s.notes[s.nhd].pit>20){if(s.notes[0].pit>20)
4412 s_last_chg=s
4414 s2=s.ts_prev
4417 s2=s.ts_next
4419 continue}else{if(s.notes[0].pit<12||s.notes[s.nhd].pit<20){if(s.notes[s.nhd].pit<12)
4420 s_last_chg=s
4422 s2=s.ts_prev
4425 s2=s.ts_next
4428 if(!s_last_chg){clef_type=clef_type_start=clef_type=='t'?'b':'t';s_last_chg=s
4430 s3=s
4431 for(s2=s.ts_prev;s2!=s_last_chg;s2=s2.ts_prev){if(s2.st!=st)
4433 if(s2.type==C.BAR&&s2.v==s.v){s3=s2.bar_type[0]!=':'?s2:s2.next
4439 if(s3.time==s_last_chg.time){s_last_chg=s
4441 s_last_chg=s;clef_type=clef_type=='t'?'b':'t';s2=insert_clef(s3,clef_type,clef_type=="t"?2:4);s2.clef_auto=true}
4443 function set_clefs(){var s,s2,st,v,p_voice,g,new_type,new_line,p_staff,pit,staff_clef=new Array(nstaff+1),sy=cur_sy,mid=[]
4462 st=sy.voices[v].st;s=p_voice.clef
4463 if(staff_clef[st].autoclef){s.clef_type=set_auto_clef(st,tsfirst,s.clef_type);s.clef_line=s.clef_type=='t'?2:4}
4464 staff_clef[st].clef=staff_tb[st].clef=s}
4467 for(s=tsfirst;s;s=s.ts_next){if(s.repeat_n)
4468 set_repeat(s)
4469 switch(s.type){case C.STAVES:sy=s.sy
4490 if(s2.clef_auto){new_type=set_auto_clef(st,s,staff_clef[st].clef?staff_clef[st].clef.clef_type:'a');new_line=new_type=='t'?2:4}else{new_type=s2.clef_type;new_line=s2.clef_line}
4497 g=s.ts_prev
4498 while(g&&g.time==s.time&&(g.v!=v||g.st!=st))
4500 if(!g||g.time!=s.time){g=s.ts_next
4503 if(!g||g.time!=s.time)
4504 g=s}
4510 default:s.mid=mid[s.st]
4513 if(s.clef_type=='a'){s.clef_type=set_auto_clef(s.st,s.ts_next,staff_clef[s.st].clef.clef_type);s.clef_line=s.clef_type=='t'?2:4}
4514 p_voice=s.p_v;p_voice.clef=s
4515 if(s.second){unlksym(s)
4517 st=s.st
4518 if(staff_clef[st].clef){if(s.clef_type==staff_clef[st].clef.clef_type&&s.clef_line==staff_clef[st].clef.clef_line){continue}}else{staff_tb[st].clef=s}
4519 staff_clef[st].clef=s}
4533 for(s=s2;s;s=s.next)
4534 s.notes[0].pit=pit}}
4537 Abc.prototype.set_pitch=function(last_s){var s,s2,g,st,delta,pitch,note,dur=C.BLEN,m=nstaff+1,staff_delta=new Int16Array(new Array(m*2)),sy=cur_sy
4538 for(st=0;st<=nstaff;st++){s=staff_tb[st].clef;staff_delta[st]=delta_tb[s.clef_type]+s.clef_line*2
4539 if(s.clefpit)
4540 staff_delta[st]+=s.clefpit
4541 if(cfmt.sound){if(s.clef_octave&&!s.clef_oct_transp)
4542 staff_delta[st]+=s.clef_octave}else{if(s.clef_oct_transp)
4543 staff_delta[st]-=s.clef_octave}}
4544 for(s=tsfirst;s!=last_s;s=s.ts_next){st=s.st
4545 switch(s.type){case C.CLEF:staff_delta[st]=delta_tb[s.clef_type]+
4546 s.clef_line*2
4547 if(s.clefpit)
4548 staff_delta[st]+=s.clefpit
4549 if(cfmt.sound){if(s.clef_octave&&!s.clef_oct_transp)
4550 staff_delta[st]+=s.clef_octave}else{if(s.clef_oct_transp)
4551 staff_delta[st]-=s.clef_octave}
4552 set_yval(s)
4554 case C.GRACE:for(g=s.extra;g;g=g.next){delta=staff_delta[g.st]
4555 if(delta&&!s.p_v.ckey.k_drum){for(m=0;m<=g.nhd;m++){note=g.notes[m];note.opit=note.pit
4558 set_yval(s)
4560 case C.KEY:s.k_y_clef=staff_delta[st]
4561 default:set_yval(s)
4563 case C.MREST:if(s.invis)
4565 s.y=12;s.ymx=24+15;s.ymn=-2
4567 case C.REST:if(voice_tb.length==1){s.y=12;s.ymx=24;s.ymn=0
4570 if(delta&&!s.p_v.ckey.k_drum){for(m=s.nhd;m>=0;m--){note=s.notes[m]
4573 if(s.type==C.REST){s.y=(((s.notes[0].pit-18)/2)|0)*6;s.ymx=s.y+rest_sp[5-s.nflags][0];s.ymn=s.y-rest_sp[5-s.nflags][1]}
4574 if(s.dur<dur)
4575 dur=s.dur
4579 Abc.prototype.set_stem_dir=function(){var t,u,i,st,rvoice,v,v_st,st_v,vobj,v_st_tb,st_v_tb=[],s=tsfirst,sy=cur_sy,nst=sy.nstaff
4580 while(s){for(st=0;st<=nst;st++)
4583 for(u=s;u;u=u.ts_next){if(u.type==C.BAR)
4584 break;if(u.type==C.STAVES){if(u!=s)
4586 sy=s.sy
4614 if(u.xstem){if(u.ts_prev.st!=st-1||u.ts_prev.type!=C.NOTE){error(1,s,"Bad !xstem!");u.xstem=false}else{u.ts_prev.multi=1;u.multi=1;u.stemless=true}}}
4615 for(;s!=u;s=s.ts_next){if(s.multi)
4617 switch(s.type){default:continue
4618 case C.REST:if((s.combine!=undefined&&s.combine<0)||!s.ts_next||s.ts_next.type!=C.REST||s.ts_next.st!=s.st||s.time!=s.ts_next.time||s.dur!=s.ts_next.dur||(s.a_dd&&s.ts_next.a_dd)||(s.a_gch&&s.ts_next.a_gch)||s.invis)
4620 if(s.ts_next.a_dd)
4621 s.a_dd=s.ts_next.a_dd
4622 if(s.ts_next.a_gch)
4623 s.a_gch=s.ts_next.a_gch
4624 unlksym(s.ts_next)
4627 st=s.st;v=s.v;v_st=v_st_tb[v];st_v=st_v_tb[st]
4629 s.multi=-1
4631 s.multi=1
4633 if(st_v.length<=1){if(s.floating)
4634 s.multi=st==voice_tb[v].st?-1:1
4641 if(i==st_v.length-1){s.multi=-1}else{s.multi=1
4643 s.multi=-1;t=s.ts_next
4644 if(s.ts_prev&&s.ts_prev.time==s.time&&s.ts_prev.st==s.st&&s.notes[s.nhd].pit==s.ts_prev.notes[0].pit&&s.beam_st&&s.beam_end&&(!t||t.st!=s.st||t.time!=s.time))
4645 s.multi=-1}}}
4646 while(s&&s.type==C.BAR)
4647 s=s.ts_next}}
4648 function set_rest_offset(){var s,s2,v,end_time,not_alone,v_s,y,ymax,ymin,shift,dots,dx,v_s_tb=[],sy=cur_sy
4649 for(s=tsfirst;s;s=s.ts_next){if(s.invis)
4651 if(s.type==C.STAVES)
4652 sy=s.sy
4653 if(!s.dur)
4655 v_s=v_s_tb[s.v]
4657 v_s_tb[s.v]=v_s}
4658 v_s.s=s;v_s.st=s.st;v_s.end_time=s.time+s.dur
4659 if(s.type!=C.REST)
4663 if(!v_s||!v_s.s||v_s.st!=s.st||v==s.v)
4665 if(v_s.end_time<=s.time)
4667 not_alone=true;s2=v_s.s
4668 if(sy.voices[v].range<sy.voices[s.v].range){if(s2.time==s.time){if(s2.ymn<ymax){ymax=s2.ymn
4671 ymax=s2.y}}else{if(s2.time==s.time){if(s2.ymx>ymin){ymin=s2.ymx
4675 end_time=s.time+s.dur
4676 for(s2=s.ts_next;s2;s2=s2.ts_next){if(s2.time>=end_time)
4678 if(s2.st!=s.st||!s2.dur||s2.invis)
4681 if(sy.voices[s2.v].range<sy.voices[s.v].range){if(s2.time==s.time){if(s2.ymn<ymax){ymax=s2.ymn
4684 ymax=s2.y}}else{if(s2.time==s.time){if(s2.ymx>ymin){ymin=s2.ymx
4688 if(!not_alone){s.y=12;s.ymx=24;s.ymn=0
4690 if(ymax==127&&s.y<12){shift=12-s.y
4691 s.y+=shift;s.ymx+=shift;s.ymn+=shift}
4692 if(ymin==-127&&s.y>12){shift=s.y-12
4693 s.y-=shift;s.ymx-=shift;s.ymn-=shift}
4694 shift=ymax-s.ymx
4696 if(s.ymn-shift>=ymin){s.y-=shift;s.ymx-=shift;s.ymn-=shift
4698 dx=dots?15:10;s.notes[0].shhd=dx;s.xmx=dx
4700 shift=ymin-s.ymn
4702 if(s.ymx+shift<=ymax){s.y+=shift;s.ymx+=shift;s.ymn+=shift
4704 dx=dots?15:10;s.notes[0].shhd=dx;s.xmx=dx
4706 function new_sym(s,p_v,last_s){s.p_v=p_v
4707 s.v=p_v.v
4708 s.st=p_v.st
4709 s.time=last_s.time
4710 if(p_v.last_sym){s.next=p_v.last_sym.next
4711 if(s.next)
4712 s.next.prev=s;p_v.last_sym.next=s;s.prev=p_v.last_sym}
4713 p_v.last_sym=s;lktsym(s,last_s)}
4714 function init_music_line(){var p_voice,s,s1,s2,s3,last_s,v,st,shr,shrmx,shl,shlp,p_st,top,nv=voice_tb.length
4722 s=tsfirst
4723 while(s){switch(s.type){case C.CLEF:case C.KEY:case C.METER:switch(s.type){case C.CLEF:staff_tb[s.st].clef=s
4725 case C.KEY:s.p_v.ckey=s
4727 case C.METER:s.p_v.meter=s
4730 unlksym(s)
4731 case C.PART:case C.TEMPO:case C.BLOCK:case C.REMARK:s=s.ts_next
4741 s=clone(staff_tb[st].clef);s.v=v;s.p_v=p_voice;s.st=st;s.time=tsfirst.time;s.prev=null;s.next=p_voice.sym
4742 if(s.next)
4743 s.next.prev=s;p_voice.sym=p_voice.last_sym=s
4744 s.ts_next=last_s;if(last_s)
4745 s.ts_prev=last_s.ts_prev
4747 s.ts_prev=null
4748 if(!s.ts_prev){tsfirst=s}else{s.ts_prev.ts_next=s
4749 delete s.seqst}
4750 if(last_s){last_s.ts_prev=s
4753 delete s.clef_small;s.second=cur_sy.voices[v].second
4755 s.invis=true}
4760 if(s2.k_sf||s2.k_a_acc){s=clone(s2)
4761 new_sym(s,p_voice,last_s)
4762 delete s.invis
4763 s.k_old_sf=s2.k_sf}}
4767 s=clone(s2)
4768 new_sym(s,p_voice,last_s)}
4771 if(p_voice.sls.length){s={type:C.BAR,fname:last_s.fname,bar_type:"|",dur:0,multi:0,invis:true,sls:p_voice.sls}
4772 new_sym(s,p_voice,last_s)
4788 self.set_pitch(last_s);s=tsfirst
4789 s.seqst=true
4791 while(1){s2=s;shl=shrmx=0
4792 do{self.set_width(s);shr=s.wl+shlp
4794 shrmx=shr;if(s.wr>shl)
4795 shl=s.wr
4796 s=s.ts_next}while(s!=last_s&&!s.seqst);s2.shrink=shrmx;s2.space=0
4797 if(s==last_s)
4801 do{self.set_width(s)
4802 if(shr<s.wl)
4803 shr=s.wl;s=s.ts_next}while(s&&!s.seqst);last_s.shrink=shl+shr
4805 function check_end_bar(){var s2,s=tsfirst
4806 while(s.ts_next)
4807 s=s.ts_next
4808 if(s.type!=C.BAR){s2=_bar(s)
4811 s2.time=s.time+(s.dur||0)
4812 s2.ts_prev=s
4813 s.next=s.ts_next=s2}}
4814 function set_words(p_voice){var s,s2,nflags,lastnote,res,start_flag=true,pitch=127
4815 for(s=p_voice.sym;s;s=s.next){if(s.type==C.NOTE){pitch=s.notes[0].pit
4817 for(s=p_voice.sym;s;s=s.next){if(s.a_gch)
4818 self.gch_build(s)
4819 switch(s.type){case C.MREST:start_flag=true
4821 case C.BAR:s.bar_type=bar_cnv(s.bar_type)
4822 if(!s.beam_on)
4824 if(!s.next&&s.prev&&!s.invis&&s.prev.head==C.OVALBARS)
4825 s.prev.head=C.SQUARE
4827 case C.GRACE:for(s2=s.extra;s2;s2=s2.next)
4830 case C.NOTE:case C.REST:res=identify_note(s,s.dur_orig);s.head=res[0];s.dots=res[1];s.nflags=res[2]
4831 if(s.nflags<=-2)
4832 s.stemless=true
4833 if(s.xstem)
4834 s.nflags=0
4835 if(s.trem1){if(s.nflags>0)
4836 s.nflags+=s.ntrem
4838 s.nflags=s.ntrem}
4839 if(s.next&&s.next.trem2)
4841 if(s.trem2){s.prev.trem2=true;s.prev.nflags=--s.nflags;s.prev.head=++s.head
4842 if(s.nflags>0){s.nflags+=s.ntrem}else{if(s.nflags<=-2){s.stemless=true;s.prev.stemless=true}
4843 s.nflags=s.ntrem}
4844 s.prev.nflags=s.nflags
4846 nflags=s.nflags
4847 if(s.ntrem)
4848 nflags+=s.ntrem
4849 if(s.type==C.REST&&s.beam_end&&!s.beam_on){s.beam_end=false;start_flag=true}
4851 if(nflags<=0){s.beam_st=true;s.beam_end=true}else if(s.type==C.NOTE||s.beam_on){s.beam_st=true;start_flag=false}}
4852 if(s.beam_end)
4854 if(s.type==C.NOTE||s.beam_on)
4855 lastnote=s
4857 if(s.type==C.NOTE){if(s.nhd)
4858 s.notes.sort(abc2svg.pitcmp)
4859 pitch=s.notes[0].pit
4860 for(s2=s.prev;s2;s2=s2.prev){if(s2.type!=C.REST)
4862 s2.notes[0].pit=pitch}}else{if(!s.notes){s.notes=[]
4863 s.notes[0]={}
4864 s.nhd=0}
4865 s.notes[0].pit=pitch}}
4868 function set_rb(p_voice){var s2,n,s=p_voice.sym
4869 while(s){if(s.type!=C.BAR||!s.rbstart||s.norepbra){s=s.next
4872 for(s=s.next;s;s=s.next){if(s.type!=C.BAR)
4875 if(s.rbstop)
4877 if(!s.next){s.rbstop=2
4880 s2=s
4882 s=s2;s.rbstop=1
4931 function set_beams(sym){var s,t,g,beam,s_opp,n,m,mid_p,pu,pd,laststem=-1
4932 for(s=sym;s;s=s.next){if(s.type!=C.NOTE){if(s.type!=C.GRACE)
4934 g=s.extra
4935 if(g.stem==2){s_opp=s
4937 if(!s.stem&&(s.stem=s.multi)==0)
4938 s.stem=1
4939 for(;g;g=g.next){g.stem=s.stem;g.multi=s.multi}
4941 if(!s.stem&&(s.stem=s.multi)==0){mid_p=s.mid/3+18
4942 if(beam){s.stem=laststem}else if(s.beam_st&&!s.beam_end){beam=true;n=pu=0
4943 for(g=s;g;g=g.next){if(g.type!=C.NOTE){continue}
4944 if(g.stem||g.multi){s.stem=g.stem||g.multi
4951 if(!s.stem){pu*=2
4952 if(pu>n){s.stem=-1}else if(pu<n){s.stem=1}else{pu=s.notes[s.nhd].pit;pd=s.notes[0].pit
4953 for(g=s.next;g;g=g.next){if(g.type!=C.NOTE){continue}
4960 if(g.beam_end){if(pu+pd<mid_p*2){s.stem=1}else if(pu+pd>mid_p*2){s.stem=-1}else{if(cfmt.bstemdown)
4961 s.stem=-1}}}}
4962 if(!s.stem)
4963 s.stem=laststem}else{n=(s.notes[s.nhd].pit+s.notes[0].pit)/2
4964 if(n==mid_p){for(m=0;m<=s.nhd;m++){if(s.notes[m].pit>=mid_p)
4966 n=m*2<s.nhd?mid_p-1:mid_p+1}
4968 s.stem=1
4970 s.stem=-1
4972 s.stem=-1
4974 s.stem=laststem}}else{if(s.beam_st&&!s.beam_end)
4976 if(s.beam_end)
4977 beam=false;laststem=s.stem;if(s_opp){for(g=s_opp.extra;g;g=g.next)
5051 function set_left(s){var m,i,j,shift,w_base=w_note[s.head],w=w_base,left=[]
5054 if(s.nflags>-2){if(s.stem>0){w=-w;i=s.notes[0].pit*2;j=(Math.ceil((s.ymx-2)/3)+18)*2}else{i=(Math.ceil((s.ymn+2)/3)+18)*2;j=s.notes[s.nhd].pit*2}
5061 shift=s.notes[s.stem>0?0:s.nhd].shhd;for(m=0;m<=s.nhd;m++){w=-s.notes[m].shhd+w_base+shift;i=s.notes[m].pit*2
5068 if(s.head!=C.SQUARE)
5075 function set_right(s){var m,i,j,k,shift,w_base=w_note[s.head],w=w_base,flags=s.nflags>0&&s.beam_st&&s.beam_end,right=[]
5078 if(s.nflags>-2){if(s.stem<0){w=-w;i=(Math.ceil((s.ymn+2)/3)+18)*2;j=s.notes[s.nhd].pit*2;k=i+4}else{i=s.notes[0].pit*2;j=(Math.ceil((s.ymx-2)/3)+18)*2}
5085 if(flags){if(s.stem>0){if(s.xmx==0)
5086 i=s.notes[s.nhd].pit*2
5088 i=s.notes[0].pit*2;i+=4
5095 for(;i<MAXPIT&&i<=s.notes[0].pit*2-4;i++)
5097 shift=s.notes[s.stem>0?0:s.nhd].shhd
5098 for(m=0;m<=s.nhd;m++){w=s.notes[m].shhd+w_base-shift;i=s.notes[m].pit*2
5105 if(s.head!=C.SQUARE)
5112 function set_overlap(){var s,s1,s2,s3,i,i1,i2,m,sd,t,dp,d,d2,dr,dr2,dx,left1,right1,left2,right2,right3,pl,pr,sy=cur_sy
5113 function v_invert(){s1=s2;s2=s;d=d2;pl=left1;pr=right1;dr2=dr}
5114 for(s=tsfirst;s;s=s.ts_next){if(s.type!=C.NOTE||s.invis){if(s.type==C.STAVES)
5115 sy=s.sy
5117 if(s.xstem&&s.ts_prev.stem<0){for(m=0;m<=s.nhd;m++){s.notes[m].shhd-=7;s.notes[m].shac+=16}}
5118 s2=s
5122 if(s2.time!=s.time){s2=null
5124 if(s2.type==C.NOTE&&!s2.invis&&s2.st==s.st)
5128 s1=s
5138 if((s1.stem>0&&s2.stem<0&&s1.notes[0].pit==s2.notes[s2.nhd].pit+1)||(s1.stem<0&&s2.stem>0&&s1.notes[s1.nhd].pit+1==s2.notes[0].pit)){if(s1.stem<0){s1=s2;s2=s}
5250 Abc.prototype.set_stems=function(){var s,s2,g,slen,scale,ymn,ymx,nflags,ymin,ymax,res
5251 for(s=tsfirst;s;s=s.ts_next){if(s.type!=C.NOTE){if(s.type!=C.GRACE)
5253 ymin=ymax=s.mid
5254 for(g=s.extra;g;g=g.next){res=identify_note(s,g.dur);g.head=res[0];g.dots=res[1];g.nflags=res[2];slen=GSTEM
5257 if(s.stem>=0){g.y=ymn;g.ys=ymx+slen;ymx=Math.round(g.ys)}else{g.y=ymx;g.ys=ymn-slen;ymn=Math.round(g.ys)}
5263 s.ymx=ymax;s.ymn=ymin
5265 set_head_shift(s);nflags=s.nflags
5266 if(s.beam_st&&!s.beam_end){if(s.feathered_beam)
5267 nflags=++s.nflags
5268 for(s2=s.next;;s2=s2.next){if(s2.type==C.NOTE){if(s.feathered_beam)
5273 nflags=s2.nflags}else if(!s.beam_st&&s.beam_end){for(s2=s.prev;;s2=s2.prev){if(s2.beam_st)
5282 if((scale=s.p_v.scale)!=1)
5283 slen*=(scale+1)*.5;ymn=3*(s.notes[0].pit-18)
5284 if(s.nhd>0){slen-=2;ymx=3*(s.notes[s.nhd].pit-18)}else{ymx=ymn}
5285 if(s.ntrem)
5286 slen+=2*s.ntrem
5287 if(s.stemless){if(s.stem>=0){s.y=ymn;s.ys=ymx}else{s.ys=ymn;s.y=ymx}
5288 s.ymx=ymx+4;s.ymn=ymn-4}else if(s.stem>=0){if(s.notes[s.nhd].pit>26&&(nflags<=0||!s.beam_st||!s.beam_end)){slen-=2
5289 if(s.notes[s.nhd].pit>28)
5291 s.y=ymn
5292 if(s.notes[0].tie)
5293 ymn-=3;s.ymn=ymn-4;s.ys=ymx+slen
5294 if(s.ys<s.mid)
5295 s.ys=s.mid;s.ymx=(s.ys+2.5)|0}else{if(s.notes[0].pit<18&&(nflags<=0||!s.beam_st||!s.beam_end)){slen-=2
5296 if(s.notes[0].pit<16)
5298 s.ys=ymn-slen
5299 if(s.ys>s.mid)
5300 s.ys=s.mid;s.ymn=(s.ys-2.5)|0;s.y=ymx
5301 if(s.notes[s.nhd].tie)
5302 ymx+=3;s.ymx=ymx+4}}}
5303 function sym_staff_move(st){for(var s=tsfirst;s;s=s.ts_next){if(s.nl)
5305 if(s.st==st&&s.type!=C.CLEF){s.st++;s.invis=true}}}
5307 Abc.prototype.block_gen=function(s){switch(s.subtype){case"leftmargin":case"rightmargin":case"pagescale":case"pagewidth":case"scale":case"staffwidth":blk_flush()
5308 self.set_format(s.subtype,s.param)
5312 case"mc_new":if(!multicol){error(1,s,"%%multicol new without start")
5322 case"mc_end":if(!multicol){error(1,s,"%%multicol new without start")
5334 user.img_out(s.text)
5343 case"sep":set_page();vskip(s.sk1);output+='<path class="stroke"\n\td="M';out_sxsy((img.width-s.l)/2-img.lm,' ',0)
5344 output+='h'+s.l.toFixed(1)+'"/>\n';vskip(s.sk2);break
5345 case"text":set_font(s.font)
5346 write_text(s.text,s.opt)
5348 case"title":write_title(s.text,true)
5350 case"vskip":vskip(s.sk);break}}
5351 function set_piece(){var s,last,p_voice,st,v,nv,tmp,non_empty=[],non_empty_gl=[],sy=cur_sy
5380 if(tsfirst.type==C.STAVES){s=tsfirst
5383 if(s.seqst)
5385 s.p_v.sym=s.next
5386 if(s.next)
5387 s.next.prev=null}
5390 reset_staff(st);for(s=tsfirst;s;s=s.ts_next){if(s.nl)
5392 switch(s.type){case C.STAVES:set_brace();sy.st_print=new Uint8Array(non_empty);sy=s.sy;while(nstaff<sy.nstaff)
5396 case C.BLOCK:if(!s.play){blocks.push(s)
5397 unlksym(s)}
5399 st=s.st
5400 if(st>nstaff){switch(s.type){case C.CLEF:staff_tb[st].clef=s
5402 case C.KEY:s.p_v.ckey=s
5404 case C.METER:s.p_v.meter=s
5406 unlksym(s)
5410 switch(s.type){default:continue
5411 case C.BAR:if(s.bar_mrep||sy.staves[st].staffnonote>1)
5417 if(s.invis)
5419 if(sy.staves[st].staffnonote||s.type==C.NOTE)
5423 tsnext=s;set_brace()
5429 if(tsnext){s=tsnext;delete s.nl;last=s.ts_prev;last.ts_next=null;nv=voice_tb.length
5431 if(p_voice.sym&&p_voice.sym.time<=tsnext.time){for(s=tsnext.ts_prev;s;s=s.ts_prev){if(s.v==v){p_voice.s_next=s.next;s.next=null;break}}
5432 if(s)
5435 Abc.prototype.set_sym_glue=function(width){var s,g,ll,some_grace,spf,xmin=0,xx=0,x=0,xs=0,xse=0
5436 for(s=tsfirst;s;s=s.ts_next){if(s.type==C.GRACE&&!some_grace)
5437 some_grace=s
5438 if(s.seqst){xmin+=s.shrink
5439 if(s.space){if(s.space<s.shrink){xse+=s.shrink;xx+=s.shrink}else{xx+=s.space}}else{xs+=s.shrink}}}
5444 error(1,s,"Line too much shrunk $1 $2 $3",xmin.toFixed(1),xx.toFixed(1),width.toFixed(1));x=0
5445 for(s=tsfirst;s;s=s.ts_next){if(s.seqst)
5446 x+=s.shrink;s.x=x}
5450 for(s=tsfirst;s;s=s.ts_next){if(s.seqst){if(s.space){if(s.space*spf<=s.shrink){xse+=s.shrink;xx+=s.shrink;x+=s.shrink}else{xx+=s.space;x+=s.space*spf}}else{x+=s.shrink}}
5451 s.x=x}
5457 for(s=tsfirst;s;s=s.ts_next){if(s.seqst)
5458 x+=s.space*spf<=s.shrink?s.shrink:s.space*spf
5459 s.x=x}}
5461 for(s=some_grace;s;s=s.ts_next){if(s.type!=C.GRACE)
5463 if(s.gr_shift)
5464 x=s.prev.x+s.prev.wr
5466 x=s.x-s.wl
5467 for(g=s.extra;g;g=g.next)
5469 function set_sym_line(){var p_v,s,v=voice_tb.length
5473 s=p_v.s_next
5474 p_v.sym=s
5475 if(s){if(s.prev)
5476 s.prev.next=s
5477 p_v.s_prev=s.prev
5478 s.prev=null}else{p_v.s_prev=null}}}
5480 function gen_init(){var s=tsfirst,tim=s.time
5481 for(;s;s=s.ts_next){if(s.time!=tim){set_page()
5483 switch(s.type){case C.NOTE:case C.REST:case C.MREST:case C.SPACE:set_page()
5486 case C.STAVES:cur_sy=s.sy
5488 case C.BLOCK:if(s.play)
5490 self.block_gen(s)
5492 unlksym(s)
5493 if(s.p_v.s_next==s)
5494 s.p_v.s_next=s.next}
5540 function set_ref(s){s.fname=parse.fname;s.istart=parse.istart;s.iend=parse.iend}
5541 function new_clef(clef_def){var s={type:C.CLEF,clef_line:2,clef_type:"t",v:curvoice.v,p_v:curvoice,time:curvoice.time,dur:0},i=1
5542 set_ref(s)
5543 switch(clef_def[0]){case'"':i=clef_def.indexOf('"',1);s.clef_name=clef_def.slice(1,i);i++
5545 case'a':if(clef_def[1]=='u'){s.clef_type="a";s.clef_auto=true;i=4
5548 case'C':s.clef_type="c";s.clef_line=3
5551 case'F':s.clef_type="b";s.clef_line=4
5554 s.invis=true
5556 case't':if(clef_def[1]=='e'){s.clef_type="c";s.clef_line=4
5561 case'P':s.clef_type="p";s.clef_line=3;curvoice.key.k_sf=0;curvoice.ckey.k_sf=0
5568 if(clef_def[i]>='1'&&clef_def[i]<='9'){s.clef_line=Number(clef_def[i]);i++}
5570 return s
5571 switch(clef_def[i]){case'^':s.clef_oct_transp=true
5572 case'+':s.clef_octave=7
5573 if(!s.clef_oct_transp)
5576 case'_':s.clef_oct_transp=true
5577 case'-':s.clef_octave=-7
5578 if(!s.clef_oct_transp)
5581 return s}
5593 param=param.split(/\s+/)
5602 function set_user(parm){var k,c,v,a=parm.match(/(.)[=\s]*(\[I:.+\]|".+"|!.+!)$/)
5637 function new_block(subtype){var s={type:C.BLOCK,subtype:subtype,dur:0}
5642 sym_link(s)
5643 return s}
5644 Abc.prototype.set_vp=function(a){var s,item,pos,val,clefpit
5650 switch(item){case"clef=":s=a.shift()
5749 default:switch(item.slice(0,4)){case"treb":case"bass":case"alto":case"teno":case"perc":s=item
5752 s=item
5761 if(s){s=new_clef(s)
5762 if(s){if(clefpit)
5763 s.clefpit=clefpit
5764 get_clef(s)}}}
5780 function new_key(param){var i,clef,key_end,c,tmp,exp,sf="FCGDAEB".indexOf(param[0])-1,mode=0,s={type:C.KEY,dur:0}
5781 function set_k_acc(s,sf){var i,j,n,nacc,p_acc,accs=[],pits=[]
5783 n=s.k_a_acc.length
5784 for(i=0;i<n;i++){p_acc=s.k_a_acc[i]
5789 for(i=0;i<nacc;i++){p_acc=s.k_a_acc[i]
5791 p_acc=s.k_a_acc[i]={}
5793 set_ref(s);i=1
5797 s.k_bagpipe=param[1];sf=param[1]=='P'?0:2;i++
5801 case'P':syntax(1,"K:P is deprecated");sf=0;s.k_drum=true;key_end=true
5803 case'n':if(param.indexOf("none")==0){sf=0;s.k_none=true;i=4
5805 default:s.k_map=[]
5806 s.k_mode=0
5807 return[s,info_split(param)]}}
5827 param=param.replace(/\w+\s*/,'')
5828 if(param.indexOf("exp ")==0){param=param.replace(/\w+\s*/,'')
5832 if(c=='^'||c=='_'||c=='='){s.k_a_acc=[];tmp=new scanBuf;tmp.buffer=param
5836 s.k_a_acc.push(note);c=param[tmp.index]
5839 set_k_acc(s,sf)
5841 param=param.replace(/\w+\s*/,'')}}
5842 s.k_sf=sf;if(s.k_a_acc){s.k_map=[]
5843 i=s.k_a_acc.length
5844 while(--i>=0){note=s.k_a_acc[i]
5845 s.k_map[(note.pit+19)%7]=note.acc}}else{s.k_map=abc2svg.keys[sf+7]}
5846 s.k_mode=mode
5847 s.k_b40=[1,24,7,30,13,36,19,2,25,8,31,14,37,20,3][sf+7]
5848 return[s,info_split(param)]}
5849 function new_meter(p){var s={type:C.METER,dur:0,a_meter:[]},meter={},val,v,m1=0,m2,i=0,j,wmeasure,in_parenth;set_ref(s)
5865 case'(':if(p[i+1]=='('){in_parenth=true;meter.top=p[i++];s.a_meter.push(meter);meter={}}
5872 case')':in_parenth=p[i]=='(';meter.top=p[i++];s.a_meter.push(meter);meter={}
5897 s.a_meter.push(meter);meter={}
5900 if(p[i]=='+'){meter.top=p[i++];s.a_meter.push(meter);meter={}}}}
5905 s.wmeasure=wmeasure
5907 s.a_meter=[]
5908 if(parse.state!=3){info.M=p;glovar.meter=s
5913 for(v=0;v<voice_tb.length;v++){voice_tb[v].meter=s;voice_tb[v].wmeasure=wmeasure}}}else{curvoice.wmeasure=wmeasure
5914 if(is_voice_sig()){curvoice.meter=s;reset_gen()}else{sym_link(s)}}}
5915 function new_tempo(text){var i,c,d,nd,txt=text,s={type:C.TEMPO,dur:0}
5922 set_ref(s)
5924 s.invis=true
5928 s.tempo_str1=c[1]
5929 text=text.slice(c[0].length).replace(/^\s+/,'')}
5931 s.tempo_str2=text.slice(i+1,-1)
5932 text=text.slice(0,i).replace(/\s+$/,'')}
5934 if(i>0){d=text.slice(0,i).split(/\s+/)
5935 text=text.slice(i+1).replace(/^\s+/,'')
5942 if(!s.tempo_notes)
5943 s.tempo_notes=[]
5944 s.tempo_notes.push(nd)}
5945 if(text.slice(0,4)=="ca. "){s.tempo_ca='ca. '
5951 s.new_beat=nd}else{s.tempo=Number(text)
5952 if(!s.tempo||isNaN(s.tempo)){syntax(1,"Bad tempo value")
5955 glovar.tempo=s
5958 sym_link(s)
5961 function do_info(info_type,text){var s,d1,d2,a,vid
5988 s={type:C.PART,text:text,dur:0}
5990 s.invis=true
5991 sym_link(s)
6012 s={type:C.REMARK,text:text,dur:0}
6013 sym_link(s)
6017 function adjust_dur(s){var s2,time,auto_time,i,fac;s2=curvoice.last_sym
6043 curvoice.time=s.time=time}
6044 function new_bar(dotted){var s2,c,bar_type,line=parse.line,s={type:C.BAR,fname:parse.fname,istart:parse.bol+line.index,dur:0,multi:0}
6046 s.bar_dotted=true
6049 if(glovar.new_nbar){s.bar_num=glovar.new_nbar;glovar.new_nbar=0}
6055 if(bar_type[0]==':'){if(bar_type.length==1){bar_type='|';s.bar_dotted=true}else{s.rbstop=2
6057 curvoice.tie_s.tie_s=s}}
6059 csan_add(s)
6060 if(a_dcn){deco_cnv(a_dcn,s);a_dcn=null}
6061 if(parse.ottava.length){s2=s
6068 s.rbstop=2
6069 if(c>'0'&&c<='9'){s.text=c
6073 s.text+=c}
6074 s.rbstop=2;s.rbstart=2}else if(c=='"'&&bar_type.slice(-1)=='['){s.text=""
6080 s.text+=c}
6081 s.rbstop=2;s.rbstart=2}
6082 if(bar_type[0]==']'){s.rbstop=2
6086 s.invis=true}
6087 s.iend=parse.bol+line.index
6088 if(s.rbstart&&curvoice.norepbra&&!curvoice.second)
6089 s.norepbra=true
6090 if(s.text){if(bar_type.slice(-1)=='['&&bar_type!='[')
6092 if(s.text[0]=='1'){if(curvoice.tie_s)
6100 curvoice.tie_s.notes[m].s=curvoice.tie_s}}
6104 adjust_dur(s);if((bar_type=="["||bar_type=="|:")&&!curvoice.eoln){s2=curvoice.last_sym
6105 if(s2&&s2.time==curvoice.time){if(s2&&s2.type==C.BAR){if(bar_type=="["&&!s2.text&&(curvoice.st==0||(par_sy.staves[curvoice.st-1].flags&STOP_BAR)||s.norepbra)){if(s.text)
6106 s2.text=s.text
6107 if(s.a_gch)
6108 s2.a_gch=s.a_gch
6109 if(s.norepbra)
6110 s2.norepbra=s.norepbra
6111 if(s.rbstart)
6112 s2.rbstart=s.rbstart
6113 if(s.rbstop)
6114 s2.rbstop=s.rbstop
6120 switch(bar_type){case"[":s.rbstop=2
6121 case"[]":case"[|]":s.invis=true;bar_type="[]"
6127 case"[|":case"|]":s.rbstop=2
6129 s.bar_type=bar_type
6131 curvoice.lyric_restart=s
6133 curvoice.sym_restart=s
6134 sym_link(s);s.st=curvoice.st
6135 if(s.rbstart&&!curvoice.norepbra&&curvoice.st>0&&!(par_sy.staves[curvoice.st-1].flags&STOP_BAR)){s2={type:C.BAR,fname:s.fname,istart:s.istart,iend:s.iend,bar_type:"[",multi:0,invis:true,text:s.text,rbstart:2}
6137 delete s.text;s.rbstart=0}
6138 if(!s.bar_dotted&&!s.invis)
6140 function parse_staves(p){var v,vid,vids={},a_vf=[],err=false,flags=0,brace=0,bracket=0,parenth=0,flags_st=0,e,a=p.match(/[^[\]|{}()*+\s]+|[^\s]/g)
6197 var a=text.match(/[^\s"=]+=?|"[^"]+"/g)
6264 function slur_add(enote,e_is_note){var i,s,sl,snote,s_is_note
6269 if(snote.s!=enote.s){sl.note=enote
6272 s=s_is_note?snote:snote.s
6273 if(!s.sls)
6274 s.sls=[];s.sls.push(sl)
6277 snote.s.sl1=true
6280 if(enote.s.grace)
6281 enote.s.sl2=true
6283 if(enote.grace){error(1,enote.s,errs.bad_slur_end)
6285 for(s=enote.s.prev;s;s=s.prev){if(s.type==C.BAR&&s.bar_type[0]==':'&&s.text){if(!s.sls)
6286 s.sls=[];s.sls.push({note:enote,ty:C.SL_AUTO})
6288 s.sls[s.sls.length-1].is_note=e_is_note
6291 function pit2mid(pit,acc){var p=[0,2,4,5,7,9,11][pit%7],o=((pit/7)|0)*12,p0,p1,s,b40
6296 if(acc){if(typeof acc!="number"){s=acc[0]/acc[1]
6298 return p+o+s}else{s=acc}}else{if(cfmt.temper)
6301 if(!cfmt.nedo){if(!cfmt.temper){p+=o+s
6305 return cfmt.temper[b40]+o+s}}
6307 if(s>0){p1=cfmt.temper[(abc2svg.p_b40[pit%7]+1)%40]
6312 s=-s}
6313 return p0+o+(p1-p0)*s}
6314 Abc.prototype.new_note=function(grace,sls){var note,s,in_chord,c,dcn,type,tie_s,acc_tie,i,n,s2,nd,res,num,dur,apit,sl1=[],line=parse.line,a_dcn_sav=a_dcn
6315 function do_ties(s,tie_s){var m,note,mid
6316 for(m=0;m<=s.nhd;m++){note=s.notes[m]
6321 note.s=s
6322 tie_s.tie_s=s
6325 if(s2.notes[0].midi==mid){s2.tie_s=s
6327 note.s=s
6328 s2.notes[0].s=s2
6329 tie_s.tie_s=s
6331 s.ti2=tie_s}}
6332 a_dcn=null;parse.stemless=false;s={type:C.NOTE,fname:parse.fname,stem:0,multi:0,nhd:0,xmx:0}
6333 s.istart=parse.bol+line.index
6335 s.color=curvoice.color
6338 if(grace){s.grace=true}else{if(a_gch)
6339 csan_add(s)
6340 if(parse.repeat_n){s.repeat_n=parse.repeat_n;s.repeat_k=parse.repeat_k;parse.repeat_n=0}}
6342 switch(c){case'X':s.invis=true
6343 case'Z':s.type=C.MREST;c=line.next_char()
6344 s.nmes=(c>'0'&&c<='9')?line.get_int():1;s.dur=curvoice.wmeasure*s.nmes
6345 if(curvoice.second){curvoice.time+=s.dur
6347 if(s.nmes==1){s.type=C.REST;s.dur_orig=s.dur;s.notes=[{pit:18,dur:s.dur}]}else{glovar.mrest_p=true}
6349 case'y':s.type=C.SPACE;s.invis=true;s.dur=0;c=line.next_char()
6351 s.width=line.get_int()
6353 s.width=10
6357 case'x':s.invis=true
6358 case'z':s.type=C.REST;line.index++;nd=parse_dur(line);s.dur_orig=((curvoice.ulen<0)?C.BLEN:curvoice.ulen)*nd[0]/nd[1];s.dur=s.dur_orig*curvoice.dur_fact;s.notes=[{pit:18,dur:s.dur_orig}]
6363 s.notes=[]
6384 note=parse_basic_note(line,s.grace?C.BLEN/4:curvoice.ulen<0?C.BLEN:curvoice.ulen)
6406 note.s=s}
6408 s.notes.push(note)
6412 while(1){switch(c){case')':note.s=s
6417 note.s=s
6418 curvoice.tie_s=s
6429 if(c==']'){line.index++;nd=parse_dur(line);s.nhd=s.notes.length-1
6430 for(i=0;i<=s.nhd;i++){note=s.notes[i];note.dur=note.dur*nd[0]/nd[1]}
6435 s.notes[0].s=s
6436 curvoice.sls.push({note:s.notes[0],ty:i})
6439 s.dur_orig=s.notes[0].dur;s.dur=s.notes[0].dur*curvoice.dur_fact}
6440 if(s.grace&&s.type!=C.NOTE){syntax(1,errs.bad_grace)
6442 if(tie_s&&s.type!=C.NOTE){syntax(1,"Bad tie")
6444 if(s.notes){if(!grace){switch(curvoice.pos.stm){case C.SL_ABOVE:s.stem=1;break
6445 case C.SL_BELOW:s.stem=-1;break
6446 case C.SL_HIDDEN:s.stemless=true;break}
6449 if(num>0){n=num*2-1;s.dur=s.dur*n/num;s.dur_orig=s.dur_orig*n/num
6450 for(i=0;i<=s.nhd;i++)
6451 s.notes[i].dur=s.notes[i].dur*n/num;s2.dur/=num;s2.dur_orig/=num
6453 s2.notes[i].dur/=num}else{num=-num;n=num*2-1;s.dur/=num;s.dur_orig/=num
6454 for(i=0;i<=s.nhd;i++)
6455 s.notes[i].dur/=num;s2.dur=s2.dur*n/num;s2.dur_orig=s2.dur_orig*n/num
6460 for(i=0;i<=s.nhd;i++)
6461 s.notes[i].dur/=div;s.dur/=div;s.dur_orig/=div
6463 s.stem=grace.stem}
6464 curvoice.last_note=s
6467 for(i=0;i<=s.nhd;i++){s.notes[i].tie_ty=ty
6468 s.notes[i].s=s}
6472 curvoice.tie_s=s
6473 for(i=0;i<=s.nhd;i++){note=s.notes[i]
6480 case')':s.notes[0].s=s
6481 slur_add(s.notes[0])
6490 do_ties(s,tie_s)}
6491 sym_link(s)
6493 s.shiftunison=cfmt.shiftunison
6495 curvoice.lyric_restart=s
6497 curvoice.sym_restart=s}
6499 deco_cnv(a_dcn_sav,s,s.prev)
6503 s.ottava=parse.ottava
6506 s.stemless=true
6507 s.iend=parse.bol+line.index
6508 return s}
6509 function tp_adj(s,fact){var tim=s.time
6511 while(1){s.in_tuplet=true
6512 if(!s.grace){s.time=tim
6513 if(s.dur){s.dur*=fact
6514 tim+=s.dur}}
6515 if(!s.next){if(s.tpe)
6516 s.tpe++
6518 s.tpe=1
6520 s=s.next}}
6522 function parse_music_line(){var grace,last_note_sav,a_dcn_sav,no_eol,s,tps,tp=[],tpn=-1,sls=[],line=parse.line
6543 function parse_mac(k,m,b){var te,ti,curv,s,line_sav=line,istart_sav=parse.istart;parse.line=line=new scanBuf;parse.istart+=line_sav.index;if(cfmt.writefields.indexOf('m')<0){line.buffer=k.replace('n',n2n(b))
6544 s=curvoice.last_sym
6547 if(!s)
6548 s=curvoice.sym
6549 for(s=s.next;s;s=s.next)
6550 s.noplay=true
6557 s=curvoice.last_sym
6564 if(!s)
6565 s=curvoice.sym
6566 for(;s;s=s.next)
6567 s.invis=s.play=true
6571 function parse_seq(in_mac){var c,idx,type,k,s,dcn,i,n,text,note
6601 switch(type[0]){case' ':s=curvoice.last_note
6602 if(s){s.beam_end=true
6638 case')':s=curvoice.last_sym
6639 if(s){switch(s.type){case C.SPACE:if(!s.notes){s.notes=[]
6640 s.notes[0]={}}
6642 case C.GRACE:for(s=s.extra;s.next;s=s.next);break
6643 default:s=null
6645 if(!s){syntax(1,errs.bad_char,c)
6647 s.notes[0].s=s
6648 slur_add(s.notes[0])
6682 case'n':s=self.new_note(grace,sls)
6683 if(!s)
6685 if(grace||!s.notes)
6687 if(tpn>=0){s.tp=tp.slice(tpn)
6690 s.tp[0].s=tps
6691 tps=s}else if(!tps){continue}
6697 if(k.s)
6698 tps=k.s
6730 case'}':s=curvoice.last_note
6731 if(!grace||!s){syntax(1,errs.bad_char,c)
6735 if(!s.prev&&!curvoice.ckey.k_bagpipe){for(i=0;i<=s.nhd;i++)
6736 s.notes[i].dur*=2;s.dur*=2;s.dur_orig*=2}
6767 var add_fstyle=typeof document!="undefined"?function(s){var e
6774 s=s.match(/[^{]+{[^}]+}/g)
6775 while(1){e=s.shift()
6778 sheet.insertRule(e,sheet.cssRules.length)}}:function(s){font_style+="\n"+s}
6920 function write_text(text,action){if(action=='s')
6947 words=text.slice(j,i);words=words.split(/\s+/);w=k=0
7103 str=trim_title(str,info_font.T[0]=='s')
7170 function m_gl(s){return s.replace(/[Cco]\||[co]\.|./g,function(e){var m=tgls["mtr"+e]
7235 function set_scale(s){var new_dy,new_scale=s.p_v.scale
7236 if(new_scale==1){set_sscale(s.st)
7239 if(staff_tb[s.st].staffscale!=1){new_scale*=staff_tb[s.st].staffscale;new_dy=staff_tb[s.st].y}
7242 stv_g.scale=new_scale;stv_g.dy=new_dy;stv_g.st=staff_tb[s.st].staffscale==1?-1:s.st;stv_g.v=s.v;set_g()}
7257 function anno_out(s,t,f){if(s.istart==undefined)
7259 var type=s.type,h=s.ymx-s.ymn+4,wl=s.wl||2,wr=s.wr||2
7260 if(s.grace)
7262 f(t||abc2svg.sym_name[type],s.istart,s.iend,s.x-wl-2,staff_tb[s.st].y+s.ymn+h-2,wl+wr+4,h,s)}
7263 function a_start(s,t){anno_out(s,t,user.anno_start)}
7264 function a_stop(s,t){anno_out(s,t,user.anno_stop)}
7267 function anno_put(){var s
7268 while(1){s=anno_a.shift()
7269 if(!s)
7271 switch(s.type){case C.CLEF:case C.METER:case C.KEY:case C.REST:if(s.type!=C.REST||s.rep_nb){set_sscale(s.st)
7273 case C.GRACE:case C.NOTE:case C.MREST:set_scale(s)
7275 anno_stop(s)}}
7456 function out_glisq(x2,y2,de){var de1=de.start,x1=de1.x,y1=de1.y+staff_tb[de1.st].y,ar=Math.atan2(y1-y2,x2-x1),a=ar/Math.PI*180,len=(x2-x1)/Math.cos(ar);g_open(x1,y1,a);x1=de1.s.dots?13+de1.s.xmx:8;len=(len-x1-6)/6|0
7461 function out_gliss(x2,y2,de){var de1=de.start,x1=de1.x,y1=de1.y+staff_tb[de1.st].y,ar=-Math.atan2(y2-y1,x2-x1),a=ar/Math.PI*180,len=(x2-x1)/Math.cos(ar);g_open(x1,y1,a);x1=de1.s.dots?13+de1.s.xmx:8;len-=x1+8;xypath(x1,0);output+='h'+len.toFixed(1)+'" stroke-width="1"/>\n';g_close()}
7468 function tempo_note(s,dur){var p,elts=identify_note(s,dur)
7483 function tempo_build(s){var i,j,bx,p,wh,dy,w=0,str=[]
7484 if(s.tempo_str)
7489 if(s.tempo_str1){str.push(s.tempo_str1)
7490 w+=strwh(s.tempo_str1)[0]}
7491 if(s.tempo_notes){dy=' dy="-.05em"'
7492 for(i=0;i<s.tempo_notes.length;i++){p=tempo_note(s,s.tempo_notes[i])
7503 if(s.tempo_ca){str.push(s.tempo_ca)
7504 w+=strwh(s.tempo_ca)[0]
7505 j=s.tempo_ca.length+1}
7506 if(s.tempo){str.push(s.tempo)
7507 w+=strwh(s.tempo.toString())[0]}else{p=tempo_note(s,s.new_beat)
7515 if(s.tempo_str2){if(dy)
7517 s.tempo_str2+'</tspan>')
7519 str.push(s.tempo_str2)
7520 w+=strwh(s.tempo_str2)[0]}
7521 s.tempo_str=str.join(' ')
7523 s.tempo_wh=[w,13.0]
7525 s.tempo_dy=dy}
7526 function writempo(s,x,y){var bx
7532 output+='">'+s.tempo_str+'</text>\n'
7536 output+='" width="'+(s.tempo_wh[0]+2).toFixed(1)+'" height="'+bh.toFixed(1)+'"/>\n'}
7537 s.invis=true}
7588 function sym_link(s){if(!s.fname)
7589 set_ref(s)
7590 parse.last_sym=s;s.prev=curvoice.last_sym
7592 curvoice.last_sym.next=s
7594 curvoice.sym=s;curvoice.last_sym=s
7595 s.v=curvoice.v;s.p_v=curvoice;s.st=curvoice.cst;s.time=curvoice.time
7596 if(s.dur&&!s.grace)
7597 curvoice.time+=s.dur;s.pos=curvoice.pos
7599 s.second=true
7601 s.floating=true
7602 if(curvoice.eoln){s.soln=true
7604 function sym_add(p_voice,type){var s={type:type,dur:0},s2,p_voice2=curvoice;curvoice=p_voice;sym_link(s);curvoice=p_voice2;s2=s.prev
7606 s2=s.next
7607 if(s2){s.fname=s2.fname;s.istart=s2.istart;s.iend=s2.iend}
7608 return s}
7610 function sort_all(){var s,s2,p_voice,v,time,w,wmin,ir,multi,prev,nb,ir2,v2,fl,new_sy,nv=voice_tb.length,vtb=[],vn=[],sy=cur_sy
7638 s=vtb[v]
7639 if(!s||s.time>time)
7641 w=w_tb[s.type]
7642 if(s.time<time){time=s.time;wmin=w}else if(w<wmin){wmin=w}}
7648 s=vtb[v]
7649 if(!s||s.time!=time||w_tb[s.type]!=wmin)
7651 if(s.type==C.STAVES){new_sy=s.sy;for(ir2=0;ir2<nv;ir2++){if(vn[ir2]==undefined)
7656 if(fl){fl=0;s.seqst=true}
7657 s.ts_prev=prev
7658 prev.ts_next=s
7659 prev=s
7660 vtb[v]=s.next}
7662 function voice_adj(sys_chg){var p_voice,s,s2,v
7663 function set_feathered_beam(s1){var s,s2,t,d,b,i,a,d=s1.dur,n=1
7664 for(s=s1;s;s=s.next){if(s.beam_end||!s.next)
7669 s2=s;b=d/2;a=d/(n-1);t=s1.time
7670 if(s1.feathered_beam>0){for(s=s1,i=n-1;s!=s2;s=s.next,i--){d=((a*i)|0)+b;s.dur=d;s.time=t;t+=d}}else{for(s=s1,i=0;s!=s2;s=s.next,i++){d=((a*i)|0)+b;s.dur=d;s.time=t;t+=d}}
7671 s.dur=s.time+s.dur-t;s.time=t}
7674 s=glovar.tempo
7675 if(s&&staves_found<=0){v=par_sy.top_voice;p_voice=voice_tb[v];if(p_voice.sym&&p_voice.sym.type!=C.TEMPO&&(!p_voice.sym.next||p_voice.sym.next.type!=C.TEMPO)){s=clone(s);s.v=v;s.p_v=p_voice;s.st=p_voice.st;s.time=0;s.prev=p_voice.sym
7676 s.next=p_voice.sym.next
7677 if(s.next)
7678 s.next.prev=s
7679 p_voice.sym.next=s}}
7685 s=sl.note.s
7686 for(s2=s.next;s2;s2=s2.next){if(s2.bar_type&&s2.bar_type[0]==':')
7688 if(s2){if(!s.sls)
7689 s.sls=[]
7690 s.sls.push({ty:sl.ty,note:{s:s2}})}else{syntax(1,"Lack of ending slur(s)")}}}
7691 for(s=p_voice.sym;s;s=s.next){if(s.time>=staves_found)
7693 for(;s;s=s.next){switch(s.type){case C.GRACE:if(s.next&&s.next.type==C.BAR)
7694 s.time--
7697 for(s2=s.next;s2;s2=s2.next){switch(s2.type){case C.SPACE:continue
7700 s.a_ly=s2.a_ly;s2.a_ly=null
7704 case C.MREST:if(s.next&&s.next.type!=C.BAR){syntax(1,"Lack of bar after multi-measure rest")
7705 s2=clone(s)
7709 s2.time=s.next.time
7710 s2.prev=s
7711 s2.next=s.next
7713 s.next=s2}
7715 if(s.feathered_beam)
7716 set_feathered_beam(s)}}}
7727 Abc.prototype.set_bar_num=function(){var s,s2,tim,rep_tim,k,n,bar_num=gene.nbar,bar_tim=0,ptim=0,wmeasure=voice_tb[cur_sy.top_voice].meter.wmeasure
7728 for(s=tsfirst;;s=s.ts_next){if(!s)
7730 switch(s.type){case C.METER:wmeasure=s.wmeasure
7732 case C.BAR:if(s.bar_num)
7733 bar_num=s.bar_num
7736 for(s2=s.ts_next;s2;s2=s2.ts_next){if(s2.type==C.BAR&&s2.time){if(s2.time<wmeasure){s=s2
7737 bar_tim=s.time}
7739 for(;s;s=s.ts_next){if(!s.seqst)
7741 switch(s.type){case C.METER:bar_num+=(s.time-bar_tim)/wmeasure
7742 bar_tim=s.time
7743 wmeasure=s.wmeasure
7745 case C.BAR:if(s.invis)
7747 tim=s.time
7748 if(s.bar_num){bar_num=s.bar_num
7751 if(wmeasure==1){if(s.bar_dotted)
7753 if(s.text){if(!cfmt.contbarnb){if(s.text[0]=='1')
7757 s.bar_num=++bar_num
7761 if(cfmt.checkbars&&((k&&!s.bar_dotted&&s.next)||(tim>ptim+wmeasure&&s.prev.type!=C.MREST)))
7762 error(0,s,"Bad measure duration")
7767 if(s.text){if(s.text[0]=='1'){if(cfmt.contbarnb)
7772 s.bar_num=n}else{if(cfmt.contbarnb)
7778 s.bar_num=n}}else{if(k)
7780 s.bar_num=n}
7797 var i,note,notes,map,tmp,ns,ty='',a=text.split(/\s+/)
7846 function set_transp(){var s,transp,sndtran
7859 if(is_voice_sig()){curvoice.key=s=clone(curvoice.okey)}else{s=curvoice.last_sym
7860 while(1){if(s.type==C.KEY)
7862 s=s.prev
7863 if(!s){s=curvoice.key
7866 s.k_transp=transp
7868 s.k_sndtran=sndtran
7869 curvoice.ckey=clone(s)
7871 s.k_sf=0}
7872 function note_transp(s,sk,note){var ak,an,d,b40,n=note.pit,a=note.acc
7884 an=3}else if(sk.k_none){if(acc_same_pitch(s,note.pit))
7885 return}else if(sk.k_a_acc){if(acc_same_pitch(s,note.pit))
7891 function pit_adj(){var i,p_v,s,sk,g,nv=voice_tb.length
7897 s=p_v.sym
7898 while(s){if(!sk){for(;s;s=s.next){if(s.type==C.KEY&&s.k_transp)
7900 for(;s;s=s.next){switch(s.type){case C.GRACE:for(g=s.extra;g;g=g.next){for(i=0;i<=g.nhd;i++)
7903 case C.NOTE:for(i=0;i<=s.nhd;i++)
7904 note_transp(s,sk,s.notes[i])
7907 s.k_sf=sk.k_sf
7908 key_transp(s)
7909 if(!s.k_transp)
7911 sk=s
7923 Abc.prototype.do_pscom=function(text){var h1,val,s,cmd,param,n,k,b
7934 if(parse.state>=2){s=new_block("text");s.text=param
7935 s.opt='c'
7936 s.font=gene.curfont
7941 goto_tune();s=new_clef(param)
7942 if(s)
7943 get_clef(s)}
7960 s=new_block("mc_"+param)
7992 if(!param.length){n=1;k=1}else{b=param.split(/\s+/);n=parseInt(b[0]);k=parseInt(b[1])
8000 if(param){values=param.split(/\s+/);h1=get_unit(values[0])
8012 if(parse.state>=2){s=new_block(cmd);s.x=(lwidth-len)/2/cfmt.scale;s.l=len/cfmt.scale;s.sk1=h1;s.sk2=h2
8041 s={type:C.STBRK,dur:0}
8042 if(param.slice(-1)=='f'){s.stbrk_forced=true
8047 s.xmx=val}else{s.xmx=14}
8048 sym_link(s)
8054 if(parse.scores&&parse.scores.length>0){text=parse.scores.shift();cmd=text.match(/([^\s]+)\s*(.*)/);get_staves(cmd[1],cmd[2])}else{get_staves(cmd,param)}
8063 if(parse.state>=2){s=new_block(cmd);s.text=param
8064 s.opt=cfmt.textoption
8065 s.font=gene.curfont
8078 for(s=curvoice.last_sym;s;s=s.prev){switch(s.type){case C.NOTE:s=clone(curvoice.okey);s.k_old_sf=curvoice.ckey.k_sf;sym_link(s)
8099 if(parse.state>=2){s=new_block(cmd);s.sk=val
8102 case"newpage":case"leftmargin":case"rightmargin":case"pagescale":case"pagewidth":case"printmargin":case"scale":case"staffwidth":if(parse.state>=2){s=new_block(cmd);s.param=param
8110 Abc.prototype.do_begin_end=function(type,opt,text){var i,j,action,s
8113 case"ml":if(parse.state>=2){s=new_block(type);s.text=text}else{blk_flush()
8125 style+=text.slice(i+1,j).replace(/\s+$/,'')}
8138 if(parse.state>=2){s=new_block(type);s.text=text
8139 s.opt=action
8140 s.font=gene.curfont
8144 function generate(in_mc){var s,v,p_voice;if(parse.tp){syntax(1,"No end of tuplet")
8145 s=parse.tps
8146 if(s)
8147 delete s.tp
8184 function acc_same_pitch(s,pit){var i,time=s.time
8185 for(s=s.prev;s;s=s.prev){switch(s.type){case C.BAR:if(s.time<time)
8187 while(1){s=s.prev
8188 if(!s)
8190 if(s.type==C.NOTE){if(s.time+s.dur==time)
8193 if(s.time<time)
8195 for(i=0;i<=s.nhd;i++){if(s.notes[i].pit==pit&&s.notes[i].tie_ty)
8196 return s.notes[i].acc}
8198 case C.NOTE:for(i=0;i<=s.nhd;i++){if(s.notes[i].pit==pit)
8199 return s.notes[i].acc}
8202 function get_staves(cmd,parm){var s,p_voice,p_voice2,i,flags,v,vid,st,range,a_vf=parse_staves(parm)
8215 curvoice.time=maxtime;s={type:C.STAVES,dur:0}
8216 sym_link(s);par_sy.nstaff=nstaff;new_syst();s.sy=par_sy}
8289 function get_vover(type){var p_voice2,p_voice3,range,s,time,v,v2,v3,line=parse.line
8317 for(s=curvoice.last_sym;;s=s.prev){if(s.type==C.BAR||s.time<=time)
8319 vover.time=s.time}else{if(curvoice!=vover.p_voice&&curvoice.time!=vover.p_voice.time){syntax(1,"Wrong duration in voice overlay")
8324 function is_voice_sig(){var s
8327 for(s=curvoice.last_sym;s;s=s.prev)
8328 if(w_tb[s.type]!=0)
8331 function get_clef(s){if(is_voice_sig()){curvoice.clef=s
8333 sym_link(s);s.clef_small=true
8334 var s2=s.prev
8335 if(s2&&s2.type==C.BAR&&s2.bar_type[0]!=':'){s.next=s2
8336 s.prev=s2.prev
8337 if(s.prev)
8338 s.prev.next=s
8339 s2.prev=s
8342 if(s.soln){delete s.soln
8344 function get_key(parm){var v,p_voice,s,transp,sndtran,a=new_key(parm),s_key=a[0];a=a[1]
8431 function goto_tune(is_K){var v,p_voice,s={type:C.STAVES,dur:0,sy:par_sy}
8443 p_voice=curvoice;curvoice=voice_tb[par_sy.top_voice];sym_link(s)
8445 function get_sym(p,cont){var s,c,i,j,d
8448 if(cont){s=curvoice.sym_cont
8449 if(!s){syntax(1,"+: symbol line without music")
8450 return}}else{if(curvoice.sym_restart){curvoice.sym_start=s=curvoice.sym_restart;curvoice.sym_restart=null}else{s=curvoice.sym_start}
8451 if(!s)
8452 s=curvoice.sym
8453 if(!s){syntax(1,"s: without music")
8460 switch(c){case'|':while(s&&s.type!=C.BAR)
8461 s=s.next
8462 if(!s){syntax(1,"Not enough measure bars for symbol line")
8464 s=s.next;i++
8479 while(s&&(s.type!=C.NOTE||s.grace))
8480 s=s.next
8481 if(!s){syntax(1,"Too many elements in symbol line")
8484 case'!':deco_cnv([d.slice(1,-1)],s,s.prev)
8488 csan_add(s)
8490 s=s.next;i++}
8491 curvoice.lyric_cont=s}
8492 function get_lyrics(text,cont){var s,word,p,i,j,ly,dfnt
8497 if(cont){s=curvoice.lyric_cont
8498 if(!s){syntax(1,"+: lyric without music")
8500 if(curvoice.lyric_restart){curvoice.lyric_start=s=curvoice.lyric_restart;curvoice.lyric_restart=null;curvoice.lyric_line=0}else{curvoice.lyric_line++;s=curvoice.lyric_start}
8501 if(!s)
8502 s=curvoice.sym
8503 if(!s){syntax(1,"w: without music")
8512 switch(p[i]){case'|':while(s&&s.type!=C.BAR)
8513 s=s.next
8514 if(!s){syntax(1,"Not enough measure bars for lyric line")
8516 s=s.next;i++
8524 default:if(p[i]=='\\'&&i==p.length-1){curvoice.lyric_cont=s
8540 while(s&&(s.type!=C.NOTE||s.grace))
8541 s=s.next
8542 if(!s){syntax(1,"Too many words in lyric line")
8544 if(word&&s.pos.voc!=C.SL_HIDDEN){if(word.match(/^\$\d/)){gene.curfont=word[1]=='0'?dfnt:get_font("u"+word[1])
8547 if(!s.a_ly)
8548 s.a_ly=[]
8549 s.a_ly[curvoice.lyric_line]=ly}
8550 s=s.next;i++}
8551 curvoice.lyric_cont=s}
8552 function ly_width(s,wlw){var ly,sz,swfac,align,xx,w,i,j,k,shift,p,a_ly=s.a_ly;align=0
8559 if(s.type==C.GRACE){shift=s.wl}else if((p[0]>='0'&&p[0]<='9'&&p.length>2)||p[1]==':'||p[0]=='('||p[0]==')'){if(p[0]=='('){sz=cwid('(')*swfac}else{j=p.indexOf(' ');set_font(ly.font)
8574 for(k=s.next;k;k=k.next){switch(k.type){case C.NOTE:case C.REST:if(!k.a_ly||!k.a_ly[i])
8588 if(xx>s.wr)
8589 s.wr=xx}
8594 function draw_lyric_line(p_voice,j,y){var p,lastx,w,s,s2,ly,lyl,hyflag,lflag,x0,font,shift
8596 for(s=p_voice.sym;;s=s.next)
8597 if(s.type!=C.CLEF&&s.type!=C.KEY&&s.type!=C.METER)
8599 lastx=s.prev?s.prev.x:tsfirst.x;x0=0
8600 for(;s;s=s.next){if(s.a_ly)
8601 ly=s.a_ly[j]
8604 if(!ly){switch(s.type){case C.REST:case C.MREST:if(lflag){out_wln(lastx+3,y,x0-lastx);lflag=false;lastx=s.x+s.wr}}
8608 if(hyflag){if(p=="_\n"){p="-\n"}else if(p!="-\n"){out_hyph(lastx,y,s.x-shift-lastx);hyflag=false;lastx=s.x+s.wr}}
8609 if(lflag&&p!="_\n"){out_wln(lastx+3,y,x0-lastx+3);lflag=false;lastx=s.x+s.wr}
8610 if(p=="-\n"||p=="_\n"){if(x0==0&&lastx>s.x-18)
8611 lastx=s.x-18
8615 lflag=true;x0=s.x-shift
8617 x0=s.x-shift;if(p.slice(-1)=='\n'){p=p.slice(0,-1);hyflag=true}
8618 if(user.anno_start||user.anno_stop){s2={st:s.st,istart:ly.istart,iend:ly.iend,x:x0,y:y,ymn:y,ymx:y+gene.curfont.size,wl:0,wr:w}
8627 for(p_voice.s_next;s;s=s.next){if(s.type==C.NOTE){if(!s.a_ly)
8629 ly=s.a_ly[j]
8645 function draw_all_lyrics(){var p_voice,s,v,nly,i,x,y,w,a_ly,ly,lyst_tb=new Array(nstaff+1),nv=voice_tb.length,h_tb=new Array(nv),nly_tb=new Array(nv),above_tb=new Array(nv),rv_tb=new Array(nv),top=0,bot=0,st=-1
8653 for(s=p_voice.sym;s;s=s.next){a_ly=s.a_ly
8656 x=s.x;w=10
8707 for(s=p_voice.sym.next;s;s=s.next){if(s.a_ly){y_set(st,1,s.x-2,10,top)}}}
8709 if(nly_tb[p_voice.v]>0){for(s=p_voice.sym.next;s;s=s.next){if(s.a_ly){y_set(st,0,s.x-2,10,bot)}}}else{y_set(st,0,0,realwidth,bot)}}}}
8788 function gch_transp(s){var gch,i=s.a_gch.length
8789 while(--i>=0){gch=s.a_gch[i]
8792 function csan_add(s){s.a_gch=a_gch;a_gch=null
8794 gch_transp(s)}
8795 Abc.prototype.gch_build=function(s){var gch,wh,xspc,ix,y_above=0,y_below=0,y_left=0,y_right=0,GCHPRE=.4;for(ix=0;ix<s.a_gch.length;ix++){gch=s.a_gch[ix]
8823 for(ix=0;ix<s.a_gch.length;ix++){gch=s.a_gch[ix]
8828 Abc.prototype.draw_gchord=function(i,s,x,y){var y2,an=s.a_gch[i],h=an.font.size,pad=an.font.pad,w=an.text.wh[0]+pad*2
8830 y_set(s.st,0,x,w,y-pad)
8832 case'^':y=y_get(s.st,1,x,w)
8834 y_set(s.st,1,x,w,y+h+pad)
8836 case'<':case'>':if(an.type=='<'){if(s.notes[0].acc)
8837 x-=s.notes[0].shac
8838 x-=pad}else{if(s.xmx)
8839 x+=s.xmx
8840 if(s.dots)
8841 x+=1.5+3.5*s.dots
8843 y+=(s.type==C.NOTE?(((s.notes[s.nhd].pit+s.notes[0].pit)>>1)-
8848 y_set(s.st,1,x,w,y+h+pad)}else{y-=h+pad
8849 y_set(s.st,0,x,w,y-pad)}
8851 case'@':y+=(s.type==C.NOTE?(((s.notes[s.nhd].pit+s.notes[0].pit)>>1)-
8855 if(y2>staff_tb[s.st].ann_top)
8856 staff_tb[s.st].ann_top=y2}else{y2=y
8857 if(y2<staff_tb[s.st].ann_bot)
8858 staff_tb[s.st].ann_bot=y2}
8862 set_dscale(s.st)
8864 user.anno_start("annot",an.istart,an.iend,x-2,y+h+2,w+4,h+4,s)
8867 user.anno_stop("annot",an.istart,an.iend,x-2,y+h+2,w+4,h+4,s)}
8868 function draw_all_chsy(){var s,san1,an,i,y,w,pos=curvoice.pos.gch==C.SL_BELOW?-1:1,n_an=0,minmax=new Array(nstaff+1)
8871 function set_an_yu(j){var an,i,s,x,y,w
8872 for(s=san1;s;s=s.ts_next){an=s.a_gch
8879 if((an.type=='g'&&pos>0)||an.type=='^'){x=s.x+an.x
8883 y=y_get(s.st,1,x,w)
8884 if(an.type=='g'&&y<minmax[s.st].yup)
8885 y=minmax[s.st].yup}else if((an.type=='g'&&pos<=0)||an.type=='_'){continue}else{x=s.x+an.x
8887 self.draw_gchord(i,s,x,y)}}
8889 for(var s=san1;s;s=s.ts_next){an=s.a_gch
8895 x=s.x+an.x
8899 y=y_get(s.st,0,x,w)
8900 if(an.type=='g'&&y>minmax[s.st].ydn)
8901 y=minmax[s.st].ydn
8902 self.draw_gchord(i,s,x,y)}}
8905 for(s=tsfirst;s;s=s.ts_next){an=s.a_gch
8909 san1=s
8915 if(pos>0){y=y_get(s.st,true,s.x,w)
8916 if(y>minmax[s.st].yup)
8917 minmax[s.st].yup=y}else if(pos<0){y=y_get(s.st,false,s.x,w)
8918 if(y<minmax[s.st].ydn)
8919 minmax[s.st].ydn=y}
8928 Abc.prototype.add_style=function(s){style+=s};Abc.prototype.cfmt=function(){return cfmt};Abc.prototype.clone=clone;Abc.prototype.deco_cnv=deco_cnv;Abc.prototype.defs_add=defs_add
8931 Abc.prototype.goto_tune=goto_tune;Abc.prototype.info=function(){return info};Abc.prototype.new_block=new_block;Abc.prototype.out_arp=out_arp;Abc.prototype.out_deco_str=out_deco_str;Abc.prototype.out_deco_val=out_deco_val;Abc.prototype.out_ltr=out_ltr;Abc.prototype.param_set_font=param_set_font;Abc.prototype.parse=parse;Abc.prototype.psdeco=empty_function;Abc.prototype.psxygl=empty_function;Abc.prototype.set_cur_sy=function(sy){cur_sy=sy};Abc.prototype.set_dscale=set_dscale;Abc.prototype.set_font=set_font;Abc.prototype.set_a_gch=function(s,a){a_gch=a;csan_add(s)}
8934 Abc.prototype.set_scale=set_scale;Abc.prototype.set_tsfirst=function(s){tsfirst=s};Abc.prototype.set_v_param=set_v_param;Abc.prototype.strwh=strwh;Abc.prototype.stv_g=function(){return stv_g};Abc.prototype.svg_flush=svg_flush;Abc.prototype.syntax=syntax;Abc.prototype.tunes=tunes