#include <iostream>
using namespace std;
-#include "music-head.hh"
+#include "music-function.hh"
#include "source-file.hh"
#include "parse-scm.hh"
#include "lily-guile.hh"
void strip_trailing_white (String&);
void strip_leading_white (String&);
String lyric_fudge (String s);
-int music_head_type (SCM);
+int music_function_type (SCM);
SCM lookup_markup_command (String s);
bool is_valid_version (String s);
%option noyywrap
%option nodefault
%option debug
-%option yyclass="My_lily_lexer"
+%option yyclass="Lily_lexer"
%option stack
%option never-interactive
%option warn
{
start_main_input ();
main_input_b_ = true;
- SCM nn = lookup_identifier ("pitchnames");
- push_note_state (alist_to_hashq (nn));
}
else
error (_ ("\\maininput not allowed outside init files"));
\> {
return '>';
}
+ \\score {
+ return SCORE;
+ }
{MARKUPCOMMAND} {
String str (YYText () + 1);
SCM s = lookup_markup_command (str);
%%
void
-My_lily_lexer::push_chord_state (SCM tab)
+Lily_lexer::push_chord_state (SCM tab)
{
pitchname_tab_stack_ = scm_cons (tab, pitchname_tab_stack_);
yy_push_state (chords);
}
void
-My_lily_lexer::push_figuredbass_state ()
+Lily_lexer::push_figuredbass_state ()
{
yy_push_state (figures);
}
void
-My_lily_lexer::push_initial_state ()
+Lily_lexer::push_initial_state ()
{
yy_push_state (INITIAL);
}
void
-My_lily_lexer::push_lyric_state ()
+Lily_lexer::push_lyric_state ()
{
yy_push_state (lyrics);
}
void
-My_lily_lexer::push_markup_state ()
+Lily_lexer::push_markup_state ()
{
yy_push_state (markup);
}
void
-My_lily_lexer::push_note_state (SCM tab)
+Lily_lexer::push_note_state (SCM tab)
{
pitchname_tab_stack_ = scm_cons (tab, pitchname_tab_stack_);
yy_push_state (notes);
}
void
-My_lily_lexer::pop_state ()
+Lily_lexer::pop_state ()
{
if (YYSTATE == notes || YYSTATE == chords)
pitchname_tab_stack_ = ly_cdr (pitchname_tab_stack_);
}
int
-My_lily_lexer::identifier_type (SCM sid)
+Lily_lexer::identifier_type (SCM sid)
{
int k = try_special_identifiers (&yylval.scm , sid);
return k >= 0 ? k : SCM_IDENTIFIER;
int
-My_lily_lexer::scan_escaped_word (String str)
+Lily_lexer::scan_escaped_word (String str)
{
// use more SCM for this.
return l;
}
SCM sid = lookup_identifier (str);
- if (is_music_head (sid))
+ if (is_music_function (sid))
{
- yylval.scm = get_music_head_transform (sid);
- return music_head_type (yylval.scm);
+ yylval.scm = get_music_function_transform (sid);
+
+ return music_function_type (yylval.scm);
}
if (sid != SCM_UNDEFINED)
}
int
-My_lily_lexer::scan_bare_word (String str)
+Lily_lexer::scan_bare_word (String str)
{
SCM sym = ly_symbol2scm (str.to_str0 ());
if ((YYSTATE == notes) || (YYSTATE == chords)) {
}
bool
-My_lily_lexer::is_note_state () const
+Lily_lexer::is_note_state () const
{
return YY_START == notes;
}
bool
-My_lily_lexer::is_chord_state () const
+Lily_lexer::is_chord_state () const
{
return YY_START == chords;
}
bool
-My_lily_lexer::is_lyric_state () const
+Lily_lexer::is_lyric_state () const
{
return YY_START == lyrics;
}
bool
-My_lily_lexer::is_figure_state () const
+Lily_lexer::is_figure_state () const
{
return YY_START == figures;
}
int
-music_head_type (SCM func)
+music_function_type (SCM func)
{
- SCM type= scm_object_property (func, ly_symbol2scm ("music-head-signature"));
+ SCM type= scm_object_property (func, ly_symbol2scm ("music-function-signature-keyword"));
if (type == ly_symbol2scm ("scm"))
{
- return MUSIC_HEAD_SCM;
+ return MUSIC_FUNCTION_SCM;
}
else if (type == ly_symbol2scm ("music"))
{
- return MUSIC_HEAD_MUSIC;
+ return MUSIC_FUNCTION_MUSIC;
}
else if (type == ly_symbol2scm ("scm-music"))
{
- return MUSIC_HEAD_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_HEAD_SCM_MUSIC_MUSIC;
+ return MUSIC_FUNCTION_SCM_MUSIC_MUSIC;
}
else if (type == ly_symbol2scm ("scm-scm-music"))
{
- return MUSIC_HEAD_SCM_SCM_MUSIC;
+ return MUSIC_FUNCTION_SCM_SCM_MUSIC;
+ }
+ else if (type == ly_symbol2scm ("noarg"))
+ {
+ return MUSIC_FUNCTION;
}
else
- assert (false);
+ {
+ /* TODO: print location */
+ error ("Can not find signature for music function.");
+ }
- return MUSIC_HEAD_SCM_MUSIC_MUSIC;
+ return MUSIC_FUNCTION_SCM;
}