]> git.donarmstrong.com Git - lilypond.git/commitdiff
lilypond-1.1.49
authorfred <fred>
Tue, 26 Mar 2002 21:50:28 +0000 (21:50 +0000)
committerfred <fred>
Tue, 26 Mar 2002 21:50:28 +0000 (21:50 +0000)
203 files changed:
Documentation/tex/lilypond-regtest.doc
Documentation/tex/refman.yo
TASKS
TODO
input/bugs/Overture.ly
input/bugs/nobreak.ly [new file with mode: 0644]
input/example-3.ly
input/just-friends.ly
input/keys.ly
input/kortjakje.ly
input/part.ly
input/pedal.ly
input/praeludium-fuga-E.ly
input/rhythm.ly
input/scales.ly
input/scripts.ly
input/star-spangled-banner.ly
input/test/alphabet.ly
input/test/auto-staff-switch.ly
input/test/bar-scripts.ly
input/test/beam-chord.ly
input/test/beam-interstaff.ly
input/test/beam-isknee.ly
input/test/beam-pos.ly
input/test/beams.ly
input/test/broken.ly
input/test/chord-inversion.ly
input/test/chord-table.ly
input/test/chords.ly
input/test/clefs.ly
input/test/collisions.ly
input/test/defaultbars.ly
input/test/denneboom.ly
input/test/dotted-slur.ly
input/test/extender.ly
input/test/extra-staff.ly
input/test/find-quarts.ly
input/test/font.ly
input/test/font16.ly
input/test/font20.ly
input/test/gourlay.ly
input/test/grace.ly
input/test/hara-kiri.ly
input/test/incipit.ly
input/test/keys.ly
input/test/knee.ly
input/test/mark.ly
input/test/memory.ly
input/test/multi-rest.ly
input/test/noteheadstyle.ly
input/test/notemode-chords.ly
input/test/orchestscore.ly
input/test/ossia.ly
input/test/rest-collision.ly
input/test/score-bar-scripts.ly
input/test/sleur.ly
input/test/slur-bug.ly
input/test/slur-damping.ly
input/test/slur-interstaff.ly
input/test/slur-swap.ly
input/test/slurs.ly
input/test/spacing-2.ly
input/test/spacing.ly
input/test/span-bars.ly
input/test/staff-margin.ly
input/test/staff-side-slur.ly
input/test/staff-size.ly
input/test/stem-spacing.sly [new file with mode: 0644]
input/test/stem-tremolo.ly
input/test/stem.ly
input/test/tchaikovsky.ly
input/test/thumb.ly
input/test/tie-bug.ly
input/test/tie.ly
input/test/title.ly
input/test/transposition.ly
input/test/tup.ly
input/test/updown.fly
input/test/vertical-align.ly
input/test/vertical-text.ly
input/test/wtk-huh.ly
input/tril.ly
lily/bar.cc
lily/break.cc
lily/collision.cc
lily/crescendo.cc
lily/g-script.cc
lily/g-text-item.cc
lily/include/lookup.hh
lily/include/ly-symbols.hh
lily/include/note-column.hh
lily/include/p-score.hh
lily/include/score-element.hh
lily/include/spacing-spanner.hh
lily/include/stem.hh
lily/multi-measure-rest.cc
lily/note-column.cc
lily/p-score.cc
lily/paper-def.cc
lily/parser.yy
lily/rhythmic-column-engraver.cc
lily/score-element.cc
lily/score-engraver.cc
lily/spacing-spanner.cc
lily/span-bar.cc
lily/spring-spacer.cc
lily/stem.cc
lily/time-signature.cc
lily/tuplet-spanner.cc
lily/volta-spanner.cc
ly/book-fragment.ly
ly/book-init.ly
ly/center-fragment.ly
ly/center.ly
ly/fragment.ly
ly/init.fly
ly/init.ly
ly/init.sly
ly/paper16.ly
ly/paper20.ly
ly/params.ly
ly/property.ly
mutopia/Coriolan/bassi-part.ly
mutopia/Coriolan/clarinetti-part.ly
mutopia/Coriolan/clarinetti.ly
mutopia/Coriolan/clarinetto-1.ly
mutopia/Coriolan/clarinetto-2.ly
mutopia/Coriolan/contrabasso-part.ly
mutopia/Coriolan/contrabasso.ly
mutopia/Coriolan/corni-part.ly
mutopia/Coriolan/corni.ly
mutopia/Coriolan/corno-1.ly
mutopia/Coriolan/corno-2.ly
mutopia/Coriolan/fagotti-part.ly
mutopia/Coriolan/fagotti.ly
mutopia/Coriolan/fagotto-1.ly
mutopia/Coriolan/fagotto-2.ly
mutopia/Coriolan/flauti-part.ly
mutopia/Coriolan/flauti.ly
mutopia/Coriolan/flauto-1.ly
mutopia/Coriolan/flauto-2.ly
mutopia/Coriolan/global.ly
mutopia/Coriolan/oboe-1.ly
mutopia/Coriolan/oboe-2.ly
mutopia/Coriolan/oboi-part.ly
mutopia/Coriolan/oboi.ly
mutopia/Coriolan/timpani.ly
mutopia/Coriolan/trombe-part.ly
mutopia/Coriolan/trombe.ly
mutopia/Coriolan/trombo-1.ly
mutopia/Coriolan/trombo-2.ly
mutopia/Coriolan/viola-1.ly
mutopia/Coriolan/viola-2.ly
mutopia/Coriolan/viola-part.ly
mutopia/Coriolan/violino-1-part.ly
mutopia/Coriolan/violino-1.ly
mutopia/Coriolan/violino-2-part.ly
mutopia/Coriolan/violino-2.ly
mutopia/Coriolan/violoncello-part.ly
mutopia/Coriolan/violoncello.ly
mutopia/D.Scarlatti/progress.ly
mutopia/D.Scarlatti/sonata-k1-l366.ly
mutopia/D.Scarlatti/sonata-k2-l388.ly
mutopia/D.Scarlatti/sonata-k3-l378.ly
mutopia/D.Scarlatti/sonata-k4-l390.ly
mutopia/D.Zipoli/verso_2.ly
mutopia/E.Satie/gnossienne-4.ly
mutopia/E.Satie/petite-ouverture-a-danser.ly
mutopia/F.Schubert/standchen-16.ly
mutopia/F.Schubert/standchen-20.ly
mutopia/GNUmakefile
mutopia/Hymns/diademata.ly
mutopia/Hymns/laudatedom.ly
mutopia/Hymns/maccabaeus.ly
mutopia/Hymns/ode.ly
mutopia/Hymns/stille.ly
mutopia/J.S.Bach/Cembalo-Partitas/Partita_II_Allemande.ly
mutopia/J.S.Bach/Cembalo-Partitas/Partita_II_Capriccio.ly
mutopia/J.S.Bach/Cembalo-Partitas/Partita_II_Sinfonia.ly
mutopia/J.S.Bach/Solo-Cello-Suites/allemande-cello.ly
mutopia/J.S.Bach/Solo-Cello-Suites/allemande-urtext.ly
mutopia/J.S.Bach/Solo-Cello-Suites/courante-urtext.ly
mutopia/J.S.Bach/Solo-Cello-Suites/gigue-urtext.ly
mutopia/J.S.Bach/Solo-Cello-Suites/menuetto-cello.ly
mutopia/J.S.Bach/Solo-Cello-Suites/menuetto-urtext.ly
mutopia/J.S.Bach/Solo-Cello-Suites/prelude-cello.ly
mutopia/J.S.Bach/Solo-Cello-Suites/prelude-urtext.ly
mutopia/J.S.Bach/Solo-Cello-Suites/prelude-viola.ly
mutopia/J.S.Bach/Solo-Cello-Suites/sarabande-urtext.ly
mutopia/J.S.Bach/viola-i.ly
mutopia/J.S.Bach/violino-viola.ly
mutopia/J.S.Bach/violino-violoncello.ly
mutopia/J.S.Bach/violoncello-i.ly
mutopia/J.S.Bach/wtk1-fugue1.ly
mutopia/J.S.Bach/wtk1-fugue2.ly
mutopia/J.S.Bach/wtk1-prelude1.ly
mutopia/N.W.Gade/brass.ly
mutopia/N.W.Gade/strings.ly
mutopia/N.W.Gade/wood.ly
mutopia/W.A.Mozart/cadenza.ly
mutopia/W.A.Mozart/horn-concerto-3.ly
mutopia/gallina.ly
scripts/abc-2-ly.py

index 6fcd8b45a0c6cf0703fd6f182eb0bc58e332f106..bc70c38b3ddd31c45671b5806da1d8d59bf82652 100644 (file)
@@ -85,6 +85,13 @@ numberOfStaffLines.  Ledger lines both on note heads and rests are adjusted.
 
 \mudelafile{number-staff-lines.fly}
 
+\section{Spacing}
+
+In a limited number of cases, LilyPond corrects for optical spacing
+effects.  In this example, space for opposite pointed stems is adjusted
+
+\mudelafile{stem-spacing.sly}
+
 \section{Global stuff}
 
 Markings that are attached to (invisible) barlines are 
index 5711ca323b3a1897f8261464a22190365d559b04..1ab69332373408b25c647c8d124d3918541e55ad 100644 (file)
@@ -533,14 +533,14 @@ e' ~ e' <c' e' g'> ~ <c' e' g'>
 It is possible to create beams and slurs that cross staffs by switching the
 context:
 mudela(fragment,verbatim,center)(
-<
+\context PianoStaff <
 \context Staff=one \notes\relative c'{
   \stemup
   [c8 c \translator Staff=two \stemup c c]
   \translator Staff=one
   d4( \translator Staff=two )a4
   }
-\context Staff=two \notes{ \clef bass;}
+\context Staff=two \notes{ \clef bass; s1}
 >
 )
 
diff --git a/TASKS b/TASKS
index b52bec1a458de974170a159519de9a35bffad29b..ef7ad3d29ac60862238114fb78a186b39d1c381f 100644 (file)
--- a/TASKS
+++ b/TASKS
@@ -5,7 +5,7 @@ WHAT IS MUTOPIA?
 
 Mutopia is an archive of public domain music, free for all to
 download, modify and redistribute.  It should be based on free
-software. It is similar in spirit to the gutenberg archive.
+software. It is similar in spirit to the Gutenberg archive.
 
 
 
@@ -15,21 +15,16 @@ WHAT NEEDS TO BE DONE
 
 - setup submission guidelines, 
 
-- acquire mutopia.org domain.
-
-- setup FTP server
-
-- cooperate with ABC folks, ftp.gmd.de
+- setup FTP/Web server
 
 
 
 WHO DO WE NEED
 
-Volunteers that want to setup and maintain a website and FTP site.
-
-Volunteers with enough legal knowledge to write submission guidelines.
+Volunteers that want to setup, host and maintain a website and FTP
+site.
 
-A project leader.
+Volunteers to write submission guidelines, and copyright FAQs.
 
 
 
@@ -44,7 +39,7 @@ enough time to take up the task of setting up Mutopia
 
 Signed
 
-Han-Wen Nienhys
+Han-Wen Nienhuys
 Jan Nieuwenhuizen
 
 [other bigwigs?]
diff --git a/TODO b/TODO
index ee05f34ea8ab751554d990641d0dfc957b0ddfa9..3ad59da0474319d1fe0e611743abc8e829a19fae 100644 (file)
--- a/TODO
+++ b/TODO
@@ -9,8 +9,8 @@ Most of the items are marked in the code as well
 Grep for TODO and ugh/ugr/urg.  
 
 .* BUGS
-. * junk separate mudela versioning. 
-. * petite-ouverture time sig size. 
+. * junk separate mudela versioning.
+. * indent = 0.0 with linewidth=-1.0
 . * PostScript
 .  * header for PS enteredby = "bla <bla@bar.com>"
 .  * ps/lily.ps see comments.
@@ -63,7 +63,6 @@ I understand your point.  It should be changed.
 . * fix MIDI
 . * \shape 1st dim skipped? 
 . * turn slope-damping on/off
-. * tremolo stuff: tremolo over whole note.
 . * We need feta-din*.mf files for more sizes than 10.
 . * fix dynamics decently, ie. use kerning & ligatures.  
 . * dots & rest collisions?
@@ -91,7 +90,7 @@ specify the third.  Should there be?
 
    note + circle = note + 1/4 of its length
 
-5   the circle is like a dot that's not filled in.  for example, on
+   the circle is like a dot that's not filled in.  for example, on
    page three, the c-sharp on the second line should be a quarter with 
    a circle, not a quarter tied to a sixteenth.  is this at all
    possible with lily?
@@ -100,7 +99,6 @@ specify the third.  Should there be?
 . * repeat engraver, gallina.ly
 
 . * Matanya's tips: 
-.  * spacing for prefatory matter
 .  * accidentals closer to note head
 .  * to space the staffs/staffgroups contained in the score.  
 .  * heavier beams?
@@ -111,14 +109,11 @@ specify the third.  Should there be?
 . * Slur
 . * Rhythmic_grouping
 . * Duration
-. * Collision
-. * Rest_collision
-. * clef grav prop's 
+. * clef engraver 
 . * parser
 
 .* TODO before 1.2
 . * Morally pure LilyPond.
-.  * Remove mutopia ramblings.
 .  * Remove non-free software links.
 .  * Remove meta article LilyPond.
 . * break priority setting from SCM.
@@ -191,10 +186,6 @@ compilation.
 . * add new glyphs to font.ly
 . * formatting of input stuff. 
 . * \notes{ a \< b \cr } vs \notes{ a \< b \! }
-. * 'hinterfleisch' before bar (e.g. wtk1-fugue2)?
-. * Summary of minor spelling irregularities:
-.  *  capitalization/use of underscores in property names
-.  * fix SkipBars  -> skipBars
 . * broken scripts:
        lbheel = \script { "bheel" 0 0 -1  0 0 }
        rbheel = \script { "bheel" 0 0 1 0 0 }
@@ -308,6 +299,8 @@ touching it.
 
 .* 3RD PARTY BUGS
 . * GNU diff 2.7: diff -rN does not see a new directory with empty file
+. * mf-to-table -> add space before ; in AFM output.  (-> check AFM
+    spec. Is this a bug in afm2tfm?)
 . * check out GCC signatures?
 . * glibc 2.0:
          f = fopen ("/dev/null", "r")
index 1f6f5148378e600872ef1ea34ca3f93cc8168ca9..99c37f13aae6bfe20696c430f256970cfeb5b17f 100644 (file)
@@ -4,7 +4,7 @@ composer = "Johann Christoph Faber";
 piece = "1.  Overture";
 }
 
-\version "1.0.20";
+\version "1.0.21";
 
 global=\notes{
        \time 2/2;
diff --git a/input/bugs/nobreak.ly b/input/bugs/nobreak.ly
new file mode 100644 (file)
index 0000000..0636efd
--- /dev/null
@@ -0,0 +1,2 @@
+
+\score { \context Staff \notes { c1 \nobreak c1 }}
index 7bbed535f0ef9de0f36118632b802e85e39c17d3..950f45ab576a1e91cb3caf5b16408e4459d5f5c0 100644 (file)
@@ -1,4 +1,4 @@
-\version "1.0.20";
+\version "1.0.21";
 
 one = \notes\relative c{
        c'' d e f
index 60443d076f34b11a30769c2c7fc1328688c048c5..b08f6f3176518758946f0a91e26af9bffd85dae3 100644 (file)
@@ -57,4 +57,4 @@ of a certain tune (Jazz, Real Book, for example), like
        }
 }
 
-\version "1.0.20";
+\version "1.0.21";
index f203dedaf14cba4f6433932fe1c6670f6dad1592..66e95fd41b4d83a08e855e7a9c14d6f398731692 100644 (file)
@@ -1,4 +1,4 @@
-\version "1.0.20";
+\version "1.0.21";
 
 
 blah = \notes {
index 376fadc8ba04e651f737e4e2e13bffe1919972c7..e88af13ef3b9908bb204acbd19336606780c5238 100644 (file)
@@ -10,7 +10,7 @@ copyright =    "public domain";
 Tested Features: example file with comments
 
 %}
-\version "1.0.20";
+\version "1.0.21";
 
 
 % the % is a comment.
