SCM
Lily_parser::mark_smob (SCM s)
{
- Lily_parser *parser = (Lily_parser*) ly_cdr (s);
+ Lily_parser *parser = (Lily_parser*) SCM_CELL_WORD_1 (s);
return (parser->lexer_) ? parser->lexer_->self_scm () : SCM_EOL;
}
Lily_parser::print_smob (SCM s, SCM port, scm_print_state*)
{
scm_puts ("#<my_lily_parser ", port);
- Lily_parser *parser = (Lily_parser*) ly_cdr (s);
+ Lily_parser *parser = (Lily_parser*) SCM_CELL_WORD_1 (s);
(void) parser;
scm_puts (" >", port);
return 1;
void
Lily_parser::parse_string (String ly_code)
{
-#if 0
- SCM parent_prot = lexer_ ? lexer_->self_scm () : SCM_EOL;
-#endif
-
Lily_lexer * parent = lexer_;
lexer_ = (parent == 0 ? new Lily_lexer (sources_)
: new Lily_lexer (*parent));
SCM oldmod = scm_current_module ();
- scm_set_current_module (ly_car (lexer_->scopes_));
+ scm_set_current_module (scm_car (lexer_->scopes_));
// TODO: use $parser
lexer_->set_identifier (ly_symbol2scm ("parser"),
error_level_ = error_level_ | lexer_->error_level_;
-#if 0
- if (Lily_lexer::unsmob (parent_prot))
- {
- /*
- what the fuck is this good for?
- */
- parent->encoding_ = lexer_->encoding_;
- parent->chordmodifier_tab_ = lexer_->chordmodifier_tab_;
- parent->pitchname_tab_stack_ = lexer_->pitchname_tab_stack_;
- parent->sources_ = lexer_->sources_;
- parent->scopes_ = lexer_->scopes_;
- parent->error_level_ = lexer_->error_level_;
- parent->main_input_b_ = lexer_->main_input_b_;
- }
-
- scm_remember_upto_here_1 (parent_prot);
-#endif
-
scm_set_current_module (oldmod);
lexer_ = 0;
}
"Bind SYMBOL to VAL in PARSER_SMOB's module.")
{
Lily_parser *parser = unsmob_my_lily_parser (parser_smob);
- SCM_ASSERT_TYPE (ly_c_symbol_p (symbol), symbol, SCM_ARG2, __FUNCTION__, "symbol");
+ SCM_ASSERT_TYPE (scm_is_symbol (symbol), symbol, SCM_ARG2, __FUNCTION__, "symbol");
SCM_ASSERT_TYPE (parser, parser_smob, SCM_ARG2, __FUNCTION__, "parser");
parser->lexer_->set_identifier (scm_symbol_to_string (symbol), val);
{
Lily_parser *parser = unsmob_my_lily_parser (parser_smob);
- SCM_ASSERT_TYPE (ly_c_symbol_p (symbol), symbol, SCM_ARG2, __FUNCTION__, "symbol");
+ SCM_ASSERT_TYPE (scm_is_symbol (symbol), symbol, SCM_ARG2, __FUNCTION__, "symbol");
SCM_ASSERT_TYPE (parser, parser_smob, SCM_ARG2, __FUNCTION__, "parser");
SCM val= parser->lexer_->lookup_identifier (ly_scm2string (scm_symbol_to_string (symbol)));
}
Output_def*
-get_paper (Lily_parser *parser)
+get_layout (Lily_parser *parser)
{
- SCM id = parser->lexer_->lookup_identifier ("$defaultpaper");
- Output_def *paper = unsmob_output_def (id);
- paper = paper ? paper->clone () : new Output_def;
- paper->set_variable (ly_symbol2scm ("is-paper"), SCM_BOOL_T);
+ SCM id = parser->lexer_->lookup_identifier ("$defaultlayout");
+ Output_def *layout = unsmob_output_def (id);
+ layout = layout ? layout->clone () : new Output_def;
+ layout->set_variable (ly_symbol2scm ("is-layout"), SCM_BOOL_T);
- paper->parent_ = unsmob_output_def (parser->lexer_->lookup_identifier ("$defaultbookpaper"));
- return paper;
+ return layout;
}
get_midi (Lily_parser *parser)
{
SCM id = parser->lexer_->lookup_identifier ("$defaultmidi");
- Output_def *paper = unsmob_output_def (id);
- paper = paper ? paper->clone () : new Output_def;
- paper->set_variable (ly_symbol2scm ("is-midi"), SCM_BOOL_T);
- return paper;
+ Output_def *layout = unsmob_output_def (id);
+ layout = layout ? layout->clone () : new Output_def;
+ layout->set_variable (ly_symbol2scm ("is-midi"), SCM_BOOL_T);
+ return layout;
}
Output_def*
-get_bookpaper (Lily_parser *parser)
+get_paper (Lily_parser *parser)
{
- SCM id = parser->lexer_->lookup_identifier ("$defaultbookpaper");
- Output_def *paper = unsmob_output_def (id);
+ SCM id = parser->lexer_->lookup_identifier ("$defaultpaper");
+ Output_def *layout = unsmob_output_def (id);
- paper = paper ? dynamic_cast<Output_def*> (paper->clone ()) : new Output_def;
- paper->set_variable (ly_symbol2scm ("is-bookpaper"), SCM_BOOL_T);
- return paper;
+ layout = layout ? dynamic_cast<Output_def*> (layout->clone ()) : new Output_def;
+ layout->set_variable (ly_symbol2scm ("is-paper"), SCM_BOOL_T);
+ return layout;
}
Lily_parser *parser = unsmob_my_lily_parser (parser_smob);
Score *score = unsmob_score (score_smob);
+ if (score->error_found_)
+ return SCM_UNSPECIFIED;
+
SCM_ASSERT_TYPE (parser, parser_smob, SCM_ARG1, __FUNCTION__, "parser");
SCM_ASSERT_TYPE (score, score_smob, SCM_ARG2, __FUNCTION__, "score");
(*c)++;
SCM os = scm_makfrom0str (outname.to_string ().to_str0 ());
- SCM bookpaper = get_bookpaper (parser)->self_scm ();
+ SCM paper = get_paper (parser)->self_scm ();
for (int i = 0; i < score->defs_.size (); i++)
- default_rendering (score->music_, score->defs_[i]->self_scm (),
- bookpaper,
+ default_rendering (score->get_music (), score->defs_[i]->self_scm (),
+ paper,
header, os);
if (score->defs_.is_empty ())
{
- Output_def *paper = get_paper (parser);
- default_rendering (score->music_, paper->self_scm (),
- get_bookpaper (parser)->self_scm (),
+ Output_def *layout = get_layout (parser);
+ default_rendering (score->get_music(), layout->self_scm (),
+ get_paper (parser)->self_scm (),
header, os);
- scm_gc_unprotect_object (paper->self_scm ());
+ scm_gc_unprotect_object (layout->self_scm ());
}
return SCM_UNSPECIFIED;
}
{
Lily_parser *parser = unsmob_my_lily_parser (parser_smob);
Book *book = unsmob_book (book_smob);
- Output_def *bp = unsmob_output_def (parser->lexer_->lookup_identifier ("$defaultbookpaper"));
+ Output_def *bp = unsmob_output_def (parser->lexer_->lookup_identifier ("$defaultpaper"));
SCM_ASSERT_TYPE (parser, parser_smob, SCM_ARG1, __FUNCTION__, "Lilypond parser");
SCM_ASSERT_TYPE (book, book_smob, SCM_ARG2, __FUNCTION__, "Book");
/* ugh. changing argument.*/
- book->bookpaper_ = bp;
+ book->paper_ = bp;
File_name outname (parser->output_basename_);
int *c = &parser->book_count_;
outname.base_ += "-" + to_string (*c);
(*c)++;
- Output_def *paper = get_paper (parser);
-
- Paper_book* pb = book->process (outname.to_string (), paper);
+ Output_def *layout = get_layout (parser);
- pb->output (outname.to_string ());
-
- scm_gc_unprotect_object (paper->self_scm ());
- scm_gc_unprotect_object (pb->self_scm ());
+ Paper_book* pb = book->process (outname.to_string (), layout);
+ if (pb)
+ {
+ pb->output (outname.to_string ());
+ scm_gc_unprotect_object (pb->self_scm ());
+ }
+ scm_gc_unprotect_object (layout->self_scm ());
return SCM_UNSPECIFIED;
}