%\iffalse % datatool-regions.dtx generated using makedtx version 1.2 (c) Nicola Talbot % Command line args: % -author "Nicola Talbot" % -src "(datatool-[A-Z]{2}\.ldf)\Z=>\1" % -doc "datatool-regions.tex" % -section "chapter" % datatool-regions % Created on 2025/3/1 23:13 %\fi %\iffalse %<*package> %% \CharacterTable %% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z %% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z %% Digits \0\1\2\3\4\5\6\7\8\9 %% Exclamation \! Double quote \" Hash (number) \# %% Dollar \$ Percent \% Ampersand \& %% Acute accent \' Left paren \( Right paren \) %% Asterisk \* Plus \+ Comma \, %% Minus \- Point \. Solidus \/ %% Colon \: Semicolon \; Less than \< %% Equals \= Greater than \> Question mark \? %% Commercial at \@ Left bracket \[ Backslash \\ %% Right bracket \] Circumflex \^ Underscore \_ %% Grave accent \` Left brace \{ Vertical bar \| %% Right brace \} Tilde \~} % %\fi % \iffalse % Doc-Source file to use with LaTeX2e % Copyright (C) 2025 Nicola Talbot, all rights reserved. % \fi % \iffalse %<*driver> % arara: lualatex % arara: makeindex % arara: lualatex \listfiles \documentclass[titlepage=false]{scrreport} \usepackage{doc} \usepackage{fontspec} \usepackage{tcolorbox} \usepackage{siunitx} \usepackage[left=2.5cm,right=2.5cm]{geometry} \usepackage [ locales= { en-AU, en-BE, en-CA, en-FK, en-GB, en-GG, en-GI, en-IE, en-IM, en-JE, en-NZ, en-US, en-ZA }, verbose ] {datatool-base} \setromanfont{Noto Serif} \setsansfont{Noto Sans} \setmonofont{Noto Sans Mono} \CheckSum{0} \newcommand*{\sty}[1]{\textsf{#1}} \newcommand*{\file}[1]{\texorpdfstring{\nolinkurl{#1}}{#1}} \newcommand*{\ldf}[1]{\file{datatool-#1.ldf}} \newcommand*{\csmeta}[3]{\texttt{\cs{#1}}\meta{#2}\texttt{#3}} \newcommand*{\filemeta}[3]{% \texorpdfstring {\nolinkurl{#1}\meta{#2}\nolinkurl{#3}}% {#1<#2>#3}% } \newcommand*{\filemetameta}[5]{% \texorpdfstring {\nolinkurl{#1}\meta{#2}\nolinkurl{#3}\meta{#4}\nolinkurl{#5}}% {#1<#2>#3<#4>#5}% } \newcommand*{\opt}[1]{\textsf{#1}} \newcommand*{\qt}[1]{“#1”} \newcommand*{\setbaseopt}[1]{% \cs{DTLsetup}\allowbreak \texttt{\brackets{\allowbreak#1}}% } \newcommand*{\setlocaleopts}[1]{% \cs{DTLsetLocaleOptions}\allowbreak \texttt{\brackets{\strong{#1}}}\allowbreak \marg{key=val list}% } \newcommand*{\setlocaleopt}[2]{% \cs{DTLsetLocaleOptions}\allowbreak \texttt{\brackets{#1}\allowbreak\brackets{\allowbreak#2}}% } \definecolor{defbackground}{rgb}{1,1,0.75} \newtcolorbox{definition}{colback=defbackground} \newtcolorbox{important}{colback=red!5!white,colframe=red} \tcbuselibrary{documentation} \tcbset{verbatim ignore percent} \RecordChanges \PageIndex \appto\MacroFont{\footnotesize} \title{Region (Numeric) Support for \sty{datatool} v3.0+ Package} \author{Nicola L. C. Talbot} \date{2025-03-01 version 1.0} \begin{document} \DocInput{datatool-regions.dtx} \end{document} % %\fi %\maketitle % %\begin{abstract} %This is the region (numeric) support for the \sty{datatool} package (version %3.0+). The supplied \file{ldf} files need to be installed in %addition to \sty{datatool}. To ensure language support, you will %also need to install the applicable language module (for example, %\sty{datatool-english}). %\end{abstract} % %\tableofcontents % %\chapter{Introduction} %\label{sec:intro} % %This bundle provides language-independent region support files for %\sty{datatool} v3.0+. The files simply need to be installed on \TeX's path. %(They will be ignored if a pre-3.0 version of \sty{datatool} is installed.) %The \sty{datatool-base} package (which is automatically loaded by %\sty{datatool}) uses \sty{tracklang}'s interface for detecting %localisation settings and finding the appropriate files. %If you use \sty{babel} or \sty{polyglossia}, make sure that you %specify the document dialects before the first package to load %\sty{tracklang}. % %\begin{important} %If the chosen document language does not have an associated region, %no region support will be provided. %\end{important} % %For example: %\begin{dispListing} %\usepackage[british]{babel} %\usepackage{datatool-base} %\end{dispListing} %In this case, \opt{british} is associated with region \qt{GB} so %\sty{datatool-base} will load \file{datatool-GB.ldf} if it's on %\TeX's path. % %Alternatively, if you are not using a language package, simply use %the \opt{locales} option. For example: %\begin{dispListing} %\usepackage[locales={en-GB}]{datatool-base} %\end{dispListing} % %The \sty{tracklang} interface doesn't allow the language to be %omitted, but \sty{datatool-base}'s \opt{locales} option will %check for any item in the list that simply consists of two uppercase %letters. If found, the region will be added to any tracked dialects %that don't have a region set. If no dialects have been tracked, %the region will be tracked with the language set to %\opt{und} (undetermined). For example: %\begin{dispListing} %\documentclass{article} %\usepackage[locales={GB}]{datatool-base} %\end{dispListing} %This is equivalent to: %\begin{dispListing} %\usepackage[locales={und-GB}]{datatool-base} %\end{dispListing} %(since no language has been specified). Whereas %\begin{dispListing} %\usepackage[afrikaans,english]{babel} %\usepackage[locales={ZA}]{datatool-base} %\end{dispListing} %will add the region \opt{ZA} to \opt{afrikaans} and \opt{english} %dialects. % %If the language already has a region, or if there are multiple %regions for a particular language, then you will need to %include the language in the tag. For example: %\begin{dispListing} %\usepackage[locales={en-GB,en-IE}]{datatool-base} %\end{dispListing} % %\begin{important} %Bear in mind that if \sty{tracklang} can't determine the %applicable dialect label for the captions hook, the settings may not %be applied when the language changes in multilingual documents. %In this case, you can either load \sty{tracklang} before %\sty{datatool-base} and set up the appropriate mappings or %just add the applicable \texttt{\cs{DTL}\meta{tag}{LocaleHook}} %command to the relevant captions hook. %\end{important} % %Any option that can be passed to \sty{datatool-base} can also be %passed to \sty{datatool} but if \sty{datatool-base} has already been %loaded, it will be too late to use the \opt{locales} option. %For example: %\begin{dispListing} %\usepackage[locales={en-GB}]{datatool} %\end{dispListing} %But not: %\begin{dispListing*}{title={Incorrect!},colframe=red} %\usepackage{datatool-base} %\usepackage[locales={en-GB}]{datatool} %\end{dispListing*} % %If another package that also loads \sty{tracklang} is loaded first, %then \sty{datatool-base} can pick up the settings from that. For %example: %\begin{dispListing} %\usepackage[en-GB]{datetime2} %\usepackage{datatool} %\end{dispListing} % %Supplementary packages provided with \sty{datatool} can also have %the locales provided. For example: %\begin{dispListing} %\usepackage[locales={en-GB}]{datagidx} %\end{dispListing} %As with \sty{datatool}, these supplementary packages internally load %\sty{datatool-base} so if that has already been loaded, then the %localisation support should already have been set. % %\section{Non-Region Specific Settings} % %Some settings are not specific to regions, such as %\opt{currency-symbol-style}. These should be set in \cs{DTLsetup}. %All settings relating to numbers and currency are set within the %\opt{numeric} option and all settings relating to dates and times %are set within the \opt{datetime} option. These settings are %described in the \sty{datatool} user guide. % %For example: %\begin{dispListing} %\DTLsetup{ % numeric = { % region-currency-prefix = smallcaps , % currency-symbol-style = symbol % }, % datetime = { % parse = auto-reformat % } %} %\end{dispListing} % %Note that scientific notation isn't governed by regional styles, but %the value can be encapsulated with \cs{si} (if %\sty{siunitx} has been loaded) with the \opt{auto-reformat} numeric option. %\begin{dispExample} %\DTLsetup{numeric={auto-reformat}} %\DTLparse{\result}{1.5e+3}\result. %(Value: \DTLdatumvalue{\result}.) %\end{dispExample} % %\chapter{Supported Regions} % %Only a limited number of regions are currently supported. % %\section{Region \qt{AU}} %\DTLenLocaleHook %\DTLAULocaleHook % %The \file{datatool-AU.ldf} file provides support for region \qt{AU} %(Australia). This defines the \qt{AUD} currency and sets it as %the default currency. The default number group character is a %comma, and the default decimal character is a dot. % %If there's no caption hook and you have multiple locales, you will %need to set both the language and region hooks. For example, this %document has: %\begin{dispListing} %\DTLenLocaleHook %\DTLAULocaleHook %\end{dispListing} % %\begin{dispExample*}{title={Default Numeric Styles}} %\DTLdecimaltolocale{12345}{\result}\result. %(Value: \DTLdatumvalue{\result}.) % %\DTLdecimaltolocale{12345.678}{\result}\result. %(Value: \DTLdatumvalue{\result}.) % %\DTLdecimaltocurrency{-12345.678}{\result}\result. %(Value: \DTLdatumvalue{\result}.) % %\DTLmul\result{\result}{0.5}\result. %(Value: \DTLdatumvalue{\result}.) %\end{dispExample*} %Remember that date-time parsing needs to be enabled, if required. %\begin{dispExample*}{title={Default Date-Time Styles}} %\DTLsetup{datetime={parse}} %\DTLparse\result{28/2/2025 15:45 AEDT} %String: \result. %Data type: \DTLgetDataTypeName{\DTLdatumtype{\result}}. %Numeric value: \DTLdatumvalue{\result}. % %\ExplSyntaxOn %\datatool_extract_timestamp:NN \result \l_tmpa_tl %Time-stamp: ~ \l_tmpa_tl %\ExplSyntaxOff %\end{dispExample*} % % %Options may be set with \setlocaleopts{AU}. Available options are %listed below. % %\begin{docKey}[AU]{currency-symbol-prefix}{=\meta{boolean}}{initially \opt{false}} %If true, shows the region prefix before the currency symbol if %the \opt{numeric} setting \opt{currency-symbol-style} is not set to \qt{iso}. %The prefix font may be changed to smallcaps or smaller with %\setbaseopt{ numeric = \brackets{ region-currency-prefix = \meta{value} } } %where \meta{value} is \opt{smallcaps} or \opt{smaller}. %\end{docKey} % %\begin{dispExample} %\DTLsetup{numeric={region-currency-prefix=smallcaps}} %\DTLsetLocaleOptions{AU}{currency-symbol-prefix} %\DTLdecimaltocurrency{12345.678}{\result}\result %\end{dispExample} % % %\begin{docKey}[AU]{currency-symbol-position}{=\meta{value}}{initially \opt{before}} %Adjusts the formatting currency style. If \docValue{before}, the %currency symbol is placed before the value. If \docValue{after}, the %currency symbol is placed after the value. %\end{docKey} % %\begin{dispExample} %\DTLsetup{numeric={currency-symbol-style=iso}} %\DTLsetLocaleOptions{AU}{currency-symbol-position=after} %\DTLdecimaltocurrency{12345.678}{\result}\result %\end{dispExample} % %\begin{docKey}[AU]{currency-symbol-sep}{=\meta{value}}{initially \opt{none}} %Sets the separator to use between the currency symbol (not code) and the value. %Permitted values: \docValue{none} (no space), \docValue{thin-space} %(a thin space), \docValue{space} (a normal space), or %\docValue{nbsp} (a non-breaking space). %\end{docKey} % %\begin{dispExample} %\DTLsetLocaleOptions{AU}{currency-symbol-sep=thin-space} %\DTLdecimaltocurrency{12345.678}{\result}\result %\end{dispExample} % %\begin{docKey}[AU]{number-style}{=\meta{setting}}{initially \opt{official}} %Sets the number group and decimal characters. The value may be one %of: \docValue{official} (comma number group and decimal point), or %\docValue{unofficial} (thin space number group and decimal point). %In the case of \docValue{unofficial}, a normal space may also be used %when parsing. %\end{docKey} % %\begin{dispExample} %\DTLsetup{numeric={auto-reformat}} %\DTLsetLocaleOptions{AU}{number-style=unofficial} %\DTLdecimaltocurrency{12345.678}{\result}\result. %(Value: \DTLdatumvalue{\result}.) % %\DTLparse{\result}{\$12 345.678}\result. %(Value: \DTLdatumvalue{\result}.) %\end{dispExample} % %The remaining options relate to dates and times, which are still %experimental. You need to enable date and time parsing with %\setbaseopt{ datetime = \brackets{parse} }. % %\begin{docKey}[AU]{date-style}{=\meta{style}}{initially \opt{mdyyyy}} %Sets the current date style. The value may be one of: %\docValue{dmyyyy} (day month year), \docValue{mdyyyy} (month day year), %\docValue{yyyymd} (year month day), %\docValue{dmyy} (day month 2-digit year), %\docValue{mdyy} (month day 2-digit year), or %\docValue{yymd} (2-digit year month day). %\end{docKey} % %\begin{docKey}[AU]{date-variant}{=\meta{style}}{initially \opt{slash}} %Sets the current numeric date separator. %Allowed values: \docValue{slash} (\code{/}), \docValue{hyphen} %(\code{-}), \docValue{dot} (\code{.}) or %\docValue{dialect} (if the language supports it). %\end{docKey} % %\begin{docKey}[AU]{time-variant}{=\meta{style}}{initially \opt{colon}} %Sets the current numeric time separator. %Allowed values: \docValue{colon} (\code{:}), \docValue{dot} (\code{.}) or %\docValue{dialect} (if the language supports it), %\docValue{dialect-colon} (if the language supports it), or %\docValue{dialect-dot} (if the language supports it). %\end{docKey} % %\begin{dispExample} %\DTLsetup{datetime={parse}} %\DTLsetLocaleOptions{AU}{ % date-style=mdyyyy, % date-variant = dialect, % time-variant = dot %} %\DTLparse\result{February 28, 2025 3.45pm AEDT} %String: \result. %Data type: \DTLgetDataTypeName{\DTLdatumtype{\result}}. %Numeric value: \DTLdatumvalue{\result}. % %\ExplSyntaxOn %\datatool_extract_timestamp:NN \result \l_tmpa_tl %Time-stamp: ~ \l_tmpa_tl %\ExplSyntaxOff %\end{dispExample} % %\begin{docCommand}{datatoolAUSetNumberChars}{} %Hook to switch to AU number group and decimal characters. %\end{docCommand} % %\begin{docCommand}{datatoolAUcurrencyfmt}{} %Used to format the AUD currency. This supports the currency symbol %prefix. %\end{docCommand} % %\begin{docCommand}{DTLAULocaleHook}{} %Hook to switch to AU settings. This may be added to the captions %hook by \sty{datatool-base}, depending on the settings. Otherwise %it can be explicitly used to switch to this region. %\end{docCommand} % %\section{Region \qt{BE}} %\DTLenLocaleHook %\DTLBELocaleHook % %The \file{datatool-BE.ldf} file provides support for region \qt{BE} %(Belgium). This sets \qt{EUR} as the default currency, but number %formatting depends on the language. If no command called %\csmeta{datatool}{lang}{BESetNumberChars} is defined (the applicable %language module would need to provide %\filemeta{datatool-}{lang}{-BE.ldf} that defines this), this will default to a dot %number group separator and a decimal comma. % %For example, a French module would need to include the file %\file{datatool-fr-BE.ldf} which defines %\cs{datatoolfrBESetNumberChars}. %(You can use \file{datatool-en-ZA.ldf} provided with %\sty{datatool-english} as an example.) % %If there's no caption hook and you have multiple locales, you will %need to set the region hook. For example, this document has: %\begin{dispListing} %\DTLBELocaleHook %\end{dispListing} % %\begin{dispExample*}{title={Default Styles}} %\DTLdecimaltolocale{12345}{\result}\result. %(Value: \DTLdatumvalue{\result}.) % %\DTLdecimaltolocale{12345.678}{\result}\result. %(Value: \DTLdatumvalue{\result}.) % %\DTLdecimaltocurrency{-12345.678}{\result}\result. %(Value: \DTLdatumvalue{\result}.) % %\DTLmul\result{\result}{0,5}\result. %(Value: \DTLdatumvalue{\result}.) %\end{dispExample*} %Remember that date-time parsing needs to be enabled, if required. %\begin{dispExample*}{title={Default Date-Time Styles}} %\DTLsetup{datetime={parse}} %\DTLparse\result{28.02.2025 15:45 CET} %String: \result. %Data type: \DTLgetDataTypeName{\DTLdatumtype{\result}}. %Numeric value: \DTLdatumvalue{\result}. % %\ExplSyntaxOn %\datatool_extract_timestamp:NN \result \l_tmpa_tl %Time-stamp: ~ \l_tmpa_tl %\ExplSyntaxOff %\end{dispExample*} % %Options may be set with \setlocaleopts{BE}. Available options are %listed below. % %\begin{docKey}[BE]{currency-symbol-position}{=\meta{value}}{initially \opt{after}} %Adjusts the formatting currency style. If \docValue{before}, the %currency symbol is placed before the value. If \docValue{after}, the %currency symbol is placed after the value. %\end{docKey} % %\begin{dispExample} %\DTLsetup{numeric={currency-symbol-style=iso}} %\DTLsetLocaleOptions{BE}{currency-symbol-position=before} %\DTLdecimaltocurrency{12345.678}{\result}\result %\end{dispExample} % %\begin{docKey}[BE]{currency-symbol-sep}{=\meta{value}}{initially \opt{none}} %Sets the separator to use between the currency symbol (not code) and the value. %Permitted values: \docValue{none} (no space), \docValue{thin-space} %(a thin space), \docValue{space} (a normal space), or %\docValue{nbsp} (a non-breaking space). %\end{docKey} % %\begin{dispExample} %\DTLsetLocaleOptions{BE}{currency-symbol-sep=thin-space} %\DTLdecimaltocurrency{12345.678}{\result}\result %\end{dispExample} % %\begin{docKey}[BE]{number-style}{=\meta{style}}{initially \opt{dialect}} %Sets the number group and decimal characters. The value may be one %of: \docValue{default} (dot number group and decimal comma), %\docValue{dialect} (attempt to use the number style for %the module \meta{lang}-BE, if it's defined, where \meta{lang} is the %current language tag, or fallback on \docValue{default}), or %\docValue{thinspace} (thin space number group and decimal point). %In the case of \docValue{thinspace}, a normal space may also be used %when parsing. %\end{docKey} % %\begin{dispExample} %\DTLsetLocaleOptions{BE}{number-style=thinspace} %\DTLdecimaltocurrency{12345.678}{\result}\result %\end{dispExample} % %The remaining options relate to dates and times, which are still %experimental. You need to enable date and time parsing with %\setbaseopt{ datetime = \brackets{parse} }. % %\begin{docKey}[BE]{date-style}{=\meta{style}}{initially \opt{dmyyyy}} %Sets the current date style. The value may be one of: %\docValue{dmyyyy} (day month year), \docValue{mdyyyy} (month day year), %\docValue{yyyymd} (year month day), %\docValue{dmyy} (day month 2-digit year), %\docValue{mdyy} (month day 2-digit year), or %\docValue{yymd} (2-digit year month day). %\end{docKey} % %\begin{docKey}[BE]{date-variant}{=\meta{style}}{initially \opt{dot}} %Sets the current numeric date separator. %Allowed values: \docValue{slash} (\code{/}), \docValue{hyphen} %(\code{-}), \docValue{dot} (\code{.}) or %\docValue{dialect} (if the language supports it). %\end{docKey} % %\begin{docKey}[BE]{time-variant}{=\meta{style}}{initially \opt{colon}} %Sets the current numeric time separator. %Allowed values: \docValue{colon} (\code{:}), \docValue{dot} (\code{.}) or %\docValue{dialect} (if the language supports it), %\docValue{dialect-colon} (if the language supports it), or %\docValue{dialect-dot} (if the language supports it). %\end{docKey} % %\begin{dispExample} %\DTLsetup{datetime={parse}} %\DTLsetLocaleOptions{BE}{ % date-style=yyyymd, % date-variant = hyphen %} %\DTLparse\result{2025-06-01 15:45 CEST} %String: \result. %Data type: \DTLgetDataTypeName{\DTLdatumtype{\result}}. %Numeric value: \DTLdatumvalue{\result}. % %\ExplSyntaxOn %\datatool_extract_timestamp:NN \result \l_tmpa_tl %Time-stamp: ~ \l_tmpa_tl %\ExplSyntaxOff %\end{dispExample} %\begin{docCommand}{datatoolBESetNumberChars}{} %Hook to switch to BE number group and decimal characters. %\end{docCommand} % %\begin{docCommand}{datatoolBESetCurrency}{} %Hook to switch to the EUR currency, rounding to 2 decimal places, %and redefines \cs{DTLdefaultEURcurrencyfmt} to reflect the %\opt{currency-symbol-position} setting. %\end{docCommand} % %\begin{docCommand}{DTLBELocaleHook}{} %Hook to switch to BE settings. This may be added to the captions %hook by \sty{datatool-base}, depending on the settings. Otherwise %it can be explicitly used to switch to this region. %\end{docCommand} % %\section{Region \qt{CA}} %\DTLenLocaleHook %\DTLenCALocaleHook %\DTLCALocaleHook % %The \file{datatool-CA.ldf} file provides support for region \qt{CA} %(Canada). This supplies the currency (CAD) but number formatting %depends on the language, so this requires specific language \& %region files, which should be provided by the applicable language %module. For example, \sty{datatool-english} provides %\file{datatool-en-CA.ldf}. % %If there's no caption hook and you have multiple locales, you will %need to set both the language and region hooks. For example, this %document has: %\begin{dispListing} %\DTLenLocaleHook %\DTLenCALocaleHook %\DTLCALocaleHook %\end{dispListing} % %\begin{dispExample*}{title={Default Numeric Styles (with English)}} %\DTLdecimaltolocale{12345}{\result}\result. %(Value: \DTLdatumvalue{\result}.) % %\DTLdecimaltolocale{12345.678}{\result}\result. %(Value: \DTLdatumvalue{\result}.) % %\DTLdecimaltocurrency{-12345.678}{\result}\result. %(Value: \DTLdatumvalue{\result}.) % %\DTLmul\result{\result}{0.5}\result. %(Value: \DTLdatumvalue{\result}.) %\end{dispExample*} %Remember that date-time parsing needs to be enabled, if required. %\begin{dispExample*}{title={Default Date-Time Styles}} %\DTLsetup{datetime={parse}} %\DTLparse\result{28/2/2025 15:45 PST} %String: \result. %Data type: \DTLgetDataTypeName{\DTLdatumtype{\result}}. %Numeric value: \DTLdatumvalue{\result}. % %\ExplSyntaxOn %\datatool_extract_timestamp:NN \result \l_tmpa_tl %Time-stamp: ~ \l_tmpa_tl %\ExplSyntaxOff %\end{dispExample*} % % %Options may be set with \setlocaleopts{CA}. Available options are %listed below. % %\begin{docKey}[CA]{currency-symbol-prefix}{=\meta{boolean}}{initially \opt{false}} %If true, shows the region prefix before the currency symbol if %the \opt{numeric} setting \opt{currency-symbol-style} is not set to \qt{iso}. %The prefix font may be changed to smallcaps or smaller with %the base \opt{numeric} option \opt{region-currency-prefix} setting. %\end{docKey} % %For example: %\begin{dispExample} %\DTLsetup{numeric={region-currency-prefix=smallcaps}} %\DTLsetLocaleOptions{CA}{currency-symbol-prefix} %\DTLdecimaltocurrency{12345.678}{\result}\result %\end{dispExample} % %\begin{docKey}[CA]{currency-symbol-position}{=\meta{value}}{initially \opt{before}} %Adjusts the formatting currency style. If \docValue{before}, the %currency symbol is placed before the value. If \docValue{after}, the %currency symbol is placed after the value. %\end{docKey} % %\begin{dispExample} %\DTLsetup{numeric={currency-symbol-style=iso}} %\DTLsetLocaleOptions{CA}{currency-symbol-position=after} %\DTLdecimaltocurrency{12345.678}{\result}\result %\end{dispExample} % %\begin{docKey}[CA]{currency-symbol-sep}{=\meta{value}}{initially \opt{none}} %Sets the separator to use between the currency symbol (not code) and the value. %Permitted values: \docValue{none} (no space), \docValue{thin-space} %(a thin space), \docValue{space} (a normal space), or %\docValue{nbsp} (a non-breaking space). %\end{docKey} % %\begin{dispExample} %\DTLsetLocaleOptions{CA}{currency-symbol-sep=thin-space} %\DTLdecimaltocurrency{12345.678}{\result}\result %\end{dispExample} % %\begin{docKey}[CA]{number-style}{=\meta{style}}{} %This option will attempt to set \opt{number-style}=\meta{style} for %the module \meta{lang}-CA, if it's defined. Where \meta{lang} is the %current language tag. For example, if the current language tag is %\qt{en}, then this will be equivalent to %\setlocaleopt{en-CA}{number-style=\meta{style}}. %\end{docKey} % %For example, if \ldf{en-CA} has been loaded and the current locale %is en-GB: %\begin{dispExample} %\DTLsetLocaleOptions{CA}{number-style=unofficial} %\DTLdecimaltocurrency{12345.678}{\result}\result %\end{dispExample} % %The remaining options relate to dates and times, which are still %experimental. You need to enable date and time parsing with %\setbaseopt{ datetime = \brackets{parse} }. % %\begin{docKey}[CA]{date-style}{=\meta{style}}{initially \opt{yyyymd}} %Sets the current date style. The value may be one of: %\docValue{dmyyyy} (day month year), \docValue{mdyyyy} (month day year), %\docValue{yyyymd} (year month day), %\docValue{dmyy} (day month 2-digit year), %\docValue{mdyy} (month day 2-digit year), or %\docValue{yymd} (2-digit year month day). %\end{docKey} % %\begin{docKey}[CA]{date-variant}{=\meta{style}}{initially \opt{hyphen}} %Sets the current numeric date separator. %Allowed values: \docValue{slash} (\code{/}), \docValue{hyphen} %(\code{-}), \docValue{dot} (\code{.}) or %\docValue{dialect} (if the language supports it). %\end{docKey} % %\begin{docKey}[CA]{time-variant}{=\meta{style}}{initially \opt{colon}} %Sets the current numeric time separator. %Allowed values: \docValue{colon} (\code{:}), \docValue{dot} (\code{.}) or %\docValue{dialect} (if the language supports it), %\docValue{dialect-colon} (if the language supports it), or %\docValue{dialect-dot} (if the language supports it). %\end{docKey} % %\begin{dispExample} %\DTLsetup{datetime={parse}} %\DTLsetLocaleOptions{CA}{ % date-style=dmyyyy, % date-variant = dialect, % time-variant = dot %} %\DTLparse\result{Fri 28th Feb 2025 3.45pm PST} %String: \result. %Data type: \DTLgetDataTypeName{\DTLdatumtype{\result}}. %Numeric value: \DTLdatumvalue{\result}. % %\ExplSyntaxOn %\datatool_extract_timestamp:NN \result \l_tmpa_tl %Time-stamp: ~ \l_tmpa_tl %\ExplSyntaxOff %\end{dispExample} % %\begin{docCommand}{datatoolCASetNumberChars}{} %Hook to switch to CA number group and decimal characters but %requires language support to be enabled as well otherwise it will %simply trigger a warning. %\end{docCommand} % %\begin{docCommand}{datatoolCAcurrencyfmt}{} %Used to format the CAD currency. This supports the currency symbol %prefix. %\end{docCommand} % %\begin{docCommand}{DTLCALocaleHook}{} %Hook to switch to CA settings. This may be added to the captions %hook by \sty{datatool-base}, depending on the settings. Otherwise %it can be explicitly used to switch to this region. %\end{docCommand} % %\section{Region \qt{FK}} %\DTLenLocaleHook %\DTLFKLocaleHook % %The \file{datatool-FK.ldf} file provides support for region \qt{FK} %(Falkland Islands). This defines the \qt{FKP} currency and sets it as %the default currency. The default number group character is a %comma, and the default decimal character is a dot. % %If there's no caption hook and you have multiple locales, you will %need to set both the language and region hooks. For example, this %document has: %\begin{dispListing} %\DTLenLocaleHook %\DTLFKLocaleHook %\end{dispListing} % %\begin{dispExample*}{title={Default Numeric Styles}} %\DTLdecimaltolocale{12345}{\result}\result. %(Value: \DTLdatumvalue{\result}.) % %\DTLdecimaltolocale{12345.678}{\result}\result. %(Value: \DTLdatumvalue{\result}.) % %\DTLdecimaltocurrency{-12345.678}{\result}\result. %(Value: \DTLdatumvalue{\result}.) % %\DTLmul\result{\result}{0.5}\result. %(Value: \DTLdatumvalue{\result}.) %\end{dispExample*} %Remember that date-time parsing needs to be enabled, if required. %\begin{dispExample*}{title={Default Date-Time Styles}} %\DTLsetup{datetime={parse}} %\DTLparse\result{28/2/2025 15:45 PST} %String: \result. %Data type: \DTLgetDataTypeName{\DTLdatumtype{\result}}. %Numeric value: \DTLdatumvalue{\result}. % %\ExplSyntaxOn %\datatool_extract_timestamp:NN \result \l_tmpa_tl %Time-stamp: ~ \l_tmpa_tl %\ExplSyntaxOff %\end{dispExample*} % %Options may be set with \setlocaleopts{FK}. Available options are %listed below. % %\begin{docKey}[FK]{currency-symbol-prefix}{=\meta{boolean}}{initially \opt{false}} %If true, shows the region prefix before the currency symbol if %the \opt{numeric} setting \opt{currency-symbol-style} is not set to \qt{iso}. %The prefix font may be changed to smallcaps or smaller with %\setbaseopt{ numeric = \brackets{ region-currency-prefix = \meta{value} } } %where \meta{value} is \opt{smallcaps} or \opt{smaller}. %\end{docKey} % %\begin{dispExample} %\DTLsetup{numeric={region-currency-prefix=smallcaps}} %\DTLsetLocaleOptions{FK}{currency-symbol-prefix} %\DTLdecimaltocurrency{12345.678}{\result}\result %\end{dispExample} % % %\begin{docKey}[FK]{currency-symbol-position}{=\meta{value}}{initially \opt{before}} %Adjusts the formatting currency style. If \docValue{before}, the %currency symbol is placed before the value. If \docValue{after}, the %currency symbol is placed after the value. %\end{docKey} % %\begin{dispExample} %\DTLsetup{numeric={currency-symbol-style=iso}} %\DTLsetLocaleOptions{FK}{currency-symbol-position=after} %\DTLdecimaltocurrency{12345.678}{\result}\result %\end{dispExample} % %\begin{docKey}[FK]{currency-symbol-sep}{=\meta{value}}{initially \opt{none}} %Sets the separator to use between the currency symbol (not code) and the value. %Permitted values: \docValue{none} (no space), \docValue{thin-space} %(a thin space), \docValue{space} (a normal space), or %\docValue{nbsp} (a non-breaking space). %\end{docKey} % %\begin{dispExample} %\DTLsetLocaleOptions{FK}{currency-symbol-sep=thin-space} %\DTLdecimaltocurrency{12345.678}{\result}\result %\end{dispExample} % %\begin{docKey}[FK]{number-style}{=\meta{setting}}{initially \opt{official}} %Sets the number group and decimal characters. The value may be one %of: \docValue{official} (comma number group and decimal point) or %\docValue{unofficial} (thin space number group and decimal point). %In the case of \docValue{unofficial}, a normal space may also be used %when parsing. %\end{docKey} % %\begin{dispExample} %\DTLsetup{numeric={auto-reformat}} %\DTLsetLocaleOptions{FK}{number-style=unofficial} %\DTLdecimaltocurrency{12345.678}{\result}\result. %(Value: \DTLdatumvalue{\result}.) % %\DTLparse{\result}{£12 345.678}\result. %(Value: \DTLdatumvalue{\result}.) %\end{dispExample} % %The remaining options relate to dates and times, which are still %experimental. You need to enable date and time parsing with %\setbaseopt{ datetime = \brackets{parse} }. % %\begin{docKey}[FK]{date-style}{=\meta{style}}{initially \opt{dmyyyy}} %Sets the current date style. The value may be one of: %\docValue{dmyyyy} (day month year), \docValue{mdyyyy} (month day year), %\docValue{yyyymd} (year month day), %\docValue{dmyy} (day month 2-digit year), %\docValue{mdyy} (month day 2-digit year), or %\docValue{yymd} (2-digit year month day). %\end{docKey} % %\begin{docKey}[FK]{date-variant}{=\meta{style}}{initially \opt{slash}} %Sets the current numeric date separator. %Allowed values: \docValue{slash} (\code{/}), \docValue{hyphen} %(\code{-}), \docValue{dot} (\code{.}) or %\docValue{dialect} (if the language supports it). %\end{docKey} % %\begin{docKey}[FK]{time-variant}{=\meta{style}}{initially \opt{colon}} %Sets the current numeric time separator. %Allowed values: \docValue{colon} (\code{:}), \docValue{dot} (\code{.}) or %\docValue{dialect} (if the language supports it), %\docValue{dialect-colon} (if the language supports it), or %\docValue{dialect-dot} (if the language supports it). %\end{docKey} % %\begin{dispExample} %\DTLsetup{datetime={parse}} %\DTLsetLocaleOptions{FK}{ % date-style=dmyyyy, % date-variant = dialect, % time-variant = dot %} %\DTLparse\result{Fri 28th Feb 2025 3.45pm FKST} %String: \result. %Data type: \DTLgetDataTypeName{\DTLdatumtype{\result}}. %Numeric value: \DTLdatumvalue{\result}. % %\ExplSyntaxOn %\datatool_extract_timestamp:NN \result \l_tmpa_tl %Time-stamp: ~ \l_tmpa_tl %\ExplSyntaxOff %\end{dispExample} % %\begin{docCommand}{datatoolFKSetNumberChars}{} %Hook to switch to FK number group and decimal characters. %\end{docCommand} % %\begin{docCommand}{datatoolFKcurrencyfmt}{} %Used to format the FKP currency. This supports the currency symbol %prefix. %\end{docCommand} % %\begin{docCommand}{DTLFKLocaleHook}{} %Hook to switch to FK settings. This may be added to the captions %hook by \sty{datatool-base}, depending on the settings. Otherwise %it can be explicitly used to switch to this region. %\end{docCommand} % %\section{Region \qt{GB}} %\DTLenLocaleHook %\DTLGBLocaleHook % %The \file{datatool-GB.ldf} file provides support for region \qt{GB} %(United Kingdom). This defines the \qt{GBP} currency and sets it as %the default currency. The default number group character is a %comma, and the default decimal character is a dot. % %If there's no caption hook and you have multiple locales, you will %need to set both the language and region hooks. For example, this %document has: %\begin{dispListing} %\DTLenLocaleHook %\DTLGBLocaleHook %\end{dispListing} % %\begin{dispExample*}{title={Default Numeric Styles}} %\DTLdecimaltolocale{12345}{\result}\result. %(Value: \DTLdatumvalue{\result}.) % %\DTLdecimaltolocale{12345.678}{\result}\result. %(Value: \DTLdatumvalue{\result}.) % %\DTLdecimaltocurrency{-12345.678}{\result}\result. %(Value: \DTLdatumvalue{\result}.) % %\DTLmul\result{\result}{0.5}\result. %(Value: \DTLdatumvalue{\result}.) %\end{dispExample*} %Remember that date-time parsing needs to be enabled, if required. %\begin{dispExample*}{title={Default Date-Time Styles}} %\DTLsetup{datetime={parse}} %\DTLparse\result{28/2/2025 15:45 GMT} %String: \result. %Data type: \DTLgetDataTypeName{\DTLdatumtype{\result}}. %Numeric value: \DTLdatumvalue{\result}. % %\ExplSyntaxOn %\datatool_extract_timestamp:NN \result \l_tmpa_tl %Time-stamp: ~ \l_tmpa_tl %\ExplSyntaxOff %\end{dispExample*} % %Options may be set with \setlocaleopts{GB}. Available options are %listed below. % %\begin{docKey}[GB]{currency-symbol-prefix}{=\meta{boolean}}{initially \opt{false}} %If true, shows the region prefix before the currency symbol if %the \opt{numeric} setting \opt{currency-symbol-style} is not set to \qt{iso}. %The prefix font may be changed to smallcaps or smaller with %\setbaseopt{ numeric = \brackets{ region-currency-prefix = \meta{value} } } %where \meta{value} is \opt{smallcaps} or \opt{smaller}. %\end{docKey} % %\begin{dispExample} %\DTLsetup{numeric={region-currency-prefix=smallcaps}} %\DTLsetLocaleOptions{GB}{currency-symbol-prefix} %\DTLdecimaltocurrency{12345.678}{\result}\result %\end{dispExample} % % %\begin{docKey}[GB]{currency-symbol-position}{=\meta{value}}{initially \opt{before}} %Adjusts the formatting currency style. If \docValue{before}, the %currency symbol is placed before the value. If \docValue{after}, the %currency symbol is placed after the value. %\end{docKey} % %\begin{dispExample} %\DTLsetup{numeric={currency-symbol-style=iso}} %\DTLsetLocaleOptions{GB}{currency-symbol-position=after} %\DTLdecimaltocurrency{12345.678}{\result}\result %\end{dispExample} % %\begin{docKey}[GB]{currency-symbol-sep}{=\meta{value}}{initially \opt{none}} %Sets the separator to use between the currency symbol (not code) and the value. %Permitted values: \docValue{none} (no space), \docValue{thin-space} %(a thin space), \docValue{space} (a normal space), or %\docValue{nbsp} (a non-breaking space). %\end{docKey} % %\begin{dispExample} %\DTLsetLocaleOptions{GB}{currency-symbol-sep=thin-space} %\DTLdecimaltocurrency{12345.678}{\result}\result %\end{dispExample} % %\begin{docKey}[GB]{number-style}{=\meta{setting}}{initially \opt{official}} %Sets the number group and decimal characters. The value may be one %of: \docValue{official} (comma number group and decimal point), %\docValue{education} (thin space number group and decimal point), or %\docValue{old} (comma number group and mid dot decimal). %In the case of \docValue{education}, a normal space may also be used %when parsing. %In the case of \docValue{old}, a normal dot may also be used %when parsing. %\end{docKey} % %\begin{dispExample} %\DTLsetup{numeric={auto-reformat}} %\DTLsetLocaleOptions{GB}{number-style=education} %\DTLdecimaltocurrency{12345.678}{\result}\result. %(Value: \DTLdatumvalue{\result}.) % %\DTLparse{\result}{£12 345.678}\result. %(Value: \DTLdatumvalue{\result}.) % %\DTLsetLocaleOptions{GB}{number-style=old} %\DTLdecimaltocurrency{12345.678}{\result}\result. %(Value: \DTLdatumvalue{\result}.) % %\DTLparse{\result}{£12,345.678}\result. %(Value: \DTLdatumvalue{\result}.) %\end{dispExample} % %The remaining options relate to dates and times, which are still %experimental. You need to enable date and time parsing with %\setbaseopt{ datetime = \brackets{parse} }. % %\begin{docKey}[GB]{date-style}{=\meta{style}}{initially \opt{dmyyyy}} %Sets the current date style. The value may be one of: %\docValue{dmyyyy} (day month year), \docValue{mdyyyy} (month day year), %\docValue{yyyymd} (year month day), %\docValue{dmyy} (day month 2-digit year), %\docValue{mdyy} (month day 2-digit year), or %\docValue{yymd} (2-digit year month day). %\end{docKey} % %\begin{docKey}[GB]{date-variant}{=\meta{style}}{initially \opt{slash}} %Sets the current numeric date separator. %Allowed values: \docValue{slash} (\code{/}), \docValue{hyphen} %(\code{-}), \docValue{dot} (\code{.}) or %\docValue{dialect} (if the language supports it). %\end{docKey} % %\begin{docKey}[GB]{time-variant}{=\meta{style}}{initially \opt{colon}} %Sets the current numeric time separator. %Allowed values: \docValue{colon} (\code{:}), \docValue{dot} (\code{.}) or %\docValue{dialect} (if the language supports it), %\docValue{dialect-colon} (if the language supports it), or %\docValue{dialect-dot} (if the language supports it). %\end{docKey} % %\begin{dispExample} %\DTLsetup{datetime={parse}} %\DTLsetLocaleOptions{GB}{ % date-style=dmyyyy, % date-variant = dialect, % time-variant = dot %} %\DTLparse\result{Fri 28th Feb 2025 3.45pm GMT} %String: \result. %Data type: \DTLgetDataTypeName{\DTLdatumtype{\result}}. %Numeric value: \DTLdatumvalue{\result}. % %\ExplSyntaxOn %\datatool_extract_timestamp:NN \result \l_tmpa_tl %Time-stamp: ~ \l_tmpa_tl %\ExplSyntaxOff %\end{dispExample} % %\begin{docCommand}{datatoolGBSetNumberChars}{} %Hook to switch to GB number group and decimal characters. %\end{docCommand} % %\begin{docCommand}{datatoolGBcurrencyfmt}{} %Used to format the GBP currency. This supports the currency symbol %prefix. %\end{docCommand} % %\begin{docCommand}{DTLGBLocaleHook}{} %Hook to switch to GB settings. This may be added to the captions %hook by \sty{datatool-base}, depending on the settings. Otherwise %it can be explicitly used to switch to this region. %\end{docCommand} % %\section{Region \qt{GG}} %\DTLenLocaleHook %\DTLGGLocaleHook % %The \file{datatool-GG.ldf} file provides support for region \qt{GG} %(Guernsey). This defines the \qt{GGP} currency and sets it as %the default currency. The default number group character is a %comma, and the default decimal character is a dot. % %If there's no caption hook and you have multiple locales, you will %need to set both the language and region hooks. For example, this %document has: %\begin{dispListing} %\DTLenLocaleHook %\DTLGGLocaleHook %\end{dispListing} % %\begin{dispExample*}{title={Default Numeric Styles}} %\DTLdecimaltolocale{12345}{\result}\result. %(Value: \DTLdatumvalue{\result}.) % %\DTLdecimaltolocale{12345.678}{\result}\result. %(Value: \DTLdatumvalue{\result}.) % %\DTLdecimaltocurrency{-12345.678}{\result}\result. %(Value: \DTLdatumvalue{\result}.) % %\DTLmul\result{\result}{0.5}\result. %(Value: \DTLdatumvalue{\result}.) %\end{dispExample*} %Remember that date-time parsing needs to be enabled, if required. %\begin{dispExample*}{title={Default Date-Time Styles}} %\DTLsetup{datetime={parse}} %\DTLparse\result{28/2/2025 15:45 GMT} %String: \result. %Data type: \DTLgetDataTypeName{\DTLdatumtype{\result}}. %Numeric value: \DTLdatumvalue{\result}. % %\ExplSyntaxOn %\datatool_extract_timestamp:NN \result \l_tmpa_tl %Time-stamp: ~ \l_tmpa_tl %\ExplSyntaxOff %\end{dispExample*} % %Options may be set with \setlocaleopts{GG}. Available options are %listed below. % %\begin{docKey}[GG]{currency-symbol-prefix}{=\meta{boolean}}{initially \opt{false}} %If true, shows the region prefix before the currency symbol if %the \opt{numeric} setting \opt{currency-symbol-style} is not set to \qt{iso}. %The prefix font may be changed to smallcaps or smaller with %\setbaseopt{ numeric = \brackets{ region-currency-prefix = \meta{value} } } %where \meta{value} is \opt{smallcaps} or \opt{smaller}. %\end{docKey} % %\begin{dispExample} %\DTLsetup{numeric={region-currency-prefix=smallcaps}} %\DTLsetLocaleOptions{GG}{currency-symbol-prefix} %\DTLdecimaltocurrency{12345.678}{\result}\result %\end{dispExample} % % %\begin{docKey}[GG]{currency-symbol-position}{=\meta{value}}{initially \opt{before}} %Adjusts the formatting currency style. If \docValue{before}, the %currency symbol is placed before the value. If \docValue{after}, the %currency symbol is placed after the value. %\end{docKey} % %\begin{dispExample} %\DTLsetup{numeric={currency-symbol-style=iso}} %\DTLsetLocaleOptions{GG}{currency-symbol-position=after} %\DTLdecimaltocurrency{12345.678}{\result}\result %\end{dispExample} % %\begin{docKey}[GG]{currency-symbol-sep}{=\meta{value}}{initially \opt{none}} %Sets the separator to use between the currency symbol (not code) and the value. %Permitted values: \docValue{none} (no space), \docValue{thin-space} %(a thin space), \docValue{space} (a normal space), or %\docValue{nbsp} (a non-breaking space). %\end{docKey} % %\begin{dispExample} %\DTLsetLocaleOptions{GG}{currency-symbol-sep=thin-space} %\DTLdecimaltocurrency{12345.678}{\result}\result %\end{dispExample} % %\begin{docKey}[GG]{number-style}{=\meta{setting}}{initially \opt{official}} %Sets the number group and decimal characters. The value may be one %of: \docValue{official} (comma number group and decimal point) or %\docValue{unofficial} (thin space number group and decimal point). %In the case of \docValue{unofficial}, a normal space may also be used %when parsing. %\end{docKey} % %\begin{dispExample} %\DTLsetup{numeric={auto-reformat}} %\DTLsetLocaleOptions{GG}{number-style=unofficial} %\DTLdecimaltocurrency{12345.678}{\result}\result. %(Value: \DTLdatumvalue{\result}.) % %\DTLparse{\result}{£12 345.678}\result. %(Value: \DTLdatumvalue{\result}.) %\end{dispExample} % %The remaining options relate to dates and times, which are still %experimental. You need to enable date and time parsing with %\setbaseopt{ datetime = \brackets{parse} }. % %\begin{docKey}[GG]{date-style}{=\meta{style}}{initially \opt{dmyyyy}} %Sets the current date style. The value may be one of: %\docValue{dmyyyy} (day month year), \docValue{mdyyyy} (month day year), %\docValue{yyyymd} (year month day), %\docValue{dmyy} (day month 2-digit year), %\docValue{mdyy} (month day 2-digit year), or %\docValue{yymd} (2-digit year month day). %\end{docKey} % %\begin{docKey}[GG]{date-variant}{=\meta{style}}{initially \opt{slash}} %Sets the current numeric date separator. %Allowed values: \docValue{slash} (\code{/}), \docValue{hyphen} %(\code{-}), \docValue{dot} (\code{.}) or %\docValue{dialect} (if the language supports it). %\end{docKey} % %\begin{docKey}[GG]{time-variant}{=\meta{style}}{initially \opt{colon}} %Sets the current numeric time separator. %Allowed values: \docValue{colon} (\code{:}), \docValue{dot} (\code{.}) or %\docValue{dialect} (if the language supports it), %\docValue{dialect-colon} (if the language supports it), or %\docValue{dialect-dot} (if the language supports it). %\end{docKey} % %\begin{dispExample} %\DTLsetup{datetime={parse}} %\DTLsetLocaleOptions{GG}{ % date-style=dmyyyy, % date-variant = dialect, % time-variant = dot %} %\DTLparse\result{Fri 28th Feb 2025 3.45pm GMT} %String: \result. %Data type: \DTLgetDataTypeName{\DTLdatumtype{\result}}. %Numeric value: \DTLdatumvalue{\result}. % %\ExplSyntaxOn %\datatool_extract_timestamp:NN \result \l_tmpa_tl %Time-stamp: ~ \l_tmpa_tl %\ExplSyntaxOff %\end{dispExample} % %\begin{docCommand}{datatoolGGSetNumberChars}{} %Hook to switch to GG number group and decimal characters. %\end{docCommand} % %\begin{docCommand}{datatoolGGcurrencyfmt}{} %Used to format the GGP currency. This supports the currency symbol %prefix. %\end{docCommand} % %\begin{docCommand}{DTLGGLocaleHook}{} %Hook to switch to GG settings. This may be added to the captions %hook by \sty{datatool-base}, depending on the settings. Otherwise %it can be explicitly used to switch to this region. %\end{docCommand} % %\section{Region \qt{GI}} %\DTLenLocaleHook %\DTLGILocaleHook % %The \file{datatool-GI.ldf} file provides support for region \qt{GI} %(Gibraltar). This defines the \qt{GIP} currency and sets it as %the default currency. The default number group character is a %comma, and the default decimal character is a dot. % %If there's no caption hook and you have multiple locales, you will %need to set both the language and region hooks. For example, this %document has: %\begin{dispListing} %\DTLenLocaleHook %\DTLGILocaleHook %\end{dispListing} % %\begin{dispExample*}{title={Default Numeric Styles}} %\DTLdecimaltolocale{12345}{\result}\result. %(Value: \DTLdatumvalue{\result}.) % %\DTLdecimaltolocale{12345.678}{\result}\result. %(Value: \DTLdatumvalue{\result}.) % %\DTLdecimaltocurrency{-12345.678}{\result}\result. %(Value: \DTLdatumvalue{\result}.) % %\DTLmul\result{\result}{0.5}\result. %(Value: \DTLdatumvalue{\result}.) %\end{dispExample*} %Remember that date-time parsing needs to be enabled, if required. %\begin{dispExample*}{title={Default Date-Time Styles}} %\DTLsetup{datetime={parse}} %\DTLparse\result{28/2/2025 15:45 GMT} %String: \result. %Data type: \DTLgetDataTypeName{\DTLdatumtype{\result}}. %Numeric value: \DTLdatumvalue{\result}. % %\ExplSyntaxOn %\datatool_extract_timestamp:NN \result \l_tmpa_tl %Time-stamp: ~ \l_tmpa_tl %\ExplSyntaxOff %\end{dispExample*} % %Options may be set with \setlocaleopts{GI}. Available options are %listed below. % %\begin{docKey}[GI]{currency-symbol-prefix}{=\meta{boolean}}{initially \opt{false}} %If true, shows the region prefix before the currency symbol if %the \opt{numeric} setting \opt{currency-symbol-style} is not set to \qt{iso}. %The prefix font may be changed to smallcaps or smaller with %\setbaseopt{ numeric = \brackets{ region-currency-prefix = \meta{value} } } %where \meta{value} is \opt{smallcaps} or \opt{smaller}. %\end{docKey} % %\begin{dispExample} %\DTLsetup{numeric={region-currency-prefix=smallcaps}} %\DTLsetLocaleOptions{GI}{currency-symbol-prefix} %\DTLdecimaltocurrency{12345.678}{\result}\result %\end{dispExample} % % %\begin{docKey}[GI]{currency-symbol-position}{=\meta{value}}{initially \opt{before}} %Adjusts the formatting currency style. If \docValue{before}, the %currency symbol is placed before the value. If \docValue{after}, the %currency symbol is placed after the value. %\end{docKey} % %\begin{dispExample} %\DTLsetup{numeric={currency-symbol-style=iso}} %\DTLsetLocaleOptions{GI}{currency-symbol-position=after} %\DTLdecimaltocurrency{12345.678}{\result}\result %\end{dispExample} % %\begin{docKey}[GI]{currency-symbol-sep}{=\meta{value}}{initially \opt{none}} %Sets the separator to use between the currency symbol (not code) and the value. %Permitted values: \docValue{none} (no space), \docValue{thin-space} %(a thin space), \docValue{space} (a normal space), or %\docValue{nbsp} (a non-breaking space). %\end{docKey} % %\begin{dispExample} %\DTLsetLocaleOptions{GI}{currency-symbol-sep=thin-space} %\DTLdecimaltocurrency{12345.678}{\result}\result %\end{dispExample} % %\begin{docKey}[GI]{number-style}{=\meta{setting}}{initially \opt{official}} %Sets the number group and decimal characters. The value may be one %of: \docValue{official} (comma number group and decimal point) or %\docValue{unofficial} (thin space number group and decimal point). %In the case of \docValue{unofficial}, a normal space may also be used %when parsing. %\end{docKey} % %\begin{dispExample} %\DTLsetup{numeric={auto-reformat}} %\DTLsetLocaleOptions{GI}{number-style=unofficial} %\DTLdecimaltocurrency{12345.678}{\result}\result. %(Value: \DTLdatumvalue{\result}.) % %\DTLparse{\result}{£12 345.678}\result. %(Value: \DTLdatumvalue{\result}.) %\end{dispExample} % %The remaining options relate to dates and times, which are still %experimental. You need to enable date and time parsing with %\setbaseopt{ datetime = \brackets{parse} }. % %\begin{docKey}[GI]{date-style}{=\meta{style}}{initially \opt{dmyyyy}} %Sets the current date style. The value may be one of: %\docValue{dmyyyy} (day month year), \docValue{mdyyyy} (month day year), %\docValue{yyyymd} (year month day), %\docValue{dmyy} (day month 2-digit year), %\docValue{mdyy} (month day 2-digit year), or %\docValue{yymd} (2-digit year month day). %\end{docKey} % %\begin{docKey}[GI]{date-variant}{=\meta{style}}{initially \opt{slash}} %Sets the current numeric date separator. %Allowed values: \docValue{slash} (\code{/}), \docValue{hyphen} %(\code{-}), \docValue{dot} (\code{.}) or %\docValue{dialect} (if the language supports it). %\end{docKey} % %\begin{docKey}[GI]{time-variant}{=\meta{style}}{initially \opt{colon}} %Sets the current numeric time separator. %Allowed values: \docValue{colon} (\code{:}), \docValue{dot} (\code{.}) or %\docValue{dialect} (if the language supports it), %\docValue{dialect-colon} (if the language supports it), or %\docValue{dialect-dot} (if the language supports it). %\end{docKey} % %\begin{dispExample} %\DTLsetup{datetime={parse}} %\DTLsetLocaleOptions{GI}{ % date-style=dmyyyy, % date-variant = dialect, % time-variant = dot %} %\DTLparse\result{Fri 28th Feb 2025 3.45pm GMT} %String: \result. %Data type: \DTLgetDataTypeName{\DTLdatumtype{\result}}. %Numeric value: \DTLdatumvalue{\result}. % %\ExplSyntaxOn %\datatool_extract_timestamp:NN \result \l_tmpa_tl %Time-stamp: ~ \l_tmpa_tl %\ExplSyntaxOff %\end{dispExample} % %\begin{docCommand}{datatoolGISetNumberChars}{} %Hook to switch to GI number group and decimal characters. %\end{docCommand} % %\begin{docCommand}{datatoolGIcurrencyfmt}{} %Used to format the GIP currency. This supports the currency symbol %prefix. %\end{docCommand} % %\begin{docCommand}{DTLGILocaleHook}{} %Hook to switch to GI settings. This may be added to the captions %hook by \sty{datatool-base}, depending on the settings. Otherwise %it can be explicitly used to switch to this region. %\end{docCommand} % %\section{Region \qt{IE}} %\DTLenLocaleHook %\DTLIELocaleHook % %The \file{datatool-IE.ldf} file provides support for region \qt{IE} %(Republic of Ireland). This sets \qt{EUR} as the default currency. % %If there's no caption hook and you have multiple locales, you will %need to set both the language and region hooks. For example, this %document has: %\begin{dispListing} %\DTLenLocaleHook %\DTLIELocaleHook %\end{dispListing} % %\begin{dispExample*}{title={Default Numeric Styles}} %\DTLdecimaltolocale{12345}{\result}\result. %(Value: \DTLdatumvalue{\result}.) % %\DTLdecimaltolocale{12345.678}{\result}\result. %(Value: \DTLdatumvalue{\result}.) % %\DTLdecimaltocurrency{-12345.678}{\result}\result. %(Value: \DTLdatumvalue{\result}.) % %\DTLmul\result{\result}{0.5}\result. %(Value: \DTLdatumvalue{\result}.) %\end{dispExample*} %Remember that date-time parsing needs to be enabled, if required. %\begin{dispExample*}{title={Default Date-Time Styles}} %\DTLsetup{datetime={parse}} %\DTLparse\result{1/6/2025 15:45 IST} %String: \result. %Data type: \DTLgetDataTypeName{\DTLdatumtype{\result}}. %Numeric value: \DTLdatumvalue{\result}. % %\ExplSyntaxOn %\datatool_extract_timestamp:NN \result \l_tmpa_tl %Time-stamp: ~ \l_tmpa_tl %\ExplSyntaxOff %\end{dispExample*} % % %Options may be set with \setlocaleopts{IE}. Available options are %listed below. % %\begin{docKey}[IE]{currency-symbol-position}{=\meta{value}}{initially \opt{before}} %Adjusts the formatting currency style. If \docValue{before}, the %currency symbol is placed before the value. If \docValue{after}, the %currency symbol is placed after the value. %\end{docKey} % %\begin{dispExample} %\DTLsetup{numeric={currency-symbol-style=iso}} %\DTLsetLocaleOptions{IE}{currency-symbol-position=after} %\DTLdecimaltocurrency{12345.678}{\result}\result %\end{dispExample} % %\begin{docKey}[IE]{currency-symbol-sep}{=\meta{value}}{initially \opt{none}} %Sets the separator to use between the currency symbol (not code) and the value. %Permitted values: \docValue{none} (no space), \docValue{thin-space} %(a thin space), \docValue{space} (a normal space), or %\docValue{nbsp} (a non-breaking space). %\end{docKey} % %\begin{dispExample} %\DTLsetLocaleOptions{IE}{currency-symbol-sep=thin-space} %\DTLdecimaltocurrency{12345.678}{\result}\result %\end{dispExample} % %\begin{docKey}[IE]{number-style}{=\meta{setting}}{initially \opt{official}} %Sets the number group and decimal characters. The value may be one %of: \docValue{official} (comma number group and decimal point) or %\docValue{unofficial} (thin space number group and decimal point). %In the case of \docValue{unofficial}, a normal space may also be used %when parsing. %\end{docKey} % %\begin{dispExample} %\DTLsetup{numeric={auto-reformat}} %\DTLsetLocaleOptions{IE}{number-style=unofficial} %\DTLdecimaltocurrency{12345.678}{\result}\result. %(Value: \DTLdatumvalue{\result}.) % %\DTLparse{\result}{\texteuro 12 345.678}\result. %(Value: \DTLdatumvalue{\result}.) %\end{dispExample} % %The remaining options relate to dates and times, which are still %experimental. You need to enable date and time parsing with %\setbaseopt{ datetime = \brackets{ parse } }. % %\begin{docKey}[IE]{date-style}{=\meta{style}}{initially \opt{dmyyyy}} %Sets the current date style. The value may be one of: %\docValue{dmyyyy} (day month year), \docValue{mdyyyy} (month day year), %\docValue{yyyymd} (year month day), %\docValue{dmyy} (day month 2-digit year), %\docValue{mdyy} (month day 2-digit year), or %\docValue{yymd} (2-digit year month day). %\end{docKey} % %\begin{docKey}[IE]{date-variant}{=\meta{style}}{initially \opt{slash}} %Sets the current numeric date separator. %Allowed values: \docValue{slash} (\code{/}), \docValue{hyphen} %(\code{-}), \docValue{dot} (\code{.}) or %\docValue{dialect} (if the language supports it). %\end{docKey} % %\begin{docKey}[IE]{time-variant}{=\meta{style}}{initially \opt{colon}} %Sets the current numeric time separator. %Allowed values: \docValue{colon} (\code{:}), \docValue{dot} (\code{.}) or %\docValue{dialect} (if the language supports it), %\docValue{dialect-colon} (if the language supports it), or %\docValue{dialect-dot} (if the language supports it). %\end{docKey} % %\begin{dispExample} %\DTLsetup{datetime={parse}} %\DTLsetLocaleOptions{IE}{ % date-style=dmyyyy, % date-variant = dialect, % time-variant = dot %} %\DTLparse\result{1st June 2025 3.45pm IST} %String: \result. %Data type: \DTLgetDataTypeName{\DTLdatumtype{\result}}. %Numeric value: \DTLdatumvalue{\result}. % %\ExplSyntaxOn %\datatool_extract_timestamp:NN \result \l_tmpa_tl %Time-stamp: ~ \l_tmpa_tl %\ExplSyntaxOff %\end{dispExample} % %\begin{docCommand}{datatoolIESetNumberChars}{} %Hook to switch to IE number group and decimal characters. %\end{docCommand} % %\begin{docCommand}{datatoolIESetCurrency}{} %Hook to switch to the EUR currency, rounding to 2 decimal places, %and redefines \cs{DTLdefaultEURcurrencyfmt} to reflect the %\opt{currency-symbol-position} setting. %\end{docCommand} % %\begin{docCommand}{DTLIELocaleHook}{} %Hook to switch to IE settings. This may be added to the captions %hook by \sty{datatool-base}, depending on the settings. Otherwise %it can be explicitly used to switch to this region. %\end{docCommand} % %\section{Region \qt{IM}} %\DTLenLocaleHook %\DTLIMLocaleHook % %The \file{datatool-IM.ldf} file provides support for region \qt{IM} %(Isle of Man). This defines the \qt{IMP} currency and sets it as %the default currency. The default number group character is a %comma, and the default decimal character is a dot. % %If there's no caption hook and you have multiple locales, you will %need to set both the language and region hooks. For example, this %document has: %\begin{dispListing} %\DTLenLocaleHook %\DTLIMLocaleHook %\end{dispListing} % %\begin{dispExample*}{title={Default Numeric Styles}} %\DTLdecimaltolocale{12345}{\result}\result. %(Value: \DTLdatumvalue{\result}.) % %\DTLdecimaltolocale{12345.678}{\result}\result. %(Value: \DTLdatumvalue{\result}.) % %\DTLdecimaltocurrency{-12345.678}{\result}\result. %(Value: \DTLdatumvalue{\result}.) % %\DTLmul\result{\result}{0.5}\result. %(Value: \DTLdatumvalue{\result}.) %\end{dispExample*} %Remember that date-time parsing needs to be enabled, if required. %\begin{dispExample*}{title={Default Date-Time Styles}} %\DTLsetup{datetime={parse}} %\DTLparse\result{28/2/2025 15:45 GMT} %String: \result. %Data type: \DTLgetDataTypeName{\DTLdatumtype{\result}}. %Numeric value: \DTLdatumvalue{\result}. % %\ExplSyntaxOn %\datatool_extract_timestamp:NN \result \l_tmpa_tl %Time-stamp: ~ \l_tmpa_tl %\ExplSyntaxOff %\end{dispExample*} % %Options may be set with \setlocaleopts{IM}. Available options are %listed below. % %\begin{docKey}[IM]{currency-symbol-prefix}{=\meta{boolean}}{initially \opt{false}} %If true, shows the region prefix before the currency symbol if %the \opt{numeric} setting \opt{currency-symbol-style} is not set to \qt{iso}. %The prefix font may be changed to smallcaps or smaller with %\setbaseopt{ numeric = \brackets{ region-currency-prefix = \meta{value} } } %where \meta{value} is \opt{smallcaps} or \opt{smaller}. %\end{docKey} % %\begin{dispExample} %\DTLsetup{numeric={region-currency-prefix=smallcaps}} %\DTLsetLocaleOptions{IM}{currency-symbol-prefix} %\DTLdecimaltocurrency{12345.678}{\result}\result %\end{dispExample} % % %\begin{docKey}[IM]{currency-symbol-position}{=\meta{value}}{initially \opt{before}} %Adjusts the formatting currency style. If \docValue{before}, the %currency symbol is placed before the value. If \docValue{after}, the %currency symbol is placed after the value. %\end{docKey} % %\begin{dispExample} %\DTLsetup{numeric={currency-symbol-style=iso}} %\DTLsetLocaleOptions{IM}{currency-symbol-position=after} %\DTLdecimaltocurrency{12345.678}{\result}\result %\end{dispExample} % %\begin{docKey}[IM]{currency-symbol-sep}{=\meta{value}}{initially \opt{none}} %Sets the separator to use between the currency symbol (not code) and the value. %Permitted values: \docValue{none} (no space), \docValue{thin-space} %(a thin space), \docValue{space} (a normal space), or %\docValue{nbsp} (a non-breaking space). %\end{docKey} % %\begin{dispExample} %\DTLsetLocaleOptions{IM}{currency-symbol-sep=thin-space} %\DTLdecimaltocurrency{12345.678}{\result}\result %\end{dispExample} % %\begin{docKey}[IM]{number-style}{=\meta{setting}}{initially \opt{official}} %Sets the number group and decimal characters. The value may be one %of: \docValue{official} (comma number group and decimal point) or %\docValue{unofficial} (thin space number group and decimal point). %In the case of \docValue{unofficial}, a normal space may also be used %when parsing. %\end{docKey} % %\begin{dispExample} %\DTLsetup{numeric={auto-reformat}} %\DTLsetLocaleOptions{IM}{number-style=unofficial} %\DTLdecimaltocurrency{12345.678}{\result}\result. %(Value: \DTLdatumvalue{\result}.) % %\DTLparse{\result}{£12 345.678}\result. %(Value: \DTLdatumvalue{\result}.) %\end{dispExample} % %The remaining options relate to dates and times, which are still %experimental. You need to enable date and time parsing with %\setbaseopt{ datetime = \brackets{parse} }. % %\begin{docKey}[IM]{date-style}{=\meta{style}}{initially \opt{dmyyyy}} %Sets the current date style. The value may be one of: %\docValue{dmyyyy} (day month year), \docValue{mdyyyy} (month day year), %\docValue{yyyymd} (year month day), %\docValue{dmyy} (day month 2-digit year), %\docValue{mdyy} (month day 2-digit year), or %\docValue{yymd} (2-digit year month day). %\end{docKey} % %\begin{docKey}[IM]{date-variant}{=\meta{style}}{initially \opt{slash}} %Sets the current numeric date separator. %Allowed values: \docValue{slash} (\code{/}), \docValue{hyphen} %(\code{-}), \docValue{dot} (\code{.}) or %\docValue{dialect} (if the language supports it). %\end{docKey} % %\begin{docKey}[IM]{time-variant}{=\meta{style}}{initially \opt{colon}} %Sets the current numeric time separator. %Allowed values: \docValue{colon} (\code{:}), \docValue{dot} (\code{.}) or %\docValue{dialect} (if the language supports it), %\docValue{dialect-colon} (if the language supports it), or %\docValue{dialect-dot} (if the language supports it). %\end{docKey} % %\begin{dispExample} %\DTLsetup{datetime={parse}} %\DTLsetLocaleOptions{IM}{ % date-style=dmyyyy, % date-variant = dialect, % time-variant = dot %} %\DTLparse\result{Fri 28th Feb 2025 3.45pm GMT} %String: \result. %Data type: \DTLgetDataTypeName{\DTLdatumtype{\result}}. %Numeric value: \DTLdatumvalue{\result}. % %\ExplSyntaxOn %\datatool_extract_timestamp:NN \result \l_tmpa_tl %Time-stamp: ~ \l_tmpa_tl %\ExplSyntaxOff %\end{dispExample} % %\begin{docCommand}{datatoolIMSetNumberChars}{} %Hook to switch to IM number group and decimal characters. %\end{docCommand} % %\begin{docCommand}{datatoolIMcurrencyfmt}{} %Used to format the IMP currency. This supports the currency symbol %prefix. %\end{docCommand} % %\begin{docCommand}{DTLIMLocaleHook}{} %Hook to switch to IM settings. This may be added to the captions %hook by \sty{datatool-base}, depending on the settings. Otherwise %it can be explicitly used to switch to this region. %\end{docCommand} % %\section{Region \qt{JE}} %\DTLenLocaleHook %\DTLJELocaleHook % %The \file{datatool-JE.ldf} file provides support for region \qt{JE} %(Jersey). This defines the \qt{JEP} currency and sets it as %the default currency. The default number group character is a %comma, and the default decimal character is a dot. % %If there's no caption hook and you have multiple locales, you will %need to set both the language and region hooks. For example, this %document has: %\begin{dispListing} %\DTLenLocaleHook %\DTLJELocaleHook %\end{dispListing} % %\begin{dispExample*}{title={Default Numeric Styles}} %\DTLdecimaltolocale{12345}{\result}\result. %(Value: \DTLdatumvalue{\result}.) % %\DTLdecimaltolocale{12345.678}{\result}\result. %(Value: \DTLdatumvalue{\result}.) % %\DTLdecimaltocurrency{-12345.678}{\result}\result. %(Value: \DTLdatumvalue{\result}.) % %\DTLmul\result{\result}{0.5}\result. %(Value: \DTLdatumvalue{\result}.) %\end{dispExample*} %Remember that date-time parsing needs to be enabled, if required. %\begin{dispExample*}{title={Default Date-Time Styles}} %\DTLsetup{datetime={parse}} %\DTLparse\result{28/2/2025 15:45 GMT} %String: \result. %Data type: \DTLgetDataTypeName{\DTLdatumtype{\result}}. %Numeric value: \DTLdatumvalue{\result}. % %\ExplSyntaxOn %\datatool_extract_timestamp:NN \result \l_tmpa_tl %Time-stamp: ~ \l_tmpa_tl %\ExplSyntaxOff %\end{dispExample*} % % %Options may be set with \setlocaleopts{JE}. Available options are %listed below. % %\begin{docKey}[JE]{currency-symbol-prefix}{=\meta{boolean}}{initially \opt{false}} %If true, shows the region prefix before the currency symbol if %the \opt{numeric} setting \opt{currency-symbol-style} is not set to \qt{iso}. %The prefix font may be changed to smallcaps or smaller with %\setbaseopt{ numeric = \brackets{ region-currency-prefix = \meta{value} } } %where \meta{value} is \opt{smallcaps} or \opt{smaller}. %\end{docKey} % %\begin{dispExample} %\DTLsetup{numeric={region-currency-prefix=smallcaps}} %\DTLsetLocaleOptions{JE}{currency-symbol-prefix} %\DTLdecimaltocurrency{12345.678}{\result}\result %\end{dispExample} % % %\begin{docKey}[JE]{currency-symbol-position}{=\meta{value}}{initially \opt{before}} %Adjusts the formatting currency style. If \docValue{before}, the %currency symbol is placed before the value. If \docValue{after}, the %currency symbol is placed after the value. %\end{docKey} % %\begin{dispExample} %\DTLsetup{numeric={currency-symbol-style=iso}} %\DTLsetLocaleOptions{JE}{currency-symbol-position=after} %\DTLdecimaltocurrency{12345.678}{\result}\result %\end{dispExample} % %\begin{docKey}[JE]{currency-symbol-sep}{=\meta{value}}{initially \opt{none}} %Sets the separator to use between the currency symbol (not code) and the value. %Permitted values: \docValue{none} (no space), \docValue{thin-space} %(a thin space), \docValue{space} (a normal space), or %\docValue{nbsp} (a non-breaking space). %\end{docKey} % %\begin{dispExample} %\DTLsetLocaleOptions{JE}{currency-symbol-sep=thin-space} %\DTLdecimaltocurrency{12345.678}{\result}\result %\end{dispExample} % %\begin{docKey}[JE]{number-style}{=\meta{setting}}{initially \opt{official}} %Sets the number group and decimal characters. The value may be one %of: \docValue{official} (comma number group and decimal point) or %\docValue{unofficial} (thin space number group and decimal point). %In the case of \docValue{unofficial}, a normal space may also be used %when parsing. %\end{docKey} % %\begin{dispExample} %\DTLsetup{numeric={auto-reformat}} %\DTLsetLocaleOptions{JE}{number-style=unofficial} %\DTLdecimaltocurrency{12345.678}{\result}\result. %(Value: \DTLdatumvalue{\result}.) % %\DTLparse{\result}{£12 345.678}\result. %(Value: \DTLdatumvalue{\result}.) %\end{dispExample} % %The remaining options relate to dates and times, which are still %experimental. You need to enable date and time parsing with %\setbaseopt{ datetime = \brackets{parse} }. % %\begin{docKey}[JE]{date-style}{=\meta{style}}{initially \opt{dmyyyy}} %Sets the current date style. The value may be one of: %\docValue{dmyyyy} (day month year), \docValue{mdyyyy} (month day year), %\docValue{yyyymd} (year month day), %\docValue{dmyy} (day month 2-digit year), %\docValue{mdyy} (month day 2-digit year), or %\docValue{yymd} (2-digit year month day). %\end{docKey} % %\begin{docKey}[JE]{date-variant}{=\meta{style}}{initially \opt{slash}} %Sets the current numeric date separator. %Allowed values: \docValue{slash} (\code{/}), \docValue{hyphen} %(\code{-}), \docValue{dot} (\code{.}) or %\docValue{dialect} (if the language supports it). %\end{docKey} % %\begin{docKey}[JE]{time-variant}{=\meta{style}}{initially \opt{colon}} %Sets the current numeric time separator. %Allowed values: \docValue{colon} (\code{:}), \docValue{dot} (\code{.}) or %\docValue{dialect} (if the language supports it), %\docValue{dialect-colon} (if the language supports it), or %\docValue{dialect-dot} (if the language supports it). %\end{docKey} % %\begin{dispExample} %\DTLsetup{datetime={parse}} %\DTLsetLocaleOptions{JE}{ % date-style=dmyyyy, % date-variant = dialect, % time-variant = dot %} %\DTLparse\result{Fri 28th Feb 2025 3.45pm GMT} %String: \result. %Data type: \DTLgetDataTypeName{\DTLdatumtype{\result}}. %Numeric value: \DTLdatumvalue{\result}. % %\ExplSyntaxOn %\datatool_extract_timestamp:NN \result \l_tmpa_tl %Time-stamp: ~ \l_tmpa_tl %\ExplSyntaxOff %\end{dispExample} % %\begin{docCommand}{datatoolJESetNumberChars}{} %Hook to switch to JE number group and decimal characters. %\end{docCommand} % %\begin{docCommand}{datatoolJEcurrencyfmt}{} %Used to format the JEP currency. This supports the currency symbol %prefix. %\end{docCommand} % %\begin{docCommand}{DTLJELocaleHook}{} %Hook to switch to JE settings. This may be added to the captions %hook by \sty{datatool-base}, depending on the settings. Otherwise %it can be explicitly used to switch to this region. %\end{docCommand} % %\section{Region \qt{NZ}} %\DTLenLocaleHook %\DTLNZLocaleHook % %The \file{datatool-NZ.ldf} file provides support for region \qt{NZ} %(New Zealand). This defines the \qt{NZD} currency and sets it as %the default currency. The default number group character is a %comma, and the default decimal character is a dot. % %If there's no caption hook and you have multiple locales, you will %need to set both the language and region hooks. For example, this %document has: %\begin{dispListing} %\DTLenLocaleHook %\DTLNZLocaleHook %\end{dispListing} % %\begin{dispExample*}{title={Default Numeric Styles}} %\DTLdecimaltolocale{12345}{\result}\result. %(Value: \DTLdatumvalue{\result}.) % %\DTLdecimaltolocale{12345.678}{\result}\result. %(Value: \DTLdatumvalue{\result}.) % %\DTLdecimaltocurrency{-12345.678}{\result}\result. %(Value: \DTLdatumvalue{\result}.) % %\DTLmul\result{\result}{0.5}\result. %(Value: \DTLdatumvalue{\result}.) %\end{dispExample*} %Remember that date-time parsing needs to be enabled, if required. %\begin{dispExample*}{title={Default Date-Time Styles}} %\DTLsetup{datetime={parse}} %\DTLparse\result{28/2/2025 15:45 NZDT} %String: \result. %Data type: \DTLgetDataTypeName{\DTLdatumtype{\result}}. %Numeric value: \DTLdatumvalue{\result}. % %\ExplSyntaxOn %\datatool_extract_timestamp:NN \result \l_tmpa_tl %Time-stamp: ~ \l_tmpa_tl %\ExplSyntaxOff %\end{dispExample*} % % %Options may be set with \setlocaleopts{NZ}. Available options are %listed below. % %\begin{docKey}[NZ]{currency-symbol-prefix}{=\meta{boolean}}{initially \opt{false}} %If true, shows the region prefix before the currency symbol if %the \opt{numeric} setting \opt{currency-symbol-style} is not set to \qt{iso}. %The prefix font may be changed to smallcaps or smaller with %\setbaseopt{ numeric = \brackets{ region-currency-prefix = \meta{value} } } %where \meta{value} is \opt{smallcaps} or \opt{smaller}. %\end{docKey} % %\begin{dispExample} %\DTLsetup{numeric={region-currency-prefix=smallcaps}} %\DTLsetLocaleOptions{NZ}{currency-symbol-prefix} %\DTLdecimaltocurrency{12345.678}{\result}\result %\end{dispExample} % % %\begin{docKey}[NZ]{currency-symbol-position}{=\meta{value}}{initially \opt{before}} %Adjusts the formatting currency style. If \docValue{before}, the %currency symbol is placed before the value. If \docValue{after}, the %currency symbol is placed after the value. %\end{docKey} % %\begin{dispExample} %\DTLsetup{numeric={currency-symbol-style=iso}} %\DTLsetLocaleOptions{NZ}{currency-symbol-position=after} %\DTLdecimaltocurrency{12345.678}{\result}\result %\end{dispExample} % %\begin{docKey}[NZ]{currency-symbol-sep}{=\meta{value}}{initially \opt{none}} %Sets the separator to use between the currency symbol (not code) and the value. %Permitted values: \docValue{none} (no space), \docValue{thin-space} %(a thin space), \docValue{space} (a normal space), or %\docValue{nbsp} (a non-breaking space). %\end{docKey} % %\begin{dispExample} %\DTLsetLocaleOptions{NZ}{currency-symbol-sep=thin-space} %\DTLdecimaltocurrency{12345.678}{\result}\result %\end{dispExample} % %\begin{docKey}[NZ]{number-style}{=\meta{setting}}{initially \opt{official}} %Sets the number group and decimal characters. The value may be one %of: \docValue{official} (comma number group and decimal point), or %\docValue{unofficial} (thin space number group and decimal point). %In the case of \docValue{unofficial}, a normal space may also be used %when parsing. %\end{docKey} % %\begin{dispExample} %\DTLsetup{numeric={auto-reformat}} %\DTLsetLocaleOptions{NZ}{number-style=unofficial} %\DTLdecimaltocurrency{12345.678}{\result}\result. %(Value: \DTLdatumvalue{\result}.) % %\DTLparse{\result}{\$12 345.678}\result. %(Value: \DTLdatumvalue{\result}.) %\end{dispExample} % %The remaining options relate to dates and times, which are still %experimental. You need to enable date and time parsing with %\setbaseopt{ datetime = \brackets{parse} }. % %\begin{docKey}[NZ]{date-style}{=\meta{style}}{initially \opt{mdyyyy}} %Sets the current date style. The value may be one of: %\docValue{dmyyyy} (day month year), \docValue{mdyyyy} (month day year), %\docValue{yyyymd} (year month day), %\docValue{dmyy} (day month 2-digit year), %\docValue{mdyy} (month day 2-digit year), or %\docValue{yymd} (2-digit year month day). %\end{docKey} % %\begin{docKey}[NZ]{date-variant}{=\meta{style}}{initially \opt{slash}} %Sets the current numeric date separator. %Allowed values: \docValue{slash} (\code{/}), \docValue{hyphen} %(\code{-}), \docValue{dot} (\code{.}) or %\docValue{dialect} (if the language supports it). %\end{docKey} % %\begin{docKey}[NZ]{time-variant}{=\meta{style}}{initially \opt{colon}} %Sets the current numeric time separator. %Allowed values: \docValue{colon} (\code{:}), \docValue{dot} (\code{.}) or %\docValue{dialect} (if the language supports it), %\docValue{dialect-colon} (if the language supports it), or %\docValue{dialect-dot} (if the language supports it). %\end{docKey} % %\begin{dispExample} %\DTLsetup{datetime={parse}} %\DTLsetLocaleOptions{NZ}{ % date-style=mdyyyy, % date-variant = dialect, % time-variant = dot %} %\DTLparse\result{February 28, 2025 3.45pm AEDT} %String: \result. %Data type: \DTLgetDataTypeName{\DTLdatumtype{\result}}. %Numeric value: \DTLdatumvalue{\result}. % %\ExplSyntaxOn %\datatool_extract_timestamp:NN \result \l_tmpa_tl %Time-stamp: ~ \l_tmpa_tl %\ExplSyntaxOff %\end{dispExample} % %\begin{docCommand}{datatoolNZSetNumberChars}{} %Hook to switch to NZ number group and decimal characters. %\end{docCommand} % %\begin{docCommand}{datatoolNZcurrencyfmt}{} %Used to format the NZD currency. This supports the currency symbol %prefix. %\end{docCommand} % %\begin{docCommand}{DTLNZLocaleHook}{} %Hook to switch to NZ settings. This may be added to the captions %hook by \sty{datatool-base}, depending on the settings. Otherwise %it can be explicitly used to switch to this region. %\end{docCommand} % %\section{Region \qt{US}} %\DTLenLocaleHook %\DTLUSLocaleHook % %The \file{datatool-US.ldf} file provides support for region \qt{US} %(United States). This defines the \qt{USD} currency and sets it as %the default currency. The default number group character is a %comma, and the default decimal character is a dot. % %If there's no caption hook and you have multiple locales, you will %need to set both the language and region hooks. For example, this %document has: %\begin{dispListing} %\DTLenLocaleHook %\DTLUSLocaleHook %\end{dispListing} % %\begin{dispExample*}{title={Default Styles}} %\DTLdecimaltolocale{12345}{\result}\result. %(Value: \DTLdatumvalue{\result}.) % %\DTLdecimaltolocale{12345.678}{\result}\result. %(Value: \DTLdatumvalue{\result}.) % %\DTLdecimaltocurrency{-12345.678}{\result}\result. %(Value: \DTLdatumvalue{\result}.) % %\DTLmul\result{\result}{0.5}\result. %(Value: \DTLdatumvalue{\result}.) %\end{dispExample*} %Remember that date-time parsing needs to be enabled, if required. %\begin{dispExample*}{title={Default Date-Time Styles}} %\DTLsetup{datetime={parse}} %\DTLparse\result{2/28/2025 15:45 PST} %String: \result. %Data type: \DTLgetDataTypeName{\DTLdatumtype{\result}}. %Numeric value: \DTLdatumvalue{\result}. % %\ExplSyntaxOn %\datatool_extract_timestamp:NN \result \l_tmpa_tl %Time-stamp: ~ \l_tmpa_tl %\ExplSyntaxOff %\end{dispExample*} % %Options may be set with \setlocaleopts{US}. Available options are %listed below. % %\begin{docKey}[US]{currency-symbol-prefix}{=\meta{boolean}}{initially \opt{false}} %If true, shows the region prefix before the currency symbol if %the \opt{numeric} setting \opt{currency-symbol-style} is not set to \qt{iso}. %The prefix font may be changed to smallcaps or smaller with %\setbaseopt{ numeric = \brackets{ region-currency-prefix = \meta{value} } } %where \meta{value} is \opt{smallcaps} or \opt{smaller}. %\end{docKey} % %\begin{dispExample} %\DTLsetup{numeric={region-currency-prefix=smallcaps}} %\DTLsetLocaleOptions{US}{currency-symbol-prefix} %\DTLdecimaltocurrency{12345.678}{\result}\result %\end{dispExample} % % %\begin{docKey}[US]{currency-symbol-position}{=\meta{value}}{initially \opt{before}} %Adjusts the formatting currency style. If \docValue{before}, the %currency symbol is placed before the value. If \docValue{after}, the %currency symbol is placed after the value. %\end{docKey} % %\begin{dispExample} %\DTLsetup{numeric={currency-symbol-style=iso}} %\DTLsetLocaleOptions{US}{currency-symbol-position=after} %\DTLdecimaltocurrency{12345.678}{\result}\result %\end{dispExample} % %\begin{docKey}[US]{currency-symbol-sep}{=\meta{value}}{initially \opt{none}} %Sets the separator to use between the currency symbol (not code) and the value. %Permitted values: \docValue{none} (no space), \docValue{thin-space} %(a thin space), \docValue{space} (a normal space), or %\docValue{nbsp} (a non-breaking space). %\end{docKey} % %\begin{dispExample} %\DTLsetLocaleOptions{US}{currency-symbol-sep=thin-space} %\DTLdecimaltocurrency{12345.678}{\result}\result %\end{dispExample} % %\begin{docKey}[US]{number-style}{=\meta{setting}}{initially \opt{official}} %Sets the number group and decimal characters. The value may be one %of: \docValue{official} (comma number group and decimal point), or %\docValue{unofficial} (thin space number group and decimal point). %In the case of \docValue{unofficial}, a normal space may also be used %when parsing. %\end{docKey} % %\begin{dispExample} %\DTLsetup{numeric={auto-reformat}} %\DTLsetLocaleOptions{US}{number-style=unofficial} %\DTLdecimaltocurrency{12345.678}{\result}\result. %(Value: \DTLdatumvalue{\result}.) % %\DTLparse{\result}{\$12 345.678}\result. %(Value: \DTLdatumvalue{\result}.) %\end{dispExample} % %The remaining options relate to dates and times, which are still %experimental. You need to enable date and time parsing with %\setbaseopt{ datetime = \brackets{parse} }. % %\begin{docKey}[US]{date-style}{=\meta{style}}{initially \opt{mdyyyy}} %Sets the current date style. The value may be one of: %\docValue{dmyyyy} (day month year), \docValue{mdyyyy} (month day year), %\docValue{yyyymd} (year month day), %\docValue{dmyy} (day month 2-digit year), %\docValue{mdyy} (month day 2-digit year), or %\docValue{yymd} (2-digit year month day). %\end{docKey} % %\begin{docKey}[US]{date-variant}{=\meta{style}}{initially \opt{slash}} %Sets the current numeric date separator. %Allowed values: \docValue{slash} (\code{/}), \docValue{hyphen} %(\code{-}), \docValue{dot} (\code{.}) or %\docValue{dialect} (if the language supports it). %\end{docKey} % %\begin{docKey}[US]{time-variant}{=\meta{style}}{initially \opt{colon}} %Sets the current numeric time separator. %Allowed values: \docValue{colon} (\code{:}), \docValue{dot} (\code{.}) or %\docValue{dialect} (if the language supports it), %\docValue{dialect-colon} (if the language supports it), or %\docValue{dialect-dot} (if the language supports it). %\end{docKey} % %\begin{dispExample} %\DTLsetup{datetime={parse}} %\DTLsetLocaleOptions{US}{ % date-style=mdyyyy, % date-variant = dialect, % time-variant = dot %} %\DTLparse\result{February 28, 2025 3.45pm EST} %String: \result. %Data type: \DTLgetDataTypeName{\DTLdatumtype{\result}}. %Numeric value: \DTLdatumvalue{\result}. % %\ExplSyntaxOn %\datatool_extract_timestamp:NN \result \l_tmpa_tl %Time-stamp: ~ \l_tmpa_tl %\ExplSyntaxOff %\end{dispExample} % %\begin{docCommand}{datatoolUSSetNumberChars}{} %Hook to switch to US number group and decimal characters. %\end{docCommand} % %\begin{docCommand}{datatoolUScurrencyfmt}{} %Used to format the USD currency. This supports the currency symbol %prefix. %\end{docCommand} % %\begin{docCommand}{DTLUSLocaleHook}{} %Hook to switch to US settings. This may be added to the captions %hook by \sty{datatool-base}, depending on the settings. Otherwise %it can be explicitly used to switch to this region. %\end{docCommand} % %\section{Region \qt{ZA}} %\DTLenLocaleHook %\DTLenZALocaleHook %\DTLZALocaleHook % %The \file{datatool-ZA.ldf} file provides support for region \qt{ZA} %(South Africa). This supplies the currency (ZAR) but number formatting %depends on the language, so this requires specific language \& %region files, which should be provided by the applicable language %module. For example, \sty{datatool-english} provides %\file{datatool-en-ZA.ldf}. % %If there's no caption hook and you have multiple locales, you will %need to set both the language and region hooks. For example, this %document has: %\begin{dispListing} %\DTLenLocaleHook %\DTLenZALocaleHook %\DTLZALocaleHook %\end{dispListing} % %\begin{dispExample*}{title={Default Styles (with English)}} %\DTLdecimaltolocale{12345}{\result}\result. %(Value: \DTLdatumvalue{\result}.) % %\DTLdecimaltolocale{12345.678}{\result}\result. %(Value: \DTLdatumvalue{\result}.) % %\DTLdecimaltocurrency{-12345.678}{\result}\result. %(Value: \DTLdatumvalue{\result}.) % %\DTLmul\result{\result}{0,5}\result. %(Value: \DTLdatumvalue{\result}.) %\end{dispExample*} %Remember that date-time parsing needs to be enabled, if required. %\begin{dispExample*}{title={Default Date-Time Styles}} %\DTLsetup{datetime={parse}} %\DTLparse\result{2025-2-28 15:45 SAST} %String: \result. %Data type: \DTLgetDataTypeName{\DTLdatumtype{\result}}. %Numeric value: \DTLdatumvalue{\result}. % %\ExplSyntaxOn %\datatool_extract_timestamp:NN \result \l_tmpa_tl %Time-stamp: ~ \l_tmpa_tl %\ExplSyntaxOff %\end{dispExample*} % %Options may be set with \setlocaleopts{ZA}. Available options are %listed below. % %\begin{docKey}[ZA]{currency-symbol-position}{=\meta{value}}{initially \opt{before}} %Adjusts the formatting currency style. If \docValue{before}, the %currency symbol is placed before the value. If \docValue{after}, the %currency symbol is placed after the value. %\end{docKey} % %\begin{dispExample} %\DTLsetup{numeric={currency-symbol-style=iso}} %\DTLsetLocaleOptions{ZA}{currency-symbol-position=after} %\DTLdecimaltocurrency{12345.678}{\result}\result %\end{dispExample} % %\begin{docKey}[ZA]{currency-symbol-sep}{=\meta{value}}{initially \opt{none}} %Sets the separator to use between the currency symbol (not code) and the value. %Permitted values: \docValue{none} (no space), \docValue{thin-space} %(a thin space), \docValue{space} (a normal space), or %\docValue{nbsp} (a non-breaking space). %\end{docKey} % %\begin{dispExample} %\DTLsetLocaleOptions{ZA}{currency-symbol-sep=thin-space} %\DTLdecimaltocurrency{12345.678}{\result}\result %\end{dispExample} % %\begin{docKey}[ZA]{number-style}{=\meta{style}}{initially \opt{official}} %Sets the number group and decimal characters. The value may be one %of: \docValue{official} (dot number group and decimal comma) or %\docValue{dialect} (attempt to use the number style for %the module \meta{lang}-ZA, if it's defined, where \meta{lang} is the %current language tag). %\end{docKey} % %\begin{dispExample} %\DTLsetLocaleOptions{ZA}{number-style=official} %\DTLdecimaltocurrency{12345.678}{\result}\result %\end{dispExample} %Or if \ldf{en-ZA} has been loaded and the current language is %English: %\begin{dispExample} %\DTLsetLocaleOptions{ZA}{number-style=dialect} %\DTLdecimaltocurrency{12345.678}{\result}\result %\end{dispExample} % %The remaining options relate to dates and times, which are still %experimental. You need to enable date and time parsing with %\setbaseopt{ datetime = \brackets{parse} }. % %\begin{docKey}[ZA]{date-style}{=\meta{style}}{initially \opt{yyyymd}} %Sets the current date style. The value may be one of: %\docValue{dmyyyy} (day month year), \docValue{mdyyyy} (month day year), %\docValue{yyyymd} (year month day), %\docValue{dmyy} (day month 2-digit year), %\docValue{mdyy} (month day 2-digit year), or %\docValue{yymd} (2-digit year month day). %\end{docKey} % %\begin{docKey}[ZA]{date-variant}{=\meta{style}}{initially \opt{hyphen}} %Sets the current numeric date separator. %Allowed values: \docValue{slash} (\code{/}), \docValue{hyphen} %(\code{-}), \docValue{dot} (\code{.}) or %\docValue{dialect} (if the language supports it). %\end{docKey} % %\begin{docKey}[ZA]{time-variant}{=\meta{style}}{initially \opt{colon}} %Sets the current numeric time separator. %Allowed values: \docValue{colon} (\code{:}), \docValue{dot} (\code{.}) or %\docValue{dialect} (if the language supports it), %\docValue{dialect-colon} (if the language supports it), or %\docValue{dialect-dot} (if the language supports it). %\end{docKey} % %\begin{dispExample} %\DTLsetup{datetime={parse}} %\DTLsetLocaleOptions{ZA}{ % date-style=mdyyyy, % date-variant = dialect, % time-variant = dot %} %\DTLparse\result{June 1, 2025 3.45pm SAST} %String: \result. %Data type: \DTLgetDataTypeName{\DTLdatumtype{\result}}. %Numeric value: \DTLdatumvalue{\result}. % %\ExplSyntaxOn %\datatool_extract_timestamp:NN \result \l_tmpa_tl %Time-stamp: ~ \l_tmpa_tl %\ExplSyntaxOff %\end{dispExample} %\begin{docCommand}{datatoolZASetNumberChars}{} %Hook to switch to ZA number group and decimal characters. %\end{docCommand} % %\begin{docCommand}{datatoolZAcurrencyfmt}{} %Used to format the ZAR currency. %\end{docCommand} % %\begin{docCommand}{DTLZALocaleHook}{} %Hook to switch to ZA settings. This may be added to the captions %hook by \sty{datatool-base}, depending on the settings. Otherwise %it can be explicitly used to switch to this region. %\end{docCommand} % %\StopEventually{% % \PrintChanges % \PrintIndex %} % % %\chapter{The Code} %\iffalse % \begin{macrocode} %<*datatool-AU.ldf> % \end{macrocode} %\fi %\section{datatool-AU.ldf}\label{sec:datatool-AU} % Support for region AU. % \begin{macrocode} \TrackLangProvidesResource{AU}[2025/03/01 v1.0] % \end{macrocode} % Switch on \LaTeX3 syntax: % \begin{macrocode} \ExplSyntaxOn % \end{macrocode} % %\subsection{Numbers and Currency} %Set the number group and decimal symbols for this region. % \begin{macrocode} \cs_new:Nn \datatool_AU_set_numberchars_official: { \datatool_set_numberchars:nn { , } { . } } % \end{macrocode} %Unofficial style. % \begin{macrocode} \cs_new:Nn \datatool_AU_set_numberchars_unofficial: { \datatool_set_thinspace_group_decimal_char:n { . } } % \end{macrocode} %Hook to set the number group and decimal characters for the region: % \begin{macrocode} \newcommand \datatoolAUSetNumberChars { \bool_if:NT \l_datatool_region_set_numberchars_bool { \datatool_AU_set_numberchars_official: } } % \end{macrocode} %How to format the position of the currency symbol in relation to the value. % \begin{macrocode} \cs_new:Nn \datatool_AU_currency_position:nn { \dtlcurrprefixfmt { #1 } { #2 } } % \end{macrocode} %Separator between currency symbol and value. % \begin{macrocode} \tl_new:N \l_datatool_AU_sym_sep_tl % \end{macrocode} % Set the currency format for this region. % \begin{macrocode} \newcommand \datatoolAUcurrencyfmt [ 2 ] { \datatool_AU_currency_position:nn { \datatoolAUsymbolprefix { AU } #1 } { #2 } } % \end{macrocode} %Prefix for symbol, if required. % \begin{macrocode} \newcommand \datatoolAUsymbolprefix [ 1 ] { } % \end{macrocode} % Define the currency symbols for this region. % \begin{macrocode} \datatool_def_currency:nnnV { \datatoolAUcurrencyfmt } { AUD } { \$ } \c_dollar_str % \end{macrocode} % Register the currency code with this region: % \begin{macrocode} \datatool_register_regional_currency_code:nn { AU } { AUD } % \end{macrocode} % Provide a command to set the currency for this region (for use % with any hook used when the locale changes). % NB this should do nothing with % \verb|\DTLsetup{region-currency=false}| % \begin{macrocode} \newcommand \datatoolAUSetCurrency { \bool_if:NT \l_datatool_region_set_currency_bool { \DTLsetdefaultcurrency { AUD } % \end{macrocode} %Number of digits that \cs{DTLdecimaltocurrency} should round to: % \begin{macrocode} \renewcommand \DTLCurrentLocaleCurrencyDP { 2 } % \end{macrocode} %Separator between symbol and value: % \begin{macrocode} \renewcommand \dtlcurrfmtsymsep { \l_datatool_AU_sym_sep_tl } } } % \end{macrocode} % %\subsection{Date and Time Parsing} % This defaults to day/month/year but may be changed with \cs{DTLsetLocaleOptions}. For example: %\begin{dispListing} %\DTLsetLocaleOptions{AU}{date-style=dmyyyy, date-variant=slash} %\end{dispListing} %An appropriate language file will need to also be installed to %parse dates containing month names or day of week names. % %Provide a way to configure parsing style. % \begin{macrocode} \tl_new:N \l__datatool_AU_datevariant_tl \tl_set:Nn \l__datatool_AU_datevariant_tl { slash } % \end{macrocode} %NB These token lists are used to form command names. The following is not %a format string. % \begin{macrocode} \tl_new:N \l__datatool_AU_datestyle_tl \tl_set:Nn \l__datatool_AU_datestyle_tl { ddmmyyyy } \tl_new:N \l__datatool_AU_timevariant_tl \tl_set:Nn \l__datatool_AU_timevariant_tl { colon } % \end{macrocode} % %Each parsing command defined below has final \marg{true} and \marg{false} %arguments (\code{TF}). These are used if parsing was successful (true) or if %parsing failed (false). The internal commands used by %\sty{datatool-base} have no need for solo branches (only \code{T} or only %\code{F}) so these commands are simply defined with \verb|\cs_new:Nn| %not as conditionals. % %\subsubsection{Time Stamp Parsing} %Use command %\begin{definition} %\cs{datatool\_}\meta{date-style}\verb|_hhmmss_tz_parse_timestamp:nnNnTF| %\end{definition} %with date regular expression %\begin{definition} %\cs{c\_datatool\_}\meta{date-variant}\verb|_|\meta{date-style}\verb|_date_regex| %\end{definition} %and time regular expression %\begin{definition} %\cs{c\_datatool\_}\meta{time-variant}\verb|_hhmmss_time_regex| %\end{definition} % \begin{macrocode} \cs_new:Nn \datatool_AU_parse_timestamp:NnTF { \cs_if_exist:cTF { datatool_ \l__datatool_AU_datestyle_tl _hhmmss_tz_parse_timestamp:ccNnTF } { \cs_if_exist:cTF { c_datatool_ \l__datatool_AU_datevariant_tl _ \l__datatool_AU_datestyle_tl _date_regex } { \cs_if_exist:cTF { c_datatool_ \l__datatool_AU_timevariant_tl _hhmmss_time_regex } { \use:c { datatool_ \l__datatool_AU_datestyle_tl _hhmmss_tz_parse_timestamp:ccNnTF } { c_datatool_ \l__datatool_AU_datevariant_tl _ \l__datatool_AU_datestyle_tl _date_regex } { c_datatool_ \l__datatool_AU_timevariant_tl _hhmmss_time_regex } #1 { #2 } { #3 } { #4 } } { \datatool_warn_check_head_language_empty:Vnnn \l__datatool_AU_timevariant_tl { datatool-AU } { No ~ language ~ support ~ for ~ time ~ variant ~ ` \exp_args:Ne \tl_tail:n { \l__datatool_AU_timevariant_tl } ' } { No ~ support ~ for ~ time ~ variant ~ ` \l__datatool_AU_timevariant_tl ' } #4 } } { \datatool_warn_check_head_language_empty:Vnnn \l__datatool_AU_datevariant_tl { datatool-AU } { No ~ language ~ support ~ for ~ date ~ style ~ ` \l__datatool_AU_datestyle_tl ' } { No ~ support ~ for ~ date ~ style ~ ` \l__datatool_AU_datestyle_tl ' ~ with ~ variant ~ ` \l__datatool_AU_datevariant_tl ' } #4 } } { \datatool_locale_warn:nn { datatool-AU } { No ~ support ~ for ~ date ~ style ~ ` \l__datatool_AU_datestyle_tl ' } #4 } } % \end{macrocode} % %\subsubsection{Date Parsing} %Use command \cs{datatool\_}\meta{style}\verb|_parse_date:NNnTF| %with regular expression %\begin{definition} %\cs{c\_datatool\_}\meta{variant}\verb|_anchored_|\meta{style}\verb|_date_regex| %\end{definition} % \begin{macrocode} \cs_new:Nn \datatool_AU_parse_date:NnTF { \cs_if_exist:cTF { datatool_ \l__datatool_AU_datestyle_tl _parse_date:NNnTF } { \cs_if_exist:cTF { c_datatool_ \l__datatool_AU_datevariant_tl _anchored_ \l__datatool_AU_datestyle_tl _date_regex } { \exp_args:cc { datatool_ \l__datatool_AU_datestyle_tl _parse_date:NNnTF } { c_datatool_ \l__datatool_AU_datevariant_tl _anchored_ \l__datatool_AU_datestyle_tl _date_regex } #1 { #2 } { #3 } { #4 } } { \datatool_warn_check_head_language_empty:Vnnn \l__datatool_AU_datevariant_tl { datatool-AU } { No ~ language ~ support ~ for ~ date ~ style ~ ` \l__datatool_AU_datestyle_tl ' } { No ~ support ~ for ~ date ~ style ~ ` \l__datatool_AU_datestyle_tl ' ~ with ~ variant ~ ` \l__datatool_AU_datevariant_tl ' } #4 } } { \datatool_locale_warn:nn { datatool-AU } { No ~ support ~ for ~ date ~ style ~ ` \l__datatool_AU_datestyle_tl ' } #4 } } % \end{macrocode} % %\subsubsection{Time Parsing} %Use command \cs{datatool\_}\meta{style}\verb|_parse_time:NNnTF| %with regular expression %\begin{definition} %\cs{c\_datatool\_}\meta{variant}\verb|_anchored_|\meta{style}\verb|_time_regex| %\end{definition} % \begin{macrocode} \cs_new:Nn \datatool_AU_parse_time:NnTF { \cs_if_exist:cTF { c_datatool_ \l__datatool_AU_timevariant_tl _anchored_hhmmss_time_regex } { \datatool_hhmmss_parse_time:cNnTF { c_datatool_ \l__datatool_AU_timevariant_tl _anchored_hhmmss_time_regex } #1 { #2 } { #3 } { #4 } } { \datatool_warn_check_head_language_empty:Vnnn \l__datatool_AU_timevariant_tl { datatool-AU } { No ~ language ~ support ~ for ~ time ~ variant ~ ` \exp_args:Ne \tl_tail:n { \l__datatool_AU_timevariant_tl } ' } { No ~ support ~ for ~ time ~ variant ~ ` \l__datatool_AU_timevariant_tl ' } #4 } } % \end{macrocode} % %\subsubsection{Time Zone Mappings} %Define time zone mapping command for this region: % \begin{macrocode} \cs_new:Nn \datatool_AU_get_timezone_map:n { \datatool_region_get_timezone_map:n { AU / #1 } } % \end{macrocode} %Define time zone IDs for this region (one-way map from ID to offset): % \begin{macrocode} \datatool_region_set_timezone_map:nn { AU / ACST } { +09:30 } \datatool_region_set_timezone_map:nn { AU / ACDT } { +10:30 } \datatool_region_set_timezone_map:nn { AU / ACWST } { +08:45 } \datatool_region_set_timezone_map:nn { AU / ACWDT } { +09:00 } \datatool_region_set_timezone_map:nn { AU / AEST } { +10:00 } \datatool_region_set_timezone_map:nn { AU / AEDT } { +11:00 } \datatool_region_set_timezone_map:nn { AU / CXT } { +07:00 } \datatool_region_set_timezone_map:nn { AU / NFT } { +11:00 } \datatool_region_set_timezone_map:nn { AU / NFDT } { +12:00 } \datatool_region_set_timezone_map:nn { AU / LHST } { +10:30 } \datatool_region_set_timezone_map:nn { AU / LHDT } { +11:00 } \datatool_region_set_timezone_map:nn { AU / CCT } { +06:30 } % \end{macrocode} % %\subsection{Options} %Define options for this region: % \begin{macrocode} \datatool_locale_define_keys:nn { AU } { number-style .choices:nn = { official, unofficial } { \exp_args:NNe \renewcommand \datatoolAUSetNumberChars { \exp_not:N \bool_if:NT \exp_not:N \l_datatool_region_set_numberchars_bool { \exp_not:c { datatool_AU_set_numberchars_ \l_keys_choice_tl : } } } \tl_if_eq:NnT \l_datatool_current_region_tl { AU } { \datatoolAUSetNumberChars } } , % \end{macrocode} % Currency symbol before or after value: % \begin{macrocode} currency-symbol-position .choice: , currency-symbol-position / before .code:n = { \cs_set_eq:NN \datatool_AU_currency_position:nn \dtlcurrprefixfmt } , currency-symbol-position / after .code:n = { \cs_set_eq:NN \datatool_AU_currency_position:nn \dtlcurrsuffixfmt } , % \end{macrocode} % Should the currency symbol be prefixed with the region code: % \begin{macrocode} currency-symbol-prefix .choice: , currency-symbol-prefix / false .code:n = { \cs_set_eq:NN \datatoolAUsymbolprefix \use_none:n } , currency-symbol-prefix / true .code:n = { \cs_set_eq:NN \datatoolAUsymbolprefix \datatool_currency_symbol_region_prefix:n } , currency-symbol-prefix .default:n = { true } , % \end{macrocode} % Separator between currency symbol (not code) and value: % \begin{macrocode} currency-symbol-sep .choice: , currency-symbol-sep / none .code:n = { \tl_clear:N \l_datatool_AU_sym_sep_tl } , currency-symbol-sep / thin-space .code:n = { \tl_set:Nn \l_datatool_AU_sym_sep_tl { \, } } , currency-symbol-sep / space .code:n = { \tl_set:Nn \l_datatool_AU_sym_sep_tl { ~ } } , currency-symbol-sep / nbsp .code:n = { \tl_set:Nn \l_datatool_AU_sym_sep_tl { \nobreakspace } } , currency-symbol-sep . initial:n = { none } , % \end{macrocode} % Date and time styles: % \begin{macrocode} date-style .choice: , date-style / dmyyyy .code: n = { \tl_set:Nn \l__datatool_AU_datestyle_tl { ddmmyyyy } } , date-style / mdyyyy .code: n = { \tl_set:Nn \l__datatool_AU_datestyle_tl { mmddyyyy } } , date-style / yyyymd .code: n = { \tl_set:Nn \l__datatool_AU_datestyle_tl { yyyymmdd } } , date-style / dmyy .code: n = { \tl_set:Nn \l__datatool_AU_datestyle_tl { ddmmyy } } , date-style / mdyy .code: n = { \tl_set:Nn \l__datatool_AU_datestyle_tl { mmddyy } } , date-style / yymd .code: n = { \tl_set:Nn \l__datatool_AU_datestyle_tl { yymmdd } } , date-variant .choice: , date-variant / slash .code:n = { \tl_set:Nn \l__datatool_AU_datevariant_tl { slash } } , date-variant / hyphen .code:n = { \tl_set:Nn \l__datatool_AU_datevariant_tl { hyphen } } , date-variant / dot .code:n = { \tl_set:Nn \l__datatool_AU_datevariant_tl { dot } } , date-variant / dialect .code:n = { \tl_set:Nn \l__datatool_AU_datevariant_tl { \l_datatool_current_language_tl } } , time-variant .choice: , time-variant / colon .code:n = { \tl_set:Nn \l__datatool_AU_timevariant_tl { colon } } , time-variant / dot .code:n = { \tl_set:Nn \l__datatool_AU_timevariant_tl { dot } } , time-variant / dialect .code:n = { \tl_if_eq:NnTF \l__datatool_AU_timevariant_tl { dot } { \tl_set:Nn \l__datatool_AU_timevariant_tl { \l_datatool_current_language_tl _dot } } { \tl_if_in:NnF \l__datatool_AU_timevariant_tl { \l_datatool_current_language_tl } { \tl_set:Nn \l__datatool_AU_timevariant_tl { \l_datatool_current_language_tl _colon } } } } , time-variant / dialect-colon .code:n = { \tl_set:Nn \l__datatool_AU_timevariant_tl { \l_datatool_current_language_tl _colon } } , time-variant / dialect-dot .code:n = { \tl_set:Nn \l__datatool_AU_timevariant_tl { \l_datatool_current_language_tl _dot } } , } % \end{macrocode} % %\subsection{Hooks} %Command to update temporal parsing commands for this region: % \begin{macrocode} \newcommand \datatoolAUSetTemporalParsers { \renewcommand \DTLCurrentLocaleParseTimeStamp { \datatool_AU_parse_timestamp:NnTF } \renewcommand \DTLCurrentLocaleParseDate { \datatool_AU_parse_date:NnTF } \renewcommand \DTLCurrentLocaleParseTime { \datatool_AU_parse_time:NnTF } \let \DTLCurrentLocaleGetTimeZoneMap \datatool_AU_get_timezone_map:n } % \end{macrocode} %Set temporal formatting commands for this region. Currently this %just resets to the default, but may change in future. %Note that the defaults test if the applicable \sty{datetime2} %command is available and will fallback on ISO if not defined. %Bear in mind that the default style for \sty{datetime2} is %\texttt{iso} so there won't be a noticeable difference unless the %\sty{datetime2} regional setting is on. % \begin{macrocode} \newcommand \datatoolAUSetTemporalFormatters { \let \DTLCurrentLocaleFormatDate \datatool_default_date_fmt:nnnn \let \DTLCurrentLocaleFormatTime \datatool_default_time_fmt:nnn \let \DTLCurrentLocaleFormatTimeZone \datatool_default_timezone_fmt:nn \let \DTLCurrentLocaleFormatTimeStampNoZone \datatool_default_timestamp_fmt:nnnnnnn \let \DTLCurrentLocaleFormatTimeStampWithZone \datatool_default_timestamp_fmt:nnnnnnnnn \renewcommand \DTLCurrentLocaleTimeStampFmtSep { ~ } } % \end{macrocode} % % %Command to update currency and temporal parsing commands for this region: % \begin{macrocode} \newcommand \DTLAULocaleHook { \datatoolAUSetNumberChars \datatoolAUSetCurrency \datatoolAUSetTemporalParsers \datatoolAUSetTemporalFormatters % \end{macrocode} %Allow language files to reference the region: % \begin{macrocode} \tl_set:Nn \l_datatool_current_region_tl { AU } } % \end{macrocode} % % Finished with \LaTeX3 syntax. % \begin{macrocode} \ExplSyntaxOff % \end{macrocode} %Note that the hook is added to the captions by \sty{datatool-base} %not by the region file. %\iffalse % \begin{macrocode} % % \end{macrocode} %\fi %\iffalse % \begin{macrocode} %<*datatool-BE.ldf> % \end{macrocode} %\fi %\section{datatool-BE.ldf}\label{sec:code:datatool-BE} % Support for region BE. % \begin{macrocode} \TrackLangProvidesResource{BE}[2025/03/01 v1.0] % \end{macrocode} % Switch on \LaTeX3 syntax: % \begin{macrocode} \ExplSyntaxOn % \end{macrocode} % %\subsection{Numbers and Currency} %Default style is to use dot separator and decimal dot. %If a French language module is developed, it will need to %provide a file called \file{datatool-fr-BE.ldf} which %should define a command called %\cs{datatoolfrBESetNumberChars} to set the %number group separator to a space. %(See \file{datatool-en-ZA.ldf} provided with \sty{datatool-english} %as an example.) % \begin{macrocode} \cs_new:Nn \datatool_BE_set_numberchars_default: { \DTLsetnumberchars { . } { , } } % \end{macrocode} %Thin-space style. % \begin{macrocode} \cs_new:Nn \datatool_BE_set_numberchars_thinspace: { \datatool_set_thinspace_group_decimal_char:n { . } } % \end{macrocode} %Check if the dialect has provided a style. If so, use that, %otherwise use the default. % \begin{macrocode} \cs_new:Nn \datatool_BE_set_numberchars_dialect: { \tl_if_empty:NTF \l_datatool_current_language_tl { \datatool_BE_set_numberchars_default: } { \cs_if_exist_use:cF { datatool \l_datatool_current_language_tl BESetNumberChars } { \datatool_BE_set_numberchars_default: } } } % \end{macrocode} %Hook to set the number group and decimal characters for the region: % \begin{macrocode} \newcommand \datatoolBESetNumberChars { \bool_if:NT \l_datatool_region_set_numberchars_bool { \datatool_BE_set_numberchars_dialect: } } % \end{macrocode} % The EUR currency is already defined by \sty{datatool-base}, but we % need to register the currency code with this region: % \begin{macrocode} \datatool_register_regional_currency_code:nn { BE } { EUR } % \end{macrocode} %How to format the position of the currency symbol in relation to the value. % \begin{macrocode} \cs_new:Nn \datatool_BE_currency_position:nn { \dtlcurrsuffixfmt { #1 } { #2 } } % \end{macrocode} %Separator between currency symbol and value. % \begin{macrocode} \tl_new:N \l_datatool_BE_sym_sep_tl % \end{macrocode} % % Provide a command to set the currency for this region (for use % with any hook used when the locale changes). % \begin{macrocode} \newcommand \datatoolBESetCurrency { \bool_if:NT \l_datatool_region_set_currency_bool { \DTLsetdefaultcurrency { EUR } % \end{macrocode} %Number of digits that \cs{DTLdecimaltocurrency} should round to: % \begin{macrocode} \renewcommand \DTLCurrentLocaleCurrencyDP { 2 } % \end{macrocode} %Update EUR format to reflect current region style: % \begin{macrocode} \renewcommand \DTLdefaultEURcurrencyfmt { \datatool_BE_currency_position:nn } % \end{macrocode} %Separator between symbol and value: % \begin{macrocode} \renewcommand \dtlcurrfmtsymsep { \l_datatool_BE_sym_sep_tl } } } % \end{macrocode} % %\subsection{Date and Time Parsing} % Date parsing is more complicated as there seems to be a confusing % mixture of ISO, day/month/year and month/day/year formats. % The default is year-month-day but may be changed with % \cs{DTLsetLocaleOptions}. For example: %\begin{dispListing} %\DTLsetLocaleOptions{BE}{date-style=dmyyyy, date-variant=slash} %\end{dispListing} %An appropriate language file will need to also be installed to %parse dates containing month names or day of week names. % % \begin{macrocode} \tl_new:N \l__datatool_BE_datevariant_tl \tl_set:Nn \l__datatool_BE_datevariant_tl { dot } % \end{macrocode} %NB These token lists are used to form command names. The following is not %a format string. % \begin{macrocode} \tl_new:N \l__datatool_BE_datestyle_tl \tl_set:Nn \l__datatool_BE_datestyle_tl { ddmmyyyy } \tl_new:N \l__datatool_BE_timevariant_tl \tl_set:Nn \l__datatool_BE_timevariant_tl { colon } % \end{macrocode} % %Each parsing command defined below has final \marg{true} and \marg{false} %arguments (\code{TF}). These are used if parsing was successful (true) or if %parsing failed (false). The internal commands used by %\sty{datatool-base} have no need for solo branches (only \code{T} or only %\code{F}) so these commands are simply defined with \verb|\cs_new:Nn| %not as conditionals. % %\subsubsection{Time Stamp Parsing} %Use command %\begin{definition} %\cs{datatool\_}\meta{date-style}\verb|_hhmmss_tz_parse_timestamp:nnNnTF| %\end{definition} %with date regular expression %\begin{definition} %\cs{c\_datatool\_}\meta{date-variant}\verb|_|\meta{date-style}\verb|_date_regex| %\end{definition} %and time regular expression %\begin{definition} %\cs{c\_datatool\_}\meta{time-variant}\verb|_hhmmss_time_regex| %\end{definition} % \begin{macrocode} \cs_new:Nn \datatool_BE_parse_timestamp:NnTF { \cs_if_exist:cTF { datatool_ \l__datatool_BE_datestyle_tl _hhmmss_tz_parse_timestamp:ccNnTF } { \cs_if_exist:cTF { c_datatool_ \l__datatool_BE_datevariant_tl _ \l__datatool_BE_datestyle_tl _date_regex } { \cs_if_exist:cTF { c_datatool_ \l__datatool_BE_timevariant_tl _hhmmss_time_regex } { \use:c { datatool_ \l__datatool_BE_datestyle_tl _hhmmss_tz_parse_timestamp:ccNnTF } { c_datatool_ \l__datatool_BE_datevariant_tl _ \l__datatool_BE_datestyle_tl _date_regex } { c_datatool_ \l__datatool_BE_timevariant_tl _hhmmss_time_regex } #1 { #2 } { #3 } { #4 } } { \datatool_locale_warn:nn { datatool-BE } { No ~ support ~ for ~ time ~ variant ~ ` \l__datatool_BE_timevariant_tl ' } #4 } } { \datatool_locale_warn:nn { datatool-BE } { No ~ support ~ for ~ date ~ style ~ ` \l__datatool_BE_datestyle_tl ' ~ with ~ variant ~ ` \l__datatool_BE_datevariant_tl ' } #4 } } { \datatool_locale_warn:nn { datatool-BE } { No ~ support ~ for ~ date ~ style ~ ` \l__datatool_BE_datestyle_tl ' } #4 } } % \end{macrocode} % %\subsubsection{Date Parsing} %Use command \cs{datatool\_}\meta{style}\verb|_parse_date:NNnTF| %with regular expression %\begin{definition} %\cs{c\_datatool\_}\meta{variant}\verb|_anchored_|\meta{style}\verb|_date_regex| %\end{definition} % \begin{macrocode} \cs_new:Nn \datatool_BE_parse_date:NnTF { \cs_if_exist:cTF { datatool_ \l__datatool_BE_datestyle_tl _parse_date:NNnTF } { \cs_if_exist:cTF { c_datatool_ \l__datatool_BE_datevariant_tl _anchored_ \l__datatool_BE_datestyle_tl _date_regex } { \exp_args:cc { datatool_ \l__datatool_BE_datestyle_tl _parse_date:NNnTF } { c_datatool_ \l__datatool_BE_datevariant_tl _anchored_ \l__datatool_BE_datestyle_tl _date_regex } #1 { #2 } { #3 } { #4 } } { \datatool_locale_warn:nn { datatool-BE } { No ~ support ~ for ~ date ~ style ~ ` \l__datatool_BE_datestyle_tl ' ~ with ~ variant ~ ` \l__datatool_BE_datevariant_tl ' } #4 } } { \datatool_locale_warn:nn { datatool-BE } { No ~ support ~ for ~ date ~ style ~ ` \l__datatool_BE_datestyle_tl ' } #4 } } % \end{macrocode} % %\subsubsection{Time Parsing} %Use command \cs{datatool\_}\meta{style}\verb|_parse_time:NNnTF| %with regular expression %\begin{definition} %\cs{c\_datatool\_}\meta{variant}\verb|_anchored_|\meta{style}\verb|_time_regex| %\end{definition} % \begin{macrocode} \cs_new:Nn \datatool_BE_parse_time:NnTF { \cs_if_exist:cTF { c_datatool_ \l__datatool_BE_timevariant_tl _anchored_hhmmss_time_regex } { \datatool_hhmmss_parse_time:cNnTF { c_datatool_ \l__datatool_BE_timevariant_tl _anchored_hhmmss_time_regex } #1 { #2 } { #3 } { #4 } } { \datatool_locale_warn:nn { datatool-BE } { No ~ support ~ for ~ time ~ variant ~ ` \l__datatool_BE_timevariant_tl ' } #4 } } % \end{macrocode} % %\subsubsection{Time Zone Mapping} %Define time zone mapping command for this region: % \begin{macrocode} \cs_new:Nn \datatool_BE_get_timezone_map:n { \datatool_region_get_timezone_map:n { BE / #1 } } % \end{macrocode} %Define time zone IDs for this region (one-way map from ID to offset): % \begin{macrocode} \datatool_region_set_timezone_map:nn { BE / WEST } { +01:00 } \datatool_region_set_timezone_map:nn { BE / WET } { +00:00 } \datatool_region_set_timezone_map:nn { BE / EEST } { +03:00 } \datatool_region_set_timezone_map:nn { BE / EET } { +02:00 } \datatool_region_set_timezone_map:nn { BE / CEST } { +02:00 } \datatool_region_set_timezone_map:nn { BE / CET } { +01:00 } \datatool_region_set_timezone_map:nn { BE / GMT } { +00:00 } % \end{macrocode} % %\subsection{Options} %Define options for this region: % \begin{macrocode} \datatool_locale_define_keys:nn { BE } { number-style .choices:nn = { default , dialect , thinspace } { \exp_args:NNe \renewcommand \datatoolBESetNumberChars { \exp_not:N \bool_if:NT \exp_not:N \l_datatool_region_set_numberchars_bool { \exp_not:c { datatool_BE_set_numberchars_ \l_keys_choice_tl : } } } \tl_if_eq:NnT \l_datatool_current_region_tl { BE } { \datatoolBESetNumberChars } } , % \end{macrocode} % Currency symbol before or after value: % \begin{macrocode} currency-symbol-position .choice: , currency-symbol-position / before .code:n = { \cs_set_eq:NN \datatool_BE_currency_position:nn \dtlcurrprefixfmt } , currency-symbol-position / after .code:n = { \cs_set_eq:NN \datatool_BE_currency_position:nn \dtlcurrsuffixfmt } , % \end{macrocode} % Separator between currency symbol (not code) and value: % \begin{macrocode} currency-symbol-sep .choice: , currency-symbol-sep / none .code:n = { \tl_clear:N \l_datatool_BE_sym_sep_tl } , currency-symbol-sep / thin-space .code:n = { \tl_set:Nn \l_datatool_BE_sym_sep_tl { \, } } , currency-symbol-sep / space .code:n = { \tl_set:Nn \l_datatool_BE_sym_sep_tl { ~ } } , currency-symbol-sep / nbsp .code:n = { \tl_set:Nn \l_datatool_BE_sym_sep_tl { \nobreakspace } } , currency-symbol-sep .initial:n = { none } , % \end{macrocode} % Date and time styles: % \begin{macrocode} date-style .choice: , date-style / dmyyyy .code: n = { \tl_set:Nn \l__datatool_BE_datestyle_tl { ddmmyyyy } } , date-style / mdyyyy .code: n = { \tl_set:Nn \l__datatool_BE_datestyle_tl { mmddyyyy } } , date-style / yyyymd .code: n = { \tl_set:Nn \l__datatool_BE_datestyle_tl { yyyymmdd } } , date-style / dmyy .code: n = { \tl_set:Nn \l__datatool_BE_datestyle_tl { ddmmyy } } , date-style / mdyy .code: n = { \tl_set:Nn \l__datatool_BE_datestyle_tl { mmddyy } } , date-style / yymd .code: n = { \tl_set:Nn \l__datatool_BE_datestyle_tl { yymmdd } } , date-variant .choice: , date-variant / slash .code:n = { \tl_set:Nn \l__datatool_BE_datevariant_tl { slash } } , date-variant / hyphen .code:n = { \tl_set:Nn \l__datatool_BE_datevariant_tl { hyphen } } , date-variant / dot .code:n = { \tl_set:Nn \l__datatool_BE_datevariant_tl { dot } } , date-variant / dialect .code:n = { \tl_set:Nn \l__datatool_BE_datevariant_tl { \l_datatool_current_language_tl } } , time-variant .choice: , time-variant / colon .code:n = { \tl_set:Nn \l__datatool_BE_timevariant_tl { colon } } , time-variant / dot .code:n = { \tl_set:Nn \l__datatool_BE_timevariant_tl { dot } } , time-variant / dialect .code:n = { \tl_if_eq:NnTF \l__datatool_BE_timevariant_tl { dot } { \tl_set:Nn \l__datatool_BE_timevariant_tl { \l_datatool_current_language_tl _dot } } { \tl_if_in:NnF \l__datatool_BE_timevariant_tl { \l_datatool_current_language_tl } { \tl_set:Nn \l__datatool_BE_timevariant_tl { \l_datatool_current_language_tl _colon } } } } , time-variant / dialect-colon .code:n = { \tl_set:Nn \l__datatool_BE_timevariant_tl { \l_datatool_current_language_tl _colon } } , time-variant / dialect-dot .code:n = { \tl_set:Nn \l__datatool_BE_timevariant_tl { \l_datatool_current_language_tl _dot } } , } % \end{macrocode} % %\subsection{Hooks} %Command to update temporal parsing commands for this region: % \begin{macrocode} \newcommand \datatoolBESetTemporalParsers { \renewcommand \DTLCurrentLocaleParseTimeStamp { \datatool_BE_parse_timestamp:NnTF } \renewcommand \DTLCurrentLocaleParseDate { \datatool_BE_parse_date:NnTF } \renewcommand \DTLCurrentLocaleParseTime { \datatool_BE_parse_time:NnTF } \let \DTLCurrentLocaleGetTimeZoneMap \datatool_BE_get_timezone_map:n } % \end{macrocode} %Set temporal formatting commands for this region. Currently this %just resets to the default, but may change in future. %Note that the defaults test if the applicable \sty{datetime2} %command is available and will fallback on ISO if not defined. %Bear in mind that the default style for \sty{datetime2} is %\texttt{iso} so there won't be a noticeable difference unless the %\sty{datetime2} regional setting is on. % \begin{macrocode} \newcommand \datatoolBESetTemporalFormatters { \let \DTLCurrentLocaleFormatDate \datatool_default_date_fmt:nnnn \let \DTLCurrentLocaleFormatTime \datatool_default_time_fmt:nnn \let \DTLCurrentLocaleFormatTimeZone \datatool_default_timezone_fmt:nn \let \DTLCurrentLocaleFormatTimeStampNoZone \datatool_default_timestamp_fmt:nnnnnnn \let \DTLCurrentLocaleFormatTimeStampWithZone \datatool_default_timestamp_fmt:nnnnnnnnn \renewcommand \DTLCurrentLocaleTimeStampFmtSep { ~ } } % \end{macrocode} %Command to update currency and temporal parsing commands for this region: % \begin{macrocode} \newcommand \DTLBELocaleHook { \datatoolBESetNumberChars \datatoolBESetCurrency \datatoolBESetTemporalParsers \datatoolBESetTemporalFormatters % \end{macrocode} %Allow language files to reference the region: % \begin{macrocode} \tl_set:Nn \l_datatool_current_region_tl { BE } } % \end{macrocode} % % Finished with \LaTeX3 syntax. % \begin{macrocode} \ExplSyntaxOff % \end{macrocode} %Note that the hook is added to the captions by \sty{datatool-base} %not by the region file. %\iffalse % \begin{macrocode} % % \end{macrocode} %\fi %\iffalse % \begin{macrocode} %<*datatool-CA.ldf> % \end{macrocode} %\fi %\section{datatool-CA.ldf}\label{sec:code:datatool-CA} % Support for region CA. % \begin{macrocode} \TrackLangProvidesResource{CA}[2025/03/01 v1.0] % \end{macrocode} % Switch on \LaTeX3 syntax: % \begin{macrocode} \ExplSyntaxOn % \end{macrocode} % %\subsection{Numbers and Currency} % NB the number group and decimal symbols for this region should be % set in the files \file{datatool-en-CA.ldf} and % \file{datatool-fr-CA.ldf} as they depend on both the language % and region. Those files should be included in the applicable % \sty{datatool} language module. For example, % \file{datatool-en-CA.ldf} is provided with % \file{datatool-english}. % However, a region hook is still needed to support %\verb|\DTLsetup{numeric={region-number-chars}}| although it's not %added to the language hook: % \begin{macrocode} \newcommand \datatoolCASetNumberChars { \bool_if:NT \l_datatool_region_set_numberchars_bool { \tl_if_empty:NTF \l_datatool_current_language_tl { \datatool_locale_warn:nn { datatool-CA } { No ~ current ~ language: ~ can't ~ set ~ number ~ group ~ and ~ decimal ~ characters } } { \cs_if_exist_use:cF { datatool \l_datatool_current_language_tl CASetNumberChars } { \datatool_locale_warn:nn { datatool-CA } { No ~ support ~ for ~ locale ~ ` \l_datatool_current_language_tl - CA': ~ can't ~ set ~ number ~ group ~ and ~ decimal ~ characters } } } } } % \end{macrocode} %How to format the position of the currency symbol in relation to the value. % \begin{macrocode} \cs_new:Nn \datatool_CA_currency_position:nn { \dtlcurrprefixfmt { #1 } { #2 } } % \end{macrocode} %Separator between currency symbol and value. % \begin{macrocode} \tl_new:N \l_datatool_CA_sym_sep_tl % \end{macrocode} % Set the currency format for this region. % \begin{macrocode} \newcommand \datatoolCAcurrencyfmt [ 2 ] { \datatool_CA_currency_position:nn { \datatoolCAsymbolprefix { CA } #1 } { #2 } } % \end{macrocode} %Prefix for symbol, if required. % \begin{macrocode} \newcommand \datatoolCAsymbolprefix [ 1 ] { } % \end{macrocode} % Define the currency symbols for this region. % \begin{macrocode} \datatool_def_currency:nnnV { \datatoolCAcurrencyfmt } { CAD } { \$ } \c_dollar_str % \end{macrocode} %Register the currency code with this region: % \begin{macrocode} \datatool_register_regional_currency_code:nn { CA } { CAD } % \end{macrocode} % Provide a command to set the currency for this region (for use % with any hook used when the locale changes). % NB this should do nothing with % \verb|\DTLsetup{region-currency=false}| % \begin{macrocode} \newcommand \datatoolCASetCurrency { \bool_if:NT \l_datatool_region_set_currency_bool { \DTLsetdefaultcurrency { CAD } % \end{macrocode} %Number of digits that \cs{DTLdecimaltocurrency} should round to: % \begin{macrocode} \renewcommand \DTLCurrentLocaleCurrencyDP { 2 } % \end{macrocode} %Separator between symbol and value: % \begin{macrocode} \renewcommand \dtlcurrfmtsymsep { \l_datatool_CA_sym_sep_tl } } } % \end{macrocode} %\subsection{Date and Time Parsing} % Date parsing is more complicated as there seems to be a confusing % mixture of ISO, day/month/year and month/day/year formats. % This defaults to year-month-day and should be changed as % appropriate using \cs{DTLsetLocaleOptions}. For example: %\begin{dispListing} %\DTLsetLocaleOptions{CA}{date-style=dmyyyy, date-variant=slash} %\end{dispListing} %An appropriate language file will need to also be installed to %parse dates containing month names or day of week names. % % Provide a way to configure parsing style. % \begin{macrocode} \tl_new:N \l__datatool_CA_datevariant_tl \tl_set:Nn \l__datatool_CA_datevariant_tl { hyphen } % \end{macrocode} %NB These token lists are used to form command names. The following is not %a format string. % \begin{macrocode} \tl_new:N \l__datatool_CA_datestyle_tl \tl_set:Nn \l__datatool_CA_datestyle_tl { yyyymmdd } \tl_new:N \l__datatool_CA_timevariant_tl \tl_set:Nn \l__datatool_CA_timevariant_tl { colon } % \end{macrocode} % %Each parsing command defined below has final \marg{true} and \marg{false} %arguments (\code{TF}). These are used if parsing was successful (true) or if %parsing failed (false). The internal commands used by %\sty{datatool-base} have no need for solo branches (only \code{T} or only %\code{F}) so these commands are simply defined with \verb|\cs_new:Nn| %not as conditionals. % %\subsubsection{Time Stamp Parsing} %Use command %\begin{definition} %\cs{datatool\_}\meta{date-style}\verb|_hhmmss_tz_parse_timestamp:nnNnTF| %\end{definition} %with date regular expression %\begin{definition} %\cs{c\_datatool\_}\meta{date-variant}\verb|_|\meta{date-style}\verb|_date_regex| %\end{definition} %and time regular expression %\begin{definition} %\cs{c\_datatool\_}\meta{time-variant}\verb|_hhmmss_time_regex| %\end{definition} % \begin{macrocode} \cs_new:Nn \datatool_CA_parse_timestamp:NnTF { \cs_if_exist:cTF { datatool_ \l__datatool_CA_datestyle_tl _hhmmss_tz_parse_timestamp:ccNnTF } { \cs_if_exist:cTF { c_datatool_ \l__datatool_CA_datevariant_tl _ \l__datatool_CA_datestyle_tl _date_regex } { \cs_if_exist:cTF { c_datatool_ \l__datatool_CA_timevariant_tl _hhmmss_time_regex } { \use:c { datatool_ \l__datatool_CA_datestyle_tl _hhmmss_tz_parse_timestamp:ccNnTF } { c_datatool_ \l__datatool_CA_datevariant_tl _ \l__datatool_CA_datestyle_tl _date_regex } { c_datatool_ \l__datatool_CA_timevariant_tl _hhmmss_time_regex } #1 { #2 } { #3 } { #4 } } { \datatool_locale_warn:nn { datatool-CA } { No ~ support ~ for ~ time ~ variant ~ ` \l__datatool_CA_timevariant_tl ' } #4 } } { \datatool_locale_warn:nn { datatool-CA } { No ~ support ~ for ~ date ~ style ~ ` \l__datatool_CA_datestyle_tl ' ~ with ~ variant ~ ` \l__datatool_CA_datevariant_tl ' } #4 } } { \datatool_locale_warn:nn { datatool-CA } { No ~ support ~ for ~ date ~ style ~ ` \l__datatool_CA_datestyle_tl ' } #4 } } % \end{macrocode} %\subsubsection{Date Parsing} %Use command \cs{datatool\_}\meta{style}\verb|_parse_date:NNnTF| %with regular expression %\begin{definition} %\cs{c\_datatool\_}\meta{variant}\verb|_anchored_|\meta{style}\verb|_date_regex| %\end{definition} % \begin{macrocode} \cs_new:Nn \datatool_CA_parse_date:NnTF { \cs_if_exist:cTF { datatool_ \l__datatool_CA_datestyle_tl _parse_date:NNnTF } { \cs_if_exist:cTF { c_datatool_ \l__datatool_CA_datevariant_tl _anchored_ \l__datatool_CA_datestyle_tl _date_regex } { \exp_args:cc { datatool_ \l__datatool_CA_datestyle_tl _parse_date:NNnTF } { c_datatool_ \l__datatool_CA_datevariant_tl _anchored_ \l__datatool_CA_datestyle_tl _date_regex } #1 { #2 } { #3 } { #4 } } { \datatool_locale_warn:nn { datatool-CA } { No ~ support ~ for ~ date ~ style ~ ` \l__datatool_CA_datestyle_tl ' ~ with ~ variant ~ ` \l__datatool_CA_datevariant_tl ' } #4 } } { \datatool_locale_warn:nn { datatool-CA } { No ~ support ~ for ~ date ~ style ~ ` \l__datatool_CA_datestyle_tl ' } #4 } } % \end{macrocode} %\subsubsection{Time Parsing} %Use command \cs{datatool\_}\meta{style}\verb|_parse_time:NNnTF| %with regular expression %\begin{definition} %\cs{c\_datatool\_}\meta{variant}\verb|_anchored_|\meta{style}\verb|_time_regex| %\end{definition} % \begin{macrocode} \cs_new:Nn \datatool_CA_parse_time:NnTF { \cs_if_exist:cTF { c_datatool_ \l__datatool_CA_timevariant_tl _anchored_hhmmss_time_regex } { \datatool_hhmmss_parse_time:cNnTF { c_datatool_ \l__datatool_CA_timevariant_tl _anchored_hhmmss_time_regex } #1 { #2 } { #3 } { #4 } } { \datatool_locale_warn:nn { datatool-CA } { No ~ support ~ for ~ time ~ variant ~ ` \l__datatool_CA_timevariant_tl ' } #4 } } % \end{macrocode} %\subsubsection{Time Zone Mappings} %Define time zone mapping command for this region: % \begin{macrocode} \cs_new:Nn \datatool_CA_get_timezone_map:n { \datatool_region_get_timezone_map:n { CA / #1 } } % \end{macrocode} %Define time zone IDs for this region (one-way map from ID to offset): % \begin{macrocode} \datatool_region_set_timezone_map:nn { CA / NDT } { -02:30 } \datatool_region_set_timezone_map:nn { CA / NST } { -03:30 } \datatool_region_set_timezone_map:nn { CA / AST } { -04:00 } \datatool_region_set_timezone_map:nn { CA / ADT } { -03:00 } \datatool_region_set_timezone_map:nn { CA / EST } { -05:00 } \datatool_region_set_timezone_map:nn { CA / EDT } { -04:00 } \datatool_region_set_timezone_map:nn { CA / CST } { -06:00 } \datatool_region_set_timezone_map:nn { CA / CDT } { -05:00 } \datatool_region_set_timezone_map:nn { CA / MST } { -07:00 } \datatool_region_set_timezone_map:nn { CA / MDT } { -06:00 } \datatool_region_set_timezone_map:nn { CA / PST } { -08:00 } \datatool_region_set_timezone_map:nn { CA / PDT } { -07:00 } % \end{macrocode} %\subsection{Options} %Define options for this region: % \begin{macrocode} \datatool_locale_define_keys:nn { CA } { number-style .code:n = { \exp_args:Ne \keys_if_exist:nnTF { datatool / locale / \l_datatool_current_language_tl - CA } { number-style } { \exp_args:Ne \keys_set:nn { datatool / locale / \l_datatool_current_language_tl - CA } { number-style = { #1 } } } { \datatool_locale_warn:nn { datatool-CA } { No ~ number-style ~ available ~ for ~ current ~ language ~ ` \l_datatool_current_language_tl ' ~ (additional ~ language ~ module ~ may ~ need ~ installing) } } } , % \end{macrocode} % Currency symbol before or after value: % \begin{macrocode} currency-symbol-position .choice: , currency-symbol-position / before .code:n = { \cs_set_eq:NN \datatool_CA_currency_position:nn \dtlcurrprefixfmt } , currency-symbol-position / after .code:n = { \cs_set_eq:NN \datatool_CA_currency_position:nn \dtlcurrsuffixfmt } , % \end{macrocode} % Should the currency symbol be prefixed with the region code: % \begin{macrocode} currency-symbol-prefix .choice: , currency-symbol-prefix / false .code:n = { \cs_set_eq:NN \datatoolCAsymbolprefix \use_none:n } , currency-symbol-prefix / true .code:n = { \cs_set_eq:NN \datatoolCAsymbolprefix \datatool_currency_symbol_region_prefix:n } , currency-symbol-prefix .default:n = { true } , % \end{macrocode} % Separator between currency symbol (not code) and value: % \begin{macrocode} currency-symbol-sep .choice: , currency-symbol-sep / none .code:n = { \tl_clear:N \l_datatool_CA_sym_sep_tl } , currency-symbol-sep / thin-space .code:n = { \tl_set:Nn \l_datatool_CA_sym_sep_tl { \, } } , currency-symbol-sep / space .code:n = { \tl_set:Nn \l_datatool_CA_sym_sep_tl { ~ } } , currency-symbol-sep / nbsp .code:n = { \tl_set:Nn \l_datatool_CA_sym_sep_tl { \nobreakspace } } , currency-symbol-sep .initial:n = { none } , % \end{macrocode} % Date and time styles: % \begin{macrocode} date-style .choice: , date-style / dmyyyy .code: n = { \tl_set:Nn \l__datatool_CA_datestyle_tl { ddmmyyyy } } , date-style / mdyyyy .code: n = { \tl_set:Nn \l__datatool_CA_datestyle_tl { mmddyyyy } } , date-style / yyyymd .code: n = { \tl_set:Nn \l__datatool_CA_datestyle_tl { yyyymmdd } } , date-style / dmyy .code: n = { \tl_set:Nn \l__datatool_CA_datestyle_tl { ddmmyy } } , date-style / mdyy .code: n = { \tl_set:Nn \l__datatool_CA_datestyle_tl { mmddyy } } , date-style / yymd .code: n = { \tl_set:Nn \l__datatool_CA_datestyle_tl { yymmdd } } , date-variant .choice: , date-variant / slash .code:n = { \tl_set:Nn \l__datatool_CA_datevariant_tl { slash } } , date-variant / hyphen .code:n = { \tl_set:Nn \l__datatool_CA_datevariant_tl { hyphen } } , date-variant / dot .code:n = { \tl_set:Nn \l__datatool_CA_datevariant_tl { dot } } , date-variant / dialect .code:n = { \tl_set:Nn \l__datatool_CA_datevariant_tl { \l_datatool_current_language_tl } } , time-variant .choice: , time-variant / colon .code:n = { \tl_set:Nn \l__datatool_CA_timevariant_tl { colon } } , time-variant / dot .code:n = { \tl_set:Nn \l__datatool_CA_timevariant_tl { dot } } , time-variant / dialect .code:n = { \tl_if_eq:NnTF \l__datatool_CA_timevariant_tl { dot } { \tl_set:Nn \l__datatool_CA_timevariant_tl { \l_datatool_current_language_tl _dot } } { \tl_if_in:NnF \l__datatool_CA_timevariant_tl { \l_datatool_current_language_tl } { \tl_set:Nn \l__datatool_CA_timevariant_tl { \l_datatool_current_language_tl _colon } } } } , time-variant / dialect-colon .code:n = { \tl_set:Nn \l__datatool_CA_timevariant_tl { \l_datatool_current_language_tl _colon } } , time-variant / dialect-dot .code:n = { \tl_set:Nn \l__datatool_CA_timevariant_tl { \l_datatool_current_language_tl _dot } } , } % \end{macrocode} % %\subsection{Hooks} %Command to update temporal parsing commands for this region: % \begin{macrocode} \newcommand \datatoolCASetTemporalParsers { \renewcommand \DTLCurrentLocaleParseTimeStamp { \datatool_CA_parse_timestamp:NnTF } \renewcommand \DTLCurrentLocaleParseDate { \datatool_CA_parse_date:NnTF } \renewcommand \DTLCurrentLocaleParseTime { \datatool_CA_parse_time:NnTF } \let \DTLCurrentLocaleGetTimeZoneMap \datatool_CA_get_timezone_map:n } % \end{macrocode} %Set temporal formatting commands for this region. Currently this %just resets to the default, but may change in future. %Note that the defaults test if the applicable \sty{datetime2} %command is available and will fallback on ISO if not defined. %Bear in mind that the default style for \sty{datetime2} is %\texttt{iso} so there won't be a noticeable difference unless the %\sty{datetime2} regional setting is on. % \begin{macrocode} \newcommand \datatoolCASetTemporalFormatters { \let \DTLCurrentLocaleFormatDate \datatool_default_date_fmt:nnnn \let \DTLCurrentLocaleFormatTime \datatool_default_time_fmt:nnn \let \DTLCurrentLocaleFormatTimeZone \datatool_default_timezone_fmt:nn \let \DTLCurrentLocaleFormatTimeStampNoZone \datatool_default_timestamp_fmt:nnnnnnn \let \DTLCurrentLocaleFormatTimeStampWithZone \datatool_default_timestamp_fmt:nnnnnnnnn \renewcommand \DTLCurrentLocaleTimeStampFmtSep { ~ } } % \end{macrocode} % %Command to update currency and temporal parsing commands for this region: % \begin{macrocode} \newcommand \DTLCALocaleHook { \datatoolCASetCurrency \datatoolCASetTemporalParsers \datatoolCASetTemporalFormatters % \end{macrocode} %Allow language files to reference the region: % \begin{macrocode} \tl_set:Nn \l_datatool_current_region_tl { CA } } % \end{macrocode} % % Finished with \LaTeX3 syntax. % \begin{macrocode} \ExplSyntaxOff % \end{macrocode} %Note that the hook is added to the captions by \sty{datatool-base} %not by the region file. %\iffalse % \begin{macrocode} % % \end{macrocode} %\fi %\iffalse % \begin{macrocode} %<*datatool-FK.ldf> % \end{macrocode} %\fi %\section{datatool-FK.ldf}\label{sec:datatool-FK} % Support for region FK. % \begin{macrocode} \TrackLangProvidesResource{FK}[2025/03/01 v1.0] % \end{macrocode} % Switch on \LaTeX3 syntax: % \begin{macrocode} \ExplSyntaxOn % \end{macrocode} % %\subsection{Numbers and Currency} %Set the number group and decimal symbols for this region. % \begin{macrocode} \cs_new:Nn \datatool_FK_set_numberchars_official: { \datatool_set_numberchars:nn { , } { . } } % \end{macrocode} %Unofficial style. % \begin{macrocode} \cs_new:Nn \datatool_FK_set_numberchars_unofficial: { \datatool_set_thinspace_group_decimal_char:n { . } } % \end{macrocode} %Hook to set the number group and decimal characters for the region: % \begin{macrocode} \newcommand \datatoolFKSetNumberChars { \bool_if:NT \l_datatool_region_set_numberchars_bool { \datatool_FK_set_numberchars_official: } } % \end{macrocode} %How to format the position of the currency symbol in relation to the value. % \begin{macrocode} \cs_new:Nn \datatool_FK_currency_position:nn { \dtlcurrprefixfmt { #1 } { #2 } } % \end{macrocode} %Separator between currency symbol and value. % \begin{macrocode} \tl_new:N \l_datatool_FK_sym_sep_tl % \end{macrocode} % Set the currency format for this region. % \begin{macrocode} \newcommand \datatoolFKcurrencyfmt [ 2 ] { \datatool_FK_currency_position:nn { \datatoolFKsymbolprefix { FK } #1 } { #2 } } % \end{macrocode} %Prefix for symbol, if required. % \begin{macrocode} \newcommand \datatoolFKsymbolprefix [ 1 ] { } % \end{macrocode} % Define the currency symbols for this region. % \begin{macrocode} \datatool_def_currency:nnnV { \datatoolFKcurrencyfmt } { FKP } { \pounds } \l_datatool_pound_tl % \end{macrocode} % Register the currency code with this region: % \begin{macrocode} \datatool_register_regional_currency_code:nn { FK } { FKP } % \end{macrocode} % Provide a command to set the currency for this region (for use % with any hook used when the locale changes). % NB this should do nothing with % \verb|\DTLsetup{region-currency=false}| % \begin{macrocode} \newcommand \datatoolFKSetCurrency { \bool_if:NT \l_datatool_region_set_currency_bool { \DTLsetdefaultcurrency { FKP } % \end{macrocode} %Number of digits that \cs{DTLdecimaltocurrency} should round to: % \begin{macrocode} \renewcommand \DTLCurrentLocaleCurrencyDP { 2 } % \end{macrocode} %Separator between symbol and value: % \begin{macrocode} \renewcommand \dtlcurrfmtsymsep { \l_datatool_FK_sym_sep_tl } } } % \end{macrocode} % %\subsection{Date and Time Parsing} % This defaults to day/month/year but may be changed with \cs{DTLsetLocaleOptions}. For example: %\begin{dispListing} %\DTLsetLocaleOptions{FK}{date-style=dmyyyy, date-variant=slash} %\end{dispListing} %An appropriate language file will need to also be installed to %parse dates containing month names or day of week names. % %Provide a way to configure parsing style. % \begin{macrocode} \tl_new:N \l__datatool_FK_datevariant_tl \tl_set:Nn \l__datatool_FK_datevariant_tl { slash } % \end{macrocode} %NB These token lists are used to form command names. The following is not %a format string. % \begin{macrocode} \tl_new:N \l__datatool_FK_datestyle_tl \tl_set:Nn \l__datatool_FK_datestyle_tl { ddmmyyyy } \tl_new:N \l__datatool_FK_timevariant_tl \tl_set:Nn \l__datatool_FK_timevariant_tl { colon } % \end{macrocode} % %Each parsing command defined below has final \marg{true} and \marg{false} %arguments (\code{TF}). These are used if parsing was successful (true) or if %parsing failed (false). The internal commands used by %\sty{datatool-base} have no need for solo branches (only \code{T} or only %\code{F}) so these commands are simply defined with \verb|\cs_new:Nn| %not as conditionals. % %\subsubsection{Time Stamp Parsing} %Use command %\begin{definition} %\cs{datatool\_}\meta{date-style}\verb|_hhmmss_tz_parse_timestamp:nnNnTF| %\end{definition} %with date regular expression %\begin{definition} %\cs{c\_datatool\_}\meta{date-variant}\verb|_|\meta{date-style}\verb|_date_regex| %\end{definition} %and time regular expression %\begin{definition} %\cs{c\_datatool\_}\meta{time-variant}\verb|_hhmmss_time_regex| %\end{definition} % \begin{macrocode} \cs_new:Nn \datatool_FK_parse_timestamp:NnTF { \cs_if_exist:cTF { datatool_ \l__datatool_FK_datestyle_tl _hhmmss_tz_parse_timestamp:ccNnTF } { \cs_if_exist:cTF { c_datatool_ \l__datatool_FK_datevariant_tl _ \l__datatool_FK_datestyle_tl _date_regex } { \cs_if_exist:cTF { c_datatool_ \l__datatool_FK_timevariant_tl _hhmmss_time_regex } { \use:c { datatool_ \l__datatool_FK_datestyle_tl _hhmmss_tz_parse_timestamp:ccNnTF } { c_datatool_ \l__datatool_FK_datevariant_tl _ \l__datatool_FK_datestyle_tl _date_regex } { c_datatool_ \l__datatool_FK_timevariant_tl _hhmmss_time_regex } #1 { #2 } { #3 } { #4 } } { \datatool_warn_check_head_language_empty:Vnnn \l__datatool_FK_timevariant_tl { datatool-FK } { No ~ language ~ support ~ for ~ time ~ variant ~ ` \exp_args:Ne \tl_tail:n { \l__datatool_FK_timevariant_tl } ' } { No ~ support ~ for ~ time ~ variant ~ ` \l__datatool_FK_timevariant_tl ' } #4 } } { \datatool_warn_check_head_language_empty:Vnnn \l__datatool_FK_datevariant_tl { datatool-FK } { No ~ language ~ support ~ for ~ date ~ style ~ ` \l__datatool_FK_datestyle_tl ' } { No ~ support ~ for ~ date ~ style ~ ` \l__datatool_FK_datestyle_tl ' ~ with ~ variant ~ ` \l__datatool_FK_datevariant_tl ' } #4 } } { \datatool_locale_warn:nn { datatool-FK } { No ~ support ~ for ~ date ~ style ~ ` \l__datatool_FK_datestyle_tl ' } #4 } } % \end{macrocode} % %\subsubsection{Date Parsing} %Use command \cs{datatool\_}\meta{style}\verb|_parse_date:NNnTF| %with regular expression %\begin{definition} %\cs{c\_datatool\_}\meta{variant}\verb|_anchored_|\meta{style}\verb|_date_regex| %\end{definition} % \begin{macrocode} \cs_new:Nn \datatool_FK_parse_date:NnTF { \cs_if_exist:cTF { datatool_ \l__datatool_FK_datestyle_tl _parse_date:NNnTF } { \cs_if_exist:cTF { c_datatool_ \l__datatool_FK_datevariant_tl _anchored_ \l__datatool_FK_datestyle_tl _date_regex } { \exp_args:cc { datatool_ \l__datatool_FK_datestyle_tl _parse_date:NNnTF } { c_datatool_ \l__datatool_FK_datevariant_tl _anchored_ \l__datatool_FK_datestyle_tl _date_regex } #1 { #2 } { #3 } { #4 } } { \datatool_warn_check_head_language_empty:Vnnn \l__datatool_FK_datevariant_tl { datatool-FK } { No ~ language ~ support ~ for ~ date ~ style ~ ` \l__datatool_FK_datestyle_tl ' } { No ~ support ~ for ~ date ~ style ~ ` \l__datatool_FK_datestyle_tl ' ~ with ~ variant ~ ` \l__datatool_FK_datevariant_tl ' } #4 } } { \datatool_locale_warn:nn { datatool-FK } { No ~ support ~ for ~ date ~ style ~ ` \l__datatool_FK_datestyle_tl ' } #4 } } % \end{macrocode} % %\subsubsection{Time Parsing} %Use command \cs{datatool\_}\meta{style}\verb|_parse_time:NNnTF| %with regular expression %\begin{definition} %\cs{c\_datatool\_}\meta{variant}\verb|_anchored_|\meta{style}\verb|_time_regex| %\end{definition} % \begin{macrocode} \cs_new:Nn \datatool_FK_parse_time:NnTF { \cs_if_exist:cTF { c_datatool_ \l__datatool_FK_timevariant_tl _anchored_hhmmss_time_regex } { \datatool_hhmmss_parse_time:cNnTF { c_datatool_ \l__datatool_FK_timevariant_tl _anchored_hhmmss_time_regex } #1 { #2 } { #3 } { #4 } } { \datatool_warn_check_head_language_empty:Vnnn \l__datatool_FK_timevariant_tl { datatool-FK } { No ~ language ~ support ~ for ~ time ~ variant ~ ` \exp_args:Ne \tl_tail:n { \l__datatool_FK_timevariant_tl } ' } { No ~ support ~ for ~ time ~ variant ~ ` \l__datatool_FK_timevariant_tl ' } #4 } } % \end{macrocode} % %\subsubsection{Time Zone Mappings} %Define time zone mapping command for this region: % \begin{macrocode} \cs_new:Nn \datatool_FK_get_timezone_map:n { \datatool_region_get_timezone_map:n { FK / #1 } } % \end{macrocode} %Define time zone IDs for this region (one-way map from ID to offset): % \begin{macrocode} \datatool_region_set_timezone_map:nn { FK / BST } { +01:00 } \datatool_region_set_timezone_map:nn { FK / FKST } { -03:00 } \datatool_region_set_timezone_map:nn { FK / GMT } { +00:00 } % \end{macrocode} % %\subsection{Options} %Define options for this region: % \begin{macrocode} \datatool_locale_define_keys:nn { FK } { number-style .choices:nn = { official, unofficial } { \exp_args:NNe \renewcommand \datatoolFKSetNumberChars { \exp_not:N \bool_if:NT \exp_not:N \l_datatool_region_set_numberchars_bool { \exp_not:c { datatool_FK_set_numberchars_ \l_keys_choice_tl : } } } \tl_if_eq:NnT \l_datatool_current_region_tl { FK } { \datatoolFKSetNumberChars } } , % \end{macrocode} % Currency symbol before or after value: % \begin{macrocode} currency-symbol-position .choice: , currency-symbol-position / before .code:n = { \cs_set_eq:NN \datatool_FK_currency_position:nn \dtlcurrprefixfmt } , currency-symbol-position / after .code:n = { \cs_set_eq:NN \datatool_FK_currency_position:nn \dtlcurrsuffixfmt } , % \end{macrocode} % Should the currency symbol be prefixed with the region code: % \begin{macrocode} currency-symbol-prefix .choice: , currency-symbol-prefix / false .code:n = { \cs_set_eq:NN \datatoolFKsymbolprefix \use_none:n } , currency-symbol-prefix / true .code:n = { \cs_set_eq:NN \datatoolFKsymbolprefix \datatool_currency_symbol_region_prefix:n } , currency-symbol-prefix .default:n = { true } , % \end{macrocode} % Separator between currency symbol (not code) and value: % \begin{macrocode} currency-symbol-sep .choice: , currency-symbol-sep / none .code:n = { \tl_clear:N \l_datatool_FK_sym_sep_tl } , currency-symbol-sep / thin-space .code:n = { \tl_set:Nn \l_datatool_FK_sym_sep_tl { \, } } , currency-symbol-sep / space .code:n = { \tl_set:Nn \l_datatool_FK_sym_sep_tl { ~ } } , currency-symbol-sep / nbsp .code:n = { \tl_set:Nn \l_datatool_FK_sym_sep_tl { \nobreakspace } } , currency-symbol-sep . initial:n = { none } , % \end{macrocode} % Date and time styles: % \begin{macrocode} date-style .choice: , date-style / dmyyyy .code: n = { \tl_set:Nn \l__datatool_FK_datestyle_tl { ddmmyyyy } } , date-style / mdyyyy .code: n = { \tl_set:Nn \l__datatool_FK_datestyle_tl { mmddyyyy } } , date-style / yyyymd .code: n = { \tl_set:Nn \l__datatool_FK_datestyle_tl { yyyymmdd } } , date-style / dmyy .code: n = { \tl_set:Nn \l__datatool_FK_datestyle_tl { ddmmyy } } , date-style / mdyy .code: n = { \tl_set:Nn \l__datatool_FK_datestyle_tl { mmddyy } } , date-style / yymd .code: n = { \tl_set:Nn \l__datatool_FK_datestyle_tl { yymmdd } } , date-variant .choice: , date-variant / slash .code:n = { \tl_set:Nn \l__datatool_FK_datevariant_tl { slash } } , date-variant / hyphen .code:n = { \tl_set:Nn \l__datatool_FK_datevariant_tl { hyphen } } , date-variant / dot .code:n = { \tl_set:Nn \l__datatool_FK_datevariant_tl { dot } } , date-variant / dialect .code:n = { \tl_set:Nn \l__datatool_FK_datevariant_tl { \l_datatool_current_language_tl } } , time-variant .choice: , time-variant / colon .code:n = { \tl_set:Nn \l__datatool_FK_timevariant_tl { colon } } , time-variant / dot .code:n = { \tl_set:Nn \l__datatool_FK_timevariant_tl { dot } } , time-variant / dialect .code:n = { \tl_if_eq:NnTF \l__datatool_FK_timevariant_tl { dot } { \tl_set:Nn \l__datatool_FK_timevariant_tl { \l_datatool_current_language_tl _dot } } { \tl_if_in:NnF \l__datatool_FK_timevariant_tl { \l_datatool_current_language_tl } { \tl_set:Nn \l__datatool_FK_timevariant_tl { \l_datatool_current_language_tl _colon } } } } , time-variant / dialect-colon .code:n = { \tl_set:Nn \l__datatool_FK_timevariant_tl { \l_datatool_current_language_tl _colon } } , time-variant / dialect-dot .code:n = { \tl_set:Nn \l__datatool_FK_timevariant_tl { \l_datatool_current_language_tl _dot } } , } % \end{macrocode} % %\subsection{Hooks} %Command to update temporal parsing commands for this region: % \begin{macrocode} \newcommand \datatoolFKSetTemporalParsers { \renewcommand \DTLCurrentLocaleParseTimeStamp { \datatool_FK_parse_timestamp:NnTF } \renewcommand \DTLCurrentLocaleParseDate { \datatool_FK_parse_date:NnTF } \renewcommand \DTLCurrentLocaleParseTime { \datatool_FK_parse_time:NnTF } \let \DTLCurrentLocaleGetTimeZoneMap \datatool_FK_get_timezone_map:n } % \end{macrocode} %Set temporal formatting commands for this region. Currently this %just resets to the default, but may change in future. %Note that the defaults test if the applicable \sty{datetime2} %command is available and will fallback on ISO if not defined. %Bear in mind that the default style for \sty{datetime2} is %\texttt{iso} so there won't be a noticeable difference unless the %\sty{datetime2} regional setting is on. % \begin{macrocode} \newcommand \datatoolFKSetTemporalFormatters { \let \DTLCurrentLocaleFormatDate \datatool_default_date_fmt:nnnn \let \DTLCurrentLocaleFormatTime \datatool_default_time_fmt:nnn \let \DTLCurrentLocaleFormatTimeZone \datatool_default_timezone_fmt:nn \let \DTLCurrentLocaleFormatTimeStampNoZone \datatool_default_timestamp_fmt:nnnnnnn \let \DTLCurrentLocaleFormatTimeStampWithZone \datatool_default_timestamp_fmt:nnnnnnnnn \renewcommand \DTLCurrentLocaleTimeStampFmtSep { ~ } } % \end{macrocode} % % %Command to update currency and temporal parsing commands for this region: % \begin{macrocode} \newcommand \DTLFKLocaleHook { \datatoolFKSetNumberChars \datatoolFKSetCurrency \datatoolFKSetTemporalParsers \datatoolFKSetTemporalFormatters % \end{macrocode} %Allow language files to reference the region: % \begin{macrocode} \tl_set:Nn \l_datatool_current_region_tl { FK } } % \end{macrocode} % % Finished with \LaTeX3 syntax. % \begin{macrocode} \ExplSyntaxOff % \end{macrocode} %Note that the hook is added to the captions by \sty{datatool-base} %not by the region file. %\iffalse % \begin{macrocode} % % \end{macrocode} %\fi %\iffalse % \begin{macrocode} %<*datatool-GB.ldf> % \end{macrocode} %\fi %\section{datatool-GB.ldf}\label{sec:datatool-GB} % Support for region GB. % \begin{macrocode} \TrackLangProvidesResource{GB}[2025/03/01 v1.0] % \end{macrocode} % Switch on \LaTeX3 syntax: % \begin{macrocode} \ExplSyntaxOn % \end{macrocode} %\subsection{Numbers and Currency} % Set the number group and decimal symbols for this region. %Official style has comma number group and decimal dot. % \begin{macrocode} \cs_new:Nn \datatool_GB_set_numberchars_official: { \DTLsetnumberchars { , } { . } } % \end{macrocode} % This will allow a normal space, \cs{,} (thin space command) or % the thin space Unicode character U+2009 as the number group separator when % parsing and will use \cs{,} when formatting. % \begin{macrocode} \cs_new:Nn \datatool_GB_set_numberchars_education: { \datatool_set_thinspace_group_decimal_char:n { . } } % \end{macrocode} %Old style uses mid-dot as the decimal point but allows both middle %dot and low dot when parsing. % \begin{macrocode} \cs_new:Nn \datatool_GB_set_numberchars_old: { \datatool_set_numberchars_tl_regex:nnnn { , } { \textperiodcentered } { , } { \x{2E} | \u{l_datatool_middot_tl} | \c{textperiodcentered} } } % \end{macrocode} %Hook to set the number group and decimal characters for the region: % \begin{macrocode} \newcommand \datatoolGBSetNumberChars { \bool_if:NT \l_datatool_region_set_numberchars_bool { \datatool_GB_set_numberchars_official: } } % \end{macrocode} %How to format the position of the currency symbol in relation to the value. % \begin{macrocode} \cs_new:Nn \datatool_GB_currency_position:nn { \dtlcurrprefixfmt { #1 } { #2 } } % \end{macrocode} %Separator between currency symbol and value. % \begin{macrocode} \tl_new:N \l_datatool_GB_sym_sep_tl % \end{macrocode} % Set the currency format for this region. % \begin{macrocode} \newcommand \datatoolGBcurrencyfmt [ 2 ] { \datatool_GB_currency_position:nn { \datatoolGBsymbolprefix { GB } #1 } { #2 } } % \end{macrocode} %Prefix for symbol, if required. % \begin{macrocode} \newcommand \datatoolGBsymbolprefix [ 1 ] { } % \end{macrocode} % Define the currency symbols for this region. % \begin{macrocode} \datatool_def_currency:nnnV { \datatoolGBcurrencyfmt } { GBP } { \pounds } \l_datatool_pound_tl % \end{macrocode} %Register the currency code with this region: % \begin{macrocode} \datatool_register_regional_currency_code:nn { GB } { GBP } % \end{macrocode} % Provide a command to set the currency for this region (for use % with any hook used when the locale changes). % NB this should do nothing with % \verb|\DTLsetup{region-currency=false}| % \begin{macrocode} \newcommand \datatoolGBSetCurrency { \bool_if:NT \l_datatool_region_set_currency_bool { \DTLsetdefaultcurrency { GBP } % \end{macrocode} %Number of digits that \cs{DTLdecimaltocurrency} should round to: % \begin{macrocode} \renewcommand \DTLCurrentLocaleCurrencyDP { 2 } % \end{macrocode} %Separator between symbol and value: % \begin{macrocode} \renewcommand \dtlcurrfmtsymsep { \l_datatool_GB_sym_sep_tl } } } % \end{macrocode} % %\subsection{Date and Time Parsing} % Provide a way to configure temporal parsing style. % The default is day/month/year but may be changed with % \cs{DTLsetLocaleOptions}. For example: %\begin{dispListing} %\DTLsetLocaleOptions{GB}{date-style=dmyy, date-variant=dot} %\end{dispListing} %An appropriate language file will need to also be installed to %parse dates containing month names or day of week names. % % \begin{macrocode} \tl_new:N \l__datatool_GB_datevariant_tl \tl_set:Nn \l__datatool_GB_datevariant_tl { slash } % \end{macrocode} %NB These token lists are used to form command names. The following is not %a format string. % \begin{macrocode} \tl_new:N \l__datatool_GB_datestyle_tl \tl_set:Nn \l__datatool_GB_datestyle_tl { ddmmyyyy } \tl_new:N \l__datatool_GB_timevariant_tl \tl_set:Nn \l__datatool_GB_timevariant_tl { colon } % \end{macrocode} % %Each parsing command defined below has final \marg{true} and \marg{false} %arguments (\code{TF}). These are used if parsing was successful (true) or if %parsing failed (false). The internal commands used by %\sty{datatool-base} have no need for solo branches (only \code{T} or only %\code{F}) so these commands are simply defined with \verb|\cs_new:Nn| %not as conditionals. % %\subsubsection{Time Stamp Parsing} %Use command %\begin{definition} %\cs{datatool\_}\meta{date-style}\verb|_hhmmss_tz_parse_timestamp:nnNnTF| %\end{definition} %with date regular expression %\begin{definition} %\cs{c\_datatool\_}\meta{date-variant}\verb|_|\meta{date-style}\verb|_date_regex| %\end{definition} %and time regular expression %\begin{definition} %\cs{c\_datatool\_}\meta{time-variant}\verb|_hhmmss_time_regex| %\end{definition} % \begin{macrocode} \cs_new:Nn \datatool_GB_parse_timestamp:NnTF { \cs_if_exist:cTF { datatool_ \l__datatool_GB_datestyle_tl _hhmmss_tz_parse_timestamp:ccNnTF } { \cs_if_exist:cTF { c_datatool_ \l__datatool_GB_datevariant_tl _ \l__datatool_GB_datestyle_tl _date_regex } { \cs_if_exist:cTF { c_datatool_ \l__datatool_GB_timevariant_tl _hhmmss_time_regex } { \use:c { datatool_ \l__datatool_GB_datestyle_tl _hhmmss_tz_parse_timestamp:ccNnTF } { c_datatool_ \l__datatool_GB_datevariant_tl _ \l__datatool_GB_datestyle_tl _date_regex } { c_datatool_ \l__datatool_GB_timevariant_tl _hhmmss_time_regex } #1 { #2 } { #3 } { #4 } } { \datatool_warn_check_head_language_empty:Vnnn \l__datatool_GB_timevariant_tl { datatool-GB } { No ~ language ~ support ~ for ~ time ~ variant ~ ` \exp_args:Ne \tl_tail:n { \l__datatool_GB_timevariant_tl } ' } { No ~ support ~ for ~ time ~ variant ~ ` \l__datatool_GB_timevariant_tl ' } #4 } } { \datatool_warn_check_head_language_empty:Vnnn \l__datatool_GB_datevariant_tl { datatool-GB } { No ~ language ~ support ~ for ~ date ~ style ~ ` \l__datatool_GB_datestyle_tl ' } { No ~ support ~ for ~ date ~ style ~ ` \l__datatool_GB_datestyle_tl ' ~ with ~ variant ~ ` \l__datatool_GB_datevariant_tl ' } #4 } } { \datatool_locale_warn:nn { datatool-GB } { No ~ support ~ for ~ date ~ style ~ ` \l__datatool_GB_datestyle_tl ' } #4 } } % \end{macrocode} %\subsubsection{Date Parsing} %Use command \cs{datatool\_}\meta{style}\verb|_parse_date:NNnTF| %with regular expression %\begin{definition} %\cs{c\_datatool\_}\meta{variant}\verb|_anchored_|\meta{style}\verb|_date_regex| %\end{definition} % \begin{macrocode} \cs_new:Nn \datatool_GB_parse_date:NnTF { \cs_if_exist:cTF { datatool_ \l__datatool_GB_datestyle_tl _parse_date:NNnTF } { \cs_if_exist:cTF { c_datatool_ \l__datatool_GB_datevariant_tl _anchored_ \l__datatool_GB_datestyle_tl _date_regex } { \exp_args:cc { datatool_ \l__datatool_GB_datestyle_tl _parse_date:NNnTF } { c_datatool_ \l__datatool_GB_datevariant_tl _anchored_ \l__datatool_GB_datestyle_tl _date_regex } #1 { #2 } { #3 } { #4 } } { \datatool_warn_check_head_language_empty:Vnnn \l__datatool_GB_datevariant_tl { datatool-GB } { No ~ language ~ support ~ for ~ date ~ style ~ ` \l__datatool_GB_datestyle_tl ' } { No ~ support ~ for ~ date ~ style ~ ` \l__datatool_GB_datestyle_tl ' ~ with ~ variant ~ ` \l__datatool_GB_datevariant_tl ' } #4 } } { \datatool_locale_warn:nn { datatool-GB } { No ~ support ~ for ~ date ~ style ~ ` \l__datatool_GB_datestyle_tl ' } #4 } } % \end{macrocode} %\subsubsection{Time Parsing} %Use command \cs{datatool\_}\meta{style}\verb|_parse_time:NNnTF| %with regular expression %\begin{definition} %\cs{c\_datatool\_}\meta{variant}\verb|_anchored_|\meta{style}\verb|_time_regex| %\end{definition} % \begin{macrocode} \cs_new:Nn \datatool_GB_parse_time:NnTF { \cs_if_exist:cTF { c_datatool_ \l__datatool_GB_timevariant_tl _anchored_hhmmss_time_regex } { \datatool_hhmmss_parse_time:cNnTF { c_datatool_ \l__datatool_GB_timevariant_tl _anchored_hhmmss_time_regex } #1 { #2 } { #3 } { #4 } } { \datatool_warn_check_head_language_empty:Vnnn \l__datatool_GB_timevariant_tl { datatool-GB } { No ~ language ~ support ~ for ~ time ~ variant ~ ` \exp_args:Ne \tl_tail:n { \l__datatool_GB_timevariant_tl } ' } { No ~ support ~ for ~ time ~ variant ~ ` \l__datatool_GB_timevariant_tl ' } #4 } } % \end{macrocode} % %\subsubsection{Time Zones} %Define time zone mapping command for this region: % \begin{macrocode} \cs_new:Nn \datatool_GB_get_timezone_map:n { \datatool_region_get_timezone_map:n { GB / #1 } } % \end{macrocode} %Define time zone IDs for this region (one-way map from ID to offset): % \begin{macrocode} \datatool_region_set_timezone_map:nn { GB / GMT } { +00:00 } \datatool_region_set_timezone_map:nn { GB / BST } { +01:00 } \datatool_region_set_timezone_map:nn { GB / CET } { +01:00 } \datatool_region_set_timezone_map:nn { GB / CEST } { +02:00 } % \end{macrocode} % %\subsection{Options} %Define options for this region: % \begin{macrocode} \datatool_locale_define_keys:nn { GB } { number-style .choices:nn = { official , education , old } { \exp_args:NNe \renewcommand \datatoolGBSetNumberChars { \exp_not:N \bool_if:NT \exp_not:N \l_datatool_region_set_numberchars_bool { \exp_not:c { datatool_GB_set_numberchars_ \l_keys_choice_tl : } } } \tl_if_eq:NnT \l_datatool_current_region_tl { GB } { \datatoolGBSetNumberChars } } , % \end{macrocode} % Currency symbol before or after value: % \begin{macrocode} currency-symbol-position .choice: , currency-symbol-position / before .code:n = { \cs_set_eq:NN \datatool_GB_currency_position:nn \dtlcurrprefixfmt } , currency-symbol-position / after .code:n = { \cs_set_eq:NN \datatool_GB_currency_position:nn \dtlcurrsuffixfmt } , % \end{macrocode} % Should the currency symbol be prefixed with the region code: % \begin{macrocode} currency-symbol-prefix .choice: , currency-symbol-prefix / false .code:n = { \cs_set_eq:NN \datatoolGBsymbolprefix \use_none:n } , currency-symbol-prefix / true .code:n = { \cs_set_eq:NN \datatoolGBsymbolprefix \datatool_currency_symbol_region_prefix:n } , currency-symbol-prefix .default:n = { true } , % \end{macrocode} % Separator between currency symbol (not code) and value: % \begin{macrocode} currency-symbol-sep .choice: , currency-symbol-sep / none .code:n = { \tl_clear:N \l_datatool_GB_sym_sep_tl } , currency-symbol-sep / thin-space .code:n = { \tl_set:Nn \l_datatool_GB_sym_sep_tl { \, } } , currency-symbol-sep / space .code:n = { \tl_set:Nn \l_datatool_GB_sym_sep_tl { ~ } } , currency-symbol-sep / nbsp .code:n = { \tl_set:Nn \l_datatool_GB_sym_sep_tl { \nobreakspace } } , currency-symbol-sep .initial:n = { none } , % \end{macrocode} % Date and time styles: % \begin{macrocode} date-style .choice: , date-style / dmyyyy .code: n = { \tl_set:Nn \l__datatool_GB_datestyle_tl { ddmmyyyy } } , date-style / mdyyyy .code: n = { \tl_set:Nn \l__datatool_GB_datestyle_tl { mmddyyyy } } , date-style / yyyymd .code: n = { \tl_set:Nn \l__datatool_GB_datestyle_tl { yyyymmdd } } , date-style / dmyy .code: n = { \tl_set:Nn \l__datatool_GB_datestyle_tl { ddmmyy } } , date-style / mdyy .code: n = { \tl_set:Nn \l__datatool_GB_datestyle_tl { mmddyy } } , date-style / yymd .code: n = { \tl_set:Nn \l__datatool_GB_datestyle_tl { yymmdd } } , date-variant .choice: , date-variant / slash .code:n = { \tl_set:Nn \l__datatool_GB_datevariant_tl { slash } } , date-variant / hyphen .code:n = { \tl_set:Nn \l__datatool_GB_datevariant_tl { hyphen } } , date-variant / dot .code:n = { \tl_set:Nn \l__datatool_GB_datevariant_tl { dot } } , date-variant / dialect .code:n = { \tl_set:Nn \l__datatool_GB_datevariant_tl { \l_datatool_current_language_tl } } , time-variant .choice: , time-variant / colon .code:n = { \tl_set:Nn \l__datatool_GB_timevariant_tl { colon } } , time-variant / dot .code:n = { \tl_set:Nn \l__datatool_GB_timevariant_tl { dot } } , time-variant / dialect .code:n = { \tl_if_eq:NnTF \l__datatool_GB_timevariant_tl { dot } { \tl_set:Nn \l__datatool_GB_timevariant_tl { \l_datatool_current_language_tl _dot } } { \tl_if_in:NnF \l__datatool_GB_timevariant_tl { \l_datatool_current_language_tl } { \tl_set:Nn \l__datatool_GB_timevariant_tl { \l_datatool_current_language_tl _colon } } } } , time-variant / dialect-colon .code:n = { \tl_set:Nn \l__datatool_GB_timevariant_tl { \l_datatool_current_language_tl _colon } } , time-variant / dialect-dot .code:n = { \tl_set:Nn \l__datatool_GB_timevariant_tl { \l_datatool_current_language_tl _dot } } , } % \end{macrocode} % %\subsection{Hooks} %Command to update temporal parsing commands for this region: % \begin{macrocode} \newcommand \datatoolGBSetTemporalParsers { \renewcommand \DTLCurrentLocaleParseTimeStamp { \datatool_GB_parse_timestamp:NnTF } \renewcommand \DTLCurrentLocaleParseDate { \datatool_GB_parse_date:NnTF } \renewcommand \DTLCurrentLocaleParseTime { \datatool_GB_parse_time:NnTF } \let \DTLCurrentLocaleGetTimeZoneMap \datatool_GB_get_timezone_map:n } % \end{macrocode} %Set temporal formatting commands for this region. Currently this %just resets to the default, but may change in future. %Note that the defaults test if the applicable \sty{datetime2} %command is available and will fallback on ISO if not defined. %Bear in mind that the default style for \sty{datetime2} is %\texttt{iso} so there won't be a noticeable difference unless the %\sty{datetime2} regional setting is on. % \begin{macrocode} \newcommand \datatoolGBSetTemporalFormatters { \let \DTLCurrentLocaleFormatDate \datatool_default_date_fmt:nnnn \let \DTLCurrentLocaleFormatTime \datatool_default_time_fmt:nnn \let \DTLCurrentLocaleFormatTimeZone \datatool_default_timezone_fmt:nn \let \DTLCurrentLocaleFormatTimeStampNoZone \datatool_default_timestamp_fmt:nnnnnnn \let \DTLCurrentLocaleFormatTimeStampWithZone \datatool_default_timestamp_fmt:nnnnnnnnn \renewcommand \DTLCurrentLocaleTimeStampFmtSep { ~ } } % \end{macrocode} % %Command to update number symbols, currency and temporal parsing commands %for this region: % \begin{macrocode} \newcommand \DTLGBLocaleHook { \datatoolGBSetNumberChars \datatoolGBSetCurrency \datatoolGBSetTemporalParsers \datatoolGBSetTemporalFormatters % \end{macrocode} %Allow language files to reference the region: % \begin{macrocode} \tl_set:Nn \l_datatool_current_region_tl { GB } } % \end{macrocode} % % Finished with \LaTeX3 syntax. % \begin{macrocode} \ExplSyntaxOff % \end{macrocode} %Note that the hook is added to the captions by \sty{datatool-base} %not by the region file. %\iffalse % \begin{macrocode} % % \end{macrocode} %\fi %\iffalse % \begin{macrocode} %<*datatool-GG.ldf> % \end{macrocode} %\fi %\section{datatool-GG.ldf}\label{sec:datatool-GG} % Support for region GG. % \begin{macrocode} \TrackLangProvidesResource{GG}[2025/03/01 v1.0] % \end{macrocode} % Switch on \LaTeX3 syntax: % \begin{macrocode} \ExplSyntaxOn % \end{macrocode} % %\subsection{Numbers and Currency} %Set the number group and decimal symbols for this region. % \begin{macrocode} \cs_new:Nn \datatool_GG_set_numberchars_official: { \datatool_set_numberchars:nn { , } { . } } % \end{macrocode} %Unofficial style. % \begin{macrocode} \cs_new:Nn \datatool_GG_set_numberchars_unofficial: { \datatool_set_thinspace_group_decimal_char:n { . } } % \end{macrocode} %Hook to set the number group and decimal characters for the region: % \begin{macrocode} \newcommand \datatoolGGSetNumberChars { \bool_if:NT \l_datatool_region_set_numberchars_bool { \datatool_GG_set_numberchars_official: } } % \end{macrocode} %How to format the position of the currency symbol in relation to the value. % \begin{macrocode} \cs_new:Nn \datatool_GG_currency_position:nn { \dtlcurrprefixfmt { #1 } { #2 } } % \end{macrocode} %Separator between currency symbol and value. % \begin{macrocode} \tl_new:N \l_datatool_GG_sym_sep_tl % \end{macrocode} % Set the currency format for this region. % \begin{macrocode} \newcommand \datatoolGGcurrencyfmt [ 2 ] { \datatool_GG_currency_position:nn { \datatoolGGsymbolprefix { GG } #1 } { #2 } } % \end{macrocode} %Prefix for symbol, if required. % \begin{macrocode} \newcommand \datatoolGGsymbolprefix [ 1 ] { } % \end{macrocode} % Define the currency symbols for this region. % \begin{macrocode} \datatool_def_currency:nnnV { \datatoolGGcurrencyfmt } { GGP } { \pounds } \l_datatool_pound_tl % \end{macrocode} % Register the currency code with this region: % \begin{macrocode} \datatool_register_regional_currency_code:nn { GG } { GGP } % \end{macrocode} % Provide a command to set the currency for this region (for use % with any hook used when the locale changes). % NB this should do nothing with % \verb|\DTLsetup{region-currency=false}| % \begin{macrocode} \newcommand \datatoolGGSetCurrency { \bool_if:NT \l_datatool_region_set_currency_bool { \DTLsetdefaultcurrency { GGP } % \end{macrocode} %Number of digits that \cs{DTLdecimaltocurrency} should round to: % \begin{macrocode} \renewcommand \DTLCurrentLocaleCurrencyDP { 2 } % \end{macrocode} %Separator between symbol and value: % \begin{macrocode} \renewcommand \dtlcurrfmtsymsep { \l_datatool_GG_sym_sep_tl } } } % \end{macrocode} % %\subsection{Date and Time Parsing} % This defaults to day/month/year but may be changed with \cs{DTLsetLocaleOptions}. For example: %\begin{dispListing} %\DTLsetLocaleOptions{GG}{date-style=dmyyyy, date-variant=slash} %\end{dispListing} %An appropriate language file will need to also be installed to %parse dates containing month names or day of week names. % %Provide a way to configure parsing style. % \begin{macrocode} \tl_new:N \l__datatool_GG_datevariant_tl \tl_set:Nn \l__datatool_GG_datevariant_tl { slash } % \end{macrocode} %NB These token lists are used to form command names. The following is not %a format string. % \begin{macrocode} \tl_new:N \l__datatool_GG_datestyle_tl \tl_set:Nn \l__datatool_GG_datestyle_tl { ddmmyyyy } \tl_new:N \l__datatool_GG_timevariant_tl \tl_set:Nn \l__datatool_GG_timevariant_tl { colon } % \end{macrocode} % %Each parsing command defined below has final \marg{true} and \marg{false} %arguments (\code{TF}). These are used if parsing was successful (true) or if %parsing failed (false). The internal commands used by %\sty{datatool-base} have no need for solo branches (only \code{T} or only %\code{F}) so these commands are simply defined with \verb|\cs_new:Nn| %not as conditionals. % %\subsubsection{Time Stamp Parsing} %Use command %\begin{definition} %\cs{datatool\_}\meta{date-style}\verb|_hhmmss_tz_parse_timestamp:nnNnTF| %\end{definition} %with date regular expression %\begin{definition} %\cs{c\_datatool\_}\meta{date-variant}\verb|_|\meta{date-style}\verb|_date_regex| %\end{definition} %and time regular expression %\begin{definition} %\cs{c\_datatool\_}\meta{time-variant}\verb|_hhmmss_time_regex| %\end{definition} % \begin{macrocode} \cs_new:Nn \datatool_GG_parse_timestamp:NnTF { \cs_if_exist:cTF { datatool_ \l__datatool_GG_datestyle_tl _hhmmss_tz_parse_timestamp:ccNnTF } { \cs_if_exist:cTF { c_datatool_ \l__datatool_GG_datevariant_tl _ \l__datatool_GG_datestyle_tl _date_regex } { \cs_if_exist:cTF { c_datatool_ \l__datatool_GG_timevariant_tl _hhmmss_time_regex } { \use:c { datatool_ \l__datatool_GG_datestyle_tl _hhmmss_tz_parse_timestamp:ccNnTF } { c_datatool_ \l__datatool_GG_datevariant_tl _ \l__datatool_GG_datestyle_tl _date_regex } { c_datatool_ \l__datatool_GG_timevariant_tl _hhmmss_time_regex } #1 { #2 } { #3 } { #4 } } { \datatool_warn_check_head_language_empty:Vnnn \l__datatool_GG_timevariant_tl { datatool-GG } { No ~ language ~ support ~ for ~ time ~ variant ~ ` \exp_args:Ne \tl_tail:n { \l__datatool_GG_timevariant_tl } ' } { No ~ support ~ for ~ time ~ variant ~ ` \l__datatool_GG_timevariant_tl ' } #4 } } { \datatool_warn_check_head_language_empty:Vnnn \l__datatool_GG_datevariant_tl { datatool-GG } { No ~ language ~ support ~ for ~ date ~ style ~ ` \l__datatool_GG_datestyle_tl ' } { No ~ support ~ for ~ date ~ style ~ ` \l__datatool_GG_datestyle_tl ' ~ with ~ variant ~ ` \l__datatool_GG_datevariant_tl ' } #4 } } { \datatool_locale_warn:nn { datatool-GG } { No ~ support ~ for ~ date ~ style ~ ` \l__datatool_GG_datestyle_tl ' } #4 } } % \end{macrocode} % %\subsubsection{Date Parsing} %Use command \cs{datatool\_}\meta{style}\verb|_parse_date:NNnTF| %with regular expression %\begin{definition} %\cs{c\_datatool\_}\meta{variant}\verb|_anchored_|\meta{style}\verb|_date_regex| %\end{definition} % \begin{macrocode} \cs_new:Nn \datatool_GG_parse_date:NnTF { \cs_if_exist:cTF { datatool_ \l__datatool_GG_datestyle_tl _parse_date:NNnTF } { \cs_if_exist:cTF { c_datatool_ \l__datatool_GG_datevariant_tl _anchored_ \l__datatool_GG_datestyle_tl _date_regex } { \exp_args:cc { datatool_ \l__datatool_GG_datestyle_tl _parse_date:NNnTF } { c_datatool_ \l__datatool_GG_datevariant_tl _anchored_ \l__datatool_GG_datestyle_tl _date_regex } #1 { #2 } { #3 } { #4 } } { \datatool_warn_check_head_language_empty:Vnnn \l__datatool_GG_datevariant_tl { datatool-GG } { No ~ language ~ support ~ for ~ date ~ style ~ ` \l__datatool_GG_datestyle_tl ' } { No ~ support ~ for ~ date ~ style ~ ` \l__datatool_GG_datestyle_tl ' ~ with ~ variant ~ ` \l__datatool_GG_datevariant_tl ' } #4 } } { \datatool_locale_warn:nn { datatool-GG } { No ~ support ~ for ~ date ~ style ~ ` \l__datatool_GG_datestyle_tl ' } #4 } } % \end{macrocode} % %\subsubsection{Time Parsing} %Use command \cs{datatool\_}\meta{style}\verb|_parse_time:NNnTF| %with regular expression %\begin{definition} %\cs{c\_datatool\_}\meta{variant}\verb|_anchored_|\meta{style}\verb|_time_regex| %\end{definition} % \begin{macrocode} \cs_new:Nn \datatool_GG_parse_time:NnTF { \cs_if_exist:cTF { c_datatool_ \l__datatool_GG_timevariant_tl _anchored_hhmmss_time_regex } { \datatool_hhmmss_parse_time:cNnTF { c_datatool_ \l__datatool_GG_timevariant_tl _anchored_hhmmss_time_regex } #1 { #2 } { #3 } { #4 } } { \datatool_warn_check_head_language_empty:Vnnn \l__datatool_GG_timevariant_tl { datatool-GG } { No ~ language ~ support ~ for ~ time ~ variant ~ ` \exp_args:Ne \tl_tail:n { \l__datatool_GG_timevariant_tl } ' } { No ~ support ~ for ~ time ~ variant ~ ` \l__datatool_GG_timevariant_tl ' } #4 } } % \end{macrocode} % %\subsubsection{Time Zone Mappings} %Define time zone mapping command for this region: % \begin{macrocode} \cs_new:Nn \datatool_GG_get_timezone_map:n { \datatool_region_get_timezone_map:n { GG / #1 } } % \end{macrocode} %Define time zone IDs for this region (one-way map from ID to offset): % \begin{macrocode} \datatool_region_set_timezone_map:nn { GG / BST } { +01:00 } \datatool_region_set_timezone_map:nn { GG / GMT } { +00:00 } \datatool_region_set_timezone_map:nn { GG / CET } { +01:00 } \datatool_region_set_timezone_map:nn { GG / CEST } { +02:00 } % \end{macrocode} % %\subsection{Options} %Define options for this region: % \begin{macrocode} \datatool_locale_define_keys:nn { GG } { number-style .choices:nn = { official, unofficial } { \exp_args:NNe \renewcommand \datatoolGGSetNumberChars { \exp_not:N \bool_if:NT \exp_not:N \l_datatool_region_set_numberchars_bool { \exp_not:c { datatool_GG_set_numberchars_ \l_keys_choice_tl : } } } \tl_if_eq:NnT \l_datatool_current_region_tl { GG } { \datatoolGGSetNumberChars } } , % \end{macrocode} % Currency symbol before or after value: % \begin{macrocode} currency-symbol-position .choice: , currency-symbol-position / before .code:n = { \cs_set_eq:NN \datatool_GG_currency_position:nn \dtlcurrprefixfmt } , currency-symbol-position / after .code:n = { \cs_set_eq:NN \datatool_GG_currency_position:nn \dtlcurrsuffixfmt } , % \end{macrocode} % Should the currency symbol be prefixed with the region code: % \begin{macrocode} currency-symbol-prefix .choice: , currency-symbol-prefix / false .code:n = { \cs_set_eq:NN \datatoolGGsymbolprefix \use_none:n } , currency-symbol-prefix / true .code:n = { \cs_set_eq:NN \datatoolGGsymbolprefix \datatool_currency_symbol_region_prefix:n } , currency-symbol-prefix .default:n = { true } , % \end{macrocode} % Separator between currency symbol (not code) and value: % \begin{macrocode} currency-symbol-sep .choice: , currency-symbol-sep / none .code:n = { \tl_clear:N \l_datatool_GG_sym_sep_tl } , currency-symbol-sep / thin-space .code:n = { \tl_set:Nn \l_datatool_GG_sym_sep_tl { \, } } , currency-symbol-sep / space .code:n = { \tl_set:Nn \l_datatool_GG_sym_sep_tl { ~ } } , currency-symbol-sep / nbsp .code:n = { \tl_set:Nn \l_datatool_GG_sym_sep_tl { \nobreakspace } } , currency-symbol-sep . initial:n = { none } , % \end{macrocode} % Date and time styles: % \begin{macrocode} date-style .choice: , date-style / dmyyyy .code: n = { \tl_set:Nn \l__datatool_GG_datestyle_tl { ddmmyyyy } } , date-style / mdyyyy .code: n = { \tl_set:Nn \l__datatool_GG_datestyle_tl { mmddyyyy } } , date-style / yyyymd .code: n = { \tl_set:Nn \l__datatool_GG_datestyle_tl { yyyymmdd } } , date-style / dmyy .code: n = { \tl_set:Nn \l__datatool_GG_datestyle_tl { ddmmyy } } , date-style / mdyy .code: n = { \tl_set:Nn \l__datatool_GG_datestyle_tl { mmddyy } } , date-style / yymd .code: n = { \tl_set:Nn \l__datatool_GG_datestyle_tl { yymmdd } } , date-variant .choice: , date-variant / slash .code:n = { \tl_set:Nn \l__datatool_GG_datevariant_tl { slash } } , date-variant / hyphen .code:n = { \tl_set:Nn \l__datatool_GG_datevariant_tl { hyphen } } , date-variant / dot .code:n = { \tl_set:Nn \l__datatool_GG_datevariant_tl { dot } } , date-variant / dialect .code:n = { \tl_set:Nn \l__datatool_GG_datevariant_tl { \l_datatool_current_language_tl } } , time-variant .choice: , time-variant / colon .code:n = { \tl_set:Nn \l__datatool_GG_timevariant_tl { colon } } , time-variant / dot .code:n = { \tl_set:Nn \l__datatool_GG_timevariant_tl { dot } } , time-variant / dialect .code:n = { \tl_if_eq:NnTF \l__datatool_GG_timevariant_tl { dot } { \tl_set:Nn \l__datatool_GG_timevariant_tl { \l_datatool_current_language_tl _dot } } { \tl_if_in:NnF \l__datatool_GG_timevariant_tl { \l_datatool_current_language_tl } { \tl_set:Nn \l__datatool_GG_timevariant_tl { \l_datatool_current_language_tl _colon } } } } , time-variant / dialect-colon .code:n = { \tl_set:Nn \l__datatool_GG_timevariant_tl { \l_datatool_current_language_tl _colon } } , time-variant / dialect-dot .code:n = { \tl_set:Nn \l__datatool_GG_timevariant_tl { \l_datatool_current_language_tl _dot } } , } % \end{macrocode} % %\subsection{Hooks} %Command to update temporal parsing commands for this region: % \begin{macrocode} \newcommand \datatoolGGSetTemporalParsers { \renewcommand \DTLCurrentLocaleParseTimeStamp { \datatool_GG_parse_timestamp:NnTF } \renewcommand \DTLCurrentLocaleParseDate { \datatool_GG_parse_date:NnTF } \renewcommand \DTLCurrentLocaleParseTime { \datatool_GG_parse_time:NnTF } \let \DTLCurrentLocaleGetTimeZoneMap \datatool_GG_get_timezone_map:n } % \end{macrocode} %Set temporal formatting commands for this region. Currently this %just resets to the default, but may change in future. %Note that the defaults test if the applicable \sty{datetime2} %command is available and will fallback on ISO if not defined. %Bear in mind that the default style for \sty{datetime2} is %\texttt{iso} so there won't be a noticeable difference unless the %\sty{datetime2} regional setting is on. % \begin{macrocode} \newcommand \datatoolGGSetTemporalFormatters { \let \DTLCurrentLocaleFormatDate \datatool_default_date_fmt:nnnn \let \DTLCurrentLocaleFormatTime \datatool_default_time_fmt:nnn \let \DTLCurrentLocaleFormatTimeZone \datatool_default_timezone_fmt:nn \let \DTLCurrentLocaleFormatTimeStampNoZone \datatool_default_timestamp_fmt:nnnnnnn \let \DTLCurrentLocaleFormatTimeStampWithZone \datatool_default_timestamp_fmt:nnnnnnnnn \renewcommand \DTLCurrentLocaleTimeStampFmtSep { ~ } } % \end{macrocode} % % %Command to update currency and temporal parsing commands for this region: % \begin{macrocode} \newcommand \DTLGGLocaleHook { \datatoolGGSetNumberChars \datatoolGGSetCurrency \datatoolGGSetTemporalParsers \datatoolGGSetTemporalFormatters % \end{macrocode} %Allow language files to reference the region: % \begin{macrocode} \tl_set:Nn \l_datatool_current_region_tl { GG } } % \end{macrocode} % % Finished with \LaTeX3 syntax. % \begin{macrocode} \ExplSyntaxOff % \end{macrocode} %Note that the hook is added to the captions by \sty{datatool-base} %not by the region file. %\iffalse % \begin{macrocode} % % \end{macrocode} %\fi %\iffalse % \begin{macrocode} %<*datatool-GI.ldf> % \end{macrocode} %\fi %\section{datatool-GI.ldf}\label{sec:datatool-GI} % Support for region GI. % \begin{macrocode} \TrackLangProvidesResource{GI}[2025/03/01 v1.0] % \end{macrocode} % Switch on \LaTeX3 syntax: % \begin{macrocode} \ExplSyntaxOn % \end{macrocode} % %\subsection{Numbers and Currency} %Set the number group and decimal symbols for this region. % \begin{macrocode} \cs_new:Nn \datatool_GI_set_numberchars_official: { \datatool_set_numberchars:nn { , } { . } } % \end{macrocode} %Unofficial style. % \begin{macrocode} \cs_new:Nn \datatool_GI_set_numberchars_unofficial: { \datatool_set_thinspace_group_decimal_char:n { . } } % \end{macrocode} %Hook to set the number group and decimal characters for the region: % \begin{macrocode} \newcommand \datatoolGISetNumberChars { \bool_if:NT \l_datatool_region_set_numberchars_bool { \datatool_GI_set_numberchars_official: } } % \end{macrocode} %How to format the position of the currency symbol in relation to the value. % \begin{macrocode} \cs_new:Nn \datatool_GI_currency_position:nn { \dtlcurrprefixfmt { #1 } { #2 } } % \end{macrocode} %Separator between currency symbol and value. % \begin{macrocode} \tl_new:N \l_datatool_GI_sym_sep_tl % \end{macrocode} % Set the currency format for this region. % \begin{macrocode} \newcommand \datatoolGIcurrencyfmt [ 2 ] { \datatool_GI_currency_position:nn { \datatoolGIsymbolprefix { GI } #1 } { #2 } } % \end{macrocode} %Prefix for symbol, if required. % \begin{macrocode} \newcommand \datatoolGIsymbolprefix [ 1 ] { } % \end{macrocode} % Define the currency symbols for this region. % \begin{macrocode} \datatool_def_currency:nnnV { \datatoolGIcurrencyfmt } { GIP } { \pounds } \l_datatool_pound_tl % \end{macrocode} % Register the currency code with this region: % \begin{macrocode} \datatool_register_regional_currency_code:nn { GI } { GIP } % \end{macrocode} % Provide a command to set the currency for this region (for use % with any hook used when the locale changes). % NB this should do nothing with % \verb|\DTLsetup{region-currency=false}| % \begin{macrocode} \newcommand \datatoolGISetCurrency { \bool_if:NT \l_datatool_region_set_currency_bool { \DTLsetdefaultcurrency { GIP } % \end{macrocode} %Number of digits that \cs{DTLdecimaltocurrency} should round to: % \begin{macrocode} \renewcommand \DTLCurrentLocaleCurrencyDP { 2 } % \end{macrocode} %Separator between symbol and value: % \begin{macrocode} \renewcommand \dtlcurrfmtsymsep { \l_datatool_GI_sym_sep_tl } } } % \end{macrocode} % %\subsection{Date and Time Parsing} % This defaults to day/month/year but may be changed with \cs{DTLsetLocaleOptions}. For example: %\begin{dispListing} %\DTLsetLocaleOptions{GI}{date-style=dmyyyy, date-variant=slash} %\end{dispListing} %An appropriate language file will need to also be installed to %parse dates containing month names or day of week names. % %Provide a way to configure parsing style. % \begin{macrocode} \tl_new:N \l__datatool_GI_datevariant_tl \tl_set:Nn \l__datatool_GI_datevariant_tl { slash } % \end{macrocode} %NB These token lists are used to form command names. The following is not %a format string. % \begin{macrocode} \tl_new:N \l__datatool_GI_datestyle_tl \tl_set:Nn \l__datatool_GI_datestyle_tl { ddmmyyyy } \tl_new:N \l__datatool_GI_timevariant_tl \tl_set:Nn \l__datatool_GI_timevariant_tl { colon } % \end{macrocode} % %Each parsing command defined below has final \marg{true} and \marg{false} %arguments (\code{TF}). These are used if parsing was successful (true) or if %parsing failed (false). The internal commands used by %\sty{datatool-base} have no need for solo branches (only \code{T} or only %\code{F}) so these commands are simply defined with \verb|\cs_new:Nn| %not as conditionals. % %\subsubsection{Time Stamp Parsing} %Use command %\begin{definition} %\cs{datatool\_}\meta{date-style}\verb|_hhmmss_tz_parse_timestamp:nnNnTF| %\end{definition} %with date regular expression %\begin{definition} %\cs{c\_datatool\_}\meta{date-variant}\verb|_|\meta{date-style}\verb|_date_regex| %\end{definition} %and time regular expression %\begin{definition} %\cs{c\_datatool\_}\meta{time-variant}\verb|_hhmmss_time_regex| %\end{definition} % \begin{macrocode} \cs_new:Nn \datatool_GI_parse_timestamp:NnTF { \cs_if_exist:cTF { datatool_ \l__datatool_GI_datestyle_tl _hhmmss_tz_parse_timestamp:ccNnTF } { \cs_if_exist:cTF { c_datatool_ \l__datatool_GI_datevariant_tl _ \l__datatool_GI_datestyle_tl _date_regex } { \cs_if_exist:cTF { c_datatool_ \l__datatool_GI_timevariant_tl _hhmmss_time_regex } { \use:c { datatool_ \l__datatool_GI_datestyle_tl _hhmmss_tz_parse_timestamp:ccNnTF } { c_datatool_ \l__datatool_GI_datevariant_tl _ \l__datatool_GI_datestyle_tl _date_regex } { c_datatool_ \l__datatool_GI_timevariant_tl _hhmmss_time_regex } #1 { #2 } { #3 } { #4 } } { \datatool_warn_check_head_language_empty:Vnnn \l__datatool_GI_timevariant_tl { datatool-GI } { No ~ language ~ support ~ for ~ time ~ variant ~ ` \exp_args:Ne \tl_tail:n { \l__datatool_GI_timevariant_tl } ' } { No ~ support ~ for ~ time ~ variant ~ ` \l__datatool_GI_timevariant_tl ' } #4 } } { \datatool_warn_check_head_language_empty:Vnnn \l__datatool_GI_datevariant_tl { datatool-GI } { No ~ language ~ support ~ for ~ date ~ style ~ ` \l__datatool_GI_datestyle_tl ' } { No ~ support ~ for ~ date ~ style ~ ` \l__datatool_GI_datestyle_tl ' ~ with ~ variant ~ ` \l__datatool_GI_datevariant_tl ' } #4 } } { \datatool_locale_warn:nn { datatool-GI } { No ~ support ~ for ~ date ~ style ~ ` \l__datatool_GI_datestyle_tl ' } #4 } } % \end{macrocode} % %\subsubsection{Date Parsing} %Use command \cs{datatool\_}\meta{style}\verb|_parse_date:NNnTF| %with regular expression %\begin{definition} %\cs{c\_datatool\_}\meta{variant}\verb|_anchored_|\meta{style}\verb|_date_regex| %\end{definition} % \begin{macrocode} \cs_new:Nn \datatool_GI_parse_date:NnTF { \cs_if_exist:cTF { datatool_ \l__datatool_GI_datestyle_tl _parse_date:NNnTF } { \cs_if_exist:cTF { c_datatool_ \l__datatool_GI_datevariant_tl _anchored_ \l__datatool_GI_datestyle_tl _date_regex } { \exp_args:cc { datatool_ \l__datatool_GI_datestyle_tl _parse_date:NNnTF } { c_datatool_ \l__datatool_GI_datevariant_tl _anchored_ \l__datatool_GI_datestyle_tl _date_regex } #1 { #2 } { #3 } { #4 } } { \datatool_warn_check_head_language_empty:Vnnn \l__datatool_GI_datevariant_tl { datatool-GI } { No ~ language ~ support ~ for ~ date ~ style ~ ` \l__datatool_GI_datestyle_tl ' } { No ~ support ~ for ~ date ~ style ~ ` \l__datatool_GI_datestyle_tl ' ~ with ~ variant ~ ` \l__datatool_GI_datevariant_tl ' } #4 } } { \datatool_locale_warn:nn { datatool-GI } { No ~ support ~ for ~ date ~ style ~ ` \l__datatool_GI_datestyle_tl ' } #4 } } % \end{macrocode} % %\subsubsection{Time Parsing} %Use command \cs{datatool\_}\meta{style}\verb|_parse_time:NNnTF| %with regular expression %\begin{definition} %\cs{c\_datatool\_}\meta{variant}\verb|_anchored_|\meta{style}\verb|_time_regex| %\end{definition} % \begin{macrocode} \cs_new:Nn \datatool_GI_parse_time:NnTF { \cs_if_exist:cTF { c_datatool_ \l__datatool_GI_timevariant_tl _anchored_hhmmss_time_regex } { \datatool_hhmmss_parse_time:cNnTF { c_datatool_ \l__datatool_GI_timevariant_tl _anchored_hhmmss_time_regex } #1 { #2 } { #3 } { #4 } } { \datatool_warn_check_head_language_empty:Vnnn \l__datatool_GI_timevariant_tl { datatool-GI } { No ~ language ~ support ~ for ~ time ~ variant ~ ` \exp_args:Ne \tl_tail:n { \l__datatool_GI_timevariant_tl } ' } { No ~ support ~ for ~ time ~ variant ~ ` \l__datatool_GI_timevariant_tl ' } #4 } } % \end{macrocode} % %\subsubsection{Time Zone Mappings} %Define time zone mapping command for this region: % \begin{macrocode} \cs_new:Nn \datatool_GI_get_timezone_map:n { \datatool_region_get_timezone_map:n { GI / #1 } } % \end{macrocode} %Define time zone IDs for this region (one-way map from ID to offset): % \begin{macrocode} \datatool_region_set_timezone_map:nn { GI / CEST } { +02:00 } \datatool_region_set_timezone_map:nn { GI / BST } { +01:00 } \datatool_region_set_timezone_map:nn { GI / CET } { +01:00 } \datatool_region_set_timezone_map:nn { GI / GMT } { +00:00 } % \end{macrocode} % %\subsection{Options} %Define options for this region: % \begin{macrocode} \datatool_locale_define_keys:nn { GI } { number-style .choices:nn = { official, unofficial } { \exp_args:NNe \renewcommand \datatoolGISetNumberChars { \exp_not:N \bool_if:NT \exp_not:N \l_datatool_region_set_numberchars_bool { \exp_not:c { datatool_GI_set_numberchars_ \l_keys_choice_tl : } } } \tl_if_eq:NnT \l_datatool_current_region_tl { GI } { \datatoolGISetNumberChars } } , % \end{macrocode} % Currency symbol before or after value: % \begin{macrocode} currency-symbol-position .choice: , currency-symbol-position / before .code:n = { \cs_set_eq:NN \datatool_GI_currency_position:nn \dtlcurrprefixfmt } , currency-symbol-position / after .code:n = { \cs_set_eq:NN \datatool_GI_currency_position:nn \dtlcurrsuffixfmt } , % \end{macrocode} % Should the currency symbol be prefixed with the region code: % \begin{macrocode} currency-symbol-prefix .choice: , currency-symbol-prefix / false .code:n = { \cs_set_eq:NN \datatoolGIsymbolprefix \use_none:n } , currency-symbol-prefix / true .code:n = { \cs_set_eq:NN \datatoolGIsymbolprefix \datatool_currency_symbol_region_prefix:n } , currency-symbol-prefix .default:n = { true } , % \end{macrocode} % Separator between currency symbol (not code) and value: % \begin{macrocode} currency-symbol-sep .choice: , currency-symbol-sep / none .code:n = { \tl_clear:N \l_datatool_GI_sym_sep_tl } , currency-symbol-sep / thin-space .code:n = { \tl_set:Nn \l_datatool_GI_sym_sep_tl { \, } } , currency-symbol-sep / space .code:n = { \tl_set:Nn \l_datatool_GI_sym_sep_tl { ~ } } , currency-symbol-sep / nbsp .code:n = { \tl_set:Nn \l_datatool_GI_sym_sep_tl { \nobreakspace } } , currency-symbol-sep . initial:n = { none } , % \end{macrocode} % Date and time styles: % \begin{macrocode} date-style .choice: , date-style / dmyyyy .code: n = { \tl_set:Nn \l__datatool_GI_datestyle_tl { ddmmyyyy } } , date-style / mdyyyy .code: n = { \tl_set:Nn \l__datatool_GI_datestyle_tl { mmddyyyy } } , date-style / yyyymd .code: n = { \tl_set:Nn \l__datatool_GI_datestyle_tl { yyyymmdd } } , date-style / dmyy .code: n = { \tl_set:Nn \l__datatool_GI_datestyle_tl { ddmmyy } } , date-style / mdyy .code: n = { \tl_set:Nn \l__datatool_GI_datestyle_tl { mmddyy } } , date-style / yymd .code: n = { \tl_set:Nn \l__datatool_GI_datestyle_tl { yymmdd } } , date-variant .choice: , date-variant / slash .code:n = { \tl_set:Nn \l__datatool_GI_datevariant_tl { slash } } , date-variant / hyphen .code:n = { \tl_set:Nn \l__datatool_GI_datevariant_tl { hyphen } } , date-variant / dot .code:n = { \tl_set:Nn \l__datatool_GI_datevariant_tl { dot } } , date-variant / dialect .code:n = { \tl_set:Nn \l__datatool_GI_datevariant_tl { \l_datatool_current_language_tl } } , time-variant .choice: , time-variant / colon .code:n = { \tl_set:Nn \l__datatool_GI_timevariant_tl { colon } } , time-variant / dot .code:n = { \tl_set:Nn \l__datatool_GI_timevariant_tl { dot } } , time-variant / dialect .code:n = { \tl_if_eq:NnTF \l__datatool_GI_timevariant_tl { dot } { \tl_set:Nn \l__datatool_GI_timevariant_tl { \l_datatool_current_language_tl _dot } } { \tl_if_in:NnF \l__datatool_GI_timevariant_tl { \l_datatool_current_language_tl } { \tl_set:Nn \l__datatool_GI_timevariant_tl { \l_datatool_current_language_tl _colon } } } } , time-variant / dialect-colon .code:n = { \tl_set:Nn \l__datatool_GI_timevariant_tl { \l_datatool_current_language_tl _colon } } , time-variant / dialect-dot .code:n = { \tl_set:Nn \l__datatool_GI_timevariant_tl { \l_datatool_current_language_tl _dot } } , } % \end{macrocode} % %\subsection{Hooks} %Command to update temporal parsing commands for this region: % \begin{macrocode} \newcommand \datatoolGISetTemporalParsers { \renewcommand \DTLCurrentLocaleParseTimeStamp { \datatool_GI_parse_timestamp:NnTF } \renewcommand \DTLCurrentLocaleParseDate { \datatool_GI_parse_date:NnTF } \renewcommand \DTLCurrentLocaleParseTime { \datatool_GI_parse_time:NnTF } \let \DTLCurrentLocaleGetTimeZoneMap \datatool_GI_get_timezone_map:n } % \end{macrocode} %Set temporal formatting commands for this region. Currently this %just resets to the default, but may change in future. %Note that the defaults test if the applicable \sty{datetime2} %command is available and will fallback on ISO if not defined. %Bear in mind that the default style for \sty{datetime2} is %\texttt{iso} so there won't be a noticeable difference unless the %\sty{datetime2} regional setting is on. % \begin{macrocode} \newcommand \datatoolGISetTemporalFormatters { \let \DTLCurrentLocaleFormatDate \datatool_default_date_fmt:nnnn \let \DTLCurrentLocaleFormatTime \datatool_default_time_fmt:nnn \let \DTLCurrentLocaleFormatTimeZone \datatool_default_timezone_fmt:nn \let \DTLCurrentLocaleFormatTimeStampNoZone \datatool_default_timestamp_fmt:nnnnnnn \let \DTLCurrentLocaleFormatTimeStampWithZone \datatool_default_timestamp_fmt:nnnnnnnnn \renewcommand \DTLCurrentLocaleTimeStampFmtSep { ~ } } % \end{macrocode} % % %Command to update currency and temporal parsing commands for this region: % \begin{macrocode} \newcommand \DTLGILocaleHook { \datatoolGISetNumberChars \datatoolGISetCurrency \datatoolGISetTemporalParsers \datatoolGISetTemporalFormatters % \end{macrocode} %Allow language files to reference the region: % \begin{macrocode} \tl_set:Nn \l_datatool_current_region_tl { GI } } % \end{macrocode} % % Finished with \LaTeX3 syntax. % \begin{macrocode} \ExplSyntaxOff % \end{macrocode} %Note that the hook is added to the captions by \sty{datatool-base} %not by the region file. %\iffalse % \begin{macrocode} % % \end{macrocode} %\fi %\iffalse % \begin{macrocode} %<*datatool-IE.ldf> % \end{macrocode} %\fi %\section{datatool-IE.ldf}\label{sec:datatool-IE} % Support for region IE. % \begin{macrocode} \TrackLangProvidesResource{IE}[2025/03/01 v1.0] % \end{macrocode} % Switch on \LaTeX3 syntax: % \begin{macrocode} \ExplSyntaxOn % \end{macrocode} % %\subsection{Numbers and Currency} %Set the number group and decimal symbols for this region. % \begin{macrocode} \cs_new:Nn \datatool_IE_set_numberchars_official: { \datatool_set_numberchars:nn { , } { . } } % \end{macrocode} %Unofficial style. % \begin{macrocode} \cs_new:Nn \datatool_IE_set_numberchars_unofficial: { \datatool_set_thinspace_group_decimal_char:n { . } } % \end{macrocode} %Hook to set the number group and decimal characters for the region: % \begin{macrocode} \newcommand \datatoolIESetNumberChars { \bool_if:NT \l_datatool_region_set_numberchars_bool { \datatool_IE_set_numberchars_official: } } % \end{macrocode} % The EUR currency is already defined by \sty{datatool-base}, but we % need to register the currency code with this region: % \begin{macrocode} \datatool_register_regional_currency_code:nn { IE } { EUR } % \end{macrocode} %How to format the position of the currency symbol in relation to the value. % \begin{macrocode} \cs_new:Nn \datatool_IE_currency_position:nn { \dtlcurrprefixfmt { #1 } { #2 } } % \end{macrocode} %Separator between currency symbol and value. % \begin{macrocode} \tl_new:N \l_datatool_IE_sym_sep_tl % \end{macrocode} % % Provide a command to set the currency for this region (for use % with any hook used when the locale changes). % \begin{macrocode} \newcommand \datatoolIESetCurrency { \bool_if:NT \l_datatool_region_set_currency_bool { \DTLsetdefaultcurrency { EUR } % \end{macrocode} %Number of digits that \cs{DTLdecimaltocurrency} should round to: % \begin{macrocode} \renewcommand \DTLCurrentLocaleCurrencyDP { 2 } % \end{macrocode} %Update EUR format to reflect current region style: % \begin{macrocode} \renewcommand \DTLdefaultEURcurrencyfmt { \datatool_IE_currency_position:nn } % \end{macrocode} %Separator between symbol and value: % \begin{macrocode} \renewcommand \dtlcurrfmtsymsep { \l_datatool_IE_sym_sep_tl } } } % \end{macrocode} % %\subsection{Date and Time Parsing} % This defaults to day/month/year but may be changed with \cs{DTLsetLocaleOptions}. For example: %\begin{dispListing} %\DTLsetLocaleOptions{IE}{date-style=dmyyyy, date-variant=slash} %\end{dispListing} %An appropriate language file will need to also be installed to %parse dates containing month names or day of week names. % % Provide a way to configure parsing style. % \begin{macrocode} \tl_new:N \l__datatool_IE_datevariant_tl \tl_set:Nn \l__datatool_IE_datevariant_tl { slash } % \end{macrocode} %NB These token lists are used to form command names. The following is not %a format string. % \begin{macrocode} \tl_new:N \l__datatool_IE_datestyle_tl \tl_set:Nn \l__datatool_IE_datestyle_tl { ddmmyyyy } \tl_new:N \l__datatool_IE_timevariant_tl \tl_set:Nn \l__datatool_IE_timevariant_tl { colon } % \end{macrocode} % %Each parsing command defined below has final \marg{true} and \marg{false} %arguments (\code{TF}). These are used if parsing was successful (true) or if %parsing failed (false). The internal commands used by %\sty{datatool-base} have no need for solo branches (only \code{T} or only %\code{F}) so these commands are simply defined with \verb|\cs_new:Nn| %not as conditionals. % %\subsubsection{Time Stamp Parsing} %Use command %\begin{definition} %\cs{datatool\_}\meta{date-style}\verb|_hhmmss_tz_parse_timestamp:nnNnTF| %\end{definition} %with date regular expression %\begin{definition} %\cs{c\_datatool\_}\meta{date-variant}\verb|_|\meta{date-style}\verb|_date_regex| %\end{definition} %and time regular expression %\begin{definition} %\cs{c\_datatool\_}\meta{time-variant}\verb|_hhmmss_time_regex| %\end{definition} % \begin{macrocode} \cs_new:Nn \datatool_IE_parse_timestamp:NnTF { \cs_if_exist:cTF { datatool_ \l__datatool_IE_datestyle_tl _hhmmss_tz_parse_timestamp:ccNnTF } { \cs_if_exist:cTF { c_datatool_ \l__datatool_IE_datevariant_tl _ \l__datatool_IE_datestyle_tl _date_regex } { \cs_if_exist:cTF { c_datatool_ \l__datatool_IE_timevariant_tl _hhmmss_time_regex } { \use:c { datatool_ \l__datatool_IE_datestyle_tl _hhmmss_tz_parse_timestamp:ccNnTF } { c_datatool_ \l__datatool_IE_datevariant_tl _ \l__datatool_IE_datestyle_tl _date_regex } { c_datatool_ \l__datatool_IE_timevariant_tl _hhmmss_time_regex } #1 { #2 } { #3 } { #4 } } { \datatool_warn_check_head_language_empty:Vnnn \l__datatool_IE_timevariant_tl { datatool-IE } { No ~ language ~ support ~ for ~ time ~ variant ~ ` \exp_args:Ne \tl_tail:n { \l__datatool_IE_timevariant_tl } ' } { No ~ support ~ for ~ time ~ variant ~ ` \l__datatool_IE_timevariant_tl ' } #4 } } { \datatool_warn_check_head_language_empty:Vnnn \l__datatool_IE_datevariant_tl { datatool-IE } { No ~ language ~ support ~ for ~ date ~ style ~ ` \l__datatool_IE_datestyle_tl ' } { No ~ support ~ for ~ date ~ style ~ ` \l__datatool_IE_datestyle_tl ' ~ with ~ variant ~ ` \l__datatool_IE_datevariant_tl ' } #4 } } { \datatool_locale_warn:nn { datatool-IE } { No ~ support ~ for ~ date ~ style ~ ` \l__datatool_IE_datestyle_tl ' } #4 } } % \end{macrocode} % %\subsubsection{Date Parsing} %Use command \cs{datatool\_}\meta{style}\verb|_parse_date:NNnTF| %with regular expression %\begin{definition} %\cs{c\_datatool\_}\meta{variant}\verb|_anchored_|\meta{style}\verb|_date_regex| %\end{definition} % \begin{macrocode} \cs_new:Nn \datatool_IE_parse_date:NnTF { \cs_if_exist:cTF { datatool_ \l__datatool_IE_datestyle_tl _parse_date:NNnTF } { \cs_if_exist:cTF { c_datatool_ \l__datatool_IE_datevariant_tl _anchored_ \l__datatool_IE_datestyle_tl _date_regex } { \exp_args:cc { datatool_ \l__datatool_IE_datestyle_tl _parse_date:NNnTF } { c_datatool_ \l__datatool_IE_datevariant_tl _anchored_ \l__datatool_IE_datestyle_tl _date_regex } #1 { #2 } { #3 } { #4 } } { \datatool_warn_check_head_language_empty:Vnnn \l__datatool_IE_datevariant_tl { datatool-IE } { No ~ language ~ support ~ for ~ date ~ style ~ ` \l__datatool_IE_datestyle_tl ' } { No ~ support ~ for ~ date ~ style ~ ` \l__datatool_IE_datestyle_tl ' ~ with ~ variant ~ ` \l__datatool_IE_datevariant_tl ' } #4 } } { \datatool_locale_warn:nn { datatool-IE } { No ~ support ~ for ~ date ~ style ~ ` \l__datatool_IE_datestyle_tl ' } #4 } } % \end{macrocode} % %\subsubsection{Time Parsing} %Use command \cs{datatool\_}\meta{style}\verb|_parse_time:NNnTF| %with regular expression %\begin{definition} %\cs{c\_datatool\_}\meta{variant}\verb|_anchored_|\meta{style}\verb|_time_regex| %\end{definition} % \begin{macrocode} \cs_new:Nn \datatool_IE_parse_time:NnTF { \cs_if_exist:cTF { c_datatool_ \l__datatool_IE_timevariant_tl _anchored_hhmmss_time_regex } { \datatool_hhmmss_parse_time:cNnTF { c_datatool_ \l__datatool_IE_timevariant_tl _anchored_hhmmss_time_regex } #1 { #2 } { #3 } { #4 } } { \datatool_warn_check_head_language_empty:Vnnn \l__datatool_IE_timevariant_tl { datatool-IE } { No ~ language ~ support ~ for ~ time ~ variant ~ ` \exp_args:Ne \tl_tail:n { \l__datatool_IE_timevariant_tl } ' } { No ~ support ~ for ~ time ~ variant ~ ` \l__datatool_IE_timevariant_tl ' } #4 } } % \end{macrocode} % %\subsubsection{Time Zone Mappings} %Define time zone mapping command for this region: % \begin{macrocode} \cs_new:Nn \datatool_IE_get_timezone_map:n { \datatool_region_get_timezone_map:n { IE / #1 } } % \end{macrocode} %Define time zone IDs for this region (one-way map from ID to offset): % \begin{macrocode} \datatool_region_set_timezone_map:nn { IE / IST } { +01:00 } \datatool_region_set_timezone_map:nn { IE / GMT } { +00:00 } \datatool_region_set_timezone_map:nn { IE / CEST } { +02:00 } \datatool_region_set_timezone_map:nn { IE / CET } { +01:00 } % \end{macrocode} %\subsection{Options} %Define options for this region: % \begin{macrocode} \datatool_locale_define_keys:nn { IE } { number-style .choices:nn = { official, unofficial } { \exp_args:NNe \renewcommand \datatoolIESetNumberChars { \exp_not:N \bool_if:NT \exp_not:N \l_datatool_region_set_numberchars_bool { \exp_not:c { datatool_IE_set_numberchars_ \l_keys_choice_tl : } } } \tl_if_eq:NnT \l_datatool_current_region_tl { IE } { \datatoolIESetNumberChars } } , % \end{macrocode} % Currency symbol before or after value: % \begin{macrocode} currency-symbol-position .choice: , currency-symbol-position / before .code:n = { \cs_set_eq:NN \datatool_IE_currency_position:nn \dtlcurrprefixfmt } , currency-symbol-position / after .code:n = { \cs_set_eq:NN \datatool_IE_currency_position:nn \dtlcurrsuffixfmt } , % \end{macrocode} % Separator between currency symbol (not code) and value: % \begin{macrocode} currency-symbol-sep .choice: , currency-symbol-sep / none .code:n = { \tl_clear:N \l_datatool_IE_sym_sep_tl } , currency-symbol-sep / thin-space .code:n = { \tl_set:Nn \l_datatool_IE_sym_sep_tl { \, } } , currency-symbol-sep / space .code:n = { \tl_set:Nn \l_datatool_IE_sym_sep_tl { ~ } } , currency-symbol-sep / nbsp .code:n = { \tl_set:Nn \l_datatool_IE_sym_sep_tl { \nobreakspace } } , currency-symbol-sep .initial:n = { none } , % \end{macrocode} % Date and time styles: % \begin{macrocode} date-style .choice: , date-style / dmyyyy .code: n = { \tl_set:Nn \l__datatool_IE_datestyle_tl { ddmmyyyy } } , date-style / mdyyyy .code: n = { \tl_set:Nn \l__datatool_IE_datestyle_tl { mmddyyyy } } , date-style / yyyymd .code: n = { \tl_set:Nn \l__datatool_IE_datestyle_tl { yyyymmdd } } , date-style / dmyy .code: n = { \tl_set:Nn \l__datatool_IE_datestyle_tl { ddmmyy } } , date-style / mdyy .code: n = { \tl_set:Nn \l__datatool_IE_datestyle_tl { mmddyy } } , date-style / yymd .code: n = { \tl_set:Nn \l__datatool_IE_datestyle_tl { yymmdd } } , date-variant .choice: , date-variant / slash .code:n = { \tl_set:Nn \l__datatool_IE_datevariant_tl { slash } } , date-variant / hyphen .code:n = { \tl_set:Nn \l__datatool_IE_datevariant_tl { hyphen } } , date-variant / dot .code:n = { \tl_set:Nn \l__datatool_IE_datevariant_tl { dot } } , date-variant / dialect .code:n = { \tl_set:Nn \l__datatool_IE_datevariant_tl { \l_datatool_current_language_tl } } , time-variant .choice: , time-variant / colon .code:n = { \tl_set:Nn \l__datatool_IE_timevariant_tl { colon } } , time-variant / dot .code:n = { \tl_set:Nn \l__datatool_IE_timevariant_tl { dot } } , time-variant / dialect .code:n = { \tl_if_eq:NnTF \l__datatool_IE_timevariant_tl { dot } { \tl_set:Nn \l__datatool_IE_timevariant_tl { \l_datatool_current_language_tl _dot } } { \tl_if_in:NnF \l__datatool_IE_timevariant_tl { \l_datatool_current_language_tl } { \tl_set:Nn \l__datatool_IE_timevariant_tl { \l_datatool_current_language_tl _colon } } } } , time-variant / dialect-colon .code:n = { \tl_set:Nn \l__datatool_IE_timevariant_tl { \l_datatool_current_language_tl _colon } } , time-variant / dialect-dot .code:n = { \tl_set:Nn \l__datatool_IE_timevariant_tl { \l_datatool_current_language_tl _dot } } , } % \end{macrocode} %\subsection{Hooks} %Command to update temporal parsing commands for this region: % \begin{macrocode} \newcommand \datatoolIESetTemporalParsers { \renewcommand \DTLCurrentLocaleParseTimeStamp { \datatool_IE_parse_timestamp:NnTF } \renewcommand \DTLCurrentLocaleParseDate { \datatool_IE_parse_date:NnTF } \renewcommand \DTLCurrentLocaleParseTime { \datatool_IE_parse_time:NnTF } \let \DTLCurrentLocaleGetTimeZoneMap \datatool_IE_get_timezone_map:n } % \end{macrocode} %Set temporal formatting commands for this region. Currently this %just resets to the default, but may change in future. %Note that the defaults test if the applicable \sty{datetime2} %command is available and will fallback on ISO if not defined. %Bear in mind that the default style for \sty{datetime2} is %\texttt{iso} so there won't be a noticeable difference unless the %\sty{datetime2} regional setting is on. % \begin{macrocode} \newcommand \datatoolIESetTemporalFormatters { \let \DTLCurrentLocaleFormatDate \datatool_default_date_fmt:nnnn \let \DTLCurrentLocaleFormatTime \datatool_default_time_fmt:nnn \let \DTLCurrentLocaleFormatTimeZone \datatool_default_timezone_fmt:nn \let \DTLCurrentLocaleFormatTimeStampNoZone \datatool_default_timestamp_fmt:nnnnnnn \let \DTLCurrentLocaleFormatTimeStampWithZone \datatool_default_timestamp_fmt:nnnnnnnnn \renewcommand \DTLCurrentLocaleTimeStampFmtSep { ~ } } % \end{macrocode} % %Command to update currency and temporal parsing commands for this region: % \begin{macrocode} \newcommand \DTLIELocaleHook { \datatoolIESetNumberChars \datatoolIESetCurrency \datatoolIESetTemporalParsers \datatoolIESetTemporalFormatters % \end{macrocode} %Allow language files to reference the region: % \begin{macrocode} \tl_set:Nn \l_datatool_current_region_tl { IE } } % \end{macrocode} % % Finished with \LaTeX3 syntax. % \begin{macrocode} \ExplSyntaxOff % \end{macrocode} %Note that the hook is added to the captions by \sty{datatool-base} %not by the region file. %\iffalse % \begin{macrocode} % % \end{macrocode} %\fi %\iffalse % \begin{macrocode} %<*datatool-IM.ldf> % \end{macrocode} %\fi %\section{datatool-IM.ldf}\label{sec:datatool-IM} % Support for region IM. % \begin{macrocode} \TrackLangProvidesResource{IM}[2025/03/01 v1.0] % \end{macrocode} % Switch on \LaTeX3 syntax: % \begin{macrocode} \ExplSyntaxOn % \end{macrocode} % %\subsection{Numbers and Currency} %Set the number group and decimal symbols for this region. % \begin{macrocode} \cs_new:Nn \datatool_IM_set_numberchars_official: { \datatool_set_numberchars:nn { , } { . } } % \end{macrocode} %Unofficial style. % \begin{macrocode} \cs_new:Nn \datatool_IM_set_numberchars_unofficial: { \datatool_set_thinspace_group_decimal_char:n { . } } % \end{macrocode} %Hook to set the number group and decimal characters for the region: % \begin{macrocode} \newcommand \datatoolIMSetNumberChars { \bool_if:NT \l_datatool_region_set_numberchars_bool { \datatool_IM_set_numberchars_official: } } % \end{macrocode} %How to format the position of the currency symbol in relation to the value. % \begin{macrocode} \cs_new:Nn \datatool_IM_currency_position:nn { \dtlcurrprefixfmt { #1 } { #2 } } % \end{macrocode} %Separator between currency symbol and value. % \begin{macrocode} \tl_new:N \l_datatool_IM_sym_sep_tl % \end{macrocode} % Set the currency format for this region. % \begin{macrocode} \newcommand \datatoolIMcurrencyfmt [ 2 ] { \datatool_IM_currency_position:nn { \datatoolIMsymbolprefix { IM } #1 } { #2 } } % \end{macrocode} %Prefix for symbol, if required. % \begin{macrocode} \newcommand \datatoolIMsymbolprefix [ 1 ] { } % \end{macrocode} % Define the currency symbols for this region. % \begin{macrocode} \datatool_def_currency:nnnV { \datatoolIMcurrencyfmt } { IMP } { \pounds } \l_datatool_pound_tl % \end{macrocode} % Register the currency code with this region: % \begin{macrocode} \datatool_register_regional_currency_code:nn { IM } { IMP } % \end{macrocode} % Provide a command to set the currency for this region (for use % with any hook used when the locale changes). % NB this should do nothing with % \verb|\DTLsetup{region-currency=false}| % \begin{macrocode} \newcommand \datatoolIMSetCurrency { \bool_if:NT \l_datatool_region_set_currency_bool { \DTLsetdefaultcurrency { IMP } % \end{macrocode} %Number of digits that \cs{DTLdecimaltocurrency} should round to: % \begin{macrocode} \renewcommand \DTLCurrentLocaleCurrencyDP { 2 } % \end{macrocode} %Separator between symbol and value: % \begin{macrocode} \renewcommand \dtlcurrfmtsymsep { \l_datatool_IM_sym_sep_tl } } } % \end{macrocode} % %\subsection{Date and Time Parsing} % This defaults to day/month/year but may be changed with \cs{DTLsetLocaleOptions}. For example: %\begin{dispListing} %\DTLsetLocaleOptions{IM}{date-style=dmyyyy, date-variant=slash} %\end{dispListing} %An appropriate language file will need to also be installed to %parse dates containing month names or day of week names. % %Provide a way to configure parsing style. % \begin{macrocode} \tl_new:N \l__datatool_IM_datevariant_tl \tl_set:Nn \l__datatool_IM_datevariant_tl { slash } % \end{macrocode} %NB These token lists are used to form command names. The following is not %a format string. % \begin{macrocode} \tl_new:N \l__datatool_IM_datestyle_tl \tl_set:Nn \l__datatool_IM_datestyle_tl { ddmmyyyy } \tl_new:N \l__datatool_IM_timevariant_tl \tl_set:Nn \l__datatool_IM_timevariant_tl { colon } % \end{macrocode} % %Each parsing command defined below has final \marg{true} and \marg{false} %arguments (\code{TF}). These are used if parsing was successful (true) or if %parsing failed (false). The internal commands used by %\sty{datatool-base} have no need for solo branches (only \code{T} or only %\code{F}) so these commands are simply defined with \verb|\cs_new:Nn| %not as conditionals. % %\subsubsection{Time Stamp Parsing} %Use command %\begin{definition} %\cs{datatool\_}\meta{date-style}\verb|_hhmmss_tz_parse_timestamp:nnNnTF| %\end{definition} %with date regular expression %\begin{definition} %\cs{c\_datatool\_}\meta{date-variant}\verb|_|\meta{date-style}\verb|_date_regex| %\end{definition} %and time regular expression %\begin{definition} %\cs{c\_datatool\_}\meta{time-variant}\verb|_hhmmss_time_regex| %\end{definition} % \begin{macrocode} \cs_new:Nn \datatool_IM_parse_timestamp:NnTF { \cs_if_exist:cTF { datatool_ \l__datatool_IM_datestyle_tl _hhmmss_tz_parse_timestamp:ccNnTF } { \cs_if_exist:cTF { c_datatool_ \l__datatool_IM_datevariant_tl _ \l__datatool_IM_datestyle_tl _date_regex } { \cs_if_exist:cTF { c_datatool_ \l__datatool_IM_timevariant_tl _hhmmss_time_regex } { \use:c { datatool_ \l__datatool_IM_datestyle_tl _hhmmss_tz_parse_timestamp:ccNnTF } { c_datatool_ \l__datatool_IM_datevariant_tl _ \l__datatool_IM_datestyle_tl _date_regex } { c_datatool_ \l__datatool_IM_timevariant_tl _hhmmss_time_regex } #1 { #2 } { #3 } { #4 } } { \datatool_warn_check_head_language_empty:Vnnn \l__datatool_IM_timevariant_tl { datatool-IM } { No ~ language ~ support ~ for ~ time ~ variant ~ ` \exp_args:Ne \tl_tail:n { \l__datatool_IM_timevariant_tl } ' } { No ~ support ~ for ~ time ~ variant ~ ` \l__datatool_IM_timevariant_tl ' } #4 } } { \datatool_warn_check_head_language_empty:Vnnn \l__datatool_IM_datevariant_tl { datatool-IM } { No ~ language ~ support ~ for ~ date ~ style ~ ` \l__datatool_IM_datestyle_tl ' } { No ~ support ~ for ~ date ~ style ~ ` \l__datatool_IM_datestyle_tl ' ~ with ~ variant ~ ` \l__datatool_IM_datevariant_tl ' } #4 } } { \datatool_locale_warn:nn { datatool-IM } { No ~ support ~ for ~ date ~ style ~ ` \l__datatool_IM_datestyle_tl ' } #4 } } % \end{macrocode} % %\subsubsection{Date Parsing} %Use command \cs{datatool\_}\meta{style}\verb|_parse_date:NNnTF| %with regular expression %\begin{definition} %\cs{c\_datatool\_}\meta{variant}\verb|_anchored_|\meta{style}\verb|_date_regex| %\end{definition} % \begin{macrocode} \cs_new:Nn \datatool_IM_parse_date:NnTF { \cs_if_exist:cTF { datatool_ \l__datatool_IM_datestyle_tl _parse_date:NNnTF } { \cs_if_exist:cTF { c_datatool_ \l__datatool_IM_datevariant_tl _anchored_ \l__datatool_IM_datestyle_tl _date_regex } { \exp_args:cc { datatool_ \l__datatool_IM_datestyle_tl _parse_date:NNnTF } { c_datatool_ \l__datatool_IM_datevariant_tl _anchored_ \l__datatool_IM_datestyle_tl _date_regex } #1 { #2 } { #3 } { #4 } } { \datatool_warn_check_head_language_empty:Vnnn \l__datatool_IM_datevariant_tl { datatool-IM } { No ~ language ~ support ~ for ~ date ~ style ~ ` \l__datatool_IM_datestyle_tl ' } { No ~ support ~ for ~ date ~ style ~ ` \l__datatool_IM_datestyle_tl ' ~ with ~ variant ~ ` \l__datatool_IM_datevariant_tl ' } #4 } } { \datatool_locale_warn:nn { datatool-IM } { No ~ support ~ for ~ date ~ style ~ ` \l__datatool_IM_datestyle_tl ' } #4 } } % \end{macrocode} % %\subsubsection{Time Parsing} %Use command \cs{datatool\_}\meta{style}\verb|_parse_time:NNnTF| %with regular expression %\begin{definition} %\cs{c\_datatool\_}\meta{variant}\verb|_anchored_|\meta{style}\verb|_time_regex| %\end{definition} % \begin{macrocode} \cs_new:Nn \datatool_IM_parse_time:NnTF { \cs_if_exist:cTF { c_datatool_ \l__datatool_IM_timevariant_tl _anchored_hhmmss_time_regex } { \datatool_hhmmss_parse_time:cNnTF { c_datatool_ \l__datatool_IM_timevariant_tl _anchored_hhmmss_time_regex } #1 { #2 } { #3 } { #4 } } { \datatool_warn_check_head_language_empty:Vnnn \l__datatool_IM_timevariant_tl { datatool-IM } { No ~ language ~ support ~ for ~ time ~ variant ~ ` \exp_args:Ne \tl_tail:n { \l__datatool_IM_timevariant_tl } ' } { No ~ support ~ for ~ time ~ variant ~ ` \l__datatool_IM_timevariant_tl ' } #4 } } % \end{macrocode} % %\subsubsection{Time Zone Mappings} %Define time zone mapping command for this region: % \begin{macrocode} \cs_new:Nn \datatool_IM_get_timezone_map:n { \datatool_region_get_timezone_map:n { IM / #1 } } % \end{macrocode} %Define time zone IDs for this region (one-way map from ID to offset): % \begin{macrocode} \datatool_region_set_timezone_map:nn { IM / CET } { +01:00 } \datatool_region_set_timezone_map:nn { IM / GMT } { +00:00 } \datatool_region_set_timezone_map:nn { IM / BST } { +01:00 } \datatool_region_set_timezone_map:nn { IM / CEST } { +02:00 } % \end{macrocode} % %\subsection{Options} %Define options for this region: % \begin{macrocode} \datatool_locale_define_keys:nn { IM } { number-style .choices:nn = { official, unofficial } { \exp_args:NNe \renewcommand \datatoolIMSetNumberChars { \exp_not:N \bool_if:NT \exp_not:N \l_datatool_region_set_numberchars_bool { \exp_not:c { datatool_IM_set_numberchars_ \l_keys_choice_tl : } } } \tl_if_eq:NnT \l_datatool_current_region_tl { IM } { \datatoolIMSetNumberChars } } , % \end{macrocode} % Currency symbol before or after value: % \begin{macrocode} currency-symbol-position .choice: , currency-symbol-position / before .code:n = { \cs_set_eq:NN \datatool_IM_currency_position:nn \dtlcurrprefixfmt } , currency-symbol-position / after .code:n = { \cs_set_eq:NN \datatool_IM_currency_position:nn \dtlcurrsuffixfmt } , % \end{macrocode} % Should the currency symbol be prefixed with the region code: % \begin{macrocode} currency-symbol-prefix .choice: , currency-symbol-prefix / false .code:n = { \cs_set_eq:NN \datatoolIMsymbolprefix \use_none:n } , currency-symbol-prefix / true .code:n = { \cs_set_eq:NN \datatoolIMsymbolprefix \datatool_currency_symbol_region_prefix:n } , currency-symbol-prefix .default:n = { true } , % \end{macrocode} % Separator between currency symbol (not code) and value: % \begin{macrocode} currency-symbol-sep .choice: , currency-symbol-sep / none .code:n = { \tl_clear:N \l_datatool_IM_sym_sep_tl } , currency-symbol-sep / thin-space .code:n = { \tl_set:Nn \l_datatool_IM_sym_sep_tl { \, } } , currency-symbol-sep / space .code:n = { \tl_set:Nn \l_datatool_IM_sym_sep_tl { ~ } } , currency-symbol-sep / nbsp .code:n = { \tl_set:Nn \l_datatool_IM_sym_sep_tl { \nobreakspace } } , currency-symbol-sep . initial:n = { none } , % \end{macrocode} % Date and time styles: % \begin{macrocode} date-style .choice: , date-style / dmyyyy .code: n = { \tl_set:Nn \l__datatool_IM_datestyle_tl { ddmmyyyy } } , date-style / mdyyyy .code: n = { \tl_set:Nn \l__datatool_IM_datestyle_tl { mmddyyyy } } , date-style / yyyymd .code: n = { \tl_set:Nn \l__datatool_IM_datestyle_tl { yyyymmdd } } , date-style / dmyy .code: n = { \tl_set:Nn \l__datatool_IM_datestyle_tl { ddmmyy } } , date-style / mdyy .code: n = { \tl_set:Nn \l__datatool_IM_datestyle_tl { mmddyy } } , date-style / yymd .code: n = { \tl_set:Nn \l__datatool_IM_datestyle_tl { yymmdd } } , date-variant .choice: , date-variant / slash .code:n = { \tl_set:Nn \l__datatool_IM_datevariant_tl { slash } } , date-variant / hyphen .code:n = { \tl_set:Nn \l__datatool_IM_datevariant_tl { hyphen } } , date-variant / dot .code:n = { \tl_set:Nn \l__datatool_IM_datevariant_tl { dot } } , date-variant / dialect .code:n = { \tl_set:Nn \l__datatool_IM_datevariant_tl { \l_datatool_current_language_tl } } , time-variant .choice: , time-variant / colon .code:n = { \tl_set:Nn \l__datatool_IM_timevariant_tl { colon } } , time-variant / dot .code:n = { \tl_set:Nn \l__datatool_IM_timevariant_tl { dot } } , time-variant / dialect .code:n = { \tl_if_eq:NnTF \l__datatool_IM_timevariant_tl { dot } { \tl_set:Nn \l__datatool_IM_timevariant_tl { \l_datatool_current_language_tl _dot } } { \tl_if_in:NnF \l__datatool_IM_timevariant_tl { \l_datatool_current_language_tl } { \tl_set:Nn \l__datatool_IM_timevariant_tl { \l_datatool_current_language_tl _colon } } } } , time-variant / dialect-colon .code:n = { \tl_set:Nn \l__datatool_IM_timevariant_tl { \l_datatool_current_language_tl _colon } } , time-variant / dialect-dot .code:n = { \tl_set:Nn \l__datatool_IM_timevariant_tl { \l_datatool_current_language_tl _dot } } , } % \end{macrocode} % %\subsection{Hooks} %Command to update temporal parsing commands for this region: % \begin{macrocode} \newcommand \datatoolIMSetTemporalParsers { \renewcommand \DTLCurrentLocaleParseTimeStamp { \datatool_IM_parse_timestamp:NnTF } \renewcommand \DTLCurrentLocaleParseDate { \datatool_IM_parse_date:NnTF } \renewcommand \DTLCurrentLocaleParseTime { \datatool_IM_parse_time:NnTF } \let \DTLCurrentLocaleGetTimeZoneMap \datatool_IM_get_timezone_map:n } % \end{macrocode} %Set temporal formatting commands for this region. Currently this %just resets to the default, but may change in future. %Note that the defaults test if the applicable \sty{datetime2} %command is available and will fallback on ISO if not defined. %Bear in mind that the default style for \sty{datetime2} is %\texttt{iso} so there won't be a noticeable difference unless the %\sty{datetime2} regional setting is on. % \begin{macrocode} \newcommand \datatoolIMSetTemporalFormatters { \let \DTLCurrentLocaleFormatDate \datatool_default_date_fmt:nnnn \let \DTLCurrentLocaleFormatTime \datatool_default_time_fmt:nnn \let \DTLCurrentLocaleFormatTimeZone \datatool_default_timezone_fmt:nn \let \DTLCurrentLocaleFormatTimeStampNoZone \datatool_default_timestamp_fmt:nnnnnnn \let \DTLCurrentLocaleFormatTimeStampWithZone \datatool_default_timestamp_fmt:nnnnnnnnn \renewcommand \DTLCurrentLocaleTimeStampFmtSep { ~ } } % \end{macrocode} % % %Command to update currency and temporal parsing commands for this region: % \begin{macrocode} \newcommand \DTLIMLocaleHook { \datatoolIMSetNumberChars \datatoolIMSetCurrency \datatoolIMSetTemporalParsers \datatoolIMSetTemporalFormatters % \end{macrocode} %Allow language files to reference the region: % \begin{macrocode} \tl_set:Nn \l_datatool_current_region_tl { IM } } % \end{macrocode} % % Finished with \LaTeX3 syntax. % \begin{macrocode} \ExplSyntaxOff % \end{macrocode} %Note that the hook is added to the captions by \sty{datatool-base} %not by the region file. %\iffalse % \begin{macrocode} % % \end{macrocode} %\fi %\iffalse % \begin{macrocode} %<*datatool-JE.ldf> % \end{macrocode} %\fi %\section{datatool-JE.ldf}\label{sec:datatool-JE} % Support for region JE. % \begin{macrocode} \TrackLangProvidesResource{JE}[2025/03/01 v1.0] % \end{macrocode} % Switch on \LaTeX3 syntax: % \begin{macrocode} \ExplSyntaxOn % \end{macrocode} % %\subsection{Numbers and Currency} %Set the number group and decimal symbols for this region. % \begin{macrocode} \cs_new:Nn \datatool_JE_set_numberchars_official: { \datatool_set_numberchars:nn { , } { . } } % \end{macrocode} %Unofficial style. % \begin{macrocode} \cs_new:Nn \datatool_JE_set_numberchars_unofficial: { \datatool_set_thinspace_group_decimal_char:n { . } } % \end{macrocode} %Hook to set the number group and decimal characters for the region: % \begin{macrocode} \newcommand \datatoolJESetNumberChars { \bool_if:NT \l_datatool_region_set_numberchars_bool { \datatool_JE_set_numberchars_official: } } % \end{macrocode} %How to format the position of the currency symbol in relation to the value. % \begin{macrocode} \cs_new:Nn \datatool_JE_currency_position:nn { \dtlcurrprefixfmt { #1 } { #2 } } % \end{macrocode} %Separator between currency symbol and value. % \begin{macrocode} \tl_new:N \l_datatool_JE_sym_sep_tl % \end{macrocode} % Set the currency format for this region. % \begin{macrocode} \newcommand \datatoolJEcurrencyfmt [ 2 ] { \datatool_JE_currency_position:nn { \datatoolJEsymbolprefix { JE } #1 } { #2 } } % \end{macrocode} %Prefix for symbol, if required. % \begin{macrocode} \newcommand \datatoolJEsymbolprefix [ 1 ] { } % \end{macrocode} % Define the currency symbols for this region. % \begin{macrocode} \datatool_def_currency:nnnV { \datatoolJEcurrencyfmt } { JEP } { \pounds } \l_datatool_pound_tl % \end{macrocode} % Register the currency code with this region: % \begin{macrocode} \datatool_register_regional_currency_code:nn { JE } { JEP } % \end{macrocode} % Provide a command to set the currency for this region (for use % with any hook used when the locale changes). % NB this should do nothing with % \verb|\DTLsetup{region-currency=false}| % \begin{macrocode} \newcommand \datatoolJESetCurrency { \bool_if:NT \l_datatool_region_set_currency_bool { \DTLsetdefaultcurrency { JEP } % \end{macrocode} %Number of digits that \cs{DTLdecimaltocurrency} should round to: % \begin{macrocode} \renewcommand \DTLCurrentLocaleCurrencyDP { 2 } % \end{macrocode} %Separator between symbol and value: % \begin{macrocode} \renewcommand \dtlcurrfmtsymsep { \l_datatool_JE_sym_sep_tl } } } % \end{macrocode} % %\subsection{Date and Time Parsing} % This defaults to day/month/year but may be changed with \cs{DTLsetLocaleOptions}. For example: %\begin{dispListing} %\DTLsetLocaleOptions{JE}{date-style=dmyyyy, date-variant=slash} %\end{dispListing} %An appropriate language file will need to also be installed to %parse dates containing month names or day of week names. % %Provide a way to configure parsing style. % \begin{macrocode} \tl_new:N \l__datatool_JE_datevariant_tl \tl_set:Nn \l__datatool_JE_datevariant_tl { slash } % \end{macrocode} %NB These token lists are used to form command names. The following is not %a format string. % \begin{macrocode} \tl_new:N \l__datatool_JE_datestyle_tl \tl_set:Nn \l__datatool_JE_datestyle_tl { ddmmyyyy } \tl_new:N \l__datatool_JE_timevariant_tl \tl_set:Nn \l__datatool_JE_timevariant_tl { colon } % \end{macrocode} % %Each parsing command defined below has final \marg{true} and \marg{false} %arguments (\code{TF}). These are used if parsing was successful (true) or if %parsing failed (false). The internal commands used by %\sty{datatool-base} have no need for solo branches (only \code{T} or only %\code{F}) so these commands are simply defined with \verb|\cs_new:Nn| %not as conditionals. % %\subsubsection{Time Stamp Parsing} %Use command %\begin{definition} %\cs{datatool\_}\meta{date-style}\verb|_hhmmss_tz_parse_timestamp:nnNnTF| %\end{definition} %with date regular expression %\begin{definition} %\cs{c\_datatool\_}\meta{date-variant}\verb|_|\meta{date-style}\verb|_date_regex| %\end{definition} %and time regular expression %\begin{definition} %\cs{c\_datatool\_}\meta{time-variant}\verb|_hhmmss_time_regex| %\end{definition} % \begin{macrocode} \cs_new:Nn \datatool_JE_parse_timestamp:NnTF { \cs_if_exist:cTF { datatool_ \l__datatool_JE_datestyle_tl _hhmmss_tz_parse_timestamp:ccNnTF } { \cs_if_exist:cTF { c_datatool_ \l__datatool_JE_datevariant_tl _ \l__datatool_JE_datestyle_tl _date_regex } { \cs_if_exist:cTF { c_datatool_ \l__datatool_JE_timevariant_tl _hhmmss_time_regex } { \use:c { datatool_ \l__datatool_JE_datestyle_tl _hhmmss_tz_parse_timestamp:ccNnTF } { c_datatool_ \l__datatool_JE_datevariant_tl _ \l__datatool_JE_datestyle_tl _date_regex } { c_datatool_ \l__datatool_JE_timevariant_tl _hhmmss_time_regex } #1 { #2 } { #3 } { #4 } } { \datatool_warn_check_head_language_empty:Vnnn \l__datatool_JE_timevariant_tl { datatool-JE } { No ~ language ~ support ~ for ~ time ~ variant ~ ` \exp_args:Ne \tl_tail:n { \l__datatool_JE_timevariant_tl } ' } { No ~ support ~ for ~ time ~ variant ~ ` \l__datatool_JE_timevariant_tl ' } #4 } } { \datatool_warn_check_head_language_empty:Vnnn \l__datatool_JE_datevariant_tl { datatool-JE } { No ~ language ~ support ~ for ~ date ~ style ~ ` \l__datatool_JE_datestyle_tl ' } { No ~ support ~ for ~ date ~ style ~ ` \l__datatool_JE_datestyle_tl ' ~ with ~ variant ~ ` \l__datatool_JE_datevariant_tl ' } #4 } } { \datatool_locale_warn:nn { datatool-JE } { No ~ support ~ for ~ date ~ style ~ ` \l__datatool_JE_datestyle_tl ' } #4 } } % \end{macrocode} % %\subsubsection{Date Parsing} %Use command \cs{datatool\_}\meta{style}\verb|_parse_date:NNnTF| %with regular expression %\begin{definition} %\cs{c\_datatool\_}\meta{variant}\verb|_anchored_|\meta{style}\verb|_date_regex| %\end{definition} % \begin{macrocode} \cs_new:Nn \datatool_JE_parse_date:NnTF { \cs_if_exist:cTF { datatool_ \l__datatool_JE_datestyle_tl _parse_date:NNnTF } { \cs_if_exist:cTF { c_datatool_ \l__datatool_JE_datevariant_tl _anchored_ \l__datatool_JE_datestyle_tl _date_regex } { \exp_args:cc { datatool_ \l__datatool_JE_datestyle_tl _parse_date:NNnTF } { c_datatool_ \l__datatool_JE_datevariant_tl _anchored_ \l__datatool_JE_datestyle_tl _date_regex } #1 { #2 } { #3 } { #4 } } { \datatool_warn_check_head_language_empty:Vnnn \l__datatool_JE_datevariant_tl { datatool-JE } { No ~ language ~ support ~ for ~ date ~ style ~ ` \l__datatool_JE_datestyle_tl ' } { No ~ support ~ for ~ date ~ style ~ ` \l__datatool_JE_datestyle_tl ' ~ with ~ variant ~ ` \l__datatool_JE_datevariant_tl ' } #4 } } { \datatool_locale_warn:nn { datatool-JE } { No ~ support ~ for ~ date ~ style ~ ` \l__datatool_JE_datestyle_tl ' } #4 } } % \end{macrocode} % %\subsubsection{Time Parsing} %Use command \cs{datatool\_}\meta{style}\verb|_parse_time:NNnTF| %with regular expression %\begin{definition} %\cs{c\_datatool\_}\meta{variant}\verb|_anchored_|\meta{style}\verb|_time_regex| %\end{definition} % \begin{macrocode} \cs_new:Nn \datatool_JE_parse_time:NnTF { \cs_if_exist:cTF { c_datatool_ \l__datatool_JE_timevariant_tl _anchored_hhmmss_time_regex } { \datatool_hhmmss_parse_time:cNnTF { c_datatool_ \l__datatool_JE_timevariant_tl _anchored_hhmmss_time_regex } #1 { #2 } { #3 } { #4 } } { \datatool_warn_check_head_language_empty:Vnnn \l__datatool_JE_timevariant_tl { datatool-JE } { No ~ language ~ support ~ for ~ time ~ variant ~ ` \exp_args:Ne \tl_tail:n { \l__datatool_JE_timevariant_tl } ' } { No ~ support ~ for ~ time ~ variant ~ ` \l__datatool_JE_timevariant_tl ' } #4 } } % \end{macrocode} % %\subsubsection{Time Zone Mappings} %Define time zone mapping command for this region: % \begin{macrocode} \cs_new:Nn \datatool_JE_get_timezone_map:n { \datatool_region_get_timezone_map:n { JE / #1 } } % \end{macrocode} %Define time zone IDs for this region (one-way map from ID to offset): % \begin{macrocode} \datatool_region_set_timezone_map:nn { JE / CEST } { +02:00 } \datatool_region_set_timezone_map:nn { JE / GMT } { +00:00 } \datatool_region_set_timezone_map:nn { JE / CET } { +01:00 } \datatool_region_set_timezone_map:nn { JE / BST } { +01:00 } % \end{macrocode} % %\subsection{Options} %Define options for this region: % \begin{macrocode} \datatool_locale_define_keys:nn { JE } { number-style .choices:nn = { official, unofficial } { \exp_args:NNe \renewcommand \datatoolJESetNumberChars { \exp_not:N \bool_if:NT \exp_not:N \l_datatool_region_set_numberchars_bool { \exp_not:c { datatool_JE_set_numberchars_ \l_keys_choice_tl : } } } \tl_if_eq:NnT \l_datatool_current_region_tl { JE } { \datatoolJESetNumberChars } } , % \end{macrocode} % Currency symbol before or after value: % \begin{macrocode} currency-symbol-position .choice: , currency-symbol-position / before .code:n = { \cs_set_eq:NN \datatool_JE_currency_position:nn \dtlcurrprefixfmt } , currency-symbol-position / after .code:n = { \cs_set_eq:NN \datatool_JE_currency_position:nn \dtlcurrsuffixfmt } , % \end{macrocode} % Should the currency symbol be prefixed with the region code: % \begin{macrocode} currency-symbol-prefix .choice: , currency-symbol-prefix / false .code:n = { \cs_set_eq:NN \datatoolJEsymbolprefix \use_none:n } , currency-symbol-prefix / true .code:n = { \cs_set_eq:NN \datatoolJEsymbolprefix \datatool_currency_symbol_region_prefix:n } , currency-symbol-prefix .default:n = { true } , % \end{macrocode} % Separator between currency symbol (not code) and value: % \begin{macrocode} currency-symbol-sep .choice: , currency-symbol-sep / none .code:n = { \tl_clear:N \l_datatool_JE_sym_sep_tl } , currency-symbol-sep / thin-space .code:n = { \tl_set:Nn \l_datatool_JE_sym_sep_tl { \, } } , currency-symbol-sep / space .code:n = { \tl_set:Nn \l_datatool_JE_sym_sep_tl { ~ } } , currency-symbol-sep / nbsp .code:n = { \tl_set:Nn \l_datatool_JE_sym_sep_tl { \nobreakspace } } , currency-symbol-sep . initial:n = { none } , % \end{macrocode} % Date and time styles: % \begin{macrocode} date-style .choice: , date-style / dmyyyy .code: n = { \tl_set:Nn \l__datatool_JE_datestyle_tl { ddmmyyyy } } , date-style / mdyyyy .code: n = { \tl_set:Nn \l__datatool_JE_datestyle_tl { mmddyyyy } } , date-style / yyyymd .code: n = { \tl_set:Nn \l__datatool_JE_datestyle_tl { yyyymmdd } } , date-style / dmyy .code: n = { \tl_set:Nn \l__datatool_JE_datestyle_tl { ddmmyy } } , date-style / mdyy .code: n = { \tl_set:Nn \l__datatool_JE_datestyle_tl { mmddyy } } , date-style / yymd .code: n = { \tl_set:Nn \l__datatool_JE_datestyle_tl { yymmdd } } , date-variant .choice: , date-variant / slash .code:n = { \tl_set:Nn \l__datatool_JE_datevariant_tl { slash } } , date-variant / hyphen .code:n = { \tl_set:Nn \l__datatool_JE_datevariant_tl { hyphen } } , date-variant / dot .code:n = { \tl_set:Nn \l__datatool_JE_datevariant_tl { dot } } , date-variant / dialect .code:n = { \tl_set:Nn \l__datatool_JE_datevariant_tl { \l_datatool_current_language_tl } } , time-variant .choice: , time-variant / colon .code:n = { \tl_set:Nn \l__datatool_JE_timevariant_tl { colon } } , time-variant / dot .code:n = { \tl_set:Nn \l__datatool_JE_timevariant_tl { dot } } , time-variant / dialect .code:n = { \tl_if_eq:NnTF \l__datatool_JE_timevariant_tl { dot } { \tl_set:Nn \l__datatool_JE_timevariant_tl { \l_datatool_current_language_tl _dot } } { \tl_if_in:NnF \l__datatool_JE_timevariant_tl { \l_datatool_current_language_tl } { \tl_set:Nn \l__datatool_JE_timevariant_tl { \l_datatool_current_language_tl _colon } } } } , time-variant / dialect-colon .code:n = { \tl_set:Nn \l__datatool_JE_timevariant_tl { \l_datatool_current_language_tl _colon } } , time-variant / dialect-dot .code:n = { \tl_set:Nn \l__datatool_JE_timevariant_tl { \l_datatool_current_language_tl _dot } } , } % \end{macrocode} % %\subsection{Hooks} %Command to update temporal parsing commands for this region: % \begin{macrocode} \newcommand \datatoolJESetTemporalParsers { \renewcommand \DTLCurrentLocaleParseTimeStamp { \datatool_JE_parse_timestamp:NnTF } \renewcommand \DTLCurrentLocaleParseDate { \datatool_JE_parse_date:NnTF } \renewcommand \DTLCurrentLocaleParseTime { \datatool_JE_parse_time:NnTF } \let \DTLCurrentLocaleGetTimeZoneMap \datatool_JE_get_timezone_map:n } % \end{macrocode} %Set temporal formatting commands for this region. Currently this %just resets to the default, but may change in future. %Note that the defaults test if the applicable \sty{datetime2} %command is available and will fallback on ISO if not defined. %Bear in mind that the default style for \sty{datetime2} is %\texttt{iso} so there won't be a noticeable difference unless the %\sty{datetime2} regional setting is on. % \begin{macrocode} \newcommand \datatoolJESetTemporalFormatters { \let \DTLCurrentLocaleFormatDate \datatool_default_date_fmt:nnnn \let \DTLCurrentLocaleFormatTime \datatool_default_time_fmt:nnn \let \DTLCurrentLocaleFormatTimeZone \datatool_default_timezone_fmt:nn \let \DTLCurrentLocaleFormatTimeStampNoZone \datatool_default_timestamp_fmt:nnnnnnn \let \DTLCurrentLocaleFormatTimeStampWithZone \datatool_default_timestamp_fmt:nnnnnnnnn \renewcommand \DTLCurrentLocaleTimeStampFmtSep { ~ } } % \end{macrocode} % % %Command to update currency and temporal parsing commands for this region: % \begin{macrocode} \newcommand \DTLJELocaleHook { \datatoolJESetNumberChars \datatoolJESetCurrency \datatoolJESetTemporalParsers \datatoolJESetTemporalFormatters % \end{macrocode} %Allow language files to reference the region: % \begin{macrocode} \tl_set:Nn \l_datatool_current_region_tl { JE } } % \end{macrocode} % % Finished with \LaTeX3 syntax. % \begin{macrocode} \ExplSyntaxOff % \end{macrocode} %Note that the hook is added to the captions by \sty{datatool-base} %not by the region file. %\iffalse % \begin{macrocode} % % \end{macrocode} %\fi %\iffalse % \begin{macrocode} %<*datatool-NZ.ldf> % \end{macrocode} %\fi %\section{datatool-NZ.ldf}\label{sec:datatool-NZ} % Support for region NZ. % \begin{macrocode} \TrackLangProvidesResource{NZ}[2025/03/01 v1.0] % \end{macrocode} % Switch on \LaTeX3 syntax: % \begin{macrocode} \ExplSyntaxOn % \end{macrocode} % %\subsection{Numbers and Currency} %Set the number group and decimal symbols for this region. % \begin{macrocode} \cs_new:Nn \datatool_NZ_set_numberchars_official: { \datatool_set_numberchars:nn { , } { . } } % \end{macrocode} %Unofficial style. % \begin{macrocode} \cs_new:Nn \datatool_NZ_set_numberchars_unofficial: { \datatool_set_thinspace_group_decimal_char:n { . } } % \end{macrocode} %Hook to set the number group and decimal characters for the region: % \begin{macrocode} \newcommand \datatoolNZSetNumberChars { \bool_if:NT \l_datatool_region_set_numberchars_bool { \datatool_NZ_set_numberchars_official: } } % \end{macrocode} %How to format the position of the currency symbol in relation to the value. % \begin{macrocode} \cs_new:Nn \datatool_NZ_currency_position:nn { \dtlcurrprefixfmt { #1 } { #2 } } % \end{macrocode} %Separator between currency symbol and value. % \begin{macrocode} \tl_new:N \l_datatool_NZ_sym_sep_tl % \end{macrocode} % Set the currency format for this region. % \begin{macrocode} \newcommand \datatoolNZcurrencyfmt [ 2 ] { \datatool_NZ_currency_position:nn { \datatoolNZsymbolprefix { NZ } #1 } { #2 } } % \end{macrocode} %Prefix for symbol, if required. % \begin{macrocode} \newcommand \datatoolNZsymbolprefix [ 1 ] { } % \end{macrocode} % Define the currency symbols for this region. % \begin{macrocode} \datatool_def_currency:nnnV { \datatoolNZcurrencyfmt } { NZD } { \$ } \c_dollar_str % \end{macrocode} % Register the currency code with this region: % \begin{macrocode} \datatool_register_regional_currency_code:nn { NZ } { NZD } % \end{macrocode} % Provide a command to set the currency for this region (for use % with any hook used when the locale changes). % NB this should do nothing with % \verb|\DTLsetup{region-currency=false}| % \begin{macrocode} \newcommand \datatoolNZSetCurrency { \bool_if:NT \l_datatool_region_set_currency_bool { \DTLsetdefaultcurrency { NZD } % \end{macrocode} %Number of digits that \cs{DTLdecimaltocurrency} should round to: % \begin{macrocode} \renewcommand \DTLCurrentLocaleCurrencyDP { 2 } % \end{macrocode} %Separator between symbol and value: % \begin{macrocode} \renewcommand \dtlcurrfmtsymsep { \l_datatool_NZ_sym_sep_tl } } } % \end{macrocode} % %\subsection{Date and Time Parsing} % This defaults to day/month/year but may be changed with \cs{DTLsetLocaleOptions}. For example: %\begin{dispListing} %\DTLsetLocaleOptions{NZ}{date-style=dmyyyy, date-variant=slash} %\end{dispListing} %An appropriate language file will need to also be installed to %parse dates containing month names or day of week names. % %Provide a way to configure parsing style. % \begin{macrocode} \tl_new:N \l__datatool_NZ_datevariant_tl \tl_set:Nn \l__datatool_NZ_datevariant_tl { slash } % \end{macrocode} %NB These token lists are used to form command names. The following is not %a format string. % \begin{macrocode} \tl_new:N \l__datatool_NZ_datestyle_tl \tl_set:Nn \l__datatool_NZ_datestyle_tl { ddmmyyyy } \tl_new:N \l__datatool_NZ_timevariant_tl \tl_set:Nn \l__datatool_NZ_timevariant_tl { colon } % \end{macrocode} % %Each parsing command defined below has final \marg{true} and \marg{false} %arguments (\code{TF}). These are used if parsing was successful (true) or if %parsing failed (false). The internal commands used by %\sty{datatool-base} have no need for solo branches (only \code{T} or only %\code{F}) so these commands are simply defined with \verb|\cs_new:Nn| %not as conditionals. % %\subsubsection{Time Stamp Parsing} %Use command %\begin{definition} %\cs{datatool\_}\meta{date-style}\verb|_hhmmss_tz_parse_timestamp:nnNnTF| %\end{definition} %with date regular expression %\begin{definition} %\cs{c\_datatool\_}\meta{date-variant}\verb|_|\meta{date-style}\verb|_date_regex| %\end{definition} %and time regular expression %\begin{definition} %\cs{c\_datatool\_}\meta{time-variant}\verb|_hhmmss_time_regex| %\end{definition} % \begin{macrocode} \cs_new:Nn \datatool_NZ_parse_timestamp:NnTF { \cs_if_exist:cTF { datatool_ \l__datatool_NZ_datestyle_tl _hhmmss_tz_parse_timestamp:ccNnTF } { \cs_if_exist:cTF { c_datatool_ \l__datatool_NZ_datevariant_tl _ \l__datatool_NZ_datestyle_tl _date_regex } { \cs_if_exist:cTF { c_datatool_ \l__datatool_NZ_timevariant_tl _hhmmss_time_regex } { \use:c { datatool_ \l__datatool_NZ_datestyle_tl _hhmmss_tz_parse_timestamp:ccNnTF } { c_datatool_ \l__datatool_NZ_datevariant_tl _ \l__datatool_NZ_datestyle_tl _date_regex } { c_datatool_ \l__datatool_NZ_timevariant_tl _hhmmss_time_regex } #1 { #2 } { #3 } { #4 } } { \datatool_warn_check_head_language_empty:Vnnn \l__datatool_NZ_timevariant_tl { datatool-NZ } { No ~ language ~ support ~ for ~ time ~ variant ~ ` \exp_args:Ne \tl_tail:n { \l__datatool_NZ_timevariant_tl } ' } { No ~ support ~ for ~ time ~ variant ~ ` \l__datatool_NZ_timevariant_tl ' } #4 } } { \datatool_warn_check_head_language_empty:Vnnn \l__datatool_NZ_datevariant_tl { datatool-NZ } { No ~ language ~ support ~ for ~ date ~ style ~ ` \l__datatool_NZ_datestyle_tl ' } { No ~ support ~ for ~ date ~ style ~ ` \l__datatool_NZ_datestyle_tl ' ~ with ~ variant ~ ` \l__datatool_NZ_datevariant_tl ' } #4 } } { \datatool_locale_warn:nn { datatool-NZ } { No ~ support ~ for ~ date ~ style ~ ` \l__datatool_NZ_datestyle_tl ' } #4 } } % \end{macrocode} % %\subsubsection{Date Parsing} %Use command \cs{datatool\_}\meta{style}\verb|_parse_date:NNnTF| %with regular expression %\begin{definition} %\cs{c\_datatool\_}\meta{variant}\verb|_anchored_|\meta{style}\verb|_date_regex| %\end{definition} % \begin{macrocode} \cs_new:Nn \datatool_NZ_parse_date:NnTF { \cs_if_exist:cTF { datatool_ \l__datatool_NZ_datestyle_tl _parse_date:NNnTF } { \cs_if_exist:cTF { c_datatool_ \l__datatool_NZ_datevariant_tl _anchored_ \l__datatool_NZ_datestyle_tl _date_regex } { \exp_args:cc { datatool_ \l__datatool_NZ_datestyle_tl _parse_date:NNnTF } { c_datatool_ \l__datatool_NZ_datevariant_tl _anchored_ \l__datatool_NZ_datestyle_tl _date_regex } #1 { #2 } { #3 } { #4 } } { \datatool_warn_check_head_language_empty:Vnnn \l__datatool_NZ_datevariant_tl { datatool-NZ } { No ~ language ~ support ~ for ~ date ~ style ~ ` \l__datatool_NZ_datestyle_tl ' } { No ~ support ~ for ~ date ~ style ~ ` \l__datatool_NZ_datestyle_tl ' ~ with ~ variant ~ ` \l__datatool_NZ_datevariant_tl ' } #4 } } { \datatool_locale_warn:nn { datatool-NZ } { No ~ support ~ for ~ date ~ style ~ ` \l__datatool_NZ_datestyle_tl ' } #4 } } % \end{macrocode} % %\subsubsection{Time Parsing} %Use command \cs{datatool\_}\meta{style}\verb|_parse_time:NNnTF| %with regular expression %\begin{definition} %\cs{c\_datatool\_}\meta{variant}\verb|_anchored_|\meta{style}\verb|_time_regex| %\end{definition} % \begin{macrocode} \cs_new:Nn \datatool_NZ_parse_time:NnTF { \cs_if_exist:cTF { c_datatool_ \l__datatool_NZ_timevariant_tl _anchored_hhmmss_time_regex } { \datatool_hhmmss_parse_time:cNnTF { c_datatool_ \l__datatool_NZ_timevariant_tl _anchored_hhmmss_time_regex } #1 { #2 } { #3 } { #4 } } { \datatool_warn_check_head_language_empty:Vnnn \l__datatool_NZ_timevariant_tl { datatool-NZ } { No ~ language ~ support ~ for ~ time ~ variant ~ ` \exp_args:Ne \tl_tail:n { \l__datatool_NZ_timevariant_tl } ' } { No ~ support ~ for ~ time ~ variant ~ ` \l__datatool_NZ_timevariant_tl ' } #4 } } % \end{macrocode} % %\subsubsection{Time Zone Mappings} %Define time zone mapping command for this region: % \begin{macrocode} \cs_new:Nn \datatool_NZ_get_timezone_map:n { \datatool_region_get_timezone_map:n { NZ / #1 } } % \end{macrocode} %Define time zone IDs for this region (one-way map from ID to offset): % \begin{macrocode} \datatool_region_set_timezone_map:nn { NZ / NZST } { +12:00 } \datatool_region_set_timezone_map:nn { NZ / CHADT } { +13:45 } \datatool_region_set_timezone_map:nn { NZ / NZDT } { +13:00 } \datatool_region_set_timezone_map:nn { NZ / CHAST } { +12:45 } % \end{macrocode} % %\subsection{Options} %Define options for this region: % \begin{macrocode} \datatool_locale_define_keys:nn { NZ } { number-style .choices:nn = { official, unofficial } { \exp_args:NNe \renewcommand \datatoolNZSetNumberChars { \exp_not:N \bool_if:NT \exp_not:N \l_datatool_region_set_numberchars_bool { \exp_not:c { datatool_NZ_set_numberchars_ \l_keys_choice_tl : } } } \tl_if_eq:NnT \l_datatool_current_region_tl { NZ } { \datatoolNZSetNumberChars } } , % \end{macrocode} % Currency symbol before or after value: % \begin{macrocode} currency-symbol-position .choice: , currency-symbol-position / before .code:n = { \cs_set_eq:NN \datatool_NZ_currency_position:nn \dtlcurrprefixfmt } , currency-symbol-position / after .code:n = { \cs_set_eq:NN \datatool_NZ_currency_position:nn \dtlcurrsuffixfmt } , % \end{macrocode} % Should the currency symbol be prefixed with the region code: % \begin{macrocode} currency-symbol-prefix .choice: , currency-symbol-prefix / false .code:n = { \cs_set_eq:NN \datatoolNZsymbolprefix \use_none:n } , currency-symbol-prefix / true .code:n = { \cs_set_eq:NN \datatoolNZsymbolprefix \datatool_currency_symbol_region_prefix:n } , currency-symbol-prefix .default:n = { true } , % \end{macrocode} % Separator between currency symbol (not code) and value: % \begin{macrocode} currency-symbol-sep .choice: , currency-symbol-sep / none .code:n = { \tl_clear:N \l_datatool_NZ_sym_sep_tl } , currency-symbol-sep / thin-space .code:n = { \tl_set:Nn \l_datatool_NZ_sym_sep_tl { \, } } , currency-symbol-sep / space .code:n = { \tl_set:Nn \l_datatool_NZ_sym_sep_tl { ~ } } , currency-symbol-sep / nbsp .code:n = { \tl_set:Nn \l_datatool_NZ_sym_sep_tl { \nobreakspace } } , currency-symbol-sep . initial:n = { none } , % \end{macrocode} % Date and time styles: % \begin{macrocode} date-style .choice: , date-style / dmyyyy .code: n = { \tl_set:Nn \l__datatool_NZ_datestyle_tl { ddmmyyyy } } , date-style / mdyyyy .code: n = { \tl_set:Nn \l__datatool_NZ_datestyle_tl { mmddyyyy } } , date-style / yyyymd .code: n = { \tl_set:Nn \l__datatool_NZ_datestyle_tl { yyyymmdd } } , date-style / dmyy .code: n = { \tl_set:Nn \l__datatool_NZ_datestyle_tl { ddmmyy } } , date-style / mdyy .code: n = { \tl_set:Nn \l__datatool_NZ_datestyle_tl { mmddyy } } , date-style / yymd .code: n = { \tl_set:Nn \l__datatool_NZ_datestyle_tl { yymmdd } } , date-variant .choice: , date-variant / slash .code:n = { \tl_set:Nn \l__datatool_NZ_datevariant_tl { slash } } , date-variant / hyphen .code:n = { \tl_set:Nn \l__datatool_NZ_datevariant_tl { hyphen } } , date-variant / dot .code:n = { \tl_set:Nn \l__datatool_NZ_datevariant_tl { dot } } , date-variant / dialect .code:n = { \tl_set:Nn \l__datatool_NZ_datevariant_tl { \l_datatool_current_language_tl } } , time-variant .choice: , time-variant / colon .code:n = { \tl_set:Nn \l__datatool_NZ_timevariant_tl { colon } } , time-variant / dot .code:n = { \tl_set:Nn \l__datatool_NZ_timevariant_tl { dot } } , time-variant / dialect .code:n = { \tl_if_eq:NnTF \l__datatool_NZ_timevariant_tl { dot } { \tl_set:Nn \l__datatool_NZ_timevariant_tl { \l_datatool_current_language_tl _dot } } { \tl_if_in:NnF \l__datatool_NZ_timevariant_tl { \l_datatool_current_language_tl } { \tl_set:Nn \l__datatool_NZ_timevariant_tl { \l_datatool_current_language_tl _colon } } } } , time-variant / dialect-colon .code:n = { \tl_set:Nn \l__datatool_NZ_timevariant_tl { \l_datatool_current_language_tl _colon } } , time-variant / dialect-dot .code:n = { \tl_set:Nn \l__datatool_NZ_timevariant_tl { \l_datatool_current_language_tl _dot } } , } % \end{macrocode} % %\subsection{Hooks} %Command to update temporal parsing commands for this region: % \begin{macrocode} \newcommand \datatoolNZSetTemporalParsers { \renewcommand \DTLCurrentLocaleParseTimeStamp { \datatool_NZ_parse_timestamp:NnTF } \renewcommand \DTLCurrentLocaleParseDate { \datatool_NZ_parse_date:NnTF } \renewcommand \DTLCurrentLocaleParseTime { \datatool_NZ_parse_time:NnTF } \let \DTLCurrentLocaleGetTimeZoneMap \datatool_NZ_get_timezone_map:n } % \end{macrocode} %Set temporal formatting commands for this region. Currently this %just resets to the default, but may change in future. %Note that the defaults test if the applicable \sty{datetime2} %command is available and will fallback on ISO if not defined. %Bear in mind that the default style for \sty{datetime2} is %\texttt{iso} so there won't be a noticeable difference unless the %\sty{datetime2} regional setting is on. % \begin{macrocode} \newcommand \datatoolNZSetTemporalFormatters { \let \DTLCurrentLocaleFormatDate \datatool_default_date_fmt:nnnn \let \DTLCurrentLocaleFormatTime \datatool_default_time_fmt:nnn \let \DTLCurrentLocaleFormatTimeZone \datatool_default_timezone_fmt:nn \let \DTLCurrentLocaleFormatTimeStampNoZone \datatool_default_timestamp_fmt:nnnnnnn \let \DTLCurrentLocaleFormatTimeStampWithZone \datatool_default_timestamp_fmt:nnnnnnnnn \renewcommand \DTLCurrentLocaleTimeStampFmtSep { ~ } } % \end{macrocode} % % %Command to update currency and temporal parsing commands for this region: % \begin{macrocode} \newcommand \DTLNZLocaleHook { \datatoolNZSetNumberChars \datatoolNZSetCurrency \datatoolNZSetTemporalParsers \datatoolNZSetTemporalFormatters % \end{macrocode} %Allow language files to reference the region: % \begin{macrocode} \tl_set:Nn \l_datatool_current_region_tl { NZ } } % \end{macrocode} % % Finished with \LaTeX3 syntax. % \begin{macrocode} \ExplSyntaxOff % \end{macrocode} %Note that the hook is added to the captions by \sty{datatool-base} %not by the region file. %\iffalse % \begin{macrocode} % % \end{macrocode} %\fi %\iffalse % \begin{macrocode} %<*datatool-US.ldf> % \end{macrocode} %\fi %\section{datatool-US.ldf}\label{sec:datatool-US} % Support for region US. % \begin{macrocode} \TrackLangProvidesResource{US}[2025/03/01 v1.0] % \end{macrocode} % Switch on \LaTeX3 syntax: % \begin{macrocode} \ExplSyntaxOn % \end{macrocode} %\subsection{Numbers and Currency} %Set the number group and decimal symbols for this region. % \begin{macrocode} \cs_new:Nn \datatool_US_set_numberchars_official: { \datatool_set_numberchars:nn { , } { . } } % \end{macrocode} %Unofficial style. % \begin{macrocode} \cs_new:Nn \datatool_US_set_numberchars_unofficial: { \datatool_set_thinspace_group_decimal_char:n { . } } % \end{macrocode} %Hook to set the number group and decimal characters for the region: % \begin{macrocode} \newcommand \datatoolUSSetNumberChars { \bool_if:NT \l_datatool_region_set_numberchars_bool { \datatool_US_set_numberchars_official: } } % \end{macrocode} %How to format the position of the currency symbol in relation to the value. % \begin{macrocode} \cs_new:Nn \datatool_US_currency_position:nn { \dtlcurrprefixfmt { #1 } { #2 } } % \end{macrocode} %Separator between currency symbol and value. % \begin{macrocode} \tl_new:N \l_datatool_US_sym_sep_tl % \end{macrocode} % Set the currency format for this region. % \begin{macrocode} \newcommand \datatoolUScurrencyfmt [ 2 ] { \datatool_US_currency_position:nn { \datatoolUSsymbolprefix { US } #1 } { #2 } } % \end{macrocode} %Prefix for symbol, if required. % \begin{macrocode} \newcommand \datatoolUSsymbolprefix [ 1 ] { } % \end{macrocode} % Define the currency symbols for this region. % \begin{macrocode} \datatool_def_currency:nnnV { \datatoolUScurrencyfmt } { USD } { \$ } \c_dollar_str % \end{macrocode} % Register the currency code with this region: % \begin{macrocode} \datatool_register_regional_currency_code:nn { US } { USD } % \end{macrocode} % Provide a command to set the currency for this region (for use % with any hook used when the locale changes). % NB this should do nothing with % \verb|\DTLsetup{region-currency=false}| % \begin{macrocode} \newcommand \datatoolUSSetCurrency { \bool_if:NT \l_datatool_region_set_currency_bool { \DTLsetdefaultcurrency { USD } % \end{macrocode} %Number of digits that \cs{DTLdecimaltocurrency} should round to: % \begin{macrocode} \renewcommand \DTLCurrentLocaleCurrencyDP { 2 } % \end{macrocode} %Separator between symbol and value: % \begin{macrocode} \renewcommand \dtlcurrfmtsymsep { \l_datatool_US_sym_sep_tl } } } % \end{macrocode} % %\subsection{Date and Time Parsing} % This defaults to month/day/year but may be changed with \cs{DTLsetLocaleOptions}. For example: %\begin{dispListing} %\DTLsetLocaleOptions{US}{date-style=dmyyyy, date-variant=slash} %\end{dispListing} %An appropriate language file will need to also be installed to %parse dates containing month names or day of week names. % % Provide a way to configure parsing style. % \begin{macrocode} \tl_new:N \l__datatool_US_datevariant_tl \tl_set:Nn \l__datatool_US_datevariant_tl { slash } % \end{macrocode} %NB These token lists are used to form command names. The following is not %a format string. % \begin{macrocode} \tl_new:N \l__datatool_US_datestyle_tl \tl_set:Nn \l__datatool_US_datestyle_tl { mmddyyyy } \tl_new:N \l__datatool_US_timevariant_tl \tl_set:Nn \l__datatool_US_timevariant_tl { colon } % \end{macrocode} % %Each parsing command defined below has final \marg{true} and \marg{false} %arguments (\code{TF}). These are used if parsing was successful (true) or if %parsing failed (false). The internal commands used by %\sty{datatool-base} have no need for solo branches (only \code{T} or only %\code{F}) so these commands are simply defined with \verb|\cs_new:Nn| %not as conditionals. % %\subsubsection{Time Stamp Parsing} %Use command %\begin{definition} %\cs{datatool\_}\meta{date-style}\verb|_hhmmss_tz_parse_timestamp:nnNnTF| %\end{definition} %with date regular expression %\begin{definition} %\cs{c\_datatool\_}\meta{date-variant}\verb|_|\meta{date-style}\verb|_date_regex| %\end{definition} %and time regular expression %\begin{definition} %\cs{c\_datatool\_}\meta{time-variant}\verb|_hhmmss_time_regex| %\end{definition} % \begin{macrocode} \cs_new:Nn \datatool_US_parse_timestamp:NnTF { \cs_if_exist:cTF { datatool_ \l__datatool_US_datestyle_tl _hhmmss_tz_parse_timestamp:ccNnTF } { \cs_if_exist:cTF { c_datatool_ \l__datatool_US_datevariant_tl _ \l__datatool_US_datestyle_tl _date_regex } { \cs_if_exist:cTF { c_datatool_ \l__datatool_US_timevariant_tl _hhmmss_time_regex } { \use:c { datatool_ \l__datatool_US_datestyle_tl _hhmmss_tz_parse_timestamp:ccNnTF } { c_datatool_ \l__datatool_US_datevariant_tl _ \l__datatool_US_datestyle_tl _date_regex } { c_datatool_ \l__datatool_US_timevariant_tl _hhmmss_time_regex } #1 { #2 } { #3 } { #4 } } { \datatool_warn_check_head_language_empty:Vnnn \l__datatool_US_timevariant_tl { datatool-US } { No ~ language ~ support ~ for ~ time ~ variant ~ ` \exp_args:Ne \tl_tail:n { \l__datatool_US_timevariant_tl } ' } { No ~ support ~ for ~ time ~ variant ~ ` \l__datatool_US_timevariant_tl ' } #4 } } { \datatool_warn_check_head_language_empty:Vnnn \l__datatool_US_datevariant_tl { datatool-US } { No ~ language ~ support ~ for ~ date ~ style ~ ` \l__datatool_US_datestyle_tl ' } { No ~ support ~ for ~ date ~ style ~ ` \l__datatool_US_datestyle_tl ' ~ with ~ variant ~ ` \l__datatool_US_datevariant_tl ' } #4 } } { \datatool_locale_warn:nn { datatool-US } { No ~ support ~ for ~ date ~ style ~ ` \l__datatool_US_datestyle_tl ' } #4 } } % \end{macrocode} % %\subsubsection{Date Parsing} %Use command \cs{datatool\_}\meta{style}\verb|_parse_date:NNnTF| %with regular expression %\begin{definition} %\cs{c\_datatool\_}\meta{variant}\verb|_anchored_|\meta{style}\verb|_date_regex| %\end{definition} % \begin{macrocode} \cs_new:Nn \datatool_US_parse_date:NnTF { \cs_if_exist:cTF { datatool_ \l__datatool_US_datestyle_tl _parse_date:NNnTF } { \cs_if_exist:cTF { c_datatool_ \l__datatool_US_datevariant_tl _anchored_ \l__datatool_US_datestyle_tl _date_regex } { \exp_args:cc { datatool_ \l__datatool_US_datestyle_tl _parse_date:NNnTF } { c_datatool_ \l__datatool_US_datevariant_tl _anchored_ \l__datatool_US_datestyle_tl _date_regex } #1 { #2 } { #3 } { #4 } } { \datatool_warn_check_head_language_empty:Vnnn \l__datatool_US_datevariant_tl { datatool-US } { No ~ language ~ support ~ for ~ date ~ style ~ ` \l__datatool_US_datestyle_tl ' } { No ~ support ~ for ~ date ~ style ~ ` \l__datatool_US_datestyle_tl ' ~ with ~ variant ~ ` \l__datatool_US_datevariant_tl ' } #4 } } { \datatool_locale_warn:nn { datatool-US } { No ~ support ~ for ~ date ~ style ~ ` \l__datatool_US_datestyle_tl ' } #4 } } % \end{macrocode} % %\subsubsection{Time Parsing} %Use command \cs{datatool\_}\meta{style}\verb|_parse_time:NNnTF| %with regular expression %\begin{definition} %\cs{c\_datatool\_}\meta{variant}\verb|_anchored_|\meta{style}\verb|_time_regex| %\end{definition} % \begin{macrocode} \cs_new:Nn \datatool_US_parse_time:NnTF { \cs_if_exist:cTF { c_datatool_ \l__datatool_US_timevariant_tl _anchored_hhmmss_time_regex } { \datatool_hhmmss_parse_time:cNnTF { c_datatool_ \l__datatool_US_timevariant_tl _anchored_hhmmss_time_regex } #1 { #2 } { #3 } { #4 } } { \datatool_warn_check_head_language_empty:Vnnn \l__datatool_US_timevariant_tl { datatool-US } { No ~ language ~ support ~ for ~ time ~ variant ~ ` \exp_args:Ne \tl_tail:n { \l__datatool_US_timevariant_tl } ' } { No ~ support ~ for ~ time ~ variant ~ ` \l__datatool_US_timevariant_tl ' } #4 } } % \end{macrocode} % %\subsubsection{Time Zone Mappings} %Define time zone mapping command for this region: % \begin{macrocode} \cs_new:Nn \datatool_US_get_timezone_map:n { \datatool_region_get_timezone_map:n { US / #1 } } % \end{macrocode} %Define time zone IDs for this region (one-way map from ID to offset): % \begin{macrocode} \datatool_region_set_timezone_map:nn { US / AST } { -04:00 } \datatool_region_set_timezone_map:nn { US / ADT } { -03:00 } \datatool_region_set_timezone_map:nn { US / EST } { -05:00 } \datatool_region_set_timezone_map:nn { US / EDT } { -04:00 } \datatool_region_set_timezone_map:nn { US / CST } { -06:00 } \datatool_region_set_timezone_map:nn { US / CDT } { -05:00 } \datatool_region_set_timezone_map:nn { US / MST } { -07:00 } \datatool_region_set_timezone_map:nn { US / MDT } { -06:00 } \datatool_region_set_timezone_map:nn { US / PST } { -08:00 } \datatool_region_set_timezone_map:nn { US / PDT } { -07:00 } \datatool_region_set_timezone_map:nn { US / AKST } { -09:00 } \datatool_region_set_timezone_map:nn { US / AKDT } { -08:00 } \datatool_region_set_timezone_map:nn { US / HAST } { -10:00 } \datatool_region_set_timezone_map:nn { US / HADT } { -9:00 } \datatool_region_set_timezone_map:nn { US / SST } { -11:00 } \datatool_region_set_timezone_map:nn { US / ChST } { 10:00 } % \end{macrocode} % %\subsection{Options} %Define options for this region: % \begin{macrocode} \datatool_locale_define_keys:nn { US } { number-style .choices:nn = { official, unofficial } { \exp_args:NNe \renewcommand \datatoolUSSetNumberChars { \exp_not:N \bool_if:NT \exp_not:N \l_datatool_region_set_numberchars_bool { \exp_not:c { datatool_US_set_numberchars_ \l_keys_choice_tl : } } } \tl_if_eq:NnT \l_datatool_current_region_tl { US } { \datatoolUSSetNumberChars } } , % \end{macrocode} % Currency symbol before or after value: % \begin{macrocode} currency-symbol-position .choice: , currency-symbol-position / before .code:n = { \cs_set_eq:NN \datatool_US_currency_position:nn \dtlcurrprefixfmt } , currency-symbol-position / after .code:n = { \cs_set_eq:NN \datatool_US_currency_position:nn \dtlcurrsuffixfmt } , % \end{macrocode} % Should the currency symbol be prefixed with the region code: % \begin{macrocode} currency-symbol-prefix .choice: , currency-symbol-prefix / false .code:n = { \cs_set_eq:NN \datatoolUSsymbolprefix \use_none:n } , currency-symbol-prefix / true .code:n = { \cs_set_eq:NN \datatoolUSsymbolprefix \datatool_currency_symbol_region_prefix:n } , currency-symbol-prefix .default:n = { true } , % \end{macrocode} % Separator between currency symbol (not code) and value: % \begin{macrocode} currency-symbol-sep .choice: , currency-symbol-sep / none .code:n = { \tl_clear:N \l_datatool_US_sym_sep_tl } , currency-symbol-sep / thin-space .code:n = { \tl_set:Nn \l_datatool_US_sym_sep_tl { \, } } , currency-symbol-sep / space .code:n = { \tl_set:Nn \l_datatool_US_sym_sep_tl { ~ } } , currency-symbol-sep / nbsp .code:n = { \tl_set:Nn \l_datatool_US_sym_sep_tl { \nobreakspace } } , currency-symbol-sep . initial:n = { none } , % \end{macrocode} % Date and time styles: % \begin{macrocode} date-style .choice: , date-style / dmyyyy .code: n = { \tl_set:Nn \l__datatool_US_datestyle_tl { ddmmyyyy } } , date-style / mdyyyy .code: n = { \tl_set:Nn \l__datatool_US_datestyle_tl { mmddyyyy } } , date-style / yyyymd .code: n = { \tl_set:Nn \l__datatool_US_datestyle_tl { yyyymmdd } } , date-style / dmyy .code: n = { \tl_set:Nn \l__datatool_US_datestyle_tl { ddmmyy } } , date-style / mdyy .code: n = { \tl_set:Nn \l__datatool_US_datestyle_tl { mmddyy } } , date-style / yymd .code: n = { \tl_set:Nn \l__datatool_US_datestyle_tl { yymmdd } } , date-variant .choice: , date-variant / slash .code:n = { \tl_set:Nn \l__datatool_US_datevariant_tl { slash } } , date-variant / hyphen .code:n = { \tl_set:Nn \l__datatool_US_datevariant_tl { hyphen } } , date-variant / dot .code:n = { \tl_set:Nn \l__datatool_US_datevariant_tl { dot } } , date-variant / dialect .code:n = { \tl_set:Nn \l__datatool_US_datevariant_tl { \l_datatool_current_language_tl } } , time-variant .choice: , time-variant / colon .code:n = { \tl_set:Nn \l__datatool_US_timevariant_tl { colon } } , time-variant / dot .code:n = { \tl_set:Nn \l__datatool_US_timevariant_tl { dot } } , time-variant / dialect .code:n = { \tl_if_eq:NnTF \l__datatool_US_timevariant_tl { dot } { \tl_set:Nn \l__datatool_US_timevariant_tl { \l_datatool_current_language_tl _dot } } { \tl_if_in:NnF \l__datatool_US_timevariant_tl { \l_datatool_current_language_tl } { \tl_set:Nn \l__datatool_US_timevariant_tl { \l_datatool_current_language_tl _colon } } } } , time-variant / dialect-colon .code:n = { \tl_set:Nn \l__datatool_US_timevariant_tl { \l_datatool_current_language_tl _colon } } , time-variant / dialect-dot .code:n = { \tl_set:Nn \l__datatool_US_timevariant_tl { \l_datatool_current_language_tl _dot } } , } % \end{macrocode} % %\subsection{Hooks} %Command to update temporal parsing commands for this region: % \begin{macrocode} \newcommand \datatoolUSSetTemporalParsers { \renewcommand \DTLCurrentLocaleParseTimeStamp { \datatool_US_parse_timestamp:NnTF } \renewcommand \DTLCurrentLocaleParseDate { \datatool_US_parse_date:NnTF } \renewcommand \DTLCurrentLocaleParseTime { \datatool_US_parse_time:NnTF } \let \DTLCurrentLocaleGetTimeZoneMap \datatool_US_get_timezone_map:n } % \end{macrocode} %Set temporal formatting commands for this region. Currently this %just resets to the default, but may change in future. %Note that the defaults test if the applicable \sty{datetime2} %command is available and will fallback on ISO if not defined. %Bear in mind that the default style for \sty{datetime2} is %\texttt{iso} so there won't be a noticeable difference unless the %\sty{datetime2} regional setting is on. % \begin{macrocode} \newcommand \datatoolUSSetTemporalFormatters { \let \DTLCurrentLocaleFormatDate \datatool_default_date_fmt:nnnn \let \DTLCurrentLocaleFormatTime \datatool_default_time_fmt:nnn \let \DTLCurrentLocaleFormatTimeZone \datatool_default_timezone_fmt:nn \let \DTLCurrentLocaleFormatTimeStampNoZone \datatool_default_timestamp_fmt:nnnnnnn \let \DTLCurrentLocaleFormatTimeStampWithZone \datatool_default_timestamp_fmt:nnnnnnnnn \renewcommand \DTLCurrentLocaleTimeStampFmtSep { ~ } } % \end{macrocode} % %Command to update currency and temporal parsing commands for this region: % \begin{macrocode} \newcommand \DTLUSLocaleHook { \datatoolUSSetNumberChars \datatoolUSSetCurrency \datatoolUSSetTemporalParsers \datatoolUSSetTemporalFormatters % \end{macrocode} %Allow language files to reference the region: % \begin{macrocode} \tl_set:Nn \l_datatool_current_region_tl { US } } % \end{macrocode} % % Finished with \LaTeX3 syntax. % \begin{macrocode} \ExplSyntaxOff % \end{macrocode} %Note that the hook is added to the captions by \sty{datatool-base} %not by the region file. %\iffalse % \begin{macrocode} % % \end{macrocode} %\fi %\iffalse % \begin{macrocode} %<*datatool-ZA.ldf> % \end{macrocode} %\fi %\section{datatool-ZA.ldf}\label{sec:code:datatool-ZA} % Support for region ZA. % \begin{macrocode} \TrackLangProvidesResource{ZA}[2025/03/01 v1.0] % \end{macrocode} % Switch on \LaTeX3 syntax: % \begin{macrocode} \ExplSyntaxOn % \end{macrocode} % %\subsection{Numbers and Currency} %Official style is to use dot separator and decimal dot. % \begin{macrocode} \cs_new:Nn \datatool_ZA_set_numberchars_official: { \DTLsetnumberchars { . } { , } } % \end{macrocode} %but allow dialect to use another style. % \begin{macrocode} \cs_new:Nn \datatool_ZA_set_numberchars_dialect: { \cs_if_exist_use:cF { datatool \l_datatool_current_language_tl ZASetNumberChars } { \datatool_ZA_set_numberchars_official: } } % \end{macrocode} %Hook to set the number group and decimal characters for the region: % \begin{macrocode} \newcommand \datatoolZASetNumberChars { \bool_if:NT \l_datatool_region_set_numberchars_bool { \datatool_ZA_set_numberchars_official: } } % \end{macrocode} %How to format the position of the currency symbol in relation to the value. % \begin{macrocode} \cs_new:Nn \datatool_ZA_currency_position:nn { \dtlcurrprefixfmt { #1 } { #2 } } % \end{macrocode} %Separator between currency symbol and value. % \begin{macrocode} \tl_new:N \l_datatool_ZA_sym_sep_tl % \end{macrocode} % % Set the currency format for this region. % \begin{macrocode} \newcommand \datatoolZAcurrencyfmt { \datatool_ZA_currency_position:nn } % \end{macrocode} % Define the currency symbols for this region. % \begin{macrocode} \datatool_def_currency:nnnn { \datatoolZAcurrencyfmt } { ZAR } { R } { R } % \end{macrocode} %Register the currency code with this region: % \begin{macrocode} \datatool_register_regional_currency_code:nn { ZA } { ZAR } % \end{macrocode} % Provide a command to set the currency for this region (for use % with any hook used when the locale changes). % NB this should do nothing with % \verb|\DTLsetup{region-currency=false}| % \begin{macrocode} \newcommand \datatoolZASetCurrency { \bool_if:NT \l_datatool_region_set_currency_bool { \DTLsetdefaultcurrency { ZAR } % \end{macrocode} %Number of digits that \cs{DTLdecimaltocurrency} should round to: % \begin{macrocode} \renewcommand \DTLCurrentLocaleCurrencyDP { 2 } % \end{macrocode} %Separator between symbol and value: % \begin{macrocode} \renewcommand \dtlcurrfmtsymsep { \l_datatool_ZA_sym_sep_tl } } } % \end{macrocode} % %\subsection{Date and Time Parsing} % Date parsing is more complicated as there seems to be a confusing % mixture of ISO, day/month/year and month/day/year formats. % The default is year-month-day but may be changed with % \cs{DTLsetLocaleOptions}. For example: %\begin{dispListing} %\DTLsetLocaleOptions{ZA}{date-style=dmyyyy, date-variant=slash} %\end{dispListing} %An appropriate language file will need to also be installed to %parse dates containing month names or day of week names. % % \begin{macrocode} \tl_new:N \l__datatool_ZA_datevariant_tl \tl_set:Nn \l__datatool_ZA_datevariant_tl { hyphen } % \end{macrocode} %NB These token lists are used to form command names. The following is not %a format string. % \begin{macrocode} \tl_new:N \l__datatool_ZA_datestyle_tl \tl_set:Nn \l__datatool_ZA_datestyle_tl { yyyymmdd } \tl_new:N \l__datatool_ZA_timevariant_tl \tl_set:Nn \l__datatool_ZA_timevariant_tl { colon } % \end{macrocode} % %Each parsing command defined below has final \marg{true} and \marg{false} %arguments (\code{TF}). These are used if parsing was successful (true) or if %parsing failed (false). The internal commands used by %\sty{datatool-base} have no need for solo branches (only \code{T} or only %\code{F}) so these commands are simply defined with \verb|\cs_new:Nn| %not as conditionals. % %\subsubsection{Time Stamp Parsing} %Use command %\begin{definition} %\cs{datatool\_}\meta{date-style}\verb|_hhmmss_tz_parse_timestamp:nnNnTF| %\end{definition} %with date regular expression %\begin{definition} %\cs{c\_datatool\_}\meta{date-variant}\verb|_|\meta{date-style}\verb|_date_regex| %\end{definition} %and time regular expression %\begin{definition} %\cs{c\_datatool\_}\meta{time-variant}\verb|_hhmmss_time_regex| %\end{definition} % \begin{macrocode} \cs_new:Nn \datatool_ZA_parse_timestamp:NnTF { \cs_if_exist:cTF { datatool_ \l__datatool_ZA_datestyle_tl _hhmmss_tz_parse_timestamp:ccNnTF } { \cs_if_exist:cTF { c_datatool_ \l__datatool_ZA_datevariant_tl _ \l__datatool_ZA_datestyle_tl _date_regex } { \cs_if_exist:cTF { c_datatool_ \l__datatool_ZA_timevariant_tl _hhmmss_time_regex } { \use:c { datatool_ \l__datatool_ZA_datestyle_tl _hhmmss_tz_parse_timestamp:ccNnTF } { c_datatool_ \l__datatool_ZA_datevariant_tl _ \l__datatool_ZA_datestyle_tl _date_regex } { c_datatool_ \l__datatool_ZA_timevariant_tl _hhmmss_time_regex } #1 { #2 } { #3 } { #4 } } { \datatool_locale_warn:nn { datatool-ZA } { No ~ support ~ for ~ time ~ variant ~ ` \l__datatool_ZA_timevariant_tl ' } #4 } } { \datatool_locale_warn:nn { datatool-ZA } { No ~ support ~ for ~ date ~ style ~ ` \l__datatool_ZA_datestyle_tl ' ~ with ~ variant ~ ` \l__datatool_ZA_datevariant_tl ' } #4 } } { \datatool_locale_warn:nn { datatool-ZA } { No ~ support ~ for ~ date ~ style ~ ` \l__datatool_ZA_datestyle_tl ' } #4 } } % \end{macrocode} % %\subsubsection{Date Parsing} %Use command \cs{datatool\_}\meta{style}\verb|_parse_date:NNnTF| %with regular expression %\begin{definition} %\cs{c\_datatool\_}\meta{variant}\verb|_anchored_|\meta{style}\verb|_date_regex| %\end{definition} % \begin{macrocode} \cs_new:Nn \datatool_ZA_parse_date:NnTF { \cs_if_exist:cTF { datatool_ \l__datatool_ZA_datestyle_tl _parse_date:NNnTF } { \cs_if_exist:cTF { c_datatool_ \l__datatool_ZA_datevariant_tl _anchored_ \l__datatool_ZA_datestyle_tl _date_regex } { \exp_args:cc { datatool_ \l__datatool_ZA_datestyle_tl _parse_date:NNnTF } { c_datatool_ \l__datatool_ZA_datevariant_tl _anchored_ \l__datatool_ZA_datestyle_tl _date_regex } #1 { #2 } { #3 } { #4 } } { \datatool_locale_warn:nn { datatool-ZA } { No ~ support ~ for ~ date ~ style ~ ` \l__datatool_ZA_datestyle_tl ' ~ with ~ variant ~ ` \l__datatool_ZA_datevariant_tl ' } #4 } } { \datatool_locale_warn:nn { datatool-ZA } { No ~ support ~ for ~ date ~ style ~ ` \l__datatool_ZA_datestyle_tl ' } #4 } } % \end{macrocode} % %\subsubsection{Time Parsing} %Use command \cs{datatool\_}\meta{style}\verb|_parse_time:NNnTF| %with regular expression %\begin{definition} %\cs{c\_datatool\_}\meta{variant}\verb|_anchored_|\meta{style}\verb|_time_regex| %\end{definition} % \begin{macrocode} \cs_new:Nn \datatool_ZA_parse_time:NnTF { \cs_if_exist:cTF { c_datatool_ \l__datatool_ZA_timevariant_tl _anchored_hhmmss_time_regex } { \datatool_hhmmss_parse_time:cNnTF { c_datatool_ \l__datatool_ZA_timevariant_tl _anchored_hhmmss_time_regex } #1 { #2 } { #3 } { #4 } } { \datatool_locale_warn:nn { datatool-ZA } { No ~ support ~ for ~ time ~ variant ~ ` \l__datatool_ZA_timevariant_tl ' } #4 } } % \end{macrocode} % %\subsubsection{Time Zone Mapping} %Define time zone mapping command for this region: % \begin{macrocode} \cs_new:Nn \datatool_ZA_get_timezone_map:n { \datatool_region_get_timezone_map:n { ZA / #1 } } % \end{macrocode} %Define time zone IDs for this region (one-way map from ID to offset): % \begin{macrocode} \datatool_region_set_timezone_map:nn { ZA / SAST } { +02:00 } % \end{macrocode} % %\subsection{Options} %Define options for this region: % \begin{macrocode} \datatool_locale_define_keys:nn { ZA } { number-style .choices:nn = { official , dialect } { \exp_args:NNe \renewcommand \datatoolZASetNumberChars { \exp_not:N \bool_if:NT \exp_not:N \l_datatool_region_set_numberchars_bool { \exp_not:c { datatool_ZA_set_numberchars_ \l_keys_choice_tl : } } } \tl_if_eq:NnT \l_datatool_current_region_tl { ZA } { \datatoolZASetNumberChars } } , % \end{macrocode} % Currency symbol before or after value: % \begin{macrocode} currency-symbol-position .choice: , currency-symbol-position / before .code:n = { \cs_set_eq:NN \datatool_ZA_currency_position:nn \dtlcurrprefixfmt } , currency-symbol-position / after .code:n = { \cs_set_eq:NN \datatool_ZA_currency_position:nn \dtlcurrsuffixfmt } , % \end{macrocode} % Separator between currency symbol (not code) and value: % \begin{macrocode} currency-symbol-sep .choice: , currency-symbol-sep / none .code:n = { \tl_clear:N \l_datatool_ZA_sym_sep_tl } , currency-symbol-sep / thin-space .code:n = { \tl_set:Nn \l_datatool_ZA_sym_sep_tl { \, } } , currency-symbol-sep / space .code:n = { \tl_set:Nn \l_datatool_ZA_sym_sep_tl { ~ } } , currency-symbol-sep / nbsp .code:n = { \tl_set:Nn \l_datatool_ZA_sym_sep_tl { \nobreakspace } } , currency-symbol-sep .initial:n = { none } , % \end{macrocode} % Date and time styles: % \begin{macrocode} date-style .choice: , date-style / dmyyyy .code: n = { \tl_set:Nn \l__datatool_ZA_datestyle_tl { ddmmyyyy } } , date-style / mdyyyy .code: n = { \tl_set:Nn \l__datatool_ZA_datestyle_tl { mmddyyyy } } , date-style / yyyymd .code: n = { \tl_set:Nn \l__datatool_ZA_datestyle_tl { yyyymmdd } } , date-style / dmyy .code: n = { \tl_set:Nn \l__datatool_ZA_datestyle_tl { ddmmyy } } , date-style / mdyy .code: n = { \tl_set:Nn \l__datatool_ZA_datestyle_tl { mmddyy } } , date-style / yymd .code: n = { \tl_set:Nn \l__datatool_ZA_datestyle_tl { yymmdd } } , date-variant .choice: , date-variant / slash .code:n = { \tl_set:Nn \l__datatool_ZA_datevariant_tl { slash } } , date-variant / hyphen .code:n = { \tl_set:Nn \l__datatool_ZA_datevariant_tl { hyphen } } , date-variant / dot .code:n = { \tl_set:Nn \l__datatool_ZA_datevariant_tl { dot } } , date-variant / dialect .code:n = { \tl_set:Nn \l__datatool_ZA_datevariant_tl { \l_datatool_current_language_tl } } , time-variant .choice: , time-variant / colon .code:n = { \tl_set:Nn \l__datatool_ZA_timevariant_tl { colon } } , time-variant / dot .code:n = { \tl_set:Nn \l__datatool_ZA_timevariant_tl { dot } } , time-variant / dialect .code:n = { \tl_if_eq:NnTF \l__datatool_ZA_timevariant_tl { dot } { \tl_set:Nn \l__datatool_ZA_timevariant_tl { \l_datatool_current_language_tl _dot } } { \tl_if_in:NnF \l__datatool_ZA_timevariant_tl { \l_datatool_current_language_tl } { \tl_set:Nn \l__datatool_ZA_timevariant_tl { \l_datatool_current_language_tl _colon } } } } , time-variant / dialect-colon .code:n = { \tl_set:Nn \l__datatool_ZA_timevariant_tl { \l_datatool_current_language_tl _colon } } , time-variant / dialect-dot .code:n = { \tl_set:Nn \l__datatool_ZA_timevariant_tl { \l_datatool_current_language_tl _dot } } , } % \end{macrocode} % %\subsection{Hooks} %Command to update temporal parsing commands for this region: % \begin{macrocode} \newcommand \datatoolZASetTemporalParsers { \renewcommand \DTLCurrentLocaleParseTimeStamp { \datatool_ZA_parse_timestamp:NnTF } \renewcommand \DTLCurrentLocaleParseDate { \datatool_ZA_parse_date:NnTF } \renewcommand \DTLCurrentLocaleParseTime { \datatool_ZA_parse_time:NnTF } \let \DTLCurrentLocaleGetTimeZoneMap \datatool_ZA_get_timezone_map:n } % \end{macrocode} %Set temporal formatting commands for this region. Currently this %just resets to the default, but may change in future. %Note that the defaults test if the applicable \sty{datetime2} %command is available and will fallback on ISO if not defined. %Bear in mind that the default style for \sty{datetime2} is %\texttt{iso} so there won't be a noticeable difference unless the %\sty{datetime2} regional setting is on. % \begin{macrocode} \newcommand \datatoolZASetTemporalFormatters { \let \DTLCurrentLocaleFormatDate \datatool_default_date_fmt:nnnn \let \DTLCurrentLocaleFormatTime \datatool_default_time_fmt:nnn \let \DTLCurrentLocaleFormatTimeZone \datatool_default_timezone_fmt:nn \let \DTLCurrentLocaleFormatTimeStampNoZone \datatool_default_timestamp_fmt:nnnnnnn \let \DTLCurrentLocaleFormatTimeStampWithZone \datatool_default_timestamp_fmt:nnnnnnnnn \renewcommand \DTLCurrentLocaleTimeStampFmtSep { ~ } } % \end{macrocode} %Command to update currency and temporal parsing commands for this region: % \begin{macrocode} \newcommand \DTLZALocaleHook { \datatoolZASetNumberChars \datatoolZASetCurrency \datatoolZASetTemporalParsers \datatoolZASetTemporalFormatters % \end{macrocode} %Allow language files to reference the region: % \begin{macrocode} \tl_set:Nn \l_datatool_current_region_tl { ZA } } % \end{macrocode} % % Finished with \LaTeX3 syntax. % \begin{macrocode} \ExplSyntaxOff % \end{macrocode} %Note that the hook is added to the captions by \sty{datatool-base} %not by the region file. %\iffalse % \begin{macrocode} % % \end{macrocode} %\fi %\Finale \endinput