summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/spark-otf/spark-otf.sty
blob: 4b05b9d668e1e09dbdeffa437bd17159b730c7d6 (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
%% $Id: spark-otf.sty 565 2017-09-20 08:23:06Z herbert $
%%
%% This file is distributed under the terms of the LaTeX Project Public
%% License from CTAN archives in directory  macros/latex/base/lppl.txt.
%% Either version 1.3 or, at your option, any later version.
%%
% Copyright 2017 Herbert Voss hvoss@tug.org
%%
\def\spark@version{0.02}
\ProvidesPackage{spark-otf}[%
  2017/09/21 v. \spark@version~(Herbert Voss) Supports spark OpenType for lualatex/xelatex.] 
%
\RequirePackage{ifxetex,ifluatex,xkeyval}
%
\newif\ifspark@usefilenames \spark@usefilenamesfalse
\DeclareOptionX{usefilenames}[true]{\@nameuse{spark@usefilenames#1}}
%
\providecommand\spark@DefaultFeatures{}
\DeclareOptionX{DefaultFeatures}{\def\spark@DefaultFeatures{#1}}

\ProcessOptionsX\relax

\ifxetex\else\ifluatex\else
  \@latex@error{This package can only be used with "XeLaTeX" or "LuaLaTeX"!%
      \MessageBreak "pdfLaTeX" or any other "TeX" version are _not_ possible!}%
\fi\fi
\RequirePackage{fontspec,xparse}

\ifluatex\RequirePackage{luacode}\fi

\ifspark@usefilenames
  \typeout {Using file names for the spark font}%
%-----------------------------------------  file names ----------------------------
  \newfontfamily\sparkBarMedium{{Spark - Bar - Medium}}[RawFeature=+calt,\spark@DefaultFeatures]
  \newfontfamily\sparkBarNarrow{{Spark - Bar - Narrow}}[RawFeature=+calt,\spark@DefaultFeatures]
  \newfontfamily\sparkBarThin{{Spark - Bar - Thin}}[RawFeature=+calt,\spark@DefaultFeatures]
%
  \newfontfamily\sparkDotLine{{Spark - Dot-line - Medium}}[RawFeature=+calt,\spark@DefaultFeatures]
%
  \newfontfamily\sparkDotMedium{{Spark - Dot - Medium}}[RawFeature=+calt,\spark@DefaultFeatures]
  \newfontfamily\sparkDotSmall{{Spark - Dot - Small}}[RawFeature=+calt,\spark@DefaultFeatures]
%Spark - Bar - Medium.otf  Spark - Bar - Thin.otf         Spark - Dot - Medium.otf
%Spark - Bar - Narrow.otf  Spark - Dot-line - Medium.otf  Spark - Dot - Small.otf

\else
  \typeout {Using symbolic names for the spark font}%
%-----------------------------------------  symbolic names ----------------------------
  \newfontfamily\sparkBarMedium{SparkBar-Medium}[RawFeature=+calt,\spark@DefaultFeatures]
  \newfontfamily\sparkBarNarrow{SparkBar-Narrow}[RawFeature=+calt,\spark@DefaultFeatures]
  \newfontfamily\sparkBarThin{SparkBar-Thin}[RawFeature=+calt,\spark@DefaultFeatures]
%
  \newfontfamily\sparkDotLine{Spark-Dot-lineMedium}[RawFeature=+calt,\spark@DefaultFeatures]
%
  \newfontfamily\sparkDotMedium{Spark-DotMedium}[RawFeature=+calt,\spark@DefaultFeatures]
  \newfontfamily\sparkDotSmall{Spark-DotSmall}[RawFeature=+calt,\spark@DefaultFeatures]
\fi
%
\ifluatex
\begin{luacode}
function RelativeValues(v,m)
  local Values = {}  
  for k,x in ipairs(v) do
    Values[k] = x
  end
  table.sort(Values)
  local MaxVal = (Values[#Values])
  for k,x in ipairs(v) do
    Values[k] = math.floor(x/MaxVal*m)
  end
  for i,k in ipairs(Values) do
    tex.sprint(k)
    if (i < #Values) then tex.sprint(",") end
  end
end
\end{luacode}
\def\spark@line{Line}
  \NewDocumentCommand\sparkBar{sO{Medium}O{}mO{}}{{%
    \IfValueTF{#1}%
      {\edef\spark@values{\directlua{RelativeValues({#4},99)}}}%
      {\def\spark@values{#4}}%
    \@nameuse{sparkBar#2}#3\string{\spark@values\string}#5%
  }}
  \NewDocumentCommand\sparkDot{sO{Medium}O{}mO{}}{{%
    \IfValueTF{#1}%
      {\def\spark@arg{#2}%
       \ifx\spark@line\spark@arg \edef\spark@values{\directlua{RelativeValues({#4},9)}}%
       \else                     \edef\spark@values{\directlua{RelativeValues({#4},99)}}%
       \fi}%
      {\def\spark@values{#4}}%
    \@nameuse{sparkDot#2}#3\string{\spark@values\string}#5%
  }}
\else %% XeLaTeX
  \NewDocumentCommand\sparkBar{O{Medium}O{}mO{}}{{%
    \@nameuse{sparkBar#1}#2\string{#3\string}#4%
  }}
  \NewDocumentCommand\sparkDot{O{Medium}O{}mO{}}{{%
    \@nameuse{sparkDot#1}#2\string{#3\string}#4%
  }}
\fi
%%
\endinput