X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Flexer.ll;h=b1c3afab5dca3ee29c1377b9595ba6f1d74253e4;hb=4b40ecf0af9b4ff3fcf4287ae685ac1a9cc89523;hp=23692d60d74c93cc9041d9c20594094494ad5cf6;hpb=eb736251ddd70a4562264eed6cc021b281f0377a;p=lilypond.git diff --git a/lily/lexer.ll b/lily/lexer.ll index 23692d60d7..b1c3afab5d 100644 --- a/lily/lexer.ll +++ b/lily/lexer.ll @@ -38,7 +38,13 @@ #include "musical-request.hh" #include "identifier.hh" #include "version.hh" -#include "mudela-version.hh" +#include "lilypond-input-version.hh" +#include "translator-def.hh" + +/* +RH 7 fix (?) +*/ +#define isatty HORRIBLEKLUDGE void strip_trailing_white (String&); void strip_leading_white (String&); @@ -137,9 +143,9 @@ HYPHEN -- String s (YYText ()+1); s = s.left_str (s.index_last_i ('"')); DEBUG_OUT << "#version `" << s << "'\n"; + yy_pop_state (); if (!valid_version_b (s)) return INVALID; - yy_pop_state (); } . { LexerError ("No quoted string found after \\version"); @@ -188,18 +194,12 @@ HYPHEN -- if (s.length_i () && (s[s.length_i () - 1] == ';')) s = s.left_str (s.length_i () - 1); DEBUG_OUT << "#include `\\" << s << "'\n"; - Identifier * id = lookup_identifier (s); - if (id) - { - String* s_l = id->access_content_String (false); - DEBUG_OUT << "#include `" << *s_l << "'\n"; - new_input (*s_l, source_global_l); - - yy_pop_state (); - } - else - { - String msg (_f ("undefined identifier: `%s'", s )); + SCM sid = lookup_identifier (s); + if (gh_string_p (sid)) { + new_input (ly_scm2string (sid), source_global_l); + yy_pop_state (); + } else { + String msg (_f ("wrong or undefined identifier: `%s'", s )); LexerError (msg.ch_C ()); } } @@ -239,12 +239,10 @@ HYPHEN -- int n = 0; if (main_input_b_ && safe_global_b) { error (_ ("Can't evaluate Scheme in safe mode")); - return SCM_EOL; + yylval.scm = SCM_EOL; + return SCM_T; } yylval.scm = ly_parse_scm (s, &n); - DEBUG_OUT << "Scheme: "; - if (flower_dstream) - ly_display_scm (yylval.scm); for (int i=0; i < n; i++) { @@ -330,7 +328,7 @@ HYPHEN -- } char c = s[s.length_i () - 1]; - if (c == '{' && c == '}') // brace open is for not confusing dumb tools. + if (c == '{' || c == '}') // brace open is for not confusing dumb tools. here_input ().warning ( "Brace found at end of lyric. Did you forget a space?"); yylval.scm = ly_str02scm (s.ch_C ()); @@ -403,7 +401,6 @@ HYPHEN -- } [{}] { - DEBUG_OUT << "parens\n"; return YYText ()[0]; } @@ -475,19 +472,43 @@ My_lily_lexer::scan_escaped_word (String str) if (l != -1) { return l; } - Identifier * id = lookup_identifier (str); + SCM sid = lookup_identifier (str); + if (gh_string_p (sid)) { + yylval.scm = sid; + return STRING_IDENTIFIER; + } else if (gh_number_p (sid)) { + yylval.scm = sid; + return NUMBER_IDENTIFIER; + } else if (unsmob_translator_def (sid)) { + yylval.scm = sid; + return TRANSLATOR_IDENTIFIER; + } else if (Music * mus =unsmob_music (sid)) { + yylval.scm = sid; + + return dynamic_cast (mus) ? REQUEST_IDENTIFIER : MUSIC_IDENTIFIER; + } else if (unsmob_duration (sid)) { + yylval.scm = sid; + return DURATION_IDENTIFIER; + } + + + + + Identifier * id = unsmob_identifier (sid); if (id) { yylval.id = id; return id->token_code_i_; + } else if (sid != SCM_UNDEFINED) { + yylval.scm = sid; + return SCM_IDENTIFIER; } + if ((YYSTATE != notes) && (YYSTATE != chords)) { - SCM pitch = scm_hashq_ref (pitchname_tab_, sym, SCM_BOOL_F); + SCM pitch = scm_hashq_get_handle (pitchname_tab_, sym); - if (pitch != SCM_BOOL_F) + if (gh_pair_p (pitch)) { - yylval.pitch = new Musical_pitch (pitch); - yylval.pitch->set_spot (Input (source_file_l (), - here_ch_C ())); + yylval.scm = gh_cdr (pitch); return NOTENAME_PITCH; } } @@ -504,17 +525,13 @@ My_lily_lexer::scan_bare_word (String str) { SCM sym = ly_symbol2scm (str.ch_C ()); if ((YYSTATE == notes) || (YYSTATE == chords)) { - SCM pitch = scm_hashq_ref (pitchname_tab_, sym, SCM_BOOL_F); - if (pitch != SCM_BOOL_F) { - yylval.pitch = new Musical_pitch (pitch); - yylval.pitch->set_spot (Input (source_file_l (), - here_ch_C ())); + SCM pitch = scm_hashq_get_handle (pitchname_tab_, sym); + if (gh_pair_p (pitch)) { + yylval.scm = gh_cdr (pitch); return (YYSTATE == notes) ? NOTENAME_PITCH : TONICNAME_PITCH; - } else if ((pitch = scm_hashq_ref (chordmodifier_tab_, sym, SCM_BOOL_F))!= SCM_BOOL_F) + } else if ((pitch = scm_hashq_get_handle (chordmodifier_tab_, sym))!= SCM_BOOL_F) { - yylval.pitch = new Musical_pitch (pitch); - yylval.pitch->set_spot (Input (source_file_l (), - here_ch_C ())); + yylval.scm = gh_cdr (pitch); return CHORDMODIFIER_PITCH; } } @@ -573,13 +590,13 @@ strip_trailing_white (String&s) bool valid_version_b (String s) { - Mudela_version current ( MAJOR_VERSION "." MINOR_VERSION "." PATCH_LEVEL ); - Mudela_version ver (s); + Lilypond_version current ( MAJOR_VERSION "." MINOR_VERSION "." PATCH_LEVEL ); + Lilypond_version ver (s); if (!((ver >= oldest_version) && (ver <= current))) { - error (_f ("incorrect mudela version: %s (%s, %s)", ver.str (), oldest_version.str (), current.str ())); - if (!version_ignore_global_b) - return false; + non_fatal_error (_f ("incorrect lilypond version: %s (%s, %s)", ver.str (), oldest_version.str (), current.str ())); + non_fatal_error (_("Consider converting the input with the convert-ly script")); + return false; } return true; }