summaryrefslogtreecommitdiff
path: root/macros/unicodetex/latex/lilyglyphs/tex/core/dotted.inp
blob: 6b7b7f634b69ecce9752be45c1d013a87d7c1ca1 (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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                                                                        %
%      This file is part of the 'lilyglyphs' LaTeX package.              %
%                                ==========                              %
%                                                                        %
%              https://github.com/openlilylib/lilyglyphs                 %
%               http://www.openlilylib.org/lilyglyphs                    %
%                                                                        %
%  Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org          %
%                                                                        %
%  'lilyglyphs' is free software: you can redistribute it and/or modify  %
%  it under the terms of the LaTeX Project Public License, either        %
%  version 1.3 of this license or (at your option) any later version.    %
%  You may find the latest version of this license at                    %
%               http://www.latex-project.org/lppl.txt                    %
%  more information on                                                   %
%               http://latex-project.org/lppl/                           %
%  and version 1.3 or later is part of all distributions of LaTeX        %
%  version 2005/12/01 or later.                                          %
%                                                                        %
%  This work has the LPPL maintenance status 'maintained'.               %
%  The Current Maintainer of this work is Urs Liska (see above).         %
%                                                                        %
%  This work consists of the files listed in the file 'manifest.txt'     %
%  which can be found in the 'license' directory.                        %
%                                                                        %
%  This program is distributed in the hope that it will be useful,       %
%  but WITHOUT ANY WARRANTY; without even the implied warranty of        %
%  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.                  %
%                                                                        %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% This file is part of the lilyglyphs package %
% and defines one subset of glyphs            %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%
% logic for dotted glyphs %
%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Dot, e.g. necessary to create dotted notes
\newcommand*{\lilyDot}[1][]{%
	\setkeys{lilyDesignOptions}{scale=1.5,raise=0}%
	\lilyPrint[#1]{\lilyGetGlyph{dots.dot}}%
}

\makeatletter

% Calculate the space between a glyph and a dot
% based on the 2nd order function
% f(x) = (1/n * x^2) - 1/n + (m * x) - m + o
% where
% #1: scaling factor x
% #2: curve factor n
% #4 line steepness m
% #3 offset o (offset of 0 results in a dotSpace of 0 at scale=1).
% The result is supposed to be taken as ex and stored in \lilyDotSpaceF
% which is used by \lilyDotSpace
\newcommand*{\lilyCalcDotSpace}[4]{%
	\pgfmathsetmacro{\lilyDotSpaceF}{%
		#1 * #1% x^2
		* #2 - #2%
		+ #1 * #3 - #3 + #4}%
}

% Interpret the different options to be used for printing a dot
% The optional arguments (passed as #1)given by the user are taken into account,
% then the scaling and raise are calculated using the design options 
% from the calling predefined command.
% Finally the space between the glyph and the dot is calculated using the
% 2nd order function \lilyCalcDotSpace:
% (1/n * scale^2) - 1/n + (1/m * scale) - 1/m + o
% #2: curve factor n
% #4 line steepness m
% #3 offset o (offset of 0 results in a dotSpace of 0 at scale=1).

\newcommand*{\lilySetDotOptions}[4][]{%
	% Initialize the user's command option in case he didn't provide them
	\setkeys{lilyCmdOptions}{scale=1,raise=0}%
	% process the optional argument to access the values
	\setkeys{lilyCmdOptions}{#1}%
	% calculate optional arguments for the dot,
	% based on "design options" and the given arguments
	\pgfmathsetmacro{\lilyDotScale}{\lilyCmdOptions@scale * \lilyDesignOptions@scale}%
	\pgfmathsetmacro{\lilyDotRaise}{\lilyCmdOptions@raise + \lilyDesignOptions@raise}%
	% calculate the space between the rest and the dot
	\lilyCalcDotSpace{\lilyCmdOptions@scale}{#2}{#3}{#4}%
}
\makeatother

% Insert a space between a glyph and a dot
% \lilyCalcDotSpace or better \lilySetDotOptions should have been called 
% immediately before \lilyDotSpace,
% otherwise the result could be undefined
\newcommand*{\lilyDotSpace}{\hspace*{\lilyDotSpaceF ex}}

% Print the actual dot, 
% use the settings defined in \lilySetDotOptions
\newcommand*{\lilyPrintDot}{\lilyDot[raise=\lilyDotRaise,scale=\lilyDotScale]}

% Print another dot, for multiply dotted symbols.
% It uses the dot settings from the previous command.
% So if you encounter strange settings, make sure you have called
% a predefined command of a dotted symbol immediately before.
% If no predefined command has been called at all
% you will see an error message because the key-value pairs 
% haven't been initialized yet.
% It uses a different way to determine the space between dots.
% It defaults to 0.25 ex, but you can optionally pass it
% a number that is interpreted as ex.
\newcommand*{\lilyPrintMoreDots}[1][0.25]{%
	\hspace*{#1 ex}\lilyPrintDot%
}