% tex-ini-files 2026-03-25: luatexconfig.tex

% Load shared (PDF) settings in LuaTeX

\begingroup
  \catcode`\{=1 %
  \catcode`\}=2 %
  \catcode`\#=6 %
  % Settings that were primitives
  % accessed in newer LuaTeX releases via \pdfvariable
  \def\list{%
      {compresslevel}%
      {decimaldigits}%
      {horigin}%
      {minorversion}%
      {objcompresslevel}%
      {pkresolution}%
      {vorigin}%
  }%
  \def\do#1{%
    \ifx\relax#1\else
      \directlua{tex.enableprimitives("", {"pdf#1"})}%
      \expandafter\do
    \fi
  }%
  % Enable all \pdf... primitives in one go
  \expandafter\do\list{output}{pageheight}{pagewidth}{variable}\relax
  % Other required primitives that are not named \pdf...
  \directlua{tex.enableprimitives("",
    {"pageheight", "pagewidth", "outputmode"})}%
  % Newer LuaTeX releases don't have \pdfoutput, etc.:
  % emulate names where appropriate
  \ifx\pdfoutput\undefined
    \global\let\pdfoutput\outputmode
    \global\let\pdfpageheight\pageheight
    \global\let\pdfpagewidth\pagewidth
    \def\do#1{%
      \ifx\relax#1\else
        \expandafter\xdef\csname pdf#1\endcsname{\pdfvariable #1}%
        \expandafter\do
      \fi
    }%
    \expandafter\do\list\relax
  \fi
  \global\everyjob={\directlua{
    local callback_register = callback.register
    local out_name_ok = kpse.out_name_ok
    local type = type
    function callback.register(name, func)
      if name == "find_write_file" and type(func) == "function" then
        local function wrapper(id, name)
          local result = func(id, name)
          if out_name_ok(result) then
            return result
          else
            return nil
          end
        end
        return callback_register(name, wrapper)
      else
        return callback_register(name, func)
      end
    end
  }}
  \the\everyjob
  % The file pdftexconfig.tex contains only <primitive> = <value> lines
  % so can now be read using the (emulated) primitives
  % This needs to be global so set \globaldefs for this step
  \globaldefs=1 %
  \input{pdftexconfig}%
  \globaldefs=0 %
  % Pick up on a request for DVI mode and apply it whilst \pdfoutput is
  % still defined
  \ifx\dvimode\relax
    \global\pdfoutput=0 %
  \fi
  \global\let\dvimode\undefined
  % Clean up all of the globally-allocated names
  \def\do#1{%
    \ifx\relax#1\else
      \global\expandafter\let\csname pdf#1\endcsname\undefined
      \expandafter\do
    \fi
  }%
  \expandafter\do\list{output}{pageheight}{pagewidth}{variable}\relax
  \global\let\outputmode\undefined
  \global\let\pageheight\undefined
  \global\let\pagewidth\undefined
  \global\let\dvimode\undefined
\endgroup
