]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/break-alignment-interface.cc
Web-ja: update introduction
[lilypond.git] / lily / break-alignment-interface.cc
index 79f215623f8617dd1a98dd59804033e0f03af29b..a1d7606445353ece111cbf221a4bc9eda9257f53 100644 (file)
@@ -1,7 +1,7 @@
 /*
   This file is part of LilyPond, the GNU music typesetter.
 
-  Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  Copyright (C) 1997--2015 Han-Wen Nienhuys <hanwen@xs4all.nl>
 
   LilyPond is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
@@ -58,7 +58,7 @@ Break_alignment_interface::ordered_elements (Grob *grob)
 
   SCM order = break_align_order (me);
 
-  if (order == SCM_BOOL_F)
+  if (scm_is_false (order))
     return elts;
 
   vector<Grob *> writable_elts (elts);
@@ -73,7 +73,7 @@ Break_alignment_interface::ordered_elements (Grob *grob)
       for (vsize i = writable_elts.size (); i--;)
         {
           Grob *g = writable_elts[i];
-          if (g && sym == g->get_property ("break-align-symbol"))
+          if (g && scm_is_eq (sym, g->get_property ("break-align-symbol")))
             {
               new_elts.push_back (g);
               writable_elts.erase (writable_elts.begin () + i);
@@ -94,7 +94,7 @@ MAKE_SCHEME_CALLBACK (Break_alignment_interface, calc_positioning_done, 1)
 SCM
 Break_alignment_interface::calc_positioning_done (SCM smob)
 {
-  Grob *grob = unsmob_grob (smob);
+  Grob *grob = unsmob<Grob> (smob);
   Item *me = dynamic_cast<Item *> (grob);
 
   me->set_property ("positioning-done", SCM_BOOL_T);
@@ -144,8 +144,8 @@ Break_alignment_interface::calc_positioning_done (SCM smob)
           Grob *elt = elts[i];
 
           if (edge_idx == VPOS
-              && (elt->get_property ("break-align-symbol")
-                  == ly_symbol2scm ("left-edge")))
+              && scm_is_eq (elt->get_property ("break-align-symbol"),
+                            ly_symbol2scm ("left-edge")))
             edge_idx = idx;
 
           SCM l = elt->get_property ("space-alist");
@@ -174,7 +174,7 @@ Break_alignment_interface::calc_positioning_done (SCM smob)
             }
         }
 
-      if (rsym == ly_symbol2scm ("left-edge"))
+      if (scm_is_eq (rsym, ly_symbol2scm ("left-edge")))
         edge_idx = next_idx;
 
       SCM entry = SCM_EOL;
@@ -189,8 +189,8 @@ Break_alignment_interface::calc_positioning_done (SCM smob)
             sym_string = ly_symbol2string (rsym);
 
           string orig_string;
-          if (unsmob_grob (l->get_property ("cause")))
-            orig_string = unsmob_grob (l->get_property ("cause"))->name ();
+          if (unsmob<Grob> (l->get_property ("cause")))
+            orig_string = unsmob<Grob> (l->get_property ("cause"))->name ();
 
           programming_error (to_string ("No spacing entry from %s to `%s'",
                                         orig_string.c_str (),
@@ -210,11 +210,11 @@ Break_alignment_interface::calc_positioning_done (SCM smob)
 
       if (r)
         {
-          if (type == ly_symbol2scm ("extra-space"))
+          if (scm_is_eq (type, ly_symbol2scm ("extra-space")))
             offsets[next_idx] = extents[idx][RIGHT] + distance
                                 - extents[next_idx][LEFT];
           /* should probably junk minimum-space */
-          else if (type == ly_symbol2scm ("minimum-space"))
+          else if (scm_is_eq (type, ly_symbol2scm ("minimum-space")))
             offsets[next_idx] = max (extents[idx][RIGHT], distance);
         }
       else
