From 3a0e9efb7f067e5b334ba0596b95e15d96d7cc49 Mon Sep 17 00:00:00 2001 From: Han-Wen Nienhuys Date: Tue, 26 Oct 1999 22:10:16 +0200 Subject: [PATCH] release: 1.3.0 --- CHANGES | 265 +----- Documentation/GNUmakefile | 4 +- Documentation/bibliography/GNUmakefile | 45 +- Documentation/faq.texi | 119 +-- Documentation/footer.html.in | 4 +- Documentation/index.texi | 10 +- Documentation/misc/CHANGES-1.2 | 287 ++++++ Documentation/misc/GNUmakefile | 3 +- Documentation/misc/NEWS-1.2 | 9 + Documentation/misc/NEWS-1.2~ | 25 - .../{lelie_icon.xpm => lelie-icon.xpm} | 0 Documentation/pictures/lelie-logo.xpm | 215 +++++ Documentation/pictures/lelie_logo.xpm | 214 ----- Documentation/programmer/1086342053.tex | 891 ++++++++++++++++++ .../{metadoc => programmer}/GNUmakefile | 0 .../{metadoc => programmer}/feta20.sty | 0 .../{metadoc => programmer}/fonts.doc | 0 .../{metadoc => programmer}/hacking.texi | 38 +- .../lilypond-overview.doc | 0 .../{metadoc => programmer}/musicnotes.sty | 0 .../regression-test.tely | 4 +- Documentation/programs.texi | 67 +- Documentation/topdocs/INSTALL.texi | 14 +- Documentation/topdocs/README.texi | 4 +- Documentation/topdocs/index.tely | 22 +- INSTALL.txt | 15 +- NEWS | 9 +- README.txt | 4 +- TODO | 25 +- VERSION | 4 +- buildscripts/set-lily.sh | 2 +- flower/dstream.cc | 32 +- flower/include/dstream.hh | 14 +- flower/include/rational.hh | 6 +- flower/include/real.hh | 2 +- flower/include/scalar.hh | 19 +- flower/include/string.hh | 9 - flower/scalar.cc | 4 +- input/praeludium-fuga-E.ly | 12 +- input/star-spangled-banner.ly | 20 +- ...beam-interstaff.ly => beam-cross-staff.ly} | 0 input/test/embedded-scm.ly | 4 + input/test/no-stem-extend.fly | 13 + ...slur-interstaff.ly => slur-cross-staff.ly} | 0 input/test/uniform-breaking.ly | 112 +++ input/twinkle.ly | 13 +- lib/duration-convert.cc | 38 +- lib/duration-iter.cc | 2 +- lib/duration.cc | 6 +- lib/include/duration-convert.hh | 25 +- lib/include/duration.hh | 6 +- lib/include/moment.hh | 29 - lib/include/plet.hh | 4 +- lib/moment.cc | 12 - lib/plet.cc | 4 +- lily/align-note-column-engraver.cc | 15 +- lily/auto-beam-engraver.cc | 76 +- lily/bar-engraver.cc | 20 +- lily/bar-script-engraver.cc | 16 +- lily/beam-engraver.cc | 23 +- lily/breathing-sign-engraver.cc | 7 +- lily/breathing-sign.cc | 1 - lily/change-iterator.cc | 3 + lily/chord-name-engraver.cc | 12 +- lily/clef-engraver.cc | 20 +- lily/column-x-positions.cc | 2 +- lily/dynamic-engraver.cc | 33 +- lily/font-size-engraver.cc | 6 +- lily/gourlay-breaking.cc | 4 +- lily/grace-position-performer.cc | 6 +- lily/identifier.cc | 12 +- lily/includable-lexer.cc | 10 +- lily/include/clef-engraver.hh | 1 - lily/include/global-translator.hh | 2 +- lily/include/header.hh | 4 - lily/include/identifier.hh | 6 +- lily/include/key.hh | 1 - lily/include/lily-guile.hh | 26 +- lily/include/lily-proto.hh | 11 +- lily/include/ly-smobs.icc | 75 ++ lily/include/ly-symbols.hh | 1 + lily/include/midi-stream.hh | 1 - lily/include/moment.hh | 53 ++ lily/include/music-iterator.hh | 8 +- lily/include/music-output-def.hh | 7 +- lily/include/paper-stream.hh | 3 +- lily/include/property-inspect.hh | 20 + lily/include/scm-hash.hh | 32 + lily/include/score-element.hh | 11 +- lily/include/smobs.hh | 50 + lily/include/translation-property.hh | 6 +- lily/include/translator-group.hh | 11 +- lily/include/translator.hh | 4 +- lily/key-engraver.cc | 17 +- lily/lexer.ll | 43 +- lily/lily-guile.cc | 82 +- lily/local-key-engraver.cc | 10 +- lily/local-key-item.cc | 2 +- lily/lookup.cc | 2 +- lily/ly-symbols.cc | 1 + lily/lyric-engraver.cc | 6 +- lily/melisma-engraver.cc | 10 +- lily/moment.cc | 69 ++ lily/music-iterator.cc | 10 +- lily/music-output-def.cc | 8 +- lily/my-lily-lexer.cc | 4 +- lily/my-lily-parser.cc | 1 + lily/note-heads-engraver.cc | 21 +- lily/note-performer.cc | 6 +- lily/paper-def.cc | 2 +- lily/paper-outputter.cc | 2 +- lily/paper-score.cc | 3 + lily/paper-stream.cc | 2 +- lily/parser.yy | 202 ++-- lily/property-inspect.cc | 27 + lily/protected-scm.cc | 19 +- lily/repeat-engraver.cc | 10 +- lily/rest-engraver.cc | 7 +- lily/rhythmic-column-engraver.cc | 20 +- lily/scm-hash.cc | 93 ++ lily/scope.cc | 7 +- lily/score-element.cc | 47 +- lily/score-engraver.cc | 5 +- lily/score.cc | 5 +- lily/scores.cc | 4 +- lily/script-engraver.cc | 27 +- lily/separating-line-group-engraver.cc | 4 +- lily/simultaneous-music-iterator.cc | 2 +- lily/slur-engraver.cc | 27 +- lily/slur.cc | 8 +- lily/staff-margin-engraver.cc | 11 +- lily/staff-performer.cc | 18 +- lily/staff-switching-translator.cc | 100 -- lily/staff-sym-engraver.cc | 12 +- lily/stem-engraver.cc | 39 +- lily/stem-info.cc | 13 +- lily/stem.cc | 3 +- lily/text-engraver.cc | 20 +- lily/tie-engraver.cc | 119 +-- lily/time-signature-engraver.cc | 6 +- lily/time-signature.cc | 2 +- lily/timing-engraver.cc | 13 +- lily/timing-translator.cc | 13 +- lily/translation-property.cc | 6 +- lily/translator-group.cc | 24 +- lily/translator.cc | 4 +- lily/tuplet-engraver.cc | 14 +- lily/tuplet-spanner.cc | 4 + lily/unfolded-repeat-iterator.cc | 14 +- lily/vertical-align-engraver.cc | 14 +- ly/accordion-defs.ly | 2 +- ly/auto-beam-settings.ly | 68 +- ly/declarations.ly | 4 +- ly/engraver.ly | 49 +- ly/nederlands.ly | 9 +- ly/params.ly | 2 +- ly/property.ly | 80 +- ly/script.ly | 5 +- make/lilypond.spec.in | 5 +- make/mutopia-targets.make | 4 +- make/out/lilypond.lsm | 8 +- make/out/lilypond.spec | 9 +- .../Solo-Cello-Suites/allemande-cello.ly | 1 - po/GNUmakefile | 1 - scm/lily.scm | 3 + scripts/mudela-book.py | 2 +- stepmake/bin/package-diff.py | 32 +- stepmake/bin/release.py | 7 +- stepmake/stepmake/documentation-targets.make | 6 +- stepmake/stepmake/documentation-vars.make | 17 - stepmake/stepmake/generic-targets.make | 6 +- stepmake/stepmake/metapost-rules.make | 2 +- stepmake/stepmake/pod-vars.make | 3 + stepmake/stepmake/texinfo-rules.make | 1 + stepmake/stepmake/texinfo-targets.make | 2 + stepmake/stepmake/texinfo-vars.make | 4 +- stepmake/stepmake/yodl-vars.make | 6 + .../stepmake/yolily-toplevel-targets.make | 2 +- tex/titledefs.tex | 10 +- 179 files changed, 3067 insertions(+), 1831 deletions(-) create mode 100644 Documentation/misc/CHANGES-1.2 delete mode 100644 Documentation/misc/NEWS-1.2~ rename Documentation/pictures/{lelie_icon.xpm => lelie-icon.xpm} (100%) create mode 100644 Documentation/pictures/lelie-logo.xpm delete mode 100644 Documentation/pictures/lelie_logo.xpm create mode 100644 Documentation/programmer/1086342053.tex rename Documentation/{metadoc => programmer}/GNUmakefile (100%) rename Documentation/{metadoc => programmer}/feta20.sty (100%) rename Documentation/{metadoc => programmer}/fonts.doc (100%) rename Documentation/{metadoc => programmer}/hacking.texi (95%) rename Documentation/{metadoc => programmer}/lilypond-overview.doc (100%) rename Documentation/{metadoc => programmer}/musicnotes.sty (100%) rename Documentation/{metadoc => programmer}/regression-test.tely (99%) rename input/test/{beam-interstaff.ly => beam-cross-staff.ly} (100%) create mode 100644 input/test/embedded-scm.ly create mode 100644 input/test/no-stem-extend.fly rename input/test/{slur-interstaff.ly => slur-cross-staff.ly} (100%) create mode 100644 input/test/uniform-breaking.ly delete mode 100644 lib/include/moment.hh delete mode 100644 lib/moment.cc create mode 100644 lily/include/ly-smobs.icc create mode 100644 lily/include/moment.hh create mode 100644 lily/include/property-inspect.hh create mode 100644 lily/include/scm-hash.hh create mode 100644 lily/include/smobs.hh create mode 100644 lily/moment.cc create mode 100644 lily/property-inspect.cc create mode 100644 lily/scm-hash.cc delete mode 100644 lily/staff-switching-translator.cc create mode 100644 stepmake/stepmake/pod-vars.make create mode 100644 stepmake/stepmake/yodl-vars.make diff --git a/CHANGES b/CHANGES index 604f59c4aa..661f51cdb5 100644 --- a/CHANGES +++ b/CHANGES @@ -1,257 +1,16 @@ -pl 15 (Oct 18) +1.3.0: -14.jcn1 - - Kludge for accented chars (thanks, Mats) - - bf: don't fail on error in doco package - - doco package: noarch - - bf: standchen: mutopia prep +pl 15.hwn2 + - loads of bfs. -14.hwn1 - - move some misc stuff into Documentation/misc/ - - cleanups: slur & beam. - - junked Encompass_info - - Smobs -- simplifies sc_elt memory management - - Timing_engraver collects bar reqs - - unfold all if doing MIDI. - - bfs: do something sensible if it doesn't fit. - - penalties for break stuff supported. +pl x.jcn3 + - another workaround: reset buffer state for scm_ftell () + - workaround for broken scm_ftell () -******* -13.jcn2,3 - - mutopia/J.S.Bach/Petites-Preludes: bf's and mutopia preraration - - separate documentation package +pl 15.hwn1 + - \properties are now SCM s, junk Scalar type + - use SCM for strings in parser. + - Moment derived from Rational. Moment may be smobified. -13.hwn2 - - mutopia: scs2, horn-concerto-3 - - junked Line_spacer baseclass. - - removed gourlay complications - - use force iso. energy for minimisation. Add uniformity term -to demerits. - -13.jcn1 - - bf: mudela-book - -******* -12.jcn1 - - auto-knees, input/test/auto-knee.ly - -pl 12.rrr2 - - voltaSpannerDuration may be a rational - - .ly files corrected, Voice.dynamicDir to Voice.dynamicDirection - -pl 12.rrr1 - - key (K:) with clef, bug fix for abc2ly - - voltaSpannerDuration code added to lilypond - -pl 12.hwn1 - - junked wordwrap - - bf: use position (not pitch) for autochange - - mudela-book fixes: --dependencies, --dep-prefix - - mudela.tely more updates. Now absorbed LilyPond manpage. - - BUGS now in INSTALL.texi - -******* -pl 11.uu1 - - changed debug init code. - -pl 11.jcn2 - - bf: LDFLAGS=foo CFLAGS=bar ./configure - - bf: configure (--disable-printing = default) -DNPRINT - - bf: mf-to-xpms / make -C mf xpms; feta-accordion is broken, - see mf/README - -pl 11.jcn1 - - gnossiene with new \autochange - -pl 11.jbr1 - - Tried to get rid of path and switch dependencies in mf - build process. - -pl 11.hwn1 - - doco reorganisation: folded glossary and tutorial into manual. - - move mudela-book-doc to texinfo - - feta.tex to mf/ - - release.py, package-diff.py now dump into out/ - - -**** -pl 10.hwn1 - - Auto_change_music, Auto_change_iterator: auto staff -switching. 2nd try. See input/test/auto-change.ly - -pl 10.uu1 - - doc restructure: hacking.texi - - make & install .pfas - - updates: faq.texi - - rpm fixes. - - Windows fixes (9.jbr) - -****** -pl 9.rrr1 - - abc2ly bug fixes and extensions - - volta spanner given height to avoid collisions - -pl 9.jcn2 - - 2.95 fixes - - input/test/different-time-signatures.ly (wasn't this in refman?) - -pl 9.hwn1 - - fixes for mi2mu - - bf: staff-side with empty parent. - - bf: -Hara_kiri_vertical_group_spanner::do_substitute_element_pointer has to -call Axis_group_spanner::do_substitute_element_pointer. Fixes -harakiri & barline problem. - - junk: Spring_spacer, Ineq_constrained_qp, Mixed_qp, -Active_constraints, Inactive_iter, Matrix, Vector, -Choleski_decomposition, Full_storage - - -pl 9.jcn1 - - included last Localisation.texi - - set-lily: de catalog too - -******* -pl 8.hwn1 - - Erwin Dieterich: german translation. - - dependency helper funcs simplified. - - junk breaking stats. - - cleanups: Line_of_score also is X_AXIS group. Score_columns -are put into Line_of_score of score. - -pl 8.jcn2 - - scripts/mudela-book.py: use hash of full .ly contents (by default) - - bf: footify html doc upon creation too - -pl 8.jcn1 - - Documentation/Localisation.texi: still some issues - - Uniformised locale strings - - marked some errors/warnings without _/_f markings - - added programming_warning (): not to be localised warnings - (none identified as yet) - - Update of po/nl.po - -******* -pl 7.hwn1 - - website fixes. - - spacer cleanups - - Simple_spacer: a simpler constraint solver. Enabled by default. -pl 7.jcn1 - - fixes to nl.po - -******** - -pl 6.uu1 - - website fixes. - -******* -pl 5.hwn1 - - more .texi; yodl completely removed. - - rm'd several doc stuff: engraving.yo, gnu-page.yo, translated blurbs (leave it to translation project) - - sm: help2man-*make - - mcgrain bib entry. - - debian updates. - - gcc 2.95 const fixes. (hopefully) - - sm: rm'd Documentation/tex/ directory. everything in stepmake/INSTALL.texi - -pl 5.jcn1 - - lily.scm: don't use regex-substitute/global - - website/doco fixes - - bf: package-diff.py - -************ - -pl 4.hwn1 - - bf: repeats. - - bf: mmrests - - bf: simpler guile detection. - - use texinfo for reference manual. - - inline lily.ps from lilypond. - - texi for doco: converted directory Documentation/tex/ - - -pl 3.hwn1 - - mudela-book tweaks for surviving texinfo - - include feta command seqs. in .tex - - guile 1.3.2 fixes. - - include config.h directly. - - bf: mudela-book. Now linear in size of document. - - scriptHorizontal property; more or less works. - - changes in Graphical_element, Graphical_axis_group -offset removed from public interface, now use relative_coordinate (). -extent () is given relative to this. - - removed Rhythmic_head::dots_i_ - - bf: Rhythmic_head::do_substitute_element_pointer () - - Direct access to dim_cache_ replaced by methods in -Graphical_element. - -********** - - -pl 2.mk1 - - bf, tie.cc: handle postbreak left align correctly -pl 2.lec1 - - abc2ly fixes. - -pl 2.hwn1 - - rewrite of mudela-book. Now uses chunks, and you can put -\input, \include and \mudelagraphics in verbatim sections. - - -pl 2.jcn2 - - bf: auto-beamer: don't junk beam if manual beam shows up - -pl 2.jcn1 - - add-html-footer.py, ls-latex.py .tely updates and fixes - - tely (texinfo-lily) rules and test Documentation/metadoc/foo.tely - -************* - -pl 1.uu2 - - complete rewrite of mudela-book. Much cleaner now. -Support for texinfo. - - convert-mudela now per file, add \version if not present. - -pl 1.uu1.jcn1 - - internationalization fixes for getopt-long help - -pl 1.uu1 - - rewrite --help messages for help2man: - * lilypond - * mi2mu - * mudela-book - * convert-mudela - - cleanup: mf-to-table.py - - Getopt_long: support for --help msg. - -pl 1.mb1 - - bf, scalar.cc: ".3" now detected as numerical - -******** - -pl 0.uu1 - - refman updates by Werner & Mats - - now use ChangeLog for changes. - -pl 0.jcn2 - - po fixes - -pl 0.jcn1 - - gcc-2.95 nitpicks - - added pointers to mailing lists in toplevel docs - -0.mb2 - - configure: more robust detection of Guile - - Midi_note_off: revert to fixed note-off velocity. Fixes - problem with notes that never stop. - - Decreased breakable_column_space_strength - - Added a few TODO - - bf: "harmonic" and "cross" note heads also for half and - whole notes. - - linewidth and textheight set independent of the font size. - - bf, titledefs.tex: opus and piece are not repeated for - every piece unless they are explicitly set again. - -0.mb1 - - Changed dynamicDir to dynamicDirection. - - refman and tutorial corrections. +pl 15.jcn4 + - direct #... to scm parser (Thanks to Gary Houston) diff --git a/Documentation/GNUmakefile b/Documentation/GNUmakefile index 1d6e86f54e..b3fda3a821 100644 --- a/Documentation/GNUmakefile +++ b/Documentation/GNUmakefile @@ -1,10 +1,10 @@ depth = .. NAME = documentation -SUBDIRS= user metadoc bibliography pictures topdocs ntweb misc +SUBDIRS= user programmer bibliography pictures topdocs ntweb misc STEPMAKE_TEMPLATES=documentation texinfo -README_TOP_FILES=NEWS DEDICATION CHANGES +README_TOP_FILES=NEWS DEDICATION CHANGES TODO EXTRA_DIST_FILES = include $(depth)/make/stepmake.make diff --git a/Documentation/bibliography/GNUmakefile b/Documentation/bibliography/GNUmakefile index 899251880a..ca0c7ae4a4 100644 --- a/Documentation/bibliography/GNUmakefile +++ b/Documentation/bibliography/GNUmakefile @@ -2,23 +2,9 @@ depth=../.. -DATA_FILES = $(wildcard *.data) -datafiles = $(addprefix $(outdir)/,$(DATA_FILES:.data=.html)) -TEX_FILES = $(wildcard *.tex) -DOC_FILES = $(wildcard *.doc) -DVI_FILES = $(addprefix $(outdir)/,$(DOC_FILES:.doc=.dvi) $(YO_FILES:.yo=.dvi)) OUT_BIB_FILES = $(addprefix $(outdir)/, $(BIB_FILES)) - -# just include me -YO_URG_FILES = $(wildcard *.yo-urg) - -OUTTEX_FILES = $(addprefix $(outdir)/, $(TEX_FILES)) -OUTDOC_FILES = $(addprefix $(outdir)/, $(DOC_FILES)) -EL_FILES = $(wildcard *.el) BIB_FILES= $(wildcard *.bib) -EXTRA_DIST_FILES= $(BIB_FILES) $(DOC_FILES) $(DATA_FILES) $(EL_FILES) $(YO_URG_FILES) $(TEX_FILES) $(wildcard *.sty) -HTML_FILES = $(addprefix $(outdir)/, $(YO_FILES:.yo=.html)) -PS_FILES = $(DVI_FILES:.dvi=.ps) +EXTRA_DIST_FILES= $(BIB_FILES) STEPMAKE_TEMPLATES=tex documentation LOCALSTEPMAKE_TEMPLATES=lilypond mudela @@ -26,12 +12,7 @@ LOCALSTEPMAKE_TEMPLATES=lilypond mudela export BIBINPUTS:=$(shell pwd)//$(PATHSEP)$(BIBINPUTS) include $(depth)/make/stepmake.make - - - - - -dvi: $(OUT_BIB_FILES) $(DVI_FILES) +dvi: $(DVI_FILES) $(OUT_BIB_FILES) ps: $(PS_FILES) @@ -41,18 +22,7 @@ default: GENHTMLS = engraving colorado computer-notation OUTGENHTMLS = $(addprefix $(outdir)/, $(GENHTMLS:%=%.html)) -#urg should generalise and move Lilypond -> StepMake -# URG. Lilypond specific. Move out. -$(outdir)/%.html: %.data $(depth)/VERSION - $(PYTHON) $(step-bindir)/table-to-html.py --columns=7 --linesep=' ' -o $@ $< - $(PYTHON) $(step-bindir)/add-html-footer.py $@ - -$(outdir)/%.tex: %.data $(depth)/VERSION - $(PYTHON) $(step-bindir)/table-to-html.py --columns=7 --linesep=' ' -o $@ --latex $< - - - -local-WWW: $(HTML_FILES) $(OUTTEX_FILES:.tex=.ps.gz) $(OUTYO_FILES:.yo=.latex) $(OUTYO_FILES:.yo=.ps.gz) $(addprefix $(outdir)/, $(BIB_FILES:.bib=.html)) $(datafiles) +local-WWW: $(addprefix $(outdir)/, $(BIB_FILES:.bib=.html)) $(PYTHON) $(step-bindir)/ls-latex.py --title 'References on Music Notation' \ $(YO_FILES) $(OUTYO_FILES:.yo=.latex) $(BIB_FILES) $(DOC_FILES) $(TEX_FILES) \ | sed "s!$(outdir)/!!g" > $(outdir)/index.html @@ -63,12 +33,7 @@ $(outdir)/%.bib: %.bib # ignore result since bib2html is nonstandard. Errors would halt the RPM build.j $(outdir)/%.html: %.bib -bib2html $< $@ +# $(footify) $@ -# Yeah right: -# make -k out/mudela.dvi => cp -f out/vocabulary.tex out/mudela.dvi - -#out/%: $(outdir)/% -# cp -f $< $@ - -locamlclean: +localclean: rm -f fonts.aux fonts.log feta*.tfm feta*.*pk diff --git a/Documentation/faq.texi b/Documentation/faq.texi index da64d5cc52..b8dbb30787 100644 --- a/Documentation/faq.texi +++ b/Documentation/faq.texi @@ -77,7 +77,7 @@ yourself: @subsubsection Some of your neat scripts fail, what directories do you use: -[This only applies if you don't do @code{make install}, and develop out +[This only applies if you don't do @code{make install}, and run out of the source directory] I have a directory which contains all our development projects @@ -100,16 +100,13 @@ which looks like @file{/usr/} @end example - - - -~/usr/src/bin is in the PATH, and contains symbolic links to the -compiled executables. +@file{~/usr/src/bin/} is in the variable PATH, and contains symbolic +links to the compiled executables. @subsubsection Is there an emacs mode? Yes. It is included with the source archive as mudela-mode.el. If -you have an rpm it is in /usr/doc/lilypond-X/. You have to install it +you have an rpm it is in @file{/usr/doc/lilypond-X/}. You have to install it yourself. @subsubsection How do I create the @file{.tfm} files? @@ -124,12 +121,12 @@ be used by LilyPond, not by any other programs. @subsubsection Why is the documentation/website/etc. so lousy? -LilyPond development is moving quite fast, documentation will often -lag a bit behind. We must always make a choice between writing more -doco, writing more code and answering email. +LilyPond development is moving quite fast, documentation will often lag +a bit behind. We must always make a choice between writing more +documentation, writing HTML, writing more code and answering email. -If you think you can make a correction, or devised a solution that -should be documented, please do so and send in a patch. +If you think you can make a correction, or devised a solution that +should be documented, please write it up, and us a diff. @node Language- mudela, Do you support -, Documentation, FAQ - GNU LilyPond FAQs @section Language: mudela @@ -195,20 +192,20 @@ notation. We would welcome anyone who could give this a try. @subsubsection Do you support TAB notation? -No. The same as for the previous subsubsection goes, but TAB is a lot -more work than diagrams (TAB needs modification of Parser, Lexer, -Staff, Notehead, Stem code and all the code that creates these graphic -elements.) +No. The same as for the previous subsubsection goes. + @subsubsection Do you support multiple staff-sizes? -Yes. At this time you can choose between 11, 13, 16, 19, 20, 23 and -20 pt staff-size. Use the staffLineLeading property for setting the -size of the staff, and fontSize for setting the size of the glyphs. +Yes. At this time you can choose between 11, 13, 16, 19, 20, 23 and 20 +pt staff-size. Use the @code{staffLineLeading} property for setting the +size of the staff, and @code{fontSize} for setting the size of the +glyphs. @subsubsection Do you support Gregorian chant notation? -No. Go ahead. +No. + @subsubsection Do you support grace notes? @@ -318,38 +315,34 @@ to get a bit less frivolous tagging. @subsubsection Could you implement feature XXXX? It is really easy, just extend the syntax to allow YYYY! -If it is reasonable, I'll add XXXX to the TODO list. In general -finding a cute syntax (such as YYYY) isn't very hard. The complicated -issue how to adapt the internals to do XXXX. The parser is really a -simple front end to the complicated internals. +In general finding a cute syntax (such as YYYY) isn't very hard. The +complicated issue how to adapt the internals to do XXXX. The parser is +really a simple front end to the complicated internals. @subsubsection Can I join in on LilyPond development? How do I do this? -LilyPond development is open for anyone who wants to join. We do -frequent releases, you are welcome to send in a patch or do suggestions. -Join the gnu-music-discuss mailing list to participate. +Yes, we do frequent releases, you are welcome to send in a patch or do +suggestions. Join the list @email{gnu-music-discuss@@gnu.org} to +participate. -@subsubsection I want to implement XXXX! Should I do this? - -Yes. - -But since there might be better ways of doing XXXX, so it's a good thing to -ask about this before you start hacking. If you want to keep in touch -with current developments, you should subscribe to the mailing list - @subsubsection Is there a GUI frontend? Should I start building one? -LilyPond currently has no graphical interface. The authors seriously -doubt if a simple-minded approach (dragging and dropping notes) is any -easier or quicker to use than mudela. But for composing a graphical -environment probably is indispensable. +LilyPond currently has no graphical interface. We (LilyPond authors) +don't feel the need to write a GUI, but several others do: Matthew Hiller has extended Midiscore and Koobase to handle mudela. -Check out @uref{http://zoo.cs.yale.edu/~meh25/}. +Check out @uref{http://zoo.cs.yale.edu/~meh25/}. He is now working on +`Denemo', a GTK based notation program (which is still being developed). -If you want to work on this, please send e-mail to the mailing list -@email{gnu-music-discuss@@gnu.org}. +Federico Mena-Quintero and Elliot Lee of RedHat Advanced Development +labs have plans to write a GNOME based Music notation program. However, +there is no code, only plans. + +Chris Cannam is working a rewrite of Rosegarden. The new design should +be more modular, and could conceivably be used to output +mudela. However, the not much seems to have happened the past year. See +@uref{http://www.all-day-breakfast.com/rosegarden/development.html}. @subsubsection I want to implement XXXX! How should I do this? @@ -360,32 +353,20 @@ Your best bet of getting us to include code, is to present it as a Please use the diff command to generate a patch, and don't send complete files, even if the diff is larger than the whole file. -Don't forget to put your name and e-mail address -in the @file{AUTHORS.pod} file, or you won't get credits :-] +Don't forget to put your name and e-mail address in the file +@file{Documentation/topdocs/AUTHORS.texi}, or you won't get credits +:-) @subsubsection Your make system does not adhere to GNU coding standards, could you please fix it? No. We have evaluated the standard GNU combination for compiling -programs (autoconf, automake, libtool) and found to be inadequate in -several respects. More detailed argumentation is included with -LilyPond's generic make package @code{StepMake} -(see @file{stepmake-x.x.x/Documentation/automake.urgh}) - -LilyPond already compiles into a different directory ((the different -directory is called out/, there is one in every source directory). -make distclean essentially reduces to @file{rm -f out/*} in every directory +programs (autoconf, automake, libtool) and found to be inadequate for +our needs. @subsubsection gdb crashes when I debug! -Upgrade to 4.17. - -@subsubsection Why do I need g++ >= 2.8 / EGCS-1.1 ? - -Supporting more compilers than EGCS/G++ 2.8 is unlikely to make -LilyPond run on more platforms. It would give us an enormous headache -in detecting and catering for every variant of every compiler: not -having to support other compilers saves us a @emph{lot} of trouble. +Upgrade/downgrade to 4.17. @node Running, Copyright, Development, FAQ - GNU LilyPond FAQs @section Running @@ -466,24 +447,6 @@ output, use TeX and @code{dvips}. The beams and slurs are done in PostScript. XDvi doesn't show PostScript in the magnifying glass. Complain to the XDvi maintainers. -@subsubsection I don't get midi-output, even if I use @strong{-m}! - -Your \score should include a \midi block, eg. -@example - - \score @{ - \melodic @{ c4 c g g @} - \paper @{@} - \midi @{ - output = "myfile.midi"; - \tempo 4=70; - @} - @} - -@end example - -The @strong{-m} option was added to LilyPond to suppress paper output, -because processing the \paper block is so slow. @subsubsection A lot of musical stuff doesn't make it to the MIDI file, eg. dynamics, articulation, etc. diff --git a/Documentation/footer.html.in b/Documentation/footer.html.in index 4b99be2c58..50bcaf5b2d 100644 --- a/Documentation/footer.html.in +++ b/Documentation/footer.html.in @@ -11,7 +11,7 @@ footer substitutions: * ENV:WEBMASTER, * ENV:WEBMASTER -> +-->
Go back to index of LilyPond. @@ -23,7 +23,7 @@ Please send GNU LilyPond questions and comments to gnu-music-discuss@gnu.org.

