X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Flexer.ll;h=b89ce76cca117f1e8b92121c2e023a1187c62937;hb=cd5c901120301fe26d2f45deaec89fa7973a62e5;hp=9d333ff511fe68dbf31fc68441ce47b2d28610d8;hpb=a189a96db19be86a369cc4dbfe31cc8ab676fdf1;p=lilypond.git diff --git a/lily/lexer.ll b/lily/lexer.ll index 9d333ff511..b89ce76cca 100644 --- a/lily/lexer.ll +++ b/lily/lexer.ll @@ -41,7 +41,7 @@ using namespace std; #include "interval.hh" #include "lily-guile.hh" #include "lily-lexer.hh" -#include "lilypond-input-version.hh" +#include "lilypond-version.hh" #include "main.hh" #include "music.hh" #include "music-function.hh" @@ -80,11 +80,6 @@ bool is_valid_version (string s); (*(YYLTYPE*)lexloc) #define YY_USER_ACTION add_lexed_char (YYLeng ()); -/* - -LYRICS ({AA}|{TEX})[^0-9 \t\n\f]* - -*/ SCM scan_fraction (string); @@ -117,18 +112,21 @@ SCM (* scm_parse_error_handler) (void *); %x sourcefilename %x version -A [a-zA-Z] +A [a-zA-Z\200-\377] AA {A}|_ N [0-9] AN {AA}|{N} ANY_CHAR (.|\n) PUNCT [?!:'`] ACCENT \\[`'"^] -NATIONAL [\001-\006\021-\027\031\036\200-\377] +NATIONAL [\001-\006\021-\027\031\036] TEX {AA}|-|{PUNCT}|{ACCENT}|{NATIONAL} WORD {A}{AN}* DASHED_WORD {A}({AN}|-)* DASHED_KEY_WORD \\{DASHED_WORD} + + + ALPHAWORD {A}+ DIGIT {N} UNSIGNED {N}+ @@ -148,6 +146,7 @@ ESCAPED [nt\\'"] EXTENDER __ HYPHEN -- BOM_UTF8 \357\273\277 + %% @@ -237,7 +236,7 @@ BOM_UTF8 \357\273\277 progress_indication ("\n"); scm_module_define (scm_car (scopes_), ly_symbol2scm ("input-file-name"), - scm_makfrom0str (s.c_str ())); + ly_string2scm (s)); } @@ -245,7 +244,6 @@ BOM_UTF8 \357\273\277 int i; sscanf (YYText (), "%d", &i); -// this->set_debug (1); yy_pop_state (); this->here_input ().get_source_file ()->set_line (here_input ().start (), i); } @@ -273,7 +271,7 @@ BOM_UTF8 \357\273\277 } <> { LexerError (_ ("EOF found inside a comment").c_str ()); - is_main_input_ = false; + is_main_input_ = false; // should be safe , can't have \include in --safe. if (! close_input ()) yyterminate (); // can't move this, since it actually rets a YY_NULL } @@ -325,7 +323,7 @@ BOM_UTF8 \357\273\277 } {RESTNAME} { char const *s = YYText (); - yylval.scm = scm_makfrom0str (s); + yylval.scm = scm_from_locale_string (s); return RESTNAME; } R { @@ -429,7 +427,7 @@ BOM_UTF8 \357\273\277 /* yylval is union. Must remember STRING before setting SCM*/ string *sp = yylval.string; - yylval.scm = scm_makfrom0str (sp->c_str ()); + yylval.scm = ly_string2scm (*sp); delete sp; return is_lyric_state () ? LYRICS_STRING : STRING; } @@ -466,7 +464,7 @@ BOM_UTF8 \357\273\277 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 = scm_makfrom0str (s.c_str ()); + yylval.scm = ly_string2scm (s); return LYRICS_STRING; @@ -559,7 +557,7 @@ BOM_UTF8 \357\273\277 if (c == '{' || c == '}') here_input ().warning ( _ ("Brace found at end of markup. Did you forget a space?")); - yylval.scm = scm_makfrom0str (s.c_str ()); + yylval.scm = ly_string2scm (s); return STRING; @@ -753,6 +751,7 @@ Lily_lexer::scan_escaped_word (string str) yylval.scm = get_music_function_transform (sid); SCM s = scm_object_property (yylval.scm, ly_symbol2scm ("music-function-signature")); + push_extra_token (EXPECT_NO_MORE_ARGS); for (; scm_is_pair (s); s = scm_cdr (s)) { if (scm_car (s) == ly_music_p_proc) @@ -775,7 +774,7 @@ Lily_lexer::scan_escaped_word (string str) string msg (_f ("unknown escaped string: `\\%s'", str)); LexerError (msg.c_str ()); - yylval.scm = scm_makfrom0str (str.c_str ()); + yylval.scm = ly_string2scm (str); return STRING; } @@ -803,7 +802,7 @@ Lily_lexer::scan_bare_word (string str) } } - yylval.scm = scm_makfrom0str (str.c_str ()); + yylval.scm = ly_string2scm (str); return STRING; } @@ -876,12 +875,18 @@ is_valid_version (string s) { Lilypond_version current ( MAJOR_VERSION "." MINOR_VERSION "." PATCH_LEVEL ); Lilypond_version ver (s); - if (! ((ver >= oldest_version) && (ver <= current))) + if (int (ver) < oldest_version) { - non_fatal_error (_f ("Incorrect lilypond version: %s (%s, %s)", ver.to_string (), oldest_version.to_string (), current.to_string ())); - non_fatal_error (_ ("Consider updating the input with the convert-ly script")); + non_fatal_error (_f ("file too old: %s (oldest supported: %s)", ver.to_string (), oldest_version.to_string ())); + non_fatal_error (_ ("consider updating the input with the convert-ly script")); return false; - } + } + + if (ver > current) + { + non_fatal_error (_f ("program too old: %s (file requires: %s)", current.to_string (), ver.to_string ())); + return false; + } return true; } @@ -932,7 +937,7 @@ SCM lookup_markup_command (string s) { SCM proc = ly_lily_module_constant ("lookup-markup-command"); - return scm_call_1 (proc, scm_makfrom0str (s.c_str ())); + return scm_call_1 (proc, ly_string2scm (s)); } /* Shut up lexer warnings. */