\font\chFont=cmbx10 scaled \magstep0
\font\chFontRm=cmbx8 scaled \magstep0
\font\chFontIdx=cmbx7 scaled \magstep0


\def\ch.#1.{\csname  ch:#1\endcsname}
\def\defch.#1.{\expandafter \def \csname ch:#1\endcsname}

\def\chFlat{$\scriptstyle\flat$}
\def\chSharp{$\scriptstyle\sharp$}
%\def\chDim{$\circ$}
\def\chDim{dim}
\def\chMaj{$\scriptstyle\bigtriangleup$}
%\def\chMaj{maj}

%
% Base chords
%
\def\chVerticalAlign{13}% basic vertical align \internotes
\def\chBase#1{\zchar{\chVerticalAlign}{\chFont #1}}

%
% Macros for chords without sharp or flat
% it means C, D, E, F, G, A, B
%
\def\chX#1{\chBase{#1}}
\def\chXOneParam#1#2{\chBase{#1{\chFontRm #2}}}
\def\chXm#1{\chXOneParam{#1}{m}}
\def\chXPlus#1{\chXOneParam{#1}{+}}
\def\chXSus#1{\chXOneParam{#1}{sus}}
\def\chXDim#1{\chXOneParam{#1}{\chDim}}
\def\chXMaj#1{\chXOneParam{#1}{\chMaj}}

\def\chXOneParamUpper#1#2{\chBase{#1\lower-1ex\hbox{\chFontIdx #2}}}
%\def\chXDim#1{\chXOneParamUpper{#1}{\chDim}}
\def\chXSix#1{\chXOneParamUpper{#1}{6}}
\def\chXSeven#1{\chXOneParamUpper{#1}{7}}
\def\chXNine#1{\chXOneParamUpper{#1}{9}}
\def\chXNineFlat#1{\chXOneParamUpper{#1}{\chFontIdx 9\chFlat}}

\def\chXTwoParams#1#2#3{\chBase{#1{\chFontRm #2}\lower-1ex\hbox{\chFontIdx #3}}}
\def\chXmSeven#1{\chXTwoParams{#1}{m}{7}}
\def\chXmSix#1{\chXTwoParams{#1}{m}{6}}
\def\chXmFiveFlat#1{\chXTwoParams{#1}{m}{5\chFlat}}
\def\chXSusSeven#1{\chXTwoParams{#1}{sus}{7}}

\def\chXmSevenFiveFlat#1{\chBase{#1{\chFontRm m}\lower0.5ex\vbox{\baselineskip=1ex\hbox{\chFontIdx 7}\hbox{\chFontIdx 5\chFlat}}}}
%\def\chXmSevenFiveFlat#1{\chBase{#1{\chFontRm m}\lower0.5ex\vbox{\baselineskip=1ex\hbox{\chFontIdx 7}\hbox{\chFontIdx 5\chFlat}}}}


%
% Macros for chords with flat
% it means Ef, Af, Bf
%
\def\chXFlat#1{\chXOneParamUpper{#1}{\chFlat}}

\def\chXFlatOneParam#1#2{\chBase{#1\lower-1.1ex\hbox{\chFlat}\kern-0.3em\hbox{\chFontRm #2}}}
\def\chXFlatm#1{\chXFlatOneParam{#1}{m}}
\def\chXFlatPlus#1{\chXFlatOneParam{#1}{+}}
\def\chXFlatSus#1{\chXFlatOneParam{#1}{sus}}
\def\chXFlatDim#1{\chXFlatOneParam{#1}{\chDim}}
\def\chXFlatMaj#1{\chXFlatOneParam{#1}{\chMaj}}


\def\chXFlatOneParamUpper#1#2{\chXOneParamUpper{#1}{\chFlat\kern 0.2ex\chFontIdx #2}}
\def\chXFlatSix#1{\chXFlatOneParamUpper{#1}{6}}
\def\chXFlatSeven#1{\chXFlatOneParamUpper{#1}{7}}
\def\chXFlatNine#1{\chXFlatOneParamUpper{#1}{9}}
\def\chXFlatNineFlat#1{\chXFlatOneParamUpper{#1}{9\chFlat}}

