]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/lily-parser.cc
Update source file headers. Fixes using standard GNU package conventions.
[lilypond.git] / lily / lily-parser.cc
index a7816a154c6f88593c7df48461f1c25866486938..2cc3916ca681edf3155563f2d63e3d153beed30a 100644 (file)
@@ -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 <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"
@@ -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;
@@ -221,44 +228,48 @@ get_midi (Lily_parser *parser)
   return layout;
 }
 
-/* Return a copy of the top of $papers stack */
+/* Return a copy of the top of $papers stack, or $defaultpaper if the
+ * stack is empty */
 Output_def *
 get_paper (Lily_parser *parser)
 {
   SCM papers = parser->lexer_->lookup_identifier ("$papers");
-  Output_def *layout = (papers == SCM_UNDEFINED || scm_is_null (papers)) ?
+  Output_def *layout = ((papers == SCM_UNDEFINED) || scm_is_null (papers)) ?
     0 : unsmob_output_def (scm_car (papers));
+  SCM default_paper = parser->lexer_->lookup_identifier ("$defaultpaper");
+  layout = layout ? layout : unsmob_output_def (default_paper);
+
   layout = layout ? dynamic_cast<Output_def *> (layout->clone ()) : new Output_def;
   layout->set_variable (ly_symbol2scm ("is-paper"), SCM_BOOL_T);
   return layout;
 }
 
-/* Initialize $papers stack with the default paper */
+/* Initialize (reset) the $papers stack */
 void
-init_papers (Lily_parser *parser, Output_def *default_paper)
+init_papers (Lily_parser *parser)
 {
-  parser->lexer_->set_identifier (ly_symbol2scm ("$papers"),
-                                  scm_list_1 (default_paper->self_scm ()));
+  parser->lexer_->set_identifier (ly_symbol2scm ("$papers"), SCM_EOL);
 }
 
-/* Stack a paper on top of $papers */
+/* Push a paper on top of $papers stack */
 void
-stack_paper (Lily_parser *parser, Output_def *paper)
+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)
 {