X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Flily-parser.cc;h=2cc3916ca681edf3155563f2d63e3d153beed30a;hb=b76beb7b3bb1ee422ff9c4e35b486f26732cbe17;hp=7e414916654ae9c3bc721637dc24b7bebeec0320;hpb=08fbee8d085bc6e471d6614bdaf8b29eac2169b4;p=lilypond.git diff --git a/lily/lily-parser.cc b/lily/lily-parser.cc index 7e41491665..2cc3916ca6 100644 --- a/lily/lily-parser.cc +++ b/lily/lily-parser.cc @@ -1,10 +1,21 @@ /* - lily-parser.cc -- implement Lily_parser + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter - - (c) 1997--2007 Han-Wen Nienhuys + Copyright (C) 1997--2009 Han-Wen Nienhuys Jan Nieuwenhuizen + + 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 "lily-parser.hh" @@ -22,7 +33,6 @@ #include "parser.hh" #include "score.hh" #include "sources.hh" -#include "text-metrics.hh" #include "warn.hh" #include "program-option.hh" @@ -87,9 +97,6 @@ Lily_parser::print_smob (SCM s, SCM port, scm_print_state*) void Lily_parser::parse_file (string init, string name, string out_name) { - if (get_output_backend_name () == "tex") - try_load_text_metrics (out_name); - // TODO: use $parser lexer_->set_identifier (ly_symbol2scm ("parser"), self_scm ()); output_basename_ = out_name; @@ -237,24 +244,32 @@ get_paper (Lily_parser *parser) return layout; } -/* Stack a paper on top of $papers */ +/* Initialize (reset) the $papers stack */ void -stack_paper (Lily_parser *parser, Output_def *paper) +init_papers (Lily_parser *parser) +{ + parser->lexer_->set_identifier (ly_symbol2scm ("$papers"), SCM_EOL); +} + +/* Push a paper on top of $papers stack */ +void +push_paper (Lily_parser *parser, Output_def *paper) { parser->lexer_->set_identifier (ly_symbol2scm ("$papers"), scm_cons (paper->self_scm (), parser->lexer_->lookup_identifier ("$papers"))); } -/* Unstack a paper from $papers */ +/* Pop a paper from $papers stack */ void -unstack_paper (Lily_parser *parser) +pop_paper (Lily_parser *parser) { - parser->lexer_->set_identifier (ly_symbol2scm ("$papers"), - scm_cdr (parser->lexer_->lookup_identifier ("$papers"))); + if (! scm_is_null (parser->lexer_->lookup_identifier ("$papers"))) + parser->lexer_->set_identifier (ly_symbol2scm ("$papers"), + scm_cdr (parser->lexer_->lookup_identifier ("$papers"))); } -/* Change the paper on top of $papers */ +/* Change the paper on top of $papers stack */ void set_paper (Lily_parser *parser, Output_def *paper) {