Modification : un tas de trucs :P.
authorJulien Moutinho <julm@savines.alpes.fr.eu.org>
Sat, 25 Dec 2010 16:19:24 +0000 (17:19 +0100)
committerJulien Moutinho <julm@savines.alpes.fr.eu.org>
Sat, 25 Dec 2010 16:19:24 +0000 (17:19 +0100)
violon.sty

index e3d6948188a4f68049ac040ebe730f052a8eec1b..6c51fbdf3a30dfad49b57afa56b86f760d5cda65 100644 (file)
@@ -1,5 +1,5 @@
 % This file is part of Violon, a violin score engine.
-% Copyright (C) 2009  Julien Moutinho
+% Copyright (C) 2009-2010  Julien Moutinho
 %
 % This program is free software: you can redistribute it and/or modify
 % it under the terms of the GNU General Public License as published
        \gdef\ssmall{%
                \@setfontsize\ssmall\@viiipt\@ixpt}%
        \gdef\vlnfingerfont{%
+               \expandafter\color{colVlnBowFingerCord\vlnlastcord}%
                \fontfamily{pnc}\bfseries\sssmall}%
        \gdef\vlncordfont{%
+               \color{colVlnBowCord}%
+               \fontfamily{pnc}\bfseries\sssmall}%
+       \gdef\vlnnamefont{%
+               \expandafter\color{colVlnBowNameOctave\the\vlnlastposoctave}%
                \fontfamily{pnc}\scshape\ssssmall}%
+       \gdef\vlnpartfont{%
+               \color{colVlnPart}%
+               \fontfamily{pnc}\bfseries\sssmall}%
        \gdef\vlntimefont{%
                \fontfamily{pnc}\bfseries\ssssmall}%
 % Algèbre
 % Moteur
        % Constantes
                % Couleurs
-                       \definecolor{colVlnBowU}{rgb}{0.24,0.92,0.24}%
-                       \definecolor{colVlnBowD}{rgb}{1,0,0}%
-                       \definecolor{colVlnBowN}{gray}{0}%
+                       %\definecolor{colVlnBowU}{rgb}{0.24,0.92,0.24}%
+                       %\definecolor{colVlnBowD}{rgb}{0.80,0,0}%
+                       %\definecolor{colVlnBowU}{rgb}{0.30,0.75,0.75}%
+                       \definecolor{colVlnBowU}{gray}{0.50}%
+                       \definecolor{colVlnBowD}{gray}{0}%
+                       \definecolor{colVlnBowN}{gray}{1}%
+                       \definecolor{colVlnBowCord}{rgb}{0,1,0}%
+                       \definecolor{colVlnBowFinger}{rgb}{0,0,0}%
+                       \definecolor{colVlnBowFingerCord0}{rgb}{0,0,0}%
+                       \definecolor{colVlnBowFingerCord1}{rgb}{0,0.66,0}%
+                       \definecolor{colVlnBowFingerCord2}{rgb}{0,0,1}%
+                       \definecolor{colVlnBowFingerCord3}{rgb}{1,0,0}%
+                       \definecolor{colVlnBowName}{rgb}{1,0,0}%
+                       \definecolor{colVlnBowNameOctave0}{rgb}{0,0,0}%
+                       \definecolor{colVlnBowNameOctave1}{rgb}{0,0.66,0}%
+                       \definecolor{colVlnBowNameOctave2}{rgb}{0,0,1}%
+                       \definecolor{colVlnBowNameOctave3}{rgb}{1,0,0}%
                        \definecolor{colVlnLineHalfTone}{gray}{0.90}%
                        \definecolor{colVlnLineHalfToneBase}{gray}{0.50}%
+                       \definecolor{colVlnPart}{gray}{0}%
        % Portée
                % Déclarations
                        \newdimen\vlnstaffhalftonelinevdim%
                        \newskip\vlnstaffhalftonelinevskip%
                        \newskip\vlnstaffvdim%
+                       \def\vlnstaffvdimpre{3.25pt}%
                        \newskip\vlnstaffintervskip%
                        \newskip\vlnstaffvskip%
                % Initialisations
                        \vlnstafffivehalftonelines%
                        \vlnstafffivehalftonelines%
                        \vlnstafffivehalftonelines%
