LilyPond-Ruby 0.1.1 → 0.1.2

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.
Files changed (1109) hide show
  1. checksums.yaml +4 -4
  2. data/etc/fonts/conf.d/10-hinting-slight.conf +15 -0
  3. data/etc/fonts/conf.d/10-scale-bitmap-fonts.conf +83 -0
  4. data/etc/fonts/conf.d/11-lcdfilter-default.conf +17 -0
  5. data/etc/fonts/conf.d/20-unhint-small-vera.conf +49 -0
  6. data/etc/fonts/conf.d/30-metric-aliases.conf +637 -0
  7. data/etc/fonts/conf.d/40-nonlatin.conf +332 -0
  8. data/etc/fonts/conf.d/45-generic.conf +136 -0
  9. data/etc/fonts/conf.d/45-latin.conf +301 -0
  10. data/etc/fonts/conf.d/48-spacing.conf +16 -0
  11. data/etc/fonts/conf.d/49-sansserif.conf +22 -0
  12. data/etc/fonts/conf.d/50-user.conf +16 -0
  13. data/etc/fonts/conf.d/51-local.conf +7 -0
  14. data/etc/fonts/conf.d/60-generic.conf +64 -0
  15. data/etc/fonts/conf.d/60-latin.conf +88 -0
  16. data/etc/fonts/conf.d/65-fonts-persian.conf +418 -0
  17. data/etc/fonts/conf.d/65-nonlatin.conf +228 -0
  18. data/etc/fonts/conf.d/69-unifont.conf +28 -0
  19. data/etc/fonts/conf.d/80-delicious.conf +19 -0
  20. data/etc/fonts/conf.d/90-synthetic.conf +64 -0
  21. data/etc/fonts/conf.d/README +23 -0
  22. data/etc/fonts/fonts.conf +101 -0
  23. data/etc/relocate/fontconfig.reloc +2 -0
  24. data/etc/relocate/guile.reloc +2 -0
  25. data/etc/relocate/libexec.reloc +1 -0
  26. data/lib/guile/2.2/ccache/ice-9/and-let-star.go +0 -0
  27. data/lib/guile/2.2/ccache/ice-9/arrays.go +0 -0
  28. data/lib/guile/2.2/ccache/ice-9/atomic.go +0 -0
  29. data/lib/guile/2.2/ccache/ice-9/binary-ports.go +0 -0
  30. data/lib/guile/2.2/ccache/ice-9/boot-9.go +0 -0
  31. data/lib/guile/2.2/ccache/ice-9/buffered-input.go +0 -0
  32. data/lib/guile/2.2/ccache/ice-9/calling.go +0 -0
  33. data/lib/guile/2.2/ccache/ice-9/channel.go +0 -0
  34. data/lib/guile/2.2/ccache/ice-9/command-line.go +0 -0
  35. data/lib/guile/2.2/ccache/ice-9/common-list.go +0 -0
  36. data/lib/guile/2.2/ccache/ice-9/control.go +0 -0
  37. data/lib/guile/2.2/ccache/ice-9/curried-definitions.go +0 -0
  38. data/lib/guile/2.2/ccache/ice-9/debug.go +0 -0
  39. data/lib/guile/2.2/ccache/ice-9/deprecated.go +0 -0
  40. data/lib/guile/2.2/ccache/ice-9/documentation.go +0 -0
  41. data/lib/guile/2.2/ccache/ice-9/eval-string.go +0 -0
  42. data/lib/guile/2.2/ccache/ice-9/eval.go +0 -0
  43. data/lib/guile/2.2/ccache/ice-9/expect.go +0 -0
  44. data/lib/guile/2.2/ccache/ice-9/fdes-finalizers.go +0 -0
  45. data/lib/guile/2.2/ccache/ice-9/format.go +0 -0
  46. data/lib/guile/2.2/ccache/ice-9/ftw.go +0 -0
  47. data/lib/guile/2.2/ccache/ice-9/futures.go +0 -0
  48. data/lib/guile/2.2/ccache/ice-9/gap-buffer.go +0 -0
  49. data/lib/guile/2.2/ccache/ice-9/getopt-long.go +0 -0
  50. data/lib/guile/2.2/ccache/ice-9/hash-table.go +0 -0
  51. data/lib/guile/2.2/ccache/ice-9/hcons.go +0 -0
  52. data/lib/guile/2.2/ccache/ice-9/history.go +0 -0
  53. data/lib/guile/2.2/ccache/ice-9/i18n.go +0 -0
  54. data/lib/guile/2.2/ccache/ice-9/iconv.go +0 -0
  55. data/lib/guile/2.2/ccache/ice-9/lineio.go +0 -0
  56. data/lib/guile/2.2/ccache/ice-9/list.go +0 -0
  57. data/lib/guile/2.2/ccache/ice-9/local-eval.go +0 -0
  58. data/lib/guile/2.2/ccache/ice-9/ls.go +0 -0
  59. data/lib/guile/2.2/ccache/ice-9/mapping.go +0 -0
  60. data/lib/guile/2.2/ccache/ice-9/match.go +0 -0
  61. data/lib/guile/2.2/ccache/ice-9/networking.go +0 -0
  62. data/lib/guile/2.2/ccache/ice-9/null.go +0 -0
  63. data/lib/guile/2.2/ccache/ice-9/occam-channel.go +0 -0
  64. data/lib/guile/2.2/ccache/ice-9/optargs.go +0 -0
  65. data/lib/guile/2.2/ccache/ice-9/peg/cache.go +0 -0
  66. data/lib/guile/2.2/ccache/ice-9/peg/codegen.go +0 -0
  67. data/lib/guile/2.2/ccache/ice-9/peg/simplify-tree.go +0 -0
  68. data/lib/guile/2.2/ccache/ice-9/peg/string-peg.go +0 -0
  69. data/lib/guile/2.2/ccache/ice-9/peg/using-parsers.go +0 -0
  70. data/lib/guile/2.2/ccache/ice-9/peg.go +0 -0
  71. data/lib/guile/2.2/ccache/ice-9/poe.go +0 -0
  72. data/lib/guile/2.2/ccache/ice-9/poll.go +0 -0
  73. data/lib/guile/2.2/ccache/ice-9/popen.go +0 -0
  74. data/lib/guile/2.2/ccache/ice-9/ports.go +0 -0
  75. data/lib/guile/2.2/ccache/ice-9/posix.go +0 -0
  76. data/lib/guile/2.2/ccache/ice-9/pretty-print.go +0 -0
  77. data/lib/guile/2.2/ccache/ice-9/psyntax-pp.go +0 -0
  78. data/lib/guile/2.2/ccache/ice-9/q.go +0 -0
  79. data/lib/guile/2.2/ccache/ice-9/r5rs.go +0 -0
  80. data/lib/guile/2.2/ccache/ice-9/rdelim.go +0 -0
  81. data/lib/guile/2.2/ccache/ice-9/receive.go +0 -0
  82. data/lib/guile/2.2/ccache/ice-9/regex.go +0 -0
  83. data/lib/guile/2.2/ccache/ice-9/runq.go +0 -0
  84. data/lib/guile/2.2/ccache/ice-9/rw.go +0 -0
  85. data/lib/guile/2.2/ccache/ice-9/safe-r5rs.go +0 -0
  86. data/lib/guile/2.2/ccache/ice-9/safe.go +0 -0
  87. data/lib/guile/2.2/ccache/ice-9/sandbox.go +0 -0
  88. data/lib/guile/2.2/ccache/ice-9/save-stack.go +0 -0
  89. data/lib/guile/2.2/ccache/ice-9/scm-style-repl.go +0 -0
  90. data/lib/guile/2.2/ccache/ice-9/serialize.go +0 -0
  91. data/lib/guile/2.2/ccache/ice-9/session.go +0 -0
  92. data/lib/guile/2.2/ccache/ice-9/slib.go +0 -0
  93. data/lib/guile/2.2/ccache/ice-9/stack-catch.go +0 -0
  94. data/lib/guile/2.2/ccache/ice-9/streams.go +0 -0
  95. data/lib/guile/2.2/ccache/ice-9/string-fun.go +0 -0
  96. data/lib/guile/2.2/ccache/ice-9/suspendable-ports.go +0 -0
  97. data/lib/guile/2.2/ccache/ice-9/syncase.go +0 -0
  98. data/lib/guile/2.2/ccache/ice-9/textual-ports.go +0 -0
  99. data/lib/guile/2.2/ccache/ice-9/threads.go +0 -0
  100. data/lib/guile/2.2/ccache/ice-9/time.go +0 -0
  101. data/lib/guile/2.2/ccache/ice-9/top-repl.go +0 -0
  102. data/lib/guile/2.2/ccache/ice-9/unicode.go +0 -0
  103. data/lib/guile/2.2/ccache/ice-9/vlist.go +0 -0
  104. data/lib/guile/2.2/ccache/ice-9/weak-vector.go +0 -0
  105. data/lib/guile/2.2/ccache/language/brainfuck/compile-scheme.go +0 -0
  106. data/lib/guile/2.2/ccache/language/brainfuck/compile-tree-il.go +0 -0
  107. data/lib/guile/2.2/ccache/language/brainfuck/parse.go +0 -0
  108. data/lib/guile/2.2/ccache/language/brainfuck/spec.go +0 -0
  109. data/lib/guile/2.2/ccache/language/bytecode/spec.go +0 -0
  110. data/lib/guile/2.2/ccache/language/bytecode.go +0 -0
  111. data/lib/guile/2.2/ccache/language/cps/closure-conversion.go +0 -0
  112. data/lib/guile/2.2/ccache/language/cps/compile-bytecode.go +0 -0
  113. data/lib/guile/2.2/ccache/language/cps/constructors.go +0 -0
  114. data/lib/guile/2.2/ccache/language/cps/contification.go +0 -0
  115. data/lib/guile/2.2/ccache/language/cps/cse.go +0 -0
  116. data/lib/guile/2.2/ccache/language/cps/dce.go +0 -0
  117. data/lib/guile/2.2/ccache/language/cps/effects-analysis.go +0 -0
  118. data/lib/guile/2.2/ccache/language/cps/elide-values.go +0 -0
  119. data/lib/guile/2.2/ccache/language/cps/handle-interrupts.go +0 -0
  120. data/lib/guile/2.2/ccache/language/cps/intmap.go +0 -0
  121. data/lib/guile/2.2/ccache/language/cps/intset.go +0 -0
  122. data/lib/guile/2.2/ccache/language/cps/licm.go +0 -0
  123. data/lib/guile/2.2/ccache/language/cps/optimize.go +0 -0
  124. data/lib/guile/2.2/ccache/language/cps/peel-loops.go +0 -0
  125. data/lib/guile/2.2/ccache/language/cps/primitives.go +0 -0
  126. data/lib/guile/2.2/ccache/language/cps/prune-bailouts.go +0 -0
  127. data/lib/guile/2.2/ccache/language/cps/prune-top-level-scopes.go +0 -0
  128. data/lib/guile/2.2/ccache/language/cps/reify-primitives.go +0 -0
  129. data/lib/guile/2.2/ccache/language/cps/renumber.go +0 -0
  130. data/lib/guile/2.2/ccache/language/cps/rotate-loops.go +0 -0
  131. data/lib/guile/2.2/ccache/language/cps/self-references.go +0 -0
  132. data/lib/guile/2.2/ccache/language/cps/simplify.go +0 -0
  133. data/lib/guile/2.2/ccache/language/cps/slot-allocation.go +0 -0
  134. data/lib/guile/2.2/ccache/language/cps/spec.go +0 -0
  135. data/lib/guile/2.2/ccache/language/cps/specialize-numbers.go +0 -0
  136. data/lib/guile/2.2/ccache/language/cps/specialize-primcalls.go +0 -0
  137. data/lib/guile/2.2/ccache/language/cps/split-rec.go +0 -0
  138. data/lib/guile/2.2/ccache/language/cps/type-checks.go +0 -0
  139. data/lib/guile/2.2/ccache/language/cps/type-fold.go +0 -0
  140. data/lib/guile/2.2/ccache/language/cps/types.go +0 -0
  141. data/lib/guile/2.2/ccache/language/cps/utils.go +0 -0
  142. data/lib/guile/2.2/ccache/language/cps/verify.go +0 -0
  143. data/lib/guile/2.2/ccache/language/cps/with-cps.go +0 -0
  144. data/lib/guile/2.2/ccache/language/cps.go +0 -0
  145. data/lib/guile/2.2/ccache/language/ecmascript/array.go +0 -0
  146. data/lib/guile/2.2/ccache/language/ecmascript/base.go +0 -0
  147. data/lib/guile/2.2/ccache/language/ecmascript/compile-tree-il.go +0 -0
  148. data/lib/guile/2.2/ccache/language/ecmascript/function.go +0 -0
  149. data/lib/guile/2.2/ccache/language/ecmascript/impl.go +0 -0
  150. data/lib/guile/2.2/ccache/language/ecmascript/parse.go +0 -0
  151. data/lib/guile/2.2/ccache/language/ecmascript/spec.go +0 -0
  152. data/lib/guile/2.2/ccache/language/ecmascript/tokenize.go +0 -0
  153. data/lib/guile/2.2/ccache/language/elisp/bindings.go +0 -0
  154. data/lib/guile/2.2/ccache/language/elisp/boot.go +0 -0
  155. data/lib/guile/2.2/ccache/language/elisp/compile-tree-il.go +0 -0
  156. data/lib/guile/2.2/ccache/language/elisp/falias.go +0 -0
  157. data/lib/guile/2.2/ccache/language/elisp/lexer.go +0 -0
  158. data/lib/guile/2.2/ccache/language/elisp/parser.go +0 -0
  159. data/lib/guile/2.2/ccache/language/elisp/runtime/function-slot.go +0 -0
  160. data/lib/guile/2.2/ccache/language/elisp/runtime/value-slot.go +0 -0
  161. data/lib/guile/2.2/ccache/language/elisp/runtime.go +0 -0
  162. data/lib/guile/2.2/ccache/language/elisp/spec.go +0 -0
  163. data/lib/guile/2.2/ccache/language/scheme/compile-tree-il.go +0 -0
  164. data/lib/guile/2.2/ccache/language/scheme/decompile-tree-il.go +0 -0
  165. data/lib/guile/2.2/ccache/language/scheme/spec.go +0 -0
  166. data/lib/guile/2.2/ccache/language/tree-il/analyze.go +0 -0
  167. data/lib/guile/2.2/ccache/language/tree-il/canonicalize.go +0 -0
  168. data/lib/guile/2.2/ccache/language/tree-il/compile-cps.go +0 -0
  169. data/lib/guile/2.2/ccache/language/tree-il/debug.go +0 -0
  170. data/lib/guile/2.2/ccache/language/tree-il/effects.go +0 -0
  171. data/lib/guile/2.2/ccache/language/tree-il/fix-letrec.go +0 -0
  172. data/lib/guile/2.2/ccache/language/tree-il/optimize.go +0 -0
  173. data/lib/guile/2.2/ccache/language/tree-il/peval.go +0 -0
  174. data/lib/guile/2.2/ccache/language/tree-il/primitives.go +0 -0
  175. data/lib/guile/2.2/ccache/language/tree-il/spec.go +0 -0
  176. data/lib/guile/2.2/ccache/language/tree-il.go +0 -0
  177. data/lib/guile/2.2/ccache/language/value/spec.go +0 -0
  178. data/lib/guile/2.2/ccache/oop/goops/accessors.go +0 -0
  179. data/lib/guile/2.2/ccache/oop/goops/active-slot.go +0 -0
  180. data/lib/guile/2.2/ccache/oop/goops/composite-slot.go +0 -0
  181. data/lib/guile/2.2/ccache/oop/goops/describe.go +0 -0
  182. data/lib/guile/2.2/ccache/oop/goops/internal.go +0 -0
  183. data/lib/guile/2.2/ccache/oop/goops/save.go +0 -0
  184. data/lib/guile/2.2/ccache/oop/goops/simple.go +0 -0
  185. data/lib/guile/2.2/ccache/oop/goops/stklos.go +0 -0
  186. data/lib/guile/2.2/ccache/oop/goops.go +0 -0
  187. data/lib/guile/2.2/ccache/rnrs/arithmetic/bitwise.go +0 -0
  188. data/lib/guile/2.2/ccache/rnrs/arithmetic/fixnums.go +0 -0
  189. data/lib/guile/2.2/ccache/rnrs/arithmetic/flonums.go +0 -0
  190. data/lib/guile/2.2/ccache/rnrs/base.go +0 -0
  191. data/lib/guile/2.2/ccache/rnrs/bytevectors.go +0 -0
  192. data/lib/guile/2.2/ccache/rnrs/conditions.go +0 -0
  193. data/lib/guile/2.2/ccache/rnrs/control.go +0 -0
  194. data/lib/guile/2.2/ccache/rnrs/enums.go +0 -0
  195. data/lib/guile/2.2/ccache/rnrs/eval.go +0 -0
  196. data/lib/guile/2.2/ccache/rnrs/exceptions.go +0 -0
  197. data/lib/guile/2.2/ccache/rnrs/files.go +0 -0
  198. data/lib/guile/2.2/ccache/rnrs/hashtables.go +0 -0
  199. data/lib/guile/2.2/ccache/rnrs/io/ports.go +0 -0
  200. data/lib/guile/2.2/ccache/rnrs/io/simple.go +0 -0
  201. data/lib/guile/2.2/ccache/rnrs/lists.go +0 -0
  202. data/lib/guile/2.2/ccache/rnrs/mutable-pairs.go +0 -0
  203. data/lib/guile/2.2/ccache/rnrs/mutable-strings.go +0 -0
  204. data/lib/guile/2.2/ccache/rnrs/programs.go +0 -0
  205. data/lib/guile/2.2/ccache/rnrs/r5rs.go +0 -0
  206. data/lib/guile/2.2/ccache/rnrs/records/inspection.go +0 -0
  207. data/lib/guile/2.2/ccache/rnrs/records/procedural.go +0 -0
  208. data/lib/guile/2.2/ccache/rnrs/records/syntactic.go +0 -0
  209. data/lib/guile/2.2/ccache/rnrs/sorting.go +0 -0
  210. data/lib/guile/2.2/ccache/rnrs/syntax-case.go +0 -0
  211. data/lib/guile/2.2/ccache/rnrs/unicode.go +0 -0
  212. data/lib/guile/2.2/ccache/rnrs.go +0 -0
  213. data/lib/guile/2.2/ccache/scripts/api-diff.go +0 -0
  214. data/lib/guile/2.2/ccache/scripts/autofrisk.go +0 -0
  215. data/lib/guile/2.2/ccache/scripts/compile.go +0 -0
  216. data/lib/guile/2.2/ccache/scripts/disassemble.go +0 -0
  217. data/lib/guile/2.2/ccache/scripts/display-commentary.go +0 -0
  218. data/lib/guile/2.2/ccache/scripts/doc-snarf.go +0 -0
  219. data/lib/guile/2.2/ccache/scripts/frisk.go +0 -0
  220. data/lib/guile/2.2/ccache/scripts/generate-autoload.go +0 -0
  221. data/lib/guile/2.2/ccache/scripts/help.go +0 -0
  222. data/lib/guile/2.2/ccache/scripts/lint.go +0 -0
  223. data/lib/guile/2.2/ccache/scripts/list.go +0 -0
  224. data/lib/guile/2.2/ccache/scripts/punify.go +0 -0
  225. data/lib/guile/2.2/ccache/scripts/read-rfc822.go +0 -0
  226. data/lib/guile/2.2/ccache/scripts/read-scheme-source.go +0 -0
  227. data/lib/guile/2.2/ccache/scripts/read-text-outline.go +0 -0
  228. data/lib/guile/2.2/ccache/scripts/scan-api.go +0 -0
  229. data/lib/guile/2.2/ccache/scripts/snarf-check-and-output-texi.go +0 -0
  230. data/lib/guile/2.2/ccache/scripts/snarf-guile-m4-docs.go +0 -0
  231. data/lib/guile/2.2/ccache/scripts/summarize-guile-TODO.go +0 -0
  232. data/lib/guile/2.2/ccache/scripts/use2dot.go +0 -0
  233. data/lib/guile/2.2/ccache/srfi/srfi-1.go +0 -0
  234. data/lib/guile/2.2/ccache/srfi/srfi-10.go +0 -0
  235. data/lib/guile/2.2/ccache/srfi/srfi-11.go +0 -0
  236. data/lib/guile/2.2/ccache/srfi/srfi-111.go +0 -0
  237. data/lib/guile/2.2/ccache/srfi/srfi-13.go +0 -0
  238. data/lib/guile/2.2/ccache/srfi/srfi-14.go +0 -0
  239. data/lib/guile/2.2/ccache/srfi/srfi-16.go +0 -0
  240. data/lib/guile/2.2/ccache/srfi/srfi-17.go +0 -0
  241. data/lib/guile/2.2/ccache/srfi/srfi-18.go +0 -0
  242. data/lib/guile/2.2/ccache/srfi/srfi-19.go +0 -0
  243. data/lib/guile/2.2/ccache/srfi/srfi-2.go +0 -0
  244. data/lib/guile/2.2/ccache/srfi/srfi-26.go +0 -0
  245. data/lib/guile/2.2/ccache/srfi/srfi-27.go +0 -0
  246. data/lib/guile/2.2/ccache/srfi/srfi-28.go +0 -0
  247. data/lib/guile/2.2/ccache/srfi/srfi-31.go +0 -0
  248. data/lib/guile/2.2/ccache/srfi/srfi-34.go +0 -0
  249. data/lib/guile/2.2/ccache/srfi/srfi-35.go +0 -0
  250. data/lib/guile/2.2/ccache/srfi/srfi-37.go +0 -0
  251. data/lib/guile/2.2/ccache/srfi/srfi-38.go +0 -0
  252. data/lib/guile/2.2/ccache/srfi/srfi-39.go +0 -0
  253. data/lib/guile/2.2/ccache/srfi/srfi-4/gnu.go +0 -0
  254. data/lib/guile/2.2/ccache/srfi/srfi-4.go +0 -0
  255. data/lib/guile/2.2/ccache/srfi/srfi-41.go +0 -0
  256. data/lib/guile/2.2/ccache/srfi/srfi-42.go +0 -0
  257. data/lib/guile/2.2/ccache/srfi/srfi-43.go +0 -0
  258. data/lib/guile/2.2/ccache/srfi/srfi-45.go +0 -0
  259. data/lib/guile/2.2/ccache/srfi/srfi-6.go +0 -0
  260. data/lib/guile/2.2/ccache/srfi/srfi-60.go +0 -0
  261. data/lib/guile/2.2/ccache/srfi/srfi-64.go +0 -0
  262. data/lib/guile/2.2/ccache/srfi/srfi-67.go +0 -0
  263. data/lib/guile/2.2/ccache/srfi/srfi-69.go +0 -0
  264. data/lib/guile/2.2/ccache/srfi/srfi-71.go +0 -0
  265. data/lib/guile/2.2/ccache/srfi/srfi-8.go +0 -0
  266. data/lib/guile/2.2/ccache/srfi/srfi-88.go +0 -0
  267. data/lib/guile/2.2/ccache/srfi/srfi-9/gnu.go +0 -0
  268. data/lib/guile/2.2/ccache/srfi/srfi-9.go +0 -0
  269. data/lib/guile/2.2/ccache/srfi/srfi-98.go +0 -0
  270. data/lib/guile/2.2/ccache/statprof.go +0 -0
  271. data/lib/guile/2.2/ccache/sxml/apply-templates.go +0 -0
  272. data/lib/guile/2.2/ccache/sxml/fold.go +0 -0
  273. data/lib/guile/2.2/ccache/sxml/match.go +0 -0
  274. data/lib/guile/2.2/ccache/sxml/simple.go +0 -0
  275. data/lib/guile/2.2/ccache/sxml/ssax/input-parse.go +0 -0
  276. data/lib/guile/2.2/ccache/sxml/ssax.go +0 -0
  277. data/lib/guile/2.2/ccache/sxml/transform.go +0 -0
  278. data/lib/guile/2.2/ccache/sxml/xpath.go +0 -0
  279. data/lib/guile/2.2/ccache/system/base/ck.go +0 -0
  280. data/lib/guile/2.2/ccache/system/base/compile.go +0 -0
  281. data/lib/guile/2.2/ccache/system/base/lalr.go +0 -0
  282. data/lib/guile/2.2/ccache/system/base/language.go +0 -0
  283. data/lib/guile/2.2/ccache/system/base/message.go +0 -0
  284. data/lib/guile/2.2/ccache/system/base/pmatch.go +0 -0
  285. data/lib/guile/2.2/ccache/system/base/syntax.go +0 -0
  286. data/lib/guile/2.2/ccache/system/base/target.go +0 -0
  287. data/lib/guile/2.2/ccache/system/base/types.go +0 -0
  288. data/lib/guile/2.2/ccache/system/foreign-object.go +0 -0
  289. data/lib/guile/2.2/ccache/system/foreign.go +0 -0
  290. data/lib/guile/2.2/ccache/system/repl/command.go +0 -0
  291. data/lib/guile/2.2/ccache/system/repl/common.go +0 -0
  292. data/lib/guile/2.2/ccache/system/repl/coop-server.go +0 -0
  293. data/lib/guile/2.2/ccache/system/repl/debug.go +0 -0
  294. data/lib/guile/2.2/ccache/system/repl/error-handling.go +0 -0
  295. data/lib/guile/2.2/ccache/system/repl/repl.go +0 -0
  296. data/lib/guile/2.2/ccache/system/repl/server.go +0 -0
  297. data/lib/guile/2.2/ccache/system/syntax.go +0 -0
  298. data/lib/guile/2.2/ccache/system/vm/assembler.go +0 -0
  299. data/lib/guile/2.2/ccache/system/vm/coverage.go +0 -0
  300. data/lib/guile/2.2/ccache/system/vm/debug.go +0 -0
  301. data/lib/guile/2.2/ccache/system/vm/disassembler.go +0 -0
  302. data/lib/guile/2.2/ccache/system/vm/dwarf.go +0 -0
  303. data/lib/guile/2.2/ccache/system/vm/elf.go +0 -0
  304. data/lib/guile/2.2/ccache/system/vm/frame.go +0 -0
  305. data/lib/guile/2.2/ccache/system/vm/inspect.go +0 -0
  306. data/lib/guile/2.2/ccache/system/vm/linker.go +0 -0
  307. data/lib/guile/2.2/ccache/system/vm/loader.go +0 -0
  308. data/lib/guile/2.2/ccache/system/vm/program.go +0 -0
  309. data/lib/guile/2.2/ccache/system/vm/trace.go +0 -0
  310. data/lib/guile/2.2/ccache/system/vm/trap-state.go +0 -0
  311. data/lib/guile/2.2/ccache/system/vm/traps.go +0 -0
  312. data/lib/guile/2.2/ccache/system/vm/vm.go +0 -0
  313. data/lib/guile/2.2/ccache/system/xref.go +0 -0
  314. data/lib/guile/2.2/ccache/texinfo/docbook.go +0 -0
  315. data/lib/guile/2.2/ccache/texinfo/html.go +0 -0
  316. data/lib/guile/2.2/ccache/texinfo/indexing.go +0 -0
  317. data/lib/guile/2.2/ccache/texinfo/plain-text.go +0 -0
  318. data/lib/guile/2.2/ccache/texinfo/reflection.go +0 -0
  319. data/lib/guile/2.2/ccache/texinfo/serialize.go +0 -0
  320. data/lib/guile/2.2/ccache/texinfo/string-utils.go +0 -0
  321. data/lib/guile/2.2/ccache/texinfo.go +0 -0
  322. data/lib/guile/2.2/ccache/web/client.go +0 -0
  323. data/lib/guile/2.2/ccache/web/http.go +0 -0
  324. data/lib/guile/2.2/ccache/web/request.go +0 -0
  325. data/lib/guile/2.2/ccache/web/response.go +0 -0
  326. data/lib/guile/2.2/ccache/web/server/http.go +0 -0
  327. data/lib/guile/2.2/ccache/web/server.go +0 -0
  328. data/lib/guile/2.2/ccache/web/uri.go +0 -0
  329. data/lib/lilypond/2.24.1/ccache/lily/accreg.go +0 -0
  330. data/lib/lilypond/2.24.1/ccache/lily/auto-beam.go +0 -0
  331. data/lib/lilypond/2.24.1/ccache/lily/autochange.go +0 -0
  332. data/lib/lilypond/2.24.1/ccache/lily/backend-library.go +0 -0
  333. data/lib/lilypond/2.24.1/ccache/lily/bar-line.go +0 -0
  334. data/lib/lilypond/2.24.1/ccache/lily/breath.go +0 -0
  335. data/lib/lilypond/2.24.1/ccache/lily/c++.go +0 -0
  336. data/lib/lilypond/2.24.1/ccache/lily/chord-entry.go +0 -0
  337. data/lib/lilypond/2.24.1/ccache/lily/chord-ignatzek-names.go +0 -0
  338. data/lib/lilypond/2.24.1/ccache/lily/chord-name.go +0 -0
  339. data/lib/lilypond/2.24.1/ccache/lily/clip-region.go +0 -0
  340. data/lib/lilypond/2.24.1/ccache/lily/color.go +0 -0
  341. data/lib/lilypond/2.24.1/ccache/lily/curried-definitions.go +0 -0
  342. data/lib/lilypond/2.24.1/ccache/lily/define-context-properties.go +0 -0
  343. data/lib/lilypond/2.24.1/ccache/lily/define-event-classes.go +0 -0
  344. data/lib/lilypond/2.24.1/ccache/lily/define-grob-interfaces.go +0 -0
  345. data/lib/lilypond/2.24.1/ccache/lily/define-grob-properties.go +0 -0
  346. data/lib/lilypond/2.24.1/ccache/lily/define-grobs.go +0 -0
  347. data/lib/lilypond/2.24.1/ccache/lily/define-markup-commands.go +0 -0
  348. data/lib/lilypond/2.24.1/ccache/lily/define-music-callbacks.go +0 -0
  349. data/lib/lilypond/2.24.1/ccache/lily/define-music-display-methods.go +0 -0
  350. data/lib/lilypond/2.24.1/ccache/lily/define-music-properties.go +0 -0
  351. data/lib/lilypond/2.24.1/ccache/lily/define-music-types.go +0 -0
  352. data/lib/lilypond/2.24.1/ccache/lily/define-note-names.go +0 -0
  353. data/lib/lilypond/2.24.1/ccache/lily/define-stencil-commands.go +0 -0
  354. data/lib/lilypond/2.24.1/ccache/lily/define-woodwind-diagrams.go +0 -0
  355. data/lib/lilypond/2.24.1/ccache/lily/display-lily.go +0 -0
  356. data/lib/lilypond/2.24.1/ccache/lily/display-woodwind-diagrams.go +0 -0
  357. data/lib/lilypond/2.24.1/ccache/lily/file-cache.go +0 -0
  358. data/lib/lilypond/2.24.1/ccache/lily/flag-styles.go +0 -0
  359. data/lib/lilypond/2.24.1/ccache/lily/font-encodings.go +0 -0
  360. data/lib/lilypond/2.24.1/ccache/lily/font.go +0 -0
  361. data/lib/lilypond/2.24.1/ccache/lily/framework-cairo.go +0 -0
  362. data/lib/lilypond/2.24.1/ccache/lily/framework-ps.go +0 -0
  363. data/lib/lilypond/2.24.1/ccache/lily/framework-svg.go +0 -0
  364. data/lib/lilypond/2.24.1/ccache/lily/fret-diagrams.go +0 -0
  365. data/lib/lilypond/2.24.1/ccache/lily/graphviz.go +0 -0
  366. data/lib/lilypond/2.24.1/ccache/lily/harp-pedals.go +0 -0
  367. data/lib/lilypond/2.24.1/ccache/lily/layout-beam.go +0 -0
  368. data/lib/lilypond/2.24.1/ccache/lily/layout-slur.go +0 -0
  369. data/lib/lilypond/2.24.1/ccache/lily/lily-library.go +0 -0
  370. data/lib/lilypond/2.24.1/ccache/lily/lily.go +0 -0
  371. data/lib/lilypond/2.24.1/ccache/lily/ly-syntax-constructors.go +0 -0
  372. data/lib/lilypond/2.24.1/ccache/lily/markup-macros.go +0 -0
  373. data/lib/lilypond/2.24.1/ccache/lily/markup.go +0 -0
  374. data/lib/lilypond/2.24.1/ccache/lily/midi.go +0 -0
  375. data/lib/lilypond/2.24.1/ccache/lily/modal-transforms.go +0 -0
  376. data/lib/lilypond/2.24.1/ccache/lily/music-functions.go +0 -0
  377. data/lib/lilypond/2.24.1/ccache/lily/output-lib.go +0 -0
  378. data/lib/lilypond/2.24.1/ccache/lily/output-ps.go +0 -0
  379. data/lib/lilypond/2.24.1/ccache/lily/output-svg.go +0 -0
  380. data/lib/lilypond/2.24.1/ccache/lily/page.go +0 -0
  381. data/lib/lilypond/2.24.1/ccache/lily/paper-system.go +0 -0
  382. data/lib/lilypond/2.24.1/ccache/lily/paper.go +0 -0
  383. data/lib/lilypond/2.24.1/ccache/lily/parser-clef.go +0 -0
  384. data/lib/lilypond/2.24.1/ccache/lily/parser-ly-from-scheme.go +0 -0
  385. data/lib/lilypond/2.24.1/ccache/lily/part-combiner.go +0 -0
  386. data/lib/lilypond/2.24.1/ccache/lily/predefined-fretboards.go +0 -0
  387. data/lib/lilypond/2.24.1/ccache/lily/ps-to-png.go +0 -0
  388. data/lib/lilypond/2.24.1/ccache/lily/scheme-engravers.go +0 -0
  389. data/lib/lilypond/2.24.1/ccache/lily/scheme-performers.go +0 -0
  390. data/lib/lilypond/2.24.1/ccache/lily/script.go +0 -0
  391. data/lib/lilypond/2.24.1/ccache/lily/skyline.go +0 -0
  392. data/lib/lilypond/2.24.1/ccache/lily/song-util.go +0 -0
  393. data/lib/lilypond/2.24.1/ccache/lily/song.go +0 -0
  394. data/lib/lilypond/2.24.1/ccache/lily/stencil.go +0 -0
  395. data/lib/lilypond/2.24.1/ccache/lily/tablature.go +0 -0
  396. data/lib/lilypond/2.24.1/ccache/lily/time-signature-settings.go +0 -0
  397. data/lib/lilypond/2.24.1/ccache/lily/time-signature.go +0 -0
  398. data/lib/lilypond/2.24.1/ccache/lily/titling.go +0 -0
  399. data/lib/lilypond/2.24.1/ccache/lily/to-xml.go +0 -0
  400. data/lib/lilypond/2.24.1/ccache/lily/translation-functions.go +0 -0
  401. data/share/emacs/site-lisp/lilypond-font-lock.el +208 -0
  402. data/share/emacs/site-lisp/lilypond-indent.el +605 -0
  403. data/share/emacs/site-lisp/lilypond-init.el +21 -0
  404. data/share/emacs/site-lisp/lilypond-mode.el +1204 -0
  405. data/share/emacs/site-lisp/lilypond-song.el +556 -0
  406. data/share/emacs/site-lisp/lilypond-what-beat.el +279 -0
  407. data/share/emacs/site-lisp/lilypond-words.el +1428 -0
  408. data/share/guile/2.2/guile-procedures.txt +8860 -0
  409. data/share/guile/2.2/ice-9/and-let-star.scm +73 -0
  410. data/share/guile/2.2/ice-9/arrays.scm +70 -0
  411. data/share/guile/2.2/ice-9/atomic.scm +38 -0
  412. data/share/guile/2.2/ice-9/binary-ports.scm +53 -0
  413. data/share/guile/2.2/ice-9/boot-9.scm +4131 -0
  414. data/share/guile/2.2/ice-9/buffered-input.scm +109 -0
  415. data/share/guile/2.2/ice-9/calling.scm +326 -0
  416. data/share/guile/2.2/ice-9/channel.scm +170 -0
  417. data/share/guile/2.2/ice-9/command-line.scm +477 -0
  418. data/share/guile/2.2/ice-9/common-list.scm +278 -0
  419. data/share/guile/2.2/ice-9/control.scm +110 -0
  420. data/share/guile/2.2/ice-9/curried-definitions.scm +57 -0
  421. data/share/guile/2.2/ice-9/debug.scm +25 -0
  422. data/share/guile/2.2/ice-9/deprecated.scm +93 -0
  423. data/share/guile/2.2/ice-9/documentation.scm +203 -0
  424. data/share/guile/2.2/ice-9/eval-string.scm +90 -0
  425. data/share/guile/2.2/ice-9/eval.scm +723 -0
  426. data/share/guile/2.2/ice-9/expect.scm +171 -0
  427. data/share/guile/2.2/ice-9/fdes-finalizers.scm +25 -0
  428. data/share/guile/2.2/ice-9/format.scm +1626 -0
  429. data/share/guile/2.2/ice-9/ftw.scm +564 -0
  430. data/share/guile/2.2/ice-9/futures.scm +308 -0
  431. data/share/guile/2.2/ice-9/gap-buffer.scm +283 -0
  432. data/share/guile/2.2/ice-9/getopt-long.scm +371 -0
  433. data/share/guile/2.2/ice-9/hash-table.scm +45 -0
  434. data/share/guile/2.2/ice-9/hcons.scm +80 -0
  435. data/share/guile/2.2/ice-9/history.scm +65 -0
  436. data/share/guile/2.2/ice-9/i18n.scm +531 -0
  437. data/share/guile/2.2/ice-9/iconv.scm +95 -0
  438. data/share/guile/2.2/ice-9/lineio.scm +115 -0
  439. data/share/guile/2.2/ice-9/list.scm +36 -0
  440. data/share/guile/2.2/ice-9/local-eval.scm +261 -0
  441. data/share/guile/2.2/ice-9/ls.scm +94 -0
  442. data/share/guile/2.2/ice-9/mapping.scm +118 -0
  443. data/share/guile/2.2/ice-9/match.scm +59 -0
  444. data/share/guile/2.2/ice-9/match.upstream.scm +917 -0
  445. data/share/guile/2.2/ice-9/networking.scm +94 -0
  446. data/share/guile/2.2/ice-9/null.scm +34 -0
  447. data/share/guile/2.2/ice-9/occam-channel.scm +261 -0
  448. data/share/guile/2.2/ice-9/optargs.scm +381 -0
  449. data/share/guile/2.2/ice-9/peg/cache.scm +45 -0
  450. data/share/guile/2.2/ice-9/peg/codegen.scm +359 -0
  451. data/share/guile/2.2/ice-9/peg/simplify-tree.scm +97 -0
  452. data/share/guile/2.2/ice-9/peg/string-peg.scm +273 -0
  453. data/share/guile/2.2/ice-9/peg/using-parsers.scm +116 -0
  454. data/share/guile/2.2/ice-9/peg.scm +42 -0
  455. data/share/guile/2.2/ice-9/poe.scm +116 -0
  456. data/share/guile/2.2/ice-9/poll.scm +172 -0
  457. data/share/guile/2.2/ice-9/popen.scm +178 -0
  458. data/share/guile/2.2/ice-9/ports.scm +566 -0
  459. data/share/guile/2.2/ice-9/posix.scm +75 -0
  460. data/share/guile/2.2/ice-9/pretty-print.scm +483 -0
  461. data/share/guile/2.2/ice-9/psyntax-pp.scm +3542 -0
  462. data/share/guile/2.2/ice-9/psyntax.scm +3326 -0
  463. data/share/guile/2.2/ice-9/q.scm +153 -0
  464. data/share/guile/2.2/ice-9/quasisyntax.scm +136 -0
  465. data/share/guile/2.2/ice-9/r5rs.scm +45 -0
  466. data/share/guile/2.2/ice-9/r6rs-libraries.scm +242 -0
  467. data/share/guile/2.2/ice-9/rdelim.scm +208 -0
  468. data/share/guile/2.2/ice-9/receive.scm +26 -0
  469. data/share/guile/2.2/ice-9/regex.scm +229 -0
  470. data/share/guile/2.2/ice-9/runq.scm +241 -0
  471. data/share/guile/2.2/ice-9/rw.scm +27 -0
  472. data/share/guile/2.2/ice-9/safe-r5rs.scm +145 -0
  473. data/share/guile/2.2/ice-9/safe.scm +34 -0
  474. data/share/guile/2.2/ice-9/sandbox.scm +1399 -0
  475. data/share/guile/2.2/ice-9/save-stack.scm +58 -0
  476. data/share/guile/2.2/ice-9/scm-style-repl.scm +279 -0
  477. data/share/guile/2.2/ice-9/serialize.scm +114 -0
  478. data/share/guile/2.2/ice-9/session.scm +530 -0
  479. data/share/guile/2.2/ice-9/slib.scm +33 -0
  480. data/share/guile/2.2/ice-9/stack-catch.scm +47 -0
  481. data/share/guile/2.2/ice-9/streams.scm +168 -0
  482. data/share/guile/2.2/ice-9/string-fun.scm +280 -0
  483. data/share/guile/2.2/ice-9/suspendable-ports.scm +788 -0
  484. data/share/guile/2.2/ice-9/syncase.scm +37 -0
  485. data/share/guile/2.2/ice-9/textual-ports.scm +70 -0
  486. data/share/guile/2.2/ice-9/threads.scm +392 -0
  487. data/share/guile/2.2/ice-9/time.scm +58 -0
  488. data/share/guile/2.2/ice-9/top-repl.scm +78 -0
  489. data/share/guile/2.2/ice-9/unicode.scm +26 -0
  490. data/share/guile/2.2/ice-9/vlist.scm +595 -0
  491. data/share/guile/2.2/ice-9/weak-vector.scm +31 -0
  492. data/share/guile/2.2/language/brainfuck/compile-scheme.scm +123 -0
  493. data/share/guile/2.2/language/brainfuck/compile-tree-il.scm +184 -0
  494. data/share/guile/2.2/language/brainfuck/parse.scm +95 -0
  495. data/share/guile/2.2/language/brainfuck/spec.scm +43 -0
  496. data/share/guile/2.2/language/bytecode/spec.scm +42 -0
  497. data/share/guile/2.2/language/bytecode.scm +104 -0
  498. data/share/guile/2.2/language/cps/closure-conversion.scm +848 -0
  499. data/share/guile/2.2/language/cps/compile-bytecode.scm +610 -0
  500. data/share/guile/2.2/language/cps/constructors.scm +106 -0
  501. data/share/guile/2.2/language/cps/contification.scm +448 -0
  502. data/share/guile/2.2/language/cps/cse.scm +414 -0
  503. data/share/guile/2.2/language/cps/dce.scm +363 -0
  504. data/share/guile/2.2/language/cps/effects-analysis.scm +597 -0
  505. data/share/guile/2.2/language/cps/elide-values.scm +88 -0
  506. data/share/guile/2.2/language/cps/handle-interrupts.scm +69 -0
  507. data/share/guile/2.2/language/cps/intmap.scm +765 -0
  508. data/share/guile/2.2/language/cps/intset.scm +830 -0
  509. data/share/guile/2.2/language/cps/licm.scm +308 -0
  510. data/share/guile/2.2/language/cps/optimize.scm +135 -0
  511. data/share/guile/2.2/language/cps/peel-loops.scm +287 -0
  512. data/share/guile/2.2/language/cps/primitives.scm +141 -0
  513. data/share/guile/2.2/language/cps/prune-bailouts.scm +86 -0
  514. data/share/guile/2.2/language/cps/prune-top-level-scopes.scm +63 -0
  515. data/share/guile/2.2/language/cps/reify-primitives.scm +179 -0
  516. data/share/guile/2.2/language/cps/renumber.scm +217 -0
  517. data/share/guile/2.2/language/cps/rotate-loops.scm +239 -0
  518. data/share/guile/2.2/language/cps/self-references.scm +79 -0
  519. data/share/guile/2.2/language/cps/simplify.scm +274 -0
  520. data/share/guile/2.2/language/cps/slot-allocation.scm +1058 -0
  521. data/share/guile/2.2/language/cps/spec.scm +51 -0
  522. data/share/guile/2.2/language/cps/specialize-numbers.scm +724 -0
  523. data/share/guile/2.2/language/cps/specialize-primcalls.scm +87 -0
  524. data/share/guile/2.2/language/cps/split-rec.scm +174 -0
  525. data/share/guile/2.2/language/cps/type-checks.scm +72 -0
  526. data/share/guile/2.2/language/cps/type-fold.scm +455 -0
  527. data/share/guile/2.2/language/cps/types.scm +1826 -0
  528. data/share/guile/2.2/language/cps/utils.scm +550 -0
  529. data/share/guile/2.2/language/cps/verify.scm +304 -0
  530. data/share/guile/2.2/language/cps/with-cps.scm +145 -0
  531. data/share/guile/2.2/language/cps.scm +358 -0
  532. data/share/guile/2.2/language/ecmascript/array.scm +121 -0
  533. data/share/guile/2.2/language/ecmascript/base.scm +251 -0
  534. data/share/guile/2.2/language/ecmascript/compile-tree-il.scm +576 -0
  535. data/share/guile/2.2/language/ecmascript/function.scm +78 -0
  536. data/share/guile/2.2/language/ecmascript/impl.scm +169 -0
  537. data/share/guile/2.2/language/ecmascript/parse.scm +352 -0
  538. data/share/guile/2.2/language/ecmascript/spec.scm +37 -0
  539. data/share/guile/2.2/language/ecmascript/tokenize.scm +513 -0
  540. data/share/guile/2.2/language/elisp/bindings.scm +107 -0
  541. data/share/guile/2.2/language/elisp/boot.el +617 -0
  542. data/share/guile/2.2/language/elisp/compile-tree-il.scm +812 -0
  543. data/share/guile/2.2/language/elisp/falias.scm +47 -0
  544. data/share/guile/2.2/language/elisp/lexer.scm +430 -0
  545. data/share/guile/2.2/language/elisp/parser.scm +222 -0
  546. data/share/guile/2.2/language/elisp/runtime/function-slot.scm +63 -0
  547. data/share/guile/2.2/language/elisp/runtime/value-slot.scm +24 -0
  548. data/share/guile/2.2/language/elisp/runtime.scm +153 -0
  549. data/share/guile/2.2/language/elisp/spec.scm +43 -0
  550. data/share/guile/2.2/language/scheme/compile-tree-il.scm +33 -0
  551. data/share/guile/2.2/language/scheme/decompile-tree-il.scm +796 -0
  552. data/share/guile/2.2/language/scheme/spec.scm +63 -0
  553. data/share/guile/2.2/language/tree-il/analyze.scm +1568 -0
  554. data/share/guile/2.2/language/tree-il/canonicalize.scm +82 -0
  555. data/share/guile/2.2/language/tree-il/compile-cps.scm +1149 -0
  556. data/share/guile/2.2/language/tree-il/debug.scm +246 -0
  557. data/share/guile/2.2/language/tree-il/effects.scm +591 -0
  558. data/share/guile/2.2/language/tree-il/fix-letrec.scm +314 -0
  559. data/share/guile/2.2/language/tree-il/optimize.scm +43 -0
  560. data/share/guile/2.2/language/tree-il/peval.scm +1669 -0
  561. data/share/guile/2.2/language/tree-il/primitives.scm +630 -0
  562. data/share/guile/2.2/language/tree-il/spec.scm +46 -0
  563. data/share/guile/2.2/language/tree-il.scm +630 -0
  564. data/share/guile/2.2/language/value/spec.scm +30 -0
  565. data/share/guile/2.2/oop/goops/accessors.scm +72 -0
  566. data/share/guile/2.2/oop/goops/active-slot.scm +63 -0
  567. data/share/guile/2.2/oop/goops/composite-slot.scm +83 -0
  568. data/share/guile/2.2/oop/goops/describe.scm +189 -0
  569. data/share/guile/2.2/oop/goops/internal.scm +30 -0
  570. data/share/guile/2.2/oop/goops/save.scm +874 -0
  571. data/share/guile/2.2/oop/goops/simple.scm +30 -0
  572. data/share/guile/2.2/oop/goops/stklos.scm +74 -0
  573. data/share/guile/2.2/oop/goops.scm +3176 -0
  574. data/share/guile/2.2/rnrs/arithmetic/bitwise.scm +92 -0
  575. data/share/guile/2.2/rnrs/arithmetic/fixnums.scm +291 -0
  576. data/share/guile/2.2/rnrs/arithmetic/flonums.scm +203 -0
  577. data/share/guile/2.2/rnrs/base.scm +291 -0
  578. data/share/guile/2.2/rnrs/bytevectors.scm +83 -0
  579. data/share/guile/2.2/rnrs/conditions.scm +225 -0
  580. data/share/guile/2.2/rnrs/control.scm +22 -0
  581. data/share/guile/2.2/rnrs/enums.scm +152 -0
  582. data/share/guile/2.2/rnrs/eval.scm +39 -0
  583. data/share/guile/2.2/rnrs/exceptions.scm +276 -0
  584. data/share/guile/2.2/rnrs/files.scm +96 -0
  585. data/share/guile/2.2/rnrs/hashtables.scm +190 -0
  586. data/share/guile/2.2/rnrs/io/ports.scm +554 -0
  587. data/share/guile/2.2/rnrs/io/simple.scm +167 -0
  588. data/share/guile/2.2/rnrs/lists.scm +55 -0
  589. data/share/guile/2.2/rnrs/mutable-pairs.scm +23 -0
  590. data/share/guile/2.2/rnrs/mutable-strings.scm +23 -0
  591. data/share/guile/2.2/rnrs/programs.scm +22 -0
  592. data/share/guile/2.2/rnrs/r5rs.scm +34 -0
  593. data/share/guile/2.2/rnrs/records/inspection.scm +81 -0
  594. data/share/guile/2.2/rnrs/records/procedural.scm +289 -0
  595. data/share/guile/2.2/rnrs/records/syntactic.scm +248 -0
  596. data/share/guile/2.2/rnrs/sorting.scm +27 -0
  597. data/share/guile/2.2/rnrs/syntax-case.scm +68 -0
  598. data/share/guile/2.2/rnrs/unicode.scm +104 -0
  599. data/share/guile/2.2/rnrs.scm +289 -0
  600. data/share/guile/2.2/scripts/api-diff.scm +179 -0
  601. data/share/guile/2.2/scripts/autofrisk.scm +218 -0
  602. data/share/guile/2.2/scripts/compile.scm +273 -0
  603. data/share/guile/2.2/scripts/disassemble.scm +38 -0
  604. data/share/guile/2.2/scripts/display-commentary.scm +67 -0
  605. data/share/guile/2.2/scripts/doc-snarf.scm +439 -0
  606. data/share/guile/2.2/scripts/frisk.scm +290 -0
  607. data/share/guile/2.2/scripts/generate-autoload.scm +144 -0
  608. data/share/guile/2.2/scripts/help.scm +188 -0
  609. data/share/guile/2.2/scripts/lint.scm +318 -0
  610. data/share/guile/2.2/scripts/list.scm +91 -0
  611. data/share/guile/2.2/scripts/punify.scm +87 -0
  612. data/share/guile/2.2/scripts/read-rfc822.scm +131 -0
  613. data/share/guile/2.2/scripts/read-scheme-source.scm +282 -0
  614. data/share/guile/2.2/scripts/read-text-outline.scm +253 -0
  615. data/share/guile/2.2/scripts/scan-api.scm +223 -0
  616. data/share/guile/2.2/scripts/snarf-check-and-output-texi.scm +303 -0
  617. data/share/guile/2.2/scripts/snarf-guile-m4-docs.scm +86 -0
  618. data/share/guile/2.2/scripts/summarize-guile-TODO.scm +213 -0
  619. data/share/guile/2.2/scripts/use2dot.scm +110 -0
  620. data/share/guile/2.2/srfi/srfi-1.scm +1061 -0
  621. data/share/guile/2.2/srfi/srfi-10.scm +89 -0
  622. data/share/guile/2.2/srfi/srfi-11.scm +146 -0
  623. data/share/guile/2.2/srfi/srfi-111.scm +37 -0
  624. data/share/guile/2.2/srfi/srfi-13.scm +132 -0
  625. data/share/guile/2.2/srfi/srfi-14.scm +99 -0
  626. data/share/guile/2.2/srfi/srfi-16.scm +51 -0
  627. data/share/guile/2.2/srfi/srfi-17.scm +174 -0
  628. data/share/guile/2.2/srfi/srfi-18.scm +382 -0
  629. data/share/guile/2.2/srfi/srfi-19.scm +1470 -0
  630. data/share/guile/2.2/srfi/srfi-2.scm +31 -0
  631. data/share/guile/2.2/srfi/srfi-26.scm +66 -0
  632. data/share/guile/2.2/srfi/srfi-27.scm +96 -0
  633. data/share/guile/2.2/srfi/srfi-28.scm +34 -0
  634. data/share/guile/2.2/srfi/srfi-31.scm +35 -0
  635. data/share/guile/2.2/srfi/srfi-34.scm +84 -0
  636. data/share/guile/2.2/srfi/srfi-35.scm +351 -0
  637. data/share/guile/2.2/srfi/srfi-37.scm +234 -0
  638. data/share/guile/2.2/srfi/srfi-38.scm +207 -0
  639. data/share/guile/2.2/srfi/srfi-39.scm +55 -0
  640. data/share/guile/2.2/srfi/srfi-4/gnu.scm +80 -0
  641. data/share/guile/2.2/srfi/srfi-4.scm +118 -0
  642. data/share/guile/2.2/srfi/srfi-41.scm +505 -0
  643. data/share/guile/2.2/srfi/srfi-42/ec.scm +1053 -0
  644. data/share/guile/2.2/srfi/srfi-42.scm +66 -0
  645. data/share/guile/2.2/srfi/srfi-43.scm +1077 -0
  646. data/share/guile/2.2/srfi/srfi-45.scm +93 -0
  647. data/share/guile/2.2/srfi/srfi-6.scm +29 -0
  648. data/share/guile/2.2/srfi/srfi-60.scm +73 -0
  649. data/share/guile/2.2/srfi/srfi-64/testing.scm +1040 -0
  650. data/share/guile/2.2/srfi/srfi-64.scm +55 -0
  651. data/share/guile/2.2/srfi/srfi-67/compare.scm +686 -0
  652. data/share/guile/2.2/srfi/srfi-67.scm +88 -0
  653. data/share/guile/2.2/srfi/srfi-69.scm +336 -0
  654. data/share/guile/2.2/srfi/srfi-71.scm +267 -0
  655. data/share/guile/2.2/srfi/srfi-8.scm +31 -0
  656. data/share/guile/2.2/srfi/srfi-88.scm +53 -0
  657. data/share/guile/2.2/srfi/srfi-9/gnu.scm +168 -0
  658. data/share/guile/2.2/srfi/srfi-9.scm +351 -0
  659. data/share/guile/2.2/srfi/srfi-98.scm +44 -0
  660. data/share/guile/2.2/statprof.scm +988 -0
  661. data/share/guile/2.2/sxml/apply-templates.scm +102 -0
  662. data/share/guile/2.2/sxml/fold.scm +250 -0
  663. data/share/guile/2.2/sxml/match.scm +75 -0
  664. data/share/guile/2.2/sxml/simple.scm +408 -0
  665. data/share/guile/2.2/sxml/ssax/input-parse.scm +180 -0
  666. data/share/guile/2.2/sxml/ssax.scm +265 -0
  667. data/share/guile/2.2/sxml/sxml-match.ss +1181 -0
  668. data/share/guile/2.2/sxml/transform.scm +298 -0
  669. data/share/guile/2.2/sxml/upstream/SSAX.scm +3235 -0
  670. data/share/guile/2.2/sxml/upstream/SXML-tree-trans.scm +249 -0
  671. data/share/guile/2.2/sxml/upstream/SXPath-old.scm +1216 -0
  672. data/share/guile/2.2/sxml/upstream/assert.scm +35 -0
  673. data/share/guile/2.2/sxml/upstream/input-parse.scm +326 -0
  674. data/share/guile/2.2/sxml/xpath.scm +493 -0
  675. data/share/guile/2.2/system/base/ck.scm +55 -0
  676. data/share/guile/2.2/system/base/compile.scm +282 -0
  677. data/share/guile/2.2/system/base/lalr.scm +51 -0
  678. data/share/guile/2.2/system/base/lalr.upstream.scm +2096 -0
  679. data/share/guile/2.2/system/base/language.scm +119 -0
  680. data/share/guile/2.2/system/base/message.scm +238 -0
  681. data/share/guile/2.2/system/base/pmatch.scm +68 -0
  682. data/share/guile/2.2/system/base/syntax.scm +299 -0
  683. data/share/guile/2.2/system/base/target.scm +152 -0
  684. data/share/guile/2.2/system/base/types.scm +561 -0
  685. data/share/guile/2.2/system/foreign-object.scm +91 -0
  686. data/share/guile/2.2/system/foreign.scm +200 -0
  687. data/share/guile/2.2/system/repl/command.scm +946 -0
  688. data/share/guile/2.2/system/repl/common.scm +263 -0
  689. data/share/guile/2.2/system/repl/coop-server.scm +200 -0
  690. data/share/guile/2.2/system/repl/debug.scm +210 -0
  691. data/share/guile/2.2/system/repl/describe.scm +347 -0
  692. data/share/guile/2.2/system/repl/error-handling.scm +183 -0
  693. data/share/guile/2.2/system/repl/repl.scm +233 -0
  694. data/share/guile/2.2/system/repl/server.scm +332 -0
  695. data/share/guile/2.2/system/syntax.scm +33 -0
  696. data/share/guile/2.2/system/vm/assembler.scm +2614 -0
  697. data/share/guile/2.2/system/vm/coverage.scm +351 -0
  698. data/share/guile/2.2/system/vm/debug.scm +766 -0
  699. data/share/guile/2.2/system/vm/disassembler.scm +658 -0
  700. data/share/guile/2.2/system/vm/dwarf.scm +1852 -0
  701. data/share/guile/2.2/system/vm/elf.scm +1042 -0
  702. data/share/guile/2.2/system/vm/frame.scm +485 -0
  703. data/share/guile/2.2/system/vm/inspect.scm +188 -0
  704. data/share/guile/2.2/system/vm/linker.scm +732 -0
  705. data/share/guile/2.2/system/vm/loader.scm +27 -0
  706. data/share/guile/2.2/system/vm/program.scm +312 -0
  707. data/share/guile/2.2/system/vm/trace.scm +121 -0
  708. data/share/guile/2.2/system/vm/trap-state.scm +302 -0
  709. data/share/guile/2.2/system/vm/traps.scm +608 -0
  710. data/share/guile/2.2/system/vm/vm.scm +32 -0
  711. data/share/guile/2.2/system/xref.scm +369 -0
  712. data/share/guile/2.2/texinfo/docbook.scm +240 -0
  713. data/share/guile/2.2/texinfo/html.scm +279 -0
  714. data/share/guile/2.2/texinfo/indexing.scm +75 -0
  715. data/share/guile/2.2/texinfo/plain-text.scm +322 -0
  716. data/share/guile/2.2/texinfo/reflection.scm +585 -0
  717. data/share/guile/2.2/texinfo/serialize.scm +300 -0
  718. data/share/guile/2.2/texinfo/string-utils.scm +410 -0
  719. data/share/guile/2.2/texinfo.scm +1263 -0
  720. data/share/guile/2.2/web/client.scm +513 -0
  721. data/share/guile/2.2/web/http.scm +2043 -0
  722. data/share/guile/2.2/web/request.scm +326 -0
  723. data/share/guile/2.2/web/response.scm +379 -0
  724. data/share/guile/2.2/web/server/http.scm +183 -0
  725. data/share/guile/2.2/web/server.scm +397 -0
  726. data/share/guile/2.2/web/uri.scm +552 -0
  727. data/share/lilypond/2.24.1/fontconfig/0bd3dc0958fa2205aaaa8ebb13e2872b-le64.cache-8 +0 -0
  728. data/share/lilypond/2.24.1/fontconfig/188ac73a183f12857f63bb60a4a6d603-le64.cache-8 +0 -0
  729. data/share/lilypond/2.24.1/fontconfig/32b6488e5b8292a2e95c79d947e009e8-le64.cache-8 +0 -0
  730. data/share/lilypond/2.24.1/fontconfig/3830d5c3ddfd5cd38a049b759396e72e-le64.cache-8 +0 -0
  731. data/share/lilypond/2.24.1/fontconfig/3f7329c5293ffd510edef78f73874cfd-le64.cache-8 +0 -0
  732. data/share/lilypond/2.24.1/fontconfig/4c599c202bc5c08e2d34565a40eac3b2-le64.cache-8 +0 -0
  733. data/share/lilypond/2.24.1/fontconfig/57e423e26b20ab21d0f2f29c145174c3-le64.cache-8 +0 -0
  734. data/share/lilypond/2.24.1/fontconfig/7ef2298fde41cc6eeb7af42e48b7d293-le64.cache-8 +0 -0
  735. data/share/lilypond/2.24.1/fontconfig/826f6b6ef79022e2eac8af26bf4b62f2-le64.cache-8 +0 -0
  736. data/share/lilypond/2.24.1/fontconfig/945677eb7aeaf62f1d50efc3fb3ec7d8-le64.cache-8 +0 -0
  737. data/share/lilypond/2.24.1/fontconfig/95530828ff6c81d309f8258d8d02a23e-le64.cache-8 +0 -0
  738. data/share/lilypond/2.24.1/fontconfig/CACHEDIR.TAG +4 -0
  739. data/share/lilypond/2.24.1/fontconfig/bf3b770c553c462765856025a94f1ce6-le64.cache-8 +0 -0
  740. data/share/lilypond/2.24.1/fontconfig/c855463f699352c367813e37f3f70ea7-le64.cache-8 +0 -0
  741. data/share/lilypond/2.24.1/fontconfig/d3e5c4ee2ceb1fc347f91d4cefc53bc0-le64.cache-8 +0 -0
  742. data/share/lilypond/2.24.1/fontconfig/d589a48862398ed80a3d6066f4f56f4c-le64.cache-8 +0 -0
  743. data/share/lilypond/2.24.1/fontconfig/d82eb4fd963d448e2fcb7d7b793b5df3-le64.cache-8 +0 -0
  744. data/share/lilypond/2.24.1/fontconfig/e13b20fdb08344e0e664864cc2ede53d-le64.cache-8 +0 -0
  745. data/share/lilypond/2.24.1/fontconfig/e52a45a1c8c8fe895fc0fc8c4e6999b8-le64.cache-8 +0 -0
  746. data/share/lilypond/2.24.1/fontconfig/f1f2465696798768e9653f19e17ccdc8-le64.cache-8 +0 -0
  747. data/share/lilypond/2.24.1/fonts/00-lilypond-fonts.conf +99 -0
  748. data/share/lilypond/2.24.1/fonts/99-lilypond-fonts.conf +28 -0
  749. data/share/lilypond/2.24.1/fonts/otf/C059-BdIta.otf +0 -0
  750. data/share/lilypond/2.24.1/fonts/otf/C059-Bold.otf +0 -0
  751. data/share/lilypond/2.24.1/fonts/otf/C059-Italic.otf +0 -0
  752. data/share/lilypond/2.24.1/fonts/otf/C059-Roman.otf +0 -0
  753. data/share/lilypond/2.24.1/fonts/otf/NimbusMonoPS-Bold.otf +0 -0
  754. data/share/lilypond/2.24.1/fonts/otf/NimbusMonoPS-BoldItalic.otf +0 -0
  755. data/share/lilypond/2.24.1/fonts/otf/NimbusMonoPS-Italic.otf +0 -0
  756. data/share/lilypond/2.24.1/fonts/otf/NimbusMonoPS-Regular.otf +0 -0
  757. data/share/lilypond/2.24.1/fonts/otf/NimbusSans-Bold.otf +0 -0
  758. data/share/lilypond/2.24.1/fonts/otf/NimbusSans-BoldItalic.otf +0 -0
  759. data/share/lilypond/2.24.1/fonts/otf/NimbusSans-Italic.otf +0 -0
  760. data/share/lilypond/2.24.1/fonts/otf/NimbusSans-Regular.otf +0 -0
  761. data/share/lilypond/2.24.1/fonts/otf/emmentaler-11.otf +0 -0
  762. data/share/lilypond/2.24.1/fonts/otf/emmentaler-13.otf +0 -0
  763. data/share/lilypond/2.24.1/fonts/otf/emmentaler-14.otf +0 -0
  764. data/share/lilypond/2.24.1/fonts/otf/emmentaler-16.otf +0 -0
  765. data/share/lilypond/2.24.1/fonts/otf/emmentaler-18.otf +0 -0
  766. data/share/lilypond/2.24.1/fonts/otf/emmentaler-20.otf +0 -0
  767. data/share/lilypond/2.24.1/fonts/otf/emmentaler-23.otf +0 -0
  768. data/share/lilypond/2.24.1/fonts/otf/emmentaler-26.otf +0 -0
  769. data/share/lilypond/2.24.1/fonts/otf/emmentaler-brace.otf +0 -0
  770. data/share/lilypond/2.24.1/fonts/otf/texgyrecursor-bold.otf +0 -0
  771. data/share/lilypond/2.24.1/fonts/otf/texgyrecursor-bolditalic.otf +0 -0
  772. data/share/lilypond/2.24.1/fonts/otf/texgyrecursor-italic.otf +0 -0
  773. data/share/lilypond/2.24.1/fonts/otf/texgyrecursor-regular.otf +0 -0
  774. data/share/lilypond/2.24.1/fonts/otf/texgyreheros-bold.otf +0 -0
  775. data/share/lilypond/2.24.1/fonts/otf/texgyreheros-bolditalic.otf +0 -0
  776. data/share/lilypond/2.24.1/fonts/otf/texgyreheros-italic.otf +0 -0
  777. data/share/lilypond/2.24.1/fonts/otf/texgyreheros-regular.otf +0 -0
  778. data/share/lilypond/2.24.1/fonts/otf/texgyreschola-bold.otf +0 -0
  779. data/share/lilypond/2.24.1/fonts/otf/texgyreschola-bolditalic.otf +0 -0
  780. data/share/lilypond/2.24.1/fonts/otf/texgyreschola-italic.otf +0 -0
  781. data/share/lilypond/2.24.1/fonts/otf/texgyreschola-regular.otf +0 -0
  782. data/share/lilypond/2.24.1/fonts/source/common-modules-and-initialization.mf +26 -0
  783. data/share/lilypond/2.24.1/fonts/source/debugging-settings.mf +14 -0
  784. data/share/lilypond/2.24.1/fonts/source/declare-autometric-parameters.mf +9 -0
  785. data/share/lilypond/2.24.1/fonts/source/feta-accidentals.mf +58 -0
  786. data/share/lilypond/2.24.1/fonts/source/feta-accordion.mf +575 -0
  787. data/share/lilypond/2.24.1/fonts/source/feta-alphabet-generic.mf +16 -0
  788. data/share/lilypond/2.24.1/fonts/source/feta-alphabet11.mf +6 -0
  789. data/share/lilypond/2.24.1/fonts/source/feta-alphabet13.mf +6 -0
  790. data/share/lilypond/2.24.1/fonts/source/feta-alphabet14.mf +6 -0
  791. data/share/lilypond/2.24.1/fonts/source/feta-alphabet16.mf +6 -0
  792. data/share/lilypond/2.24.1/fonts/source/feta-alphabet18.mf +6 -0
  793. data/share/lilypond/2.24.1/fonts/source/feta-alphabet20.mf +6 -0
  794. data/share/lilypond/2.24.1/fonts/source/feta-alphabet23.mf +6 -0
  795. data/share/lilypond/2.24.1/fonts/source/feta-alphabet26.mf +6 -0
  796. data/share/lilypond/2.24.1/fonts/source/feta-arrow.mf +114 -0
  797. data/share/lilypond/2.24.1/fonts/source/feta-arrowheads.mf +171 -0
  798. data/share/lilypond/2.24.1/fonts/source/feta-autometric.mf +303 -0
  799. data/share/lilypond/2.24.1/fonts/source/feta-braces-a.mf +6 -0
  800. data/share/lilypond/2.24.1/fonts/source/feta-braces-b.mf +6 -0
  801. data/share/lilypond/2.24.1/fonts/source/feta-braces-c.mf +6 -0
  802. data/share/lilypond/2.24.1/fonts/source/feta-braces-d.mf +6 -0
  803. data/share/lilypond/2.24.1/fonts/source/feta-braces-e.mf +6 -0
  804. data/share/lilypond/2.24.1/fonts/source/feta-braces-f.mf +6 -0
  805. data/share/lilypond/2.24.1/fonts/source/feta-braces-g.mf +6 -0
  806. data/share/lilypond/2.24.1/fonts/source/feta-braces-generic.mf +47 -0
  807. data/share/lilypond/2.24.1/fonts/source/feta-braces-h.mf +6 -0
  808. data/share/lilypond/2.24.1/fonts/source/feta-braces-i.mf +6 -0
  809. data/share/lilypond/2.24.1/fonts/source/feta-braces.mf +125 -0
  810. data/share/lilypond/2.24.1/fonts/source/feta-brackettips.mf +100 -0
  811. data/share/lilypond/2.24.1/fonts/source/feta-clefs.mf +963 -0
  812. data/share/lilypond/2.24.1/fonts/source/feta-dots.mf +37 -0
  813. data/share/lilypond/2.24.1/fonts/source/feta-dynamics.mf +891 -0
  814. data/share/lilypond/2.24.1/fonts/source/feta-flags-generic.mf +17 -0
  815. data/share/lilypond/2.24.1/fonts/source/feta-flags.mf +926 -0
  816. data/share/lilypond/2.24.1/fonts/source/feta-flags11.mf +6 -0
  817. data/share/lilypond/2.24.1/fonts/source/feta-flags13.mf +6 -0
  818. data/share/lilypond/2.24.1/fonts/source/feta-flags14.mf +6 -0
  819. data/share/lilypond/2.24.1/fonts/source/feta-flags16.mf +6 -0
  820. data/share/lilypond/2.24.1/fonts/source/feta-flags18.mf +6 -0
  821. data/share/lilypond/2.24.1/fonts/source/feta-flags20.mf +6 -0
  822. data/share/lilypond/2.24.1/fonts/source/feta-flags23.mf +6 -0
  823. data/share/lilypond/2.24.1/fonts/source/feta-flags26.mf +6 -0
  824. data/share/lilypond/2.24.1/fonts/source/feta-flats.mf +668 -0
  825. data/share/lilypond/2.24.1/fonts/source/feta-macros.mf +506 -0
  826. data/share/lilypond/2.24.1/fonts/source/feta-naturals.mf +223 -0
  827. data/share/lilypond/2.24.1/fonts/source/feta-noteheads-generic.mf +17 -0
  828. data/share/lilypond/2.24.1/fonts/source/feta-noteheads.mf +2642 -0
  829. data/share/lilypond/2.24.1/fonts/source/feta-noteheads11.mf +6 -0
  830. data/share/lilypond/2.24.1/fonts/source/feta-noteheads13.mf +6 -0
  831. data/share/lilypond/2.24.1/fonts/source/feta-noteheads14.mf +6 -0
  832. data/share/lilypond/2.24.1/fonts/source/feta-noteheads16.mf +6 -0
  833. data/share/lilypond/2.24.1/fonts/source/feta-noteheads18.mf +6 -0
  834. data/share/lilypond/2.24.1/fonts/source/feta-noteheads20.mf +6 -0
  835. data/share/lilypond/2.24.1/fonts/source/feta-noteheads23.mf +6 -0
  836. data/share/lilypond/2.24.1/fonts/source/feta-noteheads26.mf +6 -0
  837. data/share/lilypond/2.24.1/fonts/source/feta-numbers.mf +1677 -0
  838. data/share/lilypond/2.24.1/fonts/source/feta-other-generic.mf +27 -0
  839. data/share/lilypond/2.24.1/fonts/source/feta-params.mf +323 -0
  840. data/share/lilypond/2.24.1/fonts/source/feta-parenthesis.mf +63 -0
  841. data/share/lilypond/2.24.1/fonts/source/feta-pedals.mf +355 -0
  842. data/share/lilypond/2.24.1/fonts/source/feta-rests.mf +890 -0
  843. data/share/lilypond/2.24.1/fonts/source/feta-scripts.mf +2206 -0
  844. data/share/lilypond/2.24.1/fonts/source/feta-sharps.mf +524 -0
  845. data/share/lilypond/2.24.1/fonts/source/feta-sori-koron.mf +325 -0
  846. data/share/lilypond/2.24.1/fonts/source/feta-ties.mf +72 -0
  847. data/share/lilypond/2.24.1/fonts/source/feta-timesignatures.mf +119 -0
  848. data/share/lilypond/2.24.1/fonts/source/feta-trills.mf +321 -0
  849. data/share/lilypond/2.24.1/fonts/source/feta11.mf +6 -0
  850. data/share/lilypond/2.24.1/fonts/source/feta13.mf +6 -0
  851. data/share/lilypond/2.24.1/fonts/source/feta14.mf +6 -0
  852. data/share/lilypond/2.24.1/fonts/source/feta16.mf +6 -0
  853. data/share/lilypond/2.24.1/fonts/source/feta18.mf +6 -0
  854. data/share/lilypond/2.24.1/fonts/source/feta20.mf +7 -0
  855. data/share/lilypond/2.24.1/fonts/source/feta23.mf +6 -0
  856. data/share/lilypond/2.24.1/fonts/source/feta26.mf +6 -0
  857. data/share/lilypond/2.24.1/fonts/source/parmesan-accidentals.mf +483 -0
  858. data/share/lilypond/2.24.1/fonts/source/parmesan-clefs.mf +1636 -0
  859. data/share/lilypond/2.24.1/fonts/source/parmesan-custodes.mf +503 -0
  860. data/share/lilypond/2.24.1/fonts/source/parmesan-dots.mf +62 -0
  861. data/share/lilypond/2.24.1/fonts/source/parmesan-flags.mf +319 -0
  862. data/share/lilypond/2.24.1/fonts/source/parmesan-macros.mf +225 -0
  863. data/share/lilypond/2.24.1/fonts/source/parmesan-noteheads-generic.mf +16 -0
  864. data/share/lilypond/2.24.1/fonts/source/parmesan-noteheads.mf +2191 -0
  865. data/share/lilypond/2.24.1/fonts/source/parmesan-noteheads11.mf +6 -0
  866. data/share/lilypond/2.24.1/fonts/source/parmesan-noteheads13.mf +6 -0
  867. data/share/lilypond/2.24.1/fonts/source/parmesan-noteheads14.mf +6 -0
  868. data/share/lilypond/2.24.1/fonts/source/parmesan-noteheads16.mf +6 -0
  869. data/share/lilypond/2.24.1/fonts/source/parmesan-noteheads18.mf +6 -0
  870. data/share/lilypond/2.24.1/fonts/source/parmesan-noteheads20.mf +6 -0
  871. data/share/lilypond/2.24.1/fonts/source/parmesan-noteheads23.mf +6 -0
  872. data/share/lilypond/2.24.1/fonts/source/parmesan-noteheads26.mf +6 -0
  873. data/share/lilypond/2.24.1/fonts/source/parmesan-other-generic.mf +24 -0
  874. data/share/lilypond/2.24.1/fonts/source/parmesan-rests.mf +428 -0
  875. data/share/lilypond/2.24.1/fonts/source/parmesan-scripts.mf +284 -0
  876. data/share/lilypond/2.24.1/fonts/source/parmesan-timesignatures.mf +402 -0
  877. data/share/lilypond/2.24.1/fonts/source/parmesan11.mf +6 -0
  878. data/share/lilypond/2.24.1/fonts/source/parmesan13.mf +6 -0
  879. data/share/lilypond/2.24.1/fonts/source/parmesan14.mf +6 -0
  880. data/share/lilypond/2.24.1/fonts/source/parmesan16.mf +6 -0
  881. data/share/lilypond/2.24.1/fonts/source/parmesan18.mf +6 -0
  882. data/share/lilypond/2.24.1/fonts/source/parmesan20.mf +6 -0
  883. data/share/lilypond/2.24.1/fonts/source/parmesan23.mf +6 -0
  884. data/share/lilypond/2.24.1/fonts/source/parmesan26.mf +6 -0
  885. data/share/lilypond/2.24.1/fonts/svg/emmentaler-11.svg +2525 -0
  886. data/share/lilypond/2.24.1/fonts/svg/emmentaler-11.woff +0 -0
  887. data/share/lilypond/2.24.1/fonts/svg/emmentaler-13.svg +2530 -0
  888. data/share/lilypond/2.24.1/fonts/svg/emmentaler-13.woff +0 -0
  889. data/share/lilypond/2.24.1/fonts/svg/emmentaler-14.svg +2526 -0
  890. data/share/lilypond/2.24.1/fonts/svg/emmentaler-14.woff +0 -0
  891. data/share/lilypond/2.24.1/fonts/svg/emmentaler-16.svg +2523 -0
  892. data/share/lilypond/2.24.1/fonts/svg/emmentaler-16.woff +0 -0
  893. data/share/lilypond/2.24.1/fonts/svg/emmentaler-18.svg +2519 -0
  894. data/share/lilypond/2.24.1/fonts/svg/emmentaler-18.woff +0 -0
  895. data/share/lilypond/2.24.1/fonts/svg/emmentaler-20.svg +2512 -0
  896. data/share/lilypond/2.24.1/fonts/svg/emmentaler-20.woff +0 -0
  897. data/share/lilypond/2.24.1/fonts/svg/emmentaler-23.svg +2506 -0
  898. data/share/lilypond/2.24.1/fonts/svg/emmentaler-23.woff +0 -0
  899. data/share/lilypond/2.24.1/fonts/svg/emmentaler-26.svg +2510 -0
  900. data/share/lilypond/2.24.1/fonts/svg/emmentaler-26.woff +0 -0
  901. data/share/lilypond/2.24.1/fonts/svg/emmentaler-brace.svg +1757 -0
  902. data/share/lilypond/2.24.1/fonts/svg/emmentaler-brace.woff +0 -0
  903. data/share/lilypond/2.24.1/ly/Welcome_to_LilyPond.ly +45 -0
  904. data/share/lilypond/2.24.1/ly/arabic.ly +185 -0
  905. data/share/lilypond/2.24.1/ly/articulate.ly +1013 -0
  906. data/share/lilypond/2.24.1/ly/bagpipe.ly +368 -0
  907. data/share/lilypond/2.24.1/ly/base-tkit.ly +135 -0
  908. data/share/lilypond/2.24.1/ly/catalan.ly +23 -0
  909. data/share/lilypond/2.24.1/ly/chord-modifiers-init.ly +63 -0
  910. data/share/lilypond/2.24.1/ly/chord-repetition-init.ly +60 -0
  911. data/share/lilypond/2.24.1/ly/context-mods-init.ly +119 -0
  912. data/share/lilypond/2.24.1/ly/declarations-init.ly +167 -0
  913. data/share/lilypond/2.24.1/ly/deutsch.ly +23 -0
  914. data/share/lilypond/2.24.1/ly/drumpitch-init.ly +366 -0
  915. data/share/lilypond/2.24.1/ly/dynamic-scripts-init.ly +54 -0
  916. data/share/lilypond/2.24.1/ly/english.ly +23 -0
  917. data/share/lilypond/2.24.1/ly/engraver-init.ly +1619 -0
  918. data/share/lilypond/2.24.1/ly/espanol.ly +23 -0
  919. data/share/lilypond/2.24.1/ly/event-listener.ly +241 -0
  920. data/share/lilypond/2.24.1/ly/festival.ly +38 -0
  921. data/share/lilypond/2.24.1/ly/generate-documentation.ly +7 -0
  922. data/share/lilypond/2.24.1/ly/grace-init.ly +56 -0
  923. data/share/lilypond/2.24.1/ly/graphviz-init.ly +174 -0
  924. data/share/lilypond/2.24.1/ly/gregorian.ly +268 -0
  925. data/share/lilypond/2.24.1/ly/guile-debugger.ly +55 -0
  926. data/share/lilypond/2.24.1/ly/hel-arabic.ly +307 -0
  927. data/share/lilypond/2.24.1/ly/init.ly +96 -0
  928. data/share/lilypond/2.24.1/ly/italiano.ly +23 -0
  929. data/share/lilypond/2.24.1/ly/lilypond-book-preamble.ly +47 -0
  930. data/share/lilypond/2.24.1/ly/lyrics-tkit.ly +68 -0
  931. data/share/lilypond/2.24.1/ly/makam.ly +166 -0
  932. data/share/lilypond/2.24.1/ly/midi-init.ly +59 -0
  933. data/share/lilypond/2.24.1/ly/music-functions-init.ly +2254 -0
  934. data/share/lilypond/2.24.1/ly/nederlands.ly +23 -0
  935. data/share/lilypond/2.24.1/ly/norsk.ly +23 -0
  936. data/share/lilypond/2.24.1/ly/paper-defaults-init.ly +188 -0
  937. data/share/lilypond/2.24.1/ly/performer-init.ly +398 -0
  938. data/share/lilypond/2.24.1/ly/persian.ly +335 -0
  939. data/share/lilypond/2.24.1/ly/piano-tkit.ly +61 -0
  940. data/share/lilypond/2.24.1/ly/portugues.ly +23 -0
  941. data/share/lilypond/2.24.1/ly/predefined-fretboards-init.ly +78 -0
  942. data/share/lilypond/2.24.1/ly/predefined-guitar-fretboards.ly +506 -0
  943. data/share/lilypond/2.24.1/ly/predefined-guitar-ninth-fretboards.ly +75 -0
  944. data/share/lilypond/2.24.1/ly/predefined-mandolin-fretboards.ly +876 -0
  945. data/share/lilypond/2.24.1/ly/predefined-ukulele-fretboards.ly +1285 -0
  946. data/share/lilypond/2.24.1/ly/property-init.ly +858 -0
  947. data/share/lilypond/2.24.1/ly/satb.ly +214 -0
  948. data/share/lilypond/2.24.1/ly/scale-definitions-init.ly +117 -0
  949. data/share/lilypond/2.24.1/ly/scheme-sandbox.ly +39 -0
  950. data/share/lilypond/2.24.1/ly/script-init.ly +94 -0
  951. data/share/lilypond/2.24.1/ly/spanners-init.ly +146 -0
  952. data/share/lilypond/2.24.1/ly/ssaattbb.ly +335 -0
  953. data/share/lilypond/2.24.1/ly/staff-tkit.ly +182 -0
  954. data/share/lilypond/2.24.1/ly/string-tunings-init.ly +94 -0
  955. data/share/lilypond/2.24.1/ly/suomi.ly +23 -0
  956. data/share/lilypond/2.24.1/ly/svenska.ly +23 -0
  957. data/share/lilypond/2.24.1/ly/swing.ly +362 -0
  958. data/share/lilypond/2.24.1/ly/text-replacements.ly +150 -0
  959. data/share/lilypond/2.24.1/ly/titling-init.ly +150 -0
  960. data/share/lilypond/2.24.1/ly/toc-init.ly +182 -0
  961. data/share/lilypond/2.24.1/ly/turkish-makam.ly +609 -0
  962. data/share/lilypond/2.24.1/ly/vlaams.ly +23 -0
  963. data/share/lilypond/2.24.1/ly/vocal-tkit.ly +103 -0
  964. data/share/lilypond/2.24.1/ly/voice-tkit.ly +34 -0
  965. data/share/lilypond/2.24.1/ps/encodingdefs.ps +2611 -0
  966. data/share/lilypond/2.24.1/ps/lilyponddefs.ps +49 -0
  967. data/share/lilypond/2.24.1/ps/music-drawing-routines.ps +329 -0
  968. data/share/lilypond/2.24.1/python/__pycache__/book_base.cpython-310.pyc +0 -0
  969. data/share/lilypond/2.24.1/python/__pycache__/book_docbook.cpython-310.pyc +0 -0
  970. data/share/lilypond/2.24.1/python/__pycache__/book_html.cpython-310.pyc +0 -0
  971. data/share/lilypond/2.24.1/python/__pycache__/book_latex.cpython-310.pyc +0 -0
  972. data/share/lilypond/2.24.1/python/__pycache__/book_snippets.cpython-310.pyc +0 -0
  973. data/share/lilypond/2.24.1/python/__pycache__/book_texinfo.cpython-310.pyc +0 -0
  974. data/share/lilypond/2.24.1/python/__pycache__/convertrules.cpython-310.pyc +0 -0
  975. data/share/lilypond/2.24.1/python/__pycache__/langdefs.cpython-310.pyc +0 -0
  976. data/share/lilypond/2.24.1/python/__pycache__/lilylib.cpython-310.pyc +0 -0
  977. data/share/lilypond/2.24.1/python/__pycache__/midi.cpython-310.pyc +0 -0
  978. data/share/lilypond/2.24.1/python/__pycache__/musicexp.cpython-310.pyc +0 -0
  979. data/share/lilypond/2.24.1/python/__pycache__/musicxml.cpython-310.pyc +0 -0
  980. data/share/lilypond/2.24.1/python/__pycache__/musicxml2ly_conversion.cpython-310.pyc +0 -0
  981. data/share/lilypond/2.24.1/python/__pycache__/utilities.cpython-310.pyc +0 -0
  982. data/share/lilypond/2.24.1/python/book_base.py +331 -0
  983. data/share/lilypond/2.24.1/python/book_docbook.py +154 -0
  984. data/share/lilypond/2.24.1/python/book_html.py +178 -0
  985. data/share/lilypond/2.24.1/python/book_latex.py +373 -0
  986. data/share/lilypond/2.24.1/python/book_snippets.py +1052 -0
  987. data/share/lilypond/2.24.1/python/book_texinfo.py +437 -0
  988. data/share/lilypond/2.24.1/python/convertrules.py +4764 -0
  989. data/share/lilypond/2.24.1/python/langdefs.py +131 -0
  990. data/share/lilypond/2.24.1/python/lilylib.py +141 -0
  991. data/share/lilypond/2.24.1/python/midi.py +212 -0
  992. data/share/lilypond/2.24.1/python/musicexp.py +2781 -0
  993. data/share/lilypond/2.24.1/python/musicxml.py +1905 -0
  994. data/share/lilypond/2.24.1/python/musicxml2ly_conversion.py +80 -0
  995. data/share/lilypond/2.24.1/python/utilities.py +280 -0
  996. data/share/lilypond/2.24.1/scm/lily/accreg.scm +579 -0
  997. data/share/lilypond/2.24.1/scm/lily/auto-beam.scm +163 -0
  998. data/share/lilypond/2.24.1/scm/lily/autochange.scm +100 -0
  999. data/share/lilypond/2.24.1/scm/lily/backend-library.scm +593 -0
  1000. data/share/lilypond/2.24.1/scm/lily/bar-line.scm +1281 -0
  1001. data/share/lilypond/2.24.1/scm/lily/breath.scm +74 -0
  1002. data/share/lilypond/2.24.1/scm/lily/c++.scm +174 -0
  1003. data/share/lilypond/2.24.1/scm/lily/chord-entry.scm +278 -0
  1004. data/share/lilypond/2.24.1/scm/lily/chord-ignatzek-names.scm +304 -0
  1005. data/share/lilypond/2.24.1/scm/lily/chord-name.scm +217 -0
  1006. data/share/lilypond/2.24.1/scm/lily/clip-region.scm +87 -0
  1007. data/share/lilypond/2.24.1/scm/lily/color.scm +757 -0
  1008. data/share/lilypond/2.24.1/scm/lily/curried-definitions.scm +68 -0
  1009. data/share/lilypond/2.24.1/scm/lily/define-context-properties.scm +939 -0
  1010. data/share/lilypond/2.24.1/scm/lily/define-event-classes.scm +142 -0
  1011. data/share/lilypond/2.24.1/scm/lily/define-grob-interfaces.scm +640 -0
  1012. data/share/lilypond/2.24.1/scm/lily/define-grob-properties.scm +1647 -0
  1013. data/share/lilypond/2.24.1/scm/lily/define-grobs.scm +4027 -0
  1014. data/share/lilypond/2.24.1/scm/lily/define-markup-commands.scm +5737 -0
  1015. data/share/lilypond/2.24.1/scm/lily/define-music-callbacks.scm +257 -0
  1016. data/share/lilypond/2.24.1/scm/lily/define-music-display-methods.scm +1350 -0
  1017. data/share/lilypond/2.24.1/scm/lily/define-music-properties.scm +242 -0
  1018. data/share/lilypond/2.24.1/scm/lily/define-music-types.scm +983 -0
  1019. data/share/lilypond/2.24.1/scm/lily/define-note-names.scm +1421 -0
  1020. data/share/lilypond/2.24.1/scm/lily/define-stencil-commands.scm +71 -0
  1021. data/share/lilypond/2.24.1/scm/lily/define-woodwind-diagrams.scm +1215 -0
  1022. data/share/lilypond/2.24.1/scm/lily/display-lily.scm +315 -0
  1023. data/share/lilypond/2.24.1/scm/lily/display-woodwind-diagrams.scm +1985 -0
  1024. data/share/lilypond/2.24.1/scm/lily/document-backend.scm +307 -0
  1025. data/share/lilypond/2.24.1/scm/lily/document-context-mods.scm +98 -0
  1026. data/share/lilypond/2.24.1/scm/lily/document-functions.scm +169 -0
  1027. data/share/lilypond/2.24.1/scm/lily/document-identifiers.scm +76 -0
  1028. data/share/lilypond/2.24.1/scm/lily/document-markup.scm +158 -0
  1029. data/share/lilypond/2.24.1/scm/lily/document-music.scm +146 -0
  1030. data/share/lilypond/2.24.1/scm/lily/document-outside-staff-priorities.scm +40 -0
  1031. data/share/lilypond/2.24.1/scm/lily/document-paper-sizes.scm +71 -0
  1032. data/share/lilypond/2.24.1/scm/lily/document-translation.scm +318 -0
  1033. data/share/lilypond/2.24.1/scm/lily/document-type-predicates.scm +85 -0
  1034. data/share/lilypond/2.24.1/scm/lily/documentation-generate.scm +259 -0
  1035. data/share/lilypond/2.24.1/scm/lily/documentation-lib.scm +207 -0
  1036. data/share/lilypond/2.24.1/scm/lily/file-cache.scm +28 -0
  1037. data/share/lilypond/2.24.1/scm/lily/flag-styles.scm +249 -0
  1038. data/share/lilypond/2.24.1/scm/lily/font-encodings.scm +1242 -0
  1039. data/share/lilypond/2.24.1/scm/lily/font.scm +303 -0
  1040. data/share/lilypond/2.24.1/scm/lily/framework-cairo.scm +26 -0
  1041. data/share/lilypond/2.24.1/scm/lily/framework-ps.scm +896 -0
  1042. data/share/lilypond/2.24.1/scm/lily/framework-svg.scm +172 -0
  1043. data/share/lilypond/2.24.1/scm/lily/fret-diagrams.scm +1261 -0
  1044. data/share/lilypond/2.24.1/scm/lily/graphviz.scm +78 -0
  1045. data/share/lilypond/2.24.1/scm/lily/guile-debugger.scm +90 -0
  1046. data/share/lilypond/2.24.1/scm/lily/harp-pedals.scm +172 -0
  1047. data/share/lilypond/2.24.1/scm/lily/hyphenate-internal-words.scm +51 -0
  1048. data/share/lilypond/2.24.1/scm/lily/layout-beam.scm +73 -0
  1049. data/share/lilypond/2.24.1/scm/lily/layout-slur.scm +45 -0
  1050. data/share/lilypond/2.24.1/scm/lily/lily-library.scm +1446 -0
  1051. data/share/lilypond/2.24.1/scm/lily/lily-sort.scm +116 -0
  1052. data/share/lilypond/2.24.1/scm/lily/lily.scm +929 -0
  1053. data/share/lilypond/2.24.1/scm/lily/ly-syntax-constructors.scm +374 -0
  1054. data/share/lilypond/2.24.1/scm/lily/markup-macros.scm +493 -0
  1055. data/share/lilypond/2.24.1/scm/lily/markup.scm +126 -0
  1056. data/share/lilypond/2.24.1/scm/lily/midi.scm +258 -0
  1057. data/share/lilypond/2.24.1/scm/lily/modal-transforms.scm +337 -0
  1058. data/share/lilypond/2.24.1/scm/lily/music-functions.scm +2878 -0
  1059. data/share/lilypond/2.24.1/scm/lily/output-lib.scm +3377 -0
  1060. data/share/lilypond/2.24.1/scm/lily/output-ps.scm +335 -0
  1061. data/share/lilypond/2.24.1/scm/lily/output-svg.scm +684 -0
  1062. data/share/lilypond/2.24.1/scm/lily/page.scm +321 -0
  1063. data/share/lilypond/2.24.1/scm/lily/paper-system.scm +271 -0
  1064. data/share/lilypond/2.24.1/scm/lily/paper.scm +376 -0
  1065. data/share/lilypond/2.24.1/scm/lily/parser-clef.scm +205 -0
  1066. data/share/lilypond/2.24.1/scm/lily/parser-ly-from-scheme.scm +170 -0
  1067. data/share/lilypond/2.24.1/scm/lily/part-combiner.scm +998 -0
  1068. data/share/lilypond/2.24.1/scm/lily/predefined-fretboards.scm +54 -0
  1069. data/share/lilypond/2.24.1/scm/lily/ps-to-png.scm +182 -0
  1070. data/share/lilypond/2.24.1/scm/lily/scheme-engravers.scm +1813 -0
  1071. data/share/lilypond/2.24.1/scm/lily/scheme-performers.scm +126 -0
  1072. data/share/lilypond/2.24.1/scm/lily/script.scm +416 -0
  1073. data/share/lilypond/2.24.1/scm/lily/skyline.scm +25 -0
  1074. data/share/lilypond/2.24.1/scm/lily/song-util.scm +191 -0
  1075. data/share/lilypond/2.24.1/scm/lily/song.scm +853 -0
  1076. data/share/lilypond/2.24.1/scm/lily/stencil.scm +998 -0
  1077. data/share/lilypond/2.24.1/scm/lily/tablature.scm +392 -0
  1078. data/share/lilypond/2.24.1/scm/lily/time-signature-settings.scm +473 -0
  1079. data/share/lilypond/2.24.1/scm/lily/time-signature.scm +35 -0
  1080. data/share/lilypond/2.24.1/scm/lily/titling.scm +99 -0
  1081. data/share/lilypond/2.24.1/scm/lily/to-xml.scm +254 -0
  1082. data/share/lilypond/2.24.1/scm/lily/translation-functions.scm +1169 -0
  1083. data/share/lilypond/2.24.1/vim/compiler/lilypond.vim +36 -0
  1084. data/share/lilypond/2.24.1/vim/ftdetect/lilypond.vim +4 -0
  1085. data/share/lilypond/2.24.1/vim/ftplugin/lilypond.vim +91 -0
  1086. data/share/lilypond/2.24.1/vim/indent/lilypond.vim +79 -0
  1087. data/share/lilypond/2.24.1/vim/syntax/lilypond-words +1408 -0
  1088. data/share/lilypond/2.24.1/vim/syntax/lilypond-words.vim +3 -0
  1089. data/share/lilypond/2.24.1/vim/syntax/lilypond.vim +104 -0
  1090. data/share/locale/ca/LC_MESSAGES/lilypond.mo +0 -0
  1091. data/share/locale/cs/LC_MESSAGES/lilypond.mo +0 -0
  1092. data/share/locale/da/LC_MESSAGES/lilypond.mo +0 -0
  1093. data/share/locale/de/LC_MESSAGES/lilypond.mo +0 -0
  1094. data/share/locale/el/LC_MESSAGES/lilypond.mo +0 -0
  1095. data/share/locale/eo/LC_MESSAGES/lilypond.mo +0 -0
  1096. data/share/locale/es/LC_MESSAGES/lilypond.mo +0 -0
  1097. data/share/locale/fi/LC_MESSAGES/lilypond.mo +0 -0
  1098. data/share/locale/fr/LC_MESSAGES/lilypond.mo +0 -0
  1099. data/share/locale/it/LC_MESSAGES/lilypond.mo +0 -0
  1100. data/share/locale/ja/LC_MESSAGES/lilypond.mo +0 -0
  1101. data/share/locale/nl/LC_MESSAGES/lilypond.mo +0 -0
  1102. data/share/locale/ru/LC_MESSAGES/lilypond.mo +0 -0
  1103. data/share/locale/sv/LC_MESSAGES/lilypond.mo +0 -0
  1104. data/share/locale/tr/LC_MESSAGES/lilypond.mo +0 -0
  1105. data/share/locale/uk/LC_MESSAGES/lilypond.mo +0 -0
  1106. data/share/locale/vi/LC_MESSAGES/lilypond.mo +0 -0
  1107. data/share/locale/zh_CN/LC_MESSAGES/lilypond.mo +0 -0
  1108. data/share/locale/zh_TW/LC_MESSAGES/lilypond.mo +0 -0
  1109. metadata +1108 -1
