///|
fn pdf_text_standard_control_glyphname(code : Int) -> PdfName? {
  match code {
    9 => Some(pdf_text_glyph_control_ht_name)
    10 => Some(pdf_text_glyph_control_lf_name)
    12 => Some(pdf_text_glyph_control_ff_name)
    13 => Some(pdf_text_glyph_control_cr_name)
    _ => None
  }
}

///|
fn pdf_text_basic_latin_glyphname(
  code : Int,
  standard_quotes : Bool,
) -> PdfName? {
  pdf_text_cached_basic_latin_glyphname(code, standard_quotes)
}

///|
fn pdf_text_standard_glyphname(code : Int) -> PdfName? {
  match pdf_text_standard_control_glyphname(code) {
    Some(name) => Some(name)
    None =>
      match pdf_text_basic_latin_glyphname(code, true) {
        Some(name) => Some(name)
        None =>
          match code {
            0xA1 => Some(pdf_text_name("/exclamdown"))
            0xA2 => Some(pdf_text_name("/cent"))
            0xA3 => Some(pdf_text_name("/sterling"))
            0xA4 => Some(pdf_text_name("/fraction"))
            0xA5 => Some(pdf_text_name("/yen"))
            0xA6 => Some(pdf_text_name("/florin"))
            0xA7 => Some(pdf_text_name("/section"))
            0xA8 => Some(pdf_text_name("/currency"))
            0xA9 => Some(pdf_text_name("/quotesingle"))
            0xAA => Some(pdf_text_name("/quotedblleft"))
            0xAB => Some(pdf_text_name("/guillemotleft"))
            0xAC => Some(pdf_text_name("/guilsinglleft"))
            0xAD => Some(pdf_text_name("/guilsinglright"))
            0xAE => Some(pdf_text_name("/fi"))
            0xAF => Some(pdf_text_name("/fl"))
            0xB1 => Some(pdf_text_name("/endash"))
            0xB2 => Some(pdf_text_name("/dagger"))
            0xB3 => Some(pdf_text_name("/daggerdbl"))
            0xB4 => Some(pdf_text_name("/periodcentered"))
            0xB6 => Some(pdf_text_name("/paragraph"))
            0xB7 => Some(pdf_text_name("/bullet"))
            0xB8 => Some(pdf_text_name("/quotesinglbase"))
            0xB9 => Some(pdf_text_name("/quotedblbase"))
            0xBA => Some(pdf_text_name("/quotedblright"))
            0xBB => Some(pdf_text_name("/guillemotright"))
            0xBC => Some(pdf_text_name("/ellipsis"))
            0xBD => Some(pdf_text_name("/perthousand"))
            0xBF => Some(pdf_text_name("/questiondown"))
            0xC1 => Some(pdf_text_name("/grave"))
            0xC2 => Some(pdf_text_name("/acute"))
            0xC3 => Some(pdf_text_name("/circumflex"))
            0xC4 => Some(pdf_text_name("/tilde"))
            0xC5 => Some(pdf_text_name("/macron"))
            0xC6 => Some(pdf_text_name("/breve"))
            0xC7 => Some(pdf_text_name("/dotaccent"))
            0xC8 => Some(pdf_text_name("/dieresis"))
            0xCA => Some(pdf_text_name("/ring"))
            0xCB => Some(pdf_text_name("/cedilla"))
            0xCD => Some(pdf_text_name("/hungarumlaut"))
            0xCE => Some(pdf_text_name("/ogonek"))
            0xCF => Some(pdf_text_name("/caron"))
            0xD0 => Some(pdf_text_name("/emdash"))
            0xE1 => Some(pdf_text_name("/AE"))
            0xE3 => Some(pdf_text_name("/ordfeminine"))
            0xE8 => Some(pdf_text_name("/Lslash"))
            0xE9 => Some(pdf_text_name("/Oslash"))
            0xEA => Some(pdf_text_name("/OE"))
            0xEB => Some(pdf_text_name("/ordmasculine"))
            0xF1 => Some(pdf_text_name("/ae"))
            0xF5 => Some(pdf_text_name("/dotlessi"))
            0xF8 => Some(pdf_text_name("/lslash"))
            0xFA => Some(pdf_text_name("/oe"))
            0xFB => Some(pdf_text_name("/germandbls"))
            _ => None
          }
      }
  }
}

