summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Build/source/utils/autosp/autosp-src/ChangeLog2
-rw-r--r--Build/source/utils/autosp/autosp-src/README17
-rw-r--r--Build/source/utils/autosp/autosp-src/autosp.117
-rw-r--r--Build/source/utils/autosp/autosp-src/autosp.c49
-rwxr-xr-xBuild/source/utils/autosp/autosp-src/autosp.test13
-rwxr-xr-xBuild/source/utils/autosp/autosp-src/configure20
-rw-r--r--Build/source/utils/autosp/autosp-src/configure.ac2
-rw-r--r--Build/source/utils/autosp/autosp-src/tests/quod2.aspc14
-rw-r--r--Build/source/utils/autosp/autosp-src/tests/quod2.tex16
9 files changed, 102 insertions, 48 deletions
diff --git a/Build/source/utils/autosp/autosp-src/ChangeLog b/Build/source/utils/autosp/autosp-src/ChangeLog
index c55434ae8cf..ac12dc5dec4 100644
--- a/Build/source/utils/autosp/autosp-src/ChangeLog
+++ b/Build/source/utils/autosp/autosp-src/ChangeLog
@@ -1,5 +1,7 @@
AUTOSP
+ \hl distinguished from \hloff
+
2016-11-02
support xtuples in more than one staff (provided x and note durations are
diff --git a/Build/source/utils/autosp/autosp-src/README b/Build/source/utils/autosp/autosp-src/README
index 3a402926940..e8b174dc3b7 100644
--- a/Build/source/utils/autosp/autosp-src/README
+++ b/Build/source/utils/autosp/autosp-src/README
@@ -1,5 +1,5 @@
This is the README for the autosp package,
-version 2016-11-02.
+version 2017-04-06.
autosp is a preprocessor that generates note-spacing
commands for MusiXTeX scores. It simplifies the creation
@@ -37,12 +37,15 @@ are merged into a multi-bar rest. Bar-centered rests can be
coded using the standard \def\atnextbar notation but also
by using the non-standard command \Cpause in a note segment.
-Spacing commands \sk and \hsk (but not \qsk, \hqsk or
-\qqsk) in the source are discarded. A note segment can be
-completely empty, but if a note segment should start with or
-contain a "space," the note-value of that space must be made
-explicit with a command of the form \ha{*}, \qa{.*}, \qa{*},
-\ca{*}, etc.
+Spacing commands \sk and \hsk in the source are discarded,
+but not \qsk, \hqsk or \qqsk; moreover non-standard commands
+\Qsk, \HQsk and \QQsk generate "global" skips; i.e., the
+effect of \qsk, \hqsk or \qqsk in *every* staff.
+
+A note segment can be completely empty, but if a note
+segment should start with or contain a "space," the
+note-value of that space must be made explicit with a
+command of the form \ha{*}, \qa{.*}, \qa{*}, \ca{*}, etc.
All other conventional MusiXTeX commands are output exactly
as given in the input.
diff --git a/Build/source/utils/autosp/autosp-src/autosp.1 b/Build/source/utils/autosp/autosp-src/autosp.1
index aeaf6a59cf4..dd66df84458 100644
--- a/Build/source/utils/autosp/autosp-src/autosp.1
+++ b/Build/source/utils/autosp/autosp-src/autosp.1
@@ -1,5 +1,5 @@
.\" This manpage is licensed under the GNU Public License
-.TH AUTOSP 1 2016-10-31 "" ""
+.TH AUTOSP 1 2017-04-06 "" ""
.SH NAME
autosp \- preprocessor to generate note-spacing commands for MusiXTeX scores
@@ -126,9 +126,14 @@ coded using the standard \\def\\atnextbar notation but also
the non-standard command \\Cpause in a note segment generates a
bar-centered rest.
-Spacing commands \\sk and \\hsk
-(but not \\qsk, \\hqsk or \\qqsk)
-in the source are discarded.
+Spacing commands \\sk and \\hsk in the source are discarded,
+but not \\qsk, \\hqsk or \\qqsk;
+moreover
+non-standard commands
+\\Qsk, \\HQsk and \\QQsk generate "global" skips; i.e., the effect of \\qsk, \\hqsk or \\qqsk in
+.I every
+staff.
+
A note segment can be completely empty, but if a note segment should start
with or contain a "space," the note-value
of that space must be made explicit with a command of the
@@ -209,7 +214,9 @@ of
64ths.
.B autosp
cannot deal with simultaneous x-tuplets in multiple staffs unless the x values and
-note durations are identical.
+note durations are identical. Global skips (\\QQsk, \\HQsk and \\Qsk) are
+ineffective if a staff has an x-tuplet; however, "local" skips (\\qqsk, \\hqsk, \\qsk)
+are effective.
User-defined macros are not processed or expanded.
diff --git a/Build/source/utils/autosp/autosp-src/autosp.c b/Build/source/utils/autosp/autosp-src/autosp.c
index 87b2c6790fa..e6f9558a8cc 100644
--- a/Build/source/utils/autosp/autosp-src/autosp.c
+++ b/Build/source/utils/autosp/autosp-src/autosp.c
@@ -1,6 +1,6 @@
-char version[12] = "2016-11-02";
+char version[12] = "2017-04-06";
-/* Copyright (C) 2014-16 R. D. Tennent School of Computing,
+/* Copyright (C) 2014-17 R. D. Tennent School of Computing,
* Queen's University, rdt@cs.queensu.ca
*
* This program is free software; you can redistribute it
@@ -119,6 +119,7 @@ PRIVATE char *outfilename_n = outfilename;
PRIVATE char logfilename[SHORT_LEN];
PRIVATE char *logfilename_n = logfilename;
+
PRIVATE FILE *infile, *outfile, *logfile;
PRIVATE char line[LINE_LEN]; /* line of input */
@@ -175,6 +176,11 @@ PRIVATE char outstrings[MAX_STAFFS][LINE_LEN];
/* accumulate commands to be output */
PRIVATE char *n_outstrings[MAX_STAFFS];
+PRIVATE int global_skip;
+ /* = 1, 2 or 4, for (non-standard) commands \QQsk \HQsk \Qsk */
+PRIVATE char global_skip_str[8];
+PRIVATE char *n_global_skip_str = global_skip_str;
+
PRIVATE void
usage (FILE *f)
{
@@ -337,6 +343,7 @@ void analyze_notes (char **ln)
for (i=1; i <= nstaffs; i++)
xtuplet[i] = 1;
appoggiatura = false;
+ global_skip = 0;
if (debug)
{ fprintf (logfile, "\nAfter analyze_notes:\n");
status_all ();
@@ -363,14 +370,17 @@ void checkn (char *s)
PRIVATE
void output_filtered (int i)
-{ /* discard \sk \hsk and \Cpause */
+{ /* discard \sk \hsk \Qsk \HQsk \QQsk and \Cpause */
char *s = notes[i];
while (s < current[i])
{ char *t = strpbrk (s+1, "\\&|$");
if (t == NULL || t > current[i]) t = current[i];
if (!prefix ("\\sk", s)
&& !prefix ("\\hsk", s)
- && !prefix ("\\Cpause", s) )
+ && !prefix ("\\Cpause", s)
+ && !prefix ("\\Qsk", s)
+ && !prefix ("\\HQsk", s)
+ && !prefix ("\\QQsk", s) )
{
while (s < t)
{ *n_outstrings[i] = *s;
@@ -632,7 +642,8 @@ int spacing_note (int i)
{ spacing = SP(1); break; }
if ( prefix ("\\ha", s)
- || prefix ("\\hl", s)
+ || (prefix ("\\hl", s) && !prefix ( "\\hloff", s) )
+
|| prefix ("\\hu", s)
|| prefix ("\\hp", s)
|| prefix ("\\hpause", s) )
@@ -850,6 +861,13 @@ int spacing_note (int i)
else
s = skip_arg(t);
}
+ else if (prefix ("\\Qsk", s) )
+ /* may have global skips in more than one staff */
+ { if (global_skip < 4) global_skip = 4; }
+ else if (prefix ("\\HQsk", s) )
+ { if (global_skip < 2) global_skip = 2; }
+ else if (prefix ("\\QQsk", s) )
+ { if (global_skip < 1) global_skip = 1; }
/* Command is non-spacing. */
/* Skip ahead to the next command. */
@@ -1393,6 +1411,7 @@ void generate_notes ()
while (true)
{ old_spacing = spacing;
spacing = MAX_SPACING;
+ global_skip = 0;
nonvirtual_notes = false;
if (debug)
{ fprintf (logfile, "\nIn generate_notes:\n");
@@ -1433,8 +1452,24 @@ void generate_notes ()
output_rests ();
initialize_notes ();
}
+
+ /* generate global_skip_str: */
+ global_skip_str[0] = '\0';
+ n_global_skip_str = global_skip_str;
+ switch (global_skip)
+ {
+ case 0: break;
+ case 1: append (global_skip_str, &(n_global_skip_str), "\\qqsk", 8); break;
+ case 2: append (global_skip_str, &(n_global_skip_str), "\\hqsk", 8); break;
+ case 4: append (global_skip_str, &(n_global_skip_str), "\\qsk", 8); break;
+ }
+
for (i=1; i <= nstaffs; i++) /* append current notes to outstrings */
- if (active[i]) output_notes (i);
+ if (active[i])
+ {
+ append (outstrings[i], &(n_outstrings[i]), global_skip_str, LINE_LEN);
+ output_notes (i);
+ }
for (i=1; i <= nstaffs; i++)
{
/* virtual notes needed? */
@@ -1878,7 +1913,7 @@ int main (int argc, char *argv[])
time (&mytime);
strftime (today, 11, "%Y-%m-%d", localtime (&mytime) );
fprintf (stdout, "This is autosp, version %s.\n", version);
- fprintf (stdout, "Copyright (C) 2014-16 R. D. Tennent\n" );
+ fprintf (stdout, "Copyright (C) 2014-17 R. D. Tennent\n" );
fprintf (stdout, "School of Computing, Queen's University, rdt@cs.queensu.ca\n" );
fprintf (stdout, "License GNU GPL version 2 or later <http://gnu.org/licences/gpl.html>.\n" );
fprintf (stdout, "There is NO WARRANTY, to the extent permitted by law.\n\n" );
diff --git a/Build/source/utils/autosp/autosp-src/autosp.test b/Build/source/utils/autosp/autosp-src/autosp.test
index 2b04f6601f6..d4610464610 100755
--- a/Build/source/utils/autosp/autosp-src/autosp.test
+++ b/Build/source/utils/autosp/autosp-src/autosp.test
@@ -1,8 +1,15 @@
#! /bin/sh
-# Copyright 2016-2017 Karl Berry <tex-live@tug.org>
+
+# Copyright 2016 Karl Berry <tex-live@tug.org>
# Copyright 2015 Peter Breitenlohner <tex-live@tug.org>
# You may freely use, modify and/or distribute this file.
+if test -z "$test_srcdir"; then
+ # If not set, then we are not running from `make check'.
+ test_srcdir=`echo "$0" | sed -e 's,/[^\\/]*$,,'` # == dirname $0
+ test "$test_srcdir" = "$0" && test_srcdir=. # in case subst failed
+fi
+
echo && echo "*** autosp --help"
./autosp --help || exit 1
@@ -13,9 +20,9 @@ echo && echo "*** autosp -dd (missing infile)"
./autosp -dd && exit 1
echo && echo "*** autosp tests/quod2.aspc quod2.aspc"
-cp $srcdir/$AUTOSP_TREE/tests/quod2.aspc .
+cp $test_srcdir/tests/quod2.aspc .
rm -f quod2.tex
./autosp quod2.aspc || exit 1
echo && echo "*** diff quod2.tex tests/quod2.tex"
-diff quod2.tex $srcdir/$AUTOSP_TREE/tests/quod2.tex || exit 1
+diff quod2.tex $test_srcdir/tests/quod2.tex || exit 1
diff --git a/Build/source/utils/autosp/autosp-src/configure b/Build/source/utils/autosp/autosp-src/configure
index 60d33733010..ec31b7681e8 100755
--- a/Build/source/utils/autosp/autosp-src/configure
+++ b/Build/source/utils/autosp/autosp-src/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for autosp 2016-11-02.
+# Generated by GNU Autoconf 2.69 for autosp 2017-04-06.
#
# Report bugs to <rdt@cs.queensu.ca>.
#
@@ -580,8 +580,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='autosp'
PACKAGE_TARNAME='autosp'
-PACKAGE_VERSION='2016-11-02'
-PACKAGE_STRING='autosp 2016-11-02'
+PACKAGE_VERSION='2017-04-06'
+PACKAGE_STRING='autosp 2017-04-06'
PACKAGE_BUGREPORT='rdt@cs.queensu.ca'
PACKAGE_URL=''
@@ -1262,7 +1262,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures autosp 2016-11-02 to adapt to many kinds of systems.
+\`configure' configures autosp 2017-04-06 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1328,7 +1328,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of autosp 2016-11-02:";;
+ short | recursive ) echo "Configuration of autosp 2017-04-06:";;
esac
cat <<\_ACEOF
@@ -1417,7 +1417,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-autosp configure 2016-11-02
+autosp configure 2017-04-06
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -1840,7 +1840,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by autosp $as_me 2016-11-02, which was
+It was created by autosp $as_me 2017-04-06, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -2655,7 +2655,7 @@ fi
# Define the identity of the package.
PACKAGE='autosp'
- VERSION='2016-11-02'
+ VERSION='2017-04-06'
cat >>confdefs.h <<_ACEOF
@@ -4873,7 +4873,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by autosp $as_me 2016-11-02, which was
+This file was extended by autosp $as_me 2017-04-06, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -4939,7 +4939,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-autosp config.status 2016-11-02
+autosp config.status 2017-04-06
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
diff --git a/Build/source/utils/autosp/autosp-src/configure.ac b/Build/source/utils/autosp/autosp-src/configure.ac
index c84245356f1..cf0e1d72434 100644
--- a/Build/source/utils/autosp/autosp-src/configure.ac
+++ b/Build/source/utils/autosp/autosp-src/configure.ac
@@ -1,5 +1,5 @@
AC_PREREQ(2.63)
-AC_INIT([autosp],[2016-11-02],[rdt@cs.queensu.ca])
+AC_INIT([autosp],[2017-04-06],[rdt@cs.queensu.ca])
AC_CONFIG_AUX_DIR([.])
AM_INIT_AUTOMAKE
AC_CONFIG_HEADERS([config.h])
diff --git a/Build/source/utils/autosp/autosp-src/tests/quod2.aspc b/Build/source/utils/autosp/autosp-src/tests/quod2.aspc
index 19e7867def3..f37c093df38 100644
--- a/Build/source/utils/autosp/autosp-src/tests/quod2.aspc
+++ b/Build/source/utils/autosp/autosp-src/tests/quod2.aspc
@@ -28,7 +28,7 @@
\setname3{A}
\setname4{S}
\songtop4\songbottom1
-\fulltitle{\BIgfont \so{Quodlibet}}
+\fulltitle{\sc\so{Quodlibet}}
\subtitle{\it Variation 30 of the Goldberg Variations for Clavier}
\title{\it Quodlibet}
\author{J. S. Bach (1685--1750)}
@@ -81,17 +81,17 @@
\anotes
\itieu0a\qa a\ttie0\ibbl0a{-2}\qb0{aNM}\tqb0L&
\ibl1l{-2}\qb1l\tqb1k\cl{^j}\ds&
- \qa{.o}\ibbl2i2\qb2i\qsk\tqb2{^j}&
+ \qa{.o}\ibbl2i2\qb2i\Qsk\tqb2{^j}&
\shake{n}\ibl3i0\qb3{^j}\nbbl3\qb3i\tqb3j\cu h\ds\en
\bar%7
\anotes\qa{MK}&\ibu1g0\qb1{fgh}\tqh1f&\ibl2k0\qb2{klm}\tqb2k&\qa{hh}\en
\anotes\qa{NG}&\ibu1g{-2}\qb1{gfe}\tqh1d&\ibl2i4\qb2{ikn}\tqb2m&\qa{ii}\en
\bar%8
-\vnotes0.4\elemskip&&&\en
+\nspace
\anotes
\qu{.H}\cu{^J}&
\ibu1c4\qb1{^cde}\itied1h\tqh1h&
- \ibl2l{-1}\qb2{.l}\itieu2k\tbbl2\tqb2k\ttie2\ibbl2j0\qb2k\hqsk\tbbl2\qb2{^j}\itieu2l\tqb2l&
+ \ibl2l{-1}\qb2{.l}\itieu2k\tbbl2\tqb2k\ttie2\ibbl2j0\qb2k\HQsk\tbbl2\qb2{^j}\itieu2l\tqb2l&
\ibu3h{0}\qb3{hih}\tqh3g\en
\anotes
\ql K\cl K&
@@ -117,14 +117,14 @@
\qa{.a}\cl{^a}&
\ibl1m{-1}\qb1{mnm}\tqb1l&
\qa{qq}&
- \ibbl3k2\qb3{^klm}\tqb3n\ibl3o{-2}\qb3o\nbbl3\qb3n\qsk\tqb3m\en
+ \ibbl3k2\qb3{^klm}\tqb3n\ibl3o{-2}\qb3o\nbbl3\qb3n\tqb3m\en
\bar%12
-\vnotes0.4\elemskip&&&\en
+\nspace
\anotes
\qa b\qa I&
\ibl1k2\qb1{^k}\nbbl1\qb1l\tqb1m\itied1i\qu i&
\ibl2o{-1}\qb2p\qb2q\qb2p\tqb2o&
- \ibl3n{-2}\qb3n\nbbl3\qb3m\tqb3l\qsk\ibbl3k0\qb3{^kl}\qb3m\tqb3k\en
+ \ibl3n{-2}\qb3n\nbbl3\qb3m\tqb3l\Qsk\ibbl3k0\qb3{^kl}\qb3m\tqb3k\en
\anotes
\qa{.L}\cl{=K}&
\ttie1\ibu1i0\qb1i\nbbu1\qb1h\tqh1i\ibu1g2\qb1g\nbbu1\qb1h\tqh1i&
diff --git a/Build/source/utils/autosp/autosp-src/tests/quod2.tex b/Build/source/utils/autosp/autosp-src/tests/quod2.tex
index 6bc02b383d4..f73e56cf54d 100644
--- a/Build/source/utils/autosp/autosp-src/tests/quod2.tex
+++ b/Build/source/utils/autosp/autosp-src/tests/quod2.tex
@@ -1,4 +1,4 @@
-% Generated by autosp (2016-11-02).
+% Generated by autosp (2017-04-06).
\input musixtex
\input musixplt
\input soul.sty
@@ -29,7 +29,7 @@
\setname3{A}
\setname4{S}
\songtop4\songbottom1
-\fulltitle{\BIgfont \so{Quodlibet}}
+\fulltitle{\sc\so{Quodlibet}}
\subtitle{\it Variation 30 of the Goldberg Variations for Clavier}
\title{\it Quodlibet}
\author{J. S. Bach (1685--1750)}
@@ -77,14 +77,14 @@
\Notes\qa{.L}\sk\sk&\ibl1n{-1}\qb1{n}\qb1{o}\qb1{n}&\ttie2\ibl2r{-2}\qb2r\tqb2q\qa p&\ibl3n{-2}\qb3{n}\qb3{m}\qb3{l}\en
\notes\ibbl0M2\qb0M\tqb0N\hqsk&\tqb1m\sk\hqsk&\sk\sk\hqsk&\tqb3k\sk\hqsk\en%
\Notes\itieu0a\qa a&\ibl1l{-2}\qb1l&\qa{.o}&\shake{n}\ibl3i0\qb3{^j}\en
-\notes\sk\sk\ttie0\ibbl0a{-2}\qb0{a}\qb0{N}\qb0{M}\tqb0L\hqsk&\tqb1k\sk\cl{^j}\sk\ds\sk\hqsk&\sk\sk\sk\sk\ibbl2i2\qb2i\qsk\tqb2{^j}\hqsk&\nbbl3\qb3i\tqb3j\cu h\sk\ds\sk\hqsk\en%
+\notes\sk\sk\ttie0\ibbl0a{-2}\qb0{a}\qb0{N}\qb0{M}\qsk\tqb0L\hqsk&\tqb1k\sk\cl{^j}\sk\ds\qsk\sk\hqsk&\sk\sk\sk\sk\ibbl2i2\qb2i\qsk\tqb2{^j}\hqsk&\nbbl3\qb3i\tqb3j\cu h\sk\ds\qsk\sk\hqsk\en%
\bar%7
\Notes\qa{M}\sk\qa{K}\sk&\ibu1g0\qb1{f}\qb1{g}\qb1{h}\tqh1f&\ibl2k0\qb2{k}\qb2{l}\qb2{m}\tqb2k&\qa{h}\sk\qa{h}\sk\en%
\Notes\qa{N}\sk\qa{G}\sk&\ibu1g{-2}\qb1{g}\qb1{f}\qb1{e}\tqh1d&\ibl2i4\qb2{i}\qb2{k}\qb2{n}\tqb2m&\qa{i}\sk\qa{i}\sk\en%
\bar%8
-\vnotes0.4\elemskip&&&\en
+\nspace
\Notes\qu{.H}&\ibu1c4\qb1{^c}&\ibl2l{-1}\qb2{.l}&\ibu3h{0}\qb3{h}\en
-\notes\sk\sk\sk\sk&\qb1{d}\sk\qb1{e}\sk&\sk\itieu2k\tbbl2\tqb2k\ttie2\ibbl2j0\qb2k\hqsk\tbbl2\qb2{^j}&\qb3{i}\sk\qb3{h}\sk\en
+\notes\sk\sk\sk\hqsk\sk&\qb1{d}\sk\qb1{e}\hqsk\sk&\sk\itieu2k\tbbl2\tqb2k\ttie2\ibbl2j0\qb2k\hqsk\tbbl2\qb2{^j}&\qb3{i}\sk\qb3{h}\hqsk\sk\en
\Notes\cu{^J}&\itied1h\tqh1h&\itieu2l\tqb2l&\tqh3g\en%
\notes\ql K\sk\sk\sk&\ttie1\ibu1h{-2}\qb1h\sk\tqh1g\sk&\ttie2\ibbl2l{-1}\qb2{l}\qb2{k}\qb2{l}\tqb2j&\ibu3f{-1}\qb3f\sk\tqh3e\sk\en
\Notes\cl K&\cu f&\cl k&\cu d\en%
@@ -105,11 +105,11 @@
\Notes\qa{N}\sk\qa{N}\sk&\ibl1l0\qb1{n}\qb1{l}\qb1{n}\tqb1l&\qa{p}\sk\qa{p}\sk&\ibl3m0\qb3{l}\qb3{p}\qb3{l}\tqb3{p}\en%
\notes\qa{.a}\sk\sk\sk&\ibl1m{-1}\qb1{m}\sk\qb1{n}\sk&\qa{q}\sk\sk\sk&\ibbl3k2\qb3{^k}\qb3{l}\qb3{m}\tqb3n\en
\Notes\sk&\qb1{m}&\qa{q}&\ibl3o{-2}\qb3o\en
-\notes\cl{^a}\sk\hqsk&\tqb1l\sk\hqsk&\sk\sk\hqsk&\nbbl3\qb3n\qsk\tqb3m\hqsk\en%
+\notes\cl{^a}\sk\hqsk&\tqb1l\sk\hqsk&\sk\sk\hqsk&\nbbl3\qb3n\tqb3m\hqsk\en%
\bar%12
-\vnotes0.4\elemskip&&&\en
+\nspace
\Notes\qa b&\ibl1k2\qb1{^k}&\ibl2o{-1}\qb2p&\ibl3n{-2}\qb3n\en
-\notes\sk\sk\qa I\sk\sk\sk\hqsk&\nbbl1\qb1l\tqb1m\itied1i\qu i\sk\sk\sk\hqsk&\qb2q\sk\qb2p\sk\tqb2o\sk\hqsk&\nbbl3\qb3m\tqb3l\qsk\ibbl3k0\qb3{^k}\qb3{l}\qb3m\tqb3k\hqsk\en%
+\notes\sk\sk\qsk\qa I\sk\sk\sk\hqsk&\nbbl1\qb1l\tqb1m\qsk\itied1i\qu i\sk\sk\sk\hqsk&\qb2q\sk\qsk\qb2p\sk\tqb2o\sk\hqsk&\nbbl3\qb3m\tqb3l\qsk\ibbl3k0\qb3{^k}\qb3{l}\qb3m\tqb3k\hqsk\en%
\Notes\qa{.L}&\ttie1\ibu1i0\qb1i&\ibl2n0\qb2n&\itieu3l\ha l\en
\notes\sk\sk&\nbbu1\qb1h\tqh1i&\nbbl2\qb2m\tqb2n&\sk\sk\en
\Notes\sk&\ibu1g2\qb1g&\cl l&\sk\en