@@ -0,0 +1,1813 @@
1
+ ;;;; This file is part of LilyPond, the GNU music typesetter.
2
+ ;;;;
3
+ ;;;; Copyright (C) 2012--2022 David Nalesnik <david.nalesnik@gmail.com>
4
+ ;;;; Thomas Morley <thomasmorley65@gmail.com>
5
+ ;;;; Dan Eble <nine.fierce.ballads@gmail.com>
6
+ ;;;; Jonas Hahnfeld <hahnjo@hahnjo.de>
7
+ ;;;; Jean Abou Samra <jean@abou-samra.fr>
8
+ ;;;;
9
+ ;;;; LilyPond is free software: you can redistribute it and/or modify
10
+ ;;;; it under the terms of the GNU General Public License as published by
11
+ ;;;; the Free Software Foundation, either version 3 of the License, or
12
+ ;;;; (at your option) any later version.
13
+ ;;;;
14
+ ;;;; LilyPond is distributed in the hope that it will be useful,
15
+ ;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
16
+ ;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17
+ ;;;; GNU General Public License for more details.
18
+ ;;;;
19
+ ;;;; You should have received a copy of the GNU General Public License
20
+ ;;;; along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
21
+
22
+ (use-modules (ice-9 match))
23
+
24
+ (define-public (ly:make-listener callback)
25
+ "This is a compatibility wrapper for creating a @q{listener} for use
26
+ with @code{ly:add-listener} from a @var{callback} taking a single
27
+ argument. Since listeners are equivalent to callbacks, this is no
28
+ longer needed."
29
+ callback)
30
+
31
+ (define-public (Breathing_sign_engraver context)
32
+ (let ((breathing-event #f))
33
+ (make-engraver
34
+ (listeners
35
+ ((breathing-event engraver event)
36
+ (set! breathing-event event)))
37
+
38
+ ((process-music engraver)
39
+ (if (ly:stream-event? breathing-event)
40
+ (let ((b-type (ly:context-property context 'breathMarkType)))
41
+ (if (symbol? b-type)
42
+ (let ((grob (ly:engraver-make-grob
43
+ engraver 'BreathingSign breathing-event)))
44
+ (ly:breathing-sign::set-breath-properties
45
+ grob context b-type))))))
46
+
47
+ ((stop-translation-timestep engraver)
48
+ (set! breathing-event #f)))))
49
+
50
+ (ly:register-translator
51
+ Breathing_sign_engraver 'Breathing_sign_engraver
52
+ '((grobs-created . (BreathingSign))
53
+ (events-accepted . (breathing-event))
54
+ (properties-read . (breathMarkType))
55
+ (properties-written . ())
56
+ (description . "Notate breath marks.")))
57
+
58
+ (define-public (Divisio_engraver context)
59
+ ;; "div info" is (priority breath-type event)
60
+ (define (div-info-max old new)
61
+ (if (> (car new) (car old))
62
+ new
63
+ old))
64
+
65
+ (let ((div-info (list 0 #f #f))
66
+ (grob #f))
67
+
68
+ (make-engraver
69
+ (listeners
70
+ ((volta-repeat-start-event engraver event #:once)
71
+ (set! div-info (div-info-max div-info
72
+ (list 5 'chantdoublebar event))))
73
+ ((volta-repeat-end-event engraver event #:once)
74
+ (set! div-info (div-info-max div-info
75
+ (list 4 'chantdoublebar event))))
76
+ ((fine-event engraver event #:once)
77
+ (set! div-info (div-info-max div-info
78
+ (list 3 'chantdoublebar event))))
79
+ ((section-event engraver event #:once)
80
+ (set! div-info (div-info-max div-info
81
+ (list 2 'chantdoublebar event))))
82
+ ((caesura-event engraver event #:once)
83
+ (set! div-info (div-info-max div-info
84
+ (list 1 'fromcontext event)))))
85
+
86
+ ((process-music engraver)
87
+ (let* ((b-type (cadr div-info))
88
+ (event (caddr div-info))
89
+ (props (if (eq? b-type 'fromcontext)
90
+ (ly:context-property context 'caesuraType)
91
+ `((breath . ,b-type)))))
92
+ ;; Add the user's articulations to the caesuraType.
93
+ (let ((art-types
94
+ (if (ly:stream-event? event)
95
+ (map (lambda (art-event)
96
+ (ly:event-property art-event 'articulation-type))
97
+ (ly:event-property event 'articulations))
98
+ '())))
99
+ (set! props (acons 'articulations art-types props)))
100
+ ;; Pass the caesuraType through the transform function, if it is set.
101
+ (let ((transform (ly:context-property context 'caesuraTypeTransform)))
102
+ (when (procedure? transform)
103
+ (set! props (transform context props '()))))
104
+ (set! b-type (assq-ref props 'breath))
105
+ (when (symbol? b-type)
106
+ (set! grob (ly:engraver-make-grob engraver 'Divisio event))
107
+ (ly:breathing-sign::set-breath-properties grob context b-type))))
108
+
109
+ ((stop-translation-timestep engraver)
110
+ (set! div-info (list 0 #f #f))
111
+ (set! grob #f)))))
112
+
113
+ (ly:register-translator
114
+ Divisio_engraver 'Divisio_engraver
115
+ '((grobs-created . (Divisio))
116
+ (events-accepted . (caesura-event
117
+ fine-event
118
+ section-event
119
+ volta-repeat-end-event
120
+ volta-repeat-start-event))
121
+ (properties-read . (caesuraType
122
+ caesuraTypeTransform))
123
+ (properties-written . ())
124
+ (description . "Create divisiones: chant notation for points of
125
+ breathing or caesura.")))
126
+
127
+ (define (set-counter-text! grob
128
+ property
129
+ number
130
+ alternative-number
131
+ measure-pos
132
+ context)
133
+ ;; FIXME: slight code duplication with Bar_number_engraver
134
+ (let* ((style (ly:context-property context 'alternativeNumberingStyle))
135
+ (number-alternatives (eq? style 'numbers-with-letters))
136
+ (final-alt-number (if number-alternatives alternative-number 0))
137
+ (formatter (ly:context-property context 'barNumberFormatter #f)))
138
+ (if formatter
139
+ (ly:grob-set-property! grob
140
+ property
141
+ (formatter number
142
+ measure-pos
143
+ (1- final-alt-number)
144
+ context)))))
145
+
146
+ (define-public (Measure_counter_engraver context)
147
+ (let ((count-spanner '()) ; a single element of the count
148
+ (start-event #f)
149
+ (go? #f) ; is the count in progress?
150
+ (stop-event #f)
151
+ (last-measure-seen 0)
152
+ (last-alternative-number #f)
153
+ ;; Acknowledge bar lines and start a new count when there
154
+ ;; is one. This is similar to the Bar_number_engraver.
155
+ (first-time-step #t)
156
+ (now-is-bar-line #t)
157
+ (done-in-time-step #f)
158
+ (first-measure-in-count 0))
159
+
160
+ (make-engraver
161
+ (listeners
162
+ ((measure-counter-event engraver event)
163
+ (cond
164
+ ((= START (ly:event-property event 'span-direction))
165
+ (let ((current-bar-number (ly:context-property context 'currentBarNumber)))
166
+ (set! start-event event)
167
+ (set! first-measure-in-count current-bar-number)
168
+ ;; initialize one less so first measure receives a count spanner
169
+ (set! last-measure-seen (1- current-bar-number))))
170
+ ((= STOP (ly:event-property event 'span-direction))
171
+ (set! stop-event event)))))
172
+
173
+ (acknowledgers
174
+ ((bar-line-interface engraver grob source-engraver)
175
+ (set! now-is-bar-line #t)))
176
+
177
+ ((process-acknowledged trans)
178
+ (when (and now-is-bar-line
179
+ (not done-in-time-step))
180
+ (let ((col (ly:context-property context 'currentCommandColumn))
181
+ (measure-pos (ly:context-property context 'measurePosition))
182
+ (current-bar (ly:context-property context 'currentBarNumber)))
183
+ (set! done-in-time-step #t)
184
+ ;; Each measure of a count receives a new spanner, which is bounded
185
+ ;; by the first "command column" of that measure and the following one.
186
+ (if (or (eq? #t (ly:context-property context 'measureStartNow))
187
+ ;; measureStartNow is unset at start of piece. This
188
+ ;; first-time-step criterion also applies for a Staff
189
+ ;; created mid-piece; starting a measure counter
190
+ ;; mid-measure is not meaningful anyway.
191
+ first-time-step)
192
+ (begin
193
+ ;; Finish the previous count-spanner if there is one.
194
+ (if (ly:grob? count-spanner)
195
+ (begin
196
+ (ly:spanner-set-bound! count-spanner RIGHT col)
197
+ (ly:pointer-group-interface::add-grob count-spanner 'columns col)
198
+ (ly:engraver-announce-end-grob trans count-spanner col)
199
+ (if (> current-bar (1+ last-measure-seen))
200
+ ;; Measure counter spanning over a compressed MM rest.
201
+ (let* ((counter (ly:grob-property count-spanner 'count-from))
202
+ (right-number
203
+ (1- (+ counter
204
+ (- current-bar first-measure-in-count)))))
205
+ (set-counter-text!
206
+ count-spanner
207
+ 'right-number-text
208
+ right-number
209
+ ;; Edge case of compressed MM rests in alternatives.
210
+ ;; It would be wrong to take the context's
211
+ ;; alternativeNumber here, because we are
212
+ ;; looking behind at the last measure before
213
+ ;; this one. Actually, a compressed MM rest
214
+ ;; is one single time step, so there is no
215
+ ;; right time where we could look up the property.
216
+ ;; Fortunately, MM rests from different alternatives
217
+ ;; cannot be compressed together, so we can just take
218
+ ;; the alternative number that was current at the
219
+ ;; time of the start of this measure counter.
220
+ last-alternative-number
221
+ measure-pos
222
+ context)))
223
+ (set! count-spanner '())))
224
+ (if stop-event
225
+ (set! go? #f))
226
+ (if start-event
227
+ (if go?
228
+ (ly:event-warning start-event
229
+ (G_ "count not ended before another begun"))
230
+ (set! go? #t)))
231
+ ;; If count is in progress, begin a count-spanner.
232
+ (if go?
233
+ (let* ((c (ly:engraver-make-grob trans 'MeasureCounter col))
234
+ (counter (ly:grob-property c 'count-from))
235
+ (left-number
236
+ (+ counter (- current-bar first-measure-in-count)))
237
+ (alternative-number
238
+ (ly:context-property context 'alternativeNumber 0)))
239
+ (ly:spanner-set-bound! c LEFT col)
240
+ (ly:pointer-group-interface::add-grob c 'columns col)
241
+ (set-counter-text! c
242
+ 'left-number-text
243
+ left-number
244
+ alternative-number
245
+ measure-pos
246
+ context)
247
+ (set! count-spanner c)
248
+ (set! last-alternative-number alternative-number)))))
249
+ (set! last-measure-seen current-bar))))
250
+
251
+ ((stop-translation-timestep trans)
252
+ (set! start-event #f)
253
+ (set! stop-event #f)
254
+ (set! now-is-bar-line #f)
255
+ (set! done-in-time-step #f)
256
+ (set! first-time-step #f))
257
+
258
+ ((finalize trans)
259
+ (if go?
260
+ (begin
261
+ (set! go? #f)
262
+ (ly:grob-suicide! count-spanner)
263
+ (set! count-spanner '())
264
+ (ly:warning (G_ "measure count left unfinished"))))))))
265
+
266
+ (define-public (Measure_spanner_engraver context)
267
+ (let ((span '())
268
+ (finished '())
269
+ (event-start '())
270
+ (event-stop '()))
271
+ (make-engraver
272
+ (listeners ((measure-spanner-event engraver event)
273
+ (if (= START (ly:event-property event 'span-direction))
274
+ (set! event-start event)
275
+ (set! event-stop event))))
276
+ ((process-music trans)
277
+ (if (ly:stream-event? event-stop)
278
+ (if (null? span)
279
+ (ly:warning (G_ "cannot find start of measure spanner"))
280
+ (begin
281
+ (set! finished span)
282
+ (ly:engraver-announce-end-grob trans finished event-start)
283
+ (set! span '())
284
+ (set! event-stop '()))))
285
+ (if (ly:stream-event? event-start)
286
+ (begin
287
+ (set! span (ly:engraver-make-grob trans 'MeasureSpanner event-start))
288
+ (set! event-start '()))))
289
+ ((stop-translation-timestep trans)
290
+ (if (and (ly:spanner? span)
291
+ (not (ly:spanner-bound span LEFT #f))
292
+ (moment<=? (ly:context-property context 'measurePosition) ZERO-MOMENT))
293
+ (ly:spanner-set-bound! span LEFT
294
+ (ly:context-property context 'currentCommandColumn)))
295
+ (if (and (ly:spanner? finished)
296
+ (moment<=? (ly:context-property context 'measurePosition) ZERO-MOMENT))
297
+ (begin
298
+ (if (not (ly:spanner-bound finished RIGHT #f))
299
+ (ly:spanner-set-bound! finished RIGHT
300
+ (ly:context-property context 'currentCommandColumn)))
301
+ (set! finished '())
302
+ (set! event-start '())
303
+ (set! event-stop '()))))
304
+ ((finalize trans)
305
+ (if (ly:spanner? finished)
306
+ (begin
307
+ (if (not (ly:spanner-bound finished RIGHT #f))
308
+ (set! (ly:spanner-bound finished RIGHT)
309
+ (ly:context-property context 'currentCommandColumn)))
310
+ (set! finished '())))
311
+ (if (ly:spanner? span)
312
+ (begin
313
+ (ly:warning (G_ "unterminated measure spanner"))
314
+ (ly:grob-suicide! span)
315
+ (set! span '())))))))
316
+
317
+ (ly:register-translator
318
+ Measure_counter_engraver 'Measure_counter_engraver
319
+ '((grobs-created . (MeasureCounter))
320
+ (events-accepted . (measure-counter-event))
321
+ (properties-read . (currentCommandColumn
322
+ measurePosition
323
+ currentBarNumber))
324
+ (properties-written . ())
325
+ (description . "\
326
+ This engraver numbers ranges of measures, which is useful in parts as an
327
+ aid for counting repeated measures. There is no requirement that the
328
+ affected measures be repeated, however. The user delimits the area to
329
+ receive a count with @code{\\startMeasureCount} and
330
+ @code{\\stopMeasureCount}.")))
331
+
332
+ (ly:register-translator
333
+ Measure_spanner_engraver 'Measure_spanner_engraver
334
+ '((grobs-created . (MeasureSpanner))
335
+ (events-accepted . (measure-spanner-event))
336
+ (properties-read . (measurePosition
337
+ currentCommandColumn))
338
+ (properties-written . ())
339
+ (description . "\
340
+ This engraver creates spanners bounded by the columns that start and
341
+ end measures in response to @code{\\startMeasureSpanner} and
342
+ @code{\\stopMeasureSpanner}.")))
343
+
344
+ (ly:register-translator
345
+ Span_stem_engraver 'Span_stem_engraver
346
+ '((grobs-created . (Stem))
347
+ (events-accepted . ())
348
+ (properties-read . ())
349
+ (properties-written . ())
350
+ (description . "Connect cross-staff stems to the stems above in the system")))
351
+
352
+ (define (has-one-or-less? lst) (or (null? lst) (null? (cdr lst))))
353
+ (define (has-at-least-two? lst) (not (has-one-or-less? lst)))
354
+ (define (all-equal? lst pred)
355
+ (or (has-one-or-less? lst)
356
+ (and (pred (car lst) (cadr lst)) (all-equal? (cdr lst) pred))))
357
+
358
+ (define-public (Merge_mmrest_numbers_engraver context)
359
+ (define (text-equal? a b)
360
+ (equal?
361
+ (ly:grob-property a 'text)
362
+ (ly:grob-property b 'text)))
363
+
364
+ (let ((mmrest-numbers '()))
365
+ (make-engraver
366
+ ((start-translation-timestep translator)
367
+ (set! mmrest-numbers '()))
368
+ (acknowledgers
369
+ ((multi-measure-rest-number-interface engraver grob source-engraver)
370
+ (set! mmrest-numbers (cons grob mmrest-numbers))))
371
+ ((stop-translation-timestep translator)
372
+ (if (and (has-at-least-two? mmrest-numbers)
373
+ (all-equal? mmrest-numbers text-equal?))
374
+ (for-each ly:grob-suicide! (cdr (reverse mmrest-numbers))))))))
375
+
376
+ (ly:register-translator
377
+ Merge_mmrest_numbers_engraver 'Merge_mmrest_numbers_engraver
378
+ '((grobs-created . ())
379
+ (events-accepted . ())
380
+ (properties-read . ())
381
+ (properties-written . ())
382
+ (description . "\
383
+ Engraver to merge multi-measure rest numbers in multiple voices.
384
+
385
+ This works by gathering all multi-measure rest numbers at a time step. If they
386
+ all have the same text and there are at least two only the first one is retained
387
+ and the others are hidden.")))
388
+
389
+ (define-public (Merge_rests_engraver context)
390
+ (define (measure-count-eqv? a b)
391
+ (eqv?
392
+ (ly:grob-property a 'measure-count)
393
+ (ly:grob-property b 'measure-count)))
394
+
395
+ (define (rests-all-unpitched? rests)
396
+ "Returns true when all rests do not override the staff-position grob
397
+ property. When a rest has a position set we do not want to merge rests at
398
+ that position."
399
+ (every (lambda (rest) (null? (ly:grob-property rest 'staff-position))) rests))
400
+
401
+ (define (merge-mmrests mmrests)
402
+ "Move all multimeasure rests to the single voice location."
403
+ (if (all-equal? mmrests measure-count-eqv?)
404
+ (begin
405
+ (for-each
406
+ (lambda (rest) (ly:grob-set-property! rest 'direction CENTER))
407
+ mmrests)
408
+ (for-each
409
+ (lambda (rest) (ly:grob-set-property! rest 'transparent #t))
410
+ (cdr mmrests)))))
411
+
412
+ (define (merge-rests rests)
413
+ (for-each
414
+ (lambda (rest) (ly:grob-set-property! rest 'staff-position 0))
415
+ rests)
416
+ (for-each
417
+ (lambda (rest) (ly:grob-set-property! rest 'transparent #t))
418
+ (cdr rests)))
419
+
420
+ (let ((mmrests '())
421
+ (rests '())
422
+ (dots '()))
423
+ (make-engraver
424
+ ((start-translation-timestep translator)
425
+ (set! rests '())
426
+ (set! mmrests '())
427
+ (set! dots '()))
428
+ (acknowledgers
429
+ ((dot-column-interface engraver grob source-engraver)
430
+ (if (not (ly:context-property context 'suspendRestMerging #f))
431
+ (set!
432
+ dots
433
+ (append (ly:grob-array->list (ly:grob-object grob 'dots))
434
+ dots))))
435
+ ((rest-interface engraver grob source-engraver)
436
+ (cond
437
+ ((ly:context-property context 'suspendRestMerging #f)
438
+ #f)
439
+ ((grob::has-interface grob 'multi-measure-rest-interface)
440
+ (set! mmrests (cons grob mmrests)))
441
+ (else
442
+ (set! rests (cons grob rests))))))
443
+ ((stop-translation-timestep translator)
444
+ (let (;; get a list of the rests 'duration-lengths, 'duration-log does
445
+ ;; not take dots into account
446
+ (durs
447
+ (map
448
+ (lambda (g)
449
+ (ly:duration-length
450
+ (ly:prob-property
451
+ (ly:grob-property g 'cause)
452
+ 'duration)))
453
+ rests)))
454
+ (if (and
455
+ (has-at-least-two? rests)
456
+ (all-equal? durs equal?)
457
+ (rests-all-unpitched? rests))
458
+ (begin
459
+ (merge-rests rests)
460
+ ;; ly:grob-suicide! works nicely for dots, as opposed to rests.
461
+ (if (pair? dots) (for-each ly:grob-suicide! (cdr dots)))))
462
+ (if (has-at-least-two? mmrests)
463
+ (merge-mmrests mmrests)))))))
464
+
465
+ (ly:register-translator
466
+ Merge_rests_engraver 'Merge_rests_engraver
467
+ '((grobs-created . ())
468
+ (events-accepted . ())
469
+ (properties-read . (suspendRestMerging))
470
+ (properties-written . ())
471
+ (description . "\
472
+ Engraver to merge rests in multiple voices on the same staff. This works by
473
+ gathering all rests at a time step. If they are all of the same length and
474
+ there are at least two they are moved to the correct location as if there were
475
+ one voice.")))
476
+
477
+ (define-public (event-has-articulation? event-type stream-event)
478
+ "Is @var{event-type} in the @code{articulations} list of the music causing
479
+ @var{stream-event}?"
480
+ (if (ly:stream-event? stream-event)
481
+ (any
482
+ (lambda (art)
483
+ (memq event-type (ly:music-property art 'types)))
484
+ (ly:music-property (ly:event-property stream-event 'music-cause)
485
+ 'articulations))
486
+ #f))
487
+
488
+ (define-public (duration-line::calc-thickness grob)
489
+ ;; The visible thickness of DurationLine follows staff space.
490
+ ;; Though, if ly:line-interface::line is used in the stencil, it looks at
491
+ ;; grob.thickness not staff space. Thus we recalculate grob.thickness here.
492
+ (let ((style (ly:grob-property grob 'style))
493
+ (grob-thickness (ly:grob-property grob 'thickness))
494
+ (layout-line-thick (layout-line-thickness grob))
495
+ (staff-space (ly:staff-symbol-staff-space grob))
496
+ (staff-line-thickness
497
+ (ly:staff-symbol-line-thickness grob)))
498
+
499
+ (* staff-space
500
+ (if (eq? style 'beam)
501
+ (* grob-thickness layout-line-thick)
502
+ (* grob-thickness
503
+ (/ layout-line-thick staff-line-thickness))))))
504
+
505
+ (define-public (Duration_line_engraver context)
506
+ (let ((dur-event #f)
507
+ (start-duration-line #f)
508
+ (stop-duration-line #f)
509
+ (current-dur-grobs #f)
510
+ (created '())
511
+ (rhyth-event #f)
512
+ (mmr-event #f)
513
+ (skip #f)
514
+ (tie #f))
515
+ (make-engraver
516
+ (listeners
517
+ ((duration-line-event this-engraver event)
518
+ (set! dur-event event)
519
+ (set! start-duration-line #t))
520
+ ((multi-measure-rest-event this-engraver event)
521
+ (set! mmr-event event))
522
+ ((rhythmic-event this-engraver event)
523
+ (set! rhyth-event (cons (ly:context-current-moment context) event)))
524
+ ((skip-event this-engraver event)
525
+ (set! skip event))
526
+ ((tie-event this-engraver event)
527
+ (set! tie event)))
528
+
529
+ (acknowledgers
530
+ ((multi-measure-rest-interface this-engraver grob source-engraver)
531
+ (if stop-duration-line
532
+ (begin
533
+ (for-each
534
+ (lambda (dur-line)
535
+ ;; TODO rethink:
536
+ ;; For MultiMeasureRest always use to-barline #t
537
+ (ly:grob-set-property! dur-line 'to-barline #t)
538
+ (ly:spanner-set-bound! dur-line RIGHT
539
+ (ly:context-property context 'currentMusicalColumn))
540
+ (ly:engraver-announce-end-grob this-engraver dur-line grob))
541
+ current-dur-grobs)
542
+ (set! stop-duration-line #f)
543
+ (set! current-dur-grobs #f)))
544
+
545
+
546
+ (if (and start-duration-line
547
+ (event-has-articulation? 'duration-line-event mmr-event))
548
+ (begin
549
+ (set! start-duration-line #f)
550
+ (set! stop-duration-line #t)
551
+ (set! current-dur-grobs
552
+ (let ((dur-line
553
+ (ly:engraver-make-grob
554
+ this-engraver
555
+ 'DurationLine
556
+ dur-event)))
557
+ (ly:spanner-set-bound! dur-line LEFT
558
+ (ly:context-property context 'currentMusicalColumn))
559
+ (set! created (cons dur-line created))
560
+ (list dur-line)))
561
+ (set! mmr-event #f)
562
+ (set! dur-event #f))))
563
+ ((note-column-interface this-engraver grob source-engraver)
564
+ (let* ((note-heads-array (ly:grob-object grob 'note-heads))
565
+ (nc-rest (ly:grob-object grob 'rest))
566
+ (note-heads
567
+ (if (ly:grob-array? note-heads-array)
568
+ (ly:grob-array->list note-heads-array)
569
+ '())))
570
+ (cond ;; Don't stop at tied NoteHeads
571
+ ;; TODO make this a context-property?
572
+ ((and (ly:stream-event? tie) stop-duration-line)
573
+ (set! tie #f))
574
+ (stop-duration-line
575
+ (begin
576
+ (for-each
577
+ (lambda (dur-line)
578
+ (ly:spanner-set-bound! dur-line RIGHT grob)
579
+ (ly:engraver-announce-end-grob
580
+ this-engraver dur-line grob))
581
+ current-dur-grobs)
582
+ (set! stop-duration-line #f)
583
+ (set! current-dur-grobs #f))))
584
+
585
+ (if start-duration-line
586
+ (begin
587
+ (set! start-duration-line #f)
588
+ (set! stop-duration-line #t)
589
+ (set! current-dur-grobs
590
+ (cond
591
+ ;; get one DurationLine for entire NoteColumn
592
+ ((ly:context-property context 'startAtNoteColumn #f)
593
+ (let ((dur-line
594
+ (ly:engraver-make-grob
595
+ this-engraver
596
+ 'DurationLine
597
+ dur-event)))
598
+ (ly:spanner-set-bound! dur-line LEFT grob)
599
+ (set! created (cons dur-line created))
600
+ (list dur-line)))
601
+ ;; get DurationLines for every NoteHead
602
+ ((pair? note-heads)
603
+ (map
604
+ (lambda (nhd)
605
+ (let ((dur-line
606
+ (ly:engraver-make-grob
607
+ this-engraver
608
+ 'DurationLine
609
+ dur-event)))
610
+ (ly:spanner-set-bound! dur-line LEFT nhd)
611
+ (set! created (cons dur-line created))
612
+ dur-line))
613
+ note-heads))
614
+ ;; get DurationLine for Rest
615
+ (else
616
+ (let ((dur-line
617
+ (ly:engraver-make-grob
618
+ this-engraver
619
+ 'DurationLine
620
+ dur-event)))
621
+ (ly:spanner-set-bound! dur-line LEFT nc-rest)
622
+ (set! created (cons dur-line created))
623
+ (list dur-line)))))
624
+ (set! dur-event #f))))))
625
+
626
+ ((process-music this-engraver)
627
+ ;; If 'endAtSkip is set #t, DurationLine may end at skips.
628
+ ;; In this case set right bound to PaperColumn
629
+ (if (and (pair? current-dur-grobs)
630
+ (ly:stream-event? skip)
631
+ (ly:context-property context 'endAtSkip #f)
632
+ stop-duration-line)
633
+ (begin
634
+ (for-each
635
+ (lambda (dur-line)
636
+ (if (not (ly:spanner-bound dur-line RIGHT #f))
637
+ (let ((cmc (ly:context-property
638
+ context
639
+ 'currentMusicalColumn)))
640
+ (ly:spanner-set-bound! dur-line RIGHT cmc)
641
+ (ly:engraver-announce-end-grob
642
+ this-engraver dur-line cmc))))
643
+ current-dur-grobs)
644
+ (set! stop-duration-line #f)
645
+ (set! skip #f)
646
+ (set! current-dur-grobs #f)))
647
+ ;; If 'startAtSkip is set #t, DurationLine may start at skips.
648
+ ;; In this case set left bound to PaperColumn .
649
+ ;; We need to care about 'duration-line-event, otherwise we loose the
650
+ ;; ability to ignore skips.
651
+ ;; Thus, only do so if skip has a 'duration-line-event.
652
+ (if (and start-duration-line
653
+ (event-has-articulation? 'duration-line-event skip)
654
+ (ly:context-property context 'startAtSkip #t))
655
+ (begin
656
+ (set! start-duration-line #f)
657
+ (set! stop-duration-line #t)
658
+ (set! current-dur-grobs
659
+ (let ((dur-line
660
+ (ly:engraver-make-grob
661
+ this-engraver
662
+ 'DurationLine
663
+ dur-event)))
664
+ (ly:grob-set-property! dur-line 'to-barline #f)
665
+ (ly:spanner-set-bound! dur-line LEFT
666
+ (ly:context-property context 'currentMusicalColumn))
667
+ (set! created (cons dur-line created))
668
+ (list dur-line)))
669
+ (set! skip #f)
670
+ (set! dur-event #f))))
671
+ ((stop-translation-timestep this-engraver)
672
+ ;; If a context dies or "pauses" (i.e. no rhythmic-event for some time,
673
+ ;; because other contexts are active), set right bound to
674
+ ;; NonMusicalPaperColumn.
675
+ ;; We calculate the end-moment of the rhythmic-event and compare with
676
+ ;; current-moment to get the condition for ending the DurationLine.
677
+ ;; We can't go for (ly:context-property context 'busyGrobs), because
678
+ ;; we then wouldn't know if a skip-event needs to be respected.
679
+ (if rhyth-event
680
+ (let* ((rhyhtmic-evt-start (car rhyth-event))
681
+ (rhyhtmic-evt-length
682
+ (ly:prob-property (cdr rhyth-event) 'length))
683
+ (rhyhtmic-evt-end
684
+ (ly:moment-add rhyhtmic-evt-start rhyhtmic-evt-length))
685
+ (current-moment (ly:context-current-moment context)))
686
+ (if (and (equal? current-moment rhyhtmic-evt-end)
687
+ (pair? current-dur-grobs)
688
+ stop-duration-line)
689
+ (begin
690
+ (for-each
691
+ (lambda (dur-line)
692
+ (if (not (ly:spanner-bound dur-line RIGHT #f))
693
+ (let ((cmc (ly:context-property
694
+ context
695
+ 'currentCommandColumn)))
696
+ (ly:spanner-set-bound! dur-line RIGHT cmc)
697
+ (ly:engraver-announce-end-grob
698
+ this-engraver dur-line cmc))))
699
+ current-dur-grobs)
700
+ (set! stop-duration-line #f)
701
+ (set! current-dur-grobs #f)
702
+ (set! rhyth-event #f))))))
703
+ ((finalize this-engraver)
704
+ ;; All created DurationLines were cumulated in `created'.
705
+ ;; Their 'thickness needs to be adjusted to follow staff space, not staff
706
+ ;; symbol thickness, which ly:line-interface::line does.
707
+ ;; We do it here to avoid multiple resetting DurationLine.thickness for
708
+ ;; broken ones. Furthermore 'staff-symbol is not always available at
709
+ ;; earlier steps.
710
+ (for-each
711
+ (lambda (dur-line)
712
+ (ly:grob-set-property! dur-line 'thickness
713
+ (duration-line::calc-thickness dur-line)))
714
+ created)
715
+ ;; likely unneeded, better be paranoid
716
+ (if (pair? current-dur-grobs)
717
+ (begin
718
+ (for-each
719
+ (lambda (dur-line)
720
+ (ly:warning (G_ "unterminated DurationLine"))
721
+ (ly:grob-suicide! dur-line))
722
+ current-dur-grobs)
723
+ (set! current-dur-grobs #f)
724
+ (set! stop-duration-line #f)))
725
+
726
+ ;; house-keeping
727
+ (set! created '())
728
+ (set! rhyth-event #f)
729
+ (set! skip #f)
730
+ (set! mmr-event #f)))))
731
+
732
+ (ly:register-translator
733
+ Duration_line_engraver 'Duration_line_engraver
734
+ '((grobs-created . (DurationLine))
735
+ (events-accepted . (duration-line-event))
736
+ (properties-read . (currentCommandColumn
737
+ currentMusicalColumn
738
+ startAtSkip
739
+ endAtSkip
740
+ startAtNoteColumn
741
+ ))
742
+ (properties-written . ())
743
+ (description . "\
744
+ Engraver to print a line representing the duration of a rhythmic event like
745
+ @code{NoteHead}, @code{NoteColumn} or @code{Rest}.")))
746
+
747
+
748
+ (define-public Bend_spanner_engraver
749
+ ;; Creates a BendSpanner, sets its bounds, keeps track and sets
750
+ ;; details.successive-level in order to nest consecutive bends accordingly.
751
+ ;;
752
+ ;; Sets the property 'bend-me to decide which strings should be bent.
753
+ ;; Per default open strings should not be bent unless the user forces it.
754
+ ;; To know which note will be done on open strings we need to know the result
755
+ ;; of the 'noteToFretFunction'.
756
+ ;; User-specified StringNumbers are respected.
757
+ ;; Fingerings are not needed for setting 'bend-me, thus we disregard them.
758
+ (lambda (context)
759
+ (let ((bend-spanner #f)
760
+ (bend-start #f)
761
+ (bend-stop #f)
762
+ (previous-bend-dir #f)
763
+ (nc-start #f)
764
+ (successive-lvl #f)
765
+ (tab-note-heads '()))
766
+ (make-engraver
767
+ ((initialize this-engraver)
768
+ ;; Set 'supportNonIntegerFret #t, if unspecified
769
+ (ly:context-set-property! context 'supportNonIntegerFret
770
+ (ly:context-property context 'supportNonIntegerFret #t)))
771
+ ((start-translation-timestep trans)
772
+ ;; Clear 'tab-note-heads' in order not to confuse 'excluding notes
773
+ ;; further below
774
+ (set! tab-note-heads '())
775
+ ;; Set 'bend-spanner' left-bound
776
+ ;; We do it in start-translation-timestep, because here we have access
777
+ ;; to the 'style-property
778
+ (if (and bend-spanner nc-start)
779
+ (begin
780
+ (ly:spanner-set-bound! bend-spanner LEFT nc-start)
781
+ ;; For consecutive BendSpanners, i.e. 'previous-bend-dir' is
782
+ ;; not #f, in/decrease details.successive-level with
783
+ ;;'previous-bend-dir' unless 'bend-style' is 'hold
784
+ (if (and previous-bend-dir successive-lvl)
785
+ (let* ((hold-style?
786
+ (eq? (ly:grob-property bend-spanner 'style) 'hold))
787
+ (increase-lvl
788
+ (if hold-style? 0 previous-bend-dir)))
789
+ (ly:grob-set-nested-property!
790
+ bend-spanner
791
+ '(details successive-level)
792
+ (+ successive-lvl increase-lvl))
793
+ (set! nc-start #f))))))
794
+ (listeners
795
+ ((bend-span-event this-engraver event)
796
+ (set! bend-start event)))
797
+ (acknowledgers
798
+ ((note-column-interface this-engraver grob source-engraver)
799
+ ;; Set the 'bend-me property for notes to be played on open strings
800
+ ;; Per default it will be set #f
801
+ ;; Relies on context-property stringFretFingerList.
802
+ ;;
803
+ ;; Needs to be done here in acknowledgers for note-column-interface,
804
+ ;; otherwise the calculation of bend-dir (relying only on notes
805
+ ;; actually prepares for bending, i.e. 'bend-me should not be #f)
806
+ ;; may cause wrong results.
807
+ (for-each
808
+ (lambda (tnh strg-frt-fngr)
809
+ (if (eq? 0 (cadr strg-frt-fngr))
810
+ (ly:grob-set-property! tnh 'bend-me
811
+ (ly:grob-property tnh 'bend-me #f))))
812
+ (reverse tab-note-heads)
813
+ (ly:context-property context 'stringFretFingerList))
814
+
815
+ ;;;;
816
+ ;; End the bend-spanner, if found NoteColumn is suitable
817
+ ;;;;
818
+ (if (and bend-stop
819
+ (ly:spanner? bend-spanner)
820
+ (ly:grob-property grob 'bend-me #t)
821
+ (not (ly:spanner-bound bend-spanner RIGHT #f)))
822
+ (let* ((nhds-array (ly:grob-object grob 'note-heads))
823
+ (nhds
824
+ (if (ly:grob-array? nhds-array)
825
+ (ly:grob-array->list nhds-array)
826
+ #f))
827
+ (style (ly:grob-property bend-spanner 'style 'default))
828
+ (boundable?
829
+ (and nhds
830
+ (or
831
+ (eq? style 'pre-bend)
832
+ (ly:grob-property grob 'bend-me #t)))))
833
+ (if boundable?
834
+ (begin
835
+ (ly:spanner-set-bound! bend-spanner RIGHT grob)
836
+ (set! bend-stop #f)
837
+ ;; Keep track of 'successive-level, to place
838
+ ;; consecutive BendSpanners nicely and
839
+ ;; in/decrease with 'previous-bend-dir'
840
+ (let* ((details
841
+ (ly:grob-property bend-spanner 'details))
842
+ (successive-level
843
+ (assoc-get 'successive-level details))
844
+ (span-bound-pitches
845
+ (bounding-note-heads-pitches bend-spanner)))
846
+ (if (and (pair? (car span-bound-pitches))
847
+ (pair? (cdr span-bound-pitches)))
848
+ (let* ((quarter-diffs
849
+ (get-quarter-diffs span-bound-pitches))
850
+ (current-bend-dir
851
+ (if (negative? quarter-diffs) DOWN UP))
852
+ (consecutive-bend?
853
+ (and previous-bend-dir
854
+ (not (eqv? previous-bend-dir
855
+ current-bend-dir)))))
856
+ (set! successive-lvl successive-level)
857
+ (if consecutive-bend?
858
+ (begin
859
+ (ly:grob-set-nested-property!
860
+ bend-spanner
861
+ '(details successive-level)
862
+ (+ successive-lvl current-bend-dir))
863
+ (set! successive-lvl
864
+ (+ successive-lvl
865
+ current-bend-dir))))
866
+ (set! previous-bend-dir current-bend-dir)
867
+ (set! bend-spanner #f))
868
+ (begin
869
+ (ly:warning (G_ "No notes found to start from,
870
+ ignoring. If you want to bend an open string, consider to override/tweak the
871
+ 'bend-me property."))
872
+ (ly:grob-suicide! bend-spanner)))))
873
+
874
+ (begin
875
+ (set! successive-lvl #f)
876
+ (set! previous-bend-dir #f)))))
877
+
878
+ ;;;;
879
+ ;; Create the bend-spanner grob, if found NoteColumn is suitable
880
+ ;;;;
881
+ (if (and (ly:stream-event? bend-start)
882
+ (ly:grob-array? (ly:grob-object grob 'note-heads)))
883
+ (let* ((bend-grob
884
+ (ly:engraver-make-grob
885
+ this-engraver 'BendSpanner bend-start)))
886
+ (set! bend-spanner bend-grob)
887
+ (set! nc-start grob)
888
+ (set! bend-start #f)
889
+ (set! bend-stop #t))))
890
+ ((tab-note-head-interface this-engraver grob source-engraver)
891
+ (set! tab-note-heads (cons grob tab-note-heads))))
892
+ ((stop-translation-timestep this-engraver)
893
+ (ly:context-set-property! context 'stringFretFingerList '())
894
+ ;; Clear some local variables if no bend-spanner is in work
895
+ (if (and (not bend-start) (not bend-stop))
896
+ (begin
897
+ (set! previous-bend-dir #f)
898
+ (set! successive-lvl #f))))
899
+ ((finalize this-engraver)
900
+ ;; final house-keeping
901
+ (if bend-spanner
902
+ (begin
903
+ (ly:warning (G_ "Unbound BendSpanner, ignoring"))
904
+ (ly:grob-suicide! bend-spanner)
905
+ (ly:context-set-property! context 'stringFretFingerList '())
906
+ (set! bend-spanner #f)
907
+ (set! bend-stop #f)
908
+ (set! previous-bend-dir #f)
909
+ (set! successive-lvl #f))))))))
910
+
911
+ (ly:register-translator
912
+ Bend_spanner_engraver 'Bend_spanner_engraver
913
+ '((grobs-created . (BendSpanner))
914
+ (events-accepted . (bend-span-event
915
+ note-event
916
+ string-number-event))
917
+ (properties-read . (stringFretFingerList
918
+ supportNonIntegerFret))
919
+ (properties-written . (stringFretFingerList
920
+ supportNonIntegerFret))
921
+ (description . "\
922
+ Engraver to print a BendSpanner.")))
923
+
924
+ (define-public Finger_glide_engraver
925
+ (lambda (context)
926
+ (let ((digit-glide-event '())
927
+ (glide-grobs '())
928
+ (glide-tweaks '()))
929
+ (make-engraver
930
+ (listeners
931
+ ((note-event this-engraver event)
932
+ (let* ((music-cause (ly:event-property event 'music-cause))
933
+ (arts (ly:prob-property music-cause 'articulations))
934
+ (digit #f)
935
+ (tweaks #f)
936
+ (glide #f))
937
+ ;; Find 'FingeringEvent and catch its 'digit.
938
+ ;; Find 'FingerGlideEvent and catch its 'tweaks.
939
+ (for-each
940
+ (lambda (art)
941
+ (let* ((name (ly:prob-property art 'name)))
942
+ (cond ((eq? name 'FingeringEvent)
943
+ (set! digit (ly:prob-property art 'digit #f)))
944
+ ((eq? name 'FingerGlideEvent)
945
+ (set! tweaks (ly:prob-property art 'tweaks))
946
+ (set! glide #t)))))
947
+ arts)
948
+ ;; Store found tweaks in local `glide-tweaks` with digit as key.
949
+ ;; This is needed in order not to confuse grobs and their tweaks,
950
+ ;; if this engraver is consisted in Staff context.
951
+ (if (pair? tweaks)
952
+ (set! glide-tweaks (cons (cons digit tweaks) glide-tweaks)))
953
+ ;; Update local `digit-glide-event`, creating an alist with digit
954
+ ;; being the key
955
+ ;; - if glide is true, create a new entry in `digit-glide-event`
956
+ ;; as (list digit glide event)
957
+ ;; - if glide is false, set the value for the key to ##f
958
+ (cond ((and digit glide)
959
+ (set! digit-glide-event
960
+ (cons (list digit glide event) digit-glide-event)))
961
+ ((and glide (not digit))
962
+ (ly:warning
963
+ "No finger found to start a glide, ignoring."))
964
+ ((and digit (not glide))
965
+ (set! digit-glide-event
966
+ (assoc-set! digit-glide-event digit glide)))))))
967
+ (acknowledgers
968
+ ((finger-interface this-engraver grob source-engraver)
969
+ (let* ((cause (ly:grob-property grob 'cause))
970
+ (digit (ly:prob-property cause 'digit))
971
+ (digit-glide-evt (assoc-get digit digit-glide-event))
972
+ (new-glide-grob
973
+ (if digit-glide-evt
974
+ (ly:engraver-make-grob
975
+ this-engraver
976
+ 'FingerGlideSpanner
977
+ (last digit-glide-evt))
978
+ #f))
979
+ (tweaks (assoc-get digit glide-tweaks '())))
980
+ ;; Respect user tweaks
981
+ (if (ly:grob? new-glide-grob)
982
+ (for-each
983
+ (lambda (tweak)
984
+ (if (pair? (car tweak))
985
+ (let* ((key (cdar tweak)))
986
+ (ly:grob-set-nested-property!
987
+ new-glide-grob key (cdr tweak)))
988
+ (ly:grob-set-property!
989
+ new-glide-grob (car tweak) (cdr tweak))))
990
+ tweaks))
991
+ ;; Update local `glide-tweaks`, setting the already done tweaks
992
+ ;; to an empty list for current digit
993
+ (set! glide-tweaks
994
+ (assoc-set! glide-tweaks digit '()))
995
+ ;; Set right bound, select the grob via its digit from
996
+ ;; `glide-grobs`
997
+ (let* ((relevant-grob (assoc-get digit glide-grobs)))
998
+ (cond ((and digit-glide-evt relevant-grob)
999
+ (ly:spanner-set-bound! relevant-grob RIGHT grob))
1000
+ ((and (not digit-glide-evt) relevant-grob)
1001
+ (begin
1002
+ (ly:spanner-set-bound! relevant-grob RIGHT grob)
1003
+ (ly:engraver-announce-end-grob
1004
+ this-engraver
1005
+ relevant-grob
1006
+ grob)
1007
+ (set! glide-grobs
1008
+ (assoc-set! glide-grobs digit #f))))))
1009
+ ;; Set left bound and store the digit with the created grob as a
1010
+ ;; pair in local `glide-grobs`
1011
+ (if new-glide-grob
1012
+ (begin
1013
+ (set! glide-grobs
1014
+ (cons
1015
+ (cons digit new-glide-grob)
1016
+ glide-grobs))
1017
+ (ly:spanner-set-bound! new-glide-grob LEFT grob))))))
1018
+ ((finalize this-engraver)
1019
+ ;; Warn for a created grob without right bound, suicide the grob.
1020
+ (for-each
1021
+ (lambda (grob-entry)
1022
+ (if (and
1023
+ (ly:grob? (cdr grob-entry))
1024
+ (not (ly:spanner-bound (cdr grob-entry) RIGHT #f)))
1025
+ (begin
1026
+ (ly:warning
1027
+ "Missing target for ~a starting with finger ~a"
1028
+ (cdr grob-entry)
1029
+ (car grob-entry))
1030
+ (ly:grob-suicide! (cdr grob-entry)))))
1031
+ glide-grobs)
1032
+ ;; House keeping
1033
+ (set! glide-grobs '())
1034
+ (set! glide-tweaks '())
1035
+ (set! digit-glide-event '()))))))
1036
+
1037
+ (ly:register-translator
1038
+ Finger_glide_engraver 'Finger_glide_engraver
1039
+ '((grobs-created . (FingerGlideSpanner))
1040
+ (events-accepted . (note-event))
1041
+ (properties-read . ())
1042
+ (properties-written . ())
1043
+ (description . "\
1044
+ Engraver to print a line between two @code{Fingering} grobs.")))
1045
+
1046
+ (define (Lyric_repeat_count_engraver context)
1047
+ (let ((end-event '()))
1048
+ (make-engraver
1049
+ (listeners
1050
+ ((volta-repeat-end-event engraver event #:once)
1051
+ (let ((count (ly:event-property event 'repeat-count 0)))
1052
+ (if (positive? count)
1053
+ (set! end-event event)))))
1054
+
1055
+ ((process-music engraver)
1056
+ (if (ly:stream-event? end-event)
1057
+ (let* ((count (ly:event-property end-event 'repeat-count))
1058
+ (formatter (ly:context-property
1059
+ context 'lyricRepeatCountFormatter))
1060
+ (text (and (procedure? formatter) (formatter context count))))
1061
+ (if (markup? text)
1062
+ (let ((grob (ly:engraver-make-grob
1063
+ engraver 'LyricRepeatCount end-event)))
1064
+ (ly:grob-set-property! grob 'text text))))))
1065
+
1066
+ ((stop-translation-timestep engraver)
1067
+ (set! end-event '())))))
1068
+
1069
+ (ly:register-translator
1070
+ Lyric_repeat_count_engraver 'Lyric_repeat_count_engraver
1071
+ '((grobs-created . (LyricRepeatCount))
1072
+ (events-accepted . (volta-repeat-end-event))
1073
+ (properties-read . (lyricRepeatCountFormatter))
1074
+ (properties-written . ())
1075
+ (description . "Create repeat counts within lyrics for modern
1076
+ transcriptions of Gregorian chant.")))
1077
+
1078
+ ;; TODO: yet another engraver for alignment... Ultimately, it would be nice to
1079
+ ;; merge Dynamic_align_engraver, Piano_pedal_align_engraver and
1080
+ ;; Centered_bar_number_align_engraver.
1081
+ (define-public (Centered_bar_number_align_engraver context)
1082
+ (let ((support-line #f))
1083
+ (make-engraver
1084
+ (acknowledgers
1085
+ ((centered-bar-number-interface engraver grob source-engraver)
1086
+ ;; Create the support spanner on the fly when we meet a first
1087
+ ;; centered bar number, to avoid an extra grob in the most
1088
+ ;; common case.
1089
+ (if (not support-line)
1090
+ (begin
1091
+ (set! support-line
1092
+ (ly:engraver-make-grob engraver
1093
+ 'CenteredBarNumberLineSpanner
1094
+ '()))
1095
+ (ly:spanner-set-bound!
1096
+ support-line
1097
+ LEFT
1098
+ (ly:context-property context 'currentCommandColumn))))
1099
+ (ly:axis-group-interface::add-element support-line grob)))
1100
+ ((finalize engraver)
1101
+ (if support-line
1102
+ (ly:spanner-set-bound!
1103
+ support-line
1104
+ RIGHT
1105
+ (ly:context-property context 'currentCommandColumn)))))))
1106
+
1107
+ (ly:register-translator
1108
+ Centered_bar_number_align_engraver 'Centered_bar_number_align_engraver
1109
+ '((grobs-created . (CenteredBarNumberLineSpanner))
1110
+ (events-accepted . ())
1111
+ (properties-read . (currentCommandColumn))
1112
+ (properties-written . ())
1113
+ (description . "Group measure-centered bar numbers in a
1114
+ @code{CenteredBarNumberLineSpanner} so they end up on the same
1115
+ vertical position.")))
1116
+
1117
+ (define (Alteration_glyph_engraver context)
1118
+ (make-engraver
1119
+ (acknowledgers
1120
+ ((accidental-switch-interface engraver grob source-engraver)
1121
+ (let ((alteration-glyphs
1122
+ (ly:context-property context 'alterationGlyphs)))
1123
+ (if alteration-glyphs
1124
+ (ly:grob-set-property! grob
1125
+ 'alteration-glyph-name-alist
1126
+ alteration-glyphs)))))))
1127
+
1128
+ (ly:register-translator
1129
+ Alteration_glyph_engraver 'Alteration_glyph_engraver
1130
+ '((grobs-created . ())
1131
+ (events-accepted . ())
1132
+ (properties-read . (alterationGlyphs))
1133
+ (properties-written . ())
1134
+ (description . "Set the @code{glyph-name-alist} of all grobs having the
1135
+ @code{accidental-switch-interface} to the value of the context's
1136
+ @code{alterationGlyphs} property, when defined.")))
1137
+
1138
+ (define (Signum_repetitionis_engraver context)
1139
+ (let ((end-event '()))
1140
+ (make-engraver
1141
+ (listeners
1142
+ ((volta-repeat-end-event engraver event #:once)
1143
+ (set! end-event event)))
1144
+
1145
+ ((process-music engraver)
1146
+ (if (ly:stream-event? end-event)
1147
+ (if (= 0 (ly:event-property end-event 'alternative-number 0))
1148
+ ;; Simple repeat: Indicate the repeat count with 1 to 4
1149
+ ;; strokes. (Thanks to Dr. Ross W. Duffin for
1150
+ ;; explaining this in his Notation Manual at
1151
+ ;; https://casfaculty.case.edu/ross-duffin/.)
1152
+ (let ((n (ly:event-property end-event 'repeat-count 0)))
1153
+ (if (positive? n)
1154
+ (let ((grob (ly:engraver-make-grob
1155
+ engraver 'SignumRepetitionis end-event))
1156
+ (glyph (case n
1157
+ ((1) ":,:")
1158
+ ((2) ":,,:")
1159
+ ((3) ":,,,:")
1160
+ ((4) ":,,,,:")
1161
+ (else #f))))
1162
+ (if (string? glyph)
1163
+ (ly:grob-set-property! grob 'glyph glyph)))))
1164
+ ;; Alternative ending: This is not a use case for this
1165
+ ;; ancient notation. Just create a grob with the
1166
+ ;; default glyph if there is a return.
1167
+ (let ((n (ly:event-property end-event 'return-count 0)))
1168
+ (if (positive? n)
1169
+ (ly:engraver-make-grob
1170
+ engraver 'SignumRepetitionis end-event))))))
1171
+
1172
+ ((stop-translation-timestep engraver)
1173
+ (set! end-event '())))))
1174
+
1175
+ (ly:register-translator
1176
+ Signum_repetitionis_engraver 'Signum_repetitionis_engraver
1177
+ '((grobs-created . (SignumRepetitionis))
1178
+ (events-accepted . (volta-repeat-end-event))
1179
+ (properties-read . ())
1180
+ (properties-written . ())
1181
+ (description . "Create a @code{SignumRepetitionis} at the end of
1182
+ a @code{\\repeat volta} section.")))
1183
+
1184
+ (define (Spanner_tracking_engraver context)
1185
+ ;; Naming note: "spanner" is the grob we take care of
1186
+ ;; (e.g., a footnote) and "host" is the grob that
1187
+ ;; "spanner" is attached to (e.g., the annotated grob).
1188
+ (let (
1189
+ ;; Map host spanners to lists of (spanner . source-engraver)
1190
+ ;; pairs. We keep the source-engraver so we can announce the end
1191
+ ;; from it rather than from this engraver.
1192
+ (table (make-hash-table)))
1193
+ (make-engraver
1194
+ (acknowledgers
1195
+ ((sticky-grob-interface engraver grob source-engraver)
1196
+ (if (ly:spanner? grob)
1197
+ (let ((host (ly:grob-object grob 'sticky-host)))
1198
+ (hashq-set! table
1199
+ host
1200
+ (cons (cons grob source-engraver)
1201
+ (hashq-ref table host '())))))))
1202
+ (end-acknowledgers
1203
+ ((spanner-interface engraver host source-engraver)
1204
+ (let ((spanners (hashq-ref table host)))
1205
+ (if spanners
1206
+ (begin
1207
+ (for-each
1208
+ (lambda (spanner-engraver-pair)
1209
+ (let ((spanner (car spanner-engraver-pair))
1210
+ (source-engraver (cdr spanner-engraver-pair)))
1211
+ (ly:engraver-announce-end-grob source-engraver spanner host)))
1212
+ spanners)
1213
+ (hashq-remove! table host)))))))))
1214
+
1215
+ (ly:register-translator
1216
+ Spanner_tracking_engraver 'Spanner_tracking_engraver
1217
+ '((grobs-created . ())
1218
+ (events-accepted . ())
1219
+ (properties-read . ())
1220
+ (properties-written . ())
1221
+ (description . "Helper for creating spanners attached to other spanners.
1222
+ If a spanner has the @code{sticky-grob-interface}, the engraver tracks the
1223
+ spanner contained in its @code{sticky-host} object. When the host ends,
1224
+ the sticky spanner attached to it has its end announced too.")))
1225
+
1226
+ (define (Skip_typesetting_engraver context)
1227
+ (let ((was-skipping? #f))
1228
+ (make-engraver
1229
+
1230
+ ((process-music engraver)
1231
+ (if was-skipping?
1232
+ (ly:engraver-make-grob engraver 'StaffEllipsis '())))
1233
+
1234
+ ((stop-translation-timestep engraver)
1235
+ (set! was-skipping? (ly:context-property context 'skipTypesetting #f))))))
1236
+
1237
+ (ly:register-translator
1238
+ Skip_typesetting_engraver 'Skip_typesetting_engraver
1239
+ '((grobs-created . (StaffEllipsis))
1240
+ (events-accepted . ())
1241
+ (properties-read . (skipTypesetting))
1242
+ (properties-written . ())
1243
+ (description . "Create a @code{StaffEllipsis} when
1244
+ @code{skipTypesetting} is used.")))
1245
+
1246
+ (define (Show_control_points_engraver context)
1247
+ ;; The usual ties and slurs are spanners, but semi-ties
1248
+ ;; (laissez vibrer and repeat ties) are items. We create
1249
+ ;; grobs of either class accordingly, with ly:engraver-make-sticky.
1250
+ (let ((beziers-found '()))
1251
+ (make-engraver
1252
+ (acknowledgers
1253
+ ;; Keep the origin engraver of each Bézier so as to
1254
+ ;; create the control points from it. Rationale:
1255
+ ;; the engraver is in Score because otherwise its
1256
+ ;; process-acknowledged slot could be called before
1257
+ ;; the Tweak_engraver has had a chance to set
1258
+ ;; the show-control-points property. Having it
1259
+ ;; in Score also makes \vshape work everywhere including
1260
+ ;; in custom context types where (for instance) the
1261
+ ;; Slur_engraver is consisted. Creating the control
1262
+ ;; points from the origin engraver allows overrides
1263
+ ;; to be directed to the same context as slurs, and
1264
+ ;; could be useful for a custom engraver acknowledging
1265
+ ;; the control points.
1266
+ ((bezier-curve-interface engraver bezier source-engraver)
1267
+ (set! beziers-found
1268
+ (cons (cons bezier source-engraver)
1269
+ beziers-found))))
1270
+ ((process-acknowledged engraver)
1271
+ (for-each
1272
+ (lambda (bezier-engraver-pair)
1273
+ (let ((bezier (car bezier-engraver-pair))
1274
+ (source-engraver (cdr bezier-engraver-pair)))
1275
+ (if (ly:grob-property bezier 'show-control-points #f)
1276
+ (begin
1277
+ ; Create control polygon.
1278
+ (let ((polygon
1279
+ (ly:engraver-make-sticky source-engraver
1280
+ 'ControlPolygon
1281
+ bezier
1282
+ bezier)))
1283
+ (ly:grob-set-object! polygon 'bezier bezier))
1284
+ ; Create four control points.
1285
+ (for-each
1286
+ (lambda (i)
1287
+ (let ((point
1288
+ (ly:engraver-make-sticky source-engraver
1289
+ 'ControlPoint
1290
+ bezier
1291
+ bezier)))
1292
+ (ly:grob-set-property! point 'index i)
1293
+ (ly:grob-set-object! point 'bezier bezier)))
1294
+ (iota 4))))))
1295
+ beziers-found)
1296
+ (set! beziers-found '())))))
1297
+
1298
+ (ly:register-translator
1299
+ Show_control_points_engraver 'Show_control_points_engraver
1300
+ '((grobs-created . (ControlPoint ControlPolygon))
1301
+ (events-accepted . ())
1302
+ (properties-read . ())
1303
+ (properties-written . ())
1304
+ (description . "Create grobs to visualize control points of Bézier
1305
+ curves (ties and slurs) for ease of tweaking.")))
1306
+
1307
+
1308
+ (define (Current_chord_text_engraver context)
1309
+ (let ((note-events '())
1310
+ (rest-event #f))
1311
+ (make-engraver
1312
+ (listeners
1313
+ ((note-event engraver event)
1314
+ (set! note-events (cons event note-events)))
1315
+ ((general-rest-event engraver event #:once)
1316
+ (set! rest-event event)))
1317
+ ((pre-process-music engraver)
1318
+ (cond
1319
+ (rest-event
1320
+ (ly:context-set-property! context 'currentChordCause rest-event)
1321
+ (let ((symbol (ly:context-property context 'noChordSymbol)))
1322
+ (ly:context-set-property! context 'currentChordText symbol)))
1323
+ ((pair? note-events)
1324
+ (ly:context-set-property! context 'currentChordCause (car note-events))
1325
+ (let ((pitches '())
1326
+ (bass '())
1327
+ (inversion '()))
1328
+ (for-each
1329
+ (lambda (note-ev)
1330
+ (let ((pitch (ly:event-property note-ev 'pitch)))
1331
+ (when (ly:pitch? pitch)
1332
+ (let ((is-bass (ly:event-property note-ev 'bass #f))
1333
+ (is-inversion (ly:event-property note-ev 'inversion #f)))
1334
+ (if is-bass
1335
+ (set! bass pitch)
1336
+ (let* ((oct (ly:event-property note-ev 'octavation))
1337
+ (orig
1338
+ (if (integer? oct)
1339
+ (let ((transp (ly:make-pitch (- oct)
1340
+ 0)))
1341
+ (ly:pitch-transpose pitch transp))
1342
+ pitch)))
1343
+ (set! pitches (cons orig pitches))
1344
+ (when is-inversion
1345
+ (set! inversion pitch)
1346
+ (when (not (integer? oct))
1347
+ (ly:programming-error
1348
+ "inversion does not have original pitch")))))))))
1349
+ note-events)
1350
+ (let* ((sorted-pitches (sort pitches ly:pitch<?))
1351
+ (formatter (ly:context-property context 'chordNameFunction))
1352
+ (markup (formatter sorted-pitches bass inversion context)))
1353
+ (ly:context-set-property! context 'currentChordText markup))))
1354
+ (else
1355
+ (ly:context-set-property! context 'currentChordCause #f)
1356
+ (ly:context-set-property! context 'currentChordText #f))))
1357
+ ((stop-translation-timestep engraver)
1358
+ (set! note-events '())
1359
+ (set! rest-event #f)))))
1360
+
1361
+ (ly:register-translator
1362
+ Current_chord_text_engraver 'Current_chord_text_engraver
1363
+ '((events-accepted . (note-event general-rest-event))
1364
+ (properties-read . (chordNameExceptions
1365
+ chordNameFunction
1366
+ chordRootNamer
1367
+ chordNoteNamer
1368
+ majorSevenSymbol
1369
+ noChordSymbol))
1370
+ (properties-written . (currentChordCause currentChordText))
1371
+ (description . "Catch note and rest events and generate the
1372
+ appropriate chord text using @code{chordNameFunction}. Actually
1373
+ creating a chord name grob is left to other engravers.")))
1374
+
1375
+
1376
+ (define (Chord_name_engraver context)
1377
+ (make-engraver
1378
+ ((process-music engraver)
1379
+ (let ((text (ly:context-property context 'currentChordText #f)))
1380
+ ;; Note that user tweaks to ChordName.text are respected.
1381
+ ;; However, this is only possible if the default logic would
1382
+ ;; have given some text. Indeed, we cannot create a ChordName
1383
+ ;; and look at its text property to decide that we shouldn't
1384
+ ;; have created the grob because the property is '(). Practically,
1385
+ ;; this means you can't \override ChordName.text to get a ChordName
1386
+ ;; if noChordSymbol is '().
1387
+ (when (markup? text)
1388
+ (let* ((cause (ly:context-property context 'currentChordCause))
1389
+ (grob (ly:engraver-make-grob engraver 'ChordName cause))
1390
+ ;; Fetching ChordName.text in case it's a callback can't
1391
+ ;; be delayed anyway: it needs to be compared for the sake
1392
+ ;; of chordChanges.
1393
+ (grob-text (ly:grob-property grob 'text #f))
1394
+ (final-text (or grob-text text))
1395
+ (chord-changes (ly:context-property context 'chordChanges #f)))
1396
+ (ly:grob-set-property! grob 'text final-text)
1397
+ (when (and chord-changes
1398
+ (equal? final-text (ly:context-property context 'lastChord)))
1399
+ ;; FIXME: begin-of-line-visible is misnamed. Setting it to #t
1400
+ ;; doesn't make the grob more visible, but less: it means to
1401
+ ;; suppress the chord name unless it's at the beginning of a line.
1402
+ (ly:grob-set-property! grob 'begin-of-line-visible #t))
1403
+ (ly:context-set-property! context 'lastChord final-text)))))))
1404
+
1405
+ (ly:register-translator
1406
+ Chord_name_engraver 'Chord_name_engraver
1407
+ '((events-accepted . ())
1408
+ (grobs-created . (ChordName))
1409
+ (properties-read . (currentChordCause currentChordText chordChanges lastChord))
1410
+ (properties-written . (lastChord))
1411
+ (description . "Read @code{currentChordText} to create chord names.")))
1412
+
1413
+
1414
+ (define (Grid_chord_name_engraver context)
1415
+ (let (;; Maintained as the left bound for newly created GridChordName grobs.
1416
+ ;; This is the currentCommandColumn at the start of the piece, and the
1417
+ ;; latest BarLine afterwards.
1418
+ (left-bound #f)
1419
+ ;; Was a bar line found in this time step? Reset after each
1420
+ ;; timestep, unlike left-bound.
1421
+ (bar-found #f)
1422
+ ;; GridChordName being created.
1423
+ (chord-name #f)
1424
+ ;; All grid chord names from the current measure, to be ended at the
1425
+ ;; next bar line.
1426
+ (accumulated-chord-names '()))
1427
+ (make-engraver
1428
+ ((process-music engraver)
1429
+ (when (not left-bound) ; first timestep
1430
+ (set! left-bound (ly:context-property context 'currentCommandColumn)))
1431
+ (let ((text (ly:context-property context 'currentChordText #f)))
1432
+ (when text
1433
+ (let ((cause (ly:context-property context 'currentChordCause)))
1434
+ (set! chord-name (ly:engraver-make-grob engraver 'GridChordName cause))
1435
+ ;; This logic is similar to Chord_name_engraver.
1436
+ (let* ((grob-text (ly:grob-property chord-name 'text #f))
1437
+ (final-text (or grob-text text)))
1438
+ (ly:grob-set-property! chord-name 'text final-text))))))
1439
+ (acknowledgers
1440
+ ((bar-line-interface engraver grob source-engraver)
1441
+ (set! left-bound grob)
1442
+ (set! bar-found grob)))
1443
+ ((stop-translation-timestep engraver)
1444
+ (when bar-found
1445
+ (for-each
1446
+ (lambda (c)
1447
+ (ly:spanner-set-bound! c RIGHT bar-found))
1448
+ accumulated-chord-names)
1449
+ (set! accumulated-chord-names '())
1450
+ (set! bar-found #f))
1451
+ (when chord-name
1452
+ (ly:spanner-set-bound! chord-name LEFT left-bound)
1453
+ (set! accumulated-chord-names (cons chord-name accumulated-chord-names))
1454
+ (set! chord-name #f)))
1455
+ ((finalize engraver)
1456
+ ;; Maybe the piece ended without a bar line.
1457
+ (let ((column (ly:context-property context 'currentCommandColumn)))
1458
+ (for-each
1459
+ (lambda (c)
1460
+ (ly:spanner-set-bound! c RIGHT column))
1461
+ accumulated-chord-names))))))
1462
+
1463
+ (ly:register-translator
1464
+ Grid_chord_name_engraver 'Grid_chord_name_engraver
1465
+ '((grobs-created . (GridChordName))
1466
+ (events-accepted . ())
1467
+ (properties-read . (currentChordText currentChordCause currentCommandColumn))
1468
+ (properties-written . ())
1469
+ (description . "Read @code{currentChordText} to create chord names
1470
+ adapted for typesetting within a chord grid.")))
1471
+
1472
+
1473
+ (define (Chord_square_engraver context)
1474
+ (let (;; Current ChordSquare grob.
1475
+ (square #f)
1476
+ ;; List of moments at which the measure is split (triggered by chords or
1477
+ ;; rests or skips). Used to determine measure-division property.
1478
+ (moms '())
1479
+ ;; Whether this is the first timestep.
1480
+ (first-timestep #t)
1481
+ ;; Chord name found. Expect only one chord name per time step.
1482
+ (chord-name #f)
1483
+ ;; Whether we are in a skip.
1484
+ (in-skip #f)
1485
+ ;; Moment at which the latest chord stops playing.
1486
+ (chord-end-mom (ly:make-moment -inf.0))
1487
+ ;; Whether the ChordSquare was created at this timestep.
1488
+ (new-square-created #f)
1489
+ ;; Index for the next chord name we will find. Reset after terminating
1490
+ ;; a ChordSquare.
1491
+ (index 0))
1492
+ (define (set-square-measure-division!)
1493
+ (let* ((now-mom (ly:context-current-moment context))
1494
+ (extended-moms (cons now-mom moms))
1495
+ (mom-deltas (let loop ((remaining extended-moms)
1496
+ (acc '()))
1497
+ (match remaining
1498
+ ((_)
1499
+ acc)
1500
+ ((m1 m2 . rest)
1501
+ (loop (cons m2 rest)
1502
+ (cons (ly:moment-sub m1 m2)
1503
+ acc))))))
1504
+ (total-span (ly:moment-sub now-mom (last extended-moms)))
1505
+ (fracs (map (lambda (delta)
1506
+ ;; Don't care about grace chord names.
1507
+ (ly:moment-main (ly:moment-div delta total-span)))
1508
+ mom-deltas)))
1509
+ (ly:grob-set-property! square 'measure-division fracs)))
1510
+ (make-engraver
1511
+ ((start-translation-timestep engraver)
1512
+ ;; Can't be done in stop-translation-timestep since the value
1513
+ ;; needs to be known in finalize.
1514
+ (set! new-square-created #f))
1515
+ ((process-music engraver)
1516
+ (when first-timestep
1517
+ (let ((column (ly:context-property context 'currentCommandColumn)))
1518
+ (set! square (ly:engraver-make-grob engraver 'ChordSquare '()))
1519
+ (ly:spanner-set-bound! square LEFT column))
1520
+ (set! new-square-created #t)))
1521
+ (acknowledgers
1522
+ ((bar-line-interface engraver grob source-engraver)
1523
+ (when (not first-timestep) ; don't duplicate if there's a bar line at the beginning
1524
+ (let ((column (ly:context-property context 'currentCommandColumn)))
1525
+ (ly:spanner-set-bound! square RIGHT grob)
1526
+ (set-square-measure-division!)
1527
+ (set! moms '())
1528
+ ;; Reset so skips in the next measure count as a new part of a square.
1529
+ (set! in-skip #f)
1530
+ (ly:engraver-announce-end-grob engraver square grob)
1531
+ (set! square (ly:engraver-make-grob engraver 'ChordSquare '()))
1532
+ (ly:spanner-set-bound! square LEFT grob)
1533
+ (set! new-square-created #t)
1534
+ (set! index 0)))
1535
+ (when first-timestep
1536
+ ;; If we do have a bar line at the beginning, make it the bound of the
1537
+ ;; already created chord square.
1538
+ (ly:spanner-set-bound! square LEFT grob)))
1539
+ ((grid-chord-name-interface engraver grob source-engraver)
1540
+ (set! chord-name grob)))
1541
+ ((stop-translation-timestep engraver)
1542
+ (let ((mom (ly:context-current-moment context)))
1543
+ (cond
1544
+ ;; Chord name found: register it.
1545
+ (chord-name
1546
+ (set! moms (cons mom moms))
1547
+ (ly:pointer-group-interface::add-grob square 'chord-names chord-name)
1548
+ (ly:grob-set-property! chord-name 'index index)
1549
+ (ly:grob-set-parent! chord-name X square)
1550
+ (ly:grob-set-parent! chord-name Y square)
1551
+ (set! index (1+ index))
1552
+ (let* ((ev (event-cause chord-name))
1553
+ (length (ly:event-property ev 'length))
1554
+ (now (ly:context-current-moment context)))
1555
+ (set! chord-end-mom (ly:moment-add now length)))
1556
+ (set! chord-name #f)
1557
+ (set! in-skip #f))
1558
+ ;; No chord name found and previous chord name no longer active. This
1559
+ ;; is a skip or something similar. Record the moment where the skip
1560
+ ;; started -- unless it already started earlier, in which case it is
1561
+ ;; merged with the previous one (also happens if another voice has
1562
+ ;; material that causes timesteps in the middle of the skip in the
1563
+ ;; chord grid).
1564
+ ((and (or (not chord-end-mom)
1565
+ (let ((now (ly:context-current-moment context)))
1566
+ (moment<=? chord-end-mom now)))
1567
+ (not in-skip))
1568
+ (set! moms (cons mom moms))
1569
+ (set! in-skip #t)
1570
+ (set! index (1+ index)))))
1571
+ (set! first-timestep #f))
1572
+ ((finalize engraver)
1573
+ ;; Avoid a dangling ChordSquare at the end. If it was created in this
1574
+ ;; timestep, the music ends on a bar line, as most music does, or perhaps
1575
+ ;; the music has zero length. In that case, kill it silently. Else, we
1576
+ ;; have an unterminated measure, so warn about it.
1577
+ (when (not new-square-created)
1578
+ (ly:warning (G_ "unterminated measure for chord square")))
1579
+ (let ((chord-names (ly:grob-object square 'chord-names #f)))
1580
+ (when chord-names
1581
+ (for-each ly:grob-suicide! (ly:grob-array->list chord-names))))
1582
+ (ly:grob-suicide! square)))))
1583
+
1584
+ (ly:register-translator
1585
+ Chord_square_engraver 'Chord_square_engraver
1586
+ '((events-accepted . ())
1587
+ (grobs-created . (ChordSquare))
1588
+ (properties-read . (currentCommandColumn))
1589
+ (properties-written . ())
1590
+ (description . "Engrave chord squares in chord grids.")))
1591
+
1592
+
1593
+ (define (Trill_spanner_engraver context)
1594
+ (let ((start-event #f)
1595
+ (stop-event #f)
1596
+ (trill #f)
1597
+ (ended-trill #f))
1598
+ (make-engraver
1599
+ (listeners
1600
+ ((trill-span-event engraver event)
1601
+ (if (eqv? START (ly:event-property event 'span-direction))
1602
+ (set! start-event event)
1603
+ (set! stop-event event))))
1604
+ ((process-music engraver)
1605
+ (let ((ender (or stop-event start-event)))
1606
+ (when (and ender trill)
1607
+ (set! ended-trill trill)
1608
+ (ly:engraver-announce-end-grob engraver ended-trill ender)
1609
+ (set! trill #f)))
1610
+ (when start-event
1611
+ (set! trill (ly:engraver-make-grob engraver 'TrillSpanner start-event))
1612
+ (ly:side-position-interface::set-axis! trill Y)
1613
+ (let ((direction (ly:event-property start-event 'direction)))
1614
+ (when (ly:dir? direction)
1615
+ (ly:grob-set-property! trill 'direction direction)))
1616
+ (when ended-trill
1617
+ (ly:grob-set-object! ended-trill 'right-neighbor trill))))
1618
+ (acknowledgers
1619
+ ((note-column-interface engraver grob source-engraver)
1620
+ ;; If we find a note column, use it for the left bound of the
1621
+ ;; newly created trill and the right bound of the trill that
1622
+ ;; ended here.
1623
+ (when trill
1624
+ (ly:pointer-group-interface::add-grob trill 'note-columns grob)
1625
+ (ly:pointer-group-interface::add-grob trill 'side-support-elements grob)
1626
+ (when start-event
1627
+ (ly:spanner-set-bound! trill LEFT grob)))
1628
+ (when ended-trill
1629
+ (ly:pointer-group-interface::add-grob ended-trill 'note-columns grob)
1630
+ (ly:pointer-group-interface::add-grob ended-trill 'side-support-elements grob)
1631
+ (when (not (ly:spanner-bound ended-trill RIGHT #f)) ; respect to-barline
1632
+ (ly:spanner-set-bound! ended-trill RIGHT grob)))))
1633
+ ((stop-translation-timestep engraver)
1634
+ ;; Absent any note column, fall back on the musical paper column.
1635
+ (when (and trill
1636
+ ;; A bound already set is a note column, added above.
1637
+ (not (ly:spanner-bound trill LEFT #f)))
1638
+ (let ((col (ly:context-property context 'currentMusicalColumn)))
1639
+ (ly:spanner-set-bound! trill LEFT col)))
1640
+ (when (and ended-trill
1641
+ ;; A bound already set is either a note column, added
1642
+ ;; above, or a BarLine due to to-barline.
1643
+ (not (ly:spanner-bound ended-trill RIGHT #f)))
1644
+ (let ((col (ly:context-property context 'currentMusicalColumn)))
1645
+ (ly:spanner-set-bound! ended-trill RIGHT col))
1646
+ (set! ended-trill #f))
1647
+ (set! start-event #f)
1648
+ (set! stop-event #f))
1649
+ ((finalize engraver)
1650
+ (when trill
1651
+ ;; Fix the bound of a trill extending to the end of the piece:
1652
+ ;; the musical column is past the end of the score. Use the
1653
+ ;; non-musical column instead.
1654
+ (let ((col (ly:context-property context 'currentCommandColumn)))
1655
+ (ly:spanner-set-bound! trill RIGHT col)))))))
1656
+
1657
+ (ly:register-translator
1658
+ Trill_spanner_engraver 'Trill_spanner_engraver
1659
+ '((events-accepted . (trill-span-event))
1660
+ (grobs-created . (TrillSpanner))
1661
+ (properties-read . (currentCommandColumn currentMusicalColumn))
1662
+ (properties-written . ())
1663
+ (description . "Create trill spanners.")))
1664
+
1665
+
1666
+ (define (Staff_highlight_engraver context)
1667
+ (let ((start-event #f)
1668
+ (stop-event #f)
1669
+ (highlight #f)
1670
+ (ended-highlight #f)
1671
+ ;; List of staff symbols "active" in this time step. A staff symbol is
1672
+ ;; active from the time step of \startStaff (probably implicitly the
1673
+ ;; first time step) to the time step of \stopStaff (probably implicitly
1674
+ ;; the last time step). Both ends are included.
1675
+ (active-staff-symbols '())
1676
+ ;; List of staff symbols considered for the whole highlight.
1677
+ ;; #f when there is no highlight in progress.
1678
+ (highlight-staff-symbols #f))
1679
+ ;; Properly handling ossia staves is a little tricky.
1680
+ ;; highlight-staff-symbols contains all staff symbols spanned. Yet, if an
1681
+ ;; ossia staff ended where the highlight started, we actually don't want it.
1682
+ ;; It would be complicated to handle this by excluding it in
1683
+ ;; highlight-staff-symbols because the end of a staff symbol is actually
1684
+ ;; announced one time step later (because Staff_symbol_engraver terminates a
1685
+ ;; staff symbol implicitly in finalize). So we filter those unwanted staff
1686
+ ;; symbols here. Namely, if a staff symbol ended just where the highlight
1687
+ ;; started, remove it. Also, if a staff symbol started just where the
1688
+ ;; highlight ended, it is implicitly excluded because
1689
+ ;; highlight-staff-symbols doesn't contain it yet.
1690
+ (define (set-ended-highlight-staff-symbols! grob)
1691
+ (ly:grob-set-object!
1692
+ grob
1693
+ 'elements
1694
+ (ly:grob-list->grob-array
1695
+ (remove
1696
+ (lambda (staff-sym)
1697
+ (let ((right-bound (ly:spanner-bound staff-sym RIGHT #f)))
1698
+ (and right-bound
1699
+ (equal? (grob::when right-bound)
1700
+ (grob::when grob)))))
1701
+ highlight-staff-symbols))))
1702
+ (make-engraver
1703
+ (listeners
1704
+ ((staff-highlight-event engraver event)
1705
+ (if (eqv? START (ly:event-property event 'span-direction))
1706
+ (set! start-event event)
1707
+ (set! stop-event event))))
1708
+ ((process-music engraver)
1709
+ ;; ignore spurious event
1710
+ (when (and stop-event (not highlight))
1711
+ (ly:event-warning stop-event (G_ "no highlight to end")))
1712
+ ;; \staffHighlight implicitly ends the current highlight, if any,
1713
+ ;; acting like a \stopStaffHighlight. This is handy when you want to
1714
+ ;; highlight every single measure.
1715
+ (let ((ender (or stop-event start-event)))
1716
+ (when (and highlight ender)
1717
+ (set! ended-highlight highlight)
1718
+ (set! highlight #f)
1719
+ (let ((non-musical-col
1720
+ (ly:context-property context 'currentCommandColumn)))
1721
+ (ly:spanner-set-bound! ended-highlight RIGHT non-musical-col))
1722
+ (ly:engraver-announce-end-grob engraver ended-highlight ender)))
1723
+ (when start-event
1724
+ (set! highlight
1725
+ (ly:engraver-make-grob engraver 'StaffHighlight start-event))
1726
+ (let ((non-musical-col
1727
+ (ly:context-property context 'currentCommandColumn)))
1728
+ (ly:spanner-set-bound! highlight LEFT non-musical-col)))
1729
+ (when highlight
1730
+ (let ((musical-col
1731
+ (ly:context-property context 'currentMusicalColumn)))
1732
+ (ly:pointer-group-interface::add-grob highlight 'columns musical-col))))
1733
+ (acknowledgers
1734
+ ((staff-symbol-interface engraver grob source-engraver)
1735
+ (set! active-staff-symbols (cons grob active-staff-symbols))))
1736
+ (end-acknowledgers
1737
+ ((staff-symbol-interface engraver grob source-engraver)
1738
+ (set! active-staff-symbols (delq grob active-staff-symbols))))
1739
+ ((stop-translation-timestep engraver)
1740
+ (when ended-highlight
1741
+ (set-ended-highlight-staff-symbols! ended-highlight)
1742
+ (set! highlight-staff-symbols #f)
1743
+ (set! ended-highlight #f))
1744
+ (when start-event
1745
+ ;; Initialize highlight-staff-symbols for the new highlight.
1746
+ (set! highlight-staff-symbols '()))
1747
+ (when highlight-staff-symbols
1748
+ ;; Add new staff symbols found in this time step. If a highlight was
1749
+ ;; just started, this also adds all staff symbols started earlier and
1750
+ ;; still current. This way, when we want to end the highlight,
1751
+ ;; highlight-staff-symbols will be the list of all staff symbols that
1752
+ ;; were active at one or several of the time steps the highlight spans.
1753
+ (set! highlight-staff-symbols
1754
+ (lset-union eq? highlight-staff-symbols active-staff-symbols)))
1755
+ (set! start-event #f)
1756
+ (set! stop-event #f))
1757
+ ((finalize engraver)
1758
+ (when highlight
1759
+ ;; Implicitly terminate the current highlight.
1760
+ (let ((col (ly:context-property context 'currentCommandColumn)))
1761
+ (ly:spanner-set-bound! highlight RIGHT col))
1762
+ (set-ended-highlight-staff-symbols! highlight))))))
1763
+
1764
+ (ly:register-translator
1765
+ Staff_highlight_engraver 'Staff_highlight_engraver
1766
+ '((events-accepted . (staff-highlight-event))
1767
+ (grobs-created . (StaffHighlight))
1768
+ (properties-read . (currentCommandColumn))
1769
+ (properties-written . ())
1770
+ (description . "Highlights music passages.")))
1771
+
1772
+
1773
+ (define (Text_mark_engraver context)
1774
+ (let ((evs '())
1775
+ (grobs '()))
1776
+ (make-engraver
1777
+ (listeners
1778
+ ((text-mark-event engraver event)
1779
+ (set! evs (cons event evs))))
1780
+ ((process-music engraver)
1781
+ (let ((i 0))
1782
+ (for-each
1783
+ (lambda (ev)
1784
+ (let* ((grob (ly:engraver-make-grob engraver 'TextMark ev))
1785
+ ;; FIXME: this is not the only place where we sneakily modify
1786
+ ;; values of outside-staff-priority to enforce a deterministic
1787
+ ;; order. Improve.
1788
+ (osp (ly:grob-property grob 'outside-staff-priority #f)))
1789
+ (when osp ; if unset, leave it unset
1790
+ (ly:grob-set-property! grob 'outside-staff-priority (+ osp i))
1791
+ (set! i (1+ i)))
1792
+ (set! grobs (cons grob grobs))))
1793
+ ;; The default order has the first mark heard closest to the staff.
1794
+ (reverse evs))))
1795
+ ((stop-translation-timestep engraver)
1796
+ (let ((staves (ly:context-property context 'stavesFound)))
1797
+ (for-each
1798
+ (lambda (grob)
1799
+ (ly:grob-set-object!
1800
+ grob
1801
+ 'side-support-elements
1802
+ (ly:grob-list->grob-array staves)))
1803
+ grobs))
1804
+ (set! evs '())
1805
+ (set! grobs '())))))
1806
+
1807
+ (ly:register-translator
1808
+ Text_mark_engraver 'Text_mark_engraver
1809
+ '((events-accepted . (text-mark-event))
1810
+ (grobs-created . (TextMark))
1811
+ (properties-read . (stavesFound))
1812
+ (properties-written . ())
1813
+ (description . "Engraves arbitrary textual marks.")))