\NeedsTeXFormat{LaTeX2e} \ProvidesPackage{junicodevf}[% 2023/12/19 (Peter Baker) Supports Junicode VF (2.204 and up) variable fonts for LuaLaTeX.] \RequirePackage{ifluatex,xkeyval,fontspec} \RequireLuaTeX % OPTIONS FOR WEIGHT AND WIDTH \def\junicodevf@regweight{1} \DeclareOptionX{light}{\def\junicodevf@regweight{2}} \DeclareOptionX{medium}{\def\junicodevf@regweight{3}} \def\junicodevf@boldweight{1} \DeclareOptionX{semibold}{\def\junicodevf@boldweight{2}} \def\junicodevf@width{1} \DeclareOptionX{condensed}{\def\junicodevf@width{2}} \DeclareOptionX{semicondensed}{\def\junicodevf@width{3}} \DeclareOptionX{semiexpanded}{\def\junicodevf@width{4}} \DeclareOptionX{expanded}{\def\junicodevf@width{5}} \def\wghtadjust{0} \DeclareOptionX{weightadjustment}{\def\wghtadjust{#1}} \def\wdthadjust{0} \DeclareOptionX{widthadjustment}{\def\wdthadjust{#1}} % FIGURES (default is OldStyle Proportional) \newif\ifjunicodevf@lining \junicodevf@liningfalse \newif\ifjunicodevf@tabular \junicodevf@tabularfalse \DeclareOptionX{lining}{\junicodevf@liningtrue} \DeclareOptionX{tabular}{\junicodevf@tabulartrue} \DeclareOptionX{proportional}{\junicodevf@tabularfalse} \DeclareOptionX{oldstyle}{\junicodevf@liningfalse} % COMMANDS FOR ADDING FEATURES TO MAIN TEXT \directlua{dofile(kpse.find_file("junicodevf.lua"))} % Features for all four Main faces \newcommand*{\MainDef}{} % Features for each of the four Main faces. \newcommand*{\MainRegDef}{} \newcommand*{\MainItalicDef}{} \newcommand*{\MainBoldDef}{} \newcommand*{\MainBoldItalicDef}{} \DeclareOptionX{MainFeatures}{\renewcommand*{\MainDef}{#1,}} \DeclareOptionX{MainRegularFeatures}{\renewcommand*{\MainRegDef}{#1,}} \DeclareOptionX{MainItalicFeatures}{\renewcommand*{\MainItalicDef}{#1,}} \DeclareOptionX{MainBoldFeatures}{\renewcommand*{\MainBoldDef}{#1,}} \DeclareOptionX{MainBoldItalicFeatures}{\renewcommand*{\MainBoldItalicDef}{#1,}} \DeclareOptionX{MainRegularSizeFeatures}{\newcommand*{\MainRegSizeDef}{\directlua{mksizecommand({#1})}}} \DeclareOptionX{MainItalicSizeFeatures}{\newcommand*{\MainItalicSizeDef}{\directlua{mksizecommand({#1})}}} \DeclareOptionX{MainBoldSizeFeatures}{\newcommand*{\MainBoldSizeDef}{\directlua{mksizecommand({#1})}}} \DeclareOptionX{MainBoldItalicSizeFeatures}{\newcommand*{\MainBoldItalicSizeDef}{\directlua{mksizecommand({#1})}}} % SUPPORT FOR ENLA AXIS \newcommand*{\ENLAOneSizeDef}{SizeFeatures={{Size={5-}, RawFeature={axis={wght=400,wdth=100,ENLA=32}}}}} \newcommand*{\ENLATwoSizeDef}{SizeFeatures={{Size={5-}, RawFeature={axis={wght=400,wdth=100,ENLA=47}}}}} \newcommand*{\ENLAThreeSizeDef}{SizeFeatures={{Size={5-}, RawFeature={axis={wght=400,wdth=100,ENLA=75}}}}} \newcommand*{\ENLAFourSizeDef}{SizeFeatures={{Size={5-}, RawFeature={axis={wght=400,wdth=100,ENLA=100}}}}} \DeclareOptionX{ENLAOneSizeFeatures}{\renewcommand*{\ENLAOneSizeDef}{\directlua{mksizecommand({#1})}}} \DeclareOptionX{ENLATwoSizeFeatures}{\renewcommand*{\ENLATwoSizeDef}{\directlua{mksizecommand({#1})}}} \DeclareOptionX{ENLAThreeSizeFeatures}{\renewcommand*{\ENLAThreeSizeDef}{\directlua{mksizecommand({#1})}}} \DeclareOptionX{ENLAFourSizeFeatures}{\renewcommand*{\ENLAFourSizeDef}{\directlua{mksizecommand({#1})}}} \DeclareOptionX{EnlargedOneSizeFeatures}{\renewcommand*{\ENLAOneSizeDef}{\directlua{mksizecommand({#1})}}} \DeclareOptionX{EnlargedTwoSizeFeatures}{\renewcommand*{\ENLATwoSizeDef}{\directlua{mksizecommand({#1})}}} \DeclareOptionX{EnlargedThreeSizeFeatures}{\renewcommand*{\ENLAThreeSizeDef}{\directlua{mksizecommand({#1})}}} \DeclareOptionX{EnlargedFourSizeFeatures}{\renewcommand*{\ENLAFourSizeDef}{\directlua{mksizecommand({#1})}}} % Declare the options for each of the Alternate Styles. \directlua{mkaltcommands()} % Declare an option that will catch anything undefined and issue a warning. % Then process the options. \DeclareOptionX*{\PackageWarning{junicodevf}{Unknown option '\CurrentOption' ignored}} \ProcessOptionsX\relax % MAKE THE FONTS \def\makemainfontcommand#1#2#3#4#5{% \directlua{% style_idx = #1 weight_option = #2 weight_adjust = #3 width_option = #4 width_adjust = #5 mkmainfontcommand(style_idx, weight_option, weight_adjust, width_option, width_adjust)}} % If we didn't get size features from user, make them here from defaults and % basic options. \@ifundefined{MainRegSizeDef}{ \makemainfontcommand{1}{\junicodevf@regweight}{\wghtadjust}{\junicodevf@width}{\wdthadjust} }{} \@ifundefined{MainItalicSizeDef}{ \makemainfontcommand{2}{\junicodevf@regweight}{\wghtadjust}{\junicodevf@width}{\wdthadjust} }{} \@ifundefined{MainBoldSizeDef}{ \makemainfontcommand{3}{\junicodevf@boldweight}{\wghtadjust}{\junicodevf@width}{\wdthadjust} }{} \@ifundefined{MainBoldItalicSizeDef}{ \makemainfontcommand{4}{\junicodevf@boldweight}{\wghtadjust}{\junicodevf@width}{\wdthadjust} }{} % NUMBER STRINGS for fontspec. \def\junicodevf@figurestyle{Lowercase} \ifjunicodevf@lining\def\junicodevf@figurestyle{Uppercase}\fi \def\junicodevf@figurealign{Proportional} \ifjunicodevf@tabular\def\junicodevf@figurealign{Monospaced}\fi % Set the main font, then the alternate styles. It appears that % the fonts aren't embedded in the PDF unless actually used. \setmainfont{Junicode VF}[ ItalicFont = {*-Italic}, BoldFont = {*}, BoldItalicFont = {*-Italic}, Renderer = HarfBuzz, Numbers = {\junicodevf@figurealign,\junicodevf@figurestyle}, \MainDef, UprightFeatures = {\MainRegDef \MainRegSizeDef}, BoldFeatures = {\MainBoldDef \MainBoldSizeDef}, ItalicFeatures = {\MainItalicDef \MainItalicSizeDef}, BoldItalicFeatures = {\MainBoldItalicDef \MainBoldItalicSizeDef} ] \newcommand*{\junicodevf@newfont}[4]{ \setfontface#1{#2}[ Renderer = HarfBuzz, Numbers = {\junicodevf@figurealign,\junicodevf@figurestyle}, SmallCapsFont = {*}, SmallCapsFeatures = {Letters=SmallCaps}, #3 #4 ] } \directlua{mkfontcommands()} % ENLARGED FACES \setfontface\EnlargedOne{JunicodeVF}[ Renderer = HarfBuzz, \ENLAOneSizeDef ] \setfontface\EnlargedOneItalic{JunicodeVF-Italic}[ Renderer = HarfBuzz, \ENLAOneSizeDef ] \setfontface\EnlargedTwo{JunicodeVF}[ Renderer = HarfBuzz, \ENLATwoSizeDef ] \setfontface\EnlargedTwoItalic{JunicodeVF-Italic}[ Renderer = HarfBuzz, \ENLATwoSizeDef ] \setfontface\EnlargedThree{JunicodeVF}[ Renderer = HarfBuzz, \ENLAThreeSizeDef ] \setfontface\EnlargedThreeItalic{JunicodeVF-Italic}[ Renderer = HarfBuzz, \ENLAThreeSizeDef ] \setfontface\EnlargedFour{JunicodeVF}[ Renderer = HarfBuzz, \ENLAFourSizeDef ] \setfontface\EnlargedFourItalic{JunicodeVF-Italic}[ Renderer = HarfBuzz, \ENLAFourSizeDef ] % Convenience commands for non-verbose access to the cvNN features. % See also the "jcv" mnemonics below. \newcommand*{\textcv}[3][0]{{\addfontfeature{CharacterVariant=#2:#1}#3}} \newcommand*{\jcv}[2][0]{\addfontfeature{CharacterVariant=#2:#1}} % Convenience commands for accessing the Stylistic Sets. These are % intended to be mnemonic. \newcommand*{\AltThornEth}{\addfontfeature{StylisticSet=1}} % ss01 \newcommand*{\textAltThornEth}[1]{{\addfontfeature{StylisticSet=1}#1}} \newcommand*{\InsularLetterForms}{\addfontfeature{StylisticSet=2}} % ss02 \newcommand*{\textInsularLetterForms}[1]{{\addfontfeature{StylisticSet=2}#1}} \newcommand*{\IPAAlternates}{\addfontfeature{StylisticSet=3}} % ss03 \newcommand*{\textIPAAlternates}[1]{{\addfontfeature{StylisticSet=3}#1}} \newcommand*{\HighOverline}{\addfontfeature{StylisticSet=4}} % ss04 \newcommand*{\textHighOverline}[1]{{\addfontfeature{StylisticSet=4}#1}} \newcommand*{\MediumHighOverline}{\addfontfeature{StylisticSet=5}} % ss05 \newcommand*{\textMediumHighOverline}[1]{{\addfontfeature{StylisticSet=5}#1}} \newcommand*{\EnlargedMinuscules}{\addfontfeature{StylisticSet=6}} % ss06 \newcommand*{\textEnlargedMinuscules}[1]{\addfontfeature{{StylisticSet=6}#1}} \newcommand*{\Underdotted}{\addfontfeature{StylisticSet=7}} % ss07 \newcommand*{\textUnderdotted}[1]{{\addfontfeature{StylisticSet=7}#1}} \newcommand*{\ContextualLongS}{\addfontfeature{StylisticSet=8}} % ss08 \newcommand*{\textContextualLongS}[1]{{\addfontfeature{StylisticSet=8}#1}} \newcommand*{\AlternateFigures}{\addfontfeature{StylisticSet=9}} % ss09 \newcommand*{\textAlternateFigures}[1]{{\addfontfeature{StylisticSet=9}#1}} \newcommand*{\EntitiesAndTags}{\addfontfeature{StylisticSet=10}} % ss10 \newcommand*{\textEntitiesAndTags}[1]{{\addfontfeature{StylisticSet=10}#1}} % \newcommand*{\}{} % ss11 not yet used \newcommand*{\EarlyEnglishFuthorc}{\addfontfeature{StylisticSet=12}} % ss12 \newcommand*{\textEarlyEnglishFuthorc}[1]{{\addfontfeature{StylisticSet=12}#1}} \newcommand*{\ElderFuthark}{\addfontfeature{StylisticSet=13}} % ss13 \newcommand*{\textElderFuthark}[1]{{\addfontfeature{StylisticSet=13}#1}} \newcommand*{\YoungerFuthark}{\addfontfeature{StylisticSet=14}} % ss14 \newcommand*{\textYoungerFuthark}[1]{{\addfontfeature{StylisticSet=14}#1}} \newcommand*{\LongBranchToShortTwig}{\addfontfeature{StylisticSet=15}} % ss15 \newcommand*{\textLongBranchToShortTwig}[1]{{\addfontfeature{StylisticSet=15}#1}} \newcommand*{\ContextualRRotunda}{\addfontfeature{StylisticSet=16}} % ss16 \newcommand*{\textContextualRRotunda}[1]{{\addfontfeature{StylisticSet=16}#1}} \newcommand*{\RareDigraphs}{\addfontfeature{StylisticSet=17}} % ss17 \newcommand*{\textRareDigraphs}[1]{{\addfontfeature{StylisticSet=17}#1}} \newcommand*{\OldStylePunctuation}{\addfontfeature{StylisticSet=18}} % ss18 \newcommand*{\textOldStylePunctuation}[1]{{\addfontfeature{StylisticSet=18}#1}} \newcommand*{\LatinToGothic}{\addfontfeature{StylisticSet=19}} % ss19 \newcommand*{\textLatinToGothic}[1]{{\addfontfeature{StylisticSet=19}#1}} \newcommand*{\LowDiacritics}{\addfontfeature{StylisticSet=20}} % ss20 \newcommand*{\textLowDiacritics}[1]{{\addfontfeature{StylisticSet=20}#1}} % Tiny macros for providing mnemonic access to the cvNN features. \def\jcvA{1} \def\jcva{2} \def\jcvB{3} \def\jcvb{4} \def\jcvC{5} \def\jcvc{6} \def\jcvD{7} \def\jcvd{8} \def\jcvE{9} \def\jcve{10} \def\jcvF{11} \def\jcvf{12} \def\jcvG{13} \def\jcvg{14} \def\jcvH{15} \def\jcvh{16} \def\jcvI{17} \def\jcvi{18} \def\jcvJ{19} \def\jcvj{20} \def\jcvK{21} \def\jcvk{22} \def\jcvL{23} \def\jcvl{24} \def\jcvM{25} \def\jcvm{26} \def\jcvN{27} \def\jcvn{28} \def\jcvO{29} \def\jcvo{30} \def\jcvP{31} \def\jcvp{32} \def\jcvQ{33} \def\jcvq{34} \def\jcvR{35} \def\jcvr{36} \def\jcvS{37} \def\jcvs{38} \def\jcvT{39} \def\jcvt{40} \def\jcvU{41} \def\jcvu{42} \def\jcvV{43} \def\jcvv{44} \def\jcvW{45} \def\jcvw{46} \def\jcvX{47} \def\jcvx{48} \def\jcvY{49} \def\jcvy{50} \def\jcvZ{51} \def\jcvz{52} \def\jcvAogonek{53} \def\jcvaogonek{54} \def\jcvaa{55} \def\jcvAE{56} \def\jcvae{57} \def\jcvAO{58} \def\jcvao{59} \def\jcvav{60} \def\jcvdbar{61} \def\jcvdcroat{61} \def\jcvEogonek{62} \def\jcvYogh{63} \def\jcvlhighstroke{64} %somehow escaped the documentation \def\jcvoPolish{65} \def\jcvthorncrossed{66} \def\jcvspacingzigzag{67} \def\jcvglottal{68} \def\jcvTironianEt{69} \def\jcvperiod{70} \def\jcvmiddot{71} \def\jcvcomma{72} \def\jcvsemicolon{73} \def\jcvpunctuselevatus{74} \def\jcvexclam{75} \def\jcvquestion{76} \def\jcvASCIItilde{77} \def\jcvasterisk{78} \def\jcvslash{79} \def\jcvrum{80} \def\jcvcombiningzigzag{81} \def\jcvspacingusabbrev{82} \def\jcvetabbrev{83} \def\jcvmacron{84} \def\jcvcombiningopena{85} \def\jcvcombininginsulard{86} \def\jcvcombiningrrotunda{87} \def\jcvcombiningdieresis{88} \def\jcvcombiningoverline{89} \def\jcvHcombiningdoublemacron{90} \def\jcvEng{91} \def\jcvbrevebelow{92} \def\jcvcurrency{93} \def\jcvlb{94} \def\jcvsterling{95} \def\jcvGermanpenny{96} \def\jcvflorin{97} \def\jcvounce{98} %\def\notyetused{99}