% unipersian-fonts-fallback.def % % UniPersian: Persian language support for LaTeX. % % Copyright (C) 2026 Amer Amikhteh % % This file is part of the UniPersian package. % % This work is free software: you may redistribute it and/or modify % it under the terms of the LaTeX Project Public License as published % by the LaTeX Project, either version 1.3c of the License, or % (at your option) any later version. % % This work 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. % % The full license text is available at: % https://www.latex-project.org/lppl/ % % This work is "maintained" by Amer Amikhteh. % % The current maintainer of this work is Amer Amikhteh. \ProvidesFile{unipersian-fonts-fallback.def} [2026/09/23 v0.2.0 LuaTeX font fallbacks for UniPersian] % ------------------------------------------------ % Font names and options % ------------------------------------------------ \def\uper@persianrmfont{} \def\uper@persianrmoptions{} \def\uper@persiansffont{} \def\uper@persiansfoptions{} \def\uper@persianmonofont{} \def\uper@persianmonooptions{} \def\uper@latinrmfont{} \def\uper@latinrmoptions{} \def\uper@latinsffont{} \def\uper@latinsfoptions{} \def\uper@latinmonofont{} \def\uper@latinmonooptions{} % ------------------------------------------------ % Define rm fallbacks % ------------------------------------------------ \def\uper@define@rm@fallbacks{% \ifx\uper@persianrmfont\@empty \else \ifx\uper@latinrmfont\@empty \else \directlua{% luaotfload.add_fallback( "unipersian-persian-rm-fallback", { "\luaescapestring{\uper@latinrmfont}:mode=node;script=latn" } ) luaotfload.add_fallback( "unipersian-latin-rm-fallback", { "\luaescapestring{\uper@persianrmfont}:mode=node;script=arab" } ) }% \fi \fi } % ------------------------------------------------ % Define sf fallbacks % ------------------------------------------------ \def\uper@define@sf@fallbacks{% \ifx\uper@persiansffont\@empty \else \ifx\uper@latinsffont\@empty \else \directlua{% luaotfload.add_fallback( "unipersian-persian-sf-fallback", { "\luaescapestring{\uper@latinsffont}:mode=node;script=latn" } ) luaotfload.add_fallback( "unipersian-latin-sf-fallback", { "\luaescapestring{\uper@persiansffont}:mode=node;script=arab" } ) }% \fi \fi } % ------------------------------------------------ % Define tt fallbacks % ------------------------------------------------ \def\uper@define@mono@fallbacks{% \ifx\uper@persianmonofont\@empty \else \ifx\uper@latinmonofont\@empty \else \directlua{% luaotfload.add_fallback( "unipersian-persian-mono-fallback", { "\luaescapestring{\uper@latinmonofont}:mode=node;script=latn" } ) luaotfload.add_fallback( "unipersian-latin-mono-fallback", { "\luaescapestring{\uper@persianmonofont}:mode=node;script=arab" } ) }% \fi \fi } % ------------------------------------------------ % Define all fallbacks % ------------------------------------------------ \def\uper@define@fallbacks{% \uper@define@rm@fallbacks \uper@define@sf@fallbacks \uper@define@mono@fallbacks } % ------------------------------------------------ % Apply rm fallbacks to Babel fonts % ------------------------------------------------ \def\uper@apply@rm@fallbacks{% \ifx\uper@persianrmfont\@empty \else \ifx\uper@latinrmfont\@empty \else \babelfont[persian]{rm}[ RawFeature={fallback=unipersian-persian-rm-fallback}, \uper@persianrmoptions ]{\uper@persianrmfont}% \babelfont[english]{rm}[ RawFeature={fallback=unipersian-latin-rm-fallback}, \uper@latinrmoptions ]{\uper@latinrmfont}% \fi \fi } % ------------------------------------------------ % Apply sf fallbacks to Babel fonts % ------------------------------------------------ \def\uper@apply@sf@fallbacks{% \ifx\uper@persiansffont\@empty \else \ifx\uper@latinsffont\@empty \else \babelfont[persian]{sf}[ RawFeature={fallback=unipersian-persian-sf-fallback}, \uper@persiansfoptions ]{\uper@persiansffont}% \babelfont[english]{sf}[ RawFeature={fallback=unipersian-latin-sf-fallback}, \uper@latinsfoptions ]{\uper@latinsffont}% \fi \fi } % ------------------------------------------------ % Apply tt fallbacks to Babel fonts % ------------------------------------------------ \def\uper@apply@mono@fallbacks{% \ifx\uper@persianmonofont\@empty \else \ifx\uper@latinmonofont\@empty \else \babelfont[persian]{tt}[ RawFeature={fallback=unipersian-persian-mono-fallback}, \uper@persianmonooptions ]{\uper@persianmonofont}% \babelfont[english]{tt}[ RawFeature={fallback=unipersian-latin-mono-fallback}, \uper@latinmonooptions ]{\uper@latinmonofont}% \fi \fi } % ------------------------------------------------ % Update all fallbacks % ------------------------------------------------ \def\uper@update@fallbacks{% \uper@define@fallbacks \uper@apply@rm@fallbacks \uper@apply@sf@fallbacks \uper@apply@mono@fallbacks } \endinput