%\iffalse
% datatool-english.dtx generated using makedtx version 1.2 (c) Nicola Talbot
% Command line args:
%   -doc "datatool-english.tex"
%   -src "(datatool-english\.ldf)\Z=>\1"
%   -src "(datatool-english-.*\.ldf)\Z=>\1"
%   -src "(datatool-en-.*\.ldf)\Z=>\1"
%   -src "(databib-english\.ldf)\Z=>\1"
%   -src "(person-english\.ldf)\Z=>\1"
%   -src "(datatool-anglosaxon\.ldf)\Z=>\1"
%   -src "(datatool-ang-Latn\.ldf)\Z=>\1"
%   -src "(datatool-ang-Latn-.*\.ldf)\Z=>\1"
%   -src "(datatool-ang-Runr\.ldf)\Z=>\1"
%   -src "(datatool-ang-Runr-.*\.ldf)\Z=>\1"
%   -author "Nicola Talbot"
%   datatool-english
% Created on 2025/3/12 15:32
%\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
% arara: makeindex
% arara: lualatex
% arara: lualatex
\PassOptionsToPackage{noprint}{doc}% command names are too long
\documentclass{ltxdoc}

\usepackage{fontspec}
\usepackage{tcolorbox}
\usepackage[left=2.5cm,right=2.5cm]{geometry}
\usepackage[locales={ang-Runr,ang-Latn,en}]{datatool-base}

