lyp 0.1.8 → 0.2.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 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