* Alexandre Oliva <oliva@dcc.unicamp.br>,
`http://sunsite.unicamp.br/~oliva/' testing
- * Francois Pinard <pinard@iro.umontreal.ca>, parts of
+ * Francois Pinard <pinard@iro.umontreal.ca>,
+ `http://www.iro.umontreal.ca/~pinard/' parts of
Documentation/Vocab*, started internationalization stuff
* Stephen Peters <portnoy@ai.mit.edu>, pdfTeX support
1.3.17.jcn1
===========
-* Bugfix: multi-measure rest: #measures (even more scm2int/int2scm mixups!)
+* Fixed bug that made multi-measure rest barnumber counts go wild.
+(even more scm2int/int2scm mixups!)
* mutopia/J.S.Bach/pa.ly: organ score (for my father)
* small fix to mutopia/J.S.Bach/Duette/violino-ii.ly
+1.3.17.hwn2
+===========
+
+* Remove Paper_def calls in bezier-bow.cc
+
+* Remove data members of Tuplet_spanner, Volta_spanner
+
+* hang_on_clef, property hangOnClef removed
+
+* Bar::type_str_ mode into element property `glyph'. Use a Scheme
+function to determine breaking behavior.
+
+* More Scheme typechecking.
+
+* Be strict about the difference between strings and symbols for conversion.
+
+* Fixed bug that made 1st line offset to right fixed. Bugfix courtesy
+Laurent Martelli.
+
+* Partial French translation, courtesy Laurent Martelli.
+
+* Small corrections in NL translation.
+
+1.3.17.hwn1
+===========
+
+* Added mensural note heads (noteHeadStyle = "mensural") Additionally,
+we have a longa note head. noteHeadStyle = "harmonic" is not
+supported anymore. (for now, that is)
+
+* Reference manual update. Document \properties with examples
+
+* fix mudela-book --help
+
+* Use element properties for Text_item::text_str_, Clef_item::symbol_,
+Key_item::c0_position_
+
+* Clef_engraver general cleanup. Use alists (\property
+supportedClefTypes, clefPitches) for clef types.
+
+* Use progress_indication () for progress. Don't include <iostream.h> directly
+Don't include <string.h>, <math.h> from headers.
+
+
1.3.16.hwn1
===========
next to the top of the rest. All rests except the whole rest are
centered on the middle staff line.
-@mudelafile{rest.fly}
+@mudelafile{rest.ly}
Note head shapes are settable. The stem endings should be adjusted
per note head. If you want different note head styles on one stem,
@uref{http://sunsite.unicamp.br/~oliva/}
testing
@item @email{pinard@@iro.umontreal.ca, Francois Pinard},
+ @uref{http://www.iro.umontreal.ca/~pinard/}
parts of Documentation/Vocab*, started internationalization stuff
@c urg: @c,{} in @email{} barfs.
@item @email{portnoy@@ai.mit.edu,Stephen Peters}, pdfTeX support
property is listed in parentheses after the property name.
@macro propertytype{t}
- (/t/)
+ (\t\)
@end macro
+@table @samp
+ @item @code{Generic_property_list} Defines names and types for
+generic properties. These are properties than can be plugged into the
+backend directly. See the init file @file{generic-property.scm} for
+details. For internal use only.
+
@cindex properties!Lyrics
@table @samp
@code{diamond}, @code{harmonic}, @code{transparent}, and @code{""}.
They are shown in that order below.
- @mudela[center]
-
+ @mudela[center,verbatim]
\score {
\notes {
\property Staff.barNonAuto = 1
@table @samp
- @item @code{stemStyle}@indexcode{stemStyle} @propertytype{string}
+ @item @code{stemStyle}@indexcode{flagStyle} @propertytype{string}
By default set to @code{"grace"} meaning that all unbeamed
notes with flags are typeset with a slash through the flag.
Setting to @code{""} gives standard flags.
+
+@mudela[verbatim]
+c'8 \property Voice.flagStyle = "grace" c'8
+@end mudela
@end table
below the staff. This property does not override explicit
directions marked with `@code{^}' or `@code{_}' in the mudela file.
- @item @code{noAutoBeaming}@indexcode{beamAuto}
+ @item @code{noAutoBeaming}@indexcode{beamAuto} @propertytype{boolean}
If set to 1 then beams are not generated automatically.
- @item @code{beamAutoEnd}@indexcode{beamAutoEnd}
+ @item @code{beamAutoEnd}@indexcode{beamAutoEnd} @propertytype{?}
Specifies when automatically generated beams can end. See
section XREF-autobeam [FIXME].
- @item @code{beamAutoBegin}@indexcode{beamAutoBegin}
+ @item @code{beamAutoBegin}@indexcode{beamAutoBegin} @propertytype{?}
Specifies when automatically generated beams can start. See
section XREF-autobeam [FIXME].
+
+[outdated FIXME]
@item @code{beamQuantisation}@indexcode{beamQuantisation} @propertytype{symbol}
Set to @code{\none} for no quantization. Set to @code{\normal} to
quantize position and slope. Set to @code{\traditional} to avoid
the staff.
@item @code{dynamicStyle}@indexcode{dynamicStyle} @propertytype{string}
- Set the text style for dynamics.
+ Set the text style for dynamics.
@item @code{fontSize}@indexcode{fontSize} @propertytype{number}
Can be used to select smaller font sizes for music. The normal
font size is 0, and the two smaller sizes are -1
and -2.
+@mudela[verbatim]
+c''16 \property Staff.fontSize = -2 c''16
+@end mudela
+
@item @code{forceHorizontalShift}@indexcode{forceHorizontalShift}
Force horizontal shift for collision resolution. It overrides
automatic collision resolution. The value is the shift amount
expressed in @code{note_width}, as set in the paper section.
+@mudelafile[verbatim]{force-hshift.sly}
+
+
[FIXME: this should be moved]
Lilypond always arranges note heads on alternate sides of a stem (that
the notes. In this case the chords are just simple notes.
@c URG : mudela book bug.
-@mudela[singleline]
+@mudela[singleline,verbatim]
\score {
\notes \context Staff <
\context Voice = VA { \stemup f''4^"0" }
that really needs it (unisons and seconds), and reset it to 0.0 after
the note.
- @item @code{horizontalNoteShift}@indexcode{horizontalNoteShift}
+ @item @code{horizontalNoteShift}@indexcode{horizontalNoteShift} @property{integer}
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}@keyindex{shift} is defined to
enable this. Traditionally, the outer chords (the upmost and
downmost voices), should have no @code{horizontalNoteShift}.
- @item @code{markScriptPadding}@indexcode{markScriptPadding}
+ @item @code{markScriptPadding}@indexcode{markScriptPadding} @propertytype{number}
Determines the extra space added between the mark and the closest
staff line or note.
Currently, the standard layout @code{""} and mensural notation
@code{"mensural"} are available. Mensural rests of duration
32 or shorter are not available.
-
+@mudela[verbatim]
+r\longa r\breve r1 r2 r4 r8 r16 r32 r64 r128 r128
+\property Staff.restStyle = "mensural"
+r\longa r\breve r1 r2 r4 r8 r16 r32 r64 r128 r128
+@end mudela
+
@item @code{scriptHorizontal}@indexcode{scriptHorizontal} @propertytype{boolean}
Put scripts left or right of note heads. Support for this is
limited. Accidentals will collide with scripts.
@code{\slurboth}@keyindex{slurboth} are available.
@item @code{slurDash}@indexcode{slurDash} @propertytype{number}
- Set to 0 for normal slurs, 1 for dotted slurs, and a
+ Set to NIL for normal slurs, 1 for dotted slurs, and a
larger value for dashed slurs. Identifiers
@code{\slurnormal}@keyindex{slurnormal} and
@code{\slurdotted}@keyindex{slurdotted} are predefined to set the
first two settings.
+@mudela[verbatim]
+ c4( )d
+ \property Voice.slurDash = 3
+ c ( )e
+@end mudela
+
@item @code{stemLength}@indexcode{stemLength}
Set length of stems. Unit is `@code{interline}/2', so
@code{stemLength} defaults to 7.
+@mudela[verbatim]
+g''4 \property Voice.stemLength = #14 g4 \property Voice.stemLength = #3 g4 g,,4
+@end mudela
@item @code{stemLeftBeamCount}@indexcode{stemLeftBeamCount} @propertytype{integer}
Specify the number of beams to draw on the left side of the next
Specify the number of beams to draw on the right side of the next
note. Overrides automatic beaming. The value is only used once,
and then it is erased.
+
@item @code{tieVerticalDirection}@indexcode{tieVerticalDirection} @propertytype{direction}
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
half-steps to transpose by.
@item @code{textEmptyDimension}@indexcode{textEmptyDimension} @propertytype{boolean}
- If set to 1 then text placed above or below the staff is
- assumed to have zero width.
-
+ If set to true then text placed above or below the staff is
+ assumed to have zero width. @code{fatText} and @code{emptyText}
+are predefined settings.
+
+@mudela[verbatim]
+c4^"foo" \emptyText c4^"foo" c4
+@end mudela
+
@item @code{textStyle}@indexcode{textStyle} @propertytype{string}
Set the text style for superscripts and subscripts. See above
for list of text styles.
- @item @code{textScriptPadding}@indexcode{textScriptPadding}
+ @item @code{textScriptPadding}@indexcode{textScriptPadding} @propertytype{number}
Determines the extra space added between superscripted resp.
subscripted text and the closest staff line or note.
@code{\down} to force them below the staff, @code{\up} to force
them above, or @code{\free} to let LilyPond decide.
- @item @code{tupletVisibility}@indexcode{tupletVisibility} (number) [FIXME]
- Determines whether tuplets of notes are labelled. Setting
+ @item @code{tupletVisibility}@indexcode{tupletVisibility} @propertytype{number}
+ [deprecate this, FIXME]
+ Determines whether tuplets of notes are labeled. Setting
to 0 shows nothing; setting to 1 shows a number;
setting to 2 shows a number and a bracket if there is no
beam; setting to 3 shows a number, and if there is no beam
@table @samp
@item @code{barNonAuto}@indexcode{barNonAuto} @propertytype{boolean}
- If set to 1 then bar lines will not be printed
+ If set to true 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
@item @code{barSize}@indexcode{barSize}
Specify the height of the bar lines if it should be different
than the staff height.
+@mudela[verbatim]
+c1 c1 \property Staff.barSize = 20 c1 c1
+@end mudela
@item @code{barAtLineStart}@indexcode{barAtLineStart} @propertytype{boolean}
- Set to 1 to produce a bar line after the clef at the start
+ Set to true to produce a bar line after the clef at the start
of each line (but not at the beginning of the music).
+ [BROKEN]
+
@item @code{clefStyle}@indexcode{clefStyle} @propertytype{string}
Determines how clefs are typeset. If set to @code{transparent},
the clefs are not printed at all, if set to
typeset with a full size clef. By default, clef changes are
typeset in smaller size.
- @item @code{createKeyOnClefChange}@indexcode{createKeyOnClefChange} @propertytype{boolean}
- Set to a nonempty string if you want key signatures to be printed
- when the clef changes. Set to the empty string if you do not
- want key signatures printed.
+ @item @code{supportedClefTypes}@indexcode{supportedClefTypes} @propertytype{alist}
- @item @code{createInitdefaultClef}@indexcode{createInitdefaultClef} @propertytype{boolean}
- Specify whether clefs are created on default? @propertytype{Doesn't seem to
- do anything.}
+ Clef settings supported. The value is an association list clef
+descriptions indexed by clef name (alto, baritone, etc.). A clef
+description is a list with the glyph name, and the staff position
+where it should go. For internal use.
+ @item @code{clefPitches}@indexcode{clefPitches} @propertytype{alist}
+ Settings for the position of the central C, relative to this clef
+ symbol. For internal use.
+
@item @code{defaultClef}@indexcode{defaultClef} @propertytype{string}
- Determines the default clef. See @code{\clef} keyword.
+ Clef setting to use when this context is created. If unset,
+no clef is printed upon creation.
@item @code{marginDirection}@indexcode{marginDirection} @propertytype{direction}
Set to @code{\left} or @code{\right} to specify location of
be printed only once and are in effect until overridden, possibly
many measures later.
- @item @code{staffLineLeading}@indexcode{staffLineLeading}
+ @item @code{staffSpace}@indexcode{staffLineLeading} @propertytype{number}
Specifies the distance (in points) between lines of the staff.
@item @code{numberOfStaffLines}@indexcode{numberOfStaffLines} @propertytype{integer}
Specifies the number of staff lines. The default is 5.
- @item @code{postBreakPadding}@indexcode{postBreakPadding}
+ @item @code{postBreakPadding}@indexcode{postBreakPadding} @propertytype{number}
Extra space in points to be added after the clef, time signature
and key signature on the staff. Deprecated, do not use.
@item @code{barAlways}@indexcode{barAlways} @propertytype{boolean}
- If set to 1 a bar line is drawn after each note.
+ If set to true a bar line is drawn after each note.
@item @code{defaultBarType}@indexcode{defaultBarType} @propertytype{string}
Sets the default type of bar line. See Section XREF-barlines [FIXME]
for a list of available bar types.
- @item @code{instrument}, @code{instr}
+ @item @code{instrument}, @code{instr} @propertytype{string}
@indexcode{instrument}@indexcode{instr}
If @code{Staff_margin_engraver}
@cindex Staff_margin_engraver
is used to determine the instrument for MIDI output.
@item @code{keyOctaviation}@indexcode{keyOctaviation} @propertytype{boolean}
- If set to 1, then keys are the same in all octaves. If set
- to 0 then the key signature for different octaves can be
+ If set to TRUE, then keys are the same in all octaves. If set
+ to FALSE then the key signature for different octaves can be
different and is specified independently:
@example
The different time signature characters are shown below with its
names:
- @mudela[center]
+ @mudela[center,verbatim]
\score {
\notes\relative c'' {
@cindex properties!GrandStaff
@table @samp
- @item @code{alignmentReference}@indexcode{alignmentReference}
+ @item @code{alignmentReference}@indexcode{alignmentReference}
+@propertytype{direction}
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.
- @item @code{maxVerticalAlign}@indexcode{maxVerticalAlign}
+ @item @code{maxVerticalAlign}@indexcode{maxVerticalAlign} @propertytype{number}
Set the maximum vertical distance between staffs.
- @item @code{minVerticalAlign}@indexcode{minVerticalAlign}
+ @item @code{minVerticalAlign}@indexcode{minVerticalAlign} @propertytype{number}
Set the minimum vertical distance between staffs.
@end table
.* TODO
. * use hash tabs iso. alist_ for elt property?
+. * tremolos.
+. * internationalize GUILE msgs.
+. * unbroken marks.
+. * put property test files in refman.
+. * fix slurdotted
. * alignment within @itemize
+. * slur dashing.
. * junk dstream output.
. * agressive type-checking for SCM stuff.
. * script columns
PACKAGE_NAME=LilyPond
MAJOR_VERSION=1
MINOR_VERSION=3
-PATCH_LEVEL=17
-MY_PATCH_LEVEL=jcn2
+PATCH_LEVEL=18
+MY_PATCH_LEVEL=
# use the above to send patches: MY_PATCH_LEVEL is always empty for a
# released version.
#define REAL_HH
-#include <math.h>
#include <limits.h>
typedef double Real;
-const Real infinity_f = HUGE_VAL;
+extern const Real infinity_f;
template<class T> inline T abs (T x)
{
#define STRING_HH
-#include <string.h>
-#include <iostream.h>
#include "arithmetic-operator.hh"
#include "fproto.hh"
#include "string-handle.hh"
-
+class ostream;
/* Libg++ also has a String class. Programming errors can lead to
confusion about which String is in use. Uncomment the following if you have
unexplained crashes after mucking with String
IMPLEMENT_ARITHMETIC_OPERATOR (String, +);
-inline ostream &
-operator << (ostream& os, String d)
-{
- d.print_on (os);
- return os;
-}
-
-
+ostream &operator << (ostream& os, String d);
#endif
Text_record() { } // needed because of other ctor
/// report an error in this line.
- void message (String s) {
- cerr << '\n'<< filename << ": "<< line_no << s << "\n";
- }
- String operator[](int j) {
+ void message (String s);
+ String operator[](int j) {
return Array<String>::operator[](j);
}
return line_no;
}
- ~Text_stream(){
- if (!eof_b())
- cerr <<__FUNCTION__<< ": closing unended file";
-
- fclose (f);
- }
+ ~Text_stream();
+
/// GNU format message.
void message (String s);
#ifndef VIRTUAL_METHODS_HH
#define VIRTUAL_METHODS_HH
-#include <typeinfo>
#include "stdlib.h" // size_t
-#define classname(class_ptr) demangle_classname(typeid(*(class_ptr)).name())
+#define classname(class_ptr) demangle_classname(typeid(*(class_ptr)))
const char *
-demangle_classname (const char*);
+demangle_classname (type_info const &);
/**
(c) 1993--1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
*/
+#include <math.h>
#include "polynomial.hh"
(c) 1997--1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
*/
+#include <math.h>
#include <stdlib.h>
#include "rational.hh"
#include "string.hh"
--- /dev/null
+#include <math.h>
+#include "real.hh"
+
+const Real infinity_f = HUGE_VAL;
+#include <typeinfo>
#include <ctype.h>
#include "virtual-methods.hh"
const char *
-demangle_classname (char const *s)
+demangle_classname (type_info const &t)
{
+ char const *s = t.name();
while (isdigit (*s))
s++;
return s;
#include <stdlib.h>
#include <stdio.h>
-
+#include <iostream.h>
#include <assert.h>
#include <string.h>
#include <stdarg.h>
return String_convert::dec2_f (*this);
}
+ostream &
+operator << (ostream& os, String d)
+{
+ d.print_on (os);
+ return os;
+}
+
+
+
+#include <iostream.h>
#include "text-db.hh"
+
bool
Text_db::eof_b ()
{
}
+void
+Text_record::message (String s)
+{
+ cerr << '\n'<< filename << ": "<< line_no << s << "\n";
+}
+#include <iostream.h>
#include "text-stream.hh"
Text_stream::Text_stream (String fn)
// !pushback.size () &&
feof (f);
}
+
+Text_stream::~Text_stream()
+{
+ if (!eof_b())
+ cerr <<__FUNCTION__<< ": closing unended file";
+
+ fclose (f);
+ }
SUBDIRS=test bugs tutorial
-examples=praeludium-fuga-E star-spangled-banner paddy
+examples=trip star-spangled-banner paddy
flexamples=
LOCALSTEPMAKE_TEMPLATES=mutopia
e8_. g'8-> e16^^ g'16_^
e32 _| g'32^| g''32-\ltoe g''32-\lheel
e64-\rtoe g'64-\rheel c4... |
+\context Voice = mensural \relative c'' {
+\property Voice . noteHeadStyle = "mensural"
+\property Voice. stemCentered = ##t
+c\maxima*1/8
+c\longa*1/4 c\breve*1/2 c1 c2 c4 c8
+}
+ \property Voice . noteHeadStyle = "harmonic"
\transpose c'{
\time 4/4;
c1^"1" d2^"2" e4^"3"
\property Voice . noteHeadStyle = "cross"
f4^"4"
- \property Voice . noteHeadStyle = "harmonic"
g4^"5"
\property Voice . noteHeadStyle = ""
% Music to the Martians!
+++ /dev/null
-
-\context Staff <
- \context Voice = VA {
- \property Voice.forceHorizontalShift = "0.1"
- % \stemup \shifton
- \property Voice.verticalDirection=1
- \property Voice.horizontalNoteShift=1
- <g' d'>
- }
-
- \context Voice = VB {
- %\stemdown \shifton
- \property Voice.verticalDirection=-1
- \property Voice.horizontalNoteShift=1
- \property Voice.forceHorizontalShift = #-0.1
- <bes f'>
- }
->
--- /dev/null
+
+\context Staff <
+ \context Voice = VA {
+ \property Voice.forceHorizontalShift = #0.1
+ \stemup
+ \property Voice.horizontalNoteShift=1
+ <g' d'>
+ }
+
+ \context Voice = VB {
+ \stemdown
+ \property Voice.horizontalNoteShift=1
+ \property Voice.forceHorizontalShift = #-0.1
+ <bes f'>
+ }
+>
c4 c2 c8 c16 c16 c1
\property Voice.noteHeadStyle = "cross"
c4 c2 c8 c16 c16 c1
-\property Voice.noteHeadStyle = "harmonic"
+\property Voice.noteHeadStyle = "mensural"
c4 c2 c8 c16 c16 c1
\context Voice <
{ \property Thread.noteHeadStyle = "" a16 }
\context Thread = TC
- { \property Thread.noteHeadStyle = "harmonic" d16 }
+ { \property Thread.noteHeadStyle = "mensural" d16 }
>
- \context Voice <\context Thread = TA { c4 c4 }
+
+
+ \context Voice <\context Thread = TA {
+ \property Thread.noteHeadStyle = #'()
+ c4 c4 }
\context Thread = TB {
- \property Thread.noteHeadStyle = "harmonic"
+ \property Thread.noteHeadStyle = "mensural"
c'4 \stemdown c
} >
+++ /dev/null
-\time 4/4;
-r \longa * 1/4 r\breve * 1/2
-r1 r2 r4 r8 r16 r32 r64 r128 r128
-\time 6/4;
-r1. r2. r4. r8. r16. r32. r64. r128. r128.
--- /dev/null
+\score { \notes {
+ \time 4/4;
+r \longa * 1/4 r\breve * 1/2
+r1 r2 r4 r8 r16 r32 r64 r128 r128
+\time 6/4;
+r1. r2. r4. r8. r16. r32. r64. r128. r128.
+}}
\score {
\notes {
\relative c'' {
+\property Voice . noteHeadStyle = "mensural"
\property Voice. stemCentered = ##t
-\property Voice . noteHeadStyle = "harmonic"
-c4 c4 c8 c8 }
+c\maxima*1/8
+c\longa*1/4 c\breve*1/2 c1 c2 c4 c8
+}
}
}
\header {
- filename = "praeludium-fuga-E.ly";
- title = "praeludium and fuga in E-major";
- opus = "BWV 566";
- composer = "Johann Sebastian Bach (1685-1750)";
+ title = "Trip";
enteredby = "JCN";
copyright = "public domain";
}
-%{
- description
- Praeludium 3 bar excerpt,
- 2nd fuga transposed subject -- 4 bar excerpt.
- We try to imitate the Griepenkerl/Keller edition which
- gives the best approximation to Bach's original layout
-%}
-%{
- Tested Features:
- purpose of this file is testing:
- * real-life collisions
- * multi-voice input --- splitting?
- * organ staff...
-%}
-\version "1.3.4";
-
-
-
-praeludium_commands = \notes {
-}
+% todo: clef ch .
praeludiumRight = \notes {
\key e;
a' ~ [a16 gis a b] \shifton dis,4 cis ~ |
[cis8 dis16 ais] bis4 cis r8 b }
\context Voice = IV \relative c'' {
-
- %\stemup
- %{
- this is a diversion from the Griepenkerl/Keller
- edition; a hack to avoid collisions
- %}
\stemdown
\shifton s4 gis }
\context Staff <
\context Voice = two { r4 }
\context Voice = one { \stemup s4 dis' cis cis ~ |
- [cis8 ( a \translator Staff = treble \stemdown \shifton d ) cis]
+ [cis8
+ (
+ a \translator Staff = treble \stemdown \shifton d
+ )
+
+ cis]
\translator Staff = bass
\shiftoff
[bis gis] cis4 |
\context Voice = one { \stemup bis2 }
\context Voice = three {
\property Voice.dynamicDirection = \down
- \stemup \shifton r4 gis ~ [gis8 \< gis] ~ \stemdown \shiftoff gis4 |
- a4. fis8 \! gis4. a8 ~ |
- a4 gis4 gis r8 gis }
-% { \stemup \shifton s4 fis4 e}
-% a quick hack to avoid some collisons
+ \stemup \shifton r4 gis ~ [gis8
+ \<
+
+ gis] ~ \stemdown \shiftoff gis4 |
+ a4. fis8
+ \!
+ gis4. a8 ~ |
+ a4 gis4 gis r8 gis }
\context Voice = four { \stemdown \shifton s4 fis4 e}
\context Voice = two { \stemdown s4 dis4 cis4 }
> |
-fugaII_commands = \notes{
- \time3/4;
-}
fugaIIRight = \notes \relative c'' {
\key e; % E-major
\clef violin;
+ \time3/4;
%15
\context Staff <
%19
}
+gracetest = \notes \grace { [c16 ( cis dis] }
+
fugaIILeft = \notes {
\key e;
\clef bass;
%15
\context Staff <
\context Voice = one { \stemdown
- \grace { [c16 ( cis dis] }
+ \gracetest
\relative b, < )b2 dis fis a b cis dis> \stemup ais4 |
b2 b4 }
\context Voice = two { \stemdown s2 e4 |
%13
r4 fis,4-\ltoe e4.-\lheel e'8-\rheel |
fis4.-\rtoe fis8-\rtoe fis4-\rtoe [e8-\ltoe a-\rtoe] |
- dis,4-\ltoe gis-\rtoe [cis,8-\ltoe( b!-\lheel ais-\rtoe gis-\ltoe ~ ] |
- %16
- \notes { gis8 r4. )c2 }
+ dis,4-\ltoe gis-\rtoe [cis,8-\ltoe
+ (
+ b!-\lheel ais-\rtoe gis-\ltoe ~ ] |
+ gis8 r4.
+ )
+ c2
\time 3/4;
\fugaIIPedal }
(c) 1997--1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
*/
+#include <iostream.h>
#include "proto.hh"
#include "input.hh"
#include "string.hh"
path = search_path_.find (path);
if (path.empty_b ())
return 0;
-
- *mlog << "[" << path;
+ progress_indication ("[" + path);
Adobe_font_metric * afm_p = read_afm_file (path);
afm_p->name_str_ = name;
-
- *mlog << "]" << flush ;
+ progress_indication ("]");
afm_p_dict_[sname] = afm_p->self_scm_;
scm_unprotect_object (afm_p->self_scm_);
path = search_path_.find (path);
if (path.empty_b ())
return 0;
-
- *mlog << "[" << path;
+ progress_indication ("[" + path);
Tex_font_metric * tfm_p = Tex_font_metric_reader::read_file (path);
tfm_p->name_str_ = name;
-
- *mlog << "]" << flush ;
+ progress_indication ("]");
tfm_p_dict_[sname] = tfm_p->self_scm_;
scm_unprotect_object (tfm_p->self_scm_);
void
Atom::fontify (Font_metric * met)
{
-
SCM desc = ly_quote_scm (met->description ());
SCM font_switch = gh_list (ly_symbol2scm ("select-font"),
desc,
SCM default_type = get_property ("defaultBarType", 0);
if (gh_string_p (default_type))
{
- bar_p_->type_str_ = ly_scm2string (default_type);
+ bar_p_->set_elt_property ("glyph", default_type); // gu.h
}
+#if 0
/*
- urg. Why did I implement this?
- */
+ urg. Why did I implement this? And did I implement this so
+ clumsily? */
SCM prop = get_property ("barAtLineStart", 0);
if (to_boolean (prop))
{
bar_p_->set_elt_property ("at-line-start", SCM_BOOL_T);
}
+#endif
announce_element (Score_element_info (bar_p_, 0));
}
}
{
return;
}
- else if (((requested_type == "|:") && (bar_p_->type_str_ == ":|"))
- || ((requested_type == ":|") && (bar_p_->type_str_ == "|:")))
- bar_p_->type_str_ = ":|:";
- else
- bar_p_->type_str_ = requested_type;
+
+ String current = ly_scm2string (bar_p_->get_elt_property ("glyph"));
+
+ if ((requested_type == "|:" && current== ":|")
+ || (requested_type == ":|" && current == "|:"))
+ requested_type = ":|:";
+
+
+ bar_p_->set_elt_property ("glyph",
+ ly_str02scm (requested_type.ch_C ()));
}
void
if (which.length_i ())
{
create_bar();
- bar_p_->type_str_ = which;
+ bar_p_->set_elt_property ("glyph", ly_str02scm (which.ch_C ()));
}
if (!bar_p_)
!time->measure_position () && now_mom () > Moment (0))
{
create_items (0);
- text_p_->text_str_ = to_str (gh_scm2int (bn));
+
+ // guh.
+ text_p_->set_elt_property ("text",
+ ly_str02scm (to_str (gh_scm2int (bn)).ch_C()));
+
}
}
{
axis_ = Y_AXIS;
text_p_ =0;
- hang_on_clef_b_ = false;
+
visibility_lambda_
= ly_eval_str ("non-postbreak-visibility");
}
void
Bar_script_engraver::do_creation_processing ()
{
- SCM prop = get_property (type_ + "HangOnClef", 0);
- if (to_boolean (prop))
- {
- hang_on_clef_b_ = true;
- }
}
/*
Bar_script_engraver::cast_to_interesting_item (Score_element *e)
{
Item * i =0;
- if (hang_on_clef_b_)
- {
- Clef_item * c = dynamic_cast<Clef_item*> (e);
+ /*
+ should do type lookup: if (e ->is_type (hang_on_type))
+ */
+ i = dynamic_cast<Bar*> (e);
- // urg.
- if (c) // && c->default_b_)
- {
- i = c;
- }
- }
- else
- {
- i = dynamic_cast<Bar*> (e);
- }
return i;
}
Bar::Bar ()
{
set_elt_property ("breakable", SCM_BOOL_T);
- type_str_ = "|";
}
-void
-Bar::do_print () const
-{
-#ifndef NPRINT
- String s = type_str_;
- DEBUG_OUT << "type = " << s;
-#endif
-}
Real
Bar::get_bar_size () const
Molecule*
Bar::do_brew_molecule_p () const
-{
- Molecule *output = new Molecule (lookup_l ()->bar (type_str_, get_bar_size (), paper_l ()));
+{
+ String s = ly_scm2string (get_elt_property ("glyph"));
+ Molecule *output
+ = new Molecule (lookup_l ()->bar (s, get_bar_size (), paper_l ()));
return output;
}
-/**
- Prescriptions for splitting bars.
- TODO: put this in SCM.
- */
-static char const *bar_breaks[][3] ={
- {":|", ":|:", "|:"},
- {"|", "|", ""},
- {"", "|s", "|"},
- {"|", "|:", "|:"},
- {"|.", "|.", ""},
- {":|", ":|", ""},
- {"||", "||", ""},
- {".|.", ".|.", ""},
- {"", "scorebar", "scorepostbreak"},
- {"", "brace", "brace"},
- {"", "bracket", "bracket"},
- {0,0,0}
-};
+
void
Bar::do_pre_processing ()
{
- for (int i=0; bar_breaks[i][0]; i++)
+ SCM g = get_elt_property ("glyph");
+ SCM breakdir = gh_int2scm (break_status_dir ());
+
+ if (gh_string_p (g))
{
- if (bar_breaks[i][1] == type_str_)
- {
- type_str_ = bar_breaks[i][break_status_dir ()+1];
- break;
- }
+ g = scm_eval (gh_list (ly_symbol2scm ("break-barline"),
+ g,
+ breakdir,
+ SCM_UNDEFINED));
}
-
-
+ else
+ {
+ g = SCM_UNDEFINED;
+ }
+
+#if 0
if (remove_elt_property ("at-line-start") == SCM_BOOL_T // UGR.
&& (break_status_dir () == RIGHT) && (type_str_ == ""))
{
type_str_ = "|";
}
-
- if (type_str_ =="")
- set_empty (X_AXIS);
+#endif
+
+ if (!gh_string_p (g))
+ {
+ set_elt_property ("transparent", SCM_BOOL_T);
+ set_empty (X_AXIS);
+ }
+ else
+ set_elt_property ("glyph", g);
}
}
announce_element (Score_element_info (spanbar_p_,0));
- if (spanbar_p_->type_str_.empty_b ())
- spanbar_p_-> type_str_ = bar_l_arr_[0]->type_str_;
+ if (!gh_string_p (spanbar_p_->get_elt_property ("glyph")))
+ spanbar_p_-> set_elt_property ("glyph",
+ bar_l_arr_[0]->get_elt_property ("glyph"));
}
}
}
{
if (beam_p_)
{
- reqs_drul_[START]->warning (_ ("Already have a Beam"));
+ reqs_drul_[START]->warning (_ ("Already have a beam"));
return;
}
* move paper vars to scm
*/
+#include <math.h> // tanh.
+
#include "directional-element-interface.hh"
#include "beaming.hh"
#include "dimensions.hh"
#include "bezier.hh"
#include "dimensions.hh"
#include "direction.hh"
-#include "paper-def.hh"
#include "debug.hh"
#include "main.hh"
}
-Bezier_bow::Bezier_bow (Paper_def* paper_l,
- Array<Offset> points, Direction dir)
+Bezier_bow::Bezier_bow (Array<Offset> points, Direction dir)
{
- paper_l_ = paper_l;
dir_ = dir;
encompass_ = points;
to_canonic_form ();
-
- calc_default (0.0);
- if (fit_factor () > 1.0)
- {
- calc_tangent_controls ();
- blow_fit ();
- }
+
+ rc_factor_ = 1.0;
+ height_limit_ = 1.0;
+ ratio_ = 1.0;
}
void
curve_.check_sanity ();
}
-
-
-
-
-
+void
+Bezier_bow::calculate ()
+{
+ calc_default (0.0);
+ if (fit_factor () > 1.0)
+ {
+ calc_tangent_controls ();
+ blow_fit ();
+ }
+}
Bezier
Bezier_bow::get_curve ()const
{
-
Bezier rv = curve_;
if (dir_ == DOWN)
{
The curve will always be under line between curve_.control_0 -> curve_.control_1, so
make it extra steep by slur_rc_factor
*/
- Real rc_correct = paper_l_->get_var ("slur_rc_factor");
-
+
+
Drul_array<Real> angles;
Direction d = LEFT;
do
{
- maxtan[d] *= -d * rc_correct;
+ maxtan[d] *= -d * rc_factor_;
angles[d] = atan (maxtan[d]);
}
while (flip(&d) != LEFT);
// ugh: be less steep
- rc3 /= 2*rc_correct;
+ rc3 /= 2*rc_factor_;
Real c2 = -maxtan[RIGHT] * curve_.control_[3][X_AXIS];
{
Real pi = M_PI;
- Real height_limit = paper_l_->get_var ("slur_height_limit");
- Real ratio = paper_l_->get_var ("slur_ratio");
-
- Real alpha = height_limit * 2.0 / pi;
- Real beta = pi * ratio / (2.0 * height_limit);
+ Real alpha = height_limit_ * 2.0 / pi;
+ Real beta = pi * ratio_ / (2.0 * height_limit_);
Offset delta (encompass_.top ()[X_AXIS]
- encompass_[0][X_AXIS], 0);
Bezier
Bow::get_curve () const
{
- Bezier_bow b (paper_l (),
- get_encompass_offset_arr (), directional_element (this).get ());
-
+ Bezier_bow b (get_encompass_offset_arr (), directional_element (this).get ());
+
+ b.ratio_ = paper_l ()->get_var ("slur_ratio");
+ b.height_limit_ = paper_l ()->get_var ("slur_height_limit");
+ b.rc_factor_ = paper_l ()->get_var ("slur_rc_factor");
+
+ b.calculate ();
return b.get_curve ();
}
symbol_list = gh_cdr (scm_reverse (symbol_list));
for (int i=0; i <elems.size()-1; i++)
{
- String sym_str = ly_scm2string (gh_car (symbol_list));
+ String sym_str = ly_symbol2string (gh_car (symbol_list));
elems[i]->set_elt_property (sym_str,
scm_cons (gh_double2scm (0),
gh_double2scm (dists[i+1])));
/*
- clef.cc -- implement Clef_engraver
+ clef-engraver.cc -- implement Clef_engraver
source file of the GNU LilyPond music typesetter
Mats Bengtsson <matsb@s3.kth.se>
*/
-/*
- CLEAN ME UP.
- */
-
#include <ctype.h>
#include "staff-symbol-referencer.hh"
#include "bar.hh"
-#include "clef-engraver.hh"
#include "clef-item.hh"
#include "debug.hh"
#include "command-request.hh"
#include "note-head.hh"
#include "key-item.hh"
#include "local-key-item.hh"
+#include "array.hh"
+#include "engraver.hh"
+#include "direction.hh"
+
+/// where is c-0 in the staff?
+class Clef_engraver : public Engraver {
+ Clef_item * clef_p_;
+ Clef_change_req * clef_req_l_;
+ void create_clef();
+ bool set_type (String);
+protected:
+ virtual void do_process_requests();
+ virtual void do_pre_move_processing();
+ virtual void do_creation_processing();
+ virtual void do_post_move_processing();
+ virtual bool do_try_music (Music*);
+ virtual void acknowledge_element (Score_element_info);
+public:
+ VIRTUAL_COPY_CONS(Translator);
+ int c0_position_i_;
+ int clef_position_i_;
+ // junkme.
+ Direction octave_dir_;
+ SCM clef_glyph_; // no need for protection. Always referenced somewhere else.
+
+ Clef_engraver();
+};
+
Clef_engraver::Clef_engraver()
{
+ clef_glyph_ = SCM_EOL;
clef_p_ = 0;
clef_req_l_ = 0;
- clef_type_str_ = "";
c0_position_i_ = 0;
clef_position_i_ = 0;
octave_dir_ = CENTER;
- create_default_b_ = true;
}
bool
else
octave_dir_ = CENTER;
- bool found = false;
SCM c = get_property ("supportedClefTypes",0);
- for (; gh_pair_p(c); c = gh_cdr (c))
+ SCM p = get_property ("clefPitches", 0);
+
+ if (gh_list_p (c))
{
- SCM entry = gh_car (c);
- SCM name = gh_car (entry);
-
- if (ly_scm2string (name) != s)
- continue;
+ SCM found = scm_assoc (ly_str02scm (s.ch_C()), c);
+ if (found == SCM_BOOL_F)
+ return false;
- SCM glyph = gh_cadr (entry);
- SCM pos = gh_caddr (entry);
-
- clef_type_str_ = ly_scm2string (glyph);
+ clef_glyph_ = gh_cadr (found);
+ SCM pos = gh_caddr (found);
+
clef_position_i_ = gh_scm2int (pos);
- found = true;
- break;
- }
-
- if (!found)
- {
- switch(toupper (s[0]))
- {
- case 'F':
- clef_type_str_ = "bass";
- break;
- case 'G':
- clef_type_str_ = "treble";
- break;
- case 'C':
- clef_type_str_ = "alto";
- break;
- default:
- return false;
- }
- clef_position_i_ = 2 * (s[1] - '0') - 6;
+
+ found = scm_assoc (clef_glyph_, p);
+ if (found == SCM_BOOL_F)
+ return false;
+
+ c0_position_i_ = clef_position_i_ + gh_scm2int (gh_cdr (found));
}
- if (clef_type_str_ == "treble")
- c0_position_i_ = clef_position_i_ - 4;
- else if (clef_type_str_ == "alto")
- c0_position_i_ = clef_position_i_;
- else if (clef_type_str_ == "bass")
- c0_position_i_ = clef_position_i_ + 4;
- else
- assert (false);
-
c0_position_i_ -= (int) octave_dir_ * 7;
-
return true;
}
Clef_engraver::acknowledge_element (Score_element_info info)
{
if (dynamic_cast<Bar*>(info.elem_l_)
- && clef_type_str_.length_i())
- {
- bool default_clef = !clef_p_;
- create_clef();
- if(!default_clef)
- clef_p_->set_elt_property("visibility-lambda",
- ly_eval_str ("all-visibility"));
- }
+ && gh_string_p (clef_glyph_))
+ create_clef();
/* ugh; should make Clef_referenced baseclass */
Item * it_l =dynamic_cast <Item *> (info.elem_l_);
if (it_l)
{
- if (Note_head * h = dynamic_cast<Note_head*>(it_l))
+ if (dynamic_cast<Note_head*>(it_l)
+ || dynamic_cast<Local_key_item*> (it_l)
+ )
+
{
- Staff_symbol_referencer_interface si (h);
+ Staff_symbol_referencer_interface si (it_l);
si.set_position (int (si.position_f ()) + c0_position_i_);
}
- else if (Local_key_item *i = dynamic_cast<Local_key_item*> (it_l))
- {
- i->c0_position_i_ =c0_position_i_;
- }
else if (Key_item *k = dynamic_cast<Key_item*>(it_l))
{
k-> set_c_position (c0_position_i_);
void
Clef_engraver::do_creation_processing()
{
- create_default_b_ = true; // should read property.
- SCM def = get_property ("createInitdefaultClef", 0);
+ SCM def = get_property ("defaultClef", 0);
if (gh_string_p (def))
- set_type (ly_scm2string (def));
-
- if (clef_type_str_.length_i ())
- {
- create_clef();
+ {
+ set_type (ly_scm2string (def));
+ create_clef ();
clef_p_->set_elt_property ("non-default", SCM_BOOL_T);
}
}
clef_p_ = c;
}
Staff_symbol_referencer_interface si(clef_p_);
- clef_p_->symbol_ = clef_type_str_;
+ clef_p_->set_elt_property ("glyph", clef_glyph_);
si.set_position (clef_position_i_);
if (octave_dir_)
{
if (clef_req_l_)
{
create_clef();
- }
- else if (create_default_b_)
- {
- SCM type = get_property ("defaultClef", 0);
- if (gh_string_p (type))
- set_type (ly_scm2string (type));
- else
- set_type ( "treble");
- create_clef ();
- create_default_b_ = false;
+ clef_p_->set_elt_property ("non-default", SCM_BOOL_T);
}
}
{
if (clef_p_)
{
+ if(to_boolean (clef_p_->remove_elt_property("non-default")))
+ clef_p_->set_elt_property("visibility-lambda",
+ ly_eval_str ("all-visibility"));
+
typeset_element (clef_p_);
clef_p_ =0;
}
- create_default_b_ = false;
}
void
clef_req_l_ = 0;
}
-void
-Clef_engraver::do_removal_processing()
-{
- assert (!clef_p_);
-}
String style;
if (gh_string_p (style_sym))
style = ly_scm2string (style_sym);
-
- if (break_status_dir() != RIGHT && style != "fullSizeChanges")
- symbol_ += "_change";
+
+ SCM glyph = get_elt_property ("glyph");
+ if (gh_string_p (glyph))
+ {
+ String s = ly_scm2string (glyph);
+
+ if (break_status_dir() != RIGHT && style != "fullSizeChanges")
+ {
+ s += "_change";
+ }
+ s = "clefs-" + s;
+ set_elt_property ("glyph", ly_str02scm (s.ch_C()));
+ }
if (style == "transparent") // UGH. JUNKME
{
}
}
-/*
- JUNKME
-*/
-Clef_item::Clef_item()
-{
- symbol_ = "treble";
-}
void
Clef_item::do_add_processing ()
pscore_l_->typeset_element (g);
- g->text_str_ = "8";
+ g->set_elt_property ("text", ly_str02scm ( "8"));
g->set_elt_property ("style", gh_str02scm ("italic"));
g->set_parent (this, Y_AXIS);
g->set_parent (this, X_AXIS);
}
}
-Molecule*
-Clef_item::do_brew_molecule_p() const
-{
- Molecule*output = new Molecule (lookup_l ()->afm_find (String ("clefs-" + symbol_)));
-
- return output;
-}
-
-
-
Crescendo::Crescendo ()
{
- grow_dir_ =0;
- dyn_b_drul_[LEFT] = dyn_b_drul_[RIGHT] =false;
+ set_elt_property ("dynamic-drul", gh_cons (SCM_BOOL_F, SCM_BOOL_F));
}
Real absdyn_dim = paper_l ()-> get_var ("crescendo_shorten");
Real extra_left = get_broken_left_end_align ();
- if (dyn_b_drul_[LEFT])
+ SCM dir = get_elt_property("grow-dir");
+ SCM dyns = get_elt_property ("dynamic-drul");
+
+ if (!isdir_b (dir) || !gh_pair_p (dyns))
+ {
+ set_elt_property ("transparent", SCM_BOOL_T);
+ return new Molecule;
+ }
+
+ Direction gd = to_dir (dir);
+
+ bool dynleft= to_boolean (gh_car (dyns));
+ bool dynright = to_boolean (gh_cdr (dyns));
+
+ if (dynleft)
extra_left += absdyn_dim;
Real width = spanner_length()- get_broken_left_end_align ();
- if (dyn_b_drul_[LEFT])
+ if (dynleft)
{
width -= absdyn_dim;
}
- if (dyn_b_drul_[RIGHT])
+ if (dynright)
{
width -= absdyn_dim;
}
} while (flip (&d) != LEFT);
- bool continued = broken[Direction (-grow_dir_)];
+ bool continued = broken[Direction (-gd)];
Real height = paper_l()->get_var ("crescendo_height");
Real thick = paper_l ()->get_var ("crescendo_thickness");
- const char* hairpin = (grow_dir_ < 0)? "decrescendo" : "crescendo";
+ const char* hairpin = (gd < 0)? "decrescendo" : "crescendo";
Atom at (gh_list (ly_symbol2scm (hairpin),
gh_double2scm (thick),
gh_double2scm (width),
for (int d = dots_i_; d; d--)
{
- delta /= 2.0;
+ delta /= Moment (2);
mom += delta;
}
String loud = absd->text_str_;
text_p_ = new Text_item;
- text_p_->text_str_ = loud; // ugh
+ text_p_->set_elt_property ("text",
+ ly_str02scm (loud.ch_C()));
text_p_->set_elt_property ("style", gh_str02scm ("dynamic"));
text_p_->set_elt_property ("script-priority",
gh_int2scm (100));
cresc_req_l_ = span_l;
assert (!new_cresc_p);
new_cresc_p = new Crescendo;
- new_cresc_p->grow_dir_ = (span_l->span_type_str_ == "crescendo") ? BIGGER : SMALLER;
+ new_cresc_p
+ ->set_elt_property ("grow-direction",
+ gh_int2scm ((span_l->span_type_str_ == "crescendo") ? BIGGER : SMALLER));
+
new_cresc_p->set_elt_property ("staff-support", SCM_BOOL_T);
if (text_p_)
{
- cresc_p_->dyn_b_drul_[LEFT] = true;
+ index_set_cell (cresc_p_->get_elt_property ("dynamic-drul"),
+ LEFT, SCM_BOOL_T);
if (to_end_cresc_p_)
- to_end_cresc_p_->dyn_b_drul_[RIGHT] = true;
+ index_set_cell (to_end_cresc_p_->get_elt_property ("dynamic-drul"),
+ RIGHT, SCM_BOOL_T);
}
}
}
Engraver_group_engraver::get_staff_info() const
{
Staff_info inf = Engraver::get_staff_info();
-
- for (Cons<Translator> *p = trans_p_list_.head_; p; p = p->next_)
- {
- if (!dynamic_cast <Engraver_group_engraver *> (p->car_))
- {
- Engraver * eng = dynamic_cast<Engraver*> (p->car_);
- if (eng)
- eng->fill_staff_info (inf);
- }
- }
return inf;
}
{
if (m > final_mom_)
return;
+
+ if (m < now_mom_ )
+ programming_error ("Trying to freeze in time.");
for (int i=0; i < extra_mom_pq_.size(); i++)
if (extra_mom_pq_[i] == m)
(c) 1997--1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
*/
+#include <math.h> // rint
#include "gourlay-breaking.hh"
#include "column-x-positions.hh"
optimal_paths[break_idx].line_i_ = optimal_paths[prev].line_i_ + 1;
if (! (break_idx % HAPPY_DOTS_I))
- *mlog << "[" << break_idx << "]" << flush;
+ progress_indication (String ("[") + to_str (break_idx) + "]");
}
/* do the last one */
- if (break_idx % HAPPY_DOTS_I)
- *mlog << "[" << break_idx << "]";
+ if (break_idx % HAPPY_DOTS_I)
+ progress_indication (String ("[") + to_str (break_idx) + "]");
- *mlog << endl;
+
+ progress_indication ("\n");
Array<int> final_breaks;
Array<Column_x_positions> lines;
}
else if (Note_head * n = dynamic_cast <Note_head*> (i.elem_l_))
{
- if (n->get_elt_property ("grace") == SCM_UNDEFINED)
+ if (!to_boolean (n->get_elt_property ("grace")))
support_.push (n);
}
else if (Local_key_item*it = dynamic_cast<Local_key_item*>(i.elem_l_))
{
- if (it->get_elt_property ("grace") == SCM_UNDEFINED)
+ if (!to_boolean (it->get_elt_property ("grace")))
support_.push (it);
else if (align_l_)
it->add_dependency (align_l_);
char_count_stack_.push (0);
if (yy_current_buffer)
state_stack_.push (yy_current_buffer);
- *mlog << "[" << s<< flush;
+ progress_indication (String ("[") + s);
+
include_stack_.push (sl);
/*
char_count_stack_.push (0);
if (yy_current_buffer)
state_stack_.push (yy_current_buffer);
- *mlog << "[" << name << flush;
+ progress_indication (String ("[") + name);
include_stack_.push (file);
yy_switch_to_buffer (yy_create_buffer (file->istream_l (), YY_BUF_SIZE));
{
include_stack_.pop ();
char_count_stack_.pop ();
- *mlog << "]"<<flush;
+ progress_indication ("]");
yy_delete_buffer (yy_current_buffer);
yy_current_buffer = 0;
if (state_stack_.empty ())
#include "audio-element.hh"
struct Audio_staff : public Audio_element {
- void add_audio_item (Audio_item* l);
- void output (Midi_stream& midi_stream_r, int track_i);
+ void add_audio_item (Audio_item* l);
+ void output (Midi_stream& midi_stream_r, int track_i);
- Link_array<Audio_item> audio_item_l_arr_;
+ Link_array<Audio_item> audio_item_l_arr_;
};
#endif // AUDIO_STAFF_HH
Protected_scm visibility_lambda_;
String type_;
Axis axis_;
- bool hang_on_clef_b_;
+
protected:
/**
Put the script on #it#
*/
class Bar:public Item {
public:
- String type_str_;
VIRTUAL_COPY_CONS(Score_element);
- Bar ();
-
+ Bar();
protected:
virtual void do_pre_processing ();
virtual Molecule* do_brew_molecule_p () const;
virtual Real get_bar_size () const;
-
-private:
- void do_print () const;
};
#endif // BAR_HH
Real alpha_;
Offset origin_;
public:
- Bezier_bow (Paper_def* paper_l, Array<Offset> points, Direction dir);
+ Real rc_factor_,
+ height_limit_,
+ ratio_;
+
+
+ Bezier_bow (Array<Offset> points, Direction dir);
+ void calculate ();
Bezier get_curve () const;
};
#ifndef BREAK_HH
#define BREAK_HH
+
#include "array.hh"
#include "interval.hh"
#include "lily-proto.hh"
/** Class representation of an algorithm which decides where to put
the column, and where to break lines.
- TODO: A "parindent", caching of breakpoints
-
*/
class Break_algorithm {
protected:
-
Paper_score *pscore_l_;
Real linewidth_f_;
virtual void do_set_pscore();
public:
-
Simple_spacer* (*get_line_spacer)();
-
Break_algorithm();
void set_pscore (Paper_score*);
+++ /dev/null
-/*
- clef-engraver.hh -- declare Clef_engraver
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1996, 1997--1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
-*/
-
-
-#ifndef CLEF_GRAV_HH
-#define CLEF_GRAV_HH
-
-#include "array.hh"
-#include "engraver.hh"
-#include "direction.hh"
-
-/// where is c-0 in the staff?
-class Clef_engraver : public Engraver {
- Clef_item * clef_p_;
- Clef_change_req * clef_req_l_;
- void create_clef();
- bool set_type (String);
-protected:
- virtual void do_process_requests();
- virtual void do_pre_move_processing();
- virtual void do_removal_processing();
- virtual void do_creation_processing();
- virtual void do_post_move_processing();
- virtual bool do_try_music (Music*);
- virtual void acknowledge_element (Score_element_info);
-public:
- VIRTUAL_COPY_CONS(Translator);
- int c0_position_i_;
- int clef_position_i_;
- Direction octave_dir_;
- String clef_type_str_;
- bool create_default_b_;
-
- Clef_engraver();
-
-
-};
-#endif
{
protected:
virtual void do_pre_processing();
- virtual Molecule* do_brew_molecule_p() const;
virtual void do_add_processing ();
public:
- String symbol_;
-
VIRTUAL_COPY_CONS(Score_element);
- Clef_item();
};
#endif // CLEFITEM_HH
*/
class Crescendo : public Spanner {
public:
- int grow_dir_;
-
- /// if there is a dynamic at the end, make the sign smaller.
- Drul_array<bool> dyn_b_drul_;
-
Crescendo();
protected:
VIRTUAL_COPY_CONS(Score_element);
#define DEBUG_HH
#include <assert.h>
-#include <iostream.h>
#include "dstream.hh"
#include "real.hh"
#include "lily-proto.hh"
#include "flower-debug.hh"
#include "warn.hh"
-// progress
-extern ostream *mlog;
-
+void progress_indication (String);
#endif
bool natural_b_;
Local_key_cautionary_tuple ()
- {
- cautionary_b_ = false;
- natural_b_ = false;
- }
+ {
+ cautionary_b_ = false;
+ natural_b_ = false;
+ }
static int compare (Local_key_cautionary_tuple const&s1, Local_key_cautionary_tuple const&s2)
- {
- return Musical_pitch::compare (s1.pitch_, s2.pitch_);
- }
+ {
+ return Musical_pitch::compare (s1.pitch_, s2.pitch_);
+ }
};
/**
Molecule accidental (int,bool,bool) const;
public:
- int c0_position_i_;
Local_key_item ();
void add_pitch (Musical_pitch, bool cautionary, bool natural);
protected:
virtual Direction get_default_dir () const;
virtual void do_post_processing ();
virtual void do_add_processing ();
- virtual void do_pre_processing ();
Array<Rod> get_rods () const;
};
class Text_item : public Item
{
public:
- // junkme.
- String text_str_;
-
VIRTUAL_COPY_CONS (Score_element);
protected:
- virtual void do_print () const;
virtual Molecule *do_brew_molecule_p () const;
};
void add_column (Note_column*);
void add_beam (Beam*);
-
- /*
- JUNKME.
- */
- String number_str_;
-
- bool parallel_beam_b_;
-
protected:
virtual Molecule* do_brew_molecule_p () const;
VIRTUAL_COPY_CONS(Score_element);
void add_column (Note_column*);
void add_bar (Bar*);
- String number_str_;
- bool last_b_;
-
-
protected:
virtual Molecule* do_brew_molecule_p () const;
VIRTUAL_COPY_CONS (Score_element);
return false;
Item * i =dynamic_cast<Item*> (parent_l (X_AXIS));
- return (i) ? i->breakable_b () : get_elt_property( "breakable") != SCM_UNDEFINED;
+ return (i) ? i->breakable_b () : to_boolean (get_elt_property( "breakable"));
}
Real
(c) 1997--1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
*/
-
+// clean me up
#include "key-engraver.hh"
#include "key-item.hh"
#include "command-request.hh"
item_p_->set_elt_property ("break-aligned", SCM_BOOL_T); // ugh
- item_p_->multi_octave_b_ = key_.multi_octave_b_;
+ item_p_->set_elt_property ("multi-octave",
+ gh_bool2scm (key_.multi_octave_b_));
+
announce_element (Score_element_info (item_p_,keyreq_l_));
Key_item::Key_item ()
{
- multi_octave_b_ = false;
set_elt_property ("breakable", SCM_BOOL_T);
set_c_position (0);
}
int
Key_item::calculate_position(int p, int a) const
{
- if (multi_octave_b_)
+ if (to_boolean (get_elt_property ("multi-octave")))
{
return p + c0_position_;
}
String
ly_symbol2string (SCM s)
{
+ assert (gh_symbol_p (s));
return String((Byte*)SCM_CHARS (s), (int) SCM_LENGTH(s));
}
error (e);
}
else
- *mlog << '[' << s;
+ progress_indication ("[" + s);
Simple_file_storage f(s);
ly_eval_str ((char *) f.ch_C());
- *mlog << "]" << flush;
+ progress_indication ("]");
}
error (e);
}
else
- *mlog << '[' << s;
+ progress_indication ("[" + s );
Simple_file_storage f(s);
SCM result = ly_str02scm (f.ch_C());
- *mlog << "]";
+ progress_indication ("]");
return result;
}
String
ly_scm2string (SCM s)
{
+ assert (gh_string_p (s));
int len;
char * p = gh_scm2newstr (s , &len);
// urg
*r = gh_number_p (s) ? gh_scm2double (s) : 0;
}
-
bool
to_boolean (SCM s)
{
return gh_boolean_p (s) && gh_scm2bool (s);
}
+
+/*
+ Appendable list L: the cdr contains the list, the car the last cons
+ in the list.
+
+ */
+
+SCM
+appendable_list ()
+{
+ SCM s = gh_cons (SCM_EOL, SCM_EOL);
+ gh_set_car_x (s, s);
+
+ return s;
+}
+
+void
+appendable_list_append (SCM l, SCM elt)
+{
+ SCM newcons = gh_cons (elt, SCM_EOL);
+
+ gh_set_cdr_x (gh_car (l), newcons);
+ gh_set_car_x (l, newcons);
+}
{
Line_of_score *line_l = dynamic_cast<Line_of_score*> (broken_into_l_arr_[i]);
- *mlog << '[' << flush;
+ progress_indication ("[");
line_l->post_processing ();
- *mlog << i << flush;
+ progress_indication (to_str (i));
line_l->output_line (i + 1 == broken_into_l_arr_.size ());
- *mlog << ']' << flush;
+ progress_indication ("]");
}
}
(c) 1997--1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
*/
+// clean up!
#include "musical-request.hh"
#include "command-request.hh"
SCM wg= get_property ("weAreGraceContext", 0);
bool selfgr = gh_boolean_p (wg) &&gh_scm2bool (wg);
- bool he_gr = info.elem_l_->get_elt_property ("grace") != SCM_UNDEFINED;
+ bool he_gr = to_boolean (info.elem_l_->get_elt_property ("grace"));
Grace_align_item * gai = dynamic_cast<Grace_align_item*> (info.elem_l_);
if (he_gr && !selfgr && gai)
Local_key_item::Local_key_item ()
{
- c0_position_i_ = 0;
}
void
}
lastoct = p.octave_i_;
- Real dy =
- (c0_position_i_ + p.notename_i_)
+
+ SCM c0 = get_elt_property ("c0-position");
+ Real dy = (gh_number_p (c0) ? gh_scm2int (c0) : 0 + p.notename_i_)
* note_distance;
Molecule m (accidental (p.accidental_i_,
if (req_l_)
{
text_p_= new Text_item;
- text_p_->text_str_ = req_l_->text_str_;
- text_p_->text_str_ += " "; // ugh.
-
- text_p_->set_elt_property ("non-rhythmic", SCM_BOOL_T);
+ text_p_->set_elt_property ("text",
+ ly_str02scm ((req_l_->text_str_ + " ").ch_C ()));
+ text_p_->set_elt_property ("non-rhythmic", SCM_BOOL_T);
announce_element (Score_element_info (text_p_, req_l_));
}
}
#include "all-font-metrics.hh"
#include "proto.hh"
-#include "dimensions.hh"
#include "getopt-long.hh"
#include "misc.hh"
#include "string.hh"
break;
case 't':
experimental_features_global_b = true;
- *mlog << "*** enabling experimental features, you're on your own now ***\n";
+ progress_indication ("*** enabling experimental features, you're on your own now ***\n");
break;
case 'o':
outname_str_global = oparser_global_p->optional_argument_ch_C_;
if (mark_req_l_)
{
create_items (mark_req_l_);
- text_p_->text_str_ = mark_req_l_->str_;
- SCM st = ly_str02scm ((text_p_->text_str_.index_any_i ("0123456789") >= 0 )
+
+ String t = mark_req_l_->str_;
+ text_p_->set_elt_property ("text",
+ ly_str02scm ( t.ch_C()));
+ SCM st = ly_str02scm ((t.index_any_i ("0123456789") >= 0 )
? "mark" : "large");
text_p_->set_elt_property ("style", st);
}
{
if (include_stack_.empty())
{
- *mlog << _f ("error at EOF: %s", s) << endl;
+ progress_indication (_f ("error at EOF: %s", s)+ String ("\n"));
}
else
{
init_str_ = init;
lexer_p_->main_input_str_ = s;
- *mlog << _ ("Parsing...");
+ progress_indication (_("Parsing..."));
init_parse_b_ = false;
set_yydebug (flower_dstream &&!flower_dstream->silent_b ("Parser"));
(c) 1997--1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
*/
+#include <math.h> // ceil
+
+
#include "dot-column.hh"
#include "note-column.hh"
#include "beam.hh"
Should lookup
rest -> stem -> beam -> interpolate_y_position ()
-
*/
void
if (s.length_i())
{
Text_item * t = new Text_item;
- t->text_str_ = s;
+ t->set_elt_property ("text", ly_str02scm ( s.ch_C()));
announce_element (Score_element_info (t, req_l_arr_[0]));
texts_.push (t);
}
if (outname != "-")
outname += String (".") + output_global_ch;
- *mlog << _f ("paper output to %s...",
- outname == "-" ? String ("<stdout>") : outname) << endl;
+ progress_indication (_f ("paper output to %s...",
+ outname == "-" ? String ("<stdout>") : outname));
+
target_str_global_array.push (outname);
return new Paper_stream (outname);
{
print ();
- *mlog << _ ("Preprocessing elements...") << " " << flush;
+ progress_indication (_ ("Preprocessing elements...") + " ");
line_l_->breakable_col_processing ();
fixup_refpoints ();
line_l_->pre_processing ();
- *mlog << '\n' << _ ("Calculating column positions...") << " " << flush;
+ progress_indication ("\n" + _ ("Calculating column positions...") + " " );
line_l_->space_processing ();
Array<Column_x_positions> breaking = calc_breaking ();
midi_stream << Midi_header (1, tracks_i, clocks_per_4_i);
output_header_track (midi_stream);
- *mlog << "\n";
- *mlog << _ ("Track ... ");
+ progress_indication ("\n");
+ progress_indication (_ ("Track ... "));
int channel = 1;
for (int i =0; i < audio_staff_l_arr_.size (); i++)
{
- *mlog << '[' << flush;
Audio_staff *s = audio_staff_l_arr_[i];
-
- *mlog << i << flush;
+ progress_indication ("[" + to_str (i)) ;
/*
Aargh, let's hear it for the MIDI standard.
if (channel == 9)
channel++;
s->output (midi_stream, channel++);
- *mlog << ']' << flush;
+ progress_indication ("]");
}
}
}
Midi_stream midi_stream (out);
- *mlog << _f ("MIDI output to %s...", out) << endl;
+ progress_indication ( _f ("MIDI output to %s...", out));
target_str_global_array.push (out);
output (midi_stream);
- *mlog << endl;
+ progress_indication("\n");
}
if (val != SCM_UNDEFINED
&& gh_apply (type_p, scm_listify (val, SCM_UNDEFINED))
== SCM_BOOL_T)
- e->set_elt_property (ly_scm2string (elt_prop_name), val);
+ e->set_elt_property (ly_symbol2string (elt_prop_name), val);
}
}
/**
Walk through repeat music, and generate events for appropriate times.
+
+ UGH. Should use Music_iteration for this.
*/
void
Repeat_engraver::queue_events ()
assert (!volta_span_p_);
volta_span_p_ = new Volta_spanner;
announce_element (Score_element_info (volta_span_p_,0));
- volta_span_p_->number_str_ = t;
- volta_span_p_->last_b_ = head->car_->last_b_;
+ volta_span_p_->set_elt_property ("text",
+ ly_str02scm (t.ch_C()));
+ volta_span_p_->set_elt_property ("last-volta",
+ gh_bool2scm (head->car_->last_b_));
// voltaSpannerDuration stuff here.
// other property stuff here.
}
(c) 1997--1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
*/
+#include <math.h> // ceil.
+
#include "beam.hh"
#include "debug.hh"
#include "rest-collision.hh"
end slurs starting on grace notes
*/
- if (s->get_elt_property ("grace") != SCM_UNDEFINED)
+ if (to_boolean (s->get_elt_property ("grace")))
grace_slur_endings_.push (s);
}
}
+++ /dev/null
-/*
- score-column.cc -- implement Paper_column
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997--1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
-*/
Molecule*
Score_element::do_brew_molecule_p() const
{
- Interval emp;
- emp.set_empty ();
- Molecule a (lookup_l ()->fill (Box (emp,emp)));
- return new Molecule (a);
+ SCM glyph = get_elt_property ("glyph");
+ if (gh_string_p (glyph))
+ {
+ Molecule*output = new Molecule (lookup_l ()->afm_find (String (ly_scm2string (glyph))));
+
+ return output;
+ }
+ else
+ {
+ Interval emp;
+ emp.set_empty ();
+ Molecule a (lookup_l ()->fill (Box (emp,emp)));
+ return new Molecule (a);
+ }
}
Score_element::common_refpoint (Score_element const* s, Axis a) const
{
Dimension_cache *dim = dim_cache_[a]->common_refpoint (s->dim_cache_[a]);
- if (!dim)
- programming_error ("No common reference point");
return dim ? dim->element_l () : 0;
}
Score_engraver::finish()
{
if ((breaks_i_%8))
- *mlog << "[" << breaks_i_ << "]" << flush;
+ progress_indication ("[" + to_str ( breaks_i_) + "]");
check_removal();
removal_processing();
if (!item_p->parent_l (X_AXIS))
{
- bool br = (item_p->remove_elt_property ("breakable") != SCM_UNDEFINED);
+ bool br = to_boolean (item_p->remove_elt_property ("breakable"));
if (br)
command_column_l_->add_element(item_p);
else
void
Score_engraver::do_pre_move_processing()
{
- if (command_column_l_->get_elt_property ("breakable") != SCM_UNDEFINED)
+ if (to_boolean (command_column_l_->get_elt_property ("breakable")))
{
breaks_i_ ++;
if (! (breaks_i_%8))
- *mlog << "[" << breaks_i_ << "]" << flush;
+ progress_indication ("[" + to_str ( breaks_i_) + "]");
}
// this generates all items.
Engraver_group_engraver::do_pre_move_processing();
}
}
-
Staff_info
Score_engraver::get_staff_info() const
{
return inf;
}
-
Music_output*
Score_engraver::get_output_p ()
{
SCM pen = command_column_l_->get_elt_property ("penalty");
- Real total_penalty = (pen == SCM_UNDEFINED)
- ? 0.0
- : gh_scm2double(pen); // ugh. Should typecheck.
+ Real total_penalty = gh_number_p (pen)
+ ? gh_scm2double(pen)
+ : 0.0;
total_penalty += b->penalty_f_;
if (b->penalty_f_ > 10000.0) // ugh. arbitrary.
non_fatal_error (_("no toplevel translator"));
return ;
}
- *mlog << '\n' << _("Interpreting music...") << flush;
+ progress_indication ("\n" + _("Interpreting music..."));
trans_p->final_mom_ = music_p_->length_mom ();
Music_output * output = trans_p->get_output_p();
delete trans_p;
- *mlog << endl << _f ("elapsed time: %.2f seconds", timer.read ()) << flush;
+ progress_indication (_f ("elapsed time: %.2f seconds", timer.read ()));
output->header_l_ = header_p_;
output->origin_str_ = location_str();
- *mlog << endl;
+ progress_indication ("\n");
output->process();
delete output ;
}
Script_column::add_staff_sided (Item *i)
{
SCM p = i->get_elt_property ("script-priority");
- if (p == SCM_UNDEFINED)
+ if (!gh_number_p (p))
return;
Script::get_molecule(Direction d) const
{
SCM s = get_elt_property ("molecule");
- assert (s != SCM_UNDEFINED);
+ assert (gh_pair_p (s));
SCM key = gh_car (s);
if (key == ly_symbol2scm ("feta"))
(c) 1998--1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
*/
+#include <math.h> // ceil.
#include "side-position-interface.hh"
#include "staff-symbol.hh"
set_bounds (RIGHT, encompass_arr.top ());
}
-void
-Slur::do_pre_processing ()
-{
- // don't set directions
-}
Offset
void
Spacing_engraver::acknowledge_element (Score_element_info i)
{
- if (i.elem_l_->get_elt_property ("grace") != SCM_UNDEFINED)
+ if (to_boolean (i.elem_l_->get_elt_property ("grace")))
return;
- if (i.elem_l_->get_elt_property ("non-rhythmic") != SCM_UNDEFINED)
+ if (to_boolean (i.elem_l_->get_elt_property ("non-rhythmic")))
return;
if (Rhythmic_req * r = dynamic_cast<Rhythmic_req*>(i.req_l_))
*/
if (lc->musical_b () && rc->musical_b ())
{
- if (rc->get_elt_property ("contains-grace") == SCM_UNDEFINED)
+ if (!to_boolean (rc->get_elt_property ("contains-grace")))
right_dist *= paper_l ()->get_var ("musical_to_musical_left_spacing_factor");
}
- if (rc->musical_b () && rc->get_elt_property ("contains-grace") != SCM_UNDEFINED)
+ if (rc->musical_b () && to_boolean (rc->get_elt_property ("contains-grace")))
right_dist *= paper_l ()->get_var ("before_grace_spacing_factor");
Span_bar::width_callback (Dimension_cache const * c)
{
Span_bar* s= dynamic_cast<Span_bar*> (c->element_l ());
- Molecule m = s->lookup_l ()->bar (s->type_str_, 40 PT, s->paper_l ());
+ String gl = ly_scm2string (s->get_elt_property ("glyph"));
+
+ Molecule m = s->lookup_l ()->bar (gl, 40 PT, s->paper_l ());
return m.extent (X_AXIS);
}
set_empty (X_AXIS);
set_empty (Y_AXIS);
}
- if (type_str_.empty_b ())
+
+ SCM gl = get_elt_property ("glyph");
+ if (!gh_string_p (gl))
{
set_elt_property ("transparent", SCM_BOOL_T);
set_empty (X_AXIS);
set_empty (Y_AXIS);
}
- else if (type_str_ == "|:")
+ else {
+ String type_str = ly_scm2string (gl);
+ if (type_str == "|:")
{
- type_str_ = ".|";
+ type_str= ".|";
}
- else if (type_str_ == ":|")
+ else if (type_str== ":|")
{
- type_str_ = "|.";
+ type_str= "|.";
}
- else if (type_str_ == ":|:")
+ else if (type_str== ":|:")
{
- type_str_ = ".|.";
+ type_str= ".|.";
}
+ }
}
Interval
{
Interval iv (get_spanned_interval ());
Molecule*output = new Molecule;
- if (!iv.empty_b())
+ SCM s = get_elt_property ("glyph");
+ if (gh_string_p (s) && !iv.empty_b())
{
- output->add_molecule (lookup_l ()->bar (type_str_, iv.length (), paper_l ()));
+ output->add_molecule (lookup_l ()->bar (ly_scm2string (s),
+ iv.length (),
+ paper_l ()));
}
else
{
Span_bar::Span_bar ()
{
- type_str_ = "";
dim_cache_[X_AXIS]->set_callback (width_callback);
dim_cache_[Y_AXIS]->set_callback (height_callback);
}
Span_score_bar_engraver::get_span_bar_p () const
{
Span_bar*s = new Span_bar;
- s->type_str_ = "scorebar";
+ s->set_elt_property ("glyph", gh_str02scm ("scorebar"));
s->set_elt_property ("break-aligned",SCM_BOOL_T);
return s;
{
Span_bar *s= new Span_bar;
s->set_empty (X_AXIS);
- s->type_str_ = "brace";
+ s->set_elt_property ("glyph", gh_str02scm ("brace"));
return s;
}
{
Span_bar *s= new Span_bar;
s->set_empty (X_AXIS);
- s->type_str_ = "bracket";
+ s->set_elt_property ("glyph", gh_str02scm ("bracket"));
return s;
}
Base_span_bar_engraver::acknowledge_element (i);
if (Span_bar * b = dynamic_cast<Span_bar *> (i.elem_l_))
{
- if (b->type_str_ == "brace")
+ SCM gl = b->get_elt_property ("glyph");
+ if (gh_string_p (gl) && ly_scm2string (gl) == "brace")
b->translate_axis ( -paper_l ()->get_var ("interline"),
X_AXIS); // ugh
}
if (gh_string_p (long_name))
{
create_items (0);
- text_p_->text_str_ = ly_scm2string (long_name);
+ text_p_->set_elt_property ("text", long_name);
text_p_->set_elt_property ("direction", gh_int2scm (LEFT));
Bar_script_engraver::attach_script_to_item (i);
TODO: This is way too hairy
*/
+#include <math.h> // m_pi
+
#include "directional-element-interface.hh"
#include "dimension-cache.hh"
#include "stem.hh"
Real
Stem::get_default_stem_end_position () const
{
- bool grace_b = get_elt_property ("grace") != SCM_UNDEFINED;
+ bool grace_b = to_boolean (get_elt_property ("grace"));
String type_str = grace_b ? "grace-" : "";
SCM s;
Array<Real> a;
{
String style;
SCM st = get_elt_property ("flag-style");
- if ( st != SCM_UNDEFINED)
+ if ( gh_string_p (st))
{
style = ly_scm2string (st);
}
Stem * s = dynamic_cast<Stem*> (c->element_l ());
Interval r (0, 0);
- if (s->get_elt_property ("beam") != SCM_UNDEFINED || abs (s->flag_i ()) <= 2)
+ if (unsmob_element (s->get_elt_property ("beam")) || abs (s->flag_i ()) <= 2)
; // TODO!
else
{
if (r->get_direction ())
stafy.set_direction (r->get_direction ());
- text->text_str_ = r->text_str_;
+ text->set_elt_property ("text",
+ ly_str02scm ( r->text_str_.ch_C ()));
if (r->style_str_.length_i ())
text->set_elt_property ("style", ly_str02scm (r->style_str_.ch_C()));
{
SCM style = get_elt_property ("style");
String st = gh_string_p (style) ? ly_scm2string (style) : "";
+ SCM txt = get_elt_property ("text");
+ String t = gh_string_p (txt) ? ly_scm2string (txt) : "";
- Molecule a= paper_l ()->lookup_l(0)->text (st, text_str_, paper_l ());
+ Molecule a= paper_l ()->lookup_l(0)->text (st, t, paper_l ());
return new Molecule (a);
}
-void
-Text_item::do_print () const
-{
- DEBUG_OUT << "text= " << text_str_;
-}
Getting scared a bit by score-element's comment:
// is this a good idea?
*/
+ // FIXME extremal deprecated
&& (head (d)->get_elt_property ("extremal")
!= SCM_UNDEFINED))
{
{
Moment barleft = (measure_length () - measure_position ());
- if (barleft < Moment (0))
- barleft = 0;
-
- global_l->add_moment_to_process (now_mom () + barleft);
+ if (barleft > Moment (0))
+ global_l->add_moment_to_process (now_mom () + barleft);
}
}
{
Tuplet_spanner* glep = new Tuplet_spanner;
started_span_p_arr_.push (glep);
- glep->number_str_ = to_str (time_scaled_music_arr_[i]->den_i_);
+ glep->set_elt_property ("text",
+ ly_str02scm (to_str (time_scaled_music_arr_[i]->den_i_).ch_C()));
+
glep->set_elt_property("tuplet-visibility",
gh_int2scm (visibility));
if (dir != 0)
void
Tuplet_engraver::acknowledge_element (Score_element_info i)
{
- bool grace= (i.elem_l_->get_elt_property ("grace") != SCM_UNDEFINED);
+ bool grace= to_boolean (i.elem_l_->get_elt_property ("grace"));
SCM wg = get_property ("weAreGraceContext",0);
bool wgb = to_boolean (wg);
if (grace != wgb)
Tuplet_spanner::Tuplet_spanner ()
{
- /*
- -> GUILE
- */
- parallel_beam_b_ = false;
set_elt_property ("beams", SCM_EOL);
set_elt_property ("columns", SCM_EOL);
}
Molecule* mol_p = new Molecule;
// Default behaviour: number always, bracket when no beam!
- bool bracket_visibility = !parallel_beam_b_;
+ bool par_beam = to_boolean (get_elt_property ("parallel-beam"));
+ bool bracket_visibility = !par_beam;
bool number_visibility = true;
SCM visibility_sym =get_elt_property ("tuplet-visibility");
- if (visibility_sym != SCM_UNDEFINED)
+ if (gh_number_p (visibility_sym))
{
/*
ARG. Fixme.
4 show number, and bracket
*/
int value = gh_scm2int ((visibility_sym));
- bracket_visibility = (value == 4 || (value > 1 && !parallel_beam_b_));
+ bracket_visibility = (value == 4 || (value > 1 && !par_beam));
number_visibility = (value > 2 || value == 1 ||
- (value == 2 && !parallel_beam_b_));
+ (value == 2 && !par_beam));
}
if (gh_pair_p (get_elt_property ("columns")))
Real ncw = column_arr.top ()->extent(X_AXIS).length ();
Real w = spanner_length () + ncw;
- Molecule num (lookup_l ()->text ("italic",
- number_str_, paper_l ()));
- num.align_to (X_AXIS, CENTER);
- num.translate_axis (w/2, X_AXIS);
- Real interline = paper_l ()->get_var ("interline");
+
+
+ Real staff_space = paper_l ()->get_var ("interline");
+
Direction dir = directional_element (this).get ();
Real dy = column_arr.top ()->extent (Y_AXIS) [dir]
- - column_arr[0]->extent (Y_AXIS) [dir];
- num.align_to (Y_AXIS, CENTER);
- num.translate_axis (dir * interline, Y_AXIS);
+ - column_arr[0]->extent (Y_AXIS) [dir];
+
+
+ SCM number = get_elt_property ("text");
+ if (gh_string_p (number))
+ {
+
+ Molecule
+ num (lookup_l ()->text ("italic",
+ ly_scm2string (number), paper_l ()));
+ num.align_to (X_AXIS, CENTER);
+ num.translate_axis (w/2, X_AXIS);
+ num.align_to (Y_AXIS, CENTER);
+ num.translate_axis (dir * staff_space, Y_AXIS);
- num.translate_axis (dy/2, Y_AXIS);
-
+ num.translate_axis (dy/2, Y_AXIS);
+
+ mol_p->add_molecule (num);
+ }
+
Real thick = paper_l ()->get_var ("tuplet_thick");
if (bracket_visibility)
{
Real gap = paper_l () -> get_var ("tuplet_spanner_gap");
- mol_p->add_molecule (lookup_l ()->tuplet_bracket (dy, w, thick, gap, interline, dir));
+ mol_p->add_molecule (lookup_l ()->tuplet_bracket (dy, w, thick, gap, staff_space, dir));
}
- if (number_visibility)
- {
- mol_p->add_molecule (num);
- }
- mol_p->translate_axis (dir * interline, Y_AXIS);
+ mol_p->translate_axis (dir * staff_space, Y_AXIS);
}
return mol_p;
}
if (!broken_b ()
&& spanned_drul_[LEFT]->column_l () == beam_l->spanned_drul_[LEFT]->column_l ()
&& spanned_drul_[RIGHT]->column_l () == beam_l->spanned_drul_[RIGHT]->column_l ())
- parallel_beam_b_ = true;
+ set_elt_property ("parallel-beam", SCM_BOOL_T);
}
}
Volta_spanner::Volta_spanner ()
{
- last_b_ = false;
dim_cache_ [Y_AXIS]->set_callback (dim_callback);
set_elt_property ("bars", SCM_EOL);
set_elt_property ("note-columns", SCM_EOL);
}
+/*
+ FIXME: too complicated.
+ */
Molecule*
Volta_spanner::do_brew_molecule_p () const
{
= Group_interface__extract_elements (this, (Score_element*)0, "note-columns");
bool no_vertical_start = false;
- bool no_vertical_end = last_b_;
+ bool no_vertical_end = to_boolean (get_elt_property ("last-volta"));
Spanner *orig_span = dynamic_cast<Spanner*> (original_l_);
if (orig_span && (orig_span->broken_into_l_arr_[0] != (Spanner*)this))
no_vertical_start = true;
if (orig_span && (orig_span->broken_into_l_arr_.top () != (Spanner*)this))
no_vertical_end = true;
- if (bar_arr.top ()->type_str_.length_i () > 1)
+
+#if 0
+ // FIXME
+ if (bar_arr.top ()->get_elt_property (type_str_.length_i () > 1)
no_vertical_end = false;
+#endif
Real staff_space = paper_l ()->get_var ("interline");
Real half_staff_space = staff_space/2;
Molecule volta (lookup_l ()->volta (h, w, t, no_vertical_start, no_vertical_end));
- Molecule num (lookup_l ()->text ("volta", number_str_, paper_l ()));
- Real dy = bar_arr.top ()->extent (Y_AXIS) [UP] >
+ Molecule num (lookup_l ()->text ("volta",
+ ly_scm2string (get_elt_property("text")),
+ paper_l ()));
+ Real dy = bar_arr.top ()->extent (Y_AXIS) [UP] >?
bar_arr[0]->extent (Y_AXIS) [UP];
dy += 2 * h;
+
+ /*
+ CODE DUPLICATION.
+ FIXME (see axis-group-elt, side-pos interface.)
+ */
for (int i = 0; i < note_column_arr.size (); i++)
dy = dy >? note_column_arr[i]->extent (Y_AXIS)[BIGGER];
dy -= h;
void
Volta_spanner::do_post_processing ()
{
-
Link_array<Bar> bar_arr
= Group_interface__extract_elements (this, (Bar*)0, "bars");
translate_axis (bar_arr[0]->extent (Y_AXIS)[UP], Y_AXIS);
translate_axis (get_broken_left_end_align (), X_AXIS);
}
-
-
void
Volta_spanner::add_bar (Bar* c)
#include "input.hh"
ostream &warnout (cerr);
-ostream *mlog (&cerr);
+void
+progress_indication (String s)
+{
+ cerr << s << flush;
+}
breve = \duration { -1 0 }
longa = \duration { -2 0 }
+maxima = \duration { -3 0 }
#(eval-string (ly-gulp-file "generic-property.scm"))
% name, glyph id, c0 position
supportedClefTypes = #'(
- ("treble" "treble" -2)
- ("violin" "treble" -2)
- ("G" "treble" -2)
- ("G2" "treble" -2)
- ("french" "treble" -4 )
- ("soprano" "alto" -4 )
- ("mezzosoprano" "alto" -2 )
- ("alto" "alto" 0 )
- ("tenor" "alto" 2 )
- ("baritone" "alto" 4 )
- ("varbaritone" "bass" 0)
- ("bass" "bass" 2 )
- ("F" "bass" 2)
- ("subbass" "bass" 4)
+ ("treble" . ("G" -2))
+ ("violin" . ("G" -2))
+ ("G" . ("G" -2))
+ ("G2" . ("G" -2))
+ ("french" . ("G" -4 ))
+ ("soprano" . ("C" -4 ))
+ ("mezzosoprano" . ("C" -2 ))
+ ("alto" . ("C" 0 ))
+ ("tenor" . ("C" 2 ))
+ ("baritone" . ("C" 4 ))
+ ("varbaritone" . ("F" 0))
+ ("bass" . ("F" 2 ))
+ ("F" . ( "F" 2))
+ ("subbass" . ("F" 4))
)
-
+ clefPitches = #'(("G" . -4)
+ ("C" . 0)
+ ("F" . 4))
+
\consists "Clef_engraver";
\consists "Key_engraver";
\consists "Time_signature_engraver";
Begin3
Title: LilyPond
-Version: 1.3.17
-Entered-date: 24DEC99
+Version: 1.3.18
+Entered-date: 28DEC99
Description:
Keywords: music notation typesetting midi fonts engraving
Author: hanwen@cs.uu.nl (Han-Wen Nienhuys)
janneke@gnu.org (Jan Nieuwenhuizen)
Maintained-by: hanwen@stack.nl (Han-Wen Nienhuys)
Primary-site: sunsite.unc.edu /pub/Linux/apps/sound/convert
- 1000k lilypond-1.3.17.tar.gz
+ 1000k lilypond-1.3.18.tar.gz
Original-site: ftp.cs.uu.nl /pub/GNU/LilyPond/development/
- 1000k lilypond-1.3.17.tar.gz
+ 1000k lilypond-1.3.18.tar.gz
Copying-policy: GPL
End
Name: lilypond
-Version: 1.3.17
+Version: 1.3.18
Release: 1
Copyright: GPL
Group: Applications/Publishing
-Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.3.17.tar.gz
+Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.3.18.tar.gz
Summary: A program for printing sheet music.
URL: http://www.cs.uu.nl/~hanwen/lilypond
# get Packager from (undocumented?) ~/.rpmmacros!
noteheight#:=interline#+ (1 + overdone_heads) *stafflinethickness#;
define_pixels(noteheight);
+
+
+%%%%%%%%
+%
+%
+%
+% MENSURAL NOTATION
+%
+%
+%
brevis_wid# := 2 interline#;
def draw_brevis(expr brevwid) =
enddef;
+%
+% Some sources (eg Musix/OpusTeX think that the appendage should be on
+% the left, some say right. Right wins democratically.
+%
+def draw_longa (expr wid) =
+ draw_brevis(wid);
+ save theta;
+
+ x7r = head_width;
+ y7 = y5;
+% z7 = z5;
+ z6 - z7 = (stem_width/2, -interline);
+ theta = angle(z6-z7)+ 90;
+ penpos7(stem_width, theta);
+ penpos6(1.2 stem_width, theta);
+
+ fill z7r .. z6r{z6-z7} .. {z7-z6} z6l -- z7l -- cycle;
+ penlabels(6,7);
+enddef;
+
+%
+% En wij presenteren U: de opvolgster van Emily
+%
+% (ze is wel breed)
+%
+fet_beginchar("Maxima notehead", "-3mensural", "mensuralmaximahead");
+ draw_longa (1.3 brevis_wid#)
+fet_endchar;
+
+fet_beginchar("Longa notehead", "-2mensural", "mensurallongahead");
+ draw_longa (brevis_wid#)
+fet_endchar;
+
+fet_beginchar("Brevis notehead", "-1mensural", "mensuralbrevishead")
+ draw_brevis(brevis_wid#);
+fet_endchar;
+
+def draw_mensural_black_head (expr wid) =
+ save head_width;
+ head_width# = wid;
+ set_char_box (0, head_width#, noteheight#/2, noteheight#/2);
+
+
+ y3 = y1 =0;
+ x2 = x4 = (x1 + x3) /2;
+ define_pixels (head_width);
+ pickup pencircle scaled blot_diameter;
+ top y2 = h;
+ bot y4 = -d;
+ lft x1 = 0;
+ rt x3 = w;
+
+ filldraw z1 -- z2 -- z3 -- z4 -- cycle;
+enddef;
+
+def draw_mensural_open_head (expr wid)=
+ draw_mensural_black_head (wid);
+ save diamNW, diamSW;
+ diamNW = length (z2 - z1) + blot_diameter;
+ diamSW = length (z4 - z1) + blot_diameter;
+
+ save hole_widthNW, hole_widthSW;
+ hole_widthNW = 0.34 diamNW ;
+ hole_widthSW + 2.6 stafflinethickness = diamSW;
+
+ (z7 + z5)/2 = (w/2, 0);
+ (z8 + z6)/2 = (w/2, 0);
+ (z6 - z5) = hole_widthNW * unitvector (z2 - z1);
+ (z7 - z6) = hole_widthSW * unitvector (z4 - z1);
+
+ labels (1,2,3,4,5,6,7,8);
+
+ unfill z5 -- z6 -- z7 -- z8 --cycle;
+enddef;
+
+fet_beginchar("Mensural open head","0mensural","mensuralminimhead")
+ draw_mensural_open_head (interline#);
+fet_endchar;
+
+fet_beginchar("Mensural open head","1mensural","mensuralsemiminimhead")
+ draw_mensural_open_head (interline#);
+fet_endchar;
+
+fet_beginchar("Mensural black head","2mensural","fusahead")
+ draw_mensural_black_head (interline#);
+fet_endchar;
+
+
+%%%%%%%%%%%%
+%
+%
+% ledger (leger) lines
+%
fet_beginchar("Ledger ending", "ledgerending", "ledgerending")
set_char_box (5/2 ledgerlinethickness#, 5/2 ledgerlinethickness#,
ledgerlinethickness#/2,ledgerlinethickness#/2);
filldraw z1 --- z2 --- z3 --- z4 --- cycle ;
fet_endchar;
-fet_beginchar("Brevis notehead", "-1", "brevishead")
- draw_brevis(brevis_wid#);
-fet_endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%
+%
%
-% Some sources (eg Musix/OpusTeX think that the appendage should be on
-% the right, my only other ref [Willemze], shows an appendage to the left
%
-fet_beginchar("Longa notehead", "-2", "longahead");
- draw_brevis(brevis_wid#);
- save theta;
- z7 = z5;
- z6 - z7 = (-stem_width/2, -interline);
- theta = angle(z6-z7)+ 90;
- penpos7(stem_width, theta);
- penpos6(1.2 stem_width, theta);
-
- fill z7r .. z6r{z6-z7} .. {z7-z6} z6l -- z7l -- cycle;
- penlabels(6,7);
-fet_endchar;
-
-
% TODO: Document these!
% setup user vars
enddef;
-% whole note
-% Wanske, p.38
-fet_beginchar("Whole notehead", "0", "wholehead")
+def draw_whole_head =
setup_notehead_vars;
a_b:=1.80;
notehead_calc;
whole_notehead_width# := wd#;
notehead_draw;
+enddef;
+
+
+%
+% dimensions aren't entirely right.
+%
+fet_beginchar ("Brevis notehead", "-1", "brevishead");
+ save stemthick, fudge;
+ define_pixels (stemthick);
+ fudge = blot_diameter /2;
+ stemthick# = 2 stafflinethickness#;
+
+ draw_whole_head;
+
+ pickup pencircle scaled stemthick;
+
+ bot y1 = -d;
+ top y2 = h;
+ rt x1 - fudge = 0;
+ x1 = x2;
+
+ fudge + lft x3 = w;
+ x4 = x3;
+ y4 = y2;
+ y3 = y1;
+
+ draw z1 -- z2;
+ draw z3 -- z4;
+fet_endchar;
+
+% whole note
+% Wanske, p.38
+fet_beginchar("Whole notehead", "0", "wholehead")
+ draw_whole_head;
fet_endchar;
black:=black rotated tilt;
black:=black shifted (w/2,0);
fill black;
-
fet_endchar;
fet_beginchar("Crossed notehead", "2cross", "crossedhead")
draw (z1 .. z2) yscaled -1;
fet_endchar
-def draw_harmonic_notehead(expr harmwid) =
- save beamheight, head_width, head_char_width;
- save stemthick;
- save thin, thick;
- save ht;
-
- head_width# = harmwid;
-
- define_pixels(head_width);
-
- head_char_width = 1.54 noteheight;
- head_char_width# := 1.54 ht#;
-
-
- set_char_box(0, head_width#, head_width#/2, head_width#/2);
-
- thin = stafflinethickness - blot_diameter/2;
- thick = 2.2 stafflinethickness - blot_diameter/2;
- penpos1(thick, 45);
- penpos2(thin, 315);
- penpos3(thin, 135);
- penpos4(thick, 55);
- penpos5(thick, 225);
- penpos6(thin, 135);
- penpos7(thin, 315);
- penpos8(thick, 235);
-
-
- pickup pencircle scaled blot_diameter;
-
- lft x1l = 0;
- y1l = 0;
-
- z2l = z1l;
-
- bot y3l = -noteheight/2;
- x3l = head_width/2;
- z4l = z3l;
- rt x5l = head_width;
- y5l = 0;
- z6l = z5l;
-
- top y7l = noteheight/2;
- x7l = (head_width/2);
- z8l = z7l;
-
-
- penlabels(1,2,3,4,5,6,7,8);
- test_grid;
- filldraw z1l -- z2r -- z7r -- z7l -- cycle;
- filldraw z1l -- z1r -- z4r -- z4l -- cycle;
- filldraw z3r -- z3l -- z6l -- z6r -- cycle;
- filldraw z5r -- z5l -- z8l -- z8r -- cycle;
-enddef;
-
-harmonic_wid# := interline#;
-
-fet_beginchar("Harmonic notehead","2harmonic","harmonichead")
- draw_harmonic_notehead(harmonic_wid#)
-fet_endchar;
-
-%fi
fet_endgroup("noteheads");
-
define_pixels(black_notehead_width);
input feta-klef;
input feta-timesig;
else:
-% input feta-bolletjes;
+ input feta-bolletjes;
% input feta-banier;
% input feta-eindelijk;
% input feta-klef;
draw_flare(z7r,180,-90,hair,norm-1/2hair);
enddef;
-fet_beginchar ("C clef", "alto", "altoclef")
+fet_beginchar ("C clef", "C", "altoclef")
if test = 1:
draw_staff (-2,2);
fi;
draw_c_clef (1.0);
fet_endchar;
-fet_beginchar ("C clef", "alto_change", "caltoclef")
+fet_beginchar ("C clef", "C_change", "caltoclef")
if test = 1:
draw_staff (-2,2);
fi;
% [Wanske] says that the extreme x point should be exactly between
% the dots, but her picture shows that the extreme is ~ 0.2 ss lower
-def draw_bass_klef(expr exact_center, reduction) =
+def draw_bass_clef(expr exact_center, reduction) =
save reduced_il, left_tilt, left_thick, ball_to_right;
reduced_il# = interline# * reduction;
-fet_beginchar("F clef ", "bass", "bassclef")
+fet_beginchar("F clef ", "F", "bassclef")
if test = 1:
draw_staff(-3,1);
fi;
- draw_bass_klef((.5 interline#, 0), 1.0);
+ draw_bass_clef((.5 interline#, 0), 1.0);
fet_endchar;
-fet_beginchar("F clef (reduced)", "bass_change", "cbassclef")
- draw_bass_klef((.4 interline#, 0),0.8);
+fet_beginchar("F clef (reduced)", "F_change", "cbassclef")
+ draw_bass_clef((.4 interline#, 0),0.8);
fet_endchar;
% Ikzelf heb bijvoorbeeld over mijn eerste gave G-sleutel
% 35 kilobyte metafont, 12 patchlevels, 0 vriendinnen en 45 dagen gedaan
%
+% -- vrij naar Van Kooten & De Bie
+%
+
def draw_gclef (expr exact_center, reduction)=
save reduced_il, downstroke_dir, downstroke_angle, hair, center;
save breapth_factor, inner_thick_end, thinness, thickness, thinnib;
enddef;
-fet_beginchar("G clef", "treble", "trebleclef")
+fet_beginchar("G clef", "G", "trebleclef")
if test = 1:
draw_staff(-1,3);
fi;
draw_gclef((1.7 interline#,0), 1.0);
fet_endchar;
-fet_beginchar("G clef", "treble_change", "ctrebleclef")
+fet_beginchar("G clef", "G_change", "ctrebleclef")
draw_gclef((1.3 interline#,0), .8);
fet_endchar;
#ifndef MIDI2LY_GLOBAL_HH
#define MIDI2LY_GLOBAL_HH
+#include <iostream.h>
+
#include "string.hh"
#include "proto.hh"
//
// copyright 1997 Jan Nieuwenhuizen <janneke@gnu.org>
+#include <iostream.h>
#include <assert.h>
#include <locale.h>
#include "config.h"
{0, "debug", 'd', _i ("enable debugging output")},
{0, "help", 'h', _i ("this help")},
{_i ("ACC[:MINOR]"), "key", 'k', _i ("set key: ACC +sharps/-flats; :1 minor")},
- {0, "no-silly", 'n', _i ("assume no tuplets or double dots, smallest is 32")},
+ {0, "no-silly", 'n', _i ("don't output tuplets or double dots, smallest is 32")},
{_i ("FILE"), "output", 'o', _i ("set FILE as default output")},
- {0, "no-tuplets", 'p', _i ("assume no tuplets")},
+ {0, "no-tuplets", 'p', _i ("don't output tuplets")},
{0, "quiet", 'q', _i ("be quiet")},
{_i ("DUR"), "smallest", 's', _i ("set smallest duration")},
{0, "no-timestamps", 'T', _i ("don't timestamp the output")},
if (!n)
return "";
- const int c0_pitch = 60;
int p = n->pitch_i_;
if (p < 56)
msgid "(search path: `%s')"
msgstr "(Suchpfad: `%s')"
-#: ineq-constrained-qp.cc:169
-#, c-format
-msgid "Ineq_constrained_qp::solve (): Constraint off by %f"
-msgstr "Ineq_constrained_qp::solve (): Constraint um %f verfehlt"
-
-#: ineq-constrained-qp.cc:233
-msgid "didn't converge!"
-msgstr "Keine Konvergenz!"
-
-#: ineq-constrained-qp.cc:235
-msgid "Too much degeneracy. "
-msgstr "Zu viel Verkommenheit."
#: key-def.cc:31
msgid "No key name: assuming `C'"
--- /dev/null
+# it.po -- GNU LilyPond's french language file
+# Laurent Martelli <laurent@linuxfan.com>, 1998.
+#
+
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: lilypond 1.3.18\n"
+"PO-Revision-Date: 1999-12-28 00:32 +1\n"
+"Last-Translator: Laurent Martelli <laurent@linuxfan.com>\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+
+#: data-file.cc:52
+#, fuzzy
+msgid "EOF in a string"
+msgstr "EOF dans une chaîne"
+
+#: data-file.cc:116 input.cc:86 midi-parser.cc:100 warn.cc:21
+msgid "warning: "
+msgstr "avertissement: "
+
+#: dstream.cc:158
+msgid "Not enough fields in Dstream init."
+msgstr "Pas assez de champs dans l'initialisation de Dstream."
+
+#: flower-debug.cc:17
+msgid "Debug output disabled. Compiled with NPRINT."
+msgstr "Messages de deboggage désactivés. Compilé avec NPRINT."
+
+#: getopt-long.cc:141
+#, c-format
+msgid "option `%s' requires an argument"
+msgstr "l'option `%s' requiert un argument"
+
+#: getopt-long.cc:145
+#, c-format
+msgid "option `%s' doesn't allow an argument"
+msgstr "l'option `%s' n'accepte pas d'argument"
+
+#: getopt-long.cc:149
+#, c-format
+msgid "unrecognized option: `%s'"
+msgstr "option non reconnue: `%s'"
+
+#: getopt-long.cc:151
+#, c-format
+msgid "%c"
+msgstr ""
+
+#: getopt-long.cc:155
+#, c-format
+msgid "invalid argument `%s' to option `%s'"
+msgstr "argument `%s' invalide pour l'option `%s'"
+
+#: text-stream.cc:8
+msgid "<stdin>"
+msgstr ""
+
+#: mapped-file-storage.cc:87 midi-stream.cc:77 mudela-stream.cc:103
+#: paper-stream.cc:25 scores.cc:38 simple-file-storage.cc:44 text-stream.cc:21
+#, c-format
+msgid "can't open file: `%s'"
+msgstr "impossible d'ouvrir le fichier: `%s'"
+
+#: input.cc:91 warn.cc:7 warn.cc:15
+msgid "error: "
+msgstr "erreur: "
+
+#: input.cc:97
+msgid "Non fatal error: "
+msgstr "Erreur non fatale: "
+
+#: input.cc:105 source-file.cc:63 source-file.cc:156
+msgid "position unknown"
+msgstr "position inconnue"
+
+#: mapped-file-storage.cc:65
+msgid "map_fd: "
+msgstr ""
+
+#: mapped-file-storage.cc:74
+msgid "can't map file"
+msgstr "impossible de mapper le fichier"
+
+#: mapped-file-storage.cc:109
+msgid "vm_deallocate: "
+msgstr ""
+
+#: simple-file-storage.cc:56
+#, c-format
+msgid "Huh? got %d, expected %d characters"
+msgstr "Hein? %d caractères reçus, %d attendus"
+
+#: warn.cc:33
+msgid "Programming error: "
+msgstr "Erreur de programmation: "
+
+#: warn.cc:33
+msgid " (continuing; cross thumbs)"
+msgstr " (je continure; croisez les doigts)"
+
+#: afm.cc:129
+#, c-format
+msgid "can't find character called `%s'"
+msgstr "impossible de trouver le caractères appelé `%s'"
+
+#: afm.cc:154
+#, c-format
+msgid "can't find character number %d"
+msgstr "impossible de trouver le caractères numéro %d"
+
+#: all-font-metrics.cc:69
+#, c-format
+msgid "Can't find font `%s', loading default font."
+msgstr "Impossible de trouver la police `%s', chargement la police par défaut"
+
+#: all-font-metrics.cc:74
+#, c-format
+msgid "Can't find default font `%s', giving up."
+msgstr "Impossible de trouver la fonte par défaut `%s', abandon."
+
+#: all-font-metrics.cc:75
+#, c-format
+msgid "search path = %s"
+msgstr "chemin de recherche= %s"
+
+#: beam-engraver.cc:42
+msgid "No Beam to end"
+msgstr "Pas de barre à la fin (No beam to end)"
+
+#: beam-engraver.cc:58
+msgid "No beam to end"
+msgstr "Pas de barre à la fin (No beam to end)"
+
+#: beam-engraver.cc:87
+msgid "Already have a Beam"
+msgstr "Il y a déjà une barre"
+
+#: beam-engraver.cc:149
+msgid "Unfinished beam"
+msgstr "Barre non terminée"
+
+#: beam-engraver.cc:174
+msgid "Stem must have Rhythmic structure."
+msgstr "La tige doit avoir une structure rythmique."
+
+#: beam-engraver.cc:185
+msgid "stem doesn't fit in beam"
+msgstr "la tige ne rentre pas dans la barre"
+
+#: beam-engraver.cc:186
+msgid "beam was started here"
+msgstr "la barre a commencé ici"
+
+#: beam.cc:142
+msgid "beam with less than two stems"
+msgstr "barre avec moins de deux tiges"
+
+#: beam.cc:307
+msgid "weird beam shift, check your knees"
+msgstr "décallage de barre bizarre, check your knees"
+
+#: break-algorithm.cc:25
+msgid "0 lines"
+msgstr "0 ligne"
+
+#: break-algorithm.cc:27
+#, c-format
+msgid "1 line (of %.0f columns)"
+msgstr "1 ligne (de %.0f colonnes)"
+
+#: break-algorithm.cc:29
+#, c-format
+msgid "%d lines (with an average of %.1f columns)"
+msgstr "%d lignes (avec une moyenne de %.f colonnes)"
+
+#: break-algorithm.cc:148
+msgid "score does not have any columns"
+msgstr "la partition n'a aucune colonne"
+
+#: break-algorithm.cc:165
+#, fuzzy, c-format
+msgid "approximated %s"
+msgstr "approximativement %s"
+
+#: break-algorithm.cc:167
+#, fuzzy, c-format
+msgid "calculated %s exactly"
+msgstr "calculé %s exactement"
+
+#: break-algorithm.cc:168
+#, fuzzy, c-format
+msgid "elapsed time %.2f seconds"
+msgstr "temps ecoulé: %.2f secondes"
+
+#: change-iterator.cc:22
+#, c-format
+msgid "can't change `%s' to `%s'"
+msgstr "impossible de changer `%s' en `%s'"
+
+#: chord-tremolo-engraver.cc:41 chord-tremolo-engraver.cc:58
+msgid "No abbreviation beam to end"
+msgstr "Pas de barre d'abréviation à la fin"
+
+#: chord-tremolo-engraver.cc:83
+msgid "Already have an abbreviation beam"
+msgstr "Il y a déjà une barre d'abréviation"
+
+#: chord-tremolo-engraver.cc:124
+msgid "Unfinished abbreviation beam"
+msgstr "Barre d'abréviation non terminée"
+
+#: chord.cc:231
+#, c-format
+msgid "invalid subtraction: not part of chord: %s"
+msgstr "soustraction invalide: ne fait pas partie de l'accord: %s"
+
+#: chord.cc:245
+#, c-format
+msgid "invalid inversion pitch: not part of chord: %s"
+msgstr "renversement invalide: ne fait pas partie de l'accord: %s"
+
+#: clef-engraver.cc:178
+msgid "unknown clef type "
+msgstr "type de clé inconnu"
+
+#: collision.cc:95
+msgid "Too many clashing notecolumns. Ignoring them."
+msgstr "Trop de colonnes de notes superposées. Je les ignore."
+
+#: crescendo.cc:42
+msgid "crescendo"
+msgstr ""
+
+#: crescendo.cc:42
+msgid "too small"
+msgstr "trop petit"
+
+#: debug.cc:56
+msgid "Floating point exception"
+msgstr "Exceptions de virgule flottante"
+
+#: debug.cc:139
+msgid "can't set mem-checking"
+msgstr "impossible de positionner mem-checking"
+
+#: dimensions.cc:13
+msgid "NaN"
+msgstr ""
+
+#: dynamic-engraver.cc:109
+msgid "Got a dynamic already. Continuing dazed and confused"
+msgstr ""
+
+#: dynamic-engraver.cc:162
+msgid "can't find (de)crescendo to end"
+msgstr "ne peut pas trouver un (de)crescendo à la fin"
+
+#: dynamic-engraver.cc:216
+msgid "Too many crescendi here"
+msgstr "Trop de crescendi ici"
+
+#: dynamic-engraver.cc:254
+msgid "unended crescendo"
+msgstr "crescendo non terminé"
+
+#: encompass-info.cc:32
+#, fuzzy
+msgid "Slur over rest?"
+msgstr ""
+
+#: encompass-info.cc:67 stem-info.cc:140
+msgid ""
+"minVerticalAlign != maxVerticalAlign: interstaff beams/slurs may be broken"
+msgstr ""
+
+#: extender-engraver.cc:62
+msgid "unterminated extender"
+msgstr ""
+
+#: folded-repeat-iterator.cc:64
+msgid "No one to print a repeat brace"
+msgstr ""
+
+#: grace-iterator.cc:43
+msgid "No Grace context available!"
+msgstr ""
+
+#: grace-position-engraver.cc:89
+msgid "Unattached grace notes. Attaching to last musical column."
+msgstr ""
+
+#: hyphen-engraver.cc:60
+#, fuzzy
+msgid "unterminated hyphen"
+msgstr ""
+
+#: identifier.cc:46
+msgid "Wrong identifier type: "
+msgstr "Mauvais type d'indentifiant: "
+
+#: identifier.cc:47
+#, c-format
+msgid "%s expected"
+msgstr "%s attendu"
+
+#: includable-lexer.cc:47 midi-score-parser.cc:24 scores.cc:108 scores.cc:114
+#, c-format
+msgid "can't find file: `%s'"
+msgstr "ne peut pas trouver le fichier: `%s'"
+
+#: includable-lexer.cc:48
+#, fuzzy, c-format
+msgid ""
+"\n"
+"Search path is `%s'\n"
+msgstr ""
+
+#: key-def.cc:31
+msgid "No key name: assuming `C'"
+msgstr "Pas de nom de clé: Do assumé"
+
+#: key-def.cc:92
+msgid "don't know how handle empty keys"
+msgstr "ne sait pas traiter les clés vides"
+
+#: lily-guile.cc:84 lily-guile.cc:107
+#, c-format
+msgid "Can not find file `%s'"
+msgstr "Ne peut pas trouver le fichier `%s'"
+
+#: lily-guile.cc:86 lily-guile.cc:109
+#, c-format
+msgid "(Load path is `%s'"
+msgstr ""
+
+#: local-key-engraver.cc:42
+msgid "out of tune"
+msgstr "hors de la tonalité"
+
+#: local-key-engraver.cc:42 time-signature-engraver.cc:28
+msgid "can't find"
+msgstr "pas trouvé"
+
+#: lookup.cc:103
+#, c-format
+msgid "Can't open `%s'\n"
+msgstr "Ne peut pas ouvrir `%s'\n"
+
+#: lookup.cc:104
+#, c-format
+msgid "Search path %s\n"
+msgstr "Chemin de recherche"
+
+#: lookup.cc:105
+msgid "Aborting"
+msgstr "Annulation"
+
+#: lookup.cc:436
+#, c-format
+msgid "Non-matching braces in text `%s', adding braces."
+msgstr ""
+
+#: main.cc:68
+msgid "BASENAME"
+msgstr ""
+
+#: main.cc:68
+msgid "write output to BASENAME[-x].extension"
+msgstr ""
+
+#: main.cc:69 main.cc:101
+#, fuzzy
+msgid "show warranty and copyright"
+msgstr ""
+
+#: main.cc:70 main.cc:92
+msgid "this help"
+msgstr "cette aide"
+
+#: main.cc:71
+#, fuzzy
+msgid "switch on experimental features"
+msgstr ""
+
+#: main.cc:72 main.cc:91
+#, fuzzy
+msgid "enable debugging output"
+msgstr ""
+
+#: main.cc:73 main.cc:95
+msgid "FILE"
+msgstr "FICHIER"
+
+#: main.cc:73
+#, fuzzy
+msgid "use FILE as init file"
+msgstr "utilise FICHIER comme fichier d'initialisation"
+
+#: main.cc:74
+msgid "DIR"
+msgstr "REP"
+
+#: main.cc:74
+#, fuzzy
+msgid "add DIR to search path"
+msgstr "ajoute REP au chemin de recherche"
+
+#: main.cc:75
+#, fuzzy
+msgid "produce midi output only"
+msgstr "produit seulement la sortie MIDI"
+
+#: main.cc:76
+#, fuzzy
+msgid "write Makefile dependencies for every input file"
+msgstr ""
+
+#: main.cc:77 main.cc:99
+#, fuzzy
+msgid "don't timestamp the output"
+msgstr ""
+
+#: main.cc:78
+#, fuzzy
+msgid "show all changes in relative syntax"
+msgstr ""
+
+#: main.cc:79
+#, fuzzy
+msgid "ignore mudela version"
+msgstr ""
+
+#: main.cc:80 main.cc:103
+msgid "print version number"
+msgstr "afficher le numéro de version"
+
+#: main.cc:81
+msgid "EXT"
+msgstr ""
+
+#: main.cc:81
+msgid "use output format EXT"
+msgstr ""
+
+#: main.cc:82
+#, fuzzy
+msgid "inhibit file output naming and exporting"
+msgstr ""
+
+#: main.cc:89
+#, c-format
+msgid "Usage: %s [OPTION]... [FILE]..."
+msgstr "Usage: %s [OPTION]... [FICHIER]..."
+
+#: main.cc:91
+#, fuzzy
+msgid "Typeset music and or play MIDI from FILE."
+msgstr ""
+
+#: main.cc:97 main.cc:115
+msgid "Options:"
+msgstr "Options: "
+
+#: main.cc:101
+#, fuzzy
+msgid "This binary was compiled with the following options:"
+msgstr "Cet exécutable a été compilé avec les options suivantes:"
+
+#: main.cc:118 main.cc:119
+msgid "Report bugs to"
+msgstr "Rapporter les bugs à"
+
+#: main.cc:52 main.cc:134
+#, c-format
+msgid ""
+"This is free software. It is covered by the GNU General Public License,and "
+"you are welcome to change it and/or distribute copies of it undercertain "
+"conditions. Invoke as `%s --warranty' for more information.\n"
+msgstr ""
+
+#: main.cc:59 main.cc:141 main.cc:153
+#, c-format
+msgid "Copyright (c) %s by"
+msgstr "Copyright (c) %s par"
+
+#. GNU GNU?
+#: main.cc:151
+msgid "GNU LilyPond -- The GNU Project music typesetter"
+msgstr "GNU LilyPond -- Il tipografo musicale del progetto GNU"
+
+#: main.cc:68 main.cc:159
+msgid ""
+" This program is free software; you can redistribute it and/or\n"
+"modify it under the terms of the GNU General Public License version 2\n"
+"as published by the Free Software Foundation.\n"
+"\n"
+" This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n"
+"General Public License for more details.\n"
+"\n"
+" You should have received a copy (refer to the file COPYING) of the\n"
+"GNU General Public License along with this program; if not, write to\n"
+"the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,\n"
+"USA.\n"
+msgstr ""
+
+#: midi-item.cc:303
+#, fuzzy, c-format
+msgid "No such instrument: `%s'"
+msgstr "Pas d'instrument tel: `%s'"
+
+#: midi-item.cc:357
+#, c-format
+msgid "unconventional key: flats: %d, sharps: %d"
+msgstr ""
+
+#: midi-item.cc:402
+msgid "silly duration"
+msgstr ""
+
+#: midi-item.cc:415
+msgid "silly pitch"
+msgstr ""
+
+#: midi-stream.cc:29 paper-stream.cc:36
+msgid "error syncing file (disk full?)"
+msgstr ")"
+
+#: music-output-def.cc:56
+msgid "Interpretation context with empty type"
+msgstr ""
+
+#: music-output-def.cc:83
+msgid "Can't find Score context"
+msgstr ""
+
+#: musical-request.cc:42
+#, c-format
+msgid "transposition by %s makes accidental larger than two"
+msgstr ""
+
+#: my-lily-lexer.cc:137
+#, c-format
+msgid "redeclaration of `\\%s'"
+msgstr ""
+
+#: my-lily-lexer.cc:143
+#, c-format
+msgid "Identifier name is a keyword (`%s')"
+msgstr ""
+
+#: my-lily-lexer.cc:172
+#, c-format
+msgid "error at EOF: %s"
+msgstr ""
+
+#: my-lily-parser.cc:60
+msgid "Parsing..."
+msgstr "Analyse..."
+
+#: my-lily-parser.cc:69
+msgid "braces don't match"
+msgstr ""
+
+#: paper-def.cc:95
+#, c-format
+msgid "unknown paper variable: `%s'"
+msgstr "variable papier inconnue: `%s'"
+
+#: paper-def.cc:99
+msgid "not a real variable"
+msgstr "pas une vrai variable"
+
+#. for now; breaks -fscm output
+#: paper-def.cc:251
+msgid "outputting Score, defined at: "
+msgstr ""
+
+#: paper-def.cc:280
+#, c-format
+msgid "Paper output to %s..."
+msgstr "Sortie papier vers %s..."
+
+#: mudela-stream.cc:85 paper-outputter.cc:76 performance.cc:97
+msgid ", at "
+msgstr ", à "
+
+#: paper-outputter.cc:130
+#, c-format
+msgid "Improbable offset for object type `%s'"
+msgstr ""
+
+#: paper-score.cc:131
+msgid "Can't solve this casting problem exactly; revert to Word_wrap"
+msgstr ""
+
+#: paper-score.cc:156
+msgid "Preprocessing elements..."
+msgstr ""
+
+#: paper-score.cc:160
+msgid "Calculating column positions..."
+msgstr "Calcul de la position des colonnes..."
+
+#: paper-score.cc:179
+msgid " elements. "
+msgstr " éléments. "
+
+#: paper-score.cc:182
+msgid "Line ... "
+msgstr "Ligne ..."
+
+#: performance.cc:50
+#, fuzzy
+msgid "Track ... "
+msgstr "Piste ... "
+
+#. perhaps multiple text events?
+#: performance.cc:77
+msgid "Creator: "
+msgstr "Auteur: "
+
+#: performance.cc:92
+msgid "Automatically generated"
+msgstr "Généré automatiquement"
+
+#: performance.cc:106
+#, c-format
+msgid "from musical definition: %s"
+msgstr ""
+
+#: performance.cc:174
+#, c-format
+msgid "MIDI output to %s..."
+msgstr ""
+
+#: qlpsolve.cc:88 qlpsolve.cc:139
+msgid "degenerate constraints"
+msgstr ""
+
+#: request-chord-iterator.cc:73
+#, c-format
+msgid "junking request: `%s'"
+msgstr ""
+
+#: request-chord-iterator.cc:76
+#, c-format
+msgid "Huh? Not a Request: `%s'"
+msgstr ""
+
+#: rest-collision.cc:64
+#, fuzzy
+msgid "Too many colliding rests."
+msgstr ""
+
+#: rest-collision.cc:68
+msgid "Too many notes for rest collision."
+msgstr ""
+
+#: score-engraver.cc:149
+#, c-format
+msgid "Unbound spanner `%s'"
+msgstr ""
+
+#: score.cc:56
+msgid "no toplevel translator"
+msgstr ""
+
+#: score.cc:59
+msgid "Interpreting music..."
+msgstr ""
+
+#: score.cc:70
+msgid "need music in a score"
+msgstr ""
+
+#. should we? hampers debugging.
+#: score.cc:83
+msgid "errors found, /*not processing score*/"
+msgstr ""
+
+#: score.cc:88
+#, c-format
+msgid "time: %.2f seconds"
+msgstr "durée: %.2f secondes"
+
+#: scores.cc:35
+#, c-format
+msgid "writing dependency file: `%s'..."
+msgstr ""
+
+#: scores.cc:79
+msgid "score contains errors; will not process it"
+msgstr ""
+
+#: scores.cc:109
+#, c-format
+msgid "Search path: %s"
+msgstr ""
+
+#: script-engraver.cc:49
+#, c-format
+msgid "don't know how to interpret articulation `%s'\n"
+msgstr ""
+
+#. this shouldn't happen, but let's continue anyway.
+#: single-malt-grouping-item.cc:42
+msgid "Single_malt_grouping_item: I've been drinking too much"
+msgstr ""
+
+#: slur-engraver.cc:64
+msgid "unterminated slur"
+msgstr ""
+
+#: slur-engraver.cc:80
+#, c-format
+msgid "can't find both ends of %s"
+msgstr ""
+
+#: slur-engraver.cc:80
+msgid "slur"
+msgstr ""
+
+#: slur.cc:39
+#, fuzzy
+msgid "Putting slur over rest. Ignoring"
+msgstr ""
+
+#: spacing-spanner.cc:215
+#, c-format
+msgid "can't find a ruling note at %s"
+msgstr ""
+
+#: spacing-spanner.cc:221
+#, c-format
+msgid "no minimum in measure at %s"
+msgstr ""
+
+#: spanner.cc:39
+msgid "left spanpoint is right spanpoint\n"
+msgstr ""
+
+#: spanner.cc:109
+#, c-format
+msgid "Spanner `%s' with equal left and right spanpoints"
+msgstr ""
+
+#: spring-spacer.cc:134
+msgid "I'm too fat; call Oprah"
+msgstr ""
+
+#: spring-spacer.cc:295
+msgid "solution doesn't satisfy constraints"
+msgstr ""
+
+#: stem-engraver.cc:80
+#, c-format
+msgid "Adding note head to incompatible stem (type = %d)"
+msgstr ""
+
+#: stem.cc:106
+msgid "weird stem size; check for narrow beams"
+msgstr ""
+
+#: tfm-reader.cc:108
+#, c-format
+msgid "TFM header of `%s' has only %u word(s)"
+msgstr ""
+
+#: tfm-reader.cc:146
+#, c-format
+msgid "%s: TFM file has %u parameters, which is more than the"
+msgstr ""
+
+#: tfm.cc:64
+#, c-format
+msgid "can't find ascii character `%d'"
+msgstr "ne peut pas trouver le caractère ascii `%d'"
+
+#: tie-engraver.cc:155 tie-performer.cc:106
+msgid "No ties were created!"
+msgstr "Aucune liaison n'a été crée"
+
+#: tie.cc:55
+msgid "lonely tie"
+msgstr "liaison solitaire"
+
+#: time-description.cc:17
+msgid "cadenza"
+msgstr "cadence"
+
+#: time-description.cc:106
+msgid "partial measure must be non-negative"
+msgstr "mesure partielle ne peut pas être négative"
+
+#: time-description.cc:108
+msgid "partial measure too large"
+msgstr "mesure partielle trop grande"
+
+#: time-scaled-music-iterator.cc:25
+msgid "No one to print a tuplet start bracket"
+msgstr ""
+
+#: time-signature-engraver.cc:28
+msgid "lost in time"
+msgstr "perdu dans le temps"
+
+#: timing-translator.cc:26
+msgid "conflicting timing request"
+msgstr ""
+
+#: timing-translator.cc:62
+msgid "time signature change not allowed here"
+msgstr ""
+
+#: timing-translator.cc:83
+#, c-format
+msgid "barcheck failed by: %s"
+msgstr ""
+
+#: translator-ctors.cc:39
+#, c-format
+msgid "unknown translator `%s'"
+msgstr "traducteur inconnu `%s'"
+
+#: translator-group.cc:82 translator-group.cc:97
+#, c-format
+msgid "Already contains a `%s'"
+msgstr "Contient déjà un `%s'"
+
+#: translator-group.cc:207
+#, c-format
+msgid "can't find or create `%s' called `%s'"
+msgstr "ne peut pas trouver ou créer `%s' nommé `%s'"
+
+#: translator-group.cc:341
+#, c-format
+msgid "can't find or create `%s'"
+msgstr "ne peut pas trouver ou créer `%s'"
+
+#: translator-group.cc:437 translator-group.cc:446
+#, c-format
+msgid "can't find `%s'"
+msgstr "ne peut pas trouver `%s'"
+
+#: transposed-music.cc:31
+msgid "Will ignore \\relative for transposed music"
+msgstr "\\relative sera ignoré pour la musique transposée"
+
+#: unfolded-repeat-iterator.cc:145
+msgid "No one to print a volta bracket"
+msgstr ""
+
+#: word-wrap.cc:75
+msgid "ugh, this measure is too long"
+msgstr "oops, cette mesure est trop longue"
+
+#: word-wrap.cc:76
+#, c-format
+msgid "breakpoint: %d"
+msgstr "point d'arrêt: %d"
+
+#: word-wrap.cc:77
+msgid "generating stupido solution"
+msgstr "génération de solutions stupides"
+
+#: word-wrap.cc:95
+msgid "I don't fit; put me on Montignac"
+msgstr ""
+
+#: parser.yy:55
+#, c-format
+msgid "Oldest supported input version: %s"
+msgstr "Plus ancienne version supportée: %s"
+
+#: parser.yy:313
+msgid "Cannot evaluate Scheme in safe mode"
+msgstr ""
+
+#: parser.yy:433 parser.yy:441 parser.yy:465
+msgid "Need a translator group for a context"
+msgstr ""
+
+#: parser.yy:459
+msgid "Wrong type for property value"
+msgstr "Mauvais type pour la valeur de la propriété"
+
+#: parser.yy:515
+msgid "More than one music block"
+msgstr "Plus d'un bloc de musique"
+
+#: parser.yy:946 parser.yy:1360 parser.yy:1380
+#, c-format
+msgid "not a duration: %d"
+msgstr "pas une durée: %d"
+
+#: parser.yy:948 parser.yy:1382
+msgid "can't abbreviate"
+msgstr "ne peut pas abréger"
+
+#: parser.yy:1211 parser.yy:1219 parser.yy:1444
+msgid "have to be in Lyric mode for lyrics"
+msgstr "il fayt être en mode Parole pour les paroles"
+
+#: parser.yy:1391
+msgid "have to be in Note mode for notes"
+msgstr "il faut être en mode Note pour les notes"
+
+#: parser.yy:1403
+#, fuzzy
+msgid "can't abbreviate tuplet"
+msgstr ""
+
+#: parser.yy:1450
+msgid "have to be in Chord mode for chords"
+msgstr "il faut être en mode Accord pour les accords"
+
+#: lexer.ll:155
+msgid "EOF found inside a comment"
+msgstr "EOF trouvé dans un commentaire"
+
+#: lexer.ll:199
+#, c-format
+msgid "undefined identifier: `%s'"
+msgstr "indentifiant non défini: `%s'"
+
+#. backup rule
+#: lexer.ll:204
+msgid "missing end quote"
+msgstr ""
+
+#. backup rule
+#: lexer.ll:227 lexer.ll:231
+msgid "white expected"
+msgstr "blanche attendue"
+
+#: lexer.ll:401
+#, fuzzy, c-format
+msgid "invalid character: `%c'"
+msgstr "caractères illégal: `%c'"
+
+#: lexer.ll:457
+#, c-format
+msgid "unknown escaped string: `\\%s'"
+msgstr "chaîne d'échappement inconnue: `\\%s'"
+
+#: lexer.ll:543
+#, c-format
+msgid "incorrect mudela version: %s (%s, %s)"
+msgstr "version de mudela incorrecte: %s (%s, %s)"
+
+#: out/BLURB.hh:2
+msgid ""
+"LilyPond is a music typesetter. It produces beautiful sheet music\n"
+"using a high level description file as input. LilyPond is part of \n"
+"the GNU Project.\n"
+"\n"
+msgstr "Lilypond est un formateur de musique. Il produit de belle\n"
+"paritions à partir de description de gaut niveau en entrée. Lilypond\n"
+"fait partie du projet GNU.\n"
+
+#: main.cc:90
+#, fuzzy
+msgid "write exact durations, e.g.: a4*385/384"
+msgstr ""
+
+#: main.cc:93
+msgid "ACC[:MINOR]"
+msgstr ""
+
+#: main.cc:93
+#, fuzzy
+msgid "set key: ACC +sharps/-flats; :1 minor"
+msgstr ""
+
+#: main.cc:94
+#, fuzzy
+msgid "assume no tuplets or double dots, smallest is 32"
+msgstr ""
+
+#: main.cc:95
+#, fuzzy
+msgid "set FILE as default output"
+msgstr " -o, --output=FILE set FILE come output di default\n"
+
+#: main.cc:96
+msgid "assume no tuplets"
+msgstr ""
+
+#: main.cc:97
+msgid "be quiet"
+msgstr "mode silencieux"
+
+#: main.cc:98
+msgid "DUR"
+msgstr ""
+
+#: main.cc:98
+#, fuzzy
+msgid "Set smallest duration (?)"
+msgstr "Positionne la plus petite durée (?)"
+
+#: main.cc:100
+msgid "mode bavard"
+msgstr ""
+
+#: main.cc:102
+#, fuzzy
+msgid "assume no double dotted notes"
+msgstr ""
+""
+
+#: main.cc:110
+#, c-format
+msgid "Usage: %s [OPTION]... [FILE]"
+msgstr "Usage: %s [OPTION... [FICHIER]"
+
+#: main.cc:112
+msgid "Translate midi-file to mudela"
+msgstr "Traduction du fichier MIDI en mudela"
+
+#: midi-parser.cc:64
+msgid "zero length string encountered"
+msgstr "chaîne de taille vide rencontrée"
+
+#: midi-score-parser.cc:44
+msgid "MIDI header expected"
+msgstr "entête MIDI attendue"
+
+#: midi-score-parser.cc:49
+msgid "Invalid header length"
+msgstr "Taille d'entête invalide"
+
+#: midi-score-parser.cc:52
+msgid "Invalid midi format"
+msgstr "Format MIDI invalide"
+
+#: midi-score-parser.cc:55
+msgid "Invalid number of tracks"
+msgstr "Nombre de pistes invalide"
+
+#: midi-score-parser.cc:58
+#, c-format
+msgid "can't handle %s"
+msgstr "ne peut pas traiter %s"
+
+#: midi-score-parser.cc:58
+msgid "non-metrical time"
+msgstr "temps non métrique"
+
+#: midi-score-parser.cc:94
+msgid "Parsing...\n"
+msgstr "Analyse...\n"
+
+#: midi-track-parser.cc:68
+#, c-format
+msgid "junking note-end event: channel = %d, pitch = %d"
+msgstr ""
+
+#: midi-track-parser.cc:124
+msgid "invalid running status"
+msgstr ""
+
+#: midi-track-parser.cc:328
+msgid "unimplemented MIDI meta-event"
+msgstr "meta-évènement MIDI non implémenté"
+
+#: midi-track-parser.cc:333
+msgid "invalid MIDI event"
+msgstr "évènement MIDI invalide"
+
+#: midi-track-parser.cc:348
+msgid "MIDI track expected"
+msgstr "piste MIDI attendue"
+
+#: midi-track-parser.cc:353
+msgid "invalid track length"
+msgstr "taille de piste invalide"
+
+#: mudela-item.cc:160
+#, c-format
+msgid "#32 in quarter: %d"
+msgstr ""
+
+#: mudela-score.cc:108
+#, c-format
+msgid "Lily output to %s..."
+msgstr "Sortie de Lily vers %s..."
+
+#: mudela-score.cc:119 mudela-score.cc:168
+msgid "track "
+msgstr "piste "
+
+#: mudela-score.cc:155
+msgid "Processing..."
+msgstr "Traitement..."
+
+#: mudela-score.cc:164
+msgid "Creating voices..."
+msgstr "Création des voix..."
+
+#: mudela-score.cc:177
+msgid "NOT Filtering tempo..."
+msgstr "PAS de filtrage du tempo..."
+
+#: mudela-score.cc:186
+msgid "NOT Quantifying columns..."
+msgstr "PAS de quantification des colonnes..."
+
+#: mudela-score.cc:190
+msgid "Quantifying columns..."
+msgstr "Quantification des colonnes..."
+
+#: mudela-score.cc:223
+msgid "Settling columns..."
+msgstr ""
+
+#: mudela-staff.cc:111
+#, c-format
+msgid "% midi copyright:"
+msgstr ""
+
+#: mudela-staff.cc:112
+#, c-format
+msgid "% instrument:"
+msgstr ""
+
+#: mudela-stream.cc:37
+#, c-format
+msgid "lily indent level: %d"
+msgstr "Niveau d'indentation de lily: %d"
+
+#: mudela-stream.cc:75
+msgid "% Creator: "
+msgstr "% Auteur: "
+
+#: mudela-stream.cc:80
+msgid "% Automatically generated"
+msgstr "% Généré automatiquement"
+
+#: mudela-stream.cc:89
+#, c-format
+msgid "% from input file: "
+msgstr "% dal file di input: "
+
+#, fuzzy
+#~ msgid "enable debugging output "
+#~ msgstr " -D, --debug abilita l'output di debugging\n"
+
+#, fuzzy
+#~ msgid "don't timestamp the output "
+#~ msgstr ""
+#~ " -T, --no-timestamps non inserisce marcatori temporali nell'output\n"
+
+#~ msgid " -a, --about about LilyPond\n"
+#~ msgstr " -a, --about cos'è LilyPond\n"
+
+#~ msgid " -h, --help this help\n"
+#~ msgstr " -h, --help questo help\n"
+
+#~ msgid " -f, --output-format=X use output format X\n"
+#~ msgstr " -f, --output-format=X usa il formato dell'ouput X\n"
+
+#~ msgid " -o, --output=FILE set FILE as default output base\n"
+#~ msgstr ""
+#~ " -o, --output=FILE indica FILE come base di default per l'output\n"
+
+#~ msgid " -V, --ignore-version ignore mudela version\n"
+#~ msgstr " -V, --ignore-version ignora la versione di mudela\n"
+
+#~ msgid "GNU LilyPond is Free software, see --warranty"
+#~ msgstr "GNU LilyPond è Free software, vedi --warranty"
+
+#~ msgid " -D, --debug enable debugging output\n"
+#~ msgstr " -D, --debug abilita l'output di debugging\n"
+
+#, fuzzy
+#~ msgid " -p, --no-tuplets assume no tuplets\n"
+#~ msgstr " -p, --no-plets assume che non ci siano gruppetti\n"
+
+#~ msgid " -q, --quiet be quiet\n"
+#~ msgstr " -q, --quiet sii silenzioso\n"
+
+#~ msgid ""
+#~ " -s, --smallest=N assume no shorter (reciprocal) durations than N\n"
+#~ msgstr ""
+#~ " -s, --smallest=N assume che non ci siano durate (reciproche) "
+#~ "inferiori a N\n"
+
+#~ msgid " -v, --verbose be verbose\n"
+#~ msgstr " -v, --verbose sii loquace\n"
+
+#, fuzzy
+#~ msgid "Midi2ly, translate midi to mudela"
+#~ msgstr "Mi2mu, tradice midi in mudela"
+
+#~ msgid "of"
+#~ msgstr "de"
+
+#~ msgid "please fix me"
+#~ msgstr "corrigez moi, s'il vous plait"
+
+#~ msgid "stem at %s doesn't fit in beam"
+#~ msgstr "Queue à %s ne rentre pas dans la barre"
+
+#~ msgid "No stem direction set. Ignoring column in clash."
+#~ msgstr "."
+
+#~ msgid "\\relative mode changed here, old value: "
+#~ msgstr "\\mode relatif changé ici, valeur précédante: "
+
+#~ msgid "ignoring zero duration added to column at %s"
+#~ msgstr "durée nulle ajoutée à la colonne à %s ignorée"
+
+#~ msgid "script needs stem direction"
+#~ msgstr "scipt a besoin de direction de la queue"
+
+#~ msgid "unconnected column: %d"
+#~ msgstr "colonne non connectée: %d"
+
+#~ msgid ""
+#~ "Staff_side::get_position_f(): somebody forgot to set my direction, returning "
+#~ "-20"
+#~ msgstr ""
+#~ "taff_side::get_position_f(): quelqu'un a oublié de positionner ma direction, "
+#~ "je retourne -20"
+
+#~ msgid "have to be in Note mode for @chords"
+#~ msgstr "il faut être en mode Note pour @chords"
+
+#~ msgid ""
+#~ "LilyPond is the GNU Project music typesetter. This program can print\n"
+#~ "beautiful sheet music from a music definition file. It can also play\n"
+#~ "mechanical performances to a MIDI file. Features include multiple\n"
+#~ "staffs, meters, clefs, keys, lyrics, versatile input language, cadenzas,\n"
+#~ "beams, slurs, triplets, named chords, transposing, formatting scores, \n"
+#~ "part extraction. It includes a nice font of musical symbols.\n"
+#~ msgstr ""
+#~ "Lilypond est le formateur de musique du projet GNU. Ce programme peut\n"
+#~ "imprimer de belles partitions de musiques à partir d'un fichier de\n"
+#~ "définition de musique. Il peut aussi jouer automaiquement le morceau\n"
+#~ "vers un fichier midi. Ses caractéristiques incluent plusieurs portées,\n"
+#~ "mètre, clés, tonalités, paroles, language d'entrée polyvalent, cadences,\n"
+#~ "barres, liaison, triplets, accords nommés, transposition, formattage des\n"
+#~ "paritions, extraction de parties. Il inclue une jolie police de symbol\n"
+#~ "musicaux.\n"
"Search path is `%s'\n"
msgstr "(Il path di caricamento è `%s'"
-#: ineq-constrained-qp.cc:169
-#, c-format
-msgid "Ineq_constrained_qp::solve (): Constraint off by %f"
-msgstr ""
-
-#: ineq-constrained-qp.cc:233
-msgid "didn't converge!"
-msgstr "non converge!"
-
-#: ineq-constrained-qp.cc:235
-msgid "Too much degeneracy. "
-msgstr "Troppa degenerazione. "
-
#: key-def.cc:31
msgid "No key name: assuming `C'"
msgstr "Nessuna armatura di chiave: assumo Do'"
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 1999-09-16 20:29+0200\n"
+"POT-Creation-Date: 1999-12-28 00:34+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
msgid "EOF in a string"
msgstr ""
-#: data-file.cc:116 input.cc:86 midi-parser.cc:100 warn.cc:21
+#: data-file.cc:116 input.cc:87 midi-parser.cc:100 warn.cc:22
msgid "warning: "
msgstr ""
-#: dstream.cc:158
+#: dstream.cc:184
msgid "not enough fields in Dstream init"
msgstr ""
-#: flower-debug.cc:17
-msgid "Debug output disabled. Compiled with NPRINT."
-msgstr ""
-
#: getopt-long.cc:141
#, c-format
msgid "Option `%s' requires an argument"
msgid "invalid argument `%s' to option `%s'"
msgstr ""
-#: text-stream.cc:8
+#: text-stream.cc:9
msgid "<stdin>"
msgstr ""
-#: mapped-file-storage.cc:87 midi-stream.cc:77 mudela-stream.cc:104
-#: paper-stream.cc:25 scores.cc:38 simple-file-storage.cc:44 text-stream.cc:21
+#: mapped-file-storage.cc:87 midi-stream.cc:77 mudela-stream.cc:111
+#: paper-stream.cc:25 scores.cc:38 simple-file-storage.cc:44 text-stream.cc:22
#, c-format
msgid "Can't open file: `%s'"
msgstr ""
-#: input.cc:91 warn.cc:7 warn.cc:15
+#: input.cc:92 warn.cc:8 warn.cc:16
msgid "error: "
msgstr ""
-#: input.cc:97
+#: input.cc:98
msgid "Non fatal error: "
msgstr ""
-#: input.cc:105 source-file.cc:63 source-file.cc:156
+#: input.cc:106 source-file.cc:62 source-file.cc:155
msgid "position unknown"
msgstr ""
msgid "Huh? Got %d, expected %d characters"
msgstr ""
-#: warn.cc:34
+#: warn.cc:35
msgid "programming error: "
msgstr ""
-#: warn.cc:34
+#: warn.cc:35
msgid " (Continuing; cross thumbs)"
msgstr ""
-#: warn.cc:40
-msgid "programming warning: "
-msgstr ""
-
-#: afm.cc:129
+#: afm.cc:128
#, c-format
msgid "Can't find character called: `%s'"
msgstr ""
-#: afm.cc:154
+#: afm.cc:153
#, c-format
msgid "Can't find character number: %d"
msgstr ""
-#: all-font-metrics.cc:69 lookup.cc:103
+#: all-font-metrics.cc:107 lookup.cc:96
#, c-format
msgid "Can't find font: `%s'"
msgstr ""
-#: all-font-metrics.cc:70
+#: all-font-metrics.cc:108
msgid "Loading default font"
msgstr ""
-#: all-font-metrics.cc:75
+#: all-font-metrics.cc:113
#, c-format
msgid "Can't find default font: `%s'"
msgstr ""
-#: all-font-metrics.cc:76
+#: all-font-metrics.cc:114
#, c-format
-msgid "(search path: `%s)'"
+msgid "(search path: `%s'"
msgstr ""
-#: all-font-metrics.cc:77
+#: all-font-metrics.cc:115
msgid "Giving up"
msgstr ""
+#: auto-change-iterator.cc:43 change-iterator.cc:60
+msgid "Can't switch translators, I'm there already"
+msgstr ""
+
#: beam-engraver.cc:42 beam-engraver.cc:58
msgid "no beam to end"
msgstr ""
msgid "Already have a Beam"
msgstr ""
-#: beam-engraver.cc:149
+#: beam-engraver.cc:142
msgid "unfinished beam"
msgstr ""
-#: beam-engraver.cc:174
+#: beam-engraver.cc:170
msgid "Stem must have Rhythmic structure"
msgstr ""
-#: beam-engraver.cc:185
+#: beam-engraver.cc:181
msgid "Stem doesn't fit in beam"
msgstr ""
-#: beam-engraver.cc:186
+#: beam-engraver.cc:182
msgid "Beam was started here"
msgstr ""
-#: beam.cc:147
-msgid "beam with less than two stems"
+#: beam.cc:85
+msgid "beam has less than two stems"
msgstr ""
-#: beam.cc:312
+#: beam.cc:469
msgid "weird beam vertical offset"
msgstr ""
-#: break-algorithm.cc:28
-msgid "0 lines"
-msgstr ""
-
-#: break-algorithm.cc:30
-#, c-format
-msgid "1 line (of %.0f columns)"
-msgstr ""
-
-#: break-algorithm.cc:32
-#, c-format
-msgid "%d lines (with an average of %.1f columns)"
-msgstr ""
-
-#: break-algorithm.cc:155
+#: break-algorithm.cc:106
msgid "Score does not have any columns"
msgstr ""
-#: break-algorithm.cc:172
-#, c-format
-msgid "approximated %s"
-msgstr ""
-
-#: break-algorithm.cc:174
-#, c-format
-msgid "calculated %s exactly"
-msgstr ""
-
-#: break-algorithm.cc:175
-#, c-format
-msgid "elapsed time %.2f seconds"
-msgstr ""
-
#: change-iterator.cc:22
#, c-format
msgid "Can't change `%s' to `%s'"
msgstr ""
-#: change-iterator.cc:57
-msgid "Can't switch translators, I'm there already"
-msgstr ""
-
#.
#. We could change the current translator's id, but that would make
#. errors hard to catch
#.
#. last->translator_id_str_ = change_l ()->change_to_id_str_;
#.
-#: change-iterator.cc:76
+#: change-iterator.cc:79
msgid "I'm one myself"
msgstr ""
-#: change-iterator.cc:79
+#: change-iterator.cc:82
msgid "none of these in my family"
msgstr ""
-#: chord-tremolo-engraver.cc:41 chord-tremolo-engraver.cc:58
+#: chord-tremolo-engraver.cc:40 chord-tremolo-engraver.cc:57
msgid "no tremolo beam to end"
msgstr ""
-#: chord-tremolo-engraver.cc:83
+#: chord-tremolo-engraver.cc:82
msgid "Already have a tremolo beam"
msgstr ""
-#: chord-tremolo-engraver.cc:124
+#: chord-tremolo-engraver.cc:125
msgid "unfinished tremolo beam"
msgstr ""
-#: chord.cc:231
+#: chord.cc:147
#, c-format
msgid "invalid subtraction: not part of chord: %s"
msgstr ""
-#: chord.cc:245
+#: chord.cc:365
#, c-format
msgid "invalid inversion pitch: not part of chord: %s"
msgstr ""
-#: clef-engraver.cc:178
+#: clef-engraver.cc:151
msgid "unknown clef type"
msgstr ""
-#: collision.cc:95
+#: collision.cc:99
msgid "Too many clashing notecolumns. Ignoring them."
msgstr ""
-#: crescendo.cc:42
+#: crescendo.cc:63
msgid "crescendo"
msgstr ""
-#: crescendo.cc:42
+#: crescendo.cc:63
msgid "too small"
msgstr ""
-#: debug.cc:56
+#: cross-staff.cc:17
+msgid ""
+"minVerticalAlign != maxVerticalAlign: cross staff spanners may be broken"
+msgstr ""
+
+#: debug.cc:30
msgid "floating point exception"
msgstr ""
-#: debug.cc:139
+#: debug.cc:54
msgid "Can't set mem-checking!"
msgstr ""
msgid "NaN"
msgstr ""
-#: dynamic-engraver.cc:109
+#: dynamic-engraver.cc:105
msgid "Got a dynamic already. Continuing dazed and confused."
msgstr ""
-#: dynamic-engraver.cc:162
+#: dynamic-engraver.cc:154
msgid "Can't find (de)crescendo to end"
msgstr ""
-#: dynamic-engraver.cc:216
+#: dynamic-engraver.cc:186
msgid "Too many crescendi here"
msgstr ""
-#: dynamic-engraver.cc:254
+#: dynamic-engraver.cc:224
msgid "unended crescendo"
msgstr ""
-#: encompass-info.cc:32
-msgid "Slur over rest?"
-msgstr ""
-
-#: encompass-info.cc:67 stem-info.cc:140
-msgid ""
-"minVerticalAlign != maxVerticalAlign: interstaff beams/slurs may be broken"
-msgstr ""
-
#: extender-engraver.cc:62
msgid "unterminated extender"
msgstr ""
msgid "no one to print a repeat brace"
msgstr ""
+#: gourlay-breaking.cc:154
+msgid "No feasible line breaking found"
+msgstr ""
+
#: grace-iterator.cc:43
msgid "no Grace context available"
msgstr ""
msgid "wrong identifier type, expected: `%s'"
msgstr ""
-#: includable-lexer.cc:47 lily-guile.cc:82 lily-guile.cc:105
+#: includable-lexer.cc:47 lily-guile.cc:127 lily-guile.cc:150
#: midi-score-parser.cc:24 scores.cc:108 scores.cc:114
#, c-format
msgid "Can't find file: `%s'"
msgstr ""
-#: includable-lexer.cc:49 lookup.cc:104 scores.cc:109
+#: includable-lexer.cc:49 lookup.cc:97 scores.cc:109
#, c-format
msgid "(search path: `%s')"
msgstr ""
-#: ineq-constrained-qp.cc:169
-#, c-format
-msgid "Ineq_constrained_qp::solve (): Constraint off by %f"
-msgstr ""
-
-#: ineq-constrained-qp.cc:233
-msgid "Didn't converge!"
-msgstr ""
-
-#: ineq-constrained-qp.cc:235
-msgid "too much degeneracy"
-msgstr ""
-
#: key-def.cc:31
msgid "No key name, assuming `C'"
msgstr ""
msgid "Don't know how handle empty keys"
msgstr ""
-#: key-engraver.cc:70 key-performer.cc:65
+#: key-engraver.cc:77 key-performer.cc:65
msgid "FIXME: key change merge"
msgstr ""
-#: key.cc:54 key.cc:59
+#: key.cc:56 key.cc:61
#, c-format
msgid "Don't have that many octaves (%s)"
msgstr ""
-#: key.cc:77
+#: key.cc:79
#, c-format
msgid "underdone accidentals (%s)"
msgstr ""
-#: key.cc:82
+#: key.cc:84
#, c-format
msgid "overdone accidentals (%s)"
msgstr ""
-#: lily-guile.cc:84 lily-guile.cc:107
+#: lily-guile.cc:129 lily-guile.cc:152
#, c-format
msgid "(load path: `%s')"
msgstr ""
-#: line-of-score.cc:91
-msgid "Huh? Empty Line_of_score?"
-msgstr ""
-
-#: local-key-engraver.cc:42
+#: local-key-engraver.cc:44
msgid "out of tune:"
msgstr ""
-#: local-key-engraver.cc:43 time-signature-engraver.cc:29
-#: translator-group.cc:437 translator-group.cc:446
+#: local-key-engraver.cc:45 time-signature-engraver.cc:29
+#: translator-group.cc:417 translator-group.cc:426
#, c-format
msgid "Can't find: `%s'"
msgstr ""
-#: lookup.cc:105
+#: lookup.cc:98
msgid "Aborting"
msgstr ""
-#: lookup.cc:436
+#: lookup.cc:331
#, c-format
msgid "Non-matching braces in text `%s', adding braces"
msgstr ""
-#: main.cc:71 main.cc:91
+#: main.cc:71 main.cc:92
msgid "enable debugging output"
msgstr ""
msgid "use output format EXT"
msgstr ""
-#: main.cc:73 main.cc:92
+#: main.cc:73 main.cc:93
msgid "this help"
msgstr ""
msgid "add DIR to search path"
msgstr ""
-#: main.cc:75 main.cc:95
+#: main.cc:75 main.cc:96
msgid "FILE"
msgstr ""
msgid "inhibit file output naming and exporting"
msgstr ""
-#: main.cc:81 main.cc:99
+#: main.cc:81 main.cc:100
msgid "don't timestamp the output"
msgstr ""
msgid "ignore mudela version"
msgstr ""
-#: main.cc:84 main.cc:100
+#: main.cc:84 main.cc:101
msgid "print version number"
msgstr ""
-#: main.cc:85 main.cc:102
+#: main.cc:85 main.cc:103
msgid "show warranty and copyright"
msgstr ""
msgid "Typeset music and or play MIDI from FILE"
msgstr ""
-#: main.cc:100 main.cc:115
+#: main.cc:98
+msgid ""
+"LilyPond is a music typesetter. It produces beautiful sheet music\n"
+"using a high level description file as input. LilyPond is part of \n"
+"the GNU Project.\n"
+msgstr ""
+
+#: main.cc:104 main.cc:116
msgid "Options:"
msgstr ""
-#: main.cc:104
+#: main.cc:108
msgid "This binary was compiled with the following options:"
msgstr ""
-#: main.cc:119 main.cc:123
+#: main.cc:120 main.cc:127
#, c-format
msgid "Report bugs to %s"
msgstr ""
-#: main.cc:52 main.cc:137
+#: main.cc:53 main.cc:141
#, c-format
msgid ""
"This is free software. It is covered by the GNU General Public License,\n"
"certain conditions. Invoke as `%s --warranty' for more information.\n"
msgstr ""
-#: main.cc:59 main.cc:144 main.cc:156
+#: main.cc:60 main.cc:148 main.cc:160
#, c-format
msgid "Copyright (c) %s by"
msgstr ""
#. GNU GNU?
-#: main.cc:154
+#: main.cc:158
msgid "GNU LilyPond -- The GNU Project music typesetter"
msgstr ""
-#: main.cc:68 main.cc:162
+#: main.cc:69 main.cc:166
msgid ""
" This program is free software; you can redistribute it and/or\n"
"modify it under the terms of the GNU General Public License version 2\n"
"USA.\n"
msgstr ""
-#: midi-item.cc:303
+#: midi-item.cc:307
#, c-format
msgid "no such instrument: `%s'"
msgstr ""
-#: midi-item.cc:357
+#: midi-item.cc:361
#, c-format
msgid "unconventional key: flats: %d, sharps: %d"
msgstr ""
-#: midi-item.cc:402
+#: midi-item.cc:406
msgid "silly duration"
msgstr ""
-#: midi-item.cc:415
+#: midi-item.cc:419
msgid "silly pitch"
msgstr ""
msgid "Error syncing file (disk full?)"
msgstr ""
-#: music-output-def.cc:56
+#: music-output-def.cc:57
msgid "Interpretation context with empty type"
msgstr ""
-#: music-output-def.cc:83
+#: music-output-def.cc:84
#, c-format
msgid "Can't find `%s' context"
msgstr ""
msgid "Transposition by %s makes accidental larger than two"
msgstr ""
-#: my-lily-lexer.cc:137
+#: my-lily-lexer.cc:135
#, c-format
msgid "redeclaration of `\\%s'"
msgstr ""
-#: my-lily-lexer.cc:143
+#: my-lily-lexer.cc:141
#, c-format
msgid "Identifier name is a keyword: `%s'"
msgstr ""
-#: my-lily-lexer.cc:172
+#: my-lily-lexer.cc:170
#, c-format
msgid "error at EOF: %s"
msgstr ""
-#: midi-score-parser.cc:94 my-lily-parser.cc:60
+#: midi-score-parser.cc:94 my-lily-parser.cc:61
msgid "Parsing..."
msgstr ""
-#: my-lily-parser.cc:69
+#: my-lily-parser.cc:70
msgid "Braces don't match"
msgstr ""
-#: p-col.cc:48
+#: paper-column.cc:48
msgid "Must set spring between differing columns"
msgstr ""
-#: paper-def.cc:95
+#: paper-def.cc:69
#, c-format
msgid "unknown paper variable: `%s'"
msgstr ""
-#: paper-def.cc:99
+#: paper-def.cc:73
msgid "not a real variable"
msgstr ""
-#. for now; breaks -fscm output
-#: paper-def.cc:251
-msgid "Outputting Score, defined at: "
-msgstr ""
-
-#: paper-def.cc:280
+#: paper-def.cc:207
#, c-format
msgid "paper output to %s..."
msgstr ""
-#: mudela-stream.cc:86 paper-outputter.cc:76 performance.cc:97
+#: mudela-stream.cc:93 paper-outputter.cc:58 performance.cc:95
msgid ", at "
msgstr ""
-#: paper-outputter.cc:130
-#, c-format
-msgid "improbable offset for object type: `%s'"
-msgstr ""
-
-#: paper-score.cc:131
-msgid "Can't solve this casting problem exactly; reverting to Word_wrap"
-msgstr ""
-
-#: paper-score.cc:156
+#: paper-score.cc:115
msgid "Preprocessing elements..."
msgstr ""
-#: paper-score.cc:160
+#: paper-score.cc:120
msgid "Calculating column positions..."
msgstr ""
-#: paper-score.cc:179
-#, c-format
-msgid "%s elements"
-msgstr ""
-
-#: paper-score.cc:182
-msgid "Line ... "
+#: paper-score.cc:147
+msgid "Outputting Score, defined at: "
msgstr ""
#: performance.cc:50
msgstr ""
#. perhaps multiple text events?
-#: performance.cc:77
+#: performance.cc:75
msgid "Creator: "
msgstr ""
-#: performance.cc:92
+#: performance.cc:90
msgid "Automatically generated"
msgstr ""
-#: performance.cc:106
+#: performance.cc:104
#, c-format
msgid "from musical definition: %s"
msgstr ""
-#: performance.cc:174
+#: performance.cc:172
#, c-format
msgid "MIDI output to %s..."
msgstr ""
-#: qlpsolve.cc:88 qlpsolve.cc:139
-msgid "degenerate constraints"
-msgstr ""
-
-#: repeat-engraver.cc:177
+#: repeat-engraver.cc:192
msgid "No bar engraver found. Ignoring repeats."
msgstr ""
msgid "Huh? Not a Request: `%s'"
msgstr ""
-#: rest-collision.cc:64
+#: rest-collision.cc:76
msgid "too many colliding rests"
msgstr ""
-#: rest-collision.cc:68
+#: rest-collision.cc:80
msgid "too many notes for rest collision"
msgstr ""
-#: score-engraver.cc:149
+#: score-engraver.cc:135
#, c-format
msgid "unbound spanner `%s'"
msgstr ""
msgid "Interpreting music..."
msgstr ""
-#: score.cc:70
+#: score.cc:71
msgid "Need music in a score"
msgstr ""
#. should we? hampers debugging.
-#: score.cc:83
+#: score.cc:84
msgid "Errors found/*, not processing score*/"
msgstr ""
-#: score.cc:88
+#: score.cc:89
#, c-format
msgid "elapsed time: %.2f seconds"
msgstr ""
msgid "Score contains errors; will not process it"
msgstr ""
-#: script-engraver.cc:49
+#: script-engraver.cc:48
#, c-format
msgid "Don't know how to interpret articulation `%s'"
msgstr ""
-#: sequential-music-iterator.cc:82
+#: sequential-music-iterator.cc:83
msgid "Must stop before this music ends"
msgstr ""
#. this shouldn't happen, but let's continue anyway.
-#: single-malt-grouping-item.cc:43
+#: single-malt-grouping-item.cc:54
msgid "Single_malt_grouping_item: I've been drinking too much"
msgstr ""
-#: slur-engraver.cc:64
+#: slur-engraver.cc:66
msgid "unterminated slur"
msgstr ""
-#: slur-engraver.cc:80
+#: slur-engraver.cc:82
#, c-format
msgid "Can't find both ends of %s"
msgstr ""
-#: slur-engraver.cc:80
+#: slur-engraver.cc:82
msgid "slur"
msgstr ""
-#: slur.cc:38
+#: slur.cc:41
msgid "Putting slur over rest. Ignoring."
msgstr ""
-#: spanner.cc:41
-msgid "Left spanpoint is right spanpoint"
-msgstr ""
-
-#: spanner.cc:111
-#, c-format
-msgid "Spanner `%s' has equal left and right spanpoints"
-msgstr ""
-
-#: spanner.cc:143
-msgid "spanner with negative length"
-msgstr ""
-
-#: spring-spacer.cc:134
-msgid "I'm too fat; call Oprah"
+#: slur.cc:89
+msgid "Slur over rest?"
msgstr ""
-#: spring-spacer.cc:299
-msgid "Solution doesn't satisfy constraints"
+#: spanner.cc:33
+msgid "Left spanpoint is right spanpoint"
msgstr ""
-#: spring-spacer.cc:400
+#: spanner.cc:100
#, c-format
-msgid "Improbable distance: %f point, setting to 10 mm"
-msgstr ""
-
-#: spring-spacer.cc:405
-msgid "Negative distance, setting to 10 mm"
+msgid "Spanner `%s' has equal left and right spanpoints"
msgstr ""
-#: stem-engraver.cc:80
+#: stem-engraver.cc:83
#, c-format
msgid "Adding note head to incompatible stem (type = %d)"
msgstr ""
-#: stem.cc:26
-msgid "stem direction set already!"
-msgstr ""
-
-#: stem.cc:106
+#: stem.cc:117
msgid "Weird stem size; check for narrow beams"
msgstr ""
-#: tfm-reader.cc:108
+#: tfm-reader.cc:115
#, c-format
msgid "TFM header of `%s' has only %u word(s)"
msgstr ""
-#: tfm-reader.cc:146
+#: tfm-reader.cc:153
#, c-format
msgid "%s: TFM file has %u parameters, which is more than the %u I can handle"
msgstr ""
msgid "Can't find ascii character: `%d'"
msgstr ""
-#: tie-engraver.cc:91
-msgid "unequal number of note heads for tie"
-msgstr ""
-
-#: tie-engraver.cc:155 tie-performer.cc:106
+#: tie-engraver.cc:146 tie-performer.cc:106
msgid "No ties were created!"
msgstr ""
-#: tie.cc:55
+#: tie.cc:65
msgid "lonely tie"
msgstr ""
-#: time-description.cc:17
-msgid "cadenza"
-msgstr ""
-
-#: time-description.cc:106
-msgid "Partial measure must be non-negative"
-msgstr ""
-
-#: time-description.cc:108
-msgid "partial measure too large"
-msgstr ""
-
#: time-scaled-music-iterator.cc:25
msgid "no one to print a tuplet start bracket"
msgstr ""
msgid "lost in time:"
msgstr ""
-#: timing-translator.cc:26
+#: timing-translator.cc:28
msgid "conflicting timing request"
msgstr ""
-#: timing-translator.cc:62
-msgid "time signature change not allowed here"
-msgstr ""
-
-#: timing-translator.cc:83
+#: timing-translator.cc:69
#, c-format
msgid "barcheck failed at: %s"
msgstr ""
msgid "unknown translator: `%s'"
msgstr ""
-#: translator-group.cc:78 translator-group.cc:91
+#: translator-group.cc:81 translator-group.cc:94
msgid "Program has no such type"
msgstr ""
-#: translator-group.cc:82 translator-group.cc:97
+#: translator-group.cc:85 translator-group.cc:100
#, c-format
msgid "Already contains: `%s'"
msgstr ""
-#: translator-group.cc:207
+#: translator-group.cc:210
#, c-format
msgid "Can't find or create `%s' called `%s'"
msgstr ""
-#: translator-group.cc:341
+#: translator-group.cc:323
#, c-format
msgid "Can't find or create: `%s'"
msgstr ""
msgid "no one to print a volta bracket"
msgstr ""
-#: word-wrap.cc:75
-#, c-format
-msgid "Ugh, this measure is too long, breakpoint: %d"
-msgstr ""
-
-#: word-wrap.cc:77
-msgid "Generating stupido solution"
-msgstr ""
-
-#: word-wrap.cc:95
-msgid "I don't fit; put me on Montignac"
-msgstr ""
-
-#: parser.yy:55
+#: parser.yy:60
#, c-format
msgid "Oldest supported input version: %s"
msgstr ""
-#: parser.yy:313
-msgid "Can't evaluate Scheme in safe mode"
-msgstr ""
-
-#: parser.yy:433 parser.yy:441 parser.yy:465
+#: parser.yy:433
msgid "Need a translator group for a context"
msgstr ""
-#: parser.yy:459
+#: parser.yy:454
msgid "Wrong type for property value"
msgstr ""
-#: parser.yy:515
+#: parser.yy:504
msgid "More than one music block"
msgstr ""
-#: parser.yy:575
-msgid "Need even number of args for shape array"
-msgstr ""
-
-#: parser.yy:723
+#: parser.yy:700
msgid "More alternatives than repeats. Junking excess alternatives."
msgstr ""
-#: parser.yy:946 parser.yy:1360 parser.yy:1380
+#: parser.yy:930 parser.yy:1335 parser.yy:1355
#, c-format
msgid "not a duration: %d"
msgstr ""
-#: parser.yy:948 parser.yy:1382
+#: parser.yy:932 parser.yy:1357
msgid "Can't abbreviate"
msgstr ""
-#: parser.yy:1076
+#: parser.yy:1052
msgid "Can't specify direction for this request"
msgstr ""
-#: parser.yy:1211 parser.yy:1219 parser.yy:1444
+#: parser.yy:1186 parser.yy:1194 parser.yy:1419
msgid "Have to be in Lyric mode for lyrics"
msgstr ""
-#: parser.yy:1391
+#: parser.yy:1366
msgid "Have to be in Note mode for notes"
msgstr ""
-#: parser.yy:1403
+#: parser.yy:1378
msgid "Can't abbreviate tuplet"
msgstr ""
-#: parser.yy:1450
+#: parser.yy:1425
msgid "Have to be in Chord mode for chords"
msgstr ""
-#: lexer.ll:155
+#: lexer.ll:158
msgid "EOF found inside a comment"
msgstr ""
-#: lexer.ll:169
+#: lexer.ll:172
msgid "\\maininput disallowed outside init files"
msgstr ""
-#: lexer.ll:199
+#: lexer.ll:202
#, c-format
msgid "undefined identifier: `%s'"
msgstr ""
#. backup rule
-#: lexer.ll:204
+#: lexer.ll:207
msgid "Missing end quote"
msgstr ""
#. backup rule
-#: lexer.ll:227 lexer.ll:231
+#: lexer.ll:229 lexer.ll:233
msgid "white expected"
msgstr ""
-#: lexer.ll:401
+#: lexer.ll:241
+msgid "Can't evaluate Scheme in safe mode"
+msgstr ""
+
+#: lexer.ll:436
#, c-format
msgid "invalid character: `%c'"
msgstr ""
-#: lexer.ll:457
+#: lexer.ll:492
#, c-format
msgid "unknown escaped string: `\\%s'"
msgstr ""
-#: lexer.ll:543
+#: lexer.ll:578
#, c-format
msgid "incorrect mudela version: %s (%s, %s)"
msgstr ""
-#: out/BLURB.hh:2
-msgid ""
-"LilyPond is a music typesetter. It produces beautiful sheet music\n"
-"using a high level description file as input. LilyPond is part of \n"
-"the GNU Project.\n"
-msgstr ""
-
-#: main.cc:90
+#: main.cc:91
msgid "write exact durations, e.g.: a4*385/384"
msgstr ""
-#: main.cc:93
+#: main.cc:94
msgid "ACC[:MINOR]"
msgstr ""
-#: main.cc:93
+#: main.cc:94
msgid "set key: ACC +sharps/-flats; :1 minor"
msgstr ""
-#: main.cc:94
+#: main.cc:95
msgid "assume no tuplets or double dots, smallest is 32"
msgstr ""
-#: main.cc:95
+#: main.cc:96
msgid "set FILE as default output"
msgstr ""
-#: main.cc:96
+#: main.cc:97
msgid "assume no tuplets"
msgstr ""
-#: main.cc:97
+#: main.cc:98
msgid "be quiet"
msgstr ""
-#: main.cc:98
+#: main.cc:99
msgid "DUR"
msgstr ""
-#: main.cc:98
+#: main.cc:99
msgid "set smallest duration"
msgstr ""
-#: main.cc:101
+#: main.cc:102
msgid "be verbose"
msgstr ""
-#: main.cc:103
+#: main.cc:104
msgid "assume no double dotted notes"
msgstr ""
-#: main.cc:110
+#: main.cc:111
#, c-format
msgid "Usage: %s [OPTION]... [FILE]"
msgstr ""
-#: main.cc:112
+#: main.cc:113
msgid "Translate MIDI-file to mudela"
msgstr ""
msgid "Settling columns..."
msgstr ""
-#: mudela-staff.cc:177
+#: mudela-staff.cc:178
msgid "% MIDI copyright:"
msgstr ""
-#: mudela-staff.cc:178
+#: mudela-staff.cc:179
msgid "% MIDI instrument:"
msgstr ""
msgstr ""
#. Maybe better not to translate these?
-#: mudela-stream.cc:76
+#: mudela-stream.cc:83
msgid "% Creator: "
msgstr ""
-#: mudela-stream.cc:81
+#: mudela-stream.cc:88
msgid "% Automatically generated"
msgstr ""
-#: mudela-stream.cc:90
+#: mudela-stream.cc:97
#, c-format
msgid "% from input file: "
msgstr ""
#: flower-debug.cc:17
msgid "Debug output disabled. Compiled with NPRINT."
-msgstr "Ontluis berichten zijn uitgeschakeld. Vertaald met NPRINT."
+msgstr "Ontluisberichten zijn uitgeschakeld. Vertaald met NPRINT."
#: getopt-long.cc:141
#, c-format
msgid " (Continuing; cross thumbs)"
msgstr " (Ga verder; duim maar)"
-#: warn.cc:40
-msgid "programming warning: "
-msgstr "programmeerwaarschuwing: "
-
#: afm.cc:129
#, c-format
msgid "Can't find character called: `%s'"
msgstr "geen balk te beëindigen"
#: beam-engraver.cc:87
-msgid "Already have a Beam"
-msgstr "Heb al een Balk"
+msgid "Already have a beam"
+msgstr "Heb al een balk"
#: beam-engraver.cc:149
msgid "unfinished beam"
msgid "(search path: `%s')"
msgstr "(zoekpad: `%s')"
-#: ineq-constrained-qp.cc:169
-#, c-format
-msgid "Ineq_constrained_qp::solve (): Constraint off by %f"
-msgstr "Ineq_constrained_qp::solve (): voorwaarde zit er %f naast"
-
-#: ineq-constrained-qp.cc:233
-msgid "Didn't converge!"
-msgstr "Convergeerde niet!"
-
-#: ineq-constrained-qp.cc:235
-msgid "too much degeneracy"
-msgstr "te veel degenaratie"
-
#: key-def.cc:31
msgid "No key name, assuming `C'"
msgstr "Geen toonsoort, ga uit van `C'"
#: main.cc:81 main.cc:99
msgid "don't timestamp the output"
-msgstr "geen tijdstempel in de uitvoer"
+msgstr "geen tijdsstempel in de uitvoer"
#: main.cc:82
msgid "switch on experimental features"
#: main.cc:85 main.cc:102
msgid "show warranty and copyright"
-msgstr "toon garantie en copyright"
+msgstr "toon garantie en auteursrechten"
#: main.cc:92
#, c-format
"versie 2, zoals gepubliceerd door de Free Software Foundation.\n"
"\n"
" Dit programma wordt verspreid in de hoop dat het nuttig zal zijn,\n"
-"maar ZONDER ENIGE GARANTIE; zelfs zonder de impliciete garantie voor\n"
-"het UITBATEN of als zijnde GESCHIKT VOOR EEN BEPAALD DOEL. Zie de GNU\n"
+"maar ZONDER ENIGE GARANTIE; zelfs zonder impliciete garantie voor\n"
+"UITBATING of als zijnde GESCHIKT VOOR EEN BEPAALD DOEL. Zie de GNU\n"
"Algemene Openbare Licentie voor details.\n"
"\n"
" Als het goed is, heeft u bij dit programma een exemplaar (zie het\n"
#: main.cc:96
msgid "assume no tuplets"
-msgstr "ga niet uit van n-olen"
+msgstr "gebruik geen antimetrische figuren"
#: main.cc:97
msgid "be quiet"
#: main.cc:103
msgid "assume no double dotted notes"
-msgstr "ga niet uit van dubbel gepunkteerde noten"
+msgstr "ga niet uit van dubbel gepunteerde noten"
#: main.cc:110
#, c-format
#: midi-parser.cc:64
msgid "zero length string encountered"
-msgstr "nul-lengte string tegengekomen"
+msgstr "string van lengte nul tegengekomen"
#: midi-score-parser.cc:44
msgid "MIDI header expected"
#: midi-track-parser.cc:328
msgid "unimplemented MIDI meta-event"
-msgstr "ongeïmplementeerde MIDI meta-gebeurtenis"
+msgstr "MIDI meta-gebeurtenis niet geïmplementeerd"
#: midi-track-parser.cc:333
msgid "invalid MIDI event"
(define staff-symbol-properties
(cons "Staff_symbol" (list
(list 'numberOfStaffLines number? 'line-count)
- (list 'staffLineLeading number? 'staff-space)
+ (list 'staffSpace number? 'staff-space)
)
)
)
(define (font-command name-mag)
(cons name-mag
(string-append "magfont"
- (string-encode-integer (hash (car name-mag) 1000000))
+ (string-encode-integer (hashq (car name-mag) 1000000))
"m"
(string-encode-integer (cdr name-mag)))
(else (begin (display "programming error: scm->string: ") (newline) "'"))
))
+(define (index-cell cell dir)
+ (if (equal? dir 1)
+ (cdr cell)
+ (car cell))
+ )
+
+
+;
+; How should a bar line behave at a break?
+;
+(define (break-barline glyph dir)
+ (let ((result (assoc glyph
+ '((":|:" . (":|" . "|:"))
+ ("|" . ("|" . ""))
+ ("|s" . (nil . "|"))
+ ("|:" . ("|" . "|:"))
+ ("|." . ("|." . nil))
+ (":|" . (":|" . nil))
+ ("||" . ("||" . nil))
+ (".|." . (".|." . nil))
+ ("scorebar" . (nil . "scorepostbreak"))
+ ("brace" . (nil . "brace"))
+ ("bracket" . (nil . "bracket"))
+ )
+ )))
+
+ (if (equal? result #f)
+ (ly-warn (string-append "Unknown bar glyph: `" glyph "'"))
+ (index-cell (cdr result) dir))
+ )
+ )
+
+
conversions.append ((1,3,17), conv, 'stemStyle -> flagStyle')
+if 1:
+ def conv (str):
+ return re.sub ('staffLineLeading'
+ 'staffSpace',
+ str)
+ conversions.append ((1,3,18), conv, "staffLineLeading -> staffSpace")
+
############################
'executive':{10: 167, 11: 175, 12: 184}}}
-options = [
+option_definitions = [
('DIM', '', 'default-mudela-fontsize', 'default fontsize for music. DIM is assumed to in points'),
('EXT', 'f', 'format', 'set format. EXT is one of texi and latex.'),
('', 'h', 'help', 'print help'),
w = 0
strs =[]
helps = []
+
for o in opts:
s = option_help_str (o)
strs.append ((s, o[3]))
Generate hybrid LaTeX input from Latex + mudela
Options:
""")
- sys.stdout.write (options_help_str (options))
+ sys.stdout.write (options_help_str (option_definitions))
sys.stdout.write (r"""Warning all output is written in the CURRENT directory
outname = ''
try:
- (sh, long) = getopt_args (__main__.options)
+ (sh, long) = getopt_args (__main__.option_definitions)
(options, files) = getopt.getopt(sys.argv[1:], sh, long)
except getopt.error, msg:
sys.stderr.write("error: %s" % msg)
#!@PYTHON@
# musedata = musedata.stanford.edu
+# musedata = COBOL for musicians.
import re
import sys
lib update all libraries\n\
release roll tarball and generate patch\n\
rpm build RedHat package\n\
- po make new po database\n\
- po-update update po database\n\
+ po make new translation Portable Object database\n\
+ po-update update translation Portable Object database\n\
tar same as dist\n\
TAGS genarate tagfiles\n\
zip build binary doze distribution\n\
$(outdir)/%.dvi: %.mf
- $(METAFONT) $<
+ $(METAFONT) "\nonstopmode; input $<;"
gftodvi $(basename $<)
mv $(basename $<).dvi $(outdir)
rm $(basename $<).*gf
rm $(basename $< ).*gf
$(outdir)/%.tfm: %.mf
- $(METAFONT) "\mode:=$(MFMODE); input $<;"
+ $(METAFONT) "\mode:=$(MFMODE); nonstopmode; input $<;"
mv $(@F) $(outdir)
rm $(basename $<).*gf $(basename $<).*log
\end{minipage}\par
\parskip\saveparskip
{\center{\large\theinstrument}\par}
- {\flushleft{\large\normalfont\scshape\thepiece}}
+ {\flushleft{\large\normalfont\scshape\thepiece}\par}
% \leavevmode
\global\let\theopus\relax%
\global\let\thepiece\relax%