///|
fn pdf_text_macroman_glyphname(code : Int) -> PdfName? {
  match pdf_text_basic_latin_glyphname(code, false) {
    Some(name) => Some(name)
    None =>
      match code {
        0x80 => Some(pdf_text_name("/Adieresis"))
        0x81 => Some(pdf_text_name("/Aring"))
        0x82 => Some(pdf_text_name("/Ccedilla"))
        0x83 => Some(pdf_text_name("/Eacute"))
        0x84 => Some(pdf_text_name("/Ntilde"))
        0x85 => Some(pdf_text_name("/Odieresis"))
        0x86 => Some(pdf_text_name("/Udieresis"))
        0x87 => Some(pdf_text_name("/aacute"))
        0x88 => Some(pdf_text_name("/agrave"))
        0x89 => Some(pdf_text_name("/acircumflex"))
        0x8A => Some(pdf_text_name("/adieresis"))
        0x8B => Some(pdf_text_name("/atilde"))
        0x8C => Some(pdf_text_name("/aring"))
        0x8D => Some(pdf_text_name("/ccedilla"))
        0x8E => Some(pdf_text_name("/eacute"))
        0x8F => Some(pdf_text_name("/egrave"))
        0x90 => Some(pdf_text_name("/ecircumflex"))
        0x91 => Some(pdf_text_name("/edieresis"))
        0x92 => Some(pdf_text_name("/iacute"))
        0x93 => Some(pdf_text_name("/igrave"))
        0x94 => Some(pdf_text_name("/icircumflex"))
        0x95 => Some(pdf_text_name("/idieresis"))
        0x96 => Some(pdf_text_name("/ntilde"))
        0x97 => Some(pdf_text_name("/oacute"))
        0x98 => Some(pdf_text_name("/ograve"))
        0x99 => Some(pdf_text_name("/ocircumflex"))
        0x9A => Some(pdf_text_name("/odieresis"))
        0x9B => Some(pdf_text_name("/otilde"))
        0x9C => Some(pdf_text_name("/uacute"))
        0x9D => Some(pdf_text_name("/ugrave"))
        0x9E => Some(pdf_text_name("/ucircumflex"))
        0x9F => Some(pdf_text_name("/udieresis"))
        0xA0 => Some(pdf_text_name("/dagger"))
        0xA1 => Some(pdf_text_name("/degree"))
        0xA2 => Some(pdf_text_name("/cent"))
        0xA3 => Some(pdf_text_name("/sterling"))
        0xA4 => Some(pdf_text_name("/section"))
        0xA5 => Some(pdf_text_name("/bullet"))
        0xA6 => Some(pdf_text_name("/paragraph"))
        0xA7 => Some(pdf_text_name("/germandbls"))
        0xA8 => Some(pdf_text_name("/registered"))
        0xA9 => Some(pdf_text_name("/copyright"))
        0xAA => Some(pdf_text_name("/trademark"))
        0xAB => Some(pdf_text_name("/acute"))
        0xAC => Some(pdf_text_name("/dieresis"))
        0xAE => Some(pdf_text_name("/AE"))
        0xAF => Some(pdf_text_name("/Oslash"))
        0xB1 => Some(pdf_text_name("/plusminus"))
        0xB4 => Some(pdf_text_name("/yen"))
        0xB5 => Some(pdf_text_name("/mu"))
        0xBB => Some(pdf_text_name("/ordfeminine"))
        0xBC => Some(pdf_text_name("/ordmasculine"))
        0xBE => Some(pdf_text_name("/ae"))
        0xBF => Some(pdf_text_name("/oslash"))
        0xC0 => Some(pdf_text_name("/questiondown"))
        0xC1 => Some(pdf_text_name("/exclamdown"))
        0xC2 => Some(pdf_text_name("/logicalnot"))
        0xC4 => Some(pdf_text_name("/florin"))
        0xC7 => Some(pdf_text_name("/guillemotleft"))
        0xC8 => Some(pdf_text_name("/guillemotright"))
        0xC9 => Some(pdf_text_name("/ellipsis"))
        0xCA => Some(pdf_text_glyph_space_name)
        0xCB => Some(pdf_text_name("/Agrave"))
        0xCC => Some(pdf_text_name("/Atilde"))
        0xCD => Some(pdf_text_name("/Otilde"))
        0xCE => Some(pdf_text_name("/OE"))
        0xCF => Some(pdf_text_name("/oe"))
        0xD0 => Some(pdf_text_name("/endash"))
        0xD1 => Some(pdf_text_name("/emdash"))
        0xD2 => Some(pdf_text_name("/quotedblleft"))
        0xD3 => Some(pdf_text_name("/quotedblright"))
        0xD4 => Some(pdf_text_name("/quoteleft"))
        0xD5 => Some(pdf_text_name("/quoteright"))
        0xD6 => Some(pdf_text_name("/divide"))
        0xD8 => Some(pdf_text_name("/ydieresis"))
        0xD9 => Some(pdf_text_name("/Ydieresis"))
        0xDA => Some(pdf_text_name("/fraction"))
        0xDB => Some(pdf_text_name("/currency"))
        0xDC => Some(pdf_text_name("/guilsinglleft"))
        0xDD => Some(pdf_text_name("/guilsinglright"))
        0xDE => Some(pdf_text_name("/fi"))
        0xDF => Some(pdf_text_name("/fl"))
        0xE0 => Some(pdf_text_name("/daggerdbl"))
        0xE1 => Some(pdf_text_name("/periodcentered"))
        0xE2 => Some(pdf_text_name("/quotesinglbase"))
        0xE3 => Some(pdf_text_name("/quotedblbase"))
        0xE4 => Some(pdf_text_name("/perthousand"))
        0xE5 => Some(pdf_text_name("/Acircumflex"))
        0xE6 => Some(pdf_text_name("/Ecircumflex"))
        0xE7 => Some(pdf_text_name("/Aacute"))
        0xE8 => Some(pdf_text_name("/Edieresis"))
        0xE9 => Some(pdf_text_name("/Egrave"))
        0xEA => Some(pdf_text_name("/Iacute"))
        0xEB => Some(pdf_text_name("/Icircumflex"))
        0xEC => Some(pdf_text_name("/Idieresis"))
        0xED => Some(pdf_text_name("/Igrave"))
        0xEE => Some(pdf_text_name("/Oacute"))
        0xEF => Some(pdf_text_name("/Ocircumflex"))
        0xF1 => Some(pdf_text_name("/Ograve"))
        0xF2 => Some(pdf_text_name("/Uacute"))
        0xF3 => Some(pdf_text_name("/Ucircumflex"))
        0xF4 => Some(pdf_text_name("/Ugrave"))
        0xF5 => Some(pdf_text_name("/dotlessi"))
        0xF6 => Some(pdf_text_name("/circumflex"))
        0xF7 => Some(pdf_text_name("/tilde"))
        0xF8 => Some(pdf_text_name("/macron"))
        0xF9 => Some(pdf_text_name("/breve"))
        0xFA => Some(pdf_text_name("/dotaccent"))
        0xFB => Some(pdf_text_name("/ring"))
        0xFC => Some(pdf_text_name("/cedilla"))
        0xFD => Some(pdf_text_name("/hungarumlaut"))
        0xFE => Some(pdf_text_name("/ogonek"))
        0xFF => Some(pdf_text_name("/caron"))
        _ => None
      }
  }
}

