]> git.donarmstrong.com Git - lilypond.git/commitdiff
release: 1.3.24 release/1.3.24
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Sun, 13 Feb 2000 17:30:20 +0000 (18:30 +0100)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Sun, 13 Feb 2000 17:30:20 +0000 (18:30 +0100)
==========

* Added a ROADMAP file explaining the source directory layout.

* Minor tweak in the feta 6 and 9 numeral

* Moved files from lib/ to flower/

* Removed Note_head_side class.

* Updated the webpage to be a little more chatty.

* Small Local_key_engraver optimization: only lookup timing engraver once.

* Fixed dashed slurs

* Rewrite of Slur code.  Be much more picky about slur shapes. We try
to offset the slur instead of bending it too much

* Look at stem directions for tie direction.

* Compound multimeasure rests. Put measures_i_ variable in an element
property.  Made the symbol a lot wider.

* Time signature small cleanups.

1.3.22.h

88 files changed:
CHANGES
Documentation/faq.texi
Documentation/index.texi
Documentation/links.texi [deleted file]
Documentation/mail.texi
Documentation/topdocs/INSTALL.texi
Documentation/topdocs/index.tely
INSTALL.txt
ROADMAP [new file with mode: 0644]
TODO
VERSION
flower/include/file-storage.hh [new file with mode: 0644]
flower/include/input.hh [new file with mode: 0644]
flower/include/mapped-file-storage.hh [new file with mode: 0644]
flower/include/proto.hh [new file with mode: 0644]
flower/include/simple-file-storage.hh [new file with mode: 0644]
flower/include/warn.hh [new file with mode: 0644]
flower/input.cc [new file with mode: 0644]
flower/mapped-file-storage.cc [new file with mode: 0644]
flower/simple-file-storage.cc [new file with mode: 0644]
flower/source.cc [new file with mode: 0644]
flower/warn.cc [new file with mode: 0644]
input/test/diverse-spacing.ly [new file with mode: 0644]
input/test/mm-rests2.ly
input/test/multi-measure-rest.ly
input/test/slur-dash.ly
lib/GNUmakefile [deleted file]
lib/include/GNUmakefile [deleted file]
lib/include/file-storage.hh [deleted file]
lib/include/input.hh [deleted file]
lib/include/mapped-file-storage.hh [deleted file]
lib/include/proto.hh [deleted file]
lib/include/simple-file-storage.hh [deleted file]
lib/include/warn.hh [deleted file]
lib/input.cc [deleted file]
lib/mapped-file-storage.cc [deleted file]
lib/simple-file-storage.cc [deleted file]
lib/source.cc [deleted file]
lib/warn.cc [deleted file]
lily/GNUmakefile
lily/align-note-column-engraver.cc
lily/bar-script-engraver.cc
lily/beam.cc
lily/bezier-bow.cc
lily/dot-column-engraver.cc
lily/dot-column.cc
lily/grace-align-item.cc
lily/grace-position-engraver.cc
lily/include/bezier-bow.hh
lily/include/dot-column.hh
lily/include/grace-align-item.hh
lily/include/local-key-engraver.hh
lily/include/local-key-item.hh
lily/include/lookup.hh
lily/include/multi-measure-rest.hh
lily/include/note-head-side.hh
lily/include/paper-def.hh
lily/include/spacing-spanner.hh
lily/include/time-signature.hh
lily/local-key-engraver.cc
lily/local-key-item.cc
lily/lookup.cc
lily/multi-measure-rest-engraver.cc
lily/multi-measure-rest.cc
lily/note-head-side.cc [deleted file]
lily/paper-column.cc
lily/paper-def.cc
lily/score-engraver.cc
lily/script-column-engraver.cc
lily/slur.cc
lily/spacing-engraver.cc
lily/spacing-spanner.cc
lily/tie.cc
lily/time-signature-engraver.cc
lily/time-signature.cc
lily/tuplet-spanner.cc
ly/params.ly
ly/textscripts.ly
make/out/lilypond.lsm
make/out/lilypond.spec
make/toplevel.make.in
mf/feta-eindelijk.mf
mf/feta-generic.mf
mf/feta-nummer.mf
mf/feta-test11.mf [deleted file]
mf/slur.mf [new file with mode: 0644]
midi2ly/GNUmakefile
scm/lily.scm

diff --git a/CHANGES b/CHANGES
index da40977b30891795f95a2269fd9e7124ddc8d003..0951aa432f19bc9a94e02e62fb7ab2ce3a51e8bf 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,16 +1,35 @@
-1.3.23.jcn1
-===========
+1.3.23.uu1
+==========
+
+* Added a ROADMAP file explaining the source directory layout.
+
+* Minor tweak in the feta 6 and 9 numeral
+* Moved files from lib/ to flower/
+
+* Removed Note_head_side class.
+
+* Updated the webpage to be a little more chatty. 
 
-* Made quanting lists in scm/paper.scm comply with actual quantise_iv
-  algorithm: period = quants.top () - quants[0].  This fixes beam
-  vertical quanting problems.  Beam quanting should now actually be
-  better than 1.2.17, which has a symmetry problem as revealed by the
-  new input/test/beam-pos.ly.
+* Small Local_key_engraver optimization: only lookup timing engraver once.
+
+* Fixed dashed slurs
+
+* Rewrite of Slur code.  Be much more picky about slur shapes. We try
+to offset the slur instead of bending it too much
+
+* Look at stem directions for tie direction.
+
+* Compound multimeasure rests. Put measures_i_ variable in an element
+property.  Made the symbol a lot wider.
+
+* Time signature small cleanups.
 
 1.3.22.hwn2
 ===========
 
-* Symbols opposite to stem  (eg marcato) now get the proper glyph.
+* Symbols opposite to stem (eg marcato) now get the proper glyph in up
+version.
 
 * Breathing marks now have a direction by default.
 
@@ -36,7 +55,11 @@ definitions. Very handy when entering complicated scores.
 
 * Rewrote multi measure rest support: now they are entered as spanners
 (\commandspanrequest \start "rest"). RXXXX is an abbreviation for
-\commandspanrequest \start "rest" SXXXX \commandspanrequest \stop "rest".
+
+  { \commandspanrequest \start "rest"
+    SXXXX
+    \commandspanrequest \stop "rest"
+  }
 
 * Removed support of percent style repetitions. 
 
index a06e8c0665153fb4f9b0d18fcbc22b2c21566497..02bd7b599452ffd00d6a396ce523c14669517448 100644 (file)
@@ -120,14 +120,11 @@ be used by LilyPond, not by any other programs.
 @node Documentation, Language- mudela, Installing, FAQ - GNU LilyPond FAQs
 @section Documentation
 
-@subsubsection Why is the documentation/website/etc. so lousy?
+@subsubsection What  a sober website/manual you have there!
 
 LilyPond development is moving quite fast, documentation will often lag
-a bit behind.  We must always make a choice between writing more
-documentation, writing HTML, writing more code and answering email.
-
-If you think you can make a correction, or devised a solution that
-should be documented, please write it up, and us a diff.
+a bit behind.  But don't hesitate to point out inaccuracies. Whip up
+your mail reader and write to the mailing list.
 
 @node Language- mudela, Do you support -, Documentation, FAQ - GNU LilyPond FAQs
 @section Language: mudela
@@ -177,7 +174,7 @@ of (x,y) positions and symbols.  You can only sensibly do TeX stuff in
 the symbol string.  You can access the symbol string easily for some
 symbols (notably lyrics and @code{^"text"} commands).
 
-@node Do you support -, How do I -, Language- mudela, FAQ - GNU LilyPond FAQs
+@node Do you support -,  How do I -, Language- mudela, FAQ - GNU LilyPond FAQs
 @section Do you support ...
 
 @subsubsection Do you support pop songs (chords, single staff, lyrics)?
@@ -186,20 +183,18 @@ Yes, see the @file{twinkle-pop} example.
 
 @subsubsection Do you support guitar chord diagrams?
 
-No. Go ahead and send a patch.
-
-We ourselves don't play guitar, and don't know the fine points of this
-notation.  We would welcome anyone who could give this a try.
+No. We ourselves don't play guitar, and don't know the fine points of
+this notation.  We would welcome anyone who could give this a try.
 
 @subsubsection Do you support TAB notation?
 
-No. The same as for the previous subsubsection goes.
+No. The same as for the previous question goes.
 
 
 @subsubsection Do you support multiple staff-sizes?
 
 Yes.  At this time you can choose between 11, 13, 16, 19, 20, 23 and 20
-pt staff-size.  Use the @code{staffLineLeading} property for setting the
+pt staff-size.  Use the @code{staffSpace} property for setting the
 size of the staff, and @code{fontSize} for setting the size of the
 glyphs.
 
@@ -210,7 +205,7 @@ No.
 
 @subsubsection Do you support grace notes?
 
-Yes. See @file{input/test/grace.ly}
+Yes. See @file{input/test/grace.ly}.
 
 @node How do I -, Development, Do you support -, FAQ - GNU LilyPond FAQs
 @section How do I ....
@@ -225,8 +220,7 @@ You change the order lyrics and staves.  You have to name all
 staves (lyric and melodic), otherwise they will end up in the same
 staff/lyricline
 @example 
