From fbd48a24bcdea36d6d6b4858e9e373013726d057 Mon Sep 17 00:00:00 2001 From: David Kastrup Date: Fri, 14 Aug 2015 14:47:26 +0200 Subject: [PATCH] Issue 4561/1: \inherit-acceptability for inheriting accepts for a context-def --- ly/context-mods-init.ly | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/ly/context-mods-init.ly b/ly/context-mods-init.ly index e8b9602577..24b8ce0558 100644 --- a/ly/context-mods-init.ly +++ b/ly/context-mods-init.ly @@ -23,3 +23,26 @@ RemoveEmptyStaves = \with { \description "Remove staves which are considered to be empty according to the list of interfaces set by @code{keepAliveInterfaces}." } + +inherit-acceptability = +#(define-void-function (to from) + (symbol? symbol?) + (_i "When used in an output definition, will modify all context +definitions such that context @var{to} is accepted as a child by all +contexts that also accept @var{from}.") + (let* ((module (current-module)) + (cmod (ly:make-context-mod))) + (ly:add-context-mod cmod (list 'accepts to)) + (if (output-module? module) + (module-map + (lambda (_sym var) + (if (variable-bound? var) + (let ((cdef (variable-ref var))) + (if (ly:context-def? cdef) + (let ((accepts (ly:context-def-lookup cdef 'accepts))) + (if (and (memq from accepts) + (not (memq to accepts))) + (variable-set! var + (ly:context-def-modify cdef cmod)))))))) + module) + (ly:parser-error (_ "Not in an output definition"))))) -- 2.39.5