From 3132736f1b95477ac562eb94f3a8536423e55e1c Mon Sep 17 00:00:00 2001 From: Han-Wen Nienhuys Date: Fri, 2 May 1997 15:17:09 +0200 Subject: [PATCH] release: 0.0.58 --- .dstreamrc | 4 +- .version | 2 +- AUTHORS.text | 2 +- Documentation/INSTALL.pod | 10 +- Documentation/faq.pod | 19 ++++ Documentation/mudela.pod | 85 +++++++++++++-- INSTALL.text | 34 +++--- NEWS | 28 +++++ TODO | 120 ++++++++++++++++++++- bin/convert-mudela | 16 ++- init/Makefile | 2 +- init/dutch.ini | 18 ++-- init/script.ini | 27 ++++- init/symbol.ini | 2 +- init/table_sixteen.ini | 33 ++++-- input/cadenza.ly | 2 +- input/collisions.ly | 2 +- input/coriolan-alto.ly | 2 +- input/error.ly | 4 +- input/header.ly | 2 +- input/kortjakje.ly | 2 +- input/pedal.ly | 51 +++++++++ input/rhythm.ly | 2 + input/scales.ly | 1 + input/scsii-menuetto.ly | 5 +- input/standchen.ly | 4 +- input/toccata-fuga-E.ly | 151 ++++++++++++++++++++++++++ input/twinkle.ly | 5 +- input/wohltemperirt.ly | 2 +- lib/duration.cc | 18 ++-- lily/.version | 5 +- lily/calcideal.cc | 3 +- lily/collision.cc | 12 ++- lily/lexer.l | 204 ++++++++++++++++++++---------------- lily/note.cc | 1 + lily/parser.y | 2 +- lily/script-column.cc | 2 + lily/staff-walker.cc | 2 + lily/stem-beam-reg.cc | 2 +- lily/stem.cc | 2 +- lily/time-description.cc | 5 +- make/lilypond.lsm | 6 +- make/lilypond.spec | 4 +- mi2mu/.version | 2 +- mi2mu/include/midi-track.hh | 6 ++ mi2mu/lily-stream.cc | 2 +- mi2mu/main.cc | 2 +- mi2mu/midi-score.cc | 2 +- mi2mu/midi-track.cc | 172 ++++++++++++++++++++++-------- tex/lilyponddefs.tex | 42 +++++--- tex/titledefs.tex | 7 +- 51 files changed, 891 insertions(+), 249 deletions(-) create mode 100644 input/pedal.ly create mode 100644 input/toccata-fuga-E.ly diff --git a/.dstreamrc b/.dstreamrc index 7fd7b97e0a..1607370104 100644 --- a/.dstreamrc +++ b/.dstreamrc @@ -18,8 +18,8 @@ Parser 1 InitDeclarations 1 Declarations 1 # FlexLexer debug -InitLexer 1 -Lexer 1 +InitLexer 0 +Lexer 0 parse_duration 1 parse_pitchmod 1 diff --git a/.version b/.version index e4f7f875dd..0ca2b3e656 100644 --- a/.version +++ b/.version @@ -1,6 +1,6 @@ TOPLEVEL_MAJOR_VERSION = 0 TOPLEVEL_MINOR_VERSION = 0 -TOPLEVEL_PATCH_LEVEL = 57 +TOPLEVEL_PATCH_LEVEL = 58 # use to send patches, always empty for released version: # include separator: ".postfix", "-pl" makes rpm barf diff --git a/AUTHORS.text b/AUTHORS.text index a817d8cc87..4658153098 100644 --- a/AUTHORS.text +++ b/AUTHORS.text @@ -61,6 +61,6 @@ DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN -18/Apr/97 LilyPond 0.0.57 1 +19/Apr/97 LilyPond 0.0.57 1 diff --git a/Documentation/INSTALL.pod b/Documentation/INSTALL.pod index fd039729c8..556f8690f8 100644 --- a/Documentation/INSTALL.pod +++ b/Documentation/INSTALL.pod @@ -74,12 +74,15 @@ to install GNU LilyPond, simply type: This will install the following files: + /usr/local/man/man1/mi2mu.1 + /usr/local/man/man5/mudela.5 /usr/local/man/man1/lilypond.1 /usr/local/lib/libflower.{so,a} /usr/local/bin/lilypond /usr/local/bin/mi2mu /usr/local/share/lilypond/* /usr/lib/texmf/texmf/tex/lilypond/* + /usr/lib/texmf/texmf/fonts/source/lilypond/* The TeX include directory is detected dynamically, but it can be adjusted with B<--enable-tex-prefix> and B<--enable-tex-dir>. The @@ -119,7 +122,7 @@ Make a shared library (linux, solaris (?) only ) =item --enable-printing -Enable debugging print routines (B<-d> option) +Enable debugging print routines (lilypond B<-d> option) =item --enable-optimise @@ -133,14 +136,13 @@ Compile with support for profiling Set the directory where texmf lives - =item --enable-tex-dir -Set then directory tex input is in +Set then directory tex input is in (detected as a subdir of tex-prefix) =item --enable-mf-dir -Set then directory tex input is in +Set then directory tex input is in (idem) =back diff --git a/Documentation/faq.pod b/Documentation/faq.pod index 3b33cf79b5..e2e9b63818 100644 --- a/Documentation/faq.pod +++ b/Documentation/faq.pod @@ -61,6 +61,16 @@ formatting: { c () g } > +Q: and where do the beams come into this picture? + +A: Beams are voicegroup-wide, and may be entered in any part of the +voicegroup: + + < { [a () e] } { c () g } > + < { [a () e } { c () g] } > + < { [a () e] } { [c () g] } > + +These all give the same result. Q: Why are [] around the notes, and () inbetween? @@ -77,6 +87,15 @@ quoting of music ("Stichnoten"). Besides if you are going to type an orchestral score, then you'd probably want to enter most of the meter, repeat commands only once. +Q: I want to insert some TeX commands + +A: You shouldn't: it's against LilyPond philosophy to have typesetting +commands in the mudela source. Moreover, this would be difficult. The +manner in which Request (the basic building blocks of mudela) are +translated into printable items is complex: it is not always possible +to associate one Request with one Item or Spanner. + + =head2 Miscellaneous Q: Why GPL? diff --git a/Documentation/mudela.pod b/Documentation/mudela.pod index 1cebe35be6..c46ccc58c0 100644 --- a/Documentation/mudela.pod +++ b/Documentation/mudela.pod @@ -36,7 +36,8 @@ entering C at the start of a line: =head2 Comments -Line comments are introduced by a C<%>. +Line comments are introduced by a C<%>. Block comments are delimited +by C<%{> and C<%}>. They do not nest. =head2 Versions @@ -48,7 +49,7 @@ inputfile was written, \version "0.0.50"; A perl-script which tries to convert to newer versions -(F) is included in the LilyPond distribution. +(F) is included in the LilyPond distribution. =head2 Words @@ -144,12 +145,12 @@ In Lyrics mode, a word is looked up in the following order: \word keyword, identifier, string In Lyric mode every sequence of non-digit and non-white characters -starting with an alphabetic character is considered a word. +starting with an alphabetic character or the '_'is considered a word. a&@&@&TSI|{[ % a word 1THtrhortho % not a "word" Leise Fl\"u\ss{}teren meine Sapfe % 4 words - + _ _ _ _ % 4 words: 4 spaces =back @@ -231,9 +232,12 @@ example: [c8 () d8 () e8 ] -Please note that these two characters do I necessarrily nest, eg: +Please note that these two characters do I necessarrily nest, +they should attached to the note C<[ {c4 c4} ]> will generate a parse +error for this reason. - [c8 e8(] [)g8 c'8] + [c8 e8(] [)g8 + % NO nesting! [c8 c8 c8]2/3 % a triplet Symbols which can be put at either side (above or below) of a staff @@ -384,6 +388,75 @@ You can transpose horizontal music in the following way: The result is, as you can see, again simple horizontal music. + +=head2 Voicegroups + +If more than one "voice" is in a staff, then you have the option of +putting the different voices into so called voicegroups: members of +the same voicegroup share certain characteristics, among others: + + - dynamics + - text + - beams and stems + - scripts + +For the actual list, see the init file F + +Putting different musical lines in to the same voicegroup effectively +makes LilyPond try to form chords of all those lines. Putting +different musical lines in to different voicegroups effectively makes +LilyPond try to set those lines as independently as possible. + +You can set the voicegroup of a voice with the command C<\group>, e.g., + + oboeI = \melodic { + \group "oboes"; + [e8 f8 + \group "+solo"; + [g16 a16 g16 fis16] + \group "-"; + g8 f8 + } + oboeII = \melodic { \group "oboes"; + c8 d8] + e4 + e8 d8 + } + /// ... + + \staff { + melodicregs \melodic{ oboeI } + \melodic { oboeII} + } + +In this example, the two oboe voices share one staff and are initially +in the voicegroup called "oboes". They will share beams, dynamics etc. +After two quavers, oboeI "pushes" its group: a new voicegroup is +created, called "oboes+solo". The C<\group "-"> command makes the +voice enter "oboes" again. + +Please do note that [] are voicegroup wide; the previous input is +valid: the beam, started in oboeI, voicegroup "oboes" is also ended in +voicegroup "oboes", albeit not in oboeI but oboeII + +This concept may seem contorted, but it allows you to set the separate +oboe parts without changing the C and C (assuming that +you edit the [] in the example.) + +The construct + + < { .... } {......} > + +makes a chord (all horizontal parts are in the same voicegroup). The construct + + < \multivoice { ....} { .... } > + +creates horizontal parts which behave independently. You will have to +set voicegroup features by hand (\stem and \hshift. See examples) + + + + =head2 Rhythms Rhythms in Mudela are entered identical to Simple mudela. diff --git a/INSTALL.text b/INSTALL.text index 2e2e52266c..20bcd2e721 100644 --- a/INSTALL.text +++ b/INSTALL.text @@ -61,7 +61,7 @@ CCCCOOOONNNNFFFFIIIIGGGGUUUURRRRIIIINNNNGGGG a -28/Apr/97 LilyPond 0.0.57 1 +2/May/97 LilyPond 0.0.58 1 @@ -70,12 +70,15 @@ CCCCOOOONNNNFFFFIIIIGGGGUUUURRRRIIIINNNNGGGG a INSTALL(1) LilyPond documentation INSTALL(1) + /usr/local/man/man1/mi2mu.1 + /usr/local/man/man5/mudela.5 /usr/local/man/man1/lilypond.1 /usr/local/lib/libflower.{so,a} /usr/local/bin/lilypond /usr/local/bin/mi2mu /usr/local/share/lilypond/* /usr/lib/texmf/texmf/tex/lilypond/* + /usr/lib/texmf/texmf/fonts/source/lilypond/* The TeX include directory is detected dynamically, but it can be adjusted with --------eeeennnnaaaabbbblllleeee----tttteeeexxxx----pppprrrreeeeffffiiiixxxx and --------eeeennnnaaaabbbblllleeee----tttteeeexxxx---- @@ -116,18 +119,15 @@ INSTALL(1) LilyPond documentation INSTALL(1) Make a shared library (linux, solaris (?) only ) --enable-printing - Enable debugging print routines (----dddd option) + Enable debugging print routines (lilypond ----dddd option) --enable-optimise Set maximum optimisation - --enable-profiling - Compile with support for profiling - -28/Apr/97 LilyPond 0.0.57 2 +2/May/97 LilyPond 0.0.58 2 @@ -136,14 +136,18 @@ INSTALL(1) LilyPond documentation INSTALL(1) INSTALL(1) LilyPond documentation INSTALL(1) + --enable-profiling + Compile with support for profiling + --enable-tex-prefix Set the directory where texmf lives --enable-tex-dir - Set then directory tex input is in + Set then directory tex input is in (detected as a + subdir of tex-prefix) --enable-mf-dir - Set then directory tex input is in + Set then directory tex input is in (idem) All options are documented in the _c_o_n_f_i_g_u_r_e help The option --------eeeennnnaaaabbbblllleeee----ooooppppttttiiiimmmmiiiisssseeee is recommended for Real Life @@ -187,13 +191,9 @@ RRRRUUUUNNNNNNNNIIIINNNNGGGG GNU LilyPond does use a lot of resources. For operation you need the following: - +o A fast computer (a full page of music typically takes - 1 minute on my 486/66, using the --------eeeennnnaaaabbbblllleeee----cccchhhheeeecccckkkkiiiinnnngggg - compile. It's lot slower than most MusiXTeX - -28/Apr/97 LilyPond 0.0.57 3 +2/May/97 LilyPond 0.0.58 3 @@ -202,6 +202,9 @@ RRRRUUUUNNNNNNNNIIIINNNNGGGG INSTALL(1) LilyPond documentation INSTALL(1) + +o A fast computer (a full page of music typically takes + 1 minute on my 486/66, using the --------eeeennnnaaaabbbblllleeee----cccchhhheeeecccckkkkiiiinnnngggg + compile. It's lot slower than most MusiXTeX preprocessors) +o TeX @@ -256,9 +259,6 @@ AAAAUUUUTTTTHHHHOOOORRRRSSSS - - - -28/Apr/97 LilyPond 0.0.57 4 +2/May/97 LilyPond 0.0.58 4 diff --git a/NEWS b/NEWS index 7db4f88634..9bbb2e1f44 100644 --- a/NEWS +++ b/NEWS @@ -1,9 +1,37 @@ +pl 58 + - lexer cleanup + - national chars in lyrics + - \stem 2; bf + - long comments: %{ %} + - *.ini mode bf + - bf: partial may be everywhere + - bf: meterchange not at start of measure + - some doc updates + - bf: stem too long if stem is down. + +pl 57.jcn3 + - dank je schat, voor wtk-i + - mi2mu tries to handle rests + - "!date" Thu May 1 02:34:04 MET DST 1997 + - maak je het niet te laat schat? + XXXX HWN + +pl 57.jcn2 + - small toccata-fuga-E.ly fixes + - \bar "||"; is now doublebar, "|." is finishbar + - collision hshift fix, with on-line assistance + pl 57 - lots of TODO doco - text alignment bugfix - bugfix Voice_group_regs::get_register_p() now is actually called too - bugfix init of Text_item::pos_i_ +pl 56.jnc1 + - toccata-fuga-in-E.ly, excerpts with real-life collisions + - \{l,r}{b,f}{toe,heel} --- using cmsy fonts... + - pedal.ly + pl 55.jcn1 - mi2mu man page - make doc fixlet diff --git a/TODO b/TODO index cb39f70019..839412f6ed 100644 --- a/TODO +++ b/TODO @@ -28,6 +28,98 @@ grep for TODO and ugh/ugr PARSER * Duration-> Musical_duration, typedef Rational Duration? +HKN buglist: + +exitcode? (altijd 0) + +\bar || ook dunne streepjes? Sluit de balk niet af! (soms met de +ruimte van een hele maat erachter (bij unmatching staffs) + +logfile? + +Gepunteerde rusten kloppen niet (punt eronder/boven ipv ernaast) + +Hele rusten ook in andere maatsoort dan 4/4 (en centreren in de maat) + + + +------------------------\ +barcheck failed in lyric mode -> assert (zie barcheck.ly) (0.0.57) +------------------------/ + +optie om te stoppen na eerste barcheck fail? (en wellicht in eerder +stadium van precessing) + +noten staan vaak te dicht aan de rechterkant van de maatstreep. + +optie om nummers/markers boven maatstrepen te zetten + +tekst staat erg ver van notenbalken af + +barcheck her-synchroniseren? (evt met optie) + +script ^"3" onder ondanks boven? + +symbolen voor triller? (dus "tr---") + +mogelijkheid om complete regions te commenten (met /* */ ofzo) + +waarom geen ; achter dingen in \paper? (\textwidth 180\mm) +(sowieso: wanneer wel en geen ; ?) + +Onduidelijk wanneer wel en geen \ voor een woord. Maak liever +verplichte regels + +implementeren versieringen door duration *0 ofzo? (geeft nu assertion, +zie duration0.ly) + +midi: instrumenten definieren? +midi: tempo halverwege het stuk wijzigen? +midi: gebonden noten niet herhalen? + +TeX literals invoegen? + +--------/\ +Dit geeft gigantische trubbels + < [d8.( e'32*2/3 d'32*2/3 cis'32*2/3 b16 d'16 cis'16 )b'16] + [b8. cis'32*2/3 b32*2/3 a32*2/3 gis16 fis16 e16 d16] > +(zie file junkjunk.ly) Ik had natuurlijk wat accolades moeten +plaatsen, maar ja... + +--------/\ +Inconsequent: ene keer wel, andere keer niet parse error? +ipt.ini][/usr/local/share/lilypond/init//table_sixteen.ini]]./lacidarem.ly: 56: +error: parse error: + <[d8. b8.> \duration 32; +./lacidarem.ly: 56: error: parse error: + <[d8. b8.> \duration 32; +./lacidarem.ly: 57: error: parse error: + \duration 16; | +]./lacidarem.ly: 65: warning: Score contains errors. Will not process it. : +--------/\ +De beam van de triool klopt niet. + <[d8. b8.> \duration 32; + \duration 16; + | +(zie ook ergens in lacidarem-pianoI.ly) +--------/ +scales.ly compileert niet meer (vanwege transpose?) + +Lengte van de stokken klopt vaak niet, zie bijv. de eerste maat van +langestok.ly. + +Triolen enzo: het zou handig zijn als je het cijfer "3" ook _tussen_ +twee noten kon plaatsen. Dat is bijvoorbeeld nodig in +c4*2/3 c8*2/3 + +---------------\ +\bar "||" \meter 6/8; op het eind van de regel staat door elkaar +gedrukt. + + BUGS * detect -pipe @@ -49,7 +141,7 @@ BUGS * chlapik balk ruimte - * standchen triool beam up/down + * standchen triool beam up/down SEVERELY LACKING: @@ -214,6 +306,9 @@ FUTURE IDEAS + * output an intermediate format, move backend/output routines into + interpreter + * scoping in Lexer: do general id- assignments in mudela. ID '=' EXPR; @@ -251,6 +346,11 @@ IDEAS * PostScript output (esp. Beams, Slurs, etc) + * poor man's ascii output possible? + + * Output an output format independent (ofi) typeset file; and + make ofi2 TeX, MusixTex, PostScript, Ascii... interpreters. + * caching breakpoints * use exceptions iso assert? @@ -267,3 +367,21 @@ IDEAS (junking test.tex and latex.test) - rename {standchen,scsii-menuetto,...}.tex + * (related with above) --simple-mudela option for lily, + to lily input files with one-voice simple mudela + (no red tape) + + * stack scripts in chords: + % fingering: footing: + < a-4 c-2 g-1 > < c-\ltoe e-\lheel > + + * parameterised scripts for fingering and footing: + + % toe to bheel four to five + % ^_u 4_5 + % - + % --|x-- --|x-- + % --|--- --|--- + % --|--- --|--- + (where "to" is a tiny bow) + diff --git a/bin/convert-mudela b/bin/convert-mudela index d879a5c1b0..dbb0f729a4 100755 --- a/bin/convert-mudela +++ b/bin/convert-mudela @@ -29,11 +29,23 @@ sub convert_0_0_52_to_0_0_53 } +sub convert_0_0_54_to_0_0_55 +{ + s/%{/% {/g; +} + + sub convert_0_0_53_to_0_0_54 { print STDERR "Not smart enough to convert \\transpose\n" if (/\\transpose/) ; } +# we-re not at 58 yet, but this is at least one of the rules +sub convert_0_0_55_to_0_0_56 +{ + s/\"\|\|\"/\"|.\"/g; +} + ############################################################### sub last_conversion @@ -66,7 +78,9 @@ sub identify my %minor_conversions = (50 => \&no_conv, 52 => \&convert_0_0_50_to_0_0_52, 53 => \&convert_0_0_52_to_0_0_53, - 54 => \&convert_0_0_53_to_0_0_54 + 54 => \&convert_0_0_53_to_0_0_54, + 55 => \&convert_0_0_54_to_0_0_55, + 56 => \&convert_0_0_55_to_0_0_56 ); diff --git a/init/Makefile b/init/Makefile index c8fee3cd50..ddf1ae7e02 100644 --- a/init/Makefile +++ b/init/Makefile @@ -21,7 +21,7 @@ DISTFILES = Makefile $(INIFILES) localinstall: $(INSTALL) -d $(datadir)/lilypond/init - $(INSTALL) -m 755 $(INIFILES) $(datadir)/lilypond/init + $(INSTALL) -m 644 $(INIFILES) $(datadir)/lilypond/init localuninstall: for i in $(INIFILES) ; do rm -f $(datadir)/lilypond/init/$$i; done diff --git a/init/dutch.ini b/init/dutch.ini index 79087224c5..b3d80dc62d 100644 --- a/init/dutch.ini +++ b/init/dutch.ini @@ -1,13 +1,15 @@ -% -% common dutch names for notes. "es" means flat, "is" means sharp -% +%{ + 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 { .. }' -% + + + 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 { ceses = \melodic_request { -1 0 -2 } ces = \melodic_request { -1 0 -1 } diff --git a/init/script.ini b/init/script.ini index f979ee4fcd..eb4633b7d1 100644 --- a/init/script.ini +++ b/init/script.ini @@ -13,9 +13,32 @@ staccato = \script { "staccato" 1 -1 0 0 } tenuto = \script {"tenuto" 0 -1 0 0 } upbow = \script { "upbow" 0 0 1 0 } downbow = \script { "downbow" 0 0 1 0 } -% toe = \script { "toe" 0 -1 0 0 } -% heel = \script { "heel" 0 -1 0 0 } lheel = \script { "heel" 0 0 -1 0 } rheel = \script { "heel" 0 0 1 0 } ltoe = \script { "toe" 0 0 -1 0 } rtoe = \script { "toe" 0 0 1 0 } +lbheel = \script { "bheel" 0 0 -1 0 } +rbheel = \script { "bheel" 0 0 1 0 } +lbtoe = \script { "btoe" 0 0 -1 0 } +rbtoe = \script { "btoe" 0 0 1 0 } +lfheel = \script { "fheel" 0 0 -1 0 } +rfheel = \script { "fheel" 0 0 1 0 } +lftoe = \script { "ftoe" 0 0 -1 0 } +rftoe = \script { "ftoe" 0 0 1 0 } +% +% left toe: right heel: +% +% u - +% - u +% ---|-----|-- --|x----|x-- +% ---|-----|-- --|-----|--- +% --x|----x|-- --|-----|--- +% ^ - +% - ^ +% back front back front +% +% +% heu, me thought for a moment that order in table_xxx.ini was +% being translated into priority... +back = \script { "back" 0 -1 -1 0 } +front = \script { "front" 0 -1 1 0 } diff --git a/init/symbol.ini b/init/symbol.ini index 91aad8cee5..715ee9db7f 100644 --- a/init/symbol.ini +++ b/init/symbol.ini @@ -1,4 +1,4 @@ -\version "0.0.54"; +\version "0.0.56"; \include "register.ini" \include "dynamic.ini" diff --git a/init/table_sixteen.ini b/init/table_sixteen.ini index 69167a77f1..b93ddb7b31 100644 --- a/init/table_sixteen.ini +++ b/init/table_sixteen.ini @@ -11,23 +11,33 @@ table_sixteen= % index TeXstring, xmin xmax ymin ymax "scripts" = \table { - "fermata" "\fermata" 0\pt 0\pt 0\pt 6\pt - "-fermata" "\ifermata" 0\pt 0\pt -6\pt 0\pt + "fermata" "\fermata" 0\pt 0\pt 0\pt 6\pt + "-fermata" "\ifermata" 0\pt 0\pt -6\pt 0\pt "portato" "\portato" "-portato" "\iportato" "tenuto" "\tenuto" "-tenuto" "\itenuto" "sforzato" "\sforzato" -0.8\pt 4.8\pt -1.92\pt 1.92\pt - "marcato" "\marcato" 0\pt 4.8\pt 0\pt 4\pt - "-marcato" "\imarcato" 0\pt 4.8\pt -4\pt 0\pt - "staccato" "\staccato" 0\pt 0\pt 0\pt 5\pt - "staccatissimo" "\staccatissimo" 0\pt 0\pt 0\pt 7.5\pt + "marcato" "\marcato" 0\pt 4.8\pt 0\pt 4\pt + "-marcato" "\imarcato" 0\pt 4.8\pt -4\pt 0\pt + "staccato" "\staccato" 0\pt 0\pt 0\pt 5\pt + "staccatissimo" "\staccatissimo" 0\pt 0\pt 0\pt 7.5\pt "-staccatissimo" "\istaccatissimo" 0\pt 0\pt -7.5\pt 0\pt "upbow" "\upbow" -1\pt 6\pt 0\pt 5\pt - "downbow" "\downbow" 0\pt 5\pt 0\pt 7.5\pt - "heel" "\heel" -1\pt 6\pt -5\pt 17.5\pt - "toe" "\toe" 0\pt 5\pt -5\pt 17.5\pt - } + "downbow" "\downbow" 0\pt 5\pt 0\pt 7.5\pt + "back" "\backorfront" 0\pt 6\pt 0\pt 3\pt + "-front" "\backorfront" -3\pt 5\pt 0\pt 3\pt +% oeps, segfault +% "heel" "\heel" 0\pt 6\pt -.5\pt 2\pt + "heel" "\heel" 0\pt 6\pt -1\pt 5\pt + "toe" "\toe" 0\pt 6\pt -1\pt 5\pt + "bheel" "\bheel" 0\pt 6\pt -1\pt 5\pt + "btoe" "\btoe" 0\pt 6\pt -1\pt 5\pt + "fheel" "\fheel" 0\pt 6\pt -1\pt 5\pt + "ftoe" "\ftoe" 0\pt 6\pt -1\pt 5\pt + "-back" "\backorfront" 0\pt 6\pt 0\pt 3\pt + "front" "\backorfront" 0\pt 6\pt 0\pt 3\pt + } "style" = \table { "roman" "\settext{%}" 0\pt 5\pt 0\pt 8\pt @@ -89,7 +99,8 @@ table_sixteen= "bars" = \table { "empty" "\emptybar" "|" "\maatstreep" 0\pt 0.4\pt -8\pt 8\pt - "||" "\finishbar" 0\pt 2\pt -8\pt 8\pt + "||" "\doublebar" 0\pt 4\pt -8\pt 8\pt + "|." "\finishbar" -4\pt 0\pt -8\pt 8\pt ":|" "\repeatbar" -4\pt 0\pt -8\pt 8\pt "|:" "\startrepeat" 0\pt 4\pt -8\pt 8\pt ":|:" "\repeatbarstartrepeat" 0\pt 16\pt -8\pt 8\pt diff --git a/input/cadenza.ly b/input/cadenza.ly index 52b306746e..98e1f4ad48 100644 --- a/input/cadenza.ly +++ b/input/cadenza.ly @@ -7,7 +7,7 @@ % Tested Features: cadenza mode -\version "0.0.54"; +\version "0.0.56"; cad = \melodic { diff --git a/input/collisions.ly b/input/collisions.ly index 333fd67e40..a202789ca4 100644 --- a/input/collisions.ly +++ b/input/collisions.ly @@ -1,5 +1,5 @@ % test the Collision resolution -\version "0.0.54"; +\version "0.0.56"; two_voice_steminvert = \melodic { < \multivoice diff --git a/input/coriolan-alto.ly b/input/coriolan-alto.ly index 8e5d3b568e..1fb5e8b0e3 100644 --- a/input/coriolan-alto.ly +++ b/input/coriolan-alto.ly @@ -10,7 +10,7 @@ % when lily can handle this, i-ll type the other 304 bars % (maybe even sooner :-) % -\version "0.0.54"; +\version "0.0.56"; alto = \melodic{ diff --git a/input/error.ly b/input/error.ly index 9eeada0ea9..4e05238f4c 100644 --- a/input/error.ly +++ b/input/error.ly @@ -1,4 +1,4 @@ -\version "0.0.54"; +\version "0.0.56"; \include "this-is-hopefully-a-nonexisting-file" @@ -15,7 +15,7 @@ mwa = \melodic{ a b ) ] % ok; error % a......... % fatal error -- assert a b c - ||| % + |.| % abc % ok; print error, no \output \bla % STRING, reduced to lyric_elt. a [ b % warning, still \output diff --git a/input/header.ly b/input/header.ly index 24104197fd..aa80f614bd 100644 --- a/input/header.ly +++ b/input/header.ly @@ -8,4 +8,4 @@ % Tested Features: %%End -\version "0.0.54"; +\version "0.0.56"; diff --git a/input/kortjakje.ly b/input/kortjakje.ly index ff94f49290..6765c8f7f0 100644 --- a/input/kortjakje.ly +++ b/input/kortjakje.ly @@ -7,7 +7,7 @@ % % copyright: None % -\version "0.0.54"; +\version "0.0.56"; % declare melody (which will be in *one* staff ) for the lead voice melodie = \melodic { diff --git a/input/pedal.ly b/input/pedal.ly new file mode 100644 index 0000000000..abebc0fccc --- /dev/null +++ b/input/pedal.ly @@ -0,0 +1,51 @@ +% pedal.ly +% +% Johann Sebastian Bach +% preludium en fuga in D +% bwv 532 +% +% fuga --- two bar excerpt of pedal part +% +% example for pedal studies + +% ugh, front and back priority are the same... +% one must use (ugh): +% left front: +% -\front-\l{toe,heel} +% left back: +% -\l{toe,heel}-\back +% rigth front: +% -\r{toe,heel}-\front +% right back: +% -\back-\r{toe,heel} + +% therefore: +% \lheel \ltoe \rheel \rtoe +% \lbheel \lbheel \lfheel \lftoe +% \rbheel \rbtoe \rfheel \rftoe + +\version "0.0.56"; + +\score{ + \staff{ melodicregs + \melodic { + \meter 4/4; + \key fis cis; + \clef bass; + \octave c; + % silly chord testing... +% these should be stacked... +% < 'c-\ltoe 'e-\lheel > < c'-\rtoe e'-\rheel> +% < 'c-\lheel 'e-\ltoe > < c'-\rheel e'-\rtoe> | + < 'c-\ltoe-\lheel 'e > < c'-\rtoe-\rheel e' > + < 'c-\lheel-\ltoe 'e > < c'-\rheel-\rtoe e' > | + % 46 + \duration 16; + [d-\lfheel e-\rbtoe fis-\ltoe e-\rbtoe] + [d-\lfheel e-\rbtoe fis-\lheel e] [d e fis e] [d e fis e] | + d4 r4 r4 [b-\rtoe a-\ltoe b-\rtoe fis-\ltoe] | + } + } + \paper{} +} + diff --git a/input/rhythm.ly b/input/rhythm.ly index c76a1ee0cd..2447023f81 100644 --- a/input/rhythm.ly +++ b/input/rhythm.ly @@ -3,6 +3,8 @@ % % add any impressive examples here, please +\version "0.0.56"; + ritme = \staff { melodicregs \melodic{ %\octave ; diff --git a/input/scales.ly b/input/scales.ly index 54cb531859..f819c24026 100644 --- a/input/scales.ly +++ b/input/scales.ly @@ -2,6 +2,7 @@ % scales with accents. % +\version "0.0.56"; blah = \staff{ melodicregs \melodic { \meter 6/8; diff --git a/input/scsii-menuetto.ly b/input/scsii-menuetto.ly index b665c77a7c..3f8f11436c 100644 --- a/input/scsii-menuetto.ly +++ b/input/scsii-menuetto.ly @@ -1,7 +1,8 @@ % scsii-menuetto.ly % % Solo Cello Suites -% J. S. Bach +% Johann Sebastian Bach (1685-1750) +% bwv 000 % % Suite II part v % Menuetto I @@ -11,7 +12,7 @@ % The purpose of this file is to demonstrate features of LilyPond. % (there is an accompanying LaTeX file, scsii-menuetto.tex) % -\version "0.0.54"; +\version "0.0.56"; %% Stuff from MPP version % \lefttitle{Menuetto} % \tempo{Moderato} diff --git a/input/standchen.ly b/input/standchen.ly index 7d9d9c7378..91b21fb94b 100644 --- a/input/standchen.ly +++ b/input/standchen.ly @@ -9,7 +9,7 @@ % The purpose of this file is to demonstrate features of LilyPond. % (there is an accompanying LaTeX file, standchen.tex) % -\version "0.0.54"; +\version "0.0.56"; commands = \melodic{ \skip 2.*4; @@ -20,7 +20,7 @@ commands = \melodic{ % volta2 \bar ":|"; \skip 2.*22; - \bar "||"; + \bar "|."; } melodie = \melodic{ diff --git a/input/toccata-fuga-E.ly b/input/toccata-fuga-E.ly new file mode 100644 index 0000000000..0220b0f89d --- /dev/null +++ b/input/toccata-fuga-E.ly @@ -0,0 +1,151 @@ +% toccata-fuga-E.ly +% +% toccata and fuga in E-major +% Johann Sebastian Bach (1685-1750) +% bwv 566 +% +% toccata: 3 bar excerpt +% 2nd fuga: transposed subject --- 4 bar except +% +% purpose of this file is testing: +% * real-life collisions +% * multi-voice input --- splitting? +% * organ staff... +% + +\version "0.0.56"; + +toccata_commands = \melodic{ + \meter 4/4; + \key fis cis gis dis; % E-major +} + +%toccata_right = \melodic \$toccata_commands { +toccata_right = \melodic{ + \$toccata_commands ++ + % 13 -- how to type -- where to split -- this more neatly ? + \octave c'; + <\multivoice + { \stem 1; \hshift 1; r4 dis'4 e'4.-. e'8( | )e'4 [d'8 fis'8] gis'4 [gis'8 fis'16 e'16] | fis'4( )[fis'8 e'16 dis'16] e'4 r8 e'8 } + { \stem 1; r4 bis4 cis'4-. cis'4 | ais'4( )[ais'16 gis'16 ais'16 b'16] dis'4 cis'4( | )[cis'8 dis'16 ais16] bis4 cis'4 r8 b8 } + { \stem -1; r4 < gis4 fis4 dis4 > gis4-. gis4 | ais4. cis'8 gis2 | fis4 gis4 gis4 r8 e8 } + > | + % 16 +} + +toccata_left = \melodic{ + \$toccata_commands ++ + \octave c; + \clef bass; + % 13 + <\multivoice + { \stem 1; bis2 cis'4-. cis'4( | )[cis'8 ais'8 d'8 cis'8] [bis8 gis8] cis'4 | dis'2 cis'4 r8 cis'8 } + { \stem 1; \hshift 1; r4 gis4. gis8( )gis4 | \stem -1; \hshift 0; ais4. fis8 gis4. ais8( | )ais4 gis4-. gis4 r8 gis8 } + { \stem -1; r4 < dis4 fis4 > < cis4 e4 > } + > | + % 16 +} + +toccata_pedal = \melodic{ + \$toccata_commands ++ + \octave c; + \clef bass; + % 13 + r4 'fis4-\ltoe 'e4.-\lheel e8-\rheel | + % 14 + fis4.-\rtoe fis8-.-\rtoe fis4-\rtoe [e8-\ltoe ais8-\rtoe] | + % 15 + dis4-\ltoe gis4-\rtoe [cis8-\ltoe 'b8-\lheel 'ais8-\rtoe 'gis8-\ltoe] | + % 16 +} + +fuga2_commands = \melodic{ + \meter 3/4; + \key fis cis gis dis; % E-major +} + +fuga2_right = \melodic{ + \$fuga2_commands ++ + % 15 + \octave c'; + <\multivoice + { \stem 1; b8 fis8 b4 } + { \stem -1; fis2 } + > + <% \multivoice % heu? + { e'4 } + { cis'4 } + { ais4 } + { fis4 } + > | + % 16 + <\multivoice + { \stem 1; dis'2 dis'4 | cis'2 cis'4 | b4( )[b8 cis'8 dis'8 e'8] } + { \stem 1; \hshift 1; b8 fis8 b2( | )[b8 a16 g16] a2 | a4 gis2 } + { \stem -1; fis2.( | )fis2.( | )fis4 e2 } + > | + % 19 +} + +fuga2_left = \melodic{ + \$fuga2_commands ++ + \octave c; + \clef bass; + % 15 + b2 + <\multivoice + { \stem 1; ais4 | bes2. } + { \stem -1; e4 | fis2 fis4 } + > + % 17 + cis'2 e'4 | + % 18 + b4. b8 b4 | +} + +fuga2_pedal = \melodic{ + \$fuga2_commands ++ + \octave c; + \clef bass; + % 15 + dis4.-\ltoe e8-\rtoe cis4 | + % 16 + 'b4.-\lheel [c8-\ltoe dis8-\rtoe e8-\rheel] | + % 17 + fis4.-\rtoe [e8-\rheel dis8-\rtoe cis8-\ltoe] | + % 18 + dis4-\rtoe e4-\rheel 'e4-\ltoe | +} + +break = \melodic{ \meter 4/4; r1 } + +% these should be two separate scores... +\score{ + \staff{ melodicregs + % why the extra "\melodic" (silly) + % let "[ x ]" be "dimension of x": + % [ melodic ++ melodic ] == [ simple-mudela ] + % [ \melodic{ melodic ++ melodic } ] == [ melodic ] + % ? + \melodic{ + \$toccata_right ++ \break ++ \$fuga2_right + } + } + \staff{ melodicregs + \melodic{ + \$toccata_left ++ \break ++ \$fuga2_left + } + } + \staff{ melodicregs + \melodic{ + \$toccata_pedal + ++ \break + ++ \$fuga2_pedal + } + } + \paper{} + \midi{ + \tempo 4:96 + } +} + diff --git a/input/twinkle.ly b/input/twinkle.ly index 3bbbaf2d92..26795ef17a 100644 --- a/input/twinkle.ly +++ b/input/twinkle.ly @@ -3,6 +3,9 @@ % "Twinkle twinkle little star" % % Copyright: none +\version "0.0.56"; + +\version "0.0.55"; melody = \melodic{ \clef\violin; @@ -36,7 +39,7 @@ accompany = \melodic { global = \melodic { \meter 2 / 4; \skip 2*24; -% \bar "||"; +% \bar "|."; } tekst = \lyric{ diff --git a/input/wohltemperirt.ly b/input/wohltemperirt.ly index f78af4da03..7d5a7d72b8 100644 --- a/input/wohltemperirt.ly +++ b/input/wohltemperirt.ly @@ -8,7 +8,7 @@ % Tested Features:stem direction, multivoice. % -\version "0.0.54"; +\version "0.0.56"; global = \melodic{ \meter 4/4 ; diff --git a/lib/duration.cc b/lib/duration.cc index 0c95c66a37..1b529ccc58 100644 --- a/lib/duration.cc +++ b/lib/duration.cc @@ -20,6 +20,16 @@ // statics Duration int Duration::division_1_i_s = 384 * 4; + +Duration::Duration( int type_i, int dots_i = 0) +{ +// this breaks mi2mu quite effectively +// assert(duration_type_b(type_i)); + type_i_ = type_i; + dots_i_ = dots_i; + ticks_i_ = 0; +} + bool Duration::duration_type_b(int t) { @@ -33,14 +43,6 @@ Duration::duration_type_b(int t) return bit_i == 1; } -Duration::Duration( int type_i, int dots_i = 0) -{ - assert(duration_type_b(type_i)); - type_i_ = type_i; - dots_i_ = dots_i; - ticks_i_ = 0; -} - Moment Duration::length() const { diff --git a/lily/.version b/lily/.version index 515736281a..04ee1d9883 100644 --- a/lily/.version +++ b/lily/.version @@ -1,7 +1,8 @@ MAJOR_VERSION = 0 MINOR_VERSION = 0 -PATCH_LEVEL = 57 +PATCH_LEVEL = 58 + # use to send patches, always empty for released version: # include separator: ".postfix", "-pl" makes rpm barf -MY_PATCH_LEVEL = +MY_PATCH_LEVEL = .jcn3 diff --git a/lily/calcideal.cc b/lily/calcideal.cc index 92720e7611..fa015012b3 100644 --- a/lily/calcideal.cc +++ b/lily/calcideal.cc @@ -41,7 +41,8 @@ Score::calc_idealspacing() } Moment delta_desired = j->when() - (d+i->when()); dist += paper_p_->duration_to_dist(delta_desired); - + if (!j->musical_b()) + dist += 1 PT; // ugh pscore_p_->connect(i->pcol_l_, j->pcol_l_, dist, strength); } } else if (j.ok()) { diff --git a/lily/collision.cc b/lily/collision.cc index 64ceafe19a..7e1f0988d7 100644 --- a/lily/collision.cc +++ b/lily/collision.cc @@ -21,6 +21,7 @@ Collision::add(Note_column* ncol_l) clash_l_arr_.push(ncol_l); add_dependency(ncol_l); } + static int idx(int dir, bool h_shift_b) { @@ -102,7 +103,8 @@ Collision::do_pre_processing() } while ((d *= -1) != 1); - + // y_extent: smallest y-pos noteball interval containing all balls + // 4 (0..3) groups: stem up/down; shift on/off; Interval_t middle( y_extent[0].min(), y_extent[3].max()); Interval_t open_middle( y_extent[3].max()+1, y_extent[0].min()-1); do{ @@ -111,9 +113,10 @@ Collision::do_pre_processing() } while ((d *= -1) != 1); if (!middle.empty_b() && - middle.length() <= 1 && col_l_a[idx(1,0)] && col_l_a[idx(-1,0)]) { - Notehead * nu_l= col_l_a[idx(1,0)]->head_l_arr_[idx(1,0)]; - Notehead * nd_l = col_l_a[idx(-1,0)]->head_l_arr_[idx(1,0)]; + middle.length() <= 2 && col_l_a[idx(1,0)] && col_l_a[idx(-1,0)]) { +// reproduction of bugfix at 3am ? + Notehead * nu_l= col_l_a[idx(1,0)]->head_l_arr_[0]; + Notehead * nd_l = col_l_a[idx(-1,0)]->head_l_arr_.top(); if (! (nu_l->balltype_i_ == nd_l->balltype_i_ && nu_l->dots_i_ == nd_l->dots_i_)) { x_off[idx(1,0)] -= 0.5; x_off[1] -= 0.5; @@ -130,4 +133,5 @@ Collision::do_pre_processing() } } + IMPLEMENT_STATIC_NAME(Collision); diff --git a/lily/lexer.l b/lily/lexer.l index beab1c8150..d4435664ca 100644 --- a/lily/lexer.l +++ b/lily/lexer.l @@ -1,4 +1,12 @@ %{ // -*-Fundamental-*- +/* + lexer.l -- implement the Flex lexer + + source file of the LilyPond music typesetter + + (c) 1996,1997 Han-Wen Nienhuys +*/ + #include @@ -35,7 +43,7 @@ %x lyrics %x notes %x quote - +%x longcomment A [a-zA-Z] @@ -57,30 +65,45 @@ BLACK [^ \n\t\f] RESTNAME [rs] NOTECOMMAND \\{WORD} DOTS \.+ -LYRICS {AA}[^0-9 \t\n\f]* -COMMENT %.*\n +LYRICS ({AA}|{NATIONAL})[^0-9 \t\n\f]* %% -{COMMENT} { + +{ + "%{" { + yy_push_state(longcomment); + } + %[^{\n].*\n { + } + %\n { + } + {WHITE}+ { + + } } +{ + [^\%]* { + } + \%*[^}%]* { + } + "%"+"}" { + yy_pop_state(); + } +} \\include { yy_push_state(incl); } -{WHITE}* { /* eat the whitespace */ } \"[^"]*\" { /* got the include file name */ String s (YYText()+1); s = s.left_str(s.length_i()-1); mtor << "#include `" << s << "\'\n"; new_input(s,source_l_g); yy_pop_state(); -} -<*>{WHITE}+ { - } {RESTNAME} { const char *s = YYText(); @@ -98,99 +121,99 @@ COMMENT %.*\n s=s.left_str(s.length_i() - 1); return scan_bare_word(s); } -{ALPHAWORD}/\' { - post_quotes_b_ = true; - return scan_bare_word(YYText()); -} -\'+ { - yylval.i = YYLeng(); - if (post_quotes_b_) { - post_quotes_b_ = false; - return POST_QUOTES; - } else - return PRE_QUOTES; -} -{ALPHAWORD} { - return scan_bare_word(YYText()); +{ + {ALPHAWORD}/\' { + post_quotes_b_ = true; + return scan_bare_word(YYText()); + } + \'+ { + yylval.i = YYLeng(); + if (post_quotes_b_) { + post_quotes_b_ = false; + return POST_QUOTES; + } else + return PRE_QUOTES; + } + {ALPHAWORD} { + return scan_bare_word(YYText()); -} + } -{NOTECOMMAND} { - return scan_escaped_word(YYText()+1); -} + {NOTECOMMAND} { + return scan_escaped_word(YYText()+1); + } -{DOTS} { - yylval.i = strlen(YYText()); - return DOTS; -} -{INT} { - yylval.i = String_convert::dec2_i( String( YYText() ) ); - return INT; -} + {DOTS} { + yylval.i = strlen(YYText()); + return DOTS; + } + {INT} { + yylval.i = String_convert::dec2_i( String( YYText() ) ); + return INT; + } -\+\+ { - return CONCAT; -} -\" { - start_quote(); + \+\+ { + return CONCAT; + } + \" { + start_quote(); + } } - \" { start_quote(); } -\\\\ { - *yylval.string += '\\'; -} -\\\" { - *yylval.string +='\"'; -} -[^"]+ { - *yylval.string += YYText(); -} -\" { - mtor << "quoted string: `" << *yylval.string << "'\n"; - yy_pop_state(); - return STRING; +{ + \\\\ { + *yylval.string += '\\'; + } + \\\" { + *yylval.string +='\"'; + } + [^"]+ { + *yylval.string += YYText(); + } + \" { + mtor << "quoted string: `" << *yylval.string << "'\n"; + yy_pop_state(); + return STRING; + } } -\" { - start_quote(); -} -{DOTS} { - yylval.i = strlen(YYText()); - return DOTS; -} -{INT} { - yylval.i = String_convert::dec2_i( String( YYText() ) ); - return INT; -} -{NOTECOMMAND} { - return scan_escaped_word(YYText()+1); -} -{LYRICS} { - /* ugr. This sux. */ - String s (YYText()); - int i = 0; - while ((i=s.index_i("_")) != -1) // change word binding "_" to " " - *(s.ch_l() + i) = ' '; - if ((i=s.index_i("\\,")) != -1) // change "\," to TeX's "\c " - { - *(s.ch_l() + i + 1) = 'c'; - s = s.left_str(i+2) + " " + s.right_str(s.length_i()-i-2); - } - yylval.string = new String(s); - mtor << "lyric : `" << s << "'\n"; - return STRING; -} -\| { - return YYText()[0]; -} -[{}] { - return YYText()[0]; -} -. { - return yylval.c = YYText()[0]; +{ + + \" { + start_quote(); + } + {DOTS} { + yylval.i = strlen(YYText()); + return DOTS; + } + {INT} { + yylval.i = String_convert::dec2_i( String( YYText() ) ); + return INT; + } + {NOTECOMMAND} { + return scan_escaped_word(YYText()+1); + } + {LYRICS} { + /* ugr. This sux. */ + String s (YYText()); + int i = 0; + while ((i=s.index_i("_")) != -1) // change word binding "_" to " " + *(s.ch_l() + i) = ' '; + if ((i=s.index_i("\\,")) != -1) // change "\," to TeX's "\c " + { + *(s.ch_l() + i + 1) = 'c'; + s = s.left_str(i+2) + " " + s.right_str(s.length_i()-i-2); + } + yylval.string = new String(s); + mtor << "lyric : `" << s << "'\n"; + return STRING; + } + . { + return yylval.c = YYText()[0]; + } } <> { @@ -229,6 +252,7 @@ COMMENT %.*\n . { return yylval.c = YYText()[0]; } + \\. { char c= YYText()[1]; yylval.c = c; diff --git a/lily/note.cc b/lily/note.cc index 248a25e60e..a939391bf3 100644 --- a/lily/note.cc +++ b/lily/note.cc @@ -70,6 +70,7 @@ get_text_req(int d , Text_def*def) Request* get_stemdir_req(int d) { + d = sign(long(d)); Group_feature_req * gfreq_p = new Group_feature_req; gfreq_p->type_str_ = "vdir"; gfreq_p->value_str_ = String(d); diff --git a/lily/parser.y b/lily/parser.y index d831a69670..b384729562 100644 --- a/lily/parser.y +++ b/lily/parser.y @@ -1,7 +1,7 @@ %{ // -*-Fundamental-*- #include -#define MUDELA_VERSION "0.0.54" +#define MUDELA_VERSION "0.0.56" #include "script-def.hh" #include "symtable.hh" diff --git a/lily/script-column.cc b/lily/script-column.cc index bc309b1e04..637eb42dec 100644 --- a/lily/script-column.cc +++ b/lily/script-column.cc @@ -27,6 +27,8 @@ Script_column::translate(Offset o) { for (int i=0; i < script_l_arr_.size(); i++) script_l_arr_[i]->translate(o); + for (int i=0; i < support_l_arr_.size(); i++) + support_l_arr_[i]->translate(o); } diff --git a/lily/staff-walker.cc b/lily/staff-walker.cc index 8dbc6f4a1a..97080b8949 100644 --- a/lily/staff-walker.cc +++ b/lily/staff-walker.cc @@ -52,6 +52,7 @@ Staff_walker::when() const void Staff_walker::process_timing_reqs() { + // first all meter changes for (int i=0; i < ptr()->timing_req_l_arr_.size(); i++) { Timing_req * tr_l = ptr()->timing_req_l_arr_[i]; if (tr_l->meterchange()) { @@ -68,6 +69,7 @@ Staff_walker::process_timing_reqs() } } + // then do the rest for (int i=0; i < ptr()->timing_req_l_arr_.size(); i++) { Timing_req * tr_l = ptr()->timing_req_l_arr_[i]; if (tr_l->partial()) { diff --git a/lily/stem-beam-reg.cc b/lily/stem-beam-reg.cc index dae02480b9..95f8979803 100644 --- a/lily/stem-beam-reg.cc +++ b/lily/stem-beam-reg.cc @@ -79,7 +79,7 @@ Stem_beam_register::process_requests() } if (stem_req_l_) { - stem_p_ = new Stem(4); + stem_p_ = new Stem(10); if (current_grouping) current_grouping->add_child( get_staff_info().time_C_->whole_in_measure_, diff --git a/lily/stem.cc b/lily/stem.cc index f775c20b25..a14ce880f9 100644 --- a/lily/stem.cc +++ b/lily/stem.cc @@ -130,7 +130,7 @@ Stem::set_default_stemlen() // ugh... how about non 5-line staffs? if ((max_head_i() < -2 && dir_i_ == 1 ) - ||(min_head_i() > staff_size_i_ + 2 && dir_i_ == -1) ){ + ||(min_head_i() > staff_size_i_ && dir_i_ == -1) ){ set_stemend( staff_size_i_ /2 ); } else { set_stemend( (dir_i_ > 0) ? max_head_i() + STEMLEN : diff --git a/lily/time-description.cc b/lily/time-description.cc index 44d9b3d5e9..e6945ba482 100644 --- a/lily/time-description.cc +++ b/lily/time-description.cc @@ -82,9 +82,8 @@ Time_description::set_meter(int l, int o) assert(o); one_beat_ = Rational(1)/Moment(o); whole_per_measure_ = Moment(l) * one_beat_; - if(whole_in_measure_) - error_t("Meterchange should be at start of measure", *this); } + bool Time_description::allow_meter_change_b() { @@ -99,8 +98,6 @@ Time_description::allow_meter_change_b() String Time_description::try_set_partial_str(Moment p)const { - if (when_) - return ("Partial measure only allowed at beginning."); if (p whole_per_measure_) diff --git a/make/lilypond.lsm b/make/lilypond.lsm index efece7a91e..2c3dc12e90 100644 --- a/make/lilypond.lsm +++ b/make/lilypond.lsm @@ -2,8 +2,8 @@ Begin3 Title: LilyPond -Version: 0.0.57 -Entered-date: 04/28/97 +Version: 0.0.58 +Entered-date: 05/02/97 Description: LilyPond is a program which converts a music-script (mudela) into TeX output, or MIDI to produce multi-staff scores. Features include multiple meters, clefs, keys, lyrics, versatile input-language, cadenzas @@ -13,7 +13,7 @@ Author: hanwen@stack.nl (Han-Wen Nienhuys) jan@digicash.com (Jan Nieuwenhuizen) Maintained-by: hanwen@stack.nl (Han-Wen Nienhuys) Primary-site: pcnov095.win.tue.nl /pub/lilypond/ - 300k lilypond-0.0.57.tar.gz + 300k lilypond-0.0.58.tar.gz Alternate-site: Original-site: Platform: unix/win32, GNU C++ diff --git a/make/lilypond.spec b/make/lilypond.spec index 3acf802fbf..9b43308086 100644 --- a/make/lilypond.spec +++ b/make/lilypond.spec @@ -1,9 +1,9 @@ Name: lilypond -Version: 0.0.57 +Version: 0.0.58 Release: 1 Copyright: GPL Group: Applications/Publishing -Source0: pcnov095.win.tue.nl:/pub/lilypond/lilypond-0.0.57.tar.gz +Source0: pcnov095.win.tue.nl:/pub/lilypond/lilypond-0.0.58.tar.gz Summary: A preprocessor to make TeX typeset music. URL: http://www.stack.nl/~hanwen/lilypond Packager: Han-Wen Nienhuys diff --git a/mi2mu/.version b/mi2mu/.version index abebfdd4a7..8ebe023f19 100644 --- a/mi2mu/.version +++ b/mi2mu/.version @@ -1,6 +1,6 @@ MAJOR_VERSION = 0 MINOR_VERSION = 0 -PATCH_LEVEL = 13 +PATCH_LEVEL = 14 # use to send patches, always empty for released version: MY_PATCH_LEVEL = # include separator: "-1" or ".a" # diff --git a/mi2mu/include/midi-track.hh b/mi2mu/include/midi-track.hh index e917ebe74f..5173c93532 100644 --- a/mi2mu/include/midi-track.hh +++ b/mi2mu/include/midi-track.hh @@ -31,8 +31,14 @@ public: private: void add_begin_at( PointerList& open_voices_r, Moment mom ); + int check_begin_bar_i( Moment now_mom, int open_bar_i ); + int check_end_bar_i( Moment now_mom, int open_bar_i ); Midi_voice* get_free_midi_voice_l( Moment mom ); void remove_end_at( PointerList& open_voices_r, Moment mom ); + void output_mudela_begin_bar( Lily_stream& lily_stream_r, Moment now_mom, int bar_i ); + void output_mudela_rest( Lily_stream& lily_stream_r, Moment begin_mom, Moment end_mom ); + void output_mudela_rest_remain( Lily_stream& lily_stream_r, Moment mom ); + IPointerList tcol_p_list_; IPointerList midi_voice_p_list_; int number_i_; diff --git a/mi2mu/lily-stream.cc b/mi2mu/lily-stream.cc index ea80a4fd01..8e6806564b 100644 --- a/mi2mu/lily-stream.cc +++ b/mi2mu/lily-stream.cc @@ -107,7 +107,7 @@ Lily_stream::header() *os_p_ << "% from input file: "; *os_p_ << midi_parser_l_g->filename_str_; *os_p_ << "\n\n"; - *os_p_ << "\\version \"0.0.54\";\n"; + *os_p_ << "\\version \"0.0.58\";\n"; } /* snapnie: dit kan toch automaties? Zie ook dstream. diff --git a/mi2mu/main.cc b/mi2mu/main.cc index b3f0577991..33fab2906f 100644 --- a/mi2mu/main.cc +++ b/mi2mu/main.cc @@ -82,7 +82,7 @@ main( int argc_i, char* argv_sz_a[] ) 0, "help", 'h', 0, "no-silly", 'n', 1, "output", 'o', - 1, "no-plets", 'p', + 0, "no-plets", 'p', 0, "quiet", 'q', 1, "smallest", 's', 0, "verbose", 'v', diff --git a/mi2mu/midi-score.cc b/mi2mu/midi-score.cc index 0c0bb5098d..d8bc7bb276 100644 --- a/mi2mu/midi-score.cc +++ b/mi2mu/midi-score.cc @@ -39,7 +39,7 @@ Midi_score::output_mudela( String filename_str ) lily_stream << "\\score{"; lily_stream.indent(); for ( PCursor i( midi_track_p_list_.top() ); i.ok(); i++ ) { - lily_stream << "\\staff{ "; + lily_stream << "\\staff{ melodicregs "; lily_stream << i->name_str(); lily_stream << " }"; lily_stream.newline(); diff --git a/mi2mu/midi-track.cc b/mi2mu/midi-track.cc index ecf889bba6..436bec8aa3 100644 --- a/mi2mu/midi-track.cc +++ b/mi2mu/midi-track.cc @@ -43,11 +43,28 @@ Midi_track::add_event( Moment mom, Midi_event* midi_event_p ) tcol_l( mom - midi_event_p->mom() )->add_event( midi_event_p ); } -// too much red tape? -String -Midi_track::name_str() +int +Midi_track::check_begin_bar_i( Moment now_mom, int open_bar_i ) { - return name_str_; + Moment bar_mom = midi_time_p_->bar_mom(); + int bar_i = (int)( now_mom / bar_mom ) + 1; + if ( bar_i > open_bar_i ) { + tor( NORMAL_ver ) << '[' << flush; + return bar_i; + } + return 0; +} + +int +Midi_track::check_end_bar_i( Moment now_mom, int open_bar_i ) +{ + Moment bar_mom = midi_time_p_->bar_mom(); + int bar_i = (int)( now_mom / bar_mom ) + 1; + if ( bar_i > open_bar_i ) { + tor( NORMAL_ver ) << ']' << flush; + return bar_i; + } + return open_bar_i; } Moment @@ -73,6 +90,13 @@ Midi_track::get_free_midi_voice_l( Moment mom ) return midi_voice_l; } +// too much red tape? +String +Midi_track::name_str() +{ + return name_str_; +} + Moment Midi_track::next_begin_mom( Moment now_mom ) { @@ -99,18 +123,13 @@ void Midi_track::process() { int bar_i = 1; - Moment bar_mom = midi_time_p_->bar_mom(); - for ( PCursor i( tcol_p_list_.top() ); i.ok(); i++ ) { - int bars_i = (int)( i->mom() / bar_mom ); - if ( bars_i > bar_i ) - tor( NORMAL_ver ) << '[' << bar_i << flush; + int begin_bar_i = check_begin_bar_i( i->mom(), bar_i ); + if ( begin_bar_i ) + tor( NORMAL_ver ) << begin_bar_i << flush; while ( i->midi_event_p_list_.size() ) get_free_midi_voice_l( i->mom() )->add_event( i->midi_event_p_list_.top().remove_p() ); - if ( bars_i > bar_i ) { - bar_i = bars_i; - tor( NORMAL_ver ) << ']' << flush; - } + bar_i = check_end_bar_i( i->mom(), bar_i ); } tor( DEBUG_ver ) << "ends: " << endl; @@ -132,37 +151,23 @@ Midi_track::output_mudela( Lily_stream& lily_stream_r ) lily_stream_r.newline(); int bar_i = 0; - Moment bar_mom = midi_time_p_->bar_mom(); PointerList open_voices; Moment now_mom = 0.0; - Moment then_mom = 0.0; - while ( now_mom < end_mom() ) { - int bars_i = (int)( now_mom / bar_mom ) + 1; - if ( bars_i > bar_i ) - tor( NORMAL_ver ) << '[' << flush; - - if ( bars_i > bar_i ) { - Moment into_bar_mom = now_mom - Moment( bars_i - 1 ) * bar_mom; - if ( bars_i > 1 ) { - if ( !into_bar_mom ) - lily_stream_r << "|"; - lily_stream_r.newline(); - } - lily_stream_r << "% " << String_convert::i2dec_str( bars_i, 0, ' ' ); - if ( into_bar_mom ) - lily_stream_r << ":" << Duration_convert::dur2_str( Duration_convert::mom2_dur( into_bar_mom ) ); - lily_stream_r.newline(); - } - + /// ugh, avoid status track 0... + while ( number_i_ && ( now_mom < end_mom() ) ) { + int begin_bar_i = check_begin_bar_i( now_mom, bar_i ); + if ( begin_bar_i ) + output_mudela_begin_bar( lily_stream_r, now_mom, begin_bar_i ); add_begin_at( open_voices, now_mom ); Moment begin_mom = next_begin_mom( now_mom ); - if ( bars_i > bar_i ) - tor( NORMAL_ver ) << bars_i << flush; + if ( begin_bar_i ) + tor( NORMAL_ver ) << begin_bar_i << flush; Moment end_mom = next_end_mom( now_mom ); + Moment then_mom = 0.0; if ( ( begin_mom > now_mom ) && ( begin_mom < end_mom ) ) then_mom = begin_mom; else @@ -171,19 +176,27 @@ Midi_track::output_mudela( Lily_stream& lily_stream_r ) tor( DEBUG_ver ) << "begin: " << begin_mom << " end: " << end_mom << endl; tor( DEBUG_ver ) << "slice: " << now_mom << ", " << then_mom << endl; +// rests, ugh + String str; +// if ( !open_voices.size() ) +// output_mudela_rest( lily_stream_r, now_mom, then_mom ); if ( open_voices.size() > 1 ) lily_stream_r << "< "; for ( PCursor i( open_voices.top() ); i.ok(); i++ ) - lily_stream_r << i->mudela_str( now_mom, then_mom, open_voices.size() - 1 ); +// lily_stream_r << i->mudela_str( now_mom, then_mom, open_voices.size() - 1 ); + str += i->mudela_str( now_mom, then_mom, open_voices.size() - 1 ); + if ( str.length_i() ) + lily_stream_r << str; + else + output_mudela_rest( lily_stream_r, now_mom, then_mom ); + if ( open_voices.size() > 1 ) lily_stream_r << "> "; - now_mom = then_mom; + remove_end_at( open_voices, then_mom ); - remove_end_at( open_voices, now_mom ); - if ( bars_i > bar_i ) { - bar_i = bars_i; - tor( NORMAL_ver ) << ']' << flush; - } + bar_i = check_end_bar_i( now_mom, bar_i ); + + now_mom = then_mom; } bar_i++; tor( NORMAL_ver ) << '[' << bar_i << ']' << flush; @@ -193,11 +206,84 @@ Midi_track::output_mudela( Lily_stream& lily_stream_r ) lily_stream_r.newline(); } + +void +Midi_track::output_mudela_begin_bar( Lily_stream& lily_stream_r, Moment now_mom, int bar_i ) +{ + Moment bar_mom = midi_time_p_->bar_mom(); + Moment into_bar_mom = now_mom - Moment( bar_i - 1 ) * bar_mom; + if ( bar_i > 1 ) { + if ( !into_bar_mom ) + lily_stream_r << "|"; + lily_stream_r.newline(); + } + lily_stream_r << "% " << String_convert::i2dec_str( bar_i, 0, ' ' ); + if ( into_bar_mom ) + lily_stream_r << ":" << Duration_convert::dur2_str( Duration_convert::mom2_dur( into_bar_mom ) ); + lily_stream_r.newline(); +} + + +void +Midi_track::output_mudela_rest( Lily_stream& lily_stream_r, Moment begin_mom, Moment end_mom ) +{ + Moment bar_mom = midi_time_p_->bar_mom(); + Moment now_mom = begin_mom; + int begin_bar_i =(int)( now_mom / bar_mom ) + 1; + Moment remain_mom = now_mom - Moment( begin_bar_i - 1 ) * bar_mom; + if ( remain_mom > Moment( 0 ) ) + output_mudela_rest_remain( lily_stream_r, remain_mom ); + + int end_bar_i = (int)( end_mom / bar_mom ) + 1; + now_mom += remain_mom; + + int bar_i = (int)( now_mom / bar_mom ) + 1; + bar_i = check_end_bar_i( now_mom, bar_i ); + for ( int i = 0; i < end_bar_i - begin_bar_i; i++ ) { + int begin_bar_i = check_begin_bar_i( now_mom, bar_i ); + if ( begin_bar_i ) + output_mudela_begin_bar( lily_stream_r, now_mom, begin_bar_i ); + lily_stream_r << "r1 "; + tor( NORMAL_ver ) << begin_bar_i << flush; + bar_i = check_end_bar_i( now_mom, bar_i ); + now_mom += bar_mom; + } + // use "int i" here, and gcc 2.7.2 hits internal compiler error + int ii = check_begin_bar_i( now_mom, bar_i ); + if ( ii ) + output_mudela_begin_bar( lily_stream_r, now_mom, ii ); + bar_i = check_end_bar_i( now_mom, bar_i ); + + remain_mom = end_mom - Moment( end_bar_i - 1 ) * bar_mom; + if ( remain_mom > Moment( 0 ) ) + output_mudela_rest_remain( lily_stream_r, remain_mom ); +} + + +void +Midi_track::output_mudela_rest_remain( Lily_stream& lily_stream_r, Moment mom ) +{ + int type_i = 2; + while ( mom > Moment( 0 ) ) { + Duration dur( type_i ); + Moment type_mom = Duration_convert::dur2_mom( dur ); + int count_i = (int)( mom / type_mom ); + for( int i = 0; i < count_i; i++ ) + lily_stream_r << "r" << dur.str() << " "; + type_i *= 2; + mom -= Moment( count_i ) * type_mom; + if ( Duration_convert::no_smaller_than_i_s + && ( type_i > Duration_convert::no_smaller_than_i_s ) ) + break; + } + +} + void Midi_track::remove_end_at( PointerList& open_voices_r, Moment mom ) { for ( PCursor i( open_voices_r.top() ); i.ok(); i++ ) -// if ( i->end_mom() == mom ) { +// if ( i->end_mom() == mom ) { } if ( i->end_mom() <= mom ) { tor( DEBUG_ver ) << "open_voices (" << open_voices_r.size() << "): -1\n"; i.remove_p(); diff --git a/tex/lilyponddefs.tex b/tex/lilyponddefs.tex index 19a0a48471..2851557010 100644 --- a/tex/lilyponddefs.tex +++ b/tex/lilyponddefs.tex @@ -13,12 +13,7 @@ \def\vcenter#1{\vbox to 0pt{\vss #1\vss}} \def\mathdef#1#2{\def#1{\mathchar{#2}}} -% \def\mathchar#1{\mathfnt\char#1} -\def\mathchar#1{$#1$} -\def\mathaccentraise#1#2{\dimen0=\noteheight - \rationalmultiply\dimen0*#2% - \raise\dimen0\hbox{#1}} -\def\mathaccentdef#1#2#3{\def#1{\mathaccentraise{\mathchar{#2}}{#3}}} +\def\mathchar#1{\mathfont\char#1} \def\topalign#1{\vbox to 0pt{#1\vss}} \def\botalign#1{\vbox to 0pt{\vss #1}} @@ -54,6 +49,7 @@ \font\musicdraw=musixsps \font\italicfont=cmti10 \font\dynfont=cmbxti10 scaled \magstep1 + \font\mathfont=cmsy10 \balkhoog=20pt \notewidth=6pt \noteheight=5pt @@ -75,6 +71,7 @@ \font\musicfnt=musix16 \font\dynfont=cmbxti12 \font\musicdraw=musixsps + \font\mathfont=cmsy8 \balkhoog=16pt \staffrulethickness=0.4pt \notewidth=5pt @@ -99,7 +96,7 @@ % \def\dyn{\italicfont} \def\dyn{\dynfont} \def\kdynf{\dynfont f\kern-.1ex} -\def\kdynm{\dynfont f\kern-.15ex} +\def\kdynm{\dynfont m\kern-.15ex} \def\kdynp{\dynfont p\kern-.15ex} \def\dynppp{\dynfont\dynp\kdynp p} @@ -159,14 +156,13 @@ \def\emptybar{} \def\thinbar{\vrule height\balkhoog} -%? what-s wrong with rightalign? \def\thickbar{\vrule height\balkhoog width 2\smallspace} \def\maatstreep{\thinbar} -% \def\finishbar{\rightalign{\thinbar\kern\smallspace\thickbar}} -\def\finishbar{\hss\rightalign{\thinbar\kern\smallspace\thickbar}} +%? what-s wrong with rightalign? +\def\finishbar{\rightalign{\thinbar\kern\smallspace\thickbar}} +%%% \def\finishbar{\hss\rightalign{\thinbar\kern\smallspace\thickbar}} % \def\repeatstopbar{\rightalign{\repeatcolon\hskip2\smallspace\thinbar\hskip\smallspace\thickbar}} \def\repeatstopbar{\hss\rightalign{\repeatcolon\hskip2\smallspace\thinbar\hskip\smallspace\thickbar}} -% \def\repeatstopbar{\kern-3\smallspace\rightalign{\repeatcolon\kern2\smallspace\thinbar\kern\smallspace\thickbar}\kern3\smallspace} \def\repeatstartbar{\hbox{\thickbar\kern\smallspace\thinbar\kern2\smallspace\repeatcolon}} \def\repeatstopstart{\hbox{\repeatcolon\kern2\smallspace\thinbar\kern\smallspace\thickbar\kern\smallspace\thickbar\kern\smallspace\thinbar\kern2\smallspace\repeatcolon}} \def\doublebar{\hbox{\thinbar\hskip\smallspace\thinbar}} @@ -248,10 +244,26 @@ \mdef\downbow{22} \mdef\portato{26} -% \mathdef\heel\cup % "225B -% \mathdef\toe\wedge % "225E -\mathaccentdef\heel\cup{-1/1} -\mathaccentdef\toe\wedge{-1/1} +\mathdef\cup{91} % \cup +\mathdef\wedge{94} % \wedge +\mathdef\striepke{0} % heu? + +%% custom characters --- this should go: add to (meta!) font +\def\myheel{\kern-.5ex\vbox{\cup}\kern-.5ex} +\def\mytoe{\kern-.5ex\vbox{\wedge}\kern-.5ex} +\def\mystriepke{\kern-1.1ex\vbox{\hbox{\kern-.05em\striepke}}\kern-1.1ex} + +\def\heel{\vbox{\myheel}} +\def\toe{\vbox{\mytoe}} +\def\backorfront{\mystriepke} + +\def\bheel{\vbox{\myheel\mystriepke}} +\def\btoe{\vbox{\mytoe\mystriepke}} +\def\fheel{\vbox{\mystriepke\myheel}} +\def\ftoe{\vbox{\mystriepke\mytoe}} +\def\heeltoe{\vbox{\myheel\mytoe}} +\def\toeheel{\vbox{\mytoe\myheel}} +%% \def\stem#1#2{\vrule height#2 depth-#1} diff --git a/tex/titledefs.tex b/tex/titledefs.tex index 33cf8133cc..cbf88bf422 100644 --- a/tex/titledefs.tex +++ b/tex/titledefs.tex @@ -1,3 +1,8 @@ +% +% ideally, we should create a LaTeX/TeX class +% for setting music in different sizes. +% + \def\thetitle{} \def\thecomposer{} \def\theinstrument{} @@ -12,4 +17,4 @@ {\bfseries\theinstrument}\hfill{\scshape\thecomposer} \end{center} \bigskip - } \ No newline at end of file + } -- 2.39.5