]> git.donarmstrong.com Git - lilypond.git/commitdiff
Merge branch 'master' of ssh+git://gpercival@git.sv.gnu.org/srv/git/lilypond
authorGraham Percival <graham@percival-music.ca>
Thu, 12 Apr 2007 01:08:35 +0000 (18:08 -0700)
committerGraham Percival <graham@percival-music.ca>
Thu, 12 Apr 2007 01:08:35 +0000 (18:08 -0700)
30 files changed:
Documentation/user/advanced-notation.itely
Documentation/user/basic-notation.itely
Documentation/user/changing-defaults.itely
Documentation/user/cheatsheet.itely
Documentation/user/converters.itely
Documentation/user/instrument-notation.itely
Documentation/user/introduction.itely
Documentation/user/music-glossary.tely
Documentation/user/non-music.itely
Documentation/user/programming-interface.itely
Documentation/user/running.itely
Documentation/user/spacing.itely
Documentation/user/tutorial.itely
Documentation/user/tweaks.itely
Documentation/user/working.itely
VERSION
buildscripts/output-distance.py
input/lsr/spacing/alignment-vertical-spacing.ly
input/regression/graphviz.ly [new file with mode: 0644]
lily/grob-property.cc
ly/graphviz-init.ly [new file with mode: 0644]
ly/graphviz.ly [deleted file]
mf/parmesan-heads.mf
mf/parmesan-scripts.mf
mf/parmesan-timesig.mf
po/uk.po [new file with mode: 0644]
scm/define-grob-interfaces.scm
scm/define-grob-properties.scm
scm/fret-diagrams.scm
scm/graphviz.scm

index c4c2d4895ddb6a2da480ba0fe25ce07f8c7a0c6b..d8be87f2e44898f41668ef2e49194df1fc3a585d 100644 (file)
@@ -59,7 +59,7 @@ saved as UTF-8.  For more information, see @ref{Text encoding}.
 @cindex text items, non-empty
 @cindex non-empty texts
 
-It is possible to place arbitrary strings of text or @ref{Text markup}
+It is possible to place arbitrary strings of text or @ref{Text markup},
 above or below notes by using a string @code{c^"text"}.  By default,
 these indications do not influence the note spacing, but by using the
 command @code{\fatText}, the widths will be taken into account