///|
fn pdf_text_winansi_glyphname(code : Int) -> PdfName? {
  match pdf_text_basic_latin_glyphname(code, false) {
    Some(name) => Some(name)
    None =>
      match code {
        0x80 => Some(pdf_text_name("/Euro"))
        0x82 => Some(pdf_text_name("/quotesinglbase"))
        0x83 => Some(pdf_text_name("/florin"))
        0x84 => Some(pdf_text_name("/quotedblbase"))
        0x85 => Some(pdf_text_name("/ellipsis"))
        0x86 => Some(pdf_text_name("/dagger"))
        0x87 => Some(pdf_text_name("/daggerdbl"))
        0x88 => Some(pdf_text_name("/circumflex"))
        0x89 => Some(pdf_text_name("/perthousand"))
        0x8A => Some(pdf_text_name("/Scaron"))
        0x8B => Some(pdf_text_name("/guilsinglleft"))
        0x8C => Some(pdf_text_name("/OE"))
        0x8E => Some(pdf_text_name("/Zcaron"))
        0x91 => Some(pdf_text_name("/quoteleft"))
        0x92 => Some(pdf_text_name("/quoteright"))
        0x93 => Some(pdf_text_name("/quotedblleft"))
        0x94 => Some(pdf_text_name("/quotedblright"))
        0x95 => Some(pdf_text_name("/bullet"))
        0x96 => Some(pdf_text_name("/endash"))
        0x97 => Some(pdf_text_name("/emdash"))
        0x98 => Some(pdf_text_name("/tilde"))
        0x99 => Some(pdf_text_name("/trademark"))
        0x9A => Some(pdf_text_name("/scaron"))
        0x9B => Some(pdf_text_name("/guilsinglright"))
        0x9C => Some(pdf_text_name("/oe"))
        0x9E => Some(pdf_text_name("/zcaron"))
        0x9F => Some(pdf_text_name("/Ydieresis"))
        0xA0 => Some(pdf_text_glyph_space_name)
        0xA1 => Some(pdf_text_name("/exclamdown"))
        0xA2 => Some(pdf_text_name("/cent"))
        0xA3 => Some(pdf_text_name("/sterling"))
        0xA4 => Some(pdf_text_name("/currency"))
        0xA5 => Some(pdf_text_name("/yen"))
        0xA6 => Some(pdf_text_name("/brokenbar"))
        0xA7 => Some(pdf_text_name("/section"))
        0xA8 => Some(pdf_text_name("/dieresis"))
        0xA9 => Some(pdf_text_name("/copyright"))
        0xAA => Some(pdf_text_name("/ordfeminine"))
        0xAB => Some(pdf_text_name("/guillemotleft"))
        0xAC => Some(pdf_text_name("/logicalnot"))
        0xAD => Some(pdf_text_name("/hyphen"))
        0xAE => Some(pdf_text_name("/registered"))
        0xAF => Some(pdf_text_name("/macron"))
        0xB0 => Some(pdf_text_name("/degree"))
        0xB1 => Some(pdf_text_name("/plusminus"))
        0xB2 => Some(pdf_text_name("/twosuperior"))
        0xB3 => Some(pdf_text_name("/threesuperior"))
        0xB4 => Some(pdf_text_name("/acute"))
        0xB5 => Some(pdf_text_name("/mu"))
        0xB6 => Some(pdf_text_name("/paragraph"))
        0xB7 => Some(pdf_text_name("/periodcentered"))
        0xB8 => Some(pdf_text_name("/cedilla"))
        0xB9 => Some(pdf_text_name("/onesuperior"))
        0xBA => Some(pdf_text_name("/ordmasculine"))
        0xBB => Some(pdf_text_name("/guillemotright"))
        0xBC => Some(pdf_text_name("/onequarter"))
        0xBD => Some(pdf_text_name("/onehalf"))
        0xBE => Some(pdf_text_name("/threequarters"))
        0xBF => Some(pdf_text_name("/questiondown"))
        0xC0 => Some(pdf_text_name("/Agrave"))
        0xC1 => Some(pdf_text_name("/Aacute"))
        0xC2 => Some(pdf_text_name("/Acircumflex"))
        0xC3 => Some(pdf_text_name("/Atilde"))
        0xC4 => Some(pdf_text_name("/Adieresis"))
        0xC5 => Some(pdf_text_name("/Aring"))
        0xC6 => Some(pdf_text_name("/AE"))
        0xC7 => Some(pdf_text_name("/Ccedilla"))
        0xC8 => Some(pdf_text_name("/Egrave"))
        0xC9 => Some(pdf_text_name("/Eacute"))
        0xCA => Some(pdf_text_name("/Ecircumflex"))
        0xCB => Some(pdf_text_name("/Edieresis"))
        0xCC => Some(pdf_text_name("/Igrave"))
        0xCD => Some(pdf_text_name("/Iacute"))
        0xCE => Some(pdf_text_name("/Icircumflex"))
        0xCF => Some(pdf_text_name("/Idieresis"))
        0xD0 => Some(pdf_text_name("/Eth"))
        0xD1 => Some(pdf_text_name("/Ntilde"))
        0xD2 => Some(pdf_text_name("/Ograve"))
        0xD3 => Some(pdf_text_name("/Oacute"))
        0xD4 => Some(pdf_text_name("/Ocircumflex"))
        0xD5 => Some(pdf_text_name("/Otilde"))
        0xD6 => Some(pdf_text_name("/Odieresis"))
        0xD7 => Some(pdf_text_name("/multiply"))
        0xD8 => Some(pdf_text_name("/Oslash"))
        0xD9 => Some(pdf_text_name("/Ugrave"))
        0xDA => Some(pdf_text_name("/Uacute"))
        0xDB => Some(pdf_text_name("/Ucircumflex"))
        0xDC => Some(pdf_text_name("/Udieresis"))
        0xDD => Some(pdf_text_name("/Yacute"))
        0xDE => Some(pdf_text_name("/Thorn"))
        0xDF => Some(pdf_text_name("/germandbls"))
        0xE0 => Some(pdf_text_name("/agrave"))
        0xE1 => Some(pdf_text_name("/aacute"))
        0xE2 => Some(pdf_text_name("/acircumflex"))
        0xE3 => Some(pdf_text_name("/atilde"))
        0xE4 => Some(pdf_text_name("/adieresis"))
        0xE5 => Some(pdf_text_name("/aring"))
        0xE6 => Some(pdf_text_name("/ae"))
        0xE7 => Some(pdf_text_name("/ccedilla"))
        0xE8 => Some(pdf_text_name("/egrave"))
        0xE9 => Some(pdf_text_name("/eacute"))
        0xEA => Some(pdf_text_name("/ecircumflex"))
        0xEB => Some(pdf_text_name("/edieresis"))
        0xEC => Some(pdf_text_name("/igrave"))
        0xED => Some(pdf_text_name("/iacute"))
        0xEE => Some(pdf_text_name("/icircumflex"))
        0xEF => Some(pdf_text_name("/idieresis"))
        0xF0 => Some(pdf_text_name("/eth"))
        0xF1 => Some(pdf_text_name("/ntilde"))
        0xF2 => Some(pdf_text_name("/ograve"))
        0xF3 => Some(pdf_text_name("/oacute"))
        0xF4 => Some(pdf_text_name("/ocircumflex"))
        0xF5 => Some(pdf_text_name("/otilde"))
        0xF6 => Some(pdf_text_name("/odieresis"))
        0xF7 => Some(pdf_text_name("/divide"))
        0xF8 => Some(pdf_text_name("/oslash"))
        0xF9 => Some(pdf_text_name("/ugrave"))
        0xFA => Some(pdf_text_name("/uacute"))
        0xFB => Some(pdf_text_name("/ucircumflex"))
        0xFC => Some(pdf_text_name("/udieresis"))
        0xFD => Some(pdf_text_name("/yacute"))
        0xFE => Some(pdf_text_name("/thorn"))
        0xFF => Some(pdf_text_name("/ydieresis"))
        _ => None
      }
  }
}