index e54ca2a2017c98650dce9bfc321afc608f2c2b38..a0f60f576b9bfd6ee44d456c24aaa822606fa4ff 100644 (file)
@@ -1,4 +1,4 @@
-\version "1.0.20";
+\version "1.0.21";
 part = \notes {
        c-1 c c c
        r1*3
index bfd90fea410d25abad2d4272b4c16f9eb9f1d70f..514fee0325fe4d099fe3b0ad505721d456d55d83 100644 (file)
@@ -28,7 +28,7 @@
 % \lbheel \lbheel \lfheel \lftoe
 % \rbheel \rbtoe \rfheel \rftoe
 
-\version "1.0.20";
+\version "1.0.21";
 
 \score{
                \notes {
index a8c26b71f6d1b384d0025e6a77a9229e5d0f9d92..1742c1286ece4cfcaba82319128d48ff838b86b1 100644 (file)
@@ -23,7 +23,7 @@
    * organ staff...
 %}
 
-\version "1.0.20";
+\version "1.0.21";
 
 
 
@@ -203,13 +203,13 @@ breakmusic = \notes {
     \VoiceContext
     \name "VoiceThree";
     verticalDirection = "1";
-    hshift = "1";
+    horizontalNoteShift = "1";
     }
     \translator {
     \VoiceContext
     \name "VoiceFour";
     verticalDirection = "-1";
-    hshift = "1";
+    horizontalNoteShift = "1";
     }
    \translator { 
      \StaffContext 
index e8ab4e3de6b98f456f826a1d047bc71da7233875..b0de5a90bd717a15b2dee4cc1a8453791bfdf04f 100644 (file)
@@ -7,7 +7,7 @@ TestedFeatures =         "multiple meters, beaming, unsynced bars, userdefd engravers";
 
 
 
-\version "1.0.20";
+\version "1.0.21";
 
 ritme = \notes\transpose c'' {
        \time  4/4;
index 4b00ac05be613901c2482aed1b5bc933b1186e84..18ae6a98445218c2b21dbe1181d8e4e8dd4df230 100644 (file)
@@ -16,7 +16,7 @@ copyright =    "public domain";
 % scales with accents.
 %
 
-\version "1.0.20";
+\version "1.0.21";
 blah =         \notes {
                \time 6/8;      
 \transpose c {
index 598e45bc38d28e07611b46e535aba443bef9277d..a78e1f8c250fab49e716feeead245d263ae36c7a 100644 (file)
@@ -1,5 +1,5 @@
        
-\version "1.0.20";
+\version "1.0.21";
 
 
 blah =         \notes{ \transpose c'' {
index c018bd523c40beee241d26bb5d043c90b461b613..49a0e4f3c9b4170b0b768efe0c2e120053d11bf0 100644 (file)
@@ -118,4 +118,4 @@ global = \notes {
 }
 
 
-\version "1.0.20";
+\version "1.0.21";
index acb8b7ab87b8b4481903a18e72871b8be9c0f683..361ec08752ed4e26924cf4e0a6a72df9a1a40f27 100644 (file)
@@ -121,4 +121,4 @@ xxx\break
        }
 }
 
-\version "1.0.20"; 
+\version "1.0.21"; 
index d176fbc7f274c1085121bb32d61b3079c6e1cad6..21cb6c592241fd3633dc8a6a9feab9d1a4601439 100644 (file)
@@ -31,4 +31,4 @@
 
 }}
 
-\version "1.0.20"; 
+\version "1.0.21"; 
index 8990f4686834a3a5198897054369a971f894a22a..0eebd74cab93419b2e35e73ca2060209d5087c80 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "1.0.20";
+\version "1.0.21";
 
 onestaff = \context Staff = foo\notes  {
        \property Staff.instr = instr
index 3ad0189aeb7c9ff7d750f28f9795c67e6f59523b..d9553639b5bdebb642d1a03a414366d611f58cb8 100644 (file)
@@ -1,4 +1,4 @@
-\version "1.0.20";
+\version "1.0.21";
 
 \score{
        \notes\transpose c'{
index 4554160c4351d4c984ab1d67a5765d2c99008c90..41e0adc66966dd4381daf0327d3157b49ad46a8e 100644 (file)
@@ -30,4 +30,4 @@
        }
 }
 
-\version "1.0.20"; 
+\version "1.0.21"; 
index f71167fdabcffd291a99965a3e12963168ee005a..342b553526ae819f0592b0566ac74e86483af969 100644 (file)
@@ -21,4 +21,4 @@
        }
 }
 
-\version "1.0.20"; 
+\version "1.0.21"; 
index 6d69d96723663005d3ee637bdfb2068e5c14e51b..6d2abe6cb4511747b5fc2e5cf2eb88bfe3d7cb0f 100644 (file)
@@ -1,4 +1,4 @@
-\version "1.0.20";
+\version "1.0.21";
 
 \score{
        \notes\transpose c''{
index 2e0cbb43ca707ea29868dc5573540cafd31d2fa7..819c9cdffea5ec2da5c33e780625d787e2ea70af 100644 (file)
@@ -6,7 +6,7 @@ copyright =      "PD";
 
 TestedFeatures =        "beams and beamflags";
 }
-\version "1.0.20";
+\version "1.0.21";
 
 \score{
        <
index 83b3e26ff7ae6e179047cfc3e8ceb6d78067af02..7c873500968b0584aa06240177441a73230fb899 100644 (file)
@@ -5,7 +5,7 @@ TestedFeatures =         "This file tests Feta embedded slurs" +
         "(Feta definitively is not an abbreviation of Font-En-TjA)";
 }
 
-\version "1.0.20";
+\version "1.0.21";
 
 shortlong = \notes{
        c4()c( c c  |
index 29fae53e31db71ce98a606bad6117f517c7f58df..e2d63ff9c21a1abff329cac6b2377e89792c5751 100644 (file)
@@ -22,4 +22,4 @@ inversions = \notes\transpose c''\chords{
        >
 }
 
-\version "1.0.20"; 
+\version "1.0.21"; 
index 25ffa4bc7899613c122d2bf26cc85312f2a6e35e..e31e92a57e60c5f99f4acd56463246c360efce06 100644 (file)
@@ -41,4 +41,4 @@ tab = \notes\transpose c'''\chords{
 
 }
 
-\version "1.0.20"; 
+\version "1.0.21"; 
index 06cf21a60a36060a83b6af4094b5bffbb60516dd..dda0de434d766c7077f305ab8c926d216a1dcf30 100644 (file)
@@ -1,4 +1,4 @@
-\version "1.0.20";
+\version "1.0.21";
 
 %{
 Would this be acceptable/good enough/convenient for entry?
index 4050cbfcd5d8364a4cf65dfc32a82cb415286bb9..de74c39138e75b0411d067463e89070ab3798c13 100644 (file)
@@ -1,4 +1,4 @@
-\version "1.0.20";
+\version "1.0.21";
 
 \score {
        \notes{ 
index c938d5bd49237b71aee8a0d28fbadae0aaa153b7..9c8e46f3d8c7d045b76fabf7e9f6bbd50c62e9aa 100644 (file)
@@ -5,7 +5,7 @@ enteredby =      "HWN,JCN";
 copyright =     "public domain";
 Tested =        "test the Collision resolution ";
 }
-\version "1.0.20";
+\version "1.0.21";
 
 twovoice = \context Staff \notes < 
        \context Voice=i { \stemdown c4 d e f g2~  g4 a [c8 d e f] c2| }
@@ -20,7 +20,7 @@ twovoicesteminvert = \context Staff \notes <
 
 threevoice = \context Staff \notes <
        \context Voice=i { \stemup g4 f e f g a g2 }
-       \context Voice=ii { \stemup \property Voice.hshift = 1 e2  e2  e2  e2 }
+       \context Voice=ii { \stemup \property Voice.horizontalNoteShift = 1 e2  e2  e2  e2 }
        \context Voice=iii { \stemdown c4 d e d c d es }
 >
 
index 5c94ae07bf9dede84caa1626007f152196cc96d2..664d0bc54d08f08beba4c165da5518e00c5ba4d4 100644 (file)
@@ -1,4 +1,4 @@
-\version "1.0.20";
+\version "1.0.21";
 
 
 \score {
index dc382e07a6ab720a981acb7e8894f47bf93286ce..f0105edf9047a181abe10d645056494a558f17c6 100644 (file)
@@ -7,7 +7,7 @@ TestedFeatures = "This file tests silly line shapes";
 
 \include "paper20.ly"
 
-\version "1.0.20";
+\version "1.0.21";
 
 oden = \lyrics{ 
        O8 |
index 6b42c3e8f0940ad96bca38c378680b87ee94ba72..1504b5bc12a8f09cd405ce5797a7f2cac453a92e 100644 (file)
@@ -1,4 +1,4 @@
-\version "1.0.20";
+\version "1.0.21";
 
 \score{
        \notes{
index ea0587909da70b914a34bfc5fc1b92c5c9cb4bf2..643acb4fcd47cc8c1abcb695a118e34a4dcb48fc 100644 (file)
@@ -5,4 +5,4 @@
        >
 }
 
-\version "1.0.20"; 
+\version "1.0.21"; 
index 829c0929b946bbd00a4dcdfd9d5f60f6a43b2110..b12ab289f54a8d546f28c2cac6d1461bb02aef32 100644 (file)
@@ -42,4 +42,4 @@ extra-staff.ly:
 }
 
 
-\version "1.0.20"; 
+\version "1.0.21"; 
index a9992e2dff9778bc2a539a07fb5d1b59884824b5..8d88c31f397a263874f4a09d4c4f8f896c39accd 100644 (file)
@@ -1,4 +1,4 @@
-\version "1.0.20";
+\version "1.0.21";
 
 \score{
        \notes \relative c {
index c6b011f481f04b8468bbe7127dd4c63f8e5e6eb7..dd65dc0756a14dd81a2d64c920f1de8377cf7642 100644 (file)
@@ -7,7 +7,7 @@ description = "This file tests the Feta music font";
 % "(Feta definitively is not an abbreviation of Font-En-TjA)";
 }
 
-\version "1.0.20";
+\version "1.0.21";
 
 \include "font-body.ly"
 \score{
index 6a5c020a00b20d1b608322fb554b4f0ed2ac9938..6701a291be5c1d0d39589acebd02750fe0b8619e 100644 (file)
@@ -7,7 +7,7 @@ description = "This file tests the Feta music font";
 % "(Feta definitively is not an abbreviation of Font-En-TjA)";
 }
 
-\version "1.0.20";
+\version "1.0.21";
 \include "paper16.ly"
 \include "font-body.ly"
 
index c83061d51963eb3722a5d06c56851e1a8454729e..d342c427eafab2c10c574c5d1bf2a660c2b4b6bc 100644 (file)
@@ -17,5 +17,5 @@ TestedFeatures =
            gourlay_maxmeasures =5.;
        }
 }
-\version "1.0.20"; 
+\version "1.0.21"; 
 
index ab4414da7012f2313d8d518994c5b1b689afcd5d..f7321e04a4ef93888a52d117b9422d3dfb1b71ff 100644 (file)
@@ -4,7 +4,7 @@ copyright =      "PD";
 TestedFeatures =        "This file tests some nasty Gourlay spacings";
 }
 
-\version "1.0.20";
+\version "1.0.21";
 
 %{
 
index 0261511d6eb317cdba0432ff97c3322d1dcc37b1..f74f3b14b590c43005551a287d4905c20a410f2d 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "1.0.20";
+\version "1.0.21";
 
 \score{
        <
index 5f2ebd04e284c9c68aa9885e4da075d3c40a55cd..58a1366b38ee05e21eaa2a39b8c13d098cb3662f 100644 (file)
@@ -1,4 +1,4 @@
-\version "1.0.20";
+\version "1.0.21";
 
 toeter_i = \notes\relative c <{
                \property Staff.instrument = "Toeters"
index 202b65df42c4c03d21d54197e9546a44b0f62ae3..73bd6aec3bd6d9c1c9635b2e835ff10da9725a93 100644 (file)
@@ -6,7 +6,7 @@
    /Mats B
 %}
 
-\version "1.0.20";
+\version "1.0.21";
 
 incipit = \notes\relative c'{
   <b1 fis' b d>
index e35be1b04036bd719f7dfdc1a3ce23fce70d5061..0f0c3c7ec1e53f74e43bb989d392db4d0cf8ff11 100644 (file)
@@ -1,4 +1,4 @@
-\version "1.0.20";
+\version "1.0.21";
 
 %{
 test key itemv breaking
index d595ebe82ae6705b3140de4f2f3551856085c5a3..37de7fa18d696e7b5c46ef5eb69c1a05b4f002fa 100644 (file)
@@ -1,4 +1,4 @@
-\version "1.0.20";
+\version "1.0.21";
 \score{
        \notes\relative c'{
                [c16 \stemdown c'' \stemboth c,, d]
index 5dd835a96d0be12341823e0e81d575d8a5c53d93..dae0e41dddecbe2a264b93f6662f7d38d778f00f 100644 (file)
@@ -1,4 +1,4 @@
-\version "1.0.20";
+\version "1.0.21";
 
 global = \notes {
   s1 | \mark "A";
index b49a9e028ebce4990952b9e268c8d1a8f8fa8936..90f508f2fb8a15fbee83f589f52ae4d9c29e657a 100644 (file)
@@ -11,5 +11,5 @@ bla = \notes {
        >
        \paper { Gourlay_maxmeaures = 2.; }
 }
-\version "1.0.20"; 
+\version "1.0.21"; 
 
index 2b30a3e8112bef19075885478af35b82cee4a3e8..aaf3fd8c68a51350dbf777eb4b2a240f43e3ca3e 100644 (file)
@@ -1,4 +1,4 @@
-\version "1.0.20";
+\version "1.0.21";
 
 voice_one = \notes\transpose c''{  \stemup
        R1 * 2 | f'4-. r r2 | R1 * 3 |
index 852d062afeac666b0f435513c2f61959494b4e1a..3db8223a4bc75849aa1a723888d5300a4b00b811 100644 (file)
@@ -26,4 +26,4 @@ c4 c2 c8  c16 c16  c1
        
     }
 }
-\version "1.0.20"; 
+\version "1.0.21"; 
index 37d6c8ac296631231234f76931b98b0f94d647c2..b8652f05821f642f150e28433eec7f6cb071a75c 100644 (file)
@@ -1,4 +1,4 @@
-\version "1.0.20";
+\version "1.0.21";
 
 \score{
        \notes \transpose c''{
index 411d7beb9525db933c5ff9df5290ea67e01cbf5a..2887bd11eca85208e97e30602273d71a6aa403f9 100644 (file)
@@ -1,4 +1,4 @@
-\version "1.0.20";
+\version "1.0.21";
 
 m = \notes \relative c''{
 c1 | c2 c | c c | c c | c c | c c | c c | c c | 
index a43c1ed64b1b98f93d165fd5370a53cc2d17d66c..059cc24019f69ac04bcc30f5e83d67cb1e362851 100644 (file)
@@ -1,4 +1,4 @@
-\version "1.0.20";
+\version "1.0.21";
 
 \score {
 
index e509994d67f40ea2bd2e78011a6ade0a18aaef2d..607f1daf2bfb4c92412cedbff1ef858f9ae031d4 100644 (file)
@@ -34,4 +34,4 @@ restsII = \context Staff \notes {
        }
 }      
 
-\version "1.0.20"; 
+\version "1.0.21"; 
index a43bb3d02b5f835c53397e929b048cc1dbfca88e..4d5ab9466f308d61346db4435461badb852efbbc 100644 (file)
@@ -1,7 +1,7 @@
 
 
 
-\version "1.0.20";
+\version "1.0.21";
 
 onestaff =     \context Staff = foo\notes  {
                \property Staff.instr = instr
index e3317a331233ed7a6f230ec4afa61048acdc0544..d74f328c4bb6910254c820839741236dc9c09bf1 100644 (file)
@@ -5,7 +5,7 @@ TestedFeatures =         "This file tests Feta embedded slurs" +
         "(Feta definitively is not an abbreviation of Font-En-TjA)";
 }
 
-\version "1.0.20";
+\version "1.0.21";
 
 shortlong = \notes{
        c4()c( c c  |
@@ -52,7 +52,6 @@ over = \notes\transpose c'{
 }
 
 under = \notes\transpose c'{
-
        \stemdown 
        f'( \stemboth d d \stemdown )f'
        f'( \stemboth c c \stemdown )f'
@@ -77,7 +76,6 @@ under = \notes\transpose c'{
 }
 
 eccentric = \notes\transpose c'{
-
        \stemup
        \times 4/7 { f( a' f f f f )f } |
        \times 4/7 { f( f f f f a' )f } |
index 94b53b3560bb85af33ecec4cc31d1d3cfcaef84c..4814daaac70109d51fe1d2cab4c973fd14c1b4ef 100644 (file)
@@ -1,4 +1,4 @@
-\version "1.0.20";
+\version "1.0.21";
 
 % bug
 % excentric slur can't handle this ...
index 7fda627819ad72070834ce2c185d1b51a9ea2259..313d75a777de75aa8dea2d233290cb0c9117b6d1 100644 (file)
@@ -1,5 +1,5 @@
 % test damping
-\version "1.0.20";
+\version "1.0.21";
 
 \score{
        \notes\relative c'{
index 7fe0156d971ff07fd5325c6cd105bb6261c972fa..90d03844c9c3bb1ed5c27324300b0eb87fbb948a 100644 (file)
@@ -38,4 +38,4 @@
        }
 }
 
-\version "1.0.20"; 
+\version "1.0.21"; 
index 77a2194b79378fcd08a0ecd97de12b72f8d18418..13abcdd1a138ecf00ad7876900e2bc3227933c33 100644 (file)
@@ -1,4 +1,4 @@
-\version "1.0.20";
+\version "1.0.21";
 
 % urg, the direction of the slur gets swapped!
 \score{
index 78792b52f9905ca00ab0ec9ccec9b1824189c9ad..2bd66265724c512b9bb253bc5613f5c10411d873 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "1.0.20";
+\version "1.0.21";
 
 \score{
        \notes\transpose c'{
index 8ad2b838759651d61c5aa5da08de4ec6afa4ddbd..9f0f43243cc85cabff55a25d107f57ca56f954d3 100644 (file)
@@ -33,4 +33,4 @@ source = "Petits Preludes et Fugues.  Urtext. Editions Henry Lemoine, Paris.";
 }
 }
 
-\version "1.0.20"; 
+\version "1.0.21"; 
index 4d90e751920413b86b5049a2032ee1bcd0e86f32..cecb18c9d8029b486cbfe134fddeadbd66c71cf9 100644 (file)
@@ -6,7 +6,7 @@ copyright =      "public domain";
 TestedFeatures =        "This file tests various spacings";
 }
 
-\version "1.0.20";
+\version "1.0.21";
 
 multipart = \notes \relative c'{ 
     \context StaffGroup < 
index dd60a13a8b7ed2173861fdfafd10cec84272f7be..37d13ef68a32b85d911b5ce95508e35fdffec98f 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "1.0.20";
+\version "1.0.21";
 nt = \notes { c1 \break c1 c1 } 
 stuff = \notes \relative c'' <
   \context Staff = stone  { \nt }
index df215a6cd52336a427dd25418b7ff000bcdf5175..ca8e9dea33f5b663eed90fd4836ad253b00f128c 100644 (file)
@@ -1,6 +1,6 @@
 
        
-\version "1.0.20";
+\version "1.0.21";
 
 \score {
 
index 65e3d68065db1e6e74a986b6b35672d1eb7e31ed..ff92e5b0b3444ab638fbc9b649ca492caacbcd00 100644 (file)
@@ -18,4 +18,4 @@
 }
 
 
-\version "1.0.20"; 
+\version "1.0.21"; 
index 144f638fc917d17489ed76e12754e3f4496d9489..adf8d50c266deb1a94ccb65aa726820720c49603 100644 (file)
@@ -14,4 +14,4 @@
 >
 \paper { linewidth = -1.; }
 }
-\version "1.0.20"; 
+\version "1.0.21"; 
diff --git a/input/test/stem-spacing.sly b/input/test/stem-spacing.sly
new file mode 100644 (file)
index 0000000..0d92baf
--- /dev/null
@@ -0,0 +1,2 @@
+
+\time 12/4;  c''4 c c c  a f' f, a 
index 7804771d864317e22b7625666d60c40bcda38a9e..6e76092aad2ef2b5d73aa8029837d38fdbe65e18 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "1.0.20";
+\version "1.0.21";
 \score{
        \notes \transpose c'''{
                \stemup
index 978caa555586e869bab5e98d98a66bb5345f5399..a728939ef8afee5311fd5fea92f757a46a099a87 100644 (file)
@@ -8,7 +8,7 @@ of beams";
        
 }
 
-\version "1.0.20";
+\version "1.0.21";
 
 beamintervals = \notes{
                \time 7/4;
index 9cd65c31c113326951839d826b27b14fae71bb0b..6a0dc872ea0ab1b6782258c698b497df1d532770 100644 (file)
@@ -7,7 +7,7 @@ enteredby =     "Maarten Storm";
 instrument=    "Violoncello";
 }
 
-\version "1.0.20";
+\version "1.0.21";
 
 % this is an example of extreme dynamics
 
index 748e754b83e4b83b121d041852f9cc28b395a0c4..57dd37d8213bdbfd06a8a2dab188720ad2210e75 100644 (file)
@@ -7,7 +7,7 @@
 % the thumb-script is used in cello music to indicate a note that should
 % be played with your thumb. 
 
-\version "1.0.20";
+\version "1.0.21";
 
 \score { \notes \relative c'' {
                [<a8_\thumb a'8-3(> <)b_\thumb b'-3>
index 1307452524870abaa7add3a3bc188102a0f9797a..8df3c3c5a3cff7c6b6cf824fbabe28402eb47bdf 100644 (file)
@@ -1,4 +1,4 @@
-\version "1.0.20";
+\version "1.0.21";
 
 
 %  middle tie is wrong
index 61944f402602823913b39e5bfd75932c4082ead1..61f4c512a3610a375e77220d2dd495c88e24d71a 100644 (file)
@@ -1,4 +1,4 @@
-\version "1.0.20";
+\version "1.0.21";
 
 tie = \notes\transpose c''{
 
index 91fa42cbd3bc52ae7affdafc931070271807a6bd..6058ef4d0acf1e0784f85716342d5949c314b14a 100644 (file)
@@ -10,7 +10,7 @@ source =      "urtext";
 instrument=    "Instrument";
 }
 
-\version "1.0.20";
+\version "1.0.21";
 
 \score{
        \notes
index 2271026b718c08562d2a5a0d4b8c018330782260..72efd42818f1b20d520f7b173353db8681f1c20f 100644 (file)
@@ -22,7 +22,7 @@ copyright =    "public domain";
 }
 
 
-\version "1.0.20";
+\version "1.0.21";
 
 vOne = \notes \relative c''{
         \clef"violin";
index aaa005aeec5c2cecb12fc96294710b0ac0936297..06b9dc8458ded388de7bc55fe753d91675f087f4 100644 (file)
@@ -8,4 +8,4 @@
                 }
 }
 
-\version "1.0.20"; 
+\version "1.0.21"; 
index 69ba825f68c372df8bcad5c7230c6d533f2008c6..0acf70455bd035e0ee095d36651fa5419365197f 100644 (file)
@@ -8,4 +8,4 @@
 {\voicetwo c}>
 
 
-\version "1.0.20"; 
+\version "1.0.21"; 
index 52e286e1c2c515906fcdb3e82300df72302cadcc..8295ae22efb37a9bd7003f8a1875dd1ab34d0b60 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "1.0.20";
+\version "1.0.21";
 
 \score {
 \notes <
index ec9caaf3717e2e9032a064eb77cd8f7f4be97a80..f6b98c107284d0e034163811eebe37000fe6aabe 100644 (file)
@@ -15,4 +15,4 @@
        }
 }
 
-\version "1.0.20"; 
+\version "1.0.21"; 
index c9371664a4947948344bf149afebb0ce418687be..5b38a572b050460a02f4d1d3dcf040b473ed7aed 100644 (file)
@@ -21,4 +21,4 @@ What's supposed to be demonstrated here?
        }
 }
 
-\version "1.0.20"; 
+\version "1.0.21"; 
index b0779db1939c99b21d34bd33bd23e0d97e84f2b3..e513f364cfe1d8f54b4e58b82a600474676eeb7d 100644 (file)
@@ -5,7 +5,7 @@ TestedFeatures =         "This file tests trills" +
         "(Feta definitively is not an abbreviation of Font-En-TjA)";
 }
 
-\version "1.0.20";
+\version "1.0.21";
 
 \score{
        \notes{ 
index 3c8f78452a8379c8a2fc196ac503e4ccb85d8718..ac4f39243c2d5da43b75e1a8c381484c64c97e7d 100644 (file)
@@ -43,7 +43,7 @@ Bar::get_bar_size () const
 Molecule*
 Bar::do_brew_molecule_p () const
 {    
-  Molecule *output = new Molecule (lookup_l ()->bar (type_str_, get_bar_size ()));
+  Molecule *output = new Molecule (lookup_l ()->bar (type_str_, get_bar_size (), paper_l ()));
   
   return output;
 }
index 131294f2007cd1d6cd5f8a7db08a84af3d26d309..afe439cd5d9d2d6a552ebd93daf6cb92dbbb4fea 100644 (file)
@@ -162,10 +162,10 @@ Break_algorithm::solve () const
   Array<Column_x_positions> h= do_solve ();
 
   if (approx_stats_.count_i_)
-    *mlog << '\n' << _f ("approximated: %s", approx_stats_.str ()) << endl;
+    *mlog << '\n' << _f ("approximated %s", approx_stats_.str ()) << endl;
   if (exact_stats_.count_i_)
-    *mlog << _f ("calculated exactly: %s", exact_stats_.str ()) << endl;
-  *mlog << _f ("time: %.2f seconds",  timer.read ()) << endl;
+    *mlog << _f ("calculated %s exactly", exact_stats_.str ()) << endl;
+  *mlog << _f ("elapsed time %.2f seconds",  timer.read ()) << endl;
 
   return h;
 }
index 1b1f1be105dce769a71d0232ffe80bcf34f14a3e..1ddff7d2f7cc3f880b3edcc1dc967453e8b52dbf 100644 (file)
@@ -23,145 +23,131 @@ Collision::add_column (Note_column* ncol_l)
   add_element (ncol_l);
   add_dependency (ncol_l);
 }
-/**
-  should derive of Array.
- */
-static
-int idx (int dir, bool h_shift_b)
-{
-  assert (abs (dir) == 1);
-  int j = dir > 0 ? 0 : 3;
-  if (h_shift_b)
-    j += dir;
-  return j;
-}
+
 
 /** This complicated routine moves note columns around horizontally to
   ensure that notes don't clash.
 
   This should be done better, probably.
 
-  This routine is dedicated to Stine Randmael :-)
-
+  TODO: forced hshift
+  
   */
 void
 Collision::do_pre_processing()
 {
-  if (clash_l_arr_.size() <= 1)
-    return;
-
-  /*
-    [stem up, stem up shifted, stem down shifted, stem down]
-  */ 
-  Array<Note_column*> clash_group_arr_a[4]; // TODO: use drul.
-
+  Drul_array<Link_array<Note_column> > clash_groups;
+  Drul_array<Array<int> > shifts;
+  
   for (int i=0; i < clash_l_arr_.size(); i++)
     {
-      Note_column* c_l = clash_l_arr_[i];
-      Direction d = c_l->dir ();
-      if (!d)
-       {
-         warning (_ ("No stem direction set. Ignoring column in clash."));
-         continue;
-       }
-
-      SCM shift = c_l->remove_elt_property (horizontal_shift_scm_sym);
-      bool shift_b  = (shift != SCM_BOOL_F);
-      clash_group_arr_a[idx (d, shift_b)].push (c_l);
+      clash_groups[clash_l_arr_[i]->dir ()].push (clash_l_arr_[i]);
     }
 
-
-  for (int j=0; j < 4; j++)
-    {
-      if (clash_group_arr_a[j].size() > 1)
-       {
-         warning (_ ("Too many clashing notecolumns. Ignoring them."));
-         return;
-       }
-    }
+  
   Direction d = UP;
   do
     {
-      if (!clash_group_arr_a[idx (d, false)].size())
-       {
-         clash_group_arr_a[idx (d,  false)] = clash_group_arr_a[idx (d, true)];
-         clash_group_arr_a[idx (d, true)].clear();
-       }
-    }
-  while (flip (&d) != UP);
-
+      Array<int> & shift (shifts[d]);
+      Link_array<Note_column> & clashes (clash_groups[d]);
 
-  Interval_t<int> y_extent[4];
-  Note_column * col_l_a[4];
-  Real x_off [4];
+      clashes.sort (Note_column::shift_compare);
 
-  for (int j =0 ; j < 4; j++)
-    {
-      if (clash_group_arr_a[j].size())
-       col_l_a[j] = clash_group_arr_a[j][0];
-      else
-       col_l_a[j] = 0;
+      for (int i=0; i < clashes.size (); i++)
+       {
+         SCM sh
+           = clashes[i]->remove_elt_property (horizontal_shift_scm_sym);
 
-      if (col_l_a[j])
+         if (sh == SCM_BOOL_F)
+           shift.push (0);
+         else
+           shift.push (gh_scm2int (SCM_CDR (sh)));
+       }
+      
+      for (int i=1; i < shift.size (); i++)
        {
-         y_extent[j] = col_l_a[j]->head_positions_interval();
+         if (shift[i-1] == shift[i])
+           {
+             warning (_ ("Too many clashing notecolumns. Ignoring them."));
+             return;
+           }
        }
-
-
-      x_off [j] = 0.0;
     }
+  while ((flip (&d))!= UP);
 
+  Drul_array< Array < Slice > > extents;
+  Drul_array< Array < Real > > offsets;
+  d = UP;
   do
     {
-      x_off[idx (d, true)] = d*0.5;
+      for (int i=0; i < clash_groups[d].size (); i++)
+       {
+         Slice s(clash_groups[d][i]->head_positions_interval ());
+         s[LEFT] --;
+         s[RIGHT]++;
+         extents[d].push (s);
+         offsets[d].push (d * 0.5 * i);
+       }
     }
-  while (flip (&d) != UP);
-
-
-  // y_extent: smallest y-pos noteball interval containing all balls
-  // 4 (0..3) groups: stem up/down; shift on/off;
-  Interval_t<int> middle (y_extent[idx (-1,0)][BIGGER],
-                         y_extent[idx (1,0)][SMALLER]);
-  Interval_t<int> open_middle (y_extent[idx (-1,0)][BIGGER]+1, y_extent[idx (1,0)][SMALLER]-1);
+  while ((flip (&d))!= UP);
+  
   do
     {
-      if (!open_middle.contains_b (y_extent[idx (d,true)]))
-       x_off[idx (d, true)] = d *1.0 ;
-    } while ((d *= -1) != 1);
-
+      for (int i=1; i < clash_groups[d].size (); i++)
+       {
+         Slice prev =extents[d][i-1];
+         prev.intersect (extents[d][i]);
+         if (prev.length ()> 0 ||
+             (extents[-d].size () && d * (extents[d][i][-d] - extents[-d][0][d]) < 0))
+           for (int j = i; j <  clash_groups[d].size (); j++)
+             offsets[d][j] += d * 0.5;
+       }
+    }  
+  while ((flip (&d))!= UP);
 
-  if (!middle.empty_b()
-      && middle.length() < 2 && col_l_a[idx (1,0)] && col_l_a[idx (-1,0)])
+  /*
+    if the up and down version are close, and can not be merged, move
+    all of them again. */
+  if (extents[UP].size () && extents[DOWN].size ())
     {
-      // reproduction of bugfix at 3am ?
-      Note_head * nu_l= col_l_a[idx (1,0)]->head_l_arr_[0];
-      Note_head * nd_l = col_l_a[idx (-1,0)]->head_l_arr_.top();
-      if (! (nu_l->balltype_i_ == nd_l->balltype_i_
-            && nu_l->dots_i_ == nd_l->dots_i_  && middle.length() == 0))
-       {
+      Note_column *cu_l =clash_groups[UP][0];
+      Note_column *cd_l =clash_groups[DOWN][0];
+      Note_head * nu_l= cu_l->head_l_arr_[0];
+      Note_head * nd_l = cd_l->head_l_arr_.top();
+      int downpos =    cd_l->head_positions_interval ()[SMALLER];
+      int uppos =      cu_l->head_positions_interval ()[BIGGER];      
+      
+      bool merge  =
+       downpos == uppos
+       && nu_l->balltype_i_ == nd_l->balltype_i_
+       && nu_l->dots_i_ == nd_l->dots_i_;
+
+      /*
+       notes are close, but can not be merged.  Shift
+       */
+      if (abs(uppos - downpos) < 2 && !merge)
          do
-           {
-             x_off[idx (d, false)] -= d*0.5;
-             x_off[idx (d, true)] -= d*0.5;
-           }
-         while (flip (&d) != UP);
-       }
+         {
+           for (int i=0; i < clash_groups[d].size (); i++)
+             {
+               offsets[d][i] -= d * 0.5;
+             }
+         }
+         while ((flip (&d))!= UP);
     }
 
   Real wid_f = paper_l ()->note_width ();
-  for (int j=0; j < 4; j++)
+  do
     {
-      if (col_l_a[j])
+      for (int i=0; i < clash_groups[d].size (); i++)
        {
-         Offset o (x_off[j] * wid_f, 0);
-         col_l_a[j]->translate (o);
+         clash_groups[d][i]->translate_axis (offsets[d][i]*wid_f, X_AXIS);
        }
     }
+  while (flip (&d) != UP);
 }
 
 
-
-
 void
 Collision::do_substitute_element_pointer (Score_element*o_l,Score_element*n_l)
 {
index b499af90b69e42b964283ac9660e1f50368ef561..1dbe94e3e45d3626ed50239c9f2e4c535616c94f 100644 (file)
@@ -52,7 +52,9 @@ Crescendo::get_symbol () const
   
 
   bool continued = broken[Direction (-grow_dir_)];
-  return Molecule (lookup_l ()->hairpin (w_dim, grow_dir_ < 0, continued));
+  Real height = paper_l()->staffheight_f () / 6;
+
+  return Molecule (lookup_l ()->hairpin (w_dim, height, grow_dir_ < 0, continued));
 }
 
 Molecule*
index d08a76800b270ba604ec917ee57bfff790a36579..5be368383134eade5e91ad465374d70aeb3a0de1 100644 (file)
@@ -16,6 +16,7 @@
 #include "g-script.hh"
 #include "lookup.hh"
 #include "g-staff-side.hh"
+#include "paper-def.hh"
 
 G_script::G_script ()
 {
@@ -46,7 +47,7 @@ G_script::get_molecule(Direction d) const
     }
   else if (key == ly_symbol ("accordion"))
     {
-      return lookup_l ()->accordion (SCM_CDR(s));
+      return lookup_l ()->accordion (SCM_CDR(s), paper_l()->get_realvar(interline_scm_sym));
     }
 
   else assert (false);
index 6f54c2ad0a427d3b249f39bc417f622b1ec47b4d..6578cf8bb4658be8585c2785e51d1bddeb0f95e7 100644 (file)
@@ -16,7 +16,7 @@
 Molecule*
 G_text_item::do_brew_molecule_p () const
 {
-  Molecule a= paper_l ()->lookup_l(0)->text (style_str_,text_str_); 
+  Molecule a= paper_l ()->lookup_l(0)->text (style_str_,text_str_, paper_l ()); 
 
   return new Molecule (a);
 }
index a4f60b00e16f79b4387d31535bc28b382fe5061e..e1b827e5237ca2c3c426d0ed5ba27910e0db8ce1 100644 (file)
@@ -17,6 +17,7 @@
 #include "box.hh"
 
 /** handy interface to symbol table
+    TODO: move this into GUILE?
  */
 class Lookup
 {
@@ -24,11 +25,11 @@ public:
   Lookup ();
   Lookup (Lookup const&);
 
-  Molecule simple_bar (String s, Real w) const;
+  Molecule simple_bar (String s, Real w, Paper_def*) const;
   Molecule accidental (int, bool cautionary) const;
   Molecule afm_find (String, bool warn=true) const;
   Molecule notehead  (int, String) const;
-  Molecule bar (String, Real height) const;
+  Molecule bar (String, Real height, Paper_def*) const;
   Molecule beam (Real, Real, Real) const;
   Molecule clef (String) const;
   Molecule dashed_slur (Array<Offset> controls, Real thick, Real dash) const;
@@ -37,20 +38,17 @@ public:
   Molecule fill (Box b) const;
   Molecule filledbox (Box b) const;  
   Molecule flag (int, Direction) const;
-  Molecule hairpin (Real width, bool decresc, bool continued) const;
-  Molecule plet (Real dy, Real dx, Direction dir) const;
+  Molecule hairpin (Real width, Real height, bool decresc, bool continued) const;
+  Molecule tuplet_bracket (Real dy, Real dx, Real thick,Real interline, Direction dir) const;
   Molecule rest (int, bool outside, String) const;
-  Molecule accordion (SCM arg) const;
-  Molecule stem (Real y1_pos, Real y2_pos) const;
+  Molecule accordion (SCM arg, Real interline_f) const;
   Molecule slur (Array<Offset> controls) const;
-  Molecule text (String style, String text) const;
+  Molecule text (String style, String text, Paper_def*) const;
   Molecule staff_brace (Real dy) const;
   Molecule staff_bracket (Real dy) const;
-  Molecule volta (Real w, bool last_b) const;
-  Molecule special_time_signature (String, int,int) const;
-  Molecule time_signature (int n,int d) const;
-
-  Paper_def * paper_l_;
+  Molecule volta (Real w, Real h, Real il, bool last_b) const;
+  Molecule special_time_signature (String, int,int, Paper_def*) const;
+  Molecule time_signature (int n,int d, Paper_def*) const;
 
   String font_name_;
   Adobe_font_metric * afm_l_;
index 3c35d42e95bcee2fa35d30ec305c394a62577830..489bcc98e92a548bbfc761b8e3c52b966f0435f5 100644 (file)
@@ -30,6 +30,7 @@ DECLARE_LY_SYMBOL(dashed);
 DECLARE_LY_SYMBOL(extremal);
 DECLARE_LY_SYMBOL(extra_space);
 DECLARE_LY_SYMBOL(dir_forced);
+DECLARE_LY_SYMBOL(dir_list);
 DECLARE_LY_SYMBOL(extender_height);
 DECLARE_LY_SYMBOL(filledbox);
 DECLARE_LY_SYMBOL(fontsize);
@@ -61,6 +62,7 @@ DECLARE_LY_SYMBOL(tuplet_thick);
 DECLARE_LY_SYMBOL(tuplet_visibility);
 DECLARE_LY_SYMBOL(visibility_lambda);
 DECLARE_LY_SYMBOL(volta);
+DECLARE_LY_SYMBOL(void);
 DECLARE_LY_SYMBOL(volta_thick);
 
 
index b8d17a5708dab54d80dd38cb335a863c779cc481..e8fe19a0b170665eb7620790edc395a5764e5dbd 100644 (file)
@@ -21,6 +21,9 @@ protected:
   virtual void do_print () const;
   virtual void do_substitute_element_pointer (Score_element*,Score_element*);
 public:
+
+  static int shift_compare (Note_column *const &, Note_column*const&);
+  
   /** The relative position of the "voice" containing this
     chord. Normally this would be the same as the stem direction,
 
index e3a5174f945c99a43dcfde2063c6754d091cdd2b..339b8940886f9e29b89d85f66701b5e26c0af608 100644 (file)
@@ -14,6 +14,7 @@
 #include "parray.hh"
 #include "lily-proto.hh"
 #include "music-output.hh"
+#include "lily-guile.hh"
 
 /** all stuff which goes onto paper. notes, signs, symbols in a score
      #Paper_score# contains the items, the columns.
@@ -27,10 +28,9 @@ class Paper_score : public Music_output
 
   /// other elements
   Link_array<Score_element> elem_p_arr_;
-
-  Link_array<Score_element> to_delete_arr_;
   Link_array<Score_element> break_helpers_arr_;
 
+  SCM protected_scms_;
 public:
   Paper_def *paper_l_;
 
@@ -62,21 +62,13 @@ public:
   /// add a Spanner
   void typeset_unbroken_spanner (Spanner*);
   
-  void schedule_for_delete (Score_element*);
     
   virtual ~Paper_score();
 protected:
-
-  
     /* MAIN ROUTINES */
   virtual void process();
 
 private:
-
-  
-  Link_array<Score_element> remove_line (Line_of_score*);
-  Link_array<Score_element> remove_break_helpers ();
-
   /// before calc_breaking
   void preprocess();
 
index 719cc16d8ed2938e517f3d08e47c1e834809d273..2a0a7805eff19ad5e42a1055bdf7db684e571f45 100644 (file)
@@ -11,7 +11,6 @@
 #include "virtual-methods.hh"
 #include "directed-graph.hh"
 #include "graphical-element.hh"
-#include "protected-scm.hh"
 #include "lily-guile.hh"
 
 
@@ -37,7 +36,16 @@ Boolean (true iff defined)
 
 */
 class Score_element : public virtual Graphical_element {
-  Protected_scm element_property_alist_;
+
+  friend class Paper_score;
+  /**
+     properties specific for this element. Destructor will not call
+     scm_unprotect, so as to allow more flexible GC arrangements.  The
+     real alist is in (cdr element_property_alist_), to reduce the
+     need for more scm_protect calls.
+
+  */
+  SCM element_property_alist_;
   Link_array<Score_element> dependency_arr_;
   /**
      The lookup, determined by the font size. Cache this value.
index b69209d9061cb133902d0798301eeaf1ecb8f44d..0b8b10586acb0c31c5f77151f84a11992697ec76 100644 (file)
@@ -22,7 +22,10 @@ public:
   int col_count () const;
 protected:
   virtual  Array<Spring> get_springs () const;
-  
+
+  Real stem_dir_correction (Score_column*,Score_column*)  const;
+  Real default_bar_spacing (Score_column*,Score_column*,Moment)  const;
+  Real note_spacing (Score_column*,Score_column*,Moment)  const;  
 };
 
 #endif /* SPACING_SPANNER_HH */
index f0e759afaca4e3a8ef4c1eb9192e798f5aaad8d9..04dd3f1ce1ab197c2978cbaa80018da0a4fbfa8f 100644 (file)
@@ -104,5 +104,7 @@ protected:
   virtual void do_pre_processing();
   virtual Interval do_width() const;
   virtual Molecule* do_brew_molecule_p() const;
+
+  void set_spacing_hints () ;
 };
 #endif
index b249a1b9a3a511af9b87956722b37a1023f6e8a2..26e55b17706db6149843b0af3411d52d61959419 100644 (file)
@@ -92,7 +92,7 @@ Multi_measure_rest::do_brew_molecule_p () const
     }
   else if (measures_i_ > 1)
     {
-      Molecule s ( lookup_l ()->text ("number", to_str (measures_i_)));
+      Molecule s ( lookup_l ()->text ("number", to_str (measures_i_), paper_l ()));
 
       s.translate_axis (3.0 * interline_f, Y_AXIS);
       mol_p->add_molecule (s);
index 26a33eb5cd28c76dab6d2c329f270371eb7d2bcb..5f63501a47f72bb354feff3ee9fa94cb9c991b6b 100644 (file)
@@ -20,6 +20,17 @@ Note_column::rest_b () const
   return rest_l_arr_.size ();
 }
 
+int
+Note_column::shift_compare (Note_column *const &p1, Note_column*const&p2)
+{
+  SCM s1 = p1->get_elt_property (horizontal_shift_scm_sym);
+  SCM s2 = p2->get_elt_property (horizontal_shift_scm_sym);
+
+  int h1 = (s1 == SCM_BOOL_F) ? 0 : gh_scm2int (SCM_CDR(s1));
+  int h2 = (s2 == SCM_BOOL_F) ? 0 : gh_scm2int (SCM_CDR(s2));
+  return h1 - h2;
+}
+
 Note_column::Note_column()
 {
   set_axes (X_AXIS,X_AXIS);
@@ -32,18 +43,17 @@ Note_column::sort()
   head_l_arr_.sort (Note_head::compare);
 }
   
-Interval_t<int>
+Slice
 Note_column::head_positions_interval() const
 {
-  ((Note_column*)this)->sort();
-  Interval_t<int>  iv;
+  Slice  iv;
 
   iv.set_empty ();
-
-  if (head_l_arr_.size ())
-    iv = Interval_t<int>(head_l_arr_[0]->position_i_, 
-                        head_l_arr_.top()->position_i_);
-  
+  for (int i=0; i <head_l_arr_.size ();i ++)
+    {
+      int j = head_l_arr_[i]->position_i_;
+      iv.unite (Slice (j,j));
+    }
   return iv;
 }
 
index 4edfd1b3e9e8de9bd7495f27540d32178c4eb275..c48cbddce0683d0ae029dfe92bcbaacb71be01c0 100644 (file)
@@ -25,6 +25,7 @@
 
 Paper_score::Paper_score ()
 {
+  protected_scms_ = scm_protect_object (gh_cons (SCM_BOOL_T, SCM_EOL));
   paper_l_ =0;
   outputter_l_ =0;
   Line_of_score * line_p = new Line_of_score;
@@ -45,6 +46,8 @@ Paper_score::~Paper_score ()
     delete span_p_arr_[i];
   for (int i=elem_p_arr_.size (); --i >=0 ; )
     delete elem_p_arr_[i];
+
+  scm_unprotect_object (protected_scms_);
 }
 
 void
@@ -53,7 +56,11 @@ Paper_score::typeset_element (Score_element * elem_p)
   elem_p_arr_.push (elem_p);
   elem_p->pscore_l_ = this;
 
-
+  // take over protection.
+  SCM_CDR(protected_scms_) = gh_cons (elem_p->element_property_alist_,
+                                     SCM_CDR (protected_scms_));
+  scm_unprotect_object (elem_p->element_property_alist_);
+  
   SCM p =  elem_p->remove_elt_property (break_helper_only_scm_sym);
   if (p != SCM_BOOL_F)
     break_helpers_arr_.push (elem_p);
@@ -137,44 +144,6 @@ Paper_score::calc_breaking ()
 
 
 
-/*
-  not clean.  Should update elem_p_arr_ and span_p_arr_.  That would
-  also repair the stats.
-
-  This may be done efficiently by first sorting the arrays.  */
-void
-delete_array_contents (Link_array<Score_element> &to_remove, Dictionary<int> &type_stats)
-{
-  for (int i=0; i < to_remove.size (); i++)
-    {
-      Score_element * e = to_remove[i];
-      String nm = e->name();
-      if (type_stats.elem_b (nm))
-       type_stats[nm] ++;
-      else
-       type_stats[nm] = 1;
-
-      if (dynamic_cast<Item*> (e))
-       type_stats["Item"] ++;
-      else if (dynamic_cast<Spanner*>(e))
-       type_stats["Spanner"] ++;
-      type_stats["Total"] ++;
-      /*
-       */
-      
- //      delete e; //TODO!
-    }
-
-  to_remove.clear ();
-  to_remove.tighten_maxsize ();
-}
-
-void
-Paper_score::schedule_for_delete (Score_element*e)
-{
-  to_delete_arr_.push (e);
-}
-
 void
 Paper_score::process ()
 {
@@ -194,8 +163,6 @@ Paper_score::process ()
   Array<Column_x_positions> breaking = calc_breaking ();
 
 
-  delete_array_contents (break_helpers_arr_, type_stats);
-  
   Paper_stream* paper_stream_p = paper_l_->paper_stream_p ();
   outputter_l_ = paper_l_->paper_outputter_p (paper_stream_p, header_l_, origin_str_);
 
@@ -226,8 +193,6 @@ Paper_score::process ()
        *mlog << '(' << elem_p_arr_.size () + span_p_arr_.size () << ')';
       
       *mlog << ']' << flush;
-      
-      delete_array_contents (to_delete_arr_, type_stats);
      }
   
   // huh?
index e420ed6a479912e1fee3911dbf6316188f5d1b70..4cd2101032181b4a57994f42f9fbd36b22d04986 100644 (file)
@@ -49,7 +49,6 @@ Paper_def::Paper_def (Paper_def const&s)
   for (Hash_table_iter<int, Lookup*> ai(*s.lookup_p_tab_p_); ai.ok (); ai++)
     {
       Lookup * l = new Lookup (*ai.val ());
-      l->paper_l_ = this;
       set_lookup (ai.key(), l);
     }
 }
@@ -165,7 +164,6 @@ Paper_def::set_lookup (int i, Lookup*l)
     {
       delete lookup_p_tab_p_->elem (i);
     }
-  l ->paper_l_ = this;
   (*lookup_p_tab_p_)[i] = l;
 }
 
