From fb54b6968c3b70c102bcb89c54bc9b1f15a71327 Mon Sep 17 00:00:00 2001 From: David Kastrup Date: Sun, 12 Jul 2015 20:44:39 +0200 Subject: [PATCH] Provide check-context-path function --- scm/music-functions.scm | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/scm/music-functions.scm b/scm/music-functions.scm index b75709bf0c..97bb8c4f67 100644 --- a/scm/music-functions.scm +++ b/scm/music-functions.scm @@ -481,6 +481,30 @@ respectively." location) #f))))) +(define-safe-public (check-context-path path #:optional location) + "Check a context property path specification @var{path}, a symbol +list (or a single symbol), for validity and possibly complete it. +Returns the completed specification, or @code{#f} when rising an +error (using optionally @code{location})." + (let* ((path (if (symbol? path) (list path) path))) + ;; A Guile 1.x bug specific to optargs precludes moving the + ;; defines out of the let + (define (property? s) + (object-property s 'translation-type?)) + (define (unspecial? s) + (not (property? s))) + (define (check c p) (c p)) + (or (case (length path) + ((1) (and (property? (car path)) (cons 'Bottom path))) + ((2) (and (unspecial? (car path)) (property? (cadr path)) path)) + (else #f)) + (begin + (ly:parser-error + (format #f (_ "bad context property ~a") + path) + location) + #f)))) + (define-public (make-grob-property-set grob gprop val) "Make a @code{Music} expression that sets @var{gprop} to @var{val} in @var{grob}. Does a pop first, i.e., this is not an override." -- 2.39.2