\setromanfont{Noto Serif}
\setsansfont{Noto Sans}
\setmonofont{Noto Sans Mono}
\newfontfamily\runefont{Noto Sans Runic}
\NewDocumentCommand{\textrune}{m}{{\runefont #1}}

\CheckSum{3379}

\newcommand*{\sty}[1]{\textsf{#1}}
\newcommand*{\file}[1]{\texorpdfstring{\nolinkurl{#1}}{#1}}
\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*{\setlocaleopts}[1]{%
 \cs{DTLsetLocaleOptions}\allowbreak
 \texttt{\brackets{\strong{#1}}}\allowbreak
 \marg{key=val list}%
}

\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

\newcommand{\myLatnList}{f, u, þ, o, r, c}
\newcommand{\myRunrList}{
 \textrune{ᚠ},
 \textrune{ᚢ},
 \textrune{ᚦ},
 \textrune{ᚩ}, 
 \textrune{ᚱ}, 
 \textrune{ᚳ}
}
\DTLshufflelist\myLatnList
\DTLshufflelist\myRunrList

\title{English and Old English Localisation Support for \sty{datatool} Package}
\author{Nicola L. C. Talbot}
\date{2025-03-12 version 1.1}

\begin{document}
\DocInput{datatool-english.dtx}
\end{document}
%</driver>
%\fi
%\maketitle
%
%\begin{abstract}
%This is the English and Old English localisation support for the \sty{datatool}
%package (version 3.0+). This needs to be installed in addition to 
%\sty{datatool}. To ensure regional support, you will also need to
%install \sty{datatool-regions}.
%\end{abstract}
%
%\tableofcontents
%
%\section{Introduction}
%\label{sec:intro}
%
%This bundle provides the English and Old English modules 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 languages before the first package to load
%\sty{tracklang}.
%
%For example:
%\begin{dispListing}
%\usepackage[british]{babel}
%\usepackage{datatool-base}
%\end{dispListing}
%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}
%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}
%
%For Old English (Anglo-Saxon), you need the three letter language
%code \qt{ang} and the four letter script code: \qt{Latn}
%(Latin) or \qt{Runr} (Runic). Old English support is very limited
%and mainly provided as an example of how to support extended Latin
%and non-Latin languages. See section~\ref{sec:anglosaxon} for
%further information.
%
%If the regional file isn't installed or if no region is associated
%with the locale then only the language settings will be implemented.
%For example:
%\begin{dispListing}
%\usepackage[english]{babel}
%\usepackage{datatool-base}
%\end{dispListing}
%In this case there is no region so only \file{datatool-english.ldf}
%will be loaded.
%
%Supplementary packages provided with \sty{datatool} can also have
%the locales provided. For example:
%\begin{dispListing}
%\documentclass{article}
%\usepackage[locales={en}]{datagidx}
%\newgidx{index}{Index}
%\newterm{élan}
%\newterm{elephant}
%\newterm{élite}
%\newterm{elk}
%\begin{document}
%\gls{elk}, \gls{élan} \gls{élite} and \gls{elephant}.
%\printterms
%
%\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.
%
%The \sty{glossaries} package also loads \sty{datatool-base}
%and, as from \sty{glossaries} version 4.55, it will check for the 
%new \sty{datatool-base} commands. If they are defined then 
%\cs{printnoidxglossary} will switch to this
%new method of sorting otherwise it will fallback on the old method.
%So installing \sty{datatool-english} will not only affect
%\sty{datatool} and its associated packages but also
%\sty{glossaries}. For example:
%\begin{dispListing}
%\documentclass{article}
%\usepackage[locales={en},index,style=indexgroup]{glossaries}
%\makenoidxglossaries
%\newterm{élan}
%\newterm{elephant}
%\newterm{élite}
%\newterm{elk}
%\begin{document}
%\gls{elk}, \gls{élan} \gls{élite} and \gls{elephant}.
%\printnoidxglossary[type=index]
%
%\end{dispListing}
%
%Each \filemeta{datatool-}{lang}{.ldf} language file should 
%redefine:
%
%\begin{docCommand}{DTLandname}{}
%Should expand to the appropriate translation of \qt{and}
%(used when formatting comma-separated lists).
%\end{docCommand}
%
%Ideally, the language file should also redefine the
%following commands, which are used by \cs{DTLgetDataTypeName},
%although these are mostly provided for debugging.
%(The Anglo-Saxon support doesn't bother to redefine them.)
%
%\begin{docCommand}{DTLdatatypeunsetname}{}
%Should expand to the appropriate translation of \qt{unknown}
%(to indicate an unknown data type).
%\end{docCommand}
%
%\begin{docCommand}{DTLdatatypestringname}{}
%Should expand to the appropriate translation of \qt{string}
%(to indicate a string data type).
%\end{docCommand}
%
%\begin{docCommand}{DTLdatatypeintegername}{}
%Should expand to the appropriate translation of \qt{integer}
%(to indicate an integer data type).
%\end{docCommand}
%
%\begin{docCommand}{DTLdatatypedecimalname}{}
%Should expand to the appropriate translation of \qt{decimal}
%(to indicate a decimal data type).
%\end{docCommand}
%
%\begin{docCommand}{DTLdatatypecurrencyname}{}
%Should expand to the appropriate translation of \qt{currency}
%(to indicate a currency data type).
%\end{docCommand}
%
%\begin{docCommand}{DTLdatatypedatetimename}{}
%Should expand to the appropriate translation of \qt{datetime}
%(to indicate a datetime data type).
%\end{docCommand}
%
%\begin{docCommand}{DTLdatatypedatename}{}
%Should expand to the appropriate translation of \qt{date}
%(to indicate a date data type).
%\end{docCommand}
%
%\begin{docCommand}{DTLdatatypetimename}{}
%Should expand to the appropriate translation of \qt{time}
%(to indicate a time data type).
%\end{docCommand}
%
%\begin{docCommand}{DTLdatatypeinvalidname}{}
%Should expand to the appropriate translation of \qt{invalid}
%(to indicate an invalid data type identifier).
%\end{docCommand}
%
%Additionally, the following commands take arguments that may simply
%ignore the argument and expand to fixed text:
%
%\begin{docCommand}{dtlnonlettergroup}{\marg{char}}
%Used for non-letter groups. This would typically ignore the argument
%and expand to the appropriate translation of \qt{Symbols}.
%\end{docCommand}
%
%\begin{docCommand}{dtlnumbergroup}{\marg{char}}
%Used for number groups. This would typically ignore the argument
%and expand to the appropriate translation of \qt{Numbers}.
%\end{docCommand}
%
%\begin{docCommand}{dtlcurrencygroup}{\marg{char}}
%Used for currency groups. This would typically ignore the argument
%and expand to the appropriate translation of \qt{Currency}.
%\end{docCommand}
%
%\begin{docCommand}{dtldatetimegroup}{\marg{char}}
%Used for datetime groups. This would typically ignore the argument
%and expand to the appropriate translation of \qt{Timestamps}.
%\end{docCommand}
%
%\begin{docCommand}{dtldategroup}{\marg{char}}
%Used for date groups. This would typically ignore the argument
%and expand to the appropriate translation of \qt{Dates}.
%\end{docCommand}
%
%\begin{docCommand}{dtltimegroup}{\marg{char}}
%Used for time groups. This would typically ignore the argument
%and expand to the appropriate translation of \qt{Times}.
%\end{docCommand}
%
%The \cs{dtllettergroup} would more typically convert the argument to title
%case.
%
%\section{English (\qt{en})}
%
%The \file{datatool-english.ldf} file provides support for English
%orthography (section~\ref{sec:orthography}), parsing
%dates and times (experimental, see section~\ref{sec:temporal}),
%and for providing fixed text translations.
%
%Aside from the letter group commands, described in
%section~\ref{sec:orthography}, the only fixed text for 
%\sty{datatool-base} is \cs{DTLandname} and the textual data types
%used by \cs{DTLgetDataTypeName}. These are redefined implicitly
%via the command \cs{DTLenTranslations}, which allows an alternative
%definition of \cs{DTLandname} to be provided without having to keep
%appending to the caption hook.
%
%\begin{docCommand}{DTLenLocaleHook}{}
%The \file{datatool-english.ldf} file provides an intermediary command
%\cs{DTLenLocaleHook} that's automatically added to the captions hook.
%This performs all the \sty{datatool-base} English language redefinitions.
%There should be little reason to actually use this command anywhere
%unless you're not using a language package with caption hooks.
%\end{docCommand}
%
%Options provided by \file{datatool-english.ldf} may be set with
%\setlocaleopts{en}.  Currently, there is only one option.
%
%\begin{docKey}{and}{=\meta{setting}}{initial \opt{word}}
%This determines the definition of \cs{DTLandname} within
%\cs{DTLenSetAndName} used by the translations hook
%\cs{DTLenTranslations}. The value may be:
%\docValue{word} (define \cs{DTLandname} to expand to
%\qt{and}) or \docValue{amp} (define \cs{DTLandname}
%to expand to \cs{\&}).
%\end{docKey}
%
%Aside from \file{datatool-english.ldf}, there is also
%\file{databib-english.ldf} to provide localisation support
%for \sty{databib} (see section~\ref{sec:databib})
%and \file{person-english.ldf} to provide localisation support
%for the \sty{person} package (see section~\ref{sec:person}).
%
%\subsection{Orthography}
%\label{sec:orthography}
%
%The \file{datatool-english.ldf} file provides support for English
%orthography. This deals with how words are sorted according to the
%English alphabet. The way that the new \sty{datatool} v3.0 sorting
%commands work is to use a handler function that converts the
%original content into a byte string. Since there are no byte array
%data types in \TeX, this is implemented by converting the original
%string into an ASCII string in such a way that sorting by character
%code will produce the desired order.
%
%With the newer \cs{DTLsortwordlist}, this processing is performed
%once for each item in the list prior to sorting to allow for a
%faster character code sort of a temporary sequence variable that
%stores both the original (actual value) and the transformed (sort
%value) item.  This allows the original item to be restored
%afterwards.  (You can use \cs{show} or \cs{clist\_show:N} on the
%comma-separated list command afterwards to double-check this
%information.)
%
%For example, suppose the document starts with:
%\begin{dispListing*}{title={\sty{datatool} v3.0+}}
%\documentclass{article}
%\usepackage[locales={en}]{datatool}
%\end{dispListing*}
%\DTLenLocaleHook
%If \file{datatool-english.ldf} is installed:
%\begin{dispExample*}{title={With Localisation}}
%\newcommand{\mylist}{élan,zebra,elephant,ant,élite,elk}
%\DTLsortwordlist{\mylist}{\DTLsortwordcasehandler}
%Sorted list: \DTLformatlist{\mylist}.
%\end{dispExample*}
%However, if \file{datatool-english.ldf} isn't installed (or if
%English support hasn't been requested) the resulting list would be:
%\begingroup
%\DTLresetLanguage
%\begin{dispExample*}{title={No Localisation}}
%\newcommand{\mylist}{élan,zebra,elephant,ant,élite,elk}
%\DTLsortwordlist{\mylist}{\DTLsortwordcasehandler}
%Sorted list: \DTLformatlist{\mylist}.
%\end{dispExample*}
%\endgroup
%This is because a simple character code comparison has been used.
%(Note also the use of the default \& instead of \qt{and}.)
%
%The \cs{DTLsortwordcasehandler} function is for case-sensitive word
%sorting, whereas the \cs{DTLsortwordhandler} function is for
%case-insensitive word sorting and simply converts each element to
%lowercase before processing using the locale handler.  There are
%analogous functions for letter-order comparisons which strip spaces
%and hyphens before processing (see the \sty{datatool} manual for
%further details).
%
%The \cs{DTLsortdata} command, provided by \sty{datatool} v3.0+ for
%sorting databases, works in a similar way to \cs{DTLsortwordlist} 
%and uses the same handler functions. For example:
%\begin{dispListing}
%\documentclass{article}
%\usepackage[locales={en}]{datatool}
%
%\DTLaction{new}
%\DTLaction[ assign = { name = Annie, age = 40 } ]{new row}
%\DTLaction[ assign = { name = Ele, age = 80 } ]{new row}
%\DTLaction[ assign = { name = Éleanor, age = 28 } ]{new row}
%\DTLaction[ assign = { name = Zack, age = 47 } ]{new row}
%\DTLaction[ assign = { name = Elva, age = 53 } ]{new row}
%\DTLaction[ assign = { name = Æthelwulf, age = 95 } ]{new row}
%
%\DTLsortdata{}{name}
%\begin{document}
%\DTLaction{display}
%
%\end{dispListing}
%If \file{datatool-english.ldf} is installed, then the order will be:
%Æthelwulf, Annie, Ele, Éleanor, Elva, Zack.
%
%Without \file{datatool-english.ldf}, the order will be:
%Annie, Ele, Elva, Zack, Æthelwulf, Éleanor.
%
%If letter groups are required, an extra column can be added to the
%database with the corresponding letter group obtained from sorting:
%\begin{dispListing}
%\DTLsortdata[save-group]{}{name}
%\end{dispListing}
%The letter group is typically the first letter of the sort value
%or the actual value but this may not be the case for some languages,
%so the code for obtaining the first letter of a word is adjusted by
%the language hook.
%
%The groups obtained from sorting are letter groups if the sorted
%item starts with an alphabetical character. If the value is
%determined to be a currency, it will be considered part of the
%currency group, if the value is determined to be a number (without a
%currency prefix) then it will be considered part of the number
%group, otherwise it will be in the non-letter group.
%
%The titles for all these groups are obtained with the
%\sty{datatool-base} commands
%\cs{dtllettergroup}, \cs{dtlnonlettergroup}, \cs{dtlnumbergroup}
%and \cs{dtlcurrencygroup} which are all redefined by the language
%hook.
%
%In the case of English, the currency group title simply expands to
%\qt{Currency}, the number group title simply expands to
%\qt{Numbers}, the non-letter group title simply expands to
%\qt{Symbols}.  The letter group title expands to its argument
%converted to title case.
%
%If you need to make any adjustments, the following commands are
%provided by \file{datatool-english.ldf} for the handler and 
%groups.
%
%\begin{docCommand}{DTLenLocaleHandler}{\marg{tl-var}}
%Converts the token list variable containing the sort value.
%You may redefine this command to add support for additional
%characters, but bear in mind that the more complex the regular
%expression the longer the document build.
%\end{docCommand}
%
%\begin{docCommand}{DTLenLocaleGetGroupString}{\marg{actual}\marg{sort}\marg{tl-var}}
%Sets \meta{tl-var} to the applicable content in preparation for
%extracting the initial letter, where \meta{actual} is the original
%value and \meta{sort} is the sort value obtained after processing 
%by the handler. (Afterwards, the expansion of \meta{tl-var} will
%then be passed as the \meta{word} argument of \cs{DTLenLocaleGetInitialLetter}.)
%
%For English, this is straight-forward
%as the sort value is usually appropriate for this.
%If you redefine this command to set \meta{tl-var} to the actual
%value then accented characters will be considered separate letter
%groups. This can lead to odd results.
%\end{docCommand}
%
%\begin{docCommand}{DTLenLocaleGetInitialLetter}{\marg{word}\marg{tl-var}}
%Gets the initial letter of \meta{word} and stores it in the given
%token list variable.
%\end{docCommand}
%
%\begin{docCommand}{DTLenSetLetterGroups}{}
%Redefines the group commands. This can be redefined if different
%titles are required.
%\end{docCommand}
%
%\subsection{Dates and Times}
%\label{sec:temporal}
%
%This is still an experimental feature. As from v3.0, \sty{datatool}
%now has additional data types: date, time and datetime.
%\emph{Parsing for these is \strong{off} by default but may be enabled.}
%Without the language support, only ISO dates, times and timestamps
%can be parsed. The order (dmy, mdy, ymd) is usually set by the
%region file (provided with \sty{datatool-regions}).
%For example, \file{datatool-GB.ldf} sets the order to dmy
%whereas \file{datatool-US.ldf} sets the order to mdy.
%The region files only deal with numeric dates and times but
%have a hook to allow supporting language files to extend this to
%parsing temporal values that contain textual content, such as month
%names.
%
%The following commands are provided. Note that they use
%\LaTeX3 syntax, which needs to be enabled.
%
%\begin{docCommand*}{datatool_en_get_monthname_map:n}{ \marg{month}}
%Gets the number associated with the given English month name.
%For example, January or Jan should result in 1.
%\end{docCommand*}
%
%\begin{docCommand*}{datatool_en_if_pm:nTF}{ \marg{text} \marg{true} \marg{false}}
%Tests if \meta{text} represents afternoon (\qt{pm}, 
%\qt{in the afternoon}, \qt{in the evening}, \qt{midnight}).
%This indicates that 12 needs to be added to the hour for 12-hour
%formats. Not that \qt{noon} is not \emph{after} noon (12 noon +12 would
%result in 24, which is incorrect for noon) and
%\qt{midnight} would need to have the hour as 12 not 0 (0 midnight +12 would
%result in 12, which is incorrect for midnight).
%\end{docCommand*}
%
%\begin{docCommand*}{datatool_en_monthname:n}{ \marg{num}}
%Expands to the month name for \meta{num} (1 for January, etc).
%\end{docCommand*}
%
%\begin{docCommand*}{datatool_en_shortmonthname:n}{ \marg{num}}
%Expands to the abbreviated month name. This will be defined to
%\cs{DTMenglishshortmonthname} if that command exists
%(\sty{datetime2-english})
%or to:
%\end{docCommand*}
%\begin{docCommand*}{datatool_en_shortmonthname_dotless:n}{ \marg{num}}
%Expands to a three-letter abbreviation without a trailing dot.
%\end{docCommand*}
%An alternative command is also provided:
%\begin{docCommand*}{datatool_en_shortmonthname_dotted:n}{ \marg{num}}
%This expands to a three or four letter abbreviation followed by a
%dot except for short month names, such as May, that aren't
%abbreviated.
%\end{docCommand*}
%
%\subsection{Support for \sty{databib}}
%\label{sec:databib}
%
%The \sty{datatool-english} bundle provides English language support for
%the \sty{databib} package. Options may be set with
%\setlocaleopts{en/databib}.
%
%Currently, there is only one option:
%\begin{docKey}{short-month-style}{=\meta{style}}{initial \opt{dotted}}
%This determines the month name abbreviations for 
%\sty{databib}'s \opt{abbrv} style.
%The value may be \docValue{dotted} (use dotted month
%abbreviations) or \docValue{dotless} (use three letter abbreviations
%with no dot). 
%\end{docKey}
%
%\begin{docCommand}{DataBibEnglish}{}
%The \file{databib-english.ldf} file defines the
%intermediary command \cs{DataBibEnglish}
%that redefines all the fixed text commands. This command
%is automatically added to the captions hook if \sty{databib}
%is loaded.
%\end{docCommand}
%
%\subsection{Support for \sty{person}}
%\label{sec:person}
%
%\begin{docCommand}{DataToolPersonEnglish}{}
%The \sty{datatool-english} bundle provides English language support for
%the \sty{person} package. There are currently no options.
%The \file{person-english.ldf} file defines the intermediary
%command \cs{DataToolPersonEnglish}
%that redefines all the fixed text commands. This command
%is automatically added to the captions hook if the \sty{person}
%package is loaded.
%\end{docCommand}
%
%\section{Old English (Anglo-Saxon, \qt{ang})}
%\label{sec:anglosaxon}
%
%This bundle also supplies very limited support for Old English
%(Anglo-Saxon). Only UTF-8 encoding is supported.  This is primarily
%to provide an example of how to support a language with multiple
%scripts (or simply a language with an extended Latin or non-Latin
%script). You will need to identify the script as well as the
%language. For the Latin script:
%\begin{dispListing}
%\usepackage[locales={ang-Latn}]{datatool-base}
%\end{dispListing}
%For the Runic script:
%\begin{dispListing}
%\usepackage[locales={ang-Runr}]{datatool-base}
%\end{dispListing}
%Note that the script indicates the script of the input or source
%text. That is, the text used in the document source code, which
%may not correspond to the glyphs visible in the PDF file.
%
%For example, suppose a package provides a command called, say \cs{runic},
%which expects Latin characters in the argument but the font encoding
%ensures that those characters appear as runes in the PDF (for
%example, the hypothetical command
%\texttt{\cs{runic}\brackets{fuþorc}} in the source code would be
%rendered as \textrune{ᚠᚢᚦᚩᚱᚳ} in the PDF). In this case, the source
%is Latin and so \qt{ang-Latn} is needed when specifying the locale.
%
%If, however, the source code actually contains characters from  
%the Runic Unicode block (with an appropriate font that supports
%those characters), then the source is Runic and so \qt{ang-Runr}
%is needed when specifying the locale.
%
%If there is no captions hook, the last locale to be tracked is the
%one that will be in effect. You can switch using the following:
%\begin{docCommand}{DTLangLatnLocaleHook}{}
%Switch to \qt{ang-Latn} (if \file{datatool-ang-Latn.ldf} has been
%loaded, undefined otherwise).
%\end{docCommand}
%\begin{docCommand}{DTLangRunrLocaleHook}{}
%Switch to \qt{ang-Runr} (if \file{datatool-ang-Runr.ldf} has been
%loaded, undefined otherwise).
%\end{docCommand}
%
%The \qt{ang-Latn} localisation support provides the following
%option, which may be set using
%\setlocaleopts{ang-Latn}.
%
%\begin{docKey}[ang-Latn]{order}{=\meta{setting}}{initially \opt{harley}}
%Determines the letter order. The \meta{setting} may be:
%\docValue{harley} (A-Z, Ƿ, Ð, Æ, Þ), \docValue{stowe}
%(ending with Ƿ, Ð, Þ), \docValue{titus}
%(ending with Ƿ, Þ, Ð) or \docValue{futhorc} (starts f, u, þ, o, r, c).
%\end{docKey}
%
%The \qt{ang-Runr} localisation support provides the following
%option, which may be set using
%\setlocaleopts{ang-Runr}.
%
%\begin{docKey}[ang-Runr]{order}{=\meta{setting}}{initially \opt{punc-futhorc}}
%Determines the rune order. The \meta{setting} may be:
%\docValue{punc-unicode} (punctuation first, followed by Unicode order
%for the rest),
%\docValue{punc-futhorc} (Old English Rune Poem order, punctuation
%first), or
%\docValue{futhorc-punc} (Old English Rune Poem order, punctuation
%last).
%Note that the \qt{punc-unicode} order puts the punctuation first,
%followed by the other runes, even though the punctuation runes
%actually come towards the end of the Runic block.  The Old English
%Rune Poem order is fuþorc order, with the additional non-poem runes
%appended at the end.
%The Tironian et (which isn't a rune) is added to the end of the
%non-punctuation runes.
%\end{docKey}
%
%Both ang-Latn and ang-Runr define \cs{DTLandname} to the Tironian
%et (⁊).
%This is done via the following hooks:
%\begin{docCommand}{DTLangLatnTranslations}{}
%This is defined in \file{datatool-ang-Latn.ldf} to update the
%definition of \cs{DTLandname} and is implemented by
%\cs{DTLangLatnLocaleHook}.
%\end{docCommand}
%\begin{docCommand}{DTLangRunrTranslations}{}
%This is defined in \file{datatool-ang-Runr.ldf} to update the
%definition of \cs{DTLandname} and is implemented by
%\cs{DTLangRunrLocaleHook}.
%\end{docCommand}
%The other language-sensitive name commands aren't provided by the
%Anglo-Saxon support.
%
%There is no other localisation support (that is, no other
%fixed text or date/time support). The remaining language-sensitive
%commands are reset with \cs{DTLresetLanguage} back to their initial
%definitions.
%
%Suppose the document uses \sty{fontspec} with fonts that support
%the required characters, as follows:
%\begin{dispListing}
%\usepackage{fontspec}
%\setromanfont{Noto Serif}
%\setsansfont{Noto Sans}
%\setmonofont{Noto Sans Mono}
%\newfontfamily\runefont{Noto Sans Runic}
%\NewDocumentCommand{\textrune}{m}{{\runefont #1}}
%\end{dispListing}
%and \sty{datatool-base} has been loaded with support for
%both Latin and Runic Anglo-Saxon:
%\begin{dispListing}
%\usepackage[locales={ang-Runr,ang-Latn}]{datatool-base}
%\end{dispListing}
%and suppose the command \cs{myLatnList}
%is defined to expand to the comma-separated list
%\texttt{\myLatnList}
%and \cs{myRunrList} 
%is defined to expand to the comma-separated list
%\texttt{\def\textrune#1{\allowbreak\cs{textrune}\brackets{{\runefont #1}}}\myRunrList}
%then these lists can be sorted in the document
%as follows:
%\begin{dispExample}
%\DTLangLatnLocaleHook
%\DTLsetLocaleOptions{ang-Latn}{order=harley}
%\DTLsortwordlist{\myLatnList}{\DTLsortletterhandler}
%Sorted list (Harley): \DTLformatlist{\myLatnList}.
%
%\DTLsetLocaleOptions{ang-Latn}{order=futhorc}
%\DTLsortwordlist{\myLatnList}{\DTLsortletterhandler}
%Sorted list (fuþorc): \DTLformatlist{\myLatnList}.
%
%\DTLangRunrLocaleHook
%\DTLsetLocaleOptions{ang-Runr}{order=futhorc-punc}
%\DTLsortwordlist{\myRunrList}{\DTLsortwordhandler}
%Sorted list: \DTLformatlist{\myRunrList}.
%\end{dispExample}
%Note that the letter handler is best with \qt{ang-Latn} as there are
%many Anglo-Saxon words with hyphens. (Bosworth Toller's Anglo-Saxon
%dictionary ignores hyphens in the order. For example,
%\qt{á-ǽlan} comes between \qt{aad} and \qt{áǽðan}.)
%
%\StopEventually{%
%  \PrintChanges
%  \PrintIndex
%}
%
%
%\section{The Code}
%\iffalse
%    \begin{macrocode}
%<*datatool-english.ldf>
%    \end{macrocode}
%\fi
%\subsection{Root English LDF for \sty{datatool-base}
%(\file{datatool-english.ldf})}
% Provide support for English (\sty{tracklang} root language
% \qt{english}).
% NB number group and decimal symbols and currencies should go in
% region files.
%    \begin{macrocode}
\TrackLangProvidesResource{english}[2025/03/12 v1.1 (NLCT)]
%    \end{macrocode}
% Try loading \filemeta{datatool-english-}{encoding}{.ldf}
%    \begin{macrocode}
\TrackLangRequestResource{english-\TrackLangEncodingName}
{
%    \end{macrocode}
% Not found, fallback on \file{datatool-english-ascii.ldf}
%    \begin{macrocode}
  \csuse{datatool_locale_warn:nn}{datatool-english}%
   {%
     No support for `english' with 
     encoding `\TrackLangEncodingName'
     (falling back on US-ASCII)%
   }%
  \TrackLangRequireResource{english-ascii}
}
%    \end{macrocode}
% Switch on \LaTeX3 syntax.
%    \begin{macrocode}
\ExplSyntaxOn
%    \end{macrocode}
% Any options may be defined with
%\begin{dispListing}
%\datatool_locale_define_keys:nn { en } { ... }
%\end{dispListing}
% or
%\begin{dispListing}
%\datatool_locale_define_keys:nn { en / subgroup } { ... }
%\end{dispListing}
% (Syntax as per \verb|\keys_define:nn| )
%
%\subsubsection{Orthography rules}
%NB \cs{DTLenLocaleHandler} is defined in the applicable encoding
%file loaded above.
%
%\begin{macro}{\DTLenLocaleGetInitialLetter}
%Get the first letter of the word according to the locale's alphabet and 
%store in token list variable.
%    \begin{macrocode}
\newcommand \DTLenLocaleGetInitialLetter [ 2 ]
 {
   \datatool_get_first_letter:nN { #1 } #2 
 }
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTLenLocaleGetGroupString}
%\begin{definition}
%\cs{DTLenLocaleGetGroupString}\marg{actual}\marg{sort value}\marg{tl-var}
%\end{definition}
%Use the sort value rather than the actual value.
%This ensures that the accents are stripped, but it will mean that
%the currency and punctuation marks will have their initial marker.
%Bear in mind that this is only used for values that have been
%identified as strings. It's not used by other data types.
%    \begin{macrocode}
\newcommand \DTLenLocaleGetGroupString [ 3 ]
 {
   \tl_set:Nn #3 { #2 }
 }
%    \end{macrocode}
%\end{macro}
%
%Provide intermediary command that defines the letter group
%commands for English.
%    \begin{macrocode}
\newcommand \DTLenSetLetterGroups
 {
  \renewcommand \dtllettergroup [ 1 ]
    { \text_titlecase_first:n { ##1 } }
  \renewcommand \dtlnonlettergroup [ 1 ] { Symbols }
  \renewcommand \dtlnumbergroup [ 1 ] { Numbers }
  \renewcommand \dtlcurrencygroup [ 2 ] { Currency }
  \renewcommand \dtldatetimegroup [ 1 ] { Timestamps }
  \renewcommand \dtldategroup [ 1 ] { Dates }
  \renewcommand \dtltimegroup [ 1 ] { Times }
}
%    \end{macrocode}
%
%    \begin{macrocode}
\newcommand \DTLenSetAndName
 {
  \renewcommand \DTLandname { and }
 }
%    \end{macrocode}
%    \begin{macrocode}
\newcommand \DTLenTranslations
 {
  \DTLenSetAndName
  \renewcommand \DTLdatatypeunsetname { unset }
  \renewcommand \DTLdatatypestringname { string }
  \renewcommand \DTLdatatypeintegername { integer }
  \renewcommand \DTLdatatypedecimalname { decimal }
  \renewcommand \DTLdatatypecurrencyname { currency }
  \renewcommand \DTLdatatypedatetimename { date-time }
  \renewcommand \DTLdatatypedatename { date }
  \renewcommand \DTLdatatypetimename { time }
  \renewcommand \DTLdatatypeinvalidname { invalid }
 }
%    \end{macrocode}
%Provide options
%    \begin{macrocode}
\datatool_locale_define_keys:nn { en }
 {
    and .choice:,
    and / word .code:n = 
     {
      \renewcommand \DTLenSetAndName
       {
         \renewcommand \DTLandname { and }
       }
      \tl_if_eq:NnT \l_datatool_current_language_tl { en }
       { \DTLenSetAndName }
     } ,
    and / amp .code:n = 
     {
      \renewcommand \DTLenSetAndName
       {
         \renewcommand \DTLandname { \& }
       }
      \tl_if_eq:NnT \l_datatool_current_language_tl { en }
       { \DTLenSetAndName }
     } ,
 }
%    \end{macrocode}
%
%\subsubsection{Dates and Times}
% This section is still experimental.
%
% An appropriate region needs to also be specified and loaded to
% support parsing English dates. (The region determines dmy, mdy or
% ymd.)
%
%Provide a shortcut command to get the month name to number mapping.
%    \begin{macrocode}
\cs_new:Nn \datatool_en_get_monthname_map:n
 {
   \datatool_region_get_monthname_map:n { en / #1 }
 }
%    \end{macrocode}
%Define month name to number mapping for this language.
%    \begin{macrocode}
\datatool_region_set_monthname_map:nn { en / January } { 01 }
\datatool_region_set_monthname_map:nn { en / Jan } { 01 }
\datatool_region_set_monthname_map:nn { en / February } { 02 }
\datatool_region_set_monthname_map:nn { en / Feb } { 02 }
\datatool_region_set_monthname_map:nn { en / March } { 03 }
\datatool_region_set_monthname_map:nn { en / Mar } { 03 }
\datatool_region_set_monthname_map:nn { en / April } { 04 }
\datatool_region_set_monthname_map:nn { en / Apr } { 04 }
\datatool_region_set_monthname_map:nn { en / May } { 05 }
\datatool_region_set_monthname_map:nn { en / June } { 06 }
\datatool_region_set_monthname_map:nn { en / Jun } { 06 }
\datatool_region_set_monthname_map:nn { en / July } { 07 }
\datatool_region_set_monthname_map:nn { en / Jul } { 07 }
\datatool_region_set_monthname_map:nn { en / August } { 08 }
\datatool_region_set_monthname_map:nn { en / Aug } { 08 }
\datatool_region_set_monthname_map:nn { en / September } { 09 }
\datatool_region_set_monthname_map:nn { en / Sep } { 09 }
\datatool_region_set_monthname_map:nn { en / Sept } { 09 }
\datatool_region_set_monthname_map:nn { en / October } { 10 }
\datatool_region_set_monthname_map:nn { en / Oct } { 10 }
\datatool_region_set_monthname_map:nn { en / November } { 11 }
\datatool_region_set_monthname_map:nn { en / Nov } { 11 }
\datatool_region_set_monthname_map:nn { en / December } { 12 }
\datatool_region_set_monthname_map:nn { en / Dec } { 12 }
%    \end{macrocode}
%
% This file currently only deals with parsing dates that have month
% names and possibly weekday names. It does not yet have support for 
% providing formatting (since that can be done with \sty{datetime2}).
%
% The functions below that go from month number to name are mainly just for the
% benefit of \file{databib-english.ldf} although may be used in a custom
% definition of \cs{DataToolDateFmt} if required.
%
%If \sty{datetime2} has already been loaded, use the command
%provided by \file{datetime2-english-base.ldf}.
%    \begin{macrocode}
\cs_if_exist:NTF \DTMenglishmonthname
 {
   \cs_new:Nn \datatool_en_monthname:n
    {
      \DTMenglishmonthname { #1 }
    }
 }
 {
   \cs_new:Nn \datatool_en_monthname:n
    {
      \int_case:nn { #1 }
       {
         { 1 } { January }
         { 2 } { February }
         { 3 } { March }
         { 4 } { April }
         { 5 } { May }
         { 6 } { June }
         { 7 } { July }
         { 8 } { August }
         { 9 } { September }
         { 10 } { October }
         { 11 } { November }
         { 12 } { December }
       }
    }
 }
%    \end{macrocode}
% Similarly for short month names.
%    \begin{macrocode}
\cs_if_exist:NTF \DTMenglishshortmonthname
 {
   \cs_new:Nn \datatool_en_shortmonthname:n
    {
      \DTMenglishshortmonthname { #1 }
    }
 }
 {
   \cs_new:Nn \datatool_en_shortmonthname:n
    {
      \datatool_en_shortmonthname_dotless:n { #1 }
    }
 }
%    \end{macrocode}
%Dotless short month style.
%    \begin{macrocode}
\cs_new:Nn \datatool_en_shortmonthname_dotless:n
 {
   \int_case:nn { #1 }
    {
      { 1 } { Jan }
      { 2 } { Feb }
      { 3 } { Mar }
      { 4 } { Apr }
      { 5 } { May }
      { 6 } { Jun }
      { 7 } { Jul }
      { 8 } { Aug }
      { 9 } { Sep }
      { 10 } { Oct }
      { 11 } { Nov }
      { 12 } { Dec }
    }
 }
%    \end{macrocode}
% Dotted short month style.
% (Abbreviated month names end with a dot.)
%    \begin{macrocode}
\cs_new:Nn \datatool_en_shortmonthname_dotted:n
 {
   \int_case:nn { #1 }
    {
       { 1 } { Jan. }
       { 2 } { Feb. }
       { 3 } { Mar. }
       { 4 } { Apr. }
       { 5 } { May }
       { 6 } { June }
       { 7 } { July }
       { 8 } { Aug. }
       { 9 } { Sept. }
       { 10 } { Oct. }
       { 11 } { Nov. }
       { 12 } { Dec. }
    }
 }
%    \end{macrocode}
%Regular expression to match week day name.
%    \begin{macrocode}
\regex_const:Nn \c_datatool_en_weekday_name_regex
 {
   Monday | Mon\.? | Tuesday | Tues?\.? | Wednesday | Wed\.?
  | Thursday | Thur?\.? | Friday | Fri\.?
  | Saturday | Sat\.? | Sunday | Sun\.?
 }
%    \end{macrocode}
%Regular expression to match month name.
%    \begin{macrocode}
\regex_const:Nn \c_datatool_en_month_name_regex
 {
   January | Jan\.? | February | Feb\.? | March | Mar\.?
   | April | Apr\.? | May | June | Jun\.? | July | Jul\.?
   | August | Aug\.? | September | Sept?\.?
   | October | Oct\.? | November | Nov\.? | December | Dec\.?
 }
%    \end{macrocode}
%Regular expression to match am/pm identifiers.
%    \begin{macrocode}
\regex_const:Nn \c_datatool_en_am_regex
 {
   a \.? m \.? | A \.? M \.? | in \s the \s morning | [nN]oon | [Mm]idday
 }
%    \end{macrocode}
% Any match on the following will add 12 to the hour by the
% pm conditional function:
%    \begin{macrocode}
\regex_const:Nn \c_datatool_en_pm_regex
 {
   p \.? m \.? | P \.? M \.? | in \s the \s (?: afternoon | evening )
  | [Mm]idnight
 }
%    \end{macrocode}
% Provide conditional.
%    \begin{macrocode}
\prg_new_conditional:Npnn \datatool_en_if_pm:n #1
   { T, F, TF }
 {
   \regex_match:NnTF \c_datatool_en_pm_regex { #1 }
    { \prg_return_true: }
    { \prg_return_false: }
 }
%    \end{macrocode}
% Match ordinal suffix.
%    \begin{macrocode}
\regex_const:Nn \c_datatool_en_ordinal_suffix_regex
 {
   st | nd | rd | th 
 }
%    \end{macrocode}
%
% The naming scheme for date regex constants needs to be in the form
%\begin{definition}
% \verb|\c_datatool_|\meta{language}\verb|_|\meta{style}\verb|_date_regex| (non-anchored)
%\end{definition}
% and
%\begin{definition}
% \verb|\c_datatool_|\meta{language}\verb|_anchored_|\meta{style}\verb|_date_regex| (anchored)
%\end{definition}
% There should be three captured groups in the order that matches
% \meta{style}
% For example, the style \opt{ddmmyyyy} should have the day of month
% number (1-31) in the first captured group, the month 
% in the second group, and the year number in the third.
% Styles with \opt{yyyy} should have the century included in the year.
% Styles with \opt{yy} need to have the century added to the two-digit year.
%
% Note that the \qt{dd} and \qt{mm} don't mean that two digits are required.
% (In fact, here the month name not number is expected.)
% The control sequence names are simply designed to match the 
% naming scheme used by the regionless numeric regex constants
% provided by \file{datatime-base.sty}.
%
%    \begin{macrocode}
\regex_const:Nn \c_datatool_en_ddmmyyyy_date_regex
 {
   (?: \ur{c_datatool_en_weekday_name_regex} \, ? \s+ ) ?
   ( \ur{c_datatool_day_of_month_regex} )
   \ur{c_datatool_en_ordinal_suffix_regex} ?
   \s+
   ( \ur{c_datatool_en_month_name_regex}  )
    \, ? \s+ ( \d+ )
 }
%    \end{macrocode}
%
%    \begin{macrocode}
\regex_const:Nn \c_datatool_en_anchored_ddmmyyyy_date_regex
 {
   \A \s*
   (?: \ur{c_datatool_en_weekday_name_regex} \, ? \s+ ) ?
   ( \ur{c_datatool_day_of_month_regex} )
   \ur{c_datatool_en_ordinal_suffix_regex} ?
   \s+
   ( \ur{c_datatool_en_month_name_regex}  )
    \, ? \s+ ( \d+ )
   \s* \Z
 }
%    \end{macrocode}
%
%    \begin{macrocode}
\regex_const:Nn \c_datatool_en_ddmmyy_date_regex
 {
   (?: \ur{c_datatool_en_weekday_name_regex} \, ? \s+ ) ?
   ( \ur{c_datatool_day_of_month_regex} )
   \ur{c_datatool_en_ordinal_suffix_regex} ?
   \s+
   ( \ur{c_datatool_en_month_name_regex}  )
    \, ? \s+ \ur{c_datatool_apostrophe_regex} ? ( \d{2} )
 }
%    \end{macrocode}
%
%    \begin{macrocode}
\regex_const:Nn \c_datatool_en_anchored_ddmmyy_date_regex
 {
   \A \s*
   (?: \ur{c_datatool_en_weekday_name_regex} \, ? \s+ ) ?
   ( \ur{c_datatool_day_of_month_regex} )
   \ur{c_datatool_en_ordinal_suffix_regex} ?
   \s+
   ( \ur{c_datatool_en_month_name_regex}  )
    \, ? \s+ \ur{c_datatool_apostrophe_regex} ? ( \d{2} )
   \s* \Z
 }
%    \end{macrocode}
%
%    \begin{macrocode}
\regex_const:Nn \c_datatool_en_mmddyyyy_date_regex
 {
   (?: \ur{c_datatool_en_weekday_name_regex} \, ? \s+ ) ?
   ( \ur{c_datatool_en_month_name_regex}  )
   \s+
   ( \ur{c_datatool_day_of_month_regex} )
   \ur{c_datatool_en_ordinal_suffix_regex} ?
    \, ? \s+ ( \d+ )
 }
%    \end{macrocode}
%
%    \begin{macrocode}
\regex_const:Nn \c_datatool_en_anchored_mmddyyyy_date_regex
 {
   \A \s*
   (?: \ur{c_datatool_en_weekday_name_regex} \, ? \s+ ) ?
   ( \ur{c_datatool_en_month_name_regex}  )
   \s+
   ( \ur{c_datatool_day_of_month_regex} )
   \ur{c_datatool_en_ordinal_suffix_regex} ?
    \, ? \s+ ( \d+ )
   \s* \Z
 }
%    \end{macrocode}
%
%    \begin{macrocode}
\regex_const:Nn \c_datatool_en_mmddyy_date_regex
 {
   (?: \ur{c_datatool_en_weekday_name_regex} \, ? \s+ ) ?
   ( \ur{c_datatool_en_month_name_regex}  )
   \s+
   ( \ur{c_datatool_day_of_month_regex} )
   \ur{c_datatool_en_ordinal_suffix_regex} ?
    \, ? \s+ \ur{c_datatool_apostrophe_regex} ? ( \d{2} )
 }
%    \end{macrocode}
%
%    \begin{macrocode}
\regex_const:Nn \c_datatool_en_anchored_mmddyy_date_regex
 {
   \A \s*
   (?: \ur{c_datatool_en_weekday_name_regex} \, ? \s+ ) ?
   ( \ur{c_datatool_en_month_name_regex}  )
   \s+
   ( \ur{c_datatool_day_of_month_regex} )
   \ur{c_datatool_en_ordinal_suffix_regex} ?
    \, ? \s+ \ur{c_datatool_apostrophe_regex} ? ( \d{2} )
   \s* \Z
 }
%    \end{macrocode}
%
% Year first formats are a bit unlikely with month names but
% provided for completeness.
%    \begin{macrocode}
\regex_const:Nn \c_datatool_en_yyyymmdd_date_regex
 {
   ( \d+ ) \s+ 
   ( \ur{c_datatool_en_month_name_regex}  )
   \s+
   ( \ur{c_datatool_day_of_month_regex} )
   \ur{c_datatool_en_ordinal_suffix_regex} ?
   (?: \, ? \s+ \ur{c_datatool_en_weekday_name_regex} ) ?
 }
%    \end{macrocode}
%
%    \begin{macrocode}
\regex_const:Nn \c_datatool_en_anchored_yyyymmdd_date_regex
 {
   \A \s*
   ( \d+ ) \s+ 
   ( \ur{c_datatool_en_month_name_regex}  )
   \s+
   ( \ur{c_datatool_day_of_month_regex} )
   \ur{c_datatool_en_ordinal_suffix_regex} ?
   (?: \, ? \s+ \ur{c_datatool_en_weekday_name_regex} ) ?
   \s* \Z
 }
%    \end{macrocode}
%This is a bit unusual but provided for completeness.
%    \begin{macrocode}
\regex_const:Nn \c_datatool_en_yymmdd_date_regex
 {
   \ur{c_datatool_apostrophe_regex} ? ( \d{2} ) \s+ 
   ( \ur{c_datatool_en_month_name_regex}  )
   \s+
   ( \ur{c_datatool_day_of_month_regex} )
   \ur{c_datatool_en_ordinal_suffix_regex} ?
   (?: \, ? \s+ \ur{c_datatool_en_weekday_name_regex} ) ?
 }
%    \end{macrocode}
%
%    \begin{macrocode}
\regex_const:Nn \c_datatool_en_anchored_yymmdd_date_regex
 {
   \A \s*
   \ur{c_datatool_apostrophe_regex} ? ( \d{2} ) \s+ 
   ( \ur{c_datatool_en_month_name_regex}  )
   \s+
   ( \ur{c_datatool_day_of_month_regex} )
   \ur{c_datatool_en_ordinal_suffix_regex} ?
   (?: \, ? \s+ \ur{c_datatool_en_weekday_name_regex} ) ?
   \s* \Z
 }
%    \end{macrocode}
%
% The naming scheme for time regex constants needs to be in the form
%\begin{definition}
% \verb|\c_datatool_|\meta{language}\verb|_|\meta{variant}\verb|_hhmmss_time_regex| (non-anchored)
%\end{definition}
% and
%\begin{definition}
% \verb|\c_datatool_|\meta{language}\verb|_|\meta{variant}\verb|_anchored_hhmmss_time_regex| (anchored)
%\end{definition}
% Both the minutes and seconds are optional here.
% These will default to 00 if omitted.
%
%    \begin{macrocode}
\regex_const:Nn \c_datatool_en_colon_hhmmss_time_regex
 {   
   ( \ur{c_datatool_hour_regex} )
   (?: \: ( \ur{c_datatool_minsec_regex} ) ) ?
   (?: \: ( \ur{c_datatool_minsec_regex} ) ) ?
   (?: \s*
     ( 
         \ur{c_datatool_en_am_regex}
       | \ur{c_datatool_en_pm_regex}
     )
   ) ?
 }
%    \end{macrocode}
%
%    \begin{macrocode}
\regex_const:Nn \c_datatool_en_colon_anchored_hhmmss_time_regex
 {   
   \A \s*
   ( \ur{c_datatool_hour_regex} )
   (?: \: ( \ur{c_datatool_minsec_regex} ) ) ?
   (?: \: ( \ur{c_datatool_minsec_regex} ) ) ?
   (?: \s*
     ( 
         \ur{c_datatool_en_am_regex}
       | \ur{c_datatool_en_pm_regex}
     )
    ) ?
   \s* \Z
 }
%    \end{macrocode}
%
%    \begin{macrocode}
\regex_const:Nn \c_datatool_en_dot_hhmmss_time_regex
 {   
   ( \ur{c_datatool_hour_regex} )
   (?: \. ( \ur{c_datatool_minsec_regex} ) ) ?
   (?: \. ( \ur{c_datatool_minsec_regex} ) ) ?
   (?: \s*
     ( 
         \ur{c_datatool_en_am_regex}
       | \ur{c_datatool_en_pm_regex}
     )
    ) ?
 }
%    \end{macrocode}
%
%    \begin{macrocode}
\regex_const:Nn \c_datatool_en_dot_anchored_hhmmss_time_regex
 {   
   \A \s*
   ( \ur{c_datatool_hour_regex} )
   (?: \. ( \ur{c_datatool_minsec_regex} ) ) ?
   (?: \. ( \ur{c_datatool_minsec_regex} ) ) ?
   (?: \s*
     ( 
         \ur{c_datatool_en_am_regex}
       | \ur{c_datatool_en_pm_regex}
     )
    ) ?
   \s* \Z
 }
%    \end{macrocode}
%
%    \begin{macrocode}
\newcommand \DTLenLocaleHook
 {
  \renewcommand
    \DTLCurrentLocaleWordHandler
    { \DTLenLocaleHandler }
  \renewcommand
    \DTLCurrentLocaleGetInitialLetter
    { \DTLenLocaleGetInitialLetter }
  \renewcommand
    \DTLCurrentLocaleGetGroupString
    { \DTLenLocaleGetGroupString }
  \DTLenSetLetterGroups
  \let
   \DTLCurrentLocaleGetMonthNameMap
   \datatool_en_get_monthname_map:n
  \let
   \DTLCurrentLocaleIfpmTF
   \datatool_en_if_pm:nTF
%    \end{macrocode}
% Allow region files to construct control sequence names based on
% this naming scheme:
%    \begin{macrocode}
  \tl_set:Nn \l_datatool_current_language_tl { en }
%    \end{macrocode}
% Textual commands:
%    \begin{macrocode}
  \DTLenTranslations
 }
%    \end{macrocode}
%
%    \begin{macrocode}
\ExplSyntaxOff
%    \end{macrocode}
%
%    \begin{macrocode}
\TrackLangAddToCaptions{\DTLenLocaleHook}
%    \end{macrocode}
%\iffalse
%    \begin{macrocode}
%</datatool-english.ldf>
%    \end{macrocode}
%\fi
%\iffalse
%    \begin{macrocode}
%<*datatool-english-ascii.ldf>
%    \end{macrocode}
%\fi
%\subsection{Root English US-ASCII LDF for \sty{datatool-base}
%(\file{datatool-english-ascii.ldf})}
%    \begin{macrocode}
\TrackLangProvidesResource{english-ascii}[2025/03/12 v1.1 (NLCT)]
%    \end{macrocode}
%Switch on \LaTeX3 syntax.
%    \begin{macrocode}
\ExplSyntaxOn
%    \end{macrocode}
%Minimal support for \cs{DTLenLocaleHandler}.
%    \begin{macrocode}
\newcommand \DTLenLocaleHandler [ 1 ]
 {
%    \end{macrocode}
%Ensure punctuation characters are grouped together by
%prefixing them with straight double-quote. This ensures that they
%will all be placed before any alphabetical characters.
%    \begin{macrocode}
  \regex_replace_all:nnN
%    \end{macrocode}
%Version 1.1 added category code check.
%    \begin{macrocode}
    { \cO([[:punct:]]) } { \cO\" \1 }
   #1
 }
%    \end{macrocode}
%Switch off \LaTeX3 syntax.
%    \begin{macrocode}
\ExplSyntaxOff
%    \end{macrocode}
%\iffalse
%    \begin{macrocode}
%</datatool-english-ascii.ldf>
%    \end{macrocode}
%\fi
%\iffalse
%    \begin{macrocode}
%<*datatool-english-latin1.ldf>
%    \end{macrocode}
%\fi
%\subsection{Root English ISO 8859-1 LDF for \sty{datatool-base}
%(\file{datatool-english-latin1.ldf})}
%    \begin{macrocode}
\TrackLangProvidesResource{english-latin1}[2025/03/12 v1.1 (NLCT)]
%    \end{macrocode}
%Switch on \LaTeX3 syntax.
%    \begin{macrocode}
\ExplSyntaxOn
%    \end{macrocode}
% Provide Latin-1 version of \cs{DTLenLocaleHandler}.
%    \begin{macrocode}
\newcommand \DTLenLocaleHandler [ 1 ]
{
  \regex_replace_case_all:nN
  {
    { [ \x{C0} - \x{C5} ] } { A }
    { \x{C6} } { AE }
    { \x{C7} } { C }
    { [ \x{C8} - \x{CB} ] } { E }
    { [ \x{CC} - \x{CF} ] } { I }
    { \x{D1} } { N }
    { [ \x{D2} - \x{D6} \x{D8} ] } { O }
    { [ \x{D9} - \x{DC} ]} { U }
    { \x{DD} } { Y }
%    \end{macrocode}
%Version 1.1: treat eth as thorn
%    \begin{macrocode}
    { \x{DE} | \x{D0} } { TH }
    { \x{DF} } { ss }
    { [ \x{E0} - \x{E5} ] } { a }
    { \x{E6} } { ae }
    { \x{E7} } { c }
    { [ \x{E8} - \x{EB} ] } { e }
    { [ \x{EC} - \x{EF} ] } { i }
    { \x{F1} } { n }
    { [ \x{F2} - \x{F6} \x{F8} ] } { o }
    { [ \x{F9} - \x{FC} ] } { u }
    { [ \x{FD} \x{FF} ] } { y }
%    \end{macrocode}
%Version 1.1: treat eth as thorn
%    \begin{macrocode}
    { \x{FE} | \x{F0} } { th }
%    \end{macrocode}
%Ensure currency symbols are grouped together by prefixing all 
%currency symbols with \verb|$| but don't change math shift.
%Version 1.1 added math shift check.
%    \begin{macrocode}
    { \cM(.) } { \1 }
    { (\ur{l_datatool_currencysigns_regex}) } { \cO\$ \1 }
%    \end{macrocode}
%Ensure punctuation characters are grouped together by
%prefixing them with straight double-quote. This ensures that they
%will all be placed before any alphabetical characters.
%Version 1.1 added category code check.
%    \begin{macrocode}
    { \cO([[:punct:]]) } { \cO\" \1 }
  }
  #1
}
%    \end{macrocode}
%Switch off \LaTeX3 syntax.
%    \begin{macrocode}
\ExplSyntaxOff
%    \end{macrocode}
%\iffalse
%    \begin{macrocode}
%</datatool-english-latin1.ldf>
%    \end{macrocode}
%\fi
%\iffalse
%    \begin{macrocode}
%<*datatool-english-utf8.ldf>
%    \end{macrocode}
%\fi
%\subsection{Root English UTF-8 LDF for \sty{datatool-base}
%\file{datatool-english-utf8.ldf}}
%    \begin{macrocode}
\TrackLangProvidesResource{english-utf8}[2025/03/12 v1.1 (NLCT)]
%    \end{macrocode}
%Switch on \LaTeX3 syntax.
%    \begin{macrocode}
\ExplSyntaxOn
%    \end{macrocode}
%
% Only provide limited support for extended characters to allow for
% foreign names. The more cases added, the longer the processing
% time.
%
%    \begin{macrocode}
\newcommand \DTLenLocaleHandler [ 1 ]
{
  \regex_replace_case_all:nN
  {
    {À|Á|Â|Ã|Ä|Å} {A}
    {Æ} {AE}
    {Ç} {C}
    {È|É|Ê|Ë} {E}
    {Ì|Í|Î|Ï} {I}
    {Ñ} {N}
    {Ò|Ó|Ô|Õ|Ö|Ø} {O}
    {Ù|Ú|Û|Ü} {U}
    {Ý} {Y}
%    \end{macrocode}
%Version 1.1: treat eth as thorn
%    \begin{macrocode}
    {Þ|Ð} {TH}
    {ß} {ss}
    {à|á|â|ã|ä|å} {a}
    {æ} {ae}
    {ç} {c}
    {è|é|ê|ë} {e}
    {ì|í|î|ï} {i}
    {ñ} {n}
    {ò|ó|ô|õ|ö|ø} {o}
    {ù|ú|û|ü} {u}
    {ý|ÿ} {y}
%    \end{macrocode}
%Version 1.1: treat eth as thorn
%    \begin{macrocode}
    {þ|ð} {th}
    {ſ} {s}
    {Ĳ} {Ij}
    {ĳ} {ij}
    {Ł} {L}
    {ł} {l}
    {Œ} {OE}
    {œ} {oe}
    {Ƿ} {W}
    {ƿ} {w}
%    \end{macrocode}
%Ensure currency symbols are grouped together by prefixing all 
%currency symbols with \verb|$| but don't change math shift.
%Version 1.1 added math shift check.
%    \begin{macrocode}
    { \cM(.) } { \1 }
    { (\ur{l_datatool_currencysigns_regex}) } { \cO\$ \1 }
%    \end{macrocode}
%Ensure common punctuation characters are grouped together by
%prefixing them with straight double-quote. This ensures that they
%will all be placed before any alphabetical characters.
%
%Treat closing quote the same as straight apostrophe.
%    \begin{macrocode}
    { ’ } { \cO\" \cO\' }
%    \end{macrocode}
%Treat opening quote the same as backtick.
%    \begin{macrocode}
    { ‘ } { \cO\" \cO\` }
%    \end{macrocode}
%Treat opening and closing double quotes the same as straight
%double-quote.
%    \begin{macrocode}
    { (“|”) } { \cO\" \cO\" }
%    \end{macrocode}
%Treat em-dash and en-dash the same as hyphen/minus.
%    \begin{macrocode}
    { (—|–) } { \cO\" \cO\- }
%    \end{macrocode}
%Any character in the punctuation class that has category other:
%Version 1.1 added category code check.
%    \begin{macrocode}
    { \cO([[:punct:]]) } { \cO\" \1 }
  }
  #1
}
%    \end{macrocode}
% Switch off \LaTeX3 syntax:
%    \begin{macrocode}
\ExplSyntaxOff
%    \end{macrocode}
%\iffalse
%    \begin{macrocode}
%</datatool-english-utf8.ldf>
%    \end{macrocode}
%\fi
%\iffalse
%    \begin{macrocode}
%<*datatool-en-CA.ldf>
%    \end{macrocode}
%\fi
%\subsection{Canadian English LDF for \sty{datatool-base}
%(\file{datatool-en-CA.ldf})}
%    \begin{macrocode}
\TrackLangProvidesResource{en-CA}[2025/03/12 v1.1 (NLCT)]
%    \end{macrocode}
% Load root language file. Note that \sty{datatool-base} should
% automatically load the region file \file{datatool-CA.ldf} if it is
% installed, so only \file{datatool-english.ldf} needs to be loaded
% (if not already done so).
%    \begin{macrocode}
\TrackLangRequireResource{english}
%    \end{macrocode}
% Need \LaTeX3 syntax on:
%    \begin{macrocode}
\ExplSyntaxOn
%    \end{macrocode}
% Provide both official and unofficial options for the number group
% and decimal characters.
% Official style has a space number group and a decimal dot.
% 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_en_CA_set_numberchars_official:
 {
   \datatool_set_thinspace_group_decimal_char:n { . }
 }
%    \end{macrocode}
% Unofficial style has a comma number group and a decimal dot.
%    \begin{macrocode}
\cs_new:Nn \datatool_en_CA_set_numberchars_unofficial:
 {
   \DTLsetnumberchars { , } { . }
 }
%    \end{macrocode}
%Provide intermediate command to set the applicable number group and
%decimal character.
%    \begin{macrocode}
\newcommand \datatoolenCASetNumberChars
 {
   \bool_if:NT \l_datatool_region_set_numberchars_bool
    {
      \datatool_en_CA_set_numberchars_official:
    }
 }
%    \end{macrocode}
%Provide \cs{DTLsetLocaleOptions} \opt{en-CA} option to switch between styles.
%    \begin{macrocode}
\datatool_locale_define_keys:nn { en-CA }
 {
   number-style .choices:nn =
    { official , unofficial }
    { 
      \exp_args:NNe \renewcommand
        \datatoolenCASetNumberChars
        {
           \exp_not:N \bool_if:NT
            \exp_not:N \l_datatool_region_set_numberchars_bool
             {
               \exp_not:c { datatool_en_CA_set_numberchars_ \l_keys_choice_tl : }
             }
         }
      \datatool_if_current_lang_region:nnT { en } { CA }
       {
         \datatoolenCASetNumberChars
       }
    } , 
}
%    \end{macrocode}
%Provide intermediary command to add to the captions hook.
%    \begin{macrocode}
\newcommand \DTLenCALocaleHook
 {
   \datatoolenCASetNumberChars
 }
%    \end{macrocode}
% \LaTeX3 syntax no longer needed.
%    \begin{macrocode}
\ExplSyntaxOff
%    \end{macrocode}
% Add to captions hook (this is needed for languages but not
% language-less regions).
%    \begin{macrocode}
\TrackLangAddToCaptions{\DTLenCALocaleHook}
%    \end{macrocode}
%\iffalse
%    \begin{macrocode}
%</datatool-en-CA.ldf>
%    \end{macrocode}
%\fi
%\iffalse
%    \begin{macrocode}
%<*datatool-en-ZA.ldf>
%    \end{macrocode}
%\fi
%\subsection{South African English LDF for \sty{datatool-base}
%(\file{datatool-en-ZA.ldf})}
%    \begin{macrocode}
\TrackLangProvidesResource{en-ZA}[2025/03/12 v1.1 (NLCT)]
%    \end{macrocode}
% Load root language file. Note that \sty{datatool-base} should
% automatically load the region file \file{datatool-ZA.ldf} if it is
% installed, so only \file{datatool-english.ldf} needs to be loaded
% (if not already done so).
%    \begin{macrocode}
\TrackLangRequireResource{english}
%    \end{macrocode}
% Need \LaTeX3 syntax on:
%    \begin{macrocode}
\ExplSyntaxOn
%    \end{macrocode}
% Provide dialect options for the number group
% and decimal characters.
% Space style has a space number group and a decimal dot.
% 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:Npn \datatool_en_ZA_set_numberchars_thinspace:
 {
   \datatool_set_thinspace_group_decimal_char:n { . }
 }
%    \end{macrocode}
% Comma style has a comma number group and a decimal dot.
%    \begin{macrocode}
\cs_new:Npn \datatool_en_ZA_set_numberchars_comma:
 {
   \DTLsetnumberchars { , } { . }
 }
%    \end{macrocode}
%Provide intermediate command to set the applicable number group and
%decimal character.
%    \begin{macrocode}
\newcommand \datatoolenZASetNumberChars
 {
   \bool_if:NT \l_datatool_region_set_numberchars_bool
    {
      \datatool_en_ZA_set_numberchars_thinspace:
    }
 }
%    \end{macrocode}
%Provide \cs{DTLsetLocaleOptions} \opt{en-ZA} option to switch between styles.
%    \begin{macrocode}
\datatool_locale_define_keys:nn { en-ZA }
 {
   number-style .choices:nn =
    { thinspace , comma }
    {
      \exp_args:NNe \renewcommand
        \datatoolenZASetNumberChars
        {
           \exp_not:N \bool_if:NT
            \exp_not:N \l_datatool_region_set_numberchars_bool
             {
               \exp_not:c { datatool_en_ZA_set_numberchars_ \l_keys_choice_tl : }
             }
         }
%    \end{macrocode}
%Note that this will be reset when the dialect changes unless 
%\verb|\DTLsetLocaleOptions{ZA}{number-style=dialect}| is used.
%    \begin{macrocode}
      \datatool_if_current_lang_region:nnT { en } { ZA }
       {
         \datatoolenZASetNumberChars
       }
    } ,
 }
%    \end{macrocode}
%Provide a hook using the required naming scheme.
%    \begin{macrocode}
\newcommand \DTLenZALocaleHook
 {
   \datatoolenZASetNumberChars
 }
%    \end{macrocode}
% \LaTeX3 syntax no longer needed.
%    \begin{macrocode}
\ExplSyntaxOff
%    \end{macrocode}
% Add to captions hook (this is needed for languages but not
% language-less regions).
%    \begin{macrocode}
\TrackLangAddToCaptions{\DTLenZALocaleHook}
%    \end{macrocode}
%\iffalse
%    \begin{macrocode}
%</datatool-en-ZA.ldf>
%    \end{macrocode}
%\fi
%\iffalse
%    \begin{macrocode}
%<*databib-english.ldf>
%    \end{macrocode}
%\fi
%\subsection{Root English LDF for \sty{databib}
%(\file{databib-english.ldf})}
%    \begin{macrocode}
\TrackLangProvidesResource{english}[2025/03/12 v1.1 (NLCT)]
%    \end{macrocode}
% \LaTeX3 commands needed:
%    \begin{macrocode}
\ExplSyntaxOn
%    \end{macrocode}
% Month names used by the \opt{abbrv} style. 
%    \begin{macrocode}
\cs_new:Nn \databib_en_shortmonthname:n
 {
   \datatool_en_shortmonthname_dotted:n { #1 }
 }
%    \end{macrocode}
% Define \cs{DTLsetLocaleOptions} options for \opt{en/databib}. The only option deals with
% switching the short month names for the \opt{abbrv} style between
% three-letter dotless names and abbreviated names that end with a
% dot.
%    \begin{macrocode}
\datatool_locale_define_keys:nn { en / databib }
 {
   short-month-style .choice: ,
   short-month-style / dotted .code:n =
    {
      \cs_set:Nn \databib_en_shortmonthname:n
       {
         \datatool_en_shortmonthname_dotted:n { #1 } 
       }
    } ,
   short-month-style / dotless .code:n =
    {
      \cs_set:Nn \databib_en_shortmonthname:n
       {
         \datatool_en_shortmonthname_dotless:n { #1 } 
       }
    } ,
 }
%    \end{macrocode}
% Fixed text translations.
%    \begin{macrocode}
\newcommand \DataBibEnglish
 {
   \tl_set:Nn \ofname { of }
   \tl_set:Nn \inname { in }
   \tl_set:Nn \etalname { et ~ al. }
   \tl_set:Nn \editorname { editor }
   \tl_set:Nn \editorsname { editors }
   \tl_set:Nn \volumename { volume }
   \tl_set:Nn \numbername { number }
   \tl_set:Nn \pagesname { pages }
   \tl_set:Nn \pagename { page }
   \tl_set:Nn \editionname { edition }
   \tl_set:Nn \techreportname { Technical ~ report }
   \tl_set:Nn \mscthesisname { Master's ~ thesis }
   \tl_set:Nn \phdthesisname { PhD ~ thesis }
   \tl_set:Nn \DTLbibaccessedname { accessed }
   \renewcommand \dtl@monthname [ 1 ]
    {
      \datatool_en_monthname:n { ##1 }
    }
   \renewcommand \dtl@abbrvmonthname [ 1 ]
    {
      \databib_en_shortmonthname:n { ##1 }
    }
 }
%    \end{macrocode}
% Finished with \LaTeX3 commands.
%    \begin{macrocode}
\ExplSyntaxOff
%    \end{macrocode}
% Add to captions hook.
%    \begin{macrocode}
\TrackLangAddToCaptions{\DataBibEnglish}
%    \end{macrocode}
%\iffalse
%    \begin{macrocode}
%</databib-english.ldf>
%    \end{macrocode}
%\fi
%\iffalse
%    \begin{macrocode}
%<*person-english.ldf>
%    \end{macrocode}
%\fi
%\subsection{Root English LDF for \sty{person}
%(\file{person-english.ldf})}
%    \begin{macrocode}
\TrackLangProvidesResource{english}[2025/03/12 v1.1 (NLCT)]
%    \end{macrocode}
% If \cs{DTLsetLocaleOptions} options need to be provided, the sub-module should be
% \qt{person}.  For example, 
%
%\begin{definition}
%\cs{datatool\_locale\_define\_keys:nn} \brackets{ en / person }
%\marg{key-value list}
%\end{definition}
%
%Provide intermediate command to add to captions hook.
%    \begin{macrocode}
\newcommand{\DataToolPersonEnglish}{%
%    \end{macrocode}
% Third person pronouns
%    \begin{macrocode}
  \PersonSetLocalisation{male}{pronoun}{he}%
  \PersonSetLocalisation{female}{pronoun}{she}%
  \PersonSetLocalisation{nonbinary}{pronoun}{they}%
  \PersonSetLocalisation{unknown}{pronoun}{they}%
  \PersonSetLocalisation{male}{pluralpronoun}{they}%
  \PersonSetLocalisation{female}{pluralpronoun}{they}%
  \PersonSetLocalisation{nonbinary}{pluralpronoun}{they}%
  \PersonSetLocalisation{unknown}{pluralpronoun}{they}%
%    \end{macrocode}
% Third person objective pronouns
%    \begin{macrocode}
  \PersonSetLocalisation{male}{objpronoun}{him}%
  \PersonSetLocalisation{female}{objpronoun}{her}%
  \PersonSetLocalisation{nonbinary}{objpronoun}{them}%
  \PersonSetLocalisation{unknown}{objpronoun}{them}%
  \PersonSetLocalisation{male}{pluralobjpronoun}{them}%
  \PersonSetLocalisation{female}{pluralobjpronoun}{them}%
  \PersonSetLocalisation{nonbinary}{pluralobjpronoun}{them}%
  \PersonSetLocalisation{unknown}{pluralobjpronoun}{them}%
%    \end{macrocode}
% Third person possessive adjectives
%    \begin{macrocode}
  \PersonSetLocalisation{male}{possadj}{his}%
  \PersonSetLocalisation{female}{possadj}{her}%
  \PersonSetLocalisation{nonbinary}{possadj}{their}%
  \PersonSetLocalisation{unknown}{possadj}{their}%
  \PersonSetLocalisation{male}{pluralpossadj}{their}%
  \PersonSetLocalisation{female}{pluralpossadj}{their}%
  \PersonSetLocalisation{nonbinary}{pluralpossadj}{their}%
  \PersonSetLocalisation{unknown}{pluralpossadj}{their}%
%    \end{macrocode}
% Third person possessive pronouns
%    \begin{macrocode}
  \PersonSetLocalisation{male}{posspronoun}{his}%
  \PersonSetLocalisation{female}{posspronoun}{hers}%
  \PersonSetLocalisation{nonbinary}{posspronoun}{theirs}%
  \PersonSetLocalisation{unknown}{posspronoun}{theirs}%
  \PersonSetLocalisation{male}{pluralposspronoun}{theirs}%
  \PersonSetLocalisation{female}{pluralposspronoun}{theirs}%
  \PersonSetLocalisation{nonbinary}{pluralposspronoun}{theirs}%
  \PersonSetLocalisation{unknown}{pluralposspronoun}{theirs}%
%    \end{macrocode}
% Second person pronouns
%    \begin{macrocode}
  \PersonSetLocalisation{male}{pronoun2}{you}%
  \PersonSetLocalisation{female}{pronoun2}{you}%
  \PersonSetLocalisation{nonbinary}{pronoun2}{you}%
  \PersonSetLocalisation{unknown}{pronoun2}{you}%
  \PersonSetLocalisation{male}{pluralpronoun2}{you}%
  \PersonSetLocalisation{female}{pluralpronoun2}{you}%
  \PersonSetLocalisation{nonbinary}{pluralpronoun2}{you}%
  \PersonSetLocalisation{unknown}{pluralpronoun2}{you}%
%    \end{macrocode}
% Second person objective pronouns
%    \begin{macrocode}
  \PersonSetLocalisation{male}{objpronoun2}{you}%
  \PersonSetLocalisation{female}{objpronoun2}{you}%
  \PersonSetLocalisation{nonbinary}{objpronoun2}{you}%
  \PersonSetLocalisation{unknown}{objpronoun2}{you}%
  \PersonSetLocalisation{male}{pluralobjpronoun2}{you}%
  \PersonSetLocalisation{female}{pluralobjpronoun2}{you}%
  \PersonSetLocalisation{nonbinary}{pluralobjpronoun2}{you}%
  \PersonSetLocalisation{unknown}{pluralobjpronoun2}{you}%
%    \end{macrocode}
% Second person possessive adjective
%    \begin{macrocode}
  \PersonSetLocalisation{male}{possadj2}{your}%
  \PersonSetLocalisation{female}{possadj2}{your}%
  \PersonSetLocalisation{nonbinary}{possadj2}{your}%
  \PersonSetLocalisation{unknown}{possadj2}{your}%
  \PersonSetLocalisation{male}{pluralpossadj2}{your}%
  \PersonSetLocalisation{female}{pluralpossadj2}{your}%
  \PersonSetLocalisation{nonbinary}{pluralpossadj2}{your}%
  \PersonSetLocalisation{unknown}{pluralpossadj2}{your}%
%    \end{macrocode}
% Second person possessive pronoun
%    \begin{macrocode}
  \PersonSetLocalisation{male}{posspronoun2}{yours}%
  \PersonSetLocalisation{female}{posspronoun2}{yours}%
  \PersonSetLocalisation{nonbinary}{posspronoun2}{yours}%
  \PersonSetLocalisation{unknown}{posspronoun2}{yours}%
  \PersonSetLocalisation{male}{pluralposspronoun2}{yours}%
  \PersonSetLocalisation{female}{pluralposspronoun2}{yours}%
  \PersonSetLocalisation{nonbinary}{pluralposspronoun2}{yours}%
  \PersonSetLocalisation{unknown}{pluralposspronoun2}{yours}%
%    \end{macrocode}
% Relationships
%    \begin{macrocode}
  \PersonSetLocalisation{male}{child}{son}%
  \PersonSetLocalisation{female}{child}{daughter}%
  \PersonSetLocalisation{nonbinary}{child}{child}%
  \PersonSetLocalisation{unknown}{child}{child}%
  \PersonSetLocalisation{male}{pluralchild}{sons}%
  \PersonSetLocalisation{female}{pluralchild}{daughters}%
  \PersonSetLocalisation{nonbinary}{pluralchild}{children}%
  \PersonSetLocalisation{unknown}{pluralchild}{children}%
  \PersonSetLocalisation{male}{parent}{father}%
  \PersonSetLocalisation{female}{parent}{mother}%
  \PersonSetLocalisation{nonbinary}{parent}{parent}%
  \PersonSetLocalisation{unknown}{parent}{parent}%
  \PersonSetLocalisation{male}{pluralparent}{fathers}%
  \PersonSetLocalisation{female}{pluralparent}{mothers}%
  \PersonSetLocalisation{nonbinary}{pluralparent}{parents}%
  \PersonSetLocalisation{unknown}{pluralparent}{parents}%
  \PersonSetLocalisation{male}{sibling}{brother}%
  \PersonSetLocalisation{female}{sibling}{sister}%
  \PersonSetLocalisation{nonbinary}{sibling}{sibling}%
  \PersonSetLocalisation{unknown}{sibling}{sibling}%
  \PersonSetLocalisation{male}{pluralsibling}{brothers}%
  \PersonSetLocalisation{female}{pluralsibling}{sisters}%
  \PersonSetLocalisation{nonbinary}{pluralsibling}{siblings}%
  \PersonSetLocalisation{unknown}{pluralsibling}{siblings}%
%    \end{macrocode}
% Gender translations
%    \begin{macrocode}
  \PersonSetLocalisation{male}{gender}{male}%
  \PersonSetLocalisation{female}{gender}{female}%
  \PersonSetLocalisation{nonbinary}{gender}{non-binary}%
  \PersonSetLocalisation{unknown}{gender}{unknown}%
%    \end{macrocode}
% Gender identification labels for \cs{newperson}
%    \begin{macrocode}
  \PersonSetMaleLabels{Male,MALE,M,m}%
  \PersonSetFemaleLabels{Female,FEMALE,F,f}%
  \PersonSetNonBinaryLabels{non-binary,Nonbinary,Non-Binary,NONBINARY,NON-BINARY,N,n}%
}
%    \end{macrocode}
% Add to captions hook.
%    \begin{macrocode}
\TrackLangAddToCaptions{\DataToolPersonEnglish}
%    \end{macrocode}
%\iffalse
%    \begin{macrocode}
%</person-english.ldf>
%    \end{macrocode}
%\fi
%\iffalse
%    \begin{macrocode}
%<*datatool-anglosaxon.ldf>
%    \end{macrocode}
%\fi
%\subsection{Root Old English (Anglo Saxon) LDF for \sty{datatool-base}
%(\file{datatool-anglosaxon.ldf})}
% Provide support for Old English (\sty{tracklang} root language
% \qt{anglosaxon}).
% This is mainly provided as an example for dealing with languages
% that have multiple scripts and non-ASCII letters.
% As such, it doesn't provide an translations or date/time
% formatting.
%
% The file \filemeta{datatool-ang-}{script}{.ldf} should already
% have been found if installed correctly. This is a fallback
% to catch an unrecognised script and encoding combination.
%    \begin{macrocode}
\TrackLangProvidesResource{anglosaxon}[2025/03/12 v1.1 (NLCT)]
%    \end{macrocode}
% Try loading \filemetameta{datatool-ang-}{script}{-}{encoding}{.ldf}
%    \begin{macrocode}
\TrackLangRequestResource{ang-\CurrentTrackedDialectScript-\TrackLangEncodingName}
{%
%    \end{macrocode}
% Not found.
%    \begin{macrocode}
  \csuse{datatool_locale_warn:n}{datatool-anglosaxon}%
   {%
     No support for `anglosaxon' with script `\CurrentTrackedDialectScript'
     and encoding `\TrackLangEncodingName'%
   }%
}
%    \end{macrocode}
%\iffalse
%    \begin{macrocode}
%</datatool-anglosaxon.ldf>
%    \end{macrocode}
%\fi
%\iffalse
%    \begin{macrocode}
%<*datatool-ang-Latn.ldf>
%    \end{macrocode}
%\fi
%\subsection{Root Old English (Anglo Saxon) Latin Script LDF for
%\sty{datatool-base} (\file{datatool-ang-Latn.ldf})}
% Provide support for Old English (\sty{tracklang} root language
% \qt{anglosaxon}) using Latin script.
% This is mainly provided as an example for dealing with languages
% that have multiple scripts and non-ASCII letters.
% As such, it doesn't provide any translations (except for \qt{and}) or date/time
% formatting.
%    \begin{macrocode}
\TrackLangProvidesResource{ang-Latn}[2025/03/12 v1.1 (NLCT)]
%    \end{macrocode}
% Try loading \filemeta{datatool-ang-Latn-}{encoding}{.ldf}
%    \begin{macrocode}
\TrackLangRequestResource{ang-Latn-\TrackLangEncodingName}
{%
%    \end{macrocode}
% Not found.
%    \begin{macrocode}
  \csuse{datatool_locale_warn:n}{datatool-ang-Latn}%
   {%
     No support for `anglosaxon' with script `Latn'
     and encoding `\TrackLangEncodingName'.%
   }%
  \endinput
}
%    \end{macrocode}
% Switch on \LaTeX3 syntax.
%    \begin{macrocode}
\ExplSyntaxOn
%    \end{macrocode}
% Any options may be defined with
%\begin{dispListing}
%\datatool_locale_define_keys:nn { ang-Latn } { ... }
%\end{dispListing}
% or
%\begin{dispListing}
%\datatool_locale_define_keys:nn { ang-Latn / subgroup } { ... }
%\end{dispListing}
% (Syntax as per \verb|\keys_define:nn| )
%
%\subsubsection{Orthography rules}
%NB \cs{DTLangLatnLocaleHandler} is defined in the applicable encoding
%file loaded above.
%
%\begin{macro}{\DTLangLatnLocaleGetInitialLetter}
%Get the first letter of the word according to the locale's alphabet and 
%store in token list variable.
%    \begin{macrocode}
\newcommand \DTLangLatnLocaleGetInitialLetter [ 2 ]
 {
   \datatool_get_first_letter:nN { #1 } #2 
 }
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTLangLatnLocaleGetGroupString}
%\begin{definition}
%\cs{DTLangLatnLocaleGetGroupString}\marg{actual}\marg{sort value}\marg{tl}
%\end{definition}
%Get the text that will be used to obtain the letter group 
%(the actual value not the sort value). 
%    \begin{macrocode}
\newcommand \DTLangLatnLocaleGetGroupString [ 3 ]
 {
   \datatool_sort_preprocess:Nn #3 { #1 }
   \datatool_angLatn_process_letter_group:N #3
   \bool_lazy_and:nnT
     { \tl_if_head_eq_charcode_p:nN { #1 } - }
     { \bool_not_p:n { \tl_if_head_eq_charcode_p:nN { #2 } " } }
    {
      \exp_args:NNe \tl_set:Nn #3 { \tl_tail:N #3 }
    }
 }
%    \end{macrocode}
%\end{macro}
%
%    \begin{macrocode}
\newcommand \DTLangLatnLocaleHook
 {
  \DTLresetLanguage
  \renewcommand
    \DTLCurrentLocaleWordHandler
    { \DTLangLatnLocaleHandler }
  \renewcommand
    \DTLCurrentLocaleGetInitialLetter
    { \DTLangLatnLocaleGetInitialLetter }
  \renewcommand
    \DTLCurrentLocaleGetGroupString
    { \DTLangLatnLocaleGetGroupString }
  \DTLangLatnTranslations
%    \end{macrocode}
% Allow region files to construct control sequence names based on
% this naming scheme:
%    \begin{macrocode}
  \tl_set:Nn \l_datatool_current_language_tl { angLatn }
 }
%    \end{macrocode}
%
%    \begin{macrocode}
\ExplSyntaxOff
%    \end{macrocode}
%
%    \begin{macrocode}
\TrackLangAddToCaptions{\DTLangLatnLocaleHook}
%    \end{macrocode}
%\iffalse
%    \begin{macrocode}
%</datatool-ang-Latn.ldf>
%    \end{macrocode}
%\fi
%\iffalse
%    \begin{macrocode}
%<*datatool-ang-Latn-utf8.ldf>
%    \end{macrocode}
%\fi
%\subsection{Root Anglo Saxon Latin Script UTF-8 LDF for \sty{datatool-base}
%(\file{datatool-ang-Latn-utf8.ldf})}
%    \begin{macrocode}
\TrackLangProvidesResource{ang-Latn-utf8}[2025/03/12 v1.1 (NLCT)]
%    \end{macrocode}
%Switch on \LaTeX3 syntax.
%    \begin{macrocode}
\ExplSyntaxOn
%    \end{macrocode}
%
% Only provide limited support for additional characters to allow for
% foreign names. The more cases added, the longer the processing
% time.
%
% The extended Latin characters and characters derived from Runic
% are multi-byte which means that with
% \sty{inputenc} they will be treated as multiple tokens.
% This means that the characters need to be converted into
% single-byte characters such that the character code of those
% single-byte characters have the same ordering (numerically)
% as the Latin characters. Remember that the result isn't intended
% for typesetting but is just intended for a character code
% comparison.
%    \begin{macrocode}
\newcommand \DTLangLatnLocaleHandler [ 1 ]
{
  \datatool_angLatn_order_harley:N #1
}
%    \end{macrocode}
%Harley order: A-Z, Ƿ, Ð, Æ, Þ
%    \begin{macrocode}
\cs_new:Nn \datatool_angLatn_order_harley:N
 {
  \regex_replace_case_all:nN
  {
    {À|Á|Â|Ã|Ä|Ā} {A}
    {Ç|Ċ} {C}
    {È|É|Ê|Ë|Ē} {E}
    {Ì|Í|Î|Ï|Ī} {I}
    {Ñ} {N}
    {Ò|Ó|Ô|Õ|Ö} {O}
    {Œ} {OE}
    {Ù|Ú|Û|Ü|Ū} {U}
    {Ý} {Y}
    {Ƿ|Ꝩ} { \cL\[ }
    {Ð} { \cL\\ }
    {Æ|Ǣ|Ǽ|Æ̀|Æ̂} { \cL\] }
    {Þ|Ꝥ} { \cL\^ }
    {à|á|â|ã|ä|ā} {a}
    {ç|ċ} {c}
    {è|é|ê|ë|ē} {e}
    {ì|í|î|ï|ī} {i}
    {ñ} {n}
    {ò|ó|ô|õ|ö} {o}
    {œ} {oe}
    {ſ} {s}
    {ß} {ss}
    {ù|ú|û|ü|ū} {u}
    {ý} {y}
    {ƿ|ꝩ} { \cL\{ }
    {ð} { \cL\| }
    {æ|ǣ|ǽ|æ̀|æ̂} { \cL\} }
    {þ|ꝥ} { \cL\~ }
%    \end{macrocode}
%Any character in the punctuation class that has category other:
%Version 1.1 added category code check.
%    \begin{macrocode}
    { \cO([[:punct:]]) } { \cO\" \1 }
  }
  #1
 }
%    \end{macrocode}
%
% Stowe order has A-Z, Ƿ, Ð, Þ (not sure where Æ goes so I've made it
% equivalent to AE for now).
%    \begin{macrocode}
\cs_new:Nn \datatool_angLatn_order_stowe:N
 {
  \regex_replace_case_all:nN
  {
    {À|Á|Â|Ã|Ä|Ą} {A}
    {Æ|Ǣ|Ǽ|Æ̀|Æ̂} {AE}
    {Ç|Ċ} {C}
    {È|É|Ê|Ë|Ę} {E}
    {Ì|Í|Î|Ï} {I}
    {Ñ} {N}
    {Ò|Ó|Ô|Õ|Ö} {O}
    {Œ} {OE}
    {Ꞇ|Ꞇ̃} {T}
    {Ù|Ú|Û|Ü} {U}
    {Ý} {Y}
    {Ƿ|Ꝩ} { \cL\[ }
    {Ð} { \cL\\ }
    {Þ|Ꝥ} { \cL\] }
    {à|á|â|ã|ä|ą} {a}
    {æ|ǣ|ǽ|æ̀|æ̂} {ae}
    {ç|ċ} {c}
    {è|é|ê|ë|ę} {e}
    {ì|í|î|ï|ı} {i}
    {ñ} {n}
    {ò|ó|ô|õ|ö} {o}
    {œ} {oe}
    {ꞇ|ꞇ̃} {t}
    {ù|ú|û|ü} {u}
    {ý} {y}
    {ƿ|ꝩ} { \cL\{ }
    {ð} { \cL\| }
    {þ|ꝥ} { \cL\} }
    {⁊} { \cL\~ }
%    \end{macrocode}
%Any character in the punctuation class that has category other:
%Version 1.1 added category code check.
%    \begin{macrocode}
    { \cO([[:punct:]]) } { \cO\" \1 }
  }
  #1
 }
%    \end{macrocode}
%
% Titus has order A-Z, Ƿ–Þ–Ð (again, not sure where Æ goes).
%    \begin{macrocode}
\cs_new:Nn \datatool_angLatn_order_titus:N
 {
  \regex_replace_case_all:nN
  {
    {À|Á|Â|Ã|Ä|Ą} {A}
    {Æ|Ǣ|Ǽ|Æ̀|Æ̂} {AE}
    {Ç|Ċ} {C}
    {È|É|Ê|Ë|Ę} {E}
    {Ì|Í|Î|Ï} {I}
    {Ñ} {N}
    {Ò|Ó|Ô|Õ|Ö} {O}
    {Œ} {OE}
    {Ꞇ|Ꞇ̃} {T}
    {Ù|Ú|Û|Ü} {U}
    {Ý} {Y}
    {Ƿ|Ꝩ} { \cL\[ }
    {Ð} { \cL\\ }
    {Þ|Ꝥ} { \cL\] }
    {à|á|â|ã|ä|ą} {a}
    {æ|ǣ|ǽ|æ̀|æ̂} {ae}
    {ç|ċ} {c}
    {è|é|ê|ë|ę} {e}
    {ì|í|î|ï|ı} {i}
    {ñ} {n}
    {ò|ó|ô|õ|ö} {o}
    {œ} {oe}
    {ꞇ|ꞇ̃} {t}
    {ù|ú|û|ü} {u}
    {ý} {y}
    {ƿ|ꝩ} { \cL\{ }
    {ð} { \cL\| }
    {þ|ꝥ} { \cL\} }
    {⁊} { \cL\~ }
%    \end{macrocode}
%Any character in the punctuation class that has category other:
%Version 1.1 added category code check.
%    \begin{macrocode}
    { \cO([[:punct:]]) } { \cO\" \1 }
  }
  #1
 }
%    \end{macrocode}
%
% Fuþorc order.
%    \begin{macrocode}
\cs_new:Nn \datatool_angLatn_order_futhorc:N
 {
  \regex_replace_case_all:nN
  {
    {f} {\cL\x{31}}
    {u} {\cL\x{32}}
    {þ} {\cL\x{33}}
    {o} {\cL\x{34}}
    {r} {\cL\x{35}}
    {c} {\cL\x{36}}
    {g} {\cL\x{37}}
    {w} {\cL\x{38}}
    {h} {\cL\x{39}}
    {n} {\cL\:}
    {i} {\cL\;}
    {j} {\cL\<}
    {ï} {\cL\=}
    {p} {\cL\>}
    {x} {\cL\@}
    {st} {\cL\x{51}}
    {s} {\cL\x{41}}
    {t} {\cL\x{42}}
    {b} {\cL\x{43}}
    {ea} {\cL\x{4C}}
    {e} {\cL\x{44}}
    {m} {\cL\x{45}}
    {l} {\cL\x{46}}
    {ŋ} {\cL\x{47}}
    {œ} {\cL\x{48}}
    {d} {\cL\x{49}}
    {a} {\cL\x{4A}}
    {æ} {\cL\x{4B}}
    {y} {\cL\x{4D}}
    {k} {\cL\x{4E}}
    {ḡ} {\cL\x{4F}}
    {q} {\cL\x{50}}
    {ę|ᴇ} {\cL\x{52}}
    {į} {\cL\x{53}}
    {ī} {\cL\x{54}}
    {c̄|k̄} {\cL\x{55}}
    {⁊} {\cL\~}
%    \end{macrocode}
%Any character in the punctuation class that has category other:
%Version 1.1 added category code check.
%    \begin{macrocode}
    { \cO([[:punct:]]) } { \cO\" \1 }
  }
  #1
 }
%    \end{macrocode}
%
%We also need to merge accented characters for the letter groups.
%Note that since we're only concerned with the first letter, 
%we only need a single replace not replace all.
%    \begin{macrocode}
\cs_new:Nn \datatool_angLatn_process_letter_group:N
 {
  \regex_replace_case_once:nN
  {
    {À|Á|Â|Ã|Ä|Ā} {A}
    {Ç|Ċ} {C}
    {È|É|Ê|Ë|Ē} {E}
    {Ì|Í|Î|Ï|Ī} {I}
    {Ñ} {N}
    {Ò|Ó|Ô|Õ|Ö} {O}
    {Œ} {OE}
    {Ù|Ú|Û|Ü|Ū} {U}
    {Ý} {Y}
    {Æ|Ǣ|Ǽ|Æ̀|Æ̂} {Æ}
    {Ƿ|Ꝩ} {Ƿ}
    {Þ|Ꝥ} {Þ}
    {à|á|â|ã|ä|ā} {a}
    {ç|ċ} {c}
    {è|é|ê|ë|ē} {e}
    {ì|í|î|ï|ī} {i}
    {ñ} {n}
    {ò|ó|ô|õ|ö} {o}
    {œ} {oe}
    {ſ} {s}
    {ß} {ss}
    {ù|ú|û|ü|ū} {u}
    {ý} {y}
    {ƿ|ꝩ} {ƿ}
    {æ|ǣ|ǽ|æ̀|æ̂} {æ}
    {þ|ꝥ} {þ}
  }
  #1
 }
%    \end{macrocode}
%
%    \begin{macrocode}
\datatool_locale_define_keys:nn { ang-Latn }
 {
    order .choice:,
    order / harley .code:n = 
     {
       \renewcommand \DTLangLatnLocaleHandler [1]
        {
          \datatool_angLatn_order_harley:N ##1 
        }
     },
    order / stowe .code:n = 
     {
       \renewcommand \DTLangLatnLocaleHandler [1]
        {
          \datatool_angLatn_order_stowe:N ##1
        }
     },
    order / titus .code:n = 
     {
       \renewcommand \DTLangLatnLocaleHandler [1]
        {
          \datatool_angLatn_order_titus:N ##1
        }
     },
    order / futhorc .code:n = 
     {
       \renewcommand \DTLangLatnLocaleHandler [1]
        {
          \datatool_angLatn_order_futhorc:N ##1
        }
     },
 }
%    \end{macrocode}
%
%Translations: only providing \qt{and} (Tironian et)
%    \begin{macrocode}
\newcommand \DTLangLatnTranslations
{
  \tl_set:Nn \DTLandname { ⁊ }
}
%    \end{macrocode}
%
%Switch off \LaTeX3 syntax.
%    \begin{macrocode}
\ExplSyntaxOff
%    \end{macrocode}
%\iffalse
%    \begin{macrocode}
%</datatool-ang-Latn-utf8.ldf>
%    \end{macrocode}
%\fi
%\iffalse
%    \begin{macrocode}
%<*datatool-ang-Runr.ldf>
%    \end{macrocode}
%\fi
%\subsection{Root Old English (Anglo Saxon) Runic Script LDF for
%\sty{datatool-base} (\file{datatool-ang-Runr.ldf})}
% Provide support for Old English (\sty{tracklang} root language
% \qt{anglosaxon}) using Runic script.
%
% This is mainly provided as an example for dealing with languages
% that have multiple scripts and non-ASCII letters.
% As such, it doesn't provide any translations (except for \qt{and}) or date/time
% formatting.
%
%\begin{important}
% Identifying \qt{Runr} as the script indicates that the text source uses
% Runic characters. If a package, such as \sty{allrunes}, is used
% that maps Latin characters to runes (for example, \verb|\textarm{fuÞark}|)
% then the script should be set to \qt{Latn}.
%\end{important}
%
%    \begin{macrocode}
\TrackLangProvidesResource{ang-Runr}[2025/03/12 v1.1 (NLCT)]
%    \end{macrocode}
% Try loading \filemeta{datatool-ang-Runr-}{encoding}{.ldf}
%    \begin{macrocode}
\TrackLangRequestResource{ang-Runr-\TrackLangEncodingName}
{%
%    \end{macrocode}
% Not found.
%    \begin{macrocode}
  \csuse{datatool_locale_warn:n}{datatool-ang-Runr}%
   {%
     No support for `anglosaxon' with script `Runr'
     and encoding `\TrackLangEncodingName'.%
   }%
  \endinput
}
%    \end{macrocode}
% Switch on \LaTeX3 syntax.
%    \begin{macrocode}
\ExplSyntaxOn
%    \end{macrocode}
% Any options may be defined with
%\begin{dispListing}
%\datatool_locale_define_keys:nn { ang-Runr } { ... }
%\end{dispListing}
% or
%\begin{dispListing}
%\datatool_locale_define_keys:nn { ang-Runr / subgroup } { ... }
%\end{dispListing}
% (Syntax as per \verb|\keys_define:nn| )
%
%\subsubsection{Orthography rules}
%NB \cs{DTLangRunrLocaleHandler} is defined in the applicable encoding
%file loaded above.
%
%\begin{macro}{\DTLangRunrLocaleGetInitialLetter}
%Get the first letter of the word according to the locale's alphabet and 
%store in token list variable.
%    \begin{macrocode}
\newcommand \DTLangRunrLocaleGetInitialLetter [ 2 ]
 {
   \datatool_get_first_grapheme:nN { #1 } #2
 }
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTLangRunrLocaleGetGroupChar}
%\begin{definition}
%\cs{DTLangRunrLocaleGetGroupString}\marg{actual}\marg{sort value}\marg{tl}
%\end{definition}
%Get the text that will be used to obtain the letter group 
%(the actual value not the sort value). 
%    \begin{macrocode}
\newcommand \DTLangRunrLocaleGetGroupString [ 3 ]
 {
   \datatool_sort_preprocess:Nn #3 { #1 }
 }
%    \end{macrocode}
%\end{macro}
%
%    \begin{macrocode}
\newcommand \DTLangRunrLocaleHook
 {
  \DTLresetLanguage
  \renewcommand
    \DTLCurrentLocaleWordHandler
    { \DTLangRunrLocaleHandler }
  \renewcommand
    \DTLCurrentLocaleGetInitialLetter
    { \DTLangRunrLocaleGetInitialLetter }
  \renewcommand
    \DTLCurrentLocaleGetGroupString
    { \DTLangRunrLocaleGetGroupString }
  \DTLangRunrTranslations
%    \end{macrocode}
% Allow region files to construct control sequence names based on
% this naming scheme:
%    \begin{macrocode}
  \tl_set:Nn \l_datatool_current_language_tl { angRunr }
 }
%    \end{macrocode}
%
%    \begin{macrocode}
\ExplSyntaxOff
%    \end{macrocode}
%
%    \begin{macrocode}
\TrackLangAddToCaptions{\DTLangRunrLocaleHook}
%    \end{macrocode}
%\iffalse
%    \begin{macrocode}
%</datatool-ang-Runr.ldf>
%    \end{macrocode}
%\fi
%\iffalse
%    \begin{macrocode}
%<*datatool-ang-Runr-utf8.ldf>
%    \end{macrocode}
%\fi
%\subsection{Root Anglo Saxon Runic Script UTF-8 LDF for \sty{datatool-base}
%(\file{datatool-ang-Runr-utf8.ldf})}
%    \begin{macrocode}
\TrackLangProvidesResource{ang-Runr-utf8}[2025/03/12 v1.1 (NLCT)]
%    \end{macrocode}
%Switch on \LaTeX3 syntax.
%    \begin{macrocode}
\ExplSyntaxOn
%    \end{macrocode}
%
% The runic characters are multi-byte which means that with
% \sty{inputenc} they will be treated as multiple tokens.
% This means that the characters need to be converted into
% single-byte characters such that the character code of those
% single-byte characters have the same ordering (numerically)
% as the runic characters. Remember that the result isn't intended
% for typesetting but is just intended for a character code
% comparison.
%\begin{macro}{\DTLangRunrLocaleHandler}
%    \begin{macrocode}
\newcommand \DTLangRunrLocaleHandler [ 1 ] {
  \datatool_angRunr_order_punc_futhorc:n { #1 }
}
%    \end{macrocode}
%\end{macro}
%
%If PDF\LaTeX, we can't match greater than FF with \cs{x}, so need different
%regular expressions depending on whether or not we have 
%a native Unicode engine.
%    \begin{macrocode}
\datatool_if_unicode_engine:TF
 {
%    \end{macrocode}
%Unicode order (mostly Unicode order).
%The punctuation characters are placed first, the rest follows
%Unicode order.
%    \begin{macrocode}
  \cs_new:Nn \datatool_angRunr_order_punc_unicode:n
   {
    \regex_replace_case_all:nN
    {
%    \end{macrocode}
% U+16A0 RUNIC LETTER FEHU FEOH FE F
%    \begin{macrocode}
      { \x{16A0} } { \cL\x{31} }
%    \end{macrocode}
% U+16A1 RUNIC LETTER V
%    \begin{macrocode}
      { \x{16A1} } { \cL\x{32} }
%    \end{macrocode}
% U+16A2 RUNIC LETTER URUZ UR U
%    \begin{macrocode}
      { \x{16A2} } { \cL\x{33} }
%    \end{macrocode}
% U+16A3 RUNIC LETTER YR
%    \begin{macrocode}
      { \x{16A3} } { \cL\x{34} }
%    \end{macrocode}
% U+16A4 RUNIC LETTER Y
%    \begin{macrocode}
      { \x{16A4} } { \cL\x{35} }
%    \end{macrocode}
% U+16A5 RUNIC LETTER W
%    \begin{macrocode}
      { \x{16A5} } { \cL\x{36} }
%    \end{macrocode}
% U+16A6 RUNIC LETTER THURISAZ THURS THORN
%    \begin{macrocode}
      { \x{16A6} } { \cL\x{37} }
%    \end{macrocode}
% U+16A7 RUNIC LETTER ETH
%    \begin{macrocode}
      { \x{16A7} } { \cL\x{38} }
%    \end{macrocode}
% U+16A8 RUNIC LETTER ANSUZ A
%    \begin{macrocode}
      { \x{16A8} } { \cL\x{39} }
%    \end{macrocode}
% U+16A9 RUNIC LETTER OS O
%    \begin{macrocode}
      { \x{16A9} } { \cL\x{3A} }
%    \end{macrocode}
% U+16AA RUNIC LETTER AC A
%    \begin{macrocode}
      { \x{16AA} } { \cL\x{3B} }
%    \end{macrocode}
% U+16AB RUNIC LETTER AESC
%    \begin{macrocode}
      { \x{16AB} } { \cL\x{3C} }
%    \end{macrocode}
% U+16AC RUNIC LETTER LONG-BRANCH-OSS O
%    \begin{macrocode}
      { \x{16AC} } { \cL\x{3D} }
%    \end{macrocode}
% U+16AD RUNIC LETTER SHORT-TWIG-OSS O
%    \begin{macrocode}
      { \x{16AD} } { \cL\x{3E} }
%    \end{macrocode}
% U+16AE RUNIC LETTER O
%    \begin{macrocode}
      { \x{16AE} } { \cL\x{3F} }
%    \end{macrocode}
% U+16AF RUNIC LETTER OE
%    \begin{macrocode}
      { \x{16AF} } { \cL\x{40} }
%    \end{macrocode}
% U+16B0 RUNIC LETTER ON
%    \begin{macrocode}
      { \x{16B0} } { \cL\x{41} }
%    \end{macrocode}
% U+16B1 RUNIC LETTER RAIDO RAD REID R
%    \begin{macrocode}
      { \x{16B1} } { \cL\x{42} }
%    \end{macrocode}
% U+16B2 RUNIC LETTER KAUNA
%    \begin{macrocode}
      { \x{16B2} } { \cL\x{43} }
%    \end{macrocode}
% U+16B3 RUNIC LETTER CEN
%    \begin{macrocode}
      { \x{16B3} } { \cL\x{44} }
%    \end{macrocode}
% U+16B4 RUNIC LETTER KAUN K
%    \begin{macrocode}
      { \x{16B4} } { \cL\x{45} }
%    \end{macrocode}
% U+16B5 RUNIC LETTER G
%    \begin{macrocode}
      { \x{16B5} } { \cL\x{46} }
%    \end{macrocode}
% U+16B6 RUNIC LETTER ENG
%    \begin{macrocode}
      { \x{16B6} } { \cL\x{47} }
%    \end{macrocode}
% U+16B7 RUNIC LETTER GEBO GYFU G
%    \begin{macrocode}
      { \x{16B7} } { \cL\x{48} }
%    \end{macrocode}
% U+16B8 RUNIC LETTER GAR
%    \begin{macrocode}
      { \x{16B8} } { \cL\x{49} }
%    \end{macrocode}
% U+16B9 RUNIC LETTER WUNJO WYNN W
%    \begin{macrocode}
      { \x{16B9} } { \cL\x{4A} }
%    \end{macrocode}
% U+16BA RUNIC LETTER HAGLAZ H
%    \begin{macrocode}
      { \x{16BA} } { \cL\x{4B} }
%    \end{macrocode}
% U+16BB RUNIC LETTER HAEGL H
%    \begin{macrocode}
      { \x{16BB} } { \cL\x{4C} }
%    \end{macrocode}
% U+16BC RUNIC LETTER LONG-BRANCH-HAGALL H
%    \begin{macrocode}
      { \x{16BC} } { \cL\x{4D} }
%    \end{macrocode}
% U+16BD RUNIC LETTER SHORT-TWIG-HAGALL H
%    \begin{macrocode}
      { \x{16BD} } { \cL\x{4E} }
%    \end{macrocode}
% U+16BE RUNIC LETTER NAUDIZ NYD NAUD N
%    \begin{macrocode}
      { \x{16BE} } { \cL\x{4F} }
%    \end{macrocode}
% U+16BF RUNIC LETTER SHORT-TWIG-NAUD N
%    \begin{macrocode}
      { \x{16BF} } { \cL\x{50} }
%    \end{macrocode}
% U+16C0 RUNIC LETTER DOTTED-N
%    \begin{macrocode}
      { \x{16C0} } { \cL\x{51} }
%    \end{macrocode}
% U+16C1 RUNIC LETTER ISAZ IS ISS I
%    \begin{macrocode}
      { \x{16C1} } { \cL\x{52} }
%    \end{macrocode}
% U+16C2 RUNIC LETTER E
%    \begin{macrocode}
      { \x{16C2} } { \cL\x{53} }
%    \end{macrocode}
% U+16C3 RUNIC LETTER JERAN J
%    \begin{macrocode}
      { \x{16C3} } { \cL\x{54} }
%    \end{macrocode}
% U+16C4 RUNIC LETTER GER
%    \begin{macrocode}
      { \x{16C4} } { \cL\x{55} }
%    \end{macrocode}
% U+16C5 RUNIC LETTER LONG-BRANCH-AR AE
%    \begin{macrocode}
      { \x{16C5} } { \cL\x{56} }
%    \end{macrocode}
% U+16C6 RUNIC LETTER SHORT-TWIG-AR A
%    \begin{macrocode}
      { \x{16C6} } { \cL\x{57} }
%    \end{macrocode}
% U+16C7 RUNIC LETTER IWAZ EOH
%    \begin{macrocode}
      { \x{16C7} } { \cL\x{58} }
%    \end{macrocode}
% U+16C8 RUNIC LETTER PERTHO PEORTH P
%    \begin{macrocode}
      { \x{16C8} } { \cL\x{59} }
%    \end{macrocode}
% U+16C9 RUNIC LETTER ALGIZ EOLHX
%    \begin{macrocode}
      { \x{16C9} } { \cL\x{5A} }
%    \end{macrocode}
% U+16CA RUNIC LETTER SOWILO S
%    \begin{macrocode}
      { \x{16CA} } { \cL\x{5B} }
%    \end{macrocode}
% U+16CB RUNIC LETTER SIGEL LONG-BRANCH-SOL S
%    \begin{macrocode}
      { \x{16CB} } { \cL\x{5C} }
%    \end{macrocode}
% U+16CC RUNIC LETTER SHORT-TWIG-SOL S
%    \begin{macrocode}
      { \x{16CC} } { \cL\x{5D} }
%    \end{macrocode}
% U+16CD RUNIC LETTER C
%    \begin{macrocode}
      { \x{16CD} } { \cL\x{5E} }
%    \end{macrocode}
% U+16CE RUNIC LETTER Z
%    \begin{macrocode}
      { \x{16CE} } { \cL\x{5F} }
%    \end{macrocode}
% U+16CF RUNIC LETTER TIWAZ TIR TYR T
%    \begin{macrocode}
      { \x{16CF} } { \cL\x{60} }
%    \end{macrocode}
% U+16D0 RUNIC LETTER SHORT-TWIG-TYR T
%    \begin{macrocode}
      { \x{16D0} } { \cL\x{61} }
%    \end{macrocode}
% U+16D1 RUNIC LETTER D
%    \begin{macrocode}
      { \x{16D1} } { \cL\x{62} }
%    \end{macrocode}
% U+16D2 RUNIC LETTER BERKANAN BEORC BJARKAN B
%    \begin{macrocode}
      { \x{16D2} } { \cL\x{63} }
%    \end{macrocode}
% U+16D3 RUNIC LETTER SHORT-TWIG-BJARKAN B
%    \begin{macrocode}
      { \x{16D3} } { \cL\x{64} }
%    \end{macrocode}
% U+16D4 RUNIC LETTER DOTTED-P
%    \begin{macrocode}
      { \x{16D4} } { \cL\x{65} }
%    \end{macrocode}
% U+16D5 RUNIC LETTER OPEN-P
%    \begin{macrocode}
      { \x{16D5} } { \cL\x{66} }
%    \end{macrocode}
% U+16D6 RUNIC LETTER EHWAZ EH E
%    \begin{macrocode}
      { \x{16D6} } { \cL\x{67} }
%    \end{macrocode}
% U+16D7 RUNIC LETTER MANNAZ MAN M
%    \begin{macrocode}
      { \x{16D7} } { \cL\x{68} }
%    \end{macrocode}
% U+16D8 RUNIC LETTER LONG-BRANCH-MADR M
%    \begin{macrocode}
      { \x{16D8} } { \cL\x{69} }
%    \end{macrocode}
% U+16D9 RUNIC LETTER SHORT-TWIG-MADR M
%    \begin{macrocode}
      { \x{16D9} } { \cL\x{6A} }
%    \end{macrocode}
% U+16DA RUNIC LETTER LAUKAZ LAGU LOGR L
%    \begin{macrocode}
      { \x{16DA} } { \cL\x{6B} }
%    \end{macrocode}
% U+16DB RUNIC LETTER DOTTED-L
%    \begin{macrocode}
      { \x{16DB} } { \cL\x{6C} }
%    \end{macrocode}
% U+16DC RUNIC LETTER INGWAZ
%    \begin{macrocode}
      { \x{16DC} } { \cL\x{6D} }
%    \end{macrocode}
% U+16DD RUNIC LETTER ING
%    \begin{macrocode}
      { \x{16DD} } { \cL\x{6F} }
%    \end{macrocode}
% U+16DE RUNIC LETTER DAGAZ DAEG D
%    \begin{macrocode}
      { \x{16DE} } { \cL\x{70} }
%    \end{macrocode}
% U+16DF RUNIC LETTER OTHALAN ETHEL O
%    \begin{macrocode}
      { \x{16DF} } { \cL\x{71} }
%    \end{macrocode}
% U+16E0 RUNIC LETTER EAR
%    \begin{macrocode}
      { \x{16E0} } { \cL\x{72} }
%    \end{macrocode}
% U+16E1 RUNIC LETTER IOR
%    \begin{macrocode}
      { \x{16E1} } { \cL\x{73} }
%    \end{macrocode}
% U+16E2 RUNIC LETTER CWEORTH
%    \begin{macrocode}
      { \x{16E2} } { \cL\x{74} }
%    \end{macrocode}
% U+16E3 RUNIC LETTER CALC
%    \begin{macrocode}
      { \x{16E3} } { \cL\x{75} }
%    \end{macrocode}
% U+16E4 RUNIC LETTER CEALC
%    \begin{macrocode}
      { \x{16E4} } { \cL\x{76} }
%    \end{macrocode}
% U+16E5 RUNIC LETTER STAN
%    \begin{macrocode}
      { \x{16E5} } { \cL\x{77} }
%    \end{macrocode}
% U+16E6 RUNIC LETTER LONG-BRANCH-YR
%    \begin{macrocode}
      { \x{16E6} } { \cL\x{78} }
%    \end{macrocode}
% U+16E7 RUNIC LETTER SHORT-TWIG-YR
%    \begin{macrocode}
      { \x{16E7} } { \cL\x{79} }
%    \end{macrocode}
% U+16E8 RUNIC LETTER ICELANDIC-YR
%    \begin{macrocode}
      { \x{16E8} } { \cL\x{7A} }
%    \end{macrocode}
% U+16E9 RUNIC LETTER Q
%    \begin{macrocode}
      { \x{16E9} } { \cL\x{7B} }
%    \end{macrocode}
% U+16EA RUNIC LETTER X
%    \begin{macrocode}
      { \x{16EA} } { \cL\x{7C} }
%    \end{macrocode}
% U+16EE RUNIC ARLAUG SYMBOL
%    \begin{macrocode}
      { \x{16EE} } { \cL\x{7D} \cO\! }
%    \end{macrocode}
% U+16EF RUNIC TVIMADUR SYMBOL
%    \begin{macrocode}
      { \x{16EF} } { \cL\x{7D} \cO\" }
%    \end{macrocode}
% U+16F0 RUNIC BELGTHOR SYMBOL
%    \begin{macrocode}
      { \x{16F0} } { \cL\x{7D} \cO\# }
%    \end{macrocode}
% U+16F1 RUNIC LETTER K
%    \begin{macrocode}
      { \x{16F1} } { \cL\x{7D} \cO\$ }
%    \end{macrocode}
% U+16F2 RUNIC LETTER SH
%    \begin{macrocode}
      { \x{16F2} } { \cL\x{7D} \cO\% }
%    \end{macrocode}
% U+16F3 RUNIC LETTER OO
%    \begin{macrocode}
      { \x{16F3} } { \cL\x{7D} \cO\& }
%    \end{macrocode}
% U+16F4 RUNIC LETTER FRANKS CASKET OS
%    \begin{macrocode}
      { \x{16F4} } { \cL\x{7D} \cO\' }
%    \end{macrocode}
% U+16F5 RUNIC LETTER FRANKS CASKET IS
%    \begin{macrocode}
      { \x{16F5} } { \cL\x{7D} \cO\( }
%    \end{macrocode}
% U+16F6 RUNIC LETTER FRANKS CASKET EH
%    \begin{macrocode}
      { \x{16F6} } { \cL\x{7D} \cO\) }
%    \end{macrocode}
% U+16F7 RUNIC LETTER FRANKS CASKET AC
%    \begin{macrocode}
      { \x{16F7} } { \cL\x{7D} \cO\* }
%    \end{macrocode}
% U+16F8 RUNIC LETTER FRANKS CASKET AESC
%    \begin{macrocode}
      { \x{16F8} } { \cL\x{7D} \cO\+ }
%    \end{macrocode}
% U+16EB RUNIC SINGLE PUNCTUATION
%    \begin{macrocode}
      { \x{16EB} } { \cO\! \cO\! }
%    \end{macrocode}
% U+16EC RUNIC MULTIPLE PUNCTUATION
%    \begin{macrocode}
      { \x{16EC} } { \cO\! \cO\" }
%    \end{macrocode}
% U+16ED RUNIC CROSS PUNCTUATION
%    \begin{macrocode}
      { \x{16ED} } { \cO\! \cO\# }
%    \end{macrocode}
% Tironian et
%    \begin{macrocode}
      { \x{204A} } { \cL\x{7E} }
%    \end{macrocode}
%Any character in the punctuation class that has category other:
%Version 1.1 added category code check.
%    \begin{macrocode}
      { \cO([[:punct:]]) } { \cO\! \cO\$ \1 }
    }
    #1
   }
%    \end{macrocode}
%Old English Rune Poem order (fuþorc). Not all characters are included in the
%poem, so they are appended at the end. Punctuation characters come
%first.
%    \begin{macrocode}
  \cs_new:Nn \datatool_angRunr_order_punc_futhorc:n
   {
    \regex_replace_case_all:nN
    {
%    \end{macrocode}
% U+16A0 RUNIC LETTER FEHU FEOH FE F
%    \begin{macrocode}
      { \x{16A0} } { \cL\x{31} }
%    \end{macrocode}
% U+16A2 RUNIC LETTER URUZ UR U
%    \begin{macrocode}
      { \x{16A2} } { \cL\x{32} }
%    \end{macrocode}
% U+16A6 RUNIC LETTER THURISAZ THURS THORN
%    \begin{macrocode}
      { \x{16A6} } { \cL\x{33} }
%    \end{macrocode}
% U+16A9 RUNIC LETTER OS O
%    \begin{macrocode}
      { \x{16A9} } { \cL\x{34} }
%    \end{macrocode}
% U+16B1 RUNIC LETTER RAIDO RAD REID R
%    \begin{macrocode}
      { \x{16B1} } { \cL\x{35} }
%    \end{macrocode}
% U+16B3 RUNIC LETTER CEN
%    \begin{macrocode}
      { \x{16B3} } { \cL\x{36} }
%    \end{macrocode}
% U+16B7 RUNIC LETTER GEBO GYFU G
%    \begin{macrocode}
      { \x{16B7} } { \cL\x{37} }
%    \end{macrocode}
% U+16B9 RUNIC LETTER WUNJO WYNN W
%    \begin{macrocode}
      { \x{16B9} } { \cL\x{38} }
%    \end{macrocode}
% U+16BB RUNIC LETTER HAEGL H
%    \begin{macrocode}
      { \x{16BB} } { \cL\x{39} }
%    \end{macrocode}
% U+16BE RUNIC LETTER NAUDIZ NYD NAUD N
%    \begin{macrocode}
      { \x{16BE} } { \cL\x{3A} }
%    \end{macrocode}
% U+16C1 RUNIC LETTER ISAZ IS ISS I
%    \begin{macrocode}
      { \x{16C1} } { \cL\x{3B} }
%    \end{macrocode}
% U+16C4 RUNIC LETTER GER
%    \begin{macrocode}
      { \x{16C4} } { \cL\x{3C} }
%    \end{macrocode}
% U+16C7 RUNIC LETTER IWAZ EOH
%    \begin{macrocode}
      { \x{16C7} } { \cL\x{3D} }
%    \end{macrocode}
% U+16C8 RUNIC LETTER PERTHO PEORTH P
%    \begin{macrocode}
      { \x{16C8} } { \cL\x{3E} }
%    \end{macrocode}
% U+16C9 RUNIC LETTER ALGIZ EOLHX
%    \begin{macrocode}
      { \x{16C9} } { \cL\x{3F} }
%    \end{macrocode}
% U+16CB RUNIC LETTER SIGEL LONG-BRANCH-SOL S
%    \begin{macrocode}
      { \x{16CB} } { \cL\x{40} }
%    \end{macrocode}
% U+16CF RUNIC LETTER TIWAZ TIR TYR T
%    \begin{macrocode}
      { \x{16CF} } { \cL\x{41} }
%    \end{macrocode}
% U+16D2 RUNIC LETTER BERKANAN BEORC BJARKAN B
%    \begin{macrocode}
      { \x{16D2} } { \cL\x{42} }
%    \end{macrocode}
% U+16D6 RUNIC LETTER EHWAZ EH E
%    \begin{macrocode}
      { \x{16D6} } { \cL\x{43} }
%    \end{macrocode}
% U+16D7 RUNIC LETTER MANNAZ MAN M
%    \begin{macrocode}
      { \x{16D7} } { \cL\x{44} }
%    \end{macrocode}
% U+16DA RUNIC LETTER LAUKAZ LAGU LOGR L
%    \begin{macrocode}
      { \x{16DA} } { \cL\x{45} }
%    \end{macrocode}
% U+16DD RUNIC LETTER ING
%    \begin{macrocode}
      { \x{16DD} } { \cL\x{46} }
%    \end{macrocode}
% U+16DF RUNIC LETTER OTHALAN ETHEL O
%    \begin{macrocode}
      { \x{16DF} } { \cL\x{47} }
%    \end{macrocode}
% U+16DE RUNIC LETTER DAGAZ DAEG D
%    \begin{macrocode}
      { \x{16DE} } { \cL\x{48} }
%    \end{macrocode}
% U+16AA RUNIC LETTER AC A
%    \begin{macrocode}
      { \x{16AA} } { \cL\x{49} }
%    \end{macrocode}
% U+16AB RUNIC LETTER AESC
%    \begin{macrocode}
      { \x{16AB} } { \cL\x{4A} }
%    \end{macrocode}
% U+16A3 RUNIC LETTER YR
%    \begin{macrocode}
      { \x{16A3} } { \cL\x{4B} }
%    \end{macrocode}
% U+16E1 RUNIC LETTER IOR
%    \begin{macrocode}
      { \x{16E1} } { \cL\x{4C} }
%    \end{macrocode}
% U+16E0 RUNIC LETTER EAR
%    \begin{macrocode}
      { \x{16E0} } { \cL\x{4D} }
%    \end{macrocode}
%The remainder are in Unicode order, except for the punctuation.
%Some of these may need to be merged into the above, as applicable.
%
% U+16A1 RUNIC LETTER V
%    \begin{macrocode}
      { \x{16A1} } { \cL\x{4E} }
%    \end{macrocode}
% U+16A4 RUNIC LETTER Y
%    \begin{macrocode}
      { \x{16A4} } { \cL\x{4F} }
%    \end{macrocode}
% U+16A5 RUNIC LETTER W
%    \begin{macrocode}
      { \x{16A5} } { \cL\x{50} }
%    \end{macrocode}
% U+16A7 RUNIC LETTER ETH
%    \begin{macrocode}
      { \x{16A7} } { \cL\x{51} }
%    \end{macrocode}
% U+16A8 RUNIC LETTER ANSUZ A
%    \begin{macrocode}
      { \x{16A8} } { \cL\x{52} }
%    \end{macrocode}
% U+16AC RUNIC LETTER LONG-BRANCH-OSS O
%    \begin{macrocode}
      { \x{16AC} } { \cL\x{53} }
%    \end{macrocode}
% U+16AD RUNIC LETTER SHORT-TWIG-OSS O
%    \begin{macrocode}
      { \x{16AD} } { \cL\x{54} }
%    \end{macrocode}
% U+16AE RUNIC LETTER O
%    \begin{macrocode}
      { \x{16AE} } { \cL\x{55} }
%    \end{macrocode}
% U+16AF RUNIC LETTER OE
%    \begin{macrocode}
      { \x{16AF} } { \cL\x{56} }
%    \end{macrocode}
% U+16B0 RUNIC LETTER ON
%    \begin{macrocode}
      { \x{16B0} } { \cL\x{57} }
%    \end{macrocode}
% U+16B2 RUNIC LETTER KAUNA
%    \begin{macrocode}
      { \x{16B2} } { \cL\x{58} }
%    \end{macrocode}
% U+16B4 RUNIC LETTER KAUN K
%    \begin{macrocode}
      { \x{16B4} } { \cL\x{59} }
%    \end{macrocode}
% U+16B5 RUNIC LETTER G
%    \begin{macrocode}
      { \x{16B5} } { \cL\x{5A} }
%    \end{macrocode}
% U+16B6 RUNIC LETTER ENG
%    \begin{macrocode}
      { \x{16B6} } { \cL\x{5B} }
%    \end{macrocode}
% U+16B8 RUNIC LETTER GAR
%    \begin{macrocode}
      { \x{16B8} } { \cL\x{5C} }
%    \end{macrocode}
% U+16BA RUNIC LETTER HAGLAZ H
%    \begin{macrocode}
      { \x{16BA} } { \cL\x{5D} }
%    \end{macrocode}
% U+16BC RUNIC LETTER LONG-BRANCH-HAGALL H
%    \begin{macrocode}
      { \x{16BC} } { \cL\x{5E} }
%    \end{macrocode}
% U+16BD RUNIC LETTER SHORT-TWIG-HAGALL H
%    \begin{macrocode}
      { \x{16BD} } { \cL\x{5F} }
%    \end{macrocode}
% U+16BF RUNIC LETTER SHORT-TWIG-NAUD N
%    \begin{macrocode}
      { \x{16BF} } { \cL\x{60} }
%    \end{macrocode}
% U+16C0 RUNIC LETTER DOTTED-N
%    \begin{macrocode}
      { \x{16C0} } { \cL\x{61} }
%    \end{macrocode}
% U+16C2 RUNIC LETTER E
%    \begin{macrocode}
      { \x{16C2} } { \cL\x{62} }
%    \end{macrocode}
% U+16C3 RUNIC LETTER JERAN J
%    \begin{macrocode}
      { \x{16C3} } { \cL\x{63} }
%    \end{macrocode}
% U+16C5 RUNIC LETTER LONG-BRANCH-AR AE
%    \begin{macrocode}
      { \x{16C5} } { \cL\x{64} }
%    \end{macrocode}
% U+16C6 RUNIC LETTER SHORT-TWIG-AR A
%    \begin{macrocode}
      { \x{16C6} } { \cL\x{65} }
%    \end{macrocode}
% U+16CA RUNIC LETTER SOWILO S
%    \begin{macrocode}
      { \x{16CA} } { \cL\x{66} }
%    \end{macrocode}
% U+16CC RUNIC LETTER SHORT-TWIG-SOL S
%    \begin{macrocode}
      { \x{16CC} } { \cL\x{67} }
%    \end{macrocode}
% U+16CD RUNIC LETTER C
%    \begin{macrocode}
      { \x{16CD} } { \cL\x{68} }
%    \end{macrocode}
% U+16CE RUNIC LETTER Z
%    \begin{macrocode}
      { \x{16CE} } { \cL\x{69} }
%    \end{macrocode}
% U+16D0 RUNIC LETTER SHORT-TWIG-TYR T
%    \begin{macrocode}
      { \x{16D0} } { \cL\x{6A} }
%    \end{macrocode}
% U+16D1 RUNIC LETTER D
%    \begin{macrocode}
      { \x{16D1} } { \cL\x{6B} }
%    \end{macrocode}
% U+16D3 RUNIC LETTER SHORT-TWIG-BJARKAN B
%    \begin{macrocode}
      { \x{16D3} } { \cL\x{6C} }
%    \end{macrocode}
% U+16D4 RUNIC LETTER DOTTED-P
%    \begin{macrocode}
      { \x{16D4} } { \cL\x{6D} }
%    \end{macrocode}
% U+16D5 RUNIC LETTER OPEN-P
%    \begin{macrocode}
      { \x{16D5} } { \cL\x{6E} }
%    \end{macrocode}
% U+16D8 RUNIC LETTER LONG-BRANCH-MADR M
%    \begin{macrocode}
      { \x{16D8} } { \cL\x{6F} }
%    \end{macrocode}
% U+16D9 RUNIC LETTER SHORT-TWIG-MADR M
%    \begin{macrocode}
      { \x{16D9} } { \cL\x{70} }
%    \end{macrocode}
% U+16DB RUNIC LETTER DOTTED-L
%    \begin{macrocode}
      { \x{16DB} } { \cL\x{71} }
%    \end{macrocode}
% U+16DC RUNIC LETTER INGWAZ
%    \begin{macrocode}
      { \x{16DC} } { \cL\x{72} }
%    \end{macrocode}
% U+16E2 RUNIC LETTER CWEORTH
%    \begin{macrocode}
      { \x{16E2} } { \cL\x{73} }
%    \end{macrocode}
% U+16E3 RUNIC LETTER CALC
%    \begin{macrocode}
      { \x{16E3} } { \cL\x{74} }
%    \end{macrocode}
% U+16E4 RUNIC LETTER CEALC
%    \begin{macrocode}
      { \x{16E4} } { \cL\x{75} }
%    \end{macrocode}
% U+16E5 RUNIC LETTER STAN
%    \begin{macrocode}
      { \x{16E5} } { \cL\x{76} }
%    \end{macrocode}
% U+16E6 RUNIC LETTER LONG-BRANCH-YR
%    \begin{macrocode}
      { \x{16E6} } { \cL\x{77} }
%    \end{macrocode}
% U+16E7 RUNIC LETTER SHORT-TWIG-YR
%    \begin{macrocode}
      { \x{16E7} } { \cL\x{78} }
%    \end{macrocode}
% U+16E8 RUNIC LETTER ICELANDIC-YR
%    \begin{macrocode}
      { \x{16E8} } { \cL\x{79} }
%    \end{macrocode}
% U+16E9 RUNIC LETTER Q
%    \begin{macrocode}
      { \x{16E9} } { \cL\x{7A} }
%    \end{macrocode}
% U+16EA RUNIC LETTER X
%    \begin{macrocode}
      { \x{16EA} } { \cL\x{7B} }
%    \end{macrocode}
% U+16EE RUNIC ARLAUG SYMBOL
%    \begin{macrocode}
      { \x{16EE} } { \cL\x{7C} \cO\! }
%    \end{macrocode}
% U+16EF RUNIC TVIMADUR SYMBOL
%    \begin{macrocode}
      { \x{16EF} } { \cL\x{7C} \cO\" }
%    \end{macrocode}
% U+16F0 RUNIC BELGTHOR SYMBOL
%    \begin{macrocode}
      { \x{16F0} } { \cL\x{7D} \cO\# }
%    \end{macrocode}
% U+16F1 RUNIC LETTER K
%    \begin{macrocode}
      { \x{16F1} } { \cL\x{7D} \cO\$ }
%    \end{macrocode}
% U+16F2 RUNIC LETTER SH
%    \begin{macrocode}
      { \x{16F2} } { \cL\x{7D} \cO\% }
%    \end{macrocode}
% U+16F3 RUNIC LETTER OO
%    \begin{macrocode}
      { \x{16F3} } { \cL\x{7D} \cO\& }
%    \end{macrocode}
% U+16F4 RUNIC LETTER FRANKS CASKET OS
%    \begin{macrocode}
      { \x{16F4} } { \cL\x{7D} \cO\' }
%    \end{macrocode}
% U+16F5 RUNIC LETTER FRANKS CASKET IS
%    \begin{macrocode}
      { \x{16F5} } { \cL\x{7D} \cO\( }
%    \end{macrocode}
% U+16F6 RUNIC LETTER FRANKS CASKET EH
%    \begin{macrocode}
      { \x{16F6} } { \cL\x{7D} \cO\) }
%    \end{macrocode}
% U+16F7 RUNIC LETTER FRANKS CASKET AC
%    \begin{macrocode}
      { \x{16F7} } { \cL\x{7D} \cO\* }
%    \end{macrocode}
% U+16F8 RUNIC LETTER FRANKS CASKET AESC
%    \begin{macrocode}
      { \x{16F8} } { \cL\x{7D} \cO\+ }
%    \end{macrocode}
% U+16EB RUNIC SINGLE PUNCTUATION
%    \begin{macrocode}
      { \x{16EB} } { \cO\! \cO\! }
%    \end{macrocode}
% U+16EC RUNIC MULTIPLE PUNCTUATION
%    \begin{macrocode}
      { \x{16EC} } { \cO\! \cO\" }
%    \end{macrocode}
% U+16ED RUNIC CROSS PUNCTUATION
%    \begin{macrocode}
      { \x{16ED} } { \cO\! \cO\# }
%    \end{macrocode}
% Tironian et
%    \begin{macrocode}
      { \x{204A} } { \cL\x{7E} }
%    \end{macrocode}
%Any character in the punctuation class that has category other:
%Version 1.1 added category code check.
%    \begin{macrocode}
      { \cO([[:punct:]]) } { \cO\! \cO\$ \1 }
    }
    #1
   }
%    \end{macrocode}
%Old English Rune Poem order (fuþorc, punctuation last). Not all characters are included in the
%poem, so they are appended at the end.
%    \begin{macrocode}
  \cs_new:Nn \datatool_angRunr_order_futhorc_punc:n
   {
    \regex_replace_case_all:nN
    {
%    \end{macrocode}
% U+16A0 RUNIC LETTER FEHU FEOH FE F
%    \begin{macrocode}
      { \x{16A0} } { \cL\x{31} }
%    \end{macrocode}
% U+16A2 RUNIC LETTER URUZ UR U
%    \begin{macrocode}
      { \x{16A2} } { \cL\x{32} }
%    \end{macrocode}
% U+16A6 RUNIC LETTER THURISAZ THURS THORN
%    \begin{macrocode}
      { \x{16A6} } { \cL\x{33} }
%    \end{macrocode}
% U+16A9 RUNIC LETTER OS O
%    \begin{macrocode}
      { \x{16A9} } { \cL\x{34} }
%    \end{macrocode}
% U+16B1 RUNIC LETTER RAIDO RAD REID R
%    \begin{macrocode}
      { \x{16B1} } { \cL\x{35} }
%    \end{macrocode}
% U+16B3 RUNIC LETTER CEN
%    \begin{macrocode}
      { \x{16B3} } { \cL\x{36} }
%    \end{macrocode}
% U+16B7 RUNIC LETTER GEBO GYFU G
%    \begin{macrocode}
      { \x{16B7} } { \cL\x{37} }
%    \end{macrocode}
% U+16B9 RUNIC LETTER WUNJO WYNN W
%    \begin{macrocode}
      { \x{16B9} } { \cL\x{38} }
%    \end{macrocode}
% U+16BB RUNIC LETTER HAEGL H
%    \begin{macrocode}
      { \x{16BB} } { \cL\x{39} }
%    \end{macrocode}
% U+16BE RUNIC LETTER NAUDIZ NYD NAUD N
%    \begin{macrocode}
      { \x{16BE} } { \cL\x{3A} }
%    \end{macrocode}
% U+16C1 RUNIC LETTER ISAZ IS ISS I
%    \begin{macrocode}
      { \x{16C1} } { \cL\x{3B} }
%    \end{macrocode}
% U+16C4 RUNIC LETTER GER
%    \begin{macrocode}
      { \x{16C4} } { \cL\x{3C} }
%    \end{macrocode}
% U+16C7 RUNIC LETTER IWAZ EOH
%    \begin{macrocode}
      { \x{16C7} } { \cL\x{3D} }
%    \end{macrocode}
% U+16C8 RUNIC LETTER PERTHO PEORTH P
%    \begin{macrocode}
      { \x{16C8} } { \cL\x{3E} }
%    \end{macrocode}
% U+16C9 RUNIC LETTER ALGIZ EOLHX
%    \begin{macrocode}
      { \x{16C9} } { \cL\x{3F} }
%    \end{macrocode}
% U+16CB RUNIC LETTER SIGEL LONG-BRANCH-SOL S
%    \begin{macrocode}
      { \x{16CB} } { \cL\x{40} }
%    \end{macrocode}
% U+16CF RUNIC LETTER TIWAZ TIR TYR T
%    \begin{macrocode}
      { \x{16CF} } { \cL\x{41} }
%    \end{macrocode}
% U+16D2 RUNIC LETTER BERKANAN BEORC BJARKAN B
%    \begin{macrocode}
      { \x{16D2} } { \cL\x{42} }
%    \end{macrocode}
% U+16D6 RUNIC LETTER EHWAZ EH E
%    \begin{macrocode}
      { \x{16D6} } { \cL\x{43} }
%    \end{macrocode}
% U+16D7 RUNIC LETTER MANNAZ MAN M
%    \begin{macrocode}
      { \x{16D7} } { \cL\x{44} }
%    \end{macrocode}
% U+16DA RUNIC LETTER LAUKAZ LAGU LOGR L
%    \begin{macrocode}
      { \x{16DA} } { \cL\x{45} }
%    \end{macrocode}
% U+16DD RUNIC LETTER ING
%    \begin{macrocode}
      { \x{16DD} } { \cL\x{46} }
%    \end{macrocode}
% U+16DF RUNIC LETTER OTHALAN ETHEL O
%    \begin{macrocode}
      { \x{16DF} } { \cL\x{47} }
%    \end{macrocode}
% U+16DE RUNIC LETTER DAGAZ DAEG D
%    \begin{macrocode}
      { \x{16DE} } { \cL\x{48} }
%    \end{macrocode}
% U+16AA RUNIC LETTER AC A
%    \begin{macrocode}
      { \x{16AA} } { \cL\x{49} }
%    \end{macrocode}
% U+16AB RUNIC LETTER AESC
%    \begin{macrocode}
      { \x{16AB} } { \cL\x{4A} }
%    \end{macrocode}
% U+16A3 RUNIC LETTER YR
%    \begin{macrocode}
      { \x{16A3} } { \cL\x{4B} }
%    \end{macrocode}
% U+16E1 RUNIC LETTER IOR
%    \begin{macrocode}
      { \x{16E1} } { \cL\x{4C} }
%    \end{macrocode}
% U+16E0 RUNIC LETTER EAR
%    \begin{macrocode}
      { \x{16E0} } { \cL\x{4D} }
%    \end{macrocode}
%The remainder are in Unicode order, except for the punctuation.
%Some of these may need to be merged into the above, as applicable.
%
% U+16A1 RUNIC LETTER V
%    \begin{macrocode}
      { \x{16A1} } { \cL\x{4E} }
%    \end{macrocode}
% U+16A4 RUNIC LETTER Y
%    \begin{macrocode}
      { \x{16A4} } { \cL\x{4F} }
%    \end{macrocode}
% U+16A5 RUNIC LETTER W
%    \begin{macrocode}
      { \x{16A5} } { \cL\x{50} }
%    \end{macrocode}
% U+16A7 RUNIC LETTER ETH
%    \begin{macrocode}
      { \x{16A7} } { \cL\x{51} }
%    \end{macrocode}
% U+16A8 RUNIC LETTER ANSUZ A
%    \begin{macrocode}
      { \x{16A8} } { \cL\x{52} }
%    \end{macrocode}
% U+16AC RUNIC LETTER LONG-BRANCH-OSS O
%    \begin{macrocode}
      { \x{16AC} } { \cL\x{53} }
%    \end{macrocode}
% U+16AD RUNIC LETTER SHORT-TWIG-OSS O
%    \begin{macrocode}
      { \x{16AD} } { \cL\x{54} }
%    \end{macrocode}
% U+16AE RUNIC LETTER O
%    \begin{macrocode}
      { \x{16AE} } { \cL\x{55} }
%    \end{macrocode}
% U+16AF RUNIC LETTER OE
%    \begin{macrocode}
      { \x{16AF} } { \cL\x{56} }
%    \end{macrocode}
% U+16B0 RUNIC LETTER ON
%    \begin{macrocode}
      { \x{16B0} } { \cL\x{57} }
%    \end{macrocode}
% U+16B2 RUNIC LETTER KAUNA
%    \begin{macrocode}
      { \x{16B2} } { \cL\x{58} }
%    \end{macrocode}
% U+16B4 RUNIC LETTER KAUN K
%    \begin{macrocode}
      { \x{16B4} } { \cL\x{59} }
%    \end{macrocode}
% U+16B5 RUNIC LETTER G
%    \begin{macrocode}
      { \x{16B5} } { \cL\x{5A} }
%    \end{macrocode}
% U+16B6 RUNIC LETTER ENG
%    \begin{macrocode}
      { \x{16B6} } { \cL\x{5B} }
%    \end{macrocode}
% U+16B8 RUNIC LETTER GAR
%    \begin{macrocode}
      { \x{16B8} } { \cL\x{5C} }
%    \end{macrocode}
% U+16BA RUNIC LETTER HAGLAZ H
%    \begin{macrocode}
      { \x{16BA} } { \cL\x{5D} }
%    \end{macrocode}
% U+16BC RUNIC LETTER LONG-BRANCH-HAGALL H
%    \begin{macrocode}
      { \x{16BC} } { \cL\x{5E} }
%    \end{macrocode}
% U+16BD RUNIC LETTER SHORT-TWIG-HAGALL H
%    \begin{macrocode}
      { \x{16BD} } { \cL\x{5F} }
%    \end{macrocode}
% U+16BF RUNIC LETTER SHORT-TWIG-NAUD N
%    \begin{macrocode}
      { \x{16BF} } { \cL\x{60} }
%    \end{macrocode}
% U+16C0 RUNIC LETTER DOTTED-N
%    \begin{macrocode}
      { \x{16C0} } { \cL\x{61} }
%    \end{macrocode}
% U+16C2 RUNIC LETTER E
%    \begin{macrocode}
      { \x{16C2} } { \cL\x{62} }
%    \end{macrocode}
% U+16C3 RUNIC LETTER JERAN J
%    \begin{macrocode}
      { \x{16C3} } { \cL\x{63} }
%    \end{macrocode}
% U+16C5 RUNIC LETTER LONG-BRANCH-AR AE
%    \begin{macrocode}
      { \x{16C5} } { \cL\x{64} }
%    \end{macrocode}
% U+16C6 RUNIC LETTER SHORT-TWIG-AR A
%    \begin{macrocode}
      { \x{16C6} } { \cL\x{65} }
%    \end{macrocode}
% U+16CA RUNIC LETTER SOWILO S
%    \begin{macrocode}
      { \x{16CA} } { \cL\x{66} }
%    \end{macrocode}
% U+16CC RUNIC LETTER SHORT-TWIG-SOL S
%    \begin{macrocode}
      { \x{16CC} } { \cL\x{67} }
%    \end{macrocode}
% U+16CD RUNIC LETTER C
%    \begin{macrocode}
      { \x{16CD} } { \cL\x{68} }
%    \end{macrocode}
% U+16CE RUNIC LETTER Z
%    \begin{macrocode}
      { \x{16CE} } { \cL\x{69} }
%    \end{macrocode}
% U+16D0 RUNIC LETTER SHORT-TWIG-TYR T
%    \begin{macrocode}
      { \x{16D0} } { \cL\x{6A} }
%    \end{macrocode}
% U+16D1 RUNIC LETTER D
%    \begin{macrocode}
      { \x{16D1} } { \cL\x{6B} }
%    \end{macrocode}
% U+16D3 RUNIC LETTER SHORT-TWIG-BJARKAN B
%    \begin{macrocode}
      { \x{16D3} } { \cL\x{6C} }
%    \end{macrocode}
% U+16D4 RUNIC LETTER DOTTED-P
%    \begin{macrocode}
      { \x{16D4} } { \cL\x{6D} }
%    \end{macrocode}
% U+16D5 RUNIC LETTER OPEN-P
%    \begin{macrocode}
      { \x{16D5} } { \cL\x{6E} }
%    \end{macrocode}
% U+16D8 RUNIC LETTER LONG-BRANCH-MADR M
%    \begin{macrocode}
      { \x{16D8} } { \cL\x{6F} }
%    \end{macrocode}
% U+16D9 RUNIC LETTER SHORT-TWIG-MADR M
%    \begin{macrocode}
      { \x{16D9} } { \cL\x{70} }
%    \end{macrocode}
% U+16DB RUNIC LETTER DOTTED-L
%    \begin{macrocode}
      { \x{16DB} } { \cL\x{71} }
%    \end{macrocode}
% U+16DC RUNIC LETTER INGWAZ
%    \begin{macrocode}
      { \x{16DC} } { \cL\x{72} }
%    \end{macrocode}
% U+16E2 RUNIC LETTER CWEORTH
%    \begin{macrocode}
      { \x{16E2} } { \cL\x{73} }
%    \end{macrocode}
% U+16E3 RUNIC LETTER CALC
%    \begin{macrocode}
      { \x{16E3} } { \cL\x{74} }
%    \end{macrocode}
% U+16E4 RUNIC LETTER CEALC
%    \begin{macrocode}
      { \x{16E4} } { \cL\x{75} }
%    \end{macrocode}
% U+16E5 RUNIC LETTER STAN
%    \begin{macrocode}
      { \x{16E5} } { \cL\x{76} }
%    \end{macrocode}
% U+16E6 RUNIC LETTER LONG-BRANCH-YR
%    \begin{macrocode}
      { \x{16E6} } { \cL\x{77} }
%    \end{macrocode}
% U+16E7 RUNIC LETTER SHORT-TWIG-YR
%    \begin{macrocode}
      { \x{16E7} } { \cL\x{78} }
%    \end{macrocode}
% U+16E8 RUNIC LETTER ICELANDIC-YR
%    \begin{macrocode}
      { \x{16E8} } { \cL\x{79} }
%    \end{macrocode}
% U+16E9 RUNIC LETTER Q
%    \begin{macrocode}
      { \x{16E9} } { \cL\x{7A} }
%    \end{macrocode}
% U+16EA RUNIC LETTER X
%    \begin{macrocode}
      { \x{16EA} } { \cL\x{7B} }
%    \end{macrocode}
% U+16EE RUNIC ARLAUG SYMBOL
%    \begin{macrocode}
      { \x{16EE} } { \cL\x{7C} \cO\! }
%    \end{macrocode}
% U+16EF RUNIC TVIMADUR SYMBOL
%    \begin{macrocode}
      { \x{16EF} } { \cL\x{7C} \cO\" }
%    \end{macrocode}
% U+16F0 RUNIC BELGTHOR SYMBOL
%    \begin{macrocode}
      { \x{16F0} } { \cL\x{7D} \cO\# }
%    \end{macrocode}
% U+16F1 RUNIC LETTER K
%    \begin{macrocode}
      { \x{16F1} } { \cL\x{7D} \cO\$ }
%    \end{macrocode}
% U+16F2 RUNIC LETTER SH
%    \begin{macrocode}
      { \x{16F2} } { \cL\x{7D} \cO\% }
%    \end{macrocode}
% U+16F3 RUNIC LETTER OO
%    \begin{macrocode}
      { \x{16F3} } { \cL\x{7D} \cO\& }
%    \end{macrocode}
% U+16F4 RUNIC LETTER FRANKS CASKET OS
%    \begin{macrocode}
      { \x{16F4} } { \cL\x{7D} \cO\' }
%    \end{macrocode}
% U+16F5 RUNIC LETTER FRANKS CASKET IS
%    \begin{macrocode}
      { \x{16F5} } { \cL\x{7D} \cO\( }
%    \end{macrocode}
% U+16F6 RUNIC LETTER FRANKS CASKET EH
%    \begin{macrocode}
      { \x{16F6} } { \cL\x{7D} \cO\) }
%    \end{macrocode}
% U+16F7 RUNIC LETTER FRANKS CASKET AC
%    \begin{macrocode}
      { \x{16F7} } { \cL\x{7D} \cO\* }
%    \end{macrocode}
% U+16F8 RUNIC LETTER FRANKS CASKET AESC
%    \begin{macrocode}
      { \x{16F8} } { \cL\x{7D} \cO\+ }
%    \end{macrocode}
% Tironian et
%    \begin{macrocode}
      { \x{204A} } { \cL\x{7D} \cO\, }
%    \end{macrocode}
% U+16EB RUNIC SINGLE PUNCTUATION
%    \begin{macrocode}
      { \x{16EB} } { \cO\x{7E} \cO\! }
%    \end{macrocode}
% U+16EC RUNIC MULTIPLE PUNCTUATION
%    \begin{macrocode}
      { \x{16EC} } { \cO\x{7E} \cO\" }
%    \end{macrocode}
% U+16ED RUNIC CROSS PUNCTUATION
%    \begin{macrocode}
      { \x{16ED} } { \cO\x{7E} \cO\# }
%    \end{macrocode}
%Any character in the punctuation class that has category other:
%Version 1.1 added category code check.
%    \begin{macrocode}
      { \cO([[:punct:]]) } { \cO\x{7E} \cO\$ \1 }
    }
    #1
   }
 }
 {
%    \end{macrocode}
%Unicode order (mostly Unicode order).
%The punctuation characters are placed first, the rest follows
%Unicode order.
%    \begin{macrocode}
  \cs_new:Nn \datatool_angRunr_order_punc_unicode:n
   {
    \regex_replace_case_all:nN
    {
%    \end{macrocode}
% U+16A0 RUNIC LETTER FEHU FEOH FE F
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{A0} }
        { \cL\x{31} }
%    \end{macrocode}
% U+16A1 RUNIC LETTER V
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{A1} }
        { \cL\x{32} }
%    \end{macrocode}
% U+16A2 RUNIC LETTER URUZ UR U
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{A2} }
        { \cL\x{33} }
%    \end{macrocode}
% U+16A3 RUNIC LETTER YR
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{A3} }
        { \cL\x{34} }
%    \end{macrocode}
% U+16A4 RUNIC LETTER Y
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{A4} }
        { \cL\x{35} }
%    \end{macrocode}
% U+16A5 RUNIC LETTER W
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{A5} }
        { \cL\x{36} }
%    \end{macrocode}
% U+16A6 RUNIC LETTER THURISAZ THURS THORN
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{A6} }
        { \cL\x{37} }
%    \end{macrocode}
% U+16A7 RUNIC LETTER ETH
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{A7} }
        { \cL\x{38} }
%    \end{macrocode}
% U+16A8 RUNIC LETTER ANSUZ A
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{A8} }
        { \cL\x{39} }
%    \end{macrocode}
% U+16A9 RUNIC LETTER OS O
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{A9} }
        { \cL\: }
%    \end{macrocode}
% U+16AA RUNIC LETTER AC A
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{AA} }
        { \cL\; }
%    \end{macrocode}
% U+16AB RUNIC LETTER AESC
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{AB} }
        { \cL\< }
%    \end{macrocode}
% U+16AC RUNIC LETTER LONG-BRANCH-OSS O
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{AC} }
        { \cL\= }
%    \end{macrocode}
% U+16AD RUNIC LETTER SHORT-TWIG-OSS O
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{AD} }
        { \cL\> }
%    \end{macrocode}
% U+16AE RUNIC LETTER O
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{AE} }
        { \cL\? }
%    \end{macrocode}
% U+16AF RUNIC LETTER OE
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{AF} }
        { \cL\@ }
%    \end{macrocode}
% U+16B0 RUNIC LETTER ON
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{B0} }
        { \cL\x{41} }
%    \end{macrocode}
% U+16B1 RUNIC LETTER RAIDO RAD REID R
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{B1} }
        { \cL\x{42} }
%    \end{macrocode}
% U+16B2 RUNIC LETTER KAUNA
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{B2} }
       { \cL\x{43} }
%    \end{macrocode}
% U+16B3 RUNIC LETTER CEN
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{B3} }
       { \cL\x{44} }
%    \end{macrocode}
% U+16B4 RUNIC LETTER KAUN K
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{B4} }
       { \cL\x{45} }
%    \end{macrocode}
% U+16B5 RUNIC LETTER G
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{B5} }
       { \cL\x{46} }
%    \end{macrocode}
% U+16B6 RUNIC LETTER ENG
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{B6} }
       { \cL\x{47} }
%    \end{macrocode}
% U+16B7 RUNIC LETTER GEBO GYFU G
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{B7} }
       { \cL\x{48} }
%    \end{macrocode}
% U+16B8 RUNIC LETTER GAR
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{B8} }
       { \cL\x{49} }
%    \end{macrocode}
% U+16B9 RUNIC LETTER WUNJO WYNN W
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{B9} }
       { \cL\x{4A} }
%    \end{macrocode}
% U+16BA RUNIC LETTER HAGLAZ H
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{BA} }
       { \cL\x{4B} }
%    \end{macrocode}
% U+16BB RUNIC LETTER HAEGL H
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{BB} }
       { \cL\x{4C} }
%    \end{macrocode}
% U+16BC RUNIC LETTER LONG-BRANCH-HAGALL H
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{BC} }
       { \cL\x{4D} }
%    \end{macrocode}
% U+16BD RUNIC LETTER SHORT-TWIG-HAGALL H
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{BD} }
       { \cL\x{4E} }
%    \end{macrocode}
% U+16BE RUNIC LETTER NAUDIZ NYD NAUD N
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{BE} }
       { \cL\x{4F} }
%    \end{macrocode}
% U+16BF RUNIC LETTER SHORT-TWIG-NAUD N
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{BF} }
       { \cL\x{50} }
%    \end{macrocode}
% U+16C0 RUNIC LETTER DOTTED-N
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{80} }
       { \cL\x{51} }
%    \end{macrocode}
% U+16C1 RUNIC LETTER ISAZ IS ISS I
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{81} }
       { \cL\x{52} }
%    \end{macrocode}
% U+16C2 RUNIC LETTER E
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{82} }
       { \cL\x{53} }
%    \end{macrocode}
% U+16C3 RUNIC LETTER JERAN J
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{83} }
       { \cL\x{54} }
%    \end{macrocode}
% U+16C4 RUNIC LETTER GER
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{84} }
       { \cL\x{55} }
%    \end{macrocode}
% U+16C5 RUNIC LETTER LONG-BRANCH-AR AE
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{85} }
       { \cL\x{56} }
%    \end{macrocode}
% U+16C6 RUNIC LETTER SHORT-TWIG-AR A
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{86} }
       { \cL\x{57} }
%    \end{macrocode}
% U+16C7 RUNIC LETTER IWAZ EOH
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{87} }
       { \cL\x{58} }
%    \end{macrocode}
% U+16C8 RUNIC LETTER PERTHO PEORTH P
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{88} }
       { \cL\x{59} }
%    \end{macrocode}
% U+16C9 RUNIC LETTER ALGIZ EOLHX
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{89} }
       { \cL\x{5A} }
%    \end{macrocode}
% U+16CA RUNIC LETTER SOWILO S
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{8A} }
       { \cL\[ }
%    \end{macrocode}
% U+16CB RUNIC LETTER SIGEL LONG-BRANCH-SOL S
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{8B} }
       { \cL\\ }
%    \end{macrocode}
% U+16CC RUNIC LETTER SHORT-TWIG-SOL S
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{8C} }
       { \cL\] }
%    \end{macrocode}
% U+16CD RUNIC LETTER C
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{8D} }
       { \cL\^ }
%    \end{macrocode}
% U+16CE RUNIC LETTER Z
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{8E} }
       { \cL\_ }
%    \end{macrocode}
% U+16CF RUNIC LETTER TIWAZ TIR TYR T
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{8F} }
       { \cL\` }
%    \end{macrocode}
% U+16D0 RUNIC LETTER SHORT-TWIG-TYR T
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{90} }
       { \cL\x{61} }
%    \end{macrocode}
% U+16D1 RUNIC LETTER D
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{91} }
       { \cL\x{62} }
%    \end{macrocode}
% U+16D2 RUNIC LETTER BERKANAN BEORC BJARKAN B
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{92} }
       { \cL\x{63} }
%    \end{macrocode}
% U+16D3 RUNIC LETTER SHORT-TWIG-BJARKAN B
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{93} }
       { \cL\x{64} }
%    \end{macrocode}
% U+16D4 RUNIC LETTER DOTTED-P
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{94} }
       { \cL\x{65} }
%    \end{macrocode}
% U+16D5 RUNIC LETTER OPEN-P
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{95} }
       { \cL\x{66} }
%    \end{macrocode}
% U+16D6 RUNIC LETTER EHWAZ EH E
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{96} }
       { \cL\x{67} }
%    \end{macrocode}
% U+16D7 RUNIC LETTER MANNAZ MAN M
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{97} }
       { \cL\x{68} }
%    \end{macrocode}
% U+16D8 RUNIC LETTER LONG-BRANCH-MADR M
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{98} }
       { \cL\x{69} }
%    \end{macrocode}
% U+16D9 RUNIC LETTER SHORT-TWIG-MADR M
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{99} }
       { \cL\x{6A} }
%    \end{macrocode}
% U+16DA RUNIC LETTER LAUKAZ LAGU LOGR L
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{9A} }
       { \cL\x{6B} }
%    \end{macrocode}
% U+16DB RUNIC LETTER DOTTED-L
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{9B} }
       { \cL\x{6C} }
%    \end{macrocode}
% U+16DC RUNIC LETTER INGWAZ
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{9C} }
       { \cL\x{6D} }
%    \end{macrocode}
% U+16DD RUNIC LETTER ING
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{9D} }
       { \cL\x{6F} }
%    \end{macrocode}
% U+16DE RUNIC LETTER DAGAZ DAEG D
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{9E} }
       { \cL\x{70} }
%    \end{macrocode}
% U+16DF RUNIC LETTER OTHALAN ETHEL O
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{9F} }
       { \cL\x{71} }
%    \end{macrocode}
% U+16E0 RUNIC LETTER EAR
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{A0} }
       { \cL\x{72} }
%    \end{macrocode}
% U+16E1 RUNIC LETTER IOR
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{A1} }
       { \cL\x{73} }
%    \end{macrocode}
% U+16E2 RUNIC LETTER CWEORTH
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{A2} }
       { \cL\x{74} }
%    \end{macrocode}
% U+16E3 RUNIC LETTER CALC
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{A3} }
       { \cL\x{75} }
%    \end{macrocode}
% U+16E4 RUNIC LETTER CEALC
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{A4} }
       { \cL\x{76} }
%    \end{macrocode}
% U+16E5 RUNIC LETTER STAN
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{A5} }
       { \cL\x{77} }
%    \end{macrocode}
% U+16E6 RUNIC LETTER LONG-BRANCH-YR
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{A6} }
       { \cL\x{78} }
%    \end{macrocode}
% U+16E7 RUNIC LETTER SHORT-TWIG-YR
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{A7} }
       { \cL\x{79} }
%    \end{macrocode}
% U+16E8 RUNIC LETTER ICELANDIC-YR
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{A8} }
       { \cL\x{7A} }
%    \end{macrocode}
% U+16E9 RUNIC LETTER Q
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{A9} }
       { \cL\{ }
%    \end{macrocode}
% U+16EA RUNIC LETTER X
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{AA} }
       { \cL\| }
%    \end{macrocode}
% U+16EE RUNIC ARLAUG SYMBOL
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{AE} }
       { \cL\} \cO\! }
%    \end{macrocode}
% U+16EF RUNIC TVIMADUR SYMBOL
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{AF} }
       { \cL\} \cO\" }
%    \end{macrocode}
% U+16F0 RUNIC BELGTHOR SYMBOL
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{B0} }
       { \cL\} \cO\# }
%    \end{macrocode}
% U+16F1 RUNIC LETTER K
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{B1} }
       { \cL\} \cO\$ }
%    \end{macrocode}
% U+16F2 RUNIC LETTER SH
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{B2} }
       { \cL\} \cO\% }
%    \end{macrocode}
% U+16F3 RUNIC LETTER OO
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{B3} }
       { \cL\} \cO\& }
%    \end{macrocode}
% U+16F4 RUNIC LETTER FRANKS CASKET OS
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{B4} }
       { \cL\} \cO\' }
%    \end{macrocode}
% U+16F5 RUNIC LETTER FRANKS CASKET IS
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{B5} }
       { \cL\} \cO\( }
%    \end{macrocode}
% U+16F6 RUNIC LETTER FRANKS CASKET EH
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{B6} }
       { \cL\} \cO\) }
%    \end{macrocode}
% U+16F7 RUNIC LETTER FRANKS CASKET AC
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{B7} }
       { \cL\} \cO\* }
%    \end{macrocode}
% U+16F8 RUNIC LETTER FRANKS CASKET AESC
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{B8} }
       { \cL\} \cO\+ }
%    \end{macrocode}
% U+16EB RUNIC SINGLE PUNCTUATION
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{AB} }
       { \cO\! \cO\! }
%    \end{macrocode}
% U+16EC RUNIC MULTIPLE PUNCTUATION
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{AC} }
       { \cO\! \cO\" }
%    \end{macrocode}
% U+16ED RUNIC CROSS PUNCTUATION
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{AD} }
       { \cO\! \cO\# }
%    \end{macrocode}
% Tironian et
%    \begin{macrocode}
      { \x{E2} \x{81} \x{8A} }
        { \cL\~ }
%    \end{macrocode}
%Any character in the punctuation class that has category other:
%Version 1.1 added category code check.
%    \begin{macrocode}
      { \cO([[:punct:]]) } { \cO\! \cO\$ \1 }
    }
    #1
   }
%    \end{macrocode}
%Old English Rune Poem order (fuþorc). Not all characters are included in the
%poem, so they are appended at the end. Punctuation characters come
%first.
%    \begin{macrocode}
  \cs_new:Nn \datatool_angRunr_order_punc_futhorc:n
   {
    \regex_replace_case_all:nN
    {
%    \end{macrocode}
% U+16A0 RUNIC LETTER FEHU FEOH FE F
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{A0} }
        { \cL\x{31} }
%    \end{macrocode}
% U+16A2 RUNIC LETTER URUZ UR U
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{A2} }
        { \cL\x{32} }
%    \end{macrocode}
% U+16A6 RUNIC LETTER THURISAZ THURS THORN
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{A6} }
        { \cL\x{33} }
%    \end{macrocode}
% U+16A9 RUNIC LETTER OS O
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{A9} }
        { \cL\x{34} }
%    \end{macrocode}
% U+16B1 RUNIC LETTER RAIDO RAD REID R
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{B1} }
        { \cL\x{35} }
%    \end{macrocode}
% U+16B3 RUNIC LETTER CEN
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{B3} }
       { \cL\x{36} }
%    \end{macrocode}
% U+16B7 RUNIC LETTER GEBO GYFU G
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{B7} }
       { \cL\x{37} }
%    \end{macrocode}
% U+16B9 RUNIC LETTER WUNJO WYNN W
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{B9} }
       { \cL\x{38} }
%    \end{macrocode}
% U+16BB RUNIC LETTER HAEGL H
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{BB} }
       { \cL\x{39} }
%    \end{macrocode}
% U+16BE RUNIC LETTER NAUDIZ NYD NAUD N
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{BE} }
       { \cL\: }
%    \end{macrocode}
% U+16C1 RUNIC LETTER ISAZ IS ISS I
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{81} }
       { \cL\; }
%    \end{macrocode}
% U+16C4 RUNIC LETTER GER
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{84} }
       { \cL\< }
%    \end{macrocode}
% U+16C7 RUNIC LETTER IWAZ EOH
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{87} }
       { \cL\= }
%    \end{macrocode}
% U+16C8 RUNIC LETTER PERTHO PEORTH P
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{88} }
       { \cL\> }
%    \end{macrocode}
% U+16C9 RUNIC LETTER ALGIZ EOLHX
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{89} }
       { \cL\? }
%    \end{macrocode}
% U+16CB RUNIC LETTER SIGEL LONG-BRANCH-SOL S
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{8B} }
       { \cL\@ }
%    \end{macrocode}
% U+16CF RUNIC LETTER TIWAZ TIR TYR T
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{8F} }
       { \cL\x{41} }
%    \end{macrocode}
% U+16D2 RUNIC LETTER BERKANAN BEORC BJARKAN B
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{92} }
       { \cL\x{42} }
%    \end{macrocode}
% U+16D6 RUNIC LETTER EHWAZ EH E
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{96} }
       { \cL\x{43} }
%    \end{macrocode}
% U+16D7 RUNIC LETTER MANNAZ MAN M
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{97} }
       { \cL\x{44} }
%    \end{macrocode}
% U+16DA RUNIC LETTER LAUKAZ LAGU LOGR L
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{9A} }
       { \cL\x{45} }
%    \end{macrocode}
% U+16DD RUNIC LETTER ING
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{9D} }
       { \cL\x{46} }
%    \end{macrocode}
% U+16DF RUNIC LETTER OTHALAN ETHEL O
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{9F} }
       { \cL\x{47} }
%    \end{macrocode}
% U+16DE RUNIC LETTER DAGAZ DAEG D
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{9E} }
       { \cL\x{48} }
%    \end{macrocode}
% U+16AA RUNIC LETTER AC A
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{AA} }
        { \cL\x{49} }
%    \end{macrocode}
% U+16AB RUNIC LETTER AESC
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{AB} }
        { \cL\x{4A} }
%    \end{macrocode}
% U+16A3 RUNIC LETTER YR
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{A3} }
        { \cL\x{4B} }
%    \end{macrocode}
% U+16E1 RUNIC LETTER IOR
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{A1} }
       { \cL\x{4C} }
%    \end{macrocode}
% U+16E0 RUNIC LETTER EAR
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{A0} }
       { \cL\x{4D} }
%    \end{macrocode}
%The remainder are in Unicode order, except for the punctuation.
%Some of these may need to be merged into the above, as applicable.
%
% U+16A1 RUNIC LETTER V
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{A1} }
        { \cL\x{4E} }
%    \end{macrocode}
% U+16A4 RUNIC LETTER Y
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{A4} }
        { \cL\x{4F} }
%    \end{macrocode}
% U+16A5 RUNIC LETTER W
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{A5} }
        { \cL\x{50} }
%    \end{macrocode}
% U+16A7 RUNIC LETTER ETH
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{A7} }
        { \cL\x{51} }
%    \end{macrocode}
% U+16A8 RUNIC LETTER ANSUZ A
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{A8} }
        { \cL\x{52} }
%    \end{macrocode}
% U+16AC RUNIC LETTER LONG-BRANCH-OSS O
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{AC} }
        { \cL\x{53} }
%    \end{macrocode}
% U+16AD RUNIC LETTER SHORT-TWIG-OSS O
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{AD} }
        { \cL\x{54} }
%    \end{macrocode}
% U+16AE RUNIC LETTER O
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{AE} }
        { \cL\x{55} }
%    \end{macrocode}
% U+16AF RUNIC LETTER OE
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{AF} }
        { \cL\x{56} }
%    \end{macrocode}
% U+16B0 RUNIC LETTER ON
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{B0} }
        { \cL\x{57} }
%    \end{macrocode}
% U+16B2 RUNIC LETTER KAUNA
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{B2} }
       { \cL\x{58} }
%    \end{macrocode}
% U+16B4 RUNIC LETTER KAUN K
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{B4} }
       { \cL\x{59} }
%    \end{macrocode}
% U+16B5 RUNIC LETTER G
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{B5} }
       { \cL\x{5A} }
%    \end{macrocode}
% U+16B6 RUNIC LETTER ENG
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{B6} }
       { \cL\[ }
%    \end{macrocode}
% U+16B8 RUNIC LETTER GAR
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{B8} }
       { \cL\\ }
%    \end{macrocode}
% U+16BA RUNIC LETTER HAGLAZ H
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{BA} }
       { \cL\] }
%    \end{macrocode}
% U+16BC RUNIC LETTER LONG-BRANCH-HAGALL H
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{BC} }
       { \cL\^ }
%    \end{macrocode}
% U+16BD RUNIC LETTER SHORT-TWIG-HAGALL H
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{BD} }
       { \cL\_ }
%    \end{macrocode}
% U+16BF RUNIC LETTER SHORT-TWIG-NAUD N
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{BF} }
       { \cL\` }
%    \end{macrocode}
% U+16C0 RUNIC LETTER DOTTED-N
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{80} }
       { \cL\x{61} }
%    \end{macrocode}
% U+16C2 RUNIC LETTER E
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{82} }
       { \cL\x{62} }
%    \end{macrocode}
% U+16C3 RUNIC LETTER JERAN J
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{83} }
       { \cL\x{63} }
%    \end{macrocode}
% U+16C5 RUNIC LETTER LONG-BRANCH-AR AE
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{85} }
       { \cL\x{64} }
%    \end{macrocode}
% U+16C6 RUNIC LETTER SHORT-TWIG-AR A
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{86} }
       { \cL\x{65} }
%    \end{macrocode}
% U+16CA RUNIC LETTER SOWILO S
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{8A} }
       { \cL\x{66} }
%    \end{macrocode}
% U+16CC RUNIC LETTER SHORT-TWIG-SOL S
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{8C} }
       { \cL\x{67} }
%    \end{macrocode}
% U+16CD RUNIC LETTER C
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{8D} }
       { \cL\x{68} }
%    \end{macrocode}
% U+16CE RUNIC LETTER Z
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{8E} }
       { \cL\x{69} }
%    \end{macrocode}
% U+16D0 RUNIC LETTER SHORT-TWIG-TYR T
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{90} }
       { \cL\x{6A} }
%    \end{macrocode}
% U+16D1 RUNIC LETTER D
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{91} }
       { \cL\x{6B} }
%    \end{macrocode}
% U+16D3 RUNIC LETTER SHORT-TWIG-BJARKAN B
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{93} }
       { \cL\x{6C} }
%    \end{macrocode}
% U+16D4 RUNIC LETTER DOTTED-P
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{94} }
       { \cL\x{6D} }
%    \end{macrocode}
% U+16D5 RUNIC LETTER OPEN-P
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{95} }
       { \cL\x{6E} }
%    \end{macrocode}
% U+16D8 RUNIC LETTER LONG-BRANCH-MADR M
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{98} }
       { \cL\x{6F} }
%    \end{macrocode}
% U+16D9 RUNIC LETTER SHORT-TWIG-MADR M
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{99} }
       { \cL\x{70} }
%    \end{macrocode}
% U+16DB RUNIC LETTER DOTTED-L
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{9B} }
       { \cL\x{71} }
%    \end{macrocode}
% U+16DC RUNIC LETTER INGWAZ
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{9C} }
       { \cL\x{72} }
%    \end{macrocode}
% U+16E2 RUNIC LETTER CWEORTH
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{A2} }
       { \cL\x{73} }
%    \end{macrocode}
% U+16E3 RUNIC LETTER CALC
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{A3} }
       { \cL\x{74} }
%    \end{macrocode}
% U+16E4 RUNIC LETTER CEALC
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{A4} }
       { \cL\x{75} }
%    \end{macrocode}
% U+16E5 RUNIC LETTER STAN
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{A5} }
       { \cL\x{76} }
%    \end{macrocode}
% U+16E6 RUNIC LETTER LONG-BRANCH-YR
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{A6} }
       { \cL\x{77} }
%    \end{macrocode}
% U+16E7 RUNIC LETTER SHORT-TWIG-YR
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{A7} }
       { \cL\x{78} }
%    \end{macrocode}
% U+16E8 RUNIC LETTER ICELANDIC-YR
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{A8} }
       { \cL\x{79} }
%    \end{macrocode}
% U+16E9 RUNIC LETTER Q
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{A9} }
       { \cL\x{7A} }
%    \end{macrocode}
% U+16EA RUNIC LETTER X
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{AA} }
       { \cL\{ }
%    \end{macrocode}
% U+16EE RUNIC ARLAUG SYMBOL
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{AE} }
       { \cL\| \cO\! }
%    \end{macrocode}
% U+16EF RUNIC TVIMADUR SYMBOL
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{AF} }
       { \cL\} \cO\" }
%    \end{macrocode}
% U+16F0 RUNIC BELGTHOR SYMBOL
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{B0} }
       { \cL\} \cO\# }
%    \end{macrocode}
% U+16F1 RUNIC LETTER K
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{B1} }
       { \cL\} \cO\$ }
%    \end{macrocode}
% U+16F2 RUNIC LETTER SH
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{B2} }
       { \cL\} \cO\% }
%    \end{macrocode}
% U+16F3 RUNIC LETTER OO
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{B3} }
       { \cL\} \cO\& }
%    \end{macrocode}
% U+16F4 RUNIC LETTER FRANKS CASKET OS
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{B4} }
       { \cL\} \cO\' }
%    \end{macrocode}
% U+16F5 RUNIC LETTER FRANKS CASKET IS
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{B5} }
       { \cL\} \cO\( }
%    \end{macrocode}
% U+16F6 RUNIC LETTER FRANKS CASKET EH
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{B6} }
       { \cL\} \cO\) }
%    \end{macrocode}
% U+16F7 RUNIC LETTER FRANKS CASKET AC
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{B7} }
       { \cL\} \cO\* }
%    \end{macrocode}
% U+16F8 RUNIC LETTER FRANKS CASKET AESC
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{B8} }
       { \cL\} \cO\+ }
%    \end{macrocode}
% U+16EB RUNIC SINGLE PUNCTUATION
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{AB} }
       { \cO\! \cO\! }
%    \end{macrocode}
% U+16EC RUNIC MULTIPLE PUNCTUATION
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{AC} }
       { \cO\! \cO\" }
%    \end{macrocode}
% U+16ED RUNIC CROSS PUNCTUATION
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{AD} }
       { \cO\! \cO\# }
%    \end{macrocode}
% Tironian et
%    \begin{macrocode}
      { \x{E2} \x{81} \x{8A} }
        { \cL\~ }
%    \end{macrocode}
%Any character in the punctuation class (unlikely to occur in Runic
%but added for completeness):
%Version 1.1 added category code check.
%    \begin{macrocode}
      { \cO([[:punct:]]) } { \cO\! \cO\$ \1 }
    }
    #1
   }
%    \end{macrocode}
%Old English Rune Poem order (fuþorc, punctuation last). Not all characters are included in the
%poem, so they are appended at the end before the punctuation.
%    \begin{macrocode}
  \cs_new:Nn \datatool_angRunr_order_futhorc_punc:n
   {
    \regex_replace_case_all:nN
    {
%    \end{macrocode}
% U+16A0 RUNIC LETTER FEHU FEOH FE F
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{A0} }
        { \cL\x{31} }
%    \end{macrocode}
% U+16A2 RUNIC LETTER URUZ UR U
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{A2} }
        { \cL\x{32} }
%    \end{macrocode}
% U+16A6 RUNIC LETTER THURISAZ THURS THORN
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{A6} }
        { \cL\x{33} }
%    \end{macrocode}
% U+16A9 RUNIC LETTER OS O
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{A9} }
        { \cL\x{34} }
%    \end{macrocode}
% U+16B1 RUNIC LETTER RAIDO RAD REID R
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{B1} }
        { \cL\x{35} }
%    \end{macrocode}
% U+16B3 RUNIC LETTER CEN
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{B3} }
       { \cL\x{36} }
%    \end{macrocode}
% U+16B7 RUNIC LETTER GEBO GYFU G
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{B7} }
       { \cL\x{37} }
%    \end{macrocode}
% U+16B9 RUNIC LETTER WUNJO WYNN W
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{B9} }
       { \cL\x{38} }
%    \end{macrocode}
% U+16BB RUNIC LETTER HAEGL H
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{BB} }
       { \cL\x{39} }
%    \end{macrocode}
% U+16BE RUNIC LETTER NAUDIZ NYD NAUD N
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{BE} }
       { \cL\: }
%    \end{macrocode}
% U+16C1 RUNIC LETTER ISAZ IS ISS I
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{81} }
       { \cL\; }
%    \end{macrocode}
% U+16C4 RUNIC LETTER GER
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{84} }
       { \cL\< }
%    \end{macrocode}
% U+16C7 RUNIC LETTER IWAZ EOH
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{87} }
       { \cL\= }
%    \end{macrocode}
% U+16C8 RUNIC LETTER PERTHO PEORTH P
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{88} }
       { \cL\> }
%    \end{macrocode}
% U+16C9 RUNIC LETTER ALGIZ EOLHX
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{89} }
       { \cL\? }
%    \end{macrocode}
% U+16CB RUNIC LETTER SIGEL LONG-BRANCH-SOL S
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{8B} }
       { \cL\@ }
%    \end{macrocode}
% U+16CF RUNIC LETTER TIWAZ TIR TYR T
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{8F} }
       { \cL\x{41} }
%    \end{macrocode}
% U+16D2 RUNIC LETTER BERKANAN BEORC BJARKAN B
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{92} }
       { \cL\x{42} }
%    \end{macrocode}
% U+16D6 RUNIC LETTER EHWAZ EH E
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{96} }
       { \cL\x{43} }
%    \end{macrocode}
% U+16D7 RUNIC LETTER MANNAZ MAN M
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{97} }
       { \cL\x{44} }
%    \end{macrocode}
% U+16DA RUNIC LETTER LAUKAZ LAGU LOGR L
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{9A} }
       { \cL\x{45} }
%    \end{macrocode}
% U+16DD RUNIC LETTER ING
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{9D} }
       { \cL\x{46} }
%    \end{macrocode}
% U+16DF RUNIC LETTER OTHALAN ETHEL O
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{9F} }
       { \cL\x{47} }
%    \end{macrocode}
% U+16DE RUNIC LETTER DAGAZ DAEG D
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{9E} }
       { \cL\x{48} }
%    \end{macrocode}
% U+16AA RUNIC LETTER AC A
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{AA} }
        { \cL\x{49} }
%    \end{macrocode}
% U+16AB RUNIC LETTER AESC
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{AB} }
        { \cL\x{4A} }
%    \end{macrocode}
% U+16A3 RUNIC LETTER YR
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{A3} }
        { \cL\x{4B} }
%    \end{macrocode}
% U+16E1 RUNIC LETTER IOR
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{A1} }
       { \cL\x{4C} }
%    \end{macrocode}
% U+16E0 RUNIC LETTER EAR
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{A0} }
       { \cL\x{4D} }
%    \end{macrocode}
%The remainder are in Unicode order, except for the punctuation.
%Some of these may need to be merged into the above, as applicable.
%
% U+16A1 RUNIC LETTER V
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{A1} }
        { \cL\x{4E} }
%    \end{macrocode}
% U+16A4 RUNIC LETTER Y
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{A4} }
        { \cL\x{4F} }
%    \end{macrocode}
% U+16A5 RUNIC LETTER W
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{A5} }
        { \cL\x{50} }
%    \end{macrocode}
% U+16A7 RUNIC LETTER ETH
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{A7} }
        { \cL\x{51} }
%    \end{macrocode}
% U+16A8 RUNIC LETTER ANSUZ A
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{A8} }
        { \cL\x{52} }
%    \end{macrocode}
% U+16AC RUNIC LETTER LONG-BRANCH-OSS O
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{AC} }
        { \cL\x{53} }
%    \end{macrocode}
% U+16AD RUNIC LETTER SHORT-TWIG-OSS O
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{AD} }
        { \cL\x{54} }
%    \end{macrocode}
% U+16AE RUNIC LETTER O
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{AE} }
        { \cL\x{55} }
%    \end{macrocode}
% U+16AF RUNIC LETTER OE
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{AF} }
        { \cL\x{56} }
%    \end{macrocode}
% U+16B0 RUNIC LETTER ON
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{B0} }
        { \cL\x{57} }
%    \end{macrocode}
% U+16B2 RUNIC LETTER KAUNA
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{B2} }
       { \cL\x{58} }
%    \end{macrocode}
% U+16B4 RUNIC LETTER KAUN K
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{B4} }
       { \cL\x{59} }
%    \end{macrocode}
% U+16B5 RUNIC LETTER G
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{B5} }
       { \cL\x{5A} }
%    \end{macrocode}
% U+16B6 RUNIC LETTER ENG
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{B6} }
       { \cL\[ }
%    \end{macrocode}
% U+16B8 RUNIC LETTER GAR
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{B8} }
       { \cL\\ }
%    \end{macrocode}
% U+16BA RUNIC LETTER HAGLAZ H
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{BA} }
       { \cL\] }
%    \end{macrocode}
% U+16BC RUNIC LETTER LONG-BRANCH-HAGALL H
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{BC} }
       { \cL\^ }
%    \end{macrocode}
% U+16BD RUNIC LETTER SHORT-TWIG-HAGALL H
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{BD} }
       { \cL\_ }
%    \end{macrocode}
% U+16BF RUNIC LETTER SHORT-TWIG-NAUD N
%    \begin{macrocode}
      { \x{E1} \x{9A} \x{BF} }
       { \cL\` }
%    \end{macrocode}
% U+16C0 RUNIC LETTER DOTTED-N
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{80} }
       { \cL\x{61} }
%    \end{macrocode}
% U+16C2 RUNIC LETTER E
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{82} }
       { \cL\x{62} }
%    \end{macrocode}
% U+16C3 RUNIC LETTER JERAN J
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{83} }
       { \cL\x{63} }
%    \end{macrocode}
% U+16C5 RUNIC LETTER LONG-BRANCH-AR AE
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{85} }
       { \cL\x{64} }
%    \end{macrocode}
% U+16C6 RUNIC LETTER SHORT-TWIG-AR A
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{86} }
       { \cL\x{65} }
%    \end{macrocode}
% U+16CA RUNIC LETTER SOWILO S
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{8A} }
       { \cL\x{66} }
%    \end{macrocode}
% U+16CC RUNIC LETTER SHORT-TWIG-SOL S
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{8C} }
       { \cL\x{67} }
%    \end{macrocode}
% U+16CD RUNIC LETTER C
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{8D} }
       { \cL\x{68} }
%    \end{macrocode}
% U+16CE RUNIC LETTER Z
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{8E} }
       { \cL\x{69} }
%    \end{macrocode}
% U+16D0 RUNIC LETTER SHORT-TWIG-TYR T
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{90} }
       { \cL\x{6A} }
%    \end{macrocode}
% U+16D1 RUNIC LETTER D
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{91} }
       { \cL\x{6B} }
%    \end{macrocode}
% U+16D3 RUNIC LETTER SHORT-TWIG-BJARKAN B
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{93} }
       { \cL\x{6C} }
%    \end{macrocode}
% U+16D4 RUNIC LETTER DOTTED-P
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{94} }
       { \cL\x{6D} }
%    \end{macrocode}
% U+16D5 RUNIC LETTER OPEN-P
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{95} }
       { \cL\x{6E} }
%    \end{macrocode}
% U+16D8 RUNIC LETTER LONG-BRANCH-MADR M
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{98} }
       { \cL\x{6F} }
%    \end{macrocode}
% U+16D9 RUNIC LETTER SHORT-TWIG-MADR M
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{99} }
       { \cL\x{70} }
%    \end{macrocode}
% U+16DB RUNIC LETTER DOTTED-L
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{9B} }
       { \cL\x{71} }
%    \end{macrocode}
% U+16DC RUNIC LETTER INGWAZ
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{9C} }
       { \cL\x{72} }
%    \end{macrocode}
% U+16E2 RUNIC LETTER CWEORTH
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{A2} }
       { \cL\x{73} }
%    \end{macrocode}
% U+16E3 RUNIC LETTER CALC
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{A3} }
       { \cL\x{74} }
%    \end{macrocode}
% U+16E4 RUNIC LETTER CEALC
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{A4} }
       { \cL\x{75} }
%    \end{macrocode}
% U+16E5 RUNIC LETTER STAN
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{A5} }
       { \cL\x{76} }
%    \end{macrocode}
% U+16E6 RUNIC LETTER LONG-BRANCH-YR
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{A6} }
       { \cL\x{77} }
%    \end{macrocode}
% U+16E7 RUNIC LETTER SHORT-TWIG-YR
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{A7} }
       { \cL\x{78} }
%    \end{macrocode}
% U+16E8 RUNIC LETTER ICELANDIC-YR
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{A8} }
       { \cL\x{79} }
%    \end{macrocode}
% U+16E9 RUNIC LETTER Q
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{A9} }
       { \cL\x{7A} }
%    \end{macrocode}
% U+16EA RUNIC LETTER X
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{AA} }
       { \cL\{ }
%    \end{macrocode}
% U+16EE RUNIC ARLAUG SYMBOL
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{AE} }
       { \cL\| \cO\! }
%    \end{macrocode}
% U+16EF RUNIC TVIMADUR SYMBOL
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{AF} }
       { \cL\} \cO\" }
%    \end{macrocode}
% U+16F0 RUNIC BELGTHOR SYMBOL
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{B0} }
       { \cL\} \cO\# }
%    \end{macrocode}
% U+16F1 RUNIC LETTER K
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{B1} }
       { \cL\} \cO\$ }
%    \end{macrocode}
% U+16F2 RUNIC LETTER SH
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{B2} }
       { \cL\} \cO\% }
%    \end{macrocode}
% U+16F3 RUNIC LETTER OO
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{B3} }
       { \cL\} \cO\& }
%    \end{macrocode}
% U+16F4 RUNIC LETTER FRANKS CASKET OS
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{B4} }
       { \cL\} \cO\' }
%    \end{macrocode}
% U+16F5 RUNIC LETTER FRANKS CASKET IS
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{B5} }
       { \cL\} \cO\( }
%    \end{macrocode}
% U+16F6 RUNIC LETTER FRANKS CASKET EH
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{B6} }
       { \cL\} \cO\) }
%    \end{macrocode}
% U+16F7 RUNIC LETTER FRANKS CASKET AC
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{B7} }
       { \cL\} \cO\* }
%    \end{macrocode}
% U+16F8 RUNIC LETTER FRANKS CASKET AESC
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{B8} }
       { \cL\} \cO\+ }
%    \end{macrocode}
% Tironian et
%    \begin{macrocode}
      { \x{E2} \x{81} \x{8A} }
        { \cL\} \cO\, }
%    \end{macrocode}
% U+16EB RUNIC SINGLE PUNCTUATION
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{AB} }
       { \cO\~ \cO\! }
%    \end{macrocode}
% U+16EC RUNIC MULTIPLE PUNCTUATION
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{AC} }
       { \cO\~ \cO\" }
%    \end{macrocode}
% U+16ED RUNIC CROSS PUNCTUATION
%    \begin{macrocode}
      { \x{E1} \x{9B} \x{AD} }
       { \cO\~ \cO\# }
%    \end{macrocode}
%Any character in the punctuation class (unlikely to occur in Runic
%but added for completeness):
%Version 1.1 added category code check.
%    \begin{macrocode}
      { \cO([[:punct:]]) } { \cO\~ \cO\$ \1 }
    }
    #1
   }
 }
%    \end{macrocode}
%
%    \begin{macrocode}
\datatool_locale_define_keys:nn { ang-Runr }
 {
    order .choice:,
    order / punc-unicode .code:n = 
     {
       \renewcommand \DTLangRunrLocaleHandler [1]
        {
          \datatool_angRunr_order_punc_unicode:n { ##1 }
        }
     },
    order / punc-futhorc .code:n = 
     {
       \renewcommand \DTLangRunrLocaleHandler [1]
        {
          \datatool_angRunr_order_punc_futhorc:n { ##1 }
        }
     },
    order / futhorc-punc .code:n = 
     {
       \renewcommand \DTLangRunrLocaleHandler [1]
        {
          \datatool_angRunr_order_futhorc_punc:n { ##1 }
        }
     },
 }
%    \end{macrocode}
%
%
%Translations: only providing \qt{and} (Tironian et)
%    \begin{macrocode}
\newcommand \DTLangRunrTranslations {
  \tl_set:Nn \DTLandname { ⁊ }
}
%    \end{macrocode}
%
%Switch off \LaTeX3 syntax.
%    \begin{macrocode}
\ExplSyntaxOff
%    \end{macrocode}

%\iffalse
%    \begin{macrocode}
%</datatool-ang-Runr-utf8.ldf>
%    \end{macrocode}
%\fi
%\Finale
\endinput
