characters. If code(word) is encountered, LilyPond first checks for a
notename of code(word). If no notename is found, then code(word) is
treated as a string. If you mistype a notename, the parser will most
-likely complain that you should be in code(\lyric) mode to do lyrics.
+likely complain that you should be in code(\lyrics) mode to do lyrics.
dit(Lyric mode) Lyrics mode is introduced by the keyword
-code(\lyric). This mode is has rules that make it easy to include
+code(\lyrics). This mode is has rules that make it easy to include
punctuation and diacritical marks in words. A word in Lyrics mode
begins with: an alphabetic character, code(_),
code(?), code(!), code(:), code('),
c''-\trill
c''-\prall c''-\mordent c''-\prallprall c''-\prallmordent
c''-\upprall c''-\downprall }
- \type Lyrics \lyric{
+ \type Lyrics \lyrics{
accent marcato staccatissimo fermata stopped
staccato tenuto upbow downbow lheel rheel ltoe rtoe turn
open flageolet reverseturn
In order to instruct LilyPond to write lyrics underneath the
staff, you must enter the lyrics context with code(\type Lyrics).
-Lyrics should be entered in lyrics mode which is entered with code(\lyric).
+Lyrics should be entered in lyrics mode which is entered with code(\lyrics).
Spaces can be introduced into a lyric either by using quotes (code("))
or by using an underscore without quotes: code(He_could4 not4). All
mudela(verbatim)(\score{
< \notes \transpose c'' {c d e c | c d e c | e f g'2 |
e'4 f g'2 \bar "|."; }
- \type Lyrics \lyric {
+ \type Lyrics \lyrics {
DOEXPAND(Fr\)`e-4 re Ja- que DOEXPAND(Fr\)`e- re Ja- que
Dor- mez vous?2 Dor-4 mez vous?2 }
>
Specify an arbitrary key signature. The pitches from var(pitch) will
be printed in the key signature in the order that they appear on the list.
-dit(code(\lyric) var(lyriclist)) Parse var(lyriclist) in lyrics mode.
+dit(code(\lyrics) var(lyriclist)) Parse var(lyriclist) in lyrics mode.
dit(code(\maininput)) Internal command. This command is used for creating init
files like file(init.fly) that read the user file into the middle of another
durations. Previously we only entered note names, so for entering
lyrics we have to instruct LilyPond that what we enter are not note
names but words---or rather: strings. This instruction is the keyword
-code(\lyric). After entering this keyword you can enter a musical
+code(\lyrics). After entering this keyword you can enter a musical
construct---sequential music, simultaneous music, code(\type)
entries, etc.--- but with syllables in stead of pitches. For example:
-verb( \lyric { 'got8 me on my knees4, Le-8 lie! })
+verb( \lyrics { 'got8 me on my knees4, Le-8 lie! })
-The effect of code(\lyric) can be compared with the effect of the
+The effect of code(\lyrics) can be compared with the effect of the
doublequote character, code("), for it also changes the lexical
meaning of spaces and characters. This mode is another example of a
handy input feature of the language.
the code(\type) keyword. Here is a simple example:
mudela(fragment,verbatim)(
- \type Lyrics \lyric { 'got8 me on my knees,4 Le-8 lie! })
+ \type Lyrics \lyrics { 'got8 me on my knees,4 Le-8 lie! })
The result is technically more or less correct, but without a melody it
just doesn't work, so let's add a blob of cream:
mudela(fragment,verbatim)(
<
\type Staff { c''8. c''16 bes'8. a'16 g'4 f'8 g'4. }
- \type Lyrics \lyric { 'got8. me16 on8. my16 knees,4 Le-8 lie!4. }
+ \type Lyrics \lyrics { 'got8. me16 on8. my16 knees,4 Le-8 lie!4. }
>
)
the following example:
COMMENT( urg
-\type Lyrics \lyric { 'got_m\textbf{e}4 on8. m$\cal_Y$16 knees,4 Le-8 lie!4.}
-\type Lyrics \lyric { 'got_m{\bf e}4 on8. m$\cal_Y$16 knees,4 Le-8 lie!4.}
+\type Lyrics \lyrics { 'got_m\textbf{e}4 on8. m$\cal_Y$16 knees,4 Le-8 lie!4.}
+\type Lyrics \lyrics { 'got_m{\bf e}4 on8. m$\cal_Y$16 knees,4 Le-8 lie!4.}
)
mudela(fragment,verbatim)(<
\type Staff { c''8. c''16 bes'8. a'16 g'4 f'8 g'4. }
- \type Lyrics \lyric { 'got_me4 on8. m$\cal_Y$16 "3s,"4 Le-8 lie!4.}
+ \type Lyrics \lyrics { 'got_me4 on8. m$\cal_Y$16 "3s,"4 Le-8 lie!4.}
>
)
The paper part also contains
the definition of the contexts.
-The keyword code(\notes) is analogous to the code(\lyric) keyword. It
+The keyword code(\notes) is analogous to the code(\lyrics) keyword. It
will switch the tokenizer into a mode that interprets plain words as
note names. If it can't recognize the words as a note name, it will
assume that they are strings. That is the reason why you can write
BUGS:
+
+
+ * formatting of input stuff.
- +
- > \notes{ a \< b \cr }
- >
- > work but
- >
- > \notes{ a \< b \! }
- >
- > give a parse error?
+ * use real RTTI iso access_Stuff.
+ * \notes{ a \< b \cr } vs \notes{ a \< b \! }
* if possible, it might be nice for a warning to appear if someone does
- > \translator with no name and without assigning it to an
-identifier. possible, it might be nice for a warning to appear if
-someone does
- > \translator with no name and without assigning it to an
-identifier.
+ \translator with no name and without assigning it to an
+ identifier.
* space after bars?
* I see that \prallprall and \prallmordent are identical. I think this is a
mistake, that \prallprall should not have the vertical line.
- This can be fixex by removing the line
- > draw_mordent(twidth-0.5toverlap);
+ This can be fixed by removing the line
+ draw_mordent(twidth-0.5toverlap);
from the definition of \prallprall in mf/feta-slag.mf (see below)
* fix singleStaffBracket
* repeat bars: need distance after ":|" and before "|:"
- - The time signature warnings still remain, will be fixed later.
-
- * fix \n after proccing
+ * The time signature warnings still remain, will be fixed later.
- Summary of minor spelling irregularities:
-> capitalization/use of underscores in property names
-> \lyric vs \notes \lyric vs \type Lyrics (\lyric should have an -s)
+ Summary of minor spelling irregularities:
+ - capitalization/use of underscores in property names
* fix Score.skipBars
* fix marks/barnumbers/marginal notes
-****
-
- > lbheel = \script { "bheel" 0 0 -1 0 0 }
-> rbheel = \script { "bheel" 0 0 1 0 0 }
-> lbtoe = \script { "btoe" 0 0 -1 0 0 }
-> rbtoe = \script { "btoe" 0 0 1 0 0 }
-> lfheel = \script { "fheel" 0 0 -1 0 0 }
-> rfheel = \script { "fheel" 0 0 1 0 0 }
-> lftoe = \script { "ftoe" 0 0 -1 0 0 }
-> rftoe = \script { "ftoe" 0 0 1 0 0 }
->
-> and also
->
-> portato= \script { "portato" 0 -1 0 1 0 }
+ * broken scripts:
+ lbheel = \script { "bheel" 0 0 -1 0 0 }
+ rbheel = \script { "bheel" 0 0 1 0 0 }
+ lbtoe = \script { "btoe" 0 0 -1 0 0 }
+ rbtoe = \script { "btoe" 0 0 1 0 0 }
+ lfheel = \script { "fheel" 0 0 -1 0 0 }
+ rfheel = \script { "fheel" 0 0 1 0 0 }
+ lftoe = \script { "ftoe" 0 0 -1 0 0 }
+ rftoe = \script { "ftoe" 0 0 1 0 0 }
+
+ and also
+
+ portato= \script { "portato" 0 -1 0 1 0 }
* MIDI spelling.
- * foo = 1
-
- \score{
- \notes { a }
- \paper{ foo = \translator{ \StaffContext}; }
- }
-
* Align_element::padding ?
* uniformise property names.
* typo checks on property names?
- * egcs-1.1 support
-
* make engraver hacking robust.
* use streambufs and iostream
* zip target for binary windows dist (JBR)
- * text continuationss
+ * text continuations
* revise documentation
* junking \skip req in lyrics
* Language:
- - general plet mechanism.
-
- \plet 2/3 { c8 c8 c8 }
-
- ie.
-
- Music: PLET int '/' int Music
-
- \type -> \context ?
- \translator -> ?
- fix \partial
--- /dev/null
+#!/bin/sh
+
+
+# set environment for LilyPond. To be installed in /etc/profile.d/
+
+LILYINCLUDE="@datadir@/ly"
+MFINPUTS="@datadir@/mf:"${MFINPUTS:=":"}
+TEXINPUTS="@datadir@/tex:"${TEXINPUTS:=":"}
+
+# todo: GS stuff
+
+export LILYINCLUDE MFINPUTS TEXINPUTS
+
+# echo $LILYINCLUDE $MFINPUTS $TEXINPUTS
+
+
AC_STEPMAKE_LOCALE
AC_STEPMAKE_GETTEXT
AC_STEPMAKE_MSGFMT
-AC_STEPMAKE_TEXMF
+# AC_STEPMAKE_TEXMF
AC_STEPMAKE_YODL
dnl should check out -print
dnl huh?
-AC_CHECK_SEARCH_RESULT($FIND, find, Please use --enable-tex-dir)
+dnl AC_CHECK_SEARCH_RESULT($FIND, find, Please use --enable-tex-dir)
AC_FUNC_MEMCMP
AC_FUNC_VPRINTF
/** create cursor, set at top. The const part isn't true, actually, #list#
surely isn't const, but I get tired of the warning messages. */
Cursor (const List<T>& list, Link<T>* pointer = 0);
- /**
- Create an invalid cursor (pointing to nothing, associated with no list.)
- */
- Cursor();
Cursor (const Cursor<T>& cursor);
T& thing();
void del();
/// access the list this came from
- List<T>& list() const ;
+ List<T>* list_l() const ;
Link<T>* pointer();
static int compare (Cursor<T> a,Cursor<T>b) { return a-b; }
+
private:
- List<T>& list_;
+
Link<T>* pointer_;
+ List<T>* list_l_;
};
source file of the Flower Library
(c) 1997--1998 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+ Jan Nieuwenhuizen <janneke@gnu.org>
*/
#include <assert.h>
-// untested
+/**
+ Initialisation of Cursor.. Set pointer and list fields.
+ */
template<class T>
inline
-Cursor<T>::Cursor()
- : list_(*(List<T> *)0) // ugh
-{
- pointer_ = 0;
-}
-
-
-template<class T>
-inline
-Cursor<T>::Cursor (const List<T>& list, Link<T>* pointer) :
- list_((List<T>&) list)
+Cursor<T>::Cursor (const List<T> & list, Link<T>* p )
{
+ list_l_ = (List<T> *) &list; // damn const
if (list.size())
- pointer_ = pointer ? pointer : list.top_;
+ pointer_ = p ? p : list.top_;
else
- pointer_ = pointer;
+ pointer_ = p;
}
+
+
template<class T>
inline
-Cursor<T>::Cursor (const Cursor<T>& cursor) :
- list_(cursor.list_)
+Cursor<T>::Cursor (const Cursor<T>& cursor)
{
+ list_l_= cursor.list_l_;
pointer_ = cursor.pointer_;
}
Cursor<T>
Cursor<T>::operator =(const Cursor<T>& c)
{
- assert (&list_ == &c.list_);
+ assert (list_l_ == c.list_l_);
pointer_ = c.pointer_;
return *this;
}
inline void
Cursor<T>::add (const T& th)
{
- list_.add (th, *this);
+ list_l_->add (th, *this);
}
template<class T>
inline void
Cursor<T>::insert (const T& th)
{
- list_.insert (th, *this);
+ list_l_->insert (th, *this);
}
template<class T>
-inline List<T>&
-Cursor<T>::list() const
+inline List<T> *
+Cursor<T>::list_l() const
{
- return list_;
+ return list_l_; // ugh!
}
template<class T>
#include <assert.h>
template<class T>
- void
+void
Cursor<T>::backspace()
{
Cursor<T> c (*this);
if (c.ok())
- c--;
- list_.remove (*this);
+ c--;
+ list_l_->remove (*this);
}
template<class T>
- void
+void
Cursor<T>::del()
{
Cursor<T> c (*this);
if (c.ok())
- c++;
- list_.remove (*this);
+ c++;
+ list_l_->remove (*this);
*this = c;
}
Cursor<T>::operator -=(int j)
{
while (j--)
- (*this)--;
+ (*this)--;
return *this;
}
template<class T>
Cursor<T>::operator +=(int j)
{
while (j++)
- (*this)++;
+ (*this)++;
return *this;
}
Cursor<T> r = *this;
if (i<0)
- return r -(-i);
+ return r -(-i);
while (i--)
- r++;
+ r++;
return r;
}
{
Cursor<T> r = *this;
if (i<0)
- return r +(-i);
+ return r +(-i);
while (i--)
- r--;
+ r--;
return r;
}
int
Cursor<T>::operator-(Cursor<T> rhs) const
{
- assert (&rhs.list_ == &list_);
+ assert (rhs.list_l_ == list_l_);
int dif = 0;
// search from *this on further up (positive difference)
Cursor<T> c (*this);
while (c.ok() && c.pointer_ != rhs.pointer_)
{
- c--;
- dif++;
+ c--;
+ dif++;
}
if (c.ok())
- goto gotcha; // so, sue me.
+ goto gotcha; // so, sue me.
// search in direction of bottom. (negative diff)
dif =0;
c=*this;
while (c.ok() && c.pointer_ !=rhs.pointer_)
{
- dif --;
- c++;
+ dif --;
+ c++;
}
assert (c.ok());
-gotcha:
+ gotcha:
assert ((*this - dif).pointer_ == c.pointer_);
return dif;
}
return remove_p();
}
- Link_list<T> &list() { return (Link_list<T>&)Cursor<void*>::list (); }
+ Link_list<T> *list_l() { return (Link_list<T> *)Cursor<void*>::list_l (); }
PCursor<T> operator++(int) { return Cursor<void*>::operator++(0);}
PCursor<T> operator--(int) { return Cursor<void*>::operator--(0); }
PCursor<T> operator+=(int i) { return Cursor<void*>::operator+=(i);}
PCursor<T> operator-=(int i) { return Cursor<void*>::operator-=(i); }
PCursor<T> operator -(int no) const { return Cursor<void*>::operator-(no);}
int operator -(PCursor<T> op) const { return Cursor<void*>::operator-(op);}
- PCursor<T> operator +(int no) const {return Cursor<void*>::operator+(no);} PCursor (const Link_list<T> & l) : Cursor<void*> (l) {}
- PCursor() : Cursor<void*> () {}
+ PCursor<T> operator +(int no) const {return Cursor<void*>::operator+(no);}
+ PCursor (const Link_list<T> & l) : Cursor<void*> (l) {}
PCursor (const Cursor<void*>& cursor) : Cursor<void*>(cursor) { }
void* vptr() const { return *((Cursor<void*> &) *this); }
PCursor<T>::junk()
{
#if !defined (NDEBUG) && defined (PARANOID)
- list().OK();
+ list_l()->OK();
#endif
delete ptr();
#if !defined (NDEBUG)&&defined (PARANOID)
thing() = 0;
- list().OK();
+ list_l()->OK();
#endif
}
#include "arithmetic-operator.hh"
#include "fproto.hh"
+/**
+ Rational numbers. Included is support for + and - infinity.
+ */
class Rational {
+ /**
+ Sign of rational.
+ -2, .. 2
+
+ -2,2 is - and + infinity.
+ -1,1 is negative and positive.
+ 0 if *this is zero.
+ */
int sign_;
unsigned int num_, den_;
void normalise ();
void invert ();
int num () const { return sign_ * num_; }
int den () const { return den_; }
+ int num_i () const { return sign_ * num_; }
+ int den_i () const { return den_; }
Rational truncated () const;
void negate ();
operator bool () const;
operator int () const;
operator double () const;
Rational operator - () const;
+ /**
+ Initialize to 0.
+ */
Rational ();
Rational (int, int =1);
Rational (double);
Rational &operator = (Rational const &);
Rational &operator *= (Rational);
- Rational &operator /= (Rational);
- Rational &operator += (Rational);
- Rational &operator -= (Rational);
+ Rational &operator /= (Rational);
+ Rational &operator += (Rational);
+ Rational &operator -= (Rational);
static int compare (Rational const&, Rational const&);
int sign () const;
String str () const;
Rational::Rational ()
{
- sign_ = 1;
+ sign_ = 0;
num_ = den_ = 1;
}
normalise ();
}
+Rational::Rational (Rational const &r)
+{
+ copy (r);
+}
static
int gcd (int a, int b)
return *this;
}
-Rational::Rational (Rational const &r)
-{
- copy (r);
-}
-
String
Rational::str () const
{
INI_FILES = $(FLY_FILES) $(LY_FILES)
# DIST_FILES = Makefile $(INI_FILES)
-INSTALLATION_DIR=$(datadir)
+INSTALLATION_DIR=$(datadir)/ly/
INSTALLATION_FILES=$(INI_FILES)
LOCALSTEPMAKE_TEMPLATES=mutopia
% Toplevel initialisation file.
-\version "1.0.6";
+\version "1.0.7";
\include "declarations.ly"
% Toplevel initialisation file.
-\version "1.0.6";
+\version "1.0.7";
\include "declarations.ly";
% Toplevel initialisation file.
-\version "1.0.6";
+\version "1.0.7";
\include "declarations.ly"
% Toplevel initialisation file.
-\version "1.0.6";
+\version "1.0.7";
\include "declarations.ly"
\consists "Staff_sym_engraver";
\consists "Collision_engraver";
\consists "Rest_collision_engraver";
+ \consists "Tuplet_engraver";
%{
Uncomment to get bar numbers on single staff systems:
% Toplevel initialisation file.
-\version "1.0.6";
+\version "1.0.7";
\include "declarations.ly"
% Toplevel initialisation file.
-\version "1.0.6";
+\version "1.0.7";
\include "declarations.ly"
% Toplevel initialisation file.
-\version "1.0.6";
+\version "1.0.7";
\include "declarations.ly";
-\version "1.0.6";
+\version "1.0.7";
paper_sixteen = \paper {
staffheight = 16.0\pt;
\include "table13.ly";
\include "table16.ly";
-\version "1.0.6";
+\version "1.0.7";
paper_twenty = \paper {
staffheight = 20.0\pt;
-\version "1.0.6";
+\version "1.0.7";
one = \notes\relative c{
c'' d e f
-\version "1.0.6";
+\version "1.0.7";
blah = \notes {
Tested Features: example file with comments
%}
-\version "1.0.6";
+\version "1.0.7";
% the % is a comment.
-\version "1.0.6";
+\version "1.0.7";
part = \notes {
c-1 c c c
r1*3
% \lbheel \lbheel \lfheel \lftoe
% \rbheel \rbtoe \rfheel \rftoe
-\version "1.0.6";
+\version "1.0.7";
\score{
\notes {
* organ staff...
%}
-\version "1.0.6";
+\version "1.0.7";
-\version "1.0.6";
+\version "1.0.7";
ritme = \notes\transpose c'' {
\time 4/4;
% scales with accents.
%
-\version "1.0.6";
+\version "1.0.7";
blah = \notes {
\time 6/8;
\transpose c {
-\version "1.0.6";
+\version "1.0.7";
blah = \notes{ \transpose c'' {
-\version "1.0.6";
+\version "1.0.7";
\score{
\notes \transpose c'''{
\stemup
-\version "1.0.6";
+\version "1.0.7";
onestaff = \type Staff = foo\notes {
\property Staff.instr = instr
-\version "1.0.4";
+\version "1.0.7";
\score{
\notes\transpose c'{
-\version "1.0.6";
+\version "1.0.7";
\score{
\notes\transpose c''{
TestedFeatures = "beams and beamflags";
}
-\version "1.0.6";
+\version "1.0.7";
\score{
<
"(Feta definitively is not an abbreviation of Font-En-TjA)";
}
-\version "1.0.6";
+\version "1.0.7";
shortlong = \notes{
c4()c( c c |
-\version "1.0.6";
+\version "1.0.7";
\score {
\notes{
copyright = "public domain";
Tested = "test the Collision resolution ";
}
-\version "1.0.6";
+\version "1.0.7";
-\version "1.0.6";
+\version "1.0.7";
\score {
\include "paper20.ly"
-\version "1.0.6";
+\version "1.0.7";
-oden = \lyric{
+oden = \lyrics{
O8 |
den-8. ne-16 boom,4. o8 |
den-8. ne-16 boom.4. Wat8 |
won-8. der-16 schoon4 _8
}
-ikheb = \lyric{
+ikheb = \lyrics{
Ik8 |
heb u laatst4. in_'t8 |
bos8. zien16 staan4 _8 toen8 |
kaars-8. jes16 aan.4 _8
}
-ugloeit = \lyric{
+ugloeit = \lyrics{
U8 |
gloeit in bar-4. re8 |
win-8. ter-16 tijd,4 r8 als8 |
-\version "1.0.6";
+\version "1.0.7";
\score{
\notes{
-\version "1.0.6";
+\version "1.0.7";
\score{
\notes \relative c {
-\version "1.0.6";
+\version "1.0.7";
FontBody= \notes\transpose c''{
\bar "|:";
% "(Feta definitively is not an abbreviation of Font-En-TjA)";
}
-\version "1.0.6";
+\version "1.0.7";
\include "font-body.ly"
\score{
% "(Feta definitively is not an abbreviation of Font-En-TjA)";
}
-\version "1.0.6";
+\version "1.0.7";
\include "font-body.ly"
\score{
TestedFeatures = "This file tests some nasty Gourlay spacings";
}
-\version "1.0.6";
+\version "1.0.7";
%{
-\version "1.0.6";
+\version "1.0.7";
\include "table13.ly";
\include "table16.ly";
-\version "1.0.6";
+\version "1.0.7";
toeter_i = \notes\relative c {
\property Staff.instrument = "Toeters"
-\version "1.0.6";
+\version "1.0.7";
%{
test key itemv breaking
-\version "1.0.6";
+\version "1.0.7";
\score{
\notes\relative c'{
[c16 \stemdown c'' \stemboth c,, d]
-\version "1.0.6";
+\version "1.0.7";
global = \notes {
s1 | \mark "A";
-\version "1.0.6";
+\version "1.0.7";
voice_one = \notes\transpose c' { \stemup
R1 * 2 | f'4-. r r2 | R1 * 3 |
-\version "1.0.6";
+\version "1.0.7";
\score {
-\version "1.0.6";
+\version "1.0.7";
onestaff = \type Staff = foo\notes {
\property Staff.instr = instr
"(Feta definitively is not an abbreviation of Font-En-TjA)";
}
-\version "1.0.6";
+\version "1.0.7";
shortlong = \notes{
c4()c( c c |
-\version "1.0.6";
+\version "1.0.7";
% bug
% excentric slur can't handle this ...
% test damping
-\version "1.0.6";
+\version "1.0.7";
\score{
\notes\relative c'{
-\version "1.0.6";
+\version "1.0.7";
% urg, the direction of the slur gets swapped!
\score{
-\version "1.0.6";
+\version "1.0.7";
\score{
\notes\transpose c'{
TestedFeatures = "This file tests various spacings";
}
-\version "1.0.6";
+\version "1.0.7";
multipart = \notes{
\type StaffGroup <
}
-\version "1.0.6";
+\version "1.0.7";
beamintervals = \notes{
\time 7/4;
-\version "1.0.6";
+\version "1.0.7";
-$somewhat_long = \lyric{
+$somewhat_long = \lyrics{
\property Lyrics . textstyle = "roman"
AaaaaaA2
BbbbbbB2
FfffffF2
}
-$rather_long = \lyric{
+$rather_long = \lyrics{
\property Lyrics . textstyle = "roman"
LLLLoooonggggg2
Syyllllaaabbble2
Syyyylllaaabbble2
}
-$quite_long = \lyric{
+$quite_long = \lyrics{
\property Lyrics . textstyle = "roman"
LLLLLLLLLooooongggggggg2
Syyyyyyyyyyyyylllllllaaaaaabbble2
-\version "1.0.6";
+\version "1.0.7";
% middle tie is wrong
-\version "1.0.6";
+\version "1.0.7";
tie = \notes\transpose c''{
instrument= "Instrument";
}
-\version "1.0.6";
+\version "1.0.7";
\score{
\notes
}
-\version "1.0.6";
+\version "1.0.7";
vOne = \notes \relative c''{
\clef"violin";
-\version "1.0.6";
+\version "1.0.7";
\score {
\notes <
"(Feta definitively is not an abbreviation of Font-En-TjA)";
}
-\version "1.0.6";
+\version "1.0.7";
\score{
\notes{
Tested Features lyrics and chords
%}
-\version "1.0.6";
+\version "1.0.7";
melodie = \notes\relative c {
\clef"violin";
f4^"F" f | e^"C" e | d^"G7" d | c2^"C" |
}
-text = \lyric{
+text = \lyrics{
\property Lyrics . textstyle = "italic"
Ah!4 vous dir- ai_- je ma man2
\score {
< \notes \type Staff \melodie
- \lyric \type Lyrics \text
+ \lyrics \type Lyrics \text
>
\paper { }
}
Tested Features: lyrics, interleaving lyrics and staffs
%}
-\version "1.0.6";
+\version "1.0.7";
melody = \notes \relative c'' {
\clef violin;
\bar ":|";
}
-tekst = \lyric{
+tekst = \lyrics{
Al-4 tijd is Kort- jak- je ziek,2
midden4 in_de week maar s,_zon- dags niet.2
% ugly hack: insertion of empty syllables creates columns on extra
tekst. Mogen wij ook af en toe ergens op afgeven?
%}
-hegedraagjetekst = \lyric{
+hegedraagjetekst = \lyrics{
Al-4 tijd zuigt Bill Gates mijn piek,2
"\TeX"4 is slecht- ser dan mu- ziek.2
s,_Zon-4 dags gaat het door een raam,2
"\TeX"4 is slecht- ser dan mu- ziek.2
}
-texte = \lyric{
+texte = \lyrics{
\property Lyrics . textstyle" = "italic"
% \property Lyrics . textstyle" = "roman"
Ah!4 vous dir- ai_- je ma- man2
Va-4 lent mieux que la rai- son2
}
-texti = \lyric{
+texti = \lyrics{
\property "Lyrics"."textstyle" = "roman"
Twin-4 kle, twin- kle, lit- tle star,2
How4 I won- der what you are.2
How4 I won- der what you are!2
}
-textii = \lyric{
+textii = \lyrics{
When4 the bla- zing sun is gone,2
When4 he no- thing shines up- on,2
Then4 you show your lit- tle light,2
}
-textiii = \lyric{
+textiii = \lyrics{
Then4 the tra- veler in the dark2
Thanks4 you for your ti- ny spark;2
He_could4 not see which way to go,2
return t == Duration_convert::type2_i (Duration_convert::i2_type (t));
}
+void
+Duration::compress (Moment m)
+{
+ plet_.iso_i_ *= m.num_i ();
+ plet_.type_i_ *= m.den_i ();
+}
+
// ugh, what's this?
// i should be called "mom ()", ... or at least "length_mom ()"
Moment
bool plet_b ();
String str () const;
void set_plet (int,int );
+ void compress (Moment);
static bool duration_type_b (int t);
void set_ticks (int ticks_i );
--- /dev/null
+/*
+ auto-plet-engraver.cc -- implement Auto_plet_engraver
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1998 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+
+ */
+
+#include "auto-plet-engraver.hh"
+#include "command-request.hh"
+#include "slur.hh"
+#include "note-column.hh"
+
+bool
+Tuplet_engraver::do_try_request (Request *r)
+{
+ Command_req * c = r->access_Command_req ();
+ if (!(c &&
+ c->access_Bracket_req ()))
+ {
+ return false;
+ }
+
+ Bracket_req * b = c->access_Bracket_req ();
+ bracket_req_arr_.push (b);
+ return true;
+}
+
+
+void
+Tuplet_engraver::do_process_requests ()
+{
+ int stopcount =0;
+ Link_array<Slur> start_arr;
+
+ for (int i=0; i < bracket_req_arr_.size (); i++)
+ {
+ if (bracket_req_arr_[i]->spantype == Span_req::STOP)
+ stopcount++;
+ if (bracket_req_arr_[i]->spantype == Span_req::START)
+ {
+ Slur *sp =new Slur;
+ start_arr.push (sp);
+ announce_element (Score_element_info (sp, bracket_req_arr_[i]));
+ }
+ }
+
+ for (; stopcount--; )
+ {
+ Slur *sp = started_span_p_arr_.pop ();
+ stop_now_span_p_arr_.push (sp);
+ }
+
+ for (int i=0; i < start_arr.size (); i++)
+ started_span_p_arr_.push (start_arr.pop ());
+}
+
+void
+Tuplet_engraver::acknowledge_element (Score_element_info i)
+{
+ if (i.elem_l_->is_type_b (Note_column::static_name ()))
+ {
+ Note_column *nc = (Note_column*)i.elem_l_->access_Item ();
+ for (int j =0; j <started_span_p_arr_.size (); j++)
+ started_span_p_arr_[j]->add_column (nc);
+ }
+}
+
+void
+Tuplet_engraver::do_pre_move_processing ()
+{
+ typeset_all ();
+}
+
+void
+Tuplet_engraver::typeset_all ()
+{
+ for (int i=0; i < stop_now_span_p_arr_.size (); i++)
+ {
+ typeset_element (stop_now_span_p_arr_[i]);
+ }
+
+ stop_now_span_p_arr_.clear ();
+}
+
+void
+Tuplet_engraver::do_removal_processing ()
+{
+ typeset_all ();
+ for (int i=0; i < started_span_p_arr_.size (); i++)
+ {
+ typeset_element (started_span_p_arr_[i]);
+ }
+}
+
+ADD_THIS_TRANSLATOR(Tuplet_engraver);
+IMPLEMENT_IS_TYPE_B1(Tuplet_engraver, Engraver);
+
+Tuplet_engraver::Tuplet_engraver()
+{
+}
+
+
+void
+Tuplet_engraver::do_post_move_processing ()
+{
+ bracket_req_arr_.clear ();
+}
#include "change-translator.hh"
#include "debug.hh"
-Change_iterator::Change_iterator (Change_translator *change_l)
-{
- change_l_ = change_l;
-}
void
Change_iterator::error (String reason)
{
- String to_type = change_l_->change_to_type_str_;
- String to_id = change_l_->change_to_id_str_;
+ String to_type = change_l ()->change_to_type_str_;
+ String to_id = change_l ()->change_to_id_str_;
String warn1 = _f ("can't change `%s\' to `%s\'", to_type, to_id)
+ ": " + reason;
- String warn2= "Change_iterator::process_and_next (): "
+ String warn2= "Change_iterator::do_process_and_next (): "
+ report_to_l ()->type_str_ + " = `"
+ report_to_l ()->id_str_ + "\': ";
warning (warn2);
- change_l_->warning (warn1);
+ change_l ()->warning (warn1);
+}
+
+Change_translator *
+Change_iterator::change_l ()
+{
+ return (Change_translator*) music_l_;
}
/*
move to construct_children ?
*/
void
-Change_iterator::process_and_next (Moment m)
+Change_iterator::do_process_and_next (Moment m)
{
Translator_group * current = report_to_l ();
Translator_group * last = 0;
- String to_type = change_l_->change_to_type_str_;
- String to_id = change_l_->change_to_id_str_;
+ String to_type = change_l ()->change_to_type_str_;
+ String to_id = change_l ()->change_to_id_str_;
/* find the type of translator that we're changing.
We could change the current translator's id, but that would make
errors hard to catch
- last->translator_id_str_ = change_l_->change_to_id_str_;
+ last->translator_id_str_ = change_l ()->change_to_id_str_;
*/
error ("I'm one myself");
}
else
error ("None of these in my family.");
- Music_iterator::process_and_next (m);
+ Music_iterator::do_process_and_next (m);
}
IMPLEMENT_IS_TYPE_B1 (Change_iterator, Music_iterator);
#include "music-list.hh"
-Simultaneous_music_iterator::~Simultaneous_music_iterator()
-{
-}
-
-Simultaneous_music_iterator::Simultaneous_music_iterator (Simultaneous_music const *simultaneous_music_C)
-{
- simultaneous_music_C_ = simultaneous_music_C;
-}
-
void
Simultaneous_music_iterator::construct_children()
{
int j = 0;
- for (PCursor<Music*> i (simultaneous_music_C_->music_p_list_p_->top());
+ for (PCursor<Music*> i (simultaneous_music_l ()->music_p_list_p_->top());
i.ok(); j++, i++)
{
Music_iterator * mi = get_iterator_p (i.ptr());
if (mi->ok())
{
- if (simultaneous_music_C_->translator_type_str_.empty_b ())
- set_translator (mi->report_to_l()->ancestor_l (simultaneous_music_C_->multi_level_i_));
+ if (simultaneous_music_l ()->translator_type_str_.empty_b ())
+ set_translator (mi->report_to_l()->ancestor_l (simultaneous_music_l ()->multi_level_i_));
children_p_list_.bottom().add (mi);
}
else
}
void
-Simultaneous_music_iterator::process_and_next (Moment until)
+Simultaneous_music_iterator::do_process_and_next (Moment until)
{
for (PCursor<Music_iterator*> i (children_p_list_.top()); i.ok ();)
{
else
i++;
}
- Music_iterator::process_and_next (until);
+ Music_iterator::do_process_and_next (until);
}
{
return children_p_list_.size();
}
+
+Simultaneous_music*
+Simultaneous_music_iterator::simultaneous_music_l ()const
+{
+ return ( Simultaneous_music *) music_l_;
+}
IMPLEMENT_IS_TYPE_B1(Bar_req,Command_req);
+IMPLEMENT_IS_TYPE_B2(Bracket_req, Command_req, Span_req);
+
void
Bar_req::do_print() const
{
DOUT << type_str_;
}
+void
+Bracket_req::do_print () const
+{
+ Span_req::do_print ();
+}
+
Bar_req::Bar_req (String s)
{
type_str_ = s;
--- /dev/null
+/*
+ compressed-music-iterator.cc -- implement Compressed_music_iterator
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1998 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+
+ */
+
+#include "compressed-music-iterator.hh"
+#include "compressed-music.hh"
+#include "musical-request.hh"
+#include "translator-group.hh"
+#include "command-request.hh"
+
+IMPLEMENT_IS_TYPE_B1(Compressed_music_iterator, Music_wrapper_iterator);
+
+Compressed_music_iterator::Compressed_music_iterator ()
+{
+ Bracket_req pr;
+ pr.spantype = Span_req::START;
+ // pr.plet_i_ = 1;
+ start_req_p_ = new Bracket_req (pr);
+ pr.spantype = Span_req::STOP;
+ stop_req_p_ =new Bracket_req (pr);
+}
+
+Compressed_music_iterator::~Compressed_music_iterator ()
+{
+ delete start_req_p_;
+ delete stop_req_p_;
+}
+
+Compressed_music *
+Compressed_music_iterator::compressed_l () const
+{
+ return (Compressed_music*) music_l_;
+}
+
+void
+Compressed_music_iterator::construct_children ()
+{
+ /*
+ start_req_p_->plet_i_ = compressed_l ()->den_i_;
+ stop_req_p_->plet_i_ = compressed_l ()->den_i_;
+ */
+ Music_wrapper_iterator::construct_children ();
+}
+
+void
+Compressed_music_iterator::do_process_and_next (Moment m)
+{
+ if (first_b_)
+ {
+ bool success = report_to_l ()->try_request (start_req_p_);
+ if (!success)
+ music_l_->warning ( _("No one to print a tuplet start bracket"));
+ }
+
+ Music_wrapper_iterator::do_process_and_next (m);
+
+ if (!ok ())
+ {
+ bool success = report_to_l ()->try_request (stop_req_p_);
+ if (!success)
+ music_l_->warning ( _("No one to print a tuplet stop bracket"));
+ }
+}
--- /dev/null
+/*
+ compressed-music.cc -- implement Compressed_music
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1998 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+
+ */
+
+#include "compressed-music.hh"
+
+
+Compressed_music::Compressed_music (int n, int d,Music *mp)
+ : Music_wrapper (mp)
+{
+ num_i_ = n;
+ den_i_ = d;
+ element_p_->compress (Moment (num_i_,den_i_));
+}
+
+IMPLEMENT_IS_TYPE_B1(Compressed_music, Music_wrapper);
+
+
--- /dev/null
+/*
+ auto-plet-engraver.hh -- declare Auto_plet_engraver
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1998 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+
+ */
+
+#ifndef AUTO_PLET_ENGRAVER_HH
+#define AUTO_PLET_ENGRAVER_HH
+
+#include "engraver.hh"
+
+class Tuplet_engraver : public Engraver
+{
+ void typeset_all ();
+public:
+ Tuplet_engraver ();
+ DECLARE_MY_RUNTIME_TYPEINFO;
+ TRANSLATOR_CLONE(Tuplet_engraver);
+
+protected:
+ Link_array<Bracket_req> bracket_req_arr_;
+
+ Link_array<Slur> started_span_p_arr_;
+ Link_array<Slur> stop_now_span_p_arr_;
+
+ virtual void do_removal_processing ();
+ virtual void acknowledge_element (Score_element_info);
+ virtual void do_pre_move_processing ();
+ virtual bool do_try_request (Request*r);
+ virtual void do_process_requests ();
+ virtual void do_post_move_processing ();
+};
+
+
+
+#endif /* AUTO_PLET_ENGRAVER_HH */
class Change_iterator : public Music_iterator
{
- Change_translator *change_l_;
-
+ Change_translator *change_l ();
void error (String);
public:
DECLARE_MY_RUNTIME_TYPEINFO;
- Change_iterator (Change_translator* prop_l);
protected:
- virtual void process_and_next (Moment);
+ virtual void do_process_and_next (Moment);
};
#endif
class Simultaneous_music_iterator : public Music_iterator
{
- const Simultaneous_music *simultaneous_music_C_;
+ Simultaneous_music *simultaneous_music_l() const;
Pointer_list<Music_iterator*> children_p_list_;
public:
- ~Simultaneous_music_iterator();
- Simultaneous_music_iterator (Simultaneous_music const*);
DECLARE_MY_RUNTIME_TYPEINFO;
protected:
virtual void do_print() const;
virtual void construct_children();
- virtual void process_and_next (Moment);
+ virtual void do_process_and_next (Moment);
virtual Moment next_moment() const;
virtual bool ok() const;
};
Direction octave_dir_;
String clef_type_str_;
- /* ************** */
Clef_engraver();
DECLARE_MY_RUNTIME_TYPEINFO;
Drul_array< Array<Spacer_rod> > rods_;
- /* *************** */
Column_info();
Column_info (Paper_column *,Real const *);
Real energy_f_;
bool satisfies_constraints_b_;
- /* ************** */
void OK() const;
~Column_x_positions();
void solve_line();
DEFAULTACCESSOR(Command_script_req)
DEFAULTACCESSOR(Break_req)
DEFAULTACCESSOR(Mark_req)
+ DEFAULTACCESSOR(Bracket_req)
};
REQUESTMETHODS(Clef_change_req);
};
+class Bracket_req : public Span_req, public Command_req {
+
+public:
+ REQUESTMETHODS(Bracket_req);
+};
+
#endif // COMMANDREQUEST_HH
--- /dev/null
+/*
+ compressed-music-iterator.hh -- declare Compressed_music_iterator
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1998 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+
+ */
+
+#ifndef COMPRESSED_MUSIC_ITERATOR_HH
+#define COMPRESSED_MUSIC_ITERATOR_HH
+
+#include "music-wrapper-iterator.hh"
+
+class Compressed_music_iterator : public Music_wrapper_iterator
+{
+public:
+ Bracket_req* start_req_p_;
+ Bracket_req* stop_req_p_;
+ DECLARE_MY_RUNTIME_TYPEINFO;
+ Compressed_music_iterator();
+ ~Compressed_music_iterator ();
+ virtual void do_process_and_next (Moment);
+ virtual void construct_children ();
+ Compressed_music *compressed_l ()const;
+};
+
+
+#endif /* COMPRESSED_MUSIC_ITERATOR_HH */
+
--- /dev/null
+/*
+ compressed-music.hh -- declare Compressed_music
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1998 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+
+ */
+
+#ifndef COMPRESSED_MUSIC_HH
+#define COMPRESSED_MUSIC_HH
+
+#include "music-wrapper.hh"
+/**
+ Tempo expansion or compression.
+ */
+class Compressed_music : public Music_wrapper
+{
+public:
+ int num_i_;
+ int den_i_;
+
+ Compressed_music (int, int, Music *);
+ DECLARE_MY_RUNTIME_TYPEINFO;
+ VIRTUAL_COPY_CONS (Compressed_music, Music);
+};
+
+#endif /* COMPRESSED_MUSIC_HH */
+
Crescendo * cresc_p_;
Span_dynamic_req * cresc_req_l_;
Array<Dynamic_req*> dynamic_req_l_arr_;
- /* ************** */
public:
TRANSLATOR_CLONE(Dynamic_engraver);
Dynamic_engraver();
#include "fproto.hh"
void do_one_file (String init_str, String file_str);
-extern Header *header_global_p;
+extern Scope *header_global_p;
extern Array<String> target_str_global_array;
extern Array<String> inclusion_global_array;
extern Link_array<Score> score_global_array;
Array<Rhythmic_grouping*> children;
MInterval *interval_;
- /* *************** */
Array<MInterval> intervals();
MInterval interval() const;
#include "string.hh"
#include "dictionary.hh"
+#include "scope.hh"
/** Store bibliographical information. The information in the \header
block is read into this struct. Lily does not process this
information. */
-struct Header : Dictionary<String>
-{
- Header ();
-
- String tex_string () const;
- String ps_string () const;
-
- String lily_id_str_;
-};
+typedef Scope Header;
#endif // HEADER_HH
/**
A declarable data structure in mudela.
-
-
*/
struct Identifier : public Input {
bool init_b_;
struct Collision_engraver;
struct Command_req;
struct Command_script_req;
-struct Complex_music;
+struct Compressed_music;
+struct Compressed_music_iterator;
struct Cresc_req;
struct Crescendo ;
struct Decresc_req;
struct Musical_pitch;
struct Music_output_def;
struct Global_translator;
-struct Group_change_req;
struct Hara_kiri_line_group_engraver;
struct Hara_kiri_vertical_group_spanner;
struct Head_column;
-struct Header;
+
struct Horizontal_align_item;
struct Horizontal_group_element;
struct Horizontal_group_item;
struct Musical_script_req;
struct Music_list;
struct Musical_req;
+struct Musical_span_req;
struct Music;
struct Music_sequence;
struct Music_wrapper_iterator;
struct Request_chord;
typedef Rational Moment;
+typedef Scope Header;
+
#endif // LILY_PROTO_HH
virtual Atom hairpin (Real width, bool decresc, bool continued) const = 0;
virtual Lookup* lookup_p (Lookup const&) const = 0;
virtual Lookup* lookup_p (Symtables const&) const = 0;
- virtual Paper_outputter* paper_outputter_p (Paper_stream*, Paper_def*, Header*, String) const = 0;
+ virtual Paper_outputter* paper_outputter_p (Paper_stream*, Paper_def*, Scope*, String) const = 0;
virtual Paper_stream* paper_stream_p () const = 0;
virtual Atom plet (Real dy, Real dx, Direction dir) const = 0;
void print () const;
struct Molecule {
Pointer_list<Atom*> atoms_; // change to List<Atom>?
- /* *************** */
Molecule() { }
Molecule (Atom const &a);
void push_translator (Translator_group*);
void pop_translator();
protected:
+ Music const * music_l_;
bool first_b_;
virtual void do_print() const;
virtual Translator_group* get_req_translator_l();
- Music_iterator* get_iterator_p (Music*) const;
+ Music_iterator* get_iterator_p (Music const*) const;
void set_translator (Translator_group*);
- Music_iterator *daddy_iter_l_;
-
+ virtual void do_process_and_next (Moment until);
+ void inherit_info (Music_iterator const *parent);
public:
Translator_group*report_to_l() const;
DECLARE_MY_RUNTIME_TYPEINFO;
- static Music_iterator* static_get_iterator_p (Music*,Translator_group*);
+ static Music_iterator* static_get_iterator_p (Music const*,Translator_group*);
Music_iterator();
- virtual void process_and_next (Moment until);
virtual Moment next_moment() const;
virtual bool ok() const;
virtual ~Music_iterator();
+ void process_and_next (Moment until);
/**
Construct sub-iterators, and set the translator to
*/
class Music_sequence : public Music
{
-
public:
int multi_level_i_;
Music_list * music_p_list_p_;
-
+
Music_sequence (Music_sequence const&);
Music_sequence (Music_list *l_p);
DECLARE_MY_RUNTIME_TYPEINFO;
VIRTUAL_COPY_CONS(Music_sequence,Music);
virtual void transpose (Musical_pitch );
+ virtual void compress (Moment);
void add_music (Music *music_p);
protected:
virtual void do_print() const;
class Simultaneous_music : public Music_sequence
{
public:
- Simultaneous_music(Music_list *);
DECLARE_MY_RUNTIME_TYPEINFO;
VIRTUAL_COPY_CONS(Simultaneous_music,Music);
+ Simultaneous_music(Music_list *);
virtual Musical_pitch to_relative_octave (Musical_pitch);
- virtual void translate (Moment dt);
- virtual MInterval time_int() const;
+ virtual Moment duration () const;
};
/**
class Request_chord : public Simultaneous_music
{
public:
+ VIRTUAL_COPY_CONS(Request_chord, Music);
DECLARE_MY_RUNTIME_TYPEINFO;
virtual Musical_pitch to_relative_octave (Musical_pitch);
Request_chord();
- VIRTUAL_COPY_CONS(Request_chord, Music);
};
/**
Sequential_music is a list of music-elements which are placed behind each other.
*/
class Sequential_music : public Music_sequence
{
-
public:
- Moment offset_mom_;
- virtual Musical_pitch to_relative_octave (Musical_pitch);
- Sequential_music(Music_list*);
DECLARE_MY_RUNTIME_TYPEINFO;
VIRTUAL_COPY_CONS(Sequential_music, Music);
- virtual void translate (Moment dt);
- virtual MInterval time_int() const;
+
+ virtual Musical_pitch to_relative_octave (Musical_pitch);
+ Sequential_music(Music_list*);
+ virtual Moment duration () const;
};
#endif // Music_sequence_HH
class Music_output
{
public:
- Header * header_l_;
+ Scope * header_l_;
String default_out_str_;
String origin_str_;
int errorlevel_i_;
class Music_wrapper_iterator : public Music_iterator
{
Music_iterator *child_iter_p_;
- Music_wrapper *music_l_;
+ Music_wrapper *music_wrapper_l();
public:
- Music_wrapper_iterator (Music_wrapper*);
+ Music_wrapper_iterator ();
~Music_wrapper_iterator ();
virtual void do_print () const;
virtual void construct_children () ;
- virtual void process_and_next (Moment) ;
+ virtual void do_process_and_next (Moment) ;
virtual Moment next_moment () const;
virtual bool ok () const;
DECLARE_MY_RUNTIME_TYPEINFO;
DECLARE_MY_RUNTIME_TYPEINFO;
VIRTUAL_COPY_CONS (Music_wrapper, Music);
Music_wrapper (Music_wrapper const&);
- virtual MInterval time_int () const;
+ virtual Moment duration () const;
virtual ~Music_wrapper ();
};
+
#endif /* MUSIC_WRAPPER_HH */
String translator_id_str_;
virtual Musical_pitch to_relative_octave (Musical_pitch);
- virtual MInterval time_int() const;
+ virtual Moment duration () const;
+
virtual ~Music(){}
void print() const;
virtual void transpose (Musical_pitch );
- virtual void translate (Moment dt);
+ virtual void compress (Moment);
VIRTUAL_COPY_CONS(Music,Music);
DECLARE_MY_RUNTIME_TYPEINFO;
Music();
DEFAULTACCESSOR(Skip_req)
DEFAULTACCESSOR(Dynamic_req)
DEFAULTACCESSOR(Absolute_dynamic_req )
- DEFAULTACCESSOR(Tie_req )
+ DEFAULTACCESSOR(Tie_req)
+ DEFAULTACCESSOR(Musical_span_req)
DEFAULTACCESSOR(Plet_req)
DEFAULTACCESSOR(Span_dynamic_req )
DEFAULTACCESSOR(Abbreviation_req)
/** a request with a duration.
- This request is used only a base class.
+ This request is used only used as a base class.
*/
class Rhythmic_req : public virtual Musical_req {
public:
Duration duration_;
- /* *************** */
- void set_duration (Duration);
bool do_equal_b (Request*) const;
+ void compress (Moment);
virtual Moment duration() const;
Rhythmic_req();
static int compare (Rhythmic_req const&,Rhythmic_req const&);
Moment next;
Real distance;
Real strength;
- /* *************** */
Spacing_req();
REQUESTMETHODS(Spacing_req);
};
/// the characteristics of the text
Text_def *tdef_p_;
- /* *************** */
Text_req (int d, Text_def*);
~Text_req();
Text_req (Text_req const&);
};
-/**
- Requests to start or stop something.
- This type of request typically results in the creation of a #Spanner#
-*/
-class Span_req : public virtual Musical_req {
+class Musical_span_req : public Span_req, public virtual Musical_req
+{
public:
- /// should the spanner start or stop, or is it unwanted?
- enum Spantype {
- NOSPAN, START, STOP
- } spantype;
- bool do_equal_b (Request*) const;
- REQUESTMETHODS(Span_req);
-
- Span_req();
+ REQUESTMETHODS(Musical_span_req);
};
/** Start / stop a beam at this note */
-class Beam_req : public Span_req {
+class Beam_req : public Musical_span_req {
public:
- /* *************** */
REQUESTMETHODS(Beam_req);
Beam_req();
/**
Start / stop an abbreviation beam at this note.
*/
-class Abbreviation_beam_req : public Span_req {
+class Abbreviation_beam_req : public Musical_span_req {
public:
REQUESTMETHODS (Abbreviation_beam_req);
};
/// a slur
-class Slur_req : public Span_req {
+class Slur_req : public Musical_span_req {
public:
REQUESTMETHODS(Slur_req);
};
/// a plet (bracket with) number
-class Plet_req : public Span_req {
+class Plet_req : public Musical_span_req {
public:
int plet_i_;
REQUESTMETHODS(Absolute_dynamic_req);
};
-class Span_dynamic_req : public Dynamic_req, public Span_req {
+class Span_dynamic_req : public Dynamic_req, public Musical_span_req {
public:
virtual bool do_equal_b (Request*) const;
/// Grow or shrink the volume: 1=cresc, -1 = decresc
Keyword_table * keytable_p_;
int errorlevel_i_;
- /* *************** */
void start_main_input ();
void set_notename_table(Notename_table*tab_p);
int default_abbrev_i_;
Duration default_duration_;
Plet plet_;
- Header *default_header_p_;
+ Scope *default_header_p_;
bool first_b_;
bool error_mark_b_;
bool used_b_ ; // manual override..
- /* *************** */
/// which one (left =0)
int rank_i() const;
class Property_iterator : public Music_iterator
{
- Translation_property *property_l_;
+ Translation_property *property_l() const;
public:
DECLARE_MY_RUNTIME_TYPEINFO;
- Property_iterator (Translation_property* prop_l);
protected:
- virtual void process_and_next (Moment);
+ virtual void do_process_and_next (Moment);
};
#endif // PROPERTY_ITERATOR_HH
virtual Atom hairpin (Real width, bool decresc, bool continued) const;
virtual Lookup* lookup_p (Lookup const&) const;
virtual Lookup* lookup_p (Symtables const&) const;
- virtual Paper_outputter* paper_outputter_p (Paper_stream*, Paper_def*, Header*, String) const;
+ virtual Paper_outputter* paper_outputter_p (Paper_stream*, Paper_def*, Scope*, String) const;
virtual Paper_stream* paper_stream_p () const;
virtual Atom plet (Real dy , Real dx, Direction dir) const;
virtual Atom ps_beam (Real slope, Real width, Real thick) const;
#include "music-iterator.hh"
+/**
+ Walk through a Request_chord
+ */
class Request_chord_iterator : public Music_iterator {
- const Request_chord * elt_l_;
+ Request_chord * elt_l () const;
+ /**
+ cache elt_l ()->duration ().
+ */
Moment elt_duration_;
bool last_b_;
+
public:
- Request_chord_iterator (Request_chord*);
+ Request_chord_iterator ();
DECLARE_MY_RUNTIME_TYPEINFO;
protected:
- virtual void process_and_next (Moment);
+ virtual void do_process_and_next (Moment);
virtual Moment next_moment() const;
virtual void construct_children();
virtual bool ok() const;
public:
- /* *************** */
-
virtual ~Request(){}
DECLARE_MY_RUNTIME_TYPEINFO;
VIRTUAL_COPY_CONS(Request,Music);
- virtual MInterval time_int() const;
- virtual Moment duration() const { return 0; }
-
/* accessors for children
maybe checkout RTTI
*/
Script_req (Script_req const&);
};
-
+
+/**
+ Requests to start or stop something.
+ This type of request typically results in the creation of a #Spanner#
+*/
+class Span_req : public virtual Request {
+public:
+ /// should the spanner start or stop, or is it unwanted?
+ enum Spantype {
+ NOSPAN, START, STOP
+ } spantype;
+ bool do_equal_b (Request*) const;
+ REQUESTMETHODS(Span_req);
+
+ Span_req();
+};
+
+
#endif
/// length of notes/rests in this column
Array<Moment> durations;
- /* *************** */
Moment when() { return when_; }
Score_column (Moment when);
Request*req_l_;
Array<Engraver*> origin_grav_l_arr_;
- /* *** */
Score_element_info (Score_element*, Request*);
Score_element_info();
};
/// paper_, staffs_ and commands_ form the problem definition.
Link_array<Music_output_def> def_p_arr_;
Music * music_p_;
- Header * header_p_;
+ Scope * header_p_;
int errorlevel_i_;
/// direction of the beam
Direction beam_dir_;
- /* *************** */
Stem ();
/// ensure that this Stem also encompasses the Notehead #n#
virtual Atom hairpin (Real width, bool decresc, bool continued) const;
virtual Lookup* lookup_p (Lookup const&) const;
virtual Lookup* lookup_p (Symtables const&) const;
- virtual Paper_outputter* paper_outputter_p (Paper_stream*, Paper_def*, Header*, String) const;
+ virtual Paper_outputter* paper_outputter_p (Paper_stream*, Paper_def*, Scope*, String) const;
virtual Paper_stream* paper_stream_p () const;
virtual Atom plet (Real dy , Real dx, Direction dir) const;
virtual String print_dimen (Real) const;
/// do I have width?
bool fat_b_;
- /* ***************/
Text_item (General_script_def* ,Direction dir=CENTER);
virtual ~Text_item ();
/// idem
int bars_i_;
- /* *************** */
void set_cadenza (bool);
Moment when_mom () const { return when_; }
void OK() const;
#include "music-iterator.hh"
#include "pcursor.hh"
-class Sequential_music_iterator : private PCursor<Music*>, public Music_iterator
+class Sequential_music_iterator : public Music_iterator
{
Moment here_mom_;
- const Sequential_music * sequential_music_C_;
+ PCursor<Music*> *cursor_p_;
Music_iterator * iter_p_;
void start_next_element();
void leave_element();
void set_Sequential_music_translator();
-
+protected:
+ Sequential_music * sequential_music_l() const;
public:
- Sequential_music_iterator (Sequential_music const*);
+ Sequential_music_iterator ();
DECLARE_MY_RUNTIME_TYPEINFO;
protected:
virtual void do_print() const;
virtual void construct_children();
~Sequential_music_iterator();
- virtual void process_and_next (Moment);
+ virtual void do_process_and_next (Moment);
virtual Moment next_moment() const;
virtual bool ok() const;
};
#include "translation-property.hh"
#include "change-iterator.hh"
#include "change-translator.hh"
-
#include "music-wrapper.hh"
#include "music-wrapper-iterator.hh"
+#include "compressed-music-iterator.hh"
+#include "compressed-music.hh"
+
IMPLEMENT_IS_TYPE_B(Music_iterator);
return 0;
}
+
void
-Music_iterator::process_and_next (Moment)
+Music_iterator::process_and_next (Moment m)
{
- first_b_ = false;
+ do_process_and_next (m);
}
+void
+Music_iterator::do_process_and_next (Moment)
+{
+ first_b_ = false;
+}
bool
Music_iterator::ok() const
}
Music_iterator*
-Music_iterator::static_get_iterator_p (Music *m,
- Translator_group*report_l)
+Music_iterator::static_get_iterator_p (Music const *m, Translator_group *report_l)
{
Music_iterator * p =0;
if (m->is_type_b (Request_chord::static_name()))
- p = new Request_chord_iterator ((Request_chord*) m);
+ p = new Request_chord_iterator;
else if (m->is_type_b (Simultaneous_music::static_name()))
- p = new Simultaneous_music_iterator ((Simultaneous_music*) m);
+ p = new Simultaneous_music_iterator;
else if (m->is_type_b (Sequential_music::static_name()))
- p = new Sequential_music_iterator ((Sequential_music*) m);
+ p = new Sequential_music_iterator;
else if (m->is_type_b (Translation_property::static_name ()))
- p = new Property_iterator((Translation_property *) m);
+ p = new Property_iterator;
else if (m->is_type_b (Change_translator::static_name ()))
- p = new Change_iterator((Change_translator*) m);
+ p = new Change_iterator;
+ else if (m->is_type_b (Compressed_music::static_name ()))
+ p = new Compressed_music_iterator;
else if (m->is_type_b (Music_wrapper::static_name ()))
- p = new Music_wrapper_iterator ((Music_wrapper *)m);
-
-
- if (m -> translator_type_str_.length_i ())
+ p = new Music_wrapper_iterator;
+
+ p->music_l_ = m;
+ if (m->translator_type_str_.length_i ())
{
Translator_group* a =report_l->
- find_create_translator_l (m-> translator_type_str_, m->translator_id_str_);
+ find_create_translator_l (m->translator_type_str_, m->translator_id_str_);
p->set_translator (a);
}
if (! p->report_to_l())
p ->set_translator (report_l);
+
return p;
}
+void
+Music_iterator::inherit_info(Music_iterator const *parent)
+{
+}
+
Music_iterator*
-Music_iterator::get_iterator_p (Music*m) const
+Music_iterator::get_iterator_p (Music const*m) const
{
- Music_iterator*p = static_get_iterator_p (m,report_to_l());
- p->daddy_iter_l_ = (Music_iterator*)this;
+ Music_iterator*p = static_get_iterator_p (m, report_to_l());
+ p->inherit_info (this);
p->construct_children();
return p;
}
Music_iterator::Music_iterator()
{
- daddy_iter_l_ =0;
first_b_ = true;
}
IMPLEMENT_IS_TYPE_B1(Sequential_music,Music_sequence);
IMPLEMENT_IS_TYPE_B1(Simultaneous_music,Music_sequence);
-MInterval
-Simultaneous_music::time_int() const
+Moment
+Simultaneous_music::duration () const
{
- MInterval m;
+ Moment dur = 0;
for (iter (music_p_list_p_->top(), i); i.ok (); i++)
- m.unite (i->time_int());
+ dur = dur >? i->duration ();
- return m;
+ return dur;
}
void
-Simultaneous_music::translate (Moment m)
+Music_sequence::compress (Moment m)
{
- for (iter (music_p_list_p_->top(), i); i.ok (); i++)
- i->translate (m);
+ for (PCursor<Music*> i(music_p_list_p_->top()); i.ok (); i++)
+ i->compress (m);
}
Simultaneous_music::Simultaneous_music(Music_list *p)
Sequential_music::Sequential_music(Music_list *p)
: Music_sequence (p)
{
- offset_mom_ =0;
}
-MInterval
-Sequential_music::time_int() const
+Moment
+Sequential_music::duration () const
{
Moment last=0;
for (iter (music_p_list_p_->top(), i); i.ok (); i++)
{
- MInterval interval = i->time_int();
-
- /*
- c4 <> c4
- */
- if (!interval.empty_b())
- last += interval.length();
+ last += i->duration ();
}
- return offset_mom_ + MInterval (0,last);
+ return last;
}
Musical_pitch
return music_p_list_p_->do_relative_octave (p, true);
}
-void
-Sequential_music::translate (Moment dt)
-{
- offset_mom_ += dt;
-}
-
-
-
Musical_pitch
Music_list::do_relative_octave (Musical_pitch last, bool ret_first)
/*
- music-wrapper-iterator.cc -- implement
+ music-wrapper-iterator.cc -- implement Music_wrapper_iterator
source file of the GNU LilyPond music typesetter
#include "music-wrapper-iterator.hh"
#include "music-wrapper.hh"
-Music_wrapper_iterator::Music_wrapper_iterator (Music_wrapper *r)
+Music_wrapper_iterator::Music_wrapper_iterator ()
{
child_iter_p_ =0;
- music_l_ = r;
}
IMPLEMENT_IS_TYPE_B1(Music_wrapper_iterator, Music_iterator);
void
Music_wrapper_iterator::construct_children ()
{
- child_iter_p_ = get_iterator_p (music_l_->element_p_);
+ child_iter_p_ = get_iterator_p (music_wrapper_l ()->element_p_);
}
Music_wrapper_iterator::~Music_wrapper_iterator ()
delete child_iter_p_;
}
-
+Music_wrapper*
+Music_wrapper_iterator::music_wrapper_l ()
+{
+ return (Music_wrapper*) music_l_;
+}
bool
Music_wrapper_iterator::ok () const
{
}
void
-Music_wrapper_iterator::process_and_next (Moment m)
+Music_wrapper_iterator::do_process_and_next (Moment m)
{
child_iter_p_->process_and_next (m);
- Music_iterator::process_and_next (m);
+ Music_iterator::do_process_and_next (m);
}
Moment
IMPLEMENT_IS_TYPE_B1 (Music_wrapper, Music);
-MInterval
-Music_wrapper::time_int () const
+Moment
+Music_wrapper::duration () const
{
- return element_p_->time_int ();
+ return element_p_->duration ();
}
#include "debug.hh"
#include "musical-pitch.hh"
-MInterval
-Music::time_int() const
+Moment
+Music::duration () const
{
- return MInterval (0,0);
+ return 0;
}
void
}
-void
-Music::translate (Moment)
-{
-}
-
void
Music::do_print() const
{
return m;
}
-
+void
+Music::compress (Moment)
+{
+}
Tie_req::do_print () const{}
-/* *************** */
+IMPLEMENT_IS_TYPE_B1(Span_req,Request);
+IMPLEMENT_IS_TYPE_B2(Musical_span_req, Span_req, Musical_span_req);
-
-IMPLEMENT_IS_TYPE_B1 (Span_req,Musical_req);
+void
+Musical_span_req::do_print () const
+{
+ Span_req::do_print ();
+}
+
void
Span_req::do_print () const
{
Spacing_req::do_print ();
}
-/* *************** */
Melodic_req::Melodic_req ()
{
pitch_.print ();
}
-/* *************** */
int
Rhythmic_req::compare (Rhythmic_req const &r1, Rhythmic_req const &r2)
{
return !compare (*this, *rh);
}
-void
-Rhythmic_req::set_duration (Duration d)
-{
- duration_ = d;
-}
Rhythmic_req::Rhythmic_req ()
{
{
return duration_.length ();
}
-/* *************** */
+
+void
+Rhythmic_req::compress (Moment m)
+{
+ duration_.compress (m);
+}
+
Rhythmic_req::do_print ();
}
-/* *************** */
bool
Note_req::do_equal_b (Request*r) const
Rhythmic_req::do_print ();
#endif
}
-/* *************** */
IMPLEMENT_IS_TYPE_B1 (Rest_req, Rhythmic_req);
Rhythmic_req::do_print ();
}
-/* *************** */
}
-/* *************** */
IMPLEMENT_IS_TYPE_B1 (Beam_req,Span_req);
{
}
-/* *************** */
IMPLEMENT_IS_TYPE_B1 (Abbreviation_beam_req, Span_req);
{
}
-/* *************** */
bool
Span_req:: do_equal_b (Request*r) const
spantype = NOSPAN;
}
-/* *************** */
Script_req::Script_req (Script_req const&s)
{
dir_ = s.dir_;
{
delete scriptdef_p_;
}
-/* *************** */
Text_req::~Text_req ()
#endif
}
-/* *************** */
IMPLEMENT_IS_TYPE_B1 (Skip_req,Musical_req);
{"grouping", GROUPING},
{"header", HEADER},
{"in", IN_T},
- {"lyric", LYRIC},
+ {"lyrics", LYRICS},
{"key", KEY},
{"keysignature", KEYSIGNATURE},
{"mark", MARK},
{"musicalpitch", MUSICAL_PITCH},
{"time", TIME_T},
+ {"times", TIMES},
{"midi", MIDI},
{"mm", MM_T},
{"name", NAME},
#include "musical-request.hh"
#include "command-request.hh"
#include "parser.hh"
-#include "header.hh"
+#include "scope.hh"
#include "file-results.hh"
#include "midi-def.hh"
#include "paper-def.hh"
assert (!duration_p->plet_b ());
duration_p->set_plet (1, 2);
}
- rq->set_duration (*duration_p);
+ rq->duration_ = *duration_p;
rq->set_spot (here_input ());
delete duration_p ;
return v;
for (int i = 0; i < reqs.size (); i++)
if (reqs[i]->access_Musical_req ()->access_Span_dynamic_req ())
{
- Span_dynamic_req* s_l= (reqs[i]->access_Musical_req ()->access_Span_dynamic_req ()) ;
+ Span_dynamic_req* s_l= reqs[i]->access_Musical_req ()->access_Span_dynamic_req ();
s_l->dynamic_dir_ = (t == '<') ? UP:DOWN;
}
#include "p-col.hh"
#include "p-score.hh"
#include "p-col.hh"
-#include "header.hh"
+#include "scope.hh"
#include "word-wrap.hh"
#include "gourlay-breaking.hh"
#include "paper-stream.hh"
return sol;
}
+
+
void
Paper_score::process ()
{
line_l->output_all ();
*mlog << ']' << flush;
remove_line (line_l);
-
}
-
+
// huh?
delete outputter_l_;
delete paper_stream_p;
outputter_l_ = 0;
+
+ *mlog << '\n' << flush;
}
void
#include "translator-group.hh"
#include "score.hh"
#include "music-list.hh"
-#include "header.hh"
#include "duration-convert.hh"
#include "change-translator.hh"
#include "file-results.hh"
#include "scope.hh"
#include "relative-music.hh"
#include "transposed-music.hh"
+#include "compressed-music.hh"
// mmm
-Mudela_version oldest_version ("1.0.6");
-Mudela_version version ("1.0.6");
+Mudela_version oldest_version ("1.0.7");
+Mudela_version version ("1.0.8");
// needed for bison.simple's malloc() and free()
4
};
+struct Assignment {
+ String *name_p_;
+ Identifier *id_p_;
+ ~Assignment () {
+ delete name_p_;
+ delete id_p_;
+ }
+ Assignment () {
+ name_p_ = 0;
+ id_p_ =0;
+ }
+ Assignment (Assignment const&s)
+ {
+ name_p_ = new String (*s.name_p_);
+ id_p_ = s.id_p_->clone ();
+ }
+};
+
Paper_def* current_paper = 0;
#ifndef NDEBUG
Music *music;
Music_list *music_list;
Score *score;
- Header *header;
+ Scope *scope;
Interval *interval;
Musical_req* musreq;
Music_output_def * outputdef;
%token IN_T
%token KEY
%token KEYSIGNATURE
-%token LYRIC
+%token LYRICS
%token MAEBTELP
%token MARK
%token MEASURES
%token TELP
%token TEMPO
%token TIME_T
+%token TIMES
%token TRANSLATOR
%token TRANSPOSE
%token TYPE
%type <outputdef> output_def
-%type <header> mudela_header mudela_header_body
+%type <scope> mudela_header mudela_header_body
%type <box> box
%type <i> open_request_parens close_request_parens
%type <i> open_abbrev_parens
%type <i> open_plet_parens close_plet_parens
%type <i> sub_quotes sup_quotes
-%type <music> simple_element request_chord command_element
+%type <music> simple_element request_chord command_element Simple_music Composite_music
%type <i> abbrev_type
%type <i> int unsigned
%type <i> script_dir
-%type <id> identifier_init simple_identifier_init
+%type <id> identifier_init simple_identifier_init block_identifier
%type <duration> steno_duration notemode_duration
%type <duration> entered_notemode_duration explicit_duration
%type <interval> dinterval
%type <music> property_def translator_change
%type <music_list> Music_list
%type <paper> paper_block paper_def_body
-%type <real> dim real
-%type <real> real_mult_expression real_primary
-%type <real> unit
+%type <real> real_expression real dimension
%type <request> abbrev_command_req
%type <request> post_request structured_post_request
%type <pair> plet_fraction
%type <request> command_req verbose_command_req
%type <request> script_req dynamic_req
%type <string> string
-%type <string> string_primary
%type <score> score_block score_body
%type <intarr> shape_array
%type <script> script_definition script_body mudela_script gen_script_def
%type <trans> translator_spec translator_spec_body
%type <tempo> tempo_request
%type <notenametab> notenames_body notenames_block
-%expect 1
+%expect 3
+
+%left '-' '+'
+%left '*' '/'
+%left UNARY_MINUS
%%
mudela: /* empty */
| mudela toplevel_expression {}
- | mudela add_declaration { }
+ | mudela assignment { }
| mudela error
| mudela check_version { }
;
;
mudela_header_body:
- {
- $$ = new Header;
+ {
+ $$ = new Scope;
+ THIS->lexer_p_-> scope_l_arr_.push ($$);
}
- | mudela_header_body STRING '=' string ';' {
- (*$$)[*$2] = *$4;
- delete $2;
- delete $4;
+ | mudela_header_body assignment ';' {
+
}
;
mudela_header:
HEADER '{' mudela_header_body '}' {
$$ = $3;
+ THIS->lexer_p_-> scope_l_arr_.pop ();
}
;
/*
DECLARATIONS
*/
-add_declaration:
+assignment:
STRING {
THIS->remember_spot ();
}
- /* cont */ '=' identifier_init optional_semicolon {
+ /* cont */ '=' identifier_init {
THIS->lexer_p_->set_identifier (*$1, $4);
$4->init_b_ = THIS->init_parse_b_;
$4->set_spot (THIS->pop_spot ());
simple_identifier_init: identifier_init
;
+
identifier_init:
+ block_identifier
+ ;
+
+block_identifier:
score_block {
$$ = new Score_identifier ($1, SCORE_IDENTIFIER);
$$ = new Midi_def_identifier ($1, MIDI_IDENTIFIER);
}
- | script_definition {
- $$ = new General_script_def_identifier ($1, SCRIPT_IDENTIFIER);
-
+ | symtables {
+ $$ = new Symtables_identifier ($1, IDENTIFIER);
+ }
+ | translator_spec {
+ $$ = new Translator_identifier ($1, TRANS_IDENTIFIER);
}
| Music {
$$ = new Music_identifier ($1, MUSIC_IDENTIFIER);
-
- }
- | symtables {
- $$ = new Symtables_identifier ($1, IDENTIFIER);
}
+
| post_request {
$$ = new Request_identifier ($1, POST_REQUEST_IDENTIFIER);
}
| int {
$$ = new int_identifier (new int ($1), INT_IDENTIFIER);
}
- | translator_spec {
- $$ = new Translator_identifier ($1, TRANS_IDENTIFIER);
+ | script_definition {
+ $$ = new General_script_def_identifier ($1, SCRIPT_IDENTIFIER);
+
}
;
Lookup * l = global_lookup_l->lookup_p (*$4);
$$->set_lookup ($2, l);
}
- | paper_def_body STRING '=' simple_identifier_init ';' {
- THIS->lexer_p_->set_identifier (*$2, $4);
- delete $2;
+ | paper_def_body assignment ';' {
+
}
| paper_def_body translator_spec {
- $$-> assign_translator ($2);
+ $$->assign_translator ($2);
}
| paper_def_body SHAPE '=' shape_array ';' {
$$->shape_int_a_ = *$4;
}
;
-real_primary:
- REAL {
- $$ = $1;
+
+real:
+ real_expression { $$ = $1; }
+ ;
+
+
+dimension:
+ REAL CM_T {
+ $$ = $1 CM;
}
- | REAL_IDENTIFIER {
- $$= *$1->access_Real (false);
+ | REAL PT_T {
+ $$ = $1 PT;
}
- | dim
- | '(' real ')' {
- $$ = $2;
+ | REAL IN_T {
+ $$ = $1 INCH;
+ }
+ | REAL MM_T {
+ $$ = $1 MM;
}
;
-real:
- real_mult_expression
- | real '+' real_mult_expression {
- $$ = $1 + $3;
+real_expression:
+ REAL {
+ $$ = $1;
}
- | real '-' real_mult_expression {
- $$ = $1 - $3;
+ | dimension
+ | REAL_IDENTIFIER {
+ $$= *$1->access_Real (false);
}
- ;
-
-real_mult_expression:
- real_primary
- | real_mult_expression '*' real_primary {
+ | '-' real_expression %prec UNARY_MINUS {
+ $$ = -$2;
+ }
+ | real_expression '*' real_expression {
$$ = $1 * $3;
}
- | real_mult_expression '/' real_primary {
+ | real_expression '/' real_expression {
$$ = $1 / $3;
}
+ | real_expression '+' real_expression {
+ $$ = $1 + $3;
+ }
+ | real_expression '-' real_expression {
+ $$ = $1 - $3;
+ }
+ | '(' real_expression ')' {
+ $$ = $2;
+ }
;
+
shape_array:
/* empty */ {
$$ = new Array<Interval>;
}
- | shape_array dim dim {
+ | shape_array real real {
$$->push(Interval($2, $2 + $3));
};
;
+Music:
+ Simple_music
+ | Composite_music
+ ;
+
Sequential_music: '{' Music_list '}' {
$$ = new Sequential_music ($2);
}
$$ = new Simultaneous_music ($2);
}
;
-Music:
+
+Simple_music:
request_chord { $$ = $1; }
- | TYPE STRING Music {
+ | MUSIC_IDENTIFIER { $$ = $1->access_Music (true); }
+ | property_def
+ | translator_change
+ ;
+
+
+Composite_music:
+ TYPE STRING Music {
$$ = $3;
$$->translator_type_str_ = *$2;
delete $2;
delete $2;
delete $4;
}
+ | TIMES int '/' int Music {
+ $$ = new Compressed_music ($2, $4, $5);
+
+ }
| Simultaneous_music { $$ = $1; }
| Sequential_music { $$ = $1; }
| TRANSPOSE musical_pitch Music {
$$ = new Transposed_music ($3, *$2);
delete $2;
}
- | MUSIC_IDENTIFIER { $$ = $1->access_Music (true); }
| NOTES
{ THIS->lexer_p_->push_note_state (); }
Music
THIS->lexer_p_->pop_state ();
}
- | LYRIC
+ | LYRICS
{ THIS->lexer_p_->push_lyric_state (); }
Music
{
$$ = $3;
THIS->lexer_p_->pop_state ();
}
- | property_def
- | translator_change
| relative_music { $$ = $1; }
;
;
-
request_chord:
pre_requests simple_element post_requests {
THIS->add_requests ((Simultaneous_music*)$2);//ugh
| command_element
;
-
-
-
command_element:
command_req {
$$ = new Request_chord;
$$-> set_spot (THIS->here_input ());
$1-> set_spot (THIS->here_input ());
((Simultaneous_music*)$$) ->add_music ($1);//ugh
-
}
;
| COMMAND_IDENTIFIER {
$$ = $1->access_Request (true);
}
+/*
+ | '[' {
+ $$ = new Beam_req;
+ $$->spantype = Span_req::START;
+ }
+ | ']' {
+ $$ = new Beam_req;
+ $$->spantype = Span_req::STOP;
+ }
+*/
;
+
verbose_command_req:
BAR STRING {
$$ = new Bar_req (*$2);
steno_notepitch notemode_duration {
if (!THIS->lexer_p_->note_state_b ())
THIS->parser_error (_ ("have to be in Note mode for notes"));
- $1->set_duration (*$2);
+ $1->duration_ = *$2;
$$ = THIS->get_note_element ($1, $2);
}
| RESTNAME notemode_duration {
}
;
-string_primary:
+
+string:
STRING {
$$ = $1;
}
| STRING_IDENTIFIER {
$$ = $1->access_String (true);
}
- ;
-
-string:
- string_primary {
- $$ = $1;
- }
- | string '+' string_primary {
+ | string '+' string {
*$$ += *$3;
delete $3;
}
;
-dim:
- real_primary unit { $$ = $1*$2; }
- ;
-
-unit: CM_T { $$ = 1 CM; }
- |IN_T { $$ = 1 INCH; }
- |MM_T { $$ = 1 MM; }
- |PT_T { $$ = 1 PT; }
- ;
/*
symbol tables
}
;
-dinterval: dim dim {
+dinterval: real real {
$$ = new Interval ($1, $2);
}
;
if (!mus_l)
return false;
+ /*
+ UGH! This is incorrect!
+ Beam_req might not reach the Plet_engraver if ordering is wrong!
+ */
Beam_req* b = mus_l->access_Beam_req ();
if (b)
{
#include "translation-property.hh"
#include "translator-group.hh"
-Property_iterator::Property_iterator (Translation_property *prop_l)
-{
- property_l_ = prop_l;
-}
-
void
-Property_iterator::process_and_next (Moment m)
+Property_iterator::do_process_and_next (Moment m)
{
- if (property_l_->var_str_.length_i ())
- report_to_l ()->set_property (property_l_->var_str_, property_l_->value_);
- Music_iterator::process_and_next (m);
+ if (property_l()->var_str_.length_i ())
+ report_to_l ()->set_property (property_l()->var_str_, property_l()->value_);
+ Music_iterator::do_process_and_next (m);
}
IMPLEMENT_IS_TYPE_B1(Property_iterator, Music_iterator);
+
+Translation_property*
+Property_iterator::property_l () const
+{
+ return (Translation_property*) music_l_;
+}
#include "string-convert.hh"
#include "main.hh"
#include "file-results.hh"
-#include "header.hh"
+#include "scope.hh"
#include "paper-stream.hh"
#include "ps-stream.hh"
#include "ps-outputter.hh"
+#include "scope.hh"
+#include "dictionary-iter.hh"
+#include "identifier.hh"
Ps_lookup::Ps_lookup ()
: Lookup ()
{
return new Ps_lookup (s);
}
+extern char const *lily_version_number_sz ();
+
+String
+header_to_ps_string (Scope *head)
+{
+ String s;
+ String lily_id_str = "Lily was here, " +
+ String (lily_version_number_sz ());
+
+ s+= "/lily_id_string\n{" + lily_id_str + "} bind def\n";
+
+ for (Dictionary_iter<Identifier*> i (*head); i.ok (); i++)
+ {
+ if (!i.val ()->access_String_identifier ())
+ continue;
+
+ String val = *i.val()->access_String_identifier ()->data_p_;
+
+ s += "/mudela" + i.key () + "{" + val + "} bind def\n";
+ }
+
+ return s;
+}
Paper_outputter*
Ps_lookup::paper_outputter_p (Paper_stream* os_p, Paper_def* paper_l, Header* header_l, String origin_str) const
{
if (header_global_p)
- *os_p << header_global_p->ps_string ();
-
+ *os_p << header_to_ps_string (header_global_p);
+
*os_p << _ ("\n% outputting Score, defined at: ") << origin_str << '\n';
if (header_l)
- *os_p << header_l->ps_string ();
+ {
+ *os_p << header_to_ps_string (header_l);
+ }
+
*os_p << paper_l->ps_output_settings_str ();
if (experimental_features_global_b)
Paper_stream*
Ps_lookup::paper_stream_p () const
{
-#if 1
String outname = base_output_str ();
-#else
- String outname = "lelie";
-#endif
if (outname != "-")
outname += ".ps";
void
Request_chord_iterator::construct_children()
{
+ elt_duration_ =elt_l ()->duration ();
get_req_translator_l();
}
-Request_chord_iterator::Request_chord_iterator (Request_chord*el_l)
+Request_chord*
+Request_chord_iterator::elt_l () const
+{
+ return (Request_chord*) music_l_;
+}
+
+Request_chord_iterator::Request_chord_iterator ()
{
- elt_l_ = el_l;
- MInterval elt_dur =el_l->time_int();
- elt_duration_ = elt_dur.length ();
last_b_ = false;
}
}
void
-Request_chord_iterator::process_and_next (Moment mom)
+Request_chord_iterator::do_process_and_next (Moment mom)
{
if (first_b_)
{
- for (PCursor<Music*> i (elt_l_->music_p_list_p_->top ()); i.ok(); i++)
+ for (PCursor<Music*> i (elt_l ()->music_p_list_p_->top ()); i.ok(); i++)
{
assert (i->is_type_b (Request::static_name()));
Request * req_l = (Request*)i.ptr();
{
}
-MInterval
-Request::time_int() const
-{
- return MInterval (0, duration());
-}
+
bool
int dir_i = rest_l_arr_[0]->dir_;
int midpos = 4;
-#if 1
// ugh
int stem_length_i = 7 - 2;
// ugh, Stem::stem_start vs Stem::stem_end
int pos = (int)(stem_l->stem_end_f() - midpos) - dir_i * stem_length_i;
-#else // nogo: stem_start not set for rests?
+ /*
+ nogo: stem_start not set for rests?
int pos = (stem_l->stem_begin_f() - midpos) + dir_i * 2;
-#endif
+
+ WHY IS THIS STILL HERE? --hwn
+ */
rest_l_arr_[0]->translate_rests (pos);
}
#include "music-iterator.hh"
#include "music.hh"
#include "global-translator.hh"
-#include "header.hh"
+#include "scope.hh"
#include "cpu-timer.hh"
#include "main.hh"
#include "paper-def.hh"
return ;
}
*mlog << '\n' << _("Interpreting music...") << flush;
- trans_p->last_mom_ = music_p_->time_int().max ();
+ trans_p->last_mom_ = music_p_->duration ();
+
+ Music_iterator * iter = Music_iterator::static_get_iterator_p (music_p_, trans_p);
+
- Music_iterator * iter = Music_iterator::static_get_iterator_p (music_p_,
- trans_p);
iter->construct_children();
if (! iter->ok())
#include "score.hh"
#include "string.hh"
#include "paper-def.hh"
-#include "header.hh"
+#include "scope.hh"
#include "debug.hh"
#include "parray.hh"
#include "file-path.hh"
#include "string-convert.hh"
#include "main.hh"
#include "file-results.hh"
-#include "header.hh"
+#include "scope.hh"
#include "paper-stream.hh"
#include "tex-stream.hh"
#include "tex-outputter.hh"
+#include "dictionary-iter.hh"
+#include "identifier.hh"
Tex_lookup::Tex_lookup ()
: Ps_lookup ()
return new Tex_lookup (s);
}
+extern char const *lily_version_number_sz ();
+
+String
+header_to_tex_string (Scope *head)
+{
+ String s;
+ String lily_id_str = "Lily was here, " +
+ String (lily_version_number_sz ());
+ s+= "\\def\\LilyIdString{" + lily_id_str + "}";
+
+ for (Dictionary_iter<Identifier*> i(*head); i.ok (); i++)
+ {
+ if (!i.val ()->access_String_identifier ())
+ continue;
+
+ String val = *i.val()->access_String_identifier ()->data_p_;
+ s += "\\def\\mudela" + i.key () + "{" + val + "}\n";
+ }
+ return s;
+}
+
+
Paper_outputter*
-Tex_lookup::paper_outputter_p (Paper_stream* os_p, Paper_def* paper_l, Header* header_l, String origin_str) const
+Tex_lookup::paper_outputter_p (Paper_stream* os_p, Paper_def* paper_l, Scope* header_l, String origin_str) const
{
if (header_global_p)
- *os_p << header_global_p->tex_string ();
+ *os_p << header_to_tex_string(header_global_p);
*os_p << _ ("\n% outputting Score, defined at: ") << origin_str << '\n';
if (header_l)
- *os_p << header_l->tex_string();
+ *os_p << header_to_tex_string (header_global_p);
+
+
*os_p << paper_l->tex_output_settings_str ();
if (experimental_features_global_b)
Paper_stream *
Tex_lookup::paper_stream_p () const
{
-#if 1
String outname = base_output_str ();
-#else
- String outname = "lelie";
-#endif
Paper_stream* p;
if (outname != "-")
iter_p_->print();
}
-Sequential_music_iterator::Sequential_music_iterator (Sequential_music const*v)
- : PCursor<Music*> (*v->music_p_list_p_)
+Sequential_music_iterator::Sequential_music_iterator ()
{
- here_mom_ = v->offset_mom_;
- sequential_music_C_ = v;
+ cursor_p_ = 0;
+ here_mom_ = 0;
iter_p_ =0;
}
+Sequential_music*
+Sequential_music_iterator::sequential_music_l () const
+{
+ return (Sequential_music *)music_l_;
+}
+
void
Sequential_music_iterator::construct_children()
{
- while (PCursor<Music*>::ok())
+ cursor_p_ = new PCursor<Music*> (sequential_music_l ()->music_p_list_p_->top ());
+
+ while (cursor_p_->ok())
{
start_next_element();
if (!iter_p_->ok())
{
delete iter_p_;
iter_p_ =0;
- MInterval elt_time = ptr()->time_int ();
- if (!elt_time.empty_b())
- here_mom_ += elt_time.length();
- PCursor<Music*>::next();
+ Moment elt_time = cursor_p_->ptr()->duration ();
+ here_mom_ += elt_time;
+ cursor_p_->next();
}
void
Sequential_music_iterator::start_next_element()
{
assert (!iter_p_);
- iter_p_ = get_iterator_p (ptr());
+ iter_p_ = get_iterator_p ( cursor_p_->ptr());
}
void
Sequential_music_iterator::~Sequential_music_iterator()
{
+ delete cursor_p_;
assert (! iter_p_);
}
IMPLEMENT_IS_TYPE_B1(Sequential_music_iterator,Music_iterator);
void
-Sequential_music_iterator::process_and_next (Moment until)
+Sequential_music_iterator::do_process_and_next (Moment until)
{
while (1)
{
{
leave_element();
- if (PCursor<Music*>::ok())
+ if (cursor_p_->ok())
{
start_next_element();
set_Sequential_music_translator();
loopexit:
- Music_iterator::process_and_next (until);
+ Music_iterator::do_process_and_next (until);
}
Moment
return iter_p_;
}
-
%prep
%setup
%build
-./configure --disable-checking --disable-debugging --enable-printing --prefix=/usr --enable-optimise --enable-shared --enable-tex-dir='${prefix}/lib/texmf/texmf/tex/generic' --enable-mf-dir='${prefix}/lib/texmf/texmf/fonts/source/'
+./configure --disable-checking --disable-debugging --enable-printing --prefix=/usr --enable-optimise --enable-shared
make all
make -C Documentation info || true
make htmldoc
strip lily/out/lilypond mi2mu/out/mi2mu
make prefix="$RPM_BUILD_ROOT/usr" install
+cp buildscripts/out/lilypond-profile $RPM_BUILD_ROOT/etc/profile.d/lilypond.sh
+
%files
%doc /tmp/lilypond-rpm-doc
/usr/lib/texmf/texmf/fonts/source/public/lilypond
/usr/share/lilypond/
/usr/share/locale/*/LC_MESSAGES/lilypond.mo
+/etc/profile.d/lilypond.sh
%post
## ln -s /usr/lib/texmf/texmf/tex/lilypond /usr/lib/texmf/texmf/tex/latex/lilypond # suck me plenty
BASH\
DATE\
date\
- DIR_DATADIR\
+ datadir\
PACKAGE\
package\
PATHSEP\
-TEXINSTALL=$(MAKE) INSTALLATION_OUT_DIR=$(TEXDIR)/lilypond depth=.. INSTALLATION_OUT_FILES="$(TEXTABLES)" -f $(stepdir)/install-outfiles.sub.make $@
+TEXINSTALL=$(MAKE) INSTALLATION_OUT_DIR=$(datadir)/tex/ depth=.. INSTALLATION_OUT_FILES="$(TEXTABLES)" -f $(stepdir)/install-outfiles.sub.make $@
-AFMINSTALL=$(MAKE) depth=.. INSTALLATION_OUT_DIR=$(datadir) INSTALLATION_OUT_FILES="$(AFM_FILES)" -f $(stepdir)/install-outfiles.sub.make $@
+AFMINSTALL=$(MAKE) depth=.. INSTALLATION_OUT_DIR=$(datadir)/ INSTALLATION_OUT_FILES="$(AFM_FILES)" -f $(stepdir)/install-outfiles.sub.make $@
LYINSTALL=$(MAKE) depth=.. INSTALLATION_OUT_DIR=$(datadir) INSTALLATION_OUT_FILES="$(LYTABLES)" -f $(stepdir)/install-outfiles.sub.make $@
$(LYINSTALL)
$(AFMINSTALL)
-INSTALLATION_DIR=$(MFDIR)/public/lilypond
+INSTALLATION_DIR=$(datadir)/mf/
INSTALLATION_FILES=$(MF_FILES)
include $(stepdir)/installfiles.make
copyright = "public domain";
}
-\version "1.0.6";
+\version "1.0.7";
\include "global.ly"
\include "violoncello.ly"
copyright = "public domain";
}
-\version "1.0.6";
+\version "1.0.7";
\include "global.ly"
\include "clarinetti.ly"
}
-\version "1.0.6";
+\version "1.0.7";
\include "clarinetto-1.ly"
\include "clarinetto-2.ly"
}
-\version "1.0.6";
+\version "1.0.7";
clarinetto1 = \notes \relative c {
R1 *2 | d''4-.\ff r r2 | R1 *3 | e4-. r r2 | R1 *3 |
}
-\version "1.0.6";
+\version "1.0.7";
clarinetto2 = \notes \relative c {
R1*2 bes''4-.\ff r r2 | R1*3 | cis4-. r r2 | R1 *3 |
copyright = "public domain";
}
-\version "1.0.6";
+\version "1.0.7";
\include "global.ly"
\include "contrabasso.ly"
copyright = "public domain";
}
-\version "1.0.6";
+\version "1.0.7";
contrabasso = \notes \relative c {
% \translator Staff=violoncello
copyright = "public domain";
}
-\version "1.0.6";
+\version "1.0.7";
\include "global.ly"
copyright = "public domain";
}
-\version "1.0.6";
+\version "1.0.7";
\include "global.ly"
\include "corni.ly"
}
-\version "1.0.6";
+\version "1.0.7";
\include "corno-1.ly"
\include "corno-2.ly"
copyright = "public domain";
}
-\version "1.0.6";
+\version "1.0.7";
corno1 = \notes \relative c {
R1 *2 | f''4-.\ff r r2 | R1 *3 | f4-. r r2 | R1 *3 |
copyright = "public domain";
}
-\version "1.0.6";
+\version "1.0.7";
corno2 = \notes \relative c {
R1 *2 | d''4-.\ff r r2 | R1 *3 | d4-. r r2 | R1 *3 |
}
-\version "1.0.6";
+\version "1.0.7";
\include "global.ly"
\include "fagotti.ly"
}
-\version "1.0.6";
+\version "1.0.7";
\include "fagotto-1.ly"
\include "fagotto-2.ly"
}
-\version "1.0.6";
+\version "1.0.7";
fagotto1 = \notes \relative c {
R1 *2 | as'4-.\ff r r2 | R1 *3 | as4-. r r2 | R1 *3 |
copyright = "public domain";
}
-\version "1.0.6";
+\version "1.0.7";
fagotto2 = \notes \relative c {
R1 *2 | f4-.\ff r r2 | R1 *3 | f4-. r r2 | R1 *3 |
}
-\version "1.0.6";
+\version "1.0.7";
\include "global.ly"
\include "flauti.ly"
}
-\version "1.0.6";
+\version "1.0.7";
\include "flauto-1.ly"
\include "flauto-2.ly"
copyright = "public domain";
}
-\version "1.0.6";
+\version "1.0.7";
flauto1 = \notes \relative c {
R1 *2 | c'''4-.\ff r r2 | R1 *3 | d4-. r r2 | R1 *3 |
copyright = "public domain";
}
-\version "1.0.6";
+\version "1.0.7";
flauto2 = \notes \relative c {
R1 *2 | as'''4-.\ff r r2 | R1 *3 | b4-. r r2 | R1 *3 |
}
-\version "1.0.6";
+\version "1.0.7";
global = \notes {
\time 4/4;
copyright = "public domain";
}
-\version "1.0.6";
+\version "1.0.7";
oboe1 = \notes \relative c'' {
R1 *2 | as'4-.\ff r r2 | R1 *3 | as4-. r r2 | R1 *3 |
}
-\version "1.0.6";
+\version "1.0.7";
oboe2 = \notes \relative c{
R1 *2| f''4-.\ff r r2 | R1 *3 | f4-. r r2 | R1 *3 |
}
-\version "1.0.6";
+\version "1.0.7";
\include "global.ly"
\include "oboi.ly"
}
-\version "1.0.6";
+\version "1.0.7";
\include "oboe-1.ly"
\include "oboe-2.ly"
}
-\version "1.0.6";
+\version "1.0.7";
timpani = \notes \relative c {
R1 *2 | c4-.\ff r r2 | R1 *3 | c4-. r r2 | R1 *3 |
}
-\version "1.0.6";
+\version "1.0.7";
\include "global.ly"
\include "trombe.ly"
}
-\version "1.0.6";
+\version "1.0.7";
\include "trombo-1.ly"
\include "trombo-2.ly"
copyright = "public domain";
}
-\version "1.0.6";
+\version "1.0.7";
trombo1 = \notes \relative c {
R1 *2 | c''4-.\ff r r2 | R1 *3 | c4-. r r2 | R1 *3 |
copyright = "public domain";
}
-\version "1.0.6";
+\version "1.0.7";
trombo2 = \notes \relative c {
R1 *2 | c'4-.\ff r r2 | R1 *3 | c4-. r r2 | R1 *3 |
copyright = "public domain";
}
-\version "1.0.6";
+\version "1.0.7";
viola1 = \notes \relative c {
\type Voice=one
copyright = "public domain";
}
-\version "1.0.6";
+\version "1.0.7";
viola2 = \notes \relative c {
% starts on (actualy, most part is on) same staff as viola1
copyright = "public domain";
}
-\version "1.0.6";
+\version "1.0.7";
\include "global.ly"
\include "viola-1.ly"
copyright = "public domain";
}
-\version "1.0.6";
+\version "1.0.7";
\include "global.ly"
\include "violino-1.ly"
copyright = "public domain";
}
-\version "1.0.6";
+\version "1.0.7";
violino1 = \notes \relative c {
c'1\ff ~ | c | <f4-. c'-. as'-.> r r2 | R1 |
copyright = "public domain";
}
-\version "1.0.6";
+\version "1.0.7";
\include "global.ly"
\include "violino-2.ly"
copyright = "public domain";
}
-\version "1.0.6";
+\version "1.0.7";
violino2 = \notes \relative c {
c'1\ff ~ | c | <f4-. c'-. as'-.> r r2 | R1 |
copyright = "public domain";
}
-\version "1.0.6";
+\version "1.0.7";
\include "global.ly"
\include "violoncello.ly"
}
-\version "1.0.6";
+\version "1.0.7";
violoncello = \notes \relative c {
c1\ff ~ | c | f,4-. r r2 | r1 | c'1\ff ~ | c | f,4-. r r2 |
piece = "Allemande";
}
-\version "1.0.6";
+\version "1.0.7";
global = \notes{
\time 4/4;
copyright = "Public Domain";
}
-\version "1.0.6";
+\version "1.0.7";
global = \notes {
\time 4/4;
copyright = "public domain";
}
-\version "1.0.6";
+\version "1.0.7";
one = \notes\relative c {
\property Voice . textstyle = "italic"
copyright = "public domain";
}
-\version "1.0.6";
+\version "1.0.7";
one = \notes\relative c{
\property Voice . textstyle = "italic"
r8\mf [c'-1( e-2 g-4] [e-2 c-1 bes'-5 g-3] |
copyright = "public domain";
}
-\version "1.0.3";
+\version "1.0.7";
one = \notes \transpose c`` {
enteredby = "jcn";
copyright = "public domain";
}
-\version "1.0.6";
+\version "1.0.7";
one = \notes\relative c{
\property Voice . textstyle = "italic"
enteredby = "jcn";
copyright = "public domain";
}
-\version "1.0.6";
+\version "1.0.7";
one = \notes\relative c{
enteredby = "jcn";
copyright = "public domain";
}
-\version "1.0.6";
+\version "1.0.7";
one = \notes\relative c{
dotted slurs
%}
-\version "1.0.6";
+\version "1.0.7";
\include "allemande-urtext.ly";
dotted slurs
%}
-\version "1.0.6";
+\version "1.0.7";
\include "allemande-urtext.ly";
dotted slurs
%}
-\version "1.0.6";
+\version "1.0.7";
\include "courante-urtext.ly";
dotted slurs
%}
-\version "1.0.6";
+\version "1.0.7";
\include "courante-urtext.ly";
dotted slurs
%}
-\version "1.0.6";
+\version "1.0.7";
\include "gigue-urtext.ly";
dotted slurs
%}
-\version "1.0.6";
+\version "1.0.7";
\include "gigue-urtext.ly";
dotted slurs
%}
-\version "1.0.6";
+\version "1.0.7";
\include "menuetto-urtext.ly";
dotted slurs
%}
-\version "1.0.6";
+\version "1.0.7";
\include "menuetto-urtext.ly";
dotted slurs
%}
-\version "1.0.6";
+\version "1.0.7";
\include "prelude-urtext.ly";
dotted slurs
%}
-\version "1.0.6";
+\version "1.0.7";
\include "prelude-urtext.ly";
dotted slurs
%}
-\version "1.0.6";
+\version "1.0.7";
\include "sarabande-urtext.ly";
dotted slurs
%}
-\version "1.0.6";
+\version "1.0.7";
\include "sarabande-urtext.ly";
%{
%}
-\version "1.0.6";
+\version "1.0.7";
global =
Tested Features: stem direction, multivoice, forced accidentals.
%}
-\version "1.0.6";
+\version "1.0.7";
\include "nederlands.ly" % for correct parsing of note names
copyright = "Public Domain";
}
-\version "1.0.6";
+\version "1.0.7";
global =
\notes {
Ugh.. Wish we had grace notes.... It adds another dimension to this
piece of music. %}
-\version "1.0.6";
+\version "1.0.7";
cad = \notes \relative c' {
}
-\version "1.0.6";
+\version "1.0.7";
allegro =
\notes
definition below. --MB
%}
-\version "1.0.6";
+\version "1.0.7";
vi1=\notes \relative c'' {
\time 4/4;
copyright = "public domain";
latexheaders= "headers";
}
-\version "1.0.6";
+\version "1.0.7";
%{
Silly latex file dropped; use ly2dvi
copyright = "public domain";
}
-\version "1.0.6";
+\version "1.0.7";
\include "standchen.ly"
description = "A schubert song in 20 pt";
}
-\version "1.0.6";
+\version "1.0.7";
% fool make-website
% \include "standchen.ly";
found = 1
break
if found:
- sys.stderr.write ('\nNot smart enough to convert \\octave\n')
+ sys.stderr.write ('\nNot smart enough to convert \\octave')
raise FatalConversionError()
return lines
conversions.append (
((0,1,21), conv, '\\musical_pitch -> \\musicalpitch, '+
- '\\meter -> \\time\n'))
+ '\\meter -> \\time'))
if 1: # need new a namespace
def conv (lines):
conversions.append (
((1,0,1), conv, '\\accidentals -> \\keysignature, ' +
- 'specialaccidentals -> keyoctaviation\n'))
+ 'specialaccidentals -> keyoctaviation'))
if 1:
def conv(lines):
found = 1
break
if found:
- sys.stderr.write ('\nNot smart enough to convert to new \\header format\n')
+ sys.stderr.write ('\nNot smart enough to convert to new \\header format')
return lines
- conversions.append ((1,0,2), conv, '\header { key = concat + with + operator }\n')
+ conversions.append ((1,0,2), conv, '\\header { key = concat + with + operator }')
if 1:
def conv(lines):
newlines.append (x)
return newlines
- conversions.append ((1,0,3), conv, '\melodic -> \notes\n')
+ conversions.append ((1,0,3), conv, '\\melodic -> \\notes')
+
if 1:
def conv(lines):
newlines =[]
newlines.append (x)
return newlines
- conversions.append ((1,0,4), conv, 'default_{paper,midi}\n')
+ conversions.append ((1,0,4), conv, 'default_{paper,midi}')
if 1:
def conv(lines):
newlines.append (x)
return newlines
- conversions.append ((1,0,5), conv, 'ChoireStaff -> ChoirStaff\n')
+ conversions.append ((1,0,5), conv, 'ChoireStaff -> ChoirStaff')
if 1:
def conv(lines):
newlines.append (x)
if found: break
if found:
- sys.stderr.write ('\nNot smart enough to \\translator syntax\n')
+ sys.stderr.write ('\nNot smart enough to \\translator syntax')
raise FatalConversionError()
return newlines
- conversions.append ((1,0,6), conv, 'foo = \\translator {\type .. } ->\translator {\type ..; foo; }\n')
+ conversions.append ((1,0,6), conv, 'foo = \\translator {\\type .. } ->\\translator {\\type ..; foo; }')
+
+
+if 1:
+ def conv(lines):
+ newlines =[]
+ for x in lines:
+ x = regsub.gsub ('\\\\lyric', '\\\\lyrics',x)
+ newlines.append (x)
+ return newlines
+
+ conversions.append ((1,0,7), conv, '\\lyric -> \\lyrics')
+
+
############################
+
def get_conversions (from_version, to_version):
def version_b (v, f = from_version, t = to_version):
EXTRA_DIST_FILES = $(TEX_FILES) lilyponddefs.ps
-INSTALLATION_DIR=$(TEXDIR)/lilypond
+INSTALLATION_DIR=$(datadir)/tex/
INSTALLATION_FILES=$(TEX_FILES)
include $(depth)/make/stepmake.make