@@ -0,0 +1,649 @@
//! Built-in glyph metrics for the 14 standard PDF fonts.
//!
//! PDFs may omit `/Widths` for non-embedded base-14 fonts (Times, Helvetica,
//! Courier, Symbol, ZapfDingbats); per the PDF spec the reader must supply
//! the metrics. Without them every text item gets width 0, which breaks
//! space synthesis, sub/superscript detection, and table column detection
//! (common in 1990s dvips/Distiller output).
//!
//! Tables are generated from the Adobe Core 14 AFM files (via reportlab's
//! `_fontdata`), keyed by Unicode char, sorted for binary search.
//! Generator: scratchpad/gen_base14.py (session tooling, not checked in).
/// Width in 1000ths of an em for `c` in the given base-14 font, or `None`
/// if the font is not one of the base 14 (after name normalization) or the
/// char has no glyph in its AFM.
pub ( crate ) fn base14_char_width ( base_font : & str , c : char ) -> Option < u16 > {
let table = base14_table ( base_font ) ? ;
// AFM tables key visible glyphs only; alias the invisible variants the
// cp1252 fallback can produce so they get the metric of their visible
// counterpart instead of the generic default.
let c = match c {
'\u{00A0}' = > ' ' , // no-break space -> space
'\u{00AD}' = > '-' , // soft hyphen -> hyphen
_ = > c ,
} ;
table
. binary_search_by_key ( & c , | & ( ch , _ ) | ch )
. ok ( )
. map ( | i | table [ i ] . 1 )
}
/// True when the base font name normalizes to one of the standard 14 fonts.
pub ( crate ) fn is_base14_font ( base_font : & str ) -> bool {
base14_table ( base_font ) . is_some ( )
}
/// Code → Unicode through the font's BUILT-IN encoding, for the base-14
/// fonts whose repertoire is not Latin (Symbol, ZapfDingbats). Their glyphs
/// live at byte positions that have nothing to do with cp1252 (Symbol 0x61
/// renders α , Zapf 0x21 renders ✁), so advance widths must be resolved
/// through this mapping — the renderer draws these glyphs regardless of how
/// the text decoder transliterates them. Returns `None` for the Latin text
/// fonts, which follow standard single-byte encodings.
pub ( crate ) fn builtin_encoding_char ( base_font : & str , code : u8 ) -> Option < char > {
let table = base14_table ( base_font ) ? ;
let enc : & [ ( u8 , char ) ] = if std ::ptr ::eq ( table , SYMBOL ) {
SYMBOL_ENCODING
} else if std ::ptr ::eq ( table , ZAPFDINGBATS ) {
ZAPFDINGBATS_ENCODING
} else {
return None ;
} ;
enc . binary_search_by_key ( & code , | & ( b , _ ) | b )
. ok ( )
. map ( | i | enc [ i ] . 1 )
}
/// Map a BaseFont name (possibly subset-prefixed, e.g. "ABCDEF+Times-Bold",
/// or a common alias like "Arial" / "TimesNewRomanPSMT") to its width table.
fn base14_table ( base_font : & str ) -> Option < & 'static [ ( char , u16 ) ] > {
// Strip subset prefix "ABCDEF+"
let name = match base_font . split_once ( '+' ) {
Some ( ( prefix , rest ) )
if prefix . len ( ) = = 6 & & prefix . chars ( ) . all ( | c | c . is_ascii_uppercase ( ) ) = >
{
rest
}
_ = > base_font ,
} ;
let lower = name . to_ascii_lowercase ( ) ;
let bold = lower . contains ( " bold " ) ;
let italic = lower . contains ( " italic " ) | | lower . contains ( " oblique " ) ;
if lower . contains ( " courier " ) {
return Some ( match ( bold , italic ) {
( false , false ) = > COURIER ,
( true , false ) = > COURIER_BOLD ,
( false , true ) = > COURIER_OBLIQUE ,
( true , true ) = > COURIER_BOLDOBLIQUE ,
} ) ;
}
if lower . contains ( " helvetica " ) | | lower . contains ( " arial " ) {
return Some ( match ( bold , italic ) {
( false , false ) = > HELVETICA ,
( true , false ) = > HELVETICA_BOLD ,
( false , true ) = > HELVETICA_OBLIQUE ,
( true , true ) = > HELVETICA_BOLDOBLIQUE ,
} ) ;
}
if lower . contains ( " times " ) {
return Some ( match ( bold , italic ) {
( false , false ) = > TIMES_ROMAN ,
( true , false ) = > TIMES_BOLD ,
( false , true ) = > TIMES_ITALIC ,
( true , true ) = > TIMES_BOLDITALIC ,
} ) ;
}
// Symbol and ZapfDingbats have unique glyph repertoires, so only exact
// names (plus the common MT/ITC aliases) qualify — a custom font that
// merely mentions "Symbol" in its name must not get these metrics.
match lower . as_str ( ) {
" zapfdingbats " | " dingbats " | " itczapfdingbats " | " zapfdingbatsitc " = > {
return Some ( ZAPFDINGBATS )
}
" symbol " | " symbolmt " | " symbolitc " = > return Some ( SYMBOL ) ,
_ = > { }
}
None
}
#[ rustfmt::skip ]
static COURIER : & [ ( char , u16 ) ] = & [
( ' ' , 600 ) , ( '!' , 600 ) , ( '"' , 600 ) , ( '#' , 600 ) , ( '$' , 600 ) , ( '%' , 600 ) ,
( '&' , 600 ) , ( '\'' , 600 ) , ( '(' , 600 ) , ( ')' , 600 ) , ( '*' , 600 ) , ( '+' , 600 ) ,
( ',' , 600 ) , ( '-' , 600 ) , ( '.' , 600 ) , ( '/' , 600 ) , ( '0' , 600 ) , ( '1' , 600 ) ,
( '2' , 600 ) , ( '3' , 600 ) , ( '4' , 600 ) , ( '5' , 600 ) , ( '6' , 600 ) , ( '7' , 600 ) ,
( '8' , 600 ) , ( '9' , 600 ) , ( ':' , 600 ) , ( ';' , 600 ) , ( '<' , 600 ) , ( '=' , 600 ) ,
( '>' , 600 ) , ( '?' , 600 ) , ( '@' , 600 ) , ( 'A' , 600 ) , ( 'B' , 600 ) , ( 'C' , 600 ) ,
( 'D' , 600 ) , ( 'E' , 600 ) , ( 'F' , 600 ) , ( 'G' , 600 ) , ( 'H' , 600 ) , ( 'I' , 600 ) ,
( 'J' , 600 ) , ( 'K' , 600 ) , ( 'L' , 600 ) , ( 'M' , 600 ) , ( 'N' , 600 ) , ( 'O' , 600 ) ,
( 'P' , 600 ) , ( 'Q' , 600 ) , ( 'R' , 600 ) , ( 'S' , 600 ) , ( 'T' , 600 ) , ( 'U' , 600 ) ,
( 'V' , 600 ) , ( 'W' , 600 ) , ( 'X' , 600 ) , ( 'Y' , 600 ) , ( 'Z' , 600 ) , ( '[' , 600 ) ,
( '\\' , 600 ) , ( ']' , 600 ) , ( '^' , 600 ) , ( '_' , 600 ) , ( '`' , 600 ) , ( 'a' , 600 ) ,
( 'b' , 600 ) , ( 'c' , 600 ) , ( 'd' , 600 ) , ( 'e' , 600 ) , ( 'f' , 600 ) , ( 'g' , 600 ) ,
( 'h' , 600 ) , ( 'i' , 600 ) , ( 'j' , 600 ) , ( 'k' , 600 ) , ( 'l' , 600 ) , ( 'm' , 600 ) ,
( 'n' , 600 ) , ( 'o' , 600 ) , ( 'p' , 600 ) , ( 'q' , 600 ) , ( 'r' , 600 ) , ( 's' , 600 ) ,
( 't' , 600 ) , ( 'u' , 600 ) , ( 'v' , 600 ) , ( 'w' , 600 ) , ( 'x' , 600 ) , ( 'y' , 600 ) ,
( 'z' , 600 ) , ( '{' , 600 ) , ( '|' , 600 ) , ( '}' , 600 ) , ( '~' , 600 ) , ( '\u{00A1}' , 600 ) ,
( '\u{00A2}' , 600 ) , ( '\u{00A3}' , 600 ) , ( '\u{00A4}' , 600 ) , ( '\u{00A5}' , 600 ) , ( '\u{00A6}' , 600 ) , ( '\u{00A7}' , 600 ) ,
( '\u{00A8}' , 600 ) , ( '\u{00A9}' , 600 ) , ( '\u{00AA}' , 600 ) , ( '\u{00AB}' , 600 ) , ( '\u{00AC}' , 600 ) , ( '\u{00AE}' , 600 ) ,
( '\u{00AF}' , 600 ) , ( '\u{00B0}' , 600 ) , ( '\u{00B1}' , 600 ) , ( '\u{00B2}' , 600 ) , ( '\u{00B3}' , 600 ) , ( '\u{00B4}' , 600 ) ,
( '\u{00B5}' , 600 ) , ( '\u{00B6}' , 600 ) , ( '\u{00B7}' , 600 ) , ( '\u{00B8}' , 600 ) , ( '\u{00B9}' , 600 ) , ( '\u{00BA}' , 600 ) ,
( '\u{00BB}' , 600 ) , ( '\u{00BC}' , 600 ) , ( '\u{00BD}' , 600 ) , ( '\u{00BE}' , 600 ) , ( '\u{00BF}' , 600 ) , ( '\u{00C0}' , 600 ) ,
( '\u{00C1}' , 600 ) , ( '\u{00C2}' , 600 ) , ( '\u{00C3}' , 600 ) , ( '\u{00C4}' , 600 ) , ( '\u{00C5}' , 600 ) , ( '\u{00C6}' , 600 ) ,
( '\u{00C7}' , 600 ) , ( '\u{00C8}' , 600 ) , ( '\u{00C9}' , 600 ) , ( '\u{00CA}' , 600 ) , ( '\u{00CB}' , 600 ) , ( '\u{00CC}' , 600 ) ,
( '\u{00CD}' , 600 ) , ( '\u{00CE}' , 600 ) , ( '\u{00CF}' , 600 ) , ( '\u{00D0}' , 600 ) , ( '\u{00D1}' , 600 ) , ( '\u{00D2}' , 600 ) ,
( '\u{00D3}' , 600 ) , ( '\u{00D4}' , 600 ) , ( '\u{00D5}' , 600 ) , ( '\u{00D6}' , 600 ) , ( '\u{00D7}' , 600 ) , ( '\u{00D8}' , 600 ) ,
( '\u{00D9}' , 600 ) , ( '\u{00DA}' , 600 ) , ( '\u{00DB}' , 600 ) , ( '\u{00DC}' , 600 ) , ( '\u{00DD}' , 600 ) , ( '\u{00DE}' , 600 ) ,
( '\u{00DF}' , 600 ) , ( '\u{00E0}' , 600 ) , ( '\u{00E1}' , 600 ) , ( '\u{00E2}' , 600 ) , ( '\u{00E3}' , 600 ) , ( '\u{00E4}' , 600 ) ,
( '\u{00E5}' , 600 ) , ( '\u{00E6}' , 600 ) , ( '\u{00E7}' , 600 ) , ( '\u{00E8}' , 600 ) , ( '\u{00E9}' , 600 ) , ( '\u{00EA}' , 600 ) ,
( '\u{00EB}' , 600 ) , ( '\u{00EC}' , 600 ) , ( '\u{00ED}' , 600 ) , ( '\u{00EE}' , 600 ) , ( '\u{00EF}' , 600 ) , ( '\u{00F0}' , 600 ) ,
( '\u{00F1}' , 600 ) , ( '\u{00F2}' , 600 ) , ( '\u{00F3}' , 600 ) , ( '\u{00F4}' , 600 ) , ( '\u{00F5}' , 600 ) , ( '\u{00F6}' , 600 ) ,
( '\u{00F7}' , 600 ) , ( '\u{00F8}' , 600 ) , ( '\u{00F9}' , 600 ) , ( '\u{00FA}' , 600 ) , ( '\u{00FB}' , 600 ) , ( '\u{00FC}' , 600 ) ,
( '\u{00FD}' , 600 ) , ( '\u{00FE}' , 600 ) , ( '\u{00FF}' , 600 ) , ( '\u{0131}' , 600 ) , ( '\u{0141}' , 600 ) , ( '\u{0142}' , 600 ) ,
( '\u{0152}' , 600 ) , ( '\u{0153}' , 600 ) , ( '\u{0160}' , 600 ) , ( '\u{0161}' , 600 ) , ( '\u{0178}' , 600 ) , ( '\u{017D}' , 600 ) ,
( '\u{017E}' , 600 ) , ( '\u{0192}' , 600 ) , ( '\u{02C6}' , 600 ) , ( '\u{02C7}' , 600 ) , ( '\u{02D8}' , 600 ) , ( '\u{02D9}' , 600 ) ,
( '\u{02DA}' , 600 ) , ( '\u{02DB}' , 600 ) , ( '\u{02DC}' , 600 ) , ( '\u{02DD}' , 600 ) , ( '\u{2013}' , 600 ) , ( '\u{2014}' , 600 ) ,
( '\u{2018}' , 600 ) , ( '\u{2019}' , 600 ) , ( '\u{201A}' , 600 ) , ( '\u{201C}' , 600 ) , ( '\u{201D}' , 600 ) , ( '\u{201E}' , 600 ) ,
( '\u{2020}' , 600 ) , ( '\u{2021}' , 600 ) , ( '\u{2022}' , 600 ) , ( '\u{2026}' , 600 ) , ( '\u{2030}' , 600 ) , ( '\u{2039}' , 600 ) ,
( '\u{203A}' , 600 ) , ( '\u{2044}' , 600 ) , ( '\u{20AC}' , 600 ) , ( '\u{2122}' , 600 ) , ( '\u{2212}' , 600 ) , ( '\u{FB01}' , 600 ) ,
( '\u{FB02}' , 600 ) ,
] ;
static COURIER_BOLD : & [ ( char , u16 ) ] = COURIER ;
static COURIER_OBLIQUE : & [ ( char , u16 ) ] = COURIER ;
static COURIER_BOLDOBLIQUE : & [ ( char , u16 ) ] = COURIER ;
#[ rustfmt::skip ]
static HELVETICA : & [ ( char , u16 ) ] = & [
( ' ' , 278 ) , ( '!' , 278 ) , ( '"' , 355 ) , ( '#' , 556 ) , ( '$' , 556 ) , ( '%' , 889 ) ,
( '&' , 667 ) , ( '\'' , 191 ) , ( '(' , 333 ) , ( ')' , 333 ) , ( '*' , 389 ) , ( '+' , 584 ) ,
( ',' , 278 ) , ( '-' , 333 ) , ( '.' , 278 ) , ( '/' , 278 ) , ( '0' , 556 ) , ( '1' , 556 ) ,
( '2' , 556 ) , ( '3' , 556 ) , ( '4' , 556 ) , ( '5' , 556 ) , ( '6' , 556 ) , ( '7' , 556 ) ,
( '8' , 556 ) , ( '9' , 556 ) , ( ':' , 278 ) , ( ';' , 278 ) , ( '<' , 584 ) , ( '=' , 584 ) ,
( '>' , 584 ) , ( '?' , 556 ) , ( '@' , 1015 ) , ( 'A' , 667 ) , ( 'B' , 667 ) , ( 'C' , 722 ) ,
( 'D' , 722 ) , ( 'E' , 667 ) , ( 'F' , 611 ) , ( 'G' , 778 ) , ( 'H' , 722 ) , ( 'I' , 278 ) ,
( 'J' , 500 ) , ( 'K' , 667 ) , ( 'L' , 556 ) , ( 'M' , 833 ) , ( 'N' , 722 ) , ( 'O' , 778 ) ,
( 'P' , 667 ) , ( 'Q' , 778 ) , ( 'R' , 722 ) , ( 'S' , 667 ) , ( 'T' , 611 ) , ( 'U' , 722 ) ,
( 'V' , 667 ) , ( 'W' , 944 ) , ( 'X' , 667 ) , ( 'Y' , 667 ) , ( 'Z' , 611 ) , ( '[' , 278 ) ,
( '\\' , 278 ) , ( ']' , 278 ) , ( '^' , 469 ) , ( '_' , 556 ) , ( '`' , 333 ) , ( 'a' , 556 ) ,
( 'b' , 556 ) , ( 'c' , 500 ) , ( 'd' , 556 ) , ( 'e' , 556 ) , ( 'f' , 278 ) , ( 'g' , 556 ) ,
( 'h' , 556 ) , ( 'i' , 222 ) , ( 'j' , 222 ) , ( 'k' , 500 ) , ( 'l' , 222 ) , ( 'm' , 833 ) ,
( 'n' , 556 ) , ( 'o' , 556 ) , ( 'p' , 556 ) , ( 'q' , 556 ) , ( 'r' , 333 ) , ( 's' , 500 ) ,
( 't' , 278 ) , ( 'u' , 556 ) , ( 'v' , 500 ) , ( 'w' , 722 ) , ( 'x' , 500 ) , ( 'y' , 500 ) ,
( 'z' , 500 ) , ( '{' , 334 ) , ( '|' , 260 ) , ( '}' , 334 ) , ( '~' , 584 ) , ( '\u{00A1}' , 333 ) ,
( '\u{00A2}' , 556 ) , ( '\u{00A3}' , 556 ) , ( '\u{00A4}' , 556 ) , ( '\u{00A5}' , 556 ) , ( '\u{00A6}' , 260 ) , ( '\u{00A7}' , 556 ) ,
( '\u{00A8}' , 333 ) , ( '\u{00A9}' , 737 ) , ( '\u{00AA}' , 370 ) , ( '\u{00AB}' , 556 ) , ( '\u{00AC}' , 584 ) , ( '\u{00AE}' , 737 ) ,
( '\u{00AF}' , 333 ) , ( '\u{00B0}' , 400 ) , ( '\u{00B1}' , 584 ) , ( '\u{00B2}' , 333 ) , ( '\u{00B3}' , 333 ) , ( '\u{00B4}' , 333 ) ,
( '\u{00B5}' , 556 ) , ( '\u{00B6}' , 537 ) , ( '\u{00B7}' , 278 ) , ( '\u{00B8}' , 333 ) , ( '\u{00B9}' , 333 ) , ( '\u{00BA}' , 365 ) ,
( '\u{00BB}' , 556 ) , ( '\u{00BC}' , 834 ) , ( '\u{00BD}' , 834 ) , ( '\u{00BE}' , 834 ) , ( '\u{00BF}' , 611 ) , ( '\u{00C0}' , 667 ) ,
( '\u{00C1}' , 667 ) , ( '\u{00C2}' , 667 ) , ( '\u{00C3}' , 667 ) , ( '\u{00C4}' , 667 ) , ( '\u{00C5}' , 667 ) , ( '\u{00C6}' , 1000 ) ,
( '\u{00C7}' , 722 ) , ( '\u{00C8}' , 667 ) , ( '\u{00C9}' , 667 ) , ( '\u{00CA}' , 667 ) , ( '\u{00CB}' , 667 ) , ( '\u{00CC}' , 278 ) ,
( '\u{00CD}' , 278 ) , ( '\u{00CE}' , 278 ) , ( '\u{00CF}' , 278 ) , ( '\u{00D0}' , 722 ) , ( '\u{00D1}' , 722 ) , ( '\u{00D2}' , 778 ) ,
( '\u{00D3}' , 778 ) , ( '\u{00D4}' , 778 ) , ( '\u{00D5}' , 778 ) , ( '\u{00D6}' , 778 ) , ( '\u{00D7}' , 584 ) , ( '\u{00D8}' , 778 ) ,
( '\u{00D9}' , 722 ) , ( '\u{00DA}' , 722 ) , ( '\u{00DB}' , 722 ) , ( '\u{00DC}' , 722 ) , ( '\u{00DD}' , 667 ) , ( '\u{00DE}' , 667 ) ,
( '\u{00DF}' , 611 ) , ( '\u{00E0}' , 556 ) , ( '\u{00E1}' , 556 ) , ( '\u{00E2}' , 556 ) , ( '\u{00E3}' , 556 ) , ( '\u{00E4}' , 556 ) ,
( '\u{00E5}' , 556 ) , ( '\u{00E6}' , 889 ) , ( '\u{00E7}' , 500 ) , ( '\u{00E8}' , 556 ) , ( '\u{00E9}' , 556 ) , ( '\u{00EA}' , 556 ) ,
( '\u{00EB}' , 556 ) , ( '\u{00EC}' , 278 ) , ( '\u{00ED}' , 278 ) , ( '\u{00EE}' , 278 ) , ( '\u{00EF}' , 278 ) , ( '\u{00F0}' , 556 ) ,
( '\u{00F1}' , 556 ) , ( '\u{00F2}' , 556 ) , ( '\u{00F3}' , 556 ) , ( '\u{00F4}' , 556 ) , ( '\u{00F5}' , 556 ) , ( '\u{00F6}' , 556 ) ,
( '\u{00F7}' , 584 ) , ( '\u{00F8}' , 611 ) , ( '\u{00F9}' , 556 ) , ( '\u{00FA}' , 556 ) , ( '\u{00FB}' , 556 ) , ( '\u{00FC}' , 556 ) ,
( '\u{00FD}' , 500 ) , ( '\u{00FE}' , 556 ) , ( '\u{00FF}' , 500 ) , ( '\u{0131}' , 278 ) , ( '\u{0141}' , 556 ) , ( '\u{0142}' , 222 ) ,
( '\u{0152}' , 1000 ) , ( '\u{0153}' , 944 ) , ( '\u{0160}' , 667 ) , ( '\u{0161}' , 500 ) , ( '\u{0178}' , 667 ) , ( '\u{017D}' , 611 ) ,
( '\u{017E}' , 500 ) , ( '\u{0192}' , 556 ) , ( '\u{02C6}' , 333 ) , ( '\u{02C7}' , 333 ) , ( '\u{02D8}' , 333 ) , ( '\u{02D9}' , 333 ) ,
( '\u{02DA}' , 333 ) , ( '\u{02DB}' , 333 ) , ( '\u{02DC}' , 333 ) , ( '\u{02DD}' , 333 ) , ( '\u{2013}' , 556 ) , ( '\u{2014}' , 1000 ) ,
( '\u{2018}' , 222 ) , ( '\u{2019}' , 222 ) , ( '\u{201A}' , 222 ) , ( '\u{201C}' , 333 ) , ( '\u{201D}' , 333 ) , ( '\u{201E}' , 333 ) ,
( '\u{2020}' , 556 ) , ( '\u{2021}' , 556 ) , ( '\u{2022}' , 350 ) , ( '\u{2026}' , 1000 ) , ( '\u{2030}' , 1000 ) , ( '\u{2039}' , 333 ) ,
( '\u{203A}' , 333 ) , ( '\u{2044}' , 167 ) , ( '\u{20AC}' , 556 ) , ( '\u{2122}' , 1000 ) , ( '\u{2212}' , 584 ) , ( '\u{FB01}' , 500 ) ,
( '\u{FB02}' , 500 ) ,
] ;
#[ rustfmt::skip ]
static HELVETICA_BOLD : & [ ( char , u16 ) ] = & [
( ' ' , 278 ) , ( '!' , 333 ) , ( '"' , 474 ) , ( '#' , 556 ) , ( '$' , 556 ) , ( '%' , 889 ) ,
( '&' , 722 ) , ( '\'' , 238 ) , ( '(' , 333 ) , ( ')' , 333 ) , ( '*' , 389 ) , ( '+' , 584 ) ,
( ',' , 278 ) , ( '-' , 333 ) , ( '.' , 278 ) , ( '/' , 278 ) , ( '0' , 556 ) , ( '1' , 556 ) ,
( '2' , 556 ) , ( '3' , 556 ) , ( '4' , 556 ) , ( '5' , 556 ) , ( '6' , 556 ) , ( '7' , 556 ) ,
( '8' , 556 ) , ( '9' , 556 ) , ( ':' , 333 ) , ( ';' , 333 ) , ( '<' , 584 ) , ( '=' , 584 ) ,
( '>' , 584 ) , ( '?' , 611 ) , ( '@' , 975 ) , ( 'A' , 722 ) , ( 'B' , 722 ) , ( 'C' , 722 ) ,
( 'D' , 722 ) , ( 'E' , 667 ) , ( 'F' , 611 ) , ( 'G' , 778 ) , ( 'H' , 722 ) , ( 'I' , 278 ) ,
( 'J' , 556 ) , ( 'K' , 722 ) , ( 'L' , 611 ) , ( 'M' , 833 ) , ( 'N' , 722 ) , ( 'O' , 778 ) ,
( 'P' , 667 ) , ( 'Q' , 778 ) , ( 'R' , 722 ) , ( 'S' , 667 ) , ( 'T' , 611 ) , ( 'U' , 722 ) ,
( 'V' , 667 ) , ( 'W' , 944 ) , ( 'X' , 667 ) , ( 'Y' , 667 ) , ( 'Z' , 611 ) , ( '[' , 333 ) ,
( '\\' , 278 ) , ( ']' , 333 ) , ( '^' , 584 ) , ( '_' , 556 ) , ( '`' , 333 ) , ( 'a' , 556 ) ,
( 'b' , 611 ) , ( 'c' , 556 ) , ( 'd' , 611 ) , ( 'e' , 556 ) , ( 'f' , 333 ) , ( 'g' , 611 ) ,
( 'h' , 611 ) , ( 'i' , 278 ) , ( 'j' , 278 ) , ( 'k' , 556 ) , ( 'l' , 278 ) , ( 'm' , 889 ) ,
( 'n' , 611 ) , ( 'o' , 611 ) , ( 'p' , 611 ) , ( 'q' , 611 ) , ( 'r' , 389 ) , ( 's' , 556 ) ,
( 't' , 333 ) , ( 'u' , 611 ) , ( 'v' , 556 ) , ( 'w' , 778 ) , ( 'x' , 556 ) , ( 'y' , 556 ) ,
( 'z' , 500 ) , ( '{' , 389 ) , ( '|' , 280 ) , ( '}' , 389 ) , ( '~' , 584 ) , ( '\u{00A1}' , 333 ) ,
( '\u{00A2}' , 556 ) , ( '\u{00A3}' , 556 ) , ( '\u{00A4}' , 556 ) , ( '\u{00A5}' , 556 ) , ( '\u{00A6}' , 280 ) , ( '\u{00A7}' , 556 ) ,
( '\u{00A8}' , 333 ) , ( '\u{00A9}' , 737 ) , ( '\u{00AA}' , 370 ) , ( '\u{00AB}' , 556 ) , ( '\u{00AC}' , 584 ) , ( '\u{00AE}' , 737 ) ,
( '\u{00AF}' , 333 ) , ( '\u{00B0}' , 400 ) , ( '\u{00B1}' , 584 ) , ( '\u{00B2}' , 333 ) , ( '\u{00B3}' , 333 ) , ( '\u{00B4}' , 333 ) ,
( '\u{00B5}' , 611 ) , ( '\u{00B6}' , 556 ) , ( '\u{00B7}' , 278 ) , ( '\u{00B8}' , 333 ) , ( '\u{00B9}' , 333 ) , ( '\u{00BA}' , 365 ) ,
( '\u{00BB}' , 556 ) , ( '\u{00BC}' , 834 ) , ( '\u{00BD}' , 834 ) , ( '\u{00BE}' , 834 ) , ( '\u{00BF}' , 611 ) , ( '\u{00C0}' , 722 ) ,
( '\u{00C1}' , 722 ) , ( '\u{00C2}' , 722 ) , ( '\u{00C3}' , 722 ) , ( '\u{00C4}' , 722 ) , ( '\u{00C5}' , 722 ) , ( '\u{00C6}' , 1000 ) ,
( '\u{00C7}' , 722 ) , ( '\u{00C8}' , 667 ) , ( '\u{00C9}' , 667 ) , ( '\u{00CA}' , 667 ) , ( '\u{00CB}' , 667 ) , ( '\u{00CC}' , 278 ) ,
( '\u{00CD}' , 278 ) , ( '\u{00CE}' , 278 ) , ( '\u{00CF}' , 278 ) , ( '\u{00D0}' , 722 ) , ( '\u{00D1}' , 722 ) , ( '\u{00D2}' , 778 ) ,
( '\u{00D3}' , 778 ) , ( '\u{00D4}' , 778 ) , ( '\u{00D5}' , 778 ) , ( '\u{00D6}' , 778 ) , ( '\u{00D7}' , 584 ) , ( '\u{00D8}' , 778 ) ,
( '\u{00D9}' , 722 ) , ( '\u{00DA}' , 722 ) , ( '\u{00DB}' , 722 ) , ( '\u{00DC}' , 722 ) , ( '\u{00DD}' , 667 ) , ( '\u{00DE}' , 667 ) ,
( '\u{00DF}' , 611 ) , ( '\u{00E0}' , 556 ) , ( '\u{00E1}' , 556 ) , ( '\u{00E2}' , 556 ) , ( '\u{00E3}' , 556 ) , ( '\u{00E4}' , 556 ) ,
( '\u{00E5}' , 556 ) , ( '\u{00E6}' , 889 ) , ( '\u{00E7}' , 556 ) , ( '\u{00E8}' , 556 ) , ( '\u{00E9}' , 556 ) , ( '\u{00EA}' , 556 ) ,
( '\u{00EB}' , 556 ) , ( '\u{00EC}' , 278 ) , ( '\u{00ED}' , 278 ) , ( '\u{00EE}' , 278 ) , ( '\u{00EF}' , 278 ) , ( '\u{00F0}' , 611 ) ,
( '\u{00F1}' , 611 ) , ( '\u{00F2}' , 611 ) , ( '\u{00F3}' , 611 ) , ( '\u{00F4}' , 611 ) , ( '\u{00F5}' , 611 ) , ( '\u{00F6}' , 611 ) ,
( '\u{00F7}' , 584 ) , ( '\u{00F8}' , 611 ) , ( '\u{00F9}' , 611 ) , ( '\u{00FA}' , 611 ) , ( '\u{00FB}' , 611 ) , ( '\u{00FC}' , 611 ) ,
( '\u{00FD}' , 556 ) , ( '\u{00FE}' , 611 ) , ( '\u{00FF}' , 556 ) , ( '\u{0131}' , 278 ) , ( '\u{0141}' , 611 ) , ( '\u{0142}' , 278 ) ,
( '\u{0152}' , 1000 ) , ( '\u{0153}' , 944 ) , ( '\u{0160}' , 667 ) , ( '\u{0161}' , 556 ) , ( '\u{0178}' , 667 ) , ( '\u{017D}' , 611 ) ,
( '\u{017E}' , 500 ) , ( '\u{0192}' , 556 ) , ( '\u{02C6}' , 333 ) , ( '\u{02C7}' , 333 ) , ( '\u{02D8}' , 333 ) , ( '\u{02D9}' , 333 ) ,
( '\u{02DA}' , 333 ) , ( '\u{02DB}' , 333 ) , ( '\u{02DC}' , 333 ) , ( '\u{02DD}' , 333 ) , ( '\u{2013}' , 556 ) , ( '\u{2014}' , 1000 ) ,
( '\u{2018}' , 278 ) , ( '\u{2019}' , 278 ) , ( '\u{201A}' , 278 ) , ( '\u{201C}' , 500 ) , ( '\u{201D}' , 500 ) , ( '\u{201E}' , 500 ) ,
( '\u{2020}' , 556 ) , ( '\u{2021}' , 556 ) , ( '\u{2022}' , 350 ) , ( '\u{2026}' , 1000 ) , ( '\u{2030}' , 1000 ) , ( '\u{2039}' , 333 ) ,
( '\u{203A}' , 333 ) , ( '\u{2044}' , 167 ) , ( '\u{20AC}' , 556 ) , ( '\u{2122}' , 1000 ) , ( '\u{2212}' , 584 ) , ( '\u{FB01}' , 611 ) ,
( '\u{FB02}' , 611 ) ,
] ;
static HELVETICA_OBLIQUE : & [ ( char , u16 ) ] = HELVETICA ;
static HELVETICA_BOLDOBLIQUE : & [ ( char , u16 ) ] = HELVETICA_BOLD ;
#[ rustfmt::skip ]
static TIMES_ROMAN : & [ ( char , u16 ) ] = & [
( ' ' , 250 ) , ( '!' , 333 ) , ( '"' , 408 ) , ( '#' , 500 ) , ( '$' , 500 ) , ( '%' , 833 ) ,
( '&' , 778 ) , ( '\'' , 180 ) , ( '(' , 333 ) , ( ')' , 333 ) , ( '*' , 500 ) , ( '+' , 564 ) ,
( ',' , 250 ) , ( '-' , 333 ) , ( '.' , 250 ) , ( '/' , 278 ) , ( '0' , 500 ) , ( '1' , 500 ) ,
( '2' , 500 ) , ( '3' , 500 ) , ( '4' , 500 ) , ( '5' , 500 ) , ( '6' , 500 ) , ( '7' , 500 ) ,
( '8' , 500 ) , ( '9' , 500 ) , ( ':' , 278 ) , ( ';' , 278 ) , ( '<' , 564 ) , ( '=' , 564 ) ,
( '>' , 564 ) , ( '?' , 444 ) , ( '@' , 921 ) , ( 'A' , 722 ) , ( 'B' , 667 ) , ( 'C' , 667 ) ,
( 'D' , 722 ) , ( 'E' , 611 ) , ( 'F' , 556 ) , ( 'G' , 722 ) , ( 'H' , 722 ) , ( 'I' , 333 ) ,
( 'J' , 389 ) , ( 'K' , 722 ) , ( 'L' , 611 ) , ( 'M' , 889 ) , ( 'N' , 722 ) , ( 'O' , 722 ) ,
( 'P' , 556 ) , ( 'Q' , 722 ) , ( 'R' , 667 ) , ( 'S' , 556 ) , ( 'T' , 611 ) , ( 'U' , 722 ) ,
( 'V' , 722 ) , ( 'W' , 944 ) , ( 'X' , 722 ) , ( 'Y' , 722 ) , ( 'Z' , 611 ) , ( '[' , 333 ) ,
( '\\' , 278 ) , ( ']' , 333 ) , ( '^' , 469 ) , ( '_' , 500 ) , ( '`' , 333 ) , ( 'a' , 444 ) ,
( 'b' , 500 ) , ( 'c' , 444 ) , ( 'd' , 500 ) , ( 'e' , 444 ) , ( 'f' , 333 ) , ( 'g' , 500 ) ,
( 'h' , 500 ) , ( 'i' , 278 ) , ( 'j' , 278 ) , ( 'k' , 500 ) , ( 'l' , 278 ) , ( 'm' , 778 ) ,
( 'n' , 500 ) , ( 'o' , 500 ) , ( 'p' , 500 ) , ( 'q' , 500 ) , ( 'r' , 333 ) , ( 's' , 389 ) ,
( 't' , 278 ) , ( 'u' , 500 ) , ( 'v' , 500 ) , ( 'w' , 722 ) , ( 'x' , 500 ) , ( 'y' , 500 ) ,
( 'z' , 444 ) , ( '{' , 480 ) , ( '|' , 200 ) , ( '}' , 480 ) , ( '~' , 541 ) , ( '\u{00A1}' , 333 ) ,
( '\u{00A2}' , 500 ) , ( '\u{00A3}' , 500 ) , ( '\u{00A4}' , 500 ) , ( '\u{00A5}' , 500 ) , ( '\u{00A6}' , 200 ) , ( '\u{00A7}' , 500 ) ,
( '\u{00A8}' , 333 ) , ( '\u{00A9}' , 760 ) , ( '\u{00AA}' , 276 ) , ( '\u{00AB}' , 500 ) , ( '\u{00AC}' , 564 ) , ( '\u{00AE}' , 760 ) ,
( '\u{00AF}' , 333 ) , ( '\u{00B0}' , 400 ) , ( '\u{00B1}' , 564 ) , ( '\u{00B2}' , 300 ) , ( '\u{00B3}' , 300 ) , ( '\u{00B4}' , 333 ) ,
( '\u{00B5}' , 500 ) , ( '\u{00B6}' , 453 ) , ( '\u{00B7}' , 250 ) , ( '\u{00B8}' , 333 ) , ( '\u{00B9}' , 300 ) , ( '\u{00BA}' , 310 ) ,
( '\u{00BB}' , 500 ) , ( '\u{00BC}' , 750 ) , ( '\u{00BD}' , 750 ) , ( '\u{00BE}' , 750 ) , ( '\u{00BF}' , 444 ) , ( '\u{00C0}' , 722 ) ,
( '\u{00C1}' , 722 ) , ( '\u{00C2}' , 722 ) , ( '\u{00C3}' , 722 ) , ( '\u{00C4}' , 722 ) , ( '\u{00C5}' , 722 ) , ( '\u{00C6}' , 889 ) ,
( '\u{00C7}' , 667 ) , ( '\u{00C8}' , 611 ) , ( '\u{00C9}' , 611 ) , ( '\u{00CA}' , 611 ) , ( '\u{00CB}' , 611 ) , ( '\u{00CC}' , 333 ) ,
( '\u{00CD}' , 333 ) , ( '\u{00CE}' , 333 ) , ( '\u{00CF}' , 333 ) , ( '\u{00D0}' , 722 ) , ( '\u{00D1}' , 722 ) , ( '\u{00D2}' , 722 ) ,
( '\u{00D3}' , 722 ) , ( '\u{00D4}' , 722 ) , ( '\u{00D5}' , 722 ) , ( '\u{00D6}' , 722 ) , ( '\u{00D7}' , 564 ) , ( '\u{00D8}' , 722 ) ,
( '\u{00D9}' , 722 ) , ( '\u{00DA}' , 722 ) , ( '\u{00DB}' , 722 ) , ( '\u{00DC}' , 722 ) , ( '\u{00DD}' , 722 ) , ( '\u{00DE}' , 556 ) ,
( '\u{00DF}' , 500 ) , ( '\u{00E0}' , 444 ) , ( '\u{00E1}' , 444 ) , ( '\u{00E2}' , 444 ) , ( '\u{00E3}' , 444 ) , ( '\u{00E4}' , 444 ) ,
( '\u{00E5}' , 444 ) , ( '\u{00E6}' , 667 ) , ( '\u{00E7}' , 444 ) , ( '\u{00E8}' , 444 ) , ( '\u{00E9}' , 444 ) , ( '\u{00EA}' , 444 ) ,
( '\u{00EB}' , 444 ) , ( '\u{00EC}' , 278 ) , ( '\u{00ED}' , 278 ) , ( '\u{00EE}' , 278 ) , ( '\u{00EF}' , 278 ) , ( '\u{00F0}' , 500 ) ,
( '\u{00F1}' , 500 ) , ( '\u{00F2}' , 500 ) , ( '\u{00F3}' , 500 ) , ( '\u{00F4}' , 500 ) , ( '\u{00F5}' , 500 ) , ( '\u{00F6}' , 500 ) ,
( '\u{00F7}' , 564 ) , ( '\u{00F8}' , 500 ) , ( '\u{00F9}' , 500 ) , ( '\u{00FA}' , 500 ) , ( '\u{00FB}' , 500 ) , ( '\u{00FC}' , 500 ) ,
( '\u{00FD}' , 500 ) , ( '\u{00FE}' , 500 ) , ( '\u{00FF}' , 500 ) , ( '\u{0131}' , 278 ) , ( '\u{0141}' , 611 ) , ( '\u{0142}' , 278 ) ,
( '\u{0152}' , 889 ) , ( '\u{0153}' , 722 ) , ( '\u{0160}' , 556 ) , ( '\u{0161}' , 389 ) , ( '\u{0178}' , 722 ) , ( '\u{017D}' , 611 ) ,
( '\u{017E}' , 444 ) , ( '\u{0192}' , 500 ) , ( '\u{02C6}' , 333 ) , ( '\u{02C7}' , 333 ) , ( '\u{02D8}' , 333 ) , ( '\u{02D9}' , 333 ) ,
( '\u{02DA}' , 333 ) , ( '\u{02DB}' , 333 ) , ( '\u{02DC}' , 333 ) , ( '\u{02DD}' , 333 ) , ( '\u{2013}' , 500 ) , ( '\u{2014}' , 1000 ) ,
( '\u{2018}' , 333 ) , ( '\u{2019}' , 333 ) , ( '\u{201A}' , 333 ) , ( '\u{201C}' , 444 ) , ( '\u{201D}' , 444 ) , ( '\u{201E}' , 444 ) ,
( '\u{2020}' , 500 ) , ( '\u{2021}' , 500 ) , ( '\u{2022}' , 350 ) , ( '\u{2026}' , 1000 ) , ( '\u{2030}' , 1000 ) , ( '\u{2039}' , 333 ) ,
( '\u{203A}' , 333 ) , ( '\u{2044}' , 167 ) , ( '\u{20AC}' , 500 ) , ( '\u{2122}' , 980 ) , ( '\u{2212}' , 564 ) , ( '\u{FB01}' , 556 ) ,
( '\u{FB02}' , 556 ) ,
] ;
#[ rustfmt::skip ]
static TIMES_BOLD : & [ ( char , u16 ) ] = & [
( ' ' , 250 ) , ( '!' , 333 ) , ( '"' , 555 ) , ( '#' , 500 ) , ( '$' , 500 ) , ( '%' , 1000 ) ,
( '&' , 833 ) , ( '\'' , 278 ) , ( '(' , 333 ) , ( ')' , 333 ) , ( '*' , 500 ) , ( '+' , 570 ) ,
( ',' , 250 ) , ( '-' , 333 ) , ( '.' , 250 ) , ( '/' , 278 ) , ( '0' , 500 ) , ( '1' , 500 ) ,
( '2' , 500 ) , ( '3' , 500 ) , ( '4' , 500 ) , ( '5' , 500 ) , ( '6' , 500 ) , ( '7' , 500 ) ,
( '8' , 500 ) , ( '9' , 500 ) , ( ':' , 333 ) , ( ';' , 333 ) , ( '<' , 570 ) , ( '=' , 570 ) ,
( '>' , 570 ) , ( '?' , 500 ) , ( '@' , 930 ) , ( 'A' , 722 ) , ( 'B' , 667 ) , ( 'C' , 722 ) ,
( 'D' , 722 ) , ( 'E' , 667 ) , ( 'F' , 611 ) , ( 'G' , 778 ) , ( 'H' , 778 ) , ( 'I' , 389 ) ,
( 'J' , 500 ) , ( 'K' , 778 ) , ( 'L' , 667 ) , ( 'M' , 944 ) , ( 'N' , 722 ) , ( 'O' , 778 ) ,
( 'P' , 611 ) , ( 'Q' , 778 ) , ( 'R' , 722 ) , ( 'S' , 556 ) , ( 'T' , 667 ) , ( 'U' , 722 ) ,
( 'V' , 722 ) , ( 'W' , 1000 ) , ( 'X' , 722 ) , ( 'Y' , 722 ) , ( 'Z' , 667 ) , ( '[' , 333 ) ,
( '\\' , 278 ) , ( ']' , 333 ) , ( '^' , 581 ) , ( '_' , 500 ) , ( '`' , 333 ) , ( 'a' , 500 ) ,
( 'b' , 556 ) , ( 'c' , 444 ) , ( 'd' , 556 ) , ( 'e' , 444 ) , ( 'f' , 333 ) , ( 'g' , 500 ) ,
( 'h' , 556 ) , ( 'i' , 278 ) , ( 'j' , 333 ) , ( 'k' , 556 ) , ( 'l' , 278 ) , ( 'm' , 833 ) ,
( 'n' , 556 ) , ( 'o' , 500 ) , ( 'p' , 556 ) , ( 'q' , 556 ) , ( 'r' , 444 ) , ( 's' , 389 ) ,
( 't' , 333 ) , ( 'u' , 556 ) , ( 'v' , 500 ) , ( 'w' , 722 ) , ( 'x' , 500 ) , ( 'y' , 500 ) ,
( 'z' , 444 ) , ( '{' , 394 ) , ( '|' , 220 ) , ( '}' , 394 ) , ( '~' , 520 ) , ( '\u{00A1}' , 333 ) ,
( '\u{00A2}' , 500 ) , ( '\u{00A3}' , 500 ) , ( '\u{00A4}' , 500 ) , ( '\u{00A5}' , 500 ) , ( '\u{00A6}' , 220 ) , ( '\u{00A7}' , 500 ) ,
( '\u{00A8}' , 333 ) , ( '\u{00A9}' , 747 ) , ( '\u{00AA}' , 300 ) , ( '\u{00AB}' , 500 ) , ( '\u{00AC}' , 570 ) , ( '\u{00AE}' , 747 ) ,
( '\u{00AF}' , 333 ) , ( '\u{00B0}' , 400 ) , ( '\u{00B1}' , 570 ) , ( '\u{00B2}' , 300 ) , ( '\u{00B3}' , 300 ) , ( '\u{00B4}' , 333 ) ,
( '\u{00B5}' , 556 ) , ( '\u{00B6}' , 540 ) , ( '\u{00B7}' , 250 ) , ( '\u{00B8}' , 333 ) , ( '\u{00B9}' , 300 ) , ( '\u{00BA}' , 330 ) ,
( '\u{00BB}' , 500 ) , ( '\u{00BC}' , 750 ) , ( '\u{00BD}' , 750 ) , ( '\u{00BE}' , 750 ) , ( '\u{00BF}' , 500 ) , ( '\u{00C0}' , 722 ) ,
( '\u{00C1}' , 722 ) , ( '\u{00C2}' , 722 ) , ( '\u{00C3}' , 722 ) , ( '\u{00C4}' , 722 ) , ( '\u{00C5}' , 722 ) , ( '\u{00C6}' , 1000 ) ,
( '\u{00C7}' , 722 ) , ( '\u{00C8}' , 667 ) , ( '\u{00C9}' , 667 ) , ( '\u{00CA}' , 667 ) , ( '\u{00CB}' , 667 ) , ( '\u{00CC}' , 389 ) ,
( '\u{00CD}' , 389 ) , ( '\u{00CE}' , 389 ) , ( '\u{00CF}' , 389 ) , ( '\u{00D0}' , 722 ) , ( '\u{00D1}' , 722 ) , ( '\u{00D2}' , 778 ) ,
( '\u{00D3}' , 778 ) , ( '\u{00D4}' , 778 ) , ( '\u{00D5}' , 778 ) , ( '\u{00D6}' , 778 ) , ( '\u{00D7}' , 570 ) , ( '\u{00D8}' , 778 ) ,
( '\u{00D9}' , 722 ) , ( '\u{00DA}' , 722 ) , ( '\u{00DB}' , 722 ) , ( '\u{00DC}' , 722 ) , ( '\u{00DD}' , 722 ) , ( '\u{00DE}' , 611 ) ,
( '\u{00DF}' , 556 ) , ( '\u{00E0}' , 500 ) , ( '\u{00E1}' , 500 ) , ( '\u{00E2}' , 500 ) , ( '\u{00E3}' , 500 ) , ( '\u{00E4}' , 500 ) ,
( '\u{00E5}' , 500 ) , ( '\u{00E6}' , 722 ) , ( '\u{00E7}' , 444 ) , ( '\u{00E8}' , 444 ) , ( '\u{00E9}' , 444 ) , ( '\u{00EA}' , 444 ) ,
( '\u{00EB}' , 444 ) , ( '\u{00EC}' , 278 ) , ( '\u{00ED}' , 278 ) , ( '\u{00EE}' , 278 ) , ( '\u{00EF}' , 278 ) , ( '\u{00F0}' , 500 ) ,
( '\u{00F1}' , 556 ) , ( '\u{00F2}' , 500 ) , ( '\u{00F3}' , 500 ) , ( '\u{00F4}' , 500 ) , ( '\u{00F5}' , 500 ) , ( '\u{00F6}' , 500 ) ,
( '\u{00F7}' , 570 ) , ( '\u{00F8}' , 500 ) , ( '\u{00F9}' , 556 ) , ( '\u{00FA}' , 556 ) , ( '\u{00FB}' , 556 ) , ( '\u{00FC}' , 556 ) ,
( '\u{00FD}' , 500 ) , ( '\u{00FE}' , 556 ) , ( '\u{00FF}' , 500 ) , ( '\u{0131}' , 278 ) , ( '\u{0141}' , 667 ) , ( '\u{0142}' , 278 ) ,
( '\u{0152}' , 1000 ) , ( '\u{0153}' , 722 ) , ( '\u{0160}' , 556 ) , ( '\u{0161}' , 389 ) , ( '\u{0178}' , 722 ) , ( '\u{017D}' , 667 ) ,
( '\u{017E}' , 444 ) , ( '\u{0192}' , 500 ) , ( '\u{02C6}' , 333 ) , ( '\u{02C7}' , 333 ) , ( '\u{02D8}' , 333 ) , ( '\u{02D9}' , 333 ) ,
( '\u{02DA}' , 333 ) , ( '\u{02DB}' , 333 ) , ( '\u{02DC}' , 333 ) , ( '\u{02DD}' , 333 ) , ( '\u{2013}' , 500 ) , ( '\u{2014}' , 1000 ) ,
( '\u{2018}' , 333 ) , ( '\u{2019}' , 333 ) , ( '\u{201A}' , 333 ) , ( '\u{201C}' , 500 ) , ( '\u{201D}' , 500 ) , ( '\u{201E}' , 500 ) ,
( '\u{2020}' , 500 ) , ( '\u{2021}' , 500 ) , ( '\u{2022}' , 350 ) , ( '\u{2026}' , 1000 ) , ( '\u{2030}' , 1000 ) , ( '\u{2039}' , 333 ) ,
( '\u{203A}' , 333 ) , ( '\u{2044}' , 167 ) , ( '\u{20AC}' , 500 ) , ( '\u{2122}' , 1000 ) , ( '\u{2212}' , 570 ) , ( '\u{FB01}' , 556 ) ,
( '\u{FB02}' , 556 ) ,
] ;
#[ rustfmt::skip ]
static TIMES_ITALIC : & [ ( char , u16 ) ] = & [
( ' ' , 250 ) , ( '!' , 333 ) , ( '"' , 420 ) , ( '#' , 500 ) , ( '$' , 500 ) , ( '%' , 833 ) ,
( '&' , 778 ) , ( '\'' , 214 ) , ( '(' , 333 ) , ( ')' , 333 ) , ( '*' , 500 ) , ( '+' , 675 ) ,
( ',' , 250 ) , ( '-' , 333 ) , ( '.' , 250 ) , ( '/' , 278 ) , ( '0' , 500 ) , ( '1' , 500 ) ,
( '2' , 500 ) , ( '3' , 500 ) , ( '4' , 500 ) , ( '5' , 500 ) , ( '6' , 500 ) , ( '7' , 500 ) ,
( '8' , 500 ) , ( '9' , 500 ) , ( ':' , 333 ) , ( ';' , 333 ) , ( '<' , 675 ) , ( '=' , 675 ) ,
( '>' , 675 ) , ( '?' , 500 ) , ( '@' , 920 ) , ( 'A' , 611 ) , ( 'B' , 611 ) , ( 'C' , 667 ) ,
( 'D' , 722 ) , ( 'E' , 611 ) , ( 'F' , 611 ) , ( 'G' , 722 ) , ( 'H' , 722 ) , ( 'I' , 333 ) ,
( 'J' , 444 ) , ( 'K' , 667 ) , ( 'L' , 556 ) , ( 'M' , 833 ) , ( 'N' , 667 ) , ( 'O' , 722 ) ,
( 'P' , 611 ) , ( 'Q' , 722 ) , ( 'R' , 611 ) , ( 'S' , 500 ) , ( 'T' , 556 ) , ( 'U' , 722 ) ,
( 'V' , 611 ) , ( 'W' , 833 ) , ( 'X' , 611 ) , ( 'Y' , 556 ) , ( 'Z' , 556 ) , ( '[' , 389 ) ,
( '\\' , 278 ) , ( ']' , 389 ) , ( '^' , 422 ) , ( '_' , 500 ) , ( '`' , 333 ) , ( 'a' , 500 ) ,
( 'b' , 500 ) , ( 'c' , 444 ) , ( 'd' , 500 ) , ( 'e' , 444 ) , ( 'f' , 278 ) , ( 'g' , 500 ) ,
( 'h' , 500 ) , ( 'i' , 278 ) , ( 'j' , 278 ) , ( 'k' , 444 ) , ( 'l' , 278 ) , ( 'm' , 722 ) ,
( 'n' , 500 ) , ( 'o' , 500 ) , ( 'p' , 500 ) , ( 'q' , 500 ) , ( 'r' , 389 ) , ( 's' , 389 ) ,
( 't' , 278 ) , ( 'u' , 500 ) , ( 'v' , 444 ) , ( 'w' , 667 ) , ( 'x' , 444 ) , ( 'y' , 444 ) ,
( 'z' , 389 ) , ( '{' , 400 ) , ( '|' , 275 ) , ( '}' , 400 ) , ( '~' , 541 ) , ( '\u{00A1}' , 389 ) ,
( '\u{00A2}' , 500 ) , ( '\u{00A3}' , 500 ) , ( '\u{00A4}' , 500 ) , ( '\u{00A5}' , 500 ) , ( '\u{00A6}' , 275 ) , ( '\u{00A7}' , 500 ) ,
( '\u{00A8}' , 333 ) , ( '\u{00A9}' , 760 ) , ( '\u{00AA}' , 276 ) , ( '\u{00AB}' , 500 ) , ( '\u{00AC}' , 675 ) , ( '\u{00AE}' , 760 ) ,
( '\u{00AF}' , 333 ) , ( '\u{00B0}' , 400 ) , ( '\u{00B1}' , 675 ) , ( '\u{00B2}' , 300 ) , ( '\u{00B3}' , 300 ) , ( '\u{00B4}' , 333 ) ,
( '\u{00B5}' , 500 ) , ( '\u{00B6}' , 523 ) , ( '\u{00B7}' , 250 ) , ( '\u{00B8}' , 333 ) , ( '\u{00B9}' , 300 ) , ( '\u{00BA}' , 310 ) ,
( '\u{00BB}' , 500 ) , ( '\u{00BC}' , 750 ) , ( '\u{00BD}' , 750 ) , ( '\u{00BE}' , 750 ) , ( '\u{00BF}' , 500 ) , ( '\u{00C0}' , 611 ) ,
( '\u{00C1}' , 611 ) , ( '\u{00C2}' , 611 ) , ( '\u{00C3}' , 611 ) , ( '\u{00C4}' , 611 ) , ( '\u{00C5}' , 611 ) , ( '\u{00C6}' , 889 ) ,
( '\u{00C7}' , 667 ) , ( '\u{00C8}' , 611 ) , ( '\u{00C9}' , 611 ) , ( '\u{00CA}' , 611 ) , ( '\u{00CB}' , 611 ) , ( '\u{00CC}' , 333 ) ,
( '\u{00CD}' , 333 ) , ( '\u{00CE}' , 333 ) , ( '\u{00CF}' , 333 ) , ( '\u{00D0}' , 722 ) , ( '\u{00D1}' , 667 ) , ( '\u{00D2}' , 722 ) ,
( '\u{00D3}' , 722 ) , ( '\u{00D4}' , 722 ) , ( '\u{00D5}' , 722 ) , ( '\u{00D6}' , 722 ) , ( '\u{00D7}' , 675 ) , ( '\u{00D8}' , 722 ) ,
( '\u{00D9}' , 722 ) , ( '\u{00DA}' , 722 ) , ( '\u{00DB}' , 722 ) , ( '\u{00DC}' , 722 ) , ( '\u{00DD}' , 556 ) , ( '\u{00DE}' , 611 ) ,
( '\u{00DF}' , 500 ) , ( '\u{00E0}' , 500 ) , ( '\u{00E1}' , 500 ) , ( '\u{00E2}' , 500 ) , ( '\u{00E3}' , 500 ) , ( '\u{00E4}' , 500 ) ,
( '\u{00E5}' , 500 ) , ( '\u{00E6}' , 667 ) , ( '\u{00E7}' , 444 ) , ( '\u{00E8}' , 444 ) , ( '\u{00E9}' , 444 ) , ( '\u{00EA}' , 444 ) ,
( '\u{00EB}' , 444 ) , ( '\u{00EC}' , 278 ) , ( '\u{00ED}' , 278 ) , ( '\u{00EE}' , 278 ) , ( '\u{00EF}' , 278 ) , ( '\u{00F0}' , 500 ) ,
( '\u{00F1}' , 500 ) , ( '\u{00F2}' , 500 ) , ( '\u{00F3}' , 500 ) , ( '\u{00F4}' , 500 ) , ( '\u{00F5}' , 500 ) , ( '\u{00F6}' , 500 ) ,
( '\u{00F7}' , 675 ) , ( '\u{00F8}' , 500 ) , ( '\u{00F9}' , 500 ) , ( '\u{00FA}' , 500 ) , ( '\u{00FB}' , 500 ) , ( '\u{00FC}' , 500 ) ,
( '\u{00FD}' , 444 ) , ( '\u{00FE}' , 500 ) , ( '\u{00FF}' , 444 ) , ( '\u{0131}' , 278 ) , ( '\u{0141}' , 556 ) , ( '\u{0142}' , 278 ) ,
( '\u{0152}' , 944 ) , ( '\u{0153}' , 667 ) , ( '\u{0160}' , 500 ) , ( '\u{0161}' , 389 ) , ( '\u{0178}' , 556 ) , ( '\u{017D}' , 556 ) ,
( '\u{017E}' , 389 ) , ( '\u{0192}' , 500 ) , ( '\u{02C6}' , 333 ) , ( '\u{02C7}' , 333 ) , ( '\u{02D8}' , 333 ) , ( '\u{02D9}' , 333 ) ,
( '\u{02DA}' , 333 ) , ( '\u{02DB}' , 333 ) , ( '\u{02DC}' , 333 ) , ( '\u{02DD}' , 333 ) , ( '\u{2013}' , 500 ) , ( '\u{2014}' , 889 ) ,
( '\u{2018}' , 333 ) , ( '\u{2019}' , 333 ) , ( '\u{201A}' , 333 ) , ( '\u{201C}' , 556 ) , ( '\u{201D}' , 556 ) , ( '\u{201E}' , 556 ) ,
( '\u{2020}' , 500 ) , ( '\u{2021}' , 500 ) , ( '\u{2022}' , 350 ) , ( '\u{2026}' , 889 ) , ( '\u{2030}' , 1000 ) , ( '\u{2039}' , 333 ) ,
( '\u{203A}' , 333 ) , ( '\u{2044}' , 167 ) , ( '\u{20AC}' , 500 ) , ( '\u{2122}' , 980 ) , ( '\u{2212}' , 675 ) , ( '\u{FB01}' , 500 ) ,
( '\u{FB02}' , 500 ) ,
] ;
#[ rustfmt::skip ]
static TIMES_BOLDITALIC : & [ ( char , u16 ) ] = & [
( ' ' , 250 ) , ( '!' , 389 ) , ( '"' , 555 ) , ( '#' , 500 ) , ( '$' , 500 ) , ( '%' , 833 ) ,
( '&' , 778 ) , ( '\'' , 278 ) , ( '(' , 333 ) , ( ')' , 333 ) , ( '*' , 500 ) , ( '+' , 570 ) ,
( ',' , 250 ) , ( '-' , 333 ) , ( '.' , 250 ) , ( '/' , 278 ) , ( '0' , 500 ) , ( '1' , 500 ) ,
( '2' , 500 ) , ( '3' , 500 ) , ( '4' , 500 ) , ( '5' , 500 ) , ( '6' , 500 ) , ( '7' , 500 ) ,
( '8' , 500 ) , ( '9' , 500 ) , ( ':' , 333 ) , ( ';' , 333 ) , ( '<' , 570 ) , ( '=' , 570 ) ,
( '>' , 570 ) , ( '?' , 500 ) , ( '@' , 832 ) , ( 'A' , 667 ) , ( 'B' , 667 ) , ( 'C' , 667 ) ,
( 'D' , 722 ) , ( 'E' , 667 ) , ( 'F' , 667 ) , ( 'G' , 722 ) , ( 'H' , 778 ) , ( 'I' , 389 ) ,
( 'J' , 500 ) , ( 'K' , 667 ) , ( 'L' , 611 ) , ( 'M' , 889 ) , ( 'N' , 722 ) , ( 'O' , 722 ) ,
( 'P' , 611 ) , ( 'Q' , 722 ) , ( 'R' , 667 ) , ( 'S' , 556 ) , ( 'T' , 611 ) , ( 'U' , 722 ) ,
( 'V' , 667 ) , ( 'W' , 889 ) , ( 'X' , 667 ) , ( 'Y' , 611 ) , ( 'Z' , 611 ) , ( '[' , 333 ) ,
( '\\' , 278 ) , ( ']' , 333 ) , ( '^' , 570 ) , ( '_' , 500 ) , ( '`' , 333 ) , ( 'a' , 500 ) ,
( 'b' , 500 ) , ( 'c' , 444 ) , ( 'd' , 500 ) , ( 'e' , 444 ) , ( 'f' , 333 ) , ( 'g' , 500 ) ,
( 'h' , 556 ) , ( 'i' , 278 ) , ( 'j' , 278 ) , ( 'k' , 500 ) , ( 'l' , 278 ) , ( 'm' , 778 ) ,
( 'n' , 556 ) , ( 'o' , 500 ) , ( 'p' , 500 ) , ( 'q' , 500 ) , ( 'r' , 389 ) , ( 's' , 389 ) ,
( 't' , 278 ) , ( 'u' , 556 ) , ( 'v' , 444 ) , ( 'w' , 667 ) , ( 'x' , 500 ) , ( 'y' , 444 ) ,
( 'z' , 389 ) , ( '{' , 348 ) , ( '|' , 220 ) , ( '}' , 348 ) , ( '~' , 570 ) , ( '\u{00A1}' , 389 ) ,
( '\u{00A2}' , 500 ) , ( '\u{00A3}' , 500 ) , ( '\u{00A4}' , 500 ) , ( '\u{00A5}' , 500 ) , ( '\u{00A6}' , 220 ) , ( '\u{00A7}' , 500 ) ,
( '\u{00A8}' , 333 ) , ( '\u{00A9}' , 747 ) , ( '\u{00AA}' , 266 ) , ( '\u{00AB}' , 500 ) , ( '\u{00AC}' , 606 ) , ( '\u{00AE}' , 747 ) ,
( '\u{00AF}' , 333 ) , ( '\u{00B0}' , 400 ) , ( '\u{00B1}' , 570 ) , ( '\u{00B2}' , 300 ) , ( '\u{00B3}' , 300 ) , ( '\u{00B4}' , 333 ) ,
( '\u{00B5}' , 576 ) , ( '\u{00B6}' , 500 ) , ( '\u{00B7}' , 250 ) , ( '\u{00B8}' , 333 ) , ( '\u{00B9}' , 300 ) , ( '\u{00BA}' , 300 ) ,
( '\u{00BB}' , 500 ) , ( '\u{00BC}' , 750 ) , ( '\u{00BD}' , 750 ) , ( '\u{00BE}' , 750 ) , ( '\u{00BF}' , 500 ) , ( '\u{00C0}' , 667 ) ,
( '\u{00C1}' , 667 ) , ( '\u{00C2}' , 667 ) , ( '\u{00C3}' , 667 ) , ( '\u{00C4}' , 667 ) , ( '\u{00C5}' , 667 ) , ( '\u{00C6}' , 944 ) ,
( '\u{00C7}' , 667 ) , ( '\u{00C8}' , 667 ) , ( '\u{00C9}' , 667 ) , ( '\u{00CA}' , 667 ) , ( '\u{00CB}' , 667 ) , ( '\u{00CC}' , 389 ) ,
( '\u{00CD}' , 389 ) , ( '\u{00CE}' , 389 ) , ( '\u{00CF}' , 389 ) , ( '\u{00D0}' , 722 ) , ( '\u{00D1}' , 722 ) , ( '\u{00D2}' , 722 ) ,
( '\u{00D3}' , 722 ) , ( '\u{00D4}' , 722 ) , ( '\u{00D5}' , 722 ) , ( '\u{00D6}' , 722 ) , ( '\u{00D7}' , 570 ) , ( '\u{00D8}' , 722 ) ,
( '\u{00D9}' , 722 ) , ( '\u{00DA}' , 722 ) , ( '\u{00DB}' , 722 ) , ( '\u{00DC}' , 722 ) , ( '\u{00DD}' , 611 ) , ( '\u{00DE}' , 611 ) ,
( '\u{00DF}' , 500 ) , ( '\u{00E0}' , 500 ) , ( '\u{00E1}' , 500 ) , ( '\u{00E2}' , 500 ) , ( '\u{00E3}' , 500 ) , ( '\u{00E4}' , 500 ) ,
( '\u{00E5}' , 500 ) , ( '\u{00E6}' , 722 ) , ( '\u{00E7}' , 444 ) , ( '\u{00E8}' , 444 ) , ( '\u{00E9}' , 444 ) , ( '\u{00EA}' , 444 ) ,
( '\u{00EB}' , 444 ) , ( '\u{00EC}' , 278 ) , ( '\u{00ED}' , 278 ) , ( '\u{00EE}' , 278 ) , ( '\u{00EF}' , 278 ) , ( '\u{00F0}' , 500 ) ,
( '\u{00F1}' , 556 ) , ( '\u{00F2}' , 500 ) , ( '\u{00F3}' , 500 ) , ( '\u{00F4}' , 500 ) , ( '\u{00F5}' , 500 ) , ( '\u{00F6}' , 500 ) ,
( '\u{00F7}' , 570 ) , ( '\u{00F8}' , 500 ) , ( '\u{00F9}' , 556 ) , ( '\u{00FA}' , 556 ) , ( '\u{00FB}' , 556 ) , ( '\u{00FC}' , 556 ) ,
( '\u{00FD}' , 444 ) , ( '\u{00FE}' , 500 ) , ( '\u{00FF}' , 444 ) , ( '\u{0131}' , 278 ) , ( '\u{0141}' , 611 ) , ( '\u{0142}' , 278 ) ,
( '\u{0152}' , 944 ) , ( '\u{0153}' , 722 ) , ( '\u{0160}' , 556 ) , ( '\u{0161}' , 389 ) , ( '\u{0178}' , 611 ) , ( '\u{017D}' , 611 ) ,
( '\u{017E}' , 389 ) , ( '\u{0192}' , 500 ) , ( '\u{02C6}' , 333 ) , ( '\u{02C7}' , 333 ) , ( '\u{02D8}' , 333 ) , ( '\u{02D9}' , 333 ) ,
( '\u{02DA}' , 333 ) , ( '\u{02DB}' , 333 ) , ( '\u{02DC}' , 333 ) , ( '\u{02DD}' , 333 ) , ( '\u{2013}' , 500 ) , ( '\u{2014}' , 1000 ) ,
( '\u{2018}' , 333 ) , ( '\u{2019}' , 333 ) , ( '\u{201A}' , 333 ) , ( '\u{201C}' , 500 ) , ( '\u{201D}' , 500 ) , ( '\u{201E}' , 500 ) ,
( '\u{2020}' , 500 ) , ( '\u{2021}' , 500 ) , ( '\u{2022}' , 350 ) , ( '\u{2026}' , 1000 ) , ( '\u{2030}' , 1000 ) , ( '\u{2039}' , 333 ) ,
( '\u{203A}' , 333 ) , ( '\u{2044}' , 167 ) , ( '\u{20AC}' , 500 ) , ( '\u{2122}' , 1000 ) , ( '\u{2212}' , 606 ) , ( '\u{FB01}' , 556 ) ,
( '\u{FB02}' , 556 ) ,
] ;
#[ rustfmt::skip ]
static SYMBOL : & [ ( char , u16 ) ] = & [
( ' ' , 250 ) , ( '!' , 333 ) , ( '#' , 500 ) , ( '%' , 833 ) , ( '&' , 778 ) , ( '(' , 333 ) ,
( ')' , 333 ) , ( '+' , 549 ) , ( ',' , 250 ) , ( '.' , 250 ) , ( '/' , 278 ) , ( '0' , 500 ) ,
( '1' , 500 ) , ( '2' , 500 ) , ( '3' , 500 ) , ( '4' , 500 ) , ( '5' , 500 ) , ( '6' , 500 ) ,
( '7' , 500 ) , ( '8' , 500 ) , ( '9' , 500 ) , ( ':' , 278 ) , ( ';' , 278 ) , ( '<' , 549 ) ,
( '=' , 549 ) , ( '>' , 549 ) , ( '?' , 444 ) , ( '[' , 333 ) , ( ']' , 333 ) , ( '_' , 500 ) ,
( '{' , 480 ) , ( '|' , 200 ) , ( '}' , 480 ) , ( '\u{00AC}' , 713 ) , ( '\u{00B0}' , 400 ) , ( '\u{00B1}' , 549 ) ,
( '\u{00B5}' , 576 ) , ( '\u{00D7}' , 549 ) , ( '\u{00F7}' , 549 ) , ( '\u{0192}' , 500 ) , ( '\u{0391}' , 722 ) , ( '\u{0392}' , 667 ) ,
( '\u{0393}' , 603 ) , ( '\u{0395}' , 611 ) , ( '\u{0396}' , 611 ) , ( '\u{0397}' , 722 ) , ( '\u{0398}' , 741 ) , ( '\u{0399}' , 333 ) ,
( '\u{039A}' , 722 ) , ( '\u{039B}' , 686 ) , ( '\u{039C}' , 889 ) , ( '\u{039D}' , 722 ) , ( '\u{039E}' , 645 ) , ( '\u{039F}' , 722 ) ,
( '\u{03A0}' , 768 ) , ( '\u{03A1}' , 556 ) , ( '\u{03A3}' , 592 ) , ( '\u{03A4}' , 611 ) , ( '\u{03A5}' , 690 ) , ( '\u{03A6}' , 763 ) ,
( '\u{03A7}' , 722 ) , ( '\u{03A8}' , 795 ) , ( '\u{03B1}' , 631 ) , ( '\u{03B2}' , 549 ) , ( '\u{03B3}' , 411 ) , ( '\u{03B4}' , 494 ) ,
( '\u{03B5}' , 439 ) , ( '\u{03B6}' , 494 ) , ( '\u{03B7}' , 603 ) , ( '\u{03B8}' , 521 ) , ( '\u{03B9}' , 329 ) , ( '\u{03BA}' , 549 ) ,
( '\u{03BB}' , 549 ) , ( '\u{03BD}' , 521 ) , ( '\u{03BE}' , 493 ) , ( '\u{03BF}' , 549 ) , ( '\u{03C0}' , 549 ) , ( '\u{03C1}' , 549 ) ,
( '\u{03C2}' , 439 ) , ( '\u{03C3}' , 603 ) , ( '\u{03C4}' , 439 ) , ( '\u{03C5}' , 576 ) , ( '\u{03C6}' , 521 ) , ( '\u{03C7}' , 549 ) ,
( '\u{03C8}' , 686 ) , ( '\u{03C9}' , 686 ) , ( '\u{03D1}' , 631 ) , ( '\u{03D2}' , 620 ) , ( '\u{03D5}' , 603 ) , ( '\u{03D6}' , 713 ) ,
( '\u{2022}' , 460 ) , ( '\u{2026}' , 1000 ) , ( '\u{2032}' , 247 ) , ( '\u{2033}' , 411 ) , ( '\u{2044}' , 167 ) , ( '\u{20AC}' , 750 ) ,
( '\u{2111}' , 686 ) , ( '\u{2118}' , 987 ) , ( '\u{211C}' , 795 ) , ( '\u{2126}' , 768 ) , ( '\u{2135}' , 823 ) , ( '\u{2190}' , 987 ) ,
( '\u{2191}' , 603 ) , ( '\u{2192}' , 987 ) , ( '\u{2193}' , 603 ) , ( '\u{2194}' , 1042 ) , ( '\u{21B5}' , 658 ) , ( '\u{21D0}' , 987 ) ,
( '\u{21D1}' , 603 ) , ( '\u{21D2}' , 987 ) , ( '\u{21D3}' , 603 ) , ( '\u{21D4}' , 1042 ) , ( '\u{2200}' , 713 ) , ( '\u{2202}' , 494 ) ,
( '\u{2203}' , 549 ) , ( '\u{2205}' , 823 ) , ( '\u{2206}' , 612 ) , ( '\u{2207}' , 713 ) , ( '\u{2208}' , 713 ) , ( '\u{2209}' , 713 ) ,
( '\u{220B}' , 439 ) , ( '\u{220F}' , 823 ) , ( '\u{2211}' , 713 ) , ( '\u{2212}' , 549 ) , ( '\u{2217}' , 500 ) , ( '\u{221A}' , 549 ) ,
( '\u{221D}' , 713 ) , ( '\u{221E}' , 713 ) , ( '\u{2220}' , 768 ) , ( '\u{2227}' , 603 ) , ( '\u{2228}' , 603 ) , ( '\u{2229}' , 768 ) ,
( '\u{222A}' , 768 ) , ( '\u{222B}' , 274 ) , ( '\u{2234}' , 863 ) , ( '\u{223C}' , 549 ) , ( '\u{2245}' , 549 ) , ( '\u{2248}' , 549 ) ,
( '\u{2260}' , 549 ) , ( '\u{2261}' , 549 ) , ( '\u{2264}' , 549 ) , ( '\u{2265}' , 549 ) , ( '\u{2282}' , 713 ) , ( '\u{2283}' , 713 ) ,
( '\u{2284}' , 713 ) , ( '\u{2286}' , 713 ) , ( '\u{2287}' , 713 ) , ( '\u{2295}' , 768 ) , ( '\u{2297}' , 768 ) , ( '\u{22A5}' , 658 ) ,
( '\u{22C5}' , 250 ) , ( '\u{2320}' , 686 ) , ( '\u{2321}' , 686 ) , ( '\u{2329}' , 329 ) , ( '\u{232A}' , 329 ) , ( '\u{25CA}' , 494 ) ,
( '\u{2660}' , 753 ) , ( '\u{2663}' , 753 ) , ( '\u{2665}' , 753 ) , ( '\u{2666}' , 753 ) , ( '\u{F6D9}' , 790 ) , ( '\u{F6DA}' , 790 ) ,
( '\u{F6DB}' , 890 ) , ( '\u{F8E5}' , 500 ) , ( '\u{F8E6}' , 603 ) , ( '\u{F8E7}' , 1000 ) , ( '\u{F8E8}' , 790 ) , ( '\u{F8E9}' , 790 ) ,
( '\u{F8EA}' , 786 ) , ( '\u{F8EB}' , 384 ) , ( '\u{F8EC}' , 384 ) , ( '\u{F8ED}' , 384 ) , ( '\u{F8EE}' , 384 ) , ( '\u{F8EF}' , 384 ) ,
( '\u{F8F0}' , 384 ) , ( '\u{F8F1}' , 494 ) , ( '\u{F8F2}' , 494 ) , ( '\u{F8F3}' , 494 ) , ( '\u{F8F4}' , 494 ) , ( '\u{F8F5}' , 686 ) ,
( '\u{F8F6}' , 384 ) , ( '\u{F8F7}' , 384 ) , ( '\u{F8F8}' , 384 ) , ( '\u{F8F9}' , 384 ) , ( '\u{F8FA}' , 384 ) , ( '\u{F8FB}' , 384 ) ,
( '\u{F8FC}' , 494 ) , ( '\u{F8FD}' , 494 ) , ( '\u{F8FE}' , 494 ) , ( '\u{F8FF}' , 790 ) ,
] ;
#[ rustfmt::skip ]
static ZAPFDINGBATS : & [ ( char , u16 ) ] = & [
( ' ' , 278 ) , ( '\u{2192}' , 838 ) , ( '\u{2194}' , 1016 ) , ( '\u{2195}' , 458 ) , ( '\u{2460}' , 788 ) , ( '\u{2461}' , 788 ) ,
( '\u{2462}' , 788 ) , ( '\u{2463}' , 788 ) , ( '\u{2464}' , 788 ) , ( '\u{2465}' , 788 ) , ( '\u{2466}' , 788 ) , ( '\u{2467}' , 788 ) ,
( '\u{2468}' , 788 ) , ( '\u{2469}' , 788 ) , ( '\u{25A0}' , 761 ) , ( '\u{25B2}' , 892 ) , ( '\u{25BC}' , 892 ) , ( '\u{25C6}' , 788 ) ,
( '\u{25CF}' , 791 ) , ( '\u{25D7}' , 438 ) , ( '\u{2605}' , 816 ) , ( '\u{260E}' , 719 ) , ( '\u{261B}' , 960 ) , ( '\u{261E}' , 939 ) ,
( '\u{2660}' , 626 ) , ( '\u{2663}' , 776 ) , ( '\u{2665}' , 694 ) , ( '\u{2666}' , 595 ) , ( '\u{2701}' , 974 ) , ( '\u{2702}' , 961 ) ,
( '\u{2703}' , 974 ) , ( '\u{2704}' , 980 ) , ( '\u{2706}' , 789 ) , ( '\u{2707}' , 790 ) , ( '\u{2708}' , 791 ) , ( '\u{2709}' , 690 ) ,
( '\u{270C}' , 549 ) , ( '\u{270D}' , 855 ) , ( '\u{270E}' , 911 ) , ( '\u{270F}' , 933 ) , ( '\u{2710}' , 911 ) , ( '\u{2711}' , 945 ) ,
( '\u{2712}' , 974 ) , ( '\u{2713}' , 755 ) , ( '\u{2714}' , 846 ) , ( '\u{2715}' , 762 ) , ( '\u{2716}' , 761 ) , ( '\u{2717}' , 571 ) ,
( '\u{2718}' , 677 ) , ( '\u{2719}' , 763 ) , ( '\u{271A}' , 760 ) , ( '\u{271B}' , 759 ) , ( '\u{271C}' , 754 ) , ( '\u{271D}' , 494 ) ,
( '\u{271E}' , 552 ) , ( '\u{271F}' , 537 ) , ( '\u{2720}' , 577 ) , ( '\u{2721}' , 692 ) , ( '\u{2722}' , 786 ) , ( '\u{2723}' , 788 ) ,
( '\u{2724}' , 788 ) , ( '\u{2725}' , 790 ) , ( '\u{2726}' , 793 ) , ( '\u{2727}' , 794 ) , ( '\u{2729}' , 823 ) , ( '\u{272A}' , 789 ) ,
( '\u{272B}' , 841 ) , ( '\u{272C}' , 823 ) , ( '\u{272D}' , 833 ) , ( '\u{272E}' , 816 ) , ( '\u{272F}' , 831 ) , ( '\u{2730}' , 923 ) ,
( '\u{2731}' , 744 ) , ( '\u{2732}' , 723 ) , ( '\u{2733}' , 749 ) , ( '\u{2734}' , 790 ) , ( '\u{2735}' , 792 ) , ( '\u{2736}' , 695 ) ,
( '\u{2737}' , 776 ) , ( '\u{2738}' , 768 ) , ( '\u{2739}' , 792 ) , ( '\u{273A}' , 759 ) , ( '\u{273B}' , 707 ) , ( '\u{273C}' , 708 ) ,
( '\u{273D}' , 682 ) , ( '\u{273E}' , 701 ) , ( '\u{273F}' , 826 ) , ( '\u{2740}' , 815 ) , ( '\u{2741}' , 789 ) , ( '\u{2742}' , 789 ) ,
( '\u{2743}' , 707 ) , ( '\u{2744}' , 687 ) , ( '\u{2745}' , 696 ) , ( '\u{2746}' , 689 ) , ( '\u{2747}' , 786 ) , ( '\u{2748}' , 787 ) ,
( '\u{2749}' , 713 ) , ( '\u{274A}' , 791 ) , ( '\u{274B}' , 785 ) , ( '\u{274D}' , 873 ) , ( '\u{274F}' , 762 ) , ( '\u{2750}' , 762 ) ,
( '\u{2751}' , 759 ) , ( '\u{2752}' , 759 ) , ( '\u{2756}' , 784 ) , ( '\u{2758}' , 138 ) , ( '\u{2759}' , 277 ) , ( '\u{275A}' , 415 ) ,
( '\u{275B}' , 392 ) , ( '\u{275C}' , 392 ) , ( '\u{275D}' , 668 ) , ( '\u{275E}' , 668 ) , ( '\u{2761}' , 732 ) , ( '\u{2762}' , 544 ) ,
( '\u{2763}' , 544 ) , ( '\u{2764}' , 910 ) , ( '\u{2765}' , 667 ) , ( '\u{2766}' , 760 ) , ( '\u{2767}' , 760 ) , ( '\u{2768}' , 390 ) ,
( '\u{2769}' , 390 ) , ( '\u{276A}' , 317 ) , ( '\u{276B}' , 317 ) , ( '\u{276C}' , 276 ) , ( '\u{276D}' , 276 ) , ( '\u{276E}' , 509 ) ,
( '\u{276F}' , 509 ) , ( '\u{2770}' , 410 ) , ( '\u{2771}' , 410 ) , ( '\u{2772}' , 234 ) , ( '\u{2773}' , 234 ) , ( '\u{2774}' , 334 ) ,
( '\u{2775}' , 334 ) , ( '\u{2776}' , 788 ) , ( '\u{2777}' , 788 ) , ( '\u{2778}' , 788 ) , ( '\u{2779}' , 788 ) , ( '\u{277A}' , 788 ) ,
( '\u{277B}' , 788 ) , ( '\u{277C}' , 788 ) , ( '\u{277D}' , 788 ) , ( '\u{277E}' , 788 ) , ( '\u{277F}' , 788 ) , ( '\u{2780}' , 788 ) ,
( '\u{2781}' , 788 ) , ( '\u{2782}' , 788 ) , ( '\u{2783}' , 788 ) , ( '\u{2784}' , 788 ) , ( '\u{2785}' , 788 ) , ( '\u{2786}' , 788 ) ,
( '\u{2787}' , 788 ) , ( '\u{2788}' , 788 ) , ( '\u{2789}' , 788 ) , ( '\u{278A}' , 788 ) , ( '\u{278B}' , 788 ) , ( '\u{278C}' , 788 ) ,
( '\u{278D}' , 788 ) , ( '\u{278E}' , 788 ) , ( '\u{278F}' , 788 ) , ( '\u{2790}' , 788 ) , ( '\u{2791}' , 788 ) , ( '\u{2792}' , 788 ) ,
( '\u{2793}' , 788 ) , ( '\u{2794}' , 894 ) , ( '\u{2798}' , 748 ) , ( '\u{2799}' , 924 ) , ( '\u{279A}' , 748 ) , ( '\u{279B}' , 918 ) ,
( '\u{279C}' , 927 ) , ( '\u{279D}' , 928 ) , ( '\u{279E}' , 928 ) , ( '\u{279F}' , 834 ) , ( '\u{27A0}' , 873 ) , ( '\u{27A1}' , 828 ) ,
( '\u{27A2}' , 924 ) , ( '\u{27A3}' , 924 ) , ( '\u{27A4}' , 917 ) , ( '\u{27A5}' , 930 ) , ( '\u{27A6}' , 931 ) , ( '\u{27A7}' , 463 ) ,
( '\u{27A8}' , 883 ) , ( '\u{27A9}' , 836 ) , ( '\u{27AA}' , 836 ) , ( '\u{27AB}' , 867 ) , ( '\u{27AC}' , 867 ) , ( '\u{27AD}' , 696 ) ,
( '\u{27AE}' , 696 ) , ( '\u{27AF}' , 874 ) , ( '\u{27B1}' , 874 ) , ( '\u{27B2}' , 760 ) , ( '\u{27B3}' , 946 ) , ( '\u{27B4}' , 771 ) ,
( '\u{27B5}' , 865 ) , ( '\u{27B6}' , 771 ) , ( '\u{27B7}' , 888 ) , ( '\u{27B8}' , 967 ) , ( '\u{27B9}' , 888 ) , ( '\u{27BA}' , 831 ) ,
( '\u{27BB}' , 873 ) , ( '\u{27BC}' , 927 ) , ( '\u{27BD}' , 970 ) , ( '\u{27BE}' , 918 ) ,
] ;
#[ rustfmt::skip ]
static SYMBOL_ENCODING : & [ ( u8 , char ) ] = & [
( 0x20 , ' ' ) , ( 0x21 , '!' ) , ( 0x22 , '\u{2200}' ) , ( 0x23 , '#' ) , ( 0x24 , '\u{2203}' ) , ( 0x25 , '%' ) ,
( 0x26 , '&' ) , ( 0x27 , '\u{220B}' ) , ( 0x28 , '(' ) , ( 0x29 , ')' ) , ( 0x2A , '\u{2217}' ) , ( 0x2B , '+' ) ,
( 0x2C , ',' ) , ( 0x2D , '\u{2212}' ) , ( 0x2E , '.' ) , ( 0x2F , '/' ) , ( 0x30 , '0' ) , ( 0x31 , '1' ) ,
( 0x32 , '2' ) , ( 0x33 , '3' ) , ( 0x34 , '4' ) , ( 0x35 , '5' ) , ( 0x36 , '6' ) , ( 0x37 , '7' ) ,
( 0x38 , '8' ) , ( 0x39 , '9' ) , ( 0x3A , ':' ) , ( 0x3B , ';' ) , ( 0x3C , '<' ) , ( 0x3D , '=' ) ,
( 0x3E , '>' ) , ( 0x3F , '?' ) , ( 0x40 , '\u{2245}' ) , ( 0x41 , '\u{0391}' ) , ( 0x42 , '\u{0392}' ) , ( 0x43 , '\u{03A7}' ) ,
( 0x44 , '\u{2206}' ) , ( 0x45 , '\u{0395}' ) , ( 0x46 , '\u{03A6}' ) , ( 0x47 , '\u{0393}' ) , ( 0x48 , '\u{0397}' ) , ( 0x49 , '\u{0399}' ) ,
( 0x4A , '\u{03D1}' ) , ( 0x4B , '\u{039A}' ) , ( 0x4C , '\u{039B}' ) , ( 0x4D , '\u{039C}' ) , ( 0x4E , '\u{039D}' ) , ( 0x4F , '\u{039F}' ) ,
( 0x50 , '\u{03A0}' ) , ( 0x51 , '\u{0398}' ) , ( 0x52 , '\u{03A1}' ) , ( 0x53 , '\u{03A3}' ) , ( 0x54 , '\u{03A4}' ) , ( 0x55 , '\u{03A5}' ) ,
( 0x56 , '\u{03C2}' ) , ( 0x57 , '\u{2126}' ) , ( 0x58 , '\u{039E}' ) , ( 0x59 , '\u{03A8}' ) , ( 0x5A , '\u{0396}' ) , ( 0x5B , '[' ) ,
( 0x5C , '\u{2234}' ) , ( 0x5D , ']' ) , ( 0x5E , '\u{22A5}' ) , ( 0x5F , '_' ) , ( 0x60 , '\u{F8E5}' ) , ( 0x61 , '\u{03B1}' ) ,
( 0x62 , '\u{03B2}' ) , ( 0x63 , '\u{03C7}' ) , ( 0x64 , '\u{03B4}' ) , ( 0x65 , '\u{03B5}' ) , ( 0x66 , '\u{03C6}' ) , ( 0x67 , '\u{03B3}' ) ,
( 0x68 , '\u{03B7}' ) , ( 0x69 , '\u{03B9}' ) , ( 0x6A , '\u{03D5}' ) , ( 0x6B , '\u{03BA}' ) , ( 0x6C , '\u{03BB}' ) , ( 0x6D , '\u{00B5}' ) ,
( 0x6E , '\u{03BD}' ) , ( 0x6F , '\u{03BF}' ) , ( 0x70 , '\u{03C0}' ) , ( 0x71 , '\u{03B8}' ) , ( 0x72 , '\u{03C1}' ) , ( 0x73 , '\u{03C3}' ) ,
( 0x74 , '\u{03C4}' ) , ( 0x75 , '\u{03C5}' ) , ( 0x76 , '\u{03D6}' ) , ( 0x77 , '\u{03C9}' ) , ( 0x78 , '\u{03BE}' ) , ( 0x79 , '\u{03C8}' ) ,
( 0x7A , '\u{03B6}' ) , ( 0x7B , '{' ) , ( 0x7C , '|' ) , ( 0x7D , '}' ) , ( 0x7E , '\u{223C}' ) , ( 0xA0 , '\u{20AC}' ) ,
( 0xA1 , '\u{03D2}' ) , ( 0xA2 , '\u{2032}' ) , ( 0xA3 , '\u{2264}' ) , ( 0xA4 , '\u{2044}' ) , ( 0xA5 , '\u{221E}' ) , ( 0xA6 , '\u{0192}' ) ,
( 0xA7 , '\u{2663}' ) , ( 0xA8 , '\u{2666}' ) , ( 0xA9 , '\u{2665}' ) , ( 0xAA , '\u{2660}' ) , ( 0xAB , '\u{2194}' ) , ( 0xAC , '\u{2190}' ) ,
( 0xAD , '\u{2191}' ) , ( 0xAE , '\u{2192}' ) , ( 0xAF , '\u{2193}' ) , ( 0xB0 , '\u{00B0}' ) , ( 0xB1 , '\u{00B1}' ) , ( 0xB2 , '\u{2033}' ) ,
( 0xB3 , '\u{2265}' ) , ( 0xB4 , '\u{00D7}' ) , ( 0xB5 , '\u{221D}' ) , ( 0xB6 , '\u{2202}' ) , ( 0xB7 , '\u{2022}' ) , ( 0xB8 , '\u{00F7}' ) ,
( 0xB9 , '\u{2260}' ) , ( 0xBA , '\u{2261}' ) , ( 0xBB , '\u{2248}' ) , ( 0xBC , '\u{2026}' ) , ( 0xBD , '\u{F8E6}' ) , ( 0xBE , '\u{F8E7}' ) ,
( 0xBF , '\u{21B5}' ) , ( 0xC0 , '\u{2135}' ) , ( 0xC1 , '\u{2111}' ) , ( 0xC2 , '\u{211C}' ) , ( 0xC3 , '\u{2118}' ) , ( 0xC4 , '\u{2297}' ) ,
( 0xC5 , '\u{2295}' ) , ( 0xC6 , '\u{2205}' ) , ( 0xC7 , '\u{2229}' ) , ( 0xC8 , '\u{222A}' ) , ( 0xC9 , '\u{2283}' ) , ( 0xCA , '\u{2287}' ) ,
( 0xCB , '\u{2284}' ) , ( 0xCC , '\u{2282}' ) , ( 0xCD , '\u{2286}' ) , ( 0xCE , '\u{2208}' ) , ( 0xCF , '\u{2209}' ) , ( 0xD0 , '\u{2220}' ) ,
( 0xD1 , '\u{2207}' ) , ( 0xD2 , '\u{F6DA}' ) , ( 0xD3 , '\u{F6D9}' ) , ( 0xD4 , '\u{F6DB}' ) , ( 0xD5 , '\u{220F}' ) , ( 0xD6 , '\u{221A}' ) ,
( 0xD7 , '\u{22C5}' ) , ( 0xD8 , '\u{00AC}' ) , ( 0xD9 , '\u{2227}' ) , ( 0xDA , '\u{2228}' ) , ( 0xDB , '\u{21D4}' ) , ( 0xDC , '\u{21D0}' ) ,
( 0xDD , '\u{21D1}' ) , ( 0xDE , '\u{21D2}' ) , ( 0xDF , '\u{21D3}' ) , ( 0xE0 , '\u{25CA}' ) , ( 0xE1 , '\u{2329}' ) , ( 0xE2 , '\u{F8E8}' ) ,
( 0xE3 , '\u{F8E9}' ) , ( 0xE4 , '\u{F8EA}' ) , ( 0xE5 , '\u{2211}' ) , ( 0xE6 , '\u{F8EB}' ) , ( 0xE7 , '\u{F8EC}' ) , ( 0xE8 , '\u{F8ED}' ) ,
( 0xE9 , '\u{F8EE}' ) , ( 0xEA , '\u{F8EF}' ) , ( 0xEB , '\u{F8F0}' ) , ( 0xEC , '\u{F8F1}' ) , ( 0xED , '\u{F8F2}' ) , ( 0xEE , '\u{F8F3}' ) ,
( 0xEF , '\u{F8F4}' ) , ( 0xF1 , '\u{232A}' ) , ( 0xF2 , '\u{222B}' ) , ( 0xF3 , '\u{2320}' ) , ( 0xF4 , '\u{F8F5}' ) , ( 0xF5 , '\u{2321}' ) ,
( 0xF6 , '\u{F8F6}' ) , ( 0xF7 , '\u{F8F7}' ) , ( 0xF8 , '\u{F8F8}' ) , ( 0xF9 , '\u{F8F9}' ) , ( 0xFA , '\u{F8FA}' ) , ( 0xFB , '\u{F8FB}' ) ,
( 0xFC , '\u{F8FC}' ) , ( 0xFD , '\u{F8FD}' ) , ( 0xFE , '\u{F8FE}' ) ,
] ;
#[ rustfmt::skip ]
static ZAPFDINGBATS_ENCODING : & [ ( u8 , char ) ] = & [
( 0x20 , ' ' ) , ( 0x21 , '\u{2701}' ) , ( 0x22 , '\u{2702}' ) , ( 0x23 , '\u{2703}' ) , ( 0x24 , '\u{2704}' ) , ( 0x25 , '\u{260E}' ) ,
( 0x26 , '\u{2706}' ) , ( 0x27 , '\u{2707}' ) , ( 0x28 , '\u{2708}' ) , ( 0x29 , '\u{2709}' ) , ( 0x2A , '\u{261B}' ) , ( 0x2B , '\u{261E}' ) ,
( 0x2C , '\u{270C}' ) , ( 0x2D , '\u{270D}' ) , ( 0x2E , '\u{270E}' ) , ( 0x2F , '\u{270F}' ) , ( 0x30 , '\u{2710}' ) , ( 0x31 , '\u{2711}' ) ,
( 0x32 , '\u{2712}' ) , ( 0x33 , '\u{2713}' ) , ( 0x34 , '\u{2714}' ) , ( 0x35 , '\u{2715}' ) , ( 0x36 , '\u{2716}' ) , ( 0x37 , '\u{2717}' ) ,
( 0x38 , '\u{2718}' ) , ( 0x39 , '\u{2719}' ) , ( 0x3A , '\u{271A}' ) , ( 0x3B , '\u{271B}' ) , ( 0x3C , '\u{271C}' ) , ( 0x3D , '\u{271D}' ) ,
( 0x3E , '\u{271E}' ) , ( 0x3F , '\u{271F}' ) , ( 0x40 , '\u{2720}' ) , ( 0x41 , '\u{2721}' ) , ( 0x42 , '\u{2722}' ) , ( 0x43 , '\u{2723}' ) ,
( 0x44 , '\u{2724}' ) , ( 0x45 , '\u{2725}' ) , ( 0x46 , '\u{2726}' ) , ( 0x47 , '\u{2727}' ) , ( 0x48 , '\u{2605}' ) , ( 0x49 , '\u{2729}' ) ,
( 0x4A , '\u{272A}' ) , ( 0x4B , '\u{272B}' ) , ( 0x4C , '\u{272C}' ) , ( 0x4D , '\u{272D}' ) , ( 0x4E , '\u{272E}' ) , ( 0x4F , '\u{272F}' ) ,
( 0x50 , '\u{2730}' ) , ( 0x51 , '\u{2731}' ) , ( 0x52 , '\u{2732}' ) , ( 0x53 , '\u{2733}' ) , ( 0x54 , '\u{2734}' ) , ( 0x55 , '\u{2735}' ) ,
( 0x56 , '\u{2736}' ) , ( 0x57 , '\u{2737}' ) , ( 0x58 , '\u{2738}' ) , ( 0x59 , '\u{2739}' ) , ( 0x5A , '\u{273A}' ) , ( 0x5B , '\u{273B}' ) ,
( 0x5C , '\u{273C}' ) , ( 0x5D , '\u{273D}' ) , ( 0x5E , '\u{273E}' ) , ( 0x5F , '\u{273F}' ) , ( 0x60 , '\u{2740}' ) , ( 0x61 , '\u{2741}' ) ,
( 0x62 , '\u{2742}' ) , ( 0x63 , '\u{2743}' ) , ( 0x64 , '\u{2744}' ) , ( 0x65 , '\u{2745}' ) , ( 0x66 , '\u{2746}' ) , ( 0x67 , '\u{2747}' ) ,
( 0x68 , '\u{2748}' ) , ( 0x69 , '\u{2749}' ) , ( 0x6A , '\u{274A}' ) , ( 0x6B , '\u{274B}' ) , ( 0x6C , '\u{25CF}' ) , ( 0x6D , '\u{274D}' ) ,
( 0x6E , '\u{25A0}' ) , ( 0x6F , '\u{274F}' ) , ( 0x70 , '\u{2750}' ) , ( 0x71 , '\u{2751}' ) , ( 0x72 , '\u{2752}' ) , ( 0x73 , '\u{25B2}' ) ,
( 0x74 , '\u{25BC}' ) , ( 0x75 , '\u{25C6}' ) , ( 0x76 , '\u{2756}' ) , ( 0x77 , '\u{25D7}' ) , ( 0x78 , '\u{2758}' ) , ( 0x79 , '\u{2759}' ) ,
( 0x7A , '\u{275A}' ) , ( 0x7B , '\u{275B}' ) , ( 0x7C , '\u{275C}' ) , ( 0x7D , '\u{275D}' ) , ( 0x7E , '\u{275E}' ) , ( 0x80 , '\u{2768}' ) ,
( 0x81 , '\u{2769}' ) , ( 0x82 , '\u{276A}' ) , ( 0x83 , '\u{276B}' ) , ( 0x84 , '\u{276C}' ) , ( 0x85 , '\u{276D}' ) , ( 0x86 , '\u{276E}' ) ,
( 0x87 , '\u{276F}' ) , ( 0x88 , '\u{2770}' ) , ( 0x89 , '\u{2771}' ) , ( 0x8A , '\u{2772}' ) , ( 0x8B , '\u{2773}' ) , ( 0x8C , '\u{2774}' ) ,
( 0x8D , '\u{2775}' ) , ( 0xA1 , '\u{2761}' ) , ( 0xA2 , '\u{2762}' ) , ( 0xA3 , '\u{2763}' ) , ( 0xA4 , '\u{2764}' ) , ( 0xA5 , '\u{2765}' ) ,
( 0xA6 , '\u{2766}' ) , ( 0xA7 , '\u{2767}' ) , ( 0xA8 , '\u{2663}' ) , ( 0xA9 , '\u{2666}' ) , ( 0xAA , '\u{2665}' ) , ( 0xAB , '\u{2660}' ) ,
( 0xAC , '\u{2460}' ) , ( 0xAD , '\u{2461}' ) , ( 0xAE , '\u{2462}' ) , ( 0xAF , '\u{2463}' ) , ( 0xB0 , '\u{2464}' ) , ( 0xB1 , '\u{2465}' ) ,
( 0xB2 , '\u{2466}' ) , ( 0xB3 , '\u{2467}' ) , ( 0xB4 , '\u{2468}' ) , ( 0xB5 , '\u{2469}' ) , ( 0xB6 , '\u{2776}' ) , ( 0xB7 , '\u{2777}' ) ,
( 0xB8 , '\u{2778}' ) , ( 0xB9 , '\u{2779}' ) , ( 0xBA , '\u{277A}' ) , ( 0xBB , '\u{277B}' ) , ( 0xBC , '\u{277C}' ) , ( 0xBD , '\u{277D}' ) ,
( 0xBE , '\u{277E}' ) , ( 0xBF , '\u{277F}' ) , ( 0xC0 , '\u{2780}' ) , ( 0xC1 , '\u{2781}' ) , ( 0xC2 , '\u{2782}' ) , ( 0xC3 , '\u{2783}' ) ,
( 0xC4 , '\u{2784}' ) , ( 0xC5 , '\u{2785}' ) , ( 0xC6 , '\u{2786}' ) , ( 0xC7 , '\u{2787}' ) , ( 0xC8 , '\u{2788}' ) , ( 0xC9 , '\u{2789}' ) ,
( 0xCA , '\u{278A}' ) , ( 0xCB , '\u{278B}' ) , ( 0xCC , '\u{278C}' ) , ( 0xCD , '\u{278D}' ) , ( 0xCE , '\u{278E}' ) , ( 0xCF , '\u{278F}' ) ,
( 0xD0 , '\u{2790}' ) , ( 0xD1 , '\u{2791}' ) , ( 0xD2 , '\u{2792}' ) , ( 0xD3 , '\u{2793}' ) , ( 0xD4 , '\u{2794}' ) , ( 0xD5 , '\u{2192}' ) ,
( 0xD6 , '\u{2194}' ) , ( 0xD7 , '\u{2195}' ) , ( 0xD8 , '\u{2798}' ) , ( 0xD9 , '\u{2799}' ) , ( 0xDA , '\u{279A}' ) , ( 0xDB , '\u{279B}' ) ,
( 0xDC , '\u{279C}' ) , ( 0xDD , '\u{279D}' ) , ( 0xDE , '\u{279E}' ) , ( 0xDF , '\u{279F}' ) , ( 0xE0 , '\u{27A0}' ) , ( 0xE1 , '\u{27A1}' ) ,
( 0xE2 , '\u{27A2}' ) , ( 0xE3 , '\u{27A3}' ) , ( 0xE4 , '\u{27A4}' ) , ( 0xE5 , '\u{27A5}' ) , ( 0xE6 , '\u{27A6}' ) , ( 0xE7 , '\u{27A7}' ) ,
( 0xE8 , '\u{27A8}' ) , ( 0xE9 , '\u{27A9}' ) , ( 0xEA , '\u{27AA}' ) , ( 0xEB , '\u{27AB}' ) , ( 0xEC , '\u{27AC}' ) , ( 0xED , '\u{27AD}' ) ,
( 0xEE , '\u{27AE}' ) , ( 0xEF , '\u{27AF}' ) , ( 0xF1 , '\u{27B1}' ) , ( 0xF2 , '\u{27B2}' ) , ( 0xF3 , '\u{27B3}' ) , ( 0xF4 , '\u{27B4}' ) ,
( 0xF5 , '\u{27B5}' ) , ( 0xF6 , '\u{27B6}' ) , ( 0xF7 , '\u{27B7}' ) , ( 0xF8 , '\u{27B8}' ) , ( 0xF9 , '\u{27B9}' ) , ( 0xFA , '\u{27BA}' ) ,
( 0xFB , '\u{27BB}' ) , ( 0xFC , '\u{27BC}' ) , ( 0xFD , '\u{27BD}' ) , ( 0xFE , '\u{27BE}' ) ,
] ;
/// Every width table, for exhaustive testing.
#[ cfg(test) ]
static ALL_TABLES : & [ ( & str , & [ ( char , u16 ) ] ) ] = & [
( " COURIER " , COURIER ) ,
( " COURIER_BOLD " , COURIER_BOLD ) ,
( " COURIER_OBLIQUE " , COURIER_OBLIQUE ) ,
( " COURIER_BOLDOBLIQUE " , COURIER_BOLDOBLIQUE ) ,
( " HELVETICA " , HELVETICA ) ,
( " HELVETICA_BOLD " , HELVETICA_BOLD ) ,
( " HELVETICA_OBLIQUE " , HELVETICA_OBLIQUE ) ,
( " HELVETICA_BOLDOBLIQUE " , HELVETICA_BOLDOBLIQUE ) ,
( " TIMES_ROMAN " , TIMES_ROMAN ) ,
( " TIMES_BOLD " , TIMES_BOLD ) ,
( " TIMES_ITALIC " , TIMES_ITALIC ) ,
( " TIMES_BOLDITALIC " , TIMES_BOLDITALIC ) ,
( " SYMBOL " , SYMBOL ) ,
( " ZAPFDINGBATS " , ZAPFDINGBATS ) ,
] ;
#[ cfg(test) ]
mod tests {
use super ::* ;
#[ test ]
fn times_roman_ascii_widths ( ) {
assert_eq! ( base14_char_width ( " Times-Roman " , ' ' ) , Some ( 250 ) ) ;
assert_eq! ( base14_char_width ( " Times-Roman " , 'M' ) , Some ( 889 ) ) ;
assert_eq! ( base14_char_width ( " Times-Roman " , 'i' ) , Some ( 278 ) ) ;
}
#[ test ]
fn subset_prefix_and_aliases_normalize ( ) {
assert_eq! (
base14_char_width ( " ABCDEF+Times-Bold " , ' ' ) ,
base14_char_width ( " Times-Bold " , ' ' )
) ;
assert! ( base14_char_width ( " ArialMT " , 'a' ) . is_some ( ) ) ;
assert! ( base14_char_width ( " TimesNewRomanPSMT " , 'a' ) . is_some ( ) ) ;
}
#[ test ]
fn non_base14_returns_none ( ) {
assert_eq! ( base14_char_width ( " DejaVuSans " , 'a' ) , None ) ;
assert! ( ! is_base14_font ( " Garamond " ) ) ;
}
#[ test ]
fn builtin_encoding_resolves_symbol_and_zapf_codes ( ) {
// Symbol 0x61 renders alpha; Zapf 0x21 renders U+2701.
assert_eq! ( builtin_encoding_char ( " Symbol " , 0x61 ) , Some ( '\u{03B1}' ) ) ;
assert_eq! ( builtin_encoding_char ( " Symbol " , 0xA5 ) , Some ( '\u{221E}' ) ) ;
assert_eq! (
builtin_encoding_char ( " ZapfDingbats " , 0x21 ) ,
Some ( '\u{2701}' )
) ;
// Latin text fonts follow standard encodings — no builtin override.
assert_eq! ( builtin_encoding_char ( " Times-Roman " , 0x61 ) , None ) ;
// The resolved chars have real AFM widths.
let alpha_w = base14_char_width ( " Symbol " , '\u{03B1}' ) ;
assert! ( alpha_w . is_some ( ) & & alpha_w ! = Some ( 500 ) ) ;
}
#[ test ]
fn encoding_tables_are_sorted_for_binary_search ( ) {
for table in [ SYMBOL_ENCODING , ZAPFDINGBATS_ENCODING ] {
assert! ( table . windows ( 2 ) . all ( | w | w [ 0 ] . 0 < w [ 1 ] . 0 ) ) ;
}
}
#[ test ]
fn tables_are_sorted_for_binary_search ( ) {
// Every table is queried by binary search, so all of them must be
// sorted — not just a sample.
for ( name , table ) in ALL_TABLES {
assert! (
table . windows ( 2 ) . all ( | w | w [ 0 ] . 0 < w [ 1 ] . 0 ) ,
" {name} is not sorted "
) ;
}
}
}