@@ -261,9 +261,9 @@ MAKE_SCHEME_CALLBACK (Break_alignable_interface, self_align_callback, 1)
 SCM
 Break_alignable_interface::self_align_callback (SCM grob)
 {
-  Grob *me = unsmob_grob (grob);
+  Grob *me = unsmob<Grob> (grob);
   Item *alignment = dynamic_cast<Item *> (me->get_parent (X_AXIS));
-  if (!Break_alignment_interface::has_interface (alignment))
+  if (!has_interface<Break_alignment_interface> (alignment))
     return scm_from_int (0);
 
   SCM symbol_list = me->get_property ("break-align-symbols");
@@ -277,9 +277,10 @@ Break_alignable_interface::self_align_callback (SCM grob)
       SCM sym = scm_car (symbol_list);
       for (vsize i = 0; i < elements.size (); i++)
         {
-          if (elements[i]->get_property ("break-align-symbol") == sym)
+          if (scm_is_eq (sym, elements[i]->get_property ("break-align-symbol")))
             {
               if (Item::break_visible (elements[i])
+                  // TODO SCM: simplify syntax?
                   && !elements[i]->extent (elements[i], X_AXIS).is_empty ())
                 {
                   break_aligned_grob = i;
@@ -308,7 +309,7 @@ MAKE_SCHEME_CALLBACK (Break_aligned_interface, calc_average_anchor, 1)
 SCM
 Break_aligned_interface::calc_average_anchor (SCM grob)
 {
-  Grob *me = unsmob_grob (grob);
+  Grob *me = unsmob<Grob> (grob);
   Real avg = 0.0;
   int count = 0;
 
@@ -331,7 +332,7 @@ MAKE_SCHEME_CALLBACK (Break_aligned_interface, calc_extent_aligned_anchor, 1)
 SCM
 Break_aligned_interface::calc_extent_aligned_anchor (SCM smob)
 {
-  Grob *me = unsmob_grob (smob);
+  Grob *me = unsmob<Grob> (smob);
   Real alignment = robust_scm2double (me->get_property ("break-align-anchor-alignment"), 0.0);
   Interval iv = me->extent (me, X_AXIS);
 
@@ -346,7 +347,7 @@ SCM
 Break_aligned_interface::calc_break_visibility (SCM smob)
 {
   /* a BreakAlignGroup is break-visible if it has one element that is break-visible */
-  Grob *me = unsmob_grob (smob);
+  Grob *me = unsmob<Grob> (smob);
   SCM ret = scm_c_make_vector (3, SCM_EOL);
   extract_grob_set (me, "elements", elts);
   for (int dir = 0; dir <= 2; dir++)
@@ -363,6 +364,42 @@ Break_aligned_interface::calc_break_visibility (SCM smob)
   return ret;
 }
 
+ADD_INTERFACE (Break_alignment_interface,
+               "The object that performs break alignment.\n"
+               "\n"
+               "Three interfaces deal specifically with break alignment:\n"
+               "@enumerate\n"
+               "@item break-alignment-interface (this one),\n"
+               "@item @ref{break-alignable-interface}, and\n"
+               "@item @ref{break-aligned-interface}.\n"
+               "@end enumerate\n"
+               "\n"
+               " Each of these interfaces supports grob properties that use"
+               " @w{@emph{break-align symbols}}, which are Scheme symbols that"
+               " are used to specify the alignment, ordering, and spacing of"
+               " certain notational elements (@q{breakable}@tie{}items)."
+               "\n"
+               "@subsubheading Available break-align symbols:\n"
+               "\n"
+               "@example\n"
+               "ambitus\n"
+               "breathing-sign\n"
+               "clef\n"
+               "cue-clef\n"
+               "cue-end-clef\n"
+               "custos\n"
+               "key-cancellation\n"
+               "key-signature\n"
+               "left-edge\n"
+               "staff-bar\n"
+               "time-signature\n"
+               "@end example",
+
+               /* properties */
+               "positioning-done "
+               "break-align-orders "
+              );
+
 ADD_INTERFACE (Break_alignable_interface,
                "Object that is aligned on a break alignment.",
 
@@ -372,31 +409,7 @@ ADD_INTERFACE (Break_alignable_interface,
               );
 
 ADD_INTERFACE (Break_aligned_interface,
-               "Items that are aligned in prefatory matter.\n"
-               "\n"
-               "The spacing of these items is controlled by the"
-               " @code{space-alist} property.  It contains a list"
-               " @code{break-align-symbol}s with a specification of the"
-               " associated space.  The space specification can be\n"
-               "\n"
-               "@table @code\n"
-               "@item (minimum-space . @var{spc}))\n"
-               "Pad space until the distance is @var{spc}.\n"
-               "@item (fixed-space . @var{spc})\n"
-               "Set a fixed space.\n"
-               "@item (semi-fixed-space . @var{spc})\n"
-               "Set a space.  Half of it is fixed and half is stretchable."
-               " (does not work at start of line. fixme)\n"
-               "@item (extra-space . @var{spc})\n"
-               "Add @var{spc} amount of space.\n"
-               "@end table\n"
-               "\n"
-               "Special keys for the alist are @code{first-note} and"
-               " @code{next-note}, signifying the first note on a line, and"
-               " the next note halfway a line.\n"
-               "\n"
-               "Rules for this spacing are much more complicated than this."
-               "  See [Wanske] page 126--134, [Ross] page 143--147.",
+               "Breakable items.",
 
                /* properties */
                "break-align-anchor "
@@ -404,12 +417,3 @@ ADD_INTERFACE (Break_aligned_interface,
                "break-align-symbol "
                "space-alist "
               );
-
-ADD_INTERFACE (Break_alignment_interface,
-               "The object that performs break alignment.  See"
-               " @ref{break-aligned-interface}.",
-
-               /* properties */
-               "positioning-done "
-               "break-align-orders "
-              );