?.*
AUTHORS.txt
INSTALL.txt
+README.txt
TAGS
\#*
\#.*
LOCALSTEPMAKE_TEMPLATES=lilypond ly
LILYPOND_BOOK_FLAGS=--extra-options '-e "(ly:set-option (quote internal-type-checking) \#t)"'
README_TOP_FILES= DEDICATION THANKS
-EXTRA_DIST_FILES= TRANSLATION
include $(depth)/make/stepmake.make
default: local-doc
+ifeq ($(out),www)
local-WWW-2: txt-to-html $(OUT_HTML_FILES)
local-WWW-clean: deep-WWW-clean
deep-WWW-clean:
rm -rf $(outdir)/wiki-dump
+endif
OUT_TXT_FILES = $(addprefix $(outdir)/, $(addsuffix .txt, $(README_TOP_FILES)))
ps: $(PS_FILES)
-# urg
default:
GENHTMLS = engraving colorado computer-notation
OUTGENHTMLS = $(addprefix $(outdir)/, $(GENHTMLS:%=%.html))
+ifeq ($(out),www)
local-WWW-2: $(addprefix $(outdir)/, $(BIB_FILES:.bib=.html) index.html)
+endif
$(outdir)/%.bib: %.bib
ln -f $< $@
mkdir -p $(dir $@)
ln -sf $(depth)/.. $(@)
+ifeq ($(out),www)
local-WWW-1: $(PDF_FILES)
local-WWW-2: $(HTML_FILES) $(OUT_HTML_FILES) $(source-links)
+endif
$(PDF_FILES) $(HTML_FILES): $(ITEXI_FILES)
harder than it looks.
-@subsubheading TWEAKS
+@subsubheading Tweaks
In general, any \set or \override commands should go in the
@qq{select snippets} section, which means that they should go in
would be ideal if every significant known issue had a workaround to avoid
the difficulty.
+@seealso
+
+@ref{Adding and editing snippets}.
+
@node Updating docs with convert-ly
@section Updating doc with @command{convert-ly}
@uref{http://lsr.dsi.unimi.it/, LilyPond Snippet Repository (LSR)}
is a collection of lilypond examples. A subset of these examples
are automatically imported into the documentation, making it easy
-for users to contribute to the docs without learning git and
-texinfo.
+for users to contribute to the docs without learning Git and
+Texinfo.
@node Adding and editing snippets
@section Adding and editing snippets
-When you create (or find!) a nice snippet, please add it to LSR. Go
-to @uref{http://lsr.dsi.unimi.it/, LSR} and log in (if you haven't
-already, create an account). Follow the instructions on the website.
+@subheading General guidelines
+
+When you create (or find!) a nice snippet, if it supported by LilyPond
+version running on LSR, please add it to LSR. Go to
+@uref{http://lsr.dsi.unimi.it/, LSR} and log in -- if you haven't
+already, create an account. Follow the instructions on the website.
These instructions also explain how to modify existing snippets.
-If you think the snippet is particularly informative and you think
-it should be included in the documentation, tag it with @qq{docs}
-and one or more other categories.
+If you think the snippet is particularly informative and you think it
+should be included in the documentation, tag it with @qq{docs} and one
+or more other categories, or ask somebody who has editing permissions to
+do it on the development list.
Please make sure that the lilypond code follows the guidelines in
@ref{LilyPond formatting}.
+If a new snippet created for documentation purposes compiles with
+LilyPond version currently on LSR, it should be added to LSR, and a
+reference to the snippet should be added to the documentation.
+
+If the new snippet uses new features that are not available in the
+current LSR version, the snippet should be added to @file{input/new} and
+a reference should be added to the manual.
+
+Snippets created or updated in @file{input/new} should be copied to
+@file{input/lsr} by invoking at top of the source tree
+
+@example
+scripts/auxiliar/makelsr.py
+@end example
+
+Be sure that @command{make web} runs successfully before submitting a
+patch, to prevent breaking compilation.
+
+@subheading Formatting snippets in @file{input/new}
+
+When adding a file to this directory, please start the file with
+
+@example
+\version "2.x.y"
+\header @{
+ lsrtags = "rhythms,expressive-marks" % use existing LSR tags other than
+% 'docs'; see makelsr.py for the list of tags used to sort snippets.
+ texidoc = "This code demonstrates ..." % this will be formated by Texinfo
+ doctitle = "Snippet title" % please put this at the end so that
+ the '% begin verbatim' mark is added correctly by makelsr.py.
+@}
+@end example
+
+and name the file @file{snippet-title.ly}.
+
@node Approving snippets
@section Approving snippets
@end enumerate
+Note that whenever there is one snippet from @file{input/new} and the
+other from LSR with the same file name, the one from @file{input/new}
+will be copied by @command{makelsr.py}.
+
@node Fixing snippets in LilyPond sources
@section Fixing snippets in LilyPond sources
local-dist: $(icon)
xgifs: $(OUTGIF_FILES)
pngs: $(OUTPNG_FILES)
+
+ifeq ($(out),www)
local-WWW-1: $(OUTPNG_FILES)
+endif
include $(depth)/make/stepmake.make
+ifeq ($(out),www)
local-WWW-1: $(OUT_TEXI_FILES)
+endif
.SECONDARY:
@end ignore
+@item Dashed and dotted slurs, phrasing slurs, and ties
+have been made variable thickness, and
+partially dashed slurs are now available:
+@lilypond[quote]
+\relative c'' {
+ \slurDashed
+ c4( d e f) |
+ \slurDotted
+ g4( f e d) |
+ \slurHalfDashed
+ c4( d e f)
+}
+@end lilypond
+
+
@item An eyeglasses markup was added, incidating strongly to look at the
conductor for instructions:
@lilypond[quote]
mkdir -p $(dir $@)
ln -sf $(depth)/.. $(@)
+ifeq ($(out),www)
local-WWW-1: $(MASTER_TEXI_FILES) $(PDF_FILES) info
local-WWW-2: $(HTML_FILES) $(DEEP_HTML_FILES) $(source-links)
+endif
$(outdir)/%.bib: %.bib
ln -f $< $@
$(outdir)/lilypond.texi $(outdir)/lilypond-program.texi $(outdir)/lilypond-learning.texi $(outdir)/music-glossary.texi: $(ITELY_FILES) $(ITEXI_FILES)
+$(outdir)/lilypond.texi: $(outdir)/ly-grammar.txt
# Rules for the automatically generated documentation
+$(outdir)/ly-grammar.txt: $(top-src-dir)/lily/parser.yy
+ cd $(outdir) && $(BISON) -v $<
+ $(auxscript-dir)/yyout2grammar.py $(outdir)/parser.output $@
+
# There used to be a dependency on a dummy target, to force a rebuild
# of lilypond-internals every time. however, this triggers
# compilation during install, which is a bad thing (tm).
The documentation is built by issuing
@example
-make web
+make doc
@end example
After compilation, the HTML documentation tree is available in
standard documentation path by issuing
@example
-make web-install
+make install-doc
@end example
@noindent
Separate installation of this documentation is done by issuing
@example
-make info-install
+make install-info
@end example
@noindent
-Note that to get the images in Info documentation, @code{web-install}
+Note that to get the images in Info documentation, @code{install-doc}
target creates symbolic links to HTML and PDF installed documentation
tree in @file{@var{prefix}/share/info}, in order to save disk space,
-whereas @code{info-install} copies images in
+whereas @code{install-info} copies images in
@file{@var{prefix}/share/info} subdirectories.
It is possible to build a documentation tree in
selection; this can be achieved by issuing
@example
-make WEB_TARGETS=online web
+make WEB_TARGETS=online doc
@end example
@noindent
./autogen.sh # ignore any warning messages
cp GNUmakefile.in GNUmakefile
make -C python
-nice make LILYPOND_EXTERNAL_BINARY=/path/to/bin/lilypond web
+nice make LILYPOND_EXTERNAL_BINARY=/path/to/bin/lilypond doc
@end example
Please note that this may break sometimes -- for example, if a new
once. For details, see @ref{Phrasing slurs}.
@cindex slur style
-@cindex solid slur
-@cindex dotted slur
-@cindex dashed slur
@cindex slur, solid
@cindex slur, dotted
@cindex slur, dashed
@cindex solid slur
@cindex dotted slur
@cindex dashed slur
-@cindex sytle, slur
+@cindex style, slur
@funindex \slurDashed
@funindex slurDashed
@funindex \slurDotted
@funindex slurHalfDashed
@funindex \slurHalfSolid
@funindex slurHalfSolid
+@cindex slur, half dashed and half solid
Slurs can also be made half-dashed (the first half dashed, the
second half solid) or half-solid (the first half solid, the second
half dashed):
@lilypond[verbatim,quote,relative=1]
+c4( e g2)
\slurHalfDashed
g4( e c2)
\slurHalfSolid
g4( e c2)
@end lilypond
+@funindex \slurDashPattern
+@funindex slurDashPattern
+@cindex slur, defining dash patterns
+
+Custom dash patterns for slurs can be defined:
+
+@lilypond[verbatim,quote,relative=1]
+c4( e g2)
+\slurDashPattern #0.7 #0.75
+g4( e c2)
+\slurDashPattern #0.5 #2.0
+c4( e g2)
+\slurSolid
+g4( e c2)
+@end lilypond
+
@funindex \slurUp
@code{\slurNeutral},
@code{\slurDashed},
@code{\slurDotted},
-@code{\slurHaldDashed},
+@code{\slurHalfDashed},
@code{\slurHalfSolid},
+@code{\slurDashPattern},
@code{\slurSolid}.
@endpredefined
@funindex phrasingSlurDown
@funindex \phrasingSlurNeutral
@funindex phrasingSlurNeutral
-@funindex phrasingSlurDashed
-@funindex \phrasingSlurDashed
-@funindex \phrasingSlurDotted
-@funindex phrasingSlurDotted
-@funindex \phrasingSlurSolid
-@funindex phrasingSlurSolid
Typographically, a phrasing slur behaves almost exactly like a
normal slur. However, they are treated as different objects; a
@cindex simultaneous phrasing slurs
@cindex multiple phrasing slurs
-@cindex slurs, simultaneous phrasing
-@cindex slurs, multiple phrasing
-@cindex phrasing slurs, simultaneous
-@cindex phrasing slurs, multiple
+@cindex slur, simultaneous phrasing
+@cindex slur, multiple phrasing
+@cindex phrasing slur, simultaneous
+@cindex phrasing slur, multiple
Simultaneous or overlapping phrasing slurs are not permitted.
+@funindex phrasingSlurDashed
+@funindex \phrasingSlurDashed
+@funindex \phrasingSlurDotted
+@funindex phrasingSlurDotted
+@funindex \phrasingSlurSolid
+@funindex phrasingSlurSolid
+@cindex phrasing slur, dashed
+@cindex dashed phrasing slur
+@cindex phrasing slur, dotted
+@cindex dotted phrasing slurs
+@cindex slur, dashed phrasing
+@cindex slur, dotted phrasing
+
Phrasing slurs can be solid, dotted, or dashed. Solid is the default
style for phrasing slurs:
g4\( e c2\)
@end lilypond
+@funindex phrasingSlurHalfDashed
+@funindex \phrasingSlurHalfDashed
+@funindex \phrasingSlurHalfSolid
+@funindex phrasingSlurHalfSolid
+@cindex phrasing slur, half solid and half dashed
+@cindex slur, half solid and half dashed phrasing
+
+Phrasing slurs can also be made half-dashed (the first half dashed, the
+second half solid) or half-solid (the first half solid, the second
+half dashed):
+
+@lilypond[verbatim,quote,relative=1]
+c4\( e g2\)
+\phrasingSlurHalfDashed
+g4\( e c2\)
+\phrasingSlurHalfSolid
+c4\( e g2\)
+\phrasingSlurSolid
+g4\( e c2\)
+@end lilypond
+
+@funindex \phrasingSlurDashPattern
+@funindex phrasingSlurDashPattern
+@cindex phrasing slur, defining dash patterns
+@cindex slur, phrasing, defining dash patterns
+@cindex slur, definind dash patterns for phrasing
+
+Custom dash patterns for phrasing slurs can be defined:
+
+@lilypond[verbatim,quote,relative=1]
+c4\( e g2\)
+\phrasingSlurDashPattern #0.7 #0.75
+g4\( e c2\)
+\phrasingSlurDashPattern #0.5 #2.0
+c4\( e g2\)
+\phrasingSlurSolid
+g4\( e c2\)
+@end lilypond
+
+Dash pattern definitions for phrasing slurs have the same structure
+as dash pattern definitions for slurs. For more information about
+complex dash patterns, see the snippets under @ref{Slurs}.
@predefined
@code{\phrasingSlurUp},
@code{\phrasingSlurNeutral},
@code{\phrasingSlurDashed},
@code{\phrasingSlurDotted},
+@code{\phrasingSlurHalfDashed},
+@code{\phrasingSlurHalfSolid},
+@code{\phrasingSlurDashPattern},
@code{\phrasingSlurSolid}.
@endpredefined
@rlearning{On the un-nestedness of brackets and ties}.
Notation Reference:
-@ref{Direction and placement}.
+@ref{Direction and placement},
+@ref{Slurs}.
Snippets:
@rlsr{Expressive marks}.
@funindex arpeggioBracket
@funindex \arpeggioParenthesis
@funindex arpeggioParenthesis
+@funindex \arpeggioParenthesisDashed
+@funindex arpeggioParenthesisDashed
Special @emph{bracketed} arpeggio symbols can be created:
<c e g c>2\arpeggio
\arpeggioParenthesis
<c e g c>2\arpeggio
+\arpeggioParenthesisDashed
+<c e g c>2\arpeggio
\arpeggioNormal
<c e g c>2\arpeggio
@end lilypond
+The dash properties of the parenthesis arpeggio are controlled
+with the @code{'dash-details} property, which is described at @ref{Slurs}.
+
Arpeggios can be explicitly written out with ties. For more
information, see @ref{Ties}.
@code{\arpeggioArrowDown},
@code{\arpeggioNormal},
@code{\arpeggioBracket},
-@code{\arpeggioParenthesis}.
+@code{\arpeggioParenthesis}
+@code{\arpeggioParenthesisDashed}.
@endpredefined
@rglos{arpeggio}.
Notation Reference:
+@ref{Slurs},
@ref{Ties}.
Snippets:
Internals Reference:
@rinternals{Arpeggio},
+@rinternals{Slur},
@rinternals{PianoStaff}.
* Literature list:: Reference works about music notation.
* Notation manual tables:: Tables and charts.
* Cheat sheet:: Summary of LilyPond syntax.
+* LilyPond grammar:: Syntax diagram for LilyPond parser.
* GNU Free Documentation License:: License of this document.
* LilyPond command index::
* LilyPond index::
@include literature.itely
@include notation-appendices.itely
@include cheatsheet.itely
+
+@node LilyPond grammar
+@appendix LilyPond grammar
+
+This appendix contains a description of the LilyPond grammar, as
+output from the parser.
+@verbatiminclude ly-grammar.txt
+
@include fdl.itexi
@node LilyPond command index
musical phrasing. A tie is just a way of extending a note
duration, similar to the augmentation dot.}
-A tie is entered using the tilde symbol @code{~}
+A tie is entered using the tilde symbol (@code{~}).
@lilypond[quote,verbatim,relative=2]
a2 ~ a
@funindex \tieSolid
@funindex tieSolid
-Solid, dotted or dashed ties may be specified, see Predefined
-commands.
+Ties may be made dashed, dotted, or a combination of solid and
+dashed.
+@lilypond[quote, verbatim, relative=1]
+\tieDotted
+c2 ~ c
+\tieDashed
+c2 ~ c
+\tieHalfDashed
+c2 ~ c
+\tieHalfSolid
+c2 ~ c
+\tieSolid
+c2 ~ c
+@end lilypond
+
+Custom dash patterns can be specified:
+
+@lilypond[quote, verbatim, relative=1]
+\tieDashPattern #0.3 #0.75
+c2 ~ c
+\tieDashPattern #0.7 #1.5
+c2 ~ c
+\tieSolid
+c2 ~ c
+@end lilypond
+
+Dash pattern definitions for ties have the same structure as
+dash pattern definitions for slurs.
+For more information about complex dash patterns,
+see the snippets under @ref{Slurs}.
@predefined
@code{\tieUp},
@code{\tieNeutral},
@code{\tieDotted},
@code{\tieDashed},
+@code{\tieDashPattern},
+@code{\tieHalfDashed},
+@code{\tieHalfSolid},
@code{\tieSolid}.
@endpredefined
@rglos{tie},
@rglos{laissez vibrer}.
-Notation Reference: @ref{Automatic note splitting}.
+Notation Reference:
+@ref{Slurs},
+@ref{Automatic note splitting}.
Snippets:
@rlsr{Rhythms}.
python-modules:
$(MAKE) -C python
-do-top-doc: python-modules
+top-doc: python-modules
local-clean: local-clean-ChangeLog
local-clean-ChangeLog:
rm -f ChangeLog
-dist-toplevel-txt-files: do-top-doc
+dist-toplevel-txt-files: top-doc
-mkdir -p $(distdir)
ln $(TOPDOC_TXT_FILES) $(distdir)/
ln $(top-src-dir)/stepmake/aclocal.m4 $(distdir)/
-doc:
- $(MAKE) -C Documentation
-
info:
$(foreach d, $(INFO_DIRECTORIES),$(MAKE) -C $(d) out=www info && ) true
-info-install: info
+install-info: info
$(MAKE) out=www COPY_INFO_IMAGES=1 install-info-WWW
install-help2man:
$(MAKE) -C scripts man install-help2man
$(MAKE) -C lily man install-help2man
+install-doc:
+ $(MAKE) out=www install-WWW
+ $(MAKE) out=www install-info-WWW
+
+uninstall-doc:
+ $(MAKE) out=www uninstall-WWW
+
+local-install:
+ $(INSTALL) -d $(DESTDIR)$(local_lilypond_datadir)
+
+final-install:
+ @true
+
+ifeq ($(out),www)
# All web targets, except info image symlinks and info docs are
# installed in non-recursing target from TOP-SRC-DIR
install-WWW:
install-info-WWW:
$(foreach d, $(INFO_DIRECTORIES),$(MAKE) -C $(d) install-info && ) true
-web-install:
- $(MAKE) out=www install-WWW
- $(MAKE) out=www install-info-WWW
-
uninstall-WWW:
rm -rf $(DESTDIR)$(webdir)
-rmdir $(package_docdir)
$(MAKE) -C Documentation/user uninstall
$(MAKE) -C input/lsr uninstall
-web-uninstall:
- $(MAKE) out=www uninstall-WWW
-
-local-install:
- $(INSTALL) -d $(DESTDIR)$(local_lilypond_datadir)
-
-final-install:
- @true
-
# For online docs with content negotiation, issue `make web WEB_TARGETS=online'
# For both online and offline docs, issue `make web WEB_TARGETS="offline online"'
find $(outdir) -name '*-root' | xargs rm -rf
$(buildscript-dir)/www_post $(PACKAGE_NAME) $(TOPLEVEL_VERSION) $(outdir) "$(WEB_TARGETS)"
find $(outdir)/offline-root -type l -delete
+endif
tree-prefix = $(outdir)
src-ext = c cc yy ll hh icc py scm tex ps texi itexi tely itely sh
-web-clean: snippets-clean $(tree-share-prefix)/lilypond-force
+doc-clean: snippets-clean $(tree-share-prefix)/lilypond-force
default: $(config_h) build-dir-setup
BUG HUNTERS/SUGGESTIONS
+Chris Snyder
David Kastrup
Karim Haddad
+Mark Polesky
+Martin Tarenskeen
Michael Käppler
+Nick Payne
Release 2.12
test -n "$CONFIGURATION" && mc=" conf=$CONFIGURATION" || mc=""
+if make top-doc 1>/dev/null 2>&1; then
+ rm -f INSTALL.txt && ln Documentation/topdocs/out/INSTALL.txt .
+ rm -f README.txt && ln Documentation/topdocs/out/README.txt .
+fi
+
cat <<EOF
Type:
true
endif
+local-clean:
+ rm -f $(INFO_IMAGES_DIR)
+
+ifeq ($(out),www)
# All web targets, except info image symlinks and info docs are
# installed in non-recursing target from TOP-SRC-DIR
local-install-WWW: local-install-info
local-uninstall-WWW: local-uninstall-info
-local-clean:
- rm -f $(INFO_IMAGES_DIR)
-
local-WWW-1: info $(outdir)/lilypond-snippets.pdf \
$(outdir)/lilypond-snippets.texi
local-WWW-2: $(outdir)/lilypond-snippets/index.html \
$(outdir)/lilypond-snippets-big-page.html \
$(source-links)
+endif
.SECONDARY:
-This directory contains examples generated automatically from LSR:
+This directory contains examples generated automatically from LSR
http://lsr.dsi.unimi.it/
-To update this directory, do at top of the source tree
-
-scripts/auxiliar/makelsr.py DIR
-
-where DIR is the directory unpacked from lsr-snippets-doc-DATE tarball
-available on http://lsr.dsi.unimi.it/download.
-
-Snippets in input/new may "overwrite" snippets from LSR, e.g. for
-snippets that convert-ly can't automatically convert to current ly
-syntax; snippets may also be added to input/new to demonstrate new
-features in development series.
-
-Any changes made to .ly files will be lost next time makelsr.py is
-run. Please make updates to the LSR database or input/new directly.
-You must be an editor to change "approved" snippets in LSR; otherwise
-just copy the snippet you want to modify in a new snippet, and tag it
-with the "correction-wanted" tag.
+To update this directory and find addtional information, see
+the Contributors' Guide, section "LSR to Git".
\version "2.13.1"
\header {
- lsrtags = "titles"
+ lsrtags = "text, titles"
texidoces = "
Con algo de código de Scheme, se puede añadir fácilmente la fecha
%% Do not edit this file; it is auto-generated from input/new
%% This file is in the public domain.
+%% Note: this file works from version 2.12.0
\version "2.13.1"
\header {
\header {
lsrtags = "rhythms"
+ texidoces = "
+
+Los números de compás se alinean de forma predeterminada por la
+derecha con su objeto padre. Éste es por lo general el borde
+izquierdo de una lÃnea o, si los números se imprimen dentro de la
+lÃnea, el lado isquierdo de una lÃnea divisoria. Los números
+también se pueden situar directamente sobre la barra de compás o
+alineados por la izquierda con ella.
+
+"
+
+ doctitlees = "Alineación de los números de compás"
+
texidoc = "
Bar numbers by default are right-aligned to their parent object. This
is usually the left edge of a line or, if numbers are printed within a
%% Do not edit this file; it is auto-generated from input/new
%% This file is in the public domain.
+%% Note: this file works from version 2.12.0
\version "2.13.1"
\header {
%% Do not edit this file; it is auto-generated from input/new
%% This file is in the public domain.
+%% Note: this file works from version 2.12.0
\version "2.13.1"
\header {
%% Do not edit this file; it is auto-generated from input/new
%% This file is in the public domain.
+%% Note: this file works from version 2.12.0
\version "2.13.1"
\header {
%% Do not edit this file; it is auto-generated from input/new
%% This file is in the public domain.
+%% Note: this file works from version 2.12.0
\version "2.13.1"
\header {
%% Do not edit this file; it is auto-generated from input/new
%% This file is in the public domain.
+%% Note: this file works from version 2.12.0
\version "2.13.1"
\header {
%% Do not edit this file; it is auto-generated from input/new
%% This file is in the public domain.
+%% Note: this file works from version 2.12.0
\version "2.13.1"
\header {
doctitlees = "Cambiar la forma de los silencios multicompás"
%% Do not edit this file; it is auto-generated from input/new
%% This file is in the public domain.
+%% Note: this file works from version 2.12.0
\version "2.13.1"
\header {
%% Do not edit this file; it is auto-generated from input/new
%% This file is in the public domain.
+%% Note: this file works from version 2.12.0
\version "2.13.1"
\header {
texidoces = "
%% Do not edit this file; it is auto-generated from input/new
%% This file is in the public domain.
+%% Note: this file works from version 2.12.0
\version "2.13.1"
\header {
doctitlede = "Die Taktart verändern ohne die Bebalkung zu beeinflussen"
+%% Translation of GIT committish :<e71f19ad847d3e94ac89750f34de8b6bb28611df>
+ texidocfr = "
+La commande @code{\time} gère les propriétés
+@code{timeSignatureFraction}, @code{beatLength}, @code{beatGrouping}
+et @code{measureLength} dans le contexte @code{Timing}, normallement
+rattaché à @code{Score}. Le fait de modifier la valeur de
+@code{timeSignatureFraction} aura pour effet de changer l'apparence du
+symbole affiché sans pour autant affecter les autres propriétés de la
+métrique :
+
+"
+ doctitlefr = "Changement de métrique sans affecter les règles de ligature"
+
texidoc = "
The @code{\\time} command sets the properties
@code{timeSignatureFraction}, @code{beatLength}, @code{beatGrouping}
"
doctitlede = "Die Zahl der N-tole verändern"
+
+%% Translation of GIT committish :<e71f19ad847d3e94ac89750f34de8b6bb28611df>
+ texidocfr = "
+L'apparence du chiffre est déterminée par la propriété @code{text} dans
+@code{TupletNumber}. La valeur par défaut imprime seulement le
+dénominateur, mais si elle est définie par la fonction
+@code{tuplet-number::calc-fraction-text}, la fraction entière
+@var{num}:@var{den} sera imprimée à la place.
+
+"
+ doctitlefr = "Modifier l'apparence du chiffre de nolet"
+
texidoc = "
By default, only the numerator of the tuplet number is printed over the
tuplet bracket, i.e., the denominator of the argument to the
%% Do not edit this file; it is auto-generated from input/new
%% This file is in the public domain.
+%% Note: this file works from version 2.12.0
\version "2.13.1"
\header {
texidoces = "
%% Do not edit this file; it is auto-generated from input/new
%% This file is in the public domain.
+%% Note: this file works from version 2.13.0
\version "2.13.1"
\header {
%% Do not edit this file; it is auto-generated from input/new
%% This file is in the public domain.
+%% Note: this file works from version 2.12.0
\version "2.13.1"
\header {
lsrtags = "paper-and-layout" % a new tag like "Mixing text and music" or
%% Do not edit this file; it is auto-generated from input/new
%% This file is in the public domain.
+%% Note: this file works from version 2.12.0
\version "2.13.1"
\header {
lsrtags = "pitches,editorial-annotations,really-cool"
%% Do not edit this file; it is auto-generated from input/new
%% This file is in the public domain.
+%% Note: this file works from version 2.12.0
\version "2.13.1"
\header {
%% Do not edit this file; it is auto-generated from input/new
%% This file is in the public domain.
+%% Note: this file works from version 2.12.0
\version "2.13.1"
\header {
%% Do not edit this file; it is auto-generated from input/new
%% This file is in the public domain.
+%% Note: this file works from version 2.12.0
\version "2.13.1"
\header {
%% Do not edit this file; it is auto-generated from input/new
%% This file is in the public domain.
+%% Note: this file works from version 2.12.0
\version "2.13.1"
\header {
texidoces = "
%% Do not edit this file; it is auto-generated from input/new
%% This file is in the public domain.
+%% Note: this file works from version 2.12.0
\version "2.13.1"
\header {
%% Do not edit this file; it is auto-generated from input/new
%% This file is in the public domain.
+%% Note: this file works from version 2.12.0
\version "2.13.1"
\header {
%% Do not edit this file; it is auto-generated from input/new
%% This file is in the public domain.
+%% Note: this file works from version 2.12.0
\version "2.13.1"
\header {
%% Do not edit this file; it is auto-generated from input/new
%% This file is in the public domain.
+%% Note: this file works from version 2.12.0
\version "2.13.1"
\header {
texidoces = "
%% Do not edit this file; it is auto-generated from input/new
%% This file is in the public domain.
+%% Note: this file works from version 2.12.0
\version "2.13.1"
\header {
texidoces = "
%% Do not edit this file; it is auto-generated from input/new
%% This file is in the public domain.
+%% Note: this file works from version 2.12.0
\version "2.13.1"
\header {
%% Do not edit this file; it is auto-generated from input/new
%% This file is in the public domain.
+%% Note: this file works from version 2.12.0
\version "2.13.1"
\header {
%% Do not edit this file; it is auto-generated from input/new
%% This file is in the public domain.
+%% Note: this file works from version 2.12.0
\version "2.13.1"
\header {
lsrtags = "tweaks-and-overrides"
%% Do not edit this file; it is auto-generated from input/new
%% This file is in the public domain.
+%% Note: this file works from version 2.12.0
\version "2.13.1"
\header {
lsrtags = "tweaks-and-overrides"
"
doctitlede = "Bindebögen manuell setzen"
+
+%% Translation of GIT committish :<e71f19ad847d3e94ac89750f34de8b6bb28611df>
+ texidocfr = "
+Il est possible de graver manuellement les liaisons de tenue, en
+modifiant la propriété @code{tie-configuration}. Pour chaque paire, le
+premier nombre indique la distance à la portée, en espaces de portée, et
+le second la direction (1 pour haut, @minus{}1 pour bas).
+
+"
+ doctitlefr = "Dessin à main levée de liaisons de tenue"
+
texidoc = "
Ties may be engraved manually by changing the @code{tie-configuration}
property of the @code{TieColumn} object. The first number indicates the
"
doctitlede = "Mehrere Triolen notieren, aber nur einmal \\times benutzen"
+
+%% Translation of GIT committish :<e71f19ad847d3e94ac89750f34de8b6bb28611df>
+ texidocfr = "
+La propriété @code{tupletSpannerDuration} spécifie la longueur voulue de
+chaque crochet. Avec elle, vous pouvez faire plusieurs nolets en ne
+tapant @code{\times} qu'une fois, ce qui évite une longue saisie.
+
+Dans l'exemple suivant, deux triolets sont imprimés avec une seule fonction
+@code{\times}.
+
+Pour plus d'information sur @code{make-moment}, voir @ref{Time administration}.
+
+"
+ doctitlefr = "Plusieurs triolets avec une seule commande \\times"
+
texidoc = "
The property @code{tupletSpannerDuration} sets how long each of the
tuplets contained within the brackets after @code{\\times} should last.
%% Do not edit this file; it is auto-generated from input/new
%% This file is in the public domain.
+%% Note: this file works from version 2.12.0
\version "2.13.1"
\header {
%% Do not edit this file; it is auto-generated from input/new
%% This file is in the public domain.
+%% Note: this file works from version 2.12.0
\version "2.13.1"
\header {
%% Do not edit this file; it is auto-generated from input/new
%% This file is in the public domain.
+%% Note: this file works from version 2.12.0
\version "2.13.1"
\header {
%% Do not edit this file; it is auto-generated from input/new
%% This file is in the public domain.
+%% Note: this file works from version 2.12.0
\version "2.13.1"
\header {
doctitlede = "Schlagrhythmus für Guitarren"
lsrtags = "rhythms,fretted-strings"
- texidoc = "For guitar music, it is possible to show strum rhythms, along
+ texidoc = "
+For guitar music, it is possible to show strum rhythms, along
with melody notes, chord names, and fret diagrams.
"
doctitle = "Guitar strum rhythms"
%% Do not edit this file; it is auto-generated from input/new
%% This file is in the public domain.
+%% Note: this file works from version 2.12.0
\version "2.13.1"
\header {
%% Do not edit this file; it is auto-generated from input/new
%% This file is in the public domain.
+%% Note: this file works from version 2.12.0
\version "2.13.1"
\header {
texidoces = "
%% Do not edit this file; it is auto-generated from input/new
%% This file is in the public domain.
+%% Note: this file works from version 2.12.0
\version "2.13.1"
\header {
texidoces = "
%% Do not edit this file; it is auto-generated from input/new
%% This file is in the public domain.
+%% Note: this file works from version 2.12.0
\version "2.13.1"
\header {
%% Do not edit this file; it is auto-generated from input/new
%% This file is in the public domain.
+%% Note: this file works from version 2.12.0
\version "2.13.1"
\header {
texidoces = "
%% Do not edit this file; it is auto-generated from input/new
%% This file is in the public domain.
+%% Note: this file works from version 2.12.0
\version "2.13.1"
\header {
texidoces = "
%% Do not edit this file; it is auto-generated from input/new
%% This file is in the public domain.
+%% Note: this file works from version 2.12.0
\version "2.13.1"
\header {
lsrtags = "rhythms,tweaks-and-overrides"
%% Do not edit this file; it is auto-generated from input/new
%% This file is in the public domain.
+%% Note: this file works from version 2.13.1
\version "2.13.1"
\header {
%% Do not edit this file; it is auto-generated from input/new
%% This file is in the public domain.
+%% Note: this file works from version 2.12.0
\version "2.13.1"
\header {
%% Do not edit this file; it is auto-generated from input/new
%% This file is in the public domain.
+%% Note: this file works from version 2.12.0
\version "2.13.1"
\header {
%% Do not edit this file; it is auto-generated from input/new
%% This file is in the public domain.
+%% Note: this file works from version 2.12.0
\version "2.13.1"
\header {
%% Do not edit this file; it is auto-generated from input/new
%% This file is in the public domain.
+%% Note: this file works from version 2.12.0
\version "2.13.1"
\header {
%% Do not edit this file; it is auto-generated from input/new
%% This file is in the public domain.
+%% Note: this file works from version 2.13.1
\version "2.13.1"
\header {
%% Do not edit this file; it is auto-generated from input/new
%% This file is in the public domain.
+%% Note: this file works from version 2.13.0
\version "2.13.1"
\header {
%% Do not edit this file; it is auto-generated from input/new
%% This file is in the public domain.
+%% Note: this file works from version 2.12.0
\version "2.13.1"
\header {
texidoces = "
%% Do not edit this file; it is auto-generated from input/new
%% This file is in the public domain.
+%% Note: this file works from version 2.12.0
\version "2.13.1"
\header {
-%% Do not edit this file; it is auto-generated from input/new
+%% Do not edit this file; it is auto-generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
\version "2.13.1"
\header {
- lsrtags = "text"
+ lsrtags = "text, titles"
+
texidoc = "
-By putting the output of @code{lilypond-version} into lyrics or a
-text markup, it is possible to print the version number of LilyPond in
-a score, or in a document generated with @code{lilypond-book}.
+By putting the output of
+ @code{lilypond-version} into a lyric, it is possible to print the
+ version number of LilyPond in a score, or in a document generated
+ with @code{lilypond-book}. Another possibility is to append the
+ version number to the doc-string, in this manner:
+
"
doctitle = "Outputting the version number"
} % begin verbatim
-
\score {
\new Lyrics {
\override Score.RehearsalMark #'self-alignment-X = #LEFT
- \mark #(ly:export (string-append "Processed with LilyPond version "
- (lilypond-version)))
+ \mark #(string-append "Processed with LilyPond version " (lilypond-version))
s2
}
}
+
+
%% Do not edit this file; it is auto-generated from input/new
%% This file is in the public domain.
+%% Note: this file works from version 2.12.0
\version "2.13.1"
\header {
lsrtags = "spacing"
%% Do not edit this file; it is auto-generated from input/new
%% This file is in the public domain.
+%% Note: this file works from version 2.12.0
\version "2.13.1"
\header {
texidoces = "
"
doctitlede = "Zeilenumbrüche bei N-tolen mit Balken erlauben"
+
+%% Translation of GIT committish :<e71f19ad847d3e94ac89750f34de8b6bb28611df>
+ texidocfr = "
+Cet exemple peu académique démontre comment il est possible d'insérer un saut
+de ligne dans un nolet portant une ligature. Ces ligatures doivent toutefois
+être explicites.
+
+"
+ doctitlefr = "Saut de ligne au milieu d'un nolet avec ligature"
+
texidoc = "
This artificial example shows how both manual and automatic line breaks
may be permitted to within a beamed tuplet. Note that such off-beat
%% Do not edit this file; it is auto-generated from input/new
%% This file is in the public domain.
+%% Note: this file works from version 2.12.0
\version "2.13.1"
\header {
\header {
lsrtags = "rhythms"
+ texidoces = "
+
+Al establecer la propiedad @code{'strict-grace-spacing} hacemos
+que las columnas musicales para las notas de adorno sean
+'flotantes', es decir, desacopladas de las notas que no son de
+adorno: primero se aplica el espaciado de las notas normales, y
+luego se ponen las columnas musicales de las notas de adorno a la
+izquierda de las columnas musicales de las notas principales.
+
+"
+
+ doctitlees = "Posicionamiento de las notas de adorno con espacio flotante"
+
texidoc = "
Setting the property @code{'strict-grace-spacing} makes the musical
columns for grace notes 'floating', i.e., decoupled from the non-grace
%% Do not edit this file; it is auto-generated from input/new
%% This file is in the public domain.
+%% Note: this file works from version 2.12.0
\version "2.13.1"
\header {
doctitlees = "Posicionar los silencios multicompás"
\header {
lsrtags = "rhythms"
+ texidoces = "
+
+Se pueden imprimir los números de compás a intervalos regulares
+mediante el establecimiento de la propiedad
+@code{barNumberVisibility}. Aquà los números de compás se
+imprimen a cada dos compases excepto al final de la lÃnea.
+
+"
+
+ doctitlees = "Imprimir números de compás a intervalos regulares"
+
texidoc = "
Bar numbers can be printed at regular intervals by setting the property
@code{barNumberVisibility}. Here the bar numbers are printed every two
\header {
lsrtags = "rhythms, tweaks-and-overrides"
+ texidoces = "
+
+Los números de compás también se pueden imprimir dentro de rectángulos o de circunferencias.
+
+"
+ doctitlees = "Imprimir números de compás dentro de rectángulos o circunferencias"
+
texidoc = "
Bar numbers can also be printed inside boxes or circles.
%% Do not edit this file; it is auto-generated from input/new
%% This file is in the public domain.
+%% Note: this file works from version 2.12.1
\version "2.13.1"
\header {
%% Do not edit this file; it is auto-generated from input/new
%% This file is in the public domain.
+%% Note: this file works from version 2.12.0
\version "2.13.1"
\header {
texidoces = "
%% Do not edit this file; it is auto-generated from input/new
%% This file is in the public domain.
+%% Note: this file works from version 2.12.0
\version "2.13.1"
\header {
texidoces = "
\header {
lsrtags = "rhythms"
+ texidoces = "
+
+Los valores predeterminados para las notas de adorno están
+almacenados en los identificadores @code{startGraceMusic},
+@code{stopGraceMusic}, @code{startAcciaccaturaMusic},
+@code{stopAcciaccaturaMusic}, @code{startAppoggiaturaMusic} y
+@code{stopAppoggiaturaMusic}, que están definidos en el archivo
+@code{ly/grace-init.ly}. Redefiniéndolos se pueden obtener otros
+efectos.
+
+"
+
+ doctitlees = "Redefinición de los valores globales predeterminados para notas de adorno"
+
texidoc = "
The global defaults for grace notes are stored in the identifiers
@code{startGraceMusic}, @code{stopGraceMusic},
\header {
lsrtags = "rhythms, contexts-and-engravers"
+ texidoces = "
+
+Se pueden eliminar completamente los números de compás quitando el
+grabador @code{Bar_number_engraver} del contexto de @code{Score}.
+
+"
+
+ doctitlees = "Suprimir los números de compás de toda la partitura"
+
texidoc = "
Bar numbers can be removed entirely by removing the
@code{Bar_number_engraver} from the @code{Score} context.
Pausen können in verschiedenen Stilen dargestellt werden.
"
+
+%% Translation of GIT committish :<e71f19ad847d3e94ac89750f34de8b6bb28611df>
+ texidocfr = "
+Les silences peuvent être gravés selon différents styles.
+
+"
+ doctitlefr = "Styles de silences"
+
texidoc = "
Rests may be used in various styles.
%% Do not edit this file; it is auto-generated from input/new
%% This file is in the public domain.
+%% Note: this file works from version 2.12.0
\version "2.13.1"
\header {
texidoces = "
@q{pizzicato fuerte en que la cuerda se pulsa verticalmente produciendo un
chasquido y rebotando en el diapasón del instrumento} (Wikipedia). Se
denota mediante una circunferencia con una lÃnea vertical corta que parte
-del centro de aquélla hacia fuera. Aunque Lilypond no tiene ninguna
+del centro de aquélla hacia fuera. Aunque LilyPond no tiene ninguna
instrucción predefinida para crear esta marca, es fácil hacer la definición
y colocarla directamente en el archivo de lilypond.
"
%% Do not edit this file; it is auto-generated from input/new
%% This file is in the public domain.
+%% Note: this file works from version 2.12.0
\version "2.13.1"
\header {
%% Do not edit this file; it is auto-generated from input/new
%% This file is in the public domain.
+%% Note: this file works from version 2.12.0
\version "2.13.1"
\header {
lsrtags = "simultaneous-notes,tweaks-and-overrides"
%% Do not edit this file; it is auto-generated from input/new
%% This file is in the public domain.
+%% Note: this file works from version 2.12.0
\version "2.13.1"
\header {
lsrtags = "paper-and-layout"
+adding-the-current-date-to-a-score.ly
adjusting-lyrics-vertical-spacing.ly
aligning-and-centering-instrument-names.ly
aligning-marks-with-various-notation-objects.ly
%% Do not edit this file; it is auto-generated from input/new
%% This file is in the public domain.
+%% Note: this file works from version 2.12.0
\version "2.13.1"
\header {
lsrtags = "staff-notation"
adding-the-current-date-to-a-score.ly
aligning-and-centering-instrument-names.ly
demonstrating-all-headers.ly
+outputting-the-version-number.ly
%% Do not edit this file; it is auto-generated from input/new
%% This file is in the public domain.
+%% Note: this file works from version 2.12.0
\version "2.13.1"
\header {
doctitlees = "Transportar música con el menor número de alteraciones"
%% Do not edit this file; it is auto-generated from input/new
%% This file is in the public domain.
+%% Note: this file works from version 2.12.0
\version "2.13.1"
\header {
%% Do not edit this file; it is auto-generated from input/new
%% This file is in the public domain.
+%% Note: this file works from version 2.12.0
\version "2.13.1"
\header {
\header {
lsrtags = "rhythms"
+ texidoces = "
+
+Es posible aplicar la barrita que cruza la barra de las
+acciaccaturas, en otras situaciones.
+
+"
+
+ doctitlees = "Utilizar la barra que tacha las notas de adorno con notas normales"
+
texidoc = "
The slash through the stem found in acciaccaturas can be applied in
other situations.
%% Do not edit this file; it is auto-generated from input/new
%% This file is in the public domain.
+%% Note: this file works from version 2.12.0
\version "2.13.1"
\header {
lsrtags = "tweaks-and-overrides"
"
doctitlede = "Überbingungen für Arpeggio genutzen"
+
+%% Translation of GIT committish :<e71f19ad847d3e94ac89750f34de8b6bb28611df>
+ texidocfr = "
+Les liaisons de tenue servent parfois à rendre un accord arpégé. Dans
+ce cas, les notes liées ne sont pas toutes consécutives. Il faut alors
+assigner à la propriété @code{tieWaitForNote} la valeur @code{#t}
+(@emph{true} pour @qq{vrai}). Cette même méthode peut servir, par
+exemple, à lier un trémolo à un accord.
+"
+ doctitlefr = "Liaison de tenue et arpège"
+
texidoc = "
Ties are sometimes used to write out arpeggios. In this case, two tied
notes need not be consecutive. This can be achieved by setting the
%% Do not edit this file; it is auto-generated from input/new
%% This file is in the public domain.
+%% Note: this file works from version 2.12.0
\version "2.13.1"
%% Edit this file using a Unicode aware editor, such as GVIM, GEDIT, Emacs
%% Do not edit this file; it is auto-generated from input/new
%% This file is in the public domain.
+%% Note: this file works from version 2.12.0
\version "2.13.1"
\header {
texidoces = "
%% Do not edit this file; it is auto-generated from input/new
%% This file is in the public domain.
+%% Note: this file works from version 2.12.0
\version "2.13.1"
\header {
lsrtags = "repeats,staff-notation"
%% Do not edit this file; it is auto-generated from input/new
%% This file is in the public domain.
+%% Note: this file works from version 2.12.0
\version "2.13.1"
\header {
unstable development series. These snippets will be added to LSR
when it supports a version of LilyPond that includes these features.
-When adding a file to this directory, please start the file with
-
-\version "2.x.y"
-\header {
- lsrtags = "rhythms,expressive-marks" % use existing LSR tags other than
-% 'docs'; see makelsr.py for the list of tags used to sort snippets.
- texidoc = "This code demonstrates ..." % this will be formated by Texinfo
- doctitle = "Snippet title" % please put this at the end so that
- the '% begin verbatim' mark is added correctly by makelsr.py.
-}
-
-
-and name the file snippet-title.ly.
+See additional instructions in the Contributors' Guide, section
+Adding and editing snippets.
-\version "2.12.3"
+\version "2.13.1"
\header {
lsrtags = "rhythms"
+++ /dev/null
-\version "2.12.0"
-
-\header {
- lsrtags = "text"
- texidoc = "
-By putting the output of @code{lilypond-version} into lyrics or a
-text markup, it is possible to print the version number of LilyPond in
-a score, or in a document generated with @code{lilypond-book}.
-"
- doctitle = "Outputting the version number"
-}
-
-\score {
- \new Lyrics {
- \override Score.RehearsalMark #'self-alignment-X = #LEFT
- \mark #(ly:export (string-append "Processed with LilyPond version "
- (lilypond-version)))
- s2
- }
-}
TITLE=Unofficial MusicXML test suite
TEST_SUITE_VERSION=0.1
+ifeq ($(out),www)
local-WWW-2: zip
+endif
zip: $(outdir)/MusicXML-TestSuite-$(TEST_SUITE_VERSION).zip
-\version "2.12.0"
+\version "2.13.1"
\header { texidoc = "
The appearance of phrasing slurs may be changed from solid to dotted or dashed.
"
c\( d e c\) |
\phrasingSlurDashed
c\( d e c\) |
- \override PhrasingSlur #'dash-period = #2.0
- \override PhrasingSlur #'dash-fraction = #0.4
+ \phrasingSlurHalfDashed
+ c\( d e c\) |
+ \phrasingSlurHalfSolid
+ c\( d e c\) |
+ \phrasingSlurDashPattern #0.4 #2.0
+ c\( d e c\) |
+ \once \override Slur #'dash-definition = #'((0 0.25 1 1)
+ (0.3 0.7 0.4 0.75)
+ (0.75 1.0 1.0 1.0))
c\( d e c\) |
\phrasingSlurSolid
c\( d e c\) |
-\version "2.12.0"
+\version "2.13.1"
\header {texidoc = "@cindex Slur, dotted, dashed
The appearance of slurs may be changed from solid to dotted or dashed.
"
\relative c'{
- c( d e c) |
+ c( d e c) |
\slurDotted
- c( d e c) |
+ c( d e c) |
\slurDashed
- c( d e c) |
- \override Slur #'dash-period = #2.0
- \override Slur #'dash-fraction = #0.4
- c( d e c) |
+ c( d e c) |
+ \slurHalfDashed
+ c( d e c) |
+ \slurHalfSolid
+ c( d e c) |
+ \slurDashPattern #0.4 #2.0
+ c( d e c) |
+ \once \override Slur #'dash-definition = #'((0 0.25 1 1)
+ (0.3 0.7 0.4 0.75)
+ (0.75 1.0 1.0 1.0))
+ c( d e c) |
\slurSolid
- c( d e c) |
+ c( d e c) |
}
--- /dev/null
+\version "2.13.1"
+
+\header {
+ texidoc = "If right hand stems have accidentals, optical spacing
+correction is still applied, but only if the stem directions are
+different."
+}
+
+\relative c' {
+ \time 2/4
+ c8 cis''
+ cis8 cis,,
+}
--- /dev/null
+\version "2.13.1"
+\header {texidoc = "@cindex Tie, dotted, dashed
+The appearance of ties may be changed from solid to dotted or dashed.
+"
+}
+\layout{ ragged-right=##t }
+
+
+\relative c'{
+ c2 ~ c |
+ \tieDotted
+ c2 ~ c |
+ \tieDashed
+ c2 ~ c |
+ \tieHalfDashed
+ c2 ~ c |
+ \tieHalfSolid
+ c2 ~ c |
+ \tieDashPattern #0.4 #2.0
+ c2 ~ c |
+ \once \override Tie #'dash-definition = #'((0 0.25 1 1)
+ (0.3 0.7 0.4 0.75)
+ (0.75 1.0 1.0 1.0))
+ c2 ~ c |
+ \tieSolid
+ c2 ~ c |
+}
+
+
+
+
+
+
if (!pango_dict_->try_retrieve (key, &val))
{
if (be_verbose_global)
- progress_indication ("[" + string (pango_fn));
+ progress_indication ("\n[" + string (pango_fn));
Pango_font *pf = new Pango_font (pango_ft2_fontmap_,
description,
return 0;
if (be_verbose_global)
- progress_indication ("[" + file_name);
+ progress_indication ("\n[" + file_name);
val = Open_type_font::make_otf (file_name);
Arpeggio::brew_chord_slur (SCM smob)
{
Grob *me = unsmob_grob (smob);
+ SCM dash_definition = me->get_property ("dash-definition");
Interval heads = robust_scm2interval (me->get_property ("positions"),
Interval())
* Staff_symbol_referencer::staff_space (me);
Bezier curve = slur_shape (dy, height_limit, ratio);
curve.rotate (M_PI / 2);
- Stencil mol (Lookup::slur (curve, lt, lt, SCM_UNDEFINED));
+ Stencil mol (Lookup::slur (curve, lt, lt, dash_definition));
mol.translate_axis (heads[LEFT], Y_AXIS);
return mol.smobbed_copy ();
}
"positions "
"script-priority " // TODO: make around-note-interface
"stems "
+ "dash-definition " // TODO: make apply to non-slur arpeggios
);
/*
Subdivide a bezier at T into LEFT_PART and RIGHT_PART
+ using deCasteljau's algorithm.
*/
void
-Bezier::subdivide (Real t, Bezier &left_part, Bezier &right_part)
+Bezier::subdivide (Real t, Bezier *left_part, Bezier *right_part) const
{
- Offset b2[3];
- Offset b1[2];
- Offset b0;
- for (int i = 0; i < 3; i++)
- b2[i] = control_[i] + t * (control_[i+1] - control_[i]);
- for (int i = 0; i < 2; i++)
- b1[i] = b2[i] + t * (b2[i+1] - b2[i]);
- b0 = b1[0] + t * (b1[1] - b1[0]);
- left_part.control_[0] = control_[0];
- left_part.control_[1] = b2[0];
- left_part.control_[2] = b1[0];
- left_part.control_[3] = b0;
- right_part.control_[0] = b0;
- right_part.control_[1] = b1[1];
- right_part.control_[2] = b2[2];
- right_part.control_[3] = control_[3];
+ Offset p[CONTROL_COUNT][CONTROL_COUNT];
+
+ for (int i = 0; i < CONTROL_COUNT ; i++)
+ p[i][CONTROL_COUNT - 1 ] = control_[i];
+ for (int j = CONTROL_COUNT - 2; j >= 0 ; j--)
+ for (int i = 0; i < CONTROL_COUNT -1; i++)
+ p[i][j] = p[i][j+1] + t * (p[i+1][j+1] - p[i][j+1]);
+ for (int i = 0; i < CONTROL_COUNT; i++)
+ {
+ left_part->control_[i]=p[0][CONTROL_COUNT - 1 - i];
+ right_part->control_[i]=p[i][i];
+ }
}
/*
*/
Bezier
-Bezier::extract (Real t_min, Real t_max)
+Bezier::extract (Real t_min, Real t_max) const
{
+ if ((t_min < 0) || (t_max) > 1)
+ programming_error
+ ("bezier extract arguments outside of limits: curve may have bad shape");
+ if (t_min >= t_max)
+ programming_error
+ ("lower bezier extract value not less than upper value: curve may have bad shape");
Bezier bez1, bez2, bez3, bez4;
if (t_min == 0.0)
- {
- for (int i = 0; i < CONTROL_COUNT; i++)
- bez2.control_[i] = control_[i];
- }
+ bez2 = *this;
else
- {
- subdivide (t_min, bez1, bez2);
- }
+ subdivide (t_min, &bez1, &bez2);
if (t_max == 1.0)
- {
return bez2;
- }
else
{
- bez2.subdivide ((t_max-t_min)/(1-t_min), bez3, bez4);
+ bez2.subdivide ((t_max-t_min)/(1-t_min), &bez3, &bez4);
return bez3;
}
}
"DynamicLineSpanner "
"DynamicTextSpanner "
"DynamicText "
- "Hairpin "
- "TextSpanner ",
+ "Hairpin ",
/* read */
"",
" The error is formatted with @code{format} and @var{rest}.")
{
LY_ASSERT_TYPE (scm_is_string, str, 1);
- if (scm_is_pair(scm_car(rest)))
- rest=scm_car(rest);
str = scm_simple_format (SCM_BOOL_F, str, rest);
error (ly_scm2string (str));
return SCM_UNSPECIFIED;
state_stack_.push_back (yy_current_buffer);
if (be_verbose_global)
- progress_indication (string ("[") + file->name_string ());
+ {
+ string spaces = "";
+ for (size_t i = 0; i < state_stack_.size (); i++)
+ spaces += " ";
+ progress_indication (string ("\n") + spaces + string ("[") + file->name_string ());
+ }
include_stack_.push_back (file);
state_stack_.push_back (yy_current_buffer);
if (be_verbose_global)
- progress_indication (string ("[") + name);
+ {
+ string spaces = "";
+ for (size_t i = 0; i < state_stack_.size (); i++)
+ spaces += " ";
+ progress_indication (string ("\n") + spaces + string ("[") + name);
+ }
include_stack_.push_back (file);
yy_switch_to_buffer (yy_create_buffer (file->get_istream (), YY_BUF_SIZE));
void reverse ();
void rotate (Real);
void translate (Offset);
- void subdivide (Real, Bezier &, Bezier &);
- Bezier extract (Real, Real);
+ void subdivide (Real, Bezier *, Bezier *) const;
+ Bezier extract (Real, Real) const;
Real get_other_coordinate (Axis a, Real x) const;
vector<Real> solve_point (Axis, Real coordinate) const;
string result (&chars[0], chars.size ());
if (be_verbose_global)
- progress_indication ("]");
+ progress_indication ("]\n");
return result;
}
{
Stencil return_value;
- /* calculate the offset for the two beziers that make the sandwich
- * for the slur
+ /*
+ calculate the offset for the two beziers that make the sandwich
+ for the slur
*/
Real alpha = (curve.control_[3] - curve.control_[0]).arg ();
Bezier back = curve;
curve.control_[1] -= perp;
curve.control_[2] -= perp;
-/* Bezier test1, test2, test3, test4;
- test1 = back.extract(0., 1.0) ;
- test2 = curve.extract (0., 1.0);
- test3 = back.extract(0.0, 0.2);
- test4 = curve.extract (0.0, 0.2);
- return_value = bezier_sandwich (test1, test2, linethick);
-// return_value.add_stencil (
-// bezier_sandwich (test3, test4, linethick));
- return return_value; */
-
- if ((dash_details == SCM_UNDEFINED) || (dash_details == SCM_EOL))
- { /* solid slur */
+ if (!scm_is_pair (dash_details))
+ {
+ /* solid slur */
return_value = bezier_sandwich (back, curve, linethick);
}
else
- { /* dashed or combination slur */
+ {
+ /* dashed or combination slur */
int num_segments = scm_to_int (scm_length (dash_details));
for (int i=0; i<num_segments; i++)
{
Bezier back_segment = back.extract (t_min, t_max);
Bezier curve_segment = curve.extract (t_min, t_max);
if (dash_fraction == 1.0)
- {
return_value.add_stencil (bezier_sandwich (back_segment,
curve_segment,
linethick));
- }
else
{
Bezier back_dash, curve_dash;
linethick));
}
}
- }/* end for num_segments */
- }/* end dashed or combination slur */
+ }
+ }
return return_value;
}
/* create */
"DynamicTextSpanner "
"DynamicText "
- "Hairpin "
- "TextSpanner ",
+ "Hairpin ",
/* read */
"crescendoSpanner "
}
-/**
+/*
Correct for optical illusions. See [Wanske] p. 138. The combination
up-stem + down-stem should get extra space, the combination
down-stem + up-stem less.
Direction d = LEFT;
+ bool acc_right = false;
+
Grob *bar = Spacing_interface::extremal_break_aligned_grob (me, RIGHT,
rcolumn->break_status_dir (),
&bar_xextent);
continue;
/*
- don't correct if accidentals are sticking out of the right side.
+ Find accidentals which are sticking out of the right side.
*/
- if (d == RIGHT && Note_column::accidentals (it))
- return;
+ if (d == RIGHT)
+ acc_right = acc_right || Note_column::accidentals (it);
Grob *stem = Note_column::get_stem (it);
correction *= 0.5;
}
}
- else if (stem_dirs[LEFT] * stem_dirs[RIGHT] == 1)
+ /*
+ Only apply same direction correction if there are no
+ accidentals sticking out of the right hand side.
+ */
+ else if (stem_dirs[LEFT] * stem_dirs[RIGHT] == 1
+ && !acc_right)
correction = same_direction_correction (me, head_posns);
*space += correction;
string file_name = ly_scm2string (pfb_file_name);
if (be_verbose_global)
- progress_indication ("[" + file_name);
+ progress_indication ("\n[" + file_name);
vector<char> pfb_string = gulp_file (file_name, 0);
char *pfa = pfb2pfa ((Byte *) &pfb_string[0], pfb_string.size ());
string file_name = ly_scm2string (otf_file_name);
if (be_verbose_global)
- progress_indication ("[" + file_name);
+ progress_indication ("\n[" + file_name);
FT_Face face = open_ft_face (file_name, 0 /* index */);
string table = get_otf_table (face, "CFF ");
Stencil a;
SCM dash_definition = me->get_property ("dash-definition");
-// SCM p = me->get_property ("dash-period");
-// SCM f = me->get_property ("dash-fraction");
-// SCM interval = me->get_property ("dash-interval");
-// if (scm_is_number (p) && scm_is_number (f))
-// a = Lookup::dashed_slur (one, line_thick, robust_scm2double (p, 1.0),
-// robust_scm2double (f, 0));
-// else
- a = Lookup::slur (one,
- get_grob_direction (me) * base_thick,
- line_thick,
- dash_definition);
-// robust_scm2double (p, 1.0),
-// robust_scm2double (f, 0),
-// robust_scm2double (interval, 1));
+ a = Lookup::slur (one,
+ get_grob_direction (me) * base_thick,
+ line_thick,
+ dash_definition);
#if DEBUG_SLUR_SCORING
SCM annotation = me->get_property ("annotation");
}
if (be_verbose_global)
- message (_f ("Element count %d.", count + element_count ()));
+ message (_f ("Element count %d", count + element_count ()) + "\n");
}
SCM
Stencil a;
SCM dash_definition = me->get_property ("dash-definition");
-// SCM p = me->get_property ("dash-period");
-// SCM f = me->get_property ("dash-fraction");
-// SCM interval = me->get_property ("dash-interval");
-// if (scm_is_number (p) && scm_is_number (f))
-// a = Lookup::dashed_slur (b,
-// line_thick,
-// robust_scm2double (p, 1.0),
-// robust_scm2double (f, 0));
-// else
- a = Lookup::slur (b,
- get_grob_direction (me) * base_thick,
- line_thick,
- dash_definition);
-// robust_scm2double (p, 1.0),
-// robust_scm2double (f, 0),
-// robust_scm2double (interval, 1.0));
+ a = Lookup::slur (b,
+ get_grob_direction (me) * base_thick,
+ line_thick,
+ dash_definition);
#if DEBUG_TIE_SCORING
SCM annotation = me->get_property ("annotation");
"annotation "
"avoid-slur " // UGH.
"control-points "
- "dash-fraction "
- "dash-period "
+ "dash-definition "
"details "
"direction "
"head-direction "
string file_name = ly_scm2string (ttf_file_name);
if (be_verbose_global)
- progress_indication ("[" + file_name);
+ progress_indication ("\n[" + file_name);
FT_Face face;
string file_name = ly_scm2string (ttf_file_name);
if (be_verbose_global)
- progress_indication ("[" + file_name);
+ progress_indication ("\n[" + file_name);
Memory_out_stream stream;
(Voice AccidentalCautionary font-size -4)
(Voice Slur direction ,DOWN)
(Voice Script font-size -3)
+ (Voice Fingering font-size -8)
+ (Voice StringNumber font-size -8)
)
keepAliveInterfaces = #'(
\override Beam #'length-fraction = #0.62
%% No accidental in tablature !
- \remove Accidental_engraver
+ \remove "Accidental_engraver"
\override Glissando #'extra-dy = #0.75
\override Glissando #'bound-details #'right = #`((attach-dir . ,LEFT)
(padding . 0.3))
\override Glissando #'bound-details #'left = #`((attach-dir . ,RIGHT)
(padding . 0.3))
- \override Glissando #'extra-dy = #0.75
- \override Glissando #'gap = #0.2
}
\context {
(make-music 'SequentialMusic)))
-tag = #(define-music-function (parser location tag arg)
+tag =
+#(define-music-function (parser location tag arg)
(symbol? ly:music?)
(_i "Add @var{tag} to the @code{tags} property of @var{arg}.")
(ly:pitch-negate (pitch-of-note pitch-note)))
'Staff))
-tweak = #(define-music-function (parser location sym val arg)
- (symbol? scheme? ly:music?)
+tweak =
+#(define-music-function (parser location sym val arg)
+ (symbol? scheme? ly:music?)
+ (_i "Add @code{sym . val} to the @code{tweaks} property of @var{arg}.")
- (_i "Add @code{sym . val} to the @code{tweaks} property of @var{arg}.")
-
- (set!
- (ly:music-property arg 'tweaks)
- (acons sym val
- (ly:music-property arg 'tweaks)))
- arg)
+ (if (equal? (object-property sym 'backend-type?) #f)
+ (begin
+ (ly:warning (_ "cannot find property type-check for ~a") sym)
+ (ly:warning (_ "doing assignment anyway"))))
+ (set!
+ (ly:music-property arg 'tweaks)
+ (acons sym val
+ (ly:music-property arg 'tweaks)))
+ arg)
slurDown = \override Slur #'direction = #DOWN
slurNeutral = \revert Slur #'direction
+#(define (make-simple-dash-definition dash-fraction dash-period)
+ (list (list 0 1 dash-fraction dash-period)))
+
slurDashed = {
\override Slur #'dash-definition = #'((0 1 0.4 0.75))
}
+slurDashPattern =
+#(define-music-function (parser location dash-fraction dash-period)
+ (number? number?)
+ #{
+ \override Slur #'dash-definition =
+ $(make-simple-dash-definition dash-fraction dash-period)
+ #})
slurDotted = {
\override Slur #'dash-definition = #'((0 1 0.1 0.75))
}
phrasingSlurDashed = {
\override PhrasingSlur #'dash-definition = #'((0 1 0.4 0.75))
}
+phrasingSlurDashPattern =
+#(define-music-function (parser location dash-fraction dash-period)
+ (number? number?)
+ #{
+ \override PhrasingSlur #'dash-definition =
+ $(make-simple-dash-definition dash-fraction dash-period)
+ #})
phrasingSlurDotted = {
\override PhrasingSlur #'dash-definition = #'((0 1 0.1 0.75))
}
tieNeutral = \revert Tie #'direction
tieDashed = {
- \override Tie #'dash-period = #0.75
- \override Tie #'dash-fraction = #0.4
-}
+ \override Tie #'dash-definition = #'((0 1 0.4 0.75))
+}
+tieDashPattern =
+#(define-music-function (parser location dash-fraction dash-period)
+ (number? number?)
+ #{
+ \override Tie #'dash-definition =
+ $(make-simple-dash-definition dash-fraction dash-period)
+ #})
tieDotted = {
- \override Tie #'dash-period = #0.75
- \override Tie #'dash-fraction = #0.1
+ \override Tie #'dash-definition = #'((0 1 0.1 0.75))
+}
+tieHalfDashed = {
+ \override Tie #'dash-definition = #'((0 0.5 0.4 0.75)
+ (0.5 1 1 1))
+}
+tieHalfSolid = {
+ \override Tie #'dash-definition = #'((0 0.5 1 1)
+ (0.5 1 0.4 0.75))
}
tieSolid = {
- \revert Tie #'dash-period
- \revert Tie #'dash-fraction
+ \revert Tie #'dash-definition
}
easyHeadsOn = {
arpeggioNormal = {
\revert Arpeggio #'stencil
\revert Arpeggio #'X-extent
- \revert Arpeggio #'arpeggio-direction
+ \revert Arpeggio #'arpeggio-direction
+ \revert Arpeggio #'dash-definition
}
arpeggioBracket = {
\revert Arpeggio #'X-extent
arpeggioParenthesis = {
\override Arpeggio #'stencil = #ly:arpeggio::brew-chord-slur
\override Arpeggio #'X-extent = #ly:grob::stencil-width
+ \revert Arpeggio #'dash-definition
}
+arpeggioParenthesisDashed = {
+ \override Arpeggio #'stencil = #ly:arpeggio::brew-chord-slur
+ \override Arpeggio #'X-extent = #ly:grob::stencil-width
+ \override Arpeggio #'dash-definition = #'((0 1 0.4 0.75))
+}
+
+
glissando = #(make-music 'GlissandoEvent)
default:
+ifeq ($(out),www)
local-WWW-2: $(OUT_HTML_FILES)
$(buildscript-dir)/mass-link --prepend-suffix .$(ISOLANG) hard $(outdir) $(top-build-dir)/Documentation/$(outdir) $(HTML_FILES)
+endif
+default:
+
+ifeq ($(out),www)
local-WWW-1: $(MASTER_TEXI_FILES) $(PDF_FILES)
local-WWW-2: $(HTML_FILES)
find $(outdir) -name '*.html' | sed 's!$(outdir)/!!g' | xargs $(buildscript-dir)/mass-link --prepend-suffix .$(ISOLANG) hard $(outdir) $(top-build-dir)/Documentation/topdocs/$(outdir) NEWS.pdf
find $(outdir) \( -name 'lily-*.png' -o -name 'lily-*.ly' \) | sed 's!$(outdir)/!!g' | xargs $(buildscript-dir)/mass-link hard $(outdir) $(top-build-dir)/Documentation/topdocs/$(outdir)
+endif
default:
+ifeq ($(out),www)
local-WWW-1: $(MASTER_TEXI_FILES) $(PDF_FILES) $(XREF_MAPS_FILES)
local-WWW-2: $(DEEP_HTML_FILES) $(BIG_PAGE_HTML_FILES) $(DOCUMENTATION_LOCALE_TARGET)
$(DOCUMENTATION_LOCALE_TARGET):
$(MAKE) -C $(depth)/Documentation/po out=www messages
touch $@
+endif
+ifeq ($(out),www)
local-WWW-1: $(outdir)/collated-files.texi $(outdir)/collated-files.pdf
local-WWW-2: $(outdir)/collated-files.html
+endif
local-test-baseline:
rm -rf $(outdir)-baseline
all: $(OUT_FILES)
+ifeq ($(out),www)
local-WWW-1: $(ly_examples) $(pdf_examples) $(png_examples)
+endif
tar:
mkdir -p $(outdir)/$(tarball)
stderr_write (NOT_SMART % _("\\bar \".\" now produces a thick barline.\n"))
stderr_write (UPDATE_MANUALLY)
str = re.sub (r'ly:hairpin::after-line-breaking', r'ly:spanner::kill-zero-spanned-time', str)
- if re.search(r'\'dash-fraction', str) or re.search(r'\'dash-period', str):
+ if re.search("(Slur|Tie)\w+#\'dash-fraction", str) \
+ or re.search("(Slur|Tie)\w+#\'dash-period", str):
stderr_write ("\n")
stderr_write (NOT_SMART % _("Dash parameters for slurs and ties are now in \'dash-details.\n"))
stderr_write (UPDATE_MANUALLY)
('F', 4): "bass",
('F', 5): "subbass",
("percussion", 2): "percussion",
+ # Workaround: MuseScore uses PERC instead of percussion
+ ("PERC", 2): "percussion",
("TAB", 5): "tab"}.get ((self.type, self.position), None)
def ly_expression (self):
return '\\clef "%s%s"' % (self.clef_name (), self.octave_modifier ())
command
(format #f "~a > ~a 2>&1 " command dev-null))))
(if (ly:get-option 'verbose)
- (ly:message (_ "Invoking `~a'...") command))
+ (begin
+ (ly:message (_ "Invoking `~a'...") command))
+ (ly:progress "\n"))
(set! status
(if (pair? rest)
".pdf"))
(is-eps (string-match "\\.eps$" name))
(paper-size-string (if is-eps
- " -dEPSCrop "
- (ly:format "-dDEVICEWIDTHPOINTS=~$ \
--dDEVICEHEIGHTPOINTS=~$ "
- paper-width paper-height )))
+ "-dEPSCrop"
+ (ly:format "-dDEVICEWIDTHPOINTS=~$\
+ -dDEVICEHEIGHTPOINTS=~$"
+ paper-width paper-height)))
(cmd (simple-format #f
"~a\
~a\
~a\
~a\
- -dCompatibilityLevel=1.4 \
+ -dCompatibilityLevel=1.4\
-dNOPAUSE\
-dBATCH\
- -r1200 \
+ -r1200\
-sDEVICE=pdfwrite\
-sOutputFile=~S\
-c .setpdfwrite\
(if (ly:get-option 'verbose) "" "-q")
(if (or (ly:get-option 'gs-load-fonts)
(ly:get-option 'gs-load-lily-fonts))
-
- " -dNOSAFER "
- " -dSAFER ")
+ "-dNOSAFER"
+ "-dSAFER")
paper-size-string
pdf-name
name)))
(ly:error (_ "cannot find: ~A") x))
(primitive-load file-name)
(if (ly:get-option 'verbose)
- (ly:progress "]"))))
+ (ly:progress "]\n"))))
(define-public DOS
(let ((platform (string-tokenize
(if separate-logs
(ly:stderr-redirect (format "~a.log" base) "w"))
(if ping-log
- (format ping-log "Procesing ~a\n" base))
+ (format ping-log "Processing ~a\n" base))
(if (ly:get-option 'trace-memory-frequency)
(mtrace:start-trace (ly:get-option 'trace-memory-frequency)))
(lilypond-file handler x)
;; FIXME: soft-code, localize
(welcome-ly (string-append ly "Welcome_to_LilyPond.ly"))
(cmd (get-editor-command welcome-ly 0 0 0)))
- (ly:message (_ "Invoking `~a'...") cmd)
+ (ly:message (_ "Invoking `~a'...\n") cmd)
(system cmd)
(exit 1)))
(string-append
make-name ": "
(_ "Invalid argument in position ~A. Expect: ~A, found: ~S."))
- error-msg)
+ (car error-msg) (cadr error-msg)(caddr error-msg))
(cons markup-function args))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;
(Voice Stem no-stem-extend #t)
(Voice Beam thickness 0.384)
(Voice Beam length-fraction 0.8)
- (Voice Accidental font-size -4)))
+ (Voice Accidental font-size -4)
+ (Voice AccidentalCautionary font-size -4)
+ (Voice Script font-size -3)
+ (Voice Fingering font-size -8)
+ (Voice StringNumber font-size -8)))
(make-grob-property-set 'NoteColumn 'horizontal-shift (quotient n 2))
(make-grob-property-set 'MultiMeasureRest 'staff-position (if (odd? n) -4 4))))))
begin_header_re = re.compile (r'\\header\s*{', re.M)
+ly_new_version_re = re.compile (r'\\version\s*"(.+?)"')
+
# add tags to ly files from LSR
def add_tags (ly_code, tags):
return begin_header_re.sub ('\\g<0>\n lsrtags = "' + tags + '"\n', ly_code, 1)
+# for snippets from input/new, add message for earliest working version
+def add_version (ly_code):
+ return '''%% Note: this file works from version ''' + ly_new_version_re.search (ly_code).group (1) + '\n'
+
def copy_ly (srcdir, name, tags):
global unsafe
global unconverted
if in_dir and in_dir in srcdir:
s = LY_HEADER_LSR + add_tags (s, tags)
else:
- s = LY_HEADER_NEW + s
+ s = LY_HEADER_NEW + add_version (s) + s
s = mark_verbatim_section (s)
s = lsr_comment_re.sub ('', s)
unconverted.append (dest)
if os.path.exists (dest + '~'):
os.remove (dest + '~')
- # -V seems to make unsafe snippets fail nicer/sooner
- e = os.system ("lilypond -V -dno-print-pages -dsafe -o /tmp/lsrtest '%s'" % dest)
- if e:
- unsafe.append (dest)
+ # no need to check snippets from input/new
+ if in_dir and in_dir in srcdir:
+ # -V seems to make unsafe snippets fail nicer/sooner
+ e = os.system ("lilypond -V -dno-print-pages -dsafe -o /tmp/lsrtest '%s'" % dest)
+ if e:
+ unsafe.append (dest)
def read_source_with_dirs (src):
s = {}
if notags_files:
sys.stderr.write ('No tags could be found in these files:\n')
sys.stderr.write ('\n'.join (notags_files) + '\n\n')
-
-dump_file_list ('lsr-unsafe.txt', unsafe)
-sys.stderr.write ('''
+if unsafe:
+ dump_file_list ('lsr-unsafe.txt', unsafe)
+ sys.stderr.write ('''
Unsafe files printed in lsr-unsafe.txt: CHECK MANUALLY!
git add input/lsr/*.ly
xargs git diff HEAD < lsr-unsafe.txt
''')
-
--- /dev/null
+#! /usr/bin/env python
+
+# Convert from bison output file parser.output to
+# Grammar and index.
+# Drops all of the state information.
+# Converts \\ to \
+# Eliminates the @ variables created when {} is placed in the middle of a rule## all of the c-code stuff
+#
+#
+# Copyright 2005 by Carl D. Sorensen
+#
+
+# to create input file, run
+# bison -v parser.yy
+# this will create a file parser.output
+# then run
+# yyout2grammar.py parser.output your_output_file
+#
+
+import sys
+import re
+
+atre = re.compile('(@\d+):')
+
+write_me = True
+
+if len(sys.argv)!=3:
+ print "Usage: yyout2grammar.py parser_output_file grammar_file."
+else:
+ in_name = sys.argv[1]
+ out_name = sys.argv[2]
+
+ print "input file name",in_name
+ print "output file name",out_name
+ in_file = open(in_name,'r')
+ out_file= open(out_name, 'w')
+
+ at_items=[]
+ inline = in_file.readline()
+ while inline != '' and not(inline.startswith("Grammar")):
+ inline = in_file.readline()
+ if inline != '':
+ out_file.write(inline)
+ inline = in_file.readline()
+ while inline != '' and not(inline.startswith("Terminals")):
+ i = inline.find("$accept:")
+ if i>-1:
+ write_me = False
+ inline = in_file.readline()
+ atfound = re.findall(atre,inline)
+ if len(atfound) > 0:
+ at_items.extend(atfound)
+ print at_items
+ write_me = False
+ inline=in_file.readline()
+ else:
+ for at_item in at_items:
+ i=inline.find(at_item)
+ if i >= 0:
+ inline=inline[:i] + inline[i+len(at_item):]
+ i=inline.find('"\\\\')
+ while i > -1 :
+ inline = inline[:i+1]+inline[i+2:]
+ i = inline.find('"\\\\')
+ if write_me:
+ out_file.write(inline)
+ inline = in_file.readline()
+ write_me = True
+ index_items = []
+ # Write the Terminals header line and the following blank line
+ out_file.write(inline)
+ inline = in_file.readline()
+ out_file.write(inline)
+ inline = in_file.readline()
+ while inline != '' and not(inline.startswith("Nonterminals")):
+ i=inline.find('"\\\\')
+ while i > -1 :
+ inline = inline[:i+1]+inline[i+2:]
+ i = inline.find('"\\\\')
+ index_items.append(inline)
+ inline = in_file.readline()
+ index_items.sort(lambda x,y:cmp(x.lower(),y.lower()))
+ for index_item in index_items:
+ out_file.write(index_item)
+ out_file.write('\n')
+ # Write the Nonterminals header and the blank line
+ out_file.write(inline)
+ inline = in_file.readline()
+ out_file.write(inline)
+ index_items = []
+ index_item=in_file.readline()
+ inline=in_file.readline()
+ while inline != '' and not(inline.startswith("state")):
+ while inline.startswith(" "):
+ index_item = index_item + inline
+ inline = in_file.readline()
+ if not(index_item.startswith("@")) and \
+ not(index_item.startswith("$accept")):
+ index_items.append(index_item)
+ index_item = inline
+ inline=in_file.readline()
+ index_items.sort(lambda x,y:cmp(x.lower(),y.lower()))
+ for index_item in index_items:
+ out_file.write(index_item)
-.PHONY : all clean bin-clean config default dist doc exe help html lib TAGS\
- po web web-1 WWW-1 WWW-2 WWW-post local-WWW-1 local-WWW-2
+.PHONY : all clean bin-clean config default dist exe help html lib TAGS\
+ po doc doc-stage-1 WWW-1 WWW-2 WWW-post local-WWW-1 local-WWW-2
all: default
$(LOOP)
help: generic-help local-help
@echo -e "Generic targets:\n\
- all * update everything except website documentation\n\
+ all * update everything except documentation with images\n\
clean * remove all generated stuff in $(outdir)\n\
bin-clean * same as clean, except that mf/out is preserved\n\
default same as the empty target\n\
+ doc * update documentation with images in directory \`out-www'\n\
+ doc-stage-1 * update only PDF and Info documentation in directory \`out-www'\n\
+ doc-clean * clean \`out-www' directory\n\
exe update all executables\n\
help this help\n\
install * install programs and data (prefix=$(prefix))\n\
- uninstall* uninstall programs and data\n\
lib update all libraries\n\
- web * update website in directory \`out-www'\n\
- web-clean * clean \`out-www' directory\n\
+ uninstall* uninstall programs and data\n\
TAGS generate tagfiles\n\
\n\
\`make' may be invoked from any subdirectory.\n\
# plus WWW-post (only at toplevel)
# see INSTALL for more information.
+ifeq ($(out),www)
local-WWW-1:
local-WWW-2:
WWW-post:
WWW-2: local-WWW-2
$(LOOP)
+endif
-web: web-1
+doc: doc-stage-1
$(MAKE) out=www WWW-2
$(MAKE) out=www WWW-post
-web-1:
+doc-stage-1:
$(MAKE) -C $(depth)/scripts/build out=
$(MAKE) out=www WWW-1
-web-clean:
+doc-clean:
$(MAKE) out=www clean
ifeq ($(strip $(depth)),.)
po: new-po
$(LOOP)
-localpo:
+local-po:
@true
else
-po: localpo
+po: local-po
$(LOOP)
ALL_PO_SOURCES = $(ALL_C_SOURCES) $(ALL_CC_SOURCES) $(PYTHON_SCRIPTS_IN) $(PY_MODULES_IN) $(SCM_FILES) $(wildcard $(outdir)/*.hh) $(wildcard $(outdir)/*.cc)
-localpo:
+local-po:
ifneq ($(strip $(ALL_PO_SOURCES)),)
@echo $(ALL_PO_SOURCES)
xgettext --default-domain=$(package) --join \
default: $(INFO_FILES)
+ifeq ($(out),www)
local-WWW-1: $(XREF_MAPS_FILES)
+endif
local-doc: $(OUTTXT_FILES)
default: local-doc
+ifeq ($(out),www)
local-WWW-1: $(PDF_FILES)
local-WWW-2: $(HTML_FILES)
+endif
-make-txt-files: $(TO_TOP_FILES)
+txt-files: $(TO_TOP_FILES)
-.PHONY: web-install
-web-install:
-web-uninstall:
+.PHONY: install-doc uninstall-doc
+install-doc:
+uninstall-doc:
local-dist: configure
$(MAKE) -C Documentation/pictures icon
-do-top-doc:
- -$(MAKE) -C Documentation/topdocs/ README_TOP_FILES="$(TOPDOC_FILES)" make-txt-files
+top-doc:
+ $(MAKE) -C Documentation/topdocs/ README_TOP_FILES="$(TOPDOC_FILES)" txt-files
-$(README_TXT_FILES): do-top-doc
+$(README_TXT_FILES): top-doc
local-clean:
$(MAKE) final-install
endif
-local-dist: do-top-doc
+local-dist: top-doc
dist:
rm -rf $(distdir)
config rerun configure\n\
dist roll tarball: $(depth)/$(outdir)/$(distname).tar.gz\n\
distclean also remove configure output\n\
- doc update all documentation (without images)\n\
- info build Info documentation with images\n\
- info-install install Info documentation with images\n\
cvs-clean also remove out directories and generated files\n\
maintainerclean also remove distributed generated files\n\
po make new translation Portable Object database\n\
po-replace do po-update and replace catalogs with msgmerged versions\n\
po-update update translation Portable Object database\n\
- web-install * install website documentation in (webdir=$(webdir))\n\
+\n\
+ install-doc install website documentation in (webdir=$(webdir))\n\
and Info documentation with images\n\
- web-uninstall * remove installed documentation with images\n\
+ uninstall-doc remove installed documentation with images\n\
+ info build Info documentation with images\n\
+ install-info install Info documentation with images\n\
\n\
Some more targets are available for testing changes:\n\
test-baseline check test-redo test-clean\n\