abc2svg
Check-in [41f131ebeb]
Not logged in

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:core: fix: bad output when %%score after K: and T: at start of tune
Downloads: Tarball | ZIP archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: 41f131ebeb68dc0672f0f7682c1d6609e5833f19
User & Date: jef 2019-07-21 08:43:29.923
Context
2019-07-21
09:00
core: fix: ambiguous dots when seconds on 2 voices - reported by Hudson Lacerda ... (check-in: 0a2c4f673c user: jef tags: trunk)
08:43
core: fix: bad output when %%score after K: and T: at start of tune ... (check-in: 41f131ebeb user: jef tags: trunk)
2019-07-20
06:44
core: extended dots for any note/rest length - code from Hudson Lacerda ... (check-in: 35d46e8f63 user: jef tags: trunk)
Changes
Unified Diff Ignore Whitespace Patch
Changes to core/front.js.
627
628
629
630
631
632
633

634
635
636
637
638
639
640
				tune_filter()
			continue
		case 'T':
			switch (parse.state) {
			case 0:
				continue
			case 1:

				if (info.T == undefined)	// (keep empty T:)
					info.T = text
				else
					info.T += "\n" + text
				continue
			}
			s = new_block("title");







>







627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
				tune_filter()
			continue
		case 'T':
			switch (parse.state) {
			case 0:
				continue
			case 1:
			case 2:
				if (info.T == undefined)	// (keep empty T:)
					info.T = text
				else
					info.T += "\n" + text
				continue
			}
			s = new_block("title");
Changes to core/tune.js.
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
		param = param.slice(0, -5).trim()
	} else if (fmt_lock[cmd]) {
		return
	}

	switch (cmd) {
	case "center":
		if (parse.state >= 2) {
			s = new_block("text");
			s.text = param
			s.opt = 'c'
			return
		}
		write_text(param, 'c')
		return







|







795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
		param = param.slice(0, -5).trim()
	} else if (fmt_lock[cmd]) {
		return
	}

	switch (cmd) {
	case "center":
		if (parse.state == 3) {
			s = new_block("text");
			s.text = param
			s.opt = 'c'
			return
		}
		write_text(param, 'c')
		return
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
		}
		if (h1 < 1)
			h1 = 14
		if (h2 < 1)
			h2 = h1
		if (len < 1)
			len = 90
		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
			return
		}







|







949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
		}
		if (h1 < 1)
			h1 = 14
		if (h2 < 1)
			h2 = h1
		if (len < 1)
			len = 90
		if (parse.state == 3) {
			s = new_block(cmd);
			s.x = (lwidth - len) / 2 / cfmt.scale;
			s.l = len / cfmt.scale;
			s.sk1 = h1;
			s.sk2 = h2
			return
		}
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
//--fixme: may be global
		if (parse.state == 3) {
			par_sy.voices[curvoice.v].sep = get_unit(param)
			return
		}
		break
	case "text":
		if (parse.state >= 2) {
			s = new_block(cmd);
			s.text = param
			s.opt = cfmt.textoption
			return
		}
		write_text(param, cfmt.textoption)
		return







|







1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
//--fixme: may be global
		if (parse.state == 3) {
			par_sy.voices[curvoice.v].sep = get_unit(param)
			return
		}
		break
	case "text":
		if (parse.state == 3) {
			s = new_block(cmd);
			s.text = param
			s.opt = cfmt.textoption
			return
		}
		write_text(param, cfmt.textoption)
		return
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
		return
	case "vskip":
		val = get_unit(param)
		if (val < 0) {
			syntax(1, "%%vskip cannot be negative")
			return
		}
		if (parse.state >= 2) {
			s = new_block(cmd);
			s.sk = val
			return
		}
		vskip(val);
		return
	case "newpage":







|







1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
		return
	case "vskip":
		val = get_unit(param)
		if (val < 0) {
			syntax(1, "%%vskip cannot be negative")
			return
		}
		if (parse.state == 3) {
			s = new_block(cmd);
			s.sk = val
			return
		}
		vskip(val);
		return
	case "newpage":
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
	var i, j, action, s

	switch (type) {
	case "js":
		js_inject(text)
		break
	case "ml":
		if (parse.state >= 2) {
			s = new_block(type);
			s.text = text
		} else {
			svg_flush();
			if (user.img_out)
				user.img_out(text)
		}







|







1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
	var i, j, action, s

	switch (type) {
	case "js":
		js_inject(text)
		break
	case "ml":
		if (parse.state == 3) {
			s = new_block(type);
			s.text = text
		} else {
			svg_flush();
			if (user.img_out)
				user.img_out(text)
		}
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
			defs_add(text.slice(i + 6, j))
		}
		break
	case "text":
		action = get_textopt(opt);
		if (!action)
			action = cfmt.textoption
		if (parse.state >= 2) {
			s = new_block(type);
			s.text = text
			s.opt = action
			break
		}
		write_text(text, action)
		break







|







1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
			defs_add(text.slice(i + 6, j))
		}
		break
	case "text":
		action = get_textopt(opt);
		if (!action)
			action = cfmt.textoption
		if (parse.state == 3) {
			s = new_block(type);
			s.text = text
			s.opt = action
			break
		}
		write_text(text, action)
		break
Changes to modules/MIDI.js.
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
		else
			v = a[2];
		v = parseInt(v)
		if (isNaN(v) || v < 0 || v > 127) {
			this.syntax(1, "Bad program in %%MIDI")
			return
		}
		if (this.parse.state >= 2) {
			if (this.cfmt().sound != "play")
				break
			s = this.new_block("midiprog");
			s.instr = v
		} else {
			this.set_v_param("instr", v)
		}
		break
	case "control":
		n = parseInt(a[2])
		if (isNaN(n) || n < 0 || n > 127) {
			this.syntax(1, "Bad controller number in %%MIDI")
			return
		}
		v = parseInt(a[3])
		if (isNaN(v) || v < 0 || v > 127) {
			this.syntax(1, "Bad controller value in %%MIDI")
			return
		}
		if (this.parse.state >= 2) {
			if (this.cfmt().sound != "play")
				break
			s = this.new_block("midictl");
			s.ctrl = n;
			s.val = v
		} else {
			this.set_v_param("midictl", a[2] + ' ' + a[3])







|



















|







79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
		else
			v = a[2];
		v = parseInt(v)
		if (isNaN(v) || v < 0 || v > 127) {
			this.syntax(1, "Bad program in %%MIDI")
			return
		}
		if (this.parse.state == 3) {
			if (this.cfmt().sound != "play")
				break
			s = this.new_block("midiprog");
			s.instr = v
		} else {
			this.set_v_param("instr", v)
		}
		break
	case "control":
		n = parseInt(a[2])
		if (isNaN(n) || n < 0 || n > 127) {
			this.syntax(1, "Bad controller number in %%MIDI")
			return
		}
		v = parseInt(a[3])
		if (isNaN(v) || v < 0 || v > 127) {
			this.syntax(1, "Bad controller value in %%MIDI")
			return
		}
		if (this.parse.state == 3) {
			if (this.cfmt().sound != "play")
				break
			s = this.new_block("midictl");
			s.ctrl = n;
			s.val = v
		} else {
			this.set_v_param("midictl", a[2] + ' ' + a[3])