TOPLEVEL_MAJOR_VERSION = 0
TOPLEVEL_MINOR_VERSION = 0
-TOPLEVEL_PATCH_LEVEL = 58
+TOPLEVEL_PATCH_LEVEL = 59
# use to send patches, always empty for released version:
# include separator: ".postfix", "-pl" makes rpm barf
quality. We'd like to render Herbert Chlapiks words, "Fine music
setting is not possible without a knowledgeable printer," untrue.
+=item *
+
+Make a which system which fully tweakable. It should be possible to
+typeset a book on how not to typeset music.
+
=back
=head1 LILYPOND
to make a few chords, but why do I have to type
- < { a() e } { c () g } >
+ < { a~ e } { c ~ g } >
instead of
- <a( c(> <)e )g>
+ <a~ c~> <e g>
-to generate slurs between the chords?
+to generate ties between the chords?
A: When you type
< { a } { c } > < { e } { g } >
-Slurs have to be confined to `voices', and the a and the e are in
+Ties have to be confined to `voices', and the a and the e are in
different {} blocks, so they are in different voices. You should view
the desired construct as a "generalised chord" (two voices stacked
vertically). It might help you visualise this by using the following
formatting:
- < { a () e }
- { c () g }
+ < { a ~ e }
+ { c ~ g }
>
Q: and where do the beams come into this picture?
A: Beams are voicegroup-wide, and may be entered in any part of the
voicegroup:
- < { [a () e] } { c () g } >
- < { [a () e } { c () g] } >
- < { [a () e] } { [c () g] } >
+ < { [a ~ e] } { c ~ g } >
+ < { [a ~ e } { c ~ g] } >
+ < { [a ~ e] } { [c ~ g] } >
These all give the same result.
% NO nesting!
[c8 c8 c8]2/3 % a triplet
+
+=head2 Slurs and Ties
+
+Ties connect the noteheads of adjecent notes. They are entered as follows:
+
+ a4 ~ a4
+
+Slurs connect whole chords, and try to avoid crossing stems. They are
+entered as follows:
+
+ a4( )a4
+
+=head2 Scripts
+
Symbols which can be put at either side (above or below) of a staff
are entered as follows:
+pl 59
+ - Slur now into voicegroups, and take stems into account.
+ - bf: rest size in table.
+ - split Slur in baseclass Bow
+ - Tie, Tie_req, Tie_register
+
+******
+may 2
pl 58
- lexer cleanup
- national chars in lyrics
- small toccata-fuga-E.ly fixes
- \bar "||"; is now doublebar, "|." is finishbar
- collision hshift fix, with on-line assistance
-
+******
pl 57
- lots of TODO doco
- text alignment bugfix
- script-on-rest bug
- doc update
- transpose syntax
-
+******
pl 54
- bugfix Colhpos.cc::OK assert fail.
- Inclusion of MusixTeX MF files,
+This is an assorted collection of stuff that will be done, might be
+done, or is an idea that I want to think about
+
+Most of the items are marked in the code as well, with full explanation.
+grep for TODO and ugh/ugr
+
+
IMPORTANT
* update 20 pt table
+ * use Hungarian throughout code
+
* rename mf fonts to avoid conflicts with musixtex
* decent TeX page layout
* script priority
- * slur direction
-
* use own fonts/update musixtex fonts
* check return status in make_website
* a Hands on tutorial [HKN]
-This is an assorted collection of stuff that will be done, might be
-done, or is an idea that I want to think about
-Most of the items are marked in the code as well, with full explanation.
-grep for TODO and ugh/ugr
+PROJECT:
+
+ * Output class, handles
+ - help text /(c) notice?
+ - warning /errors/progress
+ - abort on error/warning; exit status
+ - quiet/ignore-version options
+ - logfile output
PARSER
* Duration-> Musical_duration, typedef Rational Duration?
HKN buglist:
-exitcode? (altijd 0)
-
\bar || ook dunne streepjes? Sluit de balk niet af! (soms met de
ruimte van een hele maat erachter (bij unmatching staffs)
-logfile?
-
-Gepunteerde rusten kloppen niet (punt eronder/boven ipv ernaast)
-
Hele rusten ook in andere maatsoort dan 4/4 (en centreren in de maat)
------------------------/
optie om te stoppen na eerste barcheck fail? (en wellicht in eerder
-stadium van precessing)
+stadium van preprocessing)
noten staan vaak te dicht aan de rechterkant van de maatstreep.
symbolen voor triller? (dus "tr---")
-mogelijkheid om complete regions te commenten (met /* */ ofzo)
-
waarom geen ; achter dingen in \paper? (\textwidth 180\mm)
(sowieso: wanneer wel en geen ; ?)
midi: tempo halverwege het stuk wijzigen?
midi: gebonden noten niet herhalen?
-TeX literals invoegen?
-
---------/\
-Dit geeft gigantische trubbels
- < [d8.( e'32*2/3 d'32*2/3 cis'32*2/3 b16 d'16 cis'16 )b'16]
- [b8. cis'32*2/3 b32*2/3 a32*2/3 gis16 fis16 e16 d16] >
-(zie file junkjunk.ly) Ik had natuurlijk wat accolades moeten
-plaatsen, maar ja...
-
---------/\
-Inconsequent: ene keer wel, andere keer niet parse error?
-ipt.ini][/usr/local/share/lilypond/init//table_sixteen.ini]]./lacidarem.ly: 56:
-error: parse error:
- <[d8. b8.> \duration 32; <e'*
- 2/3 cis'*2/3> <d'*2/3 b*2/3>
-./lacidarem.ly: 56: error: parse error:
- <[d8. b8.> \duration 32; <e'*2/3 cis'*2/3> <d'*
- 2/3 b*2/3>
-./lacidarem.ly: 57: error: parse error:
- <cis'*
- 2/3 a*2/3> \duration 16; <b gis> <d' fis> <cis' e> <b' d]> |
-]./lacidarem.ly: 65: warning: Score contains errors. Will not process it. :
--------/\
De beam van de triool klopt niet.
<[d8. b8.> \duration 32; <e'32*2/3 cis'32*2/3> <d'32*2/3 b32*2/3>
* [c8. c32 c32]
+ * \duration 8; e*2/3
+
* cis ( | ) cis
* lilypond - -> crash
* chlapik balk ruimte
- * standchen triool beam up/down
+ * standchen triool beam up/down
SEVERELY LACKING:
* caching breakpoints / saving them.
- * hack ElectricFence to use with LD_PRELOAD
-
* use dstream feature in mi2mu
* qtor, btor, mtor-> tor( QUIET_ver ), tor( DEBUG_ver ), etc.
FUTURE
- * tie a ~ b, move slur reg into voice-group.
-
* Reg_configure_request
* bring Collision::do_pre_processing to haircutter
* SHIT: meters/bars should be aligned, which is difficult if
we get different keychanges in different staffs.
- * Integrating (objectiveC) MusicKit with LilyPond?
-
* MusixTeX output possible?
* PostScript output (esp. Beams, Slurs, etc)
* caching breakpoints
- * use exceptions iso assert?
-
* #c <-> cis
* breath marks
# list of distribution files:
SCRIPTS = clearlily cpgento genheader make_patch \
+ lily.efence\
make_version make_website release convert-mudela show-latest
EXTRA_DISTFILES = $(SCRIPTS)
#
#!/usr/bin/perl -w
+=head1 TODO
+
+ detect \lyrics and \melodic, and do substitution accordingly.
+
+=cut
+
+
+
#
# version of "supporting" engine, not mudela conversions.
#
+
+
+
$convert_mudela_version = "0.1";
use Getopt::Long;
s/\"\|\|\"/\"|.\"/g;
}
+sub convert_0_0_56_to_0_0_57
+{
+ s/\(([ \]\[|\t-\.>]|\\[<!>a-z]+)*\)/\~ $1/g;
+}
+
###############################################################
sub last_conversion
53 => \&convert_0_0_52_to_0_0_53,
54 => \&convert_0_0_53_to_0_0_54,
55 => \&convert_0_0_54_to_0_0_55,
- 56 => \&convert_0_0_55_to_0_0_56
- );
+ 56 => \&convert_0_0_55_to_0_0_56,
+ 57 => \&convert_0_0_56_to_0_0_57
+ );
sub versions
--- /dev/null
+# gdb script
+file bin/lilypond
+set environment LD_PRELOAD libefence.so
+
\inputregister {Local_key_register}
\inputregister { Staff_sym_register }
\inputregister { Collision_register }
+ \inputregister { Rest_collision_register }
\inputregister {
Voice_group_registers
\inputregister { Dynamic_register }
\inputregister { Text_register }
\inputregister { Script_register }
\inputregister { Note_column_register }
+ \inputregister { Slur_register }
\inputregister { Voice_registers
\inputregister { Notehead_register }
- \inputregister { Slur_register }
+ \inputregister { Tie_register }
}
}
}
-\version "0.0.56";
+\version "0.0.57";
\include "register.ini"
\include "dynamic.ini"
}
"rests" = \table {
- "1" "\wholerest" -5\pt 1\pt -1\pt 1\pt
- "2" "\halfrest" -5\pt 1\pt -1\pt 1\pt
+ "1" "\wholerest" 0\pt 6\pt 0\pt 2\pt
+ "2" "\halfrest" 0\pt 6\pt -2\pt 0\pt
"4" "\quartrest" -5\pt 2\pt -5\pt 5\pt
"8" "\eighthrest" 0\pt 5\pt 0\pt 8\pt
"16" "\sixteenthrest" 0\pt 6\pt 0\pt 12\pt
-% title:
-% description:Cadenza to Mozart Horn concerto 3
-% composer(s):unknown
-% entered-by:HWN
-% copyright: public domain
-%
-% Tested Features: cadenza mode
+%{MudelaHeader
+ title:
+ description:Cadenza to Mozart Horn concerto 3
+ composer(s):unknown
+ entered-by:HWN
+ copyright: public domain
+ Tested Features: cadenza mode
-\version "0.0.56";
+EndMudelaHeader
+%}
+
+\version "0.0.57";
cad = \melodic {
c'4.\mf g8
- [e'^"accel" ()d' c' b]
- [b()c'] g-\fermata
+ [e'^"accel" ~ d' c' b]
+ [b~ c'] g-\fermata
\bar \empty;
c [c_"rubato" e g c']
\octave c'';
- e4. e [g ()f_"rit" e d]
+ e4. e [g ~ f_"rit" e d]
\duration 16;
- dis4()e4
+ dis4~ e4
\bar \empty ;
r8 [c d] [e f g gis]
\duration 4;
- a-> 'f()'e g
- f-> 'd()'cis e
+ a-> 'f~ 'e g
+ f-> 'd~ 'cis e
\duration 8;
d4^\fermata
\bar \empty ;
r8 'a ['b cis]
\duration 16; [d cis d e]
- f4()[f e d c]
+ f4~ [f e d c]
'b4
\octave c'; [d'8 c'8 a8]2/3
g2
\bar \empty ;
[g c e g] [c' e g c']\octave c'';
- [e 'g c e] g4^\fermata %()% BUG!
+ [e 'g c e] g4^\fermata %~ % BUG!
\bar \empty ;
[g8.(_"a tempo" e g8. )e]
a4. g8 [f8 e8 d8 c8]
-% test the Collision resolution
-\version "0.0.56";
+%{MudelaHeader
+
+ filename: collisions.ly
+ title:
+ description:
+ composer(s): HWN
+ entered-by: HWN
+ copyright: public domain
+
+ Tested Features:%test the Collision resolution
+EndMudelaHeader
+%}
+\version "0.0.57";
+
two_voice_steminvert = \melodic {
< \multivoice
{ \octave c'; \stem 1;
- c d e f() g2 g a }
+ c d e f~ g2 g a }
{ \stem -1;
- g f e g ()g2 g2 }
+ g f e g ~ g2 g2 }
>
}
two_voice = \melodic {
< \multivoice
{ \octave c'; \stem -1;
- c d e f g2() g a }
+ c d e f g2~ g a }
{ \stem 1;
- g f e g ()g2 g2 }
+ g f e g ~ g2 g2 }
>
}
-% Ludwig van Beethoven (1770-1792)
-%
-% Opus 62
-% Ouverture zu Collins Trauerspiel "Coriolan"
-%
-% a 5 bar fragment of the alto part
-%
-% Copyright (c) 1997 Jan Nieuwenhuizen <jan@digicash.com>
+%{MudelaHeader
+
+ filename: coriolan-alto.ly
+ title:Ouverture zu Collins Trauerspiel "Coriolan" Opus 62
+ description: a 5 bar fragment of the alto part
+ composer(s): Ludwig van Beethoven (1770-1792)
+ entered-by: JCN
+ copyright: public domain
+
+ Tested Features:
+EndMudelaHeader
+%}
+
%
% when lily can handle this, i-ll type the other 304 bars
% (maybe even sooner :-)
%
-\version "0.0.56";
+
+\version "0.0.57";
alto = \melodic{
-\version "0.0.56";
+\version "0.0.57";
\include "this-is-hopefully-a-nonexisting-file"
[ a8 a8 a8 a8 a8 ] %
[ a8 ] %
% segfault
- < { [ bes^"1"( )a bes-. g-. ] a4-.^"4" } { [ e ] } { [ c ] } > |
+ < { [ bes^"1"~ a bes-. g-. ] a4-.^"4" } { [ e ] } { [ c ] } > |
a ) b ] c % warning
& % ok; error
a b ) ] % ok; error
-%%MudelaHeader
-% title:
-% description:
-% composer(s):
-% entered-by:
-% copyright:
-%
-% Tested Features:
-%%End
+%{MudelaHeader
-\version "0.0.56";
+ filename:
+ title:
+ description:
+ composers:
+ entered-by:
+ copyright:
+
+ Tested Features:
+EndMudelaHeader
+%}
+\version "0.0.57";
-% "Ah, vous dirais-je, maman" (Mozart, KV 265)
-%
-% bare bones version. (written down from memory :-)
-% for lyrics, see twinkle.ly
+%{MudelaHeader
+
+ filename: kortjakje.ly
+ title: Ah, vous dirais-je, maman (variations)
+ description: bare bones version. (written down from memory :-)
+ composers:Mozart, KV 265
+ entered-by: HWN
+ copyright: none
+
+ Tested Features: example file with comments
+EndMudelaHeader
+%}
+\version "0.0.57";
+
% the % is a comment.
-%
-% copyright: None
-%
-\version "0.0.56";
+
% declare melody (which will be in *one* staff ) for the lead voice
melodie = \melodic {
(| % start a slur
% NOTE: the slurstart should be directly after the note
) % end a slur.
- g r8 g8 (| ) a r8 a8 (| ) g r4
- f r8 f8 (| ) e4 r8 e8 ( |) d4 r8 d8 (| ) c4 r4
+ g r8 g8 ~ a r8 a8 ~ g r4
+ f r8 f8 ~ e4 r8 e8 ~ | d4 r8 d8 ~ c4 r4
}
% more of this.
\octave 'c ;
e 'g d 'g c 'g 'b 'g e 'g d 'g c 'g 'b 'g
%%%% var 1
- r8 e8() c r8 e8() c r8 f8()c r8 e8()c
- r8 d8()'b r8 c8()'a r8 'a8()'f r8 'e8()'c
+ r8 e8~ c r8 e8~ c r8 f8~ c r8 e8~ c
+ r8 d8~ 'b r8 c8~ 'a r8 'a8~ 'f r8 'e8~ 'c
}
\score{
% \lbheel \lbheel \lfheel \lftoe
% \rbheel \rbtoe \rfheel \rftoe
-\version "0.0.56";
+\version "0.0.57";
\score{
\staff{ melodicregs
%
% add any impressive examples here, please
-\version "0.0.56";
+\version "0.0.57";
ritme = \staff {
melodicregs
\meter 4/4;
c8 |
- [a8() a8. a8 a16 a16 a16] c4. | % watch the beams!
+ [a8~ a8. a8 a16 a16 a16] c4. | % watch the beams!
r32 r32 r16 r8 r4 r2 |
\meter 5/16;
% scales with accents.
%
-\version "0.0.56";
+\version "0.0.57";
blah = \staff{ melodicregs
\melodic {
\meter 6/8;
% The purpose of this file is to demonstrate features of LilyPond.
% (there is an accompanying LaTeX file, scsii-menuetto.tex)
%
-\version "0.0.56";
+\version "0.0.57";
%% Stuff from MPP version
% \lefttitle{Menuetto}
% \tempo{Moderato}
< e'2 a2 \f >
[ d'( e'16 )f'16 ] |
%%10
- < [ e' g > d' cis'_"2" e' a( )g ] |
+ < [ e' g > d' cis'_"2" e' a~ g ] |
%%11
< \multivoice
- {\stem 1; a4() d'4 cis'4-. }
+ {\stem 1; a4~ d'4 cis'4-. }
{ \stem -1; f2 e4 } > |
%%12
- < [ g'^"4" d > f' e' f' d'^"3"( ) c' ] |
+ < [ g'^"4" d > f' e' f' d'^"3"~ c' ] |
%%13
\clef "alto";
< \multivoice
{ \stem 1; bes2 c'4 }
- { \stem -1; g4() f4 e4 }% ugh
+ { \stem -1; g4~ f4 e4 }% ugh
> |
%%14
< [ a f > g a f ] < d'4-\upbow e4 'bes4 > |
%%15
- < c'4-\downbow f4 'a4 > [ bes( )a g a ] |
+ < c'4-\downbow f4 'a4 > [ bes~ a g a ] |
%%16
[ f( e )f a-. g-. bes-. ] |
%%17
< a2^"0" fis2_"3" > bes4 |
%%18
- < { [ c'( )bes c' a ] } { [ es ] } > fis4 |
+ < { [ c'~ bes c' a ] } { [ es ] } > fis4 |
%%19
< d'4-\downbow g4 'bes4 > < c'4-\upbow g4 c4 > < [ bes d > a ] |
%%20
- < { [ c'( bes a )bes g( )bes ] } { [ d ] } { [ g ] } > |
+ < { [ c'( bes a )bes g~ bes ] } { [ d ] } { [ g ] } > |
%%21
< \multivoice
- {\stem 1; d'4(\stem 1; ) cis'4 d'4 }
+ {\stem 1; d'4 (\stem 1; ) cis'4 d'4 }
{ \stem -1; g2 f4 }
> |
%%22
- < { [ g( )f g e ] } { [ cis ] } > < f4 d4 > |
+ < { [ g~ f g e ] } { [ cis ] } > < f4 d4 > |
%%23
[ 'g g ] < e4. 'a4. > d-\upbow |
%%24
--- /dev/null
+%{MudelaHeader
+
+ filename: slurs.ly
+ title:
+ description:
+ composer(s): HWN
+ entered-by: HWN
+ copyright: GPL
+
+ Tested Features: test slurs and ties
+EndMudelaHeader
+%}
+
+\version "0.0.57";
+
+\score{\staff{
+ melodicregs
+ \melodic{\octave c';
+ \duration 4;
+ c ~ c ~ g ~ c ~
+ d ~ e ~ f ~ g ~
+ a ~ b ~ 'c ~ c
+
+ < c e ( > <)d f>
+ \octave c'';
+ < c e ( > <)d f>
+ \octave c';
+ < c e ( > <)d' f'>
+ < { c ~ d }
+ { e ~ f }
+ >
+
+
+
+ }
+
+ }
+}
-% standchen.ly
-%
-% St\"andchen (Serenade) "Leise flehen meine Lieder" D.957 No.4
-% Franz Schubert (1797-1828)
-% Text by Ludwig Rellstab (1799-1860)
-%
-% Copyright (c) 1995,1996,1997 Jan Nieuwenhuizen <jandigicash.com>
-%
-% The purpose of this file is to demonstrate features of LilyPond.
-% (there is an accompanying LaTeX file, standchen.tex)
-%
-\version "0.0.56";
+%{
+standchen.ly
+
+ St\"andchen (Serenade) "Leise flehen meine Lieder" D.957 No.4
+ Franz Schubert (1797-1828)
+ Text by Ludwig Rellstab (1799-1860)
+
+ Copyright (c) 1995,1996,1997 Jan Nieuwenhuizen <jandigicash.com>
+
+ The purpose of this file is to demonstrate features of LilyPond.
+ (there is an accompanying LaTeX file, standchen.tex)
+
+%}
+\version "0.0.57";
commands = \melodic{
\skip 2.*4;
%%4
r < [ 'a cis > e < 'a cis > e < 'a cis ] > |
%%5
- [ a()bes a ]2/3 d'4. a |
+ [ a~ bes a ]2/3 d'4. a |
%%6
- [ g()a g ]2/3 d'4 g r |
+ [ g~ a g ]2/3 d'4 g r |
%%7
- a4.^> g [ g()f e ]2/3 |
+ a4.^> g [ g~ f e ]2/3 |
%%8
f2 r4 |
%%9
- < { a'4.( )g' [ g'( f' )e' ]2/3 }
+ < { a'4.~ g' [ g'( f' )e' ]2/3 }
{ cis'4. e'_"dolce" \plet 2/3; e' \plet 1/1; } > |
%%10
< f'2. d'2. > |
%%11
- [ a (\pp )bes a ]2/3 f'4. a |
+ [ a ~ bes a ]2/3 f'4. a |
%%12
- [ g( ) a g ]2/3 e'4. d' |
+ [ g~ a g ]2/3 e'4. d' |
%%13
- c'4. bes [ bes( ) a g ]2/3 |
+ c'4. bes [ bes~ a g ]2/3 |
%%14
a2 r
- < { d'( | )c'4. g [ bes a g ]2/3 }
- { f \p ( | )e4._"dolce" bes
+ < { d'~ c'4. g [ bes a g ]2/3 }
+ { f \p ~ e4._"dolce" bes
\plet 2/3; g
\plet 1/1;
} > |
[ d'8. a16 ] f4. d |
%%19
%#% c'\grace\stemup
- [ bes (\pp ) a bes ]2/3 d'4. bes |
+ [ bes ~ a bes ]2/3 d'4. bes |
%%20
a2. |
%%21
%#% a\grace
- [ g( )fis g ]2/3 bes4.^> g |
+ [ g~ fis g ]2/3 bes4.^> g |
%%22
f!2. |
%%23
%%24
[ d'8. a16 ] fis4. d |
%%25
- [ b \mf( ) ais b ]2/3 d'4. b |
+ [ b \mf~ ais b ]2/3 d'4. b |
%%26
< a2. fis2. > |
%%27
- [ e' \f( )dis' e' ]2/3 g'4. cis' |
+ [ e' \f~ dis' e' ]2/3 g'4. cis' |
%%28
< d'2. fis2. > |
%#%\volta1
%%29
- < { bes2( [ d'8.( ))g16 ] }
+ < { bes2( [ d'8.~ )g16 ] }
{ g2 \mf [ bes8. bes16 ] } > |
%%30
< { a4. [ a-. a-. a-. ] }
%%32
< a2 fis2 \pp > < a4 fis4 > |
%%33
- < { b2( [ d'8.( ) )g16 ] }
+ < { b2( [ d'8.~ g16 ] }
{ g2 [ b8. b16 ] } > |
%%34
< { a4. [ a-. a-. a-. ] }
%%37
[ a8. a16 ] [ cis'8. cis'16 ] [ e'8. e'16 ] |
%%38
- d'4( )cis'4 r4 |
+ d'4~ cis'4 r4 |
%%39
%#% > a4. [ cis' e'8. >! d'16 ] |
a4. \> [ cis' e'8. \! d'16 ] |
%%40
cis'2 r4 |
%%41
- < fis'4. \> cis'4. \f > e' [ e'( )d' \! cis' ]2/3 |
+ < fis'4. \> cis'4. \f > e' [ e'~ d' \! cis' ]2/3 |
%%42
[ b8. cis'16 ] d'4^> b r |
%%43
%%44
[ b8. \> cis'16 ] d'4^> b \! r |
%%45
- [ b \p ( )ais b ]2/3 d'4. b |
+ [ b \p ~ ais b ]2/3 d'4. b |
%%46
<a!2. fis2. > |
%%47
- [ e' \f( )dis' e' ]2/3 g'4.^> cis' |
+ [ e' \f~ dis' e' ]2/3 g'4.^> cis' |
%%48
\textstyle "italic";
<
- { fis2.( \group "+1"; \stem -1; )f2. }
- { d'2. ( \stem 1; )d'4 r4_"decresc." d'4 }
+ { fis2.~ \group "+1"; \stem -1; f2. }
+ { d'2. ~ \stem 1; d'4 r4_"decresc." d'4 }
>
\textstyle "roman"; |
%%50
% * organ staff...
%
-\version "0.0.56";
+\version "0.0.57";
toccata_commands = \melodic{
\meter 4/4;
% 13 -- how to type -- where to split -- this more neatly ?
\octave c';
<\multivoice
- { \stem 1; \hshift 1; r4 dis'4 e'4.-. e'8( | )e'4 [d'8 fis'8] gis'4 [gis'8 fis'16 e'16] | fis'4( )[fis'8 e'16 dis'16] e'4 r8 e'8 }
- { \stem 1; r4 bis4 cis'4-. cis'4 | ais'4( )[ais'16 gis'16 ais'16 b'16] dis'4 cis'4( | )[cis'8 dis'16 ais16] bis4 cis'4 r8 b8 }
+ { \stem 1; \hshift 1; r4 dis'4 e'4.-. e'8~ e'4 [d'8 fis'8] gis'4 [gis'8 fis'16 e'16] | fis'4~ [fis'8 e'16 dis'16] e'4 r8 e'8 }
+ { \stem 1; r4 bis4 cis'4-. cis'4 | ais'4~ [ais'16 gis'16 ais'16 b'16] dis'4 cis'4~ [cis'8 dis'16 ais16] bis4 cis'4 r8 b8 }
{ \stem -1; r4 < gis4 fis4 dis4 > gis4-. gis4 | ais4. cis'8 gis2 | fis4 gis4 gis4 r8 e8 }
> |
% 16
\clef bass;
% 13
<\multivoice
- { \stem 1; bis2 cis'4-. cis'4( | )[cis'8 ais'8 d'8 cis'8] [bis8 gis8] cis'4 | dis'2 cis'4 r8 cis'8 }
- { \stem 1; \hshift 1; r4 gis4. gis8( )gis4 | \stem -1; \hshift 0; ais4. fis8 gis4. ais8( | )ais4 gis4-. gis4 r8 gis8 }
+ { \stem 1; bis2 cis'4-. cis'4~ [cis'8 ais'8 d'8 cis'8] [bis8 gis8] cis'4 | dis'2 cis'4 r8 cis'8 }
+ { \stem 1; \hshift 1; r4 gis4. gis8~ gis4 | \stem -1; \hshift 0; ais4. fis8 gis4. ais8~ ais4 gis4-. gis4 r8 gis8 }
{ \stem -1; r4 < dis4 fis4 > < cis4 e4 > }
> |
% 16
> |
% 16
<\multivoice
- { \stem 1; dis'2 dis'4 | cis'2 cis'4 | b4( )[b8 cis'8 dis'8 e'8] }
- { \stem 1; \hshift 1; b8 fis8 b2( | )[b8 a16 g16] a2 | a4 gis2 }
- { \stem -1; fis2.( | )fis2.( | )fis4 e2 }
+ { \stem 1; dis'2 dis'4 | cis'2 cis'4 | b4~ [b8 cis'8 dis'8 e'8] }
+ { \stem 1; \hshift 1; b8 fis8 b2~ [b8 a16 g16] a2 | a4 gis2 }
+ { \stem -1; fis2.~ fis2.~ fis4 e2 }
> |
% 19
}
-% "Ah, vous dirais-je, maman"
-% "Altijd is Kortjakje ziek"
-% "Twinkle twinkle little star"
-%
-% Copyright: none
-\version "0.0.56";
-
-\version "0.0.55";
+%{MudelaHeader
+
+ filename: twinkle.ly
+ title: twinkle twinkle little star
+ description:
+ "Ah, vous dirais-je, maman"
+ "Altijd is Kortjakje ziek"
+ "Twinkle twinkle little star"
+
+ composers: ?
+ entered-by: HWN & JCN
+ copyright: public domain
+
+ Tested Features: lyrics
+EndMudelaHeader
+%}
+\version "0.0.57";
melody = \melodic{
\clef\violin;
-%
-% title: Das Wohltemperirte Clavier I, Fuga II (c-minor)
-% description:
-% composer(s): JS Bach
-% entered-by: HWN
-% copyright:Public Domain
-%
-% Tested Features:stem direction, multivoice.
-%
+%{
+ title: Das Wohltemperirte Clavier I, Fuga II (c-minor)
+ description:
+ composer(s): JS Bach
+ entered-by: HWN
+ copyright:Public Domain
-\version "0.0.56";
+ Tested Features:stem direction, multivoice.
+%}
+
+\version "0.0.57";
global = \melodic{
\meter 4/4 ;
[g c'16 b] [c'8 d'] [f16 g] as4 [g16 f] |
[es c' b a] [ g f es d] [c8 es' d' c'] |
[bes a bes c'] [fis g a fis] |
- g4 r16 [c d es] [f g as8(] [)as16 d es f ]|
+ g4 r16 [c d es] [f g as8~] [as16 d es f ]|
[g a bes8(] [)bes16 es f g ] [as g f es] [d8 c'16 b]|
c'4 r4 r8 [f' es' d']
r8 [as g f] [g f16 es] [f8 d] |
[es d es f] [B c d B] |
c4 r8 e8 [f f16 e] [f8 c] |
d4 r8 d8 [es8 es16 d] [es8 Bes] |
- c2 () [c8 d16 es][ f es f d] |
+ c2 ~ [c8 d16 es][ f es f d] |
B8 r8 r B c r r es |
- d r r f()f r r f |
+ d r r f~ f r r f |
[es as g f] [es d es f] |
[B c d B] [B c] r c |
- [f16 d es c]()[c8 B] c4 r8 e |
+ [f16 d es c]~ [c8 B] c4 r8 e |
f4 r8 <f8 as b> [f es16 d] [es8 <f a] > |
<B d> r <B d> r <G2 c> |
}
r [es d c] [d c16 Bes] [c8 d] |
[G8 bes16 a] [bes8 d] [es c'16 bes] [c'8 e] |
[f d'16 c'] [d'8 fis] g4 r16 [G A B] |
- [c16 d es8]()[es16 A Bes c] [d es f8]()[f16 'b c d]|
+ [c16 d es8]~ [es16 A Bes c] [d es f8]~ [f16 'b c d]|
%%20
es8 r r e [f F Es D] |
r [As G F] [G F16 Es] [F8 G] |
[F16 G] As4 [G16 F] Es4 r8 es |
[d c g G]
< \multivoice
- { \stem 1; c2 (|)c1(|) c1 }
- { \stem -1; C2(|)C1(|) C1 }
+ { \stem 1; c2 ~ |c1~ | c1 }
+ { \stem -1; C2~ |C1~ | C1 }
>
}
MAJOR_VERSION = 0
MINOR_VERSION = 0
-PATCH_LEVEL = 58
+PATCH_LEVEL = 59
# use to send patches, always empty for released version:
# include separator: ".postfix", "-pl" makes rpm barf
-MY_PATCH_LEVEL = .jcn3
+MY_PATCH_LEVEL =
--- /dev/null
+/*
+ bow.cc -- implement Bow
+
+ source file of the LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+#include "bow.hh"
+#include "paper-def.hh"
+#include "lookup.hh"
+
+Bow::Bow()
+{
+ left_pos_i_ = right_pos_i_ = 0;
+ left_dx_f_ = right_dx_f_ = 0.0;
+}
+
+
+Offset
+Bow::center() const
+{
+ int dy = right_pos_i_-left_pos_i_;
+
+ Real w = width().length();
+
+ return Offset(w/2,dy * paper()->internote());
+}
+
+Molecule*
+Bow::brew_molecule_p() const
+{
+ Molecule*output = new Molecule;
+ Real w = width().length();
+
+ int dy = right_pos_i_ - left_pos_i_;
+
+ Real nw_f = paper()->note_width();
+ Real nh_f = paper()->internote();
+
+
+ w+= (right_dx_f_ - left_dx_f_) * nw_f ;
+ Real round_w = w; // slur lookup rounds the slurwidth .
+
+ Symbol sl = paper()->lookup_l()->slur(dy , round_w, dir_i_);
+
+ Real error = w-round_w;
+
+ Atom a(sl);
+ a.translate(Offset((left_dx_f_ + 0.5 )*nw_f + error/2,
+ left_pos_i_ * nh_f));
+ output->add(a);
+ return output;
+}
+
+IMPLEMENT_STATIC_NAME(Bow);
#include "directional-spanner.hh"
+void
+Directional_spanner::set_default_dir()
+{
+ dir_i_ = -1;
+}
Directional_spanner::Directional_spanner()
{
dir_i_ = 0;
--- /dev/null
+/*
+ bow.hh -- declare Bow
+
+ source file of the LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+
+#ifndef BOW_HH
+#define BOW_HH
+#include "directional-spanner.hh"
+
+/**
+ base class for anything that looks like a slur.
+ */
+class Bow : public Directional_spanner {
+protected:
+ int left_pos_i_;
+ int right_pos_i_;
+ Real left_dx_f_;
+ Real right_dx_f_;
+ Molecule*brew_molecule_p()const;
+public:
+ Bow();
+ NAME_MEMBERS(Bow);
+ Offset center() const;
+};
+#endif // BOW_HH
/// offset of "center" relative to left-column/0-pos of staff
virtual Offset center() const=0;
- virtual void set_default_dir()=0;
+ virtual void set_default_dir();
Directional_spanner();
};
+/*
+ item.hh -- declare Item
+
+ source file of the LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
#ifndef ITEM_HH
#define ITEM_HH
void do_print()const;
Real hpos_f() const;
NAME_MEMBERS(Item);
+ /**
+
+ @return the line where this is in;
+
+ PRE
+ Breaking calc has to be finished
+ */
+ Line_of_score * line_l() const;
};
struct Span_dynamic_req;
struct Subtle_req;
struct Stem_req;
+struct Tie_req;
+struct Tie;
+struct Tie_register;
struct Terminate_voice_req;
struct Text_req;
struct Timing_req;
#ifndef MUSICALREQUESTS_HH
#define MUSICALREQUESTS_HH
+#include "lily-proto.hh"
#include "request.hh"
#include "duration.hh"
virtual Skip_req* skip() { return 0; }
virtual Dynamic_req* dynamic() { return 0; }
virtual Absolute_dynamic_req * absdynamic() { return 0; }
+ virtual Tie_req * tie() { return 0; }
virtual Subtle_req * subtle() { return 0; }
virtual Span_dynamic_req * span_dynamic() { return 0; }
REQUESTMETHODS(Musical_req, musical);
Beam_req();
};
+/**
+ Start a tie at this voice element, end it at the next
+ */
+class Tie_req : public Musical_req {
+public:
+ REQUESTMETHODS(Tie_req, tie);
+};
+
/// a slur
class Slur_req : public Span_req {
public:
/** a struct for treating a group of noteheads (noteheads, stem
(chord) and scripts ) as a single entity. */
class Note_column : public Script_column {
- /// link to the stem. For setting default direction
- Stem * stem_l_;
void do_pre_processing();
public:
+ /// link to the stem. For setting default direction
+ Stem * stem_l_;
+
bool h_shift_b_;
Array<Notehead*> head_l_arr_;
protected:
virtual ~Slur_register();
virtual bool try_request(Request*);
+ virtual bool acceptable_request_b(Request*);
virtual void process_requests();
virtual void acknowledge_element(Staff_elem_info);
virtual void pre_move_processing();
#define SLUR_HH
#include "directional-spanner.hh"
-#include "fproto.hh"
+#include "lily-proto.hh"
#include "varray.hh"
+#include "bow.hh"
-struct Slur : Directional_spanner {
+class Slur : public Bow {
+public:
+ Array<Note_column*> encompass_arr_;
- Array<Notehead*> encompass;
-
- bool open_left, open_right;
-
- /* *************** */
- Offset center() const;
- Slur();
void do_post_processing();
void do_pre_processing();
- void add(Notehead*);
+ void add(Note_column*);
void set_default_dir();
Spanner* do_break_at( PCol*, PCol*) const;
private:
- Molecule*brew_molecule_p()const;
NAME_MEMBERS(Slur);
};
--- /dev/null
+/*
+ tie-reg.hh -- declare Tie_register
+
+ source file of the LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+
+#ifndef TIE_REG_HH
+#define TIE_REG_HH
+
+#include "register.hh"
+
+class Tie_register : public Request_register {
+ Tie * end_tie_p_;
+ Tie * tie_p_;
+ Moment end_mom_;
+ Tie_req * req_l_;
+ Tie_req *end_req_l_;
+protected:
+ virtual ~Tie_register();
+ virtual void acknowledge_element(Staff_elem_info);
+ virtual bool try_request(Request*);
+ virtual bool acceptable_request_b(Request*);
+ virtual void process_requests();
+ virtual void post_move_processing();
+ virtual void pre_move_processing();
+public:
+ Tie_register();
+ NAME_MEMBERS(Tie_register);
+};
+
+#endif // TIE_REG_HH
--- /dev/null
+/*
+ tie.hh -- declare Tie
+
+ source file of the LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+
+#ifndef TIE_HH
+#define TIE_HH
+
+#include "bow.hh"
+
+class Tie : public Bow {
+ virtual Spanner* do_break_at(PCol*,PCol*)const;
+ virtual void do_add_processing();
+ virtual void do_post_processing();
+public:
+ Notehead * left_head_l_;
+ Notehead * right_head_l_;
+
+ void set_head(int, Notehead*head_l);
+ Tie();
+
+};
+#endif // TIE_HH
{
return pcol_l_->hpos + offset().x;
}
+
+Line_of_score *
+Item::line_l()const
+{
+ return pcol_l_->line_l_;
+}
IMPLEMENT_STATIC_NAME(Musical_req);
void
Musical_req::do_print()const{}
+void
+Tie_req::do_print()const{}
IMPLEMENT_STATIC_NAME(Request);
mtor << "louder/louder: " <<dynamic_dir_i_;
#endif
}
+
+IMPLEMENT_STATIC_NAME(Tie_req);
Request* req_p=0;
switch (c) {
+ case '~':
+ req_p = new Tie_req;
+ break;
case '[':
case ']':
{
void
Note_column::do_pre_processing()
{
- if (!dir_i_)
- dir_i_ = stem_l_->dir_i_;
+ if (!dir_i_){
+ if (stem_l_)
+ dir_i_ = stem_l_->dir_i_;
+ else
+ dir_i_ = (head_positions_interval().center() >= 5) ? -1 : 1;
+ }
}
{
clean_cols();
print();
- *mlog << "Preprocessing ... " <<flush;
+ *mlog << "Preprocessing elements... " <<flush;
preprocess();
*mlog << "\nCalculating column positions ... " <<flush;
calc_breaking();
- *mlog << "\nPostprocessing ..." << endl;
+ *mlog << "\nPostprocessing elements..." << endl;
postprocess();
}
%{ // -*-Fundamental-*-
#include <iostream.h>
-#define MUDELA_VERSION "0.0.56"
+#define MUDELA_VERSION "0.0.57"
#include "script-def.hh"
#include "symtable.hh"
;
close_request_parens:
- '(' {
+ '~' {
+ $$ = '~';
+ }
+ | '(' {
$$='(';
}
| ']' {
void
Score::setup_music()
{
- *mlog << "\nSetting up music ..." << flush;
+ *mlog << "\nSetting up requests..." << flush;
Pulk_voices pulk(staffs_);
void
Score::process_music()
{
- *mlog << "Processing music ..." << flush;
+ *mlog << "Processing requests ..." << flush;
for (Score_walker w(this); w.ok(); w++) {
w.process();
}
#include "slur-reg.hh"
#include "slur.hh"
#include "debug.hh"
-#include "notehead.hh"
+#include "note-column.hh"
+
+bool
+Slur_register::acceptable_request_b(Request*req_l)
+{
+ return req_l->musical() && req_l->musical()->slur();
+}
bool
Slur_register::try_request(Request *req_l)
void
Slur_register::acknowledge_element(Staff_elem_info info)
{
- if (info.elem_l_->name() == Notehead::static_name()) {
- Notehead *head_p =(Notehead*) info.elem_l_ ;// ugh
+ if (info.elem_l_->name() == Note_column::static_name()) {
+ Note_column *col_l =(Note_column*) info.elem_l_ ;// ugh
for (int i = 0; i < slur_l_stack_.size(); i++)
- slur_l_stack_[i]->add(head_p );
+ slur_l_stack_[i]->add(col_l );
for (int i = 0; i < end_slur_l_arr_.size(); i++)
- end_slur_l_arr_[i]->add(head_p);
+ end_slur_l_arr_[i]->add(col_l);
}
}
/*
+/*
+ slur.cc -- implement Slur
+
+ source file of the LilyPond music typesetter
+
+ (c) 1996, 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
/*
TODO:
#include "scalar.hh"
#include "lookup.hh"
#include "paper-def.hh"
-#include "notehead.hh"
+#include "note-column.hh"
+#include "stem.hh"
#include "p-col.hh"
#include "molecule.hh"
#include "debug.hh"
-Slur::Slur()
-{
- open_right=open_left=false;
-}
-
-Offset
-Slur::center() const
-{
- int pos1 = encompass.top()->position_i_;
- int pos2 = encompass[0]->position_i_;
-
- int dy = pos1-pos2;
-
- Real w = width().length();
-
- return Offset(w/2,dy * paper()->internote());
-}
-
void
-Slur::add(Notehead*n)
+Slur::add(Note_column*n)
{
- encompass.push(n);
+ encompass_arr_.push(n);
add_dependency(n);
}
void
Slur::set_default_dir()
{
- int sumpos=0;
- for (int i=0; i < encompass.size(); i ++) {
- sumpos += encompass[i]->position_i_;
+ dir_i_ = -1;
+ for (int i=0; i < encompass_arr_.size(); i ++) {
+ if (encompass_arr_[i]->dir_i_ < 0) {
+ dir_i_ =1;
+ break;
+ }
}
-
- /* should consult stems */
- Real meanpos = sumpos/Real(encompass.size());
- if (meanpos < 5) // todo
- dir_i_ = -1;
- else
- dir_i_ = 1;
}
void
Slur::do_pre_processing()
{
- right_col_l_ = encompass.top()->pcol_l_;
- left_col_l_ = encompass[0]->pcol_l_;
+ right_col_l_ = encompass_arr_.top()->pcol_l_;
+ left_col_l_ = encompass_arr_[0]->pcol_l_;
}
Spanner*
assert(l->line_l_ == r->line_l_);
Slur*ret = new Slur(*this);
- ret->encompass.set_size(0);
- for (int i =0; i < encompass.size(); i++) {
- if (encompass[i]->pcol_l_->line_l_==l->line_l_)
- ret->encompass.push(encompass[i]);
+ ret->encompass_arr_.set_size(0);
+ for (int i =0; i < encompass_arr_.size(); i++) {
+ if (encompass_arr_[i]->pcol_l_->line_l_==l->line_l_)
+ ret->encompass_arr_.push(encompass_arr_[i]);
}
- if (right_col_l_ != r)
- ret->open_right = true;
- if (left_col_l_ != l)
- ret->open_left = true;
-
return ret;
}
{
if (!dir_i_)
set_default_dir();
+ Real inter_f = paper()->internote();
+ left_pos_i_ = encompass_arr_[0]->stem_l_->height()[dir_i_]/inter_f;
+ right_pos_i_ = encompass_arr_.top()->stem_l_->height()[dir_i_]/inter_f;
}
-
-Molecule*
-Slur::brew_molecule_p() const
-{
- Molecule*output = new Molecule;
-
- int minp=1000, maxp=-1000; // todo
- for (int i=0; i<encompass.size(); i++) {
- minp = encompass[i]->position_i_ <? minp;
- maxp = encompass[i]->position_i_ >? maxp;
- }
- assert(encompass.size()>0); // todo
-
- Notehead *lnote_p =encompass[0];
- Notehead *rnote_p =encompass.top();
- int lpos_i = lnote_p->position_i_;
- int rpos_i = rnote_p->position_i_;
- Offset left_off(lnote_p->x_dir_i_, lpos_i + 2*dir_i_);
- Offset right_off(lnote_p->x_dir_i_, rpos_i + 2*dir_i_);
- if (!lnote_p->extremal_i_)
- left_off += Offset(0.5, -dir_i_);
- if (!rnote_p->extremal_i_)
- right_off+= Offset(-0.5, -dir_i_);
-
- int dy = int(right_off.y - left_off.y);
-
- Real nw_f = paper()->note_width();
- Real nh_f = paper()->internote();
- Real w = width().length();
-
- w+= (right_off.x - left_off.x) * nw_f ;
- Real round_w = w; // slur lookup rounds the slurwidth .
-
- Symbol sl = paper()->lookup_l()->slur(dy , round_w, dir_i_);
-
- Real error = w-round_w;
-
- Atom a(sl);
- a.translate(Offset((left_off.x + 0.5 )*nw_f + error/2,
- left_off.y * nh_f));
- output->add(a);
- return output;
-}
-
IMPLEMENT_STATIC_NAME(Slur);
span_p->left_col_l_ = c1;
span_p->right_col_l_ = c2;
+ span_p->pstaff_l_ = pstaff_l_;
return span_p;
}
// ugh... how about non 5-line staffs?
if ((max_head_i() < -2 && dir_i_ == 1 )
||(min_head_i() > staff_size_i_ && dir_i_ == -1) ){
- set_stemend( staff_size_i_ /2 );
+ set_stemend( staff_size_i_ /2 -1 );
} else {
set_stemend( (dir_i_ > 0) ? max_head_i() + STEMLEN :
min_head_i() - STEMLEN);
--- /dev/null
+/*
+ tie-reg.cc -- implement Tie_register
+
+ source file of the LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+#include "tie-reg.hh"
+#include "tie.hh"
+#include "notehead.hh"
+#include "musical-request.hh"
+#include "voice-element.hh"
+
+Tie_register::Tie_register()
+{
+ end_tie_p_ = 0;
+ tie_p_ = 0;
+ req_l_ =0;
+ end_req_l_ =0;
+ end_mom_ = -1;
+}
+
+void
+Tie_register::post_move_processing()
+{
+ if (tie_p_ && get_staff_info().when() == end_mom_) {
+ end_tie_p_ = tie_p_;
+ end_req_l_ = req_l_;
+ tie_p_ =0;
+ req_l_ =0;
+ end_mom_ = -1;
+ }
+}
+
+bool
+Tie_register::acceptable_request_b(Request*r)
+{
+ return r->musical() && r->musical()->tie();
+}
+
+bool
+Tie_register::try_request(Request*r)
+{
+ if(!acceptable_request_b(r))
+ return false;
+ if (req_l_ ) {
+ return false;
+ }
+ req_l_ = r->musical()->tie();
+ end_mom_ = r->elt_l_->duration_ + get_staff_info().when();
+ return true;
+}
+
+void
+Tie_register::process_requests()
+{
+ if (req_l_ && ! tie_p_) {
+ tie_p_ = new Tie;
+ }
+}
+
+void
+Tie_register::acknowledge_element(Staff_elem_info i)
+{
+ if (i.elem_l_->name() == Notehead::static_name()) {
+ if (tie_p_)
+ tie_p_->set_head(-1, (Notehead*)i.elem_l_);
+
+ if (end_tie_p_) {
+ end_tie_p_->set_head(1, (Notehead*)i.elem_l_);
+ announce_element(Staff_elem_info(end_tie_p_,end_req_l_));
+ }
+ }
+}
+
+void
+Tie_register::pre_move_processing()
+{
+ if (end_tie_p_) {
+ typeset_element(end_tie_p_);
+ end_tie_p_ =0;
+ end_req_l_ =0;
+ }
+
+}
+
+Tie_register::~Tie_register()
+{
+ if (tie_p_) {
+ req_l_->warning("unended Tie");
+ delete tie_p_;
+ }
+}
+
+IMPLEMENT_STATIC_NAME(Tie_register);
+ADD_THIS_REGISTER(Tie_register);
--- /dev/null
+/*
+ tie.cc -- implement Tie
+
+ source file of the LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+#include "tie.hh"
+#include "notehead.hh"
+#include "p-col.hh"
+
+Spanner*
+Tie::do_break_at(PCol*l, PCol*r) const
+{
+ Tie * tie_p = new Tie;
+ Line_of_score const *line_C=l->line_l_;
+ if (left_head_l_->line_l()== line_C)
+ tie_p->left_head_l_ = left_head_l_;
+ if (right_head_l_->line_l() == line_C)
+ tie_p->right_head_l_ = right_head_l_;
+
+ return tie_p;
+}
+
+void
+Tie::set_head(int x_pos, Notehead * head_l)
+{
+ if (x_pos >0) {
+ assert(!right_head_l_);
+ right_head_l_ = head_l;
+ } else {
+ assert(!left_head_l_);
+ left_head_l_ = head_l;
+ }
+ add_dependency(head_l);
+}
+
+Tie::Tie()
+{
+ right_head_l_ =0;
+ left_head_l_ =0;
+}
+
+void
+Tie::do_add_processing()
+{
+ assert(left_head_l_ && right_head_l_);
+ left_col_l_ = left_head_l_ -> pcol_l_;
+ right_col_l_ = right_head_l_ -> pcol_l_;
+}
+
+void
+Tie::do_post_processing()
+{
+ assert(left_head_l_ || right_head_l_);
+ left_pos_i_ = (left_head_l_)?
+ left_head_l_->position_i_ : right_head_l_->position_i_;
+ right_pos_i_ = (right_head_l_) ?
+ right_head_l_->position_i_ : left_head_l_->position_i_;
+}
+
+
Begin3
Title: LilyPond
-Version: 0.0.58
-Entered-date: 05/02/97
+Version: 0.0.59
+Entered-date: 05/05/97
Description: LilyPond is a program which converts a music-script (mudela) into
TeX output, or MIDI to produce multi-staff scores. Features include multiple
meters, clefs, keys, lyrics, versatile input-language, cadenzas
jan@digicash.com (Jan Nieuwenhuizen)
Maintained-by: hanwen@stack.nl (Han-Wen Nienhuys)
Primary-site: pcnov095.win.tue.nl /pub/lilypond/
- 300k lilypond-0.0.58.tar.gz
+ 300k lilypond-0.0.59.tar.gz
Alternate-site:
Original-site:
Platform: unix/win32, GNU C++
Name: lilypond
-Version: 0.0.58
+Version: 0.0.59
Release: 1
Copyright: GPL
Group: Applications/Publishing
-Source0: pcnov095.win.tue.nl:/pub/lilypond/lilypond-0.0.58.tar.gz
+Source0: pcnov095.win.tue.nl:/pub/lilypond/lilypond-0.0.59.tar.gz
Summary: A preprocessor to make TeX typeset music.
URL: http://www.stack.nl/~hanwen/lilypond
Packager: Han-Wen Nienhuys <hanwen@stack.nl>
strip bin/lilypond bin/mi2mu
make prefix="$RPM_BUILD_ROOT/usr" install
%files
-%doc Documentation/out/AUTHORS.text Documentation/out/CodingStyle.text Documentation/out/INSTALL.text Documentation/out/MANIFESTO.text Documentation/out/convert-mudela.text Documentation/out/error.text Documentation/out/examples.text Documentation/out/faq.text Documentation/out/index.text Documentation/out/language.text Documentation/out/lilygut.text Documentation/out/lilypond.text Documentation/out/mi2mu.text Documentation/out/mudela.text input/cadenza.ly input/collisions.ly input/coriolan-alto.ly input/error.ly input/header.ly input/kortjakje.ly input/rhythm.ly input/scales.ly input/scsii-menuetto.ly input/scsii-menuetto.tex input/standchen.ly input/standchen.tex input/twinkle.ly input/wohltemperirt.ly Documentation/lelie_logo.gif
+%doc Documentation/out/AUTHORS.text Documentation/out/CodingStyle.text Documentation/out/INSTALL.text Documentation/out/MANIFESTO.text Documentation/out/convert-mudela.text Documentation/out/error.text Documentation/out/examples.text Documentation/out/faq.text Documentation/out/index.text Documentation/out/language.text Documentation/out/lilygut.text Documentation/out/lilypond.text Documentation/out/mi2mu.text Documentation/out/mudela.text input/cadenza.ly input/collisions.ly input/coriolan-alto.ly input/error.ly input/header.ly input/kortjakje.ly input/pedal.ly input/rhythm.ly input/scales.ly input/scsii-menuetto.ly input/scsii-menuetto.tex input/slurs.ly input/standchen.ly input/standchen.tex input/toccata-fuga-E.ly input/twinkle.ly input/wohltemperirt.ly Documentation/lelie_logo.gif
/usr/bin/convert-mudela
/usr/bin/lilypond
/usr/lib/libflower.so
-\font\musicfont=cmsy10
+\font\musicfont=musix16
\font\slurfont=xslu16
\def\thefont{\musicfont}