From c52973e438ce3490d688860bb71849a7b3c26fef Mon Sep 17 00:00:00 2001 From: Han-Wen Nienhuys Date: Sun, 18 Jun 2000 01:56:26 +0200 Subject: [PATCH] release: 1.3.61 =========== * Webpage hacking 1.3.60.h --- CHANGES | 33 +- Documentation/GNUmakefile | 11 +- Documentation/Localisation.texi | 180 -------- Documentation/footer.html.in | 38 +- Documentation/hacking.texi | 236 +++++++--- Documentation/header.html.in | 103 +---- Documentation/index.texi | 24 +- Documentation/misc/GNUmakefile | 14 +- Documentation/regression-test.tely | 7 + Documentation/topdocs/index.tely | 96 ++--- Documentation/user/glossary.tely | 6 +- Documentation/user/refman.itely | 2 +- Documentation/user/tutorial.itely | 2 +- VERSION | 4 +- buildscripts/ps-to-gifs.sh | 90 ---- input/test/hara-kiri-short.ly | 33 ++ input/test/{scales-fixme.ly => scales.ly} | 37 +- input/trip.ly | 1 + lily/all-font-metrics.cc | 4 +- lily/auto-beam-engraver.cc | 12 +- lily/axis-group-engraver.cc | 6 +- lily/bar-engraver.cc | 2 +- lily/bar-number-engraver.cc | 6 +- lily/bar.cc | 31 +- lily/breathing-sign.cc | 11 +- lily/chord-name-engraver.cc | 2 +- lily/chord-name.cc | 18 +- lily/clef-engraver.cc | 6 +- lily/clef-item.cc | 5 +- lily/dots.cc | 17 +- lily/dynamic-engraver.cc | 10 +- lily/extender-engraver.cc | 39 +- lily/hara-kiri-engraver.cc | 3 + lily/hara-kiri-vertical-group-spanner.cc | 32 +- lily/hyphen-engraver.cc | 63 ++- lily/hyphen-spanner.cc | 80 ++-- lily/identifier.cc | 26 +- lily/include/bar.hh | 2 +- lily/include/extender-spanner.hh | 16 +- .../hara-kiri-vertical-group-spanner.hh | 1 + lily/include/hyphen-engraver.hh | 48 --- lily/include/hyphen-spanner.hh | 18 +- lily/include/identifier.hh | 15 +- lily/include/lily-proto.hh | 3 +- lily/include/lyric-engraver.hh | 2 +- lily/include/midi-def.hh | 2 +- lily/include/paper-def.hh | 5 +- lily/include/slur.hh | 4 + lily/include/spanner.hh | 2 +- lily/include/sustain-pedal.hh | 45 -- lily/include/system-start-delimiter.hh | 6 +- lily/include/text-item.hh | 29 -- lily/include/tie.hh | 3 + lily/include/translator-group.hh | 2 +- lily/include/translator.hh | 2 +- lily/instrument-name-engraver.cc | 6 +- lily/key-item.cc | 65 ++- lily/lexer.ll | 7 +- lily/lily-guile.cc | 2 +- lily/line-number-engraver.cc | 4 +- lily/lyric-engraver.cc | 4 +- lily/lyric-extender.cc | 70 +-- lily/mark-engraver.cc | 8 +- lily/midi-def.cc | 6 - lily/note-heads-engraver.cc | 6 +- lily/note-name-engraver.cc | 6 +- lily/paper-def.cc | 24 +- lily/paper-outputter.cc | 15 +- lily/parser.yy | 406 ++++++++---------- lily/piano-pedal-engraver.cc | 18 +- lily/rest.cc | 28 +- lily/scope.cc | 9 - lily/score-element.cc | 67 +-- lily/span-bar.cc | 6 +- lily/stem.cc | 2 +- lily/sustain-pedal.cc | 41 +- lily/system-start-delimiter.cc | 58 +-- lily/text-engraver.cc | 8 +- lily/text-item.cc | 35 +- lily/translator.cc | 4 +- lily/tuplet-spanner.cc | 25 +- ly/declarations.ly | 8 +- ly/engraver.ly | 29 +- ly/init.ly | 2 + ly/params-as.ly | 6 - ly/params.ly | 37 +- ly/{scales.ly => scale-definitions.ly} | 0 make/lilypond-vars.make | 2 + make/mudela-rules.make | 4 +- make/out/lilypond.lsm | 8 +- make/out/lilypond.spec | 4 +- make/toplevel.make.in | 13 +- scm/lily.scm | 1 + scripts/abc2ly.py | 6 +- stepmake/bin/add-html-footer.py | 115 ++--- stepmake/stepmake/documentation-vars.make | 2 +- 96 files changed, 1109 insertions(+), 1553 deletions(-) delete mode 100644 buildscripts/ps-to-gifs.sh create mode 100644 input/test/hara-kiri-short.ly rename input/test/{scales-fixme.ly => scales.ly} (78%) delete mode 100644 lily/include/hyphen-engraver.hh delete mode 100644 lily/include/sustain-pedal.hh rename ly/{scales.ly => scale-definitions.ly} (100%) diff --git a/CHANGES b/CHANGES index 885fa95906..652041d578 100644 --- a/CHANGES +++ b/CHANGES @@ -1,29 +1,24 @@ ---- ../lilypond-1.3.60.jcn1/CHANGES Sat Jun 17 16:10:49 2000 -++ b/CHANGES Sun Jun 18 16:18:28 2000 -@@ -1,3 +1,9 @@ -1.3.60.jcn2 -=========== - -* Did som more webpage hacking and made some make website fixes, back links - should work again. - - 1.3.60.jcn1 - =========== - --- ../lilypond-1.3.60/CHANGES Fri Jun 16 16:45:48 2000 -++ b/CHANGES Sat Jun 17 16:10:49 2000 -@@ -1,3 +1,8 @@ 1.3.60.jcn1 =========== * Webpage hacking - 1.3.59.hwn1 - =========== - 1.3.60.mb1 +1.3.60.hwn1 =========== -* First attempt to reintroduce support for keys with different - accidentals in different octaves. +* Junk int_identifier, real_identifier. Merged Midi_def_identifier and +Paper_def_identifier. + +* Fixed bug with spanning barlines in combination with Hara-Kiri staffs. + +* Cleaned up Text_item, Hyphen_spanner, Lyric_extender and +Sustain_pedal and reduced them to an Score_element interface (they are +no longer Score_element derived types). + +* Some instances of brew_molecule routines have moved out of +Score_element, and are now called scheme_molecule. + +* Moved lots of parameters from ly/params.ly to ly/engraver.ly 1.3.59.hwn1 =========== diff --git a/Documentation/GNUmakefile b/Documentation/GNUmakefile index 40b54c886b..72aeaddca7 100644 --- a/Documentation/GNUmakefile +++ b/Documentation/GNUmakefile @@ -12,15 +12,8 @@ include $(depth)/make/stepmake.make default: local-doc -local-WWW: copy-for-me txt-to-html $(outdir)/regression-test.ps.gz $(outdir)/regression-test.html footify +local-WWW: copy-for-me $(outdir)/regression-test.ps.gz $(outdir)/regression-test.html footify copy-for-me: - $(foreach a, $(README_TOP_FILES), cp ../$(a) $(outdir)/$(a).txt && ) true + $(foreach a, $(README_TOP_FILES),cp ../$(a) $(outdir)/$(a).txt && ) true -txt-to-html: - $(foreach a, $(README_TOP_FILES), \ - echo "" > $(outdir)/$(a).html;\ - cat $(outdir)/$(a).txt >> $(outdir)/$(a).html;\ - echo "" >> $(outdir)/$(a).html\ - && ) true - $(footify) $(addprefix $(outdir)/, $(addsuffix .html, $(README_TOP_FILES))) diff --git a/Documentation/Localisation.texi b/Documentation/Localisation.texi index 672cbf6592..e69de29bb2 100644 --- a/Documentation/Localisation.texi +++ b/Documentation/Localisation.texi @@ -1,180 +0,0 @@ -\input texinfo @c -*-texinfo-*- vim:tw=72 -@setfilename Localisation -@settitle Localisation - User messages in LilyPond - -@node Top, , , (dir) -@top - -@chapter Localisation - User messages in LilyPond - -@section Introduction - -This document provides some guidelines for uniformising user messages. -In the absence of other standards, we'll be using these rules when coding -for for LilyPond@footnote{ -In addition to the C++ coding standards that come with Lily -}. Hopefully, this can be replaced by general GNU -guidelines in the future. - -Not-preferred messages are marked with @code{+}. -By convention, agrammatical examples are marked with @code{*}. - - -@section Guidelines - -@itemize @bullet - -@item -Every message to the user should be localised (and thus be marked -for localisation). This includes warning and error messages. - -@item -Don't localise/gettextify: - -@itemize @minus -@item @code{programming_error ()}s -@item @code{programming_warning ()}s -@item debug strings -@item output strings (PostScript, TeX)@footnote{ -This may seem ridiculously obvious, however, makeinfo-3.12s localises -output strings. Sending bug report now ---jcn -} -@end itemize - - - -@item -Messages to be localised must be encapsulated in @code{_ (STRING)} -or @code{_f (FORMAT, ...)}. Eg: - -@example -warning (_ ("Need music in a score")); -error (_f ("Can't open file: `%s'", file_name)); -@end example - -In some rare cases you may need to call @code{gettext ()} by hand. -This happens when you pre-define (a list of) string constants for later -use. In that case, you'll probably also need to mark these string -constants for translation, using @code{_i (STRING)}. The @code{_i} -macro is a no-op, it only serves as a marker for @file{xgettext}. - -@example -char const* messages[] = @{ - _i ("enable debugging output"), - _i ("ignore mudela version"), - 0 -@}; - -void -foo (int i) -@{ - puts (gettext (messages [i])); -@} -@end example - -See also -@file{flower/getopt-long.cc} and @file{lily/main.cc}. - -@item -Don't use leading or trailing whitespace in messages. - -@item -Messages containing a final verb, or a gerund (@code{-ing}-form) -always start with a capital. Other (simpler) messages start with -a lowercase letter: - -@example -The word `foo' is not declared. -`foo': not declared. -Not declaring: `foo'. -@end example - -@item -To avoid having a number of different messages for the same situation, -we'll use quoting like this @code{"message: `%s'"} for all strings. -Numbers are not quoted: - -@example -_f ("Can't open file: `%s'", name_str) -_f ("Can't find charater number: %d", i) -@end example - -@item -Think about translation issues. -In a lot of cases,it's better to translate a whole message. -The english grammar mustn't be imposed on the translator. -So, iso - -@example -_ ("Stem at ") + moment.str () + _(" doen't fit in beam") -@end example - -@noindent -have - -@example -_f ("Stem at %s doen't fit in beam", moment.str ()) -@end example - -@item -Split up multi-sentence messages, whenever possible. Instead of - -@example -warning (_f ("out of tune! Can't find: `%s', "Key_engraver")); - -warning (_f ("Can't find font `%s', loading default", - font_name)); -@end example - -@noindent -rather say: - -@example -warning (_ ("out of tune:"); -warning (_f ("Can't find: `%s', "Key_engraver")); - -warning (_f ("Can't find font: `%s', font_name)); -warning (_f ("Loading default font")); -@end example - -@item -If you must have multiple-sentence messages, use full punctuation. -Use two spaces after end of sentence punctuation. -No punctuation (esp. period) is used at the end of simple messages. - -@example - _f ("Non-matching braces in text `%s', adding braces", text) - _ ("Debug output disabled. Compiled with NPRINT.") - _f ("Huh? Not a Request: `%s'. Ignoring.", request) -@end example - -@item -Don't modularise too much; a lot of words cannot be translated -without context. -It's probably safe to treat most occurences of words like -stem, beam, crescendo as separately translatable words. - -@item -When translating, it is preferrable to put interesting information -at the end of the message, rather than embedded in the middle. -This especially applies to frequently used messages, even if this -would mean sacrificing a bit of eloquency. This holds for original -messages too, of course. - -@example - en: can't open: `foo.ly' -+ nl: kan `foo.ly' niet openen (1) - kan niet openen: `foo.ly'* (2) - niet te openen: `foo.ly'* (3) -@end example - -The first nl message, although gramatically and stylishly correct, -is not friendly for parsing by humans (even if they speak dutch). -I guess we'd prefer something like (2) or (3). - -@item -Please don't run make po/po-update with GNU gettext < 0.10.35 - -@end itemize - -@bye diff --git a/Documentation/footer.html.in b/Documentation/footer.html.in index 205114b335..bcae009876 100644 --- a/Documentation/footer.html.in +++ b/Documentation/footer.html.in @@ -1,20 +1,27 @@ - - - + + + + + +
+Go back to index of LilyPond.

Please send GNU LilyPond questions and comments to @@ -23,8 +30,12 @@ Please send GNU LilyPond questions and comments to gnu-music-discuss@gnu.org.

+ + Please send comments on these web pages to -@MAIL_ADDRESS@ +%s + +

@@ -35,6 +46,3 @@ Copyright (c) 1997, 1998, 1999, 2000 Han-Wen Nienhuys and Jan Nieuwenhuizen. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved.

- - - diff --git a/Documentation/hacking.texi b/Documentation/hacking.texi index e7a09fe3f0..8c6d9d0fff 100644 --- a/Documentation/hacking.texi +++ b/Documentation/hacking.texi @@ -18,7 +18,7 @@ * Future work:: * Coding standards:: * Making patches:: - +* Localisation:: @end menu @node LilyPond internals, , Top, Top @@ -563,63 +563,6 @@ The source is commented in the DOC++ style. Check out doc++ at Unfortunately most of the code isn't really documented that good. -@unnumberedsubsec Members (2) - -Standard methods: - -@example - - ///check that *this satisfies its invariants, abort if not. - void OK () const - - /// print *this (and substructures) to debugging log - void print () const - - /** - protected member. Usually invoked by non-virtual XXXX () - */ - virtual do_XXXX () - - /**add some data to *this. - Presence of these methods usually imply that it is not feasible to this - via a constructor - */ - add (..) - - /// replace some data of *this - set (..) - -@end example - -@unnumberedsubsec Constructor - -Every class should have a default constructor. - -Don't use non-default constructors if this can be avoided: - -@example - - Foo f(1) - -@end example - -is less readable than - -@example - - Foo f; - f.x = 1 - -@end example - -or - -@example - - Foo f(Foo_convert::int_to_foo (1)) - -@end example - @unnumberedsec Hungarian notation naming convention Proposed is a naming convention derived from the so-called @@ -849,6 +792,183 @@ and don't forget to make automatically generated files: configure @end example + +@node Localisation, , , Top + +@chapter Localisation - User messages in LilyPond + +@section Introduction + +This document provides some guidelines for uniformising user messages. +In the absence of other standards, we'll be using these rules when coding +for for LilyPond@footnote{ +In addition to the C++ coding standards that come with Lily +}. Hopefully, this can be replaced by general GNU +guidelines in the future. + +Not-preferred messages are marked with @code{+}. +By convention, agrammatical examples are marked with @code{*}. + + +@section Guidelines + +@itemize @bullet + +@item +Every message to the user should be localised (and thus be marked +for localisation). This includes warning and error messages. + +@item +Don't localise/gettextify: + +@itemize @minus +@item @code{programming_error ()}s +@item @code{programming_warning ()}s +@item debug strings +@item output strings (PostScript, TeX)@footnote{ +This may seem ridiculously obvious, however, makeinfo-3.12s localises +output strings. Sending bug report now ---jcn +} +@end itemize + + + +@item +Messages to be localised must be encapsulated in @code{_ (STRING)} +or @code{_f (FORMAT, ...)}. Eg: + +@example +warning (_ ("Need music in a score")); +error (_f ("Can't open file: `%s'", file_name)); +@end example + +In some rare cases you may need to call @code{gettext ()} by hand. +This happens when you pre-define (a list of) string constants for later +use. In that case, you'll probably also need to mark these string +constants for translation, using @code{_i (STRING)}. The @code{_i} +macro is a no-op, it only serves as a marker for @file{xgettext}. + +@example +char const* messages[] = @{ + _i ("enable debugging output"), + _i ("ignore mudela version"), + 0 +@}; + +void +foo (int i) +@{ + puts (gettext (messages [i])); +@} +@end example + +See also +@file{flower/getopt-long.cc} and @file{lily/main.cc}. + +@item +Don't use leading or trailing whitespace in messages. + +@item +Messages containing a final verb, or a gerund (@code{-ing}-form) +always start with a capital. Other (simpler) messages start with +a lowercase letter: + +@example +The word `foo' is not declared. +`foo': not declared. +Not declaring: `foo'. +@end example + +@item +To avoid having a number of different messages for the same situation, +we'll use quoting like this @code{"message: `%s'"} for all strings. +Numbers are not quoted: + +@example +_f ("Can't open file: `%s'", name_str) +_f ("Can't find charater number: %d", i) +@end example + +@item +Think about translation issues. +In a lot of cases,it's better to translate a whole message. +The english grammar mustn't be imposed on the translator. +So, iso + +@example +_ ("Stem at ") + moment.str () + _(" doen't fit in beam") +@end example + +@noindent +have + +@example +_f ("Stem at %s doen't fit in beam", moment.str ()) +@end example + +@item +Split up multi-sentence messages, whenever possible. Instead of + +@example +warning (_f ("out of tune! Can't find: `%s', "Key_engraver")); + +warning (_f ("Can't find font `%s', loading default", + font_name)); +@end example + +@noindent +rather say: + +@example +warning (_ ("out of tune:"); +warning (_f ("Can't find: `%s', "Key_engraver")); + +warning (_f ("Can't find font: `%s', font_name)); +warning (_f ("Loading default font")); +@end example + +@item +If you must have multiple-sentence messages, use full punctuation. +Use two spaces after end of sentence punctuation. +No punctuation (esp. period) is used at the end of simple messages. + +@example + _f ("Non-matching braces in text `%s', adding braces", text) + _ ("Debug output disabled. Compiled with NPRINT.") + _f ("Huh? Not a Request: `%s'. Ignoring.", request) +@end example + +@item +Don't modularise too much; a lot of words cannot be translated +without context. +It's probably safe to treat most occurences of words like +stem, beam, crescendo as separately translatable words. + +@item +When translating, it is preferrable to put interesting information +at the end of the message, rather than embedded in the middle. +This especially applies to frequently used messages, even if this +would mean sacrificing a bit of eloquency. This holds for original +messages too, of course. + +@example + en: can't open: `foo.ly' ++ nl: kan `foo.ly' niet openen (1) + kan niet openen: `foo.ly'* (2) + niet te openen: `foo.ly'* (3) +@end example + +The first nl message, although gramatically and stylishly correct, +is not friendly for parsing by humans (even if they speak dutch). +I guess we'd prefer something like (2) or (3). + +@item +Please don't run make po/po-update with GNU gettext < 0.10.35 + +@end itemize + +@bye + @bye diff --git a/Documentation/header.html.in b/Documentation/header.html.in index f6a9b01c20..e96b3aaf29 100644 --- a/Documentation/header.html.in +++ b/Documentation/header.html.in @@ -1,101 +1,26 @@ - - - - - + + - - - - - -
- [icon] - -