index edf2ee95579a1dd725ea80fc020447e0b4ae20b8..2bbb8cf18ce6e13d00a9d4a842625bc1843e981d 100644 (file)
@@ -55,7 +55,7 @@
 
 // mmm
 Mudela_version oldest_version ("1.0.20");
-Mudela_version version ("1.0.20");
+Mudela_version version ("1.0.21");
 
 void
 print_mudela_versions (ostream &os)
index 5483ff9ace026a385bee7646257e81806ee3836a..ed45fef5da3e22363cb5653d8313097c921a8a3c 100644 (file)
@@ -80,10 +80,12 @@ Rhythmic_column_engraver::do_pre_move_processing()
 {
   if (ncol_p_) 
     {
+      Scalar sh = get_property ("horizontalNoteShift", 0);
       // egcs
-      if (get_property ("hshift", 0).operator bool ())
+      if (sh.to_bool () && sh.isnum_b ())
        {
-         ncol_p_->set_elt_property (horizontal_shift_scm_sym, SCM_BOOL_T);
+         ncol_p_->set_elt_property (horizontal_shift_scm_sym,
+                                    gh_int2scm (int (sh)));
        }
 
       typeset_element (ncol_p_);
index f77f9c9e8c7d49f6d003da6fea0c45b6133fe845..3215b80930d5fc9b811c444133a4a56a9e9606c6 100644 (file)
@@ -43,7 +43,7 @@ Score_element::Score_element()
   lookup_l_ =0;
   status_i_ = 0;
   original_l_ = 0;
-  element_property_alist_ = SCM_EOL;
+  element_property_alist_ = scm_protect_object (gh_cons (gh_cons (void_scm_sym, SCM_BOOL_T) , SCM_EOL));
 }
 
 Score_element::Score_element (Score_element const&s)
@@ -51,7 +51,7 @@ Score_element::Score_element (Score_element const&s)
 {
   used_b_ = true;
   original_l_ =(Score_element*) &s;
-  element_property_alist_ = scm_list_copy (s.element_property_alist_);
+  element_property_alist_ = scm_protect_object (scm_list_copy (s.element_property_alist_));
   dependency_arr_ = s.dependency_arr_;
   output_p_ =0;
   status_i_ = s.status_i_;
@@ -94,15 +94,15 @@ SCM
 Score_element::remove_elt_property (SCM key)
 {
   SCM s = get_elt_property (key); 
-  element_property_alist_ =  scm_assq_remove_x (element_property_alist_, key);
+  SCM_CDR(element_property_alist_) =  scm_assq_remove_x (SCM_CDR (element_property_alist_), key);
   return s;
 }
 
 void
 Score_element::set_elt_property (SCM s, SCM v)
 {
-  element_property_alist_ =
-    scm_assoc_set_x (element_property_alist_, s, v);
+  SCM_CDR(element_property_alist_) =
+    scm_assoc_set_x (SCM_CDR (element_property_alist_), s, v);
 }
 
 Interval
@@ -221,8 +221,6 @@ Score_element::output_processing ()
   pscore_l_->outputter_l_->output_molecule (output_p_,
                                            o,
                                            classname(this));
-
-  pscore_l_->schedule_for_delete (this);
 }
 
 /*
@@ -307,9 +305,9 @@ Score_element::add_dependency (Score_element*e)
       e->used_b_ = true;
     }
   else
-    warning("Null dependency added");
-      
+    programming_error ("Null dependency added");
 }
+
 void
 Score_element::substitute_dependency (Score_element* old, Score_element* new_l)
 {
index 8cd17a52d8ce09918549b5621c0ebd92e3506056..250267faf94c51719b24c87602f77f3697851a9f 100644 (file)
@@ -231,13 +231,11 @@ Score_engraver::do_try_music (Music*r)
     {
       if (Break_req* b = dynamic_cast<Break_req *> (r))
        {
+         gotcha = true;
          if (b->penalty_i_ <= Break_req::DISALLOW)
            break_penalty_i_ = b->penalty_i_;
          else if (b->penalty_i_ >= Break_req::FORCE)
-           {
-             command_column_l_->break_penalty_i_ = b->penalty_i_;
-             gotcha = true;
-           }
+           command_column_l_->break_penalty_i_ = b->penalty_i_;
        }
     }
    return gotcha;
index 4979c7b5a3c0ebebd6a7c78e778b61ca48bb510f..9c77ccea57ae7905b9486842676974d9e5233064 100644 (file)
@@ -39,10 +39,6 @@ Spacing_spanner::scol (int i)const
   generate springs between columns.
 
 
-  TODO
-  
-  * Spacing should take optical effects into account
-  
   The algorithm is partly taken from :
 
   John S. Gourlay. ``Spacing a Line of Music,'' Technical Report
@@ -71,179 +67,185 @@ Spacing_spanner::do_measure (int col1, int col2) const
 
   Array<Spring> meas_springs;
 
-  /*
-    UGR GUR URG.  duplicate code for spacing generation.
-   */
   for (int i= col1; i < col2; i++)
     {
-      SCM hint = scol (i)->get_elt_property (extra_space_scm_sym);
-      if (hint != SCM_BOOL_F)
-       {
-         hint = SCM_CDR (hint);
-
-         Spring s;
-         s.item_l_drul_[LEFT] = scol (i);
-         s.item_l_drul_[RIGHT] = scol (i+1);
-         Real unbroken_dist =  gh_scm2double (SCM_CDR(hint));
+      Item * l = scol(i);
+      Item * r = scol(i+1);
+      Item * lb = l->find_prebroken_piece (RIGHT);
+      Item * rb = r->find_prebroken_piece (LEFT);      
 
-         s.distance_f_ = unbroken_dist;
-         s.strength_f_ = 2.0;
-         
+      Item* combinations[4][2]={{l,r}, {lb,r}, {l,rb},{lb,rb}};
 
-         meas_springs.push (s);
+      for (int i=0; i < 4; i++)
+       {
+         Score_column * lc = dynamic_cast<Score_column*> (combinations[i][0]);
+         Score_column *rc = dynamic_cast<Score_column*> (combinations[i][1]);
+         if (!lc || !rc)
+           continue;
 
+         Spring s;
+         s.item_l_drul_[LEFT] = lc;
+         s.item_l_drul_[RIGHT] = rc;
          
-         Item * l = scol(i)->find_prebroken_piece (RIGHT);
-         Item * r = scol(i+1)->find_prebroken_piece (LEFT);
-         if (l)
+         SCM hint = lc->get_elt_property (extra_space_scm_sym);
+         SCM next_hint = rc->get_elt_property (extra_space_scm_sym);
+       
+         if (hint != SCM_BOOL_F)
            {
-               Spring s;
-               s.item_l_drul_[LEFT] = l;
-               s.item_l_drul_[RIGHT] = scol (i+1);
-               hint = l->get_elt_property (extra_space_scm_sym);
-
-               if (hint == SCM_BOOL_F)
-                 {
-                   programming_error ("No postbreak breakable spacing hint set.");
-                   s.distance_f_= unbroken_dist;
-                 }
-               else
-                 s.distance_f_ =  gh_scm2double (SCM_CDDR(hint));
-
-               /*
-                 space around barlines should not stretch very much.
-                */
+             hint = SCM_CDDR (hint);
+             
+             s.distance_f_ = gh_scm2double (hint); 
+             if (!lc->musical_b ())
                s.strength_f_ = 2.0;
-               meas_springs.push (s);
            }
-
-         if (r)
+         else if (!lc->musical_b() && i+1 < col_count())
            {
-             Spring s;
-             s.item_l_drul_[LEFT] = scol (i);
-             s.item_l_drul_[RIGHT] = r;
-             s.distance_f_ =  unbroken_dist;
-             
-             /*
-               space around barlines should not stretch very much.
-                */
+             s.distance_f_ = default_bar_spacing (lc,rc,shortest);
              s.strength_f_ = 2.0;
-             meas_springs.push (s);
            }
-
-         if (l&&r)
+         else if (lc->musical_b())
            {
-             Spring s;
-             s.item_l_drul_[LEFT] = l;
-             s.item_l_drul_[RIGHT] = r;
+             s.distance_f_ = note_spacing (lc, rc, shortest);
              
-             hint = l->get_elt_property (extra_space_scm_sym);
-             if (hint == SCM_BOOL_F)
-               {
-                 programming_error ("No postbreak breakable spacing hint set.");
-                 s.distance_f_= unbroken_dist;
-               }
-             else
-               s.distance_f_ =  gh_scm2double (SCM_CDDR(hint));
-             
-             /*
-               space around barlines should not stretch very much.
-             */
-             s.strength_f_ = 2.0;
-             meas_springs.push (s);
-           }
-       }
-      else if (!scol (i)->musical_b() && i+1 < col_count())
-       {
-         Real symbol_distance = scol (i)->extent (X_AXIS)[RIGHT] ;
-         Real durational_distance = 0;
-         Moment delta_t =  scol (i+1)->when_mom () - scol (i)->when_mom () ;
-         /*
-           ugh should use shortest_playing distance
-         */
-         if (delta_t)
-           {
-             Real k=  paper_l()->arithmetic_constant (shortest);
-             durational_distance =  paper_l()->length_mom_to_dist (delta_t,k);
            }
-         symbol_distance += -scol (i+1)->extent(X_AXIS)[LEFT];
-
-         Spring s ;
-         s.item_l_drul_[LEFT] = scol (i);
-         s.item_l_drul_[RIGHT] = scol (i+1);
-         s.distance_f_ =  symbol_distance >? durational_distance;
-         meas_springs.push (s);
-
-         Item *l = s.item_l_drul_[LEFT]->find_prebroken_piece (RIGHT);
-         Item *r = s.item_l_drul_[RIGHT]->find_prebroken_piece (LEFT);
-         Spring sp_orig (s);
          
-         if (l)
+         if (next_hint != SCM_BOOL_F)
            {
-             s = sp_orig;
-             s.item_l_drul_[LEFT] =l ;
-             meas_springs.push (s);
+            next_hint = SCM_CADR(next_hint);
+            s.distance_f_ += gh_scm2double (next_hint);
            }
-
-         if (l && r)
+         else
            {
-             s = sp_orig;
-             s.item_l_drul_[RIGHT] = r;
-             s.item_l_drul_[LEFT] = l;
-             meas_springs.push (s);
+             Interval ext (rc->extent (X_AXIS));
+             Real correction =  ext.empty_b() ? 0.0 : - ext [LEFT];
+
+             /*
+               don't want to create too much extra space for accidentals
+              */
+             if (lc->musical_b () && rc->musical_b ())
+               correction /= 2.0;
+
+             s.distance_f_ += correction;
            }
          
+         meas_springs.push (s);        
        }
     }
 
-  for (int i=col1; i < col2; i++)
+  return meas_springs;
+}
+
+/**
+   Do something if breakable column has no spacing hints set.
+ */
+Real
+Spacing_spanner::default_bar_spacing (Score_column *lc, Score_column *rc, Moment shortest) const
+{
+  Real symbol_distance = lc->extent (X_AXIS)[RIGHT] ;
+  Real durational_distance = 0;
+  Moment delta_t =  rc->when_mom () - lc->when_mom () ;
+
+             /*
+               ugh should use shortest_playing distance
+             */
+  if (delta_t)
     {
-      if (scol (i)->musical_b())
-       {
-         Moment shortest_playing_len = scol(i)->shortest_playing_mom_;
-         if (! shortest_playing_len)
-           {
-             warning (_f ("can't find a ruling note at %s", 
-               scol (i)->when_mom ().str ()));
-             shortest_playing_len = 1;
-           }
-         if (! shortest)
-           {
-             warning (_f ("no minimum in measure at %s", 
-                     scol (i)->when_mom ().str ()));
-             shortest = 1;
-           }
-         Moment delta_t = scol (i+1)->when_mom () - scol (i)->when_mom ();
-         Real k=  paper_l()->arithmetic_constant(shortest);
-         Real dist = paper_l()->length_mom_to_dist (shortest_playing_len, k);
-         dist *= (double)(delta_t / shortest_playing_len);
+      Real k=  paper_l()->arithmetic_constant (shortest);
+      durational_distance =  paper_l()->length_mom_to_dist (delta_t,k);
+    }
 
+  return  symbol_distance >? durational_distance;
+}
 
-         Spring sp;
-         sp.distance_f_ =  dist;
-         sp.item_l_drul_[LEFT] = scol (i);
-         sp.item_l_drul_[RIGHT] = scol (i+1);
 
-         meas_springs.push (sp);
+Real
+Spacing_spanner::note_spacing (Score_column *lc, Score_column *rc, Moment shortest) const
+{
+  Moment shortest_playing_len = lc->shortest_playing_mom_;
+  if (! shortest_playing_len)
+    {
+      warning (_f ("can't find a ruling note at %s", 
+                  lc->when_mom ().str ()));
+      shortest_playing_len = 1;
+    }
+  if (! shortest)
+    {
+      warning (_f ("no minimum in measure at %s", 
+                  lc->when_mom ().str ()));
+      shortest = 1;
+    }
+  Moment delta_t = rc->when_mom () - lc->when_mom ();
+  Real k=  paper_l()->arithmetic_constant(shortest);
+  Real dist = paper_l()->length_mom_to_dist (shortest_playing_len, k);
+  dist *= (double)(delta_t / shortest_playing_len);
 
-         /*
-           UGH. TODO: more
-           advanced spacing here.
-          */
-         Spring sp_orig (sp);
+  dist += stem_dir_correction (lc,rc);
+  return dist;
+}
 
-         Item *r =  sp.item_l_drul_[RIGHT]->find_prebroken_piece (LEFT);
-         
-         if (r)
-           {
-             sp = sp_orig;
-             sp.item_l_drul_[RIGHT] =r ;
-             meas_springs.push (sp);
-           }
-       }
+
+/**
+   Correct for optical illusions. See [Wanske] p. 138. The combination
+   up-stem + down-stem should get extra space, the combination
+   down-stem + up-stem less.
+
+   This should be more advanced, since relative heights of the note
+   heads also influence required correction.
+
+   Also might not work correctly ico. multi voices or staff changing voices
+
+   TODO: lookup correction distances?  More advanced correction?
+   Possibly turn this off?
+
+   This routine reads the DIR_LIST property of both its L and R arguments.
+*/
+Real
+Spacing_spanner::stem_dir_correction (Score_column*l, Score_column*r) const
+{
+  SCM dl = l->get_elt_property (dir_list_scm_sym);
+  SCM dr = r->get_elt_property (dir_list_scm_sym);
+  if (dl == SCM_BOOL_F || dr == SCM_BOOL_F)
+    return 0.0;
+
+  dl = SCM_CDR (dl);
+  dr = SCM_CDR (dr);
+
+  if (scm_ilength (dl) != 1 && scm_ilength (dr) != 1)
+    return 0.;
+
+  dl = SCM_CAR(dl);
+  dr = SCM_CAR(dr);
+
+  assert (gh_number_p (dl) && gh_number_p(dr));
+  int d1 = gh_scm2int (dl);
+  int d2 = gh_scm2int (dr);
+
+  if (d1 == d2)
+    return 0.0;
+
+  bool err = false;
+  Real correction = 0.0;
+  Real ssc = paper_l ()->get_realvar(ly_symbol ("stemSpacingCorrection"));
+
+
+  if (d1 && d2)
+    {
+      if (d1 == 1 && d2 == -1)
+       correction = ssc;
+      else if (d1 == -1 && d2 == 1)
+       correction = -ssc;
+      else
+       err = true;
     }
-  return meas_springs;
+  
+  else
+    err = true;
+
+  if (err)
+    programming_error ("Stem directions not set correctly for optical correction");
+  return correction;
 }
+  
 
 Array<Spring>
 Spacing_spanner::get_springs () const
@@ -253,12 +255,14 @@ Spacing_spanner::get_springs () const
   for (int i=1; i < col_count (); i++)
     {
       if (scol (i)->breakable_b ())
-       {
-         springs.concat (do_measure (last_break, i));
-         last_break  = i;
-       }
+        {
+          springs.concat (do_measure (last_break, i));
+          last_break  = i;
+        }
     }
   return springs;
 }
 
 
