ford.edu/~knuth/ mf/ital-*.mf (these were taken from
the CM fonts)
-o Werner Lemberg <xlwy01@uxp1.hrz.uni-dortmund.de>, misc
+o Michael Krause <m.krause@tu-harburg.de>, breathing
+ signs
+
+o Werner Lemberg <xlwy01@uxp1.hrz.uni-dortmund.de>, misc
bugfixes, some Beam and Stem code.
-o David R. Linn <drl@vuse.vanderbilt.edu>, Mailing list
+o David R. Linn <drl@vuse.vanderbilt.edu>, Mailing list
maintenance.
-o Adrian Mariano <> Reference manual, tutorial fixes,
+o Adrian Mariano <> Reference manual, tutorial fixes,
glossary.
o Han-Wen Nienhuys <hanwen@cs.uu.nl>,
- http://www.cs.uu.nl/~hanwen/ Main author (initials:
+ http://www.cs.uu.nl/~hanwen/ Main author (initials:
HWN).
-o Jan Nieuwenhuizen <janneke@gnu.org>,
- http://www.xs4all.nl/~jantien/ Main author (initials:
+o Jan Nieuwenhuizen <janneke@gnu.org>,
+ http://www.xs4all.nl/~jantien/ Main author (initials:
JCN).
-o Alexandre Oliva <oliva@dcc.unicamp.br>, http://sun-
+o Alexandre Oliva <oliva@dcc.unicamp.br>, http://sun-
site.unicamp.br/~oliva/ testing
-o Franc,ois Pinard <pinard@iro.umontreal.ca>, parts of
- Documentation/Vocab*, started internationalization
+o Franc,ois Pinard <pinard@iro.umontreal.ca>, parts of
+ Documentation/Vocab*, started internationalization
+
stuff
o Jeffrey B. Reed <daboys@austin.rr.com>, Windows-NT sup-
o Shay Rojanski Some mudela source.
-Your name could be here! If you want to fix something, do
+Your name could be here! If you want to fix something, do
it, and send us a patch!
sect(Installing)
-question(If I install the .exe file on my DOS/windows 3.11 machine, it
-doesn't work.)
+COMMENT(look out: can't have line breaks in subsect() macro)
+question(If I install the .exe file on my DOS/windows 3.11 machine, it doesn't work)
The DOS port is done with the cygnus gnu/windows32 port of the GNU utils.
It does em(not) work with windows 3.x; you need Windows-NT (95/98?). This
See file(lilyponddefs.tex), it has some comments. Or use file(ly2dvi).
-question(How do I place lyrics under em(each) of the staves in a
-score, as choral music. I can work out how to put lyrics for each line
-all under the top line, or at the bottom but not between!)
+COMMENT(look out: can't have line breaks in subsect() macro)
+question(How do I place lyrics under em(each) of the staves in a score, as choral music. I can work out how to put lyrics for each line all under the top line, or at the bottom but not between!)
You change the order lyrics and staves. You have to name all
staves (lyric and melodic), otherwise they will end up in the same
sect(Development)
-question(Could you implement feature XXXX? It is really easy, just extend
-the syntax to allow YYYY!)
+COMMENT(look out: can't have line breaks in subsect() macro)
+question(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.
-
question(Can I join in on LilyPond development? How do I do this?)
LilyPond development is open for anyone who wants to join. We try
environment probably is indispensable.
In any case email(Derek Wyatt)(wyatt@scar.utoronto.edu) is working on
-GTK based editor, but that is still in an embryonal stage (see
-lurl(http://harmonia.scar.utoronto.ca). There is also a GUI package
-RoseGarden that could be extended to output mudela.
+GTK based editor, but that effort practically died. (see
+lurl(http://harmonia.scar.utoronto.ca).
+
+Matthew Hiller is working on extending Midiscore to handle mudela.
+lurl(http://zoo.cs.yale.edu/~meh25/MISClily/MISClily-0.0.3.tar.gz)
+
+
+There is also a GUI package RoseGarden that could be extended to
+output mudela.
If you want to work on this, please send e-mail to the mailing list
email(gnu-music-discuss@gnu.org).
+
question(I want to implement XXXX! How should I do this?)
Your best bet of getting us to include code, is to present it as a
Yes.
-question(Your make system does not adhere to GNU coding standards, could you
-please fix it?)
+COMMENT(look out: can't have line breaks in subsect() macro)
+question(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
sect(Running)
-question(I use dvilj4, and there are lots of warning messages for the
-printing)
+question(I use dvilj4, and there are lots of warning messages for the printing)
You should use dvips and ghostscript to print the code(dvi) output:
the slurs and beams are PS code(\special) commands.
-question(My symbols are all messed up after I upgraded, I get the
-wrong symbols and dvi-checksum errors!)
+COMMENT(look out: can't have line breaks in subsect() macro)
+question(My symbols are all messed up after I upgraded, I get the wrong symbols and dvi-checksum errors!)
We obviously mucked with the fonts in the upgrade. Remove em(all)
previous fonts, including the file(.pk) and file(.tfm) fonts in
file(/var/lib/texmf). A script automating this has been included, see
file(buildscripts/clean-fonts.sh).
-question(all the pk and tfm
-fonts are created in the directory where the mudela file is, not in
-"/var/spool/texmf" where I think they should be.)
+COMMENT(look out: can't have line breaks in subsect() macro)
+question(all the pk and tfm fonts are created in the directory where the mudela file is, not in "/var/spool/texmf" where I think they should be.)
Mats Bengtsson <mats.bengtsson@s3.kth.se> writes:
The bf(-M) option was added to LilyPond because processing the \paper
block is so slow.
-question(A lot of musical stuff doesn't make it to the MIDI file, eg.
-dynamics, articulation, etc.)
+COMMENT(look out: can't have line breaks in subsect() macro)
+question(A lot of musical stuff doesn't make it to the MIDI file, eg. dynamics, articulation, etc.)
The MIDI output was originally put in as a proof that MIDI could be
done, and as a method of proof"reading" the input. The MIDI support
sect(Copyright)
-question(How does copyright for sheet music work? Can I enter and
-spread my newly bought Bach urtext?)
+COMMENT(look out: can't have line breaks in subsect() macro)
+question(How does copyright for sheet music work? Can I enter and spread my newly bought Bach urtext?)
Silas S. Brown <ssb22@hermes.cam.ac.uk>:
question(But i want a native DOS/Windows-NT/95 port)
Reconsider. Try Linux. It's fun!
-
mail with subject "subscribe" to
email(gnu-music-discuss-request@gnu.org)
This list is archived at
- lurl(http://www.mail-archive.org/gnu-music-discuss@gnu.org)
+ lurl(http://www.mail-archive.com/gnu-music-discuss@gnu.org)
)
Announces of new versions will be sent to info-gnu-music and
The initialisation file with symbol tables etc. It
includes files from the directory
file(PREFIX/share/lilypond/ly/). (file(PREFIX) typically is file(/usr/local)
-)
+))
manspagesection(environment)
Please consult the documentation file file(AUTHORS) for more detailed
information, and small contributions.
-
includes files from the directory
\fBPREFIX/share/lilypond/ly/\fP\&. (\fBPREFIX\fP typically is \fB/usr/local\fP
)
-.IP
+.PP
manspagesection(environment)
-.IP
+.PP
.IP "LILYINCLUDE"
additional directories for finding lilypond data\&. The
format is like the format of \fBPATH\fP\&.
[FIXME]
.IP "LANG"
selects the language for the warning messages of LilyPond\&.
-.IP
+.PP
.SH "BUGS"
-.IP
+.PP
Lots of them\&. See \fBTODO\fP and \fBBUGS\fP
-.IP
+.PP
.SH "SEE ALSO"
-.IP
+.PP
LilyPond comes with various other documentation files, but most are in
the form of manual pages\&. They are included in the source
package\&. Interesting documents include
-.IP
+.PP
.IP "MANIFESTO"
Goals of the GNU LilyPond project\&.
.IP "FAQ"
The GNU LilyPond FAQ list
-.IP
+.PP
A further source for information is the website, which can be found at
http://www\&.lilypond\&.org/\&. The website contains on-line versions
of the documentation
-.IP
+.PP
GNU LilyPond is updated very frequently, the latest version is always
available at: ftp://ftp\&.cs\&.uu\&.nl/pub/GNU/LilyPond\&. This FTP
site is mirrored at a number of sites; consult the project web pages
for information about mirrors\&.
-.IP
+.PP
For programs which are part of the GNU music project, the following
mailing list have been setup:
-.IP
+.PP
.IP "info-gnu-music@gnu\&.org"
For information on the GNU Music project, to subscribe: send mail with
subject "subscribe" to info-gnu-music-request@gnu\&.org
For discussions concerning the GNU Music project, to subscribe: send
mail with subject "subscribe" to
gnu-music-discuss-request@gnu\&.org
-.IP
+.PP
Announces of new versions will be sent to info-gnu-music and
gnu-music-discuss\&.
-.IP
+.PP
.SH "REMARKS"
-.IP
+.PP
GNU LilyPond has no connection with the music package Rosegarden, other
-than the names being similar :-
+than the names being similar :-)
.PP
.SH "AUTHOR"
.PP
.PP
Please consult the documentation file \fBAUTHORS\fP for more detailed
information, and small contributions\&.
-.PP
}
-@Book{banter,
- author = {Harald Banter},
- title = {Akkord Lexikon},
- publisher = {Schott's S\"ohne},
- year = {1987},
- isbn = {ISBN 3-7957-2095-8},
- note = {Comprehensive overview of commonly used
- chords. Suggests (and uses) a unification for all different kinds
- of chord names.},
- address = {Mainz, Germany},
-}
-
@Book {read78,
note = {Sound (boring) review of the various hairy rhythmic notations used by avant-garde composers HWN},
bar line@barre (de mesure)@Taktstrich@@maatstreep@stanghetta@
bar; measure@mesure@Takt@@maat, maatstreep@@
baritone@bariton@Bariton@@bariton@@
-bass clef@clé de fa@Bass-Schlüssel, F-Schlüssel@@F sleutel, bas sleutel@chiave di basso@
+@@F-Schlüssel@@F sleutel@@A clef shaped as a curl with two dots. The position between the dots is the\rline of the F below central C.
+bass clef@clé de fa@Bass-Schlüssel@@bas sleutel@chiave di basso@A clef setting with central C on the first top ledger line.
bass@basse@Bass@@bas@@
beam@barre@Balken@@waardestreep/balk@barra@
beat@temps@Takt(-schlag)@@tel@@
brace@accolade@Klammer@@accolade, haak@accolada@Symbol at the start of a system that connects staffs.
brass@@Blechbläser@@koper (blazers)@@
-C clef@clé d'ut@Altschlüssel, C-Schlüssel@@C sleutel, alt sleutel@chiave di tenore@
+alto clef@clé d'ut@Altschlüssel@@alt sleutel@chiave di tenore@Clef setting that has central C on the middle staff line.
+C clef@@@@C sleutel. @@A clef symbol that looks like a horizontally mirrored 3. It\rindicates the position of the central C. Used in different\rpositions.
C@do@c@@C@@
C@ut@c@@@@
cadence@cadence@Kadenz@@cadens@@
tone@ton@Ton@@toon@@
tonic@tonique@Tonika@@tonica@@
transposition@transposition@Transposition@@transpositie@@Shifting a melody up or down in pitch, while keeping the same relative pitches.
-treble clef@clé de sol@Violinschlüssel, G-Schlüssel@@G sleutel, viool sleutel@chiave di violino@
+G clef@@@@G sleutel@@A clef symbol with a loop at the top and a spiral in the center. The center of the spiral indicates the G above central C.
+treble clef@clé de sol@Violinschlüssel@@viool sleutel@chiave di violino@Clef setting where the second lowest line is the G above central C.
tremolo@trèmolo@Tremolo@@tremolo@tremolo@
trill; shake@trille, tremblement, battement (cadence)@Triller@@triller@trillo@
triple meter@temps ternaire@@@driedelige maatsoort@@
\mudelafile{stem-tremolo.ly}
+Beams, stems and noteheads often have communication troubles, since
+the two systems for y dimensions (1 unit = staffspace, 1 unit = 1
+point) are mixed.
+
\section{Beams, slurs and other spanners}
\mudelafile{tup.ly}
+\section{Repeats}
+
+LilyPond has three modes for repeats: folded, unfolded and
+semi-unfolded. Unfolded repeats are fully written out. Semi unfolded
+repeats have the body written and all alternatives sequentially.
+Folded repeats have the body written and all alternatives
+simultaneously. If the number of alternatives is larger than the
+repeat count, the excess alternatives are ignored. If the number of
+alternatives is smaller, the first alternative is multiplied to get to
+the number of repeats.
+
+Unfolded behavior:
+
+\mudelafile{repeat-unfold.ly}
+
+Semi (un)0folded behavior:
+
+\mudelafile{repeat-semifold.ly}
+
\section{Multiple notes}
Rests should not collide with beams, stems and noteheads. Rests may
\mudelafile{staff-margin.ly}
+Breathing signs, also used for phrasing, do normally not influence
+global spacing -- only if space gets tight, notes are shifted to make
+room for the breathing sign. Breathing signs break beams running
+through their voice. In the following example, the notes in the first
+two bars all have the same distance from each other:
+
+\mudelafile{breathing-sign.ly}
+
\section{Clefs and Time Signatures}
%\sloppy
\def\postMudelaExample{\setlength{\parindent}{3.25ex}}
\title{Mudela-book tutorial}
+\author{TCA}
\begin{document}
\maketitle
%\printparam
COMMENT(
-questions:
- long lyrics don't get any space at the end
- lyrics and scripts collide
- \key b; \time 4/4; looks bad---no space between key sig and clef
- \portato still DOES NOT WORK!
- \cadenza vs. barNonAuto ?
- not enough space for \key b;
- I noticed that ledger lines in the previewer looked like they had
- a double line (of different lengths). On printed output, I think
- I can see a slight thickening of the ledger lines in the middle.
- Is this supposed to happen?
+ BUGS:
+
+ Causes segfault:
+
+ \score{
+ \notes{ \context Voice {
+ \repeat fold 2 { a b c d } {}
+ }
+ }
+ }
+
+
restStyle=mensural doesn't seem to work (lots of characters not found
for rests.fly)
- what happened to the Staff.textalignment and Lyrics.textalignment
- properties?
-
TODO:
- autobeamer
+ thread
paper size?
paper variables
the explanation of how lyrics mode parses words seems ridiculous.
accordion symbols
interstaff beams (beam-interstaff.ly)
interstaff slurs (see preludes-1.ly)
-
- Current list of undocumented properties:
-
- "alignmentReference" to do with minVerticalAlign, etc?
- "beamAuto"
- "beamAutoBegin"
- "beamAutoBegin" + type_str
- "beamAutoEnd"
- "beamAutoEnd" + type_str
- "createInitdefaultClef"
- "dynamicStyle"
- "postBreakPadding"
- "staffLineLeading"
- "stemLeftBeamCount"
- "stemRightBeamCount"
- time_str + "beamAutoBegin"
- time_str + "beamAutoBegin" + type_str
- time_str + "beamAutoEnd"
- time_str + "beamAutoEnd" + type_str
- type_ + "Direction"
- type_ + "HangOnClef"
- type_ + "ScriptPadding"
)
whentexinfo(notableofcontents())
-article(Mudela 1.0.14 / LilyPond 1.1.40 Reference Manual)
+article(Mudela 1.0.21 / LilyPond 1.1.49 Reference Manual)
(Adrian Mariano, Han-Wen Nienhuys and Jan Nieuwenhuizen)
(nop()PIPETHROUGH(date "+%B %d, %Y")()()nop())
way you like. This simple example shows how three chords can be
expressed in two different ways:
mudela(fragment,verbatim,center)(
-\notes<{a b c'}{c' d' e'}{e' f' g'}>
-\notes{<a c' e'><b d' f'><c' e' g'>}
-)
+\notes{
+ c
+ <a c' e'> <b d' f'> <c' e' g'>
+ <{a b c'}{c' d' e'}{e' f' g'}>
+})
)
Identifier assignments must appear at the top level in the Mudela
file. Note that semicolons are forbidden after assignments appearing
at the top level but they are obligatory after assignments appearing
-elsewhere.
+elsewhere. (Semicolons are also forbidden after code(\property) assignments.)
An identifier can be created with any string for its name, but you
will only be able to refer to identifiers whose names begin with a
letter and are entirely alphanumeric. It is also impossible to refer
to an identifier whose name is the same as the name of a keyword. The
following words are keywords:
-verb(absdynamic duration mark property skip
-accepts font midi pt spandynamic
-alternative grouping mm relative tempo
-bar header musicalpitch remove time
-cadenza in name repeat times
-chordmodifiers include notenames scm translator
-chords key notes scmfile transpose
-clef keysignature paper score type
-cm lyrics partial script version
-consists maininput penalty shape)
+verb(accepts duration midi relative textscript
+alternative font mm remove time
+bar grouping musicalpitch repeat times
+cadenza header name scm translator
+chordmodifiers in notenames scmfile transpose
+chords include notes score type
+clef key paper script version
+cm keysignature partial shape
+consists lyrics penalty skip
+consistsend maininput property spanrequest
+context mark pt tempo)
The right hand side of an identifier assignment is parsed completely
when the assignment is made. It therefore must have any context
R1*3 c'1 d'
)
+
+subsect(Automatic Beam Generation)
+label(autobeam)
+
+By default, Lilypond will generate beams automatically. This feature can be
+disabled by setting the code(Voice.beamAuto) property to 0. It can be
+overridden for specific cases by specifying explicit beams as
+described in Section ref(manualbeam).
+
+In order to decide how to generate beams, Lilypond uses a large number
+of Voice properties, whose default values appear in
+file(auto-beam-settings.ly). In general, beams can begin anywhere,
+but their ending location is significant. Beams can end on a beat, or
+at durations specified by the code(Voice.beamAutoEnd) property. To
+end beams every quarter note, for example, you could use set
+code(Voice.beamAutoEnd) equal to code("1/4"). To end beams every
+three eighth notes you would set it to code("3/8"). The same syntax
+can be used to specify beam starting points using code(Voice.beamAutoBegin).
+
+To allow different settings for different time signatures, these
+property names can start with code(time)var(N)code(_)var(M) to
+restrict the definition to var(N)code(/)code(M) time. So for example,
+to specify beams ending only for 6/8 time you would use the property
+code(Voice.time6_8beamAutoEnd). To allow different endings for notes
+of different durations, the duration can be tacked onto the end of the
+property. To specify beam endings for beams that contain 32nd notes,
+you would use code(Voice.beamAutoEnd_32).
+
+
subsect(Note Spanners: Beams, Slurs and Ties)
+label(manualbeam)
A beam is specified by surrounding the beamed notes with brackets
code([) and code(]).
)
+
subsect(Note Ornaments)
A variety of symbols can appear above and below notes to indicate
c''4-^_"c-\\^{ }" s4 }
\paper { linewidth = 12.\cm; }})
-Dynamic marks are specified by using an identifier after a note
-without a dash: code(c4 \ff). Note that this syntax is inconsistent
-with the syntax for other types of ornaments. The available dynamic
-marks are: code(\pppppp), code(\ppppp), code (\pppp), code(\ppp), code(\pp),
-code(\p), code(\mp), code(\mf), code(\f), code(\ff), code(\fff),
-code(\ffff), code(\fffff), code(\ffffff),
-code(\fp), code(sf), code(\sff), code(\sp), code(\spp), (\sfz) and code (\rfz).
+Dynamic marks are specified by using an identifier after a note without a dash:
+code(c4 \ff). Note that this syntax is inconsistent with the syntax for other
+types of ornaments. The available dynamic marks are: code(\pppppp),
+code(\ppppp), code(\pppp), code(\ppp), code(\pp), code(\p), code(\mp),
+code(\mf), code(\f), code(\ff), code(\fff), code(\ffff), code(\fffff),
+code(\ffffff), code(\fp), code(\sf), code(\sff), code(\sp), code(\spp),
+code(\sfz) and code(\rfz).
A crescendo mark is started with code(\cr) and terminated with
code(\rc). A decrescendo mark is started with code(\decr) and
chord are determined by looking at the immediately preceeding note.
mudela(fragment,verbatim,center)(
-\relative c' { <c e g>
+\relative c' { c <c e g>
<c' e g> <c, e' g> }
)
signature enables LilyPond to draw bar lines automatically. The time
signature is specified with the code(\time) keyword: code(\time 3/4).
If no time signature is given, LilyPond assumes 4/4. The automatic
-generation of bar lines can toggled with the code(\cadenza) keyword,
+generation of bar lines can toggled with the code(\cadenza) keyword or the
+code(Staff.barNonAuto) property,
and an incomplete measure at the start of the music can be created
using the code(\partial) keyword: code(\partial 8*2;) creates a
starting measure lasting two eighth notes.
sect(Repeats)
-
-OUTDATED. FIXME
-
In order to specify repeats, use the code(\repeat) keyword. By
default, repeats are printed with repeat symbols.
mudela(fragment,verbatim,center)(
c'1
-\repeat 2 { c'4 d' e' f' }
-\repeat 2 { f' e' d' c' })
+\repeat semi 2 { c'4 d' e' f' }
+\repeat semi 2 { f' e' d' c' })
In order to specify alternate endings, use the code(\alternative)
keyword.
mudela(fragment,verbatim,center)(
c'1
-\repeat 2 {c'4 d' e' f'}
+\repeat semi 2 {c'4 d' e' f'}
+\alternative { {d'2 d'} {f' f} })
+The code(semi) specifies that normal repeats will be printed. If
+code(fold) is used instead then the alternatives will be stacked:
+mudela(fragment,verbatim,center)(
+c'1
+\repeat fold 2 {c'4 d' e' f'}
\alternative { {d'2 d'} {f' f} })
When the repeats involve partial measures, it will be necessary to use
code(\partial) keywords in a somewhat unexpected way
to indicate some measure lengths.
mudela(fragment,verbatim)(
\context Staff { \relative c'{
- \repeat 2 { \partial 4; e | c2 d2 | e2 f2 | }
+ \repeat semi 2 { \partial 4; e | c2 d2 | e2 f2 | }
\alternative { { g4 g g } {\partial 1; a a a a | b1 } }
}})
Repeats can be unfolded by setting the property Staff.unfoldRepeats.
specified number of repeats.
mudela(fragment,verbatim)(
\context Staff { \relative c'{
- \repeat 3 { \partial 4; e | c2 d2 | e2 f2 | }
+ \repeat semi 3 { \partial 4; e | c2 d2 | e2 f2 | }
\alternative { { g4 g g } {\partial 1; e4 e e }
{\partial 1; a a a a | b1 } }
}})
dit(code(\cadenza) var(togglevalue)code(;)) Toggles the automatic generation
of bar lines. If var(togglevalue) is 0 then bar line generation is
-turne off. If var(togglevalue) is 1 then a bar is immediately
-printed and bar generation is turned on.
+turned off. If var(togglevalue) is 1 then a bar is immediately
+printed and bar generation is turned on.
dit(code(\clef) var(clefname)code(;)) Allowed only in music.
Sets the current clef. The argument is
var(string) should be added to the translator. See Section
ref(translators).
+dit(code(\consistsend) var(string)code(;)) Unknown function.
+
+dit(code(\context) var(contexttype) [code(=) var(contextname)]
+var(music) or code(\context) var(translatortype)code(;)) The first
+variant is used only within music to create an instance of a
+context. The new context can optionally be given a name. The
+specified var(music) is processed in the new context. The second
+variant appears within a code(\translator) block and specifies the
+type of translator being created.
+
dit(code(\duration) code({) var(length) var(dotcount) code(})) Specify note
duration. The parameter var(length) is the negative logarithm (base
2) of duration: 1 is a half note, 2 is a quarter note, 3 is an eighth
the duration of the first measure of the argument to
code(\alternative).
-dit(code(\penalty) code(=) var(int)code(;)) Allowed only in music.
+dit(code(\penalty) var(int)code(;)) Allowed only in music.
Discourage or encourage line breaks. See identifiers code(\break) and
code(\nobreak) in Section ref(ident).
code(\translator) block. Specifies that a performer or engraver named
var(string) should be removed. See Section ref(translators).
-dit(code(\repeat) var(count) code({) var(music) code(}))
+dit(code(\repeat) var(style) var(count) code({) var(music) code(}))
Repeats the specified
music var(count) times. Alternative endings can be specified by adding a
-code(\alternative) keyword after the code(\repeat).
+code(\alternative) keyword after the code(\repeat). The var(style)
+parameter should be either code(semi), for regular repeats, or
+code(fold) for repeats displayed vertically.
dit(code(\scm) var(scheme)code(;)) Embeds specified Scheme code.
printed. It works in Note Mode or Lyrics Mode (but generates a
mysterious error in lyrics).
-OBSOLETE
-
-dit(code(\spandynamic) code({) var(kind) var(toggle) code(})) Internal
-keyword for crescendo and decrescendo symbols. The first parameter
-var(kind) is set to 1 for a crescendo and -1 for a decrescendo. The
-second parameter is set to 1 to start the mark and 2 to stop it.
-Users should use the abbreviations which are defined in the
+dit(code(\spanrequest) var(startstop) var(type)). Define a spanning request
+var(startstop) is either -1 (code(\start)) or 1 (code(\stop)). The var(type)
+parameter is a string that describes what should be started. Supported types
+are "crescendo", "decrescendo", "beam", "slur". This is an internal command.
+Users should use the abbreviations which are defined in the
initialization file file(dynamic.ly).
-FIXME:
-
-code(\spanrequest) var(startstop) var(type). Define a
-spanning request var(startstop) is either -1 (start) or 1
-(stop). var(type) is a string that describes what should be started.
-Supported types are "crescendo", "decrescendo", "beam", "slur".
-
dit(code(\tempo) var(duration) = var(perminute)code(;)) Used within
code(\midi) or within music to specify the tempo. For example,
`code(\midi { \tempo 4 = 76;})' requests output with 76 quarter notes
only the last one is used to set the tempo for the entire MIDI output.
COMMENT(Is this true?)
+dit(code(\textscript) var(text) var(style)) Print the specified text as a
+script in the specified style.
+
dit(code(\time) var(numerator)code(/)var(denominator)code(;)) Change the time
signature. The default time signature is 4/4.
transposition should be specified inside another code(\relative). See Section
ref(transpose).
-dit(code(\context) var(contexttype) [code(=) var(contextname)]
-var(music) or code(\context) var(translatortype)code(;)) The first
-variant is used only within music to create an instance of a
-context. The new context can optionally be given a name. The
-specified var(music) is processed in the new context. The second
-variant appears within a code(\translator) block and specifies the
-type of translator being created.
+dit(code(\type) var(string)code(;)) Use inside code(\translator) to
+specify the type of the translator.
dit(code(\version) var(string)) Specify the version of Mudela that a
file was written for. The argument is the version number, for example
are parsed, either put quotes around the arguments to code(\property)
or be sure to leave a space on both sides of the dot.
-GONE dit(code(textalignment)) Controls alignment of lyrics. Set to code(\left)
-to align the left end of the lyric with the note; set to code(\right) to
-align the right end of the lyric with the note. Set to code(\center) to
-align the center of the lyric with the note.
)
description(
+dit(code(stemLeftBeamCount)) Specify the number of beams to draw on
+the left side of the next note.
+
+dit(code(stemRightBeamCount)) Specify the number of beams to draw on
+the right side of the next note.
+
+dit(code(beamAuto)) If set to 1 then beams are generated
+automatically. If set to zero then no beams will be automatically
+generated. The default value is 1.
+
+dit(code(beamAutoEnd)) Specifies when automatically generated beams
+can end. See Section ref(autobeam).
+
+dit(code(beamAutoBegin)) Specifies when automatically generated beams
+can start. See Section ref(autobeam).
+
dit(code(textEmptyDimension)) If set to 1 then text placed above or
below the staff is assumed to have zero width.
dit(code(oldTieBehavior)) Set to 1 in order to get old tie behavior
where ties would connect unequal pitches.
-dit(code(ydirection)) Determines the direction of stems, subscripts,
+dit(code(verticalDirection)) Determines the direction of stems, subscripts,
beams, slurs, and ties. Set to code(\down) to force them down,
code(\up) to force them up, or code(\free) to let LilyPond decide.
This can be used to distinguish between voices on the same staff. The
this property. See also the identifiers code(\voiceone),
code(\voicetwo), code(\voicethree) and code(\voicefour).
-dit(code(slurydirection)) Set to code(\free) for free choice of slur
+dit(code(slurVerticalDirection)) Set to code(\free) for free choice of slur
direction, set to code(\up) to force slurs up, set to code(\down) to
force slurs down. The shorthands code(\slurup), code(\slurdown), and
code(\slurboth) are available.
-dit(code(tieydirection)) Set to code(\free) for free choice of tie
+dit(code(tieVerticalDirection)) Set to code(\free) for free choice of tie
direction, set to code(\up) to force ties up, set to code(\down) to
force ties down.
a larger value for dashed slurs. Identifiers code(\slurnormal) and
code(\slurdotted) are predefined to set the first two settings.
-dit(code(hshift)) Set to 1 to enable LilyPond to shift notes
+dit(code(horizontalNoteShift)) Set to 1 to enable LilyPond to shift notes
horizontally if they collide with other notes. This is useful when
typesetting many voices on one staff. The identifier code(\shift) is
-defined to enable this.
+defined to enable this. If there are several voices, every voice must
+have a distinct value of this property or no shifting will occur.
dit(code(dynamicDir)) Determines location of dynamic marks. Set to
code(\up) to print marks above the staff; set to code(\down) to print
marks below the staff.
-GONE dit(code(textalignment)) Controls alignment of superscripted and
-subscripted text. Set to \left to align the left end of the text with
-the note; set to \right to align the right end of the text with the
-note. Set to \center to align the center of the text with the note.
+dit(code(dynamicStyle)) Set the text style for dynamics.
dit(code(textStyle)) Set the text style for superscripts and
subscripts. See above for list of text styles.
description(
+dit(code(createInitdefaultClef)) Specify whether clefs are created on
+default? (Doesn't seem to do anything.)
+
+dit(code(barNumberDirection)) Set to code(\up) or code(\down) to put
+bar numbers above or below the staff.
+
+dit(code(barNumberHangOnClef)) Set to 1 to cause bar numbers to appear
+above or below the clef instead of on the bar line.
+
+dit(code(barNumberScriptPadding)) Sets extra space between the bar
+number and the bar it labels.
+
+dit(code(markHangOnClef)) Set to 1 to cause marks to appear by clefs
+instead of by bar lines.
+
+dit(code(marginDirection)) Set to code(\left) or code(\right) to
+specify location of marginal scripts.
+
+dit(code(marginScriptPadding)) Specify extra space for marginal scripts.
+
+dit(code(forgetAccidentals)) Causes accidentals to be printed at every
+note instead of remembered for the duration of a measure.
+
+dit(code(noResetKey)) Do not reset the key at the start of a measure.
+Accidentals will be printed only once and are in effect until
+overridden, possibly many measures later.
+
+dit(code(staffLineLeading)) Specifies the distance (in points) between lines
+of the staff.
+
+dit(code(postBreakPadding)) Extra space in points to be added after
+the clef, time signature and key signature on the staff.
+
dit(code(barAtLineStart)) Set to 1 to produce a bar line after the
clef at the start of each line (but not at the beginning of the
music).
dit(code(barNonAuto)) If set to 1 then bar lines will not be printed
automatically; they must be explicitly created with code(\bar) keywords.
+Unlike with the code(\cadenza) keyword, measures are still counted. Bar
+generation will resume according to that count if this property is set to
+zero.
dit(code(defaultClef)) Determines the default clef. See code(\clef)
keyword.
description(
+dit(code(alignmentReference)) Set to code(\center) for vertical
+alignment reference point to be in the center of the vertical group.
+Set to code(\up) to put the reference point at the top of the group.
+
dit(code(maxVerticalAlign)) Set the maximum vertical distance between
staffs.
dit(code(\sff)) Print a subito-fortissimo symbol on preceeding note.
dit(code(\sfz)) Print a sforzato symbol on preceeding note.
dit(code(\shiftoff)) Disable horizontal shifting of note heads that collide.
-Sets the Voice.hshift property.
+Sets the Voice.horizontalNoteShift property.
dit(code(\shifton)) Enable note heads that collide with other note heads
-to be shifted horiztonally. Sets the Voice.hshift property.
+to be shifted horiztonally. Sets the Voice.horizontalNoteShift property.
dit(code(\slurboth)) Allow slurs to be above or below notes. This
-sets the Voice.slurydirection property.
+sets the Voice.slurVerticalDirection property.
dit(code(\slurdown)) Force slurs to be below notes. This sets the
-Voice.slurydirection property.
+Voice.slurVerticalDirection property.
dit(code(\slurup)) Force slurs to be above notes. This sets the
-Voice.slurydirection property.
+Voice.slurVerticalDirection property.
dit(code(\sp)) Print a subito-piano symbol on preceeding note.
dit(code(\spp)) Print a subito-forte symbol on preceeding note.
dit(code(\specialkey)) Allow keys signatures do differ in different
octaves. This sets the Staff.keyoctaviation property.
dit(code(\stemboth)) Allow stems, beams, and slurs to point either
-direction. This sets the Voice.ydirection property.
+direction. This sets the Voice.verticalDirection property.
dit(code(\stemdown)) Force stems, beams, and slurs to point down.
-This sets the Voice.ydirection property.
+This sets the Voice.verticalDirection property.
dit(code(\stemup)) Force stems, beams and slurs to point up. This
-sets the Voice.ydirection property.
+sets the Voice.verticalDirection property.
dit(code(\traditional)) Used for setting the
Score.beamquantisation property. Is equal to 2.
dit(code(\up)) Used for setting various direction properties. Is
used based on the mean center distance. If set to 4.0 then median
selection is used, based on the median center distance.
dit(code(castingalgorithm))
+dit(code(crescendo_shorten))
dit(code(forced_stem_shorten)) Stems that have been forced to go the
unnatural direction are shortened by this amount. Equal to
dit(code(forced_stem_shorten0))
subsect(MIDI Instrument Names)
label(midilist)
-The MIDI instrument name is set by the code(Staff."midiInstrument")
+The MIDI instrument name is set by the code(Staff.midiInstrument)
property or, if that property is not set, the code(Staff.instrument)
property. The instrument name should be chosen from this list. If
string does not exactly match one from this list then LilyPond uses
parts of Documentation/Vocab*
it()Donald Ervin Knuth, lurl(http://www-cs-staff.stanford.edu/~knuth/)
mf/ital-*.mf (these were taken from the CM fonts)
+it()nemail(Michael Krause)(m.krause@tu-harburg.de),
+ breathing signs
it()nemail(Werner Lemberg)(xlwy01@uxp1.hrz.uni-dortmund.de),
misc bugfixes, some Beam and Stem code.
it()nemail(David R. Linn)(drl@vuse.vanderbilt.edu),
COMMENT(redef(includefile)(1)(INCLUDEFILE(man/ARG1)))
includefile(programs.yo)
+nodeprefix()
redef(article)(3)(nodeprefix()chapter(ARG1)nodeprefix(Tutorial ))
COMMENT(yodl2texinfo should be able to cope now, although ugly...)
redef(article)(3)(chapter(ARG1))
COMMENT(yodl2texinfo should be able to cope now, although ugly...)
redef(article)(3)(chapter(ARG1))
+COMMENT(
+
+dropped? --jcn
+
redef(includefile)(1)(INCLUDEFILE(ARG1))
includefile(mutopia.yo)
+)
+
nchapter(Concept Index)
COMMENT( urg makeindex())
printindex()
+pl 49.mb1
+ - bf: ly2dvi -N
+ - Added dynamicPadding property (applies only to dynamic marks,
+ not (de)crescendi.
+
+pl 49.jcn4
+ - resurrected gnossienne-4
+ - Documentation fixes (for texinfo get yodl-1.31.13, tbr)
+ - minor abc2ly fixes; successfully converted some simple abc files from
+ http://faeryland.tamu-commerce.edu/joyce/
+ - www.mail-archive.COM
+
+pl 49.jcn1
+ - guile scm_gc_mark () workaround:
+ - via scm output wrapper buildscripts/lilypond.sh, set:
+ PATH=$LILYPONDPREFIX/buildscripts/out:$PATH
+ - scm output fixes
+
+pl 48.hwn2
+ - bf: rest-collisions.
+ - cleaned up standchen
+ - bf: slur dims.
+ - bf: unfold without enough alternatives.
+ - Use Lily version for \version.
+
+
pl 49.uu1
- - ran purify. Fixed some small problems
+ - ran purify. Fixed some small problems, plugged some leaks.
+ - bf: linebreak at |:
+ - doc updates by Adrian Mariano
+pl 49-rst
+ - Breathing signs by Michael Krause
+
+************
pl 48.hwn1
- \property hshift -> \property horizontalNoteShift (mudela 1.0.21)
Grep for TODO and ugh/ugr/urg.
.* BUGS
-. * junk separate mudela versioning.
. * indent = 0.0 with linewidth=-1.0
. * PostScript
. * header for PS enteredby = "bla <bla@bar.com>"
. * ps/lily.ps see comments.
-. * By the way, I'm not sure the translation of 'C, G, and F clef'
-> should include Alto, Violin, Bass <clef translated>.
-[..]
-
-I understand your point. It should be changed.
-
-
->
-> The terms C-clef, G-clef, F-clef stand for the signs, being
-> mutated forms of a C, a G and an F.
->
-> The terms Violin Clef etc. stand for the signs being used in
-> special positions on the staff.
->
-> The G-clef-sign indicates g' on the line around which the
-> snake centers. It is a Violin Clef if it is centered around the
-> second line (from below), and a French Violin Clef if it is
-> centered around the lowest.
->
-> The C-clef indicates c' on the line that gets
-> 'pinched' by it. It is a Soprano, Mezzosoprano (English?), Alto, Tenor
-> and (don't remember exactly, maybe Baritone) Clef, depending on
-> the line (from highest to lowest).
->
-> The F-clef-sign indicates f on the line between
-> the two dots. If it's on the second line from above, it is called
-> Bass Clef. If it's on the middle line, it is called (maybe
-> Baritone) Clef too, because it indicates the same pitches as the
-> C-Clef on the highest line. So, you could write an Alto Clef by
-> putting the F-clef sign on the lowest line (but that's _very_
-> uncommon).
->
-> Sorry, this is written very messy because I'm in a hurry,
-> but I hope you understand what I want to say.
->
. * didot / big point.
. * midi key.
. * Repeats
. * kind of 'initial property' iso fold/volta(semi)/unfold strings
. * fix singleStaffBracket
. * declare performers in \midi
+. * input/test/stem-spacing.ly: 12/4 touches first note
+4 too high?
. * fix MIDI
. * \shape 1st dim skipped?
. * turn slope-damping on/off
. * We need feta-din*.mf files for more sizes than 10.
. * fix dynamics decently, ie. use kerning & ligatures.
+. *
+BUGS:
+> +
+> + Causes segfault:
+> +
+> + \score{
+> + \notes{ \context Voice {
+> + \repeat fold 2 { a b c d } {}
+> + }
+> + }
+> + }
+> +
. * dots & rest collisions?
. * mudela-book.py
. * fix \mudelafile{} to have decent functionality
preMudelaExample[eps]{}, and change it in document body sometimes.
. * use less RE's
. * slurs colllide with lyrics.
-. * Is there any reasonable way to do this: I would like to have one file
-that can generate the same tune in two different modes without having
-to go through and rewrite all the music in the other mode.
-
-Lyrics and scripts collide.
-. * Phrasing: Indicating the textual underlay of a piece, or
-otherwise dividing a piece into phrases.
-
-There are distinct ways of specifying the first two (although at
-present, they're not properly distinguished) but no distinct way to
-specify the third. Should there be?
-. * rest collision minimum dist.
+. * junk _ in lyric mode for " "
+. * Lyrics and scripts collide.
. * a note with a circle after it, meaning:
note + circle = note + 1/4 of its length
possible with lily?
. * tuplets that are written as "number : note", for example
"3 : [image of a half note here]". possible?
-. * repeat engraver, gallina.ly
. * Matanya's tips:
+. * don't shorten stems/staffs closer to each other.
. * accidentals closer to note head
. * to space the staffs/staffgroups contained in the score.
. * heavier beams?
.* Cleanups needed
+. * \$ and $ identifier syntax.
+. * Y dimension units: staffspace vs. Point
. * Beam
. * Stem
. * Slur
. * Abstraction for engravers:
. * make "in-between" engraver (Tie, Extender)
. * make wide_spanner_engraver (line_group_spanner, staff_symbol)
-. * remove Interval dim_ from Dimension_cache and rename the struct.
. * do scaled fonts generally
. * The Lilypond accidental symbols are available through the TeX macros,
\textflat, \textsharp and \textnatural defined in the init file
are installed but they are generated in the mf/out/ directory during the
compilation.
. * make dependencies () a virtual function.
-. * one big ly2dvi input that includes *all* tests.
. * store req -> element, element -> element causes for warnings
. * include examples in RPM.
. * fix partial measures in meaningful way.
-. * add scripts to bars eg. |^"bla"
. * relative mode for mi2mu
. * uniformise recent feta contributions.
-. * use SCM and Molecules for {accordeon stuff, }
. * bigger and fatter 4/4 C
. * sort out directory stuff.
. * --prefix option?
. * do --safe for PS output?
. * convert-mudela --output
. * Staff_margin (with a partial measure.)
-. * fix pletvisibility properties:
-. * bracket on/off/no-bracket-when-beam
-. * num on/off/no-num-when-beam
-. * fix: standchen.
-. * junk text{sharp,flat,etc}
. * fix convert-mudela manpage
. * decimal point in \paper {}
. * { \voiceone <a'4.*2/3 d''4.*2/3 fis''4.*2/3> [g''8 fis'' e''] d''4 |}
. * scm-ify \property values.
. * move class Lookup {} into scm
. * msgfmt -o check?
-. * \breathmark TeX macro
. * add new glyphs to font.ly
. * formatting of input stuff.
. * \notes{ a \< b \cr } vs \notes{ a \< b \! }
.* STUFF
. * compulsory hshift
+. *
+My wish list for lyrics. I dream of a time when I will have enough time to
+become familiar enough with the source code to be able to implement some of
+these myself, but I don't know when that will be, so I thought I'd "publish"
+my suggestions in case someone else is in a position to give them some
+priority. Otherwise, perhaps they could go on the todo list?
+
+If any of these are already implemented, please let me what the syntax is to
+use them!
+
+1. Stanza numbering. Numbering at the beginning of a song with the number
+set to the left of the first note. It would also be nice (but not as
+important) to be able to have some form of automatic numbering at the
+beginning of each new line. This would make it easier to follow songs with a
+large number of stanzas.
+
+2. Hyphens between syllables. At the moment there appears to be no easy way
+to position a hyphen mid-way between the syllables it breaks.
+
+3. Notes centred above/below lyrics rather than left-aligned.
+
+4. It would be very nice to be able to build some kind of phrasing into the
+lyrics of hymns, etc, so that the first words of a phrase are left aligned
+with each other, the last words are right aligned, and the words in between
+are centred.
+
+5. In a song, with (say) four stanzas and a chorus, it would be nice to be
+able to vertically align the chorus midway between the staves.
+
+6. It would be nice to be able to put vertical brackets either side of a
+repeated section with different words for each repeat.
+
. * Give # lines in linebreaking.
. * arrows on slurs.
. * rewrite context defs using Scheme
. * add mudela-book-doc source to webstie.
. * Rethink Time_description
\cadenza , \meter, \grouping should all be \properties
+. * fix singleStaffBracket
. * rename
. * measure -> bar
-. * abbrev -> tremolo
. * abbreviation-beam -> (measured/unmeasured) tremolo
. * partial -> anacrouse
. * robustify Beam (in case of no stems, 32nd notes)
small sizes.
.* 3RD PARTY BUGS
+. * UMR: Uninitialized memory read
+ This is occurring while in:
+ qst [qsort.c]
+ qsort [libc.so.1]
+ Keyword_table::Keyword_table(Keyword_ent*) [keyword.cc:28]
+ My_lily_lexer::My_lily_lexer() [my-lily-lexer.cc:78]
+ My_lily_parser::parse_file(String,String) [my-lily-parser.cc:54]
+ do_one_file(String,String) [scores.cc:124]
+ Reading 4 bytes from 0xefffeca8 on the stack.
+ Address 0xefffeca8 is 728 bytes below frame pointer in function
. * GNU diff 2.7: diff -rN does not see a new directory with empty file
. * mf-to-table -> add space before ; in AFM output. (-> check AFM
spec. Is this a bug in afm2tfm?)
. * specify number of lines
.* INPUTLANGUAGE
-. * \rhythms 4 16 16 16 16; c c c c c -> c4 c16 etc.
+. * \rhythms 4 16 16 16 16; c c c c c -> c4 c16 etc.
+. * convention for slurs vs. phrasing marks.
. * Language:
. * \translator -> ?
. * fix \partial
. * \bla {} vs \bla ;
. * mix engraver hacking with music ?
. * \once\property KEY = VAL
-. * \addtranslator, \removetranslator
-. * junk ^ and _ for scripts
-. * junk _ for lyrics.
+. * input property
. * abstract grammar.
. * Figure out semicolons.
. * c4 4 4 4 for c4 c4 c4 c4?
. * lyric in staff (sharpsharp in staff, text below)
-. * half sharps/flats
-
. * write Dynamic_line (to group dynamics horizontally)
. * use Real for all y positions.
. * midi esp.: use I32 iso int where 32 bits are needed (or assumed...)
-. * stafftypes: voice names/ instrument names.
-
. * lily \tempo
. * % toe to bheel four to five
(where "to" is a tiny bow)
. * auxilliary file for caching info.
-
. * Text_crescendo
-. * revise calcideal
-
.* IDEAS
. * Output data structures of Mudela in XML/SGML.
. * create libmudela, or liblily_frontend
. * Spacing_request for manually adjusting spacing
. * caching breakpoints
. * used fixedpoint arithmetic for min. energy.
-. * move towards incremental algorithms.
-. * versioning stuff (cvt mudela, mudela, etc.)
-. * dynamic loading of engravers?
-.* SMOBS
-Han-Wen Nienhuys <hanwen@cs.uu.nl> writes:
-
-> class Foo_class {
-> Foo_smob *smob_ptr_;
-> }
->
-> struct Foo_smob {
-> Foo_class *class_ptr_
-> }
-
-Usually you can get away without having this interlinked structure.
-One piece of information you need when exporting objects to scheme is
-the smob tag for your class. You might store this value (a long) into
-a class static variable, or a file static variable. I'll use a class
-static variable in this example.
-
-I typically use code that works like this (untested code ahead):
-
-class Foo_class {
- static long *Foo_smob_tag;
- SCM obj; // representation as a scheme object, description comes later
-}
-
-// call this once on startup
-void init_Foo_class {
- static scm_smobfuns type_rec;
-
- type_rec.mark = foo_mark;
- type_rec.free = foo_free;
- type_rec.print = foo_display;
- type_rec.equalp = 0;
- Foo_class::Foo_smob_tag = new int(scm_new_smob(type_rec));
-}
-
-When you want to export an object to scheme, you put a pointer to the
-object itself in the cdr of the cell, and the tag in the car of the
-cell. The code looks like this:
-
-// Is this a Foo?
-static int
-foo_p(SCM obj)
-{
- return(SCM_NIMP(obj) && SCM_CAR(obj) == Foo_class::Foo_smob_tag);
-}
-
-// given a Scheme representation, return, a C++ representation
-static Foo_class *
-foo_unbox(SCM obj)
-{
- return((Foo_class*)SCM_CDR(obj));
-}
-
-// the SCM representation of the object is stored inside itself
-// this will become useful when destructor gets called
-static SCM
-foo_box(Foo_class *foo)
-{
- SCM_DEFER_INTS;
- SCM_NEWCELL(foo->obj);
- SCM_SETCAR(foo->obj, Foo_class::Foo_smob_tag);
- SCM_SETCDR(foo->obj, (SCM)foo);
- SCM_ALLOW_INTS;
- return foo->obj;
-}
-
-> C++ determines life time, so what is the strategy?
-
-What happens now when the destructor gets called? Lets set the cdr to
-NULL, and then check for that in all of the primitive functions that
-use your smob. We'll call this notion 'live'; a scheme object is
-'live' if the C++ representation still exists, it's dead if the C++
-object is gone. You can still have references to dead objects in
-scheme code; it's just an error to use them. This idea is stolen from
-Emacs's handling of buffers ('buffer-live-p' and friends).
-
-Add another function, foo_live_p:
-
-static int
-foo_live_p(SCM obj)
-{
- return(foo_p(obj) && SCM_CDR(obj) != NULL);
-}
-
-In you destructor, you need to do:
-
-~Foo_class()
-{
- SCM_CDR(this->obj, NULL);
-}
-
-When writing new primitives, now just check foo_live_p().
-
-I hope the above helps,
-
* OUTLINE SETUP
.* .EMACS
PACKAGE_NAME=LilyPond
MAJOR_VERSION=1
MINOR_VERSION=1
-PATCH_LEVEL=49
-MY_PATCH_LEVEL=uu1
+PATCH_LEVEL=50
+MY_PATCH_LEVEL=
# use the above to send patches: MY_PATCH_LEVEL is always empty for a
# released version.
--- /dev/null
+#!/bin/sh
+# via scm wrapper
+
+foo=lilypond.$$
+trap "rm $foo" 1 2 15
+touch lilypond.$$
+
+$LILYPONDPREFIX/lily/out/lilypond -f scm $*
+scm=`find . -maxdepth 1 -cnewer $foo -and -name '*.scm'`
+for i in $scm; do
+ dir=`dirname $i`
+ base=`basename $i .scm`
+ file=$dir/$base.tex
+ rm -f $file
+ guile -s $i > $file
+done
+rm -f $scm
+rm $foo
c4 d e f
\repeat semi 3 { g a b c }
\alternative { { c b a g } { f e d c } } c c c c
- \alternative { { c b a g } { f e d c } { c d e f } }
+% \alternative { { c b a g } { f e d c } { c d e f } }
g g g g
\repeat semi 2 { c c c c }
\repeat semi 2 { c c c c }
--- /dev/null
+%K1
+rh = {\property Thread.noteHeadStyle = ""}
+lh = {\property Thread.noteHeadStyle = "diamond"}
+\score {
+\notes {
+\context Staff = staffOne <
+\property Staff.numberOfStaffLines = "11"
+%\property Staff.timeSignatureStyle = "C"
+\keysignature bes;
+\time 4/4;
+\clef alto;
+\context ThreadedVoice = vOne <
+\context Thread=tOne{
+\stemup \slurup
+%1
+\rh [d''16 e'' f'' g''][a'' a' cis'' a'] d''4. e''8|
+%2
+[f''16 d'' g'' e''][a'' f'' e'' d''][cis''8 a''] a''4^\prall~
+%3
+[a''16 g'' f'' e''][d'' c'' bes' a'][bes'8 \lh g''] g''4^\prall~
+%4
+[g''16 f'' e'' d''][c'' bes' a' g'][a'8 \rh f''] f''4^\prall~
+%5
+[f''16 e'' d'' c''][bes' a' g' f'][g'8 \lh e''] e''4^\prall~
+%6
+[e''16 d'' cis'' b'][a' g' f' \rh e'] [f' d' g' e'][a' f' e' d']|
+%7
+[cis'16 a d' b][e' cis' f' d'][g' e' a' f'][b' g' cis'' a']|
+%8
+[d''16 b' e'' cis''][f'' d'' g'' e''] a''4 g''^\prall|
+%9
+\lh a''4 g''^\prall \rh a'' g''^\prall|
+%10
+[f''16 d'' g'' e''][a'' f'' e'' d''] [cis'' a' d'' b'][e'' g' f' e']|
+%11
+[f'16 d' g' e'][a' f' e' d'][cis' a d' b][e' cis' f' d']|
+%12
+[g'16 g' f' e'][f'8 g'16^\prall f'32 g'][a'16 e' f' d'][e' cis' \lh f'8]|
+%13
+[e'8 d'] cis'16 s8. s2 \bar "||";
+%14
+\rh [a'16 b' cis'' d''][e'' cis'' f'' d''] e''4. a'8|
+%15
+[b'16 g' cis'' a'][d'' b' e'' cis''][fis'' d'' g'' e''][a'' c'' bes' a']|
+%16
+[bes'16 g' c'' a'][d'' bes' a' g'][fis' d' g' e'][a' c' bes a]|
+%17
+\lh [bes16 g c' a][d' bes e' c'][f' d' g' e'][a' f' bes' g']|
+%18
+\rh c''4 bes'^\prall \lh c'' bes'^\prall|
+%19
+\rh [c''8 f''][bes' e''][a'16 f' c'' a'][f'' c'' a'' f'']|
+%20
+[e''16 g'' c'' e''][g' c'' bes' a'] \lh [bes' g' d'' bes'][g'' d'' bes'' g'']|
+%21
+[f''16 a'' d'' f''][a' d'' c'' b'] \rh [c'' a' e'' c''][a'' e'' c''' a'']|
+%22
+[gis''16 b'' e'' gis''][b' d'' cis'' b'][cis''8 a''] a''4^\prall^"\\textflat"~
+%23
+[a''16 g'' f'' e''][d'' c'' \lh bes' a'] [bes'8 \rh g''] g''4^\prall~
+%24
+[g''16 f'' e'' d''][c'' bes' \lh a' g'][a'8 \rh f''] f''4^\prall~
+%25
+[f''16 e'' d'' c''][bes' a' \lh g' f'][g'8 \rh e''] e''4^\prall~
+%26
+[e''16 d'' cis'' b'][a' g' f' e'] [f' d' g' e'][a' f' bes' g']|
+%27
+\lh [f'16 d' g' e'][a' f' bes' g'] \rh [f' d' g' e'][a' f' bes' g']|
+%28
+[a'8 d''][g' cis''] \lh [a' f''][g' e'']|
+%29
+\rh [a'8 d''][g' e''][f'16 d' g'16 e'][a' f' b' g']|
+%30
+[cis''16 a' d'' e''][f'' d'' e'' cis''][d'' a' bes' g'][a' f' \lh bes'8]|
+%31
+[a'8 g'] f'16 s8. s2 \bar "|.";
+}
+\context Thread=tTwo{
+s1*9|
+%10
+d''16 s4.. a'16 s4..|
+%11
+d'16 s2...|
+s1*3|
+%15
+s2 d''16 s4..|
+%16
+g'16 s4.. d'16 s4..|
+s1*2|
+%19
+s8 \rh a'' s g'' s2|
+s1*8
+%28
+s8 f'' s e'' s d'' s cis''|
+%29
+s8 f'' s cis''
+}>
+\context ThreadedVoice = vTwo <
+\context Thread=tThree{
+\stemdown \slurdown
+%1
+\lh s2 [d'16 e' f' g'][a' a cis' a]|
+%2
+[d'8 e' f' g'][a' a' a' a']|
+%3
+[a'8 a' a' f'][g \rh bes' bes' bes']|
+%4
+[g'8 g' g' e'][f \lh a' f' a']|
+%5
+[d'8 f' d' d'][e \rh g' g' g']|
+%6
+[e'8 e' e' a] [d' \lh e f g]|
+%7
+a8 s [cis' d'][e' f'][g' a']|
+%8
+[b'8 cis''][d'' e''][f''16 d'' bes' g'][e'' cis'' a' cis'']|
+%9
+\rh [f''16 d'' bes' g'][e'' cis'' a' cis''] \lh [f'' d'' bes' g'][e'' cis'' a' cis'']|
+%10
+[d'8 e' f' g'][a b cis' a]|
+%11
+[d8 e f g][a b][cis' d']|
+%12
+[e16 e' d' cis'][d'8 bes] \stemup a,4 \stemdown s8 \rh [d'16 b]|
+%13
+[cis'16 a b gis][a16 e cis e] \lh \stemup a,4^\prall^"\\textnatural" r^\fermata|
+%14
+\stemdown s2 [a16 b cis' d'][e' cis' f' d']|
+%15
+[g'8 a'][b' cis''][d' e' fis' d']|
+%16
+[g8 a bes c'][d e fis d]|
+%17
+\rh [g8 a][bes c'][d' e'][f' g']|
+%18
+\lh [a'16 f' d' bes][g' e' c' e'] \rh [a' f' d' bes][g' e' c' e']|
+%19
+\lh [a'16 f' d' bes][g' e' c' e'][f'8 f f f,]|
+%20
+[c8 c' c' fis'] \rh [g' g g g,]|
+%21
+[d8 d' d' gis'] \lh [a' a a a,]|
+%22
+[e8 e, e, e,][a, a' a' a']|
+%23
+[f,8 a' a' f'][\rh g, \lh bes' bes' bes']|
+%24
+[e,8 e' g' e'][\rh f, \lh a' a' a']|
+%25
+[d,8 f' f' d'][\rh e, \lh g' g' g']|
+%26
+[a,8 a e' a] [d' e'][f' g']|
+%27
+[d'8 e'][f' g'] \rh [d' e'][f' g']|
+%28
+\lh [f'16 d' bes g][e' cis' a cis'] \rh [f' d' bes g][e' cis' a cis']|
+%29
+\lh [f'16 d' bes g][e' cis' a cis'][d8 e][f g]|
+%30
+[a8 g a a,] \stemup d4 \stemdown s8 \rh [g'16 e']|
+%31
+[f'16 d' e' cis'][d'16 a f a] \lh \stemup d4^\prall r4^\fermata|
+}
+\context Thread=tFour{
+s1*2|
+%3
+\lh f'8 f' f' s4 \rh g'8 g' g'|
+%4
+e'8 e' e' s4 \lh f'8 a' f'|
+%5
+f'8 d' f' s4 \rh e'8 e' e'|
+%6
+a8 a a s d s4.|
+s1*16|
+%23
+\lh s8 f' f' s4 g'8 g' g'|
+%24
+s8 g' e' s4 f'8 f' f'|
+%25
+s8 d' d' s4 e'8 e' e'|
+%26
+s8 e' a s s2|
+s1*2|
+%29
+s2 d'8
+}>
+\context ThreadedVoice = vThree <
+\context Thread=tFive{
+\stemdown \slurdown
+s1*25|
+%26
+\stemup s2 \rh d''4 s|
+%27
+\lh d''4 s \rh d''4
+}>
+>}
+\paper{barsize=50.0; indent=0.0;
+\translator {\VoiceContext beamAuto=0; \remove Auto_beam_engraver;}
+\translator {\StaffContext \consists Bar_number_engraver;}
+ \translator {\VoiceContext \remove Tuplet_engraver;}
+}}
\score{
\context Staff \notes\relative c'{
- \repeat unfold 4 { g a b c }
+ \repeat unfold 4 { g a b c }%\alternative {c1 d e f}
}
}
--- /dev/null
+\version "1.0.21";
+
+\score {
+ \notes \relative c' {
+ \key es; \time 3/4;
+ < \context Voice = two { \stemdown es4 bes es }
+ \context Voice = one { \stemup g4 as g }
+ > |
+ < \context Voice = two { \stemdown es4 \breathe bes es }
+ \context Voice = one { \stemup g4 as g }
+ > |
+ es8 d es f g4 \breathe |
+ es8 d \breathe es f g f |
+ es2 r4 \bar "||";
+ }
+}
}
-\version "1.0.16";
+%\version "1.0.16";
c''4 \p c \ff c^\ff
+\property Voice.dynamicPadding = 10
c \p \< \! c \ff\> c \!c-\p
--- /dev/null
+
+% no alts.
+\score { \notes\context Staff\relative c'' {
+\repeat semi 3 { c^"3$\\times$ 0alt" d }
+% less alts than body
+\repeat semi 4 { c^"4$\\times$ 2alt" d } \alternative { e f }
+% more alts than body
+\repeat semi 2 { c^"2$\\times$ 3alt" d } \alternative { e f g }
+}}
+
--- /dev/null
+
+\score { \notes\context Staff\relative c'' {
+\repeat unfold 3 { c^"3$\\times$ 0alt" d }
+% less alts than body
+\repeat unfold 4 { c^"4$\\times$ 2alt" d } \alternative { e f }
+% more alts than body
+\repeat unfold 2 { c^"2$\\times$ 3alt" d } \alternative { e f g }
+}}
+
--- /dev/null
+
+% no alts.
+\score { \notes\context Staff\relative c'' {
+\repeat semi 3 { c^"3$\\times$ 0alt" d }
+% less alts than body
+\repeat semi 4 { c^"4$\\times$ 2alt" d } \alternative { e f }
+% more alts than body
+\repeat semi 2 { c^"2$\\times$ 3alt" d } \alternative { e f g }
+}}
+
\stemup
\transpose c'' { [c''8 r8 c''8 c''8]
[c8 r8 c8 c8]
+ [c8 r8 r8 c'''8]
\stemdown
[c8 r8 c8 c8]
- [c''8 r8 c''8 c''8] }
+ [c''8 r8 c''8 c''8]
+ [c'8 r8 r8 c'''8]
+
+ }
}
\score{
--- /dev/null
+
+\include "paper16.ly"
+\include "deutsch.ly"
+
+melodie = \notes \relative c' {
+ d2 d4 e f2 f g4 f e d e2 e \breathe |
+ f d4 e f g a2 b g4 g f2 r2 |
+ c'2 c4 c a2 d c4 b a g f2 g \breathe |
+ a d,4 d g2 g f4 d e2 e d2-\fermata \bar "|.";
+}
+
+righthand = \notes \relative c' {
+ a2 a4 cis4 | d2 d2 | d4 c2 a4 | d4 h cis2 \breathe |
+ d2 a4 c4 | c4 e f2 | f2 f4 e | c2 r2 |
+ e4 f g2 | f2 f2 | e4 d f e | d2. e4 \breathe |
+ f4 d b4 b | d2 d | d4 c d h | cis2 a2 |
+}
+
+lefthand = \notes \relative c {
+ f2 f4 a | a2 a2 | b4 a g f | a2 a \breathe |
+ a2 f4 g | a c c2 | d2 c4 c | a2 r2 |
+ g2 c4 c | c2 b2 | g4 f c' c | a4 b2 cis4 \breathe |
+ d4 a f f | b2 b | a4 a a2 | a2 fis2 |
+}
+
+pedal = \notes \relative c {
+ d2 d4 a d2 d g,4 a c d a2 a \breathe |
+ d2 d4 c f c f2 b,4 g c c f2 r2 |
+ c4 d e c f2 b, c4 d f c d b a2 \breathe |
+ d4 c b2 g4 a b2 d2 a a d_\fermata \bar "|.";
+}
+
+\score {
+ <
+ \context PianoStaff <
+ \context Staff = treble <
+ \notes { \key f; \time 2/2; }
+ \context Voice = melody {
+ \stemup \melodie
+ }
+ \context Voice = right {
+ \stemdown \righthand
+ }
+ >
+ \context Staff = bass {
+ \notes { \key f; \clef "bass"; }
+ \lefthand
+ }
+ >
+ \context Staff = pedal {
+ \notes { \key f; \clef "bass"; }
+ \pedal
+ }
+ >
+
+ \header {
+ title = "Von guten Mächten treu und still umgeben";
+ composer = "Satz: Michael Krause 1999 (*1977)";
+ enteredby = "Michael Krause";
+ copyright = "dunno";
+ poet = "Dietrich Bonhoeffer 1944";
+ }
+
+ \paper{
+% \paper_sixteen
+% linewidth = 18.0 \cm;
+% textheight = 28.0 \cm;
+ indent = 0.0 \mm;
+ \translator { \OrchestralScoreContext }
+ }
+}
+
+\score {
+ \context StaffGroup <
+ \context Staff = treble <
+ \notes { \key f; \time 2/2; }
+ \context Voice = sop {
+ \stemup \melodie
+ }
+ \context Voice = alt {
+ \stemdown \righthand
+ }
+ >
+ \context Staff = bass <
+ \notes { \key f; \clef "bass"; }
+ \context Voice = ten {
+ \stemup \lefthand
+ }
+ \context Voice = bas {
+ \stemdown \pedal
+ }
+ >
+ >
+
+ \header {
+ title = "Von guten Mächten treu und still umgeben";
+ composer = "Satz: Michael Krause 1999 (*1977)";
+ enteredby = "Michael Krause";
+ copyright = "dunno";
+ poet = "Dietrich Bonhoeffer 1944";
+ }
+
+ \paper{
+% \paper_sixteen
+% linewidth = 18.0 \cm;
+% textheight = 28.0 \cm;
+ indent = 0.0 \mm;
+ }
+}
+
return text_str_.length_i() ? new Midi_text(this) : 0;
}
-
-
-
void
Audio_item::do_print () const
{
{":|", ":|:", "|:"},
{"|", "|", ""},
{"", "|s", "|"},
- {"", "|:", "|:"},
+ {"|", "|:", "|:"},
{"|.", "|.", ""},
{":|", ":|", ""},
{"||", "||", ""},
}
a.translate (Offset (dx_f_drul_[LEFT], dy_f_drul_[LEFT]));
- Molecule* mol_p = new Molecule;
- mol_p->add_molecule (a);
-
- return mol_p;
+ return new Molecule (a);
}
Offset
Bow::center () const
{
Real dy = dy_f_drul_[RIGHT] - dy_f_drul_[LEFT];
-
Real dx = extent(X_AXIS).length ();
return Offset (dx / 2, dy);
Array<Offset> c (get_controls());
for (int i=0; i < c.size (); i++)
{
- Real y = c[i][Y_AXIS];
+ Real y = c[i][Y_AXIS] + dy_f_drul_[LEFT];
iv.unite (Interval (y,y));
}
return iv;
--- /dev/null
+/*
+ breathing_sign-engraver.cc -- implement Breathing_sign_engraver
+
+ Copyright (C) 1999 Michael Krause
+
+ written for the GNU LilyPond music typesetter
+
+TODO:
+
+ . Cancel any beams running through the breathing sign
+ ([e8 \breathe f e f] should become [e8] \breathe [f e f])
+ . Spacing is not yet completely pretty
+
+*/
+
+#include "breathing-sign-engraver.hh"
+#include "breathing-sign.hh"
+#include "musical-request.hh"
+#include "command-request.hh"
+#include "engraver-group.hh"
+#include "note-head.hh"
+#include "local-key-item.hh"
+
+#include <iostream.h>
+
+Breathing_sign_engraver::Breathing_sign_engraver()
+{
+ breathing_sign_p_ = 0;
+ breathing_sign_req_l_ = 0;
+}
+
+bool
+Breathing_sign_engraver::do_try_music (Music*r_l)
+{
+ if (Breathing_sign_req * b= dynamic_cast <Breathing_sign_req *> (r_l)) {
+ breathing_sign_req_l_ = b;
+ return true;
+ }
+
+ return false;
+}
+
+void
+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));
+
+ announce_element (Score_element_info (breathing_sign_p_, breathing_sign_req_l_));
+ }
+}
+
+void
+Breathing_sign_engraver::do_pre_move_processing()
+{
+ if(breathing_sign_p_) {
+ typeset_element(breathing_sign_p_);
+ breathing_sign_p_ = 0;
+ }
+}
+
+void
+Breathing_sign_engraver::do_post_move_processing()
+{
+ breathing_sign_req_l_ = 0;
+}
+
+ADD_THIS_TRANSLATOR(Breathing_sign_engraver);
--- /dev/null
+/*
+ breathing_sign.cc -- implement Breathing_sign
+
+ Copyright (C) 1999 Michael Krause
+
+ written for the GNU LilyPond music typesetter
+
+TODO: --> see breathing-sign-engraver.cc
+
+*/
+
+#include "breathing-sign.hh"
+#include "string.hh"
+#include "molecule.hh"
+#include "paper-def.hh"
+#include "lookup.hh"
+#include "debug.hh"
+#include "dimensions.hh"
+#include "direction.hh"
+
+#include <iostream.h>
+
+Breathing_sign::Breathing_sign ()
+{
+ vertical_position_i_ = UP;
+ set_elt_property (breakable_scm_sym, SCM_BOOL_T);
+ set_elt_property (break_priority_scm_sym, gh_int2scm (-4));
+ set_elt_property (visibility_lambda_scm_sym,
+ gh_eval_str ("non_postbreak_visibility"));
+}
+
+void
+Breathing_sign::set_vertical_position (Direction updown)
+{
+ assert(updown >= -1 && updown <= +1);
+
+ if(updown != 0)
+ vertical_position_i_ = updown;
+}
+
+Molecule*
+Breathing_sign::do_brew_molecule_p () const
+{
+ Real dl = staff_line_leading_f();
+ Interval i1(0, dl / 6), i2(-dl / 2, dl / 2);
+ Box b(i1, i2);
+
+ Molecule *output = new Molecule (lookup_l()->filledbox(b));
+
+ return output;
+}
+
+void
+Breathing_sign::do_post_processing()
+{
+ Real dl = staff_line_leading_f();
+
+ translate_axis(2.0 * dl * vertical_position_i_, Y_AXIS);
+}
staff_side_p_->dir_ = (Direction) (int) prop;
}
-
+ prop = get_property ("dynamicPadding", 0);
+ if (prop.isnum_b ())
+ {
+ staff_side_p_->set_elt_property (padding_scm_sym,
+ gh_double2scm(Real(prop)));
+ }
announce_element (Score_element_info (text_p_, absd));
announce_element (Score_element_info (staff_side_p_, absd));
}
enum Dir_algorithm { /* DOWN=-1, UP=1, */ MAJORITY=2, MEAN, MEDIAN };
Link_array<Stem> stems_;
- /// the slope of the beam in posns / point (dimension)
+ /**
+ the slope of the beam in (staffpositions) per (X-dimension, in PT).
+ UGH. standardise this for once and for all.
+ */
Real slope_f_;
/// position of leftmost end of beam
--- /dev/null
+/*
+ breathing-sign-engraver.hh -- declare Breathing_Sign_engraver
+
+ Copyright (C) 1999 Michael Krause
+
+ written for the GNU LilyPond music typesetter
+
+*/
+
+#ifndef BREATHING_SIGN_ENGRAVER_HH
+#define BREATHING_SIGN_ENGRAVER_HH
+
+#include "engraver.hh"
+#include "command-request.hh"
+#include "breathing-sign.hh"
+
+class Breathing_sign_engraver : public Engraver {
+public:
+ Breathing_sign_engraver();
+ VIRTUAL_COPY_CONS(Translator);
+
+protected:
+ virtual bool do_try_music (Music *req_l);
+ virtual void do_process_requests();
+
+ virtual void do_pre_move_processing();
+ virtual void do_post_move_processing();
+
+private:
+ Breathing_sign_req * breathing_sign_req_l_;
+ Breathing_sign * breathing_sign_p_;
+};
+
+#endif // BREATHING_SIGN_ENGRAVER_HH
--- /dev/null
+/*
+ breathing-sign.hh
+
+ Copyright (C) 1999 Michael Krause
+
+ written for the GNU LilyPond music typesetter
+
+*/
+
+#ifndef BREATHING_SIGN_HH
+#define BREATHING_SIGN_HH
+
+#include "item.hh"
+#include "staff-symbol-referencer.hh"
+#include "parray.hh"
+
+class Breathing_sign : public Item, public Staff_symbol_referencer {
+public:
+ VIRTUAL_COPY_CONS(Score_element);
+ Breathing_sign ();
+
+ void set_vertical_position (Direction);
+
+protected:
+ virtual void do_post_processing ();
+ virtual Molecule* do_brew_molecule_p () const;
+
+private:
+ Direction vertical_position_i_;
+};
+
+#endif // BREATHING_SIGN_HH
VIRTUAL_COPY_CONS(Music);
};
+class Breathing_sign_req : public Request {
+ VIRTUAL_COPY_CONS(Music);
+};
/**
Handle key changes.
virtual void transpose (Musical_pitch );
virtual void compress (Moment);
void add_music (Music *music_p);
-
+ int length_i () const;
Moment cumulative_length () const;
Moment maximum_length () const;
+ virtual ~Music_sequence ();
+
protected:
virtual Musical_pitch to_relative_octave (Musical_pitch);
virtual void do_print() const;
If the number of repeats is smaller than the number of alternatives, then
-
- FIXME
+ the excess alternatives are ignored for all timing purposes.
If the number of repeats is bigger than the number of alternatives, then
-
- FIXME
+ the first alternative is assumed to be repeated.
*/
class New_repeated_music : public Music
class Spring_spacer : public Line_spacer {
friend class Durations_iter;
-
+private:
+ Spring_spacer (Spring_spacer const&){}
Cons<Idealspacing> *ideal_p_list_;
Array<Column_info> cols_;
Array<Column_info> loose_col_arr_;
static Line_spacer *constructor();
Real energy_normalisation_f_;
Spring_spacer ();
+ virtual ~Spring_spacer ();
virtual void solve (Column_x_positions*) const;
virtual void lower_bound_solution (Column_x_positions*) const;
virtual void add_column (Paper_column *, bool fixed=false, Real fixpos=0.0);
virtual void OK() const;
virtual void print() const;
virtual void prepare();
- virtual ~Spring_spacer(){}
};
#endif // SPRING_SPACER_HH
*/
int done_count_;
+
/// are we busy doing the body?
bool do_main_b_;
This excludes the elt currently being iterated.
*/
Moment done_mom_;
-
+ int alternative_count_i_;
Music_iterator * current_iter_p_;
+
+ /// pointer to the alternative that will be processed next.
Cons<Music> *alternative_cons_l_;
~Unfolded_repeat_iterator();
Unfolded_repeat_iterator ();
Audio_item* ptr = (*item_l_arr_l_)[index_];
do_stop_notes (ptr->audio_column_l_->at_mom ());
+ /*
+ THIS IS A MEMORY LEAK. FIXME.
+ */
Midi_item* p = ptr->midi_item_p ();
if (!p)
return;
Music_list::Music_list ()
{
}
+
+Music_sequence::~Music_sequence ()
+{
+ delete music_p_list_p_;
+}
return dur;
}
+int
+Music_sequence::length_i () const
+{
+ return cons_list_size_i (music_p_list_p_->head_);
+}
#include "musical-request.hh"
#include "misc.hh"
#include "debug.hh"
-
#include "music-list.hh"
void
{"accepts", ACCEPTS},
{"alternative", ALTERNATIVE},
{"bar", BAR},
+ {"breathe", BREATHE},
{"cadenza", CADENZA},
{"chordmodifiers", CHORDMODIFIERS},
{"chords", CHORDS},
+++ /dev/null
-/*
- new-repeated-music-iterator.cc -- implement Folded_repeat_iterator
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
-
- */
-
-#include "folded-repeat-iterator.hh"
-#include "new-repeated-music.hh"
-#include "music-list.hh"
-#include "simultaneous-music-iterator.hh"
-#include "translator-group.hh"
-
-Folded_repeat_iterator::Folded_repeat_iterator ()
-{
- main_iter_p_ = 0;
- alternative_iter_p_ = 0;
-}
-
-bool
-Folded_repeat_iterator::ok () const
-{
- return main_iter_p_ || alternative_iter_p_;
-}
-
-Folded_repeat_iterator::~Folded_repeat_iterator ()
-{
- delete main_iter_p_;
- delete alternative_iter_p_;
-}
-
-Moment
-Folded_repeat_iterator::next_moment () const
-{
- if (main_iter_p_)
- {
- return main_iter_p_->next_moment ();
- }
- else
- return main_length_mom_ + alternative_iter_p_->next_moment ();
-}
-
-void
-Folded_repeat_iterator::construct_children ()
-{
- New_repeated_music const * mus = dynamic_cast<New_repeated_music const*> (music_l_);
- main_iter_p_ = get_iterator_p (mus->repeat_body_p_);
- if (!main_iter_p_->ok())
- {
- leave_body ();
- enter_alternative ();
- }
-}
-
-void
-Folded_repeat_iterator::do_process_and_next (Moment m)
-{
- if (!m)
- {
- bool success = report_to_l ()->try_music (music_l_);
- if (!success)
- music_l_->warning ( _("No one to print a volta bracket"));
- }
-
- New_repeated_music const * mus = dynamic_cast<New_repeated_music const*> (music_l_);
-
- if (main_iter_p_)
- {
- main_iter_p_->process_and_next (m);
- if (!main_iter_p_->ok ())
- leave_body ();
- }
-
- if (!main_iter_p_ && !alternative_iter_p_)
- {
- enter_alternative ();
- }
-
- if (alternative_iter_p_)
- {
- alternative_iter_p_->process_and_next (m - main_length_mom_);
- if (!alternative_iter_p_->ok ())
- {
- delete alternative_iter_p_;
- alternative_iter_p_ =0;
- }
- }
-}
-
-void
-Folded_repeat_iterator::leave_body ()
-{
- New_repeated_music const * mus = dynamic_cast<New_repeated_music const*> (music_l_);
- delete main_iter_p_;
- main_iter_p_ = 0;
- main_length_mom_ += mus->repeat_body_p_->length_mom ();
-}
-
-void
-Folded_repeat_iterator::enter_alternative ()
-{
- New_repeated_music const * mus = dynamic_cast<New_repeated_music const*> (music_l_);
- Simultaneous_music_iterator * s = new Simultaneous_music_iterator;
- s->separate_contexts_b_ = true;
- s->init_translator (mus->alternatives_p_, report_to_l ());
-
- alternative_iter_p_ = s;
- alternative_iter_p_->construct_children ();
-}
-
-void
-Folded_repeat_iterator::do_print () const
-{
-#ifndef NPRINT
-#endif
-}
+++ /dev/null
-/*
- new-repeated-music.cc -- implement New_repeated_music
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
-
- */
-
-#include "new-repeated-music.hh"
-#include "music-list.hh"
-#include "musical-pitch.hh"
-#include "debug.hh"
-
-New_repeated_music::New_repeated_music(Music *beg, int times, Music_sequence * alts)
-{
- repeat_body_p_ = beg;
- fold_b_ = false;
- repeats_i_ = times;
- alternatives_p_ = alts;
- semi_fold_b_ = true;
-}
-
-New_repeated_music::New_repeated_music (New_repeated_music const &s)
- : Music (s)
-{
- repeats_i_ = s.repeats_i_;
- fold_b_ = s.fold_b_;
- semi_fold_b_ = s.semi_fold_b_;
-
- repeat_body_p_ = s.repeat_body_p_ ? s.repeat_body_p_->clone () : 0;
- alternatives_p_ = s.alternatives_p_
- ? dynamic_cast<Music_sequence*> (s.alternatives_p_->clone ()):0;
-}
-
-New_repeated_music::~New_repeated_music ()
-{
- delete repeat_body_p_;
- delete alternatives_p_;
-}
-
-void
-New_repeated_music::do_print () const
-{
-#ifndef NPRINT
- DOUT << "Fold = " << fold_b_ << " reps: " << repeats_i_;
-
- if (repeat_body_p_)
- repeat_body_p_->print();
-
- if (alternatives_p_)
- alternatives_p_->print();
-#endif
-}
-
-Musical_pitch
-New_repeated_music::to_relative_octave (Musical_pitch p)
-{
- if (repeat_body_p_)
- p = repeat_body_p_->to_relative_octave (p);
-
- if (alternatives_p_)
- p = alternatives_p_->do_relative_octave (p, true);
- return p;
-}
-
-
-void
-New_repeated_music::transpose (Musical_pitch p)
-{
- if (repeat_body_p_)
- repeat_body_p_->transpose (p);
-
- if (alternatives_p_)
- alternatives_p_->transpose (p);
-}
-
-void
-New_repeated_music::compress (Moment p)
-{
- if (repeat_body_p_)
- repeat_body_p_->compress (p);
-
- if (alternatives_p_)
- alternatives_p_->compress (p);
-}
-
-Moment
-New_repeated_music::alternatives_length_mom () const
-{
- if (alternatives_p_)
- {
- return (fold_b_)
- ? alternatives_p_->maximum_length ()
- : alternatives_p_->cumulative_length ();
- }
- return 0;
-}
-
-Moment
-New_repeated_music::length_mom () const
-{
- Moment m =0;
- if (fold_b_)
- {
- if (repeat_body_p_)
- m += repeat_body_p_->length_mom ();
- }
- else
- {
- Moment beg = (repeat_body_p_) ? repeat_body_p_->length_mom () : Rational(0);
- if (!semi_fold_b_)
- beg *= Rational (repeats_i_);
- m += beg;
- }
-
- m += alternatives_length_mom ();
- return m;
-}
-
}
/**
- translate the rest symbols
+ translate the rest symbols vertically by amount DY_I.
*/
void
Note_column::translate_rests (int dy_i)
add_element (d);
}
- /*
- [TODO]
- handle rest under beam (do_post: beams are calculated now)
- what about combination of collisions and rest under beam.
+/*
+ [TODO]
+ handle rest under beam (do_post: beams are calculated now)
+ what about combination of collisions and rest under beam.
- Should lookup
+ Should lookup
- rest -> stem -> beam -> interpolate_y_position ()
+ rest -> stem -> beam -> interpolate_y_position ()
- */
+*/
void
Note_column::do_post_processing ()
return;
Beam * b = stem_l_->beam_l_;
- if (!b)
+ if (!b || !b->stems_.size ())
return;
-
- /* ugh. Should be done by beam. */
- Real x = stem_l_->hpos_f ();
+
+ /* ugh. Should be done by beam. */
Direction d = stem_l_->get_dir ();
- Real beamy = x * b->slope_f_ + b->left_y_;
- Interval restdim = extent (Y_AXIS);
+ Real beamy = (stem_l_->hpos_f () - b->stems_[0]->hpos_f ()) * b->slope_f_ + b->left_y_;
Real staff_space = rest_l_arr_[0]->staff_line_leading_f ();
- Real internote_f = staff_space/2;
+ Real rest_dim = extent (Y_AXIS)[d]*2.0 /staff_space ;
+
Real minimum_dist
- = paper_l ()->get_var ("restcollision_minimum_beamdist") * internote_f;
+ = paper_l ()->get_var ("restcollision_minimum_beamdist") ;
Real dist =
- minimum_dist + -d * (beamy - restdim[d]) >? 0;
+ minimum_dist + -d * (beamy - rest_dim) >? 0;
int stafflines = rest_l_arr_[0]->lines_i ();
-
+
// move discretely by half spaces.
- int discrete_dist = int (ceil (dist / (0.5 *staff_space)));
+ int discrete_dist = int (ceil (dist ));
// move by whole spaces inside the staff.
if (discrete_dist < stafflines+1)
Molecule*
Note_head::do_brew_molecule_p() const
{
- Molecule*out = 0;
Real inter_f = staff_line_leading_f ()/2;
int sz = lines_i ()-1;
type = ly_scm2string (SCM_CDR(style));
}
- Molecule head (lookup_l()->notehead (balltype_i_, type));
-
-
- out = new Molecule (Molecule (head));
+ Molecule* out = new Molecule (lookup_l()->notehead (balltype_i_, type));
if (streepjes_i)
{
Direction dir = sign (position_i_);
- Interval hd = head.dim_[X_AXIS];
+ Interval hd = out->dim_[X_AXIS];
Real hw = hd.length ()/4;
Molecule ledger
#include "lily-version.hh"
#include "atom.hh"
+// urg
+static SCM port = 0;
+
Paper_outputter::Paper_outputter (Paper_stream *s)
{
+ port = 0;
outstream_l_ = s;
output_header ();
}
{
SCM scm = gh_list (ly_symbol ("end-output"), SCM_UNDEFINED);
output_scheme (scm);
+
+ if (String (output_global_ch) == "scm")
+ {
+#if 1
+ scm_display (gh_str02scm (")))\n"), port);
+ scm_fflush (port);
+#else
+ *outstream_l_->os << ")";
+#endif
+ }
}
void
// gh_eval_str ("(set! security-paranoia #t)");
}
String s = String ("(eval (") + output_global_ch + "-scm 'all-definitions))";
- gh_eval_str (s.ch_C());
+ gh_eval_str (s.ch_C ());
String creator;
if (no_timestamps_global_b)
{
if (String (output_global_ch) == "scm")
{
- static SCM port = 0;
+#if 1
+ /*
+ we'd rather use C++ i/o iso Guile's, but how?
+ and: they can't be mixed (or synchronised) easily?
+ */
// urg
if (!port)
fd = of->rdbuf()->fd();
FILE *file = fdopen (fd, "a");
port = scm_standard_stream_to_port (file, "a", "");
- scm_display (gh_str02scm ("(load 'lily.scm)\n"), port);
+ scm_display (gh_str02scm (
+ "(primitive-load-path 'lily.scm)\n"
+ "(eval (tex-scm 'all-definitions))\n"
+ ";(eval (ps-scm 'all-definitions))\n"
+ "(display (map (lambda (x) (string-append (eval x) \"%\\n\")) '(\n"
+ ), port);
}
- scm_display (gh_str02scm ("("), port);
scm_write (scm, port);
- scm_display (gh_str02scm (")\n"),port);
+ // duh
+ scm_display (gh_str02scm ("\n"), port);
scm_fflush (port);
+#else
+ static bool first = true;
+ if (first)
+ {
+ *outstream_l_->os << ""
+ "(primitive-load-path 'lily.scm)\n"
+ "(eval (tex-scm 'all-definitions))\n"
+ ";(eval (ps-scm 'all-definitions))\n"
+ "(display (map (lambda (x) (string-append (eval x) \"\\n\")) '(\n"
+ ;
+ }
+
+ /*
+ why doesn't this work?
+
+ ERROR: In procedure gh_scm2newstr:
+ ERROR: Wrong type argument in position 3:
+ (header "GNU LilyPond 1.1.49.jcn1" ", at Tue Jun 22 20:58:17 1999")
+
+ or:
+
+ ERROR: In procedure symbol->string:
+ ERROR: Wrong type argument in position 1:
+ (header "GNU LilyPond 1.1.49.jcn2" ", at Wed Jun 23 18:42:14 1999")
+
+ eg, two ways to print '(foo bar)'
+
+ SCM scm = gh_list (ly_symbol ("foo"), gh_str2scm ("bar"), SCM_UNDEFINED);
+ scm_write (scm, port);
+ puts (gh_xxx2newstr (scm, 0));
+ */
+
+ char* p;
+ //p = gh_scm2newstr (scm, 0);
+ //p = gh_symbol2newstr (scm, 0);
+ //p = gh_scm2newstr (scm_symbol_to_string (scm), 0);
+ //p = gh_symbol2newstr (scm_symbol_to_string (scm), 0);
+ //*outstream_l_->os << p << endl;
+ *outstream_l_->os << symbol_to_string (scm) << endl;
+#endif
}
else
{
void
Paper_stream::break_line ()
{
+ // aaargh
*os << "%\n";
*os << to_str (' ', nest_level);
line_len_i_ = 0;
#include "transposed-music.hh"
#include "time-scaled-music.hh"
#include "new-repeated-music.hh"
+#include "version.hh"
+
// mmm
Mudela_version oldest_version ("1.0.20");
-Mudela_version version ("1.0.21");
+Mudela_version version ( MAJOR_VERSION "." MINOR_VERSION "." PATCH_LEVEL );
+
void
print_mudela_versions (ostream &os)
// needed for bison.simple's malloc() and free()
#include <malloc.h>
-struct Assignment {
- String *name_p_;
- Identifier *id_p_;
- ~Assignment () {
- delete name_p_;
- delete id_p_;
- }
- Assignment () {
- name_p_ = 0;
- id_p_ =0;
- }
- Assignment (Assignment const&s)
- {
- name_p_ = new String (*s.name_p_);
- id_p_ = s.id_p_->clone ();
- }
-};
-
-Paper_def* current_paper = 0;
-
#ifndef NDEBUG
#define YYDEBUG 1
#endif
%token ACCEPTS
%token ALTERNATIVE
%token BAR
+%token BREATHE
%token CADENZA
%token CHORDMODIFIERS
%token CHORDS
b->span_type_str_ = "beam";
$$ = b;
}
+ | BREATHE {
+ $$ = new Breathing_sign_req;
+ }
;
--- /dev/null
+/*
+ new-repeated-music-iterator.cc -- implement Folded_repeat_iterator
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+
+ */
+
+#include "folded-repeat-iterator.hh"
+#include "new-repeated-music.hh"
+#include "music-list.hh"
+#include "simultaneous-music-iterator.hh"
+#include "translator-group.hh"
+
+Folded_repeat_iterator::Folded_repeat_iterator ()
+{
+ main_iter_p_ = 0;
+ alternative_iter_p_ = 0;
+}
+
+bool
+Folded_repeat_iterator::ok () const
+{
+ return main_iter_p_ || alternative_iter_p_;
+}
+
+Folded_repeat_iterator::~Folded_repeat_iterator ()
+{
+ delete main_iter_p_;
+ delete alternative_iter_p_;
+}
+
+Moment
+Folded_repeat_iterator::next_moment () const
+{
+ if (main_iter_p_)
+ {
+ return main_iter_p_->next_moment ();
+ }
+ else
+ return main_length_mom_ + alternative_iter_p_->next_moment ();
+}
+
+void
+Folded_repeat_iterator::construct_children ()
+{
+ New_repeated_music const * mus = dynamic_cast<New_repeated_music const*> (music_l_);
+ main_iter_p_ = get_iterator_p (mus->repeat_body_p_);
+ if (!main_iter_p_->ok())
+ {
+ leave_body ();
+ enter_alternative ();
+ }
+}
+
+void
+Folded_repeat_iterator::do_process_and_next (Moment m)
+{
+ if (!m)
+ {
+ bool success = report_to_l ()->try_music (music_l_);
+ if (!success)
+ music_l_->warning ( _("No one to print a volta bracket"));
+ }
+
+ New_repeated_music const * mus = dynamic_cast<New_repeated_music const*> (music_l_);
+
+ if (main_iter_p_)
+ {
+ main_iter_p_->process_and_next (m);
+ if (!main_iter_p_->ok ())
+ leave_body ();
+ }
+
+ if (!main_iter_p_ && !alternative_iter_p_)
+ {
+ enter_alternative ();
+ }
+
+ if (alternative_iter_p_)
+ {
+ alternative_iter_p_->process_and_next (m - main_length_mom_);
+ if (!alternative_iter_p_->ok ())
+ {
+ delete alternative_iter_p_;
+ alternative_iter_p_ =0;
+ }
+ }
+}
+
+void
+Folded_repeat_iterator::leave_body ()
+{
+ New_repeated_music const * mus = dynamic_cast<New_repeated_music const*> (music_l_);
+ delete main_iter_p_;
+ main_iter_p_ = 0;
+ main_length_mom_ += mus->repeat_body_p_->length_mom ();
+}
+
+void
+Folded_repeat_iterator::enter_alternative ()
+{
+ New_repeated_music const * mus = dynamic_cast<New_repeated_music const*> (music_l_);
+ Simultaneous_music_iterator * s = new Simultaneous_music_iterator;
+ s->separate_contexts_b_ = true;
+ s->init_translator (mus->alternatives_p_, report_to_l ());
+
+ alternative_iter_p_ = s;
+ alternative_iter_p_->construct_children ();
+}
+
+void
+Folded_repeat_iterator::do_print () const
+{
+#ifndef NPRINT
+#endif
+}
--- /dev/null
+/*
+ new-repeated-music.cc -- implement New_repeated_music
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+
+ */
+
+#include "new-repeated-music.hh"
+#include "music-list.hh"
+#include "musical-pitch.hh"
+#include "debug.hh"
+
+New_repeated_music::New_repeated_music(Music *beg, int times, Music_sequence * alts)
+{
+ repeat_body_p_ = beg;
+ fold_b_ = false;
+ repeats_i_ = times;
+ alternatives_p_ = alts;
+ semi_fold_b_ = true;
+}
+
+New_repeated_music::New_repeated_music (New_repeated_music const &s)
+ : Music (s)
+{
+ repeats_i_ = s.repeats_i_;
+ fold_b_ = s.fold_b_;
+ semi_fold_b_ = s.semi_fold_b_;
+
+ repeat_body_p_ = s.repeat_body_p_ ? s.repeat_body_p_->clone () : 0;
+ alternatives_p_ = s.alternatives_p_
+ ? dynamic_cast<Music_sequence*> (s.alternatives_p_->clone ()):0;
+}
+
+New_repeated_music::~New_repeated_music ()
+{
+ delete repeat_body_p_;
+ delete alternatives_p_;
+}
+
+void
+New_repeated_music::do_print () const
+{
+#ifndef NPRINT
+ DOUT << "Fold = " << fold_b_ << " reps: " << repeats_i_;
+
+ if (repeat_body_p_)
+ repeat_body_p_->print();
+
+ if (alternatives_p_)
+ alternatives_p_->print();
+#endif
+}
+
+Musical_pitch
+New_repeated_music::to_relative_octave (Musical_pitch p)
+{
+ if (repeat_body_p_)
+ p = repeat_body_p_->to_relative_octave (p);
+
+ if (alternatives_p_)
+ p = alternatives_p_->do_relative_octave (p, true);
+ return p;
+}
+
+
+void
+New_repeated_music::transpose (Musical_pitch p)
+{
+ if (repeat_body_p_)
+ repeat_body_p_->transpose (p);
+
+ if (alternatives_p_)
+ alternatives_p_->transpose (p);
+}
+
+void
+New_repeated_music::compress (Moment p)
+{
+ if (repeat_body_p_)
+ repeat_body_p_->compress (p);
+
+ if (alternatives_p_)
+ alternatives_p_->compress (p);
+}
+
+Moment
+New_repeated_music::alternatives_length_mom () const
+{
+ if (!alternatives_p_ )
+ return 0;
+
+ if (fold_b_)
+ alternatives_p_->maximum_length ();
+
+ Moment m =0;
+ int done =0;
+ Cons<Music> *p = alternatives_p_->music_p_list_p_->head_;
+ while (p && done < repeats_i_)
+ {
+ m = m + p->car_->length_mom ();
+ done ++;
+ if (repeats_i_ - done < alternatives_p_->length_i ())
+ p = p->next_;
+ }
+ return m;
+}
+
+Moment
+New_repeated_music::length_mom () const
+{
+ Moment m =0;
+ if (fold_b_)
+ {
+ if (repeat_body_p_)
+ m += repeat_body_p_->length_mom ();
+ }
+ else
+ {
+ Moment beg = (repeat_body_p_) ? repeat_body_p_->length_mom () : Rational(0);
+ if (!semi_fold_b_)
+ beg *= Rational (repeats_i_);
+ m += beg;
+ }
+
+ m += alternatives_length_mom ();
+ return m;
+}
+
--- /dev/null
+/*
+ specialty-engraver.cc -- implement Specialty_engraver
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+
+ */
+
+
+#include "engraver.hh"
+
+class Specialty_engraver : public Engraver
+{
+
+public:
+ VIRTUAL_COPY_CONS(Translator);
+protected:
+ void acknowledge_element (Score_element_info);
+};
+
+
+void
+Specialty_engraver::acknowledge_element (Score_element_info i)
+{
+ /*
+ We could do groovy stuff, by inserting our own custom (FUNC,FONT)
+ pairs (Atoms in fact) into acknowledged elements.
+
+ But not yet. This would be cleaner if we had SCM as properties.
+ */
+}
+
+Spring_spacer::~Spring_spacer()
+{
+ delete ideal_p_list_;
+}
done_count_ =0;
current_iter_p_ =0;
do_main_b_ = false;
+ alternative_count_i_ =0;
}
/**
if (do_main_b_)
{
done_mom_ += mus->repeat_body_p_->length_mom ();
+
+ if (!mus->semi_fold_b_)
+ done_count_ ++;
+
if (alternative_cons_l_)
{
current_iter_p_ = get_iterator_p (alternative_cons_l_->car_);
do_main_b_ = false;
}
+ else if (done_count_ < mus->repeats_i_ && !mus->semi_fold_b_)
+ {
+ current_iter_p_ = get_iterator_p (mus->repeat_body_p_);
+ do_main_b_ = true;
+ }
}
else
{
+ /*
+ we're not in the main part. So we're either in an alternative, or
+ we just finished.
+ */
if (alternative_cons_l_)
{
done_mom_ += alternative_cons_l_->car_->length_mom ();
- alternative_cons_l_ = alternative_cons_l_->next_;
- done_count_ ++;
- }
+ if (mus->semi_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 (mus->semi_fold_b_)
+ done_count_ ++;
+ }
+
if (done_count_ < mus->repeats_i_ && alternative_cons_l_)
{
if (mus->semi_fold_b_)
}
}
+
bool
Unfolded_repeat_iterator::ok () const
{
? mus->alternatives_p_->music_p_list_p_->head_
: 0;
+ for (Cons<Music> *p = alternative_cons_l_; p; p = p->next_)
+ alternative_count_i_ ++;
+
if (mus->repeat_body_p_)
{
current_iter_p_ = get_iterator_p (mus->repeat_body_p_);
\name Voice ;
beamAuto = "1";
+ \consists "Breathing_sign_engraver";
\consists "Rest_engraver";
\consists "Dot_column_engraver";
\consists "Stem_engraver";
arithmetic_multiplier = 4.8\pt;
texsetting = "\\input lilyponddefs \\musixsixteendefs ";
pssetting = "(lilyponddefs.ps) findlibfile {exch pop //systemdict /run get exec} { /undefinedfilename signalerror } ifelse\n";
- scmsetting = "(display \"(lilyponddefs.ps) findlibfile {exch pop //systemdict /run get exec} { /undefinedfilename signalerror } ifelse\");\n";
- scmsetting = "(display \"\\\\input lilyponddefs \\\\musixsixteendefs\");\n";
+ scmsetting = "\"(lilyponddefs.ps) findlibfile {exch pop //systemdict /run get exec} { /undefinedfilename signalerror } ifelse\";\n";
+ scmsetting = "\"\\\\input lilyponddefs \\\\musixsixteendefs\";\n";
0 = \font "feta16"
-1 = \font "feta13"
texsetting = "\\input lilyponddefs \\musixtwentydefs ";
pssetting = "(lilyponddefs.ps) findlibfile {exch pop //systemdict /run get exec} { /undefinedfilename signalerror } ifelse\n";
% urg, debugging only
- scmsetting = "(display \"(lilyponddefs.ps) findlibfile {exch pop //systemdict /run get exec} { /undefinedfilename signalerror } ifelse\");\n";
- scmsetting = "(display \"\\\\input lilyponddefs \\\\musixtwentydefs\");\n";
+ scmsetting = "\"(lilyponddefs.ps) findlibfile {exch pop //systemdict /run get exec} { /undefinedfilename signalerror } ifelse\";\n";
+ scmsetting = "\"\\\\input lilyponddefs \\\\musixtwentydefs\";\n";
-2 = \font "feta13"
-1 = \font "feta16"
marcato = \script "marcato"
staccatissimo = \script "staccatissimo"
-% portato is indicated by slurred & dotted notes. Not really supported.
+% portato is indicated
+% either by
+% * slurred & dotted notes.
+%or by
+% * slur and dash notes.
+% Neither are really supported, but c4-.-- should work.
% portato = \script "portato"
fermata = \script "fermata"
Begin3
Titel: LilyPond
-Versie: 1.1.49
-Inschrijf datum: 21JUN99
+Versie: 1.1.50
+Inschrijf datum: 25JUN99
Beschrijving: @FLAPTEKST@
Trefwoorden: muziek typezetten midi notatie
Auteur: hanwen@stack.nl (Han-Wen Nienhuys)
janneke@gnu.org (Jan Nieuwenhuizen)
Onderhouden door: hanwen@cs.ruu.nl (Han-Wen Nienhuys)
Voornaamste plek: sunsite.unc.edu /pub/Linux/apps
- 770k lilypond-1.1.49.tar.gz
+ 770k lilypond-1.1.50.tar.gz
Oorspronkelijke plek: ftp.cs.uu.nl /pub/GNU/LilyPond/development/
- 770k lilypond-1.1.49.tar.gz
+ 770k lilypond-1.1.50.tar.gz
Copi-eer voorwaarden: GPL
End
Begin3
Title: LilyPond
-Version: 1.1.49
-Entered-date: 21JUN99
+Version: 1.1.50
+Entered-date: 25JUN99
Description:
LilyPond is the GNU Project music typesetter. This program can print
beautiful sheet music from a music definition file. It can also play
janneke@gnu.org (Jan Nieuwenhuizen)
Maintained-by: hanwen@stack.nl (Han-Wen Nienhuys)
Primary-site: sunsite.unc.edu /pub/Linux/apps/sound/convert
- 770k lilypond-1.1.49.tar.gz
+ 770k lilypond-1.1.50.tar.gz
Original-site: ftp.cs.uu.nl /pub/GNU/LilyPond/development/
- 770k lilypond-1.1.49.tar.gz
+ 770k lilypond-1.1.50.tar.gz
Copying-policy: GPL
End
Name: lilypond
-Version: 1.1.49
+Version: 1.1.50
Release: 1
Copyright: GPL
Group: Applications/Publishing
-Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.1.49.tar.gz
+Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.1.50.tar.gz
Summary: A program for printing sheet music.
URL: http://www.cs.uu.nl/~hanwen/lilypond
Packager: Han-Wen Nienhuys <hanwen@cs.uu.nl>
}
%{
- Tested Features: cross staff beams and slurs, grace notes, no bars
+ Tested Features: cross staff auto beams and slurs, grace notes, no bars
%}
-\version "1.0.21";
+\version "1.0.20";
\include "nederlands.ly"
\bar ".|";
}
+x = \context Voice=x \notes {
+ % no beams in grace notes
+ \property Voice.beamAuto = "0"
+}
+
upper = \context Staff=treble \notes\relative c''{
\clef violin;
\stemup
\context Voice=one
r2 r r
r2 r r
- r4 [a'8--(\< a--] [a-- a-- c-- \!b--] [a--\> gis f \!e]
+ r4 a'8--(\< a-- a-- a-- c-- \!b-- a--\> gis f \!e
% grace hack
- < { [es8 )c] } \context Voice=x { \stemup s8*1/2 \tiny b8*1/2 ~ } > r4 r2 r
+ < { es8 )c } \context Voice=x { \stemup s8*1/2 \tiny b8*1/2 ~ } > r4 r2 r
r2 r r
- r4 [a'8--(\< a--] [a-- a-- c-- \!b--] [a--\> gis f \!e]
- < { [es8 )c] } \context Voice=x { \stemup s8*1/2 \tiny b8*1/2 ~ } > r4 r2 r
- r4 [g16( a bes a] [g a bes a g a bes a] [g a bes a g fis es fis]
- )d4 \tiny fis8*1/2 ~ \normalsize gis4*3/4 ~ gis8 r r4 r2
- r4 [g16( a bes a] [g a bes a g a bes a] [g a bes a g fis es fis]
- )d4 \tiny fis8*1/2 ~ \normalsize gis4*3/4 ~ gis8 r r4 r2
- \tiny a8*1/2 ~ \normalsize f4*3/4 ~ f8 r r2 r
- r2 r4 [a8( b][c d c b] \tiny b8*1/2 ~ \normalsize
- < { [e8*1/2 )g,8] } \context Voice=x { \stemup s8*1/4 \tiny a8*1/2 ~ } > r4 r2 r
- r2 r4 [a8( b][c d c b] [a b c d][c b a b][c d c b]
- \tiny b8*1/2 ~ \normalsize
- < { [e8*1/2 )g,8] } \context Voice=x { \stemup s8*1/4 \tiny a8*1/2 ~ } > r4 r2 r
- a2( \tiny e'8*1/2 ~ \normalsize f4*3/4 ~ )f8 r r2
+ r4 a'8--(\< a-- a-- a-- c-- \!b-- a--\> gis f \!e
+ < { es8 )c } \context Voice=x { \stemup s8*1/2 \tiny b8*1/2 ~ } > r4 r2 r
+ r4 g16( a bes a g a bes a g a bes a g a bes a g fis es fis
+ % urg, what a syntax
+ )d4 \tiny fis8 ( *1/2 \normalsize ) gis4*3/4 ~ gis8 r r4 r2
+ r4 g16( a bes a g a bes a g a bes a g a bes a g fis es fis
+ )d4 \tiny fis8(*1/2 \normalsize )gis4*3/4 ~ gis8 r r4 r2
+ \tiny a8(*1/2 \normalsize )f4*3/4 ~ f8 r r2 r
+ r2 r4 a8( b c d c b \tiny b8(*1/2 \normalsize
+ < { )e8*1/2 )g,8 } \context Voice=x { \stemup s8*1/4 \tiny a8*1/2 ~ } > r4 r2 r
+ r2 r4 a8( b c d c b a b c d c b a b c d c b
+ \tiny b8(*1/2 \normalsize
+ < { )e8*1/2 )g,8 } \context Voice=x { \stemup s8*1/4 \tiny a8*1/2 ~ } > r4 r2 r
+ a2( \tiny e'8(*1/2 \normalsize )f4*3/4 ~ )f8 r r2
r2 r r
fis,4( \tiny dis8*1/2 \normalsize <)cis4*3/4 ais> r2 r
- \tiny b'8*1/2 ~ \normalsize
- < { [a8*1/2 a8] } \context Voice=x { \stemup s8*1/4 \tiny b8*1/2 ~ } > r4 r2 r
- r4 [a'8--(\< a--] [a-- a-- c-- \!b--] [a--\> gis f \!e]
- < { [es8 )c] } \context Voice=x { \stemup s8*1/2 \tiny b8*1/2 ~ } > r4 r2 r
- d,4( \tiny fis8*1/2 ~ \normalsize gis4*3/4 ~ )gis8 r r4 r2
+ \tiny b'8(*1/2 \normalsize
+ < { )a8*1/2 a8 } \context Voice=x { \stemup s8*1/4 \tiny b8*1/2 ~ } > r4 r2 r
+ r4 a'8--(\< a-- a-- a-- c-- \!b-- a--\> gis f \!e
+ < { es8 )c } \context Voice=x { \stemup s8*1/2 \tiny b8*1/2 ~ } > r4 r2 r
+ d,4( \tiny fis8(*1/2 \normalsize )gis4*3/4 ~ )gis8 r r4 r2
f4 ~ f8 r r2 r
- [f'8( g a b][a g f g][a b a g]
- \tiny f8*1/2 ~ \normalsize
- < { [g8*1/2 )e8] } \context Voice=x { \stemup s8*1/4 \tiny d8*1/2 ~ } > r4 r2 r
- [f8( g a b][a g f g][a b a g]
- \tiny f8*1/2 ~ \normalsize
- < { [g8*1/2 )e8] } \context Voice=x { \stemup s8*1/4 \tiny d8*1/2 ~ } > r4 r2 r
- a,2( \tiny e'8*1/2 ~ \normalsize f4*3/4 ~ )f8 r r2
+ f'8( g a b a g f g a b a g
+ \tiny f8(*1/2 \normalsize
+ < { )g8*1/2 )e8 } \context Voice=x { \stemup s8*1/4 \tiny d8*1/2 ~ } > r4 r2 r
+ f8( g a b a g f g a b a g
+ \tiny f8(*1/2 \normalsize
+ < { )g8*1/2 )e8 } \context Voice=x { \stemup s8*1/4 \tiny d8*1/2 ~ } > r4 r2 r
+ a,2( \tiny e'8(*1/2 \normalsize )f4*3/4 ~ )f8 r r2
r2 r r
fis,4( \tiny dis8*1/2 \normalsize <)cis4*3/4 ais> r2 r
<e1 g b e> ~ <e g b e>
}
basloopje = \notes\relative c{
- d,8( a' d f a d f d a f d )a
+% \property Voice.beamAutoEnd = "1/2"
+% d,8( a' d f a d f d a f d )a
+ d,8( a' d f a \translator Staff=treble d f d \translator Staff=bass a f d )a
}
+%{
bassbeam = \notes{
[s2] [s8 \translator Staff=treble s s s] [\translator Staff=bass s2]
% [s2] [s2] [s2]
}
+%}
+
lower = \context Voice=two \notes \relative c{
\stemdown
\property Staff.slurVerticalDirection = 1
% snapnie, hoevaak relative c heeft ze nodig?
- < \notes\relative c \basloopje \bassbeam >
- < \notes\relative c \basloopje \bassbeam >
- < \notes\relative c \basloopje \bassbeam >
- < \transpose bes \notes\relative c{ \basloopje } \bassbeam >
- < \transpose bes \notes\relative c{ \basloopje } \bassbeam >
- < \notes\relative c \basloopje \bassbeam >
- < \transpose bes \notes\relative c{ \basloopje } \bassbeam >
- < \transpose bes \notes\relative c{ \basloopje } \bassbeam >
- < \transpose a \notes\relative c{ \basloopje } \bassbeam >
- < \transpose bes \notes\relative c{ \basloopje } \bassbeam >
- < \transpose a \notes\relative c{ \basloopje } \bassbeam >
- < \notes\relative c \basloopje \bassbeam >
- < \notes\relative c \basloopje \bassbeam >
+ \notes\relative c \basloopje
+ \notes\relative c \basloopje
+ \notes\relative c \basloopje
+ \transpose bes \notes\relative c{ \basloopje }
+ \transpose bes \notes\relative c{ \basloopje }
+ \notes\relative c \basloopje
+ \transpose bes \notes\relative c{ \basloopje }
+ \transpose bes \notes\relative c{ \basloopje }
+ \transpose a \notes\relative c{ \basloopje }
+ \transpose bes \notes\relative c{ \basloopje }
+ \transpose a \notes\relative c{ \basloopje }
+ \notes\relative c \basloopje
+ \notes\relative c \basloopje
% huh? d'
- < \transpose d' \notes\relative c{ \basloopje } \bassbeam >
- < \notes\relative c \basloopje \bassbeam >
- < \notes\relative c \basloopje \bassbeam >
- < \transpose d' \notes\relative c{ \basloopje } \bassbeam >
- < \notes\relative c \basloopje \bassbeam >
- < \notes\relative c \basloopje \bassbeam >
- < \transpose e' \notes\relative c{ \basloopje } \bassbeam >
- < \notes\relative c \basloopje \bassbeam >
- < \notes\relative c \basloopje \bassbeam >
- < \transpose bes \notes\relative c{ \basloopje } \bassbeam >
- < \transpose a \notes\relative c{ \basloopje } \bassbeam >
- < \notes\relative c \basloopje \bassbeam >
- < \notes\relative c \basloopje \bassbeam >
- < \transpose d' \notes\relative c{ \basloopje } \bassbeam >
- < \notes\relative c \basloopje \bassbeam >
- < \transpose d' \notes\relative c{ \basloopje } \bassbeam >
- < \notes\relative c \basloopje \bassbeam >
- < \notes\relative c \basloopje \bassbeam >
- < \transpose e' \notes\relative c{ \basloopje } \bassbeam >
+ \transpose d' \notes\relative c{ \basloopje }
+ \notes\relative c \basloopje
+ \notes\relative c \basloopje
+ \transpose d' \notes\relative c{ \basloopje }
+ \notes\relative c \basloopje
+ \notes\relative c \basloopje
+ \transpose e' \notes\relative c{ \basloopje }
+ \notes\relative c \basloopje
+ \notes\relative c \basloopje
+ \transpose bes \notes\relative c{ \basloopje }
+ \transpose a \notes\relative c{ \basloopje }
+ \notes\relative c \basloopje
+ \notes\relative c \basloopje
+ \transpose d' \notes\relative c{ \basloopje }
+ \notes\relative c \basloopje
+ \transpose d' \notes\relative c{ \basloopje }
+ \notes\relative c \basloopje
+ \notes\relative c \basloopje
+ \transpose e' \notes\relative c{ \basloopje }
< e1 b' e> ~ < e b' e>
}
\score {
- \context GrandStaff <
+ \context PianoStaff <
\context Staff = treble <
\global
\upper
% no slur damping
slur_slope_damping = 100.0;
- \translator{ \OrchestralScoreContext }
- \translator{
- \GrandStaffContext
- minVerticalAlign = 3.0*\staffheight;
- maxVerticalAlign = 3.0*\staffheight;
+ \translator{
+ \VoiceContext
+ beamAutoEnd = "1/2";
}
\translator{
\StaffContext
\version "1.0.21";
-$vocal_verse1 = \notes\relative c''{
- % ugh: treble/bass
- % ?
- \clef treble;
+vocalVerse = \notes\relative c''{
\property Voice.dynamicdir=1
\times 2/3 { [ g8( )as] g } c4. g8 |
\times 2/3 { [ f8( )g] f } c'4 f,8 r |
g4.-> f8 \times 2/3 { [ f( )es] d } |
es2 r4 |
- % ugh: a whole should be a measure
- %r1 |
R2. |
R2. |
\times 2/3 { [ g8( )as] g } es'4. g,8 |
c!2. |
}
-$vocal_through = \notes\relative c{
+vocalThrough = \notes\relative c{
\property Voice.dynamicdir=1
g''8. g16 b8. b16 d8. d16 |
c4 b r |
e2 r4 |
}
-$lyric_verse1 = \lyrics{
+lyricVerse1 = \lyrics{
% 5
\times 2/3 { Lei-4 se8 } fleh-4. en8 |
- \times 2/3 { mei-4 ne8 } Lie-4 der8 _8 |
+ \times 2/3 { mei-4 ne8 } Lie-4 der8 " "8 |
Durch4. die8 \times 2/3 { Nacht4 zu8 } |
- dir;2 _4 |
- _4 _ _ |
- _ _ _ |
+ dir;2 " "4 |
+ " "4 " " " " |
+ " " " " " " |
% 11
\times 2/3 { In4 den8 } stil-4. len8 |
\times 2/3 { Hain4 her-8 } nie-4. der8 |
Lieb-4. chen,8 \times 2/3 { komm4 zu8 } |
- mir!2 _4 |
- _4 _ _ |
- _ _ _ |
+ mir!2 " "4 |
+ " "4 " " " " |
+ " " " " " " |
% 17
Fl\"us-8. ternd16 schlan-4. ke8 |
Wip-8. fel16 rau-4. schen8 |
nicht.2. |
}
-$lyric_verse2 = \lyrics{
+lyricVerse2 = \lyrics{
% 5
\times 2/3 { H\"orst4 die8 } Nach-4. ti-8
- \times 2/3 { gal-4 len8 } schla-4 gen?8 _8
+ \times 2/3 { gal-4 len8 } schla-4 gen?8 " "8
ach!4. sie8 \times 2/3 { fleh-4 en8 }
- dich,2 _4
- _4 _ _
- _4_ _
+ dich,2 " "4
+ " "4 " " " "
+ " "4" " " "
% 11
\times 2/3 { Mit4 der8 } T\"o-4. ne8
- \times 2/3 { s\"u-4 "\ss{}en"8 } Kla-4. gen8
+ \times 2/3 { s\"u-4 "\ss en"8 } Kla-4. gen8
Fleh-4. en8 \times 2/3 { sie4 f\"ur8 }
- mich2 _4
- _4_ _
- _4_ _
+ mich2 " "4
+ " "4" " " "
+ " "4" " " "
% 17
Sie-8. ver-16 stehn4. des8
Herz.2.
}
-$lyric_through = \lyrics{
+lyricThrough = \lyrics{
% 37
La\ss8. auch16 dir8. die16 Brust8. be-16 |
- we-4 gen _ |
+ we-4 gen " " |
Lieb-4. chen,8 h\"o-8. re16 |
- mich!2 _4 |
+ mich!2 " "4 |
Be-4. bend8 \times 2/3 { harr'4 ich8} |
- dir8. ent-16 ge-4 gen!8 _8 |
- _2. |
- _2. |
+ dir8. ent-16 ge-4 gen!8 " "8 |
+ " "2. |
+ " "2. |
\times 2/3 { Komm4 be-8 } gl\"u4. cke8 |
mich!2. |
\times 2/3 { Komm4 be-8 } gl\"u4. cke8 |
mich,2. __ |
- _2 be-4 |
+ " "2 be-4 |
gl\"u-2. |
cke2. |
- mich!2 _4 |
+ mich!2 " "4 |
}
-$treble_intro = \notes\relative c{
+trebleIntro = \notes\relative c{
\clef violin;
% ugh: id like to type this!
- %r8\pp [<g'-. c-.> <c-. es-.> <g-. c-.> <c-. es-.> <g-. c-.>] |
r8^"\bf m\\\"assig"\pp [<g'-. c-.> <c-. es-.> <g-. c-.> <c-. es-.> <g-. c-.>] |
r8 [<as-. c-.> <c-. es-.> <as-. c-.> <c-. es-.> <as-. c-.>] |
r8 [<as-. c-.> <c-. d-.> <as-. c-.> <c-. d-.> <as-. c-.>] |
\break
}
-$treble_verse1 = \notes\relative c{
-% \clef violin;
+trebleVerse1 = \notes\relative c{
%5
r8 [<g' c> <c es> <g c> <c es> <g c>] |
r8 [<f c'> <c' d> <f, c'> <c' d> <f, c'>] |
r8 [<f c'> <c' d> <f, c'> <c' d> <f, c'>] |
r8 [<f as bes> <as bes d> <f g bes> <as bes d> <f g bes>] |
r8 [<es g bes> <g bes es> <es g bes> <g bes es>]
- <{ es'~ | d4. ~ f8}{ c'~ | bes4. ~ as8 } >
+ <{ es'( ) d4.() f8}{ c' | bes4. as8 } >
\times 2/3 { < [f( as> <es g> <)d f] > } |
%16
<es2. g> |
< {a4.- > )f8} { a4. f8 } > |
}
-$treble_eentje = \notes \relative c'{
+trebleEentje = \notes \relative c'{
<e2 e'> <e4 g>|
<f2\mf as!(> [<as8.->( c> <)f16 )as>] |
<e4. g> [<e8-. g-.(> <e-. g-.> <e-. )g-.>] |
<e2. g> |
}
-$treble_through = \notes \relative c'{
+trebleThrough = \notes \relative c'{
<e2. e'> |
%61
R2. |
[<g,8.\< g'> <g16 g'> <b8. b'> <\! b16\> b'16> <d8. d'> <d16 d'>] |
< { c4( )b } { c'4( )b } > \!r |
-% ugh
-% <g4. g> <b8 b> [<d8.-> d->> c16] |
+
<g4. g'> <b8 b'> [<d'8.-> d,-> > c16] |
-% ugh ugh: connecting chords
%65
< { d,2.\f a'2} { e2. ~ e2 } { b'2. c,2 }> r4 |
\context Staff <
{
\voiceone
- [a8. b16] c4-> ~ a8 r |
- [a8. b16] c4-> ~ a8 r |
+ [a8. b16] c4-> () a8 r |
+ [a8. b16] c4-> () a8 r |
}
{
\voicetwo
<g2.-\fermata e' g> |
}
-$bass_intro = \notes\relative c{
+bassIntro = \notes\relative c{
\clef bass;
\property Voice.dynamicdir=1
%1
<g2 g'> r4 |
}
-$bass_verse1 = \notes\relative c{
+bassVerse1 = \notes\relative c{
% \clef bass;
\property Voice.dynamicdir=1
%5
c,8 [<c' e g> <e g c> <c e g> <e g c> <c e g>] |
}
-$bass_eentje = \notes\relative c{
+bassEentje = \notes\relative c{
\property Voice.dynamicdir=1
<c,8 c'> [<c' f as!> <f as c> <c f as> <f as c> <c f as>] |
c,8 [<c' e g> <e g c> <c e g> <e g c> <c e g>] |
c,8 [<e' g> <g c> <e g> <g c> <e g>] |
}
-$bass_through = \notes\relative c{
+bassThrough = \notes\relative c{
\property Voice.dynamicdir=1
%61
<g,8^"cresc." g'> [<g' b d> <b d f> <g b d> <as!-> b-> d->> <b d f>] |
}
-$lyric_four = \lyrics{
- _4 _ _
- _ _ _
- _ _ _
- _ _ _
+lyricFour = \lyrics{
+ " "4 " " " "
+ " " " " " "
+ " " " " " "
+ " " " " " "
}
allLyrics = {
\time 3/4;
% \skip 4 * 12;
- \$lyric_four
- \$lyric_verse1
+ \lyricFour
+ \lyricVerse1
% \skip 4 * 24;
- \$lyric_four
- \$lyric_four
- \$lyric_verse2
- \$lyric_through
+ \lyricFour
+ \lyricFour
+ \lyricVerse2
+ \lyricThrough
}
-$lyric_staff = \context Lyrics = lyric<
+lyricStaff = \context Lyrics = lyric<
\allLyrics
>
vocals = \notes{
+ \clef treble;
\property Voice.dynamicdir=UP
\skip 4 * 12;
- \$vocal_verse1
+ \vocalVerse
\skip 4 * 24;
- \$vocal_verse1
- \$vocal_through
+ \vocalVerse
+ \vocalThrough
}
-$vocal_staff = \context Staff = vocal<
+vocalStaff = \context Staff = vocal<
\property Staff.instrument = "alto sax"
\global
- \$vocals
+ \vocals
>
treble = {
- \$treble_intro
- \$treble_verse1
- \$treble_eentje
- \$treble_verse1
- \$treble_through
+ \trebleIntro
+ \trebleVerse1
+ \trebleEentje
+ \trebleVerse1
+ \trebleThrough
}
-$treble_staff = \context Staff = treble<
+trebleStaff = \context Staff = treble<
\global
\treble
>
bass = {
- \$bass_intro
- \$bass_verse1
- \$bass_eentje
- \$bass_verse1
- \$bass_through
+ \bassIntro
+ \bassVerse1
+ \bassEentje
+ \bassVerse1
+ \bassThrough
}
-$bass_staff = \context Staff = bass<
+bassStaff = \context Staff = bass<
\global
\bass
>
-$grand_staff = \context GrandStaff<
- \$treble_staff
- \$bass_staff
+grandStaff = \context GrandStaff<
+ \trebleStaff
+ \bassStaff
>
\score{
% \transpose a gives a' to d'' (for basses, who sing an octave down)
<
% kjoet, but i like the original better -- jcn
-% { \notes \transpose a { \$vocal_staff } }
-% \$lyric_staff
-% { \notes \transpose a { \$grand_staff } }
- { \notes { \$vocal_staff } }
- \$lyric_staff
- { \notes { \$grand_staff } }
+% { \notes \transpose a { \vocalStaff } }
+% \lyricStaff
+% { \notes \transpose a { \grandStaff } }
+ { \notes { \vocalStaff } }
+ \lyricStaff
+ { \notes { \grandStaff } }
>
\paper {
% \translator { \OrchestralScoreContext }
(("Key_item" "begin-of-note") . (extra_space 2.5))
(("Staff_bar" "begin-of-note") . (extra_space 1.0))
(("Clef_item" "begin-of-note") . (minimum_space 5.0))
+ (("" "Breathing_sign") . (minimum_space 0.0))
+ (("Breathing_sign" "Key_item") . (minimum_space 1.5))
+ (("Breathing_sign" "begin-of-note") . (minimum_space 1.0))
+ (("Breathing_sign" "Staff_bar") . (minimum_space 1.5))
+ (("Breathing_sign" "Clef_item") . (minimum_space 2.0))
)
)
# ...
#
# (not finished.)
+# ABC standard v1.6: http://www.gre.ac.uk/~c.walshaw/abc2mtex/abc.txt
#
program_name = 'abc-to-ly'
import sys
import re
import string
-import mpz
+try:
+ import mpz
+except:
+ sys.stderr.write ("This script needs Python 1.5.1\n")
+ sys.exit (1)
header = {}
print '\\header {'
for k in hdr.keys ():
print '%s = "%s";\n'% (k,hdr[k])
- print '};'
+ print '}'
def set_default_length (s):
m = re.search ('1/([0-9]+)', s)
tup_lookup = {
'3' : '2/3',
'4' : '4/3',
+ '5' : '4/5',
'6' : '4/6',
}
print '}'
return str
+def header_append (key, a):
+ s = ''
+ if header.has_key (key):
+ s = header[key] + "\n"
+ header [key ] = s + a
+
def try_parse_header_line (ln):
m = re.match ('^(.): *(.*)$', ln)
if m:
g =m.group (1)
a = m.group (2)
+ a = re.sub ('"', '\\"', a)
if g == 'T':
header['title'] = a
if g == 'M':
header ['origin'] = a
if g == 'X':
header ['crossRefNumber'] = a
-
if g == 'A':
header ['area'] = a
if g == 'H':
- header ['history'] = a
+ header_append ('history', a)
if g == 'B':
header ['book'] = a
if g == 'S':
return chr (name + ord('c')) + s * acc
def octave_to_mudela_quotes (o):
+ o = o + 2
s =''
if o < 0:
o = -o
if str:
str = str[1:]
- print "guitar chord: %s\n" % gc
+ sys.stderr.write ("warning: ignoring guitar chord: %s\n" % gc)
return str
return str
+#
+# |] thin-thick double bar line
+# || thin-thin double bar line
+# [| thick-thin double bar line
+# :| left repeat
+# |: right repeat
+# :: left-right repeat
+#
def try_parse_bar (str):
if str and str[0] == '|':
bs = '|.'
if str[0] == '|':
bs = '||'
-
+ if str[0] == '|:':
+ sys.stderr.write ("warning: repeat kludge\n")
+ bs = '|:'
if bs:
print '\\bar "%s";' % bs
+ str = str[1:]
+
+ if str and str[:2] == '[|':
+ sys.stderr.write ("warning: thick-thin bar kludge\n")
+ print '\\bar "||";'
+ str = str[2:]
+
+ if str and str[:2] == ':|':
+ sys.stderr.write ("warning: repeat kludge\n")
+ print '\\bar ":|:";'
+ str = str[2:]
+
+ if str and str[:2] == '::':
+ sys.stderr.write ("warning: repeat kludge\n")
+ print '\\bar ":|:";'
+ str = str[2:]
+
return str
return str
+# urg, hairy to compute grace note hack using \times{}
+def try_parse_grace_delims (str):
+ if str and str[0] == '{':
+ str = str[1:]
+ sys.stderr.write ("warning: expanding grace notes\n")
+ print '\\tiny '
+
+ if str and str[0] == '}':
+ str = str[1:]
+ print '\\normalsize '
+
+ return str
+
# Try nibbling characters off until the line doesn't change.
def try_parse_body_line (ln, state):
prev_ln = ''
ln = try_parse_guitar_chord (ln)
ln = try_parse_tuplet_begin (ln, state)
ln = try_parse_group_end (ln, state)
+ ln = try_parse_grace_delims (ln)
ln = junk_space (ln)
if ln:
- print 'Huh? Don\'t understand `%s\'' % ln
-
-
-
+ sys.stderr.write ("Huh? Don't understand `%s'\n" % ln)
def identify():
- print '%s from LilyPond %s' % (program_name, version)
+ sys.stderr.write ("%s from LilyPond %s\n" % (program_name, version))
def help ():
print r"""
if f == '-':
f = ''
+ print ("\\score{")
+ print (" <")
+ print (" \\context Staff=one \\notes {")
parse_file (f)
+ print (" }")
+ print (" >")
dump_header (header)
- print global_voice_stuff, 1
+ print "%%%s" % global_voice_stuff, 1
+ print ("}")
"""
if int(value) == 1:
- this.__set('pagenumber',1,requester)
+ this.__set('pagenumber','\\pagestyle{empty}',requester)
else:
- this.__set('pagenumber',0,requester)
+ this.__set('pagenumber','%',requester)
#
# setSeparate
elif o == '--landscape' or o == '-L':
Props.setOrientation('landscape','commandline')
elif o == '--nonumber' or o == '-N':
- Props.setNonumber('commandline')
+ Props.setNonumber(1,'commandline')
elif o == '--Width' or o == '-W':
Props.setLineWidth(a,'commandline')
elif o == '--dependencies' or o == '-d':