-1.3.82.hwn1
-===========
+1.3.83
+======
+
+* small doc updates.
+
+* Cleanups related to barline handling:
+
+ - Removed Translator_group::get_simple_translator (), and -
+
+ - use properties to communicate about barlines and time sigs. (NOTE:
+ by default a time-signature of 4/4 is printed.)
+
+ - fix repeat bar behavior.
+
+
+* cleaned up Directional_element_interface
+
+* add name field to score-elements.
* comment in some unprotects for Music in parser. Should bring down
cpu time and plug some leaks.
title = {how to read and write tab: a guide to tab notation},
author = {Howard Wright},
email={Howard.Wright@ed.ac.uk},
- HTML={http://wabakimi.carleton.ca/~phacket2/guitar/tabfaq.html},
+ HTML={http://www.guitartabs.cc/tabfaq.shtml}
+% HTML={http://wabakimi.carleton.ca/~phacket2/guitar/tabfaq.html},
}
@node Miscellaneous, ,,top
@section Miscellaneous
+[FIXME: rewrite FAQ, include general questions]
+
@subsubsection HELP! I'm stuck!
Please read this document carefully. If you are still at loss, send
Yes, see the @file{twinkle-pop} example.
-@subsubsection Do you support guitar chord diagrams?
+@subsubsection Do you support guitar fret diagrams?
No. We ourselves don't play guitar, and don't know the fine points of
this notation. We would welcome anyone who could give this a try.
No. The same as for the previous question goes.
-
@subsubsection Do you support multiple staff-sizes?
Yes. At this time you can choose between 11, 13, 16, 19, 20, 23 and 20
@end example
-@subsubsection How do I put more than one marking on a note.
+@subsubsection How do I put more than one marking on a note?
You can stack them
@example
@end example
-@subsubsection How do I combine multiple pieces into one document
+@subsubsection How do I combine multiple pieces into one document?
There are several solutions:
There are several examples in the @file{mutopia} directory.
-@subsubsection How do I get bar numbers?
-
-See @file{input/test/bar-scripts.ly}.
-
@subsubsection How do I change the tagline 'Lily was here'?
In the @code{\header} field, add a @code{tagline} entry, e.g.
@subsubsection Is there a GUI frontend? Should I start building one?
-LilyPond currently has no graphical interface. We (LilyPond authors)
-don't feel the need to write a GUI, but several others do:
-
-Matthew Hiller has extended Midiscore and Koobase to handle mudela.
-Check out @uref{http://zoo.cs.yale.edu/~meh25/}. He is now working on
-`Denemo', a GTK based notation program (which is still being developed).
-
-Federico Mena-Quintero and Elliot Lee of RedHat Advanced Development
-labs have plans to write a GNOME based Music notation program. However,
-there is no code, only plans.
+Matthew Hiller has extended Midiscore and Koobase to handle mudela, He
+is now working on @uref{http://denemo.sourceforge.net/,Denemo}, a GTK
+based notation program. This is the most advanced LilyPond front-end
+currently available.
Chris Cannam is working a rewrite of Rosegarden. The new design should
be more modular, and could conceivably be used to output
mudela. However, the not much seems to have happened the past year. See
@uref{http://www.all-day-breakfast.com/rosegarden/development.html}.
-
@subsubsection I want to implement XXXX! How should I do this?
Your best bet of getting us to include code, is to present it as a
@example
define printstr
- print $arg0->strh_.data->data_byte_p_
+ print $arg0->ch_C()
end
define printscm
of memory it requires is proportional to the size of the score, in other
words. For a moderately complex piano scores of 5 pages, the footprint
can easily become 20 megs. (Our favorite test is the coriolan:
-approx. 100 megs for a 50 page orchestral). If your system has not got
-enough memory, it can easily start swapping.
+approx. 100 megs for a 50 page orchestral score). If your system has not
+got enough memory, it can easily start swapping.
A part of the memory is used as temporary storage, and is reclaimed
through GUILE's garbage collection. A way to trade in CPU time for
@end itemize
-Direct PS output is still experimental. For creating nice looking ps
-output, use TeX and @code{dvips}.
+Direct PS output is not used often, and therefore likely to exhibit
+bugs. For creating nice looking ps output, use TeX and @code{dvips}.
@subsubsection The beams and slurs are gone when using the XDvi magnifying glass!?
for a summary of copyright relative to old music, also for the
expert forum for such subsubsections.
+Benjy (benjy@@indiansprings.org)
+
+@quotation
+(In the UK, the typesetting of a piece of music goes out of copyright 25 year\s
+after it is published. Maybe you can tell me what copyright law says in othe\r
+countries.)
+@end quotation
+
+The US has had several schemes over the last century meaning that
+anything published after January 1, 1923 and before 1964 requires that
+you put in some work to determine its status. However, anything
+published before 1923 is fair game in the US. See
+@uref{http://www.loc.gov/copyright/circs/circ22.html} for the whole
+twisted tale.
+
@node Windows32,, ,top
@section Windows32
The website will build without this utility, but you will not see our
hypertextified bibliography.
-@item @uref{http://www.zib.de/Visual/software/doc++/index.html,DOC++}
- A documentation system for C++ sources, which is used for the
- LilyPond sources.
@end itemize
@section Configuring and compiling
This will install a number of files, something close to:
@example
- /usr/local/man/man1/mi2mu.1
+ /usr/local/man/man1/midi2ly.1
+ /usr/local/man/man1/abc2ly.1
+ /usr/local/man/man1/etf2ly.1
/usr/local/man/man1/convert-mudela.1
/usr/local/man/man1/mudela-book.1
/usr/local/man/man1/lilypond.1
/usr/local/bin/lilypond
- /usr/local/bin/mi2mu
+ /usr/local/bin/midi2ly
/usr/local/bin/convert-mudela
/usr/local/bin/mudela-book
/usr/local/bin/abc2ly
+ /usr/local/bin/etf2ly
/usr/local/share/lilypond/*
- /usr/local/share/locale/@{it,nl@}/LC_MESSAGES/lilypond.mo
+ /usr/local/share/locale/@{....@}/LC_MESSAGES/lilypond.mo
@end example
@end example
Precompiled i386 RedHat RPMS are available from
-@uref{ftp://freshmeat.net/pub/rpms/lilypond/,ftp://freshmeat.net/pub/rpms/lilypond/} and
-@uref{http://linux.umbc.edu/software/lilypond/rpms/,http://linux.umbc.edu/software/lilypond/rpms/}.
+@uref{ftp://ftp.cs.uu.nl/pub/GNU/LilyPond/RedHat/}.
For compilation on a RedHat system you need these packages,
in addition to the those needed for running:
If you find bugs, please send bug reports to
@email{bug-gnu-music@@gnu.org}.
-Known bugs that are LilyPond's fault are listed in @file{TODO}, or
-demonstrated in @file{input/bugs/}.
+Bugs that are LilyPond's fault are listed in our TODO list on the
+web, or demonstrated in @file{input/bugs/}.
-Known bugs that are not LilyPond's fault are documented here.
+Bugs that are not LilyPond's fault are documented here.
@unnumbered LinuxPPC Bugs:
will make the music as short as possible but without breaking the
line. Here is a well know harmonic progression:
@mudela[veryverbatim, intertext="produce a well known harmonic progression:"]
- <c' e g> <b d g> <c2 e g>
+ \context Voice { <c' e g> <b d g> <c2 e g> }
@end mudela
If you want to place music examples in the text,
@mudela[eps]
- <c' e g> <b d g> <c2 e g>
+\context Voice { <c' e g> <b d g> <c2 e g>}
@end mudela
, you can use the @code{eps} option. This will create the music as
eps graphics and include it into the document with the
The code used look like this:
@example
@@mudela[eps]
- <c' e g> <b d g> <c2 e g>
+ \context Voice { <c' e g> <b d g> <c2 e g> }
@@end mudela
@end example
The website will build without this utility, but you will not see
our hypertextified bibliography.
- * DOC++ (http://www.zib.de/Visual/software/doc++/index.html) A
- documentation system for C++ sources, which is used for the
- LilyPond sources.
Configuring and compiling
=========================
This will install a number of files, something close to:
- /usr/local/man/man1/mi2mu.1
+ /usr/local/man/man1/midi2ly.1
+ /usr/local/man/man1/abc2ly.1
+ /usr/local/man/man1/etf2ly.1
/usr/local/man/man1/convert-mudela.1
/usr/local/man/man1/mudela-book.1
/usr/local/man/man1/lilypond.1
/usr/local/bin/lilypond
- /usr/local/bin/mi2mu
+ /usr/local/bin/midi2ly
/usr/local/bin/convert-mudela
/usr/local/bin/mudela-book
/usr/local/bin/abc2ly
+ /usr/local/bin/etf2ly
/usr/local/share/lilypond/*
- /usr/local/share/locale/{it,nl}/LC_MESSAGES/lilypond.mo
+ /usr/local/share/locale/{....}/LC_MESSAGES/lilypond.mo
The above assumes that you are root and have the GNU development
tools, and your make is GNU make. If this is not the case, you can
rpm -i /usr/src/redhat/RPMS/i386/lilypond-x.y.z
Precompiled i386 RedHat RPMS are available from
-ftp://freshmeat.net/pub/rpms/lilypond/
-(ftp://freshmeat.net/pub/rpms/lilypond/) and
-http://linux.umbc.edu/software/lilypond/rpms/
-(http://linux.umbc.edu/software/lilypond/rpms/).
+`ftp://ftp.cs.uu.nl/pub/GNU/LilyPond/RedHat/'.
For compilation on a RedHat system you need these packages, in
addition to the those needed for running:
If you find bugs, please send bug reports to <bug-gnu-music@gnu.org>.
- Known bugs that are LilyPond's fault are listed in `TODO', or
-demonstrated in `input/bugs/'.
+ Bugs that are LilyPond's fault are listed in our TODO list on the
+web, or demonstrated in `input/bugs/'.
- Known bugs that are not LilyPond's fault are documented here.
+ Bugs that are not LilyPond's fault are documented here.
LinuxPPC Bugs:
**************
PACKAGE_NAME=LilyPond
MAJOR_VERSION=1
MINOR_VERSION=3
-PATCH_LEVEL=82
-MY_PATCH_LEVEL=hwn1
+PATCH_LEVEL=83
+MY_PATCH_LEVEL=
# use the above to send patches: MY_PATCH_LEVEL is always empty for a
# released version.
#!@PYTHON@
+
+# (urg! wat een pokkeformaat (pokkenformaat?))
+
import string
+import sys
+import re
+
+fn = sys.argv[1]
-ls = open ('barsant.pmx').readlines ()
+ls = open (fn).readlines ()
def stripcomment (l):
- return re.sub ('^%.*$', '', l)
+ return re.sub ('[ \t]*%.*$\n', '', l)
+
+def stripwhite (l):
+ return re.sub ('[ \n\t]+', ' ', l)
+
+def stripeols (l):
+ return re.sub ('^ ', '', re.sub (' $', '', l))
ls = map (stripcomment, ls)
+ls = map (stripwhite, ls)
+ls = map (stripeols, ls)
+
+
ls = filter (lambda x: x <> '', ls)
opening = ls[0]
ls = ls[1:]
+
opening = map (string.atoi, re.split ('[\t ]+', opening))
-(nv,noinst,mtrnuml,mtrdenl,mtrnump,mtrdenp,xmtrnum0,isig) = tuple (opening)
+
+(no_staffs, no_instruments, timesig_num,timesig_den, ptimesig_num,
+ ptimesig_den, pickup_beats,keysig_number) = tuple (opening)
opening = ls[0]
ls = ls[1:]
-opening = map (string.atoi, re.split ('[\t ]+', opening))
-(npages,nsyst,musicsize,fracindent) = tuple (opening)
-for l in ls:
- pass
+# ignore this.
+# opening = map (string.atoi, re.split ('[\t ]+', opening))
+# (no_pages,no_systems, musicsize, fracindent) = tuple (opening)
+
+instruments = []
+while len (instruments) < no_instruments:
+ instruments.append (ls[0])
+ ls = ls[1:]
+
+class Staff:
+ def __init__ (self):
+ self.voices = ([],[])
+ self.clef = None
+ self.instrument = 0
+l = ls[0]
+ls = ls[1:]
+
+staffs = map (lambda x: Staff (), range(0, no_staffs))
+staff_idx = 0
+
+for s in staffs:
+ s.clef = l[0]
+ l = l[1:]
+
+# dump path
+ls = ls[1:]
+
+# dump more ?
+ls = ls[2:]
+
+actab = {-2: 'eses', -1: 'es', 0 : '', 1: 'is', 2:'isis'}
+
+def pitch_to_lily_string (tup):
+ (o,n,a) = tup
+
+ nm = chr((n + 2) % 7 + ord ('a'))
+ nm = nm + actab[a]
+ if o > 0:
+ nm = nm + "'" * o
+ elif o < 0:
+ nm = nm + "," * -o
+ return nm
+
+class Chord:
+ def __init__ (self):
+ self.pitches = []
+ self.dots = 0
+ self.basic_duration = 0
+
+ def dump (self):
+ str = ''
+
+ for p in self.pitches:
+ if str:
+ str = str + ' '
+ str = str + pitch_to_lily_string (p)
+
+ if len (self.pitches) > 1:
+ str = '<%s>' % str
+ elif len (self.pitches) == 0:
+ str = 'r'
+
+
+ sd = ''
+ if self.basic_duration == 0.5:
+ sd = '\\breve'
+ else:
+ sd = '%d' % self.basic_duration
+
+ str = str + sd + '.' * self.dots
+ return str
+
+
+input_left = string.join (ls, ' ')
+
+
+input_left = re.sub ('[ \t\n]+', ' ', input_left)
+
+SPACE=' \t\n'
+DIGITS ='0123456789'
+basicdur_table = {
+ 9: 0.5,
+ 0: 0 ,
+ 2: 2 ,
+ 4: 4 ,
+ 8: 8 ,
+ 1: 16,
+ 3: 32,
+ 6: 64
+ }
+
+class Parser:
+ def __init__ (self):
+ self.chords = []
+ self.forced_duration = None
+ self.last_octave = 4
+
+ def parse_note (self, str):
+ ch = Chord ()
+
+ name = None
+ if str[0] <> 'r':
+ name = (ord (str[0]) - ord('a') + 5) % 7
+ str = str[1:]
+
+ forced_duration = 0
+ alteration = 0
+ dots = 0
+ oct = None
+ durdigit = None
+ multibar = 0
+ while str[0] in 'dsfmnul0123456789.,':
+ c = str[0]
+ str = str[1:]
+ if c == 'f':
+ alteration = alteration -1
+ elif c == 'n':
+ alteration = 0
+ elif c == 'm':
+ multibar = 1
+ elif c == 's':
+ alteration = alteration +1
+ elif c == 'd':
+ dots = dots + 1
+ elif c in DIGITS and durdigit == None:
+ durdigit = string.atoi (c)
+ elif c in DIGITS:
+ oct = string.atoi (c) - 4
+ elif c == '.':
+ dots = dots+ 1
+ forced_duration = 2
+ elif c == ',':
+ forced_duration = 2
+
+
+ if durdigit:
+ ch.basic_duration = basicdur_table[durdigit]
+ self.last_basic_duration = ch.basic_duration
+ else:
+ ch.basic_duration = self.last_basic_duration
+
+ if name:
+ if oct:
+ self.last_octave =oct
+ else:
+ oct = self.last_octave
+
+ if name:
+ ch.pitches.append ((oct, name, alteration))
+
+ ch.dots = dots
+
+
+ if forced_duration:
+ self.forced_duration = ch.basic_duration / forced_duration
+
+
+ self.chords.append (ch)
+ while str[0] in SPACE:
+ str = str [1:]
+ return str
+
+
+parser = Parser()
+while input_left:
+ while input_left[0] in 'abcdefgr':
+ input_left = parser.parse_note (input_left)
+ print input_left[0]
+
+ sys.stderr.write ("\nHuh? Unknown directive %s" %input_left[0:1])
+ input_left = input_left[1:]
+
+
+
+for c in parser.chords:
+ print c.dump ()
template<class T>
Cons<T> * last_cons (Cons<T> * head)
{
- while (head->next_)
+ while (head && head->next_)
{
head = head->next_;
}
if (isdir_b (al))
{
Direction d = to_dir (al);
- Directional_element_interface (align_item_p_).set (d);
+ Directional_element_interface::set (align_item_p_,d);
}
typeset_element (align_item_p_);
#include "musical-request.hh"
#include "multi-measure-rest.hh"
#include "command-request.hh"
-#include "timing-engraver.hh"
+
#include "engraver-group-engraver.hh"
#include "warn.hh"
#include "item.hh"
if (!bar_p_)
{
bar_p_ = new Item (get_property ("basicBarProperties"));
-
- SCM default_type = get_property ("defaultBarType");
- if (gh_string_p (default_type))
- {
- bar_p_->set_elt_property ("glyph", default_type); // ugh
- }
-
announce_element (bar_p_, 0);
}
}
-/**
- Make a barline. If there are both |: and :| requested, merge them
- to :|:.
-*/
-void
-Bar_engraver::request_bar (String requested_type)
+void
+Bar_engraver::do_creation_processing ()
{
- if (!now_mom ())
- {
- SCM prop = get_property ("barAtLineStart");
- if (!to_boolean (prop))
- return;
- }
- bool bar_existed = bar_p_;
- create_bar ();
- if (bar_existed && requested_type == "")
- {
- return;
- }
-
- String current = ly_scm2string (bar_p_->get_elt_property ("glyph"));
-
- if ((requested_type == "|:" && current== ":|")
- || (requested_type == ":|" && current == "|:"))
- requested_type = ":|:";
+}
-
- bar_p_->set_elt_property ("glyph",
- ly_str02scm (requested_type.ch_C ()));
+void
+Bar_engraver::do_removal_processing ()
+{
+ typeset_bar ();
}
-void
-Bar_engraver::do_creation_processing ()
+/*
+ Bar_engraver should come *after* any engravers that expect bars to
+ modify whichBar in do_process_music () be typeset
+*/
+void
+Bar_engraver::do_process_music()
{
+ SCM b =get_property ("whichBar");
+ if (gh_string_p (b))
+ {
+ create_bar ();
+ }
}
void
-Bar_engraver::do_removal_processing ()
+Bar_engraver::typeset_bar ()
{
if (bar_p_)
{
+ SCM gl = get_property ("whichBar");
+ if (scm_equal_p (gl, bar_p_->get_elt_property ("glyph")) != SCM_BOOL_T)
+ bar_p_->set_elt_property ("glyph", gl);
typeset_element (bar_p_);
bar_p_ =0;
}
}
-void
-Bar_engraver::do_process_music()
-{
- Translator * t = daddy_grav_l ()->get_simple_translator ("Timing_engraver"); // UGH.!
-
- Timing_engraver * te = dynamic_cast<Timing_engraver*>(t);
- String which = (te) ? te->which_bar () : "";
-
- if (which.length_i ())
- {
- create_bar();
- bar_p_->set_elt_property ("glyph", ly_str02scm (which.ch_C ()));
- }
-
+/*
+ lines may only be broken if there is a barline in all staffs
+*/
+void
+Bar_engraver::do_pre_move_processing()
+{
if (!bar_p_)
{
Score_engraver * e = 0;
{
e = dynamic_cast<Score_engraver*> (t);
}
-
+
if (!e)
programming_error ("No score engraver!");
else
- e->forbid_breaks ();
- }
-}
-
-
-void
-Bar_engraver::do_pre_move_processing()
-{
- if (bar_p_)
- {
- typeset_element (bar_p_);
- bar_p_ =0;
+ e->forbid_breaks (); // guh. Use properties!
}
+ else
+ typeset_bar ();
}
ADD_THIS_TRANSLATOR(Bar_engraver);
{
me->set_elt_property ("molecule-callback", SCM_BOOL_T);
me->set_extent_callback (0, X_AXIS);
+
// leave y_extent for spanbar?
}
- else if (! gh_equal_p (g, orig))
+
+ if (! gh_equal_p (g, orig))
me->set_elt_property ("glyph", g);
warning (_ ("beam has less than two stems"));
}
- if (!Directional_element_interface (me).get ())
- Directional_element_interface (me).set (get_default_dir (me));
+ if (!Directional_element_interface::get (me))
+ Directional_element_interface::set (me, get_default_dir (me));
auto_knees (me);
set_stem_directions (me);
for (int i=0; i <stems.size (); i++)
do { // HUH -- waar slaat dit op?
Score_element *s = stems[i];
- Direction sd = Directional_element_interface (s).get ();
+ Direction sd = Directional_element_interface::get (s);
int current = sd ? (1 + d * sd)/2
: Stem::get_center_distance (s, (Direction)-d);
{
Link_array<Item> stems
=Pointer_group_interface__extract_elements (me, (Item*) 0, "stems");
- Direction d = Directional_element_interface (me).get ();
+ Direction d = Directional_element_interface::get (me);
for (int i=0; i <stems.size (); i++)
{
Score_element *s = stems[i];
SCM force = s->remove_elt_property ("dir-forced");
if (!gh_boolean_p (force) || !gh_scm2bool (force))
- Directional_element_interface (s).set (d);
+ Directional_element_interface ::set (s,d);
}
}
bool knee_b = false;
int knee_y = 0;
SCM gap = me->get_elt_property (gap_str.ch_C());
-
- Direction d = Directional_element_interface (me).get ();
+
+ Direction d = Directional_element_interface::get (me);
Link_array<Item> stems=
Pointer_group_interface__extract_elements (me, (Item*)0, "stems");
int y = (int)(Stem::head_positions(s)[d])
+ (int)calc_interstaff_dist (s, dynamic_cast<Spanner*> (me));
- Directional_element_interface (s).set (y < knee_y ? UP : DOWN);
+ Directional_element_interface::set (s,y < knee_y ? UP : DOWN);
s->set_elt_property ("dir-forced", SCM_BOOL_T);
}
}
/*
until here, we used only stem_info, which acts as if dir=up
*/
- y *= Directional_element_interface (me).get ();
- dy *= Directional_element_interface (me).get ();
+ y *= Directional_element_interface::get (me);
+ dy *= Directional_element_interface::get (me);
Real half_space = Staff_symbol_referencer::staff_space (me) / 2;
*/
int quant_dir = 0;
if (abs (y_shift) > half_space / 2)
- quant_dir = sign (y_shift) * Directional_element_interface (me).get ();
+ quant_dir = sign (y_shift) * Directional_element_interface::get (me);
y = quantise_y_f (me, y, dy, quant_dir);
}
}
Real stem_y = (dy && dx ? (s->relative_coordinate (0, X_AXIS) - x0) / dx * dy : 0) + y;
/* knee */
- Direction dir = Directional_element_interface(me).get ();
- Direction sdir = Directional_element_interface (s).get ();
+ Direction dir = Directional_element_interface::get (me);
+ Direction sdir = Directional_element_interface::get (s);
/* knee */
if (dir!= sdir)
// huh, why not for first visible?
if (Staff_symbol_referencer::staff_symbol_l (s)
!= Staff_symbol_referencer::staff_symbol_l (last_visible_stem (me)))
- stem_y += Directional_element_interface (me).get ()
+ stem_y += Directional_element_interface::get (me)
* (beam_multiplicity - stem_multiplicity) * interbeam_f;
}
{
Real shorten = 0;
Real lengthen = 0;
- Direction dir = Directional_element_interface (me).get ();
+ Direction dir = Directional_element_interface::get (me);
Link_array<Item> stems=
Pointer_group_interface__extract_elements (me, (Item*)0, "stems");
if (a.size () <= 1)
return y;
- Real up_y = Directional_element_interface (me).get () * y;
+ Real up_y = Directional_element_interface::get (me) * y;
Interval iv = quantise_iv (a, up_y/staff_space) * staff_space;
Real q = up_y - iv[SMALLER] <= iv[BIGGER] - up_y
if (quant_dir)
q = iv[(Direction)quant_dir];
- return q * Directional_element_interface (me).get ();
+ return q * Directional_element_interface::get (me);
}
void
nw_f = me->paper_l ()->get_var ("quartwidth");
- Direction dir = Directional_element_interface (me).get ();
+ Direction dir = Directional_element_interface::get (me);
/* half beams extending to the left. */
if (prev)
Score_element * me = (Score_element*)b;
Real space = Staff_symbol_referencer::staff_space (b);
- Direction d = Directional_element_interface (b). get ();
+ Direction d = Directional_element_interface::get (b);
if (!d)
{
d = UP;
- Directional_element_interface (me).set (d);
+ Directional_element_interface::set (me, d);
}
return 2.0 * space * d;
It's amazing Mike:
Stem:: type_i () ->first_head ()->get_direction () ->
- Directional_element_interface (me).set (d);
+ Directional_element_interface::set (me, d);
don't understand this comment.
#include "musical-request.hh"
#include "warn.hh"
#include "debug.hh"
-#include "molecule.hh"
-#include "paper-def.hh"
-#include "lookup.hh"
-#include "lookup.hh"
+#include "music-list.hh"
+#include "musical-request.hh"
int
compare (Chord* left, Chord* right)
pitch_arr_p->insert (bass, 0);
}
+
+// junk me
+Simultaneous_music *
+get_chord (Musical_pitch tonic,
+ Array<Musical_pitch>* add_arr_p,
+ Array<Musical_pitch>* sub_arr_p,
+ Musical_pitch* inversion_p,
+ Musical_pitch* bass_p,
+ Duration d)
+{
+
+ /*
+ UARGAUGRAGRUAUGRUINAGRAUGIRNA
+
+ ugh
+ */
+ Chord chord = to_chord (tonic, add_arr_p, sub_arr_p, inversion_p, bass_p);
+ inversion_p = 0;
+ bass_p = 0;
+
+ Tonic_req* t = new Tonic_req;
+ t->pitch_ = tonic;
+ SCM l = gh_cons (t->self_scm (), SCM_EOL);
+
+ //urg
+ if (chord.inversion_b_
+ && Chord::find_notename_i (&chord.pitch_arr_, chord.inversion_pitch_) > 0)
+ {
+ Inversion_req* i = new Inversion_req;
+ i->pitch_ = chord.inversion_pitch_;
+ l = gh_cons (i->self_scm (), l);
+ }
+
+ if (chord.bass_b_)
+ {
+ Bass_req* b = new Bass_req;
+ b->pitch_ = chord.bass_pitch_;
+ l = gh_cons (b->self_scm (), l);
+ }
+
+ Array<Musical_pitch> pitch_arr = chord.to_pitch_arr ();
+ for (int i = pitch_arr.size (); --i >= 0;)
+ {
+ Musical_pitch p = pitch_arr[i];
+ Note_req* n = new Note_req;
+ n->pitch_ = p;
+ n->duration_ = d;
+ l = gh_cons (n->self_scm (), l);
+ }
+
+ Simultaneous_music*v = new Request_chord (l);
+
+ return v;
+}
+
+
#include "musical-request.hh"
-bool
-Bar_req::do_equal_b (Request const *r) const
-{
- Bar_req const* b = dynamic_cast <Bar_req const *> (r);
- return b && type_str_ == b->type_str_;
-}
-
-void
-Bar_req::do_print () const
-{
-#ifndef NPRINT
- DEBUG_OUT << type_str_;
-#endif
-}
-
Bar_req::Bar_req (String s)
{
- type_str_ = s;
+ set_mus_property ("type", ly_str02scm (s.ch_C()));
}
bool
#include "directional-element-interface.hh"
-Directional_element_interface::Directional_element_interface (Score_element const *s)
+static SCM Directional_element_interface::direction_sym;
+
+static void
+init_functions ()
{
- elt_l_ = (Score_element*)s;
+ Directional_element_interface::direction_sym = scm_permanent_object (ly_symbol2scm ("direction"));
}
+ADD_SCM_INIT_FUNC(Directional, init_functions);
+
bool
-Directional_element_interface::has_interface () const
+Directional_element_interface::has_interface (Score_element*me)
{
- return isdir_b (elt_l_->get_elt_property ("direction"));
+ return isdir_b (me->get_elt_property (direction_sym));
}
-
-
-
Direction
-Directional_element_interface::get () const
+Directional_element_interface::get (Score_element*me)
{
// return dir_;
- SCM d= elt_l_->get_elt_property ("direction");
+ SCM d= me->get_elt_property (direction_sym);
if (!isdir_b(d))
return CENTER;
}
void
-Directional_element_interface::set (Direction d)
+Directional_element_interface::set (Score_element*me, Direction d)
{
- elt_l_->set_elt_property ("direction", gh_int2scm (d));
+ SCM sd = gh_int2scm (d);
+
+ if (me->get_elt_property (direction_sym) != sd)
+ me->set_elt_property (direction_sym, sd);
}
Dot_column::set_interface (Score_element* me)
{
me->set_elt_property ("dots", SCM_EOL);
- Directional_element_interface (me).set (RIGHT);
+ Directional_element_interface::set (me, RIGHT);
Axis_group_interface::set_interface (me);
Axis_group_interface::set_axes (me, X_AXIS,X_AXIS);
SCM d= me->get_elt_property ("dot-count");
if (gh_number_p (d) && gh_scm2int (d))
{
- if (!Directional_element_interface (me).get ())
- Directional_element_interface (me).set (UP);
+ if (!Directional_element_interface::get (me))
+ Directional_element_interface::set (me, UP);
int pos = int (Staff_symbol_referencer::position_f (me));
if (!(pos % 2))
- return Staff_symbol_referencer::staff_space (me) / 2.0 * Directional_element_interface (me).get ();
+ return Staff_symbol_referencer::staff_space (me) / 2.0 * Directional_element_interface::get (me);
}
return 0.0;
text_p_ = new Item (get_property ("basicDynamicTextProperties"));
text_p_->set_elt_property ("text", ly_str02scm (loud.ch_C ()));
if (Direction d=text_req_l_->get_direction ())
- Directional_element_interface (line_spanner_).set (d);
+ Directional_element_interface::set (line_spanner_, d);
Axis_group_interface::add_element (line_spanner_, text_p_);
{
accepted_spanreqs_drul_[START]->origin ()->warning
(current_cresc_req_->span_dir_ == 1
- ?
- _ ("already have a crescendo")
+ ? _ ("already have a crescendo")
: _ ("already have a decrescendo"));
}
else
void
Engraver::announce_element (Score_element* e, Music *m)
{
- if (e->get_elt_property ("interfaces") == SCM_EOL)
- Group_interface (e, "interfaces").add_thing (ly_symbol2scm (e->name()));
-
if (m && m->origin ()->location_str ().length_i ())
{
e->set_elt_property ("origin", m->get_mus_property ("origin"));
#include "group-interface.hh"
#include "score-element.hh"
-Group_interface::Group_interface (Score_element const* e)
+/*
+ ugh: clean me, junk elt_l_ field
+ */
+Group_interface::Group_interface (Score_element * e)
{
elt_l_ = (Score_element*)e;
name_ = "elements";
}
-Group_interface::Group_interface (Score_element const *e, String s)
+Group_interface::Group_interface (Score_element *e, String s)
{
elt_l_ =(Score_element*)e;
name_ = s;
private:
+ void typeset_bar ();
void create_bar ();
Item * bar_p_;
int compare (Chord*, Chord*);
+Simultaneous_music *get_chord (Musical_pitch tonic,
+ Array<Musical_pitch>* add_arr_p,
+ Array<Musical_pitch>* sub_arr_p,
+ Musical_pitch* inversion_p,
+ Musical_pitch* bass_p,
+ Duration d);
+
+
+
#endif // CHORD_HH
class Mark_req : public Request {
public:
- SCM mark_label ();
-
-
virtual bool do_equal_b (Request const*) const;
+ SCM mark_label ();
VIRTUAL_COPY_CONS(Music);
};
the latter should only happen at the start of a measure. */
class Bar_req : public Request {
public:
- String type_str_;
+
Bar_req (String);
protected:
- virtual bool do_equal_b (Request const*) const;
- virtual void do_print () const;
-
VIRTUAL_COPY_CONS(Music);
};
struct Directional_element_interface
{
-
public:
- Score_element *elt_l_;
-
- Directional_element_interface (Score_element const *);
- void set (Direction d);
- Direction get () const;
- bool has_interface () const;
- // bool set_interface ();
+ static SCM direction_sym ;
+ static void set (Score_element*,Direction d);
+ static Direction get (Score_element*) ;
+ static bool has_interface (Score_element*) ;
};
Score_element * elt_l_;
String name_;
public:
- Group_interface (Score_element const*);
- Group_interface (Score_element const*, String);
+ Group_interface (Score_element *);
+ Group_interface (Score_element *, String);
int count ();
void add_thing (SCM);
bool has_interface ();
Score_element * elt_l_;
String name_;
public:
- Pointer_group_interface (Score_element const*);
- Pointer_group_interface (Score_element const*, String);
+ Pointer_group_interface (Score_element*);
+ Pointer_group_interface (Score_element*, String);
int count ();
void set_interface ();
static bool has_interface (Score_element*);
@see Music_sequence
+
+ TODO: make a equalp function for general music.
*/
class Music {
public:
Moment body_length_mom () const;
Moment alternatives_length_mom () const;
- void print() const;
/// Transpose, with the interval central C to #p#
virtual void transpose (Musical_pitch p);
Repeated_music (Music*, int , Music_sequence*);
Repeated_music (Repeated_music const&);
-protected:
- virtual void do_print() const;
};
0 means ORPHAN,
*/
char status_i_;
- char const * name () const;
+ String name () const;
/*
IDEA: make this a global variable. This is the same for all
static bool has_interface (Score_element*);
static Interval get_spanned_interval (Score_element*);
static void add_bar (Score_element*,Score_element*);
+ static void evaluate_glyph (Score_element*);
static void evaluate_empty (Score_element*);
static Interval width_callback(Score_element *, Axis) ;
static SCM get_bar_size (SCM);
+++ /dev/null
-/*
- timing-engraver.hh -- declare Timing_engraver
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
-*/
-
-
-#ifndef TIMING_GRAV_HH
-#define TIMING_GRAV_HH
-
-#include "timing-translator.hh"
-#include "engraver.hh"
-
-/**
- Do time bookkeeping
- */
-class Timing_engraver : public Timing_translator, public Engraver
-{
-
- Bar_req * bar_req_l_;
-protected:
- virtual bool do_try_music (Music * );
- virtual void do_post_move_processing ();
-public:
- String which_bar ();
- VIRTUAL_COPY_CONS(Translator);
-
-};
-
-#endif // TIMING_GRAV_HH
{
public:
VIRTUAL_COPY_CONS(Translator);
- Time_signature_change_req * time_signature_req_l () const;
Timing_translator ();
Link_array<Timing_req> timing_req_l_arr_;
virtual void do_post_move_processing();
public:
-
Moment measure_position () const;
Moment measure_length () const;
void set_time_signature (int, int);
-
};
#endif // TIMING_TRANSLATOR_HH
VIRTUAL_COPY_CONS(Translator);
Translator_group(Translator_group const &);
Translator_group();
- void add_simple_translator (Translator *trans_p);
void add_group_translator (Translator *trans_p);
void terminate_translator (Translator*r_l);
Translator *remove_translator_p (Translator*trans_l);
void check_removal ();
- Translator *get_simple_translator (String) const;
+ // Translator *get_simple_translator (String) const;
Translator_group *find_existing_translator_l (String n, String id);
Translator_group *find_create_translator_l (String n, String id);
Link_array<Translator_group> path_to_acceptable_translator (String alias, Music_output_def*) const;
void
Key_engraver::do_removal_processing ()
{
- old_accs_ = SCM_EOL; // unprotect can be called from dtor.
+ old_accs_ = SCM_EOL; // unprotect can not be called from dtor.
}
Key_engraver::Key_engraver ()
#include "my-lily-lexer.hh"
#include "debug.hh"
#include "main.hh"
-#include "music-list.hh"
-#include "musical-request.hh"
-#include "command-request.hh"
-#include "lily-guile.hh"
#include "parser.hh"
-#include "scope.hh"
#include "file-results.hh"
-#include "midi-def.hh"
-#include "paper-def.hh"
-#include "identifier.hh"
-#include "chord.hh"
+#include "scope.hh"
My_lily_parser::My_lily_parser (Sources * source_l)
{
default_duration_ = *d;
}
-// junk me
-Simultaneous_music *
-My_lily_parser::get_chord (Musical_pitch tonic,
- Array<Musical_pitch>* add_arr_p,
- Array<Musical_pitch>* sub_arr_p,
- Musical_pitch* inversion_p,
- Musical_pitch* bass_p,
- Duration d)
-{
-
- /*
- UARGAUGRAGRUAUGRUINAGRAUGIRNA
-
- ugh
- */
- Chord chord = to_chord (tonic, add_arr_p, sub_arr_p, inversion_p, bass_p);
- inversion_p = 0;
- bass_p = 0;
-
- Tonic_req* t = new Tonic_req;
- t->pitch_ = tonic;
- SCM l = gh_cons (t->self_scm (), SCM_EOL);
-
- //urg
- if (chord.inversion_b_
- && Chord::find_notename_i (&chord.pitch_arr_, chord.inversion_pitch_) > 0)
- {
- Inversion_req* i = new Inversion_req;
- i->pitch_ = chord.inversion_pitch_;
- l = gh_cons (i->self_scm (), l);
- }
-
- if (chord.bass_b_)
- {
- Bass_req* b = new Bass_req;
- b->pitch_ = chord.bass_pitch_;
- l = gh_cons (b->self_scm (), l);
- }
-
- Array<Musical_pitch> pitch_arr = chord.to_pitch_arr ();
- for (int i = pitch_arr.size (); --i >= 0;)
- {
- Musical_pitch p = pitch_arr[i];
- Note_req* n = new Note_req;
- n->pitch_ = p;
- n->duration_ = d;
- l = gh_cons (n->self_scm (), l);
- }
-
- Simultaneous_music*v = new Request_chord (l);
- v->set_spot (here_input ());
-
- return v;
-}
-
-
Input
My_lily_parser::pop_spot()
#include "auto-change-music.hh"
#include "part-combine-music.hh"
#include "output-property.hh"
+#include "chord.hh"
bool
is_duration_b (int t)
Music *music;
Score *score;
Scope *scope;
- Interval *interval;
+
Musical_req* musreq;
Music_output_def * outputdef;
Musical_pitch * pitch;
Midi_def* midi;
- Moment *moment;
Real real;
Request * request;
chord:
steno_tonic_pitch optional_notemode_duration chord_additions chord_subtractions chord_inversion chord_bass {
- $$ = THIS->get_chord (*$1, $3, $4, $5, $6, *$2);
+ $$ = get_chord (*$1, $3, $4, $5, $6, *$2);
+ $$->set_spot (THIS->here_input ());
};
chord_additions:
#include "group-interface.hh"
#include "score-element.hh"
-Pointer_group_interface::Pointer_group_interface (Score_element const* e)
+/*
+ UGH clean me .
+ */
+Pointer_group_interface::Pointer_group_interface (Score_element * e)
{
- elt_l_ = (Score_element*)e;
+ elt_l_ = e;
name_ = "elements";
}
-Pointer_group_interface::Pointer_group_interface (Score_element const *e, String s)
+Pointer_group_interface::Pointer_group_interface (Score_element *e, String s)
{
elt_l_ =(Score_element*)e;
name_ = s;
}
+
+/*
+ duh.
+ */
bool
Pointer_group_interface::has_interface ()
{
void
Pointer_group_interface::set_interface ()
{
- if (!has_interface ())
- {
- elt_l_->set_elt_property (name_.ch_C(), SCM_EOL);
- }
}
happens at the begin of the alt. The :| bar event at the ending.
*/
- for (SCM s = repeated_music_l_->alternatives ()->music_list ();
- gh_pair_p (s); s = gh_cdr (s))
- {
- Music *mus =unsmob_music (gh_car (s));
+ for (SCM s = repeated_music_l_->alternatives ()->music_list ();
+ gh_pair_p (s); s = gh_cdr (s))
+ {
+ Music *mus =unsmob_music (gh_car (s));
/*
some idiot might typeset a repeat not starting on a
becel.append (c);
last_number = volta_number;
volta_number ++;
- SCM l (get_property ("voltaSpannerDuration"));
- if (unsmob_moment(l))
+ SCM l (get_property ("voltaSpannerDuration"));
+ if (unsmob_moment(l))
{
Moment vSD_mom = *unsmob_moment (l);
if ( vSD_mom < mus->length_mom() ) // terminate volta early ?
}
}
- Cons<Bar_create_event> *&tail = create_barmoments_queue_
- ? last_cons (create_barmoments_queue_)->next_
- : create_barmoments_queue_;
+ /*
+ ugh, should merge :| and |: here.
+ */
+ Cons<Bar_create_event> * last = last_cons (create_barmoments_queue_);
+ Cons<Bar_create_event> **tail = last? & last->next_
+ : & create_barmoments_queue_;
- tail = becel.head_ ;
+ *tail = becel.head_ ;
+
becel.head_ = 0;
}
}
- Cons<Bar_create_event> * head = create_barmoments_queue_;
+ Cons<Bar_create_event> * head = create_barmoments_queue_;
if (!head)
return;
- Bar_engraver* bar_engraver_l = dynamic_cast <Bar_engraver*>
- (daddy_grav_l ()->get_simple_translator ("Bar_engraver")); // UGH
-
/*
Do all the events that need to be done now.
*/
{
create_barmoments_queue_ = create_barmoments_queue_->next_;
head->next_ =0;
- if (bar_engraver_l)
+ String t = head->car_->type_;
+ if (head->car_->bar_b_)
{
- String t = head->car_->type_;
- if (head->car_->bar_b_)
+ if (t == "stop" || t == ":|")
{
- if (t == "stop" || t == ":|")
- {
- end_volta_span_p_ = volta_span_p_;
- volta_span_p_ =0;
- }
-
- if (t != "stop")
- bar_engraver_l->request_bar (t);
- else
- bar_engraver_l->request_bar ("");
+ end_volta_span_p_ = volta_span_p_;
+ volta_span_p_ =0;
}
- else
+
+ SCM whsym = ly_symbol2scm ("whichBar");
+ Translator_group* where = daddy_trans_l_->where_defined (whsym);
+ SCM which = where->get_property (whsym);
+
+ /*
+ Should use symbols for bar glyphs.
+ */
+ if (t == "stop" && which == SCM_UNDEFINED)
+ which = ly_str02scm ("");
+ else if (t != "stop")
{
- assert (!volta_span_p_);
- volta_span_p_ = new Spanner (get_property ("basicVoltaSpannerProperties"));
- Volta_spanner::set_interface (volta_span_p_);
- announce_element (volta_span_p_,0);
- volta_span_p_->set_elt_property ("text",
- ly_str02scm (t.ch_C()));
- volta_span_p_->set_elt_property ("last-volta",
- gh_bool2scm (head->car_->last_b_));
- // voltaSpannerDuration stuff here.
- // other property stuff here.
+ SCM l = ly_str02scm (":|");
+ SCM r = ly_str02scm ("|:");
+
+ if ( (t == "|:" && scm_equal_p (which, l) == SCM_BOOL_T)
+ || (t == ":|" && scm_equal_p (which, r)== SCM_BOOL_T))
+ t = ":|:";
+
+ if (t != "" || !gh_string_p (which))
+ which = ly_str02scm (t.ch_C());
}
-
+ where->set_property (whsym, which);
}
else
{
- warning (_ ("No bar engraver found. Ignoring repeats."));
+ assert (!volta_span_p_);
+ volta_span_p_ = new Spanner (get_property ("basicVoltaSpannerProperties"));
+ Volta_spanner::set_interface (volta_span_p_);
+ announce_element (volta_span_p_,0);
+ volta_span_p_->set_elt_property ("text",
+ ly_str02scm (t.ch_C()));
+ volta_span_p_->set_elt_property ("last-volta",
+ gh_bool2scm (head->car_->last_b_));
+ // voltaSpannerDuration stuff here.
+ // other property stuff here.
}
+
delete head->car_;
delete head;
Repeated_music::Repeated_music(Music *beg, int times, Music_sequence * alts)
{
- set_mus_property ("body", beg->self_scm ());
+ if (beg)
+ {
+ set_mus_property ("body", beg->self_scm ());
+ scm_unprotect_object (beg->self_scm ());
+ }
fold_b_ = false;
repeats_i_ = times;
volta_fold_b_ = true;
{
alts->truncate (times);
set_mus_property ("alternatives", alts->self_scm ());
+ scm_unprotect_object (alts->self_scm ());
}
-
- scm_unprotect_object (beg->self_scm ());
- scm_unprotect_object (alts->self_scm ());
}
Repeated_music::Repeated_music (Repeated_music const &s)
}
-void
-Repeated_music::do_print () const
-{
-#ifndef NPRINT
- DEBUG_OUT << "Fold = " << fold_b_ << " reps: " << repeats_i_;
-
- if (body ())
- body ()->print();
-
- if (alternatives ())
- alternatives ()->print();
-#endif
-}
-
Musical_pitch
Repeated_music::to_relative_octave (Musical_pitch p)
{
return common;
}
-char const *
+String
Score_element::name () const
{
- return classname (this);
+ SCM nm = get_elt_property ("name");
+
+ return nm == SCM_EOL ? classname (this) :ly_scm2string (nm) ;
}
void
Score_element *sc = (Score_element *) gh_cdr (s);
scm_puts ("#<Score_element ", port);
- scm_puts ((char *)sc->name (), port);
+ scm_puts ((char *)sc->name ().ch_C(), port);
/*
don't try to print properties, that is too much hassle.
if (!s->get_bound (d))
{
s->set_bound(d, command_column_l_);
- ::warning (_f ("unbound spanner `%s'", classname(s)));
+ ::warning (_f ("unbound spanner `%s'", s->name().ch_C()));
}
} while (flip(&d) != LEFT);
}
void
Separating_group_spanner::set_interface (Score_element*me)
{
- me->set_elt_property ("elements", SCM_EOL);
+
}
void
Slur::set_extremities (Score_element*me)
{
- if (!Directional_element_interface (me).get ())
- Directional_element_interface (me).set (get_default_dir (me));
+ if (!Directional_element_interface::get (me))
+ Directional_element_interface ::set (me,get_default_dir (me));
Direction dir = LEFT;
do
if (str == "head")
{
o = Offset (0, Stem::head_positions (stem)
- [Directional_element_interface (me).get ()] * hs);
+ [Directional_element_interface::get (me)] * hs);
/*
Default position is centered in X, on outer side of head Y
*/
o += Offset (0.5 * n->extent (X_AXIS).length (),
- 0.5 * ss * Directional_element_interface (me).get ());
+ 0.5 * ss * Directional_element_interface::get (me));
}
else if (str == "alongside-stem")
{
*/
o += Offset (n->extent (X_AXIS).length ()
* (1 + Stem::get_direction (stem)),
- 0.5 * ss * Directional_element_interface (me).get ());
+ 0.5 * ss * Directional_element_interface::get (me));
}
else if (str == "stem")
{
SCM l = scm_assoc
(scm_listify (a,
gh_int2scm (stem ? Stem::get_direction (stem) : 1 * dir),
- gh_int2scm (Directional_element_interface (me).get () * dir),
+ gh_int2scm (Directional_element_interface::get (me) * dir),
SCM_UNDEFINED),
scm_eval2 (ly_symbol2scm ("slur-extremity-offset-alist"), SCM_EOL));
Offset o;
Score_element* stem_l = unsmob_element (col->get_elt_property ("stem"));
- Direction dir = Directional_element_interface (me).get ();
+ Direction dir = Directional_element_interface::get (me);
if (!stem_l)
{
o[Y_AXIS] = col->relative_coordinate (common[Y_AXIS], Y_AXIS);
return o;
}
- Direction stem_dir = Directional_element_interface (stem_l).get ();
+ Direction stem_dir = Directional_element_interface::get (stem_l);
o[X_AXIS] = stem_l->relative_coordinate (0, X_AXIS);
/*
if (gh_number_p (d))
a = me->lookup_l ()->dashed_slur (one, thick, thick * gh_scm2double (d));
else
- a = me->lookup_l ()->slur (one, Directional_element_interface (me).get () * thick, thick);
+ a = me->lookup_l ()->slur (one, Directional_element_interface::get (me) * thick, thick);
return a.create_scheme();
}
Real r_0 = me->paper_l ()->get_var ("slur_ratio");
Slur_bezier_bow bb (get_encompass_offset_arr (me),
- Directional_element_interface (me).get (),
+ Directional_element_interface::get (me),
h_inf, r_0);
if (bb.fit_factor () > 1.0)
Bezier b;
int i = 0;
- if (!Directional_element_interface (me).get ()
+ if (!Directional_element_interface::get (me)
|| ! gh_symbol_p (index_cell (me->get_elt_property ("attachment"), LEFT)))
set_extremities (me);
}
Array<Offset> enc (get_encompass_offset_arr (me));
- Direction dir = Directional_element_interface (me).get ();
+ Direction dir = Directional_element_interface::get (me);
Real x1 = enc[0][X_AXIS];
Real x2 = enc.top ()[X_AXIS];
{
spanbar_p_ = new Item (get_property ("basicSpanBarProperties"));
Span_bar::set_interface (spanbar_p_);
- spanbar_p_->set_elt_property ("glyph", bar_l_arr_[0]->get_elt_property ("glyph"));
- spanbar_p_->set_elt_property ("visibility-lambda",
- bar_l_arr_[0]->get_elt_property ("visibility-lambda"));
-
+
spanbar_p_->set_parent (bar_l_arr_[0], Y_AXIS);
spanbar_p_->set_parent (bar_l_arr_[0], X_AXIS);
{
for (int i=0; i < bar_l_arr_.size() ; i++)
Span_bar::add_bar( spanbar_p_,bar_l_arr_[i]);
+
+ SCM vissym =ly_symbol2scm ("visibility-lambda");
+ SCM vis = bar_l_arr_[0]->get_elt_property (vissym);
+ if (scm_equal_p (spanbar_p_->get_elt_property (vissym), vis) != SCM_BOOL_T)
+ spanbar_p_->set_elt_property (vissym, vis);
+
typeset_element (spanbar_p_);
spanbar_p_ =0;
}
SCM
Span_bar::before_line_breaking (SCM smob)
{
- Bar::before_line_breaking (smob);
-
evaluate_empty (unsmob_element (smob));
+ evaluate_glyph (unsmob_element (smob));
+ /*
+ no need to call Bar::before_line_breaking (), because the info
+ in ELEMENTS already has been procced by Bar::before_line_breaking().
+ */
return SCM_UNSPECIFIED;
}
{
me->suicide ();
}
-
- SCM gl = me->get_elt_property ("glyph");
+}
+
+void
+Span_bar::evaluate_glyph (Score_element*me)
+{
+ SCM elts = me->get_elt_property ("elements");
+ Score_element * b = unsmob_element (gh_car (elts));
+ SCM glsym =ly_symbol2scm ("glyph");
+ SCM gl =b ->get_elt_property (glsym);
if (!gh_string_p (gl))
{
me->suicide ();
return ;
}
- else {
- String type_str = ly_scm2string (gl);
- String orig = type_str;
- if (type_str == "|:")
- {
- type_str= ".|";
- }
- else if (type_str== ":|")
- {
- type_str= "|.";
- }
- else if (type_str== ":|:")
- {
- type_str= ".|.";
- }
- if (orig != type_str)
- me->set_elt_property ("glyph", ly_str02scm (type_str.ch_C()));
- }
+
+ String type = ly_scm2string (gl);
+
+ if (type == "|:")
+ {
+ type = ".|";
+ }
+ else if (type== ":|")
+ {
+ type = "|.";
+ }
+ else if (type== ":|:")
+ {
+ type = ".|.";
+ }
+
+ gl = ly_str02scm (type.ch_C());
+ if (scm_equal_p (me->get_elt_property (glsym), gl) != SCM_BOOL_T)
+ me->set_elt_property (glsym, gl);
}
Interval
if (!parent->spanned_rank_iv ().contains_b (this->spanned_rank_iv ()))
{
programming_error (to_str ("Spanner `%s' is not fully contained in parent spanner `%s'.",
- classname (this),
- classname (parent)));
+ name().ch_C(),
+ parent->name ().ch_C ()));
}
}
}
int beams_i = Stem::beam_count(stem, RIGHT) >? Stem::beam_count (stem, LEFT);
mol.translate (Offset(stem->relative_coordinate (0, X_AXIS) - me->relative_coordinate (0, X_AXIS),
Stem::stem_end_position (stem ) * ss / 2 -
- Directional_element_interface (beam).get () * beams_i * interbeam_f));
+ Directional_element_interface::get (beam) * beams_i * interbeam_f));
}
else
{
Direction
Stem::get_direction (Score_element*me)
{
- Direction d = Directional_element_interface (me).get ();
+ Direction d = Directional_element_interface::get (me);
if (!d)
{
d = get_default_dir (me);
// urg, AAARGH!
- Directional_element_interface (me).set (d);
+ Directional_element_interface::set (me, d);
}
return d ;
}
if (!dir)
{
dir = get_default_dir (me);
- Directional_element_interface (me).set (dir);
+ Directional_element_interface::set (me, dir);
}
/*
{
Score_element * beam = beam_l (me);
- Direction beam_dir = Directional_element_interface (beam).get ();
+ Direction beam_dir = Directional_element_interface::get (beam);
if (!beam_dir)
{
programming_error ("Beam dir not set.");
Real stem_length = a[multiplicity <? (a.size () - 1)] * staff_space;
- if (!beam_dir || (beam_dir == Directional_element_interface (me).get ()))
+ if (!beam_dir || (beam_dir == Directional_element_interface::get (me)))
/* normal beamed stem */
{
if (multiplicity)
Pointer_group_interface__extract_elements (me, (Score_element*)0, "ties");
- Direction d = Directional_element_interface (me).get ();
+ Direction d = Directional_element_interface::get (me);
if (d)
{
for (int i = ties.size (); i--;)
{
Score_element * t = ties[i];
- Directional_element_interface (t).set (d);
+ Directional_element_interface::set (t, d);
}
return;
}
if (ties.size () == 1)
{
Score_element * t = ties[0];
- Directional_element_interface (t).set (Tie::get_default_dir (t));
+ Directional_element_interface::set (t,Tie::get_default_dir (t));
return;
}
ties.sort (tie_compare);
- Directional_element_interface tie0(ties[0]);
- tie0.set (DOWN);
+ Directional_element_interface::set( ties[0], DOWN);
ties.del (0);
- Directional_element_interface tietop(ties.pop ());
- tietop.set (UP);
-
+ Directional_element_interface ::set(ties.pop (), UP);
for (int i=ties.size(); i--; )
{
Score_element * t = ties[i];
Direction d = (Direction) sign (p);
if (!d)
d = UP;
- Directional_element_interface (t).set (d);
+ Directional_element_interface::set (t, d);
}
}
if (sl && sr)
{
- if (Directional_element_interface (sl).get () == UP
- && Directional_element_interface (sr).get () == UP)
+ if (Directional_element_interface::get (sl) == UP
+ && Directional_element_interface::get (sr) == UP)
return DOWN;
}
else if (sl || sr)
{
Item *s = sl ? sl : sr;
- return - Directional_element_interface (s). get ();
+ return - Directional_element_interface::get (s);
}
return SCM_UNSPECIFIED;
}
- if (!Directional_element_interface (me).get ())
- Directional_element_interface (me).set (Tie::get_default_dir (me));
+ if (!Directional_element_interface::get (me))
+ Directional_element_interface::set (me, Tie::get_default_dir (me));
Real staff_space = Staff_symbol_referencer::staff_space (me);
- 2 * x_gap_f;
}
- Direction dir = Directional_element_interface (me).get();
+ Direction dir = Directional_element_interface::get(me);
Real h_inf = me->paper_l ()->get_var ("tie_height_limit_factor") * staff_space;
Real r_0 = me->paper_l ()->get_var ("tie_ratio");
i++;
}
- Molecule a = me->lookup_l ()->slur (b, Directional_element_interface (me).get () * thick, thick);
+ Molecule a = me->lookup_l ()->slur (b, Directional_element_interface::get (me) * thick, thick);
return a.create_scheme ();
}
#include "command-request.hh"
#include "engraver.hh"
-#include "timing-engraver.hh"
+
#include "engraver-group-engraver.hh"
public:
VIRTUAL_COPY_CONS(Translator);
Item * time_signature_p_;
-
+ SCM last_time_fraction_;
Time_signature_engraver();
};
Time_signature_engraver::Time_signature_engraver()
{
time_signature_p_ =0;
+ last_time_fraction_ = SCM_EOL;
}
void
Time_signature_engraver::do_process_music()
{
/*
- UGH.
- this should use properties.
- */
- Translator * result =
- daddy_grav_l()->get_simple_translator ("Timing_engraver"); // ugh
-
- if (!result)
- {
- warning (_ ("lost in time:"));
- warning (_f ("can't find: `%s'", " Timing_translator"));
- return ;
- }
-
- Timing_engraver * timing_grav_l= dynamic_cast<Timing_engraver *> (result);
-
- Time_signature_change_req *req = timing_grav_l->time_signature_req_l();
- if (req)
+ not rigorously safe, since the value might get GC'd and
+ reallocated in the same spot */
+ SCM fr= get_property ("timeSignatureFraction");
+ if (last_time_fraction_ != fr)
{
+ last_time_fraction_ = fr;
time_signature_p_ = new Item (get_property ("basicTimeSignatureProperties"));
- time_signature_p_->set_elt_property ("fraction",
- gh_cons (gh_int2scm (req->beats_i_),
- gh_int2scm (req->one_beat_i_)));
+ time_signature_p_->set_elt_property ("fraction",fr);
}
-
if (time_signature_p_)
- announce_element (time_signature_p_, req);
+ announce_element (time_signature_p_, 0);
}
void
(c) 1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
*/
-#include "score-engraver.hh"
-#include "timing-engraver.hh"
+#include "translator-group.hh"
#include "command-request.hh"
#include "score-element-info.hh"
#include "multi-measure-rest.hh"
+#include "timing-translator.hh"
+#include "engraver.hh"
+
+/**
+ Do time bookkeeping
+ */
+class Timing_engraver : public Timing_translator, public Engraver
+{
+ Bar_req * bar_req_l_;
+protected:
+ virtual bool do_try_music (Music * );
+ virtual void do_post_move_processing ();
+ virtual void do_process_music ();
+public:
+ String which_bar ();
+ VIRTUAL_COPY_CONS(Translator);
+};
ADD_THIS_TRANSLATOR(Timing_engraver);
{
bar_req_l_ = 0;
Timing_translator::do_post_move_processing ();
+
+ SCM nonauto = get_property ("barNonAuto");
+ SCM which = now_mom () ? SCM_UNDEFINED : ly_str02scm ("|");
+ if (which == SCM_UNDEFINED && !to_boolean (nonauto))
+ {
+ SCM always = get_property ("barAlways");
+ if (!measure_position ()
+ || (to_boolean (always)))
+ {
+ which=get_property ("defaultBarType" );
+ }
+ }
+
+ daddy_trans_l_->set_property ("whichBar", which);
}
bool
{
if (Bar_req * b= dynamic_cast <Bar_req *> (m))
{
- if (bar_req_l_ && !bar_req_l_->equal_b (b)) // huh?
+ if (bar_req_l_ && !bar_req_l_->equal_b (b))
return false;
bar_req_l_ = b;
return Timing_translator::do_try_music (m);
}
-/*
- TODO make properties of this.
- */
-String
-Timing_engraver::which_bar ()
+void
+Timing_engraver::do_process_music ()
{
- if (!bar_req_l_)
- {
- if (!now_mom ())
- return "|";
-
- SCM nonauto = get_property ("barNonAuto");
- if (!to_boolean (nonauto))
- {
- SCM always = get_property ("barAlways");
- if (!measure_position ()
- || (to_boolean (always)))
- {
- SCM def=get_property ("defaultBarType" );
- return (gh_string_p (def))? ly_scm2string (def) : "";
- }
- }
- return "";
- }
- else
- {
- return bar_req_l_->type_str_;
- }
+ if (bar_req_l_)
+ daddy_trans_l_->set_property ("whichBar", bar_req_l_->get_mus_property ("type"));
}
+
}
return false;
}
-
-/*ugh.
- */
-Time_signature_change_req*
-Timing_translator::time_signature_req_l() const
-{
- Time_signature_change_req *m_l=0;
- for (int i=0; !m_l && i < timing_req_l_arr_.size (); i++)
- {
- m_l=dynamic_cast<Time_signature_change_req*> (timing_req_l_arr_[i]);
- }
- return m_l;
-}
-
void
Timing_translator::do_process_music()
{
daddy_trans_l_->set_property ("measurePosition", m.make_scm ());
daddy_trans_l_->set_property ("beatLength", Moment (1,4).make_scm ());
daddy_trans_l_->set_property ("measureLength", Moment (1).make_scm());
+ daddy_trans_l_->set_property ("timeSignatureFraction",
+ gh_cons (gh_int2scm (4), gh_int2scm (4)));
}
Moment
Moment len = Moment (l) * one_beat;
daddy_trans_l_->set_property ("measureLength", len.make_scm ());
daddy_trans_l_->set_property ("beatLength", one_beat.make_scm ());
+ daddy_trans_l_->set_property ("timeSignatureFraction",
+ gh_cons (gh_int2scm (l), gh_int2scm (o)));
}
Timing_translator::Timing_translator()
return list;
}
void
-Translator_group::add_simple_translator (Translator*t)
-{
- simple_trans_list_ = add_translator (simple_trans_list_, t);
-}
-void
Translator_group::add_group_translator (Translator *t)
{
trans_group_list_ = add_translator (trans_group_list_,t);
return trans_l;
}
-
+#if 0
+/*
+ should not use, instead: use properties to communicate between engravers.
+ */
Translator*
Translator_group::get_simple_translator (String type) const
{
return daddy_trans_l_->get_simple_translator (type);
return 0;
}
-
+#endif
bool
Translator_group::is_bottom_translator_b () const
Real w = dynamic_cast<Spanner*>(me)->spanner_length () + ncw;
Real staff_space = me->paper_l ()->get_var ("interline");
- Direction dir = Directional_element_interface (me).get ();
+ Direction dir = Directional_element_interface::get (me);
Real dy = gh_scm2double (me->get_elt_property ("delta-y"));
SCM number = me->get_elt_property ("text");
if (gh_string_p (number) && number_visibility)
Score_element * commony = me->common_refpoint (me->get_elt_property ("columns"), Y_AXIS);
Score_element * commonx = me->common_refpoint (me->get_elt_property ("columns"), X_AXIS);
- Direction d = Directional_element_interface (me).get ();
+ Direction d = Directional_element_interface::get (me);
/*
Use outer non-rest columns to determine slope
Link_array<Score_element> column_arr=
Pointer_group_interface__extract_elements (me, (Score_element*)0, "columns");
- Direction d = Directional_element_interface (me).get ();
+ Direction d = Directional_element_interface::get (me);
*dy = column_arr.top ()->extent (Y_AXIS) [d]
- column_arr[0]->extent (Y_AXIS) [d];
}
return SCM_UNSPECIFIED;
}
- Direction d = Directional_element_interface (me).get ();
+ Direction d = Directional_element_interface::get (me);
if (!d)
{
d = Tuplet_spanner::get_default_dir (me);
- Directional_element_interface (me).set (d);
+ Directional_element_interface::set (me, d);
}
Real dy, offset;
{
me->set_elt_property ("bars", SCM_EOL);
Side_position::set_axis (me, Y_AXIS);
- Directional_element_interface (me).set (UP);
+ Directional_element_interface::set (me, UP);
}
\consists "Repeat_engraver";
+ \consists "Separating_line_group_engraver";
% staffspace (distances)
%
basicBarProperties = #`(
+ (interfaces . (bar-interface staff-bar-interface))
(break-align-symbol . Staff_bar)
+ (glyph . "|")
(barsize-procedure . ,Bar::get_staff_bar_size)
(molecule-callback . ,Bar::brew_molecule)
(visibility-lambda . ,all-visible)
(thin-kern . 3.0)
(hair-thickness . 1.6)
(thick-thickness . 6.0)
-
- (interfaces . (bar-interface staff-bar-interface))
+ (name . "barline")
)
basicBarNumberProperties = #`(
(molecule-callback . ,Text_item::brew_molecule)
(breakable . #t)
(visibility-lambda . ,begin-of-line-visible)
+ (name . "barnumber")
)
basicBeamProperties = #`(
(default-neutral-direction . 1)
(interfaces . (beam-interface))
(damping . 1)
+ (name . "beam")
)
basicBreakAlignProperties = #`(
(interfaces . (break-align-interface))
(stacking-dir . 1)
(axes 0)
+ (name . "break alignment")
)
basicBreakAlignGroupProperties = #`(
(interfaces . (axis-group-interface))
(axes . (0))
+ (name . "break alignment group")
)
basicBreathingSignProperties = #`(
+ (interfaces . (breathing-sign-interface))
(break-align-symbol . Breathing_sign)
(breakable . #t )
(molecule-callback . ,Breathing_sign::brew_molecule)
(visibility-lambda . ,begin-of-line-invisible)
- (interfaces . (breathing-sign-interface))
+ (name . "breathing sign")
)
basicClefItemProperties = #`(
+ (interfaces . (clef-interface))
(molecule-callback . ,Score_element::brew_molecule)
(before-line-breaking-callback . ,Clef::before_line_breaking)
(breakable . #t)
(break-align-symbol . Clef_item)
(visibility-lambda . ,begin-of-line-visible)
- (interfaces . (clef-interface))
+ (name . "clef")
)
basicChordNameProperties = #`(
(molecule-callback . ,Chord_name::brew_molecule)
(interfaces . (chord-name-interface))
- (after-line-breaking-callback . ,Chord_name::after_line_breaking)
+ (after-line-breaking-callback . ,Chord_name::after_line_breaking)
+ (name . "chord name")
)
basicCollisionProperties = #`(
(axes 0 1)
(interfaces . (collision-interface))
+ (name . "note collision")
)
basicCrescendoProperties = #`(
(molecule-callback . ,Crescendo::brew_molecule)
(interfaces . (crescendo-interface dynamic-interface))
+ (name . "crescendo")
)
basicDotColumnProperties = #`(
(interfaces . (dot-column-interface axis-group-interface ))
(axes 0 )
+ (name . "dot column")
)
basicDotsProperties = #`(
+ (interfaces . (dot-interface))
(molecule-callback . ,Dots::brew_molecule)
(dot-count . 1)
- (interfaces . (dot-interface))
+ (name . "augmentation dot")
)
- basicDynamicTextProperties = # `(
+ basicDynamicTextProperties = #`(
(style . "dynamic")
(interfaces . (dynamic-interface))
(molecule-callback . ,Text_item::brew_molecule)
(script-priority . 100)
(self-alignment-Y . 0)
+ (name . "dynamic text")
)
basicDynamicLineSpannerProperties = #`(
(axes . ( 1))
(padding . 3)
(minimum-space . 6)
+ (name . "dynamic alignment")
)
+
leftEdgeBasicProperties = #`(
(break-align-symbol . Left_edge_item)
(breakable . #t)
+ (name . "left edge")
)
basicGraceAlignItemProperties = #`(
(axes . (0))
(interfaces . (axis-group-interface align-interface))
(before-line-breaking-callback . ,Grace_align_item::before_line_breaking)
+ (name . "grace alignment")
)
basicHaraKiriVerticalGroupspannerProperties = #`(
(interfaces . (hara-kiri-interface))
(axes 1)
+ (name . "hara kiri")
)
basicHyphenSpannerProperties = #`(
(thickness . 1.0)
(height . 0.4)
(minimum-length . 0.5)
(molecule-callback . ,Hyphen_spanner::brew_molecule)
+ (name . "hyphen")
)
basicInstrumentNameProperties = #`(
(molecule-callback . ,Text_item::brew_molecule)
(break-align-symbol . Instrument_name)
(visibility-lambda . ,begin-of-line-visible)
+ (name . "instrument name")
)
basicKeyProperties = #`(
(molecule-callback . ,Key_item::brew_molecule)
(break-align-symbol . Key_item)
(visibility-lambda . ,begin-of-line-visible)
(breakable . #t)
+ (name . "key signature")
)
basicLocalKeyProperties = #`(
(molecule-callback . ,Local_key_item::brew_molecule)
(left-padding . 0.2)
(right-padding . 0.4)
(interfaces . (accidentals-interface))
+ (name . "accidentals")
)
basicLineOfScoreProperties = #`(
(axes . (0 1))
(interfaces . (axis-group-interface))
+ (name . "godzilla")
)
basicLyricExtenderProperties = #`(
+ (interfaces . (lyric-extender-interface))
(molecule-callback . ,Lyric_extender::brew_molecule)
(right-trim-amount . 0.5)
- (interfaces . (lyric-extender-interface))
+ (name . "extender line")
)
basicLyricTextProperties = #`(
+ (interfaces . (lyric-syllable-interface text-item-interface))
(molecule-callback . ,Text_item::brew_molecule)
(self-alignment-X . 0)
(non-rhythmic . #t)
(word-space . 0.6)
- (interfaces . (lyric-syllable-interface text-item-interface))
+ (name . "lyric syllable")
)
basicMarkProperties = #`(
+ (interfaces . (mark-interface))
(molecule-callback . ,Text_item::brew_molecule)
(breakable . #t)
- (interfaces . (mark-interface))
(visibility-lambda . ,end-of-line-invisible)
(padding . 4.0)
+ (name . "rehearsal mark")
)
basicMultiMeasureRestProperties = #`(
(spacing-procedure . ,Multi_measure_rest::set_spacing_rods)
(molecule-callback . ,Multi_measure_rest::brew_molecule)
(staff-position . 0)
+ (name . "multi-measure rest")
)
basicNoteColumnProperties = #`(
- (axes 0 1)
(interfaces . (axis-group-interface note-column-interface))
+ (axes 0 1)
+ (name . "note column")
)
basicNoteHeadProperties = #`(
(interfaces . (note-head-interface rhythmic-head-interface))
(molecule-callback . ,Note_head::brew_molecule)
+ (name . "note head")
)
basicNoteNameProperties = #`(
(molecule-callback . ,Text_item::brew_molecule)
+ (name . "note name")
)
basicOctavateEightProperties = #`(
(self-alignment-X . 0)
(after-line-breaking-callback . ,Rest::after_line_breaking)
(molecule-callback . ,Rest::brew_molecule)
(minimum-beam-collision-distance . 1.5)
+ (name . "rest")
)
basicRestCollisionProperties = #`(
- (minimum-distance . 0.75)
(interfaces . (rest-collision-interface))
+ (minimum-distance . 0.75)
+ (name . "rest collision")
)
- basicScriptProperties = #`(
+ basicScriptProperties = #`(
(molecule-callback . ,Script::brew_molecule)
(interfaces . (script-interface))
+ (name . "script")
)
basicScriptColumnProperties = #`(
(before-line-breaking-callback . ,Script_column::before_line_breaking)
+ (name . "script column")
)
basicSlurProperties = #`(
+ (interfaces . (slur-interface))
(molecule-callback . ,Slur::brew_molecule)
(thickness . 1.2)
- (spacing-procedure . ,Slur::set_spacing_rods) e
+ (spacing-procedure . ,Slur::set_spacing_rods)
(minimum-length . 1.5)
- (after-line-breaking-callback . ,Slur::after_line_breaking)
+ (after-line-breaking-callback . ,Slur::after_line_breaking)
+ (name . "slur")
)
basicSpacingSpannerProperties =#`(
(spacing-procedure . ,Spacing_spanner::set_springs)
;; assume that notes at least this long are present.
(maximum-duration-for-spacing . ,(make-moment 1 8))
+ (name . "spacing spanner")
)
basicSpanBarProperties = #`(
+ (interfaces . (bar-interface span-bar-interface))
(break-align-symbol . Staff_bar)
(barsize-procedure . ,Span_bar::get_bar_size)
(molecule-callback . ,Bar::brew_molecule)
(visibility-lambda . ,begin-of-line-invisible)
(breakable . #t)
+ (glyph . "|")
(before-line-breaking-callback . ,Span_bar::before_line_breaking)
-
;; ugh duplication!
;;
(thin-kern . 3.0)
(hair-thickness . 1.6)
(thick-thickness . 6.0)
- (interfaces . (bar-interface span-bar-interface))
+ (name . "cross staff bar-line")
)
basicStanzaNumberProperties = #`(
(breakable . #t)
(molecule-callback . ,Text_item::brew_molecule)
(break-align-symbol . Clef_item)
(visibility-lambda . ,begin-of-line-visible)
+ (name . "stanza number")
)
staffSymbolBasicProperties = #`(
+ (interfaces . (staff-symbol-interface ))
(molecule-callback . ,Staff_symbol::brew_molecule)
(staff-space . 1.0)
(line-count . 5 )
- (interfaces . (staff-symbol-interface ))
+ (name . "staff symbol")
)
basicSystemStartDelimiterProperties = #`(
(molecule-callback . ,System_start_delimiter::brew_molecule)
(arch-width . 1.5)
(bracket-thick . 0.25)
(bracket-width . 2.0)
+ (name . "system start bracket")
)
basicTextScriptProperties = #`(
(molecule-callback . ,Text_item::brew_molecule)
(no-spacing-rods . #t)
(interfaces . (text-script-interface text-item-interface))
- (padding . 3.0)
+ (padding . 3.0)
+ (name . "text script")
)
basicTieProperties = #`(
+ (interfaces . (tie-interface))
(molecule-callback . ,Tie::brew_molecule)
(spacing-procedure . ,Tie::set_spacing_rods)
(thickness . 1.2)
(minimum-length . 2.5)
- (interfaces . (tie-interface))
+ (name . "tie")
)
basicTieColumnProperties = #`(
(after-line-breaking-callback . ,Tie_column::after_line_breaking)
(interfaces . (tie-column-interface))
+ (name . "tie column")
)
basicTimeSignatureProperties = #`(
+ (interfaces . (time-signature-interface))
(molecule-callback . ,Time_signature::brew_molecule)
(break-align-symbol . Time_signature)
(visibility-lambda . ,all-visible)
(breakable . #t)
- (interfaces . (time-signature-interface))
+ (name . "time signature")
)
basicTupletSpannerProperties = #`(
(number-gap . 2.0)
(style . "italic")
(no-spacing-rods . #t)
(self-alignment-X . 0)
+ (name . "sostenuto pedal")
)
basicStemTremoloProperties = #`(
(molecule-callback . ,Stem_tremolo::brew_molecule)
(beam-width . 2.0) ; staff-space
(beam-thickness . 0.42) ; staff-space
+ (name . "stem tremolo")
)
basicStemProperties = #`(
+ (interfaces . (stem-interface))
(before-line-breaking-callback . ,Stem::before_line_breaking)
(molecule-callback . ,Stem::brew_molecule)
; if stem is on middle line, choose this direction.
(default-neutral-direction . 1)
- (interfaces . (stem-interface))
+ (name . "stem")
)
basicSeparationItemProperties = #`(
(interfaces . (separation-item-interface))
+ (name . "separation item")
)
basicSeparatingGroupSpannerProperties = #`(
(interfaces . (separation-spanner-interface))
(spacing-procedure . ,Separating_group_spanner::set_spacing_rods)
+ (name . "separation spanner")
)
basicSustainPedalProperties = #`(
+ (interfaces . (sustain-pedal-interface))
(no-spacing-rods . #t)
(molecule-callback . ,Sustain_pedal::brew_molecule)
(self-alignment-X . 0)
- (interfaces . (sustain-pedal-interface))
+ (name . "sustain pedal")
)
basicUnaChordaPdealProperties = #`(
(molecule-callback . ,Text_item::brew_molecule)
(style . "italic")
(no-spacing-rods . #t)
(self-alignment-X . 0)
+ (name . "una chorda pedal")
)
basicVoltaSpannerProperties = #`(
(molecule-callback . ,Volta_spanner::brew_molecule)
- (interfaces . (volta-spanner-interface))
+ (interfaces . (volta-spanner-interface side-position-interface))
+ (direction . 1)
(padding . 5)
(minimum-space . 25)
+ (name . "volta brace")
)
basicVerticalAxisGroupProperties = #`(
(axes 1)
(interfaces . (axis-group-interface))
+ (name . "Y-axis group")
)
};
Begin3
Title: LilyPond
-Version: 1.3.82
-Entered-date: 31AUG00
+Version: 1.3.83
+Entered-date: 01SEP00
Description:
Keywords: music notation typesetting midi fonts engraving
Author: hanwen@cs.uu.nl (Han-Wen Nienhuys)
janneke@gnu.org (Jan Nieuwenhuizen)
Maintained-by: hanwen@stack.nl (Han-Wen Nienhuys)
Primary-site: sunsite.unc.edu /pub/Linux/apps/sound/convert
- 1000k lilypond-1.3.82.tar.gz
+ 1000k lilypond-1.3.83.tar.gz
Original-site: ftp.cs.uu.nl /pub/GNU/LilyPond/development/
- 1000k lilypond-1.3.82.tar.gz
+ 1000k lilypond-1.3.83.tar.gz
Copying-policy: GPL
End
Name: lilypond
-Version: 1.3.82
+Version: 1.3.83
Release: 1
Copyright: GPL
Group: Applications/Publishing
-Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.3.82.tar.gz
+Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.3.83.tar.gz
Summary: A program for printing sheet music.
URL: http://www.cs.uu.nl/~hanwen/lilypond
# Icon: lilypond-icon.gif
12: '\\mordent',
8: '\\fermata',
4: '^',
+ 1: '.',
+ 3: '>',
18: '"arp"' , # arpeggio
};
try:
a = articulation_dict[self.type]
except KeyError:
- sys.stderr.write ("\nUnknown articulation %d" % self.type)
+ sys.stderr.write ("\nUnknown articulation no. %d on note no. %d" % (self.type, self.notenumber))
a = '"art"'
c.note_suffix = '-' + a + c.note_suffix