@c Jan's site?
@itemize @bullet
-@item @uref{../out-www/regression-test.html,regression-test}
-A large document that tests all kinds of features (in
+@item @uref{../out-www/regression-test.html,Regression Test}
+A large document that tests all kinds of features (also as
@uref{../out-www/regression-test.ps.gz,Postscript}).
+@item @uref{../../input/bugs/out-www/bugs.html,Bugs}
+A document that shows bugs (also as
+@uref{../../input/bugs/out-www/bugs.ps.gz,Postscript}).
@item
@uref{http://www2.iro.umontreal.ca/~pinard/po/registry.cgi?domain=lilypond">Translations,lilypond
textual domain
--- /dev/null
+#!@PYTHON@
+
+import sys
+import os
+import string
+import getopt
+
+program_name = 'lys-to-tely'
+
+def help ():
+ sys.stdout.write (r"""Usage: lys-to-tely [OPTION]... LY-FILE...
+Construct tely doc from LY-FILEs.
+
+Options:
+ -h, --help print this help
+ -o,output=NAME write tely doc to NAME
+ -t,title=TITLE set tely tely doc title TITLE
+""")
+ sys.exit (0)
+
+(options, files) = getopt.getopt(sys.argv[1:], 'hn:t:', [
+ 'help', 'name=', 'title='])
+
+name="ly-doc"
+title="Ly Doc"
+for opt in options:
+ o = opt[0]
+ a = opt[1]
+ if o == '-h' or o == '--help':
+ help ()
+ elif o == '-n' or o == '--name':
+ name = a
+ elif o == '-t' or o == '--title':
+ title = a
+ else:
+ raise 'unknown opt ', o
+
+def strip_extension (f, ext):
+ (p, e) = os.path.splitext (f)
+ if e == ext:
+ e = ''
+ return p + e
+
+if files:
+ dir = os.path.dirname (name)
+ if not dir:
+ dir = "."
+ name = strip_extension (os.path.basename (name), ".tely")
+
+ s = '''\input texinfo
+@setfilename %s.info
+@settitle %s
+
+@c fool ls-latex
+@ignore
+@author Han-Wen Nienhuys and Jan Nieuwenhuizen
+@title %s
+@end ignore
+
+@node Top, , , (dir)
+''' % (name, title, title)
+
+ def name2line (n):
+ # UGR
+ if string.find (n, '+') >= 0:
+ s = "@lilypondfile{%s}" % n
+ else:
+ s = "@lilypondfile[printfilename]{%s}" % n
+ return s
+
+ s = s + string.join (map (lambda x: name2line (x), files), "\n")
+ s = s + '\n@bye\n'
+ f = "%s/%s.tely" % (dir, name)
+ sys.stderr.write ("%s: writing %s..." % (program_name, f))
+ h = open (f, "w")
+ h.write (s)
+ h.close ()
+ sys.stderr.write ('\n')
+
-# input/bugs/Makefile
-
depth = ../..
-LOCALSTEPMAKE_TEMPLATES=ly mutopia
-include $(depth)/make/stepmake.make
+STEPMAKE_TEMPLATES=documentation texinfo tex
+LOCALSTEPMAKE_TEMPLATES=lilypond ly lysdoc
+EXTRA_DIST_FILES=README
+include $(depth)/make/stepmake.make
+TITLE=Assorted Possible Bugs
--- /dev/null
+This directory holds a collection of examples that show all simple
+notation bugs known to exist in LilyPond.
+
+Bugs that make lilypond crash, or don't generate notation should go in
+
+ input/no-notation
+
-# input/bugs/Makefile
-
depth = ../..
+EXTRA_DIST_FILES=README
LOCALSTEPMAKE_TEMPLATES=ly mutopia
+
include $(depth)/make/stepmake.make
--- /dev/null
+These examples make lilypond crash or exit prematurely.
+
+Some are bugs that should be fixed to generate output, andd then
+moved to ../bugs or ../regression.
+
+Some (notably parse*.ly) are just error/warning generation tests
+and should remain here.
\ No newline at end of file
--- /dev/null
+\version "1.3.148"
+\header{
+filename = "denneboom.ly"
+enteredby = "jcn"
+copyright = "public domain"
+}
+%{ file tests silly line shapes %}
+
+\include "paper20.ly"
+
+
+
+oden = \lyrics{
+ O |
+ den- ne- boom, o |
+ den- ne- boom Wat |
+ zijn uw tak- ken |
+ won- der- schoon
+}
+
+ikheb = \lyrics{
+ Ik |
+ heb u laatst in_'t |
+ bos zien staan toen |
+ zat- en er geen |
+ kaars- jes aan
+}
+
+ugloeit = \lyrics{
+ U |
+ gloeit in bar- re |
+ win- ter- tijd, als |
+ sneeuw op aar- de |
+ licht ge- spreid
+}
+
+oboom = \notes\transpose c''{
+ g,8 |
+ c8. c16 c4. d8 |
+ e8. e16 e4. e8 |
+ d e f4 b, |
+ d8. c16 c4 r8
+}
+
+bos = \notes\transpose c''{
+ g8 |
+ g e a4. g8 |
+ g8. f16 f4 r8 f8 |
+ f d g4. f8 |
+ f8. e16 e4 r8
+}
+
+
+melody = \notes{
+ \oboom
+ \oboom
+ \bos
+ \oboom
+}
+
+
+verseOne = \notes{
+ \oden
+ \oden
+ \ikheb
+ \oden
+}
+
+verseOneStaff = \context Lyrics = one
+ \verseOne
+
+
+verseTwo = \notes{
+ \oden
+ \oden
+ \ugloeit
+ \oden
+}
+
+verseTwoStaff = \context Lyrics = two
+ \verseTwo
+
+
+denneboomShape = \paper{
+ \paperTwenty
+ indent = 20. \mm
+
+ % UGH -- THIS IS HAIRY
+ #'margin-shape = #(map
+ (lambda (x) (cons-map mm-to-pt x))
+ '((70.0 . 20.)
+ (65.0 . 30.0)
+ (57.5 . 45.0)
+ (50.0 . 60.0)
+ (42.5 . 75.)
+ (35.0 . 90.)
+ (27.5 . 105.)
+ (20.0 . 120.0)
+ (10.0 . 140.0)
+ (65.0 . 30.0))
+ )
+
+ gourlay_maxmeasures = 30.
+ arithmetic_basicspace = 3.8
+ arithmetic_multiplier = 8.\pt
+}
+
+\score{
+ \addlyrics
+ \context Staff { \time 3/4 \melody }
+ \context Lyrics \verseOne
+ \paper{
+ \denneboomShape
+ }
+ \midi{ \tempo 4 = 90 }
+}
--- /dev/null
+\version "1.3.148"
+
+\header {
+texidoc = "a staff should really die, if no one's referencing it."
+}
+\score {
+ {
+ \context Staff = q {
+ \notes { a' b' c' d' }
+ }
+
+ \break
+
+ \context PianoStaff <
+ \context Staff = i {
+ \notes { a' b' c' d' }
+ }
+ \context Staff = ii {
+ \notes { \clef "bass" a b c d }
+ }
+ >
+ }
+}
--- /dev/null
+\version "1.3.148"
+
+% move to regtest once it works?
+
+
+% still not workign ? --hwn.
+
+\header {
+texidoc = "
+On their own staff, staffcombined voices should be stemboth (not up/down)
+while voicecombined threads should get their direction set (up/down)
+
+"
+}
+
+
+End = { \skip 1*8 }
+
+violaI = \notes\relative c'' {
+ c c e4. e8
+}
+violaII = \notes\relative c'' {
+ c4 b a a
+}
+
+
+violoncello = \notes\relative c' {
+ c8 c c c c8 c c c\break
+ a1
+}
+
+contrabasso = \notes\relative c {
+ a4 a8 a a8 a a a\break
+ a1
+}
+
+violeStaff = \notes \context Staff = viole <
+ \context Voice=oneViole <
+ \property Staff.instrument = #"Viola"
+ \property Staff.instr = #"Vla."
+
+ \End
+ >
+ \context Voice=twoViole <
+ \property Staff.instrument = #"Viola II"
+ \property Staff.instr = #"Vla. II"
+ \End
+ >
+ \context Voice=oneViole \partcombine Voice
+ \context Thread=oneViole \violaI
+ \context Thread=twoViole \violaII
+>
+
+staffCombinePianoStaffProperties = {
+ \property PianoStaff.devNullThread = #'()
+ \property PianoStaff.soloADue = ##t
+ \property PianoStaff.soloText = #""
+ \property PianoStaff.soloIIText = #""
+ % This is non-conventional, but currently it is
+ % the only way to tell the difference.
+ \property PianoStaff.aDueText = #"\\`a2"
+ \property PianoStaff.splitInterval = #'(1 . 0)
+ \property PianoStaff.changeMoment = #`(,(make-moment 1 1) . ,(make-moment 1 1))
+ \property PianoStaff.noDirection = ##t
+}
+
+
+\score {
+ <
+ \context StaffGroup <
+ \violeStaff
+
+ \context PianoStaff = bassi_group \notes <
+ \staffCombinePianoStaffProperties
+ \context Staff=oneBassi < \clef bass
+ \property Staff.instrument = #'(lines
+ "Violoncello" " e" "Contrabasso")
+
+ \property Staff.instr = #"Vc."
+ \End >
+ \context Staff=twoBassi < \clef bass
+ \property Staff.instrument = #"Contrabasso"
+ \property Staff.instr = #"Cb."
+
+ \End >
+
+ \context Staff=oneBassi \partcombine Staff
+ \context Voice=oneBassi { \violoncello }
+ \context Voice=twoBassi { \contrabasso }
+ >
+>
+ >
+ \paper {
+ % \paperSixteen
+ linewidth = 80 * \staffspace
+ textheight = 200 * \staffspace
+ \translator{
+ \ThreadContext
+ \consists "Rest_engraver"
+
+ % Set value for engraver at thread level,
+ % to override the default that is set in ScoreContext
+ % for added engraver at Voice level
+ devNullThread = #'()
+ }
+ \translator{
+ \VoiceContext
+ \remove "Rest_engraver"
+
+ % The staff combine (bassi part) needs a
+ % thread_devnull_engraver here.
+ % Instead of maintaining two separate hierarchies,
+ % we switch add it, but switch it off immideately.
+ % The staff combine parts switch it on.
+ % devNullThread = #'never
+ \consists "Thread_devnull_engraver"
+ }
+ \translator{
+ \HaraKiriStaffContext
+ \consists "Mark_engraver"
+ }
+ \translator {
+ \OrchestralScoreContext
+ skipBars = ##t
+ soloText = #"I."
+ soloIIText = #"II."
+ % By default, turn off the Thread_devnull_engraver
+ % at Voice level
+ devNullThread = #'never
+
+ % Hmm
+ currentBarNumber = #218
+ BarNumber \override #'padding = #3
+ RestCollision \override #'maximum-rest-count = #1
+ marginScriptHorizontalAlignment = #1
+ TimeSignature \override #'style = #'C
+ }
+ }
+}
+
--- /dev/null
+\version "1.3.148"
+\header{
+texidoc="crashes lily"
+}
+
+\score { \notes {
+ \context Voice {
+ \property Voice.crescendoText = "cresc."
+ \property Voice.crescendoSpanner = #'dashed-line
+ c2. r8 c8 \< \break \! c1
+ }
+}
+\paper { linewidth = 5.\cm}
+}
+
--- /dev/null
+\header {
+texidoc="Automatic beamer behaves nicely."
+}
+\version "1.3.148"
+
+
+% Generated by mudela-book.py options are
+\include "paper16.ly"
+\paper { linewidth = 390.000000 \pt }
+
+\score {
+ \notes \relative c'' {
+ a\longa a\breve
+ a1 a2 a4 a8 a16 a32 a64 a64
+ }
+ \paper {
+ \translator {
+ \StaffContext
+ \remove "Clef_engraver"
+ \remove "Staff_symbol_engraver"
+ }
+ }
+}
--- /dev/null
+\version "1.3.148"
+
+\header {
+texidoc = "Tuplet-spanner should not put (visible) brackets on
+beams even if they're auto generated."
+}
+
+\score { \notes \relative c' {
+ \property Voice.tupletSpannerDuration = #(make-moment 1 4)
+ \property Voice.TupletBracket \override #'tuplet-bracket-visibility = #'if-no-beam
+ \times 2/3 {
+ [f8 f f ][f8 f f ] f f f f f f
+ }
+}}
--- /dev/null
+\version "1.3.148"
+
+\header{
+texidoc = "Hairy case for beam, chord, and automatic knees."
+
+%texidoc = "Beam thinks that first two notes should be stem down. Can
+%be fixed by uncommenting \stemUp"
+}
+
+\score{
+ \notes\relative c'{
+ %\stemUp
+ \clef alto
+ \time 3/4
+ r8 <d ( bes > ) bes' d <e-> g, c, c,> r |
+ }
+}
--- /dev/null
+\version "1.3.148"
+\header{
+ % ?
+% niet zo onschuldig! je hebt graces gefixt in 1.5, zie maar eens 1.3.150
+texidoc="Dynamics on grace notes are small and behave nicely (don't crash into to main note)."
+}
+
+ \score { \notes \context Voice {\grace {c'_\f} d e f g}}
--- /dev/null
+\version "1.3.148"
+\header{
+texidoc = "Stripped version of trip.ly. Staffs should be of correct length."
+}
+\score{
+ \context PianoStaff \notes <
+ \context Staff = treble {
+ r1
+ r1
+ \bar "|."
+ }
+ \context Staff = bass {
+ r1
+ \context Staff {
+ \grace { c16 } c1
+ }
+ }
+ >
+ \paper { }
+}
--- /dev/null
+\version "1.3.148"
+\header{
+texidoc = "startGraceMusic should no-stem-extend to true;
+the two grace beams should be the same here.
+"
+}
+
+
+\score {
+ \context Voice \notes\relative c {
+ \grace {
+ [f8 e8]
+ \property Voice.Stem \override #'no-stem-extend = ##t
+ [f8 e8]
+ \property Voice.Stem \revert #'no-stem-extend
+ }
+ a4
+
+ }
+ \paper {
+ linewidth=-1.0
+ }
+ \midi { }
+}
--- /dev/null
+\version "1.3.148"
+\header {
+texidoc="The first and last notes of a measure should be spaced nicely."
+}
+% jij had zoon mooi tight spacing example,
+% kan zo'n harde space ook niet voor en na maatstreep!
+\score {
+ \notes \relative c'' {
+ \time 2/4
+ \property Voice.noAutoBeaming=##t
+ a4 a8
+ a32 a a a
+}
+%%set bit wide
+\paper {linewidth = 100.\mm}
+}
--- /dev/null
+\version "1.3.148"
+\header {texidoc="Stacking of markup scripts."}
+\paper { linewidth=-1. }
+\score { \notes { c^#`(columns "" (lines "1" (bold "2") "3"))}}
+
--- /dev/null
+\version "1.3.148"
+\header {
+texidoc="Multi measure rests of second voice should not disappear."
+}
+
+
+#(set! point-and-click line-column-location)
+one = \notes\relative c'' {
+
+ f4 \!e-.\f r2|
+ R1|
+ f2\p()es|
+ \property Voice.crescendoText = #'(lines " " "cresc." " ")
+ \property Voice.crescendoSpanner = #'dashed-line
+ d1\<|
+ d1|
+ d2 d2|
+ d2 d2|
+ \!f1\ff |
+ f1
+}
+
+two = \notes \relative c'' {
+ r4 c r2|
+ R1*6|
+ c1 ~|
+ c1
+}
+
+\score {
+ \notes <
+ \context Staff = Viole <
+ \context Voice=one \partcombine Voice
+ \context Thread=one \one
+ \context Thread=two \two
+ > ~
+ >
+ \paper {
+ \translator {
+ \ThreadContext
+ \consists "Rest_engraver"
+ }
+ \translator {
+ \VoiceContext
+ \remove "Rest_engraver"
+ \consists Multi_measure_rest_engraver
+ \consists Bar_engraver
+ }
+ \translator {
+ \HaraKiriStaffContext
+ \remove Multi_measure_rest_engraver
+ \remove Bar_engraver
+ }
+ \translator {
+ \OrchestralScoreContext
+ RestCollision \override #'maximum-rest-count = #1
+ }
+ }
+}
\ No newline at end of file
--- /dev/null
+\version "1.3.148"
+\header{
+texidoc="The partcombiner should not combine two small slurs into a big one."
+}
+
+\score{
+ \context Staff <
+ \context Voice=one\skip 1
+ \context Voice=two\skip 1
+ \context Voice=one \partcombine Voice
+ \context Thread=one \notes\relative c'' {
+ c4( c b )a
+ a( b c )d
+ }
+ \context Thread=two \notes\relative c'' {
+ a4( c b )a
+ a( b c )a
+
+ }
+ >
+ \paper{
+ linewidth=140.\mm
+ }
+}
+
+
--- /dev/null
+\version "1.3.148"
+\header{
+texidoc="Slurs should not get confused by augmentation dots. We use a lot
+of dots here, to make problems more visible."
+}
+\score {
+ \notes\relative c'' {
+ c4.............()c
+ }
+ \paper {
+ linewidth = -1.
+ }
+}
--- /dev/null
+\version "1.3.148"
+\header {
+ When tightly spaced, hinterfleisch -> 0.
+ Stems may touch the bar lines, opposite stems may touch eachother.
+ We need a mininum of about a note-width/interline space in these
+ situations, so that in tightly spaced music all vertical lines
+ are about equally spaced.
+}
+\score {
+ \notes \relative c''{
+ r1 e4 f, e' f,
+ }
+ \paper {
+ linewidth = 25.0 \mm
+ indent = 0.0\mm
+ }
+}
--- /dev/null
+\version "1.3.148"
+
+% text spanners should not repeat start text when broken
+
+\score {
+ \notes \relative c'' {
+ \property Voice.crescendoText = #"cresc."
+ \property Voice.crescendoSpanner = #'dashed-line
+ c1\< c \break
+ c1 \!c \break
+ }
+ \paper {
+ linewidth = 40*\staffspace
+ }
+}
--- /dev/null
+\version "1.3.148"
+
+\header {
+texidoc = "First and second bes (tied across line break)
+should get an accidental, but others should not.
+Only first B should get natural sign."
+}
+
+\score {
+ \notes {
+ bes1 ~ | \break
+ bes2 ~ bes4 ~ bes4 ~ | bes1
+ \key f\major
+ bes1 ~|bes2 b ~|b ~ b ~|b1
+ }
+ \paper {
+ linewidth = 40*\staffspace
+ }
+}
--- /dev/null
+\version "1.3.148"
+\header {
+ texidoc="Beam-stem attachment test. Helper file for ps/dvips problems."
+}
+
+\score {
+ \context RhythmicStaff \notes {
+ \stemUp [c8 c]
+ \stemDown [c8 c]
+ \stemUp [c8. c16]
+ }
+ \paper {
+ linewidth = -1.0
+ magnification = 64
+ }
+}
\ No newline at end of file
LILYPOND_BOOK = $(script-dir)/lilypond-book.py
LILYPOND_BOOK_INCLUDES = -I $(pwd) -I $(outdir) -I$(input-dir) -I $(input-dir)/tricks/ -I $(input-dir)/regression/ -I $(input-dir)/test/ -I $(input-dir)/tutorial/
LY2DVI = $(script-dir)/ly2dvi.py
+LYS_TO_TELY = $(buildscript-dir)/lys-to-tely.py
PS_TO_GIFS = $(buildscript-dir)/ps-to-gifs.sh
PS_TO_PNGS = $(buildscript-dir)/ps-to-pngs.sh
LILYPOND_BOOK = $(shell $(SHELL) -c 'type -p lilypond-book')
LILYPOND_BOOK_INCLUDES = -I. -I.. -I$(outdir)
LY2DVI = $(shell $(SHELL) -c 'type -p ly2dvi')
+LYS_TO_TELY = $(shell $(SHELL) -c 'type -p lys-to-tely')
PS_TO_GIFS = $(shell $(SHELL) -c 'type -p ps-to-gifs')
PS_TO_PNGS = $(shell $(SHELL) -c 'type -p ps-to-pngs')
$(outdir)/%.latex: %.doc
rm -f $@
-# LILYPONDPREFIX=$(LILYPONDPREFIX)/.. $(PYTHON) $(LILYPOND_BOOK) $(LILYPOND_BOOK_INCLUDES) --dependencies --outdir=$(outdir) $<
$(PYTHON) $(LILYPOND_BOOK) $(LILYPOND_BOOK_INCLUDES) --dependencies --outdir=$(outdir) $<
chmod -w $@
# it is not, for --srcdir builds
$(outdir)/%.texi: %.tely
rm -f $@
-# LILYPONDPREFIX=$(LILYPONDPREFIX)/.. $(PYTHON) $(LILYPOND_BOOK) $(LILYPOND_BOOK_INCLUDES) --dependencies --outdir=$(outdir) --format=texi $<
$(PYTHON) $(LILYPOND_BOOK) $(LILYPOND_BOOK_INCLUDES) --dependencies --outdir=$(outdir) --format=texi $<
chmod -w $@
+$(outdir)/%.texi: $(outdir)/%.tely
+ rm -f $@
+ $(PYTHON) $(LILYPOND_BOOK) $(LILYPOND_BOOK_INCLUDES) --dependencies --outdir=$(outdir) --format=texi $<
+ rm -f $<
+ chmod -w $@
+
# nexi: no-lily texi
# for plain info doco: don't run lily
$(outdir)/%.nexi: %.tely
rm -f $@
-# LILYPONDPREFIX=$(LILYPONDPREFIX)/.. $(PYTHON) $(LILYPOND_BOOK) $(LILYPOND_BOOK_INCLUDES) --dependencies --outdir=$(outdir) --format=texi --no-lily $<
$(PYTHON) $(LILYPOND_BOOK) $(LILYPOND_BOOK_INCLUDES) --dependencies --outdir=$(outdir) --format=texi --no-lily $<
mv $(@D)/$(*F).texi $@
chmod -w $@
--- /dev/null
+
+$(outdir)/$(NAME).tely: $(LY_FILES)
+ $(PYTHON) ../../buildscripts/lys-to-tely.py --name=$(outdir)/$(NAME) --title="$(TITLE)" $(LY_FILES)
\ No newline at end of file
--- /dev/null
+
+local-WWW: $(outdir)/$(NAME).html
\ No newline at end of file
--- /dev/null
+TITLE=LYs Doc
+LY_FILES = $(wildcard *.ly)
+NAME=$(notdir $(pwd))
+