\def\chXFlatTwoParams#1#2#3{\chBase{#1\lower-1.1ex\hbox{\chFlat}\kern-0.3em\hbox{\chFontRm #2}\lower-1ex\hbox{\chFontIdx #3}}}
\def\chXFlatmSeven#1{\chXFlatTwoParams{#1}{m}{7}}
\def\chXFlatmSix#1{\chXFlatTwoParams{#1}{m}{6}}
\def\chXFlatmFiveFlat#1{\chXFlatTwoParams{#1}{m}{5\chFlat}}
\def\chXFlatSusSeven#1{\chXFlatTwoParams{#1}{sus}{7}}

\def\chXFlatmSevenFiveFlat#1{\chBase{#1\lower-1.1ex\hbox{\chFlat}\kern-0.3em{\chFontRm m\lower0.5ex\vbox{\baselineskip=1ex\hbox{\chFontIdx 7}\hbox{\chFontIdx 5\chFlat}}}}}

%
% Macros for chords with sharp
% it means Cs, Fs
%
\def\chXSharp#1{\chXOneParamUpper{#1}{\chSharp}}

\def\chXSharpOneParam#1#2{\chBase{#1\lower-1.4ex\hbox{\chSharp}\kern-0.3em\hbox{\chFontRm #2}}}
\def\chXSharpm#1{\chXSharpOneParam{#1}{m}}
\def\chXSharpPlus#1{\chXSharpOneParam{#1}{+}}
\def\chXSharpSus#1{\chXSharpOneParam{#1}{sus}}
\def\chXSharpDim#1{\chXSharpOneParam{#1}{\chDim}}
\def\chXSharpMaj#1{\chXSharpOneParam{#1}{\chMaj}}


\def\chXSharpOneParamUpper#1#2{\chXOneParamUpper{#1}{\chFontIdx\chSharp\kern 0.2ex#2}}
\def\chXSharpSix#1{\chXSharpOneParamUpper{#1}{6}}
\def\chXSharpSeven#1{\chXSharpOneParamUpper{#1}{7}}
\def\chXSharpNine#1{\chXSharpOneParamUpper{#1}{9}}
\def\chXSharpNineFlat#1{\chXSharpOneParamUpper{#1}{9\chFlat}}

\def\chXSharpTwoParams#1#2#3{\chBase{#1\lower-1.4ex\hbox{\chSharp}\kern-0.3em\hbox{\chFontRm #2}\lower-1ex\hbox{\chFontIdx #3}}}
\def\chXSharpmSeven#1{\chXSharpTwoParams{#1}{m}{7}}
\def\chXSharpmSix#1{\chXSharpTwoParams{#1}{m}{6}}
\def\chXSharpmFiveFlat#1{\chXSharpTwoParams{#1}{m}{5\chFlat}}
\def\chXSharpSusSeven#1{\chXSharpTwoParams{#1}{sus}{7}}

\def\chXSharpmSevenFiveFlat#1{\chBase{#1\lower-1.4ex\hbox{\chSharp}\kern-0.3em{\chFontRm m\lower0.5ex\vbox{\baselineskip=1ex\hbox{\chFontIdx 7}\hbox{\chFontIdx 5\chFlat}}}}}

%
% C
%
\defch.C.{\chX{C}}
\defch.Cm.{\chXm{C}}
\defch.C+.{\chXPlus{C}}
\defch.C4.{\chXSus{C}}
\defch.Cdim.{\chXDim{C}}
\defch.Cmaj.{\chXMaj{C}}
\defch.C6.{\chXSix{C}}
\defch.C7.{\chXSeven{C}}
\defch.C9.{\chXNine{C}}
\defch.C9f.{\chXNineFlat{C}}
\defch.Cm7.{\chXmSeven{C}}
\defch.Cm6.{\chXmSix{C}}
\defch.Cm5f.{\chXmFiveFlat{C}}
\defch.C47.{\chXSusSeven{C}}
\defch.Cm75f.{\chXmSevenFiveFlat{C}}

%
% D
%
\defch.D.{\chX{D}}
\defch.Dm.{\chXm{D}}
\defch.D+.{\chXPlus{D}}
\defch.D4.{\chXSus{D}}
\defch.Ddim.{\chXDim{D}}
\defch.Dmaj.{\chXMaj{D}}
\defch.D6.{\chXSix{D}}
\defch.D7.{\chXSeven{D}}
\defch.D9.{\chXNine{D}}
\defch.D9f.{\chXNineFlat{D}}
\defch.Dm7.{\chXmSeven{D}}
\defch.Dm6.{\chXmSix{D}}
\defch.Dm5f.{\chXmFiveFlat{D}}
\defch.D47.{\chXSusSeven{D}}
\defch.Dm75f.{\chXmSevenFiveFlat{D}}