+                       \vlnstafffivehalftonelines%
                 }%
                \def\vlnstaff{%
+                       \nobreak\vskip\vlnstaffvdimpre%
                        \nobreak\vskip\vlnstaffvdim%
                        \advance\vlnstaffvskip by\vlnstaffvdim\relax%
                        \count@\vlnstaffvskip\relax%
                                \newcount\vlnlastfinger%
                                \newcount\vlnlastposbase%
                                \newcount\vlnlastposunit%
+                               \newcount\vlnlastposoctave%
+                               \def\vlnlastletter{}%
+                               \def\vlnlastshift{}%
                                \newcount\vlnnotepos%
                                \newcount\vlnlastpos%
                % Initialisations
                        \advance\vlnnotevdim by\vlnnotevdimmore%
                        \advance\vlnnotevdim by\vlnnotevdimmore%
                        \def\vlnlastbow{}%
+                       \def\vlnlastrealbow{}%
                        \def\vlnlastcord{}%
                        \def\vlnlasttimenum{}%
                        \def\vlnlasttimeden{}%
-                       \def\vlnnotehdimmodetim{1}%
+                       \def\vlnnotehdimmodetim{t}%
                        \def\vlnnotehdimmodetxt{}%
                        \parindent=0pt\relax%
                        \parskip=0pt\relax%
                \def\vlnlastfingerpos{%
                        \csname vlnlastfingerpos\romannumeral\vlnlastpos\endcsname%
                 }%
+               \def\vlnlastposname{%
+                       \csname vlnlastposname\romannumeral\vlnlastpos\endcsname%
+                }%
                \def\vlntimefrac#1/#2{%
                        \leavevmode%
                        \hbox{#1}%
                        \multiply\vlnnotevskip by#1\relax%
                        \advance\vlnnotevskip by-\vlnnotevdimmore\relax%
                        \nobreak\vskip\vlnnotevskip\relax%
-                       \nobreak\vskip-\vlnnotevskip\relax%
-                       \nobreak\vskip\vlnnotevskip\relax%
                        \vrule depth 0pt height 0pt width \vlnnotehskip\relax%
                        \setbox0=#3%
                        \advance\vlnnotevskip by \ht0\relax%
                \def\vlnnextnote{%
                        \advance\vlnnotehskip by\vlnnotehdim\relax%
                 }%
-               \def\vlnnotedraw crd#1pos#2fgr#3bow#4tim#5#6{%
+               \def\vlnnotedraw crd#1pos#2fgr#3bow#4nam#5tim#6#7{%
                        % Position
                                \ifthenelse{\equal{#2}{.}}%
                                 {}%
                                 {\vlnlastpos#2\relax}%
                        % Durée
-                               \ifthenelse{\equal{#5}{.}}%
-                                {}%
-                                {\def\vlnlasttimenum{#5}}%
                                \ifthenelse{\equal{#6}{.}}%
                                 {}%
-                                {\def\vlnlasttimeden{#6}}%
+                                {\def\vlnlasttimenum{#6}}%
+                               \ifthenelse{\equal{#7}{.}}%
+                                {}%
+                                {\def\vlnlasttimeden{#7}}%
                                \vlnnotehdim\vlnnotehdimbase%
                                \ifthenelse{\equal{}{\vlnnotehdimmodetim}}%
                                 {}%
                                        \count@\vlnnotehskip\relax%
                                        \advance\count@ by\vlnnotehdim\relax%
                                        \ifnum\count@>\vlnstaffhsize\vlnstaff\fi%
-                               \ifthenelse{\equal{#5/#6}{\vlnlasttimenum/\vlnlasttimeden}}%
+                               \def\vlnnotehdimmodetxtdo{%
+                                       \vbox to0pt{%
+                                               \ifthenelse{\equal{}{\vlnnotehdimmodetxt}}%
+                                                {\null}%
+                                                {%
+                                                       \setbox0=\hbox{%
+                                                               \ifthenelse{\equal{\vlnlasttimeden}{1}}%
+                                                                {{\vlntimefont{\vlnlasttimenum}}}%
+                                                                {\vlntimefrac{\vlntimefont{\vlnlasttimenum}}/{\vlntimefont{\vlnlasttimeden}}}%
+                                                        }%
+                                                       \nobreak\vskip\vlnnotevdim\relax%
+                                                       \nobreak\vskip0.2mm\relax%
+                                                       \nobreak\hskip\vlnnotehdim\relax%
+                                                       \nobreak\hskip-\wd0\relax%
+                                                       \dp0=0pt\relax%
+                                                       \box0}%
+                                        }%
+                                }%
+                               \ifthenelse{\equal{#6/#7}{\vlnlasttimenum/\vlnlasttimeden}}%
                                 {}%
                                 {\vlndoatnote{\vlnlastpos}%
                                         {}%
-                                        {%
-                                               \ifthenelse{\equal{}{\vlnnotehdimmodetxt}}%
-                                                {}%
-                                                {\vbox to0pt{%
-                                                               \setbox0=\hbox{%
-                                                                       \ifthenelse{\equal{\vlnlasttimeden}{1}}%
-                                                                        {{\vlntimefont{\vlnlasttimenum}}}%
-                                                                        {\vlntimefrac{\vlntimefont{\vlnlasttimenum}}/{\vlntimefont{\vlnlasttimeden}}}%
-                                                                }%
-                                                               \nobreak\vskip\vlnnotevdim\relax%
-                                                               \nobreak\vskip0.2mm\relax%
-                                                               \nobreak\hskip\vlnnotehdim\relax%
-                                                               \nobreak\hskip-\wd0\relax%
-                                                               \dp0=0pt\relax%
-                                                               \box0}%
-                                                }%
-                                        }%
+                                        {\vlnnotehdimmodetxtdo}%
                                         {}%
                                 }%
                        % Archet
                                \ifthenelse{\equal{#4}{C}}%
-                                        {\ifthenelse{\equal{U}{\vlnlastbow}}%
+                                        {\ifthenelse{\equal{U}{\vlnlastrealbow}}%
                                                 {\def\vlnlastbow{D}}%
                                                 {\def\vlnlastbow{U}}}%
                                         {\ifthenelse{\equal{#4}{.}}%
                                                {}%
                                                {\def\vlnlastbow{#4}}}%
+                               \ifthenelse{\equal{\vlnlastbow}{N}}%
+                                        {}%
+                                        {\edef\vlnlastrealbow{\vlnlastbow}}%
                                \vlndoatnote{\vlnlastpos}%
                                 {\begingroup\expandafter\color{colVlnBow\vlnlastbow}}%
                                 {%
                                         }%
                                 }%
                                 {\endgroup}%
+                       % Cordes
+                               \ifthenelse{\equal{#1}{\vlnlastcord}}%
+                                {}%
+                                {\ifthenelse{\equal{#1}{.}}%
+                                        {}%
+                                        {\def\vlnlastcord{#1}%
+                                               %\vlndoatnote{\vlnlastpos}%
+                                               % {}%
+                                               % {\vbox to0pt{%
+                                               %       \setbox0=\hbox{{\vlncordfont{%
+                                               %               \count@#1\relax%
+                                               %               \advance\count@ by1\relax%
+                                               %               \ifcase\count@%
+                                               %               \or 0\or 1\or 2\or 3%
+                                               %               \fi}}}%
+                                               %       %\nobreak\vskip\vlnnotevdim\relax%
+                                               %       %\nobreak\vskip0.2mm\relax%
+                                               %       \nobreak\vskip-0.2mm\relax%
+                                               %       \nobreak\vskip-\ht0\relax%
+                                               %       \nobreak\hskip\vlnnotehdim\relax%
+                                               %       \nobreak\hskip-\wd0\relax%
+                                               %       \box0}}%
+                                               % {}%
+                                        }%
+                                }%
                        % Doigts
                                \ifthenelse{\equal{#3}{.}}%
                                 {}%
                                 {\vlnlastfinger#3\relax}%
-                               \ifthenelse{\equal{\the\vlnlastfinger}{\vlnlastfingerpos}\AND\equal{\the\vlnlastpos}{\vlnlastposfinger}}%
+                               \ifthenelse{\equal{\vlnlastbow}{N}%
+                               %       \OR\equal{\the\vlnlastfinger}{\vlnlastfingerpos}%
+                               %       \AND\equal{\the\vlnlastpos}{\vlnlastposfinger}%
+                               %       \AND\equal{\the\vlnlastcord}{\thevlnlastlastcord}%
+                                }%
                                 {}%
                                 {%
-                                       \expandafter\edef\csname vlnlastfingerpos\romannumeral\vlnlastpos\endcsname{\the\vlnlastfinger}\relax%
-                                       \expandafter\edef\csname vlnlastposfinger\romannumeral\vlnlastfinger\endcsname{\the\vlnlastpos}\relax%
+                                       \expandafter\edef\csname vlnlastfingerpos\romannumeral\vlnlastpos\endcsname{\the\vlnlastfinger}%
+                                       \expandafter\edef\csname vlnlastposfinger\romannumeral\vlnlastfinger\endcsname{\the\vlnlastpos}%
                                        \vlndoatnote{\vlnlastpos}%
                                         {}%
                                         {\vbox to0pt{%
                                                \setbox0=\hbox{{\vlnfingerfont{\the\vlnlastfinger}}}%
                                                \nobreak\vskip-0.2mm\relax%
-                                               \vskip-\ht0\relax%
+                                               \nobreak\vskip-\ht0\relax%
                                                %\vskip-\dp0\relax%
                                                \dp0=0pt\relax% NOTE: to prevent fonts like pnc to mess up the vertical alignment
                                                \box0}}%
                                         {}%
                                 }%
-                       % Cordes
-                               \ifthenelse{\equal{#1}{\vlnlastcord}}%
+                       % Nom
+                               \ifthenelse{\equal{#5}{\vlnlastname}\AND\equal{#2}{\vlnlastpos}}%
                                 {}%
-                                {\ifthenelse{\equal{#1}{.}}%
+                                {%
+                                       \def\vlnlastname{#5}%
+                                       \expandafter\edef\csname vlnlastposname\romannumeral\vlnlastpos\endcsname{#5}%
+                                       \ifthenelse{\equal{\vlnlastbow}{N}}%
                                         {}%
-                                        {\def\vlnlastcord{#1}%
+                                        {%\edef\vlnlastname{#5}%
                                                \vlndoatnote{\vlnlastpos}%
                                                 {}%
                                                 {\vbox to0pt{%
-                                                       \setbox0=\hbox{{\vlncordfont{%
-                                                               \count@#1\relax%
-                                                               \advance\count@ by1\relax%
-                                                               \ifcase\count@%
-                                                               \or 0\or I\or II\or III%
-                                                               \fi}}}%
+                                                       \setbox0=\hbox{{\vlnnamefont{#5}}}%
                                                        \nobreak\vskip\vlnnotevdim\relax%
                                                        \nobreak\vskip0.2mm\relax%
+                                                       \dp0=0pt\relax% NOTE: to prevent fonts like pnc to mess up the vertical alignment
                                                        \box0}}%
                                                 {}%
                                         }%
                                 }%
-                       \vlnnextnote%
-                       \nointerlineskip%
+                       \@ifnextchar&{%
+                               \def\next&{%
+                                       \nointerlineskip%
+                                }%
+                               \next%
+                        }{%
+                               \vlnnextnote%
+                               \nointerlineskip%
+                        }%
                 }%
                % Cordes
                        \def\vlncordposi{0}%    G
                        \def\vlncordposiv{21}%  E
                % Crochets
                        \def\vlnnotehook{}%
-               \def\vlnnotedrawtone#1#2#3#4#5{%
+               % Demi-tons alphabétiques sans modification
+                       \expandafter\def\csname vlnnotetoneofnameG=\endcsname{0}%
+                       \expandafter\def\csname vlnnotetoneofnameG+\endcsname{1}%
+                       \expandafter\def\csname vlnnotetoneofnameA-\endcsname{1}%
+                       \expandafter\def\csname vlnnotetoneofnameA=\endcsname{2}%
+                       \expandafter\def\csname vlnnotetoneofnameA+\endcsname{3}%
+                       \expandafter\def\csname vlnnotetoneofnameB-\endcsname{3}%
+                       \expandafter\def\csname vlnnotetoneofnameB=\endcsname{4}%
+                       \expandafter\def\csname vlnnotetoneofnameB+\endcsname{5}%
+                       \expandafter\def\csname vlnnotetoneofnameC-\endcsname{4}%
+                       \expandafter\def\csname vlnnotetoneofnameC=\endcsname{5}%
+                       \expandafter\def\csname vlnnotetoneofnameC+\endcsname{6}%
+                       \expandafter\def\csname vlnnotetoneofnameD-\endcsname{6}%
+                       \expandafter\def\csname vlnnotetoneofnameD=\endcsname{7}%
+                       \expandafter\def\csname vlnnotetoneofnameD+\endcsname{8}%
+                       \expandafter\def\csname vlnnotetoneofnameE-\endcsname{8}%
+                       \expandafter\def\csname vlnnotetoneofnameE=\endcsname{9}%
+                       \expandafter\def\csname vlnnotetoneofnameE+\endcsname{10}%
+                       \expandafter\def\csname vlnnotetoneofnameF-\endcsname{9}%
+                       \expandafter\def\csname vlnnotetoneofnameF=\endcsname{10}%
+                       \expandafter\def\csname vlnnotetoneofnameF+\endcsname{11}%
+                       \expandafter\def\csname vlnnotetoneofnameG-\endcsname{11}%
+               % Modifications
+                       \expandafter\def\csname vlnshiftsymbol-\endcsname{$\flat$}%
+                       \expandafter\def\csname vlnshiftsymbol=\endcsname{}%
+                       \expandafter\def\csname vlnshiftsymbol+\endcsname{$\sharp$}%
+               \def\vlnnotedrawtonebyname#1#2#3#4#5#6{%
                        \ifthenelse{\equal{#1}{.}}%
                         {}%
-                        {\vlnlastposbase#1\relax}%
+                        {\vlnlastposoctave#1\relax}%
                        \ifthenelse{\equal{#2}{.}}%
                         {}%
-                        {\vlnlastposunit#2\relax}%
+                        {\def\vlnlastletter{#2}}%
                        \ifthenelse{\equal{#3}{.}}%
-                        {\vlnnotepos\vlnlastcord\relax}%
-                        {\vlnnotepos#3\relax}%
-                       \advance\vlnnotepos by1\relax%
-                       \expandafter\vlnnotepos-\csname vlncordpos\romannumeral\vlnnotepos\endcsname\relax%
-                       \ifthenelse{\equal{\the\vlnlastposbase}{0}}%
-                        {\advance\vlnnotepos by\vlnlastposunit\relax}%
-                        {\edef\tmp{\the\vlnlastposbase\the\vlnlastposunit}%
-                               \advance\vlnnotepos by\tmp\relax}%
-                       \vlnnotehook%
-                       \vlnnotedraw crd{#3}pos{\the\vlnnotepos}fgr{#4}bow{#5}tim%
-                }%
-               \def\vlnnoteshift#1{%
-                       \count@\vlnnotepos%
-                       \modulo{\count@}{#1}%
+                        {}%
+                        {\def\vlnlastshift{#3}}%
+                       \edef\tmp{\csname vlnnotetoneofname\vlnlastletter\vlnlastshift\endcsname}%
+                       \vlnnotepos\tmp%
+                       \count@\vlnlastposoctave\relax%
+                       \multiply\count@ by12\relax%
+                       \advance\vlnnotepos by\count@%
+                       \ifthenelse{\equal{#4}{.}}%
+                        {\count@\vlnlastcord}%
+                        {\count@#4}%
                        \advance\count@ by1\relax%
-                       \edef\tmp{\csname vlnnoteshift\romannumeral\count@\endcsname}%
-                       \ifthenelse{\equal{\tmp}{}}%
+                       \advance\vlnnotepos by-\csname vlncordpos\romannumeral\count@\endcsname%
+                       \edef\nam{\vlnlastletter\csname vlnshiftsymbol\vlnlastshift\endcsname}%
+                       \vlnnotedraw crd{#4}pos{\the\vlnnotepos}fgr{#5}bow{#6}nam{\nam}tim%
+                }%
+               \def\vlnpart#1{%
+                       \vlndoatnote{0}%
+                        {}%
+                        {\vbox to0pt{%
+                               \setbox0=\hbox{{\vlnpartfont{#1}}}%
+                               \nobreak\vskip-0.2mm\relax%
+                               \nobreak\vskip-\ht0\relax%
+                               \dp0=0pt\relax% NOTE: to prevent fonts like pnc to mess up the vertical alignment
+                               \box0}}%
+                        {}%
+                }%
+               \def\vlnbar{%
+                       \vlndoatnote{0}%
+                        {}%
+                        {\vbox to0pt{%
+                               \setbox0=\hbox{\color{colVlnLineHalfToneBase}\vrule depth 0pt height \vlnstaffvdim width 0.1pt\relax}%
+                               \nobreak\vskip\vlnnotevdimmore\relax%
+                               \dp0=0pt\relax%
+                               \box0}}%
                         {}%
-                        {\advance\vlnnotepos by\tmp\relax}%
                 }%