Am 08.03.2018 um 08:44 schrieb Urs Liska:
Hi Stéfano,
Am 08.03.2018 um 07:26 schrieb Stefano Troncaro:
@Urs
I looked into your examples and \with blocks are very useful.
You said earlier that you were thinking about how to make it so that
the context-mod could have required arguments, default values for
missing ones, and even predicates. I was thinking that
context-mod->props could be made to accept this information as an
optional argument. Then it can return a 'curated' list of props or
raise warnings/errors. That I think shouldn't be difficult to do.
Great idea, thank you. Actually it's pretty much along the lines I was
already thinking about - but I hadn't thought of the obvious of doing
it directly in context-mod->props.
Although I'm undecided on what would be a convenient way of storing
the 'requirement data'. The obvious one to me is an alist with a
structure like this: `((key1 . (required . #t)) (key2 . ((default .
9) (pred . ,number?))) ...), but I'm not sure. What do you think?
The "required" is not necessary because if a key shows up in this list
it implicltly is required. One addition I'd do is add a keyword
'strict. When that's present any keys *not* in the list are rejected.
#(define rules
`((key1 . ;; type plus default
((type . ,number?)
(default . 5)))
(key2 . ;; only the type
((type . ,symbol?)))
(key3) ;; required without type or default
(key4 . ;; default value but no type
((default . #t)))
))
#(define rules2
(cons
'strict
`((key1 .
((type . ,number?)
(default . 5)))
(key2 .
((type . ,symbol?))))))
With rules1 the function would simply check for the presence of the
specified keys while with rules2 unknown keys would be rejected (issue
a warning and be dropped)
Defining the rules structures is somewhat picky - but this won't be
done in the *user* documents but basically in packages or similar
library structures, so it should be ok.
I'll give that a shot as I can use this in a current project - but of
course I'd also review pull requests ;-)
Best
Urs
I have implemented the above structure as predicates for use with
context-mod->props in
https://github.com/openlilylib/oll-core/commit/2ef019f643cbb719bdba15bd28107bb7f12124da
(on the typed-props branch), but so far it doesn't do anything yet. But
as you said, Stéfano, this isn't very hard to do. I just wanted to push
that before you'd start working on it yourself.
Urs
_______________________________________________
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user