<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">package LaTeX::ToUnicode::Tables;
BEGIN {
  $LaTeX::ToUnicode::Tables::VERSION = '0.55';
}
use strict;
use warnings;
#ABSTRACT: Character tables for LaTeX::ToUnicode

use utf8; # just for the german support

# Technically not all of these are ligatures, but close enough.
# Order is important, so has to be a list, not a hash.
# 
our @LIGATURES = (
    "---" =&gt; '\x{2014}', # em dash
    "--"  =&gt; '\x{2013}', # en dash
    "!`"  =&gt; '\x{00A1}', # inverted exclam
    "?`"  =&gt; '\x{00A1}', # inverted question
    "``"  =&gt; '\x{201c}', # left double
    "''"  =&gt; '\x{201d}', # right double
    "`"   =&gt; '\x{2018}', # left single
    "'"   =&gt; '\x{2019}', # right single
);
# test text: em---dash, en--dash, exc!`am, quest?`ion, ``ld, rd'', `ls, rs'.
#
# Some additional ligatures supported in T1 encoding, but we won't (from
# tex-text.map):
# U+002C U+002C &lt;&gt; U+201E  ; ,, -&gt; DOUBLE LOW-9 QUOTATION MARK
# U+003C U+003C &lt;&gt; U+00AB  ; &lt;&lt; -&gt; LEFT POINTING GUILLEMET
# U+003E U+003E &lt;&gt; U+00BB  ; &gt;&gt; -&gt; RIGHT POINTING GUILLEMET

#  for {\MARKUP(shape) ...} and \textMARKUP{...}; although not all
# command names are defined in LaTeX for all markups, we translate them
# anyway. Also, LaTeX has more font axes not included here: md, ulc, sw,
# ssc, etc. See ltfntcmd.dtx and ltfssaxes.dtx if we ever want to try
# for completeness.
# 
our %MARKUPS = (
    'bf'  =&gt; 'b',
    'cal' =&gt; '',
    'em'  =&gt; 'em',
    'french' =&gt; '',  # polyglossia
    'it'  =&gt; 'i',
    'rm'  =&gt; '',
    'sc'  =&gt; '', # qqq should uppercasify
    'sf'  =&gt; '',
    'sl'  =&gt; 'i',
    'small' =&gt; '',
    'subscript'    =&gt; 'sub',
    'superscript'  =&gt; 'sup',
    'tt'  =&gt; 'tt',
);

# More commands taking arguments that we want to handle.
# 
our %ARGUMENT_COMMANDS = (
    'emph'      =&gt; ['\textem{', '}'], # \textem doesn't exist, but we handle it
    'enquote'   =&gt; ["`",        "'"],
    'natexlab'  =&gt; ["",         ""],  # natbib
    'path'      =&gt; ['\texttt{', '}'], # ugh, might not be a braced argument
);

#  Non-alphabetic \COMMANDs, other than accents and special cases.
# 
our %CONTROL_SYMBOLS = (
    ' '  =&gt; ' ', # control space
    "\t" =&gt; ' ', # control space
    "\n" =&gt; '\x{0020}', # control space; use entity to avoid being trimmed
    '!'  =&gt; '',  # negative thin space
   # " umlaut
    '#'  =&gt; '#', # sharp sign
    '$'  =&gt; '$', # dollar sign
    '%'  =&gt; '%', # percent sign
    '&amp;'  =&gt; '\x{0026}', # ampersand, entity to avoid html conflict
   # ' acute accent
    '('  =&gt; '',  # start inline math
    ')'  =&gt; '',  # end inline math
    '*'  =&gt; '',  # discretionary multiplication
    '+'  =&gt; '',  # tabbing: tab stop to right
    ','  =&gt; '',  # thin space
    '-'  =&gt; '',  # discretionary hyphenation
   # . overdot accent
    '/'  =&gt; '',  # italic correction
   # 0..9 undefined
    ':'  =&gt; '',  # medium space
    ';'  =&gt; ' ', # thick space
    '&lt;'  =&gt; '',  # tabbing: text to left of margin
   # = macron accent
    '&gt;'  =&gt; '',  # tabbing: next tab stop
   # ? undefined
    '@'  =&gt; '#', # end of sentence
   # A..Z control words, not symbols
    '['  =&gt; '',  # start display math
    '\\' =&gt; ' ', # line break
    ']'  =&gt; '',  # end display math
   # ^ circumflex accent
    '_'  =&gt; '_', # underscore
   # ` grave accent
   # a..z control words, not symbols
    '{'  =&gt; '\x{007b}', # lbrace
    '|'  =&gt; '\x{2225}', # parallel
    '}'  =&gt; '\x{007d}', # rbrace
   # ~ tilde accent
);