-       
-4      \score @{
+       \score @{
                < \melodic \type Staff = "treble" \trebleMelody
                  \lyric \type Lyrics = "tlyrics" \trebtext
                  \type Staff = "bass" \melodic \bassMelody        
@@ -300,17 +294,15 @@ There are several examples in the @file{mutopia} directory.
 
 See @file{input/test/bar-scripts.ly}.
 
-@subsubsection How do I change the tagline 'Lily was here'
+@subsubsection How do I change the tagline 'Lily was here'?
 
-In the @code{\header} field, add a @code{tagline} entry, eg
+In the @code{\header} field, add a @code{tagline} entry, e.g.
 @example 
 
 tagline="Typeset by GNU LilyPond"
  
 @end example 
 
-to get a bit less frivolous tagging.
-
 @node Development, Running, How do I -, FAQ - GNU LilyPond FAQs
 @section Development
 
index c01dbf6857d89ad0df8295a759da4583a2aaa804..2e0450d1b50ab3c1266abf5ed99f07b2c76828c6 100644 (file)
 @end itemize
 
 
-@unnumberedsubsec Links
-
-@itemize @bullet
-@item @uref{links.html, interesting links}
-@end itemize
-
 @unnumberedsubsec Logo:
 @itemize @bullet
 @item @uref{../pictures/out-www/lelieblond.png,  logo} in large size
diff --git a/Documentation/links.texi b/Documentation/links.texi
deleted file mode 100644 (file)
index 233bedb..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-\input texinfo @c -*-texinfo-*-
-@setfilename links.info
-@settitle links - Links to other related websites
-
-@node Top, , , (dir)
-@top
-
-This page contains links to sites which may be of interest to LilyPond
-users.
-
-@unnumberedsubsec Music
-
-@itemize @bullet
-@item @uref{http://www.geocities.com/Vienna/Studio/1714/} and
-@uref{http://johnsankey.webjump.com/} 
-       John Sankey has taken up the task of recording classical
-       music, and distributing the results at no cost.
-@item @uref{http://sca.uwaterloo.ca/Mutopia/}
-       Mutopia project (under construction).
-@item @uref{http://www4.smart.net/~jcovey/scores/}
-    Jeff Covey's guitar music.
-@item @uref{http://www.pbm.com/~lindahl/ravenscroft/modern}
-    Transcriptions of the music of Thomas Ravenscroft, partly using
-    LilyPond
-@end itemize
-
-@unnumberedsubsec Software
-
-@itemize @bullet
-@item @uref{http://www.zib.de/Visual/software/doc++/index.html}
-    A documentation system for C++ sources, which is used for the
-    LilyPond sources.
-@item @uref{ http://sound.condorow.net}
-    Dave Philips' Linux sound applications page
-@item @uref{http://www.home.fh-karlsruhe.de/~rost0001/web/musik/musik.html}
-    Stochastic composing using LilyPond 
-@end itemize
-
-@unnumberedsubsec Philosophy
-
-@itemize @bullet
-@item @uref{http://www.gnu.org/}
-    LilyPond is part of the GNU Project.  The GNU project is the name 
-    of Richard Stallman's effort to create a freely available 
-    system of software.
-@item @uref{http://www.ram.org/ramblings/philosophy/fmp.html}
-    Musings on free music, plus hints how to record your own (free) music.
-@end itemize
-
-
-@bye
index 7a6629630f618230a91b430d349070d0962dcffb..bd39936d83cbcbf1623c973940c81b88b5e67258 100644 (file)
@@ -6,51 +6,6 @@
 @top
 
 
-
-For programs which are part of the GNU music project, the following
-mailing list have been setup:
-
-@table @samp
-@item info-gnu-music@@gnu.org
-    A moderated list for information on the GNU Music project, to
-    subscribe: send mail with subject "subscribe" to
-    info-gnu-music-request@@gnu.org.  
-
-    As this list is moderated, normal people should ask to
-    @email{drl@@gnu.org, David R. Linn} or
-    @email{hanwen@@cs.uu.nl, Han-Wen} to forward announces instead of
-    sending it to info-gnu-music@@gnu.org
-
-Since the GNU Music project currently only has LilyPond, this list is
-mainly for announcing new versions of LilyPond.
-
-@uref{http://www.mail-archive.com/info-gnu-music@@gnu.org}
-
-@item help-gnu-music@@gnu.org
-    For help with programs from the GNU music project. To subscribe: send
-    mail with subject "subscribe" to
-    @email{help-gnu-music-request@@gnu.org}
-
-       Since the GNU Music project currently only has LilyPond, this list is mainly about using and extending LilyPond.
-
- @uref{http://www.mail-archive.com/help-gnu-music@@gnu.org}
-
-@item bug-gnu-music@@gnu.org
-    If you have bugreports, you should send them to this list. If you want
-    to read all bugreports, you should subscribe to this list.  To
-    subscribe: send mail with subject "subscribe" to
-    @email{bug-gnu-music-request@@gnu.org}
- @uref{http://www.mail-archive.com/bug-gnu-music@@gnu.org}
-@item gnu-music-discuss@@gnu.org,
-    For discussions concerning the GNU Music project, to subscribe: send
-    mail with subject "subscribe" to
-    @email{gnu-music-discuss-request@@gnu.org}
-    This list is archived at
-    @uref{http://www.mail-archive.com/gnu-music-discuss@@gnu.org}
-@end table
-
-Announces of new versions will be sent to info-gnu-music and
-gnu-music-discuss.
-
+The following mailing list have been setup for LilyPond.
 
 @bye
index 05c7cb45b12fe858770bfdee4c90fa6a47fd5ee9..b0a5d56567b1f25c52f89391819f6dc043a5a11a 100644 (file)
@@ -165,15 +165,16 @@ problem.
 
 You can then install the new pnmtopng into @file{/usr/local/bin/}
 
-@item Bib2html @uref{http://pertsserver.cs.uiuc.edu/~hull/bib2html.,http://pertsserver.cs.uiuc.edu/~hull/bib2html.}
+@item @uref{http://pertsserver.cs.uiuc.edu/~hull/bib2html,Bib2html}.
     Which, in turn depends on man2html for proper installation.
 man2html can be had from @uref{http://askdonald.ask.uni-karlsruhe.de/hppd/hpux/Networking/WWW/Man2html-1.05,http://askdonald.ask.uni-karlsruhe.de/hppd/hpux/Networking/WWW/Man2html-1.05}.
 
 The website will build without this utility, but you will not see our
 hypertextified bibliography.
 
-@item Doc++ (optional) to read the source code.
-
+@item @uref{http://www.zib.de/Visual/software/doc++/index.html,DOC++}
+    A documentation system for C++ sources, which is used for the
+    LilyPond sources.
 @end itemize
 
 @section Configuring and compiling
index b283504ec4682dee1aa83e973f9940b23b28779d..d6332d445ac74d2fc7c2d3e66e99439fe14215ff 100644 (file)
 
 @c something breaks on 3.12 f
 
+LilyPond is a music typesetter.  It produces beautiful sheet music using
+a high level description file as input. It excels at typesetting
+classical music, but you can also print pop-songs.  With LilyPond we
+hope to make music publication software available to anyone on the
+internet.
 
+The program also has limited MIDI functionality: you can write MIDI
+files with lilypond, and we have a simple MIDI to lilypond conversion
+tool, @file{midi2ly}.
 
-LilyPond is a music typesetter.  It produces beautiful sheet music
-using a high level description file as input.  LilyPond is part of 
-the GNU Project.
-
-
-
-@unnumberedsec Sheet music
-    
+LilyPond is free software. It is licensed under GNU General Public
+License, and it is part of the @uref{http://www.gnu.org/,GNU Project}.
 
 
 @quotation
@@ -33,48 +35,103 @@ the GNU Project.
 @end mudela 
 @end quotation
 
-@itemize @bullet
+    
 
-@item @uref{./input/out-www/index.html,Examples}:
+The version numbers are in Linux-kernel style: even unnumbered versions
+are `stable'. The webpages for the stable version reside at GNU, here:
+ @uref{http://www.gnu.org/software/lilypond}. Big enhancements go
+into the odd numbered versions, whose webpages are on 
+ @uref{http://www.cs.uu.nl/~hanwen/lilypond/,Han-Wen's site}.
 
-simple pieces, tests and bugs.  MIDI, PNG, PostScript, and Source.
+If want more information, you can browse the
+@uref{Documentation/user/out-www/lilypond.html, manual} or other
+@uref{Documentation/out-www/index.html, documentation}.
 
-@item @uref{./mutopia/out-www/index.html,Music in Mutopia}:
 
-LilyPond handling real music.  MIDI, view PNG, PostScript, and Source.
-@end itemize
+@unnumberedsec Mailing list
 
-@unnumberedsec More information
-    
+If you have questions do write to the mailing lists
+ (but don't forget to read the @uref{Documentation/out-www/faq.html,
+Frequently Asked Questions} first:
 
-@itemize @bullet
-@item @uref{Documentation/out-www/index.html, Documentation}
-@item @uref{Documentation/out-www/mail.html,Mailing Lists}
-@item @uref{./docxx/index.html,Source code documentation}
-@end itemize
 
-@unnumberedsec Sites
-    
+@table @samp
+@item info-gnu-music@@gnu.org
+        is a moderated list for information on the GNU Music project, to
+    subscribe: send mail with subject "subscribe" to
+    info-gnu-music-request@@gnu.org.  
+
+    As this list is moderated, normal people should ask to
+    @email{drl@@gnu.org, David R. Linn} or
+    @email{hanwen@@cs.uu.nl, Han-Wen} to forward announces instead of
+    sending it to info-gnu-music@@gnu.org
+
+   This list is archived at 
+    @uref{http://www.mail-archive.com/info-gnu-music@@gnu.org}
+
+@item help-gnu-music@@gnu.org
+    For help with LilyPond music project. To subscribe: send
+    mail with subject "subscribe" to
+    @email{help-gnu-music-request@@gnu.org} The archive is at 
+  @uref{http://www.mail-archive.com/help-gnu-music@@gnu.org}.
+
+@item bug-gnu-music@@gnu.org
+    If you have bugreports, you should send them to this list.  If you
+want to know about bugs, subscribe: send mail with subject "subscribe" to
+    @email{bug-gnu-music-request@@gnu.org}. The archive is at
+@uref{http://www.mail-archive.com/bug-gnu-music@@gnu.org}
+@item gnu-music-discuss@@gnu.org,
+    For discussions concerning LilyPond, to subscribe: send
+    mail with subject "subscribe" to
+    @email{gnu-music-discuss-request@@gnu.org}
+        The archive is at
+    @uref{http://www.mail-archive.com/gnu-music-discuss@@gnu.org}
+@end table
+
+@unnumberedsec News
+
+For the latest and greatest features, check out the
+@uref{Documentation/out-www/CHANGES.txt, Change Log}.
+
+@unnumberedsec Sheet music
+
+
+If you are interested in sheet music typeset by LilyPond, have a look at
+the examples included. We have @uref{./input/out-www/index.html,short
+examples} and @uref{./mutopia/out-www/index.html,longer examples}. The
+examples include sound bites  in MIDI, pictures in PNG, printable scores
+in PostScript, and LilyPond input.
+
+Other use LilyPond too.
+@uref{http://www.geocities.com/Vienna/Studio/1714/harpsichord.html,John
+Sankey}, harpsichordist to the internet, is typesetting the complete
+@uref{http://www.geocities.com/Vienna/Studio/1714/scarlattidwn.html/,sonatas
+by Scarlatti}. Jeff Covey, guitar player and overall nice guy, is
+putting @uref{http://www4.smart.net/~jcovey/scores/,guitar music} on the
+net. The @uref{http://sca.uwaterloo.ca/Mutopia/,Mutopia project} is a
+large archive of public domain sheet music under construction.
 
-@itemize @bullet
-@item @uref{http://www.gnu.org/software/lilypond}  LilyPond is part of the GNU
-project.  The webpages for the stable version reside at GNU.
 
-@item @uref{http://www.cs.uu.nl/~hanwen/lilypond/} Han-Wen's site
-has the development pages.
-@end itemize
 
 
 @unnumberedsec Download
 
+If you want to compile LilyPond from sources,  download them here:
 @itemize @bullet
-@item
-    Download development releases at
+@item    Download stable releases at
+@uref{ftp://ftp.gnu.org/gnu/lilypond/}
+@item    Download development releases at
 @uref{ftp://ftp.cs.uu.nl/pub/GNU/LilyPond/development/}
-
 @item Canadian mirror   @uref{http://sca.uwaterloo.ca/lilypond/} and @uref{ftp://sca.uwaterloo.ca/pub/} 
+@item Another site in Europe
+@uref{ftp://ftp.lilypond.org/pub/LilyPond/}
+@end itemize
+
+Installing and compiling requires many additional packages, which are
+listed in the  @uref{Documentation/topdocs/out-www/INSTALL.html, installation instructions}.
 
-@item Another site in Europe  @uref{ftp://ftp.lilypond.org/pub/LilyPond/}
+There are binaries available, but alas they are not updated for every version released.
+@itemize @bullet
 @item RedHat i386
 binary RPMs:  @uref{ftp://ftp.cs.uu.nl/pub/GNU/LilyPond/RedHat/RPMS/}  
 
index 847984f75ad2e35b11059db6e190308ba9f8d4f2..9f8ab35a43a3544acd0e11eb77ea2d12baf6c5e8 100644 (file)
@@ -153,18 +153,18 @@ additional conversion tools.
 
      You can then install the new pnmtopng into `/usr/local/bin/'
 
-   * Bib2html http://pertsserver.cs.uiuc.edu/~hull/bib2html.
-     (http://pertsserver.cs.uiuc.edu/~hull/bib2html.)      Which, in
-     turn depends on man2html for proper installation.  man2html can be
-     had from
+   * Bib2html (http://pertsserver.cs.uiuc.edu/~hull/bib2html).
+     Which, in turn depends on man2html for proper installation.
+     man2html can be had from
      http://askdonald.ask.uni-karlsruhe.de/hppd/hpux/Networking/WWW/Man2html-1.05
      (http://askdonald.ask.uni-karlsruhe.de/hppd/hpux/Networking/WWW/Man2html-1.05).
 
      The website will build without this utility, but you will not see
      our hypertextified bibliography.
 
-   * Doc++ (optional) to read the source code.
-
+   * DOC++ (http://www.zib.de/Visual/software/doc++/index.html)     A
+     documentation system for C++ sources, which is used for the
+     LilyPond sources.
 
 Configuring and compiling
 =========================
diff --git a/ROADMAP b/ROADMAP
new file mode 100644 (file)
index 0000000..3894dd5
--- /dev/null
+++ b/ROADMAP
@@ -0,0 +1,42 @@
+
+Here is an attempt at a simple explanation of the directory layout for
+LilyPond's source files.
+
+   Documentation/
+     bibliography/             .bib files with references to books and articles
+     ntweb/                    building on NT
+     pictures/                 .xpms of the logo
+     programmer/               programmers documentation, including a test document
+     topdocs/                  sources for the toplevel files (README.txt, INSTALL.txt, etc.)
+     user/                     User manuals
+   buildscripts/               Scripts used during the build process
+   debian/                     Files for building .deb packages.
+   flower/                     A generic library.
+     include/
+   input/                      Various input files
+     test/                     Test features: one file per feature
+     bugs/                     Show bugs
+     tutorial/                 Examples from the tutorial 
+   lily/                       Source code for LilyPond
+     include/
+   ly/                         Standard include files.
+   make/                       LilyPond specific Make subroutine files
+   mf/                         MetaFont sources for the feta font
+   midi2ly/                    midi2ly source code
+     include/
+   mutopia/                    Larger examples with full music pieces.
+     Coriolan/
+     D.Zipoli/
+     E.Satie/
+     F.Schubert/
+     Hymns/
+     J.S.Bach/
+     L.Mozart/
+     N.W.Gade/
+     W.A.Mozart/
+   intl/                       library for gettext
+   po/                         translations
+   ps/                         postscript library files
+   tex/                                TeX library files
+   scripts/                    User scripts
+   stepmake/                   Generic make subroutine files
diff --git a/TODO b/TODO
index 04eebc905ca75300408e65ca3046e0031f80e664..9d00e7270c374ce69dbb89cfc7330678f8b3bc2c 100644 (file)
--- a/TODO
+++ b/TODO
@@ -24,6 +24,7 @@ Grep -i for TODO, FIXME and ugh/ugr/urg.
 . * interstaff stems
 . * junk dstream output.
 . * Change website to be index to documentation.
+. * \grace { c d } c1 in midi
 . * \prop slurdir in grace notes
 . * \eltproperty "=Context" "Elt_name" "prop-name" #value
 . * script columns
@@ -36,6 +37,7 @@ verse=\lyrics {
 . * \accepts -> \acceptedby 
 . * context in embedded SCM errors.
 . * acc at tied note after linebreak.
+. * fontSize for time sigs and beams.
 . * fix font-naming and selecting
 . * add context information to warnings
 Paper:
@@ -147,18 +149,6 @@ of the grace notes and extend to the note after the grace notes.
 .  * don't  shorten stems/staffs closer to each other.
 .  * to space the staffs/staffgroups contained in the score.  
 .  * heavier beams?
-
-. * tuplets that are written as "number : note", for example
-   "3 : [image of a half note here]".  possible?
-. * a note with a circle after it, meaning:
-
-   note + circle = note + 1/4 of its length
-
-   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?
-. * deprecate hangOnClef.
 . * Abstraction for engravers:
 .  * make "in-between" engraver (Tie)
 .  * make wide_spanner_engraver (line_group_spanner, staff_symbol)
@@ -415,10 +405,6 @@ languages:
 .  * Glissando
 .  * trill
 
-. * Collisions
-.  * left/right note balls should be handled by Collision:
-       < \multi 2; { \stem 1; <b c> } { <f as b> } >
-
 . * Keys:
 .  * merge key{item} & localkey{item}?
 .  * spacing
diff --git a/VERSION b/VERSION
index 36db9aa7b46385bfae9d379dac07e7c6d2f0b0d6..3be69d6a1b04b93c5974b235b8dcfcce4b01414a 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -1,8 +1,8 @@
 PACKAGE_NAME=LilyPond
 MAJOR_VERSION=1
 MINOR_VERSION=3
-PATCH_LEVEL=23
-MY_PATCH_LEVEL=jcn1
+PATCH_LEVEL=24
+MY_PATCH_LEVEL=
 
 # use the above to send patches: MY_PATCH_LEVEL is always empty for a
 # released version.
diff --git a/flower/include/file-storage.hh b/flower/include/file-storage.hh
new file mode 100644 (file)
index 0000000..7fbccca
--- /dev/null
@@ -0,0 +1,27 @@
+/*
+  file-storage.hh -- declare File_storage, Mapped_file_storage, Simple_file_storage
+
+  source file of the GNU LilyPond music typesetter
+
+  (c)  1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+*/
+
+
+#ifndef FILE_STORAGE_HH
+#define FILE_STORAGE_HH
+
+#include "proto.hh"
+
+
+/**
+  store a file in-memory.
+ */
+class File_storage
+{
+public:
+  virtual char const* ch_C () const=0;
+  virtual int length_i () const=0;
+  virtual ~File_storage (){}
+};
+
+#endif // FILE_STORAGE_HH
diff --git a/flower/include/input.hh b/flower/include/input.hh
new file mode 100644 (file)
index 0000000..1c9e61c
--- /dev/null
@@ -0,0 +1,35 @@
+/*
+  input.hh -- declare Input
+
+  source file of the LilyPond music typesetter
+
+  (c)  1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+*/
+
+
+#ifndef INPUT_HH
+#define INPUT_HH
+
+#include "proto.hh"
+
+/**
+  Base class for anything that records its poisition in the parse file.
+ */
+class Input {
+  char const *defined_ch_C_ ;
+  Source_file * source_file_l_;
+public:
+    
+  void warning (String) const; // should use member func?
+  void non_fatal_error (String) const;
+  void error (String) const;
+  void message (String) const;
+  void set_spot (Input const &);
+  Input spot () const;
+  String location_str () const;
+  String line_number_str () const;
+  Input (Source_file*, char const*);
+  Input ();
+};
+
+#endif // INPUT_HH
diff --git a/flower/include/mapped-file-storage.hh b/flower/include/mapped-file-storage.hh
new file mode 100644 (file)
index 0000000..958e0b5
--- /dev/null
@@ -0,0 +1,40 @@
+/*   
+  mapped-file-storage.hh -- declare Mapped_file_storage
+  
+  source file of the GNU LilyPond music typesetter
+  
+  (c)  1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+  
+ */
+
+#ifndef MAPPED_FILE_STORAGE_HH
+#define MAPPED_FILE_STORAGE_HH
+
+
+
+#include "file-storage.hh"
+
+/**
+  Use mmap to "copy"  a file into memory
+ */
+class Mapped_file_storage:public File_storage
+{
+public:
+  Mapped_file_storage (String);    
+protected:
+  virtual char const* ch_C () const;
+  virtual int length_i () const;
+  virtual ~Mapped_file_storage ();
+private:
+  void open (String name);
+  void close ();
+
+  void map ();
+  void unmap ();
+  int fildes_i_;
+  off_t size_off_;
+  caddr_t data_caddr_;
+};
+
+#endif /* MAPPED_FILE_STORAGE_HH */
+
diff --git a/flower/include/proto.hh b/flower/include/proto.hh
new file mode 100644 (file)
index 0000000..7ddc874
--- /dev/null
@@ -0,0 +1,22 @@
+
+/*
+  proto.hh -- part of LilyPond
+
+  (c) 1996,97 Han-Wen Nienhuys
+*/
+
+#ifndef PROTO_HH
+#define PROTO_HH
+
+#include "flower-proto.hh"
+#include "real.hh"
+struct Duration;
+struct Duration_iterator;
+struct Source_file;
+struct Binary_source_file;
+struct Sources;
+struct File_storage;
+struct Mapped_file_storage;
+struct Simple_file_storage;
+
+#endif // PROTO_HH
diff --git a/flower/include/simple-file-storage.hh b/flower/include/simple-file-storage.hh
new file mode 100644 (file)
index 0000000..1202670
--- /dev/null
@@ -0,0 +1,33 @@
+/*   
+  simple-file-storage.hh -- declare 
+  
+  source file of the GNU LilyPond music typesetter
+  
+  (c)  1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+  
+ */
+
+#ifndef SIMPLE_FILE_STORAGE_HH
+#define SIMPLE_FILE_STORAGE_HH
+
+#include "file-storage.hh"
+
+/**
+  read file char by char and copy into a malloc array.
+ */
+class Simple_file_storage  : public File_storage
+{
+  char * data_p_;
+  int len_i_;
+
+  void load_stdin ();
+  void load_file (String);
+public:
+  virtual char const*ch_C () const;
+  virtual int length_i () const;
+  virtual ~Simple_file_storage ();
+  Simple_file_storage (String);
+};
+
+#endif /* SIMPLE_FILE_STORAGE_HH */
+
diff --git a/flower/include/warn.hh b/flower/include/warn.hh
new file mode 100644 (file)
index 0000000..e63d65c
--- /dev/null
@@ -0,0 +1,19 @@
+/*
+  warn.hh -- declare Error message functions
+
+  source file of the LilyPond music typesetter
+
+  (c)  1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+*/
+
+
+#ifndef WARN_HH
+#define WARN_HH
+
+#include "string.hh"
+
+void programming_error (String s);
+void warning (String message_str);
+void error (String message_str);
+void non_fatal_error (String);
+#endif // WARN_HH
diff --git a/flower/input.cc b/flower/input.cc
new file mode 100644 (file)
index 0000000..9413f7c
--- /dev/null
@@ -0,0 +1,116 @@
+/*
+ input.cc -- implement Input
+
+ source file of the LilyPond music typesetter
+
+ (c) 1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+*/
+#include <iostream.h>
+#include "proto.hh"
+#include "input.hh"
+#include "string.hh"
+#include "source.hh"
+#include "source-file.hh"
+
+Input::Input (Source_file*s, char const *cl)
+{
+  source_file_l_=s;
+  defined_ch_C_=cl;
+}
+
+Input::Input ()
+{
+  source_file_l_ = 0;
+  defined_ch_C_ = 0;
+}
+
+Input
+Input::spot () const
+{
+  return *this;
+}
+
+void
+Input::set_spot (Input const &i)
+{
+  *this = i;
+}
+
+/*
+  Produce almost GNU-compliant error message.  Lily used to be rather
+  GNU-compliant in this too, but correcting mudela is such a breeze if 
+  you('re edidor) know(s) the error column too (there's no GNU standard
+  on columns, is there?).
+
+  Format:
+
+    [file:line:column:][warning:]message
+
+ */
+void
+Input::message (String message_str) const
+{
+  String str;
+  
+  /*
+    marked "Work in prgress" in GNU iostream 
+      libg++ 2.7.2.8
+      libstdc++ 2.8.1
+
+    why not just return always -1 (unknown), 
+    iso breaking the interface?
+
+  int col = cerr.rdbuf ()->column ();
+
+   */
+
+  // well, we don't want to loose first warning...
+  int col = 1;
+  if (col > 0)
+    str += "\n";
+  
+  if (source_file_l_)
+    str += location_str () + String (": ");
+
+  str += message_str;
+  if (source_file_l_)
+   {
+    str += ":\n";
+    str += source_file_l_->error_str (defined_ch_C_);
+   }
+  cerr << str << endl;
+}
+
+void
+Input::warning (String message_str) const
+{
+  message (_ ("warning: ") + message_str);
+}
+void
+Input::error (String s) const
+{
+  message (_ ("error: ")+ s);
+}
+
+void
+Input::non_fatal_error (String s) const
+{
+  message (_ ("Non fatal error: ") + s);
+}
+String
+Input::location_str () const
+{
+  if (source_file_l_)
+    return source_file_l_->file_line_column_str (defined_ch_C_);
+  else
+    return "(" + _ ("position unknown") + ")";
+}
+
+String
+Input::line_number_str () const
+{
+  if (source_file_l_)
+    return to_str (source_file_l_->line_i (defined_ch_C_));
+  else
+    return "?";
+}
diff --git a/flower/mapped-file-storage.cc b/flower/mapped-file-storage.cc
new file mode 100644 (file)
index 0000000..329f21e
--- /dev/null
@@ -0,0 +1,140 @@
+#ifdef HAIRY_STUFF
+
+/*
+  file-storage.cc -- implement Mapped_file_storage
+
+  source file of the GNU LilyPond music typesetter
+
+  (c)  1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+  Jan Nieuwenhuizen <janneke@gnu.org>.
+
+  Nextstep fixes by tiggr@ics.ele.tue.nl
+*/
+
+#include <sys/types.h>         // open, mmap
+#include <sys/stat.h>          // open
+#include <sys/mman.h>          // mmap
+#include <limits.h>            // INT_MAX
+#include <fcntl.h>             // open
+#include <unistd.h>            // close, stat
+#include <stdio.h>             // fdopen
+#include <string.h>            // strerror
+#include <errno.h>             // errno
+
+
+
+#ifdef __NeXT__
+#include <mach/mach.h>
+#include <mach/mach_traps.h>
+#include <mach/mach_error.h>
+#endif
+
+#include "string.hh"
+#include "proto.hh"
+#include "warn.hh"
+#include "file-storage.hh"
+
+Mapped_file_storage::Mapped_file_storage (String s)
+{
+  data_caddr_ = 0;
+  fildes_i_ = 0;
+  size_off_ = 0;
+  open (s);
+}
+
+char const*
+Mapped_file_storage::ch_C () const
+{
+  return (char const*)data_caddr_;
+}
+
+void
+Mapped_file_storage::map ()
+{
+  if (fildes_i_ == -1)
+    return;
+  
+#ifdef __NeXT__
+   /* Should be #if !HAVE_MMAP && HAVE_MAP_FD...  */
+   {
+     vm_offset_t address;
+     kern_return_t r;
+     r = map_fd (fildes_i_, (vm_offset_t) 0, &address, TRUE, size_off_);
+     if (r != KERN_SUCCESS)
+       warning (String ("map_fd: ") + mach_error_string (r));
+     else
+       data_caddr_ = (char *) address;
+   }
+#else
+
+  data_caddr_ = (caddr_t)mmap ((void*)0, size_off_, PROT_READ, MAP_SHARED, fildes_i_, 0);
+
+  if ((int)data_caddr_ == -1)
+    warning (_ ("Can't map file") + ": " + strerror (errno));
+
+#endif
+}
+
+
+void
+Mapped_file_storage::open (String name_str)
+{
+  fildes_i_ = ::open (name_str.ch_C (), O_RDONLY);
+
+  if (fildes_i_ == -1)
+    {
+      warning (_f ("Can't open file: `%s'", name_str)
+       + ": " + strerror (errno));
+      return;
+    }
+
+  struct stat file_stat;
+  fstat (fildes_i_, &file_stat);
+  size_off_ = file_stat.st_size;
+  map ();
+}
+
+void
+Mapped_file_storage::unmap ()
+{
+  if (data_caddr_)
+    {
+#ifdef __NeXT__
+       kern_return_t r;
+       r = vm_deallocate (task_self (), (vm_address_t) data_caddr_, 
+size_off_);
+       if (r != KERN_SUCCESS)
+       warning (String ("vm_deallocate: ") + mach_error_string (r));
+#else
+       munmap (data_caddr_, size_off_);
+#endif
+       
+      data_caddr_ = 0;
+      size_off_ = 0;
+    }
+}
+
+void
+Mapped_file_storage::close ()
+{
+  unmap ();
+  if (fildes_i_)
+    {
+      ::close (fildes_i_);
+      fildes_i_ = 0;
+    }
+}
+
+int
+Mapped_file_storage::length_i () const
+{
+  return size_off_;
+}
+
+Mapped_file_storage::~Mapped_file_storage ()
+{
+  close ();
+}
+#endif
diff --git a/flower/simple-file-storage.cc b/flower/simple-file-storage.cc
new file mode 100644 (file)
index 0000000..b7f94ac
--- /dev/null
@@ -0,0 +1,99 @@
+/*
+  simple-file-storage.cc -- implement Simple_file_storage
+
+  source file of the GNU LilyPond music typesetter
+
+  (c)  1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+*/
+
+#include <stdio.h>
+
+#ifndef SEEK_END
+#define SEEK_END 2
+#endif
+
+#include "simple-file-storage.hh"
+#include "array.hh"
+#include "string.hh"
+#include "warn.hh"
+
+void
+Simple_file_storage::load_stdin ()
+{
+  len_i_ = 0;
+
+  int c;
+  Array<char> ch_arr;
+  while ((c = fgetc (stdin)) != EOF)
+    ch_arr.push (c);
+  len_i_ = ch_arr.size ();
+  data_p_ = ch_arr.remove_array_p ();
+}
+
+void
+Simple_file_storage::load_file (String s)
+{
+  /*
+    let's hope that "b" opens anything binary, and does not apply
+    CR/LF translation
+    */
+  FILE * f =  fopen (s.ch_C (), "rb");
+
+  if (!f)
+    {
+      warning (_f ("Can't open file: `%s'", s));
+      return ;
+    }
+
+  int ret = fseek (f, 0, SEEK_END);
+  len_i_ = ftell (f);
+  rewind (f);
+  data_p_ = new char[len_i_+1];
+  data_p_[len_i_] = 0;
+  ret = fread (data_p_, sizeof (char), len_i_, f);
+
+  if  (ret!=len_i_)
+    warning (_f ("Huh?  Got %d, expected %d characters", ret, len_i_));
+
+  fclose (f);
+}
+
+/**
+  Stupid but foolproof way of opening files.
+
+  TODO
+  Should check IO status
+
+  This is of course a build it yourself version of mmap, so we should
+  have been using that..., but this is simple & portable
+  
+*/
+
+Simple_file_storage::Simple_file_storage (String s)
+{
+  data_p_ = 0;
+  len_i_ = 0;
+
+  if (!s.length_i () || (s == "-"))
+    load_stdin ();
+  else
+    load_file (s);
+}
+
+char const*
+Simple_file_storage::ch_C () const
+{
+  return data_p_;
+}
+
+int
+Simple_file_storage::length_i () const
+{
+  return len_i_;
+}
+
+
+Simple_file_storage::~Simple_file_storage ()
+{
+  delete []data_p_;
+}
diff --git a/flower/source.cc b/flower/source.cc
new file mode 100644 (file)
index 0000000..f3b5874
--- /dev/null
@@ -0,0 +1,86 @@
+/*
+  source.cc -- implement Sources
+
+  source file of the LilyPond music typesetter
+
+  (c)  1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+*/
+
+
+#include <assert.h>
+#include "killing-cons.tcc"
+#include "binary-source-file.hh"
+#include "string.hh"
+#include "proto.hh"
+#include "source-file.hh"
+#include "source.hh"
+#include "file-path.hh"
+
+Sources::Sources ()
+{
+  sourcefile_p_list_ = 0;
+  path_C_= 0;
+  binary_b_ = false;
+}
+
+void
+Sources::set_binary (bool bo)
+{
+  binary_b_ = bo;
+}
+
+void
+Sources::set_path (File_path *f_C)
+{
+  path_C_ = f_C;
+}
+
+/**
+  open a file
+
+  @param file_str the file to be opened, name might be changed if it
+  is found in a search path. UGH!
+
+  @return 0 if no file found
+  */
+Source_file*
+Sources::get_file_l (String &file_str) //UGH
+{
+  if ((file_str != "-") && path_C_)
+    {
+      String file_str_o = path_C_->find (file_str); 
+      if ((file_str_o == "") && (file_str != ""))
+       return 0;
+      file_str = file_str_o;
+    }
+  Source_file * f_p = (!binary_b_) ?
+    new Source_file (file_str) : new Binary_source_file (file_str);
+  add (f_p);
+  return f_p;
+}
+
+void
+Sources::add (Source_file* sourcefile_p)
+{
+  sourcefile_p_list_ = new Killing_cons<Source_file> (sourcefile_p, sourcefile_p_list_);
+}
+
+Sources::~Sources ()
+{
+  delete sourcefile_p_list_;
+}
+/**
+  search the list for file whose map contains pointer #ch_C#
+
+  @return 0 if not found.
+  */
+Source_file*
+Sources::sourcefile_l (char const* ch_C)
+{
+
+  for (Cons<Source_file> *i = sourcefile_p_list_; i; i = i->next_)
+    if (i->car_->in_b (ch_C))  
+      return i->car_;
+  return 0;
+}
+
diff --git a/flower/warn.cc b/flower/warn.cc
new file mode 100644 (file)
index 0000000..1df7cda
--- /dev/null
@@ -0,0 +1,37 @@
+#include <stream.h>
+#include "warn.hh"
+
+
+void
+error (String s)
+{
+  cerr <<  _ ("error: ") << s << '\n';
+
+  exit (1);
+}
+
+void
+non_fatal_error (String s)
+{
+  cerr <<  _ ("error: ") << s << '\n';
+}
+
+void
+warning (String m)
+{
+  cerr << _ ("warning: ") <<m <<endl;
+
+}
+
+void
+message (String m)
+{
+  cerr << m<<endl;
+}
+
+void
+programming_error (String s)
+{
+  cerr << _("programming error: ") << s << _(" (Continuing; cross thumbs)") << '\n';
+}
+
diff --git a/input/test/diverse-spacing.ly b/input/test/diverse-spacing.ly
new file mode 100644 (file)
index 0000000..6aa5609
--- /dev/null
@@ -0,0 +1,14 @@
+
+% a few 32nds shouldn't stretch spacing enormously.
+\score {
+\notes { \time 3/4;
+\relative c'{ 
+  g'8. c16 es8. d16 c8. bes32 as g8. c,16
+  es4 r8 es |
+  [d es f g as c ]
+  b4 g r
+}
+
+}
+\paper  { linewidth = -1.0; }
+}
index dc5adffbed6168c1cc31d884fd29ad031c906045..eb90cbd8b10e8b15539d3f926b22d6de5b101315 100644 (file)
@@ -16,6 +16,6 @@ R1*11 |
 }
 
 \score { < \context Staff \thenotes
-       \context NoteNames \thenotes
+
        >
 }
index 57b51f116a2b6ee00f01b27c70cef0a054ae20e9..c0e477979c9cb9899b5e627e383f1d7ee161cbe7 100644 (file)
@@ -1,5 +1,6 @@
 
-\score { \notes { \time 3/4; \key cis; R2.*5 R2. R2.*5 }
+\score { \notes { \time 3/4; \key cis;
+           R2.*15 R2. R2.*7 }
        \paper {
        \translator {
                \ScoreContext
index d6e63b23d0e903259bb3d8c5b1d4704d712d792a..45fc0460192667ea197917d3c9a9f21222e4a085 100644 (file)
@@ -7,7 +7,7 @@
                c( d e )c |
                \slurnormal
                c( d e )c |
-               \property Voice.slurDash = 3
+               \property Voice.slurDash = #0.0
                c( d e )c |
                \slurnormal
                c( d e )c |
diff --git a/lib/GNUmakefile b/lib/GNUmakefile
deleted file mode 100644 (file)
index d9e0c99..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-# lib/Makefile
-
-depth = ..
-
-NAME = lily
-SUBDIRS = include
-# MODULE_LIBS= $(depth)/flower
-MODULE_CXXFLAGS += -D_REENTRANT
-STEPMAKE_TEMPLATES=library c++ po
-
-include $(depth)/make/stepmake.make 
-
-
-bla:
-       echo $(ALL_C_SOURCES)
-       echo $(ALL_C_SOURCES)
diff --git a/lib/include/GNUmakefile b/lib/include/GNUmakefile
deleted file mode 100644 (file)
index 7dccdbc..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-# lib/include/Makefile
-
-depth = ../..
-STEPMAKE_TEMPLATES=c++
-
-include $(depth)/make/stepmake.make
-
-
-
diff --git a/lib/include/file-storage.hh b/lib/include/file-storage.hh
deleted file mode 100644 (file)
index 7fbccca..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
-  file-storage.hh -- declare File_storage, Mapped_file_storage, Simple_file_storage
-
-  source file of the GNU LilyPond music typesetter
-
-  (c)  1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
-*/
-
-
-#ifndef FILE_STORAGE_HH
-#define FILE_STORAGE_HH
-
-#include "proto.hh"
-
-
-/**
-  store a file in-memory.
- */
-class File_storage
-{
-public:
-  virtual char const* ch_C () const=0;
-  virtual int length_i () const=0;
-  virtual ~File_storage (){}
-};
-
-#endif // FILE_STORAGE_HH
diff --git a/lib/include/input.hh b/lib/include/input.hh
deleted file mode 100644 (file)
index 1c9e61c..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
-  input.hh -- declare Input
-
-  source file of the LilyPond music typesetter
-
-  (c)  1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
-*/
-
-
-#ifndef INPUT_HH
-#define INPUT_HH
-
-#include "proto.hh"
-
-/**
-  Base class for anything that records its poisition in the parse file.
- */
-class Input {
-  char const *defined_ch_C_ ;
-  Source_file * source_file_l_;
-public:
-    
-  void warning (String) const; // should use member func?
-  void non_fatal_error (String) const;
-  void error (String) const;
-  void message (String) const;
-  void set_spot (Input const &);
-  Input spot () const;
-  String location_str () const;
-  String line_number_str () const;
-  Input (Source_file*, char const*);
-  Input ();
-};
-
-#endif // INPUT_HH
diff --git a/lib/include/mapped-file-storage.hh b/lib/include/mapped-file-storage.hh
deleted file mode 100644 (file)
index 958e0b5..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*   
-  mapped-file-storage.hh -- declare Mapped_file_storage
-  
-  source file of the GNU LilyPond music typesetter
-  
-  (c)  1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
-  
- */
-
-#ifndef MAPPED_FILE_STORAGE_HH
-#define MAPPED_FILE_STORAGE_HH
-
-
-
-#include "file-storage.hh"
-
-/**
-  Use mmap to "copy"  a file into memory
- */
-class Mapped_file_storage:public File_storage
-{
-public:
-  Mapped_file_storage (String);    
-protected:
-  virtual char const* ch_C () const;
-  virtual int length_i () const;
-  virtual ~Mapped_file_storage ();
-private:
-  void open (String name);
-  void close ();
-
-  void map ();
-  void unmap ();
-  int fildes_i_;
-  off_t size_off_;
-  caddr_t data_caddr_;
-};
-
-#endif /* MAPPED_FILE_STORAGE_HH */
-
diff --git a/lib/include/proto.hh b/lib/include/proto.hh
deleted file mode 100644 (file)
index 7ddc874..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-
-/*
-  proto.hh -- part of LilyPond
-
-  (c) 1996,97 Han-Wen Nienhuys
-*/
-
-#ifndef PROTO_HH
-#define PROTO_HH
-
-#include "flower-proto.hh"
-#include "real.hh"
-struct Duration;
-struct Duration_iterator;
-struct Source_file;
-struct Binary_source_file;
-struct Sources;
-struct File_storage;
-struct Mapped_file_storage;
-struct Simple_file_storage;
-
-#endif // PROTO_HH
diff --git a/lib/include/simple-file-storage.hh b/lib/include/simple-file-storage.hh
deleted file mode 100644 (file)
index 1202670..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/*   
-  simple-file-storage.hh -- declare 
-  
-  source file of the GNU LilyPond music typesetter
-  
-  (c)  1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
-  
- */
-
-#ifndef SIMPLE_FILE_STORAGE_HH
-#define SIMPLE_FILE_STORAGE_HH
-
-#include "file-storage.hh"
-
-/**
-  read file char by char and copy into a malloc array.
- */
-class Simple_file_storage  : public File_storage
-{
-  char * data_p_;
-  int len_i_;
-
-  void load_stdin ();
-  void load_file (String);
-public:
-  virtual char const*ch_C () const;
-  virtual int length_i () const;
-  virtual ~Simple_file_storage ();
-  Simple_file_storage (String);
-};
-
-#endif /* SIMPLE_FILE_STORAGE_HH */
-
diff --git a/lib/include/warn.hh b/lib/include/warn.hh
deleted file mode 100644 (file)
index e63d65c..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
-  warn.hh -- declare Error message functions
-
-  source file of the LilyPond music typesetter
-
-  (c)  1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
-*/
-
-
-#ifndef WARN_HH
-#define WARN_HH
-
-#include "string.hh"
-
-void programming_error (String s);
-void warning (String message_str);
-void error (String message_str);
-void non_fatal_error (String);
-#endif // WARN_HH
diff --git a/lib/input.cc b/lib/input.cc
deleted file mode 100644 (file)
index 9413f7c..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- input.cc -- implement Input
-
- source file of the LilyPond music typesetter
-
- (c) 1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
-*/
-#include <iostream.h>
-#include "proto.hh"
-#include "input.hh"
-#include "string.hh"
-#include "source.hh"
-#include "source-file.hh"
-
-Input::Input (Source_file*s, char const *cl)
-{
-  source_file_l_=s;
-  defined_ch_C_=cl;
-}
-
-Input::Input ()
-{
-  source_file_l_ = 0;
-  defined_ch_C_ = 0;
-}
-
-Input
-Input::spot () const
-{
-  return *this;
-}
-
-void
-Input::set_spot (Input const &i)
-{
-  *this = i;
-}
-
-/*
-  Produce almost GNU-compliant error message.  Lily used to be rather
-  GNU-compliant in this too, but correcting mudela is such a breeze if 
-  you('re edidor) know(s) the error column too (there's no GNU standard
-  on columns, is there?).
-
-  Format:
-
-    [file:line:column:][warning:]message
-
- */
-void
-Input::message (String message_str) const
-{
-  String str;
-  
-  /*
-    marked "Work in prgress" in GNU iostream 
-      libg++ 2.7.2.8
-      libstdc++ 2.8.1
-
-    why not just return always -1 (unknown), 
-    iso breaking the interface?
-
-  int col = cerr.rdbuf ()->column ();
-
-   */
-
-  // well, we don't want to loose first warning...
-  int col = 1;
-  if (col > 0)
-    str += "\n";
-  
-  if (source_file_l_)
-    str += location_str () + String (": ");
-
-  str += message_str;
-  if (source_file_l_)
-   {
-    str += ":\n";
-    str += source_file_l_->error_str (defined_ch_C_);
-   }
-  cerr << str << endl;
-}
-
-void
-Input::warning (String message_str) const
-{
-  message (_ ("warning: ") + message_str);
-}
-void
-Input::error (String s) const
-{
-  message (_ ("error: ")+ s);
-}
-
-void
-Input::non_fatal_error (String s) const
-{
-  message (_ ("Non fatal error: ") + s);
-}
-String
-Input::location_str () const
-{
-  if (source_file_l_)
-    return source_file_l_->file_line_column_str (defined_ch_C_);
-  else
-    return "(" + _ ("position unknown") + ")";
-}
-
-String
-Input::line_number_str () const
-{
-  if (source_file_l_)
-    return to_str (source_file_l_->line_i (defined_ch_C_));
-  else
-    return "?";
-}
diff --git a/lib/mapped-file-storage.cc b/lib/mapped-file-storage.cc
deleted file mode 100644 (file)
index 329f21e..0000000
+++ /dev/null
@@ -1,140 +0,0 @@
-#ifdef HAIRY_STUFF
-
-/*
-  file-storage.cc -- implement Mapped_file_storage
-
-  source file of the GNU LilyPond music typesetter
-
-  (c)  1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
-  Jan Nieuwenhuizen <janneke@gnu.org>.
-
-  Nextstep fixes by tiggr@ics.ele.tue.nl
-*/
-
-#include <sys/types.h>         // open, mmap
-#include <sys/stat.h>          // open
-#include <sys/mman.h>          // mmap
-#include <limits.h>            // INT_MAX
-#include <fcntl.h>             // open
-#include <unistd.h>            // close, stat
-#include <stdio.h>             // fdopen
-#include <string.h>            // strerror
-#include <errno.h>             // errno
-
-
-
-#ifdef __NeXT__
-#include <mach/mach.h>
-#include <mach/mach_traps.h>
-#include <mach/mach_error.h>
-#endif
-
-#include "string.hh"
-#include "proto.hh"
-#include "warn.hh"
-#include "file-storage.hh"
-
-Mapped_file_storage::Mapped_file_storage (String s)
-{
-  data_caddr_ = 0;
-  fildes_i_ = 0;
-  size_off_ = 0;
-  open (s);
-}
-
-char const*
-Mapped_file_storage::ch_C () const
-{
-  return (char const*)data_caddr_;
-}
-
-void
-Mapped_file_storage::map ()
-{
-  if (fildes_i_ == -1)
-    return;
-  
-#ifdef __NeXT__
-   /* Should be #if !HAVE_MMAP && HAVE_MAP_FD...  */
-   {
-     vm_offset_t address;
-     kern_return_t r;
-     r = map_fd (fildes_i_, (vm_offset_t) 0, &address, TRUE, size_off_);
-     if (r != KERN_SUCCESS)
-       warning (String ("map_fd: ") + mach_error_string (r));
-     else
-       data_caddr_ = (char *) address;
-   }
-#else
-
-  data_caddr_ = (caddr_t)mmap ((void*)0, size_off_, PROT_READ, MAP_SHARED, fildes_i_, 0);
-
-  if ((int)data_caddr_ == -1)
-    warning (_ ("Can't map file") + ": " + strerror (errno));
-
-#endif
-}
-
-
-void
-Mapped_file_storage::open (String name_str)
-{
-  fildes_i_ = ::open (name_str.ch_C (), O_RDONLY);
-
-  if (fildes_i_ == -1)
-    {
-      warning (_f ("Can't open file: `%s'", name_str)
-       + ": " + strerror (errno));
-      return;
-    }
-
-  struct stat file_stat;
-  fstat (fildes_i_, &file_stat);
-  size_off_ = file_stat.st_size;
-  map ();
-}
-
-void
-Mapped_file_storage::unmap ()
-{
-  if (data_caddr_)
-    {
-#ifdef __NeXT__
-       kern_return_t r;
-       r = vm_deallocate (task_self (), (vm_address_t) data_caddr_, 
-size_off_);
-       if (r != KERN_SUCCESS)
-       warning (String ("vm_deallocate: ") + mach_error_string (r));
-#else
-       munmap (data_caddr_, size_off_);
-#endif
-       
-      data_caddr_ = 0;
-      size_off_ = 0;
-    }
-}
-
-void
-Mapped_file_storage::close ()
-{
-  unmap ();
-  if (fildes_i_)
-    {
-      ::close (fildes_i_);
-      fildes_i_ = 0;
-    }
-}
-
-int
-Mapped_file_storage::length_i () const
-{
-  return size_off_;
-}
-
-Mapped_file_storage::~Mapped_file_storage ()
-{
-  close ();
-}
-#endif
diff --git a/lib/simple-file-storage.cc b/lib/simple-file-storage.cc
deleted file mode 100644 (file)
index b7f94ac..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
-  simple-file-storage.cc -- implement Simple_file_storage
-
-  source file of the GNU LilyPond music typesetter
-
-  (c)  1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
-*/
-
-#include <stdio.h>
-
-#ifndef SEEK_END
-#define SEEK_END 2
-#endif
-
-#include "simple-file-storage.hh"
-#include "array.hh"
-#include "string.hh"
-#include "warn.hh"
-
-void
-Simple_file_storage::load_stdin ()
-{
-  len_i_ = 0;
-
-  int c;
-  Array<char> ch_arr;
-  while ((c = fgetc (stdin)) != EOF)
-    ch_arr.push (c);
-  len_i_ = ch_arr.size ();
-  data_p_ = ch_arr.remove_array_p ();
-}
-
-void
-Simple_file_storage::load_file (String s)
-{
-  /*
-    let's hope that "b" opens anything binary, and does not apply
-    CR/LF translation
-    */
-  FILE * f =  fopen (s.ch_C (), "rb");
-
-  if (!f)
-    {
-      warning (_f ("Can't open file: `%s'", s));
-      return ;
-    }
-
-  int ret = fseek (f, 0, SEEK_END);
-  len_i_ = ftell (f);
-  rewind (f);
-  data_p_ = new char[len_i_+1];
-  data_p_[len_i_] = 0;
-  ret = fread (data_p_, sizeof (char), len_i_, f);
-
-  if  (ret!=len_i_)
-    warning (_f ("Huh?  Got %d, expected %d characters", ret, len_i_));
-
-  fclose (f);
-}
-
-/**
-  Stupid but foolproof way of opening files.
-
-  TODO
-  Should check IO status
-
-  This is of course a build it yourself version of mmap, so we should
-  have been using that..., but this is simple & portable
-  
-*/
-
-Simple_file_storage::Simple_file_storage (String s)
-{
-  data_p_ = 0;
-  len_i_ = 0;
-
-  if (!s.length_i () || (s == "-"))
-    load_stdin ();
-  else
-    load_file (s);
-}
-
-char const*
-Simple_file_storage::ch_C () const
-{
-  return data_p_;
-}
-
-int
-Simple_file_storage::length_i () const
-{
-  return len_i_;
-}
-
-
-Simple_file_storage::~Simple_file_storage ()
-{
-  delete []data_p_;
-}
diff --git a/lib/source.cc b/lib/source.cc
deleted file mode 100644 (file)
index f3b5874..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
-  source.cc -- implement Sources
-
-  source file of the LilyPond music typesetter
-
-  (c)  1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
-*/
-
-
-#include <assert.h>
-#include "killing-cons.tcc"
-#include "binary-source-file.hh"
-#include "string.hh"
-#include "proto.hh"
-#include "source-file.hh"
-#include "source.hh"
-#include "file-path.hh"
-
-Sources::Sources ()
-{
-  sourcefile_p_list_ = 0;
-  path_C_= 0;
-  binary_b_ = false;
-}
-
-void
-Sources::set_binary (bool bo)
-{
-  binary_b_ = bo;
-}
-
-void
-Sources::set_path (File_path *f_C)
-{
-  path_C_ = f_C;
-}
-
-/**
-  open a file
-
-  @param file_str the file to be opened, name might be changed if it
-  is found in a search path. UGH!
-
-  @return 0 if no file found
-  */
-Source_file*
-Sources::get_file_l (String &file_str) //UGH
-{
-  if ((file_str != "-") && path_C_)
-    {
-      String file_str_o = path_C_->find (file_str); 
-      if ((file_str_o == "") && (file_str != ""))
-       return 0;
-      file_str = file_str_o;
-    }
-  Source_file * f_p = (!binary_b_) ?
-    new Source_file (file_str) : new Binary_source_file (file_str);
-  add (f_p);
-  return f_p;
-}
-
-void
-Sources::add (Source_file* sourcefile_p)
-{
-  sourcefile_p_list_ = new Killing_cons<Source_file> (sourcefile_p, sourcefile_p_list_);
-}
-
-Sources::~Sources ()
-{
-  delete sourcefile_p_list_;
-}
-/**
-  search the list for file whose map contains pointer #ch_C#
-
-  @return 0 if not found.
-  */
-Source_file*
-Sources::sourcefile_l (char const* ch_C)
-{
-
-  for (Cons<Source_file> *i = sourcefile_p_list_; i; i = i->next_)
-    if (i->car_->in_b (ch_C))  
-      return i->car_;
-  return 0;
-}
-
diff --git a/lib/warn.cc b/lib/warn.cc
deleted file mode 100644 (file)
index 1df7cda..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-#include <stream.h>
-#include "warn.hh"
-
-
-void
-error (String s)
-{
-  cerr <<  _ ("error: ") << s << '\n';
-
-  exit (1);
-}
-
-void
-non_fatal_error (String s)
-{
-  cerr <<  _ ("error: ") << s << '\n';
-}
-
-void
-warning (String m)
-{
-  cerr << _ ("warning: ") <<m <<endl;
-
-}
-
-void
-message (String m)
-{
-  cerr << m<<endl;
-}
-
-void
-programming_error (String s)
-{
-  cerr << _("programming error: ") << s << _(" (Continuing; cross thumbs)") << '\n';
-}
-
index 29df5200624321709833809c90b5639ad93adc05..37456760c9346e62af6933c3e3e67a45fc817ea3 100644 (file)
@@ -6,8 +6,8 @@ depth = ..
 NAME = lilypond
 SUBDIRS = include
 
-MODULE_LIBS=$(depth)/lib $(depth)/flower 
-MODULE_INCLUDES=$(depth)/lib/include $(depth)/flower/include 
+MODULE_LIBS=$(depth)/flower 
+MODULE_INCLUDES= $(depth)/flower/include 
 MODULE_CXXFLAGS=
 HELP2MAN_EXECS = lilypond
 
index a5e3c57bb8b3d19148998f3595512dc98f5fa462..f1ce54bfc80b112f30cc632da35197880223eda0 100644 (file)
@@ -13,6 +13,7 @@
 #include "local-key-item.hh"
 #include "warn.hh"
 #include "directional-element-interface.hh"
+#include "side-position-interface.hh"
 
 /**
    Catch notes, and put them in a row. Used for aligning grace notes.
@@ -44,6 +45,8 @@ void
 Align_note_column_engraver::do_creation_processing ()
 {
   align_item_p_ = new Grace_align_item;
+  side_position (align_item_p_).set_axis (X_AXIS);
+  side_position (align_item_p_).set_direction (LEFT);  
   // needed  for setting font size.
   announce_element (Score_element_info (align_item_p_, 0));
 }
index 0902c377e700ed2492afd3e492032e3100ea1b44..98d4c92fdf098d65d1c00aed6aa255254d9c9a44 100644 (file)
 #include "paper-column.hh"
 #include "paper-def.hh"
 #include "dimension-cache.hh"
-
+#include "staff-symbol-referencer.hh"
+#include "side-position-interface.hh"
+#include "staff-symbol.hh"
 
 Bar_script_engraver::Bar_script_engraver ()
 {
   axis_ = Y_AXIS;
   text_p_ =0;
-
   visibility_lambda_ 
     = ly_eval_str ("non-postbreak-visibility");
 }
@@ -101,6 +102,11 @@ Bar_script_engraver::do_pre_move_processing ()
 {
   if (text_p_)
     {
+      Staff_symbol * st = staff_symbol_referencer (text_p_).staff_symbol_l();
+      
+      if (st)
+       side_position (text_p_).add_support (st);
+      
       typeset_element (text_p_);
       text_p_ =0;
     }
index 6dc4bb25c41600f31b916f7e8cdb00116ab36e45..33f354eb26b8db304806210a67b50ab5e97b092c 100644 (file)
@@ -93,7 +93,6 @@ Beam::do_pre_processing ()
 
   auto_knees ();
   set_stem_directions ();
-
   set_stem_shorten (); 
 }
 
index 65eadb619353923fd15c4b1bf7719ff422b21c74..0cfd5a070e2d6727de48c395db11b776cd3401bf 100644 (file)
@@ -14,6 +14,7 @@
 #include "direction.hh"
 #include "debug.hh"
 #include "main.hh"
+#include "lily-guile.hh"
 
 void
 flipy (Array<Offset>  &c)
@@ -52,10 +53,23 @@ Bezier_bow::Bezier_bow (Array<Offset> points, Direction dir)
 void
 Bezier_bow::blow_fit ()
 {
-  Real f = fit_factor ();
+  Real len = curve_.control_[3][X_AXIS] ; 
+  Real ind = curve_.control_[1][X_AXIS] / len;
+  Real h = curve_.control_[1][Y_AXIS] * fit_factor () / len;
+
+  // ugh. Unhardcode this
+  if (h > 4 * ind)
+    {
+      h = 4* ind; 
+    }
+
+  if (h > 0.8 + -2 * ind)
+    {
+      h = 0.8 - 2  *ind; 
+    }
   
-  curve_.control_[1][Y_AXIS] *= f;
-  curve_.control_[2][Y_AXIS] *= f;  
+  curve_.control_[1][Y_AXIS] = h * len;
+  curve_.control_[2][Y_AXIS] = h * len;  
 
   curve_.check_sanity ();
 }
@@ -63,13 +77,16 @@ Bezier_bow::blow_fit ()
 void
 Bezier_bow::calculate ()
 {
-  calc_default (0.0);
+  calc_default ();
   if (fit_factor () > 1.0)
     {
-      calc_tangent_controls ();
+      //    calc_tangent_controls ();
       blow_fit ();
     }
 }
+
+
+  
 Bezier
 Bezier_bow::get_curve ()const
 {
@@ -81,6 +98,7 @@ Bezier_bow::get_curve ()const
 
   rv.rotate (alpha_);
   rv.translate (origin_);
+  
   return rv;
 }
 
@@ -248,7 +266,7 @@ Bezier_bow::to_canonic_form ()
  See Documentation/fonts.tex
  */
 void
-Bezier_bow::calc_default (Real h)
+Bezier_bow::calc_default ()
 {
   Real pi = M_PI;
 
@@ -260,7 +278,7 @@ Bezier_bow::calc_default (Real h)
 
   Real b = delta.length ();
   Real indent = alpha * atan (beta * b);
-  Real height = indent + h;
+  Real height = indent;
  
   curve_.control_ [0] = Offset (0, 0);
   curve_.control_ [1] = Offset (indent, height);
@@ -269,3 +287,4 @@ Bezier_bow::calc_default (Real h)
 }
 
 
+
index 88108cbea861cdd1c5da8d04a940a018d72f396f..675574b034bad51e4c50ca6ce463486983f2e7bf 100644 (file)
@@ -10,6 +10,7 @@
 #include "dot-column-engraver.hh"
 #include "rhythmic-head.hh"
 #include "dot-column.hh"
+#include "side-position-interface.hh"
 
 Dot_column_engraver::Dot_column_engraver ()
 {
@@ -40,6 +41,8 @@ Dot_column_engraver::acknowledge_element (Score_element_info info)
   if (!dotcol_p_)
     {
       dotcol_p_ = new Dot_column;
+      side_position (dotcol_p_).set_axis (X_AXIS);
+      side_position (dotcol_p_).set_direction (RIGHT);      
       announce_element (Score_element_info (dotcol_p_, 0));
     }
 
index 61d1c771f248dc675c01dd022e75de28c8195ffe..2e80a913bc1150ace6da548cb0c5043e38fcb204 100644 (file)
@@ -12,6 +12,7 @@
 #include "group-interface.hh"
 #include "staff-symbol-referencer.hh"
 #include "directional-element-interface.hh"
+#include "side-position-interface.hh"
 
 void
 Dot_column::add_dots (Dots *d)
@@ -29,7 +30,7 @@ Dot_column::add_head (Rhythmic_head *r)
   if (!r->dots_l ())
     return ;
 
-  add_support (r);
+  side_position (this).add_support (r);
   add_dots (r->dots_l ());
 }
 
@@ -39,7 +40,6 @@ Dot_column::compare (Dots * const &d1, Dots * const &d2)
 {
   Staff_symbol_referencer_interface s1(d1);
   Staff_symbol_referencer_interface s2(d2);  
-
   
   return int (s1.position_f () - s2.position_f ());
 }
index ed1989cd9b817fde2c5187d134f3d6ab3307b810..0256679458f11b067002c7d8435ccccf66134253 100644 (file)
@@ -29,8 +29,6 @@ Grace_align_item::do_pre_processing ()
 
   
   Axis_align_item::do_pre_processing ();
-  Note_head_side::do_pre_processing ();
-
   translate_axis (-0.5* nhw, X_AXIS); // ugh.
 }
 
index 1b9fe9534fcab36da5bafc0d16f62f6d35bddba3..e1e49f466af774207424c376240e5aa3bbf76c29 100644 (file)
@@ -13,6 +13,7 @@
 #include "local-key-item.hh"
 #include "paper-column.hh"
 #include "dimension-cache.hh"
+#include "side-position-interface.hh"
 
 class Grace_position_engraver:public Engraver
 {
@@ -63,7 +64,7 @@ Grace_position_engraver::process_acknowledged ()
   if (align_l_)
     {
       for (int i=0; i < support_.size (); i++)
-       align_l_->add_support (support_[i]);
+       side_position  (align_l_).add_support (support_[i]);
       support_.clear ();
     }
 }
@@ -71,6 +72,8 @@ Grace_position_engraver::process_acknowledged ()
 void
 Grace_position_engraver::do_pre_move_processing ()
 {
+  if (align_l_ && !side_position (align_l_).supported_b ())
+    {
   /*
      We don't have support. Either some moron tried attaching us to a rest,
      or we're at the end of the piece.  In the latter case, we have a
@@ -80,8 +83,7 @@ Grace_position_engraver::do_pre_move_processing ()
      Solution: attach ourselves to  the last musical column known.  A little intricate.
      
   */
-  if (align_l_ && !align_l_->supported_b ())
-    {
+
       Score_element * elt = align_l_->parent_l (X_AXIS);
       if (elt)
        return;
index 8734471e5eb702d7fa6464bd39ac16f6cd9125b0..903088deced18597bc78fe0dafa7a4ec2b3481d1 100644 (file)
@@ -12,7 +12,7 @@
 
 #include "bezier.hh"
 #include "lily-proto.hh"
-
+#include "lily-guile.hh"
 
 /**
   Implement bow specific bezier curve. Calculate bezier curve for bow
@@ -21,9 +21,9 @@ class Bezier_bow
 {
   Bezier curve_;
   Array<Offset> encompass_;
-
+  
   void blow_fit ();
-  void calc_default (Real h);
+  void calc_default ();
   void to_canonic_form ();
   void calc_tangent_controls ();
   Real fit_factor () const;
@@ -34,11 +34,15 @@ class Bezier_bow
   Real alpha_;
   Offset origin_;
 public:
-  Real  rc_factor_,
-    height_limit_,
-    ratio_;
+  Real  rc_factor_;
+  Real height_limit_;
+  Real ratio_;
 
 
+  Real vertical_offset_needed () const;
+  
+
+  SCM ugly_scm () const;
   Bezier_bow (Array<Offset> points, Direction dir);
   void calculate ();
   Bezier get_curve () const;
index 78caaf839d08a96158bc6783c1dcc2b8227e7354..de7d522f05b1480673368023612f986d93daee53 100644 (file)
 #define DOT_COLUMN_HH
 
 #include "axis-group-item.hh"
-#include "note-head-side.hh"
+
 
 /**
   Group dots.  This is needed because, the dots have to be aligned per voice
  */
-class Dot_column : public Axis_group_item, public Note_head_side
+class Dot_column : public Axis_group_item
 {
   static int compare (Dots * const&,Dots * const&);
   void add_dots (Dots*);
index 9780c3f8187ff48bb169e4bc13b3ea1f8a6f764a..ee8d0ce6f2cee2024c3f5a92b924992f7b39c83c 100644 (file)
 #ifndef GRACE_ALIGN_ITEM_HH
 #define GRACE_ALIGN_ITEM_HH
 
-#include "note-head-side.hh"
+
 #include "axis-align-item.hh"
 
-class Grace_align_item : public Axis_align_item, public Note_head_side
+class Grace_align_item : public Axis_align_item
 {
 public:
   VIRTUAL_COPY_CONS (Score_element);
index a42051d7cc4834f8af60e9cfad3c1355e12a5910..cf4cf305e5408d1bed3985b3fe265179d5405b68 100644 (file)
@@ -8,36 +8,4 @@
 #ifndef LOCALKEYGRAV_HH
 #define LOCALKEYGRAV_HH
 
-#include "engraver.hh"
-#include "key.hh"
-#include "parray.hh"
-/**
-   Make accidentals.  Catches note heads, ties and notices key-change
-   events.  Due to interaction with ties (which don't come together
-   with note heads), this needs to be in a context higher than Tie_engraver.
-   (FIXME).
- */
-struct Local_key_engraver : Engraver {
-  Local_key_item *key_item_p_;
-protected:
-  VIRTUAL_COPY_CONS(Translator);
-  virtual void do_process_requests();
-  virtual void acknowledge_element (Score_element_info);
-  virtual void do_pre_move_processing();
-  virtual void do_creation_processing ();
-  virtual void process_acknowledged ();
-  virtual void do_removal_processing ();
-public:
-  
-  Key local_key_;
-  Key_engraver *key_grav_l_;
-  Array<Note_req* > mel_l_arr_;
-  Array<Item* > support_l_arr_;
-  Link_array<Item  > forced_l_arr_;
-  Link_array<Item > tied_l_arr_;
-  Local_key_engraver();
-  bool self_grace_b_;
-  Grace_align_item * grace_align_l_;
-};
-
 #endif // LOCALKEYGRAV_HH
index 626af84454cbc3f8ef655d61f52170d1d5a3de40..b1d20b3ac4f89ea2ed2332ea6f9cc261cc4d8397 100644 (file)
@@ -10,7 +10,7 @@
 #include "array.hh"
 #include "musical-pitch.hh"
 
-#include "note-head-side.hh"
+
 
 struct Local_key_cautionary_tuple
 {
@@ -40,13 +40,13 @@ struct Local_key_cautionary_tuple
   
  */
 
-class Local_key_item : public Note_head_side
+class Local_key_item : public Item
 {
   Array<Local_key_cautionary_tuple> accidental_arr_;
 
   Molecule accidental (int,bool,bool) const;
 public:
-  Local_key_item ();
+
   void add_pitch (Musical_pitch, bool cautionary, bool natural);
 protected:
   virtual void do_pre_processing();
index 5b83aef91e30b39c4e9049185ccfbb27eceea790..d86f04e62a353da967b97d914b35385f5f265940 100644 (file)
@@ -34,7 +34,6 @@ public:
   Molecule ledger_line (Interval) const;
   Molecule fill (Box b) const;
   Molecule filledbox (Box b) const;  
-  Molecule tuplet_bracket (Real dy, Real dx, Real gap, Real thick,Real height, Direction dir) const;
   Molecule accordion (SCM arg, Real interline_f) const;
   Molecule slur (Bezier controls, Real cthick, Real thick) const;
   Molecule text (String style, String text, Paper_def*) const;
index adf3c718d88ad2c01e895635c4c04a72d9088389..b86e566146519a9acd4938a4a80edff56f89d2eb 100644 (file)
@@ -17,9 +17,9 @@ class Multi_measure_rest : public Spanner
 {
 public:
   Multi_measure_rest ();
-  int measures_i_;
-  void add_column (Item*);
 
+  void add_column (Item*);
+  Molecule compound_rest (int)const;
 protected:
   virtual Molecule *do_brew_molecule_p () const;
   VIRTUAL_COPY_CONS (Score_element);
index 3e94b475d2a3dadd05a5216e8a7812563ceea71c..65296f81060baccd891380179b283fc7515acef0 100644 (file)
@@ -1,29 +1,2 @@
-/*   
-  note-head-side.hh -- declare Note_head_side
-  
-  source file of the GNU LilyPond music typesetter
-  
-  (c) 1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
-  
- */
-
-#ifndef NOTE_HEAD_SIDE_HH
-#define NOTE_HEAD_SIDE_HH
-
-#include "item.hh"
-
-/**
-   be next to noteheads.
-   */
-class Note_head_side: public virtual Item
-{
-public:
-  Note_head_side ();
-  bool supported_b () const;
-  void add_support (Item*);
-  VIRTUAL_COPY_CONS (Score_element);
-};
-
-
-#endif /* NOTE_HEAD_SIDE_HH */
 
+#error
index 37e35c1b66b3da7885ccc0cfc8d2b29cc419441b..e4f608088d9d2a7906d8f16462f2ddb295166588 100644 (file)
@@ -77,13 +77,6 @@ public:
 
   Lookup const * lookup_l (int sz) const;      // TODO naming
 
-  /** convert a duration to an idealspacing
-    influence using the geometric_ and  paratime_signatures.
-    */
-  Real length_mom_to_dist (Moment, Real) const;
-  
-  Real arithmetic_constant (Moment minimal_mom) const;
-  Real arithmetic_spacing (Moment mom,Real constant) const;
 
   virtual int get_next_default_count () const;
   static void reset_default_count();
index a5c5420bd5a5c7d928ab6bf26ac5fc16d1e012ab..eb3a0eb1a81dc2f422a486eda35027a415d2eea1 100644 (file)
@@ -25,7 +25,8 @@ protected:
 
   Real stem_dir_correction (Paper_column*,Paper_column*)  const;
   Real default_bar_spacing (Paper_column*,Paper_column*,Moment)  const;
-  Real note_spacing (Paper_column*,Paper_column*,Moment)  const;  
+  Real note_spacing (Paper_column*,Paper_column*,Moment)  const;
+  Real get_duration_space (Moment dur, Moment shortest) const;
 };
 
 #endif /* SPACING_SPANNER_HH */
index e09572632fa9d4338b4705eb4136ffc74f75397e..4d02f04693f216423ae97c6e43bd26d4f57fa62c 100644 (file)
   C style time_signatures, 2+3+2/8 time_signatures, alla breve.
   
  */
-class Time_signature: public Item {
+class Time_signature: public Item
+{
+  Molecule special_time_signature (String,int,int) const;
+  Molecule time_signature (int, int)const;
+  
 protected:
   virtual Molecule*do_brew_molecule_p() const;
 public:
index 8ac7cfaf735c78014de0754561f378c6f05d0cbb..6edf683cf6f43929425abbe882722ace11c83e9c 100644 (file)
 #include "engraver-group-engraver.hh"
 #include "grace-align-item.hh"
 #include "staff-symbol-referencer.hh"
+#include "side-position-interface.hh"
+#include "engraver.hh"
+#include "key.hh"
+#include "parray.hh"
+
+
+/**
+   Make accidentals.  Catches note heads, ties and notices key-change
+   events.  Due to interaction with ties (which don't come together
+   with note heads), this needs to be in a context higher than Tie_engraver.
+   (FIXME).
+ */
+struct Local_key_engraver : Engraver {
+  Local_key_item *key_item_p_;
+protected:
+  VIRTUAL_COPY_CONS(Translator);
+  virtual void do_process_requests();
+  virtual void acknowledge_element (Score_element_info);
+  virtual void do_pre_move_processing();
+  virtual void do_creation_processing ();
+  virtual void process_acknowledged ();
+  virtual void do_removal_processing ();
+public:
+  
+  Key local_key_;
+  Key_engraver *key_grav_l_;
+  Array<Note_req* > mel_l_arr_;
+  Array<Item*> support_l_arr_;
+  Link_array<Item  > forced_l_arr_;
+  Link_array<Item > tied_l_arr_;
+  Local_key_engraver();
+  bool self_grace_b_;
+  Grace_align_item * grace_align_l_;
+  Timing_translator * time_trans_l_  ;
+};
+
+
 
 Local_key_engraver::Local_key_engraver()
 {
   key_grav_l_ = 0;
   key_item_p_ =0;
   grace_align_l_ =0;
+  time_trans_l_ = 0;
 }
 
 void
@@ -33,7 +71,7 @@ Local_key_engraver::do_creation_processing ()
     UGHGUHGUH.
 
     Breaks if Key_engraver is removed from under us.
-   */
+  */
   Translator * result =
     daddy_grav_l()->get_simple_translator ("Key_engraver");
 
@@ -53,67 +91,71 @@ Local_key_engraver::do_creation_processing ()
     TODO
     (if we are grace) get key info from parent Local_key_engraver
   */
+
+  Translator * tr = daddy_grav_l()->get_simple_translator ("Timing_engraver"); // ugh
+  time_trans_l_ = dynamic_cast<Timing_translator*> (tr);
 }
 
 void
 Local_key_engraver::process_acknowledged ()
 {
-    if (!key_item_p_ && mel_l_arr_.size()) 
+  if (!key_item_p_ && mel_l_arr_.size()) 
     {
-        SCM f = get_property ("forgetAccidentals",0);
-        bool forget = to_boolean (f);
-        for (int i=0; i  < mel_l_arr_.size(); i++) 
+      SCM f = get_property ("forgetAccidentals",0);
+      bool forget = to_boolean (f);
+      for (int i=0; i  < mel_l_arr_.size(); i++) 
+       {
+         Item * support_l = support_l_arr_[i];
+         Note_req * note_l = mel_l_arr_[i];
+
+         /* see if there's a tie that "changes" the accidental */
+         /* works because if there's a tie, the note to the left
+            is of the same pitch as the actual note */
+         bool tie_changes = tied_l_arr_.find_l (support_l)
+           && !local_key_.different_acc (note_l->pitch_);
+
+         if (!forget
+
+             && ((note_l->forceacc_b_
+                  || !local_key_.different_acc (note_l->pitch_)
+                  || local_key_.internal_forceacc (note_l->pitch_)))
+
+             && !tie_changes)
            {
-               Item * support_l = support_l_arr_[i];
-               Note_req * note_l = mel_l_arr_[i];
-
-            /* see if there's a tie that "changes" the accidental */
-            /* works because if there's a tie, the note to the left
-               is of the same pitch as the actual note */
-            bool tie_changes = tied_l_arr_.find_l (support_l)
-                  && !local_key_.different_acc (note_l->pitch_);
-
-            if (!forget
-
-                && ((note_l->forceacc_b_
-                || !local_key_.different_acc (note_l->pitch_)
-                        || local_key_.internal_forceacc (note_l->pitch_)))
-
-             && !tie_changes)
-             {
-                 if (!key_item_p_) 
-                    {
-                        key_item_p_ = new Local_key_item;
-                        Staff_symbol_referencer_interface si(key_item_p_);
-                        si.set_interface ();
+             if (!key_item_p_) 
+               {
+                 key_item_p_ = new Local_key_item;
+                 side_position (key_item_p_).set_axis (X_AXIS);
+                 side_position (key_item_p_).set_direction (LEFT);
+                 staff_symbol_referencer(key_item_p_).set_interface ();
                         
-                        announce_element (Score_element_info (key_item_p_, 0));
-                    }
+                 announce_element (Score_element_info (key_item_p_, 0));
+               }
 
-                    key_item_p_->add_pitch (note_l->pitch_,
+             key_item_p_->add_pitch (note_l->pitch_,
                                      note_l->cautionary_b_,
-                                         local_key_.double_to_single_acc(note_l->pitch_));
-                    key_item_p_->add_support (support_l);
-             }
+                                     local_key_.double_to_single_acc(note_l->pitch_));
+             side_position (key_item_p_).add_support (support_l);
+           }
          
-                if (!forget)
-                        {
-                                local_key_.set (note_l->pitch_);
-                 if (!tied_l_arr_.find_l (support_l))
-                            {
-                                local_key_.clear_internal_forceacc (note_l->pitch_);
-                            }
-                 else if (tie_changes)
-                                {
-                     local_key_.set_internal_forceacc (note_l->pitch_);
-                            }
-                       }
+         if (!forget)
+           {
+             local_key_.set (note_l->pitch_);
+             if (!tied_l_arr_.find_l (support_l))
+               {
+                 local_key_.clear_internal_forceacc (note_l->pitch_);
+               }
+             else if (tie_changes)
+               {
+                 local_key_.set_internal_forceacc (note_l->pitch_);
+               }
+           }
         }
     }
-    if (key_item_p_ && grace_align_l_)
+  if (key_item_p_ && grace_align_l_)
     {
-        grace_align_l_->add_support (key_item_p_);
-        grace_align_l_ =0;
+      side_position (grace_align_l_).add_support (key_item_p_);
+      grace_align_l_ =0;
     }
   
 }
@@ -130,7 +172,7 @@ Local_key_engraver::do_pre_move_processing()
   if (key_item_p_)
     {
       for (int i=0; i < support_l_arr_.size(); i++)
-       key_item_p_->add_support (support_l_arr_[i]);
+       side_position (key_item_p_).add_support (support_l_arr_[i]);
 
       typeset_element (key_item_p_);
       key_item_p_ =0;
@@ -169,7 +211,7 @@ Local_key_engraver::acknowledge_element (Score_element_info info)
       mel_l_arr_.push (note_l);
       support_l_arr_.push (note_head);
     }
- else if (Tie * tie_l = dynamic_cast<Tie *> (info.elem_l_))
 else if (Tie * tie_l = dynamic_cast<Tie *> (info.elem_l_))
     {
       tied_l_arr_.push (tie_l->head (RIGHT));
     }
@@ -178,14 +220,9 @@ Local_key_engraver::acknowledge_element (Score_element_info info)
 void
 Local_key_engraver::do_process_requests()
 {
-  Translator * tr = daddy_grav_l()->get_simple_translator ("Timing_engraver"); // ugh
-  Timing_translator * time_C_  = dynamic_cast<Timing_translator*> (tr);
-  
-  if (time_C_ && !time_C_->measure_position ())
+  if (time_trans_l_ && !time_trans_l_->measure_position ())
     {
-      SCM n =  get_property ("noResetKey",0);
-      bool no_res = to_boolean (n);
-      if (!no_res && key_grav_l_)
+      if (!to_boolean (get_property ("noResetKey",0)) && key_grav_l_)
        local_key_= key_grav_l_->key_;
     }
   else if (key_grav_l_ && key_grav_l_->key_changed_b ())
index 7541177600ffa58bb77430b695391c3330b07d84..d18824b443a58c77df4ab3504b8ace86a5d517f9 100644 (file)
@@ -8,16 +8,12 @@
 #include "local-key-item.hh"
 #include "molecule.hh"
 #include "staff-symbol-referencer.hh"
-
 #include "lookup.hh"
 #include "paper-def.hh"
 #include "musical-request.hh"
 #include "note-head.hh"
 #include "misc.hh"
 
-Local_key_item::Local_key_item ()
-{
-}
 
 void
 Local_key_item::add_pitch (Musical_pitch p, bool cautionary, bool natural)
@@ -40,7 +36,6 @@ void
 Local_key_item::do_pre_processing()
 {
   accidental_arr_.sort (Local_key_cautionary_tuple::compare);
-  Note_head_side::do_pre_processing ();
 }
 
 Molecule
@@ -49,9 +44,9 @@ Local_key_item::accidental (int j, bool cautionary, bool natural) const
   Molecule m (lookup_l ()->afm_find (String ("accidentals-") + to_str (j)));
   if (natural)
     {
-         Molecule prefix = lookup_l ()->afm_find (String ("accidentals-0"));
-         m.add_at_edge(X_AXIS, LEFT, Molecule(prefix), 0);
-       }
+      Molecule prefix = lookup_l ()->afm_find (String ("accidentals-0"));
+      m.add_at_edge(X_AXIS, LEFT, Molecule(prefix), 0);
+    }
   if (cautionary) 
     {
       Molecule open = lookup_l ()->afm_find (String ("accidentals-("));
index afcd03b804afa2586c375f48b7c306048aed559a..9e8586ee2b2eafd0e7e3e80938233699fb9609dd 100644 (file)
@@ -240,10 +240,10 @@ Lookup::dashed_slur (Bezier b, Real thick, Real dash) const
     }
 
   Atom *at = new Atom(gh_list (ly_symbol2scm ("dashed-slur"),
-                   gh_double2scm (thick), 
-                   gh_double2scm (dash),
-                   ly_quote_scm (l),
-                   SCM_UNDEFINED));
+                              gh_double2scm (thick), 
+                              gh_double2scm (dash),
+                              ly_quote_scm (l),
+                              SCM_UNDEFINED));
   Molecule m;
   m.add_atom (at->self_scm_);
   return m;
@@ -261,26 +261,6 @@ Lookup::fill (Box b) const
 }
 
 
-
-Molecule
-Lookup::special_time_signature (String s, int n, int d, Paper_def*pap) const
-{
-  // First guess: s contains only the signature style
-  String symbolname = "timesig-" + s + to_str (n) + "/" + to_str (d);
-  
-  Molecule m = afm_find (symbolname, false);
-  if (!m.empty_b()) 
-    return m;
-
-  // Second guess: s contains the full signature name
-  m = afm_find ("timesig-"+s, false);
-  if (!m.empty_b ()) 
-    return m;
-
-  // Resort to default layout with numbers
-  return time_signature (n,d,pap);
-}
-
 Molecule
 Lookup::filledbox (Box b ) const
 {
@@ -403,29 +383,6 @@ Lookup::text (String style, String text, Paper_def *paper_l) const
   
 
 
-
-Molecule
-Lookup::time_signature (int num, int den, Paper_def *paper_l) const
-{
-  String sty = "number";
-  Molecule n (text (sty, to_str (num), paper_l));
-  Molecule d (text (sty, to_str (den), paper_l));
-  n.align_to (X_AXIS, CENTER);
-  d.align_to (X_AXIS, CENTER);
-  Molecule m;
-  if (den)
-    {
-      m.add_at_edge (Y_AXIS, UP, n, 0.0);
-      m.add_at_edge (Y_AXIS, DOWN, d, 0.0);
-    }
-  else
-    {
-      m = n;
-      m.align_to (Y_AXIS, CENTER);
-    }
-  return m;
-}
-
 Molecule
 Lookup::staff_brace (Real y, int staff_size) const
 {
@@ -451,26 +408,6 @@ Lookup::staff_brace (Real y, int staff_size) const
 }
 
 
-
-Molecule
-Lookup::tuplet_bracket (Real dy , Real dx, Real thick, Real gap,
-                       Real height, Direction dir) const
-{
-  Molecule m;
-
-  Atom *at = new Atom (gh_list(ly_symbol2scm ("tuplet"),
-                   gh_double2scm (height),
-                   gh_double2scm (gap),
-                   gh_double2scm (dx),
-                   gh_double2scm (dy),
-                   gh_double2scm (thick),
-                   gh_int2scm (dir),
-                   SCM_UNDEFINED));
-  m.add_atom (at->self_scm_);
-
-  return m;
-}
-
 /*
   Make a smooth curve along the points 
  */
index 4427d7aa9ad52e08ab2442e7bec7285fc27c5d11..d34a75adbdc374299700eaf66c8b91cee1df15c1 100644 (file)
@@ -163,8 +163,9 @@ Multi_measure_rest_engraver::do_post_move_processing ()
   if (mmrest_p_ && !time->measure_position ())
     {
       lastrest_p_ = mmrest_p_;
-      lastrest_p_->measures_i_
-       = gh_scm2int (time->get_property ("currentBarNumber", 0)) - start_measure_i_;
+      int cur = gh_scm2int (time->get_property ("currentBarNumber", 0));
+      lastrest_p_->set_elt_property ("measure-count",
+                                    gh_int2scm (cur - start_measure_i_));
       mmrest_p_ = 0;
     }
 }
index ea462cee20b90a34ad06fcf30df884337f303a4b..2b5ff1ac50eefb8110454b4ec4546bd19e03ed61 100644 (file)
 
 Multi_measure_rest::Multi_measure_rest ()
 {
-  measures_i_ = 0;
   set_elt_property ("columns", SCM_EOL);
 }
 
 
 /*
-   [TODO]                                          17
+   [TODO]                                      17
  * variable-sized multi-measure rest symbol: |====| ??
- * build 3, 5, 6, 7, 8 symbols (how far, property?)
-       from whole, brevis and longa rests
-
 */
 Molecule*
 Multi_measure_rest::do_brew_molecule_p () const
 {
+  Real staff_space
+    = staff_symbol_referencer (this).staff_space ();
+
   Interval sp_iv;
   Direction d = LEFT;
   do
@@ -67,17 +65,53 @@ Multi_measure_rest::do_brew_molecule_p () const
 
   
   Molecule s;
-  bool rest_symbol=true;
-  SCM alt_symbol_sym =get_elt_property ("alt-symbol");
-  if (gh_string_p (alt_symbol_sym))
+
+  int measures = 1;
+  SCM m (get_elt_property ("measure-count"));
+  if (gh_number_p (m))
     {
-      s = lookup_l () -> afm_find (ly_scm2string (alt_symbol_sym));
-      rest_symbol = false;
+      measures = gh_scm2int (m);
     }
-  else if (measures_i_ == 1 || measures_i_ == 2 || measures_i_ == 4) 
+  
+
+  if (measures <= paper_l() ->get_var ("multi_measure_rest_expand_limit"))
     {
-      s = lookup_l ()->afm_find ("rests-" + to_str (- intlog2(measures_i_)));
-      s.translate_axis (-s.extent ()[X_AXIS].length () / 2, X_AXIS);
+      /*
+       Build a rest from smaller parts. Distances inbetween are
+       really variable, see Wanske pp. 125 */
+
+      int l = measures;
+      while (l)
+       {
+         int k;
+         if (l >= 4)
+           {
+             l-=4;
+             k = -2;
+           }
+         else if (l>= 2)
+           {
+             l -= 2;
+             k = -1;
+           }
+         else
+           {
+             k = 0;
+             l --;
+           }
+
+         Real pad = s.empty_b ()
+           ? 0.0 : paper_l ()->get_var ("multi_measure_rest_padding");
+      
+         Molecule r (lookup_l ()->afm_find ("rests-" + to_str (k)));
+         if (k == 0)
+           r.translate_axis (staff_space, Y_AXIS);
+         
+         s.add_at_edge (X_AXIS, RIGHT, r, pad);
+       }
+
+
+      s.align_to (X_AXIS, CENTER);
     }
   else 
     {
@@ -86,15 +120,10 @@ Multi_measure_rest::do_brew_molecule_p () const
     }
   
   mol_p->add_molecule (s);
-  Real staff_space
-    = staff_symbol_referencer (this).staff_space ();
-  if (measures_i_ == 1 && rest_symbol)
-    {
-      mol_p->translate_axis (staff_space, Y_AXIS);
-    }
-  else if (measures_i_ > 1)
+
+  if (measures > 1)
     {
-      Molecule s (lookup_l ()->text ("number", to_str (measures_i_), paper_l ()));
+      Molecule s (lookup_l ()->text ("number", to_str (measures), paper_l ()));
       s.align_to (X_AXIS, CENTER);
       s.translate_axis (3.0 * staff_space, Y_AXIS);
       mol_p->add_molecule (s);
@@ -117,6 +146,8 @@ Multi_measure_rest::do_add_processing ()
       set_bounds (LEFT, column_arr[0 >? column_arr.size () - 2]);
       set_bounds (RIGHT, column_arr.top ());
     }
+
+  // set columns to SCM_EOL?
 }
   
 void
@@ -172,7 +203,7 @@ Multi_measure_rest::get_rods () const
          should do something more advanced.
         */
       rod.distance_f_ = l->extent (X_AXIS)[BIGGER] - r->extent (X_AXIS)[SMALLER]
-       + paper_l ()->get_var ("mmrest_x_minimum");
+       + paper_l ()->get_var ("multi_measure_rest_x_minimum");
   
       a.push (rod);
     }
diff --git a/lily/note-head-side.cc b/lily/note-head-side.cc
deleted file mode 100644 (file)
index 273744c..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-/*   
-  note-head-side.cc --  implement Note_head_side
-  
-  source file of the GNU LilyPond music typesetter
-  
-  (c) 1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
-  
- */
-
-#include "directional-element-interface.hh"
-
-#include "side-position-interface.hh"
-#include "note-head-side.hh"
-void
-Note_head_side::add_support (Item*head_l)
-{
-  Side_position_interface s (this);
-  s.add_support (head_l);
-}
-
-
-Note_head_side::Note_head_side()
-{
-  Side_position_interface s(this);
-  s.set_axis (X_AXIS);
-  s.set_direction (LEFT);
-}
-
-bool
-Note_head_side::supported_b ()const
-{
-  Side_position_interface s(this);
-  return s.supported_b ();
-}
index 94e22e0e34be2494c07336de7fab8ff014c094ea..7b3309513ba3e246dbebc93386da662397fa8f4d 100644 (file)
@@ -144,7 +144,7 @@ Paper_column::when_mom () const
 bool
 Paper_column::musical_b () const
 {
-  SCM m = get_elt_property ("shortest-starter");
+  SCM m = get_elt_property ("shortest-starter-duration");
   Moment s (0);
   if (SMOB_IS_TYPE_B(Moment, m))
     {
index 9c6be3c464fe8fdedaed620100cb15c65b652699..233e2075d21c1f973c2a9e5f810794320ca47e98 100644 (file)
@@ -109,34 +109,6 @@ Paper_def::line_dimensions_int (int n) const
                   gh_scm2double (gh_cdr (pair)));
 }
 
-Real
-Paper_def::length_mom_to_dist (Moment d,Real k) const
-{
-  return arithmetic_spacing (d,k);
-}
-
-
-/**
-  Get the measure wide constant for arithmetic spacing.
-
-  @see
-  John S. Gourlay. ``Spacing a Line of Music,'' Technical Report
-  OSU-CISRC-10/87-TR35, Department of Computer and Information Science,
-  The Ohio State University, 1987.
-
-  */
-Real
-Paper_def::arithmetic_constant (Moment d) const
-{
-  return get_var ("arithmetic_basicspace") - log_2 (Moment (1,8) <? d);
-}
-
-Real
-Paper_def::arithmetic_spacing (Moment d ,Real k) const
-{
-  return (log_2 (d) + k)* get_var ("arithmetic_multiplier");
-}
-
 void
 Paper_def::set_lookup (int i, Lookup*l)
 {
@@ -148,6 +120,9 @@ Paper_def::set_lookup (int i, Lookup*l)
 }
 
 
+/*
+  junkme.
+ */
 Real
 Paper_def::interbeam_f (int multiplicity_i) const
 {
@@ -164,12 +139,10 @@ Paper_def::print () const
 #ifndef NPRINT
   Music_output_def::print ();
   DEBUG_OUT << "Paper {";
-
   for (Hash_table_iter<int, Lookup*> ai(*lookup_p_tab_p_); ai.ok (); ai++)
     {
       DEBUG_OUT << "Lookup: " << ai.key () << " = " << ai.val ()->font_name_ << '\n';
     }
-
   DEBUG_OUT << "}\n";
 #endif
 }
index f314b8f41f8a5cf436c06ae388a200fe7ea49454..812e94ff8f9e3c2457588139ded705bafe788614 100644 (file)
@@ -137,15 +137,13 @@ Score_engraver::typeset_all()
        }
       else 
        {
-         Item *item_p = dynamic_cast <Item *> (elem_p);
-
-         if (!item_p->parent_l (X_AXIS))
+         if (!elem_p->parent_l (X_AXIS))
            {
-             bool br = to_boolean (item_p->remove_elt_property ("breakable"));
+             bool br = to_boolean (elem_p->remove_elt_property ("breakable"));
              if (br)
-               command_column_l_->add_element(item_p);
+               command_column_l_->add_element(elem_p);
              else
-               musical_column_l_->add_element(item_p);
+               musical_column_l_->add_element(elem_p);
            }
        }
       if (!elem_p->parent_l(Y_AXIS))
index 793ef46e977ec1c7248ebf393b423e4b554df4f9..c79f0bee93f5cd6c624521975814af97467aa6bf 100644 (file)
@@ -56,13 +56,12 @@ Script_column_engraver::do_post_move_processing ()
 void
 Script_column_engraver::acknowledge_element( Score_element_info inf) 
 {
-  Item *thing =  dynamic_cast<Item*>(inf.elem_l_);
-  if (!thing)
-    return;
-  
-  if (Side_position_interface (thing).has_interface_b ())
+  if (side_position (inf.elem_l_).has_interface_b ())
     {
-      if (!thing->breakable_b () && Side_position_interface (thing).get_axis () == Y_AXIS)
+      Item *thing = dynamic_cast<Item*> (inf.elem_l_);
+      if (thing
+         && !thing->breakable_b ()
+         && side_position (inf.elem_l_).get_axis () == Y_AXIS)
        {
          script_l_arr_.push (thing);
        }
index 5b8a08f02db2b8aa68df14d37f6bf79823aef0eb..9cd4ab1d2de4ae343d8d2adda850692be87e5248 100644 (file)
@@ -143,6 +143,7 @@ Slur::do_post_processing ()
   if (!directional_element (this).get ())
     directional_element (this).set (get_default_dir ());
 
+
   /* 
    Slur and tie placement [OSU]
 
@@ -280,6 +281,12 @@ Slur::do_post_processing ()
        }
     }
        
+  if (!fix_broken_b)
+    dy_f_drul_[RIGHT] += interstaff_f;
+
+
+
+  return; 
 
   /*
     Now we've got a fine slur
@@ -291,13 +298,10 @@ Slur::do_post_processing ()
   Real snap_f = paper_l ()->get_var ("slur_"+infix +"snap_to_stem");
   Real snap_max_dy_f = paper_l ()->get_var ("slur_"+infix +"snap_max_slope_change");
 
-  if (!fix_broken_b)
-    dy_f_drul_[RIGHT] += interstaff_f;
-
+  Real dx_f = spanner_length ()+ dx_f_drul_[RIGHT] - dx_f_drul_[LEFT];
   Real dy_f = dy_f_drul_[RIGHT] - dy_f_drul_[LEFT];
   if (!fix_broken_b)
     dy_f -= interstaff_f;
-  Real dx_f = spanner_length ()+ dx_f_drul_[RIGHT] - dx_f_drul_[LEFT];
 
   /*
     Avoid too steep slurs.
@@ -524,8 +528,34 @@ Slur::get_rods () const
 
 
 
+#if 0
+SCM
+ugly_scm (Bezier  b) 
+{
+  b.translate (-b.control_[0]);
+  Real alpha = b.control_[3].arg ();
+
+  b.rotate ( -alpha);
+  if (b.control_[1][Y_AXIS] < 0)
+    {
+      b.control_[1][Y_AXIS] *= -1;
+      b.control_[2][Y_AXIS] *= -1;      
+    }
+
+  Real len = b.control_[3][X_AXIS];
+  Real indent = 10 *b.control_[1][X_AXIS] / len ;
+  Real ht = 10 *b.control_[1][Y_AXIS] / len ;
+  
+  SCM res = scm_eval (scm_listify (ly_symbol2scm ("slur-ugly"), gh_double2scm (indent), gh_double2scm (ht), SCM_UNDEFINED ));
+
+  return res;
+}
+#endif
 
 
+/*
+  Ugh should have dash-length + dash-period
+ */
 Molecule*
 Slur::do_brew_molecule_p () const
 {
@@ -535,10 +565,23 @@ Slur::do_brew_molecule_p () const
   Molecule a;
   SCM d =  get_elt_property ("dashed");
   if (gh_number_p (d))
-    a = lookup_l ()->dashed_slur (one, thick, gh_scm2int (d));
+    a = lookup_l ()->dashed_slur (one, thick, thick * gh_scm2double (d));
   else
     a = lookup_l ()->slur (one, directional_element (this).get () * thick, thick);
-  
+
+#if 0 
+  SCM u = ugly_scm (one);
+  if (gh_pair_p (u))
+    {
+      Molecule mark = lookup_l ()-> text ( "roman",
+                          to_str (gh_scm2double (gh_car (u)), "%0.2f") + "," +
+                          to_str(gh_scm2double (gh_cdr (u)), "%0.2f"),
+                          paper_l ());
+
+      mark.translate_axis (20 , Y_AXIS);
+      a.add_molecule (mark);
+    }
+#endif
   return new Molecule (a); 
 }
 
@@ -547,99 +590,32 @@ Slur::do_brew_molecule_p () const
 Bezier
 Slur::get_curve () const
 {
-  Bezier_bow b (get_encompass_offset_arr (), directional_element (this).get ());
+  Array<Offset> enc (get_encompass_offset_arr ());
+  Direction dir =  directional_element (this).get ();
+  Bezier_bow b (enc,dir);
 
   b.ratio_ = paper_l ()->get_var ("slur_ratio");
   b.height_limit_ = paper_l ()->get_var ("slur_height_limit");
   b.rc_factor_ = paper_l ()->get_var ("slur_rc_factor");
 
   b.calculate ();
-  return b.get_curve ();
-}
-
-#if 0
-
-/*
-  TODO: FIXME.
- */
-
-/*
-  Clipping
-
-  This function tries to address two issues:
-    * the tangents of the slur should always point inwards 
-      in the actual slur, i.e.  *after rotating back*.
 
-    * slurs shouldn't be too high 
-      let's try : h <= 1.2 b && h <= 3 staffheight?
+  Bezier  curve =  b.get_curve ();
 
-  We could calculate the tangent of the bezier curve from
-  both ends going inward, and clip the slur at the point
-  where the tangent (after rotation) points up (or inward
-  with a certain maximum angle).
+  Real x1 = enc[0][X_AXIS];
+  Real x2 = enc.top ()[X_AXIS];
   
-  However, we assume that real clipping is not the best
-  answer.  We expect that moving the outer control point up 
-  if the slur becomes too high will result in a nicer slur 
-  after recalculation.
-
-  Knowing that the tangent is the line through the first
-  two control points, we'll clip (move the outer control
-  point upwards) too if the tangent points outwards.
- */
-
-bool
-Bezier_bow::calc_clipping ()
-{
-  Real clip_height = paper_l_->get_var ("slur_clip_height");
-  Real clip_ratio = paper_l_->get_var ("slur_clip_ratio");
-  Real clip_angle = paper_l_->get_var ("slur_clip_angle");
-
-  Real b = curve_.control_[3][X_AXIS] - curve_.control_[0][X_AXIS];
-  Real clip_h = clip_ratio * b <? clip_height;
-  Real begin_h = curve_.control_[1][Y_AXIS] - curve_.control_[0][Y_AXIS];
-  Real end_h = curve_.control_[2][Y_AXIS] - curve_.control_[3][Y_AXIS];
-  Real begin_dy = 0 >? begin_h - clip_h;
-  Real end_dy = 0 >? end_h - clip_h;
-  
-  Real pi = M_PI;
-  Real begin_alpha = (curve_.control_[1] - curve_.control_[0]).arg () + dir_ * alpha_;
-  Real end_alpha = pi -  (curve_.control_[2] - curve_.control_[3]).arg () - dir_  * alpha_;
-
-  Real max_alpha = clip_angle / 90 * pi / 2;
-  if ((begin_dy < 0) && (end_dy < 0)
-    && (begin_alpha < max_alpha) && (end_alpha < max_alpha))
-    return false;
-
-  transform_back ();
-
-  if ((begin_dy > 0) || (end_dy > 0))
-    {
-      Real dy = (begin_dy + end_dy) / 4;
-      dy *= cos (alpha_);
-      encompass_[0][Y_AXIS] += dir_ * dy;
-      encompass_.top ()[Y_AXIS] += dir_ * dy;
-    }
-  else
+  Real off = 0.0;
+  for (int i=1; i < enc.size ()-1; i++)
     {
-      //ugh
-      Real c = 0.4;
-      if (begin_alpha >= max_alpha)
-       begin_dy = 0 >? c * begin_alpha / max_alpha * begin_h;
-      if (end_alpha >= max_alpha)
-       end_dy = 0 >? c * end_alpha / max_alpha * end_h;
-
-      encompass_[0][Y_AXIS] += dir_ * begin_dy;
-      encompass_.top ()[Y_AXIS] += dir_ * end_dy;
-
-      Offset delta = encompass_.top () - encompass_[0];
-      alpha_ = delta.arg ();
+      Real x = enc[i][X_AXIS];
+      if (x > x1 && x <x2)
+       {
+         Real y = curve.get_other_coordinate (X_AXIS, x);
+         off = off >? dir *  (enc[i][Y_AXIS] - y);
+       }
     }
-
-  to_canonic_form ();
-
-  return true;
+  curve.translate (Offset (0, dir * off));
+  return curve;
 }
-#endif
-
 
index 0082a25ae490db0979d21d1fdeb81c9cfdfbb736..8f4672537e35faa4c2b16b9431e8cea1f96cb1de 100644 (file)
@@ -74,9 +74,11 @@ Spacing_engraver::do_pre_move_processing ()
     {
       Moment m = (playing_durations_[i].info_.req_l_)->length_mom ();
       if (m)
-       shortest_playing = shortest_playing <? m;
+       {
+         shortest_playing = shortest_playing <? m;
+       }
     }
-
+  
   Moment starter, inf;
   inf.set_infinite (1);
   starter=inf;
@@ -95,9 +97,11 @@ Spacing_engraver::do_pre_move_processing ()
   Paper_column * sc
     = dynamic_cast<Paper_column*> (get_staff_info ().musical_pcol_l ());
 
-  sc->set_elt_property ("shortest-playing",  (new Moment (shortest_playing))->smobify_self ());
+  sc->set_elt_property ("shortest-playing-duration",
+                       (new Moment (shortest_playing))->smobify_self ());
   
-  sc->set_elt_property ("shortest-starter", (new Moment (starter))->smobify_self ());
+  sc->set_elt_property ("shortest-starter-duration",
+                       (new Moment (starter))->smobify_self ());
 }
 
 void
index 7d9194d66e39b54147cf862ac98f431062ef9d4b..e912cf5d3c9900cf0ae8a9f27461471c4205eb84 100644 (file)
@@ -14,6 +14,7 @@
 #include "warn.hh"
 #include "paper-score.hh"
 #include "line-of-score.hh"
+#include "misc.hh"
 
 Spacing_spanner::Spacing_spanner ()
 {
@@ -41,16 +42,25 @@ Array<Spring>
 Spacing_spanner::do_measure (Link_array<Paper_column> cols) const
 {
   Moment shortest;
+  Moment mean_shortest;
   shortest.set_infinite (1);
+
+  int n = 0;
   for (int i =0 ; i < cols.size (); i++)  
     {
       if (cols[i]->musical_b ())
        {
-         SCM  st = cols[i]->get_elt_property ("shortest-starter");
-         
-         shortest = shortest <? (*SMOB_TO_TYPE(Moment, st));
+         SCM  st = cols[i]->get_elt_property ("shortest-starter-duration");
+         Moment this_shortest = (*SMOB_TO_TYPE(Moment, st));
+         shortest = shortest <? this_shortest;
+         if (!mean_shortest.infty_b ())
+           {
+             n++;
+             mean_shortest += this_shortest;
+           }
        }
     }
+  mean_shortest /= n;
 
   Array<Spring> meas_springs;
 
@@ -184,19 +194,39 @@ Spacing_spanner::default_bar_spacing (Paper_column *lc, Paper_column *rc,
   */
   if (delta_t)
     {
-      Real k=  paper_l()->arithmetic_constant (shortest);
-      durational_distance =  paper_l()->length_mom_to_dist (delta_t,k);
+      durational_distance =  get_duration_space (delta_t, shortest);
     }
 
   return  symbol_distance >? durational_distance;
 }
 
 
+/**
+  Get the measure wide constant for arithmetic spacing.
+
+  @see
+  John S. Gourlay. ``Spacing a Line of Music,'' Technical Report
+  OSU-CISRC-10/87-TR35, Department of Computer and Information Science,
+  The Ohio State University, 1987.
+
+  */
+Real
+Spacing_spanner::get_duration_space (Moment d, Moment shortest) const
+{
+  Real log = log_2 (Moment (1,8) <? shortest);
+  Real k=   paper_l ()->get_var ("arithmetic_basicspace")
+    - log;
+  
+  return (log_2 (d) + k) * paper_l ()->get_var ("arithmetic_multiplier");
+}
+
+
 Real
 Spacing_spanner::note_spacing (Paper_column *lc, Paper_column *rc, Moment shortest) const
 {
   Moment shortest_playing_len = 0;
-  SCM s = lc->get_elt_property ("shortest-playing");
+  SCM s = lc->get_elt_property ("shortest-playing-duration");
+  //  SCM s = lc->get_elt_property ("mean-playing-duration");  
   if (SMOB_IS_TYPE_B(Moment, s))
     shortest_playing_len = *SMOB_TO_TYPE (Moment, s);
 
@@ -213,8 +243,7 @@ Spacing_spanner::note_spacing (Paper_column *lc, Paper_column *rc, Moment shorte
       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);
+  Real dist = get_duration_space (shortest_playing_len, shortest);
   dist *= (double)(delta_t / shortest_playing_len);
 
   dist += stem_dir_correction (lc,rc);
index 0ae13646c3bcf604ac51fd18b054884c3d526c00..e9e1ab70606ea8bd8c31094a9d45c34fd6324f63 100644 (file)
@@ -17,6 +17,7 @@
 #include "directional-element-interface.hh"
 #include "molecule.hh"
 #include "bezier-bow.hh"
+#include "stem.hh"
 
 void
 Tie::set_head (Direction d, Item * head_l)
@@ -52,6 +53,16 @@ Tie::head (Direction d) const
 Direction
 Tie::get_default_dir () const
 {
+  Stem * sl =  head(LEFT) ? head (LEFT)->stem_l () :0;
+  Stem * sr =  head(RIGHT) ? head (RIGHT)->stem_l () :0;  
+
+  if (sl && directional_element (sl).get () == UP
+      && sr && directional_element (sr).get () == UP)
+    return DOWN;
+  else
+    return UP;
+
+#if 0 
   Real p1 = Staff_symbol_referencer_interface (head (LEFT)).position_f () ;
   Real p2 = Staff_symbol_referencer_interface (head (RIGHT)).position_f () ;  
   
@@ -63,6 +74,7 @@ Tie::get_default_dir () const
    */
   Direction neutral_dir = (Direction)(int)paper_l ()->get_var ("stem_default_neutral_direction");
   return (m == 0) ? other_dir (neutral_dir) : (m < 0) ? DOWN : UP;
+#endif
 }
 
 void
@@ -97,6 +109,9 @@ Tie::do_post_processing()
       return;
     }
 
+  if (!directional_element (this).get ())
+    directional_element (this).set (get_default_dir ());
+  
   Real staff_space = paper_l ()->get_var ("interline");
   Real half_staff_space = staff_space / 2;
   Real x_gap_f = paper_l ()->get_var ("tie_x_gap");
@@ -225,7 +240,7 @@ Tie::get_rods () const
 Molecule*
 Tie::do_brew_molecule_p () const
 {
-  Real thick = paper_l ()->get_var ("slur_thickness");
+  Real thick = paper_l ()->get_var ("tie_thickness");
   Bezier one = get_curve ();
 
   Molecule a;
index 965ecbf3c4431f53ef2df6750c7b4a70699bbef9..0e6f874f1f6d5393deff9355a4619ff5c8308446 100644 (file)
@@ -35,12 +35,10 @@ Time_signature_engraver::do_process_requests()
   Time_signature_change_req *req = timing_grav_l->time_signature_req_l();
   if (req)
     {
-      Array<int> args;
-      args.push (req->beats_i_);
-      args.push (req->one_beat_i_);
-       
       time_signature_p_ = new Time_signature;
-      time_signature_p_->args_ = args;
+      time_signature_p_->set_elt_property ("fraction",
+                                          gh_cons (gh_int2scm (req->beats_i_),
+                                                   gh_int2scm (req->one_beat_i_))); 
       time_signature_p_->set_elt_property ("break-aligned", SCM_BOOL_T);
     }
 
index aaa7952d8e555ba34900fc835d299f9b49aa748b..24f0fa73f0d8cd51a49da566cacad039146bbcd8 100644 (file)
@@ -23,25 +23,76 @@ Molecule*
 Time_signature::do_brew_molecule_p () const
 {
   SCM st = get_elt_property ("style");
+
+  SCM frac = get_elt_property ("fraction");
+  int n = 4;
+  int d = 4;
+  if (gh_pair_p (frac))
+    {
+      n = gh_scm2int (gh_car (frac));
+      d = gh_scm2int (gh_cdr (frac));
+    }
+
   
   if (gh_string_p (st))
     {
       String style (ly_scm2string (st));
       if (style[0]=='1')
        {
-         Array<int> tmparr = args_;
-         return new Molecule( lookup_l ()->time_signature (args_[0], 0, paper_l ()));
+         return new Molecule (time_signature (n, 0));
        }
       else
        {
-         return new Molecule( lookup_l ()-> special_time_signature (style, args_[0], args_[1], paper_l ()));
+         return new Molecule (special_time_signature (style, n, d));
        }
     }
   else
-    return new Molecule(lookup_l ()->time_signature (args_[0], args_[1],paper_l ()));
+    return new Molecule (time_signature (n,d));
 }
 
+Molecule
+Time_signature::special_time_signature (String s, int n, int d) const
+{
+  // First guess: s contains only the signature style
+  String symbolname = "timesig-" + s + to_str (n) + "/" + to_str (d);
+  
+  Molecule m = lookup_l ()->afm_find (symbolname, false);
+  if (!m.empty_b()) 
+    return m;
+
+  // Second guess: s contains the full signature name
+  m = lookup_l ()->afm_find ("timesig-"+s, false);
+  if (!m.empty_b ()) 
+    return m;
+
+  // Resort to default layout with numbers
+  return time_signature (n,d);
+}
 
 
+Molecule
+Time_signature::time_signature (int num, int den) const
+{
+  String sty = "number";
 
+  /*
+    UGH: need to look at fontsize.
+   */
+  Molecule n (lookup_l ()->text (sty, to_str (num), paper_l ()));
+  Molecule d (lookup_l ()->text (sty, to_str (den), paper_l ()));
+  n.align_to (X_AXIS, CENTER);
+  d.align_to (X_AXIS, CENTER);
+  Molecule m;
+  if (den)
+    {
+      m.add_at_edge (Y_AXIS, UP, n, 0.0);
+      m.add_at_edge (Y_AXIS, DOWN, d, 0.0);
+    }
+  else
+    {
+      m = n;
+      m.align_to (Y_AXIS, CENTER);
+    }
+  return m;
+}
 
index 02b560feb4fc8c25387d3fca8202ed838cc21b86..2a1098181386c10bccb1fbfa43f86a8255378602 100644 (file)
@@ -6,6 +6,7 @@
   (c)  1997--2000 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
+#include "atom.hh"
 #include "beam.hh"
 #include "box.hh"
 #include "debug.hh"
@@ -21,7 +22,6 @@
 #include "directional-element-interface.hh"
 
 
-
 Tuplet_spanner::Tuplet_spanner ()
 {
   set_elt_property ("beams", SCM_EOL);
@@ -89,8 +89,17 @@ Tuplet_spanner::do_brew_molecule_p () const
       if (bracket_visibility)      
        {
          Real gap = paper_l () -> get_var ("tuplet_spanner_gap");
-       
-         mol_p->add_molecule (lookup_l ()->tuplet_bracket (dy, w, thick, gap, staff_space, dir));
+         Real height = staff_space;
+         Atom *at = new Atom (gh_list(ly_symbol2scm ("tuplet"),
+                                      gh_double2scm (height),
+                                      gh_double2scm (gap),
+                                      gh_double2scm (w),
+                                      gh_double2scm (dy),
+                                      gh_double2scm (thick),
+                                      gh_int2scm (dir),
+                                      SCM_UNDEFINED));
+
+         mol_p->add_atom (at->self_scm_);
        }
 
       mol_p->translate_axis (dir * staff_space, Y_AXIS);
@@ -186,17 +195,16 @@ Tuplet_spanner::do_post_processing ()
 Direction
 Tuplet_spanner::get_default_dir () const
 {
-  assert (false);
-  
   Direction d = UP;
   SCM dir_sym =get_elt_property ("dir-forced");
-  if (gh_number_p (dir_sym))
+  if (isdir_b (dir_sym))
     {
       d= to_dir (dir_sym);
       if (d != CENTER)
        return d;
     }
 
+  d = UP ;
   for (SCM s = get_elt_property ("columns"); gh_pair_p (s); s = gh_cdr (s))
     {
       Score_element * sc = unsmob_element (gh_car (s));
index dd2e7f1fcc00e995f93c73a8d114593a7cbe50ea..e38599966666d3293d9479620c4db051d122b25c 100644 (file)
@@ -85,8 +85,10 @@ tie_y_gap = 0.25 * \interline;
 tie_staffspace_length = 4.0 * \interline;
 
 % ugh: rename to bow (in bezier.cc and fonts.doc too...)
-% slur_thickness = 1.8 * \stafflinethickness;
-slur_thickness = 1.4 * \stafflinethickness;
+
+% used to be 1.4 .
+slur_thickness = 1.2 * \stafflinethickness;
+tie_thickness = 1.2 * \stafflinethickness;
 
 %{
  Specifies the maximum height of slurs.
@@ -159,8 +161,9 @@ hyphen_height = 0.2*\font_normal;
 hyphen_minimum_length = 0.25*\font_normal;
 
 % Multi-measure rests
-mmrest_x_minimum = 1.4*\staffheight;
-
+multi_measure_rest_x_minimum = 2.5*\staffheight;
+multi_measure_rest_padding = 2.0 *\interline;
+multi_measure_rest_expand_limit = 10.0;
 
 % chop off this much when next to pp / ff sign.
 crescendo_shorten = 4.0 * \interline;
@@ -238,3 +241,4 @@ Wordwrap =0.0;
 
 #'Staff_symbol::staff-space = \interline ;
 #'Staff_symbol::line-count = #5
+
index 92cb7f4e4ef36b2d0c82312f30aceea91f838109..47cb7d258b78a5b7a77766c52162f12e2b4a6941 100644 (file)
@@ -13,6 +13,9 @@ ff = \textscript "ff" "dynamic"
 fff = \textscript "fff" "dynamic"
 fp = \textscript "fp" "dynamic"
 cresc = \textscript "cresc." "italic"
+decresc = \textscript "decresc." "italic"
+dim = \textscript "dim." "italic"
+
 sf = \textscript "sf" "dynamic"
 sfp = \textscript "sfp" "dynamic"
 sff = \textscript "sff" "dynamic"
index 8d98ea97a6793c36fd27102084896ff17f090f50..bfe8f048aece7fed5ca82fbbff84c4ee28a740ae 100644 (file)
@@ -1,15 +1,15 @@
 Begin3
 Title: LilyPond
-Version: 1.3.23
-Entered-date: 07FEB00
+Version: 1.3.24
+Entered-date: 13FEB00
 Description: 
 Keywords: music notation typesetting midi fonts engraving
 Author: hanwen@cs.uu.nl (Han-Wen Nienhuys)
        janneke@gnu.org (Jan Nieuwenhuizen)
 Maintained-by: hanwen@stack.nl (Han-Wen Nienhuys)
 Primary-site: sunsite.unc.edu /pub/Linux/apps/sound/convert
-       1000k lilypond-1.3.23.tar.gz 
+       1000k lilypond-1.3.24.tar.gz 
 Original-site: ftp.cs.uu.nl /pub/GNU/LilyPond/development/
-       1000k lilypond-1.3.23.tar.gz 
+       1000k lilypond-1.3.24.tar.gz 
 Copying-policy: GPL
 End
index 36bcf2f7989411e5e9c3adeb3cbf4d9ab64307c7..a0800aac45711b28d5205d0dce9ef34edd2f9eb6 100644 (file)
@@ -1,9 +1,9 @@
 Name: lilypond
-Version: 1.3.23
+Version: 1.3.24
 Release: 1
 Copyright: GPL
 Group: Applications/Publishing
-Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.3.23.tar.gz
+Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.3.24.tar.gz
 Summary: A program for printing sheet music.
 URL: http://www.cs.uu.nl/~hanwen/lilypond
 # get Packager from (undocumented?) ~/.rpmmacros!
index 60b6f26cf372fb0067fe37e1b24e208ccb9d6e66..f23ac55661de52ff97d0c692fa57a73c6c51d5ac 100644 (file)
@@ -8,13 +8,13 @@ depth = .
 
 # descent order into subdirectories:
 #
-SUBDIRS = scripts buildscripts  flower lib lily mf midi2ly po debian \
+SUBDIRS = scripts buildscripts  flower lily mf midi2ly po debian \
        Documentation ly input tex make mutopia intl stepmake\
        ps  scm
 #
 
 SCRIPTS = configure aclocal.m4
-README_FILES =  DEDICATION COPYING NEWS TODO CHANGES
+README_FILES =  DEDICATION COPYING NEWS TODO CHANGES ROADMAP
 README_TXT_FILES = AUTHORS.txt README.txt INSTALL.txt 
 IN_FILES := $(wildcard *.in)
 EXTRA_DIST_FILES = dstreamrc lilypond-mode.el vimrc VERSION $(README_FILES)  $(SCRIPTS) $(IN_FILES) 
index 538b006eb00d286a6d6c61fc13b33dbe9a2ff840..c7e83735513019d5839ab2e486337a52ac251ae3 100644 (file)
@@ -92,10 +92,10 @@ save breve_rest_y, breve_rest_x;
 
 breve_rest_y# =  staff_space#;
 breve_rest_x# = 3/5 staff_space#;
-multi_rest_x# = 2 staff_space#;
-multi_rest_y# = 1/3 staff_space#;
+multi_rest_x# = 4 staff_space#;
+multi_beam_height# = 1/3 staff_space#;
 
-define_pixels(breve_rest_y, breve_rest_x, multi_rest_x, multi_rest_y);
+define_pixels(breve_rest_y, breve_rest_x, multi_rest_x, multi_beam_height);
 
 fet_beginchar("breve rest", "-1", "breverest");
        set_char_box(0, breve_rest_x#, 0, breve_rest_y#);
@@ -112,12 +112,12 @@ tracingvariables := 1;
 fet_beginchar("multi rest", "-4", "multirest");
        set_char_box(multi_rest_x#, multi_rest_x#,
                     breve_rest_y#, breve_rest_y#);
-       draw_block ((-multi_rest_x, -multi_rest_y),
-                  (multi_rest_x, multi_rest_y));
-       draw_block ((-multi_rest_x,-breve_rest_y),
-                  (rthin-multi_rest_x, breve_rest_y));
-       draw_block ((multi_rest_x-rthin,-breve_rest_y),
-                  (multi_rest_x, breve_rest_y));
+       draw_block ((- b, - multi_beam_height),
+                  (w, multi_beam_height));
+       draw_block ((- b,-breve_rest_y),
+                  (rthin - b, breve_rest_y));
+       draw_block ((w - rthin,-breve_rest_y),
+                  (w, breve_rest_y));
 fet_endchar;
 
 fet_beginchar("Quarter rest","2","quartrest");
index a50866f73ab20929db2c4efc36eb69ea83e310bb..b1cdd49fbc1befe81933133826ee94c0bc84e406 100644 (file)
@@ -35,9 +35,9 @@ if test = 0:
        input feta-klef;
        input feta-timesig;
 else:
-       input feta-bolletjes;   
+%      input feta-bolletjes;   
 %      input feta-banier;
-%      input feta-eindelijk;
+       input feta-eindelijk;
 %      input feta-klef;
 %      input feta-toevallig;
 %      input feta-schrift;
index 2ca82d771d6d3e85e58fc397836af5c2027e1c09..be478d4ab1ff8c9dc2289bb13e44d2a9373b3fbb 100644 (file)
@@ -55,6 +55,7 @@ def draw_six =
        penpos1(thin,90);
        z1=(thick,h/2+thin-hair/2);
        penpos2(hair,90);
+       
        z2=(w/2,y1);
        penpos3(7/8thick,0);
        % yup, should use the path fract [] "everywhere"
@@ -71,7 +72,7 @@ def draw_six =
        z10r=(0,y3);
        penlabels(1,2,3,4,5,6,7,8,9,10,11);
        save t; t=tense;
-       fill z5{right}..z2r{right}..tension t..z3r{down}
+       fill z7{right}..z2r{right}..tension t..z3r{down}
                ..tension t..z4r{left}
                ..tension t..z7r{up}..tension t..z6r{right}
                ..z6l{left}..tension t..z7l{down}..z10l{up}..cycle;
diff --git a/mf/feta-test11.mf b/mf/feta-test11.mf
deleted file mode 100644 (file)
index 4bec669..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-% feta-test16
-% part of LilyPond's pretty-but-neat music font
-
-input feta-autometric;
-fet_beginfont("feta-test", 16);
-staffsize#:=11pt#;
-test:=1;
-
-% smoked cheese
-% test := -1;
-
-
-% dem piksels.
-%test := 1;
-
-input feta-generic;
-
-fet_endfont("feta");
-
-end.
-
diff --git a/mf/slur.mf b/mf/slur.mf
new file mode 100644 (file)
index 0000000..86a394a
--- /dev/null
@@ -0,0 +1,31 @@
+
+staffsize# = 1pt#;
+stafflinethickness# = staffsize#/10;
+define_pixels (stafflinethickness, staffsize);
+
+input feta-sleur;
+
+
+
+% beginchar
+
+indent = 1.17 staffsize;
+height = 6.15 staffsize;
+len = 10 staffsize;
+
+path boogje;
+
+
+
+z1 = (0,0);
+z2 = (indent, height);
+z3 = (len - indent, height);
+z4 = (len, 0);
+
+boogje=z1..controls z2 and z3..z4;
+pickup pencircle scaled stafflinethickness;
+draw boogje;
+shipit;
+
+
+bye
index 906205f63095e71bf7f756885d64ffd153b5a744..5a6f293e3367e9c4f921f53e8b8f091211125779 100644 (file)
@@ -8,7 +8,7 @@ MODULE_NAME = midi2ly
 
 SUBDIRS = include
 EXTRA_DIST_FILES += TODO
-MODULE_LIBS=$(depth)/lib $(depth)/flower
+MODULE_LIBS=$(depth)/flower
 HELP2MAN_EXECS = midi2ly
 STEPMAKE_TEMPLATES=c++ executable po help2man
 
index d18cdbf12f6287ee7f000abd281afeaec4a66746..2e218d5b09cd844f20b193946f773ba14790ca57 100644 (file)
      "\\placebox{"
      (number->dim y) "}{" (number->dim x) "}{" s "}\n"))
 
-
-
   (define (bezier-sandwich l thick)
     (embedded-ps ((ps-scm 'bezier-sandwich) l thick)))
 
-
   (define (start-line ht)
     (begin
       (string-append"\\vbox to " (number->dim ht) "{\\hbox{%\n"))
      (numbers->string (list w h (inexact->exact cont) thick))
      " draw_crescendo"))
 
+  ;; what the heck is this interface ?
   (define (dashed-slur thick dash l)
     (string-append 
      (apply string-append (map control->string l)) 
      (number->string thick) 
      " [ "
-     (if (> 1 dash)
-        (number->string (- (* thick dash) thick))
-        "0")
+     (number->string dash)
      " "
-     (number->string (* 2 thick))
+     (number->string (* 10 thick))     ;UGH.  10 ?
      " ] 0 draw_dashed_slur"))
 
   (define (decrescendo thick w h cont)
    )
      
 
+(define (slur-ugly ind ht)
+  (if (and
+;       (< ht 4.0)
+       (< ht (* 4 ind))
+       (> ht (* 0.4 ind))
+       (> ht (+ (* 2 ind) -4))
+       (< ht (+ (* -2 ind) 8)))
+      #f
+      (cons ind  ht)
+  ))