X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Ftranslator-group.cc;h=6b735ad953232e7c317320ae2bd279c9013c6855;hb=8ecd09ad7514d57630fb611d38c161f3c3c708db;hp=24416817d00941fb8a32113d78cbf357e636f99a;hpb=60dd8eb0afbed0abae97e96b1f2c98b90da00bf5;p=lilypond.git diff --git a/lily/translator-group.cc b/lily/translator-group.cc index 24416817d0..6b735ad953 100644 --- a/lily/translator-group.cc +++ b/lily/translator-group.cc @@ -343,9 +343,51 @@ Translator_group::execute_single_pushpop_property (SCM prop, SCM eltprop, SCM va */ if (gh_pair_p (prev) || prev == SCM_EOL) { + bool ok = true; + + SCM errport = scm_current_error_port (); + + SCM meta = scm_assoc (ly_symbol2scm ("meta"), prev); + SCM props = scm_assoc (ly_symbol2scm ("properties"), gh_cdr (meta)); + SCM propdesc = scm_assoc (eltprop, gh_cdr (props)); + if (!gh_pair_p (propdesc)) + { + scm_puts (_("Couldn't find property description for #'").ch_C(),errport); + scm_display (eltprop, errport); + + scm_puts (_(" in element description ").ch_C(),errport); + scm_display (prop, errport); + + scm_puts (_(". Perhaps you made a typing error?\n").ch_C(),errport); + } + else + { + + SCM predicate = gh_cadr (propdesc); + if (gh_call1 (predicate, val) == SCM_BOOL_F) + { + ok = false; + scm_puts (_("Failed typecheck for #'").ch_C (),errport); + scm_display (eltprop,errport); + scm_puts ( _(", value ").ch_C (), errport); + scm_display (val, errport); + scm_puts (_(" must satisfy ").ch_C (), errport); + scm_display (predicate, errport); + scm_puts ("\n", errport); + } + } + + if (ok) + { prev = gh_cons (gh_cons (eltprop, val), prev); set_property (prop, prev); + } } + else + { + // warning here. + } + } else {