lyp 0.3.6 → 0.3.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +24 -10
- data/bin/install_release.sh +1 -1
- data/bin/lilypond +1 -0
- data/lib/lyp/etc/lyp.ly +28 -29
- data/lib/lyp/lilypond.rb +6 -5
- data/lib/lyp/package.rb +7 -4
- data/lib/lyp/template.rb +20 -2
- data/lib/lyp/templates/deps_wrapper.rb +2 -1
- data/lib/lyp/version.rb +1 -1
- data/lib/lyp/wrapper.rb +1 -0
- 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: b51e26364d2db0d4433ba21cdff532f05afa846c
|
4
|
+
data.tar.gz: 0305882ebc3ec0aee3a484f4bbea47cc39c6ccc1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 27f6770fa7d43f96e399c951cac4ef3afd45b952d01857113608bf95a8e62c3a05e2fa8530596255b28d3f38a7b45804808096521905439a800fede2b244019f
|
7
|
+
data.tar.gz: 318b2daf11c8507e082ee493b91a4f5d79f0b9c6bc55048b4db2a07be36a6ac6489bf347cd05de71aca4e0b6b374c66f143349a87c75a597913074d155631c89
|
data/README.md
CHANGED
@@ -1,4 +1,9 @@
|
|
1
|
-
|
1
|
+
<p align="center">
|
2
|
+
<a href="https://travis-ci.org/noteflakes/lyp"><img src="https://travis-ci.org/noteflakes/lyp.svg?branch=master"</a>
|
3
|
+
</p>
|
4
|
+
<p align="center">
|
5
|
+
<a href="https://github.com/lyp-packages/index#readme">The lyp package index</a>
|
6
|
+
</p>
|
2
7
|
|
3
8
|
# lyp - a package manager for lilypond
|
4
9
|
|
@@ -130,7 +135,7 @@ The difference between merely copying and including a lilypond file in your musi
|
|
130
135
|
|
131
136
|
In lyp, a package should contain at least a single lilypond file named `package.ly` in its root directory. A package could contain additional lilypond files referenced in the main package file (using relative includes). A package could also depend on other packages by using the `\require` command (see below).
|
132
137
|
|
133
|
-
Lilypond packages are expected to be published as git repositories. The packages is then versioned using git tags. A package can be referenced either using its git URL, a short name (if it's registered in the [lyp package index](https://github.com/
|
138
|
+
Lilypond packages are expected to be published as git repositories. The packages is then versioned using git tags. A package can be referenced either using its git URL, a short name (if it's registered in the [lyp package index](https://github.com/lyp-packages/index)), or alternatively as a local path (which is meant for package development more than anything else).
|
134
139
|
|
135
140
|
### Installing packages
|
136
141
|
|
@@ -197,7 +202,7 @@ To install the `assert` package required in the file we run:
|
|
197
202
|
```bash
|
198
203
|
$ lyp resolve test.ly
|
199
204
|
#=>
|
200
|
-
Cloning https://github.com/
|
205
|
+
Cloning https://github.com/lyp-packages/assert.git...
|
201
206
|
|
202
207
|
Installed assert@0.2.0
|
203
208
|
```
|
@@ -216,17 +221,17 @@ A package is normally referenced by its git URL. Lyp lets you provide either ful
|
|
216
221
|
|
217
222
|
```bash
|
218
223
|
# Fully-qualified URLs
|
219
|
-
$ lyp install https://github.com/
|
220
|
-
$ lyp install https://github.com/
|
224
|
+
$ lyp install https://github.com/lyp-packages/package-template.git
|
225
|
+
$ lyp install https://github.com/lyp-packages/package-template
|
221
226
|
|
222
227
|
# Partially-qualified URL
|
223
|
-
$ lyp install github.com/
|
228
|
+
$ lyp install github.com/lyp-packages/package-template
|
224
229
|
|
225
230
|
# Github repository id
|
226
231
|
$ lyp install noteflakes/lyp-package-template
|
227
232
|
```
|
228
233
|
|
229
|
-
In addition, lyp also provides an [index of publically available package](https://github.com/
|
234
|
+
In addition, lyp also provides an [index of publically available package](https://github.com/lyp-packages/index), which maps a package name to its URL (see also below). Using the index, packages are referenced by their published name instead of by their git URL:
|
230
235
|
|
231
236
|
```bash
|
232
237
|
$ lyp install dummy
|
@@ -326,9 +331,18 @@ Lyp also defines a `lyp:load` scheme function for loading scheme files using rel
|
|
326
331
|
|
327
332
|
Loading scheme files that way is a better technique than adding directorys to `%load-path`, because this way one avoids possible name clashes, which may lead to unexpected behavior.
|
328
333
|
|
334
|
+
### Conditional includes
|
335
|
+
|
336
|
+
Files can also be included conditionally by evaluating a scheme expression using the `\pcondInclude` and `\pcondIncludeOnce` commands:
|
337
|
+
|
338
|
+
```lilypond
|
339
|
+
% include edition-specific tweaks
|
340
|
+
\pcondInclude #(eq? edition 'urtext) "urtext_tweaks.ly"
|
341
|
+
```
|
342
|
+
|
329
343
|
### Including fonts
|
330
344
|
|
331
|
-
Lyp also supports automatic installation of fonts, based on work by [Abraham
|
345
|
+
Lyp also supports automatic installation of fonts, based on work by [Abraham Lee](https://github.com/tisimst). When a package is installed, lyp will copy any font files residing in the `fonts` directory into the corresponding `otf` and `svg` directories of all installed versions of lilypond.
|
332
346
|
|
333
347
|
**Note**: fonts will be only installed in versions of lilypond starting from than 2.18.2. Lyp automatically patches any version ower than 2.19.12 in order to support custom fonts.
|
334
348
|
|
@@ -343,13 +357,13 @@ $ lyp test .
|
|
343
357
|
|
344
358
|
A test file can either be a simple lilypond file which includes the package files and results in a lilypond score, or a lilypond file that performs unit tests on scheme code.
|
345
359
|
|
346
|
-
For more information on testing, see the [lyp-assert](https://github.com/
|
360
|
+
For more information on testing, see the [lyp-assert](https://github.com/lyp-packages/assert) package, which is meant to be used for unit testing lilypond code, and serves as an example of how to test a package.
|
347
361
|
|
348
362
|
### Publishing packages
|
349
363
|
|
350
364
|
In order for your package to be available to all users, you'll need to first push your code to a publically accessible git repository (for example on github). Users will then be able to install your package by using the git URL of the public repository.
|
351
365
|
|
352
|
-
You can also add your package to the lyp [public package index](https://github.com/
|
366
|
+
You can also add your package to the lyp [public package index](https://github.com/lyp-packages/index), by cloning it, editing [index.yaml](https://github.com/lyp-packages/index/blob/master/index.yaml), and creating a pull request.
|
353
367
|
|
354
368
|
## Installing and Using Lilypond
|
355
369
|
|
data/bin/install_release.sh
CHANGED
data/bin/lilypond
CHANGED
@@ -25,6 +25,7 @@ LYP_LY_HELP = <<EOF
|
|
25
25
|
Lyp-provided options:
|
26
26
|
-E, --env use version specified in $LILYPOND_VERSION
|
27
27
|
-n, --install install the specified version if not found
|
28
|
+
-O, --open open the target file after compilation
|
28
29
|
-R, --raw run raw lilypond (no pre-processing)
|
29
30
|
-r, --require=PACKAGE preload the specified package
|
30
31
|
-u, --use=VERSION use the given version of lilypond
|
data/lib/lyp/etc/lyp.ly
CHANGED
@@ -115,6 +115,25 @@
|
|
115
115
|
(if (defined? '*parser*)
|
116
116
|
(ly:parser-include-string str)
|
117
117
|
(ly:parser-include-string parser str)))
|
118
|
+
|
119
|
+
(define (lyp:include parser location path once) (let* (
|
120
|
+
(current-dir (lyp:this-dir))
|
121
|
+
(abs-path (if (lyp:absolute-path? path)
|
122
|
+
path
|
123
|
+
(lyp:expand-path (lyp:join-path current-dir path))))
|
124
|
+
(included? (and once (hash-ref lyp:file-included? abs-path)))
|
125
|
+
)
|
126
|
+
|
127
|
+
(if (not included?) (begin
|
128
|
+
(ly:debug "include ~a\n" abs-path)
|
129
|
+
(if (not (file-exists? abs-path))
|
130
|
+
(throw 'lyp:failure "lyp:include"
|
131
|
+
(format "File not found ~a" abs-path) #f))
|
132
|
+
|
133
|
+
(hash-set! lyp:file-included? abs-path #t)
|
134
|
+
(lyp:include-string (lyp:fmt-include abs-path))
|
135
|
+
))
|
136
|
+
))
|
118
137
|
)
|
119
138
|
|
120
139
|
% command form
|
@@ -132,35 +151,15 @@ require = #(define-void-function (parser location ref)(string?) (let* (
|
|
132
151
|
))
|
133
152
|
))
|
134
153
|
|
135
|
-
pinclude = #(define-void-function (parser location path)(string?)
|
136
|
-
|
137
|
-
(abs-path (if (lyp:absolute-path? path)
|
138
|
-
path
|
139
|
-
(lyp:expand-path (lyp:join-path current-dir path))))
|
140
|
-
)
|
141
|
-
(ly:debug "\\pinclude ~a\n" abs-path)
|
142
|
-
(if (not (file-exists? abs-path))
|
143
|
-
(throw 'lyp:failure "\\pinclude"
|
144
|
-
(format "File not found ~a" abs-path) #f))
|
154
|
+
pinclude = #(define-void-function (parser location path)(string?)
|
155
|
+
(lyp:include parser location path #f))
|
145
156
|
|
146
|
-
|
147
|
-
(
|
148
|
-
))
|
157
|
+
pcondInclude = #(define-void-function (parser location expr path)(scheme? string?)
|
158
|
+
(if expr (lyp:include parser location path #f)))
|
149
159
|
|
150
|
-
pincludeOnce = #(define-void-function (parser location path)(string?)
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
(included? (hash-ref lyp:file-included? abs-path))
|
156
|
-
)
|
157
|
-
(if (not included?) (begin
|
158
|
-
(ly:debug (format "\\pincludeOnce ~a\n" abs-path))
|
159
|
-
(if (not (file-exists? abs-path))
|
160
|
-
(throw 'lyp:failure "\\pincludeOnce"
|
161
|
-
(format "File not found ~a" abs-path) #f))
|
160
|
+
pincludeOnce = #(define-void-function (parser location path)(string?)
|
161
|
+
(lyp:include parser location path #t))
|
162
|
+
|
163
|
+
pcondIncludeOnce = #(define-void-function (parser location path)(string?)
|
164
|
+
(if expr (lyp:include parser location path #t)))
|
162
165
|
|
163
|
-
(hash-set! lyp:file-included? abs-path #t)
|
164
|
-
(lyp:include-string (lyp:fmt-include abs-path))
|
165
|
-
)
|
166
|
-
)))
|
data/lib/lyp/lilypond.rb
CHANGED
@@ -30,6 +30,8 @@ module Lyp::Lilypond
|
|
30
30
|
options[:use_version] = $1
|
31
31
|
when '-n', '--install'
|
32
32
|
options[:install] = true
|
33
|
+
when '-O', '--open'
|
34
|
+
options[:open] = true
|
33
35
|
else
|
34
36
|
argv_clean << arg
|
35
37
|
end
|
@@ -68,7 +70,7 @@ module Lyp::Lilypond
|
|
68
70
|
|
69
71
|
def invoke(argv, opts = {})
|
70
72
|
lilypond = current_lilypond
|
71
|
-
|
73
|
+
|
72
74
|
case opts[:mode]
|
73
75
|
when :system
|
74
76
|
system("#{lilypond} #{argv.join(" ")}")
|
@@ -409,9 +411,9 @@ module Lyp::Lilypond
|
|
409
411
|
|
410
412
|
def download_lilypond(url, fn, opts)
|
411
413
|
require 'httpclient'
|
412
|
-
|
414
|
+
|
413
415
|
STDERR.puts "Downloading #{url}" unless opts[:silent]
|
414
|
-
|
416
|
+
|
415
417
|
download_count = 0
|
416
418
|
client = HTTPClient.new
|
417
419
|
conn = client.get_async(url)
|
@@ -669,8 +671,7 @@ module Lyp::Lilypond
|
|
669
671
|
end
|
670
672
|
|
671
673
|
def parse_error_msg(msg)
|
672
|
-
(msg =~ /[^\n]+: error.+failed files: ".+"/m) ?
|
673
|
-
$& : msg
|
674
|
+
(msg =~ /[^\n]+: error.+failed files: ".+"/m) ? $& : msg
|
674
675
|
end
|
675
676
|
end
|
676
677
|
end
|
data/lib/lyp/package.rb
CHANGED
@@ -339,7 +339,7 @@ module Lyp::Package
|
|
339
339
|
end
|
340
340
|
end
|
341
341
|
|
342
|
-
LYP_INDEX_URL = "https://raw.githubusercontent.com/
|
342
|
+
LYP_INDEX_URL = "https://raw.githubusercontent.com/lyp-packages/index/master/index.yaml"
|
343
343
|
|
344
344
|
def search_lyp_index(package)
|
345
345
|
entry = lyp_index['packages'][package]
|
@@ -447,14 +447,17 @@ module Lyp::Package
|
|
447
447
|
# Runs all tests found in local directory
|
448
448
|
def run_local_tests(dir, opts = {})
|
449
449
|
package_dir = File.expand_path(dir)
|
450
|
-
test_files = Dir["#{package_dir}/**/*_test.ly"]
|
451
450
|
run_tests(opts) do |stats|
|
452
|
-
|
451
|
+
find_test_files(package_dir).each do |f|
|
453
452
|
perform_test(f, stats)
|
454
453
|
end
|
455
454
|
end
|
456
455
|
end
|
457
456
|
|
457
|
+
def find_test_files(dir)
|
458
|
+
Dir["#{dir}/**/*_test.ly", "#{dir}/**/*-test.ly"]
|
459
|
+
end
|
460
|
+
|
458
461
|
# This method runs tests by yielding the test statistics.
|
459
462
|
# The caller should then call #perform_test to run each test file.
|
460
463
|
def run_tests(opts = {})
|
@@ -493,7 +496,7 @@ module Lyp::Package
|
|
493
496
|
|
494
497
|
run_tests(opts) do |stats|
|
495
498
|
packages.each do |path|
|
496
|
-
files =
|
499
|
+
files = find_test_files(path)
|
497
500
|
next if files.empty?
|
498
501
|
|
499
502
|
FileUtils.cd(path) do
|
data/lib/lyp/template.rb
CHANGED
@@ -5,7 +5,11 @@ module Lyp
|
|
5
5
|
|
6
6
|
INTERPOLATION_START = "{{".freeze
|
7
7
|
INTERPOLATION_END = "}}".freeze
|
8
|
-
INTERPOLATION_RE = /#{INTERPOLATION_START}((?:(?!#{INTERPOLATION_END}).)*)#{INTERPOLATION_END}/m
|
8
|
+
INTERPOLATION_RE = /#{INTERPOLATION_START}([^\?\/](?:(?!#{INTERPOLATION_END}).)*)#{INTERPOLATION_END}/m
|
9
|
+
|
10
|
+
IF_START = "{{?".freeze
|
11
|
+
IF_END = "{{/}}".freeze
|
12
|
+
IF_RE = /\{\{\?((?:(?!#{INTERPOLATION_END}).)*)#{INTERPOLATION_END}((?:(?!#{IF_END}).)*)#{IF_END}/m
|
9
13
|
|
10
14
|
ESCAPED_QUOTE = '\\"'.freeze
|
11
15
|
QUOTE = '"'.freeze
|
@@ -30,13 +34,27 @@ EOF
|
|
30
34
|
|
31
35
|
metaclass.instance_eval method_str
|
32
36
|
end
|
33
|
-
|
37
|
+
|
38
|
+
def convert_interpolation(s)
|
39
|
+
s.gsub(INTERPOLATION_RE) do
|
40
|
+
code = $1.gsub(ESCAPED_QUOTE, QUOTE)
|
41
|
+
"\#{#{code}}"
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
34
45
|
def convert_literal(s)
|
35
46
|
# look for interpolated values, wrap them with #{}
|
36
47
|
s = s.inspect.gsub(INTERPOLATION_RE) do
|
37
48
|
code = $1.gsub(ESCAPED_QUOTE, QUOTE)
|
38
49
|
"\#{#{code}}"
|
39
50
|
end
|
51
|
+
|
52
|
+
s = s.gsub(IF_RE) do
|
53
|
+
test, code = $1, $2
|
54
|
+
test = test.strip.gsub(ESCAPED_QUOTE, QUOTE)
|
55
|
+
"\#\{if #{test}; \"#{code}\"; end}"
|
56
|
+
end
|
57
|
+
|
40
58
|
"__emit__[#{s}]"
|
41
59
|
end
|
42
60
|
|
data/lib/lyp/version.rb
CHANGED
data/lib/lyp/wrapper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lyp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sharon Rosner
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-06-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httpclient
|
@@ -134,7 +134,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
134
134
|
version: '0'
|
135
135
|
requirements: []
|
136
136
|
rubyforge_project:
|
137
|
-
rubygems_version: 2.
|
137
|
+
rubygems_version: 2.4.8
|
138
138
|
signing_key:
|
139
139
|
specification_version: 4
|
140
140
|
summary: Lyp is a package manager for lilypond
|