@@ -304,7 +304,7 @@ The @code{\mark} command is primarily used for
 but it can also be used to put signs like coda,
 segno, and fermata on a bar line.  Use @code{\markup} to
 access the appropriate symbol (symbols are listed in
-@ref{The Feta font})
+@ref{The Feta font}).
 
 @lilypond[fragment,quote,ragged-right,verbatim,relative=2]
 c1 \mark \markup { \musicglyph #"scripts.ufermata" }
@@ -417,7 +417,7 @@ c1_\markup { "\special {weird} #characters" }
 @end lilypond
 
 @noindent
-See @ref{Overview of text markup commands} for a list of all
+See @ref{Overview of text markup commands}, for a list of all
 commands.
 
 @code{\markup} is primarily used for @internalsref{TextScript}s,
@@ -535,7 +535,7 @@ c'4^\markup{ \hspace #0 \raise #1.5 raised }
 Some situations (such as dynamic marks) have preset font-related
 properties.  If you are creating text in such situations, it
 is advisable to cancel those properties with
-@code{normal-text}.  See @ref{Overview of text markup commands}
+@code{normal-text}.  See @ref{Overview of text markup commands},
 for more details.
 
 
@@ -706,7 +706,7 @@ marks.  Note that the dynamic font only contains the characters
 Some situations (such as dynamic marks) have preset font-related
 properties.  If you are creating text in such situations, it
 is advisable to cancel those properties with
-@code{normal-text}.  See @ref{Overview of text markup commands}
+@code{normal-text}.  See @ref{Overview of text markup commands},
 for more details.
 
 @cindex make-dynamic-script
@@ -906,7 +906,7 @@ c4^\markup {
 @end lilypond
 
 @noindent
-See @ref{Text markup} for more details.
+See @ref{Text markup}, for more details.
 
 
 @seealso
@@ -1011,7 +1011,7 @@ c1
 @end lilypond
 
 @noindent
-See @ref{The Feta font} for a list of symbols which may be
+See @ref{The Feta font}, for a list of symbols which may be
 printed with @code{\musicglyph}.
 
 The horizontal location of rehearsal marks can be adjusted by
@@ -2549,7 +2549,7 @@ An x11 color is not necessarily exactly the same shade as a similarly
 named normal color.
 
 Notes in a chord cannot be colored with @code{\override}; use
-@code{\tweak} instead.  See @ref{Objects connected to the input}
+@code{\tweak} instead.  See @ref{Objects connected to the input},
 for details.
 
 
index 107f6f42ec83ee528d62c5453fc25bbea6b189e0..a105e4a242b9df89740f303345be465c5ea3a05b 100644 (file)
@@ -854,7 +854,7 @@ b16*4 c4
 
 @seealso
 
-This manual: @ref{Tuplets}
+This manual: @ref{Tuplets}.
 
 
 @node Bar check
@@ -1505,7 +1505,7 @@ can be specified by setting this property directly.
 
 Accidentals and key signatures often confuse new users, because
 unaltered notes get natural signs depending on the key signature.  For
-more information, see @ref{Accidentals} or @ref{Accidentals and key signatures}.
+more information, see @ref{Accidentals}, or @ref{Accidentals and key signatures}.
 
 @lilypond[quote,ragged-right,verbatim,relative=2,fragment]
 \key g \major
@@ -1571,7 +1571,7 @@ property.  Setting it to @code{#'()} uses fraction style for 4/4 and
 @end lilypond
 
 There are many more options for its layout.  See @ref{Ancient time
-signatures} for more examples.
+signatures}, for more examples.
 
 @code{\time} sets the property @code{timeSignatureFraction},
 @code{beatLength} and @code{measureLength} in the @code{Timing}
@@ -2267,7 +2267,7 @@ LilyPond inserts beams automatically
 
 When these automatic decisions are not good enough, beaming can be
 entered explicitly.  It is also possible to define beaming patterns
-that differ from the defaults.  See @ref{Setting automatic beam behavior}
+that differ from the defaults.  See @ref{Setting automatic beam behavior},
 for details.
 
 Individual notes may be marked with @code{\noBeam} to prevent them
index 717384d19dc60cafd040219e45e18c436296964c..a07c7df60d301bd7c1a6f33c1efe268a3c103788 100644 (file)
@@ -56,14 +56,14 @@ notation.  For example, giving each staff a separate time signature.
 @item
 Page layout: changing the appearance of the spacing, line
 breaks, and page dimensions.  These modifications are discussed
-in @ref{Non-musical notation} and @ref{Spacing issues}.
+in @ref{Non-musical notation}, and @ref{Spacing issues}.
 @end itemize
 
 Internally, LilyPond uses Scheme (a LISP dialect) to provide
 infrastructure.  Overriding layout decisions in effect accesses the
 program internals, which requires Scheme input.  Scheme elements are
 introduced in a @code{.ly} file with the hash mark
-@code{#}.@footnote{@ref{Scheme tutorial} contains a short tutorial
+@code{#}.@footnote{@ref{Scheme tutorial}, contains a short tutorial
 on entering numbers, lists, strings, and symbols in Scheme.}
 
 
@@ -889,7 +889,7 @@ Here @var{name} is the name of a graphical object, like @code{Stem} or
 @code{NoteHead}, and @var{property} is an internal variable of the
 formatting system (@q{grob property} or @q{layout property}).  The latter is a
 symbol, so it must be quoted.  The subsection @ref{Constructing a
-tweak} explains what to fill in for @var{name}, @var{property}, and
+tweak}, explains what to fill in for @var{name}, @var{property}, and
 @var{value}.  Here we only discuss the functionality of this command.
 
 The command
@@ -1637,7 +1637,7 @@ to output, so
 @end example
 
 @noindent
-does not change color.  See @ref{Displaying music expressions} for
+does not change color.  See @ref{Displaying music expressions}, for
 details.
 
 
@@ -1809,16 +1809,20 @@ one.  For example, if using this with @code{Hairpin},
 
 
 @item Some objects cannot be changed with @code{\override} for
-technical reasons. Examples of those are @code{NonMusicalPaperColumn}
+technical reasons.  Examples of those are @code{NonMusicalPaperColumn}
 and @code{PaperColumn}.  They can be changed with the
-@code{\outputProperty} function, which works similar to @code{\once
-\override}, but uses a different syntax,
+@code{\overrideProperty} function, which works similar to @code{\once
+\override}, but uses a different syntax.
 
 @example
-\outputProperty
+\overrideProperty
 #"Score.NonMusicalPaperColumn"  % Grob name
 #'line-break-system-details     % Property name
 #'((next-padding . 20))         % Value
 @end example
 
+Note, however, that @code{\override}, applied to
+@code{NoteMusicalPaperColumn} and @code{PaperColumn}, still works as
+expected within @code{\context} blocks.
+
 @end itemize
index 1bef3ccfebc123b77783438034da6b9f50f7c11d..1bdd40b20c3c56af5307b22fdcf63051e595e5ff 100644 (file)
@@ -155,8 +155,14 @@ a8-[ b-]
 @tab more staves
 @tab
 @lilypond[fragment]
-<< \new Staff { c'1 }
-  \new Staff { c'1 } >>
+<< \new Staff {
+     \set Staff.implicitTimeSignatureVisibility = #all-invisible
+     c'1
+   }
+   \new Staff {
+     \set Staff.implicitTimeSignatureVisibility = #all-invisible
+     c'1
+   } >>
 @end lilypond
 
   
@@ -169,12 +175,12 @@ c-> c-.
 @end lilypond
 
 
-@item @code{c\mf c\sfz}
+@item @code{c2\mf c\sfz}
 @tab dynamics
 @tab
 @lilypond[fragment,relative=2]
 \set Staff.implicitTimeSignatureVisibility = #all-invisible
-c\mf c\sfz
+c2\mf c\sfz
 @end lilypond
 
 
@@ -203,6 +209,7 @@ a\> a a\!
 @tab chord
 @tab
 @lilypond[fragment,relative=2]
+\set Staff.implicitTimeSignatureVisibility = #all-invisible
 <c e> 
 @end lilypond
 
@@ -220,6 +227,7 @@ f8 c2 d e
 @tab triplets
 @tab
 @lilypond[relative=1,fragment]
+\set Staff.implicitTimeSignatureVisibility = #all-invisible
 \times 2/3 { f8 g a }
 @end lilypond
 
@@ -228,6 +236,7 @@ f8 c2 d e
 @tab grace notes
 @tab
 @lilypond[relative=2,fragment]
+\set Staff.implicitTimeSignatureVisibility = #all-invisible
 \context Voice { \grace b16 c4 }
 @end lilypond
 
@@ -248,6 +257,7 @@ twinkle
 @tab lyric hyphen 
 @tab
 @lilypond[fragment,relative=2]
+\set Staff.implicitTimeSignatureVisibility = #all-invisible
 <<
    { g'1 g }
   \new Lyrics \lyricsto "" { twin -- kle }
@@ -258,6 +268,7 @@ twinkle
 @tab chords 
 @tab
 @lilypond[fragment,relative=2]
+\set Staff.implicitTimeSignatureVisibility = #all-invisible
 \chordmode { c:dim f:maj7 }
 @end lilypond
 
@@ -272,6 +283,7 @@ twinkle
 @tab polyphony
 @tab
 @lilypond[fragment,relative=2]
+\set Staff.implicitTimeSignatureVisibility = #all-invisible
 \context Staff <<{e f} \\ {c d}>>
 @end lilypond
 
index bc92313afaf8fd6ce06f9b6e297ce4e6b907f350..d8a3d8c2d669523c0aece9a3956c892eb7e25349 100644 (file)
@@ -75,7 +75,7 @@ midi2ly [@var{option}]@dots{} @var{midi-file}
 @end example
 
 Note that by @q{command-line}, we mean the command line of the
-operating system.  See @ref{Converting from other formats} for
+operating system.  See @ref{Converting from other formats}, for
 more information about this.
 
 The following options are supported by @command{midi2ly}.
@@ -147,7 +147,7 @@ etf2ly [@var{option}]@dots{} @var{etf-file}
 @end example
 
 Note that by @q{command-line}, we mean the command line of the
-operating system.  See @ref{Converting from other formats} for
+operating system.  See @ref{Converting from other formats}, for
 more information about this.
 
 The following options are supported by @command{etf2ly}:
@@ -177,7 +177,7 @@ for representing music notation.
 files, and writes it to a .ly file.  It is invoked from the command-line.
 
 Note that by @q{command-line}, we mean the command line of the
-operating system.  See @ref{Converting from other formats} for
+operating system.  See @ref{Converting from other formats}, for
 more information about this.
 
 The following options are supported by @command{musicxml2ly}:
index 61473e29e4e931a88ce62dc9b70ed3c425b250e1..d9583caff3999b26a5b5dd4edec1843de805e72f 100644 (file)
@@ -221,7 +221,7 @@ c\sostenutoDown d e c, f g a\sostenutoUp
 
 @seealso
 
-In this manual: @ref{Laissez vibrer ties}
+In this manual: @ref{Laissez vibrer ties}.
 
 @node Staff switch lines
 @subsection Staff switch lines
@@ -818,7 +818,7 @@ glyph.
 To enter lyrics with characters from non-English languages, or with
 accented and special characters (such as the heart symbol or slanted quotes),
 simply insert the characters directly into the input file and save
-it with utf-8 encoding.  See @ref{Text encoding} for more info.
+it with utf-8 encoding.  See @ref{Text encoding}, for more info.
 
 @lilypond[quote,ragged-right,fragment,verbatim]
 \relative { e4 f e d e f e2 }
@@ -2550,12 +2550,12 @@ the proper note heads, so there is no need to explicitly set the
 note head style.  Still, the note head style can be set, e.g., to
 @code{vaticana_punctum} to produce punctum neumes.  Similarly, a
 @internalsref{Mensural_ligature_engraver} is used to automatically
-assemble mensural ligatures.  See @ref{Ligatures} for how ligature
+assemble mensural ligatures.  See @ref{Ligatures}, for how ligature
 engravers work.
 
 @seealso
 
-@ref{Note head styles} gives an overview over all available note head styles.
+@ref{Note head styles}, gives an overview over all available note head styles.
 
 
 @node Ancient accidentals
@@ -2618,9 +2618,9 @@ controlled by the @code{glyph-name-alist} property of the
 
 @seealso
 
-In this manual: @ref{Pitches}, @ref{Cautionary accidentals} and
-@ref{Automatic accidentals} give a general introduction of the use of
-accidentals.  @ref{Key signature} gives a general introduction of
+In this manual: @ref{Pitches}, @ref{Cautionary accidentals}, and
+@ref{Automatic accidentals}, give a general introduction of the use of
+accidentals.  @ref{Key signature}, gives a general introduction of
 the use of key signatures.
 
 Program reference: @internalsref{KeySignature}.
@@ -2660,7 +2660,7 @@ There are no rests in Gregorian Chant notation; instead, it uses
 
 @seealso
 
-In this manual: @ref{Rests} gives a general introduction into the use of
+In this manual: @ref{Rests}, gives a general introduction into the use of
 rests.
 
 
@@ -3033,7 +3033,7 @@ The following examples show the differences in style,
 
 @seealso
 
-This manual: @ref{Time signature} gives a general introduction to
+This manual: @ref{Time signature}, gives a general introduction to
 the use of time signatures.
 
 @refbugs
index f1bf39a05522d6bf50645a162483552a37e7ff6e..554c039e1724082e63484610757220888e15098c 100644 (file)
@@ -697,72 +697,73 @@ The manual is divided into the following chapters:
 @ifhtml
 The
 @end ifhtml
-@emph{@ref{Tutorial}}
+@emph{@ref{Tutorial}},
 gives a gentle introduction to typesetting music.  First time
 users should start here.
 
 @item
-@emph{@ref{Putting it all together}}
+@emph{@ref{Putting it all together}},
 explains some general concepts about the lilypond file format.  If
 you are not certain where to place a command, read this chapter!
 
 @item
-@emph{@ref{Working on LilyPond projects}}
+@emph{@ref{Working on LilyPond projects}},
 discusses practical uses of LilyPond and how to avoid some common
 problems.
 
 @item
-@emph{@ref{Tweaking output}}
+@emph{@ref{Tweaking output}},
 shows how to change the default engraving that LilyPond
 produces.
 
 @item
-@emph{@ref{Basic notation}}
+@emph{@ref{Basic notation}},
 discusses topics grouped by notation construct.  This section gives
 details about basic notation that will be useful in almost any
 notation project.
 
 @item
-@emph{@ref{Instrument-specific notation}}
+@emph{@ref{Instrument-specific notation}},
 discusses topics grouped by notation construct.  This section gives
 details about special notation that will only be useful for particular
 instrument (or vocal) groups.
 
 @item
-@emph{@ref{Advanced notation}}
+@emph{@ref{Advanced notation}},
 discusses topics grouped by notation construct.  This section gives
 details about complicated or unusual notation.
 
 @item
-@emph{@ref{Changing defaults}}
+@emph{@ref{Changing defaults}},
 explains how to fine tune layout.
 
 @item
-@emph{@ref{Non-musical notation}}
+@emph{@ref{Non-musical notation}},
 discusses non-musical output such as titles, multiple movements,
 and how to select which MIDI instruments to use.
 
 @item
-@emph{@ref{Spacing issues}}
+@emph{@ref{Spacing issues}},
 discusses issues which affect the global output, such as selecting
 paper size or specifying page breaks.
 
 @item
-@emph{@ref{Interfaces for programmers}}
+@emph{@ref{Interfaces for programmers}},
 explains how to create music functions.
 
 @item
-@emph{@ref{Running LilyPond}}
+@emph{@ref{Running LilyPond}},
 shows how to run LilyPond and its helper programs.  In addition, this
 section explains how to upgrade input files from previous versions of
 LilyPond.
 
 @item
-@emph{@ref{LilyPond-book}} explains the details behind creating
+@emph{@ref{LilyPond-book}},
+explains the details behind creating
 documents with in-line music examples, like this manual.
 
 @item
-@emph{@ref{Converting from other formats}}
+@emph{@ref{Converting from other formats}},
 explains how to run the conversion programs.  These programs are
 supplied with the LilyPond package, and convert a variety of music
 formats to the @code{.ly} format.
@@ -771,39 +772,39 @@ formats to the @code{.ly} format.
 @ifhtml
 The
 @end ifhtml
-@emph{@ref{Literature list}}
+@emph{@ref{Literature list}},
 contains a set of useful reference books for those who wish to know
 more on notation and engraving.
 
 @item
 The
-@emph{@ref{Scheme tutorial}}
+@emph{@ref{Scheme tutorial}},
 presents a short introduction to Scheme, the programming
 language that music functions use.
 
 @item
-@emph{@ref{Notation manual tables}}
+@emph{@ref{Notation manual tables}},
 are a set of tables showing the chord names, MIDI instruments,
 a list of color names, and the Feta font.
 
 @item
-@emph{@ref{Templates}}
+@emph{@ref{Templates}},
 of LilyPond pieces.  Just cut and paste a
 template into a file, add notes, and you're done!
 
 @item
 The
-@emph{@ref{Cheat sheet}}
+@emph{@ref{Cheat sheet}},
 is a handy reference of the most common LilyPond commands.
 
 @item
 The
-@emph{@ref{LilyPond command index}}
+@emph{@ref{LilyPond command index}},
 is an index of all LilyPond @code{\commands}.
 
 @item
 The
-@emph{@ref{LilyPond index}}
+@emph{@ref{LilyPond index}},
 is a complete index.
 
 @end itemize
index a2c7b04e108a627a2dff8c98026ebbb09ebebe8d..984aae2a14a357924c4773ff0a478f446a9263f4 100644 (file)
@@ -3615,7 +3615,7 @@ melodic line of the contrapunctal web.
 @node pause
 @section pause
 
-@ref{fermata}
+@ref{fermata}.
 
 @node pennant
 @section pennant
index c8754c5bb1e7c42624b81654aa27d0ed4d1d7fbf..65e49e8351c23001470d1abac37ab6269ca672f4 100644 (file)
@@ -74,7 +74,7 @@ c'4
 @noindent
 will result in a parsing error.  Instead, music should be inside other
 expressions, which may be put in a file by themselves.  Such
-expressions are called toplevel expressions; see @ref{File structure} for
+expressions are called toplevel expressions; see @ref{File structure}, for
 a list of all such expressions.
 
 
@@ -557,7 +557,7 @@ Centered at the bottom of the last page.
 @end table
 
 Here is a demonstration of the fields available.  Note that you
-may use any @ref{Text markup} commands in the header.
+may use any @ref{Text markup}, commands in the header.
 
 @lilypond[quote,verbatim,line-width=11.0\cm]
 \paper {
index 7b59a3e8c5d4968140b791def06b76e4efafd4e0..e55d26471bb677b0bbf0ceadd2b2346ccea27240 100644 (file)
@@ -377,7 +377,7 @@ been written as
 
 Scheme code is evaluated as soon as the parser encounters it.  To
 define some Scheme code in a macro (to be called later), use
-@ref{Void functions} or
+@ref{Void functions}, or
 
 @example
 #(define (nopc)
@@ -1111,7 +1111,7 @@ to the @code{interpret-markup} function, with the @code{layout} and
 
 Note: there is now an internal command @code{\smallCaps} which can
 be used to set text in small caps.  See
-@ref{Overview of text markup commands} for details.
+@ref{Overview of text markup commands}, for details.
 
 
 
index 981e71867a5d2fcd8e5c7a418361215b82bf3a57..0644f342205cbc878f03f7f367bf07feb97be852 100644 (file)
@@ -595,7 +595,7 @@ bug by following the directions on
 
 @uref{http://lilypond.org/web/devel/participating/bugs}
 
-Please construct submit @ref{Minimal examples} of bug reports.  We do not
+Please construct submit @ref{Minimal examples}, of bug reports.  We do not
 have the resources to investigate reports which are not as small as possible.
 
 
index 708e8d09811487b77916560643110b7d8962e024..fbeb4c9dfd380360bdc87b5938ff4bb028089ede 100644 (file)
@@ -508,7 +508,7 @@ layout.
 
 @seealso
 
-This manual: @ref{Changing context default settings}
+This manual: @ref{Changing context default settings}.
 
 
 @node Displaying spacing
@@ -1788,7 +1788,7 @@ means that, by default, @code{uniform-stretching} is either turned on for the
 entire score or turned off for the entire score.  We can, however,
 override this behavior and turn on different spacing features at
 different places in the score.  We do this with the command
-@code{\newSpacingSection}.  See @ref{New spacing area} for more info.
+@code{\newSpacingSection}.  See @ref{New spacing area}, for more info.
 
 Next we examine the effects of the @code{Separating_line_group_engraver} and
 see why proportional scores frequently remove this engraver.  The following
index ccdb7a739049c12a7f0925ddbe643d4f8a1d905e..3c47c95bc7079f33b0c1aecaa5b482ef56d55981 100644 (file)
@@ -114,8 +114,8 @@ line to avoid ambiguities.  These may be omitted in some examples in this
 manual, but don't forget them in your own music!
 
 @cindex Case sensitive
-In addition, LilyPond input is @strong{case sensitive}.  @code{ @{ c d e @} }
-is valid input; @code{ @{ C D E @} } will produce an error message.
+In addition, LilyPond input is @strong{case sensitive}.  @code{ @{c d e @}}
+is valid input; @code{@{ C D E @}} will produce an error message.
 
 @sp 1
 
@@ -126,7 +126,7 @@ and how to view or print the output.
 
 @subsubheading MacOS X
 
-If you double click LilyPond.app, it will open with an example
+If you double click @code{LilyPond.app}, it will open with an example
 file.  Save it, for example, to @file{test.ly} on your Desktop, and
 then process it with the menu command @samp{Compile > Typeset File}.
 The resulting PDF file will be displayed on your screen.
@@ -135,7 +135,7 @@ Be warned that the first time you ever run LilyPond, it will take a minute
 or two because all of the system fonts have to be analyzed first.
 
 For future use of LilyPond, you should begin by selecting @q{New}
-or "@q{Open}.  You must save your file before typesetting it.  If any errors
+or @q{Open}.  You must save your file before typesetting it.  If any errors
 occur in processing, please see the log window.
 
 @subsubheading Windows
@@ -158,7 +158,7 @@ produces a @file{.log} file that contains some information on what LilyPond
 has done to the file.  If any errors occur, please examine this file.
 
 Note that there are several other text editors available, with better
-support for LilyPond, see @ref{Editor support} for more information.
+support for LilyPond, see @ref{Editor support}, for more information.
 
 @subsubheading Unix
 
@@ -168,7 +168,7 @@ example, you could open an xterm and execute
 is a @code{LilyPond-mode} for Emacs addicts.  If they have not been
 installed already, refer to the file @file{INSTALL.txt}.  The
 easiest editing environment is @file{LilyPondTool}.  See
-@ref{Editor support} for more information.}.  In your
+@ref{Editor support}, for more information.}.  In your
 text editor, enter the following input and save the file as
 @file{test.ly}
 
@@ -369,7 +369,7 @@ Here is a small example showing all these elements together:
 @quotation
 @table @asis
 @item Entering pitches and durations
-see @ref{Pitches} and @ref{Durations}.
+see @ref{Pitches}, and @ref{Durations}.
 @item Rests
 see @ref{Rests}.
 @item Time signatures and other timing commands
@@ -386,7 +386,7 @@ see @ref{Clef}.
 LilyPond input files are treated like files in most programming languages:
 they are case sensitive, white-space insensitive, expressions are
 formed with curly braces @{ @}, and comments are denoted with @code{%} or
-@code{%@{ .. %@}}.
+@code{%@{ ... %@}}.
 
 If the previous sentence sounds like nonsense, don't worry!  We'll explain
 what all these terms mean:
@@ -397,13 +397,13 @@ what all these terms mean:
 @item @strong{Case sensitive}:
 it matters whether you enter a letter
 in lower case (i.e. @code{a, b, s, t}) or upper case (i.e.
-@code{A, B, S, T}).  Notes are lower case: @code{ @{ c d e @} }
-is valid input; @code{ @{ C D E @} } will produce an error message.
+@code{A, B, S, T}).  Notes are lower case: @code{@{ c d e @}}
+is valid input; @code{@{ C D E @}} will produce an error message.
 
 @item @strong{Whitespace insensitive}:
 it does not matter how many
-spaces (or new lines) you add.  @code{ @{ c d e @}} means the same thing
-as @code{ @{ c @tie{} @tie{} @tie{} d e @} } and
+spaces (or new lines) you add.  @code{@{ c d e @}} means the same thing
+as @code{@{ c @tie{} @tie{} @tie{} d e @}} and
 @example
           @{
 c                        d
@@ -427,7 +427,7 @@ parenthesis @samp{()} in mathematics.  The braces should
 be surrounded by a space unless they are at the beginning or end of a
 line to avoid ambiguities.
 
-A function (such as @code{\relative @{ @}} ) also counts as a single
+A function (such as @code{\relative @{ @}}) also counts as a single
 music expression.
 
 @cindex comments
@@ -610,14 +610,14 @@ e
 Adding all alterations explicitly might require a little more effort
 when typing, but the advantage is that transposing is easier, and
 accidentals can be printed according to different conventions.  See
-@ref{Automatic accidentals} for some examples how accidentals can be printed
+@ref{Automatic accidentals}, for some examples how accidentals can be printed
 according to different rules.
 
 @moreinfo
 @quotation
 @table @asis
 @item Accidentals
-see @ref{Accidentals} and @ref{Automatic accidentals}.
+see @ref{Accidentals}, and @ref{Automatic accidentals}.
 @item Key signature
 see @ref{Key signature}.
 @end table
@@ -1001,7 +1001,7 @@ sign in mathematics.  The formula @math{(4+5)} is an expression, so
 Time signatures entered in one staff affects all other staves, but
 the key signature of one staff does @emph{not} affect other
 staves@footnote{This behavior may be changed if desired; see
-@ref{Changing defaults} for details.}.
+@ref{Changing defaults}, for details.}.
 
 @lilypond[quote,ragged-right,verbatim]
 \relative c'' {
@@ -1459,7 +1459,7 @@ places.  The following example uses the above variables:
 @subsection After the tutorial
 
 After finishing the tutorial, you should probably try writing a
-piece or two.  Start with one of the @ref{Templates} and
+piece or two.  Start with one of the @ref{Templates}, and
 add notes.  If you need any notation that was not covered in the
 tutorial, look at the Notation Reference, starting with
 @ref{Basic notation}.  If you want to write for an instrument
index 6d24d3a4225f396c2e5434c3c823690c88a3038d..8c681e5a61c89e8ece0e0ddd1bbdeb245b984c1a 100644 (file)
@@ -377,7 +377,7 @@ of room left on those.
 
 When investigating layout issues, @code{annotate-spacing} is
 an invaluable tool.  This command prints the values of various
-layout spacing commands; see @ref{Displaying spacing} for more
+layout spacing commands; see @ref{Displaying spacing}, for more
 details.  From the output of @code{annotate-spacing}, we can
 see which margins we may wish to alter.
 
@@ -431,7 +431,7 @@ a system.
 
 @item
 Alter the horizontal spacing via @code{SpacingSpanner}.  See
-@ref{Changing horizontal spacing} for more details.
+@ref{Changing horizontal spacing}, for more details.
 
 @lilypond[verbatim,quote]
 \score {
@@ -461,7 +461,7 @@ We have seen how LilyPond output can be heavily modified using
 commands like
 @code{\override TextScript #'extra-offset = ( 1 . -1)}.  But
 we have even more power if we use Scheme.  For a full explantion
-of this, see the @ref{Scheme tutorial} and
+of this, see the @ref{Scheme tutorial}, and
 @ref{Interfaces for programmers}.
 
 We can use Scheme to simply @code{\override} commands,
index 65bf9a656bc8addbc227ebcb0cfa46b3877f4cd5..8a416f7ad7fea23364fda4807ceac99cece5fdf3 100644 (file)
@@ -77,7 +77,7 @@ quite frustrating to try to remember which version of LilyPond you were
 using a few years ago.  @code{convert-ly} requires you to declare
 which version of LilyPond you used.
 
-@item @strong{Include checks}: @ref{Bar check}, @ref{Octave check} and
+@item @strong{Include checks}: @ref{Bar check}, @ref{Octave check}, and
 @ref{Barnumber check}.  If you
 include checks every so often, then if you make a mistake, you can pinpoint
 it quicker.  How often is @q{every so often}?  It depends on the complexity
@@ -110,7 +110,7 @@ phrase (instead of just @code{c d e}) you can save yourself some
 problems if you rearrange your music later.
 
 @item @strong{Separate tweaks} from music definitions.  See
-@ref{Saving typing with identifiers and functions} and
+@ref{Saving typing with identifiers and functions}, and
 @ref{Style sheets}.
 
 @end itemize
@@ -295,7 +295,7 @@ instead of making changes throughout every @code{.ly} file.
 @section Style sheets
 
 The output that LilyPond produces can be heavily modified; see
-@ref{Tweaking output} for details.  But what if you have many
+@ref{Tweaking output}, for details.  But what if you have many
 files that you want to apply your tweaks to?  Or what if you
 simply want to separate your tweaks from the actual music?  This
 is quite easy to do.
diff --git a/VERSION b/VERSION
index 4db62148a37675663bda8020758d0687543dbded..ff50c35689289a183adbd9f6757efebeb99da4d5 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -1,6 +1,6 @@
 PACKAGE_NAME=LilyPond
 MAJOR_VERSION=2
 MINOR_VERSION=11
-PATCH_LEVEL=21
+PATCH_LEVEL=22
 MY_PATCH_LEVEL=
 
index 483fdb84b53cf32ef6411b8630b589b05f263557..c60e965baf91c6ea88f957382e1d9136e0164e6c 100644 (file)
@@ -91,7 +91,7 @@ def compare_png_images (old, new, dest_dir):
 
     system ("convert  -depth 8 %(dir)s/diff.png -blur 0x3 -negate -channel alpha,blue -type TrueColorMatte -fx 'intensity'    %(dir)s/matte.png" % locals ())
 
-    system ("composite -quality 65 %(dir)s/matte.png %(new)s %(dest)s" % locals ())
+    system ("composite -compose atop -quality 65 %(dir)s/matte.png %(new)s %(dest)s" % locals ())
 
 
 ################################################################
@@ -523,7 +523,7 @@ class ProfileFileLink (FileCompareLink):
 
         dist = 0.0
         factor = {
-            'time': 1.0 ,
+            'time': 0.1,
             'cells': 5.0,
             }
         
@@ -1107,7 +1107,7 @@ def test_basic_compare ():
         
     names = [d['name'] for d in dicts]
 
-    system ('lilypond -ddump-profile -dseparate-log-files -ddump-signatures --png -eps ' + ' '.join (names))
+    system ('lilypond -ddump-profile -dseparate-log-files -ddump-signatures --png -dbackend=eps ' + ' '.join (names))
     
 
     multipage_str = r'''
index 8c70b972acb545e7f331f6286fc76f744a343197..29d8981589f0e7dc97879a4149d27a8f8343b048 100644 (file)
@@ -4,14 +4,12 @@
 By setting properties in @code{NonMusicalPaperColumn}, vertical spacing
 of alignments can be adjusted per system.
 
-
 By setting @code{alignment-extra-space} or
 @code{fixed-alignment-extra-space} an individual system may be
 stretched vertically.
 
-
-For technical reasons, @code{overrideProperty} has to be used for
-setting properties on individual objects. @code{override} in a
+For technical reasons, @code{\overrideProperty} has to be used for
+setting properties on individual objects.  @code{\override} in a
 @code{\context} block may still be used for global overrides. 
 " }
 
diff --git a/input/regression/graphviz.ly b/input/regression/graphviz.ly
new file mode 100644 (file)
index 0000000..1e00e99
--- /dev/null
@@ -0,0 +1,27 @@
+\header {
+  texidoc = "The graphviz feature draws dependency graphs for grob properties."
+
+  }
+
+\version "2.11.21"
+\include "graphviz-init.ly"
+
+#(whitelist-grob 'NoteHead)
+#(whitelist-grob 'Stem)
+#(whitelist-grob "NoteHead")
+#(whitelist-grob "Stem")
+
+#(map whitelist-symbol '(stencil style duration-log
+                        stem-attachment end-position staff-position
+                        glyph-name direction))
+
+
+\book { \score {
+  c'4
+} }
+
+
+#(graph-write graph (current-error-port))
+#(ly:set-grob-modification-callback #f)
+#(ly:set-property-cache-callback #f)
+
index d7f29aed3db1e29b7d9ade31f27ed6178dad5f64..1fcded7df749e3197ce2e2031a1dced00bc39317 100644 (file)
@@ -23,9 +23,9 @@
 
 Protected_scm grob_property_callback_stack = SCM_EOL;
 
-#ifndef NDEBUG
 extern bool debug_property_callbacks;
 
+#ifndef NDEBUG
 static void
 print_property_callback_stack ()
 {
@@ -33,11 +33,18 @@ print_property_callback_stack ()
   for (SCM s = grob_property_callback_stack; scm_is_pair (s); s = scm_cdr (s))
     message (_f ("%d: %s", frame++, ly_scm_write_string (scm_car (s)).c_str ()));
 }
-
+#endif
 
 static SCM modification_callback = SCM_EOL;
 static SCM cache_callback = SCM_EOL;
 
+
+/*
+
+FIXME: this should use ly:set-option interface instead.
+
+*/
+
 LY_DEFINE (ly_set_grob_modification_callback, "ly:set-grob-modification-callback",
           1, 0, 0, (SCM cb),
           "Specify a procedure that will be called every time lilypond modifies "
@@ -49,9 +56,7 @@ LY_DEFINE (ly_set_grob_modification_callback, "ly:set-grob-modification-callback
           "the property to be changed and "
           "the new value for the property.")
 {
-  LY_ASSERT_TYPE (ly_is_procedure, cb, 1);
-
-  modification_callback = cb;
+  modification_callback =  (ly_is_procedure (cb)) ? cb : SCM_BOOL_F;
   return SCM_UNSPECIFIED;
 }
 
@@ -65,12 +70,10 @@ LY_DEFINE (ly_set_property_cache_callback, "ly:set-property-cache-callback",
           "the name of the callback that calculated the property and "
           "the new (cached) value of the property.")
 {
-  LY_ASSERT_TYPE (ly_is_procedure, cb, 1);
-  
-  cache_callback = cb;
+  cache_callback =  (ly_is_procedure (cb)) ? cb : SCM_BOOL_F;
   return SCM_UNSPECIFIED;
 }
-#endif
+
 
 void
 Grob::instrumented_set_property (SCM sym, SCM v,
@@ -86,6 +89,10 @@ Grob::instrumented_set_property (SCM sym, SCM v,
                             scm_from_int (line),
                             scm_from_locale_string (fun),
                             sym, v, SCM_UNDEFINED));
+#else
+  (void) file;
+  (void) line;
+  (void) fun;
 #endif
   
   internal_set_property (sym, v);
diff --git a/ly/graphviz-init.ly b/ly/graphviz-init.ly
new file mode 100644 (file)
index 0000000..3623d0a
--- /dev/null
@@ -0,0 +1,81 @@
+\version "2.11.15"
+
+#(use-modules (scm graphviz))
+
+#(define last-grob-action '())
+
+#(define sym-blacklist '())
+#(define sym-whitelist '())
+
+#(define file-line-blacklist '())
+#(define file-line-whitelist '())
+
+#(define grob-blacklist '())
+#(define grob-whitelist '())
+
+#(define (blacklist-symbol sym)
+  (set! sym-blacklist (cons sym sym-blacklist)))
+
+#(define (whitelist-symbol sym)
+  (set! sym-whitelist (cons sym sym-whitelist)))
+
+#(define (whitelist-grob str)
+  (set! grob-whitelist (cons str grob-whitelist)))
+
+#(define graph (make-graph (format "~a.dot" (ly:parser-output-name parser))))
+
+#(define (grob-name g)
+  (let* ((meta (ly:grob-property g 'meta))
+        (name-pair (assq 'name meta)))
+   (if (pair? name-pair)
+       (cdr name-pair)
+       #f)))
+
+% an event is relevant if
+% (it is on some whitelist or all whitelists are empty)
+% and
+% (it isn't on any blacklist)
+
+#(define (relevant? grob file line prop)
+  (let ((file-line `(,file . ,line)))
+   (and
+    (or
+     (= 0 (length file-line-whitelist) (length sym-whitelist) (length grob-whitelist))
+     (memq prop sym-whitelist)
+     (memq (grob-name grob) grob-whitelist)
+     (member file-line file-line-whitelist))
+    (and
+     (not (memq prop sym-blacklist))
+     (not (memq (grob-name grob) grob-blacklist))
+     (not (member file-line file-line-blacklist))))))
+
+#(define (grob-event-node grob label cluster)
+  (let ((node-id (add-node graph label cluster))
+       (prev (assv grob last-grob-action)))
+   (if (pair? prev)
+       (add-edge graph (cdr prev) node-id))
+   (set! last-grob-action (assv-set! last-grob-action grob node-id))))
+
+#(define (truncate-value val)
+  (let ((val-str (format "~a" val)))
+   (string-take val-str (min 50 (string-length val-str)))))
+
+#(define (grob-mod grob file line func prop val)
+  (let* ((val-str (truncate-value val))
+        (label (format "~a\\n~a:~a\\n~a <- ~a" (grob-name grob) file line prop val-str)))
+   (if (relevant? grob file line prop)
+       (grob-event-node grob label file))))
+
+#(define (grob-cache grob prop callback value)
+  (let* ((val-str (truncate-value value))
+        (label (format "caching ~a.~a\\n~a -> ~a" (grob-name grob) prop callback value)))
+   (if (relevant? grob #f #f prop)
+       (grob-event-node grob label #f))))
+
+#(define (grob-create grob file line func)
+  (let ((label (format "~a\\n~a:~a" (grob-name grob) file line)))
+   (grob-event-node grob label file)))
+
+#(ly:set-grob-modification-callback grob-mod)
+#(ly:set-property-cache-callback grob-cache)
+%#(ly:set-grob-creation-callback grob-create)
diff --git a/ly/graphviz.ly b/ly/graphviz.ly
deleted file mode 100644 (file)
index aafd30d..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-\version "2.11.15"
-
-#(use-modules (scm graphviz))
-
-#(define last-grob-action '())
-
-#(define sym-blacklist '())
-#(define sym-whitelist '())
-
-#(define file-line-blacklist '())
-#(define file-line-whitelist '())
-
-#(define grob-blacklist '())
-#(define grob-whitelist '())
-
-#(define (blacklist-symbol sym)
-  (set! sym-blacklist (cons sym sym-blacklist)))
-
-#(define (whitelist-symbol sym)
-  (set! sym-whitelist (cons sym sym-whitelist)))
-
-#(define (whitelist-grob str)
-  (set! grob-whitelist (cons str grob-whitelist)))
-
-#(define graph (make-graph "graph.dot"))
-
-#(define (grob-name g)
-  (let* ((meta (ly:grob-property g 'meta))
-        (name-pair (assq 'name meta)))
-   (if (pair? name-pair)
-       (cdr name-pair)
-       #f)))
-
-% an event is relevant if
-% (it is on some whitelist or all whitelists are empty)
-% and
-% (it isn't on any blacklist)
-
-#(define (relevant? grob file line prop)
-  (let ((file-line `(,file . ,line)))
-   (and
-    (or
-     (= 0 (length file-line-whitelist) (length sym-whitelist) (length grob-whitelist))
-     (memq prop sym-whitelist)
-     (memq (grob-name grob) grob-whitelist)
-     (member file-line file-line-whitelist))
-    (and
-     (not (memq prop sym-blacklist))
-     (not (memq (grob-name grob) grob-blacklist))
-     (not (member file-line file-line-blacklist))))))
-
-#(define (grob-event-node grob label cluster)
-  (let ((node-id (add-node graph label cluster))
-       (prev (assv grob last-grob-action)))
-   (if (pair? prev)
-       (add-edge graph (cdr prev) node-id))
-   (set! last-grob-action (assv-set! last-grob-action grob node-id))))
-
-#(define (truncate-value val)
-  (let ((val-str (format "~a" val)))
-   (string-take val-str (min 50 (string-length val-str)))))
-
-#(define (grob-mod grob file line func prop val)
-  (let* ((val-str (truncate-value val))
-        (label (format "~a\\n~a:~a\\n~a <- ~a" (grob-name grob) file line prop val-str)))
-   (if (relevant? grob file line prop)
-       (grob-event-node grob label file))))
-
-#(define (grob-cache grob prop callback value)
-  (let* ((val-str (truncate-value value))
-        (label (format "caching ~a.~a\\n~a -> ~a" (grob-name grob) prop callback value)))
-   (if (relevant? grob #f #f prop)
-       (grob-event-node grob label #f))))
-
-#(define (grob-create grob file line func)
-  (let ((label (format "~a\\n~a:~a" (grob-name grob) file line)))
-   (grob-event-node grob label file)))
-
-#(ly:set-grob-modification-callback grob-mod)
-#(ly:set-property-cache-callback grob-cache)
-%#(ly:set-grob-creation-callback grob-create)
index 551e3e3bd2ec48bc5f405d64b10d0abaabb87841..9e28de6dbabac7a047948ded6bb8fe79217fa754 100644 (file)
@@ -333,7 +333,7 @@ fet_endchar;
 % parameterized punctum
 def punctum_char (expr verbose_name, internal_name,
                  left_stem, right_stem, linea, cavum,
-                 straight, auctum, rev_auctum, direction_up,
+                 straight, auctum, rev_auctum, dir_up,
                  excentric, up_shift, down_shift, mag) =
 
        fet_beginchar(verbose_name, "s" & internal_name)
@@ -350,14 +350,14 @@ def punctum_char (expr verbose_name, internal_name,
                black_notehead_width# := wd#;
 
                % direction
-               save direction, direction_sign;
-               pair direction;
-               if direction_up:
-                       direction = up;
-                       direction_sign# = 1;
+               save dir, dir_sign;
+               pair dir;
+               if dir_up:
+                       dir = up;
+                       dir_sign# = 1;
                else:
-                       direction = down;
-                       direction_sign# = -1;
+                       dir = down;
+                       dir_sign# = -1;
                fi;
 
                % convexity and eccentricity
@@ -376,8 +376,8 @@ def punctum_char (expr verbose_name, internal_name,
                        u_eccentricity# = 0.0ht#; % dummy
                fi;
                save convexity, eccentricity;
-               convexity# = direction_sign# * u_convexity#;
-               eccentricity# = direction_sign# * u_eccentricity#;
+               convexity# = dir_sign# * u_convexity#;
+               eccentricity# = dir_sign# * u_eccentricity#;
 
                % y shift offset
                save yoffs;
@@ -415,8 +415,8 @@ def punctum_char (expr verbose_name, internal_name,
                                max(0, 1.0*convexity#, 1.0*eccentricity#);
                        box_bt# = yoffs_bt# +
                                min(0, 1.0*convexity#, 1.0*eccentricity#);
-                       p = z1a .. {right}z2a .. {direction}z3a --
-                           z3b{-direction} .. z2b{left} .. z1b -- cycle;
+                       p = z1a .. {right}z2a .. {dir}z3a --
+                           z3b{-dir} .. z2b{left} .. z1b -- cycle;
                elseif excentric:
                        z1a = (0.00wd + linethickness/2,
                               yoffs_bt - 1.0*convexity);
@@ -427,8 +427,8 @@ def punctum_char (expr verbose_name, internal_name,
                                max(-1.0*convexity#, 1.4*convexity#, 0);
                        box_bt# = yoffs_bt# +
                                min(-1.0*convexity#, 1.4*convexity#, 0);
-                       p = z1a{direction} .. z2a{right} .. z3a --
-                           z3b .. {left}z2b .. {-direction}z1b -- cycle;
+                       p = z1a{dir} .. z2a{right} .. z3a --
+                           z3b .. {left}z2b .. {-dir}z1b -- cycle;
                else:
                        z1a = (0.00wd + linethickness/2, yoffs_bt);
                        z2a = (0.21wd, yoffs_bt + 1.0*convexity);
@@ -517,7 +517,7 @@ def inclinatum_char(expr verbose_name, internal_name,
                        za = (0, -0.25*head_height)
                                rotated -(alpha# + off_angle)
                                shifted (0.48 head_width, -0.02 head_width);
-                       undraw za;
+                       undrawdot za;
                fi;
 
                if auctum:
index b9caf5d6e259f0a3f6f4ba3773f88058b14d73a9..99c3547c370d3587a4d32f340c6d43c8e245e09c 100644 (file)
@@ -91,7 +91,7 @@ fet_beginchar("augmentum", "augmentum")
        diameter# = 0.25 staff_space#;
        define_pixels(diameter);
        pickup pencircle scaled diameter;
-       draw (0,0);
+       drawdot (0,0);
        set_char_box(diameter#/2, diameter#/2, diameter#/2, diameter#/2);
 fet_endchar;
 
index d02840b57ffdd4e2ca0cd682e9811df4f85c4f56..ef5539d615632a4357c78055aebe84b225b6eabb 100644 (file)
@@ -87,7 +87,7 @@ def mensural_timesig (expr verbose_name, internal_name,
                fi;
                if dotted:
                        pickup pencircle scaled 4 linethickness;
-                       draw (0,0);
+                       drawdot (0,0);
                fi;
                currentpicture := currentpicture shifted 0.5(mensural_Cdiameter + mensural_Cthickness, 0);
        fet_endchar;
@@ -181,7 +181,7 @@ def neomensural_timesig (expr verbose_name, internal_name,
                fi;
                if dotted:
                        pickup pencircle scaled 4 linethickness;
-                       draw (0,0);
+                       drawdot (0,0);
                fi;
                currentpicture := currentpicture shifted 0.5(neomensural_Cdiameter + neomensural_Cthickness, 0);
        fet_endchar;
diff --git a/po/uk.po b/po/uk.po
new file mode 100644 (file)
index 0000000..3eaa1a5
--- /dev/null
+++ b/po/uk.po
@@ -0,0 +1,2108 @@
+# Ukrainian translations for lilypond package
+# Переклад українською для пакету lilypond.
+# Copyright (C) 2007 THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Youri Bulka <jblk@icmail.net>, 2007.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: lilypond 2.9.26\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2006-03-20 12:53+0100\n"
+"PO-Revision-Date: 2007-04-01 20:49+0300\n"
+"Last-Translator: Youri Bulka <jblk@icmail.net>\n"
+"Language-Team: Ukrainian <translation-team-uk@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+#: convertrules.py:9
+#, python-format
+msgid "Not smart enough to convert %s"
+msgstr "Не достатньо розумний щоб переконвертувати %s"
+
+#: convertrules.py:10
+msgid "Please refer to the manual for details, and update manually."
+msgstr "Оновіть вручну (див. підручник користувача задля деталей)."
+
+#: convertrules.py:11
+#, python-format
+msgid "%s has been replaced by %s"
+msgstr "%s було замінено на %s"
+
+#: convertrules.py:2395
+msgid "LilyPond source must be UTF-8"
+msgstr "Джерельний файл lilypond'у повинен бути у кодуванні UTF-8"
+
+#: convertrules.py:2398
+msgid "Try the texstrings backend"
+msgstr "Спробуйте тип фінальної обробки textstrings (backend)"
+
+#: convertrules.py:2401
+#, python-format
+msgid "Do something like: %s"
+msgstr "Зробіть щось на зразок: %s"
+
+#: convertrules.py:2404
+msgid "Or save as UTF-8 in your editor"
+msgstr "Або збережіть як UTF-8 у вашому текстовому редакторі"
+
+#: fontextract.py:25
+#, python-format
+msgid "Scanning %s"
+msgstr "Сканування %s"
+
+#: fontextract.py:70
+#, python-format
+msgid "Extracted %s"
+msgstr "Видобуто %s"
+
+#: fontextract.py:85
+#, python-format
+msgid "Writing fonts to %s"
+msgstr "Записування шрифтів у %s"
+
+#: lilylib.py:82
+#, python-format
+msgid "Invoking `%s'"
+msgstr "Запуск `%s'"
+
+#: lilylib.py:84
+#, python-format
+msgid "Running %s..."
+msgstr "Запуск %s..."
+
+#: lilylib.py:165
+#, python-format
+msgid "Usage: %s\n"
+msgstr "Використання: %s\n"
+
+#: abc2ly.py:1357
+msgid ""
+"This program converts ABC music files (see\n"
+"http://www.gre.ac.uk/~c.walshaw/abc2mtex/abc.txt) to LilyPond input."
+msgstr "Ця програма переконвертовує музичні файли ABC (дивіться http://www.gre.ac.uk/~c.walshaw/abc2mtex/abc.txt) у формат LilyPond."
+
+#: abc2ly.py:1360
+msgid "set output filename to FILE"
+msgstr "призначити назву файлу виходу на FILE"
+
+#: abc2ly.py:1362
+msgid "be strict about succes"
+msgstr "бути вимогливим до успіху"
+
+#: abc2ly.py:1364
+msgid "preserve ABC's notion of beams"
+msgstr "зберігати штилі ABC"
+
+#: convert-ly.py:49
+msgid ""
+"Update LilyPond input to newer version.  By default, update from the\n"
+"version taken from the \\version command, to the current LilyPond version.\n"
+"\n"
+"Examples:\n"
+"\n"
+"  convert-ly -e old.ly\n"
+"  convert-ly --from=2.3.28 --to 2.5.21 foobar.ly\n"
+msgstr ""
+"Оновити джерельний файл LilyPond'у до новішої версії програми. Зазвичай версія джерельного файлу береться з команди \\version, і оновлюється до найновішої версії.\n"
+"\n"
+"Приклади:\n"
+"  convert-ly -e old.ly\n"
+"  convert-ly --from=2.3.28 --to 2.5.21 foobar.ly\n"
+
+#: convert-ly.py:67 lilypond-book.py:115 warn.cc:48 input.cc:81
+#, c-format, python-format
+msgid "warning: %s"
+msgstr "попередження: %s"
+
+#: convert-ly.py:70 lilypond-book.py:118 warn.cc:54 input.cc:87 input.cc:95
+#, c-format, python-format
+msgid "error: %s"
+msgstr "помилка: %s"
+
+#: convert-ly.py:86 etf2ly.py:1200 lilypond-book.py:138 midi2ly.py:114
+msgid "Distributed under terms of the GNU General Public License."
+msgstr "Розповсюджується згідно GNU GPL."
+
+#: convert-ly.py:87 etf2ly.py:1201 lilypond-book.py:139 midi2ly.py:115
+msgid "It comes with NO WARRANTY."
+msgstr "Розповсюджується БЕЗ ГАРАНТІЙ."
+
+#: convert-ly.py:98 convert-ly.py:118
+msgid "VERSION"
+msgstr "ВЕРСІЯ"
+
+#: convert-ly.py:100
+msgid "start from VERSION [default: \\version found in file]"
+msgstr "починати з ВЕРСІЯ [зазвичай: команда \\version у файлі]"
+
+#: convert-ly.py:103
+msgid "edit in place"
+msgstr "редагувати на місці"
+
+#: convert-ly.py:106
+msgid "do not add \\version command if missing"
+msgstr "не додавати команду \\version якщо вона відсутня"
+
+#: convert-ly.py:112
+msgid "print rules [default: --from=0, --to=@TOPLEVEL_VERSION@]"
+msgstr "друкувати правила [зазавичай: --from=0, --to=@НАЙНОВІША ВЕРСІЯ@]"
+
+#: convert-ly.py:117
+msgid "convert to VERSION [default: @TOPLEVEL_VERSION@]"
+msgstr "перетворити у ВЕРСІЮ [зазвичай: @НАЙНОВІША_ВЕРСІЯ@]"
+
+#: convert-ly.py:164
+msgid "Applying conversion: "
+msgstr "Здійснення перетворення:"
+
+#: convert-ly.py:176
+msgid "error while converting"
+msgstr "помилка перетворення"
+
+#: convert-ly.py:178 score-engraver.cc:73
+msgid "Aborting"
+msgstr "Скасування"
+
+#: convert-ly.py:202
+#, python-format
+msgid "Processing `%s'... "
+msgstr "Обробка `%s'..."
+
+#: convert-ly.py:289 source-file.cc:56
+#, c-format, python-format
+msgid "can't open file: `%s'"
+msgstr "не можливо відкрити файл: `%s'"
+
+#: convert-ly.py:296
+#, python-format
+msgid "can't determine version for `%s'. Skipping"
+msgstr "неможливо визначити весію для `%s'. Пропускаю"
+
+#: etf2ly.py:1208
+msgid ""
+"Enigma Transport Format is a format used by Coda Music Technology's\n"
+"Finale product. This program will convert a subset of ETF to a\n"
+"ready-to-use lilypond file."
+msgstr "Enigma Transport Format це формат, який використовує програма Finale (Coda Music Technology). Ця програма переконвертує ETF у готовий до використання джерельний файл lilypond."
+
+#: etf2ly.py:1211 midi2ly.py:901
+msgid "write output to FILE"
+msgstr "записувати вихід у ФАЙЛ"
+
+#: etf2ly.py:1212 midi2ly.py:902 main.cc:172 main.cc:178
+msgid "FILE"
+msgstr "ФАЙЛ"
+
+#: etf2ly.py:1214 midi2ly.py:915
+msgid "show warranty"
+msgstr "показати гарантію"
+
+#: lilypond-book.py:88
+msgid ""
+"Process LilyPond snippets in hybrid HTML, LaTeX, or texinfo document.\n"
+"\n"
+"Example usage:\n"
+"\n"
+"   lilypond-book --filter=\"tr '[a-z]' '[A-Z]'\" BOOK\n"
+"   lilypond-book --filter=\"convert-ly --no-version --from=2.0.0 -\" BOOK\n"
+"   lilypond-book --process='lilypond -I include' BOOK\n"
+msgstr ""
+"Обробити фраґменти LilyPond у гібридному HTML, LaTeX, або документі texinfo.\n"
+"\n"
+"Приклад використання:\n"
+"\n"
+"   lilypond-book --filter=\"tr '[a-z]' '[A-Z]'\" КНИЖКА\n"
+"   lilypond-book --filter=\"convert-ly --no-version --from=2.0.0 -\" КНИЖКА\n"
+"   lilypond-book --process='lilypond -I include' КНИЖКА\n"
+
+#: lilypond-book.py:104
+#, python-format
+msgid "Exiting (%d)..."
+msgstr "Виходжу (%d)..."
+
+#: lilypond-book.py:136
+#, python-format
+msgid "Copyright (c) %s by"
+msgstr "Авторське право (c) %s"
+
+#: lilypond-book.py:147
+msgid "FILTER"
+msgstr "ФІЛЬТР"
+
+#: lilypond-book.py:150
+msgid "pipe snippets through FILTER [convert-ly -n -]"
+msgstr "пропустити фраґменти через ФІЛЬТР [convert-ly -n -]"
+
+#: lilypond-book.py:152
+msgid "use output format FORMAT (texi [default], texi-html, latex, html)"
+msgstr "використовувати формат виходу ФОРМАТ (texi [зазвичай], texi-html, latex, html)"
+
+#: lilypond-book.py:154
+msgid "add DIR to include path"
+msgstr "додати ТЕКУ до шляху включення"
+
+#: lilypond-book.py:159
+msgid "write output to DIR"
+msgstr "записати вихід у ТЕКУ"
+
+#: lilypond-book.py:162
+msgid "COMMAND"
+msgstr "КОМАНДА"
+
+#: lilypond-book.py:163
+msgid "process ly_files using COMMAND FILE..."
+msgstr "обробити ly_files використовуючи ФАЙЛ КОМАНД"
+
+#: lilypond-book.py:168
+msgid "extract all PostScript fonts into INPUT.psfonts for LaTeXmust use this with dvips -h INPUT.psfonts"
+msgstr "видобути всі шрифти PostScript в ФАЙЛ.psfonts для LaTeX. Треба використовувти з dvips -h INPUT.psfonts"
+
+#: lilypond-book.py:171 midi2ly.py:912 main.cc:182
+msgid "be verbose"
+msgstr "бути балакучим"
+
+#: lilypond-book.py:177 main.cc:183
+msgid "show warranty and copyright"
+msgstr "показати гарантію і авторське право"
+
+#: lilypond-book.py:734
+#, python-format
+msgid "file not found: %s"
+msgstr "файл не знайдено: %s"
+
+#: lilypond-book.py:963
+#, python-format
+msgid "deprecated ly-option used: %s=%s"
+msgstr "використано застарілий ly-параметр: %s=%s"
+
+#: lilypond-book.py:966
+#, python-format
+msgid "compatibility mode translation: %s=%s"
+msgstr "переклад із сумісністю: %s=%s"
+
+#: lilypond-book.py:970
+#, python-format
+msgid "deprecated ly-option used: %s"
+msgstr "використано застарілий ly-параметр: %s"
+
+#: lilypond-book.py:973
+#, python-format
+msgid "compatibility mode translation: %s"
+msgstr "переклад із сумісністю: %s"
+
+#: lilypond-book.py:992
+#, python-format
+msgid "ignoring unknown ly option: %s"
+msgstr "іґнорую невідомий ly-параметр: %s"
+
+#: lilypond-book.py:1327
+#, python-format
+msgid "Opening filter `%s'"
+msgstr "Відкривється фільтр `%s'"
+
+#: lilypond-book.py:1344
+#, python-format
+msgid "`%s' failed (%d)"
+msgstr "`%s' не спраювало (%d)"
+
+#: lilypond-book.py:1345
+msgid "The error log is as follows:"
+msgstr "Звіт помилок виглядає так:"
+
+#: lilypond-book.py:1512
+msgid "Writing snippets..."
+msgstr "Запис фраґментів..."
+
+#: lilypond-book.py:1517
+msgid "Processing..."
+msgstr "Обробка..."
+
+#: lilypond-book.py:1521
+msgid "All snippets are up to date..."
+msgstr "Жоден фрамент не є застарілий..."
+
+#: lilypond-book.py:1531
+#, python-format
+msgid "can't determine format for: %s"
+msgstr "не можливо визначити формат для: %s"
+
+#: lilypond-book.py:1542
+#, python-format
+msgid "%s is up to date."
+msgstr "%s не є застарілий."
+
+#: lilypond-book.py:1548
+#, python-format
+msgid "Writing `%s'..."
+msgstr "Запис `%s'..."
+
+#: lilypond-book.py:1595
+msgid "Output would overwrite input file; use --output."
+msgstr "Вихід перепише джерельний файл. Використовуйте --output."
+
+#: lilypond-book.py:1599
+#, python-format
+msgid "Reading %s..."
+msgstr "Читання %s..."
+
+#: lilypond-book.py:1618
+msgid "Dissecting..."
+msgstr "Розбивка..."
+
+#: lilypond-book.py:1634
+#, python-format
+msgid "Compiling %s..."
+msgstr "Компіляція %s..."
+
+#: lilypond-book.py:1643
+#, python-format
+msgid "Processing include: %s"
+msgstr "Обробка включення: %s"
+
+#: lilypond-book.py:1657
+#, python-format
+msgid "Removing `%s'"
+msgstr "Викидаю `%s'"
+
+#: lilypond-book.py:1717
+#, python-format
+msgid "Writing fonts to %s..."
+msgstr "Записую шрифти у %s..."
+
+#: lilypond-book.py:1729
+msgid "option --psfonts not used"
+msgstr "параметр --psfonts не використовується"
+
+#: lilypond-book.py:1730
+msgid "processing with dvips will have no fonts"
+msgstr "обробка з dvips буде без шрифтів"
+
+#: lilypond-book.py:1736
+msgid "DVIPS usage:"
+msgstr "використання DVIPS:"
+
+#: midi2ly.py:122 lily-library.scm:489 lily-library.scm:497
+msgid "warning: "
+msgstr "попередження:"
+
+#: midi2ly.py:125 midi2ly.py:941
+msgid "error: "
+msgstr "помилка:"
+
+#: midi2ly.py:126
+msgid "Exiting ... "
+msgstr "Виходжу ..."
+
+#: midi2ly.py:873
+#, python-format
+msgid "%s output to `%s'..."
+msgstr "%s вихід у `%s'..."
+
+#: midi2ly.py:887
+msgid "Convert MIDI to LilyPond source."
+msgstr "Перетворити файл MIDI у файл LilyPond."
+
+#: midi2ly.py:891
+msgid "print absolute pitches"
+msgstr "друкувати абсолютну висоту"
+
+#: midi2ly.py:893 midi2ly.py:905
+msgid "DUR"
+msgstr "DUR"
+
+#: midi2ly.py:894
+msgid "quantise note durations on DUR"
+msgstr "вирівнювати тривалості нот в DUR"
+
+#: midi2ly.py:897
+msgid "print explicit durations"
+msgstr "друкувати точні тривалості"
+
+#: midi2ly.py:898
+msgid "set key: ALT=+sharps|-flats; MINOR=1"
+msgstr "вказати ключ: ALT=+дієзи|-бемолі; MINOR=1"
+
+#: midi2ly.py:899
+msgid "ALT[:MINOR]"
+msgstr "ALT[:MINOR]"
+
+#: midi2ly.py:904
+msgid "quantise note starts on DUR"
+msgstr "вирівнювання ритму ноти починається з DUR"
+
+#: midi2ly.py:907
+msgid "DUR*NUM/DEN"
+msgstr "DUR*NUM/DEN"
+
+#: midi2ly.py:910
+msgid "allow tuplet durations DUR*NUM/DEN"
+msgstr "дозволити тривалості не-парних ритмів (тріолей, секстоль, і.т.д)  DUR*NUM/DEN"
+
+#: midi2ly.py:918
+msgid "treat every text as a lyric"
+msgstr "розуміти будь-який текст як слова до музики"
+
+#: midi2ly.py:921
+msgid "example"
+msgstr "приклад"
+
+#: midi2ly.py:942
+msgid "no files specified on command line."
+msgstr "не було задано жодних файлів."
+
+#: getopt-long.cc:141
+#, c-format
+msgid "option `%s' requires an argument"
+msgstr "параметр `%s' потребує арґументу"
+
+#: getopt-long.cc:145
+#, c-format
+msgid "option `%s' doesn't allow an argument"
+msgstr "параметр `%s' не дозволяє жодних арґументів"
+
+#: getopt-long.cc:149
+#, c-format
+msgid "unrecognized option: `%s'"
+msgstr "невідомий параметр: `%s'"
+
+#: getopt-long.cc:155
+#, c-format
+msgid "invalid argument `%s' to option `%s'"
+msgstr "неправильний арґумент `%s' параметру `%s'"
+
+#: warn.cc:68 grob.cc:462
+#, c-format
+msgid "programming error: %s"
+msgstr "помилка програмування: %s"
+
+#: warn.cc:69
+msgid "continuing, cross fingers"
+msgstr "продовжую, з перешрещенням пальців (cross fingers)"
+
+#: accidental-engraver.cc:238
+#, c-format
+msgid "accidental typesetting list must begin with context-name: %s"
+msgstr "список альтерації повинен починатися з назви контексту: %s"
+
+#: accidental-engraver.cc:266
+#, c-format
+msgid "ignoring unknown accidental: %s"
+msgstr "іґнорую невідомий знак альтерації: %s"
+
+#: accidental-engraver.cc:282
+#, c-format
+msgid "pair or context-name expected for accidental rule, found %s"
+msgstr "очікував пару або назву контексту (context) для правил альтерації, знайшов %s"
+
+#: accidental.cc:239 key-signature-interface.cc:124
+#, c-format
+msgid "accidental `%s' not found"
+msgstr "знак альтерації \"%s\" не знайдено"
+
+#: align-interface.cc:160
+msgid ""
+"vertical alignment called before line-breaking.\n"
+"Only do cross-staff spanners with PianoStaff."
+msgstr ""
+"активовано вертикальне вирівнювання перед розділенням лінійок.\n"
+"Об'єкти які переходять з одного нотного стану на інший бувають тільки між фортепіанними нотними станами (PianoStaff)."
+
+#: all-font-metrics.cc:213
+#, c-format
+msgid "can't find font: `%s'"
+msgstr "не можу знайти шрифт: \"%s\""
+
+#: all-font-metrics.cc:214
+msgid "loading default font"
+msgstr "завантажую типовий шрифт"
+
+#: all-font-metrics.cc:224
+#, c-format
+msgid "can't find default font: `%s'"
+msgstr "не можу знайти типовий шрифт: \"%s\""
+
+#: all-font-metrics.cc:225 includable-lexer.cc:62 lily-parser-scheme.cc:97
+#, c-format
+msgid "(search path: `%s')"
+msgstr "(шлях пошуку: \"%s\")"
+
+#: all-font-metrics.cc:226 volta-engraver.cc:157
+msgid "giving up"
+msgstr "здаюся"
+
+#: apply-context-iterator.cc:34
+msgid "\\applycontext argument is not a procedure"
+msgstr "арґумент до \\applycontext не є процедурою"
+
+#: auto-change-iterator.cc:62 change-iterator.cc:61
+#, c-format
+msgid "can't change, already in translator: %s"
+msgstr "не можливо змінити, вже в перекладі: %s"
+
+#: axis-group-engraver.cc:82
+msgid "Axis_group_engraver: vertical group already has a parent"
+msgstr "Axis_group_engraver: вертикальний ґрупа вже має батьківський об'єкт"
+
+#: axis-group-engraver.cc:83
+msgid "are there two Axis_group_engravers?"
+msgstr "чи це два Axis_group_engraver'и?"
+
+#: axis-group-engraver.cc:84
+msgid "removing this vertical group"
+msgstr "викидаю цю вертикальну ґрупу"
+
+#: bar-check-iterator.cc:73
+#, c-format
+msgid "barcheck failed at: %s"
+msgstr "тактова риска не співпадає біля: %s"
+
+#: beam-engraver.cc:136
+msgid "already have a beam"
+msgstr "вже має ребро"
+
+#: beam-engraver.cc:205
+msgid "unterminated beam"
+msgstr "ребро без кінця"
+
+#: beam-engraver.cc:246 chord-tremolo-engraver.cc:162
+msgid "stem must have Rhythmic structure"
+msgstr "штиль повинен мати ритмічну структуру"
+
+#: beam-engraver.cc:259
+msgid "stem doesn't fit in beam"
+msgstr "штиль не вписується в ребро"
+
+#: beam-engraver.cc:260
+msgid "beam was started here"
+msgstr "ребро почате тут"
+
+#: beam-quanting.cc:306
+msgid "no feasible beam position"
+msgstr "неможлива позиція ребра"
+
+#: beam.cc:126
+msgid "removing beam with less than two stems"
+msgstr "викидаю ребро з менше ніж двома штилями"
+
+#: beam.cc:981
+msgid "no viable initial configuration found: may not find good beam slope"
+msgstr "не знайдено початкової конфіґурації: можливо що не буде підібрано доброго нашилу ребра"
+
+#: break-align-interface.cc:194
+#, c-format
+msgid "No spacing entry from %s to `%s'"
+msgstr ""
+
+#: change-iterator.cc:23
+#, c-format
+msgid "can't change `%s' to `%s'"
+msgstr "неможливо змінити \"%s\" на \"%s\""
+
+#. FIXME: constant error message.
+#: change-iterator.cc:82
+msgid "can't find context to switch to"
+msgstr "не можу знайти контекст, на який можна би було перейти"
+
+#. We could change the current translator's id, but that would make
+#. errors hard to catch.
+#.
+#. last->translator_id_string () = get_change
+#. ()->change_to_id_string ();
+#: change-iterator.cc:91
+#, c-format
+msgid "not changing to same context type: %s"
+msgstr "не змінюю на контекст того самого тиму: %s"
+
+#. FIXME: uncomprehensable message
+#: change-iterator.cc:95
+msgid "none of these in my family"
+msgstr ""
+
+#: chord-tremolo-engraver.cc:96
+#, c-format
+msgid "expect 2 elements for chord tremolo, found %d"
+msgstr "очікувано 2 елементи для акортового тремоло, знайдено %d"
+
+#: chord-tremolo-engraver.cc:132
+msgid "unterminated chord tremolo"
+msgstr "акордове тремоло без кінця"
+
+#: chord-tremolo-iterator.cc:60
+msgid "no one to print a tremolos"
+msgstr "нема жодного тремоло"
+
+#: clef.cc:55
+#, c-format
+msgid "clef `%s' not found"
+msgstr "ключ \"%s\" не знайдено"
+
+#: cluster.cc:110
+#, c-format
+msgid "unknown cluster style `%s'"
+msgstr "невідомий стиль кластеру \"%s\""
+
+#: cluster.cc:135
+msgid "junking empty cluster"
+msgstr "ігнорую пустий кластер"
+
+#: coherent-ligature-engraver.cc:86
+#, c-format
+msgid "gotcha: ptr=%ul"
+msgstr ""
+
+#: coherent-ligature-engraver.cc:93
+msgid "distance undefined, assuming 0.1"
+msgstr "відстань не вказана, використовую 0.1"
+
+#: coherent-ligature-engraver.cc:96
+#, c-format
+msgid "distance=%f"
+msgstr "відстань=%f"
+
+#: coherent-ligature-engraver.cc:136
+#, c-format
+msgid "Coherent_ligature_engraver: setting `spacing-increment=0.01': ptr=%ul"
+msgstr "Coherent_ligature_engraver: призначаю \"spacing-increment=0.01\": ptr=%ul"
+
+#: constrained-breaking.cc:124
+msgid "no system number set in constrained-breaking"
+msgstr "номер системи не вказаний у примусовій розбивці"
+
+#. if we get to here, just put everything on one line
+#: constrained-breaking.cc:225 constrained-breaking.cc:241
+msgid "couldn't find line breaking that satisfies constraints"
+msgstr "не знайдено поділу на лінії, який би задовольняв потреби"
+
+#: context-def.cc:123
+#, c-format
+msgid "program has no such type: `%s'"
+msgstr ""
+
+#: context-def.cc:311
+#, c-format
+msgid "can't find: `%s'"
+msgstr "не можливо знайти '%s'"
+
+#: context-property.cc:77
+msgid "need symbol arguments for \\override and \\revert"
+msgstr "команди \\override і \\revert потребують арґументів - символів"
+
+#: context.cc:160
+#, c-format
+msgid "can't find or create new `%s'"
+msgstr "не можливо знайти або створити новий(-у) '%s'"
+
+#: context.cc:222
+#, c-format
+msgid "can't find or create `%s' called `%s'"
+msgstr "не можливо знайти або створити '%s', під назвою '%s'"
+
+#: context.cc:276
+#, c-format
+msgid "can't find or create: `%s'"
+msgstr "на можливо знайти або створити: '%s'"
+
+#: custos.cc:77
+#, c-format
+msgid "custos `%s' not found"
+msgstr ""
+
+#: dynamic-engraver.cc:181 span-dynamic-performer.cc:84
+msgid "can't find start of (de)crescendo"
+msgstr "не можу знайти початок (de)crescendo"
+
+#: dynamic-engraver.cc:190
+msgid "already have a decrescendo"
+msgstr "вже є decrescendo"
+
+#: dynamic-engraver.cc:192
+msgid "already have a crescendo"
+msgstr "вже є crescendo"
+
+#: dynamic-engraver.cc:195
+msgid "cresc starts here"
+msgstr "cresc починається тут"
+
+#: dynamic-engraver.cc:318
+msgid "unterminated (de)crescendo"
+msgstr "(de)crescendo без кінцевої точки"
+
+#: event-chord-iterator.cc:53 output-property-music-iterator.cc:31
+#, c-format
+msgid "junking event: `%s'"
+msgstr "ігнорую подію: \"%s\""
+
+#: extender-engraver.cc:131 extender-engraver.cc:140
+msgid "unterminated extender"
+msgstr ""
+
+#: folded-repeat-iterator.cc:63
+msgid "no one to print a repeat brace"
+msgstr ""
+
+#: font-config.cc:28
+msgid "Initializing FontConfig..."
+msgstr "Запуск FontConfig..."
+
+#: font-config.cc:38
+#, c-format
+msgid "Rebuilding FontConfig cache %s. this may take a while..."
+msgstr "Оновлення кешу FontConfig'у %s. Це може зайняти трохи часу..."
+
+#: font-config.cc:49 font-config.cc:51
+#, c-format
+msgid "adding font directory: %s"
+msgstr "Додаю теку шрифтів: %s"
+
+#: general-scheme.cc:161
+msgid "infinity or NaN encountered while converting Real number"
+msgstr ""
+
+#: general-scheme.cc:162
+msgid "setting to zero"
+msgstr "пере-призначую на нуль"
+
+#: glissando-engraver.cc:91
+msgid "unterminated glissando"
+msgstr "glissando без кінцевої точки"
+
+#: global-context-scheme.cc:50 global-context-scheme.cc:77
+msgid "no music found in score"
+msgstr "в нотах не знайдено жодного музичного шрифту"
+
+#: global-context-scheme.cc:68
+msgid "Interpreting music... "
+msgstr "Інтерпретація музики..."
+
+#: global-context-scheme.cc:88
+#, c-format
+msgid "elapsed time: %.2f seconds"
+msgstr "пройшло часу: %.2f секунд"
+
+#: global-context.cc:159
+#, c-format
+msgid "can't find `%s' context"
+msgstr "контекст \"%s\" не знайдено"
+
+#: gourlay-breaking.cc:202
+#, c-format
+msgid "Optimal demerits: %f"
+msgstr ""
+
+#: gourlay-breaking.cc:207
+msgid "no feasible line breaking found"
+msgstr "не знайдено підходящого поділу на лінії"
+
+#: gourlay-breaking.cc:215
+msgid "can't find line breaking that satisfies constraints"
+msgstr "не можу підібрати поділу на лінії, який би задовольнив потреби"
+
+#: gregorian-ligature-engraver.cc:61
+#, c-format
+msgid "\\%s ignored"
+msgstr "\\%s проіґноровано"
+
+#: gregorian-ligature-engraver.cc:66
+#, c-format
+msgid "implied \\%s added"
+msgstr ""
+
+#. ligature may not start with 2nd head of pes or flexa
+#: gregorian-ligature-engraver.cc:214
+msgid "can't apply `\\~' on first head of ligature"
+msgstr ""
+
+#. (pitch == prev_pitch)
+#: gregorian-ligature-engraver.cc:226
+msgid "can't apply `\\~' on heads with identical pitch"
+msgstr ""
+
+#: grob-interface.cc:48
+#, c-format
+msgid "Unknown interface `%s'"
+msgstr "Невідомий інтерфейс \"%s\""
+
+#: grob-interface.cc:59
+#, c-format
+msgid "Grob `%s' has no interface for property `%s'"
+msgstr ""
+
+#: grob.cc:242
+msgid "Infinity or NaN encountered"
+msgstr ""
+
+#: hairpin.cc:149
+msgid "decrescendo too small"
+msgstr "закоротке decrescendo"
+
+#: hairpin.cc:150
+msgid "crescendo too small"
+msgstr "закоротке crescendo"
+
+#: horizontal-bracket-engraver.cc:58
+msgid "don't have that many brackets"
+msgstr ""
+
+#: horizontal-bracket-engraver.cc:67
+msgid "conflicting note group events"
+msgstr ""
+
+#: hyphen-engraver.cc:93
+msgid "removing unterminated hyphen"
+msgstr ""
+
+#: hyphen-engraver.cc:107
+msgid "unterminated hyphen; removing"
+msgstr ""
+
+#: includable-lexer.cc:53
+msgid "include files are not allowed in safe mode"
+msgstr "включення інших файлів не дозволено у безпечному режимі"
+
+#: includable-lexer.cc:60 lily-guile.cc:96 lily-parser-scheme.cc:104
+#, c-format
+msgid "can't find file: `%s'"
+msgstr "не можу знайти файл: \"%s\""
+
+#: input.cc:103 source-file.cc:153 source-file.cc:168
+msgid "position unknown"
+msgstr ""
+
+#: ligature-engraver.cc:100
+msgid "can't find start of ligature"
+msgstr ""
+
+#: ligature-engraver.cc:105
+msgid "no right bound"
+msgstr ""
+
+#: ligature-engraver.cc:127
+msgid "already have a ligature"
+msgstr ""
+
+#: ligature-engraver.cc:136
+msgid "no left bound"
+msgstr ""
+
+#: ligature-engraver.cc:180
+msgid "unterminated ligature"
+msgstr ""
+
+#: ligature-engraver.cc:209
+msgid "ignoring rest: ligature may not contain rest"
+msgstr ""
+
+#: ligature-engraver.cc:210
+msgid "ligature was started here"
+msgstr ""
+
+#: lily-guile.cc:98
+#, c-format
+msgid "(load path: `%s')"
+msgstr "(шлях завантаження: \"%s\")"
+
+#: lily-guile.cc:441
+#, c-format
+msgid "can't find property type-check for `%s' (%s)."
+msgstr ""
+
+#: lily-guile.cc:444
+msgid "perhaps a typing error?"
+msgstr "може це просто синтаксична помилка?"
+
+#: lily-guile.cc:450
+msgid "doing assignment anyway"
+msgstr ""
+
+#: lily-guile.cc:462
+#, c-format
+msgid "type check for `%s' failed; value `%s' must be of type `%s'"
+msgstr ""
+
+#: lily-lexer.cc:223
+#, c-format
+msgid "identifier name is a keyword: `%s'"
+msgstr ""
+
+#: lily-lexer.cc:238
+#, c-format
+msgid "error at EOF: %s"
+msgstr "помилка в кінці файлу (EOF): %s"
+
+#: lily-parser-scheme.cc:29
+#, c-format
+msgid "deprecated function called: %s"
+msgstr "використання застарілої функції: %s"
+
+#: lily-parser-scheme.cc:76
+#, c-format
+msgid "Changing working directory to `%s'"
+msgstr "Змінюю робочу теку на \"%s\""
+
+#: lily-parser-scheme.cc:96
+#, c-format
+msgid "can't find init file: `%s'"
+msgstr "не можу знайти ініціалізаційний файл: \"%s\""
+
+#: lily-parser-scheme.cc:114
+#, c-format
+msgid "Processing `%s'"
+msgstr "обробка \"%s\""
+
+#: lily-parser.cc:97
+#, fuzzy
+msgid "Parsing..."
+msgstr "Розбирання..."
+
+#: lily-parser.cc:126
+msgid "braces don't match"
+msgstr ""
+
+#: lyric-combine-music-iterator.cc:256
+#, c-format
+msgid "cannot find Voice `%s'"
+msgstr ""
+
+#: main.cc:116
+#, c-format
+msgid ""
+"This program is free software.  It is covered by the GNU General Public\n"
+"License and you are welcome to change it and/or distribute copies of it\n"
+"under certain conditions.  Invoke as `%s --warranty' for more\n"
+"information.\n"
+msgstr ""
+
+#: main.cc:122
+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., 59 Temple Place - Suite 330,\n"
+"Boston, MA 02111-1307, USA.\n"
+msgstr ""
+
+#: main.cc:153
+msgid "BACK"
+msgstr ""
+
+#: main.cc:153
+msgid ""
+"use backend BACK (gnome, ps,eps,\n"
+"scm, svg, tex, texstr)\n"
+"default: PS"
+msgstr ""
+
+#: main.cc:155
+msgid "SYM=VAL"
+msgstr ""
+
+#: main.cc:156
+msgid ""
+"set a Scheme program option. Uses #t if VAL is not specified\n"
+"Try -dhelp for help."
+msgstr ""
+
+#: main.cc:159
+msgid "EXPR"
+msgstr ""
+
+#: main.cc:159
+msgid "evaluate scheme code"
+msgstr ""
+
+#. Bug in option parser: --output =foe is taken as an abbreviation
+#. for --output-format.
+#: main.cc:162
+msgid "FORMATs"
+msgstr ""
+
+#: main.cc:162
+msgid "dump FORMAT,...  Also as separate options:"
+msgstr ""
+
+#: main.cc:163
+msgid "generate DVI (tex backend only)"
+msgstr ""
+
+#: main.cc:164
+msgid "relocate using directory of lilypond program"
+msgstr ""
+
+#: main.cc:165
+msgid "generate PDF (default)"
+msgstr ""
+
+#: main.cc:166
+msgid "generate PNG"
+msgstr ""
+
+#: main.cc:167
+msgid "generate PostScript"
+msgstr ""
+
+#: main.cc:168
+msgid "generate TeX (tex backend only)"
+msgstr ""
+
+#: main.cc:169
+msgid "print this help"
+msgstr ""
+
+#: main.cc:170
+msgid "FIELD"
+msgstr ""
+
+#: main.cc:170
+msgid "dump a header field to file BASENAME.FIELD"
+msgstr ""
+
+#: main.cc:171
+msgid "DIR"
+msgstr ""
+
+#: main.cc:171
+msgid "add DIR to search path"
+msgstr ""
+
+#: main.cc:172
+msgid "use FILE as init file"
+msgstr ""
+
+#: main.cc:174
+msgid "USER,GROUP,JAIL,DIR"
+msgstr ""
+
+#: main.cc:174
+msgid ""
+"chroot to JAIL, become USER:GROUP\n"
+"and cd into DIR"
+msgstr ""
+
+#: main.cc:177
+msgid "do not generate printed output"
+msgstr ""
+
+#: main.cc:178
+msgid "write output to FILE (suffix will be added)"
+msgstr ""
+
+#: main.cc:179
+msgid "generate a preview of the first system"
+msgstr ""
+
+#: main.cc:180
+msgid "disallow unsafe Scheme and PostScript operations"
+msgstr ""
+
+#: main.cc:181
+msgid "print version number"
+msgstr ""
+
+#: main.cc:221
+#, c-format
+msgid ""
+"Copyright (c) %s by\n"
+"%s  and others."
+msgstr ""
+
+#. No version number or newline here.  It confuses help2man.
+#: main.cc:248
+#, c-format
+msgid "Usage: %s [OPTION]... FILE..."
+msgstr ""
+
+#: main.cc:250
+#, c-format
+msgid "Typeset music and/or produce MIDI from FILE."
+msgstr ""
+
+#: main.cc:252
+#, c-format
+msgid "LilyPond produces beautiful music notation."
+msgstr ""
+
+#: main.cc:254
+#, c-format
+msgid "For more information, see %s"
+msgstr ""
+
+#: main.cc:256
+#, c-format
+msgid "Options:"
+msgstr ""
+
+#: main.cc:260
+#, c-format
+msgid "Report bugs via %s"
+msgstr ""
+
+#: main.cc:306
+#, c-format
+msgid "expected %d arguments with jail, found: %u"
+msgstr ""
+
+#: main.cc:320
+#, c-format
+msgid "no such user: %s"
+msgstr ""
+
+#: main.cc:322
+#, c-format
+msgid "can't get user id from user name: %s: %s"
+msgstr ""
+
+#: main.cc:337
+#, c-format
+msgid "no such group: %s"
+msgstr ""
+
+#: main.cc:339
+#, c-format
+msgid "can't get group id from group name: %s: %s"
+msgstr ""
+
+#: main.cc:347
+#, c-format
+msgid "can't chroot to: %s: %s"
+msgstr ""
+
+#: main.cc:354
+#, c-format
+msgid "can't change group id to: %d: %s"
+msgstr ""
+
+#: main.cc:360
+#, c-format
+msgid "can't change user id to: %d: %s"
+msgstr ""
+
+#: main.cc:366
+#, c-format
+msgid "can't change working directory to: %s: %s"
+msgstr ""
+
+#: main.cc:413
+#, c-format
+msgid "Evaluating %s"
+msgstr ""
+
+#: main.cc:627
+#, c-format
+msgid "exception caught: %s"
+msgstr ""
+
+#. FIXME: constant error message.
+#: mark-engraver.cc:131
+msgid "rehearsalMark must have integer value"
+msgstr ""
+
+#: mark-engraver.cc:137
+msgid "mark label must be a markup object"
+msgstr ""
+
+#: mensural-ligature-engraver.cc:77
+msgid "ligature with less than 2 heads -> skipping"
+msgstr ""
+
+#: mensural-ligature-engraver.cc:104
+msgid "cannot determine pitch of ligature primitive -> skipping"
+msgstr ""
+
+#: mensural-ligature-engraver.cc:118
+msgid "single note ligature - skipping"
+msgstr ""
+
+#: mensural-ligature-engraver.cc:130
+msgid "prime interval within ligature -> skipping"
+msgstr ""
+
+#: mensural-ligature-engraver.cc:142
+msgid "mensural ligature: duration none of Mx, L, B, S -> skipping"
+msgstr ""
+
+#: mensural-ligature-engraver.cc:190
+msgid "semibrevis must be followed by another one -> skipping"
+msgstr ""
+
+#: mensural-ligature-engraver.cc:201
+msgid ""
+"semibreves can only appear at the beginning of a ligature,\n"
+"and there may be only zero or two of them"
+msgstr ""
+
+#: mensural-ligature-engraver.cc:228
+msgid ""
+"invalid ligatura ending:\n"
+"when the last note is a descending brevis,\n"
+"the penultimate note must be another one,\n"
+"or the ligatura must be LB or SSB"
+msgstr ""
+
+#: mensural-ligature-engraver.cc:348
+msgid "unexpected case fall-through"
+msgstr ""
+
+#: mensural-ligature.cc:141
+msgid "Mensural_ligature: unexpected case fall-through"
+msgstr ""
+
+#: mensural-ligature.cc:192
+msgid "Mensural_ligature: (join_right == 0)"
+msgstr ""
+
+#: midi-item.cc:152
+#, c-format
+msgid "no such MIDI instrument: `%s'"
+msgstr ""
+
+#: midi-item.cc:264
+msgid "silly pitch"
+msgstr ""
+
+#: midi-item.cc:280
+#, c-format
+msgid "experimental: temporarily fine tuning (of %d cents) a channel."
+msgstr ""
+
+#: midi-stream.cc:28
+#, c-format
+msgid "can't open for write: %s: %s"
+msgstr ""
+
+#: midi-stream.cc:44
+#, c-format
+msgid "can't write to file: `%s'"
+msgstr ""
+
+#: music.cc:140
+#, c-format
+msgid "octave check failed; expected %s, found: %s"
+msgstr ""
+
+#: music.cc:203
+#, c-format
+msgid "transposition by %s makes alteration larger than double"
+msgstr ""
+
+#: new-fingering-engraver.cc:84
+msgid "can't add text scripts to individual note heads"
+msgstr ""
+
+#.
+#. music for the softenon children?
+#.
+#: new-fingering-engraver.cc:153
+msgid "music for the martians."
+msgstr ""
+
+#: new-fingering-engraver.cc:261
+msgid "no placement found for fingerings"
+msgstr ""
+
+#: new-fingering-engraver.cc:262
+msgid "placing below"
+msgstr ""
+
+#: note-collision.cc:405
+msgid "ignoring too many clashing note columns"
+msgstr ""
+
+#: note-column.cc:123
+msgid "can't have note heads and rests together on a stem"
+msgstr ""
+
+#: note-head.cc:67
+#, c-format
+msgid "note head `%s' not found"
+msgstr ""
+
+#: note-heads-engraver.cc:84
+msgid "NoteEvent without pitch"
+msgstr ""
+
+#: open-type-font.cc:33
+#, c-format
+msgid "can't allocate %lu bytes"
+msgstr ""
+
+#: open-type-font.cc:37
+#, c-format
+msgid "can't load font table: %s"
+msgstr ""
+
+#: open-type-font.cc:108
+#, c-format
+msgid "unsupported font format: %s"
+msgstr ""
+
+#: open-type-font.cc:110
+#, c-format
+msgid "unknown error: %d reading font file: %s"
+msgstr ""
+
+#: open-type-font.cc:183 open-type-font.cc:307
+#, c-format
+msgid "FT_Get_Glyph_Name() returned error: %d"
+msgstr ""
+
+#: pango-font.cc:157
+#, c-format
+msgid "no PostScript font name for font `%s'"
+msgstr ""
+
+#: pango-font.cc:205
+msgid "FreeType face has no PostScript font name"
+msgstr ""
+
+#: paper-outputter-scheme.cc:33
+#, c-format
+msgid "Layout output to `%s'..."
+msgstr ""
+
+#: paper-score.cc:104
+#, c-format
+msgid "Element count %d (spanners %d) "
+msgstr ""
+
+#: paper-score.cc:108
+msgid "Preprocessing graphical objects..."
+msgstr ""
+
+#: parse-scm.cc:83
+msgid "GUILE signaled an error for the expression beginning here"
+msgstr ""
+
+#: percent-repeat-engraver.cc:209
+msgid "unterminated percent repeat"
+msgstr ""
+
+#: percent-repeat-iterator.cc:52
+msgid "no one to print a percent"
+msgstr ""
+
+#: performance.cc:46
+msgid "Track..."
+msgstr ""
+
+#: performance.cc:70
+msgid "MIDI channel wrapped around"
+msgstr ""
+
+#: performance.cc:71
+msgid "remapping modulo 16"
+msgstr ""
+
+#: performance.cc:90
+msgid "Creator: "
+msgstr ""
+
+#: performance.cc:110
+msgid "at "
+msgstr ""
+
+#: performance.cc:162
+#, c-format
+msgid "MIDI output to `%s'..."
+msgstr ""
+
+#: phrasing-slur-engraver.cc:170
+msgid "unterminated phrasing slur"
+msgstr ""
+
+#: piano-pedal-engraver.cc:223
+#, c-format
+msgid "expect 3 strings for piano pedals, found: %ld"
+msgstr ""
+
+#: piano-pedal-engraver.cc:238 piano-pedal-engraver.cc:249
+#: piano-pedal-performer.cc:82
+#, c-format
+msgid "can't find start of piano pedal: `%s'"
+msgstr ""
+
+#: piano-pedal-engraver.cc:296
+#, c-format
+msgid "can't find start of piano pedal bracket: `%s'"
+msgstr ""
+
+#: program-option.cc:195
+#, c-format
+msgid "no such internal option: %s"
+msgstr ""
+
+#: property-iterator.cc:81
+#, c-format
+msgid "not a grob name, `%s'"
+msgstr ""
+
+#: quote-iterator.cc:255
+#, c-format
+msgid "in quotation: junking event %s"
+msgstr ""
+
+#: relative-octave-check.cc:39
+msgid "Failed octave check, got: "
+msgstr ""
+
+#: relocate.cc:52
+#, c-format
+msgid "no such file: %s for %s"
+msgstr ""
+
+#: relocate.cc:62 relocate.cc:80
+#, c-format
+msgid "no such directory: %s for %s"
+msgstr ""
+
+#: relocate.cc:72
+#, c-format
+msgid "%s=%s (prepend)\n"
+msgstr ""
+
+#: relocate.cc:104
+#, c-format
+msgid "Relocation: compile prefix=%s, new prefix=%s"
+msgstr ""
+
+#: relocate.cc:130
+#, c-format
+msgid "Relocation: framework_prefix=%s"
+msgstr ""
+
+#: relocate.cc:212
+#, c-format
+msgid "Relocation: is absolute: argv0=%s"
+msgstr ""
+
+#: relocate.cc:219
+#, c-format
+msgid "Relocation: from cwd: argv0=%s"
+msgstr ""
+
+#: relocate.cc:228
+#, c-format
+msgid ""
+"Relocation: from PATH=%s\n"
+"argv0=%s"
+msgstr ""
+
+#: rest-collision.cc:149
+msgid "can't resolve rest collision: rest direction not set"
+msgstr ""
+
+#: rest-collision.cc:163 rest-collision.cc:208
+msgid "too many colliding rests"
+msgstr ""
+
+#: rest.cc:143
+#, c-format
+msgid "rest `%s' not found"
+msgstr ""
+
+#: score-engraver.cc:67
+#, c-format
+msgid "cannot find `%s'"
+msgstr ""
+
+#: score-engraver.cc:69
+msgid "Music font has not been installed properly."
+msgstr ""
+
+#: score-engraver.cc:71
+#, c-format
+msgid "Search path `%s'"
+msgstr ""
+
+#: score.cc:211
+msgid "already have music in score"
+msgstr ""
+
+#: score.cc:212
+msgid "this is the previous music"
+msgstr ""
+
+#: score.cc:217
+msgid "errors found, ignoring music expression"
+msgstr ""
+
+#. FIXME:
+#: script-engraver.cc:105
+msgid "don't know how to interpret articulation: "
+msgstr ""
+
+#: script-engraver.cc:106
+msgid "scheme encoding: "
+msgstr ""
+
+#: simple-spacer.cc:406
+#, c-format
+msgid "No spring between column %d and next one"
+msgstr ""
+
+#: slur-engraver.cc:176
+msgid "unterminated slur"
+msgstr ""
+
+#: slur-engraver.cc:185
+msgid "can't end slur"
+msgstr ""
+
+#: source-file.cc:74
+#, c-format
+msgid "expected to read %d characters, got %d"
+msgstr ""
+
+#: spacing-spanner.cc:48
+#, c-format
+msgid "Global shortest duration is %s"
+msgstr ""
+
+#: stem-engraver.cc:93
+msgid "tremolo duration is too long"
+msgstr ""
+
+#. FIXME:
+#: stem-engraver.cc:130
+#, c-format
+msgid "adding note head to incompatible stem (type = %d)"
+msgstr ""
+
+#: stem-engraver.cc:132
+msgid "maybe input should specify polyphonic voices"
+msgstr ""
+
+#: stem.cc:98
+msgid "weird stem size, check for narrow beams"
+msgstr ""
+
+#: stem.cc:592
+#, c-format
+msgid "flag `%s' not found"
+msgstr ""
+
+#: stem.cc:603
+#, c-format
+msgid "flag stroke `%s' not found"
+msgstr ""
+
+#: system.cc:181
+#, c-format
+msgid "Element count %d."
+msgstr ""
+
+#: system.cc:268
+#, c-format
+msgid "Grob count %d"
+msgstr ""
+
+#: system.cc:289
+msgid "Calculating line breaks..."
+msgstr ""
+
+#: text-spanner-engraver.cc:62
+msgid "can't find start of text spanner"
+msgstr ""
+
+#: text-spanner-engraver.cc:74
+msgid "already have a text spanner"
+msgstr ""
+
+#: text-spanner-engraver.cc:134
+msgid "unterminated text spanner"
+msgstr ""
+
+#. Not using ngettext's plural feature here, as this message is
+#. more of a programming error.
+#: tfm-reader.cc:107
+#, c-format
+msgid "TFM header of `%s' has only %u word (s)"
+msgstr ""
+
+#: tfm-reader.cc:140
+#, c-format
+msgid "%s: TFM file has %u parameters, which is more than the %u I can handle"
+msgstr ""
+
+#: tfm.cc:72
+#, c-format
+msgid "can't find ascii character: %d"
+msgstr ""
+
+#: tie-engraver.cc:181
+msgid "lonely tie"
+msgstr ""
+
+#: time-scaled-music-iterator.cc:24
+msgid "no one to print a tuplet start bracket"
+msgstr ""
+
+#.
+#. Todo: should make typecheck?
+#.
+#. OTOH, Tristan Keuris writes 8/20 in his Intermezzi.
+#.
+#: time-signature-engraver.cc:63
+#, c-format
+msgid "strange time signature found: %d/%d"
+msgstr ""
+
+#. If there is no such symbol, we default to the numbered style.
+#. (Here really with a warning!)
+#: time-signature.cc:82
+#, c-format
+msgid "time signature symbol `%s' not found; reverting to numbered style"
+msgstr ""
+
+#: translator-ctors.cc:52
+#, c-format
+msgid "unknown translator: `%s'"
+msgstr ""
+
+#: trill-spanner-engraver.cc:71
+msgid "can't find start of trill spanner"
+msgstr ""
+
+#: trill-spanner-engraver.cc:83
+msgid "already have a trill spanner"
+msgstr ""
+
+#: trill-spanner-engraver.cc:142
+msgid "unterminated trill spanner"
+msgstr ""
+
+#: vaticana-ligature-engraver.cc:347
+#, c-format
+msgid "ignored prefix (es) `%s' of this head according to restrictions of the selected ligature style"
+msgstr ""
+
+#: vaticana-ligature-engraver.cc:584
+#, c-format
+msgid "Vaticana_ligature_engraver: setting `spacing-increment = %f': ptr =%ul"
+msgstr ""
+
+#: vaticana-ligature.cc:84
+msgid "flexa-height undefined; assuming 0"
+msgstr ""
+
+#: vaticana-ligature.cc:89
+msgid "ascending vaticana style flexa"
+msgstr ""
+
+#: vaticana-ligature.cc:177
+msgid "Vaticana_ligature: zero join (delta_pitch == 0)"
+msgstr ""
+
+#. fixme: be more verbose.
+#: volta-engraver.cc:142
+msgid "can't end volta spanner"
+msgstr ""
+
+#: volta-engraver.cc:152
+msgid "already have a volta spanner, ending that one prematurely"
+msgstr ""
+
+#: volta-engraver.cc:156
+msgid "also already have an ended spanner"
+msgstr ""
+
+#. no longer valid with dashes in \paper{} block.
+#: parser.yy:535
+msgid "identifier should have alphabetic characters only"
+msgstr ""
+
+#: parser.yy:705
+msgid "\\paper cannot be used in \\score, use \\layout instead"
+msgstr ""
+
+#: parser.yy:729
+msgid "need \\paper for paper block"
+msgstr ""
+
+#: parser.yy:879
+msgid "more alternatives than repeats"
+msgstr ""
+
+#: parser.yy:916
+#, c-format
+msgid "expect 2 elements for Chord tremolo, found %d"
+msgstr ""
+
+#: parser.yy:1316
+msgid "Grob name should be alphanumeric"
+msgstr ""
+
+#: parser.yy:1681
+msgid "second argument must be pitch list"
+msgstr ""
+
+#: parser.yy:1724 parser.yy:1729 parser.yy:2235
+msgid "have to be in Lyric mode for lyrics"
+msgstr ""
+
+#: parser.yy:1822
+msgid "expecting string as script definition"
+msgstr ""
+
+#: parser.yy:1981 parser.yy:2031
+#, c-format
+msgid "not a duration: %d"
+msgstr ""
+
+#: parser.yy:2154
+msgid "have to be in Note mode for notes"
+msgstr ""
+
+#: parser.yy:2248
+msgid "have to be in Chord mode for chords"
+msgstr ""
+
+#: parser.yy:2730
+msgid "music head function must return Music object"
+msgstr ""
+
+#: lexer.ll:158
+msgid "stray UTF-8 BOM encountered"
+msgstr ""
+
+#: lexer.ll:162
+msgid "Skipping UTF-8 BOM"
+msgstr ""
+
+#: lexer.ll:206
+#, c-format
+msgid "Renaming input to: `%s'"
+msgstr ""
+
+#: lexer.ll:214
+msgid "quoted string expected after \\version"
+msgstr ""
+
+#: lexer.ll:218
+msgid "quoted string expected after \\sourcefilename"
+msgstr ""
+
+#: lexer.ll:231
+msgid "EOF found inside a comment"
+msgstr ""
+
+#: lexer.ll:246
+msgid "\\maininput not allowed outside init files"
+msgstr ""
+
+#: lexer.ll:270
+#, c-format
+msgid "wrong or undefined identifier: `%s'"
+msgstr ""
+
+#. backup rule
+#: lexer.ll:279
+msgid "end quote missing"
+msgstr ""
+
+#: lexer.ll:441
+msgid "Brace found at end of lyric.  Did you forget a space?"
+msgstr ""
+
+#: lexer.ll:540
+msgid "Brace found at end of markup.  Did you forget a space?"
+msgstr ""
+
+#: lexer.ll:640
+#, c-format
+msgid "invalid character: `%c'"
+msgstr ""
+
+#: lexer.ll:727
+#, c-format
+msgid "unknown escaped string: `\\%s'"
+msgstr ""
+
+#: lexer.ll:824
+#, c-format
+msgid "Incorrect lilypond version: %s (%s, %s)"
+msgstr ""
+
+#: lexer.ll:825
+msgid "Consider updating the input with the convert-ly script"
+msgstr ""
+
+#. TODO: print location
+#: lexer.ll:945
+msgid "can't find signature for music function"
+msgstr ""
+
+#: backend-library.scm:19 lily.scm:439 ps-to-png.scm:88
+#, lisp-format
+msgid "Invoking `~a'..."
+msgstr ""
+
+#: backend-library.scm:24
+#, lisp-format
+msgid "`~a' failed (~a)"
+msgstr ""
+
+#: backend-library.scm:84 framework-tex.scm:339 framework-tex.scm:364
+#, lisp-format
+msgid "Converting to `~a'..."
+msgstr ""
+
+#: backend-library.scm:100
+#, lisp-format
+msgid "Converting to ~a..."
+msgstr ""
+
+#: backend-library.scm:145
+#, lisp-format
+msgid "Writing header field `~a' to `~a'..."
+msgstr ""
+
+#: define-context-properties.scm:13 define-grob-properties.scm:10
+#: define-music-properties.scm:10
+#, lisp-format
+msgid "symbol ~S redefined"
+msgstr ""
+
+#: define-markup-commands.scm:251
+msgid "no systems found in \\score markup, does it have a \\layout block?"
+msgstr ""
+
+#: define-markup-commands.scm:1205
+#, lisp-format
+msgid "not a valid duration string: ~a"
+msgstr ""
+
+#: define-music-types.scm:738
+#, lisp-format
+msgid "symbol expected: ~S"
+msgstr ""
+
+#: define-music-types.scm:741
+#, lisp-format
+msgid "can't find music object: ~S"
+msgstr ""
+
+#: define-music-types.scm:761
+#, lisp-format
+msgid "unknown repeat type `~S'"
+msgstr ""
+
+#: define-music-types.scm:762
+msgid "See music-types.scm for supported repeats"
+msgstr ""
+
+#: document-backend.scm:91
+#, lisp-format
+msgid "pair expected in doc ~s"
+msgstr ""
+
+#: document-backend.scm:135
+#, lisp-format
+msgid "can't find interface for property: ~S"
+msgstr ""
+
+#: document-backend.scm:145
+#, lisp-format
+msgid "unknown Grob interface: ~S"
+msgstr ""
+
+#: documentation-lib.scm:45
+#, lisp-format
+msgid "Processing ~S..."
+msgstr ""
+
+#: documentation-lib.scm:150
+#, lisp-format
+msgid "Writing ~S..."
+msgstr ""
+
+#: documentation-lib.scm:172
+#, lisp-format
+msgid "can't find description for property ~S (~S)"
+msgstr ""
+
+#: framework-eps.scm:71 framework-eps.scm:72
+#, lisp-format
+msgid "Writing ~a..."
+msgstr ""
+
+#: framework-ps.scm:275
+#, lisp-format
+msgid "can't embed ~S=~S"
+msgstr ""
+
+#: framework-ps.scm:326
+#, lisp-format
+msgid "can't extract file matching ~a from ~a"
+msgstr ""
+
+#: framework-ps.scm:343
+#, lisp-format
+msgid "don't know how to embed ~S=~S"
+msgstr ""
+
+#: framework-ps.scm:373
+#, lisp-format
+msgid "don't know how to embed font ~s ~s ~s"
+msgstr ""
+
+#: framework-ps.scm:579
+#, lisp-format
+msgid "can't convert <stdout> to ~S"
+msgstr ""
+
+#: framework-ps.scm:596 framework-ps.scm:599
+#, lisp-format
+msgid "can't generate ~S using the postscript back-end"
+msgstr ""
+
+#: framework-ps.scm:606
+msgid ""
+"nThe PostScript backend does not support the 'classic'\n"
+"framework. Use the EPS backend instead,\n"
+"\n"
+"  lilypond -b eps <file>\n"
+"\n"
+"or remove the lilypond-book specific settings from the input.\n"
+msgstr ""
+
+#: framework-tex.scm:356
+#, lisp-format
+msgid "TeX file name must not contain whitespace: `~a'"
+msgstr ""
+
+#: layout-beam.scm:29
+#, lisp-format
+msgid "Error in beam quanting.  Expected (~S,~S) found ~S."
+msgstr ""
+
+#: layout-beam.scm:46
+#, lisp-format
+msgid "Error in beam quanting.  Expected ~S 0, found ~S."
+msgstr ""
+
+#: layout-page-layout.scm:439
+msgid "Calculating page breaks..."
+msgstr ""
+
+#: lily-library.scm:458
+#, lisp-format
+msgid "unknown unit: ~S"
+msgstr ""
+
+#: lily-library.scm:491
+#, lisp-format
+msgid "no \\version statement found,  add~afor future compatibility"
+msgstr ""
+
+#: lily-library.scm:498
+msgid "old relative compatibility not used"
+msgstr ""
+
+#: lily.scm:172
+#, lisp-format
+msgid "wrong type for argument ~a.  Expecting ~a, found ~s"
+msgstr ""
+
+#: lily.scm:377 lily.scm:429
+#, lisp-format
+msgid "failed files: ~S"
+msgstr ""
+
+#: lily.scm:419
+#, lisp-format
+msgid "Redirecting output to ~a..."
+msgstr ""
+
+#: markup.scm:88
+#, lisp-format
+msgid "Wrong number of arguments.  Expect: ~A, found ~A: ~S"
+msgstr ""
+
+#: markup.scm:94
+#, lisp-format
+msgid "Invalid argument in position ~A.  Expect: ~A, found: ~S."
+msgstr ""
+
+#: music-functions.scm:533
+#, lisp-format
+msgid "music expected: ~S"
+msgstr ""
+
+#. FIXME: uncomprehensable message
+#: music-functions.scm:584
+#, lisp-format
+msgid "Bar check failed.  Expect to be at ~a, instead at ~a"
+msgstr ""
+
+#: music-functions.scm:739
+#, lisp-format
+msgid "can't find quoted music `~S'"
+msgstr ""
+
+#: music-functions.scm:947
+#, lisp-format
+msgid "unknown accidental style: ~S"
+msgstr ""
+
+#: output-ps.scm:282
+msgid "utf-8-string encountered in PS backend"
+msgstr ""
+
+#: output-svg.scm:41
+#, lisp-format
+msgid "undefined: ~S"
+msgstr ""
+
+#: output-svg.scm:121
+#, lisp-format
+msgid "can't decypher Pango description: ~a"
+msgstr ""
+
+#: output-tex.scm:98
+#, lisp-format
+msgid "can't find ~a in ~a"
+msgstr ""
+
+#: paper.scm:69
+msgid "Not in toplevel scope"
+msgstr ""
+
+#: paper.scm:114
+#, lisp-format
+msgid "This is not a \\layout {} object, ~S"
+msgstr ""
+
+#. TODO: should raise (generic) exception with throw, and catch
+#. that in parse-scm.cc
+#: paper.scm:142
+msgid "Must use #(set-paper-size .. ) within \\paper { ... }"
+msgstr ""
+
+#: parser-clef.scm:124
+#, lisp-format
+msgid "unknown clef type `~a'"
+msgstr ""
+
+#: parser-clef.scm:125
+msgid "see scm/clef.scm for supported clefs"
+msgstr ""
+
+#: ps-to-png.scm:97
+#, lisp-format
+msgid "~a exited with status: ~S"
+msgstr ""
+
+#: to-xml.scm:190
+msgid "assertion failed"
+msgstr ""
index 8f7c52660e9711581e939dbd2a9a329ff8028710..46d23d949a46556acdc6e2f17540104b87dbeeca 100644 (file)
 (ly:add-interface
  'fret-diagram-interface
  "A fret diagram"
+
  '(align-dir barre-type dot-color dot-radius finger-code fret-count
-  label-dir number-type size string-count
-  string-fret-finger-combinations thickness))
+label-dir number-type size string-count xo-font-magnification
+mute-string open-string orientation string-fret-finger-combinations
+thickness))
 
 (ly:add-interface
  'grace-spacing-interface
index 7434de317f6c8459c9d9a334f607b0fd8e865dce..d00d2875b5d3bd92a40c4792d1c4a97073488ffa 100644 (file)
@@ -727,6 +727,15 @@ than a whole rest.")
 
      ;; end ancient notation
 
+     ;; fret-diagrams extra properties
+     (xo-font-magnification ,number? "Magnification used for mute and
+         open string indicators in fret diagrams")
+     (mute-string ,string? "String to be used to indicate muted string in
+         fret diagrams")
+     (open-string ,string? "String to be used to indicate open string in
+         fret diagrams")
+     (orientation ,symbol? "Orientation of fret-diagram.  Options include @code{normal} and @code{landscape}")
+
      )))
 
 (define-public all-backend-properties
index bf39fe65ccf64d3dec149a48c426217a02650027..5f69f817de3a8c8a83358c8d7301ac1613c13663 100644 (file)
@@ -62,45 +62,72 @@ with magnification @varr{mag} of the string @var{text}."
         (interpret-markup layout my-props text)))
 
 
-(define (draw-strings string-count fret-range th size)
-"Draw the strings (vertical lines) for a fret diagram with
+(define (draw-strings string-count fret-range th size orientation)
+"Draw the string lines for a fret diagram with
 @var{string-count} strings and frets as indicated in @var{fret-range}.
 Line thickness is given by @var{th}, fret & string spacing by
-@var{size}. "
+@var{size}.  Orientation is determined by @var{orientation}. "
   (let* ((fret-count (+ (- (cadr fret-range) (car fret-range)) 1))
          (sl (* (+ fret-count 1) size))
          (sth (* size th))
          (half-thickness (* sth 0.5))
          (gap (- size sth))
-         (string-stencil (ly:make-stencil (list 'draw-line sth 0 0 0 sl)
+         (string-stencil
+            (if (eq? orientation 'normal)
+                (ly:make-stencil (list 'draw-line sth 0 0 0 sl)
                          (cons (- half-thickness) half-thickness)
-                         (cons (- half-thickness) (+ sl half-thickness)))))
+                         (cons (- half-thickness) (+ sl half-thickness)))
+                (ly:make-stencil (list 'draw-line sth 0 0 sl 0)
+                         (cons (- half-thickness) (+ sl half-thickness))
+                         (cons (- half-thickness) half-thickness)))))
     (if (= string-count 1)
          string-stencil
+        (if (eq? orientation 'normal)
         (ly:stencil-combine-at-edge
-         (draw-strings (- string-count 1) fret-range th size) X RIGHT
+                (draw-strings (- string-count 1) fret-range th size orientation) X RIGHT
          string-stencil
-         gap))))
-
-(define (draw-fret-lines fret-count string-count th size)
-  "Draw @var{fret-count} frets (horizontal lines) for a fret diagram
+                gap)
+            (ly:stencil-combine-at-edge
+                (draw-strings (- string-count 1) fret-range th size orientation) Y UP
+                string-stencil
+                gap)))))
+
+(define (draw-fret-lines fret-count string-count th size orientation)
+ "Draw @var{fret-count} fret lines for a fret diagram
 with @var{string-count} strings.  Line thickness is given by @var{th},
-fret & string spacing by @var{size}. "
-  (let* ((fret-length (* (- string-count 1) size))
+fret & string spacing by @var{size}. Orientation is given by @var{orientation}"
+   (let* (;(fret-length (* (- string-count 1) size))
         (sth (* size th))
-        (half-thickness (* sth 0.5))
+          ;(half-thickness (* sth 0.5))
         (gap (- size sth))
-        (fret-line (ly:make-stencil (list 'draw-line sth half-thickness size (- fret-length half-thickness) size)
-                                    (cons 0 fret-length)
-                                    (cons (- size half-thickness) (+  size half-thickness)))))
+          (fret-line (draw-fret-line string-count th size orientation)))
     (if (= fret-count 1)
        fret-line
-       (ly:stencil-combine-at-edge fret-line Y UP
-                                   (draw-fret-lines (- fret-count 1) string-count th size)
-                                   gap))))
-
-(define (draw-thick-top-fret props string-count th size)
-  "Draw a thick top fret for a fret diagram whose base fret is not 1."
+         (if (eq? orientation 'normal)
+             (ly:stencil-combine-at-edge (draw-fret-lines (- fret-count 1) string-count th size orientation) Y UP
+                 fret-line
+                 gap 0)
+             (ly:stencil-combine-at-edge (draw-fret-lines (- fret-count 1) string-count th size orientation) X RIGHT
+                 fret-line
+                 gap 0)))))
+
+(define (draw-fret-line string-count th size orientation)
+ "Draw a fret line for a fret diagram."
+   (let* ((fret-length (* (- string-count 1) size))
+          (sth (* size th))
+          (half-thickness (* sth 0.5)))
+         (if (eq? orientation 'normal)
+                         (ly:make-stencil (list 'draw-line sth half-thickness size
+                                                (- fret-length half-thickness) size)
+                                                (cons 0 fret-length)
+                                                (cons  (- half-thickness) half-thickness))
+                         (ly:make-stencil (list 'draw-line sth 0 half-thickness
+                                                0 (- fret-length half-thickness))
+                                                (cons (- half-thickness)  half-thickness)
+                                                (cons 0 fret-length)))))
+
+(define (draw-thick-zero-fret props string-count th size orientation)
+ "Draw a thick zeroth fret for a fret diagram whose base fret is not 1."
   (let* ((sth (* th size))
                                        ;          (top-fret-thick (* sth (chain-assoc-get 'top-fret-thickness props 3.0)))
         (top-fret-thick (* sth 3.0))
@@ -112,29 +139,36 @@ fret & string spacing by @var{size}. "
         (y2 (+ top-fret-thick half-thick))
         (x-extent (cons (- x1) x2))
         (y-extent (cons 0 y2)))
+          (if (eq? orientation 'normal)
     (ly:make-stencil (list 'round-filled-box x1 x2 y1 y2 sth)
-                    x-extent y-extent)))           
+                             x-extent y-extent)
+              (ly:make-stencil (list 'round-filled-box y1 y2 x1 x2 sth)
+                            y-extent x-extent))))
 
 
-(define (draw-frets layout props fret-range string-count th size)
 "Draw the frets (horizontal lines) for a fret diagram with
+(define (draw-frets layout props fret-range string-count th size orientation)
"Draw the fret lines for a fret diagram with
 @var{string-count} strings and frets as indicated in @var{fret-range}.
 Line thickness is given by @var{th}, fret & string spacing by
-@var{size}. "
+@var{size}. Orientation is given by @var{orientation}."
   (let* ((fret-count (+ (- (cadr fret-range) (car fret-range)) 1))
          (fret-length (* (- string-count 1) size))
          (half-thickness (* th 0.5))
-         (base-fret (car fret-range)))
+         (base-fret (car fret-range))
+         (fret-zero (draw-fret-line string-count th size orientation)))
+      (if (eq? orientation 'normal)
+          (ly:stencil-combine-at-edge
+              (draw-fret-lines fret-count string-count th size orientation) Y UP
+              fret-zero
+              (- size th))
     (ly:stencil-combine-at-edge
-     (draw-fret-lines fret-count string-count th size) Y UP
-     (if (= base-fret 1)
-        (draw-thick-top-fret props string-count th size)
-        (draw-fret-lines 1 string-count th size)) 
-     (- size th)))) 
+              fret-zero X RIGHT
+              (draw-fret-lines fret-count string-count th size orientation)
+              (- size th)))))
 
 
-(define (draw-dots layout props string-count fret-range size finger-code 
-                    dot-position dot-radius dot-thickness dot-list)
+(define (draw-dots layout props string-count fret-count fret-range size finger-code
+                    dot-position dot-radius dot-thickness dot-list orientation)
   "Make dots for fret diagram."
 
   (let* ((scale-dot-radius (* size dot-radius))
@@ -148,13 +182,19 @@ Line thickness is given by @var{th}, fret & string spacing by
          (dot-label-font-mag scale-dot-radius)
 ;         (string-label-font-mag (* size (chain-assoc-get 'label-font-mag props 0.7)))
          (string-label-font-mag (* size 0.6))
-         (fret-count (+ (- (cadr fret-range) (car fret-range) 1)))
+;         (fret-count (+ (- (cadr fret-range) (car fret-range) 1)))
          (mypair (car dot-list))
          (restlist (cdr dot-list))
-         (xpos (* size (- string-count (car mypair))))
+         (string (car mypair))
+         (fret (cadr mypair))
+         (xpos (* size (if (eq? orientation 'normal)
+                           (- string-count string)
+                           (+ (- fret 1 ) dot-position))))
 ;TODO -- figure out what 4 is and get rid of it
 ;UGH -- 4?
-         (ypos (* size (+ 4 (- fret-count (cadr mypair) dot-position ))))
+         (ypos (* size (if (eq? orientation 'normal)
+                       (+ 2 (- fret-count fret dot-position ))
+                       (- string-count string))))
          (extent (cons (- scale-dot-radius) scale-dot-radius))
          (finger (caddr mypair))
          (finger (if (number? finger) (number->string finger) finger))
@@ -191,66 +231,108 @@ Line thickness is given by @var{th}, fret & string spacing by
                  (if (eq? finger-code 'below-string) 
                      (ly:stencil-add 
                          positioned-dot
+                         (if (eq? orientation 'normal)
                          (ly:stencil-translate-axis 
                              (ly:stencil-translate-axis 
                                  (centered-stencil (sans-serif-stencil layout props 
                                                         string-label-font-mag finger))
                               xpos  X)
-                          (* size finger-yoffset) Y))
+                                 (* size finger-yoffset) Y)
+                              (ly:stencil-translate-axis
+                                 (ly:stencil-translate-axis
+                                     (centered-stencil (sans-serif-stencil layout props
+                                                        string-label-font-mag finger))
+                                    (* size (+ 2 fret-count finger-yoffset))  X)
+                                  ypos Y)))
                      ;unknown finger-code
                      positioned-dot)))))
     (if (null? restlist) 
         labeled-dot-stencil
         (ly:stencil-add 
-            (draw-dots layout props string-count fret-range size finger-code 
-                          dot-position dot-radius dot-thickness restlist)
+            (draw-dots layout props string-count fret-count fret-range size finger-code
+                          dot-position dot-radius dot-thickness restlist orientation)
             labeled-dot-stencil))))
 
-(define (draw-xo layout props string-count fret-range size xo-list
+(define (draw-xo layout props string-count fret-range size xo-list orientation)
 "Put open and mute string indications on diagram, as contained in @var{xo-list}."
     (let* ((fret-count (+ (- (cadr fret-range) (car fret-range) 1)))
-;           (xo-font-mag (* size (chain-assoc-get 'xo-font-magnification props 0.5)))
-           (xo-font-mag (* size 0.5))
+           (xo-font-mag (* size (chain-assoc-get 'xo-font-magnification props 0.5)))
+;           (xo-font-mag (* size 0.5))
 ;           (xo-horizontal-offset (* size (chain-assoc-get 'xo-horizontal-offset props -0.35)))
            (xo-horizontal-offset (* size -0.35))
            (mypair (car xo-list))
            (restlist (cdr xo-list))
-           (glyph-string (if (eq? (car mypair) 'mute) "X" "O"))
+           (glyph-string (if (eq? (car mypair) 'mute)
+               (chain-assoc-get 'mute-string props "X")
+               (chain-assoc-get 'open-string props "O")))
            (xpos (+ (* (- string-count (cadr mypair)) size) xo-horizontal-offset ))
-           (glyph-stencil (ly:stencil-translate-axis 
-              (sans-serif-stencil layout props (* size xo-font-mag) glyph-string) xpos X)))
+           (glyph-stencil (if (eq? orientation 'normal)
+                              (ly:stencil-translate-axis
+                                   (sans-serif-stencil layout props (* size xo-font-mag) glyph-string)
+                                    xpos X)
+                              (ly:stencil-translate-axis
+                                   (sans-serif-stencil layout props (* size xo-font-mag) glyph-string)
+                                    xpos Y))))
+;(display "def-xo-mag" default-xo-magnification)
       (if (null? restlist)
           glyph-stencil
           (ly:stencil-add
-            (draw-xo layout props string-count fret-range size restlist)
+            (draw-xo layout props string-count fret-range size restlist orientation)
             glyph-stencil))))
 
-(define (make-bezier-sandwich-list left right bottom height thickness)
-" Make the argument list for a horizontal bezier sandwich from
-@var{left} to @var{right} with a bottom at @var{bottom}, a height of
-@var{height}, and a thickness of @var{thickness}."
-   (let* ((width (+ (- right left) 1))
-          (x1 (+ (* width thickness) left))
-          (x2 (- right (* width thickness)))
-          (bottom-control-point-height (+ bottom (- height thickness)))
-          (top-control-point-height (+ bottom height)))
+(define (make-bezier-sandwich-list start stop base height thickness orientation)
+" Make the argument list for a bezier sandwich from
+@var{start} to @var{stop} with a baseline at @var{base}, a height of
+@var{height}, and a thickness of @var{thickness}.  If @var{orientation} is
+@var{'normal}, @var{base} is a y coordinate, otherwise it's an x coordinate."
+   (let* ((width (+ (- stop start) 1))
+          (x1 (+ (* width thickness) start))
+          (x2 (- stop (* width thickness)))
+          (bottom-control-point-height (if (eq? orientation 'normal)
+                                           (+ base (- height thickness))
+                                           (- base (- height thickness))))
+          (top-control-point-height (if (eq? orientation 'normal)
+                                        (+ base height)
+                                        (- base height))))
            ; order of points is: left cp low, right cp low, right end low, left end low
            ;                     right cp high, left cp high, left end high, right end high.
-       (list (cons x1 bottom-control-point-height) (cons x2 bottom-control-point-height) (cons right bottom) (cons left bottom)
-             (cons x2 top-control-point-height) (cons x1 top-control-point-height) (cons left bottom) (cons right bottom))))
-
-(define (draw-barre layout props string-count fret-range size finger-code dot-position dot-radius barre-list)
+       (if (eq? orientation 'normal)
+           (list (cons x1 bottom-control-point-height)
+                 (cons x2 bottom-control-point-height)
+                 (cons stop base)
+                 (cons start base)
+                 (cons x2 top-control-point-height)
+                 (cons x1 top-control-point-height)
+                 (cons start base)
+                 (cons stop base))
+           (list (cons bottom-control-point-height x1)
+                 (cons bottom-control-point-height x2)
+                 (cons base stop)
+                 (cons base start)
+                 (cons top-control-point-height x2)
+                 (cons top-control-point-height x1)
+                 (cons base start)
+                 (cons base stop)))))
+
+(define (draw-barre layout props string-count fret-range size finger-code dot-position dot-radius barre-list orientation)
    "Create barre indications for a fret diagram"
    (if (not (null? barre-list))
      (let* ((string1 (caar barre-list))
             (string2 (cadar barre-list))
             (fret (caddar barre-list))
+            (top-fret (cadr fret-range))
+            (low-fret (car fret-range))
             (barre-type (chain-assoc-get 'barre-type props 'curved))
             (scale-dot-radius (* size dot-radius))
-            (barre-vertical-offset (chain-assoc-get 'barre-vertical-offset props 0.5))
+            (barre-vertical-offset 0.5)
+;            (barre-vertical-offset (chain-assoc-get 'barre-vertical-offset props 0.5))
             ;; 2 is 1 for empty fret at bottom of figure + 1 for interval (top-fret - fret + 1) -- not an arbitrary constant
             (dot-center-y (* size
                             (- (+ 2 (- (cadr fret-range) fret)) dot-position)))
+            (dot-center-fret-coordinate (+ (- fret low-fret) dot-position))
+            (barre-fret-coordinate (+ dot-center-fret-coordinate (* (- barre-vertical-offset 0.5) dot-radius)))
+            (barre-start-string-coordinate (- string-count string1))
+            (barre-end-string-coordinate (- string-count string2))
             (bottom (+ dot-center-y (* barre-vertical-offset scale-dot-radius)))
             (left (* size (- string-count string1)))
             (right (* size (- string-count string2)))
@@ -258,14 +340,42 @@ Line thickness is given by @var{th}, fret & string spacing by
             (bezier-thick 0.1)
 ;;            (bezier-height (chain-assoc-get 'bezier-height props 0.5))
             (bezier-height 0.5)
-            (bezier-list (make-bezier-sandwich-list left right bottom (* size bezier-height) (* size bezier-thick)))
+            (bezier-list (if (eq? orientation 'normal)
+                             (make-bezier-sandwich-list
+                                 (* size barre-start-string-coordinate)
+                                 (* size barre-end-string-coordinate)
+                                 (* size (+ 1 (- top-fret fret) barre-fret-coordinate))
+                                 (* size bezier-height)
+                                 (* size bezier-thick)
+                                 orientation)
+                              (make-bezier-sandwich-list
+                                 (* size barre-start-string-coordinate)
+                                 (* size barre-end-string-coordinate)
+                                 (* size barre-fret-coordinate)
+                                 (* size bezier-height)
+                                 (* size bezier-thick)
+                                 orientation)))
             (barre-stencil (if (eq? barre-type 'straight)
+                               (if (eq? orientation 'normal)
                               (ly:make-stencil (list 'draw-line (* size dot-radius) left dot-center-y right dot-center-y)
                                                (cons left right)
                                                (cons (- dot-center-y scale-dot-radius) (+ dot-center-y scale-dot-radius))) 
+                                   (ly:make-stencil (list 'draw-line (* size dot-radius)
+                                               (* size barre-fret-coordinate)
+                                               (* size barre-start-string-coordinate)
+                                               (* size barre-fret-coordinate)
+                                               (* size barre-end-string-coordinate))
+                                               (cons (- (* size barre-fret-coordinate) scale-dot-radius)
+                                                     (+ (* size barre-fret-coordinate) scale-dot-radius))
+                                               (cons (* size barre-start-string-coordinate)
+                                                     (* size barre-end-string-coordinate))))
+                              (if (eq? orientation 'normal)
                               (ly:make-stencil (list 'bezier-sandwich `(quote ,bezier-list) (* size bezier-thick))
                                   (cons left right)
-                                  (cons bottom (+ bottom (* size bezier-height)))))))
+                                      (cons bottom (+ bottom (* size bezier-height))))
+                                  (ly:make-stencil (list 'bezier-sandwich `(quote ,bezier-list) (* size bezier-thick))
+                                      (cons bottom (+ bottom (* size bezier-height)))
+                                      (cons left right))))))
         (if (not (null? (cdr barre-list)))
             (ly:stencil-add barre-stencil
                  (draw-barre layout props string-count fret-range size finger-code 
@@ -276,7 +386,7 @@ Line thickness is given by @var{th}, fret & string spacing by
 "Calculate the font step necessary to get a desired magnification"
 (* 6 (/ (log mag) (log 2))))
 
-(define (label-fret layout props string-count fret-range size)
+(define (label-fret layout props string-count fret-range size orientation)
    "Label the base fret on a fret diagram"
    (let* ((base-fret (car fret-range))
 ;          (label-font-mag (chain-assoc-get 'label-font-mag props 0.7))
@@ -291,9 +401,13 @@ Line thickness is given by @var{th}, fret & string spacing by
               ((equal?  number-type 'roman-upper) (format #f "~:@r" base-fret))
               ((equal? 'arabic number-type)  (format #f "~d" base-fret))
               (else (format #f  "~(~:@r~)" base-fret)))))
+       (if (eq? orientation 'normal)
+           (ly:stencil-translate-axis
+               (sans-serif-stencil layout props (* size label-font-mag) label-text)
+                       (* size (+ fret-count label-vertical-offset)) Y)
        (ly:stencil-translate-axis 
            (sans-serif-stencil layout props (* size label-font-mag) label-text) 
-                       (* size (+ fret-count label-vertical-offset)) Y)))
+                       (* size (+ 1 label-vertical-offset)) X))))
  
 (define-builtin-markup-command (fret-diagram-verbose layout props marking-list)
   (list?)
@@ -347,6 +461,7 @@ indications per string.
 ;TODO -- adjust padding for fret label?  it appears to be too close to dots
          (string-count (chain-assoc-get 'string-count props 6)) ; needed for everything
          (fret-count (chain-assoc-get 'fret-count props 4)) ; needed for everything
+         (orientation (chain-assoc-get 'orientation props 'normal)) ; needed for everything
          (finger-code (chain-assoc-get 'finger-code props 'none))  ; needed for both draw-dots and draw-barre
          (default-dot-radius (if (eq? finger-code 'in-dot) 0.425 0.25))  ; bigger dots if labeled
          (default-dot-position (if (eq? finger-code 'in-dot) (- 0.95 default-dot-radius) 0.6))  ; move up to make room for bigger if labeled
@@ -366,26 +481,40 @@ indications per string.
          (fret-range (cdr (assoc 'fret-range parameters)))
          (barre-list (cdr (assoc 'barre-list parameters)))
          (fret-diagram-stencil (ly:stencil-add
-                            (draw-strings string-count fret-range th size)
-                            (draw-frets layout props fret-range string-count th size))))
+                            (draw-strings string-count fret-range th size orientation)
+                            (draw-frets layout props fret-range string-count th size orientation))))
          (if (not (null? barre-list))
              (set! fret-diagram-stencil (ly:stencil-add
                                     (draw-barre layout props string-count fret-range size finger-code  
-                                                dot-position dot-radius barre-list)
+                                                dot-position dot-radius barre-list orientation)
                                     fret-diagram-stencil)))
          (if (not (null? dot-list))
              (set! fret-diagram-stencil (ly:stencil-add
                                     fret-diagram-stencil
-                                    (draw-dots layout props string-count fret-range size finger-code 
-                                          dot-position dot-radius th dot-list))))
+                                    (draw-dots layout props string-count fret-count fret-range size finger-code
+                                          dot-position dot-radius th dot-list orientation))))
+         (if (= (car fret-range) 1)
+             (set! fret-diagram-stencil
+                 (if (eq? orientation 'normal)
+                     (ly:stencil-combine-at-edge fret-diagram-stencil Y UP
+                         (draw-thick-zero-fret props string-count th size orientation))
+                     (ly:stencil-combine-at-edge fret-diagram-stencil X LEFT
+                         (draw-thick-zero-fret props string-count th size orientation)))))
          (if (not (null? xo-list))
-             (set! fret-diagram-stencil (ly:stencil-combine-at-edge
-                                    fret-diagram-stencil Y UP
-                                    (draw-xo layout props string-count fret-range size xo-list) xo-padding)))
+             (set! fret-diagram-stencil
+                  (if (eq? orientation 'normal)
+                      (ly:stencil-combine-at-edge fret-diagram-stencil Y UP
+                          (draw-xo layout props string-count fret-range size xo-list orientation) xo-padding )
+                      (ly:stencil-combine-at-edge fret-diagram-stencil X LEFT
+                          (draw-xo layout props string-count fret-range size xo-list orientation) xo-padding))))
          (if (> (car fret-range) 1) 
              (set! fret-diagram-stencil
+                  (if (eq? orientation 'normal)
                    (ly:stencil-combine-at-edge fret-diagram-stencil X label-dir
-                                              (label-fret layout props string-count fret-range size) label-space)))
+                             (label-fret layout props string-count fret-range size orientation) label-space)
+                      (ly:stencil-combine-at-edge fret-diagram-stencil Y label-dir
+                             (label-fret layout props string-count fret-range size orientation) label-space))))
+
          (ly:stencil-aligned-to fret-diagram-stencil X alignment)
         ))
          
@@ -398,10 +527,9 @@ indications per string.
 @end example
 
 @noindent
-for fret spacing 3/4 of staff space, D@tie{}chord diagram.
+for fret spacing 3/4 of staff space, D chord diagram
 
 Syntax rules for @var{definition-string}:
-
 @itemize @minus
       
 @item
index 8ad3600ffa70801ce7c9284743e0de30d165251b..f5db38b7a800a52d13f614411dc0707626784bee 100644 (file)
@@ -7,14 +7,17 @@
 
 (define-module (scm graphviz)
   #:use-module (lily)
-  #:export (make-graph add-node add-edge add-cluster))
+  #:export
+  (make-graph add-node add-edge add-cluster
+             graph-write
+             ))
 
 (define (make-graph filename)
-  (let ((empty-graph (list->vector (list filename '() '() '()))))
-    (ly:atexit write-graph (list empty-graph))
-    empty-graph))
+   #(() () () ()))
 
-(define (filename g) (vector-ref g 0))
+
+;; fixme: use structs/records.
+;; fixme add & use setters.
 (define (nodes g) (vector-ref g 1))
 (define (edges g) (vector-ref g 2))
 (define (clusters g) (vector-ref g 3))
 (define (add-edge graph node1 node2)
   (vector-set! graph 2 (cons `(,node1 . ,node2) (edges graph))))
 
-(define (write-graph graph)
-  (let ((out (open-file (filename graph) "w"))
-       (ns (nodes graph))
+(define (graph-write graph out)
+  (let ((ns (nodes graph))
        (es (edges graph))
        (cs (clusters graph)))
-    (ly:message (format "writing graph ~s..." (filename graph)))
+    (ly:message (format (_ "Writing graph `~a'...") (port-filename out)))
     (display "digraph G {\nrankdir=\"LR\"\nnode [shape=rectangle]\n" out)
     (map (lambda (n) (display (format "~a [label=\"~a\"]\n" (car n) (cdr n)) out))
         ns)