% magyar.ldf - Hungarian language support for the babel multilingual package
% written and copyright (C) by Péter Szabó
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
% of this license or (at your option) any later version.
% The latest version of this license is in
%   http://www.latex-project.org/lppl.txt
% and version 1.3 or later is part of all distributions of LaTeX
% version 2005/12/01 or later.
%
% This work has the LPPL maintenance status `maintained'.
%
% Earlier versions of file `magyar.dtx' Babel package for LaTeX version 2e
%   Copyright (C) 1989-2004 by Johannes Braams, TeXniek
%   Copyright (C) 1989-2004 by
%   Árpád Bíró
%   József Bérces (version 1.4c - 2001; contains a lot of work of him)
%
% The Current Maintainers of this work are
%   Péter Szabó
%   Tibor Tómács (from 2025-05-02)
%
% Please report errors to: Tibor Tómács
%                     via: https://github.com/tibortomacs/babel-hungarian
%                   email: tomacs.tibor@gmail.com

\NeedsTeXFormat{LaTeX2e}[2022-06-01]

\ProvidesLanguage{\CurrentOption}
  [2026/02/03 v1.6a Hungarian support from the babel system]

\LdfInit{\CurrentOption}{captions\CurrentOption}

% Hyphenation
\expandafter\ifx\csname l@\CurrentOption\endcsname\relax
  \ifx\l@hungarian\relax
  \else
    \expandafter\chardef\csname l@\CurrentOption\endcsname\l@hungarian
  \fi
\fi

% Fix \catcodes{} possibly screwed up by other Babel languages.
\edef\@@magyar@restcats{%
  \catcode\string`\string`\the\catcode\string``\space\space
  \catcode\string`\string!\the\catcode\string`!\space\space
  \catcode\string`\string*\the\catcode\string`*\space\space
  \catcode\string`\string+\the\catcode\string`+\space\space
  \catcode\string`\string-\the\catcode\string`-\space\space
  \catcode\string`\string=\the\catcode\string`=\space\space
  \catcode\string`\string|\the\catcode\string`|\space\space
  \catcode\string`\string;\the\catcode\string`;\space\space
  \catcode\string`\string:\the\catcode\string`:\space\space
  \catcode\string`\string'\the\catcode\string`'\space\space
  \catcode\string`\string"\the\catcode\string`"\space\space
  \catcode\string`\string?\the\catcode\string`?\space\space
  \catcode\string`\string/\the\catcode\string`/\space\space
  \let\noexpand\@@magyar@restcats\noexpand\@undefined
}
\catcode\string``12       \catcode`!12 \catcode`*12 \catcode`+12 \catcode`-12
\catcode`=12 \catcode`|12 \catcode`;12 \catcode`:12 \catcode`'12 \catcode`"12
\catcode`?12 \catcode`/12

\edef\@@magyar@error#1{\noexpand\PackageError{\CurrentOption.ldf}{#1}\noexpand\@ehc}

% \dMf foo-bar {...} is equivalent to \@namedef{foo-bar}{...}
\def\dMf#1 {\expandafter\def\csname#1\endcsname}

% \magyar@opt@defaults used to be a defined command for the 'defaults=...' option.
% It shouldn't be now, but the caption package will only switch to the Hungarian label type when it exists.
\let\magyar@opt@defaults\empty

% --- Declare options.

% Dat: \languageattribute{magyar}{...} and \bbl@declare@ttribute{magyar}{foo}{...}
% isn't enough for us, because it is processed after
% \usepackage[magyar]{babel}, but we need the options information earlier.
% And also it cannot contain <key>=<value>.