#  Alphabetic \COMMANDs that map to nothing. This is simply
# interpolated into %CONTROL_WORDS (next), not used directly, so we
# redundantly specify the '' on every line.
# 
our %CONTROL_WORDS_EMPTY = (
    'begingroup'    =&gt; '',
    'bgroup'        =&gt; '',
    'checkcomma'    =&gt; '',
    #'cite'          =&gt; '', # keep \cite undefined since it needs manual work
    'clearpage'     =&gt; '',
    'doi'           =&gt; '',
    'egroup'        =&gt; '',
    'endgroup'      =&gt; '',
    'ensuremath'    =&gt; '',
    'hbox'          =&gt; '',
    'ignorespaces'  =&gt; '',
    'mbox'          =&gt; '',
    'medspace'      =&gt; '',
    'negmedspace'   =&gt; '',
    'negthickspace' =&gt; '',
    'negthinspace'  =&gt; '',
    'newblock'      =&gt; '',
    'newpage'       =&gt; '',
    'noindent'      =&gt; '',
    'nolinkurl'     =&gt; '',
    'oldstylenums'  =&gt; '',
    'pagebreak'     =&gt; '',
    'protect'       =&gt; '',
    'raggedright'   =&gt; '',
    'relax'         =&gt; '',
    'thinspace'     =&gt; '',
    'unskip'        =&gt; '',
    'urlprefix'     =&gt; '',
);

#  Alphabetic commands, that expand to nothing (above) and to
# something (below).
#
our %CONTROL_WORDS = (
    %CONTROL_WORDS_EMPTY,
    'BibLaTeX'       =&gt; 'BibLaTeX',
    'BibTeX'         =&gt; 'BibTeX',
    'LaTeX'          =&gt; 'LaTeX',
    'LuaLaTeX'       =&gt; 'LuaLaTeX',
    'LuaTeX'         =&gt; 'LuaTeX',
    'MF'             =&gt; 'Metafont',
    'MP'             =&gt; 'MetaPost',
    'Omega'          =&gt; '\x{03A9}',
    'TeX'            =&gt; 'TeX',
    'XeLaTeX'        =&gt; 'XeLaTeX',
    'XeTeX'          =&gt; 'XeTeX',
    'bullet'         =&gt; '\x{2022}',
    'dag'            =&gt; '\x{2020}',
    'ddag'           =&gt; '\x{2021}',
    'dots'           =&gt; '\x{2026}',
    'epsilon'        =&gt; '\x{03F5}',
    'hookrightarrow' =&gt; '\x{2194}',
    'ldots'          =&gt; '\x{2026}',
    'log'            =&gt; 'log',
    'omega'          =&gt; '\x{03C9}',
    'par'            =&gt; "\n\n",
    'qquad'          =&gt; ' ', # 2em space
    'quad'           =&gt; ' ', # em space
    'textbackslash'  =&gt; '\x{005C}', # entities so \ in output indicates
                                    # untranslated TeX source
    'textbraceleft'  =&gt; '\x{007B}', # entities so our bare-brace removal
    'textbraceright' =&gt; '\x{007D}', # skips them
    'textgreater'    =&gt; '\x{003E}',
    'textless'       =&gt; '\x{003C}',
    'textquotedbl'   =&gt; '"',
    'thickspace'     =&gt; ' ',
    'varepsilon'     =&gt; '\x{03B5}',
);

