diff --git a/README.md b/README.md
index 8366a8b..61ba019 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
# musescore-serifjazz-chords
-*musescore-serifjazz-chords* provides a [Musescore](https://musescore.org/) [chord symbol style file](https://musescore.org/en/handbook/chord-symbols#appearance) with Jazz-style superscripts and font distinctions, while using standard (sans-)serif fonts congruent with standard engraving formatting.
+*musescore-serifjazz-chords* provides a [Musescore](https://musescore.org/) [chord symbol style file](https://musescore.org/en/handbook/chord-symbols#appearance) with Jazz-style superscripts and font distinctions, and stacked chord alterations, while using standard (sans-)serif fonts congruent with standard engraving formatting.

@@ -23,3 +23,15 @@ The layout parameters in these XML files are designed for, and expect, the *Free
XML files corresponding to specific staff sizes should not be directly edited. They are automatically generated from *chords_serifjazz.m4.xml*. This is an [m4](https://en.wikipedia.org/wiki/M4_%28computer_language%29) file, which automatically substitutes appropriate layout parameters for each staff size.
Output XML files can be regenerated using the *build.sh* script. Additional staff sizes can be introduced by editing this script.
+
+The m4 files accept the following parameters, configured using the `-DKEY=VALUE` command line switch:
+
+* *FONT_MUSIC*: The name of the font used for musical symbols: sharps, flats and (half-)diminished symbols.
+* *FONT_SERIF*: The name of the font used for chord letters.
+* *FONT_SANS*: The name of the font used for extensions and alterations.
+* *AMT_SUP*: The amount (in 1/5 MuseScore spatium units) to raise text to be superscripted. This needs to be set for each individual staff size.
+* *AMT_UNSUP*: The amount (in 1/5 MuseScore spatium units) to correct for characters already superscripted in the font (e.g. the degree symbol for diminished chords).
+* *SUS_SUPER*: Set this key if *sus* is to be superscripted.
+* *CHORD_FORMS*: Set this key if forms for specific chords are to be generated (e.g. automatically convert Cmmaj7 to Cm(maj7), and stack chord alterations).
+* *SYM_MI*: The symbol to be used for minor chord forms (has effect only if *CHORD_FORMS* is enabled), e.g. *m* or *MI* or *mi*.
+* *SYM_MA*: The symbol to be used for major chord forms (has effect only if *CHORD_FORMS* is enabled), e.g. *maj* or *MA*.
diff --git a/Screenshot.png b/Screenshot.png
index 8a473a1..24928f5 100644
Binary files a/Screenshot.png and b/Screenshot.png differ
diff --git a/build.sh b/build.sh
index 529d600..2d49810 100755
--- a/build.sh
+++ b/build.sh
@@ -1,4 +1,6 @@
#!/bin/bash
-m4 -P -DAMT_SUP=3.5 -DAMT_UNSUP=2.5 -DFONT_MUSIC=default -DFONT_SERIF=default -DFONT_SANS=FreeSans chords_serifjazz.m4.xml > chords_serifjazz_1.764mm_Default.xml
-m4 -P -DAMT_SUP=4.2 -DAMT_UNSUP=3.5 -DFONT_MUSIC=default -DFONT_SERIF=default -DFONT_SANS=FreeSans chords_serifjazz.m4.xml > chords_serifjazz_1.375mm_R6.xml
-m4 -P -DAMT_SUP=6.0 -DAMT_UNSUP=5.1 -DFONT_MUSIC=default -DFONT_SERIF=default -DFONT_SANS=FreeSans chords_serifjazz.m4.xml > chords_serifjazz_0.925mm_R8.xml
+ARGS="-DFONT_MUSIC=default -DFONT_SERIF=default -DFONT_SANS=FreeSans -DSUS_SUPER -DCHORD_FORMS -DSYM_MI=m -DSYM_MA=maj"
+
+m4 -P -DAMT_SUP=3.5 -DAMT_UNSUP=2.5 $ARGS chords_serifjazz.m4.xml > chords_serifjazz_1.764mm_Default.xml
+m4 -P -DAMT_SUP=4.2 -DAMT_UNSUP=3.5 $ARGS chords_serifjazz.m4.xml > chords_serifjazz_1.375mm_R6.xml
+m4 -P -DAMT_SUP=6.0 -DAMT_UNSUP=5.1 $ARGS chords_serifjazz.m4.xml > chords_serifjazz_0.925mm_R8.xml
diff --git a/chords_serifjazz.m4.xml b/chords_serifjazz.m4.xml
index 961c9ad..2711e40 100644
--- a/chords_serifjazz.m4.xml
+++ b/chords_serifjazz.m4.xml
@@ -51,11 +51,12 @@
+
-
+
1.4
@@ -74,11 +75,14 @@
+
+
+
@@ -91,6 +95,9 @@
+
+
+
@@ -105,6 +112,13 @@
+
+
+
+
+
+
+
@@ -122,9 +136,6 @@
-
-
-
@@ -298,4 +317,162 @@
:n :a
m:-0.2:1 / m:0.2:1 :n :a m:0:-2
+
+
+m4_ifdef(`CHORD_FORMS', `
+
+
+ add9
+ m:0:-⊃ s( sadd s9 s) m:0:⊃
+
+
+
+ madd9
+ SYM_MI m:0:-⊃ s( sadd s9 s) m:0:⊃
+
+
+
+ mmaj7
+ SYM_MI m:0:-⊃ s( SYM_MA s7 s) m:0:⊃
+
+
+
+ m9maj7
+ SYM_MI m:0:-⊃ s9 s( SYM_MA s7 s) m:0:⊃
+
+
+
+ +maj7
+ + m:0:-⊃ s( SYM_MA s7 s) m:0:⊃
+
+
+
+ +9maj7
+ + m:0:-⊃ s9 s( SYM_MA s7 s) m:0:⊃
+
+
+
+ mb5
+ SYM_MI m:0:-⊃ s( sb s5 s) m:0:⊃
+
+
+
+ 7b5
+ m:0:-⊃ s7 s( sb s5 s) m:0:⊃
+
+
+
+ m7b5
+ SYM_MI m:0:-⊃ s7 s( sb s5 s) m:0:⊃
+
+
+
+ 9b5
+ m:0:-⊃ s9 s( sb s5 s) m:0:⊃
+
+
+
+ m9b5
+ SYM_MI m:0:-⊃ s9 s( sb s5 s) m:0:⊃
+
+
+
+ 7b9
+ m:0:-⊃ s7 s( sb s9 s) m:0:⊃
+
+
+
+ m7b9
+ SYM_MI m:0:-⊃ s7 s( sb s9 s) m:0:⊃
+
+
+
+ 7#9
+ m:0:-⊃ s7 s( s# s9 s) m:0:⊃
+
+
+m4_define(`LTB2', ``m:1:5.5 :push m:0:-11 st( :pop :push m:0:-5 sm( :pop sb('')
+m4_define(`RTB2', ``:push m:0:-11 st) :pop :push m:0:-5 sm) :pop sb) m:0:-5.5'')
+m4_define(`SUP2', ``:push m:0:-11 $1 :pop'')
+
+
+ 7#9b5
+ m:0:-⊃ s7 LTB2 SUP2(`s# s9') sb s5 RTB2 m:0:⊃
+
+
+
+ 7b9b5
+ m:0:-⊃ s7 LTB2 SUP2(`sb s9') sb s5 RTB2 m:0:⊃
+
+
+
+ m7b9b5
+ SYM_MI m:0:-⊃ s7 LTB2 SUP2(`sb s9') sb s5 RTB2 m:0:⊃
+
+
+
+ +7b9
+ + m:0:-⊃ s7 s( sb s9 s) m:0:⊃
+
+
+
+ +7#9
+ + m:0:-⊃ s7 s( s# s9 s) m:0:⊃
+
+
+
+ 9#11
+ m:0:-⊃ s9 s( s# s1 s1 s) m:0:⊃
+
+
+
+ m9#11
+ SYM_MI m:0:-⊃ s9 s( s# s1 s1 s) m:0:⊃
+
+
+
+ 7#11b9
+ m:0:-⊃ s7 LTB2 SUP2(`s# s1 s1') m:2:0 sb s9 m:2:0 RTB2 m:0:⊃
+
+
+
+ m7#11b9
+ SYM_MI m:0:-⊃ s7 LTB2 SUP2(`s# s1 s1') m:2:0 sb s9 m:2:0 RTB2 m:0:⊃
+
+
+
+ +7#11b9
+ + m:0:-⊃ s7 LTB2 SUP2(`s# s1 s1') m:2:0 sb s9 m:2:0 RTB2 m:0:⊃
+
+
+')
+
diff --git a/chords_serifjazz_0.925mm_R8.xml b/chords_serifjazz_0.925mm_R8.xml
index 0cb0198..9a8267c 100644
--- a/chords_serifjazz_0.925mm_R8.xml
+++ b/chords_serifjazz_0.925mm_R8.xml
@@ -51,6 +51,7 @@
+
@@ -74,11 +75,14 @@
+
+
+
@@ -91,6 +95,9 @@
+
+
+
@@ -105,6 +112,13 @@
+
+
+
+
+
+
+
@@ -122,9 +136,6 @@
-
-
-
@@ -298,4 +317,162 @@
:n :a
m:-0.2:1 / m:0.2:1 :n :a m:0:-2
+
+
+
+
+
+ add9
+ m:0:-⊃ s( sadd s9 s) m:0:⊃
+
+
+
+ madd9
+ m m:0:-⊃ s( sadd s9 s) m:0:⊃
+
+
+
+ mmaj7
+ m m:0:-⊃ s( maj s7 s) m:0:⊃
+
+
+
+ m9maj7
+ m m:0:-⊃ s9 s( maj s7 s) m:0:⊃
+
+
+
+ +maj7
+ + m:0:-⊃ s( maj s7 s) m:0:⊃
+
+
+
+ +9maj7
+ + m:0:-⊃ s9 s( maj s7 s) m:0:⊃
+
+
+
+ mb5
+ m m:0:-⊃ s( sb s5 s) m:0:⊃
+
+
+
+ 7b5
+ m:0:-⊃ s7 s( sb s5 s) m:0:⊃
+
+
+
+ m7b5
+ m m:0:-⊃ s7 s( sb s5 s) m:0:⊃
+
+
+
+ 9b5
+ m:0:-⊃ s9 s( sb s5 s) m:0:⊃
+
+
+
+ m9b5
+ m m:0:-⊃ s9 s( sb s5 s) m:0:⊃
+
+
+
+ 7b9
+ m:0:-⊃ s7 s( sb s9 s) m:0:⊃
+
+
+
+ m7b9
+ m m:0:-⊃ s7 s( sb s9 s) m:0:⊃
+
+
+
+ 7#9
+ m:0:-⊃ s7 s( s# s9 s) m:0:⊃
+
+
+
+
+
+
+
+ 7#9b5
+ m:0:-⊃ s7 m:1:5.5 :push m:0:-11 st( :pop :push m:0:-5 sm( :pop sb( :push m:0:-11 s# s9 :pop sb s5 :push m:0:-11 st) :pop :push m:0:-5 sm) :pop sb) m:0:-5.5 m:0:⊃
+
+
+
+ 7b9b5
+ m:0:-⊃ s7 m:1:5.5 :push m:0:-11 st( :pop :push m:0:-5 sm( :pop sb( :push m:0:-11 sb s9 :pop sb s5 :push m:0:-11 st) :pop :push m:0:-5 sm) :pop sb) m:0:-5.5 m:0:⊃
+
+
+
+ m7b9b5
+ m m:0:-⊃ s7 m:1:5.5 :push m:0:-11 st( :pop :push m:0:-5 sm( :pop sb( :push m:0:-11 sb s9 :pop sb s5 :push m:0:-11 st) :pop :push m:0:-5 sm) :pop sb) m:0:-5.5 m:0:⊃
+
+
+
+ +7b9
+ + m:0:-⊃ s7 s( sb s9 s) m:0:⊃
+
+
+
+ +7#9
+ + m:0:-⊃ s7 s( s# s9 s) m:0:⊃
+
+
+
+ 9#11
+ m:0:-⊃ s9 s( s# s1 s1 s) m:0:⊃
+
+
+
+ m9#11
+ m m:0:-⊃ s9 s( s# s1 s1 s) m:0:⊃
+
+
+
+ 7#11b9
+ m:0:-⊃ s7 m:1:5.5 :push m:0:-11 st( :pop :push m:0:-5 sm( :pop sb( :push m:0:-11 s# s1 s1 :pop m:2:0 sb s9 m:2:0 :push m:0:-11 st) :pop :push m:0:-5 sm) :pop sb) m:0:-5.5 m:0:⊃
+
+
+
+ m7#11b9
+ m m:0:-⊃ s7 m:1:5.5 :push m:0:-11 st( :pop :push m:0:-5 sm( :pop sb( :push m:0:-11 s# s1 s1 :pop m:2:0 sb s9 m:2:0 :push m:0:-11 st) :pop :push m:0:-5 sm) :pop sb) m:0:-5.5 m:0:⊃
+
+
+
+ +7#11b9
+ + m:0:-⊃ s7 m:1:5.5 :push m:0:-11 st( :pop :push m:0:-5 sm( :pop sb( :push m:0:-11 s# s1 s1 :pop m:2:0 sb s9 m:2:0 :push m:0:-11 st) :pop :push m:0:-5 sm) :pop sb) m:0:-5.5 m:0:⊃
+
+
+
+
diff --git a/chords_serifjazz_1.375mm_R6.xml b/chords_serifjazz_1.375mm_R6.xml
index a90d478..c00df92 100644
--- a/chords_serifjazz_1.375mm_R6.xml
+++ b/chords_serifjazz_1.375mm_R6.xml
@@ -51,6 +51,7 @@
+
@@ -74,11 +75,14 @@
+
+
+
@@ -91,6 +95,9 @@
+
+
+
@@ -105,6 +112,13 @@
+
+
+
+
+
+
+
@@ -122,9 +136,6 @@
-
-
-
@@ -298,4 +317,162 @@
:n :a
m:-0.2:1 / m:0.2:1 :n :a m:0:-2
+
+
+
+
+
+ add9
+ m:0:-⊃ s( sadd s9 s) m:0:⊃
+
+
+
+ madd9
+ m m:0:-⊃ s( sadd s9 s) m:0:⊃
+
+
+
+ mmaj7
+ m m:0:-⊃ s( maj s7 s) m:0:⊃
+
+
+
+ m9maj7
+ m m:0:-⊃ s9 s( maj s7 s) m:0:⊃
+
+
+
+ +maj7
+ + m:0:-⊃ s( maj s7 s) m:0:⊃
+
+
+
+ +9maj7
+ + m:0:-⊃ s9 s( maj s7 s) m:0:⊃
+
+
+
+ mb5
+ m m:0:-⊃ s( sb s5 s) m:0:⊃
+
+
+
+ 7b5
+ m:0:-⊃ s7 s( sb s5 s) m:0:⊃
+
+
+
+ m7b5
+ m m:0:-⊃ s7 s( sb s5 s) m:0:⊃
+
+
+
+ 9b5
+ m:0:-⊃ s9 s( sb s5 s) m:0:⊃
+
+
+
+ m9b5
+ m m:0:-⊃ s9 s( sb s5 s) m:0:⊃
+
+
+
+ 7b9
+ m:0:-⊃ s7 s( sb s9 s) m:0:⊃
+
+
+
+ m7b9
+ m m:0:-⊃ s7 s( sb s9 s) m:0:⊃
+
+
+
+ 7#9
+ m:0:-⊃ s7 s( s# s9 s) m:0:⊃
+
+
+
+
+
+
+
+ 7#9b5
+ m:0:-⊃ s7 m:1:5.5 :push m:0:-11 st( :pop :push m:0:-5 sm( :pop sb( :push m:0:-11 s# s9 :pop sb s5 :push m:0:-11 st) :pop :push m:0:-5 sm) :pop sb) m:0:-5.5 m:0:⊃
+
+
+
+ 7b9b5
+ m:0:-⊃ s7 m:1:5.5 :push m:0:-11 st( :pop :push m:0:-5 sm( :pop sb( :push m:0:-11 sb s9 :pop sb s5 :push m:0:-11 st) :pop :push m:0:-5 sm) :pop sb) m:0:-5.5 m:0:⊃
+
+
+
+ m7b9b5
+ m m:0:-⊃ s7 m:1:5.5 :push m:0:-11 st( :pop :push m:0:-5 sm( :pop sb( :push m:0:-11 sb s9 :pop sb s5 :push m:0:-11 st) :pop :push m:0:-5 sm) :pop sb) m:0:-5.5 m:0:⊃
+
+
+
+ +7b9
+ + m:0:-⊃ s7 s( sb s9 s) m:0:⊃
+
+
+
+ +7#9
+ + m:0:-⊃ s7 s( s# s9 s) m:0:⊃
+
+
+
+ 9#11
+ m:0:-⊃ s9 s( s# s1 s1 s) m:0:⊃
+
+
+
+ m9#11
+ m m:0:-⊃ s9 s( s# s1 s1 s) m:0:⊃
+
+
+
+ 7#11b9
+ m:0:-⊃ s7 m:1:5.5 :push m:0:-11 st( :pop :push m:0:-5 sm( :pop sb( :push m:0:-11 s# s1 s1 :pop m:2:0 sb s9 m:2:0 :push m:0:-11 st) :pop :push m:0:-5 sm) :pop sb) m:0:-5.5 m:0:⊃
+
+
+
+ m7#11b9
+ m m:0:-⊃ s7 m:1:5.5 :push m:0:-11 st( :pop :push m:0:-5 sm( :pop sb( :push m:0:-11 s# s1 s1 :pop m:2:0 sb s9 m:2:0 :push m:0:-11 st) :pop :push m:0:-5 sm) :pop sb) m:0:-5.5 m:0:⊃
+
+
+
+ +7#11b9
+ + m:0:-⊃ s7 m:1:5.5 :push m:0:-11 st( :pop :push m:0:-5 sm( :pop sb( :push m:0:-11 s# s1 s1 :pop m:2:0 sb s9 m:2:0 :push m:0:-11 st) :pop :push m:0:-5 sm) :pop sb) m:0:-5.5 m:0:⊃
+
+
+
+
diff --git a/chords_serifjazz_1.764mm_Default.xml b/chords_serifjazz_1.764mm_Default.xml
index 1f564e8..53e6934 100644
--- a/chords_serifjazz_1.764mm_Default.xml
+++ b/chords_serifjazz_1.764mm_Default.xml
@@ -51,6 +51,7 @@
+
@@ -74,11 +75,14 @@
+
+
+
@@ -91,6 +95,9 @@
+
+
+
@@ -105,6 +112,13 @@
+
+
+
+
+
+
+
@@ -122,9 +136,6 @@
-
-
-
@@ -298,4 +317,162 @@
:n :a
m:-0.2:1 / m:0.2:1 :n :a m:0:-2
+
+
+
+
+
+ add9
+ m:0:-⊃ s( sadd s9 s) m:0:⊃
+
+
+
+ madd9
+ m m:0:-⊃ s( sadd s9 s) m:0:⊃
+
+
+
+ mmaj7
+ m m:0:-⊃ s( maj s7 s) m:0:⊃
+
+
+
+ m9maj7
+ m m:0:-⊃ s9 s( maj s7 s) m:0:⊃
+
+
+
+ +maj7
+ + m:0:-⊃ s( maj s7 s) m:0:⊃
+
+
+
+ +9maj7
+ + m:0:-⊃ s9 s( maj s7 s) m:0:⊃
+
+
+
+ mb5
+ m m:0:-⊃ s( sb s5 s) m:0:⊃
+
+
+
+ 7b5
+ m:0:-⊃ s7 s( sb s5 s) m:0:⊃
+
+
+
+ m7b5
+ m m:0:-⊃ s7 s( sb s5 s) m:0:⊃
+
+
+
+ 9b5
+ m:0:-⊃ s9 s( sb s5 s) m:0:⊃
+
+
+
+ m9b5
+ m m:0:-⊃ s9 s( sb s5 s) m:0:⊃
+
+
+
+ 7b9
+ m:0:-⊃ s7 s( sb s9 s) m:0:⊃
+
+
+
+ m7b9
+ m m:0:-⊃ s7 s( sb s9 s) m:0:⊃
+
+
+
+ 7#9
+ m:0:-⊃ s7 s( s# s9 s) m:0:⊃
+
+
+
+
+
+
+
+ 7#9b5
+ m:0:-⊃ s7 m:1:5.5 :push m:0:-11 st( :pop :push m:0:-5 sm( :pop sb( :push m:0:-11 s# s9 :pop sb s5 :push m:0:-11 st) :pop :push m:0:-5 sm) :pop sb) m:0:-5.5 m:0:⊃
+
+
+
+ 7b9b5
+ m:0:-⊃ s7 m:1:5.5 :push m:0:-11 st( :pop :push m:0:-5 sm( :pop sb( :push m:0:-11 sb s9 :pop sb s5 :push m:0:-11 st) :pop :push m:0:-5 sm) :pop sb) m:0:-5.5 m:0:⊃
+
+
+
+ m7b9b5
+ m m:0:-⊃ s7 m:1:5.5 :push m:0:-11 st( :pop :push m:0:-5 sm( :pop sb( :push m:0:-11 sb s9 :pop sb s5 :push m:0:-11 st) :pop :push m:0:-5 sm) :pop sb) m:0:-5.5 m:0:⊃
+
+
+
+ +7b9
+ + m:0:-⊃ s7 s( sb s9 s) m:0:⊃
+
+
+
+ +7#9
+ + m:0:-⊃ s7 s( s# s9 s) m:0:⊃
+
+
+
+ 9#11
+ m:0:-⊃ s9 s( s# s1 s1 s) m:0:⊃
+
+
+
+ m9#11
+ m m:0:-⊃ s9 s( s# s1 s1 s) m:0:⊃
+
+
+
+ 7#11b9
+ m:0:-⊃ s7 m:1:5.5 :push m:0:-11 st( :pop :push m:0:-5 sm( :pop sb( :push m:0:-11 s# s1 s1 :pop m:2:0 sb s9 m:2:0 :push m:0:-11 st) :pop :push m:0:-5 sm) :pop sb) m:0:-5.5 m:0:⊃
+
+
+
+ m7#11b9
+ m m:0:-⊃ s7 m:1:5.5 :push m:0:-11 st( :pop :push m:0:-5 sm( :pop sb( :push m:0:-11 s# s1 s1 :pop m:2:0 sb s9 m:2:0 :push m:0:-11 st) :pop :push m:0:-5 sm) :pop sb) m:0:-5.5 m:0:⊃
+
+
+
+ +7#11b9
+ + m:0:-⊃ s7 m:1:5.5 :push m:0:-11 st( :pop :push m:0:-5 sm( :pop sb( :push m:0:-11 s# s1 s1 :pop m:2:0 sb s9 m:2:0 :push m:0:-11 st) :pop :push m:0:-5 sm) :pop sb) m:0:-5.5 m:0:⊃
+
+
+
+