%
% E
%
\defch.E.{\chX{E}}
\defch.Em.{\chXm{E}}
\defch.E+.{\chXPlus{E}}
\defch.E4.{\chXSus{E}}
\defch.Edim.{\chXDim{E}}
\defch.Emaj.{\chXMaj{E}}
\defch.E6.{\chXSix{E}}
\defch.E7.{\chXSeven{E}}
\defch.E9.{\chXNine{E}}
\defch.E9f.{\chXNineFlat{E}}
\defch.Em7.{\chXmSeven{E}}
\defch.Em6.{\chXmSix{E}}
\defch.Em5f.{\chXmFiveFlat{E}}
\defch.E47.{\chXSusSeven{E}}
\defch.Em75f.{\chXmSevenFiveFlat{E}}

%
% F
%
\defch.F.{\chX{F}}
\defch.Fm.{\chXm{F}}
\defch.F+.{\chXPlus{F}}
\defch.F4.{\chXSus{F}}
\defch.Fdim.{\chXDim{F}}
\defch.Fmaj.{\chXMaj{F}}
\defch.F6.{\chXSix{F}}
\defch.F7.{\chXSeven{F}}
\defch.F9.{\chXNine{F}}
\defch.F9f.{\chXNineFlat{F}}
\defch.Fm7.{\chXmSeven{F}}
\defch.Fm6.{\chXmSix{F}}
\defch.Fm5f.{\chXmFiveFlat{F}}
\defch.F47.{\chXSusSeven{F}}
\defch.Fm75f.{\chXmSevenFiveFlat{F}}

%
% G
%
\defch.G.{\chX{G}}
\defch.Gm.{\chXm{G}}
\defch.G+.{\chXPlus{G}}
\defch.G4.{\chXSus{G}}
\defch.Gdim.{\chXDim{G}}
\defch.Gmaj.{\chXMaj{G}}
\defch.G6.{\chXSix{G}}
\defch.G7.{\chXSeven{G}}
\defch.G9.{\chXNine{G}}
\defch.G9f.{\chXNineFlat{G}}
\defch.Gm7.{\chXmSeven{G}}
\defch.Gm6.{\chXmSix{G}}
\defch.Gm5f.{\chXmFiveFlat{G}}
\defch.G47.{\chXSusSeven{G}}
\defch.Gm75f.{\chXmSevenFiveFlat{G}}

%
% A
%
\defch.A.{\chX{A}}
\defch.Am.{\chXm{A}}
\defch.A+.{\chXPlus{A}}
\defch.A4.{\chXSus{A}}
\defch.Adim.{\chXDim{A}}
\defch.Amaj.{\chXMaj{A}}
\defch.A6.{\chXSix{A}}
\defch.A7.{\chXSeven{A}}
\defch.A9.{\chXNine{A}}
\defch.A9f.{\chXNineFlat{A}}
\defch.Am7.{\chXmSeven{A}}
\defch.Am6.{\chXmSix{A}}
\defch.Am5f.{\chXmFiveFlat{A}}
\defch.A47.{\chXSusSeven{A}}
\defch.Am75f.{\chXmSevenFiveFlat{A}}

%
% Cs
%
\defch.Cs.{\chXSharp{C}}
\defch.Csm.{\chXSharpm{C}}
\defch.Cs+.{\chXSharpPlus{C}}
\defch.Cs4.{\chXSharpSus{C}}
\defch.Csdim.{\chXSharpDim{C}}
\defch.Csmaj.{\chXSharpMaj{C}}
\defch.Cs6.{\chXSharpSix{C}}
\defch.Cs7.{\chXSharpSeven{C}}
\defch.Cs9.{\chXSharpNine{C}}
\defch.Cs9f.{\chXSharpNineFlat{C}}
\defch.Csm7.{\chXSharpmSeven{C}}
\defch.Csm6.{\chXSharpmSix{C}}
\defch.Csm5f.{\chXSharpmFiveFlat{C}}
\defch.Cs47.{\chXSharpSusSeven{C}}
\defch.Csm75f.{\chXSharpmSevenFiveFlat{C}}