\DeclareKeys[babel-magyar]{
  active.code            = \magyar@enumarg{active}{#1},%            safe,problematic,none,onlycs
  activeprefix.code      = \magyar@enumarg{activeprefix}{#1},%      babelopt2,none,babelopt3,grave,acute,quotedbl
  activespace.code       = \magyar@enumarg{activespace}{#1},%       none,safe,problematic
  afterindent.code       = \magyar@enumarg{afterindent}{#1},%       unchanged,force-no,force-yes
  amspostsectiondot.code = \magyar@enumarg{amspostsectiondot}{#1},% no,unchanged
  amstocnumlang.code     = \magyar@enumarg{amstocnumlang}{#1},%     all,hu
  appendixdot.code       = \magyar@enumarg{appendixdot}{#1},%       yes,no
  captions.code          = \magyar@enumarg{captions}{#1},%          hu,unchanged
  chapterhead.code       = \magyar@enumarg{chapterhead}{#1},%       yes,unchanged(=no)
  chapternumber.code     = \magyar@enumarg{chapternumber}{#1},%     unchanged,huordinal,Huordinal
  defaults.code          = \magyar@enumarg{defaults}{#1},%          over-1.4(default),compat-1.4,prettiest,safest,hu-min
  dottedtocline.code     = \magyar@enumarg{dottedtocline}{#1},%     fix,unchanged
  extras.code            = \magyar@enumarg{extras}{#1},%            yes,no
  fancyhdr.code          = \magyar@enumarg{fancyhdr}{#1},%          hu,unchanged
  figurecaptions.code    = \magyar@enumarg{figurecaptions}{#1},%    hu,us,unchanged
  footnote.code          = \magyar@enumarg{footnote}{#1},%          yes,unchanged,huplain,starplain
  frenchspacing.code     = \magyar@enumarg{frenchspacing}{#1},%     unchanged,no,yes
  hunnewlabel.code       = \magyar@enumarg{hunnewlabel}{#1},%       yes,no,only-hu
  hunumbers.code         = \magyar@enumarg{hunumbers}{#1},%         yes,no
  hutoday.code           = \magyar@enumarg{hutoday}{#1},%           yes,no
  hynumberline.code      = \magyar@enumarg{hynumberline}{#1},%      unchanged,hu
  labelenums.code        = \magyar@enumarg{labelenums}{#1},%        unchanged,hu-a,hu-A,hu-d
  labelitems.code        = \magyar@enumarg{labelitems}{#1},%        unchanged,hu
  longcaption.code       = \magyar@enumarg{longcaption}{#1},%       justified,centered,centernewline,none(=unchanged)
  mathbrk.code           = \magyar@enumarg{mathbrk}{#1},%           define,unchanged,fix
  mathfactorial.code     = \magyar@enumarg{mathfactorial}{#1},%     define,unchanged,fix
  mathhucomma.code       = \magyar@enumarg{mathhucomma}{#1},%       define,unchanged,fix
  mathmuskips.code       = \magyar@enumarg{mathmuskips}{#1},%       unchanged,latex,hu
  ntheoremfix.code       = \magyar@enumarg{ntheoremfix}{#1},%       yes,unchanged
  openqq.code            = \magyar@enumarg{openqq}{#1},%            maybedown,up,down,unchanged
  partnumber.code        = \magyar@enumarg{partnumber}{#1},%        unchanged,huordinal,Huordinal
  safest.code            = \magyar@enumarg{safest}{#1},%            no(no effect),yes(is equivalent to defaults=safest)
  sectiondot.code        = \magyar@enumarg{sectiondot}{#1},%        safe,none,problematic
  shortrefcmds.code      = \magyar@enumarg{shortrefcmds}{#1},%      yes,no
  suggestions.code       = \magyar@enumarg{suggestions}{#1},%       yes,no
  tablecaptions.code     = \magyar@enumarg{tablecaptions}{#1},%     hu,us,unchanged
  theoremtitle.code      = \magyar@enumarg{theoremtitle}{#1},%      hu,unchanged
  toclang.code           = \magyar@enumarg{toclang}{#1},%           good,badfloat,badall,unchanged
  varioref.code          = \magyar@enumarg{varioref}{#1},%          hu,unchanged
  %
  az.code                = \magyar@yesweaknoarg{az}{#1},%       yes,weak,no
  emitdate.code          = \magyar@yesweaknoarg{emitdate}{#1},% yes,weak,no
  hang.code              = \magyar@yesweaknoarg{hang}{#1},%     yes,weak,no
  mathreal.code          = \magyar@yesweaknoarg{mathreal}{#1},% yes,weak,no
  mond.code              = \magyar@yesweaknoarg{mond}{#1},%     yes,weak,no
  refstruc.code          = \magyar@yesweaknoarg{refstruc}{#1},% yes,weak,no
  textqq.code            = \magyar@yesweaknoarg{textqq}{#1},%   yes,weak,no
  told.code              = \magyar@yesweaknoarg{told}{#1},%     yes,weak,no
  %
  postdescription.code   = \magyar@paragraphopt{postdescription}{#1},% unchanged,bfdot,dot,quad,diamond,enskip,quad,em,empty,...(\magyar@post@...)
  postpara.code          = \magyar@paragraphopt{postpara}{#1},%        unchanged,bfdot,dot,quad,diamond,enskip,quad,em,empty,...(\magyar@post@...)
  postsubpara.code       = \magyar@paragraphopt{postsubpara}{#1},%     unchanged,bfdot,dot,quad,diamond,enskip,quad,em,empty,...(\magyar@post@...)
  %
  amstocnumskip.code     = \magyar@opt@amstocnumskip{#1},% <command>,<empty>
  classmod.code          = \magyar@opt@classmod{#1},%      yes,unchanged(=no),<class name>
  hyphenmins.code        = \magyar@opt@hyphenmins{#1},%    <digit><digit>,unchanged,\lefthyphenmin\righthyphenmin
  shorthandcs.code       = \magyar@opt@shorthandcs{#1},%   <command>,none
  titles.code            = \magyar@opt@titles{#1},%        unchanged,<command>
  %
  accents.code           = \magyar@deprecatedopt{accents}[The 'accents' option has been deprecated. Never use OT1 font encoding with magyar.ldf],
  amslevelfix.code       = \magyar@deprecatedopt{amslevelfix},
  amsuppercasefix.code   = \magyar@deprecatedopt{amsuppercasefix},
  babelmarkfix.code      = \magyar@deprecatedopt{babelmarkfix},% babel 3.9+ no longer needs this
  captionfix.code        = \magyar@deprecatedopt{captionfix},%   caption package no longer needs this
  cjhebrewfix.code       = \magyar@deprecatedopt{cjhebrewfix}[{The 'cjhebrewfix' option has been deprecated. Use the 'active=onlycs' option instead}],
  hyphenation.code       = \magyar@deprecatedopt{hyphenation},
  showfix.code           = \magyar@deprecatedopt{showfix},%      ucsencs.def no longer needs this
}

\def\magyar@setkeys#1\relax{\SetKeys[babel-magyar]{#1}}

\def\magyar@@unchanged{unchanged}
\def\magyar@enumarg#1#2{%
  \expandafter\ifx\csname magyar@opt@#1@@#2\endcsname\relax
    \@@magyar@error{Invalid arg for option: #1 = #2}%
  \else
    \csname magyar@opt@#1@@#2\endcsname
  \fi
}
\def\@@magyar@argw@no  {0}%
\def\@@magyar@argw@weak{1}%
\def\@@magyar@argw@yes {2}%
\def\magyar@yesweaknoarg#1#2{%
  \expandafter\ifx\csname @@magyar@argw@#2\endcsname\relax
    \@@magyar@error{Invalid arg for option: #1 = #2\MessageBreak Must be =no, =yes or =weak}%
  \else
    \expandafter\edef\csname magyar@opt@@#1\endcsname{\csname @@magyar@argw@#2\endcsname}%
  \fi
}
\def\magyar@paragraphopt#1#2{%
  \ifx#2\magyar@@unchanged\else
    \expandafter\def\csname magyar@opt@@#1\endcsname{#2}%
  \fi
}
\def\magyar@deprecatedopt@@#1[#2]{\PackageWarningNoLine{\CurrentOption.ldf}{#2}}
\def\magyar@deprecatedopt@#1{\PackageWarningNoLine{\CurrentOption.ldf}{The '#1' option is deprecated and has no effect}}
\def\magyar@deprecatedopt#1{\@ifnextchar[{\magyar@deprecatedopt@@{#1}}{\magyar@deprecatedopt@{#1}}}

%** These defaults load most of the new functionality, but try not to
%** introduce visible typographical changes over magyar.ldf v1.4.
%** These are the overall defaults, in case of \def\magyarOptions{} (or if is missing).
%**
%** These are the defaults: (over-1.4)
%**   \def\magyarOptions{
%**     active=safe,               % or =problematic or =none or =onlycs
%**     activeprefix=babelopt2,    % or =none or =babelopt3 or =grave or =acute or =quotedbl
%**     activespace=none,          % or =safe or =problematic
%**     afterindent=unchanged,     % or =force-no or =force-yes
%**     amstocnumskip=\enskip,     % TeX code or --empty--
%**     amstocnumlang=all,         % or =hu
%**     amspostsectiondot=no,      % or =unchanged
%**     appendixdot=yes,           % or =no
%**     az=weak,                   % or =yes or =no
%**     captions=hu,               % or =unchanged
%**     chapterhead=yes,           % or =unchanged(=no)
%**     chapternumber=unchanged,   % see partnumber=
%**     classmod=yes,              % or =unchanged(=no) or TeX class name
%**     %defaults=over-1.4,        % or =compat-1.4 or =safest or =prettiest or =hu-min
%**     dottedtocline=fix,         % or =unchanged
%**     emitdate=weak,             % or =no or =yes
%**     extras=yes,                % or =no
%**     fancyhdr=hu,               % or =unchanged
%**     figurecaptions=hu,         % or =us or =unchanged
%**     frenchspacing=unchanged,   % or =no or =yes
%**     hang=weak,                 % or =no or =yes
%**     hunnewlabel=yes,           % or =no or =only-hu
%**     hunumbers=yes,             % or =no
%**     hutoday=yes,               % or =no
%**     hyphenmins=22,             % or =unchanged or two chars: \lefthyphenmin\righthyphenmin
%**     hynumberline=unchanged,    % or =hu
%**     labelenums=unchanged,      % or =hu-a or =hu-A or =hu-d
%**     labelitems=unchanged,      % or =hu
%**     longcaption=justified,     % or =centered or =centernewline or =none (=unchanged)
%**     mathbrk=define,            % or =unchanged or =fix
%**     mathhucomma=define,        % or =unchanged or =fix
%**     mathfactorial=define,      % or =unchanged or =fix
%**     mathmuskips=unchanged,     % or =latex or =hu
%**     mathreal=weak,             % or =no or =yes
%**     mond=weak,                 % or =no or =yes
%**     ntheoremfix=yes,           % or =unchanged
%**     openqq=maybedown,          % or =up or =down or =unchanged
%**     partnumber=unchanged,      % or =huordinal or =Huordinal
%**     postdescription=unchanged, % see postpara=
%**     postpara=unchanged,        % or =bfdot or =dot or =quad or =diamond or =enskip or =quad or =em or =empty ... (\magyar@post@...)
%**     postsubpara=unchanged,     % see postpara=
%**     refstruc=weak,             % or =no or =yes
%**     %safest=no,                % or =yes (safest=no has no effect, safest=yes is equivalent to defaults=safest)
%**     sectiondot=safe,           % or =none or =problematic
%**     shorthandcs=\shu,          % or =none or a csname or a \cs, e.g shorthandcs=\shu
%**     shortrefcmds=yes,          % or =no
%**     suggestions=yes,           % or =no
%**     tablecaptions=hu,          % or =us or =unchanged
%**     textqq=weak,               % or =no or =yes
%**     theoremtitle=hu,           % or =unchanged
%**     footnote=yes,              % or =unchanged or =huplain or =starplain
%**     titles=\enskip,            % TeX code: =unchanged, =\quad or other
%**     toclang=good,              % or =badfloat or =badall or =unchanged
%**     told=weak,                 % or =no or =yes
%**     varioref=hu,               % or =unchanged
%**   }\usepackage[magyar]{babel}

\dMf magyar@opt@defaults@@over-1.4 {
  \magyar@enumarg{active}{safe}
  \magyar@enumarg{activeprefix}{babelopt2}
  \magyar@enumarg{activespace}{none}
  \magyar@enumarg{afterindent}{unchanged}
  \magyar@enumarg{amspostsectiondot}{no}
  \magyar@enumarg{amstocnumlang}{all}
  \magyar@opt@amstocnumskip{\enskip}
  \magyar@enumarg{appendixdot}{yes}
  \magyar@yesweaknoarg{az}{weak}
  \magyar@enumarg{captions}{hu}
  \magyar@enumarg{chapternumber}{unchanged}
  \magyar@opt@classmod{yes}
  \magyar@enumarg{dottedtocline}{fix}
  \magyar@yesweaknoarg{emitdate}{weak}
  \magyar@enumarg{extras}{yes}
  \magyar@enumarg{chapterhead}{yes}
  \magyar@enumarg{fancyhdr}{hu}
  \magyar@enumarg{figurecaptions}{hu}
  \magyar@enumarg{footnote}{yes}
  \magyar@enumarg{frenchspacing}{unchanged}
  \magyar@yesweaknoarg{hang}{weak}
  \magyar@enumarg{hunnewlabel}{yes}
  \magyar@enumarg{hunumbers}{yes}
  \magyar@enumarg{hutoday}{yes}
  \magyar@opt@hyphenmins{22}% Default LaTeX is {23}
  \magyar@enumarg{labelenums}{unchanged}
  \magyar@enumarg{labelitems}{unchanged}
  \magyar@enumarg{longcaption}{justified}
  \magyar@enumarg{mathbrk}{define}
  \magyar@enumarg{mathfactorial}{define}
  \magyar@enumarg{mathhucomma}{define}
  \magyar@enumarg{mathmuskips}{unchanged}
  \magyar@enumarg{hynumberline}{unchanged}
  \magyar@yesweaknoarg{mathreal}{weak}
  \magyar@yesweaknoarg{mond}{weak}
  \magyar@enumarg{ntheoremfix}{yes}
  \magyar@enumarg{openqq}{maybedown}
  \magyar@enumarg{partnumber}{unchanged}
  \magyar@paragraphopt{postdescription}{unchanged}
  \magyar@paragraphopt{postpara}{unchanged}
  \magyar@paragraphopt{postsubpara}{unchanged}
  \magyar@yesweaknoarg{refstruc}{weak}
  \magyar@enumarg{sectiondot}{safe}
  \magyar@opt@shorthandcs{\shu}
  \magyar@enumarg{shortrefcmds}{yes}
  \magyar@enumarg{suggestions}{yes}
  \magyar@enumarg{tablecaptions}{hu}
  \magyar@yesweaknoarg{textqq}{weak}
  \magyar@enumarg{theoremtitle}{hu}
  \magyar@opt@titles{\enskip}
  \magyar@enumarg{toclang}{good}
  \magyar@yesweaknoarg{told}{weak}
  \magyar@enumarg{varioref}{hu}
}

%** These defaults try to be compatible with magyar.ldf v1.4 as much as
%** possible, but avoids stupid, problematic, dangerous implementation
%** mistakes that would make magyar.ldf incompatible with many LaTeX
%** packages. The purpose of compat-1.4 is to make the document compilable:
%** if a fix would produce better results, but documents are compilable
%** without the fix, the fix will not be applied in compat-1.4.
%** Some very useful fixes are not applied here.
\dMf magyar@opt@defaults@@compat-1.4 {
  \magyar@enumarg{active}{safe}
  \magyar@enumarg{activeprefix}{grave}
  \magyar@enumarg{activespace}{none}
  \magyar@enumarg{afterindent}{unchanged}
  \magyar@enumarg{amspostsectiondot}{unchanged}
  \magyar@enumarg{amstocnumlang}{all}
  \magyar@opt@amstocnumskip{}
  \magyar@enumarg{appendixdot}{yes}
  \magyar@yesweaknoarg{az}{yes}
  \magyar@enumarg{captions}{hu}
  \magyar@enumarg{chapterhead}{yes}
  \magyar@enumarg{chapternumber}{unchanged}
  \magyar@opt@classmod{yes}
  \magyar@enumarg{dottedtocline}{unchanged}
  \magyar@yesweaknoarg{emitdate}{no}
  \magyar@enumarg{extras}{yes}
  \magyar@enumarg{fancyhdr}{unchanged}
  \magyar@enumarg{figurecaptions}{hu}
  \magyar@enumarg{footnote}{unchanged}
  \magyar@enumarg{frenchspacing}{unchanged}
  \magyar@yesweaknoarg{hang}{no}
  \magyar@enumarg{hunnewlabel}{yes}
  \magyar@enumarg{hunumbers}{no}
  \magyar@enumarg{hutoday}{yes}
  \magyar@opt@hyphenmins{unchanged}
  \magyar@enumarg{labelenums}{unchanged}
  \magyar@enumarg{labelitems}{unchanged}
  \magyar@enumarg{longcaption}{justified}
  \magyar@enumarg{mathbrk}{unchanged}
  \magyar@enumarg{mathhucomma}{unchanged}
  \magyar@enumarg{mathfactorial}{unchanged}
  \magyar@enumarg{mathmuskips}{unchanged}
  \magyar@enumarg{hynumberline}{unchanged}
  \magyar@yesweaknoarg{mathreal}{no}
  \magyar@yesweaknoarg{mond}{no}
  \magyar@enumarg{ntheoremfix}{yes}
  \magyar@enumarg{openqq}{maybedown}
  \magyar@enumarg{partnumber}{unchanged}
  \magyar@paragraphopt{postdescription}{unchanged}
  \magyar@paragraphopt{postpara}{unchanged}
  \magyar@paragraphopt{postsubpara}{unchanged}
  \magyar@yesweaknoarg{refstruc}{no}
  \magyar@enumarg{sectiondot}{safe}
  \magyar@opt@shorthandcs{none}
  \magyar@enumarg{shortrefcmds}{yes}
  \magyar@enumarg{suggestions}{no}
  \magyar@enumarg{tablecaptions}{hu}
  \magyar@yesweaknoarg{textqq}{no}
  \magyar@enumarg{theoremtitle}{hu}
  \magyar@opt@titles{\quad}
  \magyar@enumarg{toclang}{good}
  \magyar@yesweaknoarg{told}{no}
  \magyar@enumarg{varioref}{hu}
}

%** These defaults turn of most features. The effect is similar to as if
%** magyar.ldf hasn't been loaded at all. Useful for debugging purposes.
\def\magyar@opt@defaults@@safest{
  \magyar@enumarg{active}{none}
  \magyar@enumarg{activeprefix}{none}
  \magyar@enumarg{activespace}{none}
  \magyar@enumarg{afterindent}{unchanged}
  \magyar@enumarg{amspostsectiondot}{unchanged}
  \magyar@enumarg{amstocnumlang}{all}
  \magyar@opt@amstocnumskip{}
  \magyar@enumarg{appendixdot}{yes}
  \magyar@yesweaknoarg{az}{no}
  \magyar@enumarg{captions}{unchanged}
  \magyar@enumarg{chapternumber}{unchanged}
  \magyar@opt@classmod{unchanged}
  \magyar@enumarg{dottedtocline}{unchanged}
  \magyar@yesweaknoarg{emitdate}{no}
  \magyar@enumarg{extras}{no}
  \magyar@enumarg{chapterhead}{no}
  \magyar@enumarg{fancyhdr}{unchanged}
  \magyar@enumarg{figurecaptions}{unchanged}
  \magyar@enumarg{footnote}{unchanged}
  \magyar@enumarg{frenchspacing}{unchanged}
  \magyar@yesweaknoarg{hang}{no}
  \magyar@enumarg{hunnewlabel}{no}
  \magyar@enumarg{hunumbers}{no}
  \magyar@enumarg{hutoday}{no}
  \magyar@opt@hyphenmins{unchanged}
  \magyar@enumarg{labelenums}{unchanged}
  \magyar@enumarg{labelitems}{unchanged}
  \magyar@enumarg{longcaption}{unchanged}
  \magyar@enumarg{mathbrk}{unchanged}
  \magyar@enumarg{mathhucomma}{unchanged}
  \magyar@enumarg{mathfactorial}{unchanged}
  \magyar@enumarg{mathmuskips}{unchanged}
  \magyar@enumarg{hynumberline}{unchanged}
  \magyar@yesweaknoarg{mathreal}{no}
  \magyar@yesweaknoarg{mond}{no}
  \magyar@enumarg{ntheoremfix}{unchanged}
  \magyar@enumarg{openqq}{unchanged}
  \magyar@enumarg{partnumber}{unchanged}
  \magyar@paragraphopt{postdescription}{unchanged}
  \magyar@paragraphopt{postpara}{unchanged}
  \magyar@paragraphopt{postsubpara}{unchanged}
  \magyar@yesweaknoarg{refstruc}{no}
  \magyar@enumarg{sectiondot}{none}
  \magyar@opt@shorthandcs{none}
  \magyar@enumarg{shortrefcmds}{no}
  \magyar@enumarg{suggestions}{yes}
  \magyar@enumarg{tablecaptions}{unchanged}
  \magyar@yesweaknoarg{textqq}{no}
  \magyar@enumarg{theoremtitle}{unchanged}
  \magyar@opt@titles{unchanged}
  \magyar@enumarg{toclang}{unchanged}
  \magyar@yesweaknoarg{told}{no}
  \magyar@enumarg{varioref}{unchanged}
}

%** These defaults load almost all features, and try to do their best to make
%** the document comply to the Hungarian typography standards. Full compliance
%** is not achieved yet, and as new features are implemented, they will be
%** added to these defaults.
\def\magyar@opt@defaults@@prettiest{
  \magyar@enumarg{active}{safe}
  \magyar@enumarg{activeprefix}{babelopt2}
  \magyar@enumarg{activespace}{safe}
  \magyar@enumarg{afterindent}{unchanged}
  \magyar@enumarg{amspostsectiondot}{no}
  \magyar@enumarg{amstocnumlang}{all}
  \magyar@opt@amstocnumskip{\enskip}
  \magyar@enumarg{appendixdot}{no}
  \magyar@yesweaknoarg{az}{yes}
  \magyar@enumarg{captions}{hu}
  \magyar@enumarg{chapternumber}{unchanged}
  \magyar@opt@classmod{yes}
  \magyar@enumarg{dottedtocline}{fix}
  \magyar@yesweaknoarg{emitdate}{yes}
  \magyar@enumarg{extras}{yes}
  \magyar@enumarg{chapterhead}{yes}
  \magyar@enumarg{fancyhdr}{hu}
  \magyar@enumarg{figurecaptions}{hu}
  \magyar@enumarg{footnote}{yes}
  \magyar@enumarg{frenchspacing}{yes}
  \magyar@yesweaknoarg{hang}{yes}
  \magyar@enumarg{hunnewlabel}{yes}
  \magyar@enumarg{hunumbers}{yes}
  \magyar@enumarg{hutoday}{yes}
  \magyar@opt@hyphenmins{22}
  \magyar@enumarg{labelenums}{hu-a}
  \magyar@enumarg{labelitems}{hu}
  \magyar@enumarg{longcaption}{centered}
  \magyar@enumarg{mathbrk}{fix}
  \magyar@enumarg{mathhucomma}{fix}
  \magyar@enumarg{mathfactorial}{fix}
  \magyar@enumarg{mathmuskips}{hu}
  \magyar@enumarg{hynumberline}{hu}
  \magyar@yesweaknoarg{mathreal}{yes}
  \magyar@yesweaknoarg{mond}{yes}
  \magyar@enumarg{ntheoremfix}{yes}
  \magyar@enumarg{openqq}{maybedown}
  \magyar@enumarg{partnumber}{Huordinal}
  \magyar@paragraphopt{postdescription}{dot}
  \magyar@paragraphopt{postpara}{diamond}
  \magyar@paragraphopt{postsubpara}{star}
  \magyar@yesweaknoarg{refstruc}{yes}
  \magyar@enumarg{sectiondot}{safe}
  \magyar@opt@shorthandcs{\shu}
  \magyar@enumarg{shortrefcmds}{no}
  \magyar@enumarg{suggestions}{yes}
  \magyar@enumarg{tablecaptions}{hu}
  \magyar@yesweaknoarg{textqq}{yes}
  \magyar@enumarg{theoremtitle}{hu}
  \magyar@opt@titles{\enskip}
  \magyar@enumarg{toclang}{good}
  \magyar@yesweaknoarg{told}{yes}
  \magyar@enumarg{varioref}{hu}
}

%** Expands to the \magyarOptions changes defaults=hu-min makes over
%** defaults=safest.
\def\magyar@@humin@options{
  active=safe,
  activeprefix=babelopt2,
  activespace=safe,
  amspostsectiondot=no,
  amstocnumlang=all,
  amstocnumskip=\enskip,
  appendixdot=no,
  az=weak,
  captions=hu,
  chapterhead=yes,
  classmod=yes,
  dottedtocline=fix,
  emitdate=weak,
  extras=yes,
  fancyhdr=hu,
  figurecaptions=hu,
  footnote=huplain,
  frenchspacing=yes,
  hang=weak,
  hunnewlabel=yes,
  hunumbers=yes,
  hutoday=yes,
  hynumberline=hu,
  hyphenmins=22,
  labelenums=hu-d,
  labelitems=hu,
  longcaption=centered,
  mathbrk=fix,
  mathfactorial=define,
  mathhucomma=fix,
  mathreal=weak,
  mond=weak,
  ntheoremfix=yes,
  openqq=maybedown,
  postdescription=dot,
  postpara=diamond,
  postsubpara=star,
  refstruc=weak,
  sectiondot=safe,
  shorthandcs=\shu,
  shortrefcmds=yes,
  tablecaptions=hu,
  textqq=weak,
  theoremtitle=hu,
  titles=\enskip,
  toclang=good,
  told=weak,
  varioref=hu,
}

%** Matches Hungarian typographic rules most closely
%** and most simplistically (minimally).
\dMf magyar@opt@defaults@@hu-min {%
  \magyar@opt@defaults@@safest
  \expandafter\magyar@setkeys\magyar@@humin@options\relax
}

% \magyarDumpHuMin writes a code to the log file that you can use to test the 'defaults=hu-min' option.
\def\magyarDumpHuMin{%
  \begingroup%
  \typeout{^^J\expandafter\@gobble\string\% for testing the 'defaults=hu-min' option}%
  \typeout{\string\def\string\magyarOptions\expandafter\@gobble\string\{}%
  \typeout{\space\space\space defaults=safest,}%
  \@for\reserved@a:=\magyar@@humin@options%
    \do{\ifx\reserved@a\space\else\typeout{\space\space\expandafter\strip@prefix\meaning\reserved@a,}\fi}%
  \typeout{\expandafter\@gobble\string\}}%
  \typeout{\string\usepackage[magyar]{babel}^^J}%
  \endgroup%
}

\def\magyar@opt@safest@@yes{\magyar@opt@defaults@@safest}
\def\magyar@opt@safest@@no{}

\def\magyar@opt@titles#1{\def\magyar@opt@@titleskip{#1}}
\def\@@magyar@twodigitcheck#1#2#3\hfuzz#4#5{%
  \csname if\ifnum0<0\string#1 \ifnum0<0\string#2 false\else true\fi\else true\fi\endcsname
    \@@magyar@error{Option #4 needs [1-9][1-9], got #1#2}%
  \fi
}
\def\magyar@opt@hyphenmins#1{%
  \def\reserved@a{#1}%
  \ifx\reserved@a\magyar@@unchanged
    \let\magyar@opt@@hyphenmins\@empty
  \else
    \@@magyar@twodigitcheck#1..\hfuzz{hyphenmins}{#1}%
    \def\magyar@opt@@hyphenmins{#1}%
  \fi
}

\def\magyar@opt@amstocnumskip#1{\def\magyar@opt@@amstocnumskip{#1}}
\def\magyar@opt@amstocnumlang@@all{\def\magyar@opt@@amstocnumlang{2}}
\def\magyar@opt@amstocnumlang@@hu {\def\magyar@opt@@amstocnumlang{1}}
\def\magyar@opt@active@@none{\def\magyar@opt@@active{0}}
\def\magyar@opt@active@@onlycs{\def\magyar@opt@@active{1}}
\def\magyar@opt@active@@safe{\def\magyar@opt@@active{2}}
\def\magyar@opt@active@@problematic{\def\magyar@opt@@active{3}}
\def\magyar@opt@activeprefix@@none    {\let\magyar@opt@@activeprefix\relax}
\def\magyar@opt@activeprefix@@acute   {\def\magyar@opt@@activeprefix{'}}
\def\magyar@opt@activeprefix@@grave   {\def\magyar@opt@@activeprefix{`}}
\def\magyar@opt@activeprefix@@quotedbl{\def\magyar@opt@@activeprefix{"}}
\dMf magyar@opt@activeprefix@@babelopt2 {%
  \@ifpackagewith{babel}{activeacute}% Dat: not expandable
    {\def\magyar@opt@@activeprefix{'}}%
    {\def\magyar@opt@@activeprefix{`}}%
}
\dMf magyar@opt@activeprefix@@babelopt3 {%
  \@ifpackagewith{babel}{activeacute}%
    {\def\magyar@opt@@activeprefix{'}}%
 {\@ifpackagewith{babel}{activegrave}%
    {\def\magyar@opt@@activeprefix{`}}%
    {\def\magyar@opt@@activeprefix{"}}}%
}
\def\magyar@opt@activespace@@none{\def\magyar@opt@@activespace{0}}
\def\magyar@opt@activespace@@safe{\def\magyar@opt@@activespace{2}}
\def\magyar@opt@activespace@@problematic{\def\magyar@opt@@activespace{3}}
\def\magyar@opt@amspostsectiondot@@no       {\def\magyar@opt@@amspostsectiondot{1}}
\def\magyar@opt@amspostsectiondot@@unchanged{\def\magyar@opt@@amspostsectiondot{0}}
\def\magyar@opt@sectiondot@@none{\def\magyar@opt@@sectiondot{0}}
\def\magyar@opt@sectiondot@@safe{\def\magyar@opt@@sectiondot{1}}
\def\magyar@opt@sectiondot@@problematic{\def\magyar@opt@@sectiondot{2}}
\def\magyar@opt@captions@@unchanged{\def\magyar@opt@@captions{0}}
\def\magyar@opt@captions@@hu{\def\magyar@opt@@captions{1}}
\def\magyar@opt@varioref@@unchanged{\def\magyar@opt@@varioref{0}}
\def\magyar@opt@varioref@@hu{\def\magyar@opt@@varioref{1}}
\def\magyar@opt@fancyhdr@@unchanged{\def\magyar@opt@@fancyhdr{0}}
\def\magyar@opt@fancyhdr@@hu{\def\magyar@opt@@fancyhdr{1}}
\def\magyar@opt@ntheoremfix@@unchanged{\def\magyar@opt@@ntheoremfix{0}}
\def\magyar@opt@ntheoremfix@@yes{\def\magyar@opt@@ntheoremfix{1}}
\def\magyar@opt@figurecaptions@@unchanged{\def\magyar@opt@@figurecaptions{0}}
\def\magyar@opt@figurecaptions@@hu{\def\magyar@opt@@figurecaptions{1}}
\def\magyar@opt@figurecaptions@@us{\def\magyar@opt@@figurecaptions{2}}
\def\magyar@opt@tablecaptions@@unchanged{\def\magyar@opt@@tablecaptions{0}}
\def\magyar@opt@tablecaptions@@hu{\def\magyar@opt@@tablecaptions{1}}
\def\magyar@opt@tablecaptions@@us{\def\magyar@opt@@tablecaptions{2}}
\def\magyar@opt@toclang@@unchanged{\def\magyar@opt@@toclang{0}}% same as =badall
\def\magyar@opt@toclang@@badall{\def\magyar@opt@@toclang{0}}
\def\magyar@opt@toclang@@badfloat{\def\magyar@opt@@toclang{1}}
\def\magyar@opt@toclang@@good{\def\magyar@opt@@toclang{2}}
\def\magyar@opt@mathbrk@@unchanged{\def\magyar@opt@@mathbrk{0}}
\def\magyar@opt@mathbrk@@define{\def\magyar@opt@@mathbrk{1}}
\def\magyar@opt@mathbrk@@fix{\def\magyar@opt@@mathbrk{2}}
\def\magyar@opt@mathfactorial@@unchanged{\def\magyar@opt@@mathfactorial{0}}
\def\magyar@opt@mathfactorial@@define{\def\magyar@opt@@mathfactorial{1}}
\def\magyar@opt@mathfactorial@@fix{\def\magyar@opt@@mathfactorial{2}}
\def\magyar@opt@mathhucomma@@unchanged{\def\magyar@opt@@mathhucomma{0}}
\def\magyar@opt@mathhucomma@@define{\def\magyar@opt@@mathhucomma{1}}
\def\magyar@opt@mathhucomma@@fix{\def\magyar@opt@@mathhucomma{2}}
\def\magyar@opt@mathmuskips@@unchanged{\def\magyar@opt@@mathmuskips{0}}
\def\magyar@opt@mathmuskips@@latex{\def\magyar@opt@@mathmuskips{1}}
\def\magyar@opt@mathmuskips@@hu{\def\magyar@opt@@mathmuskips{2}}
\def\magyar@opt@hynumberline@@unchanged{\def\magyar@opt@@hynumberline{0}}
\def\magyar@opt@hynumberline@@latex{\def\magyar@opt@@hynumberline{1}}
\def\magyar@opt@hynumberline@@hu{\def\magyar@opt@@hynumberline{2}}
\def\magyar@opt@hunnewlabel@@no {\def\magyar@opt@@hunnewlabel{0}}
\dMf magyar@opt@hunnewlabel@@only-hu {\def\magyar@opt@@hunnewlabel{1}}
\def\magyar@opt@hunnewlabel@@yes{\def\magyar@opt@@hunnewlabel{2}}
\def\magyar@opt@partnumber@@unchanged{\def\magyar@opt@@partnumber{0}}
\def\magyar@opt@partnumber@@huordinal{\def\magyar@opt@@partnumber{1}}
\def\magyar@opt@partnumber@@Huordinal{\def\magyar@opt@@partnumber{2}}
\def\magyar@opt@chapternumber@@unchanged{\def\magyar@opt@@chapternumber{0}}
\def\magyar@opt@chapternumber@@huordinal{\def\magyar@opt@@chapternumber{1}}
\def\magyar@opt@chapternumber@@Huordinal{\def\magyar@opt@@chapternumber{2}}
\def\magyar@opt@longcaption@@centered{\def\magyar@caption@centering{\centering}\def\magyar@caption@newline{\ }}
\def\magyar@opt@longcaption@@justified{\def\magyar@caption@centering{\relax}\def\magyar@caption@newline{\ }}
\def\magyar@opt@longcaption@@centernewline{\def\magyar@caption@centering{\centering}\def\magyar@caption@newline{\\\relax}}
\def\magyar@opt@longcaption@@none{\let\magyar@caption@centering\@empty}
\def\magyar@opt@longcaption@@unchanged{\let\magyar@caption@centering\@empty}
\def\magyar@opt@suggestions@@no {\def\magyar@opt@@suggestions{0}}
\def\magyar@opt@suggestions@@yes{\def\magyar@opt@@suggestions{1}}
\def\magyar@opt@appendixdot@@no {\def\@@magyar@appendixname{\appendixname}}
\def\magyar@opt@appendixdot@@yes{\def\@@magyar@appendixname{}}
\def\magyar@opt@extras@@no {\def\magyar@opt@@extras{0}}
\def\magyar@opt@extras@@yes{\def\magyar@opt@@extras{1}}
\def\magyar@opt@chapterhead@@unchanged{\def\magyar@opt@@chapterhead{0}}
\def\magyar@opt@chapterhead@@no{\def\magyar@opt@@chapterhead{0}}
\def\magyar@opt@chapterhead@@yes{\def\magyar@opt@@chapterhead{1}}
\def\magyar@opt@classmod@@no       {\let\magyar@opt@@classmod\relax}
\def\magyar@opt@classmod@@unchanged{\let\magyar@opt@@classmod\relax}
\def\magyar@opt@classmod@@yes      {\let\magyar@opt@@classmod\@empty}
\def\magyar@opt@classmod#1{%
  \expandafter\ifx\csname magyar@opt@classmod@@#1\endcsname\relax
    \def\magyar@opt@@classmod{#1}%
  \else
    \csname magyar@opt@classmod@@#1\endcsname
  \fi
}
\def\magyar@opt@shorthandcs#1{%
  \def\reserved@a{#1}%
  \def\reserved@b{none}%
  \ifx\reserved@a\reserved@b
    \def\magyar@opt@@shorthandcs{0}% overridable
  \else
    \def\magyar@opt@@shorthandcs{1}%
    \ifcat\hfuzz\noexpand#1\relax% #1 is \shu  \shu`tty is `tty
      \def#1##1{\protect\@@magyar@shorthand}% Dat: ##1 is usually `_12
    \else
      \@namedef{#1}{\protect\@@magyar@shorthand}%
    \fi
  \fi
}
\def\magyar@opt@hunumbers@@no{\def\magyar@opt@@hunumbers{0}}
\def\magyar@opt@hunumbers@@yes{\def\magyar@opt@@hunumbers{1}}
\def\magyar@opt@theoremtitle@@unchanged{\def\magyar@opt@@theoremtitle{0}}
\def\magyar@opt@theoremtitle@@hu{\def\magyar@opt@@theoremtitle{1}}
\def\magyar@opt@footnote@@unchanged{\def\magyar@opt@@footnote{0}}
\def\magyar@opt@footnote@@yes{\def\magyar@opt@@footnote{1}}
\def\magyar@opt@footnote@@huplain{\def\magyar@opt@@footnote{2}}
\def\magyar@opt@footnote@@starplain{\def\magyar@opt@@footnote{3}}
\def\magyar@opt@hutoday@@no{\def\magyar@opt@@hutoday{0}}
\def\magyar@opt@hutoday@@yes{\def\magyar@opt@@hutoday{1}}
\def\magyar@opt@shortrefcmds@@no{\def\magyar@opt@@shortrefcmds{0}}
\def\magyar@opt@shortrefcmds@@yes{\def\magyar@opt@@shortrefcmds{1}}
\def\magyar@opt@dottedtocline@@fix{\def\magyar@opt@@dottedtocline{1}}
\def\magyar@opt@dottedtocline@@unchanged{\def\magyar@opt@@dottedtocline{0}}
\def\magyar@opt@labelenums@@unchanged{\def\magyar@opt@@labelenums{0}}
\dMf magyar@opt@labelenums@@hu-a     {\def\magyar@opt@@labelenums{1}}
\dMf magyar@opt@labelenums@@hu-A     {\def\magyar@opt@@labelenums{2}}
\dMf magyar@opt@labelenums@@hu-d     {\def\magyar@opt@@labelenums{3}}
\def\magyar@opt@labelitems@@unchanged{\def\magyar@opt@@labelitems{0}}
\def\magyar@opt@labelitems@@hu       {\def\magyar@opt@@labelitems{1}}
\def\magyar@opt@openqq@@unchanged{\def\magyar@opt@@openqq{0}}
\def\magyar@opt@openqq@@up{\def\magyar@opt@@openqq{1}}
\def\magyar@opt@openqq@@down{\def\magyar@opt@@openqq{2}}
\def\magyar@opt@openqq@@maybedown{\def\magyar@opt@@openqq{3}}
\def\magyar@opt@frenchspacing@@unchanged{\def\magyar@opt@@frenchspacing{0}}% same as =no
\def\magyar@opt@frenchspacing@@no {\def\magyar@opt@@frenchspacing{1}}
\def\magyar@opt@frenchspacing@@yes{\def\magyar@opt@@frenchspacing{2}}
\dMf magyar@opt@afterindent@@force-no {\def\magyar@opt@@afterindent{0}}
\dMf magyar@opt@afterindent@@force-yes {\def\magyar@opt@@afterindent{1}}
\dMf magyar@opt@afterindent@@unchanged {\def\magyar@opt@@afterindent{9}}

% --- Option processing code of \magyarOptions

\magyar@enumarg{defaults}{over-1.4}  % defaults=over-1.4 by default
\def\magyar@opt@@hdrtitleskip{\enskip}% !! option for that

\expandafter\ifx\csname opt@\CurrentOption.ldf.sty\endcsname\relax\else
  \expandafter\expandafter\expandafter
  \magyar@setkeys\csname opt@\CurrentOption.ldf.sty\endcsname\relax
  \expandafter\let\csname opt@\CurrentOption.ldf.sty\endcsname\relax
\fi

\expandafter\ifx\csname \CurrentOption Options\endcsname\relax\else
  \expandafter\expandafter\expandafter
  \magyar@setkeys\csname \CurrentOption Options\endcsname\relax
  \expandafter\let\csname \CurrentOption Options\endcsname\relax
\fi

\ifnum\magyar@opt@@openqq=3 % =maybedown
  \ifnum\magyar@opt@@active=0
    \def\magyar@opt@@openqq{0}% =unchanged
  \else
    \def\magyar@opt@@openqq{2}% =down
  \fi
\fi
\ifnum\magyar@opt@@partnumber   >0 \let\magyar@needopt@hunumbers\@empty \fi
\ifnum\magyar@opt@@chapternumber>0 \let\magyar@needopt@hunumbers\@empty \fi
\expandafter\ifx\csname magyar@needopt@hunumbers\endcsname\relax\else
  \ifnum\magyar@opt@@hunumbers=0
    \@@magyar@error{(chapter|part)number=... needs hunumbers=yes}%
    \magyar@opt@@hunumbers1
  \fi
  \def\magyar@hunumbers@noclassmod{%
    \@@magyar@error{unsupported \string\documentclass,\MessageBreak
      hunumbers=yes,chapternumber=...,partnumber=... disabled}%
  }%
  % This may get redefined to \@empty later.
  \def\magyar@hunumbers@errmsg{\magyar@hunumbers@noclassmod}%
  \AtBeginDocument\magyar@hunumbers@errmsg
\fi
\if0\magyar@opt@@shorthandcs\else
  \if\magyar@opt@@active0%
    \@@magyar@error{active=none implies shorthandcs=none}%
    \magyar@opt@@active2 % active=safe
  \fi
\fi

% Helper macro to skip long code sections more robustly than a plain
% \if...\fi: it retunes catcodes so TeX ignores everything up to a marker
% line without fully tokenizing it, saving hash memory and avoiding issues
% with stray conditionals or special characters in the skipped part.
\@gobble\iftrue
%** Usage: `\if...\else\@@magyar@skiplong\fi ... \@gobble{^}', where {^} is in
%** its own line
\def\@@magyar@skiplong#1{%
  \fi
  %\typeout{--skipfrom:\the\inputlineno}
  \bgroup% so ^} would close it
  \catcode\string`^13 \lccode\string`~=\string`^
  \lowercase{\let~\fi}% \lowercase because catcode of ^ in \let^ would have been already assigned
  %\lowercase{\def~{\typeout{--skipto:\inputlineno}\fi}}%
  \catcode\string`\\14 % comment -- avoid using hash memory
  \catcode\string`$14 % %$
  \iffalse
}
\@gobble\fi

% Initialize the per-language extras hook for \CurrentOption so that
% later \addto\csname extras\CurrentOption\endcsname calls have a base to extend.
\@namedef{extras\CurrentOption}{}%

% --- theorem title number ordering and the dot; theoremtitle=
%
% Dat: \ref{mytheorem} never appends a dot
%
% If you want to define your own theorem style without using theorem.sty or
% ntheorem.sty, then do a
% \PassOptionsToPackage{theoremtitle=unchanged}{magyar.ldf} , and then
% define a custom \@begintheorem, \@opargbegintheorem and \@endtheorem.

\if0\magyar@opt@@theoremtitle \@@magyar@skiplong\fi
% for theorem.sty and ntheorem.sty
% Define your \newtheorem commands in the preamble, before \theoremstyle
\def\magyar@th@magyar{%
  \def\@begintheorem##1##2{%
    \item[\hskip \labelsep{\theorem@headerfont ##2.\ ##1.}]}%
  \def\@opargbegintheorem##1##2##3{%
    \item[\hskip \labelsep{\theorem@headerfont ##2.\ ##1\ (##3).}]}%
}

% vvv Dat: theorem.sty needs \th@magyar-plain when \theoremstyle{...}
%     is called, so we have to define it early (even if theorem.sty is not
%     loaded).
\expandafter\let\csname th@\CurrentOption-plain\endcsname\magyar@th@magyar% Dat: moved to earlier
% !! now \usepackage{theorem}
%        \usepackage[magyar]{babel}
%        \theoremstyle{magyar-plain}% % Dat: must be put before \new
%        \newtheorem{Def}{Defin\'{i}ci\'o}

%** @param #1 magyar
\def\@@magyar@setup@theoremstyle#1{%
  \expandafter\ifx\csname theorem@headerfont\endcsname\relax
    \let\magyar@th@magyar\@undefined
  \else
    %\expandafter\let\csname th@#1-plain\endcsname\magyar@th@magyar% Dat: moved to earlier
    % vvv Dat: activate the Hungarian theorem style by default.
    \def\theorem@headerfont{\bf}%
    \edef\reserved@a{\the\theorem@style}%
    \def\reserved@b{plain}%
    \ifx\reserved@a\reserved@b
      \expandafter\theorem@style\expandafter{#1-plain}%
    \fi
  \fi
}

% Do this quite late in case theorem.sty or ntheorem.sty is loaded late.
\expandafter\AtBeginDocument\expandafter{\expandafter
  \@@magyar@setup@theoremstyle\expandafter{\CurrentOption}}

\expandafter\addto\csname extras\CurrentOption\endcsname{%
  %%\show\theorem@headerfont
  \expandafter\ifx\csname thm@swap\endcsname\relax
    \expandafter\ifx\csname theorem@headerfont\endcsname\relax% no theorem.sty
      \babel@save\@begintheorem
      % Dat: amsart.cls: \def\@begintheorem#1#2[#3]{}%
      \def\@begintheorem#1#2{\trivlist
	\item[\MakeLinkTarget{\@currentcounter}\hskip \labelsep{\bfseries #2.\ #1.}]\itshape}% old: \slshape
      \babel@save\@opargbegintheorem
      \def\@opargbegintheorem#1#2#3{\trivlist
	\item[\MakeLinkTarget{\@currentcounter}\hskip \labelsep{\bfseries #2.\ #1\ (#3).}]\itshape}% old: \slshape
    \else% theorem.sty or ntheorem.sty
      % Nothing -- style already set up in the preamble.
    \fi
  \else% amsthm.sty
    \babel@save\thmhead
    \babel@save\swappedhead
    %** \swapnumbers. \newtheorem{...}{...} already inserts the trailing dot
    % \def\thm@swap{S}% no effect :-(
    %** overrides amsart.cls
    \def\thmhead#1#2#3{%
      \thmnumber{\@upn{#2}\@ifnotempty{#1}{.~}}%
      \thmname{#1}%
      \thmnote{ {\the\thm@notefont(#3)}}%
    }%
    \let\swappedhead\thmhead
  \fi
}%
\@gobble
{^}%

% --- Quotation marks with \textqq
%
% Symbols of Hungarian quoting: unquoted ,,outer >>middle 'inner'<<''
% Equivalent: unquoted \quotedblbase outer \guillemotright middle
%   \textquoteright inner\textquoteright\guillemotleft\textquotedblright
% With magyar.ldf: unquoted \textqq{outer \textqq{middle \textqq{inner}}}
% Typing this with magyar.ldf works for outer: \textqq{foo}
% Typing this works with T1 and OT1 for outer: \glqq foo''
% Typing this works in T1, but not in OT1 for outer: ,,foo''
%

\if0\magyar@opt@@textqq \@@magyar@skiplong\fi
\def\magyar@textqq@level{0}
%** Provide a placeholder for language-unspecific \textqq
\def\@@magyar@textqq@nolang#1{%
  \ifcase\magyar@textqq@level
    \def\magyar@textqq@level{1}%
    \textquotedblleft#1\textquotedblright
    \def\magyar@textqq@level{0}%
  \or
    \textquoteleft#1\textquoteright
  \fi
}
\def\@@magyar@textqq@hu#1{\ifmmode\expandafter\mbox\fi{%
  % Imp: \textqq{\textqq{foo}} -> \textqq{\textqq{foo}\,}
  % Dat: \showhyphens{\textqq{hello bello}} --> hel-lo bel-lo
  % Dat: \guillemotleft is provided by babel.def even for the OT1 encoding
  \ifcase\magyar@textqq@level
    \def\magyar@textqq@level{1}%
    % Dat: \hskip instead of \kern to allow hyphenation
    % \nobreak\hskip-.06em adds a non-breakable skip and allows hyphenation
    % of the following word.
    \quotedblbase\nobreak\hskip-.06em\relax#1\kern\z@\textquotedblright% skip OK for the CM and EC fonts
    \def\magyar@textqq@level{0}%
  \or
    \def\magyar@textqq@level{2}%
    \guillemotright\nobreak\hskip-.07em\relax#1\kern-0.05em\guillemotleft% skip OK for CM and EC fonts
    \def\magyar@textqq@level{1}%
  \or
    \def\magyar@textqq@level{3}%
    \textquoteright\nobreak\hskip\z@\relax#1\kern\z@\textquoteright
    \def\magyar@textqq@level{2}%
  \else
    \quotedblbase\nobreak\hskip-.06em\relax#1\kern\z@\textquotedblright% skip OK for the CM and EC fonts
  \fi
}}%

\catcode`\ =11\relax% make space a letter
\ifnum\magyar@opt@@textqq\expandafter\ifx\csname\@gobble.textqq\endcsname\relax1\fi>1\relax% 21, 2, 11, 1
\def\textqq{\protect\textqq }% \MakeRobust
\def\@@magyar@textqq{\protect\textqq }%
\let\textqq \@@magyar@textqq@nolang%
\expandafter\addto\csname\@gobble.extras\CurrentOption\endcsname%
{\babel@save\textqq \let\textqq \@@magyar@textqq@hu}%
\else%
\def\@@magyar@textqq{\protect\@@magyar@textqq }% \MakeRobust
\let\@@magyar@textqq \@@magyar@textqq@nolang%
\expandafter\addto\csname\@gobble.extras\CurrentOption\endcsname%
{\babel@save\@@magyar@textqq \let\@@magyar@textqq \@@magyar@textqq@hu}%
\fi%
\catcode`\ =10\relax% back to space again
\@gobble
{^}%

% --- Definite articles (\az, \pageref -> \apageref etc.)

\if0\magyar@opt@@az \@@magyar@skiplong\fi
%** modified by pts at Fri Oct  3 22:19:13 CEST 2003
%** @param #1 tokens, will be \edef\vfuzz'ed
\def\@@magyar@az@vfuzzedef#1{%
  \begingroup
  \@safe@activestrue% Allow active `:' inside labels.
  \def\hyper@@link[##1]##2##3##4{##4}% Dat: \def\b@abook{\hyper@@link [cite]{}{cite.sokt}{2}}% with hyperref.sty
  \let\romannumeral\number% by pts@fazekas.hu at Mon Oct 27 23:44:06 CET 2003
  % Dat: deliberately no \autoref for hyperref.sty !! (why??)
  \let\ref\@@magyar@zeroref \let\pageref\@@magyar@zeropageref
  \let\cite\@@magyar@zerocite \let\eqref\@@magyar@zeroeqref
  % ^^^ fix so \az{\ref{...}} works
  \let\refstruc\@@magyar@zerorefplus
  \let\refstrucparen\@@magyar@zerorefplus
  \def\setbox ##1{}% to get rid of accents and special letters
  \def\hbox ##1{}%
  \def\accent ##1 ##2{##2}%
  \def\add@accent ##1##2{##2}%
  \def\@text@composite@x ##1##2{##2}%
  % TODO(pts): Add more from t1enc.def
  %\let\`\@empty \let\'\@empty \let\^\@empty \let\~\@empty \let\"\@empty
  %\let\H\@empty \let\r\@empty \let\v\@empty \let\u\@empty \let\=\@empty
  %\let\.\@empty
  \def\DH{DH}\def\DJ{DJ}\def\NG{NG}\def\O{O}\def\SS{S}\def\TH{TH}\def\IJ{IJ}%
  \def\dh{dh}\def\dj{dj}\def\o{o}\def\ng{ng}\def\l{l}%
  \def\th{th}\def\i{i}\def\j{j}\def\ij{ij}%
  \def\ae{a}\def\AE{A}\def\oe{o}\def\OE{O}%
  \def\ss{s}\def\L{L}\def\i{i}\def\j{j}%
  \def\d{}\def\b{}\def\c{}\def\t{}%
  %
  \def\IeC{}% \usepackage[utf8]{inputenc} generates \IeC{\'a}.
  \def\ { }%
  %
  % Dat: no need to remove \textsf or \mdseries, because they are
  % handled properly by \protect == \string here.
  \let\@safe@activestrue\@empty% babel puts these inside \b@...: % Dat: \def\b@abook{\@safe@activesfalse 2}% (what is \@safe@actives??)
  \let\@safe@activesfalse\@empty
  \edef\vfuzz{\noexpand\def\noexpand\vfuzz{#1}}%
  \expandafter\endgroup\vfuzz
}

%** Makes \az etc. not emit the definite article.
%** Unused.
\def\@@magyar@noaz{%
  \def\@@magyar@az@lowt{\@ifstar\@gobble\@firstofone}%
  \def\az{\@@magyar@az@lowt}%
  \let\Az\az
  \def\aref{\@ifstar\@gobble\@@magyar@az@lowa}%
  \let\Aref\aref
  \def\apageref{\@ifstar\@gobble\firstoftwo}%
  \let\Apageref\apageref
  \def\acite{\@ifstar\@gobble\cite}%
  \let\Acite\acite
}

%** Usage: \az{alma} -> `az alma'; \Az*{alma} -> `az'
%** Usage: \az+\ref{foo} is equivalent to \az{\ref{foo}}
%** TODO(pts): fix \aref{l5} if the body of l5 is empty.
\def\@@magyar@az@lowt{\@ifstar{\@@magyar@az@lowy}{\@ifnextchar+\@@magyar@az@lowz\@@magyar@az@lowx}}
%** #1 is +.
\def\@@magyar@az@lowz#1#2#3{\@@magyar@az@lowy{#2{#3}}~#2{#3}}
\def\@@magyar@az@lowx#1{\@@magyar@az@lowy{#1}~\ignorespaces#1}
\def\@@magyar@az@lowy#1{%
  \begingroup
  \begingroup
  %\def\protect{\noexpand\protect\noexpand}%
  % TODO(pts): Is \set@display@protect called in other invocations of
  %            \@@magyar@az@vfuzzedef, such as \aref or \az+\ref? Make it
  %            consistent.
  % latex.ltx: \let\@typeset@protect\relax
  % latex.ltx: \def\set@display@protect{\let\protect\string}
  % latex.ltx: \def\set@typeset@protect{\let\protect\@typeset@protect}
  \set@display@protect% \let\protect\string; screws up \r
  \@@magyar@az@vfuzzedef{#1}%
  \expandafter\endgroup\expandafter
    \set@display@protect\expandafter% fixes \r; why??
    \@@magyar@az@set\expandafter{\vfuzz}\hbox$%
  \endgroup
}

\def\@@magyar@firstarg#1#2\hbox${#1}%

%** \Aref({e:foo}) -> `az~(5)'; \aref*{e:foo}: `az'
\def\@@magyar@az@lowa{\@ifnextchar({\@@magyar@az@lowb}{\@@magyar@az@lowb\@empty}}
\def\@@magyar@az@lowb#1#2{\@@magyar@az@ref\@firstoftwo{#2}~#1\ref{#2}}
%** @param #1 \@firstoftwo (for \ref) or \@secondoftwo (for \pageref)
%**           everything which is not \@secondoftwo is treated is \@firstoftwo
%** @param #2 for \csname r@#2\endcsname
\def\@@magyar@az@ref#1#2{%
  \begingroup
  % Dat: this works when turning on hyperref.sty for the 1st time (1st .aux file) -- but the original \ref doesn't work (\@fifthoffive)
  % Dat: #2 might contain an active : ; ! ? in case
  %      \def\magyarOptions{activespace=safe}
  \begingroup\lccode`~`: \lowercase{\endgroup\edef~{\string~}}%
  \begingroup\lccode`~`; \lowercase{\endgroup\edef~{\string~}}%
  \begingroup\lccode`~`! \lowercase{\endgroup\edef~{\string~}}%
  \begingroup\lccode`~`? \lowercase{\endgroup\edef~{\string~}}%
  \@ifundefined{@@magyar@r@#2}{%
    \@ifundefined{r@#2}{\let\reserved@a\@empty}{\expandafter\let\expandafter\reserved@a\csname r@#2\endcsname}%
  }{\expandafter\let\expandafter\reserved@a\csname @@magyar@r@#2\endcsname}%
  \ifx\reserved@a\@empty\endgroup\else% a speed boost
    \ifx#1\@secondoftwo\relax % Dat: remove the 1st {...} arg inside \reserved@a
      \expandafter\expandafter\expandafter\def\expandafter\expandafter
        \expandafter\reserved@a\expandafter\expandafter\expandafter{%
        \expandafter\expandafter\expandafter\@gobble\reserved@a{}}%
    \fi
    % vvv keep only the 1st arg (w/o braces) of \vbox, without expansion.
    %     This is to have hyperref.sty with `\newlabel{tab}{{1}{2}{\texorpdfstring {\textit {bg}}{asd}\relax }{section.1}{}}'
    %     right, and \texorpdfstring not expanded in the \edef below.
    \expandafter\expandafter\expandafter\def\expandafter\expandafter
      \expandafter\reserved@a\expandafter\expandafter\expandafter{%
      \expandafter\expandafter\expandafter\@@magyar@firstarg\reserved@a{}\hbox$}%
    \expandafter\@@magyar@az@vfuzzedef\expandafter{\reserved@a}%
    \expandafter\endgroup\expandafter\@@magyar@az@set\expandafter{\vfuzz}\hbox$%
  \fi
}

\def\@@magyar@az@lowd#1{\@@magyar@az@ref\@secondoftwo{#1}~\pageref{#1}}

\def\@@magyar@acite@lowb{\@ifnextchar [{\@@magyar@acite@lowa}{\@@magyar@acite@lowa[]}}
\def\@@magyar@acite@lowa[#1]#2{%
  \@@magyar@acite@lowd{#2}~%
  \ifx\vfuzz#1\vfuzz\cite{#2}\else\cite[#1]{#2}\fi
}
\def\@@magyar@acite@lowd#1{\@@magyar@acite@lowc#1,\hbox$}
\def\@@magyar@acite@lowc#1,#2\hbox#3${%
  \begingroup
  \@ifundefined{@@magyar@b@#1}{%
    \@ifundefined{b@#1}{\def\vfuzz{}}{%
      \@@magyar@az@vfuzzedef{%
        \expandafter\expandafter\expandafter\@@magyar@b@number
        \expandafter\expandafter\expandafter{\csname b@#1\endcsname}}}%
  }  {\@@magyar@az@vfuzzedef{\csname @@magyar@b@#1\endcsname}}%
  \expandafter\endgroup\expandafter
    \@@magyar@az@set\expandafter{\vfuzz}\hbox$%
}

% The original version of the \@az macros below were written by
% David Carlisle, but they have been completely rewritten by pts.

%** Adds definite article for a word #1#2#3 if #1 is in [A..Z]. Spaces
%** between #1, #2 and #3 can be -- fortunately -- ignored.
%** This is used to distinguish single-letter labels from text labels.
%** Dat: by pts: `\Az{Sz} betű' emits `Az Sz betű'; `\az{szólam}' is also OK
%** @param #1#2#3 doesn't contain \hbox (but may contain space)
%** @param #1 #2 #3 never lower case
\def\@@magyar@azuc#1#2#3{%
  \if\noexpand#1Az%
  \else\if\noexpand#1Ez%
  \else\if\noexpand#1F\ifcat a\noexpand#2\else z\fi
  \else\if\noexpand#1Iz%
  \else\if\noexpand#1L\ifcat a\if\noexpand#2Y\expandafter\noexpand#3\else\expandafter\noexpand#2\fi\else z\fi
  \else\if\noexpand#1M\ifcat a\noexpand#2\else z\fi
  \else\if\noexpand#1N\ifcat a\if\noexpand#2Y\expandafter\noexpand#3\else\expandafter\noexpand#2\fi\else z\fi
  \else\if\noexpand#1Oz%
  \else\if\noexpand#1S\ifcat a\if\noexpand#2Z\expandafter\noexpand#3\else\expandafter\noexpand#2\fi\else z\fi
  \else\if\noexpand#1R\ifcat a\noexpand#2\else z\fi
  \else\if\noexpand#1Uz%
  \else\if\noexpand#1X\ifcat a\noexpand#2\else z\fi
  \else\if\noexpand#1Y\ifcat a\noexpand#2\else z\fi
  \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
}
\def\@@magyar@azuc@pre#1#2#3#4\hbox${%
  \uppercase{\@@magyar@azuc#1#2#3}% Dat: we map a..z -> A..Z
}

%** Also defined elsewhere.
%** @param #2 \else...\else...\fi...\fi etc.
\def\@@magyar@swaprelax#1#2\relax{#2#1}
\def\@@magyar@ignorehbox@pre#1\hbox${}%
%** Counts the number of digits until a nondigit is found, and insert `z' if
%** appropriate (divisible by 3).
%** We need this to properly handle \aref for eg. 1.3.12 (subsec number)
%** or 3-45 (pagenumber preceeded by chapter number).
\def\@@magyar@eatddd#1#2#3#4{%
  % Wizardry: \@@magyar@eatddd throws away #1 (\@@magyar@ignorehbox@pre)
  \ifnum9<1\string#2 \ifnum9<1\string#3 \ifnum9<1\string#4 % test for digits
  \@@magyar@swaprelax\@@magyar@eatddd\fi\fi\else z\fi
  \relax\@@magyar@ignorehbox@pre
}

% vvv Wizardry: ignore everything (second number?) after first space
\def\@@magyar@eatddd@pre#1 #2\hbox${\@@magyar@eatddd.#1[][]\hbox$}%

\@gobble\iftrue
\def\@@magyar@azrb@stop#1#2\fi{#1}%
%** Strips spaces and braces, up to \hfuzz.
%** @expands to `z' or nothing (last char of definite article)
%** @example \message{R:\removebraces {{foo}{{}{b}{{{{a\fi}}}}r}}\hfuzz;}
\def\@@magyar@azrb#1{%
  \ifx\hfuzz#1\@@magyar@azrb@stop\fi
  \expandafter\@@magyar@azrb\expandafter{%
  \ifcat{\noexpand#1\hfuzz\iffalse}\fi\expandafter
    \@@magyar@azrb\else\hfuzz}\@@magyar@azrb@nob{#1}\fi}
\def\@@magyar@azrb@nob#1#2{#2% #2 is \fi
  \ifx\hfuzz#1\hfuzz\expandafter\@firstoftwo
    \expandafter\@@magyar@azrb\fi\@@magyar@azrb@nobone#1}
\def\@@magyar@azrb@nobone#1{\noexpand#1\@@magyar@azrb}%

\def\@@magyar@aznospace#1{%
  \if\hfuzz\noexpand#1\expandafter\@@magyar@aznospace\else % a \cs, ignored -- may be \relax
    \expandafter\@@magyar@aznospace@short\expandafter#1%
  \fi
}

% Expandable macro which removes single-letter control sequences, converts
% multiletter control sequences to dots, and keeps letters, and converts
% everything else (i.e. non-letter, non-control sequence tokens) to `other'.
%
% Usage: \@@magyar@azro...\hfuzz, where ... doesn't contain braces, spaces
% or \hfuzz.
%
% Wizardry: this uses the following tricks:
%
%   \expandafter\@gobble\if...\fi\@@selfcontinue trick.
%
%   % Tests that #1 is a control sequence token, provided it's a single, non-space, non-brace token.
%   \def\testcs#1{\ifcat a\expandafter\@gobble\string#1aNO\else CS\fi}
%
%   % Tests that #1 is a control sequence token of 1 character, provided it's a single control sequence token.
%   \def\testcso#1{\ifcat a\expandafter\@gobbletwo\string#1\@empty aCSO\else NO\fi}
%
%   % Tests that #1 is other character, provided it's a single, non-space, non-brace token.
%   \def\testother#1{\ifcat\string*\noexpand#1OTHER\else NO\fi}
\def\@@magyar@azro#1{%
  \ifx#1\hfuzz\expandafter\@gobble% Stop at \hfuzz.
  \else\ifcat a\expandafter\@gobble\string#1a% Not a control sequence.
    \ifcat a\noexpand#1\else\expandafter\string\fi#1% Keep letters, convert everything else with \string.
  \else\ifcat a\expandafter\@gobbletwo\string#1\@empty a% Single-character control sequence, e.g. \/, \', \H, \ , remove it.
  \else.% Replace multiletter control sequence with a dot.
  \fi\fi\fi\@@magyar@azro}

% Expandable macro which converts outermost spaces to dots, and occasionally
% removes some layers of braces. It also adds an extra dot (as a side
% effect).
%
% Usage: `\\@magyar@azrs...\hfuzz ', where ... argument doesn't contain
% \if..., \else and \fi tokens.
\def\@@magyar@azrs#1 {%
  \ifx\hfuzz#1\expandafter\@gobble% Stop at \hfuzz.
  \else#1.%
  \fi\@@magyar@azrs}%

%** @param #1 might not be \cs -- and isn't empty
\def\@@magyar@aznospace@short#1{%
  \if5\noexpand#1z% Dat: emit `az 5'
    \@@magyar@swaprelax\@@magyar@ignorehbox@pre
  \else\if1\noexpand#1%
    % Dat: properly handle `az 1001 éjszaka', `az 1234567 éves bolygó'
    \@@magyar@swaprelax\@@magyar@eatddd@pre
  \else\ifnum1<1\noexpand#1 % a different digit, emit `a '
    \@@magyar@swaprelax\@@magyar@ignorehbox@pre
  \else\if-\noexpand#1% \az{-5} yields `a~-5'
    \@@magyar@swaprelax\@@magyar@ignorehbox@pre
  \else\ifcat\string*\noexpand#1% puncuation in the beginning, such as `(' in `(5)'
    \@@magyar@swaprelax\@@magyar@aznospace  % ignore punctuation
  \else
    \@@magyar@swaprelax{\@@magyar@azuc@pre#1}%
  \fi\fi\fi\fi\fi\relax
}

%** Typesets `z' or nothing (last char of definite article). Is _not_
%** expandable.
%** @param #1 may contain space(_10) tokens, but mustn't contain expandable
%**   tokens.
\def\@@magyar@az@set#1#2\hbox${% by pts
  % ^^^ Dat: we have `$' instead of `!' because of catcode changes (shouldn't affect)
  % We use \@firstofone to strip a leading space.
  \edef\reserved@a{\expandafter\@@magyar@azrs\@firstofone#1 \hfuzz\@gobble{} }%
  \edef\reserved@a{\expandafter\@@magyar@azrb\reserved@a\hfuzz}%
  \edef\reserved@a{\expandafter\@@magyar@azro\reserved@a\hfuzz}%
  \expandafter\@@magyar@aznospace\reserved@a[b][][] \hbox$%
  % ^^^ Wizardry: [b][][] is a smart sentinel for \@@magyar@azuc and `b' for
  %	\@@magyar@aznospace@short. First `[' is there for aesthetics. Space
  %     is there for \@@magyar@eatddd@pre. \hbox$ is something that will not
  %     occur in normal text.
}

\ifnum\magyar@opt@@az \expandafter\ifx\csname az\endcsname\relax1\fi>1 % 21, 2, 11, 1
  \DeclareRobustCommand\az{a\@@magyar@az@lowt}\fi
\ifnum\magyar@opt@@az \expandafter\ifx\csname Az\endcsname\relax1\fi>1 % 21, 2, 11, 1
  \DeclareRobustCommand\Az{A\@@magyar@az@lowt}\fi
\ifnum\magyar@opt@@az \expandafter\ifx\csname aref\endcsname\relax1\fi>1 % 21, 2, 11, 1
  \DeclareRobustCommand\aref{a\@ifstar{\@@magyar@az@ref\@firstoftwo}{\@@magyar@az@lowa}}\fi
\ifnum\magyar@opt@@az \expandafter\ifx\csname Aref\endcsname\relax1\fi>1 % 21, 2, 11, 1
  \DeclareRobustCommand\Aref{A\@ifstar{\@@magyar@az@ref\@firstoftwo}{\@@magyar@az@lowa}}\fi
\ifnum\magyar@opt@@az \expandafter\ifx\csname apageref\endcsname\relax1\fi>1 % 21, 2, 11, 1
  \DeclareRobustCommand\apageref{a\@ifstar{\@@magyar@az@ref\@secondoftwo}{\@@magyar@az@lowd}}\fi
\ifnum\magyar@opt@@az \expandafter\ifx\csname Apageref\endcsname\relax1\fi>1 % 21, 2, 11, 1
  \DeclareRobustCommand\Apageref{A\@ifstar{\@@magyar@az@ref\@secondoftwo}{\@@magyar@az@lowd}}\fi
\ifnum\magyar@opt@@az \expandafter\ifx\csname acite\endcsname\relax1\fi>1 % 21, 2, 11, 1
  \DeclareRobustCommand\acite{a\@ifstar{\@@magyar@acite@lowd}{\@@magyar@acite@lowb}}\fi
\ifnum\magyar@opt@@az \expandafter\ifx\csname Acite\endcsname\relax1\fi>1 % 21, 2, 11, 1
  \DeclareRobustCommand\Acite{A\@ifstar{\@@magyar@acite@lowd}{\@@magyar@acite@lowb}}\fi

\@gobble
{^}

% --- hunnewlabel=

\if0\magyar@opt@@hunnewlabel
  \let\hunnewlabel\@gobbletwo
  % ^^^ with this the user would be able to switch from hunnewlabel=yes
  %     to hunnewlabel=no without removing the .aux file. But now I have a
  %     better solution to that. (??) !!
  \@@magyar@skiplong\fi

% [pts] Done properly by pts@fazekas.hu at Mon Mar  2 21:53:30 CET 2009
%
% \label will be redefined to write another line to .aux file:
% \hunnewlabel{...}{...}: similar to \newlabel{sectionStructNr}{pageNr},
% where the roman numerals are replaced by their arabic representations, so
% \aref and \apageref will work (`a II. rész'). The name \hunnewlabel is a
% legacy.
%
% We have to redefine \refstepcounter, which defines \@currentlabel, so we
% can define \magyar@@currentlabel@arabic, wich is the same as \@currentlabel,
% but it contains the number in arabic instead of roman. Without
% \magyar@@currentlabel@arabic, \label would have no clue that a roman number
% was involved. hyperref.sty also redefines \refstepcounter, but we are
% agnostic to that: it doesn't matter if we are first.

\let\magyar@@orig@refstepcounter\refstepcounter
% \relax, or {currentlabel}{pagenumber}
\let\magyar@@currentlabel@intact\relax
% \relax, or {currentlabel-in-arabic}{pagenumber-in-arabic}
\let\magyar@@currentlabel@arabic\relax

\def\@@magyar@setup@romantoarabic{%
  \let\romannumeral\number
  \let\@Roman\@roman  % avoid uppercasing
}

\def\refstepcounter#1{%
  \magyar@@orig@refstepcounter{#1}%
  \begingroup
    % Imp: wait till \shipout before expanding \thepage, in case of
    % \pagenumbering{roman}.
    % \c@page might be wrong (it's correcy at \shipout only), se we fake it.
    \c@page\@m
    \edef\reserved@b{{\thepage}}%
    \let\reserved@a\@currentlabel
    % Wrap \reserved@a in {...}, and then append \reserved@b to \reserved@a.
    \expandafter\expandafter\expandafter\def
      \expandafter\expandafter\expandafter\reserved@a%
      \expandafter\expandafter\expandafter{%
      \expandafter\expandafter\expandafter{%
      \expandafter\reserved@a\expandafter}\reserved@b}%
    \expandafter\def\expandafter\reserved@b\expandafter{%
      \expandafter\def\expandafter\magyar@@currentlabel@intact\expandafter{%
	\reserved@a}}%
  \expandafter\endgroup\reserved@b
  \begingroup
    \c@page\@m
    \@@magyar@setup@romantoarabic
    % This \protected@edef is from the \refstepcounter code.
    \protected@edef\reserved@a{%
      {\csname p@#1\endcsname\csname the#1\endcsname}{\thepage}}%
    \let\reserved@b\@empty
    \ifx\reserved@a\@currentlabel\else
      \expandafter\def\expandafter\reserved@b\expandafter{%
        \expandafter\def\expandafter\magyar@@currentlabel@arabic\expandafter{%
	  \reserved@a}}%
    \fi
  \expandafter\endgroup\reserved@b
}

%** Make its expansion short so \ifx would be fast down in noextras...
\def\@@magyar@labela{\@@magyar@labelb}%
\def\@@magyar@labelb#1{%
  \@@magyar@orig@label{#1}% output \newlabel to \@auxout
  \begingroup
    \c@page\@m
    \edef\reserved@b{{\thepage}}%
    \let\reserved@a\@currentlabel
    % Wrap \reserved@a in {...}, and then append \reserved@b to \reserved@a.
    \expandafter\expandafter\expandafter\def
      \expandafter\expandafter\expandafter\reserved@a%
      \expandafter\expandafter\expandafter{%
      \expandafter\expandafter\expandafter{%
      \expandafter\reserved@a\expandafter}\reserved@b}%
    \ifx\reserved@a\magyar@@currentlabel@intact
      % \@currentlabel created by our overridden \refstepcounter.
      \ifx\magyar@@currentlabel@arabic\magyar@@currentlabel@intact\else
	\expandafter\@@magyar@labelc\magyar@@currentlabel@arabic{#1}%
      \fi
    \else
      % \@currentlabel from unknown origin.
      % Emit \hunnewlabel if \thepage is roman.
      \@@magyar@setup@romantoarabic
      \edef\reserved@c{{\thepage}}%
      \ifx\reserved@b\reserved@c\else % \thepage is roman
        \@@magyar@labelc\@currentlabel{}{#1}%
      \fi
    \fi
  \endgroup
}
% @param #1 \@currentlabel (maybe expanded) as roman converted to arabic
% @param #2 any page number in any format; ignored
% @param #3 name of the label
\def\@@magyar@labelc#1#2#3{%
  % We have \noexpand\number below to prevent the \edef in \protected@write
  % from expanding the page number. It will be expanded at \shipout.
  \protected@write\@auxout{}{%
    \string\hunnewlabel{#3}{{#1}{\noexpand\number\c@page}}}%
}

\expandafter\addto\csname extras\CurrentOption\endcsname{%
  %%\message{--EXTRAS--}\show\label
  \ifx\label\@@magyar@labela\else
    \let\@@magyar@orig@label\label
    \let\label\@@magyar@labela
  \fi
}
\expandafter\addto\csname noextras\CurrentOption\endcsname{%
  %%\message{--NO--}%
  \ifx\label\@@magyar@labela
    % The trick here is not to restore the ``original'' label command if
    % somebody has changed it since the previous save in \extrasmagyar. This
    % adds compatibility with hyperref.sty, because it loads nameref.sty which
    % changes \label after babel.sty and magyar.ldf has been loaded.
    % 1. \usepackage[magyar]{babel}% \AtBeginDocument{\select@language{magyar}}
    % 2. \usepackage{hyperref}% \AtBeginDocument{\RequirePackage{nameref}}
    % 3. \begin{document}:
    % 4. \input \jobname.aux
    % 5. \AtBeginDocument hooks:
    % 6. \select@language{magyar}
    % 7. \extrasmagyar
    % 8. \let\@@magyar@orig@label\label
    % 9. \RequirePackage{nameref}:
    % 10. \def\label#1{...}
    \if1\magyar@opt@@hunnewlabel % only hunnewlabel=only-hu
      \let\label\@@magyar@orig@label
    \fi
  \fi
  % \let\@@magyar@orig@label\relax % Dat: commenting out this makes it possible to load magyar.ldf twice
}
\def\hunnewlabel#1#2{%
  \def\reserved@a{#2}%
  \expandafter\ifx\csname r@#1\endcsname\reserved@a% hun and normal labels are the same
    \relax% \message{No need for def: #1}%
  \else
    \global\expandafter\let\csname @@magyar@r@#1\endcsname\reserved@a%
  \fi
}

\@gobble
{^}

% --- captions=

\if0\magyar@opt@@captions\@@magyar@skiplong\fi
\@namedef{captions\CurrentOption}{%
  % Dat: inputenc isn't known, so we just use the safe \'a for accented letters.
  \def\prefacename{El\H osz\'o}%
  \def\refname{Hivatkoz\'asok}%
  \def\abstractname{Kivonat}%
  \def\bibname{Irodalomjegyz\'ek}%
  \def\appendixname{f\"uggel\'ek}% BUGFIX at Sun Feb 29 22:02:51 CET 2004
  \def\contentsname{Tartalomjegyz\'ek}%
  \def\listfigurename{\'Abr\'ak jegyz\'eke}%
  \def\listtablename{T\'abl\'azatok jegyz\'eke}%
  \def\indexname{T\'argymutat\'o}%
  \def\enclname{Mell\'eklet}%
  \def\ccname{K\"orlev\'el--c\'\i mzettek}% ??
  \def\headtoname{C\'\i mzett}%
  \def\proofname{Bizony\'\i t\'as}% AMS-\LaTeX
  \def\glossaryname{Sz\'ojegyz\'ek}% glosszárium, (magyarázatos) szójegyzék
  % vvv All these are start with a small letter
  \def\figurename{\'abra}%
  \def\chaptername{fejezet}%
  \def\tablename{t\'abl\'azat}%
  \def\notesname{Jegyzetek}% endnotes.sty
  \def\partname{r\'esz}%
  \def\pagename{oldal}%
  \def\seename{l\'asd}%
  \def\alsoname{l\'asd m\'eg}%
}
\@gobble
{^}

% --- Changing the order of the table numbers; tablecaptions=

\if0\magyar@opt@@tablecaptions\@@magyar@skiplong\fi
  % Wee need `1. táblázat' instead of `Table 1'
  \if1\magyar@opt@@tablecaptions
        \def\@@magyar@fnum@table{\thetable.~\tablename}%
  \else \def\@@magyar@fnum@table{\tablename\nobreakspace\thetable}\fi
  \expandafter\addto\csname extras\CurrentOption\endcsname{%
    \babel@save\fnum@table\let\fnum@table\@@magyar@fnum@table}
  \@gobble
{^}

% --- Changing the order of the figure numbers; figurecaptions=

\if0\magyar@opt@@figurecaptions\@@magyar@skiplong\fi
  \if1\magyar@opt@@figurecaptions
        \def\@@magyar@fnum@figure{\thefigure.~\figurename}%
  \else \def\@@magyar@fnum@figure{\figurename\nobreakspace\thefigure}\fi
  \expandafter\addto\csname extras\CurrentOption\endcsname{%
    \babel@save\fnum@figure\let\fnum@figure\@@magyar@fnum@figure}
  \@gobble
{^}

% --- dottedtocline=

\if0\magyar@opt@@dottedtocline\@@magyar@skiplong\fi
  % Dat: It is quite safe to re-define \@dottedtocline, because it isn't
  % redefined in standard packages of teTeX 1.
  %** Overrides latex.ltx. Allows the page number extend beyond \@pnumwidth.
  \def\@dottedtocline#1#2#3#4#5{%
    \ifnum #1>\c@tocdepth \else
      \vskip \z@ \@plus.2\p@
      {\leftskip #2\relax \rightskip \@tocrmarg \parfillskip -\rightskip
       \parindent #2\relax\@afterindenttrue
       \interlinepenalty\@M
       \leavevmode
       \@tempdima #3\relax
       \advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip
       {#4}\nobreak
       \leaders\hbox{\(\m@th
          \mkern \@dotsep mu\hbox{.}\mkern \@dotsep
          mu\)}\hfill
       \nobreak
       % \begingroup needed because of https://tex.stackexchange.com/a/316692/820
       \setbox\@tempboxa\hbox{\begingroup\normalfont \normalcolor #5\endgroup}% ****pts****
       \ifdim\wd\@tempboxa<\@pnumwidth\setbox\@tempboxa\hb@xt@\@pnumwidth{\hfil\unhbox\@tempboxa}\fi
       \box\@tempboxa
       \par}%
    \fi}
  \@gobble
{^}%

% --- shortrefcmds=

\if0\magyar@opt@@shortrefcmds\@@magyar@skiplong\fi
  \def\azr{\aref}% better than \let, because it won't keep old value
  \def\Azr{\Aref}
  \def\azp{\apageref}
  \def\Azp{\Apageref}
  \def\azc{\acite}
  \def\Azc{\Acite}
  \@gobble
{^}%

% --- longcaption=

\ifx\magyar@caption@centering\@empty\@@magyar@skiplong\fi
  \def\magyar@caption@hsizecheck{\hsize}
  % We don't emit the two dots of `1. táblázat.' here, because
  % has already been emitted by \fnum@table etc.
  % We apply some formatting depending on the longcaption= option.
  % Dat: Gyurgyák, p95. says: `11. ábra. Hajtási változatok.'
  \let\@@magyar@do@makecaption\relax% before .toc
  \expandafter\addto\csname extras\CurrentOption\endcsname{%
    \@@magyar@do@makecaption}
  \def\@@magyar@do@makecaption@captiontwo@yes{%
    % Dat: caption2.sty or caption3.sty is loaded; do nothing.
  }
  \def\@@magyar@do@makecaption@captiontwo@no{%
    %** @param #1 \fnum@table or \fnum@figure
    \def\@makecaption##1##2{%
      \vskip\abovecaptionskip
      \sbox\@tempboxa{##1.\ ##2}% Dat: `: ' changed to `. ' to match Hungarian typography
      \ifdim \wd\@tempboxa>\magyar@caption@hsizecheck\relax
        {\magyar@caption@centering ##1.\magyar@caption@newline ##2\csname par\endcsname}%
      \else
        \global \@minipagefalse
        \hb@xt@\hsize{\hfil\box\@tempboxa\hfil}%
      \fi
      \vskip\belowcaptionskip}}
  \AtBeginDocument{%
    \expandafter\ifx\csname captionlabeldelim\endcsname\relax
      \expandafter\ifx\csname caption@lsep@period\endcsname\relax
        \let\@@magyar@do@makecaption\@@magyar@do@makecaption@captiontwo@no
      \else
        % Dat: caption3.sty is loaded, and it has caption@lsep defined
        % Dat: \show\caption@lsep@colon  % \long\def\caption@lsep@colon{: }
        % Dat: \show\caption@lsep %\def\caption@lsep{\caption@lsep@colon}
        \ifx\caption@lsep\caption@lsep@default
          % There was no \captionsetup{labelsep=...} yet, so we set the
          % default to period (dot).
          %
          % This sets \caption@lsep@default and \caption@lsep.
          \caption@setdefaultlabelsep{period}%
        \fi
        \let\@@magyar@do@makecaption\@@magyar@do@makecaption@captiontwo@yes
      \fi
    \else
      % Dat: caption2.sty is loaded (and has \def\captionlabeldelim{.} -- but it might have {:})
      % Dat: we now redefine {:} to {.}
      % Dat: the user can force {:} by \def\captionlabeldelim{:\empty}
      % Dat: this works now: \usepackage[german,french,magyar]{babel} \usepackage{caption2} \begin{document} \renewcommand*\captionfont{\itshape} \renewcommand*\captionlabelfont{\scshape}
      \def\reserved@a{:}%
      \ifx\reserved@a\captionlabeldelim \def\captionlabeldelim{.}\fi
      \let\@@magyar@do@makecaption\@@magyar@do@makecaption@captiontwo@yes
    \fi}
  \@gobble
{^}%

% --- labelenums=

\if0\magyar@opt@@labelenums \@@magyar@skiplong\fi
  \providecommand\@greekalph[1]{%
    % We use the robust \ensuremath here, similarly to \def\@fnsymbol in
    % latex.ltx.
    \ensuremath{\ifcase#1\or\alpha\or\beta\or\gamma\or\delta%
    \or\varepsilon\or\zeta\or\eta\or\vartheta\or\iota\or\kappa%
    \or\lambda\or\mu\or\nu\or\xi\or\varphi\or\varpi\or\varrho%
    \or\varsigma\or\tau\or\upsilon\or\chi\or\psi\or\omega%
    \else\@ctrerr\fi}}
  \expandafter\ifx\csname c@enumv\endcsname\relax
    \@definecounter{enumv}% call this before \def\theenumv
  \fi
  \if3\magyar@opt@@labelenums
    \def\theenumi  {\@arabic   \c@enumi}  \def\labelenumi  {\theenumi.}
    \def\theenumii {\@alph     \c@enumii} \def\labelenumii {\itshape\theenumii)}
    \def\theenumiii{\@greekalph\c@enumiii}\def\labelenumiii{\itshape\theenumiii)}
    \def\theenumiv {\@Alph     \c@enumiv} \def\labelenumiv {\itshape\theenumiv)}
    \def\theenumv  {\@Roman    \c@enumv}  \def\labelenumc  {\theenumv.} % Dat: I'm not sure
  \else
    \def\theenumi{\@Roman\c@enumi}       \def\labelenumi{\theenumi.}
    \def\theenumii{\@arabic\c@enumii}    \def\labelenumii{\theenumii.}
    % !! correct \ref style for \the
    \if1\magyar@opt@@labelenums % hu-a
      \def\theenumiii{\@alph\c@enumiii}    \def\labelenumiii{\itshape\theenumiii)}
      \def\theenumiv{\@greekalph\c@enumiv} \def\labelenumiv{\itshape\theenumiv)}
      \def\theenumv{\@Alph\c@enumv}        \def\labelenumv {\itshape\theenumv)}
    \else% hu-A
      \def\theenumiii{\@Alph\c@enumiii}    \def\labelenumiii{\itshape\theenumiii)}
      \def\theenumiv{\@alph\c@enumiv}      \def\labelenumiv{\itshape\theenumiv)}
      \def\theenumv{\@greekalph\c@enumv}   \def\labelenumv {\itshape\theenumv)}
    \fi
  \fi
  \def\reserved@a{% copied from latex.ltx
    \ifnum \@enumdepth >\thr@@\@toodeep\else
      \advance\@enumdepth\@ne
      \edef\@enumctr{enum\romannumeral\the\@enumdepth}%
	\expandafter\list
	  \csname label\@enumctr\endcsname
	  {\usecounter\@enumctr\def\makelabel##1{\hss\llap{##1}}}%
    \fi}
  \ifx\reserved@a\enumerate
    \def\enumerate{% no \@enumdepth>3
      \advance\@enumdepth\@ne
      \expandafter\ifx\csname labelenum\romannumeral\the\@enumdepth\endcsname\relax
        \@toodeep\advance\@enumdepth\m@ne\else
	\edef\@enumctr{enum\romannumeral\the\@enumdepth}%
	  \expandafter\list
	    \csname label\@enumctr\endcsname
	    {\usecounter\@enumctr\def\makelabel##1{\hss\llap{##1}}}%
      \fi}
  \fi
  \@gobble
{^}%

% --- labelitems=

\if0\magyar@opt@@labelitems \@@magyar@skiplong\fi
  \def\labelitemi{\textendash}
  % vvv Dat: formerly 2.5pt
  \def\labelitemii {\raise0.58ex\hbox{\scriptsize\textbullet}}
  \def\labelitemiii{\raise0.58ex\hbox{\(\scriptstyle\circ\)}}
  \def\labelitemiv {\raise0.58ex\hbox{\scriptsize\textasteriskcentered}}
  \def\labelitemv  {\raise0.58ex\hbox{\scriptsize\textperiodcentered}}
  \def\reserved@a{% copied from latex.ltx
    \ifnum \@itemdepth >\thr@@\@toodeep\else
      \advance\@itemdepth\@ne
      \edef\@itemitem{labelitem\romannumeral\the\@itemdepth}%
      \expandafter\list
	\csname\@itemitem\endcsname
	{\def\makelabel##1{\hss\llap{##1}}}%
    \fi}
  \ifx\reserved@a\itemize
    \def\itemize{% no \@itemdepth>3
      \advance\@itemdepth\@ne
      \expandafter\ifx\csname labelitem\romannumeral\the\@itemdepth\endcsname\relax
        \@toodeep\advance\@enumdepth\m@ne\else
	\edef\@itemitem{labelitem\romannumeral\the\@itemdepth}%
	\expandafter\list
	  \csname\@itemitem\endcsname
	  {\def\makelabel##1{\hss\llap{##1}}}%
      \fi}
  \fi
  \@gobble
{^}%

% --- postpara= and postsubpara= and postdescription=

%\show\magyar@opt@@postpara
%\show\magyar@@unchanged
\let\magyar@opt@override@paragraphs\@empty
  \ifx\magyar@opt@@postpara\magyar@@unchanged
  \ifx\magyar@opt@@postsubpara\magyar@@unchanged
  \ifx\magyar@opt@@postdescription\magyar@@unchanged
  \let\magyar@opt@override@paragraphs\@undefined
  \fi\fi\fi
\expandafter\ifx\csname magyar@opt@override@paragraphs\endcsname\relax\@@magyar@skiplong\fi
  % Dat: We make sure that hspaces emitted by \magyar@post@... are unstretchable
  \def\magyar@post@dot{.\enskip}%  \bfseries is the default, same as =bfdot
  \def\magyar@post@mddot{\textmd.\enskip}%
  \def\magyar@post@bfdot{\textbf.\enskip}%
  \let\magyar@post@quad\quad% not recommended in Hungarian
  \let\magyar@post@enskip\enskip% not recommended in Hungarian
  \def\magyar@post@em{\hskip1em\relax}%
  \let\magyar@post@empty\@empty
  %** from Gyurgy\'ak J\'anos: Szerkeszt\H{o}k \'es szerz\H{o}k k\'ezik\"onyve.
  %** We don't have a square-shaped, black diamond in our math fonts :-(.
  \def\magyar@post@diamond{%
    \enskip\raise.5ex\hbox{\font\f=msam10 at1.3ex \f\char7}\enskip%\ignorespaces% raised \blacklozenge
    %{\usefont{U}{msa}{m}{n}\small\char7}
  }
  \def\magyar@post@star{\enskip\({}^*\)\enskip}%
  \def\magyar@post@endash{ -- }%
  \def\magyar@post@semicolon{:\enskip}%
  \def\magyar@first#1#2\vfuzz{\noexpand#1}%
  %** Calls \magyar@pf@lowb, and never emits code resulting from #3 to TOC
  %** @param #1 empty or `*'
  %** @param #2 \@startsection{...}{...}... call
  %** @param #3 \paragraph or \subparagraph (selects one of \magyar@post@...)
  %** @param #4 paragraph title text
  \def\magyar@pf@lowa#1#2#3#4{%
    \if#1*\relax
      \bbl@afterelse\magyar@pf@lowb*%
    \else
      \bbl@afterfi  \magyar@pf@lowb{[#4]}%
    \fi
    {#2}{#3}{#4}%
  }%
  % !! a less obscure way for \paragraph, without -1sp etc.
  %** Calls \magyar@pf@lowb, and never emits code resulting from #3 to TOC
  %** @param #1 \@startsection{...}{...}... call
  %** @param #2 \paragraph or \subparagraph (selects one of \magyar@post@...)
  %** @param #3 paragraph title text
  %** @param #4 [...] arg to \paragraph
  \def\magyar@pf@lowc#1#2#3[#4]{%
    \magyar@pf@lowb{[#4]}{#1}{#2}{#3}%
  }%
  %** Calls \magyar@post@paragraph and \magyar@post@subparagraph
  %** @param #1 [#4] or `*' (what goes to TOC?)
  %** @param #2 \@startsection{...}{...}... call
  %** @param #3 \paragraph or \subparagraph
  %** @param #4 paragraph title text
  \def\magyar@pf@lowb#1#2#3#4{%
    #2#1{#4\csname magyar@post@\expandafter\@gobble\string#3\endcsname\kern\z@}%
    % ^^^ Dat: \kern\z@ is needed so \unskip won't occur at \paragraph*
    % ^^^ Dat: {#4\csname...} is needed so \magyar@post@dot makes a {\bf.}
    % Dat: \ignorespaces is superflous here, it also doesn't ignore \par
  }%
  %** Fixes (redefines) the specified macro so postpara= and postsubpara=
  %** takes effect. It is useful to call this after a `\renewcommand\paragraph'
  %** in a package. Has no effect if the definition of #1 doesn't look like
  %** the one in article.cls (i.e. \@startsection) or if it's not defined
  %** (such as in beamer.cls).
  %** @param #1 \paragraph or \subparagraph
  \def\magyar@paragraphfix#1{%
    \ifx#1\@undefined\else
      % Change only if defined.
      \expandafter\magyar@paragraphfix@defined\expandafter#1\fi
  }
  \def\magyar@paragraphfix@defined#1{%
    \expandafter\magyar@pf@lowd\expandafter#1#1\hfuzz........\vfuzz
  }
  \def\magyar@pf@lowd#1#2#3#4#5#6#7#8#9\vfuzz{%
    % Dat: \unskip doesn't work, have to change \hskip to -1sp: 1sp is the
    %      amount of horizontal space between the diamond and the paragraph text
    %      0sp would be bad, because it isn't negative (positive skips are
    %      interpreted as vertical).
    %%
    \expandafter\def\expandafter\reserved@a\expandafter{\magyar@first#9\vfuzz}%
    %\def\reserved@a{#9}\ifx\reserved@a\@empty
    \if\reserved@a\hfuzz\ifx#2\@startsection\if-\magyar@first#7\vfuzz
      \def#1{\@ifstar
        {\magyar@pf@lowa *{#2{#3}{#4}{#5}{#6}{-1sp}{#8}}#1}%
        {\@ifnextchar[%]
          {\magyar@pf@lowc{#2{#3}{#4}{#5}{#6}{-1sp}{#8}}#1}%
          {\magyar@pf@lowa{}{#2{#3}{#4}{#5}{#6}{-1sp}{#8}}#1}%
        }%
      }%
    \fi\fi\fi
  }
  % !! Imp: change Hungarian \paragraph()s only, with dual load
  \ifx\magyar@opt@@postpara\magyar@@unchanged\else
    \expandafter\let\expandafter\magyar@post@paragraph\csname magyar@post@\magyar@opt@@postpara\endcsname
    \ifx\magyar@post@paragraph\relax
      \@@magyar@error{Invalid arg for option: postpara = \magyar@opt@@postpara}%
    \else
      \magyar@paragraphfix\paragraph
    \fi
  \fi
  \ifx\magyar@opt@@postsubpara\magyar@@unchanged\else
    \expandafter\let\expandafter\magyar@post@subparagraph\csname magyar@post@\magyar@opt@@postsubpara\endcsname
    \ifx\magyar@post@subparagraph\relax
      \@@magyar@error{Invalid arg for option: postsubpara = \magyar@opt@@postsubpara}%
    \else
      \magyar@paragraphfix\subparagraph
    \fi
  \fi
  \ifx\magyar@opt@@postdescription\magyar@@unchanged\else
    \expandafter\let\expandafter\magyar@post@description\csname magyar@post@\magyar@opt@@postdescription\endcsname
    \ifx\magyar@post@description\relax
      \@@magyar@error{Invalid arg for option: postdescription = \magyar@opt@@postdescription}%
    \else
      \def\magyar@@descriptionfont{\normalfont\bfseries}%
      \def\descriptionlabel#1{\hskip\labelsep{\magyar@@descriptionfont#1}\magyar@post@description\hskip-\labelsep}%
    \fi
  \fi
  \@gobble
{^}%

% --- afterindent=

\ifnum\magyar@opt@@afterindent>8 \@@magyar@skiplong\fi
  \ifnum\magyar@opt@@afterindent<1 % force-no
    \expandafter\addto\csname extras\CurrentOption\endcsname{%
      \babel@save\@afterindenttrue
      \let\@afterindenttrue\@afterindentfalse
    }%
  \else% force-yes
    \expandafter\addto\csname extras\CurrentOption\endcsname{%
      \babel@save\@afterindentfalse
      \let\@afterindentfalse\@afterindenttrue
    }%
  \fi
  \@gobble
{^}

% --- default \frenchspacing; frenchspacing=

\if0\magyar@opt@@frenchspacing \@@magyar@skiplong\fi
  \if1\magyar@opt@@frenchspacing% =no
    \def\@@magyar@antifrenchspacing{% only does some caching
      \ifnum\the\sfcode`\.=\@m
	\nonfrenchspacing
	\let\@@magyar@nonfrenchspacing\frenchspacing
      \else
	\let\@@magyar@nonfrenchspacing\relax
      \fi}
    \let\@@magyar@nonantifrenchspacing\frenchspacing
    \expandafter\addto\csname   extras\CurrentOption\endcsname{\@@magyar@antifrenchspacing}
    \expandafter\addto\csname noextras\CurrentOption\endcsname{\@@magyar@nonantifrenchspacing}
  \else
    \expandafter\addto\csname   extras\CurrentOption\endcsname{\bbl@frenchspacing}
    \expandafter\addto\csname noextras\CurrentOption\endcsname{\bbl@nonfrenchspacing}
  \fi
  \@gobble
{^}


% --- Putting dots after section number in toc/lof/lot; sectiondot=
%
% This is to have a dot after figure/table numbers in lof/lot and
% section numbers in toc.
%
% The option sectiondot= is ill-named, because it doesn't apply to what is
% displayed in \section, but it applies to \tableofcontents, \listoftables
% and \listoffigures.

\if0\magyar@opt@@sectiondot \@@magyar@skiplong\fi
  \ifnum\magyar@opt@@sectiondot>1
    % This solution (for sectiondot=problematic) is what was provided by
    % magyar.ldf v1.4. It is incomatible with lots of packages.
    %
    % [pts] This doesn't work with nameref.sty.
    \expandafter\addto\csname extras\CurrentOption\endcsname{%
      \babel@save\@caption
      \long\def\@caption#1[#2]#3{%
	\csname par\endcsname
	\addcontentsline{\csname ext@#1\endcsname}{#1}%
	  {\protect\numberline{\csname the#1\endcsname.}{\ignorespaces #2}}%
	\begingroup
	  \@parboxrestore
	  \if@minipage
	    \@setminipage
	  \fi
	  \normalsize
	  \@makecaption{\csname fnum@#1\endcsname}%
	      {\ignorespaces #3}\csname par\endcsname
	\endgroup}}

    % [pts] This is incompatible with some packages.
    \expandafter\addto\csname extras\CurrentOption\endcsname{%
      % Alas, \@sect must also be redefined to have that dot in toc too.
      % On the other hand, we include a dot after a run-in head.
      \babel@save\@sect
      \def\@sect#1#2#3#4#5#6[#7]#8{%
	\ifnum #2>\c@secnumdepth
	  \let\@svsec\@empty
	\else
	  \refstepcounter{#1}%
	  \protected@edef\@svsec{\@seccntformat{#1}\relax}%
	\fi
	\@tempskipa #5\relax
	\ifdim \@tempskipa>\z@
	  \begingroup
	    #6{%
	      \@hangfrom{\hskip #3\relax\@svsec}%
		\interlinepenalty \@M #8\@@par}%
	  \endgroup
	  \csname #1mark\endcsname{#7}%
	  \addcontentsline{toc}{#1}{%
	    \ifnum #2>\c@secnumdepth \else
	      \protect\numberline{\csname the#1\endcsname.}%
	    \fi
	    #7}%
	\else
	  \def\@svsechd{%
	    #6{\hskip #3\relax
	    \@svsec #8.}%
	    \csname #1mark\endcsname{#7}%
	    \addcontentsline{toc}{#1}{%
	      \ifnum #2>\c@secnumdepth \else
		\protect\numberline{\csname the#1\endcsname.}%
	      \fi
	      #7}}%
	\fi
	\@xsect{#5}}}

    % [pts] This is incompatible with some packages.
    \expandafter\addto\csname extras\CurrentOption\endcsname{%
      % In order to have that dot after a run-in head when the star form of the
      % sectioning commands is used, we have to redefine \@ssect
      \babel@save\@ssect
      \def\@ssect#1#2#3#4#5{%
	\@tempskipa #3\relax
	\ifdim \@tempskipa>\z@
	  \begingroup
	    #4{%
	      \@hangfrom{\hskip #1}%
		\interlinepenalty \@M #5\@@par}%
	  \endgroup
	\else
	  \def\@svsechd{#4{\hskip #1\relax #5.}}%
	\fi
	\@xsect{#3}}}
  \else
    % This implements option sectiondot=safe.
    %
    % [pts] We definitely want \numberline to emit table number in \listoftables as
    % `5.6.' instead of the default `5.6', but we don't want to redefine \@caption,
    % because the # args \addcontentsline adds to \contentsline depends on whether
    % nameref.sty (hyperref.sty) is loaded (no nameref: 3, w/ nameref: 4); this
    % would cause the strange `Package hyperref Warning: No destination for
    % bookmark of \addcontentsline'.
    %   So we rather redefine \numberline. But we cannot simply add a dot, because
    % it might be already present (e.g in \tableofcontents). So we add a dot only
    % if it is missing. This modification affects \tableofcontents, \listoffigures
    % and \listoftables. The presence of the dot in TOC depends on the language
    % the section was defined in.
    %   amsart.sty uses \tocsection instead of \numberline, see amstocnumskip=
    % below
    \def\magyar@striplastdot@lowa#1.\relax{#1\relax}%
    \def\magyar@striplastdot@lowb#1\relax#2\relax{#1}%
    %** \@tempdima is set by \@dottedtocline, called by \l@section
    \def\magyar@numberline#1\vfuzz{\hb@xt@\@tempdima{#1.\hfil}}%
    \def\@@magyar@numberline@pre#1{%
      \expandafter\expandafter\expandafter\magyar@numberline
      \expandafter\magyar@striplastdot@lowb\magyar@striplastdot@lowa#1\relax.\relax\vfuzz
    }%
    \expandafter\addto\csname extras\CurrentOption\endcsname{%
      \babel@save\numberline
      %** Overrides latex.ltx
      \let\numberline\@@magyar@numberline@pre
    }
  \fi
  \@gobble
{^}

% --- amspostsectiondot=

\if0\magyar@opt@@amspostsectiondot \@@magyar@skiplong\fi
  % Now fix ams*.cls so that they don't put a dot after the section title.
  % First check whether the definition of \@sect contains
  % \global\@nobreaktrue\@xsect
  \long\def\@@magyar@amssect@fixa#1\global\@nobreaktrue\@xsect#2\hfuzz#3{%
    \ifx\hfuzz#2\hfuzz\else% found
      \@@magyar@amssect@fixb#3\fi}
  %** @param #1 a \cs, e.g \@sect
  \def\@@magyar@amssect@fixb#1{%
    \expandafter\let\csname @@magyar@amssect@saved\string#1\endcsname#1%
    \edef#1{\noexpand\expandafter\noexpand\@@magyar@amssect@low
       \expandafter\noexpand\csname @@magyar@amssect@saved\string#1\endcsname}%
    \let\@svsechd\@empty% prevent Undefied \cs
    %** Definition of \@sect in ams*.cs ends by `\global\@nobreaktrue{#5}'
    \long\def\@@magyar@amssect@low##1\global\@nobreaktrue{%
      ##1%
      \expandafter\def\expandafter\@svsechd\expandafter{%
	\expandafter\let\expandafter\@addpunct\expandafter\@gobble \@svsechd}%
      \global\@nobreaktrue
    }%
  }
  \expandafter\@@magyar@amssect@fixa\@sect[][][][][][][][]\global\@nobreaktrue\@xsect\hfuzz\@sect
  \expandafter\@@magyar@amssect@fixa\@sect[][][][][][][][]\global\@nobreaktrue\@xsect\hfuzz\NR@sect% with nameref.sty
  \@gobble
{^}%

% --- amstocnumskip=, amstocnumlang=
%
% Change \tocsection, \tocsubsection etc. in amsart.cls etc. These commands
% have effect in \tableofcontents, e.g. in the .toc file:
% `\contentsline {section}{\tocsubsection {}{1.1}{Foo}}{1}'
%
% We should be careful not to define \tocchapter and \tocsection if
% tocbibind.sty is (or will be) loaded, because it provides its own definition
% as \newcommand.

\ifx\@empty\magyar@opt@@amstocnumskip \@@magyar@skiplong\fi
  % Similar to titleskip=, but AMS classes don't look at \@seccntformat
  \def\@@magyar@amstocnumskip@lets{%
    \ifx\tocsubsection\@undefined\else
      \ifx\tocsubsection\tocparagraph
	\def\tocsubsection{\tocsection}%
	% These lines are similar to those in amsart.cls.
	\let\tocsubsubsection\tocsubsection
	\let\tocparagraph\tocsubsection
	\let\tocsubparagraph\tocsubsection
	\let\tocpart\tocsubsection
	\let\tocchapter\tocsubsection
      \fi
    \fi
  }%
  \def\@@magyar@amstocnumskip@defs{%
    \ifx\tocsubsection\@undefined\else
      \ifx\tocsubsection\tocparagraph
	%** Overrides amsart.cls, amsbook.cls etc.
	%** Only for Hungarian \section{}s. Changes \quad to
	%** \magyar@opt@@amstocnumskip in the definition. Also changes
	%** ``fejezet 1'' to ``1. fejezet'' for \chapter
	%** (We have \def\tocchapter{\tocsection} by default.)
	\def\tocsection##1##2##3{%
	  %%\typeout{--##3--}%
	  \indentlabel{%
	    \def\reserved@a{##1}%
	    \def\reserved@b{##2}%
	    \ifx\reserved@b\empty
	    \else\ifx\reserved@a\chaptername
	      % * Sometimes (but not in \tableofcontents) #1 is
	      %   `\csname chaptername\endcsname'. Why?
	      % * \tocappendix is called instead of \tocsection for the
	      %   appendix.
              \ifnum\magyar@opt@@chapternumber=1      \@huordinal{##2}~%
              \else\ifnum\magyar@opt@@chapternumber=2 \@Huordinal{##2}~%
              \else##2.~%
              \fi\fi
              ##1.\magyar@opt@@amstocnumskip
	    \else\ifx\reserved@a\partname
              \ifnum\magyar@opt@@partnumber=1      \@huordinal{##2}~%
              \else\ifnum\magyar@opt@@partnumber=2 \@Huordinal{##2}~%
              \else##2.~%
              \fi\fi
              ##1.\magyar@opt@@amstocnumskip
            \else
              \ignorespaces##1 ##2.\magyar@opt@@amstocnumskip
	    \fi\fi\fi}%
	  ##3}%
	%** Overrides amsart.cls etc. Only for Hungarian \section{}s. Changes \quad to
	%** \magyar@opt@@amstocnumskip in the definition.
	\def\tocappendix##1##2##3{%
	  \indentlabel{%
	    \def\reserved@a{##1}%
	    \ifx\reserved@a\appendixname
              ##2\ifx\@@magyar@appendixname\@empty.\fi~##1%
	    \else
	      ##1\@ifnotempty{##2}{ ##2}%
	    \fi
	    .\magyar@opt@@amstocnumskip}%
	  ##3}%
      \fi
    \fi
  }%
  \AtBeginDocument\@@magyar@amstocnumskip@lets  % must be before @defs
  \if2\magyar@opt@@amstocnumlang
    \AtBeginDocument\@@magyar@amstocnumskip@defs
    %\let\@@magyar@amstocnumskip@defs\@undefined% for use by the user
  \else
    \expandafter\addto\csname extras\CurrentOption\endcsname{%
      \babel@save\tocsection \babel@save\tocappendix
      \@@magyar@amstocnumskip@defs
    }
  \fi
  \@gobble
{^}%


% --- Fixup Babel language selection glitches; toclang=

% There are fundamental problem of emitting \select@language items in LOT
% files.
%
% Problem (3): When using \begin{table}...\end{table} \selectlanguage{foo}
% \begin{table}...\end{table}, the LaTeX-Babel scheme will not emit a
% \select@language{foo} between the two \contentsline{}s in \jobname.lot. The
% TOC file is OK, because section titles aren't floats. (But what about
% \mark{}s?).
%
% Problem (1): \selectlanguage emits .aux entries even
% if the language isn't really changed.
%
% Problem (2): babel.def has
% `\AtBeginDocument...\selectlanguage...\bbl@main@language', from which an
% \immediate is missing, so the \select@language is emitted to the .aux file
% after the first float has been typeset. A better solution would be
% `\select@language{\languagename}', which forcibly activates the default
% language.
%
% Problem (4): \ps@headings isn't run \AtBeginDocument, but book.cls runs
% \pagestyle{headings} when it is loaded. We should change this to
% \AtBeginDocument or similar.

\ifnum\magyar@opt@@toclang=0 \@@magyar@skiplong\fi
  \ifnum\magyar@opt@@toclang>1  % toclang=good
    % Solve problems (2) and (4). Timing is critical. \select@language must
    % be called after \AtBeginDocument, so \catcode{}s won't be \activated
    % too early. (Because some code in \AtBeginDocument might issue an
    % \input such as hyperref.sty which does \RequirePackage{nameref}.)
    % Note that \extrasmagyar containing the \catcode changes is
    % only run when `magyar' is the default language (last arg of
    % \usepackage[...]{babel}). If that is run after \AtBeginDocument hooks,
    % then most packages will use 12 as \catcode\string``, which is intended.
    %   \@@magyar@setup@psheadings might just be run \AtBeginDocument, it doesn't
    % need \@preamblecmds -- but it must be after \select@language.
    %
    % \@preamblecmds is expanded after \@begindocumenthook
    \expandafter\gdef\expandafter\@preamblecmds\expandafter{\@preamblecmds
      \@@magyar@setup@psheadings% Solve problem (4). Before \selectlanguage.
      \select@language{\languagename}% force initial language
    }%
    % Solve problem (1) and assist solving problem (2) by not emitting
    % \select@language twice.
    \def\bbl@set@language#1{%
      \edef\@Lang@tmp{%
	\ifcat\noexpand\noexpand\noexpand#1% a control sequence
	  \expandafter\expandafter\expandafter\@gobble\expandafter\string
	\fi
	#1%
      }%
      \ifx\languagename\@Lang@tmp\else
	\let\languagename\@Lang@tmp
	\select@language{\languagename}%
      \fi
    }%
    % Solve problem (3).
    \long\def\addtocontents#1#2{%
      % Dat: \noexpand should be avoided in \protected@write
      \protected@write\@auxout
	  {\let\label\@gobble \let\index\@gobble \let\glossary\@gobble \let\select@language\relax}%
	  {\string\@writefile{#1}{\string\select@language{\languagename} #2}}}
  \else
    % Solve problems (2) and (4).
    \AtBeginDocument{%
      \if@filesw \immediate\write\@mainaux{%
        \string\select@language{\languagename}%
        \string\@writefile{toc}{\string\select@language{\languagename}}%
        \string\@writefile{lof}{\string\select@language{\languagename}}%
        \string\@writefile{lot}{\string\select@language{\languagename}}%
      }\fi
      \@@magyar@setup@psheadings% Solve problem (4). Before \selectlanguage.
      \select@language{\languagename}% force initial language
    }
    % Solve problem (1) and assist solving problem (2) by not emitting
    % \select@language twice.
    \def\bbl@set@language#1{%
      \edef\@Lang@tmp{%
	\ifcat\noexpand\noexpand\noexpand#1% a control sequence
	  \expandafter\expandafter\expandafter\@gobble\expandafter\string
	\fi
	#1%
      }%
      \ifx\languagename\@Lang@tmp\else
	\let\languagename\@Lang@tmp
	\select@language{\languagename}%
	\if@filesw \protected@write\@auxout{}{%
	  \string\select@language{\languagename}%
	  \string\@writefile{toc}{\string\select@language{\languagename}}%
	  \string\@writefile{lof}{\string\select@language{\languagename}}%
	  \string\@writefile{lot}{\string\select@language{\languagename}}%
	\fi}%
      \fi
    }%
    % Don't solve problem (3).
  \fi
  \@gobble
{^}%

% --- suggestions=

\ifnum\magyar@opt@@suggestions=0 \@@magyar@skiplong\fi
  \def\magyar@sugg@to#1{%
    \ifnum0\ifdefined\pdfoutput1\fi>0
      \def\reserved@a{T1}%
      \edef\reserved@b{\encodingdefault}%
      \ifx\reserved@a\reserved@b\else
        \@latex@warning@no@line{Please use \string\usepackage[T1]{fontenc} with\MessageBreak \string\usepackage[#1]{babel}, to get accented chars hyphenated}%
      \fi
    \fi
  }
  \def\magyar@sugg@ie@lowb#1{\@latex@warning@no@line{%
      Please use \string\usepackage[latin2]{inputenc}\MessageBreak
      or \string\usepackage[utf8]{inputenc}\MessageBreak
      with \string\usepackage[#1]{babel}}}%
  %** @param #1 Code to run if encoding in \reserved@b is unknown.
  \def\magyar@sugg@ie@lowu#1{%
    \def\reserved@a{latin2}%
    \ifx\reserved@a\reserved@b\else
      \def\reserved@a{utf8}%
      \ifx\reserved@a\reserved@b\else
        \def\reserved@a{utf8x}%
        \ifx\reserved@a\reserved@b\else
          \def\reserved@a{cp1250}%
          \ifx\reserved@a\reserved@b\else
            #1%
          \fi
        \fi
      \fi
    \fi
  }%
  %** @param #1 empty (old) or \protect
  %** @param #2 input encoding name
  \def\magyar@sugg@ie@low#1\@inpenc@undefined@#2#3\vfuzz#4{%
    \def\reserved@b{#2}%
    \magyar@sugg@ie@lowu{\magyar@sugg@ie@lowb{#4}}%
  }%
  \def\magyar@sugg@ie#1{%
    % In lualatex, the (unchecked) recommendation is: don't do \usepackage[...]{inputenc}, do \usepackage[...]{luainputenc} only if not utf8.
    \ifnum0\ifx\luatexversion\@undefined1\fi\ifx\luatexversion\relax1\fi>0
      \expandafter\expandafter\expandafter\def\expandafter\expandafter\expandafter
        \reserved@b\expandafter\expandafter\expandafter{%
        \csname inputencodingname\endcsname}%
      \magyar@sugg@ie@lowu{%
        \ifx\reserved@a\reserved@b\else
          % Dat: don't print warning for missing \usepackage
          \expandafter\ifx\csname @inpenc@undefined\endcsname\relax
            % \magyar@sugg@ie@lowb{#1}%
          \else
            % from inputenc.sty: \edef\@inpenc@undefined{\noexpand\@inpenc@undefined@{#1}}%
            % > \@inpenc@undefined=macro:
            % ->\@inpenc@undefined@ {latin2}.
            \expandafter\magyar@sugg@ie@low\@inpenc@undefined....\vfuzz{#1}%
          \fi
        \fi
      }%
    \fi
  }%
  \def\magyar@sugg@af#1{%
    \expandafter\ifx\csname#1Options\endcsname\relax\else
      \PackageWarningNoLine{#1.ldf}{No effect of \string\def\@backslashchar #1Options{...}\MessageBreak
      please move it before \string\usepackage[#1]{babel}}%
    \fi
  }%
  \def\magyar@sugg@ap#1{%
    \expandafter\ifx\csname opt@#1.ldf.sty\endcsname\relax\else
      \PackageWarningNoLine{#1.ldf}{No effect of \@backslashchar PassOptionsToPackage{?}{#1.ldf}\MessageBreak
      please move it before \string\usepackage[#1]{babel}}%
    \fi
  }%
  \edef\reserved@a{\noexpand\AtBeginDocument{%
    \noexpand\magyar@sugg@af{\CurrentOption}%
    \noexpand\magyar@sugg@ap{\CurrentOption}%
    \noexpand\magyar@sugg@to{\CurrentOption}%
    \noexpand\magyar@sugg@ie{\CurrentOption}%
  }}\reserved@a
  \@gobble
{^}%

% --- Active characters and shorthands; active=, activeprefix=, activespace=

\ifnum0=\magyar@opt@@activespace\magyar@opt@@active\space
  \def\@@magyar@declare@shorthandx#1#2{%
    \expandafter\def\csname @@magyar@shorthand@\string#1\endcsname{#2}%
  }
\@@magyar@skiplong\fi
  \def\magyar@activate@shorthands{%
    \edef\reserved@a{%
      \noexpand\addto\expandafter\noexpand\csname extras\CurrentOption\endcsname
      {\noexpand\languageshorthands{\CurrentOption}}%
    }
    \reserved@a
    \let\magyar@activate@shorthands\relax
  }
  \let\@@magyar@saved@initiate@active@char\initiate@active@char
  %
  % vvv Fri Oct  1 18:09:55 CEST 2004
  %     This is the ultimate fix of the .aux file catcodes when
  %     \usepackage[german,magyar]{babel} or
  %     \usepackage[french,magyar]{babel}.
  %     This enforces \catcode\string``=12 very early into the .aux file.
  % Imp: don't let \catcode``\active too early...
  {\toks@\expandafter{\expandafter\@@magyar@protect@backtick\@begindocumenthook}%
   \xdef\@begindocumenthook{\the\toks@}}% Dat: \@begindocumenthook has #1 #2 etc.
  \def\@@magyar@protect@backtick{%
    \if@filesw\immediate\write\@auxout{\catcode\noexpand\string``=12}\fi}
  \AtEndDocument{\catcode96=12\relax}
  %
  %** @param #1 a non-active char token
  %** @param #2 activation type: 0, 1, 2 or 3
  % !! quick link to \@@magyar@shorthand
  \def\magyar@activate@char#1#2{%
    \ifnum#2>1 % ignore 0 and 1
      \ifnum#2>2 % 3
        % SUXX, breaks compatibility with graphicx.sty and hyperref.sty and possibly
        % with many other packages using \catcode`` etc.
        %** Fix .aux load timing bug.
        \AtBeginDocument{%
          \if@filesw\immediate\write\@auxout{\catcode\noexpand\string`#1=12}\fi
        }
        \initiate@active@char{#1}%
      \else% 2
        % Dat: german.ldf emits `\catcode`"\active'; we should emit our
        %      catcode change (\catcode\string``=12) before that
        % Dat: this works only with \usepackage[magyar,german,magyar]{babel},
	%      not with \usepackage[german,magyar]{babel}
	%      solution: \AtBeginDocument{\if@filesw\immediate\write\@auxout{\catcode\noexpand\string`#1=12}\fi}
        \let\magyar@saved@AtBeginDocument\AtBeginDocument
        \let\AtBeginDocument\@gobble
        % vvv Calls \AtBeginDocument to set \catcode to \active and also write such a
        %     line to the .aux file. We just ignore it.
        \initiate@active@char{#1}%
        \let\AtBeginDocument\magyar@saved@AtBeginDocument
        \let\magyar@saved@AtBeginDocument\@undefined
        \expandafter\addto\csname extras\CurrentOption\endcsname{%
          \babel@savevariable{\catcode\string`#1}%
          \catcode\string`#1=13 %
        }%
      \fi
      % Dat: now #1 is \active (done by \initiate@active@char)
      \lccode\string`~=\string`#1\lowercase{% Dat: luckily everything below is in lowercase
        \expandafter\addto\csname   extras\CurrentOption\endcsname  {\bbl@activate{~}}%
        \expandafter\addto\csname noextras\CurrentOption\endcsname{\bbl@deactivate{~}}%
      }
      \lccode\string`~=0
      \catcode\string`#1=12 % Imp: restore _old_ catcode
    \fi
  }
  %** @param #1 shorthand prefix character (depends on activeprefix=)
  %** @param #2 a single character (will be prefixed)
  %*  @param #3 TeX code
  \def\@@magyar@declare@shorthand@low#1#2#3{%
    \declare@shorthand{\CurrentOption}{#1#2}{#3}%
  }
  \edef\@@magyar@shorthandprefix{\string`}%
  %** @param #1 a single character (will be prefixed by ``' etc.)
  %*  @param #2 TeX code
  %\def\@@magyar@declare@shorthand#1#2{\magyar@opt@@activeprefix#1{#2}}% defined below
  \ifx\magyar@opt@@activeprefix\relax
    \def\magyar@opt@@active{0}% =none
    \def\magyar@opt@@openqq{0}% =unchanged  (this must be defined before processing openqq below)
  \else\edef\@@magyar@declare@shorthand#1#2{\noexpand\@@magyar@declare@shorthand@low\expandafter\string\magyar@opt@@activeprefix#1{#2}}\fi
  %\magyar@activate@shorthands% not yet
  \def\@@magyar@declare@shorthandx#1#2{%
    \magyar@activate@shorthands
    \expandafter\def\csname @@magyar@shorthand@\string#1\endcsname{#2}%
    \expandafter\@@magyar@declare@shorthand\expandafter#1\expandafter{\csname @@magyar@shorthand@\string#1\endcsname}%
  }
  \@gobble
{^}%

%** Call \@@magyar@shorthand@... For example: {`tty} and
%** {\@@magyar@shorthand tty} are interchangeable.
%** @param #1 a char token.
\def\@@magyar@shorthand#1{%
  \expandafter\ifx\csname @@magyar@shorthand@\string#1\endcsname\relax
    \@@magyar@error{Unknown shorthand: \string#1 }%
  \else
    \expandafter\expandafter\csname @@magyar@shorthand@\string#1\endcsname
  \fi
}

% --- activespace= Extra \thispace before :, ;, ! and ?
%
% french.ldf has \space after `:', but we only have \thinspace

\ifnum\magyar@opt@@activespace=0 \@@magyar@skiplong\fi
  %** @param #1 any of : ; ! ?
  \def\magyar@thinspaced#1{%
    % Dat: `!' at the end of the word is OK, but at the beginning it makes the
    %      word unhyphenatable. Imp: maybe \nobreak\hskip\z@skip?
    % Dat: This is math-mode safe, because \ifhmode is false in math mode.
    \ifhmode% \ifhmode and \ifmmode are never true
      \ifdim\lastskip>\z@
        \unskip\penalty\@M\kern.1em% \thinspace is .16667em
      \else
        \kern.1em
      \fi
    \fi
    \string#1%
  }
  \magyar@activate@shorthands
  \magyar@activate@char;\magyar@opt@@activespace
  \declare@shorthand{\CurrentOption}{;}{\magyar@thinspaced;}
  \magyar@activate@char!\magyar@opt@@activespace
  \declare@shorthand{\CurrentOption}{!}{%
    \ifmmode
      \expandafter\ifx\csname factorial\endcsname\relax\mathchar"5021 \else\factorial\fi
    \else\magyar@thinspaced!\fi}
  % ^^^ compatibility with nath.sty
  \magyar@activate@char?\magyar@opt@@activespace
  \declare@shorthand{\CurrentOption}{?}{\magyar@thinspaced?}
  \magyar@activate@char:\magyar@opt@@activespace
  \declare@shorthand{\CurrentOption}{:}{\magyar@thinspaced:}
  \@gobble
{^}%


% --- active=
%
% Dat: active=safe isn't safe unless other .ldf files used don't call
%      \initiate@active@char{`}.
%
% `` `' `= `_ `-- `- `| `< `> `" `~ etc.

\ifnum\magyar@opt@@active=0
  \ifnum\magyar@opt@@openqq>0 \@@magyar@error{active=none implies openqq=unchanged}\fi
\@@magyar@skiplong\fi
  \ifnum\magyar@opt@@active>1
    \magyar@activate@shorthands% Dat: don't do it if \magyar@opt@@active=0
    \expandafter\magyar@activate@char\magyar@opt@@activeprefix\magyar@opt@@active
  \fi
  %
  \ifnum\magyar@opt@@openqq>1 % =down
    % Same as in in ukraineb.ldf
    \@@magyar@declare@shorthandx`{\glqq}% down 99  \glqq is Babel's macro containing \quotedblbase
    \@@magyar@declare@shorthandx'{\grqq}% up 66
  \else\ifnum\magyar@opt@@openqq>0 % =up
    \@@magyar@declare@shorthandx`{\grqq}% up 66
    \@@magyar@declare@shorthandx'{\glqq}% down 99
  \else
    \dMf @@magyar@shorthand@\string` {\string`\string`}% unchanged -- expect a ligature in font
    \dMf @@magyar@shorthand@\string' {\string`\string'}% unchanged -- expect a ligature in font
  \fi\fi
  %
  %** A hyphen, but hyphenation is OK at both sides
  %** reported and asked by Józsa Márton <jozsineni@freemail.hu>
  \@@magyar@declare@shorthandx ={\leavevmode\nobreak-\hskip\z@skip}
  % ^^^ Dat: no need for \nobreak\hskip\z@skip, because of the empty discretionary
  %** \shu?-- typesets an endash (--) with a small space around it (the one to
  %** the right is breakable). \shu?- typesets a normal hyphen, having
  %** hyphenation OK at both sides.
  %** @example Kiss Előd\shu?--Nagy Pál
  %** @example közgazdaság\shu?-tudományi
  \def\@@magyar@shorthandminus{%
    \ifmmode \mskip2.4mu plus3.6mu minus1.8mu \else % ,`- is just a space in math mode
      \if-\noexpand\@Lang@tmp \leavevmode\nobreak\,\nobreak\hbox{--}\,\expandafter\expandafter\expandafter\@gobble% Dat: \@gobble -
      \else                   \leavevmode\nobreak-\hskip\z@skip\fi% Dat: e.g hegyes`-szögű
    \fi
  }
  \@@magyar@declare@shorthandx -{\futurelet\@Lang@tmp\@@magyar@shorthandminus}%
  %** A hyphen that is displayed in both next and current lines. Hyphenation
  %** is OK at both sides. This differs from ukraineb.ldf.
  %** \showhyphens{nátrium`|klorid} -> nát-ri-um--klo-rid
  \@@magyar@declare@shorthandx |{\leavevmode\nobreak-\nobreak\discretionary{}{-}{}\nobreak\hskip\z@skip}% Dat: all \nobreak s are important % e.g egyszer`|kétszer
  \@@magyar@declare@shorthandx _{\leavevmode\nobreak\-\nobreak\hskip\z@skip}
  \@@magyar@declare@shorthandx <{\flqq}
  \@@magyar@declare@shorthandx >{\frqq}
  \@@magyar@declare@shorthandx "{\hskip\z@skip}% \allowbreak, but hyphenation is OK at both sides
  \@@magyar@declare@shorthandx ~{\textormath{\leavevmode\hbox{-}}{-}}% a hyphen that isn't part of ligatures -- and ---
  %
  % Dat: `CXY means \discretionary{CS-}{XY}{CXY}, which makes sense only for
  %      `CCS. But `Ccs wouldn't make sense, since there is no Hungarian word
  %      (whose first letter has to be capitalized) beginning with ccs.
  % Dat: \nobreak\bbl@allowhyphens: \showhyphens{ho`sszabbra} -> hosz-szabb-ra
  % Dat: \def\foo{`}\declare@shorthand{\CurrentOption{\foo c}{...} doesn't work
  % Dat: these work quite well in math mode
  % Dat: \showhyphens{a\hskip\z@skip b} displays "ab", but
  %      \showhyphens{a\hskip0pt b} displays "a b"
  %** These should be equivalent:
  %**   \showhyphens{verembepot\nobreak\discretionary{y-}{}{}\nobreak\hskip\z@skip tyantam}
  %**   \showhyphens{verembepo`ttyantam}
  \def\@@magyar@disc#1#2{#1\textormath{\nobreak\discretionary{#2-}{}{}}{}\nobreak\hskip\z@skip}%
  \@@magyar@declare@shorthandx c{\@@magyar@disc cs}% loccsan --> locs-csan (lo`ccsan)
  \@@magyar@declare@shorthandx C{\@@magyar@disc CS}
  \@@magyar@declare@shorthandx g{\@@magyar@disc gy}% poggy\'asz --> pogy-gy\'asz (po`ggy\'asz)
  \@@magyar@declare@shorthandx G{\@@magyar@disc GY}
  \@@magyar@declare@shorthandx l{\@@magyar@disc ly}% Kod\'allyal --> Kod\'aly-lyal (Kod\'a`llyal)
  \@@magyar@declare@shorthandx L{\@@magyar@disc LY}
  \@@magyar@declare@shorthandx n{\@@magyar@disc ny}% mennyei --> meny-nyei (me`nnyei)
  \@@magyar@declare@shorthandx N{\@@magyar@disc NY}
  \@@magyar@declare@shorthandx s{\@@magyar@disc sz}% vissza --> visz-sza (vi`ssza)
  \@@magyar@declare@shorthandx S{\@@magyar@disc SZ}
  \@@magyar@declare@shorthandx t{\@@magyar@disc ty}% pottyan --> poty-tyan (po`ttyan)
  \@@magyar@declare@shorthandx T{\@@magyar@disc TY}
  \@@magyar@declare@shorthandx z{\@@magyar@disc zs}% rizzsel --> rizs-zsel (ri`zzsel)
  \@@magyar@declare@shorthandx Z{\@@magyar@disc ZS}
  \def\magyar@fixddzs{\@@magyar@declare@shorthandx d{% bridzs-dzsel
    % vvv doesn't handle the rare combination dzs-dzs
    %\@@magyar@declare@shorthandx D}{\@@magyar@disc DZ}
    %\@@magyar@declare@shorthandx d}{\@@magyar@disc dz}% eddz\"unk (felsz. m.) --> edz-dz\"unk (e`ddz\"unk)
    \def\reserved@a{%
      \if\noexpand\reserved@b d%
        \def\reserved@a{%
	  \if\noexpand\reserved@b z%
	    \def\reserved@a{%
              \nobreak% so word before `ddzs gets hyphenated
	      \if\noexpand\reserved@b s%
	        \discretionary{dzs-}{dz}{ddz}% \showhyphens{szuper`ddzsungelben}
	      \else
	        \discretionary{dz-}{d}{dd}z% \showhyphens{szuper`ddzungelben}
	      \fi
              \nobreak\hskip\z@skip% allow both pre- and post breaks
	    }%
	    \bbl@afterelse\expandafter\futurelet\expandafter\reserved@b\expandafter\reserved@a\@gobble
	  \else
	    \bbl@afterfi dd%
	  \fi
	}%
	\bbl@afterelse\expandafter\futurelet\expandafter\reserved@b\expandafter\reserved@a\@gobble
      \else\bbl@afterfi d\fi
    }%
    \futurelet\reserved@b\reserved@a% doesn't remove next token
  }}%
  \magyar@fixddzs \expandafter\uppercase\expandafter{\magyar@fixddzs}
  \@gobble
{^}%


% --- hunumbers=

\ifnum\magyar@opt@@hunumbers=0 \@@magyar@skiplong\fi
\def\@@magyar@egyjegyu#1{%
  \ifcase#1 \or\or k\'et\or h\'arom\or n\'egy\or \"ot\or hat\or h\'et\or
    nyolc\or kilenc\fi
}
\def\@@magyar@upperfi@nine#1\fi\fi\fi\fi\fi\fi\fi\fi\fi{\fi\fi\fi\fi\fi\fi\fi\fi\fi#1}
\def\@@magyar@upperelse@nine#1\else#2\fi\fi\fi\fi\fi\fi\fi\fi\fi{\fi#1}
\def\@@magyar@uppernum#1{%
  \ifx#1\"\@@magyar@upperelse@nine\"O\@gobble% \"o
  \else\if\noexpand#1eE%
  \else\if\noexpand#1hH%
  \else\if\noexpand#1kK%
  \else\if\noexpand#1mM% mínusz
  \else\if\noexpand#1nN%
  \else\if\noexpand#1oO%
  \else\if\noexpand#1sS% sokadik
  \else\if\noexpand#1tT%
  \else\@@magyar@upperfi@nine\expandafter\@@magyar@uppernum#1% do an extra expansion
  \fi\fi\fi\fi\fi\fi\fi\fi\fi
}
%** For \pagenumbering{huordinal}. Expands to the Hungarian ordered numeral,
%** spelled out in letters (i.e 1 --> first --> első). Suitable for numbering
%** \part{}s and \chapter{}s of a book (\def\thepart{\@Huordinal\c@part}})
%** @param #1 a number (input for \number) in -9999..9999
\def\@huordinal#1{%
  % !! larger numbers, also for \@hunumeral
  \ifnum#1=-1 m\'nusz egyedik\else
  \ifnum#1=-2 m\'nusz kettedik\else
  \ifnum#1<0 m\'inusz \expandafter\@huordinal\expandafter{\number-#1 }\else
  \ifcase\number#1 nulladik\or els\H o\or m\'asodik\or harmadik\or negyedik\or
    \"ot\"odik\or hatodik\or hetedik\or nyolcadik\or kilencedik\else
    \ifnum#1>999 \expandafter\@@magyar@ezresedik\number#1.\else
    \ifnum#1>99 \expandafter\@@magyar@szazasodik\number#1\else
                \expandafter\@@magyar@tizesedik\number#1%
  \fi\fi\fi\fi\fi\fi
}
%** @param #1#2 1000..9999
\def\@@magyar@ezresedik#1#2.{%
  \ifnum#1#2>9999 sokadik\else
    \@@magyar@egyjegyu#1%
    \ifnum#2=0 ezredik\else
      ezer\ifnum#1>1 -\fi% kétezer-harmadik
      \ifnum#2<100
        \expandafter\@@magyar@tizesedik\number#2%
      \else
        \ifnum#2<200 egy\fi% ezerszázadik -> ezeregyszázadik
        \@@magyar@szazasodik#2%
      \fi
    \fi
  \fi
}
%** @param #1#2 100..999
%** Imp: binary search
\def\@@magyar@szazasodik#1#2#3{%
  \@@magyar@egyjegyu#1sz\'az%
  \@@magyar@tizesedik#2#3%
}
%** @param #1 a digit
%** @param #2 a digit
%** Imp: binary search
\def\@@magyar@tizesedik#1#2{%
       \ifnum#1#2>89 kilencven\@@magyar@egyesedik#2e%
  \else\ifnum#1#2>79  nyolcvan\@@magyar@egyesedik#2a%
  \else\ifnum#1#2>69    hetven\@@magyar@egyesedik#2e%
  \else\ifnum#1#2>59    hatvan\@@magyar@egyesedik#2a%
  \else\ifnum#1#2>49   \"otven\@@magyar@egyesedik#2e%
  \else\ifnum#1#2>39   negyven\@@magyar@egyesedik#2e%
  \else\ifnum#1#2>29   harminc\@@magyar@egyesedik#2a%
  \else\ifnum#1#2>20    huszon\@@magyar@egyesedik#2.%
  \else\ifnum#1#2=20  huszadik%
  \else\ifnum#1#2>10     tizen\@@magyar@egyesedik#2.%
  \else\ifnum#1#2=10   tizedik%
  \else                       \@@magyar@egyesedik#2a% ``kétszázadik''
  \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
}%
\def\@@magyar@egyesedik#1#2{%
  \ifcase#1 #2\or egye\or kette\or harma\or negye\or
    \"ot\"o\or hato\or hete\or nyolca\or kilence\fi dik%
}
%** Same as \@huordinal, but uppercase
\def\@Huordinal#1{%
  % Dat: \newlabel{hellopart}{{Els\H o}{3}} is correctly written out
  \ifcase#1 Nulladik\or Els\H o\or M\'asodik\or Harmadik\or Negyedik\or
    \"Ot\"odik\or Hatodik\or Hetedik\or Nyolcadik\or Kilencedik\or Tizedik%
    \or Tizenegyedik\or Tizenkettedik\else\@@magyar@uppernum\@huordinal{#1}\fi
}
\def\huordinal#1{\expandafter\@huordinal\csname c@#1\endcsname}
\def\Huordinal#1{\expandafter\@Huordinal\csname c@#1\endcsname}

%** For \pagenumbering{hunumeral}. Expands to the Hungarian ordered numeral,
%** spelled out in letters (i.e 1 --> first --> első). Suitable for numbering
%** \part{}s and \chapter{}s of a book (\def\thepart{\@Hunumeral\c@part}})
%** @param #1 a number (input for \number) in -9999..9999
\def\@hunumeral#1{%
  \ifnum#1<0 m\'inusz \expandafter\@hunumeral\expandafter{\number-#1 }\else
  \ifcase#1 nulla\or egy\or kett\H{o}\or h\'arom\or n\'egy\or
    \"ot\or hat\or h\'et\or nyolc\or kilenc\else
    \ifnum#1>999 \expandafter\@@magyar@ezer\number#1.\else
    \ifnum#1>99 \expandafter\@@magyar@szaz\number#1\else
                \expandafter\@@magyar@tiz\number#1%
  \fi\fi\fi\fi
}
%** @param #1#2 1000..9999
\def\@@magyar@ezer#1#2.{%
  \ifnum#1#2>9999 sokadik\else
    \@@magyar@egyjegyu#1%
    \ifnum#2=0 ezer\else
      ezer\ifnum#1>1 -\fi% kétezer-harmadik
      \ifnum#2<100
        \expandafter\@@magyar@tiz\number#2%
      \else
        \ifnum#2<200 egy\fi% ezerszázadik -> ezeregyszázadik
        \@@magyar@szaz#2%
      \fi
    \fi
  \fi
}
%** @param #1#2 100..999
%** Imp: binary search
\def\@@magyar@szaz#1#2#3{%
  \@@magyar@egyjegyu#1sz\'az%
  \@@magyar@tiz#2#3%
}
%** @param #1 a digit
%** @param #2 a digit
%** Imp: binary search
\def\@@magyar@tiz#1#2{%
       \ifnum#1#2>89 kilencven\@@magyar@egy#2%
  \else\ifnum#1#2>79  nyolcvan\@@magyar@egy#2%
  \else\ifnum#1#2>69    hetven\@@magyar@egy#2%
  \else\ifnum#1#2>59    hatvan\@@magyar@egy#2%
  \else\ifnum#1#2>49   \"otven\@@magyar@egy#2%
  \else\ifnum#1#2>39   negyven\@@magyar@egy#2%
  \else\ifnum#1#2>29   harminc\@@magyar@egy#2%
  \else\ifnum#1#2>20    huszon\@@magyar@egy#2%
  \else\ifnum#1#2=20  h\'usz%
  \else\ifnum#1#2>10     tizen\@@magyar@egy#2%
  \else\ifnum#1#2=10   t\'iz%
  \else                       \@@magyar@egy#2% ``kétszázadik''
  \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
}%
\def\@@magyar@egy#1{%
  \ifcase#1 \or egy\or kett\H{o}\or h\'arom\or n\'egy\or
    \"ot\or hat\or h\'et\or nyolc\or kilenc\fi%
}
%** Same as \@hunumeral, but uppercase
\def\@Hunumeral#1{%
  % Dat: \newlabel{hellopart}{{Els\H o}{3}} is correctly written out
  \ifcase#1 Nulla\or Egy\or Kett\H{o}\or H\'arom\or N\'egy\or
    \"Ot\or Hat\or H\'et\or Nyolc\or Kilenc\else\@@magyar@uppernum\@hunumeral{#1}\fi
}
\def\hunumeral#1{\expandafter\@hunumeral\csname c@#1\endcsname}
\def\Hunumeral#1{\expandafter\@Hunumeral\csname c@#1\endcsname}

\@gobble
{^}%

% --- Appending suffixes to numbers; told=

\ifnum\magyar@opt@@told=0 \@@magyar@skiplong\fi
% Dat: double accent combinations: +adik,+a,+as,+ad  +hoz,+an,+on,+at,+ban...

% vvv Terminal suffix variants

% Dat: meaning of classes(#1): {\ifcase 0\or 1\or 2\or 3\or 4\or 5\or 6\or 7\or 8\or 9\or 10\or 11/-1\or 12/-2\or 100\or 1000\or 10^6\or 10^9\or 20\or 30\or 40\or 60\fi}
% Dat: ...@st is is special for appending +t to \refstruc names
\def\@@magyar@suffix@adik#1{\ifnum#1=1 s\H o\else
                              \ifcase#1 a\or  e\or  o\or a\or e\or\"o\or o\or e\or a\or e\or e\or e\or  e\or a\or e\or a\or a\or a\or a\or e\or a\or e\or e\fi dik\fi}%
\def\@@magyar@suffix@a#1{\ifcase     #1 a\or je\or  a\or a\or e\or  e\or a\or e\or a\or e\or e\or e\or  e\or a\or e\or a\or a\or a\or a\or e\or a\fi}%
\def\@@magyar@suffix@as#1{\ifcase    #1  \or  e\or  e\or a\or e\or\"o\or o\or e\or a\or e\or e\or e\or  e\or a\or e\or  \or a\or a\or a\or e\or a\fi s}%
\def\@@magyar@suffix@ad#1{\ifcase    #1 a\or  e\or  e\or a\or e\or\"o\or o\or e\or a\or e\or e\or e\or  e\or a\or e\or a\or a\or a\or a\or e\or a\fi d}%
\def\@@magyar@suffix@@hoz#1#2{\ifcase#2 o\or  e\or\"o\or o\or e\or\"o\or o\or e\or o\or e\or e\or e\or\"o\or o\or e\or o\or o\or o\or o\or e\or o\fi#1}%
\def\@@magyar@suffix@@an#1{\ifcase   #1  \or  e\or  e\or a\or e\or  e\or a\or e\or a\or e\or e\or e\or  e\or a\or e\or a\or a\or a\or a\or e\or a\fi n}%
\def\@@magyar@suffix@on#1{\ifcase    #1  \or  e\or   \or o\or e\or\"o\or o\or e\or a\or e\or e\or e\or  e\or o\or e\or  \or o\or o\or o\or e\or o\fi n}%
\def\@@magyar@suffix@st#1{\ifcase    #1  \or   \or   \or  \or e\or   \or  \or  \or  \or  \or  \or  \or   \or  \or  \or  \or  \or  \or  \or  \or  \fi t}%
\def\@@magyar@suffix@@at#1{\ifcase   #1  \or  e\or   \or a\or e\or\"o\or o\or e\or a\or e\or e\or e\or   \or a\or e\or  \or a\or a\or a\or e\or a\fi t}%
\def\@@magyar@suffix@@a#1#2{\ifcase  #2 a\or  e\or  e\or a\or e\or  e\or a\or e\or a\or e\or e\or e\or  e\or a\or e\or a\or a\or a\or a\or e\or a\fi#1}%
\def\@@magyar@suffix@nal#1{n\ifcase  #1 \'a\or \'e\or \'e\or\'a\or \'e\or \'e\or\'a\or \'e\or\'a\or \'e\or \'e\or \'e\or \'e\or\'a\or \'e\or \'a\or \'a\or \'a\or\'a\or \'e\or\'a\fi l}%
\def\@@magyar@suffix@@ol#1{\ifcase   #1 \'o\or\H o\or\H o\or\'o\or\H o\or\H o\or\'o\or\H o\or\'o\or\H o\or\H o\or\H o\or\H o\or\'o\or\H o\or \'o\or \'o\or \'o\or\'o\or\H o\or\'o\fi l}%
\def\@@magyar@suffix@ul#1{\ifcase    #1   u\or \"u\or \"u\or  u\or \"u\or \"u\or  u\or \"u\or  u\or \"u\or \"u\or \"u\or \"u\or  u\or \"u\or   u\or   u\or   u\or  u\or \"u\or  u\fi l}%
\def\@@magyar@suffix@val#1{\ifcase   #1  va\or gye\or ve\or ma\or gye\or  te\or ta\or  te\or ca\or  ce\or  ze\or gye\or  ve\or za\or  re\or  va\or  da\or sza\or ca\or  ne\or na\fi l}%
% @example: \atold(2.31)+es+sel{}
\def\@@magyar@suffix@sal#1{\ifcase   #1  sa\or se\or  se\or sa\or  se\or  se\or sa\or  se\or sa\or  se\or  se\or  se\or  se\or sa\or  se\or  sa\or  sa\or  sa\or sa\or  se\or sa\fi l}%
% @example: \atold(2.31)+ed+del{}
\def\@@magyar@suffix@dal#1{\ifcase   #1  da\or de\or  de\or da\or  de\or  de\or da\or  de\or da\or  de\or  de\or  de\or  de\or da\or  de\or  da\or  da\or  da\or da\or  de\or da\fi l}%
% @example: \atold(2.31)+edik+kel{}
\def\@@magyar@suffix@kal#1{\ifcase   #1  ka\or ke\or  ke\or ka\or  ke\or  ke\or ka\or  ke\or ka\or  ke\or  ke\or  ke\or  ke\or ka\or  ke\or  ka\or  ka\or  ka\or ka\or  ke\or da\fi l}%
\def\@@magyar@suffix@an{\@@magyar@suffix@@an}% make \ifx\@@magyar@suffix@an faster
\def\@@magyar@suffix@at{\@@magyar@suffix@@at}% make \ifx\@@magyar@suffix@at faster
\def\@@magyar@suffix@hoz{h\@@magyar@suffix@@hoz z}
\def\@@magyar@suffix@ban{b\@@magyar@suffix@@a n}
\def\@@magyar@suffix@nak{n\@@magyar@suffix@@a k}
\def\@@magyar@suffix@ba{b\@@magyar@suffix@@a \@empty}
\def\@@magyar@suffix@ra{r\@@magyar@suffix@@a \@empty}
\def\@@magyar@suffix@bol{b\@@magyar@suffix@@ol}
\def\@@magyar@suffix@tol{t\@@magyar@suffix@@ol}
\def\@@magyar@suffix@rol{r\@@magyar@suffix@@ol}
\def\@@magyar@suffix@szor{sz\@@magyar@suffix@@hoz r}

% vvv Continued suffix variants

\def\@@magyar@skipfi\fi\else{\fi}%
%** Usage: \@@magyar@suffix@aS{5}\magyar@@suffix@hoz
\def\@@magyar@suffix@aS#1#2{%
  \ifnum#2=5 \ifx#1\@@magyar@suffix@at \"oset\else\@@magyar@skipfi\fi\else
    \ifcase#2  \or e\or e\or a\or e\or \"o\or o\or e\or a\or e\or e\or e\or e\or a\or e\or  \or a\or a\or a\or e\or a\fi s%
    \expandafter\expandafter\expandafter\expandafter\expandafter\expandafter
    \ifx#1\@@magyar@suffix@val\@@magyar@suffix@sal\else#1\fi % +es+vel -> +es+sel
    % Imp: +ad+val, +adik+val etc.
    \ifcase#2 3\or 1\or 1\or 3\or 1\or   5\or 3\or 1\or 3\or 1\or 1\or 1\or 1\or 3\or 1\or 3\or 3\or 3\or 3\or 1\or 3\fi
  \fi
}%
\def\@@magyar@suffix@aD#1#2{%
  \ifcase#2  \or e\or e\or a\or e\or \"o\or o\or e\or a\or e\or e\or e\or e\or a\or e\or  \or a\or a\or a\or e\or a\fi d%
  \expandafter\expandafter\expandafter\expandafter\expandafter\expandafter
  \ifx#1\@@magyar@suffix@val\@@magyar@suffix@dal\else#1\fi % +ed+vel -> +ed+del
  \ifcase#2 3\or 1\or 1\or 3\or 1\or   5\or 3\or 1\or 3\or 1\or 1\or 1\or 1\or 3\or 1\or 3\or 3\or 3\or 3\or 1\or 3\fi
}%
\def\@@magyar@suffix@adiK#1#2{%
  \ifnum#2=1 \ifx#1\@@magyar@suffix@at s\"ot\else\@@magyar@skipfi\fi\else
    \ifcase#2  \or e\or e\or a\or e\or \"o\or o\or e\or a\or e\or e\or e\or e\or a\or e\or  \or a\or a\or a\or e\or a\fi dik%
    \expandafter\expandafter\expandafter\expandafter\expandafter\expandafter
    \ifx#1\@@magyar@suffix@val\@@magyar@suffix@kal\else#1\fi % +edik+vel -> +ed+kel
    \ifcase#2 3\or 1\or 1\or 3\or 1\or   1\or 3\or 1\or 3\or 1\or 1\or 1\or 1\or 3\or 1\or 3\or 3\or 3\or 3\or 1\or 3\fi
  \fi
}%
\def\@@magyar@suffix@A#1#2{%
  \ifcase#2 \'a\or j\'e\or \'a\or \'a\or \'e\or \'e\or \'a\or \'e\or \'a\or \'e\or \'e\or \'e\or \'e\or \'a\or \'e\or \'a\or\'a\or\'a\or\'a\or\'e\or\'a\fi
  \ifx#1\@@magyar@suffix@at t\else
  \ifx#1\@@magyar@suffix@an n\else% Dat: suffix overload: 2-a-an => 2-án
    \expandafter#1\ifcase#2 3\or 1\or 1\or 3\or 1\or   1\or 3\or 1\or 3\or 1\or 1\or 1\or 1\or 3\or 1\or 3\or 3\or 3\or 3\or 1\or 3\fi
  \fi\fi
}%
\def\@@magyar@suffix@@bad#1#2{\@@magyar@error{Unknown suffix \string`#1' for \string\told}}

% vvv Input suffix parser

%** Also defined elsewhere.
%** @param #2 \else...\else...\fi...\fi etc.
\def\@@magyar@swaprelax#1#2\relax{#2#1}
%\def\@@magyar@swapno#1\noexpand{...}
\def\@@magyar@contn#1\relax{#1\@@magyar@told@cont{}}
\def\@@magyar@conta#1#2#3\relax{#3\noexpand#1\@@magyar@told@cont{#2}}
\def\@@magyar@badsuffix#1#2\relax{#2\noexpand\@@magyar@suffix@@bad{#1}\@@magyar@told@cont{#1}}%
\def\@@magyar@fs@#1{%
  \if a\noexpand#1\@@magyar@swaprelax\@@magyar@fs@a\else
  \if b\noexpand#1\@@magyar@swaprelax\@@magyar@fs@b\else
  \if d\noexpand#1\@@magyar@swaprelax\@@magyar@fs@d\else
  \if e\noexpand#1\@@magyar@swaprelax\@@magyar@fs@e\else
  \if h\noexpand#1\@@magyar@swaprelax\@@magyar@fs@h\else
  \if k\noexpand#1\@@magyar@swaprelax\@@magyar@fs@k\else
  \if n\noexpand#1\@@magyar@swaprelax\@@magyar@fs@n\else
  \if o\noexpand#1\@@magyar@swaprelax\@@magyar@fs@o\else
  \if r\noexpand#1\@@magyar@swaprelax\@@magyar@fs@r\else
  \if s\noexpand#1\@@magyar@swaprelax\@@magyar@fs@s\else
  \if t\noexpand#1\@@magyar@swaprelax\@@magyar@fs@t\else
  \if u\noexpand#1\@@magyar@swaprelax\@@magyar@fs@u\else
  \if v\noexpand#1\@@magyar@swaprelax\@@magyar@fs@v\else
  % Imp: SUXX: badsuffix doesn't work for +qal here -- fix error reporting
  \@@magyar@badsuffix{#1}{}\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\relax
}
\def\@@magyar@fs@a#1{%
  %\if -\noexpand#1\@@magyar@swapno\else
  \if +\noexpand#1\noexpand\@@magyar@suffix@A\@@magyar@swaprelax\@@magyar@fs@\else
  \if d\noexpand#1\@@magyar@swaprelax\@@magyar@fs@ad\else
  \if n\noexpand#1\noexpand\@@magyar@suffix@an\@@magyar@contn\else
  \if s\noexpand#1\@@magyar@swaprelax\@@magyar@fs@as\else
  \if t\noexpand#1\noexpand\@@magyar@suffix@at\@@magyar@contn\else
                  \@@magyar@conta\@@magyar@suffix@a{#1}%
  \fi\fi\fi\fi\fi\relax
}
\def\@@magyar@fs@ad#1{%
  %\if -\noexpand#1\@@magyar@swapno\else
  \if +\noexpand#1\noexpand\@@magyar@suffix@aD\@@magyar@swaprelax\@@magyar@fs@\else
  \if i\noexpand#1\@@magyar@swaprelax\@@magyar@fs@adi\else
                  \@@magyar@conta\@@magyar@suffix@ad{#1}%
  \fi\fi\relax
}
\def\@@magyar@fs@adi#1{%
  \if k\noexpand#1\@@magyar@swaprelax\@@magyar@fs@adik\else
  \@@magyar@badsuffix{adi#1}{}\fi\relax
}
\def\@@magyar@fs@adik#1{%
  %\if -\noexpand#1\@@magyar@swapno\else
  \if +\noexpand#1\noexpand\@@magyar@suffix@adiK\@@magyar@swaprelax\@@magyar@fs@\else
                  \@@magyar@conta\@@magyar@suffix@adik{#1}%
  \fi\relax
}
\def\@@magyar@fs@as#1{%
  %\if -\noexpand#1\@@magyar@swapno\else
  \if +\noexpand#1\noexpand\@@magyar@suffix@aS\@@magyar@swaprelax\@@magyar@fs@\else
                  \@@magyar@conta\@@magyar@suffix@as{#1}%
  \fi\relax
}
\def\@@magyar@fs@b#1{%
  \if a\noexpand#1\@@magyar@swaprelax\@@magyar@fs@ba\else
  \if e\noexpand#1\@@magyar@swaprelax\@@magyar@fs@ba\else
  \if o\noexpand#1\@@magyar@swaprelax\@@magyar@fs@bo\else
  \@@magyar@badsuffix{b#1}{}\fi\fi\fi\relax
}
\def\@@magyar@fs@ba#1{%
  \if n\noexpand#1\noexpand\@@magyar@suffix@ban\@@magyar@contn\else
                  \@@magyar@conta\@@magyar@suffix@ba{#1}%
  \fi\relax
}
\def\@@magyar@fs@bo#1{%
  \if l\noexpand#1\noexpand\@@magyar@suffix@bol\@@magyar@contn\else
  \@@magyar@badsuffix{bo#1}{}\fi\relax
}
\def\@@magyar@fs@d#1{%
  \if a\noexpand#1\@@magyar@swaprelax\@@magyar@fs@da\else
  \if e\noexpand#1\@@magyar@swaprelax\@@magyar@fs@da\else
  \@@magyar@badsuffix{d#1}{}\fi\fi\relax
}
\def\@@magyar@fs@da#1{%
  \if l\noexpand#1\noexpand\@@magyar@suffix@dal\@@magyar@contn\else
  \@@magyar@badsuffix{da#1}{}\fi\relax
}
\def\@@magyar@fs@e#1{%
  \if d\noexpand#1\@@magyar@swaprelax\@@magyar@fs@ad\else
  \if s\noexpand#1\@@magyar@swaprelax\@@magyar@fs@as\else
  \if t\noexpand#1\noexpand\@@magyar@suffix@at\@@magyar@contn\else
  \if n\noexpand#1\noexpand\@@magyar@suffix@an\@@magyar@contn\else
  \if +\noexpand#1\noexpand\@@magyar@suffix@A\@@magyar@swaprelax\@@magyar@fs@\else
  %\@@magyar@badsuffix{e#1}{}
  \@@magyar@conta\@@magyar@suffix@a{#1}{}%
  \fi\fi\fi\fi\fi\relax
}
\def\@@magyar@fs@h#1{%
  \if e\noexpand#1\@@magyar@swaprelax\@@magyar@fs@ho\else
  \if o\noexpand#1\@@magyar@swaprelax\@@magyar@fs@ho\else
  \@@magyar@badsuffix{h#1}{}\fi\fi\relax
}
\def\@@magyar@fs@ho#1{%
  \if z\noexpand#1\noexpand\@@magyar@suffix@hoz\@@magyar@contn\else
  \@@magyar@badsuffix{ho#1}{}\fi\relax
}
\def\@@magyar@fs@k#1{%
  \if a\noexpand#1\@@magyar@swaprelax\@@magyar@fs@ka\else
  \if e\noexpand#1\@@magyar@swaprelax\@@magyar@fs@ka\else
  \@@magyar@badsuffix{k#1}{}\fi\fi\relax
}
\def\@@magyar@fs@ka#1{%
  \if l\noexpand#1\noexpand\@@magyar@suffix@kal\@@magyar@contn\else
  \@@magyar@badsuffix{ka#1}{}\fi\relax
}
\def\@@magyar@fs@n#1{%
  \if a\noexpand#1\@@magyar@swaprelax\@@magyar@fs@na\else
  \if e\noexpand#1\@@magyar@swaprelax\@@magyar@fs@na\else
  \@@magyar@badsuffix{n#1}{}\fi\fi\relax
}
\def\@@magyar@fs@na#1{%
  \if k\noexpand#1\noexpand\@@magyar@suffix@nak\@@magyar@contn\else
  \if l\noexpand#1\noexpand\@@magyar@suffix@nal\@@magyar@contn\else
  \@@magyar@badsuffix{na#1}{}\fi\fi\relax
}
\def\@@magyar@fs@o#1{%
  \if d\noexpand#1\@@magyar@swaprelax\@@magyar@fs@ad\else
  \if n\noexpand#1\noexpand\@@magyar@suffix@on\@@magyar@contn\else
  \if s\noexpand#1\@@magyar@swaprelax\@@magyar@fs@as\else
  \if t\noexpand#1\noexpand\@@magyar@suffix@at\@@magyar@contn\else
  \@@magyar@badsuffix{o#1}{}\fi\fi\fi\fi\relax
}
\def\@@magyar@fs@r#1{%
  \if a\noexpand#1\noexpand\@@magyar@suffix@ra\@@magyar@contn\else
  \if e\noexpand#1\noexpand\@@magyar@suffix@ra\@@magyar@contn\else
  \if o\noexpand#1\@@magyar@swaprelax\@@magyar@fs@ro\else
  \@@magyar@badsuffix{r#1}{}\fi\fi\fi\relax
}
\def\@@magyar@fs@ro#1{%
  \if l\noexpand#1\noexpand\@@magyar@suffix@rol\@@magyar@contn\else
  \@@magyar@badsuffix{ro#1}{}\fi\relax
}
\def\@@magyar@fs@s#1{%
  \if z\noexpand#1\@@magyar@swaprelax\@@magyar@fs@sz\else
  \if a\noexpand#1\@@magyar@swaprelax\@@magyar@fs@sa\else
  \if e\noexpand#1\@@magyar@swaprelax\@@magyar@fs@sa\else
  \if t\noexpand#1\noexpand\@@magyar@suffix@st\@@magyar@contn\else
  \@@magyar@badsuffix{s#1}{}\fi\fi\fi\fi\relax
}
\def\@@magyar@fs@sa#1{%
  \if l\noexpand#1\noexpand\@@magyar@suffix@sal\@@magyar@contn\else
  \@@magyar@badsuffix{sa#1}{}\fi\relax
}
\def\@@magyar@fs@sz#1{%
  \if o\noexpand#1\@@magyar@swaprelax\@@magyar@fs@szo\else
  \if e\noexpand#1\@@magyar@swaprelax\@@magyar@fs@szo\else
  \@@magyar@badsuffix{sz#1}{}\fi\fi\relax
}
\def\@@magyar@fs@szo#1{%
  \if r\noexpand#1\noexpand\@@magyar@suffix@szor\@@magyar@contn\else
  \@@magyar@badsuffix{szo#1}{}\fi\relax
}
\def\@@magyar@fs@t#1{%
  \if o\noexpand#1\@@magyar@swaprelax\@@magyar@fs@to\else% Dat: works even if #1 is empty
                  \@@magyar@conta\@@magyar@suffix@at{#1}%
  \fi\relax
}
\def\@@magyar@fs@to#1{%
  \if l\noexpand#1\noexpand\@@magyar@suffix@tol\@@magyar@contn\else
  \@@magyar@badsuffix{to#1}{}\fi\relax
}
\def\@@magyar@fs@u#1{%
  \if l\noexpand#1\noexpand\@@magyar@suffix@ul\@@magyar@contn\else
  \@@magyar@badsuffix{u#1}{}\fi\relax
}
\def\@@magyar@fs@v#1{%
  \if a\noexpand#1\@@magyar@swaprelax\@@magyar@fs@va\else
  \if e\noexpand#1\@@magyar@swaprelax\@@magyar@fs@va\else
  \@@magyar@badsuffix{v#1}{}\fi\fi\relax
}
\def\@@magyar@fs@va#1{%
  \if l\noexpand#1\noexpand\@@magyar@suffix@val\@@magyar@contn\else
  \@@magyar@badsuffix{va#1}{}\fi\relax
}

% vvv Classification

% Old: \def\@@magyar@skipor#1\or#2\fi{\fi#1}%
%** Usage: \expandafter\@@magyar@skipor\expandafter\token\ifcase ... \else ... \or\else\fi
\def\@@magyar@skipor#1\or{\@@magyar@skipelse#1\else}%
\def\@@magyar@skipelse#1\else#2\fi{\fi#1}%

%** Usage: \@@magyar@classify@none{N}{...}
%**   Reads till \vfuzz, considers the last decimal number, ignores space,
%** punctuation and the minus `-' sign. Ignores spaces, so `1 2' and `12' are
%** treated the same number. There must ne no `{' or `}' inside `...'.
%**   x ends by 0..9, y ends by 1..9 below.
%** @expands to:
%**   c0: 0
%**   c1: 1
%**   c2: x2 ...
%**   c9: x9
%**   c10: x10
%**   c11: x1
%**   c12: x2
%**   c13: y00
%**   c14: y000 y0000 y00000
%**   c15: y000000 y0000000 y00000000
%**   c16: x000000000
%**   c17: x20
%**   c18: x30
%**   c19: x40 x50 x70 x90
%**   c20: x60 x80
%**   On error, expansion doesn't start with `c'
%** @param #1 default classification, if no (more) numbers found
%** @param #2 next token
\def\@@magyar@classify@none#1#2{%
  \if\noexpand#20\@@magyar@swaprelax{\@@magyar@classify@none{c0}}\else
  % Dat: smart way to test whether #1 is in 1..9: \ifnum0<0\string#1 foo\fi
  \ifnum0<0\string#2 \@@magyar@swaprelax{\@@magyar@classify@single#2}\else
  \if\noexpand#2- \@@magyar@swaprelax{\@@magyar@classify@neg{#1}}\else
  \ifx#2\vfuzz   \@@magyar@swaprelax{#1}\else% stop processing if terminating \vfuzz is found
                 \@@magyar@swaprelax{\@@magyar@classify@none{#1}}% find next (possibly) number
  % ^^^ Dat: it is safe to call \@@magyar@swaprelax here, even if #2 contains \relax
  \fi\fi\fi\fi\relax
}
\def\@@magyar@classify@neg#1#2{%
  \if\noexpand#20\@@magyar@swaprelax{\@@magyar@classify@none{c0}}\else
  % Dat: smart way to test whether #1 is in 1..9: \ifnum0<0\string#1 foo\fi
  \ifnum0<0\string#2 \@@magyar@swaprelax{\@@magyar@classify@singleneg#2}\else
  \if\noexpand#2- \@@magyar@swaprelax{\@@magyar@classify@none{#1}}\else% double negation
  \ifx#2\vfuzz   \@@magyar@swaprelax{#1}\else% stop processing if terminating \vfuzz is found
                 \@@magyar@swaprelax{\@@magyar@classify@none{#1}}% find next (possibly) number, start as positive
  % ^^^ Dat: it is safe to call \@@magyar@swaprelax here, even if #2 contains \relax
  \fi\fi\fi\fi\relax
}
%** @param #1 previous digit 1..9
%** @param #2 next token
\def\@@magyar@classify@single#1#2{%
  \if\noexpand#20\@@magyar@swaprelax{\@@magyar@classify@tens#1}\else
  \ifnum0<0\string#2 \@@magyar@swaprelax{\@@magyar@classify@more#2}\else
  \ifx#2\vfuzz   \@@magyar@swaprelax{c#1}\else
                 \@@magyar@swaprelax{\@@magyar@classify@none{c#1}#2}%
  % ^^^ Dat: it is safe to call \@@magyar@swaprelax here, even if #2 contains \relax
  \fi\fi\fi\relax
}
%** @param #1 previous digit 1..9
%** @param #2 next token
\def\@@magyar@classify@singleneg#1#2{%
  \if\noexpand#20\@@magyar@swaprelax{\@@magyar@classify@tens#1}\else
  \ifnum0<0\string#2 \@@magyar@swaprelax{\@@magyar@classify@more#2}\else
  \ifx#2\vfuzz   \@@magyar@swaprelax{c\ifcase#1 0\or11\or12\else#1\fi}\else % turn `-1' -> `11' and `-2' to `12'
  \if#11\@@magyar@swaprelax{\@@magyar@classify@neg{c11}#2}\else
  \if#12\@@magyar@swaprelax{\@@magyar@classify@neg{c12}#2}\else
                 \@@magyar@swaprelax{\@@magyar@classify@neg{c#1}#2}%
  % ^^^ Dat: it is safe to call \@@magyar@swaprelax here, even if #2 contains \relax
  \fi\fi\fi\fi\fi\relax
}
%** @param #1 previous digit 1..9
%** @param #2 next token
\def\@@magyar@classify@more#1#2{%
  \if\noexpand#20\@@magyar@swaprelax{\@@magyar@classify@tens#1}\else
  \ifnum0<0\string#2 \@@magyar@swaprelax{\@@magyar@classify@more#2}\else
                 \@@magyar@swaprelax{%
    \expandafter\@@magyar@skipor\expandafter\@@magyar@classify@none
    \ifcase#1 M\or {c11}\or {c12}\else {c#1}\or\else\fi#2}%
  % ^^^ Dat: it is safe to call \@@magyar@swaprelax here, even if #2 contains \relax
  \fi\fi\relax
}
%** @param #1 prev-prev digit, 1..9
%** @param #2 next token
\def\@@magyar@classify@tens#1#2{%
  \if\noexpand#20\@@magyar@swaprelax{\@@magyar@classify@zeroes2}\else
  \ifnum0<0\string#2 \@@magyar@swaprelax{\@@magyar@classify@more#2}\else
                 \@@magyar@swaprelax{%
    \expandafter\@@magyar@skipor\expandafter\@@magyar@classify@none
    \ifcase#1 T\or{c10}\or{c17}\or{c18}\or{c19}\or{c19}\or{c20}\or{c19}\or{c20}\else{c19}\or\else\fi#2}%
  % ^^^ Dat: it is safe to call \@@magyar@swaprelax here, even if #2 contains \relax
  \fi\fi\relax
}
%** @param #1 zero-count 2..9
%** @param #2 next token
\def\@@magyar@classify@zeroes#1#2{%
  \if\noexpand#20\@@magyar@swaprelax{%
     %\def\foo#1,{.(#1)}
     %\message{\expandafter\expandafter\expandafter\foo\expandafter
     %  \@@magyar@skipor\ifcase3 zero\or one\or two\else three\or\fi,done}
     \expandafter\@@magyar@skipor\expandafter\@@magyar@classify@zeroes
     %\ifcase#1 Y\or Y\or 3\or 4\or 5\or 6\or 7\or 8\or 9\or 9\or% Dat: no \else
     \ifcase#1 Y\or Y\or 3\or 4\or 5\or 6\or 7\or 8\else 9%
     \or\else\fi}\else% ^^^ Dat: 2 -> 3 ... 8 -> 9, 9 -> 9
  \ifnum0<0\string#2 \@@magyar@swaprelax{\@@magyar@classify@more#2}\else
                 \@@magyar@swaprelax{%
    \expandafter\@@magyar@skipor\expandafter\@@magyar@classify@none
    \ifcase#1 Z\or Z\or {c13}\or {c14}\or {c14}\or {c14}\or {c15}\or {c15}\or
    {c15}\else {c16}\or\else\fi#2}%
  % ^^^ Dat: it is safe to call \@@magyar@swaprelax here, even if #2 contains \relax
  \fi\fi\relax
}

% vvv The user interface for suffixing

\def\@@magyar@ccheck#1#2\vfuzz#3{%
  \if\noexpand#1c\relax\else
    \@@magyar@error{\string\told\space needs number, not \string`#3'}%
    \def\reserved@a{c0}%
  \fi
}

%** Expands #1 with \the if it is \cs (possibly \count or \toks etc.)
\def\@@magyar@the#1{%
  \ifx#1\relax\else\if\noexpand\noexpand\noexpand#1%
  \expandafter\expandafter\expandafter\the\fi\fi#1%
}%

\def\@@magyar@firsthfuzz#1#2\hfuzz{#1}
\def\@@magyar@secondhfuzz#1#2#3\hfuzz{#2}
%** See docs in magyar.dtx
\def\@@magyar@zerocite#1{%
  \ifx[#1\expandafter\@secondoftwo\fi\@thirdofthree\@firstoftwo
  {\@@magyar@zerocite@lowa[, }% had `['
  {\@@magyar@zerocite@lowa[]{#1}}%
}
\def\@@magyar@zerocite@lowa[#1]#2{[\@@magyar@zerocite@lowb#2,\hbox,${#1}}
\def\@@magyar@swapvfuzz#1#2\vfuzz{#2#1}
\def\@@magyar@zerocite@lowb#1#2,{%
  \ifx\hfuzz#1\hfuzz
  \else\ifx\hbox#1\@@magyar@swapvfuzz\@@magyar@zerocite@lowc
  \else\ifx,#1\@@magyar@swapvfuzz\@@magyar@zerocite@lowb{#2,}%
  \else\expandafter\ifx\csname b@#1#2\endcsname\relax
    0, \@@magyar@swapvfuzz\@@magyar@zerocite@lowb
  \else\expandafter\expandafter\expandafter\@@magyar@b@number
    \expandafter\expandafter\expandafter{\csname b@#1#2\endcsname},
    \@@magyar@swapvfuzz\@@magyar@zerocite@lowb
  \fi\fi\fi\fi\vfuzz}
\def\@@magyar@zerocite@lowc$#1{]#1}

%** Expands to the numeric value of a \b@foobar definition
%** Dat: with natbib.sty, we get \def\b@foobar{{1}{...}...},
%**      otherwise something like \def\b@foobar{\... 1}
%** @param #1 value of a \b@foobar
\def\@@magyar@b@number{%
  \expandafter\ifx\csname ver@natbib.sty\endcsname\relax
    \expandafter\@firstofone
  \else \expandafter\@@magyar@b@number@natbibone \fi
}
\def\@@magyar@b@number@natbibone#1{\@@magyar@b@number@natbibtwo#1.\vfuzz}
\def\@@magyar@b@number@natbibtwo#1#2\vfuzz{#1}%

\def\@@magyar@zeroaref#1{%
  % Dat: we cannot use \@ifnextchar here, because it is not expandable
  \ifx(#1\expandafter\@secondoftwo\fi\@thirdofthree\@firstoftwo
  {\@@magyar@zeroref}{% Dat: gobble the (
    \ifx*#1\expandafter\@secondoftwo\fi\@thirdofthree\@firstoftwo
    {\NotAllowedArefStar\@@magyar@zeropageref}% Dat: gobble the *
    {\@@magyar@zeroref{#1}}%
    {\@@magyar@zeroref{#1}}}%
}

\def\@@magyar@zeroapageref#1{%
  % Dat: we cannot use \@ifnextchar here, because it is not expandable
  \ifx*#1\expandafter\@secondoftwo\fi\@thirdofthree\@firstoftwo
  {\NotAllowedApagerefStar\@@magyar@zeropageref}% Dat: gobble the *
  {\@@magyar@zeropageref{#1}}%
}

\def\@@magyar@zeroref#1{%
  \expandafter\ifx\csname r@#1\endcsname\relax0\else
    \expandafter\expandafter\expandafter\@@magyar@firsthfuzz\csname r@#1\endcsname00\hfuzz
  \fi
}%
\def\@@magyar@zeroeqref#1{(\@@magyar@zeroref{#1})}%
\def\@@magyar@zerorefplus#1{\@@magyar@zerorefplus@low#1+\vfuzz}
\def\@@magyar@zerorefplus@low#1+#2\vfuzz{%
  \expandafter\ifx\csname r@#1\endcsname\relax0\else
    \expandafter\expandafter\expandafter\@@magyar@firsthfuzz\csname r@#1\endcsname00\hfuzz
  \fi
}%
\def\@@magyar@zeropageref#1{%
  \expandafter\ifx\csname r@#1\endcsname\relax0\else
    \expandafter\expandafter\expandafter\@@magyar@secondhfuzz\csname r@#1\endcsname00\hfuzz
  \fi
}%

%** A space might be discared after the suffix, depending on the suffix. So
%** please use `\told5+adik{} ' to ensure the space.
%**   May raise `! Package magyar.ldf Error: Unknown suffix `...' for \told', but
%** emits unchanged suffix to DVI file.
%**   \atold\apageref emits double article
%**   \cite, \acite etc. is allowed, but without comma
%**   \aref({...}), \aref*, \apageref*, \acite* aren't allowed
%** \refstruc doesn't work inside it, because \refstruc isn't expandable
%** @example \told4+a+a+a+a+adik raises strange error
%** @example no -en is provided for -an/-on, to avoid ambiguity
%** @example \told4+adik: 0-adik 1-ső 2-odik 3-adik 12-edik 10^8-adik
%** @example augusztus \told20-a: 1-je 2-a 3-a 4-e 5-e 6-a ... (augusztus 20-a)
%** @example \told3+as: 0-s(??) 1-es 2-es 3-as 4-es 5-ös 10^6-s
%** @example \told0+ad: 0-ad 1-ed 2-ed 3-ad 5-öd 10^6-ad
%** @example \told1000+hoz: 0-hoz 3-hoz 6-hoz 8-hoz 100-hoz 10^6-hoz 10^9-hoz 1-hez 4-hez 7-hez 9-hez 10-hez 1000-hez 2-höz 5-höz
%** @example \told5+an: 5-en 2-en 100-an 10^6-n
%** @example \told5+on: 5-ön 2-n 3-on 100-on 10^6-n
%** @example \told0+at: 0-t 2-t 10^6-t 1-et 4-et 7-et 9-et 10-et 1000-et 3-at 8-at 6-ot 10^9-ot 5-öt
%** @example \told1000+ban: 1000-ben
%** @example \told7+ba: 7-be
%** @example \told5+nak: 7-nek
%** @example \told2+ra: 2-re
%** @example \told4+nal: 4-nél
%** @example \told7+bol: 7-ből
%** @example \told5+tol: 5-től
%** @example \told3+rol: 3-ról
%** @example \told2+ul: 0-ul 1-ül 2-ül 3-ul
%** @example \told5+odik+hoz
%** @example \told{300}+szor
%** @example -i and -ig don't change have alternate forms
%** @param #1 something that expands to an integer, or `\count...' or `\toks...'
\DeclareRobustCommand \@@magyar@told{\@@magyar@xtold 0}
\DeclareRobustCommand\@@magyar@atold{\@@magyar@xtold a}
\DeclareRobustCommand\@@magyar@Atold{\@@magyar@xtold A}
\def\@@magyar@xtold#1#2+{\@@magyar@told@low{#2}#1}
%** @param #1 something that expands to an integer, or `\count...' or `\toks...'
%** @param #2 add \az? (0: no, a: lowercase A: uppercase)
\def\@@magyar@told@low#1#2{%
  % Dat: a level of braces has already been stripped from #1
  % Dat: negative sign isn't important, because it is skipped by \@@magyar@classify@none
  \begingroup\begingroup
  \@safe@activestrue% allow active `:' inside labels
  \let\@safe@activesfalse\@empty \let\@safe@activestrue\@empty% inside \b@... emitted by \cite
  % vvv Dat: gobbles its arg and `-' below
  %     `\@@magyar@toldas{42}' must be the very end of #1
  \let\@@magyar@toldas\@gobbletwo
  \let\-\relax
%  \let\@@magyar@save@tilde~%
  \let~\relax% influenced by \@safe@activestrue
  \let\refstruc\relax  \let\refstrucparen\relax
  \let \ref\relax \let \pageref\relax \let \cite\relax % all unexpandable, even for \@@magyar@the
  \let\aref\relax \let\apageref\relax \let\acite\relax
  \let\Aref\relax \let\Apageref\relax \let\Acite\relax
  \let\autoref\relax
  \let\hbox\@firstofone  % Make \hbox{...} work by removing the braces. TODO(pts): Make \hbox to...{...} work.
  \let\@@magyar@told@optdot\@empty  % The optional dot disappears.
  %\set@display@protect% \string. Why?? doesn't seem to screw up \r
  \set@typeset@protect% \relax.
  \edef\reserved@c{#1-}%
  \edef\reserved@c{\def\noexpand\reserved@c{\expandafter\@@magyar@the\reserved@c\@empty}}% `\expandafter' is here so `the' and `number' take place
  %
  \def\@@magyar@toldas##1{.##1.}% emit the number
  \let\romannumeral\number
  \def\refstruc##1{0}%
  \def\refstrucparen##1{0}%
  \let\@safe@activestrue\@empty% babel puts these inside \b@...: % Dat: \def\b@abook{\@safe@activesfalse 2}% (what is \@safe@actives??)
  \let\@safe@activesfalse\@empty% \b@DuplanJauneau1986 ->\@safe@activesfalse 15
  \def\hyper@@link[##1]##2##3##4{##4}% Dat: \def\b@abook{\hyper@@link [cite]{}{cite.sokt}{2}}% with hyperref.sty % BUGFIX at Tue Nov 21 03:15:32 CET 2006
  %
  \let\ref\@@magyar@zeroref
  \let\pageref\@@magyar@zeropageref
  \let\cite\@@magyar@zerocite
  \let\eqref\@@magyar@zeroeqref
  %
  \let\aref\@@magyar@zeroaref \let\Aref\aref % Dat: supports \aref* and \aref(
  \let\apageref\@@magyar@zeroapageref \let\Apageref\apageref % Dat: supports \apageref* and \apageref(
  \let\acite\cite \let\Acite\acite
  %
  \let\autoref\ref% Dat: SUXX: ``section 1-gyel''
  \edef\reserved@a{#1}%
  \edef\reserved@a{\expandafter\@@magyar@the\reserved@a\@empty}% `\expandafter' is here so `the' and `number' take place
  %\let~\@@magyar@save@tilde% vvv for ~ below etc.
  \if0#2\else
    #2% a or A
    % vvv Dat: we do \az with \romannumeral changed to \number
    \expandafter\@@magyar@az@set\expandafter{\reserved@a}\hbox$% Dat: \reserved@a is already expanded, as required by \@@magyar@az@set
    \nobreakspace% Dat: `~' is wrong here, it has been redefined !!
  \fi
  \edef\reserved@a{\noexpand\reserved@c\def\noexpand\reserved@a{\reserved@a}}%
  %
  \expandafter\expandafter\expandafter\endgroup\reserved@a% keep \reserved@a and \reserved@c
  %%\show\reserved@a \show\reserved@c \show\@@magyar@toldas
  % vvv Dat: shows friendly LaTeX error: \told{\refstruc{refstruc=}}+ban
  \def\refstruc{\@@magyar@error{Cannot use \string\refstruc\space inside \string\told}\@@magyar@refstruc}%
  \edef\reserved@a{\expandafter\@@magyar@classify@none\expandafter N\reserved@a\vfuzz}%
  %%\show\reserved@a
  \expandafter\@@magyar@ccheck\reserved@a..\vfuzz\reserved@c%
  %\edef\reserved@a{{\ifcase\expandafter\@gobble\reserved@a\space 0\or1\or2\or
  %  3\or4\or5\or6\or7\or8\or9\or10\or11\or12\or13\or14\or15\or16\or
  %  8\or8\else 9\fi}}% 20->8 30->8 40->9 % no need for this anymore
  \edef\reserved@a{{\number\expandafter\@gobble\reserved@a}}% keeps 17,18,19 for +val
  \expandafter\edef\expandafter\reserved@b\expandafter{\if}.\fi\@@magyar@fs@
}
\def\@@magyar@told@optdot{.}
%** @in \reserved@a is suffix classification in braces: {0}, {1} ... or {16}
%** @param #1 \@empty or a char token
\def\@@magyar@told@cont#1{%
  \reserved@a% add the suffix class, example: {11}
  #1%\if/\noexpand#1\else#1\fi% add extra char unless `/'
  \if{.\fi}% close \edef\reserved@b opened in \@@magyar@told
  % Now: example \reserved@b: \@@magyar@suffix@aS \@@magyar@suffix@sal {11}
  % Now: example \reserved@b: \@@magyar@suffix@aS \@@magyar@suffix@val {11}
  % Dat: \reserved@b is now like \@@magyar@suffix@A \@@magyar@suffix@ban
  % vvv Dat: \aref in \reserved@c may modify \reserved@b, so we call it
  %     late by \expandafter
  \expandafter\reserved@c% print the number and the hyphen
  \reserved@b% print the suffix
  \endgroup
}
% Dat: \told is an unused \cs in LaTeX and its standard packages
\ifnum\magyar@opt@@told>1
  \let \told\@@magyar@told
  \let\atold\@@magyar@atold
  \let\Atold\@@magyar@Atold
\else
  \expandafter\ifx\csname  told\endcsname\relax \let \told\@@magyar@told\fi
  \expandafter\ifx\csname atold\endcsname\relax \let\atold\@@magyar@atold\fi
  \expandafter\ifx\csname Atold\endcsname\relax \let\Atold\@@magyar@Atold\fi
\fi
\@gobble
{^}%

% --- hutoday=

% Dat: latex.ltx has \edef for \today, but we have \def
\def\SafeToday{%
  \begingroup
    \@tempcnta\time
    \@tempcntb\@tempcnta
    \divide\@tempcnta by 60
    \advance\@tempcntb by -\numexpr\@tempcnta*60\relax
    \number\year/\two@digits{\number\month}/\two@digits{\number\day}:%
    \two@digits{\number\@tempcnta}:\two@digits{\number\@tempcntb}%
  \endgroup}

\ifnum\magyar@opt@@hutoday=0 \@namedef{date\CurrentOption}{\let\today\SafeToday}\@@magyar@skiplong\fi
%** Same as what latex.ltx has. Expansion doesn't change it, doesn't contain
%** accents.
\@namedef{date\CurrentOption}{%
  \def\today{%
    \number\year.~\ifcase\month\or
    janu\'ar\or febru\'ar\or m\'arcius\or
    \'aprilis\or m\'ajus\or j\'unius\or
    j\'ulius\or augusztus\or szeptember\or
    okt\'ober\or november\or december\fi
    \space\number\day.\hbox{}}%
  }
% vvv Dat: ondate... and \ontoday is specific to magyar.ldf
\@namedef{ondate\CurrentOption}{%
  \number\year.~\ifcase\month\or janu\'ar\or febru\'ar\or m\'arcius\or
  \'aprilis\or m\'ajus\or j\'unius\or j\'ulius\or augusztus\or szeptember\or
  okt\'ober\or november\or december\fi\space\ifcase\day\or
    1-j\'en\or  2-\'an\or  3-\'an\or  4-\'en\or  5-\'en\or
    6-\'an\or  7-\'en\or  8-\'an\or  9-\'en\or 10-\'en\or
   11-\'en\or 12-\'en\or 13-\'an\or 14-\'en\or 15-\'en\or
   16-\'an\or 17-\'en\or 18-\'an\or 19-\'en\or 20-\'an\or
   21-\'en\or 22-\'en\or 23-\'an\or 24-\'en\or 25-\'en\or
   26-\'an\or 27-\'en\or 28-\'an\or 29-\'en\or 30-\'an\or
   31-\'en\fi}
\edef\reserved@a{%
  \noexpand\addto\expandafter\noexpand\csname extras\CurrentOption\endcsname{%
  \noexpand\babel@save\noexpand\ontoday
  \let\noexpand\ontoday\expandafter\noexpand\csname ondate\CurrentOption\endcsname}
}
\reserved@a
\@gobble
{^}%

% --- refstruc=

\if0\magyar@opt@@refstruc \@@magyar@skiplong\fi
\def\@@magyar@nonumbers@skipa#1\@@magyar@nonumbers@s{#1\@@magyar@nonumbers@a}
%** Changes arabic and roman numbers to 1 or i, respectively.
%** Usage: \typeout{((\@@magyar@nonumbers@a 35.2.iv\hfuzz))} -> ((1.1.i))
\def\@@magyar@nonumbers@a#1{%
  \ifx#1\hfuzz \expandafter\@gobble
  \else\if\noexpand#101% !! Imp: 1<1\string#1
  \else\if\noexpand#111%
  \else\if\noexpand#121%
  \else\if\noexpand#131%
  \else\if\noexpand#141%
  \else\if\noexpand#151%
  \else\if\noexpand#161%
  \else\if\noexpand#171%
  \else\if\noexpand#181%
  \else\if\noexpand#191%
  \else\if\noexpand#1mi%
  \else\if\noexpand#1di%
  \else\if\noexpand#1ci%
  \else\if\noexpand#1li%
  \else\if\noexpand#1xi%
  \else\if\noexpand#1vi%
  \else\if\noexpand#1ii%
  \else\if\noexpand#1MI%
  \else\if\noexpand#1DI%
  \else\if\noexpand#1CI%
  \else\if\noexpand#1LI%
  \else\if\noexpand#1XI%
  \else\if\noexpand#1VI%
  \else\if\noexpand#1II%
  \else\noexpand#1\@@magyar@nonumbers@skipa
  \fi\fi\fi\fi\fi\fi\fi \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \fi\fi\fi\fi\fi\fi\fi \fi
  \@@magyar@nonumbers@s
}
\def\@@magyar@nonumbers@s#1{%
  \ifx#1\hfuzz \expandafter\@gobble
  \else\if\noexpand#10%
  \else\if\noexpand#11%
  \else\if\noexpand#12%
  \else\if\noexpand#13%
  \else\if\noexpand#14%
  \else\if\noexpand#15%
  \else\if\noexpand#16%
  \else\if\noexpand#17%
  \else\if\noexpand#18%
  \else\if\noexpand#19%
  \else\if\noexpand#1m%
  \else\if\noexpand#1d%
  \else\if\noexpand#1c%
  \else\if\noexpand#1l%
  \else\if\noexpand#1x%
  \else\if\noexpand#1v%
  \else\if\noexpand#1i%
  \else\if\noexpand#1M%
  \else\if\noexpand#1D%
  \else\if\noexpand#1C%
  \else\if\noexpand#1L%
  \else\if\noexpand#1X%
  \else\if\noexpand#1V%
  \else\if\noexpand#1I%
  \else\noexpand#1\@@magyar@nonumbers@skipa
  \fi\fi\fi\fi\fi\fi\fi \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \fi\fi\fi\fi\fi\fi\fi \fi
  \@@magyar@nonumbers@s
}

\let\@@magyar@toldas\@gobble
\def\@@magyar@strucname@part{r\'esz\@@magyar@toldas{4}}% SUXX: may not contain \-; !! résszel (vs. részszel)
\def\@@magyar@strucname@chapter{fejezet\@@magyar@toldas{9}}% !! fejezettel
\def\@@magyar@strucname@appendix{f\"ug\-gel\'ek\@@magyar@toldas{4}}% !! fuggelekkel
\def\@@magyar@strucname@section{szakasz\@@magyar@toldas{20}}%
\def\@@magyar@strucname@subsection{al\-sza\-kasz\@@magyar@toldas{20}}%
\def\@@magyar@strucname@subsubsection{al\-al\-szakasz\@@magyar@toldas{20}}%
\def\@@magyar@strucname@subsubsubsection{al\-al\-al\-szakasz\@@magyar@toldas{20}}%
\def\@@magyar@strucname@paragraph{bekezd\'es\@@magyar@toldas{4}}%
\def\@@magyar@strucname@subparagraph{albekezd\'es\@@magyar@toldas{4}}%
\def\@@magyar@strucname@subsubparagraph{alalbekezd\'es\@@magyar@toldas{4}}%
\def\@@magyar@strucname@figure{\'ab\-ra\@@magyar@toldas{4}}% !! ábrában etc.
\def\@@magyar@strucname@table{t\'ab\-l\'azat\@@magyar@toldas{6}}%
\def\@@magyar@strucname@equation{egyenlet\@@magyar@toldas{7}}%
\def\@@magyar@strucname@footnote{l\'ab\-jegy\-zet\@@magyar@toldas{7}}%
\def\@@magyar@strucname@item{elem\@@magyar@toldas{4}}% !! elemmel etc.
\def\@@magyar@strucname@FancyVerbLine{sor\@@magyar@toldas{8}}% !! sorral
\def\@@magyar@strucname@theorem{t\'e-tel\@@magyar@toldas{4}}% !! tétellel

%** Must be expandable.
%** @param #1 `section' etc.
%** @expands to its name in English
\def\@@magyar@strucname#1{#1}
%** @param #1 `section' etc.
%** @expands to its name in Hungarian
\def\@@magyar@strucname@hu#1{\csname @@magyar@strucname@#1\endcsname}

%** Keeps only structure number, discards page number etc.
\def\@@magyar@refstruc@parse#1#2\vfuzz{%
  \ifx\relax#1\let\reserved@a\relax
  \else\def\reserved@a{#1}\fi
}%
%** Retrieves the structure name (arg #4) from arg 2 of a \newlabel emitted
%** by hyperref.sty.
%** @example \newlabel{fig:vonal}{{1}{1}{my title}{figure.1}{}}
%**        \@namedef{r@fig:vonal}{{1}{1}{my title}{figure.1}{}}
%**          -> extract `figure' to \reserved@c
\def\@@magyar@refstruc@parsehyname#1#2#3#4#5\vfuzz{%
  \ifx\relax#1%
  \else\expandafter\@@magyar@refstruc@parsehynamedot#4\vfuzz\fi
}%
\def\@@magyar@refstruc@parsehynamedot#1.#2\vfuzz{%
  \expandafter\ifx\csname @@magyar@strucname@#1\endcsname\relax
  \else\def\reserved@c{#1}\fi
}

%** @param #1 name of a count register (e.g c@part)
\def\@@magyar@refstruc@setcnt#1{%
  \expandafter\ifx\csname#1\endcsname\relax\expandafter\@tempcnta
  \else\csname#1\endcsname\fi
}%

%** @param #1 a label name
\def\@@magyar@refstruc@ref#1{%
  \ref{#1}.~%
}

%** May not touch \reserved@a
\def\@@magyar@refstruc@split#1+#2\vfuzz#3{%
  \if\noexpand#30\else\@@magyar@refstruc@ref{#1}\fi
  \ifx\vfuzz#2%
    \textbf{??}%
    \G@refundefinedtrue
  \else
    \begingroup
      \@safe@activestrue% so active `:' etc. will work inside \csname...
      \edef\reserved@c{\noexpand\@@magyar@refstruc@splitlow
	\expandafter\ifx\csname r@#1\endcsname\relax\relax\else
	\expandafter\noexpand\csname r@#1\endcsname\fi}%
      % ^^^ Dat: would emit `undefined' instead of `\relax' w/o \ifx
    \expandafter\endgroup\reserved@c{#2}%
  \fi
}

%** @param #1 csname \r@foo:bar
%** @param #2 suffix to add
\def\@@magyar@refstruc@splitlow#1#2{%
  \ifx#1\relax
    \textbf{??+#2}%
    \G@refundefinedtrue
  \else
    \expandafter\@@magyar@refstruc@parse#1..\vfuzz%
    \@@magyar@refstruc@work#1%
    \let\@@magyar@save@m\-%
    \let\-\relax
    \let\@@magyar@toldas\relax
    \edef\reserved@c{\expandafter\@@magyar@strucname\expandafter{\reserved@c}}%
    \let\-\@@magyar@save@m
    \let\@@magyar@suffix@at\@@magyar@suffix@st% fix the -t suffix
    \ifx\reserved@b\@empty\else
      \@@magyar@refstruc@splitb#2\vfuzz% strip `+' from the end of #2
    \fi
  \fi
}

\def\@@magyar@refstruc@splitb#1+\vfuzz{%
  \expandafter\@@magyar@told\reserved@c+#1{}% fejezet -> fejezetben
}

%** The +val suffix does not produce the desired result.
%** @param #1 \ref id or with \told
%** (@param #2 1 to prefix with 1\ref{...}.~' in Hungarian order)
%** @example \refstruc{sec:foo}
%** @example \refstruc{sec:foo+as+an}
%** May not touch \reserved@a
\def\@@magyar@refstruc@name#1{%
  \begingroup
  \begingroup
    \@safe@activestrue% so active `:' etc. will work inside \csname...
    \edef\reserved@c{\noexpand\@@magyar@refstruc@namelow
      \expandafter\ifx\csname r@#1\endcsname\relax\relax\else
      \expandafter\noexpand\csname r@#1\endcsname\fi}%
    % ^^^ Dat: would emit `undefined' instead of `\relax' w/o \ifx
  \expandafter\endgroup\reserved@c{#1}%
}

%** @param #1 csname \r@foo:bar
%** @param #2 foo:bar
%** @param #3 1 to prefix with 1\ref{...}.~' in Hungarian order)
\def\@@magyar@refstruc@namelow#1#2#3{%
  \ifx#1\relax
    \@@magyar@refstruc@split#2+\vfuzz#3% ends by +suffix, needs \told
  \else
    \expandafter\@@magyar@refstruc@parse#1..\vfuzz% sets \reserved@a to ref target
    %%\show\reserved@a% first arg of ref, i.e section number, eg. `1.2.3' -- or \relax
    \if\noexpand#30\else
      \begingroup% Dat: \ref might redefine \reserved@a, especially in hyperref.sty
      \@@magyar@refstruc@ref{#2}\endgroup\fi
    \@@magyar@refstruc@work#1%
    \expandafter\@@magyar@strucname\expandafter{\reserved@c}%
  \fi
  \endgroup
}

\def\@@magyar@appendix@chapapp{\appendixname}%

%** Input is \reserved@a, output is \reserved@c
%** @param #1 the control sequence \r@foo:bar
\def\@@magyar@refstruc@work#1{%
  \edef\reserved@a{\expandafter\@@magyar@nonumbers@a\reserved@a\hfuzz}%
  %\expandafter\lowercase\expandafter{\expandafter\def\expandafter\reserved@a\expandafter{\reserved@a}}%
  % ^^^ Dat: don't do lowercasing, deliberately.
  % Imp: referring from \@alph sections such as the appendix
  \@@magyar@refstruc@setcnt{c@part}1
  \@@magyar@refstruc@setcnt{c@chapter}1
  \@@magyar@refstruc@setcnt{c@section}1
  \@@magyar@refstruc@setcnt{c@subsection}1
  \@@magyar@refstruc@setcnt{c@subsubsection}1
  \@@magyar@refstruc@setcnt{c@subsubsubsection}1
  \@@magyar@refstruc@setcnt{c@paragraph}1
  \@@magyar@refstruc@setcnt{c@subparagraph}1
  \@@magyar@refstruc@setcnt{c@subsubparagraph}1
  \let\reserved@c\relax
  \expandafter\@@magyar@refstruc@parsehyname#1....\vfuzz%
  \ifx\reserved@c\relax% hyperref.sty and nameref.sty has helped us
  \def\reserved@c{subsubparagraph}\edef \reserved@b{\csname the\reserved@c\endcsname}\ifx\reserved@a\reserved@b\else
  \def\reserved@c{subparagraph}\edef    \reserved@b{\csname the\reserved@c\endcsname}\ifx\reserved@a\reserved@b\else
  \def\reserved@c{paragraph}\edef       \reserved@b{\csname the\reserved@c\endcsname}\ifx\reserved@a\reserved@b\else
  \def\reserved@c{subsubsubsection}\edef\reserved@b{\csname the\reserved@c\endcsname}\ifx\reserved@a\reserved@b\else
  \def\reserved@c{subsubsection}\edef   \reserved@b{\csname the\reserved@c\endcsname}\ifx\reserved@a\reserved@b\else
  \def\reserved@c{subsection}\edef      \reserved@b{\csname the\reserved@c\endcsname}\ifx\reserved@a\reserved@b\else
  \def\reserved@c{section}\edef         \reserved@b{\csname the\reserved@c\endcsname}\ifx\reserved@a\reserved@b\else
  \def\reserved@c{chapter}\edef         \reserved@b{\csname the\reserved@c\endcsname}\ifx\reserved@a\reserved@b\else
  \def\reserved@c{appendix}\edef        \reserved@b{\expandafter\ifx\csname c@chapter\endcsname\relax\else\@Alph\c@chapter\fi}\ifx\reserved@a\reserved@b\else% Imp: do this without changing counters in \appendix
  \def\reserved@c{part}\edef            \reserved@b{\csname the\reserved@c\endcsname}\ifx\reserved@a\reserved@b\else
  %%\show\@chapapp \show\@@magyar@appendix@chapapp
  \ifx\@chapapp\@@magyar@appendix@chapapp% we're in an appendix referring to a normal chapter
    \def\thechapter{\@arabic\c@chapter}\fi
  \def\reserved@c{subsubparagraph}\edef \reserved@b{\csname the\reserved@c\endcsname}\ifx\reserved@a\reserved@b\else
  \def\reserved@c{subparagraph}\edef    \reserved@b{\csname the\reserved@c\endcsname}\ifx\reserved@a\reserved@b\else
  \def\reserved@c{paragraph}\edef       \reserved@b{\csname the\reserved@c\endcsname}\ifx\reserved@a\reserved@b\else
  \def\reserved@c{subsubsubsection}\edef\reserved@b{\csname the\reserved@c\endcsname}\ifx\reserved@a\reserved@b\else
  \def\reserved@c{subsubsection}\edef   \reserved@b{\csname the\reserved@c\endcsname}\ifx\reserved@a\reserved@b\else
  \def\reserved@c{subsection}\edef      \reserved@b{\csname the\reserved@c\endcsname}\ifx\reserved@a\reserved@b\else
  \def\reserved@c{section}\edef         \reserved@b{\csname the\reserved@c\endcsname}\ifx\reserved@a\reserved@b\else
  \def\reserved@c{chapter}\edef         \reserved@b{\csname the\reserved@c\endcsname}\ifx\reserved@a\reserved@b\else
  %
  \@latex@error{Unknown structure level for ref \string`\reserved@a';
    \reserved@b}\@ehc%
  \def\reserved@c{??}% Dat: must be expandable
  \let\reserved@b\@empty
  \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
}

\def\@@magyar@refstruc@hu#1{\@@magyar@refstruc@name{#1}1}%
% Imp: Undocumented: \refstrucparen can be used instead of \refstruc
% to format the section number inside parentheses.
\def\@@magyar@refstrucparen@hu#1{%
  \begingroup
  \def\@@magyar@refstruc@ref##1{\told(\ref{##1})+es{}~}%
  \@@magyar@refstruc@name{#1}1%
  \endgroup}%
\def\@@magyar@refstruc#1{\@@magyar@refstruc@name{#1}0~\ref{#1}}%
\def\@@magyar@refstrucparen#1{\@@magyar@refstruc@name{#1}0~(\ref{#1})}%

\expandafter\addto\csname extras\CurrentOption\endcsname{%
  \babel@save\@@magyar@refstruc
  \babel@save\@@magyar@strucname
  \let\@@magyar@refstruc \@@magyar@refstruc@hu
  \let\@@magyar@refstrucparen \@@magyar@refstrucparen@hu
  \let\@@magyar@strucname\@@magyar@strucname@hu
}

\ifnum\magyar@opt@@refstruc \expandafter\ifx\csname refstruc\endcsname\relax1\fi>1 % 21, 2, 11, 1
  \DeclareRobustCommand\refstruc{\@@magyar@refstruc}%
  \DeclareRobustCommand\refstrucparen{\@@magyar@refstrucparen}%
\fi
\@gobble
{^}

% --- Printing dates; emitdate=

\ifnum\magyar@opt@@emitdate=0 \@@magyar@skiplong\fi
%** @param #1 1..12 (month number)
\def\@@magyar@month@a#1{\two@digits{#1}}%
\def\@@magyar@month@b#1{\ifcase#1\or janu\'ar\or febru\'ar\or m\'arcius\or
  \'aprilis\or m\'ajus\or j\'unius\or j\'ulius\or augusztus\or szeptember\or
  okt\'ober\or november\or december\fi}%
\def\@@magyar@month@c#1{\ifcase#1\or jan\or feb\or m\'arc\or
  \'apr\or m\'aj\or j\'un\or j\'ul\or aug\or szept\or
  okt\or nov\or dec\fi.\hbox{}}%
\def\@@magyar@month@d#1{\@Roman{#1}}%

\def\@@magyar@four@digits#1{%
  \ifnum#1<10 000\else\ifnum#1<100 00\else\ifnum#1<1000 0\fi\fi\fi\number#1%
}

\def\@@magyar@date@a#1#2#3{#1-\@@magyar@month@a{#2}-\two@digits{#3}}
\def\@@magyar@date@b#1#2#3{#1.~\@@magyar@month@b{#2} \number#3\@@magyar@told@optdot\hbox{}}% Dat: \hbox is to force \frenchspacing
\def\@@magyar@date@c#1#2#3{#1.~\@@magyar@month@c{#2} \number#3\@@magyar@told@optdot\hbox{}}
\def\@@magyar@date@d#1#2#3{#1.~\@@magyar@month@d{#2}.\ \number#3\@@magyar@told@optdot\hbox{}}
\def\@@magyar@date@e#1#2#3{#1.~\@@magyar@month@a{#2}.\ \two@digits{#3}\@@magyar@told@optdot\hbox{}}
\def\@@magyar@date@f#1#2#3{#1.~\@@magyar@month@b{#2}}
\def\@@magyar@date@g#1#2#3{#1.~\@@magyar@month@b{#2} \number#3}% Dat: \told{\@@magyar@date@g{1848}{3}{15}}+e{}
\def\@@magyar@date@h#1#2#3{#1~\@@magyar@month@b{#2}}% Imp: suffixes to months
\def\@@magyar@date@i#1#2#3{#1/\@@magyar@month@a{#2}/\two@digits{#3}}% not Hungarian

\def\@@magyar@parsedate@a#1-#2-#3!#4\hfuzz{% ISO date: YYYY-MM-DD
  \ifx\hfuzz#4\hfuzz\else \ifnum1<1\string#1\relax \ifnum1<1\string#2\relax \ifnum1<1\string#3\relax
  \def\reserved@a{\@@magyar@fixdate{#1}{#2}{#3}}%
  \fi\fi\fi\fi
}
\def\@@magyar@parsedate@b#1/#2/#3!#4\hfuzz{% LaTeX date: YYYY/MM/DD
  \ifx\hfuzz#4\hfuzz\else \ifnum1<1\string#1\relax \ifnum1<1\string#2\relax \ifnum1<1\string#3\relax
  \def\reserved@a{\@@magyar@fixdate{#1}{#2}{#3}}%
  \fi\fi\fi\fi
}
\def\@@magyar@parsedate@c#1.#2.#3!#4\hfuzz{% English date: YYYY.DD.MM
  \ifx\hfuzz#4\hfuzz\else \ifnum1<1\string#1\relax \ifnum1<1\string#2\relax \ifnum1<1\string#3\relax
  \def\reserved@a{\@@magyar@fixdate{#1}{#3}{#2}}%
  \fi\fi\fi\fi
}
\def\@@magyar@mon@jan{1}%
\def\@@magyar@mon@feb{2}%
\def\@@magyar@mon@mar{3}%
\def\@@magyar@mon@apr{4}%
\def\@@magyar@mon@maj{5}%
\def\@@magyar@mon@may{5}% english.ldf
\def\@@magyar@mon@jun{6}%
\def\@@magyar@mon@jul{7}%
\def\@@magyar@mon@aug{8}%
\def\@@magyar@mon@sze{9}%
\def\@@magyar@mon@sep{9}% english.ldf
\def\@@magyar@mon@okt{10}%
\def\@@magyar@mon@oct{10}% english.ldf
\def\@@magyar@mon@nov{11}%
\def\@@magyar@mon@dec{12}%
\def\@@magyar@parsedate@d#1. #2#3#4#5 #6!#7\hfuzz{% {2003. oktober 25} with \catcodes 12 and 10
  \ifx\hfuzz#7\hfuzz\else
    % Dat: now: {#1} is {2003}, {#2#3#4#5} is {oktober}, {#6} is {25}
    \ifnum1<1\string#1\relax \ifnum1<1\string#6\relax
      \lowercase{%
        \expandafter\ifx\csname @@magyar@mon@#2#3#4\endcsname\relax\else
        %%\errmessage{(#1)(#2#3#4)(#6)}%
        \edef\reserved@a{\noexpand\@@magyar@fixdate{\number#1}{\csname @@magyar@mon@#2#3#4\endcsname}{\number#6}}\fi
      }%
  \fi\fi\fi
}
\def\@@magyar@parsedate@e#1#2#3#4 #5, #6!#7\hfuzz{% {October 25, 2003} with \catcodes 12 and 10
  \ifx\hfuzz#7\hfuzz\else
    \ifnum1<1\string#5\relax \ifnum1<1\string#6\relax
      \lowercase{%
        \expandafter\ifx\csname @@magyar@mon@#1#2#3\endcsname\relax\else
        \edef\reserved@a{\noexpand\@@magyar@fixdate{\number#6}{\csname @@magyar@mon@#1#2#3\endcsname}{\number#5}}\fi
      }%
  \fi\fi\fi
}

\def\@@magyar@parsedate@f#1/#2/#3:#4!#5\hfuzz{% LaTeX default \today: YYYY/MM/DD:XX:YY
  \ifx\hfuzz#5\hfuzz\else \ifnum1<1\string#1\relax \ifnum1<1\string#2\relax \ifnum1<1\string#3\relax
  \def\reserved@a{\@@magyar@fixdate{#1}{#2}{#3}}%
  \fi\fi\fi\fi
}

\def\@@magyar@stripdot@lowa#1.\relax{#1\relax}%
\def\@@magyar@stripdot@lowb#1\relax#2\relax{#1}%
%** by pts@fazekas.hu at Sun Jul 27 15:17:57 CEST 2003
%** Expands to #1, with a single optional dot (token `.') at the end removed.
%** @param #1 a token list not containing `\relax' (sic)
\def\@@magyar@stripdot#1{\expandafter\@@magyar@stripdot@lowb\@@magyar@stripdot@lowa#1\relax.\relax}%

%** Definies \reserved@a to {{YYYY}{MM}{DD}} (possibly fewer digits). Parsing
%** is not perfect, but can distinguish between the known formats
%** @param #1 a date in any format, will be expanded
\def\@@magyar@parsedate#1{%
  %\let\@@protect\protect \let\protect\@gobble \afterassignment\restore@protect
  \begingroup
    \def\today{\the\year-\the\month-\the\day}% ISO format
    \let\protect\string
    \let\'\@firstofone% Dat: (j\'unius, janu\'ar, okt\'ober) date won't contain other accents -- I hope
    \let~\space
    % ^^^ change `2003.~okt\'ober 25.' to `2003. oktober 25.'
    \edef\reserved@b{\def\noexpand\reserved@b{#1}}%
  \expandafter\endgroup\reserved@b
  \edef\reserved@b{\expandafter\@@magyar@stripdot\expandafter{\reserved@b}}%
  %%\show\reserved@b\tracingmacros1
  % vvv Wizardry: deep, parsing dates
  \let\reserved@a\@empty \expandafter\@@magyar@parsedate@a\reserved@b!--!\hfuzz
  \ifx\reserved@a\@empty \expandafter\@@magyar@parsedate@f\reserved@b!//:!\hfuzz \fi
  \ifx\reserved@a\@empty \expandafter\@@magyar@parsedate@b\reserved@b!//!\hfuzz \fi
  \ifx\reserved@a\@empty \expandafter\@@magyar@parsedate@c\reserved@b!..!\hfuzz \fi
  \ifx\reserved@a\@empty \expandafter\@@magyar@parsedate@d\reserved@b!. xyz !\hfuzz \fi
  \ifx\reserved@a\@empty \expandafter\@@magyar@parsedate@e\reserved@b!xyz , !\hfuzz \fi
  %%\show\reserved@a
  \ifx\reserved@a\@empty
    \@@magyar@error{Unrecognised date: \reserved@b}%
    %\@@magyar@fixdate{0}{1}{1}}%
    \def\reserved@a{{0}{1}{1} {\noexpand\reset@font\noexpand\bfseries \string?date\string?}}%
  \else
    \reserved@a% calls \@@magyar@fixdate, which sets \reserved@a
  \fi
  %%\show\reserved@a
}%
%** Definies \reserved@a to {{YYYY}{MM}{DD}} (possibly fewer digits)
%** @param #1 year (50..99 += 1900, 0..49 += 2000)
%** @param #2 month (1..12)
%** @param #3 day of month (1..31), validity of 29..31 not verified
\def\@@magyar@fixdate#1#2#3{%
  \edef\reserved@a{\number#1}%
  \ifnum\reserved@a<0   \def\reserved@a{0}\@@magyar@error{Year too small: #1}\else
  \ifnum\reserved@a<10  \edef\reserved@a{200\reserved@a}\else
  \ifnum\reserved@a<50  \edef\reserved@a{20\reserved@a}\else
  \ifnum\reserved@a<100 \edef\reserved@a{19\reserved@a}\else
  \ifnum\reserved@a<10000 \else
                        \def\reserved@a{0}\@@magyar@error{Year too large: #1}%
  \fi\fi\fi\fi\fi
  \ifnum#2<1  \@@magyar@error{Month too small: #2}\fi% Imp: reset to 0?
  \ifnum#2>12 \@@magyar@error{Month too large: #2}\fi
  \ifnum#3<1  \@@magyar@error{Day of month too small: #3}\fi% Imp: reset to 0?
  \ifnum#3>31 \@@magyar@error{Day of month too large: #3}\fi
  \edef\reserved@a{{\reserved@a}{\number#2}{\number#3}}%
}

%** Usage: \magyar@emitdate{FMT}{DATE} or \magyar@emitdate[SUFFIX]{FMT}{DATE}
%** @example [\emitdate{b}{October 25, 2003}]
%** @example %[\emitdate{b}{x-y-z}]% ! Package magyar.ldf Error: Unrecognised date: x-y-z.
%** @example A mai dátum: [\emitdate{b}{\today}].
%** @example [\emitdate[e]{g}{1848.15.3}] a nap, mikor elhangzott a Nemzeti dal.
%** @example [\emitdate{b}{1956-10-23}]
%** @example \told{\@@magyar@date@g{1848}{3}{115}}+a{}
%** @param SUFFIX any suffix for \told, e.g `e' or `adik+an'
%** @param DATE date in any format, will be expanded
%** @param FMT a single letter, specifies the format of the emitted date
%**   a: 1848-03-15 (ISO dátumformátum, 2002-től(?) a magyar helyesírás része)
%**   b: 1848.\ március 15.
%**   c: 1848.\ márc.\ 15.
%**   d: 1848.\ III.\ 15.
%**   e: 1848.\ 03.\ 15.
%**   f: 1848. március közepe
%**   g: 1848. március 15[-e reggele]
%**   h: 1848 március [hónapjának közepe, márciusának közepe, márciusában stb.] birtokos rag
%** english.ldf: `October 25, 2003' or [UK]: `25th October 2003'
\def\@@magyar@emitdate{%
  \@ifnextchar[\@@magyar@emitdate@opt{\@@magyar@emitdate@opt[]}%]
}
\def\@@magyar@emitdate@opt[#1]#2#3{%
  \begingroup
    \@@magyar@parsedate{#3}%
    % Imp: error message if \@@magyar@told is undefined
    %\show\reserved@a
    \edef\reserved@a{%
      \ifx\vfuzz#1\vfuzz            \expandafter\noexpand\csname @@magyar@date@#2\endcsname\reserved@a
      \else \noexpand\@@magyar@told{\expandafter\noexpand\csname @@magyar@date@#2\endcsname\reserved@a}+#1{}\fi
    }%
    %\show\reserved@a
    %%\show~
    %\show\reserved@a% \told {\@@magyar@date@g {1848}{3}{15}}+e{}
    \reserved@a
  \endgroup
}

\ifnum\magyar@opt@@emitdate \expandafter\ifx\csname emitdate\endcsname\relax1\fi>1 % 21, 2, 11, 1
  \let\emitdate\@@magyar@emitdate
\fi
\@gobble
{^}%

% --- titleskip=

\ifx\magyar@opt@@titleskip\magyar@@unchanged
  \def\magyar@opt@@titleskip{\enspace}%  for the appendix with appendixdot=no
\@@magyar@skiplong\fi
  \expandafter\addto\csname extras\CurrentOption\endcsname{\magyar@@seccntfix}%
  \let\magyar@@seccntfix\@empty
  \let\magyar@@default@seccntformat\@seccntformat
  \AtBeginDocument{%
    % vvv \ifx added for compatiblity with other packages redefining \@seccntformat _after_ magyar.ldf has been loaded
    \ifx\@seccntformat\magyar@@default@seccntformat
      % \@seccntformat affects dot after the section number in the main text.
      % We don't change the TOC file, because we've changed \numberline. Also
      % \ps@headings in book.cls already contains a dot.
      \def\magyar@@seccntfix{%
        \ifx\@seccntformat\@gobble\else
          \babel@save\@seccntformat
          \def\@seccntformat##1{\csname the##1\endcsname.\magyar@opt@@titleskip}%
        \fi
      }
    \fi
  }
  \@gobble
{^}%

% --- footnote=

\if0\magyar@opt@@footnote \@@magyar@skiplong\fi
  %** Overrides latex.ltx. Expand old contents of \cl@#2 only once.
  \def\@addtoreset#1#2{%
    \expandafter\xdef\csname theH#1\endcsname{%
      \expandafter\noexpand\csname theH#2\endcsname.%
      \noexpand\the\noexpand\value{#1}}%
    \begingroup
      \edef\reserved@a{\noexpand\@elt{#1}}%
      \expandafter\magyar@fo@consra\csname cl@#2\endcsname\gdef
    \endgroup
  }
  %** Similar to \@cons in latex.ltx
  %** Appends first-level expansion of \reserved@a
  %** @param #1 a \cs
  %** @param #2 \def or \gdef
  \def\magyar@fo@consra{\expandafter\magyar@fo@cons\expandafter{\reserved@a}}%
  %** @param #1 tokens to append
  %** @param #2 a \cs
  %** @param #3 \def or \gdef
  \def\magyar@fo@cons#1#2#3{\expandafter#3\expandafter#2\expandafter{#2#1}}%

  % vvv Dat: \@definecounter can be called twice, \newcounter cannot
  \@definecounter{footnote@add}% \newcounter{footnote@add}
  %** Number of times footnote numbering has been reset
  \@definecounter{footnote@ch}

  \def\magyar@fo@pickzero#1#2#3\hfuzz#4{%
    \ifx\relax#1\else \def#4{{#1}{#2}}\fi% pick {#1}{#2}
  }
  %** Dat: footnotes inside \begin{minipage} are not affected -- intentionally.
  %** Will be called by \stepcounter{...} after `\advance\c@footnote1'
  \def\magyar@fo@resetzero@afterpage{%
    {% { is better \begingroup, because { works in a tabular
    \@tempcnta\c@footnote@add
    \advance\@tempcnta\c@footnote
    \let\reserved@a\@empty% default
    % Dat: we ignore \@roman etc. in \thefootnote
    \expandafter\expandafter\expandafter\magyar@fo@pickzero\csname r@footnote&\the\c@footnote@ch&\the\@tempcnta\endcsname00\hfuzz\reserved@a% this footnote
    \ifx\reserved@a\@empty \G@refundefinedtrue\fi
    %
    \def\magyar@fo@@prevfn{-}% default
    \advance\@tempcnta\m@ne
    \expandafter\expandafter\expandafter\magyar@fo@pickzero\csname r@footnote&\the\c@footnote@ch&\the\@tempcnta\endcsname00\hfuzz\magyar@fo@@prevfn% previous footnote
    \advance\@tempcnta\@ne
    %
    \ifx\reserved@a\magyar@fo@@prevfn\else
      % Restart footnote numbering (from 1) if \label is missing for previous
      % footnote, or \label reports that prev and this footnotes aren't on the
      % same page.
      \global\advance\c@footnote@add\c@footnote
      \global\advance\c@footnote@add\m@ne
      \global\c@footnote\@ne
    \fi
    \def\@currentlabel{\noexpand\number\c@page}%
    % ^^^ Dat: \noexpand is here to make \number\c@page expanded during \shipout
    \ifx\@listdepth\@mplistdepth% inside \begin{minipage}
      % vvv Dat: expand \thepage both early (minipage) and late (real page)
      \edef\@currentlabel{\@currentlabel-\thepage}%
    \fi
    \edef\reserved@a{\noexpand\label{footnote&\the\c@footnote@ch&\the\@tempcnta}}%
    % ^^^ Dat: the \label command above produces correct warning (LaTeX
    %     Warning: Label(s) may have changed. Rerun to get cross-references
    %     right.), and it also produces `LaTeX Warning: There were undefined
    %     references.' in case a footnote is removed or changed, and also for
    %     the very first run. Fine.
    \reserved@a
    }%\endgroup
  }

  \let\magyar@fo@resetzero\relax

  %\magyar@fo@cons{XY}\cl@footnote\gdef
  \magyar@fo@cons{\magyar@fo@resetzero}\cl@footnote\gdef

  %\def\magyar@fo@resetadd{%
  %  \global\advance\c@footnote\c@footnote@add
  %  \global\c@footnote@add\z@
  %}
  \def\magyar@fo@aftergrouprelax#1{%
    \ifx#1\relax\else
      \aftergroup#1%
      \expandafter\magyar@fo@aftergrouprelax
    \fi
  }

  \def\magyar@fo@mtostar#1{%
    \if#1m%
      *\expandafter\magyar@fo@mtostar
    \fi
  }
  %** Producing `m's based on the idea of David Kastrup.
  %** The default `*' character is in raised position, and we also move it to
  %** \@textsuperscript, so it will be double raised. But never mind.
  \def\magyar@fo@thefootnote@stars{\expandafter\magyar@fo@mtostar\romannumeral\number\c@footnote000A}%
  \def\magyar@fo@thefootnote@starsspmax{\ifcase\c@footnote\or*\or**\or***\or\dag\or\dag\dag\or\dag\dag\dag\else*\the\c@footnote\fi}%
  \def\magyar@fo@thefootnote@arabic{\@arabic\c@footnote}
  \def\magyar@fo@thempfootnote@stars{\expandafter\magyar@fo@mtostar\romannumeral\number\c@mpfootnote000 A}%
  \def\magyar@fo@thempfootnote@starsspmax{\ifcase\c@mpfootnote\or*\or**\or***\or\dag\or\dag\dag\or\dag\dag\dag\else*\the\c@mpfootnote\fi}%
  \def\magyar@fo@thempfootnote@arabic{\@arabic\c@mpfootnote}

  % !! indent=article must work within \maketitle for article.cls etc.

  %** Copied from article.cls, added \,.
  \long\def\magyar@fo@indent@articlesp#1{%
    \parindent1em % SUXX: impossible to acquire default value
    % Dat: don't use \@makefnmark here, because it puts the footnote mark
    %      only to the main text
    \noindent\hb@xt@1.8em{\hss\@textsuperscript{\normalfont\@thefnmark\,}}#1%
  }
  %** Same as \@makefntext in article.cls
  \long\def\magyar@fo@indent@articlenosp#1{%
    \parindent1em % SUXX: impossible to acquire default value
    % Dat: don't use \@makefnmark here, because it puts the footnote mark
    %      only to the main text
    \noindent\hb@xt@1.8em{\hss\@textsuperscript{\normalfont\@thefnmark}}#1%
  }
  \def\magyar@@fo@indent@dimensetup{%
    \parindent1em % SUXX: impossible to acquire default value
    %\advance\leftskip1.8em % SUXX: impossible to acquire default value
    \leftskip\leftmargini % SUXX: impossible to acquire default value
  }
  \long\def\magyar@fo@indent@hulist#1{%
    % Dat: superscript is emitted by \@makefnmark
    % Dat: \parindent doesn't apply for the 1st par of the footnote
    \magyar@@fo@indent@dimensetup
    \ifvmode
      \noindent\hb@xt@\z@{\hss\@textsuperscript{\normalfont\@thefnmark\,}}%
    \else
    % ^^^ \usepackage[para]{footmisc} emits footnotes in horizontal mode
      \hbox{\@textsuperscript{\normalfont\@thefnmark\,}}%
    \fi
    #1%
  }

  %** Limit the size of the footnote mark (in main text) to \normalsize.
  %** Overrides latex.ltx
  \def\magyar@fo@makefnmark{%
    \hbox{% has \begingroup
      \edef\reserved@a{\f@size}%
      {\normalsize\edef\reserved@b{\def\noexpand\reserved@b{\f@size}}\expandafter}\reserved@b
      \ifdim\reserved@a pt>\reserved@b pt
           %\normalsize\@textsuperscript{\normalfont\footnotesize\@thefnmark}% Dat: would place index too low
           \@textsuperscript{\normalfont\scriptsize\@thefnmark}%
      \else\@textsuperscript{\normalfont\@thefnmark}\fi
    }%
  }
  \let\magyar@fo@@cont@number\@empty
  \def\magyar@fo@savecont{\global\edef\magyar@fo@@cont@number{\global\c@footnote\the\c@footnote\space}}

  %** \footnoterule, as defined in latex.ltx
  \def\magyar@fo@defaultrule{\kern-3\p@
    \hrule \@width 2in \kern 2.6\p@} % the \hrule is .4pt high
  \def\magyar@fo@fourthrule{\kern-3\p@%\hrule\hrule\hrule
    \hrule \@width .25\textwidth \kern 2.6\p@} % the \hrule is .4pt high
  \def\magyar@fo@onelinerule{%
    \unskip% undo \vskip\skip\footins
    {\normalsize% Dat: \normalfont is superfluous
      \vskip1\baselineskip plus.1\baselineskip minus .1\baselineskip}%
    % ^^^ Dat: plus,minus is necessary to avoid `Overfull \vbox (8.86676pt too high)'
  }
  \def\magyar@fo@chooserule{\relax
    \ifx \@listdepth\@mplistdepth \mpfootnoterule \else
      \ifnum\split@prev=\z@ \pagefootnoterule \else \splitfootnoterule
      \fi
      %%\typeout{\string\split@prev=\split@prev}%
      \xdef\split@prev{\the\insertpenalties}%
    \fi
  }

  % `Szerkesztők és szerzők kézikönyve, p. 116' says this about Hungarian
  % footnotes. Implementation notes are marked with [...]. See better docs
  % in magyarldf-doc.tex
  %
  % (1) Use numbering and/or stars (in upper index) for footnote marks.
  %     Numbering is recommended.
  % [1] Use \footnotestyle{mark=...}
  % (2) You can put footnotes by the editor with a star, and footnotes by the
  %     author with numbers.
  % [2] Use \footnotestyle{huplain} in the preamble, and emit each editorial
  %     footnote with {\footnotestyle{editor}\footnote{Her note.}}
  % (3) Don't put \footnoterule if the footnote starts on current page.
  % [3] Use \footnotestyle{rule=none}. Please make sure that the group lasts
  %     till \shipout.
  % (4) Put a \footnoterule (1/3\textwidth or 1/4\textwidth) if footnote is
  %     continued from previous page.
  % [4] Not supported. Imp: how to?
  % (5) Multiple short footnotes may be put into a single line.
  % [5] \usepackage[para]{footmisc} or \usepackage{fnpara}
  % (6) Footnotes for \begin{figure} and \begin{table} must be put just under
  %     them, not at EOP.
  % [6] The author should enclose the matrial in a \begin{minipage}
  % (7) The size of the \footnotemark should not be scaled up.
  % [7] Use \footnotestyle{marksize=max-normal}
  % (8) It is possible to use either \parindent or \item when starting a
  %     footnote.
  % [8] Use \footnotestyle{indent=hulist}
  % (9) The footnotemark must be followed by a thin space (only at BOP).
  % [9] OK, see \@makefntext
  % (10) Don't emit too much stars. Recommended: * ** *** + ++ +++
  % [10] OK, see \footnoterule{mark=stars-max}. `\dag' is emitted instead
  %      of `+', and `*7' is emitted for the 7th footnote on the page.
  %

  \@namedef{fos@reset=none}{\let\magyar@fo@resetzero\relax}%
  %** Similar to \@addtoreset{footnote}{section}, but isn't \global.
  \@namedef{fos@reset=section}{%
    \let\magyar@fo@resetzero\relax
    \magyar@fo@cons{\@elt{footnote}}\cl@section\def
    \magyar@fo@cons{\@elt{footnote}}\cl@chapter\def
  }%
  \@namedef{fos@reset=chapter}{%
    \let\magyar@fo@resetzero\relax
    \magyar@fo@cons{\@elt{footnote}}\cl@chapter\def
  }%
  %** Next footnote-mark will be `*'. The slots of `*'s of \fos@huplain
  %** were skipped when changing back to \fos@plain. Restarts numbering from
  %** 1 (`*'). Usually called as \footnotestyle{resume,reset=page-cont}
  \@namedef{fos@reset=page}{%
    \stepcounter{footnote@ch}%
    \global\c@footnote@add\z@%
    \global\c@footnote\z@%
    \let\magyar@fo@resetzero\magyar@fo@resetzero@afterpage
    %\aftergroup\magyar@fo@resetadd% switched off deliberately
  }
  %** editorial footnote on the same page
  \@namedef{fos@reset=page-cont}{%
    \aftergroup\magyar@fo@savecont
    \fos@resume% only \aftergroup
    \magyar@fo@@cont@number
    \let\magyar@fo@resetzero\magyar@fo@resetzero@afterpage
  }
  \@namedef{fos@reset=page-resume}{%
    \fos@resume \csname fos@reset=page\endcsname
  }
  %** Resume to the previous footnote number at the end of the group. (Default: don't
  %** resume)
  %** \footnotestyle{resume,reset=page} is the correct order
  \def\fos@resume{%
    \aftergroup\global
    \aftergroup\c@footnote
    \expandafter\magyar@fo@aftergrouprelax\the\c@footnote\relax
    \aftergroup\space
    %\magyar@fo@resetadd% Dat: not needed because \magyar@fo@resetzero@afterpage won't find prev. ref
  }
  %
  \@namedef{fos@indent=article-sp}{\let\@makefntext\magyar@fo@indent@articlesp}%
  \@namedef{fos@indent=article-nosp}{\let\@makefntext\magyar@fo@indent@articlenosp}%
  \@namedef{fos@indent=hulist}{\let\@makefntext\magyar@fo@indent@hulist}%
  %** This is not a 100% solution, because there might be multiple iterations
  %** of \footnoterule with different \split@prev values.
  \@namedef{fos@rule=choose}{% ripped from footmisc.sty
    \ifx\footnoterule\magyar@fo@chooserule
      \let\footnoterule\magyar@fo@defaultrule
    \fi
    \expandafter\ifx\csname  pagefootnoterule\endcsname\relax \let \pagefootnoterule\footnoterule\fi
    \expandafter\ifx\csname    mpfootnoterule\endcsname\relax \let   \mpfootnoterule\footnoterule\fi
    \expandafter\ifx\csname splitfootnoterule\endcsname\relax \let\splitfootnoterule\magyar@fo@fourthrule\fi
    \expandafter\ifx\csname split@prev\endcsname\relax \gdef\split@prev{0}\fi
    % ^^^ Dat: \split@prev is named the same in footmisc.sty
    \let\footnoterule\magyar@fo@chooserule
  }
  \@namedef{fos@rule=none}{\let\footnoterule\@empty}%
  \@namedef{fos@rule=fourth}{\let\footnoterule\magyar@fo@fourthrule}%
  \@namedef{fos@rule=one-line}{\let\footnoterule\magyar@fo@onelinerule}%
  \@namedef{fos@marksize=max-normal}{\let\@makefnmark\magyar@fo@makefnmark}%
  \@namedef{fos@mark=arabic}{\let\thefootnote\magyar@fo@thefootnote@arabic}%
  \@namedef{fos@mark=stars}{\let\thefootnote\magyar@fo@thefootnote@stars}%
  \@namedef{fos@mark=stars-max}{\let\thefootnote\magyar@fo@thefootnote@starsspmax}%
  \@namedef{fos@mpmark=arabic}{\let\thempfootnote\magyar@fo@thempfootnote@arabic}%
  \@namedef{fos@mpmark=stars}{\let\thempfootnote\magyar@fo@thempfootnote@stars}%
  \@namedef{fos@mpmark=stars-max}{\let\thempfootnote\magyar@fo@thempfootnote@starsspmax}%
  %\def\fos@globalmark{\expandafter\global\expandafter\let\csname the\@mpfn\endcsname\endcsname\thefootnote}
  %\def\fos@globalmpmark{\global\let\thempfootnote\thefootnote}

  \def\fos@plain{\csname fos@reset=none\endcsname\csname fos@mark=arabic\endcsname}
  \def\fos@huplain  {\csname fos@marksize=max-normal\endcsname \csname fos@reset=none\endcsname\csname fos@mark=arabic\endcsname\csname fos@rule=none\endcsname\csname fos@indent=hulist\endcsname}
  \def\fos@starplain{\fos@huplain\csname fos@reset=page\endcsname\csname fos@mark=stars-max\endcsname}%
  %\def\fos@editor{\fos@resume\fos@starplain}%
  \def\fos@editor{\fos@huplain\csname fos@reset=page-cont\endcsname\csname fos@mark=stars-max\endcsname}%

  \def\footnotestyle#1{%
    \@for\reserved@a:=#1\do{%
      \@ifundefined{fos@\reserved@a}{\@latex@error{Undefined footnote style: \reserved@a}\@ehc}%
      {\csname fos@\reserved@a\endcsname}%
    }%
  }

  \def\editorfootnote#1{\begingroup\footnotestyle{editor}%
    \footnote{#1}\endgroup}%
  \def\headingfootnote{%
    \ifx\protect\@typeset@protect\expandafter\footnote
    \else\expandafter\@gobble\fi
    % ^^^ Dat: this test is better, because it makes magyar.ldf compatible
    %     with nath.sty that says \def\protect{\noexpand} in its redefinition
    %     of \addtocontents
    %\ifx\protect\@unexpandable@protect\expandafter\@gobble
    %\else\expandafter\footnote\fi
  }

  %** @param #1 an end-csname, example: \endfigure
  \def\magyar@fo@mp@setup#1{%
    \let\@footnotetext\@mpfootnotetext
    \def\@mpfn{mpfootnote}\def\thempfn{\thempfootnote}\c@mpfootnote\z@
    % ^^^ This line is optional, but strongly recommended. Restart numbering
    %     for each float, and number with \thempfootnote.
    % vvv Very tricky use of `#' in expansion.
    % Dat: \magyar@fo@mp@show is idempotent
    % vvv Prepend \magyar@fo@mp@show to the definition of \@makecaption
    \expandafter\def\expandafter\@makecaption\expandafter##\expandafter1%
      \expandafter##\expandafter2\expandafter{\expandafter\magyar@fo@mp@show%
      \@makecaption{##1}{##2}%
    }%
    %%\show\@currenvir
    % vvv Dat: this prepending has only local effect.
    \expandafter\def\expandafter#1\expandafter{%
      \expandafter\magyar@fo@mp@show#1}%
    %\expandafter\magyar@fo@mp@prepend\csname\@currenvir\endcsname
    \setbox\@mpfootins\box\voidb@x
  }
  \def\magyar@fo@mp@show{% ripped from latex.ltx (\endminipage)
    \ifvoid\@mpfootins\else
      \par\unskip \vskip\skip\@mpfootins
      \normalcolor \footnoterule
      \expandafter\ifx\csname mpmakefootnoteparagraph\endcsname\relax
        \unvbox\@mpfootins
      \else% fnpara.sty
        \mpmakefootnoteparagraph
      \fi
    \fi
  }

  %** Only works if \cs of #1 doesn't have macro arguments. It works for
  %** \figure and \table, because their optional argument `[b]' etc. is not
  %** a macro argument.
  %** @example \makeFootnotable{figure}
  %** @example \makeFootnotable{} -- current instance of current environment
  \def\makeFootnotable#1{%
    \if\relax#1\relax
      \expandafter\magyar@fo@mp@setup\csname end\@currenvir\endcsname
    \else
      \expandafter\expandafter\expandafter\magyar@fo@makef@low
      \expandafter\expandafter\csname #1\endcsname
      \csname end#1\endcsname
    \fi
  }
  %** @example \magyar@fo@makef@low\table\endtable
  \def\magyar@fo@makef@low#1#2{\expandafter\def\expandafter#1\expandafter{%
    \expandafter\magyar@fo@mp@setup\expandafter#2#1}}%

  \if2\magyar@opt@@footnote \fos@huplain\fi
  \if3\magyar@opt@@footnote \fos@starplain\fi
  \@gobble
{^}

% --- mathbrk=

\if0\magyar@opt@@mathbrk \@@magyar@skiplong\fi  % mathbrk=define and mathbrk=fix
  % -- Unicode-math friendly helper for mathbrk:
  %    * In LuaTeX, \Umathchar needs 3 values (class+fam+slot), but \Umathcodenum/\the\Umathcode gives a packed integer.
  %      So we must use \Umathcharnum with the packed integer.
  %    * In XeTeX, \the\Umathcode is readable by \Umathchar, so we can use \Umathchar.
  %    * \@@magyar@mathcodenum{<char>} yields a numeric mathcode safely even if
  %      unicode-math assigns an extended value (e.g. '-' -> U+2212).
  %    * \@@magyar@mathchar{<char>} typesets the underlying math symbol of a
  %      character token even if that character becomes active (\mathcode"8000).

  \ifx\XeTeXmathcodenum\undefined
    \ifx\Umathcodenum\undefined
      \def\@@magyar@mathcodenum#1{\the\mathcode`#1}%
    \else
      \def\@@magyar@mathcodenum#1{\number\Umathcodenum`#1}%
    \fi
  \else
    \def\@@magyar@mathcodenum#1{\number\XeTeXmathcodenum`#1}%
  \fi

  \begingroup
    \mathcode`\~="8000\relax
    \xdef\@@magyar@mathcode@active{\@@magyar@mathcodenum{~}}%
  \endgroup
  \ifx\XeTeXmathcharnum\undefined
    \ifx\Umathcharnum\undefined
      \ifx\Umathchar\undefined
        \def\@@magyar@mathchar#1{\mathchar\the\mathcode`#1\relax}%
      \else
        \def\@@magyar@mathchar#1{\Umathchar\the\Umathcode`#1\relax}%
      \fi
    \else
      \def\@@magyar@mathchar#1{\Umathcharnum\number\Umathcodenum`#1\relax}%
    \fi
  \else
    \def\@@magyar@mathchar#1{\XeTeXmathcharnum\number\XeTeXmathcodenum`#1\relax}%
  \fi

  %** Similar to \@@magyar@fixmathcmd@low, but inserts symbol immediately.
  %** @param #1 `\mathchar', all catcodes
  %** @param #2 hex code
  %** @param #3 ignored
  %** @param #4 a \cs
  \def\@@magyar@breakmathcmd@low#1"#2"#3\hfuzz#4{%
    \def\reserved@a{#1}%
    \edef\reserved@b{\string\mathchar}%
    \ifx\reserved@a\reserved@b
      \mathchar"#2
      \ifnum"#2<"8000 % redundant sanity check, trueness implied by #1==\mathchar
	\nobreak\discretionary{}{\hbox{\(\mathchar"#2 \)}}{}%
      \fi
    \fi
  }%
  %** Dat: robustness is tested and works with nath.sty
  %** @param #1 a \cs or char of a MathBin or MathRel, e.g `\prec' or `+'
  \DeclareRobustCommand\MathBrkAll[1]{%
    \ifcat\noexpand#1\relax
      #1%
      \nobreak\discretionary{}{\hbox{\(#1\)}}{}%
    \else
      \ifnum\@@magyar@mathcodenum{#1}=\@@magyar@mathcode@active
        \expandafter\expandafter\expandafter#1% keep original meaning
      \else
	\@@magyar@mathchar{#1}% disable \active meaning
        \nobreak\discretionary{}{\hbox{\(\@@magyar@mathchar{#1}\)}}{}%
      \fi
    \fi
  }

  \let\MathBrk\relax
  \expandafter\addto\csname extras\CurrentOption\endcsname{%
    \babel@save\MathBrk
    \let\MathBrk\MathBrkAll
  }
  \@gobble
{^}

\if2\magyar@opt@@mathbrk\else \@@magyar@skiplong\fi  % mathbrk=fix
  \def\@@magyar@resetmathchars{%
    % Keep unicode-math's own \Umathcode setup (minus, plus, relations etc.).
    % The classic \mathcode resets below are for 8-bit TeX math only.
    \expandafter\ifx\csname ver@unicode-math.sty\endcsname\relax
      \mathcode`+"202B \catcode`+12
      \mathcode`-"2200 \catcode`-12
      \mathcode`*"2203 \catcode`*12
      \mathcode`/"013D \catcode`/12
      \mathcode`>"313E \catcode`>12
      \mathcode`<"313C \catcode`<12
      \mathcode`="303D \catcode`=12
      % vvv Dat: leave these chars intact, for compatibility (with nath.sty and others)
      %\mathcode`:"303A \catcode`:12
      %\mathcode`;"603B \catcode`;12
      %\mathcode`,"613B \catcode`,12
      %\mathcode`!"5021 \catcode`!12
      %\mathcode`?"503F \catcode`?12
      %\mathcode`|"026A \catcode`|12
      %\mathcode`."013A \catcode`.12
    \else
      \catcode`+12 \catcode`-12 \catcode`*12 \catcode`/12
      \catcode`>12 \catcode`<12 \catcode`=12
    \fi
  }
  %** Dat: don't do `/', because slash is unbreakable
  \def\@@magyar@domathbins{%
    \do-\@@magyar@fix@newmcodes@dash
    \do+\do*\do>\do<\do=}%
  %** @param #1 a char token with \mathcode != "8000, like +
  \def\@@magyar@fixmathbinchar#1{%
    \ifnum\@@magyar@mathcodenum{#1}=\@@magyar@mathcode@active \else
      % Dat: \(...\) is safer than `$...$', because \( has a fixed \catcode
      %      that works with and w/o nath.sty
      \begingroup\lccode\string`~\string`#1\lowercase{\endgroup\edef~}{%
	\@@magyar@mathchar{#1}% Dat: would need \space\space
        \noexpand\ifx\noexpand\MathBrk\noexpand\MathBrkAll% Hungarian language is active
          \nobreak\discretionary{}{\hbox{\noexpand\(\@@magyar@mathchar{#1}\noexpand\)}}{}%
        \noexpand\fi}%
      \mathcode`#1"8000
    \fi
    \catcode`#112
  }
  %** \newmcodes@ defined in amsopn.sty doesn't work (triggered by
  %** \DeclareMathOperator{\tg}{tg} $\tg$) because it wants to assign
  %** \mathchardef\std@minus\mathcode`\-, which is "8000, which is a bad
  %** matchar. We fix that by prepending \mathcode`-45 to \newmcodes@ .
  %** This is OK, because \newmcodes@ is protected by a block set up by
  %** \qopname.
  \def\@@magyar@newmcodes@fixed{\mathcode`-"45 \magyar@@newmcodes}%
  \def\@@magyar@fix@newmcodes@dash{%
    \ifx\newmcodes@\@undefined\else
      \ifx\newmcodes@\@@magyar@newmcodes@fixed\else  % Protect against double redefinition such as in \begin{align*}\tg\end{align*}
        \let\magyar@@newmcodes\newmcodes@
        \let\newmcodes@\@@magyar@newmcodes@fixed
      \fi
    \fi
  }%

  %** @param #1 `\mathchar', all catcodes
  %** @param #2 hex code
  %** @param #3 ignored
  %** @param #4 a \cs
  \def\@@magyar@fixmathcmd@low#1"#2"#3\hfuzz#4{%
    % Imp: check \cong and \notin with txfonts and pxfonts. Do they look OK?
    \def\reserved@a{#1}%
    \edef\reserved@b{\string\mathchar}%
    \ifx\reserved@a\reserved@b
      \ifnum"#2<"8000 % redundant sanity check, trueness implied by #1==\mathchar
        % Make #4 robust.
	\edef#4{\noexpand\protect\expandafter\noexpand\csname
          \expandafter\@gobble\string#4 \endcsname}%
	% vvv Imp: \def would be better than \edef?
	\expandafter\edef\csname\expandafter\@gobble\string#4 \endcsname{%
	  % Dat: \mathchar already produces: `! Missing $ inserted.'
	  \mathchar"#2
          \noexpand\ifx\noexpand\MathBrk\noexpand\MathBrkAll% Hungarian language is active
            \nobreak\discretionary{}{\hbox{\noexpand\(\mathchar"#2 \noexpand\)}}{}%
          \noexpand\fi
	}%
      \fi
    \fi
  }%
  %** Works even if #1 is undefined (but consumes hash memory)
  %** @param #1 a \cs of a MathBin or MathRel, e.g \prec
  \def\@@magyar@fixmathcmd#1{%
    \expandafter\@@magyar@fixmathcmd@low\meaning#1""\hfuzz#1%
  }
  % unicode-math defines many relation/operator commands as character tokens
  % ("the character …") or via \Umathchar, so the \meaning-parsing approach
  % in \@@magyar@fixmathcmd cannot detect them.  For unicode-math, wrap the
  % original command and repeat it after a line break.
  \def\@@magyar@fixmathcmd@unicode#1{%
    \ifx#1\@undefined\else
      \expandafter\ifx\csname @@magyar@orig@\expandafter\@gobble\string#1\endcsname\relax
        \expandafter\let\csname @@magyar@orig@\expandafter\@gobble\string#1\endcsname=#1%
        \edef#1{\noexpand\protect\expandafter\noexpand\csname
          \expandafter\@gobble\string#1 \endcsname}%
        \expandafter\edef\csname\expandafter\@gobble\string#1 \endcsname{%
          \expandafter\noexpand\csname @@magyar@orig@\expandafter\@gobble\string#1\endcsname
          \noexpand\ifx\noexpand\MathBrk\noexpand\MathBrkAll
            \noexpand\nobreak\noexpand\discretionary{}%
              {\noexpand\hbox{\noexpand\(%
                \expandafter\noexpand\csname @@magyar@orig@\expandafter\@gobble\string#1\endcsname
              \noexpand\)}}{}%
          \noexpand\fi}%
      \fi
    \fi}%

  \let\@@magyar@domathbins@prefix\@empty
  \def\@@magyar@onmathstart{%
    \@@magyar@resetmathchars
    \let\do\@@magyar@fixmathbinchar
    \@@magyar@domathbins@prefix\@@magyar@domathbins% only in math mode start
  }

  \def\@@magyar@fixeverymathcmds@appendto#1#2{% A generic \appendto.
    \expandafter\def\expandafter#1\expandafter{#1#2}}%
  \def\@@magyar@fixeverymathcmds@setup{%
    \expandafter\ifx\csname mathoptions@on\endcsname\relax% no nath.sty
         \@@magyar@fixeverymathcmds@appendto\check@mathfonts\@@magyar@onmathstart
    \else\@@magyar@fixeverymathcmds@appendto\mathoptions@on\@@magyar@onmathstart\fi
  }

  % The definition of \@tabular contains a $, which calls
  % \@@magyar@domathbins, which has some unintended side effects of changing
  % \catcode values and the meaning of the active character : . This magic
  % prevents the call to \@@magyar@domathbins .
  %
  % Test code: \author{a:b} \maketitle
  % Test code: \def\foo{a:b} \begin{tabular}[t]{c}x\foo y\end{tabular}
  \def\@@magyar@mathbins@tabularfix#1${%
    \def\@@magyar@domathbins@prefix{%
      \let\@@magyar@domathbins@prefix\@empty\@gobble}#1$}%
  \expandafter\expandafter\expandafter\def
  \expandafter\expandafter\expandafter\@tabular
  \expandafter\expandafter\expandafter{%
    \expandafter\@@magyar@mathbins@tabularfix\@tabular}

  \def\@@magyar@fixmathcmds{%
    \expandafter\ifx\csname ver@unicode-math.sty\endcsname\relax
      \let\do\@@magyar@fixmathcmd
    \else
      \let\do\@@magyar@fixmathcmd@unicode
    \fi
    % vvv Binary relations listed in Table 3.4 in lshort.dvi
    \do\leq\do\le\do\ll\do\prec\do\preceq\do\subset\do\subseteq\do\sqsubset
    \do\sqsubseteq\do\in\do\vdash\do\mid\do\smile\do\geq\do\ge\do\gg\do\succ
    \do\succeq\do\supset\do\supseteq\do\sqsupset\do\sqsupseteq\do\ni\do\owns
    \do\dashv\do\parallel\do\frown\do\notin\do\equiv\do\doteq\do\sim\do\simeq
    \do\approx\do\cong\do\Join\do\bowtie\do\propto\do\models\do\perp\do\asymp
    \do\neq\do\ne
    % vvv Binary operators listed in Table 3.5 in lshort.dvi
    %\do\cdot% unbreakable
    \do\pm\do\times\do\cup\do\sqcup\do\vee\do\lor\do\oplus\do\odot\do\otimes
    \do\bigtriangleup\do\lhd\do\unlhd\do\mp\do\div\do\setminus\do\cap\do\sqcap
    \do\wedge\do\land\do\ominus\do\oslash\do\bigcirc\do\bigtriangledown\do\rhd
    \do\unrhd\do\triangleleft\do\triangleright\do\star\do\ast\do\circ\do\bullet
    \do\diamond\do\uplus\do\amalg\do\dagger\do\ddagger\do\wr
    \edef\cdot{\noexpand\protect\csname cdot \endcsname}%
    \expandafter\def\csname cdot \endcsname{\nobreak\mathchar"2201\nobreak}%
    \def\slash{\nobreak/\nobreak}% only in math-mode start, \nobreak
    % ^^^ Dat: \slash is fragile in latex.ltx
  }

  % This fixes \url defined in url.sty, by making \@@magyar@onmathstart a no-op
  % with a URL. This is important because \url defines its own math mode with
  % its own \mathcode and \catcode values, and we don't want mathbrk=fix clash
  % with that.
  \def\@@magyar@mathfixurl{%
    \ifx\Url\@undefined\else
      % Prepend \let\@@magyar@onmathstart\@empty to \Url.
      \expandafter\def\expandafter\Url\expandafter{%
        \expandafter\let\expandafter\@@magyar@onmathstart\expandafter\@empty
        \Url}%
    \fi
  }%

  \AtBeginDocument{%
     \@@magyar@mathfixurl\@@magyar@fixmathcmds\@@magyar@fixeverymathcmds@setup}
  \@gobble
{^}

% --- mathfactorial=

\if0\magyar@opt@@mathfactorial \@@magyar@skiplong\fi
  % Imp: weak define? It doesn't conflict with nath.sty -- yet.
  \def\factorial{\mathchar"5021\mathopen{}\mathinner{}}
  \@gobble
{^}

\if2\magyar@opt@@mathfactorial\else \@@magyar@skiplong\fi
  \expandafter\addto\csname \expandafter\ifx\csname mathoptions@on\endcsname
   \relax check@mathfonts\else mathoptions@on\fi\endcsname{% detect nath.sty
    \catcode`!12 \mathcode`!"8000
    \begingroup\lccode`~`!\lowercase{\endgroup\def~}{\factorial}%
  }
  \@gobble
{^}

% --- mathhucomma=

\if0\magyar@opt@@mathhucomma \@@magyar@skiplong\fi
  %** Dat: works for all catcodes, even for `end group character 5'
  %** Inspired by Donald Aresenau
  %** @param #1 the
  %** @param #2 character
  %** @example The sample in your article would be typed
  %**   \[  F_{i}(x,y) = y^i + 1,3x \qquad x,y \in A,\ i = 1, 2, 3,\ldots \]
  \edef\@@magyar@hucomma@lowa#1#2 #3#4 #5#6\hfuzz{%
    \noexpand\ifnum9<1#5 \noexpand\if#1t\noexpand\if#3c%
    \noexpand\mathord\noexpand\fi\noexpand\fi\noexpand\fi\mathchar
    \ifnum\mathcode`,="8000 "613B \else\the\mathcode`, \space\fi% immed expand
    % Dat: "613B is the punctuation, "013B is ordinary
  }%
  %%\show\@@magyar@hucomma@lowa
  \def\@@magyar@hucomma@lowb{\expandafter\@@magyar@hucomma@lowa\meaning\reserved@a/ / /\hfuzz}%
  %** Put a \mathord, if it is followed by a digit; otherwise put a normal,
  \DeclareRobustCommand\HuComma{\futurelet\reserved@a\@@magyar@hucomma@lowb}
  \@gobble
{^}

\if2\magyar@opt@@mathhucomma\else \@@magyar@skiplong\fi
  % !! into \extrasmagyar
  \expandafter\addto\csname \expandafter\ifx\csname mathoptions@on\endcsname
   \relax check@mathfonts\else mathoptions@on\fi\endcsname{% detect nath.sty
    \catcode`,12 \mathcode`,"8000
    \begingroup\lccode`~`,\lowercase{\endgroup\def~}{\HuComma}%
  }
  \@gobble
{^}

% --- mathmuskips=

\if1\magyar@opt@@mathmuskips% =latex, as defined in latex.ltx
  \thickmuskip 5mu plus 5mu
  \medmuskip   4mu plus 2mu minus 4mu
  \thinmuskip  3mu
\fi
\if2\magyar@opt@@mathmuskips% =hu
  \thickmuskip 4mu plus 2mu minus 4mu
  \medmuskip   2mu plus 1.5mu minus 2mu % \medmuskip<\thinmuskip OK
  \thinmuskip  3mu
\fi

% --- hynumberline=
% by pts@fazekas.hu at Tue Nov 21 00:34:37 CET 2006
%
% hynumberline=hu adds a dot after the section number in the bookmarks/outline
% with \hypersetup{bookmarksnumbered=true} in hyperref.sty.

\if0\magyar@opt@@hynumberline \@@magyar@skiplong\fi
  %** Overrides original definition (\def\Hy@numberline#1{#1 }) in
  %** pdfmark.def.
  %** Also possible with:
  %** \pdfstringdefDisableCommands{\renewcommand*{\numberline}[1]{#1. }}
  \def\@@magyar@@hynumberline@old#1{#1 }% as defined in pdfmark.def
  \def\@@magyar@@hynumberline@hu #1{#1. }%
  \expandafter\addto\csname extras\CurrentOption\endcsname{%
    \ifx  \Hy@numberline\@@magyar@@hynumberline@old
      \let\Hy@numberline\@@magyar@@hynumberline@hu \fi}%
\@gobble
{^}%

% --- mathreal=

\if0\magyar@opt@@mathreal \@@magyar@skiplong\fi
  %** @param #1 a number with a possible decimal digit, e.g `12' or `-12.3'
  \def\@@magyar@mathreal@lowa#1{\ensuremath{\@@magyar@mathreal@lowb#1\@gobble.}}%
  \def\@@magyar@mathreal@lowb#1.{%
    #1%
    \@secondoftwo\@gobble% Wizardry: \@secondoftwo may be \@gobbled by token before `.'
    {\mathchar"013B \@@magyar@mathreal@lowb}%
  }
  \DeclareRobustCommand\@@magyar@mathreal{\ensuremath}%
  \expandafter\expandafter\expandafter\addto
  \expandafter\expandafter\csname extras\CurrentOption\endcsname\expandafter{%
    \expandafter\babel@save\csname @@magyar@mathreal \endcsname
    \expandafter\let\csname @@magyar@mathreal \endcsname \@@magyar@mathreal@lowa}%
  \ifnum\magyar@opt@@mathreal \expandafter\ifx\csname mathreal\endcsname\relax1\fi>1 % 21, 2, 11, 1
    \let\MathReal\@@magyar@mathreal
  \fi
\@gobble
{^}%

% --- \documentclass-specific modifications; classmod=

% Callback which redefines \ps@headings and runs it again if needed, when
% magyar.ldf has an override for the standard \ps@headings, and
% \pagestyle{headings} is active either explictly (e.g. in article.cls) or
% by default (e.g. in book.cls).
\let\@@magyar@setup@psheadings\relax

%** Localized definition which replaces \ps@headings, if appropriate.
\let\@@magyar@overridden@psheadings\@empty

\ifx\magyar@opt@@classmod\relax\@@magyar@skiplong\fi

%** Appends the first-level expansion of argless macro ##2 to ##1.
\def\magyar@letappendto#1#2{%
  \expandafter\expandafter\expandafter\def
    \expandafter\expandafter\expandafter#1%
    \expandafter\expandafter\expandafter{%
    \expandafter#1#2}}%

%** Defines #1 to the concatenation of \partmark ... \subparagraphmark,
%** \oddfoot, \evenfoot, \oddhead, \evenhead.
\def\magyar@mark@fingerprint@def#1{%
  % We have ! here because some macros (such as \partmark) have #1, which
  % gets expanded by \expandafter
  \def#1{markfp: }%
  \ifx\partmark\@undefined
    \expandafter\def\expandafter\reserved@b\expandafter{%
      \expandafter{-partmark}}%
  \else
    \expandafter\def\expandafter\reserved@b\expandafter{%
      \expandafter{\partmark!:partmark}}%
  \fi
  \magyar@letappendto#1\reserved@b
  %
  \ifx\chaptermark\@undefined
    \expandafter\def\expandafter\reserved@b\expandafter{%
      \expandafter{-chaptermark}}%
  \else
    \expandafter\def\expandafter\reserved@b\expandafter{%
      \expandafter{\chaptermark!:chaptermark}}%
  \fi
  \magyar@letappendto#1\reserved@b
  %
  \expandafter\def\expandafter\reserved@b\expandafter{%
    \expandafter{\sectionmark!:sectionmark}}%
  \magyar@letappendto#1\reserved@b
  \expandafter\def\expandafter\reserved@b\expandafter{%
    \expandafter{\subsectionmark!:subsectionmark}}%
  \magyar@letappendto#1\reserved@b
  \expandafter\def\expandafter\reserved@b\expandafter{%
    \expandafter{\paragraphmark!:paragraphmark}}%
  \magyar@letappendto#1\reserved@b
  \expandafter\def\expandafter\reserved@b\expandafter{%
    \expandafter{\subparagraphmark!}}%
  \magyar@letappendto#1\reserved@b
  \expandafter\def\expandafter\reserved@b\expandafter{%
    \expandafter{\@oddfoot!:oddfoot}}%
  \magyar@letappendto#1\reserved@b
  \expandafter\def\expandafter\reserved@b\expandafter{%
    \expandafter{\@evenfoot!:evenfoot}}%
  \magyar@letappendto#1\reserved@b
  \expandafter\def\expandafter\reserved@b\expandafter{%
    \expandafter{\@evenhead!:evenhead}}%
  \magyar@letappendto#1\reserved@b
  \expandafter\def\expandafter\reserved@b\expandafter{%
    \expandafter{\@oddhead!:oddhead}}%
  \magyar@letappendto#1\reserved@b
  % Dat: don't use \@mkboth (\let\@mkboth\markboth)
}%

%** Branches based on whether the \pagestyle has changed since loading the
%** class file.
%** @param #1 class file name, e.g. `book.cls'. Tested with book.cls and
%**    report.cls.
%** @param #2 tokens to insert before fingerprinting the current page style.
%** @param implicit-#3 then-branch
%** @param implicit-#4 else-branch
\def\magyar@if@originalpagestyle#1#2{%
  \begingroup
  % article.cls calls \pagenumbering, which does a \gdef\thepage and
  % \global\c@page=1. We'll cancel that below.
  \let\magyar@@pagestyle@save@thepage\thepage
  \edef\magyar@@pagestyle@save@c@page{\the\c@page\space}
  \edef\magyar@@pagestyle@save@c@tocdepth{\the\c@tocdepth\space}
  % Dat: no \paragraphmark or \subparagraphmark
  % vvv Dat: already defined in latex.ltx
  %\providecommand\sectionmark[1]{\relax}
  %\providecommand\subsectionmark[1]{\relax}
  #2\magyar@mark@fingerprint@def\@@magyar@now@marks
  %
  \def\ProvidesClass##1[##2]{}%
  \def\NeedsTeXFormat##1[##2]{}% avoid ``can be used only in preamble''
  \long\def\DeclareOption##1##2{}%
  \def\ExecuteOptions##1{}%
  \def\ProcessOptions{}%
  \def\DeclareOldFontCommand##1##2##3{}%
  %
  \def\magyar@gobbleopt[##1]{}%
  % Dat: \newcommand etc. are not \global. Good.
  \let\@onlypreamble\@gobble  % In letter.cls .
  \let\newdimen\@gobble
  \let\newif\@gobble
  \let\newskip\@gobble
  \let\newmuskip\@gobble
  \let\newcount\@gobble
  \let\newbox\@gobble
  \let\newtoks\@gobble
  \let\newread\@gobble
  \let\newwrite\@gobble
  \let\newlaunguage\@gobble
  \let\newlength\@gobble
  \def\newcounter##1{\@ifnextchar[\magyar@gobbleopt{}}%
  \def\setcounter##1##2{\@ifundefined{c@##1}{\@nocounterr{##1}}%
      {\csname c@##1\endcsname##2\relax}}
  %** Like \newcommand, but always overrides old values.
  \def\magyar@defcommand{\@star@or@long\magyar@defcommand@low}
  \def\magyar@defcommand@low##1{%
    \begingroup
      \escapechar\m@ne\xdef\@gtempa{\string##1}%
    \endgroup
    \expandafter\let\csname\@gtempa\endcsname\@undefined
    \@star@or@long\new@command##1%
  }%
  \def\newcommand{\magyar@defcommand}%
  \def\renewcommand{\magyar@defcommand}%
  \def\magyar@defenvironment##1{%
    \@ifundefined{##1}{}{%
      \expandafter\let\csname ##1\endcsname\@undefined
      \expandafter\let\csname end##1\endcsname\@undefined
    }%
    \@star@or@long\new@environment{##1}%
  }%
  \def\newenvironment{\magyar@defenvironment}%
  \def\renewenvironment{\magyar@defenvironment}%
  %
  \ps@empty  % Clean \@oddhead as of latex.ltx
  \let\@mkboth\@gobbletwo
  \let\@oddhead\@empty
  \let\@evenhead\@empty
  \let\@oddfoot\@empty
  \let\@evenfoot\@empty
  %
  \def\input##1 {} % size10.clo etc.
  \makeatletter \@@input #1 %
  #2\magyar@mark@fingerprint@def\@@magyar@class@marks
  %\message{AAA \meaning\@@magyar@now@marks}%
  %\message{BBB \meaning\@@magyar@class@marks}%
  \global\let\thepage\magyar@@pagestyle@save@thepage
  \global\c@page\magyar@@pagestyle@save@c@page
  \global\c@tocdepth\magyar@@pagestyle@save@c@tocdepth
  \ifx\@@magyar@now@marks\@@magyar@class@marks
    \endgroup\expandafter\@firstoftwo
  \else
    \endgroup\expandafter\@secondoftwo
  \fi
}

%\begingroup
%\magyar@mark@fingerprint@def\OOO
%\message{OOO \meaning\OOO}%
%\endgroup

%** Branches based on whether the specified \pagestyle is active.
%** @param #1 tokens which change to the \pagestyle specified, e.g.
%**   `\ps@headings'.
%** @param implicit-#2 then-branch
%** @param implicit-#3 else-branch
\def\magyar@if@currentpagestyle#1{%
  \begingroup
  \magyar@mark@fingerprint@def\@@magyar@now@marks
  #1%
  \magyar@mark@fingerprint@def\@@magyar@specified@marks
  \ifx\@@magyar@now@marks\@@magyar@specified@marks
    \endgroup\expandafter\@firstoftwo
  \else
    \endgroup\expandafter\@secondoftwo
  \fi
}

%** Redefine \@@magyar@setup@psheadings for #2.cls.
%** @param #1 is the expanded value of \CurrentOption (`magyar').
\def\magyar@def@psheadings#1#2{%
  \def\@@magyar@setup@psheadings{%
    % SUXX: \show doesn't work here.
    \ifx\@@magyar@overridden@psheadings\ps@headings
      %\@@magyar@error{assert: \string\let\string\ps@headings\string\@@magyar@overridden@psheadings\space was too early}%
    \else\ifx\@@magyar@overridden@psheadings\@empty
      \@@magyar@error{assert: \string\@@magyar@overridden@psheadings\space should be redefined}%
    \else
      \magyar@if@originalpagestyle{#2.cls}{\ps@headings}{%
        % \ps@headings still has its original definition (as of #1.cls).
        %
        % For efficiency reasons, we make the following restriction. If the
        % user does \selectlanguage{...} throughout the document, he should
        % call \pagetsyle{...} after that to make the pagestyle
        % language-dependent.
        %
        % !! add support for \thispagestyle in the preamble.
        % !! don't add this if extras gets cleared.
        \expandafter\addto\csname extras#1\endcsname{%
          \babel@save\ps@headings%
          \babel@save\@oddhead%
          \babel@save\@evenhead%
          \babel@save\@oddfoot%
          \babel@save\@evenfoot%
          \babel@save\@mkboth%
          \babel@save\partmark%
          \babel@save\chaptermark%
          \babel@save\sectionmark%
          \babel@save\subsectionmark%
          \babel@save\paragraphmark%
          \babel@save\subparagraphmark%
          \magyar@if@currentpagestyle{\ps@headings}{%
            \let\ps@headings\@@magyar@overridden@psheadings%
            \ps@headings%
          }{%
            \let\ps@headings\@@magyar@overridden@psheadings%
          }%
        }%
        \magyar@if@currentpagestyle{\ps@headings}{%
          % The current \pagestyle has been selected by the current
          % \ps@headings, i.e. \pagestyle{headings} is active.
          \edef\reserved@a{\languagename}%
          \edef\reserved@a{\expandafter\strip@prefix\meaning\reserved@a}%
          \edef\reserved@b{#1}%
          \edef\reserved@b{\expandafter\strip@prefix\meaning\reserved@b}%
          \ifx\reserved@a\reserved@b
            % Localize the current \pagestyle to Hungarian `headings'.
            \@@magyar@overridden@psheadings
          \fi
        }{}%
      }{}%
    \fi\fi
  }%
}

\def\magyar@ulladik{ulladik0}% [Nn]ulladik, `0' at end is intentional

\def\@@magyar@macro@appendixname{\appendixname}

%** \thechapter (possibly with huordinal), dot, space.
\def\magyar@huordinal@chapterheaddot{%
  \ifx\@chapapp\@@magyar@appendixname \thechapter\hbox{\magyar@opt@@titleskip}% appendixdot=no
  \else\ifx\@chapapp\@@magyar@macro@appendixname \thechapter.~%
  \else\ifnum\magyar@opt@@chapternumber=1 \@huordinal\c@chapter~%
  \else\ifnum\magyar@opt@@chapternumber=2 \@Huordinal\c@chapter~%
  \else \thechapter.~%
  \fi\fi\fi\fi
}

%** \thepart (possibly with huordinal), dot, space.
\def\magyar@huordinal@partheaddot{%
  \ifnum\magyar@opt@@partnumber=1 \@huordinal\c@part~%
  \else\ifnum\magyar@opt@@partnumber=2 \@Huordinal\c@part~%
  \else \thepart.~%
  \fi\fi
}

%** Emits the rule to the running head. Must put something of zero width
%** to the horizontal list.
%** @param #1 0: even page, 1: odd page, 3: page w/o [twoside]
\def\@@magyar@headrule#1{}
\def\@@magyar@slshape{}% running head is not slanted

\ifx\magyar@opt@@classmod\@empty
  \let\@@magyar@ifclassloaded\@ifclassloaded
\else
  \def\@@magyar@ifclassloaded#1#2{% force specific class
    \def\reserved@a{#1}%
    \ifx\reserved@a\magyar@opt@@classmod #2\fi
   }
\fi

\@@magyar@ifclassloaded{amsbook}{%
  \let\magyar@hunumbers@errmsg\@empty
  \let\@@magyar@orig@makechapterhead\@makechapterhead
  \def\@makechapterhead#1{%
    \begingroup
    \let\@@magyar@orig@centerline\centerline
    \def\centerline##1{%
      \@@magyar@orig@centerline{%
        \normalsize\mdseries
        \ifx\chaptername\appendixname  % We're in the appendix.
          \ifx\@@magyar@appendixname\@empty
            % print a dot in the appendix only if appendixdot=yes
            \thechapter.~%
          \else
            \thechapter\hbox{\magyar@opt@@titleskip}%
          \fi
        \else\ifnum\magyar@opt@@chapternumber=1
          \uppercase\@xp{\@huordinal\c@chapter}~%
        \else\ifnum\magyar@opt@@chapternumber=2
          \uppercase\@xp{\@Huordinal\c@chapter}~%
        \else\thechapter.~%
        \fi\fi\fi
        \uppercase\@xp{\chaptername}%
      }%
    }%
    \@@magyar@orig@makechapterhead{#1}%
    \endgroup
  }%
  \let\@@magyar@orig@chapter\@chapter
  \def\@chapter{%
    \let\@@magyar@orig@chapter@typeout\typeout
    \def\typeout##1{%
      % Original: \typeout{\chaptername\space\@secnumber}
      \@@magyar@orig@chapter@typeout{%
        \ifnum\c@secnumdepth<\z@
          \chaptername\space
        \else
          \thechapter\ifx\chaptername\appendixname\else.\fi
          \space\chaptername
        \fi
      }%
      \let\typeout\@@magyar@orig@chapter@typeout
    }%
    \@@magyar@orig@chapter
  }%
  % Just to be sure, no need for this in amsbook.cls 2004/08/06
  \@ifundefined{tocpart}{\let\tocpart\tocsection}{}
  % TODO(pts): Override only parts of \@part
  \def\@part[#1]#2{%
    \ifnum \c@secnumdepth >-2\relax \refstepcounter{part}%
      % TODO(pts): What does \tocpart do for a non-hungarian \tableofcontents?
      \addcontentsline{toc}{part}{\protect\tocpart{\partname}{\thepart}%
          {#1}}%
    \else
      \addcontentsline{toc}{part}{#1}\fi
    \begingroup\centering
    \ifnum \c@secnumdepth >-2\relax
         {\fontsize{\@xviipt}{22}\bfseries
          \ifnum\magyar@opt@@partnumber=1      \@huordinal\c@part~%
          \else\ifnum\magyar@opt@@partnumber=2 \@Huordinal\c@part~%
          \else\thechapter.~%
          \fi\fi
          \partname
         } \vskip 20\p@ \fi
    \fontsize{\@xxpt}{25}\bfseries
        #1\vfil\vfil\endgroup \newpage\thispagestyle{empty}}
}{}

\@@magyar@ifclassloaded{book}{%
  \let\magyar@hunumbers@errmsg\@empty
  % Headings: inserting dots, changing orders
  %\def\@@magyar@appendixname{\appendixname}% by appendixdot=
  \def\@@magyar@overridden@psheadings{%
    \if@twoside
      \let\@oddfoot\@empty\let\@evenfoot\@empty
      \def\@evenhead{\@@magyar@headrule0\thepage\hfil\@@magyar@slshape\leftmark}%
      \def\@oddhead {\@@magyar@headrule1{\@@magyar@slshape\rightmark}\hfil\thepage}%
      \let\@mkboth\markboth
      \def\chaptermark##1{%
	\markboth {\MakeUppercase{%
	  \ifnum \c@secnumdepth >\m@ne
	    \if@mainmatter% Dat: mainmatter only in book.cls, not in report.cls
              \magyar@huordinal@chapterheaddot
	      \@chapapp.\magyar@opt@@hdrtitleskip% \ %
	    \fi
	  \fi
	  ##1}}{}}%
      \def\sectionmark##1{%
	\markright {\MakeUppercase{%
	  \ifnum \c@secnumdepth >\z@
	    \thesection.\magyar@opt@@hdrtitleskip% \ %
	  \fi
	  ##1}}}%
    \else
      \let\@oddfoot\@empty
      \def\@oddhead{\@@magyar@headrule3{\@@magyar@slshape\rightmark}\hfil\thepage}%
      \let\@mkboth\markboth
      \def\chaptermark##1{%
	\markright {\MakeUppercase{%
	  \ifnum \c@secnumdepth >\m@ne
	    \if@mainmatter
               \magyar@huordinal@chapterheaddot
               \@chapapp.\magyar@opt@@hdrtitleskip% \ %
	    \fi
	  \fi
	  ##1}}}%
    \fi
  }%
  \expandafter\magyar@def@psheadings\expandafter{\CurrentOption}{book}%
  % Part: inserting dot, changing order, toc
  \expandafter\addto\csname extras\CurrentOption\endcsname{%
    \babel@save\@part
    \def\@part[#1]#2{% book
        \ifnum \c@secnumdepth >-2\relax
          \refstepcounter{part}%
          \ifnum\magyar@opt@@partnumber>0 \protected@edef\@currentlabel{\@huordinal\c@part}\fi
          \addcontentsline{toc}{part}{\thepart.\hspace{1em}#1}%
        \else
          \addcontentsline{toc}{part}{#1}%
        \fi
        \markboth{}{}%
        {\centering
         \interlinepenalty \@M
         \normalfont
         \ifnum \c@secnumdepth >-2\relax
	   \huge\bfseries \magyar@huordinal@partheaddot\partname% hu
           \csname par\endcsname
           \vskip 20\p@
         \fi
         \Huge \bfseries #2\csname par\endcsname}%
        \@endpart}}
  % Chapter: dot, changing typeout, toc
  \expandafter\addto\csname extras\CurrentOption\endcsname{%
    \babel@save\@chapter
    \def\@chapter[#1]#2{% !! don't \def, but \let, other places, too
      \ifnum \c@secnumdepth >\m@ne
         \if@mainmatter
           \refstepcounter{chapter}%
           \typeout{\thechapter\ifx\@chapapp\@@magyar@appendixname\else.\fi\space\@chapapp.}%
           \ifx\@chapapp\@@magyar@appendixname
             % \@gobble gobbles the dot emitted by \numberline.
             \addcontentsline{toc}{chapter}{\protect\numberline{\thechapter\protect\@gobble}#1}%
           \else
             \addcontentsline{toc}{chapter}{\protect\numberline{\thechapter}#1}%
           \fi
           \ifx\@chapapp\@@magyar@appendix@chapapp\else
             \ifnum\magyar@opt@@chapternumber>0 \protected@edef\@currentlabel{\@huordinal\c@chapter}\fi
           \fi
         \else
           \addcontentsline{toc}{chapter}{#1}%
         \fi
      \else
        \addcontentsline{toc}{chapter}{#1}%
      \fi
      \chaptermark{#1}%
      \addtocontents{lof}{\protect\addvspace{10\p@}}%
      \addtocontents{lot}{\protect\addvspace{10\p@}}%
      \if@twocolumn
        \@topnewpage[\@makechapterhead{#2}]%
      \else
        \@makechapterhead{#2}%
        %\csname par\endcsname
	\@afterheading % Imp: why doesn't it work?
      \fi}}
  \if0\magyar@opt@@chapterhead\else
    % Chapter: dot, changing order
    \expandafter\addto\csname extras\CurrentOption\endcsname{%
      \babel@save\@makechapterhead
      \def\@makechapterhead#1{%
        \vspace*{50\p@}%
        {\parindent \z@ \raggedright \normalfont
          \ifnum \c@secnumdepth >\m@ne
            \if@mainmatter
              \huge\bfseries
              \magyar@huordinal@chapterheaddot \@chapapp{}%
              \csname par\endcsname\nobreak
              \vskip 20\p@
            \fi
          \fi
          \interlinepenalty\@M
          \Huge \bfseries #1\csname par\endcsname\nobreak
          \vskip 40\p@
        }}%
    }%
  \fi
}{}

\@@magyar@ifclassloaded{report}{%
  \let\magyar@hunumbers@errmsg\@empty
  %\def\@@magyar@appendixname{\appendixname}% by appendixdot=
  % Headings: inserting dots, changing orders
  \def\@@magyar@overridden@psheadings{%
    \if@twoside
      \let\@oddfoot\@empty\let\@evenfoot\@empty
      \def\@evenhead{\@@magyar@headrule0\thepage\hfil\@@magyar@slshape\leftmark}%
      \def\@oddhead {\@@magyar@headrule1{\@@magyar@slshape\rightmark}\hfil\thepage}%
      \let\@mkboth\markboth
      \def\chaptermark##1{%
	\markboth {\MakeUppercase{%
	  \ifnum \c@secnumdepth >\m@ne
            \magyar@huordinal@chapterheaddot
	    \@chapapp.\magyar@opt@@hdrtitleskip% \ %
	  \fi
	  ##1}}{}}%
      \def\sectionmark##1{%
	\markright {\MakeUppercase{%
	  \ifnum \c@secnumdepth >\z@
	    \thesection.\magyar@opt@@hdrtitleskip% \ %
	  \fi
	  ##1}}}%
    \else
      \let\@oddfoot\@empty
      \def\@oddhead{%
        \@@magyar@headrule3{\@@magyar@slshape\rightmark}\hfil\thepage}%
      \let\@mkboth\markboth
      \def\chaptermark##1{%
	\markright{\MakeUppercase{%
	  \ifnum \c@secnumdepth >\m@ne
            \magyar@huordinal@chapterheaddot
	    \@chapapp.\magyar@opt@@hdrtitleskip% \ %
	  \fi
	  ##1}}}%
    \fi
  }%
  \expandafter\magyar@def@psheadings\expandafter{\CurrentOption}{report}%
  % Chapter: dot, changing typeout, toc
  % Part...
  \expandafter\addto\csname extras\CurrentOption\endcsname{%
    \babel@save\@chapter
    \def\@chapter[#1]#2{%
      \ifnum \c@secnumdepth >\m@ne
           \refstepcounter{chapter}%
           \typeout{\thechapter\ifx\@chapapp\@@magyar@appendixname\else.\fi\space\@chapapp.}%
           \ifx\@chapapp\@@magyar@appendixname
             % \@gobble gobbles the dot emitted by \numberline.
             \addcontentsline{toc}{chapter}{\protect\numberline{\thechapter\protect\@gobble}#1}%
           \else
             \addcontentsline{toc}{chapter}{\protect\numberline{\thechapter}#1}%
           \fi
           \ifx\@chapapp\@@magyar@appendix@chapapp\else
             \ifnum\magyar@opt@@chapternumber>0 \protected@edef\@currentlabel{\@huordinal\c@chapter}\fi
           \fi
      \else
        \addcontentsline{toc}{chapter}{#1}%
      \fi
      \chaptermark{#1}%
      \addtocontents{lof}{\protect\addvspace{10\p@}}%
      \addtocontents{lot}{\protect\addvspace{10\p@}}%
      \if@twocolumn
        \@topnewpage[\@makechapterhead{#2}]%
      \else
        \@makechapterhead{#2}%
        \@afterheading
      \fi}%
    \babel@save\@part
    \def\@part[#1]#2{% report; added at Fri Jul 23 11:45:57 CEST 2004
      \ifnum \c@secnumdepth >-2\relax
	\refstepcounter{part}%
        \ifnum\magyar@opt@@partnumber>0 \protected@edef\@currentlabel{\@huordinal\c@part}\fi
        \addcontentsline{toc}{part}{\thepart.\hspace{1em}#1}%
      \else
	\addcontentsline{toc}{part}{#1}%
      \fi
	\markboth{}{}% %%%%% \l@chapter in report.cls
	{\centering
	 \interlinepenalty \@M
	 \normalfont
	 \ifnum \c@secnumdepth >-2\relax
	   \huge\bfseries \magyar@huordinal@partheaddot\partname% hu
	   \csname par\endcsname
	   \vskip 20\p@
	 \fi
	 \Huge \bfseries #2\csname par\endcsname}%
	\@endpart}%
  }
  \if0\magyar@opt@@chapterhead\else
    % Chapter: dot, changing order
    \expandafter\addto\csname extras\CurrentOption\endcsname{%
      \babel@save\@makechapterhead
      \def\@makechapterhead#1{%
        \vspace*{50\p@}%
        {\parindent \z@ \raggedright \normalfont
          \ifnum \c@secnumdepth >\m@ne
              \huge\bfseries
	      \magyar@huordinal@chapterheaddot \@chapapp{}%
              \vskip 20\p@
          \fi
          \interlinepenalty\@M
          \Huge \bfseries #1\csname par\endcsname\nobreak
          \vskip 40\p@
        }}%
    }%
  \fi
}{}

\@@magyar@ifclassloaded{article}{%
  % article.cls has no \chapter. We'll hook \part below though.
  \let\magyar@hunumbers@errmsg\@empty
  % Headings: inserting dots
  % In order for this to take effect, \pagestyle{plain} should be put below
  % \begin{document}.
  \def\@@magyar@overridden@psheadings{%
    \if@twoside
        \let\@oddfoot\@empty\let\@evenfoot\@empty
        % Dat: by pts: \slshape -> \relax
        \def\@evenhead{\@@magyar@headrule0\thepage\hfil\@@magyar@slshape\leftmark}%
        \def\@oddhead {\@@magyar@headrule1{\@@magyar@slshape\rightmark}\hfil\thepage}%
        \let\@mkboth\markboth
      \def\sectionmark##1{%
        \markboth {\MakeUppercase{%
          \ifnum \c@secnumdepth >\z@
            \thesection.\magyar@opt@@hdrtitleskip
          \fi
          ##1}}{}}%
      \def\subsectionmark##1{%
        \markright {%
          \ifnum \c@secnumdepth >\@ne
            \thesubsection.\magyar@opt@@hdrtitleskip
          \fi
          ##1}}%
    \else
      \let\@oddfoot\@empty
      \def\@oddhead{\@@magyar@headrule3{\@@magyar@slshape\rightmark}\hfil\thepage}%
      \let\@mkboth\markboth
      \def\sectionmark##1{%
        \markright {\MakeUppercase{%
          \ifnum \c@secnumdepth >\m@ne
            \thesection.\magyar@opt@@hdrtitleskip
          \fi
          ##1}}}
    \fi}%
  \expandafter\magyar@def@psheadings\expandafter{\CurrentOption}{article}%
  \expandafter\addto\csname extras\CurrentOption\endcsname{%
    \babel@save\@part
    \def\@part[#1]#2{% article % added at Fri Jul 23 11:45:57 CEST 2004
      \ifnum \c@secnumdepth >\m@ne
	\refstepcounter{part}%
        \ifnum\magyar@opt@@partnumber>0 \protected@edef\@currentlabel{\@huordinal\c@part}\fi
        \addcontentsline{toc}{part}{\thepart.\hspace{1em}#1}%
      \else
	\addcontentsline{toc}{part}{#1}%
      \fi
      {\parindent \z@ \raggedright
       \interlinepenalty \@M
       \normalfont
       \ifnum \c@secnumdepth >\m@ne
         \Large\bfseries \magyar@huordinal@partheaddot\partname% hu
	 \csname par\endcsname\nobreak
       \fi
       \huge \bfseries #2%
       \markboth{}{}\csname par\endcsname}%
      \nobreak
      \vskip 3ex
      \@afterheading}}%
}{}

\@@magyar@ifclassloaded{letter}{%
  % letter.cls has no \part or \chapter. No need to hook anything here, but
  % we make \magyar@hunumbers@errmsg just to pacify
  % `\PassOptionsToPackage{defaults=prettiest}{magyar.ldf}'.
  \let\magyar@hunumbers@errmsg\@empty
  % Headings: inserting dots
  % In order for this to take effect, \pagestyle{plain} should be put below
  % \begin{document}.
  \def\@@magyar@overridden@psheadings{%
    \if@twoside
        \let\@oddfoot\@empty\let\@evenfoot\@empty
        \def\@oddhead{\@@magyar@headrule3\@@magyar@slshape\headtoname{:} \ignorespaces\toname
                      \hfil \@date
                      \hfil \thepage.~\pagename}%
        \let\@evenhead\@oddhead
    \else
        \let\@oddfoot\@empty
        \def\@oddhead{\@@magyar@headrule3\@@magyar@slshape\headtoname{:} \ignorespaces\toname
                      \hfil \@date
                      \hfil \thepage.~\pagename}%
    \fi}%
  \expandafter\magyar@def@psheadings\expandafter{\CurrentOption}{letter}%
}{}
\@gobble
{^}%

% --- mond=

\if0\magyar@opt@@mond \@@magyar@skiplong\fi
%** Dat: `--\enspace' would be too much
%** Use this in the beginning of the paragraph.
\def\@@magyar@mond{%
  % Dat: \noindent after \subsection in article.cls
  % Dat: \indent after \subsection in amsart.cls (\@noskipsecfalse)
  % vvv Dat: strange: \ifvmode anf \if@noskipsec.
  \ifvmode\if@noskipsec\leavevmode\fi\par\vskip-\parskip
  \else\@noskipsecfalse\par\vskip-\parskip\fi
  \leavevmode--\hbox{ }}
\ifnum\magyar@opt@@mond \expandafter\ifx\csname mond\endcsname\relax1\fi>1 % 21, 2, 11, 1
  \let\mond\@@magyar@mond
\fi
\@gobble
{^}%

% --- hang=

\if0\magyar@opt@@hang \@@magyar@skiplong\fi
%** Usage: \hang{-- } Foo\par
\def\@@magyar@hang#1{%
  \begingroup
  \setbox0\hbox{#1}%
  \advance\linewidth-\wd0 % not \hsize
  \advance\@totalleftmargin\wd0
  \edef\reserved@a{\parshape=1 \the\@totalleftmargin\space\space\the\linewidth\space}%
  \par\noindent\kern-\wd0 \box0 % Dat: \box0 destroys \wd0
  \expandafter\endgroup\expandafter\begingroup\reserved@a
  \let\hang@@par\par
  \def\par{\hang@@par\endgroup}% OK, works even inside \begin{quotation}
  %\def\par{\endgroup\par}% doesn't work, restores \parshape too early
  \ignorespaces
}%
\ifnum\magyar@opt@@hang \expandafter\ifx\csname hang\endcsname\relax1\fi>1 % 21, 2, 11, 1
  \let\hang\@@magyar@hang
\fi
\@gobble
{^}%

% vvv hyphenmins=

\ifx\magyar@opt@@hyphenmins\@empty\else
  \edef\reserved@a{\noexpand\@namedef{\CurrentOption hyphenmins}{\magyar@opt@@hyphenmins}}
  \reserved@a
\fi

% vvv varioref=

\if0\magyar@opt@@varioref \@@magyar@skiplong\fi
\AddToHook{package/varioref/before}{\DeclareOption{hungarian}{\relax}}
\AddBabelHook[\CurrentOption]{set-hu-varioref}{afterextras}{\IfPackageLoadedT{varioref}{\@@magyar@setup@varioref}}
\def\@@magyar@setup@varioref{%
  \def\reftextfaceafter {\reftextvario{a t\'uloldalon}{a k\"ovetkez\H{o} oldalon}}%
  \def\reftextfacebefore{\reftextvario{a t\'uloldalon}{az el\H{o}z\H{o} oldalon}}%
  \def\reftextafter     {a k\"ovetkez\H{o} oldalon}%
  \def\reftextbefore    {az el\H{o}z\H{o} oldalon}%
  \def\reftextcurrent   {ezen az oldalon}%
  \def\reftextfaraway##1{\az{\pageref{##1}}.~oldalon}%
  \def\reftextpagerange##1##2{\az{\pageref{##1}}%
    --\pageref{##2}.~oldalakon}%
  \def\reftextlabelrange##1##2{\told\ref{##1}+tol{}
    \ref{##2}-ig}%
  \let\vrefformat\vrefdefaultformat%
  \let\Vrefformat\Vrefdefaultformat%
  \let\fullrefformat\fullrefdefaultformat%
  \let\vrefrangeformat\magyar@vrefrangeformat%
}
\def\magyar@vrefrangeformat#1#2#3{%
  \begingroup%
  \def\@@magyar@ccheck##1##2\vfuzz##3{%
     \if\noexpand##1c\relax\else\def\reserved@a{c0}\fi}%
  \reftextlabelrange{#2}{#3} \vpagerefrange[{#1}]{#2}{#3}%
  \endgroup%
}
\@gobble
{^}%

% vvv fancyhdr=

\if0\magyar@opt@@fancyhdr \@@magyar@skiplong\fi
\def\@@magyar@ifmainmatter{%
  \csname \ifx\if@mainmatter\@undefined iftrue\else if@mainmatter\fi%
  \endcsname}
\def\@@magyar@setmarks@hu{%
  \@ifundefined{chapter}{%
    \def\sectionmark##1{\markboth{\MakeUppercase{\ifnum \c@secnumdepth>\z@%
      \thesection.\magyar@opt@@hdrtitleskip \fi ##1}}{}}%
    \def\subsectionmark##1{\markright{\ifnum \c@secnumdepth>\@ne%
      \thesubsection.\magyar@opt@@hdrtitleskip \fi ##1}}%
  }{%
    \def\chaptermark##1{%
      \markboth{\MakeUppercase{\ifnum \c@secnumdepth>\m@ne%
        \@@magyar@ifmainmatter%
          \magyar@huordinal@chapterheaddot%
          \@chapapp.\magyar@opt@@hdrtitleskip%
        \fi%
      \fi ##1}}{}}%
    \def\sectionmark##1{\markright{\MakeUppercase{\ifnum \c@secnumdepth>\z@%
      \thesection.\magyar@opt@@hdrtitleskip \fi ##1}}}%
  }%
}
\expandafter\addto\csname extras\CurrentOption\endcsname{%
  \IfPackageLoadedT{fancyhdr}{%
    \babel@save\chaptermark%
    \babel@save\sectionmark%
    \babel@save\subsectionmark%
    \@@magyar@setmarks@hu%
  }%
}
\@gobble
{^}%

% vvv ntheoremfix=

%** Fix for the `! Undefined control sequence. \select' error message with
%** ntheorem.sty
%**
%** The reason for the error is that magyar.ldf emits
%** \select@language{magyar} into .thm files (as well as .toc, .lof, .lot
%** etc. files), and LaTeX cannot read those files without \makeatletter
%** because of the @ in the \select@language command.
%**
%** Our solution: add \makeatletter somewhere before \@input{\jobname.thm} to
%** the macro which reads the .thm file (\thm@processlist) in ntheorem.sty .
\if0\magyar@opt@@ntheoremfix \@@magyar@skiplong\fi
  \def\magyar@@ntheoremfix{%
    \expandafter\ifx\csname ver@ntheorem.sty\endcsname\relax\else
      \ifx\thm@processlist\@undefined\else
        % This doesn't work, because the body of \thm@processlist contains #
        %\expandafter\def\expandafter\thm@processlist\expandafter{%
        %  \expandafter\begingroup\expandafter\makeatletter
        %  \thm@processlist\endgroup}%
        \expandafter\@temptokena\expandafter{%
          \expandafter\begingroup\expandafter\makeatletter
          \thm@processlist\endgroup}%
        \edef\thm@processlist{\the\@temptokena}%
      \fi
    \fi
  }
  \AtBeginDocument{\magyar@@ntheoremfix}
  \@gobble
{^}%

% vvv extras=

\ifnum\magyar@opt@@extras=0
  \expandafter\let\csname extras\CurrentOption\endcsname\@empty
  \expandafter\let\csname noextras\CurrentOption\endcsname\@empty
\fi

% --- Finish

\ldf@finish\CurrentOption
\@@magyar@restcats

\endinput
%%
%% End of file `magyar.ldf'.