]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/page-breaking.cc
Web-ja: update introduction
[lilypond.git] / lily / page-breaking.cc
index 29a7f27b5bcad2fb5eb83a132b282c595e93c509..fb476848983f6a6ff0ce60ea10c014fd9e294fa0 100644 (file)
@@ -1,7 +1,7 @@
 /*
   This file is part of LilyPond, the GNU music typesetter.
 
-  Copyright (C) 2006--2014 Joe Neeman <joeneeman@gmail.com>
+  Copyright (C) 2006--2015 Joe Neeman <joeneeman@gmail.com>
 
   LilyPond is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
@@ -554,7 +554,7 @@ Page_breaking::draw_page (SCM systems, SCM configuration, int page_num, bool las
   for (SCM s = systems; scm_is_pair (s); s = scm_cdr (s))
     {
       SCM paper_system = scm_car (s);
-      if (Grob *g = unsmob_grob (scm_car (s)))
+      if (Grob *g = unsmob<Grob> (scm_car (s)))
         {
           System *sys = dynamic_cast<System *> (g);
           paper_system = sys->get_paper_system ();
@@ -567,11 +567,11 @@ Page_breaking::draw_page (SCM systems, SCM configuration, int page_num, bool las
   // Create the page and draw it.
   SCM page = make_page (page_num, last);
 
-  Prob *p = unsmob_prob (page);
+  Prob *p = unsmob<Prob> (page);
   p->set_property ("lines", paper_systems);
   p->set_property ("configuration", configuration);
 
-  Stencil *foot_p = unsmob_stencil (p->get_property ("foot-stencil"));
+  Stencil *foot_p = unsmob<Stencil> (p->get_property ("foot-stencil"));
   Stencil foot = foot_p ? *foot_p : Stencil ();
 
   SCM footnotes = Page_layout_problem::get_footnotes_from_lines (systems);
@@ -594,7 +594,7 @@ Page_breaking::make_pages (vector<vsize> lines_per_page, SCM systems)
   SCM ret = SCM_EOL;
   bool reset_footnotes_on_new_page = to_boolean (book_->top_paper ()->c_variable ("reset-footnotes-on-new-page"));
   SCM label_page_table = book_->top_paper ()->c_variable ("label-page-table");
-  if (label_page_table == SCM_UNDEFINED)
+  if (SCM_UNBNDP (label_page_table))
     label_page_table = SCM_EOL;
 
   // Build a list of (systems configuration . footnote-count) triples.
@@ -651,19 +651,19 @@ Page_breaking::make_pages (vector<vsize> lines_per_page, SCM systems)
       SCM lines = scm_caar (s);
       SCM config = scm_cdar (s);
 
-      bool bookpart_last_page = (s == systems_configs_fncounts);
+      bool bookpart_last_page = scm_is_eq (s, systems_configs_fncounts);
       SCM page = draw_page (lines, config, page_num, bookpart_last_page);
       /* collect labels */
       SCM page_num_scm = scm_from_int (page_num);
       for (SCM l = lines; scm_is_pair (l); l = scm_cdr (l))
         {
           SCM labels = SCM_EOL;
-          if (Grob *line = unsmob_grob (scm_car (l)))
+          if (Grob *line = unsmob<Grob> (scm_car (l)))
             {
               System *system = dynamic_cast<System *> (line);
               labels = system->get_property ("labels");
             }
-          else if (Prob *prob = unsmob_prob (scm_car (l)))
+          else if (Prob *prob = unsmob<Prob> (scm_car (l)))
             labels = prob->get_property ("labels");
 
           for (SCM lbls = labels; scm_is_pair (lbls); lbls = scm_cdr (lbls))
@@ -689,13 +689,13 @@ Page_breaking::create_system_list ()
   SCM specs = book_->get_system_specs ();
   for (SCM s = specs; scm_is_pair (s); s = scm_cdr (s))
     {
-      if (Paper_score *ps = dynamic_cast<Paper_score *> (unsmob_music_output (scm_car (s))))
+      if (Paper_score *ps = unsmob<Paper_score> (scm_car (s)))
         {
           system_specs_.push_back (System_spec (ps));
         }
       else
         {
-          Prob *pb = unsmob_prob (scm_car (s));
+          Prob *pb = unsmob<Prob> (scm_car (s));
           assert (pb);
 
           pb->protect ();
@@ -747,7 +747,7 @@ Page_breaking::find_chunks_and_breaks (Break_predicate is_break, Prob_break_pred
           vector<vsize> line_breaker_columns;
           line_breaker_columns.push_back (0);
 
-          for (vsize j = 1; j < cols.size (); j++)
+          for (vsize j = 0; j < cols.size (); j++)
             {
               if (forced_line_break_cols.size ())
                 {
@@ -760,7 +760,7 @@ Page_breaking::find_chunks_and_breaks (Break_predicate is_break, Prob_break_pred
 
               bool last = (j == cols.size () - 1);
               bool break_point = is_break && is_break (cols[j]);
-              bool chunk_end = cols[j]->get_property ("page-break-permission") == force_sym;
+              bool chunk_end = scm_is_eq (cols[j]->get_property ("page-break-permission"), force_sym);
               Break_position cur_pos = Break_position (i,
                                                        line_breaker_columns.size (),
                                                        cols[j],
@@ -1133,7 +1133,7 @@ Page_breaking::min_page_count (vsize configuration, vsize first_page_num)
 
       if ((!too_few_lines (line_count) && (next_height > cur_page_height && cur_rod_height > 0))
           || too_many_lines (next_line_count)
-          || (prev && prev->page_permission_ == ly_symbol2scm ("force")))
+          || (prev && scm_is_eq (prev->page_permission_, ly_symbol2scm ("force"))))
         {
           line_count = cur.compressed_nontitle_lines_count_;
           cur_rod_height = cur.full_height ();
@@ -1332,7 +1332,7 @@ Page_breaking::space_systems_with_fixed_number_per_page (vsize configuration,
           system_count_on_this_page += cur_line.compressed_nontitle_lines_count_;
           line++;
 
-          if (cur_line.page_permission_ == ly_symbol2scm ("force"))
+          if (scm_is_eq (cur_line.page_permission_, ly_symbol2scm ("force")))
             break;
         }
 
@@ -1374,7 +1374,8 @@ Page_breaking::pack_systems_on_least_pages (vsize configuration, vsize first_pag
       if ((line > page_first_line)
           && (isinf (space.force_)
               || ((line > 0)
-                  && (cached_line_details_[line - 1].page_permission_ == ly_symbol2scm ("force")))))
+                  && scm_is_eq (cached_line_details_[line - 1].page_permission_,
+                                ly_symbol2scm ("force")))))
         {
           res.systems_per_page_.push_back (line - page_first_line);
           res.force_.push_back (prev_force);
@@ -1440,7 +1441,7 @@ Page_breaking::finalize_spacing_result (vsize configuration, Page_spacing_result
     }
 
   for (vsize i = ragged () ? res.force_.size () - 1 : 0;
-       i < res.force_.size () - ragged_last ();
+       i < res.force_.size () - (is_last () && ragged_last ());
        i++)
     {
       Real f = res.force_[i];
@@ -1498,7 +1499,8 @@ Page_breaking::space_systems_on_2_pages (vsize configuration, vsize first_page_n
   /* if there is a forced break, this reduces to 2 1-page problems */
   cache_line_details (configuration);
   for (vsize i = 0; i + 1 < cached_line_details_.size (); i++)
-    if (cached_line_details_[i].page_permission_ == ly_symbol2scm ("force"))
+    if (scm_is_eq (cached_line_details_[i].page_permission_,
+        ly_symbol2scm ("force")))
       {
         vector<Line_details> lines1 (cached_line_details_.begin (), cached_line_details_.begin () + i + 1);
         vector<Line_details> lines2 (cached_line_details_.begin () + i + 1, cached_line_details_.end ());