///|
fn pdf_text_macexpert_glyphname(code : Int) -> PdfName? {
  match code {
    0x20 => Some(pdf_text_glyph_space_name)
    0x21 => Some(pdf_text_name("/exclamsmall"))
    0x22 => Some(pdf_text_name("/Hungarumlautsmall"))
    0x23 => Some(pdf_text_name("/centoldstyle"))
    0x24 => Some(pdf_text_name("/dollaroldstyle"))
    0x26 => Some(pdf_text_name("/ampersandsmall"))
    0x27 => Some(pdf_text_name("/Acutesmall"))
    0x28 => Some(pdf_text_name("/parenleftsuperior"))
    0x29 => Some(pdf_text_name("/parenrightsuperior"))
    0x2A => Some(pdf_text_name("/twodotenleader"))
    0x2B => Some(pdf_text_name("/onedotenleader"))
    0x2C => Some(pdf_text_name("/comma"))
    0x2D => Some(pdf_text_name("/hyphen"))
    0x2E => Some(pdf_text_name("/period"))
    0x2F => Some(pdf_text_name("/fraction"))
    0x30 => Some(pdf_text_name("/zerooldstyle"))
    0x31 => Some(pdf_text_name("/oneoldstyle"))
    0x32 => Some(pdf_text_name("/twooldstyle"))
    0x33 => Some(pdf_text_name("/threeoldstyle"))
    0x34 => Some(pdf_text_name("/fouroldstyle"))
    0x35 => Some(pdf_text_name("/fiveoldstyle"))
    0x36 => Some(pdf_text_name("/sixoldstyle"))
    0x37 => Some(pdf_text_name("/sevenoldstyle"))
    0x38 => Some(pdf_text_name("/eightoldstyle"))
    0x39 => Some(pdf_text_name("/nineoldstyle"))
    0x3A => Some(pdf_text_name("/colon"))
    0x3B => Some(pdf_text_name("/semicolon"))
    0x3D => Some(pdf_text_name("/threequartersemdash"))
    0x3F => Some(pdf_text_name("/questionsmall"))
    0x44 => Some(pdf_text_name("/Ethsmall"))
    0x47 => Some(pdf_text_name("/onequarter"))
    0x48 => Some(pdf_text_name("/onehalf"))
    0x49 => Some(pdf_text_name("/threequarters"))
    0x4A => Some(pdf_text_name("/oneeighth"))
    0x4B => Some(pdf_text_name("/threeeighths"))
    0x4C => Some(pdf_text_name("/fiveeighths"))
    0x4D => Some(pdf_text_name("/seveneighths"))
    0x4E => Some(pdf_text_name("/onethird"))
    0x4F => Some(pdf_text_name("/twothirds"))
    0x56 => Some(pdf_text_name("/ff"))
    0x57 => Some(pdf_text_name("/fi"))
    0x58 => Some(pdf_text_name("/fl"))
    0x59 => Some(pdf_text_name("/ffi"))
    0x5A => Some(pdf_text_name("/ffl"))
    0x5B => Some(pdf_text_name("/parenleftinferior"))
    0x5D => Some(pdf_text_name("/parenrightinferior"))
    0x5E => Some(pdf_text_name("/Circumflexsmall"))
    0x5F => Some(pdf_text_name("/hypheninferior"))
    0x60 => Some(pdf_text_name("/Gravesmall"))
    0x61 => Some(pdf_text_name("/Asmall"))
    0x62 => Some(pdf_text_name("/Bsmall"))
    0x63 => Some(pdf_text_name("/Csmall"))
    0x64 => Some(pdf_text_name("/Dsmall"))
    0x65 => Some(pdf_text_name("/Esmall"))
    0x66 => Some(pdf_text_name("/Fsmall"))
    0x67 => Some(pdf_text_name("/Gsmall"))
    0x68 => Some(pdf_text_name("/Hsmall"))
    0x69 => Some(pdf_text_name("/Ismall"))
    0x6A => Some(pdf_text_name("/Jsmall"))
    0x6B => Some(pdf_text_name("/Ksmall"))
    0x6C => Some(pdf_text_name("/Lsmall"))
    0x6D => Some(pdf_text_name("/Msmall"))
    0x6E => Some(pdf_text_name("/Nsmall"))
    0x6F => Some(pdf_text_name("/Osmall"))
    0x70 => Some(pdf_text_name("/Psmall"))
    0x71 => Some(pdf_text_name("/Qsmall"))
    0x72 => Some(pdf_text_name("/Rsmall"))
    0x73 => Some(pdf_text_name("/Ssmall"))
    0x74 => Some(pdf_text_name("/Tsmall"))
    0x75 => Some(pdf_text_name("/Usmall"))
    0x76 => Some(pdf_text_name("/Vsmall"))
    0x77 => Some(pdf_text_name("/Wsmall"))
    0x78 => Some(pdf_text_name("/Xsmall"))
    0x79 => Some(pdf_text_name("/Ysmall"))
    0x7A => Some(pdf_text_name("/Zsmall"))
    0x7B => Some(pdf_text_name("/colonmonetary"))
    0x7C => Some(pdf_text_name("/onefitted"))
    0x7D => Some(pdf_text_name("/rupiah"))
    0x7E => Some(pdf_text_name("/Tildesmall"))
    0x81 => Some(pdf_text_name("/asuperior"))
    0x82 => Some(pdf_text_name("/centsuperior"))
    0x87 => Some(pdf_text_name("/Aacutesmall"))
    0x88 => Some(pdf_text_name("/Agravesmall"))
    0x89 => Some(pdf_text_name("/Acircumflexsmall"))
    0x8A => Some(pdf_text_name("/Adieresissmall"))
    0x8B => Some(pdf_text_name("/Atildesmall"))
    0x8C => Some(pdf_text_name("/Aringsmall"))
    0x8D => Some(pdf_text_name("/Ccedillasmall"))
    0x8E => Some(pdf_text_name("/Eacutesmall"))
    0x8F => Some(pdf_text_name("/Egravesmall"))
    0x90 => Some(pdf_text_name("/Ecircumflexsmall"))
    0x91 => Some(pdf_text_name("/Edieresissmall"))
    0x92 => Some(pdf_text_name("/Iacutesmall"))
    0x93 => Some(pdf_text_name("/Igravesmall"))
    0x94 => Some(pdf_text_name("/Icircumflexsmall"))
    0x95 => Some(pdf_text_name("/Idieresissmall"))
    0x96 => Some(pdf_text_name("/Ntildesmall"))
    0x97 => Some(pdf_text_name("/Oacutesmall"))
    0x98 => Some(pdf_text_name("/Ogravesmall"))
    0x99 => Some(pdf_text_name("/Ocircumflexsmall"))
    0x9A => Some(pdf_text_name("/Odieresissmall"))
    0x9B => Some(pdf_text_name("/Otildesmall"))
    0x9C => Some(pdf_text_name("/Uacutesmall"))
    0x9D => Some(pdf_text_name("/Ugravesmall"))
    0x9E => Some(pdf_text_name("/Ucircumflexsmall"))
    0x9F => Some(pdf_text_name("/Udieresissmall"))
    0xA1 => Some(pdf_text_name("/eightsuperior"))
    0xA2 => Some(pdf_text_name("/fourinferior"))
    0xA3 => Some(pdf_text_name("/threeinferior"))
    0xA4 => Some(pdf_text_name("/sixinferior"))
    0xA5 => Some(pdf_text_name("/eightinferior"))
    0xA6 => Some(pdf_text_name("/seveninferior"))
    0xA7 => Some(pdf_text_name("/Scaronsmall"))
    0xA9 => Some(pdf_text_name("/centinferior"))
    0xAA => Some(pdf_text_name("/twoinferior"))
    0xAC => Some(pdf_text_name("/Dieresissmall"))
    0xAE => Some(pdf_text_name("/Caronsmall"))
    0xAF => Some(pdf_text_name("/osuperior"))
    0xB0 => Some(pdf_text_name("/fiveinferior"))
    0xB2 => Some(pdf_text_name("/commainferior"))
    0xB3 => Some(pdf_text_name("/periodinferior"))
    0xB4 => Some(pdf_text_name("/Yacutesmall"))
    0xB6 => Some(pdf_text_name("/dollarinferior"))
    0xB9 => Some(pdf_text_name("/Thornsmall"))
    0xBB => Some(pdf_text_name("/nineinferior"))
    0xBC => Some(pdf_text_name("/zeroinferior"))
    0xBD => Some(pdf_text_name("/Zcaronsmall"))
    0xBE => Some(pdf_text_name("/AEsmall"))
    0xBF => Some(pdf_text_name("/Oslashsmall"))
    0xC0 => Some(pdf_text_name("/questiondownsmall"))
    0xC1 => Some(pdf_text_name("/oneinferior"))
    0xC2 => Some(pdf_text_name("/Lslashsmall"))
    0xC9 => Some(pdf_text_name("/Cedillasmall"))
    0xCF => Some(pdf_text_name("/OEsmall"))
    0xD0 => Some(pdf_text_name("/figuredash"))
    0xD6 => Some(pdf_text_name("/exclamdownsmall"))
    0xD8 => Some(pdf_text_name("/Ydieresissmall"))
    0xDA => Some(pdf_text_name("/onesuperior"))
    0xDB => Some(pdf_text_name("/twosuperior"))
    0xDC => Some(pdf_text_name("/threesuperior"))
    0xDD => Some(pdf_text_name("/foursuperior"))
    0xDE => Some(pdf_text_name("/fivesuperior"))
    0xDF => Some(pdf_text_name("/sixsuperior"))
    0xE0 => Some(pdf_text_name("/sevensuperior"))
    0xE1 => Some(pdf_text_name("/ninesuperior"))
    0xE2 => Some(pdf_text_name("/zerosuperior"))
    0xE4 => Some(pdf_text_name("/esuperior"))
    0xE5 => Some(pdf_text_name("/rsuperior"))
    0xE6 => Some(pdf_text_name("/tsuperior"))
    0xE9 => Some(pdf_text_name("/isuperior"))
    0xEA => Some(pdf_text_name("/ssuperior"))
    0xEB => Some(pdf_text_name("/dsuperior"))
    0xF1 => Some(pdf_text_name("/lsuperior"))
    0xF2 => Some(pdf_text_name("/Ogoneksmall"))
    0xF3 => Some(pdf_text_name("/Brevesmall"))
    0xF4 => Some(pdf_text_name("/Macronsmall"))
    0xF5 => Some(pdf_text_name("/bsuperior"))
    0xF6 => Some(pdf_text_name("/nsuperior"))
    0xF7 => Some(pdf_text_name("/msuperior"))
    0xF8 => Some(pdf_text_name("/commasuperior"))
    0xF9 => Some(pdf_text_name("/periodsuperior"))
    0xFA => Some(pdf_text_name("/Dotaccentsmall"))
    0xFB => Some(pdf_text_name("/Ringsmall"))
    _ => None
  }
}

