%\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 \~} % %\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} % %\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} % % \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} % % \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} % % \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} {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} % % \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} % % \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} % % \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} % % \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} % % \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} % % \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} % % \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} % % \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} % % \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} % % \end{macrocode} %\fi %\Finale \endinput