From 9f34e35c3cb97d2a1f0c7838590a574095fbee2e Mon Sep 17 00:00:00 2001 From: Jan Nieuwenhuizen Date: Sat, 10 Mar 2001 15:53:39 +0100 Subject: [PATCH] patch::: 1.3.136.jcn1 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. --- CHANGES | 32 ++ VERSION | 2 +- buildscripts/GNUmakefile | 6 +- buildscripts/gettext.py | 329 ------------------ buildscripts/gettext.py.in | 329 ++++++++++++++++++ input/bugs/mmrest-collide.ly | 15 + input/bugs/pc-rest-collide.ly | 24 ++ input/bugs/tie-break-accidental.ly | 2 + input/test/coriolan-margin.ly | 3 +- lily/a2-engraver.cc | 13 +- lily/dynamic-engraver.cc | 1 + lily/local-key-item.cc | 8 +- lily/my-lily-parser.cc | 2 + lily/paper-score.cc | 2 +- lily/score.cc | 2 +- lily/script.cc | 8 +- lily/side-position-interface.cc | 6 + lily/thread-devnull-engraver.cc | 4 +- lily/voice-devnull-engraver.cc | 13 +- mutopia/Coriolan/bassi.ly | 4 +- mutopia/Coriolan/clarinetti.ly | 3 +- mutopia/Coriolan/clarinetto-1.ly | 6 +- mutopia/Coriolan/clarinetto-2.ly | 15 +- mutopia/Coriolan/contrabasso.ly | 68 ++-- mutopia/Coriolan/coriolan-paper.ly | 8 + mutopia/Coriolan/coriolan-part-paper.ly | 7 + mutopia/Coriolan/corni.ly | 3 +- mutopia/Coriolan/corno-1.ly | 6 +- mutopia/Coriolan/corno-2.ly | 2 +- mutopia/Coriolan/fagotti.ly | 2 +- mutopia/Coriolan/fagotto-1.ly | 24 +- mutopia/Coriolan/fagotto-2.ly | 25 +- mutopia/Coriolan/flauti.ly | 2 +- mutopia/Coriolan/flauto-1.ly | 12 +- mutopia/Coriolan/flauto-2.ly | 4 +- mutopia/Coriolan/header.ly | 150 ++++++-- mutopia/Coriolan/oboe-1.ly | 14 +- mutopia/Coriolan/oboe-2.ly | 12 +- mutopia/Coriolan/oboi.ly | 2 +- mutopia/Coriolan/timpani.ly | 4 +- mutopia/Coriolan/trombe.ly | 2 +- mutopia/Coriolan/viola-1.ly | 18 +- mutopia/Coriolan/viola-2.ly | 24 +- mutopia/Coriolan/violino-1.ly | 56 ++- mutopia/Coriolan/violino-2.ly | 48 +-- mutopia/Coriolan/violoncello.ly | 90 +++-- mutopia/J.S.Bach/Petites-Preludes/header.ly | 2 +- .../J.S.Bach/Solo-Cello-Suites/GNUmakefile | 3 - mutopia/J.S.Bach/Solo-Cello-Suites/header.ly | 2 +- scm/chord-name.scm | 3 +- scm/grob-description.scm | 4 +- scm/tex.scm | 20 +- scripts/ly2dvi.py | 10 +- tex/lilyponddefs.tex | 8 +- tex/titledefs.tex | 31 +- 55 files changed, 833 insertions(+), 662 deletions(-) create mode 100644 buildscripts/gettext.py.in create mode 100644 input/bugs/mmrest-collide.ly create mode 100644 input/bugs/pc-rest-collide.ly diff --git a/CHANGES b/CHANGES index 8b72892a42..a48bc18d5b 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,35 @@ +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 ======= diff --git a/VERSION b/VERSION index 967c6ccf87..a31bf24784 100644 --- a/VERSION +++ b/VERSION @@ -2,7 +2,7 @@ PACKAGE_NAME=LilyPond 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. diff --git a/buildscripts/GNUmakefile b/buildscripts/GNUmakefile index 3a24a75973..875833e447 100755 --- a/buildscripts/GNUmakefile +++ b/buildscripts/GNUmakefile @@ -1,10 +1,14 @@ # 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 diff --git a/buildscripts/gettext.py b/buildscripts/gettext.py index e34cc77a2e..e69de29bb2 100644 --- a/buildscripts/gettext.py +++ b/buildscripts/gettext.py @@ -1,329 +0,0 @@ -"""This module allows python programs to use GNU gettext message catalogs. - -Author: James Henstridge -(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() - diff --git a/buildscripts/gettext.py.in b/buildscripts/gettext.py.in new file mode 100644 index 0000000000..e34cc77a2e --- /dev/null +++ b/buildscripts/gettext.py.in @@ -0,0 +1,329 @@ +"""This module allows python programs to use GNU gettext message catalogs. + +Author: James Henstridge +(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() + diff --git a/input/bugs/mmrest-collide.ly b/input/bugs/mmrest-collide.ly new file mode 100644 index 0000000000..74578070ec --- /dev/null +++ b/input/bugs/mmrest-collide.ly @@ -0,0 +1,15 @@ +% +% 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 diff --git a/input/bugs/pc-rest-collide.ly b/input/bugs/pc-rest-collide.ly new file mode 100644 index 0000000000..1818d1ac51 --- /dev/null +++ b/input/bugs/pc-rest-collide.ly @@ -0,0 +1,24 @@ +% +% 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 diff --git a/input/bugs/tie-break-accidental.ly b/input/bugs/tie-break-accidental.ly index 88a35de6d4..94b7e3d3b6 100644 --- a/input/bugs/tie-break-accidental.ly +++ b/input/bugs/tie-break-accidental.ly @@ -8,6 +8,8 @@ should get an accidental, but others should not"; \notes { bes1 ~ | \break bes2 ~ bes4 ~ bes4 ~ | bes1 + \key f\major; + bes1 ~|bes2 b ~|b ~ b ~|b1 } \paper { linewidth = 40*\staffspace; diff --git a/input/test/coriolan-margin.ly b/input/test/coriolan-margin.ly index f16b1dce13..ce54cc16fd 100644 --- a/input/test/coriolan-margin.ly +++ b/input/test/coriolan-margin.ly @@ -30,7 +30,8 @@ oboi = \notes \relative c' { } 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 diff --git a/lily/a2-engraver.cc b/lily/a2-engraver.cc index b6958618bc..55d6c45d95 100644 --- a/lily/a2-engraver.cc +++ b/lily/a2-engraver.cc @@ -137,15 +137,18 @@ A2_engraver::acknowledge_grob (Grob_info i) || 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) )) { /* diff --git a/lily/dynamic-engraver.cc b/lily/dynamic-engraver.cc index ae16fb9aaf..24a3cef14a 100644 --- a/lily/dynamic-engraver.cc +++ b/lily/dynamic-engraver.cc @@ -253,6 +253,7 @@ Dynamic_engraver::process_music () 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 diff --git a/lily/local-key-item.cc b/lily/local-key-item.cc index 03434be4a2..422d82b990 100644 --- a/lily/local-key-item.cc +++ b/lily/local-key-item.cc @@ -36,7 +36,7 @@ ADD_SCM_INIT_FUNC(lkpitch,init_pitch_funcs); 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 (); @@ -45,11 +45,11 @@ Local_key_item::add_pitch (Grob*me, Pitch p, bool cautionary, bool natural, 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); diff --git a/lily/my-lily-parser.cc b/lily/my-lily-parser.cc index 846d4bd2af..821f49f4b2 100644 --- a/lily/my-lily-parser.cc +++ b/lily/my-lily-parser.cc @@ -50,6 +50,8 @@ My_lily_parser::parse_file (String init, String s) 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")); diff --git a/lily/paper-score.cc b/lily/paper-score.cc index 734b56d005..82f275a098 100644 --- a/lily/paper-score.cc +++ b/lily/paper-score.cc @@ -97,6 +97,7 @@ Paper_score::process () outputter_l_->output_header (); outputter_l_->output_version (); + progress_indication ("\n"); if (global_header_p) { @@ -126,7 +127,6 @@ Paper_score::process () progress_indication ("\n"); - // huh? delete outputter_l_; outputter_l_ = 0; diff --git a/lily/score.cc b/lily/score.cc index f80ef7b2ea..f864b58433 100644 --- a/lily/score.cc +++ b/lily/score.cc @@ -75,7 +75,7 @@ Score::run_translator (Music_output_def *odef_l) 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 (); diff --git a/lily/script.cc b/lily/script.cc index b19724f6b1..78fbff9db1 100644 --- a/lily/script.cc +++ b/lily/script.cc @@ -57,12 +57,18 @@ Script::brew_molecule (SCM smob) { 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(); } diff --git a/lily/side-position-interface.cc b/lily/side-position-interface.cc index 701e415fee..273ad4a88a 100644 --- a/lily/side-position-interface.cc +++ b/lily/side-position-interface.cc @@ -224,12 +224,18 @@ Side_position_interface::aligned_side (SCM element_smob, SCM axis) 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"); diff --git a/lily/thread-devnull-engraver.cc b/lily/thread-devnull-engraver.cc index 3ab759ed81..58aa56cb3d 100644 --- a/lily/thread-devnull-engraver.cc +++ b/lily/thread-devnull-engraver.cc @@ -28,11 +28,11 @@ Thread_devnull_engraver::acknowledge_grob (Grob_info i) 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")) diff --git a/lily/voice-devnull-engraver.cc b/lily/voice-devnull-engraver.cc index 6ad506a925..4f82c4f4e8 100644 --- a/lily/voice-devnull-engraver.cc +++ b/lily/voice-devnull-engraver.cc @@ -64,15 +64,18 @@ Voice_devnull_engraver::try_music (Music *m) } 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 }; @@ -82,12 +85,12 @@ Voice_devnull_engraver::acknowledge_grob (Grob_info i) 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"))))) diff --git a/mutopia/Coriolan/bassi.ly b/mutopia/Coriolan/bassi.ly index 9dbd9eda37..9053f3cdf4 100644 --- a/mutopia/Coriolan/bassi.ly +++ b/mutopia/Coriolan/bassi.ly @@ -38,7 +38,7 @@ bassiGroup = \context PianoStaff = bassi_group \notes < 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 @@ -46,7 +46,7 @@ bassiGroup = \context PianoStaff = bassi_group \notes < > \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"; diff --git a/mutopia/Coriolan/clarinetti.ly b/mutopia/Coriolan/clarinetti.ly index d1a656133d..f0b2be8559 100644 --- a/mutopia/Coriolan/clarinetti.ly +++ b/mutopia/Coriolan/clarinetti.ly @@ -7,8 +7,7 @@ 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 diff --git a/mutopia/Coriolan/clarinetto-1.ly b/mutopia/Coriolan/clarinetto-1.ly index 907ee9bb5d..6f7317ecca 100644 --- a/mutopia/Coriolan/clarinetto-1.ly +++ b/mutopia/Coriolan/clarinetto-1.ly @@ -163,14 +163,14 @@ clarinettoI = \notes \relative c { 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| diff --git a/mutopia/Coriolan/clarinetto-2.ly b/mutopia/Coriolan/clarinetto-2.ly index 795abe0ce9..204ef819aa 100644 --- a/mutopia/Coriolan/clarinetto-2.ly +++ b/mutopia/Coriolan/clarinetto-2.ly @@ -25,15 +25,12 @@ clarinettoII = \notes \relative c { 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~| diff --git a/mutopia/Coriolan/contrabasso.ly b/mutopia/Coriolan/contrabasso.ly index b2b60555d3..e8669deb56 100644 --- a/mutopia/Coriolan/contrabasso.ly +++ b/mutopia/Coriolan/contrabasso.ly @@ -3,15 +3,15 @@ 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| @@ -57,17 +57,17 @@ contrabasso = \notes \relative c { %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(| @@ -122,7 +122,7 @@ contrabasso = \notes \relative c { a(g a)g| c2.()bes4| a(g a)g| - f!2.()es4| + f2.()es4| d(c d)c| %90 f2.()es4| @@ -150,7 +150,7 @@ contrabasso = \notes \relative c { % 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| @@ -160,7 +160,7 @@ contrabasso = \notes \relative c { 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 @@ -230,18 +230,16 @@ contrabasso = \notes \relative c { %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| @@ -291,10 +289,10 @@ contrabasso = \notes \relative c { 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(| @@ -319,7 +317,7 @@ contrabasso = \notes \relative c { \!ges\f| f\p| as\f| - g!\p| + g\p| bes\f| %260 @@ -339,7 +337,7 @@ contrabasso = \notes \relative c { 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]| @@ -349,15 +347,15 @@ contrabasso = \notes \relative c { [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| @@ -378,24 +376,24 @@ contrabasso = \notes \relative 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| diff --git a/mutopia/Coriolan/coriolan-paper.ly b/mutopia/Coriolan/coriolan-paper.ly index b281667604..56d271a8f2 100644 --- a/mutopia/Coriolan/coriolan-paper.ly +++ b/mutopia/Coriolan/coriolan-paper.ly @@ -9,6 +9,7 @@ % Mandatory Mutopia settings: textheight = 270.0\mm; linewidth = 180.0\mm; + indent = 30.\mm; \translator { \ThreadContext @@ -32,9 +33,16 @@ %% 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 } diff --git a/mutopia/Coriolan/coriolan-part-paper.ly b/mutopia/Coriolan/coriolan-part-paper.ly index e5ff529fe0..6eca4d7b2e 100644 --- a/mutopia/Coriolan/coriolan-part-paper.ly +++ b/mutopia/Coriolan/coriolan-part-paper.ly @@ -32,11 +32,18 @@ %% 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"; } diff --git a/mutopia/Coriolan/corni.ly b/mutopia/Coriolan/corni.ly index b4fe792cc6..d04a79cd33 100644 --- a/mutopia/Coriolan/corni.ly +++ b/mutopia/Coriolan/corni.ly @@ -7,8 +7,7 @@ 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 diff --git a/mutopia/Coriolan/corno-1.ly b/mutopia/Coriolan/corno-1.ly index 4ca1482ccf..814517d871 100644 --- a/mutopia/Coriolan/corno-1.ly +++ b/mutopia/Coriolan/corno-1.ly @@ -122,11 +122,13 @@ cornoI = \notes \relative c { 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| diff --git a/mutopia/Coriolan/corno-2.ly b/mutopia/Coriolan/corno-2.ly index f718a3ebab..53e5f5f58b 100644 --- a/mutopia/Coriolan/corno-2.ly +++ b/mutopia/Coriolan/corno-2.ly @@ -94,7 +94,7 @@ cornoII = \notes \relative c { 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| diff --git a/mutopia/Coriolan/fagotti.ly b/mutopia/Coriolan/fagotti.ly index a5226850a4..f8f6e2c467 100644 --- a/mutopia/Coriolan/fagotti.ly +++ b/mutopia/Coriolan/fagotti.ly @@ -6,7 +6,7 @@ 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" diff --git a/mutopia/Coriolan/fagotto-1.ly b/mutopia/Coriolan/fagotto-1.ly index 61d3bbf3ba..578da4ab71 100644 --- a/mutopia/Coriolan/fagotto-1.ly +++ b/mutopia/Coriolan/fagotto-1.ly @@ -37,11 +37,11 @@ fagottoI = \notes \relative c { 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"; @@ -108,7 +108,7 @@ fagottoI = \notes \relative c { %% 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| @@ -189,13 +189,15 @@ fagottoI = \notes \relative c { g~| g~| g| - e''2.(f4| + \property Voice.crescendoText = #"cresc." + \property Voice.crescendoSpanner = #'dashed-line + e''2.(\ 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] @@ -35,8 +131,8 @@ [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 @@ -52,20 +148,26 @@ 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 @@ -74,18 +176,6 @@ %} - 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"; @@ -96,7 +186,7 @@ \\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"; } diff --git a/mutopia/Coriolan/oboe-1.ly b/mutopia/Coriolan/oboe-1.ly index 5da1133ee6..72cf4b454f 100644 --- a/mutopia/Coriolan/oboe-1.ly +++ b/mutopia/Coriolan/oboe-1.ly @@ -41,11 +41,11 @@ oboeI = \notes \relative c'' { 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 @@ -168,8 +168,8 @@ oboeI = \notes \relative c'' { f2.\<( g4| f e cis)a| \!a'2\ff c| - b1\p~| - b~| + b1~| + b\p~| b~| b~| b| diff --git a/mutopia/Coriolan/oboe-2.ly b/mutopia/Coriolan/oboe-2.ly index ac8e9c3bb0..ee98acea4a 100644 --- a/mutopia/Coriolan/oboe-2.ly +++ b/mutopia/Coriolan/oboe-2.ly @@ -65,15 +65,9 @@ oboeII = \notes \relative c{ 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| @@ -183,6 +177,6 @@ oboeII = \notes \relative c{ R1| b4 r r2| R1| - c4 r r2\pp| + c4\pp r r2| R1*18| } diff --git a/mutopia/Coriolan/oboi.ly b/mutopia/Coriolan/oboi.ly index 2db8749438..ffbb68bd86 100644 --- a/mutopia/Coriolan/oboi.ly +++ b/mutopia/Coriolan/oboi.ly @@ -6,7 +6,7 @@ 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 diff --git a/mutopia/Coriolan/timpani.ly b/mutopia/Coriolan/timpani.ly index 1e91be78b4..e49ee5d5f9 100644 --- a/mutopia/Coriolan/timpani.ly +++ b/mutopia/Coriolan/timpani.ly @@ -59,6 +59,7 @@ timpani = \notes \relative c { 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| @@ -137,8 +138,7 @@ timpani = \notes \relative c { 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 diff --git a/mutopia/Coriolan/trombe.ly b/mutopia/Coriolan/trombe.ly index 775dd7fe3f..cf414bb131 100644 --- a/mutopia/Coriolan/trombe.ly +++ b/mutopia/Coriolan/trombe.ly @@ -8,7 +8,7 @@ trombeStaff = \context Staff = trombe < \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; } diff --git a/mutopia/Coriolan/viola-1.ly b/mutopia/Coriolan/viola-1.ly index 779e50be68..641196037c 100644 --- a/mutopia/Coriolan/viola-1.ly +++ b/mutopia/Coriolan/viola-1.ly @@ -116,14 +116,14 @@ violaI = \notes \relative c { [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:| @@ -155,7 +155,7 @@ violaI = \notes \relative 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: @@ -282,7 +282,7 @@ violaI = \notes \relative c { )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(| @@ -316,7 +316,7 @@ violaI = \notes \relative c { bes,: c: bes: c:| e2:16\ff e4: f:| - b,: c: b: c:| + bes,: c: bes: c:| %220 r4 r8 as as2\sf| @@ -331,8 +331,8 @@ violaI = \notes \relative c { [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| @@ -402,7 +402,7 @@ violaI = \notes \relative c { R1| c,4 r r2| R1*15| - c4\pp r r2| + c4-#'((font-shape . upright) "pizz.") r r2| c4 r r2| c4 r r2| } diff --git a/mutopia/Coriolan/viola-2.ly b/mutopia/Coriolan/viola-2.ly index 7ba0e2c046..23508b874f 100644 --- a/mutopia/Coriolan/viola-2.ly +++ b/mutopia/Coriolan/viola-2.ly @@ -117,23 +117,20 @@ violaII = \notes \relative c { [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:| @@ -155,7 +152,7 @@ violaII = \notes \relative 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:]| g,2: g: @@ -282,9 +279,8 @@ violaII = \notes \relative c { )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 @@ -307,17 +303,13 @@ violaII = \notes \relative c { [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| @@ -331,8 +323,8 @@ violaII = \notes \relative c { [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| @@ -370,7 +362,7 @@ violaII = \notes \relative c { 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:| @@ -402,7 +394,7 @@ violaII = \notes \relative c { R1| c,4 r r2| R1*15| - c4\pp r r2| + c4-#'((font-shape . upright) "pizz.") r r2| c4 r r2| c4 r r2| } diff --git a/mutopia/Coriolan/violino-1.ly b/mutopia/Coriolan/violino-1.ly index 97ba5f5bcf..10b5a45043 100644 --- a/mutopia/Coriolan/violino-1.ly +++ b/mutopia/Coriolan/violino-1.ly @@ -26,9 +26,9 @@ violinoI = \notes \relative c { %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." @@ -48,25 +48,25 @@ violinoI = \notes \relative c { %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| @@ -115,8 +115,8 @@ violinoI = \notes \relative c { [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:| @@ -135,8 +135,8 @@ violinoI = \notes \relative c { %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 @@ -173,7 +173,7 @@ violinoI = \notes \relative c { %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| @@ -204,7 +204,7 @@ violinoI = \notes \relative c { 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| @@ -228,7 +228,7 @@ violinoI = \notes \relative c { f,,1 ~| f| - [f,8-. as-.][as()g]| + [f,8-. as-.][as()g]| [f,8-. as-.][as()g]| %160 [f8-.\p as-.][as()g] [g-. c-.][c()b]| @@ -319,31 +319,21 @@ violinoI = \notes \relative c { %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| @@ -408,7 +398,7 @@ violinoI = \notes \relative c { \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| @@ -449,7 +439,7 @@ violinoI = \notes \relative c { 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 diff --git a/mutopia/Coriolan/violino-2.ly b/mutopia/Coriolan/violino-2.ly index e075b63aac..fc9e15a4eb 100644 --- a/mutopia/Coriolan/violino-2.ly +++ b/mutopia/Coriolan/violino-2.ly @@ -46,7 +46,7 @@ violinoII = \notes \relative c { %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:| | @@ -150,7 +150,7 @@ violinoII = \notes \relative 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 @@ -158,7 +158,7 @@ violinoII = \notes \relative c { g4 r8 c bes4 r8 f| - es4 r8 a g4 r8 cis| + es4 r8 a g4 r8 cis,| <[d16 s> ] | | | @@ -166,28 +166,10 @@ violinoII = \notes \relative c { | 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]| @@ -195,7 +177,7 @@ violinoII = \notes \relative c { [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]| @@ -205,7 +187,7 @@ violinoII = \notes \relative c { 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| @@ -230,7 +212,7 @@ violinoII = \notes \relative c { f1 ~| f| - [f8-. as-.][as()g]| + [f8-. as-.][as()g]| [f8-. as-.][as()g]| %160 R1| @@ -353,7 +335,7 @@ violinoII = \notes \relative c { %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| @@ -364,18 +346,20 @@ violinoII = \notes \relative c { [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:> | [as8\p( f' des f][as f des )as]| | [bes8\p( g' es g][bes g es )bes]| @@ -399,7 +383,7 @@ violinoII = \notes \relative c { r4 r8 f as4.\sf()g8| %270 - g2:16-"sempre" g:\ff| + g2:16-"sempre"\ff g:| g: g:| g: g:| g: g:| @@ -445,7 +429,7 @@ violinoIIStaff = \context Staff = violino2 < % 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 diff --git a/mutopia/Coriolan/violoncello.ly b/mutopia/Coriolan/violoncello.ly index b7f970ab68..30db8710a2 100644 --- a/mutopia/Coriolan/violoncello.ly +++ b/mutopia/Coriolan/violoncello.ly @@ -2,15 +2,15 @@ \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| @@ -28,9 +28,9 @@ violoncello = \notes \relative c { 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]| @@ -56,19 +56,19 @@ violoncello = \notes \relative c { %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~]| @@ -93,7 +93,7 @@ violoncello = \notes \relative c { [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| @@ -102,7 +102,7 @@ violoncello = \notes \relative c { \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| @@ -123,7 +123,7 @@ violoncello = \notes \relative c { a(g a)g| c2.()bes4| a(g a)g| - f!2.()es4| + f2.()es4| d(c d)c| %90 @@ -163,7 +163,7 @@ violoncello = \notes \relative c { % [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| @@ -196,10 +196,10 @@ violoncello = \notes \relative c { %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| @@ -249,7 +249,7 @@ violoncello = \notes \relative c { %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 @@ -284,32 +284,30 @@ violoncello = \notes \relative c { [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 @@ -358,13 +356,13 @@ violoncello = \notes \relative c { %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(| @@ -389,7 +387,7 @@ violoncello = \notes \relative c { \!ges\f| f\p| as\f| - g!\p| + g\p| bes\f| %260 @@ -409,7 +407,7 @@ violoncello = \notes \relative c { 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]| @@ -419,15 +417,15 @@ violoncello = \notes \relative c { [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| @@ -454,7 +452,7 @@ violoncello = \notes \relative 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,(| diff --git a/mutopia/J.S.Bach/Petites-Preludes/header.ly b/mutopia/J.S.Bach/Petites-Preludes/header.ly index 21cf4ae115..6a0f0a3518 100644 --- a/mutopia/J.S.Bach/Petites-Preludes/header.ly +++ b/mutopia/J.S.Bach/Petites-Preludes/header.ly @@ -34,7 +34,7 @@ instrument = "Piano" \\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"; } diff --git a/mutopia/J.S.Bach/Solo-Cello-Suites/GNUmakefile b/mutopia/J.S.Bach/Solo-Cello-Suites/GNUmakefile index 7671f8003b..9a412fa114 100644 --- a/mutopia/J.S.Bach/Solo-Cello-Suites/GNUmakefile +++ b/mutopia/J.S.Bach/Solo-Cello-Suites/GNUmakefile @@ -13,6 +13,3 @@ tarball=solo-cello-suite-ii 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) - diff --git a/mutopia/J.S.Bach/Solo-Cello-Suites/header.ly b/mutopia/J.S.Bach/Solo-Cello-Suites/header.ly index fb551846db..537082799a 100644 --- a/mutopia/J.S.Bach/Solo-Cello-Suites/header.ly +++ b/mutopia/J.S.Bach/Solo-Cello-Suites/header.ly @@ -35,7 +35,7 @@ information is taken to the extreme. \\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"; } diff --git a/scm/chord-name.scm b/scm/chord-name.scm index 7597413ded..bcdf7aaa1f 100644 --- a/scm/chord-name.scm +++ b/scm/chord-name.scm @@ -9,10 +9,9 @@ (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) ) ;; diff --git a/scm/grob-description.scm b/scm/grob-description.scm index c1f3258b2c..43c809c865 100644 --- a/scm/grob-description.scm +++ b/scm/grob-description.scm @@ -151,7 +151,7 @@ (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 . ( @@ -175,7 +175,7 @@ (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 . ( diff --git a/scm/tex.scm b/scm/tex.scm index aad55f430c..44cf91f0fa 100644 --- a/scm/tex.scm +++ b/scm/tex.scm @@ -133,15 +133,17 @@ 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 diff --git a/scripts/ly2dvi.py b/scripts/ly2dvi.py index 042cf07ba4..522800c78a 100644 --- a/scripts/ly2dvi.py +++ b/scripts/ly2dvi.py @@ -19,6 +19,7 @@ import __main__ import operator import tempfile +sys.path.append ('@datadir@/python') import gettext gettext.bindtextdomain ('lilypond', '@localedir@') gettext.textdomain('lilypond') @@ -321,9 +322,14 @@ def find_tex_files (files, extra): 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' diff --git a/tex/lilyponddefs.tex b/tex/lilyponddefs.tex index 0536b3c333..bf471d8122 100644 --- a/tex/lilyponddefs.tex +++ b/tex/lilyponddefs.tex @@ -8,6 +8,10 @@ % 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} @@ -73,10 +77,6 @@ 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 diff --git a/tex/titledefs.tex b/tex/titledefs.tex index 7e33f30190..92e3747de4 100644 --- a/tex/titledefs.tex +++ b/tex/titledefs.tex @@ -1,26 +1,33 @@ -% -% 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 @@ -29,6 +36,7 @@ % \leavevmode \global\let\lilypondopus\relax% \global\let\lilypondpiece\relax% + \global\let\mustmakelilypondtitle\undefined% } % \def\makelilypondpiecetitle @@ -39,6 +47,7 @@ \nopagebreak% \global\let\lilypondopus\relax% \global\let\lilypondpiece\relax% + \global\let\mustmakelilypondpiecetitle\undefined% } \endinput -- 2.39.2