% babelbidi-minted.def % % BabelBidi: bidirectional support for LaTeX. % % Copyright (C) 2026 Amer Amikhteh % % This file is part of the BabelBidi 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{babelbidi-minted.def}% [2026/10/21 v0.3.2 Minted patches for BabelBidi] \makeatletter % ========================================================================== % Character direction % ========================================================================== \newif\ifbbd@minted@chardir@active \bbd@minted@chardir@activefalse \def\bbd@minted@setchardir#1#2{% \directlua{% babelbidiMintedCharDir = babelbidiMintedCharDir or {} local char = \number`#1; local data = Babel.characters[char] table.insert(babelbidiMintedCharDir, { char = char, existed = not (data == nil), olddir = data and data.d, }) }% \babelcharproperty{`#1}{direction}{#2}% } \def\bbd@minted@applychardir{% \ifbbd@minted@chardir@active \else % Preserve character commands without expanding them. \edef\bbd@minted@chardir{% \unexpanded\expandafter{% \expanded{\mintedtexoptvalueof{chardir}}% }% }% \ifx\bbd@minted@chardir\@empty \else \ifLuaTeX \global\bbd@minted@chardir@activetrue \@for\bbd@minted@pair:=\bbd@minted@chardir\do{% \expandafter\bbd@minted@setchardir \bbd@minted@pair }% \else \PackageError{babelbidi}% {The minted chardir option requires LuaTeX}% {Compile this document with LuaLaTeX.}% \fi \fi \fi } \def\bbd@minted@restorechardir{% \ifbbd@minted@chardir@active \directlua{% local stack = babelbidiMintedCharDir if stack then local item = table.remove(stack) while item do if item.existed then local data = Babel.characters[item.char] if data then data.d = item.olddir end else Babel.characters[item.char] = nil end item = table.remove(stack) end babelbidiMintedCharDir = nil end }% \global\bbd@minted@chardir@activefalse \fi } % ========================================================================== % Text language and direction % ========================================================================== \def\bbd@minted@applytextlang{% \edef\bbd@minted@textlang{% \mintedtexoptvalueof{textlang}% }% \ifx\bbd@minted@textlang\@empty \else \selectlanguage{\bbd@minted@textlang}% \fi } \def\bbd@minted@applytextdir{% \edef\bbd@minted@textdir{% \mintedtexoptvalueof{textdir}% }% \ifx\bbd@minted@textdir\@empty \else \def\bbd@minted@rtl{rtl}% \def\bbd@minted@ltr{ltr}% \ifx\bbd@minted@textdir\bbd@minted@rtl \bbl@pardir{1}% \bbl@textdir{1}% \bbl@bodydir{1}% \else \ifx\bbd@minted@textdir\bbd@minted@ltr \bbl@pardir{0}% \bbl@textdir{0}% \bbl@bodydir{0}% \else \PackageError{babelbidi}% {Invalid minted textdir value '\bbd@minted@textdir'}% {Use textdir=rtl or textdir=ltr.}% \fi \fi \fi } % ========================================================================== % Latin counter digits % ========================================================================== \def\bbd@minted@latinarabic#1{\number#1} % ========================================================================== % Minted setup % ========================================================================== \AddToHook{package/minted/after}[babelbidi/minted/setup]{% \mintedpgfkeyscreate{tex}{textlang=}% \mintedpgfkeyscreate{tex}{textdir=}% \mintedpgfkeyscreate{tex}{chardir=}% \AddToHook{cmd/minted@usefvopts/after}% [babelbidi/minted/options]{% \bbd@minted@applytextlang \bbd@minted@applytextdir \bbd@minted@applychardir }% \AddToHook{env/minted/after}% [babelbidi/minted/restore]{% \bbd@minted@restorechardir }% % This assignment is local to the minted environment. \AddToHook{env/minted/begin}% [babelbidi/minted/digits]{% \let\@arabic\bbd@minted@latinarabic }% \ifLuaTeX \AddToHook{env/minted/begin}% [babelbidi/minted/frame]{% \patchcmd\FV@SingleFrameLine {\hbox to\z@}% {\hbox dir TLT to\z@}% {}% {% \PackageWarning{babelbidi}% {Could not patch minted frame lines}% }% \patchcmd\FV@SingleFrameSep {\hbox to \z@}% {\hbox dir TLT to \z@}% {}% {% \PackageWarning{babelbidi}% {Could not patch minted frame padding}% }% }% \fi }% End of package/minted/after. \makeatother \endinput