///|
fn pdf_text_symbol_glyphname(code : Int) -> PdfName? {
  match code {
    0x20 => Some(pdf_text_glyph_space_name)
    0x21 => Some(pdf_text_name("/exclam"))
    0x22 => Some(pdf_text_name("/universal"))
    0x23 => Some(pdf_text_name("/numbersign"))
    0x24 => Some(pdf_text_name("/existential"))
    0x25 => Some(pdf_text_name("/percent"))
    0x26 => Some(pdf_text_name("/ampersand"))
    0x27 => Some(pdf_text_name("/suchthat"))
    0x28 => Some(pdf_text_name("/parenleft"))
    0x29 => Some(pdf_text_name("/parenright"))
    0x2A => Some(pdf_text_name("/asteriskmath"))
    0x2B => Some(pdf_text_name("/plus"))
    0x2C => Some(pdf_text_name("/comma"))
    0x2D => Some(pdf_text_name("/minus"))
    0x2E => Some(pdf_text_name("/period"))
    0x2F => Some(pdf_text_name("/slash"))
    0x30 => Some(pdf_text_name("/zero"))
    0x31 => Some(pdf_text_name("/one"))
    0x32 => Some(pdf_text_name("/two"))
    0x33 => Some(pdf_text_name("/three"))
    0x34 => Some(pdf_text_name("/four"))
    0x35 => Some(pdf_text_name("/five"))
    0x36 => Some(pdf_text_name("/six"))
    0x37 => Some(pdf_text_name("/seven"))
    0x38 => Some(pdf_text_name("/eight"))
    0x39 => Some(pdf_text_name("/nine"))
    0x3A => Some(pdf_text_name("/colon"))
    0x3B => Some(pdf_text_name("/semicolon"))
    0x3C => Some(pdf_text_name("/less"))
    0x3D => Some(pdf_text_name("/equal"))
    0x3E => Some(pdf_text_name("/greater"))
    0x3F => Some(pdf_text_name("/question"))
    0x40 => Some(pdf_text_name("/congruent"))
    0x41 => Some(pdf_text_name("/Alpha"))
    0x42 => Some(pdf_text_name("/Beta"))
    0x43 => Some(pdf_text_name("/Chi"))
    0x44 => Some(pdf_text_name("/Delta"))
    0x45 => Some(pdf_text_name("/Epsilon"))
    0x46 => Some(pdf_text_name("/Phi"))
    0x47 => Some(pdf_text_name("/Gamma"))
    0x48 => Some(pdf_text_name("/Eta"))
    0x49 => Some(pdf_text_name("/Iota"))
    0x4A => Some(pdf_text_name("/theta1"))
    0x4B => Some(pdf_text_name("/Kappa"))
    0x4C => Some(pdf_text_name("/Lambda"))
    0x4D => Some(pdf_text_name("/Mu"))
    0x4E => Some(pdf_text_name("/Nu"))
    0x4F => Some(pdf_text_name("/Omicron"))
    0x50 => Some(pdf_text_name("/Pi"))
    0x51 => Some(pdf_text_name("/Theta"))
    0x52 => Some(pdf_text_name("/Rho"))
    0x53 => Some(pdf_text_name("/Sigma"))
    0x54 => Some(pdf_text_name("/Tau"))
    0x55 => Some(pdf_text_name("/Upsilon"))
    0x56 => Some(pdf_text_name("/sigma1"))
    0x57 => Some(pdf_text_name("/Omega"))
    0x58 => Some(pdf_text_name("/Xi"))
    0x59 => Some(pdf_text_name("/Psi"))
    0x5A => Some(pdf_text_name("/Zeta"))
    0x5B => Some(pdf_text_name("/bracketleft"))
    0x5C => Some(pdf_text_name("/therefore"))
    0x5D => Some(pdf_text_name("/bracketright"))
    0x5E => Some(pdf_text_name("/perpendicular"))
    0x5F => Some(pdf_text_name("/underscore"))
    0x60 => Some(pdf_text_name("/radicalex"))
    0x61 => Some(pdf_text_name("/alpha"))
    0x62 => Some(pdf_text_name("/beta"))
    0x63 => Some(pdf_text_name("/chi"))
    0x64 => Some(pdf_text_name("/delta"))
    0x65 => Some(pdf_text_name("/epsilon"))
    0x66 => Some(pdf_text_name("/phi"))
    0x67 => Some(pdf_text_name("/gamma"))
    0x68 => Some(pdf_text_name("/eta"))
    0x69 => Some(pdf_text_name("/iota"))
    0x6A => Some(pdf_text_name("/phi1"))
    0x6B => Some(pdf_text_name("/kappa"))
    0x6C => Some(pdf_text_name("/lambda"))
    0x6D => Some(pdf_text_name("/mu"))
    0x6E => Some(pdf_text_name("/nu"))
    0x6F => Some(pdf_text_name("/omicron"))
    0x70 => Some(pdf_text_name("/pi"))
    0x71 => Some(pdf_text_name("/theta"))
    0x72 => Some(pdf_text_name("/rho"))
    0x73 => Some(pdf_text_name("/sigma"))
    0x74 => Some(pdf_text_name("/tau"))
    0x75 => Some(pdf_text_name("/upsilon"))
    0x76 => Some(pdf_text_name("/omega1"))
    0x77 => Some(pdf_text_name("/omega"))
    0x78 => Some(pdf_text_name("/xi"))
    0x79 => Some(pdf_text_name("/psi"))
    0x7A => Some(pdf_text_name("/zeta"))
    0x7B => Some(pdf_text_name("/braceleft"))
    0x7C => Some(pdf_text_name("/bar"))
    0x7D => Some(pdf_text_name("/braceright"))
    0x7E => Some(pdf_text_name("/similar"))
    0xA0 => Some(pdf_text_name("/Euro"))
    0xA1 => Some(pdf_text_name("/Upsilon1"))
    0xA2 => Some(pdf_text_name("/minute"))
    0xA3 => Some(pdf_text_name("/lessequal"))
    0xA4 => Some(pdf_text_name("/fraction"))
    0xA5 => Some(pdf_text_name("/infinity"))
    0xA6 => Some(pdf_text_name("/florin"))
    0xA7 => Some(pdf_text_name("/club"))
    0xA8 => Some(pdf_text_name("/diamond"))
    0xA9 => Some(pdf_text_name("/heart"))
    0xAA => Some(pdf_text_name("/spade"))
    0xAB => Some(pdf_text_name("/arrowboth"))
    0xAC => Some(pdf_text_name("/arrowleft"))
    0xAD => Some(pdf_text_name("/arrowup"))
    0xAE => Some(pdf_text_name("/arrowright"))
    0xAF => Some(pdf_text_name("/arrowdown"))
    0xB0 => Some(pdf_text_name("/degree"))
    0xB1 => Some(pdf_text_name("/plusminus"))
    0xB2 => Some(pdf_text_name("/second"))
    0xB3 => Some(pdf_text_name("/greaterequal"))
    0xB4 => Some(pdf_text_name("/multiply"))
    0xB5 => Some(pdf_text_name("/proportional"))
    0xB6 => Some(pdf_text_name("/partialdiff"))
    0xB7 => Some(pdf_text_name("/bullet"))
    0xB8 => Some(pdf_text_name("/divide"))
    0xB9 => Some(pdf_text_name("/notequal"))
    0xBA => Some(pdf_text_name("/equivalence"))
    0xBB => Some(pdf_text_name("/approxequal"))
    0xBC => Some(pdf_text_name("/ellipsis"))
    0xBD => Some(pdf_text_name("/arrowvertex"))
    0xBE => Some(pdf_text_name("/arrowhorizex"))
    0xBF => Some(pdf_text_name("/carriagereturn"))
    0xC0 => Some(pdf_text_name("/aleph"))
    0xC1 => Some(pdf_text_name("/Ifraktur"))
    0xC2 => Some(pdf_text_name("/Rfraktur"))
    0xC3 => Some(pdf_text_name("/weierstrass"))
    0xC4 => Some(pdf_text_name("/circlemultiply"))
    0xC5 => Some(pdf_text_name("/circleplus"))
    0xC6 => Some(pdf_text_name("/emptyset"))
    0xC7 => Some(pdf_text_name("/intersection"))
    0xC8 => Some(pdf_text_name("/union"))
    0xC9 => Some(pdf_text_name("/propersuperset"))
    0xCA => Some(pdf_text_name("/reflexsuperset"))
    0xCB => Some(pdf_text_name("/notsubset"))
    0xCC => Some(pdf_text_name("/propersubset"))
    0xCD => Some(pdf_text_name("/reflexsubset"))
    0xCE => Some(pdf_text_name("/element"))
    0xCF => Some(pdf_text_name("/notelement"))
    0xD0 => Some(pdf_text_name("/angle"))
    0xD1 => Some(pdf_text_name("/gradient"))
    0xD2 => Some(pdf_text_name("/registerserif"))
    0xD3 => Some(pdf_text_name("/copyrightserif"))
    0xD4 => Some(pdf_text_name("/trademarkserif"))
    0xD5 => Some(pdf_text_name("/product"))
    0xD6 => Some(pdf_text_name("/radical"))
    0xD7 => Some(pdf_text_name("/dotmath"))
    0xD8 => Some(pdf_text_name("/logicalnot"))
    0xD9 => Some(pdf_text_name("/logicaland"))
    0xDA => Some(pdf_text_name("/logicalor"))
    0xDB => Some(pdf_text_name("/arrowdblboth"))
    0xDC => Some(pdf_text_name("/arrowdblleft"))
    0xDD => Some(pdf_text_name("/arrowdblup"))
    0xDE => Some(pdf_text_name("/arrowdblright"))
    0xDF => Some(pdf_text_name("/arrowdbldown"))
    0xE0 => Some(pdf_text_name("/lozenge"))
    0xE1 => Some(pdf_text_name("/angleleft"))
    0xE2 => Some(pdf_text_name("/registersans"))
    0xE3 => Some(pdf_text_name("/copyrightsans"))
    0xE4 => Some(pdf_text_name("/trademarksans"))
    0xE5 => Some(pdf_text_name("/summation"))
    0xE6 => Some(pdf_text_name("/parenlefttp"))
    0xE7 => Some(pdf_text_name("/parenleftex"))
    0xE8 => Some(pdf_text_name("/parenleftbt"))
    0xE9 => Some(pdf_text_name("/bracketlefttp"))
    0xEA => Some(pdf_text_name("/bracketleftex"))
    0xEB => Some(pdf_text_name("/bracketleftbt"))
    0xEC => Some(pdf_text_name("/bracelefttp"))
    0xED => Some(pdf_text_name("/braceleftmid"))
    0xEE => Some(pdf_text_name("/braceleftbt"))
    0xEF => Some(pdf_text_name("/braceex"))
    0xF1 => Some(pdf_text_name("/angleright"))
    0xF2 => Some(pdf_text_name("/integral"))
    0xF3 => Some(pdf_text_name("/integraltp"))
    0xF4 => Some(pdf_text_name("/integralex"))
    0xF5 => Some(pdf_text_name("/integralbt"))
    0xF6 => Some(pdf_text_name("/parenrighttp"))
    0xF7 => Some(pdf_text_name("/parenrightex"))
    0xF8 => Some(pdf_text_name("/parenrightbt"))
    0xF9 => Some(pdf_text_name("/bracketrighttp"))
    0xFA => Some(pdf_text_name("/bracketrightex"))
    0xFB => Some(pdf_text_name("/bracketrightbt"))
    0xFC => Some(pdf_text_name("/bracerighttp"))
    0xFD => Some(pdf_text_name("/bracerightmid"))
    0xFE => Some(pdf_text_name("/bracerightbt"))
    _ => None
  }
}

