X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fmusic-scheme.cc;h=b8b49e0fd2c867fa9a24b56a73a356da96807d87;hb=5b4b0d6e9a197e8f9eb085b7c2ad78b8be3e5cfc;hp=b67c0c775dc022fee6f598c26403dda83ec82c7d;hpb=bdf4ab13203502e7ec7cf9cf5896527643a07c1f;p=lilypond.git diff --git a/lily/music-scheme.cc b/lily/music-scheme.cc index b67c0c775d..b8b49e0fd2 100644 --- a/lily/music-scheme.cc +++ b/lily/music-scheme.cc @@ -3,96 +3,81 @@ source file of the GNU LilyPond music typesetter - (c) 2005 Han-Wen Nienhuys + (c) 2005--2008 Han-Wen Nienhuys */ +#include "music.hh" + #include "duration.hh" #include "warn.hh" -#include "music.hh" -#include "pitch.hh" LY_DEFINE (ly_music_length, "ly:music-length", 1, 0, 0, (SCM mus), - "Get the length of music expression @var{mus}, and return as a @code{Moment} object.") + "Get the length of music expression @var{mus} and return" + " it as a @code{Moment} object.") { + LY_ASSERT_TYPE (unsmob_music, mus, 1); Music *sc = unsmob_music (mus); - SCM_ASSERT_TYPE (sc, mus, SCM_ARG1, __FUNCTION__, "music"); return sc->get_length ().smobbed_copy (); } LY_DEFINE (ly_music_property, - "ly:music-property", 2, 0, 0, (SCM mus, SCM sym), - "Get the property @var{sym} of music expression @var{mus}.\n" - "If @var{sym} is undefined, return @code{' ()}.\n") + "ly:music-property", 2, 1, 0, (SCM mus, SCM sym, SCM dfault), + "Get the property @var{sym} of music expression @var{mus}." + " If @var{sym} is undefined, return @code{'()}.") { - Music *sc = unsmob_music (mus); - SCM_ASSERT_TYPE (sc, mus, SCM_ARG1, __FUNCTION__, "music"); - SCM_ASSERT_TYPE (scm_is_symbol (sym), sym, SCM_ARG2, __FUNCTION__, "symbol"); - - return sc->internal_get_property (sym); + LY_ASSERT_TYPE (unsmob_music, mus, 1); + return ly_prob_property (mus, sym, dfault); } -LY_DEFINE (ly_music_set_property, "ly:music-set-property!", +LY_DEFINE (ly_music_set_property_x, "ly:music-set-property!", 3, 0, 0, (SCM mus, SCM sym, SCM val), - "Set property @var{sym} in music expression @var{mus} to @var{val}.") + "Set property @var{sym} in music expression @var{mus} to" + " @var{val}.") { - Music *sc = unsmob_music (mus); - SCM_ASSERT_TYPE (sc, mus, SCM_ARG1, __FUNCTION__, "music"); - SCM_ASSERT_TYPE (scm_is_symbol (sym), sym, SCM_ARG2, __FUNCTION__, "symbol"); + LY_ASSERT_TYPE (unsmob_music, mus, 1); - bool ok = type_check_assignment (sym, val, ly_symbol2scm ("music-type?")); - if (ok) - { - sc->internal_set_property (sym, val); - } - - return SCM_UNSPECIFIED; + return ly_prob_set_property_x (mus, sym, val); } -LY_DEFINE (ly_music_name, "ly:music-name", - 1, 0, 0, (SCM mus), - "Return the name of @var{music}.") -{ - Music *m = unsmob_music (mus); - SCM_ASSERT_TYPE (m, mus, SCM_ARG1, __FUNCTION__, "music"); - char const *nm = classname (m); - return scm_makfrom0str (nm); +/* todo: property args */ +LY_DEFINE (ly_make_music, "ly:make-music", + 1, 0, 0, (SCM props), + "Make a C++ @code{Music} object and initialize it with" + " @var{props}.\n" + "\n" + "This function is for internal use and is only called by" + " @code{make-music}, which is the preferred interface" + " for creating music objects.") +{ + Music *ms = new Music (props); + return ms->unprotect (); } -/* todo: property args */ -LY_DEFINE (ly_extended_make_music, "ly:make-bare-music", - 2, 0, 0, (SCM type, SCM props), - "Make a C++ music object of type @var{type}, initialize with\n" - "@var{props}. \n\n" - "" - "This function is for internal use, and is only called by " - "@code{make-music}, which is the preferred interface " - "for creating music objects. ") +LY_DEFINE (ly_music_p, "ly:music?", + 1, 0, 0, (SCM obj), + "Type predicate.") { - SCM_ASSERT_TYPE (scm_is_string (type), type, SCM_ARG1, __FUNCTION__, "string"); - SCM s = make_music (ly_scm2string (type), props)->self_scm (); - scm_gc_unprotect_object (s); - return s; + return scm_from_bool (unsmob_music (obj)); } /* todo: property args */ LY_DEFINE (ly_music_mutable_properties, "ly:music-mutable-properties", 1, 0, 0, (SCM mus), - "Return an alist containing the mutable properties of @var{mus}.\n" - "The immutable properties are not available, since " - "they are constant and initialized by the " - "@code{make-music} function.\n") + "Return an alist containing the mutable properties of @var{mus}." + " The immutable properties are not available, since they are" + " constant and initialized by the @code{make-music} function.") { + LY_ASSERT_TYPE (unsmob_music, mus, 1); Music *m = unsmob_music (mus); - SCM_ASSERT_TYPE (m, mus, SCM_ARG1, __FUNCTION__, "music"); return m->get_property_alist (true); } LY_DEFINE (ly_music_list_p, "ly:music-list?", 1, 0, 0, (SCM lst), - "Type predicate: return true if @var{lst} is a list " - "of music objects.") + "Type predicate: Return true if @var{lst} is a list" + " of music objects.") { if (scm_list_p (lst) == SCM_BOOL_T) while (scm_is_pair (lst)) @@ -107,13 +92,13 @@ LY_DEFINE (ly_music_list_p, "ly:music-list?", LY_DEFINE (ly_music_deep_copy, "ly:music-deep-copy", 1, 0, 0, (SCM m), - "Copy @var{m} and all sub expressions of @var{m}") + "Copy @var{m} and all sub expressions of@tie{}@var{m}.") { SCM copy = m; if (unsmob_music (m)) { - copy = unsmob_music (m)->clone ()->self_scm (); - scm_gc_unprotect_object (copy); + Music *mcopy = unsmob_music (m)->clone (); + copy = mcopy->unprotect (); } else if (scm_is_pair (m)) copy = scm_cons (ly_music_deep_copy (scm_car (m)), @@ -123,13 +108,14 @@ LY_DEFINE (ly_music_deep_copy, "ly:music-deep-copy", LY_DEFINE (ly_music_transpose, "ly:music-transpose", 2, 0, 0, (SCM m, SCM p), - "Transpose @var{m} such that central C is mapped to @var{p}. " - "Return @var{m}.") + "Transpose @var{m} such that central@tie{}C is mapped" + " to@tie{}@var{p}. Return@tie{}@var{m}.") { + LY_ASSERT_TYPE (unsmob_music, m, 1); + LY_ASSERT_SMOB (Pitch, p, 2); + Music *sc = unsmob_music (m); Pitch *sp = unsmob_pitch (p); - SCM_ASSERT_TYPE (sc, m, SCM_ARG1, __FUNCTION__, "music"); - SCM_ASSERT_TYPE (sp, p, SCM_ARG2, __FUNCTION__, "pitch"); sc->transpose (*sp); // SCM_UNDEFINED ? @@ -141,45 +127,44 @@ LY_DEFINE (ly_music_transpose, "ly:music-transpose", */ LY_DEFINE (ly_music_compress, "ly:music-compress", 2, 0, 0, (SCM m, SCM factor), - "Compress music object @var{m} by moment @var{factor}.") + "Compress music object@tie{}@var{m} by moment @var{factor}.") { - Music *sc = unsmob_music (m); - - SCM_ASSERT_TYPE (sc, m, SCM_ARG1, __FUNCTION__, "music"); - SCM_ASSERT_TYPE (unsmob_moment (factor), factor, SCM_ARG2, __FUNCTION__, "moment"); + LY_ASSERT_TYPE (unsmob_music, m, 1); + LY_ASSERT_TYPE (unsmob_moment, factor, 2); + Music *sc = unsmob_music (m); sc->compress (*unsmob_moment (factor)); return sc->self_scm (); } LY_DEFINE (ly_music_duration_length, "ly:music-duration-length", 1, 0, 0, (SCM mus), - "Extract the duration field from @var{mus}, and return the length.") + "Extract the duration field from @var{mus} and return the" + " length.") { + LY_ASSERT_TYPE (unsmob_music, mus, 1); Music *m = unsmob_music (mus); - SCM_ASSERT_TYPE (m, mus, SCM_ARG1, __FUNCTION__, "Music"); Duration *d = unsmob_duration (m->get_property ("duration")); - - Moment l; + Moment len; if (d) - { - l = d->get_length (); - } + len = d->get_length (); else - programming_error ("Music has no duration"); - return l.smobbed_copy (); + programming_error ("music has no duration"); + return len.smobbed_copy (); } LY_DEFINE (ly_music_duration_compress, "ly:music-duration-compress", 2, 0, 0, (SCM mus, SCM fact), - "Compress @var{mus} by factor @var{fact}, which is a @code{Moment}.") + "Compress @var{mus} by factor @var{fact}, which is a" + " @code{Moment}.") { + LY_ASSERT_TYPE (unsmob_music, mus, 1); + LY_ASSERT_SMOB (Moment, fact, 2); + Music *m = unsmob_music (mus); Moment *f = unsmob_moment (fact); - SCM_ASSERT_TYPE (m, mus, SCM_ARG1, __FUNCTION__, "Music"); - SCM_ASSERT_TYPE (f, fact, SCM_ARG2, __FUNCTION__, "Moment"); Duration *d = unsmob_duration (m->get_property ("duration")); if (d) @@ -196,7 +181,8 @@ LY_DEFINE (ly_music_duration_compress, "ly:music-duration-compress", 2, 0, 0, */ LY_DEFINE (ly_transpose_key_alist, "ly:transpose-key-alist", 2, 0, 0, (SCM l, SCM pit), - "Make a new key alist of @var{l} transposed by pitch @var{pit}") + "Make a new key alist of@tie{}@var{l} transposed by" + " pitch @var{pit}.") { SCM newlist = SCM_EOL; Pitch *p = unsmob_pitch (pit); @@ -209,25 +195,26 @@ LY_DEFINE (ly_transpose_key_alist, "ly:transpose-key-alist", { Pitch orig (scm_to_int (scm_car (key)), scm_to_int (scm_cdr (key)), - scm_to_int (alter)); + ly_scm2rational (alter)); orig = orig.transposed (*p); - SCM key = scm_cons (scm_int2num (orig.get_octave ()), - scm_int2num (orig.get_notename ())); + SCM key = scm_cons (scm_from_int (orig.get_octave ()), + scm_from_int (orig.get_notename ())); - newlist = scm_cons (scm_cons (key, scm_int2num (orig.get_alteration ())), + newlist = scm_cons (scm_cons (key, ly_rational2scm (orig.get_alteration ())), newlist); } else if (scm_is_number (key)) { - Pitch orig (0, scm_to_int (key), scm_to_int (alter)); + Pitch orig (0, scm_to_int (key), ly_scm2rational (alter)); orig = orig.transposed (*p); - key = scm_int2num (orig.get_notename ()); - alter = scm_int2num (orig.get_alteration ()); + key = scm_from_int (orig.get_notename ()); + alter = ly_rational2scm (orig.get_alteration ()); newlist = scm_cons (scm_cons (key, alter), newlist); } } return scm_reverse_x (newlist, SCM_EOL); } +