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.
- checksums.yaml +4 -4
- data/etc/fonts/conf.d/10-hinting-slight.conf +15 -0
- data/etc/fonts/conf.d/10-scale-bitmap-fonts.conf +83 -0
- data/etc/fonts/conf.d/11-lcdfilter-default.conf +17 -0
- data/etc/fonts/conf.d/20-unhint-small-vera.conf +49 -0
- data/etc/fonts/conf.d/30-metric-aliases.conf +637 -0
- data/etc/fonts/conf.d/40-nonlatin.conf +332 -0
- data/etc/fonts/conf.d/45-generic.conf +136 -0
- data/etc/fonts/conf.d/45-latin.conf +301 -0
- data/etc/fonts/conf.d/48-spacing.conf +16 -0
- data/etc/fonts/conf.d/49-sansserif.conf +22 -0
- data/etc/fonts/conf.d/50-user.conf +16 -0
- data/etc/fonts/conf.d/51-local.conf +7 -0
- data/etc/fonts/conf.d/60-generic.conf +64 -0
- data/etc/fonts/conf.d/60-latin.conf +88 -0
- data/etc/fonts/conf.d/65-fonts-persian.conf +418 -0
- data/etc/fonts/conf.d/65-nonlatin.conf +228 -0
- data/etc/fonts/conf.d/69-unifont.conf +28 -0
- data/etc/fonts/conf.d/80-delicious.conf +19 -0
- data/etc/fonts/conf.d/90-synthetic.conf +64 -0
- data/etc/fonts/conf.d/README +23 -0
- data/etc/fonts/fonts.conf +101 -0
- data/etc/relocate/fontconfig.reloc +2 -0
- data/etc/relocate/guile.reloc +2 -0
- data/etc/relocate/libexec.reloc +1 -0
- data/lib/guile/2.2/ccache/ice-9/and-let-star.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/arrays.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/atomic.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/binary-ports.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/boot-9.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/buffered-input.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/calling.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/channel.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/command-line.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/common-list.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/control.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/curried-definitions.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/debug.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/deprecated.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/documentation.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/eval-string.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/eval.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/expect.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/fdes-finalizers.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/format.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/ftw.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/futures.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/gap-buffer.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/getopt-long.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/hash-table.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/hcons.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/history.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/i18n.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/iconv.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/lineio.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/list.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/local-eval.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/ls.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/mapping.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/match.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/networking.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/null.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/occam-channel.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/optargs.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/peg/cache.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/peg/codegen.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/peg/simplify-tree.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/peg/string-peg.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/peg/using-parsers.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/peg.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/poe.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/poll.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/popen.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/ports.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/posix.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/pretty-print.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/psyntax-pp.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/q.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/r5rs.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/rdelim.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/receive.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/regex.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/runq.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/rw.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/safe-r5rs.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/safe.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/sandbox.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/save-stack.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/scm-style-repl.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/serialize.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/session.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/slib.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/stack-catch.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/streams.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/string-fun.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/suspendable-ports.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/syncase.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/textual-ports.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/threads.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/time.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/top-repl.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/unicode.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/vlist.go +0 -0
- data/lib/guile/2.2/ccache/ice-9/weak-vector.go +0 -0
- data/lib/guile/2.2/ccache/language/brainfuck/compile-scheme.go +0 -0
- data/lib/guile/2.2/ccache/language/brainfuck/compile-tree-il.go +0 -0
- data/lib/guile/2.2/ccache/language/brainfuck/parse.go +0 -0
- data/lib/guile/2.2/ccache/language/brainfuck/spec.go +0 -0
- data/lib/guile/2.2/ccache/language/bytecode/spec.go +0 -0
- data/lib/guile/2.2/ccache/language/bytecode.go +0 -0
- data/lib/guile/2.2/ccache/language/cps/closure-conversion.go +0 -0
- data/lib/guile/2.2/ccache/language/cps/compile-bytecode.go +0 -0
- data/lib/guile/2.2/ccache/language/cps/constructors.go +0 -0
- data/lib/guile/2.2/ccache/language/cps/contification.go +0 -0
- data/lib/guile/2.2/ccache/language/cps/cse.go +0 -0
- data/lib/guile/2.2/ccache/language/cps/dce.go +0 -0
- data/lib/guile/2.2/ccache/language/cps/effects-analysis.go +0 -0
- data/lib/guile/2.2/ccache/language/cps/elide-values.go +0 -0
- data/lib/guile/2.2/ccache/language/cps/handle-interrupts.go +0 -0
- data/lib/guile/2.2/ccache/language/cps/intmap.go +0 -0
- data/lib/guile/2.2/ccache/language/cps/intset.go +0 -0
- data/lib/guile/2.2/ccache/language/cps/licm.go +0 -0
- data/lib/guile/2.2/ccache/language/cps/optimize.go +0 -0
- data/lib/guile/2.2/ccache/language/cps/peel-loops.go +0 -0
- data/lib/guile/2.2/ccache/language/cps/primitives.go +0 -0
- data/lib/guile/2.2/ccache/language/cps/prune-bailouts.go +0 -0
- data/lib/guile/2.2/ccache/language/cps/prune-top-level-scopes.go +0 -0
- data/lib/guile/2.2/ccache/language/cps/reify-primitives.go +0 -0
- data/lib/guile/2.2/ccache/language/cps/renumber.go +0 -0
- data/lib/guile/2.2/ccache/language/cps/rotate-loops.go +0 -0
- data/lib/guile/2.2/ccache/language/cps/self-references.go +0 -0
- data/lib/guile/2.2/ccache/language/cps/simplify.go +0 -0
- data/lib/guile/2.2/ccache/language/cps/slot-allocation.go +0 -0
- data/lib/guile/2.2/ccache/language/cps/spec.go +0 -0
- data/lib/guile/2.2/ccache/language/cps/specialize-numbers.go +0 -0
- data/lib/guile/2.2/ccache/language/cps/specialize-primcalls.go +0 -0
- data/lib/guile/2.2/ccache/language/cps/split-rec.go +0 -0
- data/lib/guile/2.2/ccache/language/cps/type-checks.go +0 -0
- data/lib/guile/2.2/ccache/language/cps/type-fold.go +0 -0
- data/lib/guile/2.2/ccache/language/cps/types.go +0 -0
- data/lib/guile/2.2/ccache/language/cps/utils.go +0 -0
- data/lib/guile/2.2/ccache/language/cps/verify.go +0 -0
- data/lib/guile/2.2/ccache/language/cps/with-cps.go +0 -0
- data/lib/guile/2.2/ccache/language/cps.go +0 -0
- data/lib/guile/2.2/ccache/language/ecmascript/array.go +0 -0
- data/lib/guile/2.2/ccache/language/ecmascript/base.go +0 -0
- data/lib/guile/2.2/ccache/language/ecmascript/compile-tree-il.go +0 -0
- data/lib/guile/2.2/ccache/language/ecmascript/function.go +0 -0
- data/lib/guile/2.2/ccache/language/ecmascript/impl.go +0 -0
- data/lib/guile/2.2/ccache/language/ecmascript/parse.go +0 -0
- data/lib/guile/2.2/ccache/language/ecmascript/spec.go +0 -0
- data/lib/guile/2.2/ccache/language/ecmascript/tokenize.go +0 -0
- data/lib/guile/2.2/ccache/language/elisp/bindings.go +0 -0
- data/lib/guile/2.2/ccache/language/elisp/boot.go +0 -0
- data/lib/guile/2.2/ccache/language/elisp/compile-tree-il.go +0 -0
- data/lib/guile/2.2/ccache/language/elisp/falias.go +0 -0
- data/lib/guile/2.2/ccache/language/elisp/lexer.go +0 -0
- data/lib/guile/2.2/ccache/language/elisp/parser.go +0 -0
- data/lib/guile/2.2/ccache/language/elisp/runtime/function-slot.go +0 -0
- data/lib/guile/2.2/ccache/language/elisp/runtime/value-slot.go +0 -0
- data/lib/guile/2.2/ccache/language/elisp/runtime.go +0 -0
- data/lib/guile/2.2/ccache/language/elisp/spec.go +0 -0
- data/lib/guile/2.2/ccache/language/scheme/compile-tree-il.go +0 -0
- data/lib/guile/2.2/ccache/language/scheme/decompile-tree-il.go +0 -0
- data/lib/guile/2.2/ccache/language/scheme/spec.go +0 -0
- data/lib/guile/2.2/ccache/language/tree-il/analyze.go +0 -0
- data/lib/guile/2.2/ccache/language/tree-il/canonicalize.go +0 -0
- data/lib/guile/2.2/ccache/language/tree-il/compile-cps.go +0 -0
- data/lib/guile/2.2/ccache/language/tree-il/debug.go +0 -0
- data/lib/guile/2.2/ccache/language/tree-il/effects.go +0 -0
- data/lib/guile/2.2/ccache/language/tree-il/fix-letrec.go +0 -0
- data/lib/guile/2.2/ccache/language/tree-il/optimize.go +0 -0
- data/lib/guile/2.2/ccache/language/tree-il/peval.go +0 -0
- data/lib/guile/2.2/ccache/language/tree-il/primitives.go +0 -0
- data/lib/guile/2.2/ccache/language/tree-il/spec.go +0 -0
- data/lib/guile/2.2/ccache/language/tree-il.go +0 -0
- data/lib/guile/2.2/ccache/language/value/spec.go +0 -0
- data/lib/guile/2.2/ccache/oop/goops/accessors.go +0 -0
- data/lib/guile/2.2/ccache/oop/goops/active-slot.go +0 -0
- data/lib/guile/2.2/ccache/oop/goops/composite-slot.go +0 -0
- data/lib/guile/2.2/ccache/oop/goops/describe.go +0 -0
- data/lib/guile/2.2/ccache/oop/goops/internal.go +0 -0
- data/lib/guile/2.2/ccache/oop/goops/save.go +0 -0
- data/lib/guile/2.2/ccache/oop/goops/simple.go +0 -0
- data/lib/guile/2.2/ccache/oop/goops/stklos.go +0 -0
- data/lib/guile/2.2/ccache/oop/goops.go +0 -0
- data/lib/guile/2.2/ccache/rnrs/arithmetic/bitwise.go +0 -0
- data/lib/guile/2.2/ccache/rnrs/arithmetic/fixnums.go +0 -0
- data/lib/guile/2.2/ccache/rnrs/arithmetic/flonums.go +0 -0
- data/lib/guile/2.2/ccache/rnrs/base.go +0 -0
- data/lib/guile/2.2/ccache/rnrs/bytevectors.go +0 -0
- data/lib/guile/2.2/ccache/rnrs/conditions.go +0 -0
- data/lib/guile/2.2/ccache/rnrs/control.go +0 -0
- data/lib/guile/2.2/ccache/rnrs/enums.go +0 -0
- data/lib/guile/2.2/ccache/rnrs/eval.go +0 -0
- data/lib/guile/2.2/ccache/rnrs/exceptions.go +0 -0
- data/lib/guile/2.2/ccache/rnrs/files.go +0 -0
- data/lib/guile/2.2/ccache/rnrs/hashtables.go +0 -0
- data/lib/guile/2.2/ccache/rnrs/io/ports.go +0 -0
- data/lib/guile/2.2/ccache/rnrs/io/simple.go +0 -0
- data/lib/guile/2.2/ccache/rnrs/lists.go +0 -0
- data/lib/guile/2.2/ccache/rnrs/mutable-pairs.go +0 -0
- data/lib/guile/2.2/ccache/rnrs/mutable-strings.go +0 -0
- data/lib/guile/2.2/ccache/rnrs/programs.go +0 -0
- data/lib/guile/2.2/ccache/rnrs/r5rs.go +0 -0
- data/lib/guile/2.2/ccache/rnrs/records/inspection.go +0 -0
- data/lib/guile/2.2/ccache/rnrs/records/procedural.go +0 -0
- data/lib/guile/2.2/ccache/rnrs/records/syntactic.go +0 -0
- data/lib/guile/2.2/ccache/rnrs/sorting.go +0 -0
- data/lib/guile/2.2/ccache/rnrs/syntax-case.go +0 -0
- data/lib/guile/2.2/ccache/rnrs/unicode.go +0 -0
- data/lib/guile/2.2/ccache/rnrs.go +0 -0
- data/lib/guile/2.2/ccache/scripts/api-diff.go +0 -0
- data/lib/guile/2.2/ccache/scripts/autofrisk.go +0 -0
- data/lib/guile/2.2/ccache/scripts/compile.go +0 -0
- data/lib/guile/2.2/ccache/scripts/disassemble.go +0 -0
- data/lib/guile/2.2/ccache/scripts/display-commentary.go +0 -0
- data/lib/guile/2.2/ccache/scripts/doc-snarf.go +0 -0
- data/lib/guile/2.2/ccache/scripts/frisk.go +0 -0
- data/lib/guile/2.2/ccache/scripts/generate-autoload.go +0 -0
- data/lib/guile/2.2/ccache/scripts/help.go +0 -0
- data/lib/guile/2.2/ccache/scripts/lint.go +0 -0
- data/lib/guile/2.2/ccache/scripts/list.go +0 -0
- data/lib/guile/2.2/ccache/scripts/punify.go +0 -0
- data/lib/guile/2.2/ccache/scripts/read-rfc822.go +0 -0
- data/lib/guile/2.2/ccache/scripts/read-scheme-source.go +0 -0
- data/lib/guile/2.2/ccache/scripts/read-text-outline.go +0 -0
- data/lib/guile/2.2/ccache/scripts/scan-api.go +0 -0
- data/lib/guile/2.2/ccache/scripts/snarf-check-and-output-texi.go +0 -0
- data/lib/guile/2.2/ccache/scripts/snarf-guile-m4-docs.go +0 -0
- data/lib/guile/2.2/ccache/scripts/summarize-guile-TODO.go +0 -0
- data/lib/guile/2.2/ccache/scripts/use2dot.go +0 -0
- data/lib/guile/2.2/ccache/srfi/srfi-1.go +0 -0
- data/lib/guile/2.2/ccache/srfi/srfi-10.go +0 -0
- data/lib/guile/2.2/ccache/srfi/srfi-11.go +0 -0
- data/lib/guile/2.2/ccache/srfi/srfi-111.go +0 -0
- data/lib/guile/2.2/ccache/srfi/srfi-13.go +0 -0
- data/lib/guile/2.2/ccache/srfi/srfi-14.go +0 -0
- data/lib/guile/2.2/ccache/srfi/srfi-16.go +0 -0
- data/lib/guile/2.2/ccache/srfi/srfi-17.go +0 -0
- data/lib/guile/2.2/ccache/srfi/srfi-18.go +0 -0
- data/lib/guile/2.2/ccache/srfi/srfi-19.go +0 -0
- data/lib/guile/2.2/ccache/srfi/srfi-2.go +0 -0
- data/lib/guile/2.2/ccache/srfi/srfi-26.go +0 -0
- data/lib/guile/2.2/ccache/srfi/srfi-27.go +0 -0
- data/lib/guile/2.2/ccache/srfi/srfi-28.go +0 -0
- data/lib/guile/2.2/ccache/srfi/srfi-31.go +0 -0
- data/lib/guile/2.2/ccache/srfi/srfi-34.go +0 -0
- data/lib/guile/2.2/ccache/srfi/srfi-35.go +0 -0
- data/lib/guile/2.2/ccache/srfi/srfi-37.go +0 -0
- data/lib/guile/2.2/ccache/srfi/srfi-38.go +0 -0
- data/lib/guile/2.2/ccache/srfi/srfi-39.go +0 -0
- data/lib/guile/2.2/ccache/srfi/srfi-4/gnu.go +0 -0
- data/lib/guile/2.2/ccache/srfi/srfi-4.go +0 -0
- data/lib/guile/2.2/ccache/srfi/srfi-41.go +0 -0
- data/lib/guile/2.2/ccache/srfi/srfi-42.go +0 -0
- data/lib/guile/2.2/ccache/srfi/srfi-43.go +0 -0
- data/lib/guile/2.2/ccache/srfi/srfi-45.go +0 -0
- data/lib/guile/2.2/ccache/srfi/srfi-6.go +0 -0
- data/lib/guile/2.2/ccache/srfi/srfi-60.go +0 -0
- data/lib/guile/2.2/ccache/srfi/srfi-64.go +0 -0
- data/lib/guile/2.2/ccache/srfi/srfi-67.go +0 -0
- data/lib/guile/2.2/ccache/srfi/srfi-69.go +0 -0
- data/lib/guile/2.2/ccache/srfi/srfi-71.go +0 -0
- data/lib/guile/2.2/ccache/srfi/srfi-8.go +0 -0
- data/lib/guile/2.2/ccache/srfi/srfi-88.go +0 -0
- data/lib/guile/2.2/ccache/srfi/srfi-9/gnu.go +0 -0
- data/lib/guile/2.2/ccache/srfi/srfi-9.go +0 -0
- data/lib/guile/2.2/ccache/srfi/srfi-98.go +0 -0
- data/lib/guile/2.2/ccache/statprof.go +0 -0
- data/lib/guile/2.2/ccache/sxml/apply-templates.go +0 -0
- data/lib/guile/2.2/ccache/sxml/fold.go +0 -0
- data/lib/guile/2.2/ccache/sxml/match.go +0 -0
- data/lib/guile/2.2/ccache/sxml/simple.go +0 -0
- data/lib/guile/2.2/ccache/sxml/ssax/input-parse.go +0 -0
- data/lib/guile/2.2/ccache/sxml/ssax.go +0 -0
- data/lib/guile/2.2/ccache/sxml/transform.go +0 -0
- data/lib/guile/2.2/ccache/sxml/xpath.go +0 -0
- data/lib/guile/2.2/ccache/system/base/ck.go +0 -0
- data/lib/guile/2.2/ccache/system/base/compile.go +0 -0
- data/lib/guile/2.2/ccache/system/base/lalr.go +0 -0
- data/lib/guile/2.2/ccache/system/base/language.go +0 -0
- data/lib/guile/2.2/ccache/system/base/message.go +0 -0
- data/lib/guile/2.2/ccache/system/base/pmatch.go +0 -0
- data/lib/guile/2.2/ccache/system/base/syntax.go +0 -0
- data/lib/guile/2.2/ccache/system/base/target.go +0 -0
- data/lib/guile/2.2/ccache/system/base/types.go +0 -0
- data/lib/guile/2.2/ccache/system/foreign-object.go +0 -0
- data/lib/guile/2.2/ccache/system/foreign.go +0 -0
- data/lib/guile/2.2/ccache/system/repl/command.go +0 -0
- data/lib/guile/2.2/ccache/system/repl/common.go +0 -0
- data/lib/guile/2.2/ccache/system/repl/coop-server.go +0 -0
- data/lib/guile/2.2/ccache/system/repl/debug.go +0 -0
- data/lib/guile/2.2/ccache/system/repl/error-handling.go +0 -0
- data/lib/guile/2.2/ccache/system/repl/repl.go +0 -0
- data/lib/guile/2.2/ccache/system/repl/server.go +0 -0
- data/lib/guile/2.2/ccache/system/syntax.go +0 -0
- data/lib/guile/2.2/ccache/system/vm/assembler.go +0 -0
- data/lib/guile/2.2/ccache/system/vm/coverage.go +0 -0
- data/lib/guile/2.2/ccache/system/vm/debug.go +0 -0
- data/lib/guile/2.2/ccache/system/vm/disassembler.go +0 -0
- data/lib/guile/2.2/ccache/system/vm/dwarf.go +0 -0
- data/lib/guile/2.2/ccache/system/vm/elf.go +0 -0
- data/lib/guile/2.2/ccache/system/vm/frame.go +0 -0
- data/lib/guile/2.2/ccache/system/vm/inspect.go +0 -0
- data/lib/guile/2.2/ccache/system/vm/linker.go +0 -0
- data/lib/guile/2.2/ccache/system/vm/loader.go +0 -0
- data/lib/guile/2.2/ccache/system/vm/program.go +0 -0
- data/lib/guile/2.2/ccache/system/vm/trace.go +0 -0
- data/lib/guile/2.2/ccache/system/vm/trap-state.go +0 -0
- data/lib/guile/2.2/ccache/system/vm/traps.go +0 -0
- data/lib/guile/2.2/ccache/system/vm/vm.go +0 -0
- data/lib/guile/2.2/ccache/system/xref.go +0 -0
- data/lib/guile/2.2/ccache/texinfo/docbook.go +0 -0
- data/lib/guile/2.2/ccache/texinfo/html.go +0 -0
- data/lib/guile/2.2/ccache/texinfo/indexing.go +0 -0
- data/lib/guile/2.2/ccache/texinfo/plain-text.go +0 -0
- data/lib/guile/2.2/ccache/texinfo/reflection.go +0 -0
- data/lib/guile/2.2/ccache/texinfo/serialize.go +0 -0
- data/lib/guile/2.2/ccache/texinfo/string-utils.go +0 -0
- data/lib/guile/2.2/ccache/texinfo.go +0 -0
- data/lib/guile/2.2/ccache/web/client.go +0 -0
- data/lib/guile/2.2/ccache/web/http.go +0 -0
- data/lib/guile/2.2/ccache/web/request.go +0 -0
- data/lib/guile/2.2/ccache/web/response.go +0 -0
- data/lib/guile/2.2/ccache/web/server/http.go +0 -0
- data/lib/guile/2.2/ccache/web/server.go +0 -0
- data/lib/guile/2.2/ccache/web/uri.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/accreg.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/auto-beam.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/autochange.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/backend-library.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/bar-line.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/breath.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/c++.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/chord-entry.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/chord-ignatzek-names.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/chord-name.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/clip-region.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/color.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/curried-definitions.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/define-context-properties.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/define-event-classes.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/define-grob-interfaces.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/define-grob-properties.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/define-grobs.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/define-markup-commands.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/define-music-callbacks.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/define-music-display-methods.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/define-music-properties.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/define-music-types.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/define-note-names.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/define-stencil-commands.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/define-woodwind-diagrams.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/display-lily.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/display-woodwind-diagrams.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/file-cache.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/flag-styles.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/font-encodings.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/font.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/framework-cairo.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/framework-ps.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/framework-svg.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/fret-diagrams.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/graphviz.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/harp-pedals.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/layout-beam.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/layout-slur.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/lily-library.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/lily.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/ly-syntax-constructors.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/markup-macros.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/markup.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/midi.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/modal-transforms.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/music-functions.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/output-lib.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/output-ps.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/output-svg.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/page.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/paper-system.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/paper.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/parser-clef.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/parser-ly-from-scheme.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/part-combiner.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/predefined-fretboards.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/ps-to-png.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/scheme-engravers.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/scheme-performers.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/script.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/skyline.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/song-util.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/song.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/stencil.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/tablature.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/time-signature-settings.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/time-signature.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/titling.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/to-xml.go +0 -0
- data/lib/lilypond/2.24.1/ccache/lily/translation-functions.go +0 -0
- data/share/emacs/site-lisp/lilypond-font-lock.el +208 -0
- data/share/emacs/site-lisp/lilypond-indent.el +605 -0
- data/share/emacs/site-lisp/lilypond-init.el +21 -0
- data/share/emacs/site-lisp/lilypond-mode.el +1204 -0
- data/share/emacs/site-lisp/lilypond-song.el +556 -0
- data/share/emacs/site-lisp/lilypond-what-beat.el +279 -0
- data/share/emacs/site-lisp/lilypond-words.el +1428 -0
- data/share/guile/2.2/guile-procedures.txt +8860 -0
- data/share/guile/2.2/ice-9/and-let-star.scm +73 -0
- data/share/guile/2.2/ice-9/arrays.scm +70 -0
- data/share/guile/2.2/ice-9/atomic.scm +38 -0
- data/share/guile/2.2/ice-9/binary-ports.scm +53 -0
- data/share/guile/2.2/ice-9/boot-9.scm +4131 -0
- data/share/guile/2.2/ice-9/buffered-input.scm +109 -0
- data/share/guile/2.2/ice-9/calling.scm +326 -0
- data/share/guile/2.2/ice-9/channel.scm +170 -0
- data/share/guile/2.2/ice-9/command-line.scm +477 -0
- data/share/guile/2.2/ice-9/common-list.scm +278 -0
- data/share/guile/2.2/ice-9/control.scm +110 -0
- data/share/guile/2.2/ice-9/curried-definitions.scm +57 -0
- data/share/guile/2.2/ice-9/debug.scm +25 -0
- data/share/guile/2.2/ice-9/deprecated.scm +93 -0
- data/share/guile/2.2/ice-9/documentation.scm +203 -0
- data/share/guile/2.2/ice-9/eval-string.scm +90 -0
- data/share/guile/2.2/ice-9/eval.scm +723 -0
- data/share/guile/2.2/ice-9/expect.scm +171 -0
- data/share/guile/2.2/ice-9/fdes-finalizers.scm +25 -0
- data/share/guile/2.2/ice-9/format.scm +1626 -0
- data/share/guile/2.2/ice-9/ftw.scm +564 -0
- data/share/guile/2.2/ice-9/futures.scm +308 -0
- data/share/guile/2.2/ice-9/gap-buffer.scm +283 -0
- data/share/guile/2.2/ice-9/getopt-long.scm +371 -0
- data/share/guile/2.2/ice-9/hash-table.scm +45 -0
- data/share/guile/2.2/ice-9/hcons.scm +80 -0
- data/share/guile/2.2/ice-9/history.scm +65 -0
- data/share/guile/2.2/ice-9/i18n.scm +531 -0
- data/share/guile/2.2/ice-9/iconv.scm +95 -0
- data/share/guile/2.2/ice-9/lineio.scm +115 -0
- data/share/guile/2.2/ice-9/list.scm +36 -0
- data/share/guile/2.2/ice-9/local-eval.scm +261 -0
- data/share/guile/2.2/ice-9/ls.scm +94 -0
- data/share/guile/2.2/ice-9/mapping.scm +118 -0
- data/share/guile/2.2/ice-9/match.scm +59 -0
- data/share/guile/2.2/ice-9/match.upstream.scm +917 -0
- data/share/guile/2.2/ice-9/networking.scm +94 -0
- data/share/guile/2.2/ice-9/null.scm +34 -0
- data/share/guile/2.2/ice-9/occam-channel.scm +261 -0
- data/share/guile/2.2/ice-9/optargs.scm +381 -0
- data/share/guile/2.2/ice-9/peg/cache.scm +45 -0
- data/share/guile/2.2/ice-9/peg/codegen.scm +359 -0
- data/share/guile/2.2/ice-9/peg/simplify-tree.scm +97 -0
- data/share/guile/2.2/ice-9/peg/string-peg.scm +273 -0
- data/share/guile/2.2/ice-9/peg/using-parsers.scm +116 -0
- data/share/guile/2.2/ice-9/peg.scm +42 -0
- data/share/guile/2.2/ice-9/poe.scm +116 -0
- data/share/guile/2.2/ice-9/poll.scm +172 -0
- data/share/guile/2.2/ice-9/popen.scm +178 -0
- data/share/guile/2.2/ice-9/ports.scm +566 -0
- data/share/guile/2.2/ice-9/posix.scm +75 -0
- data/share/guile/2.2/ice-9/pretty-print.scm +483 -0
- data/share/guile/2.2/ice-9/psyntax-pp.scm +3542 -0
- data/share/guile/2.2/ice-9/psyntax.scm +3326 -0
- data/share/guile/2.2/ice-9/q.scm +153 -0
- data/share/guile/2.2/ice-9/quasisyntax.scm +136 -0
- data/share/guile/2.2/ice-9/r5rs.scm +45 -0
- data/share/guile/2.2/ice-9/r6rs-libraries.scm +242 -0
- data/share/guile/2.2/ice-9/rdelim.scm +208 -0
- data/share/guile/2.2/ice-9/receive.scm +26 -0
- data/share/guile/2.2/ice-9/regex.scm +229 -0
- data/share/guile/2.2/ice-9/runq.scm +241 -0
- data/share/guile/2.2/ice-9/rw.scm +27 -0
- data/share/guile/2.2/ice-9/safe-r5rs.scm +145 -0
- data/share/guile/2.2/ice-9/safe.scm +34 -0
- data/share/guile/2.2/ice-9/sandbox.scm +1399 -0
- data/share/guile/2.2/ice-9/save-stack.scm +58 -0
- data/share/guile/2.2/ice-9/scm-style-repl.scm +279 -0
- data/share/guile/2.2/ice-9/serialize.scm +114 -0
- data/share/guile/2.2/ice-9/session.scm +530 -0
- data/share/guile/2.2/ice-9/slib.scm +33 -0
- data/share/guile/2.2/ice-9/stack-catch.scm +47 -0
- data/share/guile/2.2/ice-9/streams.scm +168 -0
- data/share/guile/2.2/ice-9/string-fun.scm +280 -0
- data/share/guile/2.2/ice-9/suspendable-ports.scm +788 -0
- data/share/guile/2.2/ice-9/syncase.scm +37 -0
- data/share/guile/2.2/ice-9/textual-ports.scm +70 -0
- data/share/guile/2.2/ice-9/threads.scm +392 -0
- data/share/guile/2.2/ice-9/time.scm +58 -0
- data/share/guile/2.2/ice-9/top-repl.scm +78 -0
- data/share/guile/2.2/ice-9/unicode.scm +26 -0
- data/share/guile/2.2/ice-9/vlist.scm +595 -0
- data/share/guile/2.2/ice-9/weak-vector.scm +31 -0
- data/share/guile/2.2/language/brainfuck/compile-scheme.scm +123 -0
- data/share/guile/2.2/language/brainfuck/compile-tree-il.scm +184 -0
- data/share/guile/2.2/language/brainfuck/parse.scm +95 -0
- data/share/guile/2.2/language/brainfuck/spec.scm +43 -0
- data/share/guile/2.2/language/bytecode/spec.scm +42 -0
- data/share/guile/2.2/language/bytecode.scm +104 -0
- data/share/guile/2.2/language/cps/closure-conversion.scm +848 -0
- data/share/guile/2.2/language/cps/compile-bytecode.scm +610 -0
- data/share/guile/2.2/language/cps/constructors.scm +106 -0
- data/share/guile/2.2/language/cps/contification.scm +448 -0
- data/share/guile/2.2/language/cps/cse.scm +414 -0
- data/share/guile/2.2/language/cps/dce.scm +363 -0
- data/share/guile/2.2/language/cps/effects-analysis.scm +597 -0
- data/share/guile/2.2/language/cps/elide-values.scm +88 -0
- data/share/guile/2.2/language/cps/handle-interrupts.scm +69 -0
- data/share/guile/2.2/language/cps/intmap.scm +765 -0
- data/share/guile/2.2/language/cps/intset.scm +830 -0
- data/share/guile/2.2/language/cps/licm.scm +308 -0
- data/share/guile/2.2/language/cps/optimize.scm +135 -0
- data/share/guile/2.2/language/cps/peel-loops.scm +287 -0
- data/share/guile/2.2/language/cps/primitives.scm +141 -0
- data/share/guile/2.2/language/cps/prune-bailouts.scm +86 -0
- data/share/guile/2.2/language/cps/prune-top-level-scopes.scm +63 -0
- data/share/guile/2.2/language/cps/reify-primitives.scm +179 -0
- data/share/guile/2.2/language/cps/renumber.scm +217 -0
- data/share/guile/2.2/language/cps/rotate-loops.scm +239 -0
- data/share/guile/2.2/language/cps/self-references.scm +79 -0
- data/share/guile/2.2/language/cps/simplify.scm +274 -0
- data/share/guile/2.2/language/cps/slot-allocation.scm +1058 -0
- data/share/guile/2.2/language/cps/spec.scm +51 -0
- data/share/guile/2.2/language/cps/specialize-numbers.scm +724 -0
- data/share/guile/2.2/language/cps/specialize-primcalls.scm +87 -0
- data/share/guile/2.2/language/cps/split-rec.scm +174 -0
- data/share/guile/2.2/language/cps/type-checks.scm +72 -0
- data/share/guile/2.2/language/cps/type-fold.scm +455 -0
- data/share/guile/2.2/language/cps/types.scm +1826 -0
- data/share/guile/2.2/language/cps/utils.scm +550 -0
- data/share/guile/2.2/language/cps/verify.scm +304 -0
- data/share/guile/2.2/language/cps/with-cps.scm +145 -0
- data/share/guile/2.2/language/cps.scm +358 -0
- data/share/guile/2.2/language/ecmascript/array.scm +121 -0
- data/share/guile/2.2/language/ecmascript/base.scm +251 -0
- data/share/guile/2.2/language/ecmascript/compile-tree-il.scm +576 -0
- data/share/guile/2.2/language/ecmascript/function.scm +78 -0
- data/share/guile/2.2/language/ecmascript/impl.scm +169 -0
- data/share/guile/2.2/language/ecmascript/parse.scm +352 -0
- data/share/guile/2.2/language/ecmascript/spec.scm +37 -0
- data/share/guile/2.2/language/ecmascript/tokenize.scm +513 -0
- data/share/guile/2.2/language/elisp/bindings.scm +107 -0
- data/share/guile/2.2/language/elisp/boot.el +617 -0
- data/share/guile/2.2/language/elisp/compile-tree-il.scm +812 -0
- data/share/guile/2.2/language/elisp/falias.scm +47 -0
- data/share/guile/2.2/language/elisp/lexer.scm +430 -0
- data/share/guile/2.2/language/elisp/parser.scm +222 -0
- data/share/guile/2.2/language/elisp/runtime/function-slot.scm +63 -0
- data/share/guile/2.2/language/elisp/runtime/value-slot.scm +24 -0
- data/share/guile/2.2/language/elisp/runtime.scm +153 -0
- data/share/guile/2.2/language/elisp/spec.scm +43 -0
- data/share/guile/2.2/language/scheme/compile-tree-il.scm +33 -0
- data/share/guile/2.2/language/scheme/decompile-tree-il.scm +796 -0
- data/share/guile/2.2/language/scheme/spec.scm +63 -0
- data/share/guile/2.2/language/tree-il/analyze.scm +1568 -0
- data/share/guile/2.2/language/tree-il/canonicalize.scm +82 -0
- data/share/guile/2.2/language/tree-il/compile-cps.scm +1149 -0
- data/share/guile/2.2/language/tree-il/debug.scm +246 -0
- data/share/guile/2.2/language/tree-il/effects.scm +591 -0
- data/share/guile/2.2/language/tree-il/fix-letrec.scm +314 -0
- data/share/guile/2.2/language/tree-il/optimize.scm +43 -0
- data/share/guile/2.2/language/tree-il/peval.scm +1669 -0
- data/share/guile/2.2/language/tree-il/primitives.scm +630 -0
- data/share/guile/2.2/language/tree-il/spec.scm +46 -0
- data/share/guile/2.2/language/tree-il.scm +630 -0
- data/share/guile/2.2/language/value/spec.scm +30 -0
- data/share/guile/2.2/oop/goops/accessors.scm +72 -0
- data/share/guile/2.2/oop/goops/active-slot.scm +63 -0
- data/share/guile/2.2/oop/goops/composite-slot.scm +83 -0
- data/share/guile/2.2/oop/goops/describe.scm +189 -0
- data/share/guile/2.2/oop/goops/internal.scm +30 -0
- data/share/guile/2.2/oop/goops/save.scm +874 -0
- data/share/guile/2.2/oop/goops/simple.scm +30 -0
- data/share/guile/2.2/oop/goops/stklos.scm +74 -0
- data/share/guile/2.2/oop/goops.scm +3176 -0
- data/share/guile/2.2/rnrs/arithmetic/bitwise.scm +92 -0
- data/share/guile/2.2/rnrs/arithmetic/fixnums.scm +291 -0
- data/share/guile/2.2/rnrs/arithmetic/flonums.scm +203 -0
- data/share/guile/2.2/rnrs/base.scm +291 -0
- data/share/guile/2.2/rnrs/bytevectors.scm +83 -0
- data/share/guile/2.2/rnrs/conditions.scm +225 -0
- data/share/guile/2.2/rnrs/control.scm +22 -0
- data/share/guile/2.2/rnrs/enums.scm +152 -0
- data/share/guile/2.2/rnrs/eval.scm +39 -0
- data/share/guile/2.2/rnrs/exceptions.scm +276 -0
- data/share/guile/2.2/rnrs/files.scm +96 -0
- data/share/guile/2.2/rnrs/hashtables.scm +190 -0
- data/share/guile/2.2/rnrs/io/ports.scm +554 -0
- data/share/guile/2.2/rnrs/io/simple.scm +167 -0
- data/share/guile/2.2/rnrs/lists.scm +55 -0
- data/share/guile/2.2/rnrs/mutable-pairs.scm +23 -0
- data/share/guile/2.2/rnrs/mutable-strings.scm +23 -0
- data/share/guile/2.2/rnrs/programs.scm +22 -0
- data/share/guile/2.2/rnrs/r5rs.scm +34 -0
- data/share/guile/2.2/rnrs/records/inspection.scm +81 -0
- data/share/guile/2.2/rnrs/records/procedural.scm +289 -0
- data/share/guile/2.2/rnrs/records/syntactic.scm +248 -0
- data/share/guile/2.2/rnrs/sorting.scm +27 -0
- data/share/guile/2.2/rnrs/syntax-case.scm +68 -0
- data/share/guile/2.2/rnrs/unicode.scm +104 -0
- data/share/guile/2.2/rnrs.scm +289 -0
- data/share/guile/2.2/scripts/api-diff.scm +179 -0
- data/share/guile/2.2/scripts/autofrisk.scm +218 -0
- data/share/guile/2.2/scripts/compile.scm +273 -0
- data/share/guile/2.2/scripts/disassemble.scm +38 -0
- data/share/guile/2.2/scripts/display-commentary.scm +67 -0
- data/share/guile/2.2/scripts/doc-snarf.scm +439 -0
- data/share/guile/2.2/scripts/frisk.scm +290 -0
- data/share/guile/2.2/scripts/generate-autoload.scm +144 -0
- data/share/guile/2.2/scripts/help.scm +188 -0
- data/share/guile/2.2/scripts/lint.scm +318 -0
- data/share/guile/2.2/scripts/list.scm +91 -0
- data/share/guile/2.2/scripts/punify.scm +87 -0
- data/share/guile/2.2/scripts/read-rfc822.scm +131 -0
- data/share/guile/2.2/scripts/read-scheme-source.scm +282 -0
- data/share/guile/2.2/scripts/read-text-outline.scm +253 -0
- data/share/guile/2.2/scripts/scan-api.scm +223 -0
- data/share/guile/2.2/scripts/snarf-check-and-output-texi.scm +303 -0
- data/share/guile/2.2/scripts/snarf-guile-m4-docs.scm +86 -0
- data/share/guile/2.2/scripts/summarize-guile-TODO.scm +213 -0
- data/share/guile/2.2/scripts/use2dot.scm +110 -0
- data/share/guile/2.2/srfi/srfi-1.scm +1061 -0
- data/share/guile/2.2/srfi/srfi-10.scm +89 -0
- data/share/guile/2.2/srfi/srfi-11.scm +146 -0
- data/share/guile/2.2/srfi/srfi-111.scm +37 -0
- data/share/guile/2.2/srfi/srfi-13.scm +132 -0
- data/share/guile/2.2/srfi/srfi-14.scm +99 -0
- data/share/guile/2.2/srfi/srfi-16.scm +51 -0
- data/share/guile/2.2/srfi/srfi-17.scm +174 -0
- data/share/guile/2.2/srfi/srfi-18.scm +382 -0
- data/share/guile/2.2/srfi/srfi-19.scm +1470 -0
- data/share/guile/2.2/srfi/srfi-2.scm +31 -0
- data/share/guile/2.2/srfi/srfi-26.scm +66 -0
- data/share/guile/2.2/srfi/srfi-27.scm +96 -0
- data/share/guile/2.2/srfi/srfi-28.scm +34 -0
- data/share/guile/2.2/srfi/srfi-31.scm +35 -0
- data/share/guile/2.2/srfi/srfi-34.scm +84 -0
- data/share/guile/2.2/srfi/srfi-35.scm +351 -0
- data/share/guile/2.2/srfi/srfi-37.scm +234 -0
- data/share/guile/2.2/srfi/srfi-38.scm +207 -0
- data/share/guile/2.2/srfi/srfi-39.scm +55 -0
- data/share/guile/2.2/srfi/srfi-4/gnu.scm +80 -0
- data/share/guile/2.2/srfi/srfi-4.scm +118 -0
- data/share/guile/2.2/srfi/srfi-41.scm +505 -0
- data/share/guile/2.2/srfi/srfi-42/ec.scm +1053 -0
- data/share/guile/2.2/srfi/srfi-42.scm +66 -0
- data/share/guile/2.2/srfi/srfi-43.scm +1077 -0
- data/share/guile/2.2/srfi/srfi-45.scm +93 -0
- data/share/guile/2.2/srfi/srfi-6.scm +29 -0
- data/share/guile/2.2/srfi/srfi-60.scm +73 -0
- data/share/guile/2.2/srfi/srfi-64/testing.scm +1040 -0
- data/share/guile/2.2/srfi/srfi-64.scm +55 -0
- data/share/guile/2.2/srfi/srfi-67/compare.scm +686 -0
- data/share/guile/2.2/srfi/srfi-67.scm +88 -0
- data/share/guile/2.2/srfi/srfi-69.scm +336 -0
- data/share/guile/2.2/srfi/srfi-71.scm +267 -0
- data/share/guile/2.2/srfi/srfi-8.scm +31 -0
- data/share/guile/2.2/srfi/srfi-88.scm +53 -0
- data/share/guile/2.2/srfi/srfi-9/gnu.scm +168 -0
- data/share/guile/2.2/srfi/srfi-9.scm +351 -0
- data/share/guile/2.2/srfi/srfi-98.scm +44 -0
- data/share/guile/2.2/statprof.scm +988 -0
- data/share/guile/2.2/sxml/apply-templates.scm +102 -0
- data/share/guile/2.2/sxml/fold.scm +250 -0
- data/share/guile/2.2/sxml/match.scm +75 -0
- data/share/guile/2.2/sxml/simple.scm +408 -0
- data/share/guile/2.2/sxml/ssax/input-parse.scm +180 -0
- data/share/guile/2.2/sxml/ssax.scm +265 -0
- data/share/guile/2.2/sxml/sxml-match.ss +1181 -0
- data/share/guile/2.2/sxml/transform.scm +298 -0
- data/share/guile/2.2/sxml/upstream/SSAX.scm +3235 -0
- data/share/guile/2.2/sxml/upstream/SXML-tree-trans.scm +249 -0
- data/share/guile/2.2/sxml/upstream/SXPath-old.scm +1216 -0
- data/share/guile/2.2/sxml/upstream/assert.scm +35 -0
- data/share/guile/2.2/sxml/upstream/input-parse.scm +326 -0
- data/share/guile/2.2/sxml/xpath.scm +493 -0
- data/share/guile/2.2/system/base/ck.scm +55 -0
- data/share/guile/2.2/system/base/compile.scm +282 -0
- data/share/guile/2.2/system/base/lalr.scm +51 -0
- data/share/guile/2.2/system/base/lalr.upstream.scm +2096 -0
- data/share/guile/2.2/system/base/language.scm +119 -0
- data/share/guile/2.2/system/base/message.scm +238 -0
- data/share/guile/2.2/system/base/pmatch.scm +68 -0
- data/share/guile/2.2/system/base/syntax.scm +299 -0
- data/share/guile/2.2/system/base/target.scm +152 -0
- data/share/guile/2.2/system/base/types.scm +561 -0
- data/share/guile/2.2/system/foreign-object.scm +91 -0
- data/share/guile/2.2/system/foreign.scm +200 -0
- data/share/guile/2.2/system/repl/command.scm +946 -0
- data/share/guile/2.2/system/repl/common.scm +263 -0
- data/share/guile/2.2/system/repl/coop-server.scm +200 -0
- data/share/guile/2.2/system/repl/debug.scm +210 -0
- data/share/guile/2.2/system/repl/describe.scm +347 -0
- data/share/guile/2.2/system/repl/error-handling.scm +183 -0
- data/share/guile/2.2/system/repl/repl.scm +233 -0
- data/share/guile/2.2/system/repl/server.scm +332 -0
- data/share/guile/2.2/system/syntax.scm +33 -0
- data/share/guile/2.2/system/vm/assembler.scm +2614 -0
- data/share/guile/2.2/system/vm/coverage.scm +351 -0
- data/share/guile/2.2/system/vm/debug.scm +766 -0
- data/share/guile/2.2/system/vm/disassembler.scm +658 -0
- data/share/guile/2.2/system/vm/dwarf.scm +1852 -0
- data/share/guile/2.2/system/vm/elf.scm +1042 -0
- data/share/guile/2.2/system/vm/frame.scm +485 -0
- data/share/guile/2.2/system/vm/inspect.scm +188 -0
- data/share/guile/2.2/system/vm/linker.scm +732 -0
- data/share/guile/2.2/system/vm/loader.scm +27 -0
- data/share/guile/2.2/system/vm/program.scm +312 -0
- data/share/guile/2.2/system/vm/trace.scm +121 -0
- data/share/guile/2.2/system/vm/trap-state.scm +302 -0
- data/share/guile/2.2/system/vm/traps.scm +608 -0
- data/share/guile/2.2/system/vm/vm.scm +32 -0
- data/share/guile/2.2/system/xref.scm +369 -0
- data/share/guile/2.2/texinfo/docbook.scm +240 -0
- data/share/guile/2.2/texinfo/html.scm +279 -0
- data/share/guile/2.2/texinfo/indexing.scm +75 -0
- data/share/guile/2.2/texinfo/plain-text.scm +322 -0
- data/share/guile/2.2/texinfo/reflection.scm +585 -0
- data/share/guile/2.2/texinfo/serialize.scm +300 -0
- data/share/guile/2.2/texinfo/string-utils.scm +410 -0
- data/share/guile/2.2/texinfo.scm +1263 -0
- data/share/guile/2.2/web/client.scm +513 -0
- data/share/guile/2.2/web/http.scm +2043 -0
- data/share/guile/2.2/web/request.scm +326 -0
- data/share/guile/2.2/web/response.scm +379 -0
- data/share/guile/2.2/web/server/http.scm +183 -0
- data/share/guile/2.2/web/server.scm +397 -0
- data/share/guile/2.2/web/uri.scm +552 -0
- data/share/lilypond/2.24.1/fontconfig/0bd3dc0958fa2205aaaa8ebb13e2872b-le64.cache-8 +0 -0
- data/share/lilypond/2.24.1/fontconfig/188ac73a183f12857f63bb60a4a6d603-le64.cache-8 +0 -0
- data/share/lilypond/2.24.1/fontconfig/32b6488e5b8292a2e95c79d947e009e8-le64.cache-8 +0 -0
- data/share/lilypond/2.24.1/fontconfig/3830d5c3ddfd5cd38a049b759396e72e-le64.cache-8 +0 -0
- data/share/lilypond/2.24.1/fontconfig/3f7329c5293ffd510edef78f73874cfd-le64.cache-8 +0 -0
- data/share/lilypond/2.24.1/fontconfig/4c599c202bc5c08e2d34565a40eac3b2-le64.cache-8 +0 -0
- data/share/lilypond/2.24.1/fontconfig/57e423e26b20ab21d0f2f29c145174c3-le64.cache-8 +0 -0
- data/share/lilypond/2.24.1/fontconfig/7ef2298fde41cc6eeb7af42e48b7d293-le64.cache-8 +0 -0
- data/share/lilypond/2.24.1/fontconfig/826f6b6ef79022e2eac8af26bf4b62f2-le64.cache-8 +0 -0
- data/share/lilypond/2.24.1/fontconfig/945677eb7aeaf62f1d50efc3fb3ec7d8-le64.cache-8 +0 -0
- data/share/lilypond/2.24.1/fontconfig/95530828ff6c81d309f8258d8d02a23e-le64.cache-8 +0 -0
- data/share/lilypond/2.24.1/fontconfig/CACHEDIR.TAG +4 -0
- data/share/lilypond/2.24.1/fontconfig/bf3b770c553c462765856025a94f1ce6-le64.cache-8 +0 -0
- data/share/lilypond/2.24.1/fontconfig/c855463f699352c367813e37f3f70ea7-le64.cache-8 +0 -0
- data/share/lilypond/2.24.1/fontconfig/d3e5c4ee2ceb1fc347f91d4cefc53bc0-le64.cache-8 +0 -0
- data/share/lilypond/2.24.1/fontconfig/d589a48862398ed80a3d6066f4f56f4c-le64.cache-8 +0 -0
- data/share/lilypond/2.24.1/fontconfig/d82eb4fd963d448e2fcb7d7b793b5df3-le64.cache-8 +0 -0
- data/share/lilypond/2.24.1/fontconfig/e13b20fdb08344e0e664864cc2ede53d-le64.cache-8 +0 -0
- data/share/lilypond/2.24.1/fontconfig/e52a45a1c8c8fe895fc0fc8c4e6999b8-le64.cache-8 +0 -0
- data/share/lilypond/2.24.1/fontconfig/f1f2465696798768e9653f19e17ccdc8-le64.cache-8 +0 -0
- data/share/lilypond/2.24.1/fonts/00-lilypond-fonts.conf +99 -0
- data/share/lilypond/2.24.1/fonts/99-lilypond-fonts.conf +28 -0
- data/share/lilypond/2.24.1/fonts/otf/C059-BdIta.otf +0 -0
- data/share/lilypond/2.24.1/fonts/otf/C059-Bold.otf +0 -0
- data/share/lilypond/2.24.1/fonts/otf/C059-Italic.otf +0 -0
- data/share/lilypond/2.24.1/fonts/otf/C059-Roman.otf +0 -0
- data/share/lilypond/2.24.1/fonts/otf/NimbusMonoPS-Bold.otf +0 -0
- data/share/lilypond/2.24.1/fonts/otf/NimbusMonoPS-BoldItalic.otf +0 -0
- data/share/lilypond/2.24.1/fonts/otf/NimbusMonoPS-Italic.otf +0 -0
- data/share/lilypond/2.24.1/fonts/otf/NimbusMonoPS-Regular.otf +0 -0
- data/share/lilypond/2.24.1/fonts/otf/NimbusSans-Bold.otf +0 -0
- data/share/lilypond/2.24.1/fonts/otf/NimbusSans-BoldItalic.otf +0 -0
- data/share/lilypond/2.24.1/fonts/otf/NimbusSans-Italic.otf +0 -0
- data/share/lilypond/2.24.1/fonts/otf/NimbusSans-Regular.otf +0 -0
- data/share/lilypond/2.24.1/fonts/otf/emmentaler-11.otf +0 -0
- data/share/lilypond/2.24.1/fonts/otf/emmentaler-13.otf +0 -0
- data/share/lilypond/2.24.1/fonts/otf/emmentaler-14.otf +0 -0
- data/share/lilypond/2.24.1/fonts/otf/emmentaler-16.otf +0 -0
- data/share/lilypond/2.24.1/fonts/otf/emmentaler-18.otf +0 -0
- data/share/lilypond/2.24.1/fonts/otf/emmentaler-20.otf +0 -0
- data/share/lilypond/2.24.1/fonts/otf/emmentaler-23.otf +0 -0
- data/share/lilypond/2.24.1/fonts/otf/emmentaler-26.otf +0 -0
- data/share/lilypond/2.24.1/fonts/otf/emmentaler-brace.otf +0 -0
- data/share/lilypond/2.24.1/fonts/otf/texgyrecursor-bold.otf +0 -0
- data/share/lilypond/2.24.1/fonts/otf/texgyrecursor-bolditalic.otf +0 -0
- data/share/lilypond/2.24.1/fonts/otf/texgyrecursor-italic.otf +0 -0
- data/share/lilypond/2.24.1/fonts/otf/texgyrecursor-regular.otf +0 -0
- data/share/lilypond/2.24.1/fonts/otf/texgyreheros-bold.otf +0 -0
- data/share/lilypond/2.24.1/fonts/otf/texgyreheros-bolditalic.otf +0 -0
- data/share/lilypond/2.24.1/fonts/otf/texgyreheros-italic.otf +0 -0
- data/share/lilypond/2.24.1/fonts/otf/texgyreheros-regular.otf +0 -0
- data/share/lilypond/2.24.1/fonts/otf/texgyreschola-bold.otf +0 -0
- data/share/lilypond/2.24.1/fonts/otf/texgyreschola-bolditalic.otf +0 -0
- data/share/lilypond/2.24.1/fonts/otf/texgyreschola-italic.otf +0 -0
- data/share/lilypond/2.24.1/fonts/otf/texgyreschola-regular.otf +0 -0
- data/share/lilypond/2.24.1/fonts/source/common-modules-and-initialization.mf +26 -0
- data/share/lilypond/2.24.1/fonts/source/debugging-settings.mf +14 -0
- data/share/lilypond/2.24.1/fonts/source/declare-autometric-parameters.mf +9 -0
- data/share/lilypond/2.24.1/fonts/source/feta-accidentals.mf +58 -0
- data/share/lilypond/2.24.1/fonts/source/feta-accordion.mf +575 -0
- data/share/lilypond/2.24.1/fonts/source/feta-alphabet-generic.mf +16 -0
- data/share/lilypond/2.24.1/fonts/source/feta-alphabet11.mf +6 -0
- data/share/lilypond/2.24.1/fonts/source/feta-alphabet13.mf +6 -0
- data/share/lilypond/2.24.1/fonts/source/feta-alphabet14.mf +6 -0
- data/share/lilypond/2.24.1/fonts/source/feta-alphabet16.mf +6 -0
- data/share/lilypond/2.24.1/fonts/source/feta-alphabet18.mf +6 -0
- data/share/lilypond/2.24.1/fonts/source/feta-alphabet20.mf +6 -0
- data/share/lilypond/2.24.1/fonts/source/feta-alphabet23.mf +6 -0
- data/share/lilypond/2.24.1/fonts/source/feta-alphabet26.mf +6 -0
- data/share/lilypond/2.24.1/fonts/source/feta-arrow.mf +114 -0
- data/share/lilypond/2.24.1/fonts/source/feta-arrowheads.mf +171 -0
- data/share/lilypond/2.24.1/fonts/source/feta-autometric.mf +303 -0
- data/share/lilypond/2.24.1/fonts/source/feta-braces-a.mf +6 -0
- data/share/lilypond/2.24.1/fonts/source/feta-braces-b.mf +6 -0
- data/share/lilypond/2.24.1/fonts/source/feta-braces-c.mf +6 -0
- data/share/lilypond/2.24.1/fonts/source/feta-braces-d.mf +6 -0
- data/share/lilypond/2.24.1/fonts/source/feta-braces-e.mf +6 -0
- data/share/lilypond/2.24.1/fonts/source/feta-braces-f.mf +6 -0
- data/share/lilypond/2.24.1/fonts/source/feta-braces-g.mf +6 -0
- data/share/lilypond/2.24.1/fonts/source/feta-braces-generic.mf +47 -0
- data/share/lilypond/2.24.1/fonts/source/feta-braces-h.mf +6 -0
- data/share/lilypond/2.24.1/fonts/source/feta-braces-i.mf +6 -0
- data/share/lilypond/2.24.1/fonts/source/feta-braces.mf +125 -0
- data/share/lilypond/2.24.1/fonts/source/feta-brackettips.mf +100 -0
- data/share/lilypond/2.24.1/fonts/source/feta-clefs.mf +963 -0
- data/share/lilypond/2.24.1/fonts/source/feta-dots.mf +37 -0
- data/share/lilypond/2.24.1/fonts/source/feta-dynamics.mf +891 -0
- data/share/lilypond/2.24.1/fonts/source/feta-flags-generic.mf +17 -0
- data/share/lilypond/2.24.1/fonts/source/feta-flags.mf +926 -0
- data/share/lilypond/2.24.1/fonts/source/feta-flags11.mf +6 -0
- data/share/lilypond/2.24.1/fonts/source/feta-flags13.mf +6 -0
- data/share/lilypond/2.24.1/fonts/source/feta-flags14.mf +6 -0
- data/share/lilypond/2.24.1/fonts/source/feta-flags16.mf +6 -0
- data/share/lilypond/2.24.1/fonts/source/feta-flags18.mf +6 -0
- data/share/lilypond/2.24.1/fonts/source/feta-flags20.mf +6 -0
- data/share/lilypond/2.24.1/fonts/source/feta-flags23.mf +6 -0
- data/share/lilypond/2.24.1/fonts/source/feta-flags26.mf +6 -0
- data/share/lilypond/2.24.1/fonts/source/feta-flats.mf +668 -0
- data/share/lilypond/2.24.1/fonts/source/feta-macros.mf +506 -0
- data/share/lilypond/2.24.1/fonts/source/feta-naturals.mf +223 -0
- data/share/lilypond/2.24.1/fonts/source/feta-noteheads-generic.mf +17 -0
- data/share/lilypond/2.24.1/fonts/source/feta-noteheads.mf +2642 -0
- data/share/lilypond/2.24.1/fonts/source/feta-noteheads11.mf +6 -0
- data/share/lilypond/2.24.1/fonts/source/feta-noteheads13.mf +6 -0
- data/share/lilypond/2.24.1/fonts/source/feta-noteheads14.mf +6 -0
- data/share/lilypond/2.24.1/fonts/source/feta-noteheads16.mf +6 -0
- data/share/lilypond/2.24.1/fonts/source/feta-noteheads18.mf +6 -0
- data/share/lilypond/2.24.1/fonts/source/feta-noteheads20.mf +6 -0
- data/share/lilypond/2.24.1/fonts/source/feta-noteheads23.mf +6 -0
- data/share/lilypond/2.24.1/fonts/source/feta-noteheads26.mf +6 -0
- data/share/lilypond/2.24.1/fonts/source/feta-numbers.mf +1677 -0
- data/share/lilypond/2.24.1/fonts/source/feta-other-generic.mf +27 -0
- data/share/lilypond/2.24.1/fonts/source/feta-params.mf +323 -0
- data/share/lilypond/2.24.1/fonts/source/feta-parenthesis.mf +63 -0
- data/share/lilypond/2.24.1/fonts/source/feta-pedals.mf +355 -0
- data/share/lilypond/2.24.1/fonts/source/feta-rests.mf +890 -0
- data/share/lilypond/2.24.1/fonts/source/feta-scripts.mf +2206 -0
- data/share/lilypond/2.24.1/fonts/source/feta-sharps.mf +524 -0
- data/share/lilypond/2.24.1/fonts/source/feta-sori-koron.mf +325 -0
- data/share/lilypond/2.24.1/fonts/source/feta-ties.mf +72 -0
- data/share/lilypond/2.24.1/fonts/source/feta-timesignatures.mf +119 -0
- data/share/lilypond/2.24.1/fonts/source/feta-trills.mf +321 -0
- data/share/lilypond/2.24.1/fonts/source/feta11.mf +6 -0
- data/share/lilypond/2.24.1/fonts/source/feta13.mf +6 -0
- data/share/lilypond/2.24.1/fonts/source/feta14.mf +6 -0
- data/share/lilypond/2.24.1/fonts/source/feta16.mf +6 -0
- data/share/lilypond/2.24.1/fonts/source/feta18.mf +6 -0
- data/share/lilypond/2.24.1/fonts/source/feta20.mf +7 -0
- data/share/lilypond/2.24.1/fonts/source/feta23.mf +6 -0
- data/share/lilypond/2.24.1/fonts/source/feta26.mf +6 -0
- data/share/lilypond/2.24.1/fonts/source/parmesan-accidentals.mf +483 -0
- data/share/lilypond/2.24.1/fonts/source/parmesan-clefs.mf +1636 -0
- data/share/lilypond/2.24.1/fonts/source/parmesan-custodes.mf +503 -0
- data/share/lilypond/2.24.1/fonts/source/parmesan-dots.mf +62 -0
- data/share/lilypond/2.24.1/fonts/source/parmesan-flags.mf +319 -0
- data/share/lilypond/2.24.1/fonts/source/parmesan-macros.mf +225 -0
- data/share/lilypond/2.24.1/fonts/source/parmesan-noteheads-generic.mf +16 -0
- data/share/lilypond/2.24.1/fonts/source/parmesan-noteheads.mf +2191 -0
- data/share/lilypond/2.24.1/fonts/source/parmesan-noteheads11.mf +6 -0
- data/share/lilypond/2.24.1/fonts/source/parmesan-noteheads13.mf +6 -0
- data/share/lilypond/2.24.1/fonts/source/parmesan-noteheads14.mf +6 -0
- data/share/lilypond/2.24.1/fonts/source/parmesan-noteheads16.mf +6 -0
- data/share/lilypond/2.24.1/fonts/source/parmesan-noteheads18.mf +6 -0
- data/share/lilypond/2.24.1/fonts/source/parmesan-noteheads20.mf +6 -0
- data/share/lilypond/2.24.1/fonts/source/parmesan-noteheads23.mf +6 -0
- data/share/lilypond/2.24.1/fonts/source/parmesan-noteheads26.mf +6 -0
- data/share/lilypond/2.24.1/fonts/source/parmesan-other-generic.mf +24 -0
- data/share/lilypond/2.24.1/fonts/source/parmesan-rests.mf +428 -0
- data/share/lilypond/2.24.1/fonts/source/parmesan-scripts.mf +284 -0
- data/share/lilypond/2.24.1/fonts/source/parmesan-timesignatures.mf +402 -0
- data/share/lilypond/2.24.1/fonts/source/parmesan11.mf +6 -0
- data/share/lilypond/2.24.1/fonts/source/parmesan13.mf +6 -0
- data/share/lilypond/2.24.1/fonts/source/parmesan14.mf +6 -0
- data/share/lilypond/2.24.1/fonts/source/parmesan16.mf +6 -0
- data/share/lilypond/2.24.1/fonts/source/parmesan18.mf +6 -0
- data/share/lilypond/2.24.1/fonts/source/parmesan20.mf +6 -0
- data/share/lilypond/2.24.1/fonts/source/parmesan23.mf +6 -0
- data/share/lilypond/2.24.1/fonts/source/parmesan26.mf +6 -0
- data/share/lilypond/2.24.1/fonts/svg/emmentaler-11.svg +2525 -0
- data/share/lilypond/2.24.1/fonts/svg/emmentaler-11.woff +0 -0
- data/share/lilypond/2.24.1/fonts/svg/emmentaler-13.svg +2530 -0
- data/share/lilypond/2.24.1/fonts/svg/emmentaler-13.woff +0 -0
- data/share/lilypond/2.24.1/fonts/svg/emmentaler-14.svg +2526 -0
- data/share/lilypond/2.24.1/fonts/svg/emmentaler-14.woff +0 -0
- data/share/lilypond/2.24.1/fonts/svg/emmentaler-16.svg +2523 -0
- data/share/lilypond/2.24.1/fonts/svg/emmentaler-16.woff +0 -0
- data/share/lilypond/2.24.1/fonts/svg/emmentaler-18.svg +2519 -0
- data/share/lilypond/2.24.1/fonts/svg/emmentaler-18.woff +0 -0
- data/share/lilypond/2.24.1/fonts/svg/emmentaler-20.svg +2512 -0
- data/share/lilypond/2.24.1/fonts/svg/emmentaler-20.woff +0 -0
- data/share/lilypond/2.24.1/fonts/svg/emmentaler-23.svg +2506 -0
- data/share/lilypond/2.24.1/fonts/svg/emmentaler-23.woff +0 -0
- data/share/lilypond/2.24.1/fonts/svg/emmentaler-26.svg +2510 -0
- data/share/lilypond/2.24.1/fonts/svg/emmentaler-26.woff +0 -0
- data/share/lilypond/2.24.1/fonts/svg/emmentaler-brace.svg +1757 -0
- data/share/lilypond/2.24.1/fonts/svg/emmentaler-brace.woff +0 -0
- data/share/lilypond/2.24.1/ly/Welcome_to_LilyPond.ly +45 -0
- data/share/lilypond/2.24.1/ly/arabic.ly +185 -0
- data/share/lilypond/2.24.1/ly/articulate.ly +1013 -0
- data/share/lilypond/2.24.1/ly/bagpipe.ly +368 -0
- data/share/lilypond/2.24.1/ly/base-tkit.ly +135 -0
- data/share/lilypond/2.24.1/ly/catalan.ly +23 -0
- data/share/lilypond/2.24.1/ly/chord-modifiers-init.ly +63 -0
- data/share/lilypond/2.24.1/ly/chord-repetition-init.ly +60 -0
- data/share/lilypond/2.24.1/ly/context-mods-init.ly +119 -0
- data/share/lilypond/2.24.1/ly/declarations-init.ly +167 -0
- data/share/lilypond/2.24.1/ly/deutsch.ly +23 -0
- data/share/lilypond/2.24.1/ly/drumpitch-init.ly +366 -0
- data/share/lilypond/2.24.1/ly/dynamic-scripts-init.ly +54 -0
- data/share/lilypond/2.24.1/ly/english.ly +23 -0
- data/share/lilypond/2.24.1/ly/engraver-init.ly +1619 -0
- data/share/lilypond/2.24.1/ly/espanol.ly +23 -0
- data/share/lilypond/2.24.1/ly/event-listener.ly +241 -0
- data/share/lilypond/2.24.1/ly/festival.ly +38 -0
- data/share/lilypond/2.24.1/ly/generate-documentation.ly +7 -0
- data/share/lilypond/2.24.1/ly/grace-init.ly +56 -0
- data/share/lilypond/2.24.1/ly/graphviz-init.ly +174 -0
- data/share/lilypond/2.24.1/ly/gregorian.ly +268 -0
- data/share/lilypond/2.24.1/ly/guile-debugger.ly +55 -0
- data/share/lilypond/2.24.1/ly/hel-arabic.ly +307 -0
- data/share/lilypond/2.24.1/ly/init.ly +96 -0
- data/share/lilypond/2.24.1/ly/italiano.ly +23 -0
- data/share/lilypond/2.24.1/ly/lilypond-book-preamble.ly +47 -0
- data/share/lilypond/2.24.1/ly/lyrics-tkit.ly +68 -0
- data/share/lilypond/2.24.1/ly/makam.ly +166 -0
- data/share/lilypond/2.24.1/ly/midi-init.ly +59 -0
- data/share/lilypond/2.24.1/ly/music-functions-init.ly +2254 -0
- data/share/lilypond/2.24.1/ly/nederlands.ly +23 -0
- data/share/lilypond/2.24.1/ly/norsk.ly +23 -0
- data/share/lilypond/2.24.1/ly/paper-defaults-init.ly +188 -0
- data/share/lilypond/2.24.1/ly/performer-init.ly +398 -0
- data/share/lilypond/2.24.1/ly/persian.ly +335 -0
- data/share/lilypond/2.24.1/ly/piano-tkit.ly +61 -0
- data/share/lilypond/2.24.1/ly/portugues.ly +23 -0
- data/share/lilypond/2.24.1/ly/predefined-fretboards-init.ly +78 -0
- data/share/lilypond/2.24.1/ly/predefined-guitar-fretboards.ly +506 -0
- data/share/lilypond/2.24.1/ly/predefined-guitar-ninth-fretboards.ly +75 -0
- data/share/lilypond/2.24.1/ly/predefined-mandolin-fretboards.ly +876 -0
- data/share/lilypond/2.24.1/ly/predefined-ukulele-fretboards.ly +1285 -0
- data/share/lilypond/2.24.1/ly/property-init.ly +858 -0
- data/share/lilypond/2.24.1/ly/satb.ly +214 -0
- data/share/lilypond/2.24.1/ly/scale-definitions-init.ly +117 -0
- data/share/lilypond/2.24.1/ly/scheme-sandbox.ly +39 -0
- data/share/lilypond/2.24.1/ly/script-init.ly +94 -0
- data/share/lilypond/2.24.1/ly/spanners-init.ly +146 -0
- data/share/lilypond/2.24.1/ly/ssaattbb.ly +335 -0
- data/share/lilypond/2.24.1/ly/staff-tkit.ly +182 -0
- data/share/lilypond/2.24.1/ly/string-tunings-init.ly +94 -0
- data/share/lilypond/2.24.1/ly/suomi.ly +23 -0
- data/share/lilypond/2.24.1/ly/svenska.ly +23 -0
- data/share/lilypond/2.24.1/ly/swing.ly +362 -0
- data/share/lilypond/2.24.1/ly/text-replacements.ly +150 -0
- data/share/lilypond/2.24.1/ly/titling-init.ly +150 -0
- data/share/lilypond/2.24.1/ly/toc-init.ly +182 -0
- data/share/lilypond/2.24.1/ly/turkish-makam.ly +609 -0
- data/share/lilypond/2.24.1/ly/vlaams.ly +23 -0
- data/share/lilypond/2.24.1/ly/vocal-tkit.ly +103 -0
- data/share/lilypond/2.24.1/ly/voice-tkit.ly +34 -0
- data/share/lilypond/2.24.1/ps/encodingdefs.ps +2611 -0
- data/share/lilypond/2.24.1/ps/lilyponddefs.ps +49 -0
- data/share/lilypond/2.24.1/ps/music-drawing-routines.ps +329 -0
- data/share/lilypond/2.24.1/python/__pycache__/book_base.cpython-310.pyc +0 -0
- data/share/lilypond/2.24.1/python/__pycache__/book_docbook.cpython-310.pyc +0 -0
- data/share/lilypond/2.24.1/python/__pycache__/book_html.cpython-310.pyc +0 -0
- data/share/lilypond/2.24.1/python/__pycache__/book_latex.cpython-310.pyc +0 -0
- data/share/lilypond/2.24.1/python/__pycache__/book_snippets.cpython-310.pyc +0 -0
- data/share/lilypond/2.24.1/python/__pycache__/book_texinfo.cpython-310.pyc +0 -0
- data/share/lilypond/2.24.1/python/__pycache__/convertrules.cpython-310.pyc +0 -0
- data/share/lilypond/2.24.1/python/__pycache__/langdefs.cpython-310.pyc +0 -0
- data/share/lilypond/2.24.1/python/__pycache__/lilylib.cpython-310.pyc +0 -0
- data/share/lilypond/2.24.1/python/__pycache__/midi.cpython-310.pyc +0 -0
- data/share/lilypond/2.24.1/python/__pycache__/musicexp.cpython-310.pyc +0 -0
- data/share/lilypond/2.24.1/python/__pycache__/musicxml.cpython-310.pyc +0 -0
- data/share/lilypond/2.24.1/python/__pycache__/musicxml2ly_conversion.cpython-310.pyc +0 -0
- data/share/lilypond/2.24.1/python/__pycache__/utilities.cpython-310.pyc +0 -0
- data/share/lilypond/2.24.1/python/book_base.py +331 -0
- data/share/lilypond/2.24.1/python/book_docbook.py +154 -0
- data/share/lilypond/2.24.1/python/book_html.py +178 -0
- data/share/lilypond/2.24.1/python/book_latex.py +373 -0
- data/share/lilypond/2.24.1/python/book_snippets.py +1052 -0
- data/share/lilypond/2.24.1/python/book_texinfo.py +437 -0
- data/share/lilypond/2.24.1/python/convertrules.py +4764 -0
- data/share/lilypond/2.24.1/python/langdefs.py +131 -0
- data/share/lilypond/2.24.1/python/lilylib.py +141 -0
- data/share/lilypond/2.24.1/python/midi.py +212 -0
- data/share/lilypond/2.24.1/python/musicexp.py +2781 -0
- data/share/lilypond/2.24.1/python/musicxml.py +1905 -0
- data/share/lilypond/2.24.1/python/musicxml2ly_conversion.py +80 -0
- data/share/lilypond/2.24.1/python/utilities.py +280 -0
- data/share/lilypond/2.24.1/scm/lily/accreg.scm +579 -0
- data/share/lilypond/2.24.1/scm/lily/auto-beam.scm +163 -0
- data/share/lilypond/2.24.1/scm/lily/autochange.scm +100 -0
- data/share/lilypond/2.24.1/scm/lily/backend-library.scm +593 -0
- data/share/lilypond/2.24.1/scm/lily/bar-line.scm +1281 -0
- data/share/lilypond/2.24.1/scm/lily/breath.scm +74 -0
- data/share/lilypond/2.24.1/scm/lily/c++.scm +174 -0
- data/share/lilypond/2.24.1/scm/lily/chord-entry.scm +278 -0
- data/share/lilypond/2.24.1/scm/lily/chord-ignatzek-names.scm +304 -0
- data/share/lilypond/2.24.1/scm/lily/chord-name.scm +217 -0
- data/share/lilypond/2.24.1/scm/lily/clip-region.scm +87 -0
- data/share/lilypond/2.24.1/scm/lily/color.scm +757 -0
- data/share/lilypond/2.24.1/scm/lily/curried-definitions.scm +68 -0
- data/share/lilypond/2.24.1/scm/lily/define-context-properties.scm +939 -0
- data/share/lilypond/2.24.1/scm/lily/define-event-classes.scm +142 -0
- data/share/lilypond/2.24.1/scm/lily/define-grob-interfaces.scm +640 -0
- data/share/lilypond/2.24.1/scm/lily/define-grob-properties.scm +1647 -0
- data/share/lilypond/2.24.1/scm/lily/define-grobs.scm +4027 -0
- data/share/lilypond/2.24.1/scm/lily/define-markup-commands.scm +5737 -0
- data/share/lilypond/2.24.1/scm/lily/define-music-callbacks.scm +257 -0
- data/share/lilypond/2.24.1/scm/lily/define-music-display-methods.scm +1350 -0
- data/share/lilypond/2.24.1/scm/lily/define-music-properties.scm +242 -0
- data/share/lilypond/2.24.1/scm/lily/define-music-types.scm +983 -0
- data/share/lilypond/2.24.1/scm/lily/define-note-names.scm +1421 -0
- data/share/lilypond/2.24.1/scm/lily/define-stencil-commands.scm +71 -0
- data/share/lilypond/2.24.1/scm/lily/define-woodwind-diagrams.scm +1215 -0
- data/share/lilypond/2.24.1/scm/lily/display-lily.scm +315 -0
- data/share/lilypond/2.24.1/scm/lily/display-woodwind-diagrams.scm +1985 -0
- data/share/lilypond/2.24.1/scm/lily/document-backend.scm +307 -0
- data/share/lilypond/2.24.1/scm/lily/document-context-mods.scm +98 -0
- data/share/lilypond/2.24.1/scm/lily/document-functions.scm +169 -0
- data/share/lilypond/2.24.1/scm/lily/document-identifiers.scm +76 -0
- data/share/lilypond/2.24.1/scm/lily/document-markup.scm +158 -0
- data/share/lilypond/2.24.1/scm/lily/document-music.scm +146 -0
- data/share/lilypond/2.24.1/scm/lily/document-outside-staff-priorities.scm +40 -0
- data/share/lilypond/2.24.1/scm/lily/document-paper-sizes.scm +71 -0
- data/share/lilypond/2.24.1/scm/lily/document-translation.scm +318 -0
- data/share/lilypond/2.24.1/scm/lily/document-type-predicates.scm +85 -0
- data/share/lilypond/2.24.1/scm/lily/documentation-generate.scm +259 -0
- data/share/lilypond/2.24.1/scm/lily/documentation-lib.scm +207 -0
- data/share/lilypond/2.24.1/scm/lily/file-cache.scm +28 -0
- data/share/lilypond/2.24.1/scm/lily/flag-styles.scm +249 -0
- data/share/lilypond/2.24.1/scm/lily/font-encodings.scm +1242 -0
- data/share/lilypond/2.24.1/scm/lily/font.scm +303 -0
- data/share/lilypond/2.24.1/scm/lily/framework-cairo.scm +26 -0
- data/share/lilypond/2.24.1/scm/lily/framework-ps.scm +896 -0
- data/share/lilypond/2.24.1/scm/lily/framework-svg.scm +172 -0
- data/share/lilypond/2.24.1/scm/lily/fret-diagrams.scm +1261 -0
- data/share/lilypond/2.24.1/scm/lily/graphviz.scm +78 -0
- data/share/lilypond/2.24.1/scm/lily/guile-debugger.scm +90 -0
- data/share/lilypond/2.24.1/scm/lily/harp-pedals.scm +172 -0
- data/share/lilypond/2.24.1/scm/lily/hyphenate-internal-words.scm +51 -0
- data/share/lilypond/2.24.1/scm/lily/layout-beam.scm +73 -0
- data/share/lilypond/2.24.1/scm/lily/layout-slur.scm +45 -0
- data/share/lilypond/2.24.1/scm/lily/lily-library.scm +1446 -0
- data/share/lilypond/2.24.1/scm/lily/lily-sort.scm +116 -0
- data/share/lilypond/2.24.1/scm/lily/lily.scm +929 -0
- data/share/lilypond/2.24.1/scm/lily/ly-syntax-constructors.scm +374 -0
- data/share/lilypond/2.24.1/scm/lily/markup-macros.scm +493 -0
- data/share/lilypond/2.24.1/scm/lily/markup.scm +126 -0
- data/share/lilypond/2.24.1/scm/lily/midi.scm +258 -0
- data/share/lilypond/2.24.1/scm/lily/modal-transforms.scm +337 -0
- data/share/lilypond/2.24.1/scm/lily/music-functions.scm +2878 -0
- data/share/lilypond/2.24.1/scm/lily/output-lib.scm +3377 -0
- data/share/lilypond/2.24.1/scm/lily/output-ps.scm +335 -0
- data/share/lilypond/2.24.1/scm/lily/output-svg.scm +684 -0
- data/share/lilypond/2.24.1/scm/lily/page.scm +321 -0
- data/share/lilypond/2.24.1/scm/lily/paper-system.scm +271 -0
- data/share/lilypond/2.24.1/scm/lily/paper.scm +376 -0
- data/share/lilypond/2.24.1/scm/lily/parser-clef.scm +205 -0
- data/share/lilypond/2.24.1/scm/lily/parser-ly-from-scheme.scm +170 -0
- data/share/lilypond/2.24.1/scm/lily/part-combiner.scm +998 -0
- data/share/lilypond/2.24.1/scm/lily/predefined-fretboards.scm +54 -0
- data/share/lilypond/2.24.1/scm/lily/ps-to-png.scm +182 -0
- data/share/lilypond/2.24.1/scm/lily/scheme-engravers.scm +1813 -0
- data/share/lilypond/2.24.1/scm/lily/scheme-performers.scm +126 -0
- data/share/lilypond/2.24.1/scm/lily/script.scm +416 -0
- data/share/lilypond/2.24.1/scm/lily/skyline.scm +25 -0
- data/share/lilypond/2.24.1/scm/lily/song-util.scm +191 -0
- data/share/lilypond/2.24.1/scm/lily/song.scm +853 -0
- data/share/lilypond/2.24.1/scm/lily/stencil.scm +998 -0
- data/share/lilypond/2.24.1/scm/lily/tablature.scm +392 -0
- data/share/lilypond/2.24.1/scm/lily/time-signature-settings.scm +473 -0
- data/share/lilypond/2.24.1/scm/lily/time-signature.scm +35 -0
- data/share/lilypond/2.24.1/scm/lily/titling.scm +99 -0
- data/share/lilypond/2.24.1/scm/lily/to-xml.scm +254 -0
- data/share/lilypond/2.24.1/scm/lily/translation-functions.scm +1169 -0
- data/share/lilypond/2.24.1/vim/compiler/lilypond.vim +36 -0
- data/share/lilypond/2.24.1/vim/ftdetect/lilypond.vim +4 -0
- data/share/lilypond/2.24.1/vim/ftplugin/lilypond.vim +91 -0
- data/share/lilypond/2.24.1/vim/indent/lilypond.vim +79 -0
- data/share/lilypond/2.24.1/vim/syntax/lilypond-words +1408 -0
- data/share/lilypond/2.24.1/vim/syntax/lilypond-words.vim +3 -0
- data/share/lilypond/2.24.1/vim/syntax/lilypond.vim +104 -0
- data/share/locale/ca/LC_MESSAGES/lilypond.mo +0 -0
- data/share/locale/cs/LC_MESSAGES/lilypond.mo +0 -0
- data/share/locale/da/LC_MESSAGES/lilypond.mo +0 -0
- data/share/locale/de/LC_MESSAGES/lilypond.mo +0 -0
- data/share/locale/el/LC_MESSAGES/lilypond.mo +0 -0
- data/share/locale/eo/LC_MESSAGES/lilypond.mo +0 -0
- data/share/locale/es/LC_MESSAGES/lilypond.mo +0 -0
- data/share/locale/fi/LC_MESSAGES/lilypond.mo +0 -0
- data/share/locale/fr/LC_MESSAGES/lilypond.mo +0 -0
- data/share/locale/it/LC_MESSAGES/lilypond.mo +0 -0
- data/share/locale/ja/LC_MESSAGES/lilypond.mo +0 -0
- data/share/locale/nl/LC_MESSAGES/lilypond.mo +0 -0
- data/share/locale/ru/LC_MESSAGES/lilypond.mo +0 -0
- data/share/locale/sv/LC_MESSAGES/lilypond.mo +0 -0
- data/share/locale/tr/LC_MESSAGES/lilypond.mo +0 -0
- data/share/locale/uk/LC_MESSAGES/lilypond.mo +0 -0
- data/share/locale/vi/LC_MESSAGES/lilypond.mo +0 -0
- data/share/locale/zh_CN/LC_MESSAGES/lilypond.mo +0 -0
- data/share/locale/zh_TW/LC_MESSAGES/lilypond.mo +0 -0
- 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.")))
|