%\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         \~}
%</package>
%\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}
%</driver>
%\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}
%</datatool-AU.ldf>
%    \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}
%</datatool-BE.ldf>
%    \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}
%</datatool-CA.ldf>
%    \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}
%</datatool-FK.ldf>
%    \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}
%</datatool-GB.ldf>
%    \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}
%</datatool-GG.ldf>
%    \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}
%</datatool-GI.ldf>
%    \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}
%</datatool-IE.ldf>
%    \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}
%</datatool-IM.ldf>
%    \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}
%</datatool-JE.ldf>
%    \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}
%</datatool-NZ.ldf>
%    \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}
%</datatool-US.ldf>
%    \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}
%</datatool-ZA.ldf>
%    \end{macrocode}
%\fi
%\Finale
\endinput