lyp 0.1.8 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f05a307478b3335dc0caa9e0d687b73ec0a1f4f3
4
- data.tar.gz: e6811cd8a83c6b05a068ac1b494c41cd0f023917
3
+ metadata.gz: 95a3a0c7bde875ba4dc99f647f476f3c38c38edc
4
+ data.tar.gz: a2b2624b43aa5ce75c697c5f3fb29dd3b8141ca9
5
5
  SHA512:
6
- metadata.gz: 76e91e59d3b126e5e002d7ff0e2df0983a0c59ed72bffd444615fe35a811a8bae2a9e5768aebb5a82372cc245a93bc1bc85250354b79ea87a87f862952f5b0e4
7
- data.tar.gz: 471fa1026b5a75d2f4de797117c0f5cfb37872e97ef72b67b7e5855ebc9960ba5c06741f2723f74c97761e9bc77b931173e2b0f963a121da6ddefe8cbdd036b2
6
+ metadata.gz: 787384a486ddbb0f561404513cbda77fc783d5430428669d31021bf3c84878692fb4d13a2ee4bb0fe3a900ba46aa6711cf1815232b573272ca7b067d36cb12d9
7
+ data.tar.gz: 0dd250c4b5ce752610d59a17f14de1da74d7d91268cea0fb37cb90767a4395b74cefe88ce4d8a8865651d29c3fe2a45cb0d848d0668858567adad06be5b5872b
data/README.md CHANGED
@@ -13,14 +13,18 @@ __No hassle Lilypond installation__: With lyp you can also install any version o
13
13
  - [Installation](#installation)
14
14
  - [How lyp works](#how-lyp-works)
15
15
  - [Uninstalling](#uninstalling)
16
- - [Lilypond packages](#lilypond-packages)
16
+ - [Working with packages](#working-with-packages)
17
17
  - [What constitutes a package?](#what-constitutes-a-package)
18
18
  - [Installing packages](#installing-packages)
19
19
  - [Package references](#package-references)
20
20
  - [Version specifiers](#version-specifiers)
21
21
  - [Using packages](#using-packages)
22
- - [Developing packages](#developing-packages)
23
- - [Including files from within packages](#including-files-from-within-packages)
22
+ - [Developing packages](#developing-packages)
23
+ - [The package interface](#the-package-interface)
24
+ - [Including files](#including-files)
25
+ - [Including fonts](#including-fonts)
26
+ - [Testing packages](#testing-packages)
27
+ - [Publishing packages](#publishing-packages)
24
28
  - [Installing and switching Lilypond versions](#installing-and-switching-lilypond-versions)
25
29
  - [Contributing](#contributing)
26
30
 
@@ -81,7 +85,7 @@ In order to completely remove all files in `~/.lyp` you can simply delete the di
81
85
  rm -rf ~/.lyp
82
86
  ```
83
87
 
84
- ## Lilypond packages
88
+ ## Working with Packages
85
89
 
86
90
  A package is a library of lilypond code, containing one or more lilypond files, that provide commonly-used functionality for users. A package can be a library of scheme code to extend lilypond, as in openlilylib; or a stylesheet which contains music fonts and additional lilypond code to change the look of the music: font, spacing, line widths, sizes, etc.
87
91
 
@@ -181,7 +185,7 @@ To include a package in your lilypond code, use ther `\require` command:
181
185
 
182
186
  It is important to note that once you use `\require` in your code, you will have to compile it using the lilypond wrapper provided by lyp. It will not pass compilation using plain lilypond.
183
187
 
184
- ### Developing packages
188
+ ## Developing packages
185
189
 
186
190
  To create a lilypond package:
187
191
 
@@ -191,7 +195,7 @@ To create a lilypond package:
191
195
  - Test & debug your code (see below).
192
196
  - Publish your package (see below).
193
197
 
194
- To test your package code, you can install it from a local path. Suppose your package is at ~/repo/mypack:
198
+ To test your package with an actual input file, you can install it from a local path (for more on testing [see below](#testing)). Suppose your package is at ~/repo/mypack:
195
199
 
196
200
  ```bash
197
201
  lyp install mypack@dev:~/repo/mypack
@@ -203,29 +207,50 @@ This will create a `mypack@dev` package referencing your local files, which you
203
207
  \require "mypack@dev"
204
208
  ```
205
209
 
206
- ### Including files from within packages
210
+ ### The package interface
207
211
 
208
- In order to facilitate writing complex packages, lyp defines a few lilypond commands and scheme variables and commands that allow using relative paths when including files from within packages.
212
+ In order to facilitate writing complex packages, lyp defines a few variables and functions:
209
213
 
210
- The following variables are defined:
214
+ - `lyp:current-package-dir` - the absolute directory path for the current package (at the time the package is loaded)
215
+ - `lyp:input-filename` - the absolute path for the user's file being compiled
216
+ - `lyp:input-dirname` - the absolute directory path for the user's file being compiled
211
217
 
212
- - `lyp-current-package-dir` - the absolute directory path for the current package
213
- - `lyp-input-filename` - the absolute path for the user's file being compiled
214
- - `lyp-input-dirname` - the absolute directory path for the user's file being compiled
215
- - `lyp-cwd` - the current working directory
218
+ ### Including files
216
219
 
217
- In addition, lyp provides the `\pinclude` command for including files residing in the current package using relative paths. The `\pinclude` commands loads a given file only once:
220
+ Lyp provides the `\pinclude` and `\pincludeOnce` commands for including files residing in the current package using relative paths. The `\pincludeOnce` commands loads a given file only once:
218
221
 
219
222
  ```lilypond
220
- \pinclude "inc/init.ily"
223
+ \pincludeOnce "inc/init.ily"
224
+ \pinclude "inc/template.ily"
221
225
  ```
222
226
 
223
- And a `pload` scheme function for loading scheme files using relative paths without manipulating the `%load-path`:
227
+ Lyp also defines a `pload` scheme function for loading scheme files using relative paths without adding directories to the `%load-path`:
224
228
 
225
229
  ```lilypond
226
230
  #(if (not (defined? 'mypack:init))(pload "scm/init.scm"))
227
231
  ```
228
232
 
233
+ Loading scheme files that way is better, because this way one avoids possible name clashes, which may lead to unexpected behavior.
234
+
235
+ ### Including fonts
236
+
237
+ Lyp also supports automatic installation of fonts, based on work by [Abraham Leigh](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.
238
+
239
+ **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.
240
+
241
+ ### Testing Packages
242
+
243
+ Packages can be tested by using the `lyp test` command, which will compile any file found inside the package directory ending in `_test.ly`:
244
+
245
+ ```bash
246
+ cd mypack
247
+ lyp test .
248
+ ```
249
+
250
+ 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.
251
+
252
+ For more information on testing, see the [lyp-assert](https://github.com/noteflakes/lyp-assert) package, which is meant to be used for unit testing lilypond code, and serves as an example of how to test a package.
253
+
229
254
  ### Publishing packages
230
255
 
231
256
  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.
@@ -21,7 +21,7 @@ download() {
21
21
  }
22
22
 
23
23
  WORKDIR="/tmp/lyp-release-installer"
24
- LYP_VERSION="0.1.4"
24
+ LYP_VERSION="0.2.0"
25
25
  URL_BASE="https://github.com/noteflakes/lyp/releases/download/v$LYP_VERSION"
26
26
 
27
27
  PLATFORM=`uname -sp`
@@ -85,7 +85,7 @@ module Lyp::Package
85
85
  end
86
86
 
87
87
  LOCAL_PACKAGE_WRAPPER =
88
- "#(set! lyp-current-package-dir \"%s\")\n\\include \"%s\"\n"
88
+ "#(set! lyp:current-package-dir \"%s\")\n\\include \"%s\"\n"
89
89
 
90
90
  def install_from_local_files(package, version, opts)
91
91
  version =~ /^([^\:]+)\:(.+)$/
@@ -16,26 +16,24 @@ current_package_dir = _[:current_package_dir] || FileUtils.pwd
16
16
 
17
17
  # The wrapper defines a few global variables:
18
18
  #
19
- # lyp-input-filename - the absolute path to the input file name
20
- # lyp-input-dirname - the absolute path to the input file directory name
21
- # lyp-cwd - the current working directory
22
- # lyp-current-package-dir - the directory for the package currently being loaded
23
- # lyp-package-refs - a hash table mapping package refs to package entry
19
+ # lyp:input-filename - the absolute path to the input file name
20
+ # lyp:input-dirname - the absolute path to the input file directory name
21
+ # lyp:current-package-dir - the directory for the package currently being loaded
22
+ # lyp:package-refs - a hash table mapping package refs to package entry
24
23
  # point absolute paths
25
- # lyp-package-loaded - a hash table for keeping track of loaded packages
26
- # lyp-file-included - a hash table for keeping track of include files
24
+ # lyp:package-loaded - a hash table for keeping track of loaded packages
25
+ # lyp:file-included - a hash table for keeping track of include files
27
26
 
28
27
  `
29
28
  #(begin
30
- (define lyp-input-filename "{{user_filename}}")
31
- (define lyp-input-dirname "{{user_dirname}}")
32
- (define lyp-cwd "{{FileUtils.pwd}}")
33
- (define lyp-current-package-dir "{{current_package_dir}}")
34
- (define lyp-package-refs (make-hash-table))`
29
+ (define lyp:input-filename "{{user_filename}}")
30
+ (define lyp:input-dirname "{{user_dirname}}")
31
+ (define lyp:current-package-dir "{{current_package_dir}}")
32
+ (define lyp:package-refs (make-hash-table))`
35
33
 
36
34
  _[:package_paths].each do |spec, path|
37
35
  `
38
- (hash-set! lyp-package-refs "{{spec}}" "{{path}}")`
36
+ (hash-set! lyp:package-refs "{{spec}}" "{{path}}")`
39
37
  end
40
38
 
41
39
  # package-loaded is hash table used for tracking loaded packages, so each
@@ -45,8 +43,8 @@ end
45
43
  # package is loaded only once.
46
44
 
47
45
  `
48
- (define lyp-package-loaded (make-hash-table))
49
- (define lyp-file-included (make-hash-table))
46
+ (define lyp:package-loaded (make-hash-table))
47
+ (define lyp:file-included (make-hash-table))
50
48
  )
51
49
  `
52
50
 
@@ -55,20 +53,20 @@ end
55
53
  require = #(define-void-function (parser location package)(string?)
56
54
  (let*
57
55
  (
58
- (path (hash-ref lyp-package-refs package))
59
- (loaded? (hash-ref lyp-package-loaded path))
56
+ (path (hash-ref lyp:package-refs package))
57
+ (loaded? (hash-ref lyp:package-loaded path))
60
58
  (package-dir (dirname path))
61
- (prev-package-dir lyp-current-package-dir)
59
+ (prev-package-dir lyp:current-package-dir)
62
60
  )
63
61
  (if (and path (not loaded?)) (begin
64
62
  (if (not (file-exists? path)) (
65
63
  (ly:error "Failed to load package ~a (file not found ~a)" package path)
66
64
  ))
67
65
  (ly:debug "Loading package ~a at ~a" package package-dir)
68
- (set! lyp-current-package-dir package-dir)
69
- (hash-set! lyp-package-loaded path #t)
66
+ (set! lyp:current-package-dir package-dir)
67
+ (hash-set! lyp:package-loaded path #t)
70
68
  #{ \include #path #}
71
- (set! lyp-current-package-dir prev-package-dir)
69
+ (set! lyp:current-package-dir prev-package-dir)
72
70
  ))
73
71
  )
74
72
  )
@@ -80,14 +78,29 @@ require = #(define-void-function (parser location package)(string?)
80
78
  pinclude = #(define-void-function (parser location path)(string?)
81
79
  (let*
82
80
  (
83
- (full-path (format "~a/~a" lyp-current-package-dir path))
84
- (loaded? (hash-ref lyp-file-included full-path))
81
+ (full-path (format "~a/~a" lyp:current-package-dir path))
82
+ )
83
+ (begin
84
+ (if (not (file-exists? full-path)) (
85
+ (ly:error "File not found ~a" full-path)
86
+ ))
87
+ (hash-set! lyp:file-included full-path #t)
88
+ #{ \include #full-path #}
89
+ )
90
+ )
91
+ )
92
+
93
+ pincludeOnce = #(define-void-function (parser location path)(string?)
94
+ (let*
95
+ (
96
+ (full-path (format "~a/~a" lyp:current-package-dir path))
97
+ (loaded? (hash-ref lyp:file-included full-path))
85
98
  )
86
99
  (if (and full-path (not loaded?)) (begin
87
100
  (if (not (file-exists? full-path)) (
88
101
  (ly:error "File not found ~a" full-path)
89
102
  ))
90
- (hash-set! lyp-file-included full-path #t)
103
+ (hash-set! lyp:file-included full-path #t)
91
104
  #{ \include #full-path #}
92
105
  ))
93
106
  )
@@ -100,7 +113,7 @@ pinclude = #(define-void-function (parser location path)(string?)
100
113
  #(define (pload path)
101
114
  (let*
102
115
  (
103
- (full-path (format "~a/~a" lyp-current-package-dir path))
116
+ (full-path (format "~a/~a" lyp:current-package-dir path))
104
117
  )
105
118
  (load full-path)
106
119
  )
@@ -1,3 +1,3 @@
1
1
  module Lyp
2
- VERSION = "0.1.8"
2
+ VERSION = "0.2.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lyp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.8
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sharon Rosner