+
+
index b9a435b4cc3e93b6116932d4ff0384790a6faaea..65b57f96205dd310f23fd64c48c0c1a2f6e641a0 100644 (file)
@@ -31,7 +31,7 @@ Span_bar::do_substitute_element_pointer (Score_element*o, Score_element*n)
 Interval
 Span_bar::do_width () const
 {
-  Molecule m = lookup_l ()->bar (type_str_, 40 PT);
+  Molecule m = lookup_l ()->bar (type_str_, 40 PT, paper_l ());
   
   return m.extent (X_AXIS);
 }
@@ -109,7 +109,7 @@ Span_bar::do_brew_molecule_p () const
   Molecule*output = new Molecule;
   if (!iv.empty_b())
     {
-      output->add_molecule (lookup_l ()->bar (type_str_, iv.length ()));
+      output->add_molecule (lookup_l ()->bar (type_str_, iv.length (), paper_l ()));
       output->translate_axis (iv.center (), Y_AXIS);
     }
   else
index df25b4ee332849088ebde7aac82b69f6306720ae..c9ecb2492e194a9e5d10ba246f5d3285aab1a558 100644 (file)
@@ -404,9 +404,15 @@ Spring_spacer::add_column (Paper_column  *col, bool fixed, Real fixpos)
       if (cols_[idx].pcol_l_ != cr.other_l_)
            continue;
       
