doremi-script
Version:
Letter music notation processor
81 lines (70 loc) • 2.42 kB
text/coffeescript
root = exports ? this
debug=false
global._console ||= require('./underscore.logger.js') if global?
Logger=global._console.constructor
_ = require("underscore")._ if require?
require './doremi_script_parser.js'
sys = require('sys')
utils=require './tree_iterators.js'
_console.level = Logger.INFO
_.mixin(_console.toObject())
`_.mixin({
each_slice: function(obj, slice_size, iterator, context) {
var collection = obj.map(function(item) { return item; });
if (typeof collection.slice !== 'undefined') {
for (var i = 0, s = Math.ceil(collection.length/slice_size); i < s; i++) {
iterator.call(context, _(collection).slice(i*slice_size, (i*slice_size)+slice_size), obj);
}
}
return;
}
});`
to_lilypond=require('./to_lilypond.js').to_lilypond
parser=DoremiScriptParser
test_to_lilypond = (str,test,msg="") ->
composition=parser.parse(str)
_.debug "test_to_lilypond:composition is #{composition}"
composition.source=str
_.debug("test_to_lilypond, str is \n#{str}\n")
lily=to_lilypond(composition)
composition.lilypond=lily
_.debug("test_to_lilypond returned \n#{lily}\n")
return lily
test_data = [
"S - -" ,
#"c'4~ c'2",
"c'4~ c'4~ c'4",
"DOESNT combine whole empty beat within a measure"
"S -- ---------" ,
"c'4~ c'4~ c'4",
"DOESNT should combine whole empty beat within a measure"
"1#2#3#4#5#6#7#- 1b2b3b4b5b6b7b- 1234567-"
"cs'32 ds'32 es'32 fs'32 gs'32 as'32 bs'16 cf'32 df'32 ef'32 ff'32 gf'32 af'32 bf'16 c'32 d'32 e'32 f'32 g'32 a'32 b'16"
"should work with number notation"
"| S-RG | ---- -SRS",
"e'4~ e'16"
"2nd measure should have tied e4 tied to e16"
" PmPm\n| P",
"\\acciaccatura {g'32[ f'32 g'32 f'32]}g'4"
"ornaments"
"Srg m m m"
"\\times 2/3 { c'8 df'8 ef'8 } f'4 f'4 f'4"
"triplet test.lilypond output should start with times 2/3"
]
exports.test_all = (test) ->
console.log "test_all"
fun = (args) ->
[str,expected,msg]= args
lily=test_to_lilypond(str,test)
_.info("✔ Testing #{str} -> #{expected}")
test.ok(lily.indexOf(expected) > -1,"FAILED*** #{msg}. Expected output of #{str} to include #{expected}. Output was \n\n#{lily}\n\n")
#Lilypond output was #{lily}" )
_.each_slice(test_data,3,fun)
test.done()
#exports.test_combines_whole_beat_rests_within_a_measure = (test) ->
# debug=true
# str = 'S - -'
# lily=test_to_lilypond(str,test)
#
# test.done()
#