%
% Fs
%
\defch.Fs.{\chXSharp{F}}
\defch.Fsm.{\chXSharpm{F}}
\defch.Fs+.{\chXSharpPlus{F}}
\defch.Fs4.{\chXSharpSus{F}}
\defch.Fsdim.{\chXSharpDim{F}}
\defch.Fsmaj.{\chXSharpMaj{F}}
\defch.Fs6.{\chXSharpSix{F}}
\defch.Fs7.{\chXSharpSeven{F}}
\defch.Fs9.{\chXSharpNine{F}}
\defch.Fs9f.{\chXSharpNineFlat{F}}
\defch.Fsm7.{\chXSharpmSeven{F}}
\defch.Fsm6.{\chXSharpmSix{F}}
\defch.Fsm5f.{\chXSharpmFiveFlat{F}}
\defch.Fs47.{\chXSharpSusSeven{F}}
\defch.Fsm75f.{\chXSharpmSevenFiveFlat{F}}

%
% Ef
%
\defch.Ef.{\chXFlat{E}}
\defch.Efm.{\chXFlatm{E}}
\defch.Ef+.{\chXFlatPlus{E}}
\defch.Ef4.{\chXFlatSus{E}}
\defch.Efdim.{\chXFlatDim{E}}
\defch.Efmaj.{\chXFlatMaj{E}}
\defch.Ef6.{\chXFlatSix{E}}
\defch.Ef7.{\chXFlatSeven{E}}
\defch.Ef9.{\chXFlatNine{E}}
\defch.Ef9f.{\chXFlatNineFlat{E}}
\defch.Efm7.{\chXFlatmSeven{E}}
\defch.Efm6.{\chXFlatmSix{E}}
\defch.Efm5f.{\chXFlatmFiveFlat{E}}
\defch.Ef47.{\chXFlatSusSeven{E}}
\defch.Efm75f.{\chXFlatmSevenFiveFlat{E}}

%
% Af
%
\defch.Af.{\chXFlat{A}}
\defch.Afm.{\chXFlatm{A}}
\defch.Af+.{\chXFlatPlus{A}}
\defch.Af4.{\chXFlatSus{A}}
\defch.Afdim.{\chXFlatDim{A}}
\defch.Afmaj.{\chXFlatMaj{A}}
\defch.Af6.{\chXFlatSix{A}}
\defch.Af7.{\chXFlatSeven{A}}
\defch.Af9.{\chXFlatNine{A}}
\defch.Af9f.{\chXFlatNineFlat{A}}
\defch.Afm7.{\chXFlatmSeven{A}}
\defch.Afm6.{\chXFlatmSix{A}}
\defch.Afm5f.{\chXFlatmFiveFlat{A}}
\defch.Af47.{\chXFlatSusSeven{A}}
\defch.Afm75f.{\chXFlatmSevenFiveFlat{A}}

%
% B
%
\defch.B.{\chX{B}}
\defch.Bm.{\chXm{B}}
\defch.B+.{\chXPlus{B}}
\defch.B4.{\chXSus{B}}
\defch.Bdim.{\chXDim{B}}
\defch.Bmaj.{\chXMaj{B}}
\defch.B6.{\chXSix{B}}
\defch.B7.{\chXSeven{B}}
\defch.B9.{\chXNine{B}}
\defch.B9f.{\chXNineFlat{B}}
\defch.Bm7.{\chXmSeven{B}}
\defch.Bm6.{\chXmSix{B}}
\defch.Bm5f.{\chXmFiveFlat{B}}
\defch.B47.{\chXSusSeven{B}}
\defch.Bm75f.{\chXmSevenFiveFlat{B}}

%
% Bf
%
\defch.Bf.{\chXFlat{B}}
\defch.Bfm.{\chXFlatm{B}}
\defch.Bf+.{\chXFlatPlus{B}}
\defch.Bf4.{\chXFlatSus{B}}
\defch.Bfdim.{\chXFlatDim{B}}
\defch.Bfmaj.{\chXFlatMaj{B}}
\defch.Bf6.{\chXFlatSix{B}}
\defch.Bf7.{\chXFlatSeven{B}}
\defch.Bf9.{\chXFlatNine{B}}
\defch.Bf9f.{\chXFlatNineFlat{B}}
\defch.Bfm7.{\chXFlatmSeven{B}}
\defch.Bfm6.{\chXFlatmSix{B}}
\defch.Bfm5f.{\chXFlatmFiveFlat{B}}
\defch.Bf47.{\chXFlatSusSeven{B}}
\defch.Bfm75f.{\chXFlatmSevenFiveFlat{B}}
