X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Flily-parser-scheme.cc;h=2f9a910ccf917518ca40707403f74122f3e034ec;hb=b2bd43881ea19384aab46faea11f145c8b1d6b96;hp=f58f2ea0fad9a773b2c6da8f7979b4f35b54cba8;hpb=3387a18b247b71da399c7f65befd3481a0779618;p=lilypond.git diff --git a/lily/lily-parser-scheme.cc b/lily/lily-parser-scheme.cc index f58f2ea0fa..2f9a910ccf 100644 --- a/lily/lily-parser-scheme.cc +++ b/lily/lily-parser-scheme.cc @@ -1,9 +1,20 @@ /* - lily-parser-scheme.cc -- implement Lily_parser bindings + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2005--2010 Han-Wen Nienhuys - (c) 2005--2009 Han-Wen Nienhuys + LilyPond is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + LilyPond is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with LilyPond. If not, see . */ #include @@ -189,7 +200,25 @@ LY_DEFINE (ly_parser_parse_string, "ly:parser-parse-string", Lily_parser *parser = unsmob_lily_parser (parser_smob); LY_ASSERT_TYPE (scm_is_string, ly_code, 2); - parser->parse_string (ly_scm2string (ly_code)); + if (!parser->lexer_->is_clean ()) + parser->parser_error (_ ("ly:parser-parse-string is only valid with a new parser." + " Use ly:parser-include-string instead.")); + else + parser->parse_string (ly_scm2string (ly_code)); + + return SCM_UNSPECIFIED; +} + +LY_DEFINE (ly_parser_include_string, "ly:parser-include-string", + 2, 0, 0, (SCM parser_smob, SCM ly_code), + "Include the string @var{ly-code} into the input stream" + " for @var{parser-smob}.") +{ + LY_ASSERT_SMOB (Lily_parser, parser_smob, 1); + Lily_parser *parser = unsmob_lily_parser (parser_smob); + LY_ASSERT_TYPE (scm_is_string, ly_code, 2); + + parser->include_string (ly_scm2string (ly_code)); return SCM_UNSPECIFIED; } @@ -212,6 +241,32 @@ LY_DEFINE (ly_parser_set_note_names, "ly:parser-set-note-names", return SCM_UNSPECIFIED; } +LY_DEFINE (ly_parser_set_repetition_symbol, "ly:parser-set-repetition-symbol", + 2, 0, 0, (SCM parser, SCM sym), + "Replace the current repetition symbol in @var{parser}." + " @var{sym} is the new repetition symbol.") +{ + LY_ASSERT_SMOB (Lily_parser, parser, 1); + Lily_parser *p = unsmob_lily_parser (parser); + + p->lexer_->chord_repetition_.repetition_symbol_ = sym; + + return SCM_UNSPECIFIED; +} + +LY_DEFINE (ly_parser_set_repetition_function, "ly:parser-set-repetition-function", + 2, 0, 0, (SCM parser, SCM fun), + "Replace the current repetition function in @var{parser}." + " @var{fun} is the new repetition function.") +{ + LY_ASSERT_SMOB (Lily_parser, parser, 1); + Lily_parser *p = unsmob_lily_parser (parser); + + p->lexer_->chord_repetition_.repetition_function_ = fun; + + return SCM_UNSPECIFIED; +} + LY_DEFINE (ly_parser_output_name, "ly:parser-output-name", 1, 0, 0, (SCM parser), "Return the base name of the output file.")