-      
-      connect (idx, this_rank, cr.distance_f_,
-              cr.strength_f_ / cr.distance_f_);
+      Real d  = cr.distance_f_;
+      if (fabs (d) < EPS)
+       {
+         connect (idx, this_rank, 0.0, 10); // large strength. 
+         programming_error ("requesting zero distance.");
+       }
+      else
+       connect (idx, this_rank, cr.distance_f_,
+                cr.strength_f_ / cr.distance_f_);
     }
       
   cols_.push (c);
index 55b2036269b12ddfb95110d1d3709e0cef11c521..97fa1565cced98465ab47cd6a6c090b3a612963a 100644 (file)
@@ -244,6 +244,36 @@ Stem::do_pre_processing ()
       set_elt_property (transparent_scm_sym, SCM_BOOL_T);
     }
   set_empty (invisible_b ());
+  set_spacing_hints ();
+}
+
+
+
+/**
+   set stem directions for hinting the optical spacing correction.
+
+   Modifies DIR_LIST property of the Stem's Score_column
+
+   TODO: more advanced: supply height of noteheads as well, for more advanced spacing possibilities
+ */
+void
+Stem::set_spacing_hints () 
+{
+  if (!invisible_b ())
+    {
+      SCM scmdir  = gh_int2scm (dir_);
+      SCM dirlist = column_l ()->get_elt_property (dir_list_scm_sym);
+      if (dirlist == SCM_BOOL_F)
+       dirlist = SCM_EOL;
+      else
+       dirlist = SCM_CDR (dirlist);
+
+      if (scm_sloppy_memq (scmdir, dirlist) == SCM_EOL)
+       {
+         dirlist = gh_cons (scmdir, dirlist);
+         column_l ()->set_elt_property (dir_list_scm_sym, dirlist);
+       }
+    }
 }
 
 
@@ -280,8 +310,9 @@ Stem::do_brew_molecule_p () const
   
   if (!invisible_b ())
     {
-      Molecule ss =lookup_l ()->stem (stem_y[DOWN]*dy,
-                                    stem_y[UP]*dy);
+      Real stem_width = paper_l ()->get_var ("stemthickness");
+       Molecule ss =lookup_l ()->filledbox (Box (Interval (-stem_width/2, stem_width/2),
+                                                Interval (stem_y[DOWN]*dy, stem_y[UP]*dy)));
       mol_p->add_molecule (ss);
     }
 
