273 lines
11 KiB
TeX
273 lines
11 KiB
TeX
|
%%
|
||
|
%% This is file `musixcrd.tex',
|
||
|
%% generated with the docstrip utility.
|
||
|
%%
|
||
|
%% The original source files were:
|
||
|
%%
|
||
|
%% musixcrd.dtx
|
||
|
%%
|
||
|
%% IMPORTANT NOTICE:
|
||
|
%%
|
||
|
%% For the copyright see the source file.
|
||
|
%%
|
||
|
%% Any modified versions of this file must be renamed
|
||
|
%% with new filenames distinct from musixcrd.tex.
|
||
|
%%
|
||
|
%% For distribution of the original source see the terms
|
||
|
%% for copying and modification in the file musixcrd.dtx.
|
||
|
%%
|
||
|
%% This generated file may be distributed as long as the
|
||
|
%% original source files, as listed above, are part of the
|
||
|
%% same distribution. (The sources need not necessarily be
|
||
|
%% in the same archive or directory.)
|
||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||
|
%% musixcrd - typsetting chord symbols with %%
|
||
|
%% musixtex %%
|
||
|
%% main source file contains code, doc, and examples %%
|
||
|
%% $Id: musixcrd.dtx,v 1.7 2004/11/02 13:13:41 hennig Exp $ %%
|
||
|
%% copyright 2004 , Robert Hennig %%
|
||
|
%% this code is licensed in terms of the %%
|
||
|
%% GNU Public License %%
|
||
|
%% %%
|
||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||
|
\ifx\makeatletter\undefined\def\makeatletter{\catcode`\@=11\relax}\fi
|
||
|
\ifx\makeatother\undefined\def\makeatother{\catcode`\@=12\relax}\fi
|
||
|
|
||
|
\makeatletter% ^^A allows to use @ as ordinary letter
|
||
|
\def\crddefaultheight{10}
|
||
|
\def\crdtranspose{0}
|
||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||
|
\def\crd@append#1\to#2{%
|
||
|
\toks0=\expandafter{#1}\toks2=\expandafter{#2}%
|
||
|
\edef#2{\the\toks2 \the\toks0}}
|
||
|
\def\crd@prepend#1\by#2{%
|
||
|
\toks0=\expandafter{#1}\toks2=\expandafter{#2}%
|
||
|
\edef#1{\the\toks2 \the\toks0}}
|
||
|
\def\crd@movetoken#1\to#2{%
|
||
|
\ifx#1\empty\else\expandafter\crd@moveoff#1\crd@moveoff#1#2\fi}%
|
||
|
\def\crd@moveoff#1#2\crd@moveoff#3#4{\def#3{#2}\crd@prepend#4\by#1}
|
||
|
\newif\ifcrd@parsematched% true if parse matched
|
||
|
\newcount\crd@parsedepth% internal register
|
||
|
|
||
|
\def\crd@parse#1\for#2{% parse tokens #1 for occurence of items of table #2
|
||
|
\crd@parsedepth=1 % default if not defined
|
||
|
\expandafter\ifx\csname#2depth\endcsname\relax\else%
|
||
|
\crd@parsedepth=\csname#2depth\endcsname%
|
||
|
\fi%
|
||
|
\def\stack{}%\def\crd@parseresult{}
|
||
|
\crd@parsematchedfalse% initialisation
|
||
|
\crd@parser#1\for#2% call the recursive part
|
||
|
}
|
||
|
\def\crd@parser#1\for#2{% recursive part of parser
|
||
|
\ifx#1\empty\else% is list filled ?
|
||
|
\ifnum\crd@parsedepth>0 % and do we have to read more chars into stack
|
||
|
\advance\crd@parsedepth by-1 %
|
||
|
\crd@movetoken#1\to\stack%
|
||
|
\crd@parser#1\for#2% recursive call
|
||
|
\ifcrd@parsematched\else% if still not matched
|
||
|
\expandafter\ifx\csname#2\stack\endcsname\relax% does item match
|
||
|
\crd@movetoken\stack\to#1% no match, put char back to source
|
||
|
\else% match
|
||
|
\csname#2\stack\endcsname%
|
||
|
\crd@parsematchedtrue% signal success
|
||
|
\fi%
|
||
|
\fi%
|
||
|
\fi%
|
||
|
\fi%
|
||
|
}
|
||
|
\newcount\crd@vshift%
|
||
|
\newcount\crd@hshift%
|
||
|
\def\crd@number{crd@number}%
|
||
|
\def\crd@numberdepth{2}%
|
||
|
\expandafter\def\csname\crd@number0\endcsname{\crd@numberval=0 }%
|
||
|
\expandafter\def\csname\crd@number1\endcsname{\crd@numberval=1 }%
|
||
|
\expandafter\def\csname\crd@number2\endcsname{\crd@numberval=2 }%
|
||
|
\expandafter\def\csname\crd@number3\endcsname{\crd@numberval=3 }%
|
||
|
\expandafter\def\csname\crd@number4\endcsname{\crd@numberval=4 }%
|
||
|
\expandafter\def\csname\crd@number5\endcsname{\crd@numberval=5 }%
|
||
|
\expandafter\def\csname\crd@number6\endcsname{\crd@numberval=6 }%
|
||
|
\expandafter\def\csname\crd@number7\endcsname{\crd@numberval=7 }%
|
||
|
\expandafter\def\csname\crd@number8\endcsname{\crd@numberval=8 }%
|
||
|
\expandafter\def\csname\crd@number9\endcsname{\crd@numberval=9 }%
|
||
|
\expandafter\def\csname\crd@number1-\endcsname{\crd@numberval=-1 }%
|
||
|
\expandafter\def\csname\crd@number2-\endcsname{\crd@numberval=-2 }%
|
||
|
\expandafter\def\csname\crd@number3-\endcsname{\crd@numberval=-3 }%
|
||
|
\expandafter\def\csname\crd@number4-\endcsname{\crd@numberval=-4 }%
|
||
|
\expandafter\def\csname\crd@number5-\endcsname{\crd@numberval=-5 }%
|
||
|
\expandafter\def\csname\crd@number6-\endcsname{\crd@numberval=-6 }%
|
||
|
\expandafter\def\csname\crd@number7-\endcsname{\crd@numberval=-7 }%
|
||
|
\expandafter\def\csname\crd@number8-\endcsname{\crd@numberval=-8 }%
|
||
|
\expandafter\def\csname\crd@number9-\endcsname{\crd@numberval=-9 }%
|
||
|
\newcount\crd@quint% register used to represent notes in the circle of
|
||
|
\def\crd@quintval{crd@quintval}%
|
||
|
\def\crd@quintvalA{\crd@quint=3 }% A
|
||
|
\def\crd@quintvalB{\crd@quint=5 }% B
|
||
|
\def\crd@quintvalC{\crd@quint=0 }% C
|
||
|
\def\crd@quintvalD{\crd@quint=2 }% D
|
||
|
\def\crd@quintvalE{\crd@quint=4 }% E
|
||
|
\def\crd@quintvalF{\crd@quint=-1 }% F
|
||
|
\def\crd@quintvalG{\crd@quint=1 }% G
|
||
|
\def\crd@quintmod{crd@quintmod}
|
||
|
\def\crd@quintmoddepth{2}
|
||
|
\def\crd@quintmods{\advance\crd@quint by7 }% sharp
|
||
|
\def\crd@quintmodf{\advance\crd@quint by-7 }% flat
|
||
|
\def\crd@quintmodsd{\advance\crd@quint by14 }% double sharp
|
||
|
\def\crd@quintmodfd{\advance\crd@quint by-14 }% double flat
|
||
|
\def\crd@note{crd@note}
|
||
|
\expandafter\def\csname\crd@note3\endcsname{A}
|
||
|
\expandafter\def\csname\crd@note5\endcsname{B}
|
||
|
\expandafter\def\csname\crd@note0\endcsname{C}
|
||
|
\expandafter\def\csname\crd@note2\endcsname{D}
|
||
|
\expandafter\def\csname\crd@note4\endcsname{E}
|
||
|
\expandafter\def\csname\crd@note-1\endcsname{F}
|
||
|
\expandafter\def\csname\crd@note1\endcsname{G}
|
||
|
\def\crd@notelow{-1} % lowest quint without accidental
|
||
|
\def\crd@notehigh{5} % highest quint without accidental
|
||
|
\def\crd@sharp{\sharp}
|
||
|
\def\crd@flat{\flat}
|
||
|
\def\crd@doublesharp{\sharp\sharp}
|
||
|
\def\crd@doubleflat{\flat\flat}
|
||
|
\def\crd@parsenote#1#2{% parse input results: #1
|
||
|
\def#1{}\def#2{}%
|
||
|
\crd@parse\crd@input\for\crd@quintval%
|
||
|
\ifcrd@parsematched% we got an valid note
|
||
|
\crd@parse\crd@input\for\crd@quintmod%
|
||
|
\advance\crd@quint by\crdtranspose \relax% transposition, space is needed!
|
||
|
\crd@enharmonic%
|
||
|
\ifnum\crd@quint>\crd@notehigh % sharps ?
|
||
|
\advance\crd@quint by-7 %
|
||
|
\ifnum\crd@quint>\crd@notehigh % double sharp ?
|
||
|
\advance\crd@quint by-7 %
|
||
|
\ifnum\crd@quint>\crd@notehigh % too much sharps !
|
||
|
\relax ERROR:too much sharps%
|
||
|
\else\edef#2{\crd@doublesharp}\fi%
|
||
|
\else\edef#2{\crd@sharp}\fi%
|
||
|
\fi%
|
||
|
\ifnum\crd@quint<\crd@notelow % flats ?
|
||
|
\advance\crd@quint by7 %
|
||
|
\ifnum\crd@quint<\crd@notelow % double flat ?
|
||
|
\advance\crd@quint by7 %
|
||
|
\ifnum\crd@quint<\crd@notelow % too much flats !
|
||
|
\relax ERROR:too much flats%
|
||
|
\else\edef#2{\crd@doubleflat}\fi%
|
||
|
\else\edef#2{\crd@flat}\fi%
|
||
|
\fi%
|
||
|
\expandafter\ifx\csname\crd@note\number\crd@quint\endcsname\relax%
|
||
|
ERROR:notename for (\number\crd@quint) is not defined.
|
||
|
\fi%
|
||
|
\edef#1{\csname\crd@note\number\crd@quint\endcsname}% set note
|
||
|
\fi%
|
||
|
}
|
||
|
\def\crd@enharmonic{}%
|
||
|
\def\crd@qualinit{%
|
||
|
\def\crd@lo{}% lower extensions
|
||
|
\def\crd@up{}% upper extensioins
|
||
|
\def\crd@alt{}% alterations
|
||
|
}
|
||
|
\def\crd@qual{crd@qual}%
|
||
|
\def\crd@qualdepth{2}
|
||
|
\def\crd@qualm{\crd@append{\crd@smalltype m}\to\crd@lo}% minor
|
||
|
\def\crd@qualM{\crd@append{\crd@capitaltype M}\to\crd@lo}% major7
|
||
|
\expandafter\def\csname\crd@qual5+\endcsname% aug. 5
|
||
|
{\crd@append{+}\to\crd@lo}
|
||
|
\expandafter\def\csname\crd@qual6\endcsname% 6
|
||
|
{\crd@append{\crd@numbertype6}\to\crd@up}
|
||
|
\expandafter\def\csname\crd@qual7\endcsname% dominant 7
|
||
|
{\crd@append{\crd@numbertype7}\to\crd@up}
|
||
|
\def\crd@quald{\crd@append{\crd@dim}\to\crd@up}% diminished
|
||
|
\def\crd@qualh{\crd@append{\crd@hdim}\to\crd@up}% half diminished
|
||
|
\expandafter\def\csname\crd@qual9-\endcsname% -9
|
||
|
{\crd@append{\crd@numbertype\crd@numberflat9}\to\crd@alt}
|
||
|
\expandafter\def\csname\crd@qual9+\endcsname% +9
|
||
|
{\crd@append{\crd@numbertype\crd@numbersharp9}\to\crd@alt}
|
||
|
\def\crd@skipcrdnote{crd@skipcrdnote}
|
||
|
\expandafter\def\csname\crd@skipcrdnote/\endcsname{}
|
||
|
\def\crd@parsecrd{%
|
||
|
\crd@vshift=0 %
|
||
|
\let\crd@numberval=\crd@vshift%
|
||
|
\crd@parse\crd@input\for\crd@number%
|
||
|
\crd@hshift=0 %
|
||
|
\let\crd@numberval=\crd@hshift%
|
||
|
\crd@parse\crd@input\for\crd@number%
|
||
|
\def\crd@crdnote{}% chord note
|
||
|
\def\crd@crdacc{}% chord note accidental
|
||
|
\def\crd@bassnote{}% bass note
|
||
|
\def\crd@bassacc{}% bass note accidental
|
||
|
\crd@qualinit% initialize qualifiers
|
||
|
\let\crd@flat=\crd@noteflat%
|
||
|
\let\crd@doubleflat=\crd@notedoubleflat%
|
||
|
\let\crd@sharp=\crd@notesharp%
|
||
|
\let\crd@doublesharp=\crd@notedoublesharp%
|
||
|
\crd@parsenote\crd@crdnote\crd@crdacc% read chord note
|
||
|
\loop\crd@parse\crd@input\for\crd@qual% read qualifiers
|
||
|
\ifcrd@parsematched\repeat%
|
||
|
\crd@parse\crd@input\for\crd@skipcrdnote% skip eventually
|
||
|
\let\crd@flat=\crd@bassflat%
|
||
|
\let\crd@doubleflat=\crd@bassdoubleflat%
|
||
|
\let\crd@sharp=\crd@basssharp%
|
||
|
\let\crd@doublesharp=\crd@bassdoublesharp%
|
||
|
\crd@parsenote\crd@bassnote\crd@bassacc% read bass note
|
||
|
\crd@formatcrd\hfil% call rendering
|
||
|
}
|
||
|
\def\crd@crddelim{crd@crddelim}%
|
||
|
\expandafter\def\csname\crd@crddelim,\endcsname{}%
|
||
|
\def\crd@parsecrds{%
|
||
|
\crd@parsecrd%
|
||
|
\crd@parse\crd@input\for\crd@crddelim%
|
||
|
\ifcrd@parsematched\crd@parsecrds\fi%
|
||
|
}
|
||
|
\def\c#1 {\def\crd@input{#1}\crd@output\crd@parsecrds}
|
||
|
\def\crd@fontstylea{%
|
||
|
\font\crd@eightrm=cmr8
|
||
|
\font\crd@eightit=cmmi8
|
||
|
\font\crd@seventeenrm=cmr17
|
||
|
\font\crd@fourteenrm=cmr14
|
||
|
\font\crd@twelverm=cmr12
|
||
|
\font\crd@ninerm=cmr9
|
||
|
\font\crd@smallninerm=cmr9 scaled 900
|
||
|
\font\crd@bigninerm=cmr9 scaled 1100
|
||
|
\let\crd@notetype=\crd@seventeenrm
|
||
|
\def\crd@noteflat{\raise0.6ex\hbox{\kern-0.085em\musictwenty2}}
|
||
|
\def\crd@notedoubleflat{\raise0.6ex\hbox{\kern-0.085em\musictwenty3}}
|
||
|
\def\crd@notesharp{\raise0.8ex\hbox{\musictwenty4}}
|
||
|
\def\crd@notedoublesharp{\raise0.8ex\hbox{\musictwenty5}}
|
||
|
\let\crd@basstype=\crd@fourteenrm
|
||
|
\def\crd@bassflat{\raise.5ex\hbox{\musicsixteen2}}
|
||
|
\def\crd@bassdoubleflat{\raise0.6ex\hbox{\kern-0.085em\musicsixteen3}}
|
||
|
\def\crd@basssharp{\raise1ex\hbox{\musicsixteen4}}
|
||
|
\def\crd@bassdoublesharp{\raise0.8ex\hbox{\musicsixteen5}}
|
||
|
\let\crd@numbertype=\crd@ninerm
|
||
|
\def\crd@numberflat{\raise.5ex\hbox{\musiceleven2}}
|
||
|
\def\crd@numbersharp{\raise1ex\hbox{\musiceleven4}}
|
||
|
\def\crd@numberminus{\crd@ninerm-}
|
||
|
\def\crd@numberplus{\crd@ninerm+}
|
||
|
\let\crd@capitaltype=\crd@smallninerm % capitals
|
||
|
\let\crd@smalltype=\crd@bigninerm % small
|
||
|
\def\crd@hdim{\crd@eightit$\circ$\kern-4.4pt\raise.9pt\hbox{\crd@eightrm/}}
|
||
|
\def\crd@dim{\crd@eightit$\circ$}
|
||
|
}
|
||
|
\def\crd@formatcrda{%
|
||
|
\hbox{\kern\crd@hshift\elemskip\raise\crd@vshift\internote\hbox{%
|
||
|
{\crd@notetype\crd@crdnote\crd@crdacc}%
|
||
|
\vbox{%
|
||
|
\hbox{%
|
||
|
\crd@up%
|
||
|
\ifx\crd@alt\empty\else\crd@numbertype(\crd@alt\crd@numbertype)\fi%
|
||
|
}%
|
||
|
\nointerlineskip\vskip1pt%
|
||
|
\hbox{\vphantom{\crd@capitaltype M}\crd@lo}}%
|
||
|
\ifx\crd@bassnote\empty\else%
|
||
|
{\crd@basstype/%
|
||
|
\lower0.5ex\hbox{\kern-0.17em \crd@bassnote\crd@bassacc}}%
|
||
|
\fi%\
|
||
|
}}
|
||
|
}
|
||
|
\let\crd@formatcrd=\crd@formatcrda
|
||
|
\crd@fontstylea
|
||
|
\def\crd@musixOutput#1{\hbox{\zchar{\crddefaultheight}{\hbox to\elemskip{#1\hss}}}}
|
||
|
\let\crd@output=\crd@musixOutput
|
||
|
\makeatother
|
||
|
\endinput
|
||
|
%%
|
||
|
%% End of file `musixcrd.tex'.
|