% 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}%
}%