index d5a2b727d8ae644104ae912db86ccfa2db55ec55..75bbaa2ee29dbe9ca1c73479f4d6cda762f71f22 100644 (file)
@@ -26,15 +26,15 @@ Time_signature::do_brew_molecule_p () const
       if (time_sig_type_str_[0]=='1')
        {
          Array<int> tmparr = args_;
-         return new Molecule( lookup_l ()->time_signature (args_[0], 0));
+         return new Molecule( lookup_l ()->time_signature (args_[0], 0, paper_l ()));
        }
       else
        {
-         return new Molecule( lookup_l ()-> special_time_signature (time_sig_type_str_ ,args_[0], args_[1]));
+         return new Molecule( lookup_l ()-> special_time_signature (time_sig_type_str_ ,args_[0], args_[1], paper_l ()));
        }
     }
   else
-    return new Molecule(lookup_l ()->time_signature (args_[0], args_[1]));
+    return new Molecule(lookup_l ()->time_signature (args_[0], args_[1],paper_l ()));
 }
 
 
index 1383acbb1d7e4219ed2261af39297a36a1f2ed21..3f76d659e1654b024abd491394cb5679154ac0b0 100644 (file)
@@ -16,6 +16,8 @@
 #include "tuplet-spanner.hh"
 #include "stem.hh"
 #include "note-column.hh"
+#include "dimensions.hh"
+
 
 Tuplet_spanner::Tuplet_spanner ()
 {
@@ -53,7 +55,7 @@ Tuplet_spanner::do_brew_molecule_p () const
     Real ncw = column_arr_.top ()->extent (X_AXIS).length ();
     Real w = extent (X_AXIS).length () + ncw;
     Molecule num (lookup_l ()->text ("italic",
-                                    number_str_));
+                                    number_str_, paper_l ()));
     num.align_to (X_AXIS, CENTER);
     num.translate_axis (w/2, X_AXIS);
     Real interline = paper_l ()->get_realvar (interline_scm_sym);
@@ -63,16 +65,11 @@ Tuplet_spanner::do_brew_molecule_p () const
     num.translate_axis (dir_ * interline, Y_AXIS);
        
     num.translate_axis (dy/2, Y_AXIS);
-
     
-    /*    if (beam_l_arr_.size () == 1 && !bracket_visibility)
-      {
-       num.translate_axis (dir_ * interline,  Y_AXIS);
-      }
-    */
+    Real thick = paper_l ()->get_realvar (tuplet_thick_scm_sym);
     if (bracket_visibility)      
       {
-       mol_p->add_molecule (lookup_l ()->plet (dy, w, dir_));
+       mol_p->add_molecule (lookup_l ()->tuplet_bracket (dy, w, thick, interline, dir_));
       }
 
     if (number_visibility)
index 39d220d4424128659e2deec284a429e0daa5a7f2..32c48b9687ad3260b81c115d005b54979d3f3ab0 100644 (file)
@@ -33,16 +33,16 @@ Volta_spanner::do_brew_molecule_p () const
   if (!column_arr_.size ())
     return mol_p;
 
-
-  Real internote_f = paper_l ()->get_realvar (interline_scm_sym)/2.0;
+  Real interline_f = paper_l ()->get_realvar (interline_scm_sym);
+  Real internote_f = interline_f/2;
+  Real t = paper_l ()->get_realvar (volta_thick_scm_sym);
 
   Real dx = internote_f;
   Real w = extent (X_AXIS).length () - dx;
-  Molecule volta (lookup_l ()->volta (w, last_b_));
+  Molecule volta (lookup_l ()->volta (w, t, interline_f, last_b_));
   Real h = volta.dim_.y ().length ();
-
   
-  Molecule num (lookup_l ()->text ("volta", number_str_));
+  Molecule num (lookup_l ()->text ("volta", number_str_, paper_l ()));
   Real dy = column_arr_.top ()->extent (Y_AXIS) [UP] > 
      column_arr_[0]->extent (Y_AXIS) [UP];
   dy += 2 * h;
@@ -51,7 +51,7 @@ Volta_spanner::do_brew_molecule_p () const
     dy = dy >? note_column_arr_[i]->extent (Y_AXIS)[BIGGER];
   dy -= h;
 
-  Molecule two (lookup_l ()->text ("number", "2"));
+  Molecule two (lookup_l ()->text ("number", "2", paper_l ()));
   Real gap = two.dim_.x ().length () / 2;
   Offset off (num.dim_.x ().length () + gap, 
              h / internote_f - gap);
index 05eb9b5ab495e0bc93626173b2319af25437dbb2..514693c498fdde226187737899d3cc08875b92dd 100644 (file)
@@ -1,6 +1,6 @@
 % Toplevel initialisation file. 
        
-\version "1.0.20";
+\version "1.0.21";
 
 
 \include "declarations.ly"
index eaf3e7bf2a2b0c5fc2e5748ad379dcf21f8033e5..3bba4f0837079b7512ee57e4a103023fcc6a7034 100644 (file)
@@ -1,6 +1,6 @@
 % Toplevel initialisation file. 
        
-\version "1.0.20";
+\version "1.0.21";
 
 
 \include "declarations.ly";
index 65c2f669d3c571a58eab10a32e4f47d083f4152f..a5bfb078066e505042d42c6f24cf6810da95b07f 100644 (file)
@@ -1,7 +1,7 @@
 % Toplevel initialisation file. 
        
 
-\version "1.0.20";
+\version "1.0.21";
 
 
 \include "declarations.ly"
index 4d5a0bf5dc28e0366fcaa943266c4709dd793779..b32c0338a4e0f384851fbf57ed55bcf08f111a61 100644 (file)
@@ -1,6 +1,6 @@
 % Toplevel initialisation file. 
        
-\version "1.0.20";
+\version "1.0.21";
 
 
 \include "declarations.ly"
index 13500905ec911bf6195effb79591cdc874662858..57e9bba99e3870a5b41fc3fc3c5f06d145bd8271 100644 (file)
@@ -1,6 +1,6 @@
 % Toplevel initialisation file. 
        
-\version "1.0.20";
+\version "1.0.21";
 
 
 \include "declarations.ly"
index 31215a15ca8d1f834ec03101d50b7ff7ce2d7d69..13ef9a393bc739dc012d234df0563822866f51f2 100644 (file)
@@ -1,6 +1,6 @@
 % Toplevel initialisation file. 
        
-\version "1.0.20";
+\version "1.0.21";
 
 
 \include "declarations.ly"
index 5f652ecdcfcdce48d706124973b3ad6d36da8569..10f2c4959357f24158b2da6f7873c72d8adb5967 100644 (file)
@@ -1,6 +1,6 @@
 % Toplevel initialisation file. 
        
-\version "1.0.20";
+\version "1.0.21";
 
 
 \include "declarations.ly";
index 8f03850e7ef4e78777123cb67c653ce7f1ce4982..ccd35763e3ab073f712f3c28a43d17aae391f777 100644 (file)
@@ -1,6 +1,6 @@
 % Toplevel initialisation file. 
        
-\version "1.0.20";
+\version "1.0.21";
 
 
 \include "declarations.ly"
@@ -10,8 +10,8 @@
     \maininput
   }
   \paper {
-    linewidth=-1.0;
-       indent = 0.0;
+           linewidth=-1.0;
+       indent = 0.0;
   }  
   \midi{ }
 }
index e499491a65402aeb3ae5c124f327211bb698b2dc..e439ab17b3486116dd288571ea0e6763ee0cc28e 100644 (file)
@@ -2,7 +2,7 @@
 
 
 
-\version "1.0.20";
+\version "1.0.21";
 
 paper_sixteen = \paper {
        staffheight = 16.0\pt;
index 2de985a5f01e9e496d2d9024a1d1de022d17e2ef..90bebc6d7d3fd015a9893b89a603ea4aa8a0f83f 100644 (file)
@@ -1,7 +1,7 @@
 % paper20.ly
 
 
-\version "1.0.20";
+\version "1.0.21";
 
 paper_twenty = \paper {
        staffheight = 20.0\pt;
index 845417014aca099d662f6185ec1e93921396b9fe..33fabb80abc481860820e0c567e27e460eb42bf9 100644 (file)
@@ -143,8 +143,12 @@ crescendo_shorten = 4.0 * \interline;
 restcollision_minimum_dist = 3.0;
 restcollision_minimum_beamdist = 1.5;
 
-postBreakPadding = 1.0*\interline;
+% deprecated!
+postBreakPadding = 0.0;
+
+stemSpacingCorrection = 0.5*\interline;
 
 \include "engraver.ly";
 
 
+
index 7aa173d0b4de1fffcd0b37b313e11c2d65850b34..979e2e66f07fd29205a6d7ae12fc2dbb39d67595 100644 (file)
@@ -30,8 +30,8 @@ slurdown = \notes {
        \property Voice.slurVerticalDirection = \down
 }
 
-shifton =      \property Voice.hshift = 1
-shiftoff =     \property Voice.hshift = 0
+shifton = \property Voice.horizontalNoteShift = 1
+shiftoff = \property Voice.horizontalNoteShift = 0
 
 onevoice = {   
        \stemboth \shiftoff     
@@ -59,33 +59,6 @@ voicefour =
        \shifton
 }
 
-onestaff = 
-       \translator Staff=one
-
-
-staffone = {   
-       \translator Staff=one
-       \property Staff.verticalDirection = \center
-       \property Staff.hshift = 0
-}
-
-stafftwo = {   
-       \translator Staff=two
-       \property Staff.verticalDirection = \center
-       \property Staff.hshift = 0
-}
-
-staffthree = {         
-       \translator Staff=three
-       \property Staff.verticalDirection = \center
-       \property Staff.hshift = 0
-}
-
-stafffour = {  
-       \translator Staff=four
-       \property Staff.verticalDirection = \center
-       \property Staff.hshift = 0
-}
 
 % ugh, cluttering global namespace...
 
index e90c55e26d5c9bda79dbd444f22e7127ba68c2a4..0bca494223d61937d07ebbd92ef7e12ec384df3d 100644 (file)
@@ -7,7 +7,7 @@ enteredby =      "JCN";
 copyright =     "public domain";
 }
 
-\version "1.0.20";
+\version "1.0.21";
 
 \include "global.ly"
 \include "violoncello.ly"
index a43c6dfe97ed320556570acea790aadf2495c6ea..923b3b57c6db56b5f2f1344c8a90864f32d32753 100644 (file)
@@ -7,7 +7,7 @@ enteredby =      "JCN";
 copyright =     "public domain";
 }
 
-\version "1.0.20";
+\version "1.0.21";
 
 \include "global.ly"
 \include "clarinetti.ly"
index 581cf740e573d554226911368f001125495f0f60..aa441a3ba390ccb7ee2d731de0fdf95973a347f2 100644 (file)
@@ -9,7 +9,7 @@ copyright =      "public domain";
 
 }
 
-\version "1.0.20";
+\version "1.0.21";
 
 \include "clarinetto-1.ly"
 \include "clarinetto-2.ly"
index 7645f4172b62846390d8d9a5e5316f61d6a4d5f0..dca9983180f5660823b8cf2c50a6c862fa5d559a 100644 (file)
@@ -9,7 +9,7 @@ copyright =      "public domain";
 
 }
 
-\version "1.0.20";
+\version "1.0.21";
 
 clarinetto1 = \notes \relative c {
        R1 *2 | d''4-.\ff r r2 | R1 *3 | e4-. r r2 | R1 *3 |
index 7503d18ada2ab86dc7aed7c0e691e77916c2df33..281418a8fd0bb52de69da547bb6e5b1e2fe81b8a 100644 (file)
@@ -9,7 +9,7 @@ copyright =      "public domain";
 
 }
 
-\version "1.0.20";
+\version "1.0.21";
 
 clarinetto2 = \notes \relative c { 
        R1*2 bes''4-.\ff r r2 | R1*3 | cis4-. r r2 | R1 *3 | 
index 0f0a58c52d009c717950b18e7425a6434887f32b..8f364a98cc21b711fcb159df4a7bb42474f5069d 100644 (file)
@@ -7,7 +7,7 @@ enteredby =      "JCN";
 copyright =     "public domain";
 }
 
-\version "1.0.20";
+\version "1.0.21";
 
 \include "global.ly"
 \include "contrabasso.ly"
index c958df6f43b2c6213b1f4f94e3783fb66747cdfc..24ee6a2a3ce02a4f663dbd0548ed0e1d638945c9 100644 (file)
@@ -7,7 +7,7 @@ enteredby =      "JCN";
 copyright =     "public domain";
 }
 
-\version "1.0.20";
+\version "1.0.21";
 
 contrabasso = \notes \relative c {
 %      \translator Staff=violoncello
index b904ec9b8c63f8a9373cfe34ce1446419c7daad7..18356afdb4930c741c67d497778dafd2ca86505b 100644 (file)
@@ -7,7 +7,7 @@ enteredby =      "JCN";
 copyright =     "public domain";
 }
 
-\version "1.0.20";
+\version "1.0.21";
 
 \include "global.ly"
 \include "corni.ly"
index dc490a270473c86c28140fa43aed784294e21d04..3baa0bff1a20d5b54dac722e415fad6f6973df78 100644 (file)
@@ -9,7 +9,7 @@ copyright =      "public domain";
 
 }
 
-\version "1.0.20";
+\version "1.0.21";
 
 \include "corno-1.ly"
 \include "corno-2.ly"
index 5db1f242069beedba0575aca9709bea8129df1b0..c3ea92df034530491e389cc9278b079103b3f99f 100644 (file)
@@ -7,7 +7,7 @@ enteredby =      "JCN";
 copyright =     "public domain";
 }
 
-\version "1.0.20";
+\version "1.0.21";
 
 corno1 = \notes \relative c {
        R1 *2 | f''4-.\ff r r2 | R1 *3 | f4-. r r2 | R1 *3 |
index d05eb04bfd4f003022c3331de37f82a3c63bb559..2461ec83d4a441960a18e21e38b1d9d463093ef7 100644 (file)
@@ -7,7 +7,7 @@ enteredby =      "JCN";
 copyright =     "public domain";
 }
 
-\version "1.0.20";
+\version "1.0.21";
 
 corno2 = \notes \relative c {
        R1 *2 | d''4-.\ff r r2 | R1 *3 | d4-. r r2 | R1 *3 |
index 77cf1e3abfbeb1142dd258497af98d1edf2ee097..94fd4fd552c13e12f0720cddc5614bf253435793 100644 (file)
@@ -9,7 +9,7 @@ copyright =      "public domain";
 
 }
 
-\version "1.0.20";
+\version "1.0.21";
 
 \include "global.ly"
 \include "fagotti.ly"
index f8d277a5841ab389fee61fb736929f6699428544..555c01ef9b52365c2eedd7e8a28a4c3d742ae434 100644 (file)
@@ -9,7 +9,7 @@ copyright =      "public domain";
 
 }
 
-\version "1.0.20";
+\version "1.0.21";
 
 \include "fagotto-1.ly"
 \include "fagotto-2.ly"
index 096176e76594d87b12f0edf81f5d114ba69b3741..fcdb906da0f470a8ff71f59a14f7a1e865b6545b 100644 (file)
@@ -9,7 +9,7 @@ copyright =      "public domain";
 
 }
 
-\version "1.0.20";
+\version "1.0.21";
 
 fagotto1 = \notes \relative c {
        R1 *2 | as'4-.\ff r r2 | R1 *3 | as4-. r r2 | R1 *3 |
index d5aaf3e699ed920a01ac0da90a25344c3b9f22ce..980337e00321625269487addf239509e5fd79e15 100644 (file)
@@ -7,7 +7,7 @@ enteredby =      "JCN";
 copyright =     "public domain";
 }
 
-\version "1.0.20";
+\version "1.0.21";
 
 fagotto2 = \notes \relative c {
        R1 *2 | f4-.\ff r r2 | R1 *3 | f4-. r r2 | R1 *3 |
index ff50562870406650053ce02b46659ccb29f241e8..e10242a35b01e12b0ef44ec3e59b85077df3d2cf 100644 (file)
@@ -9,7 +9,7 @@ copyright =      "public domain";
 
 }
 
-\version "1.0.20";
+\version "1.0.21";
 
 \include "global.ly"
 \include "flauti.ly"
index 1557ba98d15ab994303806b32e64297cd74d2953..335cfd30910d95c558387297a89fd023dd1c528e 100644 (file)
@@ -9,7 +9,7 @@ copyright =      "public domain";
 
 }
 
-\version "1.0.20";
+\version "1.0.21";
 
 \include "flauto-1.ly"
 \include "flauto-2.ly"
index faf51d925c2c8e0cc89bdf4b529df069b6814df5..4ae7119a3b690b0d432f75ef4417c1826f5a5483 100644 (file)
@@ -7,7 +7,7 @@ enteredby =      "JCN";
 copyright =     "public domain";
 }
 
-\version "1.0.20";
+\version "1.0.21";
 
 flauto1 = \notes \relative c {
        R1 *2 | c'''4-.\ff r r2 | R1 *3 | d4-. r r2 | R1 *3 |
index 310d69339831e962411b7f3e1973e30467880f99..067a3620dfb6b092400199cf0a82ef8141a74013 100644 (file)
@@ -7,7 +7,7 @@ enteredby =      "JCN";
 copyright =     "public domain";
 }
 
-\version "1.0.20";
+\version "1.0.21";
 
 flauto2 = \notes \relative c {
        R1 *2 | as'''4-.\ff r r2 | R1 *3 | b4-. r r2 | R1 *3 | 
index cf487141d8f6d3d629d56a150342c66b1a019cd0..8eefc990013cee9815619c509878dac98fd96b84 100644 (file)
@@ -9,7 +9,7 @@ copyright =      "public domain";
 
 }
 
