summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/lyluatex/lyluatex.sty
blob: f3cc35dbf222819137ca069a2b330025804c4162 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
\ProvidesPackage{lyluatex}

% Dépendances
\RequirePackage{luatexbase}
\RequirePackage{luaotfload}
\RequirePackage{kvoptions}
\RequirePackage{graphicx}
\RequirePackage{keycommand}
\RequirePackage{environ}
\RequirePackage{currfile}
% Options
\DeclareStringOption[lilypond]{program}[lilypond]
\ProcessKeyvalOptions*
% Script lua
\directlua{dofile(kpse.find_file("lyluatex.lua"))}
\directlua{LILYPOND = '\lyluatex@program'}

% Une tricherie un peu sale pour récupérer la largeur de ligne
\let\bs\textbackslash
{\catcode`p=12 \catcode`t=12 \gdef\un#1pt{#1}}
\newcommand*{\largeur}{\expandafter\un\the\linewidth}
% Taille des partitions
% Si la valeur est 0, elle sera automatiquement calculée
% à partir de la taille de police.
\def\staffsize{0}
\let\localstaffsize\staffsize


% Commandes principales
% Inclusion d'un fichier ly
\newkeycommand*\includely[staffsize=\staffsize][autres][1]{%
\directlua{%
    inclure_ly(
        "\luatexluaescapestring{#1}",
        "\luatexluaescapestring{\currfiledir}",
        \luatexluaescapestring{\largeur},
        \luatexluaescapestring{\commandkey{staffsize}}
    )%
}%
}

% Inclusion d'un fragment intégré au document (environnement de base)
\NewEnviron{compilerly}{%
\directlua{%
    direct_ly(
        "\luatexluaescapestring{\unexpanded\expandafter{\BODY}}",
        \luatexluaescapestring{\largeur},
        \luatexluaescapestring{\localstaffsize}
    )%
}%
}

% Commande et environnement avec paramètres
\newkeycommand{\lily}[staffsize=\staffsize][autres][1]{%
\def\localstaffsize{\commandkey{staffsize}}%
\begin{compilerly}%
{#1}
\end{compilerly}%
}

\newkeyenvironment{ly}[staffsize=\staffsize][autres]{%
\def\localstaffsize{\commandkey{staffsize}}%
\compilerly%
}{%
\endcompilerly%
}

% Commandes pour la compatibilité avec lilypond-book
\let\lilypondfile\includely
\protected\def\lilypond{\def\reserved@a{lilypond}%
  \ifx\reserved@a\@currenvir \expandafter \ly
  \else \expandafter\lily \fi}
\let\endlilypond\endly