#  Control words (not symbols) that generate various non-English
# letters and symbols. Lots more could be added.
# 
our %SYMBOLS = ( # Table 3.2 in Lamport, plus more
    'AA' =&gt; '\x{00C5}', # A with ring
    'aa' =&gt; '\x{00E5}',
    'AE' =&gt; '\x{00C6}', # AE
    'ae' =&gt; '\x{00E6}',
    'DH' =&gt; '\x{00D0}', # ETH
    'dh' =&gt; '\x{00F0}',
    'DJ' =&gt; '\x{0110}', # D with stroke
    'dj' =&gt; '\x{0111}',
    'i'  =&gt; '\x{0131}', # small dotless i
    'L'  =&gt; '\x{0141}', # L with stroke
    'l'  =&gt; '\x{0142}',
    'NG' =&gt; '\x{014A}', # ENG
    'ng' =&gt; '\x{014B}',
    'OE' =&gt; '\x{0152}', # OE
    'oe' =&gt; '\x{0153}',
    'O'  =&gt; '\x{00D8}', # O with stroke
    'o'  =&gt; '\x{00F8}',
    'SS' =&gt; 'SS',       # lately also U+1E9E, but SS seems good enough
    'ss' =&gt; '\x{00DF}',
    'TH' =&gt; '\x{00DE}', # THORN
    'textordfeminine'  =&gt; '\x{00AA}',
    'textordmasculine' =&gt; '\x{00BA}',
    'textregistered'   =&gt; '\x{00AE}',
    'th' =&gt; '\x{00FE}',
    'TM' =&gt; '\x{2122}', # trade mark sign
);

