lydown 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|