diff --git a/.flake8 b/.flake8
new file mode 100644
index 00000000..fd4e72a0
--- /dev/null
+++ b/.flake8
@@ -0,0 +1,7 @@
+[flake8]
+exclude =
+ # Never scan the git folder
+ .git,
+ cmaprsrc/*
+ docs/*
+ venv/*
\ No newline at end of file
diff --git a/.github/workflows/python-app.yml b/.github/workflows/python-app.yml
new file mode 100644
index 00000000..22f760bd
--- /dev/null
+++ b/.github/workflows/python-app.yml
@@ -0,0 +1,39 @@
+# This workflow will install Python dependencies, run tests and lint with a single version of Python
+# For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions
+
+name: Python application
+
+on:
+ push:
+ branches: ['master']
+ pull_request:
+ branches: ['master']
+
+permissions:
+ contents: read
+
+jobs:
+ build:
+
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v3
+ - name: Set up Python 3.9
+ uses: actions/setup-python@v3
+ with:
+ python-version: "3.9"
+ - name: Install dependencies
+ run: |
+ python -m pip install --upgrade pip
+ pip install flake8 unittest2
+ if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
+ - name: Lint with flake8
+ run: |
+ # stop the build if there are Python syntax errors or undefined names
+ flake8 . #--count --show-source --statistics
+ # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide
+ flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
+ - name: Test with unittest2
+ run: |
+ unittest2
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 00000000..525e8029
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,166 @@
+# Byte-compiled / optimized / DLL files
+__pycache__/
+*.py[cod]
+*$py.class
+
+# C extensions
+*.so
+
+# Distribution / packaging
+.Python
+build/
+develop-eggs/
+dist/
+downloads/
+eggs/
+.eggs/
+lib/
+lib64/
+parts/
+sdist/
+var/
+wheels/
+share/python-wheels/
+*.egg-info/
+.installed.cfg
+*.egg
+MANIFEST
+
+# PyInstaller
+# Usually these files are written by a python script from a template
+# before PyInstaller builds the exe, so as to inject date/other infos into it.
+*.manifest
+*.spec
+
+# Installer logs
+pip-log.txt
+pip-delete-this-directory.txt
+
+# Unit test / coverage reports
+htmlcov/
+.tox/
+.nox/
+.coverage
+.coverage.*
+.cache
+nosetests.xml
+coverage.xml
+*.cover
+*.py,cover
+.hypothesis/
+.pytest_cache/
+cover/
+
+# Translations
+*.mo
+*.pot
+
+# Django stuff:
+*.log
+local_settings.py
+db.sqlite3
+db.sqlite3-journal
+
+# Flask stuff:
+instance/
+.webassets-cache
+
+# Scrapy stuff:
+.scrapy
+
+# Sphinx documentation
+docs/_build/
+
+# PyBuilder
+.pybuilder/
+target/
+
+# Jupyter Notebook
+.ipynb_checkpoints
+
+# IPython
+profile_default/
+ipython_config.py
+
+# pyenv
+# For a library or package, you might want to ignore these files since the code is
+# intended to run in multiple environments; otherwise, check them in:
+# .python-version
+
+# pipenv
+# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
+# However, in case of collaboration, if having platform-specific dependencies or dependencies
+# having no cross-platform support, pipenv may install dependencies that don't work, or not
+# install all needed dependencies.
+#Pipfile.lock
+
+# poetry
+# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
+# This is especially recommended for binary packages to ensure reproducibility, and is more
+# commonly ignored for libraries.
+# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
+#poetry.lock
+
+# pdm
+# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
+#pdm.lock
+# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
+# in version control.
+# https://pdm.fming.dev/#use-with-ide
+.pdm.toml
+
+# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
+__pypackages__/
+
+# Celery stuff
+celerybeat-schedule
+celerybeat.pid
+
+# SageMath parsed files
+*.sage.py
+
+# Environments
+.env
+.venv
+env/
+venv/
+ENV/
+env.bak/
+venv.bak/
+
+# Spyder project settings
+.spyderproject
+.spyproject
+
+# Rope project settings
+.ropeproject
+
+# mkdocs documentation
+/site
+
+# mypy
+.mypy_cache/
+.dmypy.json
+dmypy.json
+
+# Pyre type checker
+.pyre/
+
+# pytype static type analyzer
+.pytype/
+
+# Cython debug symbols
+cython_debug/
+
+# PyCharm
+# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
+# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
+# and can be added to the global gitignore or merged into this file. For a more nuclear
+# option (not recommended) you can uncomment the following to ignore the entire idea folder.
+#.idea/
+
+.vscode/
+
+# Files by Github in MacOS
+.DS_Store
+.idea/
diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 00000000..26d33521
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml
diff --git a/Makefile b/Makefile
index 53a34bf2..45def159 100644
--- a/Makefile
+++ b/Makefile
@@ -8,6 +8,7 @@ TWINE=twine
RM=rm -f
CP=cp -f
MKDIR=mkdir
+PYTHON3 = python3 -m unittest
all:
@@ -55,12 +56,15 @@ $(CMAPDST)/to-unicode-Adobe-Korea1.marshal.gz: $(CMAPDST)
$(CONV_CMAP) -c KSC-EUC=euc-kr -c KSC-Johab=johab -c KSCms-UHC=cp949 -c UniKS-UTF8=utf-8 \
$(CMAPDST) Adobe-Korea1 $(CMAPSRC)/cid2code_Adobe_Korea1.txt
-test: cmap
- $(PYTHON) -m pdfminer.arcfour
- $(PYTHON) -m pdfminer.ascii85
- $(PYTHON) -m pdfminer.lzw
- $(PYTHON) -m pdfminer.rijndael
- $(PYTHON) -m pdfminer.runlength
- $(PYTHON) -m pdfminer.ccitt
- $(PYTHON) -m pdfminer.psparser
- cd samples && $(MAKE) test
+#test: cmap
+# $(PYTHON) -m pdfminer.arcfour
+# $(PYTHON) -m pdfminer.ascii85
+# $(PYTHON) -m pdfminer.lzw
+# $(PYTHON) -m pdfminer.rijndael
+# $(PYTHON) -m pdfminer.runlength
+# $(PYTHON) -m pdfminer.ccitt
+# $(PYTHON) -m pdfminer.psparser
+# cd samples && $(MAKE) test
+
+test:
+ $(PYTHON3) tests/*.py
diff --git a/README.md b/README.md
index cdb1d0aa..b3007416 100644
--- a/README.md
+++ b/README.md
@@ -12,24 +12,26 @@ For the active project, check out its fork
## Features:
- * Pure Python (3.6 or above).
- * Supports PDF-1.7. (well, almost)
- * Obtains the exact location of text as well as other layout information (fonts, etc.).
- * Performs automatic layout analysis.
- * Can convert PDF into other formats (HTML/XML).
- * Can extract an outline (TOC).
- * Can extract tagged contents.
- * Supports basic encryption (RC4 and AES).
- * Supports various font types (Type1, TrueType, Type3, and CID).
- * Supports CJK languages and vertical writing scripts.
- * Has an extensible PDF parser that can be used for other purposes.
-
+- Pure Python (3.6 or above).
+- Supports PDF-1.7. (well, almost)
+- Obtains the exact location of text as well as other layout information (fonts, etc.).
+- Performs automatic layout analysis.
+- Can convert PDF into other formats (HTML/XML).
+- Can extract an outline (TOC).
+- Can extract tagged contents.
+- Supports basic encryption (RC4 and AES).
+- Supports various font types (Type1, TrueType, Type3, and CID).
+- Supports CJK languages and vertical writing scripts.
+- Has an extensible PDF parser that can be used for other purposes.
## How to Use:
- 1. `> pip install pdfminer`
- 1. `> pdf2txt.py samples/simple1.pdf`
+1. `pip install -r requirements.txt`
+1. `python3 -m tools.pdf2txt samples/simple1.pdf`
+
+## How to test
+Run `python3 -m unittest` in the root folder
## Command Line Syntax:
@@ -37,7 +39,7 @@ For the active project, check out its fork
pdf2txt.py extracts all the texts that are rendered programmatically.
It also extracts the corresponding locations, font names, font sizes,
-writing direction (horizontal or vertical) for each text segment. It
+writing direction (horizontal or vertical) for each text segment. It
does not recognize text in images. A password needs to be provided for
restricted PDF documents.
@@ -49,26 +51,26 @@ restricted PDF documents.
[-F boxes_flow] [-d]
input.pdf ...
- * `-P password` : PDF password.
- * `-o output` : Output file name.
- * `-t text|html|xml|tag` : Output type. (default: automatically inferred from the output file name.)
- * `-O output_dir` : Output directory for extracted images.
- * `-c encoding` : Output encoding. (default: utf-8)
- * `-s scale` : Output scale.
- * `-R rotation` : Rotates the page in degree.
- * `-Y normal|loose|exact` : Specifies the layout mode. (only for HTML output.)
- * `-p pagenos` : Processes certain pages only.
- * `-m maxpages` : Limits the number of maximum pages to process.
- * `-S` : Strips control characters.
- * `-C` : Disables resource caching.
- * `-n` : Disables layout analysis.
- * `-A` : Applies layout analysis for all texts including figures.
- * `-V` : Automatically detects vertical writing.
- * `-M char_margin` : Speficies the char margin.
- * `-W word_margin` : Speficies the word margin.
- * `-L line_margin` : Speficies the line margin.
- * `-F boxes_flow` : Speficies the box flow ratio.
- * `-d` : Turns on Debug output.
+- `-P password` : PDF password.
+- `-o output` : Output file name.
+- `-t text|html|xml|tag` : Output type. (default: automatically inferred from the output file name.)
+- `-O output_dir` : Output directory for extracted images.
+- `-c encoding` : Output encoding. (default: utf-8)
+- `-s scale` : Output scale.
+- `-R rotation` : Rotates the page in degree.
+- `-Y normal|loose|exact` : Specifies the layout mode. (only for HTML output.)
+- `-p pagenos` : Processes certain pages only.
+- `-m maxpages` : Limits the number of maximum pages to process.
+- `-S` : Strips control characters.
+- `-C` : Disables resource caching.
+- `-n` : Disables layout analysis.
+- `-A` : Applies layout analysis for all texts including figures.
+- `-V` : Automatically detects vertical writing.
+- `-M char_margin` : Speficies the char margin.
+- `-W word_margin` : Speficies the word margin.
+- `-L line_margin` : Speficies the line margin.
+- `-F boxes_flow` : Speficies the box flow ratio.
+- `-d` : Turns on Debug output.
### dumppdf.py
@@ -79,31 +81,30 @@ It dumps all the internal contents in pseudo-XML format.
[-o output] [-r|-b|-t] [-T] [-O directory] [-d]
input.pdf ...
- * `-P password` : PDF password.
- * `-a` : Extracts all objects.
- * `-p pageid` : Extracts a Page object.
- * `-i objid` : Extracts a certain object.
- * `-o output` : Output file name.
- * `-r` : Raw mode. Dumps the raw compressed/encoded streams.
- * `-b` : Binary mode. Dumps the uncompressed/decoded streams.
- * `-t` : Text mode. Dumps the streams in text format.
- * `-T` : Tagged mode. Dumps the tagged contents.
- * `-O output_dir` : Output directory for extracted streams.
+- `-P password` : PDF password.
+- `-a` : Extracts all objects.
+- `-p pageid` : Extracts a Page object.
+- `-i objid` : Extracts a certain object.
+- `-o output` : Output file name.
+- `-r` : Raw mode. Dumps the raw compressed/encoded streams.
+- `-b` : Binary mode. Dumps the uncompressed/decoded streams.
+- `-t` : Text mode. Dumps the streams in text format.
+- `-T` : Tagged mode. Dumps the tagged contents.
+- `-O output_dir` : Output directory for extracted streams.
## TODO
- * Replace STRICT variable with something better.
- * Improve the debugging functions.
- * Use logging module instead of sys.stderr.
- * Proper test cases.
- * PEP-8 and PEP-257 conformance.
- * Better documentation.
- * Crypto stream filter support.
-
+- Replace STRICT variable with something better.
+- Improve the debugging functions.
+- Use logging module instead of sys.stderr.
+- Proper test cases.
+- PEP-8 and PEP-257 conformance.
+- Better documentation.
+- Crypto stream filter support.
## Related Projects
- * pyPdf
- * xpdf
- * pdfbox
- * mupdf
+- pyPdf
+- xpdf
+- pdfbox
+- mupdf
diff --git a/pdfminer/__init__.py b/pdfminer/__init__.py
index 03e58cdd..e69de29b 100644
--- a/pdfminer/__init__.py
+++ b/pdfminer/__init__.py
@@ -1,5 +0,0 @@
-#!/usr/bin/env python
-__version__ = '20191125'
-
-if __name__ == '__main__':
- print(__version__)
diff --git a/pdfminer/arcfour.py b/pdfminer/arcfour.py
index bed83eb0..51e9d13d 100644
--- a/pdfminer/arcfour.py
+++ b/pdfminer/arcfour.py
@@ -7,19 +7,8 @@
"""
-## Arcfour
-##
+# Arcfour
class Arcfour:
-
- """
- >>> Arcfour(b'Key').process(b'Plaintext').hex()
- 'bbf316e8d940af0ad3'
- >>> Arcfour(b'Wiki').process(b'pedia').hex()
- '1021bf0420'
- >>> Arcfour(b'Secret').process(b'Attack at dawn').hex()
- '45a01f645fc35b383552544b9bf5'
- """
-
def __init__(self, key):
s = list(range(256))
j = 0
@@ -36,19 +25,20 @@ def process(self, data):
s = self.s
r = []
for c in data:
- i = (i+1) % 256
- j = (j+s[i]) % 256
+ i = (i + 1) % 256
+ j = (j + s[i]) % 256
(s[i], s[j]) = (s[j], s[i])
- k = s[(s[i]+s[j]) % 256]
+ k = s[(s[i] + s[j]) % 256]
r.append(c ^ k)
(self.i, self.j) = (i, j)
return bytes(r)
encrypt = decrypt = process
+
new = Arcfour
-# test
if __name__ == '__main__':
import doctest
+
print('pdfminer.arcfour:', doctest.testmod())
diff --git a/pdfminer/ascii85.py b/pdfminer/ascii85.py
index b0af08c8..2696712e 100644
--- a/pdfminer/ascii85.py
+++ b/pdfminer/ascii85.py
@@ -32,16 +32,16 @@ def ascii85decode(data):
n = b = 0
out = b''
for c in data:
- if 33 <= c and c <= 117: # b'!' <= c and c <= b'u'
+ if 33 <= c and c <= 117: # b'!' <= c and c <= b'u'
n += 1
b = b*85+(c-33)
if n == 5:
out += struct.pack('>L', b)
n = b = 0
- elif c == 122: # b'z'
+ elif c == 122: # b'z'
assert n == 0
out += b'\0\0\0\0'
- elif c == 126: # b'~'
+ elif c == 126: # b'~'
if n:
for _ in range(5-n):
b = b*85+84
@@ -49,6 +49,7 @@ def ascii85decode(data):
break
return out
+
# asciihexdecode(data)
hex_re = re.compile(r'([a-f\d]{2})', re.IGNORECASE)
trail_re = re.compile(r'^(?:[a-f\d]{2}|\s)*([a-f\d])[\s>]*$', re.IGNORECASE)
@@ -72,10 +73,10 @@ def asciihexdecode(data):
b'p'
"""
data = data.decode('latin1')
- out = [ int(hx,16) for hx in hex_re.findall(data) ]
+ out = [int(hx, 16) for hx in hex_re.findall(data)]
m = trail_re.search(data)
if m:
- out.append(int(m.group(1),16) << 4)
+ out.append(int(m.group(1), 16) << 4)
return bytes(out)
diff --git a/pdfminer/ccitt.py b/pdfminer/ccitt.py
index 46e0cc72..1df4fdd3 100644
--- a/pdfminer/ccitt.py
+++ b/pdfminer/ccitt.py
@@ -5,17 +5,21 @@
#
# cf.
# ITU-T Recommendation T.4
-# "Standardization of Group 3 facsimile terminals for document transmission"
+# "Standardization of Group 3 facsimile terminals for document
+# transmission"
# ITU-T Recommendation T.6
-# "FACSIMILE CODING SCHEMES AND CODING CONTROL FUNCTIONS FOR GROUP 4 FACSIMILE APPARATUS"
+# "FACSIMILE CODING SCHEMES AND CODING CONTROL FUNCTIONS FOR
+# GROUP 4 FACSIMILE APPARATUS"
import sys
import array
+import unittest
+
-## BitParser
-##
+# BitParser
+#
class BitParser:
def __init__(self):
@@ -57,20 +61,19 @@ def _parse_bit(self, x):
return
-## CCITTG4Parser
-##
+# CCITTG4Parser
+#
class CCITTG4Parser(BitParser):
-
MODE = [None, None]
- BitParser.add(MODE, 0, '1')
- BitParser.add(MODE, +1, '011')
- BitParser.add(MODE, -1, '010')
+ BitParser.add(MODE, 0, '1')
+ BitParser.add(MODE, +1, '011')
+ BitParser.add(MODE, -1, '010')
BitParser.add(MODE, 'h', '001')
BitParser.add(MODE, 'p', '0001')
- BitParser.add(MODE, +2, '000011')
- BitParser.add(MODE, -2, '000010')
- BitParser.add(MODE, +3, '0000011')
- BitParser.add(MODE, -3, '0000010')
+ BitParser.add(MODE, +2, '000011')
+ BitParser.add(MODE, -2, '000010')
+ BitParser.add(MODE, +3, '0000011')
+ BitParser.add(MODE, -3, '0000010')
BitParser.add(MODE, 'u', '0000001111')
BitParser.add(MODE, 'x1', '0000001000')
BitParser.add(MODE, 'x2', '0000001001')
@@ -82,85 +85,85 @@ class CCITTG4Parser(BitParser):
BitParser.add(MODE, 'e', '000000000001000000000001')
WHITE = [None, None]
- BitParser.add(WHITE, 0 , '00110101')
- BitParser.add(WHITE, 1 , '000111')
- BitParser.add(WHITE, 2 , '0111')
- BitParser.add(WHITE, 3 , '1000')
- BitParser.add(WHITE, 4 , '1011')
- BitParser.add(WHITE, 5 , '1100')
- BitParser.add(WHITE, 6 , '1110')
- BitParser.add(WHITE, 7 , '1111')
- BitParser.add(WHITE, 8 , '10011')
- BitParser.add(WHITE, 9 , '10100')
- BitParser.add(WHITE, 10 , '00111')
- BitParser.add(WHITE, 11 , '01000')
- BitParser.add(WHITE, 12 , '001000')
- BitParser.add(WHITE, 13 , '000011')
- BitParser.add(WHITE, 14 , '110100')
- BitParser.add(WHITE, 15 , '110101')
- BitParser.add(WHITE, 16 , '101010')
- BitParser.add(WHITE, 17 , '101011')
- BitParser.add(WHITE, 18 , '0100111')
- BitParser.add(WHITE, 19 , '0001100')
- BitParser.add(WHITE, 20 , '0001000')
- BitParser.add(WHITE, 21 , '0010111')
- BitParser.add(WHITE, 22 , '0000011')
- BitParser.add(WHITE, 23 , '0000100')
- BitParser.add(WHITE, 24 , '0101000')
- BitParser.add(WHITE, 25 , '0101011')
- BitParser.add(WHITE, 26 , '0010011')
- BitParser.add(WHITE, 27 , '0100100')
- BitParser.add(WHITE, 28 , '0011000')
- BitParser.add(WHITE, 29 , '00000010')
- BitParser.add(WHITE, 30 , '00000011')
- BitParser.add(WHITE, 31 , '00011010')
- BitParser.add(WHITE, 32 , '00011011')
- BitParser.add(WHITE, 33 , '00010010')
- BitParser.add(WHITE, 34 , '00010011')
- BitParser.add(WHITE, 35 , '00010100')
- BitParser.add(WHITE, 36 , '00010101')
- BitParser.add(WHITE, 37 , '00010110')
- BitParser.add(WHITE, 38 , '00010111')
- BitParser.add(WHITE, 39 , '00101000')
- BitParser.add(WHITE, 40 , '00101001')
- BitParser.add(WHITE, 41 , '00101010')
- BitParser.add(WHITE, 42 , '00101011')
- BitParser.add(WHITE, 43 , '00101100')
- BitParser.add(WHITE, 44 , '00101101')
- BitParser.add(WHITE, 45 , '00000100')
- BitParser.add(WHITE, 46 , '00000101')
- BitParser.add(WHITE, 47 , '00001010')
- BitParser.add(WHITE, 48 , '00001011')
- BitParser.add(WHITE, 49 , '01010010')
- BitParser.add(WHITE, 50 , '01010011')
- BitParser.add(WHITE, 51 , '01010100')
- BitParser.add(WHITE, 52 , '01010101')
- BitParser.add(WHITE, 53 , '00100100')
- BitParser.add(WHITE, 54 , '00100101')
- BitParser.add(WHITE, 55 , '01011000')
- BitParser.add(WHITE, 56 , '01011001')
- BitParser.add(WHITE, 57 , '01011010')
- BitParser.add(WHITE, 58 , '01011011')
- BitParser.add(WHITE, 59 , '01001010')
- BitParser.add(WHITE, 60 , '01001011')
- BitParser.add(WHITE, 61 , '00110010')
- BitParser.add(WHITE, 62 , '00110011')
- BitParser.add(WHITE, 63 , '00110100')
- BitParser.add(WHITE, 64 , '11011')
- BitParser.add(WHITE, 128 , '10010')
- BitParser.add(WHITE, 192 , '010111')
- BitParser.add(WHITE, 256 , '0110111')
- BitParser.add(WHITE, 320 , '00110110')
- BitParser.add(WHITE, 384 , '00110111')
- BitParser.add(WHITE, 448 , '01100100')
- BitParser.add(WHITE, 512 , '01100101')
- BitParser.add(WHITE, 576 , '01101000')
- BitParser.add(WHITE, 640 , '01100111')
- BitParser.add(WHITE, 704 , '011001100')
- BitParser.add(WHITE, 768 , '011001101')
- BitParser.add(WHITE, 832 , '011010010')
- BitParser.add(WHITE, 896 , '011010011')
- BitParser.add(WHITE, 960 , '011010100')
+ BitParser.add(WHITE, 0, '00110101')
+ BitParser.add(WHITE, 1, '000111')
+ BitParser.add(WHITE, 2, '0111')
+ BitParser.add(WHITE, 3, '1000')
+ BitParser.add(WHITE, 4, '1011')
+ BitParser.add(WHITE, 5, '1100')
+ BitParser.add(WHITE, 6, '1110')
+ BitParser.add(WHITE, 7, '1111')
+ BitParser.add(WHITE, 8, '10011')
+ BitParser.add(WHITE, 9, '10100')
+ BitParser.add(WHITE, 10, '00111')
+ BitParser.add(WHITE, 11, '01000')
+ BitParser.add(WHITE, 12, '001000')
+ BitParser.add(WHITE, 13, '000011')
+ BitParser.add(WHITE, 14, '110100')
+ BitParser.add(WHITE, 15, '110101')
+ BitParser.add(WHITE, 16, '101010')
+ BitParser.add(WHITE, 17, '101011')
+ BitParser.add(WHITE, 18, '0100111')
+ BitParser.add(WHITE, 19, '0001100')
+ BitParser.add(WHITE, 20, '0001000')
+ BitParser.add(WHITE, 21, '0010111')
+ BitParser.add(WHITE, 22, '0000011')
+ BitParser.add(WHITE, 23, '0000100')
+ BitParser.add(WHITE, 24, '0101000')
+ BitParser.add(WHITE, 25, '0101011')
+ BitParser.add(WHITE, 26, '0010011')
+ BitParser.add(WHITE, 27, '0100100')
+ BitParser.add(WHITE, 28, '0011000')
+ BitParser.add(WHITE, 29, '00000010')
+ BitParser.add(WHITE, 30, '00000011')
+ BitParser.add(WHITE, 31, '00011010')
+ BitParser.add(WHITE, 32, '00011011')
+ BitParser.add(WHITE, 33, '00010010')
+ BitParser.add(WHITE, 34, '00010011')
+ BitParser.add(WHITE, 35, '00010100')
+ BitParser.add(WHITE, 36, '00010101')
+ BitParser.add(WHITE, 37, '00010110')
+ BitParser.add(WHITE, 38, '00010111')
+ BitParser.add(WHITE, 39, '00101000')
+ BitParser.add(WHITE, 40, '00101001')
+ BitParser.add(WHITE, 41, '00101010')
+ BitParser.add(WHITE, 42, '00101011')
+ BitParser.add(WHITE, 43, '00101100')
+ BitParser.add(WHITE, 44, '00101101')
+ BitParser.add(WHITE, 45, '00000100')
+ BitParser.add(WHITE, 46, '00000101')
+ BitParser.add(WHITE, 47, '00001010')
+ BitParser.add(WHITE, 48, '00001011')
+ BitParser.add(WHITE, 49, '01010010')
+ BitParser.add(WHITE, 50, '01010011')
+ BitParser.add(WHITE, 51, '01010100')
+ BitParser.add(WHITE, 52, '01010101')
+ BitParser.add(WHITE, 53, '00100100')
+ BitParser.add(WHITE, 54, '00100101')
+ BitParser.add(WHITE, 55, '01011000')
+ BitParser.add(WHITE, 56, '01011001')
+ BitParser.add(WHITE, 57, '01011010')
+ BitParser.add(WHITE, 58, '01011011')
+ BitParser.add(WHITE, 59, '01001010')
+ BitParser.add(WHITE, 60, '01001011')
+ BitParser.add(WHITE, 61, '00110010')
+ BitParser.add(WHITE, 62, '00110011')
+ BitParser.add(WHITE, 63, '00110100')
+ BitParser.add(WHITE, 64, '11011')
+ BitParser.add(WHITE, 128, '10010')
+ BitParser.add(WHITE, 192, '010111')
+ BitParser.add(WHITE, 256, '0110111')
+ BitParser.add(WHITE, 320, '00110110')
+ BitParser.add(WHITE, 384, '00110111')
+ BitParser.add(WHITE, 448, '01100100')
+ BitParser.add(WHITE, 512, '01100101')
+ BitParser.add(WHITE, 576, '01101000')
+ BitParser.add(WHITE, 640, '01100111')
+ BitParser.add(WHITE, 704, '011001100')
+ BitParser.add(WHITE, 768, '011001101')
+ BitParser.add(WHITE, 832, '011010010')
+ BitParser.add(WHITE, 896, '011010011')
+ BitParser.add(WHITE, 960, '011010100')
BitParser.add(WHITE, 1024, '011010101')
BitParser.add(WHITE, 1088, '011010110')
BitParser.add(WHITE, 1152, '011010111')
@@ -188,85 +191,85 @@ class CCITTG4Parser(BitParser):
BitParser.add(WHITE, 2560, '000000011111')
BLACK = [None, None]
- BitParser.add(BLACK, 0 , '0000110111')
- BitParser.add(BLACK, 1 , '010')
- BitParser.add(BLACK, 2 , '11')
- BitParser.add(BLACK, 3 , '10')
- BitParser.add(BLACK, 4 , '011')
- BitParser.add(BLACK, 5 , '0011')
- BitParser.add(BLACK, 6 , '0010')
- BitParser.add(BLACK, 7 , '00011')
- BitParser.add(BLACK, 8 , '000101')
- BitParser.add(BLACK, 9 , '000100')
- BitParser.add(BLACK, 10 , '0000100')
- BitParser.add(BLACK, 11 , '0000101')
- BitParser.add(BLACK, 12 , '0000111')
- BitParser.add(BLACK, 13 , '00000100')
- BitParser.add(BLACK, 14 , '00000111')
- BitParser.add(BLACK, 15 , '000011000')
- BitParser.add(BLACK, 16 , '0000010111')
- BitParser.add(BLACK, 17 , '0000011000')
- BitParser.add(BLACK, 18 , '0000001000')
- BitParser.add(BLACK, 19 , '00001100111')
- BitParser.add(BLACK, 20 , '00001101000')
- BitParser.add(BLACK, 21 , '00001101100')
- BitParser.add(BLACK, 22 , '00000110111')
- BitParser.add(BLACK, 23 , '00000101000')
- BitParser.add(BLACK, 24 , '00000010111')
- BitParser.add(BLACK, 25 , '00000011000')
- BitParser.add(BLACK, 26 , '000011001010')
- BitParser.add(BLACK, 27 , '000011001011')
- BitParser.add(BLACK, 28 , '000011001100')
- BitParser.add(BLACK, 29 , '000011001101')
- BitParser.add(BLACK, 30 , '000001101000')
- BitParser.add(BLACK, 31 , '000001101001')
- BitParser.add(BLACK, 32 , '000001101010')
- BitParser.add(BLACK, 33 , '000001101011')
- BitParser.add(BLACK, 34 , '000011010010')
- BitParser.add(BLACK, 35 , '000011010011')
- BitParser.add(BLACK, 36 , '000011010100')
- BitParser.add(BLACK, 37 , '000011010101')
- BitParser.add(BLACK, 38 , '000011010110')
- BitParser.add(BLACK, 39 , '000011010111')
- BitParser.add(BLACK, 40 , '000001101100')
- BitParser.add(BLACK, 41 , '000001101101')
- BitParser.add(BLACK, 42 , '000011011010')
- BitParser.add(BLACK, 43 , '000011011011')
- BitParser.add(BLACK, 44 , '000001010100')
- BitParser.add(BLACK, 45 , '000001010101')
- BitParser.add(BLACK, 46 , '000001010110')
- BitParser.add(BLACK, 47 , '000001010111')
- BitParser.add(BLACK, 48 , '000001100100')
- BitParser.add(BLACK, 49 , '000001100101')
- BitParser.add(BLACK, 50 , '000001010010')
- BitParser.add(BLACK, 51 , '000001010011')
- BitParser.add(BLACK, 52 , '000000100100')
- BitParser.add(BLACK, 53 , '000000110111')
- BitParser.add(BLACK, 54 , '000000111000')
- BitParser.add(BLACK, 55 , '000000100111')
- BitParser.add(BLACK, 56 , '000000101000')
- BitParser.add(BLACK, 57 , '000001011000')
- BitParser.add(BLACK, 58 , '000001011001')
- BitParser.add(BLACK, 59 , '000000101011')
- BitParser.add(BLACK, 60 , '000000101100')
- BitParser.add(BLACK, 61 , '000001011010')
- BitParser.add(BLACK, 62 , '000001100110')
- BitParser.add(BLACK, 63 , '000001100111')
- BitParser.add(BLACK, 64 , '0000001111')
- BitParser.add(BLACK, 128 , '000011001000')
- BitParser.add(BLACK, 192 , '000011001001')
- BitParser.add(BLACK, 256 , '000001011011')
- BitParser.add(BLACK, 320 , '000000110011')
- BitParser.add(BLACK, 384 , '000000110100')
- BitParser.add(BLACK, 448 , '000000110101')
- BitParser.add(BLACK, 512 , '0000001101100')
- BitParser.add(BLACK, 576 , '0000001101101')
- BitParser.add(BLACK, 640 , '0000001001010')
- BitParser.add(BLACK, 704 , '0000001001011')
- BitParser.add(BLACK, 768 , '0000001001100')
- BitParser.add(BLACK, 832 , '0000001001101')
- BitParser.add(BLACK, 896 , '0000001110010')
- BitParser.add(BLACK, 960 , '0000001110011')
+ BitParser.add(BLACK, 0, '0000110111')
+ BitParser.add(BLACK, 1, '010')
+ BitParser.add(BLACK, 2, '11')
+ BitParser.add(BLACK, 3, '10')
+ BitParser.add(BLACK, 4, '011')
+ BitParser.add(BLACK, 5, '0011')
+ BitParser.add(BLACK, 6, '0010')
+ BitParser.add(BLACK, 7, '00011')
+ BitParser.add(BLACK, 8, '000101')
+ BitParser.add(BLACK, 9, '000100')
+ BitParser.add(BLACK, 10, '0000100')
+ BitParser.add(BLACK, 11, '0000101')
+ BitParser.add(BLACK, 12, '0000111')
+ BitParser.add(BLACK, 13, '00000100')
+ BitParser.add(BLACK, 14, '00000111')
+ BitParser.add(BLACK, 15, '000011000')
+ BitParser.add(BLACK, 16, '0000010111')
+ BitParser.add(BLACK, 17, '0000011000')
+ BitParser.add(BLACK, 18, '0000001000')
+ BitParser.add(BLACK, 19, '00001100111')
+ BitParser.add(BLACK, 20, '00001101000')
+ BitParser.add(BLACK, 21, '00001101100')
+ BitParser.add(BLACK, 22, '00000110111')
+ BitParser.add(BLACK, 23, '00000101000')
+ BitParser.add(BLACK, 24, '00000010111')
+ BitParser.add(BLACK, 25, '00000011000')
+ BitParser.add(BLACK, 26, '000011001010')
+ BitParser.add(BLACK, 27, '000011001011')
+ BitParser.add(BLACK, 28, '000011001100')
+ BitParser.add(BLACK, 29, '000011001101')
+ BitParser.add(BLACK, 30, '000001101000')
+ BitParser.add(BLACK, 31, '000001101001')
+ BitParser.add(BLACK, 32, '000001101010')
+ BitParser.add(BLACK, 33, '000001101011')
+ BitParser.add(BLACK, 34, '000011010010')
+ BitParser.add(BLACK, 35, '000011010011')
+ BitParser.add(BLACK, 36, '000011010100')
+ BitParser.add(BLACK, 37, '000011010101')
+ BitParser.add(BLACK, 38, '000011010110')
+ BitParser.add(BLACK, 39, '000011010111')
+ BitParser.add(BLACK, 40, '000001101100')
+ BitParser.add(BLACK, 41, '000001101101')
+ BitParser.add(BLACK, 42, '000011011010')
+ BitParser.add(BLACK, 43, '000011011011')
+ BitParser.add(BLACK, 44, '000001010100')
+ BitParser.add(BLACK, 45, '000001010101')
+ BitParser.add(BLACK, 46, '000001010110')
+ BitParser.add(BLACK, 47, '000001010111')
+ BitParser.add(BLACK, 48, '000001100100')
+ BitParser.add(BLACK, 49, '000001100101')
+ BitParser.add(BLACK, 50, '000001010010')
+ BitParser.add(BLACK, 51, '000001010011')
+ BitParser.add(BLACK, 52, '000000100100')
+ BitParser.add(BLACK, 53, '000000110111')
+ BitParser.add(BLACK, 54, '000000111000')
+ BitParser.add(BLACK, 55, '000000100111')
+ BitParser.add(BLACK, 56, '000000101000')
+ BitParser.add(BLACK, 57, '000001011000')
+ BitParser.add(BLACK, 58, '000001011001')
+ BitParser.add(BLACK, 59, '000000101011')
+ BitParser.add(BLACK, 60, '000000101100')
+ BitParser.add(BLACK, 61, '000001011010')
+ BitParser.add(BLACK, 62, '000001100110')
+ BitParser.add(BLACK, 63, '000001100111')
+ BitParser.add(BLACK, 64, '0000001111')
+ BitParser.add(BLACK, 128, '000011001000')
+ BitParser.add(BLACK, 192, '000011001001')
+ BitParser.add(BLACK, 256, '000001011011')
+ BitParser.add(BLACK, 320, '000000110011')
+ BitParser.add(BLACK, 384, '000000110100')
+ BitParser.add(BLACK, 448, '000000110101')
+ BitParser.add(BLACK, 512, '0000001101100')
+ BitParser.add(BLACK, 576, '0000001101101')
+ BitParser.add(BLACK, 640, '0000001001010')
+ BitParser.add(BLACK, 704, '0000001001011')
+ BitParser.add(BLACK, 768, '0000001001100')
+ BitParser.add(BLACK, 832, '0000001001101')
+ BitParser.add(BLACK, 896, '0000001110010')
+ BitParser.add(BLACK, 960, '0000001110011')
BitParser.add(BLACK, 1024, '0000001110100')
BitParser.add(BLACK, 1088, '0000001110101')
BitParser.add(BLACK, 1152, '0000001110110')
@@ -367,7 +370,7 @@ def _parse_horiz1(self, n):
self._n1 += n
if n < 64:
self._n2 = 0
- self._color = 1-self._color
+ self._color = 1 - self._color
self._accept = self._parse_horiz2
if self._color:
return self.WHITE
@@ -379,7 +382,7 @@ def _parse_horiz2(self, n):
raise self.InvalidData
self._n2 += n
if n < 64:
- self._color = 1-self._color
+ self._color = 1 - self._color
self._accept = self._parse_mode
self._do_horizontal(self._n1, self._n2)
self._flush_line()
@@ -406,17 +409,16 @@ def _get_bits(self):
def _get_refline(self, i):
if i < 0:
- return '[]'+''.join(str(b) for b in self._refline)
+ return '[]' + ''.join(str(b) for b in self._refline)
elif len(self._refline) <= i:
- return ''.join(str(b) for b in self._refline)+'[]'
+ return ''.join(str(b) for b in self._refline) + '[]'
else:
- return (''.join(str(b) for b in self._refline[:i]) +
- '['+str(self._refline[i])+']' +
- ''.join(str(b) for b in self._refline[i+1:]))
+ return (''.join(str(b) for b in self._refline[:i]) + '[' + str(self._refline[i]) + ']' + ''.join(
+ str(b) for b in self._refline[i + 1:]))
def reset(self):
self._y = 0
- self._curline = array.array('b', [1]*self.width)
+ self._curline = array.array('b', [1] * self.width)
self._reset_line()
self._accept = self._parse_mode
self._state = self.MODE
@@ -428,7 +430,7 @@ def output_line(self, y, bits):
def _reset_line(self):
self._refline = self._curline
- self._curline = array.array('b', [1]*self.width)
+ self._curline = array.array('b', [1] * self.width)
self._curpos = -1
self._color = 1
return
@@ -443,17 +445,17 @@ def _flush_line(self):
return
def _do_vertical(self, dx):
- #print('* vertical(%d): curpos=%r, color=%r' % (dx, self._curpos, self._color))
- #print(' refline:', self._get_refline(self._curpos+1))
- x1 = self._curpos+1
+ # print('* vertical(%d): curpos=%r, color=%r' % (dx, self._curpos,
+ # self._color))
+ # print(' refline:', self._get_refline(self._curpos+1))
+ x1 = self._curpos + 1
while 1:
if x1 == 0:
if (self._color == 1 and self._refline[x1] != self._color):
break
elif x1 == len(self._refline):
break
- elif (self._refline[x1-1] == self._color and
- self._refline[x1] != self._color):
+ elif (self._refline[x1 - 1] == self._color and self._refline[x1] != self._color):
break
x1 += 1
x1 += dx
@@ -466,21 +468,20 @@ def _do_vertical(self, dx):
for x in range(x0, x1):
self._curline[x] = self._color
self._curpos = x1
- self._color = 1-self._color
+ self._color = 1 - self._color
return
def _do_pass(self):
- #print('* pass: curpos=%r, color=%r' % (self._curpos, self._color))
- #print(' refline:', self._get_refline(self._curpos+1))
- x1 = self._curpos+1
+ # print('* pass: curpos=%r, color=%r' % (self._curpos, self._color))
+ # print(' refline:', self._get_refline(self._curpos+1))
+ x1 = self._curpos + 1
while 1:
if x1 == 0:
if (self._color == 1 and self._refline[x1] != self._color):
break
elif x1 == len(self._refline):
break
- elif (self._refline[x1-1] == self._color and
- self._refline[x1] != self._color):
+ elif (self._refline[x1 - 1] == self._color and self._refline[x1] != self._color):
break
x1 += 1
while 1:
@@ -489,8 +490,7 @@ def _do_pass(self):
break
elif x1 == len(self._refline):
break
- elif (self._refline[x1-1] != self._color and
- self._refline[x1] == self._color):
+ elif (self._refline[x1 - 1] != self._color and self._refline[x1] == self._color):
break
x1 += 1
for x in range(self._curpos, x1):
@@ -499,7 +499,8 @@ def _do_pass(self):
return
def _do_horizontal(self, n1, n2):
- #print('* horizontal(%d,%d): curpos=%r, color=%r' % (n1, n2, self._curpos, self._color))
+ # print('* horizontal(%d,%d): curpos=%r, color=%r' % (n1, n2,
+ # self._curpos, self._color))
if self._curpos < 0:
self._curpos = 0
x = self._curpos
@@ -511,179 +512,22 @@ def _do_horizontal(self, n1, n2):
for _ in range(n2):
if len(self._curline) <= x:
break
- self._curline[x] = 1-self._color
+ self._curline[x] = 1 - self._color
x += 1
self._curpos = x
return
def _do_uncompressed(self, bits):
- #print('* uncompressed(%r): curpos=%r' % (bits, self._curpos))
+ # print('* uncompressed(%r): curpos=%r' % (bits, self._curpos))
for c in bits:
self._curline[self._curpos] = int(c)
self._curpos += 1
self._flush_line()
return
-import unittest
-
-
-## Test cases
-##
-class TestCCITTG4Parser(unittest.TestCase):
-
- def get_parser(self, bits):
- parser = CCITTG4Parser(len(bits))
- parser._curline = [int(c) for c in bits]
- parser._reset_line()
- return parser
-
- def test_b1(self):
- parser = self.get_parser('00000')
- parser._do_vertical(0)
- self.assertEqual(parser._curpos, 0)
- return
-
- def test_b2(self):
- parser = self.get_parser('10000')
- parser._do_vertical(-1)
- self.assertEqual(parser._curpos, 0)
- return
-
- def test_b3(self):
- parser = self.get_parser('000111')
- parser._do_pass()
- self.assertEqual(parser._curpos, 3)
- self.assertEqual(parser._get_bits(), '111')
- return
-
- def test_b4(self):
- parser = self.get_parser('00000')
- parser._do_vertical(+2)
- self.assertEqual(parser._curpos, 2)
- self.assertEqual(parser._get_bits(), '11')
- return
-
- def test_b5(self):
- parser = self.get_parser('11111111100')
- parser._do_horizontal(0, 3)
- self.assertEqual(parser._curpos, 3)
- parser._do_vertical(1)
- self.assertEqual(parser._curpos, 10)
- self.assertEqual(parser._get_bits(), '0001111111')
- return
-
- def test_e1(self):
- parser = self.get_parser('10000')
- parser._do_vertical(0)
- self.assertEqual(parser._curpos, 1)
- parser._do_vertical(0)
- self.assertEqual(parser._curpos, 5)
- self.assertEqual(parser._get_bits(), '10000')
- return
-
- def test_e2(self):
- parser = self.get_parser('10011')
- parser._do_vertical(0)
- self.assertEqual(parser._curpos, 1)
- parser._do_vertical(2)
- self.assertEqual(parser._curpos, 5)
- self.assertEqual(parser._get_bits(), '10000')
- return
- def test_e3(self):
- parser = self.get_parser('011111')
- parser._color = 0
- parser._do_vertical(0)
- self.assertEqual(parser._color, 1)
- self.assertEqual(parser._curpos, 1)
- parser._do_vertical(-2)
- self.assertEqual(parser._color, 0)
- self.assertEqual(parser._curpos, 4)
- parser._do_vertical(0)
- self.assertEqual(parser._curpos, 6)
- self.assertEqual(parser._get_bits(), '011100')
- return
-
- def test_e4(self):
- parser = self.get_parser('10000')
- parser._do_vertical(0)
- self.assertEqual(parser._curpos, 1)
- parser._do_vertical(-2)
- self.assertEqual(parser._curpos, 3)
- parser._do_vertical(0)
- self.assertEqual(parser._curpos, 5)
- self.assertEqual(parser._get_bits(), '10011')
- return
-
- def test_e5(self):
- parser = self.get_parser('011000')
- parser._color = 0
- parser._do_vertical(0)
- self.assertEqual(parser._curpos, 1)
- parser._do_vertical(3)
- self.assertEqual(parser._curpos, 6)
- self.assertEqual(parser._get_bits(), '011111')
- return
-
- def test_e6(self):
- parser = self.get_parser('11001')
- parser._do_pass()
- self.assertEqual(parser._curpos, 4)
- parser._do_vertical(0)
- self.assertEqual(parser._curpos, 5)
- self.assertEqual(parser._get_bits(), '11111')
- return
-
- def test_e7(self):
- parser = self.get_parser('0000000000')
- parser._curpos = 2
- parser._color = 1
- parser._do_horizontal(2, 6)
- self.assertEqual(parser._curpos, 10)
- self.assertEqual(parser._get_bits(), '1111000000')
- return
-
- def test_e8(self):
- parser = self.get_parser('001100000')
- parser._curpos = 1
- parser._color = 0
- parser._do_vertical(0)
- self.assertEqual(parser._curpos, 2)
- parser._do_horizontal(7, 0)
- self.assertEqual(parser._curpos, 9)
- self.assertEqual(parser._get_bits(), '101111111')
- return
-
- def test_m1(self):
- parser = self.get_parser('10101')
- parser._do_pass()
- self.assertEqual(parser._curpos, 2)
- parser._do_pass()
- self.assertEqual(parser._curpos, 4)
- self.assertEqual(parser._get_bits(), '1111')
- return
-
- def test_m2(self):
- parser = self.get_parser('101011')
- parser._do_vertical(-1)
- parser._do_vertical(-1)
- parser._do_vertical(1)
- parser._do_horizontal(1, 1)
- self.assertEqual(parser._get_bits(), '011101')
- return
-
- def test_m3(self):
- parser = self.get_parser('10111011')
- parser._do_vertical(-1)
- parser._do_pass()
- parser._do_vertical(1)
- parser._do_vertical(1)
- self.assertEqual(parser._get_bits(), '00000001')
- return
-
-
-## CCITTFaxDecoder
-##
+# CCITTFaxDecoder
+#
class CCITTFaxDecoder(CCITTG4Parser):
def __init__(self, width, bytealign=False, reversed=False):
@@ -696,12 +540,12 @@ def close(self):
return self._buf
def output_line(self, y, bits):
- bytes = array.array('B', [0]*((len(bits)+7)//8))
+ bytes = array.array('B', [0] * ((len(bits) + 7) // 8))
if self.reversed:
- bits = [1-b for b in bits]
+ bits = [1 - b for b in bits]
for (i, b) in enumerate(bits):
if b:
- bytes[i//8] += (128, 64, 32, 16, 8, 4, 2, 1)[i % 8]
+ bytes[i // 8] += (128, 64, 32, 16, 8, 4, 2, 1)[i % 8]
self._buf += bytes.tostring()
return
@@ -721,9 +565,6 @@ def ccittfaxdecode(data, params):
# test
def main(argv):
- if not argv[1:]:
- return unittest.main()
-
class Parser(CCITTG4Parser):
def __init__(self, width, bytealign=False):
@@ -753,4 +594,6 @@ def close(self):
parser.close()
return
-if __name__ == '__main__': sys.exit(main(sys.argv))
+
+if __name__ == '__main__':
+ sys.exit(main(sys.argv))
diff --git a/pdfminer/cmapdb.py b/pdfminer/cmapdb.py
index fa72f0d2..d231cd87 100644
--- a/pdfminer/cmapdb.py
+++ b/pdfminer/cmapdb.py
@@ -34,10 +34,9 @@ class CMapError(Exception):
pass
-## CMapBase
-##
+# CMapBase
+#
class CMapBase:
-
debug = 0
def __init__(self, **kwargs):
@@ -61,8 +60,8 @@ def use_cmap(self, cmap):
return
-## CMap
-##
+# CMap
+#
class CMap(CMapBase):
def __init__(self, **kwargs):
@@ -84,6 +83,7 @@ def copy(dst, src):
copy(d, v)
else:
dst[k] = v
+
copy(self.code2cid, cmap.code2cid)
return
@@ -106,7 +106,7 @@ def dump(self, out=sys.stdout, code2cid=None, code=None):
code2cid = self.code2cid
code = ()
for (k, v) in sorted(code2cid.items()):
- c = code+(k,)
+ c = code + (k,)
if isinstance(v, int):
out.write('code %r = cid %d\n' % (c, v))
else:
@@ -114,20 +114,20 @@ def dump(self, out=sys.stdout, code2cid=None, code=None):
return
-## IdentityCMap
-##
+# IdentityCMap
+#
class IdentityCMap(CMapBase):
def decode(self, code):
- n = len(code)//2
+ n = len(code) // 2
if n:
return struct.unpack('>%dH' % n, code)
else:
return ()
-## UnicodeMap
-##
+# UnicodeMap
+#
class UnicodeMap(CMapBase):
def __init__(self, **kwargs):
@@ -149,8 +149,8 @@ def dump(self, out=sys.stdout):
return
-## FileCMap
-##
+# FileCMap
+#
class FileCMap(CMap):
def add_code2cid(self, code, cid):
@@ -169,8 +169,8 @@ def add_code2cid(self, code, cid):
return
-## FileUnicodeMap
-##
+# FileUnicodeMap
+#
class FileUnicodeMap(UnicodeMap):
def add_cid2unichr(self, cid, code):
@@ -188,8 +188,8 @@ def add_cid2unichr(self, cid, code):
return
-## PyCMap
-##
+# PyCMap
+#
class PyCMap(CMap):
def __init__(self, name, module):
@@ -200,8 +200,8 @@ def __init__(self, name, module):
return
-## PyUnicodeMap
-##
+# PyUnicodeMap
+#
class PyUnicodeMap(UnicodeMap):
def __init__(self, name, module, vertical):
@@ -214,10 +214,9 @@ def __init__(self, name, module, vertical):
return
-## CMapDB
-##
+# CMapDB
+#
class CMapDB:
-
_cmap_cache = {}
_umap_cache = {}
@@ -262,12 +261,13 @@ def get_unicode_map(klass, name, vertical=False):
except KeyError:
pass
data = klass._load_data('to-unicode-%s' % name)
- klass._umap_cache[name] = umaps = [PyUnicodeMap(name, data, v) for v in (False, True)]
+ klass._umap_cache[name] = umaps = \
+ [PyUnicodeMap(name, data, v) for v in (False, True)]
return umaps[vertical]
-## CMapParser
-##
+# CMapParser
+#
class CMapParser(PSStackParser):
def __init__(self, cmap, fp):
@@ -344,7 +344,7 @@ def do_keyword(self, pos, token):
objs = [obj for (__, obj) in self.popall()]
for (s, e, cid) in choplist(3, objs):
if (not isinstance(s, bytes) or not isinstance(e, bytes) or
- not isinstance(cid, int) or len(s) != len(e)):
+ not isinstance(cid, int) or len(s) != len(e)):
continue
sprefix = s[:-4]
eprefix = e[:-4]
@@ -355,10 +355,10 @@ def do_keyword(self, pos, token):
s1 = nunpack(svar)
e1 = nunpack(evar)
vlen = len(svar)
- #assert s1 <= e1
- for i in range(e1-s1+1):
- x = sprefix+struct.pack('>L', s1+i)[-vlen:]
- self.cmap.add_code2cid(x, cid+i)
+ # assert s1 <= e1
+ for i in range(e1 - s1 + 1):
+ x = sprefix + struct.pack('>L', s1 + i)[-vlen:]
+ self.cmap.add_code2cid(x, cid + i)
return
if token is self.KEYWORD_BEGINCIDCHAR:
@@ -378,22 +378,22 @@ def do_keyword(self, pos, token):
objs = [obj for (__, obj) in self.popall()]
for (s, e, code) in choplist(3, objs):
if (not isinstance(s, bytes) or not isinstance(e, bytes) or
- len(s) != len(e)):
- continue
+ len(s) != len(e)):
+ continue
s1 = nunpack(s)
e1 = nunpack(e)
- #assert s1 <= e1
+ # assert s1 <= e1
if isinstance(code, list):
- for i in range(e1-s1+1):
- self.cmap.add_cid2unichr(s1+i, code[i])
+ for i in range(e1 - s1 + 1):
+ self.cmap.add_cid2unichr(s1 + i, code[i])
else:
var = code[-4:]
base = nunpack(var)
prefix = code[:-4]
vlen = len(var)
- for i in range(e1-s1+1):
- x = prefix+struct.pack('>L', base+i)[-vlen:]
- self.cmap.add_cid2unichr(s1+i, x)
+ for i in range(e1 - s1 + 1):
+ x = prefix + struct.pack('>L', base + i)[-vlen:]
+ self.cmap.add_cid2unichr(s1 + i, x)
return
if token is self.KEYWORD_BEGINBFCHAR:
@@ -417,16 +417,16 @@ def do_keyword(self, pos, token):
return
-## CMapConverter
-##
+# CMapConverter
+#
class CMapConverter:
def __init__(self, enc2codec={}):
self.enc2codec = enc2codec
- self.code2cid = {} # {'cmapname': ...}
+ self.code2cid = {} # {'cmapname': ...}
self.is_vertical = {}
- self.cid2unichr_h = {} # {cid: unichr}
- self.cid2unichr_v = {} # {cid: unichr}
+ self.cid2unichr_h = {} # {cid: unichr}
+ self.cid2unichr_v = {} # {cid: unichr}
return
def get_encs(self):
@@ -438,7 +438,7 @@ def get_maps(self, enc):
elif enc == 'H':
(hmapenc, vmapenc) = ('H', 'V')
else:
- (hmapenc, vmapenc) = (enc+'-H', enc+'-V')
+ (hmapenc, vmapenc) = (enc + '-H', enc + '-V')
if hmapenc in self.code2cid:
hmap = self.code2cid[hmapenc]
else:
@@ -457,8 +457,9 @@ def get_maps(self, enc):
def load(self, fp):
encs = None
for line in fp:
- (line,_,_) = line.strip().partition('#')
- if not line: continue
+ (line, _, _) = line.strip().partition('#')
+ if not line:
+ continue
values = line.split('\t')
if encs is None:
assert values[0] == 'CID'
@@ -495,16 +496,18 @@ def add(unimap, enc, code):
def pick(unimap):
chars = sorted(
unimap.items(),
- key=(lambda x:(x[1],-ord(x[0]))), reverse=True)
- (c,_) = chars[0]
+ key=(lambda x: (x[1], -ord(x[0]))), reverse=True)
+ (c, _) = chars[0]
return c
cid = int(values[0])
unimap_h = {}
unimap_v = {}
- for (enc,value) in zip(encs, values):
- if enc == 'CID': continue
- if value == '*': continue
+ for (enc, value) in zip(encs, values):
+ if enc == 'CID':
+ continue
+ if value == '*':
+ continue
# hcodes, vcodes: encoded bytes for each writing mode.
hcodes = []
@@ -515,7 +518,7 @@ def pick(unimap):
code = code[:-1]
try:
code = codecs.decode(code, 'hex')
- except:
+ except Exception:
code = bytes([int(code, 16)])
if vertical:
vcodes.append(code)
@@ -560,6 +563,7 @@ def dump_unicodemap(self, fp):
fp.write(marshal.dumps(data))
return
+
# convert_cmap
def convert_cmap(outdir, regname, enc2codec, paths):
converter = CMapConverter(enc2codec)
@@ -593,10 +597,11 @@ def main(argv):
for fname in args:
with open(fname, 'rb') as fp:
cmap = FileUnicodeMap()
- #cmap = FileCMap()
+ # cmap = FileCMap()
CMapParser(cmap, fp).run()
cmap.dump()
return
+
if __name__ == '__main__':
sys.exit(main(sys.argv))
diff --git a/pdfminer/converter.py b/pdfminer/converter.py
index 020ea97d..35f9e12e 100644
--- a/pdfminer/converter.py
+++ b/pdfminer/converter.py
@@ -22,8 +22,8 @@
from .utils import bbox2str
-## PDFLayoutAnalyzer
-##
+# PDFLayoutAnalyzer
+#
class PDFLayoutAnalyzer(PDFTextDevice):
def __init__(self, rsrcmgr, pageno=1, laparams=None):
@@ -37,7 +37,7 @@ def begin_page(self, page, ctm):
(x0, y0, x1, y1) = page.mediabox
(x0, y0) = apply_matrix_pt(ctm, (x0, y0))
(x1, y1) = apply_matrix_pt(ctm, (x1, y1))
- mediabox = (0, 0, abs(x0-x1), abs(y0-y1))
+ mediabox = (0, 0, abs(x0 - x1), abs(y0 - y1))
self.cur_item = LTPage(self.pageno, mediabox)
return
@@ -92,14 +92,14 @@ def paint_path(self, gstate, stroke, fill, evenodd, path):
(x2, y2) = apply_matrix_pt(self.ctm, (x2, y2))
(x3, y3) = apply_matrix_pt(self.ctm, (x3, y3))
if ((x0 == x1 and y1 == y2 and x2 == x3 and y3 == y0) or
- (y0 == y1 and x1 == x2 and y2 == y3 and x3 == x0)):
+ (y0 == y1 and x1 == x2 and y2 == y3 and x3 == x0)):
self.cur_item.add(LTRect(gstate.linewidth, (x0, y0, x2, y2)))
return
# other shapes
pts = []
for p in path:
for i in range(1, len(p), 2):
- pts.append(apply_matrix_pt(self.ctm, (p[i], p[i+1])))
+ pts.append(apply_matrix_pt(self.ctm, (p[i], p[i + 1])))
self.cur_item.add(LTCurve(gstate.linewidth, pts))
return
@@ -111,7 +111,15 @@ def render_char(self, matrix, font, fontsize, scaling, rise, cid):
text = self.handle_undefined_char(font, cid)
textwidth = font.char_width(cid)
textdisp = font.char_disp(cid)
- item = LTChar(matrix, font, fontsize, scaling, rise, text, textwidth, textdisp)
+ item = LTChar(
+ matrix,
+ font,
+ fontsize,
+ scaling,
+ rise,
+ text,
+ textwidth,
+ textdisp)
self.cur_item.add(item)
return item.adv
@@ -123,12 +131,13 @@ def receive_layout(self, ltpage):
return
-## PDFPageAggregator
-##
+# PDFPageAggregator
+#
class PDFPageAggregator(PDFLayoutAnalyzer):
def __init__(self, rsrcmgr, pageno=1, laparams=None):
- PDFLayoutAnalyzer.__init__(self, rsrcmgr, pageno=pageno, laparams=laparams)
+ PDFLayoutAnalyzer.__init__(
+ self, rsrcmgr, pageno=pageno, laparams=laparams)
self.result = None
return
@@ -140,23 +149,29 @@ def get_result(self):
return self.result
-## PDFConverter
-##
+# PDFConverter
+#
class PDFConverter(PDFLayoutAnalyzer):
def __init__(self, rsrcmgr, outfp, pageno=1, laparams=None):
- PDFLayoutAnalyzer.__init__(self, rsrcmgr, pageno=pageno, laparams=laparams)
+ PDFLayoutAnalyzer.__init__(
+ self, rsrcmgr, pageno=pageno, laparams=laparams)
self.outfp = outfp
return
-## TextConverter
-##
+# TextConverter
+#
class TextConverter(PDFConverter):
def __init__(self, rsrcmgr, outfp, pageno=1, laparams=None,
showpageno=False, imagewriter=None):
- PDFConverter.__init__(self, rsrcmgr, outfp, pageno=pageno, laparams=laparams)
+ PDFConverter.__init__(
+ self,
+ rsrcmgr,
+ outfp,
+ pageno=pageno,
+ laparams=laparams)
self.showpageno = showpageno
self.imagewriter = imagewriter
return
@@ -177,6 +192,7 @@ def render(item):
elif isinstance(item, LTImage):
if self.imagewriter is not None:
self.imagewriter.export_image(item)
+
if self.showpageno:
self.write_text('Page %s\n' % ltpage.pageid)
render(ltpage)
@@ -196,12 +212,11 @@ def paint_path(self, gstate, stroke, fill, evenodd, path):
return
-## HTMLConverter
-##
+# HTMLConverter
+#
class HTMLConverter(PDFConverter):
-
RECT_COLORS = {
- #'char': 'green',
+ # 'char': 'green',
'figure': 'yellow',
'textline': 'magenta',
'textbox': 'cyan',
@@ -220,7 +235,12 @@ def __init__(self, rsrcmgr, outfp, pageno=1, laparams=None,
pagemargin=50, imagewriter=None, debug=0,
rect_colors={'curve': 'black', 'page': 'gray'},
text_colors={'char': 'black'}):
- PDFConverter.__init__(self, rsrcmgr, outfp, pageno=pageno, laparams=laparams)
+ PDFConverter.__init__(
+ self,
+ rsrcmgr,
+ outfp,
+ pageno=pageno,
+ laparams=laparams)
self.scale = scale
self.fontscale = fontscale
self.layoutmode = layoutmode
@@ -244,13 +264,19 @@ def write(self, text):
def write_header(self):
self.write('
\n')
- self.write('\n')
+ self.write(
+ '\n')
self.write('\n')
return
def write_footer(self):
- self.write('Page: %s
\n' %
- ', '.join('%s' % (i, i) for i in range(1, self.pageno)))
+ self.write(
+ 'Page: %s
\n' %
+ ', '.join(
+ '%s' %
+ (i, i) for i in range(
+ 1, self.pageno)))
self.write('\n')
return
@@ -261,32 +287,58 @@ def write_text(self, text):
def place_rect(self, color, borderwidth, x, y, w, h):
color = self.rect_colors.get(color)
if color is not None:
- self.write('\n' %
- (color, borderwidth,
- x*self.scale, (self._yoffset-y)*self.scale,
- w*self.scale, h*self.scale))
+ self.write(
+ '\n' %
+ (color,
+ borderwidth,
+ x * self.scale,
+ (self._yoffset - y) * self.scale,
+ w * self.scale,
+ h * self.scale))
return
def place_border(self, color, borderwidth, item):
- self.place_rect(color, borderwidth, item.x0, item.y1, item.width, item.height)
+ self.place_rect(
+ color,
+ borderwidth,
+ item.x0,
+ item.y1,
+ item.width,
+ item.height)
return
def place_image(self, item, borderwidth, x, y, w, h):
if self.imagewriter is not None:
name = self.imagewriter.export_image(item)
- self.write('
\n' %
- (q(name), borderwidth,
- x*self.scale, (self._yoffset-y)*self.scale,
- w*self.scale, h*self.scale))
+ self.write(
+ '
\n' %
+ (q(name),
+ borderwidth,
+ x * self.scale,
+ (self._yoffset - y) * self.scale,
+ w * self.scale,
+ h * self.scale))
return
def place_text(self, color, text, x, y, size):
color = self.text_colors.get(color)
if color is not None:
- self.write('' %
- (color, x*self.scale, (self._yoffset-y)*self.scale, size*self.scale*self.fontscale))
+ self.write(
+ '' %
+ (color,
+ x *
+ self.scale,
+ (self._yoffset -
+ y) *
+ self.scale,
+ size *
+ self.scale *
+ self.fontscale))
self.write_text(text)
self.write('\n')
return
@@ -294,11 +346,17 @@ def place_text(self, color, text, x, y, size):
def begin_div(self, color, borderwidth, x, y, w, h, writing_mode=False):
self._fontstack.append(self._font)
self._font = None
- self.write('' %
- (color, borderwidth, writing_mode,
- x*self.scale, (self._yoffset-y)*self.scale,
- w*self.scale, h*self.scale))
+ self.write(
+ '
' %
+ (color,
+ borderwidth,
+ writing_mode,
+ x * self.scale,
+ (self._yoffset - y) * self.scale,
+ w * self.scale,
+ h * self.scale))
return
def end_div(self, color):
@@ -337,8 +395,10 @@ def render(item):
self.place_border('page', 1, item)
if self.showpageno:
self.write('
' %
- ((self._yoffset-item.y1)*self.scale))
- self.write('
Page %s\n' % (item.pageid, item.pageid))
+ ((self._yoffset - item.y1) * self.scale))
+ self.write(
+ '
Page %s\n' %
+ (item.pageid, item.pageid))
for child in item:
render(child)
if item.groups is not None:
@@ -347,12 +407,24 @@ def render(item):
elif isinstance(item, LTCurve):
self.place_border('curve', 1, item)
elif isinstance(item, LTFigure):
- self.begin_div('figure', 1, item.x0, item.y1, item.width, item.height)
+ self.begin_div(
+ 'figure',
+ 1,
+ item.x0,
+ item.y1,
+ item.width,
+ item.height)
for child in item:
render(child)
self.end_div('figure')
elif isinstance(item, LTImage):
- self.place_image(item, 1, item.x0, item.y1, item.width, item.height)
+ self.place_image(
+ item,
+ 1,
+ item.x0,
+ item.y1,
+ item.width,
+ item.height)
else:
if self.layoutmode == 'exact':
if isinstance(item, LTTextLine):
@@ -361,12 +433,16 @@ def render(item):
render(child)
elif isinstance(item, LTTextBox):
self.place_border('textbox', 1, item)
- self.place_text('textbox', str(item.index+1), item.x0, item.y1, 20)
+ self.place_text(
+ 'textbox', str(
+ item.index + 1), item.x0, item.y1, 20)
for child in item:
render(child)
elif isinstance(item, LTChar):
self.place_border('char', 1, item)
- self.place_text('char', item.get_text(), item.x0, item.y1, item.size)
+ self.place_text(
+ 'char', item.get_text(),
+ item.x0, item.y1, item.size)
else:
if isinstance(item, LTTextLine):
for child in item:
@@ -374,16 +450,24 @@ def render(item):
if self.layoutmode != 'loose':
self.put_newline()
elif isinstance(item, LTTextBox):
- self.begin_div('textbox', 1, item.x0, item.y1, item.width, item.height,
- item.get_writing_mode())
+ self.begin_div(
+ 'textbox',
+ 1,
+ item.x0,
+ item.y1,
+ item.width,
+ item.height,
+ item.get_writing_mode())
for child in item:
render(child)
self.end_div('textbox')
elif isinstance(item, LTChar):
- self.put_text(item.get_text(), item.fontname, item.size)
+ self.put_text(
+ item.get_text(), item.fontname, item.size)
elif isinstance(item, LTText):
self.write_text(item.get_text())
return
+
render(ltpage)
self._yoffset += self.pagemargin
return
@@ -393,15 +477,19 @@ def close(self):
return
-## XMLConverter
-##
+# XMLConverter
+#
class XMLConverter(PDFConverter):
-
CONTROL = re.compile(r'[\x00-\x08\x0b-\x0c\x0e-\x1f]')
def __init__(self, rsrcmgr, outfp, pageno=1,
laparams=None, imagewriter=None, stripcontrol=False):
- PDFConverter.__init__(self, rsrcmgr, outfp, pageno=pageno, laparams=laparams)
+ PDFConverter.__init__(
+ self,
+ rsrcmgr,
+ outfp,
+ pageno=pageno,
+ laparams=laparams)
self.imagewriter = imagewriter
self.stripcontrol = stripcontrol
self.write_header()
@@ -428,7 +516,10 @@ def show_group(item):
self.outfp.write('
\n' %
(item.index, bbox2str(item.bbox)))
elif isinstance(item, LTTextGroup):
- self.outfp.write('
\n' % bbox2str(item.bbox))
+ self.outfp.write(
+ '\n' %
+ bbox2str(
+ item.bbox))
for child in item:
show_group(child)
self.outfp.write('\n')
@@ -436,8 +527,10 @@ def show_group(item):
def render(item):
if isinstance(item, LTPage):
- self.outfp.write('\n' %
- (item.pageid, bbox2str(item.bbox), item.rotate))
+ self.outfp.write(
+ '\n' %
+ (item.pageid, bbox2str(
+ item.bbox), item.rotate))
for child in item:
render(child)
if item.groups is not None:
@@ -453,8 +546,10 @@ def render(item):
self.outfp.write('\n' %
(item.linewidth, bbox2str(item.bbox)))
elif isinstance(item, LTCurve):
- self.outfp.write('\n' %
- (item.linewidth, bbox2str(item.bbox), item.get_pts()))
+ self.outfp.write(
+ '\n' %
+ (item.linewidth, bbox2str(
+ item.bbox), item.get_pts()))
elif isinstance(item, LTFigure):
self.outfp.write('\n' %
(item.name, bbox2str(item.bbox)))
@@ -462,7 +557,10 @@ def render(item):
render(child)
self.outfp.write('\n')
elif isinstance(item, LTTextLine):
- self.outfp.write('\n' % bbox2str(item.bbox))
+ self.outfp.write(
+ '\n' %
+ bbox2str(
+ item.bbox))
for child in item:
render(child)
self.outfp.write('\n')
@@ -476,8 +574,8 @@ def render(item):
render(child)
self.outfp.write('\n')
elif isinstance(item, LTChar):
- self.outfp.write('' %
- (q(item.fontname), bbox2str(item.bbox), item.size))
+ self.outfp.write('' % (
+ q(item.fontname), bbox2str(item.bbox), item.size))
self.write_text(item.get_text())
self.outfp.write('\n')
elif isinstance(item, LTText):
@@ -485,14 +583,16 @@ def render(item):
elif isinstance(item, LTImage):
if self.imagewriter is not None:
name = self.imagewriter.export_image(item)
- self.outfp.write('\n' %
- (q(name), item.width, item.height))
+ self.outfp.write(
+ '\n' %
+ (q(name), item.width, item.height))
else:
self.outfp.write('\n' %
(item.width, item.height))
else:
assert 0, item
return
+
render(ltpage)
return
diff --git a/pdfminer/encodingdb.py b/pdfminer/encodingdb.py
index 648b8f0d..dcb02cda 100644
--- a/pdfminer/encodingdb.py
+++ b/pdfminer/encodingdb.py
@@ -4,12 +4,11 @@
from .glyphlist import glyphname2unicode
from .latin_enc import ENCODING
-
STRIP_NAME = re.compile(r'[0-9]+')
-## name2unicode
-##
+# name2unicode
+#
def name2unicode(name):
"""Converts Adobe glyph names to Unicode numbers."""
if name in glyphname2unicode:
@@ -20,10 +19,9 @@ def name2unicode(name):
return chr(int(m.group(0)))
-## EncodingDB
-##
+# EncodingDB
+#
class EncodingDB:
-
std2unicode = {}
mac2unicode = {}
win2unicode = {}
diff --git a/pdfminer/fontmetrics.py b/pdfminer/fontmetrics.py
index bf0be752..1a63c85d 100644
--- a/pdfminer/fontmetrics.py
+++ b/pdfminer/fontmetrics.py
@@ -11,7 +11,7 @@
"""
-### BEGIN Verbatim copy of the license part
+# BEGIN Verbatim copy of the license part
#
# Adobe Core 35 AFM Files with 314 Glyph Entries - ReadMe
@@ -26,21 +26,1169 @@
# obligation to support the use of the AFM files.
#
-### END Verbatim copy of the license part
+# END Verbatim copy of the license part
FONT_METRICS = {
- 'Courier': ({'FontName': 'Courier', 'Descent': -194.0, 'FontBBox': (-6.0, -249.0, 639.0, 803.0), 'FontWeight': 'Medium', 'CapHeight': 572.0, 'FontFamily': 'Courier', 'Flags': 64, 'XHeight': 434.0, 'ItalicAngle': 0.0, 'Ascent': 627.0}, {u' ': 600, u'!': 600, u'"': 600, u'#': 600, u'$': 600, u'%': 600, u'&': 600, u"'": 600, u'(': 600, u')': 600, u'*': 600, u'+': 600, u',': 600, u'-': 600, u'.': 600, u'/': 600, u'0': 600, u'1': 600, u'2': 600, u'3': 600, u'4': 600, u'5': 600, u'6': 600, u'7': 600, u'8': 600, u'9': 600, u':': 600, u';': 600, u'<': 600, u'=': 600, u'>': 600, u'?': 600, u'@': 600, u'A': 600, u'B': 600, u'C': 600, u'D': 600, u'E': 600, u'F': 600, u'G': 600, u'H': 600, u'I': 600, u'J': 600, u'K': 600, u'L': 600, u'M': 600, u'N': 600, u'O': 600, u'P': 600, u'Q': 600, u'R': 600, u'S': 600, u'T': 600, u'U': 600, u'V': 600, u'W': 600, u'X': 600, u'Y': 600, u'Z': 600, u'[': 600, u'\\': 600, u']': 600, u'^': 600, u'_': 600, u'`': 600, u'a': 600, u'b': 600, u'c': 600, u'd': 600, u'e': 600, u'f': 600, u'g': 600, u'h': 600, u'i': 600, u'j': 600, u'k': 600, u'l': 600, u'm': 600, u'n': 600, u'o': 600, u'p': 600, u'q': 600, u'r': 600, u's': 600, u't': 600, u'u': 600, u'v': 600, u'w': 600, u'x': 600, u'y': 600, u'z': 600, u'{': 600, u'|': 600, u'}': 600, u'~': 600, u'\xa1': 600, u'\xa2': 600, u'\xa3': 600, u'\xa4': 600, u'\xa5': 600, u'\xa6': 600, u'\xa7': 600, u'\xa8': 600, u'\xa9': 600, u'\xaa': 600, u'\xab': 600, u'\xac': 600, u'\xae': 600, u'\xaf': 600, u'\xb0': 600, u'\xb1': 600, u'\xb2': 600, u'\xb3': 600, u'\xb4': 600, u'\xb5': 600, u'\xb6': 600, u'\xb7': 600, u'\xb8': 600, u'\xb9': 600, u'\xba': 600, u'\xbb': 600, u'\xbc': 600, u'\xbd': 600, u'\xbe': 600, u'\xbf': 600, u'\xc0': 600, u'\xc1': 600, u'\xc2': 600, u'\xc3': 600, u'\xc4': 600, u'\xc5': 600, u'\xc6': 600, u'\xc7': 600, u'\xc8': 600, u'\xc9': 600, u'\xca': 600, u'\xcb': 600, u'\xcc': 600, u'\xcd': 600, u'\xce': 600, u'\xcf': 600, u'\xd0': 600, u'\xd1': 600, u'\xd2': 600, u'\xd3': 600, u'\xd4': 600, u'\xd5': 600, u'\xd6': 600, u'\xd7': 600, u'\xd8': 600, u'\xd9': 600, u'\xda': 600, u'\xdb': 600, u'\xdc': 600, u'\xdd': 600, u'\xde': 600, u'\xdf': 600, u'\xe0': 600, u'\xe1': 600, u'\xe2': 600, u'\xe3': 600, u'\xe4': 600, u'\xe5': 600, u'\xe6': 600, u'\xe7': 600, u'\xe8': 600, u'\xe9': 600, u'\xea': 600, u'\xeb': 600, u'\xec': 600, u'\xed': 600, u'\xee': 600, u'\xef': 600, u'\xf0': 600, u'\xf1': 600, u'\xf2': 600, u'\xf3': 600, u'\xf4': 600, u'\xf5': 600, u'\xf6': 600, u'\xf7': 600, u'\xf8': 600, u'\xf9': 600, u'\xfa': 600, u'\xfb': 600, u'\xfc': 600, u'\xfd': 600, u'\xfe': 600, u'\xff': 600, u'\u0100': 600, u'\u0101': 600, u'\u0102': 600, u'\u0103': 600, u'\u0104': 600, u'\u0105': 600, u'\u0106': 600, u'\u0107': 600, u'\u010c': 600, u'\u010d': 600, u'\u010e': 600, u'\u010f': 600, u'\u0110': 600, u'\u0111': 600, u'\u0112': 600, u'\u0113': 600, u'\u0116': 600, u'\u0117': 600, u'\u0118': 600, u'\u0119': 600, u'\u011a': 600, u'\u011b': 600, u'\u011e': 600, u'\u011f': 600, u'\u0122': 600, u'\u0123': 600, u'\u012a': 600, u'\u012b': 600, u'\u012e': 600, u'\u012f': 600, u'\u0130': 600, u'\u0131': 600, u'\u0136': 600, u'\u0137': 600, u'\u0139': 600, u'\u013a': 600, u'\u013b': 600, u'\u013c': 600, u'\u013d': 600, u'\u013e': 600, u'\u0141': 600, u'\u0142': 600, u'\u0143': 600, u'\u0144': 600, u'\u0145': 600, u'\u0146': 600, u'\u0147': 600, u'\u0148': 600, u'\u014c': 600, u'\u014d': 600, u'\u0150': 600, u'\u0151': 600, u'\u0152': 600, u'\u0153': 600, u'\u0154': 600, u'\u0155': 600, u'\u0156': 600, u'\u0157': 600, u'\u0158': 600, u'\u0159': 600, u'\u015a': 600, u'\u015b': 600, u'\u015e': 600, u'\u015f': 600, u'\u0160': 600, u'\u0161': 600, u'\u0162': 600, u'\u0163': 600, u'\u0164': 600, u'\u0165': 600, u'\u016a': 600, u'\u016b': 600, u'\u016e': 600, u'\u016f': 600, u'\u0170': 600, u'\u0171': 600, u'\u0172': 600, u'\u0173': 600, u'\u0178': 600, u'\u0179': 600, u'\u017a': 600, u'\u017b': 600, u'\u017c': 600, u'\u017d': 600, u'\u017e': 600, u'\u0192': 600, u'\u0218': 600, u'\u0219': 600, u'\u02c6': 600, u'\u02c7': 600, u'\u02d8': 600, u'\u02d9': 600, u'\u02da': 600, u'\u02db': 600, u'\u02dc': 600, u'\u02dd': 600, u'\u2013': 600, u'\u2014': 600, u'\u2018': 600, u'\u2019': 600, u'\u201a': 600, u'\u201c': 600, u'\u201d': 600, u'\u201e': 600, u'\u2020': 600, u'\u2021': 600, u'\u2022': 600, u'\u2026': 600, u'\u2030': 600, u'\u2039': 600, u'\u203a': 600, u'\u2044': 600, u'\u2122': 600, u'\u2202': 600, u'\u2206': 600, u'\u2211': 600, u'\u2212': 600, u'\u221a': 600, u'\u2260': 600, u'\u2264': 600, u'\u2265': 600, u'\u25ca': 600, u'\uf6c3': 600, u'\ufb01': 600, u'\ufb02': 600}),
- 'Courier-Bold': ({'FontName': 'Courier-Bold', 'Descent': -194.0, 'FontBBox': (-88.0, -249.0, 697.0, 811.0), 'FontWeight': 'Bold', 'CapHeight': 572.0, 'FontFamily': 'Courier', 'Flags': 64, 'XHeight': 434.0, 'ItalicAngle': 0.0, 'Ascent': 627.0}, {u' ': 600, u'!': 600, u'"': 600, u'#': 600, u'$': 600, u'%': 600, u'&': 600, u"'": 600, u'(': 600, u')': 600, u'*': 600, u'+': 600, u',': 600, u'-': 600, u'.': 600, u'/': 600, u'0': 600, u'1': 600, u'2': 600, u'3': 600, u'4': 600, u'5': 600, u'6': 600, u'7': 600, u'8': 600, u'9': 600, u':': 600, u';': 600, u'<': 600, u'=': 600, u'>': 600, u'?': 600, u'@': 600, u'A': 600, u'B': 600, u'C': 600, u'D': 600, u'E': 600, u'F': 600, u'G': 600, u'H': 600, u'I': 600, u'J': 600, u'K': 600, u'L': 600, u'M': 600, u'N': 600, u'O': 600, u'P': 600, u'Q': 600, u'R': 600, u'S': 600, u'T': 600, u'U': 600, u'V': 600, u'W': 600, u'X': 600, u'Y': 600, u'Z': 600, u'[': 600, u'\\': 600, u']': 600, u'^': 600, u'_': 600, u'`': 600, u'a': 600, u'b': 600, u'c': 600, u'd': 600, u'e': 600, u'f': 600, u'g': 600, u'h': 600, u'i': 600, u'j': 600, u'k': 600, u'l': 600, u'm': 600, u'n': 600, u'o': 600, u'p': 600, u'q': 600, u'r': 600, u's': 600, u't': 600, u'u': 600, u'v': 600, u'w': 600, u'x': 600, u'y': 600, u'z': 600, u'{': 600, u'|': 600, u'}': 600, u'~': 600, u'\xa1': 600, u'\xa2': 600, u'\xa3': 600, u'\xa4': 600, u'\xa5': 600, u'\xa6': 600, u'\xa7': 600, u'\xa8': 600, u'\xa9': 600, u'\xaa': 600, u'\xab': 600, u'\xac': 600, u'\xae': 600, u'\xaf': 600, u'\xb0': 600, u'\xb1': 600, u'\xb2': 600, u'\xb3': 600, u'\xb4': 600, u'\xb5': 600, u'\xb6': 600, u'\xb7': 600, u'\xb8': 600, u'\xb9': 600, u'\xba': 600, u'\xbb': 600, u'\xbc': 600, u'\xbd': 600, u'\xbe': 600, u'\xbf': 600, u'\xc0': 600, u'\xc1': 600, u'\xc2': 600, u'\xc3': 600, u'\xc4': 600, u'\xc5': 600, u'\xc6': 600, u'\xc7': 600, u'\xc8': 600, u'\xc9': 600, u'\xca': 600, u'\xcb': 600, u'\xcc': 600, u'\xcd': 600, u'\xce': 600, u'\xcf': 600, u'\xd0': 600, u'\xd1': 600, u'\xd2': 600, u'\xd3': 600, u'\xd4': 600, u'\xd5': 600, u'\xd6': 600, u'\xd7': 600, u'\xd8': 600, u'\xd9': 600, u'\xda': 600, u'\xdb': 600, u'\xdc': 600, u'\xdd': 600, u'\xde': 600, u'\xdf': 600, u'\xe0': 600, u'\xe1': 600, u'\xe2': 600, u'\xe3': 600, u'\xe4': 600, u'\xe5': 600, u'\xe6': 600, u'\xe7': 600, u'\xe8': 600, u'\xe9': 600, u'\xea': 600, u'\xeb': 600, u'\xec': 600, u'\xed': 600, u'\xee': 600, u'\xef': 600, u'\xf0': 600, u'\xf1': 600, u'\xf2': 600, u'\xf3': 600, u'\xf4': 600, u'\xf5': 600, u'\xf6': 600, u'\xf7': 600, u'\xf8': 600, u'\xf9': 600, u'\xfa': 600, u'\xfb': 600, u'\xfc': 600, u'\xfd': 600, u'\xfe': 600, u'\xff': 600, u'\u0100': 600, u'\u0101': 600, u'\u0102': 600, u'\u0103': 600, u'\u0104': 600, u'\u0105': 600, u'\u0106': 600, u'\u0107': 600, u'\u010c': 600, u'\u010d': 600, u'\u010e': 600, u'\u010f': 600, u'\u0110': 600, u'\u0111': 600, u'\u0112': 600, u'\u0113': 600, u'\u0116': 600, u'\u0117': 600, u'\u0118': 600, u'\u0119': 600, u'\u011a': 600, u'\u011b': 600, u'\u011e': 600, u'\u011f': 600, u'\u0122': 600, u'\u0123': 600, u'\u012a': 600, u'\u012b': 600, u'\u012e': 600, u'\u012f': 600, u'\u0130': 600, u'\u0131': 600, u'\u0136': 600, u'\u0137': 600, u'\u0139': 600, u'\u013a': 600, u'\u013b': 600, u'\u013c': 600, u'\u013d': 600, u'\u013e': 600, u'\u0141': 600, u'\u0142': 600, u'\u0143': 600, u'\u0144': 600, u'\u0145': 600, u'\u0146': 600, u'\u0147': 600, u'\u0148': 600, u'\u014c': 600, u'\u014d': 600, u'\u0150': 600, u'\u0151': 600, u'\u0152': 600, u'\u0153': 600, u'\u0154': 600, u'\u0155': 600, u'\u0156': 600, u'\u0157': 600, u'\u0158': 600, u'\u0159': 600, u'\u015a': 600, u'\u015b': 600, u'\u015e': 600, u'\u015f': 600, u'\u0160': 600, u'\u0161': 600, u'\u0162': 600, u'\u0163': 600, u'\u0164': 600, u'\u0165': 600, u'\u016a': 600, u'\u016b': 600, u'\u016e': 600, u'\u016f': 600, u'\u0170': 600, u'\u0171': 600, u'\u0172': 600, u'\u0173': 600, u'\u0178': 600, u'\u0179': 600, u'\u017a': 600, u'\u017b': 600, u'\u017c': 600, u'\u017d': 600, u'\u017e': 600, u'\u0192': 600, u'\u0218': 600, u'\u0219': 600, u'\u02c6': 600, u'\u02c7': 600, u'\u02d8': 600, u'\u02d9': 600, u'\u02da': 600, u'\u02db': 600, u'\u02dc': 600, u'\u02dd': 600, u'\u2013': 600, u'\u2014': 600, u'\u2018': 600, u'\u2019': 600, u'\u201a': 600, u'\u201c': 600, u'\u201d': 600, u'\u201e': 600, u'\u2020': 600, u'\u2021': 600, u'\u2022': 600, u'\u2026': 600, u'\u2030': 600, u'\u2039': 600, u'\u203a': 600, u'\u2044': 600, u'\u2122': 600, u'\u2202': 600, u'\u2206': 600, u'\u2211': 600, u'\u2212': 600, u'\u221a': 600, u'\u2260': 600, u'\u2264': 600, u'\u2265': 600, u'\u25ca': 600, u'\uf6c3': 600, u'\ufb01': 600, u'\ufb02': 600}),
- 'Courier-BoldOblique': ({'FontName': 'Courier-BoldOblique', 'Descent': -194.0, 'FontBBox': (-49.0, -249.0, 758.0, 811.0), 'FontWeight': 'Bold', 'CapHeight': 572.0, 'FontFamily': 'Courier', 'Flags': 64, 'XHeight': 434.0, 'ItalicAngle': -11.0, 'Ascent': 627.0}, {u' ': 600, u'!': 600, u'"': 600, u'#': 600, u'$': 600, u'%': 600, u'&': 600, u"'": 600, u'(': 600, u')': 600, u'*': 600, u'+': 600, u',': 600, u'-': 600, u'.': 600, u'/': 600, u'0': 600, u'1': 600, u'2': 600, u'3': 600, u'4': 600, u'5': 600, u'6': 600, u'7': 600, u'8': 600, u'9': 600, u':': 600, u';': 600, u'<': 600, u'=': 600, u'>': 600, u'?': 600, u'@': 600, u'A': 600, u'B': 600, u'C': 600, u'D': 600, u'E': 600, u'F': 600, u'G': 600, u'H': 600, u'I': 600, u'J': 600, u'K': 600, u'L': 600, u'M': 600, u'N': 600, u'O': 600, u'P': 600, u'Q': 600, u'R': 600, u'S': 600, u'T': 600, u'U': 600, u'V': 600, u'W': 600, u'X': 600, u'Y': 600, u'Z': 600, u'[': 600, u'\\': 600, u']': 600, u'^': 600, u'_': 600, u'`': 600, u'a': 600, u'b': 600, u'c': 600, u'd': 600, u'e': 600, u'f': 600, u'g': 600, u'h': 600, u'i': 600, u'j': 600, u'k': 600, u'l': 600, u'm': 600, u'n': 600, u'o': 600, u'p': 600, u'q': 600, u'r': 600, u's': 600, u't': 600, u'u': 600, u'v': 600, u'w': 600, u'x': 600, u'y': 600, u'z': 600, u'{': 600, u'|': 600, u'}': 600, u'~': 600, u'\xa1': 600, u'\xa2': 600, u'\xa3': 600, u'\xa4': 600, u'\xa5': 600, u'\xa6': 600, u'\xa7': 600, u'\xa8': 600, u'\xa9': 600, u'\xaa': 600, u'\xab': 600, u'\xac': 600, u'\xae': 600, u'\xaf': 600, u'\xb0': 600, u'\xb1': 600, u'\xb2': 600, u'\xb3': 600, u'\xb4': 600, u'\xb5': 600, u'\xb6': 600, u'\xb7': 600, u'\xb8': 600, u'\xb9': 600, u'\xba': 600, u'\xbb': 600, u'\xbc': 600, u'\xbd': 600, u'\xbe': 600, u'\xbf': 600, u'\xc0': 600, u'\xc1': 600, u'\xc2': 600, u'\xc3': 600, u'\xc4': 600, u'\xc5': 600, u'\xc6': 600, u'\xc7': 600, u'\xc8': 600, u'\xc9': 600, u'\xca': 600, u'\xcb': 600, u'\xcc': 600, u'\xcd': 600, u'\xce': 600, u'\xcf': 600, u'\xd0': 600, u'\xd1': 600, u'\xd2': 600, u'\xd3': 600, u'\xd4': 600, u'\xd5': 600, u'\xd6': 600, u'\xd7': 600, u'\xd8': 600, u'\xd9': 600, u'\xda': 600, u'\xdb': 600, u'\xdc': 600, u'\xdd': 600, u'\xde': 600, u'\xdf': 600, u'\xe0': 600, u'\xe1': 600, u'\xe2': 600, u'\xe3': 600, u'\xe4': 600, u'\xe5': 600, u'\xe6': 600, u'\xe7': 600, u'\xe8': 600, u'\xe9': 600, u'\xea': 600, u'\xeb': 600, u'\xec': 600, u'\xed': 600, u'\xee': 600, u'\xef': 600, u'\xf0': 600, u'\xf1': 600, u'\xf2': 600, u'\xf3': 600, u'\xf4': 600, u'\xf5': 600, u'\xf6': 600, u'\xf7': 600, u'\xf8': 600, u'\xf9': 600, u'\xfa': 600, u'\xfb': 600, u'\xfc': 600, u'\xfd': 600, u'\xfe': 600, u'\xff': 600, u'\u0100': 600, u'\u0101': 600, u'\u0102': 600, u'\u0103': 600, u'\u0104': 600, u'\u0105': 600, u'\u0106': 600, u'\u0107': 600, u'\u010c': 600, u'\u010d': 600, u'\u010e': 600, u'\u010f': 600, u'\u0110': 600, u'\u0111': 600, u'\u0112': 600, u'\u0113': 600, u'\u0116': 600, u'\u0117': 600, u'\u0118': 600, u'\u0119': 600, u'\u011a': 600, u'\u011b': 600, u'\u011e': 600, u'\u011f': 600, u'\u0122': 600, u'\u0123': 600, u'\u012a': 600, u'\u012b': 600, u'\u012e': 600, u'\u012f': 600, u'\u0130': 600, u'\u0131': 600, u'\u0136': 600, u'\u0137': 600, u'\u0139': 600, u'\u013a': 600, u'\u013b': 600, u'\u013c': 600, u'\u013d': 600, u'\u013e': 600, u'\u0141': 600, u'\u0142': 600, u'\u0143': 600, u'\u0144': 600, u'\u0145': 600, u'\u0146': 600, u'\u0147': 600, u'\u0148': 600, u'\u014c': 600, u'\u014d': 600, u'\u0150': 600, u'\u0151': 600, u'\u0152': 600, u'\u0153': 600, u'\u0154': 600, u'\u0155': 600, u'\u0156': 600, u'\u0157': 600, u'\u0158': 600, u'\u0159': 600, u'\u015a': 600, u'\u015b': 600, u'\u015e': 600, u'\u015f': 600, u'\u0160': 600, u'\u0161': 600, u'\u0162': 600, u'\u0163': 600, u'\u0164': 600, u'\u0165': 600, u'\u016a': 600, u'\u016b': 600, u'\u016e': 600, u'\u016f': 600, u'\u0170': 600, u'\u0171': 600, u'\u0172': 600, u'\u0173': 600, u'\u0178': 600, u'\u0179': 600, u'\u017a': 600, u'\u017b': 600, u'\u017c': 600, u'\u017d': 600, u'\u017e': 600, u'\u0192': 600, u'\u0218': 600, u'\u0219': 600, u'\u02c6': 600, u'\u02c7': 600, u'\u02d8': 600, u'\u02d9': 600, u'\u02da': 600, u'\u02db': 600, u'\u02dc': 600, u'\u02dd': 600, u'\u2013': 600, u'\u2014': 600, u'\u2018': 600, u'\u2019': 600, u'\u201a': 600, u'\u201c': 600, u'\u201d': 600, u'\u201e': 600, u'\u2020': 600, u'\u2021': 600, u'\u2022': 600, u'\u2026': 600, u'\u2030': 600, u'\u2039': 600, u'\u203a': 600, u'\u2044': 600, u'\u2122': 600, u'\u2202': 600, u'\u2206': 600, u'\u2211': 600, u'\u2212': 600, u'\u221a': 600, u'\u2260': 600, u'\u2264': 600, u'\u2265': 600, u'\u25ca': 600, u'\uf6c3': 600, u'\ufb01': 600, u'\ufb02': 600}),
- 'Courier-Oblique': ({'FontName': 'Courier-Oblique', 'Descent': -194.0, 'FontBBox': (-49.0, -249.0, 749.0, 803.0), 'FontWeight': 'Medium', 'CapHeight': 572.0, 'FontFamily': 'Courier', 'Flags': 64, 'XHeight': 434.0, 'ItalicAngle': -11.0, 'Ascent': 627.0}, {u' ': 600, u'!': 600, u'"': 600, u'#': 600, u'$': 600, u'%': 600, u'&': 600, u"'": 600, u'(': 600, u')': 600, u'*': 600, u'+': 600, u',': 600, u'-': 600, u'.': 600, u'/': 600, u'0': 600, u'1': 600, u'2': 600, u'3': 600, u'4': 600, u'5': 600, u'6': 600, u'7': 600, u'8': 600, u'9': 600, u':': 600, u';': 600, u'<': 600, u'=': 600, u'>': 600, u'?': 600, u'@': 600, u'A': 600, u'B': 600, u'C': 600, u'D': 600, u'E': 600, u'F': 600, u'G': 600, u'H': 600, u'I': 600, u'J': 600, u'K': 600, u'L': 600, u'M': 600, u'N': 600, u'O': 600, u'P': 600, u'Q': 600, u'R': 600, u'S': 600, u'T': 600, u'U': 600, u'V': 600, u'W': 600, u'X': 600, u'Y': 600, u'Z': 600, u'[': 600, u'\\': 600, u']': 600, u'^': 600, u'_': 600, u'`': 600, u'a': 600, u'b': 600, u'c': 600, u'd': 600, u'e': 600, u'f': 600, u'g': 600, u'h': 600, u'i': 600, u'j': 600, u'k': 600, u'l': 600, u'm': 600, u'n': 600, u'o': 600, u'p': 600, u'q': 600, u'r': 600, u's': 600, u't': 600, u'u': 600, u'v': 600, u'w': 600, u'x': 600, u'y': 600, u'z': 600, u'{': 600, u'|': 600, u'}': 600, u'~': 600, u'\xa1': 600, u'\xa2': 600, u'\xa3': 600, u'\xa4': 600, u'\xa5': 600, u'\xa6': 600, u'\xa7': 600, u'\xa8': 600, u'\xa9': 600, u'\xaa': 600, u'\xab': 600, u'\xac': 600, u'\xae': 600, u'\xaf': 600, u'\xb0': 600, u'\xb1': 600, u'\xb2': 600, u'\xb3': 600, u'\xb4': 600, u'\xb5': 600, u'\xb6': 600, u'\xb7': 600, u'\xb8': 600, u'\xb9': 600, u'\xba': 600, u'\xbb': 600, u'\xbc': 600, u'\xbd': 600, u'\xbe': 600, u'\xbf': 600, u'\xc0': 600, u'\xc1': 600, u'\xc2': 600, u'\xc3': 600, u'\xc4': 600, u'\xc5': 600, u'\xc6': 600, u'\xc7': 600, u'\xc8': 600, u'\xc9': 600, u'\xca': 600, u'\xcb': 600, u'\xcc': 600, u'\xcd': 600, u'\xce': 600, u'\xcf': 600, u'\xd0': 600, u'\xd1': 600, u'\xd2': 600, u'\xd3': 600, u'\xd4': 600, u'\xd5': 600, u'\xd6': 600, u'\xd7': 600, u'\xd8': 600, u'\xd9': 600, u'\xda': 600, u'\xdb': 600, u'\xdc': 600, u'\xdd': 600, u'\xde': 600, u'\xdf': 600, u'\xe0': 600, u'\xe1': 600, u'\xe2': 600, u'\xe3': 600, u'\xe4': 600, u'\xe5': 600, u'\xe6': 600, u'\xe7': 600, u'\xe8': 600, u'\xe9': 600, u'\xea': 600, u'\xeb': 600, u'\xec': 600, u'\xed': 600, u'\xee': 600, u'\xef': 600, u'\xf0': 600, u'\xf1': 600, u'\xf2': 600, u'\xf3': 600, u'\xf4': 600, u'\xf5': 600, u'\xf6': 600, u'\xf7': 600, u'\xf8': 600, u'\xf9': 600, u'\xfa': 600, u'\xfb': 600, u'\xfc': 600, u'\xfd': 600, u'\xfe': 600, u'\xff': 600, u'\u0100': 600, u'\u0101': 600, u'\u0102': 600, u'\u0103': 600, u'\u0104': 600, u'\u0105': 600, u'\u0106': 600, u'\u0107': 600, u'\u010c': 600, u'\u010d': 600, u'\u010e': 600, u'\u010f': 600, u'\u0110': 600, u'\u0111': 600, u'\u0112': 600, u'\u0113': 600, u'\u0116': 600, u'\u0117': 600, u'\u0118': 600, u'\u0119': 600, u'\u011a': 600, u'\u011b': 600, u'\u011e': 600, u'\u011f': 600, u'\u0122': 600, u'\u0123': 600, u'\u012a': 600, u'\u012b': 600, u'\u012e': 600, u'\u012f': 600, u'\u0130': 600, u'\u0131': 600, u'\u0136': 600, u'\u0137': 600, u'\u0139': 600, u'\u013a': 600, u'\u013b': 600, u'\u013c': 600, u'\u013d': 600, u'\u013e': 600, u'\u0141': 600, u'\u0142': 600, u'\u0143': 600, u'\u0144': 600, u'\u0145': 600, u'\u0146': 600, u'\u0147': 600, u'\u0148': 600, u'\u014c': 600, u'\u014d': 600, u'\u0150': 600, u'\u0151': 600, u'\u0152': 600, u'\u0153': 600, u'\u0154': 600, u'\u0155': 600, u'\u0156': 600, u'\u0157': 600, u'\u0158': 600, u'\u0159': 600, u'\u015a': 600, u'\u015b': 600, u'\u015e': 600, u'\u015f': 600, u'\u0160': 600, u'\u0161': 600, u'\u0162': 600, u'\u0163': 600, u'\u0164': 600, u'\u0165': 600, u'\u016a': 600, u'\u016b': 600, u'\u016e': 600, u'\u016f': 600, u'\u0170': 600, u'\u0171': 600, u'\u0172': 600, u'\u0173': 600, u'\u0178': 600, u'\u0179': 600, u'\u017a': 600, u'\u017b': 600, u'\u017c': 600, u'\u017d': 600, u'\u017e': 600, u'\u0192': 600, u'\u0218': 600, u'\u0219': 600, u'\u02c6': 600, u'\u02c7': 600, u'\u02d8': 600, u'\u02d9': 600, u'\u02da': 600, u'\u02db': 600, u'\u02dc': 600, u'\u02dd': 600, u'\u2013': 600, u'\u2014': 600, u'\u2018': 600, u'\u2019': 600, u'\u201a': 600, u'\u201c': 600, u'\u201d': 600, u'\u201e': 600, u'\u2020': 600, u'\u2021': 600, u'\u2022': 600, u'\u2026': 600, u'\u2030': 600, u'\u2039': 600, u'\u203a': 600, u'\u2044': 600, u'\u2122': 600, u'\u2202': 600, u'\u2206': 600, u'\u2211': 600, u'\u2212': 600, u'\u221a': 600, u'\u2260': 600, u'\u2264': 600, u'\u2265': 600, u'\u25ca': 600, u'\uf6c3': 600, u'\ufb01': 600, u'\ufb02': 600}),
- 'Helvetica': ({'FontName': 'Helvetica', 'Descent': -207.0, 'FontBBox': (-166.0, -225.0, 1000.0, 931.0), 'FontWeight': 'Medium', 'CapHeight': 718.0, 'FontFamily': 'Helvetica', 'Flags': 0, 'XHeight': 523.0, 'ItalicAngle': 0.0, 'Ascent': 718.0}, {u' ': 278, u'!': 278, u'"': 355, u'#': 556, u'$': 556, u'%': 889, u'&': 667, u"'": 191, u'(': 333, u')': 333, u'*': 389, u'+': 584, u',': 278, u'-': 333, u'.': 278, u'/': 278, u'0': 556, u'1': 556, u'2': 556, u'3': 556, u'4': 556, u'5': 556, u'6': 556, u'7': 556, u'8': 556, u'9': 556, u':': 278, u';': 278, u'<': 584, u'=': 584, u'>': 584, u'?': 556, u'@': 1015, u'A': 667, u'B': 667, u'C': 722, u'D': 722, u'E': 667, u'F': 611, u'G': 778, u'H': 722, u'I': 278, u'J': 500, u'K': 667, u'L': 556, u'M': 833, u'N': 722, u'O': 778, u'P': 667, u'Q': 778, u'R': 722, u'S': 667, u'T': 611, u'U': 722, u'V': 667, u'W': 944, u'X': 667, u'Y': 667, u'Z': 611, u'[': 278, u'\\': 278, u']': 278, u'^': 469, u'_': 556, u'`': 333, u'a': 556, u'b': 556, u'c': 500, u'd': 556, u'e': 556, u'f': 278, u'g': 556, u'h': 556, u'i': 222, u'j': 222, u'k': 500, u'l': 222, u'm': 833, u'n': 556, u'o': 556, u'p': 556, u'q': 556, u'r': 333, u's': 500, u't': 278, u'u': 556, u'v': 500, u'w': 722, u'x': 500, u'y': 500, u'z': 500, u'{': 334, u'|': 260, u'}': 334, u'~': 584, u'\xa1': 333, u'\xa2': 556, u'\xa3': 556, u'\xa4': 556, u'\xa5': 556, u'\xa6': 260, u'\xa7': 556, u'\xa8': 333, u'\xa9': 737, u'\xaa': 370, u'\xab': 556, u'\xac': 584, u'\xae': 737, u'\xaf': 333, u'\xb0': 400, u'\xb1': 584, u'\xb2': 333, u'\xb3': 333, u'\xb4': 333, u'\xb5': 556, u'\xb6': 537, u'\xb7': 278, u'\xb8': 333, u'\xb9': 333, u'\xba': 365, u'\xbb': 556, u'\xbc': 834, u'\xbd': 834, u'\xbe': 834, u'\xbf': 611, u'\xc0': 667, u'\xc1': 667, u'\xc2': 667, u'\xc3': 667, u'\xc4': 667, u'\xc5': 667, u'\xc6': 1000, u'\xc7': 722, u'\xc8': 667, u'\xc9': 667, u'\xca': 667, u'\xcb': 667, u'\xcc': 278, u'\xcd': 278, u'\xce': 278, u'\xcf': 278, u'\xd0': 722, u'\xd1': 722, u'\xd2': 778, u'\xd3': 778, u'\xd4': 778, u'\xd5': 778, u'\xd6': 778, u'\xd7': 584, u'\xd8': 778, u'\xd9': 722, u'\xda': 722, u'\xdb': 722, u'\xdc': 722, u'\xdd': 667, u'\xde': 667, u'\xdf': 611, u'\xe0': 556, u'\xe1': 556, u'\xe2': 556, u'\xe3': 556, u'\xe4': 556, u'\xe5': 556, u'\xe6': 889, u'\xe7': 500, u'\xe8': 556, u'\xe9': 556, u'\xea': 556, u'\xeb': 556, u'\xec': 278, u'\xed': 278, u'\xee': 278, u'\xef': 278, u'\xf0': 556, u'\xf1': 556, u'\xf2': 556, u'\xf3': 556, u'\xf4': 556, u'\xf5': 556, u'\xf6': 556, u'\xf7': 584, u'\xf8': 611, u'\xf9': 556, u'\xfa': 556, u'\xfb': 556, u'\xfc': 556, u'\xfd': 500, u'\xfe': 556, u'\xff': 500, u'\u0100': 667, u'\u0101': 556, u'\u0102': 667, u'\u0103': 556, u'\u0104': 667, u'\u0105': 556, u'\u0106': 722, u'\u0107': 500, u'\u010c': 722, u'\u010d': 500, u'\u010e': 722, u'\u010f': 643, u'\u0110': 722, u'\u0111': 556, u'\u0112': 667, u'\u0113': 556, u'\u0116': 667, u'\u0117': 556, u'\u0118': 667, u'\u0119': 556, u'\u011a': 667, u'\u011b': 556, u'\u011e': 778, u'\u011f': 556, u'\u0122': 778, u'\u0123': 556, u'\u012a': 278, u'\u012b': 278, u'\u012e': 278, u'\u012f': 222, u'\u0130': 278, u'\u0131': 278, u'\u0136': 667, u'\u0137': 500, u'\u0139': 556, u'\u013a': 222, u'\u013b': 556, u'\u013c': 222, u'\u013d': 556, u'\u013e': 299, u'\u0141': 556, u'\u0142': 222, u'\u0143': 722, u'\u0144': 556, u'\u0145': 722, u'\u0146': 556, u'\u0147': 722, u'\u0148': 556, u'\u014c': 778, u'\u014d': 556, u'\u0150': 778, u'\u0151': 556, u'\u0152': 1000, u'\u0153': 944, u'\u0154': 722, u'\u0155': 333, u'\u0156': 722, u'\u0157': 333, u'\u0158': 722, u'\u0159': 333, u'\u015a': 667, u'\u015b': 500, u'\u015e': 667, u'\u015f': 500, u'\u0160': 667, u'\u0161': 500, u'\u0162': 611, u'\u0163': 278, u'\u0164': 611, u'\u0165': 317, u'\u016a': 722, u'\u016b': 556, u'\u016e': 722, u'\u016f': 556, u'\u0170': 722, u'\u0171': 556, u'\u0172': 722, u'\u0173': 556, u'\u0178': 667, u'\u0179': 611, u'\u017a': 500, u'\u017b': 611, u'\u017c': 500, u'\u017d': 611, u'\u017e': 500, u'\u0192': 556, u'\u0218': 667, u'\u0219': 500, u'\u02c6': 333, u'\u02c7': 333, u'\u02d8': 333, u'\u02d9': 333, u'\u02da': 333, u'\u02db': 333, u'\u02dc': 333, u'\u02dd': 333, u'\u2013': 556, u'\u2014': 1000, u'\u2018': 222, u'\u2019': 222, u'\u201a': 222, u'\u201c': 333, u'\u201d': 333, u'\u201e': 333, u'\u2020': 556, u'\u2021': 556, u'\u2022': 350, u'\u2026': 1000, u'\u2030': 1000, u'\u2039': 333, u'\u203a': 333, u'\u2044': 167, u'\u2122': 1000, u'\u2202': 476, u'\u2206': 612, u'\u2211': 600, u'\u2212': 584, u'\u221a': 453, u'\u2260': 549, u'\u2264': 549, u'\u2265': 549, u'\u25ca': 471, u'\uf6c3': 250, u'\ufb01': 500, u'\ufb02': 500}),
- 'Helvetica-Bold': ({'FontName': 'Helvetica-Bold', 'Descent': -207.0, 'FontBBox': (-170.0, -228.0, 1003.0, 962.0), 'FontWeight': 'Bold', 'CapHeight': 718.0, 'FontFamily': 'Helvetica', 'Flags': 0, 'XHeight': 532.0, 'ItalicAngle': 0.0, 'Ascent': 718.0}, {u' ': 278, u'!': 333, u'"': 474, u'#': 556, u'$': 556, u'%': 889, u'&': 722, u"'": 238, u'(': 333, u')': 333, u'*': 389, u'+': 584, u',': 278, u'-': 333, u'.': 278, u'/': 278, u'0': 556, u'1': 556, u'2': 556, u'3': 556, u'4': 556, u'5': 556, u'6': 556, u'7': 556, u'8': 556, u'9': 556, u':': 333, u';': 333, u'<': 584, u'=': 584, u'>': 584, u'?': 611, u'@': 975, u'A': 722, u'B': 722, u'C': 722, u'D': 722, u'E': 667, u'F': 611, u'G': 778, u'H': 722, u'I': 278, u'J': 556, u'K': 722, u'L': 611, u'M': 833, u'N': 722, u'O': 778, u'P': 667, u'Q': 778, u'R': 722, u'S': 667, u'T': 611, u'U': 722, u'V': 667, u'W': 944, u'X': 667, u'Y': 667, u'Z': 611, u'[': 333, u'\\': 278, u']': 333, u'^': 584, u'_': 556, u'`': 333, u'a': 556, u'b': 611, u'c': 556, u'd': 611, u'e': 556, u'f': 333, u'g': 611, u'h': 611, u'i': 278, u'j': 278, u'k': 556, u'l': 278, u'm': 889, u'n': 611, u'o': 611, u'p': 611, u'q': 611, u'r': 389, u's': 556, u't': 333, u'u': 611, u'v': 556, u'w': 778, u'x': 556, u'y': 556, u'z': 500, u'{': 389, u'|': 280, u'}': 389, u'~': 584, u'\xa1': 333, u'\xa2': 556, u'\xa3': 556, u'\xa4': 556, u'\xa5': 556, u'\xa6': 280, u'\xa7': 556, u'\xa8': 333, u'\xa9': 737, u'\xaa': 370, u'\xab': 556, u'\xac': 584, u'\xae': 737, u'\xaf': 333, u'\xb0': 400, u'\xb1': 584, u'\xb2': 333, u'\xb3': 333, u'\xb4': 333, u'\xb5': 611, u'\xb6': 556, u'\xb7': 278, u'\xb8': 333, u'\xb9': 333, u'\xba': 365, u'\xbb': 556, u'\xbc': 834, u'\xbd': 834, u'\xbe': 834, u'\xbf': 611, u'\xc0': 722, u'\xc1': 722, u'\xc2': 722, u'\xc3': 722, u'\xc4': 722, u'\xc5': 722, u'\xc6': 1000, u'\xc7': 722, u'\xc8': 667, u'\xc9': 667, u'\xca': 667, u'\xcb': 667, u'\xcc': 278, u'\xcd': 278, u'\xce': 278, u'\xcf': 278, u'\xd0': 722, u'\xd1': 722, u'\xd2': 778, u'\xd3': 778, u'\xd4': 778, u'\xd5': 778, u'\xd6': 778, u'\xd7': 584, u'\xd8': 778, u'\xd9': 722, u'\xda': 722, u'\xdb': 722, u'\xdc': 722, u'\xdd': 667, u'\xde': 667, u'\xdf': 611, u'\xe0': 556, u'\xe1': 556, u'\xe2': 556, u'\xe3': 556, u'\xe4': 556, u'\xe5': 556, u'\xe6': 889, u'\xe7': 556, u'\xe8': 556, u'\xe9': 556, u'\xea': 556, u'\xeb': 556, u'\xec': 278, u'\xed': 278, u'\xee': 278, u'\xef': 278, u'\xf0': 611, u'\xf1': 611, u'\xf2': 611, u'\xf3': 611, u'\xf4': 611, u'\xf5': 611, u'\xf6': 611, u'\xf7': 584, u'\xf8': 611, u'\xf9': 611, u'\xfa': 611, u'\xfb': 611, u'\xfc': 611, u'\xfd': 556, u'\xfe': 611, u'\xff': 556, u'\u0100': 722, u'\u0101': 556, u'\u0102': 722, u'\u0103': 556, u'\u0104': 722, u'\u0105': 556, u'\u0106': 722, u'\u0107': 556, u'\u010c': 722, u'\u010d': 556, u'\u010e': 722, u'\u010f': 743, u'\u0110': 722, u'\u0111': 611, u'\u0112': 667, u'\u0113': 556, u'\u0116': 667, u'\u0117': 556, u'\u0118': 667, u'\u0119': 556, u'\u011a': 667, u'\u011b': 556, u'\u011e': 778, u'\u011f': 611, u'\u0122': 778, u'\u0123': 611, u'\u012a': 278, u'\u012b': 278, u'\u012e': 278, u'\u012f': 278, u'\u0130': 278, u'\u0131': 278, u'\u0136': 722, u'\u0137': 556, u'\u0139': 611, u'\u013a': 278, u'\u013b': 611, u'\u013c': 278, u'\u013d': 611, u'\u013e': 400, u'\u0141': 611, u'\u0142': 278, u'\u0143': 722, u'\u0144': 611, u'\u0145': 722, u'\u0146': 611, u'\u0147': 722, u'\u0148': 611, u'\u014c': 778, u'\u014d': 611, u'\u0150': 778, u'\u0151': 611, u'\u0152': 1000, u'\u0153': 944, u'\u0154': 722, u'\u0155': 389, u'\u0156': 722, u'\u0157': 389, u'\u0158': 722, u'\u0159': 389, u'\u015a': 667, u'\u015b': 556, u'\u015e': 667, u'\u015f': 556, u'\u0160': 667, u'\u0161': 556, u'\u0162': 611, u'\u0163': 333, u'\u0164': 611, u'\u0165': 389, u'\u016a': 722, u'\u016b': 611, u'\u016e': 722, u'\u016f': 611, u'\u0170': 722, u'\u0171': 611, u'\u0172': 722, u'\u0173': 611, u'\u0178': 667, u'\u0179': 611, u'\u017a': 500, u'\u017b': 611, u'\u017c': 500, u'\u017d': 611, u'\u017e': 500, u'\u0192': 556, u'\u0218': 667, u'\u0219': 556, u'\u02c6': 333, u'\u02c7': 333, u'\u02d8': 333, u'\u02d9': 333, u'\u02da': 333, u'\u02db': 333, u'\u02dc': 333, u'\u02dd': 333, u'\u2013': 556, u'\u2014': 1000, u'\u2018': 278, u'\u2019': 278, u'\u201a': 278, u'\u201c': 500, u'\u201d': 500, u'\u201e': 500, u'\u2020': 556, u'\u2021': 556, u'\u2022': 350, u'\u2026': 1000, u'\u2030': 1000, u'\u2039': 333, u'\u203a': 333, u'\u2044': 167, u'\u2122': 1000, u'\u2202': 494, u'\u2206': 612, u'\u2211': 600, u'\u2212': 584, u'\u221a': 549, u'\u2260': 549, u'\u2264': 549, u'\u2265': 549, u'\u25ca': 494, u'\uf6c3': 250, u'\ufb01': 611, u'\ufb02': 611}),
- 'Helvetica-BoldOblique': ({'FontName': 'Helvetica-BoldOblique', 'Descent': -207.0, 'FontBBox': (-175.0, -228.0, 1114.0, 962.0), 'FontWeight': 'Bold', 'CapHeight': 718.0, 'FontFamily': 'Helvetica', 'Flags': 0, 'XHeight': 532.0, 'ItalicAngle': -12.0, 'Ascent': 718.0}, {u' ': 278, u'!': 333, u'"': 474, u'#': 556, u'$': 556, u'%': 889, u'&': 722, u"'": 238, u'(': 333, u')': 333, u'*': 389, u'+': 584, u',': 278, u'-': 333, u'.': 278, u'/': 278, u'0': 556, u'1': 556, u'2': 556, u'3': 556, u'4': 556, u'5': 556, u'6': 556, u'7': 556, u'8': 556, u'9': 556, u':': 333, u';': 333, u'<': 584, u'=': 584, u'>': 584, u'?': 611, u'@': 975, u'A': 722, u'B': 722, u'C': 722, u'D': 722, u'E': 667, u'F': 611, u'G': 778, u'H': 722, u'I': 278, u'J': 556, u'K': 722, u'L': 611, u'M': 833, u'N': 722, u'O': 778, u'P': 667, u'Q': 778, u'R': 722, u'S': 667, u'T': 611, u'U': 722, u'V': 667, u'W': 944, u'X': 667, u'Y': 667, u'Z': 611, u'[': 333, u'\\': 278, u']': 333, u'^': 584, u'_': 556, u'`': 333, u'a': 556, u'b': 611, u'c': 556, u'd': 611, u'e': 556, u'f': 333, u'g': 611, u'h': 611, u'i': 278, u'j': 278, u'k': 556, u'l': 278, u'm': 889, u'n': 611, u'o': 611, u'p': 611, u'q': 611, u'r': 389, u's': 556, u't': 333, u'u': 611, u'v': 556, u'w': 778, u'x': 556, u'y': 556, u'z': 500, u'{': 389, u'|': 280, u'}': 389, u'~': 584, u'\xa1': 333, u'\xa2': 556, u'\xa3': 556, u'\xa4': 556, u'\xa5': 556, u'\xa6': 280, u'\xa7': 556, u'\xa8': 333, u'\xa9': 737, u'\xaa': 370, u'\xab': 556, u'\xac': 584, u'\xae': 737, u'\xaf': 333, u'\xb0': 400, u'\xb1': 584, u'\xb2': 333, u'\xb3': 333, u'\xb4': 333, u'\xb5': 611, u'\xb6': 556, u'\xb7': 278, u'\xb8': 333, u'\xb9': 333, u'\xba': 365, u'\xbb': 556, u'\xbc': 834, u'\xbd': 834, u'\xbe': 834, u'\xbf': 611, u'\xc0': 722, u'\xc1': 722, u'\xc2': 722, u'\xc3': 722, u'\xc4': 722, u'\xc5': 722, u'\xc6': 1000, u'\xc7': 722, u'\xc8': 667, u'\xc9': 667, u'\xca': 667, u'\xcb': 667, u'\xcc': 278, u'\xcd': 278, u'\xce': 278, u'\xcf': 278, u'\xd0': 722, u'\xd1': 722, u'\xd2': 778, u'\xd3': 778, u'\xd4': 778, u'\xd5': 778, u'\xd6': 778, u'\xd7': 584, u'\xd8': 778, u'\xd9': 722, u'\xda': 722, u'\xdb': 722, u'\xdc': 722, u'\xdd': 667, u'\xde': 667, u'\xdf': 611, u'\xe0': 556, u'\xe1': 556, u'\xe2': 556, u'\xe3': 556, u'\xe4': 556, u'\xe5': 556, u'\xe6': 889, u'\xe7': 556, u'\xe8': 556, u'\xe9': 556, u'\xea': 556, u'\xeb': 556, u'\xec': 278, u'\xed': 278, u'\xee': 278, u'\xef': 278, u'\xf0': 611, u'\xf1': 611, u'\xf2': 611, u'\xf3': 611, u'\xf4': 611, u'\xf5': 611, u'\xf6': 611, u'\xf7': 584, u'\xf8': 611, u'\xf9': 611, u'\xfa': 611, u'\xfb': 611, u'\xfc': 611, u'\xfd': 556, u'\xfe': 611, u'\xff': 556, u'\u0100': 722, u'\u0101': 556, u'\u0102': 722, u'\u0103': 556, u'\u0104': 722, u'\u0105': 556, u'\u0106': 722, u'\u0107': 556, u'\u010c': 722, u'\u010d': 556, u'\u010e': 722, u'\u010f': 743, u'\u0110': 722, u'\u0111': 611, u'\u0112': 667, u'\u0113': 556, u'\u0116': 667, u'\u0117': 556, u'\u0118': 667, u'\u0119': 556, u'\u011a': 667, u'\u011b': 556, u'\u011e': 778, u'\u011f': 611, u'\u0122': 778, u'\u0123': 611, u'\u012a': 278, u'\u012b': 278, u'\u012e': 278, u'\u012f': 278, u'\u0130': 278, u'\u0131': 278, u'\u0136': 722, u'\u0137': 556, u'\u0139': 611, u'\u013a': 278, u'\u013b': 611, u'\u013c': 278, u'\u013d': 611, u'\u013e': 400, u'\u0141': 611, u'\u0142': 278, u'\u0143': 722, u'\u0144': 611, u'\u0145': 722, u'\u0146': 611, u'\u0147': 722, u'\u0148': 611, u'\u014c': 778, u'\u014d': 611, u'\u0150': 778, u'\u0151': 611, u'\u0152': 1000, u'\u0153': 944, u'\u0154': 722, u'\u0155': 389, u'\u0156': 722, u'\u0157': 389, u'\u0158': 722, u'\u0159': 389, u'\u015a': 667, u'\u015b': 556, u'\u015e': 667, u'\u015f': 556, u'\u0160': 667, u'\u0161': 556, u'\u0162': 611, u'\u0163': 333, u'\u0164': 611, u'\u0165': 389, u'\u016a': 722, u'\u016b': 611, u'\u016e': 722, u'\u016f': 611, u'\u0170': 722, u'\u0171': 611, u'\u0172': 722, u'\u0173': 611, u'\u0178': 667, u'\u0179': 611, u'\u017a': 500, u'\u017b': 611, u'\u017c': 500, u'\u017d': 611, u'\u017e': 500, u'\u0192': 556, u'\u0218': 667, u'\u0219': 556, u'\u02c6': 333, u'\u02c7': 333, u'\u02d8': 333, u'\u02d9': 333, u'\u02da': 333, u'\u02db': 333, u'\u02dc': 333, u'\u02dd': 333, u'\u2013': 556, u'\u2014': 1000, u'\u2018': 278, u'\u2019': 278, u'\u201a': 278, u'\u201c': 500, u'\u201d': 500, u'\u201e': 500, u'\u2020': 556, u'\u2021': 556, u'\u2022': 350, u'\u2026': 1000, u'\u2030': 1000, u'\u2039': 333, u'\u203a': 333, u'\u2044': 167, u'\u2122': 1000, u'\u2202': 494, u'\u2206': 612, u'\u2211': 600, u'\u2212': 584, u'\u221a': 549, u'\u2260': 549, u'\u2264': 549, u'\u2265': 549, u'\u25ca': 494, u'\uf6c3': 250, u'\ufb01': 611, u'\ufb02': 611}),
- 'Helvetica-Oblique': ({'FontName': 'Helvetica-Oblique', 'Descent': -207.0, 'FontBBox': (-171.0, -225.0, 1116.0, 931.0), 'FontWeight': 'Medium', 'CapHeight': 718.0, 'FontFamily': 'Helvetica', 'Flags': 0, 'XHeight': 523.0, 'ItalicAngle': -12.0, 'Ascent': 718.0}, {u' ': 278, u'!': 278, u'"': 355, u'#': 556, u'$': 556, u'%': 889, u'&': 667, u"'": 191, u'(': 333, u')': 333, u'*': 389, u'+': 584, u',': 278, u'-': 333, u'.': 278, u'/': 278, u'0': 556, u'1': 556, u'2': 556, u'3': 556, u'4': 556, u'5': 556, u'6': 556, u'7': 556, u'8': 556, u'9': 556, u':': 278, u';': 278, u'<': 584, u'=': 584, u'>': 584, u'?': 556, u'@': 1015, u'A': 667, u'B': 667, u'C': 722, u'D': 722, u'E': 667, u'F': 611, u'G': 778, u'H': 722, u'I': 278, u'J': 500, u'K': 667, u'L': 556, u'M': 833, u'N': 722, u'O': 778, u'P': 667, u'Q': 778, u'R': 722, u'S': 667, u'T': 611, u'U': 722, u'V': 667, u'W': 944, u'X': 667, u'Y': 667, u'Z': 611, u'[': 278, u'\\': 278, u']': 278, u'^': 469, u'_': 556, u'`': 333, u'a': 556, u'b': 556, u'c': 500, u'd': 556, u'e': 556, u'f': 278, u'g': 556, u'h': 556, u'i': 222, u'j': 222, u'k': 500, u'l': 222, u'm': 833, u'n': 556, u'o': 556, u'p': 556, u'q': 556, u'r': 333, u's': 500, u't': 278, u'u': 556, u'v': 500, u'w': 722, u'x': 500, u'y': 500, u'z': 500, u'{': 334, u'|': 260, u'}': 334, u'~': 584, u'\xa1': 333, u'\xa2': 556, u'\xa3': 556, u'\xa4': 556, u'\xa5': 556, u'\xa6': 260, u'\xa7': 556, u'\xa8': 333, u'\xa9': 737, u'\xaa': 370, u'\xab': 556, u'\xac': 584, u'\xae': 737, u'\xaf': 333, u'\xb0': 400, u'\xb1': 584, u'\xb2': 333, u'\xb3': 333, u'\xb4': 333, u'\xb5': 556, u'\xb6': 537, u'\xb7': 278, u'\xb8': 333, u'\xb9': 333, u'\xba': 365, u'\xbb': 556, u'\xbc': 834, u'\xbd': 834, u'\xbe': 834, u'\xbf': 611, u'\xc0': 667, u'\xc1': 667, u'\xc2': 667, u'\xc3': 667, u'\xc4': 667, u'\xc5': 667, u'\xc6': 1000, u'\xc7': 722, u'\xc8': 667, u'\xc9': 667, u'\xca': 667, u'\xcb': 667, u'\xcc': 278, u'\xcd': 278, u'\xce': 278, u'\xcf': 278, u'\xd0': 722, u'\xd1': 722, u'\xd2': 778, u'\xd3': 778, u'\xd4': 778, u'\xd5': 778, u'\xd6': 778, u'\xd7': 584, u'\xd8': 778, u'\xd9': 722, u'\xda': 722, u'\xdb': 722, u'\xdc': 722, u'\xdd': 667, u'\xde': 667, u'\xdf': 611, u'\xe0': 556, u'\xe1': 556, u'\xe2': 556, u'\xe3': 556, u'\xe4': 556, u'\xe5': 556, u'\xe6': 889, u'\xe7': 500, u'\xe8': 556, u'\xe9': 556, u'\xea': 556, u'\xeb': 556, u'\xec': 278, u'\xed': 278, u'\xee': 278, u'\xef': 278, u'\xf0': 556, u'\xf1': 556, u'\xf2': 556, u'\xf3': 556, u'\xf4': 556, u'\xf5': 556, u'\xf6': 556, u'\xf7': 584, u'\xf8': 611, u'\xf9': 556, u'\xfa': 556, u'\xfb': 556, u'\xfc': 556, u'\xfd': 500, u'\xfe': 556, u'\xff': 500, u'\u0100': 667, u'\u0101': 556, u'\u0102': 667, u'\u0103': 556, u'\u0104': 667, u'\u0105': 556, u'\u0106': 722, u'\u0107': 500, u'\u010c': 722, u'\u010d': 500, u'\u010e': 722, u'\u010f': 643, u'\u0110': 722, u'\u0111': 556, u'\u0112': 667, u'\u0113': 556, u'\u0116': 667, u'\u0117': 556, u'\u0118': 667, u'\u0119': 556, u'\u011a': 667, u'\u011b': 556, u'\u011e': 778, u'\u011f': 556, u'\u0122': 778, u'\u0123': 556, u'\u012a': 278, u'\u012b': 278, u'\u012e': 278, u'\u012f': 222, u'\u0130': 278, u'\u0131': 278, u'\u0136': 667, u'\u0137': 500, u'\u0139': 556, u'\u013a': 222, u'\u013b': 556, u'\u013c': 222, u'\u013d': 556, u'\u013e': 299, u'\u0141': 556, u'\u0142': 222, u'\u0143': 722, u'\u0144': 556, u'\u0145': 722, u'\u0146': 556, u'\u0147': 722, u'\u0148': 556, u'\u014c': 778, u'\u014d': 556, u'\u0150': 778, u'\u0151': 556, u'\u0152': 1000, u'\u0153': 944, u'\u0154': 722, u'\u0155': 333, u'\u0156': 722, u'\u0157': 333, u'\u0158': 722, u'\u0159': 333, u'\u015a': 667, u'\u015b': 500, u'\u015e': 667, u'\u015f': 500, u'\u0160': 667, u'\u0161': 500, u'\u0162': 611, u'\u0163': 278, u'\u0164': 611, u'\u0165': 317, u'\u016a': 722, u'\u016b': 556, u'\u016e': 722, u'\u016f': 556, u'\u0170': 722, u'\u0171': 556, u'\u0172': 722, u'\u0173': 556, u'\u0178': 667, u'\u0179': 611, u'\u017a': 500, u'\u017b': 611, u'\u017c': 500, u'\u017d': 611, u'\u017e': 500, u'\u0192': 556, u'\u0218': 667, u'\u0219': 500, u'\u02c6': 333, u'\u02c7': 333, u'\u02d8': 333, u'\u02d9': 333, u'\u02da': 333, u'\u02db': 333, u'\u02dc': 333, u'\u02dd': 333, u'\u2013': 556, u'\u2014': 1000, u'\u2018': 222, u'\u2019': 222, u'\u201a': 222, u'\u201c': 333, u'\u201d': 333, u'\u201e': 333, u'\u2020': 556, u'\u2021': 556, u'\u2022': 350, u'\u2026': 1000, u'\u2030': 1000, u'\u2039': 333, u'\u203a': 333, u'\u2044': 167, u'\u2122': 1000, u'\u2202': 476, u'\u2206': 612, u'\u2211': 600, u'\u2212': 584, u'\u221a': 453, u'\u2260': 549, u'\u2264': 549, u'\u2265': 549, u'\u25ca': 471, u'\uf6c3': 250, u'\ufb01': 500, u'\ufb02': 500}),
- 'Symbol': ({'FontName': 'Symbol', 'FontBBox': (-180.0, -293.0, 1090.0, 1010.0), 'FontWeight': 'Medium', 'FontFamily': 'Symbol', 'Flags': 0, 'ItalicAngle': 0.0}, {u' ': 250, u'!': 333, u'#': 500, u'%': 833, u'&': 778, u'(': 333, u')': 333, u'+': 549, u',': 250, u'.': 250, u'/': 278, u'0': 500, u'1': 500, u'2': 500, u'3': 500, u'4': 500, u'5': 500, u'6': 500, u'7': 500, u'8': 500, u'9': 500, u':': 278, u';': 278, u'<': 549, u'=': 549, u'>': 549, u'?': 444, u'[': 333, u']': 333, u'_': 500, u'{': 480, u'|': 200, u'}': 480, u'\xac': 713, u'\xb0': 400, u'\xb1': 549, u'\xb5': 576, u'\xd7': 549, u'\xf7': 549, u'\u0192': 500, u'\u0391': 722, u'\u0392': 667, u'\u0393': 603, u'\u0395': 611, u'\u0396': 611, u'\u0397': 722, u'\u0398': 741, u'\u0399': 333, u'\u039a': 722, u'\u039b': 686, u'\u039c': 889, u'\u039d': 722, u'\u039e': 645, u'\u039f': 722, u'\u03a0': 768, u'\u03a1': 556, u'\u03a3': 592, u'\u03a4': 611, u'\u03a5': 690, u'\u03a6': 763, u'\u03a7': 722, u'\u03a8': 795, u'\u03b1': 631, u'\u03b2': 549, u'\u03b3': 411, u'\u03b4': 494, u'\u03b5': 439, u'\u03b6': 494, u'\u03b7': 603, u'\u03b8': 521, u'\u03b9': 329, u'\u03ba': 549, u'\u03bb': 549, u'\u03bd': 521, u'\u03be': 493, u'\u03bf': 549, u'\u03c0': 549, u'\u03c1': 549, u'\u03c2': 439, u'\u03c3': 603, u'\u03c4': 439, u'\u03c5': 576, u'\u03c6': 521, u'\u03c7': 549, u'\u03c8': 686, u'\u03c9': 686, u'\u03d1': 631, u'\u03d2': 620, u'\u03d5': 603, u'\u03d6': 713, u'\u2022': 460, u'\u2026': 1000, u'\u2032': 247, u'\u2033': 411, u'\u2044': 167, u'\u20ac': 750, u'\u2111': 686, u'\u2118': 987, u'\u211c': 795, u'\u2126': 768, u'\u2135': 823, u'\u2190': 987, u'\u2191': 603, u'\u2192': 987, u'\u2193': 603, u'\u2194': 1042, u'\u21b5': 658, u'\u21d0': 987, u'\u21d1': 603, u'\u21d2': 987, u'\u21d3': 603, u'\u21d4': 1042, u'\u2200': 713, u'\u2202': 494, u'\u2203': 549, u'\u2205': 823, u'\u2206': 612, u'\u2207': 713, u'\u2208': 713, u'\u2209': 713, u'\u220b': 439, u'\u220f': 823, u'\u2211': 713, u'\u2212': 549, u'\u2217': 500, u'\u221a': 549, u'\u221d': 713, u'\u221e': 713, u'\u2220': 768, u'\u2227': 603, u'\u2228': 603, u'\u2229': 768, u'\u222a': 768, u'\u222b': 274, u'\u2234': 863, u'\u223c': 549, u'\u2245': 549, u'\u2248': 549, u'\u2260': 549, u'\u2261': 549, u'\u2264': 549, u'\u2265': 549, u'\u2282': 713, u'\u2283': 713, u'\u2284': 713, u'\u2286': 713, u'\u2287': 713, u'\u2295': 768, u'\u2297': 768, u'\u22a5': 658, u'\u22c5': 250, u'\u2320': 686, u'\u2321': 686, u'\u2329': 329, u'\u232a': 329, u'\u25ca': 494, u'\u2660': 753, u'\u2663': 753, u'\u2665': 753, u'\u2666': 753, u'\uf6d9': 790, u'\uf6da': 790, u'\uf6db': 890, u'\uf8e5': 500, u'\uf8e6': 603, u'\uf8e7': 1000, u'\uf8e8': 790, u'\uf8e9': 790, u'\uf8ea': 786, u'\uf8eb': 384, u'\uf8ec': 384, u'\uf8ed': 384, u'\uf8ee': 384, u'\uf8ef': 384, u'\uf8f0': 384, u'\uf8f1': 494, u'\uf8f2': 494, u'\uf8f3': 494, u'\uf8f4': 494, u'\uf8f5': 686, u'\uf8f6': 384, u'\uf8f7': 384, u'\uf8f8': 384, u'\uf8f9': 384, u'\uf8fa': 384, u'\uf8fb': 384, u'\uf8fc': 494, u'\uf8fd': 494, u'\uf8fe': 494, u'\uf8ff': 790}),
- 'Times-Bold': ({'FontName': 'Times-Bold', 'Descent': -217.0, 'FontBBox': (-168.0, -218.0, 1000.0, 935.0), 'FontWeight': 'Bold', 'CapHeight': 676.0, 'FontFamily': 'Times', 'Flags': 0, 'XHeight': 461.0, 'ItalicAngle': 0.0, 'Ascent': 683.0}, {u' ': 250, u'!': 333, u'"': 555, u'#': 500, u'$': 500, u'%': 1000, u'&': 833, u"'": 278, u'(': 333, u')': 333, u'*': 500, u'+': 570, u',': 250, u'-': 333, u'.': 250, u'/': 278, u'0': 500, u'1': 500, u'2': 500, u'3': 500, u'4': 500, u'5': 500, u'6': 500, u'7': 500, u'8': 500, u'9': 500, u':': 333, u';': 333, u'<': 570, u'=': 570, u'>': 570, u'?': 500, u'@': 930, u'A': 722, u'B': 667, u'C': 722, u'D': 722, u'E': 667, u'F': 611, u'G': 778, u'H': 778, u'I': 389, u'J': 500, u'K': 778, u'L': 667, u'M': 944, u'N': 722, u'O': 778, u'P': 611, u'Q': 778, u'R': 722, u'S': 556, u'T': 667, u'U': 722, u'V': 722, u'W': 1000, u'X': 722, u'Y': 722, u'Z': 667, u'[': 333, u'\\': 278, u']': 333, u'^': 581, u'_': 500, u'`': 333, u'a': 500, u'b': 556, u'c': 444, u'd': 556, u'e': 444, u'f': 333, u'g': 500, u'h': 556, u'i': 278, u'j': 333, u'k': 556, u'l': 278, u'm': 833, u'n': 556, u'o': 500, u'p': 556, u'q': 556, u'r': 444, u's': 389, u't': 333, u'u': 556, u'v': 500, u'w': 722, u'x': 500, u'y': 500, u'z': 444, u'{': 394, u'|': 220, u'}': 394, u'~': 520, u'\xa1': 333, u'\xa2': 500, u'\xa3': 500, u'\xa4': 500, u'\xa5': 500, u'\xa6': 220, u'\xa7': 500, u'\xa8': 333, u'\xa9': 747, u'\xaa': 300, u'\xab': 500, u'\xac': 570, u'\xae': 747, u'\xaf': 333, u'\xb0': 400, u'\xb1': 570, u'\xb2': 300, u'\xb3': 300, u'\xb4': 333, u'\xb5': 556, u'\xb6': 540, u'\xb7': 250, u'\xb8': 333, u'\xb9': 300, u'\xba': 330, u'\xbb': 500, u'\xbc': 750, u'\xbd': 750, u'\xbe': 750, u'\xbf': 500, u'\xc0': 722, u'\xc1': 722, u'\xc2': 722, u'\xc3': 722, u'\xc4': 722, u'\xc5': 722, u'\xc6': 1000, u'\xc7': 722, u'\xc8': 667, u'\xc9': 667, u'\xca': 667, u'\xcb': 667, u'\xcc': 389, u'\xcd': 389, u'\xce': 389, u'\xcf': 389, u'\xd0': 722, u'\xd1': 722, u'\xd2': 778, u'\xd3': 778, u'\xd4': 778, u'\xd5': 778, u'\xd6': 778, u'\xd7': 570, u'\xd8': 778, u'\xd9': 722, u'\xda': 722, u'\xdb': 722, u'\xdc': 722, u'\xdd': 722, u'\xde': 611, u'\xdf': 556, u'\xe0': 500, u'\xe1': 500, u'\xe2': 500, u'\xe3': 500, u'\xe4': 500, u'\xe5': 500, u'\xe6': 722, u'\xe7': 444, u'\xe8': 444, u'\xe9': 444, u'\xea': 444, u'\xeb': 444, u'\xec': 278, u'\xed': 278, u'\xee': 278, u'\xef': 278, u'\xf0': 500, u'\xf1': 556, u'\xf2': 500, u'\xf3': 500, u'\xf4': 500, u'\xf5': 500, u'\xf6': 500, u'\xf7': 570, u'\xf8': 500, u'\xf9': 556, u'\xfa': 556, u'\xfb': 556, u'\xfc': 556, u'\xfd': 500, u'\xfe': 556, u'\xff': 500, u'\u0100': 722, u'\u0101': 500, u'\u0102': 722, u'\u0103': 500, u'\u0104': 722, u'\u0105': 500, u'\u0106': 722, u'\u0107': 444, u'\u010c': 722, u'\u010d': 444, u'\u010e': 722, u'\u010f': 672, u'\u0110': 722, u'\u0111': 556, u'\u0112': 667, u'\u0113': 444, u'\u0116': 667, u'\u0117': 444, u'\u0118': 667, u'\u0119': 444, u'\u011a': 667, u'\u011b': 444, u'\u011e': 778, u'\u011f': 500, u'\u0122': 778, u'\u0123': 500, u'\u012a': 389, u'\u012b': 278, u'\u012e': 389, u'\u012f': 278, u'\u0130': 389, u'\u0131': 278, u'\u0136': 778, u'\u0137': 556, u'\u0139': 667, u'\u013a': 278, u'\u013b': 667, u'\u013c': 278, u'\u013d': 667, u'\u013e': 394, u'\u0141': 667, u'\u0142': 278, u'\u0143': 722, u'\u0144': 556, u'\u0145': 722, u'\u0146': 556, u'\u0147': 722, u'\u0148': 556, u'\u014c': 778, u'\u014d': 500, u'\u0150': 778, u'\u0151': 500, u'\u0152': 1000, u'\u0153': 722, u'\u0154': 722, u'\u0155': 444, u'\u0156': 722, u'\u0157': 444, u'\u0158': 722, u'\u0159': 444, u'\u015a': 556, u'\u015b': 389, u'\u015e': 556, u'\u015f': 389, u'\u0160': 556, u'\u0161': 389, u'\u0162': 667, u'\u0163': 333, u'\u0164': 667, u'\u0165': 416, u'\u016a': 722, u'\u016b': 556, u'\u016e': 722, u'\u016f': 556, u'\u0170': 722, u'\u0171': 556, u'\u0172': 722, u'\u0173': 556, u'\u0178': 722, u'\u0179': 667, u'\u017a': 444, u'\u017b': 667, u'\u017c': 444, u'\u017d': 667, u'\u017e': 444, u'\u0192': 500, u'\u0218': 556, u'\u0219': 389, u'\u02c6': 333, u'\u02c7': 333, u'\u02d8': 333, u'\u02d9': 333, u'\u02da': 333, u'\u02db': 333, u'\u02dc': 333, u'\u02dd': 333, u'\u2013': 500, u'\u2014': 1000, u'\u2018': 333, u'\u2019': 333, u'\u201a': 333, u'\u201c': 500, u'\u201d': 500, u'\u201e': 500, u'\u2020': 500, u'\u2021': 500, u'\u2022': 350, u'\u2026': 1000, u'\u2030': 1000, u'\u2039': 333, u'\u203a': 333, u'\u2044': 167, u'\u2122': 1000, u'\u2202': 494, u'\u2206': 612, u'\u2211': 600, u'\u2212': 570, u'\u221a': 549, u'\u2260': 549, u'\u2264': 549, u'\u2265': 549, u'\u25ca': 494, u'\uf6c3': 250, u'\ufb01': 556, u'\ufb02': 556}),
- 'Times-BoldItalic': ({'FontName': 'Times-BoldItalic', 'Descent': -217.0, 'FontBBox': (-200.0, -218.0, 996.0, 921.0), 'FontWeight': 'Bold', 'CapHeight': 669.0, 'FontFamily': 'Times', 'Flags': 0, 'XHeight': 462.0, 'ItalicAngle': -15.0, 'Ascent': 683.0}, {u' ': 250, u'!': 389, u'"': 555, u'#': 500, u'$': 500, u'%': 833, u'&': 778, u"'": 278, u'(': 333, u')': 333, u'*': 500, u'+': 570, u',': 250, u'-': 333, u'.': 250, u'/': 278, u'0': 500, u'1': 500, u'2': 500, u'3': 500, u'4': 500, u'5': 500, u'6': 500, u'7': 500, u'8': 500, u'9': 500, u':': 333, u';': 333, u'<': 570, u'=': 570, u'>': 570, u'?': 500, u'@': 832, u'A': 667, u'B': 667, u'C': 667, u'D': 722, u'E': 667, u'F': 667, u'G': 722, u'H': 778, u'I': 389, u'J': 500, u'K': 667, u'L': 611, u'M': 889, u'N': 722, u'O': 722, u'P': 611, u'Q': 722, u'R': 667, u'S': 556, u'T': 611, u'U': 722, u'V': 667, u'W': 889, u'X': 667, u'Y': 611, u'Z': 611, u'[': 333, u'\\': 278, u']': 333, u'^': 570, u'_': 500, u'`': 333, u'a': 500, u'b': 500, u'c': 444, u'd': 500, u'e': 444, u'f': 333, u'g': 500, u'h': 556, u'i': 278, u'j': 278, u'k': 500, u'l': 278, u'm': 778, u'n': 556, u'o': 500, u'p': 500, u'q': 500, u'r': 389, u's': 389, u't': 278, u'u': 556, u'v': 444, u'w': 667, u'x': 500, u'y': 444, u'z': 389, u'{': 348, u'|': 220, u'}': 348, u'~': 570, u'\xa1': 389, u'\xa2': 500, u'\xa3': 500, u'\xa4': 500, u'\xa5': 500, u'\xa6': 220, u'\xa7': 500, u'\xa8': 333, u'\xa9': 747, u'\xaa': 266, u'\xab': 500, u'\xac': 606, u'\xae': 747, u'\xaf': 333, u'\xb0': 400, u'\xb1': 570, u'\xb2': 300, u'\xb3': 300, u'\xb4': 333, u'\xb5': 576, u'\xb6': 500, u'\xb7': 250, u'\xb8': 333, u'\xb9': 300, u'\xba': 300, u'\xbb': 500, u'\xbc': 750, u'\xbd': 750, u'\xbe': 750, u'\xbf': 500, u'\xc0': 667, u'\xc1': 667, u'\xc2': 667, u'\xc3': 667, u'\xc4': 667, u'\xc5': 667, u'\xc6': 944, u'\xc7': 667, u'\xc8': 667, u'\xc9': 667, u'\xca': 667, u'\xcb': 667, u'\xcc': 389, u'\xcd': 389, u'\xce': 389, u'\xcf': 389, u'\xd0': 722, u'\xd1': 722, u'\xd2': 722, u'\xd3': 722, u'\xd4': 722, u'\xd5': 722, u'\xd6': 722, u'\xd7': 570, u'\xd8': 722, u'\xd9': 722, u'\xda': 722, u'\xdb': 722, u'\xdc': 722, u'\xdd': 611, u'\xde': 611, u'\xdf': 500, u'\xe0': 500, u'\xe1': 500, u'\xe2': 500, u'\xe3': 500, u'\xe4': 500, u'\xe5': 500, u'\xe6': 722, u'\xe7': 444, u'\xe8': 444, u'\xe9': 444, u'\xea': 444, u'\xeb': 444, u'\xec': 278, u'\xed': 278, u'\xee': 278, u'\xef': 278, u'\xf0': 500, u'\xf1': 556, u'\xf2': 500, u'\xf3': 500, u'\xf4': 500, u'\xf5': 500, u'\xf6': 500, u'\xf7': 570, u'\xf8': 500, u'\xf9': 556, u'\xfa': 556, u'\xfb': 556, u'\xfc': 556, u'\xfd': 444, u'\xfe': 500, u'\xff': 444, u'\u0100': 667, u'\u0101': 500, u'\u0102': 667, u'\u0103': 500, u'\u0104': 667, u'\u0105': 500, u'\u0106': 667, u'\u0107': 444, u'\u010c': 667, u'\u010d': 444, u'\u010e': 722, u'\u010f': 608, u'\u0110': 722, u'\u0111': 500, u'\u0112': 667, u'\u0113': 444, u'\u0116': 667, u'\u0117': 444, u'\u0118': 667, u'\u0119': 444, u'\u011a': 667, u'\u011b': 444, u'\u011e': 722, u'\u011f': 500, u'\u0122': 722, u'\u0123': 500, u'\u012a': 389, u'\u012b': 278, u'\u012e': 389, u'\u012f': 278, u'\u0130': 389, u'\u0131': 278, u'\u0136': 667, u'\u0137': 500, u'\u0139': 611, u'\u013a': 278, u'\u013b': 611, u'\u013c': 278, u'\u013d': 611, u'\u013e': 382, u'\u0141': 611, u'\u0142': 278, u'\u0143': 722, u'\u0144': 556, u'\u0145': 722, u'\u0146': 556, u'\u0147': 722, u'\u0148': 556, u'\u014c': 722, u'\u014d': 500, u'\u0150': 722, u'\u0151': 500, u'\u0152': 944, u'\u0153': 722, u'\u0154': 667, u'\u0155': 389, u'\u0156': 667, u'\u0157': 389, u'\u0158': 667, u'\u0159': 389, u'\u015a': 556, u'\u015b': 389, u'\u015e': 556, u'\u015f': 389, u'\u0160': 556, u'\u0161': 389, u'\u0162': 611, u'\u0163': 278, u'\u0164': 611, u'\u0165': 366, u'\u016a': 722, u'\u016b': 556, u'\u016e': 722, u'\u016f': 556, u'\u0170': 722, u'\u0171': 556, u'\u0172': 722, u'\u0173': 556, u'\u0178': 611, u'\u0179': 611, u'\u017a': 389, u'\u017b': 611, u'\u017c': 389, u'\u017d': 611, u'\u017e': 389, u'\u0192': 500, u'\u0218': 556, u'\u0219': 389, u'\u02c6': 333, u'\u02c7': 333, u'\u02d8': 333, u'\u02d9': 333, u'\u02da': 333, u'\u02db': 333, u'\u02dc': 333, u'\u02dd': 333, u'\u2013': 500, u'\u2014': 1000, u'\u2018': 333, u'\u2019': 333, u'\u201a': 333, u'\u201c': 500, u'\u201d': 500, u'\u201e': 500, u'\u2020': 500, u'\u2021': 500, u'\u2022': 350, u'\u2026': 1000, u'\u2030': 1000, u'\u2039': 333, u'\u203a': 333, u'\u2044': 167, u'\u2122': 1000, u'\u2202': 494, u'\u2206': 612, u'\u2211': 600, u'\u2212': 606, u'\u221a': 549, u'\u2260': 549, u'\u2264': 549, u'\u2265': 549, u'\u25ca': 494, u'\uf6c3': 250, u'\ufb01': 556, u'\ufb02': 556}),
- 'Times-Italic': ({'FontName': 'Times-Italic', 'Descent': -217.0, 'FontBBox': (-169.0, -217.0, 1010.0, 883.0), 'FontWeight': 'Medium', 'CapHeight': 653.0, 'FontFamily': 'Times', 'Flags': 0, 'XHeight': 441.0, 'ItalicAngle': -15.5, 'Ascent': 683.0}, {u' ': 250, u'!': 333, u'"': 420, u'#': 500, u'$': 500, u'%': 833, u'&': 778, u"'": 214, u'(': 333, u')': 333, u'*': 500, u'+': 675, u',': 250, u'-': 333, u'.': 250, u'/': 278, u'0': 500, u'1': 500, u'2': 500, u'3': 500, u'4': 500, u'5': 500, u'6': 500, u'7': 500, u'8': 500, u'9': 500, u':': 333, u';': 333, u'<': 675, u'=': 675, u'>': 675, u'?': 500, u'@': 920, u'A': 611, u'B': 611, u'C': 667, u'D': 722, u'E': 611, u'F': 611, u'G': 722, u'H': 722, u'I': 333, u'J': 444, u'K': 667, u'L': 556, u'M': 833, u'N': 667, u'O': 722, u'P': 611, u'Q': 722, u'R': 611, u'S': 500, u'T': 556, u'U': 722, u'V': 611, u'W': 833, u'X': 611, u'Y': 556, u'Z': 556, u'[': 389, u'\\': 278, u']': 389, u'^': 422, u'_': 500, u'`': 333, u'a': 500, u'b': 500, u'c': 444, u'd': 500, u'e': 444, u'f': 278, u'g': 500, u'h': 500, u'i': 278, u'j': 278, u'k': 444, u'l': 278, u'm': 722, u'n': 500, u'o': 500, u'p': 500, u'q': 500, u'r': 389, u's': 389, u't': 278, u'u': 500, u'v': 444, u'w': 667, u'x': 444, u'y': 444, u'z': 389, u'{': 400, u'|': 275, u'}': 400, u'~': 541, u'\xa1': 389, u'\xa2': 500, u'\xa3': 500, u'\xa4': 500, u'\xa5': 500, u'\xa6': 275, u'\xa7': 500, u'\xa8': 333, u'\xa9': 760, u'\xaa': 276, u'\xab': 500, u'\xac': 675, u'\xae': 760, u'\xaf': 333, u'\xb0': 400, u'\xb1': 675, u'\xb2': 300, u'\xb3': 300, u'\xb4': 333, u'\xb5': 500, u'\xb6': 523, u'\xb7': 250, u'\xb8': 333, u'\xb9': 300, u'\xba': 310, u'\xbb': 500, u'\xbc': 750, u'\xbd': 750, u'\xbe': 750, u'\xbf': 500, u'\xc0': 611, u'\xc1': 611, u'\xc2': 611, u'\xc3': 611, u'\xc4': 611, u'\xc5': 611, u'\xc6': 889, u'\xc7': 667, u'\xc8': 611, u'\xc9': 611, u'\xca': 611, u'\xcb': 611, u'\xcc': 333, u'\xcd': 333, u'\xce': 333, u'\xcf': 333, u'\xd0': 722, u'\xd1': 667, u'\xd2': 722, u'\xd3': 722, u'\xd4': 722, u'\xd5': 722, u'\xd6': 722, u'\xd7': 675, u'\xd8': 722, u'\xd9': 722, u'\xda': 722, u'\xdb': 722, u'\xdc': 722, u'\xdd': 556, u'\xde': 611, u'\xdf': 500, u'\xe0': 500, u'\xe1': 500, u'\xe2': 500, u'\xe3': 500, u'\xe4': 500, u'\xe5': 500, u'\xe6': 667, u'\xe7': 444, u'\xe8': 444, u'\xe9': 444, u'\xea': 444, u'\xeb': 444, u'\xec': 278, u'\xed': 278, u'\xee': 278, u'\xef': 278, u'\xf0': 500, u'\xf1': 500, u'\xf2': 500, u'\xf3': 500, u'\xf4': 500, u'\xf5': 500, u'\xf6': 500, u'\xf7': 675, u'\xf8': 500, u'\xf9': 500, u'\xfa': 500, u'\xfb': 500, u'\xfc': 500, u'\xfd': 444, u'\xfe': 500, u'\xff': 444, u'\u0100': 611, u'\u0101': 500, u'\u0102': 611, u'\u0103': 500, u'\u0104': 611, u'\u0105': 500, u'\u0106': 667, u'\u0107': 444, u'\u010c': 667, u'\u010d': 444, u'\u010e': 722, u'\u010f': 544, u'\u0110': 722, u'\u0111': 500, u'\u0112': 611, u'\u0113': 444, u'\u0116': 611, u'\u0117': 444, u'\u0118': 611, u'\u0119': 444, u'\u011a': 611, u'\u011b': 444, u'\u011e': 722, u'\u011f': 500, u'\u0122': 722, u'\u0123': 500, u'\u012a': 333, u'\u012b': 278, u'\u012e': 333, u'\u012f': 278, u'\u0130': 333, u'\u0131': 278, u'\u0136': 667, u'\u0137': 444, u'\u0139': 556, u'\u013a': 278, u'\u013b': 556, u'\u013c': 278, u'\u013d': 611, u'\u013e': 300, u'\u0141': 556, u'\u0142': 278, u'\u0143': 667, u'\u0144': 500, u'\u0145': 667, u'\u0146': 500, u'\u0147': 667, u'\u0148': 500, u'\u014c': 722, u'\u014d': 500, u'\u0150': 722, u'\u0151': 500, u'\u0152': 944, u'\u0153': 667, u'\u0154': 611, u'\u0155': 389, u'\u0156': 611, u'\u0157': 389, u'\u0158': 611, u'\u0159': 389, u'\u015a': 500, u'\u015b': 389, u'\u015e': 500, u'\u015f': 389, u'\u0160': 500, u'\u0161': 389, u'\u0162': 556, u'\u0163': 278, u'\u0164': 556, u'\u0165': 300, u'\u016a': 722, u'\u016b': 500, u'\u016e': 722, u'\u016f': 500, u'\u0170': 722, u'\u0171': 500, u'\u0172': 722, u'\u0173': 500, u'\u0178': 556, u'\u0179': 556, u'\u017a': 389, u'\u017b': 556, u'\u017c': 389, u'\u017d': 556, u'\u017e': 389, u'\u0192': 500, u'\u0218': 500, u'\u0219': 389, u'\u02c6': 333, u'\u02c7': 333, u'\u02d8': 333, u'\u02d9': 333, u'\u02da': 333, u'\u02db': 333, u'\u02dc': 333, u'\u02dd': 333, u'\u2013': 500, u'\u2014': 889, u'\u2018': 333, u'\u2019': 333, u'\u201a': 333, u'\u201c': 556, u'\u201d': 556, u'\u201e': 556, u'\u2020': 500, u'\u2021': 500, u'\u2022': 350, u'\u2026': 889, u'\u2030': 1000, u'\u2039': 333, u'\u203a': 333, u'\u2044': 167, u'\u2122': 980, u'\u2202': 476, u'\u2206': 612, u'\u2211': 600, u'\u2212': 675, u'\u221a': 453, u'\u2260': 549, u'\u2264': 549, u'\u2265': 549, u'\u25ca': 471, u'\uf6c3': 250, u'\ufb01': 500, u'\ufb02': 500}),
- 'Times-Roman': ({'FontName': 'Times-Roman', 'Descent': -217.0, 'FontBBox': (-168.0, -218.0, 1000.0, 898.0), 'FontWeight': 'Roman', 'CapHeight': 662.0, 'FontFamily': 'Times', 'Flags': 0, 'XHeight': 450.0, 'ItalicAngle': 0.0, 'Ascent': 683.0}, {u' ': 250, u'!': 333, u'"': 408, u'#': 500, u'$': 500, u'%': 833, u'&': 778, u"'": 180, u'(': 333, u')': 333, u'*': 500, u'+': 564, u',': 250, u'-': 333, u'.': 250, u'/': 278, u'0': 500, u'1': 500, u'2': 500, u'3': 500, u'4': 500, u'5': 500, u'6': 500, u'7': 500, u'8': 500, u'9': 500, u':': 278, u';': 278, u'<': 564, u'=': 564, u'>': 564, u'?': 444, u'@': 921, u'A': 722, u'B': 667, u'C': 667, u'D': 722, u'E': 611, u'F': 556, u'G': 722, u'H': 722, u'I': 333, u'J': 389, u'K': 722, u'L': 611, u'M': 889, u'N': 722, u'O': 722, u'P': 556, u'Q': 722, u'R': 667, u'S': 556, u'T': 611, u'U': 722, u'V': 722, u'W': 944, u'X': 722, u'Y': 722, u'Z': 611, u'[': 333, u'\\': 278, u']': 333, u'^': 469, u'_': 500, u'`': 333, u'a': 444, u'b': 500, u'c': 444, u'd': 500, u'e': 444, u'f': 333, u'g': 500, u'h': 500, u'i': 278, u'j': 278, u'k': 500, u'l': 278, u'm': 778, u'n': 500, u'o': 500, u'p': 500, u'q': 500, u'r': 333, u's': 389, u't': 278, u'u': 500, u'v': 500, u'w': 722, u'x': 500, u'y': 500, u'z': 444, u'{': 480, u'|': 200, u'}': 480, u'~': 541, u'\xa1': 333, u'\xa2': 500, u'\xa3': 500, u'\xa4': 500, u'\xa5': 500, u'\xa6': 200, u'\xa7': 500, u'\xa8': 333, u'\xa9': 760, u'\xaa': 276, u'\xab': 500, u'\xac': 564, u'\xae': 760, u'\xaf': 333, u'\xb0': 400, u'\xb1': 564, u'\xb2': 300, u'\xb3': 300, u'\xb4': 333, u'\xb5': 500, u'\xb6': 453, u'\xb7': 250, u'\xb8': 333, u'\xb9': 300, u'\xba': 310, u'\xbb': 500, u'\xbc': 750, u'\xbd': 750, u'\xbe': 750, u'\xbf': 444, u'\xc0': 722, u'\xc1': 722, u'\xc2': 722, u'\xc3': 722, u'\xc4': 722, u'\xc5': 722, u'\xc6': 889, u'\xc7': 667, u'\xc8': 611, u'\xc9': 611, u'\xca': 611, u'\xcb': 611, u'\xcc': 333, u'\xcd': 333, u'\xce': 333, u'\xcf': 333, u'\xd0': 722, u'\xd1': 722, u'\xd2': 722, u'\xd3': 722, u'\xd4': 722, u'\xd5': 722, u'\xd6': 722, u'\xd7': 564, u'\xd8': 722, u'\xd9': 722, u'\xda': 722, u'\xdb': 722, u'\xdc': 722, u'\xdd': 722, u'\xde': 556, u'\xdf': 500, u'\xe0': 444, u'\xe1': 444, u'\xe2': 444, u'\xe3': 444, u'\xe4': 444, u'\xe5': 444, u'\xe6': 667, u'\xe7': 444, u'\xe8': 444, u'\xe9': 444, u'\xea': 444, u'\xeb': 444, u'\xec': 278, u'\xed': 278, u'\xee': 278, u'\xef': 278, u'\xf0': 500, u'\xf1': 500, u'\xf2': 500, u'\xf3': 500, u'\xf4': 500, u'\xf5': 500, u'\xf6': 500, u'\xf7': 564, u'\xf8': 500, u'\xf9': 500, u'\xfa': 500, u'\xfb': 500, u'\xfc': 500, u'\xfd': 500, u'\xfe': 500, u'\xff': 500, u'\u0100': 722, u'\u0101': 444, u'\u0102': 722, u'\u0103': 444, u'\u0104': 722, u'\u0105': 444, u'\u0106': 667, u'\u0107': 444, u'\u010c': 667, u'\u010d': 444, u'\u010e': 722, u'\u010f': 588, u'\u0110': 722, u'\u0111': 500, u'\u0112': 611, u'\u0113': 444, u'\u0116': 611, u'\u0117': 444, u'\u0118': 611, u'\u0119': 444, u'\u011a': 611, u'\u011b': 444, u'\u011e': 722, u'\u011f': 500, u'\u0122': 722, u'\u0123': 500, u'\u012a': 333, u'\u012b': 278, u'\u012e': 333, u'\u012f': 278, u'\u0130': 333, u'\u0131': 278, u'\u0136': 722, u'\u0137': 500, u'\u0139': 611, u'\u013a': 278, u'\u013b': 611, u'\u013c': 278, u'\u013d': 611, u'\u013e': 344, u'\u0141': 611, u'\u0142': 278, u'\u0143': 722, u'\u0144': 500, u'\u0145': 722, u'\u0146': 500, u'\u0147': 722, u'\u0148': 500, u'\u014c': 722, u'\u014d': 500, u'\u0150': 722, u'\u0151': 500, u'\u0152': 889, u'\u0153': 722, u'\u0154': 667, u'\u0155': 333, u'\u0156': 667, u'\u0157': 333, u'\u0158': 667, u'\u0159': 333, u'\u015a': 556, u'\u015b': 389, u'\u015e': 556, u'\u015f': 389, u'\u0160': 556, u'\u0161': 389, u'\u0162': 611, u'\u0163': 278, u'\u0164': 611, u'\u0165': 326, u'\u016a': 722, u'\u016b': 500, u'\u016e': 722, u'\u016f': 500, u'\u0170': 722, u'\u0171': 500, u'\u0172': 722, u'\u0173': 500, u'\u0178': 722, u'\u0179': 611, u'\u017a': 444, u'\u017b': 611, u'\u017c': 444, u'\u017d': 611, u'\u017e': 444, u'\u0192': 500, u'\u0218': 556, u'\u0219': 389, u'\u02c6': 333, u'\u02c7': 333, u'\u02d8': 333, u'\u02d9': 333, u'\u02da': 333, u'\u02db': 333, u'\u02dc': 333, u'\u02dd': 333, u'\u2013': 500, u'\u2014': 1000, u'\u2018': 333, u'\u2019': 333, u'\u201a': 333, u'\u201c': 444, u'\u201d': 444, u'\u201e': 444, u'\u2020': 500, u'\u2021': 500, u'\u2022': 350, u'\u2026': 1000, u'\u2030': 1000, u'\u2039': 333, u'\u203a': 333, u'\u2044': 167, u'\u2122': 980, u'\u2202': 476, u'\u2206': 612, u'\u2211': 600, u'\u2212': 564, u'\u221a': 453, u'\u2260': 549, u'\u2264': 549, u'\u2265': 549, u'\u25ca': 471, u'\uf6c3': 250, u'\ufb01': 556, u'\ufb02': 556}),
- 'ZapfDingbats': ({'FontName': 'ZapfDingbats', 'FontBBox': (-1.0, -143.0, 981.0, 820.0), 'FontWeight': 'Medium', 'FontFamily': 'ITC', 'Flags': 0, 'ItalicAngle': 0.0}, {u'\x01': 974, u'\x02': 961, u'\x03': 980, u'\x04': 719, u'\x05': 789, u'\x06': 494, u'\x07': 552, u'\x08': 537, u'\t': 577, u'\n': 692, u'\x0b': 960, u'\x0c': 939, u'\r': 549, u'\x0e': 855, u'\x0f': 911, u'\x10': 933, u'\x11': 945, u'\x12': 974, u'\x13': 755, u'\x14': 846, u'\x15': 762, u'\x16': 761, u'\x17': 571, u'\x18': 677, u'\x19': 763, u'\x1a': 760, u'\x1b': 759, u'\x1c': 754, u'\x1d': 786, u'\x1e': 788, u'\x1f': 788, u' ': 790, u'!': 793, u'"': 794, u'#': 816, u'$': 823, u'%': 789, u'&': 841, u"'": 823, u'(': 833, u')': 816, u'*': 831, u'+': 923, u',': 744, u'-': 723, u'.': 749, u'/': 790, u'0': 792, u'1': 695, u'2': 776, u'3': 768, u'4': 792, u'5': 759, u'6': 707, u'7': 708, u'8': 682, u'9': 701, u':': 826, u';': 815, u'<': 789, u'=': 789, u'>': 707, u'?': 687, u'@': 696, u'A': 689, u'B': 786, u'C': 787, u'D': 713, u'E': 791, u'F': 785, u'G': 791, u'H': 873, u'I': 761, u'J': 762, u'K': 759, u'L': 892, u'M': 892, u'N': 788, u'O': 784, u'Q': 438, u'R': 138, u'S': 277, u'T': 415, u'U': 509, u'V': 410, u'W': 234, u'X': 234, u'Y': 390, u'Z': 390, u'[': 276, u'\\': 276, u']': 317, u'^': 317, u'_': 334, u'`': 334, u'a': 392, u'b': 392, u'c': 668, u'd': 668, u'e': 732, u'f': 544, u'g': 544, u'h': 910, u'i': 911, u'j': 667, u'k': 760, u'l': 760, u'm': 626, u'n': 694, u'o': 595, u'p': 776, u'u': 690, u'v': 791, u'w': 790, u'x': 788, u'y': 788, u'z': 788, u'{': 788, u'|': 788, u'}': 788, u'~': 788, u'\x7f': 788, u'\x80': 788, u'\x81': 788, u'\x82': 788, u'\x83': 788, u'\x84': 788, u'\x85': 788, u'\x86': 788, u'\x87': 788, u'\x88': 788, u'\x89': 788, u'\x8a': 788, u'\x8b': 788, u'\x8c': 788, u'\x8d': 788, u'\x8e': 788, u'\x8f': 788, u'\x90': 788, u'\x91': 788, u'\x92': 788, u'\x93': 788, u'\x94': 788, u'\x95': 788, u'\x96': 788, u'\x97': 788, u'\x98': 788, u'\x99': 788, u'\x9a': 788, u'\x9b': 788, u'\x9c': 788, u'\x9d': 788, u'\x9e': 788, u'\x9f': 788, u'\xa0': 894, u'\xa1': 838, u'\xa2': 924, u'\xa3': 1016, u'\xa4': 458, u'\xa5': 924, u'\xa6': 918, u'\xa7': 927, u'\xa8': 928, u'\xa9': 928, u'\xaa': 834, u'\xab': 873, u'\xac': 828, u'\xad': 924, u'\xae': 917, u'\xaf': 930, u'\xb0': 931, u'\xb1': 463, u'\xb2': 883, u'\xb3': 836, u'\xb4': 867, u'\xb5': 696, u'\xb6': 874, u'\xb7': 760, u'\xb8': 946, u'\xb9': 865, u'\xba': 967, u'\xbb': 831, u'\xbc': 873, u'\xbd': 927, u'\xbe': 970, u'\xbf': 918, u'\xc0': 748, u'\xc1': 836, u'\xc2': 771, u'\xc3': 888, u'\xc4': 748, u'\xc5': 771, u'\xc6': 888, u'\xc7': 867, u'\xc8': 696, u'\xc9': 874, u'\xca': 974, u'\xcb': 762, u'\xcc': 759, u'\xcd': 509, u'\xce': 410}),
+ 'Courier': (
+ {'FontName': 'Courier', 'Descent': -194.0,
+ 'FontBBox': (-6.0, -249.0, 639.0, 803.0), 'FontWeight': 'Medium',
+ 'CapHeight': 572.0, 'FontFamily': 'Courier', 'Flags': 64,
+ 'XHeight': 434.0, 'ItalicAngle': 0.0, 'Ascent': 627.0},
+ {u' ': 600, u'!': 600, u'"': 600, u'#': 600, u'$': 600, u'%': 600,
+ u'&': 600, u"'": 600, u'(': 600, u')': 600,
+ u'*': 600, u'+': 600, u',': 600, u'-': 600, u'.': 600, u'/': 600,
+ u'0': 600, u'1': 600, u'2': 600, u'3': 600,
+ u'4': 600, u'5': 600, u'6': 600, u'7': 600, u'8': 600, u'9': 600,
+ u':': 600, u';': 600, u'<': 600, u'=': 600,
+ u'>': 600, u'?': 600, u'@': 600, u'A': 600, u'B': 600, u'C': 600,
+ u'D': 600, u'E': 600, u'F': 600, u'G': 600,
+ u'H': 600, u'I': 600, u'J': 600, u'K': 600, u'L': 600, u'M': 600,
+ u'N': 600, u'O': 600, u'P': 600, u'Q': 600,
+ u'R': 600, u'S': 600, u'T': 600, u'U': 600, u'V': 600, u'W': 600,
+ u'X': 600, u'Y': 600, u'Z': 600, u'[': 600,
+ u'\\': 600, u']': 600, u'^': 600, u'_': 600, u'`': 600, u'a': 600,
+ u'b': 600, u'c': 600, u'd': 600, u'e': 600,
+ u'f': 600, u'g': 600, u'h': 600, u'i': 600, u'j': 600, u'k': 600,
+ u'l': 600, u'm': 600, u'n': 600, u'o': 600,
+ u'p': 600, u'q': 600, u'r': 600, u's': 600, u't': 600, u'u': 600,
+ u'v': 600, u'w': 600, u'x': 600, u'y': 600,
+ u'z': 600, u'{': 600, u'|': 600, u'}': 600, u'~': 600, u'\xa1': 600,
+ u'\xa2': 600, u'\xa3': 600, u'\xa4': 600,
+ u'\xa5': 600, u'\xa6': 600, u'\xa7': 600, u'\xa8': 600, u'\xa9': 600,
+ u'\xaa': 600, u'\xab': 600, u'\xac': 600,
+ u'\xae': 600, u'\xaf': 600, u'\xb0': 600, u'\xb1': 600, u'\xb2': 600,
+ u'\xb3': 600, u'\xb4': 600, u'\xb5': 600,
+ u'\xb6': 600, u'\xb7': 600, u'\xb8': 600, u'\xb9': 600, u'\xba': 600,
+ u'\xbb': 600, u'\xbc': 600, u'\xbd': 600,
+ u'\xbe': 600, u'\xbf': 600, u'\xc0': 600, u'\xc1': 600, u'\xc2': 600,
+ u'\xc3': 600, u'\xc4': 600, u'\xc5': 600,
+ u'\xc6': 600, u'\xc7': 600, u'\xc8': 600, u'\xc9': 600, u'\xca': 600,
+ u'\xcb': 600, u'\xcc': 600, u'\xcd': 600,
+ u'\xce': 600, u'\xcf': 600, u'\xd0': 600, u'\xd1': 600, u'\xd2': 600,
+ u'\xd3': 600, u'\xd4': 600, u'\xd5': 600,
+ u'\xd6': 600, u'\xd7': 600, u'\xd8': 600, u'\xd9': 600, u'\xda': 600,
+ u'\xdb': 600, u'\xdc': 600, u'\xdd': 600,
+ u'\xde': 600, u'\xdf': 600, u'\xe0': 600, u'\xe1': 600, u'\xe2': 600,
+ u'\xe3': 600, u'\xe4': 600, u'\xe5': 600,
+ u'\xe6': 600, u'\xe7': 600, u'\xe8': 600, u'\xe9': 600, u'\xea': 600,
+ u'\xeb': 600, u'\xec': 600, u'\xed': 600,
+ u'\xee': 600, u'\xef': 600, u'\xf0': 600, u'\xf1': 600, u'\xf2': 600,
+ u'\xf3': 600, u'\xf4': 600, u'\xf5': 600,
+ u'\xf6': 600, u'\xf7': 600, u'\xf8': 600, u'\xf9': 600, u'\xfa': 600,
+ u'\xfb': 600, u'\xfc': 600, u'\xfd': 600,
+ u'\xfe': 600, u'\xff': 600, u'\u0100': 600, u'\u0101': 600,
+ u'\u0102': 600, u'\u0103': 600, u'\u0104': 600,
+ u'\u0105': 600, u'\u0106': 600, u'\u0107': 600, u'\u010c': 600,
+ u'\u010d': 600, u'\u010e': 600, u'\u010f': 600,
+ u'\u0110': 600, u'\u0111': 600, u'\u0112': 600, u'\u0113': 600,
+ u'\u0116': 600, u'\u0117': 600, u'\u0118': 600,
+ u'\u0119': 600, u'\u011a': 600, u'\u011b': 600, u'\u011e': 600,
+ u'\u011f': 600, u'\u0122': 600, u'\u0123': 600,
+ u'\u012a': 600, u'\u012b': 600, u'\u012e': 600, u'\u012f': 600,
+ u'\u0130': 600, u'\u0131': 600, u'\u0136': 600,
+ u'\u0137': 600, u'\u0139': 600, u'\u013a': 600, u'\u013b': 600,
+ u'\u013c': 600, u'\u013d': 600, u'\u013e': 600,
+ u'\u0141': 600, u'\u0142': 600, u'\u0143': 600, u'\u0144': 600,
+ u'\u0145': 600, u'\u0146': 600, u'\u0147': 600,
+ u'\u0148': 600, u'\u014c': 600, u'\u014d': 600, u'\u0150': 600,
+ u'\u0151': 600, u'\u0152': 600, u'\u0153': 600,
+ u'\u0154': 600, u'\u0155': 600, u'\u0156': 600, u'\u0157': 600,
+ u'\u0158': 600, u'\u0159': 600, u'\u015a': 600,
+ u'\u015b': 600, u'\u015e': 600, u'\u015f': 600, u'\u0160': 600,
+ u'\u0161': 600, u'\u0162': 600, u'\u0163': 600,
+ u'\u0164': 600, u'\u0165': 600, u'\u016a': 600, u'\u016b': 600,
+ u'\u016e': 600, u'\u016f': 600, u'\u0170': 600,
+ u'\u0171': 600, u'\u0172': 600, u'\u0173': 600, u'\u0178': 600,
+ u'\u0179': 600, u'\u017a': 600, u'\u017b': 600,
+ u'\u017c': 600, u'\u017d': 600, u'\u017e': 600, u'\u0192': 600,
+ u'\u0218': 600, u'\u0219': 600, u'\u02c6': 600,
+ u'\u02c7': 600, u'\u02d8': 600, u'\u02d9': 600, u'\u02da': 600,
+ u'\u02db': 600, u'\u02dc': 600, u'\u02dd': 600,
+ u'\u2013': 600, u'\u2014': 600, u'\u2018': 600, u'\u2019': 600,
+ u'\u201a': 600, u'\u201c': 600, u'\u201d': 600,
+ u'\u201e': 600, u'\u2020': 600, u'\u2021': 600, u'\u2022': 600,
+ u'\u2026': 600, u'\u2030': 600, u'\u2039': 600,
+ u'\u203a': 600, u'\u2044': 600, u'\u2122': 600, u'\u2202': 600,
+ u'\u2206': 600, u'\u2211': 600, u'\u2212': 600,
+ u'\u221a': 600, u'\u2260': 600, u'\u2264': 600, u'\u2265': 600,
+ u'\u25ca': 600, u'\uf6c3': 600, u'\ufb01': 600,
+ u'\ufb02': 600}),
+ 'Courier-Bold': (
+ {'FontName': 'Courier-Bold', 'Descent': -194.0,
+ 'FontBBox': (-88.0, -249.0, 697.0, 811.0), 'FontWeight': 'Bold',
+ 'CapHeight': 572.0, 'FontFamily': 'Courier', 'Flags': 64,
+ 'XHeight': 434.0, 'ItalicAngle': 0.0, 'Ascent': 627.0},
+ {u' ': 600, u'!': 600, u'"': 600, u'#': 600, u'$': 600, u'%': 600,
+ u'&': 600, u"'": 600, u'(': 600, u')': 600,
+ u'*': 600, u'+': 600, u',': 600, u'-': 600, u'.': 600, u'/': 600,
+ u'0': 600, u'1': 600, u'2': 600, u'3': 600,
+ u'4': 600, u'5': 600, u'6': 600, u'7': 600, u'8': 600, u'9': 600,
+ u':': 600, u';': 600, u'<': 600, u'=': 600,
+ u'>': 600, u'?': 600, u'@': 600, u'A': 600, u'B': 600, u'C': 600,
+ u'D': 600, u'E': 600, u'F': 600, u'G': 600,
+ u'H': 600, u'I': 600, u'J': 600, u'K': 600, u'L': 600, u'M': 600,
+ u'N': 600, u'O': 600, u'P': 600, u'Q': 600,
+ u'R': 600, u'S': 600, u'T': 600, u'U': 600, u'V': 600, u'W': 600,
+ u'X': 600, u'Y': 600, u'Z': 600, u'[': 600,
+ u'\\': 600, u']': 600, u'^': 600, u'_': 600, u'`': 600, u'a': 600,
+ u'b': 600, u'c': 600, u'd': 600, u'e': 600,
+ u'f': 600, u'g': 600, u'h': 600, u'i': 600, u'j': 600, u'k': 600,
+ u'l': 600, u'm': 600, u'n': 600, u'o': 600,
+ u'p': 600, u'q': 600, u'r': 600, u's': 600, u't': 600, u'u': 600,
+ u'v': 600, u'w': 600, u'x': 600, u'y': 600,
+ u'z': 600, u'{': 600, u'|': 600, u'}': 600, u'~': 600, u'\xa1': 600,
+ u'\xa2': 600, u'\xa3': 600, u'\xa4': 600,
+ u'\xa5': 600, u'\xa6': 600, u'\xa7': 600, u'\xa8': 600, u'\xa9': 600,
+ u'\xaa': 600, u'\xab': 600, u'\xac': 600,
+ u'\xae': 600, u'\xaf': 600, u'\xb0': 600, u'\xb1': 600, u'\xb2': 600,
+ u'\xb3': 600, u'\xb4': 600, u'\xb5': 600,
+ u'\xb6': 600, u'\xb7': 600, u'\xb8': 600, u'\xb9': 600, u'\xba': 600,
+ u'\xbb': 600, u'\xbc': 600, u'\xbd': 600,
+ u'\xbe': 600, u'\xbf': 600, u'\xc0': 600, u'\xc1': 600, u'\xc2': 600,
+ u'\xc3': 600, u'\xc4': 600, u'\xc5': 600,
+ u'\xc6': 600, u'\xc7': 600, u'\xc8': 600, u'\xc9': 600, u'\xca': 600,
+ u'\xcb': 600, u'\xcc': 600, u'\xcd': 600,
+ u'\xce': 600, u'\xcf': 600, u'\xd0': 600, u'\xd1': 600, u'\xd2': 600,
+ u'\xd3': 600, u'\xd4': 600, u'\xd5': 600,
+ u'\xd6': 600, u'\xd7': 600, u'\xd8': 600, u'\xd9': 600, u'\xda': 600,
+ u'\xdb': 600, u'\xdc': 600, u'\xdd': 600,
+ u'\xde': 600, u'\xdf': 600, u'\xe0': 600, u'\xe1': 600, u'\xe2': 600,
+ u'\xe3': 600, u'\xe4': 600, u'\xe5': 600,
+ u'\xe6': 600, u'\xe7': 600, u'\xe8': 600, u'\xe9': 600, u'\xea': 600,
+ u'\xeb': 600, u'\xec': 600, u'\xed': 600,
+ u'\xee': 600, u'\xef': 600, u'\xf0': 600, u'\xf1': 600, u'\xf2': 600,
+ u'\xf3': 600, u'\xf4': 600, u'\xf5': 600,
+ u'\xf6': 600, u'\xf7': 600, u'\xf8': 600, u'\xf9': 600, u'\xfa': 600,
+ u'\xfb': 600, u'\xfc': 600, u'\xfd': 600,
+ u'\xfe': 600, u'\xff': 600, u'\u0100': 600, u'\u0101': 600,
+ u'\u0102': 600, u'\u0103': 600, u'\u0104': 600,
+ u'\u0105': 600, u'\u0106': 600, u'\u0107': 600, u'\u010c': 600,
+ u'\u010d': 600, u'\u010e': 600, u'\u010f': 600,
+ u'\u0110': 600, u'\u0111': 600, u'\u0112': 600, u'\u0113': 600,
+ u'\u0116': 600, u'\u0117': 600, u'\u0118': 600,
+ u'\u0119': 600, u'\u011a': 600, u'\u011b': 600, u'\u011e': 600,
+ u'\u011f': 600, u'\u0122': 600, u'\u0123': 600,
+ u'\u012a': 600, u'\u012b': 600, u'\u012e': 600, u'\u012f': 600,
+ u'\u0130': 600, u'\u0131': 600, u'\u0136': 600,
+ u'\u0137': 600, u'\u0139': 600, u'\u013a': 600, u'\u013b': 600,
+ u'\u013c': 600, u'\u013d': 600, u'\u013e': 600,
+ u'\u0141': 600, u'\u0142': 600, u'\u0143': 600, u'\u0144': 600,
+ u'\u0145': 600, u'\u0146': 600, u'\u0147': 600,
+ u'\u0148': 600, u'\u014c': 600, u'\u014d': 600, u'\u0150': 600,
+ u'\u0151': 600, u'\u0152': 600, u'\u0153': 600,
+ u'\u0154': 600, u'\u0155': 600, u'\u0156': 600, u'\u0157': 600,
+ u'\u0158': 600, u'\u0159': 600, u'\u015a': 600,
+ u'\u015b': 600, u'\u015e': 600, u'\u015f': 600, u'\u0160': 600,
+ u'\u0161': 600, u'\u0162': 600, u'\u0163': 600,
+ u'\u0164': 600, u'\u0165': 600, u'\u016a': 600, u'\u016b': 600,
+ u'\u016e': 600, u'\u016f': 600, u'\u0170': 600,
+ u'\u0171': 600, u'\u0172': 600, u'\u0173': 600, u'\u0178': 600,
+ u'\u0179': 600, u'\u017a': 600, u'\u017b': 600,
+ u'\u017c': 600, u'\u017d': 600, u'\u017e': 600, u'\u0192': 600,
+ u'\u0218': 600, u'\u0219': 600, u'\u02c6': 600,
+ u'\u02c7': 600, u'\u02d8': 600, u'\u02d9': 600, u'\u02da': 600,
+ u'\u02db': 600, u'\u02dc': 600, u'\u02dd': 600,
+ u'\u2013': 600, u'\u2014': 600, u'\u2018': 600, u'\u2019': 600,
+ u'\u201a': 600, u'\u201c': 600, u'\u201d': 600,
+ u'\u201e': 600, u'\u2020': 600, u'\u2021': 600, u'\u2022': 600,
+ u'\u2026': 600, u'\u2030': 600, u'\u2039': 600,
+ u'\u203a': 600, u'\u2044': 600, u'\u2122': 600, u'\u2202': 600,
+ u'\u2206': 600, u'\u2211': 600, u'\u2212': 600,
+ u'\u221a': 600, u'\u2260': 600, u'\u2264': 600, u'\u2265': 600,
+ u'\u25ca': 600, u'\uf6c3': 600, u'\ufb01': 600,
+ u'\ufb02': 600}),
+ 'Courier-BoldOblique': (
+ {'FontName': 'Courier-BoldOblique', 'Descent': -194.0,
+ 'FontBBox': (-49.0, -249.0, 758.0, 811.0),
+ 'FontWeight': 'Bold', 'CapHeight': 572.0, 'FontFamily': 'Courier',
+ 'Flags': 64, 'XHeight': 434.0,
+ 'ItalicAngle': -11.0, 'Ascent': 627.0},
+ {u' ': 600, u'!': 600, u'"': 600, u'#': 600, u'$': 600, u'%': 600,
+ u'&': 600, u"'": 600, u'(': 600, u')': 600,
+ u'*': 600, u'+': 600, u',': 600, u'-': 600, u'.': 600, u'/': 600,
+ u'0': 600, u'1': 600, u'2': 600, u'3': 600,
+ u'4': 600, u'5': 600, u'6': 600, u'7': 600, u'8': 600, u'9': 600,
+ u':': 600, u';': 600, u'<': 600, u'=': 600,
+ u'>': 600, u'?': 600, u'@': 600, u'A': 600, u'B': 600, u'C': 600,
+ u'D': 600, u'E': 600, u'F': 600, u'G': 600,
+ u'H': 600, u'I': 600, u'J': 600, u'K': 600, u'L': 600, u'M': 600,
+ u'N': 600, u'O': 600, u'P': 600, u'Q': 600,
+ u'R': 600, u'S': 600, u'T': 600, u'U': 600, u'V': 600, u'W': 600,
+ u'X': 600, u'Y': 600, u'Z': 600, u'[': 600,
+ u'\\': 600, u']': 600, u'^': 600, u'_': 600, u'`': 600, u'a': 600,
+ u'b': 600, u'c': 600, u'd': 600, u'e': 600,
+ u'f': 600, u'g': 600, u'h': 600, u'i': 600, u'j': 600, u'k': 600,
+ u'l': 600, u'm': 600, u'n': 600, u'o': 600,
+ u'p': 600, u'q': 600, u'r': 600, u's': 600, u't': 600, u'u': 600,
+ u'v': 600, u'w': 600, u'x': 600, u'y': 600,
+ u'z': 600, u'{': 600, u'|': 600, u'}': 600, u'~': 600, u'\xa1': 600,
+ u'\xa2': 600, u'\xa3': 600, u'\xa4': 600,
+ u'\xa5': 600, u'\xa6': 600, u'\xa7': 600, u'\xa8': 600, u'\xa9': 600,
+ u'\xaa': 600, u'\xab': 600, u'\xac': 600,
+ u'\xae': 600, u'\xaf': 600, u'\xb0': 600, u'\xb1': 600, u'\xb2': 600,
+ u'\xb3': 600, u'\xb4': 600, u'\xb5': 600,
+ u'\xb6': 600, u'\xb7': 600, u'\xb8': 600, u'\xb9': 600, u'\xba': 600,
+ u'\xbb': 600, u'\xbc': 600, u'\xbd': 600,
+ u'\xbe': 600, u'\xbf': 600, u'\xc0': 600, u'\xc1': 600, u'\xc2': 600,
+ u'\xc3': 600, u'\xc4': 600, u'\xc5': 600,
+ u'\xc6': 600, u'\xc7': 600, u'\xc8': 600, u'\xc9': 600, u'\xca': 600,
+ u'\xcb': 600, u'\xcc': 600, u'\xcd': 600,
+ u'\xce': 600, u'\xcf': 600, u'\xd0': 600, u'\xd1': 600, u'\xd2': 600,
+ u'\xd3': 600, u'\xd4': 600, u'\xd5': 600,
+ u'\xd6': 600, u'\xd7': 600, u'\xd8': 600, u'\xd9': 600, u'\xda': 600,
+ u'\xdb': 600, u'\xdc': 600, u'\xdd': 600,
+ u'\xde': 600, u'\xdf': 600, u'\xe0': 600, u'\xe1': 600, u'\xe2': 600,
+ u'\xe3': 600, u'\xe4': 600, u'\xe5': 600,
+ u'\xe6': 600, u'\xe7': 600, u'\xe8': 600, u'\xe9': 600, u'\xea': 600,
+ u'\xeb': 600, u'\xec': 600, u'\xed': 600,
+ u'\xee': 600, u'\xef': 600, u'\xf0': 600, u'\xf1': 600, u'\xf2': 600,
+ u'\xf3': 600, u'\xf4': 600, u'\xf5': 600,
+ u'\xf6': 600, u'\xf7': 600, u'\xf8': 600, u'\xf9': 600, u'\xfa': 600,
+ u'\xfb': 600, u'\xfc': 600, u'\xfd': 600,
+ u'\xfe': 600, u'\xff': 600, u'\u0100': 600, u'\u0101': 600,
+ u'\u0102': 600, u'\u0103': 600, u'\u0104': 600,
+ u'\u0105': 600, u'\u0106': 600, u'\u0107': 600, u'\u010c': 600,
+ u'\u010d': 600, u'\u010e': 600, u'\u010f': 600,
+ u'\u0110': 600, u'\u0111': 600, u'\u0112': 600, u'\u0113': 600,
+ u'\u0116': 600, u'\u0117': 600, u'\u0118': 600,
+ u'\u0119': 600, u'\u011a': 600, u'\u011b': 600, u'\u011e': 600,
+ u'\u011f': 600, u'\u0122': 600, u'\u0123': 600,
+ u'\u012a': 600, u'\u012b': 600, u'\u012e': 600, u'\u012f': 600,
+ u'\u0130': 600, u'\u0131': 600, u'\u0136': 600,
+ u'\u0137': 600, u'\u0139': 600, u'\u013a': 600, u'\u013b': 600,
+ u'\u013c': 600, u'\u013d': 600, u'\u013e': 600,
+ u'\u0141': 600, u'\u0142': 600, u'\u0143': 600, u'\u0144': 600,
+ u'\u0145': 600, u'\u0146': 600, u'\u0147': 600,
+ u'\u0148': 600, u'\u014c': 600, u'\u014d': 600, u'\u0150': 600,
+ u'\u0151': 600, u'\u0152': 600, u'\u0153': 600,
+ u'\u0154': 600, u'\u0155': 600, u'\u0156': 600, u'\u0157': 600,
+ u'\u0158': 600, u'\u0159': 600, u'\u015a': 600,
+ u'\u015b': 600, u'\u015e': 600, u'\u015f': 600, u'\u0160': 600,
+ u'\u0161': 600, u'\u0162': 600, u'\u0163': 600,
+ u'\u0164': 600, u'\u0165': 600, u'\u016a': 600, u'\u016b': 600,
+ u'\u016e': 600, u'\u016f': 600, u'\u0170': 600,
+ u'\u0171': 600, u'\u0172': 600, u'\u0173': 600, u'\u0178': 600,
+ u'\u0179': 600, u'\u017a': 600, u'\u017b': 600,
+ u'\u017c': 600, u'\u017d': 600, u'\u017e': 600, u'\u0192': 600,
+ u'\u0218': 600, u'\u0219': 600, u'\u02c6': 600,
+ u'\u02c7': 600, u'\u02d8': 600, u'\u02d9': 600, u'\u02da': 600,
+ u'\u02db': 600, u'\u02dc': 600, u'\u02dd': 600,
+ u'\u2013': 600, u'\u2014': 600, u'\u2018': 600, u'\u2019': 600,
+ u'\u201a': 600, u'\u201c': 600, u'\u201d': 600,
+ u'\u201e': 600, u'\u2020': 600, u'\u2021': 600, u'\u2022': 600,
+ u'\u2026': 600, u'\u2030': 600, u'\u2039': 600,
+ u'\u203a': 600, u'\u2044': 600, u'\u2122': 600, u'\u2202': 600,
+ u'\u2206': 600, u'\u2211': 600, u'\u2212': 600,
+ u'\u221a': 600, u'\u2260': 600, u'\u2264': 600, u'\u2265': 600,
+ u'\u25ca': 600, u'\uf6c3': 600, u'\ufb01': 600,
+ u'\ufb02': 600}),
+ 'Courier-Oblique': ({'FontName': 'Courier-Oblique', 'Descent': -194.0,
+ 'FontBBox': (-49.0, -249.0, 749.0, 803.0),
+ 'FontWeight': 'Medium', 'CapHeight': 572.0,
+ 'FontFamily': 'Courier', 'Flags': 64,
+ 'XHeight': 434.0, 'ItalicAngle': -11.0,
+ 'Ascent': 627.0},
+ {u' ': 600, u'!': 600, u'"': 600, u'#': 600, u'$': 600,
+ u'%': 600, u'&': 600, u"'": 600,
+ u'(': 600, u')': 600, u'*': 600, u'+': 600, u',': 600,
+ u'-': 600, u'.': 600, u'/': 600,
+ u'0': 600, u'1': 600, u'2': 600, u'3': 600, u'4': 600,
+ u'5': 600, u'6': 600, u'7': 600,
+ u'8': 600, u'9': 600, u':': 600, u';': 600, u'<': 600,
+ u'=': 600, u'>': 600, u'?': 600,
+ u'@': 600, u'A': 600, u'B': 600, u'C': 600, u'D': 600,
+ u'E': 600, u'F': 600, u'G': 600,
+ u'H': 600, u'I': 600, u'J': 600, u'K': 600, u'L': 600,
+ u'M': 600, u'N': 600, u'O': 600,
+ u'P': 600, u'Q': 600, u'R': 600, u'S': 600, u'T': 600,
+ u'U': 600, u'V': 600, u'W': 600,
+ u'X': 600, u'Y': 600, u'Z': 600, u'[': 600,
+ u'\\': 600, u']': 600, u'^': 600, u'_': 600,
+ u'`': 600, u'a': 600, u'b': 600, u'c': 600, u'd': 600,
+ u'e': 600, u'f': 600, u'g': 600,
+ u'h': 600, u'i': 600, u'j': 600, u'k': 600, u'l': 600,
+ u'm': 600, u'n': 600, u'o': 600,
+ u'p': 600, u'q': 600, u'r': 600, u's': 600, u't': 600,
+ u'u': 600, u'v': 600, u'w': 600,
+ u'x': 600, u'y': 600, u'z': 600, u'{': 600, u'|': 600,
+ u'}': 600, u'~': 600, u'\xa1': 600,
+ u'\xa2': 600, u'\xa3': 600, u'\xa4': 600,
+ u'\xa5': 600, u'\xa6': 600, u'\xa7': 600,
+ u'\xa8': 600, u'\xa9': 600, u'\xaa': 600,
+ u'\xab': 600, u'\xac': 600, u'\xae': 600,
+ u'\xaf': 600, u'\xb0': 600, u'\xb1': 600,
+ u'\xb2': 600, u'\xb3': 600, u'\xb4': 600,
+ u'\xb5': 600, u'\xb6': 600, u'\xb7': 600,
+ u'\xb8': 600, u'\xb9': 600, u'\xba': 600,
+ u'\xbb': 600, u'\xbc': 600, u'\xbd': 600,
+ u'\xbe': 600, u'\xbf': 600, u'\xc0': 600,
+ u'\xc1': 600, u'\xc2': 600, u'\xc3': 600,
+ u'\xc4': 600, u'\xc5': 600, u'\xc6': 600,
+ u'\xc7': 600, u'\xc8': 600, u'\xc9': 600,
+ u'\xca': 600, u'\xcb': 600, u'\xcc': 600,
+ u'\xcd': 600, u'\xce': 600, u'\xcf': 600,
+ u'\xd0': 600, u'\xd1': 600, u'\xd2': 600,
+ u'\xd3': 600, u'\xd4': 600, u'\xd5': 600,
+ u'\xd6': 600, u'\xd7': 600, u'\xd8': 600,
+ u'\xd9': 600, u'\xda': 600, u'\xdb': 600,
+ u'\xdc': 600, u'\xdd': 600, u'\xde': 600,
+ u'\xdf': 600, u'\xe0': 600, u'\xe1': 600,
+ u'\xe2': 600, u'\xe3': 600, u'\xe4': 600,
+ u'\xe5': 600, u'\xe6': 600, u'\xe7': 600,
+ u'\xe8': 600, u'\xe9': 600, u'\xea': 600,
+ u'\xeb': 600, u'\xec': 600, u'\xed': 600,
+ u'\xee': 600, u'\xef': 600, u'\xf0': 600,
+ u'\xf1': 600, u'\xf2': 600, u'\xf3': 600,
+ u'\xf4': 600, u'\xf5': 600, u'\xf6': 600,
+ u'\xf7': 600, u'\xf8': 600, u'\xf9': 600,
+ u'\xfa': 600, u'\xfb': 600, u'\xfc': 600,
+ u'\xfd': 600, u'\xfe': 600, u'\xff': 600,
+ u'\u0100': 600, u'\u0101': 600, u'\u0102': 600,
+ u'\u0103': 600, u'\u0104': 600, u'\u0105': 600,
+ u'\u0106': 600, u'\u0107': 600, u'\u010c': 600,
+ u'\u010d': 600, u'\u010e': 600, u'\u010f': 600,
+ u'\u0110': 600, u'\u0111': 600, u'\u0112': 600,
+ u'\u0113': 600, u'\u0116': 600, u'\u0117': 600,
+ u'\u0118': 600, u'\u0119': 600, u'\u011a': 600,
+ u'\u011b': 600, u'\u011e': 600, u'\u011f': 600,
+ u'\u0122': 600, u'\u0123': 600, u'\u012a': 600,
+ u'\u012b': 600, u'\u012e': 600, u'\u012f': 600,
+ u'\u0130': 600, u'\u0131': 600, u'\u0136': 600,
+ u'\u0137': 600, u'\u0139': 600, u'\u013a': 600,
+ u'\u013b': 600, u'\u013c': 600, u'\u013d': 600,
+ u'\u013e': 600, u'\u0141': 600, u'\u0142': 600,
+ u'\u0143': 600, u'\u0144': 600, u'\u0145': 600,
+ u'\u0146': 600, u'\u0147': 600, u'\u0148': 600,
+ u'\u014c': 600, u'\u014d': 600, u'\u0150': 600,
+ u'\u0151': 600, u'\u0152': 600, u'\u0153': 600,
+ u'\u0154': 600, u'\u0155': 600, u'\u0156': 600,
+ u'\u0157': 600, u'\u0158': 600, u'\u0159': 600,
+ u'\u015a': 600, u'\u015b': 600, u'\u015e': 600,
+ u'\u015f': 600, u'\u0160': 600, u'\u0161': 600,
+ u'\u0162': 600, u'\u0163': 600, u'\u0164': 600,
+ u'\u0165': 600, u'\u016a': 600, u'\u016b': 600,
+ u'\u016e': 600, u'\u016f': 600, u'\u0170': 600,
+ u'\u0171': 600, u'\u0172': 600, u'\u0173': 600,
+ u'\u0178': 600, u'\u0179': 600, u'\u017a': 600,
+ u'\u017b': 600, u'\u017c': 600, u'\u017d': 600,
+ u'\u017e': 600, u'\u0192': 600, u'\u0218': 600,
+ u'\u0219': 600, u'\u02c6': 600, u'\u02c7': 600,
+ u'\u02d8': 600, u'\u02d9': 600, u'\u02da': 600,
+ u'\u02db': 600, u'\u02dc': 600, u'\u02dd': 600,
+ u'\u2013': 600, u'\u2014': 600, u'\u2018': 600,
+ u'\u2019': 600, u'\u201a': 600, u'\u201c': 600,
+ u'\u201d': 600, u'\u201e': 600, u'\u2020': 600,
+ u'\u2021': 600, u'\u2022': 600, u'\u2026': 600,
+ u'\u2030': 600, u'\u2039': 600, u'\u203a': 600,
+ u'\u2044': 600, u'\u2122': 600, u'\u2202': 600,
+ u'\u2206': 600, u'\u2211': 600, u'\u2212': 600,
+ u'\u221a': 600, u'\u2260': 600, u'\u2264': 600,
+ u'\u2265': 600, u'\u25ca': 600, u'\uf6c3': 600,
+ u'\ufb01': 600, u'\ufb02': 600}),
+ 'Helvetica': (
+ {'FontName': 'Helvetica', 'Descent': -207.0,
+ 'FontBBox': (-166.0, -225.0, 1000.0, 931.0), 'FontWeight': 'Medium',
+ 'CapHeight': 718.0, 'FontFamily': 'Helvetica', 'Flags': 0,
+ 'XHeight': 523.0, 'ItalicAngle': 0.0, 'Ascent': 718.0},
+ {u' ': 278, u'!': 278, u'"': 355, u'#': 556, u'$': 556, u'%': 889,
+ u'&': 667, u"'": 191, u'(': 333, u')': 333,
+ u'*': 389, u'+': 584, u',': 278, u'-': 333, u'.': 278, u'/': 278,
+ u'0': 556, u'1': 556, u'2': 556, u'3': 556,
+ u'4': 556, u'5': 556, u'6': 556, u'7': 556, u'8': 556, u'9': 556,
+ u':': 278, u';': 278, u'<': 584, u'=': 584,
+ u'>': 584, u'?': 556, u'@': 1015, u'A': 667, u'B': 667, u'C': 722,
+ u'D': 722, u'E': 667, u'F': 611, u'G': 778,
+ u'H': 722, u'I': 278, u'J': 500, u'K': 667, u'L': 556, u'M': 833,
+ u'N': 722, u'O': 778, u'P': 667, u'Q': 778,
+ u'R': 722, u'S': 667, u'T': 611, u'U': 722, u'V': 667, u'W': 944,
+ u'X': 667, u'Y': 667, u'Z': 611, u'[': 278,
+ u'\\': 278, u']': 278, u'^': 469, u'_': 556, u'`': 333, u'a': 556,
+ u'b': 556, u'c': 500, u'd': 556, u'e': 556,
+ u'f': 278, u'g': 556, u'h': 556, u'i': 222, u'j': 222, u'k': 500,
+ u'l': 222, u'm': 833, u'n': 556, u'o': 556,
+ u'p': 556, u'q': 556, u'r': 333, u's': 500, u't': 278, u'u': 556,
+ u'v': 500, u'w': 722, u'x': 500, u'y': 500,
+ u'z': 500, u'{': 334, u'|': 260, u'}': 334, u'~': 584, u'\xa1': 333,
+ u'\xa2': 556, u'\xa3': 556, u'\xa4': 556,
+ u'\xa5': 556, u'\xa6': 260, u'\xa7': 556, u'\xa8': 333, u'\xa9': 737,
+ u'\xaa': 370, u'\xab': 556, u'\xac': 584,
+ u'\xae': 737, u'\xaf': 333, u'\xb0': 400, u'\xb1': 584, u'\xb2': 333,
+ u'\xb3': 333, u'\xb4': 333, u'\xb5': 556,
+ u'\xb6': 537, u'\xb7': 278, u'\xb8': 333, u'\xb9': 333, u'\xba': 365,
+ u'\xbb': 556, u'\xbc': 834, u'\xbd': 834,
+ u'\xbe': 834, u'\xbf': 611, u'\xc0': 667, u'\xc1': 667, u'\xc2': 667,
+ u'\xc3': 667, u'\xc4': 667, u'\xc5': 667,
+ u'\xc6': 1000, u'\xc7': 722, u'\xc8': 667, u'\xc9': 667, u'\xca': 667,
+ u'\xcb': 667, u'\xcc': 278, u'\xcd': 278,
+ u'\xce': 278, u'\xcf': 278, u'\xd0': 722, u'\xd1': 722, u'\xd2': 778,
+ u'\xd3': 778, u'\xd4': 778, u'\xd5': 778,
+ u'\xd6': 778, u'\xd7': 584, u'\xd8': 778, u'\xd9': 722, u'\xda': 722,
+ u'\xdb': 722, u'\xdc': 722, u'\xdd': 667,
+ u'\xde': 667, u'\xdf': 611, u'\xe0': 556, u'\xe1': 556, u'\xe2': 556,
+ u'\xe3': 556, u'\xe4': 556, u'\xe5': 556,
+ u'\xe6': 889, u'\xe7': 500, u'\xe8': 556, u'\xe9': 556, u'\xea': 556,
+ u'\xeb': 556, u'\xec': 278, u'\xed': 278,
+ u'\xee': 278, u'\xef': 278, u'\xf0': 556, u'\xf1': 556, u'\xf2': 556,
+ u'\xf3': 556, u'\xf4': 556, u'\xf5': 556,
+ u'\xf6': 556, u'\xf7': 584, u'\xf8': 611, u'\xf9': 556, u'\xfa': 556,
+ u'\xfb': 556, u'\xfc': 556, u'\xfd': 500,
+ u'\xfe': 556, u'\xff': 500, u'\u0100': 667, u'\u0101': 556,
+ u'\u0102': 667, u'\u0103': 556, u'\u0104': 667,
+ u'\u0105': 556, u'\u0106': 722, u'\u0107': 500, u'\u010c': 722,
+ u'\u010d': 500, u'\u010e': 722, u'\u010f': 643,
+ u'\u0110': 722, u'\u0111': 556, u'\u0112': 667, u'\u0113': 556,
+ u'\u0116': 667, u'\u0117': 556, u'\u0118': 667,
+ u'\u0119': 556, u'\u011a': 667, u'\u011b': 556, u'\u011e': 778,
+ u'\u011f': 556, u'\u0122': 778, u'\u0123': 556,
+ u'\u012a': 278, u'\u012b': 278, u'\u012e': 278, u'\u012f': 222,
+ u'\u0130': 278, u'\u0131': 278, u'\u0136': 667,
+ u'\u0137': 500, u'\u0139': 556, u'\u013a': 222, u'\u013b': 556,
+ u'\u013c': 222, u'\u013d': 556, u'\u013e': 299,
+ u'\u0141': 556, u'\u0142': 222, u'\u0143': 722, u'\u0144': 556,
+ u'\u0145': 722, u'\u0146': 556, u'\u0147': 722,
+ u'\u0148': 556, u'\u014c': 778, u'\u014d': 556, u'\u0150': 778,
+ u'\u0151': 556, u'\u0152': 1000, u'\u0153': 944,
+ u'\u0154': 722, u'\u0155': 333, u'\u0156': 722, u'\u0157': 333,
+ u'\u0158': 722, u'\u0159': 333, u'\u015a': 667,
+ u'\u015b': 500, u'\u015e': 667, u'\u015f': 500, u'\u0160': 667,
+ u'\u0161': 500, u'\u0162': 611, u'\u0163': 278,
+ u'\u0164': 611, u'\u0165': 317, u'\u016a': 722, u'\u016b': 556,
+ u'\u016e': 722, u'\u016f': 556, u'\u0170': 722,
+ u'\u0171': 556, u'\u0172': 722, u'\u0173': 556, u'\u0178': 667,
+ u'\u0179': 611, u'\u017a': 500, u'\u017b': 611,
+ u'\u017c': 500, u'\u017d': 611, u'\u017e': 500, u'\u0192': 556,
+ u'\u0218': 667, u'\u0219': 500, u'\u02c6': 333,
+ u'\u02c7': 333, u'\u02d8': 333, u'\u02d9': 333, u'\u02da': 333,
+ u'\u02db': 333, u'\u02dc': 333, u'\u02dd': 333,
+ u'\u2013': 556, u'\u2014': 1000, u'\u2018': 222, u'\u2019': 222,
+ u'\u201a': 222, u'\u201c': 333, u'\u201d': 333,
+ u'\u201e': 333, u'\u2020': 556, u'\u2021': 556, u'\u2022': 350,
+ u'\u2026': 1000, u'\u2030': 1000, u'\u2039': 333,
+ u'\u203a': 333, u'\u2044': 167, u'\u2122': 1000, u'\u2202': 476,
+ u'\u2206': 612, u'\u2211': 600, u'\u2212': 584,
+ u'\u221a': 453, u'\u2260': 549, u'\u2264': 549, u'\u2265': 549,
+ u'\u25ca': 471, u'\uf6c3': 250, u'\ufb01': 500,
+ u'\ufb02': 500}),
+ 'Helvetica-Bold': (
+ {'FontName': 'Helvetica-Bold', 'Descent': -207.0,
+ 'FontBBox': (-170.0, -228.0, 1003.0, 962.0), 'FontWeight': 'Bold',
+ 'CapHeight': 718.0, 'FontFamily': 'Helvetica', 'Flags': 0,
+ 'XHeight': 532.0, 'ItalicAngle': 0.0, 'Ascent': 718.0},
+ {u' ': 278, u'!': 333, u'"': 474, u'#': 556, u'$': 556, u'%': 889,
+ u'&': 722, u"'": 238, u'(': 333, u')': 333,
+ u'*': 389, u'+': 584, u',': 278, u'-': 333, u'.': 278, u'/': 278,
+ u'0': 556, u'1': 556, u'2': 556, u'3': 556,
+ u'4': 556, u'5': 556, u'6': 556, u'7': 556, u'8': 556, u'9': 556,
+ u':': 333, u';': 333, u'<': 584, u'=': 584,
+ u'>': 584, u'?': 611, u'@': 975, u'A': 722, u'B': 722, u'C': 722,
+ u'D': 722, u'E': 667, u'F': 611, u'G': 778,
+ u'H': 722, u'I': 278, u'J': 556, u'K': 722, u'L': 611, u'M': 833,
+ u'N': 722, u'O': 778, u'P': 667, u'Q': 778,
+ u'R': 722, u'S': 667, u'T': 611, u'U': 722, u'V': 667, u'W': 944,
+ u'X': 667, u'Y': 667, u'Z': 611, u'[': 333,
+ u'\\': 278, u']': 333, u'^': 584, u'_': 556, u'`': 333, u'a': 556,
+ u'b': 611, u'c': 556, u'd': 611, u'e': 556,
+ u'f': 333, u'g': 611, u'h': 611, u'i': 278, u'j': 278, u'k': 556,
+ u'l': 278, u'm': 889, u'n': 611, u'o': 611,
+ u'p': 611, u'q': 611, u'r': 389, u's': 556, u't': 333, u'u': 611,
+ u'v': 556, u'w': 778, u'x': 556, u'y': 556,
+ u'z': 500, u'{': 389, u'|': 280, u'}': 389, u'~': 584, u'\xa1': 333,
+ u'\xa2': 556, u'\xa3': 556, u'\xa4': 556,
+ u'\xa5': 556, u'\xa6': 280, u'\xa7': 556, u'\xa8': 333, u'\xa9': 737,
+ u'\xaa': 370, u'\xab': 556, u'\xac': 584,
+ u'\xae': 737, u'\xaf': 333, u'\xb0': 400, u'\xb1': 584, u'\xb2': 333,
+ u'\xb3': 333, u'\xb4': 333, u'\xb5': 611,
+ u'\xb6': 556, u'\xb7': 278, u'\xb8': 333, u'\xb9': 333, u'\xba': 365,
+ u'\xbb': 556, u'\xbc': 834, u'\xbd': 834,
+ u'\xbe': 834, u'\xbf': 611, u'\xc0': 722, u'\xc1': 722, u'\xc2': 722,
+ u'\xc3': 722, u'\xc4': 722, u'\xc5': 722,
+ u'\xc6': 1000, u'\xc7': 722, u'\xc8': 667, u'\xc9': 667, u'\xca': 667,
+ u'\xcb': 667, u'\xcc': 278, u'\xcd': 278,
+ u'\xce': 278, u'\xcf': 278, u'\xd0': 722, u'\xd1': 722, u'\xd2': 778,
+ u'\xd3': 778, u'\xd4': 778, u'\xd5': 778,
+ u'\xd6': 778, u'\xd7': 584, u'\xd8': 778, u'\xd9': 722, u'\xda': 722,
+ u'\xdb': 722, u'\xdc': 722, u'\xdd': 667,
+ u'\xde': 667, u'\xdf': 611, u'\xe0': 556, u'\xe1': 556, u'\xe2': 556,
+ u'\xe3': 556, u'\xe4': 556, u'\xe5': 556,
+ u'\xe6': 889, u'\xe7': 556, u'\xe8': 556, u'\xe9': 556, u'\xea': 556,
+ u'\xeb': 556, u'\xec': 278, u'\xed': 278,
+ u'\xee': 278, u'\xef': 278, u'\xf0': 611, u'\xf1': 611, u'\xf2': 611,
+ u'\xf3': 611, u'\xf4': 611, u'\xf5': 611,
+ u'\xf6': 611, u'\xf7': 584, u'\xf8': 611, u'\xf9': 611, u'\xfa': 611,
+ u'\xfb': 611, u'\xfc': 611, u'\xfd': 556,
+ u'\xfe': 611, u'\xff': 556, u'\u0100': 722, u'\u0101': 556,
+ u'\u0102': 722, u'\u0103': 556, u'\u0104': 722,
+ u'\u0105': 556, u'\u0106': 722, u'\u0107': 556, u'\u010c': 722,
+ u'\u010d': 556, u'\u010e': 722, u'\u010f': 743,
+ u'\u0110': 722, u'\u0111': 611, u'\u0112': 667, u'\u0113': 556,
+ u'\u0116': 667, u'\u0117': 556, u'\u0118': 667,
+ u'\u0119': 556, u'\u011a': 667, u'\u011b': 556, u'\u011e': 778,
+ u'\u011f': 611, u'\u0122': 778, u'\u0123': 611,
+ u'\u012a': 278, u'\u012b': 278, u'\u012e': 278, u'\u012f': 278,
+ u'\u0130': 278, u'\u0131': 278, u'\u0136': 722,
+ u'\u0137': 556, u'\u0139': 611, u'\u013a': 278, u'\u013b': 611,
+ u'\u013c': 278, u'\u013d': 611, u'\u013e': 400,
+ u'\u0141': 611, u'\u0142': 278, u'\u0143': 722, u'\u0144': 611,
+ u'\u0145': 722, u'\u0146': 611, u'\u0147': 722,
+ u'\u0148': 611, u'\u014c': 778, u'\u014d': 611, u'\u0150': 778,
+ u'\u0151': 611, u'\u0152': 1000, u'\u0153': 944,
+ u'\u0154': 722, u'\u0155': 389, u'\u0156': 722, u'\u0157': 389,
+ u'\u0158': 722, u'\u0159': 389, u'\u015a': 667,
+ u'\u015b': 556, u'\u015e': 667, u'\u015f': 556, u'\u0160': 667,
+ u'\u0161': 556, u'\u0162': 611, u'\u0163': 333,
+ u'\u0164': 611, u'\u0165': 389, u'\u016a': 722, u'\u016b': 611,
+ u'\u016e': 722, u'\u016f': 611, u'\u0170': 722,
+ u'\u0171': 611, u'\u0172': 722, u'\u0173': 611, u'\u0178': 667,
+ u'\u0179': 611, u'\u017a': 500, u'\u017b': 611,
+ u'\u017c': 500, u'\u017d': 611, u'\u017e': 500, u'\u0192': 556,
+ u'\u0218': 667, u'\u0219': 556, u'\u02c6': 333,
+ u'\u02c7': 333, u'\u02d8': 333, u'\u02d9': 333, u'\u02da': 333,
+ u'\u02db': 333, u'\u02dc': 333, u'\u02dd': 333,
+ u'\u2013': 556, u'\u2014': 1000, u'\u2018': 278, u'\u2019': 278,
+ u'\u201a': 278, u'\u201c': 500, u'\u201d': 500,
+ u'\u201e': 500, u'\u2020': 556, u'\u2021': 556, u'\u2022': 350,
+ u'\u2026': 1000, u'\u2030': 1000, u'\u2039': 333,
+ u'\u203a': 333, u'\u2044': 167, u'\u2122': 1000, u'\u2202': 494,
+ u'\u2206': 612, u'\u2211': 600, u'\u2212': 584,
+ u'\u221a': 549, u'\u2260': 549, u'\u2264': 549, u'\u2265': 549,
+ u'\u25ca': 494, u'\uf6c3': 250, u'\ufb01': 611,
+ u'\ufb02': 611}),
+ 'Helvetica-BoldOblique': (
+ {'FontName': 'Helvetica-BoldOblique', 'Descent': -207.0,
+ 'FontBBox': (-175.0, -228.0, 1114.0, 962.0),
+ 'FontWeight': 'Bold', 'CapHeight': 718.0, 'FontFamily': 'Helvetica',
+ 'Flags': 0, 'XHeight': 532.0,
+ 'ItalicAngle': -12.0, 'Ascent': 718.0},
+ {u' ': 278, u'!': 333, u'"': 474, u'#': 556, u'$': 556, u'%': 889,
+ u'&': 722, u"'": 238, u'(': 333, u')': 333,
+ u'*': 389, u'+': 584, u',': 278, u'-': 333, u'.': 278, u'/': 278,
+ u'0': 556, u'1': 556, u'2': 556, u'3': 556,
+ u'4': 556, u'5': 556, u'6': 556, u'7': 556, u'8': 556, u'9': 556,
+ u':': 333, u';': 333, u'<': 584, u'=': 584,
+ u'>': 584, u'?': 611, u'@': 975, u'A': 722, u'B': 722, u'C': 722,
+ u'D': 722, u'E': 667, u'F': 611, u'G': 778,
+ u'H': 722, u'I': 278, u'J': 556, u'K': 722, u'L': 611, u'M': 833,
+ u'N': 722, u'O': 778, u'P': 667, u'Q': 778,
+ u'R': 722, u'S': 667, u'T': 611, u'U': 722, u'V': 667, u'W': 944,
+ u'X': 667, u'Y': 667, u'Z': 611, u'[': 333,
+ u'\\': 278, u']': 333, u'^': 584, u'_': 556, u'`': 333, u'a': 556,
+ u'b': 611, u'c': 556, u'd': 611, u'e': 556,
+ u'f': 333, u'g': 611, u'h': 611, u'i': 278, u'j': 278, u'k': 556,
+ u'l': 278, u'm': 889, u'n': 611, u'o': 611,
+ u'p': 611, u'q': 611, u'r': 389, u's': 556, u't': 333, u'u': 611,
+ u'v': 556, u'w': 778, u'x': 556, u'y': 556,
+ u'z': 500, u'{': 389, u'|': 280, u'}': 389, u'~': 584, u'\xa1': 333,
+ u'\xa2': 556, u'\xa3': 556, u'\xa4': 556,
+ u'\xa5': 556, u'\xa6': 280, u'\xa7': 556, u'\xa8': 333, u'\xa9': 737,
+ u'\xaa': 370, u'\xab': 556, u'\xac': 584,
+ u'\xae': 737, u'\xaf': 333, u'\xb0': 400, u'\xb1': 584, u'\xb2': 333,
+ u'\xb3': 333, u'\xb4': 333, u'\xb5': 611,
+ u'\xb6': 556, u'\xb7': 278, u'\xb8': 333, u'\xb9': 333, u'\xba': 365,
+ u'\xbb': 556, u'\xbc': 834, u'\xbd': 834,
+ u'\xbe': 834, u'\xbf': 611, u'\xc0': 722, u'\xc1': 722, u'\xc2': 722,
+ u'\xc3': 722, u'\xc4': 722, u'\xc5': 722,
+ u'\xc6': 1000, u'\xc7': 722, u'\xc8': 667, u'\xc9': 667, u'\xca': 667,
+ u'\xcb': 667, u'\xcc': 278, u'\xcd': 278,
+ u'\xce': 278, u'\xcf': 278, u'\xd0': 722, u'\xd1': 722, u'\xd2': 778,
+ u'\xd3': 778, u'\xd4': 778, u'\xd5': 778,
+ u'\xd6': 778, u'\xd7': 584, u'\xd8': 778, u'\xd9': 722, u'\xda': 722,
+ u'\xdb': 722, u'\xdc': 722, u'\xdd': 667,
+ u'\xde': 667, u'\xdf': 611, u'\xe0': 556, u'\xe1': 556, u'\xe2': 556,
+ u'\xe3': 556, u'\xe4': 556, u'\xe5': 556,
+ u'\xe6': 889, u'\xe7': 556, u'\xe8': 556, u'\xe9': 556, u'\xea': 556,
+ u'\xeb': 556, u'\xec': 278, u'\xed': 278,
+ u'\xee': 278, u'\xef': 278, u'\xf0': 611, u'\xf1': 611, u'\xf2': 611,
+ u'\xf3': 611, u'\xf4': 611, u'\xf5': 611,
+ u'\xf6': 611, u'\xf7': 584, u'\xf8': 611, u'\xf9': 611, u'\xfa': 611,
+ u'\xfb': 611, u'\xfc': 611, u'\xfd': 556,
+ u'\xfe': 611, u'\xff': 556, u'\u0100': 722, u'\u0101': 556,
+ u'\u0102': 722, u'\u0103': 556, u'\u0104': 722,
+ u'\u0105': 556, u'\u0106': 722, u'\u0107': 556, u'\u010c': 722,
+ u'\u010d': 556, u'\u010e': 722, u'\u010f': 743,
+ u'\u0110': 722, u'\u0111': 611, u'\u0112': 667, u'\u0113': 556,
+ u'\u0116': 667, u'\u0117': 556, u'\u0118': 667,
+ u'\u0119': 556, u'\u011a': 667, u'\u011b': 556, u'\u011e': 778,
+ u'\u011f': 611, u'\u0122': 778, u'\u0123': 611,
+ u'\u012a': 278, u'\u012b': 278, u'\u012e': 278, u'\u012f': 278,
+ u'\u0130': 278, u'\u0131': 278, u'\u0136': 722,
+ u'\u0137': 556, u'\u0139': 611, u'\u013a': 278, u'\u013b': 611,
+ u'\u013c': 278, u'\u013d': 611, u'\u013e': 400,
+ u'\u0141': 611, u'\u0142': 278, u'\u0143': 722, u'\u0144': 611,
+ u'\u0145': 722, u'\u0146': 611, u'\u0147': 722,
+ u'\u0148': 611, u'\u014c': 778, u'\u014d': 611, u'\u0150': 778,
+ u'\u0151': 611, u'\u0152': 1000, u'\u0153': 944,
+ u'\u0154': 722, u'\u0155': 389, u'\u0156': 722, u'\u0157': 389,
+ u'\u0158': 722, u'\u0159': 389, u'\u015a': 667,
+ u'\u015b': 556, u'\u015e': 667, u'\u015f': 556, u'\u0160': 667,
+ u'\u0161': 556, u'\u0162': 611, u'\u0163': 333,
+ u'\u0164': 611, u'\u0165': 389, u'\u016a': 722, u'\u016b': 611,
+ u'\u016e': 722, u'\u016f': 611, u'\u0170': 722,
+ u'\u0171': 611, u'\u0172': 722, u'\u0173': 611, u'\u0178': 667,
+ u'\u0179': 611, u'\u017a': 500, u'\u017b': 611,
+ u'\u017c': 500, u'\u017d': 611, u'\u017e': 500, u'\u0192': 556,
+ u'\u0218': 667, u'\u0219': 556, u'\u02c6': 333,
+ u'\u02c7': 333, u'\u02d8': 333, u'\u02d9': 333, u'\u02da': 333,
+ u'\u02db': 333, u'\u02dc': 333, u'\u02dd': 333,
+ u'\u2013': 556, u'\u2014': 1000, u'\u2018': 278, u'\u2019': 278,
+ u'\u201a': 278, u'\u201c': 500, u'\u201d': 500,
+ u'\u201e': 500, u'\u2020': 556, u'\u2021': 556, u'\u2022': 350,
+ u'\u2026': 1000, u'\u2030': 1000, u'\u2039': 333,
+ u'\u203a': 333, u'\u2044': 167, u'\u2122': 1000, u'\u2202': 494,
+ u'\u2206': 612, u'\u2211': 600, u'\u2212': 584,
+ u'\u221a': 549, u'\u2260': 549, u'\u2264': 549, u'\u2265': 549,
+ u'\u25ca': 494, u'\uf6c3': 250, u'\ufb01': 611,
+ u'\ufb02': 611}),
+ 'Helvetica-Oblique': (
+ {'FontName': 'Helvetica-Oblique', 'Descent': -207.0,
+ 'FontBBox': (-171.0, -225.0, 1116.0, 931.0),
+ 'FontWeight': 'Medium', 'CapHeight': 718.0, 'FontFamily': 'Helvetica',
+ 'Flags': 0, 'XHeight': 523.0,
+ 'ItalicAngle': -12.0, 'Ascent': 718.0},
+ {u' ': 278, u'!': 278, u'"': 355, u'#': 556, u'$': 556, u'%': 889,
+ u'&': 667, u"'": 191, u'(': 333, u')': 333,
+ u'*': 389, u'+': 584, u',': 278, u'-': 333, u'.': 278, u'/': 278,
+ u'0': 556, u'1': 556, u'2': 556, u'3': 556,
+ u'4': 556, u'5': 556, u'6': 556, u'7': 556, u'8': 556, u'9': 556,
+ u':': 278, u';': 278, u'<': 584, u'=': 584,
+ u'>': 584, u'?': 556, u'@': 1015, u'A': 667, u'B': 667, u'C': 722,
+ u'D': 722, u'E': 667, u'F': 611, u'G': 778,
+ u'H': 722, u'I': 278, u'J': 500, u'K': 667, u'L': 556, u'M': 833,
+ u'N': 722, u'O': 778, u'P': 667, u'Q': 778,
+ u'R': 722, u'S': 667, u'T': 611, u'U': 722, u'V': 667, u'W': 944,
+ u'X': 667, u'Y': 667, u'Z': 611, u'[': 278,
+ u'\\': 278, u']': 278, u'^': 469, u'_': 556, u'`': 333, u'a': 556,
+ u'b': 556, u'c': 500, u'd': 556, u'e': 556,
+ u'f': 278, u'g': 556, u'h': 556, u'i': 222, u'j': 222, u'k': 500,
+ u'l': 222, u'm': 833, u'n': 556, u'o': 556,
+ u'p': 556, u'q': 556, u'r': 333, u's': 500, u't': 278, u'u': 556,
+ u'v': 500, u'w': 722, u'x': 500, u'y': 500,
+ u'z': 500, u'{': 334, u'|': 260, u'}': 334, u'~': 584, u'\xa1': 333,
+ u'\xa2': 556, u'\xa3': 556, u'\xa4': 556,
+ u'\xa5': 556, u'\xa6': 260, u'\xa7': 556, u'\xa8': 333, u'\xa9': 737,
+ u'\xaa': 370, u'\xab': 556, u'\xac': 584,
+ u'\xae': 737, u'\xaf': 333, u'\xb0': 400, u'\xb1': 584, u'\xb2': 333,
+ u'\xb3': 333, u'\xb4': 333, u'\xb5': 556,
+ u'\xb6': 537, u'\xb7': 278, u'\xb8': 333, u'\xb9': 333, u'\xba': 365,
+ u'\xbb': 556, u'\xbc': 834, u'\xbd': 834,
+ u'\xbe': 834, u'\xbf': 611, u'\xc0': 667, u'\xc1': 667, u'\xc2': 667,
+ u'\xc3': 667, u'\xc4': 667, u'\xc5': 667,
+ u'\xc6': 1000, u'\xc7': 722, u'\xc8': 667, u'\xc9': 667, u'\xca': 667,
+ u'\xcb': 667, u'\xcc': 278, u'\xcd': 278,
+ u'\xce': 278, u'\xcf': 278, u'\xd0': 722, u'\xd1': 722, u'\xd2': 778,
+ u'\xd3': 778, u'\xd4': 778, u'\xd5': 778,
+ u'\xd6': 778, u'\xd7': 584, u'\xd8': 778, u'\xd9': 722, u'\xda': 722,
+ u'\xdb': 722, u'\xdc': 722, u'\xdd': 667,
+ u'\xde': 667, u'\xdf': 611, u'\xe0': 556, u'\xe1': 556, u'\xe2': 556,
+ u'\xe3': 556, u'\xe4': 556, u'\xe5': 556,
+ u'\xe6': 889, u'\xe7': 500, u'\xe8': 556, u'\xe9': 556, u'\xea': 556,
+ u'\xeb': 556, u'\xec': 278, u'\xed': 278,
+ u'\xee': 278, u'\xef': 278, u'\xf0': 556, u'\xf1': 556, u'\xf2': 556,
+ u'\xf3': 556, u'\xf4': 556, u'\xf5': 556,
+ u'\xf6': 556, u'\xf7': 584, u'\xf8': 611, u'\xf9': 556, u'\xfa': 556,
+ u'\xfb': 556, u'\xfc': 556, u'\xfd': 500,
+ u'\xfe': 556, u'\xff': 500, u'\u0100': 667, u'\u0101': 556,
+ u'\u0102': 667, u'\u0103': 556, u'\u0104': 667,
+ u'\u0105': 556, u'\u0106': 722, u'\u0107': 500, u'\u010c': 722,
+ u'\u010d': 500, u'\u010e': 722, u'\u010f': 643,
+ u'\u0110': 722, u'\u0111': 556, u'\u0112': 667, u'\u0113': 556,
+ u'\u0116': 667, u'\u0117': 556, u'\u0118': 667,
+ u'\u0119': 556, u'\u011a': 667, u'\u011b': 556, u'\u011e': 778,
+ u'\u011f': 556, u'\u0122': 778, u'\u0123': 556,
+ u'\u012a': 278, u'\u012b': 278, u'\u012e': 278, u'\u012f': 222,
+ u'\u0130': 278, u'\u0131': 278, u'\u0136': 667,
+ u'\u0137': 500, u'\u0139': 556, u'\u013a': 222, u'\u013b': 556,
+ u'\u013c': 222, u'\u013d': 556, u'\u013e': 299,
+ u'\u0141': 556, u'\u0142': 222, u'\u0143': 722, u'\u0144': 556,
+ u'\u0145': 722, u'\u0146': 556, u'\u0147': 722,
+ u'\u0148': 556, u'\u014c': 778, u'\u014d': 556, u'\u0150': 778,
+ u'\u0151': 556, u'\u0152': 1000, u'\u0153': 944,
+ u'\u0154': 722, u'\u0155': 333, u'\u0156': 722, u'\u0157': 333,
+ u'\u0158': 722, u'\u0159': 333, u'\u015a': 667,
+ u'\u015b': 500, u'\u015e': 667, u'\u015f': 500, u'\u0160': 667,
+ u'\u0161': 500, u'\u0162': 611, u'\u0163': 278,
+ u'\u0164': 611, u'\u0165': 317, u'\u016a': 722, u'\u016b': 556,
+ u'\u016e': 722, u'\u016f': 556, u'\u0170': 722,
+ u'\u0171': 556, u'\u0172': 722, u'\u0173': 556, u'\u0178': 667,
+ u'\u0179': 611, u'\u017a': 500, u'\u017b': 611,
+ u'\u017c': 500, u'\u017d': 611, u'\u017e': 500, u'\u0192': 556,
+ u'\u0218': 667, u'\u0219': 500, u'\u02c6': 333,
+ u'\u02c7': 333, u'\u02d8': 333, u'\u02d9': 333, u'\u02da': 333,
+ u'\u02db': 333, u'\u02dc': 333, u'\u02dd': 333,
+ u'\u2013': 556, u'\u2014': 1000, u'\u2018': 222, u'\u2019': 222,
+ u'\u201a': 222, u'\u201c': 333, u'\u201d': 333,
+ u'\u201e': 333, u'\u2020': 556, u'\u2021': 556, u'\u2022': 350,
+ u'\u2026': 1000, u'\u2030': 1000, u'\u2039': 333,
+ u'\u203a': 333, u'\u2044': 167, u'\u2122': 1000, u'\u2202': 476,
+ u'\u2206': 612, u'\u2211': 600, u'\u2212': 584,
+ u'\u221a': 453, u'\u2260': 549, u'\u2264': 549, u'\u2265': 549,
+ u'\u25ca': 471, u'\uf6c3': 250, u'\ufb01': 500,
+ u'\ufb02': 500}),
+ 'Symbol': (
+ {'FontName': 'Symbol', 'FontBBox': (-180.0, -293.0, 1090.0, 1010.0),
+ 'FontWeight': 'Medium', 'FontFamily': 'Symbol',
+ 'Flags': 0, 'ItalicAngle': 0.0},
+ {u' ': 250, u'!': 333, u'#': 500, u'%': 833, u'&': 778, u'(': 333,
+ u')': 333, u'+': 549, u',': 250, u'.': 250,
+ u'/': 278, u'0': 500, u'1': 500, u'2': 500, u'3': 500, u'4': 500,
+ u'5': 500, u'6': 500, u'7': 500, u'8': 500,
+ u'9': 500, u':': 278, u';': 278, u'<': 549, u'=': 549, u'>': 549,
+ u'?': 444, u'[': 333, u']': 333, u'_': 500,
+ u'{': 480, u'|': 200, u'}': 480, u'\xac': 713, u'\xb0': 400,
+ u'\xb1': 549, u'\xb5': 576, u'\xd7': 549,
+ u'\xf7': 549, u'\u0192': 500, u'\u0391': 722, u'\u0392': 667,
+ u'\u0393': 603, u'\u0395': 611, u'\u0396': 611,
+ u'\u0397': 722, u'\u0398': 741, u'\u0399': 333, u'\u039a': 722,
+ u'\u039b': 686, u'\u039c': 889, u'\u039d': 722,
+ u'\u039e': 645, u'\u039f': 722, u'\u03a0': 768, u'\u03a1': 556,
+ u'\u03a3': 592, u'\u03a4': 611, u'\u03a5': 690,
+ u'\u03a6': 763, u'\u03a7': 722, u'\u03a8': 795, u'\u03b1': 631,
+ u'\u03b2': 549, u'\u03b3': 411, u'\u03b4': 494,
+ u'\u03b5': 439, u'\u03b6': 494, u'\u03b7': 603, u'\u03b8': 521,
+ u'\u03b9': 329, u'\u03ba': 549, u'\u03bb': 549,
+ u'\u03bd': 521, u'\u03be': 493, u'\u03bf': 549, u'\u03c0': 549,
+ u'\u03c1': 549, u'\u03c2': 439, u'\u03c3': 603,
+ u'\u03c4': 439, u'\u03c5': 576, u'\u03c6': 521, u'\u03c7': 549,
+ u'\u03c8': 686, u'\u03c9': 686, u'\u03d1': 631,
+ u'\u03d2': 620, u'\u03d5': 603, u'\u03d6': 713, u'\u2022': 460,
+ u'\u2026': 1000, u'\u2032': 247, u'\u2033': 411,
+ u'\u2044': 167, u'\u20ac': 750, u'\u2111': 686, u'\u2118': 987,
+ u'\u211c': 795, u'\u2126': 768, u'\u2135': 823,
+ u'\u2190': 987, u'\u2191': 603, u'\u2192': 987, u'\u2193': 603,
+ u'\u2194': 1042, u'\u21b5': 658, u'\u21d0': 987,
+ u'\u21d1': 603, u'\u21d2': 987, u'\u21d3': 603, u'\u21d4': 1042,
+ u'\u2200': 713, u'\u2202': 494, u'\u2203': 549,
+ u'\u2205': 823, u'\u2206': 612, u'\u2207': 713, u'\u2208': 713,
+ u'\u2209': 713, u'\u220b': 439, u'\u220f': 823,
+ u'\u2211': 713, u'\u2212': 549, u'\u2217': 500, u'\u221a': 549,
+ u'\u221d': 713, u'\u221e': 713, u'\u2220': 768,
+ u'\u2227': 603, u'\u2228': 603, u'\u2229': 768, u'\u222a': 768,
+ u'\u222b': 274, u'\u2234': 863, u'\u223c': 549,
+ u'\u2245': 549, u'\u2248': 549, u'\u2260': 549, u'\u2261': 549,
+ u'\u2264': 549, u'\u2265': 549, u'\u2282': 713,
+ u'\u2283': 713, u'\u2284': 713, u'\u2286': 713, u'\u2287': 713,
+ u'\u2295': 768, u'\u2297': 768, u'\u22a5': 658,
+ u'\u22c5': 250, u'\u2320': 686, u'\u2321': 686, u'\u2329': 329,
+ u'\u232a': 329, u'\u25ca': 494, u'\u2660': 753,
+ u'\u2663': 753, u'\u2665': 753, u'\u2666': 753, u'\uf6d9': 790,
+ u'\uf6da': 790, u'\uf6db': 890, u'\uf8e5': 500,
+ u'\uf8e6': 603, u'\uf8e7': 1000, u'\uf8e8': 790, u'\uf8e9': 790,
+ u'\uf8ea': 786, u'\uf8eb': 384, u'\uf8ec': 384,
+ u'\uf8ed': 384, u'\uf8ee': 384, u'\uf8ef': 384, u'\uf8f0': 384,
+ u'\uf8f1': 494, u'\uf8f2': 494, u'\uf8f3': 494,
+ u'\uf8f4': 494, u'\uf8f5': 686, u'\uf8f6': 384, u'\uf8f7': 384,
+ u'\uf8f8': 384, u'\uf8f9': 384, u'\uf8fa': 384,
+ u'\uf8fb': 384, u'\uf8fc': 494, u'\uf8fd': 494, u'\uf8fe': 494,
+ u'\uf8ff': 790}),
+ 'Times-Bold': (
+ {'FontName': 'Times-Bold', 'Descent': -217.0,
+ 'FontBBox': (-168.0, -218.0, 1000.0, 935.0), 'FontWeight': 'Bold',
+ 'CapHeight': 676.0, 'FontFamily': 'Times', 'Flags': 0,
+ 'XHeight': 461.0, 'ItalicAngle': 0.0, 'Ascent': 683.0},
+ {u' ': 250, u'!': 333, u'"': 555, u'#': 500, u'$': 500, u'%': 1000,
+ u'&': 833, u"'": 278, u'(': 333, u')': 333,
+ u'*': 500, u'+': 570, u',': 250, u'-': 333, u'.': 250, u'/': 278,
+ u'0': 500, u'1': 500, u'2': 500, u'3': 500,
+ u'4': 500, u'5': 500, u'6': 500, u'7': 500, u'8': 500, u'9': 500,
+ u':': 333, u';': 333, u'<': 570, u'=': 570,
+ u'>': 570, u'?': 500, u'@': 930, u'A': 722, u'B': 667, u'C': 722,
+ u'D': 722, u'E': 667, u'F': 611, u'G': 778,
+ u'H': 778, u'I': 389, u'J': 500, u'K': 778, u'L': 667, u'M': 944,
+ u'N': 722, u'O': 778, u'P': 611, u'Q': 778,
+ u'R': 722, u'S': 556, u'T': 667, u'U': 722, u'V': 722, u'W': 1000,
+ u'X': 722, u'Y': 722, u'Z': 667, u'[': 333,
+ u'\\': 278, u']': 333, u'^': 581, u'_': 500, u'`': 333, u'a': 500,
+ u'b': 556, u'c': 444, u'd': 556, u'e': 444,
+ u'f': 333, u'g': 500, u'h': 556, u'i': 278, u'j': 333, u'k': 556,
+ u'l': 278, u'm': 833, u'n': 556, u'o': 500,
+ u'p': 556, u'q': 556, u'r': 444, u's': 389, u't': 333, u'u': 556,
+ u'v': 500, u'w': 722, u'x': 500, u'y': 500,
+ u'z': 444, u'{': 394, u'|': 220, u'}': 394, u'~': 520, u'\xa1': 333,
+ u'\xa2': 500, u'\xa3': 500, u'\xa4': 500,
+ u'\xa5': 500, u'\xa6': 220, u'\xa7': 500, u'\xa8': 333, u'\xa9': 747,
+ u'\xaa': 300, u'\xab': 500, u'\xac': 570,
+ u'\xae': 747, u'\xaf': 333, u'\xb0': 400, u'\xb1': 570, u'\xb2': 300,
+ u'\xb3': 300, u'\xb4': 333, u'\xb5': 556,
+ u'\xb6': 540, u'\xb7': 250, u'\xb8': 333, u'\xb9': 300, u'\xba': 330,
+ u'\xbb': 500, u'\xbc': 750, u'\xbd': 750,
+ u'\xbe': 750, u'\xbf': 500, u'\xc0': 722, u'\xc1': 722, u'\xc2': 722,
+ u'\xc3': 722, u'\xc4': 722, u'\xc5': 722,
+ u'\xc6': 1000, u'\xc7': 722, u'\xc8': 667, u'\xc9': 667, u'\xca': 667,
+ u'\xcb': 667, u'\xcc': 389, u'\xcd': 389,
+ u'\xce': 389, u'\xcf': 389, u'\xd0': 722, u'\xd1': 722, u'\xd2': 778,
+ u'\xd3': 778, u'\xd4': 778, u'\xd5': 778,
+ u'\xd6': 778, u'\xd7': 570, u'\xd8': 778, u'\xd9': 722, u'\xda': 722,
+ u'\xdb': 722, u'\xdc': 722, u'\xdd': 722,
+ u'\xde': 611, u'\xdf': 556, u'\xe0': 500, u'\xe1': 500, u'\xe2': 500,
+ u'\xe3': 500, u'\xe4': 500, u'\xe5': 500,
+ u'\xe6': 722, u'\xe7': 444, u'\xe8': 444, u'\xe9': 444, u'\xea': 444,
+ u'\xeb': 444, u'\xec': 278, u'\xed': 278,
+ u'\xee': 278, u'\xef': 278, u'\xf0': 500, u'\xf1': 556, u'\xf2': 500,
+ u'\xf3': 500, u'\xf4': 500, u'\xf5': 500,
+ u'\xf6': 500, u'\xf7': 570, u'\xf8': 500, u'\xf9': 556, u'\xfa': 556,
+ u'\xfb': 556, u'\xfc': 556, u'\xfd': 500,
+ u'\xfe': 556, u'\xff': 500, u'\u0100': 722, u'\u0101': 500,
+ u'\u0102': 722, u'\u0103': 500, u'\u0104': 722,
+ u'\u0105': 500, u'\u0106': 722, u'\u0107': 444, u'\u010c': 722,
+ u'\u010d': 444, u'\u010e': 722, u'\u010f': 672,
+ u'\u0110': 722, u'\u0111': 556, u'\u0112': 667, u'\u0113': 444,
+ u'\u0116': 667, u'\u0117': 444, u'\u0118': 667,
+ u'\u0119': 444, u'\u011a': 667, u'\u011b': 444, u'\u011e': 778,
+ u'\u011f': 500, u'\u0122': 778, u'\u0123': 500,
+ u'\u012a': 389, u'\u012b': 278, u'\u012e': 389, u'\u012f': 278,
+ u'\u0130': 389, u'\u0131': 278, u'\u0136': 778,
+ u'\u0137': 556, u'\u0139': 667, u'\u013a': 278, u'\u013b': 667,
+ u'\u013c': 278, u'\u013d': 667, u'\u013e': 394,
+ u'\u0141': 667, u'\u0142': 278, u'\u0143': 722, u'\u0144': 556,
+ u'\u0145': 722, u'\u0146': 556, u'\u0147': 722,
+ u'\u0148': 556, u'\u014c': 778, u'\u014d': 500, u'\u0150': 778,
+ u'\u0151': 500, u'\u0152': 1000, u'\u0153': 722,
+ u'\u0154': 722, u'\u0155': 444, u'\u0156': 722, u'\u0157': 444,
+ u'\u0158': 722, u'\u0159': 444, u'\u015a': 556,
+ u'\u015b': 389, u'\u015e': 556, u'\u015f': 389, u'\u0160': 556,
+ u'\u0161': 389, u'\u0162': 667, u'\u0163': 333,
+ u'\u0164': 667, u'\u0165': 416, u'\u016a': 722, u'\u016b': 556,
+ u'\u016e': 722, u'\u016f': 556, u'\u0170': 722,
+ u'\u0171': 556, u'\u0172': 722, u'\u0173': 556, u'\u0178': 722,
+ u'\u0179': 667, u'\u017a': 444, u'\u017b': 667,
+ u'\u017c': 444, u'\u017d': 667, u'\u017e': 444, u'\u0192': 500,
+ u'\u0218': 556, u'\u0219': 389, u'\u02c6': 333,
+ u'\u02c7': 333, u'\u02d8': 333, u'\u02d9': 333, u'\u02da': 333,
+ u'\u02db': 333, u'\u02dc': 333, u'\u02dd': 333,
+ u'\u2013': 500, u'\u2014': 1000, u'\u2018': 333, u'\u2019': 333,
+ u'\u201a': 333, u'\u201c': 500, u'\u201d': 500,
+ u'\u201e': 500, u'\u2020': 500, u'\u2021': 500, u'\u2022': 350,
+ u'\u2026': 1000, u'\u2030': 1000, u'\u2039': 333,
+ u'\u203a': 333, u'\u2044': 167, u'\u2122': 1000, u'\u2202': 494,
+ u'\u2206': 612, u'\u2211': 600, u'\u2212': 570,
+ u'\u221a': 549, u'\u2260': 549, u'\u2264': 549, u'\u2265': 549,
+ u'\u25ca': 494, u'\uf6c3': 250, u'\ufb01': 556,
+ u'\ufb02': 556}),
+ 'Times-BoldItalic': ({'FontName': 'Times-BoldItalic', 'Descent': -217.0,
+ 'FontBBox': (-200.0, -218.0, 996.0, 921.0),
+ 'FontWeight': 'Bold', 'CapHeight': 669.0,
+ 'FontFamily': 'Times', 'Flags': 0, 'XHeight': 462.0,
+ 'ItalicAngle': -15.0, 'Ascent': 683.0},
+ {u' ': 250, u'!': 389, u'"': 555, u'#': 500,
+ u'$': 500, u'%': 833, u'&': 778, u"'": 278,
+ u'(': 333, u')': 333, u'*': 500, u'+': 570,
+ u',': 250, u'-': 333, u'.': 250, u'/': 278,
+ u'0': 500, u'1': 500, u'2': 500, u'3': 500,
+ u'4': 500, u'5': 500, u'6': 500, u'7': 500,
+ u'8': 500, u'9': 500, u':': 333, u';': 333,
+ u'<': 570, u'=': 570, u'>': 570, u'?': 500,
+ u'@': 832, u'A': 667, u'B': 667, u'C': 667,
+ u'D': 722, u'E': 667, u'F': 667, u'G': 722,
+ u'H': 778, u'I': 389, u'J': 500, u'K': 667,
+ u'L': 611, u'M': 889, u'N': 722, u'O': 722,
+ u'P': 611, u'Q': 722, u'R': 667, u'S': 556,
+ u'T': 611, u'U': 722, u'V': 667, u'W': 889,
+ u'X': 667, u'Y': 611, u'Z': 611, u'[': 333,
+ u'\\': 278, u']': 333, u'^': 570, u'_': 500,
+ u'`': 333, u'a': 500, u'b': 500, u'c': 444,
+ u'd': 500, u'e': 444, u'f': 333, u'g': 500,
+ u'h': 556, u'i': 278, u'j': 278, u'k': 500,
+ u'l': 278, u'm': 778, u'n': 556, u'o': 500,
+ u'p': 500, u'q': 500, u'r': 389, u's': 389,
+ u't': 278, u'u': 556, u'v': 444, u'w': 667,
+ u'x': 500, u'y': 444, u'z': 389, u'{': 348,
+ u'|': 220, u'}': 348, u'~': 570, u'\xa1': 389,
+ u'\xa2': 500, u'\xa3': 500, u'\xa4': 500,
+ u'\xa5': 500, u'\xa6': 220, u'\xa7': 500,
+ u'\xa8': 333, u'\xa9': 747, u'\xaa': 266,
+ u'\xab': 500, u'\xac': 606, u'\xae': 747,
+ u'\xaf': 333, u'\xb0': 400, u'\xb1': 570,
+ u'\xb2': 300, u'\xb3': 300, u'\xb4': 333,
+ u'\xb5': 576, u'\xb6': 500, u'\xb7': 250,
+ u'\xb8': 333, u'\xb9': 300, u'\xba': 300,
+ u'\xbb': 500, u'\xbc': 750, u'\xbd': 750,
+ u'\xbe': 750, u'\xbf': 500, u'\xc0': 667,
+ u'\xc1': 667, u'\xc2': 667, u'\xc3': 667,
+ u'\xc4': 667, u'\xc5': 667, u'\xc6': 944,
+ u'\xc7': 667, u'\xc8': 667, u'\xc9': 667,
+ u'\xca': 667, u'\xcb': 667, u'\xcc': 389,
+ u'\xcd': 389, u'\xce': 389, u'\xcf': 389,
+ u'\xd0': 722, u'\xd1': 722, u'\xd2': 722,
+ u'\xd3': 722, u'\xd4': 722, u'\xd5': 722,
+ u'\xd6': 722, u'\xd7': 570, u'\xd8': 722,
+ u'\xd9': 722, u'\xda': 722, u'\xdb': 722,
+ u'\xdc': 722, u'\xdd': 611, u'\xde': 611,
+ u'\xdf': 500, u'\xe0': 500, u'\xe1': 500,
+ u'\xe2': 500, u'\xe3': 500, u'\xe4': 500,
+ u'\xe5': 500, u'\xe6': 722, u'\xe7': 444,
+ u'\xe8': 444, u'\xe9': 444, u'\xea': 444,
+ u'\xeb': 444, u'\xec': 278, u'\xed': 278,
+ u'\xee': 278, u'\xef': 278, u'\xf0': 500,
+ u'\xf1': 556, u'\xf2': 500, u'\xf3': 500,
+ u'\xf4': 500, u'\xf5': 500, u'\xf6': 500,
+ u'\xf7': 570, u'\xf8': 500, u'\xf9': 556,
+ u'\xfa': 556, u'\xfb': 556, u'\xfc': 556,
+ u'\xfd': 444, u'\xfe': 500, u'\xff': 444,
+ u'\u0100': 667, u'\u0101': 500, u'\u0102': 667,
+ u'\u0103': 500, u'\u0104': 667, u'\u0105': 500,
+ u'\u0106': 667, u'\u0107': 444,
+ u'\u010c': 667, u'\u010d': 444, u'\u010e': 722,
+ u'\u010f': 608, u'\u0110': 722,
+ u'\u0111': 500, u'\u0112': 667, u'\u0113': 444,
+ u'\u0116': 667, u'\u0117': 444,
+ u'\u0118': 667, u'\u0119': 444, u'\u011a': 667,
+ u'\u011b': 444, u'\u011e': 722,
+ u'\u011f': 500, u'\u0122': 722, u'\u0123': 500,
+ u'\u012a': 389, u'\u012b': 278,
+ u'\u012e': 389, u'\u012f': 278, u'\u0130': 389,
+ u'\u0131': 278, u'\u0136': 667,
+ u'\u0137': 500, u'\u0139': 611, u'\u013a': 278,
+ u'\u013b': 611, u'\u013c': 278,
+ u'\u013d': 611, u'\u013e': 382, u'\u0141': 611,
+ u'\u0142': 278, u'\u0143': 722,
+ u'\u0144': 556, u'\u0145': 722, u'\u0146': 556,
+ u'\u0147': 722, u'\u0148': 556,
+ u'\u014c': 722, u'\u014d': 500, u'\u0150': 722,
+ u'\u0151': 500, u'\u0152': 944,
+ u'\u0153': 722, u'\u0154': 667, u'\u0155': 389,
+ u'\u0156': 667, u'\u0157': 389,
+ u'\u0158': 667, u'\u0159': 389, u'\u015a': 556,
+ u'\u015b': 389, u'\u015e': 556,
+ u'\u015f': 389, u'\u0160': 556, u'\u0161': 389,
+ u'\u0162': 611, u'\u0163': 278,
+ u'\u0164': 611, u'\u0165': 366, u'\u016a': 722,
+ u'\u016b': 556, u'\u016e': 722,
+ u'\u016f': 556, u'\u0170': 722, u'\u0171': 556,
+ u'\u0172': 722, u'\u0173': 556,
+ u'\u0178': 611, u'\u0179': 611, u'\u017a': 389,
+ u'\u017b': 611, u'\u017c': 389,
+ u'\u017d': 611, u'\u017e': 389, u'\u0192': 500,
+ u'\u0218': 556, u'\u0219': 389,
+ u'\u02c6': 333, u'\u02c7': 333, u'\u02d8': 333,
+ u'\u02d9': 333, u'\u02da': 333,
+ u'\u02db': 333, u'\u02dc': 333, u'\u02dd': 333,
+ u'\u2013': 500, u'\u2014': 1000,
+ u'\u2018': 333, u'\u2019': 333, u'\u201a': 333,
+ u'\u201c': 500, u'\u201d': 500,
+ u'\u201e': 500, u'\u2020': 500, u'\u2021': 500,
+ u'\u2022': 350, u'\u2026': 1000,
+ u'\u2030': 1000, u'\u2039': 333, u'\u203a': 333,
+ u'\u2044': 167, u'\u2122': 1000,
+ u'\u2202': 494, u'\u2206': 612, u'\u2211': 600,
+ u'\u2212': 606, u'\u221a': 549,
+ u'\u2260': 549, u'\u2264': 549, u'\u2265': 549,
+ u'\u25ca': 494, u'\uf6c3': 250,
+ u'\ufb01': 556, u'\ufb02': 556}),
+ 'Times-Italic': (
+ {'FontName': 'Times-Italic', 'Descent': -217.0,
+ 'FontBBox': (-169.0, -217.0, 1010.0, 883.0), 'FontWeight': 'Medium',
+ 'CapHeight': 653.0, 'FontFamily': 'Times', 'Flags': 0,
+ 'XHeight': 441.0, 'ItalicAngle': -15.5, 'Ascent': 683.0},
+ {u' ': 250, u'!': 333, u'"': 420, u'#': 500, u'$': 500, u'%': 833,
+ u'&': 778, u"'": 214, u'(': 333, u')': 333,
+ u'*': 500, u'+': 675, u',': 250, u'-': 333, u'.': 250, u'/': 278,
+ u'0': 500, u'1': 500, u'2': 500, u'3': 500,
+ u'4': 500, u'5': 500, u'6': 500, u'7': 500, u'8': 500, u'9': 500,
+ u':': 333, u';': 333, u'<': 675, u'=': 675,
+ u'>': 675, u'?': 500, u'@': 920, u'A': 611, u'B': 611, u'C': 667,
+ u'D': 722, u'E': 611, u'F': 611, u'G': 722,
+ u'H': 722, u'I': 333, u'J': 444, u'K': 667, u'L': 556, u'M': 833,
+ u'N': 667, u'O': 722, u'P': 611, u'Q': 722,
+ u'R': 611, u'S': 500, u'T': 556, u'U': 722, u'V': 611, u'W': 833,
+ u'X': 611, u'Y': 556, u'Z': 556, u'[': 389,
+ u'\\': 278, u']': 389, u'^': 422, u'_': 500, u'`': 333, u'a': 500,
+ u'b': 500, u'c': 444, u'd': 500, u'e': 444,
+ u'f': 278, u'g': 500, u'h': 500, u'i': 278, u'j': 278, u'k': 444,
+ u'l': 278, u'm': 722, u'n': 500, u'o': 500,
+ u'p': 500, u'q': 500, u'r': 389, u's': 389, u't': 278, u'u': 500,
+ u'v': 444, u'w': 667, u'x': 444, u'y': 444,
+ u'z': 389, u'{': 400, u'|': 275, u'}': 400, u'~': 541, u'\xa1': 389,
+ u'\xa2': 500, u'\xa3': 500, u'\xa4': 500,
+ u'\xa5': 500, u'\xa6': 275, u'\xa7': 500, u'\xa8': 333, u'\xa9': 760,
+ u'\xaa': 276, u'\xab': 500, u'\xac': 675,
+ u'\xae': 760, u'\xaf': 333, u'\xb0': 400, u'\xb1': 675, u'\xb2': 300,
+ u'\xb3': 300, u'\xb4': 333, u'\xb5': 500,
+ u'\xb6': 523, u'\xb7': 250, u'\xb8': 333, u'\xb9': 300, u'\xba': 310,
+ u'\xbb': 500, u'\xbc': 750, u'\xbd': 750,
+ u'\xbe': 750, u'\xbf': 500, u'\xc0': 611, u'\xc1': 611, u'\xc2': 611,
+ u'\xc3': 611, u'\xc4': 611, u'\xc5': 611,
+ u'\xc6': 889, u'\xc7': 667, u'\xc8': 611, u'\xc9': 611, u'\xca': 611,
+ u'\xcb': 611, u'\xcc': 333, u'\xcd': 333,
+ u'\xce': 333, u'\xcf': 333, u'\xd0': 722, u'\xd1': 667, u'\xd2': 722,
+ u'\xd3': 722, u'\xd4': 722, u'\xd5': 722,
+ u'\xd6': 722, u'\xd7': 675, u'\xd8': 722, u'\xd9': 722, u'\xda': 722,
+ u'\xdb': 722, u'\xdc': 722, u'\xdd': 556,
+ u'\xde': 611, u'\xdf': 500, u'\xe0': 500, u'\xe1': 500, u'\xe2': 500,
+ u'\xe3': 500, u'\xe4': 500, u'\xe5': 500,
+ u'\xe6': 667, u'\xe7': 444, u'\xe8': 444, u'\xe9': 444, u'\xea': 444,
+ u'\xeb': 444, u'\xec': 278, u'\xed': 278,
+ u'\xee': 278, u'\xef': 278, u'\xf0': 500, u'\xf1': 500, u'\xf2': 500,
+ u'\xf3': 500, u'\xf4': 500, u'\xf5': 500,
+ u'\xf6': 500, u'\xf7': 675, u'\xf8': 500, u'\xf9': 500, u'\xfa': 500,
+ u'\xfb': 500, u'\xfc': 500, u'\xfd': 444,
+ u'\xfe': 500, u'\xff': 444, u'\u0100': 611, u'\u0101': 500,
+ u'\u0102': 611, u'\u0103': 500, u'\u0104': 611,
+ u'\u0105': 500, u'\u0106': 667, u'\u0107': 444, u'\u010c': 667,
+ u'\u010d': 444, u'\u010e': 722, u'\u010f': 544,
+ u'\u0110': 722, u'\u0111': 500, u'\u0112': 611, u'\u0113': 444,
+ u'\u0116': 611, u'\u0117': 444, u'\u0118': 611,
+ u'\u0119': 444, u'\u011a': 611, u'\u011b': 444, u'\u011e': 722,
+ u'\u011f': 500, u'\u0122': 722, u'\u0123': 500,
+ u'\u012a': 333, u'\u012b': 278, u'\u012e': 333, u'\u012f': 278,
+ u'\u0130': 333, u'\u0131': 278, u'\u0136': 667,
+ u'\u0137': 444, u'\u0139': 556, u'\u013a': 278, u'\u013b': 556,
+ u'\u013c': 278, u'\u013d': 611, u'\u013e': 300,
+ u'\u0141': 556, u'\u0142': 278, u'\u0143': 667, u'\u0144': 500,
+ u'\u0145': 667, u'\u0146': 500, u'\u0147': 667,
+ u'\u0148': 500, u'\u014c': 722, u'\u014d': 500, u'\u0150': 722,
+ u'\u0151': 500, u'\u0152': 944, u'\u0153': 667,
+ u'\u0154': 611, u'\u0155': 389, u'\u0156': 611, u'\u0157': 389,
+ u'\u0158': 611, u'\u0159': 389, u'\u015a': 500,
+ u'\u015b': 389, u'\u015e': 500, u'\u015f': 389, u'\u0160': 500,
+ u'\u0161': 389, u'\u0162': 556, u'\u0163': 278,
+ u'\u0164': 556, u'\u0165': 300, u'\u016a': 722, u'\u016b': 500,
+ u'\u016e': 722, u'\u016f': 500, u'\u0170': 722,
+ u'\u0171': 500, u'\u0172': 722, u'\u0173': 500, u'\u0178': 556,
+ u'\u0179': 556, u'\u017a': 389, u'\u017b': 556,
+ u'\u017c': 389, u'\u017d': 556, u'\u017e': 389, u'\u0192': 500,
+ u'\u0218': 500, u'\u0219': 389, u'\u02c6': 333,
+ u'\u02c7': 333, u'\u02d8': 333, u'\u02d9': 333, u'\u02da': 333,
+ u'\u02db': 333, u'\u02dc': 333, u'\u02dd': 333,
+ u'\u2013': 500, u'\u2014': 889, u'\u2018': 333, u'\u2019': 333,
+ u'\u201a': 333, u'\u201c': 556, u'\u201d': 556,
+ u'\u201e': 556, u'\u2020': 500, u'\u2021': 500, u'\u2022': 350,
+ u'\u2026': 889, u'\u2030': 1000, u'\u2039': 333,
+ u'\u203a': 333, u'\u2044': 167, u'\u2122': 980, u'\u2202': 476,
+ u'\u2206': 612, u'\u2211': 600, u'\u2212': 675,
+ u'\u221a': 453, u'\u2260': 549, u'\u2264': 549, u'\u2265': 549,
+ u'\u25ca': 471, u'\uf6c3': 250, u'\ufb01': 500,
+ u'\ufb02': 500}),
+ 'Times-Roman': (
+ {'FontName': 'Times-Roman', 'Descent': -217.0,
+ 'FontBBox': (-168.0, -218.0, 1000.0, 898.0), 'FontWeight': 'Roman',
+ 'CapHeight': 662.0, 'FontFamily': 'Times', 'Flags': 0,
+ 'XHeight': 450.0, 'ItalicAngle': 0.0, 'Ascent': 683.0},
+ {u' ': 250, u'!': 333, u'"': 408, u'#': 500, u'$': 500, u'%': 833,
+ u'&': 778, u"'": 180, u'(': 333, u')': 333,
+ u'*': 500, u'+': 564, u',': 250, u'-': 333, u'.': 250, u'/': 278,
+ u'0': 500, u'1': 500, u'2': 500, u'3': 500,
+ u'4': 500, u'5': 500, u'6': 500, u'7': 500, u'8': 500, u'9': 500,
+ u':': 278, u';': 278, u'<': 564, u'=': 564,
+ u'>': 564, u'?': 444, u'@': 921, u'A': 722, u'B': 667, u'C': 667,
+ u'D': 722, u'E': 611, u'F': 556, u'G': 722,
+ u'H': 722, u'I': 333, u'J': 389, u'K': 722, u'L': 611, u'M': 889,
+ u'N': 722, u'O': 722, u'P': 556, u'Q': 722,
+ u'R': 667, u'S': 556, u'T': 611, u'U': 722, u'V': 722, u'W': 944,
+ u'X': 722, u'Y': 722, u'Z': 611, u'[': 333,
+ u'\\': 278, u']': 333, u'^': 469, u'_': 500, u'`': 333, u'a': 444,
+ u'b': 500, u'c': 444, u'd': 500, u'e': 444,
+ u'f': 333, u'g': 500, u'h': 500, u'i': 278, u'j': 278, u'k': 500,
+ u'l': 278, u'm': 778, u'n': 500, u'o': 500,
+ u'p': 500, u'q': 500, u'r': 333, u's': 389, u't': 278, u'u': 500,
+ u'v': 500, u'w': 722, u'x': 500, u'y': 500,
+ u'z': 444, u'{': 480, u'|': 200, u'}': 480, u'~': 541, u'\xa1': 333,
+ u'\xa2': 500, u'\xa3': 500, u'\xa4': 500,
+ u'\xa5': 500, u'\xa6': 200, u'\xa7': 500, u'\xa8': 333, u'\xa9': 760,
+ u'\xaa': 276, u'\xab': 500, u'\xac': 564,
+ u'\xae': 760, u'\xaf': 333, u'\xb0': 400, u'\xb1': 564, u'\xb2': 300,
+ u'\xb3': 300, u'\xb4': 333, u'\xb5': 500,
+ u'\xb6': 453, u'\xb7': 250, u'\xb8': 333, u'\xb9': 300, u'\xba': 310,
+ u'\xbb': 500, u'\xbc': 750, u'\xbd': 750,
+ u'\xbe': 750, u'\xbf': 444, u'\xc0': 722, u'\xc1': 722, u'\xc2': 722,
+ u'\xc3': 722, u'\xc4': 722, u'\xc5': 722,
+ u'\xc6': 889, u'\xc7': 667, u'\xc8': 611, u'\xc9': 611, u'\xca': 611,
+ u'\xcb': 611, u'\xcc': 333, u'\xcd': 333,
+ u'\xce': 333, u'\xcf': 333, u'\xd0': 722, u'\xd1': 722, u'\xd2': 722,
+ u'\xd3': 722, u'\xd4': 722, u'\xd5': 722,
+ u'\xd6': 722, u'\xd7': 564, u'\xd8': 722, u'\xd9': 722, u'\xda': 722,
+ u'\xdb': 722, u'\xdc': 722, u'\xdd': 722,
+ u'\xde': 556, u'\xdf': 500, u'\xe0': 444, u'\xe1': 444, u'\xe2': 444,
+ u'\xe3': 444, u'\xe4': 444, u'\xe5': 444,
+ u'\xe6': 667, u'\xe7': 444, u'\xe8': 444, u'\xe9': 444, u'\xea': 444,
+ u'\xeb': 444, u'\xec': 278, u'\xed': 278,
+ u'\xee': 278, u'\xef': 278, u'\xf0': 500, u'\xf1': 500, u'\xf2': 500,
+ u'\xf3': 500, u'\xf4': 500, u'\xf5': 500,
+ u'\xf6': 500, u'\xf7': 564, u'\xf8': 500, u'\xf9': 500, u'\xfa': 500,
+ u'\xfb': 500, u'\xfc': 500, u'\xfd': 500,
+ u'\xfe': 500, u'\xff': 500, u'\u0100': 722, u'\u0101': 444,
+ u'\u0102': 722, u'\u0103': 444, u'\u0104': 722,
+ u'\u0105': 444, u'\u0106': 667, u'\u0107': 444, u'\u010c': 667,
+ u'\u010d': 444, u'\u010e': 722, u'\u010f': 588,
+ u'\u0110': 722, u'\u0111': 500, u'\u0112': 611, u'\u0113': 444,
+ u'\u0116': 611, u'\u0117': 444, u'\u0118': 611,
+ u'\u0119': 444, u'\u011a': 611, u'\u011b': 444, u'\u011e': 722,
+ u'\u011f': 500, u'\u0122': 722, u'\u0123': 500,
+ u'\u012a': 333, u'\u012b': 278, u'\u012e': 333, u'\u012f': 278,
+ u'\u0130': 333, u'\u0131': 278, u'\u0136': 722,
+ u'\u0137': 500, u'\u0139': 611, u'\u013a': 278, u'\u013b': 611,
+ u'\u013c': 278, u'\u013d': 611, u'\u013e': 344,
+ u'\u0141': 611, u'\u0142': 278, u'\u0143': 722, u'\u0144': 500,
+ u'\u0145': 722, u'\u0146': 500, u'\u0147': 722,
+ u'\u0148': 500, u'\u014c': 722, u'\u014d': 500, u'\u0150': 722,
+ u'\u0151': 500, u'\u0152': 889, u'\u0153': 722,
+ u'\u0154': 667, u'\u0155': 333, u'\u0156': 667, u'\u0157': 333,
+ u'\u0158': 667, u'\u0159': 333, u'\u015a': 556,
+ u'\u015b': 389, u'\u015e': 556, u'\u015f': 389, u'\u0160': 556,
+ u'\u0161': 389, u'\u0162': 611, u'\u0163': 278,
+ u'\u0164': 611, u'\u0165': 326, u'\u016a': 722, u'\u016b': 500,
+ u'\u016e': 722, u'\u016f': 500, u'\u0170': 722,
+ u'\u0171': 500, u'\u0172': 722, u'\u0173': 500, u'\u0178': 722,
+ u'\u0179': 611, u'\u017a': 444, u'\u017b': 611,
+ u'\u017c': 444, u'\u017d': 611, u'\u017e': 444, u'\u0192': 500,
+ u'\u0218': 556, u'\u0219': 389, u'\u02c6': 333,
+ u'\u02c7': 333, u'\u02d8': 333, u'\u02d9': 333, u'\u02da': 333,
+ u'\u02db': 333, u'\u02dc': 333, u'\u02dd': 333,
+ u'\u2013': 500, u'\u2014': 1000, u'\u2018': 333, u'\u2019': 333,
+ u'\u201a': 333, u'\u201c': 444, u'\u201d': 444,
+ u'\u201e': 444, u'\u2020': 500, u'\u2021': 500, u'\u2022': 350,
+ u'\u2026': 1000, u'\u2030': 1000, u'\u2039': 333,
+ u'\u203a': 333, u'\u2044': 167, u'\u2122': 980, u'\u2202': 476,
+ u'\u2206': 612, u'\u2211': 600, u'\u2212': 564,
+ u'\u221a': 453, u'\u2260': 549, u'\u2264': 549, u'\u2265': 549,
+ u'\u25ca': 471, u'\uf6c3': 250, u'\ufb01': 556,
+ u'\ufb02': 556}),
+ 'ZapfDingbats': (
+ {'FontName': 'ZapfDingbats', 'FontBBox': (-1.0, -143.0, 981.0, 820.0),
+ 'FontWeight': 'Medium', 'FontFamily': 'ITC',
+ 'Flags': 0, 'ItalicAngle': 0.0},
+ {u'\x01': 974, u'\x02': 961, u'\x03': 980, u'\x04': 719, u'\x05': 789,
+ u'\x06': 494, u'\x07': 552, u'\x08': 537,
+ u'\t': 577, u'\n': 692, u'\x0b': 960, u'\x0c': 939, u'\r': 549,
+ u'\x0e': 855, u'\x0f': 911, u'\x10': 933,
+ u'\x11': 945, u'\x12': 974, u'\x13': 755, u'\x14': 846, u'\x15': 762,
+ u'\x16': 761, u'\x17': 571, u'\x18': 677,
+ u'\x19': 763, u'\x1a': 760, u'\x1b': 759, u'\x1c': 754, u'\x1d': 786,
+ u'\x1e': 788, u'\x1f': 788, u' ': 790,
+ u'!': 793, u'"': 794, u'#': 816, u'$': 823, u'%': 789, u'&': 841,
+ u"'": 823, u'(': 833, u')': 816, u'*': 831,
+ u'+': 923, u',': 744, u'-': 723, u'.': 749, u'/': 790, u'0': 792,
+ u'1': 695, u'2': 776, u'3': 768, u'4': 792,
+ u'5': 759, u'6': 707, u'7': 708, u'8': 682, u'9': 701, u':': 826,
+ u';': 815, u'<': 789, u'=': 789, u'>': 707,
+ u'?': 687, u'@': 696, u'A': 689, u'B': 786, u'C': 787, u'D': 713,
+ u'E': 791, u'F': 785, u'G': 791, u'H': 873,
+ u'I': 761, u'J': 762, u'K': 759, u'L': 892, u'M': 892, u'N': 788,
+ u'O': 784, u'Q': 438, u'R': 138, u'S': 277,
+ u'T': 415, u'U': 509, u'V': 410, u'W': 234, u'X': 234, u'Y': 390,
+ u'Z': 390, u'[': 276, u'\\': 276, u']': 317,
+ u'^': 317, u'_': 334, u'`': 334, u'a': 392, u'b': 392, u'c': 668,
+ u'd': 668, u'e': 732, u'f': 544, u'g': 544,
+ u'h': 910, u'i': 911, u'j': 667, u'k': 760, u'l': 760, u'm': 626,
+ u'n': 694, u'o': 595, u'p': 776, u'u': 690,
+ u'v': 791, u'w': 790, u'x': 788, u'y': 788, u'z': 788, u'{': 788,
+ u'|': 788, u'}': 788, u'~': 788, u'\x7f': 788,
+ u'\x80': 788, u'\x81': 788, u'\x82': 788, u'\x83': 788, u'\x84': 788,
+ u'\x85': 788, u'\x86': 788, u'\x87': 788,
+ u'\x88': 788, u'\x89': 788, u'\x8a': 788, u'\x8b': 788, u'\x8c': 788,
+ u'\x8d': 788, u'\x8e': 788, u'\x8f': 788,
+ u'\x90': 788, u'\x91': 788, u'\x92': 788, u'\x93': 788, u'\x94': 788,
+ u'\x95': 788, u'\x96': 788, u'\x97': 788,
+ u'\x98': 788, u'\x99': 788, u'\x9a': 788, u'\x9b': 788, u'\x9c': 788,
+ u'\x9d': 788, u'\x9e': 788, u'\x9f': 788,
+ u'\xa0': 894, u'\xa1': 838, u'\xa2': 924, u'\xa3': 1016, u'\xa4': 458,
+ u'\xa5': 924, u'\xa6': 918, u'\xa7': 927,
+ u'\xa8': 928, u'\xa9': 928, u'\xaa': 834, u'\xab': 873, u'\xac': 828,
+ u'\xad': 924, u'\xae': 917, u'\xaf': 930,
+ u'\xb0': 931, u'\xb1': 463, u'\xb2': 883, u'\xb3': 836, u'\xb4': 867,
+ u'\xb5': 696, u'\xb6': 874, u'\xb7': 760,
+ u'\xb8': 946, u'\xb9': 865, u'\xba': 967, u'\xbb': 831, u'\xbc': 873,
+ u'\xbd': 927, u'\xbe': 970, u'\xbf': 918,
+ u'\xc0': 748, u'\xc1': 836, u'\xc2': 771, u'\xc3': 888, u'\xc4': 748,
+ u'\xc5': 771, u'\xc6': 888, u'\xc7': 867,
+ u'\xc8': 696, u'\xc9': 874, u'\xca': 974, u'\xcb': 762, u'\xcc': 759,
+ u'\xcd': 509, u'\xce': 410}),
}
diff --git a/pdfminer/glyphlist.py b/pdfminer/glyphlist.py
index 10e1008d..1d0c91c2 100644
--- a/pdfminer/glyphlist.py
+++ b/pdfminer/glyphlist.py
@@ -54,4286 +54,4286 @@
# (2) Unicode scalar value
glyphname2unicode = {
- 'A': u'\u0041',
- 'AE': u'\u00C6',
- 'AEacute': u'\u01FC',
- 'AEmacron': u'\u01E2',
- 'AEsmall': u'\uF7E6',
- 'Aacute': u'\u00C1',
- 'Aacutesmall': u'\uF7E1',
- 'Abreve': u'\u0102',
- 'Abreveacute': u'\u1EAE',
- 'Abrevecyrillic': u'\u04D0',
- 'Abrevedotbelow': u'\u1EB6',
- 'Abrevegrave': u'\u1EB0',
- 'Abrevehookabove': u'\u1EB2',
- 'Abrevetilde': u'\u1EB4',
- 'Acaron': u'\u01CD',
- 'Acircle': u'\u24B6',
- 'Acircumflex': u'\u00C2',
- 'Acircumflexacute': u'\u1EA4',
- 'Acircumflexdotbelow': u'\u1EAC',
- 'Acircumflexgrave': u'\u1EA6',
- 'Acircumflexhookabove': u'\u1EA8',
- 'Acircumflexsmall': u'\uF7E2',
- 'Acircumflextilde': u'\u1EAA',
- 'Acute': u'\uF6C9',
- 'Acutesmall': u'\uF7B4',
- 'Acyrillic': u'\u0410',
- 'Adblgrave': u'\u0200',
- 'Adieresis': u'\u00C4',
- 'Adieresiscyrillic': u'\u04D2',
- 'Adieresismacron': u'\u01DE',
- 'Adieresissmall': u'\uF7E4',
- 'Adotbelow': u'\u1EA0',
- 'Adotmacron': u'\u01E0',
- 'Agrave': u'\u00C0',
- 'Agravesmall': u'\uF7E0',
- 'Ahookabove': u'\u1EA2',
- 'Aiecyrillic': u'\u04D4',
- 'Ainvertedbreve': u'\u0202',
- 'Alpha': u'\u0391',
- 'Alphatonos': u'\u0386',
- 'Amacron': u'\u0100',
- 'Amonospace': u'\uFF21',
- 'Aogonek': u'\u0104',
- 'Aring': u'\u00C5',
- 'Aringacute': u'\u01FA',
- 'Aringbelow': u'\u1E00',
- 'Aringsmall': u'\uF7E5',
- 'Asmall': u'\uF761',
- 'Atilde': u'\u00C3',
- 'Atildesmall': u'\uF7E3',
- 'Aybarmenian': u'\u0531',
- 'B': u'\u0042',
- 'Bcircle': u'\u24B7',
- 'Bdotaccent': u'\u1E02',
- 'Bdotbelow': u'\u1E04',
- 'Becyrillic': u'\u0411',
- 'Benarmenian': u'\u0532',
- 'Beta': u'\u0392',
- 'Bhook': u'\u0181',
- 'Blinebelow': u'\u1E06',
- 'Bmonospace': u'\uFF22',
- 'Brevesmall': u'\uF6F4',
- 'Bsmall': u'\uF762',
- 'Btopbar': u'\u0182',
- 'C': u'\u0043',
- 'Caarmenian': u'\u053E',
- 'Cacute': u'\u0106',
- 'Caron': u'\uF6CA',
- 'Caronsmall': u'\uF6F5',
- 'Ccaron': u'\u010C',
- 'Ccedilla': u'\u00C7',
- 'Ccedillaacute': u'\u1E08',
- 'Ccedillasmall': u'\uF7E7',
- 'Ccircle': u'\u24B8',
- 'Ccircumflex': u'\u0108',
- 'Cdot': u'\u010A',
- 'Cdotaccent': u'\u010A',
- 'Cedillasmall': u'\uF7B8',
- 'Chaarmenian': u'\u0549',
- 'Cheabkhasiancyrillic': u'\u04BC',
- 'Checyrillic': u'\u0427',
- 'Chedescenderabkhasiancyrillic': u'\u04BE',
- 'Chedescendercyrillic': u'\u04B6',
- 'Chedieresiscyrillic': u'\u04F4',
- 'Cheharmenian': u'\u0543',
- 'Chekhakassiancyrillic': u'\u04CB',
- 'Cheverticalstrokecyrillic': u'\u04B8',
- 'Chi': u'\u03A7',
- 'Chook': u'\u0187',
- 'Circumflexsmall': u'\uF6F6',
- 'Cmonospace': u'\uFF23',
- 'Coarmenian': u'\u0551',
- 'Csmall': u'\uF763',
- 'D': u'\u0044',
- 'DZ': u'\u01F1',
- 'DZcaron': u'\u01C4',
- 'Daarmenian': u'\u0534',
- 'Dafrican': u'\u0189',
- 'Dcaron': u'\u010E',
- 'Dcedilla': u'\u1E10',
- 'Dcircle': u'\u24B9',
- 'Dcircumflexbelow': u'\u1E12',
- 'Dcroat': u'\u0110',
- 'Ddotaccent': u'\u1E0A',
- 'Ddotbelow': u'\u1E0C',
- 'Decyrillic': u'\u0414',
- 'Deicoptic': u'\u03EE',
- 'Delta': u'\u2206',
- 'Deltagreek': u'\u0394',
- 'Dhook': u'\u018A',
- 'Dieresis': u'\uF6CB',
- 'DieresisAcute': u'\uF6CC',
- 'DieresisGrave': u'\uF6CD',
- 'Dieresissmall': u'\uF7A8',
- 'Digammagreek': u'\u03DC',
- 'Djecyrillic': u'\u0402',
- 'Dlinebelow': u'\u1E0E',
- 'Dmonospace': u'\uFF24',
- 'Dotaccentsmall': u'\uF6F7',
- 'Dslash': u'\u0110',
- 'Dsmall': u'\uF764',
- 'Dtopbar': u'\u018B',
- 'Dz': u'\u01F2',
- 'Dzcaron': u'\u01C5',
- 'Dzeabkhasiancyrillic': u'\u04E0',
- 'Dzecyrillic': u'\u0405',
- 'Dzhecyrillic': u'\u040F',
- 'E': u'\u0045',
- 'Eacute': u'\u00C9',
- 'Eacutesmall': u'\uF7E9',
- 'Ebreve': u'\u0114',
- 'Ecaron': u'\u011A',
- 'Ecedillabreve': u'\u1E1C',
- 'Echarmenian': u'\u0535',
- 'Ecircle': u'\u24BA',
- 'Ecircumflex': u'\u00CA',
- 'Ecircumflexacute': u'\u1EBE',
- 'Ecircumflexbelow': u'\u1E18',
- 'Ecircumflexdotbelow': u'\u1EC6',
- 'Ecircumflexgrave': u'\u1EC0',
- 'Ecircumflexhookabove': u'\u1EC2',
- 'Ecircumflexsmall': u'\uF7EA',
- 'Ecircumflextilde': u'\u1EC4',
- 'Ecyrillic': u'\u0404',
- 'Edblgrave': u'\u0204',
- 'Edieresis': u'\u00CB',
- 'Edieresissmall': u'\uF7EB',
- 'Edot': u'\u0116',
- 'Edotaccent': u'\u0116',
- 'Edotbelow': u'\u1EB8',
- 'Efcyrillic': u'\u0424',
- 'Egrave': u'\u00C8',
- 'Egravesmall': u'\uF7E8',
- 'Eharmenian': u'\u0537',
- 'Ehookabove': u'\u1EBA',
- 'Eightroman': u'\u2167',
- 'Einvertedbreve': u'\u0206',
- 'Eiotifiedcyrillic': u'\u0464',
- 'Elcyrillic': u'\u041B',
- 'Elevenroman': u'\u216A',
- 'Emacron': u'\u0112',
- 'Emacronacute': u'\u1E16',
- 'Emacrongrave': u'\u1E14',
- 'Emcyrillic': u'\u041C',
- 'Emonospace': u'\uFF25',
- 'Encyrillic': u'\u041D',
- 'Endescendercyrillic': u'\u04A2',
- 'Eng': u'\u014A',
- 'Enghecyrillic': u'\u04A4',
- 'Enhookcyrillic': u'\u04C7',
- 'Eogonek': u'\u0118',
- 'Eopen': u'\u0190',
- 'Epsilon': u'\u0395',
- 'Epsilontonos': u'\u0388',
- 'Ercyrillic': u'\u0420',
- 'Ereversed': u'\u018E',
- 'Ereversedcyrillic': u'\u042D',
- 'Escyrillic': u'\u0421',
- 'Esdescendercyrillic': u'\u04AA',
- 'Esh': u'\u01A9',
- 'Esmall': u'\uF765',
- 'Eta': u'\u0397',
- 'Etarmenian': u'\u0538',
- 'Etatonos': u'\u0389',
- 'Eth': u'\u00D0',
- 'Ethsmall': u'\uF7F0',
- 'Etilde': u'\u1EBC',
- 'Etildebelow': u'\u1E1A',
- 'Euro': u'\u20AC',
- 'Ezh': u'\u01B7',
- 'Ezhcaron': u'\u01EE',
- 'Ezhreversed': u'\u01B8',
- 'F': u'\u0046',
- 'Fcircle': u'\u24BB',
- 'Fdotaccent': u'\u1E1E',
- 'Feharmenian': u'\u0556',
- 'Feicoptic': u'\u03E4',
- 'Fhook': u'\u0191',
- 'Fitacyrillic': u'\u0472',
- 'Fiveroman': u'\u2164',
- 'Fmonospace': u'\uFF26',
- 'Fourroman': u'\u2163',
- 'Fsmall': u'\uF766',
- 'G': u'\u0047',
- 'GBsquare': u'\u3387',
- 'Gacute': u'\u01F4',
- 'Gamma': u'\u0393',
- 'Gammaafrican': u'\u0194',
- 'Gangiacoptic': u'\u03EA',
- 'Gbreve': u'\u011E',
- 'Gcaron': u'\u01E6',
- 'Gcedilla': u'\u0122',
- 'Gcircle': u'\u24BC',
- 'Gcircumflex': u'\u011C',
- 'Gcommaaccent': u'\u0122',
- 'Gdot': u'\u0120',
- 'Gdotaccent': u'\u0120',
- 'Gecyrillic': u'\u0413',
- 'Ghadarmenian': u'\u0542',
- 'Ghemiddlehookcyrillic': u'\u0494',
- 'Ghestrokecyrillic': u'\u0492',
- 'Gheupturncyrillic': u'\u0490',
- 'Ghook': u'\u0193',
- 'Gimarmenian': u'\u0533',
- 'Gjecyrillic': u'\u0403',
- 'Gmacron': u'\u1E20',
- 'Gmonospace': u'\uFF27',
- 'Grave': u'\uF6CE',
- 'Gravesmall': u'\uF760',
- 'Gsmall': u'\uF767',
- 'Gsmallhook': u'\u029B',
- 'Gstroke': u'\u01E4',
- 'H': u'\u0048',
- 'H18533': u'\u25CF',
- 'H18543': u'\u25AA',
- 'H18551': u'\u25AB',
- 'H22073': u'\u25A1',
- 'HPsquare': u'\u33CB',
- 'Haabkhasiancyrillic': u'\u04A8',
- 'Hadescendercyrillic': u'\u04B2',
- 'Hardsigncyrillic': u'\u042A',
- 'Hbar': u'\u0126',
- 'Hbrevebelow': u'\u1E2A',
- 'Hcedilla': u'\u1E28',
- 'Hcircle': u'\u24BD',
- 'Hcircumflex': u'\u0124',
- 'Hdieresis': u'\u1E26',
- 'Hdotaccent': u'\u1E22',
- 'Hdotbelow': u'\u1E24',
- 'Hmonospace': u'\uFF28',
- 'Hoarmenian': u'\u0540',
- 'Horicoptic': u'\u03E8',
- 'Hsmall': u'\uF768',
- 'Hungarumlaut': u'\uF6CF',
- 'Hungarumlautsmall': u'\uF6F8',
- 'Hzsquare': u'\u3390',
- 'I': u'\u0049',
- 'IAcyrillic': u'\u042F',
- 'IJ': u'\u0132',
- 'IUcyrillic': u'\u042E',
- 'Iacute': u'\u00CD',
- 'Iacutesmall': u'\uF7ED',
- 'Ibreve': u'\u012C',
- 'Icaron': u'\u01CF',
- 'Icircle': u'\u24BE',
- 'Icircumflex': u'\u00CE',
- 'Icircumflexsmall': u'\uF7EE',
- 'Icyrillic': u'\u0406',
- 'Idblgrave': u'\u0208',
- 'Idieresis': u'\u00CF',
- 'Idieresisacute': u'\u1E2E',
- 'Idieresiscyrillic': u'\u04E4',
- 'Idieresissmall': u'\uF7EF',
- 'Idot': u'\u0130',
- 'Idotaccent': u'\u0130',
- 'Idotbelow': u'\u1ECA',
- 'Iebrevecyrillic': u'\u04D6',
- 'Iecyrillic': u'\u0415',
- 'Ifraktur': u'\u2111',
- 'Igrave': u'\u00CC',
- 'Igravesmall': u'\uF7EC',
- 'Ihookabove': u'\u1EC8',
- 'Iicyrillic': u'\u0418',
- 'Iinvertedbreve': u'\u020A',
- 'Iishortcyrillic': u'\u0419',
- 'Imacron': u'\u012A',
- 'Imacroncyrillic': u'\u04E2',
- 'Imonospace': u'\uFF29',
- 'Iniarmenian': u'\u053B',
- 'Iocyrillic': u'\u0401',
- 'Iogonek': u'\u012E',
- 'Iota': u'\u0399',
- 'Iotaafrican': u'\u0196',
- 'Iotadieresis': u'\u03AA',
- 'Iotatonos': u'\u038A',
- 'Ismall': u'\uF769',
- 'Istroke': u'\u0197',
- 'Itilde': u'\u0128',
- 'Itildebelow': u'\u1E2C',
- 'Izhitsacyrillic': u'\u0474',
- 'Izhitsadblgravecyrillic': u'\u0476',
- 'J': u'\u004A',
- 'Jaarmenian': u'\u0541',
- 'Jcircle': u'\u24BF',
- 'Jcircumflex': u'\u0134',
- 'Jecyrillic': u'\u0408',
- 'Jheharmenian': u'\u054B',
- 'Jmonospace': u'\uFF2A',
- 'Jsmall': u'\uF76A',
- 'K': u'\u004B',
- 'KBsquare': u'\u3385',
- 'KKsquare': u'\u33CD',
- 'Kabashkircyrillic': u'\u04A0',
- 'Kacute': u'\u1E30',
- 'Kacyrillic': u'\u041A',
- 'Kadescendercyrillic': u'\u049A',
- 'Kahookcyrillic': u'\u04C3',
- 'Kappa': u'\u039A',
- 'Kastrokecyrillic': u'\u049E',
- 'Kaverticalstrokecyrillic': u'\u049C',
- 'Kcaron': u'\u01E8',
- 'Kcedilla': u'\u0136',
- 'Kcircle': u'\u24C0',
- 'Kcommaaccent': u'\u0136',
- 'Kdotbelow': u'\u1E32',
- 'Keharmenian': u'\u0554',
- 'Kenarmenian': u'\u053F',
- 'Khacyrillic': u'\u0425',
- 'Kheicoptic': u'\u03E6',
- 'Khook': u'\u0198',
- 'Kjecyrillic': u'\u040C',
- 'Klinebelow': u'\u1E34',
- 'Kmonospace': u'\uFF2B',
- 'Koppacyrillic': u'\u0480',
- 'Koppagreek': u'\u03DE',
- 'Ksicyrillic': u'\u046E',
- 'Ksmall': u'\uF76B',
- 'L': u'\u004C',
- 'LJ': u'\u01C7',
- 'LL': u'\uF6BF',
- 'Lacute': u'\u0139',
- 'Lambda': u'\u039B',
- 'Lcaron': u'\u013D',
- 'Lcedilla': u'\u013B',
- 'Lcircle': u'\u24C1',
- 'Lcircumflexbelow': u'\u1E3C',
- 'Lcommaaccent': u'\u013B',
- 'Ldot': u'\u013F',
- 'Ldotaccent': u'\u013F',
- 'Ldotbelow': u'\u1E36',
- 'Ldotbelowmacron': u'\u1E38',
- 'Liwnarmenian': u'\u053C',
- 'Lj': u'\u01C8',
- 'Ljecyrillic': u'\u0409',
- 'Llinebelow': u'\u1E3A',
- 'Lmonospace': u'\uFF2C',
- 'Lslash': u'\u0141',
- 'Lslashsmall': u'\uF6F9',
- 'Lsmall': u'\uF76C',
- 'M': u'\u004D',
- 'MBsquare': u'\u3386',
- 'Macron': u'\uF6D0',
- 'Macronsmall': u'\uF7AF',
- 'Macute': u'\u1E3E',
- 'Mcircle': u'\u24C2',
- 'Mdotaccent': u'\u1E40',
- 'Mdotbelow': u'\u1E42',
- 'Menarmenian': u'\u0544',
- 'Mmonospace': u'\uFF2D',
- 'Msmall': u'\uF76D',
- 'Mturned': u'\u019C',
- 'Mu': u'\u039C',
- 'N': u'\u004E',
- 'NJ': u'\u01CA',
- 'Nacute': u'\u0143',
- 'Ncaron': u'\u0147',
- 'Ncedilla': u'\u0145',
- 'Ncircle': u'\u24C3',
- 'Ncircumflexbelow': u'\u1E4A',
- 'Ncommaaccent': u'\u0145',
- 'Ndotaccent': u'\u1E44',
- 'Ndotbelow': u'\u1E46',
- 'Nhookleft': u'\u019D',
- 'Nineroman': u'\u2168',
- 'Nj': u'\u01CB',
- 'Njecyrillic': u'\u040A',
- 'Nlinebelow': u'\u1E48',
- 'Nmonospace': u'\uFF2E',
- 'Nowarmenian': u'\u0546',
- 'Nsmall': u'\uF76E',
- 'Ntilde': u'\u00D1',
- 'Ntildesmall': u'\uF7F1',
- 'Nu': u'\u039D',
- 'O': u'\u004F',
- 'OE': u'\u0152',
- 'OEsmall': u'\uF6FA',
- 'Oacute': u'\u00D3',
- 'Oacutesmall': u'\uF7F3',
- 'Obarredcyrillic': u'\u04E8',
- 'Obarreddieresiscyrillic': u'\u04EA',
- 'Obreve': u'\u014E',
- 'Ocaron': u'\u01D1',
- 'Ocenteredtilde': u'\u019F',
- 'Ocircle': u'\u24C4',
- 'Ocircumflex': u'\u00D4',
- 'Ocircumflexacute': u'\u1ED0',
- 'Ocircumflexdotbelow': u'\u1ED8',
- 'Ocircumflexgrave': u'\u1ED2',
- 'Ocircumflexhookabove': u'\u1ED4',
- 'Ocircumflexsmall': u'\uF7F4',
- 'Ocircumflextilde': u'\u1ED6',
- 'Ocyrillic': u'\u041E',
- 'Odblacute': u'\u0150',
- 'Odblgrave': u'\u020C',
- 'Odieresis': u'\u00D6',
- 'Odieresiscyrillic': u'\u04E6',
- 'Odieresissmall': u'\uF7F6',
- 'Odotbelow': u'\u1ECC',
- 'Ogoneksmall': u'\uF6FB',
- 'Ograve': u'\u00D2',
- 'Ogravesmall': u'\uF7F2',
- 'Oharmenian': u'\u0555',
- 'Ohm': u'\u2126',
- 'Ohookabove': u'\u1ECE',
- 'Ohorn': u'\u01A0',
- 'Ohornacute': u'\u1EDA',
- 'Ohorndotbelow': u'\u1EE2',
- 'Ohorngrave': u'\u1EDC',
- 'Ohornhookabove': u'\u1EDE',
- 'Ohorntilde': u'\u1EE0',
- 'Ohungarumlaut': u'\u0150',
- 'Oi': u'\u01A2',
- 'Oinvertedbreve': u'\u020E',
- 'Omacron': u'\u014C',
- 'Omacronacute': u'\u1E52',
- 'Omacrongrave': u'\u1E50',
- 'Omega': u'\u2126',
- 'Omegacyrillic': u'\u0460',
- 'Omegagreek': u'\u03A9',
- 'Omegaroundcyrillic': u'\u047A',
- 'Omegatitlocyrillic': u'\u047C',
- 'Omegatonos': u'\u038F',
- 'Omicron': u'\u039F',
- 'Omicrontonos': u'\u038C',
- 'Omonospace': u'\uFF2F',
- 'Oneroman': u'\u2160',
- 'Oogonek': u'\u01EA',
- 'Oogonekmacron': u'\u01EC',
- 'Oopen': u'\u0186',
- 'Oslash': u'\u00D8',
- 'Oslashacute': u'\u01FE',
- 'Oslashsmall': u'\uF7F8',
- 'Osmall': u'\uF76F',
- 'Ostrokeacute': u'\u01FE',
- 'Otcyrillic': u'\u047E',
- 'Otilde': u'\u00D5',
- 'Otildeacute': u'\u1E4C',
- 'Otildedieresis': u'\u1E4E',
- 'Otildesmall': u'\uF7F5',
- 'P': u'\u0050',
- 'Pacute': u'\u1E54',
- 'Pcircle': u'\u24C5',
- 'Pdotaccent': u'\u1E56',
- 'Pecyrillic': u'\u041F',
- 'Peharmenian': u'\u054A',
- 'Pemiddlehookcyrillic': u'\u04A6',
- 'Phi': u'\u03A6',
- 'Phook': u'\u01A4',
- 'Pi': u'\u03A0',
- 'Piwrarmenian': u'\u0553',
- 'Pmonospace': u'\uFF30',
- 'Psi': u'\u03A8',
- 'Psicyrillic': u'\u0470',
- 'Psmall': u'\uF770',
- 'Q': u'\u0051',
- 'Qcircle': u'\u24C6',
- 'Qmonospace': u'\uFF31',
- 'Qsmall': u'\uF771',
- 'R': u'\u0052',
- 'Raarmenian': u'\u054C',
- 'Racute': u'\u0154',
- 'Rcaron': u'\u0158',
- 'Rcedilla': u'\u0156',
- 'Rcircle': u'\u24C7',
- 'Rcommaaccent': u'\u0156',
- 'Rdblgrave': u'\u0210',
- 'Rdotaccent': u'\u1E58',
- 'Rdotbelow': u'\u1E5A',
- 'Rdotbelowmacron': u'\u1E5C',
- 'Reharmenian': u'\u0550',
- 'Rfraktur': u'\u211C',
- 'Rho': u'\u03A1',
- 'Ringsmall': u'\uF6FC',
- 'Rinvertedbreve': u'\u0212',
- 'Rlinebelow': u'\u1E5E',
- 'Rmonospace': u'\uFF32',
- 'Rsmall': u'\uF772',
- 'Rsmallinverted': u'\u0281',
- 'Rsmallinvertedsuperior': u'\u02B6',
- 'S': u'\u0053',
- 'SF010000': u'\u250C',
- 'SF020000': u'\u2514',
- 'SF030000': u'\u2510',
- 'SF040000': u'\u2518',
- 'SF050000': u'\u253C',
- 'SF060000': u'\u252C',
- 'SF070000': u'\u2534',
- 'SF080000': u'\u251C',
- 'SF090000': u'\u2524',
- 'SF100000': u'\u2500',
- 'SF110000': u'\u2502',
- 'SF190000': u'\u2561',
- 'SF200000': u'\u2562',
- 'SF210000': u'\u2556',
- 'SF220000': u'\u2555',
- 'SF230000': u'\u2563',
- 'SF240000': u'\u2551',
- 'SF250000': u'\u2557',
- 'SF260000': u'\u255D',
- 'SF270000': u'\u255C',
- 'SF280000': u'\u255B',
- 'SF360000': u'\u255E',
- 'SF370000': u'\u255F',
- 'SF380000': u'\u255A',
- 'SF390000': u'\u2554',
- 'SF400000': u'\u2569',
- 'SF410000': u'\u2566',
- 'SF420000': u'\u2560',
- 'SF430000': u'\u2550',
- 'SF440000': u'\u256C',
- 'SF450000': u'\u2567',
- 'SF460000': u'\u2568',
- 'SF470000': u'\u2564',
- 'SF480000': u'\u2565',
- 'SF490000': u'\u2559',
- 'SF500000': u'\u2558',
- 'SF510000': u'\u2552',
- 'SF520000': u'\u2553',
- 'SF530000': u'\u256B',
- 'SF540000': u'\u256A',
- 'Sacute': u'\u015A',
- 'Sacutedotaccent': u'\u1E64',
- 'Sampigreek': u'\u03E0',
- 'Scaron': u'\u0160',
- 'Scarondotaccent': u'\u1E66',
- 'Scaronsmall': u'\uF6FD',
- 'Scedilla': u'\u015E',
- 'Schwa': u'\u018F',
- 'Schwacyrillic': u'\u04D8',
- 'Schwadieresiscyrillic': u'\u04DA',
- 'Scircle': u'\u24C8',
- 'Scircumflex': u'\u015C',
- 'Scommaaccent': u'\u0218',
- 'Sdotaccent': u'\u1E60',
- 'Sdotbelow': u'\u1E62',
- 'Sdotbelowdotaccent': u'\u1E68',
- 'Seharmenian': u'\u054D',
- 'Sevenroman': u'\u2166',
- 'Shaarmenian': u'\u0547',
- 'Shacyrillic': u'\u0428',
- 'Shchacyrillic': u'\u0429',
- 'Sheicoptic': u'\u03E2',
- 'Shhacyrillic': u'\u04BA',
- 'Shimacoptic': u'\u03EC',
- 'Sigma': u'\u03A3',
- 'Sixroman': u'\u2165',
- 'Smonospace': u'\uFF33',
- 'Softsigncyrillic': u'\u042C',
- 'Ssmall': u'\uF773',
- 'Stigmagreek': u'\u03DA',
- 'T': u'\u0054',
- 'Tau': u'\u03A4',
- 'Tbar': u'\u0166',
- 'Tcaron': u'\u0164',
- 'Tcedilla': u'\u0162',
- 'Tcircle': u'\u24C9',
- 'Tcircumflexbelow': u'\u1E70',
- 'Tcommaaccent': u'\u0162',
- 'Tdotaccent': u'\u1E6A',
- 'Tdotbelow': u'\u1E6C',
- 'Tecyrillic': u'\u0422',
- 'Tedescendercyrillic': u'\u04AC',
- 'Tenroman': u'\u2169',
- 'Tetsecyrillic': u'\u04B4',
- 'Theta': u'\u0398',
- 'Thook': u'\u01AC',
- 'Thorn': u'\u00DE',
- 'Thornsmall': u'\uF7FE',
- 'Threeroman': u'\u2162',
- 'Tildesmall': u'\uF6FE',
- 'Tiwnarmenian': u'\u054F',
- 'Tlinebelow': u'\u1E6E',
- 'Tmonospace': u'\uFF34',
- 'Toarmenian': u'\u0539',
- 'Tonefive': u'\u01BC',
- 'Tonesix': u'\u0184',
- 'Tonetwo': u'\u01A7',
- 'Tretroflexhook': u'\u01AE',
- 'Tsecyrillic': u'\u0426',
- 'Tshecyrillic': u'\u040B',
- 'Tsmall': u'\uF774',
- 'Twelveroman': u'\u216B',
- 'Tworoman': u'\u2161',
- 'U': u'\u0055',
- 'Uacute': u'\u00DA',
- 'Uacutesmall': u'\uF7FA',
- 'Ubreve': u'\u016C',
- 'Ucaron': u'\u01D3',
- 'Ucircle': u'\u24CA',
- 'Ucircumflex': u'\u00DB',
- 'Ucircumflexbelow': u'\u1E76',
- 'Ucircumflexsmall': u'\uF7FB',
- 'Ucyrillic': u'\u0423',
- 'Udblacute': u'\u0170',
- 'Udblgrave': u'\u0214',
- 'Udieresis': u'\u00DC',
- 'Udieresisacute': u'\u01D7',
- 'Udieresisbelow': u'\u1E72',
- 'Udieresiscaron': u'\u01D9',
- 'Udieresiscyrillic': u'\u04F0',
- 'Udieresisgrave': u'\u01DB',
- 'Udieresismacron': u'\u01D5',
- 'Udieresissmall': u'\uF7FC',
- 'Udotbelow': u'\u1EE4',
- 'Ugrave': u'\u00D9',
- 'Ugravesmall': u'\uF7F9',
- 'Uhookabove': u'\u1EE6',
- 'Uhorn': u'\u01AF',
- 'Uhornacute': u'\u1EE8',
- 'Uhorndotbelow': u'\u1EF0',
- 'Uhorngrave': u'\u1EEA',
- 'Uhornhookabove': u'\u1EEC',
- 'Uhorntilde': u'\u1EEE',
- 'Uhungarumlaut': u'\u0170',
- 'Uhungarumlautcyrillic': u'\u04F2',
- 'Uinvertedbreve': u'\u0216',
- 'Ukcyrillic': u'\u0478',
- 'Umacron': u'\u016A',
- 'Umacroncyrillic': u'\u04EE',
- 'Umacrondieresis': u'\u1E7A',
- 'Umonospace': u'\uFF35',
- 'Uogonek': u'\u0172',
- 'Upsilon': u'\u03A5',
- 'Upsilon1': u'\u03D2',
- 'Upsilonacutehooksymbolgreek': u'\u03D3',
- 'Upsilonafrican': u'\u01B1',
- 'Upsilondieresis': u'\u03AB',
- 'Upsilondieresishooksymbolgreek': u'\u03D4',
- 'Upsilonhooksymbol': u'\u03D2',
- 'Upsilontonos': u'\u038E',
- 'Uring': u'\u016E',
- 'Ushortcyrillic': u'\u040E',
- 'Usmall': u'\uF775',
- 'Ustraightcyrillic': u'\u04AE',
- 'Ustraightstrokecyrillic': u'\u04B0',
- 'Utilde': u'\u0168',
- 'Utildeacute': u'\u1E78',
- 'Utildebelow': u'\u1E74',
- 'V': u'\u0056',
- 'Vcircle': u'\u24CB',
- 'Vdotbelow': u'\u1E7E',
- 'Vecyrillic': u'\u0412',
- 'Vewarmenian': u'\u054E',
- 'Vhook': u'\u01B2',
- 'Vmonospace': u'\uFF36',
- 'Voarmenian': u'\u0548',
- 'Vsmall': u'\uF776',
- 'Vtilde': u'\u1E7C',
- 'W': u'\u0057',
- 'Wacute': u'\u1E82',
- 'Wcircle': u'\u24CC',
- 'Wcircumflex': u'\u0174',
- 'Wdieresis': u'\u1E84',
- 'Wdotaccent': u'\u1E86',
- 'Wdotbelow': u'\u1E88',
- 'Wgrave': u'\u1E80',
- 'Wmonospace': u'\uFF37',
- 'Wsmall': u'\uF777',
- 'X': u'\u0058',
- 'Xcircle': u'\u24CD',
- 'Xdieresis': u'\u1E8C',
- 'Xdotaccent': u'\u1E8A',
- 'Xeharmenian': u'\u053D',
- 'Xi': u'\u039E',
- 'Xmonospace': u'\uFF38',
- 'Xsmall': u'\uF778',
- 'Y': u'\u0059',
- 'Yacute': u'\u00DD',
- 'Yacutesmall': u'\uF7FD',
- 'Yatcyrillic': u'\u0462',
- 'Ycircle': u'\u24CE',
- 'Ycircumflex': u'\u0176',
- 'Ydieresis': u'\u0178',
- 'Ydieresissmall': u'\uF7FF',
- 'Ydotaccent': u'\u1E8E',
- 'Ydotbelow': u'\u1EF4',
- 'Yericyrillic': u'\u042B',
- 'Yerudieresiscyrillic': u'\u04F8',
- 'Ygrave': u'\u1EF2',
- 'Yhook': u'\u01B3',
- 'Yhookabove': u'\u1EF6',
- 'Yiarmenian': u'\u0545',
- 'Yicyrillic': u'\u0407',
- 'Yiwnarmenian': u'\u0552',
- 'Ymonospace': u'\uFF39',
- 'Ysmall': u'\uF779',
- 'Ytilde': u'\u1EF8',
- 'Yusbigcyrillic': u'\u046A',
- 'Yusbigiotifiedcyrillic': u'\u046C',
- 'Yuslittlecyrillic': u'\u0466',
- 'Yuslittleiotifiedcyrillic': u'\u0468',
- 'Z': u'\u005A',
- 'Zaarmenian': u'\u0536',
- 'Zacute': u'\u0179',
- 'Zcaron': u'\u017D',
- 'Zcaronsmall': u'\uF6FF',
- 'Zcircle': u'\u24CF',
- 'Zcircumflex': u'\u1E90',
- 'Zdot': u'\u017B',
- 'Zdotaccent': u'\u017B',
- 'Zdotbelow': u'\u1E92',
- 'Zecyrillic': u'\u0417',
- 'Zedescendercyrillic': u'\u0498',
- 'Zedieresiscyrillic': u'\u04DE',
- 'Zeta': u'\u0396',
- 'Zhearmenian': u'\u053A',
- 'Zhebrevecyrillic': u'\u04C1',
- 'Zhecyrillic': u'\u0416',
- 'Zhedescendercyrillic': u'\u0496',
- 'Zhedieresiscyrillic': u'\u04DC',
- 'Zlinebelow': u'\u1E94',
- 'Zmonospace': u'\uFF3A',
- 'Zsmall': u'\uF77A',
- 'Zstroke': u'\u01B5',
- 'a': u'\u0061',
- 'aabengali': u'\u0986',
- 'aacute': u'\u00E1',
- 'aadeva': u'\u0906',
- 'aagujarati': u'\u0A86',
- 'aagurmukhi': u'\u0A06',
- 'aamatragurmukhi': u'\u0A3E',
- 'aarusquare': u'\u3303',
- 'aavowelsignbengali': u'\u09BE',
- 'aavowelsigndeva': u'\u093E',
- 'aavowelsigngujarati': u'\u0ABE',
- 'abbreviationmarkarmenian': u'\u055F',
- 'abbreviationsigndeva': u'\u0970',
- 'abengali': u'\u0985',
- 'abopomofo': u'\u311A',
- 'abreve': u'\u0103',
- 'abreveacute': u'\u1EAF',
- 'abrevecyrillic': u'\u04D1',
- 'abrevedotbelow': u'\u1EB7',
- 'abrevegrave': u'\u1EB1',
- 'abrevehookabove': u'\u1EB3',
- 'abrevetilde': u'\u1EB5',
- 'acaron': u'\u01CE',
- 'acircle': u'\u24D0',
- 'acircumflex': u'\u00E2',
- 'acircumflexacute': u'\u1EA5',
- 'acircumflexdotbelow': u'\u1EAD',
- 'acircumflexgrave': u'\u1EA7',
- 'acircumflexhookabove': u'\u1EA9',
- 'acircumflextilde': u'\u1EAB',
- 'acute': u'\u00B4',
- 'acutebelowcmb': u'\u0317',
- 'acutecmb': u'\u0301',
- 'acutecomb': u'\u0301',
- 'acutedeva': u'\u0954',
- 'acutelowmod': u'\u02CF',
- 'acutetonecmb': u'\u0341',
- 'acyrillic': u'\u0430',
- 'adblgrave': u'\u0201',
- 'addakgurmukhi': u'\u0A71',
- 'adeva': u'\u0905',
- 'adieresis': u'\u00E4',
- 'adieresiscyrillic': u'\u04D3',
- 'adieresismacron': u'\u01DF',
- 'adotbelow': u'\u1EA1',
- 'adotmacron': u'\u01E1',
- 'ae': u'\u00E6',
- 'aeacute': u'\u01FD',
- 'aekorean': u'\u3150',
- 'aemacron': u'\u01E3',
- 'afii00208': u'\u2015',
- 'afii08941': u'\u20A4',
- 'afii10017': u'\u0410',
- 'afii10018': u'\u0411',
- 'afii10019': u'\u0412',
- 'afii10020': u'\u0413',
- 'afii10021': u'\u0414',
- 'afii10022': u'\u0415',
- 'afii10023': u'\u0401',
- 'afii10024': u'\u0416',
- 'afii10025': u'\u0417',
- 'afii10026': u'\u0418',
- 'afii10027': u'\u0419',
- 'afii10028': u'\u041A',
- 'afii10029': u'\u041B',
- 'afii10030': u'\u041C',
- 'afii10031': u'\u041D',
- 'afii10032': u'\u041E',
- 'afii10033': u'\u041F',
- 'afii10034': u'\u0420',
- 'afii10035': u'\u0421',
- 'afii10036': u'\u0422',
- 'afii10037': u'\u0423',
- 'afii10038': u'\u0424',
- 'afii10039': u'\u0425',
- 'afii10040': u'\u0426',
- 'afii10041': u'\u0427',
- 'afii10042': u'\u0428',
- 'afii10043': u'\u0429',
- 'afii10044': u'\u042A',
- 'afii10045': u'\u042B',
- 'afii10046': u'\u042C',
- 'afii10047': u'\u042D',
- 'afii10048': u'\u042E',
- 'afii10049': u'\u042F',
- 'afii10050': u'\u0490',
- 'afii10051': u'\u0402',
- 'afii10052': u'\u0403',
- 'afii10053': u'\u0404',
- 'afii10054': u'\u0405',
- 'afii10055': u'\u0406',
- 'afii10056': u'\u0407',
- 'afii10057': u'\u0408',
- 'afii10058': u'\u0409',
- 'afii10059': u'\u040A',
- 'afii10060': u'\u040B',
- 'afii10061': u'\u040C',
- 'afii10062': u'\u040E',
- 'afii10063': u'\uF6C4',
- 'afii10064': u'\uF6C5',
- 'afii10065': u'\u0430',
- 'afii10066': u'\u0431',
- 'afii10067': u'\u0432',
- 'afii10068': u'\u0433',
- 'afii10069': u'\u0434',
- 'afii10070': u'\u0435',
- 'afii10071': u'\u0451',
- 'afii10072': u'\u0436',
- 'afii10073': u'\u0437',
- 'afii10074': u'\u0438',
- 'afii10075': u'\u0439',
- 'afii10076': u'\u043A',
- 'afii10077': u'\u043B',
- 'afii10078': u'\u043C',
- 'afii10079': u'\u043D',
- 'afii10080': u'\u043E',
- 'afii10081': u'\u043F',
- 'afii10082': u'\u0440',
- 'afii10083': u'\u0441',
- 'afii10084': u'\u0442',
- 'afii10085': u'\u0443',
- 'afii10086': u'\u0444',
- 'afii10087': u'\u0445',
- 'afii10088': u'\u0446',
- 'afii10089': u'\u0447',
- 'afii10090': u'\u0448',
- 'afii10091': u'\u0449',
- 'afii10092': u'\u044A',
- 'afii10093': u'\u044B',
- 'afii10094': u'\u044C',
- 'afii10095': u'\u044D',
- 'afii10096': u'\u044E',
- 'afii10097': u'\u044F',
- 'afii10098': u'\u0491',
- 'afii10099': u'\u0452',
- 'afii10100': u'\u0453',
- 'afii10101': u'\u0454',
- 'afii10102': u'\u0455',
- 'afii10103': u'\u0456',
- 'afii10104': u'\u0457',
- 'afii10105': u'\u0458',
- 'afii10106': u'\u0459',
- 'afii10107': u'\u045A',
- 'afii10108': u'\u045B',
- 'afii10109': u'\u045C',
- 'afii10110': u'\u045E',
- 'afii10145': u'\u040F',
- 'afii10146': u'\u0462',
- 'afii10147': u'\u0472',
- 'afii10148': u'\u0474',
- 'afii10192': u'\uF6C6',
- 'afii10193': u'\u045F',
- 'afii10194': u'\u0463',
- 'afii10195': u'\u0473',
- 'afii10196': u'\u0475',
- 'afii10831': u'\uF6C7',
- 'afii10832': u'\uF6C8',
- 'afii10846': u'\u04D9',
- 'afii299': u'\u200E',
- 'afii300': u'\u200F',
- 'afii301': u'\u200D',
- 'afii57381': u'\u066A',
- 'afii57388': u'\u060C',
- 'afii57392': u'\u0660',
- 'afii57393': u'\u0661',
- 'afii57394': u'\u0662',
- 'afii57395': u'\u0663',
- 'afii57396': u'\u0664',
- 'afii57397': u'\u0665',
- 'afii57398': u'\u0666',
- 'afii57399': u'\u0667',
- 'afii57400': u'\u0668',
- 'afii57401': u'\u0669',
- 'afii57403': u'\u061B',
- 'afii57407': u'\u061F',
- 'afii57409': u'\u0621',
- 'afii57410': u'\u0622',
- 'afii57411': u'\u0623',
- 'afii57412': u'\u0624',
- 'afii57413': u'\u0625',
- 'afii57414': u'\u0626',
- 'afii57415': u'\u0627',
- 'afii57416': u'\u0628',
- 'afii57417': u'\u0629',
- 'afii57418': u'\u062A',
- 'afii57419': u'\u062B',
- 'afii57420': u'\u062C',
- 'afii57421': u'\u062D',
- 'afii57422': u'\u062E',
- 'afii57423': u'\u062F',
- 'afii57424': u'\u0630',
- 'afii57425': u'\u0631',
- 'afii57426': u'\u0632',
- 'afii57427': u'\u0633',
- 'afii57428': u'\u0634',
- 'afii57429': u'\u0635',
- 'afii57430': u'\u0636',
- 'afii57431': u'\u0637',
- 'afii57432': u'\u0638',
- 'afii57433': u'\u0639',
- 'afii57434': u'\u063A',
- 'afii57440': u'\u0640',
- 'afii57441': u'\u0641',
- 'afii57442': u'\u0642',
- 'afii57443': u'\u0643',
- 'afii57444': u'\u0644',
- 'afii57445': u'\u0645',
- 'afii57446': u'\u0646',
- 'afii57448': u'\u0648',
- 'afii57449': u'\u0649',
- 'afii57450': u'\u064A',
- 'afii57451': u'\u064B',
- 'afii57452': u'\u064C',
- 'afii57453': u'\u064D',
- 'afii57454': u'\u064E',
- 'afii57455': u'\u064F',
- 'afii57456': u'\u0650',
- 'afii57457': u'\u0651',
- 'afii57458': u'\u0652',
- 'afii57470': u'\u0647',
- 'afii57505': u'\u06A4',
- 'afii57506': u'\u067E',
- 'afii57507': u'\u0686',
- 'afii57508': u'\u0698',
- 'afii57509': u'\u06AF',
- 'afii57511': u'\u0679',
- 'afii57512': u'\u0688',
- 'afii57513': u'\u0691',
- 'afii57514': u'\u06BA',
- 'afii57519': u'\u06D2',
- 'afii57534': u'\u06D5',
- 'afii57636': u'\u20AA',
- 'afii57645': u'\u05BE',
- 'afii57658': u'\u05C3',
- 'afii57664': u'\u05D0',
- 'afii57665': u'\u05D1',
- 'afii57666': u'\u05D2',
- 'afii57667': u'\u05D3',
- 'afii57668': u'\u05D4',
- 'afii57669': u'\u05D5',
- 'afii57670': u'\u05D6',
- 'afii57671': u'\u05D7',
- 'afii57672': u'\u05D8',
- 'afii57673': u'\u05D9',
- 'afii57674': u'\u05DA',
- 'afii57675': u'\u05DB',
- 'afii57676': u'\u05DC',
- 'afii57677': u'\u05DD',
- 'afii57678': u'\u05DE',
- 'afii57679': u'\u05DF',
- 'afii57680': u'\u05E0',
- 'afii57681': u'\u05E1',
- 'afii57682': u'\u05E2',
- 'afii57683': u'\u05E3',
- 'afii57684': u'\u05E4',
- 'afii57685': u'\u05E5',
- 'afii57686': u'\u05E6',
- 'afii57687': u'\u05E7',
- 'afii57688': u'\u05E8',
- 'afii57689': u'\u05E9',
- 'afii57690': u'\u05EA',
- 'afii57694': u'\uFB2A',
- 'afii57695': u'\uFB2B',
- 'afii57700': u'\uFB4B',
- 'afii57705': u'\uFB1F',
- 'afii57716': u'\u05F0',
- 'afii57717': u'\u05F1',
- 'afii57718': u'\u05F2',
- 'afii57723': u'\uFB35',
- 'afii57793': u'\u05B4',
- 'afii57794': u'\u05B5',
- 'afii57795': u'\u05B6',
- 'afii57796': u'\u05BB',
- 'afii57797': u'\u05B8',
- 'afii57798': u'\u05B7',
- 'afii57799': u'\u05B0',
- 'afii57800': u'\u05B2',
- 'afii57801': u'\u05B1',
- 'afii57802': u'\u05B3',
- 'afii57803': u'\u05C2',
- 'afii57804': u'\u05C1',
- 'afii57806': u'\u05B9',
- 'afii57807': u'\u05BC',
- 'afii57839': u'\u05BD',
- 'afii57841': u'\u05BF',
- 'afii57842': u'\u05C0',
- 'afii57929': u'\u02BC',
- 'afii61248': u'\u2105',
- 'afii61289': u'\u2113',
- 'afii61352': u'\u2116',
- 'afii61573': u'\u202C',
- 'afii61574': u'\u202D',
- 'afii61575': u'\u202E',
- 'afii61664': u'\u200C',
- 'afii63167': u'\u066D',
- 'afii64937': u'\u02BD',
- 'agrave': u'\u00E0',
- 'agujarati': u'\u0A85',
- 'agurmukhi': u'\u0A05',
- 'ahiragana': u'\u3042',
- 'ahookabove': u'\u1EA3',
- 'aibengali': u'\u0990',
- 'aibopomofo': u'\u311E',
- 'aideva': u'\u0910',
- 'aiecyrillic': u'\u04D5',
- 'aigujarati': u'\u0A90',
- 'aigurmukhi': u'\u0A10',
- 'aimatragurmukhi': u'\u0A48',
- 'ainarabic': u'\u0639',
- 'ainfinalarabic': u'\uFECA',
- 'aininitialarabic': u'\uFECB',
- 'ainmedialarabic': u'\uFECC',
- 'ainvertedbreve': u'\u0203',
- 'aivowelsignbengali': u'\u09C8',
- 'aivowelsigndeva': u'\u0948',
- 'aivowelsigngujarati': u'\u0AC8',
- 'akatakana': u'\u30A2',
- 'akatakanahalfwidth': u'\uFF71',
- 'akorean': u'\u314F',
- 'alef': u'\u05D0',
- 'alefarabic': u'\u0627',
- 'alefdageshhebrew': u'\uFB30',
- 'aleffinalarabic': u'\uFE8E',
- 'alefhamzaabovearabic': u'\u0623',
- 'alefhamzaabovefinalarabic': u'\uFE84',
- 'alefhamzabelowarabic': u'\u0625',
- 'alefhamzabelowfinalarabic': u'\uFE88',
- 'alefhebrew': u'\u05D0',
- 'aleflamedhebrew': u'\uFB4F',
- 'alefmaddaabovearabic': u'\u0622',
- 'alefmaddaabovefinalarabic': u'\uFE82',
- 'alefmaksuraarabic': u'\u0649',
- 'alefmaksurafinalarabic': u'\uFEF0',
- 'alefmaksurainitialarabic': u'\uFEF3',
- 'alefmaksuramedialarabic': u'\uFEF4',
- 'alefpatahhebrew': u'\uFB2E',
- 'alefqamatshebrew': u'\uFB2F',
- 'aleph': u'\u2135',
- 'allequal': u'\u224C',
- 'alpha': u'\u03B1',
- 'alphatonos': u'\u03AC',
- 'amacron': u'\u0101',
- 'amonospace': u'\uFF41',
- 'ampersand': u'\u0026',
- 'ampersandmonospace': u'\uFF06',
- 'ampersandsmall': u'\uF726',
- 'amsquare': u'\u33C2',
- 'anbopomofo': u'\u3122',
- 'angbopomofo': u'\u3124',
- 'angkhankhuthai': u'\u0E5A',
- 'angle': u'\u2220',
- 'anglebracketleft': u'\u3008',
- 'anglebracketleftvertical': u'\uFE3F',
- 'anglebracketright': u'\u3009',
- 'anglebracketrightvertical': u'\uFE40',
- 'angleleft': u'\u2329',
- 'angleright': u'\u232A',
- 'angstrom': u'\u212B',
- 'anoteleia': u'\u0387',
- 'anudattadeva': u'\u0952',
- 'anusvarabengali': u'\u0982',
- 'anusvaradeva': u'\u0902',
- 'anusvaragujarati': u'\u0A82',
- 'aogonek': u'\u0105',
- 'apaatosquare': u'\u3300',
- 'aparen': u'\u249C',
- 'apostrophearmenian': u'\u055A',
- 'apostrophemod': u'\u02BC',
- 'apple': u'\uF8FF',
- 'approaches': u'\u2250',
- 'approxequal': u'\u2248',
- 'approxequalorimage': u'\u2252',
- 'approximatelyequal': u'\u2245',
- 'araeaekorean': u'\u318E',
- 'araeakorean': u'\u318D',
- 'arc': u'\u2312',
- 'arighthalfring': u'\u1E9A',
- 'aring': u'\u00E5',
- 'aringacute': u'\u01FB',
- 'aringbelow': u'\u1E01',
- 'arrowboth': u'\u2194',
- 'arrowdashdown': u'\u21E3',
- 'arrowdashleft': u'\u21E0',
- 'arrowdashright': u'\u21E2',
- 'arrowdashup': u'\u21E1',
- 'arrowdblboth': u'\u21D4',
- 'arrowdbldown': u'\u21D3',
- 'arrowdblleft': u'\u21D0',
- 'arrowdblright': u'\u21D2',
- 'arrowdblup': u'\u21D1',
- 'arrowdown': u'\u2193',
- 'arrowdownleft': u'\u2199',
- 'arrowdownright': u'\u2198',
- 'arrowdownwhite': u'\u21E9',
- 'arrowheaddownmod': u'\u02C5',
- 'arrowheadleftmod': u'\u02C2',
- 'arrowheadrightmod': u'\u02C3',
- 'arrowheadupmod': u'\u02C4',
- 'arrowhorizex': u'\uF8E7',
- 'arrowleft': u'\u2190',
- 'arrowleftdbl': u'\u21D0',
- 'arrowleftdblstroke': u'\u21CD',
- 'arrowleftoverright': u'\u21C6',
- 'arrowleftwhite': u'\u21E6',
- 'arrowright': u'\u2192',
- 'arrowrightdblstroke': u'\u21CF',
- 'arrowrightheavy': u'\u279E',
- 'arrowrightoverleft': u'\u21C4',
- 'arrowrightwhite': u'\u21E8',
- 'arrowtableft': u'\u21E4',
- 'arrowtabright': u'\u21E5',
- 'arrowup': u'\u2191',
- 'arrowupdn': u'\u2195',
- 'arrowupdnbse': u'\u21A8',
- 'arrowupdownbase': u'\u21A8',
- 'arrowupleft': u'\u2196',
- 'arrowupleftofdown': u'\u21C5',
- 'arrowupright': u'\u2197',
- 'arrowupwhite': u'\u21E7',
- 'arrowvertex': u'\uF8E6',
- 'asciicircum': u'\u005E',
- 'asciicircummonospace': u'\uFF3E',
- 'asciitilde': u'\u007E',
- 'asciitildemonospace': u'\uFF5E',
- 'ascript': u'\u0251',
- 'ascriptturned': u'\u0252',
- 'asmallhiragana': u'\u3041',
- 'asmallkatakana': u'\u30A1',
- 'asmallkatakanahalfwidth': u'\uFF67',
- 'asterisk': u'\u002A',
- 'asteriskaltonearabic': u'\u066D',
- 'asteriskarabic': u'\u066D',
- 'asteriskmath': u'\u2217',
- 'asteriskmonospace': u'\uFF0A',
- 'asterisksmall': u'\uFE61',
- 'asterism': u'\u2042',
- 'asuperior': u'\uF6E9',
- 'asymptoticallyequal': u'\u2243',
- 'at': u'\u0040',
- 'atilde': u'\u00E3',
- 'atmonospace': u'\uFF20',
- 'atsmall': u'\uFE6B',
- 'aturned': u'\u0250',
- 'aubengali': u'\u0994',
- 'aubopomofo': u'\u3120',
- 'audeva': u'\u0914',
- 'augujarati': u'\u0A94',
- 'augurmukhi': u'\u0A14',
- 'aulengthmarkbengali': u'\u09D7',
- 'aumatragurmukhi': u'\u0A4C',
- 'auvowelsignbengali': u'\u09CC',
- 'auvowelsigndeva': u'\u094C',
- 'auvowelsigngujarati': u'\u0ACC',
- 'avagrahadeva': u'\u093D',
- 'aybarmenian': u'\u0561',
- 'ayin': u'\u05E2',
- 'ayinaltonehebrew': u'\uFB20',
- 'ayinhebrew': u'\u05E2',
- 'b': u'\u0062',
- 'babengali': u'\u09AC',
- 'backslash': u'\u005C',
- 'backslashmonospace': u'\uFF3C',
- 'badeva': u'\u092C',
- 'bagujarati': u'\u0AAC',
- 'bagurmukhi': u'\u0A2C',
- 'bahiragana': u'\u3070',
- 'bahtthai': u'\u0E3F',
- 'bakatakana': u'\u30D0',
- 'bar': u'\u007C',
- 'barmonospace': u'\uFF5C',
- 'bbopomofo': u'\u3105',
- 'bcircle': u'\u24D1',
- 'bdotaccent': u'\u1E03',
- 'bdotbelow': u'\u1E05',
- 'beamedsixteenthnotes': u'\u266C',
- 'because': u'\u2235',
- 'becyrillic': u'\u0431',
- 'beharabic': u'\u0628',
- 'behfinalarabic': u'\uFE90',
- 'behinitialarabic': u'\uFE91',
- 'behiragana': u'\u3079',
- 'behmedialarabic': u'\uFE92',
- 'behmeeminitialarabic': u'\uFC9F',
- 'behmeemisolatedarabic': u'\uFC08',
- 'behnoonfinalarabic': u'\uFC6D',
- 'bekatakana': u'\u30D9',
- 'benarmenian': u'\u0562',
- 'bet': u'\u05D1',
- 'beta': u'\u03B2',
- 'betasymbolgreek': u'\u03D0',
- 'betdagesh': u'\uFB31',
- 'betdageshhebrew': u'\uFB31',
- 'bethebrew': u'\u05D1',
- 'betrafehebrew': u'\uFB4C',
- 'bhabengali': u'\u09AD',
- 'bhadeva': u'\u092D',
- 'bhagujarati': u'\u0AAD',
- 'bhagurmukhi': u'\u0A2D',
- 'bhook': u'\u0253',
- 'bihiragana': u'\u3073',
- 'bikatakana': u'\u30D3',
- 'bilabialclick': u'\u0298',
- 'bindigurmukhi': u'\u0A02',
- 'birusquare': u'\u3331',
- 'blackcircle': u'\u25CF',
- 'blackdiamond': u'\u25C6',
- 'blackdownpointingtriangle': u'\u25BC',
- 'blackleftpointingpointer': u'\u25C4',
- 'blackleftpointingtriangle': u'\u25C0',
- 'blacklenticularbracketleft': u'\u3010',
- 'blacklenticularbracketleftvertical': u'\uFE3B',
- 'blacklenticularbracketright': u'\u3011',
- 'blacklenticularbracketrightvertical': u'\uFE3C',
- 'blacklowerlefttriangle': u'\u25E3',
- 'blacklowerrighttriangle': u'\u25E2',
- 'blackrectangle': u'\u25AC',
- 'blackrightpointingpointer': u'\u25BA',
- 'blackrightpointingtriangle': u'\u25B6',
- 'blacksmallsquare': u'\u25AA',
- 'blacksmilingface': u'\u263B',
- 'blacksquare': u'\u25A0',
- 'blackstar': u'\u2605',
- 'blackupperlefttriangle': u'\u25E4',
- 'blackupperrighttriangle': u'\u25E5',
- 'blackuppointingsmalltriangle': u'\u25B4',
- 'blackuppointingtriangle': u'\u25B2',
- 'blank': u'\u2423',
- 'blinebelow': u'\u1E07',
- 'block': u'\u2588',
- 'bmonospace': u'\uFF42',
- 'bobaimaithai': u'\u0E1A',
- 'bohiragana': u'\u307C',
- 'bokatakana': u'\u30DC',
- 'bparen': u'\u249D',
- 'bqsquare': u'\u33C3',
- 'braceex': u'\uF8F4',
- 'braceleft': u'\u007B',
- 'braceleftbt': u'\uF8F3',
- 'braceleftmid': u'\uF8F2',
- 'braceleftmonospace': u'\uFF5B',
- 'braceleftsmall': u'\uFE5B',
- 'bracelefttp': u'\uF8F1',
- 'braceleftvertical': u'\uFE37',
- 'braceright': u'\u007D',
- 'bracerightbt': u'\uF8FE',
- 'bracerightmid': u'\uF8FD',
- 'bracerightmonospace': u'\uFF5D',
- 'bracerightsmall': u'\uFE5C',
- 'bracerighttp': u'\uF8FC',
- 'bracerightvertical': u'\uFE38',
- 'bracketleft': u'\u005B',
- 'bracketleftbt': u'\uF8F0',
- 'bracketleftex': u'\uF8EF',
- 'bracketleftmonospace': u'\uFF3B',
- 'bracketlefttp': u'\uF8EE',
- 'bracketright': u'\u005D',
- 'bracketrightbt': u'\uF8FB',
- 'bracketrightex': u'\uF8FA',
- 'bracketrightmonospace': u'\uFF3D',
- 'bracketrighttp': u'\uF8F9',
- 'breve': u'\u02D8',
- 'brevebelowcmb': u'\u032E',
- 'brevecmb': u'\u0306',
- 'breveinvertedbelowcmb': u'\u032F',
- 'breveinvertedcmb': u'\u0311',
- 'breveinverteddoublecmb': u'\u0361',
- 'bridgebelowcmb': u'\u032A',
- 'bridgeinvertedbelowcmb': u'\u033A',
- 'brokenbar': u'\u00A6',
- 'bstroke': u'\u0180',
- 'bsuperior': u'\uF6EA',
- 'btopbar': u'\u0183',
- 'buhiragana': u'\u3076',
- 'bukatakana': u'\u30D6',
- 'bullet': u'\u2022',
- 'bulletinverse': u'\u25D8',
- 'bulletoperator': u'\u2219',
- 'bullseye': u'\u25CE',
- 'c': u'\u0063',
- 'caarmenian': u'\u056E',
- 'cabengali': u'\u099A',
- 'cacute': u'\u0107',
- 'cadeva': u'\u091A',
- 'cagujarati': u'\u0A9A',
- 'cagurmukhi': u'\u0A1A',
- 'calsquare': u'\u3388',
- 'candrabindubengali': u'\u0981',
- 'candrabinducmb': u'\u0310',
- 'candrabindudeva': u'\u0901',
- 'candrabindugujarati': u'\u0A81',
- 'capslock': u'\u21EA',
- 'careof': u'\u2105',
- 'caron': u'\u02C7',
- 'caronbelowcmb': u'\u032C',
- 'caroncmb': u'\u030C',
- 'carriagereturn': u'\u21B5',
- 'cbopomofo': u'\u3118',
- 'ccaron': u'\u010D',
- 'ccedilla': u'\u00E7',
- 'ccedillaacute': u'\u1E09',
- 'ccircle': u'\u24D2',
- 'ccircumflex': u'\u0109',
- 'ccurl': u'\u0255',
- 'cdot': u'\u010B',
- 'cdotaccent': u'\u010B',
- 'cdsquare': u'\u33C5',
- 'cedilla': u'\u00B8',
- 'cedillacmb': u'\u0327',
- 'cent': u'\u00A2',
- 'centigrade': u'\u2103',
- 'centinferior': u'\uF6DF',
- 'centmonospace': u'\uFFE0',
- 'centoldstyle': u'\uF7A2',
- 'centsuperior': u'\uF6E0',
- 'chaarmenian': u'\u0579',
- 'chabengali': u'\u099B',
- 'chadeva': u'\u091B',
- 'chagujarati': u'\u0A9B',
- 'chagurmukhi': u'\u0A1B',
- 'chbopomofo': u'\u3114',
- 'cheabkhasiancyrillic': u'\u04BD',
- 'checkmark': u'\u2713',
- 'checyrillic': u'\u0447',
- 'chedescenderabkhasiancyrillic': u'\u04BF',
- 'chedescendercyrillic': u'\u04B7',
- 'chedieresiscyrillic': u'\u04F5',
- 'cheharmenian': u'\u0573',
- 'chekhakassiancyrillic': u'\u04CC',
- 'cheverticalstrokecyrillic': u'\u04B9',
- 'chi': u'\u03C7',
- 'chieuchacirclekorean': u'\u3277',
- 'chieuchaparenkorean': u'\u3217',
- 'chieuchcirclekorean': u'\u3269',
- 'chieuchkorean': u'\u314A',
- 'chieuchparenkorean': u'\u3209',
- 'chochangthai': u'\u0E0A',
- 'chochanthai': u'\u0E08',
- 'chochingthai': u'\u0E09',
- 'chochoethai': u'\u0E0C',
- 'chook': u'\u0188',
- 'cieucacirclekorean': u'\u3276',
- 'cieucaparenkorean': u'\u3216',
- 'cieuccirclekorean': u'\u3268',
- 'cieuckorean': u'\u3148',
- 'cieucparenkorean': u'\u3208',
- 'cieucuparenkorean': u'\u321C',
- 'circle': u'\u25CB',
- 'circlemultiply': u'\u2297',
- 'circleot': u'\u2299',
- 'circleplus': u'\u2295',
- 'circlepostalmark': u'\u3036',
- 'circlewithlefthalfblack': u'\u25D0',
- 'circlewithrighthalfblack': u'\u25D1',
- 'circumflex': u'\u02C6',
- 'circumflexbelowcmb': u'\u032D',
- 'circumflexcmb': u'\u0302',
- 'clear': u'\u2327',
- 'clickalveolar': u'\u01C2',
- 'clickdental': u'\u01C0',
- 'clicklateral': u'\u01C1',
- 'clickretroflex': u'\u01C3',
- 'club': u'\u2663',
- 'clubsuitblack': u'\u2663',
- 'clubsuitwhite': u'\u2667',
- 'cmcubedsquare': u'\u33A4',
- 'cmonospace': u'\uFF43',
- 'cmsquaredsquare': u'\u33A0',
- 'coarmenian': u'\u0581',
- 'colon': u'\u003A',
- 'colonmonetary': u'\u20A1',
- 'colonmonospace': u'\uFF1A',
- 'colonsign': u'\u20A1',
- 'colonsmall': u'\uFE55',
- 'colontriangularhalfmod': u'\u02D1',
- 'colontriangularmod': u'\u02D0',
- 'comma': u'\u002C',
- 'commaabovecmb': u'\u0313',
- 'commaaboverightcmb': u'\u0315',
- 'commaaccent': u'\uF6C3',
- 'commaarabic': u'\u060C',
- 'commaarmenian': u'\u055D',
- 'commainferior': u'\uF6E1',
- 'commamonospace': u'\uFF0C',
- 'commareversedabovecmb': u'\u0314',
- 'commareversedmod': u'\u02BD',
- 'commasmall': u'\uFE50',
- 'commasuperior': u'\uF6E2',
- 'commaturnedabovecmb': u'\u0312',
- 'commaturnedmod': u'\u02BB',
- 'compass': u'\u263C',
- 'congruent': u'\u2245',
- 'contourintegral': u'\u222E',
- 'control': u'\u2303',
- 'controlACK': u'\u0006',
- 'controlBEL': u'\u0007',
- 'controlBS': u'\u0008',
- 'controlCAN': u'\u0018',
- 'controlCR': u'\u000D',
- 'controlDC1': u'\u0011',
- 'controlDC2': u'\u0012',
- 'controlDC3': u'\u0013',
- 'controlDC4': u'\u0014',
- 'controlDEL': u'\u007F',
- 'controlDLE': u'\u0010',
- 'controlEM': u'\u0019',
- 'controlENQ': u'\u0005',
- 'controlEOT': u'\u0004',
- 'controlESC': u'\u001B',
- 'controlETB': u'\u0017',
- 'controlETX': u'\u0003',
- 'controlFF': u'\u000C',
- 'controlFS': u'\u001C',
- 'controlGS': u'\u001D',
- 'controlHT': u'\u0009',
- 'controlLF': u'\u000A',
- 'controlNAK': u'\u0015',
- 'controlRS': u'\u001E',
- 'controlSI': u'\u000F',
- 'controlSO': u'\u000E',
- 'controlSOT': u'\u0002',
- 'controlSTX': u'\u0001',
- 'controlSUB': u'\u001A',
- 'controlSYN': u'\u0016',
- 'controlUS': u'\u001F',
- 'controlVT': u'\u000B',
- 'copyright': u'\u00A9',
- 'copyrightsans': u'\uF8E9',
- 'copyrightserif': u'\uF6D9',
- 'cornerbracketleft': u'\u300C',
- 'cornerbracketlefthalfwidth': u'\uFF62',
- 'cornerbracketleftvertical': u'\uFE41',
- 'cornerbracketright': u'\u300D',
- 'cornerbracketrighthalfwidth': u'\uFF63',
- 'cornerbracketrightvertical': u'\uFE42',
- 'corporationsquare': u'\u337F',
- 'cosquare': u'\u33C7',
- 'coverkgsquare': u'\u33C6',
- 'cparen': u'\u249E',
- 'cruzeiro': u'\u20A2',
- 'cstretched': u'\u0297',
- 'curlyand': u'\u22CF',
- 'curlyor': u'\u22CE',
- 'currency': u'\u00A4',
- 'cyrBreve': u'\uF6D1',
- 'cyrFlex': u'\uF6D2',
- 'cyrbreve': u'\uF6D4',
- 'cyrflex': u'\uF6D5',
- 'd': u'\u0064',
- 'daarmenian': u'\u0564',
- 'dabengali': u'\u09A6',
- 'dadarabic': u'\u0636',
- 'dadeva': u'\u0926',
- 'dadfinalarabic': u'\uFEBE',
- 'dadinitialarabic': u'\uFEBF',
- 'dadmedialarabic': u'\uFEC0',
- 'dagesh': u'\u05BC',
- 'dageshhebrew': u'\u05BC',
- 'dagger': u'\u2020',
- 'daggerdbl': u'\u2021',
- 'dagujarati': u'\u0AA6',
- 'dagurmukhi': u'\u0A26',
- 'dahiragana': u'\u3060',
- 'dakatakana': u'\u30C0',
- 'dalarabic': u'\u062F',
- 'dalet': u'\u05D3',
- 'daletdagesh': u'\uFB33',
- 'daletdageshhebrew': u'\uFB33',
- 'dalethatafpatah': u'\u05D3\u05B2',
- 'dalethatafpatahhebrew': u'\u05D3\u05B2',
- 'dalethatafsegol': u'\u05D3\u05B1',
- 'dalethatafsegolhebrew': u'\u05D3\u05B1',
- 'dalethebrew': u'\u05D3',
- 'dalethiriq': u'\u05D3\u05B4',
- 'dalethiriqhebrew': u'\u05D3\u05B4',
- 'daletholam': u'\u05D3\u05B9',
- 'daletholamhebrew': u'\u05D3\u05B9',
- 'daletpatah': u'\u05D3\u05B7',
- 'daletpatahhebrew': u'\u05D3\u05B7',
- 'daletqamats': u'\u05D3\u05B8',
- 'daletqamatshebrew': u'\u05D3\u05B8',
- 'daletqubuts': u'\u05D3\u05BB',
- 'daletqubutshebrew': u'\u05D3\u05BB',
- 'daletsegol': u'\u05D3\u05B6',
- 'daletsegolhebrew': u'\u05D3\u05B6',
- 'daletsheva': u'\u05D3\u05B0',
- 'daletshevahebrew': u'\u05D3\u05B0',
- 'dalettsere': u'\u05D3\u05B5',
- 'dalettserehebrew': u'\u05D3\u05B5',
- 'dalfinalarabic': u'\uFEAA',
- 'dammaarabic': u'\u064F',
- 'dammalowarabic': u'\u064F',
- 'dammatanaltonearabic': u'\u064C',
- 'dammatanarabic': u'\u064C',
- 'danda': u'\u0964',
- 'dargahebrew': u'\u05A7',
- 'dargalefthebrew': u'\u05A7',
- 'dasiapneumatacyrilliccmb': u'\u0485',
- 'dblGrave': u'\uF6D3',
- 'dblanglebracketleft': u'\u300A',
- 'dblanglebracketleftvertical': u'\uFE3D',
- 'dblanglebracketright': u'\u300B',
- 'dblanglebracketrightvertical': u'\uFE3E',
- 'dblarchinvertedbelowcmb': u'\u032B',
- 'dblarrowleft': u'\u21D4',
- 'dblarrowright': u'\u21D2',
- 'dbldanda': u'\u0965',
- 'dblgrave': u'\uF6D6',
- 'dblgravecmb': u'\u030F',
- 'dblintegral': u'\u222C',
- 'dbllowline': u'\u2017',
- 'dbllowlinecmb': u'\u0333',
- 'dbloverlinecmb': u'\u033F',
- 'dblprimemod': u'\u02BA',
- 'dblverticalbar': u'\u2016',
- 'dblverticallineabovecmb': u'\u030E',
- 'dbopomofo': u'\u3109',
- 'dbsquare': u'\u33C8',
- 'dcaron': u'\u010F',
- 'dcedilla': u'\u1E11',
- 'dcircle': u'\u24D3',
- 'dcircumflexbelow': u'\u1E13',
- 'dcroat': u'\u0111',
- 'ddabengali': u'\u09A1',
- 'ddadeva': u'\u0921',
- 'ddagujarati': u'\u0AA1',
- 'ddagurmukhi': u'\u0A21',
- 'ddalarabic': u'\u0688',
- 'ddalfinalarabic': u'\uFB89',
- 'dddhadeva': u'\u095C',
- 'ddhabengali': u'\u09A2',
- 'ddhadeva': u'\u0922',
- 'ddhagujarati': u'\u0AA2',
- 'ddhagurmukhi': u'\u0A22',
- 'ddotaccent': u'\u1E0B',
- 'ddotbelow': u'\u1E0D',
- 'decimalseparatorarabic': u'\u066B',
- 'decimalseparatorpersian': u'\u066B',
- 'decyrillic': u'\u0434',
- 'degree': u'\u00B0',
- 'dehihebrew': u'\u05AD',
- 'dehiragana': u'\u3067',
- 'deicoptic': u'\u03EF',
- 'dekatakana': u'\u30C7',
- 'deleteleft': u'\u232B',
- 'deleteright': u'\u2326',
- 'delta': u'\u03B4',
- 'deltaturned': u'\u018D',
- 'denominatorminusonenumeratorbengali': u'\u09F8',
- 'dezh': u'\u02A4',
- 'dhabengali': u'\u09A7',
- 'dhadeva': u'\u0927',
- 'dhagujarati': u'\u0AA7',
- 'dhagurmukhi': u'\u0A27',
- 'dhook': u'\u0257',
- 'dialytikatonos': u'\u0385',
- 'dialytikatonoscmb': u'\u0344',
- 'diamond': u'\u2666',
- 'diamondsuitwhite': u'\u2662',
- 'dieresis': u'\u00A8',
- 'dieresisacute': u'\uF6D7',
- 'dieresisbelowcmb': u'\u0324',
- 'dieresiscmb': u'\u0308',
- 'dieresisgrave': u'\uF6D8',
- 'dieresistonos': u'\u0385',
- 'dihiragana': u'\u3062',
- 'dikatakana': u'\u30C2',
- 'dittomark': u'\u3003',
- 'divide': u'\u00F7',
- 'divides': u'\u2223',
- 'divisionslash': u'\u2215',
- 'djecyrillic': u'\u0452',
- 'dkshade': u'\u2593',
- 'dlinebelow': u'\u1E0F',
- 'dlsquare': u'\u3397',
- 'dmacron': u'\u0111',
- 'dmonospace': u'\uFF44',
- 'dnblock': u'\u2584',
- 'dochadathai': u'\u0E0E',
- 'dodekthai': u'\u0E14',
- 'dohiragana': u'\u3069',
- 'dokatakana': u'\u30C9',
- 'dollar': u'\u0024',
- 'dollarinferior': u'\uF6E3',
- 'dollarmonospace': u'\uFF04',
- 'dollaroldstyle': u'\uF724',
- 'dollarsmall': u'\uFE69',
- 'dollarsuperior': u'\uF6E4',
- 'dong': u'\u20AB',
- 'dorusquare': u'\u3326',
- 'dotaccent': u'\u02D9',
- 'dotaccentcmb': u'\u0307',
- 'dotbelowcmb': u'\u0323',
- 'dotbelowcomb': u'\u0323',
- 'dotkatakana': u'\u30FB',
- 'dotlessi': u'\u0131',
- 'dotlessj': u'\uF6BE',
- 'dotlessjstrokehook': u'\u0284',
- 'dotmath': u'\u22C5',
- 'dottedcircle': u'\u25CC',
- 'doubleyodpatah': u'\uFB1F',
- 'doubleyodpatahhebrew': u'\uFB1F',
- 'downtackbelowcmb': u'\u031E',
- 'downtackmod': u'\u02D5',
- 'dparen': u'\u249F',
- 'dsuperior': u'\uF6EB',
- 'dtail': u'\u0256',
- 'dtopbar': u'\u018C',
- 'duhiragana': u'\u3065',
- 'dukatakana': u'\u30C5',
- 'dz': u'\u01F3',
- 'dzaltone': u'\u02A3',
- 'dzcaron': u'\u01C6',
- 'dzcurl': u'\u02A5',
- 'dzeabkhasiancyrillic': u'\u04E1',
- 'dzecyrillic': u'\u0455',
- 'dzhecyrillic': u'\u045F',
- 'e': u'\u0065',
- 'eacute': u'\u00E9',
- 'earth': u'\u2641',
- 'ebengali': u'\u098F',
- 'ebopomofo': u'\u311C',
- 'ebreve': u'\u0115',
- 'ecandradeva': u'\u090D',
- 'ecandragujarati': u'\u0A8D',
- 'ecandravowelsigndeva': u'\u0945',
- 'ecandravowelsigngujarati': u'\u0AC5',
- 'ecaron': u'\u011B',
- 'ecedillabreve': u'\u1E1D',
- 'echarmenian': u'\u0565',
- 'echyiwnarmenian': u'\u0587',
- 'ecircle': u'\u24D4',
- 'ecircumflex': u'\u00EA',
- 'ecircumflexacute': u'\u1EBF',
- 'ecircumflexbelow': u'\u1E19',
- 'ecircumflexdotbelow': u'\u1EC7',
- 'ecircumflexgrave': u'\u1EC1',
- 'ecircumflexhookabove': u'\u1EC3',
- 'ecircumflextilde': u'\u1EC5',
- 'ecyrillic': u'\u0454',
- 'edblgrave': u'\u0205',
- 'edeva': u'\u090F',
- 'edieresis': u'\u00EB',
- 'edot': u'\u0117',
- 'edotaccent': u'\u0117',
- 'edotbelow': u'\u1EB9',
- 'eegurmukhi': u'\u0A0F',
- 'eematragurmukhi': u'\u0A47',
- 'efcyrillic': u'\u0444',
- 'egrave': u'\u00E8',
- 'egujarati': u'\u0A8F',
- 'eharmenian': u'\u0567',
- 'ehbopomofo': u'\u311D',
- 'ehiragana': u'\u3048',
- 'ehookabove': u'\u1EBB',
- 'eibopomofo': u'\u311F',
- 'eight': u'\u0038',
- 'eightarabic': u'\u0668',
- 'eightbengali': u'\u09EE',
- 'eightcircle': u'\u2467',
- 'eightcircleinversesansserif': u'\u2791',
- 'eightdeva': u'\u096E',
- 'eighteencircle': u'\u2471',
- 'eighteenparen': u'\u2485',
- 'eighteenperiod': u'\u2499',
- 'eightgujarati': u'\u0AEE',
- 'eightgurmukhi': u'\u0A6E',
- 'eighthackarabic': u'\u0668',
- 'eighthangzhou': u'\u3028',
- 'eighthnotebeamed': u'\u266B',
- 'eightideographicparen': u'\u3227',
- 'eightinferior': u'\u2088',
- 'eightmonospace': u'\uFF18',
- 'eightoldstyle': u'\uF738',
- 'eightparen': u'\u247B',
- 'eightperiod': u'\u248F',
- 'eightpersian': u'\u06F8',
- 'eightroman': u'\u2177',
- 'eightsuperior': u'\u2078',
- 'eightthai': u'\u0E58',
- 'einvertedbreve': u'\u0207',
- 'eiotifiedcyrillic': u'\u0465',
- 'ekatakana': u'\u30A8',
- 'ekatakanahalfwidth': u'\uFF74',
- 'ekonkargurmukhi': u'\u0A74',
- 'ekorean': u'\u3154',
- 'elcyrillic': u'\u043B',
- 'element': u'\u2208',
- 'elevencircle': u'\u246A',
- 'elevenparen': u'\u247E',
- 'elevenperiod': u'\u2492',
- 'elevenroman': u'\u217A',
- 'ellipsis': u'\u2026',
- 'ellipsisvertical': u'\u22EE',
- 'emacron': u'\u0113',
- 'emacronacute': u'\u1E17',
- 'emacrongrave': u'\u1E15',
- 'emcyrillic': u'\u043C',
- 'emdash': u'\u2014',
- 'emdashvertical': u'\uFE31',
- 'emonospace': u'\uFF45',
- 'emphasismarkarmenian': u'\u055B',
- 'emptyset': u'\u2205',
- 'enbopomofo': u'\u3123',
- 'encyrillic': u'\u043D',
- 'endash': u'\u2013',
- 'endashvertical': u'\uFE32',
- 'endescendercyrillic': u'\u04A3',
- 'eng': u'\u014B',
- 'engbopomofo': u'\u3125',
- 'enghecyrillic': u'\u04A5',
- 'enhookcyrillic': u'\u04C8',
- 'enspace': u'\u2002',
- 'eogonek': u'\u0119',
- 'eokorean': u'\u3153',
- 'eopen': u'\u025B',
- 'eopenclosed': u'\u029A',
- 'eopenreversed': u'\u025C',
- 'eopenreversedclosed': u'\u025E',
- 'eopenreversedhook': u'\u025D',
- 'eparen': u'\u24A0',
- 'epsilon': u'\u03B5',
- 'epsilontonos': u'\u03AD',
- 'equal': u'\u003D',
- 'equalmonospace': u'\uFF1D',
- 'equalsmall': u'\uFE66',
- 'equalsuperior': u'\u207C',
- 'equivalence': u'\u2261',
- 'erbopomofo': u'\u3126',
- 'ercyrillic': u'\u0440',
- 'ereversed': u'\u0258',
- 'ereversedcyrillic': u'\u044D',
- 'escyrillic': u'\u0441',
- 'esdescendercyrillic': u'\u04AB',
- 'esh': u'\u0283',
- 'eshcurl': u'\u0286',
- 'eshortdeva': u'\u090E',
- 'eshortvowelsigndeva': u'\u0946',
- 'eshreversedloop': u'\u01AA',
- 'eshsquatreversed': u'\u0285',
- 'esmallhiragana': u'\u3047',
- 'esmallkatakana': u'\u30A7',
- 'esmallkatakanahalfwidth': u'\uFF6A',
- 'estimated': u'\u212E',
- 'esuperior': u'\uF6EC',
- 'eta': u'\u03B7',
- 'etarmenian': u'\u0568',
- 'etatonos': u'\u03AE',
- 'eth': u'\u00F0',
- 'etilde': u'\u1EBD',
- 'etildebelow': u'\u1E1B',
- 'etnahtafoukhhebrew': u'\u0591',
- 'etnahtafoukhlefthebrew': u'\u0591',
- 'etnahtahebrew': u'\u0591',
- 'etnahtalefthebrew': u'\u0591',
- 'eturned': u'\u01DD',
- 'eukorean': u'\u3161',
- 'euro': u'\u20AC',
- 'evowelsignbengali': u'\u09C7',
- 'evowelsigndeva': u'\u0947',
- 'evowelsigngujarati': u'\u0AC7',
- 'exclam': u'\u0021',
- 'exclamarmenian': u'\u055C',
- 'exclamdbl': u'\u203C',
- 'exclamdown': u'\u00A1',
- 'exclamdownsmall': u'\uF7A1',
- 'exclammonospace': u'\uFF01',
- 'exclamsmall': u'\uF721',
- 'existential': u'\u2203',
- 'ezh': u'\u0292',
- 'ezhcaron': u'\u01EF',
- 'ezhcurl': u'\u0293',
- 'ezhreversed': u'\u01B9',
- 'ezhtail': u'\u01BA',
- 'f': u'\u0066',
- 'fadeva': u'\u095E',
- 'fagurmukhi': u'\u0A5E',
- 'fahrenheit': u'\u2109',
- 'fathaarabic': u'\u064E',
- 'fathalowarabic': u'\u064E',
- 'fathatanarabic': u'\u064B',
- 'fbopomofo': u'\u3108',
- 'fcircle': u'\u24D5',
- 'fdotaccent': u'\u1E1F',
- 'feharabic': u'\u0641',
- 'feharmenian': u'\u0586',
- 'fehfinalarabic': u'\uFED2',
- 'fehinitialarabic': u'\uFED3',
- 'fehmedialarabic': u'\uFED4',
- 'feicoptic': u'\u03E5',
- 'female': u'\u2640',
- 'ff': u'\uFB00',
- 'ffi': u'\uFB03',
- 'ffl': u'\uFB04',
- 'fi': u'\uFB01',
- 'fifteencircle': u'\u246E',
- 'fifteenparen': u'\u2482',
- 'fifteenperiod': u'\u2496',
- 'figuredash': u'\u2012',
- 'filledbox': u'\u25A0',
- 'filledrect': u'\u25AC',
- 'finalkaf': u'\u05DA',
- 'finalkafdagesh': u'\uFB3A',
- 'finalkafdageshhebrew': u'\uFB3A',
- 'finalkafhebrew': u'\u05DA',
- 'finalkafqamats': u'\u05DA\u05B8',
- 'finalkafqamatshebrew': u'\u05DA\u05B8',
- 'finalkafsheva': u'\u05DA\u05B0',
- 'finalkafshevahebrew': u'\u05DA\u05B0',
- 'finalmem': u'\u05DD',
- 'finalmemhebrew': u'\u05DD',
- 'finalnun': u'\u05DF',
- 'finalnunhebrew': u'\u05DF',
- 'finalpe': u'\u05E3',
- 'finalpehebrew': u'\u05E3',
- 'finaltsadi': u'\u05E5',
- 'finaltsadihebrew': u'\u05E5',
- 'firsttonechinese': u'\u02C9',
- 'fisheye': u'\u25C9',
- 'fitacyrillic': u'\u0473',
- 'five': u'\u0035',
- 'fivearabic': u'\u0665',
- 'fivebengali': u'\u09EB',
- 'fivecircle': u'\u2464',
- 'fivecircleinversesansserif': u'\u278E',
- 'fivedeva': u'\u096B',
- 'fiveeighths': u'\u215D',
- 'fivegujarati': u'\u0AEB',
- 'fivegurmukhi': u'\u0A6B',
- 'fivehackarabic': u'\u0665',
- 'fivehangzhou': u'\u3025',
- 'fiveideographicparen': u'\u3224',
- 'fiveinferior': u'\u2085',
- 'fivemonospace': u'\uFF15',
- 'fiveoldstyle': u'\uF735',
- 'fiveparen': u'\u2478',
- 'fiveperiod': u'\u248C',
- 'fivepersian': u'\u06F5',
- 'fiveroman': u'\u2174',
- 'fivesuperior': u'\u2075',
- 'fivethai': u'\u0E55',
- 'fl': u'\uFB02',
- 'florin': u'\u0192',
- 'fmonospace': u'\uFF46',
- 'fmsquare': u'\u3399',
- 'fofanthai': u'\u0E1F',
- 'fofathai': u'\u0E1D',
- 'fongmanthai': u'\u0E4F',
- 'forall': u'\u2200',
- 'four': u'\u0034',
- 'fourarabic': u'\u0664',
- 'fourbengali': u'\u09EA',
- 'fourcircle': u'\u2463',
- 'fourcircleinversesansserif': u'\u278D',
- 'fourdeva': u'\u096A',
- 'fourgujarati': u'\u0AEA',
- 'fourgurmukhi': u'\u0A6A',
- 'fourhackarabic': u'\u0664',
- 'fourhangzhou': u'\u3024',
- 'fourideographicparen': u'\u3223',
- 'fourinferior': u'\u2084',
- 'fourmonospace': u'\uFF14',
- 'fournumeratorbengali': u'\u09F7',
- 'fouroldstyle': u'\uF734',
- 'fourparen': u'\u2477',
- 'fourperiod': u'\u248B',
- 'fourpersian': u'\u06F4',
- 'fourroman': u'\u2173',
- 'foursuperior': u'\u2074',
- 'fourteencircle': u'\u246D',
- 'fourteenparen': u'\u2481',
- 'fourteenperiod': u'\u2495',
- 'fourthai': u'\u0E54',
- 'fourthtonechinese': u'\u02CB',
- 'fparen': u'\u24A1',
- 'fraction': u'\u2044',
- 'franc': u'\u20A3',
- 'g': u'\u0067',
- 'gabengali': u'\u0997',
- 'gacute': u'\u01F5',
- 'gadeva': u'\u0917',
- 'gafarabic': u'\u06AF',
- 'gaffinalarabic': u'\uFB93',
- 'gafinitialarabic': u'\uFB94',
- 'gafmedialarabic': u'\uFB95',
- 'gagujarati': u'\u0A97',
- 'gagurmukhi': u'\u0A17',
- 'gahiragana': u'\u304C',
- 'gakatakana': u'\u30AC',
- 'gamma': u'\u03B3',
- 'gammalatinsmall': u'\u0263',
- 'gammasuperior': u'\u02E0',
- 'gangiacoptic': u'\u03EB',
- 'gbopomofo': u'\u310D',
- 'gbreve': u'\u011F',
- 'gcaron': u'\u01E7',
- 'gcedilla': u'\u0123',
- 'gcircle': u'\u24D6',
- 'gcircumflex': u'\u011D',
- 'gcommaaccent': u'\u0123',
- 'gdot': u'\u0121',
- 'gdotaccent': u'\u0121',
- 'gecyrillic': u'\u0433',
- 'gehiragana': u'\u3052',
- 'gekatakana': u'\u30B2',
- 'geometricallyequal': u'\u2251',
- 'gereshaccenthebrew': u'\u059C',
- 'gereshhebrew': u'\u05F3',
- 'gereshmuqdamhebrew': u'\u059D',
- 'germandbls': u'\u00DF',
- 'gershayimaccenthebrew': u'\u059E',
- 'gershayimhebrew': u'\u05F4',
- 'getamark': u'\u3013',
- 'ghabengali': u'\u0998',
- 'ghadarmenian': u'\u0572',
- 'ghadeva': u'\u0918',
- 'ghagujarati': u'\u0A98',
- 'ghagurmukhi': u'\u0A18',
- 'ghainarabic': u'\u063A',
- 'ghainfinalarabic': u'\uFECE',
- 'ghaininitialarabic': u'\uFECF',
- 'ghainmedialarabic': u'\uFED0',
- 'ghemiddlehookcyrillic': u'\u0495',
- 'ghestrokecyrillic': u'\u0493',
- 'gheupturncyrillic': u'\u0491',
- 'ghhadeva': u'\u095A',
- 'ghhagurmukhi': u'\u0A5A',
- 'ghook': u'\u0260',
- 'ghzsquare': u'\u3393',
- 'gihiragana': u'\u304E',
- 'gikatakana': u'\u30AE',
- 'gimarmenian': u'\u0563',
- 'gimel': u'\u05D2',
- 'gimeldagesh': u'\uFB32',
- 'gimeldageshhebrew': u'\uFB32',
- 'gimelhebrew': u'\u05D2',
- 'gjecyrillic': u'\u0453',
- 'glottalinvertedstroke': u'\u01BE',
- 'glottalstop': u'\u0294',
- 'glottalstopinverted': u'\u0296',
- 'glottalstopmod': u'\u02C0',
- 'glottalstopreversed': u'\u0295',
- 'glottalstopreversedmod': u'\u02C1',
- 'glottalstopreversedsuperior': u'\u02E4',
- 'glottalstopstroke': u'\u02A1',
- 'glottalstopstrokereversed': u'\u02A2',
- 'gmacron': u'\u1E21',
- 'gmonospace': u'\uFF47',
- 'gohiragana': u'\u3054',
- 'gokatakana': u'\u30B4',
- 'gparen': u'\u24A2',
- 'gpasquare': u'\u33AC',
- 'gradient': u'\u2207',
- 'grave': u'\u0060',
- 'gravebelowcmb': u'\u0316',
- 'gravecmb': u'\u0300',
- 'gravecomb': u'\u0300',
- 'gravedeva': u'\u0953',
- 'gravelowmod': u'\u02CE',
- 'gravemonospace': u'\uFF40',
- 'gravetonecmb': u'\u0340',
- 'greater': u'\u003E',
- 'greaterequal': u'\u2265',
- 'greaterequalorless': u'\u22DB',
- 'greatermonospace': u'\uFF1E',
- 'greaterorequivalent': u'\u2273',
- 'greaterorless': u'\u2277',
- 'greateroverequal': u'\u2267',
- 'greatersmall': u'\uFE65',
- 'gscript': u'\u0261',
- 'gstroke': u'\u01E5',
- 'guhiragana': u'\u3050',
- 'guillemotleft': u'\u00AB',
- 'guillemotright': u'\u00BB',
- 'guilsinglleft': u'\u2039',
- 'guilsinglright': u'\u203A',
- 'gukatakana': u'\u30B0',
- 'guramusquare': u'\u3318',
- 'gysquare': u'\u33C9',
- 'h': u'\u0068',
- 'haabkhasiancyrillic': u'\u04A9',
- 'haaltonearabic': u'\u06C1',
- 'habengali': u'\u09B9',
- 'hadescendercyrillic': u'\u04B3',
- 'hadeva': u'\u0939',
- 'hagujarati': u'\u0AB9',
- 'hagurmukhi': u'\u0A39',
- 'haharabic': u'\u062D',
- 'hahfinalarabic': u'\uFEA2',
- 'hahinitialarabic': u'\uFEA3',
- 'hahiragana': u'\u306F',
- 'hahmedialarabic': u'\uFEA4',
- 'haitusquare': u'\u332A',
- 'hakatakana': u'\u30CF',
- 'hakatakanahalfwidth': u'\uFF8A',
- 'halantgurmukhi': u'\u0A4D',
- 'hamzaarabic': u'\u0621',
- 'hamzadammaarabic': u'\u0621\u064F',
- 'hamzadammatanarabic': u'\u0621\u064C',
- 'hamzafathaarabic': u'\u0621\u064E',
- 'hamzafathatanarabic': u'\u0621\u064B',
- 'hamzalowarabic': u'\u0621',
- 'hamzalowkasraarabic': u'\u0621\u0650',
- 'hamzalowkasratanarabic': u'\u0621\u064D',
- 'hamzasukunarabic': u'\u0621\u0652',
- 'hangulfiller': u'\u3164',
- 'hardsigncyrillic': u'\u044A',
- 'harpoonleftbarbup': u'\u21BC',
- 'harpoonrightbarbup': u'\u21C0',
- 'hasquare': u'\u33CA',
- 'hatafpatah': u'\u05B2',
- 'hatafpatah16': u'\u05B2',
- 'hatafpatah23': u'\u05B2',
- 'hatafpatah2f': u'\u05B2',
- 'hatafpatahhebrew': u'\u05B2',
- 'hatafpatahnarrowhebrew': u'\u05B2',
- 'hatafpatahquarterhebrew': u'\u05B2',
- 'hatafpatahwidehebrew': u'\u05B2',
- 'hatafqamats': u'\u05B3',
- 'hatafqamats1b': u'\u05B3',
- 'hatafqamats28': u'\u05B3',
- 'hatafqamats34': u'\u05B3',
- 'hatafqamatshebrew': u'\u05B3',
- 'hatafqamatsnarrowhebrew': u'\u05B3',
- 'hatafqamatsquarterhebrew': u'\u05B3',
- 'hatafqamatswidehebrew': u'\u05B3',
- 'hatafsegol': u'\u05B1',
- 'hatafsegol17': u'\u05B1',
- 'hatafsegol24': u'\u05B1',
- 'hatafsegol30': u'\u05B1',
- 'hatafsegolhebrew': u'\u05B1',
- 'hatafsegolnarrowhebrew': u'\u05B1',
- 'hatafsegolquarterhebrew': u'\u05B1',
- 'hatafsegolwidehebrew': u'\u05B1',
- 'hbar': u'\u0127',
- 'hbopomofo': u'\u310F',
- 'hbrevebelow': u'\u1E2B',
- 'hcedilla': u'\u1E29',
- 'hcircle': u'\u24D7',
- 'hcircumflex': u'\u0125',
- 'hdieresis': u'\u1E27',
- 'hdotaccent': u'\u1E23',
- 'hdotbelow': u'\u1E25',
- 'he': u'\u05D4',
- 'heart': u'\u2665',
- 'heartsuitblack': u'\u2665',
- 'heartsuitwhite': u'\u2661',
- 'hedagesh': u'\uFB34',
- 'hedageshhebrew': u'\uFB34',
- 'hehaltonearabic': u'\u06C1',
- 'heharabic': u'\u0647',
- 'hehebrew': u'\u05D4',
- 'hehfinalaltonearabic': u'\uFBA7',
- 'hehfinalalttwoarabic': u'\uFEEA',
- 'hehfinalarabic': u'\uFEEA',
- 'hehhamzaabovefinalarabic': u'\uFBA5',
- 'hehhamzaaboveisolatedarabic': u'\uFBA4',
- 'hehinitialaltonearabic': u'\uFBA8',
- 'hehinitialarabic': u'\uFEEB',
- 'hehiragana': u'\u3078',
- 'hehmedialaltonearabic': u'\uFBA9',
- 'hehmedialarabic': u'\uFEEC',
- 'heiseierasquare': u'\u337B',
- 'hekatakana': u'\u30D8',
- 'hekatakanahalfwidth': u'\uFF8D',
- 'hekutaarusquare': u'\u3336',
- 'henghook': u'\u0267',
- 'herutusquare': u'\u3339',
- 'het': u'\u05D7',
- 'hethebrew': u'\u05D7',
- 'hhook': u'\u0266',
- 'hhooksuperior': u'\u02B1',
- 'hieuhacirclekorean': u'\u327B',
- 'hieuhaparenkorean': u'\u321B',
- 'hieuhcirclekorean': u'\u326D',
- 'hieuhkorean': u'\u314E',
- 'hieuhparenkorean': u'\u320D',
- 'hihiragana': u'\u3072',
- 'hikatakana': u'\u30D2',
- 'hikatakanahalfwidth': u'\uFF8B',
- 'hiriq': u'\u05B4',
- 'hiriq14': u'\u05B4',
- 'hiriq21': u'\u05B4',
- 'hiriq2d': u'\u05B4',
- 'hiriqhebrew': u'\u05B4',
- 'hiriqnarrowhebrew': u'\u05B4',
- 'hiriqquarterhebrew': u'\u05B4',
- 'hiriqwidehebrew': u'\u05B4',
- 'hlinebelow': u'\u1E96',
- 'hmonospace': u'\uFF48',
- 'hoarmenian': u'\u0570',
- 'hohipthai': u'\u0E2B',
- 'hohiragana': u'\u307B',
- 'hokatakana': u'\u30DB',
- 'hokatakanahalfwidth': u'\uFF8E',
- 'holam': u'\u05B9',
- 'holam19': u'\u05B9',
- 'holam26': u'\u05B9',
- 'holam32': u'\u05B9',
- 'holamhebrew': u'\u05B9',
- 'holamnarrowhebrew': u'\u05B9',
- 'holamquarterhebrew': u'\u05B9',
- 'holamwidehebrew': u'\u05B9',
- 'honokhukthai': u'\u0E2E',
- 'hookabovecomb': u'\u0309',
- 'hookcmb': u'\u0309',
- 'hookpalatalizedbelowcmb': u'\u0321',
- 'hookretroflexbelowcmb': u'\u0322',
- 'hoonsquare': u'\u3342',
- 'horicoptic': u'\u03E9',
- 'horizontalbar': u'\u2015',
- 'horncmb': u'\u031B',
- 'hotsprings': u'\u2668',
- 'house': u'\u2302',
- 'hparen': u'\u24A3',
- 'hsuperior': u'\u02B0',
- 'hturned': u'\u0265',
- 'huhiragana': u'\u3075',
- 'huiitosquare': u'\u3333',
- 'hukatakana': u'\u30D5',
- 'hukatakanahalfwidth': u'\uFF8C',
- 'hungarumlaut': u'\u02DD',
- 'hungarumlautcmb': u'\u030B',
- 'hv': u'\u0195',
- 'hyphen': u'\u002D',
- 'hypheninferior': u'\uF6E5',
- 'hyphenmonospace': u'\uFF0D',
- 'hyphensmall': u'\uFE63',
- 'hyphensuperior': u'\uF6E6',
- 'hyphentwo': u'\u2010',
- 'i': u'\u0069',
- 'iacute': u'\u00ED',
- 'iacyrillic': u'\u044F',
- 'ibengali': u'\u0987',
- 'ibopomofo': u'\u3127',
- 'ibreve': u'\u012D',
- 'icaron': u'\u01D0',
- 'icircle': u'\u24D8',
- 'icircumflex': u'\u00EE',
- 'icyrillic': u'\u0456',
- 'idblgrave': u'\u0209',
- 'ideographearthcircle': u'\u328F',
- 'ideographfirecircle': u'\u328B',
- 'ideographicallianceparen': u'\u323F',
- 'ideographiccallparen': u'\u323A',
- 'ideographiccentrecircle': u'\u32A5',
- 'ideographicclose': u'\u3006',
- 'ideographiccomma': u'\u3001',
- 'ideographiccommaleft': u'\uFF64',
- 'ideographiccongratulationparen': u'\u3237',
- 'ideographiccorrectcircle': u'\u32A3',
- 'ideographicearthparen': u'\u322F',
- 'ideographicenterpriseparen': u'\u323D',
- 'ideographicexcellentcircle': u'\u329D',
- 'ideographicfestivalparen': u'\u3240',
- 'ideographicfinancialcircle': u'\u3296',
- 'ideographicfinancialparen': u'\u3236',
- 'ideographicfireparen': u'\u322B',
- 'ideographichaveparen': u'\u3232',
- 'ideographichighcircle': u'\u32A4',
- 'ideographiciterationmark': u'\u3005',
- 'ideographiclaborcircle': u'\u3298',
- 'ideographiclaborparen': u'\u3238',
- 'ideographicleftcircle': u'\u32A7',
- 'ideographiclowcircle': u'\u32A6',
- 'ideographicmedicinecircle': u'\u32A9',
- 'ideographicmetalparen': u'\u322E',
- 'ideographicmoonparen': u'\u322A',
- 'ideographicnameparen': u'\u3234',
- 'ideographicperiod': u'\u3002',
- 'ideographicprintcircle': u'\u329E',
- 'ideographicreachparen': u'\u3243',
- 'ideographicrepresentparen': u'\u3239',
- 'ideographicresourceparen': u'\u323E',
- 'ideographicrightcircle': u'\u32A8',
- 'ideographicsecretcircle': u'\u3299',
- 'ideographicselfparen': u'\u3242',
- 'ideographicsocietyparen': u'\u3233',
- 'ideographicspace': u'\u3000',
- 'ideographicspecialparen': u'\u3235',
- 'ideographicstockparen': u'\u3231',
- 'ideographicstudyparen': u'\u323B',
- 'ideographicsunparen': u'\u3230',
- 'ideographicsuperviseparen': u'\u323C',
- 'ideographicwaterparen': u'\u322C',
- 'ideographicwoodparen': u'\u322D',
- 'ideographiczero': u'\u3007',
- 'ideographmetalcircle': u'\u328E',
- 'ideographmooncircle': u'\u328A',
- 'ideographnamecircle': u'\u3294',
- 'ideographsuncircle': u'\u3290',
- 'ideographwatercircle': u'\u328C',
- 'ideographwoodcircle': u'\u328D',
- 'ideva': u'\u0907',
- 'idieresis': u'\u00EF',
- 'idieresisacute': u'\u1E2F',
- 'idieresiscyrillic': u'\u04E5',
- 'idotbelow': u'\u1ECB',
- 'iebrevecyrillic': u'\u04D7',
- 'iecyrillic': u'\u0435',
- 'ieungacirclekorean': u'\u3275',
- 'ieungaparenkorean': u'\u3215',
- 'ieungcirclekorean': u'\u3267',
- 'ieungkorean': u'\u3147',
- 'ieungparenkorean': u'\u3207',
- 'igrave': u'\u00EC',
- 'igujarati': u'\u0A87',
- 'igurmukhi': u'\u0A07',
- 'ihiragana': u'\u3044',
- 'ihookabove': u'\u1EC9',
- 'iibengali': u'\u0988',
- 'iicyrillic': u'\u0438',
- 'iideva': u'\u0908',
- 'iigujarati': u'\u0A88',
- 'iigurmukhi': u'\u0A08',
- 'iimatragurmukhi': u'\u0A40',
- 'iinvertedbreve': u'\u020B',
- 'iishortcyrillic': u'\u0439',
- 'iivowelsignbengali': u'\u09C0',
- 'iivowelsigndeva': u'\u0940',
- 'iivowelsigngujarati': u'\u0AC0',
- 'ij': u'\u0133',
- 'ikatakana': u'\u30A4',
- 'ikatakanahalfwidth': u'\uFF72',
- 'ikorean': u'\u3163',
- 'ilde': u'\u02DC',
- 'iluyhebrew': u'\u05AC',
- 'imacron': u'\u012B',
- 'imacroncyrillic': u'\u04E3',
- 'imageorapproximatelyequal': u'\u2253',
- 'imatragurmukhi': u'\u0A3F',
- 'imonospace': u'\uFF49',
- 'increment': u'\u2206',
- 'infinity': u'\u221E',
- 'iniarmenian': u'\u056B',
- 'integral': u'\u222B',
- 'integralbottom': u'\u2321',
- 'integralbt': u'\u2321',
- 'integralex': u'\uF8F5',
- 'integraltop': u'\u2320',
- 'integraltp': u'\u2320',
- 'intersection': u'\u2229',
- 'intisquare': u'\u3305',
- 'invbullet': u'\u25D8',
- 'invcircle': u'\u25D9',
- 'invsmileface': u'\u263B',
- 'iocyrillic': u'\u0451',
- 'iogonek': u'\u012F',
- 'iota': u'\u03B9',
- 'iotadieresis': u'\u03CA',
- 'iotadieresistonos': u'\u0390',
- 'iotalatin': u'\u0269',
- 'iotatonos': u'\u03AF',
- 'iparen': u'\u24A4',
- 'irigurmukhi': u'\u0A72',
- 'ismallhiragana': u'\u3043',
- 'ismallkatakana': u'\u30A3',
- 'ismallkatakanahalfwidth': u'\uFF68',
- 'issharbengali': u'\u09FA',
- 'istroke': u'\u0268',
- 'isuperior': u'\uF6ED',
- 'iterationhiragana': u'\u309D',
- 'iterationkatakana': u'\u30FD',
- 'itilde': u'\u0129',
- 'itildebelow': u'\u1E2D',
- 'iubopomofo': u'\u3129',
- 'iucyrillic': u'\u044E',
- 'ivowelsignbengali': u'\u09BF',
- 'ivowelsigndeva': u'\u093F',
- 'ivowelsigngujarati': u'\u0ABF',
- 'izhitsacyrillic': u'\u0475',
- 'izhitsadblgravecyrillic': u'\u0477',
- 'j': u'\u006A',
- 'jaarmenian': u'\u0571',
- 'jabengali': u'\u099C',
- 'jadeva': u'\u091C',
- 'jagujarati': u'\u0A9C',
- 'jagurmukhi': u'\u0A1C',
- 'jbopomofo': u'\u3110',
- 'jcaron': u'\u01F0',
- 'jcircle': u'\u24D9',
- 'jcircumflex': u'\u0135',
- 'jcrossedtail': u'\u029D',
- 'jdotlessstroke': u'\u025F',
- 'jecyrillic': u'\u0458',
- 'jeemarabic': u'\u062C',
- 'jeemfinalarabic': u'\uFE9E',
- 'jeeminitialarabic': u'\uFE9F',
- 'jeemmedialarabic': u'\uFEA0',
- 'jeharabic': u'\u0698',
- 'jehfinalarabic': u'\uFB8B',
- 'jhabengali': u'\u099D',
- 'jhadeva': u'\u091D',
- 'jhagujarati': u'\u0A9D',
- 'jhagurmukhi': u'\u0A1D',
- 'jheharmenian': u'\u057B',
- 'jis': u'\u3004',
- 'jmonospace': u'\uFF4A',
- 'jparen': u'\u24A5',
- 'jsuperior': u'\u02B2',
- 'k': u'\u006B',
- 'kabashkircyrillic': u'\u04A1',
- 'kabengali': u'\u0995',
- 'kacute': u'\u1E31',
- 'kacyrillic': u'\u043A',
- 'kadescendercyrillic': u'\u049B',
- 'kadeva': u'\u0915',
- 'kaf': u'\u05DB',
- 'kafarabic': u'\u0643',
- 'kafdagesh': u'\uFB3B',
- 'kafdageshhebrew': u'\uFB3B',
- 'kaffinalarabic': u'\uFEDA',
- 'kafhebrew': u'\u05DB',
- 'kafinitialarabic': u'\uFEDB',
- 'kafmedialarabic': u'\uFEDC',
- 'kafrafehebrew': u'\uFB4D',
- 'kagujarati': u'\u0A95',
- 'kagurmukhi': u'\u0A15',
- 'kahiragana': u'\u304B',
- 'kahookcyrillic': u'\u04C4',
- 'kakatakana': u'\u30AB',
- 'kakatakanahalfwidth': u'\uFF76',
- 'kappa': u'\u03BA',
- 'kappasymbolgreek': u'\u03F0',
- 'kapyeounmieumkorean': u'\u3171',
- 'kapyeounphieuphkorean': u'\u3184',
- 'kapyeounpieupkorean': u'\u3178',
- 'kapyeounssangpieupkorean': u'\u3179',
- 'karoriisquare': u'\u330D',
- 'kashidaautoarabic': u'\u0640',
- 'kashidaautonosidebearingarabic': u'\u0640',
- 'kasmallkatakana': u'\u30F5',
- 'kasquare': u'\u3384',
- 'kasraarabic': u'\u0650',
- 'kasratanarabic': u'\u064D',
- 'kastrokecyrillic': u'\u049F',
- 'katahiraprolongmarkhalfwidth': u'\uFF70',
- 'kaverticalstrokecyrillic': u'\u049D',
- 'kbopomofo': u'\u310E',
- 'kcalsquare': u'\u3389',
- 'kcaron': u'\u01E9',
- 'kcedilla': u'\u0137',
- 'kcircle': u'\u24DA',
- 'kcommaaccent': u'\u0137',
- 'kdotbelow': u'\u1E33',
- 'keharmenian': u'\u0584',
- 'kehiragana': u'\u3051',
- 'kekatakana': u'\u30B1',
- 'kekatakanahalfwidth': u'\uFF79',
- 'kenarmenian': u'\u056F',
- 'kesmallkatakana': u'\u30F6',
- 'kgreenlandic': u'\u0138',
- 'khabengali': u'\u0996',
- 'khacyrillic': u'\u0445',
- 'khadeva': u'\u0916',
- 'khagujarati': u'\u0A96',
- 'khagurmukhi': u'\u0A16',
- 'khaharabic': u'\u062E',
- 'khahfinalarabic': u'\uFEA6',
- 'khahinitialarabic': u'\uFEA7',
- 'khahmedialarabic': u'\uFEA8',
- 'kheicoptic': u'\u03E7',
- 'khhadeva': u'\u0959',
- 'khhagurmukhi': u'\u0A59',
- 'khieukhacirclekorean': u'\u3278',
- 'khieukhaparenkorean': u'\u3218',
- 'khieukhcirclekorean': u'\u326A',
- 'khieukhkorean': u'\u314B',
- 'khieukhparenkorean': u'\u320A',
- 'khokhaithai': u'\u0E02',
- 'khokhonthai': u'\u0E05',
- 'khokhuatthai': u'\u0E03',
- 'khokhwaithai': u'\u0E04',
- 'khomutthai': u'\u0E5B',
- 'khook': u'\u0199',
- 'khorakhangthai': u'\u0E06',
- 'khzsquare': u'\u3391',
- 'kihiragana': u'\u304D',
- 'kikatakana': u'\u30AD',
- 'kikatakanahalfwidth': u'\uFF77',
- 'kiroguramusquare': u'\u3315',
- 'kiromeetorusquare': u'\u3316',
- 'kirosquare': u'\u3314',
- 'kiyeokacirclekorean': u'\u326E',
- 'kiyeokaparenkorean': u'\u320E',
- 'kiyeokcirclekorean': u'\u3260',
- 'kiyeokkorean': u'\u3131',
- 'kiyeokparenkorean': u'\u3200',
- 'kiyeoksioskorean': u'\u3133',
- 'kjecyrillic': u'\u045C',
- 'klinebelow': u'\u1E35',
- 'klsquare': u'\u3398',
- 'kmcubedsquare': u'\u33A6',
- 'kmonospace': u'\uFF4B',
- 'kmsquaredsquare': u'\u33A2',
- 'kohiragana': u'\u3053',
- 'kohmsquare': u'\u33C0',
- 'kokaithai': u'\u0E01',
- 'kokatakana': u'\u30B3',
- 'kokatakanahalfwidth': u'\uFF7A',
- 'kooposquare': u'\u331E',
- 'koppacyrillic': u'\u0481',
- 'koreanstandardsymbol': u'\u327F',
- 'koroniscmb': u'\u0343',
- 'kparen': u'\u24A6',
- 'kpasquare': u'\u33AA',
- 'ksicyrillic': u'\u046F',
- 'ktsquare': u'\u33CF',
- 'kturned': u'\u029E',
- 'kuhiragana': u'\u304F',
- 'kukatakana': u'\u30AF',
- 'kukatakanahalfwidth': u'\uFF78',
- 'kvsquare': u'\u33B8',
- 'kwsquare': u'\u33BE',
- 'l': u'\u006C',
- 'labengali': u'\u09B2',
- 'lacute': u'\u013A',
- 'ladeva': u'\u0932',
- 'lagujarati': u'\u0AB2',
- 'lagurmukhi': u'\u0A32',
- 'lakkhangyaothai': u'\u0E45',
- 'lamaleffinalarabic': u'\uFEFC',
- 'lamalefhamzaabovefinalarabic': u'\uFEF8',
- 'lamalefhamzaaboveisolatedarabic': u'\uFEF7',
- 'lamalefhamzabelowfinalarabic': u'\uFEFA',
- 'lamalefhamzabelowisolatedarabic': u'\uFEF9',
- 'lamalefisolatedarabic': u'\uFEFB',
- 'lamalefmaddaabovefinalarabic': u'\uFEF6',
- 'lamalefmaddaaboveisolatedarabic': u'\uFEF5',
- 'lamarabic': u'\u0644',
- 'lambda': u'\u03BB',
- 'lambdastroke': u'\u019B',
- 'lamed': u'\u05DC',
- 'lameddagesh': u'\uFB3C',
- 'lameddageshhebrew': u'\uFB3C',
- 'lamedhebrew': u'\u05DC',
- 'lamedholam': u'\u05DC\u05B9',
- 'lamedholamdagesh': u'\u05DC\u05B9\u05BC',
- 'lamedholamdageshhebrew': u'\u05DC\u05B9\u05BC',
- 'lamedholamhebrew': u'\u05DC\u05B9',
- 'lamfinalarabic': u'\uFEDE',
- 'lamhahinitialarabic': u'\uFCCA',
- 'laminitialarabic': u'\uFEDF',
- 'lamjeeminitialarabic': u'\uFCC9',
- 'lamkhahinitialarabic': u'\uFCCB',
- 'lamlamhehisolatedarabic': u'\uFDF2',
- 'lammedialarabic': u'\uFEE0',
- 'lammeemhahinitialarabic': u'\uFD88',
- 'lammeeminitialarabic': u'\uFCCC',
- 'lammeemjeeminitialarabic': u'\uFEDF\uFEE4\uFEA0',
- 'lammeemkhahinitialarabic': u'\uFEDF\uFEE4\uFEA8',
- 'largecircle': u'\u25EF',
- 'lbar': u'\u019A',
- 'lbelt': u'\u026C',
- 'lbopomofo': u'\u310C',
- 'lcaron': u'\u013E',
- 'lcedilla': u'\u013C',
- 'lcircle': u'\u24DB',
- 'lcircumflexbelow': u'\u1E3D',
- 'lcommaaccent': u'\u013C',
- 'ldot': u'\u0140',
- 'ldotaccent': u'\u0140',
- 'ldotbelow': u'\u1E37',
- 'ldotbelowmacron': u'\u1E39',
- 'leftangleabovecmb': u'\u031A',
- 'lefttackbelowcmb': u'\u0318',
- 'less': u'\u003C',
- 'lessequal': u'\u2264',
- 'lessequalorgreater': u'\u22DA',
- 'lessmonospace': u'\uFF1C',
- 'lessorequivalent': u'\u2272',
- 'lessorgreater': u'\u2276',
- 'lessoverequal': u'\u2266',
- 'lesssmall': u'\uFE64',
- 'lezh': u'\u026E',
- 'lfblock': u'\u258C',
- 'lhookretroflex': u'\u026D',
- 'lira': u'\u20A4',
- 'liwnarmenian': u'\u056C',
- 'lj': u'\u01C9',
- 'ljecyrillic': u'\u0459',
- 'll': u'\uF6C0',
- 'lladeva': u'\u0933',
- 'llagujarati': u'\u0AB3',
- 'llinebelow': u'\u1E3B',
- 'llladeva': u'\u0934',
- 'llvocalicbengali': u'\u09E1',
- 'llvocalicdeva': u'\u0961',
- 'llvocalicvowelsignbengali': u'\u09E3',
- 'llvocalicvowelsigndeva': u'\u0963',
- 'lmiddletilde': u'\u026B',
- 'lmonospace': u'\uFF4C',
- 'lmsquare': u'\u33D0',
- 'lochulathai': u'\u0E2C',
- 'logicaland': u'\u2227',
- 'logicalnot': u'\u00AC',
- 'logicalnotreversed': u'\u2310',
- 'logicalor': u'\u2228',
- 'lolingthai': u'\u0E25',
- 'longs': u'\u017F',
- 'lowlinecenterline': u'\uFE4E',
- 'lowlinecmb': u'\u0332',
- 'lowlinedashed': u'\uFE4D',
- 'lozenge': u'\u25CA',
- 'lparen': u'\u24A7',
- 'lslash': u'\u0142',
- 'lsquare': u'\u2113',
- 'lsuperior': u'\uF6EE',
- 'ltshade': u'\u2591',
- 'luthai': u'\u0E26',
- 'lvocalicbengali': u'\u098C',
- 'lvocalicdeva': u'\u090C',
- 'lvocalicvowelsignbengali': u'\u09E2',
- 'lvocalicvowelsigndeva': u'\u0962',
- 'lxsquare': u'\u33D3',
- 'm': u'\u006D',
- 'mabengali': u'\u09AE',
- 'macron': u'\u00AF',
- 'macronbelowcmb': u'\u0331',
- 'macroncmb': u'\u0304',
- 'macronlowmod': u'\u02CD',
- 'macronmonospace': u'\uFFE3',
- 'macute': u'\u1E3F',
- 'madeva': u'\u092E',
- 'magujarati': u'\u0AAE',
- 'magurmukhi': u'\u0A2E',
- 'mahapakhhebrew': u'\u05A4',
- 'mahapakhlefthebrew': u'\u05A4',
- 'mahiragana': u'\u307E',
- 'maichattawalowleftthai': u'\uF895',
- 'maichattawalowrightthai': u'\uF894',
- 'maichattawathai': u'\u0E4B',
- 'maichattawaupperleftthai': u'\uF893',
- 'maieklowleftthai': u'\uF88C',
- 'maieklowrightthai': u'\uF88B',
- 'maiekthai': u'\u0E48',
- 'maiekupperleftthai': u'\uF88A',
- 'maihanakatleftthai': u'\uF884',
- 'maihanakatthai': u'\u0E31',
- 'maitaikhuleftthai': u'\uF889',
- 'maitaikhuthai': u'\u0E47',
- 'maitholowleftthai': u'\uF88F',
- 'maitholowrightthai': u'\uF88E',
- 'maithothai': u'\u0E49',
- 'maithoupperleftthai': u'\uF88D',
- 'maitrilowleftthai': u'\uF892',
- 'maitrilowrightthai': u'\uF891',
- 'maitrithai': u'\u0E4A',
- 'maitriupperleftthai': u'\uF890',
- 'maiyamokthai': u'\u0E46',
- 'makatakana': u'\u30DE',
- 'makatakanahalfwidth': u'\uFF8F',
- 'male': u'\u2642',
- 'mansyonsquare': u'\u3347',
- 'maqafhebrew': u'\u05BE',
- 'mars': u'\u2642',
- 'masoracirclehebrew': u'\u05AF',
- 'masquare': u'\u3383',
- 'mbopomofo': u'\u3107',
- 'mbsquare': u'\u33D4',
- 'mcircle': u'\u24DC',
- 'mcubedsquare': u'\u33A5',
- 'mdotaccent': u'\u1E41',
- 'mdotbelow': u'\u1E43',
- 'meemarabic': u'\u0645',
- 'meemfinalarabic': u'\uFEE2',
- 'meeminitialarabic': u'\uFEE3',
- 'meemmedialarabic': u'\uFEE4',
- 'meemmeeminitialarabic': u'\uFCD1',
- 'meemmeemisolatedarabic': u'\uFC48',
- 'meetorusquare': u'\u334D',
- 'mehiragana': u'\u3081',
- 'meizierasquare': u'\u337E',
- 'mekatakana': u'\u30E1',
- 'mekatakanahalfwidth': u'\uFF92',
- 'mem': u'\u05DE',
- 'memdagesh': u'\uFB3E',
- 'memdageshhebrew': u'\uFB3E',
- 'memhebrew': u'\u05DE',
- 'menarmenian': u'\u0574',
- 'merkhahebrew': u'\u05A5',
- 'merkhakefulahebrew': u'\u05A6',
- 'merkhakefulalefthebrew': u'\u05A6',
- 'merkhalefthebrew': u'\u05A5',
- 'mhook': u'\u0271',
- 'mhzsquare': u'\u3392',
- 'middledotkatakanahalfwidth': u'\uFF65',
- 'middot': u'\u00B7',
- 'mieumacirclekorean': u'\u3272',
- 'mieumaparenkorean': u'\u3212',
- 'mieumcirclekorean': u'\u3264',
- 'mieumkorean': u'\u3141',
- 'mieumpansioskorean': u'\u3170',
- 'mieumparenkorean': u'\u3204',
- 'mieumpieupkorean': u'\u316E',
- 'mieumsioskorean': u'\u316F',
- 'mihiragana': u'\u307F',
- 'mikatakana': u'\u30DF',
- 'mikatakanahalfwidth': u'\uFF90',
- 'minus': u'\u2212',
- 'minusbelowcmb': u'\u0320',
- 'minuscircle': u'\u2296',
- 'minusmod': u'\u02D7',
- 'minusplus': u'\u2213',
- 'minute': u'\u2032',
- 'miribaarusquare': u'\u334A',
- 'mirisquare': u'\u3349',
- 'mlonglegturned': u'\u0270',
- 'mlsquare': u'\u3396',
- 'mmcubedsquare': u'\u33A3',
- 'mmonospace': u'\uFF4D',
- 'mmsquaredsquare': u'\u339F',
- 'mohiragana': u'\u3082',
- 'mohmsquare': u'\u33C1',
- 'mokatakana': u'\u30E2',
- 'mokatakanahalfwidth': u'\uFF93',
- 'molsquare': u'\u33D6',
- 'momathai': u'\u0E21',
- 'moverssquare': u'\u33A7',
- 'moverssquaredsquare': u'\u33A8',
- 'mparen': u'\u24A8',
- 'mpasquare': u'\u33AB',
- 'mssquare': u'\u33B3',
- 'msuperior': u'\uF6EF',
- 'mturned': u'\u026F',
- 'mu': u'\u00B5',
- 'mu1': u'\u00B5',
- 'muasquare': u'\u3382',
- 'muchgreater': u'\u226B',
- 'muchless': u'\u226A',
- 'mufsquare': u'\u338C',
- 'mugreek': u'\u03BC',
- 'mugsquare': u'\u338D',
- 'muhiragana': u'\u3080',
- 'mukatakana': u'\u30E0',
- 'mukatakanahalfwidth': u'\uFF91',
- 'mulsquare': u'\u3395',
- 'multiply': u'\u00D7',
- 'mumsquare': u'\u339B',
- 'munahhebrew': u'\u05A3',
- 'munahlefthebrew': u'\u05A3',
- 'musicalnote': u'\u266A',
- 'musicalnotedbl': u'\u266B',
- 'musicflatsign': u'\u266D',
- 'musicsharpsign': u'\u266F',
- 'mussquare': u'\u33B2',
- 'muvsquare': u'\u33B6',
- 'muwsquare': u'\u33BC',
- 'mvmegasquare': u'\u33B9',
- 'mvsquare': u'\u33B7',
- 'mwmegasquare': u'\u33BF',
- 'mwsquare': u'\u33BD',
- 'n': u'\u006E',
- 'nabengali': u'\u09A8',
- 'nabla': u'\u2207',
- 'nacute': u'\u0144',
- 'nadeva': u'\u0928',
- 'nagujarati': u'\u0AA8',
- 'nagurmukhi': u'\u0A28',
- 'nahiragana': u'\u306A',
- 'nakatakana': u'\u30CA',
- 'nakatakanahalfwidth': u'\uFF85',
- 'napostrophe': u'\u0149',
- 'nasquare': u'\u3381',
- 'nbopomofo': u'\u310B',
- 'nbspace': u'\u00A0',
- 'ncaron': u'\u0148',
- 'ncedilla': u'\u0146',
- 'ncircle': u'\u24DD',
- 'ncircumflexbelow': u'\u1E4B',
- 'ncommaaccent': u'\u0146',
- 'ndotaccent': u'\u1E45',
- 'ndotbelow': u'\u1E47',
- 'nehiragana': u'\u306D',
- 'nekatakana': u'\u30CD',
- 'nekatakanahalfwidth': u'\uFF88',
- 'newsheqelsign': u'\u20AA',
- 'nfsquare': u'\u338B',
- 'ngabengali': u'\u0999',
- 'ngadeva': u'\u0919',
- 'ngagujarati': u'\u0A99',
- 'ngagurmukhi': u'\u0A19',
- 'ngonguthai': u'\u0E07',
- 'nhiragana': u'\u3093',
- 'nhookleft': u'\u0272',
- 'nhookretroflex': u'\u0273',
- 'nieunacirclekorean': u'\u326F',
- 'nieunaparenkorean': u'\u320F',
- 'nieuncieuckorean': u'\u3135',
- 'nieuncirclekorean': u'\u3261',
- 'nieunhieuhkorean': u'\u3136',
- 'nieunkorean': u'\u3134',
- 'nieunpansioskorean': u'\u3168',
- 'nieunparenkorean': u'\u3201',
- 'nieunsioskorean': u'\u3167',
- 'nieuntikeutkorean': u'\u3166',
- 'nihiragana': u'\u306B',
- 'nikatakana': u'\u30CB',
- 'nikatakanahalfwidth': u'\uFF86',
- 'nikhahitleftthai': u'\uF899',
- 'nikhahitthai': u'\u0E4D',
- 'nine': u'\u0039',
- 'ninearabic': u'\u0669',
- 'ninebengali': u'\u09EF',
- 'ninecircle': u'\u2468',
- 'ninecircleinversesansserif': u'\u2792',
- 'ninedeva': u'\u096F',
- 'ninegujarati': u'\u0AEF',
- 'ninegurmukhi': u'\u0A6F',
- 'ninehackarabic': u'\u0669',
- 'ninehangzhou': u'\u3029',
- 'nineideographicparen': u'\u3228',
- 'nineinferior': u'\u2089',
- 'ninemonospace': u'\uFF19',
- 'nineoldstyle': u'\uF739',
- 'nineparen': u'\u247C',
- 'nineperiod': u'\u2490',
- 'ninepersian': u'\u06F9',
- 'nineroman': u'\u2178',
- 'ninesuperior': u'\u2079',
- 'nineteencircle': u'\u2472',
- 'nineteenparen': u'\u2486',
- 'nineteenperiod': u'\u249A',
- 'ninethai': u'\u0E59',
- 'nj': u'\u01CC',
- 'njecyrillic': u'\u045A',
- 'nkatakana': u'\u30F3',
- 'nkatakanahalfwidth': u'\uFF9D',
- 'nlegrightlong': u'\u019E',
- 'nlinebelow': u'\u1E49',
- 'nmonospace': u'\uFF4E',
- 'nmsquare': u'\u339A',
- 'nnabengali': u'\u09A3',
- 'nnadeva': u'\u0923',
- 'nnagujarati': u'\u0AA3',
- 'nnagurmukhi': u'\u0A23',
- 'nnnadeva': u'\u0929',
- 'nohiragana': u'\u306E',
- 'nokatakana': u'\u30CE',
- 'nokatakanahalfwidth': u'\uFF89',
- 'nonbreakingspace': u'\u00A0',
- 'nonenthai': u'\u0E13',
- 'nonuthai': u'\u0E19',
- 'noonarabic': u'\u0646',
- 'noonfinalarabic': u'\uFEE6',
- 'noonghunnaarabic': u'\u06BA',
- 'noonghunnafinalarabic': u'\uFB9F',
- 'noonhehinitialarabic': u'\uFEE7\uFEEC',
- 'nooninitialarabic': u'\uFEE7',
- 'noonjeeminitialarabic': u'\uFCD2',
- 'noonjeemisolatedarabic': u'\uFC4B',
- 'noonmedialarabic': u'\uFEE8',
- 'noonmeeminitialarabic': u'\uFCD5',
- 'noonmeemisolatedarabic': u'\uFC4E',
- 'noonnoonfinalarabic': u'\uFC8D',
- 'notcontains': u'\u220C',
- 'notelement': u'\u2209',
- 'notelementof': u'\u2209',
- 'notequal': u'\u2260',
- 'notgreater': u'\u226F',
- 'notgreaternorequal': u'\u2271',
- 'notgreaternorless': u'\u2279',
- 'notidentical': u'\u2262',
- 'notless': u'\u226E',
- 'notlessnorequal': u'\u2270',
- 'notparallel': u'\u2226',
- 'notprecedes': u'\u2280',
- 'notsubset': u'\u2284',
- 'notsucceeds': u'\u2281',
- 'notsuperset': u'\u2285',
- 'nowarmenian': u'\u0576',
- 'nparen': u'\u24A9',
- 'nssquare': u'\u33B1',
- 'nsuperior': u'\u207F',
- 'ntilde': u'\u00F1',
- 'nu': u'\u03BD',
- 'nuhiragana': u'\u306C',
- 'nukatakana': u'\u30CC',
- 'nukatakanahalfwidth': u'\uFF87',
- 'nuktabengali': u'\u09BC',
- 'nuktadeva': u'\u093C',
- 'nuktagujarati': u'\u0ABC',
- 'nuktagurmukhi': u'\u0A3C',
- 'numbersign': u'\u0023',
- 'numbersignmonospace': u'\uFF03',
- 'numbersignsmall': u'\uFE5F',
- 'numeralsigngreek': u'\u0374',
- 'numeralsignlowergreek': u'\u0375',
- 'numero': u'\u2116',
- 'nun': u'\u05E0',
- 'nundagesh': u'\uFB40',
- 'nundageshhebrew': u'\uFB40',
- 'nunhebrew': u'\u05E0',
- 'nvsquare': u'\u33B5',
- 'nwsquare': u'\u33BB',
- 'nyabengali': u'\u099E',
- 'nyadeva': u'\u091E',
- 'nyagujarati': u'\u0A9E',
- 'nyagurmukhi': u'\u0A1E',
- 'o': u'\u006F',
- 'oacute': u'\u00F3',
- 'oangthai': u'\u0E2D',
- 'obarred': u'\u0275',
- 'obarredcyrillic': u'\u04E9',
- 'obarreddieresiscyrillic': u'\u04EB',
- 'obengali': u'\u0993',
- 'obopomofo': u'\u311B',
- 'obreve': u'\u014F',
- 'ocandradeva': u'\u0911',
- 'ocandragujarati': u'\u0A91',
- 'ocandravowelsigndeva': u'\u0949',
- 'ocandravowelsigngujarati': u'\u0AC9',
- 'ocaron': u'\u01D2',
- 'ocircle': u'\u24DE',
- 'ocircumflex': u'\u00F4',
- 'ocircumflexacute': u'\u1ED1',
- 'ocircumflexdotbelow': u'\u1ED9',
- 'ocircumflexgrave': u'\u1ED3',
- 'ocircumflexhookabove': u'\u1ED5',
- 'ocircumflextilde': u'\u1ED7',
- 'ocyrillic': u'\u043E',
- 'odblacute': u'\u0151',
- 'odblgrave': u'\u020D',
- 'odeva': u'\u0913',
- 'odieresis': u'\u00F6',
- 'odieresiscyrillic': u'\u04E7',
- 'odotbelow': u'\u1ECD',
- 'oe': u'\u0153',
- 'oekorean': u'\u315A',
- 'ogonek': u'\u02DB',
- 'ogonekcmb': u'\u0328',
- 'ograve': u'\u00F2',
- 'ogujarati': u'\u0A93',
- 'oharmenian': u'\u0585',
- 'ohiragana': u'\u304A',
- 'ohookabove': u'\u1ECF',
- 'ohorn': u'\u01A1',
- 'ohornacute': u'\u1EDB',
- 'ohorndotbelow': u'\u1EE3',
- 'ohorngrave': u'\u1EDD',
- 'ohornhookabove': u'\u1EDF',
- 'ohorntilde': u'\u1EE1',
- 'ohungarumlaut': u'\u0151',
- 'oi': u'\u01A3',
- 'oinvertedbreve': u'\u020F',
- 'okatakana': u'\u30AA',
- 'okatakanahalfwidth': u'\uFF75',
- 'okorean': u'\u3157',
- 'olehebrew': u'\u05AB',
- 'omacron': u'\u014D',
- 'omacronacute': u'\u1E53',
- 'omacrongrave': u'\u1E51',
- 'omdeva': u'\u0950',
- 'omega': u'\u03C9',
- 'omega1': u'\u03D6',
- 'omegacyrillic': u'\u0461',
- 'omegalatinclosed': u'\u0277',
- 'omegaroundcyrillic': u'\u047B',
- 'omegatitlocyrillic': u'\u047D',
- 'omegatonos': u'\u03CE',
- 'omgujarati': u'\u0AD0',
- 'omicron': u'\u03BF',
- 'omicrontonos': u'\u03CC',
- 'omonospace': u'\uFF4F',
- 'one': u'\u0031',
- 'onearabic': u'\u0661',
- 'onebengali': u'\u09E7',
- 'onecircle': u'\u2460',
- 'onecircleinversesansserif': u'\u278A',
- 'onedeva': u'\u0967',
- 'onedotenleader': u'\u2024',
- 'oneeighth': u'\u215B',
- 'onefitted': u'\uF6DC',
- 'onegujarati': u'\u0AE7',
- 'onegurmukhi': u'\u0A67',
- 'onehackarabic': u'\u0661',
- 'onehalf': u'\u00BD',
- 'onehangzhou': u'\u3021',
- 'oneideographicparen': u'\u3220',
- 'oneinferior': u'\u2081',
- 'onemonospace': u'\uFF11',
- 'onenumeratorbengali': u'\u09F4',
- 'oneoldstyle': u'\uF731',
- 'oneparen': u'\u2474',
- 'oneperiod': u'\u2488',
- 'onepersian': u'\u06F1',
- 'onequarter': u'\u00BC',
- 'oneroman': u'\u2170',
- 'onesuperior': u'\u00B9',
- 'onethai': u'\u0E51',
- 'onethird': u'\u2153',
- 'oogonek': u'\u01EB',
- 'oogonekmacron': u'\u01ED',
- 'oogurmukhi': u'\u0A13',
- 'oomatragurmukhi': u'\u0A4B',
- 'oopen': u'\u0254',
- 'oparen': u'\u24AA',
- 'openbullet': u'\u25E6',
- 'option': u'\u2325',
- 'ordfeminine': u'\u00AA',
- 'ordmasculine': u'\u00BA',
- 'orthogonal': u'\u221F',
- 'oshortdeva': u'\u0912',
- 'oshortvowelsigndeva': u'\u094A',
- 'oslash': u'\u00F8',
- 'oslashacute': u'\u01FF',
- 'osmallhiragana': u'\u3049',
- 'osmallkatakana': u'\u30A9',
- 'osmallkatakanahalfwidth': u'\uFF6B',
- 'ostrokeacute': u'\u01FF',
- 'osuperior': u'\uF6F0',
- 'otcyrillic': u'\u047F',
- 'otilde': u'\u00F5',
- 'otildeacute': u'\u1E4D',
- 'otildedieresis': u'\u1E4F',
- 'oubopomofo': u'\u3121',
- 'overline': u'\u203E',
- 'overlinecenterline': u'\uFE4A',
- 'overlinecmb': u'\u0305',
- 'overlinedashed': u'\uFE49',
- 'overlinedblwavy': u'\uFE4C',
- 'overlinewavy': u'\uFE4B',
- 'overscore': u'\u00AF',
- 'ovowelsignbengali': u'\u09CB',
- 'ovowelsigndeva': u'\u094B',
- 'ovowelsigngujarati': u'\u0ACB',
- 'p': u'\u0070',
- 'paampssquare': u'\u3380',
- 'paasentosquare': u'\u332B',
- 'pabengali': u'\u09AA',
- 'pacute': u'\u1E55',
- 'padeva': u'\u092A',
- 'pagedown': u'\u21DF',
- 'pageup': u'\u21DE',
- 'pagujarati': u'\u0AAA',
- 'pagurmukhi': u'\u0A2A',
- 'pahiragana': u'\u3071',
- 'paiyannoithai': u'\u0E2F',
- 'pakatakana': u'\u30D1',
- 'palatalizationcyrilliccmb': u'\u0484',
- 'palochkacyrillic': u'\u04C0',
- 'pansioskorean': u'\u317F',
- 'paragraph': u'\u00B6',
- 'parallel': u'\u2225',
- 'parenleft': u'\u0028',
- 'parenleftaltonearabic': u'\uFD3E',
- 'parenleftbt': u'\uF8ED',
- 'parenleftex': u'\uF8EC',
- 'parenleftinferior': u'\u208D',
- 'parenleftmonospace': u'\uFF08',
- 'parenleftsmall': u'\uFE59',
- 'parenleftsuperior': u'\u207D',
- 'parenlefttp': u'\uF8EB',
- 'parenleftvertical': u'\uFE35',
- 'parenright': u'\u0029',
- 'parenrightaltonearabic': u'\uFD3F',
- 'parenrightbt': u'\uF8F8',
- 'parenrightex': u'\uF8F7',
- 'parenrightinferior': u'\u208E',
- 'parenrightmonospace': u'\uFF09',
- 'parenrightsmall': u'\uFE5A',
- 'parenrightsuperior': u'\u207E',
- 'parenrighttp': u'\uF8F6',
- 'parenrightvertical': u'\uFE36',
- 'partialdiff': u'\u2202',
- 'paseqhebrew': u'\u05C0',
- 'pashtahebrew': u'\u0599',
- 'pasquare': u'\u33A9',
- 'patah': u'\u05B7',
- 'patah11': u'\u05B7',
- 'patah1d': u'\u05B7',
- 'patah2a': u'\u05B7',
- 'patahhebrew': u'\u05B7',
- 'patahnarrowhebrew': u'\u05B7',
- 'patahquarterhebrew': u'\u05B7',
- 'patahwidehebrew': u'\u05B7',
- 'pazerhebrew': u'\u05A1',
- 'pbopomofo': u'\u3106',
- 'pcircle': u'\u24DF',
- 'pdotaccent': u'\u1E57',
- 'pe': u'\u05E4',
- 'pecyrillic': u'\u043F',
- 'pedagesh': u'\uFB44',
- 'pedageshhebrew': u'\uFB44',
- 'peezisquare': u'\u333B',
- 'pefinaldageshhebrew': u'\uFB43',
- 'peharabic': u'\u067E',
- 'peharmenian': u'\u057A',
- 'pehebrew': u'\u05E4',
- 'pehfinalarabic': u'\uFB57',
- 'pehinitialarabic': u'\uFB58',
- 'pehiragana': u'\u307A',
- 'pehmedialarabic': u'\uFB59',
- 'pekatakana': u'\u30DA',
- 'pemiddlehookcyrillic': u'\u04A7',
- 'perafehebrew': u'\uFB4E',
- 'percent': u'\u0025',
- 'percentarabic': u'\u066A',
- 'percentmonospace': u'\uFF05',
- 'percentsmall': u'\uFE6A',
- 'period': u'\u002E',
- 'periodarmenian': u'\u0589',
- 'periodcentered': u'\u00B7',
- 'periodhalfwidth': u'\uFF61',
- 'periodinferior': u'\uF6E7',
- 'periodmonospace': u'\uFF0E',
- 'periodsmall': u'\uFE52',
- 'periodsuperior': u'\uF6E8',
- 'perispomenigreekcmb': u'\u0342',
- 'perpendicular': u'\u22A5',
- 'perthousand': u'\u2030',
- 'peseta': u'\u20A7',
- 'pfsquare': u'\u338A',
- 'phabengali': u'\u09AB',
- 'phadeva': u'\u092B',
- 'phagujarati': u'\u0AAB',
- 'phagurmukhi': u'\u0A2B',
- 'phi': u'\u03C6',
- 'phi1': u'\u03D5',
- 'phieuphacirclekorean': u'\u327A',
- 'phieuphaparenkorean': u'\u321A',
- 'phieuphcirclekorean': u'\u326C',
- 'phieuphkorean': u'\u314D',
- 'phieuphparenkorean': u'\u320C',
- 'philatin': u'\u0278',
- 'phinthuthai': u'\u0E3A',
- 'phisymbolgreek': u'\u03D5',
- 'phook': u'\u01A5',
- 'phophanthai': u'\u0E1E',
- 'phophungthai': u'\u0E1C',
- 'phosamphaothai': u'\u0E20',
- 'pi': u'\u03C0',
- 'pieupacirclekorean': u'\u3273',
- 'pieupaparenkorean': u'\u3213',
- 'pieupcieuckorean': u'\u3176',
- 'pieupcirclekorean': u'\u3265',
- 'pieupkiyeokkorean': u'\u3172',
- 'pieupkorean': u'\u3142',
- 'pieupparenkorean': u'\u3205',
- 'pieupsioskiyeokkorean': u'\u3174',
- 'pieupsioskorean': u'\u3144',
- 'pieupsiostikeutkorean': u'\u3175',
- 'pieupthieuthkorean': u'\u3177',
- 'pieuptikeutkorean': u'\u3173',
- 'pihiragana': u'\u3074',
- 'pikatakana': u'\u30D4',
- 'pisymbolgreek': u'\u03D6',
- 'piwrarmenian': u'\u0583',
- 'plus': u'\u002B',
- 'plusbelowcmb': u'\u031F',
- 'pluscircle': u'\u2295',
- 'plusminus': u'\u00B1',
- 'plusmod': u'\u02D6',
- 'plusmonospace': u'\uFF0B',
- 'plussmall': u'\uFE62',
- 'plussuperior': u'\u207A',
- 'pmonospace': u'\uFF50',
- 'pmsquare': u'\u33D8',
- 'pohiragana': u'\u307D',
- 'pointingindexdownwhite': u'\u261F',
- 'pointingindexleftwhite': u'\u261C',
- 'pointingindexrightwhite': u'\u261E',
- 'pointingindexupwhite': u'\u261D',
- 'pokatakana': u'\u30DD',
- 'poplathai': u'\u0E1B',
- 'postalmark': u'\u3012',
- 'postalmarkface': u'\u3020',
- 'pparen': u'\u24AB',
- 'precedes': u'\u227A',
- 'prescription': u'\u211E',
- 'primemod': u'\u02B9',
- 'primereversed': u'\u2035',
- 'product': u'\u220F',
- 'projective': u'\u2305',
- 'prolongedkana': u'\u30FC',
- 'propellor': u'\u2318',
- 'propersubset': u'\u2282',
- 'propersuperset': u'\u2283',
- 'proportion': u'\u2237',
- 'proportional': u'\u221D',
- 'psi': u'\u03C8',
- 'psicyrillic': u'\u0471',
- 'psilipneumatacyrilliccmb': u'\u0486',
- 'pssquare': u'\u33B0',
- 'puhiragana': u'\u3077',
- 'pukatakana': u'\u30D7',
- 'pvsquare': u'\u33B4',
- 'pwsquare': u'\u33BA',
- 'q': u'\u0071',
- 'qadeva': u'\u0958',
- 'qadmahebrew': u'\u05A8',
- 'qafarabic': u'\u0642',
- 'qaffinalarabic': u'\uFED6',
- 'qafinitialarabic': u'\uFED7',
- 'qafmedialarabic': u'\uFED8',
- 'qamats': u'\u05B8',
- 'qamats10': u'\u05B8',
- 'qamats1a': u'\u05B8',
- 'qamats1c': u'\u05B8',
- 'qamats27': u'\u05B8',
- 'qamats29': u'\u05B8',
- 'qamats33': u'\u05B8',
- 'qamatsde': u'\u05B8',
- 'qamatshebrew': u'\u05B8',
- 'qamatsnarrowhebrew': u'\u05B8',
- 'qamatsqatanhebrew': u'\u05B8',
- 'qamatsqatannarrowhebrew': u'\u05B8',
- 'qamatsqatanquarterhebrew': u'\u05B8',
- 'qamatsqatanwidehebrew': u'\u05B8',
- 'qamatsquarterhebrew': u'\u05B8',
- 'qamatswidehebrew': u'\u05B8',
- 'qarneyparahebrew': u'\u059F',
- 'qbopomofo': u'\u3111',
- 'qcircle': u'\u24E0',
- 'qhook': u'\u02A0',
- 'qmonospace': u'\uFF51',
- 'qof': u'\u05E7',
- 'qofdagesh': u'\uFB47',
- 'qofdageshhebrew': u'\uFB47',
- 'qofhatafpatah': u'\u05E7\u05B2',
- 'qofhatafpatahhebrew': u'\u05E7\u05B2',
- 'qofhatafsegol': u'\u05E7\u05B1',
- 'qofhatafsegolhebrew': u'\u05E7\u05B1',
- 'qofhebrew': u'\u05E7',
- 'qofhiriq': u'\u05E7\u05B4',
- 'qofhiriqhebrew': u'\u05E7\u05B4',
- 'qofholam': u'\u05E7\u05B9',
- 'qofholamhebrew': u'\u05E7\u05B9',
- 'qofpatah': u'\u05E7\u05B7',
- 'qofpatahhebrew': u'\u05E7\u05B7',
- 'qofqamats': u'\u05E7\u05B8',
- 'qofqamatshebrew': u'\u05E7\u05B8',
- 'qofqubuts': u'\u05E7\u05BB',
- 'qofqubutshebrew': u'\u05E7\u05BB',
- 'qofsegol': u'\u05E7\u05B6',
- 'qofsegolhebrew': u'\u05E7\u05B6',
- 'qofsheva': u'\u05E7\u05B0',
- 'qofshevahebrew': u'\u05E7\u05B0',
- 'qoftsere': u'\u05E7\u05B5',
- 'qoftserehebrew': u'\u05E7\u05B5',
- 'qparen': u'\u24AC',
- 'quarternote': u'\u2669',
- 'qubuts': u'\u05BB',
- 'qubuts18': u'\u05BB',
- 'qubuts25': u'\u05BB',
- 'qubuts31': u'\u05BB',
- 'qubutshebrew': u'\u05BB',
- 'qubutsnarrowhebrew': u'\u05BB',
- 'qubutsquarterhebrew': u'\u05BB',
- 'qubutswidehebrew': u'\u05BB',
- 'question': u'\u003F',
- 'questionarabic': u'\u061F',
- 'questionarmenian': u'\u055E',
- 'questiondown': u'\u00BF',
- 'questiondownsmall': u'\uF7BF',
- 'questiongreek': u'\u037E',
- 'questionmonospace': u'\uFF1F',
- 'questionsmall': u'\uF73F',
- 'quotedbl': u'\u0022',
- 'quotedblbase': u'\u201E',
- 'quotedblleft': u'\u201C',
- 'quotedblmonospace': u'\uFF02',
- 'quotedblprime': u'\u301E',
- 'quotedblprimereversed': u'\u301D',
- 'quotedblright': u'\u201D',
- 'quoteleft': u'\u2018',
- 'quoteleftreversed': u'\u201B',
- 'quotereversed': u'\u201B',
- 'quoteright': u'\u2019',
- 'quoterightn': u'\u0149',
- 'quotesinglbase': u'\u201A',
- 'quotesingle': u'\u0027',
- 'quotesinglemonospace': u'\uFF07',
- 'r': u'\u0072',
- 'raarmenian': u'\u057C',
- 'rabengali': u'\u09B0',
- 'racute': u'\u0155',
- 'radeva': u'\u0930',
- 'radical': u'\u221A',
- 'radicalex': u'\uF8E5',
- 'radoverssquare': u'\u33AE',
- 'radoverssquaredsquare': u'\u33AF',
- 'radsquare': u'\u33AD',
- 'rafe': u'\u05BF',
- 'rafehebrew': u'\u05BF',
- 'ragujarati': u'\u0AB0',
- 'ragurmukhi': u'\u0A30',
- 'rahiragana': u'\u3089',
- 'rakatakana': u'\u30E9',
- 'rakatakanahalfwidth': u'\uFF97',
- 'ralowerdiagonalbengali': u'\u09F1',
- 'ramiddlediagonalbengali': u'\u09F0',
- 'ramshorn': u'\u0264',
- 'ratio': u'\u2236',
- 'rbopomofo': u'\u3116',
- 'rcaron': u'\u0159',
- 'rcedilla': u'\u0157',
- 'rcircle': u'\u24E1',
- 'rcommaaccent': u'\u0157',
- 'rdblgrave': u'\u0211',
- 'rdotaccent': u'\u1E59',
- 'rdotbelow': u'\u1E5B',
- 'rdotbelowmacron': u'\u1E5D',
- 'referencemark': u'\u203B',
- 'reflexsubset': u'\u2286',
- 'reflexsuperset': u'\u2287',
- 'registered': u'\u00AE',
- 'registersans': u'\uF8E8',
- 'registerserif': u'\uF6DA',
- 'reharabic': u'\u0631',
- 'reharmenian': u'\u0580',
- 'rehfinalarabic': u'\uFEAE',
- 'rehiragana': u'\u308C',
- 'rehyehaleflamarabic': u'\u0631\uFEF3\uFE8E\u0644',
- 'rekatakana': u'\u30EC',
- 'rekatakanahalfwidth': u'\uFF9A',
- 'resh': u'\u05E8',
- 'reshdageshhebrew': u'\uFB48',
- 'reshhatafpatah': u'\u05E8\u05B2',
- 'reshhatafpatahhebrew': u'\u05E8\u05B2',
- 'reshhatafsegol': u'\u05E8\u05B1',
- 'reshhatafsegolhebrew': u'\u05E8\u05B1',
- 'reshhebrew': u'\u05E8',
- 'reshhiriq': u'\u05E8\u05B4',
- 'reshhiriqhebrew': u'\u05E8\u05B4',
- 'reshholam': u'\u05E8\u05B9',
- 'reshholamhebrew': u'\u05E8\u05B9',
- 'reshpatah': u'\u05E8\u05B7',
- 'reshpatahhebrew': u'\u05E8\u05B7',
- 'reshqamats': u'\u05E8\u05B8',
- 'reshqamatshebrew': u'\u05E8\u05B8',
- 'reshqubuts': u'\u05E8\u05BB',
- 'reshqubutshebrew': u'\u05E8\u05BB',
- 'reshsegol': u'\u05E8\u05B6',
- 'reshsegolhebrew': u'\u05E8\u05B6',
- 'reshsheva': u'\u05E8\u05B0',
- 'reshshevahebrew': u'\u05E8\u05B0',
- 'reshtsere': u'\u05E8\u05B5',
- 'reshtserehebrew': u'\u05E8\u05B5',
- 'reversedtilde': u'\u223D',
- 'reviahebrew': u'\u0597',
- 'reviamugrashhebrew': u'\u0597',
- 'revlogicalnot': u'\u2310',
- 'rfishhook': u'\u027E',
- 'rfishhookreversed': u'\u027F',
- 'rhabengali': u'\u09DD',
- 'rhadeva': u'\u095D',
- 'rho': u'\u03C1',
- 'rhook': u'\u027D',
- 'rhookturned': u'\u027B',
- 'rhookturnedsuperior': u'\u02B5',
- 'rhosymbolgreek': u'\u03F1',
- 'rhotichookmod': u'\u02DE',
- 'rieulacirclekorean': u'\u3271',
- 'rieulaparenkorean': u'\u3211',
- 'rieulcirclekorean': u'\u3263',
- 'rieulhieuhkorean': u'\u3140',
- 'rieulkiyeokkorean': u'\u313A',
- 'rieulkiyeoksioskorean': u'\u3169',
- 'rieulkorean': u'\u3139',
- 'rieulmieumkorean': u'\u313B',
- 'rieulpansioskorean': u'\u316C',
- 'rieulparenkorean': u'\u3203',
- 'rieulphieuphkorean': u'\u313F',
- 'rieulpieupkorean': u'\u313C',
- 'rieulpieupsioskorean': u'\u316B',
- 'rieulsioskorean': u'\u313D',
- 'rieulthieuthkorean': u'\u313E',
- 'rieultikeutkorean': u'\u316A',
- 'rieulyeorinhieuhkorean': u'\u316D',
- 'rightangle': u'\u221F',
- 'righttackbelowcmb': u'\u0319',
- 'righttriangle': u'\u22BF',
- 'rihiragana': u'\u308A',
- 'rikatakana': u'\u30EA',
- 'rikatakanahalfwidth': u'\uFF98',
- 'ring': u'\u02DA',
- 'ringbelowcmb': u'\u0325',
- 'ringcmb': u'\u030A',
- 'ringhalfleft': u'\u02BF',
- 'ringhalfleftarmenian': u'\u0559',
- 'ringhalfleftbelowcmb': u'\u031C',
- 'ringhalfleftcentered': u'\u02D3',
- 'ringhalfright': u'\u02BE',
- 'ringhalfrightbelowcmb': u'\u0339',
- 'ringhalfrightcentered': u'\u02D2',
- 'rinvertedbreve': u'\u0213',
- 'rittorusquare': u'\u3351',
- 'rlinebelow': u'\u1E5F',
- 'rlongleg': u'\u027C',
- 'rlonglegturned': u'\u027A',
- 'rmonospace': u'\uFF52',
- 'rohiragana': u'\u308D',
- 'rokatakana': u'\u30ED',
- 'rokatakanahalfwidth': u'\uFF9B',
- 'roruathai': u'\u0E23',
- 'rparen': u'\u24AD',
- 'rrabengali': u'\u09DC',
- 'rradeva': u'\u0931',
- 'rragurmukhi': u'\u0A5C',
- 'rreharabic': u'\u0691',
- 'rrehfinalarabic': u'\uFB8D',
- 'rrvocalicbengali': u'\u09E0',
- 'rrvocalicdeva': u'\u0960',
- 'rrvocalicgujarati': u'\u0AE0',
- 'rrvocalicvowelsignbengali': u'\u09C4',
- 'rrvocalicvowelsigndeva': u'\u0944',
- 'rrvocalicvowelsigngujarati': u'\u0AC4',
- 'rsuperior': u'\uF6F1',
- 'rtblock': u'\u2590',
- 'rturned': u'\u0279',
- 'rturnedsuperior': u'\u02B4',
- 'ruhiragana': u'\u308B',
- 'rukatakana': u'\u30EB',
- 'rukatakanahalfwidth': u'\uFF99',
- 'rupeemarkbengali': u'\u09F2',
- 'rupeesignbengali': u'\u09F3',
- 'rupiah': u'\uF6DD',
- 'ruthai': u'\u0E24',
- 'rvocalicbengali': u'\u098B',
- 'rvocalicdeva': u'\u090B',
- 'rvocalicgujarati': u'\u0A8B',
- 'rvocalicvowelsignbengali': u'\u09C3',
- 'rvocalicvowelsigndeva': u'\u0943',
- 'rvocalicvowelsigngujarati': u'\u0AC3',
- 's': u'\u0073',
- 'sabengali': u'\u09B8',
- 'sacute': u'\u015B',
- 'sacutedotaccent': u'\u1E65',
- 'sadarabic': u'\u0635',
- 'sadeva': u'\u0938',
- 'sadfinalarabic': u'\uFEBA',
- 'sadinitialarabic': u'\uFEBB',
- 'sadmedialarabic': u'\uFEBC',
- 'sagujarati': u'\u0AB8',
- 'sagurmukhi': u'\u0A38',
- 'sahiragana': u'\u3055',
- 'sakatakana': u'\u30B5',
- 'sakatakanahalfwidth': u'\uFF7B',
- 'sallallahoualayhewasallamarabic': u'\uFDFA',
- 'samekh': u'\u05E1',
- 'samekhdagesh': u'\uFB41',
- 'samekhdageshhebrew': u'\uFB41',
- 'samekhhebrew': u'\u05E1',
- 'saraaathai': u'\u0E32',
- 'saraaethai': u'\u0E41',
- 'saraaimaimalaithai': u'\u0E44',
- 'saraaimaimuanthai': u'\u0E43',
- 'saraamthai': u'\u0E33',
- 'saraathai': u'\u0E30',
- 'saraethai': u'\u0E40',
- 'saraiileftthai': u'\uF886',
- 'saraiithai': u'\u0E35',
- 'saraileftthai': u'\uF885',
- 'saraithai': u'\u0E34',
- 'saraothai': u'\u0E42',
- 'saraueeleftthai': u'\uF888',
- 'saraueethai': u'\u0E37',
- 'saraueleftthai': u'\uF887',
- 'sarauethai': u'\u0E36',
- 'sarauthai': u'\u0E38',
- 'sarauuthai': u'\u0E39',
- 'sbopomofo': u'\u3119',
- 'scaron': u'\u0161',
- 'scarondotaccent': u'\u1E67',
- 'scedilla': u'\u015F',
- 'schwa': u'\u0259',
- 'schwacyrillic': u'\u04D9',
- 'schwadieresiscyrillic': u'\u04DB',
- 'schwahook': u'\u025A',
- 'scircle': u'\u24E2',
- 'scircumflex': u'\u015D',
- 'scommaaccent': u'\u0219',
- 'sdotaccent': u'\u1E61',
- 'sdotbelow': u'\u1E63',
- 'sdotbelowdotaccent': u'\u1E69',
- 'seagullbelowcmb': u'\u033C',
- 'second': u'\u2033',
- 'secondtonechinese': u'\u02CA',
- 'section': u'\u00A7',
- 'seenarabic': u'\u0633',
- 'seenfinalarabic': u'\uFEB2',
- 'seeninitialarabic': u'\uFEB3',
- 'seenmedialarabic': u'\uFEB4',
- 'segol': u'\u05B6',
- 'segol13': u'\u05B6',
- 'segol1f': u'\u05B6',
- 'segol2c': u'\u05B6',
- 'segolhebrew': u'\u05B6',
- 'segolnarrowhebrew': u'\u05B6',
- 'segolquarterhebrew': u'\u05B6',
- 'segoltahebrew': u'\u0592',
- 'segolwidehebrew': u'\u05B6',
- 'seharmenian': u'\u057D',
- 'sehiragana': u'\u305B',
- 'sekatakana': u'\u30BB',
- 'sekatakanahalfwidth': u'\uFF7E',
- 'semicolon': u'\u003B',
- 'semicolonarabic': u'\u061B',
- 'semicolonmonospace': u'\uFF1B',
- 'semicolonsmall': u'\uFE54',
- 'semivoicedmarkkana': u'\u309C',
- 'semivoicedmarkkanahalfwidth': u'\uFF9F',
- 'sentisquare': u'\u3322',
- 'sentosquare': u'\u3323',
- 'seven': u'\u0037',
- 'sevenarabic': u'\u0667',
- 'sevenbengali': u'\u09ED',
- 'sevencircle': u'\u2466',
- 'sevencircleinversesansserif': u'\u2790',
- 'sevendeva': u'\u096D',
- 'seveneighths': u'\u215E',
- 'sevengujarati': u'\u0AED',
- 'sevengurmukhi': u'\u0A6D',
- 'sevenhackarabic': u'\u0667',
- 'sevenhangzhou': u'\u3027',
- 'sevenideographicparen': u'\u3226',
- 'seveninferior': u'\u2087',
- 'sevenmonospace': u'\uFF17',
- 'sevenoldstyle': u'\uF737',
- 'sevenparen': u'\u247A',
- 'sevenperiod': u'\u248E',
- 'sevenpersian': u'\u06F7',
- 'sevenroman': u'\u2176',
- 'sevensuperior': u'\u2077',
- 'seventeencircle': u'\u2470',
- 'seventeenparen': u'\u2484',
- 'seventeenperiod': u'\u2498',
- 'seventhai': u'\u0E57',
- 'sfthyphen': u'\u00AD',
- 'shaarmenian': u'\u0577',
- 'shabengali': u'\u09B6',
- 'shacyrillic': u'\u0448',
- 'shaddaarabic': u'\u0651',
- 'shaddadammaarabic': u'\uFC61',
- 'shaddadammatanarabic': u'\uFC5E',
- 'shaddafathaarabic': u'\uFC60',
- 'shaddafathatanarabic': u'\u0651\u064B',
- 'shaddakasraarabic': u'\uFC62',
- 'shaddakasratanarabic': u'\uFC5F',
- 'shade': u'\u2592',
- 'shadedark': u'\u2593',
- 'shadelight': u'\u2591',
- 'shademedium': u'\u2592',
- 'shadeva': u'\u0936',
- 'shagujarati': u'\u0AB6',
- 'shagurmukhi': u'\u0A36',
- 'shalshelethebrew': u'\u0593',
- 'shbopomofo': u'\u3115',
- 'shchacyrillic': u'\u0449',
- 'sheenarabic': u'\u0634',
- 'sheenfinalarabic': u'\uFEB6',
- 'sheeninitialarabic': u'\uFEB7',
- 'sheenmedialarabic': u'\uFEB8',
- 'sheicoptic': u'\u03E3',
- 'sheqel': u'\u20AA',
- 'sheqelhebrew': u'\u20AA',
- 'sheva': u'\u05B0',
- 'sheva115': u'\u05B0',
- 'sheva15': u'\u05B0',
- 'sheva22': u'\u05B0',
- 'sheva2e': u'\u05B0',
- 'shevahebrew': u'\u05B0',
- 'shevanarrowhebrew': u'\u05B0',
- 'shevaquarterhebrew': u'\u05B0',
- 'shevawidehebrew': u'\u05B0',
- 'shhacyrillic': u'\u04BB',
- 'shimacoptic': u'\u03ED',
- 'shin': u'\u05E9',
- 'shindagesh': u'\uFB49',
- 'shindageshhebrew': u'\uFB49',
- 'shindageshshindot': u'\uFB2C',
- 'shindageshshindothebrew': u'\uFB2C',
- 'shindageshsindot': u'\uFB2D',
- 'shindageshsindothebrew': u'\uFB2D',
- 'shindothebrew': u'\u05C1',
- 'shinhebrew': u'\u05E9',
- 'shinshindot': u'\uFB2A',
- 'shinshindothebrew': u'\uFB2A',
- 'shinsindot': u'\uFB2B',
- 'shinsindothebrew': u'\uFB2B',
- 'shook': u'\u0282',
- 'sigma': u'\u03C3',
- 'sigma1': u'\u03C2',
- 'sigmafinal': u'\u03C2',
- 'sigmalunatesymbolgreek': u'\u03F2',
- 'sihiragana': u'\u3057',
- 'sikatakana': u'\u30B7',
- 'sikatakanahalfwidth': u'\uFF7C',
- 'siluqhebrew': u'\u05BD',
- 'siluqlefthebrew': u'\u05BD',
- 'similar': u'\u223C',
- 'sindothebrew': u'\u05C2',
- 'siosacirclekorean': u'\u3274',
- 'siosaparenkorean': u'\u3214',
- 'sioscieuckorean': u'\u317E',
- 'sioscirclekorean': u'\u3266',
- 'sioskiyeokkorean': u'\u317A',
- 'sioskorean': u'\u3145',
- 'siosnieunkorean': u'\u317B',
- 'siosparenkorean': u'\u3206',
- 'siospieupkorean': u'\u317D',
- 'siostikeutkorean': u'\u317C',
- 'six': u'\u0036',
- 'sixarabic': u'\u0666',
- 'sixbengali': u'\u09EC',
- 'sixcircle': u'\u2465',
- 'sixcircleinversesansserif': u'\u278F',
- 'sixdeva': u'\u096C',
- 'sixgujarati': u'\u0AEC',
- 'sixgurmukhi': u'\u0A6C',
- 'sixhackarabic': u'\u0666',
- 'sixhangzhou': u'\u3026',
- 'sixideographicparen': u'\u3225',
- 'sixinferior': u'\u2086',
- 'sixmonospace': u'\uFF16',
- 'sixoldstyle': u'\uF736',
- 'sixparen': u'\u2479',
- 'sixperiod': u'\u248D',
- 'sixpersian': u'\u06F6',
- 'sixroman': u'\u2175',
- 'sixsuperior': u'\u2076',
- 'sixteencircle': u'\u246F',
- 'sixteencurrencydenominatorbengali': u'\u09F9',
- 'sixteenparen': u'\u2483',
- 'sixteenperiod': u'\u2497',
- 'sixthai': u'\u0E56',
- 'slash': u'\u002F',
- 'slashmonospace': u'\uFF0F',
- 'slong': u'\u017F',
- 'slongdotaccent': u'\u1E9B',
- 'smileface': u'\u263A',
- 'smonospace': u'\uFF53',
- 'sofpasuqhebrew': u'\u05C3',
- 'softhyphen': u'\u00AD',
- 'softsigncyrillic': u'\u044C',
- 'sohiragana': u'\u305D',
- 'sokatakana': u'\u30BD',
- 'sokatakanahalfwidth': u'\uFF7F',
- 'soliduslongoverlaycmb': u'\u0338',
- 'solidusshortoverlaycmb': u'\u0337',
- 'sorusithai': u'\u0E29',
- 'sosalathai': u'\u0E28',
- 'sosothai': u'\u0E0B',
- 'sosuathai': u'\u0E2A',
- 'space': u'\u0020',
- 'spacehackarabic': u'\u0020',
- 'spade': u'\u2660',
- 'spadesuitblack': u'\u2660',
- 'spadesuitwhite': u'\u2664',
- 'sparen': u'\u24AE',
- 'squarebelowcmb': u'\u033B',
- 'squarecc': u'\u33C4',
- 'squarecm': u'\u339D',
- 'squarediagonalcrosshatchfill': u'\u25A9',
- 'squarehorizontalfill': u'\u25A4',
- 'squarekg': u'\u338F',
- 'squarekm': u'\u339E',
- 'squarekmcapital': u'\u33CE',
- 'squareln': u'\u33D1',
- 'squarelog': u'\u33D2',
- 'squaremg': u'\u338E',
- 'squaremil': u'\u33D5',
- 'squaremm': u'\u339C',
- 'squaremsquared': u'\u33A1',
- 'squareorthogonalcrosshatchfill': u'\u25A6',
- 'squareupperlefttolowerrightfill': u'\u25A7',
- 'squareupperrighttolowerleftfill': u'\u25A8',
- 'squareverticalfill': u'\u25A5',
- 'squarewhitewithsmallblack': u'\u25A3',
- 'srsquare': u'\u33DB',
- 'ssabengali': u'\u09B7',
- 'ssadeva': u'\u0937',
- 'ssagujarati': u'\u0AB7',
- 'ssangcieuckorean': u'\u3149',
- 'ssanghieuhkorean': u'\u3185',
- 'ssangieungkorean': u'\u3180',
- 'ssangkiyeokkorean': u'\u3132',
- 'ssangnieunkorean': u'\u3165',
- 'ssangpieupkorean': u'\u3143',
- 'ssangsioskorean': u'\u3146',
- 'ssangtikeutkorean': u'\u3138',
- 'ssuperior': u'\uF6F2',
- 'sterling': u'\u00A3',
- 'sterlingmonospace': u'\uFFE1',
- 'strokelongoverlaycmb': u'\u0336',
- 'strokeshortoverlaycmb': u'\u0335',
- 'subset': u'\u2282',
- 'subsetnotequal': u'\u228A',
- 'subsetorequal': u'\u2286',
- 'succeeds': u'\u227B',
- 'suchthat': u'\u220B',
- 'suhiragana': u'\u3059',
- 'sukatakana': u'\u30B9',
- 'sukatakanahalfwidth': u'\uFF7D',
- 'sukunarabic': u'\u0652',
- 'summation': u'\u2211',
- 'sun': u'\u263C',
- 'superset': u'\u2283',
- 'supersetnotequal': u'\u228B',
- 'supersetorequal': u'\u2287',
- 'svsquare': u'\u33DC',
- 'syouwaerasquare': u'\u337C',
- 't': u'\u0074',
- 'tabengali': u'\u09A4',
- 'tackdown': u'\u22A4',
- 'tackleft': u'\u22A3',
- 'tadeva': u'\u0924',
- 'tagujarati': u'\u0AA4',
- 'tagurmukhi': u'\u0A24',
- 'taharabic': u'\u0637',
- 'tahfinalarabic': u'\uFEC2',
- 'tahinitialarabic': u'\uFEC3',
- 'tahiragana': u'\u305F',
- 'tahmedialarabic': u'\uFEC4',
- 'taisyouerasquare': u'\u337D',
- 'takatakana': u'\u30BF',
- 'takatakanahalfwidth': u'\uFF80',
- 'tatweelarabic': u'\u0640',
- 'tau': u'\u03C4',
- 'tav': u'\u05EA',
- 'tavdages': u'\uFB4A',
- 'tavdagesh': u'\uFB4A',
- 'tavdageshhebrew': u'\uFB4A',
- 'tavhebrew': u'\u05EA',
- 'tbar': u'\u0167',
- 'tbopomofo': u'\u310A',
- 'tcaron': u'\u0165',
- 'tccurl': u'\u02A8',
- 'tcedilla': u'\u0163',
- 'tcheharabic': u'\u0686',
- 'tchehfinalarabic': u'\uFB7B',
- 'tchehinitialarabic': u'\uFB7C',
- 'tchehmedialarabic': u'\uFB7D',
- 'tchehmeeminitialarabic': u'\uFB7C\uFEE4',
- 'tcircle': u'\u24E3',
- 'tcircumflexbelow': u'\u1E71',
- 'tcommaaccent': u'\u0163',
- 'tdieresis': u'\u1E97',
- 'tdotaccent': u'\u1E6B',
- 'tdotbelow': u'\u1E6D',
- 'tecyrillic': u'\u0442',
- 'tedescendercyrillic': u'\u04AD',
- 'teharabic': u'\u062A',
- 'tehfinalarabic': u'\uFE96',
- 'tehhahinitialarabic': u'\uFCA2',
- 'tehhahisolatedarabic': u'\uFC0C',
- 'tehinitialarabic': u'\uFE97',
- 'tehiragana': u'\u3066',
- 'tehjeeminitialarabic': u'\uFCA1',
- 'tehjeemisolatedarabic': u'\uFC0B',
- 'tehmarbutaarabic': u'\u0629',
- 'tehmarbutafinalarabic': u'\uFE94',
- 'tehmedialarabic': u'\uFE98',
- 'tehmeeminitialarabic': u'\uFCA4',
- 'tehmeemisolatedarabic': u'\uFC0E',
- 'tehnoonfinalarabic': u'\uFC73',
- 'tekatakana': u'\u30C6',
- 'tekatakanahalfwidth': u'\uFF83',
- 'telephone': u'\u2121',
- 'telephoneblack': u'\u260E',
- 'telishagedolahebrew': u'\u05A0',
- 'telishaqetanahebrew': u'\u05A9',
- 'tencircle': u'\u2469',
- 'tenideographicparen': u'\u3229',
- 'tenparen': u'\u247D',
- 'tenperiod': u'\u2491',
- 'tenroman': u'\u2179',
- 'tesh': u'\u02A7',
- 'tet': u'\u05D8',
- 'tetdagesh': u'\uFB38',
- 'tetdageshhebrew': u'\uFB38',
- 'tethebrew': u'\u05D8',
- 'tetsecyrillic': u'\u04B5',
- 'tevirhebrew': u'\u059B',
- 'tevirlefthebrew': u'\u059B',
- 'thabengali': u'\u09A5',
- 'thadeva': u'\u0925',
- 'thagujarati': u'\u0AA5',
- 'thagurmukhi': u'\u0A25',
- 'thalarabic': u'\u0630',
- 'thalfinalarabic': u'\uFEAC',
- 'thanthakhatlowleftthai': u'\uF898',
- 'thanthakhatlowrightthai': u'\uF897',
- 'thanthakhatthai': u'\u0E4C',
- 'thanthakhatupperleftthai': u'\uF896',
- 'theharabic': u'\u062B',
- 'thehfinalarabic': u'\uFE9A',
- 'thehinitialarabic': u'\uFE9B',
- 'thehmedialarabic': u'\uFE9C',
- 'thereexists': u'\u2203',
- 'therefore': u'\u2234',
- 'theta': u'\u03B8',
- 'theta1': u'\u03D1',
- 'thetasymbolgreek': u'\u03D1',
- 'thieuthacirclekorean': u'\u3279',
- 'thieuthaparenkorean': u'\u3219',
- 'thieuthcirclekorean': u'\u326B',
- 'thieuthkorean': u'\u314C',
- 'thieuthparenkorean': u'\u320B',
- 'thirteencircle': u'\u246C',
- 'thirteenparen': u'\u2480',
- 'thirteenperiod': u'\u2494',
- 'thonangmonthothai': u'\u0E11',
- 'thook': u'\u01AD',
- 'thophuthaothai': u'\u0E12',
- 'thorn': u'\u00FE',
- 'thothahanthai': u'\u0E17',
- 'thothanthai': u'\u0E10',
- 'thothongthai': u'\u0E18',
- 'thothungthai': u'\u0E16',
- 'thousandcyrillic': u'\u0482',
- 'thousandsseparatorarabic': u'\u066C',
- 'thousandsseparatorpersian': u'\u066C',
- 'three': u'\u0033',
- 'threearabic': u'\u0663',
- 'threebengali': u'\u09E9',
- 'threecircle': u'\u2462',
- 'threecircleinversesansserif': u'\u278C',
- 'threedeva': u'\u0969',
- 'threeeighths': u'\u215C',
- 'threegujarati': u'\u0AE9',
- 'threegurmukhi': u'\u0A69',
- 'threehackarabic': u'\u0663',
- 'threehangzhou': u'\u3023',
- 'threeideographicparen': u'\u3222',
- 'threeinferior': u'\u2083',
- 'threemonospace': u'\uFF13',
- 'threenumeratorbengali': u'\u09F6',
- 'threeoldstyle': u'\uF733',
- 'threeparen': u'\u2476',
- 'threeperiod': u'\u248A',
- 'threepersian': u'\u06F3',
- 'threequarters': u'\u00BE',
- 'threequartersemdash': u'\uF6DE',
- 'threeroman': u'\u2172',
- 'threesuperior': u'\u00B3',
- 'threethai': u'\u0E53',
- 'thzsquare': u'\u3394',
- 'tihiragana': u'\u3061',
- 'tikatakana': u'\u30C1',
- 'tikatakanahalfwidth': u'\uFF81',
- 'tikeutacirclekorean': u'\u3270',
- 'tikeutaparenkorean': u'\u3210',
- 'tikeutcirclekorean': u'\u3262',
- 'tikeutkorean': u'\u3137',
- 'tikeutparenkorean': u'\u3202',
- 'tilde': u'\u02DC',
- 'tildebelowcmb': u'\u0330',
- 'tildecmb': u'\u0303',
- 'tildecomb': u'\u0303',
- 'tildedoublecmb': u'\u0360',
- 'tildeoperator': u'\u223C',
- 'tildeoverlaycmb': u'\u0334',
- 'tildeverticalcmb': u'\u033E',
- 'timescircle': u'\u2297',
- 'tipehahebrew': u'\u0596',
- 'tipehalefthebrew': u'\u0596',
- 'tippigurmukhi': u'\u0A70',
- 'titlocyrilliccmb': u'\u0483',
- 'tiwnarmenian': u'\u057F',
- 'tlinebelow': u'\u1E6F',
- 'tmonospace': u'\uFF54',
- 'toarmenian': u'\u0569',
- 'tohiragana': u'\u3068',
- 'tokatakana': u'\u30C8',
- 'tokatakanahalfwidth': u'\uFF84',
- 'tonebarextrahighmod': u'\u02E5',
- 'tonebarextralowmod': u'\u02E9',
- 'tonebarhighmod': u'\u02E6',
- 'tonebarlowmod': u'\u02E8',
- 'tonebarmidmod': u'\u02E7',
- 'tonefive': u'\u01BD',
- 'tonesix': u'\u0185',
- 'tonetwo': u'\u01A8',
- 'tonos': u'\u0384',
- 'tonsquare': u'\u3327',
- 'topatakthai': u'\u0E0F',
- 'tortoiseshellbracketleft': u'\u3014',
- 'tortoiseshellbracketleftsmall': u'\uFE5D',
- 'tortoiseshellbracketleftvertical': u'\uFE39',
- 'tortoiseshellbracketright': u'\u3015',
- 'tortoiseshellbracketrightsmall': u'\uFE5E',
- 'tortoiseshellbracketrightvertical': u'\uFE3A',
- 'totaothai': u'\u0E15',
- 'tpalatalhook': u'\u01AB',
- 'tparen': u'\u24AF',
- 'trademark': u'\u2122',
- 'trademarksans': u'\uF8EA',
- 'trademarkserif': u'\uF6DB',
- 'tretroflexhook': u'\u0288',
- 'triagdn': u'\u25BC',
- 'triaglf': u'\u25C4',
- 'triagrt': u'\u25BA',
- 'triagup': u'\u25B2',
- 'ts': u'\u02A6',
- 'tsadi': u'\u05E6',
- 'tsadidagesh': u'\uFB46',
- 'tsadidageshhebrew': u'\uFB46',
- 'tsadihebrew': u'\u05E6',
- 'tsecyrillic': u'\u0446',
- 'tsere': u'\u05B5',
- 'tsere12': u'\u05B5',
- 'tsere1e': u'\u05B5',
- 'tsere2b': u'\u05B5',
- 'tserehebrew': u'\u05B5',
- 'tserenarrowhebrew': u'\u05B5',
- 'tserequarterhebrew': u'\u05B5',
- 'tserewidehebrew': u'\u05B5',
- 'tshecyrillic': u'\u045B',
- 'tsuperior': u'\uF6F3',
- 'ttabengali': u'\u099F',
- 'ttadeva': u'\u091F',
- 'ttagujarati': u'\u0A9F',
- 'ttagurmukhi': u'\u0A1F',
- 'tteharabic': u'\u0679',
- 'ttehfinalarabic': u'\uFB67',
- 'ttehinitialarabic': u'\uFB68',
- 'ttehmedialarabic': u'\uFB69',
- 'tthabengali': u'\u09A0',
- 'tthadeva': u'\u0920',
- 'tthagujarati': u'\u0AA0',
- 'tthagurmukhi': u'\u0A20',
- 'tturned': u'\u0287',
- 'tuhiragana': u'\u3064',
- 'tukatakana': u'\u30C4',
- 'tukatakanahalfwidth': u'\uFF82',
- 'tusmallhiragana': u'\u3063',
- 'tusmallkatakana': u'\u30C3',
- 'tusmallkatakanahalfwidth': u'\uFF6F',
- 'twelvecircle': u'\u246B',
- 'twelveparen': u'\u247F',
- 'twelveperiod': u'\u2493',
- 'twelveroman': u'\u217B',
- 'twentycircle': u'\u2473',
- 'twentyhangzhou': u'\u5344',
- 'twentyparen': u'\u2487',
- 'twentyperiod': u'\u249B',
- 'two': u'\u0032',
- 'twoarabic': u'\u0662',
- 'twobengali': u'\u09E8',
- 'twocircle': u'\u2461',
- 'twocircleinversesansserif': u'\u278B',
- 'twodeva': u'\u0968',
- 'twodotenleader': u'\u2025',
- 'twodotleader': u'\u2025',
- 'twodotleadervertical': u'\uFE30',
- 'twogujarati': u'\u0AE8',
- 'twogurmukhi': u'\u0A68',
- 'twohackarabic': u'\u0662',
- 'twohangzhou': u'\u3022',
- 'twoideographicparen': u'\u3221',
- 'twoinferior': u'\u2082',
- 'twomonospace': u'\uFF12',
- 'twonumeratorbengali': u'\u09F5',
- 'twooldstyle': u'\uF732',
- 'twoparen': u'\u2475',
- 'twoperiod': u'\u2489',
- 'twopersian': u'\u06F2',
- 'tworoman': u'\u2171',
- 'twostroke': u'\u01BB',
- 'twosuperior': u'\u00B2',
- 'twothai': u'\u0E52',
- 'twothirds': u'\u2154',
- 'u': u'\u0075',
- 'uacute': u'\u00FA',
- 'ubar': u'\u0289',
- 'ubengali': u'\u0989',
- 'ubopomofo': u'\u3128',
- 'ubreve': u'\u016D',
- 'ucaron': u'\u01D4',
- 'ucircle': u'\u24E4',
- 'ucircumflex': u'\u00FB',
- 'ucircumflexbelow': u'\u1E77',
- 'ucyrillic': u'\u0443',
- 'udattadeva': u'\u0951',
- 'udblacute': u'\u0171',
- 'udblgrave': u'\u0215',
- 'udeva': u'\u0909',
- 'udieresis': u'\u00FC',
- 'udieresisacute': u'\u01D8',
- 'udieresisbelow': u'\u1E73',
- 'udieresiscaron': u'\u01DA',
- 'udieresiscyrillic': u'\u04F1',
- 'udieresisgrave': u'\u01DC',
- 'udieresismacron': u'\u01D6',
- 'udotbelow': u'\u1EE5',
- 'ugrave': u'\u00F9',
- 'ugujarati': u'\u0A89',
- 'ugurmukhi': u'\u0A09',
- 'uhiragana': u'\u3046',
- 'uhookabove': u'\u1EE7',
- 'uhorn': u'\u01B0',
- 'uhornacute': u'\u1EE9',
- 'uhorndotbelow': u'\u1EF1',
- 'uhorngrave': u'\u1EEB',
- 'uhornhookabove': u'\u1EED',
- 'uhorntilde': u'\u1EEF',
- 'uhungarumlaut': u'\u0171',
- 'uhungarumlautcyrillic': u'\u04F3',
- 'uinvertedbreve': u'\u0217',
- 'ukatakana': u'\u30A6',
- 'ukatakanahalfwidth': u'\uFF73',
- 'ukcyrillic': u'\u0479',
- 'ukorean': u'\u315C',
- 'umacron': u'\u016B',
- 'umacroncyrillic': u'\u04EF',
- 'umacrondieresis': u'\u1E7B',
- 'umatragurmukhi': u'\u0A41',
- 'umonospace': u'\uFF55',
- 'underscore': u'\u005F',
- 'underscoredbl': u'\u2017',
- 'underscoremonospace': u'\uFF3F',
- 'underscorevertical': u'\uFE33',
- 'underscorewavy': u'\uFE4F',
- 'union': u'\u222A',
- 'universal': u'\u2200',
- 'uogonek': u'\u0173',
- 'uparen': u'\u24B0',
- 'upblock': u'\u2580',
- 'upperdothebrew': u'\u05C4',
- 'upsilon': u'\u03C5',
- 'upsilondieresis': u'\u03CB',
- 'upsilondieresistonos': u'\u03B0',
- 'upsilonlatin': u'\u028A',
- 'upsilontonos': u'\u03CD',
- 'uptackbelowcmb': u'\u031D',
- 'uptackmod': u'\u02D4',
- 'uragurmukhi': u'\u0A73',
- 'uring': u'\u016F',
- 'ushortcyrillic': u'\u045E',
- 'usmallhiragana': u'\u3045',
- 'usmallkatakana': u'\u30A5',
- 'usmallkatakanahalfwidth': u'\uFF69',
- 'ustraightcyrillic': u'\u04AF',
- 'ustraightstrokecyrillic': u'\u04B1',
- 'utilde': u'\u0169',
- 'utildeacute': u'\u1E79',
- 'utildebelow': u'\u1E75',
- 'uubengali': u'\u098A',
- 'uudeva': u'\u090A',
- 'uugujarati': u'\u0A8A',
- 'uugurmukhi': u'\u0A0A',
- 'uumatragurmukhi': u'\u0A42',
- 'uuvowelsignbengali': u'\u09C2',
- 'uuvowelsigndeva': u'\u0942',
- 'uuvowelsigngujarati': u'\u0AC2',
- 'uvowelsignbengali': u'\u09C1',
- 'uvowelsigndeva': u'\u0941',
- 'uvowelsigngujarati': u'\u0AC1',
- 'v': u'\u0076',
- 'vadeva': u'\u0935',
- 'vagujarati': u'\u0AB5',
- 'vagurmukhi': u'\u0A35',
- 'vakatakana': u'\u30F7',
- 'vav': u'\u05D5',
- 'vavdagesh': u'\uFB35',
- 'vavdagesh65': u'\uFB35',
- 'vavdageshhebrew': u'\uFB35',
- 'vavhebrew': u'\u05D5',
- 'vavholam': u'\uFB4B',
- 'vavholamhebrew': u'\uFB4B',
- 'vavvavhebrew': u'\u05F0',
- 'vavyodhebrew': u'\u05F1',
- 'vcircle': u'\u24E5',
- 'vdotbelow': u'\u1E7F',
- 'vecyrillic': u'\u0432',
- 'veharabic': u'\u06A4',
- 'vehfinalarabic': u'\uFB6B',
- 'vehinitialarabic': u'\uFB6C',
- 'vehmedialarabic': u'\uFB6D',
- 'vekatakana': u'\u30F9',
- 'venus': u'\u2640',
- 'verticalbar': u'\u007C',
- 'verticallineabovecmb': u'\u030D',
- 'verticallinebelowcmb': u'\u0329',
- 'verticallinelowmod': u'\u02CC',
- 'verticallinemod': u'\u02C8',
- 'vewarmenian': u'\u057E',
- 'vhook': u'\u028B',
- 'vikatakana': u'\u30F8',
- 'viramabengali': u'\u09CD',
- 'viramadeva': u'\u094D',
- 'viramagujarati': u'\u0ACD',
- 'visargabengali': u'\u0983',
- 'visargadeva': u'\u0903',
- 'visargagujarati': u'\u0A83',
- 'vmonospace': u'\uFF56',
- 'voarmenian': u'\u0578',
- 'voicediterationhiragana': u'\u309E',
- 'voicediterationkatakana': u'\u30FE',
- 'voicedmarkkana': u'\u309B',
- 'voicedmarkkanahalfwidth': u'\uFF9E',
- 'vokatakana': u'\u30FA',
- 'vparen': u'\u24B1',
- 'vtilde': u'\u1E7D',
- 'vturned': u'\u028C',
- 'vuhiragana': u'\u3094',
- 'vukatakana': u'\u30F4',
- 'w': u'\u0077',
- 'wacute': u'\u1E83',
- 'waekorean': u'\u3159',
- 'wahiragana': u'\u308F',
- 'wakatakana': u'\u30EF',
- 'wakatakanahalfwidth': u'\uFF9C',
- 'wakorean': u'\u3158',
- 'wasmallhiragana': u'\u308E',
- 'wasmallkatakana': u'\u30EE',
- 'wattosquare': u'\u3357',
- 'wavedash': u'\u301C',
- 'wavyunderscorevertical': u'\uFE34',
- 'wawarabic': u'\u0648',
- 'wawfinalarabic': u'\uFEEE',
- 'wawhamzaabovearabic': u'\u0624',
- 'wawhamzaabovefinalarabic': u'\uFE86',
- 'wbsquare': u'\u33DD',
- 'wcircle': u'\u24E6',
- 'wcircumflex': u'\u0175',
- 'wdieresis': u'\u1E85',
- 'wdotaccent': u'\u1E87',
- 'wdotbelow': u'\u1E89',
- 'wehiragana': u'\u3091',
- 'weierstrass': u'\u2118',
- 'wekatakana': u'\u30F1',
- 'wekorean': u'\u315E',
- 'weokorean': u'\u315D',
- 'wgrave': u'\u1E81',
- 'whitebullet': u'\u25E6',
- 'whitecircle': u'\u25CB',
- 'whitecircleinverse': u'\u25D9',
- 'whitecornerbracketleft': u'\u300E',
- 'whitecornerbracketleftvertical': u'\uFE43',
- 'whitecornerbracketright': u'\u300F',
- 'whitecornerbracketrightvertical': u'\uFE44',
- 'whitediamond': u'\u25C7',
- 'whitediamondcontainingblacksmalldiamond': u'\u25C8',
- 'whitedownpointingsmalltriangle': u'\u25BF',
- 'whitedownpointingtriangle': u'\u25BD',
- 'whiteleftpointingsmalltriangle': u'\u25C3',
- 'whiteleftpointingtriangle': u'\u25C1',
- 'whitelenticularbracketleft': u'\u3016',
- 'whitelenticularbracketright': u'\u3017',
- 'whiterightpointingsmalltriangle': u'\u25B9',
- 'whiterightpointingtriangle': u'\u25B7',
- 'whitesmallsquare': u'\u25AB',
- 'whitesmilingface': u'\u263A',
- 'whitesquare': u'\u25A1',
- 'whitestar': u'\u2606',
- 'whitetelephone': u'\u260F',
- 'whitetortoiseshellbracketleft': u'\u3018',
- 'whitetortoiseshellbracketright': u'\u3019',
- 'whiteuppointingsmalltriangle': u'\u25B5',
- 'whiteuppointingtriangle': u'\u25B3',
- 'wihiragana': u'\u3090',
- 'wikatakana': u'\u30F0',
- 'wikorean': u'\u315F',
- 'wmonospace': u'\uFF57',
- 'wohiragana': u'\u3092',
- 'wokatakana': u'\u30F2',
- 'wokatakanahalfwidth': u'\uFF66',
- 'won': u'\u20A9',
- 'wonmonospace': u'\uFFE6',
- 'wowaenthai': u'\u0E27',
- 'wparen': u'\u24B2',
- 'wring': u'\u1E98',
- 'wsuperior': u'\u02B7',
- 'wturned': u'\u028D',
- 'wynn': u'\u01BF',
- 'x': u'\u0078',
- 'xabovecmb': u'\u033D',
- 'xbopomofo': u'\u3112',
- 'xcircle': u'\u24E7',
- 'xdieresis': u'\u1E8D',
- 'xdotaccent': u'\u1E8B',
- 'xeharmenian': u'\u056D',
- 'xi': u'\u03BE',
- 'xmonospace': u'\uFF58',
- 'xparen': u'\u24B3',
- 'xsuperior': u'\u02E3',
- 'y': u'\u0079',
- 'yaadosquare': u'\u334E',
- 'yabengali': u'\u09AF',
- 'yacute': u'\u00FD',
- 'yadeva': u'\u092F',
- 'yaekorean': u'\u3152',
- 'yagujarati': u'\u0AAF',
- 'yagurmukhi': u'\u0A2F',
- 'yahiragana': u'\u3084',
- 'yakatakana': u'\u30E4',
- 'yakatakanahalfwidth': u'\uFF94',
- 'yakorean': u'\u3151',
- 'yamakkanthai': u'\u0E4E',
- 'yasmallhiragana': u'\u3083',
- 'yasmallkatakana': u'\u30E3',
- 'yasmallkatakanahalfwidth': u'\uFF6C',
- 'yatcyrillic': u'\u0463',
- 'ycircle': u'\u24E8',
- 'ycircumflex': u'\u0177',
- 'ydieresis': u'\u00FF',
- 'ydotaccent': u'\u1E8F',
- 'ydotbelow': u'\u1EF5',
- 'yeharabic': u'\u064A',
- 'yehbarreearabic': u'\u06D2',
- 'yehbarreefinalarabic': u'\uFBAF',
- 'yehfinalarabic': u'\uFEF2',
- 'yehhamzaabovearabic': u'\u0626',
- 'yehhamzaabovefinalarabic': u'\uFE8A',
- 'yehhamzaaboveinitialarabic': u'\uFE8B',
- 'yehhamzaabovemedialarabic': u'\uFE8C',
- 'yehinitialarabic': u'\uFEF3',
- 'yehmedialarabic': u'\uFEF4',
- 'yehmeeminitialarabic': u'\uFCDD',
- 'yehmeemisolatedarabic': u'\uFC58',
- 'yehnoonfinalarabic': u'\uFC94',
- 'yehthreedotsbelowarabic': u'\u06D1',
- 'yekorean': u'\u3156',
- 'yen': u'\u00A5',
- 'yenmonospace': u'\uFFE5',
- 'yeokorean': u'\u3155',
- 'yeorinhieuhkorean': u'\u3186',
- 'yerahbenyomohebrew': u'\u05AA',
- 'yerahbenyomolefthebrew': u'\u05AA',
- 'yericyrillic': u'\u044B',
- 'yerudieresiscyrillic': u'\u04F9',
- 'yesieungkorean': u'\u3181',
- 'yesieungpansioskorean': u'\u3183',
- 'yesieungsioskorean': u'\u3182',
- 'yetivhebrew': u'\u059A',
- 'ygrave': u'\u1EF3',
- 'yhook': u'\u01B4',
- 'yhookabove': u'\u1EF7',
- 'yiarmenian': u'\u0575',
- 'yicyrillic': u'\u0457',
- 'yikorean': u'\u3162',
- 'yinyang': u'\u262F',
- 'yiwnarmenian': u'\u0582',
- 'ymonospace': u'\uFF59',
- 'yod': u'\u05D9',
- 'yoddagesh': u'\uFB39',
- 'yoddageshhebrew': u'\uFB39',
- 'yodhebrew': u'\u05D9',
- 'yodyodhebrew': u'\u05F2',
- 'yodyodpatahhebrew': u'\uFB1F',
- 'yohiragana': u'\u3088',
- 'yoikorean': u'\u3189',
- 'yokatakana': u'\u30E8',
- 'yokatakanahalfwidth': u'\uFF96',
- 'yokorean': u'\u315B',
- 'yosmallhiragana': u'\u3087',
- 'yosmallkatakana': u'\u30E7',
- 'yosmallkatakanahalfwidth': u'\uFF6E',
- 'yotgreek': u'\u03F3',
- 'yoyaekorean': u'\u3188',
- 'yoyakorean': u'\u3187',
- 'yoyakthai': u'\u0E22',
- 'yoyingthai': u'\u0E0D',
- 'yparen': u'\u24B4',
- 'ypogegrammeni': u'\u037A',
- 'ypogegrammenigreekcmb': u'\u0345',
- 'yr': u'\u01A6',
- 'yring': u'\u1E99',
- 'ysuperior': u'\u02B8',
- 'ytilde': u'\u1EF9',
- 'yturned': u'\u028E',
- 'yuhiragana': u'\u3086',
- 'yuikorean': u'\u318C',
- 'yukatakana': u'\u30E6',
- 'yukatakanahalfwidth': u'\uFF95',
- 'yukorean': u'\u3160',
- 'yusbigcyrillic': u'\u046B',
- 'yusbigiotifiedcyrillic': u'\u046D',
- 'yuslittlecyrillic': u'\u0467',
- 'yuslittleiotifiedcyrillic': u'\u0469',
- 'yusmallhiragana': u'\u3085',
- 'yusmallkatakana': u'\u30E5',
- 'yusmallkatakanahalfwidth': u'\uFF6D',
- 'yuyekorean': u'\u318B',
- 'yuyeokorean': u'\u318A',
- 'yyabengali': u'\u09DF',
- 'yyadeva': u'\u095F',
- 'z': u'\u007A',
- 'zaarmenian': u'\u0566',
- 'zacute': u'\u017A',
- 'zadeva': u'\u095B',
- 'zagurmukhi': u'\u0A5B',
- 'zaharabic': u'\u0638',
- 'zahfinalarabic': u'\uFEC6',
- 'zahinitialarabic': u'\uFEC7',
- 'zahiragana': u'\u3056',
- 'zahmedialarabic': u'\uFEC8',
- 'zainarabic': u'\u0632',
- 'zainfinalarabic': u'\uFEB0',
- 'zakatakana': u'\u30B6',
- 'zaqefgadolhebrew': u'\u0595',
- 'zaqefqatanhebrew': u'\u0594',
- 'zarqahebrew': u'\u0598',
- 'zayin': u'\u05D6',
- 'zayindagesh': u'\uFB36',
- 'zayindageshhebrew': u'\uFB36',
- 'zayinhebrew': u'\u05D6',
- 'zbopomofo': u'\u3117',
- 'zcaron': u'\u017E',
- 'zcircle': u'\u24E9',
- 'zcircumflex': u'\u1E91',
- 'zcurl': u'\u0291',
- 'zdot': u'\u017C',
- 'zdotaccent': u'\u017C',
- 'zdotbelow': u'\u1E93',
- 'zecyrillic': u'\u0437',
- 'zedescendercyrillic': u'\u0499',
- 'zedieresiscyrillic': u'\u04DF',
- 'zehiragana': u'\u305C',
- 'zekatakana': u'\u30BC',
- 'zero': u'\u0030',
- 'zeroarabic': u'\u0660',
- 'zerobengali': u'\u09E6',
- 'zerodeva': u'\u0966',
- 'zerogujarati': u'\u0AE6',
- 'zerogurmukhi': u'\u0A66',
- 'zerohackarabic': u'\u0660',
- 'zeroinferior': u'\u2080',
- 'zeromonospace': u'\uFF10',
- 'zerooldstyle': u'\uF730',
- 'zeropersian': u'\u06F0',
- 'zerosuperior': u'\u2070',
- 'zerothai': u'\u0E50',
- 'zerowidthjoiner': u'\uFEFF',
- 'zerowidthnonjoiner': u'\u200C',
- 'zerowidthspace': u'\u200B',
- 'zeta': u'\u03B6',
- 'zhbopomofo': u'\u3113',
- 'zhearmenian': u'\u056A',
- 'zhebrevecyrillic': u'\u04C2',
- 'zhecyrillic': u'\u0436',
- 'zhedescendercyrillic': u'\u0497',
- 'zhedieresiscyrillic': u'\u04DD',
- 'zihiragana': u'\u3058',
- 'zikatakana': u'\u30B8',
- 'zinorhebrew': u'\u05AE',
- 'zlinebelow': u'\u1E95',
- 'zmonospace': u'\uFF5A',
- 'zohiragana': u'\u305E',
- 'zokatakana': u'\u30BE',
- 'zparen': u'\u24B5',
- 'zretroflexhook': u'\u0290',
- 'zstroke': u'\u01B6',
- 'zuhiragana': u'\u305A',
- 'zukatakana': u'\u30BA',
+ 'A': u'\u0041',
+ 'AE': u'\u00C6',
+ 'AEacute': u'\u01FC',
+ 'AEmacron': u'\u01E2',
+ 'AEsmall': u'\uF7E6',
+ 'Aacute': u'\u00C1',
+ 'Aacutesmall': u'\uF7E1',
+ 'Abreve': u'\u0102',
+ 'Abreveacute': u'\u1EAE',
+ 'Abrevecyrillic': u'\u04D0',
+ 'Abrevedotbelow': u'\u1EB6',
+ 'Abrevegrave': u'\u1EB0',
+ 'Abrevehookabove': u'\u1EB2',
+ 'Abrevetilde': u'\u1EB4',
+ 'Acaron': u'\u01CD',
+ 'Acircle': u'\u24B6',
+ 'Acircumflex': u'\u00C2',
+ 'Acircumflexacute': u'\u1EA4',
+ 'Acircumflexdotbelow': u'\u1EAC',
+ 'Acircumflexgrave': u'\u1EA6',
+ 'Acircumflexhookabove': u'\u1EA8',
+ 'Acircumflexsmall': u'\uF7E2',
+ 'Acircumflextilde': u'\u1EAA',
+ 'Acute': u'\uF6C9',
+ 'Acutesmall': u'\uF7B4',
+ 'Acyrillic': u'\u0410',
+ 'Adblgrave': u'\u0200',
+ 'Adieresis': u'\u00C4',
+ 'Adieresiscyrillic': u'\u04D2',
+ 'Adieresismacron': u'\u01DE',
+ 'Adieresissmall': u'\uF7E4',
+ 'Adotbelow': u'\u1EA0',
+ 'Adotmacron': u'\u01E0',
+ 'Agrave': u'\u00C0',
+ 'Agravesmall': u'\uF7E0',
+ 'Ahookabove': u'\u1EA2',
+ 'Aiecyrillic': u'\u04D4',
+ 'Ainvertedbreve': u'\u0202',
+ 'Alpha': u'\u0391',
+ 'Alphatonos': u'\u0386',
+ 'Amacron': u'\u0100',
+ 'Amonospace': u'\uFF21',
+ 'Aogonek': u'\u0104',
+ 'Aring': u'\u00C5',
+ 'Aringacute': u'\u01FA',
+ 'Aringbelow': u'\u1E00',
+ 'Aringsmall': u'\uF7E5',
+ 'Asmall': u'\uF761',
+ 'Atilde': u'\u00C3',
+ 'Atildesmall': u'\uF7E3',
+ 'Aybarmenian': u'\u0531',
+ 'B': u'\u0042',
+ 'Bcircle': u'\u24B7',
+ 'Bdotaccent': u'\u1E02',
+ 'Bdotbelow': u'\u1E04',
+ 'Becyrillic': u'\u0411',
+ 'Benarmenian': u'\u0532',
+ 'Beta': u'\u0392',
+ 'Bhook': u'\u0181',
+ 'Blinebelow': u'\u1E06',
+ 'Bmonospace': u'\uFF22',
+ 'Brevesmall': u'\uF6F4',
+ 'Bsmall': u'\uF762',
+ 'Btopbar': u'\u0182',
+ 'C': u'\u0043',
+ 'Caarmenian': u'\u053E',
+ 'Cacute': u'\u0106',
+ 'Caron': u'\uF6CA',
+ 'Caronsmall': u'\uF6F5',
+ 'Ccaron': u'\u010C',
+ 'Ccedilla': u'\u00C7',
+ 'Ccedillaacute': u'\u1E08',
+ 'Ccedillasmall': u'\uF7E7',
+ 'Ccircle': u'\u24B8',
+ 'Ccircumflex': u'\u0108',
+ 'Cdot': u'\u010A',
+ 'Cdotaccent': u'\u010A',
+ 'Cedillasmall': u'\uF7B8',
+ 'Chaarmenian': u'\u0549',
+ 'Cheabkhasiancyrillic': u'\u04BC',
+ 'Checyrillic': u'\u0427',
+ 'Chedescenderabkhasiancyrillic': u'\u04BE',
+ 'Chedescendercyrillic': u'\u04B6',
+ 'Chedieresiscyrillic': u'\u04F4',
+ 'Cheharmenian': u'\u0543',
+ 'Chekhakassiancyrillic': u'\u04CB',
+ 'Cheverticalstrokecyrillic': u'\u04B8',
+ 'Chi': u'\u03A7',
+ 'Chook': u'\u0187',
+ 'Circumflexsmall': u'\uF6F6',
+ 'Cmonospace': u'\uFF23',
+ 'Coarmenian': u'\u0551',
+ 'Csmall': u'\uF763',
+ 'D': u'\u0044',
+ 'DZ': u'\u01F1',
+ 'DZcaron': u'\u01C4',
+ 'Daarmenian': u'\u0534',
+ 'Dafrican': u'\u0189',
+ 'Dcaron': u'\u010E',
+ 'Dcedilla': u'\u1E10',
+ 'Dcircle': u'\u24B9',
+ 'Dcircumflexbelow': u'\u1E12',
+ 'Dcroat': u'\u0110',
+ 'Ddotaccent': u'\u1E0A',
+ 'Ddotbelow': u'\u1E0C',
+ 'Decyrillic': u'\u0414',
+ 'Deicoptic': u'\u03EE',
+ 'Delta': u'\u2206',
+ 'Deltagreek': u'\u0394',
+ 'Dhook': u'\u018A',
+ 'Dieresis': u'\uF6CB',
+ 'DieresisAcute': u'\uF6CC',
+ 'DieresisGrave': u'\uF6CD',
+ 'Dieresissmall': u'\uF7A8',
+ 'Digammagreek': u'\u03DC',
+ 'Djecyrillic': u'\u0402',
+ 'Dlinebelow': u'\u1E0E',
+ 'Dmonospace': u'\uFF24',
+ 'Dotaccentsmall': u'\uF6F7',
+ 'Dslash': u'\u0110',
+ 'Dsmall': u'\uF764',
+ 'Dtopbar': u'\u018B',
+ 'Dz': u'\u01F2',
+ 'Dzcaron': u'\u01C5',
+ 'Dzeabkhasiancyrillic': u'\u04E0',
+ 'Dzecyrillic': u'\u0405',
+ 'Dzhecyrillic': u'\u040F',
+ 'E': u'\u0045',
+ 'Eacute': u'\u00C9',
+ 'Eacutesmall': u'\uF7E9',
+ 'Ebreve': u'\u0114',
+ 'Ecaron': u'\u011A',
+ 'Ecedillabreve': u'\u1E1C',
+ 'Echarmenian': u'\u0535',
+ 'Ecircle': u'\u24BA',
+ 'Ecircumflex': u'\u00CA',
+ 'Ecircumflexacute': u'\u1EBE',
+ 'Ecircumflexbelow': u'\u1E18',
+ 'Ecircumflexdotbelow': u'\u1EC6',
+ 'Ecircumflexgrave': u'\u1EC0',
+ 'Ecircumflexhookabove': u'\u1EC2',
+ 'Ecircumflexsmall': u'\uF7EA',
+ 'Ecircumflextilde': u'\u1EC4',
+ 'Ecyrillic': u'\u0404',
+ 'Edblgrave': u'\u0204',
+ 'Edieresis': u'\u00CB',
+ 'Edieresissmall': u'\uF7EB',
+ 'Edot': u'\u0116',
+ 'Edotaccent': u'\u0116',
+ 'Edotbelow': u'\u1EB8',
+ 'Efcyrillic': u'\u0424',
+ 'Egrave': u'\u00C8',
+ 'Egravesmall': u'\uF7E8',
+ 'Eharmenian': u'\u0537',
+ 'Ehookabove': u'\u1EBA',
+ 'Eightroman': u'\u2167',
+ 'Einvertedbreve': u'\u0206',
+ 'Eiotifiedcyrillic': u'\u0464',
+ 'Elcyrillic': u'\u041B',
+ 'Elevenroman': u'\u216A',
+ 'Emacron': u'\u0112',
+ 'Emacronacute': u'\u1E16',
+ 'Emacrongrave': u'\u1E14',
+ 'Emcyrillic': u'\u041C',
+ 'Emonospace': u'\uFF25',
+ 'Encyrillic': u'\u041D',
+ 'Endescendercyrillic': u'\u04A2',
+ 'Eng': u'\u014A',
+ 'Enghecyrillic': u'\u04A4',
+ 'Enhookcyrillic': u'\u04C7',
+ 'Eogonek': u'\u0118',
+ 'Eopen': u'\u0190',
+ 'Epsilon': u'\u0395',
+ 'Epsilontonos': u'\u0388',
+ 'Ercyrillic': u'\u0420',
+ 'Ereversed': u'\u018E',
+ 'Ereversedcyrillic': u'\u042D',
+ 'Escyrillic': u'\u0421',
+ 'Esdescendercyrillic': u'\u04AA',
+ 'Esh': u'\u01A9',
+ 'Esmall': u'\uF765',
+ 'Eta': u'\u0397',
+ 'Etarmenian': u'\u0538',
+ 'Etatonos': u'\u0389',
+ 'Eth': u'\u00D0',
+ 'Ethsmall': u'\uF7F0',
+ 'Etilde': u'\u1EBC',
+ 'Etildebelow': u'\u1E1A',
+ 'Euro': u'\u20AC',
+ 'Ezh': u'\u01B7',
+ 'Ezhcaron': u'\u01EE',
+ 'Ezhreversed': u'\u01B8',
+ 'F': u'\u0046',
+ 'Fcircle': u'\u24BB',
+ 'Fdotaccent': u'\u1E1E',
+ 'Feharmenian': u'\u0556',
+ 'Feicoptic': u'\u03E4',
+ 'Fhook': u'\u0191',
+ 'Fitacyrillic': u'\u0472',
+ 'Fiveroman': u'\u2164',
+ 'Fmonospace': u'\uFF26',
+ 'Fourroman': u'\u2163',
+ 'Fsmall': u'\uF766',
+ 'G': u'\u0047',
+ 'GBsquare': u'\u3387',
+ 'Gacute': u'\u01F4',
+ 'Gamma': u'\u0393',
+ 'Gammaafrican': u'\u0194',
+ 'Gangiacoptic': u'\u03EA',
+ 'Gbreve': u'\u011E',
+ 'Gcaron': u'\u01E6',
+ 'Gcedilla': u'\u0122',
+ 'Gcircle': u'\u24BC',
+ 'Gcircumflex': u'\u011C',
+ 'Gcommaaccent': u'\u0122',
+ 'Gdot': u'\u0120',
+ 'Gdotaccent': u'\u0120',
+ 'Gecyrillic': u'\u0413',
+ 'Ghadarmenian': u'\u0542',
+ 'Ghemiddlehookcyrillic': u'\u0494',
+ 'Ghestrokecyrillic': u'\u0492',
+ 'Gheupturncyrillic': u'\u0490',
+ 'Ghook': u'\u0193',
+ 'Gimarmenian': u'\u0533',
+ 'Gjecyrillic': u'\u0403',
+ 'Gmacron': u'\u1E20',
+ 'Gmonospace': u'\uFF27',
+ 'Grave': u'\uF6CE',
+ 'Gravesmall': u'\uF760',
+ 'Gsmall': u'\uF767',
+ 'Gsmallhook': u'\u029B',
+ 'Gstroke': u'\u01E4',
+ 'H': u'\u0048',
+ 'H18533': u'\u25CF',
+ 'H18543': u'\u25AA',
+ 'H18551': u'\u25AB',
+ 'H22073': u'\u25A1',
+ 'HPsquare': u'\u33CB',
+ 'Haabkhasiancyrillic': u'\u04A8',
+ 'Hadescendercyrillic': u'\u04B2',
+ 'Hardsigncyrillic': u'\u042A',
+ 'Hbar': u'\u0126',
+ 'Hbrevebelow': u'\u1E2A',
+ 'Hcedilla': u'\u1E28',
+ 'Hcircle': u'\u24BD',
+ 'Hcircumflex': u'\u0124',
+ 'Hdieresis': u'\u1E26',
+ 'Hdotaccent': u'\u1E22',
+ 'Hdotbelow': u'\u1E24',
+ 'Hmonospace': u'\uFF28',
+ 'Hoarmenian': u'\u0540',
+ 'Horicoptic': u'\u03E8',
+ 'Hsmall': u'\uF768',
+ 'Hungarumlaut': u'\uF6CF',
+ 'Hungarumlautsmall': u'\uF6F8',
+ 'Hzsquare': u'\u3390',
+ 'I': u'\u0049',
+ 'IAcyrillic': u'\u042F',
+ 'IJ': u'\u0132',
+ 'IUcyrillic': u'\u042E',
+ 'Iacute': u'\u00CD',
+ 'Iacutesmall': u'\uF7ED',
+ 'Ibreve': u'\u012C',
+ 'Icaron': u'\u01CF',
+ 'Icircle': u'\u24BE',
+ 'Icircumflex': u'\u00CE',
+ 'Icircumflexsmall': u'\uF7EE',
+ 'Icyrillic': u'\u0406',
+ 'Idblgrave': u'\u0208',
+ 'Idieresis': u'\u00CF',
+ 'Idieresisacute': u'\u1E2E',
+ 'Idieresiscyrillic': u'\u04E4',
+ 'Idieresissmall': u'\uF7EF',
+ 'Idot': u'\u0130',
+ 'Idotaccent': u'\u0130',
+ 'Idotbelow': u'\u1ECA',
+ 'Iebrevecyrillic': u'\u04D6',
+ 'Iecyrillic': u'\u0415',
+ 'Ifraktur': u'\u2111',
+ 'Igrave': u'\u00CC',
+ 'Igravesmall': u'\uF7EC',
+ 'Ihookabove': u'\u1EC8',
+ 'Iicyrillic': u'\u0418',
+ 'Iinvertedbreve': u'\u020A',
+ 'Iishortcyrillic': u'\u0419',
+ 'Imacron': u'\u012A',
+ 'Imacroncyrillic': u'\u04E2',
+ 'Imonospace': u'\uFF29',
+ 'Iniarmenian': u'\u053B',
+ 'Iocyrillic': u'\u0401',
+ 'Iogonek': u'\u012E',
+ 'Iota': u'\u0399',
+ 'Iotaafrican': u'\u0196',
+ 'Iotadieresis': u'\u03AA',
+ 'Iotatonos': u'\u038A',
+ 'Ismall': u'\uF769',
+ 'Istroke': u'\u0197',
+ 'Itilde': u'\u0128',
+ 'Itildebelow': u'\u1E2C',
+ 'Izhitsacyrillic': u'\u0474',
+ 'Izhitsadblgravecyrillic': u'\u0476',
+ 'J': u'\u004A',
+ 'Jaarmenian': u'\u0541',
+ 'Jcircle': u'\u24BF',
+ 'Jcircumflex': u'\u0134',
+ 'Jecyrillic': u'\u0408',
+ 'Jheharmenian': u'\u054B',
+ 'Jmonospace': u'\uFF2A',
+ 'Jsmall': u'\uF76A',
+ 'K': u'\u004B',
+ 'KBsquare': u'\u3385',
+ 'KKsquare': u'\u33CD',
+ 'Kabashkircyrillic': u'\u04A0',
+ 'Kacute': u'\u1E30',
+ 'Kacyrillic': u'\u041A',
+ 'Kadescendercyrillic': u'\u049A',
+ 'Kahookcyrillic': u'\u04C3',
+ 'Kappa': u'\u039A',
+ 'Kastrokecyrillic': u'\u049E',
+ 'Kaverticalstrokecyrillic': u'\u049C',
+ 'Kcaron': u'\u01E8',
+ 'Kcedilla': u'\u0136',
+ 'Kcircle': u'\u24C0',
+ 'Kcommaaccent': u'\u0136',
+ 'Kdotbelow': u'\u1E32',
+ 'Keharmenian': u'\u0554',
+ 'Kenarmenian': u'\u053F',
+ 'Khacyrillic': u'\u0425',
+ 'Kheicoptic': u'\u03E6',
+ 'Khook': u'\u0198',
+ 'Kjecyrillic': u'\u040C',
+ 'Klinebelow': u'\u1E34',
+ 'Kmonospace': u'\uFF2B',
+ 'Koppacyrillic': u'\u0480',
+ 'Koppagreek': u'\u03DE',
+ 'Ksicyrillic': u'\u046E',
+ 'Ksmall': u'\uF76B',
+ 'L': u'\u004C',
+ 'LJ': u'\u01C7',
+ 'LL': u'\uF6BF',
+ 'Lacute': u'\u0139',
+ 'Lambda': u'\u039B',
+ 'Lcaron': u'\u013D',
+ 'Lcedilla': u'\u013B',
+ 'Lcircle': u'\u24C1',
+ 'Lcircumflexbelow': u'\u1E3C',
+ 'Lcommaaccent': u'\u013B',
+ 'Ldot': u'\u013F',
+ 'Ldotaccent': u'\u013F',
+ 'Ldotbelow': u'\u1E36',
+ 'Ldotbelowmacron': u'\u1E38',
+ 'Liwnarmenian': u'\u053C',
+ 'Lj': u'\u01C8',
+ 'Ljecyrillic': u'\u0409',
+ 'Llinebelow': u'\u1E3A',
+ 'Lmonospace': u'\uFF2C',
+ 'Lslash': u'\u0141',
+ 'Lslashsmall': u'\uF6F9',
+ 'Lsmall': u'\uF76C',
+ 'M': u'\u004D',
+ 'MBsquare': u'\u3386',
+ 'Macron': u'\uF6D0',
+ 'Macronsmall': u'\uF7AF',
+ 'Macute': u'\u1E3E',
+ 'Mcircle': u'\u24C2',
+ 'Mdotaccent': u'\u1E40',
+ 'Mdotbelow': u'\u1E42',
+ 'Menarmenian': u'\u0544',
+ 'Mmonospace': u'\uFF2D',
+ 'Msmall': u'\uF76D',
+ 'Mturned': u'\u019C',
+ 'Mu': u'\u039C',
+ 'N': u'\u004E',
+ 'NJ': u'\u01CA',
+ 'Nacute': u'\u0143',
+ 'Ncaron': u'\u0147',
+ 'Ncedilla': u'\u0145',
+ 'Ncircle': u'\u24C3',
+ 'Ncircumflexbelow': u'\u1E4A',
+ 'Ncommaaccent': u'\u0145',
+ 'Ndotaccent': u'\u1E44',
+ 'Ndotbelow': u'\u1E46',
+ 'Nhookleft': u'\u019D',
+ 'Nineroman': u'\u2168',
+ 'Nj': u'\u01CB',
+ 'Njecyrillic': u'\u040A',
+ 'Nlinebelow': u'\u1E48',
+ 'Nmonospace': u'\uFF2E',
+ 'Nowarmenian': u'\u0546',
+ 'Nsmall': u'\uF76E',
+ 'Ntilde': u'\u00D1',
+ 'Ntildesmall': u'\uF7F1',
+ 'Nu': u'\u039D',
+ 'O': u'\u004F',
+ 'OE': u'\u0152',
+ 'OEsmall': u'\uF6FA',
+ 'Oacute': u'\u00D3',
+ 'Oacutesmall': u'\uF7F3',
+ 'Obarredcyrillic': u'\u04E8',
+ 'Obarreddieresiscyrillic': u'\u04EA',
+ 'Obreve': u'\u014E',
+ 'Ocaron': u'\u01D1',
+ 'Ocenteredtilde': u'\u019F',
+ 'Ocircle': u'\u24C4',
+ 'Ocircumflex': u'\u00D4',
+ 'Ocircumflexacute': u'\u1ED0',
+ 'Ocircumflexdotbelow': u'\u1ED8',
+ 'Ocircumflexgrave': u'\u1ED2',
+ 'Ocircumflexhookabove': u'\u1ED4',
+ 'Ocircumflexsmall': u'\uF7F4',
+ 'Ocircumflextilde': u'\u1ED6',
+ 'Ocyrillic': u'\u041E',
+ 'Odblacute': u'\u0150',
+ 'Odblgrave': u'\u020C',
+ 'Odieresis': u'\u00D6',
+ 'Odieresiscyrillic': u'\u04E6',
+ 'Odieresissmall': u'\uF7F6',
+ 'Odotbelow': u'\u1ECC',
+ 'Ogoneksmall': u'\uF6FB',
+ 'Ograve': u'\u00D2',
+ 'Ogravesmall': u'\uF7F2',
+ 'Oharmenian': u'\u0555',
+ 'Ohm': u'\u2126',
+ 'Ohookabove': u'\u1ECE',
+ 'Ohorn': u'\u01A0',
+ 'Ohornacute': u'\u1EDA',
+ 'Ohorndotbelow': u'\u1EE2',
+ 'Ohorngrave': u'\u1EDC',
+ 'Ohornhookabove': u'\u1EDE',
+ 'Ohorntilde': u'\u1EE0',
+ 'Ohungarumlaut': u'\u0150',
+ 'Oi': u'\u01A2',
+ 'Oinvertedbreve': u'\u020E',
+ 'Omacron': u'\u014C',
+ 'Omacronacute': u'\u1E52',
+ 'Omacrongrave': u'\u1E50',
+ 'Omega': u'\u2126',
+ 'Omegacyrillic': u'\u0460',
+ 'Omegagreek': u'\u03A9',
+ 'Omegaroundcyrillic': u'\u047A',
+ 'Omegatitlocyrillic': u'\u047C',
+ 'Omegatonos': u'\u038F',
+ 'Omicron': u'\u039F',
+ 'Omicrontonos': u'\u038C',
+ 'Omonospace': u'\uFF2F',
+ 'Oneroman': u'\u2160',
+ 'Oogonek': u'\u01EA',
+ 'Oogonekmacron': u'\u01EC',
+ 'Oopen': u'\u0186',
+ 'Oslash': u'\u00D8',
+ 'Oslashacute': u'\u01FE',
+ 'Oslashsmall': u'\uF7F8',
+ 'Osmall': u'\uF76F',
+ 'Ostrokeacute': u'\u01FE',
+ 'Otcyrillic': u'\u047E',
+ 'Otilde': u'\u00D5',
+ 'Otildeacute': u'\u1E4C',
+ 'Otildedieresis': u'\u1E4E',
+ 'Otildesmall': u'\uF7F5',
+ 'P': u'\u0050',
+ 'Pacute': u'\u1E54',
+ 'Pcircle': u'\u24C5',
+ 'Pdotaccent': u'\u1E56',
+ 'Pecyrillic': u'\u041F',
+ 'Peharmenian': u'\u054A',
+ 'Pemiddlehookcyrillic': u'\u04A6',
+ 'Phi': u'\u03A6',
+ 'Phook': u'\u01A4',
+ 'Pi': u'\u03A0',
+ 'Piwrarmenian': u'\u0553',
+ 'Pmonospace': u'\uFF30',
+ 'Psi': u'\u03A8',
+ 'Psicyrillic': u'\u0470',
+ 'Psmall': u'\uF770',
+ 'Q': u'\u0051',
+ 'Qcircle': u'\u24C6',
+ 'Qmonospace': u'\uFF31',
+ 'Qsmall': u'\uF771',
+ 'R': u'\u0052',
+ 'Raarmenian': u'\u054C',
+ 'Racute': u'\u0154',
+ 'Rcaron': u'\u0158',
+ 'Rcedilla': u'\u0156',
+ 'Rcircle': u'\u24C7',
+ 'Rcommaaccent': u'\u0156',
+ 'Rdblgrave': u'\u0210',
+ 'Rdotaccent': u'\u1E58',
+ 'Rdotbelow': u'\u1E5A',
+ 'Rdotbelowmacron': u'\u1E5C',
+ 'Reharmenian': u'\u0550',
+ 'Rfraktur': u'\u211C',
+ 'Rho': u'\u03A1',
+ 'Ringsmall': u'\uF6FC',
+ 'Rinvertedbreve': u'\u0212',
+ 'Rlinebelow': u'\u1E5E',
+ 'Rmonospace': u'\uFF32',
+ 'Rsmall': u'\uF772',
+ 'Rsmallinverted': u'\u0281',
+ 'Rsmallinvertedsuperior': u'\u02B6',
+ 'S': u'\u0053',
+ 'SF010000': u'\u250C',
+ 'SF020000': u'\u2514',
+ 'SF030000': u'\u2510',
+ 'SF040000': u'\u2518',
+ 'SF050000': u'\u253C',
+ 'SF060000': u'\u252C',
+ 'SF070000': u'\u2534',
+ 'SF080000': u'\u251C',
+ 'SF090000': u'\u2524',
+ 'SF100000': u'\u2500',
+ 'SF110000': u'\u2502',
+ 'SF190000': u'\u2561',
+ 'SF200000': u'\u2562',
+ 'SF210000': u'\u2556',
+ 'SF220000': u'\u2555',
+ 'SF230000': u'\u2563',
+ 'SF240000': u'\u2551',
+ 'SF250000': u'\u2557',
+ 'SF260000': u'\u255D',
+ 'SF270000': u'\u255C',
+ 'SF280000': u'\u255B',
+ 'SF360000': u'\u255E',
+ 'SF370000': u'\u255F',
+ 'SF380000': u'\u255A',
+ 'SF390000': u'\u2554',
+ 'SF400000': u'\u2569',
+ 'SF410000': u'\u2566',
+ 'SF420000': u'\u2560',
+ 'SF430000': u'\u2550',
+ 'SF440000': u'\u256C',
+ 'SF450000': u'\u2567',
+ 'SF460000': u'\u2568',
+ 'SF470000': u'\u2564',
+ 'SF480000': u'\u2565',
+ 'SF490000': u'\u2559',
+ 'SF500000': u'\u2558',
+ 'SF510000': u'\u2552',
+ 'SF520000': u'\u2553',
+ 'SF530000': u'\u256B',
+ 'SF540000': u'\u256A',
+ 'Sacute': u'\u015A',
+ 'Sacutedotaccent': u'\u1E64',
+ 'Sampigreek': u'\u03E0',
+ 'Scaron': u'\u0160',
+ 'Scarondotaccent': u'\u1E66',
+ 'Scaronsmall': u'\uF6FD',
+ 'Scedilla': u'\u015E',
+ 'Schwa': u'\u018F',
+ 'Schwacyrillic': u'\u04D8',
+ 'Schwadieresiscyrillic': u'\u04DA',
+ 'Scircle': u'\u24C8',
+ 'Scircumflex': u'\u015C',
+ 'Scommaaccent': u'\u0218',
+ 'Sdotaccent': u'\u1E60',
+ 'Sdotbelow': u'\u1E62',
+ 'Sdotbelowdotaccent': u'\u1E68',
+ 'Seharmenian': u'\u054D',
+ 'Sevenroman': u'\u2166',
+ 'Shaarmenian': u'\u0547',
+ 'Shacyrillic': u'\u0428',
+ 'Shchacyrillic': u'\u0429',
+ 'Sheicoptic': u'\u03E2',
+ 'Shhacyrillic': u'\u04BA',
+ 'Shimacoptic': u'\u03EC',
+ 'Sigma': u'\u03A3',
+ 'Sixroman': u'\u2165',
+ 'Smonospace': u'\uFF33',
+ 'Softsigncyrillic': u'\u042C',
+ 'Ssmall': u'\uF773',
+ 'Stigmagreek': u'\u03DA',
+ 'T': u'\u0054',
+ 'Tau': u'\u03A4',
+ 'Tbar': u'\u0166',
+ 'Tcaron': u'\u0164',
+ 'Tcedilla': u'\u0162',
+ 'Tcircle': u'\u24C9',
+ 'Tcircumflexbelow': u'\u1E70',
+ 'Tcommaaccent': u'\u0162',
+ 'Tdotaccent': u'\u1E6A',
+ 'Tdotbelow': u'\u1E6C',
+ 'Tecyrillic': u'\u0422',
+ 'Tedescendercyrillic': u'\u04AC',
+ 'Tenroman': u'\u2169',
+ 'Tetsecyrillic': u'\u04B4',
+ 'Theta': u'\u0398',
+ 'Thook': u'\u01AC',
+ 'Thorn': u'\u00DE',
+ 'Thornsmall': u'\uF7FE',
+ 'Threeroman': u'\u2162',
+ 'Tildesmall': u'\uF6FE',
+ 'Tiwnarmenian': u'\u054F',
+ 'Tlinebelow': u'\u1E6E',
+ 'Tmonospace': u'\uFF34',
+ 'Toarmenian': u'\u0539',
+ 'Tonefive': u'\u01BC',
+ 'Tonesix': u'\u0184',
+ 'Tonetwo': u'\u01A7',
+ 'Tretroflexhook': u'\u01AE',
+ 'Tsecyrillic': u'\u0426',
+ 'Tshecyrillic': u'\u040B',
+ 'Tsmall': u'\uF774',
+ 'Twelveroman': u'\u216B',
+ 'Tworoman': u'\u2161',
+ 'U': u'\u0055',
+ 'Uacute': u'\u00DA',
+ 'Uacutesmall': u'\uF7FA',
+ 'Ubreve': u'\u016C',
+ 'Ucaron': u'\u01D3',
+ 'Ucircle': u'\u24CA',
+ 'Ucircumflex': u'\u00DB',
+ 'Ucircumflexbelow': u'\u1E76',
+ 'Ucircumflexsmall': u'\uF7FB',
+ 'Ucyrillic': u'\u0423',
+ 'Udblacute': u'\u0170',
+ 'Udblgrave': u'\u0214',
+ 'Udieresis': u'\u00DC',
+ 'Udieresisacute': u'\u01D7',
+ 'Udieresisbelow': u'\u1E72',
+ 'Udieresiscaron': u'\u01D9',
+ 'Udieresiscyrillic': u'\u04F0',
+ 'Udieresisgrave': u'\u01DB',
+ 'Udieresismacron': u'\u01D5',
+ 'Udieresissmall': u'\uF7FC',
+ 'Udotbelow': u'\u1EE4',
+ 'Ugrave': u'\u00D9',
+ 'Ugravesmall': u'\uF7F9',
+ 'Uhookabove': u'\u1EE6',
+ 'Uhorn': u'\u01AF',
+ 'Uhornacute': u'\u1EE8',
+ 'Uhorndotbelow': u'\u1EF0',
+ 'Uhorngrave': u'\u1EEA',
+ 'Uhornhookabove': u'\u1EEC',
+ 'Uhorntilde': u'\u1EEE',
+ 'Uhungarumlaut': u'\u0170',
+ 'Uhungarumlautcyrillic': u'\u04F2',
+ 'Uinvertedbreve': u'\u0216',
+ 'Ukcyrillic': u'\u0478',
+ 'Umacron': u'\u016A',
+ 'Umacroncyrillic': u'\u04EE',
+ 'Umacrondieresis': u'\u1E7A',
+ 'Umonospace': u'\uFF35',
+ 'Uogonek': u'\u0172',
+ 'Upsilon': u'\u03A5',
+ 'Upsilon1': u'\u03D2',
+ 'Upsilonacutehooksymbolgreek': u'\u03D3',
+ 'Upsilonafrican': u'\u01B1',
+ 'Upsilondieresis': u'\u03AB',
+ 'Upsilondieresishooksymbolgreek': u'\u03D4',
+ 'Upsilonhooksymbol': u'\u03D2',
+ 'Upsilontonos': u'\u038E',
+ 'Uring': u'\u016E',
+ 'Ushortcyrillic': u'\u040E',
+ 'Usmall': u'\uF775',
+ 'Ustraightcyrillic': u'\u04AE',
+ 'Ustraightstrokecyrillic': u'\u04B0',
+ 'Utilde': u'\u0168',
+ 'Utildeacute': u'\u1E78',
+ 'Utildebelow': u'\u1E74',
+ 'V': u'\u0056',
+ 'Vcircle': u'\u24CB',
+ 'Vdotbelow': u'\u1E7E',
+ 'Vecyrillic': u'\u0412',
+ 'Vewarmenian': u'\u054E',
+ 'Vhook': u'\u01B2',
+ 'Vmonospace': u'\uFF36',
+ 'Voarmenian': u'\u0548',
+ 'Vsmall': u'\uF776',
+ 'Vtilde': u'\u1E7C',
+ 'W': u'\u0057',
+ 'Wacute': u'\u1E82',
+ 'Wcircle': u'\u24CC',
+ 'Wcircumflex': u'\u0174',
+ 'Wdieresis': u'\u1E84',
+ 'Wdotaccent': u'\u1E86',
+ 'Wdotbelow': u'\u1E88',
+ 'Wgrave': u'\u1E80',
+ 'Wmonospace': u'\uFF37',
+ 'Wsmall': u'\uF777',
+ 'X': u'\u0058',
+ 'Xcircle': u'\u24CD',
+ 'Xdieresis': u'\u1E8C',
+ 'Xdotaccent': u'\u1E8A',
+ 'Xeharmenian': u'\u053D',
+ 'Xi': u'\u039E',
+ 'Xmonospace': u'\uFF38',
+ 'Xsmall': u'\uF778',
+ 'Y': u'\u0059',
+ 'Yacute': u'\u00DD',
+ 'Yacutesmall': u'\uF7FD',
+ 'Yatcyrillic': u'\u0462',
+ 'Ycircle': u'\u24CE',
+ 'Ycircumflex': u'\u0176',
+ 'Ydieresis': u'\u0178',
+ 'Ydieresissmall': u'\uF7FF',
+ 'Ydotaccent': u'\u1E8E',
+ 'Ydotbelow': u'\u1EF4',
+ 'Yericyrillic': u'\u042B',
+ 'Yerudieresiscyrillic': u'\u04F8',
+ 'Ygrave': u'\u1EF2',
+ 'Yhook': u'\u01B3',
+ 'Yhookabove': u'\u1EF6',
+ 'Yiarmenian': u'\u0545',
+ 'Yicyrillic': u'\u0407',
+ 'Yiwnarmenian': u'\u0552',
+ 'Ymonospace': u'\uFF39',
+ 'Ysmall': u'\uF779',
+ 'Ytilde': u'\u1EF8',
+ 'Yusbigcyrillic': u'\u046A',
+ 'Yusbigiotifiedcyrillic': u'\u046C',
+ 'Yuslittlecyrillic': u'\u0466',
+ 'Yuslittleiotifiedcyrillic': u'\u0468',
+ 'Z': u'\u005A',
+ 'Zaarmenian': u'\u0536',
+ 'Zacute': u'\u0179',
+ 'Zcaron': u'\u017D',
+ 'Zcaronsmall': u'\uF6FF',
+ 'Zcircle': u'\u24CF',
+ 'Zcircumflex': u'\u1E90',
+ 'Zdot': u'\u017B',
+ 'Zdotaccent': u'\u017B',
+ 'Zdotbelow': u'\u1E92',
+ 'Zecyrillic': u'\u0417',
+ 'Zedescendercyrillic': u'\u0498',
+ 'Zedieresiscyrillic': u'\u04DE',
+ 'Zeta': u'\u0396',
+ 'Zhearmenian': u'\u053A',
+ 'Zhebrevecyrillic': u'\u04C1',
+ 'Zhecyrillic': u'\u0416',
+ 'Zhedescendercyrillic': u'\u0496',
+ 'Zhedieresiscyrillic': u'\u04DC',
+ 'Zlinebelow': u'\u1E94',
+ 'Zmonospace': u'\uFF3A',
+ 'Zsmall': u'\uF77A',
+ 'Zstroke': u'\u01B5',
+ 'a': u'\u0061',
+ 'aabengali': u'\u0986',
+ 'aacute': u'\u00E1',
+ 'aadeva': u'\u0906',
+ 'aagujarati': u'\u0A86',
+ 'aagurmukhi': u'\u0A06',
+ 'aamatragurmukhi': u'\u0A3E',
+ 'aarusquare': u'\u3303',
+ 'aavowelsignbengali': u'\u09BE',
+ 'aavowelsigndeva': u'\u093E',
+ 'aavowelsigngujarati': u'\u0ABE',
+ 'abbreviationmarkarmenian': u'\u055F',
+ 'abbreviationsigndeva': u'\u0970',
+ 'abengali': u'\u0985',
+ 'abopomofo': u'\u311A',
+ 'abreve': u'\u0103',
+ 'abreveacute': u'\u1EAF',
+ 'abrevecyrillic': u'\u04D1',
+ 'abrevedotbelow': u'\u1EB7',
+ 'abrevegrave': u'\u1EB1',
+ 'abrevehookabove': u'\u1EB3',
+ 'abrevetilde': u'\u1EB5',
+ 'acaron': u'\u01CE',
+ 'acircle': u'\u24D0',
+ 'acircumflex': u'\u00E2',
+ 'acircumflexacute': u'\u1EA5',
+ 'acircumflexdotbelow': u'\u1EAD',
+ 'acircumflexgrave': u'\u1EA7',
+ 'acircumflexhookabove': u'\u1EA9',
+ 'acircumflextilde': u'\u1EAB',
+ 'acute': u'\u00B4',
+ 'acutebelowcmb': u'\u0317',
+ 'acutecmb': u'\u0301',
+ 'acutecomb': u'\u0301',
+ 'acutedeva': u'\u0954',
+ 'acutelowmod': u'\u02CF',
+ 'acutetonecmb': u'\u0341',
+ 'acyrillic': u'\u0430',
+ 'adblgrave': u'\u0201',
+ 'addakgurmukhi': u'\u0A71',
+ 'adeva': u'\u0905',
+ 'adieresis': u'\u00E4',
+ 'adieresiscyrillic': u'\u04D3',
+ 'adieresismacron': u'\u01DF',
+ 'adotbelow': u'\u1EA1',
+ 'adotmacron': u'\u01E1',
+ 'ae': u'\u00E6',
+ 'aeacute': u'\u01FD',
+ 'aekorean': u'\u3150',
+ 'aemacron': u'\u01E3',
+ 'afii00208': u'\u2015',
+ 'afii08941': u'\u20A4',
+ 'afii10017': u'\u0410',
+ 'afii10018': u'\u0411',
+ 'afii10019': u'\u0412',
+ 'afii10020': u'\u0413',
+ 'afii10021': u'\u0414',
+ 'afii10022': u'\u0415',
+ 'afii10023': u'\u0401',
+ 'afii10024': u'\u0416',
+ 'afii10025': u'\u0417',
+ 'afii10026': u'\u0418',
+ 'afii10027': u'\u0419',
+ 'afii10028': u'\u041A',
+ 'afii10029': u'\u041B',
+ 'afii10030': u'\u041C',
+ 'afii10031': u'\u041D',
+ 'afii10032': u'\u041E',
+ 'afii10033': u'\u041F',
+ 'afii10034': u'\u0420',
+ 'afii10035': u'\u0421',
+ 'afii10036': u'\u0422',
+ 'afii10037': u'\u0423',
+ 'afii10038': u'\u0424',
+ 'afii10039': u'\u0425',
+ 'afii10040': u'\u0426',
+ 'afii10041': u'\u0427',
+ 'afii10042': u'\u0428',
+ 'afii10043': u'\u0429',
+ 'afii10044': u'\u042A',
+ 'afii10045': u'\u042B',
+ 'afii10046': u'\u042C',
+ 'afii10047': u'\u042D',
+ 'afii10048': u'\u042E',
+ 'afii10049': u'\u042F',
+ 'afii10050': u'\u0490',
+ 'afii10051': u'\u0402',
+ 'afii10052': u'\u0403',
+ 'afii10053': u'\u0404',
+ 'afii10054': u'\u0405',
+ 'afii10055': u'\u0406',
+ 'afii10056': u'\u0407',
+ 'afii10057': u'\u0408',
+ 'afii10058': u'\u0409',
+ 'afii10059': u'\u040A',
+ 'afii10060': u'\u040B',
+ 'afii10061': u'\u040C',
+ 'afii10062': u'\u040E',
+ 'afii10063': u'\uF6C4',
+ 'afii10064': u'\uF6C5',
+ 'afii10065': u'\u0430',
+ 'afii10066': u'\u0431',
+ 'afii10067': u'\u0432',
+ 'afii10068': u'\u0433',
+ 'afii10069': u'\u0434',
+ 'afii10070': u'\u0435',
+ 'afii10071': u'\u0451',
+ 'afii10072': u'\u0436',
+ 'afii10073': u'\u0437',
+ 'afii10074': u'\u0438',
+ 'afii10075': u'\u0439',
+ 'afii10076': u'\u043A',
+ 'afii10077': u'\u043B',
+ 'afii10078': u'\u043C',
+ 'afii10079': u'\u043D',
+ 'afii10080': u'\u043E',
+ 'afii10081': u'\u043F',
+ 'afii10082': u'\u0440',
+ 'afii10083': u'\u0441',
+ 'afii10084': u'\u0442',
+ 'afii10085': u'\u0443',
+ 'afii10086': u'\u0444',
+ 'afii10087': u'\u0445',
+ 'afii10088': u'\u0446',
+ 'afii10089': u'\u0447',
+ 'afii10090': u'\u0448',
+ 'afii10091': u'\u0449',
+ 'afii10092': u'\u044A',
+ 'afii10093': u'\u044B',
+ 'afii10094': u'\u044C',
+ 'afii10095': u'\u044D',
+ 'afii10096': u'\u044E',
+ 'afii10097': u'\u044F',
+ 'afii10098': u'\u0491',
+ 'afii10099': u'\u0452',
+ 'afii10100': u'\u0453',
+ 'afii10101': u'\u0454',
+ 'afii10102': u'\u0455',
+ 'afii10103': u'\u0456',
+ 'afii10104': u'\u0457',
+ 'afii10105': u'\u0458',
+ 'afii10106': u'\u0459',
+ 'afii10107': u'\u045A',
+ 'afii10108': u'\u045B',
+ 'afii10109': u'\u045C',
+ 'afii10110': u'\u045E',
+ 'afii10145': u'\u040F',
+ 'afii10146': u'\u0462',
+ 'afii10147': u'\u0472',
+ 'afii10148': u'\u0474',
+ 'afii10192': u'\uF6C6',
+ 'afii10193': u'\u045F',
+ 'afii10194': u'\u0463',
+ 'afii10195': u'\u0473',
+ 'afii10196': u'\u0475',
+ 'afii10831': u'\uF6C7',
+ 'afii10832': u'\uF6C8',
+ 'afii10846': u'\u04D9',
+ 'afii299': u'\u200E',
+ 'afii300': u'\u200F',
+ 'afii301': u'\u200D',
+ 'afii57381': u'\u066A',
+ 'afii57388': u'\u060C',
+ 'afii57392': u'\u0660',
+ 'afii57393': u'\u0661',
+ 'afii57394': u'\u0662',
+ 'afii57395': u'\u0663',
+ 'afii57396': u'\u0664',
+ 'afii57397': u'\u0665',
+ 'afii57398': u'\u0666',
+ 'afii57399': u'\u0667',
+ 'afii57400': u'\u0668',
+ 'afii57401': u'\u0669',
+ 'afii57403': u'\u061B',
+ 'afii57407': u'\u061F',
+ 'afii57409': u'\u0621',
+ 'afii57410': u'\u0622',
+ 'afii57411': u'\u0623',
+ 'afii57412': u'\u0624',
+ 'afii57413': u'\u0625',
+ 'afii57414': u'\u0626',
+ 'afii57415': u'\u0627',
+ 'afii57416': u'\u0628',
+ 'afii57417': u'\u0629',
+ 'afii57418': u'\u062A',
+ 'afii57419': u'\u062B',
+ 'afii57420': u'\u062C',
+ 'afii57421': u'\u062D',
+ 'afii57422': u'\u062E',
+ 'afii57423': u'\u062F',
+ 'afii57424': u'\u0630',
+ 'afii57425': u'\u0631',
+ 'afii57426': u'\u0632',
+ 'afii57427': u'\u0633',
+ 'afii57428': u'\u0634',
+ 'afii57429': u'\u0635',
+ 'afii57430': u'\u0636',
+ 'afii57431': u'\u0637',
+ 'afii57432': u'\u0638',
+ 'afii57433': u'\u0639',
+ 'afii57434': u'\u063A',
+ 'afii57440': u'\u0640',
+ 'afii57441': u'\u0641',
+ 'afii57442': u'\u0642',
+ 'afii57443': u'\u0643',
+ 'afii57444': u'\u0644',
+ 'afii57445': u'\u0645',
+ 'afii57446': u'\u0646',
+ 'afii57448': u'\u0648',
+ 'afii57449': u'\u0649',
+ 'afii57450': u'\u064A',
+ 'afii57451': u'\u064B',
+ 'afii57452': u'\u064C',
+ 'afii57453': u'\u064D',
+ 'afii57454': u'\u064E',
+ 'afii57455': u'\u064F',
+ 'afii57456': u'\u0650',
+ 'afii57457': u'\u0651',
+ 'afii57458': u'\u0652',
+ 'afii57470': u'\u0647',
+ 'afii57505': u'\u06A4',
+ 'afii57506': u'\u067E',
+ 'afii57507': u'\u0686',
+ 'afii57508': u'\u0698',
+ 'afii57509': u'\u06AF',
+ 'afii57511': u'\u0679',
+ 'afii57512': u'\u0688',
+ 'afii57513': u'\u0691',
+ 'afii57514': u'\u06BA',
+ 'afii57519': u'\u06D2',
+ 'afii57534': u'\u06D5',
+ 'afii57636': u'\u20AA',
+ 'afii57645': u'\u05BE',
+ 'afii57658': u'\u05C3',
+ 'afii57664': u'\u05D0',
+ 'afii57665': u'\u05D1',
+ 'afii57666': u'\u05D2',
+ 'afii57667': u'\u05D3',
+ 'afii57668': u'\u05D4',
+ 'afii57669': u'\u05D5',
+ 'afii57670': u'\u05D6',
+ 'afii57671': u'\u05D7',
+ 'afii57672': u'\u05D8',
+ 'afii57673': u'\u05D9',
+ 'afii57674': u'\u05DA',
+ 'afii57675': u'\u05DB',
+ 'afii57676': u'\u05DC',
+ 'afii57677': u'\u05DD',
+ 'afii57678': u'\u05DE',
+ 'afii57679': u'\u05DF',
+ 'afii57680': u'\u05E0',
+ 'afii57681': u'\u05E1',
+ 'afii57682': u'\u05E2',
+ 'afii57683': u'\u05E3',
+ 'afii57684': u'\u05E4',
+ 'afii57685': u'\u05E5',
+ 'afii57686': u'\u05E6',
+ 'afii57687': u'\u05E7',
+ 'afii57688': u'\u05E8',
+ 'afii57689': u'\u05E9',
+ 'afii57690': u'\u05EA',
+ 'afii57694': u'\uFB2A',
+ 'afii57695': u'\uFB2B',
+ 'afii57700': u'\uFB4B',
+ 'afii57705': u'\uFB1F',
+ 'afii57716': u'\u05F0',
+ 'afii57717': u'\u05F1',
+ 'afii57718': u'\u05F2',
+ 'afii57723': u'\uFB35',
+ 'afii57793': u'\u05B4',
+ 'afii57794': u'\u05B5',
+ 'afii57795': u'\u05B6',
+ 'afii57796': u'\u05BB',
+ 'afii57797': u'\u05B8',
+ 'afii57798': u'\u05B7',
+ 'afii57799': u'\u05B0',
+ 'afii57800': u'\u05B2',
+ 'afii57801': u'\u05B1',
+ 'afii57802': u'\u05B3',
+ 'afii57803': u'\u05C2',
+ 'afii57804': u'\u05C1',
+ 'afii57806': u'\u05B9',
+ 'afii57807': u'\u05BC',
+ 'afii57839': u'\u05BD',
+ 'afii57841': u'\u05BF',
+ 'afii57842': u'\u05C0',
+ 'afii57929': u'\u02BC',
+ 'afii61248': u'\u2105',
+ 'afii61289': u'\u2113',
+ 'afii61352': u'\u2116',
+ 'afii61573': u'\u202C',
+ 'afii61574': u'\u202D',
+ 'afii61575': u'\u202E',
+ 'afii61664': u'\u200C',
+ 'afii63167': u'\u066D',
+ 'afii64937': u'\u02BD',
+ 'agrave': u'\u00E0',
+ 'agujarati': u'\u0A85',
+ 'agurmukhi': u'\u0A05',
+ 'ahiragana': u'\u3042',
+ 'ahookabove': u'\u1EA3',
+ 'aibengali': u'\u0990',
+ 'aibopomofo': u'\u311E',
+ 'aideva': u'\u0910',
+ 'aiecyrillic': u'\u04D5',
+ 'aigujarati': u'\u0A90',
+ 'aigurmukhi': u'\u0A10',
+ 'aimatragurmukhi': u'\u0A48',
+ 'ainarabic': u'\u0639',
+ 'ainfinalarabic': u'\uFECA',
+ 'aininitialarabic': u'\uFECB',
+ 'ainmedialarabic': u'\uFECC',
+ 'ainvertedbreve': u'\u0203',
+ 'aivowelsignbengali': u'\u09C8',
+ 'aivowelsigndeva': u'\u0948',
+ 'aivowelsigngujarati': u'\u0AC8',
+ 'akatakana': u'\u30A2',
+ 'akatakanahalfwidth': u'\uFF71',
+ 'akorean': u'\u314F',
+ 'alef': u'\u05D0',
+ 'alefarabic': u'\u0627',
+ 'alefdageshhebrew': u'\uFB30',
+ 'aleffinalarabic': u'\uFE8E',
+ 'alefhamzaabovearabic': u'\u0623',
+ 'alefhamzaabovefinalarabic': u'\uFE84',
+ 'alefhamzabelowarabic': u'\u0625',
+ 'alefhamzabelowfinalarabic': u'\uFE88',
+ 'alefhebrew': u'\u05D0',
+ 'aleflamedhebrew': u'\uFB4F',
+ 'alefmaddaabovearabic': u'\u0622',
+ 'alefmaddaabovefinalarabic': u'\uFE82',
+ 'alefmaksuraarabic': u'\u0649',
+ 'alefmaksurafinalarabic': u'\uFEF0',
+ 'alefmaksurainitialarabic': u'\uFEF3',
+ 'alefmaksuramedialarabic': u'\uFEF4',
+ 'alefpatahhebrew': u'\uFB2E',
+ 'alefqamatshebrew': u'\uFB2F',
+ 'aleph': u'\u2135',
+ 'allequal': u'\u224C',
+ 'alpha': u'\u03B1',
+ 'alphatonos': u'\u03AC',
+ 'amacron': u'\u0101',
+ 'amonospace': u'\uFF41',
+ 'ampersand': u'\u0026',
+ 'ampersandmonospace': u'\uFF06',
+ 'ampersandsmall': u'\uF726',
+ 'amsquare': u'\u33C2',
+ 'anbopomofo': u'\u3122',
+ 'angbopomofo': u'\u3124',
+ 'angkhankhuthai': u'\u0E5A',
+ 'angle': u'\u2220',
+ 'anglebracketleft': u'\u3008',
+ 'anglebracketleftvertical': u'\uFE3F',
+ 'anglebracketright': u'\u3009',
+ 'anglebracketrightvertical': u'\uFE40',
+ 'angleleft': u'\u2329',
+ 'angleright': u'\u232A',
+ 'angstrom': u'\u212B',
+ 'anoteleia': u'\u0387',
+ 'anudattadeva': u'\u0952',
+ 'anusvarabengali': u'\u0982',
+ 'anusvaradeva': u'\u0902',
+ 'anusvaragujarati': u'\u0A82',
+ 'aogonek': u'\u0105',
+ 'apaatosquare': u'\u3300',
+ 'aparen': u'\u249C',
+ 'apostrophearmenian': u'\u055A',
+ 'apostrophemod': u'\u02BC',
+ 'apple': u'\uF8FF',
+ 'approaches': u'\u2250',
+ 'approxequal': u'\u2248',
+ 'approxequalorimage': u'\u2252',
+ 'approximatelyequal': u'\u2245',
+ 'araeaekorean': u'\u318E',
+ 'araeakorean': u'\u318D',
+ 'arc': u'\u2312',
+ 'arighthalfring': u'\u1E9A',
+ 'aring': u'\u00E5',
+ 'aringacute': u'\u01FB',
+ 'aringbelow': u'\u1E01',
+ 'arrowboth': u'\u2194',
+ 'arrowdashdown': u'\u21E3',
+ 'arrowdashleft': u'\u21E0',
+ 'arrowdashright': u'\u21E2',
+ 'arrowdashup': u'\u21E1',
+ 'arrowdblboth': u'\u21D4',
+ 'arrowdbldown': u'\u21D3',
+ 'arrowdblleft': u'\u21D0',
+ 'arrowdblright': u'\u21D2',
+ 'arrowdblup': u'\u21D1',
+ 'arrowdown': u'\u2193',
+ 'arrowdownleft': u'\u2199',
+ 'arrowdownright': u'\u2198',
+ 'arrowdownwhite': u'\u21E9',
+ 'arrowheaddownmod': u'\u02C5',
+ 'arrowheadleftmod': u'\u02C2',
+ 'arrowheadrightmod': u'\u02C3',
+ 'arrowheadupmod': u'\u02C4',
+ 'arrowhorizex': u'\uF8E7',
+ 'arrowleft': u'\u2190',
+ 'arrowleftdbl': u'\u21D0',
+ 'arrowleftdblstroke': u'\u21CD',
+ 'arrowleftoverright': u'\u21C6',
+ 'arrowleftwhite': u'\u21E6',
+ 'arrowright': u'\u2192',
+ 'arrowrightdblstroke': u'\u21CF',
+ 'arrowrightheavy': u'\u279E',
+ 'arrowrightoverleft': u'\u21C4',
+ 'arrowrightwhite': u'\u21E8',
+ 'arrowtableft': u'\u21E4',
+ 'arrowtabright': u'\u21E5',
+ 'arrowup': u'\u2191',
+ 'arrowupdn': u'\u2195',
+ 'arrowupdnbse': u'\u21A8',
+ 'arrowupdownbase': u'\u21A8',
+ 'arrowupleft': u'\u2196',
+ 'arrowupleftofdown': u'\u21C5',
+ 'arrowupright': u'\u2197',
+ 'arrowupwhite': u'\u21E7',
+ 'arrowvertex': u'\uF8E6',
+ 'asciicircum': u'\u005E',
+ 'asciicircummonospace': u'\uFF3E',
+ 'asciitilde': u'\u007E',
+ 'asciitildemonospace': u'\uFF5E',
+ 'ascript': u'\u0251',
+ 'ascriptturned': u'\u0252',
+ 'asmallhiragana': u'\u3041',
+ 'asmallkatakana': u'\u30A1',
+ 'asmallkatakanahalfwidth': u'\uFF67',
+ 'asterisk': u'\u002A',
+ 'asteriskaltonearabic': u'\u066D',
+ 'asteriskarabic': u'\u066D',
+ 'asteriskmath': u'\u2217',
+ 'asteriskmonospace': u'\uFF0A',
+ 'asterisksmall': u'\uFE61',
+ 'asterism': u'\u2042',
+ 'asuperior': u'\uF6E9',
+ 'asymptoticallyequal': u'\u2243',
+ 'at': u'\u0040',
+ 'atilde': u'\u00E3',
+ 'atmonospace': u'\uFF20',
+ 'atsmall': u'\uFE6B',
+ 'aturned': u'\u0250',
+ 'aubengali': u'\u0994',
+ 'aubopomofo': u'\u3120',
+ 'audeva': u'\u0914',
+ 'augujarati': u'\u0A94',
+ 'augurmukhi': u'\u0A14',
+ 'aulengthmarkbengali': u'\u09D7',
+ 'aumatragurmukhi': u'\u0A4C',
+ 'auvowelsignbengali': u'\u09CC',
+ 'auvowelsigndeva': u'\u094C',
+ 'auvowelsigngujarati': u'\u0ACC',
+ 'avagrahadeva': u'\u093D',
+ 'aybarmenian': u'\u0561',
+ 'ayin': u'\u05E2',
+ 'ayinaltonehebrew': u'\uFB20',
+ 'ayinhebrew': u'\u05E2',
+ 'b': u'\u0062',
+ 'babengali': u'\u09AC',
+ 'backslash': u'\u005C',
+ 'backslashmonospace': u'\uFF3C',
+ 'badeva': u'\u092C',
+ 'bagujarati': u'\u0AAC',
+ 'bagurmukhi': u'\u0A2C',
+ 'bahiragana': u'\u3070',
+ 'bahtthai': u'\u0E3F',
+ 'bakatakana': u'\u30D0',
+ 'bar': u'\u007C',
+ 'barmonospace': u'\uFF5C',
+ 'bbopomofo': u'\u3105',
+ 'bcircle': u'\u24D1',
+ 'bdotaccent': u'\u1E03',
+ 'bdotbelow': u'\u1E05',
+ 'beamedsixteenthnotes': u'\u266C',
+ 'because': u'\u2235',
+ 'becyrillic': u'\u0431',
+ 'beharabic': u'\u0628',
+ 'behfinalarabic': u'\uFE90',
+ 'behinitialarabic': u'\uFE91',
+ 'behiragana': u'\u3079',
+ 'behmedialarabic': u'\uFE92',
+ 'behmeeminitialarabic': u'\uFC9F',
+ 'behmeemisolatedarabic': u'\uFC08',
+ 'behnoonfinalarabic': u'\uFC6D',
+ 'bekatakana': u'\u30D9',
+ 'benarmenian': u'\u0562',
+ 'bet': u'\u05D1',
+ 'beta': u'\u03B2',
+ 'betasymbolgreek': u'\u03D0',
+ 'betdagesh': u'\uFB31',
+ 'betdageshhebrew': u'\uFB31',
+ 'bethebrew': u'\u05D1',
+ 'betrafehebrew': u'\uFB4C',
+ 'bhabengali': u'\u09AD',
+ 'bhadeva': u'\u092D',
+ 'bhagujarati': u'\u0AAD',
+ 'bhagurmukhi': u'\u0A2D',
+ 'bhook': u'\u0253',
+ 'bihiragana': u'\u3073',
+ 'bikatakana': u'\u30D3',
+ 'bilabialclick': u'\u0298',
+ 'bindigurmukhi': u'\u0A02',
+ 'birusquare': u'\u3331',
+ 'blackcircle': u'\u25CF',
+ 'blackdiamond': u'\u25C6',
+ 'blackdownpointingtriangle': u'\u25BC',
+ 'blackleftpointingpointer': u'\u25C4',
+ 'blackleftpointingtriangle': u'\u25C0',
+ 'blacklenticularbracketleft': u'\u3010',
+ 'blacklenticularbracketleftvertical': u'\uFE3B',
+ 'blacklenticularbracketright': u'\u3011',
+ 'blacklenticularbracketrightvertical': u'\uFE3C',
+ 'blacklowerlefttriangle': u'\u25E3',
+ 'blacklowerrighttriangle': u'\u25E2',
+ 'blackrectangle': u'\u25AC',
+ 'blackrightpointingpointer': u'\u25BA',
+ 'blackrightpointingtriangle': u'\u25B6',
+ 'blacksmallsquare': u'\u25AA',
+ 'blacksmilingface': u'\u263B',
+ 'blacksquare': u'\u25A0',
+ 'blackstar': u'\u2605',
+ 'blackupperlefttriangle': u'\u25E4',
+ 'blackupperrighttriangle': u'\u25E5',
+ 'blackuppointingsmalltriangle': u'\u25B4',
+ 'blackuppointingtriangle': u'\u25B2',
+ 'blank': u'\u2423',
+ 'blinebelow': u'\u1E07',
+ 'block': u'\u2588',
+ 'bmonospace': u'\uFF42',
+ 'bobaimaithai': u'\u0E1A',
+ 'bohiragana': u'\u307C',
+ 'bokatakana': u'\u30DC',
+ 'bparen': u'\u249D',
+ 'bqsquare': u'\u33C3',
+ 'braceex': u'\uF8F4',
+ 'braceleft': u'\u007B',
+ 'braceleftbt': u'\uF8F3',
+ 'braceleftmid': u'\uF8F2',
+ 'braceleftmonospace': u'\uFF5B',
+ 'braceleftsmall': u'\uFE5B',
+ 'bracelefttp': u'\uF8F1',
+ 'braceleftvertical': u'\uFE37',
+ 'braceright': u'\u007D',
+ 'bracerightbt': u'\uF8FE',
+ 'bracerightmid': u'\uF8FD',
+ 'bracerightmonospace': u'\uFF5D',
+ 'bracerightsmall': u'\uFE5C',
+ 'bracerighttp': u'\uF8FC',
+ 'bracerightvertical': u'\uFE38',
+ 'bracketleft': u'\u005B',
+ 'bracketleftbt': u'\uF8F0',
+ 'bracketleftex': u'\uF8EF',
+ 'bracketleftmonospace': u'\uFF3B',
+ 'bracketlefttp': u'\uF8EE',
+ 'bracketright': u'\u005D',
+ 'bracketrightbt': u'\uF8FB',
+ 'bracketrightex': u'\uF8FA',
+ 'bracketrightmonospace': u'\uFF3D',
+ 'bracketrighttp': u'\uF8F9',
+ 'breve': u'\u02D8',
+ 'brevebelowcmb': u'\u032E',
+ 'brevecmb': u'\u0306',
+ 'breveinvertedbelowcmb': u'\u032F',
+ 'breveinvertedcmb': u'\u0311',
+ 'breveinverteddoublecmb': u'\u0361',
+ 'bridgebelowcmb': u'\u032A',
+ 'bridgeinvertedbelowcmb': u'\u033A',
+ 'brokenbar': u'\u00A6',
+ 'bstroke': u'\u0180',
+ 'bsuperior': u'\uF6EA',
+ 'btopbar': u'\u0183',
+ 'buhiragana': u'\u3076',
+ 'bukatakana': u'\u30D6',
+ 'bullet': u'\u2022',
+ 'bulletinverse': u'\u25D8',
+ 'bulletoperator': u'\u2219',
+ 'bullseye': u'\u25CE',
+ 'c': u'\u0063',
+ 'caarmenian': u'\u056E',
+ 'cabengali': u'\u099A',
+ 'cacute': u'\u0107',
+ 'cadeva': u'\u091A',
+ 'cagujarati': u'\u0A9A',
+ 'cagurmukhi': u'\u0A1A',
+ 'calsquare': u'\u3388',
+ 'candrabindubengali': u'\u0981',
+ 'candrabinducmb': u'\u0310',
+ 'candrabindudeva': u'\u0901',
+ 'candrabindugujarati': u'\u0A81',
+ 'capslock': u'\u21EA',
+ 'careof': u'\u2105',
+ 'caron': u'\u02C7',
+ 'caronbelowcmb': u'\u032C',
+ 'caroncmb': u'\u030C',
+ 'carriagereturn': u'\u21B5',
+ 'cbopomofo': u'\u3118',
+ 'ccaron': u'\u010D',
+ 'ccedilla': u'\u00E7',
+ 'ccedillaacute': u'\u1E09',
+ 'ccircle': u'\u24D2',
+ 'ccircumflex': u'\u0109',
+ 'ccurl': u'\u0255',
+ 'cdot': u'\u010B',
+ 'cdotaccent': u'\u010B',
+ 'cdsquare': u'\u33C5',
+ 'cedilla': u'\u00B8',
+ 'cedillacmb': u'\u0327',
+ 'cent': u'\u00A2',
+ 'centigrade': u'\u2103',
+ 'centinferior': u'\uF6DF',
+ 'centmonospace': u'\uFFE0',
+ 'centoldstyle': u'\uF7A2',
+ 'centsuperior': u'\uF6E0',
+ 'chaarmenian': u'\u0579',
+ 'chabengali': u'\u099B',
+ 'chadeva': u'\u091B',
+ 'chagujarati': u'\u0A9B',
+ 'chagurmukhi': u'\u0A1B',
+ 'chbopomofo': u'\u3114',
+ 'cheabkhasiancyrillic': u'\u04BD',
+ 'checkmark': u'\u2713',
+ 'checyrillic': u'\u0447',
+ 'chedescenderabkhasiancyrillic': u'\u04BF',
+ 'chedescendercyrillic': u'\u04B7',
+ 'chedieresiscyrillic': u'\u04F5',
+ 'cheharmenian': u'\u0573',
+ 'chekhakassiancyrillic': u'\u04CC',
+ 'cheverticalstrokecyrillic': u'\u04B9',
+ 'chi': u'\u03C7',
+ 'chieuchacirclekorean': u'\u3277',
+ 'chieuchaparenkorean': u'\u3217',
+ 'chieuchcirclekorean': u'\u3269',
+ 'chieuchkorean': u'\u314A',
+ 'chieuchparenkorean': u'\u3209',
+ 'chochangthai': u'\u0E0A',
+ 'chochanthai': u'\u0E08',
+ 'chochingthai': u'\u0E09',
+ 'chochoethai': u'\u0E0C',
+ 'chook': u'\u0188',
+ 'cieucacirclekorean': u'\u3276',
+ 'cieucaparenkorean': u'\u3216',
+ 'cieuccirclekorean': u'\u3268',
+ 'cieuckorean': u'\u3148',
+ 'cieucparenkorean': u'\u3208',
+ 'cieucuparenkorean': u'\u321C',
+ 'circle': u'\u25CB',
+ 'circlemultiply': u'\u2297',
+ 'circleot': u'\u2299',
+ 'circleplus': u'\u2295',
+ 'circlepostalmark': u'\u3036',
+ 'circlewithlefthalfblack': u'\u25D0',
+ 'circlewithrighthalfblack': u'\u25D1',
+ 'circumflex': u'\u02C6',
+ 'circumflexbelowcmb': u'\u032D',
+ 'circumflexcmb': u'\u0302',
+ 'clear': u'\u2327',
+ 'clickalveolar': u'\u01C2',
+ 'clickdental': u'\u01C0',
+ 'clicklateral': u'\u01C1',
+ 'clickretroflex': u'\u01C3',
+ 'club': u'\u2663',
+ 'clubsuitblack': u'\u2663',
+ 'clubsuitwhite': u'\u2667',
+ 'cmcubedsquare': u'\u33A4',
+ 'cmonospace': u'\uFF43',
+ 'cmsquaredsquare': u'\u33A0',
+ 'coarmenian': u'\u0581',
+ 'colon': u'\u003A',
+ 'colonmonetary': u'\u20A1',
+ 'colonmonospace': u'\uFF1A',
+ 'colonsign': u'\u20A1',
+ 'colonsmall': u'\uFE55',
+ 'colontriangularhalfmod': u'\u02D1',
+ 'colontriangularmod': u'\u02D0',
+ 'comma': u'\u002C',
+ 'commaabovecmb': u'\u0313',
+ 'commaaboverightcmb': u'\u0315',
+ 'commaaccent': u'\uF6C3',
+ 'commaarabic': u'\u060C',
+ 'commaarmenian': u'\u055D',
+ 'commainferior': u'\uF6E1',
+ 'commamonospace': u'\uFF0C',
+ 'commareversedabovecmb': u'\u0314',
+ 'commareversedmod': u'\u02BD',
+ 'commasmall': u'\uFE50',
+ 'commasuperior': u'\uF6E2',
+ 'commaturnedabovecmb': u'\u0312',
+ 'commaturnedmod': u'\u02BB',
+ 'compass': u'\u263C',
+ 'congruent': u'\u2245',
+ 'contourintegral': u'\u222E',
+ 'control': u'\u2303',
+ 'controlACK': u'\u0006',
+ 'controlBEL': u'\u0007',
+ 'controlBS': u'\u0008',
+ 'controlCAN': u'\u0018',
+ 'controlCR': u'\u000D',
+ 'controlDC1': u'\u0011',
+ 'controlDC2': u'\u0012',
+ 'controlDC3': u'\u0013',
+ 'controlDC4': u'\u0014',
+ 'controlDEL': u'\u007F',
+ 'controlDLE': u'\u0010',
+ 'controlEM': u'\u0019',
+ 'controlENQ': u'\u0005',
+ 'controlEOT': u'\u0004',
+ 'controlESC': u'\u001B',
+ 'controlETB': u'\u0017',
+ 'controlETX': u'\u0003',
+ 'controlFF': u'\u000C',
+ 'controlFS': u'\u001C',
+ 'controlGS': u'\u001D',
+ 'controlHT': u'\u0009',
+ 'controlLF': u'\u000A',
+ 'controlNAK': u'\u0015',
+ 'controlRS': u'\u001E',
+ 'controlSI': u'\u000F',
+ 'controlSO': u'\u000E',
+ 'controlSOT': u'\u0002',
+ 'controlSTX': u'\u0001',
+ 'controlSUB': u'\u001A',
+ 'controlSYN': u'\u0016',
+ 'controlUS': u'\u001F',
+ 'controlVT': u'\u000B',
+ 'copyright': u'\u00A9',
+ 'copyrightsans': u'\uF8E9',
+ 'copyrightserif': u'\uF6D9',
+ 'cornerbracketleft': u'\u300C',
+ 'cornerbracketlefthalfwidth': u'\uFF62',
+ 'cornerbracketleftvertical': u'\uFE41',
+ 'cornerbracketright': u'\u300D',
+ 'cornerbracketrighthalfwidth': u'\uFF63',
+ 'cornerbracketrightvertical': u'\uFE42',
+ 'corporationsquare': u'\u337F',
+ 'cosquare': u'\u33C7',
+ 'coverkgsquare': u'\u33C6',
+ 'cparen': u'\u249E',
+ 'cruzeiro': u'\u20A2',
+ 'cstretched': u'\u0297',
+ 'curlyand': u'\u22CF',
+ 'curlyor': u'\u22CE',
+ 'currency': u'\u00A4',
+ 'cyrBreve': u'\uF6D1',
+ 'cyrFlex': u'\uF6D2',
+ 'cyrbreve': u'\uF6D4',
+ 'cyrflex': u'\uF6D5',
+ 'd': u'\u0064',
+ 'daarmenian': u'\u0564',
+ 'dabengali': u'\u09A6',
+ 'dadarabic': u'\u0636',
+ 'dadeva': u'\u0926',
+ 'dadfinalarabic': u'\uFEBE',
+ 'dadinitialarabic': u'\uFEBF',
+ 'dadmedialarabic': u'\uFEC0',
+ 'dagesh': u'\u05BC',
+ 'dageshhebrew': u'\u05BC',
+ 'dagger': u'\u2020',
+ 'daggerdbl': u'\u2021',
+ 'dagujarati': u'\u0AA6',
+ 'dagurmukhi': u'\u0A26',
+ 'dahiragana': u'\u3060',
+ 'dakatakana': u'\u30C0',
+ 'dalarabic': u'\u062F',
+ 'dalet': u'\u05D3',
+ 'daletdagesh': u'\uFB33',
+ 'daletdageshhebrew': u'\uFB33',
+ 'dalethatafpatah': u'\u05D3\u05B2',
+ 'dalethatafpatahhebrew': u'\u05D3\u05B2',
+ 'dalethatafsegol': u'\u05D3\u05B1',
+ 'dalethatafsegolhebrew': u'\u05D3\u05B1',
+ 'dalethebrew': u'\u05D3',
+ 'dalethiriq': u'\u05D3\u05B4',
+ 'dalethiriqhebrew': u'\u05D3\u05B4',
+ 'daletholam': u'\u05D3\u05B9',
+ 'daletholamhebrew': u'\u05D3\u05B9',
+ 'daletpatah': u'\u05D3\u05B7',
+ 'daletpatahhebrew': u'\u05D3\u05B7',
+ 'daletqamats': u'\u05D3\u05B8',
+ 'daletqamatshebrew': u'\u05D3\u05B8',
+ 'daletqubuts': u'\u05D3\u05BB',
+ 'daletqubutshebrew': u'\u05D3\u05BB',
+ 'daletsegol': u'\u05D3\u05B6',
+ 'daletsegolhebrew': u'\u05D3\u05B6',
+ 'daletsheva': u'\u05D3\u05B0',
+ 'daletshevahebrew': u'\u05D3\u05B0',
+ 'dalettsere': u'\u05D3\u05B5',
+ 'dalettserehebrew': u'\u05D3\u05B5',
+ 'dalfinalarabic': u'\uFEAA',
+ 'dammaarabic': u'\u064F',
+ 'dammalowarabic': u'\u064F',
+ 'dammatanaltonearabic': u'\u064C',
+ 'dammatanarabic': u'\u064C',
+ 'danda': u'\u0964',
+ 'dargahebrew': u'\u05A7',
+ 'dargalefthebrew': u'\u05A7',
+ 'dasiapneumatacyrilliccmb': u'\u0485',
+ 'dblGrave': u'\uF6D3',
+ 'dblanglebracketleft': u'\u300A',
+ 'dblanglebracketleftvertical': u'\uFE3D',
+ 'dblanglebracketright': u'\u300B',
+ 'dblanglebracketrightvertical': u'\uFE3E',
+ 'dblarchinvertedbelowcmb': u'\u032B',
+ 'dblarrowleft': u'\u21D4',
+ 'dblarrowright': u'\u21D2',
+ 'dbldanda': u'\u0965',
+ 'dblgrave': u'\uF6D6',
+ 'dblgravecmb': u'\u030F',
+ 'dblintegral': u'\u222C',
+ 'dbllowline': u'\u2017',
+ 'dbllowlinecmb': u'\u0333',
+ 'dbloverlinecmb': u'\u033F',
+ 'dblprimemod': u'\u02BA',
+ 'dblverticalbar': u'\u2016',
+ 'dblverticallineabovecmb': u'\u030E',
+ 'dbopomofo': u'\u3109',
+ 'dbsquare': u'\u33C8',
+ 'dcaron': u'\u010F',
+ 'dcedilla': u'\u1E11',
+ 'dcircle': u'\u24D3',
+ 'dcircumflexbelow': u'\u1E13',
+ 'dcroat': u'\u0111',
+ 'ddabengali': u'\u09A1',
+ 'ddadeva': u'\u0921',
+ 'ddagujarati': u'\u0AA1',
+ 'ddagurmukhi': u'\u0A21',
+ 'ddalarabic': u'\u0688',
+ 'ddalfinalarabic': u'\uFB89',
+ 'dddhadeva': u'\u095C',
+ 'ddhabengali': u'\u09A2',
+ 'ddhadeva': u'\u0922',
+ 'ddhagujarati': u'\u0AA2',
+ 'ddhagurmukhi': u'\u0A22',
+ 'ddotaccent': u'\u1E0B',
+ 'ddotbelow': u'\u1E0D',
+ 'decimalseparatorarabic': u'\u066B',
+ 'decimalseparatorpersian': u'\u066B',
+ 'decyrillic': u'\u0434',
+ 'degree': u'\u00B0',
+ 'dehihebrew': u'\u05AD',
+ 'dehiragana': u'\u3067',
+ 'deicoptic': u'\u03EF',
+ 'dekatakana': u'\u30C7',
+ 'deleteleft': u'\u232B',
+ 'deleteright': u'\u2326',
+ 'delta': u'\u03B4',
+ 'deltaturned': u'\u018D',
+ 'denominatorminusonenumeratorbengali': u'\u09F8',
+ 'dezh': u'\u02A4',
+ 'dhabengali': u'\u09A7',
+ 'dhadeva': u'\u0927',
+ 'dhagujarati': u'\u0AA7',
+ 'dhagurmukhi': u'\u0A27',
+ 'dhook': u'\u0257',
+ 'dialytikatonos': u'\u0385',
+ 'dialytikatonoscmb': u'\u0344',
+ 'diamond': u'\u2666',
+ 'diamondsuitwhite': u'\u2662',
+ 'dieresis': u'\u00A8',
+ 'dieresisacute': u'\uF6D7',
+ 'dieresisbelowcmb': u'\u0324',
+ 'dieresiscmb': u'\u0308',
+ 'dieresisgrave': u'\uF6D8',
+ 'dieresistonos': u'\u0385',
+ 'dihiragana': u'\u3062',
+ 'dikatakana': u'\u30C2',
+ 'dittomark': u'\u3003',
+ 'divide': u'\u00F7',
+ 'divides': u'\u2223',
+ 'divisionslash': u'\u2215',
+ 'djecyrillic': u'\u0452',
+ 'dkshade': u'\u2593',
+ 'dlinebelow': u'\u1E0F',
+ 'dlsquare': u'\u3397',
+ 'dmacron': u'\u0111',
+ 'dmonospace': u'\uFF44',
+ 'dnblock': u'\u2584',
+ 'dochadathai': u'\u0E0E',
+ 'dodekthai': u'\u0E14',
+ 'dohiragana': u'\u3069',
+ 'dokatakana': u'\u30C9',
+ 'dollar': u'\u0024',
+ 'dollarinferior': u'\uF6E3',
+ 'dollarmonospace': u'\uFF04',
+ 'dollaroldstyle': u'\uF724',
+ 'dollarsmall': u'\uFE69',
+ 'dollarsuperior': u'\uF6E4',
+ 'dong': u'\u20AB',
+ 'dorusquare': u'\u3326',
+ 'dotaccent': u'\u02D9',
+ 'dotaccentcmb': u'\u0307',
+ 'dotbelowcmb': u'\u0323',
+ 'dotbelowcomb': u'\u0323',
+ 'dotkatakana': u'\u30FB',
+ 'dotlessi': u'\u0131',
+ 'dotlessj': u'\uF6BE',
+ 'dotlessjstrokehook': u'\u0284',
+ 'dotmath': u'\u22C5',
+ 'dottedcircle': u'\u25CC',
+ 'doubleyodpatah': u'\uFB1F',
+ 'doubleyodpatahhebrew': u'\uFB1F',
+ 'downtackbelowcmb': u'\u031E',
+ 'downtackmod': u'\u02D5',
+ 'dparen': u'\u249F',
+ 'dsuperior': u'\uF6EB',
+ 'dtail': u'\u0256',
+ 'dtopbar': u'\u018C',
+ 'duhiragana': u'\u3065',
+ 'dukatakana': u'\u30C5',
+ 'dz': u'\u01F3',
+ 'dzaltone': u'\u02A3',
+ 'dzcaron': u'\u01C6',
+ 'dzcurl': u'\u02A5',
+ 'dzeabkhasiancyrillic': u'\u04E1',
+ 'dzecyrillic': u'\u0455',
+ 'dzhecyrillic': u'\u045F',
+ 'e': u'\u0065',
+ 'eacute': u'\u00E9',
+ 'earth': u'\u2641',
+ 'ebengali': u'\u098F',
+ 'ebopomofo': u'\u311C',
+ 'ebreve': u'\u0115',
+ 'ecandradeva': u'\u090D',
+ 'ecandragujarati': u'\u0A8D',
+ 'ecandravowelsigndeva': u'\u0945',
+ 'ecandravowelsigngujarati': u'\u0AC5',
+ 'ecaron': u'\u011B',
+ 'ecedillabreve': u'\u1E1D',
+ 'echarmenian': u'\u0565',
+ 'echyiwnarmenian': u'\u0587',
+ 'ecircle': u'\u24D4',
+ 'ecircumflex': u'\u00EA',
+ 'ecircumflexacute': u'\u1EBF',
+ 'ecircumflexbelow': u'\u1E19',
+ 'ecircumflexdotbelow': u'\u1EC7',
+ 'ecircumflexgrave': u'\u1EC1',
+ 'ecircumflexhookabove': u'\u1EC3',
+ 'ecircumflextilde': u'\u1EC5',
+ 'ecyrillic': u'\u0454',
+ 'edblgrave': u'\u0205',
+ 'edeva': u'\u090F',
+ 'edieresis': u'\u00EB',
+ 'edot': u'\u0117',
+ 'edotaccent': u'\u0117',
+ 'edotbelow': u'\u1EB9',
+ 'eegurmukhi': u'\u0A0F',
+ 'eematragurmukhi': u'\u0A47',
+ 'efcyrillic': u'\u0444',
+ 'egrave': u'\u00E8',
+ 'egujarati': u'\u0A8F',
+ 'eharmenian': u'\u0567',
+ 'ehbopomofo': u'\u311D',
+ 'ehiragana': u'\u3048',
+ 'ehookabove': u'\u1EBB',
+ 'eibopomofo': u'\u311F',
+ 'eight': u'\u0038',
+ 'eightarabic': u'\u0668',
+ 'eightbengali': u'\u09EE',
+ 'eightcircle': u'\u2467',
+ 'eightcircleinversesansserif': u'\u2791',
+ 'eightdeva': u'\u096E',
+ 'eighteencircle': u'\u2471',
+ 'eighteenparen': u'\u2485',
+ 'eighteenperiod': u'\u2499',
+ 'eightgujarati': u'\u0AEE',
+ 'eightgurmukhi': u'\u0A6E',
+ 'eighthackarabic': u'\u0668',
+ 'eighthangzhou': u'\u3028',
+ 'eighthnotebeamed': u'\u266B',
+ 'eightideographicparen': u'\u3227',
+ 'eightinferior': u'\u2088',
+ 'eightmonospace': u'\uFF18',
+ 'eightoldstyle': u'\uF738',
+ 'eightparen': u'\u247B',
+ 'eightperiod': u'\u248F',
+ 'eightpersian': u'\u06F8',
+ 'eightroman': u'\u2177',
+ 'eightsuperior': u'\u2078',
+ 'eightthai': u'\u0E58',
+ 'einvertedbreve': u'\u0207',
+ 'eiotifiedcyrillic': u'\u0465',
+ 'ekatakana': u'\u30A8',
+ 'ekatakanahalfwidth': u'\uFF74',
+ 'ekonkargurmukhi': u'\u0A74',
+ 'ekorean': u'\u3154',
+ 'elcyrillic': u'\u043B',
+ 'element': u'\u2208',
+ 'elevencircle': u'\u246A',
+ 'elevenparen': u'\u247E',
+ 'elevenperiod': u'\u2492',
+ 'elevenroman': u'\u217A',
+ 'ellipsis': u'\u2026',
+ 'ellipsisvertical': u'\u22EE',
+ 'emacron': u'\u0113',
+ 'emacronacute': u'\u1E17',
+ 'emacrongrave': u'\u1E15',
+ 'emcyrillic': u'\u043C',
+ 'emdash': u'\u2014',
+ 'emdashvertical': u'\uFE31',
+ 'emonospace': u'\uFF45',
+ 'emphasismarkarmenian': u'\u055B',
+ 'emptyset': u'\u2205',
+ 'enbopomofo': u'\u3123',
+ 'encyrillic': u'\u043D',
+ 'endash': u'\u2013',
+ 'endashvertical': u'\uFE32',
+ 'endescendercyrillic': u'\u04A3',
+ 'eng': u'\u014B',
+ 'engbopomofo': u'\u3125',
+ 'enghecyrillic': u'\u04A5',
+ 'enhookcyrillic': u'\u04C8',
+ 'enspace': u'\u2002',
+ 'eogonek': u'\u0119',
+ 'eokorean': u'\u3153',
+ 'eopen': u'\u025B',
+ 'eopenclosed': u'\u029A',
+ 'eopenreversed': u'\u025C',
+ 'eopenreversedclosed': u'\u025E',
+ 'eopenreversedhook': u'\u025D',
+ 'eparen': u'\u24A0',
+ 'epsilon': u'\u03B5',
+ 'epsilontonos': u'\u03AD',
+ 'equal': u'\u003D',
+ 'equalmonospace': u'\uFF1D',
+ 'equalsmall': u'\uFE66',
+ 'equalsuperior': u'\u207C',
+ 'equivalence': u'\u2261',
+ 'erbopomofo': u'\u3126',
+ 'ercyrillic': u'\u0440',
+ 'ereversed': u'\u0258',
+ 'ereversedcyrillic': u'\u044D',
+ 'escyrillic': u'\u0441',
+ 'esdescendercyrillic': u'\u04AB',
+ 'esh': u'\u0283',
+ 'eshcurl': u'\u0286',
+ 'eshortdeva': u'\u090E',
+ 'eshortvowelsigndeva': u'\u0946',
+ 'eshreversedloop': u'\u01AA',
+ 'eshsquatreversed': u'\u0285',
+ 'esmallhiragana': u'\u3047',
+ 'esmallkatakana': u'\u30A7',
+ 'esmallkatakanahalfwidth': u'\uFF6A',
+ 'estimated': u'\u212E',
+ 'esuperior': u'\uF6EC',
+ 'eta': u'\u03B7',
+ 'etarmenian': u'\u0568',
+ 'etatonos': u'\u03AE',
+ 'eth': u'\u00F0',
+ 'etilde': u'\u1EBD',
+ 'etildebelow': u'\u1E1B',
+ 'etnahtafoukhhebrew': u'\u0591',
+ 'etnahtafoukhlefthebrew': u'\u0591',
+ 'etnahtahebrew': u'\u0591',
+ 'etnahtalefthebrew': u'\u0591',
+ 'eturned': u'\u01DD',
+ 'eukorean': u'\u3161',
+ 'euro': u'\u20AC',
+ 'evowelsignbengali': u'\u09C7',
+ 'evowelsigndeva': u'\u0947',
+ 'evowelsigngujarati': u'\u0AC7',
+ 'exclam': u'\u0021',
+ 'exclamarmenian': u'\u055C',
+ 'exclamdbl': u'\u203C',
+ 'exclamdown': u'\u00A1',
+ 'exclamdownsmall': u'\uF7A1',
+ 'exclammonospace': u'\uFF01',
+ 'exclamsmall': u'\uF721',
+ 'existential': u'\u2203',
+ 'ezh': u'\u0292',
+ 'ezhcaron': u'\u01EF',
+ 'ezhcurl': u'\u0293',
+ 'ezhreversed': u'\u01B9',
+ 'ezhtail': u'\u01BA',
+ 'f': u'\u0066',
+ 'fadeva': u'\u095E',
+ 'fagurmukhi': u'\u0A5E',
+ 'fahrenheit': u'\u2109',
+ 'fathaarabic': u'\u064E',
+ 'fathalowarabic': u'\u064E',
+ 'fathatanarabic': u'\u064B',
+ 'fbopomofo': u'\u3108',
+ 'fcircle': u'\u24D5',
+ 'fdotaccent': u'\u1E1F',
+ 'feharabic': u'\u0641',
+ 'feharmenian': u'\u0586',
+ 'fehfinalarabic': u'\uFED2',
+ 'fehinitialarabic': u'\uFED3',
+ 'fehmedialarabic': u'\uFED4',
+ 'feicoptic': u'\u03E5',
+ 'female': u'\u2640',
+ 'ff': u'\uFB00',
+ 'ffi': u'\uFB03',
+ 'ffl': u'\uFB04',
+ 'fi': u'\uFB01',
+ 'fifteencircle': u'\u246E',
+ 'fifteenparen': u'\u2482',
+ 'fifteenperiod': u'\u2496',
+ 'figuredash': u'\u2012',
+ 'filledbox': u'\u25A0',
+ 'filledrect': u'\u25AC',
+ 'finalkaf': u'\u05DA',
+ 'finalkafdagesh': u'\uFB3A',
+ 'finalkafdageshhebrew': u'\uFB3A',
+ 'finalkafhebrew': u'\u05DA',
+ 'finalkafqamats': u'\u05DA\u05B8',
+ 'finalkafqamatshebrew': u'\u05DA\u05B8',
+ 'finalkafsheva': u'\u05DA\u05B0',
+ 'finalkafshevahebrew': u'\u05DA\u05B0',
+ 'finalmem': u'\u05DD',
+ 'finalmemhebrew': u'\u05DD',
+ 'finalnun': u'\u05DF',
+ 'finalnunhebrew': u'\u05DF',
+ 'finalpe': u'\u05E3',
+ 'finalpehebrew': u'\u05E3',
+ 'finaltsadi': u'\u05E5',
+ 'finaltsadihebrew': u'\u05E5',
+ 'firsttonechinese': u'\u02C9',
+ 'fisheye': u'\u25C9',
+ 'fitacyrillic': u'\u0473',
+ 'five': u'\u0035',
+ 'fivearabic': u'\u0665',
+ 'fivebengali': u'\u09EB',
+ 'fivecircle': u'\u2464',
+ 'fivecircleinversesansserif': u'\u278E',
+ 'fivedeva': u'\u096B',
+ 'fiveeighths': u'\u215D',
+ 'fivegujarati': u'\u0AEB',
+ 'fivegurmukhi': u'\u0A6B',
+ 'fivehackarabic': u'\u0665',
+ 'fivehangzhou': u'\u3025',
+ 'fiveideographicparen': u'\u3224',
+ 'fiveinferior': u'\u2085',
+ 'fivemonospace': u'\uFF15',
+ 'fiveoldstyle': u'\uF735',
+ 'fiveparen': u'\u2478',
+ 'fiveperiod': u'\u248C',
+ 'fivepersian': u'\u06F5',
+ 'fiveroman': u'\u2174',
+ 'fivesuperior': u'\u2075',
+ 'fivethai': u'\u0E55',
+ 'fl': u'\uFB02',
+ 'florin': u'\u0192',
+ 'fmonospace': u'\uFF46',
+ 'fmsquare': u'\u3399',
+ 'fofanthai': u'\u0E1F',
+ 'fofathai': u'\u0E1D',
+ 'fongmanthai': u'\u0E4F',
+ 'forall': u'\u2200',
+ 'four': u'\u0034',
+ 'fourarabic': u'\u0664',
+ 'fourbengali': u'\u09EA',
+ 'fourcircle': u'\u2463',
+ 'fourcircleinversesansserif': u'\u278D',
+ 'fourdeva': u'\u096A',
+ 'fourgujarati': u'\u0AEA',
+ 'fourgurmukhi': u'\u0A6A',
+ 'fourhackarabic': u'\u0664',
+ 'fourhangzhou': u'\u3024',
+ 'fourideographicparen': u'\u3223',
+ 'fourinferior': u'\u2084',
+ 'fourmonospace': u'\uFF14',
+ 'fournumeratorbengali': u'\u09F7',
+ 'fouroldstyle': u'\uF734',
+ 'fourparen': u'\u2477',
+ 'fourperiod': u'\u248B',
+ 'fourpersian': u'\u06F4',
+ 'fourroman': u'\u2173',
+ 'foursuperior': u'\u2074',
+ 'fourteencircle': u'\u246D',
+ 'fourteenparen': u'\u2481',
+ 'fourteenperiod': u'\u2495',
+ 'fourthai': u'\u0E54',
+ 'fourthtonechinese': u'\u02CB',
+ 'fparen': u'\u24A1',
+ 'fraction': u'\u2044',
+ 'franc': u'\u20A3',
+ 'g': u'\u0067',
+ 'gabengali': u'\u0997',
+ 'gacute': u'\u01F5',
+ 'gadeva': u'\u0917',
+ 'gafarabic': u'\u06AF',
+ 'gaffinalarabic': u'\uFB93',
+ 'gafinitialarabic': u'\uFB94',
+ 'gafmedialarabic': u'\uFB95',
+ 'gagujarati': u'\u0A97',
+ 'gagurmukhi': u'\u0A17',
+ 'gahiragana': u'\u304C',
+ 'gakatakana': u'\u30AC',
+ 'gamma': u'\u03B3',
+ 'gammalatinsmall': u'\u0263',
+ 'gammasuperior': u'\u02E0',
+ 'gangiacoptic': u'\u03EB',
+ 'gbopomofo': u'\u310D',
+ 'gbreve': u'\u011F',
+ 'gcaron': u'\u01E7',
+ 'gcedilla': u'\u0123',
+ 'gcircle': u'\u24D6',
+ 'gcircumflex': u'\u011D',
+ 'gcommaaccent': u'\u0123',
+ 'gdot': u'\u0121',
+ 'gdotaccent': u'\u0121',
+ 'gecyrillic': u'\u0433',
+ 'gehiragana': u'\u3052',
+ 'gekatakana': u'\u30B2',
+ 'geometricallyequal': u'\u2251',
+ 'gereshaccenthebrew': u'\u059C',
+ 'gereshhebrew': u'\u05F3',
+ 'gereshmuqdamhebrew': u'\u059D',
+ 'germandbls': u'\u00DF',
+ 'gershayimaccenthebrew': u'\u059E',
+ 'gershayimhebrew': u'\u05F4',
+ 'getamark': u'\u3013',
+ 'ghabengali': u'\u0998',
+ 'ghadarmenian': u'\u0572',
+ 'ghadeva': u'\u0918',
+ 'ghagujarati': u'\u0A98',
+ 'ghagurmukhi': u'\u0A18',
+ 'ghainarabic': u'\u063A',
+ 'ghainfinalarabic': u'\uFECE',
+ 'ghaininitialarabic': u'\uFECF',
+ 'ghainmedialarabic': u'\uFED0',
+ 'ghemiddlehookcyrillic': u'\u0495',
+ 'ghestrokecyrillic': u'\u0493',
+ 'gheupturncyrillic': u'\u0491',
+ 'ghhadeva': u'\u095A',
+ 'ghhagurmukhi': u'\u0A5A',
+ 'ghook': u'\u0260',
+ 'ghzsquare': u'\u3393',
+ 'gihiragana': u'\u304E',
+ 'gikatakana': u'\u30AE',
+ 'gimarmenian': u'\u0563',
+ 'gimel': u'\u05D2',
+ 'gimeldagesh': u'\uFB32',
+ 'gimeldageshhebrew': u'\uFB32',
+ 'gimelhebrew': u'\u05D2',
+ 'gjecyrillic': u'\u0453',
+ 'glottalinvertedstroke': u'\u01BE',
+ 'glottalstop': u'\u0294',
+ 'glottalstopinverted': u'\u0296',
+ 'glottalstopmod': u'\u02C0',
+ 'glottalstopreversed': u'\u0295',
+ 'glottalstopreversedmod': u'\u02C1',
+ 'glottalstopreversedsuperior': u'\u02E4',
+ 'glottalstopstroke': u'\u02A1',
+ 'glottalstopstrokereversed': u'\u02A2',
+ 'gmacron': u'\u1E21',
+ 'gmonospace': u'\uFF47',
+ 'gohiragana': u'\u3054',
+ 'gokatakana': u'\u30B4',
+ 'gparen': u'\u24A2',
+ 'gpasquare': u'\u33AC',
+ 'gradient': u'\u2207',
+ 'grave': u'\u0060',
+ 'gravebelowcmb': u'\u0316',
+ 'gravecmb': u'\u0300',
+ 'gravecomb': u'\u0300',
+ 'gravedeva': u'\u0953',
+ 'gravelowmod': u'\u02CE',
+ 'gravemonospace': u'\uFF40',
+ 'gravetonecmb': u'\u0340',
+ 'greater': u'\u003E',
+ 'greaterequal': u'\u2265',
+ 'greaterequalorless': u'\u22DB',
+ 'greatermonospace': u'\uFF1E',
+ 'greaterorequivalent': u'\u2273',
+ 'greaterorless': u'\u2277',
+ 'greateroverequal': u'\u2267',
+ 'greatersmall': u'\uFE65',
+ 'gscript': u'\u0261',
+ 'gstroke': u'\u01E5',
+ 'guhiragana': u'\u3050',
+ 'guillemotleft': u'\u00AB',
+ 'guillemotright': u'\u00BB',
+ 'guilsinglleft': u'\u2039',
+ 'guilsinglright': u'\u203A',
+ 'gukatakana': u'\u30B0',
+ 'guramusquare': u'\u3318',
+ 'gysquare': u'\u33C9',
+ 'h': u'\u0068',
+ 'haabkhasiancyrillic': u'\u04A9',
+ 'haaltonearabic': u'\u06C1',
+ 'habengali': u'\u09B9',
+ 'hadescendercyrillic': u'\u04B3',
+ 'hadeva': u'\u0939',
+ 'hagujarati': u'\u0AB9',
+ 'hagurmukhi': u'\u0A39',
+ 'haharabic': u'\u062D',
+ 'hahfinalarabic': u'\uFEA2',
+ 'hahinitialarabic': u'\uFEA3',
+ 'hahiragana': u'\u306F',
+ 'hahmedialarabic': u'\uFEA4',
+ 'haitusquare': u'\u332A',
+ 'hakatakana': u'\u30CF',
+ 'hakatakanahalfwidth': u'\uFF8A',
+ 'halantgurmukhi': u'\u0A4D',
+ 'hamzaarabic': u'\u0621',
+ 'hamzadammaarabic': u'\u0621\u064F',
+ 'hamzadammatanarabic': u'\u0621\u064C',
+ 'hamzafathaarabic': u'\u0621\u064E',
+ 'hamzafathatanarabic': u'\u0621\u064B',
+ 'hamzalowarabic': u'\u0621',
+ 'hamzalowkasraarabic': u'\u0621\u0650',
+ 'hamzalowkasratanarabic': u'\u0621\u064D',
+ 'hamzasukunarabic': u'\u0621\u0652',
+ 'hangulfiller': u'\u3164',
+ 'hardsigncyrillic': u'\u044A',
+ 'harpoonleftbarbup': u'\u21BC',
+ 'harpoonrightbarbup': u'\u21C0',
+ 'hasquare': u'\u33CA',
+ 'hatafpatah': u'\u05B2',
+ 'hatafpatah16': u'\u05B2',
+ 'hatafpatah23': u'\u05B2',
+ 'hatafpatah2f': u'\u05B2',
+ 'hatafpatahhebrew': u'\u05B2',
+ 'hatafpatahnarrowhebrew': u'\u05B2',
+ 'hatafpatahquarterhebrew': u'\u05B2',
+ 'hatafpatahwidehebrew': u'\u05B2',
+ 'hatafqamats': u'\u05B3',
+ 'hatafqamats1b': u'\u05B3',
+ 'hatafqamats28': u'\u05B3',
+ 'hatafqamats34': u'\u05B3',
+ 'hatafqamatshebrew': u'\u05B3',
+ 'hatafqamatsnarrowhebrew': u'\u05B3',
+ 'hatafqamatsquarterhebrew': u'\u05B3',
+ 'hatafqamatswidehebrew': u'\u05B3',
+ 'hatafsegol': u'\u05B1',
+ 'hatafsegol17': u'\u05B1',
+ 'hatafsegol24': u'\u05B1',
+ 'hatafsegol30': u'\u05B1',
+ 'hatafsegolhebrew': u'\u05B1',
+ 'hatafsegolnarrowhebrew': u'\u05B1',
+ 'hatafsegolquarterhebrew': u'\u05B1',
+ 'hatafsegolwidehebrew': u'\u05B1',
+ 'hbar': u'\u0127',
+ 'hbopomofo': u'\u310F',
+ 'hbrevebelow': u'\u1E2B',
+ 'hcedilla': u'\u1E29',
+ 'hcircle': u'\u24D7',
+ 'hcircumflex': u'\u0125',
+ 'hdieresis': u'\u1E27',
+ 'hdotaccent': u'\u1E23',
+ 'hdotbelow': u'\u1E25',
+ 'he': u'\u05D4',
+ 'heart': u'\u2665',
+ 'heartsuitblack': u'\u2665',
+ 'heartsuitwhite': u'\u2661',
+ 'hedagesh': u'\uFB34',
+ 'hedageshhebrew': u'\uFB34',
+ 'hehaltonearabic': u'\u06C1',
+ 'heharabic': u'\u0647',
+ 'hehebrew': u'\u05D4',
+ 'hehfinalaltonearabic': u'\uFBA7',
+ 'hehfinalalttwoarabic': u'\uFEEA',
+ 'hehfinalarabic': u'\uFEEA',
+ 'hehhamzaabovefinalarabic': u'\uFBA5',
+ 'hehhamzaaboveisolatedarabic': u'\uFBA4',
+ 'hehinitialaltonearabic': u'\uFBA8',
+ 'hehinitialarabic': u'\uFEEB',
+ 'hehiragana': u'\u3078',
+ 'hehmedialaltonearabic': u'\uFBA9',
+ 'hehmedialarabic': u'\uFEEC',
+ 'heiseierasquare': u'\u337B',
+ 'hekatakana': u'\u30D8',
+ 'hekatakanahalfwidth': u'\uFF8D',
+ 'hekutaarusquare': u'\u3336',
+ 'henghook': u'\u0267',
+ 'herutusquare': u'\u3339',
+ 'het': u'\u05D7',
+ 'hethebrew': u'\u05D7',
+ 'hhook': u'\u0266',
+ 'hhooksuperior': u'\u02B1',
+ 'hieuhacirclekorean': u'\u327B',
+ 'hieuhaparenkorean': u'\u321B',
+ 'hieuhcirclekorean': u'\u326D',
+ 'hieuhkorean': u'\u314E',
+ 'hieuhparenkorean': u'\u320D',
+ 'hihiragana': u'\u3072',
+ 'hikatakana': u'\u30D2',
+ 'hikatakanahalfwidth': u'\uFF8B',
+ 'hiriq': u'\u05B4',
+ 'hiriq14': u'\u05B4',
+ 'hiriq21': u'\u05B4',
+ 'hiriq2d': u'\u05B4',
+ 'hiriqhebrew': u'\u05B4',
+ 'hiriqnarrowhebrew': u'\u05B4',
+ 'hiriqquarterhebrew': u'\u05B4',
+ 'hiriqwidehebrew': u'\u05B4',
+ 'hlinebelow': u'\u1E96',
+ 'hmonospace': u'\uFF48',
+ 'hoarmenian': u'\u0570',
+ 'hohipthai': u'\u0E2B',
+ 'hohiragana': u'\u307B',
+ 'hokatakana': u'\u30DB',
+ 'hokatakanahalfwidth': u'\uFF8E',
+ 'holam': u'\u05B9',
+ 'holam19': u'\u05B9',
+ 'holam26': u'\u05B9',
+ 'holam32': u'\u05B9',
+ 'holamhebrew': u'\u05B9',
+ 'holamnarrowhebrew': u'\u05B9',
+ 'holamquarterhebrew': u'\u05B9',
+ 'holamwidehebrew': u'\u05B9',
+ 'honokhukthai': u'\u0E2E',
+ 'hookabovecomb': u'\u0309',
+ 'hookcmb': u'\u0309',
+ 'hookpalatalizedbelowcmb': u'\u0321',
+ 'hookretroflexbelowcmb': u'\u0322',
+ 'hoonsquare': u'\u3342',
+ 'horicoptic': u'\u03E9',
+ 'horizontalbar': u'\u2015',
+ 'horncmb': u'\u031B',
+ 'hotsprings': u'\u2668',
+ 'house': u'\u2302',
+ 'hparen': u'\u24A3',
+ 'hsuperior': u'\u02B0',
+ 'hturned': u'\u0265',
+ 'huhiragana': u'\u3075',
+ 'huiitosquare': u'\u3333',
+ 'hukatakana': u'\u30D5',
+ 'hukatakanahalfwidth': u'\uFF8C',
+ 'hungarumlaut': u'\u02DD',
+ 'hungarumlautcmb': u'\u030B',
+ 'hv': u'\u0195',
+ 'hyphen': u'\u002D',
+ 'hypheninferior': u'\uF6E5',
+ 'hyphenmonospace': u'\uFF0D',
+ 'hyphensmall': u'\uFE63',
+ 'hyphensuperior': u'\uF6E6',
+ 'hyphentwo': u'\u2010',
+ 'i': u'\u0069',
+ 'iacute': u'\u00ED',
+ 'iacyrillic': u'\u044F',
+ 'ibengali': u'\u0987',
+ 'ibopomofo': u'\u3127',
+ 'ibreve': u'\u012D',
+ 'icaron': u'\u01D0',
+ 'icircle': u'\u24D8',
+ 'icircumflex': u'\u00EE',
+ 'icyrillic': u'\u0456',
+ 'idblgrave': u'\u0209',
+ 'ideographearthcircle': u'\u328F',
+ 'ideographfirecircle': u'\u328B',
+ 'ideographicallianceparen': u'\u323F',
+ 'ideographiccallparen': u'\u323A',
+ 'ideographiccentrecircle': u'\u32A5',
+ 'ideographicclose': u'\u3006',
+ 'ideographiccomma': u'\u3001',
+ 'ideographiccommaleft': u'\uFF64',
+ 'ideographiccongratulationparen': u'\u3237',
+ 'ideographiccorrectcircle': u'\u32A3',
+ 'ideographicearthparen': u'\u322F',
+ 'ideographicenterpriseparen': u'\u323D',
+ 'ideographicexcellentcircle': u'\u329D',
+ 'ideographicfestivalparen': u'\u3240',
+ 'ideographicfinancialcircle': u'\u3296',
+ 'ideographicfinancialparen': u'\u3236',
+ 'ideographicfireparen': u'\u322B',
+ 'ideographichaveparen': u'\u3232',
+ 'ideographichighcircle': u'\u32A4',
+ 'ideographiciterationmark': u'\u3005',
+ 'ideographiclaborcircle': u'\u3298',
+ 'ideographiclaborparen': u'\u3238',
+ 'ideographicleftcircle': u'\u32A7',
+ 'ideographiclowcircle': u'\u32A6',
+ 'ideographicmedicinecircle': u'\u32A9',
+ 'ideographicmetalparen': u'\u322E',
+ 'ideographicmoonparen': u'\u322A',
+ 'ideographicnameparen': u'\u3234',
+ 'ideographicperiod': u'\u3002',
+ 'ideographicprintcircle': u'\u329E',
+ 'ideographicreachparen': u'\u3243',
+ 'ideographicrepresentparen': u'\u3239',
+ 'ideographicresourceparen': u'\u323E',
+ 'ideographicrightcircle': u'\u32A8',
+ 'ideographicsecretcircle': u'\u3299',
+ 'ideographicselfparen': u'\u3242',
+ 'ideographicsocietyparen': u'\u3233',
+ 'ideographicspace': u'\u3000',
+ 'ideographicspecialparen': u'\u3235',
+ 'ideographicstockparen': u'\u3231',
+ 'ideographicstudyparen': u'\u323B',
+ 'ideographicsunparen': u'\u3230',
+ 'ideographicsuperviseparen': u'\u323C',
+ 'ideographicwaterparen': u'\u322C',
+ 'ideographicwoodparen': u'\u322D',
+ 'ideographiczero': u'\u3007',
+ 'ideographmetalcircle': u'\u328E',
+ 'ideographmooncircle': u'\u328A',
+ 'ideographnamecircle': u'\u3294',
+ 'ideographsuncircle': u'\u3290',
+ 'ideographwatercircle': u'\u328C',
+ 'ideographwoodcircle': u'\u328D',
+ 'ideva': u'\u0907',
+ 'idieresis': u'\u00EF',
+ 'idieresisacute': u'\u1E2F',
+ 'idieresiscyrillic': u'\u04E5',
+ 'idotbelow': u'\u1ECB',
+ 'iebrevecyrillic': u'\u04D7',
+ 'iecyrillic': u'\u0435',
+ 'ieungacirclekorean': u'\u3275',
+ 'ieungaparenkorean': u'\u3215',
+ 'ieungcirclekorean': u'\u3267',
+ 'ieungkorean': u'\u3147',
+ 'ieungparenkorean': u'\u3207',
+ 'igrave': u'\u00EC',
+ 'igujarati': u'\u0A87',
+ 'igurmukhi': u'\u0A07',
+ 'ihiragana': u'\u3044',
+ 'ihookabove': u'\u1EC9',
+ 'iibengali': u'\u0988',
+ 'iicyrillic': u'\u0438',
+ 'iideva': u'\u0908',
+ 'iigujarati': u'\u0A88',
+ 'iigurmukhi': u'\u0A08',
+ 'iimatragurmukhi': u'\u0A40',
+ 'iinvertedbreve': u'\u020B',
+ 'iishortcyrillic': u'\u0439',
+ 'iivowelsignbengali': u'\u09C0',
+ 'iivowelsigndeva': u'\u0940',
+ 'iivowelsigngujarati': u'\u0AC0',
+ 'ij': u'\u0133',
+ 'ikatakana': u'\u30A4',
+ 'ikatakanahalfwidth': u'\uFF72',
+ 'ikorean': u'\u3163',
+ 'ilde': u'\u02DC',
+ 'iluyhebrew': u'\u05AC',
+ 'imacron': u'\u012B',
+ 'imacroncyrillic': u'\u04E3',
+ 'imageorapproximatelyequal': u'\u2253',
+ 'imatragurmukhi': u'\u0A3F',
+ 'imonospace': u'\uFF49',
+ 'increment': u'\u2206',
+ 'infinity': u'\u221E',
+ 'iniarmenian': u'\u056B',
+ 'integral': u'\u222B',
+ 'integralbottom': u'\u2321',
+ 'integralbt': u'\u2321',
+ 'integralex': u'\uF8F5',
+ 'integraltop': u'\u2320',
+ 'integraltp': u'\u2320',
+ 'intersection': u'\u2229',
+ 'intisquare': u'\u3305',
+ 'invbullet': u'\u25D8',
+ 'invcircle': u'\u25D9',
+ 'invsmileface': u'\u263B',
+ 'iocyrillic': u'\u0451',
+ 'iogonek': u'\u012F',
+ 'iota': u'\u03B9',
+ 'iotadieresis': u'\u03CA',
+ 'iotadieresistonos': u'\u0390',
+ 'iotalatin': u'\u0269',
+ 'iotatonos': u'\u03AF',
+ 'iparen': u'\u24A4',
+ 'irigurmukhi': u'\u0A72',
+ 'ismallhiragana': u'\u3043',
+ 'ismallkatakana': u'\u30A3',
+ 'ismallkatakanahalfwidth': u'\uFF68',
+ 'issharbengali': u'\u09FA',
+ 'istroke': u'\u0268',
+ 'isuperior': u'\uF6ED',
+ 'iterationhiragana': u'\u309D',
+ 'iterationkatakana': u'\u30FD',
+ 'itilde': u'\u0129',
+ 'itildebelow': u'\u1E2D',
+ 'iubopomofo': u'\u3129',
+ 'iucyrillic': u'\u044E',
+ 'ivowelsignbengali': u'\u09BF',
+ 'ivowelsigndeva': u'\u093F',
+ 'ivowelsigngujarati': u'\u0ABF',
+ 'izhitsacyrillic': u'\u0475',
+ 'izhitsadblgravecyrillic': u'\u0477',
+ 'j': u'\u006A',
+ 'jaarmenian': u'\u0571',
+ 'jabengali': u'\u099C',
+ 'jadeva': u'\u091C',
+ 'jagujarati': u'\u0A9C',
+ 'jagurmukhi': u'\u0A1C',
+ 'jbopomofo': u'\u3110',
+ 'jcaron': u'\u01F0',
+ 'jcircle': u'\u24D9',
+ 'jcircumflex': u'\u0135',
+ 'jcrossedtail': u'\u029D',
+ 'jdotlessstroke': u'\u025F',
+ 'jecyrillic': u'\u0458',
+ 'jeemarabic': u'\u062C',
+ 'jeemfinalarabic': u'\uFE9E',
+ 'jeeminitialarabic': u'\uFE9F',
+ 'jeemmedialarabic': u'\uFEA0',
+ 'jeharabic': u'\u0698',
+ 'jehfinalarabic': u'\uFB8B',
+ 'jhabengali': u'\u099D',
+ 'jhadeva': u'\u091D',
+ 'jhagujarati': u'\u0A9D',
+ 'jhagurmukhi': u'\u0A1D',
+ 'jheharmenian': u'\u057B',
+ 'jis': u'\u3004',
+ 'jmonospace': u'\uFF4A',
+ 'jparen': u'\u24A5',
+ 'jsuperior': u'\u02B2',
+ 'k': u'\u006B',
+ 'kabashkircyrillic': u'\u04A1',
+ 'kabengali': u'\u0995',
+ 'kacute': u'\u1E31',
+ 'kacyrillic': u'\u043A',
+ 'kadescendercyrillic': u'\u049B',
+ 'kadeva': u'\u0915',
+ 'kaf': u'\u05DB',
+ 'kafarabic': u'\u0643',
+ 'kafdagesh': u'\uFB3B',
+ 'kafdageshhebrew': u'\uFB3B',
+ 'kaffinalarabic': u'\uFEDA',
+ 'kafhebrew': u'\u05DB',
+ 'kafinitialarabic': u'\uFEDB',
+ 'kafmedialarabic': u'\uFEDC',
+ 'kafrafehebrew': u'\uFB4D',
+ 'kagujarati': u'\u0A95',
+ 'kagurmukhi': u'\u0A15',
+ 'kahiragana': u'\u304B',
+ 'kahookcyrillic': u'\u04C4',
+ 'kakatakana': u'\u30AB',
+ 'kakatakanahalfwidth': u'\uFF76',
+ 'kappa': u'\u03BA',
+ 'kappasymbolgreek': u'\u03F0',
+ 'kapyeounmieumkorean': u'\u3171',
+ 'kapyeounphieuphkorean': u'\u3184',
+ 'kapyeounpieupkorean': u'\u3178',
+ 'kapyeounssangpieupkorean': u'\u3179',
+ 'karoriisquare': u'\u330D',
+ 'kashidaautoarabic': u'\u0640',
+ 'kashidaautonosidebearingarabic': u'\u0640',
+ 'kasmallkatakana': u'\u30F5',
+ 'kasquare': u'\u3384',
+ 'kasraarabic': u'\u0650',
+ 'kasratanarabic': u'\u064D',
+ 'kastrokecyrillic': u'\u049F',
+ 'katahiraprolongmarkhalfwidth': u'\uFF70',
+ 'kaverticalstrokecyrillic': u'\u049D',
+ 'kbopomofo': u'\u310E',
+ 'kcalsquare': u'\u3389',
+ 'kcaron': u'\u01E9',
+ 'kcedilla': u'\u0137',
+ 'kcircle': u'\u24DA',
+ 'kcommaaccent': u'\u0137',
+ 'kdotbelow': u'\u1E33',
+ 'keharmenian': u'\u0584',
+ 'kehiragana': u'\u3051',
+ 'kekatakana': u'\u30B1',
+ 'kekatakanahalfwidth': u'\uFF79',
+ 'kenarmenian': u'\u056F',
+ 'kesmallkatakana': u'\u30F6',
+ 'kgreenlandic': u'\u0138',
+ 'khabengali': u'\u0996',
+ 'khacyrillic': u'\u0445',
+ 'khadeva': u'\u0916',
+ 'khagujarati': u'\u0A96',
+ 'khagurmukhi': u'\u0A16',
+ 'khaharabic': u'\u062E',
+ 'khahfinalarabic': u'\uFEA6',
+ 'khahinitialarabic': u'\uFEA7',
+ 'khahmedialarabic': u'\uFEA8',
+ 'kheicoptic': u'\u03E7',
+ 'khhadeva': u'\u0959',
+ 'khhagurmukhi': u'\u0A59',
+ 'khieukhacirclekorean': u'\u3278',
+ 'khieukhaparenkorean': u'\u3218',
+ 'khieukhcirclekorean': u'\u326A',
+ 'khieukhkorean': u'\u314B',
+ 'khieukhparenkorean': u'\u320A',
+ 'khokhaithai': u'\u0E02',
+ 'khokhonthai': u'\u0E05',
+ 'khokhuatthai': u'\u0E03',
+ 'khokhwaithai': u'\u0E04',
+ 'khomutthai': u'\u0E5B',
+ 'khook': u'\u0199',
+ 'khorakhangthai': u'\u0E06',
+ 'khzsquare': u'\u3391',
+ 'kihiragana': u'\u304D',
+ 'kikatakana': u'\u30AD',
+ 'kikatakanahalfwidth': u'\uFF77',
+ 'kiroguramusquare': u'\u3315',
+ 'kiromeetorusquare': u'\u3316',
+ 'kirosquare': u'\u3314',
+ 'kiyeokacirclekorean': u'\u326E',
+ 'kiyeokaparenkorean': u'\u320E',
+ 'kiyeokcirclekorean': u'\u3260',
+ 'kiyeokkorean': u'\u3131',
+ 'kiyeokparenkorean': u'\u3200',
+ 'kiyeoksioskorean': u'\u3133',
+ 'kjecyrillic': u'\u045C',
+ 'klinebelow': u'\u1E35',
+ 'klsquare': u'\u3398',
+ 'kmcubedsquare': u'\u33A6',
+ 'kmonospace': u'\uFF4B',
+ 'kmsquaredsquare': u'\u33A2',
+ 'kohiragana': u'\u3053',
+ 'kohmsquare': u'\u33C0',
+ 'kokaithai': u'\u0E01',
+ 'kokatakana': u'\u30B3',
+ 'kokatakanahalfwidth': u'\uFF7A',
+ 'kooposquare': u'\u331E',
+ 'koppacyrillic': u'\u0481',
+ 'koreanstandardsymbol': u'\u327F',
+ 'koroniscmb': u'\u0343',
+ 'kparen': u'\u24A6',
+ 'kpasquare': u'\u33AA',
+ 'ksicyrillic': u'\u046F',
+ 'ktsquare': u'\u33CF',
+ 'kturned': u'\u029E',
+ 'kuhiragana': u'\u304F',
+ 'kukatakana': u'\u30AF',
+ 'kukatakanahalfwidth': u'\uFF78',
+ 'kvsquare': u'\u33B8',
+ 'kwsquare': u'\u33BE',
+ 'l': u'\u006C',
+ 'labengali': u'\u09B2',
+ 'lacute': u'\u013A',
+ 'ladeva': u'\u0932',
+ 'lagujarati': u'\u0AB2',
+ 'lagurmukhi': u'\u0A32',
+ 'lakkhangyaothai': u'\u0E45',
+ 'lamaleffinalarabic': u'\uFEFC',
+ 'lamalefhamzaabovefinalarabic': u'\uFEF8',
+ 'lamalefhamzaaboveisolatedarabic': u'\uFEF7',
+ 'lamalefhamzabelowfinalarabic': u'\uFEFA',
+ 'lamalefhamzabelowisolatedarabic': u'\uFEF9',
+ 'lamalefisolatedarabic': u'\uFEFB',
+ 'lamalefmaddaabovefinalarabic': u'\uFEF6',
+ 'lamalefmaddaaboveisolatedarabic': u'\uFEF5',
+ 'lamarabic': u'\u0644',
+ 'lambda': u'\u03BB',
+ 'lambdastroke': u'\u019B',
+ 'lamed': u'\u05DC',
+ 'lameddagesh': u'\uFB3C',
+ 'lameddageshhebrew': u'\uFB3C',
+ 'lamedhebrew': u'\u05DC',
+ 'lamedholam': u'\u05DC\u05B9',
+ 'lamedholamdagesh': u'\u05DC\u05B9\u05BC',
+ 'lamedholamdageshhebrew': u'\u05DC\u05B9\u05BC',
+ 'lamedholamhebrew': u'\u05DC\u05B9',
+ 'lamfinalarabic': u'\uFEDE',
+ 'lamhahinitialarabic': u'\uFCCA',
+ 'laminitialarabic': u'\uFEDF',
+ 'lamjeeminitialarabic': u'\uFCC9',
+ 'lamkhahinitialarabic': u'\uFCCB',
+ 'lamlamhehisolatedarabic': u'\uFDF2',
+ 'lammedialarabic': u'\uFEE0',
+ 'lammeemhahinitialarabic': u'\uFD88',
+ 'lammeeminitialarabic': u'\uFCCC',
+ 'lammeemjeeminitialarabic': u'\uFEDF\uFEE4\uFEA0',
+ 'lammeemkhahinitialarabic': u'\uFEDF\uFEE4\uFEA8',
+ 'largecircle': u'\u25EF',
+ 'lbar': u'\u019A',
+ 'lbelt': u'\u026C',
+ 'lbopomofo': u'\u310C',
+ 'lcaron': u'\u013E',
+ 'lcedilla': u'\u013C',
+ 'lcircle': u'\u24DB',
+ 'lcircumflexbelow': u'\u1E3D',
+ 'lcommaaccent': u'\u013C',
+ 'ldot': u'\u0140',
+ 'ldotaccent': u'\u0140',
+ 'ldotbelow': u'\u1E37',
+ 'ldotbelowmacron': u'\u1E39',
+ 'leftangleabovecmb': u'\u031A',
+ 'lefttackbelowcmb': u'\u0318',
+ 'less': u'\u003C',
+ 'lessequal': u'\u2264',
+ 'lessequalorgreater': u'\u22DA',
+ 'lessmonospace': u'\uFF1C',
+ 'lessorequivalent': u'\u2272',
+ 'lessorgreater': u'\u2276',
+ 'lessoverequal': u'\u2266',
+ 'lesssmall': u'\uFE64',
+ 'lezh': u'\u026E',
+ 'lfblock': u'\u258C',
+ 'lhookretroflex': u'\u026D',
+ 'lira': u'\u20A4',
+ 'liwnarmenian': u'\u056C',
+ 'lj': u'\u01C9',
+ 'ljecyrillic': u'\u0459',
+ 'll': u'\uF6C0',
+ 'lladeva': u'\u0933',
+ 'llagujarati': u'\u0AB3',
+ 'llinebelow': u'\u1E3B',
+ 'llladeva': u'\u0934',
+ 'llvocalicbengali': u'\u09E1',
+ 'llvocalicdeva': u'\u0961',
+ 'llvocalicvowelsignbengali': u'\u09E3',
+ 'llvocalicvowelsigndeva': u'\u0963',
+ 'lmiddletilde': u'\u026B',
+ 'lmonospace': u'\uFF4C',
+ 'lmsquare': u'\u33D0',
+ 'lochulathai': u'\u0E2C',
+ 'logicaland': u'\u2227',
+ 'logicalnot': u'\u00AC',
+ 'logicalnotreversed': u'\u2310',
+ 'logicalor': u'\u2228',
+ 'lolingthai': u'\u0E25',
+ 'longs': u'\u017F',
+ 'lowlinecenterline': u'\uFE4E',
+ 'lowlinecmb': u'\u0332',
+ 'lowlinedashed': u'\uFE4D',
+ 'lozenge': u'\u25CA',
+ 'lparen': u'\u24A7',
+ 'lslash': u'\u0142',
+ 'lsquare': u'\u2113',
+ 'lsuperior': u'\uF6EE',
+ 'ltshade': u'\u2591',
+ 'luthai': u'\u0E26',
+ 'lvocalicbengali': u'\u098C',
+ 'lvocalicdeva': u'\u090C',
+ 'lvocalicvowelsignbengali': u'\u09E2',
+ 'lvocalicvowelsigndeva': u'\u0962',
+ 'lxsquare': u'\u33D3',
+ 'm': u'\u006D',
+ 'mabengali': u'\u09AE',
+ 'macron': u'\u00AF',
+ 'macronbelowcmb': u'\u0331',
+ 'macroncmb': u'\u0304',
+ 'macronlowmod': u'\u02CD',
+ 'macronmonospace': u'\uFFE3',
+ 'macute': u'\u1E3F',
+ 'madeva': u'\u092E',
+ 'magujarati': u'\u0AAE',
+ 'magurmukhi': u'\u0A2E',
+ 'mahapakhhebrew': u'\u05A4',
+ 'mahapakhlefthebrew': u'\u05A4',
+ 'mahiragana': u'\u307E',
+ 'maichattawalowleftthai': u'\uF895',
+ 'maichattawalowrightthai': u'\uF894',
+ 'maichattawathai': u'\u0E4B',
+ 'maichattawaupperleftthai': u'\uF893',
+ 'maieklowleftthai': u'\uF88C',
+ 'maieklowrightthai': u'\uF88B',
+ 'maiekthai': u'\u0E48',
+ 'maiekupperleftthai': u'\uF88A',
+ 'maihanakatleftthai': u'\uF884',
+ 'maihanakatthai': u'\u0E31',
+ 'maitaikhuleftthai': u'\uF889',
+ 'maitaikhuthai': u'\u0E47',
+ 'maitholowleftthai': u'\uF88F',
+ 'maitholowrightthai': u'\uF88E',
+ 'maithothai': u'\u0E49',
+ 'maithoupperleftthai': u'\uF88D',
+ 'maitrilowleftthai': u'\uF892',
+ 'maitrilowrightthai': u'\uF891',
+ 'maitrithai': u'\u0E4A',
+ 'maitriupperleftthai': u'\uF890',
+ 'maiyamokthai': u'\u0E46',
+ 'makatakana': u'\u30DE',
+ 'makatakanahalfwidth': u'\uFF8F',
+ 'male': u'\u2642',
+ 'mansyonsquare': u'\u3347',
+ 'maqafhebrew': u'\u05BE',
+ 'mars': u'\u2642',
+ 'masoracirclehebrew': u'\u05AF',
+ 'masquare': u'\u3383',
+ 'mbopomofo': u'\u3107',
+ 'mbsquare': u'\u33D4',
+ 'mcircle': u'\u24DC',
+ 'mcubedsquare': u'\u33A5',
+ 'mdotaccent': u'\u1E41',
+ 'mdotbelow': u'\u1E43',
+ 'meemarabic': u'\u0645',
+ 'meemfinalarabic': u'\uFEE2',
+ 'meeminitialarabic': u'\uFEE3',
+ 'meemmedialarabic': u'\uFEE4',
+ 'meemmeeminitialarabic': u'\uFCD1',
+ 'meemmeemisolatedarabic': u'\uFC48',
+ 'meetorusquare': u'\u334D',
+ 'mehiragana': u'\u3081',
+ 'meizierasquare': u'\u337E',
+ 'mekatakana': u'\u30E1',
+ 'mekatakanahalfwidth': u'\uFF92',
+ 'mem': u'\u05DE',
+ 'memdagesh': u'\uFB3E',
+ 'memdageshhebrew': u'\uFB3E',
+ 'memhebrew': u'\u05DE',
+ 'menarmenian': u'\u0574',
+ 'merkhahebrew': u'\u05A5',
+ 'merkhakefulahebrew': u'\u05A6',
+ 'merkhakefulalefthebrew': u'\u05A6',
+ 'merkhalefthebrew': u'\u05A5',
+ 'mhook': u'\u0271',
+ 'mhzsquare': u'\u3392',
+ 'middledotkatakanahalfwidth': u'\uFF65',
+ 'middot': u'\u00B7',
+ 'mieumacirclekorean': u'\u3272',
+ 'mieumaparenkorean': u'\u3212',
+ 'mieumcirclekorean': u'\u3264',
+ 'mieumkorean': u'\u3141',
+ 'mieumpansioskorean': u'\u3170',
+ 'mieumparenkorean': u'\u3204',
+ 'mieumpieupkorean': u'\u316E',
+ 'mieumsioskorean': u'\u316F',
+ 'mihiragana': u'\u307F',
+ 'mikatakana': u'\u30DF',
+ 'mikatakanahalfwidth': u'\uFF90',
+ 'minus': u'\u2212',
+ 'minusbelowcmb': u'\u0320',
+ 'minuscircle': u'\u2296',
+ 'minusmod': u'\u02D7',
+ 'minusplus': u'\u2213',
+ 'minute': u'\u2032',
+ 'miribaarusquare': u'\u334A',
+ 'mirisquare': u'\u3349',
+ 'mlonglegturned': u'\u0270',
+ 'mlsquare': u'\u3396',
+ 'mmcubedsquare': u'\u33A3',
+ 'mmonospace': u'\uFF4D',
+ 'mmsquaredsquare': u'\u339F',
+ 'mohiragana': u'\u3082',
+ 'mohmsquare': u'\u33C1',
+ 'mokatakana': u'\u30E2',
+ 'mokatakanahalfwidth': u'\uFF93',
+ 'molsquare': u'\u33D6',
+ 'momathai': u'\u0E21',
+ 'moverssquare': u'\u33A7',
+ 'moverssquaredsquare': u'\u33A8',
+ 'mparen': u'\u24A8',
+ 'mpasquare': u'\u33AB',
+ 'mssquare': u'\u33B3',
+ 'msuperior': u'\uF6EF',
+ 'mturned': u'\u026F',
+ 'mu': u'\u00B5',
+ 'mu1': u'\u00B5',
+ 'muasquare': u'\u3382',
+ 'muchgreater': u'\u226B',
+ 'muchless': u'\u226A',
+ 'mufsquare': u'\u338C',
+ 'mugreek': u'\u03BC',
+ 'mugsquare': u'\u338D',
+ 'muhiragana': u'\u3080',
+ 'mukatakana': u'\u30E0',
+ 'mukatakanahalfwidth': u'\uFF91',
+ 'mulsquare': u'\u3395',
+ 'multiply': u'\u00D7',
+ 'mumsquare': u'\u339B',
+ 'munahhebrew': u'\u05A3',
+ 'munahlefthebrew': u'\u05A3',
+ 'musicalnote': u'\u266A',
+ 'musicalnotedbl': u'\u266B',
+ 'musicflatsign': u'\u266D',
+ 'musicsharpsign': u'\u266F',
+ 'mussquare': u'\u33B2',
+ 'muvsquare': u'\u33B6',
+ 'muwsquare': u'\u33BC',
+ 'mvmegasquare': u'\u33B9',
+ 'mvsquare': u'\u33B7',
+ 'mwmegasquare': u'\u33BF',
+ 'mwsquare': u'\u33BD',
+ 'n': u'\u006E',
+ 'nabengali': u'\u09A8',
+ 'nabla': u'\u2207',
+ 'nacute': u'\u0144',
+ 'nadeva': u'\u0928',
+ 'nagujarati': u'\u0AA8',
+ 'nagurmukhi': u'\u0A28',
+ 'nahiragana': u'\u306A',
+ 'nakatakana': u'\u30CA',
+ 'nakatakanahalfwidth': u'\uFF85',
+ 'napostrophe': u'\u0149',
+ 'nasquare': u'\u3381',
+ 'nbopomofo': u'\u310B',
+ 'nbspace': u'\u00A0',
+ 'ncaron': u'\u0148',
+ 'ncedilla': u'\u0146',
+ 'ncircle': u'\u24DD',
+ 'ncircumflexbelow': u'\u1E4B',
+ 'ncommaaccent': u'\u0146',
+ 'ndotaccent': u'\u1E45',
+ 'ndotbelow': u'\u1E47',
+ 'nehiragana': u'\u306D',
+ 'nekatakana': u'\u30CD',
+ 'nekatakanahalfwidth': u'\uFF88',
+ 'newsheqelsign': u'\u20AA',
+ 'nfsquare': u'\u338B',
+ 'ngabengali': u'\u0999',
+ 'ngadeva': u'\u0919',
+ 'ngagujarati': u'\u0A99',
+ 'ngagurmukhi': u'\u0A19',
+ 'ngonguthai': u'\u0E07',
+ 'nhiragana': u'\u3093',
+ 'nhookleft': u'\u0272',
+ 'nhookretroflex': u'\u0273',
+ 'nieunacirclekorean': u'\u326F',
+ 'nieunaparenkorean': u'\u320F',
+ 'nieuncieuckorean': u'\u3135',
+ 'nieuncirclekorean': u'\u3261',
+ 'nieunhieuhkorean': u'\u3136',
+ 'nieunkorean': u'\u3134',
+ 'nieunpansioskorean': u'\u3168',
+ 'nieunparenkorean': u'\u3201',
+ 'nieunsioskorean': u'\u3167',
+ 'nieuntikeutkorean': u'\u3166',
+ 'nihiragana': u'\u306B',
+ 'nikatakana': u'\u30CB',
+ 'nikatakanahalfwidth': u'\uFF86',
+ 'nikhahitleftthai': u'\uF899',
+ 'nikhahitthai': u'\u0E4D',
+ 'nine': u'\u0039',
+ 'ninearabic': u'\u0669',
+ 'ninebengali': u'\u09EF',
+ 'ninecircle': u'\u2468',
+ 'ninecircleinversesansserif': u'\u2792',
+ 'ninedeva': u'\u096F',
+ 'ninegujarati': u'\u0AEF',
+ 'ninegurmukhi': u'\u0A6F',
+ 'ninehackarabic': u'\u0669',
+ 'ninehangzhou': u'\u3029',
+ 'nineideographicparen': u'\u3228',
+ 'nineinferior': u'\u2089',
+ 'ninemonospace': u'\uFF19',
+ 'nineoldstyle': u'\uF739',
+ 'nineparen': u'\u247C',
+ 'nineperiod': u'\u2490',
+ 'ninepersian': u'\u06F9',
+ 'nineroman': u'\u2178',
+ 'ninesuperior': u'\u2079',
+ 'nineteencircle': u'\u2472',
+ 'nineteenparen': u'\u2486',
+ 'nineteenperiod': u'\u249A',
+ 'ninethai': u'\u0E59',
+ 'nj': u'\u01CC',
+ 'njecyrillic': u'\u045A',
+ 'nkatakana': u'\u30F3',
+ 'nkatakanahalfwidth': u'\uFF9D',
+ 'nlegrightlong': u'\u019E',
+ 'nlinebelow': u'\u1E49',
+ 'nmonospace': u'\uFF4E',
+ 'nmsquare': u'\u339A',
+ 'nnabengali': u'\u09A3',
+ 'nnadeva': u'\u0923',
+ 'nnagujarati': u'\u0AA3',
+ 'nnagurmukhi': u'\u0A23',
+ 'nnnadeva': u'\u0929',
+ 'nohiragana': u'\u306E',
+ 'nokatakana': u'\u30CE',
+ 'nokatakanahalfwidth': u'\uFF89',
+ 'nonbreakingspace': u'\u00A0',
+ 'nonenthai': u'\u0E13',
+ 'nonuthai': u'\u0E19',
+ 'noonarabic': u'\u0646',
+ 'noonfinalarabic': u'\uFEE6',
+ 'noonghunnaarabic': u'\u06BA',
+ 'noonghunnafinalarabic': u'\uFB9F',
+ 'noonhehinitialarabic': u'\uFEE7\uFEEC',
+ 'nooninitialarabic': u'\uFEE7',
+ 'noonjeeminitialarabic': u'\uFCD2',
+ 'noonjeemisolatedarabic': u'\uFC4B',
+ 'noonmedialarabic': u'\uFEE8',
+ 'noonmeeminitialarabic': u'\uFCD5',
+ 'noonmeemisolatedarabic': u'\uFC4E',
+ 'noonnoonfinalarabic': u'\uFC8D',
+ 'notcontains': u'\u220C',
+ 'notelement': u'\u2209',
+ 'notelementof': u'\u2209',
+ 'notequal': u'\u2260',
+ 'notgreater': u'\u226F',
+ 'notgreaternorequal': u'\u2271',
+ 'notgreaternorless': u'\u2279',
+ 'notidentical': u'\u2262',
+ 'notless': u'\u226E',
+ 'notlessnorequal': u'\u2270',
+ 'notparallel': u'\u2226',
+ 'notprecedes': u'\u2280',
+ 'notsubset': u'\u2284',
+ 'notsucceeds': u'\u2281',
+ 'notsuperset': u'\u2285',
+ 'nowarmenian': u'\u0576',
+ 'nparen': u'\u24A9',
+ 'nssquare': u'\u33B1',
+ 'nsuperior': u'\u207F',
+ 'ntilde': u'\u00F1',
+ 'nu': u'\u03BD',
+ 'nuhiragana': u'\u306C',
+ 'nukatakana': u'\u30CC',
+ 'nukatakanahalfwidth': u'\uFF87',
+ 'nuktabengali': u'\u09BC',
+ 'nuktadeva': u'\u093C',
+ 'nuktagujarati': u'\u0ABC',
+ 'nuktagurmukhi': u'\u0A3C',
+ 'numbersign': u'\u0023',
+ 'numbersignmonospace': u'\uFF03',
+ 'numbersignsmall': u'\uFE5F',
+ 'numeralsigngreek': u'\u0374',
+ 'numeralsignlowergreek': u'\u0375',
+ 'numero': u'\u2116',
+ 'nun': u'\u05E0',
+ 'nundagesh': u'\uFB40',
+ 'nundageshhebrew': u'\uFB40',
+ 'nunhebrew': u'\u05E0',
+ 'nvsquare': u'\u33B5',
+ 'nwsquare': u'\u33BB',
+ 'nyabengali': u'\u099E',
+ 'nyadeva': u'\u091E',
+ 'nyagujarati': u'\u0A9E',
+ 'nyagurmukhi': u'\u0A1E',
+ 'o': u'\u006F',
+ 'oacute': u'\u00F3',
+ 'oangthai': u'\u0E2D',
+ 'obarred': u'\u0275',
+ 'obarredcyrillic': u'\u04E9',
+ 'obarreddieresiscyrillic': u'\u04EB',
+ 'obengali': u'\u0993',
+ 'obopomofo': u'\u311B',
+ 'obreve': u'\u014F',
+ 'ocandradeva': u'\u0911',
+ 'ocandragujarati': u'\u0A91',
+ 'ocandravowelsigndeva': u'\u0949',
+ 'ocandravowelsigngujarati': u'\u0AC9',
+ 'ocaron': u'\u01D2',
+ 'ocircle': u'\u24DE',
+ 'ocircumflex': u'\u00F4',
+ 'ocircumflexacute': u'\u1ED1',
+ 'ocircumflexdotbelow': u'\u1ED9',
+ 'ocircumflexgrave': u'\u1ED3',
+ 'ocircumflexhookabove': u'\u1ED5',
+ 'ocircumflextilde': u'\u1ED7',
+ 'ocyrillic': u'\u043E',
+ 'odblacute': u'\u0151',
+ 'odblgrave': u'\u020D',
+ 'odeva': u'\u0913',
+ 'odieresis': u'\u00F6',
+ 'odieresiscyrillic': u'\u04E7',
+ 'odotbelow': u'\u1ECD',
+ 'oe': u'\u0153',
+ 'oekorean': u'\u315A',
+ 'ogonek': u'\u02DB',
+ 'ogonekcmb': u'\u0328',
+ 'ograve': u'\u00F2',
+ 'ogujarati': u'\u0A93',
+ 'oharmenian': u'\u0585',
+ 'ohiragana': u'\u304A',
+ 'ohookabove': u'\u1ECF',
+ 'ohorn': u'\u01A1',
+ 'ohornacute': u'\u1EDB',
+ 'ohorndotbelow': u'\u1EE3',
+ 'ohorngrave': u'\u1EDD',
+ 'ohornhookabove': u'\u1EDF',
+ 'ohorntilde': u'\u1EE1',
+ 'ohungarumlaut': u'\u0151',
+ 'oi': u'\u01A3',
+ 'oinvertedbreve': u'\u020F',
+ 'okatakana': u'\u30AA',
+ 'okatakanahalfwidth': u'\uFF75',
+ 'okorean': u'\u3157',
+ 'olehebrew': u'\u05AB',
+ 'omacron': u'\u014D',
+ 'omacronacute': u'\u1E53',
+ 'omacrongrave': u'\u1E51',
+ 'omdeva': u'\u0950',
+ 'omega': u'\u03C9',
+ 'omega1': u'\u03D6',
+ 'omegacyrillic': u'\u0461',
+ 'omegalatinclosed': u'\u0277',
+ 'omegaroundcyrillic': u'\u047B',
+ 'omegatitlocyrillic': u'\u047D',
+ 'omegatonos': u'\u03CE',
+ 'omgujarati': u'\u0AD0',
+ 'omicron': u'\u03BF',
+ 'omicrontonos': u'\u03CC',
+ 'omonospace': u'\uFF4F',
+ 'one': u'\u0031',
+ 'onearabic': u'\u0661',
+ 'onebengali': u'\u09E7',
+ 'onecircle': u'\u2460',
+ 'onecircleinversesansserif': u'\u278A',
+ 'onedeva': u'\u0967',
+ 'onedotenleader': u'\u2024',
+ 'oneeighth': u'\u215B',
+ 'onefitted': u'\uF6DC',
+ 'onegujarati': u'\u0AE7',
+ 'onegurmukhi': u'\u0A67',
+ 'onehackarabic': u'\u0661',
+ 'onehalf': u'\u00BD',
+ 'onehangzhou': u'\u3021',
+ 'oneideographicparen': u'\u3220',
+ 'oneinferior': u'\u2081',
+ 'onemonospace': u'\uFF11',
+ 'onenumeratorbengali': u'\u09F4',
+ 'oneoldstyle': u'\uF731',
+ 'oneparen': u'\u2474',
+ 'oneperiod': u'\u2488',
+ 'onepersian': u'\u06F1',
+ 'onequarter': u'\u00BC',
+ 'oneroman': u'\u2170',
+ 'onesuperior': u'\u00B9',
+ 'onethai': u'\u0E51',
+ 'onethird': u'\u2153',
+ 'oogonek': u'\u01EB',
+ 'oogonekmacron': u'\u01ED',
+ 'oogurmukhi': u'\u0A13',
+ 'oomatragurmukhi': u'\u0A4B',
+ 'oopen': u'\u0254',
+ 'oparen': u'\u24AA',
+ 'openbullet': u'\u25E6',
+ 'option': u'\u2325',
+ 'ordfeminine': u'\u00AA',
+ 'ordmasculine': u'\u00BA',
+ 'orthogonal': u'\u221F',
+ 'oshortdeva': u'\u0912',
+ 'oshortvowelsigndeva': u'\u094A',
+ 'oslash': u'\u00F8',
+ 'oslashacute': u'\u01FF',
+ 'osmallhiragana': u'\u3049',
+ 'osmallkatakana': u'\u30A9',
+ 'osmallkatakanahalfwidth': u'\uFF6B',
+ 'ostrokeacute': u'\u01FF',
+ 'osuperior': u'\uF6F0',
+ 'otcyrillic': u'\u047F',
+ 'otilde': u'\u00F5',
+ 'otildeacute': u'\u1E4D',
+ 'otildedieresis': u'\u1E4F',
+ 'oubopomofo': u'\u3121',
+ 'overline': u'\u203E',
+ 'overlinecenterline': u'\uFE4A',
+ 'overlinecmb': u'\u0305',
+ 'overlinedashed': u'\uFE49',
+ 'overlinedblwavy': u'\uFE4C',
+ 'overlinewavy': u'\uFE4B',
+ 'overscore': u'\u00AF',
+ 'ovowelsignbengali': u'\u09CB',
+ 'ovowelsigndeva': u'\u094B',
+ 'ovowelsigngujarati': u'\u0ACB',
+ 'p': u'\u0070',
+ 'paampssquare': u'\u3380',
+ 'paasentosquare': u'\u332B',
+ 'pabengali': u'\u09AA',
+ 'pacute': u'\u1E55',
+ 'padeva': u'\u092A',
+ 'pagedown': u'\u21DF',
+ 'pageup': u'\u21DE',
+ 'pagujarati': u'\u0AAA',
+ 'pagurmukhi': u'\u0A2A',
+ 'pahiragana': u'\u3071',
+ 'paiyannoithai': u'\u0E2F',
+ 'pakatakana': u'\u30D1',
+ 'palatalizationcyrilliccmb': u'\u0484',
+ 'palochkacyrillic': u'\u04C0',
+ 'pansioskorean': u'\u317F',
+ 'paragraph': u'\u00B6',
+ 'parallel': u'\u2225',
+ 'parenleft': u'\u0028',
+ 'parenleftaltonearabic': u'\uFD3E',
+ 'parenleftbt': u'\uF8ED',
+ 'parenleftex': u'\uF8EC',
+ 'parenleftinferior': u'\u208D',
+ 'parenleftmonospace': u'\uFF08',
+ 'parenleftsmall': u'\uFE59',
+ 'parenleftsuperior': u'\u207D',
+ 'parenlefttp': u'\uF8EB',
+ 'parenleftvertical': u'\uFE35',
+ 'parenright': u'\u0029',
+ 'parenrightaltonearabic': u'\uFD3F',
+ 'parenrightbt': u'\uF8F8',
+ 'parenrightex': u'\uF8F7',
+ 'parenrightinferior': u'\u208E',
+ 'parenrightmonospace': u'\uFF09',
+ 'parenrightsmall': u'\uFE5A',
+ 'parenrightsuperior': u'\u207E',
+ 'parenrighttp': u'\uF8F6',
+ 'parenrightvertical': u'\uFE36',
+ 'partialdiff': u'\u2202',
+ 'paseqhebrew': u'\u05C0',
+ 'pashtahebrew': u'\u0599',
+ 'pasquare': u'\u33A9',
+ 'patah': u'\u05B7',
+ 'patah11': u'\u05B7',
+ 'patah1d': u'\u05B7',
+ 'patah2a': u'\u05B7',
+ 'patahhebrew': u'\u05B7',
+ 'patahnarrowhebrew': u'\u05B7',
+ 'patahquarterhebrew': u'\u05B7',
+ 'patahwidehebrew': u'\u05B7',
+ 'pazerhebrew': u'\u05A1',
+ 'pbopomofo': u'\u3106',
+ 'pcircle': u'\u24DF',
+ 'pdotaccent': u'\u1E57',
+ 'pe': u'\u05E4',
+ 'pecyrillic': u'\u043F',
+ 'pedagesh': u'\uFB44',
+ 'pedageshhebrew': u'\uFB44',
+ 'peezisquare': u'\u333B',
+ 'pefinaldageshhebrew': u'\uFB43',
+ 'peharabic': u'\u067E',
+ 'peharmenian': u'\u057A',
+ 'pehebrew': u'\u05E4',
+ 'pehfinalarabic': u'\uFB57',
+ 'pehinitialarabic': u'\uFB58',
+ 'pehiragana': u'\u307A',
+ 'pehmedialarabic': u'\uFB59',
+ 'pekatakana': u'\u30DA',
+ 'pemiddlehookcyrillic': u'\u04A7',
+ 'perafehebrew': u'\uFB4E',
+ 'percent': u'\u0025',
+ 'percentarabic': u'\u066A',
+ 'percentmonospace': u'\uFF05',
+ 'percentsmall': u'\uFE6A',
+ 'period': u'\u002E',
+ 'periodarmenian': u'\u0589',
+ 'periodcentered': u'\u00B7',
+ 'periodhalfwidth': u'\uFF61',
+ 'periodinferior': u'\uF6E7',
+ 'periodmonospace': u'\uFF0E',
+ 'periodsmall': u'\uFE52',
+ 'periodsuperior': u'\uF6E8',
+ 'perispomenigreekcmb': u'\u0342',
+ 'perpendicular': u'\u22A5',
+ 'perthousand': u'\u2030',
+ 'peseta': u'\u20A7',
+ 'pfsquare': u'\u338A',
+ 'phabengali': u'\u09AB',
+ 'phadeva': u'\u092B',
+ 'phagujarati': u'\u0AAB',
+ 'phagurmukhi': u'\u0A2B',
+ 'phi': u'\u03C6',
+ 'phi1': u'\u03D5',
+ 'phieuphacirclekorean': u'\u327A',
+ 'phieuphaparenkorean': u'\u321A',
+ 'phieuphcirclekorean': u'\u326C',
+ 'phieuphkorean': u'\u314D',
+ 'phieuphparenkorean': u'\u320C',
+ 'philatin': u'\u0278',
+ 'phinthuthai': u'\u0E3A',
+ 'phisymbolgreek': u'\u03D5',
+ 'phook': u'\u01A5',
+ 'phophanthai': u'\u0E1E',
+ 'phophungthai': u'\u0E1C',
+ 'phosamphaothai': u'\u0E20',
+ 'pi': u'\u03C0',
+ 'pieupacirclekorean': u'\u3273',
+ 'pieupaparenkorean': u'\u3213',
+ 'pieupcieuckorean': u'\u3176',
+ 'pieupcirclekorean': u'\u3265',
+ 'pieupkiyeokkorean': u'\u3172',
+ 'pieupkorean': u'\u3142',
+ 'pieupparenkorean': u'\u3205',
+ 'pieupsioskiyeokkorean': u'\u3174',
+ 'pieupsioskorean': u'\u3144',
+ 'pieupsiostikeutkorean': u'\u3175',
+ 'pieupthieuthkorean': u'\u3177',
+ 'pieuptikeutkorean': u'\u3173',
+ 'pihiragana': u'\u3074',
+ 'pikatakana': u'\u30D4',
+ 'pisymbolgreek': u'\u03D6',
+ 'piwrarmenian': u'\u0583',
+ 'plus': u'\u002B',
+ 'plusbelowcmb': u'\u031F',
+ 'pluscircle': u'\u2295',
+ 'plusminus': u'\u00B1',
+ 'plusmod': u'\u02D6',
+ 'plusmonospace': u'\uFF0B',
+ 'plussmall': u'\uFE62',
+ 'plussuperior': u'\u207A',
+ 'pmonospace': u'\uFF50',
+ 'pmsquare': u'\u33D8',
+ 'pohiragana': u'\u307D',
+ 'pointingindexdownwhite': u'\u261F',
+ 'pointingindexleftwhite': u'\u261C',
+ 'pointingindexrightwhite': u'\u261E',
+ 'pointingindexupwhite': u'\u261D',
+ 'pokatakana': u'\u30DD',
+ 'poplathai': u'\u0E1B',
+ 'postalmark': u'\u3012',
+ 'postalmarkface': u'\u3020',
+ 'pparen': u'\u24AB',
+ 'precedes': u'\u227A',
+ 'prescription': u'\u211E',
+ 'primemod': u'\u02B9',
+ 'primereversed': u'\u2035',
+ 'product': u'\u220F',
+ 'projective': u'\u2305',
+ 'prolongedkana': u'\u30FC',
+ 'propellor': u'\u2318',
+ 'propersubset': u'\u2282',
+ 'propersuperset': u'\u2283',
+ 'proportion': u'\u2237',
+ 'proportional': u'\u221D',
+ 'psi': u'\u03C8',
+ 'psicyrillic': u'\u0471',
+ 'psilipneumatacyrilliccmb': u'\u0486',
+ 'pssquare': u'\u33B0',
+ 'puhiragana': u'\u3077',
+ 'pukatakana': u'\u30D7',
+ 'pvsquare': u'\u33B4',
+ 'pwsquare': u'\u33BA',
+ 'q': u'\u0071',
+ 'qadeva': u'\u0958',
+ 'qadmahebrew': u'\u05A8',
+ 'qafarabic': u'\u0642',
+ 'qaffinalarabic': u'\uFED6',
+ 'qafinitialarabic': u'\uFED7',
+ 'qafmedialarabic': u'\uFED8',
+ 'qamats': u'\u05B8',
+ 'qamats10': u'\u05B8',
+ 'qamats1a': u'\u05B8',
+ 'qamats1c': u'\u05B8',
+ 'qamats27': u'\u05B8',
+ 'qamats29': u'\u05B8',
+ 'qamats33': u'\u05B8',
+ 'qamatsde': u'\u05B8',
+ 'qamatshebrew': u'\u05B8',
+ 'qamatsnarrowhebrew': u'\u05B8',
+ 'qamatsqatanhebrew': u'\u05B8',
+ 'qamatsqatannarrowhebrew': u'\u05B8',
+ 'qamatsqatanquarterhebrew': u'\u05B8',
+ 'qamatsqatanwidehebrew': u'\u05B8',
+ 'qamatsquarterhebrew': u'\u05B8',
+ 'qamatswidehebrew': u'\u05B8',
+ 'qarneyparahebrew': u'\u059F',
+ 'qbopomofo': u'\u3111',
+ 'qcircle': u'\u24E0',
+ 'qhook': u'\u02A0',
+ 'qmonospace': u'\uFF51',
+ 'qof': u'\u05E7',
+ 'qofdagesh': u'\uFB47',
+ 'qofdageshhebrew': u'\uFB47',
+ 'qofhatafpatah': u'\u05E7\u05B2',
+ 'qofhatafpatahhebrew': u'\u05E7\u05B2',
+ 'qofhatafsegol': u'\u05E7\u05B1',
+ 'qofhatafsegolhebrew': u'\u05E7\u05B1',
+ 'qofhebrew': u'\u05E7',
+ 'qofhiriq': u'\u05E7\u05B4',
+ 'qofhiriqhebrew': u'\u05E7\u05B4',
+ 'qofholam': u'\u05E7\u05B9',
+ 'qofholamhebrew': u'\u05E7\u05B9',
+ 'qofpatah': u'\u05E7\u05B7',
+ 'qofpatahhebrew': u'\u05E7\u05B7',
+ 'qofqamats': u'\u05E7\u05B8',
+ 'qofqamatshebrew': u'\u05E7\u05B8',
+ 'qofqubuts': u'\u05E7\u05BB',
+ 'qofqubutshebrew': u'\u05E7\u05BB',
+ 'qofsegol': u'\u05E7\u05B6',
+ 'qofsegolhebrew': u'\u05E7\u05B6',
+ 'qofsheva': u'\u05E7\u05B0',
+ 'qofshevahebrew': u'\u05E7\u05B0',
+ 'qoftsere': u'\u05E7\u05B5',
+ 'qoftserehebrew': u'\u05E7\u05B5',
+ 'qparen': u'\u24AC',
+ 'quarternote': u'\u2669',
+ 'qubuts': u'\u05BB',
+ 'qubuts18': u'\u05BB',
+ 'qubuts25': u'\u05BB',
+ 'qubuts31': u'\u05BB',
+ 'qubutshebrew': u'\u05BB',
+ 'qubutsnarrowhebrew': u'\u05BB',
+ 'qubutsquarterhebrew': u'\u05BB',
+ 'qubutswidehebrew': u'\u05BB',
+ 'question': u'\u003F',
+ 'questionarabic': u'\u061F',
+ 'questionarmenian': u'\u055E',
+ 'questiondown': u'\u00BF',
+ 'questiondownsmall': u'\uF7BF',
+ 'questiongreek': u'\u037E',
+ 'questionmonospace': u'\uFF1F',
+ 'questionsmall': u'\uF73F',
+ 'quotedbl': u'\u0022',
+ 'quotedblbase': u'\u201E',
+ 'quotedblleft': u'\u201C',
+ 'quotedblmonospace': u'\uFF02',
+ 'quotedblprime': u'\u301E',
+ 'quotedblprimereversed': u'\u301D',
+ 'quotedblright': u'\u201D',
+ 'quoteleft': u'\u2018',
+ 'quoteleftreversed': u'\u201B',
+ 'quotereversed': u'\u201B',
+ 'quoteright': u'\u2019',
+ 'quoterightn': u'\u0149',
+ 'quotesinglbase': u'\u201A',
+ 'quotesingle': u'\u0027',
+ 'quotesinglemonospace': u'\uFF07',
+ 'r': u'\u0072',
+ 'raarmenian': u'\u057C',
+ 'rabengali': u'\u09B0',
+ 'racute': u'\u0155',
+ 'radeva': u'\u0930',
+ 'radical': u'\u221A',
+ 'radicalex': u'\uF8E5',
+ 'radoverssquare': u'\u33AE',
+ 'radoverssquaredsquare': u'\u33AF',
+ 'radsquare': u'\u33AD',
+ 'rafe': u'\u05BF',
+ 'rafehebrew': u'\u05BF',
+ 'ragujarati': u'\u0AB0',
+ 'ragurmukhi': u'\u0A30',
+ 'rahiragana': u'\u3089',
+ 'rakatakana': u'\u30E9',
+ 'rakatakanahalfwidth': u'\uFF97',
+ 'ralowerdiagonalbengali': u'\u09F1',
+ 'ramiddlediagonalbengali': u'\u09F0',
+ 'ramshorn': u'\u0264',
+ 'ratio': u'\u2236',
+ 'rbopomofo': u'\u3116',
+ 'rcaron': u'\u0159',
+ 'rcedilla': u'\u0157',
+ 'rcircle': u'\u24E1',
+ 'rcommaaccent': u'\u0157',
+ 'rdblgrave': u'\u0211',
+ 'rdotaccent': u'\u1E59',
+ 'rdotbelow': u'\u1E5B',
+ 'rdotbelowmacron': u'\u1E5D',
+ 'referencemark': u'\u203B',
+ 'reflexsubset': u'\u2286',
+ 'reflexsuperset': u'\u2287',
+ 'registered': u'\u00AE',
+ 'registersans': u'\uF8E8',
+ 'registerserif': u'\uF6DA',
+ 'reharabic': u'\u0631',
+ 'reharmenian': u'\u0580',
+ 'rehfinalarabic': u'\uFEAE',
+ 'rehiragana': u'\u308C',
+ 'rehyehaleflamarabic': u'\u0631\uFEF3\uFE8E\u0644',
+ 'rekatakana': u'\u30EC',
+ 'rekatakanahalfwidth': u'\uFF9A',
+ 'resh': u'\u05E8',
+ 'reshdageshhebrew': u'\uFB48',
+ 'reshhatafpatah': u'\u05E8\u05B2',
+ 'reshhatafpatahhebrew': u'\u05E8\u05B2',
+ 'reshhatafsegol': u'\u05E8\u05B1',
+ 'reshhatafsegolhebrew': u'\u05E8\u05B1',
+ 'reshhebrew': u'\u05E8',
+ 'reshhiriq': u'\u05E8\u05B4',
+ 'reshhiriqhebrew': u'\u05E8\u05B4',
+ 'reshholam': u'\u05E8\u05B9',
+ 'reshholamhebrew': u'\u05E8\u05B9',
+ 'reshpatah': u'\u05E8\u05B7',
+ 'reshpatahhebrew': u'\u05E8\u05B7',
+ 'reshqamats': u'\u05E8\u05B8',
+ 'reshqamatshebrew': u'\u05E8\u05B8',
+ 'reshqubuts': u'\u05E8\u05BB',
+ 'reshqubutshebrew': u'\u05E8\u05BB',
+ 'reshsegol': u'\u05E8\u05B6',
+ 'reshsegolhebrew': u'\u05E8\u05B6',
+ 'reshsheva': u'\u05E8\u05B0',
+ 'reshshevahebrew': u'\u05E8\u05B0',
+ 'reshtsere': u'\u05E8\u05B5',
+ 'reshtserehebrew': u'\u05E8\u05B5',
+ 'reversedtilde': u'\u223D',
+ 'reviahebrew': u'\u0597',
+ 'reviamugrashhebrew': u'\u0597',
+ 'revlogicalnot': u'\u2310',
+ 'rfishhook': u'\u027E',
+ 'rfishhookreversed': u'\u027F',
+ 'rhabengali': u'\u09DD',
+ 'rhadeva': u'\u095D',
+ 'rho': u'\u03C1',
+ 'rhook': u'\u027D',
+ 'rhookturned': u'\u027B',
+ 'rhookturnedsuperior': u'\u02B5',
+ 'rhosymbolgreek': u'\u03F1',
+ 'rhotichookmod': u'\u02DE',
+ 'rieulacirclekorean': u'\u3271',
+ 'rieulaparenkorean': u'\u3211',
+ 'rieulcirclekorean': u'\u3263',
+ 'rieulhieuhkorean': u'\u3140',
+ 'rieulkiyeokkorean': u'\u313A',
+ 'rieulkiyeoksioskorean': u'\u3169',
+ 'rieulkorean': u'\u3139',
+ 'rieulmieumkorean': u'\u313B',
+ 'rieulpansioskorean': u'\u316C',
+ 'rieulparenkorean': u'\u3203',
+ 'rieulphieuphkorean': u'\u313F',
+ 'rieulpieupkorean': u'\u313C',
+ 'rieulpieupsioskorean': u'\u316B',
+ 'rieulsioskorean': u'\u313D',
+ 'rieulthieuthkorean': u'\u313E',
+ 'rieultikeutkorean': u'\u316A',
+ 'rieulyeorinhieuhkorean': u'\u316D',
+ 'rightangle': u'\u221F',
+ 'righttackbelowcmb': u'\u0319',
+ 'righttriangle': u'\u22BF',
+ 'rihiragana': u'\u308A',
+ 'rikatakana': u'\u30EA',
+ 'rikatakanahalfwidth': u'\uFF98',
+ 'ring': u'\u02DA',
+ 'ringbelowcmb': u'\u0325',
+ 'ringcmb': u'\u030A',
+ 'ringhalfleft': u'\u02BF',
+ 'ringhalfleftarmenian': u'\u0559',
+ 'ringhalfleftbelowcmb': u'\u031C',
+ 'ringhalfleftcentered': u'\u02D3',
+ 'ringhalfright': u'\u02BE',
+ 'ringhalfrightbelowcmb': u'\u0339',
+ 'ringhalfrightcentered': u'\u02D2',
+ 'rinvertedbreve': u'\u0213',
+ 'rittorusquare': u'\u3351',
+ 'rlinebelow': u'\u1E5F',
+ 'rlongleg': u'\u027C',
+ 'rlonglegturned': u'\u027A',
+ 'rmonospace': u'\uFF52',
+ 'rohiragana': u'\u308D',
+ 'rokatakana': u'\u30ED',
+ 'rokatakanahalfwidth': u'\uFF9B',
+ 'roruathai': u'\u0E23',
+ 'rparen': u'\u24AD',
+ 'rrabengali': u'\u09DC',
+ 'rradeva': u'\u0931',
+ 'rragurmukhi': u'\u0A5C',
+ 'rreharabic': u'\u0691',
+ 'rrehfinalarabic': u'\uFB8D',
+ 'rrvocalicbengali': u'\u09E0',
+ 'rrvocalicdeva': u'\u0960',
+ 'rrvocalicgujarati': u'\u0AE0',
+ 'rrvocalicvowelsignbengali': u'\u09C4',
+ 'rrvocalicvowelsigndeva': u'\u0944',
+ 'rrvocalicvowelsigngujarati': u'\u0AC4',
+ 'rsuperior': u'\uF6F1',
+ 'rtblock': u'\u2590',
+ 'rturned': u'\u0279',
+ 'rturnedsuperior': u'\u02B4',
+ 'ruhiragana': u'\u308B',
+ 'rukatakana': u'\u30EB',
+ 'rukatakanahalfwidth': u'\uFF99',
+ 'rupeemarkbengali': u'\u09F2',
+ 'rupeesignbengali': u'\u09F3',
+ 'rupiah': u'\uF6DD',
+ 'ruthai': u'\u0E24',
+ 'rvocalicbengali': u'\u098B',
+ 'rvocalicdeva': u'\u090B',
+ 'rvocalicgujarati': u'\u0A8B',
+ 'rvocalicvowelsignbengali': u'\u09C3',
+ 'rvocalicvowelsigndeva': u'\u0943',
+ 'rvocalicvowelsigngujarati': u'\u0AC3',
+ 's': u'\u0073',
+ 'sabengali': u'\u09B8',
+ 'sacute': u'\u015B',
+ 'sacutedotaccent': u'\u1E65',
+ 'sadarabic': u'\u0635',
+ 'sadeva': u'\u0938',
+ 'sadfinalarabic': u'\uFEBA',
+ 'sadinitialarabic': u'\uFEBB',
+ 'sadmedialarabic': u'\uFEBC',
+ 'sagujarati': u'\u0AB8',
+ 'sagurmukhi': u'\u0A38',
+ 'sahiragana': u'\u3055',
+ 'sakatakana': u'\u30B5',
+ 'sakatakanahalfwidth': u'\uFF7B',
+ 'sallallahoualayhewasallamarabic': u'\uFDFA',
+ 'samekh': u'\u05E1',
+ 'samekhdagesh': u'\uFB41',
+ 'samekhdageshhebrew': u'\uFB41',
+ 'samekhhebrew': u'\u05E1',
+ 'saraaathai': u'\u0E32',
+ 'saraaethai': u'\u0E41',
+ 'saraaimaimalaithai': u'\u0E44',
+ 'saraaimaimuanthai': u'\u0E43',
+ 'saraamthai': u'\u0E33',
+ 'saraathai': u'\u0E30',
+ 'saraethai': u'\u0E40',
+ 'saraiileftthai': u'\uF886',
+ 'saraiithai': u'\u0E35',
+ 'saraileftthai': u'\uF885',
+ 'saraithai': u'\u0E34',
+ 'saraothai': u'\u0E42',
+ 'saraueeleftthai': u'\uF888',
+ 'saraueethai': u'\u0E37',
+ 'saraueleftthai': u'\uF887',
+ 'sarauethai': u'\u0E36',
+ 'sarauthai': u'\u0E38',
+ 'sarauuthai': u'\u0E39',
+ 'sbopomofo': u'\u3119',
+ 'scaron': u'\u0161',
+ 'scarondotaccent': u'\u1E67',
+ 'scedilla': u'\u015F',
+ 'schwa': u'\u0259',
+ 'schwacyrillic': u'\u04D9',
+ 'schwadieresiscyrillic': u'\u04DB',
+ 'schwahook': u'\u025A',
+ 'scircle': u'\u24E2',
+ 'scircumflex': u'\u015D',
+ 'scommaaccent': u'\u0219',
+ 'sdotaccent': u'\u1E61',
+ 'sdotbelow': u'\u1E63',
+ 'sdotbelowdotaccent': u'\u1E69',
+ 'seagullbelowcmb': u'\u033C',
+ 'second': u'\u2033',
+ 'secondtonechinese': u'\u02CA',
+ 'section': u'\u00A7',
+ 'seenarabic': u'\u0633',
+ 'seenfinalarabic': u'\uFEB2',
+ 'seeninitialarabic': u'\uFEB3',
+ 'seenmedialarabic': u'\uFEB4',
+ 'segol': u'\u05B6',
+ 'segol13': u'\u05B6',
+ 'segol1f': u'\u05B6',
+ 'segol2c': u'\u05B6',
+ 'segolhebrew': u'\u05B6',
+ 'segolnarrowhebrew': u'\u05B6',
+ 'segolquarterhebrew': u'\u05B6',
+ 'segoltahebrew': u'\u0592',
+ 'segolwidehebrew': u'\u05B6',
+ 'seharmenian': u'\u057D',
+ 'sehiragana': u'\u305B',
+ 'sekatakana': u'\u30BB',
+ 'sekatakanahalfwidth': u'\uFF7E',
+ 'semicolon': u'\u003B',
+ 'semicolonarabic': u'\u061B',
+ 'semicolonmonospace': u'\uFF1B',
+ 'semicolonsmall': u'\uFE54',
+ 'semivoicedmarkkana': u'\u309C',
+ 'semivoicedmarkkanahalfwidth': u'\uFF9F',
+ 'sentisquare': u'\u3322',
+ 'sentosquare': u'\u3323',
+ 'seven': u'\u0037',
+ 'sevenarabic': u'\u0667',
+ 'sevenbengali': u'\u09ED',
+ 'sevencircle': u'\u2466',
+ 'sevencircleinversesansserif': u'\u2790',
+ 'sevendeva': u'\u096D',
+ 'seveneighths': u'\u215E',
+ 'sevengujarati': u'\u0AED',
+ 'sevengurmukhi': u'\u0A6D',
+ 'sevenhackarabic': u'\u0667',
+ 'sevenhangzhou': u'\u3027',
+ 'sevenideographicparen': u'\u3226',
+ 'seveninferior': u'\u2087',
+ 'sevenmonospace': u'\uFF17',
+ 'sevenoldstyle': u'\uF737',
+ 'sevenparen': u'\u247A',
+ 'sevenperiod': u'\u248E',
+ 'sevenpersian': u'\u06F7',
+ 'sevenroman': u'\u2176',
+ 'sevensuperior': u'\u2077',
+ 'seventeencircle': u'\u2470',
+ 'seventeenparen': u'\u2484',
+ 'seventeenperiod': u'\u2498',
+ 'seventhai': u'\u0E57',
+ 'sfthyphen': u'\u00AD',
+ 'shaarmenian': u'\u0577',
+ 'shabengali': u'\u09B6',
+ 'shacyrillic': u'\u0448',
+ 'shaddaarabic': u'\u0651',
+ 'shaddadammaarabic': u'\uFC61',
+ 'shaddadammatanarabic': u'\uFC5E',
+ 'shaddafathaarabic': u'\uFC60',
+ 'shaddafathatanarabic': u'\u0651\u064B',
+ 'shaddakasraarabic': u'\uFC62',
+ 'shaddakasratanarabic': u'\uFC5F',
+ 'shade': u'\u2592',
+ 'shadedark': u'\u2593',
+ 'shadelight': u'\u2591',
+ 'shademedium': u'\u2592',
+ 'shadeva': u'\u0936',
+ 'shagujarati': u'\u0AB6',
+ 'shagurmukhi': u'\u0A36',
+ 'shalshelethebrew': u'\u0593',
+ 'shbopomofo': u'\u3115',
+ 'shchacyrillic': u'\u0449',
+ 'sheenarabic': u'\u0634',
+ 'sheenfinalarabic': u'\uFEB6',
+ 'sheeninitialarabic': u'\uFEB7',
+ 'sheenmedialarabic': u'\uFEB8',
+ 'sheicoptic': u'\u03E3',
+ 'sheqel': u'\u20AA',
+ 'sheqelhebrew': u'\u20AA',
+ 'sheva': u'\u05B0',
+ 'sheva115': u'\u05B0',
+ 'sheva15': u'\u05B0',
+ 'sheva22': u'\u05B0',
+ 'sheva2e': u'\u05B0',
+ 'shevahebrew': u'\u05B0',
+ 'shevanarrowhebrew': u'\u05B0',
+ 'shevaquarterhebrew': u'\u05B0',
+ 'shevawidehebrew': u'\u05B0',
+ 'shhacyrillic': u'\u04BB',
+ 'shimacoptic': u'\u03ED',
+ 'shin': u'\u05E9',
+ 'shindagesh': u'\uFB49',
+ 'shindageshhebrew': u'\uFB49',
+ 'shindageshshindot': u'\uFB2C',
+ 'shindageshshindothebrew': u'\uFB2C',
+ 'shindageshsindot': u'\uFB2D',
+ 'shindageshsindothebrew': u'\uFB2D',
+ 'shindothebrew': u'\u05C1',
+ 'shinhebrew': u'\u05E9',
+ 'shinshindot': u'\uFB2A',
+ 'shinshindothebrew': u'\uFB2A',
+ 'shinsindot': u'\uFB2B',
+ 'shinsindothebrew': u'\uFB2B',
+ 'shook': u'\u0282',
+ 'sigma': u'\u03C3',
+ 'sigma1': u'\u03C2',
+ 'sigmafinal': u'\u03C2',
+ 'sigmalunatesymbolgreek': u'\u03F2',
+ 'sihiragana': u'\u3057',
+ 'sikatakana': u'\u30B7',
+ 'sikatakanahalfwidth': u'\uFF7C',
+ 'siluqhebrew': u'\u05BD',
+ 'siluqlefthebrew': u'\u05BD',
+ 'similar': u'\u223C',
+ 'sindothebrew': u'\u05C2',
+ 'siosacirclekorean': u'\u3274',
+ 'siosaparenkorean': u'\u3214',
+ 'sioscieuckorean': u'\u317E',
+ 'sioscirclekorean': u'\u3266',
+ 'sioskiyeokkorean': u'\u317A',
+ 'sioskorean': u'\u3145',
+ 'siosnieunkorean': u'\u317B',
+ 'siosparenkorean': u'\u3206',
+ 'siospieupkorean': u'\u317D',
+ 'siostikeutkorean': u'\u317C',
+ 'six': u'\u0036',
+ 'sixarabic': u'\u0666',
+ 'sixbengali': u'\u09EC',
+ 'sixcircle': u'\u2465',
+ 'sixcircleinversesansserif': u'\u278F',
+ 'sixdeva': u'\u096C',
+ 'sixgujarati': u'\u0AEC',
+ 'sixgurmukhi': u'\u0A6C',
+ 'sixhackarabic': u'\u0666',
+ 'sixhangzhou': u'\u3026',
+ 'sixideographicparen': u'\u3225',
+ 'sixinferior': u'\u2086',
+ 'sixmonospace': u'\uFF16',
+ 'sixoldstyle': u'\uF736',
+ 'sixparen': u'\u2479',
+ 'sixperiod': u'\u248D',
+ 'sixpersian': u'\u06F6',
+ 'sixroman': u'\u2175',
+ 'sixsuperior': u'\u2076',
+ 'sixteencircle': u'\u246F',
+ 'sixteencurrencydenominatorbengali': u'\u09F9',
+ 'sixteenparen': u'\u2483',
+ 'sixteenperiod': u'\u2497',
+ 'sixthai': u'\u0E56',
+ 'slash': u'\u002F',
+ 'slashmonospace': u'\uFF0F',
+ 'slong': u'\u017F',
+ 'slongdotaccent': u'\u1E9B',
+ 'smileface': u'\u263A',
+ 'smonospace': u'\uFF53',
+ 'sofpasuqhebrew': u'\u05C3',
+ 'softhyphen': u'\u00AD',
+ 'softsigncyrillic': u'\u044C',
+ 'sohiragana': u'\u305D',
+ 'sokatakana': u'\u30BD',
+ 'sokatakanahalfwidth': u'\uFF7F',
+ 'soliduslongoverlaycmb': u'\u0338',
+ 'solidusshortoverlaycmb': u'\u0337',
+ 'sorusithai': u'\u0E29',
+ 'sosalathai': u'\u0E28',
+ 'sosothai': u'\u0E0B',
+ 'sosuathai': u'\u0E2A',
+ 'space': u'\u0020',
+ 'spacehackarabic': u'\u0020',
+ 'spade': u'\u2660',
+ 'spadesuitblack': u'\u2660',
+ 'spadesuitwhite': u'\u2664',
+ 'sparen': u'\u24AE',
+ 'squarebelowcmb': u'\u033B',
+ 'squarecc': u'\u33C4',
+ 'squarecm': u'\u339D',
+ 'squarediagonalcrosshatchfill': u'\u25A9',
+ 'squarehorizontalfill': u'\u25A4',
+ 'squarekg': u'\u338F',
+ 'squarekm': u'\u339E',
+ 'squarekmcapital': u'\u33CE',
+ 'squareln': u'\u33D1',
+ 'squarelog': u'\u33D2',
+ 'squaremg': u'\u338E',
+ 'squaremil': u'\u33D5',
+ 'squaremm': u'\u339C',
+ 'squaremsquared': u'\u33A1',
+ 'squareorthogonalcrosshatchfill': u'\u25A6',
+ 'squareupperlefttolowerrightfill': u'\u25A7',
+ 'squareupperrighttolowerleftfill': u'\u25A8',
+ 'squareverticalfill': u'\u25A5',
+ 'squarewhitewithsmallblack': u'\u25A3',
+ 'srsquare': u'\u33DB',
+ 'ssabengali': u'\u09B7',
+ 'ssadeva': u'\u0937',
+ 'ssagujarati': u'\u0AB7',
+ 'ssangcieuckorean': u'\u3149',
+ 'ssanghieuhkorean': u'\u3185',
+ 'ssangieungkorean': u'\u3180',
+ 'ssangkiyeokkorean': u'\u3132',
+ 'ssangnieunkorean': u'\u3165',
+ 'ssangpieupkorean': u'\u3143',
+ 'ssangsioskorean': u'\u3146',
+ 'ssangtikeutkorean': u'\u3138',
+ 'ssuperior': u'\uF6F2',
+ 'sterling': u'\u00A3',
+ 'sterlingmonospace': u'\uFFE1',
+ 'strokelongoverlaycmb': u'\u0336',
+ 'strokeshortoverlaycmb': u'\u0335',
+ 'subset': u'\u2282',
+ 'subsetnotequal': u'\u228A',
+ 'subsetorequal': u'\u2286',
+ 'succeeds': u'\u227B',
+ 'suchthat': u'\u220B',
+ 'suhiragana': u'\u3059',
+ 'sukatakana': u'\u30B9',
+ 'sukatakanahalfwidth': u'\uFF7D',
+ 'sukunarabic': u'\u0652',
+ 'summation': u'\u2211',
+ 'sun': u'\u263C',
+ 'superset': u'\u2283',
+ 'supersetnotequal': u'\u228B',
+ 'supersetorequal': u'\u2287',
+ 'svsquare': u'\u33DC',
+ 'syouwaerasquare': u'\u337C',
+ 't': u'\u0074',
+ 'tabengali': u'\u09A4',
+ 'tackdown': u'\u22A4',
+ 'tackleft': u'\u22A3',
+ 'tadeva': u'\u0924',
+ 'tagujarati': u'\u0AA4',
+ 'tagurmukhi': u'\u0A24',
+ 'taharabic': u'\u0637',
+ 'tahfinalarabic': u'\uFEC2',
+ 'tahinitialarabic': u'\uFEC3',
+ 'tahiragana': u'\u305F',
+ 'tahmedialarabic': u'\uFEC4',
+ 'taisyouerasquare': u'\u337D',
+ 'takatakana': u'\u30BF',
+ 'takatakanahalfwidth': u'\uFF80',
+ 'tatweelarabic': u'\u0640',
+ 'tau': u'\u03C4',
+ 'tav': u'\u05EA',
+ 'tavdages': u'\uFB4A',
+ 'tavdagesh': u'\uFB4A',
+ 'tavdageshhebrew': u'\uFB4A',
+ 'tavhebrew': u'\u05EA',
+ 'tbar': u'\u0167',
+ 'tbopomofo': u'\u310A',
+ 'tcaron': u'\u0165',
+ 'tccurl': u'\u02A8',
+ 'tcedilla': u'\u0163',
+ 'tcheharabic': u'\u0686',
+ 'tchehfinalarabic': u'\uFB7B',
+ 'tchehinitialarabic': u'\uFB7C',
+ 'tchehmedialarabic': u'\uFB7D',
+ 'tchehmeeminitialarabic': u'\uFB7C\uFEE4',
+ 'tcircle': u'\u24E3',
+ 'tcircumflexbelow': u'\u1E71',
+ 'tcommaaccent': u'\u0163',
+ 'tdieresis': u'\u1E97',
+ 'tdotaccent': u'\u1E6B',
+ 'tdotbelow': u'\u1E6D',
+ 'tecyrillic': u'\u0442',
+ 'tedescendercyrillic': u'\u04AD',
+ 'teharabic': u'\u062A',
+ 'tehfinalarabic': u'\uFE96',
+ 'tehhahinitialarabic': u'\uFCA2',
+ 'tehhahisolatedarabic': u'\uFC0C',
+ 'tehinitialarabic': u'\uFE97',
+ 'tehiragana': u'\u3066',
+ 'tehjeeminitialarabic': u'\uFCA1',
+ 'tehjeemisolatedarabic': u'\uFC0B',
+ 'tehmarbutaarabic': u'\u0629',
+ 'tehmarbutafinalarabic': u'\uFE94',
+ 'tehmedialarabic': u'\uFE98',
+ 'tehmeeminitialarabic': u'\uFCA4',
+ 'tehmeemisolatedarabic': u'\uFC0E',
+ 'tehnoonfinalarabic': u'\uFC73',
+ 'tekatakana': u'\u30C6',
+ 'tekatakanahalfwidth': u'\uFF83',
+ 'telephone': u'\u2121',
+ 'telephoneblack': u'\u260E',
+ 'telishagedolahebrew': u'\u05A0',
+ 'telishaqetanahebrew': u'\u05A9',
+ 'tencircle': u'\u2469',
+ 'tenideographicparen': u'\u3229',
+ 'tenparen': u'\u247D',
+ 'tenperiod': u'\u2491',
+ 'tenroman': u'\u2179',
+ 'tesh': u'\u02A7',
+ 'tet': u'\u05D8',
+ 'tetdagesh': u'\uFB38',
+ 'tetdageshhebrew': u'\uFB38',
+ 'tethebrew': u'\u05D8',
+ 'tetsecyrillic': u'\u04B5',
+ 'tevirhebrew': u'\u059B',
+ 'tevirlefthebrew': u'\u059B',
+ 'thabengali': u'\u09A5',
+ 'thadeva': u'\u0925',
+ 'thagujarati': u'\u0AA5',
+ 'thagurmukhi': u'\u0A25',
+ 'thalarabic': u'\u0630',
+ 'thalfinalarabic': u'\uFEAC',
+ 'thanthakhatlowleftthai': u'\uF898',
+ 'thanthakhatlowrightthai': u'\uF897',
+ 'thanthakhatthai': u'\u0E4C',
+ 'thanthakhatupperleftthai': u'\uF896',
+ 'theharabic': u'\u062B',
+ 'thehfinalarabic': u'\uFE9A',
+ 'thehinitialarabic': u'\uFE9B',
+ 'thehmedialarabic': u'\uFE9C',
+ 'thereexists': u'\u2203',
+ 'therefore': u'\u2234',
+ 'theta': u'\u03B8',
+ 'theta1': u'\u03D1',
+ 'thetasymbolgreek': u'\u03D1',
+ 'thieuthacirclekorean': u'\u3279',
+ 'thieuthaparenkorean': u'\u3219',
+ 'thieuthcirclekorean': u'\u326B',
+ 'thieuthkorean': u'\u314C',
+ 'thieuthparenkorean': u'\u320B',
+ 'thirteencircle': u'\u246C',
+ 'thirteenparen': u'\u2480',
+ 'thirteenperiod': u'\u2494',
+ 'thonangmonthothai': u'\u0E11',
+ 'thook': u'\u01AD',
+ 'thophuthaothai': u'\u0E12',
+ 'thorn': u'\u00FE',
+ 'thothahanthai': u'\u0E17',
+ 'thothanthai': u'\u0E10',
+ 'thothongthai': u'\u0E18',
+ 'thothungthai': u'\u0E16',
+ 'thousandcyrillic': u'\u0482',
+ 'thousandsseparatorarabic': u'\u066C',
+ 'thousandsseparatorpersian': u'\u066C',
+ 'three': u'\u0033',
+ 'threearabic': u'\u0663',
+ 'threebengali': u'\u09E9',
+ 'threecircle': u'\u2462',
+ 'threecircleinversesansserif': u'\u278C',
+ 'threedeva': u'\u0969',
+ 'threeeighths': u'\u215C',
+ 'threegujarati': u'\u0AE9',
+ 'threegurmukhi': u'\u0A69',
+ 'threehackarabic': u'\u0663',
+ 'threehangzhou': u'\u3023',
+ 'threeideographicparen': u'\u3222',
+ 'threeinferior': u'\u2083',
+ 'threemonospace': u'\uFF13',
+ 'threenumeratorbengali': u'\u09F6',
+ 'threeoldstyle': u'\uF733',
+ 'threeparen': u'\u2476',
+ 'threeperiod': u'\u248A',
+ 'threepersian': u'\u06F3',
+ 'threequarters': u'\u00BE',
+ 'threequartersemdash': u'\uF6DE',
+ 'threeroman': u'\u2172',
+ 'threesuperior': u'\u00B3',
+ 'threethai': u'\u0E53',
+ 'thzsquare': u'\u3394',
+ 'tihiragana': u'\u3061',
+ 'tikatakana': u'\u30C1',
+ 'tikatakanahalfwidth': u'\uFF81',
+ 'tikeutacirclekorean': u'\u3270',
+ 'tikeutaparenkorean': u'\u3210',
+ 'tikeutcirclekorean': u'\u3262',
+ 'tikeutkorean': u'\u3137',
+ 'tikeutparenkorean': u'\u3202',
+ 'tilde': u'\u02DC',
+ 'tildebelowcmb': u'\u0330',
+ 'tildecmb': u'\u0303',
+ 'tildecomb': u'\u0303',
+ 'tildedoublecmb': u'\u0360',
+ 'tildeoperator': u'\u223C',
+ 'tildeoverlaycmb': u'\u0334',
+ 'tildeverticalcmb': u'\u033E',
+ 'timescircle': u'\u2297',
+ 'tipehahebrew': u'\u0596',
+ 'tipehalefthebrew': u'\u0596',
+ 'tippigurmukhi': u'\u0A70',
+ 'titlocyrilliccmb': u'\u0483',
+ 'tiwnarmenian': u'\u057F',
+ 'tlinebelow': u'\u1E6F',
+ 'tmonospace': u'\uFF54',
+ 'toarmenian': u'\u0569',
+ 'tohiragana': u'\u3068',
+ 'tokatakana': u'\u30C8',
+ 'tokatakanahalfwidth': u'\uFF84',
+ 'tonebarextrahighmod': u'\u02E5',
+ 'tonebarextralowmod': u'\u02E9',
+ 'tonebarhighmod': u'\u02E6',
+ 'tonebarlowmod': u'\u02E8',
+ 'tonebarmidmod': u'\u02E7',
+ 'tonefive': u'\u01BD',
+ 'tonesix': u'\u0185',
+ 'tonetwo': u'\u01A8',
+ 'tonos': u'\u0384',
+ 'tonsquare': u'\u3327',
+ 'topatakthai': u'\u0E0F',
+ 'tortoiseshellbracketleft': u'\u3014',
+ 'tortoiseshellbracketleftsmall': u'\uFE5D',
+ 'tortoiseshellbracketleftvertical': u'\uFE39',
+ 'tortoiseshellbracketright': u'\u3015',
+ 'tortoiseshellbracketrightsmall': u'\uFE5E',
+ 'tortoiseshellbracketrightvertical': u'\uFE3A',
+ 'totaothai': u'\u0E15',
+ 'tpalatalhook': u'\u01AB',
+ 'tparen': u'\u24AF',
+ 'trademark': u'\u2122',
+ 'trademarksans': u'\uF8EA',
+ 'trademarkserif': u'\uF6DB',
+ 'tretroflexhook': u'\u0288',
+ 'triagdn': u'\u25BC',
+ 'triaglf': u'\u25C4',
+ 'triagrt': u'\u25BA',
+ 'triagup': u'\u25B2',
+ 'ts': u'\u02A6',
+ 'tsadi': u'\u05E6',
+ 'tsadidagesh': u'\uFB46',
+ 'tsadidageshhebrew': u'\uFB46',
+ 'tsadihebrew': u'\u05E6',
+ 'tsecyrillic': u'\u0446',
+ 'tsere': u'\u05B5',
+ 'tsere12': u'\u05B5',
+ 'tsere1e': u'\u05B5',
+ 'tsere2b': u'\u05B5',
+ 'tserehebrew': u'\u05B5',
+ 'tserenarrowhebrew': u'\u05B5',
+ 'tserequarterhebrew': u'\u05B5',
+ 'tserewidehebrew': u'\u05B5',
+ 'tshecyrillic': u'\u045B',
+ 'tsuperior': u'\uF6F3',
+ 'ttabengali': u'\u099F',
+ 'ttadeva': u'\u091F',
+ 'ttagujarati': u'\u0A9F',
+ 'ttagurmukhi': u'\u0A1F',
+ 'tteharabic': u'\u0679',
+ 'ttehfinalarabic': u'\uFB67',
+ 'ttehinitialarabic': u'\uFB68',
+ 'ttehmedialarabic': u'\uFB69',
+ 'tthabengali': u'\u09A0',
+ 'tthadeva': u'\u0920',
+ 'tthagujarati': u'\u0AA0',
+ 'tthagurmukhi': u'\u0A20',
+ 'tturned': u'\u0287',
+ 'tuhiragana': u'\u3064',
+ 'tukatakana': u'\u30C4',
+ 'tukatakanahalfwidth': u'\uFF82',
+ 'tusmallhiragana': u'\u3063',
+ 'tusmallkatakana': u'\u30C3',
+ 'tusmallkatakanahalfwidth': u'\uFF6F',
+ 'twelvecircle': u'\u246B',
+ 'twelveparen': u'\u247F',
+ 'twelveperiod': u'\u2493',
+ 'twelveroman': u'\u217B',
+ 'twentycircle': u'\u2473',
+ 'twentyhangzhou': u'\u5344',
+ 'twentyparen': u'\u2487',
+ 'twentyperiod': u'\u249B',
+ 'two': u'\u0032',
+ 'twoarabic': u'\u0662',
+ 'twobengali': u'\u09E8',
+ 'twocircle': u'\u2461',
+ 'twocircleinversesansserif': u'\u278B',
+ 'twodeva': u'\u0968',
+ 'twodotenleader': u'\u2025',
+ 'twodotleader': u'\u2025',
+ 'twodotleadervertical': u'\uFE30',
+ 'twogujarati': u'\u0AE8',
+ 'twogurmukhi': u'\u0A68',
+ 'twohackarabic': u'\u0662',
+ 'twohangzhou': u'\u3022',
+ 'twoideographicparen': u'\u3221',
+ 'twoinferior': u'\u2082',
+ 'twomonospace': u'\uFF12',
+ 'twonumeratorbengali': u'\u09F5',
+ 'twooldstyle': u'\uF732',
+ 'twoparen': u'\u2475',
+ 'twoperiod': u'\u2489',
+ 'twopersian': u'\u06F2',
+ 'tworoman': u'\u2171',
+ 'twostroke': u'\u01BB',
+ 'twosuperior': u'\u00B2',
+ 'twothai': u'\u0E52',
+ 'twothirds': u'\u2154',
+ 'u': u'\u0075',
+ 'uacute': u'\u00FA',
+ 'ubar': u'\u0289',
+ 'ubengali': u'\u0989',
+ 'ubopomofo': u'\u3128',
+ 'ubreve': u'\u016D',
+ 'ucaron': u'\u01D4',
+ 'ucircle': u'\u24E4',
+ 'ucircumflex': u'\u00FB',
+ 'ucircumflexbelow': u'\u1E77',
+ 'ucyrillic': u'\u0443',
+ 'udattadeva': u'\u0951',
+ 'udblacute': u'\u0171',
+ 'udblgrave': u'\u0215',
+ 'udeva': u'\u0909',
+ 'udieresis': u'\u00FC',
+ 'udieresisacute': u'\u01D8',
+ 'udieresisbelow': u'\u1E73',
+ 'udieresiscaron': u'\u01DA',
+ 'udieresiscyrillic': u'\u04F1',
+ 'udieresisgrave': u'\u01DC',
+ 'udieresismacron': u'\u01D6',
+ 'udotbelow': u'\u1EE5',
+ 'ugrave': u'\u00F9',
+ 'ugujarati': u'\u0A89',
+ 'ugurmukhi': u'\u0A09',
+ 'uhiragana': u'\u3046',
+ 'uhookabove': u'\u1EE7',
+ 'uhorn': u'\u01B0',
+ 'uhornacute': u'\u1EE9',
+ 'uhorndotbelow': u'\u1EF1',
+ 'uhorngrave': u'\u1EEB',
+ 'uhornhookabove': u'\u1EED',
+ 'uhorntilde': u'\u1EEF',
+ 'uhungarumlaut': u'\u0171',
+ 'uhungarumlautcyrillic': u'\u04F3',
+ 'uinvertedbreve': u'\u0217',
+ 'ukatakana': u'\u30A6',
+ 'ukatakanahalfwidth': u'\uFF73',
+ 'ukcyrillic': u'\u0479',
+ 'ukorean': u'\u315C',
+ 'umacron': u'\u016B',
+ 'umacroncyrillic': u'\u04EF',
+ 'umacrondieresis': u'\u1E7B',
+ 'umatragurmukhi': u'\u0A41',
+ 'umonospace': u'\uFF55',
+ 'underscore': u'\u005F',
+ 'underscoredbl': u'\u2017',
+ 'underscoremonospace': u'\uFF3F',
+ 'underscorevertical': u'\uFE33',
+ 'underscorewavy': u'\uFE4F',
+ 'union': u'\u222A',
+ 'universal': u'\u2200',
+ 'uogonek': u'\u0173',
+ 'uparen': u'\u24B0',
+ 'upblock': u'\u2580',
+ 'upperdothebrew': u'\u05C4',
+ 'upsilon': u'\u03C5',
+ 'upsilondieresis': u'\u03CB',
+ 'upsilondieresistonos': u'\u03B0',
+ 'upsilonlatin': u'\u028A',
+ 'upsilontonos': u'\u03CD',
+ 'uptackbelowcmb': u'\u031D',
+ 'uptackmod': u'\u02D4',
+ 'uragurmukhi': u'\u0A73',
+ 'uring': u'\u016F',
+ 'ushortcyrillic': u'\u045E',
+ 'usmallhiragana': u'\u3045',
+ 'usmallkatakana': u'\u30A5',
+ 'usmallkatakanahalfwidth': u'\uFF69',
+ 'ustraightcyrillic': u'\u04AF',
+ 'ustraightstrokecyrillic': u'\u04B1',
+ 'utilde': u'\u0169',
+ 'utildeacute': u'\u1E79',
+ 'utildebelow': u'\u1E75',
+ 'uubengali': u'\u098A',
+ 'uudeva': u'\u090A',
+ 'uugujarati': u'\u0A8A',
+ 'uugurmukhi': u'\u0A0A',
+ 'uumatragurmukhi': u'\u0A42',
+ 'uuvowelsignbengali': u'\u09C2',
+ 'uuvowelsigndeva': u'\u0942',
+ 'uuvowelsigngujarati': u'\u0AC2',
+ 'uvowelsignbengali': u'\u09C1',
+ 'uvowelsigndeva': u'\u0941',
+ 'uvowelsigngujarati': u'\u0AC1',
+ 'v': u'\u0076',
+ 'vadeva': u'\u0935',
+ 'vagujarati': u'\u0AB5',
+ 'vagurmukhi': u'\u0A35',
+ 'vakatakana': u'\u30F7',
+ 'vav': u'\u05D5',
+ 'vavdagesh': u'\uFB35',
+ 'vavdagesh65': u'\uFB35',
+ 'vavdageshhebrew': u'\uFB35',
+ 'vavhebrew': u'\u05D5',
+ 'vavholam': u'\uFB4B',
+ 'vavholamhebrew': u'\uFB4B',
+ 'vavvavhebrew': u'\u05F0',
+ 'vavyodhebrew': u'\u05F1',
+ 'vcircle': u'\u24E5',
+ 'vdotbelow': u'\u1E7F',
+ 'vecyrillic': u'\u0432',
+ 'veharabic': u'\u06A4',
+ 'vehfinalarabic': u'\uFB6B',
+ 'vehinitialarabic': u'\uFB6C',
+ 'vehmedialarabic': u'\uFB6D',
+ 'vekatakana': u'\u30F9',
+ 'venus': u'\u2640',
+ 'verticalbar': u'\u007C',
+ 'verticallineabovecmb': u'\u030D',
+ 'verticallinebelowcmb': u'\u0329',
+ 'verticallinelowmod': u'\u02CC',
+ 'verticallinemod': u'\u02C8',
+ 'vewarmenian': u'\u057E',
+ 'vhook': u'\u028B',
+ 'vikatakana': u'\u30F8',
+ 'viramabengali': u'\u09CD',
+ 'viramadeva': u'\u094D',
+ 'viramagujarati': u'\u0ACD',
+ 'visargabengali': u'\u0983',
+ 'visargadeva': u'\u0903',
+ 'visargagujarati': u'\u0A83',
+ 'vmonospace': u'\uFF56',
+ 'voarmenian': u'\u0578',
+ 'voicediterationhiragana': u'\u309E',
+ 'voicediterationkatakana': u'\u30FE',
+ 'voicedmarkkana': u'\u309B',
+ 'voicedmarkkanahalfwidth': u'\uFF9E',
+ 'vokatakana': u'\u30FA',
+ 'vparen': u'\u24B1',
+ 'vtilde': u'\u1E7D',
+ 'vturned': u'\u028C',
+ 'vuhiragana': u'\u3094',
+ 'vukatakana': u'\u30F4',
+ 'w': u'\u0077',
+ 'wacute': u'\u1E83',
+ 'waekorean': u'\u3159',
+ 'wahiragana': u'\u308F',
+ 'wakatakana': u'\u30EF',
+ 'wakatakanahalfwidth': u'\uFF9C',
+ 'wakorean': u'\u3158',
+ 'wasmallhiragana': u'\u308E',
+ 'wasmallkatakana': u'\u30EE',
+ 'wattosquare': u'\u3357',
+ 'wavedash': u'\u301C',
+ 'wavyunderscorevertical': u'\uFE34',
+ 'wawarabic': u'\u0648',
+ 'wawfinalarabic': u'\uFEEE',
+ 'wawhamzaabovearabic': u'\u0624',
+ 'wawhamzaabovefinalarabic': u'\uFE86',
+ 'wbsquare': u'\u33DD',
+ 'wcircle': u'\u24E6',
+ 'wcircumflex': u'\u0175',
+ 'wdieresis': u'\u1E85',
+ 'wdotaccent': u'\u1E87',
+ 'wdotbelow': u'\u1E89',
+ 'wehiragana': u'\u3091',
+ 'weierstrass': u'\u2118',
+ 'wekatakana': u'\u30F1',
+ 'wekorean': u'\u315E',
+ 'weokorean': u'\u315D',
+ 'wgrave': u'\u1E81',
+ 'whitebullet': u'\u25E6',
+ 'whitecircle': u'\u25CB',
+ 'whitecircleinverse': u'\u25D9',
+ 'whitecornerbracketleft': u'\u300E',
+ 'whitecornerbracketleftvertical': u'\uFE43',
+ 'whitecornerbracketright': u'\u300F',
+ 'whitecornerbracketrightvertical': u'\uFE44',
+ 'whitediamond': u'\u25C7',
+ 'whitediamondcontainingblacksmalldiamond': u'\u25C8',
+ 'whitedownpointingsmalltriangle': u'\u25BF',
+ 'whitedownpointingtriangle': u'\u25BD',
+ 'whiteleftpointingsmalltriangle': u'\u25C3',
+ 'whiteleftpointingtriangle': u'\u25C1',
+ 'whitelenticularbracketleft': u'\u3016',
+ 'whitelenticularbracketright': u'\u3017',
+ 'whiterightpointingsmalltriangle': u'\u25B9',
+ 'whiterightpointingtriangle': u'\u25B7',
+ 'whitesmallsquare': u'\u25AB',
+ 'whitesmilingface': u'\u263A',
+ 'whitesquare': u'\u25A1',
+ 'whitestar': u'\u2606',
+ 'whitetelephone': u'\u260F',
+ 'whitetortoiseshellbracketleft': u'\u3018',
+ 'whitetortoiseshellbracketright': u'\u3019',
+ 'whiteuppointingsmalltriangle': u'\u25B5',
+ 'whiteuppointingtriangle': u'\u25B3',
+ 'wihiragana': u'\u3090',
+ 'wikatakana': u'\u30F0',
+ 'wikorean': u'\u315F',
+ 'wmonospace': u'\uFF57',
+ 'wohiragana': u'\u3092',
+ 'wokatakana': u'\u30F2',
+ 'wokatakanahalfwidth': u'\uFF66',
+ 'won': u'\u20A9',
+ 'wonmonospace': u'\uFFE6',
+ 'wowaenthai': u'\u0E27',
+ 'wparen': u'\u24B2',
+ 'wring': u'\u1E98',
+ 'wsuperior': u'\u02B7',
+ 'wturned': u'\u028D',
+ 'wynn': u'\u01BF',
+ 'x': u'\u0078',
+ 'xabovecmb': u'\u033D',
+ 'xbopomofo': u'\u3112',
+ 'xcircle': u'\u24E7',
+ 'xdieresis': u'\u1E8D',
+ 'xdotaccent': u'\u1E8B',
+ 'xeharmenian': u'\u056D',
+ 'xi': u'\u03BE',
+ 'xmonospace': u'\uFF58',
+ 'xparen': u'\u24B3',
+ 'xsuperior': u'\u02E3',
+ 'y': u'\u0079',
+ 'yaadosquare': u'\u334E',
+ 'yabengali': u'\u09AF',
+ 'yacute': u'\u00FD',
+ 'yadeva': u'\u092F',
+ 'yaekorean': u'\u3152',
+ 'yagujarati': u'\u0AAF',
+ 'yagurmukhi': u'\u0A2F',
+ 'yahiragana': u'\u3084',
+ 'yakatakana': u'\u30E4',
+ 'yakatakanahalfwidth': u'\uFF94',
+ 'yakorean': u'\u3151',
+ 'yamakkanthai': u'\u0E4E',
+ 'yasmallhiragana': u'\u3083',
+ 'yasmallkatakana': u'\u30E3',
+ 'yasmallkatakanahalfwidth': u'\uFF6C',
+ 'yatcyrillic': u'\u0463',
+ 'ycircle': u'\u24E8',
+ 'ycircumflex': u'\u0177',
+ 'ydieresis': u'\u00FF',
+ 'ydotaccent': u'\u1E8F',
+ 'ydotbelow': u'\u1EF5',
+ 'yeharabic': u'\u064A',
+ 'yehbarreearabic': u'\u06D2',
+ 'yehbarreefinalarabic': u'\uFBAF',
+ 'yehfinalarabic': u'\uFEF2',
+ 'yehhamzaabovearabic': u'\u0626',
+ 'yehhamzaabovefinalarabic': u'\uFE8A',
+ 'yehhamzaaboveinitialarabic': u'\uFE8B',
+ 'yehhamzaabovemedialarabic': u'\uFE8C',
+ 'yehinitialarabic': u'\uFEF3',
+ 'yehmedialarabic': u'\uFEF4',
+ 'yehmeeminitialarabic': u'\uFCDD',
+ 'yehmeemisolatedarabic': u'\uFC58',
+ 'yehnoonfinalarabic': u'\uFC94',
+ 'yehthreedotsbelowarabic': u'\u06D1',
+ 'yekorean': u'\u3156',
+ 'yen': u'\u00A5',
+ 'yenmonospace': u'\uFFE5',
+ 'yeokorean': u'\u3155',
+ 'yeorinhieuhkorean': u'\u3186',
+ 'yerahbenyomohebrew': u'\u05AA',
+ 'yerahbenyomolefthebrew': u'\u05AA',
+ 'yericyrillic': u'\u044B',
+ 'yerudieresiscyrillic': u'\u04F9',
+ 'yesieungkorean': u'\u3181',
+ 'yesieungpansioskorean': u'\u3183',
+ 'yesieungsioskorean': u'\u3182',
+ 'yetivhebrew': u'\u059A',
+ 'ygrave': u'\u1EF3',
+ 'yhook': u'\u01B4',
+ 'yhookabove': u'\u1EF7',
+ 'yiarmenian': u'\u0575',
+ 'yicyrillic': u'\u0457',
+ 'yikorean': u'\u3162',
+ 'yinyang': u'\u262F',
+ 'yiwnarmenian': u'\u0582',
+ 'ymonospace': u'\uFF59',
+ 'yod': u'\u05D9',
+ 'yoddagesh': u'\uFB39',
+ 'yoddageshhebrew': u'\uFB39',
+ 'yodhebrew': u'\u05D9',
+ 'yodyodhebrew': u'\u05F2',
+ 'yodyodpatahhebrew': u'\uFB1F',
+ 'yohiragana': u'\u3088',
+ 'yoikorean': u'\u3189',
+ 'yokatakana': u'\u30E8',
+ 'yokatakanahalfwidth': u'\uFF96',
+ 'yokorean': u'\u315B',
+ 'yosmallhiragana': u'\u3087',
+ 'yosmallkatakana': u'\u30E7',
+ 'yosmallkatakanahalfwidth': u'\uFF6E',
+ 'yotgreek': u'\u03F3',
+ 'yoyaekorean': u'\u3188',
+ 'yoyakorean': u'\u3187',
+ 'yoyakthai': u'\u0E22',
+ 'yoyingthai': u'\u0E0D',
+ 'yparen': u'\u24B4',
+ 'ypogegrammeni': u'\u037A',
+ 'ypogegrammenigreekcmb': u'\u0345',
+ 'yr': u'\u01A6',
+ 'yring': u'\u1E99',
+ 'ysuperior': u'\u02B8',
+ 'ytilde': u'\u1EF9',
+ 'yturned': u'\u028E',
+ 'yuhiragana': u'\u3086',
+ 'yuikorean': u'\u318C',
+ 'yukatakana': u'\u30E6',
+ 'yukatakanahalfwidth': u'\uFF95',
+ 'yukorean': u'\u3160',
+ 'yusbigcyrillic': u'\u046B',
+ 'yusbigiotifiedcyrillic': u'\u046D',
+ 'yuslittlecyrillic': u'\u0467',
+ 'yuslittleiotifiedcyrillic': u'\u0469',
+ 'yusmallhiragana': u'\u3085',
+ 'yusmallkatakana': u'\u30E5',
+ 'yusmallkatakanahalfwidth': u'\uFF6D',
+ 'yuyekorean': u'\u318B',
+ 'yuyeokorean': u'\u318A',
+ 'yyabengali': u'\u09DF',
+ 'yyadeva': u'\u095F',
+ 'z': u'\u007A',
+ 'zaarmenian': u'\u0566',
+ 'zacute': u'\u017A',
+ 'zadeva': u'\u095B',
+ 'zagurmukhi': u'\u0A5B',
+ 'zaharabic': u'\u0638',
+ 'zahfinalarabic': u'\uFEC6',
+ 'zahinitialarabic': u'\uFEC7',
+ 'zahiragana': u'\u3056',
+ 'zahmedialarabic': u'\uFEC8',
+ 'zainarabic': u'\u0632',
+ 'zainfinalarabic': u'\uFEB0',
+ 'zakatakana': u'\u30B6',
+ 'zaqefgadolhebrew': u'\u0595',
+ 'zaqefqatanhebrew': u'\u0594',
+ 'zarqahebrew': u'\u0598',
+ 'zayin': u'\u05D6',
+ 'zayindagesh': u'\uFB36',
+ 'zayindageshhebrew': u'\uFB36',
+ 'zayinhebrew': u'\u05D6',
+ 'zbopomofo': u'\u3117',
+ 'zcaron': u'\u017E',
+ 'zcircle': u'\u24E9',
+ 'zcircumflex': u'\u1E91',
+ 'zcurl': u'\u0291',
+ 'zdot': u'\u017C',
+ 'zdotaccent': u'\u017C',
+ 'zdotbelow': u'\u1E93',
+ 'zecyrillic': u'\u0437',
+ 'zedescendercyrillic': u'\u0499',
+ 'zedieresiscyrillic': u'\u04DF',
+ 'zehiragana': u'\u305C',
+ 'zekatakana': u'\u30BC',
+ 'zero': u'\u0030',
+ 'zeroarabic': u'\u0660',
+ 'zerobengali': u'\u09E6',
+ 'zerodeva': u'\u0966',
+ 'zerogujarati': u'\u0AE6',
+ 'zerogurmukhi': u'\u0A66',
+ 'zerohackarabic': u'\u0660',
+ 'zeroinferior': u'\u2080',
+ 'zeromonospace': u'\uFF10',
+ 'zerooldstyle': u'\uF730',
+ 'zeropersian': u'\u06F0',
+ 'zerosuperior': u'\u2070',
+ 'zerothai': u'\u0E50',
+ 'zerowidthjoiner': u'\uFEFF',
+ 'zerowidthnonjoiner': u'\u200C',
+ 'zerowidthspace': u'\u200B',
+ 'zeta': u'\u03B6',
+ 'zhbopomofo': u'\u3113',
+ 'zhearmenian': u'\u056A',
+ 'zhebrevecyrillic': u'\u04C2',
+ 'zhecyrillic': u'\u0436',
+ 'zhedescendercyrillic': u'\u0497',
+ 'zhedieresiscyrillic': u'\u04DD',
+ 'zihiragana': u'\u3058',
+ 'zikatakana': u'\u30B8',
+ 'zinorhebrew': u'\u05AE',
+ 'zlinebelow': u'\u1E95',
+ 'zmonospace': u'\uFF5A',
+ 'zohiragana': u'\u305E',
+ 'zokatakana': u'\u30BE',
+ 'zparen': u'\u24B5',
+ 'zretroflexhook': u'\u0290',
+ 'zstroke': u'\u01B6',
+ 'zuhiragana': u'\u305A',
+ 'zukatakana': u'\u30BA',
}
-#--end
+# --end
diff --git a/pdfminer/image.py b/pdfminer/image.py
index 34f27adf..b10983f3 100644
--- a/pdfminer/image.py
+++ b/pdfminer/image.py
@@ -10,7 +10,7 @@
def align32(x):
- return ((x+3)//4)*4
+ return ((x + 3) // 4) * 4
## BMPWriter
@@ -30,12 +30,14 @@ def __init__(self, fp, bits, width, height):
ncols = 0
else:
raise ValueError(bits)
- self.linesize = align32((self.width*self.bits+7)//8)
+ self.linesize = align32((self.width * self.bits + 7) // 8)
self.datasize = self.linesize * self.height
- headersize = 14+40+ncols*4
- info = struct.pack('' %
- (self.char_margin, self.line_margin, self.word_margin, self.all_texts))
+ return (
+ '' %
+ (self.char_margin, self.line_margin, self.word_margin,
+ self.all_texts))
-## LTItem
-##
+# LTItem
+#
class LTItem:
def analyze(self, laparams):
@@ -63,8 +66,8 @@ def analyze(self, laparams):
return
-## LTText
-##
+# LTText
+#
class LTText:
def __repr__(self):
@@ -75,8 +78,8 @@ def get_text(self):
raise NotImplementedError
-## LTComponent
-##
+# LTComponent
+#
class LTComponent(LTItem):
def __init__(self, bbox):
@@ -91,10 +94,13 @@ def __repr__(self):
# Disable comparison.
def __lt__(self, _):
raise ValueError
+
def __le__(self, _):
raise ValueError
+
def __gt__(self, _):
raise ValueError
+
def __ge__(self, _):
raise ValueError
@@ -104,8 +110,8 @@ def set_bbox(self, bbox):
self.y0 = y0
self.x1 = x1
self.y1 = y1
- self.width = x1-x0
- self.height = y1-y0
+ self.width = x1 - x0
+ self.height = y1 - y0
self.bbox = bbox
return
@@ -121,12 +127,12 @@ def hdistance(self, obj):
if self.is_hoverlap(obj):
return 0
else:
- return min(abs(self.x0-obj.x1), abs(self.x1-obj.x0))
+ return min(abs(self.x0 - obj.x1), abs(self.x1 - obj.x0))
def hoverlap(self, obj):
assert isinstance(obj, LTComponent)
if self.is_hoverlap(obj):
- return min(abs(self.x0-obj.x1), abs(self.x1-obj.x0))
+ return min(abs(self.x0 - obj.x1), abs(self.x1 - obj.x0))
else:
return 0
@@ -139,18 +145,18 @@ def vdistance(self, obj):
if self.is_voverlap(obj):
return 0
else:
- return min(abs(self.y0-obj.y1), abs(self.y1-obj.y0))
+ return min(abs(self.y0 - obj.y1), abs(self.y1 - obj.y0))
def voverlap(self, obj):
assert isinstance(obj, LTComponent)
if self.is_voverlap(obj):
- return min(abs(self.y0-obj.y1), abs(self.y1-obj.y0))
+ return min(abs(self.y0 - obj.y1), abs(self.y1 - obj.y0))
else:
return 0
-## LTCurve
-##
+# LTCurve
+#
class LTCurve(LTComponent):
def __init__(self, linewidth, pts):
@@ -163,8 +169,8 @@ def get_pts(self):
return ','.join('%.3f,%.3f' % p for p in self.pts)
-## LTLine
-##
+# LTLine
+#
class LTLine(LTCurve):
def __init__(self, linewidth, p0, p1):
@@ -172,18 +178,19 @@ def __init__(self, linewidth, p0, p1):
return
-## LTRect
-##
+# LTRect
+#
class LTRect(LTCurve):
def __init__(self, linewidth, bbox):
(x0, y0, x1, y1) = bbox
- LTCurve.__init__(self, linewidth, [(x0, y0), (x1, y0), (x1, y1), (x0, y1)])
+ LTCurve.__init__(self, linewidth,
+ [(x0, y0), (x1, y0), (x1, y1), (x0, y1)])
return
-## LTImage
-##
+# LTImage
+#
class LTImage(LTComponent):
def __init__(self, name, stream, bbox):
@@ -205,8 +212,8 @@ def __repr__(self):
bbox2str(self.bbox), self.srcsize))
-## LTAnno
-##
+# LTAnno
+#
class LTAnno(LTItem, LTText):
def __init__(self, text):
@@ -217,8 +224,8 @@ def get_text(self):
return self._text
-## LTChar
-##
+# LTChar
+#
class LTChar(LTComponent, LTText):
def __init__(self, matrix, font, fontsize, scaling, rise,
@@ -240,17 +247,17 @@ def __init__(self, matrix, font, fontsize, scaling, rise,
vy = (1000 - vy) * fontsize * .001
tx = -vx
ty = vy + rise
- bll = (tx, ty+self.adv)
- bur = (tx+width, ty)
+ bll = (tx, ty + self.adv)
+ bur = (tx + width, ty)
else:
# horizontal
height = font.get_height() * fontsize
descent = font.get_descent() * fontsize
ty = descent + rise
bll = (0, ty)
- bur = (self.adv, ty+height)
+ bur = (self.adv, ty + height)
(a, b, c, d, e, f) = self.matrix
- self.upright = (0 < a*d*scaling and b*c <= 0)
+ self.upright = (0 < a * d * scaling and b * c <= 0)
(x0, y0) = apply_matrix_pt(self.matrix, bll)
(x1, y1) = apply_matrix_pt(self.matrix, bur)
if x1 < x0:
@@ -278,8 +285,8 @@ def is_compatible(self, obj):
return True
-## LTContainer
-##
+# LTContainer
+#
class LTContainer(LTComponent):
def __init__(self, bbox):
@@ -308,8 +315,8 @@ def analyze(self, laparams):
return
-## LTExpandableContainer
-##
+# LTExpandableContainer
+#
class LTExpandableContainer(LTContainer):
def __init__(self):
@@ -323,8 +330,8 @@ def add(self, obj):
return
-## LTTextContainer
-##
+# LTTextContainer
+#
class LTTextContainer(LTExpandableContainer, LTText):
def __init__(self):
@@ -333,11 +340,12 @@ def __init__(self):
return
def get_text(self):
- return ''.join(obj.get_text() for obj in self if isinstance(obj, LTText))
+ return ''.join(
+ obj.get_text() for obj in self if isinstance(obj, LTText))
-## LTTextLine
-##
+# LTTextLine
+#
class LTTextLine(LTTextContainer):
def __init__(self, word_margin):
@@ -369,20 +377,20 @@ def __init__(self, word_margin):
def add(self, obj):
if isinstance(obj, LTChar) and self.word_margin:
margin = self.word_margin * max(obj.width, obj.height)
- if self._x1 < obj.x0-margin:
+ if self._x1 < obj.x0 - margin:
LTContainer.add(self, LTAnno(' '))
self._x1 = obj.x1
LTTextLine.add(self, obj)
return
def find_neighbors(self, plane, ratio):
- d = ratio*self.height
- objs = plane.find((self.x0, self.y0-d, self.x1, self.y1+d))
+ d = ratio * self.height
+ objs = plane.find((self.x0, self.y0 - d, self.x1, self.y1 + d))
return [obj for obj in objs
if (isinstance(obj, LTTextLineHorizontal) and
- abs(obj.height-self.height) < d and
- (abs(obj.x0-self.x0) < d or
- abs(obj.x1-self.x1) < d))]
+ abs(obj.height - self.height) < d and
+ (abs(obj.x0 - self.x0) < d or
+ abs(obj.x1 - self.x1) < d))]
class LTTextLineVertical(LTTextLine):
@@ -395,27 +403,27 @@ def __init__(self, word_margin):
def add(self, obj):
if isinstance(obj, LTChar) and self.word_margin:
margin = self.word_margin * max(obj.width, obj.height)
- if obj.y1+margin < self._y0:
+ if obj.y1 + margin < self._y0:
LTContainer.add(self, LTAnno(' '))
self._y0 = obj.y0
LTTextLine.add(self, obj)
return
def find_neighbors(self, plane, ratio):
- d = ratio*self.width
- objs = plane.find((self.x0-d, self.y0, self.x1+d, self.y1))
+ d = ratio * self.width
+ objs = plane.find((self.x0 - d, self.y0, self.x1 + d, self.y1))
return [obj for obj in objs
if (isinstance(obj, LTTextLineVertical) and
- abs(obj.width-self.width) < d and
- (abs(obj.y0-self.y0) < d or
- abs(obj.y1-self.y1) < d))]
+ abs(obj.width - self.width) < d and
+ (abs(obj.y0 - self.y0) < d or
+ abs(obj.y1 - self.y1) < d))]
-## LTTextBox
-##
-## A set of text objects that are grouped within
-## a certain rectangular area.
-##
+# LTTextBox
+#
+# A set of text objects that are grouped within
+# a certain rectangular area.
+#
class LTTextBox(LTTextContainer):
def __init__(self):
@@ -451,8 +459,8 @@ def get_writing_mode(self):
return 'tb-rl'
-## LTTextGroup
-##
+# LTTextGroup
+#
class LTTextGroup(LTTextContainer):
def __init__(self, objs):
@@ -466,9 +474,11 @@ class LTTextGroupLRTB(LTTextGroup):
def analyze(self, laparams):
LTTextGroup.analyze(self, laparams)
# reorder the objects from top-left to bottom-right.
- self._objs = csort(self._objs, key=lambda obj:
- (1-laparams.boxes_flow)*(obj.x0) -
- (1+laparams.boxes_flow)*(obj.y0+obj.y1))
+ self._objs = \
+ csort(self._objs,
+ key=lambda obj:
+ (1 - laparams.boxes_flow)
+ * (obj.x0) - (1 + laparams.boxes_flow) * (obj.y0 + obj.y1))
return
@@ -477,14 +487,15 @@ class LTTextGroupTBRL(LTTextGroup):
def analyze(self, laparams):
LTTextGroup.analyze(self, laparams)
# reorder the objects from top-right to bottom-left.
- self._objs = csort(self._objs, key=lambda obj:
- -(1+laparams.boxes_flow)*(obj.x0+obj.x1)
- - (1-laparams.boxes_flow)*(obj.y1))
+ self._objs = csort(self._objs,
+ key=lambda obj:
+ - (1 + laparams.boxes_flow) * (obj.x0 + obj.x1)
+ - (1 - laparams.boxes_flow) * (obj.y1))
return
-## LTLayoutContainer
-##
+# LTLayoutContainer
+#
class LTLayoutContainer(LTContainer):
def __init__(self, bbox):
@@ -510,7 +521,8 @@ def group_objects(self, laparams, objs):
# (char_margin)
halign = (obj0.is_compatible(obj1) and
obj0.is_voverlap(obj1) and
- (min(obj0.height, obj1.height) * laparams.line_overlap <
+ (min(obj0.height,
+ obj1.height) * laparams.line_overlap <
obj0.voverlap(obj1)) and
(obj0.hdistance(obj1) <
max(obj0.width, obj1.width) * laparams.char_margin))
@@ -532,13 +544,15 @@ def group_objects(self, laparams, objs):
valign = (laparams.detect_vertical and
obj0.is_compatible(obj1) and
obj0.is_hoverlap(obj1) and
- (min(obj0.width, obj1.width) * laparams.line_overlap <
+ (min(obj0.width,
+ obj1.width) * laparams.line_overlap <
obj0.hoverlap(obj1)) and
(obj0.vdistance(obj1) <
- max(obj0.height, obj1.height) * laparams.char_margin))
+ max(obj0.height,
+ obj1.height) * laparams.char_margin))
if ((halign and isinstance(line, LTTextLineHorizontal)) or
- (valign and isinstance(line, LTTextLineVertical))):
+ (valign and isinstance(line, LTTextLineVertical))):
line.add(obj1)
elif line is not None:
yield line
@@ -571,7 +585,8 @@ def group_textlines(self, laparams, lines):
boxes = {}
for line in lines:
neighbors = line.find_neighbors(plane, laparams.line_margin)
- if line not in neighbors: continue
+ if line not in neighbors:
+ continue
members = []
for obj1 in neighbors:
members.append(obj1)
@@ -586,7 +601,8 @@ def group_textlines(self, laparams, lines):
boxes[obj] = box
done = set()
for line in lines:
- if line not in boxes: continue
+ if line not in boxes:
+ continue
box = boxes[line]
if box in done:
continue
@@ -615,7 +631,9 @@ def dist(obj1, obj2):
y0 = min(obj1.y0, obj2.y0)
x1 = max(obj1.x1, obj2.x1)
y1 = max(obj1.y1, obj2.y1)
- return ((x1-x0)*(y1-y0) - obj1.width*obj1.height - obj2.width*obj2.height)
+ return ((x1 - x0) * (
+ y1 - y0) - obj1.width * obj1.height - obj2.width *
+ obj2.height)
def isany(obj1, obj2):
"""Check if there's any other object between obj1 and obj2.
@@ -628,14 +646,14 @@ def isany(obj1, obj2):
return objs.difference((obj1, obj2))
def key_obj(t):
- (c,d,_,_) = t
- return (c,d)
+ (c, d, _, _) = t
+ return (c, d)
# XXX this still takes O(n^2) :(
dists = []
for i in range(len(boxes)):
obj1 = boxes[i]
- for j in range(i+1, len(boxes)):
+ for j in range(i + 1, len(boxes)):
obj2 = boxes[j]
dists.append((0, dist(obj1, obj2), obj1, obj2))
# We could use dists.sort(), but it would randomize the test result.
@@ -648,14 +666,14 @@ def key_obj(t):
dists.append((1, d, obj1, obj2))
continue
if (isinstance(obj1, (LTTextBoxVertical, LTTextGroupTBRL)) or
- isinstance(obj2, (LTTextBoxVertical, LTTextGroupTBRL))):
+ isinstance(obj2, (LTTextBoxVertical, LTTextGroupTBRL))):
group = LTTextGroupTBRL([obj1, obj2])
else:
group = LTTextGroupLRTB([obj1, obj2])
plane.remove(obj1)
plane.remove(obj2)
- dists = [ (c,d,obj1,obj2) for (c,d,obj1,obj2) in dists
- if (obj1 in plane and obj2 in plane) ]
+ dists = [(c, d, obj1, obj2) for (c, d, obj1, obj2) in dists
+ if (obj1 in plane and obj2 in plane)]
for other in plane:
dists.append((0, dist(group, other), group, other))
dists = csort(dists, key=key_obj)
@@ -666,7 +684,8 @@ def key_obj(t):
def analyze(self, laparams):
# textobjs is a list of LTChar objects, i.e.
# it has all the individual characters in the page.
- (textobjs, otherobjs) = fsplit(lambda obj: isinstance(obj, LTChar), self)
+ (textobjs, otherobjs) = fsplit(lambda obj: isinstance(obj, LTChar),
+ self)
for obj in otherobjs:
obj.analyze(laparams)
if not textobjs:
@@ -676,7 +695,8 @@ def analyze(self, laparams):
for obj in empties:
obj.analyze(laparams)
textboxes = list(self.group_textlines(laparams, textlines))
- if -1 <= laparams.boxes_flow and laparams.boxes_flow <= +1 and textboxes:
+ if -1 <= laparams.boxes_flow and laparams.boxes_flow <= +1 and \
+ textboxes:
self.groups = self.group_textboxes(laparams, textboxes)
assigner = IndexAssigner()
for group in self.groups:
@@ -689,13 +709,14 @@ def getkey(box):
return (0, -box.x1, box.y0)
else:
return (1, box.y0, box.x0)
+
textboxes.sort(key=getkey)
self._objs = textboxes + otherobjs + empties
return
-## LTFigure
-##
+# LTFigure
+#
class LTFigure(LTLayoutContainer):
def __init__(self, name, bbox, matrix):
@@ -703,7 +724,8 @@ def __init__(self, name, bbox, matrix):
self.matrix = matrix
(x, y, w, h) = bbox
bbox = get_bound(apply_matrix_pt(matrix, (p, q))
- for (p, q) in ((x, y), (x+w, y), (x, y+h), (x+w, y+h)))
+ for (p, q) in
+ ((x, y), (x + w, y), (x, y + h), (x + w, y + h)))
LTLayoutContainer.__init__(self, bbox)
return
@@ -719,8 +741,8 @@ def analyze(self, laparams):
return
-## LTPage
-##
+# LTPage
+#
class LTPage(LTLayoutContainer):
def __init__(self, pageid, bbox, rotate=0):
diff --git a/pdfminer/lzw.py b/pdfminer/lzw.py
index 203ee50c..1c11b93a 100644
--- a/pdfminer/lzw.py
+++ b/pdfminer/lzw.py
@@ -6,8 +6,8 @@ class CorruptDataError(Exception):
pass
-## LZWDecoder
-##
+# LZWDecoder
+#
class LZWDecoder:
def __init__(self, fp):
@@ -23,19 +23,20 @@ def readbits(self, bits):
v = 0
while 1:
# the number of remaining bits we can get from the current buffer.
- r = 8-self.bpos
+ r = 8 - self.bpos
if bits <= r:
# |-----8-bits-----|
# |-bpos-|-bits-| |
# | |----r----|
- v = (v << bits) | ((self.buff >> (r-bits)) & ((1 << bits)-1))
+ v = (v << bits) | (
+ (self.buff >> (r - bits)) & ((1 << bits) - 1))
self.bpos += bits
break
else:
# |-----8-bits-----|
# |-bpos-|---bits----...
# | |----r----|
- v = (v << r) | (self.buff & ((1 << r)-1))
+ v = (v << r) | (self.buff & ((1 << r) - 1))
bits -= r
x = self.fp.read(1)
if not x:
@@ -59,18 +60,18 @@ def feed(self, code):
else:
if code < len(self.table):
x = self.table[code]
- self.table.append(self.prevbuf+x[:1])
+ self.table.append(self.prevbuf + x[:1])
elif code == len(self.table):
- self.table.append(self.prevbuf+self.prevbuf[:1])
+ self.table.append(self.prevbuf + self.prevbuf[:1])
x = self.table[code]
else:
raise CorruptDataError
- l = len(self.table)
- if l == 511:
+ length = len(self.table)
+ if length == 511:
self.nbits = 10
- elif l == 1023:
+ elif length == 1023:
self.nbits = 11
- elif l == 2047:
+ elif length == 2047:
self.nbits = 12
self.prevbuf = x
return x
@@ -87,7 +88,7 @@ def run(self):
# just ignore corrupt data and stop yielding there
break
yield x
- #logging.debug('nbits=%d, code=%d, output=%r, table=%r' %
+ # logging.debug('nbits=%d, code=%d, output=%r, table=%r' %
# (self.nbits, code, x, self.table[258:]))
return
@@ -101,6 +102,8 @@ def lzwdecode(data):
fp = BytesIO(data)
return b''.join(LZWDecoder(fp).run())
+
if __name__ == '__main__':
import doctest
+
print('pdfminer.lzw', doctest.testmod())
diff --git a/pdfminer/pdfcolor.py b/pdfminer/pdfcolor.py
index e93f7df2..62052e09 100644
--- a/pdfminer/pdfcolor.py
+++ b/pdfminer/pdfcolor.py
@@ -1,9 +1,8 @@
#!/usr/bin/env python
from .psparser import LIT
-
-## PDFColorSpace
-##
+# PDFColorSpace
+#
LITERAL_DEVICE_GRAY = LIT('DeviceGray')
LITERAL_DEVICE_RGB = LIT('DeviceRGB')
LITERAL_DEVICE_CMYK = LIT('DeviceCMYK')
@@ -17,7 +16,8 @@ def __init__(self, name, ncomponents):
return
def __repr__(self):
- return '' % (self.name, self.ncomponents)
+ return '' \
+ % (self.name, self.ncomponents)
PREDEFINED_COLORSPACE = dict(
diff --git a/pdfminer/pdfdevice.py b/pdfminer/pdfdevice.py
index 70223ce5..7f1de2e9 100644
--- a/pdfminer/pdfdevice.py
+++ b/pdfminer/pdfdevice.py
@@ -7,8 +7,8 @@
from .pdffont import PDFUnicodeNotDefined
-## PDFDevice
-##
+# PDFDevice
+#
class PDFDevice:
def __init__(self, rsrcmgr):
@@ -57,8 +57,8 @@ def render_string(self, textstate, seq):
return
-## PDFTextDevice
-##
+# PDFTextDevice
+#
class PDFTextDevice(PDFDevice):
def render_string(self, textstate, seq):
@@ -83,12 +83,13 @@ def render_string(self, textstate, seq):
return
def render_string_horizontal(self, seq, matrix, pos,
- font, fontsize, scaling, charspace, wordspace, rise, dxscale):
+ font, fontsize, scaling, charspace, wordspace,
+ rise, dxscale):
(x, y) = pos
needcharspace = False
for obj in seq:
if isnumber(obj):
- x -= obj*dxscale
+ x -= obj * dxscale
needcharspace = True
else:
for cid in font.decode(obj):
@@ -102,12 +103,13 @@ def render_string_horizontal(self, seq, matrix, pos,
return (x, y)
def render_string_vertical(self, seq, matrix, pos,
- font, fontsize, scaling, charspace, wordspace, rise, dxscale):
+ font, fontsize, scaling, charspace, wordspace,
+ rise, dxscale):
(x, y) = pos
needcharspace = False
for obj in seq:
if isnumber(obj):
- y -= obj*dxscale
+ y -= obj * dxscale
needcharspace = True
else:
for cid in font.decode(obj):
@@ -124,8 +126,8 @@ def render_char(self, matrix, font, fontsize, scaling, rise, cid):
return 0
-## TagExtractor
-##
+# TagExtractor
+#
class TagExtractor(PDFDevice):
def __init__(self, rsrcmgr, outfp):
diff --git a/pdfminer/pdfdocument.py b/pdfminer/pdfdocument.py
index 86ab7e97..1195783e 100644
--- a/pdfminer/pdfdocument.py
+++ b/pdfminer/pdfdocument.py
@@ -2,10 +2,8 @@
import re
import struct
import logging
-try:
- import hashlib as md5
-except ImportError:
- import md5
+import hashlib as md5
+
try:
from Crypto.Cipher import ARC4
from Crypto.Cipher import AES
@@ -35,36 +33,41 @@
from .utils import decode_text
-## Exceptions
-##
+# Exceptions
+#
class PDFNoValidXRef(PDFSyntaxError):
pass
+
class PDFNoOutlines(PDFException):
pass
+
class PDFDestinationNotFound(PDFException):
pass
+
class PDFEncryptionError(PDFException):
pass
+
class PDFPasswordIncorrect(PDFEncryptionError):
pass
+
class PDFTextExtractionNotAllowed(PDFEncryptionError):
pass
+
# some predefined literals and keywords.
LITERAL_OBJSTM = LIT('ObjStm')
LITERAL_XREF = LIT('XRef')
LITERAL_CATALOG = LIT('Catalog')
-## XRefs
-##
+# XRefs
+#
class PDFBaseXRef:
-
debug = False
def get_trailer(self):
@@ -80,8 +83,8 @@ def get_pos(self, objid):
raise KeyError(objid)
-## PDFXRef
-##
+# PDFXRef
+#
class PDFXRef(PDFBaseXRef):
def __init__(self):
@@ -107,24 +110,28 @@ def load(self, parser):
break
f = line.strip().split(b' ')
if len(f) != 2:
- raise PDFNoValidXRef('Trailer not found: %r: line=%r' % (parser, line))
+ raise PDFNoValidXRef(
+ 'Trailer not found: %r: line=%r' % (parser, line))
try:
(start, nobjs) = map(int, f)
except ValueError:
- raise PDFNoValidXRef('Invalid line: %r: line=%r' % (parser, line))
- for objid in range(start, start+nobjs):
+ raise PDFNoValidXRef(
+ 'Invalid line: %r: line=%r' % (parser, line))
+ for objid in range(start, start + nobjs):
try:
(_, line) = parser.nextline()
except PSEOF:
raise PDFNoValidXRef('Unexpected EOF - file corrupted?')
f = line.strip().split(b' ')
if len(f) != 3:
- raise PDFNoValidXRef('Invalid XRef format: %r, line=%r' % (parser, line))
+ raise PDFNoValidXRef(
+ 'Invalid XRef format: %r, line=%r' % (parser, line))
(pos, genno, use) = f
if use != b'n':
continue
self.offsets[objid] = (None, int(pos), int(genno))
- if self.debug: logging.info('xref objects: %r' % self.offsets)
+ if self.debug:
+ logging.info('xref objects: %r' % self.offsets)
self.load_trailer(parser)
return
@@ -156,8 +163,8 @@ def get_pos(self, objid):
raise
-## PDFXRefFallback
-##
+# PDFXRefFallback
+#
class PDFXRefFallback(PDFXRef):
def __repr__(self):
@@ -175,7 +182,8 @@ def load(self, parser):
if line.startswith(b'trailer'):
parser.seek(pos)
self.load_trailer(parser)
- if self.debug: logging.info('trailer: %r' % self.get_trailer())
+ if self.debug:
+ logging.info('trailer: %r' % self.get_trailer())
break
m = self.PDFOBJ_CUE.match(line)
if not m:
@@ -187,7 +195,8 @@ def load(self, parser):
# expand ObjStm.
parser.seek(pos)
(_, obj) = parser.nextobject()
- if isinstance(obj, PDFStream) and obj.get('Type') is LITERAL_OBJSTM:
+ if isinstance(obj, PDFStream) and obj.get(
+ 'Type') is LITERAL_OBJSTM:
stream = stream_value(obj)
try:
n = stream['N']
@@ -203,17 +212,16 @@ def load(self, parser):
objs.append(obj)
except PSEOF:
pass
- n = min(n, len(objs)//2)
+ n = min(n, len(objs) // 2)
for index in range(n):
- objid1 = objs[index*2]
+ objid1 = objs[index * 2]
self.offsets[objid1] = (objid, index, 0)
return
-## PDFXRefStream
-##
+# PDFXRefStream
+#
class PDFXRefStream(PDFBaseXRef):
-
debug = False
def __init__(self):
@@ -231,7 +239,8 @@ def load(self, parser):
(_, genno) = parser.nexttoken() # ignored
(_, kwd) = parser.nexttoken()
(_, stream) = parser.nextobject()
- if not isinstance(stream, PDFStream) or stream['Type'] is not LITERAL_XREF:
+ if not isinstance(stream, PDFStream) or \
+ stream['Type'] is not LITERAL_XREF:
raise PDFNoValidXRef('Invalid PDF stream spec.')
size = stream['Size']
index_array = stream.get('Index', (0, size))
@@ -240,12 +249,12 @@ def load(self, parser):
self.ranges.extend(choplist(2, index_array))
(self.fl1, self.fl2, self.fl3) = stream['W']
self.data = stream.get_data()
- self.entlen = self.fl1+self.fl2+self.fl3
+ self.entlen = self.fl1 + self.fl2 + self.fl3
self.trailer = stream.attrs
if self.debug:
logging.info('xref stream: objid=%s, fields=%d,%d,%d' %
- (', '.join(map(repr, self.ranges)),
- self.fl1, self.fl2, self.fl3))
+ (', '.join(map(repr, self.ranges)),
+ self.fl1, self.fl2, self.fl3))
return
def get_trailer(self):
@@ -255,16 +264,16 @@ def get_objids(self):
for (start, nobjs) in self.ranges:
for i in range(nobjs):
offset = self.entlen * i
- ent = self.data[offset:offset+self.entlen]
+ ent = self.data[offset:offset + self.entlen]
f1 = nunpack(ent[:self.fl1], 1)
if f1 == 1 or f1 == 2:
- yield start+i
+ yield start + i
return
def get_pos(self, objid):
index = 0
for (start, nobjs) in self.ranges:
- if start <= objid and objid < start+nobjs:
+ if start <= objid and objid < start + nobjs:
index += objid - start
break
else:
@@ -272,10 +281,10 @@ def get_pos(self, objid):
else:
raise KeyError(objid)
offset = self.entlen * index
- ent = self.data[offset:offset+self.entlen]
+ ent = self.data[offset:offset + self.entlen]
f1 = nunpack(ent[:self.fl1], 1)
- f2 = nunpack(ent[self.fl1:self.fl1+self.fl2])
- f3 = nunpack(ent[self.fl1+self.fl2:])
+ f2 = nunpack(ent[self.fl1:self.fl1 + self.fl2])
+ f3 = nunpack(ent[self.fl1 + self.fl2:])
if f1 == 1:
return (None, f2, f3)
elif f1 == 2:
@@ -285,10 +294,9 @@ def get_pos(self, objid):
raise KeyError(objid)
-## PDFSecurityHandler
-##
+# PDFSecurityHandler
+#
class PDFStandardSecurityHandler:
-
PASSWORD_PADDING = (b'(\xbfN^Nu\x8aAd\x00NV\xff\xfa\x01\x08'
b'..\x00\xb6\xd0h>\x80/\x0c\xa9\xfedSiz')
supported_revisions = (2, 3)
@@ -303,7 +311,8 @@ def __init__(self, docid, param, password=b''):
def init(self):
self.init_params()
if self.r not in self.supported_revisions:
- raise PDFEncryptionError('Unsupported revision: param=%r' % self.param)
+ raise PDFEncryptionError(
+ 'Unsupported revision: param=%r' % self.param)
self.init_key()
return
@@ -341,7 +350,7 @@ def compute_u(self, key):
hash.update(self.docid[0]) # 3
result = ARC4.new(key).encrypt(hash.digest()) # 4
for i in range(1, 20): # 5
- k = bytes( (c ^ i) for c in key )
+ k = bytes((c ^ i) for c in key)
result = ARC4.new(k).encrypt(result)
result += result # 6
return result
@@ -400,7 +409,7 @@ def authenticate_owner_password(self, password):
else:
user_password = self.o
for i in range(19, -1, -1):
- k = bytes( (c ^ i) for c in key )
+ k = bytes((c ^ i) for c in key)
user_password = ARC4.new(k).decrypt(user_password)
return self.authenticate_user_password(user_password)
@@ -408,14 +417,14 @@ def decrypt(self, objid, genno, data, attrs=None):
return self.decrypt_rc4(objid, genno, data)
def decrypt_rc4(self, objid, genno, data):
- key = self.key + struct.pack('H', fp.read(2))[0]
+ value = b1 << 24 | b2 << 16 | \
+ struct.unpack('>H', fp.read(2))[0]
stack.append(value)
return d
@@ -179,84 +175,84 @@ def getdict(data):
class CFFFont:
STANDARD_STRINGS = (
- '.notdef', 'space', 'exclam', 'quotedbl', 'numbersign',
- 'dollar', 'percent', 'ampersand', 'quoteright', 'parenleft',
- 'parenright', 'asterisk', 'plus', 'comma', 'hyphen', 'period',
- 'slash', 'zero', 'one', 'two', 'three', 'four', 'five', 'six',
- 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less', 'equal',
- 'greater', 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G',
- 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
- 'U', 'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash',
- 'bracketright', 'asciicircum', 'underscore', 'quoteleft', 'a',
- 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
- 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
- 'braceleft', 'bar', 'braceright', 'asciitilde', 'exclamdown',
- 'cent', 'sterling', 'fraction', 'yen', 'florin', 'section',
- 'currency', 'quotesingle', 'quotedblleft', 'guillemotleft',
- 'guilsinglleft', 'guilsinglright', 'fi', 'fl', 'endash',
- 'dagger', 'daggerdbl', 'periodcentered', 'paragraph', 'bullet',
- 'quotesinglbase', 'quotedblbase', 'quotedblright',
- 'guillemotright', 'ellipsis', 'perthousand', 'questiondown',
- 'grave', 'acute', 'circumflex', 'tilde', 'macron', 'breve',
- 'dotaccent', 'dieresis', 'ring', 'cedilla', 'hungarumlaut',
- 'ogonek', 'caron', 'emdash', 'AE', 'ordfeminine', 'Lslash',
- 'Oslash', 'OE', 'ordmasculine', 'ae', 'dotlessi', 'lslash',
- 'oslash', 'oe', 'germandbls', 'onesuperior', 'logicalnot', 'mu',
- 'trademark', 'Eth', 'onehalf', 'plusminus', 'Thorn',
- 'onequarter', 'divide', 'brokenbar', 'degree', 'thorn',
- 'threequarters', 'twosuperior', 'registered', 'minus', 'eth',
- 'multiply', 'threesuperior', 'copyright', 'Aacute',
- 'Acircumflex', 'Adieresis', 'Agrave', 'Aring', 'Atilde',
- 'Ccedilla', 'Eacute', 'Ecircumflex', 'Edieresis', 'Egrave',
- 'Iacute', 'Icircumflex', 'Idieresis', 'Igrave', 'Ntilde',
- 'Oacute', 'Ocircumflex', 'Odieresis', 'Ograve', 'Otilde',
- 'Scaron', 'Uacute', 'Ucircumflex', 'Udieresis', 'Ugrave',
- 'Yacute', 'Ydieresis', 'Zcaron', 'aacute', 'acircumflex',
- 'adieresis', 'agrave', 'aring', 'atilde', 'ccedilla', 'eacute',
- 'ecircumflex', 'edieresis', 'egrave', 'iacute', 'icircumflex',
- 'idieresis', 'igrave', 'ntilde', 'oacute', 'ocircumflex',
- 'odieresis', 'ograve', 'otilde', 'scaron', 'uacute',
- 'ucircumflex', 'udieresis', 'ugrave', 'yacute', 'ydieresis',
- 'zcaron', 'exclamsmall', 'Hungarumlautsmall', 'dollaroldstyle',
- 'dollarsuperior', 'ampersandsmall', 'Acutesmall',
- 'parenleftsuperior', 'parenrightsuperior', 'twodotenleader',
- 'onedotenleader', 'zerooldstyle', 'oneoldstyle', 'twooldstyle',
- 'threeoldstyle', 'fouroldstyle', 'fiveoldstyle', 'sixoldstyle',
- 'sevenoldstyle', 'eightoldstyle', 'nineoldstyle',
- 'commasuperior', 'threequartersemdash', 'periodsuperior',
- 'questionsmall', 'asuperior', 'bsuperior', 'centsuperior',
- 'dsuperior', 'esuperior', 'isuperior', 'lsuperior', 'msuperior',
- 'nsuperior', 'osuperior', 'rsuperior', 'ssuperior', 'tsuperior',
- 'ff', 'ffi', 'ffl', 'parenleftinferior', 'parenrightinferior',
- 'Circumflexsmall', 'hyphensuperior', 'Gravesmall', 'Asmall',
- 'Bsmall', 'Csmall', 'Dsmall', 'Esmall', 'Fsmall', 'Gsmall',
- 'Hsmall', 'Ismall', 'Jsmall', 'Ksmall', 'Lsmall', 'Msmall',
- 'Nsmall', 'Osmall', 'Psmall', 'Qsmall', 'Rsmall', 'Ssmall',
- 'Tsmall', 'Usmall', 'Vsmall', 'Wsmall', 'Xsmall', 'Ysmall',
- 'Zsmall', 'colonmonetary', 'onefitted', 'rupiah', 'Tildesmall',
- 'exclamdownsmall', 'centoldstyle', 'Lslashsmall', 'Scaronsmall',
- 'Zcaronsmall', 'Dieresissmall', 'Brevesmall', 'Caronsmall',
- 'Dotaccentsmall', 'Macronsmall', 'figuredash', 'hypheninferior',
- 'Ogoneksmall', 'Ringsmall', 'Cedillasmall', 'questiondownsmall',
- 'oneeighth', 'threeeighths', 'fiveeighths', 'seveneighths',
- 'onethird', 'twothirds', 'zerosuperior', 'foursuperior',
- 'fivesuperior', 'sixsuperior', 'sevensuperior', 'eightsuperior',
- 'ninesuperior', 'zeroinferior', 'oneinferior', 'twoinferior',
- 'threeinferior', 'fourinferior', 'fiveinferior', 'sixinferior',
- 'seveninferior', 'eightinferior', 'nineinferior',
- 'centinferior', 'dollarinferior', 'periodinferior',
- 'commainferior', 'Agravesmall', 'Aacutesmall',
- 'Acircumflexsmall', 'Atildesmall', 'Adieresissmall',
- 'Aringsmall', 'AEsmall', 'Ccedillasmall', 'Egravesmall',
- 'Eacutesmall', 'Ecircumflexsmall', 'Edieresissmall',
- 'Igravesmall', 'Iacutesmall', 'Icircumflexsmall',
- 'Idieresissmall', 'Ethsmall', 'Ntildesmall', 'Ogravesmall',
- 'Oacutesmall', 'Ocircumflexsmall', 'Otildesmall',
- 'Odieresissmall', 'OEsmall', 'Oslashsmall', 'Ugravesmall',
- 'Uacutesmall', 'Ucircumflexsmall', 'Udieresissmall',
- 'Yacutesmall', 'Thornsmall', 'Ydieresissmall', '001.000',
- '001.001', '001.002', '001.003', 'Black', 'Bold', 'Book',
- 'Light', 'Medium', 'Regular', 'Roman', 'Semibold',
+ '.notdef', 'space', 'exclam', 'quotedbl', 'numbersign',
+ 'dollar', 'percent', 'ampersand', 'quoteright', 'parenleft',
+ 'parenright', 'asterisk', 'plus', 'comma', 'hyphen', 'period',
+ 'slash', 'zero', 'one', 'two', 'three', 'four', 'five', 'six',
+ 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less', 'equal',
+ 'greater', 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G',
+ 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
+ 'U', 'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash',
+ 'bracketright', 'asciicircum', 'underscore', 'quoteleft', 'a',
+ 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
+ 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
+ 'braceleft', 'bar', 'braceright', 'asciitilde', 'exclamdown',
+ 'cent', 'sterling', 'fraction', 'yen', 'florin', 'section',
+ 'currency', 'quotesingle', 'quotedblleft', 'guillemotleft',
+ 'guilsinglleft', 'guilsinglright', 'fi', 'fl', 'endash',
+ 'dagger', 'daggerdbl', 'periodcentered', 'paragraph', 'bullet',
+ 'quotesinglbase', 'quotedblbase', 'quotedblright',
+ 'guillemotright', 'ellipsis', 'perthousand', 'questiondown',
+ 'grave', 'acute', 'circumflex', 'tilde', 'macron', 'breve',
+ 'dotaccent', 'dieresis', 'ring', 'cedilla', 'hungarumlaut',
+ 'ogonek', 'caron', 'emdash', 'AE', 'ordfeminine', 'Lslash',
+ 'Oslash', 'OE', 'ordmasculine', 'ae', 'dotlessi', 'lslash',
+ 'oslash', 'oe', 'germandbls', 'onesuperior', 'logicalnot', 'mu',
+ 'trademark', 'Eth', 'onehalf', 'plusminus', 'Thorn',
+ 'onequarter', 'divide', 'brokenbar', 'degree', 'thorn',
+ 'threequarters', 'twosuperior', 'registered', 'minus', 'eth',
+ 'multiply', 'threesuperior', 'copyright', 'Aacute',
+ 'Acircumflex', 'Adieresis', 'Agrave', 'Aring', 'Atilde',
+ 'Ccedilla', 'Eacute', 'Ecircumflex', 'Edieresis', 'Egrave',
+ 'Iacute', 'Icircumflex', 'Idieresis', 'Igrave', 'Ntilde',
+ 'Oacute', 'Ocircumflex', 'Odieresis', 'Ograve', 'Otilde',
+ 'Scaron', 'Uacute', 'Ucircumflex', 'Udieresis', 'Ugrave',
+ 'Yacute', 'Ydieresis', 'Zcaron', 'aacute', 'acircumflex',
+ 'adieresis', 'agrave', 'aring', 'atilde', 'ccedilla', 'eacute',
+ 'ecircumflex', 'edieresis', 'egrave', 'iacute', 'icircumflex',
+ 'idieresis', 'igrave', 'ntilde', 'oacute', 'ocircumflex',
+ 'odieresis', 'ograve', 'otilde', 'scaron', 'uacute',
+ 'ucircumflex', 'udieresis', 'ugrave', 'yacute', 'ydieresis',
+ 'zcaron', 'exclamsmall', 'Hungarumlautsmall', 'dollaroldstyle',
+ 'dollarsuperior', 'ampersandsmall', 'Acutesmall',
+ 'parenleftsuperior', 'parenrightsuperior', 'twodotenleader',
+ 'onedotenleader', 'zerooldstyle', 'oneoldstyle', 'twooldstyle',
+ 'threeoldstyle', 'fouroldstyle', 'fiveoldstyle', 'sixoldstyle',
+ 'sevenoldstyle', 'eightoldstyle', 'nineoldstyle',
+ 'commasuperior', 'threequartersemdash', 'periodsuperior',
+ 'questionsmall', 'asuperior', 'bsuperior', 'centsuperior',
+ 'dsuperior', 'esuperior', 'isuperior', 'lsuperior', 'msuperior',
+ 'nsuperior', 'osuperior', 'rsuperior', 'ssuperior', 'tsuperior',
+ 'ff', 'ffi', 'ffl', 'parenleftinferior', 'parenrightinferior',
+ 'Circumflexsmall', 'hyphensuperior', 'Gravesmall', 'Asmall',
+ 'Bsmall', 'Csmall', 'Dsmall', 'Esmall', 'Fsmall', 'Gsmall',
+ 'Hsmall', 'Ismall', 'Jsmall', 'Ksmall', 'Lsmall', 'Msmall',
+ 'Nsmall', 'Osmall', 'Psmall', 'Qsmall', 'Rsmall', 'Ssmall',
+ 'Tsmall', 'Usmall', 'Vsmall', 'Wsmall', 'Xsmall', 'Ysmall',
+ 'Zsmall', 'colonmonetary', 'onefitted', 'rupiah', 'Tildesmall',
+ 'exclamdownsmall', 'centoldstyle', 'Lslashsmall', 'Scaronsmall',
+ 'Zcaronsmall', 'Dieresissmall', 'Brevesmall', 'Caronsmall',
+ 'Dotaccentsmall', 'Macronsmall', 'figuredash', 'hypheninferior',
+ 'Ogoneksmall', 'Ringsmall', 'Cedillasmall', 'questiondownsmall',
+ 'oneeighth', 'threeeighths', 'fiveeighths', 'seveneighths',
+ 'onethird', 'twothirds', 'zerosuperior', 'foursuperior',
+ 'fivesuperior', 'sixsuperior', 'sevensuperior', 'eightsuperior',
+ 'ninesuperior', 'zeroinferior', 'oneinferior', 'twoinferior',
+ 'threeinferior', 'fourinferior', 'fiveinferior', 'sixinferior',
+ 'seveninferior', 'eightinferior', 'nineinferior',
+ 'centinferior', 'dollarinferior', 'periodinferior',
+ 'commainferior', 'Agravesmall', 'Aacutesmall',
+ 'Acircumflexsmall', 'Atildesmall', 'Adieresissmall',
+ 'Aringsmall', 'AEsmall', 'Ccedillasmall', 'Egravesmall',
+ 'Eacutesmall', 'Ecircumflexsmall', 'Edieresissmall',
+ 'Igravesmall', 'Iacutesmall', 'Icircumflexsmall',
+ 'Idieresissmall', 'Ethsmall', 'Ntildesmall', 'Ogravesmall',
+ 'Oacutesmall', 'Ocircumflexsmall', 'Otildesmall',
+ 'Odieresissmall', 'OEsmall', 'Oslashsmall', 'Ugravesmall',
+ 'Uacutesmall', 'Ucircumflexsmall', 'Udieresissmall',
+ 'Yacutesmall', 'Thornsmall', 'Ydieresissmall', '001.000',
+ '001.001', '001.002', '001.003', 'Black', 'Bold', 'Book',
+ 'Light', 'Medium', 'Regular', 'Roman', 'Semibold',
)
class INDEX:
@@ -288,7 +284,9 @@ def __init__(self, name, fp):
self.name = name
self.fp = fp
# Header
- (_major, _minor, hdrsize, offsize) = struct.unpack('BBBB', self.fp.read(4))
+ (_major, _minor, hdrsize, offsize) = struct.unpack(
+ 'BBBB', self.fp.read(4)
+ )
self.fp.read(hdrsize-4)
# Name INDEX
self.name_index = self.INDEX(self.fp)
@@ -315,7 +313,8 @@ def __init__(self, name, fp):
if format == b'\x00':
# Format 0
(n,) = struct.unpack('B', self.fp.read(1))
- for (code, gid) in enumerate(struct.unpack('B'*n, self.fp.read(n))):
+ unpacked_struct = struct.unpack('B'*n, self.fp.read(n))
+ for (code, gid) in enumerate(unpacked_struct):
self.code2gid[code] = gid
self.gid2code[gid] = code
elif format == b'\x01':
@@ -338,7 +337,8 @@ def __init__(self, name, fp):
if format == b'\x00':
# Format 0
n = self.nglyphs-1
- for (gid, sid) in enumerate(struct.unpack('>'+'H'*n, self.fp.read(2*n))):
+ unpacked_struct = struct.unpack('>'+'H'*n, self.fp.read(2*n))
+ for (gid, sid) in enumerate(unpacked_struct):
gid += 1
name = self.getstr(sid)
self.name2gid[name] = gid
@@ -359,9 +359,9 @@ def __init__(self, name, fp):
assert 0
else:
raise ValueError('unsupported charset format: %r' % format)
- #print(self.code2gid)
- #print(self.name2gid)
- #assert 0
+ # print(self.code2gid)
+ # print(self.name2gid)
+ # assert 0
return
def getstr(self, sid):
@@ -370,7 +370,7 @@ def getstr(self, sid):
return self.string_index[sid-len(self.STANDARD_STRINGS)]
-## TrueTypeFont
+# TrueTypeFont
##
class TrueTypeFont:
@@ -404,7 +404,8 @@ def create_unicode_map(self):
fp.seek(base_offset+st_offset)
(fmttype, fmtlen, fmtlang) = struct.unpack('>HHH', fp.read(6))
if fmttype == 0:
- char2gid.update(enumerate(struct.unpack('>256B', fp.read(256))))
+ char2gid.update(
+ enumerate(struct.unpack('>256B', fp.read(256))))
elif fmttype == 2:
subheaderkeys = struct.unpack('>256H', fp.read(512))
firstbytes = [0]*8192
@@ -413,8 +414,10 @@ def create_unicode_map(self):
nhdrs = max(subheaderkeys)//8 + 1
hdrs = []
for i in range(nhdrs):
- (firstcode, entcount, delta, offset) = struct.unpack('>HHhH', fp.read(8))
- hdrs.append((i, firstcode, entcount, delta, fp.tell()-2+offset))
+ (firstcode, entcount, delta, offset) = struct.unpack(
+ '>HHhH', fp.read(8))
+ hdrs.append((i, firstcode, entcount,
+ delta, fp.tell()-2+offset))
for (i, firstcode, entcount, delta, pos) in hdrs:
if not entcount:
continue
@@ -438,7 +441,8 @@ def create_unicode_map(self):
if idr:
fp.seek(pos+idr)
for c in range(sc, ec+1):
- char2gid[c] = (struct.unpack('>H', fp.read(2))[0] + idd) & 0xffff
+ char2gid[c] = (struct.unpack(
+ '>H', fp.read(2))[0] + idd) & 0xffff
else:
for c in range(sc, ec+1):
char2gid[c] = (c + idd) & 0xffff
@@ -451,7 +455,7 @@ def create_unicode_map(self):
return unicode_map
-## Fonts
+# Fonts
##
class PDFFontError(PDFException):
pass
@@ -460,6 +464,7 @@ class PDFFontError(PDFException):
class PDFUnicodeNotDefined(PDFFontError):
pass
+
LITERAL_STANDARD_ENCODING = LIT('StandardEncoding')
LITERAL_TYPE1C = LIT('Type1C')
@@ -477,7 +482,8 @@ def __init__(self, descriptor, widths, default_width=None):
self.ascent = num_value(descriptor.get('Ascent', 0))
self.descent = num_value(descriptor.get('Descent', 0))
self.italic_angle = num_value(descriptor.get('ItalicAngle', 0))
- self.default_width = default_width or num_value(descriptor.get('MissingWidth', 0))
+ self.default_width = default_width or num_value(
+ descriptor.get('MissingWidth', 0))
self.leading = num_value(descriptor.get('Leading', 0))
self.bbox = list_value(descriptor.get('FontBBox', (0, 0, 0, 0)))
self.hscale = self.vscale = .001
@@ -541,7 +547,8 @@ def __init__(self, descriptor, widths, spec):
else:
encoding = LITERAL_STANDARD_ENCODING
if isinstance(encoding, dict):
- name = literal_name(encoding.get('BaseEncoding', LITERAL_STANDARD_ENCODING))
+ name = literal_name(encoding.get(
+ 'BaseEncoding', LITERAL_STANDARD_ENCODING))
diff = list_value(encoding.get('Differences', None))
self.cid2unicode = EncodingDB.get_encoding(name, diff)
else:
@@ -581,7 +588,7 @@ def __init__(self, rsrcmgr, spec):
except KeyError:
descriptor = dict_value(spec.get('FontDescriptor', {}))
firstchar = int_value(spec.get('FirstChar', 0))
- #lastchar = int_value(spec.get('LastChar', 255))
+ # lastchar = int_value(spec.get('LastChar', 255))
widths = list_value(spec.get('Widths', [0]*256))
widths = dict((i+firstchar, w) for (i, w) in enumerate(widths))
PDFSimpleFont.__init__(self, descriptor, widths, spec)
@@ -610,7 +617,7 @@ class PDFType3Font(PDFSimpleFont):
def __init__(self, rsrcmgr, spec):
firstchar = int_value(spec.get('FirstChar', 0))
- #lastchar = int_value(spec.get('LastChar', 0))
+ # lastchar = int_value(spec.get('LastChar', 0))
widths = list_value(spec.get('Widths', [0]*256))
widths = dict((i+firstchar, w) for (i, w) in enumerate(widths))
if 'FontDescriptor' in spec:
@@ -678,15 +685,17 @@ def __init__(self, rsrcmgr, spec):
pass
else:
try:
- self.unicode_map = CMapDB.get_unicode_map(self.cidcoding, self.cmap.is_vertical())
- except CMapDB.CMapNotFound as e:
+ self.unicode_map = CMapDB.get_unicode_map(
+ self.cidcoding, self.cmap.is_vertical())
+ except CMapDB.CMapNotFound:
pass
self.vertical = self.cmap.is_vertical()
if self.vertical:
# writing mode: vertical
widths = get_widths2(list_value(spec.get('W2', [])))
- self.disps = dict((cid, (vx, vy)) for (cid, (_, (vx, vy))) in widths.items())
+ self.disps = dict((cid, (vx, vy))
+ for (cid, (_, (vx, vy))) in widths.items())
(vy, w) = spec.get('DW2', [880, -1000])
self.default_disp = (None, vy)
widths = dict((cid, w) for (cid, (w, _)) in widths.items())
@@ -701,7 +710,8 @@ def __init__(self, rsrcmgr, spec):
return
def __repr__(self):
- return '' % (self.basefont, self.cidcoding)
+ return '' % \
+ (self.basefont, self.cidcoding)
def is_vertical(self):
return self.vertical
@@ -729,10 +739,11 @@ def to_unichr(self, cid):
def main(argv):
for fname in argv[1:]:
with open(fname, 'rb') as fp:
- #font = TrueTypeFont(fname, fp)
+ # font = TrueTypeFont(fname, fp)
font = CFFFont(fname, fp)
print(font)
return
+
if __name__ == '__main__':
sys.exit(main(sys.argv))
diff --git a/pdfminer/pdfinterp.py b/pdfminer/pdfinterp.py
index 807a7e16..3aa3805e 100644
--- a/pdfminer/pdfinterp.py
+++ b/pdfminer/pdfinterp.py
@@ -32,16 +32,17 @@
from .utils import MATRIX_IDENTITY
-## Exceptions
+# Exceptions
##
class PDFResourceError(PDFException):
pass
+
class PDFInterpreterError(PDFException):
pass
-## Constants
+# Constants
##
LITERAL_PDF = LIT('PDF')
LITERAL_TEXT = LIT('Text')
@@ -50,7 +51,7 @@ class PDFInterpreterError(PDFException):
LITERAL_IMAGE = LIT('Image')
-## PDFTextState
+# PDFTextState
##
class PDFTextState:
@@ -69,9 +70,9 @@ def __init__(self):
return
def __repr__(self):
- return ('' %
+ return ('' %
(self.font, self.fontsize, self.charspace, self.wordspace,
self.scaling, self.leading, self.render, self.rise,
self.matrix, self.linematrix))
@@ -96,7 +97,7 @@ def reset(self):
return
-## PDFGraphicState
+# PDFGraphicState
##
class PDFGraphicState:
@@ -128,7 +129,7 @@ def __repr__(self):
self.miterlimit, self.dash, self.intent, self.flatness))
-## Resource Manager
+# Resource Manager
##
class PDFResourceManager:
@@ -153,7 +154,7 @@ def get_procset(self, procs):
elif proc is LITERAL_TEXT:
pass
else:
- #raise PDFResourceError('ProcSet %r is not supported.' % proc)
+ # raise PDFResourceError('ProcSet %r is not supported.' % proc)
pass
return
@@ -170,7 +171,8 @@ def get_font(self, objid, spec):
font = self._cached_fonts[objid]
else:
if self.debug:
- logging.info('get_font: create: objid=%r, spec=%r' % (objid, spec))
+ logging.info('get_font: create: objid=%r, spec=%r' %
+ (objid, spec))
if STRICT:
if spec['Type'] is not LITERAL_FONT:
raise PDFFontError('Type is not /Font')
@@ -211,7 +213,7 @@ def get_font(self, objid, spec):
return font
-## PDFContentParser
+# PDFContentParser
##
class PDFContentParser(PSStackParser):
@@ -268,7 +270,7 @@ def get_inline_data(self, pos, target=b'EI'):
else:
try:
j = self.buf.index(target[0], self.charpos)
- #print('found', (0, self.buf[j:j+10]))
+ # print('found', (0, self.buf[j:j+10]))
data += self.buf[self.charpos:j+1]
self.charpos = j+1
i = 1
@@ -295,7 +297,8 @@ def do_keyword(self, pos, token):
try:
(_, objs) = self.end_type('inline')
if len(objs) % 2 != 0:
- raise PSTypeError('Invalid dictionary construct: %r' % objs)
+ raise PSTypeError(
+ 'Invalid dictionary construct: %r' % objs)
d = dict((literal_name(k), v) for (k, v) in choplist(2, objs))
(pos, data) = self.get_inline_data(pos+len(b'ID '))
obj = PDFStream(d, data)
@@ -309,7 +312,7 @@ def do_keyword(self, pos, token):
return
-## Interpreter
+# Interpreter
##
class PDFPageInterpreter:
@@ -338,9 +341,11 @@ def get_colorspace(spec):
name = literal_name(spec[0])
else:
name = literal_name(spec)
- if name == 'ICCBased' and isinstance(spec, list) and 2 <= len(spec):
+ if name == 'ICCBased' and isinstance(spec, list) and \
+ 2 <= len(spec):
return PDFColorSpace(name, stream_value(spec[1])['N'])
- elif name == 'DeviceN' and isinstance(spec, list) and 2 <= len(spec):
+ elif name == 'DeviceN' and isinstance(spec, list) and \
+ 2 <= len(spec):
return PDFColorSpace(name, len(list_value(spec[1])))
else:
return PREDEFINED_COLORSPACE.get(name)
@@ -457,7 +462,7 @@ def do_i(self, flatness):
# load-gstate
def do_gs(self, name):
- #XXX
+ # XXX
return
# moveto
@@ -501,7 +506,8 @@ def do_re(self, x, y, w, h):
# stroke
def do_S(self):
- self.device.paint_path(self.graphicstate, True, False, False, self.curpath)
+ self.device.paint_path(self.graphicstate, True,
+ False, False, self.curpath)
self.curpath = []
return
@@ -513,7 +519,8 @@ def do_s(self):
# fill
def do_f(self):
- self.device.paint_path(self.graphicstate, False, True, False, self.curpath)
+ self.device.paint_path(self.graphicstate, False,
+ True, False, self.curpath)
self.curpath = []
return
# fill (obsolete)
@@ -521,19 +528,22 @@ def do_f(self):
# fill-even-odd
def do_f_a(self):
- self.device.paint_path(self.graphicstate, False, True, True, self.curpath)
+ self.device.paint_path(self.graphicstate, False,
+ True, True, self.curpath)
self.curpath = []
return
# fill-and-stroke
def do_B(self):
- self.device.paint_path(self.graphicstate, True, True, False, self.curpath)
+ self.device.paint_path(self.graphicstate, True,
+ True, False, self.curpath)
self.curpath = []
return
# fill-and-stroke-even-odd
def do_B_a(self):
- self.device.paint_path(self.graphicstate, True, True, True, self.curpath)
+ self.device.paint_path(self.graphicstate, True,
+ True, True, self.curpath)
self.curpath = []
return
@@ -582,32 +592,32 @@ def do_cs(self, name):
# setgray-stroking
def do_G(self, gray):
- #self.do_CS(LITERAL_DEVICE_GRAY)
+ # self.do_CS(LITERAL_DEVICE_GRAY)
return
# setgray-non-stroking
def do_g(self, gray):
- #self.do_cs(LITERAL_DEVICE_GRAY)
+ # self.do_cs(LITERAL_DEVICE_GRAY)
return
# setrgb-stroking
def do_RG(self, r, g, b):
- #self.do_CS(LITERAL_DEVICE_RGB)
+ # self.do_CS(LITERAL_DEVICE_RGB)
return
# setrgb-non-stroking
def do_rg(self, r, g, b):
- #self.do_cs(LITERAL_DEVICE_RGB)
+ # self.do_cs(LITERAL_DEVICE_RGB)
return
# setcmyk-stroking
def do_K(self, c, m, y, k):
- #self.do_CS(LITERAL_DEVICE_CMYK)
+ # self.do_CS(LITERAL_DEVICE_CMYK)
return
# setcmyk-non-stroking
def do_k(self, c, m, y, k):
- #self.do_cs(LITERAL_DEVICE_CMYK)
+ # self.do_cs(LITERAL_DEVICE_CMYK)
return
# setcolor
@@ -727,7 +737,7 @@ def do_Td(self, tx, ty):
(a, b, c, d, e, f) = self.textstate.matrix
self.textstate.matrix = (a, b, c, d, tx*a+ty*c+e, tx*b+ty*d+f)
self.textstate.linematrix = (0, 0)
- #print('Td(%r,%r): %r' % (tx, ty, self.textstate), file=sys.stderr)
+ # print('Td(%r,%r): %r' % (tx, ty, self.textstate), file=sys.stderr)
return
# text-move
@@ -736,7 +746,7 @@ def do_TD(self, tx, ty):
self.textstate.matrix = (a, b, c, d, tx*a+ty*c+e, tx*b+ty*d+f)
self.textstate.leading = ty
self.textstate.linematrix = (0, 0)
- #print('TD(%r,%r): %r' % (tx, ty, self.textstate), file=sys.stderr)
+ # print('TD(%r,%r): %r' % (tx, ty, self.textstate), file=sys.stderr)
return
# textmatrix
@@ -748,13 +758,14 @@ def do_Tm(self, a, b, c, d, e, f):
# nextline
def do_T_a(self):
(a, b, c, d, e, f) = self.textstate.matrix
- self.textstate.matrix = (a, b, c, d, self.textstate.leading*c+e, self.textstate.leading*d+f)
+ self.textstate.matrix = (
+ a, b, c, d, self.textstate.leading*c+e, self.textstate.leading*d+f)
self.textstate.linematrix = (0, 0)
return
# show-pos
def do_TJ(self, seq):
- #print('TJ(%r): %r' % (seq, self.textstate), file=sys.stderr)
+ # print('TJ(%r): %r' % (seq, self.textstate), file=sys.stderr)
if self.textstate.font is None:
if STRICT:
raise PDFInterpreterError('No font specified!')
@@ -804,7 +815,8 @@ def do_Do(self, xobjid):
if STRICT:
raise PDFInterpreterError('Undefined xobject id: %r' % xobjid)
return
- if self.debug: logging.info('Processing xobj: %r' % xobj)
+ if self.debug:
+ logging.info('Processing xobj: %r' % xobj)
subtype = xobj.get('Subtype')
if subtype is LITERAL_FORM and 'BBox' in xobj:
interpreter = self.dup()
@@ -813,9 +825,11 @@ def do_Do(self, xobjid):
# According to PDF reference 1.7 section 4.9.1, XObjects in
# earlier PDFs (prior to v1.2) use the page's Resources entry
# instead of having their own Resources entry.
- resources = dict_value(xobj.get('Resources')) or self.resources.copy()
+ resources = dict_value(xobj.get('Resources')
+ ) or self.resources.copy()
self.device.begin_figure(xobjid, bbox, matrix)
- interpreter.render_contents(resources, [xobj], ctm=mult_matrix(matrix, self.ctm))
+ interpreter.render_contents(
+ resources, [xobj], ctm=mult_matrix(matrix, self.ctm))
self.device.end_figure(xobjid)
elif subtype is LITERAL_IMAGE and 'Width' in xobj and 'Height' in xobj:
self.device.begin_figure(xobjid, (0, 0, 1, 1), MATRIX_IDENTITY)
@@ -827,7 +841,8 @@ def do_Do(self, xobjid):
return
def process_page(self, page):
- if self.debug: logging.info('Processing page: %r' % page)
+ if self.debug:
+ logging.info('Processing page: %r' % page)
(x0, y0, x1, y1) = page.mediabox
if page.rotate == 90:
ctm = (0, -1, 1, 0, -y0, x1)
@@ -848,7 +863,7 @@ def process_page(self, page):
def render_contents(self, resources, streams, ctm=MATRIX_IDENTITY):
if self.debug:
logging.info('render_contents: resources=%r, streams=%r, ctm=%r' %
- (resources, streams, ctm))
+ (resources, streams, ctm))
self.init_resources(resources)
self.init_state(ctm)
self.execute(list_value(streams))
@@ -867,7 +882,8 @@ def execute(self, streams):
break
if isinstance(obj, PSKeyword):
name = keyword_name(obj).decode('ascii')
- method = 'do_%s' % name.replace('*', '_a').replace('"', '_w').replace("'", '_q')
+ method = 'do_%s' % name.replace(
+ '*', '_a').replace('"', '_w').replace("'", '_q')
if hasattr(self, method):
func = getattr(self, method)
nargs = func.__code__.co_argcount-1
@@ -883,7 +899,8 @@ def execute(self, streams):
func()
else:
if STRICT:
- raise PDFInterpreterError('Unknown operator: %r' % name)
+ raise PDFInterpreterError(
+ 'Unknown operator: %r' % name)
else:
self.push(obj)
return
diff --git a/pdfminer/pdfpage.py b/pdfminer/pdfpage.py
index debdf954..0de1cbf2 100644
--- a/pdfminer/pdfpage.py
+++ b/pdfminer/pdfpage.py
@@ -15,7 +15,7 @@
LITERAL_PAGES = LIT('Pages')
-## PDFPage
+# PDFPage
##
class PDFPage:
@@ -71,7 +71,8 @@ def __init__(self, doc, pageid, attrs):
return
def __repr__(self):
- return '' % (self.resources, self.mediabox)
+ return '' % \
+ (self.resources, self.mediabox)
INHERITABLE_ATTRS = set(['Resources', 'MediaBox', 'CropBox', 'Rotate'])
@@ -88,16 +89,19 @@ def search(obj, parent):
if k in klass.INHERITABLE_ATTRS and k not in tree:
tree[k] = v
if tree.get('Type') is LITERAL_PAGES and 'Kids' in tree:
- if klass.debug: logging.info('Pages: Kids=%r' % tree['Kids'])
+ if klass.debug:
+ logging.info('Pages: Kids=%r' % tree['Kids'])
for c in list_value(tree['Kids']):
for x in search(c, tree):
yield x
elif tree.get('Type') is LITERAL_PAGE:
- if klass.debug: logging.info('Page: %r' % tree)
+ if klass.debug:
+ logging.info('Page: %r' % tree)
yield (objid, tree)
pages = False
if 'Pages' in document.catalog:
- for (objid, tree) in search(document.catalog['Pages'], document.catalog):
+ for (objid, tree) in search(
+ document.catalog['Pages'], document.catalog):
yield klass(document, objid, tree)
pages = True
if not pages:
@@ -106,7 +110,8 @@ def search(obj, parent):
for objid in xref.get_objids():
try:
obj = document.getobj(objid)
- if isinstance(obj, dict) and obj.get('Type') is LITERAL_PAGE:
+ if isinstance(obj, dict) and \
+ obj.get('Type') is LITERAL_PAGE:
yield klass(document, objid, obj)
except PDFObjectNotFound:
pass
@@ -122,7 +127,8 @@ def get_pages(klass, fp,
doc = PDFDocument(parser, password=password, caching=caching)
# Check if the document allows text extraction. If not, abort.
if check_extractable and not doc.is_extractable:
- raise PDFTextExtractionNotAllowed('Text extraction is not allowed: %r' % fp)
+ raise PDFTextExtractionNotAllowed(
+ 'Text extraction is not allowed: %r' % fp)
# Process each page contained in the document.
for (pageno, page) in enumerate(klass.create_pages(doc)):
if pagenos and (pageno not in pagenos):
diff --git a/pdfminer/pdfparser.py b/pdfminer/pdfparser.py
index 61eb1dc8..0d84e96f 100644
--- a/pdfminer/pdfparser.py
+++ b/pdfminer/pdfparser.py
@@ -13,13 +13,13 @@
from .pdftypes import dict_value
-## Exceptions
+# Exceptions
##
class PDFSyntaxError(PDFException):
pass
-## PDFParser
+# PDFParser
##
class PDFParser(PSStackParser):
@@ -121,7 +121,7 @@ def do_keyword(self, pos, token):
self.seek(pos+objlen)
# XXX limit objlen not to exceed object boundary
if self.debug:
- logging.debug('Stream: pos=%d, objlen=%d, dic=%r, data=%r...' % \
+ logging.debug('Stream: pos=%d, objlen=%d, dic=%r, data=%r...' %
(pos, objlen, dic, data[:10]))
obj = PDFStream(dic, data, self.doc.decipher)
self.push((pos, obj))
@@ -133,7 +133,7 @@ def do_keyword(self, pos, token):
return
-## PDFStreamParser
+# PDFStreamParser
##
class PDFStreamParser(PDFParser):
@@ -154,6 +154,7 @@ def flush(self):
return
KEYWORD_OBJ = KWD(b'obj')
+
def do_keyword(self, pos, token):
if token is self.KEYWORD_R:
# reference to indirect object
diff --git a/pdfminer/pdftypes.py b/pdfminer/pdftypes.py
index ff742f94..f3c6f660 100644
--- a/pdfminer/pdftypes.py
+++ b/pdfminer/pdftypes.py
@@ -25,28 +25,33 @@
LITERALS_DCT_DECODE = (LIT('DCTDecode'), LIT('DCT'))
-## PDF Objects
+# PDF Objects
##
class PDFObject(PSObject):
pass
+
class PDFException(PSException):
pass
+
class PDFTypeError(PDFException):
pass
+
class PDFValueError(PDFException):
pass
+
class PDFObjectNotFound(PDFException):
pass
+
class PDFNotImplementedError(PDFException):
pass
-## PDFObjRef
+# PDFObjRef
##
class PDFObjRef(PDFObject):
@@ -56,7 +61,7 @@ def __init__(self, doc, objid, _):
raise PDFValueError('PDF object id cannot be 0.')
self.doc = doc
self.objid = objid
- #self.genno = genno # Never used.
+ # self.genno = genno # Never used.
return
def __repr__(self):
@@ -174,7 +179,7 @@ def stream_value(x):
return x
-## PDFStream type
+# PDFStream type
##
class PDFStream(PDFObject):
@@ -196,10 +201,12 @@ def set_objid(self, objid, genno):
def __repr__(self):
if self.data is None:
assert self.rawdata is not None
- return '' % (self.objid, len(self.rawdata), self.attrs)
+ return '' % \
+ (self.objid, len(self.rawdata), self.attrs)
else:
assert self.data is not None
- return '' % (self.objid, len(self.data), self.attrs)
+ return '' % \
+ (self.objid, len(self.data), self.attrs)
def __contains__(self, name):
return name in self.attrs
@@ -241,14 +248,15 @@ def decode(self):
self.data = data
self.rawdata = None
return
- for (f,params) in filters:
+ for (f, params) in filters:
if f in LITERALS_FLATE_DECODE:
# will get errors if the document is encrypted.
try:
data = zlib.decompress(data)
except zlib.error as e:
if STRICT:
- raise PDFException('Invalid zlib bytes: %r, %r' % (e, data))
+ raise PDFException(
+ 'Invalid zlib bytes: %r, %r' % (e, data))
data = b''
elif f in LITERALS_LZW_DECODE:
data = lzwdecode(data)
@@ -261,7 +269,8 @@ def decode(self):
elif f in LITERALS_CCITTFAX_DECODE:
data = ccittfaxdecode(data, params)
elif f in LITERALS_DCT_DECODE:
- # This is probably a JPG stream - it does not need to be decoded twice.
+ # This is probably a JPG stream
+ # It does not need to be decoded twice.
# Just return the stream to the user.
pass
elif f == LITERAL_CRYPT:
@@ -279,10 +288,13 @@ def decode(self):
# PNG predictor
colors = int_value(params.get('Colors', 1))
columns = int_value(params.get('Columns', 1))
- bitspercomponent = int_value(params.get('BitsPerComponent', 8))
- data = apply_png_predictor(pred, colors, columns, bitspercomponent, data)
+ bitspercomponent = int_value(
+ params.get('BitsPerComponent', 8))
+ data = apply_png_predictor(
+ pred, colors, columns, bitspercomponent, data)
else:
- raise PDFNotImplementedError('Unsupported predictor: %r' % pred)
+ raise PDFNotImplementedError(
+ 'Unsupported predictor: %r' % pred)
self.data = data
self.rawdata = None
return
diff --git a/pdfminer/psparser.py b/pdfminer/psparser.py
index ba0aa73f..db31709b 100644
--- a/pdfminer/psparser.py
+++ b/pdfminer/psparser.py
@@ -6,7 +6,7 @@
STRICT = 0
-## PS Exceptions
+# PS Exceptions
##
class PSException(Exception):
pass
@@ -28,10 +28,10 @@ class PSValueError(PSException):
pass
-## Basic PostScript Types
+# Basic PostScript Types
##
-## PSObject
+# PSObject
##
class PSObject:
@@ -40,7 +40,7 @@ class PSObject:
pass
-## PSLiteral
+# PSLiteral
##
class PSLiteral(PSObject):
@@ -63,7 +63,7 @@ def __repr__(self):
return '/%r' % self.name
-## PSKeyword
+# PSKeyword
##
class PSKeyword(PSObject):
@@ -85,7 +85,7 @@ def __repr__(self):
return self.name.decode('ascii')
-## PSSymbolTable
+# PSSymbolTable
##
class PSSymbolTable:
@@ -107,6 +107,7 @@ def intern(self, name):
self.dict[name] = lit
return lit
+
PSLiteralTable = PSSymbolTable(PSLiteral)
PSKeywordTable = PSSymbolTable(PSKeyword)
LIT = PSLiteralTable.intern
@@ -137,7 +138,7 @@ def keyword_name(x):
return x.name
-## PSBaseParser
+# PSBaseParser
##
EOL = re.compile(br'[\r\n]')
SPC = re.compile(br'\s')
@@ -170,7 +171,8 @@ def __init__(self, fp):
return
def __repr__(self):
- return '<%s: %r, bufpos=%d>' % (self.__class__.__name__, self.fp, self.bufpos)
+ return '<%s: %r, bufpos=%d>' % \
+ (self.__class__.__name__, self.fp, self.bufpos)
def flush(self):
return
@@ -331,7 +333,7 @@ def _parse_comment(self, s, i):
self._curtoken += s[i:j]
self._parse1 = self._parse_main
# We ignore comments.
- #self._tokens.append(self._curtoken)
+ # self._tokens.append(self._curtoken)
return j
def _parse_literal(self, s, i):
@@ -352,7 +354,8 @@ def _parse_literal(self, s, i):
utoken = self._curtoken.decode('utf-8')
except UnicodeDecodeError:
# We failed, there is possibly a corrupt PDF here.
- if STRICT: raise
+ if STRICT:
+ raise
utoken = ""
self._add_token(LIT(utoken))
self._parse1 = self._parse_main
@@ -439,7 +442,8 @@ def _parse_string(self, s, i):
return j+1
if c == b')':
self.paren -= 1
- if self.paren: # WTF, they said balanced parens need no special treatment.
+ if self.paren:
+ # WTF, they said balanced parens need no special treatment.
self._curtoken += c
return j+1
self._add_token(self._curtoken)
@@ -507,7 +511,7 @@ def nexttoken(self):
return token
-## PSStackParser
+# PSStackParser
##
class PSStackParser(PSBaseParser):
@@ -561,7 +565,8 @@ def end_type(self, type):
objs = [obj for (_, obj) in self.curstack]
(pos, self.curtype, self.curstack) = self.context.pop()
if self.debug:
- logging.debug('end_type: pos=%r, type=%r, objs=%r' % (pos, type, objs))
+ logging.debug('end_type: pos=%r, type=%r, objs=%r' %
+ (pos, type, objs))
return (pos, objs)
def do_keyword(self, pos, token):
@@ -571,11 +576,12 @@ def nextobject(self):
"""Yields a list of objects.
Returns keywords, literals, strings, numbers, arrays and dictionaries.
- Arrays and dictionaries are represented as Python lists and dictionaries.
+ Arrays and dictionaries are represented as
+ Python lists and dictionaries.
"""
while not self.results:
(pos, token) = self.nexttoken()
- #print((pos,token), (self.curtype, self.curstack))
+ # print((pos,token), (self.curtype, self.curstack))
if isinstance(token, (int, float, bool, bytes, PSLiteral)):
# normal token
self.push((pos, token))
@@ -597,9 +603,11 @@ def nextobject(self):
try:
(pos, objs) = self.end_type('d')
if len(objs) % 2 != 0:
- raise PSSyntaxError('Invalid dictionary construct: %r' % (objs,))
+ raise PSSyntaxError(
+ 'Invalid dictionary construct: %r' % (objs,))
# construct a Python dictionary.
- d = dict((literal_name(k), v) for (k, v) in choplist(2, objs) if v is not None)
+ d = dict((literal_name(k), v)
+ for (k, v) in choplist(2, objs) if v is not None)
self.push((pos, d))
except PSTypeError:
if STRICT:
@@ -616,7 +624,7 @@ def nextobject(self):
raise
else:
if self.debug:
- logging.debug('do_keyword: pos=%r, token=%r, stack=%r' % \
+ logging.debug('do_keyword: pos=%r, token=%r, stack=%r' %
(pos, token, self.curstack))
self.do_keyword(pos, token)
if self.context:
@@ -627,102 +635,3 @@ def nextobject(self):
if self.debug:
logging.debug('nextobject: %r' % (obj,))
return obj
-
-
-import unittest
-
-
-## Simplistic Test cases
-##
-class TestPSBaseParser(unittest.TestCase):
-
- TESTDATA = br'''%!PS
-begin end
- " @ #
-/a/BCD /Some_Name /foo#5f#xbaa
-0 +1 -2 .5 1.234
-(abc) () (abc ( def ) ghi)
-(def\040\0\0404ghi) (bach\\slask) (foo\nbaa)
-(this % is not a comment.)
-(foo
-baa)
-(foo\
-baa)
-<> <20> < 40 4020 >
-
-func/a/b{(c)do*}def
-[ 1 (z) ! ]
-<< /foo (bar) >>
-'''
-
- TOKENS = [
- (5, KWD(b'begin')), (11, KWD(b'end')), (16, KWD(b'"')), (19, KWD(b'@')),
- (21, KWD(b'#')), (23, LIT('a')), (25, LIT('BCD')), (30, LIT('Some_Name')),
- (41, LIT('foo_xbaa')), (54, 0), (56, 1), (59, -2), (62, 0.5),
- (65, 1.234), (71, b'abc'), (77, b''), (80, b'abc ( def ) ghi'),
- (98, b'def \x00 4ghi'), (118, b'bach\\slask'), (132, b'foo\nbaa'),
- (143, b'this % is not a comment.'), (170, b'foo\nbaa'), (180, b'foobaa'),
- (191, b''), (194, b' '), (199, b'@@ '), (211, b'\xab\xcd\x00\x124\x05'),
- (226, KWD(b'func')), (230, LIT('a')), (232, LIT('b')),
- (234, KWD(b'{')), (235, b'c'), (238, KWD(b'do*')), (241, KWD(b'}')),
- (242, KWD(b'def')), (246, KWD(b'[')), (248, 1), (250, b'z'), (254, KWD(b'!')),
- (256, KWD(b']')), (258, KWD(b'<<')), (261, LIT('foo')), (266, b'bar'),
- (272, KWD(b'>>'))
- ]
-
- OBJS = [
- (23, LIT('a')), (25, LIT('BCD')), (30, LIT('Some_Name')),
- (41, LIT('foo_xbaa')), (54, 0), (56, 1), (59, -2), (62, 0.5),
- (65, 1.234), (71, b'abc'), (77, b''), (80, b'abc ( def ) ghi'),
- (98, b'def \x00 4ghi'), (118, b'bach\\slask'), (132, b'foo\nbaa'),
- (143, b'this % is not a comment.'), (170, b'foo\nbaa'), (180, b'foobaa'),
- (191, b''), (194, b' '), (199, b'@@ '), (211, b'\xab\xcd\x00\x124\x05'),
- (230, LIT('a')), (232, LIT('b')), (234, [b'c']), (246, [1, b'z']),
- (258, {'foo': b'bar'}),
- ]
-
- def get_tokens(self, s):
- from io import BytesIO
-
- class MyParser(PSBaseParser):
- def flush(self):
- self.add_results(*self.popall())
- parser = MyParser(BytesIO(s))
- r = []
- try:
- while 1:
- r.append(parser.nexttoken())
- except PSEOF:
- pass
- return r
-
- def get_objects(self, s):
- from io import BytesIO
-
- class MyParser(PSStackParser):
- def flush(self):
- self.add_results(*self.popall())
- parser = MyParser(BytesIO(s))
- r = []
- try:
- while 1:
- r.append(parser.nextobject())
- except PSEOF:
- pass
- return r
-
- def test_1(self):
- tokens = self.get_tokens(self.TESTDATA)
- print(tokens)
- self.assertEqual(tokens, self.TOKENS)
- return
-
- def test_2(self):
- objs = self.get_objects(self.TESTDATA)
- print(objs)
- self.assertEqual(objs, self.OBJS)
- return
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/pdfminer/rijndael.py b/pdfminer/rijndael.py
index 28854c46..a94d4c64 100644
--- a/pdfminer/rijndael.py
+++ b/pdfminer/rijndael.py
@@ -24,6 +24,7 @@ def RKLENGTH(keybits):
def NROUNDS(keybits):
return (keybits)//32+6
+
Te0 = [
0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d,
0xfff2f20d, 0xd66b6bbd, 0xde6f6fb1, 0x91c5c554,
@@ -701,7 +702,7 @@ def NROUNDS(keybits):
# 128-bit blocks, Rijndael never uses more than 10 rcon values
]
-if len(struct.pack('L',0)) == 4:
+if len(struct.pack('L', 0)) == 4:
# 32bit
def GETU32(x): return struct.unpack('>L', x)[0]
def PUTU32(x): return struct.pack('>L', x)
@@ -726,15 +727,16 @@ def rijndaelSetupEncrypt(key, keybits):
temp = rk[p+3]
rk[p+4] = (rk[p+0] ^
(Te4[(temp >> 16) & 0xff] & 0xff000000) ^
- (Te4[(temp >> 8) & 0xff] & 0x00ff0000) ^
- (Te4[(temp ) & 0xff] & 0x0000ff00) ^
- (Te4[(temp >> 24) ] & 0x000000ff) ^
+ (Te4[(temp >> 8) & 0xff] & 0x00ff0000) ^
+ (Te4[(temp) & 0xff] & 0x0000ff00) ^
+ (Te4[(temp >> 24)] & 0x000000ff) ^
rcon[i])
rk[p+5] = rk[p+1] ^ rk[p+4]
rk[p+6] = rk[p+2] ^ rk[p+5]
rk[p+7] = rk[p+3] ^ rk[p+6]
i += 1
- if i == 10: return (rk, 10)
+ if i == 10:
+ return (rk, 10)
p += 4
rk[4] = GETU32(key[16:20])
@@ -744,15 +746,16 @@ def rijndaelSetupEncrypt(key, keybits):
temp = rk[p+5]
rk[p+6] = (rk[p+0] ^
(Te4[(temp >> 16) & 0xff] & 0xff000000) ^
- (Te4[(temp >> 8) & 0xff] & 0x00ff0000) ^
- (Te4[(temp ) & 0xff] & 0x0000ff00) ^
- (Te4[(temp >> 24) ] & 0x000000ff) ^
+ (Te4[(temp >> 8) & 0xff] & 0x00ff0000) ^
+ (Te4[(temp) & 0xff] & 0x0000ff00) ^
+ (Te4[(temp >> 24)] & 0x000000ff) ^
rcon[i])
rk[p+7] = rk[p+1] ^ rk[p+6]
rk[p+8] = rk[p+2] ^ rk[p+7]
rk[p+9] = rk[p+3] ^ rk[p+8]
i += 1
- if i == 8: return (rk, 12)
+ if i == 8:
+ return (rk, 12)
rk[p+10] = rk[p+4] ^ rk[p+9]
rk[p+11] = rk[p+5] ^ rk[p+10]
p += 6
@@ -764,21 +767,22 @@ def rijndaelSetupEncrypt(key, keybits):
temp = rk[p+7]
rk[p+8] = (rk[p+0] ^
(Te4[(temp >> 16) & 0xff] & 0xff000000) ^
- (Te4[(temp >> 8) & 0xff] & 0x00ff0000) ^
- (Te4[(temp ) & 0xff] & 0x0000ff00) ^
- (Te4[(temp >> 24) ] & 0x000000ff) ^
+ (Te4[(temp >> 8) & 0xff] & 0x00ff0000) ^
+ (Te4[(temp) & 0xff] & 0x0000ff00) ^
+ (Te4[(temp >> 24)] & 0x000000ff) ^
rcon[i])
rk[p+9] = rk[p+1] ^ rk[p+8]
rk[p+10] = rk[p+2] ^ rk[p+9]
rk[p+11] = rk[p+3] ^ rk[p+10]
i += 1
- if i == 7: return (rk, 14)
+ if i == 7:
+ return (rk, 14)
temp = rk[p+11]
rk[p+12] = (rk[p+4] ^
- (Te4[(temp >> 24) ] & 0xff000000) ^
+ (Te4[(temp >> 24)] & 0xff000000) ^
(Te4[(temp >> 16) & 0xff] & 0x00ff0000) ^
- (Te4[(temp >> 8) & 0xff] & 0x0000ff00) ^
- (Te4[(temp ) & 0xff] & 0x000000ff))
+ (Te4[(temp >> 8) & 0xff] & 0x0000ff00) ^
+ (Te4[(temp) & 0xff] & 0x000000ff))
rk[p+13] = rk[p+5] ^ rk[p+12]
rk[p+14] = rk[p+6] ^ rk[p+13]
rk[p+15] = rk[p+7] ^ rk[p+14]
@@ -798,36 +802,45 @@ def rijndaelSetupDecrypt(key, keybits):
i = 0
j = 4*nrounds
while i < j:
- temp = rk[i ]; rk[i ] = rk[j ]; rk[j ] = temp
- temp = rk[i + 1]; rk[i + 1] = rk[j + 1]; rk[j + 1] = temp
- temp = rk[i + 2]; rk[i + 2] = rk[j + 2]; rk[j + 2] = temp
- temp = rk[i + 3]; rk[i + 3] = rk[j + 3]; rk[j + 3] = temp
+ temp = rk[i]
+ rk[i] = rk[j]
+ rk[j] = temp
+ temp = rk[i + 1]
+ rk[i + 1] = rk[j + 1]
+ rk[j + 1] = temp
+ temp = rk[i + 2]
+ rk[i + 2] = rk[j + 2]
+ rk[j + 2] = temp
+ temp = rk[i + 3]
+ rk[i + 3] = rk[j + 3]
+ rk[j + 3] = temp
i += 4
j -= 4
- # apply the inverse MixColumn transform to all round keys but the first and the last:
+ # apply the inverse MixColumn transform to all round keys
+ # but the first and the last:
p = 0
for i in range(1, nrounds):
p += 4
rk[p+0] = (
- Td0[Te4[(rk[p+0] >> 24) ] & 0xff] ^
- Td1[Te4[(rk[p+0] >> 16) & 0xff] & 0xff] ^
- Td2[Te4[(rk[p+0] >> 8) & 0xff] & 0xff] ^
- Td3[Te4[(rk[p+0] ) & 0xff] & 0xff])
+ Td0[Te4[(rk[p+0] >> 24)] & 0xff] ^
+ Td1[Te4[(rk[p+0] >> 16) & 0xff] & 0xff] ^
+ Td2[Te4[(rk[p+0] >> 8) & 0xff] & 0xff] ^
+ Td3[Te4[(rk[p+0]) & 0xff] & 0xff])
rk[p+1] = (
- Td0[Te4[(rk[p+1] >> 24) ] & 0xff] ^
- Td1[Te4[(rk[p+1] >> 16) & 0xff] & 0xff] ^
- Td2[Te4[(rk[p+1] >> 8) & 0xff] & 0xff] ^
- Td3[Te4[(rk[p+1] ) & 0xff] & 0xff])
+ Td0[Te4[(rk[p+1] >> 24)] & 0xff] ^
+ Td1[Te4[(rk[p+1] >> 16) & 0xff] & 0xff] ^
+ Td2[Te4[(rk[p+1] >> 8) & 0xff] & 0xff] ^
+ Td3[Te4[(rk[p+1]) & 0xff] & 0xff])
rk[p+2] = (
- Td0[Te4[(rk[p+2] >> 24) ] & 0xff] ^
- Td1[Te4[(rk[p+2] >> 16) & 0xff] & 0xff] ^
- Td2[Te4[(rk[p+2] >> 8) & 0xff] & 0xff] ^
- Td3[Te4[(rk[p+2] ) & 0xff] & 0xff])
+ Td0[Te4[(rk[p+2] >> 24)] & 0xff] ^
+ Td1[Te4[(rk[p+2] >> 16) & 0xff] & 0xff] ^
+ Td2[Te4[(rk[p+2] >> 8) & 0xff] & 0xff] ^
+ Td3[Te4[(rk[p+2]) & 0xff] & 0xff])
rk[p+3] = (
- Td0[Te4[(rk[p+3] >> 24) ] & 0xff] ^
- Td1[Te4[(rk[p+3] >> 16) & 0xff] & 0xff] ^
- Td2[Te4[(rk[p+3] >> 8) & 0xff] & 0xff] ^
- Td3[Te4[(rk[p+3] ) & 0xff] & 0xff])
+ Td0[Te4[(rk[p+3] >> 24)] & 0xff] ^
+ Td1[Te4[(rk[p+3] >> 16) & 0xff] & 0xff] ^
+ Td2[Te4[(rk[p+3] >> 8) & 0xff] & 0xff] ^
+ Td3[Te4[(rk[p+3]) & 0xff] & 0xff])
return (rk, nrounds)
@@ -847,88 +860,89 @@ def rijndaelEncrypt(rk, nrounds, plaintext):
p = 0
while 1:
t0 = (
- Te0[(s0 >> 24) ] ^
- Te1[(s1 >> 16) & 0xff] ^
- Te2[(s2 >> 8) & 0xff] ^
- Te3[(s3 ) & 0xff] ^
- rk[p+4])
+ Te0[(s0 >> 24)] ^
+ Te1[(s1 >> 16) & 0xff] ^
+ Te2[(s2 >> 8) & 0xff] ^
+ Te3[(s3) & 0xff] ^
+ rk[p+4])
t1 = (
- Te0[(s1 >> 24) ] ^
- Te1[(s2 >> 16) & 0xff] ^
- Te2[(s3 >> 8) & 0xff] ^
- Te3[(s0 ) & 0xff] ^
- rk[p+5])
+ Te0[(s1 >> 24)] ^
+ Te1[(s2 >> 16) & 0xff] ^
+ Te2[(s3 >> 8) & 0xff] ^
+ Te3[(s0) & 0xff] ^
+ rk[p+5])
t2 = (
- Te0[(s2 >> 24) ] ^
- Te1[(s3 >> 16) & 0xff] ^
- Te2[(s0 >> 8) & 0xff] ^
- Te3[(s1 ) & 0xff] ^
- rk[p+6])
+ Te0[(s2 >> 24)] ^
+ Te1[(s3 >> 16) & 0xff] ^
+ Te2[(s0 >> 8) & 0xff] ^
+ Te3[(s1) & 0xff] ^
+ rk[p+6])
t3 = (
- Te0[(s3 >> 24) ] ^
- Te1[(s0 >> 16) & 0xff] ^
- Te2[(s1 >> 8) & 0xff] ^
- Te3[(s2 ) & 0xff] ^
- rk[p+7])
+ Te0[(s3 >> 24)] ^
+ Te1[(s0 >> 16) & 0xff] ^
+ Te2[(s1 >> 8) & 0xff] ^
+ Te3[(s2) & 0xff] ^
+ rk[p+7])
p += 8
r -= 1
- if r == 0: break
+ if r == 0:
+ break
s0 = (
- Te0[(t0 >> 24) ] ^
- Te1[(t1 >> 16) & 0xff] ^
- Te2[(t2 >> 8) & 0xff] ^
- Te3[(t3 ) & 0xff] ^
- rk[p+0])
+ Te0[(t0 >> 24)] ^
+ Te1[(t1 >> 16) & 0xff] ^
+ Te2[(t2 >> 8) & 0xff] ^
+ Te3[(t3) & 0xff] ^
+ rk[p+0])
s1 = (
- Te0[(t1 >> 24) ] ^
- Te1[(t2 >> 16) & 0xff] ^
- Te2[(t3 >> 8) & 0xff] ^
- Te3[(t0 ) & 0xff] ^
- rk[p+1])
+ Te0[(t1 >> 24)] ^
+ Te1[(t2 >> 16) & 0xff] ^
+ Te2[(t3 >> 8) & 0xff] ^
+ Te3[(t0) & 0xff] ^
+ rk[p+1])
s2 = (
- Te0[(t2 >> 24) ] ^
- Te1[(t3 >> 16) & 0xff] ^
- Te2[(t0 >> 8) & 0xff] ^
- Te3[(t1 ) & 0xff] ^
- rk[p+2])
+ Te0[(t2 >> 24)] ^
+ Te1[(t3 >> 16) & 0xff] ^
+ Te2[(t0 >> 8) & 0xff] ^
+ Te3[(t1) & 0xff] ^
+ rk[p+2])
s3 = (
- Te0[(t3 >> 24) ] ^
- Te1[(t0 >> 16) & 0xff] ^
- Te2[(t1 >> 8) & 0xff] ^
- Te3[(t2 ) & 0xff] ^
- rk[p+3])
+ Te0[(t3 >> 24)] ^
+ Te1[(t0 >> 16) & 0xff] ^
+ Te2[(t1 >> 8) & 0xff] ^
+ Te3[(t2) & 0xff] ^
+ rk[p+3])
ciphertext = b''
# apply last round and
# map cipher state to byte array block:
s0 = (
- (Te4[(t0 >> 24) ] & 0xff000000) ^
- (Te4[(t1 >> 16) & 0xff] & 0x00ff0000) ^
- (Te4[(t2 >> 8) & 0xff] & 0x0000ff00) ^
- (Te4[(t3 ) & 0xff] & 0x000000ff) ^
- rk[p+0])
+ (Te4[(t0 >> 24)] & 0xff000000) ^
+ (Te4[(t1 >> 16) & 0xff] & 0x00ff0000) ^
+ (Te4[(t2 >> 8) & 0xff] & 0x0000ff00) ^
+ (Te4[(t3) & 0xff] & 0x000000ff) ^
+ rk[p+0])
ciphertext += PUTU32(s0)
s1 = (
- (Te4[(t1 >> 24) ] & 0xff000000) ^
- (Te4[(t2 >> 16) & 0xff] & 0x00ff0000) ^
- (Te4[(t3 >> 8) & 0xff] & 0x0000ff00) ^
- (Te4[(t0 ) & 0xff] & 0x000000ff) ^
- rk[p+1])
+ (Te4[(t1 >> 24)] & 0xff000000) ^
+ (Te4[(t2 >> 16) & 0xff] & 0x00ff0000) ^
+ (Te4[(t3 >> 8) & 0xff] & 0x0000ff00) ^
+ (Te4[(t0) & 0xff] & 0x000000ff) ^
+ rk[p+1])
ciphertext += PUTU32(s1)
s2 = (
- (Te4[(t2 >> 24) ] & 0xff000000) ^
- (Te4[(t3 >> 16) & 0xff] & 0x00ff0000) ^
- (Te4[(t0 >> 8) & 0xff] & 0x0000ff00) ^
- (Te4[(t1 ) & 0xff] & 0x000000ff) ^
- rk[p+2])
+ (Te4[(t2 >> 24)] & 0xff000000) ^
+ (Te4[(t3 >> 16) & 0xff] & 0x00ff0000) ^
+ (Te4[(t0 >> 8) & 0xff] & 0x0000ff00) ^
+ (Te4[(t1) & 0xff] & 0x000000ff) ^
+ rk[p+2])
ciphertext += PUTU32(s2)
s3 = (
- (Te4[(t3 >> 24) ] & 0xff000000) ^
- (Te4[(t0 >> 16) & 0xff] & 0x00ff0000) ^
- (Te4[(t1 >> 8) & 0xff] & 0x0000ff00) ^
- (Te4[(t2 ) & 0xff] & 0x000000ff) ^
- rk[p+3])
+ (Te4[(t3 >> 24)] & 0xff000000) ^
+ (Te4[(t0 >> 16) & 0xff] & 0x00ff0000) ^
+ (Te4[(t1 >> 8) & 0xff] & 0x0000ff00) ^
+ (Te4[(t2) & 0xff] & 0x000000ff) ^
+ rk[p+3])
ciphertext += PUTU32(s3)
assert len(ciphertext) == 16
@@ -950,88 +964,89 @@ def rijndaelDecrypt(rk, nrounds, ciphertext):
p = 0
while 1:
t0 = (
- Td0[(s0 >> 24) ] ^
- Td1[(s3 >> 16) & 0xff] ^
- Td2[(s2 >> 8) & 0xff] ^
- Td3[(s1 ) & 0xff] ^
- rk[p+4])
+ Td0[(s0 >> 24)] ^
+ Td1[(s3 >> 16) & 0xff] ^
+ Td2[(s2 >> 8) & 0xff] ^
+ Td3[(s1) & 0xff] ^
+ rk[p+4])
t1 = (
- Td0[(s1 >> 24) ] ^
- Td1[(s0 >> 16) & 0xff] ^
- Td2[(s3 >> 8) & 0xff] ^
- Td3[(s2 ) & 0xff] ^
- rk[p+5])
+ Td0[(s1 >> 24)] ^
+ Td1[(s0 >> 16) & 0xff] ^
+ Td2[(s3 >> 8) & 0xff] ^
+ Td3[(s2) & 0xff] ^
+ rk[p+5])
t2 = (
- Td0[(s2 >> 24) ] ^
- Td1[(s1 >> 16) & 0xff] ^
- Td2[(s0 >> 8) & 0xff] ^
- Td3[(s3 ) & 0xff] ^
- rk[p+6])
+ Td0[(s2 >> 24)] ^
+ Td1[(s1 >> 16) & 0xff] ^
+ Td2[(s0 >> 8) & 0xff] ^
+ Td3[(s3) & 0xff] ^
+ rk[p+6])
t3 = (
- Td0[(s3 >> 24) ] ^
- Td1[(s2 >> 16) & 0xff] ^
- Td2[(s1 >> 8) & 0xff] ^
- Td3[(s0 ) & 0xff] ^
- rk[p+7])
+ Td0[(s3 >> 24)] ^
+ Td1[(s2 >> 16) & 0xff] ^
+ Td2[(s1 >> 8) & 0xff] ^
+ Td3[(s0) & 0xff] ^
+ rk[p+7])
p += 8
r -= 1
- if r == 0: break
+ if r == 0:
+ break
s0 = (
- Td0[(t0 >> 24) ] ^
- Td1[(t3 >> 16) & 0xff] ^
- Td2[(t2 >> 8) & 0xff] ^
- Td3[(t1 ) & 0xff] ^
- rk[p+0])
+ Td0[(t0 >> 24)] ^
+ Td1[(t3 >> 16) & 0xff] ^
+ Td2[(t2 >> 8) & 0xff] ^
+ Td3[(t1) & 0xff] ^
+ rk[p+0])
s1 = (
- Td0[(t1 >> 24) ] ^
- Td1[(t0 >> 16) & 0xff] ^
- Td2[(t3 >> 8) & 0xff] ^
- Td3[(t2 ) & 0xff] ^
- rk[p+1])
+ Td0[(t1 >> 24)] ^
+ Td1[(t0 >> 16) & 0xff] ^
+ Td2[(t3 >> 8) & 0xff] ^
+ Td3[(t2) & 0xff] ^
+ rk[p+1])
s2 = (
- Td0[(t2 >> 24) ] ^
- Td1[(t1 >> 16) & 0xff] ^
- Td2[(t0 >> 8) & 0xff] ^
- Td3[(t3 ) & 0xff] ^
- rk[p+2])
+ Td0[(t2 >> 24)] ^
+ Td1[(t1 >> 16) & 0xff] ^
+ Td2[(t0 >> 8) & 0xff] ^
+ Td3[(t3) & 0xff] ^
+ rk[p+2])
s3 = (
- Td0[(t3 >> 24) ] ^
- Td1[(t2 >> 16) & 0xff] ^
- Td2[(t1 >> 8) & 0xff] ^
- Td3[(t0 ) & 0xff] ^
- rk[p+3])
+ Td0[(t3 >> 24)] ^
+ Td1[(t2 >> 16) & 0xff] ^
+ Td2[(t1 >> 8) & 0xff] ^
+ Td3[(t0) & 0xff] ^
+ rk[p+3])
plaintext = b''
# apply last round and
# map cipher state to byte array block:
s0 = (
- (Td4[(t0 >> 24) ] & 0xff000000) ^
- (Td4[(t3 >> 16) & 0xff] & 0x00ff0000) ^
- (Td4[(t2 >> 8) & 0xff] & 0x0000ff00) ^
- (Td4[(t1 ) & 0xff] & 0x000000ff) ^
- rk[p+0])
+ (Td4[(t0 >> 24)] & 0xff000000) ^
+ (Td4[(t3 >> 16) & 0xff] & 0x00ff0000) ^
+ (Td4[(t2 >> 8) & 0xff] & 0x0000ff00) ^
+ (Td4[(t1) & 0xff] & 0x000000ff) ^
+ rk[p+0])
plaintext += PUTU32(s0)
s1 = (
- (Td4[(t1 >> 24) ] & 0xff000000) ^
- (Td4[(t0 >> 16) & 0xff] & 0x00ff0000) ^
- (Td4[(t3 >> 8) & 0xff] & 0x0000ff00) ^
- (Td4[(t2 ) & 0xff] & 0x000000ff) ^
- rk[p+1])
+ (Td4[(t1 >> 24)] & 0xff000000) ^
+ (Td4[(t0 >> 16) & 0xff] & 0x00ff0000) ^
+ (Td4[(t3 >> 8) & 0xff] & 0x0000ff00) ^
+ (Td4[(t2) & 0xff] & 0x000000ff) ^
+ rk[p+1])
plaintext += PUTU32(s1)
s2 = (
- (Td4[(t2 >> 24) ] & 0xff000000) ^
- (Td4[(t1 >> 16) & 0xff] & 0x00ff0000) ^
- (Td4[(t0 >> 8) & 0xff] & 0x0000ff00) ^
- (Td4[(t3 ) & 0xff] & 0x000000ff) ^
- rk[p+2])
+ (Td4[(t2 >> 24)] & 0xff000000) ^
+ (Td4[(t1 >> 16) & 0xff] & 0x00ff0000) ^
+ (Td4[(t0 >> 8) & 0xff] & 0x0000ff00) ^
+ (Td4[(t3) & 0xff] & 0x000000ff) ^
+ rk[p+2])
plaintext += PUTU32(s2)
s3 = (
- (Td4[(t3 >> 24) ] & 0xff000000) ^
- (Td4[(t2 >> 16) & 0xff] & 0x00ff0000) ^
- (Td4[(t1 >> 8) & 0xff] & 0x0000ff00) ^
- (Td4[(t0 ) & 0xff] & 0x000000ff) ^
- rk[p+3])
+ (Td4[(t3 >> 24)] & 0xff000000) ^
+ (Td4[(t2 >> 16) & 0xff] & 0x00ff0000) ^
+ (Td4[(t1 >> 8) & 0xff] & 0x0000ff00) ^
+ (Td4[(t0) & 0xff] & 0x000000ff) ^
+ rk[p+3])
plaintext += PUTU32(s3)
assert len(plaintext) == 16
@@ -1041,13 +1056,6 @@ def rijndaelDecrypt(rk, nrounds, ciphertext):
# decrypt(key, fin, fout, keybits=256)
class RijndaelDecryptor:
- """
- >>> key = bytes.fromhex('00010203050607080a0b0c0d0f101112')
- >>> ciphertext = bytes.fromhex('d8f532538289ef7d06b506a4fd5be9c9')
- >>> RijndaelDecryptor(key, 128).decrypt(ciphertext).hex()
- '506812a45f08c889b97f5980038b8359'
- """
-
def __init__(self, key, keybits=256):
assert len(key) == KEYLENGTH(keybits)
(self.rk, self.nrounds) = rijndaelSetupDecrypt(key, keybits)
@@ -1063,13 +1071,6 @@ def decrypt(self, ciphertext):
# encrypt(key, fin, fout, keybits=256)
class RijndaelEncryptor:
- """
- >>> key = bytes.fromhex('00010203050607080a0b0c0d0f101112')
- >>> plaintext = bytes.fromhex('506812a45f08c889b97f5980038b8359')
- >>> RijndaelEncryptor(key, 128).encrypt(plaintext).hex()
- 'd8f532538289ef7d06b506a4fd5be9c9'
- """
-
def __init__(self, key, keybits=256):
assert len(key) == KEYLENGTH(keybits)
(self.rk, self.nrounds) = rijndaelSetupEncrypt(key, keybits)
@@ -1084,4 +1085,4 @@ def encrypt(self, plaintext):
if __name__ == '__main__':
import doctest
- print('pdfminer.rijndael', doctest.testmod())
+ print('pdfminer.rijndael', doctest.testmod())
\ No newline at end of file
diff --git a/pdfminer/runlength.py b/pdfminer/runlength.py
index 299f0af3..c687f582 100644
--- a/pdfminer/runlength.py
+++ b/pdfminer/runlength.py
@@ -7,7 +7,7 @@
#
def rldecode(data):
- r"""
+ """
RunLength decoder (Adobe version) implementation based on PDF Reference
version 1.4 section 3.3.4:
The RunLengthDecode filter decodes data that has been encoded in a
@@ -19,30 +19,22 @@ def rldecode(data):
129 to 255, the following single byte is to be copied 257 - length
(2 to 128) times during decompression. A length value of 128
denotes EOD.
- >>> s = b'\x05123456\xfa7\x04abcde\x80junk'
- >>> rldecode(s)
- b'1234567777777abcde'
"""
decoded = b''
i = 0
while i < len(data):
- #print('data[%d]=:%d:' % (i,ord(data[i])))
+ # print('data[%d]=:%d:' % (i,ord(data[i])))
length = data[i]
if length == 128:
break
if length >= 0 and length < 128:
run = data[i+1:(i+1)+(length+1)]
- #print('length=%d, run=%s' % (length+1,run))
+ # print('length=%d, run=%s' % (length+1,run))
decoded += run
i = (i+1) + (length+1)
if length > 128:
run = data[i+1:i+2]*(257-length)
- #print('length=%d, run=%s' % (257-length,run))
+ # print('length=%d, run=%s' % (257-length,run))
decoded += run
i = (i+1) + 1
return decoded
-
-
-if __name__ == '__main__':
- import doctest
- print('pdfminer.runlength', doctest.testmod())
diff --git a/pdfminer/utils.py b/pdfminer/utils.py
index 1ff446ef..5b5fc1d6 100644
--- a/pdfminer/utils.py
+++ b/pdfminer/utils.py
@@ -6,12 +6,13 @@
from sys import maxsize as INF
-## PNG Predictor
+# PNG Predictor
##
def apply_png_predictor(pred, colors, columns, bitspercomponent, data):
if bitspercomponent != 8:
# unsupported
- raise ValueError("Unsupported `bitspercomponent': %d"%bitspercomponent)
+ raise ValueError(
+ "Unsupported `bitspercomponent': %d" % bitspercomponent)
nbytes = colors*columns*bitspercomponent//8
i = 0
buf = b''
@@ -43,13 +44,13 @@ def apply_png_predictor(pred, colors, columns, bitspercomponent, data):
line2 += bytes([c])
else:
# unsupported
- raise ValueError("Unsupported predictor value: %d"%ft)
+ raise ValueError("Unsupported predictor value: %d" % ft)
buf += line2
line0 = line2
return buf
-## Matrix operations
+# Matrix operations
##
MATRIX_IDENTITY = (1, 0, 0, 1, 0, 0)
@@ -84,7 +85,7 @@ def apply_matrix_norm(m, v):
return (a*p+c*q, b*p+d*q)
-## Utility functions
+# Utility functions
##
# isnumber
@@ -92,6 +93,8 @@ def isnumber(x):
return isinstance(x, (int, float))
# uniq
+
+
def uniq(objs):
"""Eliminates duplicated elements."""
done = set()
@@ -106,7 +109,7 @@ def uniq(objs):
# csort
def csort(objs, key):
"""Order-preserving sorting function."""
- idxs = { obj:i for (i, obj) in enumerate(objs) }
+ idxs = {obj: i for (i, obj) in enumerate(objs)}
return sorted(objs, key=lambda obj: (key(obj), idxs[obj]))
@@ -168,19 +171,19 @@ def choplist(n, seq):
# nunpack
def nunpack(s, default=0):
"""Unpacks 1 to 4 byte integers (big endian)."""
- l = len(s)
- if not l:
+ length_s = len(s)
+ if not length_s:
return default
- elif l == 1:
+ elif length_s == 1:
return s[0]
- elif l == 2:
+ elif length_s == 2:
return struct.unpack('>H', s)[0]
- elif l == 3:
+ elif length_s == 3:
return struct.unpack('>L', b'\x00'+s)[0]
- elif l == 4:
+ elif length_s == 4:
return struct.unpack('>L', s)[0]
else:
- raise TypeError('invalid length: %d' % l)
+ raise TypeError('invalid length: %d' % length_s)
# decode_text
@@ -227,12 +230,14 @@ def decode_text(s):
else:
return ''.join(PDFDocEncoding[c] for c in s)
+
def q(s):
"""Quotes html string."""
- return (s.replace('&','&')
- .replace('<','<')
- .replace('>','>')
- .replace('"','"'))
+ return (s.replace('&', '&')
+ .replace('<', '<')
+ .replace('>', '>')
+ .replace('"', '"'))
+
def bbox2str(bbox):
(x0, y0, x1, y1) = bbox
@@ -244,12 +249,12 @@ def matrix2str(m):
return '[%.2f,%.2f,%.2f,%.2f, (%.2f,%.2f)]' % (a, b, c, d, e, f)
-## Plane
+# Plane
##
-## A set-like data structure for objects placed on a plane.
-## Can efficiently find objects in a certain rectangular area.
-## It maintains two parallel lists of objects, each of
-## which is sorted by its x or y coordinate.
+# A set-like data structure for objects placed on a plane.
+# Can efficiently find objects in a certain rectangular area.
+# It maintains two parallel lists of objects, each of
+# which is sorted by its x or y coordinate.
##
class Plane:
@@ -265,7 +270,7 @@ def __repr__(self):
return ('' % list(self))
def __iter__(self):
- return ( obj for obj in self._seq if obj in self._objs )
+ return (obj for obj in self._seq if obj in self._objs)
def __len__(self):
return len(self._objs)
@@ -276,7 +281,8 @@ def __contains__(self, obj):
def _getrange(self, bbox):
(x0, y0, x1, y1) = bbox
if (x1 <= self.x0 or self.x1 <= x0 or
- y1 <= self.y0 or self.y1 <= y0): return
+ y1 <= self.y0 or self.y1 <= y0):
+ return
x0 = max(self.x0, x0)
y0 = max(self.y0, y0)
x1 = min(self.x1, x1)
@@ -327,7 +333,7 @@ def find(self, bbox):
continue
done.add(obj)
if (obj.x1 <= x0 or x1 <= obj.x0 or
- obj.y1 <= y0 or y1 <= obj.y0):
+ obj.y1 <= y0 or y1 <= obj.y0):
continue
yield obj
return
diff --git a/requirements.txt b/requirements.txt
new file mode 100644
index 00000000..98478aac
--- /dev/null
+++ b/requirements.txt
@@ -0,0 +1,3 @@
+pygame==2.1.2
+wheel==0.37.1
+pycrypto==2.6.1
\ No newline at end of file
diff --git a/tests/__init__.py b/tests/__init__.py
new file mode 100644
index 00000000..77b4b329
--- /dev/null
+++ b/tests/__init__.py
@@ -0,0 +1,5 @@
+#!/usr/bin/env python
+__version__ = '20220906'
+
+if __name__ == '__main__':
+ print(__version__)
\ No newline at end of file
diff --git a/tests/test_arcfour.py b/tests/test_arcfour.py
new file mode 100644
index 00000000..5818c70a
--- /dev/null
+++ b/tests/test_arcfour.py
@@ -0,0 +1,20 @@
+import unittest
+from pdfminer.arcfour import Arcfour
+
+
+class TestArcfourMethods(unittest.TestCase):
+ def test_1(self):
+ arcfour = Arcfour(b'Key').process(b'Plaintext').hex()
+ self.assertEqual(arcfour, 'bbf316e8d940af0ad3')
+
+ def test_2(self):
+ arcfour = Arcfour(b'Wiki').process(b'pedia').hex()
+ self.assertEqual(arcfour, '1021bf0420')
+
+ def test_3(self):
+ arcfour = Arcfour(b'Secret').process(b'Attack at dawn').hex()
+ self.assertEqual(arcfour, '45a01f645fc35b383552544b9bf5')
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/tests/test_ascii85.py b/tests/test_ascii85.py
new file mode 100644
index 00000000..50f214bc
--- /dev/null
+++ b/tests/test_ascii85.py
@@ -0,0 +1,30 @@
+import unittest
+from pdfminer.ascii85 import ascii85decode, asciihexdecode
+
+
+class TestAscii85(unittest.TestCase):
+ def test_ascii85decode(self):
+ ascii85_decode = ascii85decode(b'9jqo^BlbD-BleB1DJ+*+F(f,q')
+ decode85_ans = b'Man is distinguished'
+ self.assertEqual(ascii85_decode, decode85_ans)
+
+ ascii85_decode_2 = ascii85decode(b'E,9)oF*2M7/c~>')
+ decode85_ans_2 = b'pleasure.'
+ self.assertEqual(ascii85_decode_2, decode85_ans_2)
+
+ def test_asciihexcode(self):
+ ascii_hex = asciihexdecode(b'61 62 2e6364 65')
+ ascii_hex_ans = b'ab.cde'
+ self.assertEqual(ascii_hex, ascii_hex_ans)
+
+ ascii_hex_2 = asciihexdecode(b'61 62 2e6364 657>')
+ ascii_hex_ans_2 = b'ab.cdep'
+ self.assertEqual(ascii_hex_2, ascii_hex_ans_2)
+
+ ascii_hex_3 = asciihexdecode(b'7>')
+ ascii_hex_ans_3 = b'p'
+ self.assertEqual(ascii_hex_3, ascii_hex_ans_3)
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/tests/test_ccitt.py b/tests/test_ccitt.py
new file mode 100644
index 00000000..2411cca3
--- /dev/null
+++ b/tests/test_ccitt.py
@@ -0,0 +1,139 @@
+import unittest
+from pdfminer.ccitt import CCITTG4Parser
+
+
+class TestCCITTG4Parser(unittest.TestCase):
+
+ def get_parser(self, bits):
+ parser = CCITTG4Parser(len(bits))
+ parser._curline = [int(c) for c in bits]
+ parser._reset_line()
+ return parser
+
+ def test_b1(self):
+ parser = self.get_parser('00000')
+ parser._do_vertical(0)
+ self.assertEqual(parser._curpos, 0)
+
+ def test_b2(self):
+ parser = self.get_parser('10000')
+ parser._do_vertical(-1)
+ self.assertEqual(parser._curpos, 0)
+
+ def test_b3(self):
+ parser = self.get_parser('000111')
+ parser._do_pass()
+ self.assertEqual(parser._curpos, 3)
+ self.assertEqual(parser._get_bits(), '111')
+
+ def test_b4(self):
+ parser = self.get_parser('00000')
+ parser._do_vertical(+2)
+ self.assertEqual(parser._curpos, 2)
+ self.assertEqual(parser._get_bits(), '11')
+
+ def test_b5(self):
+ parser = self.get_parser('11111111100')
+ parser._do_horizontal(0, 3)
+ self.assertEqual(parser._curpos, 3)
+ parser._do_vertical(1)
+ self.assertEqual(parser._curpos, 10)
+ self.assertEqual(parser._get_bits(), '0001111111')
+
+ def test_e1(self):
+ parser = self.get_parser('10000')
+ parser._do_vertical(0)
+ self.assertEqual(parser._curpos, 1)
+ parser._do_vertical(0)
+ self.assertEqual(parser._curpos, 5)
+ self.assertEqual(parser._get_bits(), '10000')
+
+ def test_e2(self):
+ parser = self.get_parser('10011')
+ parser._do_vertical(0)
+ self.assertEqual(parser._curpos, 1)
+ parser._do_vertical(2)
+ self.assertEqual(parser._curpos, 5)
+ self.assertEqual(parser._get_bits(), '10000')
+
+ def test_e3(self):
+ parser = self.get_parser('011111')
+ parser._color = 0
+ parser._do_vertical(0)
+ self.assertEqual(parser._color, 1)
+ self.assertEqual(parser._curpos, 1)
+ parser._do_vertical(-2)
+ self.assertEqual(parser._color, 0)
+ self.assertEqual(parser._curpos, 4)
+ parser._do_vertical(0)
+ self.assertEqual(parser._curpos, 6)
+ self.assertEqual(parser._get_bits(), '011100')
+
+ def test_e4(self):
+ parser = self.get_parser('10000')
+ parser._do_vertical(0)
+ self.assertEqual(parser._curpos, 1)
+ parser._do_vertical(-2)
+ self.assertEqual(parser._curpos, 3)
+ parser._do_vertical(0)
+ self.assertEqual(parser._curpos, 5)
+ self.assertEqual(parser._get_bits(), '10011')
+
+ def test_e5(self):
+ parser = self.get_parser('011000')
+ parser._color = 0
+ parser._do_vertical(0)
+ self.assertEqual(parser._curpos, 1)
+ parser._do_vertical(3)
+ self.assertEqual(parser._curpos, 6)
+ self.assertEqual(parser._get_bits(), '011111')
+
+ def test_e6(self):
+ parser = self.get_parser('11001')
+ parser._do_pass()
+ self.assertEqual(parser._curpos, 4)
+ parser._do_vertical(0)
+ self.assertEqual(parser._curpos, 5)
+ self.assertEqual(parser._get_bits(), '11111')
+
+ def test_e7(self):
+ parser = self.get_parser('0000000000')
+ parser._curpos = 2
+ parser._color = 1
+ parser._do_horizontal(2, 6)
+ self.assertEqual(parser._curpos, 10)
+ self.assertEqual(parser._get_bits(), '1111000000')
+
+ def test_e8(self):
+ parser = self.get_parser('001100000')
+ parser._curpos = 1
+ parser._color = 0
+ parser._do_vertical(0)
+ self.assertEqual(parser._curpos, 2)
+ parser._do_horizontal(7, 0)
+ self.assertEqual(parser._curpos, 9)
+ self.assertEqual(parser._get_bits(), '101111111')
+
+ def test_m1(self):
+ parser = self.get_parser('10101')
+ parser._do_pass()
+ self.assertEqual(parser._curpos, 2)
+ parser._do_pass()
+ self.assertEqual(parser._curpos, 4)
+ self.assertEqual(parser._get_bits(), '1111')
+
+ def test_m2(self):
+ parser = self.get_parser('101011')
+ parser._do_vertical(-1)
+ parser._do_vertical(-1)
+ parser._do_vertical(1)
+ parser._do_horizontal(1, 1)
+ self.assertEqual(parser._get_bits(), '011101')
+
+ def test_m3(self):
+ parser = self.get_parser('10111011')
+ parser._do_vertical(-1)
+ parser._do_pass()
+ parser._do_vertical(1)
+ parser._do_vertical(1)
+ self.assertEqual(parser._get_bits(), '00000001')
diff --git a/tests/test_lintin2ascii.py b/tests/test_lintin2ascii.py
new file mode 100644
index 00000000..052b47e9
--- /dev/null
+++ b/tests/test_lintin2ascii.py
@@ -0,0 +1,8 @@
+import unittest
+
+class MyTestCase(unittest.TestCase):
+ def test_something(self):
+ self.assertEqual(True, False) # add assertion here
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/tests/test_lzw.py b/tests/test_lzw.py
new file mode 100644
index 00000000..8748d66d
--- /dev/null
+++ b/tests/test_lzw.py
@@ -0,0 +1,12 @@
+import unittest
+from pdfminer.lzw import lzwdecode
+
+
+class TestLzwMethods(unittest.TestCase):
+ def test1(self):
+ obj = lzwdecode(bytes.fromhex('800b6050220c0c8501'))
+ self.assertEqual(obj ,b'-----A---B')
+
+
+if __name__ == '__main__':
+ unittest.main()
\ No newline at end of file
diff --git a/tests/test_pdf2txt.py b/tests/test_pdf2txt.py
new file mode 100644
index 00000000..afc8718f
--- /dev/null
+++ b/tests/test_pdf2txt.py
@@ -0,0 +1,45 @@
+import contextlib
+import io
+import unittest
+from unittest.mock import patch
+from tools.pdf2txt import main
+
+
+class TestPdf2Txt(unittest.TestCase):
+ def run_tests(self, func_with_tests, args):
+ """Runs the tests provided in func_with_tests with a fake stdout.
+
+ Params:
+ func_with_tests: a function that runs the actual tests. The
+ function will receive the fake stdout as an argument.
+
+ args: The arguments that will be passed to the main function
+ """
+ fake_stdout = io.StringIO()
+ with contextlib.redirect_stdout(fake_stdout):
+ with patch('sys.argv', args):
+ main()
+ func_with_tests(fake_stdout)
+ fake_stdout.close()
+
+ def test_default(self):
+ def tests(fake_stdout):
+ self.assertIn("Hello", fake_stdout.getvalue())
+ self.assertIn("W o r l d", fake_stdout.getvalue())
+
+ self.run_tests(tests, ['pdf2txt.py', 'samples/simple1.pdf'])
+
+ def test_html_output(self):
+ def tests(fake_stdout):
+ self.assertIn("Hello", fake_stdout.getvalue())
+ self.assertIn("W o r l d", fake_stdout.getvalue())
+ self.assertIn(
+ "",
+ fake_stdout.getvalue(),
+ 'The output should have the html tag'
+ )
+ self.assertIn("", fake_stdout.getvalue())
+
+ self.run_tests(
+ tests, ['pdf2txt.py', '-t', 'html', 'samples/simple1.pdf']
+ )
diff --git a/tests/test_pdffont.py b/tests/test_pdffont.py
new file mode 100644
index 00000000..71565934
--- /dev/null
+++ b/tests/test_pdffont.py
@@ -0,0 +1,25 @@
+import unittest
+
+from pdfminer.pdffont import get_widths, get_widths2
+
+
+class TestPDFFont(unittest.TestCase):
+
+ def test_get_widths(self):
+ self.assertEqual(get_widths([1]), {})
+ self.assertEqual(get_widths([1, 2, 3]), {1: 3, 2: 3})
+ self.assertEqual(
+ get_widths([1, [2, 3], 6, [7, 8]]),
+ {1: 2, 2: 3, 6: 7, 7: 8}
+ )
+
+ def test_get_widths2(self):
+ self.assertEqual(get_widths2([1]), {})
+ self.assertEqual(
+ get_widths2([1, 2, 3, 4, 5]),
+ {1: (3, (4, 5)), 2: (3, (4, 5))}
+ )
+ self.assertEqual(
+ get_widths2([1, [2, 3, 4, 5], 6, [7, 8, 9]]),
+ {1: (2, (3, 4)), 6: (7, (8, 9))}
+ )
diff --git a/tests/test_psparser.py b/tests/test_psparser.py
new file mode 100644
index 00000000..0c34c453
--- /dev/null
+++ b/tests/test_psparser.py
@@ -0,0 +1,101 @@
+import unittest
+
+from pdfminer.psparser import KWD, LIT, PSBaseParser, PSEOF, PSStackParser
+
+
+class TestPSBaseParser(unittest.TestCase):
+
+ TESTDATA = br'''%!PS
+begin end
+ " @ #
+/a/BCD /Some_Name /foo#5f#xbaa
+0 +1 -2 .5 1.234
+(abc) () (abc ( def ) ghi)
+(def\040\0\0404ghi) (bach\\slask) (foo\nbaa)
+(this % is not a comment.)
+(foo
+baa)
+(foo\
+baa)
+<> <20> < 40 4020 >
+
+func/a/b{(c)do*}def
+[ 1 (z) ! ]
+<< /foo (bar) >>
+'''
+
+ TOKENS = [
+ (5, KWD(b'begin')), (11, KWD(b'end')), (16, KWD(b'"')),
+ (19, KWD(b'@')), (21, KWD(b'#')), (23, LIT('a')),
+ (25, LIT('BCD')), (30, LIT('Some_Name')),
+ (41, LIT('foo_xbaa')), (54, 0), (56, 1), (59, -2), (62, 0.5),
+ (65, 1.234), (71, b'abc'), (77, b''), (80, b'abc ( def ) ghi'),
+ (98, b'def \x00 4ghi'), (118, b'bach\\slask'), (132, b'foo\nbaa'),
+ (143, b'this % is not a comment.'), (170, b'foo\nbaa'),
+ (180, b'foobaa'), (191, b''), (194, b' '), (199, b'@@ '),
+ (211, b'\xab\xcd\x00\x124\x05'),
+ (226, KWD(b'func')), (230, LIT('a')), (232, LIT('b')),
+ (234, KWD(b'{')), (235, b'c'), (238, KWD(b'do*')), (241, KWD(b'}')),
+ (242, KWD(b'def')), (246, KWD(b'[')), (248, 1),
+ (250, b'z'), (254, KWD(b'!')),
+ (256, KWD(b']')), (258, KWD(b'<<')), (261, LIT('foo')), (266, b'bar'),
+ (272, KWD(b'>>'))
+ ]
+
+ OBJS = [
+ (23, LIT('a')), (25, LIT('BCD')), (30, LIT('Some_Name')),
+ (41, LIT('foo_xbaa')), (54, 0), (56, 1), (59, -2), (62, 0.5),
+ (65, 1.234), (71, b'abc'), (77, b''), (80, b'abc ( def ) ghi'),
+ (98, b'def \x00 4ghi'), (118, b'bach\\slask'), (132, b'foo\nbaa'),
+ (143, b'this % is not a comment.'), (170, b'foo\nbaa'),
+ (180, b'foobaa'), (191, b''), (194, b' '), (199, b'@@ '),
+ (211, b'\xab\xcd\x00\x124\x05'), (230, LIT('a')), (232, LIT('b')),
+ (234, [b'c']), (246, [1, b'z']), (258, {'foo': b'bar'}),
+ ]
+
+ def get_tokens(self, s):
+ from io import BytesIO
+
+ class MyParser(PSBaseParser):
+ def flush(self):
+ self.add_results(*self.popall())
+ parser = MyParser(BytesIO(s))
+ r = []
+ try:
+ while 1:
+ r.append(parser.nexttoken())
+ except PSEOF:
+ pass
+ return r
+
+ def get_objects(self, s):
+ from io import BytesIO
+
+ class MyParser(PSStackParser):
+ def flush(self):
+ self.add_results(*self.popall())
+ parser = MyParser(BytesIO(s))
+ r = []
+ try:
+ while 1:
+ r.append(parser.nextobject())
+ except PSEOF:
+ pass
+ return r
+
+ def test_1(self):
+ tokens = self.get_tokens(self.TESTDATA)
+ self.assertEqual(
+ tokens,
+ self.TOKENS,
+ 'The token does not match the expected one'
+ )
+
+ def test_2(self):
+ objs = self.get_objects(self.TESTDATA)
+ self.assertEqual(
+ objs,
+ self.OBJS,
+ 'The objects do not match the expected ones'
+ )
diff --git a/tests/test_rijndael.py b/tests/test_rijndael.py
new file mode 100644
index 00000000..20efa55a
--- /dev/null
+++ b/tests/test_rijndael.py
@@ -0,0 +1,24 @@
+import unittest
+from pdfminer.rijndael import *
+
+
+class MyTestCase(unittest.TestCase):
+ # test for the decryption function
+
+ def test_1(self):
+ key = bytes.fromhex('00010203050607080a0b0c0d0f101112')
+ ciphertext = bytes.fromhex('d8f532538289ef7d06b506a4fd5be9c9')
+ k_1 = RijndaelDecryptor(key, 128).decrypt(ciphertext).hex()
+ self.assertEqual(k_1, '506812a45f08c889b97f5980038b8359')
+
+ # test for the encryption function
+
+ def test_2(self):
+ key = bytes.fromhex('00010203050607080a0b0c0d0f101112')
+ plaintext = bytes.fromhex('506812a45f08c889b97f5980038b8359')
+ k_2 = RijndaelEncryptor(key, 128).encrypt(plaintext).hex()
+ self.assertEqual(k_2, 'd8f532538289ef7d06b506a4fd5be9c9')
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/tests/test_runlength.py b/tests/test_runlength.py
new file mode 100644
index 00000000..571e3087
--- /dev/null
+++ b/tests/test_runlength.py
@@ -0,0 +1,9 @@
+import unittest
+from pdfminer.runlength import rldecode
+
+
+class TestRunLength(unittest.TestCase):
+
+ def test_decoding(self):
+ s = b'\x05123456\xfa7\x04abcde\x80junk'
+ self.assertEqual(rldecode(s), b'1234567777777abcde')
diff --git a/tools/conv_afm.py b/tools/conv_afm.py
index 096cdf5c..96ab092d 100755
--- a/tools/conv_afm.py
+++ b/tools/conv_afm.py
@@ -2,11 +2,13 @@
import sys
import fileinput
-def main(argv):
+
+def main():
fonts = {}
for line in fileinput.input():
f = line.strip().split(' ')
- if not f: continue
+ if not f:
+ continue
k = f[0]
if k == 'FontName':
fontname = f[1]
@@ -20,10 +22,10 @@ def main(argv):
chars[cid] = width
elif k in ('CapHeight', 'XHeight', 'ItalicAngle',
'Ascender', 'Descender'):
- k = {'Ascender':'Ascent', 'Descender':'Descent'}.get(k,k)
+ k = {'Ascender': 'Ascent', 'Descender': 'Descent'}.get(k, k)
props[k] = float(f[1])
elif k in ('FontName', 'FamilyName', 'Weight'):
- k = {'FamilyName':'FontFamily', 'Weight':'FontWeight'}.get(k,k)
+ k = {'FamilyName': 'FontFamily', 'Weight': 'FontWeight'}.get(k, k)
props[k] = f[1]
elif k == 'IsFixedPitch':
if f[1].lower() == 'true':
@@ -32,9 +34,11 @@ def main(argv):
props[k] = tuple(map(float, f[1:5]))
print('# -*- python -*-')
print('FONT_METRICS = {')
- for (fontname,(props,chars)) in fonts.iteritems():
- print(' %r: %r,' % (fontname, (props,chars)))
+ for (fontname, (props, chars)) in fonts.iteritems():
+ print(' %r: %r,' % (fontname, (props, chars)))
print('}')
return 0
-if __name__ == '__main__': sys.exit(main(sys.argv))
+
+if __name__ == '__main__':
+ sys.exit(main(sys.argv))
diff --git a/tools/conv_cmap.py b/tools/conv_cmap.py
index 66829f8d..5389a166 100755
--- a/tools/conv_cmap.py
+++ b/tools/conv_cmap.py
@@ -2,12 +2,15 @@
import sys
from pdfminer.cmapdb import convert_cmap
-# main
+
def main(argv):
import getopt
def usage():
- print('usage: %s [-c enc=codec] output_dir regname [cid2code.txt ...]' % argv[0])
+ print(
+ 'usage: %s [-c enc=codec] output_dir regname [cid2code.txt ...]' %
+ argv[0]
+ )
return 100
try:
(opts, args) = getopt.getopt(argv[1:], 'c:')
@@ -16,14 +19,18 @@ def usage():
enc2codec = {}
for (k, v) in opts:
if k == '-c':
- (enc,_,codec) = v.partition('=')
+ (enc, _, codec) = v.partition('=')
enc2codec[enc] = codec
- if not args: return usage()
+ if not args:
+ return usage()
outdir = args.pop(0)
- if not args: return usage()
+ if not args:
+ return usage()
regname = args.pop(0)
convert_cmap(outdir, regname, enc2codec, args)
return
-if __name__ == '__main__': sys.exit(main(sys.argv))
+
+if __name__ == '__main__':
+ sys.exit(main(sys.argv))
diff --git a/tools/conv_glyphlist.py b/tools/conv_glyphlist.py
index ffd9bd75..97813b6b 100755
--- a/tools/conv_glyphlist.py
+++ b/tools/conv_glyphlist.py
@@ -2,7 +2,8 @@
import sys
import fileinput
-def main(argv):
+
+def main():
state = 0
for line in fileinput.input():
line = line.strip()
@@ -15,8 +16,11 @@ def main(argv):
if state == 0:
print('\nglyphname2unicode = {')
state = 1
- (name,x) = line.split(';')
+ (name, x) = line.split(';')
codes = x.split(' ')
- print(' %r: u\'%s\',' % (name, ''.join( '\\u%s' % code for code in codes )))
+ print(' %r: u\'%s\',' %
+ (name, ''.join('\\u%s' % code for code in codes)))
+
-if __name__ == '__main__': sys.exit(main(sys.argv))
+if __name__ == '__main__':
+ sys.exit(main(sys.argv))
diff --git a/tools/dumppdf.py b/tools/dumppdf.py
index b485a0a3..aba3b46e 100755
--- a/tools/dumppdf.py
+++ b/tools/dumppdf.py
@@ -6,7 +6,9 @@
# options:
# -i objid : object id
#
-import sys, os.path, re
+import sys
+import argparse
+import os.path
from io import StringIO
from pdfminer.psparser import PSKeyword, PSLiteral, LIT
from pdfminer.pdfparser import PDFParser
@@ -16,8 +18,14 @@
from pdfminer.pdfpage import PDFPage
from pdfminer.utils import isnumber, q
+# Added today
+ESC_PAT = re.compile(r'[\000-\037&<>()"\042\047\134\177-\377]')
+def e(s):
+ return ESC_PAT.sub(lambda m:'%d;' % ord(m.group(0)), s)
ESCAPE = set(map(ord, '&<>"'))
+
+
def encode(data):
buf = StringIO()
for b in data:
@@ -36,7 +44,7 @@ def dumpxml(out, obj, mode=None):
if isinstance(obj, dict):
out.write('\n' % len(obj))
- for (k,v) in obj.items():
+ for (k, v) in obj.items():
out.write('%s\n' % k)
out.write('')
dumpxml(out, v)
@@ -67,7 +75,8 @@ def dumpxml(out, obj, mode=None):
out.write('\n\n')
if mode == 'text':
data = obj.get_data()
- out.write('%s\n' % (len(data), encode(data)))
+ out.write('%s\n' %
+ (len(data), encode(data)))
out.write('')
return
@@ -89,6 +98,7 @@ def dumpxml(out, obj, mode=None):
raise TypeError(obj)
+
# dumptrailers
def dumptrailers(out, doc):
for xref in doc.xrefs:
@@ -97,17 +107,20 @@ def dumptrailers(out, doc):
out.write('\n\n\n')
return
+
# dumpallobjs
def dumpallobjs(out, doc, mode=None):
visited = set()
out.write('')
for xref in doc.xrefs:
for objid in xref.get_objids():
- if objid in visited: continue
+ if objid in visited:
+ continue
visited.add(objid)
try:
obj = doc.getobj(objid)
- if obj is None: continue
+ if obj is None:
+ continue
out.write('\n\n')
@@ -117,14 +130,16 @@ def dumpallobjs(out, doc, mode=None):
out.write('')
return
+
# dumpoutline
def dumpoutline(outfp, fname, objids, pagenos, password=b'',
dumpall=False, mode=None, extractdir=None):
with open(fname, 'rb') as fp:
parser = PDFParser(fp)
doc = PDFDocument(parser, password)
- pages = dict( (page.pageid, pageno) for (pageno,page)
- in enumerate(PDFPage.create_pages(doc)) )
+ pages = dict((page.pageid, pageno) for (pageno, page)
+ in enumerate(PDFPage.create_pages(doc)))
+
def resolve_dest(dest):
if isinstance(dest, str):
dest = resolve1(doc.get_dest(dest))
@@ -136,7 +151,7 @@ def resolve_dest(dest):
try:
outlines = doc.get_outlines()
outfp.write('\n')
- for (level,title,dest,a,se) in outlines:
+ for (level, title, dest, a, se) in outlines:
pageno = None
if dest:
dest = resolve_dest(dest)
@@ -145,9 +160,15 @@ def resolve_dest(dest):
action = a.resolve()
if isinstance(action, dict):
subtype = action.get('S')
- if subtype and repr(subtype) == '/GoTo' and action.get('D'):
+ if (
+ subtype and
+ repr(subtype) == '/GoTo' and
+ action.get('D')
+ ):
dest = resolve_dest(action['D'])
pageno = pages[dest[0].objid]
+ # Added today
+ s = e(title).encode('utf-8', 'xmlcharrefreplace')
outfp.write('\n' % (level, q(s)))
if dest is not None:
outfp.write('')
@@ -162,9 +183,12 @@ def resolve_dest(dest):
parser.close()
return
+
# extractembedded
LITERAL_FILESPEC = LIT('Filespec')
LITERAL_EMBEDDEDFILE = LIT('EmbeddedFile')
+
+
def extractembedded(outfp, fname, objids, pagenos, password=b'',
dumpall=False, mode=None, extractdir=None):
def extract1(obj):
@@ -177,8 +201,9 @@ def extract1(obj):
(filename))
if fileobj.get('Type') is not LITERAL_EMBEDDEDFILE:
raise PDFValueError(
- 'unable to process PDF: reference for %r is not an EmbeddedFile' %
- (filename))
+ 'unable to process PDF: reference for %r is \
+ not an EmbeddedFile' % filename
+ )
path = os.path.join(extractdir, filename)
if os.path.exists(path):
raise IOError('file exists: %r' % path)
@@ -193,10 +218,14 @@ def extract1(obj):
for xref in doc.xrefs:
for objid in xref.get_objids():
obj = doc.getobj(objid)
- if isinstance(obj, dict) and obj.get('Type') is LITERAL_FILESPEC:
+ if (
+ isinstance(obj, dict) and
+ obj.get('Type') is LITERAL_FILESPEC
+ ):
extract1(obj)
return
+
# dumppdf
def dumppdf(outfp, fname, objids, pagenos, password=b'',
dumpall=False, mode=None, extractdir=None):
@@ -208,7 +237,7 @@ def dumppdf(outfp, fname, objids, pagenos, password=b'',
obj = doc.getobj(objid)
dumpxml(outfp, obj, mode=mode)
if pagenos:
- for (pageno,page) in enumerate(PDFPage.create_pages(doc)):
+ for (pageno, page) in enumerate(PDFPage.create_pages(doc)):
if pageno in pagenos:
if mode is not None:
for obj in page.contents:
@@ -220,23 +249,28 @@ def dumppdf(outfp, fname, objids, pagenos, password=b'',
dumpallobjs(outfp, doc, mode=mode)
if (not objids) and (not pagenos) and (not dumpall):
dumptrailers(outfp, doc)
- if mode not in ('raw','binary'):
+ if mode not in ('raw', 'binary'):
outfp.write('\n')
return
# main
def main(argv):
- import getopt
- def usage():
- print(f'usage: {argv[0]} [-P password] [-a] [-p pageid] [-i objid] [-o output] '
- '[-r|-b|-t] [-T] [-O output_dir] [-d] input.pdf ...')
- return 100
- try:
- (opts, args) = getopt.getopt(argv[1:], 'dP:ap:i:o:rbtTO:')
- except getopt.GetoptError:
- return usage()
- if not args: return usage()
+ parser = argparse.ArgumentParser()
+ parser.add_argument('input', metavar='input.pdf', nargs='+')
+ parser.add_argument('-P', '--password')
+ parser.add_argument('-a', '--dump-all-text', action='store_true')
+ parser.add_argument('-p', '--page-id', action='store')
+ parser.add_argument('-i', '--object-id', action='store')
+ parser.add_argument('-o', '--output')
+ parser.add_argument('-r', '--raw', action='store_true')
+ parser.add_argument('b', '--binary', action='store_true')
+ parser.add_argument('-t', '--text', action='store_true')
+ parser.add_argument('-T', '--dumpoutline', action='store_true')
+ parser.add_argument('-O', '--output-dir')
+ parser.add_argument('-d', '--debug', action='store_true')
+ args = parser.parse_args()
+
debug = 0
objids = []
pagenos = set()
@@ -246,21 +280,30 @@ def usage():
proc = dumppdf
outfp = sys.stdout
extractdir = None
- for (k, v) in opts:
- if k == '-d': debug += 1
- elif k == '-P': password = v.encode('ascii')
- elif k == '-a': dumpall = True
- elif k == '-p': pagenos.update( int(x)-1 for x in v.split(',') )
- elif k == '-i': objids.extend( int(x) for x in v.split(',') )
- elif k == '-o': outfp = open(v, 'wb')
- elif k == '-r': mode = 'raw'
- elif k == '-b': mode = 'binary'
- elif k == '-t': mode = 'text'
- elif k == '-T': proc = dumpoutline
- elif k == '-O':
- extractdir = v
- proc = extractembedded
- #
+ if args.debug:
+ debug += 1
+ elif args.password:
+ password = args.password.encode('ascii')
+ elif args.dump_all_text:
+ dumpall = True
+ elif args.page_id:
+ pagenos.update(int(x)-1 for x in args.page_id.split(','))
+ elif args.object_id:
+ objids.extend(int(x) for x in args.object_id.split(','))
+ elif args.output:
+ outfp = open(args.output, 'wb')
+ elif args.raw:
+ mode = 'raw'
+ elif args.binary:
+ mode = 'binary'
+ elif args.text:
+ mode = 'text'
+ elif args.dumpoutline:
+ proc = dumpoutline
+ elif args.output_dir:
+ extractdir = args.output_dir
+ proc = extractembedded
+
PDFDocument.debug = debug
PDFParser.debug = debug
#
@@ -269,4 +312,6 @@ def usage():
dumpall=dumpall, mode=mode, extractdir=extractdir)
return
-if __name__ == '__main__': sys.exit(main(sys.argv))
+
+if __name__ == '__main__':
+ sys.exit(main(sys.argv))
diff --git a/tools/latin2ascii.py b/tools/latin2ascii.py
index 9bd6552d..9857abc5 100755
--- a/tools/latin2ascii.py
+++ b/tools/latin2ascii.py
@@ -12,105 +12,108 @@
"""
LATIN2ASCII = {
- #0x00a0: '',
- #0x00a7: '',
-
- # iso-8859-1
- 0x00c0: 'A`',
- 0x00c1: "A'",
- 0x00c2: 'A^',
- 0x00c3: 'A~',
- 0x00c4: 'A:',
- 0x00c5: 'A%',
- 0x00c6: 'AE',
- 0x00c7: 'C,',
- 0x00c8: 'E`',
- 0x00c9: "E'",
- 0x00ca: 'E^',
- 0x00cb: 'E:',
- 0x00cc: 'I`',
- 0x00cd: "I'",
- 0x00ce: 'I^',
- 0x00cf: 'I:',
- 0x00d0: "D'",
- 0x00d1: 'N~',
- 0x00d2: 'O`',
- 0x00d3: "O'",
- 0x00d4: 'O^',
- 0x00d5: 'O~',
- 0x00d6: 'O:',
- 0x00d8: 'O/',
- 0x00d9: 'U`',
- 0x00da: "U'",
- 0x00db: 'U~',
- 0x00dc: 'U:',
- 0x00dd: "Y'",
- 0x00df: 'ss',
-
- 0x00e0: 'a`',
- 0x00e1: "a'",
- 0x00e2: 'a^',
- 0x00e3: 'a~',
- 0x00e4: 'a:',
- 0x00e5: 'a%',
- 0x00e6: 'ae',
- 0x00e7: 'c,',
- 0x00e8: 'e`',
- 0x00e9: "e'",
- 0x00ea: 'e^',
- 0x00eb: 'e:',
- 0x00ec: 'i`',
- 0x00ed: "i'",
- 0x00ee: 'i^',
- 0x00ef: 'i:',
- 0x00f0: "d'",
- 0x00f1: 'n~',
- 0x00f2: 'o`',
- 0x00f3: "o'",
- 0x00f4: 'o^',
- 0x00f5: 'o~',
- 0x00f6: 'o:',
- 0x00f8: 'o/',
- 0x00f9: 'o`',
- 0x00fa: "u'",
- 0x00fb: 'u~',
- 0x00fc: 'u:',
- 0x00fd: "y'",
- 0x00ff: 'y:',
-
- # Ligatures
- 0x0152: 'OE',
- 0x0153: 'oe',
- 0x0132: 'IJ',
- 0x0133: 'ij',
- 0x1d6b: 'ue',
- 0xfb00: 'ff',
- 0xfb01: 'fi',
- 0xfb02: 'fl',
- 0xfb03: 'ffi',
- 0xfb04: 'ffl',
- 0xfb05: 'ft',
- 0xfb06: 'st',
-
- # Symbols
- #0x2013: '',
- 0x2014: '--',
- 0x2015: '||',
- 0x2018: '`',
- 0x2019: "'",
- 0x201c: '``',
- 0x201d: "''",
- #0x2022: '',
- #0x2212: '',
+ # 0x00a0: '',
+ # 0x00a7: '',
+
+ # iso-8859-1
+ 0x00c0: 'A`',
+ 0x00c1: "A'",
+ 0x00c2: 'A^',
+ 0x00c3: 'A~',
+ 0x00c4: 'A:',
+ 0x00c5: 'A%',
+ 0x00c6: 'AE',
+ 0x00c7: 'C,',
+ 0x00c8: 'E`',
+ 0x00c9: "E'",
+ 0x00ca: 'E^',
+ 0x00cb: 'E:',
+ 0x00cc: 'I`',
+ 0x00cd: "I'",
+ 0x00ce: 'I^',
+ 0x00cf: 'I:',
+ 0x00d0: "D'",
+ 0x00d1: 'N~',
+ 0x00d2: 'O`',
+ 0x00d3: "O'",
+ 0x00d4: 'O^',
+ 0x00d5: 'O~',
+ 0x00d6: 'O:',
+ 0x00d8: 'O/',
+ 0x00d9: 'U`',
+ 0x00da: "U'",
+ 0x00db: 'U~',
+ 0x00dc: 'U:',
+ 0x00dd: "Y'",
+ 0x00df: 'ss',
+
+ 0x00e0: 'a`',
+ 0x00e1: "a'",
+ 0x00e2: 'a^',
+ 0x00e3: 'a~',
+ 0x00e4: 'a:',
+ 0x00e5: 'a%',
+ 0x00e6: 'ae',
+ 0x00e7: 'c,',
+ 0x00e8: 'e`',
+ 0x00e9: "e'",
+ 0x00ea: 'e^',
+ 0x00eb: 'e:',
+ 0x00ec: 'i`',
+ 0x00ed: "i'",
+ 0x00ee: 'i^',
+ 0x00ef: 'i:',
+ 0x00f0: "d'",
+ 0x00f1: 'n~',
+ 0x00f2: 'o`',
+ 0x00f3: "o'",
+ 0x00f4: 'o^',
+ 0x00f5: 'o~',
+ 0x00f6: 'o:',
+ 0x00f8: 'o/',
+ 0x00f9: 'o`',
+ 0x00fa: "u'",
+ 0x00fb: 'u~',
+ 0x00fc: 'u:',
+ 0x00fd: "y'",
+ 0x00ff: 'y:',
+
+ # Ligatures
+ 0x0152: 'OE',
+ 0x0153: 'oe',
+ 0x0132: 'IJ',
+ 0x0133: 'ij',
+ 0x1d6b: 'ue',
+ 0xfb00: 'ff',
+ 0xfb01: 'fi',
+ 0xfb02: 'fl',
+ 0xfb03: 'ffi',
+ 0xfb04: 'ffl',
+ 0xfb05: 'ft',
+ 0xfb06: 'st',
+
+ # Symbols
+ # 0x2013: '',
+ 0x2014: '--',
+ 0x2015: '||',
+ 0x2018: '`',
+ 0x2019: "'",
+ 0x201c: '``',
+ 0x201d: "''",
+ # 0x2022: '',
+ # 0x2212: '',
}
+
def latin2ascii(s):
- return ''.join( LATIN2ASCII.get(ord(c),c) for c in s )
+ return ''.join(LATIN2ASCII.get(ord(c), c) for c in s)
def main(argv):
- import getopt, fileinput
+ import getopt
+ import fileinput
+
def usage():
print('usage: %s [-c codec] file ...' % argv[0])
return 100
@@ -118,13 +121,17 @@ def usage():
(opts, args) = getopt.getopt(argv[1:], 'c')
except getopt.GetoptError:
return usage()
- if not args: return usage()
+ if not args:
+ return usage()
codec = 'utf-8'
for (k, v) in opts:
- if k == '-c': codec = v
+ if k == '-c':
+ codec = v
for line in fileinput.input(args):
- line = latin2ascii(unicode(line, codec, 'ignore'))
+ line = latin2ascii(str(line, codec, 'ignore'))
sys.stdout.write(line.encode('ascii', 'replace'))
return
-if __name__ == '__main__': sys.exit(main(sys.argv))
+
+if __name__ == '__main__':
+ sys.exit(main(sys.argv))
diff --git a/tools/pdf2html.cgi b/tools/pdf2html.cgi
index 4ddba6dc..1b7eebc6 100755
--- a/tools/pdf2html.cgi
+++ b/tools/pdf2html.cgi
@@ -15,47 +15,45 @@
# $ cp pdfminer/tools/pdf2html.cgi $CGIDIR
#
-import sys, os, os.path, re, time
-import cgi, logging, traceback, random
-# comment out at this at runtime.
-#import cgitb; cgitb.enable()
-import pdfminer
-from pdfminer.pdfdocument import PDFDocument
-from pdfminer.pdfpage import PDFPage
-from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
-from pdfminer.converter import HTMLConverter, TextConverter
from pdfminer.layout import LAParams
+from pdfminer.converter import HTMLConverter, TextConverter
+from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
+from pdfminer.pdfpage import PDFPage
+import pdfminer
+import sys
+import os
+import os.path
+import re
+import time
+import cgi
+import logging
+import traceback
+import random
+from utility import url
+# comment out at this at runtime.
+import cgitb
+cgitb.enable()
-# quote HTML metacharacters
-def q(x):
- return x.replace('&','&').replace('>','>').replace('<','<').replace('"','"')
-
-# encode parameters as a URL
-Q = re.compile(r'[^a-zA-Z0-9_.-=]')
-def url(base, **kw):
- r = []
- for (k,v) in kw.iteritems():
- v = Q.sub(lambda m: '%%%02X' % ord(m.group(0)), encoder(q(v), 'replace')[0])
- r.append('%s=%s' % (k, v))
- return base+'&'.join(r)
+# convert
+#
+class FileSizeExceeded(ValueError):
+ pass
-## convert
-##
-class FileSizeExceeded(ValueError): pass
def convert(infp, outfp, path, codec='utf-8',
maxpages=0, maxfilesize=0, pagenos=None,
html=True):
# save the input file.
- src = file(path, 'wb')
+ src = open(path, 'wb')
nbytes = 0
while 1:
data = infp.read(4096)
nbytes += len(data)
if maxfilesize and maxfilesize < nbytes:
raise FileSizeExceeded(maxfilesize)
- if not data: break
+ if not data:
+ break
src.write(data)
src.close()
infp.close()
@@ -68,7 +66,7 @@ def convert(infp, outfp, path, codec='utf-8',
layoutmode='exact')
else:
device = TextConverter(rsrcmgr, outfp, codec=codec, laparams=laparams)
- fp = file(path, 'rb')
+ fp = open(path, 'rb')
interpreter = PDFPageInterpreter(rsrcmgr, device)
for page in PDFPage.get_pages(fp, pagenos, maxpages=maxpages):
interpreter.process_page(page)
@@ -77,8 +75,8 @@ def convert(infp, outfp, path, codec='utf-8',
return
-## WebApp
-##
+# WebApp
+#
class WebApp(object):
TITLE = 'pdf2html demo'
@@ -103,27 +101,28 @@ class WebApp(object):
def put(self, *args):
for x in args:
- if isinstance(x, str):
- self.outfp.write(x)
- elif isinstance(x, unicode):
- self.outfp.write(x.encode(self.codec, 'xmlcharrefreplace'))
+ # if isinstance(x, str):
+ # self.outfp.write(x)
+ # elif isinstance(x, bytes):
+ self.outfp.write(x.encode(self.codec, 'xmlcharrefreplace'))
return
def response_200(self):
if self.server.startswith('cgi-httpd'):
# required for cgi-httpd
- self.outfp.write('HTTP/1.0 200 OK\r\n')
- self.outfp.write('Content-type: %s\r\n' % self.content_type)
- self.outfp.write('Connection: close\r\n\r\n')
+ self.outfp.write(b'HTTP/1.0 200 OK\r\n')
+ content_type = 'Content-type: %s\r\n' % self.content_type
+ self.outfp.write(content_type.encode())
+ self.outfp.write(b'Connection: close\r\n\r\n')
return
def response_404(self):
if self.server.startswith('cgi-httpd'):
# required for cgi-httpd
self.outfp.write('HTTP/1.0 404 Not Found\r\n')
- self.outfp.write('Content-type: text/html\r\n')
- self.outfp.write('Connection: close\r\n\r\n')
- self.outfp.write('page does not exist\n')
+ self.outfp.write(b'Content-type: text/html\r\n')
+ self.outfp.write(b'Connection: close\r\n\r\n')
+ self.outfp.write(b'page does not exist\n')
return
def response_301(self, url):
@@ -135,21 +134,25 @@ class WebApp(object):
def coverpage(self):
self.put(
- '%s\n' % q(self.TITLE),
- '%s
\n' % q(self.TITLE),
- '
\n',
- 'Powered by PDFMiner-%s\n' % pdfminer.__version__,
- '\n',
- )
+ '
%s\n' % q(self.TITLE),
+ '%s
\n' % q(self.TITLE),
+ '
\n',
+ 'Powered by ',
+ '',
+ 'PDFMiner-%s\n' % pdfminer.__version__,
+ '\n',
+ )
return
def setup(self):
@@ -167,7 +170,7 @@ class WebApp(object):
form = cgi.FieldStorage(fp=self.infp, environ=self.environ)
if (self.method != 'POST' or
'c' not in form or
- 'f' not in form):
+ 'f' not in form):
self.response_200()
self.coverpage()
return
@@ -194,15 +197,20 @@ class WebApp(object):
self.content_type = 'text/plain; charset=%s' % self.codec
self.response_200()
try:
- convert(item.file, self.outfp, tmppath, pagenos=pagenos, codec=self.codec,
- maxpages=self.MAXPAGES, maxfilesize=self.MAXFILESIZE, html=html)
- except Exception, e:
+ convert(
+ item.file, self.outfp, tmppath, pagenos=pagenos,
+ codec=self.codec, maxpages=self.MAXPAGES,
+ maxfilesize=self.MAXFILESIZE, html=html
+ )
+ except Exception as e:
self.put('
Sorry, an error has occurred: %s' % q(repr(e)))
- self.logger.error('convert: %r: path=%r: %s' % (e, traceback.format_exc()))
+ self.logger.error(
+ 'convert: %r: path=%r: %s' %
+ (e, traceback.format_exc()))
finally:
try:
os.remove(tmppath)
- except:
+ except Exception:
pass
return
diff --git a/tools/pdf2txt.py b/tools/pdf2txt.py
index fa829136..9936ce72 100755
--- a/tools/pdf2txt.py
+++ b/tools/pdf2txt.py
@@ -1,30 +1,44 @@
#!/usr/bin/env python
import sys
+import argparse
from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdfparser import PDFParser
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
-from pdfminer.pdfdevice import PDFDevice, TagExtractor
+from pdfminer.pdfdevice import TagExtractor
from pdfminer.pdfpage import PDFPage
from pdfminer.converter import XMLConverter, HTMLConverter, TextConverter
from pdfminer.cmapdb import CMapDB
from pdfminer.layout import LAParams
from pdfminer.image import ImageWriter
-# main
-def main(argv):
- import getopt
- def usage():
- print(f'usage: {argv[0]} [-P password] [-o output] [-t text|html|xml|tag]'
- ' [-O output_dir] [-c encoding] [-s scale] [-R rotation]'
- ' [-Y normal|loose|exact] [-p pagenos] [-m maxpages]'
- ' [-S] [-C] [-n] [-A] [-V] [-M char_margin] [-L line_margin]'
- ' [-W word_margin] [-F boxes_flow] [-d] input.pdf ...')
- return 100
- try:
- (opts, args) = getopt.getopt(argv[1:], 'dP:o:t:O:c:s:R:Y:p:m:SCnAVM:W:L:F:')
- except getopt.GetoptError:
- return usage()
- if not args: return usage()
+
+def main():
+ parser = argparse.ArgumentParser()
+ parser.add_argument('input', metavar='input.pdf', nargs='+')
+ parser.add_argument('-P', '--password')
+ parser.add_argument('-o', '--output')
+ parser.add_argument('-t', '--text-type',
+ choices=['text', 'html', 'xml', 'tag'])
+ parser.add_argument('-O', '--output-dir')
+ parser.add_argument('-c', '--encoding')
+ parser.add_argument('-s', '--scale')
+ parser.add_argument('-R', '--rotation')
+ parser.add_argument('-Y', '--layout-mode',
+ choices=['normal', 'loose', 'exact'])
+ parser.add_argument('-p', '--pagenos')
+ parser.add_argument('-m', '--maxpages')
+ parser.add_argument('-S', '--strip-control', action='store_true')
+ parser.add_argument('-C', '--disable-caching', action='store_true')
+ parser.add_argument('-n', '--no-layout', action='store_true')
+ parser.add_argument('-A', '--all-texts', action='store_true')
+ parser.add_argument('-V', '--detect-vertical', action='store_true')
+ parser.add_argument('-M', '--char-margin')
+ parser.add_argument('-L', '--line-margin')
+ parser.add_argument('-W', '--word-margin')
+ parser.add_argument('-F', '--boxes-flow')
+ parser.add_argument('-d', '--debug', action='store_true')
+ args = parser.parse_args()
+
# debug option
debug = 0
# input option
@@ -39,32 +53,50 @@ def usage():
stripcontrol = False
layoutmode = 'normal'
encoding = 'utf-8'
- pageno = 1
scale = 1
caching = True
- showpageno = True
+
laparams = LAParams()
- for (k, v) in opts:
- if k == '-d': debug += 1
- elif k == '-P': password = v.encode('ascii')
- elif k == '-o': outfile = v
- elif k == '-t': outtype = v
- elif k == '-O': imagewriter = ImageWriter(v)
- elif k == '-c': encoding = v
- elif k == '-s': scale = float(v)
- elif k == '-R': rotation = int(v)
- elif k == '-Y': layoutmode = v
- elif k == '-p': pagenos.update( int(x)-1 for x in v.split(',') )
- elif k == '-m': maxpages = int(v)
- elif k == '-S': stripcontrol = True
- elif k == '-C': caching = False
- elif k == '-n': laparams = None
- elif k == '-A': laparams.all_texts = True
- elif k == '-V': laparams.detect_vertical = True
- elif k == '-M': laparams.char_margin = float(v)
- elif k == '-W': laparams.word_margin = float(v)
- elif k == '-L': laparams.line_margin = float(v)
- elif k == '-F': laparams.boxes_flow = float(v)
+ if args.debug:
+ debug += 1
+ elif args.password:
+ password = args.password.encode('ascii')
+ elif args.output:
+ outfile = args.output
+ elif args.text_type:
+ outtype = args.text_type
+ elif args.output_dir:
+ imagewriter = ImageWriter(args['output-dir'])
+ elif args.encoding:
+ encoding = args.encoding
+ elif args.scale:
+ scale = float(args.scale)
+ elif args.rotation:
+ rotation = int(args.rotation)
+ elif args.layout_mode:
+ layoutmode = args.layout_mode
+ elif args.pagenos:
+ pagenos.update(int(x)-1 for x in args.pagenos.split(','))
+ elif args.maxpages:
+ maxpages = int(args.maxpages)
+ elif args.strip_control:
+ stripcontrol = True
+ elif args.disable_caching:
+ caching = False
+ elif args.no_layout:
+ laparams = None
+ elif args.all_texts:
+ laparams.all_texts = True
+ elif args.detect_vertical:
+ laparams.detect_vertical = True
+ elif args.char_margin:
+ laparams.char_margin = float(args.char_margin)
+ elif args.word_margin:
+ laparams.word_margin = float(args.word_margin)
+ elif args.line_margin:
+ laparams.line_margin = float(args.line_margin)
+ elif args.boxes_flow:
+ laparams.boxes_flow = float(args.boxes_flow)
#
PDFDocument.debug = debug
PDFParser.debug = debug
@@ -98,18 +130,20 @@ def usage():
imagewriter=imagewriter, debug=debug)
elif outtype == 'tag':
device = TagExtractor(rsrcmgr, outfp)
- else:
- return usage()
- for fname in args:
+
+ for fname in args.input:
with open(fname, 'rb') as fp:
interpreter = PDFPageInterpreter(rsrcmgr, device)
- for page in PDFPage.get_pages(fp, pagenos,
- maxpages=maxpages, password=password,
- caching=caching, check_extractable=True):
+ for page in PDFPage.get_pages(
+ fp, pagenos, maxpages=maxpages, password=password,
+ caching=caching, check_extractable=True
+ ):
page.rotate = (page.rotate+rotation) % 360
interpreter.process_page(page)
device.close()
- outfp.close()
- return
+ if outfile:
+ outfp.close()
+
-if __name__ == '__main__': sys.exit(main(sys.argv))
+if __name__ == '__main__':
+ sys.exit(main())
diff --git a/tools/prof.py b/tools/prof.py
old mode 100644
new mode 100755
index abcfb8be..07e4e555
--- a/tools/prof.py
+++ b/tools/prof.py
@@ -1,13 +1,17 @@
#!/usr/bin/env python
import sys
+
def prof_main(argv):
- import hotshot, hotshot.stats
+ import cProfile
+ import pstats
+
def usage():
print('usage: %s module.function [args ...]' % argv[0])
return 100
args = argv[1:]
- if len(args) < 1: return usage()
+ if len(args) < 1:
+ return usage()
name = args.pop(0)
prof = name+'.prof'
i = name.rindex('.')
@@ -16,14 +20,16 @@ def usage():
func = getattr(module, funcname)
if args:
args.insert(0, argv[0])
- prof = hotshot.Profile(prof)
- prof.runcall(lambda : func(args))
+ prof = cProfile(prof)
+ prof.runcall(lambda: func(args))
prof.close()
else:
- stats = hotshot.stats.load(prof)
+ stats = pstats.Stats(prof)
stats.strip_dirs()
stats.sort_stats('time', 'calls')
stats.print_stats(1000)
return
-if __name__ == '__main__': sys.exit(prof_main(sys.argv))
+
+if __name__ == '__main__':
+ sys.exit(prof_main(sys.argv))
diff --git a/tools/runapp.py b/tools/runapp.py
index 81f5acfb..f30dc56c 100755
--- a/tools/runapp.py
+++ b/tools/runapp.py
@@ -1,19 +1,20 @@
#!/usr/bin/env python
##
-## WebApp class runner
+# WebApp class runner
##
-## usage:
-## $ runapp.py pdf2html.cgi
+# usage:
+# $ runapp.py pdf2html.cgi
##
import sys
import urllib
-from httplib import responses
-from BaseHTTPServer import HTTPServer
-from SimpleHTTPServer import SimpleHTTPRequestHandler
+from http.client import responses
+from http.server import HTTPServer, SimpleHTTPRequestHandler
-## WebAppHandler
+# WebAppHandler
##
+
+
class WebAppHandler(SimpleHTTPRequestHandler):
APP_CLASS = None
@@ -37,7 +38,7 @@ def run_cgi(self):
else:
script, rest = rest, ''
scriptname = '/' + script
- scriptfile = self.translate_path(scriptname)
+ # scriptfile = self.translate_path(scriptname)
env = {}
env['SERVER_SOFTWARE'] = self.version_string()
env['SERVER_NAME'] = self.server.server_name
@@ -45,7 +46,7 @@ def run_cgi(self):
env['SERVER_PROTOCOL'] = self.protocol_version
env['SERVER_PORT'] = str(self.server.server_port)
env['REQUEST_METHOD'] = self.command
- uqrest = urllib.unquote(rest)
+ uqrest = urllib.parse.unquote(rest)
env['PATH_INFO'] = uqrest
env['PATH_TRANSLATED'] = self.translate_path(uqrest)
env['SCRIPT_NAME'] = scriptname
@@ -55,11 +56,11 @@ def run_cgi(self):
if host != self.client_address[0]:
env['REMOTE_HOST'] = host
env['REMOTE_ADDR'] = self.client_address[0]
- if self.headers.typeheader is None:
- env['CONTENT_TYPE'] = self.headers.type
+ if self.headers.get_content_type() is None:
+ env['CONTENT_TYPE'] = self.headers.get_default_type()
else:
- env['CONTENT_TYPE'] = self.headers.typeheader
- length = self.headers.getheader('content-length')
+ env['CONTENT_TYPE'] = self.headers.get_content_type()
+ length = self.headers.get('content-length')
if length:
env['CONTENT_LENGTH'] = length
accept = []
@@ -69,10 +70,10 @@ def run_cgi(self):
else:
accept = accept + line[7:].split(',')
env['HTTP_ACCEPT'] = ','.join(accept)
- ua = self.headers.getheader('user-agent')
+ ua = self.headers.get('user-agent')
if ua:
env['HTTP_USER_AGENT'] = ua
- co = filter(None, self.headers.getheaders('cookie'))
+ co = filter(None, self.headers.get('cookie'))
if co:
env['HTTP_COOKIE'] = ', '.join(co)
for k in ('QUERY_STRING', 'REMOTE_HOST', 'CONTENT_LENGTH',
@@ -85,8 +86,12 @@ def run_cgi(self):
return
# main
+
+
def main(argv):
- import getopt, imp
+ import getopt
+ import imp
+
def usage():
print('usage: %s [-h host] [-p port] [-n name] module.class' % argv[0])
return 100
@@ -98,16 +103,22 @@ def usage():
port = 8080
name = 'WebApp'
for (k, v) in opts:
- if k == '-h': host = v
- elif k == '-p': port = int(v)
- elif k == '-n': name = v
- if not args: return usage()
+ if k == '-h':
+ host = v
+ elif k == '-p':
+ port = int(v)
+ elif k == '-n':
+ name = v
+ if not args:
+ return usage()
path = args.pop(0)
module = imp.load_source('app', path)
WebAppHandler.APP_CLASS = getattr(module, name)
- print('Listening %s:%d...' % (host,port))
- httpd = HTTPServer((host,port), WebAppHandler)
+ print('Listening %s:%d...' % (host, port))
+ httpd = HTTPServer((host, port), WebAppHandler)
httpd.serve_forever()
return
-if __name__ == '__main__': sys.exit(main(sys.argv))
+
+if __name__ == '__main__':
+ sys.exit(main(sys.argv))
diff --git a/tools/utility.py b/tools/utility.py
new file mode 100644
index 00000000..c7365a2c
--- /dev/null
+++ b/tools/utility.py
@@ -0,0 +1,23 @@
+import re
+
+
+# quote HTML metacharacters
+def q(x):
+ return x \
+ .replace('&', '&') \
+ .replace('>', '>') \
+ .replace('<', '<')\
+ .replace('"', '"')
+
+
+# encode parameters as a URL
+Q = re.compile(r'[^a-zA-Z0-9_.-=]')
+
+
+def url(base, **kw):
+ r = []
+ for (k, v) in kw.iteritems():
+ v = Q.sub(lambda m: '%%%02X' % ord(m.group(0)),
+ q(v).encode("utf-8", 'replace')[0])
+ r.append('%s=%s' % (k, v))
+ return base+'&'.join(r)
\ No newline at end of file