summaryrefslogtreecommitdiff
path: root/fonts/spark-otf/latex
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /fonts/spark-otf/latex
Initial commit
Diffstat (limited to 'fonts/spark-otf/latex')
-rw-r--r--fonts/spark-otf/latex/spark-otf.sty161
1 files changed, 161 insertions, 0 deletions
diff --git a/fonts/spark-otf/latex/spark-otf.sty b/fonts/spark-otf/latex/spark-otf.sty
new file mode 100644
index 0000000000..eae4f650d0
--- /dev/null
+++ b/fonts/spark-otf/latex/spark-otf.sty
@@ -0,0 +1,161 @@
+%% $Id: spark-otf.sty 1047 2019-04-12 17:22:07Z 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.05}
+\ProvidesPackage{spark-otf}[%
+ 2019/04/12 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{luaotfload,xparse}
+
+\ifluatex\RequirePackage{luacode}\fi
+
+\newcommand\setSparkColor[2]{%
+ \addfontfeatures{UprightFeatures={Color=#1}}#2%
+ \addfontfeatures{UprightFeatures={Color=000000}}}
+
+\ifspark@usefilenames
+ \typeout {Using file names for the spark font}%
+%----------------------------------------- file names ----------------------------
+ \font\sparkBarMedium ="file:Sparks-Bar-Medium.otf:mode=node;+calt;\spark@DefaultFeatures"
+ \font\sparkBarNarrow ="file:Sparks-Bar-Narrow.otf:mode=node;+calt;\spark@DefaultFeatures"
+ \font\sparkBarExtranarrow="file:Sparks-Bar-Extranarrow.otf:mode=node;+calt;\spark@DefaultFeatures"
+ \font\sparkBarWide ="file:Sparks-Bar-Wide.otf:mode=node;+calt;\spark@DefaultFeatures"
+ \font\sparkBarExtrawide ="file:Sparks-Bar-Extrawide.otfmode=node;+calt;\spark@DefaultFeatures"
+%
+ \font\sparkDotlineMedium ="file:Sparks-Dotline-Medium.otf:mode=node;+calt;\spark@DefaultFeatures"
+ \font\sparkDotlineThick ="file:Sparks-Dotline-Thick.otf:mode=node;+calt;\spark@DefaultFeatures"
+ \font\sparkDotlineExtrathick="file:Sparks-Dotline-Extrathick.otf:mode=node;+calt;\spark@DefaultFeatures"
+ \font\sparkDotlineThin ="file:Sparks-Dotline-Thin.otf:mode=node;+calt;\spark@DefaultFeatures"
+ \font\sparkDotlineExtrathin ="file:Sparks-Dotline-Extrathin.otf:mode=node;+calt;\spark@DefaultFeatures"
+%
+ \font\sparkDotMedium ="file:Sparks-Dot-Medium.otf:mode=node;+calt;\spark@DefaultFeatures"
+ \font\sparkDotSmall ="file:Sparks-Dot-Small.otf:mode=node;+calt;\spark@DefaultFeatures"
+ \font\sparkDotExtralarge="file:Sparks-Dot-Extralarge.otf:mode=node;+calt;\spark@DefaultFeatures"
+ \font\sparkDotExtrasmall="file:Sparks-Dot-Extrasmall.otf:mode=node;+calt;\spark@DefaultFeatures"
+%
+\else
+ \typeout {Using symbolic names for the spark font}%
+%----------------------------------------- symbolic names ----------------------------
+ \font\sparkBarMedium = "name:Sparks Bar Medium:mode=node;+calt;\spark@DefaultFeatures"
+ \font\sparkBarNarrow = "name:Sparks Bar Narrow:mode=node;+calt;\spark@DefaultFeatures"
+ \font\sparkBarExtranarrow= "name:Sparks Bar Extra-narrow:mode=node;+calt;\spark@DefaultFeatures"
+ \font\sparkBarWide = "name:Sparks Bar Wide:mode=node;+calt;\spark@DefaultFeatures"
+ \font\sparkBarExtrawide = "name:Sparks Bar Extra-wide:mode=node;+calt;\spark@DefaultFeatures"
+%
+ \font\sparkDotlineMedium = "name:Sparks Dot-line Medium:mode=node;+calt;\spark@DefaultFeatures"
+ \font\sparkDotlineThick = "name:Sparks Dot-line Thick:mode=node;+calt;\spark@DefaultFeatures"
+ \font\sparkDotlineExtrathick= "name:Sparks Dot-line Extra-thick:mode=node;+calt;\spark@DefaultFeatures"
+ \font\sparkDotlineThin = "name:Sparks Dot-line Thin:mode=node;+calt;\spark@DefaultFeatures"
+ \font\sparkDotlineExtrathin = "name:Sparks Dot-line Extra-thin:mode=node;+calt;\spark@DefaultFeatures"
+%
+ \font\sparkDotMedium = "name:Sparks Dot Medium:mode=node;+calt;\spark@DefaultFeatures"
+ \font\sparkDotSmall = "name:Sparks Dot Small:mode=node;+calt;\spark@DefaultFeatures"
+ \font\sparkDotExtralarge= "name:Sparks Dot Extra-large:mode=node;+calt;\spark@DefaultFeatures"
+ \font\sparkDotExtrasmall= "name:Sparks Dot Extra-small:mode=node;+calt;\spark@DefaultFeatures"
+\fi
+%
+%
+\def\Extend@List{\@ifnextchar!\Extend@List@i\Extend@List@ii}
+\def\Extend@List@i!#1,#2\@nil{%
+ \def\spark@mark@first{#1}%
+ \def\spark@values@i{#1,}%
+ \Extend@List@iii#2,!,!\@nil
+}
+\def\Extend@List@ii#1\@nil{\Extend@List@iii#1,!,!\@nil}
+%
+\def\Extend@List@iii#1,!#2,!#3\@nil{%
+ \ifx\relax#2\relax % no value with !
+ \edef\spark@values@i{\spark@values@i#1}%
+ \def\spark@mark@last{}%
+ \else
+ \edef\spark@values@i{\spark@values@i#1,#2}%
+ \def\spark@mark@last{#2}%
+ \fi
+}
+
+\def\check@list@values#1{%
+ \def\spark@values@i{}%
+ \def\spark@mark@first{}%
+ \def\spark@mark@last{}%
+ \Extend@List#1\@nil
+}
+
+%
+\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}
+% 12 3 45
+ \NewDocumentCommand\sparkBar{sO{Medium}O{}mO{}}{{%
+ \check@list@values{#4}%
+ \IfBooleanTF{#1}%
+ {\edef\spark@values@ii{\directlua{RelativeValues({\spark@values@i},99)}}}%
+ {\let\spark@values@ii\spark@values@i}%
+ \@nameuse{sparkBar#2}#3\spark@mark@first\string{\spark@values@ii\string}\spark@mark@last#5%
+ }}
+% 12 3 45
+ \NewDocumentCommand\sparkDot{sO{Medium}O{}mO{}}{{%
+ \check@list@values{#4}%
+ \IfBooleanTF{#1}%
+ {\edef\spark@values@ii{\directlua{RelativeValues({\spark@values@i},100)}}}%
+ {\let\spark@values@ii\spark@values@i}%
+ \@nameuse{sparkDot#2}#3\spark@mark@first\string{\spark@values@ii\string}\spark@mark@last#5%
+ }}
+% 12 3 45
+ \NewDocumentCommand\sparkDotline{sO{Medium}O{}mO{}}{{%
+ \check@list@values{#4}%
+ \IfBooleanTF{#1}%
+ {\edef\spark@values@ii{\directlua{RelativeValues({\spark@values@i},100)}}}%
+ {\let\spark@values@ii\spark@values@i}%
+ \@nameuse{sparkDotline#2}#3\spark@mark@first\string{\spark@values@ii\string}\spark@mark@last#5%
+ }}
+\else %% XeLaTeX% 1 2 34
+ \NewDocumentCommand\sparkBar{O{Medium}O{}mO{}}{{%
+ \check@list@values{#3}%
+ \@nameuse{sparkBar#1}\spark@mark@first\string{\spark@values@i\string}\spark@mark@last%
+ }}% 1 2 34
+ \NewDocumentCommand\sparkDot{O{Medium}O{}mO{}}{{%
+ \check@list@values{#3}%
+ \@nameuse{sparkDot#1}\spark@mark@first\string{\spark@values@i\string}\spark@mark@last%
+ }}%
+ \NewDocumentCommand\sparkDotline{O{Medium}O{}mO{}}{{%
+ \check@list@values{#3}%
+ \@nameuse{sparkDotline#1}\spark@mark@first\string{\spark@values@i\string}\spark@mark@last%
+ }}
+\fi
+%%
+\endinput
+