@@ -113,11 +113,17 @@ grammar GenerativeSyntax
113113 end
114114 end
115115
116+ # Suffle and take random or pick random
116117 if p and p.text_value != ""
117- set = set.shuffle if p.text_value[0]=="~"
118- set = p.text_value[0]=="~" ? set.take(p.text_value[1..].to_i) : set.pick(p.text_value[1..].to_i) if p.text_value.length>1
118+ if p.text_value[0]=="~"
119+ set = set.shuffle
120+ set = set.take(p.text_value[1..].to_i) if p.text_value.length>1
121+ else
122+ set = p.text_value.length>1 ? set.pick(p.text_value[1..].to_i) : set.pick(1)
123+ end
119124 end
120125
126+ # Operations
121127 if !o.empty? then
122128 o.elements.each do |op|
123129 if op.methods.include?(:value) then
@@ -447,6 +453,7 @@ grammar GenerativeSyntax
447453 }
448454 end
449455
456+ # Deprecated. Still works but consider using (1 2 3)? or (1 2 (3 3))~4 instead.
450457 rule array
451458 '[' first:(set_items) rest:(',' i:set_items)+ ']'
452459 {
@@ -556,7 +563,7 @@ grammar GenerativeSyntax
556563
557564 # Characters ignored by generative parsing and parsed using ziffers parser
558565 rule ignore
559- v:(reset / slide / arpeggio / ignore_function / ignore_comment / ignore_params)
566+ v:(ignore_comment / reset / slide / arpeggio / ignore_function / ignore_params)
560567 {
561568 def value
562569 v.value.to_s
@@ -614,10 +621,28 @@ grammar GenerativeSyntax
614621 end
615622
616623 rule ignore_comment
617- '<!' [a-zA-Z0-9_\-\s\n\r\|#+\-*]+ '>'
624+ comment:(multi_line_comment / one_line_comment)
618625 {
619626 def value
620- text_value
627+ comment.value
628+ end
629+ }
630+ end
631+
632+ rule multi_line_comment
633+ '/*' ((s [*] s) / [a-zA-Z0-9_\-\|#+\-] / s)+ '*/'
634+ {
635+ def value
636+ nil
637+ end
638+ }
639+ end
640+
641+ rule one_line_comment
642+ '//' ([^\n]*)
643+ {
644+ def value
645+ nil
621646 end
622647 }
623648 end
@@ -1261,13 +1286,13 @@ end
12611286 end
12621287
12631288 rule zchar
1264- s:([mklpdcwyhnqaefsxtgujz]+)
1265- {
1266- def value
1267- sum = s.text_value.split('').inject(0){|sum,x| sum + Thread.current[:default_durs][x.to_sym]}
1268- sum.to_f
1269- end
1270- }
1289+ s:([mklpdcwyhnqaefsxtgujz]+)
1290+ {
1291+ def value
1292+ sum = s.text_value.split('').inject(0){|sum,x| sum + Thread.current[:default_durs][x.to_sym]}
1293+ sum.to_f
1294+ end
1295+ }
12711296 end
12721297
12731298end
0 commit comments