- Please send comments on these web pages to %s diff --git a/Documentation/index.texi b/Documentation/index.texi index 31afd58918..0187a0a409 100644 --- a/Documentation/index.texi +++ b/Documentation/index.texi @@ -21,13 +21,14 @@ @item @uref{faq.html,Frequently asked questions}, with answers @item @uref{programs.html,`Manual pages'} @item @uref{../user/out-www/index.html,User documentation} -@item @uref{../metadoc/out-www/index.html,Hacker documentation} -@item @uref{../bibliography/out-www/,Bibliography} +@item @uref{../programmer/out-www/index.html,Programmer's documentation} +@item @uref{../bibliography/out-www/index.html,Bibliography} @item @uref{../misc/out-www/index.html,Miscellaneous texts} @end itemize -@unnumberedsubsec{Status} +@unnumberedsubsec Status + @itemize @item @uref{TODO.txt, Thing to do} @item @uref{CHANGES.txt, Things recently done} @@ -43,7 +44,8 @@ @unnumberedsubsec Logo: @itemize @item @uref{../pictures/out-www/lelieblond.png, logo} in large size -@item @uref{../pictures/out-www/lelie_logo.png, logo} in medium size +@item @uref{../pictures/out-www/lelie-logo.png, logo} in medium size +@item @uref{../pictures/out-www/lelie-icon.png, logo} in small size @end itemize @bye diff --git a/Documentation/misc/CHANGES-1.2 b/Documentation/misc/CHANGES-1.2 new file mode 100644 index 0000000000..7bb36d49aa --- /dev/null +++ b/Documentation/misc/CHANGES-1.2 @@ -0,0 +1,287 @@ + +pl 15.hwn1 + - reverted MIDI unfold patches. + - bf: cross staff beam, cross staff slur (2x) + - doco updates: + * metadoc/ -> programmer/ , + * FAQ + * hacking + * index with logo + +pl 15.jcn3 + - bf: smob fix + - mutopia/doc target 'local-web': + shorthand for 'CONFIGSUFFIX=www local-WWW' + +pl 15.lu2 + - bf: close comments in website footer + - error messages for release didn't make it into .lu1? +pl 15.jcn2 + - small website fixes +pl 15.jcn1 + - bfs: initialise members of Column-x-positions and Break_node + - bf: Documentation/misc: don't include backups + - bf: .gdbinit +pl 15.lu1 + - error messages for failing diff/release + - \property noStemExtend: don't extend normal or beamed stems to + middle staff line: input/test/no-stem-extend.fly + +****** +pl 15 (Oct 18) + +14.jcn1 + - Kludge for accented chars (thanks, Mats) + - bf: don't fail on error in doco package + - doco package: noarch + - bf: standchen: mutopia prep + +14.hwn1 + - move some misc stuff into Documentation/misc/ + - cleanups: slur & beam. + - junked Encompass_info + - Smobs -- simplifies sc_elt memory management + - Timing_engraver collects bar reqs + - unfold all if doing MIDI. + - bfs: do something sensible if it doesn't fit. + - penalties for break stuff supported. + +******* +13.jcn2,3 + - mutopia/J.S.Bach/Petites-Preludes: bf's and mutopia preraration + - separate documentation package + +13.hwn2 + - mutopia: scs2, horn-concerto-3 + - junked Line_spacer baseclass. + - removed gourlay complications + - use force iso. energy for minimisation. Add uniformity term +to demerits. + +13.jcn1 + - bf: mudela-book + +******* +12.jcn1 + - auto-knees, input/test/auto-knee.ly + +pl 12.rrr2 + - voltaSpannerDuration may be a rational + - .ly files corrected, Voice.dynamicDir to Voice.dynamicDirection + +pl 12.rrr1 + - key (K:) with clef, bug fix for abc2ly + - voltaSpannerDuration code added to lilypond + +pl 12.hwn1 + - junked wordwrap + - bf: use position (not pitch) for autochange + - mudela-book fixes: --dependencies, --dep-prefix + - mudela.tely more updates. Now absorbed LilyPond manpage. + - BUGS now in INSTALL.texi + +******* +pl 11.uu1 + - changed debug init code. + +pl 11.jcn2 + - bf: LDFLAGS=foo CFLAGS=bar ./configure + - bf: configure (--disable-printing = default) -DNPRINT + - bf: mf-to-xpms / make -C mf xpms; feta-accordion is broken, + see mf/README + +pl 11.jcn1 + - gnossiene with new \autochange + +pl 11.jbr1 + - Tried to get rid of path and switch dependencies in mf + build process. + +pl 11.hwn1 + - doco reorganisation: folded glossary and tutorial into manual. + - move mudela-book-doc to texinfo + - feta.tex to mf/ + - release.py, package-diff.py now dump into out/ + + +**** +pl 10.hwn1 + - Auto_change_music, Auto_change_iterator: auto staff +switching. 2nd try. See input/test/auto-change.ly + +pl 10.uu1 + - doc restructure: hacking.texi + - make & install .pfas + - updates: faq.texi + - rpm fixes. + - Windows fixes (9.jbr) + +****** +pl 9.rrr1 + - abc2ly bug fixes and extensions + - volta spanner given height to avoid collisions + +pl 9.jcn2 + - 2.95 fixes + - input/test/different-time-signatures.ly (wasn't this in refman?) + +pl 9.hwn1 + - fixes for mi2mu + - bf: staff-side with empty parent. + - bf: +Hara_kiri_vertical_group_spanner::do_substitute_element_pointer has to +call Axis_group_spanner::do_substitute_element_pointer. Fixes +harakiri & barline problem. + - junk: Spring_spacer, Ineq_constrained_qp, Mixed_qp, +Active_constraints, Inactive_iter, Matrix, Vector, +Choleski_decomposition, Full_storage + + +pl 9.jcn1 + - included last Localisation.texi + - set-lily: de catalog too + +******* +pl 8.hwn1 + - Erwin Dieterich: german translation. + - dependency helper funcs simplified. + - junk breaking stats. + - cleanups: Line_of_score also is X_AXIS group. Score_columns +are put into Line_of_score of score. + +pl 8.jcn2 + - scripts/mudela-book.py: use hash of full .ly contents (by default) + - bf: footify html doc upon creation too + +pl 8.jcn1 + - Documentation/Localisation.texi: still some issues + - Uniformised locale strings + - marked some errors/warnings without _/_f markings + - added programming_warning (): not to be localised warnings + (none identified as yet) + - Update of po/nl.po + +******* +pl 7.hwn1 + - website fixes. + - spacer cleanups + - Simple_spacer: a simpler constraint solver. Enabled by default. +pl 7.jcn1 + - fixes to nl.po + +******** + +pl 6.uu1 + - website fixes. + +******* +pl 5.hwn1 + - more .texi; yodl completely removed. + - rm'd several doc stuff: engraving.yo, gnu-page.yo, translated blurbs (leave it to translation project) + - sm: help2man-*make + - mcgrain bib entry. + - debian updates. + - gcc 2.95 const fixes. (hopefully) + - sm: rm'd Documentation/tex/ directory. everything in stepmake/INSTALL.texi + +pl 5.jcn1 + - lily.scm: don't use regex-substitute/global + - website/doco fixes + - bf: package-diff.py + +************ + +pl 4.hwn1 + - bf: repeats. + - bf: mmrests + - bf: simpler guile detection. + - use texinfo for reference manual. + - inline lily.ps from lilypond. + - texi for doco: converted directory Documentation/tex/ + + +pl 3.hwn1 + - mudela-book tweaks for surviving texinfo + - include feta command seqs. in .tex + - guile 1.3.2 fixes. + - include config.h directly. + - bf: mudela-book. Now linear in size of document. + - scriptHorizontal property; more or less works. + - changes in Graphical_element, Graphical_axis_group +offset removed from public interface, now use relative_coordinate (). +extent () is given relative to this. + - removed Rhythmic_head::dots_i_ + - bf: Rhythmic_head::do_substitute_element_pointer () + - Direct access to dim_cache_ replaced by methods in +Graphical_element. + +********** + + +pl 2.mk1 + - bf, tie.cc: handle postbreak left align correctly +pl 2.lec1 + - abc2ly fixes. + +pl 2.hwn1 + - rewrite of mudela-book. Now uses chunks, and you can put +\input, \include and \mudelagraphics in verbatim sections. + + +pl 2.jcn2 + - bf: auto-beamer: don't junk beam if manual beam shows up + +pl 2.jcn1 + - add-html-footer.py, ls-latex.py .tely updates and fixes + - tely (texinfo-lily) rules and test Documentation/metadoc/foo.tely + +************* + +pl 1.uu2 + - complete rewrite of mudela-book. Much cleaner now. +Support for texinfo. + - convert-mudela now per file, add \version if not present. + +pl 1.uu1.jcn1 + - internationalization fixes for getopt-long help + +pl 1.uu1 + - rewrite --help messages for help2man: + * lilypond + * mi2mu + * mudela-book + * convert-mudela + - cleanup: mf-to-table.py + - Getopt_long: support for --help msg. + +pl 1.mb1 + - bf, scalar.cc: ".3" now detected as numerical + +******** + +pl 0.uu1 + - refman updates by Werner & Mats + - now use ChangeLog for changes. + +pl 0.jcn2 + - po fixes + +pl 0.jcn1 + - gcc-2.95 nitpicks + - added pointers to mailing lists in toplevel docs + +0.mb2 + - configure: more robust detection of Guile + - Midi_note_off: revert to fixed note-off velocity. Fixes + problem with notes that never stop. + - Decreased breakable_column_space_strength + - Added a few TODO + - bf: "harmonic" and "cross" note heads also for half and + whole notes. + - linewidth and textheight set independent of the font size. + - bf, titledefs.tex: opus and piece are not repeated for + every piece unless they are explicitly set again. + +0.mb1 + - Changed dynamicDir to dynamicDirection. + - refman and tutorial corrections. diff --git a/Documentation/misc/GNUmakefile b/Documentation/misc/GNUmakefile index 55a1efe7ed..d9b79c0e6e 100644 --- a/Documentation/misc/GNUmakefile +++ b/Documentation/misc/GNUmakefile @@ -4,10 +4,9 @@ NAME = documentation STEPMAKE_TEMPLATES=documentation texinfo -TEXTS =AIMS $(wildcard CHANGES-*) $(wildcard ANNOUNCE-*) $(wildcard NEWS-*) interview +TEXTS =AIMS $(wildcard CHANGES-*[0-9]) $(wildcard ANNOUNCE-*[0-9]) $(wildcard NEWS-*[0-9]) interview EXTRA_DIST_FILES = $(TEXTS) - include $(depth)/make/stepmake.make default: do-doc diff --git a/Documentation/misc/NEWS-1.2 b/Documentation/misc/NEWS-1.2 index d3499b3490..bc03e6e5a0 100644 --- a/Documentation/misc/NEWS-1.2 +++ b/Documentation/misc/NEWS-1.2 @@ -1,3 +1,12 @@ +WHAT'S NEW SINCE 1.2.0 + +* Much faster spacing engine. + +* Features: automatic staff switching + +* Documentation now all is in texinfo. + + WHAT'S NEW SINCE 1.0.17 * Large cleanups, enhanced design and GUILE integration for smaller diff --git a/Documentation/misc/NEWS-1.2~ b/Documentation/misc/NEWS-1.2~ deleted file mode 100644 index d3499b3490..0000000000 --- a/Documentation/misc/NEWS-1.2~ +++ /dev/null @@ -1,25 +0,0 @@ -WHAT'S NEW SINCE 1.0.17 - -* Large cleanups, enhanced design and GUILE integration for smaller - memory footprint and more flexible code. - -* Direct output to PostScript (optional), PDFTeX or as GUILE script - (default output still to plain TeX). - -* Convertors for ABC and MUP formats. - -* Font: now available as scalable PostScript. New glyphs: time - signature, more note heads. - -* Enhanced input: semi-automatic beaming, (nested) tuplets, (nested) - repeats, chordnames, automatic Lyrics durations. - -* Grace notes, volta brackets, multiple styles for note heads and - time signatures, breathing signs, lyric extenders, cross staff - beaming and slurring. - -* --safe option for the paranoid. - -* More elegant spacing. Text is spaced exactly. - -* Lots of bugfixes. diff --git a/Documentation/pictures/lelie_icon.xpm b/Documentation/pictures/lelie-icon.xpm similarity index 100% rename from Documentation/pictures/lelie_icon.xpm rename to Documentation/pictures/lelie-icon.xpm diff --git a/Documentation/pictures/lelie-logo.xpm b/Documentation/pictures/lelie-logo.xpm new file mode 100644 index 0000000000..15408fb2ef --- /dev/null +++ b/Documentation/pictures/lelie-logo.xpm @@ -0,0 +1,215 @@ +/* XPM */ +static char *noname[] = { +/* width height ncolors chars_per_pixel */ +"100 143 65 1", +/* colors */ +" c #ADADAD", +". c #A5A5A5", +"X c #9D9D9D", +"o c #959595", +"O c #8D8D8D", +"+ c #858585", +"@ c #7D7D7D", +"# c #757575", +"$ c #6D6D6D", +"% c #656565", +"& c #5D5D5D", +"* c #555555", +"= c #4D4D4D", +"- c #FCFCFC", +"; c #FAFAFA", +": c #454545", +"> c #F2F2F2", +", c #3D3D3D", +"< c #EAEAEA", +"1 c #353535", +"2 c #E2E2E2", +"3 c #2D2D2D", +"4 c #DADADA", +"5 c #252525", +"6 c #D2D2D2", +"7 c #1D1D1D", +"8 c #CACACA", +"9 c #151515", +"0 c #C2C2C2", +"q c #0D0D0D", +"w c #BABABA", +"e c #050505", +"r c #B2B2B2", +"t c #AAAAAA", +"y c #A2A2A2", +"u c #9A9A9A", +"i c #929292", +"p c #8A8A8A", +"a c #828282", +"s c #7A7A7A", +"d c #727272", +"f c #6A6A6A", +"g c #626262", +"h c #5A5A5A", +"j c #525252", +"k c #FDFDFD", +"l c #4A4A4A", +"z c #F5F5F5", +"x c #424242", +"c c #EDEDED", +"v c #3A3A3A", +"b c #E5E5E5", +"n c #323232", +"m c #DDDDDD", +"M c #2A2A2A", +"N c #D5D5D5", +"B c #222222", +"V c #CDCDCD", +"C c #1A1A1A", +"Z c #C5C5C5", +"A c #121212", +"S c #BDBDBD", +"D c #0A0A0A", +"F c #B5B5B5", +"G c #020202", +/* pixels */ +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkk;kkkkkk;kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkk;kkkkk;kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkk;kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkk;kkkk;kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk.lexGGj*9jkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkhkkkkkkkkwhs+kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk6 kkkkkkkkkkkVeCkkkkkkkkkkkkrsspkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkOkkkkkkkkkkkkkk2G2kkkkkkkkkdkkkkekkkkkkkkkkkkkkkk", +"k;kkkk;kkkk;kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk.Gkkkckkkkkkkkkkkk@kkkkkkkkskk:kkdokkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkk;kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkw2rkkkkkkkkkkkkkkkkk1kkkkkkkdkGykuk@kkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkskk*kkkkkkkkkkkkkkkkrZkkkkkkGGtkm k%kkkkkkkkkkkkkkk", +"kkk;kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkjkkk$kkkkkkkkkkkkkkkkk=kkkkkkwniw kk@kkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk&kkkk3kkkkkkkkkkkkkkkkw6kkkkkk>X6kk4rkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkakkkkk=kkkkkkkkkkkkkkkk=kkkw:vNkkkk$kkkkkkkkkkkkkkkk", +"kkkkkkkkkkk;kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk&k06kkkvckkkkkkkkkkkkkk+zkkqkkkkkk&kkkkkkkkkkkkkkkkk", +"kk;;kk;kkkkkkk;kk;kkkkkkkkkkkkkkkkkkkkkkkkkkkkkukkk+kkkk,kkkkkkkkkkkkkkk%kMkkkkk.ykkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkX8kky+kkkkk:kkkkkkkkkkkkkk$kGZk2Fwykkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkNikkkkk+mkkkknckkkkkkkkkkkkk@l*kZM@vGkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk4okkkkkkkkkkkkkGkkkkkkkkkkkkkZfikXkc$Ckkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkjkkkkkkkkkkkkkkGkkkkkkkkkkkkk9ry,>kktkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk% Zkkkkkkkkkkky.kkkkkkkkkkkXu6f$kkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkokpkknk*kh%kkkkkki4kkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkaikkkkkkkkkkkkkkkkkkkkkkk4rqZFskkk>kgk0>k%z44hk=kkkkkkk:kkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkk+ikkkkkkkkkkkkkkkkkkkkkkkkGhFFkkkk>Akskkvk*kxmZkkkkkkkkdkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkiikkkkkkkkkkkkkkkkkkkkkkk7D+0kkkk*FbNk,kkp.k*kkkkkkkkkzlkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkk>u.kkkkkkkkkkkkkkkkkkkkkkGGrF$;kkGkOkk7knkvkdkkkkkkkkkkzdkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkZoZkkkkkkkkkkkkkkkkkkkkkMM8$skk*zwkk:kkoNS@@kkkkkkkkkkkzMkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkSybkkkkkkkkkkkkkkkkkkkkfDO *kk=kwk>,kvk3kn>g$0kkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkku kkkkkkkkkkkkkkkkkkkV+G%uXkGkykk3kkfk+kjkkk*Mkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkO.kkkkkkkkkkkkkkk4o4k.G@&FS46;k4gkvkvk1gkkkkkG>kkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkiukkkkkkkkkkkkmSkSGG&GtrMFktkk9kk%kqkGckkkkkkGkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkcX kkkkkkkkkkukgGGG+;GMxZkOkkutkvk$k#xkkkkkkkk5kkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkNoVkkkkkkktjdGGsikkkGGVk+kmkBkkdkMkGhkkkkkkkkkjkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk X>kkyakk;;kyk7kkxkGkGykkkkkkkkkkkMkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkphk6k9Gqx1kkkkNSkkkkkSk,kk:k2skGmkkkkkkkkkkkb&kkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk+ukGG&=kkkkkkkkkkkkzakkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk.;G6i>kkkkkkkkkk+tkkjkh;kGpkkskkkkkkkkkkkkwrkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk6kG77n:VOk#kkkkkkkkkkkGkkskkqkjx6k; kkkkkkkkkkkkk&kkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk lGGxX,koykkkkkkkkkkkgbkk3k+tkGkkk$kkkkkkkkkkkkkk3kkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk6kGGGFXdkbyukkkkkkkkkkCkkf;kGk41kkkpkkkkkkkkkkkkk=kkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkk4rGG1nyjm%kkkOakkkkkkDkkknkk1koGtkkkkokkkkkkkkkkkkkjkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkk ,GC,5 cZ6kkkkO@kkkk.gkkONk1kkGZkkkk+kkkkkkkkkkkkkk=kkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkOyGG=l#;%2kkkkkOakkkGkkknkkGkkCfkkkk;kkkkkkkkkkkkkkjkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk4GG:*OV@Zkkkkkkpiktpkk 8k56kv9;kkkkkkkkkkkkkkkkkkk,kkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkcGG#s>ykkkkkkk>obGkkk7kkGkkq8kkkkkkkkkkkkkkkkkkkk7kkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk2CGp*0rkkkkkkkk .akkurkp+kbqokkkkkkkkkkkkkkkkkkkkjkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkm#Gpd;bkkkkkkkkktukkDkkGkkxu>kkkkkkkkkkkkkkkkkkkk=kkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkNGgCkFkkkkkkkkkkpXmik<,kkGSkkkkkkkkkkkkkkkkkkkkk&kkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkktyGtVkkkkNkkkkkkkovkkGkkdd4kkkkkkkkNkkkkkkkkkkkkfkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkSGk.kkkkGkkkkkkk;o0kGkk9rkkkkkkkkkGkkkkkkkkkkkw8kkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkbAhkkkkkGkkkkkkkk2t3wkwx;kkkkkkkkkG2kkkkkkkkkkMkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk83MkkkkFGkkkkkkkkkuokkA*kkkkkkkkkkG&kkkkkkkkkkhkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkA=kkkkkGVkkkkkkkkkd.kGbkkkkkkkkkkGZkkkkkkkkk$;kkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk5ykkkkkGGkkkkkkkkkkfdnzkkkkkkkkkaGkkkkkkkkkkgkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkjkkkkkkrGkkkkkkkkkkkdikkkkkkkkkkGDkkkkkkkkkkkkkkkkkkN&wukkkkkkkkkkkkkkGkkkkkkkkObkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkhkkkkkkkkkkkkkkkkkkGkkgkk9ykkkkkkpkkkkkkk2.kkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkykkkkkkkkkkkkkkkkk2gkjzkXkyskkkkkkkkkbkkkhkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkvkkxkk&k4@#kkkkkkkm5kk*kkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk7kkgkkfk&koZkkkkkk%kk;0kkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk2kkkkkkkkkf8k1kktNkjkiXkkkkkhkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk:kkkkkkkkkekk7kk$kkhk@akkkkfkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkobkkkkkkkk4#kr+kkjkOkkXhkkk ykkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk5kkkkkkkkkCkkGkk6Zk%kkkkkkk7kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkik kkkkkkkkCkkGkkgkk%kkkkkk8pkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkpkskkkkkkkgbkOrkkgkV8kkkkkk9kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk2NkkkkkkkGkkGkkNXkhkkkkkkk3kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkGkkkkkkkukkkkkkk4&kkfkk$kk$kkkkkk$kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkFGkkkkkkk+kkkkkkkqkkFSkkfkz kkkkkkqkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkGGckkkkkkukkkkkkkDkkjkk>ykdkkkkkkk7kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkhGGdkkkkkNSkkkkkk=4kkjkk*kk*kkkkkkk%kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkGGCGkkkkkkkkkkkkkGkka;kk=kk&kkkkkawikkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkAGG%Gkkkkkkkkkkkk4&kkjkkkukXckkkkmn$.kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkk>G3Gnv%kkkkkkkkkkkCkkk&kk%kk=kkkkkkg3Xkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkGGe91gGkkkkkkkkkkkCkkpkkkjkk$kkkbS.99@kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkk GGA$B%pskkkkkkkkkd4kk=kkkdkVZkkkkbbdG3kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkGGAG$Gi$v;kkkkkkkk7kk>skk+kk%kkkkkk0OG,okkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkktGBqCaha9dXkkkkkkkk&kkhkkkhkk$kkkkk<#BvG9mpsfN>kkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkGGGeD=,Chtswkkkkkk1kkkjkkkskk+kkkk6mX@:BC:kNrm3$fwitkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkGGGj5*gl$12=kkkkkk1kkNokkozkskkkkkk0y&%1GtFkykkF$kckdpftkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkGAG5en#Dwyk+7kkkkZ kkjkkkxkkgkkkkkkkF hCnGlgO.xz>4b+dyikkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkbot&h akGGG5GG*@syi06.Gkkhkkrwkk bkF2kkkkkkkwp +*=DGGjokkSjNXk tkkkk2ud$2kkkkkkkkk", +"kkkkkkkkkkkkkkk6p3$48wNckknGG=*MfNSt.a*c#*Akkk3kkk*kk&kkkkkkkkkX@loD=Ge$apykkkNkkkm2mVVkkk8sXkkkkkkk", +"kkkkkkkkkkkkkXi4k>0NsZk+sSrGB,Cs,lMAX46fkkGlak&kkk&kk&kkkkkkkkkpt$$,%MGh%>kkkbFrwm2k4>kbkkmkN9#kkkkk", +"kkkkkkkkkkNvy6%SkkkbN8awiSkGeDBpl0Fdc0.k0Si;8G&kk4VkkS2uk", +"kkkkkk%zkkkk<800840kkkkkkkkkFGDG:O aOOkVoa.k%kkkbSk>Gn&GGBnD9uVwkzkkNZ4kkk6VSkkkGGCps&$k$gkDk4k5kkkgkk>kkkkkkkkkkkz0bd#vGvbFkkkk4mkkZNkkkkt6kkzrkkFpNkk>owbkkkrNkmw;y mk", +"kkk$kkkbkykkAkkkkkkkkkkkkkkkkkkkwoZ+$3orkkkkkk4 Zkkkkk.0kkkbkk4kbukkk", +"kkkhkk8Nkkb8>zckkckkbFVkkkkkGBGOj%r;#k2+kkkkkkkkkkkkkkkyww02k.wkkkk", +"kkkXscihna6kwkbzkkk0iVz0y8kckVykkGC7oZGky8,kkkkkkkkkkkkkkwZkkFuh=jll3kkkkkkkk<2kkkkkkkkVw;k ;hckkkkk", +"kkkkklkkk>wr6kkk>opkk.0k2kFkO;ZbkkqGxdM8Fpkkkkkkkkkkkkkkkkk FVkNn%F5kkkkkk2tcckkkk2kVtiukSwyokkkkkkk", +"kkkkkkXOkkkkkkkyVkkkkVSZZ kFNF48Nkk8Gl5FiakkkkkkkkkkkkkkkkkV0 dpka&kkkkkkkkkkkkwyF4kkzzkruykkkkkkkkk", +"kkkkkkkzsykkkNpkkm4wF2w2N8 +@end html + @c something breaks on 3.12 f -@c @center -@quotation -@mudela[fragment] - \relative c'' { \key es; r8 [c16 b] [c8 g] [as c16 b] [c8 d] | g,4 } -@end mudela -@end quotation -@c @end center -@c include BLURB? LilyPond is a music typesetter. It produces beautiful sheet music using a high level description file as input. LilyPond is part of the GNU Project. -@c include screenshot +@c @center +@quotation +@mudela[fragment] + \relative c'' { \key es; r8 [c16 b] [c8 g] [as c16 b] [c8 d] | g,4 } +@end mudela +@end quotation +@c @end center @unnumberedsec Sheet music diff --git a/INSTALL.txt b/INSTALL.txt index 5c5754ea88..2a431f3a5c 100644 --- a/INSTALL.txt +++ b/INSTALL.txt @@ -53,7 +53,8 @@ Prerequisites * Python 1.5, Check out `ftp://ftp.python.org' or `ftp://ftp.cwi.nl/pub/python'. - * GUILE 1.3, check out http://www.gnu.org/software/guile/guile.html + * GUILE 1.3.4, check out + http://www.gnu.org/software/guile/guile.html (http://www.gnu.org/software/guile/guile.html). * GNU make. Check out ftp://ftp.gnu.org/make/ @@ -93,7 +94,7 @@ following software strongly recommended. Xdvi will show all embedded PostScript too if you have Ghostscript installed. - * GUILE 1.3, check out http://www.gnu.org/software/guile/ + * GUILE 1.3.4, check out http://www.gnu.org/software/guile/ (http://www.gnu.org/programs/guile.html) For running LilyPond successfully you have to help TeX and MetaFont @@ -333,12 +334,6 @@ demonstrated in `input/bugs/'. Known bugs that are not LilyPond's fault are documented here. -All platforms -************* - - * Guile 1.3.2 is buggy in several respects. Do not use it for - LilyPond. - LinuxPPC Bugs: ************** @@ -361,10 +356,6 @@ Linux-i386 Note that this only happens on some computers with the said platform. - * GUILE A binary RPM of Guile 1.3 has been distributed from the - LilyPond ftp site. This binary was made in RedHat 5.x, and it - will fail if this RPM is used with RedHat 6.x. - * libg++ 2.7 LilyPond occasionally crashes while parsing the initialisation diff --git a/NEWS b/NEWS index 5d740e231d..b2027c3cb1 100644 --- a/NEWS +++ b/NEWS @@ -1,10 +1,3 @@ -WHAT'S NEW SINCE 1.2.0 - -* Much faster spacing engine. - -* Features: automatic staff switching - -* Documentation now all is in texinfo. - +[todo] diff --git a/README.txt b/README.txt index 33f5b31671..c22267cdb8 100644 --- a/README.txt +++ b/README.txt @@ -45,10 +45,10 @@ Documentation * use `.dvi', for the tutorial and reference manual. Do - make -C Documentation/tex/ dvi + make -C Documentation/user/ dvi * use ASCII. Do using - make -C Documentation/ + make -C doc Comments diff --git a/TODO b/TODO index dc34df7475..68c356c704 100644 --- a/TODO +++ b/TODO @@ -1,4 +1,4 @@ --*-outline-layout:(2 (-1 -1 0 :) 0);outline-stylish-prefixes:nil -*- +i-*-outline-layout:(2 (-1 -1 0 :) 0);outline-stylish-prefixes:nil -*- * GNU LilyPond TODO Features you cannot find in the documentation as working, should be @@ -9,11 +9,20 @@ Most of the items are marked in the code as well Grep -i for TODO, FIXME and ugh/ugr/urg. .* TODO +. * make this file understandable for 3rd parties. . * use Rhythmic_head::position_i () for all Staff_referenced -. * .po -> .pot. +. * note head on stem err msg in dutch. . * why need to run -C mf twice? +. * fix interstaff stuff . * junk BLURB files. . * setting indent to 0 with \shape fails +. * here's no difference at all in output. When either is jacked up to 7.0, +everything works and matches up; when either is set just a bit above the +default 5.0 (5.4 is what I was hoping to use), stems miss note heads. So +it's some sort of a numerical (truncation/roundoff) problem. +John +. * metre -> meter +. * Fixed size staff heights; . * ly2dvi : don't repeat opus if same. . * breaks before mmrests are favored. . * hara kiri _8 clef. @@ -21,10 +30,6 @@ Grep -i for TODO, FIXME and ugh/ugr/urg. . * mudela-book doco . * rerun profile . * fix or replace feta-accordion.mf -. * fix configure with CFLAGS or LDFLAGS, try: - CFLAGS=-g LDFLAGS='-Wl,--warn-common' ./configure -configure will use them while testing the compiler, but they don't -appear in config.make . * script engraver . * Chords: . * Bass/inversion pitch when not part of Chord @@ -86,14 +91,14 @@ melismatic. What's old about absolute to relative conversion? Could maybe use for abc2ly, midi2ly? +. * Junk shared cruft (duration, moment) in lib/ + + .* Cleanups needed . * \$ and $ identifier syntax in examples. . * Junk ghost positioning objects eg, Script leans on Staffside leans on Staff. . * bracket ps code. -. * mudela-book -. * center option (??) -. * make mudela-book understand usepackage{geometry} . * Key_engraver, Local_key_item . * Think of comprehensive solution for "if (grace_b == self_grace_b_)" . * String[String.length] doesn't trap. @@ -166,7 +171,6 @@ one of the spacing bugs mentioned in the TODO. be stacked vertically, avoiding collisions with the notes in all voices. -. * break priority setting from SCM. . * Matanya's tips: . * don't shorten stems/staffs closer to each other. . * accidentals closer to note head @@ -183,7 +187,6 @@ one of the spacing bugs mentioned in the TODO. page three, the c-sharp on the second line should be a quarter with a circle, not a quarter tied to a sixteenth. is this at all possible with lily? -. * scm-ify \property values. . * make dependencies () a virtual function. . * deprecate hangOnClef. . * Abstraction for engravers: diff --git a/VERSION b/VERSION index a29c25c1b1..dc92e1726d 100644 --- a/VERSION +++ b/VERSION @@ -1,7 +1,7 @@ PACKAGE_NAME=LilyPond MAJOR_VERSION=1 -MINOR_VERSION=2 -PATCH_LEVEL=15 +MINOR_VERSION=3 +PATCH_LEVEL=0 MY_PATCH_LEVEL= # use the above to send patches: MY_PATCH_LEVEL is always empty for a diff --git a/buildscripts/set-lily.sh b/buildscripts/set-lily.sh index d69f24b3b7..f809aba7d3 100755 --- a/buildscripts/set-lily.sh +++ b/buildscripts/set-lily.sh @@ -81,7 +81,7 @@ rm -f cmtfm; showln -sf $TEX_TFMDIR $BUILDDIR/cmtfm if [ -f ../.gdbinit.lilypond ]; then - showln -f ../.gdbinit.lilypond . + showln -f ../.gdbinit.lilypond .gdbinit fi if [ -f ../.dstreamrc ] diff --git a/flower/dstream.cc b/flower/dstream.cc index ba46d69ed6..e51f97a39e 100644 --- a/flower/dstream.cc +++ b/flower/dstream.cc @@ -9,7 +9,7 @@ #include #include "dictionary-iter.hh" #include "dstream.hh" -#include "scalar.hh" + #include "text-db.hh" #include "string-convert.hh" #include "rational.hh" @@ -86,7 +86,7 @@ Dstream::operator<<(void const *v_l) } Dstream & -Dstream::operator <<(Scalar s) +Dstream::operator <<(String s) { output (s); return *this; @@ -99,6 +99,32 @@ Dstream::operator <<(const char * s) return *this; } +Dstream & +Dstream::operator <<(char c) +{ + output (to_str (c)); + return *this; +} + +Dstream& +Dstream::operator << (Real r) +{ + output (to_str (r)); + return *this; +} +Dstream & +Dstream::operator <<(Rational c) +{ + output (c.str ()); + return *this; +} +Dstream & +Dstream::operator <<(int i) +{ + output (to_str(i)); + return *this; +} + void Dstream::output (String s) { @@ -158,7 +184,7 @@ Dstream::Dstream (ostream *r, char const * cfg_nm) r.message (_ ("not enough fields in Dstream init")); continue; } - (*silent_dict_p_)[r[0]] = (bool)(int)(Scalar (r[1])); + (*silent_dict_p_)[r[0]] = r[1] == "1"; } if ((*silent_dict_p_).elem_b ("Dstream_default_silence")) diff --git a/flower/include/dstream.hh b/flower/include/dstream.hh index 93b9956a25..c207e21e38 100644 --- a/flower/include/dstream.hh +++ b/flower/include/dstream.hh @@ -10,7 +10,7 @@ #define DSTREAM_HH #include "string.hh" -#include "scalar.hh" + const char eol= '\n'; @@ -51,12 +51,12 @@ public: virtual ~Dstream(); Dstream &identify_as (String s); - /** - Output a Scalar via the Dstream. This is the only output - interface. It explicitely delegates all implicit conversion - to Scalar class. - */ - Dstream &operator << (Scalar); + + Dstream &operator << (String); + Dstream &operator << (Real); + Dstream &operator << (int); + Dstream &operator << (Rational); + Dstream &operator << (char); /** Output memory locations. */ diff --git a/flower/include/rational.hh b/flower/include/rational.hh index 7ea4e0aaf2..b1187ec692 100644 --- a/flower/include/rational.hh +++ b/flower/include/rational.hh @@ -10,15 +10,11 @@ #ifndef RATIONAL_HH #define RATIONAL_HH -#if PARANOIA -#ifndef Rational -#define Rational MyRational -#endif -#endif #include "compare.hh" #include "arithmetic-operator.hh" #include "fproto.hh" +#include "string.hh" /** Rational numbers. Included is support for + and - infinity. diff --git a/flower/include/real.hh b/flower/include/real.hh index ec98982cdf..630d3dd692 100644 --- a/flower/include/real.hh +++ b/flower/include/real.hh @@ -25,7 +25,7 @@ template inline T abs (T x) template inline int sign (T x) { if (x) - return x > 0 ? 1 : -1; + return x > T(0) ? 1 : -1; return 0; } diff --git a/flower/include/scalar.hh b/flower/include/scalar.hh index b389277bc3..1960e53d56 100644 --- a/flower/include/scalar.hh +++ b/flower/include/scalar.hh @@ -13,18 +13,21 @@ #include "string.hh" #include "real.hh" +#error /// Perl -like scalar type. -struct Scalar : public String +struct Scalar { - Scalar (Real r) { *this = to_str (r); } - Scalar (int i) { *this = to_str (i); } - Scalar (long l) { *this = to_str (l); } - Scalar (char c) { *this = to_str (c); } - Scalar (char const *c) : String (c) {} - Scalar (String s) : String (s) {} + Protected_scm scm_; +public: + Scalar (Real r); + Scalar (int i); + Scalar (long l); + Scalar (char c); + Scalar (char const *c); + Scalar (String s); Scalar (Rational); operator Rational(); - Scalar() {} + Scalar(); bool isnum_b() const; bool isdir_b() const; bool isint_b() const; diff --git a/flower/include/string.hh b/flower/include/string.hh index 24b975949a..b0bf9f8952 100644 --- a/flower/include/string.hh +++ b/flower/include/string.hh @@ -90,16 +90,7 @@ public: void operator += (String s); bool empty_b () const; -#if 0 - /** is the string empty? - Ugh-ugh-thank-you-cygnus. W32 barfs on this - */ - operator bool () const; - { - return length_i (); - } -#endif void append (String); void prepend (String); diff --git a/flower/scalar.cc b/flower/scalar.cc index 476b6485bd..48d4889a4e 100644 --- a/flower/scalar.cc +++ b/flower/scalar.cc @@ -1,3 +1,4 @@ +#if 0 /* scalar.cc -- implement Scalar @@ -8,7 +9,7 @@ #include #include -#include "scalar.hh" + #include "rational.hh" Scalar::Scalar (Rational r) @@ -105,3 +106,4 @@ Scalar::to_bool () const } +#endif diff --git a/input/praeludium-fuga-E.ly b/input/praeludium-fuga-E.ly index 3f9deec181..ed568286ed 100644 --- a/input/praeludium-fuga-E.ly +++ b/input/praeludium-fuga-E.ly @@ -204,24 +204,24 @@ breakmusic = \notes { \translator { \VoiceContext \name "VoiceOne"; - verticalDirection = "1"; + verticalDirection = #1 } \translator { \VoiceContext \name "VoiceTwo"; - verticalDirection = "-1"; + verticalDirection = #1 } \translator { \VoiceContext \name "VoiceThree"; - verticalDirection = "1"; - horizontalNoteShift = "1"; + verticalDirection = #1 + horizontalNoteShift = #1 } \translator { \VoiceContext \name "VoiceFour"; - verticalDirection = "-1"; - horizontalNoteShift = "1"; + verticalDirection = #-1 + horizontalNoteShift = #1 } \translator { \StaffContext diff --git a/input/star-spangled-banner.ly b/input/star-spangled-banner.ly index d16dadc5e6..0cc8c8b8a6 100644 --- a/input/star-spangled-banner.ly +++ b/input/star-spangled-banner.ly @@ -4,6 +4,8 @@ http://www.Arkkra.com/doc/star.html http://www.Arkkra.com/doc/star.ps %} + + \header{ title="The Star Spangled Banner"; subtitle="The United States National Anthem"; @@ -101,7 +103,7 @@ textxx = \lyrics { { stripes and bright stars, through the per- il- ous fight, O'er the ram- parts we watched, were so gal- lant- ly - _ _ _ _ % UGH UGH UGH + " " " " " " " "% _ _ _ _ % UGH UGH UGH stream- ing And the rock- ets' red glare, the bombs burst- ing in air, gave proof through the night that @@ -120,25 +122,25 @@ automaticLyrics = \notes \context GrandStaff < \context Staff=staffA < \beginmatter \clef treble; - \property Staff.automaticMelismata = "1" - \notes \transpose c'' {\voiceone \$staff1_voice_1 \bar "|.";} - \notes \transpose c'' {\voicetwo \$staff1_voice_2 } + \property Staff.automaticMelismata = ##t + \context Voice = one \transpose c'' {\stemup \$staff1_voice_1 \bar "|.";} + \context Voice = two \transpose c'' {\stemdown \$staff1_voice_2 } > \context LyricVoice \textxx \context Staff=staffB < \beginmatter \clef bass; - \property Staff.noVoltaBraces = "1" - {\voiceone \$staff2_voice_1 \bar "|."; } - {\voicetwo \$staff2_voice_2 } + \property Staff.noVoltaBraces = ##t + \context Voice = three {\stemup \$staff2_voice_1 \bar "|."; } + \context Voice = four {\stemdown \$staff2_voice_2 } > > handLyrics = \notes \context GrandStaff < \context Staff=staffA < \beginmatter - \notes \transpose c'' {\voiceone \$staff1_voice_1 \bar "|.";} - \notes \transpose c'' {\voicetwo \$staff1_voice_2 } + \transpose c'' {\voiceone \$staff1_voice_1 \bar "|.";} + \transpose c'' {\voicetwo \$staff1_voice_2 } > \nonRepeatText \context Staff=staffB < diff --git a/input/test/beam-interstaff.ly b/input/test/beam-cross-staff.ly similarity index 100% rename from input/test/beam-interstaff.ly rename to input/test/beam-cross-staff.ly diff --git a/input/test/embedded-scm.ly b/input/test/embedded-scm.ly new file mode 100644 index 0000000000..d530c85965 --- /dev/null +++ b/input/test/embedded-scm.ly @@ -0,0 +1,4 @@ +#(begin (newline)(display "hello world")(newline))\score{ + \notes\relative c'{ c } +} + diff --git a/input/test/no-stem-extend.fly b/input/test/no-stem-extend.fly new file mode 100644 index 0000000000..35ef31eac4 --- /dev/null +++ b/input/test/no-stem-extend.fly @@ -0,0 +1,13 @@ +% test noStemExtend +\context Staff < + \context Voice = "a" { + f2 f8 g a b + \property Voice.noStemExtend = 1 + f2 f8 g a b + } + \context Voice = "b" { + c''2 c8 b a g + \property Voice.noStemExtend = 1 + c2 c8 b a g + } +> diff --git a/input/test/slur-interstaff.ly b/input/test/slur-cross-staff.ly similarity index 100% rename from input/test/slur-interstaff.ly rename to input/test/slur-cross-staff.ly diff --git a/input/test/uniform-breaking.ly b/input/test/uniform-breaking.ly new file mode 100644 index 0000000000..b07a7b21a6 --- /dev/null +++ b/input/test/uniform-breaking.ly @@ -0,0 +1,112 @@ +%{ +Hmm, ik vraag me af of dit al helemaal koel is. + + return abs (this_one.force_f_) + abs (prev.force_f_ - this_one.force_f_) + + break_penalties; + +Neem als voorbeeld iets dat lijkt op allemande: keuze tussen 2 of drie +maten per regel. + +* 2 lange maten -> lelie kiest 2 /regel :beetje los +* 3 korte -> lelie kiest 3 /regel :beetje krap +* 2 korte, 1 lange -> 3/regel :krap +* 1 korte, 2 lange -> 3/regel :erg krap +* 3 lange -> 3/regel :urg krap + +als je naar beloningen kijkt, kan ik me goed voorstellen dat sprong +van 'al wat krapper' naar los te groot wordt, en ze dus steeds krapper +wordt, tot urg krap aan toe, want kracht lineair? Dat lijkt ook geval +in allemande. + +Zie hoe eerst 10 en 9 mooi op 2maat/regel staan terwijl later tot 14 +toe 3/regel. + +Heb niet zomaar beter idee, nog. +%} + +\score{ + \notes\relative c'{ + % 10 + c8 c c c c8 c c c + c8 c c c c8 c c c + c8 c c c c8 ces c ces + + % 9 + c8 c c c c8 c c c + c8 c c c c8 c c c + c8 c c c c8 c ces c + + % 1 + c4 c c c + c4 c c c + c4 c c c + + % 2 + c4 c c c + c4 c c c + c4 c c8 c c c + + % 3 + c4 c c c + c4 c c c + c8 c c c c8 c c c + + % 4 + c4 c c c + c4 c c8 c c c + c8 c c c c8 c c c + + % 5 + c4 c c c + c8 c c c c8 c c c + c8 c c c c8 c c c + + % 6 + c4 c c8 c c c + % c4 c c c8 c + c8 c c c c8 c c c + c8 c c c c8 c c c + + % 7 + c8 c c c c8 c c c + c8 c c c c8 c c c + c8 c c c c8 c c c + + % 8 + c8 c c c c8 c c c + c8 c c c c8 c c c + c8 c c c c8 c c ces + + % 9 + c8 c c c c8 c c c + c8 c c c c8 c c c + c8 c c c c8 c ces c + + % 10 + c8 c c c c8 c c c + c8 c c c c8 c c c + c8 c c c c8 ces c ces + + % 11 + c8 c c c c8 c c c + c8 c c c c8 c c c + c8 c c c ces8 c ces c + + % 12 + c8 c c c c8 c c c + c8 c c c c8 c c c + c8 c c ces c8 ces c ces + + % 13 + c8 c c c c8 c c c + c8 c c c c8 c c c + c8 c ces c ces8 c ces c + + } + \paper { + indent=0.0\mm; + linewidth=90.0\mm; + } +} + + diff --git a/input/twinkle.ly b/input/twinkle.ly index bc8d67cbe3..847368ebeb 100644 --- a/input/twinkle.ly +++ b/input/twinkle.ly @@ -48,9 +48,6 @@ accompany = \notes \relative c { d b | c a | f g | c,2 } -global = \notes { - \time 2/4; -} tekst = \lyrics{ Al -- tijd is Kort -- jak -- je ziek, " " @@ -120,14 +117,16 @@ textiii = \lyrics{ \context Staff=i s1 \context Lyrics=top s1 \context GrandStaff < - \context Staff=ii \repeat semi 2 < \global\melody > - \context Staff=iii \repeat semi 2 < \global\accompany > + \context Staff=ii \repeat volta 2 < + \time 2/4; + \melody > + \context Staff=iii \repeat volta 2 < + \accompany > > \context Lyrics=bottom s1 % ugh, \repeat in \addlyrics dumps core \addlyrics - % \context Staff = i \repeat semi 2 <\global\melody> - \context Staff = i <\global\melody> + \context Staff = i < \melody> < %\repeat fold 2 {} %\alternative { diff --git a/lib/duration-convert.cc b/lib/duration-convert.cc index 5f3be55dd8..ac46fd7a60 100644 --- a/lib/duration-convert.cc +++ b/lib/duration-convert.cc @@ -44,7 +44,7 @@ Duration_convert::dur2ticks_i (Duration dur) { if (dur.ticks_i_) return dur.ticks_i_; - return dur2_mom (dur) * Moment (Duration::division_1_i_s); + return dur2_mom (dur) * Rational (Duration::division_1_i_s); } int @@ -67,22 +67,22 @@ Duration_convert::type2_i (int type) return 1 << type; } -Moment +Rational Duration_convert::dur2_mom (Duration dur) { if (dur.ticks_i_) - return Moment (dur.ticks_i_, Duration::division_1_i_s); + return Rational (dur.ticks_i_, Duration::division_1_i_s); // or simply assert? if (dur.durlog_i_<-10) - return Moment (0); - Moment mom; + return Rational (0); + Rational mom; if (dur.durlog_i_<0) - mom = Moment (type2_i (-dur.durlog_i_), 1); + mom = Rational (type2_i (-dur.durlog_i_), 1); else - mom = Moment (1 , type2_i (dur.durlog_i_)); + mom = Rational (1 , type2_i (dur.durlog_i_)); - Moment delta = mom; + Rational delta = mom; while (dur.dots_i_--) { delta /= 2.0; @@ -93,7 +93,7 @@ Duration_convert::dur2_mom (Duration dur) } Duration -Duration_convert::mom2_dur (Moment mom) +Duration_convert::mom2_dur (Rational mom) { if (!mom) { @@ -111,8 +111,8 @@ Duration_convert::mom2_dur (Moment mom) // dur.set_plet (type_mom, Duration::division_1_i_s / 4); - // Moment as_plet_mom = mom / dur.mom (); - Moment as_plet_mom = mom / dur.length_mom (); + // Rational as_plet_mom = mom / dur.mom (); + Rational as_plet_mom = mom / dur.length_mom (); as_plet_mom *= dur.plet_.mom (); long num = as_plet_mom.num (); long den = as_plet_mom.den (); @@ -121,7 +121,7 @@ Duration_convert::mom2_dur (Moment mom) } Duration -Duration_convert::mom2standardised_dur (Moment mom) +Duration_convert::mom2standardised_dur (Rational mom) { // if (!dur_array_s.length_i ()) if (!dur_array_s.size ()) @@ -129,12 +129,12 @@ Duration_convert::mom2standardised_dur (Moment mom) assert (dur_array_s.size ()); for (int i = 0; i < dur_array_s.size () - 1; i++) { - Moment lower_mom = dur2_mom (dur_array_s[ i ]); + Rational lower_mom = dur2_mom (dur_array_s[ i ]); if (mom <= lower_mom) { // all arbitrary, but 3/4 will get rid of the noise... // kinda ok - if (i || (mom / lower_mom > Moment (3, 4))) + if (i || (mom / lower_mom > Rational (3, 4))) return dur_array_s[ i ]; else { @@ -143,7 +143,7 @@ Duration_convert::mom2standardised_dur (Moment mom) return d; } } - Moment upper_mom = dur2_mom (dur_array_s[ i + 1 ]); + Rational upper_mom = dur2_mom (dur_array_s[ i + 1 ]); if ((mom < upper_mom) && ((mom - lower_mom) / lower_mom < (upper_mom - mom) / upper_mom)) @@ -164,14 +164,14 @@ Duration_convert::set_array () } -Moment +Rational Duration_convert::plet_factor_mom (Duration dur) { return dur.plet_.mom (); } Real -Duration_convert::sync_f (Duration dur, Moment mom) +Duration_convert::sync_f (Duration dur, Rational mom) { return mom / dur2_mom (dur); } @@ -179,7 +179,7 @@ Duration_convert::sync_f (Duration dur, Moment mom) Duration Duration_convert::ticks2_dur (int ticks_i) { - Moment mom (ticks_i, Duration::division_1_i_s); + Rational mom (ticks_i, Duration::division_1_i_s); if (midi_as_plet_b_s) return mom2_dur (mom); @@ -194,7 +194,7 @@ Duration_convert::ticks2_dur (int ticks_i) Duration Duration_convert::ticks2standardised_dur (int ticks_i) { - Moment mom (ticks_i, Duration::division_1_i_s); + Rational mom (ticks_i, Duration::division_1_i_s); Duration dur = mom2standardised_dur (mom); return dur; } diff --git a/lib/duration-iter.cc b/lib/duration-iter.cc index 9472c0217d..abb467d1c1 100644 --- a/lib/duration-iter.cc +++ b/lib/duration-iter.cc @@ -114,5 +114,5 @@ Duration_iterator::forward_dur () bool Duration_iterator::ok () { - return cursor_dur_.length_mom () <= Moment (4); + return cursor_dur_.length_mom () <= Rational (4); } diff --git a/lib/duration.cc b/lib/duration.cc index bd9435fd82..b2a5f84643 100644 --- a/lib/duration.cc +++ b/lib/duration.cc @@ -16,7 +16,7 @@ #include "string.hh" #include "source-file.hh" #include "source.hh" -#include "moment.hh" +#include "rational.hh" #include "duration.hh" #include "duration-convert.hh" #include "duration-iter.hh" @@ -42,13 +42,13 @@ Duration::duration_type_b (int t) } void -Duration::compress (Moment m) +Duration::compress (Rational m) { plet_.iso_i_ *= m.num_i (); plet_.type_i_ *= m.den_i (); } -Moment +Rational Duration::length_mom () const { return Duration_convert::dur2_mom (*this); diff --git a/lib/include/duration-convert.hh b/lib/include/duration-convert.hh index 11ee123ee0..980c62a6f5 100644 --- a/lib/include/duration-convert.hh +++ b/lib/include/duration-convert.hh @@ -1,5 +1,5 @@ /* - duration-convert.hh -- declare + duration-convert.hh -- declare Duration_convert source file of the LilyPond music typesetter @@ -11,7 +11,6 @@ #define DURATION_CONVERT_HH #include "duration.hh" #include "string.hh" -//#include "array.hh" #include "array.hh" /** @@ -19,13 +18,9 @@ That is including (integer + division) representation for MIDI, and conversion from unexact time representation (best guess :-). - A Moment (mom) is a Rational that holds the time fraction + A Rational (mom) is a Rational that holds the time fraction compared to a whole note (before also called wholes). - SUGGESTION: currently a moment in time is called moment too; - let-s typedef Rational When too, so that we get - When Staff_column::when (), Moment Voice_element::mom (). - [todo] move all statics to real members, instantiate Duration_convert object (s). @@ -51,27 +46,27 @@ struct Duration_convert { /// Return 0 if longer than whole note. static int type2_i (int type); - /// Return Moment representation (fraction of whole note). - static Moment dur2_mom (Duration dur ); + /// Return Rational representation (fraction of whole note). + static Rational dur2_mom (Duration dur ); /// Return Mudela string representation. static String dur2_str (Duration dur ); - /// Return duration from Moment (fraction of whole) representation. - static Duration mom2_dur (Moment mom ); + /// Return duration from Rational (fraction of whole) representation. + static Duration mom2_dur (Rational mom ); /// Return standardised duration, best guess if not exact. - static Duration mom2standardised_dur (Moment mom ); + static Duration mom2standardised_dur (Rational mom ); - /// Return plet factor (not a Moment: should use Rational?). - static Moment plet_factor_mom (Duration dur ); + /// Return plet factor (not a Rational: should use Rational?). + static Rational plet_factor_mom (Duration dur ); static void set_array (); /** Return synchronisation factor for mom, so that mom2_dur (mom / sync_f ) will return the duration dur. */ - static Real sync_f (Duration dur, Moment mom ); + static Real sync_f (Duration dur, Rational mom ); /// Return exact duration, in midi-ticks if not-exact. static Duration ticks2_dur (int ticks_i ); diff --git a/lib/include/duration.hh b/lib/include/duration.hh index a4f5cdc71c..28580b63af 100644 --- a/lib/include/duration.hh +++ b/lib/include/duration.hh @@ -13,7 +13,7 @@ #define DURATION_HH #include "fproto.hh" -#include "moment.hh" +#include "rational.hh" #include "plet.hh" /** @@ -27,11 +27,11 @@ struct Duration { bool plet_b (); String str () const; void set_plet (int,int ); - void compress (Moment); + void compress (Rational); static bool duration_type_b (int t); void set_ticks (int ticks_i ); - Moment length_mom () const ; + Rational length_mom () const ; static int division_1_i_s; /// Logarithm of the base duration. diff --git a/lib/include/moment.hh b/lib/include/moment.hh deleted file mode 100644 index d578fbc59a..0000000000 --- a/lib/include/moment.hh +++ /dev/null @@ -1,29 +0,0 @@ -/* - (c) 1996--98 Han-Wen Nienhuys -*/ - -#ifndef MOMENT_HH -#define MOMENT_HH - -#include -#include "rational.hh" - -class String; -typedef Rational Moment; - - -/** - A really big time-moment. - - Windhoze-suck-suck-suck-suck-suck-thank-you-cygnus - - I get tired of all these incompatibilities. Let's just assume that - INT_MAX is really, really, really big. - - Can't we name this Saint_jut_mom (Sintjuttemis ?) */ - - -const Moment infinity_mom = INT_MAX; - -#endif // - diff --git a/lib/include/plet.hh b/lib/include/plet.hh index dbb26da95d..42ef83b435 100644 --- a/lib/include/plet.hh +++ b/lib/include/plet.hh @@ -9,7 +9,7 @@ #ifndef PLET_HH #define PLET_HH -#include "moment.hh" +#include "rational.hh" /** The type and replacement value of a plet (triplet, quintuplet.) Conceptually the same as a rational, but 4/6 != 2/3. @@ -18,7 +18,7 @@ */ struct Plet { Plet (); - Moment mom () const; + Rational mom () const; bool unit_b () const; int iso_i_; // 2/3; 2 is not duration, maar of count! int type_i_; diff --git a/lib/moment.cc b/lib/moment.cc deleted file mode 100644 index a4c50d8d07..0000000000 --- a/lib/moment.cc +++ /dev/null @@ -1,12 +0,0 @@ -/* - moment.cc -- implement Moment - - source file of the GNU LilyPond music typesetter - - (c) 1996, 1997--1999 Han-Wen Nienhuys -*/ - -#include -#include "string.hh" -#include "moment.hh" - diff --git a/lib/plet.cc b/lib/plet.cc index a145aa7ae4..e567515b7e 100644 --- a/lib/plet.cc +++ b/lib/plet.cc @@ -15,10 +15,10 @@ Plet::Plet () iso_i_ = 1; } -Moment +Rational Plet::mom () const { - return Moment (iso_i_, type_i_); + return Rational (iso_i_, type_i_); } bool diff --git a/lily/align-note-column-engraver.cc b/lily/align-note-column-engraver.cc index ddb83af5f2..c28320f301 100644 --- a/lily/align-note-column-engraver.cc +++ b/lily/align-note-column-engraver.cc @@ -50,10 +50,10 @@ Align_note_column_engraver::do_creation_processing () void Align_note_column_engraver::do_removal_processing () { - Scalar al = get_property ("graceAlignPosition", 0); - if (al.isdir_b ()) + SCM al = get_property ("graceAlignPosition", 0); + if (isdir_b (al)) { - align_item_p_->notehead_align_dir_ = Direction (int (al)); + align_item_p_->notehead_align_dir_ = to_dir (al); } typeset_element (align_item_p_); @@ -85,10 +85,13 @@ Align_note_column_engraver::process_acknowledged () B. it has no pscore_l_ field. */ - Scalar grsp = get_property ("graceAccidentalSpace", 0); - if (grsp.isnum_b ()) + SCM grsp = get_property ("graceAccidentalSpace", 0); + if (SCM_NUMBERP(grsp)) { - Real extra_space = double(grsp); + /* + ugh. + */ + Real extra_space = gh_scm2double(grsp); SCM e = gh_cons (gh_double2scm (-extra_space), gh_double2scm (0.0)); now_column_l_->set_elt_property (extra_space_scm_sym, e); } diff --git a/lily/auto-beam-engraver.cc b/lily/auto-beam-engraver.cc index 69b9a4f6ed..7caf691c79 100644 --- a/lily/auto-beam-engraver.cc +++ b/lily/auto-beam-engraver.cc @@ -103,49 +103,53 @@ Auto_beam_engraver::consider_end_and_begin (Moment test_mom) /* second guess: property generic time exception */ - Scalar begin = get_property (time_str + "beamAutoBegin", 0); - if (begin.length_i ()) - begin_mom = begin.to_rat (); + SCM begin = get_property (time_str + "beamAutoBegin", 0); + if (SMOB_IS_TYPE_B(Moment, begin)) + begin_mom = * SMOB_TO_TYPE(Moment, begin); - Scalar end = get_property (time_str + "beamAutoEnd", 0); - if (end.length_i ()) - end_mom = end.to_rat (); + SCM end = get_property (time_str + "beamAutoEnd", 0); + if (SMOB_IS_TYPE_B (Moment, end)) + end_mom = * SMOB_TO_TYPE(Moment,end); /* third guess: property time exception, specific for duration type */ if (type_str.length_i ()) { - Scalar end_mult = get_property (time_str + "beamAutoEnd" + type_str, 0); - if (end_mult.length_i ()) - end_mom = end_mult.to_rat (); - Scalar begin_mult = get_property (time_str + "beamAutoBegin" + type_str, 0); - if (begin_mult.length_i ()) - begin_mom = begin_mult.to_rat (); + SCM end_mult = get_property (time_str + "beamAutoEnd" + type_str, 0); + if (SMOB_IS_TYPE_B (Moment, end_mult)) + end_mom = * SMOB_TO_TYPE (Moment,end_mult); + + SCM begin_mult = get_property (time_str + "beamAutoBegin" + type_str, 0); + if (SMOB_IS_TYPE_B (Moment, begin_mult)) + begin_mom = * SMOB_TO_TYPE (Moment,begin_mult); } /* fourth guess [user override]: property plain generic */ begin = get_property ("beamAutoBegin", 0); - if (begin.length_i ()) - begin_mom = begin.to_rat (); + if (SMOB_IS_TYPE_B(Moment, begin)) + begin_mom = * SMOB_TO_TYPE(Moment, begin); + + end = get_property ("beamAutoEnd", 0); - if (end.length_i ()) - end_mom = end.to_rat (); + if (SMOB_IS_TYPE_B (Moment, end)) + end_mom = * SMOB_TO_TYPE (Moment,end); /* fifth guess [user override]: property plain, specific for duration type */ if (type_str.length_i ()) { - Scalar end_mult = get_property (String ("beamAutoEnd") + type_str, 0); - if (end_mult.length_i ()) - end_mom = end_mult.to_rat (); - Scalar begin_mult = get_property (String ("beamAutoBegin") + type_str, 0); - if (begin_mult.length_i ()) - begin_mom = begin_mult.to_rat (); + SCM end_mult = get_property (String ("beamAutoEnd") + type_str, 0); + if (SMOB_IS_TYPE_B (Moment, end_mult)) + end_mom = * SMOB_TO_TYPE (Moment,end_mult); + + SCM begin_mult = get_property (String ("beamAutoBegin") + type_str, 0); + if (SMOB_IS_TYPE_B (Moment, begin_mult)) + begin_mom = * SMOB_TO_TYPE (Moment,begin_mult); } Rational r; @@ -160,8 +164,8 @@ Auto_beam_engraver::consider_end_and_begin (Moment test_mom) /* Allow already started autobeam to end */ - Scalar on = get_property ("noAutoBeaming", 0); - if (on.to_bool ()) + SCM on = get_property ("noAutoBeaming", 0); + if (gh_boolean_p (on) && gh_scm2bool (on)) return; if (begin_mom) @@ -200,20 +204,20 @@ Auto_beam_engraver::create_beam_p () } /* urg, copied from Beam_engraver */ - Scalar prop = get_property ("beamslopedamping", 0); - if (prop.isnum_b ()) - beam_p->set_elt_property (damping_scm_sym, gh_int2scm(prop)); + SCM prop = get_property ("beamslopedamping", 0); + if (SCM_NUMBERP(prop)) + beam_p->set_elt_property (damping_scm_sym, prop); prop = get_property ("autoKneeGap", 0); - if (prop.isnum_b ()) - beam_p->set_elt_property (auto_knee_gap_scm_sym, gh_int2scm(prop)); + if (SCM_NUMBERP(prop)) + beam_p->set_elt_property (auto_knee_gap_scm_sym, prop); prop = get_property ("autoInterstaffKneeGap", 0); - if (prop.isnum_b ()) - beam_p->set_elt_property (auto_interstaff_knee_gap_scm_sym, gh_int2scm( prop)); + if (SCM_NUMBERP(prop)) + beam_p->set_elt_property (auto_interstaff_knee_gap_scm_sym, prop); prop = get_property ("beamquantisation", 0); - if (prop.isnum_b ()) + if (SCM_NUMBERP(prop)) beam_p->quantisation_ = (Beam::Quantisation)(int)prop; announce_element (Score_element_info (beam_p, 0)); @@ -281,7 +285,7 @@ Auto_beam_engraver::do_removal_processing () { /* finished beams may be typeset */ typeset_beam (); - /* but unfinished may need another announce/acknoledge pass */ + /* but unfinished may need another announce/acknowledge pass */ if (stem_l_arr_p_) junk_beam (); } @@ -289,9 +293,9 @@ Auto_beam_engraver::do_removal_processing () bool Auto_beam_engraver::same_grace_state_b (Score_element* e) { - bool gr = (e->get_elt_property (grace_scm_sym) != SCM_BOOL_F) ; - - return gr == get_property ("weAreGraceContext",0).to_bool (); + bool gr = e->get_elt_property (grace_scm_sym) != SCM_BOOL_F; + SCM wg =get_property ("weAreGraceContext",0); + return (gh_boolean_p (wg) && gh_scm2bool (wg)) == gr; } void diff --git a/lily/bar-engraver.cc b/lily/bar-engraver.cc index 2aa4904054..5811e6dc86 100644 --- a/lily/bar-engraver.cc +++ b/lily/bar-engraver.cc @@ -35,25 +35,24 @@ Bar_engraver::create_bar () bar_p_->set_elt_property (break_priority_scm_sym, gh_int2scm (0)); // urg: "" != empty... - String default_type = get_property ("defaultBarType", 0); - if (default_type.length_i ()) + SCM default_type = get_property ("defaultBarType", 0); + if (gh_string_p (default_type)) { - bar_p_->type_str_ = default_type; + bar_p_->type_str_ = ly_scm2string (default_type); } /* urg. Why did I implement this? */ - Scalar prop = get_property ("barAtLineStart", 0); - if (prop.to_bool ()) + SCM prop = get_property ("barAtLineStart", 0); + if (gh_boolean_p (prop) && gh_scm2bool (prop)) { bar_p_->set_elt_property (at_line_start_scm_sym, SCM_BOOL_T); } prop = get_property ("barSize", 0); - if (prop.isnum_b ()) + if (SCM_NUMBERP(prop)) { - bar_p_->set_elt_property (bar_size_scm_sym, - gh_double2scm (Real(prop))); + bar_p_->set_elt_property (bar_size_scm_sym, prop); } announce_element (Score_element_info (bar_p_, 0)); } @@ -67,11 +66,10 @@ Bar_engraver::create_bar () void Bar_engraver::request_bar (String requested_type) { - Scalar prop = get_property ("barAtLineStart", 0); if (!now_mom ()) { - Scalar prop = get_property ("barAtLineStart", 0); - if (!prop.to_bool ()) + SCM prop = get_property ("barAtLineStart", 0); + if (!gh_boolean_p (prop) && gh_scm2bool (prop)) return; } bool bar_existed = bar_p_; diff --git a/lily/bar-script-engraver.cc b/lily/bar-script-engraver.cc index f5bfcacd91..12e94befc1 100644 --- a/lily/bar-script-engraver.cc +++ b/lily/bar-script-engraver.cc @@ -31,8 +31,8 @@ Bar_script_engraver::Bar_script_engraver () void Bar_script_engraver::do_creation_processing () { - Scalar prop = get_property (type_ + "HangOnClef", 0); - if (prop.to_bool ()) + SCM prop = get_property (type_ + "HangOnClef", 0); + if (gh_boolean_p (prop) && gh_scm2bool (prop)) { hang_on_clef_b_ = true; } @@ -141,10 +141,10 @@ Bar_script_engraver::create_items (Request *rq) text_p_ = new Text_item; text_p_->set_elt_property (breakable_scm_sym, SCM_BOOL_T); // ugh - Scalar prop = get_property (type_ + "Direction", 0); - if (prop.isnum_b ()) + SCM prop = get_property (type_ + "Direction", 0); + if (isdir_b (prop)) { - staff_side_p_->dir_ = (Direction) (int) prop; + staff_side_p_->dir_ = to_dir (prop); } else { @@ -153,10 +153,10 @@ Bar_script_engraver::create_items (Request *rq) staff_side_p_->set_victim(text_p_); - Scalar padding = get_property (type_ + "ScriptPadding", 0); - if (padding.length_i() && padding.isnum_b ()) + SCM padding = get_property (type_ + "ScriptPadding", 0); + if (SCM_NUMBERP(padding)) { - staff_side_p_->set_elt_property (padding_scm_sym, gh_double2scm(Real(padding))); + staff_side_p_->set_elt_property (padding_scm_sym, padding); } else { diff --git a/lily/beam-engraver.cc b/lily/beam-engraver.cc index 5ba4ed9306..6022a0a578 100644 --- a/lily/beam-engraver.cc +++ b/lily/beam-engraver.cc @@ -99,21 +99,21 @@ Beam_engraver::do_process_requests () /* urg, must copy to Auto_beam_engraver too */ - Scalar prop = get_property ("beamslopedamping", 0); - if (prop.isnum_b ()) - beam_p_->set_elt_property (damping_scm_sym, gh_int2scm( prop)); + SCM prop = get_property ("beamslopedamping", 0); + if (SCM_NUMBERP(prop)) + beam_p_->set_elt_property (damping_scm_sym, prop); prop = get_property ("autoKneeGap", 0); - if (prop.isnum_b ()) - beam_p_->set_elt_property (auto_knee_gap_scm_sym, gh_int2scm( prop)); + if (SCM_NUMBERP(prop)) + beam_p_->set_elt_property (auto_knee_gap_scm_sym, prop); prop = get_property ("autoInterstaffKneeGap", 0); - if (prop.isnum_b ()) - beam_p_->set_elt_property (auto_interstaff_knee_gap_scm_sym, gh_int2scm( prop)); + if (SCM_NUMBERP(prop)) + beam_p_->set_elt_property (auto_interstaff_knee_gap_scm_sym, prop); prop = get_property ("beamquantisation", 0); - if (prop.isnum_b ()) - beam_p_->quantisation_ = (Beam::Quantisation)(int)prop; + if (SCM_NUMBERP(prop)) + beam_p_->quantisation_ = (Beam::Quantisation)gh_scm2int(prop); announce_element (Score_element_info (beam_p_, reqs_drul_[START])); } @@ -173,7 +173,10 @@ Beam_engraver::acknowledge_element (Score_element_info info) bool stem_grace = stem_l->get_elt_property (grace_scm_sym) != SCM_BOOL_F; - if (get_property ("weAreGraceContext",0).to_bool () != stem_grace) + SCM wg =get_property ("weAreGraceContext",0); + bool wgb= gh_boolean_p (wg) && gh_scm2bool (wg); + + if (wgb!= stem_grace) return; Rhythmic_req *rhythmic_req = dynamic_cast (info.req_l_); diff --git a/lily/breathing-sign-engraver.cc b/lily/breathing-sign-engraver.cc index e9f243532b..2259c17097 100644 --- a/lily/breathing-sign-engraver.cc +++ b/lily/breathing-sign-engraver.cc @@ -21,7 +21,6 @@ TODO: #include "note-head.hh" #include "local-key-item.hh" -#include Breathing_sign_engraver::Breathing_sign_engraver() { @@ -46,9 +45,9 @@ Breathing_sign_engraver::do_process_requests() if(breathing_sign_req_l_) { breathing_sign_p_ = new Breathing_sign; - Scalar prop = get_property ("verticalDirection", 0); - if(prop.isnum_b()) - breathing_sign_p_->set_vertical_position((Direction)int(prop)); + SCM prop = get_property ("verticalDirection", 0); + if(isdir_b(prop)) + breathing_sign_p_->set_vertical_position(to_dir (prop)); announce_element (Score_element_info (breathing_sign_p_, breathing_sign_req_l_)); } diff --git a/lily/breathing-sign.cc b/lily/breathing-sign.cc index 4c36f261aa..0fff51106f 100644 --- a/lily/breathing-sign.cc +++ b/lily/breathing-sign.cc @@ -18,7 +18,6 @@ TODO: --> see breathing-sign-engraver.cc #include "dimensions.hh" #include "direction.hh" -#include Breathing_sign::Breathing_sign () { diff --git a/lily/change-iterator.cc b/lily/change-iterator.cc index e932c794fe..4fa7c519e4 100644 --- a/lily/change-iterator.cc +++ b/lily/change-iterator.cc @@ -21,6 +21,9 @@ Change_iterator::error (String reason) String warn1 = _f ("Can't change `%s' to `%s'", to_type, to_id) + ": " + reason; + /* + GUHG! + */ String warn2= "Change_iterator::do_process_and_next (): " + report_to_l ()->type_str_ + " = `" + report_to_l ()->id_str_ + "': "; diff --git a/lily/chord-name-engraver.cc b/lily/chord-name-engraver.cc index 487514ff26..d0005c8983 100644 --- a/lily/chord-name-engraver.cc +++ b/lily/chord-name-engraver.cc @@ -56,8 +56,8 @@ Chord_name_engraver::do_process_requests () Chord chord (pitch_arr_); Musical_pitch* inversion = 0; - Scalar chord_inversion = get_property ("chordInversion", 0); - if (chord_inversion.to_bool ()) + SCM chord_inversion = get_property ("chordInversion", 0); + if (gh_boolean_p (chord_inversion) && gh_scm2bool (chord_inversion)) { int tonic_i = tonic_req_ ? chord.find_notename_i (tonic_req_->pitch_) : chord.find_tonic_i (); @@ -76,16 +76,16 @@ Chord_name_engraver::do_process_requests () - switch on property, add american (?) chordNameStyle: Chord::american_str (...) - Scalar chordNameStyle = get_property ("chordNameStyle", 0); + SCM chordNameStyle = get_property ("chordNameStyle", 0); if (chordNameStyle == "Banter") item_p->text_str_ = chord.banter_str (inversion); */ item_p->text_str_ = chord.banter_str (inversion); - Scalar style = get_property ("textStyle", 0); - if (style.length_i ()) - item_p->style_str_ = style; + SCM style = get_property ("textStyle", 0); + if (gh_string_p (style)) + item_p->style_str_ = ly_scm2string (style); text_p_arr_.push (item_p); announce_element (Score_element_info (item_p, 0)); diff --git a/lily/clef-engraver.cc b/lily/clef-engraver.cc index 060b0ad2af..68d96cef59 100644 --- a/lily/clef-engraver.cc +++ b/lily/clef-engraver.cc @@ -157,9 +157,9 @@ void Clef_engraver::do_creation_processing() { create_default_b_ = true; // should read property. - Scalar def = get_property ("createInitdefaultClef", 0); - if (def.to_bool ()) // egcs: Scalar to bool is ambiguous - set_type (def); + SCM def = get_property ("createInitdefaultClef", 0); + if (gh_string_p (def)) + set_type (ly_scm2string (def)); if (clef_type_str_.length_i ()) { @@ -191,10 +191,9 @@ Clef_engraver::create_clef() { Clef_item *c= new Clef_item; c->set_elt_property (break_priority_scm_sym, gh_int2scm (-2)); // ugh - String clefstyle = get_property ("clefStyle", 0); - if (clefstyle.length_i ()) - c->set_elt_property (style_scm_sym, - ly_ch_C_to_scm (clefstyle.ch_C())); + SCM clefstyle = get_property ("clefStyle", 0); + if (gh_string_p(clefstyle)) + c->set_elt_property (style_scm_sym, clefstyle); announce_element (Score_element_info (c, clef_req_l_)); clef_p_ = c; @@ -218,8 +217,11 @@ Clef_engraver::do_process_requests() } else if (create_default_b_) { - String type = get_property ("defaultClef", 0); - set_type (type.length_i () ? type : "treble"); + SCM type = get_property ("defaultClef", 0); + if (gh_string_p (type)) + set_type (ly_scm2string (type)); + else + set_type ( "treble"); create_clef (); create_default_b_ =0; } diff --git a/lily/column-x-positions.cc b/lily/column-x-positions.cc index eb4c983701..2532610973 100644 --- a/lily/column-x-positions.cc +++ b/lily/column-x-positions.cc @@ -14,11 +14,11 @@ Column_x_positions::Column_x_positions() { energy_f_ = infinity_f; satisfies_constraints_b_ = false; + force_f_ = 0; } Column_x_positions::~Column_x_positions() { - } diff --git a/lily/dynamic-engraver.cc b/lily/dynamic-engraver.cc index 4c3db32bb4..2933131c8d 100644 --- a/lily/dynamic-engraver.cc +++ b/lily/dynamic-engraver.cc @@ -114,9 +114,6 @@ Dynamic_engraver::do_process_requests() text_p_ = new Text_item; text_p_->text_str_ = loud; // ugh - Scalar prop = get_property ("dynamicStyle", 0); - - text_p_->style_str_ = prop.length_i () ? prop : "dynamic"; staff_side_p_ = new Staff_side_item; staff_side_p_->set_elt_property (script_priority_scm_sym, @@ -127,16 +124,16 @@ Dynamic_engraver::do_process_requests() staff_side_p_->dir_ = DOWN; - prop = get_property ("verticalDirection", 0); - if (prop.isdir_b()) + SCM prop = get_property ("verticalDirection", 0); + if (isdir_b (prop)) { - staff_side_p_->dir_ = Direction (int (prop)); + staff_side_p_->dir_ = to_dir (prop); } prop = get_property ("dynamicDirection", 0); - if (prop.isnum_b ()) + if (SCM_NUMBERP(prop)) { - staff_side_p_->dir_ = (Direction) (int) prop; + staff_side_p_->dir_ = to_dir (prop); } if (absd->dir_) { @@ -144,10 +141,9 @@ Dynamic_engraver::do_process_requests() } prop = get_property ("dynamicPadding", 0); - if (prop.isnum_b ()) + if (SCM_NUMBERP(prop)) { - staff_side_p_->set_elt_property (padding_scm_sym, - gh_double2scm(Real(prop))); + staff_side_p_->set_elt_property (padding_scm_sym, prop); } announce_element (Score_element_info (text_p_, absd)); announce_element (Score_element_info (staff_side_p_, absd)); @@ -173,21 +169,20 @@ Dynamic_engraver::do_process_requests() - Scalar prop = get_property ("verticalDirection", 0); - if (prop.isdir_b()) + SCM prop = get_property ("verticalDirection", 0); + if (isdir_b (prop)) { - to_end_ss_span_p_->dir_ = Direction (int (prop)); + to_end_ss_span_p_->dir_ = to_dir (prop); } prop = get_property ("dynamicDirection", 0); - if (prop.isdir_b ()) + if (isdir_b (prop)) { - to_end_ss_span_p_->dir_ = (Direction) (int) prop; + to_end_ss_span_p_->dir_ = to_dir (prop); } prop = get_property ("dynamicPadding", 0); - if (prop.isnum_b ()) + if (SCM_NUMBERP(prop)) { - to_end_ss_span_p_->set_elt_property (padding_scm_sym, - gh_double2scm(Real(prop))); + to_end_ss_span_p_->set_elt_property (padding_scm_sym,prop); } } } diff --git a/lily/font-size-engraver.cc b/lily/font-size-engraver.cc index 30f47498c9..b8d91ae55c 100644 --- a/lily/font-size-engraver.cc +++ b/lily/font-size-engraver.cc @@ -19,11 +19,11 @@ Font_size_engraver::Font_size_engraver () void Font_size_engraver::do_process_requests () { - Scalar s (get_property ("fontSize", 0)); + SCM s (get_property ("fontSize", 0)); - if (s.length_i () && s.isnum_b ()) + if (SCM_NUMBERP(s)) { - size_i_ = int (s); + size_i_ = gh_scm2int (s); } } diff --git a/lily/gourlay-breaking.cc b/lily/gourlay-breaking.cc index 63a6adc624..0e0ea46f4b 100644 --- a/lily/gourlay-breaking.cc +++ b/lily/gourlay-breaking.cc @@ -40,6 +40,7 @@ struct Break_node { { prev_break_i_ = -1; line_i_ = 0; + demerits_f_ = 0; } }; @@ -56,10 +57,7 @@ Gourlay_breaking::do_solve () const optimal_paths.set_size (breaks.size ()); Break_node first_node ; - first_node.prev_break_i_ = -1; - first_node.line_config_.force_f_ = 0; first_node.line_config_.energy_f_ = 0; - first_node.line_i_ = 0; optimal_paths[0] = first_node; int break_idx=1; diff --git a/lily/grace-position-performer.cc b/lily/grace-position-performer.cc index 41cee8065e..58bdd73d6f 100644 --- a/lily/grace-position-performer.cc +++ b/lily/grace-position-performer.cc @@ -61,9 +61,9 @@ Grace_position_performer::process_acknowledged () shortest_mom = shortest_mom length_mom_; Rational grace_fraction_rat (1, 2); - Scalar prop = get_property ("graceFraction", 0); - if (prop.length_i ()) - grace_fraction_rat = prop.to_rat (); + SCM prop = get_property ("graceFraction", 0); + if (SMOB_IS_TYPE_B(Moment, prop)) + grace_fraction_rat = *SMOB_TO_TYPE (Moment,prop); delay_mom = shortest_mom * grace_fraction_rat; for (int i=0; i < notes_.size (); i++) diff --git a/lily/identifier.cc b/lily/identifier.cc index 0fbaa06185..e8421fb70d 100644 --- a/lily/identifier.cc +++ b/lily/identifier.cc @@ -14,7 +14,7 @@ #include "my-lily-lexer.hh" #include "debug.hh" #include "request.hh" -#include "translator.hh" +#include "translator-group.hh" #include "notename-table.hh" @@ -79,7 +79,7 @@ Class ## _identifier::do_print () const { \ -DEFAULT_PRINT(Translator); +DEFAULT_PRINT(Translator_group); DEFAULT_PRINT(Music); DEFAULT_PRINT(Request); DEFAULT_PRINT(Score); @@ -95,7 +95,7 @@ Class ## _identifier::do_str () const { \ DUMMY_STR(Notename_table); -DUMMY_STR(Translator); +DUMMY_STR(Translator_group); DUMMY_STR(Music); DUMMY_STR(Request); DUMMY_STR(Score); @@ -144,7 +144,7 @@ Class ## _identifier::access_content_ ## Class (bool copy_b) const {\ Class*\ Class ## _identifier::access_content_ ## Class (bool copy_b) const{\ ((Class ## _identifier*)this)->accessed_b_ = true;\ - return copy_b ? (Class*)data_p_->clone() : data_p_;\ + return copy_b ? dynamic_cast (data_p_->clone()) : data_p_;\ } #define IMPLEMENT_ID_CLASS(Class) \ @@ -162,7 +162,7 @@ Class ## _identifier::Class ## _identifier (Class ## _identifier const &s) \ IMPLEMENT_ID_CLASS(Duration); -IMPLEMENT_ID_CLASS(Translator); +IMPLEMENT_ID_CLASS(Translator_group); IMPLEMENT_ID_CLASS(int); IMPLEMENT_ID_CLASS(Real); IMPLEMENT_ID_CLASS(String); @@ -174,7 +174,7 @@ IMPLEMENT_ID_CLASS(Paper_def); IMPLEMENT_ID_CLASS(Notename_table); VIRTUAL_ACCESSOR(Music); VIRTUAL_ACCESSOR(Request); -VIRTUAL_ACCESSOR(Translator); +VIRTUAL_ACCESSOR(Translator_group); DEFAULT_ACCESSOR(Notename_table); DEFAULT_ACCESSOR(Duration); DEFAULT_ACCESSOR(int); diff --git a/lily/includable-lexer.cc b/lily/includable-lexer.cc index 89c7483478..961089bf62 100644 --- a/lily/includable-lexer.cc +++ b/lily/includable-lexer.cc @@ -66,7 +66,7 @@ Includable_lexer::new_input (String s, Sources * global_sources) Whoops. The size argument to yy_create_buffer is not the filelength but a BUFFERSIZE. Maybe this is why reading stdin fucks up. - */ + */ yy_switch_to_buffer (yy_create_buffer (sl->istream_l (), YY_BUF_SIZE)); } @@ -102,10 +102,10 @@ Includable_lexer::close_input () return false; } else - { - yy_switch_to_buffer (state_stack_.pop ()); - return true; - } + { + yy_switch_to_buffer (state_stack_.pop ()); + return true; + } } char const* diff --git a/lily/include/clef-engraver.hh b/lily/include/clef-engraver.hh index 35ae82c19b..47e64af617 100644 --- a/lily/include/clef-engraver.hh +++ b/lily/include/clef-engraver.hh @@ -10,7 +10,6 @@ #ifndef CLEF_GRAV_HH #define CLEF_GRAV_HH -#include "scalar.hh" #include "array.hh" #include "engraver.hh" #include "direction.hh" diff --git a/lily/include/global-translator.hh b/lily/include/global-translator.hh index 721f97ddaf..00f8ed8204 100644 --- a/lily/include/global-translator.hh +++ b/lily/include/global-translator.hh @@ -11,7 +11,7 @@ #define GLOBAL_TRANSLATOR_HH #include "translator-group.hh" -#include "rational.hh" +#include "moment.hh" #include "pqueue.hh" diff --git a/lily/include/header.hh b/lily/include/header.hh index 32907cdbe7..2a31d99266 100644 --- a/lily/include/header.hh +++ b/lily/include/header.hh @@ -15,9 +15,5 @@ #include "scope.hh" -/** Store bibliographical information. The information in the \header - block is read into this struct. Lily does not process this - information. */ -typedef Scope Header; #endif // HEADER_HH diff --git a/lily/include/identifier.hh b/lily/include/identifier.hh index 4d705020fb..ded6ac4a0e 100644 --- a/lily/include/identifier.hh +++ b/lily/include/identifier.hh @@ -16,7 +16,7 @@ #define DECLARE_TYPE_NAME(Class) class Notename_table_identifier; -class Translator_identifier; +class Translator_group_identifier; class Music_identifier; class Articulation_req_identifier; class Symtables_identifier; @@ -51,7 +51,7 @@ struct Identifier : public Input { void error (String) const; String str () const; - IDACCESSOR(Translator) + IDACCESSOR(Translator_group) IDACCESSOR(Notename_table) IDACCESSOR(Music) IDACCESSOR(Symtables) @@ -84,7 +84,7 @@ struct Class ## _identifier : Identifier {\ }\ -DECLARE_ID_CLASS(Translator); +DECLARE_ID_CLASS(Translator_group); DECLARE_ID_CLASS(Duration); DECLARE_ID_CLASS(Notename_table); DECLARE_ID_CLASS(Real); diff --git a/lily/include/key.hh b/lily/include/key.hh index 140db77927..af89371f22 100644 --- a/lily/include/key.hh +++ b/lily/include/key.hh @@ -8,7 +8,6 @@ #define KEY_HH #include "array.hh" -#include "scalar.hh" #include "lily-proto.hh" /// administration of current key in one octave. diff --git a/lily/include/lily-guile.hh b/lily/include/lily-guile.hh index 90773ac8d1..994489c411 100644 --- a/lily/include/lily-guile.hh +++ b/lily/include/lily-guile.hh @@ -24,6 +24,7 @@ SCM ly_set_scm (String name , SCM val); SCM ly_append (SCM a, SCM b); SCM ly_eval (SCM a); SCM ly_func_o (char const* name); +SCM ly_parse_scm (char const* s, int* n); SCM ly_quote_scm (SCM s); void ly_display_scm (SCM s); String ly_scm2string (SCM s); @@ -31,21 +32,32 @@ SCM array_to_list (SCM *a , int l); #include "array.hh" -#include "scalar.hh" - void read_lily_scm_file (String); void init_lily_guile (); #include "ly-symbols.hh" -/* - Do It Yourself GC protection. - */ -SCM ly_protect_scm (SCM s); -SCM ly_unprotect_scm (SCM s); void init_ly_protection (); +unsigned int ly_scm_hash (SCM s); SCM index_cell (SCM cellp, Direction d); + +/* + snarfing. + */ +void add_scm_init_func (void (*)()); + +#define ADD_SCM_INIT_FUNC(name, func)\ +class name ## _scm_initter { \ +public:\ + name ## _scm_initter () \ + { \ + add_scm_init_func (func); \ + } \ +} _ ## name ## _scm_initter; \ +/* end define */ + + #endif // LILY_GUILE_HH diff --git a/lily/include/lily-proto.hh b/lily/include/lily-proto.hh index d3c177c2a6..9e397a0ad2 100644 --- a/lily/include/lily-proto.hh +++ b/lily/include/lily-proto.hh @@ -55,14 +55,14 @@ struct Bracket_req; struct Break_align_item; struct Break_req; struct CHyphen_req; -struct Chord_tremolo; -struct Chord_tremolo_engraver; -struct Chord_tremolo_req; struct Cadenza_req; struct Change_iterator; struct Change_translator; struct Chord; struct Chord_name_engraver; +struct Chord_tremolo; +struct Chord_tremolo_engraver; +struct Chord_tremolo_req; struct Clef_change_req; struct Clef_engraver; struct Clef_item; @@ -113,7 +113,6 @@ struct Lily_stream; struct Line_group_engraver; struct Line_of_score; struct Line_of_staff; -struct Simple_spacer; struct Linestaff; struct Local_key; struct Local_key_engraver; @@ -208,6 +207,7 @@ struct Script_req; struct Separating_group_spanner; struct Sequential_music; struct Simple_music; +struct Simple_spacer; struct Simultaneous_music; struct Single_malt_grouping_item; struct Skip_req; @@ -267,8 +267,7 @@ struct Unfolded_repeat_iterator; struct Vertical_brace; struct Vertical_spanner; struct Volta_spanner; +struct Moment; -typedef Rational Moment; -typedef Scope Header; #endif // LILY_PROTO_HH diff --git a/lily/include/ly-smobs.icc b/lily/include/ly-smobs.icc new file mode 100644 index 0000000000..2bb82ae41b --- /dev/null +++ b/lily/include/ly-smobs.icc @@ -0,0 +1,75 @@ +/* + ly-smobs.icc -- implement smob glue. + + source file of the GNU LilyPond music typesetter + + (c) 1999 Han-Wen Nienhuys + + */ + +#ifndef LY_SMOBS_ICC +#define LY_SMOBS_ICC + +#define IMPLEMENT_SMOBS(CL)\ +long CL::smob_tag_;\ +static scm_smobfuns CL ## _funs = { \ + CL::mark_smob, CL::free_smob, \ + CL::print_smob, 0, \ +}; \ +void \ +CL::init_smobs () \ +{ \ + smob_tag_ = scm_newsmob (&CL ## _funs); \ +} \ + \ + \ +void \ +CL::unsmobify_self () \ +{ \ + SCM s = self_scm_; \ + scm_unprotect_object (s); \ + \ + SCM_CAR(self_scm_) = SCM_EOL; \ + SCM_CDR(self_scm_) = SCM_EOL; \ + self_scm_ = SCM_EOL; \ +} \ +\ +SCM \ +CL::smobify_self () \ +{ \ + if (self_scm_ != SCM_EOL) \ + return self_scm_; \ + \ + /* \ + This is local. We don't assign to self_scm_ directly, to assure \ + that S isn't GC-ed from under us. \ + */ \ + SCM s; \ + \ + SCM_NEWCELL(s); \ + self_scm_ = s; \ + \ + SCM_SETCAR(s,smob_tag_); \ + void * me_p = this; \ + SCM_SETCDR(s,me_p); \ + scm_protect_object (s); \ + \ + do_smobify_self(); \ + return s; \ +} \ +scm_sizet \ +CL::free_smob (SCM ses) \ +{ \ + CL * s = (CL*) SCM_CDR(ses); \ + /* someone else did the deed already; this might be an automatic var.*/ \ + if (s->self_scm_ != ses)\ + return 0; \ + SCM_CAR(ses) = SCM_EOL;\ + \ + return sizeof(CL); \ +} \ +ADD_SCM_INIT_FUNC(CL, CL::init_smobs)\ + + +#endif /* LY_SMOBS_ICC */ + diff --git a/lily/include/ly-symbols.hh b/lily/include/ly-symbols.hh index f0f3dd098d..0e3f1cf746 100644 --- a/lily/include/ly-symbols.hh +++ b/lily/include/ly-symbols.hh @@ -60,6 +60,7 @@ DECLARE_LY_SYMBOL(notewidth); DECLARE_LY_SYMBOL(non_default); DECLARE_LY_SYMBOL(non_rhythmic); DECLARE_LY_SYMBOL(no_staff_support); +DECLARE_LY_SYMBOL(no_stem_extend); DECLARE_LY_SYMBOL(octave_dir); DECLARE_LY_SYMBOL(origin); DECLARE_LY_SYMBOL(output); diff --git a/lily/include/midi-stream.hh b/lily/include/midi-stream.hh index f367d62a2a..06c4f84ffc 100644 --- a/lily/include/midi-stream.hh +++ b/lily/include/midi-stream.hh @@ -7,7 +7,6 @@ #ifndef MIDI_STREAM_HH #define MIDI_STREAM_HH -#include #include "string.hh" /// Midi outputfile diff --git a/lily/include/moment.hh b/lily/include/moment.hh new file mode 100644 index 0000000000..53942657fc --- /dev/null +++ b/lily/include/moment.hh @@ -0,0 +1,53 @@ +/* + moment.hh -- declare Moment + + source file of the GNU LilyPond music typesetter + + (c) 1999 Han-Wen Nienhuys + + */ + +#ifndef MOMENT_HH +#define MOMENT_HH + +#include "smobs.hh" +#include "rational.hh" + +/** + Rationals with glue for Guilification; + */ +struct Moment : public Rational +{ + Moment () { self_scm_ = SCM_EOL; } + Moment (int m) : Rational (m) {self_scm_ = SCM_EOL; } + Moment (int m, int n) : Rational (m,n) {self_scm_ = SCM_EOL; } + Moment (Rational m) : Rational (m) {self_scm_ = SCM_EOL; } + ~Moment (); + + DECLARE_SMOBS; +}; + +IMPLEMENT_ARITHMETIC_OPERATOR (Moment, / ); +IMPLEMENT_ARITHMETIC_OPERATOR (Moment, + ); +IMPLEMENT_ARITHMETIC_OPERATOR (Moment, * ); +IMPLEMENT_ARITHMETIC_OPERATOR (Moment, - ); +IMPLEMENT_ARITHMETIC_OPERATOR (Moment, % ); + +INSTANTIATE_COMPARE (Moment const&, Rational::compare); + + +/** + A really big time-moment. + + Windhoze-suck-suck-suck-suck-suck-thank-you-cygnus + + I get tired of all these incompatibilities. Let's just assume that + INT_MAX is really, really, really big. + + Can't we name this Saint_jut_mom (Sintjuttemis ?) */ + +/* URG ! WE HAVE TWO RATIONAL INFINITIES! */ +const Moment infinity_mom = INT_MAX; + +#endif /* MOMENT_HH */ + diff --git a/lily/include/music-iterator.hh b/lily/include/music-iterator.hh index d5ca0e0560..f7d9c061e3 100644 --- a/lily/include/music-iterator.hh +++ b/lily/include/music-iterator.hh @@ -28,8 +28,6 @@ class Music_iterator { Interpretation_context_handle handle_; protected: - bool playback_b_; // Should use SCMs - Music const * music_l_; /// ugh. JUNKME @@ -75,9 +73,9 @@ public: void set_translator (Translator_group*); /** Get an iterator matching the type of MUS, and use TRANS to find - an accompanying translation unit. Repeated music can be fully - unfolded by setting PLAYING */ - static Music_iterator* static_get_iterator_p (Music const* mus, bool playing); + an accompanying translation unit + */ + static Music_iterator* static_get_iterator_p (Music const* mus); void init_translator (Music const *, Translator_group *); Music_iterator(); diff --git a/lily/include/music-output-def.hh b/lily/include/music-output-def.hh index 9007903714..45644294ee 100644 --- a/lily/include/music-output-def.hh +++ b/lily/include/music-output-def.hh @@ -25,9 +25,6 @@ public: Scope *scope_p_; Array filename_str_arr_; - - - Music_output_def (Music_output_def const&); Music_output_def (); @@ -39,8 +36,8 @@ public: Global_translator *get_global_translator_p (); Translator_group *get_group_translator_p (String type) const; - String get_default_output () const; - void assign_translator (Translator*); + String get_default_output () const; + void assign_translator (Translator_group*); Translator * find_translator_l (String) const; virtual int get_next_default_count () const; }; diff --git a/lily/include/paper-stream.hh b/lily/include/paper-stream.hh index e5429511f6..f7e3bf5624 100644 --- a/lily/include/paper-stream.hh +++ b/lily/include/paper-stream.hh @@ -1,7 +1,6 @@ #ifndef PAPER_STREAM_HH #define PAPER_STREAM_HH -#include #include "string.hh" /** Paper output @@ -23,7 +22,7 @@ public: Paper_stream (String filename); /// delegate conversion to scalar class - Paper_stream &operator <<(Scalar); + Paper_stream &operator <<(String); /// close the file ~Paper_stream(); diff --git a/lily/include/property-inspect.hh b/lily/include/property-inspect.hh new file mode 100644 index 0000000000..31d26ac3e9 --- /dev/null +++ b/lily/include/property-inspect.hh @@ -0,0 +1,20 @@ +/* + property-inspect.hh -- declare various property related funcs. + + source file of the GNU LilyPond music typesetter + + (c) 1999 Han-Wen Nienhuys + + */ + +#ifndef PROPERTY_INSPECT_HH +#define PROPERTY_INSPECT_HH + +#include "direction.hh" +#include "lily-guile.hh" + +bool isdir_b (SCM s); +Direction to_dir (SCM s); + +#endif /* PROPERTY_INSPECT_HH */ + diff --git a/lily/include/scm-hash.hh b/lily/include/scm-hash.hh new file mode 100644 index 0000000000..a0382d0446 --- /dev/null +++ b/lily/include/scm-hash.hh @@ -0,0 +1,32 @@ +/* + scm-hash.hh -- declare Scheme hasher. + + source file of the GNU LilyPond music typesetter + + (c) 1999 Han-Wen Nienhuys + + */ + +#ifndef SCM_HASH_HH +#define SCM_HASH_HH + +#include "lily-guile.hh" +#include "hash-table.hh" +#include "smobs.hh" + +/** + auto resizing hash table. This should come from GUILE. + */ +class Scheme_hash_table : public Hash_table +{ +public: + Scheme_hash_table (); + void operator = (Scheme_hash_table const &); + Scheme_hash_table (Scheme_hash_table const &); + virtual ~Scheme_hash_table (); + DECLARE_SMOBS; + SCM to_alist () const; +}; + +#endif /* SCM_HASH_HH */ + diff --git a/lily/include/score-element.hh b/lily/include/score-element.hh index 25a30532ff..c9b1a30188 100644 --- a/lily/include/score-element.hh +++ b/lily/include/score-element.hh @@ -11,7 +11,7 @@ #include "virtual-methods.hh" #include "graphical-element.hh" #include "lily-guile.hh" - +#include "smobs.hh" typedef void (Score_element::*Score_element_method_pointer) (void); @@ -148,13 +148,8 @@ protected: static Interval dim_cache_callback (Dimension_cache*); public: - SCM smobify_self (); - static SCM mark_smob (SCM); - static scm_sizet free_smob (SCM s); - static int print_smob (SCM s, SCM p, scm_print_state*); - static long smob_tag; - static void init_smobs(); - SCM self_scm_; + + DECLARE_SMOBS; }; diff --git a/lily/include/smobs.hh b/lily/include/smobs.hh new file mode 100644 index 0000000000..a038db298e --- /dev/null +++ b/lily/include/smobs.hh @@ -0,0 +1,50 @@ +/* + smobs.hh -- declare smob related stuff. + + source file of the GNU LilyPond music typesetter + + (c) 1999 Han-Wen Nienhuys + + */ + +#ifndef SMOBS_HH +#define SMOBS_HH + +#include "lily-guile.hh" + +/** + A smob is a C++ class with static member functions to glue it with + Scheme. Every instance carries SELF_SCM_, a pointer to the Scheme + smob of itself. Upon destruction, SELF_SCM_ is set to SCM_EOL. + + smob_free() checks if SELF_SCM_ equals its argument, so we can also + use a smobbified object on the stack: the destruction will happen + before GC hits the object. + + This is discouraged, though, because it causes memory leaks, and has + weird semantics. + + +*/ + +#define DECLARE_SMOBS \ + SCM smobify_self (); \ + static SCM mark_smob (SCM); \ + static scm_sizet free_smob (SCM s); \ + static int print_smob (SCM s, SCM p, scm_print_state*); \ + static long smob_tag_; \ + static void init_smobs(); \ + void unsmobify_self ();\ + void do_smobify_self();\ + SCM self_scm_; + + +/** + Check if S is of the specified C++ class. + */ +#define SMOB_IS_TYPE_B(TYPE, S) (SCM_NIMP((S)) && SCM_CAR((S)) == TYPE::smob_tag_) + +/// Cast S. No checks are done. +#define SMOB_TO_TYPE(TYPE, S) ((TYPE*) SCM_CDR((S))) +#endif /* SMOBS_HH */ + diff --git a/lily/include/translation-property.hh b/lily/include/translation-property.hh index 3e55b46a61..8278dd829d 100644 --- a/lily/include/translation-property.hh +++ b/lily/include/translation-property.hh @@ -11,7 +11,8 @@ #define TRANSLATION_PROPERTY_HH #include "music.hh" -#include "scalar.hh" +#include "protected-scm.hh" + /** Set a property of Translator @@ -20,7 +21,8 @@ class Translation_property : public Music { public: String var_str_; - Scalar value_; + Protected_scm value_; + VIRTUAL_COPY_CONS(Music); protected: diff --git a/lily/include/translator-group.hh b/lily/include/translator-group.hh index 4868940bb8..00da2cd391 100644 --- a/lily/include/translator-group.hh +++ b/lily/include/translator-group.hh @@ -16,6 +16,8 @@ #include "translator.hh" #include "cons.hh" #include "parray.hh" +#include "scm-hash.hh" + // egcs typedef void (Translator::*Method_pointer)(void); @@ -28,7 +30,7 @@ class Translator_group : public virtual Translator { Array consists_str_arr_; Array consists_end_str_arr_; Array accepts_str_arr_; - Dictionary properties_dict_; + Scheme_hash_table properties_dict_; int iterator_count_; friend class Interpretation_context_handle; @@ -36,8 +38,8 @@ class Translator_group : public virtual Translator { Cons_list trans_p_list_; public: - Scalar get_property (String type_str, Translator_group **where_found_l) const; - void set_property (String var_name, Scalar value); + SCM get_property (String type_str, Translator_group **where_found_l) const; + void set_property (String var_name, SCM value); String id_str_; @@ -73,10 +75,11 @@ public: Link_array path_to_acceptable_translator (String alias) const; Translator_group*get_default_interpreter(); + virtual ~Translator_group (); + protected: bool try_music_on_nongroup_children (Music *m); - virtual ~Translator_group (); virtual void do_print () const; virtual void do_process_requests (); virtual void do_add_processing (); diff --git a/lily/include/translator.hh b/lily/include/translator.hh index d2db7b13e4..ec0feb943f 100644 --- a/lily/include/translator.hh +++ b/lily/include/translator.hh @@ -13,7 +13,7 @@ #include "string.hh" #include "lily-proto.hh" #include "virtual-methods.hh" -#include "scalar.hh" +#include "property-inspect.hh" #include "dictionary.hh" #include "parray.hh" #include "input.hh" @@ -59,7 +59,7 @@ public: ask daddy for a feature */ Music_output_def *output_def_l () const; - Scalar get_property (String, Translator_group **) const; + SCM get_property (String, Translator_group **) const; virtual Moment now_mom () const; protected: diff --git a/lily/key-engraver.cc b/lily/key-engraver.cc index 66c1463383..6e571d4fcb 100644 --- a/lily/key-engraver.cc +++ b/lily/key-engraver.cc @@ -48,7 +48,7 @@ Key_engraver::create_key () item_p_->add (m_l.notename_i_, a); } - for (int i = 0 ; i< old_accidental_idx_arr_.size(); i++) + for (int i = 0 ; i < old_accidental_idx_arr_.size(); i++) { Musical_pitch m_l =old_accidental_idx_arr_[i]; int a =m_l.accidental_i_; @@ -80,8 +80,8 @@ Key_engraver::acknowledge_element (Score_element_info info) { if (dynamic_cast (info.req_l_)) { - int i= get_property ("createKeyOnClefChange", 0).length_i (); - if (i) + SCM c = get_property ("createKeyOnClefChange", 0); + if (gh_boolean_p (c) && gh_scm2bool (c)) create_key (); } else if (dynamic_cast (info.elem_l_) @@ -126,11 +126,9 @@ Key_engraver::read_req (Key_change_req const * r) { old_accidental_idx_arr_ = accidental_idx_arr_; key_.clear (); - Scalar prop = get_property ("keyOctaviation", 0); - if (prop.length_i () > 0) - { - key_.multi_octave_b_ = ! prop.to_bool (); - } + SCM prop = get_property ("keyOctaviation", 0); + + key_.multi_octave_b_ = gh_boolean_p (prop) && gh_scm2bool (prop); accidental_idx_arr_.clear (); @@ -196,7 +194,4 @@ Key_engraver::do_post_move_processing () old_accidental_idx_arr_.clear (); } - - ADD_THIS_TRANSLATOR (Key_engraver); - diff --git a/lily/lexer.ll b/lily/lexer.ll index 42e4996c58..7d2d699ead 100644 --- a/lily/lexer.ll +++ b/lily/lexer.ll @@ -4,7 +4,8 @@ source file of the LilyPond music typesetter - (c) 1996,1997 Han-Wen Nienhuys + (c) 1996--1999 Han-Wen Nienhuys + Jan Nieuwenhuizen */ @@ -24,11 +25,13 @@ #include #include +#include "lily-guile.hh" #include "string.hh" #include "string-convert.hh" #include "my-lily-lexer.hh" #include "array.hh" #include "interval.hh" +#include "lily-guile.hh" #include "parser.hh" #include "debug.hh" #include "main.hh" @@ -206,8 +209,7 @@ HYPHEN -- } {RESTNAME} { const char *s = YYText (); - yylval.string = new String (s); - DEBUG_OUT << "rest:"<< yylval.string; + yylval.scm = ly_ch_C_to_scm (s); return RESTNAME; } R { @@ -231,6 +233,27 @@ HYPHEN -- cerr << _ ("white expected") << endl; exit (1); } +# { //embedded scm + //char const* s = YYText () + 1; + char const* s = here_ch_C (); + int n = 0; + if (main_input_b_ && safe_global_b) { + error (_ ("Can't evaluate Scheme in safe mode")); + return SCM_EOL; + } + yylval.scm = ly_parse_scm (s, &n); + DEBUG_OUT << "Scheme: "; + if (flower_dstream) + ly_display_scm (yylval.scm); + + for (int i=0; i < n; i++) + { + yyinput (); + } + char_count_stack_.top () += n; + + return SCM_T; +} { {ALPHAWORD} { return scan_bare_word (YYText ()); @@ -267,6 +290,11 @@ HYPHEN -- \" { DEBUG_OUT << "quoted string: `" << *yylval.string << "'\n"; yy_pop_state (); + + /* yylval is union. Must remember STRING before setting SCM*/ + String *sp = yylval.string; + yylval.scm = ly_ch_C_to_scm (sp->ch_C ()); + delete sp; return STRING; } . { @@ -305,7 +333,8 @@ HYPHEN -- if (c == '{' && c == '}') // brace open is for not confusing dumb tools. here_input ().warning ( "Brace found at end of lyric. Did you forget a space?"); - yylval.string = new String (s); + yylval.scm = ly_ch_C_to_scm (YYText()); + DEBUG_OUT << "lyric : `" << s << "'\n"; return STRING; } @@ -457,8 +486,8 @@ My_lily_lexer::scan_escaped_word (String str) String msg (_f ("unknown escaped string: `\\%s'", str)); LexerError (msg.ch_C ()); DEBUG_OUT << "(string)"; - String *sp = new String (str); - yylval.string=sp; + yylval.scm = ly_ch_C_to_scm(str.ch_C()); + return STRING; } @@ -482,7 +511,7 @@ My_lily_lexer::scan_bare_word (String str) } } - yylval.string=new String (str); + yylval.scm = ly_ch_C_to_scm (str.ch_C()); return STRING; } diff --git a/lily/lily-guile.cc b/lily/lily-guile.cc index 311397cdd8..51b56ca726 100644 --- a/lily/lily-guile.cc +++ b/lily/lily-guile.cc @@ -33,6 +33,62 @@ ly_ch_C_eval_scm (char const*c) return gh_eval_str ((char*)c); } + +/* + Pass string to scm parser, evaluate one expression. + Return result value and #chars read. + + Thanks to Gary Houston + + Need guile-1.3.4 (>1.3 anyway) for ftell on str ports -- jcn +*/ +SCM +ly_parse_scm (char const* s, int* n) +{ + SCM str = gh_str02scm ((char*)s); + SCM port = scm_mkstrport (SCM_INUM0, str, SCM_OPN | SCM_RDNG, + "scm_eval_0str"); + SCM from = scm_ftell (port); + + SCM form; + SCM answer = SCM_UNSPECIFIED; + + /* Read expression from port */ + if (!SCM_EOF_OBJECT_P (form = scm_read (port))) + answer = scm_eval_x (form); + + /* + After parsing + + (begin (foo 1 2)) + + all seems fine, but after parsing + + (foo 1 2) + + read_buf has been advanced to read_pos - 1, + so that scm_ftell returns 1, instead of #parsed chars + */ + + /* + urg: reset read_buf for scm_ftell + shouldn't scm_read () do this for us? + */ + scm_fill_input (port); + SCM to = scm_ftell (port); + *n = gh_scm2int (to) - gh_scm2int (from); + + /* Don't close the port here; if we re-enter this function via a + continuation, then the next time we enter it, we'll get an error. + It's a string port anyway, so there's no advantage to closing it + early. + + scm_close_port (port); + */ + + return answer; +} + /* scm_m_quote doesn't use any env, but needs one for a good signature in GUILE. */ @@ -129,7 +185,7 @@ ly_scm2string (SCM s) char * p = gh_scm2newstr (s , &len); String r (p); - // delete p; + free (p); return r; } @@ -168,14 +224,28 @@ init_functions () scm_make_gsubr ("ly-gulp-file", 1,0, 0, (SCM(*)(...))ly_gulp_file); } -extern void init_symbols (); -extern void init_smobs (); // guh -> .hh +ADD_SCM_INIT_FUNC(funcs, init_functions); + +typedef void (*Void_fptr)(); +Array *scm_init_funcs_; + +void add_scm_init_func (void (*f)()) +{ + if (!scm_init_funcs_) + scm_init_funcs_ = new Array; + + scm_init_funcs_->push (f); +} void init_lily_guile () { - init_symbols(); - init_functions (); - init_smobs (); + for (int i=scm_init_funcs_->size() ; i--;) + (scm_init_funcs_->elem (i)) (); +} + +unsigned int ly_scm_hash (SCM s) +{ + return scm_ihashv (s, ~1u); } diff --git a/lily/local-key-engraver.cc b/lily/local-key-engraver.cc index a6a69fec56..8e773bf05a 100644 --- a/lily/local-key-engraver.cc +++ b/lily/local-key-engraver.cc @@ -58,7 +58,8 @@ Local_key_engraver::process_acknowledged () { if (!key_item_p_ && mel_l_arr_.size()) { - bool forget = get_property ("forgetAccidentals",0).to_bool(); + SCM f = get_property ("forgetAccidentals",0); + bool forget = gh_boolean_p (f) && gh_scm2bool(f); for (int i=0; i < mel_l_arr_.size(); i++) { Item * support_l = support_l_arr_[i]; @@ -126,7 +127,9 @@ Local_key_engraver::do_pre_move_processing() void Local_key_engraver::acknowledge_element (Score_element_info info) { - bool selfgr = get_property ("weAreGraceContext", 0).to_bool (); + SCM wg= get_property ("weAreGraceContext", 0); + + bool selfgr = gh_boolean_p (wg) &&gh_scm2bool (wg); bool he_gr = info.elem_l_->get_elt_property (grace_scm_sym) != SCM_BOOL_F; Grace_align_item * gai = dynamic_cast (info.elem_l_); @@ -159,7 +162,8 @@ Local_key_engraver::do_process_requests() Time_description const * time_C_ = get_staff_info().time_C_; if (time_C_ && !time_C_->whole_in_measure_) { - bool no_res = get_property ("noResetKey",0).to_bool (); + SCM n = get_property ("noResetKey",0); + bool no_res = gh_boolean_p (n) && gh_scm2bool (n); if (!no_res && key_grav_l_) local_key_= key_grav_l_->key_; } diff --git a/lily/local-key-item.cc b/lily/local-key-item.cc index 9953c7550d..6e35416a18 100644 --- a/lily/local-key-item.cc +++ b/lily/local-key-item.cc @@ -7,7 +7,7 @@ */ #include "local-key-item.hh" #include "molecule.hh" -#include "scalar.hh" + #include "lookup.hh" #include "paper-def.hh" #include "musical-request.hh" diff --git a/lily/lookup.cc b/lily/lookup.cc index 1000f37ab6..1181e03925 100644 --- a/lily/lookup.cc +++ b/lily/lookup.cc @@ -15,7 +15,7 @@ #include "lookup.hh" #include "debug.hh" #include "dimensions.hh" -#include "scalar.hh" + #include "paper-def.hh" #include "string-convert.hh" #include "file-path.hh" diff --git a/lily/ly-symbols.cc b/lily/ly-symbols.cc index 719bf6dfba..93edfce560 100644 --- a/lily/ly-symbols.cc +++ b/lily/ly-symbols.cc @@ -29,3 +29,4 @@ init_symbols () } +ADD_SCM_INIT_FUNC(lysyms, init_symbols); diff --git a/lily/lyric-engraver.cc b/lily/lyric-engraver.cc index 37aa4065ee..080546f2f5 100644 --- a/lily/lyric-engraver.cc +++ b/lily/lyric-engraver.cc @@ -44,9 +44,9 @@ Lyric_engraver::do_process_requests() text_p_->text_str_ = req_l_->text_str_; text_p_->text_str_ += " "; // ugh. - Scalar style = get_property ("textStyle", 0); - if (style.length_i ()) - text_p_->style_str_ = style; + SCM style = get_property ("textStyle", 0); + if (gh_string_p(style)) + text_p_->style_str_ = ly_scm2string (style); text_p_->set_elt_property (non_rhythmic_scm_sym, SCM_BOOL_T); diff --git a/lily/melisma-engraver.cc b/lily/melisma-engraver.cc index 62e5d494f9..2bc76c9930 100644 --- a/lily/melisma-engraver.cc +++ b/lily/melisma-engraver.cc @@ -27,10 +27,12 @@ Melisma_engraver::do_try_music (Music *m ) { if (dynamic_cast(m)) { - Scalar plain (get_property ("melismaBusy", 0)); - Scalar slur (get_property ("slurMelismaBusy", 0)); - Scalar tie (get_property ("tieMelismaBusy", 0)); - return plain.to_bool () || slur.to_bool () || tie.to_bool (); + SCM plain (get_property ("melismaBusy", 0)); + SCM slur (get_property ("slurMelismaBusy", 0)); + SCM tie (get_property ("tieMelismaBusy", 0)); + return (gh_boolean_p (plain) && gh_scm2bool (plain)) + || (gh_boolean_p (slur) && gh_scm2bool (slur)) + || (gh_boolean_p (tie) && gh_scm2bool (tie)); } return false; } diff --git a/lily/moment.cc b/lily/moment.cc new file mode 100644 index 0000000000..7b76747d73 --- /dev/null +++ b/lily/moment.cc @@ -0,0 +1,69 @@ +/* + moment.cc -- implement Moment + + source file of the GNU LilyPond music typesetter + + (c) 1999 Han-Wen Nienhuys + + */ + + +#include "lily-guile.hh" +#include "moment.hh" +#include "warn.hh" + +SCM +Moment::mark_smob (SCM s) +{ + return SCM_EOL; +} + + +Moment::~Moment() +{ + self_scm_ = SCM_EOL; +} + +int +Moment::print_smob (SCM s, SCM port, scm_print_state *) +{ + Moment *r = (Moment *) SCM_CDR (s); + + scm_puts ("#str()); + scm_puts ((char *)str.ch_C(), port); + scm_puts (" >", port); + + return 1; +} + +void +Moment::do_smobify_self () +{} + +SCM +make_rational (SCM n, SCM d) +{ + if (SCM_INUMP (n) && SCM_INUMP(d)) + { + Moment *r = new Moment (gh_scm2int (n), gh_scm2int (d)); + return r->smobify_self (); + } + else + { + ::error ("Not a number"); + assert(false); + } +} + +#include "ly-smobs.icc" + +IMPLEMENT_SMOBS(Moment); + +void +init_moments () +{ + scm_make_gsubr ("make-moment", 2 , 0, 0, (SCM(*)(...)) make_rational); +} + +ADD_SCM_INIT_FUNC(moms,init_moments); diff --git a/lily/music-iterator.cc b/lily/music-iterator.cc index e5774c9f32..9de2bb6af7 100644 --- a/lily/music-iterator.cc +++ b/lily/music-iterator.cc @@ -114,7 +114,7 @@ Music_iterator::ok() const } Music_iterator* -Music_iterator::static_get_iterator_p (Music const *m, bool playing) +Music_iterator::static_get_iterator_p (Music const *m) { Music_iterator * p =0; @@ -142,15 +142,14 @@ Music_iterator::static_get_iterator_p (Music const *m, bool playing) p = new Music_wrapper_iterator; else if (Repeated_music const * n = dynamic_cast (m)) { - if (n->fold_b_ && !playing) + if (n->fold_b_) p = new Folded_repeat_iterator; else p = new Unfolded_repeat_iterator; } else assert (0); - - p->playback_b_ = playing; + p->music_l_ = m; return p; @@ -177,7 +176,7 @@ Music_iterator::init_translator (Music const *m, Translator_group *report_l) Music_iterator* Music_iterator::get_iterator_p (Music const*m) const { - Music_iterator*p = static_get_iterator_p (m, playback_b_); + Music_iterator*p = static_get_iterator_p (m); p->init_translator (m, report_to_l()); p->construct_children(); @@ -186,7 +185,6 @@ Music_iterator::get_iterator_p (Music const*m) const Music_iterator::Music_iterator() { - playback_b_ = false; first_b_ = true; } diff --git a/lily/music-output-def.cc b/lily/music-output-def.cc index 6006f038b4..d355840d24 100644 --- a/lily/music-output-def.cc +++ b/lily/music-output-def.cc @@ -42,13 +42,13 @@ Music_output_def::Music_output_def (Music_output_def const &s) for (Scope_iter i (*translator_p_dict_p_); i.ok (); i++) { - Translator * t = i.val ()->access_content_Translator (false); + Translator * t = i.val ()->access_content_Translator_group (false); t-> output_def_l_ = this; } } void -Music_output_def::assign_translator (Translator*tp) +Music_output_def::assign_translator (Translator_group*tp) { String s =tp->type_str_; if (s.empty_b ()) @@ -58,7 +58,7 @@ Music_output_def::assign_translator (Translator*tp) if (translator_p_dict_p_->elem_b (s)) delete translator_p_dict_p_->elem (s); - translator_p_dict_p_->elem (s) = new Translator_identifier (tp, 0); + translator_p_dict_p_->elem (s) = new Translator_group_identifier (tp, 0); tp ->output_def_l_ = this; } @@ -66,7 +66,7 @@ Translator* Music_output_def::find_translator_l (String name) const { if (translator_p_dict_p_->elem_b (name)) - return translator_p_dict_p_->elem (name)->access_content_Translator (false); + return translator_p_dict_p_->elem (name)->access_content_Translator_group (false); if (global_translator_dict_p->elem_b (name)) return global_translator_dict_p->elem(name); diff --git a/lily/my-lily-lexer.cc b/lily/my-lily-lexer.cc index 49d84d6335..de4ea2373a 100644 --- a/lily/my-lily-lexer.cc +++ b/lily/my-lily-lexer.cc @@ -11,6 +11,7 @@ #include "notename-table.hh" #include "interval.hh" #include "identifier.hh" +#include "lily-guile.hh" #include "parser.hh" #include "keyword.hh" #include "my-lily-lexer.hh" @@ -19,6 +20,7 @@ #include "main.hh" #include "scope.hh" #include "input.hh" +#include "moment.hh" static Keyword_ent the_key_tab[]={ {"autochange", AUTOCHANGE}, @@ -64,8 +66,6 @@ static Keyword_ent the_key_tab[]={ {"repeat", REPEAT}, {"repetitions", REPETITIONS}, {"addlyrics", ADDLYRICS}, - {"scm", SCM_T}, - {"scmfile", SCMFILE}, {"score", SCORE}, {"script", SCRIPT}, {"shape", SHAPE}, diff --git a/lily/my-lily-parser.cc b/lily/my-lily-parser.cc index aaae6a6d94..11ae2eeda4 100644 --- a/lily/my-lily-parser.cc +++ b/lily/my-lily-parser.cc @@ -14,6 +14,7 @@ #include "music-list.hh" #include "musical-request.hh" #include "command-request.hh" +#include "lily-guile.hh" #include "parser.hh" #include "scope.hh" #include "file-results.hh" diff --git a/lily/note-heads-engraver.cc b/lily/note-heads-engraver.cc index 7ac5c8ade6..99477e09d7 100644 --- a/lily/note-heads-engraver.cc +++ b/lily/note-heads-engraver.cc @@ -49,7 +49,7 @@ Note_heads_engraver::do_process_requests() if (note_p_arr_.size ()) return ; - String noteheadstyle = get_property ("noteHeadStyle", 0); + SCM noteheadstyle = get_property ("noteHeadStyle", 0); for (int i=0; i < note_req_l_arr_.size (); i++) { Note_head *note_p = new Note_head; @@ -62,10 +62,10 @@ Note_heads_engraver::do_process_requests() note_p->dots_l_ = d; d->dots_i_ = note_req_l->duration_.dots_i_; - Scalar dir = get_property ("verticalDirection",0); - if (dir.isdir_b()) + SCM dir = get_property ("verticalDirection",0); + if (isdir_b (dir)) { - d->resolve_dir_ = (Direction)(int)dir; + d->resolve_dir_ = to_dir (dir); } announce_element (Score_element_info (d,0)); @@ -73,12 +73,13 @@ Note_heads_engraver::do_process_requests() } note_p->position_i_ = note_req_l->pitch_.steps (); - if (noteheadstyle == "transparent") - note_p->set_elt_property (transparent_scm_sym, SCM_BOOL_T); - else - note_p->set_elt_property (style_scm_sym, - ly_ch_C_to_scm (noteheadstyle.ch_C())); - + if (gh_string_p (noteheadstyle)) + { + if (ly_scm2string (noteheadstyle) == "transparent") + note_p->set_elt_property (transparent_scm_sym, SCM_BOOL_T); + else + note_p->set_elt_property (style_scm_sym, noteheadstyle); + } Score_element_info itinf (note_p,note_req_l); announce_element (itinf); diff --git a/lily/note-performer.cc b/lily/note-performer.cc index 1f88de4aad..f455204067 100644 --- a/lily/note-performer.cc +++ b/lily/note-performer.cc @@ -37,9 +37,9 @@ Note_performer::do_process_requests () { int transposing_i = 0; //urg - Scalar prop = get_property ("transposing", 0); - if (!prop.empty_b () && prop.isnum_b ()) - transposing_i = prop; + SCM prop = get_property ("transposing", 0); + if (SCM_NUMBERP(prop)) + transposing_i = gh_scm2int (prop); while (note_req_l_arr_.size ()) { diff --git a/lily/paper-def.cc b/lily/paper-def.cc index dc99d4d87b..c5a9146f81 100644 --- a/lily/paper-def.cc +++ b/lily/paper-def.cc @@ -209,7 +209,7 @@ Paper_def::reset_default_count() } Paper_outputter* -Paper_def::paper_outputter_p (Paper_stream* os_p, Header* header_l, String origin_str) const +Paper_def::paper_outputter_p (Paper_stream* os_p, Scope* header_l, String origin_str) const { Paper_outputter* p = new Paper_outputter (os_p); diff --git a/lily/paper-outputter.cc b/lily/paper-outputter.cc index fc628db526..b58ba0eeaf 100644 --- a/lily/paper-outputter.cc +++ b/lily/paper-outputter.cc @@ -161,7 +161,7 @@ Paper_outputter::output_comment (String str) { if (String (output_global_ch) == "scm") { - *outstream_l_ << "; " << str << '\n'; + *outstream_l_ << "; " << str << "\n"; } else { diff --git a/lily/paper-score.cc b/lily/paper-score.cc index ef983e8053..d8cba19d43 100644 --- a/lily/paper-score.cc +++ b/lily/paper-score.cc @@ -50,6 +50,9 @@ Paper_score::typeset_element (Score_element * elem_p) SCM_CDR(element_smob_list_) = gh_cons (elem_p->self_scm_, SCM_CDR (element_smob_list_)); + elem_p->set_elt_property (ly_symbol ("full-name"), + gh_str02scm((char*)elem_p->name())); + scm_unprotect_object (elem_p->self_scm_); } diff --git a/lily/paper-stream.cc b/lily/paper-stream.cc index 2f791019ad..f7844a8995 100644 --- a/lily/paper-stream.cc +++ b/lily/paper-stream.cc @@ -42,7 +42,7 @@ Paper_stream::~Paper_stream () // print string. don't forget indent. Paper_stream& -Paper_stream::operator << (Scalar s) +Paper_stream::operator << (String s) { for (char const *cp = s.ch_C (); *cp; cp++) { diff --git a/lily/parser.yy b/lily/parser.yy index 4d84041f38..c5b3927e59 100644 --- a/lily/parser.yy +++ b/lily/parser.yy @@ -5,14 +5,13 @@ source file of the GNU LilyPond music typesetter - (c) 1997 Han-Wen Nienhuys + (c) 1997--1999 Han-Wen Nienhuys Jan Nieuwenhuizen */ #include #include "lily-guile.hh" #include "notename-table.hh" -#include "scalar.hh" #include "translation-property.hh" #include "lookup.hh" #include "misc.hh" @@ -79,11 +78,11 @@ print_mudela_versions (ostream &os) Array* realarr; Array *pitch_arr; Link_array *reqvec; - Array * strvec; Array *intvec; Notename_table *chordmodifiertab; Duration *duration; Identifier *id; + String * string; Music *music; Music_list *music_list; Score *score; @@ -98,11 +97,14 @@ print_mudela_versions (ostream &os) Paper_def *paper; Real real; Request * request; - Scalar *scalar; - String *string; + /* 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; - Translator* trans; + Translator_group* trans; char c; int i; int ii[10]; @@ -170,7 +172,6 @@ yylex (YYSTYPE *s, void * v_l) %token REPETITIONS %token ADDLYRICS %token SCM_T -%token SCMFILE %token SCORE %token SCRIPT %token SHAPE @@ -206,8 +207,9 @@ yylex (YYSTYPE *s, void * v_l) %token MIDI_IDENTIFIER %token PAPER_IDENTIFIER %token REAL -%token DURATION RESTNAME -%token STRING +%token DURATION RESTNAME +%token STRING +%token SCM_T %token UNSIGNED @@ -221,7 +223,7 @@ yylex (YYSTYPE *s, void * v_l) %type abbrev_type %type int unsigned %type script_dir -%type optional_modality +%type optional_modality %type identifier_init %type steno_duration optional_notemode_duration %type entered_notemode_duration explicit_duration @@ -238,7 +240,7 @@ yylex (YYSTYPE *s, void * v_l) %type midi_block midi_body %type duration_length -%type scalar +%type embedded_scm scalar %type Music Sequential_music Simultaneous_music Music_sequence %type relative_music re_rhythmed_music %type property_def translator_change @@ -250,11 +252,11 @@ yylex (YYSTYPE *s, void * v_l) %type command_req verbose_command_req %type extender_req %type hyphen_req -%type string +%type string %type score_block score_body %type real_array -%type script_abbreviation +%type script_abbreviation %type translator_spec_block translator_spec_body %type tempo_request %type notenames_body notenames_block chordmodifiers_block @@ -300,21 +302,14 @@ toplevel_expression: Midi_def_identifier ($1, MIDI_IDENTIFIER); THIS->lexer_p_->set_identifier ("$defaultmidi", id) } - | embedded_scm { - } + | embedded_scm { + // junk value + } ; embedded_scm: - SCMFILE STRING semicolon { - read_lily_scm_file (*$2); - delete $2; - } - | SCM_T STRING semicolon { - if (THIS->lexer_p_->main_input_b_ && safe_global_b) - error (_("Can't evaluate Scheme in safe mode")); - gh_eval_str ($2->ch_l ()); - delete $2; - }; + SCM_T + ; chordmodifiers_block: @@ -336,10 +331,9 @@ notenames_body: $$ = $1-> access_content_Notename_table(true); } | notenames_body STRING '=' explicit_musical_pitch { - (*$$)[*$2] = *$4; + (*$$)[ly_scm2string ($2)] = *$4; delete $4; - delete $2; } ; @@ -369,7 +363,7 @@ assignment: THIS->remember_spot (); } /* cont */ '=' identifier_init { - THIS->lexer_p_->set_identifier (*$1, $4); + THIS->lexer_p_->set_identifier (ly_scm2string ($1), $4); $4->init_b_ = THIS->init_parse_b_; $4->set_spot (THIS->pop_spot ()); } @@ -396,7 +390,7 @@ identifier_init: } | translator_spec_block { - $$ = new Translator_identifier ($1, TRANS_IDENTIFIER); + $$ = new Translator_group_identifier ($1, TRANS_IDENTIFIER); } | Music { $$ = new Music_identifier ($1, MUSIC_IDENTIFIER); @@ -412,7 +406,7 @@ identifier_init: $$ = new Real_identifier (new Real ($1), REAL_IDENTIFIER); } | string { - $$ = new String_identifier ($1, STRING_IDENTIFIER); + $$ = new String_identifier (new String (ly_scm2string ($1)), STRING_IDENTIFIER); } | int { $$ = new int_identifier (new int ($1), INT_IDENTIFIER); @@ -428,23 +422,23 @@ translator_spec_block: translator_spec_body: TRANS_IDENTIFIER { - $$ = $1->access_content_Translator (true); - Translator_group * tg = dynamic_cast ($$); - if (!tg) - THIS->parser_error (_("Need a translator group for a context")); + $$ = $1->access_content_Translator_group (true); $$-> set_spot (THIS->here_input ()); } | TYPE STRING semicolon { - Translator* t = get_translator_l (*$2); + Translator* t = get_translator_l (ly_scm2string ($2)); Translator_group * tg = dynamic_cast (t); if (!tg) THIS->parser_error (_("Need a translator group for a context")); - t = t->clone (); - t->set_spot (THIS->here_input ()); - $$ = t; - delete $2; + tg = dynamic_cast (t->clone ()); + tg->set_spot (THIS->here_input ()); + $$ = tg; + } + | translator_spec_body STRING '=' embedded_scm { + Translator_group* tg = dynamic_cast ($$); + tg->set_property (ly_scm2string ($2), $4); } | translator_spec_body STRING '=' identifier_init semicolon { Identifier* id = $4; @@ -452,39 +446,33 @@ translator_spec_body: Real_identifier *r= dynamic_cast(id); int_identifier *i = dynamic_cast (id); - String str; - if (s) str = *s->access_content_String (false); - if (i) str = to_str (*i->access_content_int (false)); - if (r) str = to_str (*r->access_content_Real (false)); + SCM v; + if (s) v = ly_ch_C_to_scm (s->access_content_String (false)->ch_C()); + if (i) v = gh_int2scm (*i->access_content_int (false)); + if (r) v = gh_double2scm (*r->access_content_Real (false)); if (!s && !i && !r) THIS->parser_error (_("Wrong type for property value")); delete $4; /* ugh*/ Translator_group* tg = dynamic_cast ($$); - if (!tg) - THIS->parser_error (_("Need a translator group for a context")); - tg->set_property (*$2, str); + + tg->set_property (ly_scm2string ($2), v); } | translator_spec_body NAME STRING semicolon { - $$->type_str_ = *$3; - delete $3; + $$->type_str_ = ly_scm2string ($3); } | translator_spec_body CONSISTS STRING semicolon { - dynamic_cast ($$)-> set_element (*$3, true); - delete $3; + dynamic_cast ($$)-> set_element (ly_scm2string ($3), true); } | translator_spec_body CONSISTSEND STRING semicolon { - dynamic_cast ($$)-> set_element (*$3, true); - delete $3; + dynamic_cast ($$)-> set_element (ly_scm2string ($3), true); } | translator_spec_body ACCEPTS STRING semicolon { - dynamic_cast ($$)-> set_acceptor (*$3, true); - delete $3; + dynamic_cast ($$)-> set_acceptor (ly_scm2string ($3), true); } | translator_spec_body REMOVE STRING semicolon { - dynamic_cast ($$)-> set_element (*$3, false); - delete $3; + dynamic_cast ($$)-> set_element (ly_scm2string ($3), false); } ; @@ -558,8 +546,7 @@ paper_def_body: } | paper_def_body int '=' FONT STRING { // ugh, what a syntax Lookup * l = new Lookup; - l->font_name_ = *$5; - delete $5; + l->font_name_ = ly_scm2string ($5); $$->set_lookup ($2, l); } | paper_def_body assignment semicolon { @@ -731,9 +718,8 @@ Repeated_music: Repeated_music * r = new Repeated_music ($4, $3 >? 1, m); $$ = r; - r->fold_b_ = (*$2 == "fold"); - r->volta_fold_b_ = (*$2 == "volta"); - delete $2; + r->fold_b_ = (ly_scm2string ($2) == "fold"); + r->volta_fold_b_ = (ly_scm2string ($2) == "volta"); r->set_spot ($4->spot ()); } ; @@ -786,15 +772,15 @@ Composite_music: CONTEXT STRING Music { Context_specced_music *csm = new Context_specced_music ($3); - csm->translator_type_str_ = *$2; + csm->translator_type_str_ = ly_scm2string ($2); csm->translator_id_str_ = ""; - delete $2; + $$ = csm; } | AUTOCHANGE STRING Music { - Auto_change_music * chm = new Auto_change_music (*$2, $3); - delete $2; + Auto_change_music * chm = new Auto_change_music (ly_scm2string ($2), $3); + $$ = chm; chm->set_spot ($3->spot ()); } @@ -804,10 +790,8 @@ Composite_music: | CONTEXT STRING '=' STRING Music { Context_specced_music *csm = new Context_specced_music ($5); - csm->translator_type_str_ = *$2; - csm->translator_id_str_ = *$4; - delete $2; - delete $4; + csm->translator_type_str_ = ly_scm2string ($2); + csm->translator_id_str_ = ly_scm2string ($4); $$ = csm; } @@ -873,38 +857,33 @@ re_rhythmed_music: translator_change: TRANSLATOR STRING '=' STRING { Change_translator * t = new Change_translator; - t-> change_to_type_str_ = *$2; - t-> change_to_id_str_ = *$4; + t-> change_to_type_str_ = ly_scm2string ($2); + t-> change_to_id_str_ = ly_scm2string ($4); $$ = t; $$->set_spot (THIS->here_input ()); - delete $2; - delete $4; } ; property_def: - PROPERTY STRING '.' STRING '=' scalar { + PROPERTY STRING '.' STRING '=' scalar { Translation_property *t = new Translation_property; - t-> var_str_ = *$4; - t-> value_ = *$6; + t->var_str_ = ly_scm2string ($4); + t->value_ = $6; Context_specced_music *csm = new Context_specced_music (t); $$ = csm; $$->set_spot (THIS->here_input ()); - csm-> translator_type_str_ = *$2; - - delete $2; - delete $4; - delete $6; + csm-> translator_type_str_ = ly_scm2string ($2); } ; scalar: - string { $$ = new Scalar (*$1); delete $1; } - | int { $$ = new Scalar ($1); } + string { $$ = $1; } + | int { $$ = gh_int2scm ($1); } + | embedded_scm { $$ = $1; } ; @@ -992,12 +971,11 @@ abbrev_command_req: verbose_command_req: BAR STRING { - $$ = new Bar_req (*$2); - delete $2; + $$ = new Bar_req (ly_scm2string ($2)); } | MARK STRING { - $$ = new Mark_req (*$2); - delete $2; + $$ = new Mark_req (ly_scm2string ($2)); + } | MARK unsigned { $$ = new Mark_req (to_str ($2)); @@ -1031,9 +1009,10 @@ verbose_command_req: delete $2; } | CLEF STRING { - $$ = new Clef_change_req (*$2); - delete $2; + $$ = new Clef_change_req (ly_scm2string ($2)); + } +/* UGH. optional. */ | KEY NOTENAME_PITCH optional_modality { Key_change_req *key_p= new Key_change_req; key_p->key_.pitch_arr_.push (*$2); @@ -1073,10 +1052,9 @@ request_that_take_dir: gen_text_def | verbose_request | script_abbreviation { - Identifier*i = THIS->lexer_p_->lookup_identifier ("dash-" + *$1); + Identifier*i = THIS->lexer_p_->lookup_identifier ("dash-" + ly_scm2string ($1)); Articulation_req *a = new Articulation_req; a->articulation_str_ = *i->access_content_String (false); - delete $1; $$ = a; } ; @@ -1098,17 +1076,16 @@ verbose_request: } | TEXTSCRIPT STRING STRING { Text_script_req *ts_p = new Text_script_req; - ts_p-> text_str_ = *$2; - ts_p-> style_str_ = *$3; + ts_p-> text_str_ = ly_scm2string ($2); + ts_p-> style_str_ = ly_scm2string ($3); ts_p->set_spot (THIS->here_input ()); - delete $3; - delete $2; + $$ = ts_p; } | SPANREQUEST int STRING { Span_req * sp_p = new Span_req; sp_p-> span_dir_ = Direction($2); - sp_p->span_type_str_ = *$3; + sp_p->span_type_str_ = ly_scm2string ($3); sp_p->set_spot (THIS->here_input ()); $$ = sp_p; } @@ -1120,10 +1097,10 @@ verbose_request: } | SCRIPT STRING { Articulation_req * a = new Articulation_req; - a->articulation_str_ = *$2; + a->articulation_str_ = ly_scm2string ($2); a->set_spot (THIS->here_input ()); $$ = a; - delete $2; + } ; @@ -1283,8 +1260,8 @@ gen_text_def: string { Text_script_req *t = new Text_script_req; $$ = t; - t->text_str_ = *$1; - delete $1; + t->text_str_ = ly_scm2string ($1); + $$->set_spot (THIS->here_input ()); } | DIGIT { @@ -1298,22 +1275,22 @@ gen_text_def: script_abbreviation: '^' { - $$ = new String ("hat"); + $$ = gh_str02scm ("hat"); } | '+' { - $$ = new String ("plus"); + $$ = gh_str02scm("plus"); } | '-' { - $$ = new String ("dash"); + $$ = gh_str02scm ("dash"); } | '|' { - $$ = new String ("bar"); + $$ = gh_str02scm ("bar"); } | '>' { - $$ = new String ("larger"); + $$ = gh_str02scm ("larger"); } | '.' { - $$ = new String ("dot"); + $$ = gh_str02scm ("dot"); } ; @@ -1429,8 +1406,8 @@ simple_element: $$ = v; } | RESTNAME optional_notemode_duration { - $$ = THIS->get_rest_element (*$1, $2); - delete $1; // delete notename + $$ = THIS->get_rest_element (ly_scm2string ($1), $2); + } | MEASURES optional_notemode_duration { Multi_measure_rest_req* m = new Multi_measure_rest_req; @@ -1455,8 +1432,8 @@ simple_element: | STRING optional_notemode_duration { if (!THIS->lexer_p_->lyric_state_b ()) THIS->parser_error (_ ("Have to be in Lyric mode for lyrics")); - $$ = THIS->get_word_element (*$1, $2); - delete $1; + $$ = THIS->get_word_element (ly_scm2string ($1), $2); + } | chord { if (!THIS->lexer_p_->chord_state_b ()) @@ -1594,11 +1571,10 @@ string: $$ = $1; } | STRING_IDENTIFIER { - $$ = $1->access_content_String (true); + $$ = ly_ch_C_to_scm ($1->access_content_String (true)->ch_C ()); } | string '+' string { - *$$ += *$3; - delete $3; + $$ = scm_string_append (scm_listify ($1, $3, SCM_UNDEFINED)); } ; diff --git a/lily/property-inspect.cc b/lily/property-inspect.cc new file mode 100644 index 0000000000..5e29f4160b --- /dev/null +++ b/lily/property-inspect.cc @@ -0,0 +1,27 @@ +/* + property-inspect.cc -- implement Property inspect funcs. + + source file of the GNU LilyPond music typesetter + + (c) 1999 Han-Wen Nienhuys + + */ + +#include "property-inspect.hh" + +bool +isdir_b (SCM s) +{ + if (SCM_NUMBERP (s)) + { + int i = gh_int2scm (s); + return i>= -1 && i <= 1; + } + return false; +} + +Direction +to_dir (SCM s) +{ + return (Direction) gh_scm2int (s); +} diff --git a/lily/protected-scm.cc b/lily/protected-scm.cc index cf06c84a5d..1d8fd16b2a 100644 --- a/lily/protected-scm.cc +++ b/lily/protected-scm.cc @@ -10,14 +10,6 @@ #include "lily-guile.hh" #include "main.hh" -#ifdef LYPROT -#define PROTECT ly_protect_scm -#define UNPROTECT ly_unprotect_scm -#else -#define PROTECT scm_protect_object -#define UNPROTECT scm_unprotect_object -#endif - Protected_scm::Protected_scm () { object_ = 0; @@ -25,12 +17,12 @@ Protected_scm::Protected_scm () Protected_scm::Protected_scm (SCM s) { - object_ = s ? PROTECT (s): 0; + object_ = s ? scm_protect_object (s): 0; } Protected_scm::Protected_scm (Protected_scm const &s) { - object_ = s.object_ ? PROTECT (s.object_) : 0; + object_ = s.object_ ? scm_protect_object (s.object_) : 0; } Protected_scm & @@ -39,9 +31,9 @@ Protected_scm::operator =(SCM s) if (object_ == s) return *this; if (object_) - UNPROTECT(object_); + scm_unprotect_object(object_); - object_ = s ? PROTECT (s): 0; + object_ = s ? scm_protect_object (s): 0; return *this; } @@ -56,8 +48,7 @@ Protected_scm::~Protected_scm () { if (object_) { - UNPROTECT (object_); - object_ =0L; // be nice to conservative GC + scm_unprotect_object (object_); } } diff --git a/lily/repeat-engraver.cc b/lily/repeat-engraver.cc index c716bb1243..3be9fb02e2 100644 --- a/lily/repeat-engraver.cc +++ b/lily/repeat-engraver.cc @@ -55,7 +55,8 @@ Repeat_engraver::queue_events () Music_sequence* alt = repeated_music_l_->alternatives_p_; Moment walk_mom = now_mom () + repeated_music_l_->repeat_body_p_->length_mom (); - bool create_volta = ! get_property ("noVoltaBraces",0).to_bool (); + SCM novolta = get_property ("noVoltaBraces",0); + bool create_volta = gh_boolean_p (novolta) && !gh_scm2bool (novolta); Cons_list becel; becel.append (new Bar_create_event (now_mom (), "|:")); @@ -101,11 +102,10 @@ Repeat_engraver::queue_events () becel.append (c); last_number = volta_number; volta_number ++; - Scalar l (get_property ("voltaSpannerDuration", 0)); - if (l.length_i ()) // voltaSpannerDuration OK? + SCM l (get_property ("voltaSpannerDuration", 0)); + if (SMOB_IS_TYPE_B (Moment, l)) { - - Moment vSD_mom = l.to_rat(); + Moment vSD_mom = *SMOB_TO_TYPE (Moment,l); if ( vSD_mom < i->car_->length_mom() ) // terminate volta early ? { vSD_mom += walk_mom; diff --git a/lily/rest-engraver.cc b/lily/rest-engraver.cc index d3436d462b..939baa2161 100644 --- a/lily/rest-engraver.cc +++ b/lily/rest-engraver.cc @@ -58,10 +58,9 @@ Rest_engraver::do_process_requests () } if (rest_p_->balltype_i_ >= 2) { - String reststyle = get_property ("restStyle", 0); - if (reststyle.length_i ()) - rest_p_->set_elt_property (style_scm_sym, - ly_ch_C_to_scm (reststyle.ch_C())); + SCM reststyle = get_property ("restStyle", 0); + if (gh_string_p (reststyle)) + rest_p_->set_elt_property (style_scm_sym,reststyle); } announce_element (Score_element_info (rest_p_, rest_req_l_)); } diff --git a/lily/rhythmic-column-engraver.cc b/lily/rhythmic-column-engraver.cc index 81e0cb65bf..914a2c2ecf 100644 --- a/lily/rhythmic-column-engraver.cc +++ b/lily/rhythmic-column-engraver.cc @@ -58,8 +58,8 @@ Rhythmic_column_engraver::process_acknowledged () stem_l_ = 0; } - - bool wegrace = get_property ("weAreGraceContext",0).to_bool (); + SCM wg = get_property ("weAreGraceContext",0); + bool wegrace = gh_boolean_p (wg) && gh_scm2bool (wg); if (!wegrace) for (int i=0; i < grace_slur_endings_.size(); i++) @@ -71,7 +71,9 @@ Rhythmic_column_engraver::process_acknowledged () void Rhythmic_column_engraver::acknowledge_element (Score_element_info i) { - if ((get_property ("weAreGraceContext",0).to_bool () != + SCM wg = get_property ("weAreGraceContext",0); + bool wegrace = gh_boolean_p (wg) && gh_scm2bool (wg); + if ((wegrace != (i.elem_l_->get_elt_property (grace_scm_sym) != SCM_BOOL_F)) && !dynamic_cast (i.elem_l_)) return ; @@ -105,18 +107,16 @@ Rhythmic_column_engraver::do_pre_move_processing() { if (ncol_p_) { - Scalar sh = get_property ("horizontalNoteShift", 0); - if (sh.isnum_b ()) + SCM sh = get_property ("horizontalNoteShift", 0); + if (SCM_NUMBERP(sh)) { - ncol_p_->set_elt_property (horizontal_shift_scm_sym, - gh_int2scm (int (sh))); + ncol_p_->set_elt_property (horizontal_shift_scm_sym, sh); } sh = get_property ("forceHorizontalShift" ,0); - if (sh.isnum_b ()) + if (SCM_NUMBERP(sh)) { - ncol_p_->set_elt_property (force_hshift_scm_sym, - gh_double2scm (double (sh))); + ncol_p_->set_elt_property (force_hshift_scm_sym, sh); } typeset_element (ncol_p_); diff --git a/lily/scm-hash.cc b/lily/scm-hash.cc new file mode 100644 index 0000000000..043cb23949 --- /dev/null +++ b/lily/scm-hash.cc @@ -0,0 +1,93 @@ +/* + scm-hash.cc -- implement Scheme_hash_table + + source file of the GNU LilyPond music typesetter + + (c) 1999 Han-Wen Nienhuys + + */ + +#include "scm-hash.hh" +#include "hash-table-iter.hh" + +Scheme_hash_table::Scheme_hash_table () +{ + hash_func_ = ly_scm_hash; + self_scm_ = SCM_EOL; + smobify_self (); +} + +void +Scheme_hash_table::operator =(Scheme_hash_table const & src) +{ + Hash_table::operator = (src); + + // we do not copy the self_scm_ field! +} + +void +Scheme_hash_table::do_smobify_self () +{ +} + +#include "ly-smobs.icc" +IMPLEMENT_SMOBS(Scheme_hash_table); + +SCM +Scheme_hash_table::mark_smob (SCM s) +{ + /* + can't typecheck naively, since GC bit lives in CAR of S + */ + //assert (SMOB_IS_TYPE_B (Scheme_hash_table, s)); + + Scheme_hash_table *me = SMOB_TO_TYPE(Scheme_hash_table,s); + for (Hash_table_iter i (*me); i.ok(); i++) + { + scm_gc_mark (i.key()); + scm_gc_mark (i.val ()); + } + return SCM_EOL; +} + + +Scheme_hash_table::Scheme_hash_table (Scheme_hash_table const &src) + : Hash_table (src) +{ + hash_func_ = src.hash_func_; + self_scm_ = SCM_EOL; + smobify_self (); +} + +int +Scheme_hash_table::print_smob (SCM s, SCM p, scm_print_state*ps) +{ + assert (SMOB_IS_TYPE_B (Scheme_hash_table, s)); + Scheme_hash_table *me = SMOB_TO_TYPE(Scheme_hash_table,s); + for (Hash_table_iter i (*me); i.ok(); i++) + { + scm_display (i.key(), p); + scm_puts (" = ",p); + scm_display (i.val (), p); + scm_puts ("\n",p); + } + return 1; +} + + + + +Scheme_hash_table::~Scheme_hash_table( ) +{ + unsmobify_self (); +} + +SCM +Scheme_hash_table::to_alist () const +{ + SCM l = SCM_EOL; + for (Hash_table_iter i (*this); i.ok(); i++) + l = gh_cons (gh_cons (i.key (), i.val()), l); + return l; +} + diff --git a/lily/scope.cc b/lily/scope.cc index e58ad798cb..be98f18612 100644 --- a/lily/scope.cc +++ b/lily/scope.cc @@ -44,14 +44,15 @@ Scope::Scope (Scope const&s) } } -unsigned int scm_hash (Protected_scm s) +unsigned int ly_pscm_hash (Protected_scm s) { - return scm_ihashv (s, ~1u); + return ly_scm_hash (s); } + Scope::Scope () { - hash_func_ = scm_hash; + hash_func_ = ly_pscm_hash; } bool diff --git a/lily/score-element.cc b/lily/score-element.cc index 9282bfc010..a8a82a8a87 100644 --- a/lily/score-element.cc +++ b/lily/score-element.cc @@ -70,7 +70,7 @@ Score_element::Score_element (Score_element const&s) Score_element::~Score_element() { - delete output_p_; + assert (!output_p_); assert (status_i_ >=0); status_i_ = -1; } @@ -435,30 +435,6 @@ Score_element::find_broken_piece (Line_of_score*) const return 0; } -static scm_smobfuns score_elt_funs = { - Score_element::mark_smob, Score_element::free_smob, - Score_element::print_smob, 0, -}; - - -SCM -Score_element::smobify_self () -{ - if (self_scm_ != SCM_EOL) - return self_scm_; - - SCM s; - SCM_NEWCELL(s); - SCM_SETCAR(s,smob_tag); - void * me_p = this; - SCM_SETCDR(s,me_p); - scm_protect_object (s); - self_scm_ = s; - - scm_unprotect_object (element_property_alist_); // ugh - return s; -} - SCM Score_element::mark_smob (SCM ses) { @@ -469,13 +445,6 @@ Score_element::mark_smob (SCM ses) return s->element_property_alist_; } -scm_sizet -Score_element::free_smob (SCM ses) -{ - Score_element * s = (Score_element*) SCM_CDR(ses); - delete s; - return 0; -} int Score_element::print_smob (SCM s, SCM port, scm_print_state *) @@ -488,16 +457,10 @@ Score_element::print_smob (SCM s, SCM port, scm_print_state *) return 1; } -long Score_element::smob_tag; - void -Score_element::init_smobs () +Score_element::do_smobify_self () { - smob_tag = scm_newsmob (&score_elt_funs); -} - -void -init_smobs() -{ - Score_element::init_smobs (); + scm_unprotect_object (element_property_alist_); // ugh } +#include "ly-smobs.icc" +IMPLEMENT_SMOBS(Score_element); diff --git a/lily/score-engraver.cc b/lily/score-engraver.cc index 76580cbb38..be6dd2417f 100644 --- a/lily/score-engraver.cc +++ b/lily/score-engraver.cc @@ -262,7 +262,10 @@ Score_engraver::do_try_music (Music*r) void Score_engraver::forbid_breaks () { - SCM junk = command_column_l_->remove_elt_property (breakable_scm_sym); + /* + result is junked. + */ + command_column_l_->remove_elt_property (breakable_scm_sym); } ADD_THIS_TRANSLATOR(Score_engraver); diff --git a/lily/score.cc b/lily/score.cc index 5f9a2b65c5..b517950721 100644 --- a/lily/score.cc +++ b/lily/score.cc @@ -36,7 +36,7 @@ Score::Score (Score const &s) for (int i=0; i < s.def_p_arr_.size (); i++) def_p_arr_.push(s.def_p_arr_[i]->clone()); errorlevel_i_ = s.errorlevel_i_; - header_p_ = (s.header_p_) ? new Header (*s.header_p_): 0; + header_p_ = (s.header_p_) ? new Scope (*s.header_p_): 0; } Score::~Score() @@ -60,8 +60,7 @@ Score::run_translator (Music_output_def *odef_l) trans_p->last_mom_ = music_p_->length_mom (); - bool playing = odef_l->scope_p_->elem_b ("unfold_all"); - Music_iterator * iter = Music_iterator::static_get_iterator_p (music_p_, playing); + Music_iterator * iter = Music_iterator::static_get_iterator_p (music_p_); iter->init_translator(music_p_, trans_p); iter->construct_children(); diff --git a/lily/scores.cc b/lily/scores.cc index 65e9c087af..b3899c2d2e 100644 --- a/lily/scores.cc +++ b/lily/scores.cc @@ -23,7 +23,7 @@ Sources* source_global_l = 0; Array inclusion_global_array; Array target_str_global_array; Link_array score_global_array; -Header * header_global_p; +Scope * header_global_p; void write_dependency_file (String fn, Array targets, @@ -69,7 +69,7 @@ void do_scores() { if (!header_global_p) - header_global_p = new Header; + header_global_p = new Scope; for (int i=0; i < score_global_array.size(); i++) { Score* is_p = score_global_array[i]; diff --git a/lily/script-engraver.cc b/lily/script-engraver.cc index 9c5749b892..ae2dfa312e 100644 --- a/lily/script-engraver.cc +++ b/lily/script-engraver.cc @@ -70,31 +70,32 @@ Script_engraver::do_process_requests() else ss->dir_ = (Direction)force_dir; - Scalar dir_prop (get_property ("articulationScriptVerticalDirection", 0)); - if (dir_prop.isnum_b () && (int) dir_prop != CENTER) - ss->dir_ = (Direction)(int)dir_prop; + SCM dir_prop (get_property ("articulationScriptVerticalDirection", 0)); + if (SCM_NUMBERP(dir_prop)) + ss->dir_ = to_dir (dir_prop); if (l->dir_) ss->dir_ = l->dir_; - Real padding = 0.0; - Scalar paddingprop = get_property ("articulationScriptPadding", 0); - if (paddingprop.length_i() && paddingprop.isnum_b ()) + SCM paddingprop = get_property ("articulationScriptPadding", 0); + if (SCM_NUMBERP(paddingprop)) { - padding = (Real)paddingprop; + ss->set_elt_property (padding_scm_sym, paddingprop); } - Scalar axisprop = get_property ("scriptHorizontal",0); - if (axisprop.to_bool ()) + SCM axisprop = get_property ("scriptHorizontal",0); + if (gh_boolean_p (axisprop) && gh_scm2bool (axisprop)) ss->axis_ = X_AXIS; - if (follow_staff && !axisprop.to_bool ()) + if (follow_staff && !gh_boolean_p (axisprop) && gh_scm2bool (axisprop)) ss->set_elt_property (no_staff_support_scm_sym, SCM_BOOL_T); p->set_staff_side (ss); ss->set_elt_property (script_priority_scm_sym, priority); - if (padding) - ss->set_elt_property (padding_scm_sym, gh_double2scm(padding)); + if (SCM_NUMBERP (paddingprop)) + ss->set_elt_property (padding_scm_sym, paddingprop); + + script_p_arr_.push (p); staff_side_p_arr_.push (ss); @@ -152,7 +153,5 @@ Script_engraver::do_post_move_processing() script_req_l_arr_.clear(); } - - ADD_THIS_TRANSLATOR(Script_engraver); diff --git a/lily/separating-line-group-engraver.cc b/lily/separating-line-group-engraver.cc index 99fc66a907..35e24dab23 100644 --- a/lily/separating-line-group-engraver.cc +++ b/lily/separating-line-group-engraver.cc @@ -31,8 +31,8 @@ Separating_line_group_engraver::do_creation_processing () void Separating_line_group_engraver::do_removal_processing () { - Scalar sz (get_property ("postBreakPadding", 0)); - if (!sz.empty_b () && sz.isnum_b ()) + SCM sz (get_property ("postBreakPadding", 0)); + if (SCM_NUMBERP(sz)) { sep_span_p_->padding_f_ = Real(sz); } diff --git a/lily/simultaneous-music-iterator.cc b/lily/simultaneous-music-iterator.cc index 7f1ff97560..1faaa67c13 100644 --- a/lily/simultaneous-music-iterator.cc +++ b/lily/simultaneous-music-iterator.cc @@ -31,7 +31,7 @@ Simultaneous_music_iterator::construct_children() Cons *i = (sim->music_p_list_p_) ? sim->music_p_list_p_->head_ : 0; for (; i; i = i->next_, j++) { - Music_iterator * mi = static_get_iterator_p (i->car_, playback_b_); + Music_iterator * mi = static_get_iterator_p (i->car_); /* if separate_contexts_b_ is set, create a new context with the number number as name */ diff --git a/lily/slur-engraver.cc b/lily/slur-engraver.cc index 6a3a72f05f..0ac32e8d34 100644 --- a/lily/slur-engraver.cc +++ b/lily/slur-engraver.cc @@ -34,7 +34,7 @@ Slur_engraver::set_melisma (bool m) if (!where) where = daddy_trans_l_; - daddy_trans_l_->set_property ("slurMelismaBusy", m ? "1" :"0"); + daddy_trans_l_->set_property ("slurMelismaBusy", m ? SCM_BOOL_T :SCM_BOOL_F); } void @@ -58,7 +58,9 @@ Slur_engraver::do_removal_processing () typeset_element (slur_l_stack_[i]); } slur_l_stack_.clear (); - if (!get_property ("weAreGraceContext",0).to_bool ()) + SCM wg = get_property ("weAreGraceContext",0); + bool wgb = gh_boolean_p (wg) && gh_scm2bool (wgb); + if (!wgb) for (int i=0; i < requests_arr_.size(); i++) { requests_arr_[i]->warning (_ ("unterminated slur")); @@ -89,9 +91,9 @@ Slur_engraver::do_process_requests() // push a new slur onto stack. //(use temp. array to wait for all slur STOPs) Slur * s_p =new Slur; - Scalar prop = get_property ("slurDash", 0); - if (prop.isnum_b ()) - s_p->set_elt_property (dashed_scm_sym, gh_int2scm(prop)); + SCM prop = get_property ("slurDash", 0); + if (SCM_NUMBERP(prop)) + s_p->set_elt_property (dashed_scm_sym, prop); requests_arr_.push (slur_req_l); @@ -106,14 +108,14 @@ Slur_engraver::do_process_requests() void Slur_engraver::do_pre_move_processing() { - Scalar dir (get_property ("slurVerticalDirection", 0)); - Scalar dir2 (get_property ("verticalDirection", 0)); + SCM dir (get_property ("slurVerticalDirection", 0)); + SCM dir2 (get_property ("verticalDirection", 0)); Direction slurdir = CENTER; - if (dir.length_i () && dir.isnum_b ()) - slurdir = (Direction) sign (int(dir)); - else if (dir2.length_i () && dir2.isnum_b ()) - slurdir = (Direction) sign (int (dir2)); + if (SCM_NUMBERP(dir)) + slurdir = to_dir (dir); + else if (gh_number_p (dir2)) + slurdir = to_dir (dir2); for (int i = 0; i < end_slur_l_arr_.size(); i++) { @@ -127,7 +129,8 @@ void Slur_engraver::do_post_move_processing() { new_slur_req_l_arr_.clear(); - if (get_property ("automaticMelismata",0).to_bool ()) + SCM m = get_property ("automaticMelismata",0); + if (gh_boolean_p (m) && gh_scm2bool (m)) { set_melisma (slur_l_stack_.size ()); } diff --git a/lily/slur.cc b/lily/slur.cc index c8582e8abb..9e3b16d827 100644 --- a/lily/slur.cc +++ b/lily/slur.cc @@ -14,7 +14,7 @@ */ #include "slur.hh" -#include "scalar.hh" + #include "lookup.hh" #include "paper-def.hh" #include "note-column.hh" @@ -243,11 +243,11 @@ Slur::do_post_processing () } while (flip (&d) != LEFT); - bool cross_count = cross_staff_count (); + int cross_count = cross_staff_count (); bool interstaff_b = (0 < cross_count) && (cross_count < encompass_arr_.size ()); Drul_array info_drul; - Interval interstaff_interval; + Drul_array interstaff_interval; do { @@ -257,7 +257,7 @@ Slur::do_post_processing () } while (flip (&d) != LEFT); - Real interstaff_f = interstaff_interval.length (); + Real interstaff_f = interstaff_interval[RIGHT] - interstaff_interval[LEFT]; if (fix_broken_b) { diff --git a/lily/staff-margin-engraver.cc b/lily/staff-margin-engraver.cc index 706d89e990..bddeeb9543 100644 --- a/lily/staff-margin-engraver.cc +++ b/lily/staff-margin-engraver.cc @@ -41,16 +41,17 @@ Staff_margin_engraver::acknowledge_element (Score_element_info inf) return; - String long_str = get_property ("instrument", 0); - String short_str = get_property ("instr", 0); + SCM long_name = get_property ("instrument", 0); + SCM short_name = get_property ("instr", 0); + if (now_mom () > Moment (0)) - long_str = short_str; + long_name = short_name; - if (long_str.empty_b ()) + if (gh_string_p (long_name)) return; create_items (0); - text_p_->text_str_ = long_str; + text_p_->text_str_ = ly_scm2string (long_name); staff_side_p_->dir_ = LEFT; Bar_script_engraver::do_acknowledge_element (i); diff --git a/lily/staff-performer.cc b/lily/staff-performer.cc index 927285702b..853af03f63 100644 --- a/lily/staff-performer.cc +++ b/lily/staff-performer.cc @@ -96,21 +96,17 @@ String Staff_performer::new_instrument_str () { // mustn't ask Score for instrument: it will return piano! - String str = get_property ("midiInstrument", 0); - if (!str.length_i ()) - str = get_property ("instrument", 0); - if (str == instrument_str_) + SCM minstr = get_property ("midiInstrument", 0); + + if (!gh_string_p(minstr)) + minstr = get_property ("instrument", 0); + + if (ly_scm2string (minstr) == instrument_str_) return ""; - instrument_str_ = str; + instrument_str_ = ly_scm2string (minstr); return instrument_str_; - -/* ugh, but can 't - if (properties_dict_.elem_b ("instrument")) - return properties_dict_["instrument"]; - return ""; -*/ } void diff --git a/lily/staff-switching-translator.cc b/lily/staff-switching-translator.cc deleted file mode 100644 index 1d1809ed84..0000000000 --- a/lily/staff-switching-translator.cc +++ /dev/null @@ -1,100 +0,0 @@ -/* - staff-switching-translator.cc -- implement Staff_switching_translator - - source file of the GNU LilyPond music typesetter - - (c) 1999 Han-Wen Nienhuys - - */ -#include "engraver.hh" -#include "interpretation-context-handle.hh" -#include "drul-array.hh" -#include "engraver-group-engraver.hh" -#include "musical-request.hh" - -class Staff_switching_translator : public Engraver -{ - Interpretation_context_handle my_voice_; - Drul_array staff_handle_drul_; - - int switch_pitch_i_ ; -protected: - virtual bool do_try_music (Music* m); - virtual void do_creation_processing (); - - void default_voice (Direction); -public: - Staff_switching_translator (); - VIRTUAL_COPY_CONS(Translator); -}; - -Staff_switching_translator::Staff_switching_translator () -{ - switch_pitch_i_ =0; -} - -void -Staff_switching_translator::do_creation_processing () -{ - Translator_group * daddy =daddy_grav_l (); // staff switching context - - - Scalar pit = get_property ("switchPitch", 0); - if (pit.isnum_b ()) - switch_pitch_i_ = int (pit); - Scalar s = get_property("staffContextName", 0); - Scalar up = get_property ("upStaffName",0); - Scalar down = get_property ("downStaffName",0); - if (!up.length_i()) up = "upper"; - if (!down.length_i()) up = "lower"; - - staff_handle_drul_[UP].set_translator (daddy->daddy_trans_l_ -> find_create_translator_l (s, up)); - staff_handle_drul_[DOWN].set_translator (daddy->daddy_trans_l_-> find_create_translator_l (s, down)); - - - staff_handle_drul_[DOWN].report_to_l ()->set_property ("defaultClef", "bass"); - - default_voice (UP); -} - - -void -Staff_switching_translator::default_voice (Direction d) -{ - Scalar s = get_property ("acceptorName",0); - my_voice_.set_translator (staff_handle_drul_[d].report_to_l ()->find_create_translator_l ("Thread", daddy_trans_l_->id_str_)); -} - -bool -Staff_switching_translator::do_try_music (Music*m) -{ - if (Note_req*nr = dynamic_cast (m)) - { - Direction staff = (nr->pitch_.semitone_pitch () >= switch_pitch_i_) - ? UP - : DOWN; - - - Translator_group * mv = my_voice_.report_to_l (); - Translator_group *dest_staff =staff_handle_drul_[staff].report_to_l (); - Scalar s = get_property ("switcherName", 0); - - while (mv && mv->type_str_ != s) - { - mv = mv -> daddy_trans_l_; - } - - if (!mv) - default_voice (staff); - - if (mv->daddy_trans_l_ != dest_staff) - { - mv->daddy_trans_l_->remove_translator_p (mv); - dest_staff->add_translator (mv); - } - } - - return my_voice_.try_music (m); -} - -ADD_THIS_TRANSLATOR(Staff_switching_translator); diff --git a/lily/staff-sym-engraver.cc b/lily/staff-sym-engraver.cc index b665200f35..93e41b28ab 100644 --- a/lily/staff-sym-engraver.cc +++ b/lily/staff-sym-engraver.cc @@ -34,16 +34,16 @@ Staff_symbol_engraver::do_creation_processing() void Staff_symbol_engraver::do_removal_processing() { - Scalar l (get_property ("numberOfStaffLines", 0)); - if (l.isnum_b ()) + SCM l (get_property ("numberOfStaffLines", 0)); + if (SCM_NUMBERP(l)) { - span_p_->no_lines_i_ = l; + span_p_->no_lines_i_ = gh_scm2int (l); } - Scalar sz (get_property ("staffLineLeading", 0)); - if (!sz.empty_b () && sz.isnum_b ()) + SCM sz (get_property ("staffLineLeading", 0)); + if (SCM_NUMBERP(sz)) { - span_p_->staff_line_leading_f_ = Real(sz); + span_p_->staff_line_leading_f_ = gh_scm2double (sz); } else { diff --git a/lily/stem-engraver.cc b/lily/stem-engraver.cc index 1679e52441..d48fa3925f 100644 --- a/lily/stem-engraver.cc +++ b/lily/stem-engraver.cc @@ -28,10 +28,10 @@ Stem_engraver::Stem_engraver() void Stem_engraver::do_creation_processing () { - Scalar prop = get_property ("abbrev", 0); - if (prop.isnum_b ()) + SCM prop = get_property ("abbrev", 0); + if (SCM_NUMBERP(prop)) { - default_abbrev_i_ = prop; + default_abbrev_i_ = gh_scm2int (prop); } } @@ -96,38 +96,43 @@ Stem_engraver::do_pre_move_processing() if (stem_p_) { - Scalar prop = get_property ("verticalDirection", 0); - Direction dir = prop.isnum_b () ? (Direction)int(prop) : CENTER; - if (dir) + SCM prop = get_property ("verticalDirection", 0); + if (SCM_NUMBERP(prop)) { - stem_p_->dir_ = dir; + stem_p_->dir_ = to_dir (prop); stem_p_->set_elt_property (dir_forced_scm_sym, SCM_BOOL_T); } Translator_group* which; prop = get_property ("stemLeftBeamCount", &which); - if (prop.isnum_b ()) + if (SCM_NUMBERP(prop)) { - stem_p_->beams_i_drul_[LEFT] = prop; - ((Translator_group*)which)->set_property ("stemLeftBeamCount", ""); + stem_p_->beams_i_drul_[LEFT] = gh_scm2int (prop); + ((Translator_group*)which)->set_property ("stemLeftBeamCount", SCM_UNDEFINED); } prop = get_property ("stemRightBeamCount", &which); - if (prop.isnum_b ()) + if (SCM_NUMBERP(prop)) { - stem_p_->beams_i_drul_[RIGHT] = prop; - ((Translator_group*)which)->set_property ("stemRightBeamCount", ""); + stem_p_->beams_i_drul_[RIGHT] = gh_scm2int (prop); + ((Translator_group*)which)->set_property ("stemRightBeamCount", SCM_UNDEFINED); } prop = get_property ("stemLength", 0); - if (prop.isnum_b ()) + if (SCM_NUMBERP(prop)) { - stem_p_->set_elt_property (length_scm_sym, gh_double2scm (prop.to_f ())); + stem_p_->set_elt_property (length_scm_sym, prop); } prop = get_property ("stemStyle", 0); - if (prop.to_bool ()) + if (gh_string_p (prop)) { - stem_p_->set_elt_property (style_scm_sym, ly_ch_C_to_scm (prop.ch_C())); + stem_p_->set_elt_property (style_scm_sym, prop); + } + + prop = get_property ("noStemExtend", 0); + if (gh_boolean_p (prop) && gh_scm2bool (prop)) + { + stem_p_->set_elt_property (no_stem_extend_scm_sym, prop); } typeset_element(stem_p_); diff --git a/lily/stem-info.cc b/lily/stem-info.cc index 4a9e06e05e..f555ab0a6b 100644 --- a/lily/stem-info.cc +++ b/lily/stem-info.cc @@ -35,7 +35,6 @@ Stem_info::Stem_info (Stem*s, int mult) SCM bd = stem_l_->remove_elt_property (beam_dir_scm_sym); beam_dir_ = gh_scm2int (SCM_CDR(bd)); - interstaff_f_ = 0; Paper_def* paper_l = stem_l_->paper_l (); Real internote_f = stem_l_->staff_line_leading_f ()/2; @@ -53,6 +52,8 @@ Stem_info::Stem_info (Stem*s, int mult) idealy_f_ *= beam_dir_; bool grace_b = stem_l_->get_elt_property (grace_scm_sym) != SCM_BOOL_F; + bool no_extend_b = stem_l_->get_elt_property (no_stem_extend_scm_sym) + != SCM_BOOL_F; int stem_max = (int)rint(paper_l->get_var ("stem_max")); String type_str = grace_b ? "grace_" : ""; @@ -85,7 +86,7 @@ Stem_info::Stem_info (Stem*s, int mult) than middle staffline, just as normal stems. */ - if (!grace_b) + if (!grace_b && !no_extend_b) { //highest beam of (UP) beam must never be lower than middle staffline miny_f_ = miny_f_ >? 0; @@ -116,9 +117,9 @@ Stem_info::Stem_info (Stem*s, int mult) // interstaff beam Beam* beam_l = stem_l_->beam_l_; - Real is = calc_interstaff_dist (stem_l_, beam_l); - idealy_f_ += is* beam_dir_; - miny_f_ += is * beam_dir_; - maxy_f_ += is * beam_dir_; + interstaff_f_ = calc_interstaff_dist (stem_l_, beam_l) / internote_f; + idealy_f_ += interstaff_f_* beam_dir_; + miny_f_ += interstaff_f_ * beam_dir_; + maxy_f_ += interstaff_f_ * beam_dir_; } diff --git a/lily/stem.cc b/lily/stem.cc index 919969187c..7c7797a385 100644 --- a/lily/stem.cc +++ b/lily/stem.cc @@ -201,7 +201,8 @@ Stem::set_default_stemlen () set_stemend ((dir_ > 0) ? head_positions()[BIGGER] + length_f: head_positions()[SMALLER] - length_f); - if (!grace_b && (dir_ * stem_end_f () < 0)) + bool no_extend_b = get_elt_property (no_stem_extend_scm_sym) != SCM_BOOL_F; + if (!grace_b && !no_extend_b && (dir_ * stem_end_f () < 0)) set_stemend (0); } diff --git a/lily/text-engraver.cc b/lily/text-engraver.cc index 1d652e935e..9ecc46f434 100644 --- a/lily/text-engraver.cc +++ b/lily/text-engraver.cc @@ -83,8 +83,8 @@ Text_engraver::do_process_requests () - Scalar axisprop = get_property ("scriptHorizontal",0); - if (axisprop.to_bool ()) + SCM axisprop = get_property ("scriptHorizontal",0); + if (gh_boolean_p (axisprop) && gh_scm2bool (axisprop)) { ss->axis_ = X_AXIS; text->set_parent (ss, Y_AXIS); @@ -100,21 +100,21 @@ Text_engraver::do_process_requests () if (r->style_str_.empty_b ()) { - Scalar p (get_property ("textStyle", 0)); - if (p.length_i ()) - text->style_str_ = p; + SCM p (get_property ("textStyle", 0)); + if (gh_string_p (p)) + text->style_str_ = ly_scm2string(p); } else text->style_str_ = r->style_str_; - Scalar padding = get_property ("textScriptPadding", 0); - if (padding.length_i() && padding.isnum_b ()) + SCM padding = get_property ("textScriptPadding", 0); + if (SCM_NUMBERP(padding)) { - ss->set_elt_property (padding_scm_sym, gh_double2scm(Real(padding))); + ss->set_elt_property (padding_scm_sym, padding); } - Scalar empty = get_property ("textEmptyDimension", 0); - if (empty.to_bool ()) + SCM empty = get_property ("textEmptyDimension", 0); + if (gh_boolean_p (empty) && gh_scm2bool (empty)) { text->set_empty (true, X_AXIS); } diff --git a/lily/tie-engraver.cc b/lily/tie-engraver.cc index 4d3c8ca01c..946f8e9367 100644 --- a/lily/tie-engraver.cc +++ b/lily/tie-engraver.cc @@ -26,7 +26,9 @@ Tie_engraver::do_try_music (Music *m) if (Tie_req * c = dynamic_cast (m)) { req_l_ = c; - if (get_property ("automaticMelismata",0).to_bool ()) + SCM m = get_property ("automaticMelismata",0); + bool am = gh_boolean_p (m) &&gh_scm2bool (m); + if (am) { set_melisma (true); } @@ -43,7 +45,7 @@ Tie_engraver::set_melisma (bool m) if (!where) where = daddy_trans_l_; - daddy_trans_l_->set_property ("tieMelismaBusy", m ? "1" :"0"); + daddy_trans_l_->set_property ("tieMelismaBusy", m ? SCM_BOOL_T : SCM_BOOL_F); } void @@ -76,89 +78,55 @@ Tie_engraver::do_process_requests () void Tie_engraver::process_acknowledged () { - bool old_behavior = get_property ("oldTieBehavior", 0).to_bool (); - if (req_l_) { - - /* - JUNKME! - */ - if (old_behavior) + now_heads_.sort (CHead_melodic_tuple::pitch_compare); + stopped_heads_.sort(CHead_melodic_tuple::pitch_compare); + int i=0; + int j=0; + int tie_count=0; + while ( i < now_heads_.size () && j < stopped_heads_.size ()) { - if (now_heads_.size () != stopped_heads_.size ()) - { - req_l_->warning (_ ("unequal number of note heads for tie")); - } - int sz = now_heads_.size () pitch_ , + stopped_heads_[j].req_l_->pitch_); - now_heads_.sort (CHead_melodic_tuple::pitch_compare); - stopped_heads_.sort(CHead_melodic_tuple::pitch_compare); - - for (int i=0; i < sz; i++) + if (comp) { - Tie * p = new Tie; - p->set_head (LEFT, stopped_heads_[i].head_l_); - p->set_head (RIGHT, now_heads_[i].head_l_); - tie_p_arr_.push (p); - announce_element (Score_element_info (p, req_l_)); + (comp < 0) ? i ++ : j++; + continue; } - } - else - { - now_heads_.sort (CHead_melodic_tuple::pitch_compare); - stopped_heads_.sort(CHead_melodic_tuple::pitch_compare); - int i=0; - int j=0; - int tie_count=0; - while ( i < now_heads_.size () && j < stopped_heads_.size ()) + else { - int comp - = Musical_pitch::compare (now_heads_[i].req_l_->pitch_ , - stopped_heads_[j].req_l_->pitch_); + tie_count ++; - if (comp) + /* don't go around recreating ties that were already + made. Not infallible. Due to reordering in sort (), + we will make the wrong ties when noteheads are + added. */ + if (tie_count > tie_p_arr_.size ()) { - (comp < 0) ? i ++ : j++; - continue; + Tie * p = new Tie; + p->set_head (LEFT, stopped_heads_[j].head_l_); + p->set_head (RIGHT, now_heads_[i].head_l_); + tie_p_arr_.push (p); + announce_element (Score_element_info (p, req_l_)); } - else - { - tie_count ++; - - /* don't go around recreating ties that were already - made. Not infallible. Due to reordering in sort (), - we will make the wrong ties when noteheads are - added. */ - if (tie_count > tie_p_arr_.size ()) - { - Tie * p = new Tie; - p->set_head (LEFT, stopped_heads_[j].head_l_); - p->set_head (RIGHT, now_heads_[i].head_l_); - tie_p_arr_.push (p); - announce_element (Score_element_info (p, req_l_)); - } - i++; - j++; + i++; + j++; - } } + } - if (!tie_p_arr_.size ()) - { - req_l_->warning (_ ("No ties were created!")); - } - + if (!tie_p_arr_.size ()) + { + req_l_->warning (_ ("No ties were created!")); } + } } + void Tie_engraver::do_pre_move_processing () { @@ -168,14 +136,14 @@ Tie_engraver::do_pre_move_processing () } now_heads_.clear (); - Scalar dir (get_property ("tieVerticalDirection", 0)); - Scalar dir2 (get_property ("verticalDirection", 0)); + SCM dir (get_property ("tieVerticalDirection", 0)); + SCM dir2 (get_property ("verticalDirection", 0)); Direction tie_dir = CENTER; - if (dir.length_i () && dir.isnum_b ()) - tie_dir = (Direction) sign (int(dir)); - else if (dir2.length_i () && dir2.isnum_b ()) - tie_dir = (Direction) sign (int (dir2)); + if (SCM_NUMBERP(dir)) + tie_dir = to_dir (dir); + else if (isdir_b (dir2)) + tie_dir = to_dir (dir2); for (int i=0; i< tie_p_arr_.size (); i++) { @@ -188,7 +156,8 @@ Tie_engraver::do_pre_move_processing () void Tie_engraver::do_post_move_processing () { - if (get_property ("automaticMelismata",0).to_bool ()) + SCM m = get_property ("automaticMelismata",0); + if (gh_boolean_p (m) && gh_scm2bool (m)) { set_melisma (false); } diff --git a/lily/time-signature-engraver.cc b/lily/time-signature-engraver.cc index a71769709f..d9051d59ae 100644 --- a/lily/time-signature-engraver.cc +++ b/lily/time-signature-engraver.cc @@ -54,10 +54,10 @@ Time_signature_engraver::do_pre_move_processing() { if (time_signature_p_) { - Scalar sigstyle = get_property ("timeSignatureStyle", 0); - if (sigstyle.length_i ()) + SCM sigstyle = get_property ("timeSignatureStyle", 0); + if (gh_string_p (sigstyle)) { - time_signature_p_->time_sig_type_str_ = sigstyle; + time_signature_p_->time_sig_type_str_ = ly_scm2string (sigstyle); } typeset_element (time_signature_p_); diff --git a/lily/time-signature.cc b/lily/time-signature.cc index 75bbaa2ee2..a4960abc7b 100644 --- a/lily/time-signature.cc +++ b/lily/time-signature.cc @@ -7,7 +7,7 @@ */ -#include "scalar.hh" + #include "molecule.hh" #include "time-signature.hh" #include "paper-def.hh" diff --git a/lily/timing-engraver.cc b/lily/timing-engraver.cc index 3fa208f15d..29ee1d6d8c 100644 --- a/lily/timing-engraver.cc +++ b/lily/timing-engraver.cc @@ -53,12 +53,15 @@ Timing_engraver::which_bar () if (!now_mom ()) return "|"; - Scalar nonauto = get_property ("barNonAuto", 0); - if (!nonauto.to_bool ()) + SCM nonauto = get_property ("barNonAuto", 0); + if (!gh_boolean_p (nonauto) && gh_scm2bool (nonauto)) { - Scalar always = get_property ("barAlways", 0); - if (!time_.whole_in_measure_ || always.to_bool ()) - return get_property ("defaultBarType" ,0); + SCM always = get_property ("barAlways", 0); + if (!time_.whole_in_measure_ || gh_boolean_p (always) && gh_scm2bool (always)) + { + SCM def=get_property ("defaultBarType" ,0); + return (gh_string_p (def))? ly_scm2string (def) : ""; + } } return ""; } diff --git a/lily/timing-translator.cc b/lily/timing-translator.cc index 92db7ee737..82ab9dc0be 100644 --- a/lily/timing-translator.cc +++ b/lily/timing-translator.cc @@ -94,14 +94,12 @@ Timing_translator::do_process_requests() Translator_group * tr=0; - Scalar barn = get_property ("currentBarNumber", &tr); - if (!barn.empty_b () && barn.isnum_b ()) + SCM barn = get_property ("currentBarNumber", &tr); + if (SCM_NUMBERP(barn)) { - time_.bars_i_ = int(barn); - tr->set_property ("currentBarNumber", ""); + time_.bars_i_ = gh_scm2int (barn); + tr->set_property ("currentBarNumber", SCM_UNDEFINED); } - - } @@ -119,7 +117,8 @@ Timing_translator::do_pre_move_processing() while (!global_l); /* allbars == ! skipbars */ - bool allbars = ! get_property ("skipBars", 0).to_bool (); + SCM sb = get_property ("skipBars", 0); + bool allbars = !(gh_boolean_p (sb)&&gh_scm2bool (sb)); // urg: multi bar rests: should always process whole of first bar? if (!time_.cadenza_b_ && allbars) diff --git a/lily/translation-property.cc b/lily/translation-property.cc index 8811d85d9b..42e4364349 100644 --- a/lily/translation-property.cc +++ b/lily/translation-property.cc @@ -9,12 +9,12 @@ #include "translation-property.hh" #include "debug.hh" - - void Translation_property::do_print () const { #ifndef NPRINT - DEBUG_OUT << "." << var_str_ << " = " << value_; + DEBUG_OUT << "." << var_str_ << " = " ; + if (flower_dstream && !flower_dstream->silent_b ("Translation_property")) + ly_display_scm (value_); #endif } diff --git a/lily/translator-group.cc b/lily/translator-group.cc index fc4ca2a44d..cffdaf8905 100644 --- a/lily/translator-group.cc +++ b/lily/translator-group.cc @@ -10,7 +10,7 @@ #include "translator-group.hh" #include "translator.hh" #include "debug.hh" -#include "rational.hh" +#include "moment.hh" #include "dictionary-iter.hh" #include "killing-cons.tcc" @@ -373,10 +373,8 @@ Translator_group::do_print() const #ifndef NPRINT if (!flower_dstream) return ; - for (Dictionary_iter i (properties_dict_); i.ok (); i++) - { - DEBUG_OUT << i.key () << "=" << i.val () << '\n'; - } + + gh_display (properties_dict_.self_scm_); if (status == ORPHAN) { DEBUG_OUT << "consists of: "; @@ -449,29 +447,29 @@ Translator_group::do_add_processing () } } -Scalar +SCM Translator_group::get_property (String id, Translator_group **where_l) const { - if (properties_dict_.elem_b (id)) + SCM sym = ly_symbol (id); + if (properties_dict_.elem_b (sym)) { if (where_l) *where_l = (Translator_group*) this; // ugh - return properties_dict_[id]; + return properties_dict_[sym]; } -#if 1 if (daddy_trans_l_) return daddy_trans_l_->get_property (id, where_l); -#endif if (where_l) *where_l = 0; - return ""; + + return SCM_UNDEFINED; } void -Translator_group::set_property (String id, Scalar val) +Translator_group::set_property (String id, SCM val) { - properties_dict_[id] = val; + properties_dict_[ly_symbol (id)] = val; } diff --git a/lily/translator.cc b/lily/translator.cc index a5a3b68d51..218a8c1423 100644 --- a/lily/translator.cc +++ b/lily/translator.cc @@ -11,7 +11,7 @@ #include "debug.hh" #include "translator-group.hh" -#include "rational.hh" +#include "moment.hh" char const* Translator::name() const @@ -163,7 +163,7 @@ Translator::output_def_l () const return output_def_l_; } -Scalar +SCM Translator::get_property (String id, Translator_group **where_l) const { return daddy_trans_l_->get_property (id, where_l); diff --git a/lily/tuplet-engraver.cc b/lily/tuplet-engraver.cc index c067169a8c..ce9c2cd2de 100644 --- a/lily/tuplet-engraver.cc +++ b/lily/tuplet-engraver.cc @@ -35,13 +35,13 @@ void Tuplet_engraver::do_process_requests () { int dir = 0; - Scalar prop = get_property ("tupletDirection", 0); - if (prop.isnum_b()) - dir = (int)prop; + SCM prop = get_property ("tupletDirection", 0); + if (isdir_b (prop)) + dir = to_dir (prop); int visibility = 3; prop = get_property ("tupletVisibility", 0); - if (prop.isnum_b()) - visibility = (int)prop; + if (SCM_NUMBERP(prop)) + visibility = gh_scm2int (prop); // bool ? for (int i= started_span_p_arr_.size (); i < time_scaled_music_arr_.size (); i++) @@ -61,7 +61,9 @@ void Tuplet_engraver::acknowledge_element (Score_element_info i) { bool grace= (i.elem_l_->get_elt_property (grace_scm_sym) != SCM_BOOL_F); - if (grace != get_property ("weAreGraceContext",0).to_bool ()) + SCM wg = get_property ("weAreGraceContext",0); + bool wgb = gh_boolean_p (wg) && gh_scm2bool (wg); + if (grace != wgb) return; if (Note_column *nc = dynamic_cast (i.elem_l_)) diff --git a/lily/tuplet-spanner.cc b/lily/tuplet-spanner.cc index 8ea56cdd42..234a4f982a 100644 --- a/lily/tuplet-spanner.cc +++ b/lily/tuplet-spanner.cc @@ -38,6 +38,10 @@ Tuplet_spanner::do_brew_molecule_p () const SCM visibility_sym =get_elt_property (tuplet_visibility_scm_sym); if (visibility_sym != SCM_BOOL_F) { + /* + ARG. Fixme. + */ + /* Property values: 0 show nothing 1 show number diff --git a/lily/unfolded-repeat-iterator.cc b/lily/unfolded-repeat-iterator.cc index 901d69f80b..347e929b4a 100644 --- a/lily/unfolded-repeat-iterator.cc +++ b/lily/unfolded-repeat-iterator.cc @@ -49,7 +49,7 @@ Unfolded_repeat_iterator::next_element () { done_mom_ += mus->repeat_body_p_->length_mom (); - if (full_unfold_b_) + if (!mus->volta_fold_b_) done_count_ ++; if (alternative_cons_l_) @@ -57,7 +57,7 @@ Unfolded_repeat_iterator::next_element () current_iter_p_ = get_iterator_p (alternative_cons_l_->car_); do_main_b_ = false; } - else if (done_count_ < mus->repeats_i_ && full_unfold_b_) + else if (done_count_ < mus->repeats_i_ && !mus->volta_fold_b_) { current_iter_p_ = get_iterator_p (mus->repeat_body_p_); do_main_b_ = true; @@ -73,20 +73,20 @@ Unfolded_repeat_iterator::next_element () { done_mom_ += alternative_cons_l_->car_->length_mom (); - if (!full_unfold_b_ || + if (mus->volta_fold_b_ || mus->repeats_i_ - done_count_ < alternative_count_i_) alternative_cons_l_ = alternative_cons_l_->next_; /* we've done the main body as well, but didn't go over the other increment. */ - if (full_unfold_b_) + if (mus->volta_fold_b_) done_count_ ++; } if (done_count_ < mus->repeats_i_ && alternative_cons_l_) { - if (!full_unfold_b_) + if (mus->volta_fold_b_) current_iter_p_ = get_iterator_p (alternative_cons_l_->car_); else { @@ -114,8 +114,6 @@ void Unfolded_repeat_iterator::construct_children () { Repeated_music const* mus =dynamic_cast (music_l_); - full_unfold_b_ = playback_b_ || (!mus->volta_fold_b_); - alternative_cons_l_ = (mus->alternatives_p_) ? mus->alternatives_p_->music_p_list_p_->head_ : 0; @@ -167,7 +165,7 @@ void Unfolded_repeat_iterator::do_print () const { #ifndef NPRINT - DEBUG_OUT << "count " << done_count_ << "done time " << done_mom_ << '\n'; + DEBUG_OUT << "count " << done_count_ << "done time " << Rational (done_mom_) << '\n'; DEBUG_OUT << "current: "; current_iter_p_->print(); #endif diff --git a/lily/vertical-align-engraver.cc b/lily/vertical-align-engraver.cc index 9614f5b359..2497fd4f59 100644 --- a/lily/vertical-align-engraver.cc +++ b/lily/vertical-align-engraver.cc @@ -32,22 +32,22 @@ Vertical_align_engraver::do_creation_processing() void Vertical_align_engraver::do_removal_processing() { - Scalar dist (get_property ("maxVerticalAlign", 0)); - if (dist.length_i () && dist.isnum_b ()) + SCM dist (get_property ("maxVerticalAlign", 0)); + if (SCM_NUMBERP(dist)) { - valign_p_->threshold_interval_[BIGGER] = Real (dist); + valign_p_->threshold_interval_[BIGGER] = gh_scm2double (dist); } dist = get_property ("minVerticalAlign", 0); - if (dist.length_i () && dist.isnum_b ()) + if (SCM_NUMBERP(dist)) { - valign_p_->threshold_interval_[SMALLER] = Real (dist); + valign_p_->threshold_interval_[SMALLER] = gh_scm2double (dist); } dist = get_property ("alignmentReference",0); - if (dist.length_i () && dist.isnum_b ()) + if (isdir_b (dist)) { - valign_p_->align_dir_ = (Direction)(int)dist; + valign_p_->align_dir_ = to_dir (dist); } valign_p_->set_bounds(RIGHT,get_staff_info().command_pcol_l ()); typeset_element (valign_p_); diff --git a/ly/accordion-defs.ly b/ly/accordion-defs.ly index b4051d111a..c8caeabfd4 100644 --- a/ly/accordion-defs.ly +++ b/ly/accordion-defs.ly @@ -6,7 +6,7 @@ % 16' = S % -\scmfile "accordion-script.scm"; +#(eval-string (ly-gulp-file "accordion-script.scm")) accDiscant = \script "accDiscant" accDiscantF = \script "accDiscantF" diff --git a/ly/auto-beam-settings.ly b/ly/auto-beam-settings.ly index 71b2c55cab..c3f20c4886 100644 --- a/ly/auto-beam-settings.ly +++ b/ly/auto-beam-settings.ly @@ -1,7 +1,3 @@ -%%In the file ly/auto-beam-settings.ly, all necessary i-iii settings should -%%be listed, here's a new version with more comments, (hw, please include). -%%duh - % auto-beam-settings.ly % setup for auto-beam engraver % @@ -21,47 +17,49 @@ % end beams each 1/2 note % end beams with 16th notes each 1/4 note % end beams with 32th notes each 1/8 note -time3_2beamAutoEnd = "1/2"; -time3_2beamAutoEnd_16 = "1/4"; -time3_2beamAutoEnd_32 = "1/8"; -time3_4beamAutoBegin_8 = "1/4"; -time3_4beamAutoEnd = "3/4"; -time3_4beamAutoBegin_16 = "1/16"; -time3_4beamAutoEnd_16 = "1/4"; -%time3_4beamAutoBegin_32 = "1/8"; -time3_4beamAutoEnd_32 = "1/8"; +time3_2beamAutoEnd = #(make-moment 1 2) +%time3_2beamAutoEnd_16 = #(make-moment 1 4) +time3_2beamAutoEnd_16 = #(make-moment 1 4) +time3_2beamAutoEnd_32 = #(begin (make-moment 1 8)) + +time3_4beamAutoBegin_8 = #(begin (make-moment 1 4)) +time3_4beamAutoEnd = #(begin (make-moment 3 4)) +time3_4beamAutoBegin_16 = #(begin (make-moment 1 16)) +time3_4beamAutoEnd_16 = #(begin (make-moment 1 4)) +%time3_4beamAutoBegin_32 = #(begin (make-moment 1 8)) +time3_4beamAutoEnd_32 = #(begin (make-moment 1 8)) -time3_8beamAutoBegin = "1/8"; -time3_8beamAutoEnd = "3/8"; +time3_8beamAutoBegin = #(begin (make-moment 1 8)) +time3_8beamAutoEnd = #(begin (make-moment 3 8)) % in common time: % end beams each 1/2 note % end beams with 32th notes each 1/8 note % end beams with 1/8 triplets each 1/4 note -time4_4beamAutoEnd = "1/2"; -time4_4beamAutoEnd_12 = "1/4"; -time4_4beamAutoEnd_16 = "1/4"; -time4_4beamAutoEnd_32 = "1/8"; +time4_4beamAutoEnd = #(begin (make-moment 1 2)) +time4_4beamAutoEnd_12 = #(begin (make-moment 1 4)) +time4_4beamAutoEnd_16 = #(begin (make-moment 1 4)) +time4_4beamAutoEnd_32 = #(begin (make-moment 1 8)) -time4_8beamAutoEnd = "1/4"; -time4_8beamAutoEnd_16 = "1/4"; -time4_8beamAutoEnd_32 = "1/8"; +time4_8beamAutoEnd = #(begin (make-moment 1 4)) +time4_8beamAutoEnd_16 = #(begin (make-moment 1 4)) +time4_8beamAutoEnd_32 = #(begin (make-moment 1 8)) -time4_16beamAutoEnd = "1/8"; +time4_16beamAutoEnd = #(begin (make-moment 1 8)) -time6_8beamAutoEnd = "3/8"; -time6_8beamAutoEnd_16 = "3/8"; -time6_8beamAutoEnd_32 = "1/8"; +time6_8beamAutoEnd = #(begin (make-moment 3 8)) +time6_8beamAutoEnd_16 = #(begin (make-moment 3 8)) +time6_8beamAutoEnd_32 = #(begin (make-moment 1 8)) -time9_8beamAutoEnd = "3/8"; -time9_8beamAutoEnd_16 = "3/8"; -time9_8beamAutoEnd_32 = "1/8"; +time9_8beamAutoEnd = #(begin (make-moment 3 8)) +time9_8beamAutoEnd_16 = #(begin (make-moment 3 8)) +time9_8beamAutoEnd_32 = #(begin (make-moment 1 8)) -time12_8beamAutoEnd = "3/8"; -time12_8beamAutoEnd_16 = "3/8"; -time12_8beamAutoEnd_32 = "1/8"; +time12_8beamAutoEnd = #(begin (make-moment 3 8)) +time12_8beamAutoEnd_16 = #(begin (make-moment 3 8)) +time12_8beamAutoEnd_32 = #(begin (make-moment 1 8)) @@ -70,10 +68,10 @@ time12_8beamAutoEnd_32 = "1/8"; Users may override in most cases, simply by issuing % from here on consider ending beam every 1/4 note - \property Voice.beamAutoEnd = "1/4" + \property Voice.beamAutoEnd = #(make-moment 1 4) % no autobeaming - \property Voice.beamAuto = "0" + \property Voice.beamAuto = ##f or, more globally, by doing: @@ -81,7 +79,7 @@ or, more globally, by doing: \translator{ \VoiceContext % consider ending beam at every 1/2 note - beamAutoEnd = "1/2"; + beamAutoEnd = #(make-moment 1 2) } } diff --git a/ly/declarations.ly b/ly/declarations.ly index a6e51b9395..5643839893 100644 --- a/ly/declarations.ly +++ b/ly/declarations.ly @@ -34,8 +34,8 @@ lydian = 7 phrygian = 8 dorian = 10 -melisma = \property Staff.melismaBusy = "1" -melismaEnd = \property Staff.melismaBusy = "0" +melisma = \property Staff.melismaBusy = ##t +melismaEnd = \property Staff.melismaBusy = ##f diff --git a/ly/engraver.ly b/ly/engraver.ly index 1e8acfac43..b323524d32 100644 --- a/ly/engraver.ly +++ b/ly/engraver.ly @@ -5,8 +5,8 @@ StaffContext=\translator { \type "Engraver_group_engraver"; \name Staff ; - barAuto = "1"; - voltaVisibility = "1"; + barAuto = ##t + voltaVisibility = ##t \consists "Multi_measure_rest_engraver"; \consists "Bar_engraver"; @@ -33,16 +33,15 @@ StaffContext=\translator { %{ \consists "Staff_margin_engraver"; %} - defaultClef = treble; - - marginBreakPriority = "-5"; + defaultClef = #"treble" + marginBreakPriority = #-5 \consists "Separating_line_group_engraver"; \consists "Font_size_engraver"; \accepts "Voice"; - dynamicStyle = "dynamic"; + dynamicStyle = #"dynamic" }; \translator{\StaffContext } @@ -66,7 +65,8 @@ StaffContext=\translator { RhythmicStaffContext=\translator{ \type "Engraver_group_engraver"; - numberOfStaffLines = "1"; + numberOfStaffLines = #1 + barSize = \staffheight; \consists "Pitch_squash_engraver"; \consists "Separating_line_group_engraver"; @@ -82,7 +82,7 @@ RhythmicStaffContext=\translator{ \translator{\RhythmicStaffContext} VoiceContext = \translator { \type "Engraver_group_engraver"; - dynamicPadding = "5.0"; + dynamicPadding = #5.0 \consists "Dynamic_engraver"; % must come before text_engraver. \name Voice ; @@ -99,7 +99,7 @@ VoiceContext = \translator { % ugh. Order matters here. \consists "Melisma_engraver"; - textScriptPadding = "3.0"; + textScriptPadding = #3.0 \consists "Text_engraver"; \consists "Script_engraver"; \consists "Script_column_engraver"; @@ -122,6 +122,7 @@ GraceContext=\translator { \consists "Stem_engraver"; \consists "Beam_engraver"; \consists "Slur_engraver"; + \consists "Auto_beam_engraver"; \include "auto-beam-settings.ly"; \consists "Align_note_column_engraver"; @@ -129,11 +130,11 @@ GraceContext=\translator { \consists "Rhythmic_column_engraver"; \consists "Dynamic_engraver"; - stemStyle = "grace"; - weAreGraceContext = "1"; - fontSize = "-1"; - stemLength = "6.0"; - verticalDirection = "1"; + stemStyle = #"grace" + weAreGraceContext = ##t + fontSize = #-1 + stemLength = #6.0 + verticalDirection = \up ; graceAccidentalSpace= 1.5 * \interline; }; @@ -153,9 +154,7 @@ GrandStaffContext=\translator{ \consists "Span_bar_engraver"; \consists "Piano_bar_engraver"; - \accepts "Staff"; - }; \translator{\GrandStaffContext} @@ -174,7 +173,6 @@ PianoStaffContext = \translator{\GrandStaffContext StaffGroupContext= \translator { \type "Engraver_group_engraver"; \consists "Span_bar_engraver"; - \consists "Staff_group_bar_engraver"; \name StaffGroup; @@ -186,6 +184,7 @@ StaffGroupContext= \translator { \accepts "Lyrics"; \accepts "ChordNames"; }; + \translator { \StaffGroupContext } % UGH! JUNKME @@ -248,8 +247,8 @@ StupidScore = \translator { BarNumberingStaffContext = \translator { \StaffContext - barColumnPriority = "0"; - marginBreakPriority = "-4"; + barColumnPriority = #0 + marginBreakPriority = #-4 \consists "Mark_engraver"; \consists "Bar_number_engraver"; }; @@ -263,8 +262,8 @@ HaraKiriStaffContext = \translator { OrchestralPartStaffContext = \translator { \StaffContext - barColumnPriority = "0"; - marginBreakPriority = "-4"; + barColumnPriority = #0 + marginBreakPriority = #-4 \consists "Mark_engraver"; \consists "Bar_number_engraver"; }; @@ -280,8 +279,8 @@ ScoreContext = \translator { \consists "Spacing_engraver"; \consists "Vertical_align_engraver"; alignmentReference = \down; - defaultClef = treble; - defaultBarType = "|"; + defaultClef = #"treble" + defaultBarType = #"|" \accepts "Staff"; \accepts "StaffGroup"; \accepts "RhythmicStaff"; @@ -297,8 +296,8 @@ ScoreContext = \translator { OrchestralScoreContext= \translator { \ScoreContext - barScriptPadding = "2.0"; % dimension \pt - markScriptPadding = "4.0"; + barScriptPadding = #2.0 % dimension \pt + markScriptPadding = #4.0 \consists "Bar_number_engraver"; \consists "Mark_engraver"; diff --git a/ly/nederlands.ly b/ly/nederlands.ly index 78fc35ed04..b5a6d360bd 100644 --- a/ly/nederlands.ly +++ b/ly/nederlands.ly @@ -1,13 +1,5 @@ %{ common dutch names for notes. "es" means flat, "is" means sharp - - - - - Please note that, while these names are used to enter *notes*, they - actually are *melodic*s, i.e. they represent a pitch solely. Notes - have a rhythmic part too. This is the reason that we don't write 'note { .. }' - %} \notenames { @@ -56,6 +48,7 @@ % upper case: 1 octave lower. % + %% deprecated. Ceses = \musicalpitch { -2 0 -2 } Ces = \musicalpitch { -2 0 -1 } diff --git a/ly/params.ly b/ly/params.ly index 96b0057fa8..a3e0eba66c 100644 --- a/ly/params.ly +++ b/ly/params.ly @@ -225,7 +225,7 @@ mmrest_x_minimum = 1.4*\staffheight; % chop off this much when next to pp / ff sign. crescendo_shorten = 4.0 * \interline; crescendo_thickness = \stafflinethickness; -crescendo_height = 1.5 * \interline; +crescendo_height = 0.666 * \interline; % in internote. restcollision_minimum_dist = 3.0; diff --git a/ly/property.ly b/ly/property.ly index ea41ac9656..ddc99ba507 100644 --- a/ly/property.ly +++ b/ly/property.ly @@ -8,7 +8,7 @@ SEE THE REFERENCE MANUAL FOR EXPLANATIONS. %} -\version "1.2.0"; +\version "1.2.16"; %hmm, (these) abbrevs suck, imo % i guess they're meant as some form of doco @@ -17,52 +17,28 @@ stemup = \property Voice.verticalDirection = \up stemboth= \property Voice.verticalDirection = \center stemdown = \property Voice.verticalDirection = \down -slurup = \notes { - s1*0 - \property Voice.slurVerticalDirection = \up - } -slurboth= \notes { - s1*0 - \property Voice.slurVerticalDirection = \center -} -slurdown = \notes { - s1*0 - \property Voice.slurVerticalDirection = \down -} - -shifton = \property Voice.horizontalNoteShift = 1 -shiftoff = \property Voice.horizontalNoteShift = 0 +slurup = \property Voice.slurVerticalDirection = \up +slurboth = \property Voice.slurVerticalDirection = \center +slurdown = \property Voice.slurVerticalDirection = \down +shifton = \property Voice.horizontalNoteShift = #1 +shiftoff = \property Voice.horizontalNoteShift = #0 onevoice = { \stemboth \shiftoff } -%{ THESE ARE DEPRECATED %} -voiceone = - \context Voice = one { +voiceone = \stemup +voicetwo = \stemdown +voicethree = { \stemup + \shifton } -voicetwo = - \context Voice = two { - \stemdown -} - -voicethree = - \context Voice = three { - \stemup - -} - -voicefour = - \context Voice = four { +voicefour = { \stemdown \shifton } -%{ END OF DEPRECATED %} - - % ugh, cluttering global namespace... % ugh2. @@ -97,26 +73,26 @@ slurnormal = \property Voice.slurDash = "" -slurdotted = +slurdotted = \property Voice.slurDash = 1 -tupletoff = { +tupletoff = \property Voice.tupletVisibility = 0 -} -tupleton = { + +tupleton = \property Voice.tupletVisibility = 3 -} -tiny = { - \property Voice.fontSize= "-2" -} -small = { - \property Voice.fontSize= "-1" -} +tiny = + \property Voice.fontSize= -2 + + +small = + \property Voice.fontSize= -1 + normalsize = { - \property Voice.fontSize= "0" + \property Voice.fontSize= 0 } normalkey = { @@ -130,13 +106,13 @@ specialkey = { % End the incipit and print a ``normal line start''. endincipit = \notes{ \partial 16; s16 % Hack to handle e.g. \bar ".|"; \endincipit - \property Staff.clefStyle = "fullSizeChanges" + \property Staff.clefStyle = #"fullSizeChanges" \nobreak \bar ""; } -autoBeamOff = \property Voice.noAutoBeaming = "1" -autoBeamOn = \property Voice.noAutoBeaming = "" +autoBeamOff = \property Voice.noAutoBeaming = #t +autoBeamOn = \property Voice.noAutoBeaming = ##f -emptyText = \property Voice.textEmptyDimension = "1" -fatText = \property Voice.textEmptyDimension = "" +emptyText = \property Voice.textEmptyDimension = ##t +fatText = \property Voice.textEmptyDimension = ##f diff --git a/ly/script.ly b/ly/script.ly index 38f89853d2..d6c35d9c55 100644 --- a/ly/script.ly +++ b/ly/script.ly @@ -1,5 +1,6 @@ -\scmfile "script.scm"; + +#(eval-string (ly-gulp-file "script.scm")) "dash-hat" = "marcato" "dash-plus" = "stopped" @@ -44,4 +45,4 @@ prallmordent = \script "prallmordent" upprall = \script "upprall" downprall = \script "downprall" segno = \script "segno" -coda = \script "coda" \ No newline at end of file +coda = \script "coda" diff --git a/make/lilypond.spec.in b/make/lilypond.spec.in index 74c0e642e9..91c6e7ca02 100644 --- a/make/lilypond.spec.in +++ b/make/lilypond.spec.in @@ -22,10 +22,7 @@ Group: Applications/Publishing %description documentation @BLURB@ -The documentation package is rather big, due to the many pictures and -different documentation formats. It is really a rip-off from the -LilyPond website. If you have direct internet access, you may always -read the documentation documentation there: http://www.lilypond.org. +The documentation of LilyPond, both in HTML and PostScript. %prep %setup diff --git a/make/mutopia-targets.make b/make/mutopia-targets.make index 7bc061169d..35b8afd3be 100644 --- a/make/mutopia-targets.make +++ b/make/mutopia-targets.make @@ -2,12 +2,14 @@ all: $(OUT_FILES) - local-WWW: $(ly_examples) $(fly_examples) $(ps_examples) $(png_examples) (cd $(outdir); $(PYTHON) ../$(buildscripts)/mutopia-index.py --prefix=../ --suffix=/$(outdir) $(html_subdirs) $(all_examples)) echo $^ > $(depth)/wwwlist # $(footify) $(outdir)/index.html +local-web: + $(MAKE) CONFIGSUFFIX=www local-WWW + convert-mudela: local-convert-mudela $(LOOP) diff --git a/make/out/lilypond.lsm b/make/out/lilypond.lsm index 2997e73783..cbb9b6fba6 100644 --- a/make/out/lilypond.lsm +++ b/make/out/lilypond.lsm @@ -1,15 +1,15 @@ Begin3 Title: LilyPond -Version: 1.2.15 -Entered-date: 18OCT99 +Version: 1.3.0 +Entered-date: 26OCT99 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.2.15.tar.gz + 1000k lilypond-1.3.0.tar.gz Original-site: ftp.cs.uu.nl /pub/GNU/LilyPond/development/ - 1000k lilypond-1.2.15.tar.gz + 1000k lilypond-1.3.0.tar.gz Copying-policy: GPL End diff --git a/make/out/lilypond.spec b/make/out/lilypond.spec index 7105c3e1f6..3e62d1f6d1 100644 --- a/make/out/lilypond.spec +++ b/make/out/lilypond.spec @@ -1,9 +1,9 @@ Name: lilypond -Version: 1.2.15 +Version: 1.3.0 Release: 1 Copyright: GPL Group: Applications/Publishing -Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.2.15.tar.gz +Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.3.0.tar.gz Summary: A program for printing sheet music. URL: http://www.cs.uu.nl/~hanwen/lilypond Packager: Han-Wen Nienhuys @@ -22,10 +22,7 @@ Group: Applications/Publishing %description documentation -The documentation package is rather big, due to the many pictures and -different documentation formats. It is really a rip-off from the -LilyPond website. If you have direct internet access, you may always -read the documentation documentation there: http://www.lilypond.org. +The documentation of LilyPond, both in HTML and PostScript. %prep %setup diff --git a/mutopia/J.S.Bach/Solo-Cello-Suites/allemande-cello.ly b/mutopia/J.S.Bach/Solo-Cello-Suites/allemande-cello.ly index da8e76a773..473a743eca 100644 --- a/mutopia/J.S.Bach/Solo-Cello-Suites/allemande-cello.ly +++ b/mutopia/J.S.Bach/Solo-Cello-Suites/allemande-cello.ly @@ -1,6 +1,5 @@ - \version "1.2.0"; \include "allemande-urtext.ly"; diff --git a/po/GNUmakefile b/po/GNUmakefile index c6540da3b1..fb421f7890 100644 --- a/po/GNUmakefile +++ b/po/GNUmakefile @@ -15,7 +15,6 @@ EXTRA_DIST_FILES = TODO $(PO_FILES) $(POT_FILES) STEPMAKE_TEMPLATES=podir include $(depth)/make/stepmake.make -include $(stepdir)/po-rules.make default: $(MO_FILES) diff --git a/scm/lily.scm b/scm/lily.scm index 8eafa4922a..de49911154 100644 --- a/scm/lily.scm +++ b/scm/lily.scm @@ -8,6 +8,9 @@ ;(debug-enable 'backtrace) ;;; library funtions + +; :use-module (ice-9 regex)) + (define (xnumbers->string l) (string-append diff --git a/scripts/mudela-book.py b/scripts/mudela-book.py index 1328087387..59bde3bbd7 100644 --- a/scripts/mudela-book.py +++ b/scripts/mudela-book.py @@ -682,7 +682,7 @@ def compile_all_files (chunks): system ('lilypond %s %s' % (lilyopts, texfiles)) for e in eps: - cmd = r"""tex %s; dvips -E -o %s %s""" % \ + cmd = r"""tex '\nonstopmode \input %s'; dvips -E -o %s %s""" % \ (e, e + '.eps', e) system (cmd) diff --git a/stepmake/bin/package-diff.py b/stepmake/bin/package-diff.py index 3fc89f375f..927cb0999e 100644 --- a/stepmake/bin/package-diff.py +++ b/stepmake/bin/package-diff.py @@ -52,9 +52,23 @@ def help (): ' -T, --dir-to=TO diff to directory TO\n' ) +def cleanup (): + global from_diff, to_diff, prev_cwd + os.chdir ('/tmp/package-diff') + sys.stderr.write ('Cleaning ... ') + os.system ('rm -fr %s %s' % (from_diff, to_diff)) + sys.stderr.write ('\n') + os.chdir (prev_cwd) + def untar (fn): # os.system ('pwd'); - sys.stderr.write ('untarring ' + fn + '\n') + try: + open (fn) + except: + sys.stderr.write ("Can't find tarball: %s\n" % fn) + cleanup () + sys.exit (1) + sys.stderr.write ("Untarring: %s\n" % fn) os.system ('gzip --quiet -dc ' + fn + '| tar xf - ') sys.stderr.flush () @@ -62,8 +76,13 @@ def remove_automatic (dirnames): files = [] for d in dirnames: - for p in pats: - files = files + find.find (p, d) + try: + for p in pats: + files = files + find.find (p, d) + except: + sys.stderr.write ("Can't find dir: %s\n" % d) + cleanup () + sys.exit (1) dirs = map (lambda d: find.find ('out', d), dirnames) dirs = reduce (lambda x,y: x + y, dirs) @@ -271,10 +290,5 @@ else: os.chdir (to_diff) makediff (from_diff, to_diff, patch_name) -os.chdir ('/tmp/package-diff') -sys.stderr.write ('cleaning ... ') -os.system ('rm -fr %s %s' % (from_diff, to_diff)) -sys.stderr.write ('\n') -os.chdir (prev_cwd) - +cleanup () diff --git a/stepmake/bin/release.py b/stepmake/bin/release.py index 9cad793748..cc6d6ec5ed 100755 --- a/stepmake/bin/release.py +++ b/stepmake/bin/release.py @@ -60,6 +60,7 @@ except: pass os.link(orig, os.path.join (package.release_dir, tarball)) +# urg: howto check exit code? os.system(sys.executable + ' ' + package.topdir + '/stepmake/bin/package-diff.py --package=' + topdir) diffname = pn + '.diff.gz' @@ -67,6 +68,10 @@ rel_pn = package.patch_dir + diffname diffname = os.path.join (outdir, diffname) -os.rename(diffname, rel_pn) +try: + os.rename(diffname, rel_pn) +except: + sys.stderr.write ("Can't find diff: %s\n" % diffname) + sys.exit (1) os.link(rel_pn, diffname) diff --git a/stepmake/stepmake/documentation-targets.make b/stepmake/stepmake/documentation-targets.make index fc2d648a1f..7223b973c4 100644 --- a/stepmake/stepmake/documentation-targets.make +++ b/stepmake/stepmake/documentation-targets.make @@ -1,14 +1,12 @@ default: -do-doc: $(OUTTXT_FILES) - local-WWW: $(OUTHTML_FILES) echo $^ > $(depth)/wwwlist -doc: do-doc - +local-web: + $(MAKE) CONFIGSUFFIX=www local-WWW footify: $(footify) $(sort $(wildcard $(outdir)/*.html out/*.html out-www/*.html)) diff --git a/stepmake/stepmake/documentation-vars.make b/stepmake/stepmake/documentation-vars.make index 82861d8227..6fb5343eae 100644 --- a/stepmake/stepmake/documentation-vars.make +++ b/stepmake/stepmake/documentation-vars.make @@ -7,20 +7,3 @@ footify=$(PYTHON) $(step-bindir)/add-html-footer.py --name $(PACKAGE_NAME) --ver footify-all-command=$(footify) `$(FIND) . -name '*.html' -print` -# -YO_FILES := $(wildcard *.yo) -POD_FILES := $(wildcard *.pod) -TEXINFO_FILES := $(wildcard *.texinfo) -OUTYO_FILES = $(addprefix $(outdir)/,$(YO_FILES)) -OUTPOD_FILES = $(addprefix $(outdir)/,$(POD_FILES)) -OUTTEXINFO_FILES = $(addprefix $(outdir)/,$(TEXINFO_FILES)) - -# -ALL_DOC_FILES = $(POD_FILES) $(TEXINFO_FILES) $(YO_FILES) -OUTTXT_FILES = $(OUTYO_FILES:.yo=.txt) $(OUTIN_FILES:.yo=.txt) -OUTHTML_FILES = $(OUTYO_FILES:.yo=.html) $(OUTIN_FILES:.yo=.html) - -OUTREADME_TXT_FILES=$(addprefix $(outdir)/,$(addsuffix .txt, $(README_TOP_FILES))) -OUTREADME_HTML_FILES=$(addprefix $(outdir)/,$(addsuffix .html, $(README_TOP_FILES))) - -ALL_SOURCES += $(ALL_DOC_FILES) diff --git a/stepmake/stepmake/generic-targets.make b/stepmake/stepmake/generic-targets.make index 327e1e9207..d2b2f9914d 100644 --- a/stepmake/stepmake/generic-targets.make +++ b/stepmake/stepmake/generic-targets.make @@ -82,10 +82,10 @@ Note that all commands recurse into SUBSDIRS\n\ local-help: -doc: -#UGH - true # $(MAKE) -C $(depth)/Documentation all +doc: local-doc + $(LOOP) +local-doc: # Ugh. C++ specific. doc++: diff --git a/stepmake/stepmake/metapost-rules.make b/stepmake/stepmake/metapost-rules.make index 2ecf0bc232..7f820ab4e5 100644 --- a/stepmake/stepmake/metapost-rules.make +++ b/stepmake/stepmake/metapost-rules.make @@ -9,5 +9,5 @@ mfplain.mem: $(MFPLAIN_MP) $(outdir)/%.pfa: $(outdir)/%.0 $(PYTHON) $(depth)/buildscripts/ps-to-pfa.py --output $(basename $<).pfa $< rm -f $(basename $(@F)).[0-9]* - rm -f $(basename $<).log $(basename $<).tfm + rm -f $(basename $<).log diff --git a/stepmake/stepmake/pod-vars.make b/stepmake/stepmake/pod-vars.make new file mode 100644 index 0000000000..541da42c94 --- /dev/null +++ b/stepmake/stepmake/pod-vars.make @@ -0,0 +1,3 @@ + +POD_FILES := $(wildcard *.pod) +OUTPOD_FILES = $(addprefix $(outdir)/,$(POD_FILES)) diff --git a/stepmake/stepmake/texinfo-rules.make b/stepmake/stepmake/texinfo-rules.make index 8879351964..7b013a29e7 100644 --- a/stepmake/stepmake/texinfo-rules.make +++ b/stepmake/stepmake/texinfo-rules.make @@ -19,3 +19,4 @@ $(outdir)/%.txt: $(outdir)/%.texi $(outdir)/%.texi: %.texi cp $< $@ + diff --git a/stepmake/stepmake/texinfo-targets.make b/stepmake/stepmake/texinfo-targets.make index 313f8a23e7..ca47789ef0 100644 --- a/stepmake/stepmake/texinfo-targets.make +++ b/stepmake/stepmake/texinfo-targets.make @@ -1,3 +1,5 @@ # empty local-WWW: $(addprefix $(outdir)/,$(TEXI_FILES:.texi=.html)) + +local-doc: $(OUTTXT_FILES) diff --git a/stepmake/stepmake/texinfo-vars.make b/stepmake/stepmake/texinfo-vars.make index 3a7e7ae04c..2447edd7a6 100644 --- a/stepmake/stepmake/texinfo-vars.make +++ b/stepmake/stepmake/texinfo-vars.make @@ -1,4 +1,6 @@ TEXI_FILES = $(wildcard *.texi) -EXTRA_DIST_FILES += $(TEXI_FILES) +ALL_SOURCES += $(TEXI_FILES) + +OUTTXT_FILES += $(addprefix $(outdir)/,$(TEXI_FILES:.texi=.txt)) diff --git a/stepmake/stepmake/yodl-vars.make b/stepmake/stepmake/yodl-vars.make new file mode 100644 index 0000000000..b97bb19492 --- /dev/null +++ b/stepmake/stepmake/yodl-vars.make @@ -0,0 +1,6 @@ + +YO_FILES := $(wildcard *.yo) +OUTYO_FILES = $(addprefix $(outdir)/,$(YO_FILES)) + +OUTTXT_FILES = $(OUTYO_FILES:.yo=.txt) $(OUTIN_FILES:.yo=.txt) +OUTHTML_FILES = $(OUTYO_FILES:.yo=.html) $(OUTIN_FILES:.yo=.html) diff --git a/stepmake/stepmake/yolily-toplevel-targets.make b/stepmake/stepmake/yolily-toplevel-targets.make index 72612a2cfb..4de1e45739 100644 --- a/stepmake/stepmake/yolily-toplevel-targets.make +++ b/stepmake/stepmake/yolily-toplevel-targets.make @@ -18,7 +18,7 @@ htmldoc: rm -f `find . -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 out-www/$(distname).diff.gz $(ERRORLOG)` index.html + tar cfz $(outdir)/htmldoc.tar.gz `cat wwwlist` `ls *.png $(ERRORLOG)` index.html localclean: rm -f wwwlist diff --git a/tex/titledefs.tex b/tex/titledefs.tex index 876dff5213..5b02ba912f 100644 --- a/tex/titledefs.tex +++ b/tex/titledefs.tex @@ -14,7 +14,7 @@ \def\theinstrument{} \def\theopus{} \def\thepiece{} -\def\themetre{} +\def\themeter{} \def\thepoet{} % % duh. LaTeX has a \title too. @@ -25,7 +25,7 @@ \newcommand*{\instrument}[1]{\def\theinstrument{#1}} \newcommand*{\opus}[1]{\def\theopus{#1}} \newcommand*{\piece}[1]{\def\thepiece{#1}} -\newcommand*{\metre}[1]{\def\themetre{#1}} +\newcommand*{\meter}[1]{\def\themeter{#1}} \newcommand*{\poet}[1]{\def\thepoet{#1}} % \newcommand*{\mudelatitle}[1]{\def\thetitle{#1}} @@ -35,8 +35,8 @@ \newcommand*{\mudelainstrument}[1]{\def\theinstrument{#1}} \newcommand*{\mudelaopus}[1]{\def\theopus{#1}} \newcommand*{\mudelapiece}[1]{\def\thepiece{#1}} -\newcommand*{\mudelametre}[1]{\def\themetre{#1}} -\newcommand*{\mudelameter}[1]{\def\themetre{#1}} +\newcommand*{\mudelametre}[1]{\def\themeter{#1}} +\newcommand*{\mudelameter}[1]{\def\themeter{#1}} \newcommand*{\mudelapoet}[1]{\def\thepoet{#1}} % % @@ -53,7 +53,7 @@ \edef\saveparskip{\parskip}\parskip-5mm \begin{minipage}[t]{0.45\textwidth} \ifx\mudelanull\thepoet\else{\thepoet}\\ \fi - \ifx\mudelanull\themetre\else{\themetre}\\ \fi + \ifx\mudelanull\themeter\else{\themeter}\\ \fi \end{minipage}\hspace*{\fill} \begin{minipage}[t]{0.45\textwidth} \begin{flushright} -- 2.39.2