-
Notifications
You must be signed in to change notification settings - Fork 6
Open
Description
This is my attempt at an fc-swedish.def. I started with a Python script (at the bottom), which I then converted to LaTeX code that draws heavily on fc-german.def. From my tests it works for numbers 0-99,999 for all genders and for \FCordinal, ordinalnumber, \Ordinalnumber, \ORDINALnumber, \numberstring, \Numberstring, and \NUMBERstring.
My primary concern is that the feminine is default when forming ordinal numbers. Is there some way to change this just for swedish?
Other than that, would you need anything more from me to implement this in the package?
fc-swedish.def
\ProvidesFCLanguage{swedish}[2023/02/09]%
% \FCordinal
\newcommand{\@ordinalMswedish}[2]{%
\edef#2{\number#1\relax:e}%
}%
\global\let\@ordinalMswedish\@ordinalMswedish
\newcommand*\@ordinalFswedish[2]{%
\def\@fc@ord{}%
\@orgargctr=#1\relax
\@ordinalctr=#1%
\@FCmodulo{\@ordinalctr}{100}%
\ifnum\@ordinalctr=11\relax
\def\@fc@ord{:e}%
\else
\ifnum\@ordinalctr=12\relax
\def\@fc@ord{:e}%
\else
\@FCmodulo{\@ordinalctr}{10}%
\ifcase\@ordinalctr
\def\@fc@ord{:e}% case 0
\or \def\@fc@ord{:a}% case 1
\or \def\@fc@ord{:a}% case 2
\else
\def\@fc@ord{:e}% default case
\fi
\fi
\fi
\edef#2{\number#1\relax\noexpand\@fc@ord}%
}%
\global\let\@ordinalFswedish\@ordinalFswedish
\global\let\@ordinalNswedish\@ordinalFswedish
% \numberstring
\newcommand*\@@unitstringMswedish[1]{%
\ifcase#1%
noll%
\or en%
\or tv{\aa}%
\or tre%
\or fyra%
\or fem%
\or sex%
\or sju%
\or {\aa}tta%
\or nio%
\fi
}%
\global\let\@@unitstringMswedish\@@unitstringMswedish
\global\let\@@unitstringFswedish\@@unitstringMswedish
\newcommand*\@@unitstringNswedish[1]{%
\ifcase#1%
noll%
\or ett%
\or tv{\aa}%
\or tre%
\or fyra%
\or fem%
\or sex%
\or sju%
\or {\aa}tta%
\or nio%
\fi
}%
\global\let\@@unitstringNswedish\@@unitstringNswedish
\newcommand*\@@tenstringswedish[1]{%
\ifcase#1%
\or tio%
\or tjugo%
\or trettio%
\or fyrtio%
\or femtio%
\or sextio%
\or sjuttio%
\or {\aa}ttio%
\or nittio%
\or etthundra%
\fi
}%
\global\let\@@tenstringswedish\@@tenstringswedish
\newcommand*\@@teenstringswedish[1]{%
\ifcase#1%
tio%
\or elva%
\or tolv%
\or tretton%
\or fjorton%
\or femton%
\or sexton%
\or sjutton%
\or arton%
\or nitton%
\fi
}%
\global\let\@@teenstringswedish\@@teenstringswedish
\newcommand*\@@numberunderhundredswedish[2]{%
\ifnum#1>99\relax
\PackageError{fmtcount}{Out of range}%
{This submacro should only deal with values less than 100}%
\fi
\ifnum#1<10\relax
\eappto#2{\@unitstring{#1}}%
\else
\ifnum#1<20\relax
\@tmpstrctr=#1\relax
\@FCmodulo{\@tmpstrctr}{10}%
\eappto#2{\@teenstring{\@tmpstrctr}}%
\else
% tens
\@tmpstrctr=#1\relax
\divide\@tmpstrctr by 10\relax
\eappto#2{\@tenstring{\@tmpstrctr}}%
% singles
\@tmpstrctr=#1\relax
\@FCmodulo{\@tmpstrctr}{10}%
\ifnum\@tmpstrctr>0\relax
\eappto#2{\@unitstring{\@tmpstrctr}}%
\fi
\fi
\fi
}%
\global\let\@@numberunderhundredswedish\@@numberunderhundredswedish
\newcommand*\@@numberstringswedish[2]{%
\ifnum#1>99999\relax
\PackageError{fmtcount}{Out of range}%
{This macro only works for values less than 100000}%
\fi
\ifnum#1<0\relax
\PackageError{fmtcount}{Negative numbers not permitted}%
{This macro does not work for negative numbers, however
you can try typing "minus" first, and then pass the modulus of
this number}%
\fi
% Initialize
\def#2{}%
% Thousands
\@strctr=#1\relax
\divide\@strctr by 1000\relax
\ifnum\@strctr>0\relax
\ifnum\@strctr>1\relax% 1,000 shouldn't have three consecutive t's
\let\@tmpunitstring\@unitstring% Temporary store gendered unit string
\let\@unitstring\@@unitstringMswedish% Thousands above 1 are given in "masculine" units (21,000 is "tjugoentusen" and not "tjugoettusen")
\@@numberunderhundredswedish{\@strctr}{#2}%
\let\@unitstring\@tmpunitstring% Restore gendered unit string
\fi
\appto#2{tusen}%
\fi
% Hundreds
\@strctr=#1\relax
\@FCmodulo{\@strctr}{1000}%
\divide\@strctr by 100\relax
\ifnum\@strctr>0\relax
\ifnum\@strctr>1\relax
\eappto#2{\@unitstring{\@strctr}}%
\fi
\appto#2{hundra}%
\fi
% Tens and singles
\@strctr=#1\relax
\@FCmodulo{\@strctr}{100}%
\ifnum\@strctr>0\relax% Trailing zeros are silent
\@@numberunderhundredswedish{\@strctr}{#2}%
\else
\ifnum#1=0\relax% Unless the number is in fact 0
\eappto#2{\@unitstring{\@strctr}}%
\fi
\fi
}%
\global\let\@@numberstringswedish\@@numberstringswedish
\newcommand*{\@numberstringMswedish}[2]{%
\let\@unitstring\@@unitstringMswedish
\let\@teenstring\@@teenstringswedish
\let\@tenstring\@@tenstringswedish
\@@numberstringswedish{#1}{#2}%
}%
\global\let\@numberstringMswedish\@numberstringMswedish
\global\let\@numberstringFswedish\@numberstringMswedish
\newcommand*{\@numberstringNswedish}[2]{%
\let\@unitstring\@@unitstringNswedish
\let\@teenstring\@@teenstringswedish
\let\@tenstring\@@tenstringswedish
\@@numberstringswedish{#1}{#2}%
}%
\newcommand*{\@NumberstringMswedish}[2]{%
\@numberstringMswedish{#1}{\@@num@str}%
\edef#2{\noexpand\MakeUppercase\expandonce\@@num@str}%
}%
\global\let\@NumberstringMswedish\@NumberstringMswedish
\global\let\@NumberstringFswedish\@NumberstringMswedish
\newcommand*{\@NumberstringNswedish}[2]{%
\@numberstringNswedish{#1}{\@@num@str}%
\edef#2{\noexpand\MakeUppercase\expandonce\@@num@str}%
}%
\global\let\@NumberstringNswedish\@NumberstringNswedish
% ordinalstring
\newcommand*\@@unitthstringMswedish[1]{%
\ifcase#1%
nollte%
\or f{\"o}rste%
\or andre%
\or tredje%
\or fj{\"a}rde%
\or femte%
\or sj{\"a}tte%
\or sjunde%
\or {\aa}ttonde%
\or nionde%
\fi
}%
\global\let\@@unitthstringMswedish\@@unitthstringMswedish
\newcommand*\@@unitthstringFswedish[1]{%
\ifcase#1%
nollte%
\or f{\"o}rsta%
\or andra%
\or tredje%
\or fj{\"a}rde%
\or femte%
\or sj{\"a}tte%
\or sjunde%
\or {\aa}ttonde%
\or nionde%
\fi
}%
\global\let\@@unitthstringFswedish\@@unitthstringFswedish
\global\let\@@unitthstringNswedish\@@unitthstringFswedish
\newcommand*\@@tenthstringswedish[1]{%
\ifcase#1%
\or tionde%
\or tjugonde%
\or trettionde%
\or fyrtionde%
\or femtionde%
\or sextionde%
\or sjuttionde%
\or {\aa}ttionde%
\or nittionde%
\fi
}%
\global\let\@@tenthstringswedish\@@tenthstringswedish
\newcommand*\@@teenthstringswedish[1]{%
\ifcase#1%
tionde%
\or elfte%
\or tolfte%
\or trettonde%
\or fjortonde%
\or femtonde%
\or sextonde%
\or sjuttonde%
\or artonde%
\or nittonde%
\fi
}%
\global\let\@@teenthstringswedish\@@teenthstringswedish
\newcommand*\@@numberunderhundredthswedish[2]{%
\ifnum#1<10\relax
\eappto#2{\@unitthstring{#1}}%
\else
\@tmpstrctr=#1\relax
\@FCmodulo{\@tmpstrctr}{10}%
\ifnum#1<20\relax
\eappto#2{\@teenthstring{\@tmpstrctr}}%
\else
\ifnum\@tmpstrctr=0\relax
\@tmpstrctr=#1\relax
\divide\@tmpstrctr by 10\relax
\eappto#2{\@tenthstring{\@tmpstrctr}}%
\else
\@tmpstrctr=#1\relax
\divide\@tmpstrctr by 10\relax
\eappto#2{\@tenstring{\@tmpstrctr}}%
\@tmpstrctr=#1\relax
\@FCmodulo{\@tmpstrctr}{10}%
\eappto#2{\@unitthstring{\@tmpstrctr}}%
\fi
\fi
\fi
}%
\global\let\@@numberunderhundredthswedish\@@numberunderhundredthswedish
\newcommand*\@@ordinalstringswedish[2]{%
\ifnum\@orgargctr>99999\relax
\PackageError{fmtcount}{Out of range}%
{This macro only works for values less than 100000}%
\fi
\ifnum\@orgargctr<0\relax
\PackageError{fmtcount}{Negative numbers not permitted}%
{This macro does not work for negative numbers, however
you can try typing "minus" first, and then pass the modulus of
this number}%
\fi
% Initialize
\def#2{}%
% Thousands
\@strctr=#1\relax
\divide\@strctr by 1000\relax
\ifnum\@strctr>0\relax
\ifnum\@strctr>1\relax
\let\@tmpunitstring\@unitstring% Temporary store gendered unit string
\let\@unitstring\@@unitstringMswedish% Thousands above 1 are given in "masculine" units (21,000 is "tjugoentusen" and not "tjugoettusen")
\@@numberunderhundredswedish{\@strctr}{#2}%
\let\@unitstring\@tmpunitstring% Restore gendered unit string
\fi
\@strctr=#1\relax
\@FCmodulo{\@strctr}{1000}%
\ifnum\@strctr>0\relax
\appto#2{tusen}%
\else
\appto#2{tusende}%
\fi
\fi
% Hundreds
\@strctr=#1
\@FCmodulo{\@strctr}{1000}%
\divide\@strctr by 100\relax
\ifnum\@strctr>0\relax
\ifnum\@strctr>1\relax
\eappto#2{\@unitstring{\@strctr}}%
\fi
\@strctr=#1\relax
\@FCmodulo{\@strctr}{100}%
\ifnum\@strctr>0\relax
\appto#2{hundra}%
\else
\appto#2{hundrade}% Add ordinal suffix
\fi
\fi
% Tens and singles
\@strctr=#1\relax
\@FCmodulo{\@strctr}{100}%
\ifnum\@strctr>0\relax% Trailing zeros are silent
\@@numberunderhundredthswedish{\@strctr}{#2}%
\else
\ifnum#1=0\relax% Unless the number is in fact 0
\eappto#2{\@unitthstring{\@strctr}}%
\fi
\fi
}%
\global\let\@@ordinalstringswedish\@@ordinalstringswedish
\newcommand*{\@ordinalstringMswedish}[2]{%
\let\@unitthstring\@@unitthstringMswedish
\let\@teenthstring\@@teenthstringswedish
\let\@tenthstring\@@tenthstringswedish
\let\@unitstring\@@unitstringMswedish
\let\@teenstring\@@teenstringswedish
\let\@tenstring\@@tenstringswedish
\@@ordinalstringswedish{#1}{#2}%
}%
\global\let\@ordinalstringMswedish\@ordinalstringMswedish
\newcommand*{\@ordinalstringFswedish}[2]{%
\let\@unitthstring\@@unitthstringFswedish
\let\@teenthstring\@@teenthstringswedish
\let\@tenthstring\@@tenthstringswedish
\let\@unitstring\@@unitstringMswedish
\let\@teenstring\@@teenstringswedish
\let\@tenstring\@@tenstringswedish
\@@ordinalstringswedish{#1}{#2}%
}%
\global\let\@ordinalstringFswedish\@ordinalstringFswedish
\global\let\@ordinalstringNswedish\@ordinalstringFswedish
\newcommand*{\@OrdinalstringMswedish}[2]{%
\@ordinalstringMswedish{#1}{\@@num@str}%
\edef#2{\noexpand\MakeUppercase\expandonce\@@num@str}%
}%
\global\let\@OrdinalstringMswedish\@OrdinalstringMswedish
\newcommand*{\@OrdinalstringFswedish}[2]{%
\@ordinalstringFswedish{#1}{\@@num@str}%
\edef#2{\noexpand\MakeUppercase\expandonce\@@num@str}%
}%
\global\let\@OrdinalstringFswedish\@OrdinalstringFswedish
\newcommand*{\@OrdinalstringNswedish}[2]{%
\@ordinalstringNswedish{#1}{\@@num@str}%
\edef#2{\noexpand\MakeUppercase\expandonce\@@num@str}%
}%
\global\let\@OrdinalstringNswedish\@OrdinalstringNswedish
\iffalse Local variables: \fi
\iffalse mode: docTeX \fi
\iffalse End: \fi
\endinputMetadata
Metadata
Assignees
Labels
No labels