+ int n = String_convert::dec2int (left);
+ int d = String_convert::dec2int (right);
+ return scm_cons (scm_int2num (n), scm_int2num (d));
+}
+
+// Breaks for flex 2.5.31
+#if 0
+/* avoid silly flex induced gcc warnings */
+static void yy_push_state (int) {;}
+static void yy_pop_state () {;}
+static int yy_top_state () { return 0; }
+
+static void
+avoid_silly_flex_induced_gcc_warnings ()
+{
+ (void)yy_start_stack_ptr;
+ (void)yy_start_stack_depth;
+ (void)yy_start_stack;
+ yy_push_state (0);
+ yy_pop_state ();
+ yy_top_state ();
+ avoid_silly_flex_induced_gcc_warnings ();
+}
+#endif
+
+SCM
+lookup_markup_command (String s)
+{
+ SCM proc = ly_scheme_function ("lookup-markup-command");
+ return scm_call_1 (proc, scm_makfrom0str (s.to_str0 ()));
+}
+
+
+int
+music_function_type (SCM func)
+{
+ SCM type= scm_object_property (func, ly_symbol2scm ("music-function-signature-keyword"));
+ if (type == ly_symbol2scm ("scm"))
+ {
+ return MUSIC_FUNCTION_SCM;
+ }
+ else if (type == ly_symbol2scm ("music"))
+ {
+ return MUSIC_FUNCTION_MUSIC;
+ }
+ else if (type == ly_symbol2scm ("scm-music"))
+ {
+ return MUSIC_FUNCTION_SCM_MUSIC;
+ }
+ else if (type == ly_symbol2scm ("scm-scm"))
+ {
+ return MUSIC_FUNCTION_SCM_SCM;
+ }
+ else if (type == ly_symbol2scm ("music-music"))
+ {
+ return MUSIC_FUNCTION_MUSIC_MUSIC;
+ }
+ else if (type == ly_symbol2scm ("scm-music-music"))
+ {
+ return MUSIC_FUNCTION_SCM_MUSIC_MUSIC;
+ }
+ else if (type == ly_symbol2scm ("scm-scm-music"))
+ {
+ return MUSIC_FUNCTION_SCM_SCM_MUSIC;
+ }
+ else if (type == ly_symbol2scm ("markup"))
+ {
+ return MUSIC_FUNCTION_MARKUP;
+ }
+ else if (type == ly_symbol2scm ("markup-music"))
+ {
+ return MUSIC_FUNCTION_MARKUP_MUSIC;
+ }
+ else if (type == ly_symbol2scm ("markup-markup"))
+ {
+ return MUSIC_FUNCTION_MARKUP_MARKUP;
+ }
+ else if (type == ly_symbol2scm ("markup-music-music"))
+ {
+ return MUSIC_FUNCTION_MARKUP_MUSIC_MUSIC;
+ }
+ else if (type == ly_symbol2scm ("markup-markup-music"))
+ {
+ return MUSIC_FUNCTION_MARKUP_MARKUP_MUSIC;
+ }
+ else if (type == ly_symbol2scm ("noarg"))
+ {
+ return MUSIC_FUNCTION;
+ }
+ else
+ {
+ /* TODO: print location */
+ error ("Can not find signature for music function.");
+ }
+
+ return MUSIC_FUNCTION_SCM;