///|
fn pdf_text_zapfdingbats_glyphname(code : Int) -> PdfName? {
  match code {
    0x20 => Some(pdf_text_glyph_space_name)
    0x21 => Some(pdf_text_name("/a1"))
    0x22 => Some(pdf_text_name("/a2"))
    0x23 => Some(pdf_text_name("/a202"))
    0x24 => Some(pdf_text_name("/a3"))
    0x25 => Some(pdf_text_name("/a4"))
    0x26 => Some(pdf_text_name("/a5"))
    0x27 => Some(pdf_text_name("/a119"))
    0x28 => Some(pdf_text_name("/a118"))
    0x29 => Some(pdf_text_name("/a117"))
    0x2A => Some(pdf_text_name("/a11"))
    0x2B => Some(pdf_text_name("/a12"))
    0x2C => Some(pdf_text_name("/a13"))
    0x2D => Some(pdf_text_name("/a14"))
    0x2E => Some(pdf_text_name("/a15"))
    0x2F => Some(pdf_text_name("/a16"))
    0x30 => Some(pdf_text_name("/a105"))
    0x31 => Some(pdf_text_name("/a17"))
    0x32 => Some(pdf_text_name("/a18"))
    0x33 => Some(pdf_text_name("/a19"))
    0x34 => Some(pdf_text_name("/a20"))
    0x35 => Some(pdf_text_name("/a21"))
    0x36 => Some(pdf_text_name("/a22"))
    0x37 => Some(pdf_text_name("/a23"))
    0x38 => Some(pdf_text_name("/a24"))
    0x39 => Some(pdf_text_name("/a25"))
    0x3A => Some(pdf_text_name("/a26"))
    0x3B => Some(pdf_text_name("/a27"))
    0x3C => Some(pdf_text_name("/a28"))
    0x3D => Some(pdf_text_name("/a6"))
    0x3E => Some(pdf_text_name("/a7"))
    0x3F => Some(pdf_text_name("/a8"))
    0x40 => Some(pdf_text_name("/a9"))
    0x41 => Some(pdf_text_name("/a10"))
    0x42 => Some(pdf_text_name("/a29"))
    0x43 => Some(pdf_text_name("/a30"))
    0x44 => Some(pdf_text_name("/a31"))
    0x45 => Some(pdf_text_name("/a32"))
    0x46 => Some(pdf_text_name("/a33"))
    0x47 => Some(pdf_text_name("/a34"))
    0x48 => Some(pdf_text_name("/a35"))
    0x49 => Some(pdf_text_name("/a36"))
    0x4A => Some(pdf_text_name("/a37"))
    0x4B => Some(pdf_text_name("/a38"))
    0x4C => Some(pdf_text_name("/a39"))
    0x4D => Some(pdf_text_name("/a40"))
    0x4E => Some(pdf_text_name("/a41"))
    0x4F => Some(pdf_text_name("/a42"))
    0x50 => Some(pdf_text_name("/a43"))
    0x51 => Some(pdf_text_name("/a44"))
    0x52 => Some(pdf_text_name("/a45"))
    0x53 => Some(pdf_text_name("/a46"))
    0x54 => Some(pdf_text_name("/a47"))
    0x55 => Some(pdf_text_name("/a48"))
    0x56 => Some(pdf_text_name("/a49"))
    0x57 => Some(pdf_text_name("/a50"))
    0x58 => Some(pdf_text_name("/a51"))
    0x59 => Some(pdf_text_name("/a52"))
    0x5A => Some(pdf_text_name("/a53"))
    0x5B => Some(pdf_text_name("/a54"))
    0x5C => Some(pdf_text_name("/a55"))
    0x5D => Some(pdf_text_name("/a56"))
    0x5E => Some(pdf_text_name("/a57"))
    0x5F => Some(pdf_text_name("/a58"))
    0x60 => Some(pdf_text_name("/a59"))
    0x61 => Some(pdf_text_name("/a60"))
    0x62 => Some(pdf_text_name("/a61"))
    0x63 => Some(pdf_text_name("/a62"))
    0x64 => Some(pdf_text_name("/a63"))
    0x65 => Some(pdf_text_name("/a64"))
    0x66 => Some(pdf_text_name("/a65"))
    0x67 => Some(pdf_text_name("/a66"))
    0x68 => Some(pdf_text_name("/a67"))
    0x69 => Some(pdf_text_name("/a68"))
    0x6A => Some(pdf_text_name("/a69"))
    0x6B => Some(pdf_text_name("/a70"))
    0x6C => Some(pdf_text_name("/a71"))
    0x6D => Some(pdf_text_name("/a72"))
    0x6E => Some(pdf_text_name("/a73"))
    0x6F => Some(pdf_text_name("/a74"))
    0x70 => Some(pdf_text_name("/a203"))
    0x71 => Some(pdf_text_name("/a75"))
    0x72 => Some(pdf_text_name("/a204"))
    0x73 => Some(pdf_text_name("/a76"))
    0x74 => Some(pdf_text_name("/a77"))
    0x75 => Some(pdf_text_name("/a78"))
    0x76 => Some(pdf_text_name("/a79"))
    0x77 => Some(pdf_text_name("/a81"))
    0x78 => Some(pdf_text_name("/a82"))
    0x79 => Some(pdf_text_name("/a83"))
    0x7A => Some(pdf_text_name("/a84"))
    0x7B => Some(pdf_text_name("/a97"))
    0x7C => Some(pdf_text_name("/a98"))
    0x7D => Some(pdf_text_name("/a99"))
    0x7E => Some(pdf_text_name("/a100"))
    0xA1 => Some(pdf_text_name("/a101"))
    0xA2 => Some(pdf_text_name("/a102"))
    0xA3 => Some(pdf_text_name("/a103"))
    0xA4 => Some(pdf_text_name("/a104"))
    0xA5 => Some(pdf_text_name("/a106"))
    0xA6 => Some(pdf_text_name("/a107"))
    0xA7 => Some(pdf_text_name("/a108"))
    0xA8 => Some(pdf_text_name("/a112"))
    0xA9 => Some(pdf_text_name("/a111"))
    0xAA => Some(pdf_text_name("/a110"))
    0xAB => Some(pdf_text_name("/a109"))
    0xAC => Some(pdf_text_name("/a120"))
    0xAD => Some(pdf_text_name("/a121"))
    0xAE => Some(pdf_text_name("/a122"))
    0xAF => Some(pdf_text_name("/a123"))
    0xB0 => Some(pdf_text_name("/a124"))
    0xB1 => Some(pdf_text_name("/a125"))
    0xB2 => Some(pdf_text_name("/a126"))
    0xB3 => Some(pdf_text_name("/a127"))
    0xB4 => Some(pdf_text_name("/a128"))
    0xB5 => Some(pdf_text_name("/a129"))
    0xB6 => Some(pdf_text_name("/a130"))
    0xB7 => Some(pdf_text_name("/a131"))
    0xB8 => Some(pdf_text_name("/a132"))
    0xB9 => Some(pdf_text_name("/a133"))
    0xBA => Some(pdf_text_name("/a134"))
    0xBB => Some(pdf_text_name("/a135"))
    0xBC => Some(pdf_text_name("/a136"))
    0xBD => Some(pdf_text_name("/a137"))
    0xBE => Some(pdf_text_name("/a138"))
    0xBF => Some(pdf_text_name("/a139"))
    0xC0 => Some(pdf_text_name("/a140"))
    0xC1 => Some(pdf_text_name("/a141"))
    0xC2 => Some(pdf_text_name("/a142"))
    0xC3 => Some(pdf_text_name("/a143"))
    0xC4 => Some(pdf_text_name("/a144"))
    0xC5 => Some(pdf_text_name("/a145"))
    0xC6 => Some(pdf_text_name("/a146"))
    0xC7 => Some(pdf_text_name("/a147"))
    0xC8 => Some(pdf_text_name("/a148"))
    0xC9 => Some(pdf_text_name("/a149"))
    0xCA => Some(pdf_text_name("/a150"))
    0xCB => Some(pdf_text_name("/a151"))
    0xCC => Some(pdf_text_name("/a152"))
    0xCD => Some(pdf_text_name("/a153"))
    0xCE => Some(pdf_text_name("/a154"))
    0xCF => Some(pdf_text_name("/a155"))
    0xD0 => Some(pdf_text_name("/a156"))
    0xD1 => Some(pdf_text_name("/a157"))
    0xD2 => Some(pdf_text_name("/a158"))
    0xD3 => Some(pdf_text_name("/a159"))
    0xD4 => Some(pdf_text_name("/a160"))
    0xD5 => Some(pdf_text_name("/a161"))
    0xD6 => Some(pdf_text_name("/a163"))
    0xD7 => Some(pdf_text_name("/a164"))
    0xD8 => Some(pdf_text_name("/a196"))
    0xD9 => Some(pdf_text_name("/a165"))
    0xDA => Some(pdf_text_name("/a192"))
    0xDB => Some(pdf_text_name("/a166"))
    0xDC => Some(pdf_text_name("/a167"))
    0xDD => Some(pdf_text_name("/a168"))
    0xDE => Some(pdf_text_name("/a169"))
    0xDF => Some(pdf_text_name("/a170"))
    0xE0 => Some(pdf_text_name("/a171"))
    0xE1 => Some(pdf_text_name("/a172"))
    0xE2 => Some(pdf_text_name("/a173"))
    0xE3 => Some(pdf_text_name("/a162"))
    0xE4 => Some(pdf_text_name("/a174"))
    0xE5 => Some(pdf_text_name("/a175"))
    0xE6 => Some(pdf_text_name("/a176"))
    0xE7 => Some(pdf_text_name("/a177"))
    0xE8 => Some(pdf_text_name("/a178"))
    0xE9 => Some(pdf_text_name("/a179"))
    0xEA => Some(pdf_text_name("/a193"))
    0xEB => Some(pdf_text_name("/a180"))
    0xEC => Some(pdf_text_name("/a199"))
    0xED => Some(pdf_text_name("/a181"))
    0xEE => Some(pdf_text_name("/a200"))
    0xEF => Some(pdf_text_name("/a182"))
    0xF1 => Some(pdf_text_name("/a201"))
    0xF2 => Some(pdf_text_name("/a183"))
    0xF3 => Some(pdf_text_name("/a184"))
    0xF4 => Some(pdf_text_name("/a197"))
    0xF5 => Some(pdf_text_name("/a185"))
    0xF6 => Some(pdf_text_name("/a194"))
    0xF7 => Some(pdf_text_name("/a198"))
    0xF8 => Some(pdf_text_name("/a186"))
    0xF9 => Some(pdf_text_name("/a195"))
    0xFA => Some(pdf_text_name("/a187"))
    0xFB => Some(pdf_text_name("/a188"))
    0xFC => Some(pdf_text_name("/a189"))
    0xFD => Some(pdf_text_name("/a190"))
    0xFE => Some(pdf_text_name("/a191"))
    _ => None
  }
}

