lydown 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/lydown/parsing/lydown.treetop +5 -2
- data/lib/lydown/parsing/nodes.rb +23 -1
- data/lib/lydown/rendering/music.rb +28 -1
- data/lib/lydown/version.rb +1 -1
- data/lib/lydown/work.rb +11 -10
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5f65c145556a28db3b86c183d1f12460e903c4fa
|
4
|
+
data.tar.gz: 2c7faca659a582e802793be8c84551efdb0e863d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 138a326275fd7b015c991439ef18c9533d4928d04fcfe9700a8a102712250d2e0e1839a844ea31cb0fe96cbe7c3caa56a9ec0f4c02759f0550d41976f5738ba0
|
7
|
+
data.tar.gz: 3c8d435a1971f739c50b3b9bd8d4987a7f928ab418583fa1a8c0125e725deebc5f38420bc261902dd53dd2ab9767a0430f2be44d3f3a89807fa78f683fc5e832
|
@@ -55,7 +55,10 @@ grammar Lydown
|
|
55
55
|
# '.|') <Barline>
|
56
56
|
end
|
57
57
|
rule duration
|
58
|
-
duration_value / duration_macro
|
58
|
+
tuplet_value / duration_value / duration_macro
|
59
|
+
end
|
60
|
+
rule tuplet_value
|
61
|
+
number '%' (number '/' number)? <TupletValue>
|
59
62
|
end
|
60
63
|
rule duration_value
|
61
64
|
number dots* multiplier? <DurationValue>
|
@@ -113,7 +116,7 @@ grammar Lydown
|
|
113
116
|
[s] multiplier* <Silence>
|
114
117
|
end
|
115
118
|
rule note_head
|
116
|
-
[a-g] accidental* <Note::Head>
|
119
|
+
[a-g] octave* accidental* <Note::Head>
|
117
120
|
end
|
118
121
|
rule accidental
|
119
122
|
[\+\-]+
|
data/lib/lydown/parsing/nodes.rb
CHANGED
@@ -58,6 +58,25 @@ module Lydown::Parsing
|
|
58
58
|
end
|
59
59
|
end
|
60
60
|
|
61
|
+
module TupletValue
|
62
|
+
def to_stream(stream)
|
63
|
+
if text_value =~ /^(\d+)%((\d+)\/(\d+))?$/
|
64
|
+
value, fraction, group_length = $1, $2, $4
|
65
|
+
unless fraction
|
66
|
+
fraction = '3/2'
|
67
|
+
group_length = '2'
|
68
|
+
end
|
69
|
+
|
70
|
+
stream << {
|
71
|
+
type: :tuplet_duration,
|
72
|
+
value: value,
|
73
|
+
fraction: fraction,
|
74
|
+
group_length: group_length
|
75
|
+
}
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
61
80
|
module Note
|
62
81
|
include Root
|
63
82
|
|
@@ -69,7 +88,10 @@ module Lydown::Parsing
|
|
69
88
|
|
70
89
|
module Head
|
71
90
|
def to_stream(note)
|
72
|
-
note
|
91
|
+
# remove octave marks from note head (this is only in case the order
|
92
|
+
# accidental-octave was reversed)
|
93
|
+
head = text_value.gsub(/[',]+/) {|m| note[:octave] = m; ''}
|
94
|
+
note[:head] = head
|
73
95
|
end
|
74
96
|
end
|
75
97
|
|
@@ -169,7 +169,7 @@ module Lydown::Rendering
|
|
169
169
|
@work['process/duration_macro'] = nil
|
170
170
|
|
171
171
|
code = LydownParser.parse(@work['process/macro_group'])
|
172
|
-
@work.process(code)
|
172
|
+
@work.process(code, no_reset: true)
|
173
173
|
|
174
174
|
# restore macro
|
175
175
|
@work['process/duration_macro'] = macro
|
@@ -185,15 +185,42 @@ module Lydown::Rendering
|
|
185
185
|
|
186
186
|
class Duration < Base
|
187
187
|
def translate
|
188
|
+
# close tuplet braces
|
189
|
+
if @work['process/tuplet_mode']
|
190
|
+
TupletDuration.emit_tuplet_end(@work)
|
191
|
+
@work['process/tuplet_mode'] = nil
|
192
|
+
end
|
193
|
+
|
188
194
|
value = @event[:value].sub(/^[0-9]+/) {|m| LILYPOND_DURATIONS[m] || m}
|
189
195
|
|
190
196
|
if next_event && next_event[:type] == :stand_alone_figures
|
191
197
|
@work['process/figures_duration_value'] = value
|
192
198
|
else
|
193
199
|
@work['process/duration_values'] = [value]
|
200
|
+
@work['process/tuplet_mode'] = nil
|
194
201
|
@work['process/duration_macro'] = nil unless @work['process/macro_group']
|
195
202
|
end
|
196
203
|
end
|
204
|
+
|
205
|
+
end
|
206
|
+
|
207
|
+
class TupletDuration < Base
|
208
|
+
def self.emit_tuplet_end(work)
|
209
|
+
work.emit(:music, '} ')
|
210
|
+
end
|
211
|
+
|
212
|
+
def translate
|
213
|
+
if next_event && next_event[:type] == :stand_alone_figures
|
214
|
+
@work['process/figures_duration_value'] = "#{@event[:value]}*#{@event[:fraction]}"
|
215
|
+
else
|
216
|
+
@work['process/duration_values'] = [@event[:value]]
|
217
|
+
@work['process/last_value'] = nil
|
218
|
+
@work['process/tuplet_mode'] = true
|
219
|
+
|
220
|
+
group_value = @event[:value].to_i / @event[:group_length].to_i
|
221
|
+
@work.emit(:music, "\\tuplet #{@event[:fraction]} #{group_value} { ")
|
222
|
+
end
|
223
|
+
end
|
197
224
|
end
|
198
225
|
|
199
226
|
class Note < Base
|
data/lib/lydown/version.rb
CHANGED
data/lib/lydown/work.rb
CHANGED
@@ -34,16 +34,16 @@ module Lydown
|
|
34
34
|
@context[:beaming] = nil
|
35
35
|
@context[:end_barline] = nil
|
36
36
|
@context[:part] = nil
|
37
|
-
@context['process/duration_values'] = ['4']
|
38
|
-
@context['process/running_values'] = []
|
39
|
-
@context['process/last_value'] = nil
|
40
|
-
@context['process/last_figures_value'] = nil
|
41
|
-
when :part
|
42
|
-
@context['process/duration_values'] = ['4']
|
43
|
-
@context['process/running_values'] = []
|
44
|
-
@context['process/last_value'] = nil
|
45
|
-
@context['process/last_figures_value'] = nil
|
46
37
|
end
|
38
|
+
if @context['process/tuplet_mode']
|
39
|
+
Lydown::Rendering::TupletDuration.emit_tuplet_end(self)
|
40
|
+
end
|
41
|
+
|
42
|
+
# reset processing variables
|
43
|
+
@context['process'] = {
|
44
|
+
'duration_values' => ['4'],
|
45
|
+
'running_values' => []
|
46
|
+
}
|
47
47
|
end
|
48
48
|
|
49
49
|
# Used to bind to instance when rendering templates
|
@@ -54,7 +54,7 @@ module Lydown
|
|
54
54
|
end
|
55
55
|
|
56
56
|
# translate a lydown stream into lilypond
|
57
|
-
def process(lydown_stream)
|
57
|
+
def process(lydown_stream, opts = {})
|
58
58
|
lydown_stream.each_with_index do |e, idx|
|
59
59
|
if e[:type]
|
60
60
|
Lydown::Rendering.translate(self, e, lydown_stream, idx)
|
@@ -62,6 +62,7 @@ module Lydown
|
|
62
62
|
raise LydownError, "Invalid lydown stream event: #{e.inspect}"
|
63
63
|
end
|
64
64
|
end
|
65
|
+
reset_context(:part) unless opts[:no_reset]
|
65
66
|
end
|
66
67
|
|
67
68
|
def emit(stream_type, *content)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lydown
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sharon Rosner
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-05-
|
11
|
+
date: 2015-05-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: treetop
|
@@ -24,7 +24,7 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.6'
|
27
|
-
description:
|
27
|
+
description: Lydown is a language and tool for music notation
|
28
28
|
email: ciconia@gmail.com
|
29
29
|
executables:
|
30
30
|
- lydown
|