]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/lexer.ll
Issue 5167/6: Changes: show \markup xxx = ... \etc assignments
[lilypond.git] / lily / lexer.ll
index 93184ebe085dc2d432274a06d4eeb887e565fe01..dde8fc00dc98a9050bd6fb766b0e28d175ec6cc4 100644 (file)
@@ -417,6 +417,19 @@ BOM_UTF8   \357\273\277
 
        sval = eval_scm (sval, hi, '$');
 
+       if (YYSTATE == markup && ly_is_procedure (sval))
+       {
+               SCM sig = Lily::markup_command_signature (sval);
+               if (scm_is_true (sig))
+               {
+                       yylval = sval;
+                       int token = MARKUP_FUNCTION;
+                       if (scm_is_true (Lily::markup_list_function_p (sval)))
+                               token = MARKUP_LIST_FUNCTION;
+                       push_markup_predicates (sig);
+                       return token;
+               }
+       }
        int token = scan_scm_id (sval);
        if (!scm_is_eq (yylval, SCM_UNSPECIFIED))
                return token;
@@ -684,18 +697,8 @@ BOM_UTF8   \357\273\277
                // value (for token type MARKUP_FUNCTION or
                // MARKUP_LIST_FUNCTION).
 
-               push_extra_token (here_input (), EXPECT_NO_MORE_ARGS);
-               s = scm_cdr(s);
-               for (; scm_is_pair(s); s = scm_cdr(s)) {
-                 SCM predicate = scm_car(s);
-
-                 if (scm_is_eq (predicate, SCM (Lily::markup_list_p)))
-                   push_extra_token (here_input (), EXPECT_MARKUP_LIST);
-                 else if (scm_is_eq (predicate, SCM (Lily::markup_p)))
-                   push_extra_token (here_input (), EXPECT_MARKUP);
-                 else
-                   push_extra_token (here_input (), EXPECT_SCM, predicate);
-               }
+               push_markup_predicates (scm_cdr (s));
+
                return token_type;
        }
        [^$#{}\"\\ \t\n\r\f]+ {
@@ -892,6 +895,23 @@ Lily_lexer::pop_state ()
 
 }
 
+void
+Lily_lexer::push_markup_predicates (SCM sig)
+{
+       push_extra_token (here_input (), EXPECT_NO_MORE_ARGS);
+       for (SCM s = sig; scm_is_pair(s); s = scm_cdr(s)) {
+               SCM predicate = scm_car(s);
+
+               if (scm_is_eq (predicate, SCM (Lily::markup_list_p)))
+                       push_extra_token (here_input (), EXPECT_MARKUP_LIST);
+               else if (scm_is_eq (predicate, SCM (Lily::markup_p)))
+                       push_extra_token (here_input (), EXPECT_MARKUP);
+               else
+                       push_extra_token (here_input (), EXPECT_SCM, predicate);
+       }
+}
+
+
 int
 Lily_lexer::identifier_type (SCM sid)
 {