GNU LilyPond

-

Welcome to the home of the GNU Music Typesetter

-
+ - + - - - - - - - - - + -
Home
General info
- Hacking
- GNU Project
- Translations
- LilyPond dot org
-
-
- Documentation -
- News
- FAQ
- User manual
- Features
- Todo
-
-
- Download Source -
- Stable
- Development
-
-
- Download Binary -
- RedHat i386
- LinuxPPC
- Debian i386
- Debian PowerPC
- Windows Stable
- Windows Testing
-
-
- Music -
- Short examples
- Longer examples
- Mutopia Project
- Jonh Sankey
- Jeff Covey
- Dirk Lattermann
-
-
- Mailing Lists + Entry page
+ Hacking
Download Source
- Discussion
- Help
- Bugs
-
+ Stable
+ Development
-
+
+ + diff --git a/Documentation/index.texi b/Documentation/index.texi index feb58100c9..d3ee87f0cd 100644 --- a/Documentation/index.texi +++ b/Documentation/index.texi @@ -9,11 +9,11 @@ @unnumberedsubsec General information @itemize @bullet -@item @uref{DEDICATION.html,Dedication} +@item @uref{DEDICATION.txt,Dedication} @item @uref{../topdocs/out-www/AUTHORS.html, Authors} @item @uref{../topdocs/out-www/README.html, Readme file} @item @uref{../topdocs/out-www/INSTALL.html, Installation instructions} -@item @uref{CHANGES.html, Things recently done} +@item @uref{CHANGES.txt, Things recently done} @item @uref{faq.html,FAQ: Frequently asked questions}, with answers @end itemize @@ -66,18 +66,18 @@ by computer}. @itemize @bullet @item @uref{hacking.html,Internals} details of the implementation @item @uref{README-W32.html,Compiling and running on Windows32} -@item @uref{../misc/out-www/CHANGES-0.0.html, Change logs from 0.0 till 0.1 } -@item @uref{../misc/out-www/CHANGES-0.1.html, Change logs from 0.1 till 1.0 } -@item @uref{../misc/out-www/CHANGES-1.0.html, Change logs from 1.0 till 1.1 } -@item @uref{../misc/out-www/CHANGES-1.1.html, Change logs from 1.1 till 1.2 } -@item @uref{../misc/out-www/NEWS-1.2.html, summary of changes from 1.1 till 1.2 } -@item @uref{../misc/out-www/ANNOUNCE-0.1.html, Announcement of 0.1 (includes summary of +@item @uref{../misc/out-www/CHANGES-0.0.txt, Change logs from 0.0 till 0.1 } +@item @uref{../misc/out-www/CHANGES-0.1.txt, Change logs from 0.1 till 1.0 } +@item @uref{../misc/out-www/CHANGES-1.0.txt, Change logs from 1.0 till 1.1 } +@item @uref{../misc/out-www/CHANGES-1.1.txt, Change logs from 1.1 till 1.2 } +@item @uref{../misc/out-www/NEWS-1.2.txt, summary of changes from 1.1 till 1.2 } +@item @uref{../misc/out-www/ANNOUNCE-0.1.txt, Announcement of 0.1 (includes summary of changes)} -@item @uref{../misc/out-www/ANNOUNCE-1.0.html, Announcement of 1.0 (includes summary of +@item @uref{../misc/out-www/ANNOUNCE-1.0.txt, Announcement of 1.0 (includes summary of changes)} -@item @uref{../misc/out-www/ANNOUNCE-1.2.html, Announcement of 1.2 (includes summary of changes)} -@item @uref{../misc/out-www/AIMS.html, Why LilyPond?} -@item @uref{../misc/out-www/interview.html, Answers} to the Brave GNU world standard questions. +@item @uref{../misc/out-www/ANNOUNCE-1.2.txt, Announcement of 1.2 (includes summary of changes)} +@item @uref{../misc/out-www/AIMS.txt, Why LilyPond?} +@item @uref{../misc/out-www/interview.txt, Answers} to the Brave GNU world standard questions. @end itemize diff --git a/Documentation/misc/GNUmakefile b/Documentation/misc/GNUmakefile index ebcf4f2fd0..003590955b 100644 --- a/Documentation/misc/GNUmakefile +++ b/Documentation/misc/GNUmakefile @@ -11,20 +11,10 @@ include $(depth)/make/stepmake.make default: local-doc -#urg default local-WWW target uses footify before its time; -# must add footify with txt-to-html target -local-WWW: $(addprefix $(outdir)/, $(addsuffix .txt, $(TEXTS))) $(OUT_HTMLFILES) txt-to-html +local-WWW: $(addprefix $(outdir)/, $(addsuffix .txt, $(TEXTS))) copy-for-me: - $(foreach a, $(README_TOP_FILES), cp ../$(a) $(outdir)/$(a).txt && ) true + $(foreach a, $(README_TOP_FILES),cp ../$(a) $(outdir)/$(a).txt && ) true $(outdir)/%.txt: % cp $< $@ - -txt-to-html: - $(foreach a, $(TEXTS),\ - echo "

" > $(outdir)/$(a).html;\ - cat $(outdir)/$(a).txt >> $(outdir)/$(a).html;\ - echo "" >> $(outdir)/$(a).html\ - && ) true - $(footify) $(addprefix $(outdir)/, $(addsuffix .html, $(TEXTS))) diff --git a/Documentation/regression-test.tely b/Documentation/regression-test.tely index 83848bfbdf..661be6f850 100644 --- a/Documentation/regression-test.tely +++ b/Documentation/regression-test.tely @@ -328,6 +328,13 @@ two measures all have the same distance from each other: @mudelafile{breathing-sign.ly} +Hara kiri staffs kill themselves if they are empty. This example really +contains two staffs, but the second contains only spaces, and is +therefore removed. + +@mudelafile{hara-kiri-short.ly} + + Fonts are available in a default set of sizes: 11, 13, 16, 20, 23 and 26pt staffheight. Sizes of the text fonts and symbol fonts are made to match the staff dimensions. diff --git a/Documentation/topdocs/index.tely b/Documentation/topdocs/index.tely index 0f8eff1238..cd29b6442a 100644 --- a/Documentation/topdocs/index.tely +++ b/Documentation/topdocs/index.tely @@ -6,10 +6,9 @@ @top @html - @end html @html

[logo] @end html - -@c @unnumberedsec LilyPond -- The GNU Project Music Typesetter +@unnumberedsec LilyPond -- The GNU Project Music Typesetter @c something breaks on 3.12 f @@ -47,10 +44,9 @@ The input to LilyPond is plain text. So, you can use your favorite text editor to enter it, you can put it in mail or embed it in an article like this: -@c \relative c''{ \key es \major; r8 [c16 b] [c8 g] [as c16 b] [c8 d] | g,4 } @quotation @mudela[fragment,verbatim] -\relative c''{ \key es \major; r8 c16 b c8 g as c16 b c8 d | g,4 } + \relative c'' { \key c \minor; r8 [c16 b] [c8 g] [as c16 b] [c8 d] | g,4 } @end mudela @end quotation @@ -69,21 +65,18 @@ almost no restrictions. LilyPond is part of the @uref{http://www.gnu.org/,GNU Project}. The version numbers are in Linux-kernel style: even numbered versions -are `stable'. The webpages for the stable version (1.2) reside at GNU, -here: @uref{http://www.gnu.org/software/lilypond}. Big enhancements go -into the latest odd numbered version (1.3), whose webpages are on - @uref{http://www.cs.uu.nl/~hanwen/lilypond/,Han-Wen's site}. +are `stable'. The webpages for the stable version (1.2) reside +@uref{http://www.gnu.org/software/lilypond, on the GNU servers}. Big +enhancements go into the latest odd numbered version (1.3), whose +webpages are on @uref{http://www.cs.uu.nl/~hanwen/lilypond/,Han-Wen's +site}. Information on the latest and greatest features can be found in +the @uref{Documentation/out-www/CHANGES.txt, Change Log}. 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}. -@unnumberedsec News - -For the latest and greatest features, check out the -@uref{Documentation/out-www/CHANGES.html, Change Log}. - @html @@ -109,80 +102,69 @@ Lattermann also put some works @uref{http://www.alqualonde.de/lilypond.html,on the web}. @html - + @end html @unnumberedsec Download If you want to compile LilyPond from source, download here: @itemize @bullet @item Download stable releases at -@uref{ftp://ftp.gnu.org/gnu/lilypond/, GNU} +@uref{ftp://ftp.gnu.org/gnu/lilypond/,GNU} @item Download development releases from -@uref{ftp://ftp.cs.uu.nl/pub/GNU/LilyPond/development/, the source} +@uref{ftp://ftp.cs.uu.nl/pub/GNU/LilyPond/development/,the source} @item @uref{http://sca.uwaterloo.ca/lilypond/, by http (Canadian -mirror)} or @uref{ftp://sca.uwaterloo.ca/pub/, ftp (Canadian mirror)} -@item @uref{ftp://ftp.lilypond.org/pub/LilyPond/, mirror (Europe)} +mirror)} and +@uref{ftp://sca.uwaterloo.ca/pub/, ftp (Canadian mirror)} +@item +@uref{ftp://ftp.lilypond.org/pub/LilyPond/,mirror (Europe)} @end itemize Installing and compiling requires many additional packages, which are listed in the @uref{Documentation/topdocs/out-www/INSTALL.html, installation instructions}. -@html - -@end html - Binaries are available, but are not updated for every version released. @itemize @bullet -@item @uref{ftp://ftp.cs.uu.nl/pub/GNU/LilyPond/RedHat/RPMS/, RedHat i386} -@item @uref{ftp://ftp.cs.uu.nl/pub/GNU/LilyPond/RedHat/RPMS/, LinuxPPC} -@item -@uref{ftp://ftp.debian.org/debian/dists/unstable/main/binary-i386/tex, -Debian GNU/Linux i386} +@item +@uref{ftp://ftp.cs.uu.nl/pub/GNU/LilyPond/RedHat/RPMS/,RedHat-i386 and Linuxppc RPMs:} @item -@uref{ftp://ftp.debian.org/debian/dists/unstable/main/binary-powerpc/tex, -Debian GNU/Linux PowerPC} -@item @uref{http://home.austin.rr.com/jbr/jeff/lilypond/, Windows Stable} -@item @uref{http://appel.dyndns.org/lilypond/gnu-windows, Windows -Testing} +@uref{ftp://ftp.debian.org/pub/debian/dists/unstable/main/binary-i386/tex, + Debian binary} +@item @uref{http://home.austin.rr.com/jbr/jeff/lilypond/,Windows NT} @end itemize @html @end html -@unnumberedsec Mailing lists +@unnumberedsec Mailing list 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.) -@table @samp -@item info-gnu-music@@gnu.org +@itemize @bullet +@item @samp{info-gnu-music@@gnu.org} (@uref{http://www.mail-archive.com/info-gnu-music@@gnu.org,archive}) 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. - This list is moderated; ask @email{drl@@gnu.org, David R. Linn} or @email{hanwen@@cs.uu.nl, Han-Wen} to send announcements for this list. - This list is archived at - @uref{http://www.mail-archive.com/info-gnu-music@@gnu.org} -@item help-gnu-music@@gnu.org +@item @samp{help-gnu-music@@gnu.org} (@uref{http://www.mail-archive.com/help-gnu-music@@gnu.org,archive}). 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}. + @email{help-gnu-music-request@@gnu.org} -@item bug-gnu-music@@gnu.org +@item @samp{bug-gnu-music@@gnu.org} (@uref{http://www.mail-archive.com/bug-gnu-music@@gnu.org,archive}) 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} +to @email{bug-gnu-music-request@@gnu.org}. + Please include in your bugreport the version of LilyPond that you experience the problem with, a description of your system and sample @@ -190,28 +172,27 @@ input to reproduce the problem. Do not send output files over the list, they tend to be very big and don't help with describing the problem. -@item gnu-music-discuss@@gnu.org, +@item @samp{gnu-music-discuss@@gnu.org} (@uref{http://www.mail-archive.com/gnu-music-discuss@@gnu.org,archive}) 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 + @email{gnu-music-discuss-request@@gnu.org}. + + +@end itemize If you want to unsubscribe use the same procedure as subscribing, but substitute @code{unsubscribe} where you would put @code{subscribe}. @unnumberedsubsec Webmaster's Disclaimer -These pages were entirely created from a @strong{development snapshots} +These pages were entirely created from a @strong{development snapshot} of the LilyPond package. The version of this webpage is printed at the bottom. @html - @end html @bye diff --git a/Documentation/user/glossary.tely b/Documentation/user/glossary.tely index 3e63b48eaf..81e16eb771 100644 --- a/Documentation/user/glossary.tely +++ b/Documentation/user/glossary.tely @@ -1519,7 +1519,7 @@ note value: double length of @w{@ar{}@strong{brevis}}. @w{@ar{}@strong{note valu @mudela[13pt,eps] \property Score.barNonAuto = ##t \notes\relative c'' { - \property Voice.noteHeadStyle = "mensural" + \property Voice.noteHeadStyle = #'mensural g\longa } @end mudela @@ -1768,9 +1768,9 @@ but sometimes (mostly in pre baroque music) the double length note value \property Voice.textStyle = "large" \property Score.barNonAuto = ##t \notes\relative c'' { - \property Voice.noteHeadStyle = "mensural" + \property Voice.noteHeadStyle = #'mensural g\longa_"longa" g\breve_"breve" - \property Voice.noteHeadStyle = "" + \property Voice.noteHeadStyle = ##f g1_"1/1" g2_"1/2" g4_"1/4" s16 g8_"1/8" s16 g16_"1/16" s16 g32_"1/32" s16 g64_"1/64" s32 } @end mudela diff --git a/Documentation/user/refman.itely b/Documentation/user/refman.itely index b7db980a02..d385fd0cdc 100644 --- a/Documentation/user/refman.itely +++ b/Documentation/user/refman.itely @@ -19,7 +19,7 @@ * Note specification:: notedesc * barlines:: barlines * Manual beams:: Manual beam -* tremolo:: tremolo +* stem tremolo:: tremolo * Compound music expressions:: Compound music expressions * relative:: relative * Repeats:: Repeats diff --git a/Documentation/user/tutorial.itely b/Documentation/user/tutorial.itely index f15f05f515..a457b40368 100644 --- a/Documentation/user/tutorial.itely +++ b/Documentation/user/tutorial.itely @@ -937,7 +937,7 @@ hoomPahHoomPah = @{ [\hoomPah \hoomPah] @} Put two of these fragments in sequence, and beam them.@example bassvoices = \notes \relative c' @{ c4 g8. b,16 -\repeat unfold 4 {\hoomPahHoomPah} +\repeat unfold 4 @{\hoomPahHoomPah @} @end example Entering the bass part is easy: the hoomPahHoomPah variable is repeated four times; @code{unfold} means that all four repetitions diff --git a/VERSION b/VERSION index 9ec500aab8..5599f7aa07 100644 --- a/VERSION +++ b/VERSION @@ -1,8 +1,8 @@ PACKAGE_NAME=LilyPond MAJOR_VERSION=1 MINOR_VERSION=3 -PATCH_LEVEL=60 -MY_PATCH_LEVEL=jcn2 +PATCH_LEVEL=61 +MY_PATCH_LEVEL= # use the above to send patches: MY_PATCH_LEVEL is always empty for a # released version. diff --git a/buildscripts/ps-to-gifs.sh b/buildscripts/ps-to-gifs.sh deleted file mode 100644 index e2a3da89cb..0000000000 --- a/buildscripts/ps-to-gifs.sh +++ /dev/null @@ -1,90 +0,0 @@ -#!/bin/sh -# ps-to-gifs, convert PS to multiple gifs or other bitmaps - -usage() -{ - cat < $OUTFILE -PPMS=`ls $BASE*ppm` -for i in $PPMS; do - o=`dirname $i`/`basename $i .ppm`.$GIF - cat $i | $CROP | $PNMTOGIF $color > $o - rm $i -done - -if [ "x$OUTFILE" != "x" ]; then - mv $BASE-page1.$GIF $BASE.$GIF -fi - diff --git a/input/test/hara-kiri-short.ly b/input/test/hara-kiri-short.ly new file mode 100644 index 0000000000..52b24f0503 --- /dev/null +++ b/input/test/hara-kiri-short.ly @@ -0,0 +1,33 @@ + +\version "1.3.59"; +zager = \context Staff = zager \notes \relative c'' { + \clef treble; + c1 +} + +zoger = \context Staff = zoger \notes \relative c'' { + \clef treble; + \skip 1* 1; +} + +zagers = \context GrandStaff < + \zager + \zoger +> + +\score{ + < + \context StaffGroup = zagers < + \zagers + > + > + \paper{ + linewidth = 80.0\mm; + + \translator { \HaraKiriStaffContext } +%uh? + + } +} + + diff --git a/input/test/scales-fixme.ly b/input/test/scales.ly similarity index 78% rename from input/test/scales-fixme.ly rename to input/test/scales.ly index 92b696b5d1..d31e9ca81d 100644 --- a/input/test/scales-fixme.ly +++ b/input/test/scales.ly @@ -1,35 +1,30 @@ -% -% URG: this file was named 'scales.ly' but now that we have a -% ly/scales.ly, that name doesn't compile anymore. -% - \score { \context Voice \notes\relative c { % sharp-major % c g d a e b fis cis - \key c \major; + \key c; c' d e f g a b c - \key g\major; + \key g; g a b c d e fis g - \key d\major; + \key d; d, e fis g a b cis d - \key a\major; + \key a; a b cis d e fis gis a - \key e\major; + \key e; e, fis gis a b cis dis e - \key b\major; + \key b; b cis dis e fis gis ais b - \key fis\major; + \key fis; fis, gis ais b cis dis eis fis - \key cis\major; + \key cis; cis, dis eis fis gis ais bis cis % sharp-minor @@ -62,25 +57,25 @@ % flat-major % c f bes es as des ges ces - \key f\major; + \key f; f, g a bes c d e f - \key bes\major; + \key bes; bes, c d es f g a bes - \key es\major; + \key es; es,, f g as bes c d es - \key as\major; + \key as; as, bes c des es f g as - \key des\major; + \key des; des,, es f ges as bes c des - \key ges\major; + \key ges; ges, as bes ces des es f ges - \key ces\major; + \key ces; ces,, des es fes ges as bes ces % flat-minor @@ -111,4 +106,4 @@ } \paper { } \midi { } -} +} \ No newline at end of file diff --git a/input/trip.ly b/input/trip.ly index eaa76f6568..70ff8a0297 100644 --- a/input/trip.ly +++ b/input/trip.ly @@ -19,6 +19,7 @@ TODO: %} +\version "1.3.59"; praeludiumRight = \notes { \key e \major; \clef violin; diff --git a/lily/all-font-metrics.cc b/lily/all-font-metrics.cc index 966546c2d9..eba97b0ec6 100644 --- a/lily/all-font-metrics.cc +++ b/lily/all-font-metrics.cc @@ -119,8 +119,8 @@ All_font_metrics::find_font (String name) if (f) return f; - error (_f ("can't find default font: `%s'", def_name.ch_C ())); - error (_f ("(search path: `%s')", search_path_.str ())); + non_fatal_error (_f ("can't find default font: `%s'", def_name.ch_C ())); + non_fatal_error (_f ("(search path: `%s')", search_path_.str ())); error (_ ("Giving up")); return 0; diff --git a/lily/auto-beam-engraver.cc b/lily/auto-beam-engraver.cc index c906fc6ac1..7e939e7c8e 100644 --- a/lily/auto-beam-engraver.cc +++ b/lily/auto-beam-engraver.cc @@ -119,11 +119,11 @@ Auto_beam_engraver::consider_end_and_begin (Moment test_mom) /* second guess: property generic time exception */ - SCM begin = get_property (time_str + "beamAutoBegin"); + SCM begin = get_property ((time_str + "beamAutoBegin").ch_C()); if (unsmob_moment (begin)) begin_mom = * unsmob_moment (begin); - SCM end = get_property (time_str + "beamAutoEnd"); + SCM end = get_property ((time_str + "beamAutoEnd").ch_C()); if (unsmob_moment (end)) end_mom = * unsmob_moment (end); @@ -132,11 +132,11 @@ Auto_beam_engraver::consider_end_and_begin (Moment test_mom) */ if (type_str.length_i ()) { - SCM end_mult = get_property ( time_str + "beamAutoEnd" + type_str); + SCM end_mult = get_property ((time_str + "beamAutoEnd" + type_str).ch_C()); if (unsmob_moment (end_mult)) end_mom = * unsmob_moment (end_mult); - SCM begin_mult = get_property (time_str + "beamAutoBegin" + type_str); + SCM begin_mult = get_property ((time_str + "beamAutoBegin" + type_str).ch_C()); if (unsmob_moment (begin_mult)) begin_mom = * unsmob_moment (begin_mult); } @@ -159,11 +159,11 @@ Auto_beam_engraver::consider_end_and_begin (Moment test_mom) */ if (type_str.length_i ()) { - SCM end_mult = get_property (String ("beamAutoEnd") + type_str); + SCM end_mult = get_property ((String ("beamAutoEnd") + type_str).ch_C()); if (unsmob_moment (end_mult)) end_mom = * unsmob_moment (end_mult); - SCM begin_mult = get_property (String ("beamAutoBegin") + type_str); + SCM begin_mult = get_property ((String ("beamAutoBegin") + type_str).ch_C()); if (unsmob_moment (begin_mult)) begin_mom = * unsmob_moment (begin_mult); } diff --git a/lily/axis-group-engraver.cc b/lily/axis-group-engraver.cc index 6ffe752dda..25b16bba20 100644 --- a/lily/axis-group-engraver.cc +++ b/lily/axis-group-engraver.cc @@ -42,7 +42,7 @@ void Axis_group_engraver::do_removal_processing () { String type = daddy_grav_l ()->type_str_ ; - SCM dims = get_property (type + "VerticalExtent"); + SCM dims = get_property ((type + "VerticalExtent").ch_C()); if (gh_pair_p (dims) && gh_number_p (gh_car (dims)) && gh_number_p (gh_cdr (dims))) @@ -51,12 +51,12 @@ Axis_group_engraver::do_removal_processing () staffline_p_->set_elt_property ("extent-Y", dims); } - dims = get_property (type + "MinimumVerticalExtent"); + dims = get_property ((type + "MinimumVerticalExtent").ch_C()); if (gh_pair_p (dims) && gh_number_p (gh_car (dims)) && gh_number_p (gh_cdr (dims))) staffline_p_->set_elt_property ("minimum-extent-Y", dims); - dims = get_property (type + "ExtraVerticalExtent"); + dims = get_property ((type + "ExtraVerticalExtent").ch_C()); if (gh_pair_p (dims) && gh_number_p (gh_car (dims)) && gh_number_p (gh_cdr (dims))) staffline_p_->set_elt_property ("extra-extent-Y", dims); diff --git a/lily/bar-engraver.cc b/lily/bar-engraver.cc index 075cd56129..b7a240b604 100644 --- a/lily/bar-engraver.cc +++ b/lily/bar-engraver.cc @@ -28,7 +28,7 @@ Bar_engraver::create_bar () { if (!bar_p_) { - bar_p_ = new Staff_bar (get_property ("basicBarlineProperties")); + bar_p_ = new Staff_bar (get_property ("basicBarProperties")); // urg: "" != empty... diff --git a/lily/bar-number-engraver.cc b/lily/bar-number-engraver.cc index f2961ee47f..13b50e0a6e 100644 --- a/lily/bar-number-engraver.cc +++ b/lily/bar-number-engraver.cc @@ -12,7 +12,7 @@ #include "paper-def.hh" #include "side-position-interface.hh" #include "staff-symbol.hh" -#include "text-item.hh" +#include "item.hh" #include "moment.hh" #include "engraver.hh" #include "protected-scm.hh" @@ -20,7 +20,7 @@ class Bar_number_engraver : public Engraver { protected: - Text_item* text_p_; + Item* text_p_; Protected_scm staffs_; @@ -107,7 +107,7 @@ Bar_number_engraver::create_items () return; SCM b = get_property ("basicBarNumberProperties"); - text_p_ = new Text_item (b); + text_p_ = new Item (b); Side_position_interface staffside(text_p_); staffside.set_axis (Y_AXIS); diff --git a/lily/bar.cc b/lily/bar.cc index 80c964c1a5..ea07643585 100644 --- a/lily/bar.cc +++ b/lily/bar.cc @@ -32,28 +32,39 @@ Bar::get_bar_size () const } -Molecule -Bar::do_brew_molecule () const +SCM +Bar::scheme_molecule (SCM smob) { - SCM s = get_elt_property ("glyph"); + Score_element * self = unsmob_element (smob); + Bar * fly = dynamic_cast (self); + SCM s = self->get_elt_property ("glyph"); if (gh_string_p (s)) { String str =ly_scm2string (s); - return compound_barline (str, get_bar_size ()); + return fly->compound_barline (str, fly->get_bar_size ()).create_scheme (); } - return Molecule (); + return SCM_EOL; } -MAKE_SCHEME_SCORE_ELEMENT_CALLBACKS(Bar); +MAKE_SCHEME_SCORE_ELEMENT_NON_DEFAULT_CALLBACKS(Bar); Molecule Bar::compound_barline (String str, Real h) const { - Real kern = paper_l()->get_var ("bar_kern"); - Real thinkern = paper_l()->get_var ("bar_thinkern"); + Real kern = gh_scm2double (get_elt_property ("kern")); + Real thinkern = gh_scm2double (get_elt_property ("thin-kern")); + Real hair = gh_scm2double (get_elt_property ("hair-thickness")); + Real fatline = gh_scm2double (get_elt_property ("thick-thickness")); - Molecule thin = simple_barline (paper_l()->get_var ("barthick_thin"), h); - Molecule thick = simple_barline (paper_l()->get_var ("barthick_thick"), h); + Real staffline = paper_l ()->get_var ("stafflinethickness"); + + kern *= staffline; + thinkern *= staffline; + hair *= staffline; + fatline *= staffline; + + Molecule thin = simple_barline (hair, h); + Molecule thick = simple_barline (fatline, h); Molecule colon = lookup_l ()->afm_find ("dots-repeatcolon"); Molecule m; diff --git a/lily/breathing-sign.cc b/lily/breathing-sign.cc index 8870334229..a78e610645 100644 --- a/lily/breathing-sign.cc +++ b/lily/breathing-sign.cc @@ -28,12 +28,13 @@ Breathing_sign::Breathing_sign (SCM s) -MAKE_SCHEME_SCORE_ELEMENT_CALLBACKS(Breathing_sign); +MAKE_SCHEME_SCORE_ELEMENT_NON_DEFAULT_CALLBACKS(Breathing_sign); -Molecule -Breathing_sign::do_brew_molecule () const +SCM +Breathing_sign::scheme_molecule (SCM smob) { - Staff_symbol_referencer_interface si (this); + Score_element * sc = unsmob_element (smob); + Staff_symbol_referencer_interface si (sc); Real space = si.staff_space(); @@ -41,7 +42,7 @@ Breathing_sign::do_brew_molecule () const Interval i1(0, space / 6), i2(-space / 2, space / 2); Box b(i1, i2); - return lookup_l()->filledbox(b); + return sc->lookup_l()->filledbox(b).create_scheme (); } void diff --git a/lily/chord-name-engraver.cc b/lily/chord-name-engraver.cc index b33e0f04de..cab0239b3c 100644 --- a/lily/chord-name-engraver.cc +++ b/lily/chord-name-engraver.cc @@ -14,7 +14,7 @@ #include "paper-def.hh" #include "main.hh" #include "dimensions.hh" -#include "text-item.hh" +#include "item.hh" ADD_THIS_TRANSLATOR (Chord_name_engraver); diff --git a/lily/chord-name.cc b/lily/chord-name.cc index 7e784aaa07..b2ed244267 100644 --- a/lily/chord-name.cc +++ b/lily/chord-name.cc @@ -128,24 +128,25 @@ Chord_name::ly_text2molecule (SCM text) const return mol; } -MAKE_SCHEME_SCORE_ELEMENT_CALLBACKS(Chord_name); +MAKE_SCHEME_SCORE_ELEMENT_NON_DEFAULT_CALLBACKS(Chord_name); -Molecule -Chord_name::do_brew_molecule () const +SCM +Chord_name::scheme_molecule (SCM smob) { - SCM style = get_elt_property ("style"); + Score_element *sc = unsmob_element (smob); + SCM style = sc->get_elt_property ("style"); if (style == SCM_UNDEFINED) style = ly_str02scm ("banter"); - SCM inversion = get_elt_property ("inversion"); + SCM inversion = sc-> get_elt_property ("inversion"); if (inversion == SCM_UNDEFINED) inversion = SCM_BOOL_F; - SCM bass = get_elt_property ("bass"); + SCM bass = sc->get_elt_property ("bass"); if (bass == SCM_UNDEFINED) bass = SCM_BOOL_F; - SCM pitches = get_elt_property ("pitches"); + SCM pitches = sc->get_elt_property ("pitches"); SCM text = scm_eval (gh_list (ly_symbol2scm ("chord::user-name"), style, @@ -153,7 +154,8 @@ Chord_name::do_brew_molecule () const ly_quote_scm (gh_cons (inversion, bass)), SCM_UNDEFINED)); - return ly_text2molecule (text); + return dynamic_cast (sc)-> + ly_text2molecule (text).create_scheme (); } Chord_name::Chord_name (SCM s) diff --git a/lily/clef-engraver.cc b/lily/clef-engraver.cc index 7aa6e32f0b..246d275d8b 100644 --- a/lily/clef-engraver.cc +++ b/lily/clef-engraver.cc @@ -23,12 +23,12 @@ #include "engraver.hh" #include "direction.hh" #include "side-position-interface.hh" -#include "text-item.hh" +#include "item.hh" /// where is c-0 in the staff? class Clef_engraver : public Engraver { Clef_item * clef_p_; - Text_item * octavate_p_; + Item * octavate_p_; Clef_change_req * clef_req_l_; void create_clef(); @@ -190,7 +190,7 @@ Clef_engraver::create_clef() si.set_position (clef_position_i_); if (octave_dir_) { - Text_item * g = new Text_item (get_property ("basicOctavateEightProperties")); + Item * g = new Item (get_property ("basicOctavateEightProperties")); Side_position_interface spi (g); spi.set_axis (Y_AXIS); spi.add_support (clef_p_); diff --git a/lily/clef-item.cc b/lily/clef-item.cc index 770694061d..64df471244 100644 --- a/lily/clef-item.cc +++ b/lily/clef-item.cc @@ -10,7 +10,7 @@ #include "clef-item.hh" #include "string.hh" #include "molecule.hh" -#include "text-item.hh" +#include "item.hh" Clef_item::Clef_item (SCM s) : Item (s) @@ -52,7 +52,8 @@ Clef_item::before_line_breaking () return; } - // ugh. + // ugh. + /* why not suicide? */ if (style == "transparent") // UGH. JUNKME { set_elt_property ("molecule-callback", SCM_BOOL_T); diff --git a/lily/dots.cc b/lily/dots.cc index 303f8c1509..c77175e0ad 100644 --- a/lily/dots.cc +++ b/lily/dots.cc @@ -16,7 +16,6 @@ Dots::Dots (SCM s) : Item (s) { - set_elt_property ("dot-count", gh_int2scm (0)); } void @@ -35,17 +34,19 @@ Dots::after_line_breaking () } } -MAKE_SCHEME_SCORE_ELEMENT_CALLBACKS(Dots); -Molecule -Dots::do_brew_molecule () const +MAKE_SCHEME_SCORE_ELEMENT_NON_DEFAULT_CALLBACKS(Dots); + +SCM +Dots::scheme_molecule (SCM d) { - Molecule mol (lookup_l ()->blank (Box (Interval (0,0), + Score_element *sc = unsmob_element (d); + Molecule mol (sc->lookup_l ()->blank (Box (Interval (0,0), Interval (0,0)))); - SCM c = get_elt_property ("dot-count"); + SCM c = sc->get_elt_property ("dot-count"); if (gh_number_p (c)) { - Molecule d = lookup_l ()->afm_find (String ("dots-dot")); + Molecule d = sc->lookup_l ()->afm_find (String ("dots-dot")); Real dw = d.extent (X_AXIS).length (); d.translate_axis (-dw, X_AXIS); @@ -57,7 +58,7 @@ Dots::do_brew_molecule () const mol.add_molecule (d); } } - return mol; + return mol.create_scheme (); } diff --git a/lily/dynamic-engraver.cc b/lily/dynamic-engraver.cc index 273aa10568..7c643490dd 100644 --- a/lily/dynamic-engraver.cc +++ b/lily/dynamic-engraver.cc @@ -15,7 +15,7 @@ #include "paper-column.hh" #include "staff-symbol.hh" #include "note-column.hh" -#include "text-item.hh" +#include "item.hh" #include "side-position-interface.hh" #include "engraver.hh" #include "stem.hh" @@ -77,7 +77,7 @@ Dynamic_line_spanner::add_element (Score_element* e) */ class Dynamic_engraver : public Engraver { - Text_item * text_p_; + Item * text_p_; Crescendo * finished_cresc_p_; Crescendo * cresc_p_; @@ -262,7 +262,7 @@ Dynamic_engraver::do_process_music () { String loud = text_req_l_->text_str_; - text_p_ = new Text_item (get_property ("basicDynamicTextProperties")); + text_p_ = new Item (get_property ("basicDynamicTextProperties")); text_p_->set_elt_property ("text", ly_str02scm (loud.ch_C ())); if (Direction d=text_req_l_->get_direction ()) directional_element (text_p_).set (d); @@ -309,7 +309,7 @@ Dynamic_engraver::do_process_music () gh_int2scm ((span_req_l_drul_[START]->span_type_str_ == "crescendo") ? BIGGER : SMALLER)); - SCM s = get_property (span_req_l_drul_[START]->span_type_str_ + "Text"); + SCM s = get_property ((span_req_l_drul_[START]->span_type_str_ + "Text").ch_C()); if (gh_string_p (s)) { cresc_p_->set_elt_property ("start-text", s); @@ -317,7 +317,7 @@ Dynamic_engraver::do_process_music () + "Text", SCM_UNDEFINED); } - s = get_property (span_req_l_drul_[START]->span_type_str_ + "Spanner"); + s = get_property ((span_req_l_drul_[START]->span_type_str_ + "Spanner").ch_C()); /* diff --git a/lily/extender-engraver.cc b/lily/extender-engraver.cc index 8dab340163..faf311ed83 100644 --- a/lily/extender-engraver.cc +++ b/lily/extender-engraver.cc @@ -10,7 +10,7 @@ #include "musical-request.hh" #include "extender-spanner.hh" #include "paper-column.hh" -#include "text-item.hh" +#include "item.hh" #include "engraver.hh" #include "drul-array.hh" #include "extender-spanner.hh" @@ -22,16 +22,16 @@ typesets a nice centred extender of varying length depending on the gap between syllables. - We remember the last Text_item that come across. When we get a + We remember the last Item that come across. When we get a request, we create the spanner, and attach the left point to the last lyrics, and the right point to any lyrics we receive by then. */ class Extender_engraver : public Engraver { - Text_item * last_lyric_l_; - Text_item * current_lyric_l_; + Item * last_lyric_l_; + Item * current_lyric_l_; Extender_req* req_l_; - Lyric_extender* extender_spanner_p_; + Spanner* extender_p_; public: Extender_engraver (); VIRTUAL_COPY_CONS (Translator); @@ -54,21 +54,22 @@ Extender_engraver::Extender_engraver () { current_lyric_l_ = 0; last_lyric_l_ = 0; - extender_spanner_p_ = 0; + extender_p_ = 0; req_l_ = 0; } void Extender_engraver::acknowledge_element (Score_element_info i) { - if (Text_item* t = dynamic_cast (i.elem_l_)) + // -> text_item + if (Item* t = dynamic_cast (i.elem_l_)) { current_lyric_l_ = t; - if (extender_spanner_p_ - && !extender_spanner_p_->get_bound (RIGHT) + if (extender_p_ + && !extender_p_->get_bound (RIGHT) ) { - extender_spanner_p_->set_textitem (RIGHT, t); + Lyric_extender(extender_p_).set_textitem (RIGHT, t); } } } @@ -91,10 +92,10 @@ Extender_engraver::do_try_music (Music* r) void Extender_engraver::do_removal_processing () { - if (extender_spanner_p_) + if (extender_p_) { req_l_->warning (_ ("unterminated extender")); - extender_spanner_p_->set_bound(RIGHT, get_staff_info ().command_pcol_l ()); + extender_p_->set_bound(RIGHT, get_staff_info ().command_pcol_l ()); } } @@ -109,9 +110,11 @@ Extender_engraver::do_process_music () return; } - extender_spanner_p_ = new Lyric_extender (get_property ("basicLyricExtenderProperties")); - extender_spanner_p_->set_textitem (LEFT, last_lyric_l_); - announce_element (Score_element_info (extender_spanner_p_, req_l_)); + extender_p_ = new Spanner (get_property ("basicLyricExtenderProperties")); + extender_p_->set_extent_callback (Score_element::point_dimension_callback, Y_AXIS); + + Lyric_extender (extender_p_).set_textitem (LEFT, last_lyric_l_); + announce_element (Score_element_info (extender_p_, req_l_)); } } @@ -119,10 +122,10 @@ Extender_engraver::do_process_music () void Extender_engraver::do_pre_move_processing () { - if (extender_spanner_p_) + if (extender_p_) { - typeset_element (extender_spanner_p_); - extender_spanner_p_ = 0; + typeset_element (extender_p_); + extender_p_ = 0; } if (current_lyric_l_) diff --git a/lily/hara-kiri-engraver.cc b/lily/hara-kiri-engraver.cc index 29211b6234..cab10f8cb3 100644 --- a/lily/hara-kiri-engraver.cc +++ b/lily/hara-kiri-engraver.cc @@ -20,6 +20,9 @@ void Hara_kiri_engraver::acknowledge_element (Score_element_info i) { Axis_group_engraver::acknowledge_element (i); + + i.elem_l_->add_offset_callback (Hara_kiri_group_spanner::force_hara_kiri_callback, Y_AXIS); + if (Rhythmic_head *h = dynamic_cast (i.elem_l_)) { dynamic_cast (staffline_p_) diff --git a/lily/hara-kiri-vertical-group-spanner.cc b/lily/hara-kiri-vertical-group-spanner.cc index c01b068cba..21746accfd 100644 --- a/lily/hara-kiri-vertical-group-spanner.cc +++ b/lily/hara-kiri-vertical-group-spanner.cc @@ -13,6 +13,8 @@ #include "debug.hh" #include "item.hh" +/* + */ Hara_kiri_group_spanner::Hara_kiri_group_spanner(SCM s) : Spanner (s) { @@ -24,12 +26,16 @@ Hara_kiri_group_spanner::add_interesting_item (Item* n) { add_dependency (n); Pointer_group_interface (this, "items-worth-living").add_element (n); + } void Hara_kiri_group_spanner::after_line_breaking () { SCM worth = get_elt_pointer ("items-worth-living"); + /* + worth == self_scm is a stupid way to signal that we're done. + */ if (gh_pair_p (worth)) return; @@ -42,9 +48,31 @@ Hara_kiri_group_spanner::after_line_breaking () programming_error ("Killing other children too"); s->suicide (); } - set_extent_callback (0, X_AXIS); - set_extent_callback (0, Y_AXIS); + + /* + very appropriate name here :-) + */ + suicide (); } +/* + We can't rely on offsets and dimensions of elements in a hara-kiri + group. Use a callback to make sure that hara-kiri has been done + before asking for offsets. */ +Real +Hara_kiri_group_spanner::force_hara_kiri_callback (Score_element const *elt, Axis a) +{ + while (elt && !dynamic_cast (elt)) + elt = elt->parent_l(a); + + if (elt) + { + Hara_kiri_group_spanner const * seppuku = dynamic_cast (elt); + + ((Hara_kiri_group_spanner*)seppuku)->after_line_breaking (); + } + + return 0.0; +} diff --git a/lily/hyphen-engraver.cc b/lily/hyphen-engraver.cc index 6193fa81dc..9fbbb77f5b 100644 --- a/lily/hyphen-engraver.cc +++ b/lily/hyphen-engraver.cc @@ -6,10 +6,40 @@ #include "proto.hh" #include "musical-request.hh" -#include "hyphen-engraver.hh" #include "hyphen-spanner.hh" #include "paper-column.hh" -#include "text-item.hh" +#include "item.hh" +#include "engraver.hh" + +/** + Generate an centred hyphen. Should make a Hyphen_spanner that + typesets a nice centred hyphen of varying length depending on the + gap between syllables. + + We remember the last Item that come across. When we get a + request, we create the spanner, and attach the left point to the + last lyrics, and the right point to any lyrics we receive by + then. */ +class Hyphen_engraver : public Engraver +{ + Item *last_lyric_l_; + Item *current_lyric_l_; + Hyphen_req* req_l_; + Spanner* hyphen_p_; +public: + Hyphen_engraver (); + VIRTUAL_COPY_CONS (Translator); + +protected: + virtual void acknowledge_element (Score_element_info); + virtual void do_removal_processing(); + virtual void do_process_music(); + virtual bool do_try_music (Music*); + virtual void do_pre_move_processing(); + virtual void do_post_move_processing (); +private: + +}; ADD_THIS_TRANSLATOR (Hyphen_engraver); @@ -17,21 +47,23 @@ Hyphen_engraver::Hyphen_engraver () { current_lyric_l_ = 0; last_lyric_l_ = 0; - hyphen_spanner_p_ = 0; + hyphen_p_ = 0; req_l_ = 0; } void Hyphen_engraver::acknowledge_element (Score_element_info i) { - if (Text_item* t = dynamic_cast (i.elem_l_)) + + // -> text-item + if (Item* t = dynamic_cast (i.elem_l_)) { current_lyric_l_ = t; - if (hyphen_spanner_p_ - && !hyphen_spanner_p_->get_bound (RIGHT) + if (hyphen_p_ + && !hyphen_p_->get_bound (RIGHT) ) { - hyphen_spanner_p_->set_textitem (RIGHT, t); + Hyphen_spanner (hyphen_p_).set_textitem (RIGHT, t); } } } @@ -54,10 +86,10 @@ Hyphen_engraver::do_try_music (Music* r) void Hyphen_engraver::do_removal_processing () { - if (hyphen_spanner_p_) + if (hyphen_p_) { req_l_->warning (_ ("unterminated hyphen")); - hyphen_spanner_p_->set_bound(RIGHT, get_staff_info ().command_pcol_l ()); + hyphen_p_->set_bound(RIGHT, get_staff_info ().command_pcol_l ()); } } @@ -72,9 +104,10 @@ Hyphen_engraver::do_process_music () return; } - hyphen_spanner_p_ = new Hyphen_spanner (get_property ("basicHyphenSpannerProperties")); - hyphen_spanner_p_->set_textitem (LEFT, last_lyric_l_); - announce_element (Score_element_info (hyphen_spanner_p_, req_l_)); + hyphen_p_ = new Spanner (get_property ("basicHyphenSpannerProperties")); + hyphen_p_->set_extent_callback (Score_element::point_dimension_callback,Y_AXIS); + Hyphen_spanner (hyphen_p_).set_textitem (LEFT, last_lyric_l_); + announce_element (Score_element_info (hyphen_p_, req_l_)); } } @@ -82,10 +115,10 @@ Hyphen_engraver::do_process_music () void Hyphen_engraver::do_pre_move_processing () { - if (hyphen_spanner_p_) + if (hyphen_p_) { - typeset_element (hyphen_spanner_p_); - hyphen_spanner_p_ = 0; + typeset_element (hyphen_p_); + hyphen_p_ = 0; } if (current_lyric_l_) diff --git a/lily/hyphen-spanner.cc b/lily/hyphen-spanner.cc index a4ddc8c750..165c6c6b11 100644 --- a/lily/hyphen-spanner.cc +++ b/lily/hyphen-spanner.cc @@ -8,80 +8,54 @@ (adapted from extender-spanner) */ -/* - TODO: too complicated implementation. Why the dx_drul?. - */ - #include + #include "box.hh" -#include "debug.hh" #include "lookup.hh" #include "molecule.hh" -#include "paper-column.hh" #include "paper-def.hh" #include "hyphen-spanner.hh" -#include "dimension-cache.hh" +#include "spanner.hh" +#include "item.hh" -Hyphen_spanner::Hyphen_spanner (SCM s) - : Spanner (s) -{ - dx_f_drul_[LEFT] = dx_f_drul_[RIGHT] = 0.0; +MAKE_SCHEME_SCORE_ELEMENT_NON_DEFAULT_CALLBACKS(Hyphen_spanner) - set_extent_callback (Score_element::point_dimension_callback,Y_AXIS); -} - -MAKE_SCHEME_SCORE_ELEMENT_CALLBACKS(Hyphen_spanner) -Molecule -Hyphen_spanner::do_brew_molecule () const +SCM +Hyphen_spanner::scheme_molecule (SCM smob) { + Spanner * sp =dynamic_cast (unsmob_element (smob)); Molecule mol; - Real w = spanner_length (); + Real leftext = sp->get_bound (LEFT)->extent (X_AXIS).length (); - w += (dx_f_drul_[RIGHT] - dx_f_drul_[LEFT]); + Real ss = sp->paper_l ()->get_var ("staffspace"); + Real lt = sp->paper_l ()->get_var ("stafflinethickness"); + Real th = gh_scm2double (sp->get_elt_property ("thickness")) * lt ; + Real h = gh_scm2double (sp->get_elt_property ("height")) * ss; + Real l = gh_scm2double (sp->get_elt_property ("minimum-length")) * ss; + Real w = sp->spanner_length () - leftext - ss/2; - Real th = paper_l ()->get_var ("hyphen_thickness"); - Real h = paper_l ()->get_var ("hyphen_height"); - // UGH. First try: just make the hyphen take 1/3 of the available space - // for length, use a geometric mean of the available space and some minimum - Real l = paper_l ()->get_var ("hyphen_minimum_length"); + /* First try: just make the hyphen take 1/3 of the available space + for length, use a geometric mean of the available space and some minimum + */ if(l < w) l = sqrt(l*w); - Molecule a = lookup_l ()->filledbox ( Box (Interval ((w-l)/2,(w+l)/2), Interval (h,h+th))); - a.translate (Offset (dx_f_drul_[LEFT], 0)); - - mol.add_molecule (a); - return mol; + Box b (Interval ( (w-l)/2, (w+l)/2), Interval (h,h+th)); + mol.add_molecule (sp->lookup_l ()->filledbox (b)); + mol.translate_axis(leftext, X_AXIS); + return mol.create_scheme (); } - - -void -Hyphen_spanner::after_line_breaking () -{ - // UGH - Real gap = paper_l ()->get_var ("interline"); - - Direction d = LEFT; - do - { - Item* t = get_bound (d) - ? get_bound (d) : get_bound ((Direction)-d); - if (d == LEFT) - dx_f_drul_[d] += t->extent (X_AXIS).length (); - else - dx_f_drul_[d] -= d * gap / 2; - } - while (flip(&d) != LEFT); -} - void Hyphen_spanner::set_textitem (Direction d, Item* textitem_l) { - set_bound (d, textitem_l); - add_dependency (textitem_l); + elt_l_->set_bound (d, textitem_l); + elt_l_->add_dependency (textitem_l); } - +Hyphen_spanner::Hyphen_spanner (Spanner*s) +{ + elt_l_ = s; +} diff --git a/lily/identifier.cc b/lily/identifier.cc index 4c6284eb01..c35350b07d 100644 --- a/lily/identifier.cc +++ b/lily/identifier.cc @@ -10,9 +10,7 @@ JUNKTHIS! */ #include - -#include "midi-def.hh" -#include "paper-def.hh" +#include "music-output-def.hh" #include "score.hh" #include "identifier.hh" #include "my-lily-lexer.hh" @@ -86,8 +84,7 @@ DEFAULT_PRINT(Translator_group); DEFAULT_PRINT(Music); DEFAULT_PRINT(Request); DEFAULT_PRINT(Score); -DEFAULT_PRINT(Midi_def); -DEFAULT_PRINT(Paper_def); +DEFAULT_PRINT(Music_output_def); /* ugh. */ #define DUMMY_STR(Class) \ @@ -101,8 +98,7 @@ DUMMY_STR(Translator_group); DUMMY_STR(Music); DUMMY_STR(Request); DUMMY_STR(Score); -DUMMY_STR(Midi_def); -DUMMY_STR(Paper_def); +DUMMY_STR(Music_output_def); DUMMY_STR(Duration); #define STRING_PRINT(Class) \ @@ -114,8 +110,6 @@ Class ## _identifier::do_print () const\ STRING_PRINT(Duration); -STRING_PRINT(Real); -STRING_PRINT(int); #define DEFAULT_STR(Class) \ String \ @@ -124,9 +118,6 @@ Class ## _identifier::do_str () const\ return to_str (*data_p_);\ } -DEFAULT_STR(int); -DEFAULT_STR(Real); - /* @@ -163,22 +154,17 @@ Class ## _identifier::Class ## _identifier (Class ## _identifier const &s) \ IMPLEMENT_ID_CLASS(Duration); IMPLEMENT_ID_CLASS(Translator_group); -IMPLEMENT_ID_CLASS(int); -IMPLEMENT_ID_CLASS(Real); IMPLEMENT_ID_CLASS(Music); IMPLEMENT_ID_CLASS(Score); IMPLEMENT_ID_CLASS(Request); -IMPLEMENT_ID_CLASS(Midi_def); -IMPLEMENT_ID_CLASS(Paper_def); +IMPLEMENT_ID_CLASS(Music_output_def); VIRTUAL_ACCESSOR(Music); VIRTUAL_ACCESSOR(Request); VIRTUAL_ACCESSOR(Translator_group); +VIRTUAL_ACCESSOR(Music_output_def); DEFAULT_ACCESSOR(Duration); -DEFAULT_ACCESSOR(int); -DEFAULT_ACCESSOR(Real); DEFAULT_ACCESSOR(Score); -DEFAULT_ACCESSOR(Midi_def); -DEFAULT_ACCESSOR(Paper_def); + int Identifier::print_smob (SCM s, SCM p, scm_print_state*) diff --git a/lily/include/bar.hh b/lily/include/bar.hh index bfb2ce7379..8d408c04b9 100644 --- a/lily/include/bar.hh +++ b/lily/include/bar.hh @@ -23,7 +23,7 @@ public: protected: virtual void before_line_breaking (); - Molecule do_brew_molecule () const; + virtual Real get_bar_size () const; }; #endif // BAR_HH diff --git a/lily/include/extender-spanner.hh b/lily/include/extender-spanner.hh index a86a3d0e03..0fe3b35b66 100644 --- a/lily/include/extender-spanner.hh +++ b/lily/include/extender-spanner.hh @@ -27,21 +27,13 @@ extend beond, lasting the whole duration of the melissima (as in MUP, urg). */ -class Lyric_extender : public Spanner +class Lyric_extender // interface { public: - Lyric_extender (SCM); + Spanner*elt_l_; + Lyric_extender (Spanner*); void set_textitem (Direction, Item*); - static SCM scheme_molecule (SCM); - - -protected: - Molecule do_brew_molecule () const; - void after_line_breaking (); - - VIRTUAL_COPY_CONS (Score_element); - - Drul_array dx_f_drul_; + static SCM scheme_molecule (SCM); }; #endif // EXTENDER_SPANNER_HH diff --git a/lily/include/hara-kiri-vertical-group-spanner.hh b/lily/include/hara-kiri-vertical-group-spanner.hh index 1adc9480bf..abda869a39 100644 --- a/lily/include/hara-kiri-vertical-group-spanner.hh +++ b/lily/include/hara-kiri-vertical-group-spanner.hh @@ -27,6 +27,7 @@ class Hara_kiri_group_spanner : public Spanner { public: + static Real force_hara_kiri_callback (Score_element const* , Axis); Hara_kiri_group_spanner (SCM); virtual void after_line_breaking (); void add_interesting_item (Item* n); diff --git a/lily/include/hyphen-engraver.hh b/lily/include/hyphen-engraver.hh deleted file mode 100644 index 160b9e2673..0000000000 --- a/lily/include/hyphen-engraver.hh +++ /dev/null @@ -1,48 +0,0 @@ -/* - hyphen-engraver.hh -- declare Hyphen_engraver - - source file of the GNU LilyPond music typesetter - - (c) 1999 Glen Prideaux -*/ - -#ifndef HYPHEN_ENGRAVER_HH -#define HYPHEN_ENGRAVER_HH - -#include "engraver.hh" -#include "drul-array.hh" -#include "hyphen-spanner.hh" -#include "pqueue.hh" - - -/** - Generate an centred hyphen. Should make a Hyphen_spanner that - typesets a nice centred hyphen of varying length depending on the - gap between syllables. - - We remember the last Text_item that come across. When we get a - request, we create the spanner, and attach the left point to the - last lyrics, and the right point to any lyrics we receive by - then. */ -class Hyphen_engraver : public Engraver -{ - Text_item * last_lyric_l_; - Text_item * current_lyric_l_; - Hyphen_req* req_l_; - Hyphen_spanner* hyphen_spanner_p_; -public: - Hyphen_engraver (); - VIRTUAL_COPY_CONS (Translator); - -protected: - virtual void acknowledge_element (Score_element_info); - virtual void do_removal_processing(); - virtual void do_process_music(); - virtual bool do_try_music (Music*); - virtual void do_pre_move_processing(); - virtual void do_post_move_processing (); -private: - -}; - -#endif // HYPHEN_ENGRAVER_HH diff --git a/lily/include/hyphen-spanner.hh b/lily/include/hyphen-spanner.hh index 920c4c35fa..f1ef2ea45d 100644 --- a/lily/include/hyphen-spanner.hh +++ b/lily/include/hyphen-spanner.hh @@ -18,23 +18,13 @@ The length of the hyphen line should stretch based on the size of the gap between syllables. */ -class Hyphen_spanner : public Spanner +struct Hyphen_spanner // interface { public: - Hyphen_spanner (SCM); + Spanner* elt_l_; + Hyphen_spanner (Spanner*); void set_textitem (Direction, Item*); - static SCM scheme_molecule (SCM); - - -protected: - Molecule do_brew_molecule () const; - Interval do_height () const; - - void after_line_breaking (); - - VIRTUAL_COPY_CONS (Score_element); - - Drul_array dx_f_drul_; + static SCM scheme_molecule (SCM); }; #endif // HYPHEN_SPANNER_HH diff --git a/lily/include/identifier.hh b/lily/include/identifier.hh index 94bceeebb8..e0e4c25769 100644 --- a/lily/include/identifier.hh +++ b/lily/include/identifier.hh @@ -20,10 +20,7 @@ class Translator_group_identifier; class Music_identifier; class Articulation_req_identifier; -class Midi_def_identifier; -class Paper_def_identifier; -class Real_identifier; -class int_identifier; +class Output_def_identifier; class Request_identifier; class Score_identifier; class Duration_identifier; @@ -56,12 +53,9 @@ struct Identifier : public Input { String str () const; IDACCESSOR(Translator_group) IDACCESSOR(Music) - IDACCESSOR(Midi_def) - IDACCESSOR(Paper_def) - IDACCESSOR(Real) + IDACCESSOR(Music_output_def) IDACCESSOR(Request) IDACCESSOR(Score) - IDACCESSOR(int) IDACCESSOR(Duration) VIRTUAL_COPY_CONS(Identifier); @@ -86,14 +80,11 @@ struct Class ## _identifier : Identifier {\ DECLARE_ID_CLASS(Translator_group); DECLARE_ID_CLASS(Duration); -DECLARE_ID_CLASS(Real); DECLARE_ID_CLASS(General_script_def); DECLARE_ID_CLASS(Music); -DECLARE_ID_CLASS(int); DECLARE_ID_CLASS(Score); DECLARE_ID_CLASS(Request); -DECLARE_ID_CLASS(Paper_def); -DECLARE_ID_CLASS(Midi_def); +DECLARE_ID_CLASS(Music_output_def); Identifier * unsmob_identifier (SCM); SCM smobify (Identifier*); diff --git a/lily/include/lily-proto.hh b/lily/include/lily-proto.hh index 8f0e8c956f..e2c3393a5b 100644 --- a/lily/include/lily-proto.hh +++ b/lily/include/lily-proto.hh @@ -243,8 +243,7 @@ struct Tex_font_metric_reader; struct Text_def; struct Text_engraver; struct Text_gob; -struct Text_item ; -struct Text_item; +struct Item ; struct Text_req; struct Text_spanner; struct Tie; diff --git a/lily/include/lyric-engraver.hh b/lily/include/lyric-engraver.hh index 1ef2eb7490..d39ec7e558 100644 --- a/lily/include/lyric-engraver.hh +++ b/lily/include/lyric-engraver.hh @@ -31,7 +31,7 @@ public: private: Lyric_req * req_l_; - Text_item* text_p_; + Item* text_p_; }; diff --git a/lily/include/midi-def.hh b/lily/include/midi-def.hh index 67cdcef249..6d65f6baea 100644 --- a/lily/include/midi-def.hh +++ b/lily/include/midi-def.hh @@ -21,7 +21,7 @@ */ class Midi_def : public Music_output_def { static int default_count_i_; - int count_per_minute_i; + public: VIRTUAL_COPY_CONS(Music_output_def); diff --git a/lily/include/paper-def.hh b/lily/include/paper-def.hh index 4970d49905..a91f537879 100644 --- a/lily/include/paper-def.hh +++ b/lily/include/paper-def.hh @@ -10,7 +10,6 @@ #ifndef PAPER_DEF_HH #define PAPER_DEF_HH -#include #include "lily-proto.hh" #include "lily-guile.hh" @@ -56,19 +55,19 @@ protected: public: virtual ~Paper_def (); - Array shape_int_a_; /* JUNKME */ Real get_realvar (SCM symbol) const; Real get_var (String id) const; - + SCM get_scmvar (String id)const; void reinit (); Paper_def (); void set_lookup (int, Lookup*); Paper_def (Paper_def const&); + /** The distance between beams of multiplicity_i JUNKME */ diff --git a/lily/include/slur.hh b/lily/include/slur.hh index 9a71f42d3f..cefb249d73 100644 --- a/lily/include/slur.hh +++ b/lily/include/slur.hh @@ -28,6 +28,10 @@ protected: Molecule do_brew_molecule () const; virtual Array get_encompass_offset_arr () const; Bezier get_curve () const; + + /* + JUNKME + */ Drul_array dy_f_drul_; Drul_array dx_f_drul_; diff --git a/lily/include/spanner.hh b/lily/include/spanner.hh index 34339a18f9..2eb457e514 100644 --- a/lily/include/spanner.hh +++ b/lily/include/spanner.hh @@ -44,6 +44,7 @@ public: Spanner (Spanner const &); bool broken_b () const; void do_break (); + Real spanner_length () const; static int compare (Spanner * const &,Spanner * const &); virtual Array get_rods () const; @@ -57,7 +58,6 @@ protected: virtual void do_space_processing (); virtual void do_break_processing (); - Real spanner_length () const; virtual Line_of_score*line_l () const; }; #endif diff --git a/lily/include/sustain-pedal.hh b/lily/include/sustain-pedal.hh deleted file mode 100644 index fe1a314746..0000000000 --- a/lily/include/sustain-pedal.hh +++ /dev/null @@ -1,45 +0,0 @@ -/* - sustain-pedal.hh -- declare - - source file of the GNU LilyPond music typesetter - - (c) 2000 Han-Wen Nienhuys - - */ - -#ifndef SUSTAIN_PEDAL_HH -#define SUSTAIN_PEDAL_HH - -#include "item.hh" - - -/* - Urg. - This is almost text - Problem is: - * we have no kerning - * symbols are at wrong place in font - - - - Properties: - - glyph -- text string (TODO: make one large glyph of the Ped symbol, removes need for do_brew_molecule ()) - -*/ - -class Sustain_pedal : public Item -{ -public: - static SCM scheme_molecule (SCM); - - VIRTUAL_COPY_CONS (Score_element); - Sustain_pedal (SCM); -protected: - // Molecule do_brew_molecule () const; - virtual void after_line_breaking (); -}; - - -#endif /* SUSTAIN_PEDAL_HH */ - diff --git a/lily/include/system-start-delimiter.hh b/lily/include/system-start-delimiter.hh index b3f545daf7..61d23efdb1 100644 --- a/lily/include/system-start-delimiter.hh +++ b/lily/include/system-start-delimiter.hh @@ -19,12 +19,12 @@ class System_start_delimiter : public Spanner { public: System_start_delimiter (SCM); - static SCM scheme_molecule (SCM); + static SCM scheme_molecule (SCM); -VIRTUAL_COPY_CONS (Score_element); + VIRTUAL_COPY_CONS (Score_element); protected: virtual void after_line_breaking(); - virtual Molecule do_brew_molecule () const; + Molecule staff_bracket (Real) const; Molecule staff_brace (Real) const; Molecule simple_bar (Real) const; diff --git a/lily/include/text-item.hh b/lily/include/text-item.hh index d69a23f0af..8b13789179 100644 --- a/lily/include/text-item.hh +++ b/lily/include/text-item.hh @@ -1,30 +1 @@ -/* - text-item.hh -- declare Text_item - - source file of the GNU LilyPond music typesetter - - (c) 1998--2000 Han-Wen Nienhuys - - */ - -#ifndef Text_ITEM_HH -#define Text_ITEM_HH - -#include "item.hh" - -/** - Print a text in specified style. - */ -class Text_item : public Item -{ -public: - VIRTUAL_COPY_CONS (Score_element); - static SCM scheme_molecule (SCM); - -Text_item (SCM s); -protected: - Molecule do_brew_molecule () const; -}; - -#endif /* Text_ITEM_HH */ diff --git a/lily/include/tie.hh b/lily/include/tie.hh index c6fc1c8904..e45a456b99 100644 --- a/lily/include/tie.hh +++ b/lily/include/tie.hh @@ -35,6 +35,9 @@ protected: virtual Array get_encompass_offset_arr () const; Bezier get_curve () const; + /* + JUNKME + */ Drul_array dy_f_drul_; Drul_array dx_f_drul_; diff --git a/lily/include/translator-group.hh b/lily/include/translator-group.hh index 2bfaad8823..47c2ef1135 100644 --- a/lily/include/translator-group.hh +++ b/lily/include/translator-group.hh @@ -29,7 +29,7 @@ typedef void (Translator::*Const_method_pointer)(void) const; class Translator_group : public virtual Translator { Array consists_str_arr_; Array accepts_str_arr_; - Array consists_end_str_arr_; + Array consists_end_str_arr_; Scheme_hash_table properties_dict_; int iterator_count_; diff --git a/lily/include/translator.hh b/lily/include/translator.hh index c84c109ec4..6352c005dc 100644 --- a/lily/include/translator.hh +++ b/lily/include/translator.hh @@ -62,7 +62,7 @@ public: */ Music_output_def *output_def_l () const; - SCM get_property (String) const; + SCM get_property (const char *) const; SCM get_property (SCM symbol) const; virtual Moment now_mom () const; diff --git a/lily/instrument-name-engraver.cc b/lily/instrument-name-engraver.cc index 1a9bd7da1f..010db52474 100644 --- a/lily/instrument-name-engraver.cc +++ b/lily/instrument-name-engraver.cc @@ -9,14 +9,14 @@ */ #include "engraver.hh" -#include "text-item.hh" +#include "item.hh" #include "bar.hh" #include "system-start-delimiter.hh" #include "side-position-interface.hh" class Instrument_name_engraver : public Engraver { - Text_item *text_; + Item *text_; System_start_delimiter * delim_ ; void create_text (SCM s); @@ -55,7 +55,7 @@ Instrument_name_engraver::create_text (SCM txt) { if(!text_) { - text_ = new Text_item (get_property ("basicInstrumentNameProperties")); + text_ = new Item (get_property ("basicInstrumentNameProperties")); text_->set_elt_property ("text", txt); /* diff --git a/lily/key-item.cc b/lily/key-item.cc index f29c4ecd39..46ad565f50 100644 --- a/lily/key-item.cc +++ b/lily/key-item.cc @@ -36,43 +36,42 @@ const int SHARP_TOP_PITCH=4; /* ais and bis typeset in lower octave */ int Key_item::calculate_position(SCM pair) const { - SCM note = gh_car (pair); - if (gh_pair_p (note)) - { - int o = gh_scm2int (gh_car (note)); - int p = gh_scm2int (gh_cdr (note)); - return p + o*7 + gh_scm2int (get_elt_property ("c0-position")); - } - int p = gh_scm2int (note); + int p = gh_scm2int (gh_car (pair)); int a = gh_scm2int (gh_cdr (pair)); - // Find the c in the range -4 through 2 - int from_bottom_pos = gh_scm2int (get_elt_property ("c0-position")) + 4; - from_bottom_pos = from_bottom_pos%7; - from_bottom_pos = (from_bottom_pos + 7)%7; // Precaution to get positive. - int c0 = from_bottom_pos - 4; - - - if ((a<0 && ((p>FLAT_TOP_PITCH) || (p+c0>4)) && (p+c0>1)) - || - (a>0 && ((p>SHARP_TOP_PITCH) || (p+c0>5)) && (p+c0>2))) + if (to_boolean (get_elt_property ("multi-octave"))) { - p -= 7; /* Typeset below c_position */ + return p + gh_scm2int (get_elt_property ("c0-position")); } - /* Provide for the four cases in which there's a glitch - it's a hack, but probably not worth - the effort of finding a nicer solution. - --dl. */ - if (c0==2 && a>0 && p==3) - p -= 7; - if (c0==-3 && a>0 && p==-1) - p += 7; - if (c0==-4 && a<0 && p==-1) - p += 7; - if (c0==-2 && a<0 && p==-3) - p += 7; - - return p + c0; + else { + // Find the c in the range -4 through 2 + int from_bottom_pos = gh_scm2int (get_elt_property ("c0-position")) + 4; + from_bottom_pos = from_bottom_pos%7; + from_bottom_pos = (from_bottom_pos + 7)%7; // Precaution to get positive. + int c0 = from_bottom_pos - 4; + + + if ((a<0 && ((p>FLAT_TOP_PITCH) || (p+c0>4)) && (p+c0>1)) + || + (a>0 && ((p>SHARP_TOP_PITCH) || (p+c0>5)) && (p+c0>2))) + { + p -= 7; /* Typeset below c_position */ + } + /* Provide for the four cases in which there's a glitch + it's a hack, but probably not worth + the effort of finding a nicer solution. + --dl. */ + if (c0==2 && a>0 && p==3) + p -= 7; + if (c0==-3 && a>0 && p==-1) + p += 7; + if (c0==-4 && a<0 && p==-1) + p += 7; + if (c0==-2 && a<0 && p==-3) + p += 7; + + return p + c0; + } } MAKE_SCHEME_SCORE_ELEMENT_CALLBACKS(Key_item) diff --git a/lily/lexer.ll b/lily/lexer.ll index 57d9537bf1..44209d00e3 100644 --- a/lily/lexer.ll +++ b/lily/lexer.ll @@ -233,7 +233,8 @@ HYPHEN -- int n = 0; if (main_input_b_ && safe_global_b) { error (_ ("Can't evaluate Scheme in safe mode")); - return SCM_EOL; + yylval.scm = SCM_EOL; + return SCM_T; } yylval.scm = ly_parse_scm (s, &n); DEBUG_OUT << "Scheme: "; @@ -473,8 +474,12 @@ My_lily_lexer::scan_escaped_word (String str) if (gh_string_p (sid)) { yylval.scm = sid; return STRING_IDENTIFIER; + } else if (gh_number_p (sid)) { + yylval.scm = sid; + return NUMBER_IDENTIFIER; } + Identifier * id = unsmob_identifier (sid); if (id) { yylval.id = id; diff --git a/lily/lily-guile.cc b/lily/lily-guile.cc index 6336f7dd11..5c9c793c9e 100644 --- a/lily/lily-guile.cc +++ b/lily/lily-guile.cc @@ -353,7 +353,7 @@ ly_number2string (SCM s) char str[100]; // ugh. - if (scm_integer_p (s)) + if (scm_integer_p (s) == SCM_BOOL_F) { Real r (gh_scm2double (s)); diff --git a/lily/line-number-engraver.cc b/lily/line-number-engraver.cc index 7a9e48a6f1..2c235080e3 100644 --- a/lily/line-number-engraver.cc +++ b/lily/line-number-engraver.cc @@ -8,7 +8,7 @@ */ #include "engraver.hh" -#include "text-item.hh" +#include "item.hh" #include "side-position-interface.hh" #include "note-head.hh" #include "stem.hh" @@ -36,7 +36,7 @@ Line_number_engraver::process_acknowledged () { if (!text_item_p_ && interesting_.size ()) { - text_item_p_ = new Text_item (get_property ("basicTextProperties") ); + text_item_p_ = new Item (get_property ("basicTextProperties") ); Side_position_interface si (text_item_p_); si.set_axis (Y_AXIS); text_item_p_->set_parent (interesting_[0].elem_l_, Y_AXIS); diff --git a/lily/lyric-engraver.cc b/lily/lyric-engraver.cc index fce6048163..64a306b3ed 100644 --- a/lily/lyric-engraver.cc +++ b/lily/lyric-engraver.cc @@ -9,7 +9,7 @@ #include "lyric-engraver.hh" #include "musical-request.hh" -#include "text-item.hh" +#include "item.hh" #include "paper-def.hh" #include "lookup.hh" @@ -40,7 +40,7 @@ Lyric_engraver::do_process_music() { if (req_l_) { - text_p_= new Text_item (get_property ("basicLyricTextProperties")); + text_p_= new Item (get_property ("basicLyricTextProperties")); text_p_->set_elt_property ("text", ly_str02scm ((req_l_->text_str_ + " ").ch_C ())); diff --git a/lily/lyric-extender.cc b/lily/lyric-extender.cc index 879fa63772..e20d7d1ea9 100644 --- a/lily/lyric-extender.cc +++ b/lily/lyric-extender.cc @@ -3,13 +3,9 @@ source file of the GNU LilyPond music typesetter (c) 1998--2000 Jan Nieuwenhuizen + Han-Wen Nienhuys */ -/* - TODO: too complicated implementation. Why the dx_drul?. - */ - -# #include "dimension-cache.hh" #include "box.hh" #include "debug.hh" @@ -19,62 +15,32 @@ #include "paper-def.hh" #include "extender-spanner.hh" -Lyric_extender::Lyric_extender (SCM s) - : Spanner (s) - -{ - dx_f_drul_[LEFT] = dx_f_drul_[RIGHT] = 0.0; - set_extent_callback (Score_element::point_dimension_callback, Y_AXIS); -} - - - -MAKE_SCHEME_SCORE_ELEMENT_CALLBACKS(Lyric_extender) -Molecule -Lyric_extender::do_brew_molecule () const +MAKE_SCHEME_SCORE_ELEMENT_NON_DEFAULT_CALLBACKS(Lyric_extender) +SCM +Lyric_extender::scheme_molecule (SCM smob) { - Molecule mol; - - Real w = spanner_length (); + Spanner *sp = dynamic_cast (unsmob_element (smob)); - w += (dx_f_drul_[RIGHT] - dx_f_drul_[LEFT]); - Real h = paper_l ()->get_var ("extender_height"); - Molecule a = lookup_l ()->filledbox ( Box (Interval (0,w), Interval (0,h))); - a.translate (Offset (dx_f_drul_[LEFT], 0)); - - mol.add_molecule (a); - - return mol; + Real leftext = sp->get_bound (LEFT)->extent (X_AXIS).length (); + Real ss = sp->paper_l ()->get_var ("staffspace"); + Real w = sp->spanner_length () - leftext - ss/2; + + Real h = sp->paper_l ()->get_var ("extender_height"); + Molecule mol (sp->lookup_l ()->filledbox ( Box (Interval (0,w), Interval (0,h)))); + mol.translate (Offset (leftext, 0)); + return mol.create_scheme(); } - - void -Lyric_extender::after_line_breaking () +Lyric_extender::set_textitem (Direction d, Item* textitem_l) { - // UGH - Real gap = paper_l ()->get_var ("interline"); - - Direction d = LEFT; - do - { - Item* t = get_bound (d) - ? get_bound (d) : get_bound ((Direction)-d); - if (d == LEFT) - dx_f_drul_[d] += t->extent (X_AXIS).length (); - else - dx_f_drul_[d] -= d * gap / 2; - } - while (flip(&d) != LEFT); + elt_l_->set_bound (d, textitem_l); + elt_l_->add_dependency (textitem_l); } - -void -Lyric_extender::set_textitem (Direction d, Item* textitem_l) +Lyric_extender::Lyric_extender (Spanner*s) { - set_bound (d, textitem_l); - add_dependency (textitem_l); + elt_l_ = s; } - diff --git a/lily/mark-engraver.cc b/lily/mark-engraver.cc index 88c1550606..92945681de 100644 --- a/lily/mark-engraver.cc +++ b/lily/mark-engraver.cc @@ -20,7 +20,7 @@ #include "side-position-interface.hh" #include "staff-symbol-referencer.hh" #include "staff-symbol.hh" -#include "text-item.hh" +#include "item.hh" #include "group-interface.hh" /** @@ -33,7 +33,7 @@ public: VIRTUAL_COPY_CONS(Translator); Mark_engraver (); protected: - Text_item* text_p_; + Item* text_p_; Protected_scm staffs_; protected: @@ -77,7 +77,7 @@ Mark_engraver::acknowledge_element (Score_element_info inf) { /* Ugh. Figure out how to do this right at beginning of line, (without - creating class Bar_script : public Text_item). + creating class Bar_script : public Item). */ text_p_->set_parent (s, X_AXIS); } @@ -102,7 +102,7 @@ Mark_engraver::create_items (Request *rq) return; SCM s = get_property ("basicMarkProperties"); - text_p_ = new Text_item (s); + text_p_ = new Item (s); Group_interface (text_p_, "interfaces").add_thing (ly_symbol2scm ("Mark")); Side_position_interface staffside(text_p_); diff --git a/lily/midi-def.cc b/lily/midi-def.cc index 753976a9b6..1915e82071 100644 --- a/lily/midi-def.cc +++ b/lily/midi-def.cc @@ -14,12 +14,6 @@ #include "score-performer.hh" #include "debug.hh" -// classes, alphasorted -// statics -// constructors -// destructor -// routines, alphasorted - Midi_def::Midi_def() { // ugh diff --git a/lily/note-heads-engraver.cc b/lily/note-heads-engraver.cc index 431c637b84..067a3d3933 100644 --- a/lily/note-heads-engraver.cc +++ b/lily/note-heads-engraver.cc @@ -79,7 +79,11 @@ Note_heads_engraver::do_process_music() sd.set_interface (); note_p->add_dots (d); - d->set_elt_property ("dot-count", gh_int2scm (note_req_l->duration_.dots_i_)); + + if (note_req_l->duration_.dots_i_ + != gh_scm2int (d->get_elt_property ("dot-count"))) + d->set_elt_property ("dot-count", gh_int2scm (note_req_l->duration_.dots_i_)); + announce_element (Score_element_info (d,0)); dot_p_arr_.push (d); } diff --git a/lily/note-name-engraver.cc b/lily/note-name-engraver.cc index 1f03a0ea1a..d6e10628de 100644 --- a/lily/note-name-engraver.cc +++ b/lily/note-name-engraver.cc @@ -9,14 +9,14 @@ #include "engraver.hh" #include "musical-request.hh" -#include "text-item.hh" +#include "item.hh" class Note_name_engraver : public Engraver { public: VIRTUAL_COPY_CONS(Translator); Link_array req_l_arr_; - Link_array texts_; + Link_array texts_; virtual bool do_try_music (Music*m); virtual void do_process_music (); virtual void do_pre_move_processing (); @@ -46,7 +46,7 @@ Note_name_engraver::do_process_music () } if (s.length_i()) { - Text_item * t = new Text_item (SCM_EOL); + Item * t = new Item (SCM_EOL); t->set_elt_property ("text", ly_str02scm ( s.ch_C())); announce_element (Score_element_info (t, req_l_arr_[0])); texts_.push (t); diff --git a/lily/paper-def.cc b/lily/paper-def.cc index c32c88f415..cc8bd881d6 100644 --- a/lily/paper-def.cc +++ b/lily/paper-def.cc @@ -44,7 +44,6 @@ Paper_def::~Paper_def () Paper_def::Paper_def (Paper_def const&s) : Music_output_def (s) { - shape_int_a_ = s.shape_int_a_; lookup_p_tab_p_ = new map; for (map::const_iterator ai = s.lookup_p_tab_p_->begin(); @@ -62,19 +61,30 @@ Paper_def::get_var (String s) const return get_realvar (ly_symbol2scm (s.ch_C())); } +SCM +Paper_def::get_scmvar (String s) const +{ + return scope_p_->scm_elem (ly_symbol2scm (s.ch_C())); +} + Real Paper_def::get_realvar (SCM s) const { if (!scope_p_->elem_b (s)) - error (_f ("unknown paper variable: `%s'", ly_symbol2string (s))); - Real * p = scope_p_->elem (s)->access_content_Real (false); - if (!p) { - error (_("not a real variable")); + programming_error ("unknown paper variable: " + ly_symbol2string (s)); + return 0.0; + } + SCM val = scope_p_->scm_elem (s); + if (gh_number_p (val)) + { + return gh_scm2double (val); + } + else + { + non_fatal_error (_("not a real variable")); return 0.0; } - - return *p; } /* diff --git a/lily/paper-outputter.cc b/lily/paper-outputter.cc index 97b542168b..8329051981 100644 --- a/lily/paper-outputter.cc +++ b/lily/paper-outputter.cc @@ -160,20 +160,13 @@ Paper_outputter::output_scope (Scope *scope, String prefix) { output_String_def (prefix + s, ly_scm2string (v)); } - - Identifier * id = unsmob_identifier (v); - - if(dynamic_cast (id)) + else if (scm_integer_p (v) == SCM_BOOL_T) { - Real val = *id->access_content_Real (false); - - output_Real_def (prefix + s, val); + output_int_def (prefix + s, gh_scm2int (v)); } - else if (dynamic_cast (id)) + else if (gh_number_p (v)) { - int val = *id->access_content_int (false); - - output_int_def (prefix + s, val); + output_Real_def (prefix + s, gh_scm2double (v)); } } } diff --git a/lily/parser.yy b/lily/parser.yy index e7d2361273..fb8a04b914 100644 --- a/lily/parser.yy +++ b/lily/parser.yy @@ -50,7 +50,7 @@ is_duration_b (int t) // mmm JUNKME ? -Mudela_version oldest_version ("1.3.42"); +Mudela_version oldest_version ("1.3.59"); void print_mudela_versions (ostream &os) @@ -82,7 +82,6 @@ print_mudela_versions (ostream &os) %union { Array *pitch_arr; Link_array *reqvec; - Array *intvec; Duration *duration; Identifier *id; String * string; @@ -96,13 +95,13 @@ print_mudela_versions (ostream &os) Musical_pitch * pitch; Midi_def* midi; Moment *moment; - Paper_def *paper; Real real; Request * request; /* We use SCMs to do strings, because it saves us the trouble of deleting them. Let's hope that a stack overflow doesnt trigger a move of the parse stack onto the heap. */ + SCM scm; Tempo_req *tempo; @@ -197,20 +196,18 @@ yylex (YYSTYPE *s, void * v_l) %token IDENTIFIER %token MUSIC_IDENTIFIER %token REQUEST_IDENTIFIER -%token REAL_IDENTIFIER %token TRANS_IDENTIFIER -%token INT_IDENTIFIER +%token NUMBER_IDENTIFIER + %token SCORE_IDENTIFIER -%token MIDI_IDENTIFIER -%token PAPER_IDENTIFIER -%token REAL +%token MUSIC_OUTPUT_DEF_IDENTIFIER -%token STRING_IDENTIFIER SCM_IDENTIFIER +%token STRING_IDENTIFIER SCM_IDENTIFIER %token DURATION RESTNAME -%token STRING +%token STRING %token SCM_T %token UNSIGNED - +%token REAL %type output_def %type mudela_header mudela_header_body @@ -220,14 +217,14 @@ yylex (YYSTYPE *s, void * v_l) %type simple_element request_chord command_element Simple_music Composite_music %type Alternative_music Repeated_music %type tremolo_type -%type int unsigned +%type bare_int bare_unsigned %type script_dir -%type identifier_init +%type identifier_init %type steno_duration optional_notemode_duration %type entered_notemode_duration explicit_duration -%type int_list + %type pre_requests post_requests %type gen_text_def %type steno_musical_pitch musical_pitch absolute_musical_pitch @@ -236,7 +233,6 @@ yylex (YYSTYPE *s, void * v_l) %type chord_additions chord_subtractions chord_notes chord_step %type chord %type chord_note chord_inversion chord_bass -%type midi_block midi_body %type duration_length %type embedded_scm scalar @@ -244,14 +240,13 @@ yylex (YYSTYPE *s, void * v_l) %type relative_music re_rhythmed_music %type property_def translator_change %type Music_list -%type paper_block paper_def_body -%type real real_with_dimension +%type music_output_def_body %type shorthand_command_req %type post_request %type command_req verbose_command_req %type extender_req %type hyphen_req -%type string +%type string bare_number number_expression %type score_block score_body %type translator_spec_block translator_spec_body @@ -290,15 +285,13 @@ toplevel_expression: | score_block { score_global_array.push ($1); } - | paper_block { + | output_def { Identifier * id = new - Paper_def_identifier ($1, PAPER_IDENTIFIER); - THIS->lexer_p_->set_identifier ("$defaultpaper", smobify (id)) - } - | midi_block { - Identifier * id = new - Midi_def_identifier ($1, MIDI_IDENTIFIER); - THIS->lexer_p_->set_identifier ("$defaultmidi", smobify (id)) + Music_output_def_identifier ($1, MUSIC_OUTPUT_DEF_IDENTIFIER); + if (dynamic_cast ($1)) + THIS->lexer_p_->set_identifier ("$defaultpaper", smobify (id)); + else if (dynamic_cast ($1)) + THIS->lexer_p_->set_identifier ("$defaultmidi", smobify (id)); } | embedded_scm { // junk value @@ -377,14 +370,9 @@ assignment: identifier_init: score_block { $$ = smobify (new Score_identifier ($1, SCORE_IDENTIFIER)); - } - | paper_block { - $$ = smobify (new Paper_def_identifier ($1, PAPER_IDENTIFIER)); - } - | midi_block { - $$ = smobify (new Midi_def_identifier ($1, MIDI_IDENTIFIER)); - + | output_def { + $$ = smobify (new Music_output_def_identifier ($1, MUSIC_OUTPUT_DEF_IDENTIFIER)); } | translator_spec_block { $$ = smobify (new Translator_group_identifier ($1, TRANS_IDENTIFIER)); @@ -399,15 +387,12 @@ identifier_init: | explicit_duration { $$ = smobify (new Duration_identifier ($1, DURATION_IDENTIFIER)); } - | real { - $$ = smobify (new Real_identifier (new Real ($1), REAL_IDENTIFIER)); + | number_expression { + $$ = $1; } | string { $$ = $1; } - | int { - $$ = smobify (new int_identifier (new int ($1), INT_IDENTIFIER)); - } | embedded_scm { $$ = $1; } @@ -441,21 +426,12 @@ translator_spec_body: tg->set_property (ly_scm2string ($2), $4); } | translator_spec_body STRING '=' identifier_init semicolon { - Identifier* id = unsmob_identifier ($4); - - Real_identifier *r= dynamic_cast(id); - int_identifier *i = dynamic_cast (id); - - SCM v; - if (gh_string_p ($4)) + SCM v = gh_int2scm (0); + if (gh_string_p ($4) || gh_number_p ($4)) v = $4; - else if (i) v = gh_int2scm (*i->access_content_int (false)); - else if (r) v = gh_double2scm (*r->access_content_Real (false)); else THIS->parser_error (_("Wrong type for property value")); - if (id) - delete id; /* ugh*/ Translator_group* tg = dynamic_cast ($$); @@ -490,7 +466,7 @@ score_block: { Identifier *id = unsmob_identifier (THIS->lexer_p_->lookup_identifier ("$defaultpaper")); - $$->add_output (id ? id->access_content_Paper_def (true) : new Paper_def ); + $$->add_output (id ? id->access_content_Music_output_def (true) : new Paper_def ); } } ; @@ -515,148 +491,77 @@ score_body: } ; -output_def: - paper_block { - $$ = $1; - } - | midi_block { - $$= $1; - } - ; - - -/* - PAPER -*/ -paper_block: - PAPER '{' paper_def_body '}' { - $$ = $3; - THIS-> lexer_p_->scope_l_arr_.pop (); - } - ; - - -paper_def_body: - /* empty */ { - Identifier *id = unsmob_identifier (THIS->lexer_p_->lookup_identifier ("$defaultpaper")); - Paper_def *p = id ? id->access_content_Paper_def (true) : new Paper_def; - THIS-> lexer_p_-> scope_l_arr_.push (p->scope_p_); - $$ = p; - } - | PAPER_IDENTIFIER { - Paper_def *p = $1->access_content_Paper_def (true); - THIS->lexer_p_->scope_l_arr_.push (p->scope_p_); - $$ = p; - } - | paper_def_body int '=' FONT STRING { // ugh, what a syntax - Lookup * l = new Lookup; - l->font_name_ = ly_scm2string ($5); - $$->set_lookup ($2, l); - } - | paper_def_body assignment semicolon { - - } - | paper_def_body translator_spec_block { - $$->assign_translator ($2); - } - | paper_def_body error { - - } - ; - - - -real_with_dimension: - REAL CM_T { - $$ = $1 CM; - } - | REAL PT_T { - $$ = $1 PT; - } - | REAL IN_T { - $$ = $1 INCH; - } - | REAL MM_T { - $$ = $1 MM; - } - | REAL CHAR_T { - $$ = $1 CHAR; - } - ; -real: - REAL { - $$ = $1; - } - | real_with_dimension - | REAL_IDENTIFIER { - $$= *$1->access_content_Real (false); - } - | '-' real %prec UNARY_MINUS { - $$ = -$2; - } - | real '*' real { - $$ = $1 * $3; - } - | real '/' real { - $$ = $1 / $3; - } - | real '+' real { - $$ = $1 + $3; - } - | real '-' real { - $$ = $1 - $3; - } - | '(' real ')' { - $$ = $2; - } - ; - /* MIDI */ -midi_block: - MIDI - '{' midi_body '}' { - $$ = $3; +output_def: + music_output_def_body '}' { + $$ = $1; THIS-> lexer_p_-> scope_l_arr_.pop(); } ; -midi_body: /* empty */ { +music_output_def_body: + MIDI '{' { Identifier *id = unsmob_identifier (THIS->lexer_p_->lookup_identifier ("$defaultmidi")); - Midi_def* p = id - ? id->access_content_Midi_def (true) : new Midi_def ; + + + Midi_def* p =0; + if (id) + p = dynamic_cast (id->access_content_Music_output_def (true)); + else + p = new Midi_def; $$ = p; THIS->lexer_p_->scope_l_arr_.push (p->scope_p_); } - | MIDI_IDENTIFIER { - Midi_def * p =$1-> access_content_Midi_def (true); + | PAPER '{' { + Identifier *id = unsmob_identifier (THIS->lexer_p_->lookup_identifier ("$defaultpaper")); + Paper_def *p = 0; + if (id) + p = dynamic_cast (id->access_content_Music_output_def (true)); + else + p = new Paper_def; + THIS-> lexer_p_-> scope_l_arr_.push (p->scope_p_); + $$ = p; + } + | PAPER '{' MUSIC_OUTPUT_DEF_IDENTIFIER { + Music_output_def *p = $3->access_content_Music_output_def (true); + THIS->lexer_p_->scope_l_arr_.push (p->scope_p_); $$ = p; + } + | MIDI '{' MUSIC_OUTPUT_DEF_IDENTIFIER { + Music_output_def *p = $3->access_content_Music_output_def (true); THIS->lexer_p_->scope_l_arr_.push (p->scope_p_); + $$ = p; } - | midi_body assignment semicolon { + | music_output_def_body assignment semicolon { } - | midi_body translator_spec_block { + | music_output_def_body translator_spec_block { $$-> assign_translator ($2); } - | midi_body tempo_request semicolon { + | music_output_def_body tempo_request semicolon { /* junk this ? there already is tempo stuff in music. */ - $$->set_tempo ($2->dur_.length_mom (), $2->metronome_i_); + dynamic_cast ($$)->set_tempo ($2->dur_.length_mom (), $2->metronome_i_); delete $2; } - | midi_body error { + | music_output_def_body bare_int '=' FONT STRING { // ugh, what a syntax + Lookup * l = new Lookup; + l->font_name_ = ly_scm2string ($5); + dynamic_cast ($$)->set_lookup ($2, l); + } + | music_output_def_body error { } ; tempo_request: - TEMPO steno_duration '=' unsigned { + TEMPO steno_duration '=' bare_unsigned { $$ = new Tempo_req; $$->dur_ = *$2; delete $2; @@ -695,7 +600,7 @@ Alternative_music: Repeated_music: - REPEAT STRING unsigned Music Alternative_music + REPEAT STRING bare_unsigned Music Alternative_music { Music_sequence* m = dynamic_cast ($5); if (m && $3 < m->length_i ()) @@ -757,11 +662,11 @@ Simple_music: | MUSIC_IDENTIFIER { $$ = $1->access_content_Music (true); } | property_def | translator_change - | Simple_music '*' unsigned '/' unsigned { + | Simple_music '*' bare_unsigned '/' bare_unsigned { $$ = $1; $$->compress (Moment($3, $5 )); } - | Simple_music '*' unsigned { + | Simple_music '*' bare_unsigned { $$ = $1; $$->compress (Moment ($3, 1)); } @@ -799,7 +704,7 @@ Composite_music: THIS->remember_spot (); } /* CONTINUED */ - unsigned '/' unsigned Music + bare_unsigned '/' bare_unsigned Music { $$ = new Time_scaled_music ($3, $5, $6); @@ -882,7 +787,7 @@ property_def: scalar: string { $$ = $1; } - | int { $$ = gh_int2scm ($1); } + | bare_int { $$ = gh_int2scm ($1); } | embedded_scm { $$ = $1; } ; @@ -963,7 +868,7 @@ verbose_command_req: BAR STRING { $$ = new Bar_req (ly_scm2string ($2)); } - | COMMANDSPANREQUEST int STRING { + | COMMANDSPANREQUEST bare_int STRING { Span_req * sp_p = new Span_req; sp_p-> span_dir_ = Direction($2); sp_p->span_type_str_ = ly_scm2string ($3); @@ -980,19 +885,19 @@ verbose_command_req: $$ = m; } - | MARK unsigned { + | MARK bare_unsigned { Mark_req *m = new Mark_req; m->mark_label_ = gh_int2scm ($2); $$ = m; } - | TIME_T unsigned '/' unsigned { + | TIME_T bare_unsigned '/' bare_unsigned { Time_signature_change_req *m = new Time_signature_change_req; m->beats_i_ = $2; m->one_beat_i_=$4; $$ = m; } - | PENALTY int { + | PENALTY bare_int { Break_req * b = new Break_req; b->penalty_f_ = $2 / 100.0; b->set_spot (THIS->here_input ()); @@ -1015,19 +920,6 @@ verbose_command_req: Key_change_req *key_p= new Key_change_req; $$ = key_p; } -/* -TODO: Support for minor/major keys; make `major-scale' settable. - -FIXME: force modality. -*/ -/* - | KEY NOTENAME_PITCH { - Key_change_req *key_p= new Key_change_req; - - key_p->pitch_alist_ = scm_eval (ly_symbol2scm ("major-scale")); - $$ = key_p; - } -*/ | KEY NOTENAME_PITCH SCM_IDENTIFIER { Key_change_req *key_p= new Key_change_req; @@ -1090,9 +982,9 @@ verbose_request: $$ = ts_p; } - | SPANREQUEST int STRING { + | SPANREQUEST bare_int STRING { Span_req * sp_p = new Span_req; - sp_p-> span_dir_ = Direction($2); + sp_p->span_dir_ = Direction($2); sp_p->span_type_str_ = ly_scm2string ($3); sp_p->set_spot (THIS->here_input ()); $$ = sp_p; @@ -1172,15 +1064,15 @@ musical_pitch: ; explicit_duration: - DURATION '{' int_list '}' { + DURATION embedded_scm { $$ = new Duration; - Array &a = *$3; - ARRAY_SIZE(a,2); - - $$-> durlog_i_ = a[0]; - $$-> dots_i_ = a[1]; - - delete &a; + if (scm_ilength ($2) == 2) + { + $$-> durlog_i_ = gh_scm2int (gh_car($2)); + $$-> dots_i_ = gh_scm2int (gh_cadr($2)); + } + else + THIS->parser_error (_("Must have 2 arguments for duration")); } ; @@ -1309,10 +1201,10 @@ duration_length: steno_duration { $$ = $1; } - | duration_length '*' unsigned { + | duration_length '*' bare_unsigned { $$->tuplet_iso_i_ *= $3; } - | duration_length '/' unsigned { + | duration_length '/' bare_unsigned { $$->tuplet_type_i_ *= $3; } ; @@ -1333,7 +1225,7 @@ optional_notemode_duration: ; steno_duration: - unsigned { + bare_unsigned { $$ = new Duration; if (!is_duration_b ($1)) THIS->parser_error (_f ("not a duration: %d", $1)); @@ -1354,7 +1246,7 @@ tremolo_type: ':' { $$ =0; } - | ':' unsigned { + | ':' bare_unsigned { if (!is_duration_b ($2)) THIS->parser_error (_f ("not a duration: %d", $2)); $$ = $2; @@ -1386,7 +1278,6 @@ simple_element: delete $1; delete $4; - } | RESTNAME optional_notemode_duration { Simultaneous_music* velt_p = new Request_chord; @@ -1438,16 +1329,16 @@ simple_element: | STRING optional_notemode_duration { if (!THIS->lexer_p_->lyric_state_b ()) THIS->parser_error (_ ("Have to be in Lyric mode for lyrics")); - Simultaneous_music* velt_p = new Request_chord; + Simultaneous_music* velt_p = new Request_chord; - Lyric_req* lreq_p = new Lyric_req; - lreq_p ->text_str_ = ly_scm2string ($1); - lreq_p->duration_ = *$2; - lreq_p->set_spot (THIS->here_input()); + Lyric_req* lreq_p = new Lyric_req; + lreq_p ->text_str_ = ly_scm2string ($1); + lreq_p->duration_ = *$2; + lreq_p->set_spot (THIS->here_input()); - velt_p->add_music (lreq_p); + velt_p->add_music (lreq_p); - delete $2; + delete $2; $$= velt_p; } @@ -1458,6 +1349,7 @@ simple_element: } ; + chord: steno_tonic_pitch optional_notemode_duration chord_additions chord_subtractions chord_inversion chord_bass { $$ = THIS->get_chord (*$1, $3, $4, $5, $6, *$2); @@ -1529,19 +1421,19 @@ chord_step: ; chord_note: - unsigned { + bare_unsigned { $$ = new Musical_pitch; $$->notename_i_ = ($1 - 1) % 7; $$->octave_i_ = $1 > 7 ? 1 : 0; $$->accidental_i_ = 0; } - | unsigned '+' { + | bare_unsigned '+' { $$ = new Musical_pitch; $$->notename_i_ = ($1 - 1) % 7; $$->octave_i_ = $1 > 7 ? 1 : 0; $$->accidental_i_ = 1; } - | unsigned CHORD_MINUS { + | bare_unsigned CHORD_MINUS { $$ = new Musical_pitch; $$->notename_i_ = ($1 - 1) % 7; $$->octave_i_ = $1 > 7 ? 1 : 0; @@ -1552,48 +1444,91 @@ chord_note: /* UTILITIES */ - -/* - FIXME: use scm. -*/ -/* -pitch_list: { - $$ = new Array; +number_expression: + bare_number { + $$ = $1; } - | pitch_list musical_pitch { - $$->push (*$2); - delete $2; + | '-' number_expression %prec UNARY_MINUS { + $$ = scm_difference ($2, SCM_UNDEFINED); } - ; -*/ - -int_list: - /**/ { - $$ = new Array + | number_expression '*' number_expression { + $$ = scm_product ($1, $3); + } + | number_expression '/' number_expression { + $$ = scm_divide ($1, $3); + } + | number_expression '+' number_expression { + $$ = scm_sum ($1, $3); } - | int_list int { - $$->push ($2); + | number_expression '-' number_expression { + $$ = scm_difference ($1, $3); + } + | '(' number_expression ')' { + $$ = $2; } ; -unsigned: +bare_number: UNSIGNED { - $$ = $1; + $$ = gh_int2scm ($1); } | DIGIT { + $$ = gh_int2scm ($1); + } + | REAL { + $$ = gh_double2scm ($1); + } + | NUMBER_IDENTIFIER { $$ = $1; } + | REAL CM_T { + $$ = gh_double2scm ($1 CM); + } + | REAL PT_T { + $$ = gh_double2scm ($1 PT); + } + | REAL IN_T { + $$ = gh_double2scm ($1 INCH); + } + | REAL MM_T { + $$ = gh_double2scm ($1 MM); + } + | REAL CHAR_T { + $$ = gh_double2scm ($1 CHAR); + } ; -int: - unsigned { - $$ = $1; + +bare_unsigned: + bare_number { + if (scm_integer_p ($1) == SCM_BOOL_T) { + $$ = gh_scm2int ($1); + + } else { + THIS->parser_error (_("need integer number arg")); + $$ = 0; + } + if ($$ < 0) { + THIS->parser_error (_("Must be positive integer")); + $$ = -$$; + } + } - | '-' unsigned { - $$ = -$2; + ; +bare_int: + bare_number { + if (scm_integer_p ($1) == SCM_BOOL_T) + { + int k = gh_scm2int ($1); + $$ = k; + } else + { + THIS->parser_error (_("need integer number arg")); + $$ = 0; + } } - | INT_IDENTIFIER { - $$ = *$1->access_content_int (false); + | '-' bare_int { + $$ = -$2; } ; @@ -1625,6 +1560,7 @@ questions: semicolon: ';' ; + %% void diff --git a/lily/piano-pedal-engraver.cc b/lily/piano-pedal-engraver.cc index b8a69703a7..8f43379ba5 100644 --- a/lily/piano-pedal-engraver.cc +++ b/lily/piano-pedal-engraver.cc @@ -16,8 +16,8 @@ #include "stem.hh" #include "side-position-interface.hh" #include "staff-symbol-referencer.hh" -#include "text-item.hh" -#include "sustain-pedal.hh" +#include "item.hh" + /* TODO: @@ -159,7 +159,7 @@ Piano_pedal_engraver::do_process_music () } else { - s = get_property ("stopStart" + String (p->name_ )); + s = get_property (("stopStart" + String (p->name_ )).ch_C()); } p->start_req_l_ = p->req_l_drul_[START]; } @@ -171,14 +171,14 @@ Piano_pedal_engraver::do_process_music () } else { - s = get_property ("stop" + String (p->name_ )); + s = get_property (("stop" + String (p->name_ )).ch_C()); } p->start_req_l_ = 0; } else if (p->req_l_drul_[START]) { p->start_req_l_ = p->req_l_drul_[START]; - s = get_property ("start" + String (p->name_ )); + s = get_property (("start" + String (p->name_ )).ch_C()); } if (gh_string_p (s)) @@ -186,14 +186,14 @@ Piano_pedal_engraver::do_process_music () if (p->name_ == String ("Sustain")) { // fixme: Item should be sufficient. - p->item_p_ = new Text_item (get_property ("basicSustainPedalProperties")); + p->item_p_ = new Item (get_property ("basicSustainPedalProperties")); } else { - p->item_p_ = new Text_item (get_property ("basicPedalProperties")); + p->item_p_ = new Item (get_property ("basicPedalProperties")); } - p->item_p_->set_elt_property ("text", s); - // guh + p->item_p_->set_elt_property ("text", s); + // guh Side_position_interface si (p->item_p_); si.set_axis (Y_AXIS); diff --git a/lily/rest.cc b/lily/rest.cc index 5270a355e3..24bc4d0847 100644 --- a/lily/rest.cc +++ b/lily/rest.cc @@ -14,7 +14,7 @@ #include "paper-score.hh" #include "staff-symbol-referencer.hh" - +// -> offset callback void Rest::after_line_breaking () { @@ -36,29 +36,35 @@ Rest::after_line_breaking () } -MAKE_SCHEME_SCORE_ELEMENT_CALLBACKS(Rest) -Molecule -Rest::do_brew_molecule () const +MAKE_SCHEME_SCORE_ELEMENT_NON_DEFAULT_CALLBACKS(Rest) + +SCM +Rest::scheme_molecule (SCM smob) { + Score_element* sc = unsmob_element (smob); + bool ledger_b =false; - if (balltype_i () == 0 || balltype_i () == 1) + SCM balltype = sc->get_elt_property ("duration-log"); + + if (balltype == gh_int2scm (0) || balltype == gh_int2scm (1)) { - Staff_symbol_referencer_interface si(this); - ledger_b = abs(si.position_f () - (2* balltype_i () - 1)) + Staff_symbol_referencer_interface si(sc); + ledger_b = abs(si.position_f () - (2* gh_scm2int (balltype) - 1)) > si.line_count (); } String style; - SCM style_sym =get_elt_property ("style"); - if (balltype_i () >= 2 &&gh_string_p ( style_sym)) + SCM style_sym =sc->get_elt_property ("style"); + if (gh_scm2int (balltype) >= 2 && gh_string_p (style_sym)) { style = ly_scm2string (style_sym); } - String idx = ("rests-") + to_str (balltype_i ()) + (ledger_b ? "o" : "") + style; + String idx = ("rests-") + to_str (gh_scm2int (balltype)) + + (ledger_b ? "o" : "") + style; - return lookup_l ()->afm_find (idx); + return sc-> lookup_l ()->afm_find (idx).create_scheme(); } diff --git a/lily/scope.cc b/lily/scope.cc index 96d1b86d33..c04878f934 100644 --- a/lily/scope.cc +++ b/lily/scope.cc @@ -20,15 +20,6 @@ Scope::~Scope () Scope::Scope (Scope const&s) : id_dict_ (new Scheme_hash_table (*s.id_dict_)) { - /* - cloning not necessary. - - id_dict_ = new Hash_table (*s.id_dict_); - for (Scope_iter ai (s); ai.ok(); ai++) - { - id_dict_->elem (ai.scm_key ()) = ai.val ()->clone (); - } - */ } Scope::Scope () diff --git a/lily/score-element.cc b/lily/score-element.cc index 906c4c5a96..a0a13eb5af 100644 --- a/lily/score-element.cc +++ b/lily/score-element.cc @@ -38,6 +38,7 @@ remove dynamic_cast and put this code into respective */ +#define INFINITY_MSG "Infinity or NaN encountered" Score_element::Score_element(SCM basicprops) { @@ -49,9 +50,6 @@ Score_element::Score_element(SCM basicprops) status_i_ = 0; self_scm_ = SCM_EOL; original_l_ = 0; -#ifndef READONLY_PROPS - basic_property_list_ = basicprops; -#endif READONLY_PROPS property_alist_ = basicprops; pointer_alist_ = SCM_EOL; @@ -67,17 +65,7 @@ Score_element::Score_element (Score_element const&s) self_scm_ = SCM_EOL; original_l_ =(Score_element*) &s; property_alist_ = s.property_alist_; -#ifndef READONLY_PROPS - basic_property_list_ = s.basic_property_list_; - /* - TODO: should copy the private part of the list. - */ - SCM y ; - for (SCM *sp = &s.property_alist_; *sp != basic_property_list_; sp = &SCM_CDR(*sp)) - { - *sp = gh_cons ( - } -#endif + pointer_alist_ = SCM_EOL; status_i_ = s.status_i_; @@ -138,24 +126,6 @@ void Score_element::set_elt_property (String k, SCM val) { SCM sym = ly_symbol2scm (k.ch_C ()); -#ifndef READONLY_PROPS - /* - destructive if found in my part of the list. - */ - for (SCM s = property_alist_; s != basic_property_list_; s =gh_cdr (s)) - { - if (gh_caar (s)== sym) - { - gh_set_cdr_x (gh_car (s), val); - return; - } - } -/* - not found in private list. Override in private list. - */ - -#endif - property_alist_ = gh_cons (gh_cons (sym, val), property_alist_); } @@ -298,25 +268,23 @@ Score_element::do_add_processing() } -MAKE_SCHEME_SCORE_ELEMENT_CALLBACKS(Score_element) +MAKE_SCHEME_SCORE_ELEMENT_NON_DEFAULT_CALLBACKS(Score_element) - /* +/* ugh. */ - -Molecule -Score_element::do_brew_molecule () const +SCM +Score_element::scheme_molecule (SCM smob) { - SCM glyph = get_elt_property ("glyph"); + Score_element * sc = unsmob_element (smob); + SCM glyph = sc->get_elt_property ("glyph"); if (gh_string_p (glyph)) { - return lookup_l ()->afm_find (String (ly_scm2string (glyph))); + return sc->lookup_l ()->afm_find (String (ly_scm2string (glyph))).create_scheme (); } else { - Molecule m ; - m.set_empty (true); - return m; + return SCM_EOL; } } @@ -500,7 +468,12 @@ Score_element::find_broken_piece (Line_of_score*) const void Score_element::translate_axis (Real y, Axis a) { - dim_cache_[a].offset_ += y; + if (isinf (y) || isnan (y)) + programming_error (_(INFINITY_MSG)); + else + { + dim_cache_[a].offset_ += y; + } } Real @@ -532,7 +505,7 @@ Score_element::get_offset (Axis a) const if (isinf (r) || isnan (r)) { r = 0.0; - programming_error ("Infinity or NaN encountered"); + programming_error (INFINITY_MSG); } me->dim_cache_[a].offset_ +=r; } @@ -608,9 +581,9 @@ Score_element * Score_element::common_refpoint (Score_element const* s, Axis a) const { /* - I don't like the quadratic aspect of this code. Maybe this should - be rewritten some time, but the largest chain of parents might be - 10 high or so, so it shouldn't be a real issue. */ + I don't like the quadratic aspect of this code, but I see no other + way. The largest chain of parents might be 10 high or so, so + it shouldn't be a real issue. */ for (Score_element const *c = this; c; c = c->dim_cache_[a].parent_l_) for (Score_element const * d = s; d; d = d->dim_cache_[a].parent_l_) if (d == c) diff --git a/lily/span-bar.cc b/lily/span-bar.cc index da89393ba6..415f1cac8b 100644 --- a/lily/span-bar.cc +++ b/lily/span-bar.cc @@ -50,8 +50,12 @@ Span_bar::before_line_breaking () void Span_bar::after_line_breaking () { - Bar::after_line_breaking (); Interval i (get_spanned_interval ()); + + /* + Bar::brew_molecule delivers a barline of y-extent (-h/2,h/2), so + we have to translate ourselves to be in the center of the + interval that we span. */ translate_axis (i.center (), Y_AXIS); } diff --git a/lily/stem.cc b/lily/stem.cc index 6c111feee1..1ca3d9b3eb 100644 --- a/lily/stem.cc +++ b/lily/stem.cc @@ -623,7 +623,7 @@ Stem::calc_stem_info () const s = beam_l ()->get_elt_property ("shorten"); if (gh_number_p (s)) - info.idealy_f_ -= gh_double2scm (s); + info.idealy_f_ -= gh_scm2double (s); Real interstaff_f = -beam_dir* calc_interstaff_dist (this, beam_l ()); diff --git a/lily/sustain-pedal.cc b/lily/sustain-pedal.cc index 93e454441c..1906eb29ac 100644 --- a/lily/sustain-pedal.cc +++ b/lily/sustain-pedal.cc @@ -6,27 +6,34 @@ (c) 2000 Han-Wen Nienhuys */ - -#include "sustain-pedal.hh" -#include "side-position-interface.hh" +#include "score-element.hh" #include "molecule.hh" #include "lookup.hh" -#include "staff-symbol-referencer.hh" -void -Sustain_pedal::after_line_breaking () +// update comment --hwn +/* + Urg. + This is almost text + Problem is: + * we have no kerning + * symbols are at wrong place in font + + + + Properties: + + glyph -- text string (TODO: make one large glyph of the Ped symbol, removes need for do_brew_molecule ()) + +*/ + +struct Sustain_pedal { - return ; - /* - UGH. Should work automatically via offset callback. - */ - Side_position_interface i (this); - Direction d = i.get_direction (); - i.set_direction (d); -} +public: + static SCM scheme_molecule (SCM); +}; -MAKE_SCHEME_SCORE_ELEMENT_NON_DEFAULT_CALLBACKS(Sustain_pedal); +MAKE_SCHEME_SCORE_ELEMENT_NON_DEFAULT_CALLBACKS(Sustain_pedal); SCM Sustain_pedal::scheme_molecule (SCM smob) @@ -57,7 +64,3 @@ Sustain_pedal::scheme_molecule (SCM smob) return mol.create_scheme (); } -Sustain_pedal ::Sustain_pedal(SCM s ) - : Item (s) -{ -} diff --git a/lily/system-start-delimiter.cc b/lily/system-start-delimiter.cc index f02cab53d5..884f44e313 100644 --- a/lily/system-start-delimiter.cc +++ b/lily/system-start-delimiter.cc @@ -19,20 +19,22 @@ Molecule System_start_delimiter::staff_bracket (Real height) const { Paper_def* p= paper_l (); - Real arc_height = p->get_var("bracket_arch_height"); + SCM scmss = p->get_scmvar ("staffspace"); + Real ss = gh_scm2double (scmss); + Real arc_height = gh_scm2double (get_elt_property("arch-height")) * ss ; + SCM at = gh_list (ly_symbol2scm ("bracket"), - gh_double2scm (p->get_var("bracket_arch_angle")), - gh_double2scm (p->get_var("bracket_arch_width")), + scm_product (get_elt_property ("arch-angle"), scmss), + scm_product (get_elt_property ("arch-width"), scmss), gh_double2scm (arc_height), - gh_double2scm (p->get_var("bracket_width")), + scm_product (get_elt_property ("bracket-width"),scmss), gh_double2scm (height), - gh_double2scm (p->get_var("bracket_arch_thick")), - gh_double2scm (p->get_var("bracket_thick")), + scm_product (get_elt_property ("arch-thick"),scmss), + scm_product (get_elt_property ("bracket-thick"),scmss), SCM_UNDEFINED); - Real staff_space = p->get_var ("interline"); Real h = height + 2 * arc_height; - Box b (Interval (0, 1.5 * staff_space), Interval (-h/2, h/2)); + Box b (Interval (0, 1.5 * ss), Interval (-h/2, h/2)); Molecule mol (b, at); mol.align_to (X_AXIS, CENTER); return mol; @@ -48,7 +50,8 @@ System_start_delimiter::System_start_delimiter (SCM s) Molecule System_start_delimiter::simple_bar (Real h) const { - Real w = paper_l ()->get_var ("barthick_score"); + Real w = paper_l ()->get_var ("stafflinethickness") * + gh_scm2double (get_elt_property ("thickness")); return lookup_l ()->filledbox (Box (Interval(0,w), Interval(-h/2, h/2))); } @@ -63,41 +66,44 @@ System_start_delimiter::after_line_breaking () } } -MAKE_SCHEME_SCORE_ELEMENT_CALLBACKS(System_start_delimiter); -Molecule -System_start_delimiter::do_brew_molecule ()const +MAKE_SCHEME_SCORE_ELEMENT_NON_DEFAULT_CALLBACKS(System_start_delimiter); + +SCM +System_start_delimiter::scheme_molecule (SCM smob) { - Interval ext = Axis_group_interface::group_extent_callback (this, Y_AXIS); + Score_element * sc = unsmob_element (smob); + + System_start_delimiter * ssd= dynamic_cast (sc); + + Interval ext = Axis_group_interface::group_extent_callback (sc, Y_AXIS); Real l = ext.length (); Molecule m; - SCM s = get_elt_property ("collapse-height"); + SCM s = sc->get_elt_property ("collapse-height"); if (gh_number_p (s) && l < gh_scm2double (s)) { - System_start_delimiter * me = (System_start_delimiter*)this; - me->suicide (); - return m; + sc->suicide(); + return SCM_EOL; } - - s = get_elt_property ("glyph"); + s = sc->get_elt_property ("glyph"); if (!gh_symbol_p(s)) - return m; + return SCM_EOL; if (s == ly_symbol2scm ("bracket")) - m = staff_bracket (l); - else if ( s == ly_symbol2scm ("brace")) - m = staff_brace (l); + m = ssd->staff_bracket (l); + else if (s == ly_symbol2scm ("brace")) + m = ssd-> staff_brace (l); else if (s == ly_symbol2scm ("bar-line")) - m = simple_bar (l); + m = ssd->simple_bar (l); m.translate_axis (ext.center (), Y_AXIS); - return m; + return m.create_scheme (); } /* - ugh. Suck me plenty. + Ugh. Suck me plenty. */ Molecule System_start_delimiter::staff_brace (Real y) const diff --git a/lily/text-engraver.cc b/lily/text-engraver.cc index a0390bd6a2..3611f59dcc 100644 --- a/lily/text-engraver.cc +++ b/lily/text-engraver.cc @@ -10,7 +10,7 @@ #include "dimension-cache.hh" #include "engraver.hh" #include "side-position-interface.hh" -#include "text-item.hh" +#include "item.hh" #include "musical-request.hh" #include "note-head.hh" #include "stem.hh" @@ -22,7 +22,7 @@ class Text_engraver : public Engraver { Link_array reqs_; - Link_array texts_; + Link_array texts_; public: VIRTUAL_COPY_CONS(Translator); @@ -78,7 +78,7 @@ Text_engraver::do_process_music () { Text_script_req * r = reqs_[i]; - Text_item *text = new Text_item (get_property ("basicTextScriptProperties")); + Item *text = new Item (get_property ("basicTextScriptProperties")); Side_position_interface stafy (text); SCM axisprop = get_property ("scriptHorizontal"); @@ -121,7 +121,7 @@ Text_engraver::do_pre_move_processing () { for (int i=0; i < texts_.size (); i++) { - Text_item *ti = texts_[i]; + Item *ti = texts_[i]; Side_position_interface (ti).add_staff_support (); typeset_element (ti); } diff --git a/lily/text-item.cc b/lily/text-item.cc index 35e5aa5c3d..ae3ea80b40 100644 --- a/lily/text-item.cc +++ b/lily/text-item.cc @@ -1,5 +1,5 @@ /* - text-item.cc -- implement Text_item + text-item.cc -- implement Item source file of the GNU LilyPond music typesetter @@ -7,40 +7,41 @@ */ -#include "text-item.hh" #include "debug.hh" #include "molecule.hh" #include "paper-def.hh" #include "lookup.hh" #include "staff-symbol-referencer.hh" -Text_item::Text_item (SCM s) - : Item (s) +struct Text_item { - -} + static SCM scheme_molecule (SCM); +}; -MAKE_SCHEME_SCORE_ELEMENT_CALLBACKS(Text_item) -Molecule -Text_item::do_brew_molecule () const +MAKE_SCHEME_SCORE_ELEMENT_NON_DEFAULT_CALLBACKS(Text_item) + +SCM +Text_item::scheme_molecule (SCM sm) { - SCM style = get_elt_property ("style"); + Score_element * s = unsmob_element (sm); + + SCM style = s->get_elt_property ("style"); String st = gh_string_p (style) ? ly_scm2string (style) : ""; - SCM txt = get_elt_property ("text"); + SCM txt = s-> get_elt_property ("text"); String t = gh_string_p (txt) ? ly_scm2string (txt) : ""; - Molecule mol = paper_l ()->lookup_l(0)->text (st, t, paper_l ()); + Molecule mol = s->paper_l ()->lookup_l(0)->text (st, t, s->paper_l ()); - SCM s = get_elt_property ("word-space"); - if (gh_number_p (s)) + SCM space = s->get_elt_property ("word-space"); + if (gh_number_p (space)) { Molecule m; m.set_empty (false); - mol.add_at_edge (X_AXIS, RIGHT, m, gh_scm2double (s)* - staff_symbol_referencer (this).staff_space ()); + mol.add_at_edge (X_AXIS, RIGHT, m, gh_scm2double (space)* + staff_symbol_referencer (s).staff_space ()); } - return mol; + return mol.create_scheme (); } diff --git a/lily/translator.cc b/lily/translator.cc index 9471666e8b..579deaad47 100644 --- a/lily/translator.cc +++ b/lily/translator.cc @@ -164,9 +164,9 @@ Translator::output_def_l () const } SCM -Translator::get_property (String id) const +Translator::get_property (char const * id) const { - return daddy_trans_l_->get_property (ly_symbol2scm (id.ch_C())); + return daddy_trans_l_->get_property (ly_symbol2scm (id)); } SCM diff --git a/lily/tuplet-spanner.cc b/lily/tuplet-spanner.cc index fbb5f04872..eeabe86e5b 100644 --- a/lily/tuplet-spanner.cc +++ b/lily/tuplet-spanner.cc @@ -90,25 +90,26 @@ Tuplet_spanner::do_brew_molecule () const mol.add_molecule (num); } - Real thick = paper_l ()->get_var ("tuplet_thick"); if (bracket_visibility) { - Real gap = paper_l () -> get_var ("tuplet_spanner_gap"); - Real height = staff_space; + SCM ss = paper_l ()->get_scmvar ("staffspace"); + SCM lt = paper_l ()->get_scmvar ("stafflinethickness"); + + SCM thick = get_elt_property ("thick"); + SCM gap = get_elt_property ("number-gap"); + SCM at =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); + ss, + scm_product (gap, ss), + gh_double2scm (w), + gh_double2scm (dy), + scm_product (thick, lt), + gh_int2scm (dir), + SCM_UNDEFINED); Box b; mol.add_molecule (Molecule (b, at)); } - - //mol.translate_axis (dir * staff_space, Y_AXIS); } return mol; } diff --git a/ly/declarations.ly b/ly/declarations.ly index c113cfec3c..e6f16c1539 100644 --- a/ly/declarations.ly +++ b/ly/declarations.ly @@ -1,8 +1,8 @@ -breve = \duration { -1 0 } -longa = \duration { -2 0 } -maxima = \duration { -3 0 } +breve = \duration #'( -1 0) +longa = \duration #'( -2 0 ) +maxima = \duration #'( -3 0 ) #(eval-string (ly-gulp-file "generic-property.scm")) @@ -25,7 +25,7 @@ center=0 break = \penalty -1000000; nobreak = \penalty 1000000; -\include "scales.ly" +\include "scale-definitions.ly" melisma = \property Staff.melismaBusy = ##t melismaEnd = \property Staff.melismaBusy = ##f diff --git a/ly/engraver.ly b/ly/engraver.ly index 965321ee6c..4445e4afa7 100644 --- a/ly/engraver.ly +++ b/ly/engraver.ly @@ -395,11 +395,25 @@ ScoreContext = \translator { % in alphabetical order % TODO: uniform naming.; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - basicBarlineProperties = #`( + + % + % distances are given in stafflinethickness (thicknesses) and staffspace (distances) + % + + + basicBarProperties = #`( (break-align-symbol . Staff_bar) (molecule-callback . ,Bar::scheme_molecule) (visibility-lambda . ,begin-of-line-invisible) (breakable . #t) + + ;; + ;; Ross. page 151 lists other values, we opt for a leaner look + ;; + (kern . 3.0) + (thin-kern . 3.0) + (hair-thickness . 1.6) + (thick-thickness . 6.0) ) basicBarNumberProperties = #`( @@ -444,6 +458,7 @@ ScoreContext = \translator { ) basicDotsProperties = #`( (molecule-callback . ,Dots::scheme_molecule) + (dot-count . 1) ) basicDynamicLineSpannerProperties = #`( @@ -459,6 +474,9 @@ ScoreContext = \translator { (breakable . #t) ) basicHyphenSpannerProperties = #`( + (thickness . 1.0) + (height . 0.4) + (minimum-length . 0.5) (molecule-callback . ,Hyphen_spanner::scheme_molecule) ) basicKeyProperties = #`( @@ -530,6 +548,13 @@ ScoreContext = \translator { basicSystemStartDelimiterProperties = #`( (molecule-callback . ,System_start_delimiter::scheme_molecule) (collapse-height . 1.0) + (thickness . 1.6) + (arch-height . 1.5) + (arch-angle . 50.0) + (arch-thick . 0.25) + (arch-width . 1.5) + (bracket-thick . 0.25) + (bracket-width . 2.0) ) basicStemProperties = #`( (molecule-callback . ,Stem::scheme_molecule) @@ -556,6 +581,8 @@ ScoreContext = \translator { ) basicTupletSpannerProperties = #`( + (number-gap . 2.0) + (thick . 1.0) (molecule-callback . ,Tuplet_spanner::scheme_molecule) ) basicStemTremoloProperties = #`( diff --git a/ly/init.ly b/ly/init.ly index 27c3fa6612..fd0a20c879 100644 --- a/ly/init.ly +++ b/ly/init.ly @@ -1,4 +1,6 @@ % Toplevel initialisation file. + +foo = \tempo 4 = 100 ; \version "1.3.59"; diff --git a/ly/params-as.ly b/ly/params-as.ly index 974dae0b7b..f06f633e0f 100644 --- a/ly/params-as.ly +++ b/ly/params-as.ly @@ -44,12 +44,6 @@ arithmetic_basicspace = 2.; arithmetic_multiplier = 0.9 * \quartwidth ; -#'Stem_tremolo::beam-width = 1.5 * \quartwidth ; - -#'Clef_item::visibility-lambda = #postbreak-only-visibility -#'Key_item::visibility-lambda = #postbreak-only-visibility -#'Breathing_sign::visibility-lambda = #non-postbreak-visibility - % catch suspect beam slopes, set slope to zero if % outer stem is lengthened more than beam_lengthened = 0.2 * \staffspace; diff --git a/ly/params.ly b/ly/params.ly index 09e12e0680..46e240e986 100644 --- a/ly/params.ly +++ b/ly/params.ly @@ -158,35 +158,9 @@ method. %} gourlay_maxmeasures = 10.; - +% vertical space between lines. line_kern = \staffspace; -%{ Ross. page 151 lists these values, but we think that thick lines -and kernings are too thick. - -bar_kern = 0.5 * \staffspace; -bar_thinkern = 0.75 * \staffspace; -barthick_thick = 0.5* \staffspace; -barthick_score = 0.13333* \staffspace; -barthick_thin = 0.1*\staffspace; - -%} - -bar_kern = 3.0 * \stafflinethickness; -bar_thinkern = 3.0 * \stafflinethickness; -barthick_thick = 6.0* \stafflinethickness; -barthick_thin = 1.6*\stafflinethickness; -barthick_score = 1.6*\stafflinethickness; - -bracket_arch_thick = \staffspace / 4.0; -bracket_width = 2.0 * \staffspace; -bracket_thick = \staffspace / 4.0; -bracket_arch_height = 1.5 * \staffspace; -bracket_arch_width = \bracket_arch_height; -bracket_arch_angle = 50.0; - -tuplet_spanner_gap = 2.0 * \staffspace; -tuplet_thick = 1.0*\stafflinethickness; volta_thick = 1.6*\stafflinethickness; volta_spanner_height = 2.0 *\staffspace; @@ -197,9 +171,6 @@ rulethickness = \stafflinethickness; extender_height = 0.8*\stafflinethickness; -hyphen_thickness = 0.05*\font_normal; -hyphen_height = 0.2*\font_normal; -hyphen_minimum_length = 0.25*\font_normal; % Multi-measure rests multi_measure_rest_x_minimum = 2.5*\staffheight; @@ -221,9 +192,6 @@ restcollision_minimum_beamdist = 1.5; % unit for note collision resolving collision_note_width = \notewidth; %ugh. -% deprecated! -postBreakPadding = 0.0; - % optical correction amount. stemSpacingCorrection = 0.5*\staffspace; @@ -268,9 +236,6 @@ stem_default_neutral_direction = 1.0; % in staffspace articulation_script_padding_default = 1.0; -% Backward compatibility -- has no function; -Gourlay = 0.0; -Wordwrap =0.0; \include "engraver.ly"; diff --git a/ly/scales.ly b/ly/scale-definitions.ly similarity index 100% rename from ly/scales.ly rename to ly/scale-definitions.ly diff --git a/make/lilypond-vars.make b/make/lilypond-vars.make index aef58f1d52..f7017ed344 100644 --- a/make/lilypond-vars.make +++ b/make/lilypond-vars.make @@ -4,3 +4,5 @@ export MFINPUTS:=$(topdir)/mf/$(PATHSEP)$(MFINPUTS)$(PATHSEP)$(PATHSEP) export TEXINPUTS:=$(topdir)/mf/out/$(PATHSEP)$(topdir)/tex/$(PATHSEP)$(topdir)/ps/$(PATHSEP)$(TEXINPUTS)$(PATHSEP)..$(PATHSEP)$(PATHSEP) export LILYINCLUDE:=$(topdir)/ps$(PATHSEP)$(topdir)/scm$(PATHSEP)$(topdir)/ly$(PATHSEP)$(topdir)/mf/out$(PATHSEP)$(PATHSEP)$(TEX_TFMDIR)$(PATHSEP)$(LILYINCLUDE) + +export LILYPONDPREFIX:=$(depth)/ diff --git a/make/mudela-rules.make b/make/mudela-rules.make index fa170d1698..9143c6bf45 100644 --- a/make/mudela-rules.make +++ b/make/mudela-rules.make @@ -5,9 +5,9 @@ SUBST_TEXI_DEPS=sed 's! \.\./! !g' < $(basename $@).dep > $(outdir)/temp.dep ; mv $(outdir)/temp.dep $(basename $@).dep $(outdir)/%.latex: %.doc - cd $(outdir); $(PYTHON) $(depth)/../scripts/mudela-book.py -I .. -I $(depth)/../input/test/ --dependencies --dep-prefix=$(outdir)/ ../$< + cd $(outdir);LILYPONDPREFIX=$(LILYPONDPREFIX)/.. $(PYTHON) $(depth)/../scripts/mudela-book.py -I .. -I $(depth)/../input/test/ --dependencies --dep-prefix=$(outdir)/ ../$< $(SUBST_TEXI_DEPS) $(outdir)/%.texi: %.tely - cd $(outdir); $(PYTHON) $(depth)/../scripts/mudela-book.py -I .. -I $(depth)/../input/test/ --dependencies --dep-prefix=$(outdir)/ --format=texi ../$< + cd $(outdir); LILYPONDPREFIX=$(LILYPONDPREFIX)/.. $(PYTHON) $(depth)/../scripts/mudela-book.py -I .. -I $(depth)/../input/test/ --dependencies --dep-prefix=$(outdir)/ --format=texi ../$< $(SUBST_TEXI_DEPS) diff --git a/make/out/lilypond.lsm b/make/out/lilypond.lsm index 36373fbade..70160c080f 100644 --- a/make/out/lilypond.lsm +++ b/make/out/lilypond.lsm @@ -1,15 +1,15 @@ Begin3 Title: LilyPond -Version: 1.3.60 -Entered-date: 16JUN00 +Version: 1.3.61 +Entered-date: 18JUN00 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.60.tar.gz + 1000k lilypond-1.3.61.tar.gz Original-site: ftp.cs.uu.nl /pub/GNU/LilyPond/development/ - 1000k lilypond-1.3.60.tar.gz + 1000k lilypond-1.3.61.tar.gz Copying-policy: GPL End diff --git a/make/out/lilypond.spec b/make/out/lilypond.spec index 5599000b33..1caf25c93d 100644 --- a/make/out/lilypond.spec +++ b/make/out/lilypond.spec @@ -1,9 +1,9 @@ Name: lilypond -Version: 1.3.60 +Version: 1.3.61 Release: 1 Copyright: GPL Group: Applications/Publishing -Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.3.60.tar.gz +Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.3.61.tar.gz Summary: A program for printing sheet music. URL: http://www.cs.uu.nl/~hanwen/lilypond # Icon: lilypond-icon.gif diff --git a/make/toplevel.make.in b/make/toplevel.make.in index dd38191b50..9cc19ff4b5 100644 --- a/make/toplevel.make.in +++ b/make/toplevel.make.in @@ -26,11 +26,7 @@ STEPMAKE_TEMPLATES=toplevel yolily-toplevel po include $(depth)/make/stepmake.make # -website: fonts htmldoc examples doc++ footify - -footify: - $(footify) --index=./ `$(FIND) . -maxdepth 1 -name '*.html' -print` - $(footify-all-command) +website: fonts htmldoc examples doc++ fonts: $(MAKE) -C $(depth)/mf @@ -42,7 +38,6 @@ htmldoc: $(MAKE) out='www' local-WWW $(MAKE) out='www' -C Documentation WWW rm -f `find . -name \*.html~ -print` - $(footify) --index=./ `$(FIND) . -maxdepth 1 -name '*.html' -print` $(footify-all-command) find `find Documentation -type d -name 'out-www'` -not -name '*dvi' -not -name '*ly' -not -name '*tex' -not -name '*.ps' -not -name 'out-www' > wwwlist tar cfz $(outdir)/htmldoc.tar.gz `cat wwwlist` `ls *.png $(ERRORLOG)` index.html @@ -50,12 +45,10 @@ htmldoc: examples: $(MAKE) out='www' -C input WWW $(MAKE) out='www' -C mutopia WWW - # arg, should not break concept of recursive make; - # this breaks links (and dependencies, see above) + $(footify-all-command) $(PYTHON) $(buildscripts)/mutopia-index.py -o short-examples.html input/ $(PYTHON) $(buildscripts)/mutopia-index.py -o long-examples.html mutopia/ - #$(footify-all-command) - $(footify) --index=./ `$(FIND) . -name '*.html' -print` + tar --exclude='*.dvi' --exclude='*.tex' --exclude='*.ps' --exclude='*.ppm' -czf $(outdir)/examples.tar.gz *-examples.html `find input mutopia -type d -name 'out-www' -print` diff --git a/scm/lily.scm b/scm/lily.scm index 2b3d8b26c4..80e3ffeb6a 100644 --- a/scm/lily.scm +++ b/scm/lily.scm @@ -136,6 +136,7 @@ ) ) +;; silly, use alist? (define (find-notehead-symbol duration style) (case style ((cross) "2cross") diff --git a/scripts/abc2ly.py b/scripts/abc2ly.py index 68073f20ba..b206fcebdd 100644 --- a/scripts/abc2ly.py +++ b/scripts/abc2ly.py @@ -310,7 +310,7 @@ def lily_key (k): key = key + 'es' k = k[1:] if not k: - return(key) + return '%s \\major' % key type = k[0:3] if key_lookup.has_key(type): @@ -512,11 +512,11 @@ def try_parse_header_line (ln, state): m = re.match ('^([^ \t]*) *(.*)$', a) # seperate clef info if m: __main__.global_key =compute_key (m.group(1))# ugh. - voices_append ('\\key %s \\major;' % lily_key(m.group(1))) + voices_append ('\\key %s;' % lily_key(m.group(1))) check_clef(m.group(2)) else: __main__.global_key =compute_key (a)# ugh. - voices_append ('\\key %s \\major;' % lily_key(a)) + voices_append ('\\key %s;' % lily_key(a)) if g == 'O': # Origin header ['origin'] = a if g == 'X': # Reference Number diff --git a/stepmake/bin/add-html-footer.py b/stepmake/bin/add-html-footer.py index 984bbc7c10..adb1152088 100644 --- a/stepmake/bin/add-html-footer.py +++ b/stepmake/bin/add-html-footer.py @@ -10,9 +10,8 @@ import time import string import getopt -gcos = "unknown" -index_url='' -top_url='' +fullname = "unknown" +index_file='' changelog_file='' package_name = '' package_version = '' @@ -34,14 +33,15 @@ footer_file = '' default_header = r""" """ -default_footer = r"""


Please take me back to the index -of @PACKAGE_NAME@ +default_footer = r"""
Please take me back to the index +of %s +