+1.3.136.jcn1
+============
+
+* Bugfix: install gettext.py into @datadir@/python and use that path
+from ly2dvi. Debian or RedHat installs could/should move gettext.py
+into /usr/share/lib/python/1.x/site-packages or so.
+
+* Bugfix: move the making of \makelilypondpiecetitle to actually
+included part of lilyponddefs.tex.
+
+* Bugfix: ly2dvi, tex.scm: set empty tex definitions to \relax. This
+fixes ly2dvi'ing of scsii.
+
+* Bugfix: completed renaming of `cautionary' to `reminder' for broken
+tie accidental feature. (`Cautionary' is reserved for parenthised
+accidentals.). This fixes all tie and accidentals bugs.
+
+* Bugfix: added dynamic-interface to DynamicText grob. This fixes
+loose dynamics.
+
+* Bugfix: enable Voice_devnull_engraver. This fixes loose scripts and
+double dynamics.
+
+* Bugfix: don't dump core on some programming errors (2x).
+
+* Grand Coriolan revision after copyright free reprint of a 1862-1865
+original edition. This revision also revealed fair amount of bugs.
+Previous versions arguably might have worn some small stains of
+editorial decisions dated 1936. Arguably, because most of these small
+changes can be found in other editions, some of which even are
+commonplace modernisations.
+
1.3.136
=======
MAJOR_VERSION=1
MINOR_VERSION=3
PATCH_LEVEL=136
-MY_PATCH_LEVEL=
+MY_PATCH_LEVEL=jcn1
# use the above to send patches: MY_PATCH_LEVEL is always empty for a
# released version.
# bin/Makefile
depth = ..
-STEPMAKE_TEMPLATES=script
+STEPMAKE_TEMPLATES=script install
include $(depth)/make/stepmake.make
+INSTALLATION_FILES=$(outdir)/gettext.py
+INSTALLATION_DIR=$(datadir)/python
+
+all: $(outdir)/gettext.py
-"""This module allows python programs to use GNU gettext message catalogs.
-
-Author: James Henstridge <james@daa.com.au>
-(This is loosely based on gettext.pl in the GNU gettext distribution)
-
-The best way to use it is like so:
- import gettext
- gettext.bindtextdomain(PACKAGE, LOCALEDIR)
- gettext.textdomain(PACKAGE)
- _ = gettext.gettext
- print _('Hello World')
-
-where PACKAGE is the domain for this package, and LOCALEDIR is usually
-'$prefix/share/locale' where $prefix is the install prefix.
-
-If you have more than one catalog to use, you can directly create catalog
-objects. These objects are created as so:
- import gettext
- cat = gettext.Catalog(PACKAGE, localedir=LOCALEDIR)
- _ = cat.gettext
- print _('Hello World')
-
-The catalog object can also be accessed as a dictionary (ie cat['hello']).
-
-There are also some experimental features. You can add to the catalog, just
-as you would with a normal dictionary. When you are finished, you can call
-its save method, which will create a new .mo file containing all the
-translations:
- import gettext
- cat = Catalog()
- cat['Hello'] = 'konichiwa'
- cat.save('./tmp.mo')
-
-Once you have written an internationalized program, you can create a .po file
-for it with "xgettext --keyword=_ fillename ...". Then do the translation and
-compile it into a .mo file, ready for use with this module. Note that you
-will have to use C style strings (ie. use double quotes) for proper string
-extraction.
-"""
-import os, string
-
-prefix = '/usr/local'
-localedir = prefix + '/share/locale'
-
-def _expandLang(str):
- langs = [str]
- # remove charset ...
- if '.' in str:
- langs.append(string.split(str, '.')[0])
- # also add 2 character language code ...
- if len(str) > 2:
- langs.append(str[:2])
- return langs
-
-lang = []
-for env in 'LANGUAGE', 'LC_ALL', 'LC_MESSAGES', 'LANG':
- if os.environ.has_key(env):
- lang = string.split(os.environ[env], ':')
- lang = map(_expandLang, lang)
- lang = reduce(lambda a, b: a + b, lang)
- break
-if 'C' not in lang:
- lang.append('C')
-
-# remove duplicates
-i = 0
-while i < len(lang):
- j = i + 1
- while j < len(lang):
- if lang[i] == lang[j]:
- del lang[j]
- else:
- j = j + 1
- i = i + 1
-del i, j
-
-if os.environ.has_key('PY_XGETTEXT'):
- xgettext = os.environ['PY_XGETTEXT']
-else:
- xgettext = None
-
-del os, string
-
-error = 'gettext.error'
-
-def _lsbStrToInt(str):
- return ord(str[0]) + \
- (ord(str[1]) << 8) + \
- (ord(str[2]) << 16) + \
- (ord(str[3]) << 24)
-def _msbStrToInt(str):
- return (ord(str[0]) << 24) + \
- (ord(str[1]) << 16) + \
- (ord(str[2]) << 8) + \
- ord(str[3])
-def _intToLsbStr(int):
- return chr(int & 0xff) + \
- chr((int >> 8) & 0xff) + \
- chr((int >> 16) & 0xff) + \
- chr((int >> 24) & 0xff)
-
-def _getpos(levels = 0):
- """Returns the position in the code where the function was called.
- The function uses some knowledge about python stack frames."""
- import sys
- # get access to the stack frame by generating an exception.
- try:
- raise RuntimeError
- except RuntimeError:
- frame = sys.exc_traceback.tb_frame
- frame = frame.f_back # caller's frame
- while levels > 0:
- frame = frame.f_back
- levels = levels - 1
- return (frame.f_globals['__name__'],
- frame.f_code.co_name,
- frame.f_lineno)
-
-class Catalog:
- def __init__(self, domain=None, localedir=localedir):
- self.domain = domain
- self.localedir = localedir
- self.cat = {}
- if not domain: return
- for self.lang in lang:
- if self.lang == 'C':
- return
- catalog = "%s//%s/LC_MESSAGES/%s.mo" % (
- localedir, self.lang, domain)
- try:
- f = open(catalog, "rb")
- buffer = f.read()
- del f
- break
- except IOError:
- pass
- else:
- return # assume C locale
-
- strToInt = _lsbStrToInt
- if strToInt(buffer[:4]) != 0x950412de:
- # catalog is encoded with MSB offsets.
- strToInt = _msbStrToInt
- if strToInt(buffer[:4]) != 0x950412de:
- # magic number doesn't match
- raise error, 'Bad magic number in %s' % (catalog,)
-
- self.revision = strToInt(buffer[4:8])
- nstrings = strToInt(buffer[8:12])
- origTabOffset = strToInt(buffer[12:16])
- transTabOffset = strToInt(buffer[16:20])
- for i in range(nstrings):
- origLength = strToInt(buffer[origTabOffset:
- origTabOffset+4])
- origOffset = strToInt(buffer[origTabOffset+4:
- origTabOffset+8])
- origTabOffset = origTabOffset + 8
- origStr = buffer[origOffset:origOffset+origLength]
-
- transLength = strToInt(buffer[transTabOffset:
- transTabOffset+4])
- transOffset = strToInt(buffer[transTabOffset+4:
- transTabOffset+8])
- transTabOffset = transTabOffset + 8
- transStr = buffer[transOffset:transOffset+transLength]
-
- self.cat[origStr] = transStr
-
- def gettext(self, string):
- """Get the translation of a given string"""
- if self.cat.has_key(string):
- return self.cat[string]
- else:
- return string
- # allow catalog access as cat(str) and cat[str] and cat.gettext(str)
- __getitem__ = gettext
- __call__ = gettext
-
- # this is experimental code for producing mo files from Catalog objects
- def __setitem__(self, string, trans):
- """Set the translation of a given string"""
- self.cat[string] = trans
- def save(self, file):
- """Create a .mo file from a Catalog object"""
- try:
- f = open(file, "wb")
- except IOError:
- raise error, "can't open " + file + " for writing"
- f.write(_intToLsbStr(0x950412de)) # magic number
- f.write(_intToLsbStr(0)) # revision
- f.write(_intToLsbStr(len(self.cat))) # nstrings
-
- oIndex = []; oData = ''
- tIndex = []; tData = ''
- for orig, trans in self.cat.items():
- oIndex.append((len(orig), len(oData)))
- oData = oData + orig + '\0'
- tIndex.append((len(trans), len(tData)))
- tData = tData + trans + '\0'
- oIndexOfs = 20
- tIndexOfs = oIndexOfs + 8 * len(oIndex)
- oDataOfs = tIndexOfs + 8 * len(tIndex)
- tDataOfs = oDataOfs + len(oData)
- f.write(_intToLsbStr(oIndexOfs))
- f.write(_intToLsbStr(tIndexOfs))
- for length, offset in oIndex:
- f.write(_intToLsbStr(length))
- f.write(_intToLsbStr(offset + oDataOfs))
- for length, offset in tIndex:
- f.write(_intToLsbStr(length))
- f.write(_intToLsbStr(offset + tDataOfs))
- f.write(oData)
- f.write(tData)
-
-_cat = None
-_cats = {}
-
-if xgettext:
- class Catalog:
- def __init__(self, domain, localedir):
- self.domain = domain
- self.localedir = localedir
- self._strings = {}
- def gettext(self, string):
- # there is always one level of redirection for calls
- # to this function
- pos = _getpos(2) # get this function's caller
- if self._strings.has_key(string):
- if pos not in self._strings[string]:
- self._strings[string].append(pos)
- else:
- self._strings[string] = [pos]
- return string
- __getitem__ = gettext
- __call__ = gettext
- def __setitem__(self, item, data):
- pass
- def save(self, file):
- pass
- def output(self, fp):
- import string
- fp.write('# POT file for domain %s\n' % (self.domain,))
- for str in self._strings.keys():
- pos = map(lambda x: "%s(%s):%d" % x,
- self._strings[str])
- pos.sort()
- length = 80
- for p in pos:
- if length + len(p) > 74:
- fp.write('\n#:')
- length = 2
- fp.write(' ')
- fp.write(p)
- length = length + 1 + len(p)
- fp.write('\n')
- if '\n' in str:
- fp.write('msgid ""\n')
- lines = string.split(str, '\n')
- lines = map(lambda x:
- '"%s\\n"\n' % (x,),
- lines[:-1]) + \
- ['"%s"\n' % (lines[-1],)]
- fp.writelines(lines)
- else:
- fp.write('msgid "%s"\n' % (str,))
- fp.write('msgstr ""\n')
-
- import sys
- if hasattr(sys, 'exitfunc'):
- _exitchain = sys.exitfunc
- else:
- _exitchain = None
- def exitfunc(dir=xgettext, _exitchain=_exitchain):
- # actually output all the .pot files.
- import os
- for file in _cats.keys():
- fp = open(os.path.join(dir, file + '.pot'), 'w')
- cat = _cats[file]
- cat.output(fp)
- fp.close()
- if _exitchain: _exitchain()
- sys.exitfunc = exitfunc
- del sys, exitfunc, _exitchain, xgettext
-
-def bindtextdomain(domain, localedir=localedir):
- global _cat
- if not _cats.has_key(domain):
- _cats[domain] = Catalog(domain, localedir)
- if not _cat: _cat = _cats[domain]
-
-def textdomain(domain):
- global _cat
- if not _cats.has_key(domain):
- _cats[domain] = Catalog(domain)
- _cat = _cats[domain]
-
-def gettext(string):
- if _cat == None: raise error, "No catalog loaded"
- return _cat.gettext(string)
-
-_ = gettext
-
-def dgettext(domain, string):
- if domain is None:
- return gettext(string)
- if not _cats.has_key(domain):
- raise error, "Domain '" + domain + "' not loaded"
- return _cats[domain].gettext(string)
-
-def test():
- import sys
- global localedir
- if len(sys.argv) not in (2, 3):
- print "Usage: %s DOMAIN [LOCALEDIR]" % (sys.argv[0],)
- sys.exit(1)
- domain = sys.argv[1]
- if len(sys.argv) == 3:
- bindtextdomain(domain, sys.argv[2])
- textdomain(domain)
- info = gettext('') # this is where special info is often stored
- if info:
- print "Info for domain %s, lang %s." % (domain, _cat.lang)
- print info
- else:
- print "No info given in mo file."
-
-if __name__ == '__main__':
- test()
-
--- /dev/null
+"""This module allows python programs to use GNU gettext message catalogs.
+
+Author: James Henstridge <james@daa.com.au>
+(This is loosely based on gettext.pl in the GNU gettext distribution)
+
+The best way to use it is like so:
+ import gettext
+ gettext.bindtextdomain(PACKAGE, LOCALEDIR)
+ gettext.textdomain(PACKAGE)
+ _ = gettext.gettext
+ print _('Hello World')
+
+where PACKAGE is the domain for this package, and LOCALEDIR is usually
+'$prefix/share/locale' where $prefix is the install prefix.
+
+If you have more than one catalog to use, you can directly create catalog
+objects. These objects are created as so:
+ import gettext
+ cat = gettext.Catalog(PACKAGE, localedir=LOCALEDIR)
+ _ = cat.gettext
+ print _('Hello World')
+
+The catalog object can also be accessed as a dictionary (ie cat['hello']).
+
+There are also some experimental features. You can add to the catalog, just
+as you would with a normal dictionary. When you are finished, you can call
+its save method, which will create a new .mo file containing all the
+translations:
+ import gettext
+ cat = Catalog()
+ cat['Hello'] = 'konichiwa'
+ cat.save('./tmp.mo')
+
+Once you have written an internationalized program, you can create a .po file
+for it with "xgettext --keyword=_ fillename ...". Then do the translation and
+compile it into a .mo file, ready for use with this module. Note that you
+will have to use C style strings (ie. use double quotes) for proper string
+extraction.
+"""
+import os, string
+
+prefix = '/usr/local'
+localedir = prefix + '/share/locale'
+
+def _expandLang(str):
+ langs = [str]
+ # remove charset ...
+ if '.' in str:
+ langs.append(string.split(str, '.')[0])
+ # also add 2 character language code ...
+ if len(str) > 2:
+ langs.append(str[:2])
+ return langs
+
+lang = []
+for env in 'LANGUAGE', 'LC_ALL', 'LC_MESSAGES', 'LANG':
+ if os.environ.has_key(env):
+ lang = string.split(os.environ[env], ':')
+ lang = map(_expandLang, lang)
+ lang = reduce(lambda a, b: a + b, lang)
+ break
+if 'C' not in lang:
+ lang.append('C')
+
+# remove duplicates
+i = 0
+while i < len(lang):
+ j = i + 1
+ while j < len(lang):
+ if lang[i] == lang[j]:
+ del lang[j]
+ else:
+ j = j + 1
+ i = i + 1
+del i, j
+
+if os.environ.has_key('PY_XGETTEXT'):
+ xgettext = os.environ['PY_XGETTEXT']
+else:
+ xgettext = None
+
+del os, string
+
+error = 'gettext.error'
+
+def _lsbStrToInt(str):
+ return ord(str[0]) + \
+ (ord(str[1]) << 8) + \
+ (ord(str[2]) << 16) + \
+ (ord(str[3]) << 24)
+def _msbStrToInt(str):
+ return (ord(str[0]) << 24) + \
+ (ord(str[1]) << 16) + \
+ (ord(str[2]) << 8) + \
+ ord(str[3])
+def _intToLsbStr(int):
+ return chr(int & 0xff) + \
+ chr((int >> 8) & 0xff) + \
+ chr((int >> 16) & 0xff) + \
+ chr((int >> 24) & 0xff)
+
+def _getpos(levels = 0):
+ """Returns the position in the code where the function was called.
+ The function uses some knowledge about python stack frames."""
+ import sys
+ # get access to the stack frame by generating an exception.
+ try:
+ raise RuntimeError
+ except RuntimeError:
+ frame = sys.exc_traceback.tb_frame
+ frame = frame.f_back # caller's frame
+ while levels > 0:
+ frame = frame.f_back
+ levels = levels - 1
+ return (frame.f_globals['__name__'],
+ frame.f_code.co_name,
+ frame.f_lineno)
+
+class Catalog:
+ def __init__(self, domain=None, localedir=localedir):
+ self.domain = domain
+ self.localedir = localedir
+ self.cat = {}
+ if not domain: return
+ for self.lang in lang:
+ if self.lang == 'C':
+ return
+ catalog = "%s//%s/LC_MESSAGES/%s.mo" % (
+ localedir, self.lang, domain)
+ try:
+ f = open(catalog, "rb")
+ buffer = f.read()
+ del f
+ break
+ except IOError:
+ pass
+ else:
+ return # assume C locale
+
+ strToInt = _lsbStrToInt
+ if strToInt(buffer[:4]) != 0x950412de:
+ # catalog is encoded with MSB offsets.
+ strToInt = _msbStrToInt
+ if strToInt(buffer[:4]) != 0x950412de:
+ # magic number doesn't match
+ raise error, 'Bad magic number in %s' % (catalog,)
+
+ self.revision = strToInt(buffer[4:8])
+ nstrings = strToInt(buffer[8:12])
+ origTabOffset = strToInt(buffer[12:16])
+ transTabOffset = strToInt(buffer[16:20])
+ for i in range(nstrings):
+ origLength = strToInt(buffer[origTabOffset:
+ origTabOffset+4])
+ origOffset = strToInt(buffer[origTabOffset+4:
+ origTabOffset+8])
+ origTabOffset = origTabOffset + 8
+ origStr = buffer[origOffset:origOffset+origLength]
+
+ transLength = strToInt(buffer[transTabOffset:
+ transTabOffset+4])
+ transOffset = strToInt(buffer[transTabOffset+4:
+ transTabOffset+8])
+ transTabOffset = transTabOffset + 8
+ transStr = buffer[transOffset:transOffset+transLength]
+
+ self.cat[origStr] = transStr
+
+ def gettext(self, string):
+ """Get the translation of a given string"""
+ if self.cat.has_key(string):
+ return self.cat[string]
+ else:
+ return string
+ # allow catalog access as cat(str) and cat[str] and cat.gettext(str)
+ __getitem__ = gettext
+ __call__ = gettext
+
+ # this is experimental code for producing mo files from Catalog objects
+ def __setitem__(self, string, trans):
+ """Set the translation of a given string"""
+ self.cat[string] = trans
+ def save(self, file):
+ """Create a .mo file from a Catalog object"""
+ try:
+ f = open(file, "wb")
+ except IOError:
+ raise error, "can't open " + file + " for writing"
+ f.write(_intToLsbStr(0x950412de)) # magic number
+ f.write(_intToLsbStr(0)) # revision
+ f.write(_intToLsbStr(len(self.cat))) # nstrings
+
+ oIndex = []; oData = ''
+ tIndex = []; tData = ''
+ for orig, trans in self.cat.items():
+ oIndex.append((len(orig), len(oData)))
+ oData = oData + orig + '\0'
+ tIndex.append((len(trans), len(tData)))
+ tData = tData + trans + '\0'
+ oIndexOfs = 20
+ tIndexOfs = oIndexOfs + 8 * len(oIndex)
+ oDataOfs = tIndexOfs + 8 * len(tIndex)
+ tDataOfs = oDataOfs + len(oData)
+ f.write(_intToLsbStr(oIndexOfs))
+ f.write(_intToLsbStr(tIndexOfs))
+ for length, offset in oIndex:
+ f.write(_intToLsbStr(length))
+ f.write(_intToLsbStr(offset + oDataOfs))
+ for length, offset in tIndex:
+ f.write(_intToLsbStr(length))
+ f.write(_intToLsbStr(offset + tDataOfs))
+ f.write(oData)
+ f.write(tData)
+
+_cat = None
+_cats = {}
+
+if xgettext:
+ class Catalog:
+ def __init__(self, domain, localedir):
+ self.domain = domain
+ self.localedir = localedir
+ self._strings = {}
+ def gettext(self, string):
+ # there is always one level of redirection for calls
+ # to this function
+ pos = _getpos(2) # get this function's caller
+ if self._strings.has_key(string):
+ if pos not in self._strings[string]:
+ self._strings[string].append(pos)
+ else:
+ self._strings[string] = [pos]
+ return string
+ __getitem__ = gettext
+ __call__ = gettext
+ def __setitem__(self, item, data):
+ pass
+ def save(self, file):
+ pass
+ def output(self, fp):
+ import string
+ fp.write('# POT file for domain %s\n' % (self.domain,))
+ for str in self._strings.keys():
+ pos = map(lambda x: "%s(%s):%d" % x,
+ self._strings[str])
+ pos.sort()
+ length = 80
+ for p in pos:
+ if length + len(p) > 74:
+ fp.write('\n#:')
+ length = 2
+ fp.write(' ')
+ fp.write(p)
+ length = length + 1 + len(p)
+ fp.write('\n')
+ if '\n' in str:
+ fp.write('msgid ""\n')
+ lines = string.split(str, '\n')
+ lines = map(lambda x:
+ '"%s\\n"\n' % (x,),
+ lines[:-1]) + \
+ ['"%s"\n' % (lines[-1],)]
+ fp.writelines(lines)
+ else:
+ fp.write('msgid "%s"\n' % (str,))
+ fp.write('msgstr ""\n')
+
+ import sys
+ if hasattr(sys, 'exitfunc'):
+ _exitchain = sys.exitfunc
+ else:
+ _exitchain = None
+ def exitfunc(dir=xgettext, _exitchain=_exitchain):
+ # actually output all the .pot files.
+ import os
+ for file in _cats.keys():
+ fp = open(os.path.join(dir, file + '.pot'), 'w')
+ cat = _cats[file]
+ cat.output(fp)
+ fp.close()
+ if _exitchain: _exitchain()
+ sys.exitfunc = exitfunc
+ del sys, exitfunc, _exitchain, xgettext
+
+def bindtextdomain(domain, localedir=localedir):
+ global _cat
+ if not _cats.has_key(domain):
+ _cats[domain] = Catalog(domain, localedir)
+ if not _cat: _cat = _cats[domain]
+
+def textdomain(domain):
+ global _cat
+ if not _cats.has_key(domain):
+ _cats[domain] = Catalog(domain)
+ _cat = _cats[domain]
+
+def gettext(string):
+ if _cat == None: raise error, "No catalog loaded"
+ return _cat.gettext(string)
+
+_ = gettext
+
+def dgettext(domain, string):
+ if domain is None:
+ return gettext(string)
+ if not _cats.has_key(domain):
+ raise error, "Domain '" + domain + "' not loaded"
+ return _cats[domain].gettext(string)
+
+def test():
+ import sys
+ global localedir
+ if len(sys.argv) not in (2, 3):
+ print "Usage: %s DOMAIN [LOCALEDIR]" % (sys.argv[0],)
+ sys.exit(1)
+ domain = sys.argv[1]
+ if len(sys.argv) == 3:
+ bindtextdomain(domain, sys.argv[2])
+ textdomain(domain)
+ info = gettext('') # this is where special info is often stored
+ if info:
+ print "Info for domain %s, lang %s." % (domain, _cat.lang)
+ print info
+ else:
+ print "No info given in mo file."
+
+if __name__ == '__main__':
+ test()
+
--- /dev/null
+%
+% multi-measure-rests should collide with notes, just as normal rests.
+%
+\score {
+ \notes\context Staff <
+ \context Voice=one \relative c''{
+ d d d d
+ d d d d
+ }
+ \context Voice=two {
+ r1
+ R
+ }
+ >
+}
\ No newline at end of file
--- /dev/null
+%
+% when part-combining, rests should collide as in normal case
+%
+\score {
+ \notes <
+ \context Staff <
+ \context Voice=one \relative c''{
+ d4 d d d
+ d d d d
+ }
+ \context Voice=two {
+ r1
+ R
+ }
+ >
+ \context Staff = Viole <
+ \context Voice=one \partcombine Voice
+ \context Thread=one \relative c''{ d4 d d d d d d d }
+ \context Thread=two { r1 R1 }
+ >
+ >
+ \paper {
+ }
+}
\ No newline at end of file
\notes {
bes1 ~ | \break
bes2 ~ bes4 ~ bes4 ~ | bes1
+ \key f\major;
+ bes1 ~|bes2 b ~|b ~ b ~|b1
}
\paper {
linewidth = 40*\staffspace;
}
clarinetti = \notes \relative c' {
- \property Staff.instrument = #`(lines "2 Clarinetti" (rows "(B" ,raisedflat ")"))
+ \property Staff.instrument = #`("Clarinetti in B" ,text-flat)
+% \property Staff.instrument = #`(lines "2 Clarinetti" (rows "(B" ,raisedflat ")"))
\property Staff.instr = #`(lines "Cl." (rows "(B" ,raisedflat ")"))
c1 c
|| Slur::has_interface (i.elem_l_)
// || Tie::has_interface (i.elem_l_)
|| i.elem_l_->has_interface (ly_symbol2scm ("tie-interface"))
+
/*
Usually, dynamics are removed by *_devnull_engravers for the
second voice. On the one hand, we don't want all dynamics for
the first voice to be placed above the staff. On the other
- hand, colliding of scripts may be worse */
-#if 0
- || i.elem_l_->has_interface (ly_symbol2scm ("dynamic-interface"))
- || i.elem_l_->has_interface (ly_symbol2scm ("text-interface"))
-#endif
+ hand, colliding of scripts may be worse.
+ So, we don't set directions for these when we're playing solo.
+ */
+ || (i.elem_l_->has_interface (ly_symbol2scm ("dynamic-interface"))
+ && state_ != SOLO)
+ || (i.elem_l_->has_interface (ly_symbol2scm ("text-interface"))
+ && state_ != SOLO)
))
{
/*
else
{
cresc_p_ = new Spanner (get_property ("TextSpanner"));
+ cresc_p_->set_interface (ly_symbol2scm ("dynamic-interface"));
cresc_p_->set_grob_property ("type", s);
daddy_trans_l_->set_property (start_type
void
Local_key_item::add_pitch (Grob*me, Pitch p, bool cautionary, bool natural,
- Grob* tie_break_cautionary)
+ Grob* tie_break_reminder)
{
SCM acs = me->get_grob_property ("accidentals");
SCM pitch = p.smobbed_copy ();
opts = gh_cons (ly_symbol2scm ("cautionary"), opts);
if (natural)
opts = gh_cons (ly_symbol2scm ("natural"), opts);
- if (tie_break_cautionary)
+ if (tie_break_reminder)
{
/* Ugh, these 'options' can't have a value, faking... */
- opts = gh_cons (tie_break_cautionary->self_scm (), opts);
- opts = gh_cons (ly_symbol2scm ("tie-break-cautionary"), opts);
+ opts = gh_cons (tie_break_reminder->self_scm (), opts);
+ opts = gh_cons (ly_symbol2scm ("tie-break-reminder"), opts);
}
pitch = gh_cons (pitch, opts);
lexer_p_->new_input (init, source_l_);
do_yyparse ();
+ progress_indication ("\n");
+
if (!define_spot_array_.empty())
{
define_spot_array_.top ().warning (_ ("Braces don't match"));
outputter_l_->output_header ();
outputter_l_->output_version ();
+ progress_indication ("\n");
if (global_header_p)
{
progress_indication ("\n");
-
// huh?
delete outputter_l_;
outputter_l_ = 0;
programming_error ("no toplevel translator");
return ;
}
- progress_indication ("\n" + _("Interpreting music..."));
+ progress_indication (_("Interpreting music..."));
Music * music = unsmob_music (music_);
trans_p->final_mom_ = music->length_mom ();
{
Grob *me= unsmob_grob (smob);
#if 0
- Direction dir = DOWN;
+
SCM d = me->get_grob_property ("direction");
if (isdir_b (d))
dir = to_dir (d);
#endif
Direction dir = Side_position_interface::get_direction(me);
+ if (!dir)
+ {
+ programming_error ("Script direction not known, but molecule wanted.");
+ dir= DOWN;
+ }
+
return get_molecule (me, dir).smobbed_copy();
}
Axis a = (Axis) gh_scm2int (axis);
Direction d = Side_position_interface::get_direction (me);
+
Real o = gh_scm2double (aligned_on_support_extents (element_smob,axis));
Interval iv = me->extent (me, a);
if (!iv.empty_b ())
{
+ if (!d)
+ {
+ programming_error ("Direction unknown, but aligned-side wanted.");
+ d = DOWN;
+ }
o += - iv[-d];
SCM pad = me->get_grob_property ("padding");
SCM s = get_property ("devNullThread");
#if 0
/* No need */
- if (gh_equal_p (s, ly_symbol2scm ("never")))
+ if (s == ly_symbol2scm ("never"))
return;
#endif
- if (gh_equal_p (s, ly_symbol2scm ("allways"))
+ if (s == ly_symbol2scm ("allways")
|| (s == SCM_EOL
&& daddy_trans_l_->id_str_.left_str (3) == "two"
&& (to_boolean (get_property ("unison"))
}
static char const *junk_interfaces[] = {
-#if 0
+#if 1
"beam-interface",
#endif
+ "script-interface",
"slur-interface",
"tie-interface",
+ "text-interface",
"text-item-interface",
"text-script-interface",
"dynamic-interface",
- "crescendo-interface",
+ "hairpin-interface",
+ "text-spanner-interface",
0
};
SCM s = get_property ("devNullVoice");
#if 0
/* No need */
- if (gh_equal_p (s, ly_symbol2scm ("never")))
+ if (s == ly_symbol2scm ("never"))
return;
#endif
- if (gh_equal_p (s, ly_symbol2scm ("allways"))
- || (gh_equal_p (s, ly_symbol2scm ("unisolo"))
+ if (s == ly_symbol2scm ("allways")
+ || (s == SCM_EOL
&& daddy_trans_l_->id_str_.left_str (3) == "two"
&& (to_boolean (get_property ("unison"))
|| to_boolean (get_property ("unisilence")))))
bassiGroup = \context PianoStaff = bassi_group \notes <
\context Staff=violoncelloStaff <
\property Staff.midiInstrument = #"cello"
- \property Staff.instrument = #"Violoncello "
+ \property Staff.instrument = #"Violoncello "
\property Staff.instr = #"Vc. "
\clef "bass";
\global
>
\context Staff=contrabassoStaff <
\property Staff.midiInstrument = #"contrabass"
- \property Staff.instrument = #"Contrabasso "
+ \property Staff.instrument = #"Contrabasso "
\property Staff.instr = #"Cb. "
\property Staff.transposing = #-12
\clef "bass";
clarinettiStaff = \context Staff = clarinetti <
\property Staff.midiInstrument = #"clarinet"
- \property Staff.instrument = #`(lines
- "2 Clarinetti" (rows "(B" ,text-flat ")"))
+ \property Staff.instrument = #`("Clarinetti in B" ,text-flat)
\property Staff.instr = #`(lines "Cl." (rows "(B" ,text-flat ")"))
\property Staff.transposing = #-2
cis2.\ff()d4|
cis(d cis)d|
es2.()d4|
- c(bis c)bes|
+ c(bes c)bes|
es2.()d4|
- c(bis c)bes|
+ c(bes c)bes|
r2 es4\sf()d|
r2 es4\sf()d|
r2 es4\sf()d|
r2 es4\sf()d|
- es2 bis|
+ es2 cis|
d b|
cis d|
e d|
cis\sf r|
c1\sf|
b|
- g2. as4\sf(|
- )g2. as4\sf(|
- )g2. as4\sf(|
- )g2. as4\sf(|
- )g4 r r2|
- R1*9|
- %a deux; urg: copied clarinetto-1(60,61)|
- a'2.(bes4|
- a g e)c|
+ g2. as4\sf|
+ g2. as4\sf|
+ g2. as4\sf|
+ g2. as4\sf|
+ g4 r r2|
+ R1*11|
c2\ff es,|
d1~|
d\p~|
contrabasso = \notes \relative c {
% copied 21 from cello
- c1\ff ~|
+ c1\ff~|
c|
f,4-. r r2|
R1|
- c'1\ff ~|
+ c'1~|
c|
f,4-. r r2|
R1|
- c'1\ff ~|
+ c'1~|
c|
fis,4-. r r2|
R1|
%40
fis2\sf r|
fis2\sf r|
- f!2\sf r|
+ f2\sf r|
f2\sf r|
e2\sf r|
%45
- es!2\sf r|
- des2. es4\sf(|
- )d2. es4\sf(|
- )d2. es4\sf(|
- )d2. es4\sf(|
+ es2\sf r|
+ des2. es4\sf|
+ d2. es4\sf|
+ d2. es4\sf|
+ d2. es4\sf|
% 50
- )d4 r r2|
+ d4 r r2|
R1
es'4\p r r r8 es(|
)as,4 r r r8 as(|
a(g a)g|
c2.()bes4|
a(g a)g|
- f!2.()es4|
+ f2.()es4|
d(c d)c|
%90
f2.()es4|
% copied 8 from cello
%110
[g'8:8 bes d es][f, a cis d]|
- [es,8: g: b: c!:][d,: f: a: bes:]|
+ [es,8: g: b: c:][d,: f: a: bes:]|
[c,: es: g: a:][cis,: e: g: bes:]|
[d,: g: bes: d:][d,: fis: a: d:]|
g,,2 ~ g4. g8|
g4. g8 g4 r8 g|
g4\p r r2|
% urg, this is *rest*, not skip:
- % need own staff for rests, mustn't collapse to one cello staff!
+ % need own staff for rests, mustn't collapse to one cello staff
%120 - 1
R1*21|
% copied 4 frorm cello
%195
)g,4 r r r8 g(|
-%% \!)d2\ff e'|
-%% dis b|
- \!)d2\ff e|
- dis b'|
- es4\p r r r8 es(|
+ \!)d2\ff e'|
+ dis b|
+ e4\p r r r8 es(|
)a,4 r r r8 a(|
)g1|
%200
f|
% copied 18 from cello
- es'!4\fp r e r|
+ es'4\fp r e r|
f r g r|
as r g r|
f r fis r|
R1*3|
%copied 59 from cello
- [c8\f e g as][bes, d fis g]|
+ [c8\f es g as][bes, d fis g]|
%240
- [as, c e f!][g, bes d es]|
+ [as, c e f][g, bes d es]|
f4 r r2|
R1*3|
c4\p r r r8 c(|
\!ges\f|
f\p|
as\f|
- g!\p|
+ g\p|
bes\f|
%260
b,4. b'8 b2\sf|
%270
- [c,8-"sempre"\ff b c d][es\ff d es c]|
+ [c,8-"sempre"\ff b c d][es d es c]|
[b c d c][b c b g]|
[c8 b c d][es d es c]|
[b c d c][b c b g]|
[c b c g][c b c g]|
c1 ~|
c|
- f4-. r r2|
+ f,4-. r r2|
R1|
%280
- c1 ~|
+ c'1 ~|
c|
- f4-. r r2|
+ f,4-. r r2|
R1|
- c1 ~|
+ c'1 ~|
%285
c|
%295
R1|
c4 r r2|
- r2 r4 f,|
- c' r r2|
- r2 r4 f,|
+ r2 r4 g|
+ c r r2|
+ r2 r4 g|
%300
- c' r r2|
+ c r r2|
R1|
- f,4 r r2|
+ g4 r r2|
R1|
- c'4 r r2|
+ c4 r r2|
%305
R1|
- f,4 r r2|
+ g4 r r2|
R1*3|
%310
- c'4\pp r r2|
+ c4\pp r r2|
R1|
c4 r r2|
c4 r r2|
% Mandatory Mutopia settings:
textheight = 270.0\mm;
linewidth = 180.0\mm;
+ indent = 30.\mm;
\translator {
\ThreadContext
%% devNullThread = #'never
\consists "Thread_devnull_engraver";
+
+ %\remove "Dynamic_engraver";
+ %\remove "Text_engraver";
}
\translator {
\HaraKiriStaffContext
+
+ %\consists "Dynamic_engraver";
+ %\consists "Text_engraver";
+
\consists "Mark_engraver";
MultiMeasureRest \override #'minimum-width = #6
}
%% devNullThread = #'never
\consists "Thread_devnull_engraver";
+
+ %\remove "Dynamic_engraver";
+ %\remove "Text_engraver";
}
% We need the HaraKiri staff for Staff Combining,
% but we better remove the Instrument_name_engraver.
\translator {
\HaraKiriStaffContext
+
+ %\consists "Dynamic_engraver";
+ %\consists "Text_engraver";
+
\consists "Mark_engraver";
\remove "Instrument_name_engraver";
}
corniStaff = \context Staff = corni <
\property Staff.midiInstrument = #"french horn"
- \property Staff.instrument = #`(lines
- "2 Corni" (rows "(E" ,text-flat ")"))
+ \property Staff.instrument = #`(rows "Corni in E" ,text-flat)
\property Staff.instr = #`(lines "Cor." (rows "(E" ,text-flat ")"))
\property Staff.transposing = #3
R1*17|
r4 r8 e,8 e4. e8|
r4 r8 e8 e4. e8|
+ \property Voice.crescendoText = #"cresc."
+ \property Voice.crescendoSpanner = #'dashed-line
+ r4 r8 e8\< e4. e8|
r4 r8 e8 e4. e8|
r4 r8 e8 e4. e8|
r4 r8 e8 e4. e8|
- r4 r8 e8 e4. e8|
- f'2. e4|
+ \!f'2.\ff e4|
d e d e|
f2. e4|
d e d e|
R1*3|
d4\ff r c r|
d r c r|
- e, r d' r|
+ g r d' r|
d r e r|
d4 r r2|
R1|
fagottiStaff = \context Staff = fagotti <
\property Staff.midiInstrument = #"bassoon"
- \property Staff.instrument = #"2 Fagotti"
+ \property Staff.instrument = #"Fagotti"
\property Staff.instr = #"Fg."
\clef "bass";
%\property Staff.clefGlyph = #"clefs-F"
f\sf r|
f\sf r|
e1\sf es\sf|
- d2. es4\sf(|
- )d2. es4\sf(|
- )d2. es4\sf(|
- )d2. es4\sf(|
- )d4 r r2|
+ d2. es4\sf|
+ d2. es4\sf|
+ d2. es4\sf|
+ d2. es4\sf|
+ d4 r r2|
R1*9|
\clef "tenor";
%% 110|
% copied from cello, copied from viola|
[g8 bes d es][f, a cis d]|
- [es,8:8 g: b: c!:][d,: f: a: bes:]|
+ [es,8:8 g: b: c:][d,: f: a: bes:]|
[c,: es: g: a:][cis,: e: g: bes:]|
[d,: g: bes: d:][d,: fis: a: d:]|
g,2 ~ g4. g8|
g~|
g~|
g|
- e''2.(f4|
+ \property Voice.crescendoText = #"cresc."
+ \property Voice.crescendoSpanner = #'dashed-line
+ e''2.(\<f4|
e d b)g|
g'2.(a4|
g2)f|
e2.(f4|
e d b)g|
- g2\ff f|
+ \!g2\ff f|
e a~|
a1\p~|
a~|
R1*7|
%%238 copied from cello from viola|
- [c8\f e g as][bes, d fis g]|
- [as, c e f!][g, bes d es]|
+ [c8\f es g as][bes, d fis g]|
+ [as, c e f][g, bes d es]|
f4 r r2|
r4 r8 d d2\sf|
%% 270 copied from cello|
- [c,8-"sempre"\ff b c d][es\ff d es c]|
+ [c,8-"sempre"\ff b c d][es d es c]|
[b c d c][b c b g]|
[c8 b c d][es d es c]|
[b c d c][b c b g]|
f\sf r|
e1\sf|
es\sf|
- d2. es4\sf(|
- )d2. es4\sf(|
- )d2. es4\sf(|
- )d2. es4\sf(|
- )d4 r r2|
+ d2. es4\sf|
+ d2. es4\sf|
+ d2. es4\sf|
+ d2. es4\sf|
+ d4 r r2|
R1*9|
\clef "tenor";
%% 110|
% copied from cello, copied from viola|
[g8 bes d es][f, a cis d]|
- [es,8:8 g: b: c!:][d,: f: a: bes:]|
+ [es,8:8 g: b: c:][d,: f: a: bes:]|
[c,: es: g: a:][cis,: e: g: bes:]|
[d,: g: bes: d:][d,: fis: a: d:]|
g,,2 ~ g4. g8|
\property Voice.crescendoSpanner = #'dashed-line
r4 r8 c\< c4. c8|
r4 r8 c c4. c8|
-
+
+ r4 r8
\clef "tenor";
%\property Staff.clefGlyph = #"clefs-C"
%\property Staff.clefPosition = #2
-
-
- r4 r8 d d4. d8|
+ d d4. d8|
r4 r8 es es4. es8|
\clef "bass";
%a deux|
%%238 copied from cello from viola|
- [c8\f e g as][bes, d fis g]|
- [as, c e f!][g, bes d es]|
+ [c8\f es g as][bes, d fis g]|
+ [as, c e f][g, bes d es]|
f4 r r2|
% a deux|
%% 270 copied from cello|
- [c,8-"sempre"\ff b c d][es\ff d es c]|
+ [c,8-"sempre"\ff b c d][es d es c]|
[b c d c][b c b g]|
[c8 b c d][es d es c]|
[b c d c][b c b g]|
flautiStaff = \notes \context Staff = flauti <
\property Staff.midiInstrument = #"flute"
- \property Staff.instrument = #"2 Flauti"
+ \property Staff.instrument = #"Flauti"
\property Staff.instr = #"Fl."
\global
\context Voice=one \partcombine Voice
as\sf r|
g1\sf|
ges\sf|
- f2. ges4\sf (|
- )f2. ges4\sf (|
- )f2. ges4\sf (|
- )f2. ges4\sf|
+ f2. ges4\sf|
+ f2. ges4\sf|
+ f2. ges4\sf|
+ f2. ges4\sf|
f4 r r2|
R1*9|
\property Voice.crescendoText = #"cresc."
fis(g fis)g|
es2.()d4|
fis(g fis)g|
- a2.()g4|
+ as2.()g4|
b,(c b)c|
- a'2.()g4|
+ as'2.()g4|
b,(c b)c|
r2 es\sf|
r es\sf|
bes4 r8 bes' bes4 r8 bes|
bes4 r8 bes bes4 r8 bes|
R1*4|
- as,4\ff r8 des c4 r8 g|
+ as4\ff r8 des c4 r8 g|
f4 r8 bes as4 r8 es|
- des4 r8 g f4 r8 as'|
+ des4 r8 g f4 r8 as|
g4 r8 g g4 r8 g|
as4 r r2|
R1|
% Ugh, we need to override some LaTeX titling stuff
\header {
- title = "Ouverture\\vrule width0pt height 0pt depth 1ex";
+ title = "Ouvertüre\\vrule width0pt height 0pt depth 1ex";
subtitle = "\\normalsize Zu Heinrich Joseph v. Collins Trauerspiel\\vrule width0pt height 0pt depth 1ex";
subsubtitle = "\\Large\\bf Coriolan";
opus = "Op. 62";
- piece = "\\normalfont\\large Allegro con brio";
+ piece = "\\hspace*{30mm}\\normalfont\\large Allegro con brio";
composer = "Ludwig van Beethoven (1770-1827)";
enteredby = "JCN";
instrument = \instrument;
mutopiainstrument = \instrument;
date = "1807";
+ source = "Six Great Overtuers in Full Score, Ludwig van Beethoven; Dover
+ Publications INC, New York (1985). Unabridged republication of
+ Beethoven's Werke, Ouverturen fuer Orchester: No. 18-21, 26-27;
+ Breitkopf and Haertel, Leipzig, n.d. [1862-1865].";
+
%{
- From Ouverture Coriolan is no Urtext edition available, although
- there are Urtext editions of Beethoven's symphonys. The Eulenburg
- edition is commonly regarded as the Coriolan Urtext.
+ i. Six Great Overtuers in Full Score, Ludwig van Beethoven; Dover
+ Publications INC, New York (1985). Free of copyright and
+ copyright marks. Reprint. Originally published: Breitkopf and
+ Haertel, n.d. [1862-1865] (Ludwig van Beethoven's Werke; Ser 3)
+ No. 18-21, 26-27.
+ M1004.B4097
+ ISBN 0-486-24789-9
+
+ Differences of Mutopia score
+
+ The printed output of this Mutopia score exhibits a number of
+ differences to the original source i. These differences fall into
+ two catogaries: changes made by the editor (enteredby), and
+ automatic changes made by the GNU LilyPond typesetting mechanism.
+
+ a. Changes by the editor
+
+ 1. The old notation of dotted quarter notes on the fourth beat
+ are modernised to a quarter note, a tie, and an eight note,
+ ie:
+
+ \partial 4; c4. -> c4 ~ | c8
+
+ GNU LilyPond 1.3.136 can not handle the old notation. When
+ this old notation will be supported, it should be fairly
+ straightforward to find and change these instances. It would
+ be advisable, however, to keep the current, modern printout,
+ and document this as a change in b.
+
+ 2. Notes are entered by their name, no efforts were made to
+ force the printing of reminder accidentals to mimic the
+ original edition, see b.2,3.
+
+ 3. Empty staffs are removed through the Hara-kiri-staff
+ mechanism. This change can be undone very easily.
+
+ 4. Margins are changed to Mutopia dictated values. This change
+ can be undone very easily, however, see b.7.
+
+ b. Automatic changes by the GNU LilyPond typesetting mechanism
+
+ 1. Bar lines are not connected between staff groups.
+
+ 2. Accidentals are not repeated within one bar, in
+
+ \key es\major; b2 b
+
+ only the first b gets an accidental. Note that not in all
+ cases these accidentals are consistently repeated, however,
+ they are printed in most cases where the two notes are
+ more than one note apart.
+
+ 3. Reminder accidentals are not printed, in
+
+ \key es\major; b1 | bes
+
+ no flat is printed with the bes.
+
+ 4. Stem.default-neutral-direction and
+ Beam.default-neutral-direction are 1 (up).
+
+ 5. Beam-dir-algorithm is 'majority.
+
+ 6. The part combiner prints "I.", "II." and "`a 2." strings
+ where appropriate.
+
+ 7. Line breaks are calculated.
+
+ 8. GNU LilyPond has bugs that affect the Coriolan, see test
+ sources in input/bugs/*.ly.
+
+
+ Other editions.
+
+ ii. Edition Eulenburg No.626 Coriolan, Overture for Orchestra
+ Op. 62; Ernst Eulenburg LTD, (not dated). Edited 1936 by
+ dr. Max Unger from and following score autograph and original
+ published parts, ie, Stimmen-Drucke N.Simrock Bonn (most
+ probably from 1807) and Industriekontor Vienna (1807).
+
+ iii. Beethoven's Werke -- Ouverturen fuer Orchester; Breitkopf
+ u. Haertel, Leipzig (not dated, but very old and worn).
+
+ iv. Beethoven Werke II,1 -- Ouverturen und Wellingtons Sieg;
+ G. Henle Verlag, Muenchen (1974). Veroeffentlichung des
+ Beethovenhauses in Bonn. Die ausgabe wurde durch die
+ Unterstuetzung des Landes Nordrhein-Westfalen ermoeglicht.
+
+
+ Background.
+
+ From Overture Coriolan is no Urtext edition available, although
+ there are Urtext editions of Beethoven's symphonies.
Edition Eulenburg is the ``first after many years'' that tries to
stay as close to the original text as possible. During the 1900s,
it was customary for editors not to respect the original text and
make any changes they thought necessary. Unger made corrections for
- a few ``small and obvious'' inaccuracies. This is the only score
- edition to abbreviate (LilyPond source notation)
+ a few ``small and obvious'' inaccuracies. Together with Breitkopf
+ and Haertel, this is the only score edition to abbreviate (LilyPond
+ source notation)
[es16 es g g] [b b c c]
[es8:16 g: b: c:]
- however, editions of individual parts by Breitkopf and Haertel use
- this common practice abbreviation too.
+ editions of individual parts by Breitkopf and Haertel use this
+ common practice abbreviation too.
Edition Beethoven's Werke by Breitkopf and Haertel comes without any
commentary, copyright mark or date. There are no significant
not from the autograph itself), and that Simrock's is a bit closer
to the original autograph. This edition is supposed to deviate from
the autograph only in using `modernised notation' for the following
- cases (LilyPond source notation).
+ cases (GNU LilyPond source notation), as described by the foreword.
- i. Use dots instead of ties for sustaining of notes when there's no
- measure break:
+ a. Use dots instead of ties for sustaining of notes when there's no
+ measure break:
- c4 ~ c8 -> c4.
+ c4 ~ c8 -> c4.
+
+ We very much doubt this, as the 1862 edition already has this,
+ but in contrast, has a different change, see i.a.1 above.
- ii. Don't repeat accidentals within the same measure:
+ b. Don't repeat accidentals within the same measure:
- \key es \major; b4 c b! c | -> \key es \major; b4 c b c
+ \key es \major; b4 c b! c | -> \key es \major; b4 c b c
- iii. Start slurring from first tied note, not from second:
+ We think that also other changes may have been made, see i.b.3
+ above.
+
+ c. Start slurring from first tied note, not from second:
- c4 ~ c8 ( d ) e -> c4 ( ~ c8 d ) e
+ c4 ~ c8 ( d ) e -> c4 ( ~ c8 d ) e
From these deviations, the third is the only one unique to this
edition, but these are easy to spot and mostly parenthesed; the
%}
- source = "i. Ed. Eulenburg, edited by dr. Max Unger 1936 from and
- following score autograph and original published parts, ie,
- Stimmen-Drucke N.Simrock Bonn (most probably from 1807) and
- Industriekontor Vienna (1807).\\\\
- ii. Beethoven's Werke -- Ouverturen fuer Orchester; Breitkopf u. Haertel,
- Leipzig (not dated, but very old and worn).\\\\
- iii. Beethoven Werke II,1 -- Ouverturen und Wellingtons Sieg; G. Henle
- Verlag, Muenchen (1974).
- Veroeffentlichung des Beethovenhauses in Bonn.
- Die ausgabe wurde durch die Unterstuetzung des Landes Nordrhein-Westfalen
- ermoeglicht.";
-
style = "Classical";
copyright = "Public Domain";
maintainer = "Jan Nieuwenhuizen";
\\texttt{http://www.mutopiaproject.org/}\\\\It has been typeset
and placed in the public domain by " + \maintainer +
".\\\\Unrestricted modification and redistribution is permitted
- and encouraged---copy this music and share it!}";
+ and encouraged---copy this music and share it.}";
tagline = \mutopiapublicdomain;
footer = "pre-Mutopia-200y/mm/dd-nr";
}
as\sf r|
g1\sf|
ges\sf|
- f2. ges4(|
- )f2. ges4(|
- )f2. ges4(|
- )f2. ges4(|
- )f4 r r2|
+ f2. ges4|
+ f2. ges4|
+ f2. ges4|
+ f2. ges4|
+ f4 r r2|
R1*9|
\property Voice.crescendoText = #"cresc."
\property Voice.crescendoSpanner = #'dashed-line
f2.\<( g4|
f e cis)a|
\!a'2\ff c|
- b1\p~|
- b~|
+ b1~|
+ b\p~|
b~|
b~|
b|
bes4. bes8 bes4 r8 bes|
bes4 r8 bes bes4 r8 bes|
bes4\p r r2|
- R1*15|
- \property Voice.crescendoText = #"cresc."
- \property Voice.crescendoSpanner = #'dashed-line
- r4 r8 as'\< ges4 r8 des|
- es4 r8 bes' as4 r8 es|
- f4 r r2|
- R1*3|
+ R1*21|
%a deux; urg copied ...|
- \!f4\f r r r8 es|
+ \!f'4\f r r r8 es|
des4 r r r8 c|
bes4 r8 bes bes4 r8 bes|
bes4 r8 bes bes4 r8 bes|
R1|
b4 r r2|
R1|
- c4 r r2\pp|
+ c4\pp r r2|
R1*18|
}
oboiStaff = \context Staff = oboi <
\property Staff.midiInstrument = #"oboe"
- \property Staff.instrument = #"2 Oboi"
+ \property Staff.instrument = #"Oboi"
\property Staff.instr = #"Ob."
\global
\context Voice=one \partcombine Voice
g4 r8 g g4 r8 g|
g4 r8 g g4 r8 g|
R1|
+ % should extend over two bars tr ~~~~~~
g1\trill~|
g|
g4 r8 g g4 r8 g|
timpaniStaff = \context Staff = timpani <
\property Staff.midiInstrument = #"timpani"
- \property Staff.instrument = #'(lines
- "2 Timpani" "(C-G)")
+ \property Staff.instrument = #"Timpani in C-G "
\property Staff.instr = #"Timp."
\clef "bass";
\Time
\context Staff=trombe {
\property Staff.midiInstrument = #"trumpet"
- \property Staff.instrument = #`(lines "2 Trombe" (rows "(C)"))
+ \property Staff.instrument = #"Trombe in C"
\property Staff.instr = #`(lines "Tbe." (rows "(C)"))
\notes { \key c \major; }
[d8\< d-.] es4. es8-. d4 ~|
[d8 d-.] es4. es8-. d4 ~|
[d8 d-.] es4. es8-. d4 ~|
- [d8 d-.] es4. es8-. d4 (|
- \!)fis,2:\ff fis4: g:|
+ [d8 d-.] es4. es8-. d4|
+ \!fis2:\ff fis4: g:|
%85
d2: d:|
fis: fis4: g:|
c,: d: c: d:|
b2: b4: c:|
- f': es: f: es:|
+ f: es: f: es:|
%90
b2: b4: c:|
d: c: d: c:|
%110
% cello has eighth notes here...
[g,16 g bes bes][d d es es][f, f a a][cis cis d d]|
- [es,8: g: b: c!:][d,: f: a: bes:]|
+ [es,8: g: b: c:][d,: f: a: bes:]|
[c,: es: g: a:][cis,: e: g: bes:]|
[d,: g: bes: d:][d,: fis: a: d:]|
d2: d:
)d4 r r r8 d8(|
%195
)g4 r r r8 g8|
- [\!a16\ff a' a a]a4: a2:|
+ [\!a16\ff a' a a]a4: g2:|
fis: dis:|
e,4\p r r r8 e8(|
bes,: c: bes: c:|
e2:16\ff e4: f:|
- b,: c: b: c:|
+ bes,: c: bes: c:|
%220
r4 r8 as as2\sf|
[g8 g]g4. as8 as4 ~|
[as8 as]f4. f8 g4|
%230
- c\p r r2|
- r r4 r8 b\f|
+ c,\p r r2|
+ r r4 r8 b'\f|
c4 r r2|
r r4 r8 b\f|
c4 r r2|
R1|
c,4 r r2|
R1*15|
- c4\pp r r2|
+ c4-#'((font-shape . upright) "pizz.") r r2|
c4 r r2|
c4 r r2|
}
[d8 d-.] es4. es8-. d4 ~|
[d8 d-.] es4. es8-. d4 ~|
[d8 d-.] es4. es8-. d4 (|
- \!)fis,2:\ff fis4: g:|
+ \!)fis2:\ff fis4: g:|
%85
d2: d:|
fis: fis4: g:|
c,: d: c: d:|
b2: b4: c:|
- f': es: f: es:|
+ f: es: f: es:|
%90
b2: b4: c:|
d: c: d: c:|
c,4 r8 c' c4\sf()des|
r r8 c c4\sf()des|
-
r r8 c c4\sf()des|
-
r r8 c c4\sf()des|
-
[c16 es es es]es4:[es16 fis fis fis]fis4:|
[b,16 d d d]d4:[bes16 e e e]e4:|
[as,16 c c c ]c4:[g16 c c c]c4:|
%110
% cello has eighth notes here...
[g,16 g bes bes][d d es es][f, f a a][cis cis d d]|
- [es,8: g: b: c!:][d,: f: a: bes:]|
+ [es,8: g: b: c:][d,: f: a: bes:]|
[c,: es: g: a:][cis,: e: g: bes:]|
[d,: g: bes: d:][d,: fis: a: d:]|
g,2: g:
)d4 r r r8 d8(|
%195
)g4 r r r8 g8|
- [\!f16\ff f' f f]f4: f2:|
+ [\!f16\ff f' f f]f4: e2:|
dis: b:|
-
e,4\p r r r8 e8(|
)a4\< r r r8 a8(|
%200
[g8 g-.] as4. as8-. g4 (|
\!)b,2:16\ff b4: c:|
g'2: g:|
-
%214
b,2:16\ff b4: c:|
g'2: g:|
-
bes,2:16\ff bes4: as:|
g: f: g: f:|
-
bes2:16\ff bes4: as:|
g: f: g: f:|
-
%220
r4 r8 f f4\sf()ges|
r4 r8 f f4\sf()ges|
[g8 g]g4. as8 as4 ~|
[as8 as]f4. f8 g4|
%230
- c\p r r2|
- r r4 r8 b\f|
+ c,\p r r2|
+ r r4 r8 b'\f|
c4 r r2|
r r4 r8 b\f|
c4 r r2|
r4 r8 e g4.\sf()f8|
r4 r8 f as4.\sf()g8|
%270
- g2:16-"sempre" g:\ff|
+ g2:16-"sempre"\ff g:|
g: g:|
g: g:|
g: g:|
R1|
c,4 r r2|
R1*15|
- c4\pp r r2|
+ c4-#'((font-shape . upright) "pizz.") r r2|
c4 r r2|
c4 r r2|
}
%20
[g8 fis] fis4 ~ fis \!g-.\f|
R1|
- [bes,,!8\p-. des-.][des()c][c-. f-.]f4-"ten."|
- [bes,!8\p-. des-.][des()c][c-. f-.]f4-"ten."|
- [bes,!8\p-. des-.][des()c][c-. ges'-.][ges()f]|
+ [bes,,8\p-. des-.][des()c][c-. f-.]f4-"ten."|
+ [bes,8\p-. des-.][des()c][c-. f-.]f4-"ten."|
+ [bes,8\p-. des-.][des()c][c-. ges'-.][ges()f]|
%25
[f-. bes-.][bes()a][a-. es'-.][es()des]|
\property Voice.crescendoText = #"cresc."
%35
[f16 f f f][es es es es][des des des des][c c c c]|
b2:16 c:|
- d!: es:|
+ d: es:|
e: f:|
g: as:|
%40
a2\sf [c,,8-. es-.][es()d]|
a''2\sf [c,,8-. es-.][es()d]|
- as''!2\sf [b,,8-. d-.][d()c]|
+ as''2\sf [b,,8-. d-.][d()c]|
as''2\sf [b,,8-. d-.][d()c]|
g''1\sf|
%45
ges\sf|
- f2. ges4\sf(|
- )f2. ges4\sf(|
- )f2. ges4\sf(|
- )f2. ges4\sf(|
+ f2. ges4\sf|
+ f2. ges4\sf|
+ f2. ges4\sf|
+ f2. ges4\sf|
%50
- )f1\>~|
+ f1\>~|
f4 d( bes)as|
\!g2.\p( as4|
g f d ) bes|
[a8 bes-.] bes4. bes8-. bes4~|
[bes8 bes-.] bes4. bes8-. bes4~|
[bes8 c-.] c4. c8-. c4~|
- [c8 d-.] d4. d8-. d4(|
- )es2:16\ff es4: d:|
+ [c8 d-.] d4. d8-. d4|
+ es2:16\ff es4: d:|
%85
fis: g: fis: g:|
es2: es4: d:|
%95
r8 es' as,4\sf~as()g|
r8 es' as,4. fis8 es'4~|
- [es8 d] g,4. e8 d'4~|
- [d8 c] f,4. c'8 es,4 ~|
+ [es8 d] g,4. e8 des'4~|
+ [des8 c] f,4. c'8 es,4 ~|
[es8 c'] a4. c8 g4 ~|
%100
%120
bes4 r8 es des4 r8 bes|
- as!4 r8 es' des4 r8 as|
+ as4 r8 es' des4 r8 as|
g4 r r2|
r4 r8 es' des4 r8 as|
g4 r r2|
f4\f r8 bes as4 r8 es|
des4 r8 ges f4 r8 c|
bes4 r8 e f4 r8 bes,|
- bes4 r8 g'! e4 r8 bes'|
+ bes4 r8 g' e4 r8 bes'|
\property Voice.crescendoText = #"cresc."
\property Voice.crescendoSpanner = #'dashed-line
as4\p r8 des\< c4 r8 g|
f,,1 ~|
f|
- <f'2\sf d'!> [f,8-. as-.][as()g]|
+ <f'2\sf d'> [f,8-. as-.][as()g]|
<f'2\sf d'> [f,8-. as-.][as()g]|
%160
[f8-.\p as-.][as()g] [g-. c-.][c()b]|
%225
r8 g c,4. a8 f'4 ~|
[f8 f] b,4. f'8 as,4 ~|
- [as8 f'] d!4. f8 c4 ~|
+ [as8 f'] d4. f8 c4 ~|
[c8 b] g,4. as8 as'4 ~|
[as8 as] f4. f8 g4|
%230
c,4\p r8 as' g4 r8 es|
-
+ d4 r8 as' g4 r8 d\f|
+ es4 r8 as\p g4 r8 es|
d4\p r8 as' g4 r8 d\f|
-
- es4\p r8 as\p g4 r8 es|
-
- d4\p r8 as' g4 r8 d\f|
-
es4\p r8 as'\p g4 r8 d|
-
%235
c4 r8 f es4 r8 bes|
-
as4 r8 d c4 r8 g|
-
f4 r8 c' b4 r8 f'|
-
es4\f r8 as g4 r8 d|
-
- c4\f r8 f es4 r8 bes|
-
+ c4 r8 f es4 r8 bes|
%240
as4-. des-. r2|
R1*3|
\property Voice.decrescendoSpanner = #'dashed-line
f4\> r d r|
R1|
- \!es!4\p r r2|
+ \!es4\p r r2|
R1|
d,4-#'((font-shape . upright) "pizz.") r r2|
violinoIStaff = \context Staff = violino1 <
\property Staff.midiInstrument = #"violin"
\property Staff.instrument = #"Violino I "
- \property Staff.instr = #"Vl. I "
+ \property Staff.instr = #"Vl. I "
\notes<
\global
\context Voice=violinoi
%35
[f16 f f f][es es es es][des des des des][c c c c]|
b2:16 c:|
- d!: es:|
+ d: es:|
e: f:|
<g: c,:> <as: c,:>|
g4 r r r8 f|
es4 r r r8 d|
- c4 r8 g fis4 r8 c'|
+ c4 r8 g' fis4 r8 c'|
% looks lot like violino-1 110-113
%110
g4 r8 c bes4 r8 f|
- es4 r8 a g4 r8 cis|
+ es4 r8 a g4 r8 cis,|
<[d16 s> <bes g'> <bes g'> <bes g'>] <a4:16 fis':> <a2:16 fis':>|
<bes: g':> <bes: g':>|
<bes: g':> <bes: g':>|
<bes: g':> <bes: g':>|
<bes4\p g'> r r2|
- % copied... urg: *same* as violino-1(119,128)
- % URG: or is this R1*10??
- % should hara-kiri like viola-1/2...
- a'4 r8 es' d4 r8 a|
-
- %120
- bes4 r8 es des4 r8 bes|
- as!4 r8 es' des4 r8 as|
- g4 r r2|
- r4 r8 es' des4 r8 as|
- g4 r r2|
- %125
- r4 r8 c bes4 r8 e,|
-
- as4 r8 des c4 r8 as|
-
- g4 r8 des' c4 r8 g|
- as4 r8 es' des4 r8 as|
- R1*3
+ R1*13
%131
% copied from viola(131,140)
- [as,8 as c es][f es c as]|
+ [as8 as c es][f es c as]|
[a c es f][ges f c a]|
[bes des f ges][as ges des bes]|
[c es g as][bes as es c]|
[des\p f a bes][c, es g as]|
- % urg, copied, but nog ges, f, on violino!
+ % urg, copied, but nog ges, f, on violino.
[bes, des f ges][as, c e f]|r [bes, d es]r[as, c des]|
% [es, ges bes des][as c es as,]|
r[bes bes des][as c es ges]|
f4\f r8 bes as4 r8 es|
des4 r8 ges f4 r8 c|
bes4 r8 e f4 r8 bes,|
- bes4 r8 g'! e4 r8 bes'|
+ bes4 r8 g' e4 r8 bes'|
\property Voice.crescendoText = #"cresc."
\property Voice.crescendoSpanner = #'dashed-line
as4\p r8 des\< c4 r8 g|
f1 ~|
f|
- <d2\sf d'!> [f8-. as-.][as()g]|
+ <d2\sf d'> [f8-. as-.][as()g]|
<d2\sf d'> [f8-. as-.][as()g]|
%160
R1|
%copied violino-1(238,243)
es'4\f r8 as g4 r8 d|
- c4\f r8 f es4 r8 bes|
+ c4 r8 f es4 r8 bes|
%240
as4-. des-. r2|
[g8( d' b d][g d b )g~]|
[g8( e' c e][g e c )g~]|
[g8( f' d f][g f d )g,~]|
- [g8( es'! c es][g es c )g~]|
+ [g8( es' c es][g es c )g~]|
[g8( d' b d][g d b )g~]|
%250
[g8( es' c es][g es c )g~]|
[g8( f' d f][g f d )g,~]|
- [g8( es' c es][g es c )g~]|
+ \property Voice.crescendoText = #"cresc."
+ \property Voice.crescendoSpanner = #'dashed-line
+ [g8(\< es' c es][g es c )g~]|
[g8( d' b d][g d b )g~]|
[g8( es' c es][g es c )g]|
%255
- <c2:16\f es:> <c: es:>|
+ <\!c2:16\f es:> <c: es:>|
[as8\p( f' des f][as f des )as]|
<d2:16\f f:> <d: f:>|
[bes8\p( g' es g][bes g es )bes]|
r4 r8 f as4.\sf()g8|
%270
- g2:16-"sempre" g:\ff|
+ g2:16-"sempre"\ff g:|
g: g:|
g: g:|
g: g:|
% eerste en tweede viool ;-)
\property Staff.midiInstrument = #"violin"
\property Staff.instrument = #"Violino II "
- \property Staff.instr = #"Vl. II "
+ \property Staff.instr = #"Vl. II "
\notes<
\global
\context Voice=violinoii
\version "1.3.120";
violoncello = \notes \relative c {
- c1\ff ~|
+ c1\ff~|
c|
f,4-. r r2|
R1|
- c'1\ff ~|
+ c'1~|
c|
f,4-. r r2|
R1|
- c'1\ff ~|
+ c'1~|
c|
fis,4-. r r2|
R1|
as4. as8 \!g4\f r4|
R1|
% 4 bars same as violino-1...
- [bes,!8\p-. des-.][des()c][c-. f-.]f4-"ten."|
- [bes,!8\p-. des-.][des()c][c-. f-.]f4-"ten."|
- [bes,!8\p-. des-.][des()c][c-. ges'-.][ges()f]|
+ [bes,8\p-. des-.][des()c][c-. f-.]f4-"ten."|
+ [bes,8\p-. des-.][des()c][c-. f-.]f4-"ten."|
+ [bes,8\p-. des-.][des()c][c-. ges'-.][ges()f]|
%25
[f-. bes-.][bes()a][a-. es'-.][es()des]|
%40
fis2\sf [c'8-. es-.][es()d]
fis,2\sf [c'8-. es-.][es()d]
- f,!2\sf [b8-. d-.][d()c]
f,2\sf [b8-. d-.][d()c]
- e,2\sf [bes'!8-. des-.][des()c]
+ f,2\sf [b8-. d-.][d()c]
+ e,2\sf [bes'8-. des-.][des()c]
%45
- es,!2\sf [a!8-. c-.][c()bes]|
- d,4 [a'!8-. c-.][c()bes] es,4\sf(|
- )d4 [a'!8-. c-.][c()bes] es,4\sf(|
- )d4 [a'!8-. c-.][c()bes] es,4\sf(|
- )d4 [a'!8-. c-.][c()bes] es,4\sf(|
+ es,2\sf [a8-. c-.][c()bes]|
+ d,4 [a'8-. c-.][c()bes] es,4\sf|
+ d4 [a'8-. c-.][c()bes] es,4\sf|
+ d4 [a'8-. c-.][c()bes] es,4\sf|
+ d4 [a'8-. c-.][c()bes] es,4\sf|
%50
- )d4 r r2|
+ d4 r r2|
R1|
[bes'8\p(g'es g][bes g es)bes~]|
[bes(f'd f][bes f d)bes~]|
[c(as'f as][c as f)c~]|
[c(bes'g bes][c bes g)c,~]|
[c(as'f as][c as f)c~]|
- [c(g'e g][c g e)bes]|
+ [c(g'e g][bes g e)bes]|
%70
as2\ff g|
\property Voice.crescendoSpanner = #'dashed-line
[g8\p\<(bes' g bes][d bes g)d~]|
[d8(a' fis a][d a fis)d]|
- [\!f!8\sf\>(as f as][f g d)g]|
+ [\!f8\sf\>(as f as][f g d)g]|
%75
\!c,4\p r d r|
a(g a)g|
c2.()bes4|
a(g a)g|
- f!2.()es4|
+ f2.()es4|
d(c d)c|
%90
% [g,16 g bes bes][d d es es][f, f a a][cis cis d d]|
% see if this:8 neat trick works...
[g,:8 bes d es][f, a cis d]|
- [es,8: g: b: c!:][d,: f: a: bes:]|
+ [es,8: g: b: c:][d,: f: a: bes:]|
[c,: es: g: a:][cis,: e: g: bes:]|
[d,: g: bes: d:][d,: fis: a: d:]|
g,,2 ~ g4. g8|
%131
[g bes d es][f es bes g]|
% shared with viola until here
- as1 (|
+ as1|
a|
bes|
- )c|
+ c|
\!des2\p( c|
bes as|
ges f|
%160
R1*3|
- bes,!2\ff [e8-. g-.][g()f]|
+ bes,2\ff [e8-. g-.][g()f]|
bes,2\sf [e8-. g-.][g()f]|
%165
[g(e' c d][g e c )g~]|
[g(f' d f][g f d )g,~]|
[g(e' c d][g e c )g~]|
- [g(d' b d][g d b )g(]|
+ [g(d' b d][g d b )g]|
%190
- \!)e2\ff d'|
+ \!e2\ff d'|
cis a ~|
- [a8( f' d f][a f d )a!~]|
- [a( e' cis e][a e c )a!~]|
- [a8( f' d f][a f d )a!~]|
- [a( g' e g][a g e )a,!~]|
+ [a8( f' d f][a f d )a~]|
+ [a( e' cis e][a e cis )a~]|
+ [a8( f' d f][a f d )a~]|
+ [a( g' e g][a g e )a,~]|
%195
\property Voice.crescendoText = #"cresc."
\property Voice.crescendoSpanner = #'dashed-line
- [a8\<( f' d f][a f d )a!~]|
- [a( e' cis e][a e c )g]|
-%% \!f2\ff e|
-%% dis b'~|
- \!f2\ff e'|
- dis b~|
- [b8\p( g' e g][b g e )b!~]|
+ [a8\<( f' d f][a f d )a~]|
+ [a( e' cis e][a e cis )g]|
+ \!f2\ff e|
+ dis b'~|
+ [b8\p( g' e g][b g e )b~]|
%200
- [b8\<( fis' dis fis ][b fis dis )b!~]|
+ [b8\<( fis' dis fis ][b fis dis )b~]|
[b8( g' e g][e g e )g]|
[f(g f g][f g f)g]|
- \!es!4\fp r e r|
+ \!es4\fp r e r|
f r g r|
%205
%235
[c es g\p as][bes, d fis g]|
- [as, c e f!][g, bes d es]|
+ [as, c e f][g, bes d es]|
[f, as c d][es g b c]|
[d, f as c][g, b d g]|
- [c,\f e g as][bes, d fis g]|
+ [c,\f es g as][bes, d fis g]|
%240
- [as, c e f!][g, bes d es]|
+ [as, c e f][g, bes d es]|
f4 r r2|
R1*3|
c4\p r r r8 c(|
\!ges\f|
f\p|
as\f|
- g!\p|
+ g\p|
bes\f|
%260
b,4. b'8 b2\sf|
%270
- [c,8-"sempre"\ff b c d][es\ff d es c]|
+ [c,8-"sempre"\ff b c d][es d es c]|
[b c d c][b c b g]|
[c8 b c d][es d es c]|
[b c d c][b c b g]|
[c b c g][c b c g]|
c1 ~|
c|
- f4-. r r2|
+ f,4-. r r2|
R1|
%280
- c1 ~|
+ c'1 ~|
c|
- f4-. r r2|
+ f,4-. r r2|
R1|
- c1 ~|
+ c'1 ~|
%285
c|
% urg, "" is assumed to be hairpin...
%\property Voice.decrescendoSpanner = #""
\property Voice.decrescendoSpanner = #'dashed-line
- \times 2/3 { c,4\> ( es c ~ } \times 2/3 { c as' )g }|
+ \times 2/3 { c,4\> ( es d ~ } \times 2/3 { d as' )g }|
%300
r2 r4 c,(|
\\texttt{http://www.mutopiaproject.org/}\\\\It has been typeset
and placed in the public domain by " + \maintainer +
".\\\\Unrestricted modification and redistribution is permitted
- and encouraged---copy this music and share it!}";
+ and encouraged---copy this music and share it.}";
tagline = \mutopiapublicdomain;
footer = "pre-Mutopia-200y/mm/dd-nr";
}
mutopia-examples=scsii-cello scsii-viola
mutopia-letter=$(mutopia-examples:%=out-letter/%.ps.gz)
-mutopia:
- $(MAKE) examples="$(mutopia-examples)" PAPERSIZE=letter local-WWW $(mutopia-letter)
-
\\texttt{http://www.mutopiaproject.org/}\\\\It has been typeset
and placed in the public domain by " + \maintainer +
".\\\\Unrestricted modification and redistribution is permitted
- and encouraged---copy this music and share it!}";
+ and encouraged---copy this music and share it.}";
tagline = \mutopiapublicdomain;
footer = "Mutopia-2001/01/31-2";
}
(use-modules
(ice-9 debug)
- ;; urg, these two only to guess if a '/' is needed to separate
- ;; user-chord-name and additions/subtractions
(ice-9 format)
(ice-9 regex)
+ (ice-9 string-fun)
)
;;
(dash-length . 4.0)
(self-alignment-Y . 0)
(Y-offset-callbacks . (,Side_position_interface::aligned_on_self))
- (meta . ,(grob-description "Hairpin" hairpin-interface))
+ (meta . ,(grob-description "Hairpin" hairpin-interface dynamic-interface))
))
(DotColumn . (
(font-family . dynamic)
(font-shape . italic)
(self-alignment-Y . 0)
- (meta . ,(grob-description "DynamicText" font-interface text-interface ))
+ (meta . ,(grob-description "DynamicText" font-interface text-interface dynamic-interface))
))
(DynamicLineSpanner . (
s))
(define (lily-def key val)
- (string-append
- "\\def\\"
- (if use-regex
- ;; fixed in 1.3.4 for powerpc -- broken on Windows
- (regexp-substitute/global #f "_"
- (output-tex-string key) 'pre "X" 'post)
- (output-tex-string key))
- "{" (output-tex-string val) "}\n"))
-
+ (let ((tex-key
+ (if use-regex
+ ;; fixed in 1.3.4 for powerpc -- broken on Windows
+ (regexp-substitute/global
+ #f "_" (output-tex-string key) 'pre "X" 'post)
+ (output-tex-string key)))
+ (tex-val (output-tex-string val)))
+ (if (equal? (sans-surrounding-whitespace tex-val) "")
+ (string-append "\\let\\" tex-key "\\undefined\n")
+ (string-append "\\def\\" tex-key "{" tex-val "}\n"))))
+
(define (number->dim x)
(string-append
;;ugh ly-* in backend needs compatibility func for standalone output
import operator
import tempfile
+sys.path.append ('@datadir@/python')
import gettext
gettext.bindtextdomain ('lilypond', '@localedir@')
gettext.textdomain('lilypond')
return tfiles
def one_latex_definition (defn, first):
- s = ''
+ s = '\n'
for (k,v) in defn[1].items ():
- s = r'''\def\the%s{%s}''' % (k,open (v).read ())
+ val = open (v).read ()
+ if (string.strip (val)):
+ s = s + r'''\def\lilypond%s{%s}''' % (k, val)
+ else:
+ s = s + r'''\let\lilypond%s\relax''' % k
+ s = s + '\n'
if first:
s = s + '\\def\\mustmakelilypondtitle{}\n'
% TeXbook ex 7.7
\def\ifundefined#1{\expandafter\ifx\csname#1\endcsname\relax}
%
+% If we must make titles, do so, before we're Skipped.
+\ifx\mustmakelilypondtitle\undefined\else\makelilypondtitle\fi
+\ifx\mustmakelilypondpiecetitle\undefined\else\makelilypondpiecetitle\fi
+%
% skip if included already
\def\SkipLilydefs{\endinput}
\ifundefined{EndLilyPondOutput}
nolilyfooter\texsuffix\endcsname
\fi
-% If we must make titles, do so
-\ifx\mustmakelilypondtitle\undefined\else\makelilypondtitle\fi
-\ifx\mustmakelilypondpiecetitle\undefined\else\makelilypondpiecetitle\fi
-
% fix chord.cc::banter_str before removing these
\input fetdefs
-%
-% LilyPond titling for LaTeX
-%
+%%
+%% LilyPond titling for LaTeX
+%%
+%% Note
+%%
+%% Defining a value, but leaving it empty:
+%% \def\lilypondfoo{}
+%% makes LaTeX break on the \\ in:
+%% \ifx\lilypondfoo\undefined\else{\lilypondfoo\\}\fi
+%%
\def\makelilypondtitle
{
\begin{center}
\bfseries
- \ifx\lilypondtitle\undefined\else{\huge\lilypondtitle}\\ \fi
- \ifx\lilypondsubtitle\undefined\else{\Large\lilypondsubtitle}\\ \fi
- \ifx\lilypondsubsubtitle\undefined\else{\large\lilypondsubsubtitle}\\ \fi
+ \ifx\lilypondtitle\undefined\else{\huge\lilypondtitle\\}\fi
+ \ifx\lilypondsubtitle\undefined\else{\Large\lilypondsubtitle\\}\fi
+ \ifx\lilypondsubsubtitle\undefined\else{\large\lilypondsubsubtitle\\}\fi
\end{center}
\bigskip
% urg
\edef\saveparskip{\parskip}\parskip-5mm
\begin{minipage}[t]{0.45\textwidth}
- \ifx\lilypondpoet\undefined\else{\lilypondpoet}\\ \fi
- \ifx\lilypondmeter\undefined\else{\lilypondmeter}\\ \fi
+ \ifx\lilypondpoet\undefined\else{\lilypondpoet\\}\fi
+ \ifx\lilypondmeter\undefined\else{\lilypondmeter\\}\fi
\end{minipage}\hspace*{\fill}
\begin{minipage}[t]{0.45\textwidth}
\begin{flushright}
- \ifx\lilypondcomposer\undefined\else{\large\normalfont\scshape\lilypondcomposer}\\ \fi
- \ifx\lilypondopus\undefined\else{\lilypondopus}\\ \fi
- \ifx\lilypondarranger\undefined\else{\lilypondarranger}\\ \fi
+ \ifx\lilypondcomposer\undefined\else{\large\normalfont\scshape\lilypondcomposer\\}\fi
+ \ifx\lilypondopus\undefined\else{\lilypondopus\\}\fi
+ \ifx\lilypondarranger\undefined\else{\lilypondarranger\\}\fi
\end{flushright}%
\end{minipage}\par
\parskip\saveparskip
% \leavevmode
\global\let\lilypondopus\relax%
\global\let\lilypondpiece\relax%
+ \global\let\mustmakelilypondtitle\undefined%
}
%
\def\makelilypondpiecetitle
\nopagebreak%
\global\let\lilypondopus\relax%
\global\let\lilypondpiece\relax%
+ \global\let\mustmakelilypondpiecetitle\undefined%
}
\endinput