#  Accent commands that are not alphabetic.
# 
our %ACCENT_SYMBOLS = (
  "\"" =&gt; {             # with diaresis
    A =&gt; '\x{00C4}',
    E =&gt; '\x{00CB}',
    H =&gt; '\x{1E26}',
    I =&gt; '\x{00CF}',
    O =&gt; '\x{00D6}',
    U =&gt; '\x{00DC}',
    W =&gt; '\x{1E84}',
    X =&gt; '\x{1E8c}',
    Y =&gt; '\x{0178}',
    "\\I" =&gt; '\x{00CF}',
    "\\i" =&gt; '\x{00EF}',
    a =&gt; '\x{00E4}',
    e =&gt; '\x{00EB}',
    h =&gt; '\x{1E27}',
    i =&gt; '\x{00EF}',
    o =&gt; '\x{00F6}',
    t =&gt; '\x{1E97}',
    u =&gt; '\x{00FC}',
    w =&gt; '\x{1E85}',
    x =&gt; '\x{1E8d}',
    y =&gt; '\x{00FF}',
  },
  "'" =&gt; {              # with acute
    A =&gt; '\x{00C1}',
   AE =&gt; '\x{01FC}',
    C =&gt; '\x{0106}',
    E =&gt; '\x{00C9}',
    G =&gt; '\x{01F4}',
    I =&gt; '\x{00CD}',
    K =&gt; '\x{1E30}',
    L =&gt; '\x{0139}',
    M =&gt; '\x{1E3E}',
    N =&gt; '\x{0143}',
    O =&gt; '\x{00D3}',
    P =&gt; '\x{1E54}',
    R =&gt; '\x{0154}',
    S =&gt; '\x{015A}',
    U =&gt; '\x{00DA}',
    W =&gt; '\x{1E82}',
    Y =&gt; '\x{00DD}',
    Z =&gt; '\x{0179}',
    "\\I" =&gt; '\x{00CD}',
    "\\i" =&gt; '\x{00ED}',
    a =&gt; '\x{00E1}',
   ae =&gt; '\x{01FD}',
    c =&gt; '\x{0107}',
    e =&gt; '\x{00E9}',
    g =&gt; '\x{01F5}',
    i =&gt; '\x{00ED}',
    k =&gt; '\x{1E31}',
    l =&gt; '\x{013A}',
    m =&gt; '\x{1E3f}',
    n =&gt; '\x{0144}',
    o =&gt; '\x{00F3}',
    p =&gt; '\x{1E55}',
    r =&gt; '\x{0155}',
    s =&gt; '\x{015B}',
    u =&gt; '\x{00FA}',
    w =&gt; '\x{1E83}',
    y =&gt; '\x{00FD}',
    z =&gt; '\x{017A}',
  },
  "^" =&gt; {              # with circumflex
    A =&gt; '\x{00C2}',
    C =&gt; '\x{0108}',
    E =&gt; '\x{00CA}',
    G =&gt; '\x{011C}',
    H =&gt; '\x{0124}',
    I =&gt; '\x{00CE}',
    J =&gt; '\x{0134}',
    O =&gt; '\x{00D4}',
    R =&gt; 'R\x{0302}',
    S =&gt; '\x{015C}',
    U =&gt; '\x{00DB}',
    W =&gt; '\x{0174}',
    Y =&gt; '\x{0176}',
    Z =&gt; '\x{1E90}',
    "\\I" =&gt; '\x{00CE}',
    "\\J" =&gt; '\x{0134}',
    "\\i" =&gt; '\x{00EE}',
    "\\j" =&gt; '\x{0135}',
    a =&gt; '\x{00E2}',
    c =&gt; '\x{0109}',
    e =&gt; '\x{00EA}',
    g =&gt; '\x{011D}',
    h =&gt; '\x{0125}',
    i =&gt; '\x{00EE}',
    j =&gt; '\x{0135}',
    o =&gt; '\x{00F4}',
    s =&gt; '\x{015D}',
    u =&gt; '\x{00FB}',
    w =&gt; '\x{0175}',
    y =&gt; '\x{0177}',
    z =&gt; '\x{1E91}',
  },
  "`" =&gt; {              # with grave
    A =&gt; '\x{00C0}',
    E =&gt; '\x{00C8}',
    I =&gt; '\x{00CC}',
    N =&gt; '\x{01F8}',
    O =&gt; '\x{00D2}',
    U =&gt; '\x{00D9}',
    W =&gt; '\x{1E80}',
    Y =&gt; '\x{1Ef2}',
    "\\I" =&gt; '\x{00CC}',
    "\\i" =&gt; '\x{00EC}',
    a =&gt; '\x{00E0}',
    e =&gt; '\x{00E8}',
    i =&gt; '\x{00EC}',
    n =&gt; '\x{01F9}',
    o =&gt; '\x{00F2}',
    u =&gt; '\x{00F9}',
    w =&gt; '\x{1E81}',
    y =&gt; '\x{1EF3}',
  },
  "." =&gt; {              # with dot above
    A =&gt; '\x{0226}',
    B =&gt; '\x{1E02}',
    C =&gt; '\x{010A}',
    D =&gt; '\x{1E0A}',
    E =&gt; '\x{0116}',
    F =&gt; '\x{1E1E}',
    G =&gt; '\x{0120}',
    H =&gt; '\x{1E22}',
    I =&gt; '\x{0130}',
    M =&gt; '\x{1E40}',
    N =&gt; '\x{1E44}',
    O =&gt; '\x{022E}',
    P =&gt; '\x{1E56}',
    R =&gt; '\x{1E58}',
    S =&gt; '\x{1E60}',
    T =&gt; '\x{1E6a}',
    W =&gt; '\x{1E86}',
    X =&gt; '\x{1E8A}',
    Y =&gt; '\x{1E8E}',
    Z =&gt; '\x{017B}',
    "\\I" =&gt; '\x{0130}',
    a =&gt; '\x{0227}',
    b =&gt; '\x{1E03}',
    c =&gt; '\x{010B}',
    d =&gt; '\x{1E0B}',
    e =&gt; '\x{0117}',
    f =&gt; '\x{1e1f}',
    g =&gt; '\x{0121}',
    h =&gt; '\x{1E23}',
    m =&gt; '\x{1E41}',
    n =&gt; '\x{1E45}',
    o =&gt; '\x{022F}',
    p =&gt; '\x{1E57}',
    r =&gt; '\x{1E59}',
    s =&gt; '\x{1E61}',
    t =&gt; '\x{1E6b}',
    w =&gt; '\x{1E87}',
    x =&gt; '\x{1E8b}',
    y =&gt; '\x{1E8f}',
    z =&gt; '\x{017C}',
  },
  '=' =&gt; {              # with macron
    A =&gt; '\x{0100}',
   AE =&gt; '\x{01E2}',
    E =&gt; '\x{0112}',
    G =&gt; '\x{1E20}',
    I =&gt; '\x{012A}',
    O =&gt; '\x{014C}',
    U =&gt; '\x{016A}',
    Y =&gt; '\x{0232}',
    "\\I" =&gt; '\x{012A}',
    "\\i" =&gt; '\x{012B}',
    a =&gt; '\x{0101}',
   ae =&gt; '\x{01E3}',
    e =&gt; '\x{0113}',
    g =&gt; '\x{1E21}',
    i =&gt; '\x{012B}',
    o =&gt; '\x{014D}',
    u =&gt; '\x{016B}',
    y =&gt; '\x{0233}',
  },
  "~" =&gt; {              # with tilde
    A =&gt; '\x{00C3}',
    E =&gt; '\x{1EBC}',
    I =&gt; '\x{0128}',
    N =&gt; '\x{00D1}',
    O =&gt; '\x{00D5}',
    U =&gt; '\x{0168}',
    V =&gt; '\x{1E7C}',
    Y =&gt; '\x{1EF8}',
    "\\I" =&gt; '\x{0128}',
    "\\i" =&gt; '\x{0129}',
    a =&gt; '\x{00E3}',
    e =&gt; '\x{1EBD}',
    i =&gt; '\x{0129}',
    n =&gt; '\x{00F1}',
    o =&gt; '\x{00F5}',
    u =&gt; '\x{0169}',
    v =&gt; '\x{1E7D}',
    y =&gt; '\x{1EF9}',
  },
);