///|
fn pdf_text_difference_glyphname(
  differences : ArrayView[PdfEncodingDifference],
  code : Int,
) -> PdfName? {
  let mut found : PdfName? = None
  for difference in differences {
    if difference.code == code {
      found = Some(difference.name)
    }
  }
  found
}

///|
fn PdfEncoding::pdf_text_glyphname_of_charcode(
  self : PdfEncoding,
  code : Int,
) -> PdfName? {
  match self {
    PdfImplicitInFontFile => None
    PdfStandardEncoding => pdf_text_standard_glyphname(code)
    PdfMacRomanEncoding => pdf_text_macroman_glyphname(code)
    PdfWinAnsiEncoding => pdf_text_winansi_glyphname(code)
    PdfMacExpertEncoding => pdf_text_macexpert_glyphname(code)
    PdfCustomEncoding(base, differences) =>
      match pdf_text_difference_glyphname(differences, code) {
        Some(name) => Some(name)
        None => base.pdf_text_glyphname_of_charcode(code)
      }
    PdfFillUndefinedWithStandard(base) =>
      match base.pdf_text_glyphname_of_charcode(code) {
        Some(name) => Some(name)
        None => PdfStandardEncoding.pdf_text_glyphname_of_charcode(code)
      }
  }
}

///|
/// Expand this encoding to a table of defined character-code to glyph-name entries.
///
/// Only codes with a known glyph name are emitted. The table is ordered by
/// increasing one-byte character code.
pub fn PdfEncoding::table(self : PdfEncoding) -> Array[(Int, PdfName)] {
  let output : Array[(Int, PdfName)] = Array::new(capacity=256)
  for code in 0..<256 {
    match self.pdf_text_glyphname_of_charcode(code) {
      Some(name) => output.push((code, name))
      None => ()
    }
  }
  output
}