-\version "1.0.20";
+\version "1.0.21";
 
 global = \notes {
        \time 4/4;
index 67d9d6d3b3650d017e269874dffcc2b267a1375f..4631ba29e44b77c4e351b3e5b49830b1343da53b 100644 (file)
@@ -7,7 +7,7 @@ enteredby =      "JCN";
 copyright =     "public domain";
 }
 
-\version "1.0.20";
+\version "1.0.21";
 
 oboe1 = \notes \relative c'' {
        R1 *2 | as'4-.\ff r r2 | R1 *3 | as4-. r r2 | R1 *3 |
index c92d6d88d1712d126282037900d1d17c9a2d894f..8a138bde031a51b1104909a0f307be47bb81278e 100644 (file)
@@ -9,7 +9,7 @@ copyright =      "public domain";
 
 }
 
-\version "1.0.20";
+\version "1.0.21";
 
 oboe2 = \notes \relative c{
        R1 *2| f''4-.\ff r r2 | R1 *3 | f4-. r r2 | R1 *3 |
index 599c688daa7b8c09c10e0ff406eae80e6f91feed..cbdc44edb3b1ca01887d2676bb130e64d90c354a 100644 (file)
@@ -9,7 +9,7 @@ copyright =      "public domain";
 
 }
 
-\version "1.0.20";
+\version "1.0.21";
 
 \include "global.ly"
 \include "oboi.ly"
index b3f61ac178909d10b8e5de436eb6eff73f14e026..d9d8db98d522a68c55d987221cdd46cf3dae9ce4 100644 (file)
@@ -9,7 +9,7 @@ copyright =      "public domain";
 
 }
 
-\version "1.0.20";
+\version "1.0.21";
 
 \include "oboe-1.ly"
 \include "oboe-2.ly"
index b2fefcf9455ad9b7453950dd2419ecb337323998..64182a018aac1228d1054e6ab38f635b883f9a7b 100644 (file)
@@ -9,7 +9,7 @@ copyright =      "public domain";
 
 }
 
-\version "1.0.20";
+\version "1.0.21";
 
 timpani = \notes \relative c {
        R1 *2 | c4-.\ff r r2 | R1 *3 | c4-. r r2 | R1 *3 |
index 4065c85e5c392c45d60e9f002271f44058778e4e..7e829fc02e7e8be1e0a3e27bf6f1ba9e0700458a 100644 (file)
@@ -9,7 +9,7 @@ copyright =      "public domain";
 
 }
 
-\version "1.0.20";
+\version "1.0.21";
 
 \include "global.ly"
 \include "trombe.ly"
index f552fd2c6e91c162a3b29dba7b90452003f739d4..28ea0951ff60be519c12089532da67bad611a615 100644 (file)
@@ -9,7 +9,7 @@ copyright =      "public domain";
 
 }
 
-\version "1.0.20";
+\version "1.0.21";
 
 \include "trombo-1.ly"
 \include "trombo-2.ly"
index 8d8952e75cae29e4c1c77a6de9c7a0bb8e0faabf..1d7a55ee4db035eae570df93066a01d979aa8e6c 100644 (file)
@@ -7,7 +7,7 @@ enteredby =      "JCN";
 copyright =     "public domain";
 }
 
-\version "1.0.20";
+\version "1.0.21";
 
 trombo1 = \notes \relative c {
        R1 *2 | c''4-.\ff r r2 | R1 *3 | c4-. r r2 | R1 *3 |
index 3812ea54efa5ee77a8ad8aa9da435a1b5272afe5..92fd2bfa757504423fad1472fbd7d5226b109bdd 100644 (file)
@@ -7,7 +7,7 @@ enteredby =      "JCN";
 copyright =     "public domain";
 }
 
-\version "1.0.20";
+\version "1.0.21";
 
 trombo2 = \notes \relative c {
        R1 *2 | c'4-.\ff r r2 | R1 *3 | c4-. r r2 | R1 *3 |
index 92a2f3211fdba1d4e9bee8be3f64a61ff454a96a..7aac9fc86b36e82b928851c111cd959182aa4b3f 100644 (file)
@@ -7,7 +7,7 @@ enteredby =      "JCN";
 copyright =     "public domain";
 }
 
-\version "1.0.20";
+\version "1.0.21";
 
 viola1 = \notes \relative c {
        \context Voice=one
index b0e5f7fe04b7ed9244287a97c535e32ee81f1c29..1f1c90e0419624dd921b5ed512c3af58eee2cb9b 100644 (file)
@@ -7,7 +7,7 @@ enteredby =      "JCN";
 copyright =     "public domain";
 }
 
-\version "1.0.20";
+\version "1.0.21";
 
 viola2 = \notes \relative c {
        % starts on (actualy, most part is on) same staff as viola1
index e3ce9da93c2948083310587ca2085cd7e44b0cd1..f6ac9f640ac6b0382ebcf72aa22bc8198d3db931 100644 (file)
@@ -7,7 +7,7 @@ enteredby =      "JCN";
 copyright =     "public domain";
 }
 
-\version "1.0.20";
+\version "1.0.21";
 
 \include "global.ly"
 \include "viola-1.ly"
index 3ed4fb306fbb52ee6b25c4f3b1704da9ee284aea..e5641f9fd1990d69b86ee7f2937943818e48955d 100644 (file)
@@ -7,7 +7,7 @@ enteredby =      "JCN";
 copyright =     "public domain";
 }
 
-\version "1.0.20";
+\version "1.0.21";
 
 \include "global.ly"
 \include "violino-1.ly"
index 2e4b87f08a8a333b68affcb6da365b28b7a3546e..b77cd240aab65e9593d15835c4d9de54d90b2a24 100644 (file)
@@ -7,7 +7,7 @@ enteredby =      "JCN";
 copyright =     "public domain";
 }
 
-\version "1.0.20";
+\version "1.0.21";
 
 violino1 = \notes \relative c {
        c'1\ff ~ | c | <f4-. c'-. as'-.> r r2 | R1 |
index e738e9d9453057f0c2213b73b95ed67dbdaa6133..89cc9cb00d0b81c28dc8e91f51cd95c225fd2bed 100644 (file)
@@ -7,7 +7,7 @@ enteredby =      "JCN";
 copyright =     "public domain";
 }
 
-\version "1.0.20";
+\version "1.0.21";
 
 \include "global.ly"
 \include "violino-2.ly"
index 535a41690dd2b96d9ae7b35dfb858725c27b2bec..d9e906c74e3fa2b59e2913b7c3306120fa2e4170 100644 (file)
@@ -7,7 +7,7 @@ enteredby =      "JCN";
 copyright =     "public domain";
 }
 
-\version "1.0.20";
+\version "1.0.21";
 
 violino2 = \notes \relative c {
        c'1\ff ~ | c | <f4-. c'-. as'-.> r r2 | R1 |
index 4f40fbf0c86183e9d72e8cbf1d13b27183b0598e..34f48f6a20cfcb464529327b86de0a03d466f082 100644 (file)
@@ -7,7 +7,7 @@ enteredby =      "JCN";
 copyright =     "public domain";
 }
 
-\version "1.0.20";
+\version "1.0.21";
 
 \include "global.ly"
 \include "violoncello.ly"
index 070c820f6317e373438bdea54038df5270aa26ab..28ffd4c402d724dd00f0daf496769a9550d1dafd 100644 (file)
@@ -9,7 +9,7 @@ copyright =      "public domain";
 
 }
 
-\version "1.0.20";
+\version "1.0.21";
 
 violoncello = \notes \relative c {
        c1\ff ~ | c | f,4-. r r2 | r1 | c'1\ff ~ | c | f,4-. r r2 |
index caf94189236757ba9be6b2a62f33ddb1fd9bc03a..95aecf997d500679381d94132fdc7765f763a371 100644 (file)
@@ -807,4 +807,4 @@ Bar_number_engraver;}}
 
 ----------------------------------------------------
 
-\version "1.0.20";
+\version "1.0.21";
index e135d8343a79393ed46a80493d11df3c37353b34..18b3e3193384f77353a1fdeef23f5ff4c4484858 100644 (file)
@@ -266,4 +266,4 @@ s1
 \paper{barsize=50.0; \translator {\StaffContext \consists
 Bar_number_engraver;}}
 }
-\version "1.0.20";
+\version "1.0.21";
index af3e3b6c3d73792d92237b787ed329086f14eaf6..27fa3e2c83536d7ff8be9a922b6ba17276d5dbb5 100644 (file)
@@ -336,4 +336,4 @@ g,4. |
 Bar_number_engraver;}}
 }
 
-\version "1.0.20";
+\version "1.0.21";
index 7f861941550e33b08669a476735826ac7aa23018..fcd51d8faea139c7294421c898f5032d556221c1 100644 (file)
@@ -251,4 +251,4 @@ LHtoL = { \tolower \stemdown }
  
 
 }
-\version "1.0.20";
+\version "1.0.21";
index bffe458f1778640073580dd1db996750808c4dea..e4fe8310878018f2e4e1edbf505a1cc0c1589815 100644 (file)
@@ -311,4 +311,4 @@ s8 [c''16 g'8 fis'16] [bes'' g' f' ees'] |
  \paper{barsize=50.0; \translator {\StaffContext \consists
 Bar_number_engraver;}}
 }
-\version "1.0.20";
+\version "1.0.21";
index 524878c6038101be31460a0d9a3eb6f23467a84a..90984120b2bafcce4feaac1d5db84b514c48e799 100644 (file)
@@ -17,7 +17,7 @@ title = "Verso II";
        under the Gnu Public Licence.
 %}
        
-\version "1.0.20";
+\version "1.0.21";
 
 $voice_one = \notes \relative c' {
        a'2 bes4. [c16 bes] | a4 d ~ d c ~ | c b ~ [b8 a] a4 ~|
index c2ecc576f91c9efa6d12bbcdacd7ab1d63712596..fc2f0b7a1ed512a2720335e8f882179f2c0ad39e 100644 (file)
@@ -12,7 +12,7 @@
  Tested Features: cross staff beams and slurs, grace notes, no bars
 %}
 
-\version "1.0.20";
+\version "1.0.21";
 
 \include "nederlands.ly"
 
index 4216696d5a924d50bdf4260a9a2ef8fb74fdfab3..397be40bb6b68181e6ac7a5237520a9cee171acb 100644 (file)
@@ -12,7 +12,7 @@
  Tested Features:
 %}
 
-\version "1.0.20";
+\version "1.0.21";
 
 \include "nederlands.ly"
 
index 2ebcf919e3736b86898dc28c51803b84f0ca29eb..d38c8cce4d2886e2bc600c56df3c98a10cd11508 100644 (file)
@@ -9,6 +9,6 @@ description = "A schubert song in 16 pt";
 copyright =     "public domain";
 } 
 
-\version "1.0.20";
+\version "1.0.21";
 
 \include "standchen.ly"
index 9d32796aa84cb1d2bc0adda3cbb6a6e95c941849..9ae5a8c5d8348df481c4cefe668804f113b1ea90 100644 (file)
@@ -9,7 +9,7 @@ copyright =      "public domain";
 description = "A schubert song in 20 pt";
 } 
 
-\version "1.0.20";
+\version "1.0.21";
 
 % fool make-website
 % \include "standchen.ly";
index aecac4abce43f20ef778ad1dbbe390b41d0c1070..7cbaeea0ed5c62c38e147f561518fba84cc4b58f 100644 (file)
@@ -9,7 +9,7 @@ LOCALSTEPMAKE_TEMPLATES=mutopia
 
 include $(depth)/make/stepmake.make
 
-EXTRA_DIST_FILES +=  TODO
+EXTRA_DIST_FILES +=  
 
 
 
index 61a8eac1c2f9e22c2a05db1217535d693df16ddd..99e3b59d1d345bb54a5c351e837eabb0fda7ad9b 100644 (file)
@@ -6,7 +6,7 @@ date = "1868";
 title = "Diademata";
 metre = "6 6. 8 6. D";
 }
-\version "1.0.20";
+\version "1.0.21";
 
 sop=\notes \transpose c''{
        ees2  | ees4 ees4 g2 g2 |  c'1.  \bar "||";
index f208db7e2783f947b5ca65fa7033fe996ed6da0d..5078d01f70c0aa311abb12609a65e1008cd7e304 100644 (file)
@@ -4,7 +4,7 @@ composer = "Parry";
 metre = "10 10 . 11 11";
 }
 
-\version "1.0.20";
+\version "1.0.21";
 
 sop = \notes \transpose c''{
        f4 | d' bes c' | f2 \bar "||";
index 378f138a096998e4fe25aa51439f9e6d74b95d30..6a7ba8e9b72331d76eecead736a7bcc0f35e6d10 100644 (file)
@@ -7,7 +7,7 @@ title = "Maccabaeus";
 metre = "10 11. 11 11. and refrain";
 }
 
-\version "1.0.20";
+\version "1.0.21";
 
 sop=\notes \relative c'' {
        b2 gis4. a8  |b2 e,2 |
index 3cf2fd36bf80efac4e99ababade33b85fdf0f163..9026a41041e3b2390a1bfb423ac31acf1c9abef9 100644 (file)
@@ -7,7 +7,7 @@ title = "Ode to Joy";
 metre = "8 7 8 7 D";
 }
 
-\version "1.0.20";
+\version "1.0.21";
 
 sop=\notes \relative c'' {
        b4 b c d | d c b a | g g a b | b4. a8 a2 \bar "||";
index 4dd7397fa1eb9e7af2c323f62635ea346308431e..3c3a619e04151ce603bf6838e5bb1847527cb2f8 100644 (file)
@@ -8,7 +8,7 @@ poet = "Joseph Mohr";
 }
 
 
-\version "1.0.20";
+\version "1.0.21";
 
 global=\notes {
              \time 6/4;
index 5f7be0b367510b9f7e87a75d88e49d028ef34abe..f2b28b35814c33864b568060cb0027915aa64126 100644 (file)
@@ -4,7 +4,7 @@
        piece = "Allemande";
 }
 