#  Accent commands that are alphabetic.
# 
our %ACCENT_LETTERS = (
  "H" =&gt; {              # with double acute
    O =&gt; '\x{0150}',
    U =&gt; '\x{0170}',
    o =&gt; '\x{0151}',
    u =&gt; '\x{0171}',
  },
  "c" =&gt; {              # with cedilla
    C =&gt; '\x{00C7}',
    D =&gt; '\x{1E10}',
    E =&gt; '\x{0228}',
    G =&gt; '\x{0122}',
    H =&gt; '\x{1E28}',
    K =&gt; '\x{0136}',
    L =&gt; '\x{013B}',
    N =&gt; '\x{0145}',
    R =&gt; '\x{0156}',
    S =&gt; '\x{015E}',
    T =&gt; '\x{0162}',
    c =&gt; '\x{00E7}',
    d =&gt; '\x{1E11}',
    e =&gt; '\x{0229}',
    g =&gt; '\x{0123}',
    h =&gt; '\x{1E29}',
    k =&gt; '\x{0137}',
    l =&gt; '\x{013C}',
    n =&gt; '\x{0146}',
    r =&gt; '\x{0157}',
    s =&gt; '\x{015F}',
    t =&gt; '\x{0163}',
  },
  "d" =&gt; {              # with dot below
    A =&gt; '\x{1EA0}',
    B =&gt; '\x{1E04}',
    D =&gt; '\x{1E0C}',
    E =&gt; '\x{1EB8}',
    H =&gt; '\x{1E24}',
    I =&gt; '\x{1ECA}',
    K =&gt; '\x{1E32}',
    L =&gt; '\x{1E36}',
    M =&gt; '\x{1E42}',
    N =&gt; '\x{1E46}',
    O =&gt; '\x{1ECC}',
    R =&gt; '\x{1E5A}',
    S =&gt; '\x{1E62}',
    T =&gt; '\x{1E6C}',
    U =&gt; '\x{1EE4}',
    V =&gt; '\x{1E7E}',
    W =&gt; '\x{1E88}',
    Y =&gt; '\x{1Ef4}',
    Z =&gt; '\x{1E92}',
    "\\I" =&gt; '\x{1ECA}',
    "\\i" =&gt; '\x{1ECB}',
    a =&gt; '\x{1EA1}',
    b =&gt; '\x{1E05}',
    d =&gt; '\x{1E0D}',
    e =&gt; '\x{1EB9}',
    h =&gt; '\x{1E25}',
    i =&gt; '\x{1ECB}',
    k =&gt; '\x{1E33}',
    l =&gt; '\x{1E37}',
    m =&gt; '\x{1E43}',
    n =&gt; '\x{1E47}',
    o =&gt; '\x{1ECD}',
    r =&gt; '\x{1E5b}',
    s =&gt; '\x{1E63}',
    t =&gt; '\x{1E6D}',
    u =&gt; '\x{1EE5}',
    v =&gt; '\x{1E7F}',
    w =&gt; '\x{1E89}',
    y =&gt; '\x{1EF5}',
    z =&gt; '\x{1E93}',
  },
  "h" =&gt; {              # with hook above
    A =&gt; '\x{1EA2}',
    E =&gt; '\x{1EBA}',
    I =&gt; '\x{1EC8}',
    O =&gt; '\x{1ECe}',
    U =&gt; '\x{1EE6}',
    Y =&gt; '\x{1EF6}',
    "\\I" =&gt; '\x{1EC8}',
    "\\i" =&gt; '\x{1EC9}',
    a =&gt; '\x{1EA3}',
    e =&gt; '\x{1EBB}',
    i =&gt; '\x{1EC9}',
    o =&gt; '\x{1ECF}',
    u =&gt; '\x{1EE7}',
    y =&gt; '\x{1EF7}',
  },
  "k" =&gt; {              # with ogonek
    A =&gt; '\x{0104}',
    E =&gt; '\x{0118}',
    I =&gt; '\x{012E}',
    O =&gt; '\x{01EA}',
    U =&gt; '\x{0172}',
    "\\I" =&gt; '\x{012E}',
    "\\i" =&gt; '\x{012F}',
    a =&gt; '\x{0105}',
    e =&gt; '\x{0119}',
    i =&gt; '\x{012F}',
    o =&gt; '\x{01EB}',
    u =&gt; '\x{0173}',
  },
  "r" =&gt; {              # with ring above
    A =&gt; '\x{00C5}',
    U =&gt; '\x{016E}',
    a =&gt; '\x{00E5}',
    u =&gt; '\x{016F}',
    w =&gt; '\x{1E98}',
    y =&gt; '\x{1E99}',
  },
  "u" =&gt; {              # with breve
    A =&gt; '\x{0102}',
    E =&gt; '\x{0114}',
    G =&gt; '\x{011E}',
    I =&gt; '\x{012C}',
    O =&gt; '\x{014E}',
    U =&gt; '\x{016C}',
    "\\I" =&gt; '\x{012C}',
    "\\i" =&gt; '\x{012D}',
    a =&gt; '\x{0103}',
    e =&gt; '\x{0115}',
    g =&gt; '\x{011F}',
    i =&gt; '\x{012D}',
    o =&gt; '\x{014F}',
    u =&gt; '\x{016D}',
  },
  "v" =&gt; {              # with caron
    A =&gt; '\x{01CD}',
    C =&gt; '\x{010C}',
    D =&gt; '\x{010E}',
   DZ =&gt; '\x{01C4}',
    E =&gt; '\x{011A}',
    G =&gt; '\x{01E6}',
    H =&gt; '\x{021E}',
    I =&gt; '\x{01CF}',
    K =&gt; '\x{01E8}',
    L =&gt; '\x{013D}',
    N =&gt; '\x{0147}',
    O =&gt; '\x{01D1}',
    R =&gt; '\x{0158}',
    S =&gt; '\x{0160}',
    T =&gt; '\x{0164}',
    U =&gt; '\x{01D3}',
    Z =&gt; '\x{017D}',
    "\\I" =&gt; '\x{01CF}',
    "\\i" =&gt; '\x{01D0}',
    "\\j" =&gt; '\x{01F0}',
    a =&gt; '\x{01CE}',
    c =&gt; '\x{010D}',
    d =&gt; '\x{010F}',
   dz =&gt; '\x{01C6}',
    e =&gt; '\x{011B}',
    g =&gt; '\x{01E7}',
    h =&gt; '\x{021F}',
    i =&gt; '\x{01D0}',
    j =&gt; '\x{01F0}',
    k =&gt; '\x{01E9}',
    l =&gt; '\x{013E}',
    n =&gt; '\x{0148}',
    o =&gt; '\x{01D2}',
    r =&gt; '\x{0159}',
    s =&gt; '\x{0161}',
    t =&gt; '\x{0165}',
    u =&gt; '\x{01D4}',
    z =&gt; '\x{017E}',
  },
);

