/*
- 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 <hanwen@xs4all.nl>
+ Copyright (C) 1997--2009 Han-Wen Nienhuys <hanwen@xs4all.nl>
Jan Nieuwenhuizen <janneke@gnu.org>
+
+ 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 <http://www.gnu.org/licenses/>.
*/
#include "lily-parser.hh"
#include "parser.hh"
#include "score.hh"
#include "sources.hh"
-#include "text-metrics.hh"
#include "warn.hh"
#include "program-option.hh"
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;
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)
{