-\version "1.0.20";
+\version "1.0.21";
 
 global = \notes{
        \time 4/4;
index b5d1f9fd4bf2a02150d49241efec891d008404cc..5469e6bf5211349ac1e78640cf70b07f90e3e68f 100644 (file)
@@ -10,7 +10,7 @@
 %% 
 %% Noe liknende skjer ogsÃ¥ i mellom andre og tredje stemme i takt 28
 
-\version "1.0.20";
+\version "1.0.21";
 
 global = \notes{
        \time 2/4;
@@ -258,9 +258,9 @@ vTwo = \context Voice = voiceTwo \notes\relative c{
 % ???
 % What have i misunderstood? I want the note_head not to collide with
 % i hotehead i vOne
-       \property Voice.hshift = -1
+       \property Voice.horizontalNoteShift = -1
        d 
-       \property Voice.hshift = 0
+       \property Voice.horizontalNoteShift = 0
        c4 b8 |
 }
 vThree = \context Voice = voiceThree \notes\relative c{
index 209c1f86c4e32175d41ea5f004dcb2e0569a5f00..1a4ec05b4643309ffe4df783c6a9719c12104a4d 100644 (file)
@@ -10,7 +10,7 @@
   copyright =   "Public Domain";
 }
 
-\version "1.0.20";
+\version "1.0.21";
 
 global = \notes {
        \time 4/4;
@@ -31,7 +31,7 @@ hoyreOpp = \notes\relative c''  {
        bes4 r16 [bes,16 bes. c32] [des8. des16] 
        \context Staff < 
                { \stemup e4 }
-               { \stemup \property Voice.hshift = 1 [des16 c32 bes c16. g32] }
+               { \stemup \property Voice.horizontalNoteShift = 1 [des16 c32 bes c16. g32] }
        >
 %4
        f4 \stemboth r16 [f g. as32] \stemup d,4 r16 [d g. es32] |
@@ -40,7 +40,7 @@ hoyreOpp = \notes\relative c''  {
        <[es8. c> <es16 c>]
        \context Staff <
                { \stemup fis4 }
-               { \stemup \property Voice.hshift = 1 [es16 d32 c d16. a32] }
+               { \stemup \property Voice.horizontalNoteShift = 1 [es16 d32 c d16. a32] }
        > g2
 }
 
@@ -80,7 +80,7 @@ venstreNed = \notes\relative c{
        c4 r c r | r c c r | c r r c | c r r16 [c c. bes32] bes4 |
        r16 [bes bes. as32] as4_"tr" g r16 [d' d. es32] |
        \context Staff <
-               { \stemdown \property Voice.hshift = 1 [f8. f16] [b,8. b16] g4 r | }
+               { \stemdown \property Voice.horizontalNoteShift = 1 [f8. f16] [b,8. b16] g4 r | }
                { \stemdown s4 g}
        >
        r g g2  
index 229585501f9cc10f2f2e9fffd0b7710e175c22a7..632aad05100094901083603935721570a387d1b3 100644 (file)
@@ -15,7 +15,7 @@ copyright =    "public domain";
  dotted slurs
 %}
 
-\version "1.0.16";
+\version "1.0.21";
 
 \include "allemande-urtext.ly";
 
@@ -23,14 +23,14 @@ allemande_cello_global = \notes{
        \time 4/4;
        \key f;
        \clef bass;
-       \repeat 2 {
+       \repeat "semi" 2 {
                \partial 16;
                s16
                s1*11 |
                s2 s4 s8
                \partial 16*15;
                s16
-       } \repeat 2 {
+       } \repeat "semi" 2 {
                % urg
                s32 \partial 16; s32
                s1*11
@@ -53,6 +53,7 @@ allemande_cello_staff = \context Staff <
        \paper{
                \include "scs-paper.ly";
                gourlay_maxmeasures = 3.0;
+               
        }
        \midi{ \tempo 4 = 45; }
        \header{ piece = "Allemande"; }
index a1215a3363cc2c70db6abe488db2b14f32e841b5..3b4fda0013f32035aee16d3cde18e2aec6d69dcb 100644 (file)
@@ -11,6 +11,8 @@ n = { \slurnormal }
 d = { \slurdotted }
 comma = "\\sethuge\\ \\ ,"
 
+phrasingcomma = { }  % { \bar "empty"; \mark "'"; \nobreak }
+
 allemande_a = \context Staff \notes \relative c {
        \context Voice=i
        \stemup
@@ -55,12 +57,12 @@ allemande_a = \context Staff \notes \relative c {
        \n a()f' g,()f e g'( a )bes |
        % :-(
        % bes( a g )f^\comma 
-       bes( a g )f^"\\sethuge{\\ \\ '}" 
+       bes( a g )f  \phrasingcomma
        a()e f()d bes d(f)a d()a bes()g |
        %21
        a,(\n)g'(\n cis())d e()g, a()e f()d bes()d \d gis, f'(e)d |
        % \n d( cis b )a^\comma c(a)fis d' c a( b )d 
-       \n d( cis b )a^"\\sethuge\\ \\ ," 
+       \n d( cis b )a \phrasingcomma %^"\\sethuge\\ \\ ," 
        c(a)fis d' c a( b )d 
        f!(d )gis, d' |
        %23
@@ -104,4 +106,4 @@ allemande = \context Staff \notes<
 >
 
 
-\version "1.0.20";
+\version "1.0.21";
index 2c80b4b2336e798eba2b818d2d600d20e3450061..f2797a3ca25d4c4660f731f085ce65ee76912de8 100644 (file)
@@ -91,4 +91,4 @@ courante = \context Staff \notes<
  \$courante_b
 >
 
-\version "1.0.20";
+\version "1.0.21";
index a7e752eec8ad5b74bd7e773f5d97b185e2d30789..fe92ef610cf12f9db89eeaeb2ab9733802225c14 100644 (file)
@@ -106,4 +106,4 @@ gigue = \notes<
        \$gigue_b
 >
 
-\version "1.0.20";
+\version "1.0.21";
index d7003409d47a87ca8ee07daded9ffe91c98390ae..0890faa6927ffea09ea3982ab43d69187dea4ae0 100644 (file)
@@ -16,7 +16,7 @@ copyright =    "public domain";
  dotted slurs
 %}
 
-\version "1.0.16";
+\version "1.0.21";
 
 \include "menuetto-urtext.ly";
 
@@ -24,9 +24,10 @@ menuetto_i_cello_global = \notes{
        \time 3/4;
        \key f;
        \clef bass;
-       \repeat 2 {
+       \repeat    "semi" 2 {
                \skip 2.*8;
-       } \repeat 2 {
+       }
+       \repeat "semi" 2 {
                \skip 2.*1;
                \slurdotted
                \skip 2.*14;
@@ -79,9 +80,10 @@ menuetto_ii_cello_global = \notes{
        \time 3/4;
        \key D;
        \clef bass;
-       \repeat 2 {
+       \repeat "semi" 2 {
                \skip 2.*8;
-       } \repeat 2 {
+       }
+       \repeat  "semi" 2 {
                \skip 2.*1;
                \slurdotted
                \skip 2.*14;
@@ -101,6 +103,7 @@ menuetto_ii_cello_staff = \context Staff <
        \paper{
                \include "scs-paper.ly";
                gourlay_maxmeasures = 7.0;
+               
                \translator{
                        \VoiceContext
                        beamAutoEnd_8 = "3/4";
index da320dce164a639844667c8728aaece5038f0a45..fb729e383e611bff1c5bab7a94eaa467fda1a012 100644 (file)
@@ -21,7 +21,7 @@ menuetto_i_a = \context Staff \notes \relative c {
        <a2\f e'> d8( e16 )f |
        \slurdotted
        e8( d cis )e a,()g |
-       a4 ~ d cis |
+       a4 () d cis |
        g'8( f e )f d() c |
        %13
        bes2 c4 |
@@ -35,7 +35,7 @@ menuetto_i_a = \context Staff \notes \relative c {
 %      <bes,4 g' d'> <c, g' c> < d,8 bes'(> )a |
        <d'4 g, bes,> <c g c,> bes8()a |
        c8( bes a )bes g()bes |
-       d4 ~ cis d |
+       d4 () cis d |
        g,8 f g e f4 |
        g,8 g' <{e4.^\trill d8 } a4.> ~ |
        <d2. a d,> |
@@ -57,7 +57,7 @@ menuetto_i_b = \context Staff \notes \relative c {
        g8 \skip 8*5; |
        f2 e4
        d8 \skip 8*5; |
-       g4 ~ f e
+       g4 () f e
        f8 \skip 8*5; |
        \skip 2.*3; |
        es8 \skip 8*3; d4 |
@@ -112,8 +112,8 @@ menuetto_i_b_voice_urg_urg = \notes<
 >
 
 menuetto_i = \context Staff \notes<
-       { \$menuetto_i_a_voice_urg_urg }
-       { \$menuetto_i_b_voice_urg_urg }
+       \repeat "semi" 2 { \$menuetto_i_a_voice_urg_urg }
+       \repeat "semi" 2 { \$menuetto_i_b_voice_urg_urg }
 >
 
 menuetto_ii = \context Staff\notes \relative c {
@@ -156,4 +156,4 @@ menuetto_ii = \context Staff\notes \relative c {
        d2.
 }
 
-\version "1.0.20";
+\version "1.0.21";
index 1f6b58cb5fdc4b66c7f883649488844bca3d24db..7b5681127149df0e10812eb639517a86198abfc7 100644 (file)
@@ -15,7 +15,7 @@ copyright =    "public domain";
  dotted slurs
 %}
 
-\version "1.0.20";
+\version "1.0.21";
 
 \include "prelude-urtext.ly";
 
index d3237c389f7beee3c0de6197de79ac21570fe5c8..7445345cd2b017a464af32cf26798a804fd372f6 100644 (file)
@@ -280,4 +280,4 @@ prelude = \context Staff \notes<
        \$prelude_b
 >
 
-\version "1.0.20";
+\version "1.0.21";
index b68aafee14e38f74f629ba1510a9e6cd42be502a..36defc819866cf63605d7775244263c9e7c445cc 100644 (file)
@@ -15,7 +15,7 @@ copyright =    "public domain";
  dotted slurs
 %}
 
-\version "1.0.20";
+\version "1.0.21";
 
 \include "prelude-urtext.ly";
 
index 1ecb556ba48deb347e406bdb3ca37c355582ce06..dba20e9cbcf3f51cba0abe18330012df5a9dd9b0 100644 (file)
@@ -92,4 +92,4 @@ sarabande = \context Staff \notes<
        \$sarabande_b
 >
 
-\version "1.0.20";
+\version "1.0.21";
index 41f00eb5eb8eed1b82b2ce7f0a72822e60c68126..61e33e7e0df6a4a3e10b699e7798e671f6c1e156 100644 (file)
@@ -16,4 +16,4 @@ $viola_i_staff = \context Staff = viola <
        \clef alto;
        \$global_i
 >
-\version "1.0.20";
+\version "1.0.21";
index 97081d2e98253a250281208dd8ce807da1df7856..7295ee78d02143300f4a8bfe8a13064869731b1e 100644 (file)
@@ -30,4 +30,4 @@ copyright =    "Public Domain";
        }
 }
 
-\version "1.0.20";
+\version "1.0.21";
index 3443a8d4aa974dc67b72aa3255f525e458e959c4..315135b5b1270ca2545d9a8422addf439662538d 100644 (file)
@@ -30,4 +30,4 @@ copyright =    "Public Domain";
        }
 }
 
-\version "1.0.20";
+\version "1.0.21";
index cd0938f9612789e035c1f0793cd4f83384ff94c5..18900b161779151effb57e5f28c6e213b4be4e8d 100644 (file)
@@ -28,4 +28,4 @@ $violoncello_i_staff = \context Staff = violoncello <
        \clef bass;
        \$global_i
 >
-\version "1.0.20";
+\version "1.0.21";
index 8da979849b45da098689e2de3abf1ec330dc7d0d..b00149f49561fe5571e1d625e5184e5410be604d 100644 (file)
@@ -11,7 +11,7 @@ copyright =    "Public Domain";
 %{
        
 %}
-\version "1.0.20";
+\version "1.0.21";
 
 
 global = 
index 606dfabb852d7554ba431aae58e17a315077be0f..e8e00e53f560318dd20a27e0b2d97d5abdc5b585 100644 (file)
@@ -19,7 +19,7 @@
    * auto beaming
 %}
 
-\version "1.0.20";
+\version "1.0.21";
 
 \include "nederlands.ly"                 % for correct parsing of note names
 
index 6f748109918dc2144e116d8399a7dbec32a6c3a9..e0d8f711f72cf387957a5608dab92b6ea930f9ca 100644 (file)
@@ -8,7 +8,7 @@ enteredby =      "Shay Rojansky";
 copyright =     "Public Domain";
 }
 
-\version "1.0.20";
+\version "1.0.21";
 
 global = 
     \notes {
index a7320929c4bc64d55c99e4bdec44a69367d7c201..f31efdade56be67a189e35071f9708d07c7c7e8f 100644 (file)
@@ -1,4 +1,4 @@
-\version "1.0.20";
+\version "1.0.21";
 
 corI=\notes\relative c'' {
 \key c;
index 168c1fa52f483aeba5a13c426eaa157baffb9431..f53c84e4f879ce037e69af39d5b33a489a091356 100644 (file)
@@ -1,4 +1,4 @@
-\version "1.0.20";
+\version "1.0.21";
 
 viI=\notes\relative c'' {
 
index 6276f9af7b97cfe5d3c06afb28a8ed6b8ed890c7..8a486eff8f9a3113e0f9f21b2709160fd813fe16 100644 (file)
@@ -1,4 +1,4 @@
-\version "1.0.20";
+\version "1.0.21";
 
 oboe=\notes\relative c'' {
 \clef "treble";
index 8eab69c625e578350e144e7ff423b81e12a3bbf6..88b7220fd64f508249371817739f14526fc1ff59 100644 (file)
@@ -13,7 +13,7 @@ Tested Features: cadenza mode
 Ugh.. Wish we had grace notes....  It adds another dimension to this
 piece of music.  %}
 
-\version "1.0.20";
+\version "1.0.21";
 
 
 cad = \notes  \relative c' {
index a5d5b6cd8fd0cc8a12d63d87928f53c37fed3b60..dda8a525ee7f15d9677f6c3334b3661d9d4a477d 100644 (file)
@@ -9,7 +9,7 @@ copyright =      "public domain";
 }
 
 
-\version "1.0.20";
+\version "1.0.21";
 
 allegro =
        \notes
index 432a60cc1b0dc59c03634aaf227557df08584be4..e8b434fe69728c05ce5809192222e3af27feaa0d 100644 (file)
@@ -45,7 +45,7 @@ Voice engraver by uncommenting the lines in the paper
 definition below. --MB
 %} 
 
-\version "1.0.18";
+\version "1.0.21";
 
 global = \notes {
   \property StaffGroup.timeSignatureStyle = "old"
index b818d04351f6e306471b7c192011d2a52e5a6aaf..b6827083f359be3e254246eafbee95817cd7a8fe 100644 (file)
@@ -8,7 +8,7 @@
 # 
 
 program_name = 'abc-to-ly'
-version = '0.1'
+version = '@TOPLEVEL_VERSION@'
 import __main__
 import getopt
 import sys
@@ -22,6 +22,7 @@ global_voice_stuff = []
 default_len = 4
 global_key = [0] * 7                   # UGH
 DIGITS='0123456789'
+HSPACE=' \t'
 
 def gcd (a, b):
        while  a % b:
@@ -171,6 +172,30 @@ def compute_key (k):
 
        return key_table
 
+tup_lookup = {
+       '3' : '2/3',
+       '4' : '4/3',
+       '6' : '4/6',
+       }
+
+
+def try_parse_tuplet_begin (str, state):
+       if str and str[0] in DIGITS:
+               dig = str[0]
+               str = str[1:]
+               state.parsing_tuplet = 1
+               
+               print '\\times %s {' % tup_lookup[dig]
+       return str
+
+def  try_parse_group_end (str, state):
+       if str and str[0] in HSPACE:
+               str = str[1:]
+               if state.parsing_tuplet:
+                       state.parsing_tuplet = 0
+                       print '}'
+       return str
+
 def try_parse_header_line (ln):
        m = re.match ('^(.): *(.*)$', ln)
 
@@ -180,6 +205,8 @@ def try_parse_header_line (ln):
                if g == 'T':
                        header['title'] =  a
                if g == 'M':
+                       if a == 'C':
+                               a = '4/4'
                        global_voice_stuff.append ('\\time %s;' % a)
                if g == 'K':
                        __main__.global_key  =compute_key (a)# ugh.
@@ -228,7 +255,7 @@ def octave_to_mudela_quotes (o):
 
 def parse_num (str):
        durstr = ''
-       while str[0] in DIGITS:
+       while str and str[0] in DIGITS:
                durstr = durstr + str[0]
                str = str[1:]
 
@@ -252,6 +279,7 @@ class Parser_state:
        def __init__ (self):
                self.next_dots = 0
                self.next_den = 1
+               self.parsing_tuplet = 0
 
 
 # WAT IS ABC EEN ONTZETTENDE PROGRAMMEERPOEP  !
@@ -259,7 +287,10 @@ def try_parse_note (str, parser_state):
        mud = ''
 
        slur_begin =0
-       if str[0] == '(':
+       if not str:
+               return str
+       
+       if  str[0] == '(':
                slur_begin = 1
                str = str[1:]
 
@@ -342,34 +373,75 @@ def junk_space (str):
 
        return str
 
+
+def try_parse_guitar_chord (str):
+       if str and str[0] == '"':
+               str = str[1:]
+               gc = ''
+               while str and str[0] != '"':
+                       gc = gc + str[0]
+                       str = str[1:]
+                       
+               if str:
+                       str = str[1:]
+
+               print "guitar chord: %s\n" % gc
+               
+       return str
+
 def try_parse_escape (str):
-       if str [0] != '\\':
+       if not str or str [0] != '\\':
                return str
        
        str = str[1:]
-       if str[0] == 'K':
-               compute_key ()
+       if str and str[0] == 'K':
+               key_table = compute_key ()
 
        return str
 
 
 def try_parse_bar (str):
-       if str[0] == '|':
+       if str and str[0] == '|':
+               bs = ''
                str = str[1:]
+               if str:
+                       if  str[0] == ']':
+                               bs = '|.'
+                       if str[0] == '|':
+                               bs = '||'
+
+               if bs:
+                       print '\\bar "%s";' % bs
        return str
        
 
+def try_parse_chord_delims (str):
+       if str and str[0] == '[':
+               str = str[1:]
+               print '<'
+
+       if str and str[0] == ']':
+               str = str[1:]
+               print '>'
+
+       return str
 
+# Try nibbling characters off until the line doesn't change.
 def try_parse_body_line (ln, state):
        prev_ln = ''
-       while ln and  ln != prev_ln:
+       while ln != prev_ln:
                prev_ln = ln
+               ln = try_parse_chord_delims (ln)
                ln = try_parse_note  (ln, state)
                ln = try_parse_bar (ln)
-               ln = junk_space (ln)
                ln = try_parse_escape (ln)
+               ln = try_parse_guitar_chord (ln)
+               ln = try_parse_tuplet_begin (ln, state)
+               ln = try_parse_group_end (ln, state)
+               ln = junk_space (ln)
+               
        if ln:
-               print 'Huh %s' % ln
+               print 'Huh?  Don\'t understand `%s\'' % ln
                
 
 
@@ -396,12 +468,14 @@ def parse_file (fn):
 
 
 def identify():
-       print '%s %s' % (program_name, version)
+       print '%s from LilyPond %s' % (program_name, version)
 
 def help ():
        print r"""
 This is a disfunctional ABC to mudela convertor.  It only gulps input, and
-says huh when confused.  Does not do chords.  Go ahead and fix me.
+says huh when confused.  Go ahead and fix me.
+
+Usage: abc-2-ly INPUTFILE
 
 -h, --help   this help.
 """