# 
our %GERMAN = ( # for package `german'/`ngerman'
    '"a'    =&gt; 'Ã¤',
    '"A'    =&gt; 'Ã„',
    '"e'    =&gt; 'Ã«',
    '"E'    =&gt; 'Ã‹',
    '"i'    =&gt; 'Ã¯',
    '"I'    =&gt; 'Ã',
    '"o'    =&gt; 'Ã¶',
    '"O'    =&gt; 'Ã–',
    '"u'    =&gt; 'Ã¼',
    '"U'    =&gt; 'Ãœ',
    '"s'    =&gt; 'ÃŸ',
    '"S'    =&gt; 'SS',
    '"z'    =&gt; 'ÃŸ',
    '"Z'    =&gt; 'SZ',
    '"ck'   =&gt; 'ck', # old spelling: ck -&gt; k-k
    '"ff'   =&gt; 'ff', # old spelling: ff -&gt; ff-f
    '"`'    =&gt; 'â€ž',
    "\"'"   =&gt; 'â€œ',
    '"&lt;'    =&gt; 'Â«',
    '"&gt;'    =&gt; 'Â»',
    '"-'    =&gt; '\x{00AD}',    # soft hyphen
    '""'    =&gt; '\x{200B}',  # zero width space
    '"~'    =&gt; '\x{2011}',  # non-breaking hyphen
    '"='    =&gt; '-',
    '\glq'  =&gt; 'â€š', # left german single quote
    '\grq'  =&gt; 'â€˜', # right german single quote
    '\flqq' =&gt; 'Â«',
    '\frqq' =&gt; 'Â»',
    '\dq'   =&gt; '"',
);