///|
/// Expand this encoding to glyph-name to character-code entries.
///
/// The order follows `table`; duplicate glyph names are preserved rather than
/// collapsed.
pub fn PdfEncoding::reverse_table(self : PdfEncoding) -> Array[(PdfName, Int)] {
  [
    for entry in self.table() => (entry.1, entry.0)
  ]
}

///|
/// Compatibility wrapper for `PdfEncoding::table`.
pub fn pdf_table_of_encoding(encoding : PdfEncoding) -> Array[(Int, PdfName)] {
  encoding.table()
}

///|
/// Compatibility wrapper for `PdfEncoding::reverse_table`.
pub fn pdf_reverse_table_of_encoding(
  encoding : PdfEncoding,
) -> Array[(PdfName, Int)] {
  encoding.reverse_table()
}

///|
fn PdfStandardFontData::pdf_text_glyphname_of_charcode(
  self : PdfStandardFontData,
  code : Int,
) -> PdfName? {
  match self.encoding {
    PdfImplicitInFontFile =>
      match self.font {
        PdfSymbol => pdf_text_symbol_glyphname(code)
        PdfZapfDingbats => pdf_text_zapfdingbats_glyphname(code)
        _ => PdfStandardEncoding.pdf_text_glyphname_of_charcode(code)
      }
    _ => self.encoding.pdf_text_glyphname_of_charcode(code)
  }
}

///|
fn PdfFont::pdf_text_glyphname_of_charcode(
  self : PdfFont,
  code : Int,
) -> PdfName? {
  match self {
    PdfFontStandard(data) => data.pdf_text_glyphname_of_charcode(code)
    PdfFontSimple(font) => font.encoding.pdf_text_glyphname_of_charcode(code)
    PdfFontCIDKeyed(_) => None
  }
}