X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Flexer.ll;h=c86168a224e5c4b59ff9ba20a44058edbf420faf;hb=fb1afe411d7ef4d5c8853c936adf894e3edbf833;hp=b567746c3667af61fe8be53ffa06bb3881ea4d88;hpb=c7205110d9cf8c4acb6149047f1674e2aa1a348b;p=lilypond.git diff --git a/lily/lexer.ll b/lily/lexer.ll index b567746c36..c86168a224 100644 --- a/lily/lexer.ll +++ b/lily/lexer.ll @@ -25,7 +25,7 @@ #include #include -#include "notename-table.hh" +#include "score.hh" #include "lily-guile.hh" #include "string.hh" #include "string-convert.hh" @@ -37,9 +37,15 @@ #include "debug.hh" #include "main.hh" #include "musical-request.hh" -#include "identifier.hh" -#include "mudela-version.hh" #include "version.hh" +#include "lilypond-input-version.hh" +#include "translator-def.hh" +#include "music-output-def.hh" + +/* +RH 7 fix (?) +*/ +#define isatty HORRIBLEKLUDGE void strip_trailing_white (String&); void strip_leading_white (String&); @@ -138,9 +144,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"); @@ -189,18 +195,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 ()); } } @@ -234,18 +234,17 @@ HYPHEN -- cerr << _ ("white expected") << endl; exit (1); } + # { //embedded scm //char const* s = YYText () + 1; char const* s = here_ch_C (); 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++) { @@ -331,9 +330,9 @@ 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?"); + _("Brace found at end of lyric. Did you forget a space?")); yylval.scm = ly_str02scm (s.ch_C ()); DEBUG_OUT << "lyric : `" << s << "'\n"; @@ -404,7 +403,6 @@ HYPHEN -- } [{}] { - DEBUG_OUT << "parens\n"; return YYText ()[0]; } @@ -428,6 +426,10 @@ HYPHEN -- return E_SMALLER; case '!': return E_EXCLAMATION; + case '(': + return E_OPEN; + case ')': + return E_CLOSE; default: return E_CHAR; } @@ -476,19 +478,42 @@ My_lily_lexer::scan_escaped_word (String str) if (l != -1) { return l; } - Identifier * id = lookup_identifier (str); - if (id) { - yylval.id = id; - return id->token_code_i_; + 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 (unsmob_score (sid)) { + yylval.scm =sid; + return SCORE_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; + } else if (unsmob_music_output_def (sid)) { + yylval.scm = sid; + return MUSIC_OUTPUT_DEF_IDENTIFIER; } + + 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; } } @@ -505,17 +530,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 (pitchname_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; } } @@ -574,13 +595,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; }