1;

__END__
=pod

=encoding UTF-8

=head1 NAME

LaTeX::ToUnicode::Tables - Character tables for LaTeX::ToUnicode

=head1 VERSION

version 0.54

=head1 CONSTANTS

=head2 @LIGATURES

Standard TeX character sequences (not \commands) which need to be
replaced: C&lt;---&gt; with U+2014 (em dash), etc.  Includes: em dash, en
dash, inverted exclamation, inverted question, left double quote, right
double quote, left single quote, right single quote. They are replaced
in that order.

=head2 %MARKUPS

Hash where keys are the names of formatting commands like C&lt;\tt&gt;,
without the backslash, namely: C&lt;bf cal em it rm sc sf sl small tt&gt;. Values
are the obvious HTML equivalent where one exists, given as the tag name
without the angle brackets: C&lt;b em i tt&gt;. Otherwise the value is the empty
string.

=head2 %ARGUMENT_COMMANDS

Hash where keys are the names of TeX commands taking arguments that we
handle, without the backslash, such as C&lt;enquote&gt;. Each value is a
reference to a list of two strings, the first being the text to insert
before the argument, the second being the text to insert after. For
example, for C&lt;enquote&gt; the value is C&lt;["`", "'"]&gt;. The inserted text is
subject to further replacements.

Only three such commands are currently handled: C&lt;\emph&gt;, C&lt;\enquote&gt;,
and C&lt;\path&gt;.

=head2 %CONTROL_SYMBOLS

A hash where the keys are non-alphabetic C&lt;\command&gt;s (without the
backslash), other than accents and special cases. These don't take
arguments. Although some of these have Unicode equivalents, such as the
C&lt;\,&gt; thin space, it seems better to keep the output as simple as
possible; small spacing tweaks in TeX aren't usually desirable in plain
text or HTML.

The values are single-quoted strings C&lt;'\x{...}'&gt;, not double-quoted
literal characters &lt;"\x{...}"&gt;, to ease future parsing of the
TeX/text/HTML.

This hash is necessary because TeX's parsing rules for control symbols
are different from control words: no space or other token is needed to
terminate control symbols.

=head2 %CONTROL_WORDS

Keys are names of argument-less commands, such as C&lt;\LaTeX&gt; (without the
backslash). Values are the replacements, often the empty string.

=head2 %SYMBOLS

Keys are the commands for extended characters, such as C&lt;\AA&gt; (without
the backslash.)

=head2 %ACCENT_SYMBOLS

Two-level hash of accented characters like C&lt;\'{a}&gt;. The keys of this
hash are the accent symbols (without the backslash), such as C&lt;`&gt; and
C&lt;'&gt;. The corresponding values are hash references where the keys are
the base letters and the values are single-quoted C&lt;'\x{....}'&gt; strings.

=head2 %ACCENT_LETTERS

Same as %ACCENT_SYMBOLS, except the keys are accents that are
alphabetic, such as C&lt;\c&gt; (without the backslash as always).

As with control sequences, it's necessary to distinguish symbols and
alphabetic commands because of the different parsing rules.

=head2 %GERMAN

Character sequences (not necessarily commands) as defined by the package
`german'/`ngerman', e.g. C&lt;"a&gt; (a with umlaut), C&lt;"s&gt; (german sharp s)
or C&lt;"`"&gt; (german left quote). Note the missing backslash.

The keys of this hash are the literal character sequences.

=head1 AUTHOR

Gerhard Gossen &lt;gerhard.gossen@googlemail.com&gt;,
Boris Veytsman &lt;boris@varphi.com&gt;,
Karl Berry &lt;karl@freefriends.org&gt;

L&lt;https://github.com/borisveytsman/bibtexperllibs&gt;

=head1 COPYRIGHT AND LICENSE

Copyright 2010-2024 Gerhard Gossen, Boris Veytsman, Karl Berry

This is free software; you can redistribute it and/or modify it under
the same terms as the Perl5 programming language system itself.

=cut
</pre></body></html>