-
-
Save mrhumster/45af0594d80832ae42ee2ebd634ef58a to your computer and use it in GitHub Desktop.
<?xml version="1.0" encoding="UTF-8"?> | |
<module type="PYTHON_MODULE" version="4"> | |
<component name="NewModuleRootManager"> | |
<content url="file://$MODULE_DIR$"> | |
<excludeFolder url="file://$MODULE_DIR$/venv" /> | |
</content> | |
<orderEntry type="jdk" jdkName="Python 3.5 (ca)" jdkType="Python SDK" /> | |
<orderEntry type="sourceFolder" forTests="false" /> | |
<orderEntry type="module" module-name="kvadrat" /> | |
</component> | |
<component name="TestRunnerService"> | |
<option name="PROJECT_TEST_RUNNER" value="Unittests" /> | |
</component> | |
</module> |
<?xml version="1.0" encoding="UTF-8"?> | |
<project version="4"> | |
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.5 (ca)" project-jdk-type="Python SDK" /> | |
</project> |
<?xml version="1.0" encoding="UTF-8"?> | |
<project version="4"> | |
<component name="ProjectModuleManager"> | |
<modules> | |
<module fileurl="file://$PROJECT_DIR$/.idea/ca.iml" filepath="$PROJECT_DIR$/.idea/ca.iml" /> | |
<module fileurl="file://$PROJECT_DIR$/../kvadrat/.idea/kvadrat.iml" filepath="$PROJECT_DIR$/../kvadrat/.idea/kvadrat.iml" /> | |
</modules> | |
</component> | |
</project> |
<?xml version="1.0" encoding="UTF-8"?> | |
<project version="4"> | |
<component name="VcsDirectoryMappings"> | |
<mapping directory="$PROJECT_DIR$" vcs="Git" /> | |
</component> | |
</project> |
""" | |
Django settings for casite project. | |
Generated by 'django-admin startproject' using Django 1.9.13. | |
For more information on this file, see | |
https://docs.djangoproject.com/en/1.9/topics/settings/ | |
For the full list of settings and their values, see | |
https://docs.djangoproject.com/en/1.9/ref/settings/ | |
""" | |
import os | |
# Build paths inside the project like this: os.path.join(BASE_DIR, ...) | |
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) | |
# Quick-start development settings - unsuitable for production | |
# See https://docs.djangoproject.com/en/1.9/howto/deployment/checklist/ | |
# SECURITY WARNING: keep the secret key used in production secret! | |
SECRET_KEY = 'v^vi_t41c9_v=9$32wj*fl#rsroqqw)&_#9p6dzz5!#!b(7*%n' | |
# SECURITY WARNING: don't run with debug turned on in production! | |
DEBUG = True | |
ALLOWED_HOSTS = [] | |
# Application definition | |
INSTALLED_APPS = [ | |
'crlcontrol.apps.CrlcontrolConfig', | |
'django.contrib.admin', | |
'django.contrib.auth', | |
'django.contrib.contenttypes', | |
'django.contrib.sessions', | |
'django.contrib.messages', | |
'django.contrib.staticfiles', | |
] | |
MIDDLEWARE_CLASSES = [ | |
'django.middleware.security.SecurityMiddleware', | |
'django.contrib.sessions.middleware.SessionMiddleware', | |
'django.middleware.common.CommonMiddleware', | |
'django.middleware.csrf.CsrfViewMiddleware', | |
'django.contrib.auth.middleware.AuthenticationMiddleware', | |
'django.contrib.auth.middleware.SessionAuthenticationMiddleware', | |
'django.contrib.messages.middleware.MessageMiddleware', | |
'django.middleware.clickjacking.XFrameOptionsMiddleware', | |
] | |
ROOT_URLCONF = 'casite.urls' | |
TEMPLATES = [ | |
{ | |
'BACKEND': 'django.template.backends.django.DjangoTemplates', | |
'DIRS': [], | |
'APP_DIRS': True, | |
'OPTIONS': { | |
'context_processors': [ | |
'django.template.context_processors.debug', | |
'django.template.context_processors.request', | |
'django.contrib.auth.context_processors.auth', | |
'django.contrib.messages.context_processors.messages', | |
], | |
}, | |
}, | |
] | |
WSGI_APPLICATION = 'casite.wsgi.application' | |
# Database | |
# https://docs.djangoproject.com/en/1.9/ref/settings/#databases | |
DATABASES = { | |
'default': { | |
'ENGINE': 'django.db.backends.sqlite3', | |
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), | |
} | |
} | |
# Password validation | |
# https://docs.djangoproject.com/en/1.9/ref/settings/#auth-password-validators | |
AUTH_PASSWORD_VALIDATORS = [ | |
{ | |
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', | |
}, | |
{ | |
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', | |
}, | |
{ | |
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', | |
}, | |
{ | |
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', | |
}, | |
] | |
# Internationalization | |
# https://docs.djangoproject.com/en/1.9/topics/i18n/ | |
LANGUAGE_CODE = 'ru-RU' | |
TIME_ZONE = 'Asia/Omsk' | |
USE_I18N = True | |
USE_L10N = True | |
USE_TZ = True | |
# Static files (CSS, JavaScript, Images) | |
# https://docs.djangoproject.com/en/1.9/howto/static-files/ | |
STATIC_URL = '/static/' | |
LOGIN_URL = '/accounts/login/' | |
LOGIN_REDIRECT_URL = '/crlcontrol/' | |
LOGOUT_REDIRECT_URL = '/crlcontrol/' | |
"""casite URL Configuration | |
The `urlpatterns` list routes URLs to views. For more information please see: | |
https://docs.djangoproject.com/en/1.9/topics/http/urls/ | |
Examples: | |
Function views | |
1. Add an import: from my_app import views | |
2. Add a URL to urlpatterns: url(r'^$', views.home, name='home') | |
Class-based views | |
1. Add an import: from other_app.views import Home | |
2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home') | |
Including another URLconf | |
1. Import the include() function: from django.conf.urls import url, include | |
2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls')) | |
""" | |
from django.conf.urls import url, include | |
from django.contrib.auth import views as auth_views | |
from django.contrib import admin | |
urlpatterns = [ | |
url(r'^admin/', admin.site.urls), | |
url(r'^accounts/login/', auth_views.login, name='login'), | |
url(r'^accounts/logout/', auth_views.logout, {'next_page': '/accounts/login/'}, name='logout'), | |
url(r'^accounts/password_reset/', auth_views.password_reset, name='password-reset'), | |
url(r'^crlcontrol/', include('crlcontrol.urls')), | |
] |
""" | |
WSGI config for casite project. | |
It exposes the WSGI callable as a module-level variable named ``application``. | |
For more information on this file, see | |
https://docs.djangoproject.com/en/1.9/howto/deployment/wsgi/ | |
""" | |
import os | |
from django.core.wsgi import get_wsgi_application | |
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "casite.settings") | |
application = get_wsgi_application() |
from django.contrib import admin | |
from .models import * | |
# Register your models here. | |
admin.site.register(Certification_Authority) | |
admin.site.register(Certification_Authority_System) | |
admin.site.register(Keys_for_checking) | |
admin.site.register(Cdp) |
from django.apps import AppConfig | |
class CrlcontrolConfig(AppConfig): | |
name = 'crlcontrol' |
from django.forms import ModelForm, Select, TextInput, SelectDateWidget | |
from .models import Certification_Authority, Certification_Authority_System, Keys_for_checking, Cdp | |
class CaForm(ModelForm): | |
class Meta: | |
model = Certification_Authority | |
fields = '__all__' | |
pack = len(Certification_Authority_System.objects.all()) | |
widgets = { | |
'pack': Select( | |
attrs={'multiple': 'multiple', | |
'id': 'id_pack', | |
'name': 'pack', | |
'size': pack}), | |
'name': TextInput( | |
attrs={'id': 'id_name', | |
'name': 'name', | |
'type': 'text', | |
'maxlength': '128', | |
'required': ''}), | |
'organization_name': TextInput( | |
attrs={'id': 'id_organization_name', | |
'name': 'organization_name', | |
'type': 'text', | |
'maxlength': '128', | |
'required': ''}), | |
'INN': TextInput( | |
attrs={'id': 'id_INN', | |
'name': 'INN', | |
'type': 'number', | |
'max': '999999999999', | |
'min': '1000000000', | |
'required': '', }), | |
'OGRN': TextInput( | |
attrs={'id': 'id_OGRN', | |
'name': 'OGRN', | |
'type': 'number', | |
'max': '999999999999999', | |
'min': '1000000000000', | |
'required': '', }), | |
} | |
class CasForm(ModelForm): | |
class Meta: | |
model = Certification_Authority_System | |
fields = '__all__' | |
key = len(Keys_for_checking.objects.all()) | |
cdp = len(Cdp.objects.all()) | |
widgets = { | |
'pack_name': TextInput( | |
attrs={'id': 'id_pack_name', | |
'name': 'pack_name', | |
'type': 'text', | |
'maxlength': '128', | |
'required': ''}), | |
'id': TextInput( | |
attrs={'id': 'id_id', | |
'name': 'id', | |
'type': 'text', | |
'maxlength': '40', | |
'required': '', | |
'pattern': '[0-9A-Za-z]'}), | |
'address_pack': TextInput( | |
attrs={'id': 'id_address_pack', | |
'name': 'address_pack', | |
'type': 'text', | |
'maxlength': '128', | |
'required': ''}), | |
'key': Select( | |
attrs={'multiple': 'multiple', | |
'id': 'id_pack', | |
'name': 'pack', | |
'size': key}), | |
'cdp': Select( | |
attrs={'multiple': 'multiple', | |
'id': 'id_cdp', | |
'name': 'cdp', | |
'size': cdp}), | |
} | |
class KeyForm(ModelForm): | |
class Meta: | |
model = Keys_for_checking | |
fields = '__all__' | |
widgets = { | |
'sn': TextInput( | |
attrs={'id': 'id_sn', | |
'maxlength': '256', | |
'name': 'sn', | |
'required': '', | |
'pattern': '[0-9A-Za-z]', | |
}), | |
'issued_to': TextInput( | |
attrs={'required': '', | |
'maxlength': '1024', | |
'name': 'issued_to', | |
'id': 'id_issued_to', | |
}), | |
'issued_by': TextInput( | |
attrs={'required': '', | |
'maxlength': '1024', | |
'name': 'issued_by', | |
'id': 'id_issued_by', | |
}), | |
'imprint': TextInput( | |
attrs={'required': '', | |
'maxlength': '128', | |
'name': 'imprint', | |
'id': 'id_imprint', | |
'pattern': '[0-9A-Za-z]', | |
}), | |
'expiration_date': SelectDateWidget( | |
attrs={'required': '', | |
'name': 'expiration_date', | |
'id': 'id_expiration_date'}, | |
months={1: 'ЯНВ', 2: 'ФЕВ', 3: 'МАР', | |
4: 'АПР', 5: 'МАЙ', 6: 'ИЮН', | |
7: 'ИЮЛ', 8: 'АВГ', 9: 'СЕН', | |
10: 'ОКТ', 11: 'НОЯ', 12: 'ДЕК'}, | |
years=['2010', '2011', '2012', '2013', '2014', '2015', '2016', '2017', '2018', '2019', '2020']), | |
'release_date': SelectDateWidget( | |
attrs={'required': '', | |
'name': 'release_date', | |
'id': 'id_release_date', | |
'input_format': '[%Y-%m-%d]'}, | |
months={1: 'ЯНВ', 2: 'ФЕВ', 3: 'МАР', | |
4: 'АПР', 5: 'МАЙ', 6: 'ИЮН', | |
7: 'ИЮЛ', 8: 'АВГ', 9: 'СЕН', | |
10: 'ОКТ', 11: 'НОЯ', 12: 'ДЕК'}, | |
years=['2010', '2011', '2012', '2013', '2014', '2015', '2016', '2017', '2018', '2019', '2020']), | |
} | |
class CdpForm(ModelForm): | |
class Meta: | |
model = Cdp | |
fields = '__all__' | |
widgets = { | |
'url': TextInput( | |
attrs={'name': 'url', | |
'id': 'id_url', | |
'required': '', | |
'maxlength': '200', | |
'pattern': '^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$' | |
}) | |
} |
#!/usr/bin/env python | |
import os | |
import sys | |
if __name__ == "__main__": | |
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "casite.settings") | |
from django.core.management import execute_from_command_line | |
execute_from_command_line(sys.argv) |
# -*- coding: utf-8 -*- | |
# Generated by Django 1.9.13 on 2018-01-29 09:05 | |
from __future__ import unicode_literals | |
from django.db import migrations, models | |
import django.db.models.deletion | |
import django.utils.timezone | |
class Migration(migrations.Migration): | |
initial = True | |
dependencies = [ | |
] | |
operations = [ | |
migrations.CreateModel( | |
name='Cdp', | |
fields=[ | |
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), | |
('url', models.CharField(default='http://', max_length=200)), | |
], | |
), | |
migrations.CreateModel( | |
name='Certification_Authority', | |
fields=[ | |
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), | |
('name', models.CharField(max_length=128, verbose_name='Название центра сертифкации')), | |
('organization_name', models.CharField(max_length=128, verbose_name='Название юридического лица')), | |
('INN', models.CharField(max_length=12, unique=True, verbose_name='ИНН')), | |
('OGRN', models.CharField(max_length=13, unique=True, verbose_name='ОГРН')), | |
('email', models.EmailField(max_length=128, verbose_name='Адрес электронной почты')), | |
('web', models.URLField(verbose_name='WEB сайт')), | |
('address', models.CharField(max_length=128, verbose_name='Адрес')), | |
('city', models.CharField(max_length=64, verbose_name='Город')), | |
('country', models.CharField(default='RU', max_length=2, verbose_name='Страна')), | |
('status', models.CharField(choices=[('Действует', 'Действует'), ('Приостановлена', 'Приостановлена'), ('Прекращена', 'Прекращена'), ('Отозвана', 'Отозвана')], max_length=64, verbose_name='Статус аккредитации')), | |
('stat_day', models.PositiveIntegerField(default=0, editable=False, verbose_name='Дневная статистика')), | |
('stat_week', models.PositiveIntegerField(default=0, editable=False, verbose_name='Недельная статистика')), | |
('stat_month', models.PositiveIntegerField(default=0, editable=False, verbose_name='Месячная статистика')), | |
], | |
), | |
migrations.CreateModel( | |
name='Certification_Authority_System', | |
fields=[ | |
('id', models.CharField(max_length=40, primary_key=True, serialize=False, unique=True, verbose_name='Идентификатор ключ')), | |
('pack_name', models.CharField(max_length=128, verbose_name='Наименование ПАК УЦ')), | |
('class_es', models.CharField(choices=[('КС1', 'КС1'), ('КС2', 'КС2'), ('КС3', 'КС3'), ('КБ1', 'КБ1'), ('КБ2', 'КБ2'), ('КА1', 'КА1')], max_length=3, verbose_name='Класс средств ЭП')), | |
('vendor', models.CharField(choices=[('КриптоПРО УЦ 2.0', 'КриптоПРО УЦ 2.0'), ('КриптоПРО УЦ 1.5', 'КриптоПРО УЦ 1.5'), ('VIPNet КС2', 'VIPNet КС2'), ('VIPNet KC3', 'VIPNet KC3'), ('VIPNet УЦ 4', 'VIPNet УЦ 4'), ('Notary-PRO 2.6', 'Notary-PRO 2.6'), ('Notary-PRO 2.7', 'Notary-PRO 2.7'), ('АПК Валидата УЦ', 'АПК Валидата УЦ'), ('АПК Верба-сертификат МВ', 'АПК Верба-сертификат МВ'), ('АПК УЦ ММВБ версия 1.0', 'АПК УЦ ММВБ версия 1.0'), ('Атлант-УЦ', 'Атлант-УЦ'), ('КУЦ "Автограф"', 'КУЦ "Автограф"'), ('ЛИССИ-УЦ', 'ЛИССИ-УЦ'), ('ПАК "Головной УЦ"', 'ПАК "Головной УЦ"'), ('ПАК Юнисерт ГОСТ версия 2.1', 'ПАК Юнисерт ГОСТ версия 2.1'), ('ПАК Бикрипт-УЦ', 'ПАК Бикрипт-УЦ'), ('AtlasCert версия 1.1', 'AtlasCert версия 1.1')], max_length=40, verbose_name='Средства УЦ')), | |
('address_pack', models.CharField(max_length=128, verbose_name='Адрес ПАК')), | |
('cdp', models.ForeignKey(default='', on_delete=django.db.models.deletion.CASCADE, to='crlcontrol.Cdp')), | |
], | |
), | |
migrations.CreateModel( | |
name='Keys_for_checking', | |
fields=[ | |
('issued_to', models.CharField(max_length=1024, verbose_name='Кому выдан')), | |
('issued_by', models.CharField(max_length=1024, verbose_name='Кем выдан')), | |
('sn', models.CharField(max_length=256, primary_key=True, serialize=False, unique=True, verbose_name='Серийный номер')), | |
('release_date', models.DateField(default=django.utils.timezone.now, verbose_name='Действует с')), | |
('expiration_date', models.DateField(default=django.utils.timezone.now, verbose_name='Действует по')), | |
('imprint', models.CharField(max_length=128, verbose_name='Отпечаток')), | |
], | |
), | |
migrations.AddField( | |
model_name='certification_authority_system', | |
name='key', | |
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='crlcontrol.Keys_for_checking'), | |
), | |
migrations.AddField( | |
model_name='certification_authority', | |
name='pack', | |
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='crlcontrol.Certification_Authority_System'), | |
), | |
] |
# -*- coding: utf-8 -*- | |
# Generated by Django 1.9.13 on 2018-01-29 09:12 | |
from __future__ import unicode_literals | |
from django.db import migrations, models | |
class Migration(migrations.Migration): | |
dependencies = [ | |
('crlcontrol', '0001_initial'), | |
] | |
operations = [ | |
migrations.RemoveField( | |
model_name='certification_authority_system', | |
name='key', | |
), | |
migrations.AddField( | |
model_name='certification_authority_system', | |
name='key', | |
field=models.ManyToManyField(to='crlcontrol.Keys_for_checking'), | |
), | |
] |
# -*- coding: utf-8 -*- | |
# Generated by Django 1.9.13 on 2018-01-29 09:14 | |
from __future__ import unicode_literals | |
from django.db import migrations, models | |
class Migration(migrations.Migration): | |
dependencies = [ | |
('crlcontrol', '0002_auto_20180129_1512'), | |
] | |
operations = [ | |
migrations.RemoveField( | |
model_name='certification_authority', | |
name='pack', | |
), | |
migrations.AddField( | |
model_name='certification_authority', | |
name='pack', | |
field=models.ManyToManyField(to='crlcontrol.Certification_Authority_System'), | |
), | |
migrations.RemoveField( | |
model_name='certification_authority_system', | |
name='cdp', | |
), | |
migrations.AddField( | |
model_name='certification_authority_system', | |
name='cdp', | |
field=models.ManyToManyField(to='crlcontrol.Cdp'), | |
), | |
] |
# -*- coding: utf-8 -*- | |
# Generated by Django 1.9.13 on 2018-01-31 04:22 | |
from __future__ import unicode_literals | |
from django.db import migrations, models | |
class Migration(migrations.Migration): | |
dependencies = [ | |
('crlcontrol', '0003_auto_20180129_1514'), | |
] | |
operations = [ | |
migrations.AlterField( | |
model_name='certification_authority', | |
name='pack', | |
field=models.ManyToManyField(to='crlcontrol.Certification_Authority_System', verbose_name='Програмно-аппратный комплекс'), | |
), | |
migrations.AlterField( | |
model_name='certification_authority_system', | |
name='cdp', | |
field=models.ManyToManyField(to='crlcontrol.Cdp', verbose_name='Точка доступа CRL'), | |
), | |
migrations.AlterField( | |
model_name='certification_authority_system', | |
name='key', | |
field=models.ManyToManyField(to='crlcontrol.Keys_for_checking', verbose_name='Ключи проверки ЭП'), | |
), | |
] |
from django.core.urlresolvers import reverse | |
from django.db import models | |
class Cdp(models.Model): | |
url = models.CharField(max_length=200, default='http://') | |
def __str__(self): | |
return self.url | |
def get_absolute_url(self): | |
return reverse('detail', kwargs={'pk', self.pk}) | |
class Meta: | |
ordering = ['url'] | |
class Keys_for_checking (models.Model): | |
# Ключ проверки ЭП | |
issued_to = models.CharField('Кому выдан', max_length=1024) | |
issued_by = models.CharField('Кем выдан', max_length=1024) | |
sn = models.CharField('Серийный номер', max_length=256, unique=True, primary_key=True) | |
release_date = models.DateField('Действует с', default='YYYY-MM-DD') | |
expiration_date = models.DateField('Действует по', default='YYYY-MM-DD') | |
imprint = models.CharField('Отпечаток', max_length=128) | |
def __str__(self): | |
return self.issued_to | |
class Meta: | |
ordering = ['issued_to'] | |
class Certification_Authority_System(models.Model): | |
# ПЕРМЕННЫЕ ПАКА | |
# Переменные ссылок списков отзыва | |
id = models.CharField('Идентификатор ключ', max_length=40, unique=True, primary_key=True) | |
pack_name = models.CharField('Наименование ПАК УЦ', max_length=128) | |
KC1 = 'КС1' | |
KC2 = 'КС2' | |
KC3 = 'КС3' | |
KB1 = 'КБ1' | |
KB2 = 'КБ2' | |
KA1 = 'КА1' | |
CLASS_ES = ( | |
(KC1, 'КС1'), | |
(KC2, 'КС2'), | |
(KC3, 'КС3'), | |
(KB1, 'КБ1'), | |
(KB2, 'КБ2'), | |
(KA1, 'КА1'), | |
) | |
class_es = models.CharField('Класс средств ЭП', max_length=3, choices=CLASS_ES) | |
v1 = 'КриптоПРО УЦ 2.0' | |
v2 = 'КриптоПРО УЦ 1.5' | |
v3 = 'VIPNet КС2' | |
v4 = 'VIPNet KC3' | |
v5 = 'VIPNet УЦ 4' | |
v6 = 'Notary-PRO 2.6' | |
v7 = 'Notary-PRO 2.7' | |
v8 = 'АПК Валидата УЦ' | |
v9 = 'АПК Верба-сертификат МВ' | |
v10 = 'АПК УЦ ММВБ версия 1.0' | |
v11 = 'Атлант-УЦ' | |
v12 = 'КУЦ "Автограф"' | |
v13 = 'ЛИССИ-УЦ' | |
v14 = 'ПАК "Головной УЦ"' | |
v15 = 'ПАК Юнисерт ГОСТ версия 2.1' | |
v16 = 'ПАК Бикрипт-УЦ' | |
v17 = 'AtlasCert версия 1.1' | |
VENDOR = ( | |
(v1, 'КриптоПРО УЦ 2.0'), | |
(v2, 'КриптоПРО УЦ 1.5'), | |
(v3, 'VIPNet КС2'), | |
(v4, 'VIPNet KC3'), | |
(v5, 'VIPNet УЦ 4'), | |
(v6, 'Notary-PRO 2.6'), | |
(v7, 'Notary-PRO 2.7'), | |
(v8, 'АПК Валидата УЦ'), | |
(v9, 'АПК Верба-сертификат МВ'), | |
(v10, 'АПК УЦ ММВБ версия 1.0'), | |
(v11, 'Атлант-УЦ'), | |
(v12, 'КУЦ "Автограф"'), | |
(v13, 'ЛИССИ-УЦ'), | |
(v14, 'ПАК "Головной УЦ"'), | |
(v15, 'ПАК Юнисерт ГОСТ версия 2.1'), | |
(v16, 'ПАК Бикрипт-УЦ'), | |
(v17, 'AtlasCert версия 1.1'), | |
) | |
vendor = models.CharField('Средства УЦ', max_length=40, choices=VENDOR) | |
address_pack = models.CharField('Адрес ПАК', max_length=128) | |
cdp = models.ManyToManyField(Cdp, verbose_name='Точка доступа CRL') | |
key = models.ManyToManyField(Keys_for_checking, verbose_name='Ключи проверки ЭП') | |
def __str__(self): | |
return self.pack_name + '(' + self.id + ')' | |
class Meta: | |
ordering = ['pack_name'] | |
class Certification_Authority(models.Model): | |
# Общие переменные | |
name = models.CharField('Название центра сертифкации', max_length=128, blank=False) | |
organization_name = models.CharField('Название юридического лица', max_length=128, blank=False) | |
INN = models.CharField('ИНН', max_length=12, unique=True, blank=False) | |
OGRN = models.CharField('ОГРН', max_length=13, unique=True, blank=False) | |
email = models.EmailField('Адрес электронной почты', max_length=128, blank=False) | |
web = models.URLField('WEB сайт') | |
address = models.CharField('Адрес', max_length=128) | |
city = models.CharField('Город', max_length=64) | |
country = models.CharField('Страна', max_length=2, default='RU') | |
active = 'Действует' | |
suspended = 'Приостановлена' | |
discontinued = 'Прекращена' | |
revoked = 'Отозвана' | |
STATUS = ( | |
(active, 'Действует'), | |
(suspended, 'Приостановлена'), | |
(discontinued, 'Прекращена'), | |
(revoked, 'Отозвана') | |
) | |
status = models.CharField('Статус аккредитации', max_length=64, choices=STATUS) | |
# Переменные статистики | |
stat_day = models.PositiveIntegerField(default=0, editable=False, | |
verbose_name='Дневная статистика') | |
stat_week = models.PositiveIntegerField(default=0, editable=False, | |
verbose_name='Недельная статистика') | |
stat_month = models.PositiveIntegerField(default=0, editable=False, | |
verbose_name='Месячная статистика') | |
#Связи | |
pack = models.ManyToManyField(Certification_Authority_System, verbose_name='Програмно-аппратный комплекс') | |
def __str__(self): | |
return self.name | |
def get_absolute_url(self): | |
return reverse('detail', kwargs={'pk', self.pk}) |
body { | |
background: #FFFFFF; | |
font-family:"Ubuntu"; | |
} | |
input { | |
background: #FFFFFF; | |
color: #000000; | |
font-family:"Ubuntu"; | |
border: none; | |
} | |
input#id_organization_name { | |
width: 100%; | |
border: none; | |
border-bottom: 1px dashed #E95420; | |
} | |
input#id_pack_name { | |
width: 100%; | |
height: 37px; | |
font-size: 35px; | |
border: none; | |
border-bottom: 1px dashed #E95420; | |
} | |
input#id_INN { | |
width: 110px; | |
border: none; | |
border-bottom: 1px dashed #E95420; | |
} | |
input#id_OGRN { | |
width: 110px; | |
border: none; | |
border-bottom: 1px dashed #E95420; | |
} | |
input#id_email { | |
width: 100%; | |
border: none; | |
border-bottom: 1px dashed #E95420; | |
} | |
input#id_web { | |
width: 100%; | |
border: none; | |
border-bottom: 1px dashed #E95420; | |
} | |
input#id_address { | |
width: 100%; | |
border: none; | |
border-bottom: 1px dashed #E95420; | |
} | |
input#id_city { | |
width: 110px; | |
border: none; | |
border-bottom: 1px dashed #E95420; | |
} | |
input#id_country { | |
width: 20px; | |
border: none; | |
border-bottom: 1px dashed #E95420; | |
} | |
input#id_name { | |
width: 100%; | |
height: 37px; | |
font-size: 35px; | |
border: none; | |
border-bottom: 1px dashed #E95420; | |
} | |
input#id_id { | |
width: 100%; | |
border: none; | |
border-bottom: 1px dashed #E95420; | |
} | |
input#id_address_pack { | |
width: 100%; | |
border: none; | |
border-bottom: 1px dashed #E95420; | |
} | |
input#id_sn { | |
width: 100%; | |
border: none; | |
border-bottom: 1px dashed #E95420; | |
} | |
input#id_issued_to { | |
width: 100%; | |
border: none; | |
border-bottom: 1px dashed #E95420; | |
} | |
input#id_issued_by { | |
width: 100%; | |
border: none; | |
border-bottom: 1px dashed #E95420; | |
} | |
input#id_imprint { | |
width: 100%; | |
border: none; | |
border-bottom: 1px dashed #E95420; | |
} | |
input#id_url { | |
width: 100%; | |
border: none; | |
border-bottom: 1px dashed #E95420; | |
} | |
input:invalid { | |
background-color: #fa8072; | |
} | |
input#submit { | |
border: 1px solid green; | |
color: #fff; | |
background: green; | |
font-size: 18px; | |
} | |
input:-webkit-autofill { | |
color: #000000 !important; | |
} | |
input:focus { | |
outline: none; | |
} | |
input[type=number]::-webkit-inner-spin-button, | |
input[type=number]::-webkit-outer-spin-button { | |
-webkit-appearance: none; | |
margin: 0; | |
} | |
select { | |
background: #ffffff; | |
color: #000000; | |
width: 100%; | |
border: none; | |
font-family:"Ubuntu"; | |
} | |
select#id_status { | |
width: 160px; | |
margin: left; | |
} | |
select#id_class_es { | |
width: 60px; | |
margin: left; | |
} | |
select#id_vendor { | |
width: 230px; | |
margin: left; | |
} | |
select#id_pack { | |
height: 100%; | |
overflow-y: hidden; | |
} | |
select#id_cdp { | |
height: 100%; | |
overflow-y: hidden; | |
} | |
select:focus{ | |
outline: none; | |
cursor: pointer; | |
} | |
select#id_expiration_date_day { | |
width: 40px; | |
} | |
select#id_expiration_date_month { | |
width: 60px; | |
} | |
select#id_expiration_date_year { | |
width: 60px; | |
} | |
select#id_release_date_day { | |
width: 40px; | |
} | |
select#id_release_date_month { | |
width: 60px; | |
} | |
select#id_release_date_year { | |
width: 60px; | |
} | |
option { | |
background: #ffffff; | |
color: #000000; | |
width: 100%; | |
border: none; | |
font: "Ubuntu"; | |
} | |
h1 { | |
font-size: 33px; | |
color: #000000; | |
margin: auto; | |
align: center; | |
padding: 20px; | |
} | |
table { | |
width: 95%; | |
border: none; | |
margin: auto; | |
border-collapse: collapse; | |
} | |
table#cas_1 { | |
border: none; | |
} | |
table#cas_2 { | |
border: none; | |
width: 100%; | |
} | |
table#cas_options { | |
width: 100%; | |
border: none; | |
} | |
table#indexlist { | |
border: none; | |
color: white; | |
} | |
table#cdp_list { | |
width: 50%; | |
} | |
.reg { | |
width: 100%; | |
} | |
th { | |
color: #E95420; | |
background: #ffffff; | |
border-bottom: 1px dotted | |
} | |
td { | |
color: #000000; | |
background: #ffffff; | |
border: 1px none #E95420; | |
padding: 3px; | |
} | |
td#left { | |
text-align: right; | |
width: 220px; | |
border: none; | |
} | |
td#left_k { | |
text-align: right; | |
width: 150px; | |
border: none; | |
} | |
td#left_cr { | |
text-align: right; | |
vertical-align: top; | |
width: 120px; | |
border: none; | |
} | |
td#right { | |
border: none; | |
text-align: left; | |
} | |
td#left_options { | |
border: none; | |
vertical-align: top; | |
} | |
td#right_options { | |
border: none; | |
vertical-align: top; | |
} | |
a { | |
color: #3399ff; | |
text-decoration: none; | |
padding: 3px; | |
} | |
fieldset { | |
width: 70%; | |
border: 1px solid #E95420; | |
color: #000000; | |
margin: auto; | |
padding: 10px; | |
margin-top: 10px; | |
} | |
.warning { | |
background: #cd2900; | |
color: white; | |
font-size: 18px; | |
height: 22px; | |
width: 180px; | |
} | |
.start { | |
background: green; | |
color: white; | |
font-size: 18px; | |
height: 22px; | |
width: 180px; | |
} | |
.details { | |
width: 98%; | |
border: none; | |
} | |
.stat { | |
width: 400px; | |
margin: left; | |
} | |
hr { | |
border: 1px dotted #E95420; | |
} | |
fieldset#cert { | |
width: 95%; | |
margin-left: 0; | |
} | |
fieldset#cdp { | |
width: 95%; | |
margin-left: 0; | |
} | |
fieldset#reg { | |
width: 380px; | |
margin: auto; | |
} | |
div#cdpadd { | |
margin-top: 20px; | |
} | |
.login { | |
border: 1px solid #E95420; | |
} | |
#centerLayer { | |
position: absolute; /* Абсолютное позиционирование */ | |
width: 400px; /* Ширина слоя в пикселах */ | |
height: 300px; /* Высота слоя в пикселах */ | |
left: 50%; /* Положение слоя от левого края */ | |
top: 50%; /* Положение слоя от верхнего края */ | |
margin-left: -211px; /* Отступ слева, включает padding и border */ | |
margin-top: -150px; /* Отступ сверху */ | |
background: #fff; /* Цвет фона */ | |
padding: 10px; /* Поля вокруг текста */ | |
overflow: auto; /* Добавление полосы прокрутки */ | |
} | |
body { | |
background: #000000; | |
font-family:"Alien Encounters(RUS BY LYAJKA)"; | |
} | |
input { | |
background: #000000; | |
color: #0080ff; | |
font-family:"Alien Encounters(RUS BY LYAJKA)"; | |
border: none; | |
} | |
input#id_organization_name { | |
width: 100%; | |
border: none; | |
border-bottom: 1px dashed #0fad03; | |
} | |
input#id_pack_name { | |
width: 100%; | |
height: 37px; | |
font-size: 35px; | |
border: none; | |
border-bottom: 1px dashed #0fad03; | |
} | |
input#id_INN { | |
width: 110px; | |
border: none; | |
border-bottom: 1px dashed #0fad03; | |
} | |
input#id_OGRN { | |
width: 110px; | |
border: none; | |
border-bottom: 1px dashed #0fad03; | |
} | |
input#id_email { | |
width: 100%; | |
border: none; | |
border-bottom: 1px dashed #0fad03; | |
} | |
input#id_web { | |
width: 100%; | |
border: none; | |
border-bottom: 1px dashed #0fad03; | |
} | |
input#id_address { | |
width: 100%; | |
border: none; | |
border-bottom: 1px dashed #0fad03; | |
} | |
input#id_city { | |
width: 110px; | |
border: none; | |
border-bottom: 1px dashed #0fad03; | |
} | |
input#id_country { | |
width: 20px; | |
border: none; | |
border-bottom: 1px dashed #0fad03; | |
} | |
input#id_name { | |
width: 100%; | |
height: 37px; | |
font-size: 35px; | |
border: none; | |
border-bottom: 1px dashed #0fad03; | |
} | |
input#id_id { | |
width: 100%; | |
border: none; | |
border-bottom: 1px dashed #0fad03; | |
} | |
input#id_address_pack { | |
width: 100%; | |
border: none; | |
border-bottom: 1px dashed #0fad03; | |
} | |
input#id_sn { | |
width: 100%; | |
border: none; | |
border-bottom: 1px dashed #0fad03; | |
} | |
input#id_issued_to { | |
width: 100%; | |
border: none; | |
border-bottom: 1px dashed #0fad03; | |
} | |
input#id_issued_by { | |
width: 100%; | |
border: none; | |
border-bottom: 1px dashed #0fad03; | |
} | |
input#id_imprint { | |
width: 100%; | |
border: none; | |
border-bottom: 1px dashed #0fad03; | |
} | |
input#id_url { | |
width: 100%; | |
border: none; | |
border-bottom: 1px dashed #0fad03; | |
} | |
input:invalid { | |
background-color: #330000; | |
} | |
input#submit { | |
border: 1px solid #0fad03; | |
color: #fff; | |
background: #0fad03; | |
font-size: 18px; | |
} | |
input:-webkit-autofill { | |
color: #000000 !important; | |
} | |
input:focus { | |
outline: none; | |
} | |
input[type=number]::-webkit-inner-spin-button, | |
input[type=number]::-webkit-outer-spin-button { | |
-webkit-appearance: none; | |
margin: 0; | |
} | |
select { | |
background: #000000; | |
color: #0080ff; | |
width: 100%; | |
border: none; | |
font-family:"Alien Encounters(RUS BY LYAJKA)"; | |
} | |
select#id_status { | |
width: 160px; | |
margin: left; | |
} | |
select#id_class_es { | |
width: 60px; | |
margin: left; | |
} | |
select#id_vendor { | |
width: 230px; | |
margin: left; | |
} | |
select#id_pack { | |
height: 100%; | |
overflow-y: hidden; | |
} | |
select#id_cdp { | |
height: 100%; | |
overflow-y: hidden; | |
} | |
select:focus{ | |
outline: none; | |
cursor: pointer; | |
} | |
select#id_expiration_date_day { | |
width: 40px; | |
} | |
select#id_expiration_date_month { | |
width: 60px; | |
} | |
select#id_expiration_date_year { | |
width: 60px; | |
} | |
select#id_release_date_day { | |
width: 40px; | |
} | |
select#id_release_date_month { | |
width: 60px; | |
} | |
select#id_release_date_year { | |
width: 60px; | |
} | |
option { | |
background: #000000; | |
color: #0080ff; | |
width: 100%; | |
border: none; | |
font: "Alien Encounters(RUS BY LYAJKA)"; | |
} | |
h1 { | |
font-size: 33px; | |
color: #0fad03; | |
margin: auto; | |
align: center; | |
padding: 20px; | |
} | |
table { | |
width: 95%; | |
border: none; | |
margin: auto; | |
border-collapse: collapse; | |
} | |
table#cas_1 { | |
border: none; | |
} | |
table#cas_2 { | |
border: none; | |
width: 100%; | |
} | |
table#cas_options { | |
width: 100%; | |
border: none; | |
} | |
table#indexlist { | |
border: none; | |
color: white; | |
} | |
table#cdp_list { | |
width: 50%; | |
} | |
th { | |
color: #0fad03; | |
background: #000000; | |
border-bottom: 1px dotted | |
} | |
td { | |
color: #0fad03; | |
background: #000000; | |
border: 1px none #0fad03; | |
padding: 3px; | |
} | |
td#left { | |
text-align: right; | |
width: 220px; | |
border: none; | |
} | |
td#left_k { | |
text-align: right; | |
width: 150px; | |
border: none; | |
} | |
td#left_cr { | |
text-align: right; | |
vertical-align: top; | |
width: 120px; | |
border: none; | |
} | |
td#right { | |
border: none; | |
text-align: left; | |
} | |
td#left_options { | |
border: none; | |
vertical-align: top; | |
} | |
td#right_options { | |
border: none; | |
vertical-align: top; | |
} | |
a { | |
color: white; | |
text-decoration: none; | |
padding: 3px; | |
} | |
fieldset { | |
width: 70%; | |
border: 1px solid #0fad03; | |
color: #0fad03; | |
margin: auto; | |
padding: 10px; | |
margin-top: 10px; | |
} | |
.warning { | |
background: #cd2900; | |
color: white; | |
font-size: 18px; | |
height: 22px; | |
width: 180px; | |
} | |
.start { | |
background: #0fad03; | |
color: white; | |
font-size: 18px; | |
height: 22px; | |
width: 180px; | |
} | |
.details { | |
width: 98%; | |
border: none; | |
} | |
.stat { | |
width: 400px; | |
margin: left; | |
} | |
hr { | |
border: 1px dotted #0fad03; | |
} | |
fieldset#cert { | |
width: 95%; | |
margin-left: 0; | |
} | |
fieldset#cdp { | |
width: 95%; | |
margin-left: 0; | |
} | |
div#cdpadd { | |
margin-top: 20px; | |
} |
{% extends "base.html" %} | |
{% block content %} | |
<fieldset> | |
<legend> | |
Регистрационная информация пользователя | |
</legend> | |
<table> | |
<tbody> | |
<tr> | |
<td>Логин:</td> | |
<td>{{ user.username }}</td> | |
</tr> | |
<tr> | |
<td>Имя:</td> | |
<td>{{ user.first_name }}</td> | |
</tr> | |
<tr> | |
<td>Фамилия:</td> | |
<td>{{ user.last_name }}</td> | |
</tr> | |
<tr> | |
<td>Адрес электронной почты:</td> | |
<td>{{ user.email }}</td> | |
</tr> | |
<tr> | |
<td>Дата последнего входа:</td> | |
<td>{{ user.last_login }}</td> | |
</tr> | |
<tr> | |
<td>Дата регистрации:</td> | |
<td>{{ user.date_joined }}</td> | |
</tr> | |
</tbody> | |
</table> | |
</fieldset> | |
{% endblock %} |
<!DOCTYPE html> | |
<html lang="ru"> | |
<head> | |
{% load staticfiles %} | |
<link rel="stylesheet" type="text/css" href="{% static 'crlcontrol/style.css' %}" /> | |
<title>{% block title %}CRLCONTROL by OMRA{% endblock %}</title> | |
</head> | |
<body> | |
{% block sidebar %} | |
<div> | |
<table> | |
<tbody> | |
<tr> | |
<td><a href="{% url 'crlcontrol:index' %}"> ▼ Список УЦ</a></td> | |
<td><a href="{% url 'crlcontrol:cas-list'%}"> ▼ Список ПАК</a></td> | |
<td><a href="{% url 'crlcontrol:key-list'%}"> ▼ Список ЭП</a></td> | |
<td><a href="{% url 'crlcontrol:cdp-list'%}"> ▼ Список CDP</a></td> | |
{% if user.id %} | |
<td align="right"> | |
<a href="{% url 'crlcontrol:user' user.pk %}">{{ user.get_username }}</a> | |
<a href="{% url 'logout' %}">Выход</a> | |
</td> | |
{% else %} | |
<td> | |
<a href="{% url 'django.contrib.auth.views.login' %}">Вход</a> | |
</td> | |
{% endif %} | |
</tr> | |
</tbody> | |
</table> | |
</div> | |
{% endblock %} | |
<div id="content"> | |
{% block content %}{% endblock %} | |
</div> | |
</body> | |
</html> |
{% extends "base.html" %} | |
{% block content %} | |
<h1 align="center">{{ object.pack_name }}</h1> | |
<fieldset> | |
<legend>{{ object.pack_name }}</legend> | |
<table> | |
<tbody> | |
<tr> | |
<td> | |
Класс средств: | |
</td> | |
<td> | |
{{ object.class_es }} | |
</td> | |
</tr> | |
<tr> | |
<td> | |
Средства УЦ: | |
</td> | |
<td> | |
{{ object.vendor }} | |
</td> | |
</tr> | |
<tr> | |
<td> | |
Адрес: | |
</td> | |
<td> | |
{{ object.address_pack }} | |
</td> | |
</tr> | |
</tbody> | |
</table> | |
<p>Ключи проверки ЭП уполномученных лиц:</p> | |
<fieldset class="details"> | |
<legend> | |
Идентификатор ключа: {{ object.id }} | |
</legend> | |
<p>Сертификаты ключа проверки ЭП:</p> | |
{% for key in object.key.all %} | |
<fieldset class="details"> | |
<table> | |
<tbody> | |
<tr> | |
<td> | |
Кому выдан: | |
</td> | |
<td> | |
{{ key.issued_to }} | |
</td> | |
</tr> | |
<tr> | |
<td> | |
Кем выдан: | |
</td> | |
<td> | |
{{ key.issued_by }} | |
</td> | |
</tr> | |
<tr> | |
<td> | |
Серийный номер: | |
</td> | |
<td> | |
<a href="{% url 'crlcontrol:key-detail' key.sn %}">{{ key.sn }}</a> | |
</td> | |
</tr> | |
<tr> | |
<td> | |
Действует: | |
</td> | |
<td> | |
c {{ key.release_date }} по {{ key.expiration_date }} | |
</td> | |
</tr> | |
<tr> | |
<td> | |
Отпечаток: | |
</td> | |
<td> | |
{{ key.imprint }} | |
</td> | |
</tr> | |
</tbody> | |
</table> | |
</fieldset> | |
{% empty %} | |
<fieldset> | |
<legend>Записи в БД отсутсвуют</legend> | |
<p>Пусто</p> | |
</fieldset> | |
{% endfor %} | |
</fieldset> | |
<p>Адреса публикации списков анулированных сертификатов:</p> | |
<ul> | |
{% for cdp in object.cdp.all %} | |
<li> | |
<a href="{{ cdp.url }}">{{ cdp.url }}</a> | |
</li> | |
{% empty %} | |
<li>Записи в БД отсутсвуют</li> | |
{% endfor %} | |
</ul> | |
</fieldset> | |
<fieldset> | |
<a class="warning" href="{% url 'crlcontrol:cas-del' object.id %}">✘ Удалить</a> | |
</fieldset> | |
{% endblock %} |
{% extends "base.html" %} | |
{% block content %} | |
<form action="" method="post"> | |
{% csrf_token %} | |
<fieldset> | |
<legend>Вы действительно хотите удалить запись?</legend> | |
<table> | |
<tbody> | |
<tr><td>URL:</td><td>{{ object.url }}</td></tr> | |
</tbody> | |
</table> | |
</fieldset> | |
<fieldset> | |
<input class="warning" type="submit" value="✘ Удалить" /> | |
</fieldset> | |
</form> | |
{% endblock %} |
{% extends "base.html" %} | |
{% block content %} | |
<fieldset> | |
<legend> | |
CDP № {{ object.id }} | |
</legend> | |
<table> | |
<tbody> | |
<tr> | |
<td> | |
URL: | |
</td> | |
<td> | |
<a href="{{ object.url }}">{{ object.url }}</a> | |
</td> | |
</tr> | |
</tbody> | |
</table> | |
</fieldset> | |
<fieldset> | |
<a class="warning" href="{% url 'crlcontrol:cdp-del' object.id %}">✘ Удалить</a> | |
</fieldset> | |
{% endblock %} |
{% extends "base.html" %} | |
{% block content %} | |
<form action="" method="post"> | |
{% csrf_token %} | |
<fieldset> | |
<legend>URL точки доступа</legend> | |
{{ form.url }} | |
</fieldset> | |
<fieldset> | |
<input type="submit" id="submit" value="✔ Добавить"> | |
</fieldset> | |
</form> | |
{% endblock %} |
{% extends "base.html" %} | |
{% block content %} | |
<fieldset> | |
<legend> | |
Список точек распространения CRL | |
</legend> | |
<table> | |
<tr> | |
<th> | |
№ | |
</th> | |
<th> | |
URL | |
</th> | |
</tr> | |
{% for cdp in object_list %} | |
<tr> | |
<td> | |
{{ cdp.id }} | |
</td> | |
<td> | |
<a href="{% url 'crlcontrol:cdp-detail' cdp.id %}">{{ cdp.url }}</a> | |
</td> | |
</tr> | |
{% empty %} | |
<tr> | |
<td> | |
Записей не найдено | |
</td> | |
</tr> | |
{% endfor %} | |
</table> | |
</fieldset> | |
<fieldset> | |
<a class="start" href="{% url 'crlcontrol:cdp-add'%}">✚ Новая запись</a> | |
</fieldset> | |
{% endblock %} |
{% extends "base.html" %} | |
{% block content %} | |
<h1 align="center">{{ object.name }}</h1> | |
<fieldset> | |
<legend>Общие сведения</legend> | |
<table> | |
<tbody> | |
<tr><td id="left">Статус аккредитации:</td><td id="right">{{ object.status }}</td></tr> | |
<tr><td id="left">Название ЮЛ:</td><td id="right">{{ object.organization_name }}</td></tr> | |
<tr><td id="left">ИНН:</td><td id="right">{{ object.INN }}</td></tr> | |
<tr><td id="left">ОГРН:</td><td id="right">{{ object.OGRN }}</td></tr> | |
<tr><td id="left">Электронная почта:</td><td id="right">{{ object.email }}</td></tr> | |
<tr><td id="left">WEB сайт:</td><td id="right"><a href="{{ object.web }}">{{ object.web }}</a></td></tr> | |
<tr><td id="left">Адрес:</td><td id="right">{{ object.address }}</td></tr> | |
<tr><td id="left">Город:</td><td id="right">{{ object.city }}</td></tr> | |
<tr><td id="left">Страна:</td><td id="right">{{ object.country }}</td></tr> | |
</tbody> | |
</table> | |
<div style="margin-bottom: 15px"> | |
<table class="stat"> | |
<tbody> | |
<tr><td colspan="3">Доступность сервисов * (за последние)</td></tr> | |
<tr><td>Сутки</td><td>Неделя</td><td>Месяц</td></tr> | |
<tr><td>{{ object.stat_day }}</td><td>{{ object.stat_week }}</td><td>{{ object.stat_month }}</td></tr> | |
</tbody> | |
</table> | |
</div> | |
</fieldset> | |
{% for pack in object.pack.all %} | |
<fieldset> | |
<legend> ► <a href="{% url 'crlcontrol:cas-detail' pack.id %}">{{ pack.pack_name }}</a></legend> | |
<div> | |
<table> | |
<tbody> | |
<tr><td id="left">Класс средств:</td><td id="right">{{ pack.class_es }}</td></tr> | |
<tr><td id="left">Средства УЦ:</td><td id="right">{{ pack.vendor }}</td></tr> | |
<tr><td id="left">Адрес:</td><td id="right">{{ pack.address_pack }}</td></tr> | |
</tbody> | |
</table> | |
</div> | |
<hr> | |
<div>Ключи проверки ЭП уполномученных лиц:</div> | |
<fieldset class="details"> | |
<legend>Идентификатор ключа: {{ pack.id }}</legend> | |
<div>Сертификаты ключа проверки ЭП:</div> | |
{% for key in pack.key.all %} | |
<fieldset class="details"> | |
<legend> ► <a href="{% url 'crlcontrol:key-detail' key.sn %}">{{ key.sn }}</a></legend> | |
<table> | |
<tbody> | |
<tr><td id="left_cr">Кому выдан:</td><td id="right">{{ key.issued_to }}</td></tr> | |
<tr><td id="left_cr">Кем выдан:</td><td id="right">{{ key.issued_by }}</td></tr> | |
<tr><td id="left_cr">Действует:</td><td id="right">c {{ key.release_date }} по {{ key.expiration_date }}</td></tr> | |
<tr><td id="left_cr">Отпечаток:</td><td id="right">{{ key.imprint }}</td></tr> | |
</tbody> | |
</table> | |
</fieldset> | |
{% empty %} | |
<fieldset> | |
<legend>Записи в БД отсутсвуют</legend> | |
<div>Пусто</div> | |
</fieldset> | |
{% endfor %} | |
</fieldset> | |
<div id="cdpadd">Адреса публикации списков анулированных сертификатов:</div> | |
<ul> | |
{% for cdp in pack.cdp.all %} | |
<li><a href="{{ cdp.url }}">{{ cdp.url }}</a></li> | |
{% empty %} | |
<li>Записи в БД отсутсвуют</li> | |
{% endfor %} | |
</ul> | |
</fieldset> | |
{% empty %} | |
<fieldset> | |
<legend>Записи в БД отсутсвуют</legend> | |
<div>Пусто</div> | |
</fieldset> | |
{% endfor %} | |
<fieldset> | |
<a class="warning" href="{% url 'crlcontrol:ca-del' object.id %}">✘ Удалить</a> | |
</fieldset> | |
{% endblock %} |
{% extends "base.html" %} | |
{% block content %} | |
<fieldset> | |
<legend> | |
Реестр удостоверяющих центров | |
</legend> | |
<table id="indexlist"> | |
<tr> | |
<th>Наименование УЦ</th> | |
<th>Город</th> | |
<th>Статус</th> | |
</tr> | |
{% for ca in object_list %} | |
<tr> | |
<td> | |
<a href="{% url 'crlcontrol:detail' ca.id %}">{{ ca.name }}</a> | |
</td> | |
<td> | |
{{ ca.city }} | |
</td> | |
<td> | |
{{ ca.status }} | |
</td> | |
</tr> | |
{% empty %} | |
<tr> | |
<td> | |
Записей не найдено | |
</td> | |
</tr> | |
{% endfor %} | |
</table> | |
</fieldset> | |
<fieldset> | |
<a class="start" href="{% url 'crlcontrol:ca-add' %}">✚ Новая запись</a> | |
</fieldset> | |
{% endblock %} |
{% extends "base.html" %} | |
{% block content %} | |
<form action="" method="post"> | |
{% csrf_token %} | |
<div> | |
<fieldset> | |
<legend>Вы действительно хотите удалить запись?</legend> | |
<table> | |
<tbody> | |
<tr><td>Серийный номер:</td><td>{{ object.sn }}</td></tr> | |
<tr><td>Кому выдан:</td><td>{{ object.issued_to }}</td></tr> | |
<tr><td>Кем выдан:</td><td>{{ object.issued_by }}</td></tr> | |
<tr><td>Действителен с:</td><td>{{ object.release_date }}</td></tr> | |
<tr><td>Действителен по:</td><td>{{ object.expiration_date }}</td></tr> | |
<tr><td>Отпечаток:</td><td>{{ object.imprint }}</td></tr> | |
</tbody> | |
</table> | |
</fieldset> | |
</div> | |
<fieldset> | |
<input type="submit" class="warning" value="✘ Удалить"/> | |
</fieldset> | |
</form> | |
{% endblock %} |
{% extends "base.html" %} | |
{% block content %} | |
<h1 align="center">Ключ проверки ЭП уполномоченных лиц:</h1> | |
<fieldset> | |
<legend>Сертификат ключа проверки ЭП</legend> | |
<table> | |
<tbody> | |
<tr><td>Кому выдан: </td><td>{{ object.issued_to }}</td></tr> | |
<tr><td>Кем выдан: </td><td>{{ object.issued_by }}</td></tr> | |
<tr><td>Серийный номер: </td><td>{{ object.sn }}</td></tr> | |
<tr><td>Действует: </td><td>c {{ object.release_date }} по {{ object.expiration_date }}</td></tr> | |
<tr><td>Отпечаток: </td><td>{{ object.imprint }}</td></tr> | |
</tbody> | |
</table> | |
</fieldset> | |
<fieldset> | |
<a class="warning" href="{% url 'crlcontrol:key-del' object.sn %}">✘ Удалить запись</a> | |
</fieldset> | |
{% endblock %} |
{% extends "base.html" %} | |
{% block content %} | |
<form action="" method="post">{% csrf_token %} | |
<fieldset> | |
<table id="cas_1"> | |
<tbody> | |
<tr><td id="left_k">Кому выдан:</td><td id="right">{{ form.issued_to }}</td></tr> | |
<tr><td id="left_k">Кем выдан:</td><td id="right">{{ form.issued_by }}</td></tr> | |
<tr><td id="left_k">Серийный номер:</td><td id="right">{{ form.sn }}</td></tr> | |
<tr><td id="left_k">Действует:</td><td id="right">c {{ form.release_date }} по {{ form.expiration_date }}</td></tr> | |
<tr><td id="left_k">Отпечаток:</td><td id="right">{{ form.imprint }}</td></tr> | |
</tbody> | |
</table> | |
</fieldset> | |
<fieldset> | |
<div> | |
<input type="submit" id="submit" value="✔ Сохранить"> | |
</div> | |
</fieldset> | |
</form> | |
{% endblock %} |
{% extends "base.html" %} | |
{% block content %} | |
<fieldset> | |
<legend> | |
Список ключей ЭП уполномоченных лиц УЦ | |
</legend> | |
<table> | |
<tr> | |
<th> | |
Серийный номер | |
</th> | |
<th> | |
Кому выдан | |
</th> | |
<th> | |
Дата окончания | |
</th> | |
</tr> | |
{% for key in object_list %} | |
<tr> | |
<td> | |
<a href="{% url 'crlcontrol:key-detail' key.sn %}">{{ key.sn }}</a> | |
</td> | |
<td> | |
{{ key.issued_to }} | |
</td> | |
<td> | |
{{ key.expiration_date }} | |
</td> | |
</tr> | |
{% empty %} | |
<tr> | |
<td> | |
Записей не найдено | |
</td> | |
</tr> | |
{% endfor %} | |
</table> | |
</fieldset> | |
<fieldset> | |
<a class="start" href="{% url 'crlcontrol:key-add' %}">✚ Новая запись</a> | |
</fieldset> | |
{% endblock %} |
{% extends "base.html" %} | |
{% block content %} | |
<fieldset> | |
<legend>Новая запись</legend> | |
<div>Новый Удостоверящий Центр добавлен</div> | |
<table> | |
<tbody> | |
<tr><td><a href="{% url 'crlcontrol:index' %}">Все УЦ</a></td></tr> | |
</tbody> | |
</table> | |
</fieldset> | |
{% endblock %} |
{% extends "base.html" %} | |
{% block content %} | |
<fieldset> | |
<legend>Новая запись</legend> | |
<div>Новый ПАК добавлен</div> | |
<table> | |
<tbody> | |
<tr><td><a href="{% url 'crlcontrol:cas-list' %}">Все УЦ</a></td></tr> | |
</tbody> | |
</table> | |
</fieldset> | |
{% endblock %} |
{% extends "base.html" %} | |
{% block content %} | |
<fieldset> | |
<legend>Новая запись</legend> | |
<div>Новая CDP добавлена</div> | |
<table> | |
<tbody> | |
<tr><td><a href="{% url 'crlcontrol:cdp-list' %}">Все CDP</a></td></tr> | |
</tbody> | |
</table> | |
</fieldset> | |
{% endblock %} |
{% extends "base.html" %} | |
{% block content %} | |
<fieldset> | |
<legend>Новая запись</legend> | |
<div>Новый ключ проверки ЭП добавлен</div> | |
<table> | |
<tbody> | |
<tr><td><a href="{% url 'crlcontrol:key-list' %}">Все УЦ</a></td></tr> | |
</tbody> | |
</table> | |
</fieldset> | |
{% endblock %} |
<!DOCTYPE html> | |
<html lang="ru" > | |
<head> | |
<meta charset="UTF-8"> | |
<title>CA Site</title> | |
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/normalize/5.0.0/normalize.min.css"> | |
<style> | |
/* NOTE: The styles were added inline because Prefixfree needs access to your styles and they must be inlined if they are on local disk! */ | |
@import url(https://fonts.googleapis.com/css?family=Open+Sans); | |
.btn { display: inline-block; *display: inline; *zoom: 1; padding: 4px 10px 4px; margin-bottom: 0; font-size: 13px; line-height: 18px; color: #333333; text-align: center;text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); vertical-align: middle; background-color: #f5f5f5; background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6); background-image: -ms-linear-gradient(top, #ffffff, #e6e6e6); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6)); background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6); background-image: -o-linear-gradient(top, #ffffff, #e6e6e6); background-image: linear-gradient(top, #ffffff, #e6e6e6); background-repeat: repeat-x; filter: progid:dximagetransform.microsoft.gradient(startColorstr=#ffffff, endColorstr=#e6e6e6, GradientType=0); border-color: #e6e6e6 #e6e6e6 #e6e6e6; border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); border: 1px solid #e6e6e6; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); cursor: pointer; *margin-left: .3em; } | |
.btn:hover, .btn:active, .btn.active, .btn.disabled, .btn[disabled] { background-color: #e6e6e6; } | |
.btn-large { padding: 9px 14px; font-size: 15px; line-height: normal; -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px; } | |
.btn:hover { color: #333333; text-decoration: none; background-color: #e6e6e6; background-position: 0 -15px; -webkit-transition: background-position 0.1s linear; -moz-transition: background-position 0.1s linear; -ms-transition: background-position 0.1s linear; -o-transition: background-position 0.1s linear; transition: background-position 0.1s linear; } | |
.btn-primary, .btn-primary:hover { text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); color: #ffffff; } | |
.btn-primary.active { color: rgba(255, 255, 255, 0.75); } | |
.btn-primary { background-color: #4a77d4; background-image: -moz-linear-gradient(top, #6eb6de, #4a77d4); background-image: -ms-linear-gradient(top, #6eb6de, #4a77d4); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#6eb6de), to(#4a77d4)); background-image: -webkit-linear-gradient(top, #6eb6de, #4a77d4); background-image: -o-linear-gradient(top, #6eb6de, #4a77d4); background-image: linear-gradient(top, #6eb6de, #4a77d4); background-repeat: repeat-x; filter: progid:dximagetransform.microsoft.gradient(startColorstr=#6eb6de, endColorstr=#4a77d4, GradientType=0); border: 1px solid #3762bc; text-shadow: 1px 1px 1px rgba(0,0,0,0.4); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.5); } | |
.btn-primary:hover, .btn-primary:active, .btn-primary.active, .btn-primary.disabled, .btn-primary[disabled] { filter: none; background-color: #4a77d4; } | |
.btn-block { width: 100%; display:block; } | |
* { -webkit-box-sizing:border-box; -moz-box-sizing:border-box; -ms-box-sizing:border-box; -o-box-sizing:border-box; box-sizing:border-box; } | |
html { width: 100%; height:100%; overflow:hidden; } | |
body { | |
width: 100%; | |
height:100%; | |
font-family: 'Open Sans', sans-serif; | |
background: #092756; | |
background: -moz-radial-gradient(0% 100%, ellipse cover, rgba(104,128,138,.4) 10%,rgba(138,114,76,0) 40%),-moz-linear-gradient(top, rgba(57,173,219,.25) 0%, rgba(42,60,87,.4) 100%), -moz-linear-gradient(-45deg, #670d10 0%, #092756 100%); | |
background: -webkit-radial-gradient(0% 100%, ellipse cover, rgba(104,128,138,.4) 10%,rgba(138,114,76,0) 40%), -webkit-linear-gradient(top, rgba(57,173,219,.25) 0%,rgba(42,60,87,.4) 100%), -webkit-linear-gradient(-45deg, #670d10 0%,#092756 100%); | |
background: -o-radial-gradient(0% 100%, ellipse cover, rgba(104,128,138,.4) 10%,rgba(138,114,76,0) 40%), -o-linear-gradient(top, rgba(57,173,219,.25) 0%,rgba(42,60,87,.4) 100%), -o-linear-gradient(-45deg, #670d10 0%,#092756 100%); | |
background: -ms-radial-gradient(0% 100%, ellipse cover, rgba(104,128,138,.4) 10%,rgba(138,114,76,0) 40%), -ms-linear-gradient(top, rgba(57,173,219,.25) 0%,rgba(42,60,87,.4) 100%), -ms-linear-gradient(-45deg, #670d10 0%,#092756 100%); | |
background: -webkit-radial-gradient(0% 100%, ellipse cover, rgba(104,128,138,.4) 10%,rgba(138,114,76,0) 40%), linear-gradient(to bottom, rgba(57,173,219,.25) 0%,rgba(42,60,87,.4) 100%), linear-gradient(135deg, #670d10 0%,#092756 100%); | |
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#3E1D6D', endColorstr='#092756',GradientType=1 ); | |
} | |
.login { | |
position: absolute; | |
top: 50%; | |
left: 50%; | |
margin: -150px 0 0 -150px; | |
width:300px; | |
height:300px; | |
} | |
.login h1 { color: #fff; text-shadow: 0 0 10px rgba(0,0,0,0.3); letter-spacing:1px; text-align:center; } | |
input { | |
width: 100%; | |
margin-bottom: 10px; | |
background: rgba(0,0,0,0.3); | |
border: none; | |
outline: none; | |
padding: 10px; | |
font-size: 13px; | |
color: #fff; | |
text-shadow: 1px 1px 1px rgba(0,0,0,0.3); | |
border: 1px solid rgba(0,0,0,0.3); | |
border-radius: 4px; | |
box-shadow: inset 0 -5px 45px rgba(100,100,100,0.2), 0 1px 1px rgba(255,255,255,0.2); | |
-webkit-transition: box-shadow .5s ease; | |
-moz-transition: box-shadow .5s ease; | |
-o-transition: box-shadow .5s ease; | |
-ms-transition: box-shadow .5s ease; | |
transition: box-shadow .5s ease; | |
} | |
input:focus { box-shadow: inset 0 -5px 45px rgba(100,100,100,0.4), 0 1px 1px rgba(255,255,255,0.2); } | |
</style> | |
<script src="https://cdnjs.cloudflare.com/ajax/libs/prefixfree/1.0.7/prefixfree.min.js"></script> | |
</head> | |
<body> | |
<div class="login"> | |
<h1>ॐ</h1> | |
<form method="post" action="{% url 'django.contrib.auth.views.login' %}"> | |
{% csrf_token %} | |
<input type="text" name="username" placeholder="Имя пользователя" required="required" /> | |
<input type="password" name="password" placeholder="Пароль" required="required" /> | |
<button type="submit" class="btn btn-primary btn-block btn-large">Авторизоваться</button> | |
<input type="hidden" name="next" value="{{ next }}" /> | |
</form> | |
</div> | |
</body> | |
</html> |
<!DOCTYPE html> | |
<html lang="ru"> | |
<head> | |
{% load staticfiles %} | |
<link rel="stylesheet" type="text/css" href="{% static 'crlcontrol/style.css' %}" /> | |
<title>{% block title %}CRLCONTROL by OMRA{% endblock %}</title> | |
</head> | |
<body> | |
<div id="centerLayer"> | |
{% if form.errors %} | |
<fieldset> | |
Имя пользователя и пароль не распознаны. Попробуйте еще раз. | |
</fieldset> | |
{% endif %} | |
{% if next %} | |
{% if user.is_authenticated %} | |
<fieldset> | |
У ваша учётной записи нет доступа к этой странице. Что бы продолжить войдите под другой учёткой. | |
</fieldset> | |
{% else %} | |
<fieldset> | |
Войдите в учётку для просмотра этой страницы. | |
</fieldset> | |
{% endif %} | |
{% endif %} | |
<form action="{% url 'django.contrib.auth.views.login' %}" method="post"> | |
{% csrf_token %} | |
<fieldset id="reg"> | |
<table class="reg"> | |
<tbody> | |
<tr> | |
<td> | |
{{ form.username.label_tag }} | |
</td> | |
<td> | |
{{ form.username }} | |
</td> | |
</tr> | |
<tr> | |
<td> | |
{{ form.password.label_tag }} | |
</td> | |
<td> | |
{{ form.password }} | |
</td> | |
</tr> | |
<tr> | |
<td> | |
<a href="{% url 'password-reset' %}">Забыли пароль?</a> | |
</td> | |
<td> | |
<input id="submit" type="submit" value="✔ Войти" /> | |
<input type="hidden" name="next" value="{{ next }}" /> | |
</td> | |
</tr> | |
</tbody> | |
</table> | |
< | |
</fieldset> | |
</form> | |
</div> | |
</body> | |
</html> |
from django.test import TestCase | |
# Create your tests here. |
from django.conf.urls import url | |
from . import views | |
app_name = 'crlcontrol' | |
urlpatterns = [ | |
url(r'^$', views.IndexView.as_view(), name='index'), | |
url(r'^(?P<pk>[0-9]+)/$', views.DetailCaView.as_view(), name='detail'), | |
url(r'^(?P<pk>[0-9]+)/del/$', views.CaDel.as_view(), name='ca-del'), | |
url(r'^add/$', views.CaAdd.as_view(), name='ca-add'), | |
url(r'^add/cas/$', views.CasAdd.as_view(), name='cas-add'), | |
url(r'^add/cas/new/$', views.NewCasView.as_view(), name='cas-new'), | |
url(r'^add/key/$', views.KeyAdd.as_view(), name='key-add'), | |
url(r'^add/key/new/$', views.NewKeyView.as_view(), name='key-new'), | |
url(r'^add/cdp/$', views.CdpAdd.as_view(), name='cdp-add'), | |
url(r'^add/cdp/new/$', views.NewCdpView.as_view(), name='cdp-new'), | |
url(r'^cas/$', views.CasList.as_view(), name='cas-list'), | |
url(r'^cas/(?P<pk>[0-9A-Za-z]+)/$', views.CasDetail.as_view(), name='cas-detail'), | |
url(r'^cas/(?P<pk>[0-9A-Za-z]+)/del/$', views.CasDel.as_view(), name='cas-del'), | |
url(r'^key/$', views.KeyList.as_view(),name='key-list'), | |
url(r'^key/(?P<pk>[0-9A-Za-z]+)/$', views.KeyDetail.as_view(), name='key-detail'), | |
url(r'^key/(?P<pk>[0-9A-Za-z]+)/del/$', views.KeyDel.as_view(), name='key-del'), | |
url(r'^add/new/$', views.NewCaView.as_view(), name='ca-new'), | |
url(r'^cdp/$', views.CdpList.as_view(), name='cdp-list'), | |
url(r'^cdp/(?P<pk>[0-9A-Za-z]+)/$', views.CdpDetail.as_view(), name='cdp-detail'), | |
url(r'^cdp/(?P<pk>[0-9A-Za-z]+)/del/$', views.CdpDel.as_view(), name='cdp-del'), | |
url(r'^user/(?P<pk>[0-9]+)/$', views.UserView.as_view(), name='user') | |
] |
from django.contrib.auth.decorators import login_required | |
from django.contrib.auth.mixins import AccessMixin, LoginRequiredMixin | |
from django.contrib.auth.models import User | |
from django.core.urlresolvers import reverse_lazy | |
from django.http import HttpResponse, HttpResponseRedirect | |
from django.shortcuts import render | |
from django.utils import timezone | |
from django.views.generic import ListView, DetailView, CreateView, DeleteView | |
from django.views.generic.base import View, TemplateView | |
from .models import * | |
from .forms import * | |
class IndexView(LoginRequiredMixin, ListView): | |
model = Certification_Authority | |
template_name = 'crlcontrol/index.html' | |
def get_context_data(self, **kwargs): | |
context = super(IndexView, self).get_context_data(**kwargs) | |
context['now'] = timezone.now() | |
return context | |
class DetailCaView(LoginRequiredMixin, DetailView): | |
model = Certification_Authority | |
template_name = 'crlcontrol/detail.html' | |
def get_context_data(self, **kwargs): | |
context = super(DetailCaView, self).get_context_data(**kwargs) | |
context['now'] = timezone.now() | |
return context | |
class CaAdd(LoginRequiredMixin, CreateView): | |
model = Certification_Authority | |
pack = Certification_Authority_System | |
fields = '__all__' | |
form_class = CaForm | |
template_name = 'crlcontrol/certification_authority_form.html' | |
initial = {'key': 'value'} | |
def post(self, request, *args, **kwargs): | |
form = self.form_class(request.POST) | |
data = request.POST | |
if self.form_valid: | |
new_ca = self.model.objects.create(name=data['name'], | |
organization_name=data['organization_name'], | |
INN=data['INN'], | |
OGRN=data['OGRN'], | |
email=data['email'], | |
web=data['web'], | |
address=data['address'], | |
city=data['city'], | |
country=data['country'], | |
status=data['status'], | |
) | |
pack = data.getlist('pack') | |
new_ca.pack.set(pack) | |
return HttpResponseRedirect('new/') | |
else: | |
print(request.POST) | |
return render(request, self.template_name, {'form': form}) | |
def get(self, request, *arg, **kwargs): | |
form = self.form_class(initial=self.initial) | |
return render(request, self.template_name, {'form': form}) | |
class CasAdd(LoginRequiredMixin, CreateView): | |
model = Certification_Authority_System | |
fields = '__all__' | |
form_class = CasForm | |
template_name = 'crlcontrol/certification_authority_system_form.html' | |
initial = {'key': 'value'} | |
def post(self, request, *args, **kwargs): | |
form = self.form_class(request.POST) | |
data = request.POST | |
if self.form_valid: | |
new_cas = self.model.objects.create(id=data['id'], | |
pack_name=data['pack_name'], | |
class_es=data['class_es'], | |
vendor=data['vendor'], | |
address_pack=data['address_pack'], | |
) | |
key = data.getlist('key') | |
new_cas.key.set(key) | |
cdp = data.getlist('cdp') | |
new_cas.cdp.set(cdp) | |
return HttpResponseRedirect('new/') | |
else: | |
print(request.POST) | |
return render(request, self.template_name, {'form': form}) | |
def get(self, request, *arg, **kwargs): | |
form = self.form_class(initial=self.initial) | |
return render(request, self.template_name, {'form': form}) | |
class NewCasView(LoginRequiredMixin, TemplateView): | |
template_name = "crlcontrol/newcas.html" | |
def get_context_data(self, **kwargs): | |
context = super(NewCasView, self).get_context_data(**kwargs) | |
return context | |
class NewCaView(LoginRequiredMixin, TemplateView): | |
template_name = "crlcontrol/newca.html" | |
def get_context_data(self, **kwargs): | |
context = super(NewCaView, self).get_context_data(**kwargs) | |
return context | |
class NewKeyView(LoginRequiredMixin, TemplateView): | |
template_name = "crlcontrol/newkey.html" | |
def get_context_data(self, **kwargs): | |
context = super(NewKeyView, self).get_context_data(**kwargs) | |
return context | |
class NewCdpView(LoginRequiredMixin, TemplateView): | |
template_name = "crlcontrol/newcdp.html" | |
def get_context_data(self, **kwargs): | |
context = super(NewCdpView, self).get_context_data(**kwargs) | |
return context | |
class KeyAdd(LoginRequiredMixin, CreateView): | |
model = Keys_for_checking | |
fields = '__all__' | |
form_class = KeyForm | |
template_name = 'crlcontrol/keys_for_checking_form.html' | |
initial = {'key': 'value'} | |
def post(self, request, *args, **kwargs): | |
form = self.form_class(request.POST) | |
data = request.POST.copy() | |
if self.form_valid: | |
release_data = data.pop('release_date') | |
release_data_year = release_data[2] | |
if len(release_data[1]) == 1: release_data_month = '0'+release_data[1] | |
elif len(release_data[1]) == 2: release_data_month = release_data[1] | |
if len(release_data[0]) == 1: release_data_day = '0'+release_data[0] | |
elif len(release_data[0]) == 2: release_data_day = release_data[0] | |
release_data_format = release_data_year + '-' + release_data_month + '-' +release_data_day | |
expiration_date = data.pop('expiration_date') | |
expiration_date_year = expiration_date[2] | |
if len(expiration_date[1]) == 1: expiration_date_month = '0' + expiration_date[1] | |
elif len(expiration_date[1]) == 2: expiration_date_month = expiration_date[1] | |
if len(expiration_date[0]) == 1: expiration_date_day = '0' + expiration_date[0] | |
elif len(expiration_date[0]) == 2: expiration_date_day = expiration_date[0] | |
expiration_date_format = expiration_date_year + '-' + expiration_date_month + '-' + expiration_date_day | |
new_key = self.model.objects.create(issued_to=data['issued_to'], | |
issued_by=data['issued_by'], | |
sn=data['sn'], | |
release_date=release_data_format, | |
expiration_date=expiration_date_format, | |
imprint=data['imprint']) | |
return HttpResponseRedirect('new/') | |
else: | |
print(request.POST) | |
return render(request, self.template_name, {'form': form}) | |
def get(self, request, *arg, **kwargs): | |
form = self.form_class(initial=self.initial) | |
return render(request, self.template_name, {'form': form}) | |
class CdpAdd(LoginRequiredMixin, CreateView): | |
model = Cdp | |
fields = '__all__' | |
form_class = CdpForm | |
template_name = 'crlcontrol/cdp_form.html' | |
initial = {'key': 'value'} | |
def post(self, request, *args, **kwargs): | |
form = self.form_class(request.POST) | |
data = request.POST | |
if self.form_valid: | |
new_cdp = self.model.objects.create(url=data['url']) | |
return HttpResponseRedirect('new/') | |
else: | |
print(request.POST) | |
return render(request, self.template_name, {'form': form}) | |
def get(self, request, *arg, **kwargs): | |
form = self.form_class(initial=self.initial) | |
return render(request, self.template_name, {'form': form}) | |
class CaDel(LoginRequiredMixin, DeleteView): | |
model = Certification_Authority | |
success_url = reverse_lazy('crlcontrol:index') | |
class CasDel(LoginRequiredMixin, DeleteView): | |
model = Certification_Authority_System | |
success_url = reverse_lazy('crlcontrol:cas-list') | |
class CdpDel(LoginRequiredMixin, DeleteView): | |
model = Cdp | |
success_url = reverse_lazy('crlcontrol:cdp-list') | |
class KeyDel(LoginRequiredMixin, DeleteView): | |
model = Keys_for_checking | |
success_url = reverse_lazy('crlcontrol:key-list') | |
class CasList(LoginRequiredMixin, ListView): | |
model = Certification_Authority_System | |
def get_context_data(self, **kwargs): | |
context = super(CasList, self).get_context_data(**kwargs) | |
context['now'] = timezone.now() | |
return context | |
class CasDetail(LoginRequiredMixin, DetailView): | |
model = Certification_Authority_System | |
template_name = 'crlcontrol/casdetail.html' | |
def get_context_data(self, **kwargs): | |
context = super(CasDetail, self).get_context_data(**kwargs) | |
context['now'] = timezone.now() | |
return context | |
class KeyList(LoginRequiredMixin, ListView): | |
model = Keys_for_checking | |
def get_context_data(self, **kwargs): | |
context = super(KeyList, self).get_context_data(**kwargs) | |
context['now'] = timezone.now() | |
return context | |
class KeyDetail(LoginRequiredMixin, DetailView): | |
model = Keys_for_checking | |
def get_context_data(self, **kwargs): | |
context = super(KeyDetail, self).get_context_data(**kwargs) | |
context['now'] = timezone.now() | |
return context | |
class CdpList(LoginRequiredMixin, ListView): | |
model = Cdp | |
def get_context_data(self, **kwargs): | |
context = super(CdpList, self).get_context_data(**kwargs) | |
context['now'] = timezone.now() | |
return context | |
class CdpDetail(LoginRequiredMixin, DetailView): | |
model = Cdp | |
def get_context_data(self, **kwargs): | |
context = super(CdpDetail, self).get_context_data(**kwargs) | |
context['now'] = timezone.now() | |
return context | |
class UserView(LoginRequiredMixin, DetailView): | |
model = User |
#!/usr/bin/env python | |
import os | |
import sys | |
if __name__ == "__main__": | |
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "casite.settings") | |
from django.core.management import execute_from_command_line | |
execute_from_command_line(sys.argv) |
# This file must be used with "source bin/activate" *from bash* | |
# you cannot run it directly | |
deactivate () { | |
unset -f pydoc >/dev/null 2>&1 | |
# reset old environment variables | |
# ! [ -z ${VAR+_} ] returns true if VAR is declared at all | |
if ! [ -z "${_OLD_VIRTUAL_PATH+_}" ] ; then | |
PATH="$_OLD_VIRTUAL_PATH" | |
export PATH | |
unset _OLD_VIRTUAL_PATH | |
fi | |
if ! [ -z "${_OLD_VIRTUAL_PYTHONHOME+_}" ] ; then | |
PYTHONHOME="$_OLD_VIRTUAL_PYTHONHOME" | |
export PYTHONHOME | |
unset _OLD_VIRTUAL_PYTHONHOME | |
fi | |
# This should detect bash and zsh, which have a hash command that must | |
# be called to get it to forget past commands. Without forgetting | |
# past commands the $PATH changes we made may not be respected | |
if [ -n "${BASH-}" ] || [ -n "${ZSH_VERSION-}" ] ; then | |
hash -r 2>/dev/null | |
fi | |
if ! [ -z "${_OLD_VIRTUAL_PS1+_}" ] ; then | |
PS1="$_OLD_VIRTUAL_PS1" | |
export PS1 | |
unset _OLD_VIRTUAL_PS1 | |
fi | |
unset VIRTUAL_ENV | |
if [ ! "${1-}" = "nondestructive" ] ; then | |
# Self destruct! | |
unset -f deactivate | |
fi | |
} | |
# unset irrelevant variables | |
deactivate nondestructive | |
VIRTUAL_ENV="/home/dev/PycharmProjects/ca/venv" | |
export VIRTUAL_ENV | |
_OLD_VIRTUAL_PATH="$PATH" | |
PATH="$VIRTUAL_ENV/bin:$PATH" | |
export PATH | |
# unset PYTHONHOME if set | |
if ! [ -z "${PYTHONHOME+_}" ] ; then | |
_OLD_VIRTUAL_PYTHONHOME="$PYTHONHOME" | |
unset PYTHONHOME | |
fi | |
if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT-}" ] ; then | |
_OLD_VIRTUAL_PS1="$PS1" | |
if [ "x" != x ] ; then | |
PS1="$PS1" | |
else | |
PS1="(`basename \"$VIRTUAL_ENV\"`) $PS1" | |
fi | |
export PS1 | |
fi | |
# Make sure to unalias pydoc if it's already there | |
alias pydoc 2>/dev/null >/dev/null && unalias pydoc | |
pydoc () { | |
python -m pydoc "$@" | |
} | |
# This should detect bash and zsh, which have a hash command that must | |
# be called to get it to forget past commands. Without forgetting | |
# past commands the $PATH changes we made may not be respected | |
if [ -n "${BASH-}" ] || [ -n "${ZSH_VERSION-}" ] ; then | |
hash -r 2>/dev/null | |
fi |
# This file must be used with "source bin/activate.csh" *from csh*. | |
# You cannot run it directly. | |
# Created by Davide Di Blasi <[email protected]>. | |
alias deactivate 'test $?_OLD_VIRTUAL_PATH != 0 && setenv PATH "$_OLD_VIRTUAL_PATH" && unset _OLD_VIRTUAL_PATH; rehash; test $?_OLD_VIRTUAL_PROMPT != 0 && set prompt="$_OLD_VIRTUAL_PROMPT" && unset _OLD_VIRTUAL_PROMPT; unsetenv VIRTUAL_ENV; test "\!:*" != "nondestructive" && unalias deactivate && unalias pydoc' | |
# Unset irrelevant variables. | |
deactivate nondestructive | |
setenv VIRTUAL_ENV "/home/dev/PycharmProjects/ca/venv" | |
set _OLD_VIRTUAL_PATH="$PATH" | |
setenv PATH "$VIRTUAL_ENV/bin:$PATH" | |
if ("" != "") then | |
set env_name = "" | |
else | |
set env_name = `basename "$VIRTUAL_ENV"` | |
endif | |
# Could be in a non-interactive environment, | |
# in which case, $prompt is undefined and we wouldn't | |
# care about the prompt anyway. | |
if ( $?prompt ) then | |
set _OLD_VIRTUAL_PROMPT="$prompt" | |
set prompt = "[$env_name] $prompt" | |
endif | |
unset env_name | |
alias pydoc python -m pydoc | |
rehash | |
# This file must be used using `. bin/activate.fish` *within a running fish ( http://fishshell.com ) session*. | |
# Do not run it directly. | |
function deactivate -d 'Exit virtualenv mode and return to the normal environment.' | |
# reset old environment variables | |
if test -n "$_OLD_VIRTUAL_PATH" | |
set -gx PATH $_OLD_VIRTUAL_PATH | |
set -e _OLD_VIRTUAL_PATH | |
end | |
if test -n "$_OLD_VIRTUAL_PYTHONHOME" | |
set -gx PYTHONHOME $_OLD_VIRTUAL_PYTHONHOME | |
set -e _OLD_VIRTUAL_PYTHONHOME | |
end | |
if test -n "$_OLD_FISH_PROMPT_OVERRIDE" | |
# Set an empty local `$fish_function_path` to allow the removal of `fish_prompt` using `functions -e`. | |
set -l fish_function_path | |
# Erase virtualenv's `fish_prompt` and restore the original. | |
functions -e fish_prompt | |
functions -c _old_fish_prompt fish_prompt | |
functions -e _old_fish_prompt | |
set -e _OLD_FISH_PROMPT_OVERRIDE | |
end | |
set -e VIRTUAL_ENV | |
if test "$argv[1]" != 'nondestructive' | |
# Self-destruct! | |
functions -e pydoc | |
functions -e deactivate | |
end | |
end | |
# Unset irrelevant variables. | |
deactivate nondestructive | |
set -gx VIRTUAL_ENV "/home/dev/PycharmProjects/ca/venv" | |
set -gx _OLD_VIRTUAL_PATH $PATH | |
set -gx PATH "$VIRTUAL_ENV/bin" $PATH | |
# Unset `$PYTHONHOME` if set. | |
if set -q PYTHONHOME | |
set -gx _OLD_VIRTUAL_PYTHONHOME $PYTHONHOME | |
set -e PYTHONHOME | |
end | |
function pydoc | |
python -m pydoc $argv | |
end | |
if test -z "$VIRTUAL_ENV_DISABLE_PROMPT" | |
# Copy the current `fish_prompt` function as `_old_fish_prompt`. | |
functions -c fish_prompt _old_fish_prompt | |
function fish_prompt | |
# Save the current $status, for fish_prompts that display it. | |
set -l old_status $status | |
# Prompt override provided? | |
# If not, just prepend the environment name. | |
if test -n "" | |
printf '%s%s' "" (set_color normal) | |
else | |
printf '%s(%s) ' (set_color normal) (basename "$VIRTUAL_ENV") | |
end | |
# Restore the original $status | |
echo "exit $old_status" | source | |
_old_fish_prompt | |
end | |
set -gx _OLD_FISH_PROMPT_OVERRIDE "$VIRTUAL_ENV" | |
end |
"""By using execfile(this_file, dict(__file__=this_file)) you will | |
activate this virtualenv environment. | |
This can be used when you must use an existing Python interpreter, not | |
the virtualenv bin/python | |
""" | |
try: | |
__file__ | |
except NameError: | |
raise AssertionError( | |
"You must run this like execfile('path/to/activate_this.py', dict(__file__='path/to/activate_this.py'))") | |
import sys | |
import os | |
old_os_path = os.environ.get('PATH', '') | |
os.environ['PATH'] = os.path.dirname(os.path.abspath(__file__)) + os.pathsep + old_os_path | |
base = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) | |
if sys.platform == 'win32': | |
site_packages = os.path.join(base, 'Lib', 'site-packages') | |
else: | |
site_packages = os.path.join(base, 'lib', 'python%s' % sys.version[:3], 'site-packages') | |
prev_sys_path = list(sys.path) | |
import site | |
site.addsitedir(site_packages) | |
sys.real_prefix = sys.prefix | |
sys.prefix = base | |
# Move the added items to the front of the path: | |
new_sys_path = [] | |
for item in list(sys.path): | |
if item not in prev_sys_path: | |
new_sys_path.append(item) | |
sys.path.remove(item) | |
sys.path[:0] = new_sys_path |
#!/home/dev/PycharmProjects/ca/venv/bin/python | |
# -*- coding: utf-8 -*- | |
import re | |
import sys | |
from django.core.management import execute_from_command_line | |
if __name__ == '__main__': | |
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) | |
sys.exit(execute_from_command_line()) |
#!/home/dev/PycharmProjects/ca/venv/bin/python | |
from django.core import management | |
if __name__ == "__main__": | |
management.execute_from_command_line() |
#!/home/dev/PycharmProjects/ca/venv/bin/python3.5 | |
# -*- coding: utf-8 -*- | |
import re | |
import sys | |
from setuptools.command.easy_install import main | |
if __name__ == '__main__': | |
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) | |
sys.exit(main()) |
#!/home/dev/PycharmProjects/ca/venv/bin/python3.5 | |
# -*- coding: utf-8 -*- | |
import re | |
import sys | |
from setuptools.command.easy_install import main | |
if __name__ == '__main__': | |
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) | |
sys.exit(main()) |
#!/home/dev/PycharmProjects/ca/venv/bin/python3.5 | |
# -*- coding: utf-8 -*- | |
import re | |
import sys | |
from pip import main | |
if __name__ == '__main__': | |
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) | |
sys.exit(main()) |
#!/home/dev/PycharmProjects/ca/venv/bin/python3.5 | |
# -*- coding: utf-8 -*- | |
import re | |
import sys | |
from pip import main | |
if __name__ == '__main__': | |
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) | |
sys.exit(main()) |
#!/home/dev/PycharmProjects/ca/venv/bin/python3.5 | |
# -*- coding: utf-8 -*- | |
import re | |
import sys | |
from pip import main | |
if __name__ == '__main__': | |
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) | |
sys.exit(main()) |
#!/home/dev/PycharmProjects/ca/venv/bin/python | |
import sys | |
import getopt | |
import sysconfig | |
valid_opts = ['prefix', 'exec-prefix', 'includes', 'libs', 'cflags', | |
'ldflags', 'help'] | |
if sys.version_info >= (3, 2): | |
valid_opts.insert(-1, 'extension-suffix') | |
valid_opts.append('abiflags') | |
if sys.version_info >= (3, 3): | |
valid_opts.append('configdir') | |
def exit_with_usage(code=1): | |
sys.stderr.write("Usage: {0} [{1}]\n".format( | |
sys.argv[0], '|'.join('--'+opt for opt in valid_opts))) | |
sys.exit(code) | |
try: | |
opts, args = getopt.getopt(sys.argv[1:], '', valid_opts) | |
except getopt.error: | |
exit_with_usage() | |
if not opts: | |
exit_with_usage() | |
pyver = sysconfig.get_config_var('VERSION') | |
getvar = sysconfig.get_config_var | |
opt_flags = [flag for (flag, val) in opts] | |
if '--help' in opt_flags: | |
exit_with_usage(code=0) | |
for opt in opt_flags: | |
if opt == '--prefix': | |
print(sysconfig.get_config_var('prefix')) | |
elif opt == '--exec-prefix': | |
print(sysconfig.get_config_var('exec_prefix')) | |
elif opt in ('--includes', '--cflags'): | |
flags = ['-I' + sysconfig.get_path('include'), | |
'-I' + sysconfig.get_path('platinclude')] | |
if opt == '--cflags': | |
flags.extend(getvar('CFLAGS').split()) | |
print(' '.join(flags)) | |
elif opt in ('--libs', '--ldflags'): | |
abiflags = getattr(sys, 'abiflags', '') | |
libs = ['-lpython' + pyver + abiflags] | |
libs += getvar('LIBS').split() | |
libs += getvar('SYSLIBS').split() | |
# add the prefix/lib/pythonX.Y/config dir, but only if there is no | |
# shared library in prefix/lib/. | |
if opt == '--ldflags': | |
if not getvar('Py_ENABLE_SHARED'): | |
libs.insert(0, '-L' + getvar('LIBPL')) | |
if not getvar('PYTHONFRAMEWORK'): | |
libs.extend(getvar('LINKFORSHARED').split()) | |
print(' '.join(libs)) | |
elif opt == '--extension-suffix': | |
ext_suffix = sysconfig.get_config_var('EXT_SUFFIX') | |
if ext_suffix is None: | |
ext_suffix = sysconfig.get_config_var('SO') | |
print(ext_suffix) | |
elif opt == '--abiflags': | |
if not getattr(sys, 'abiflags', None): | |
exit_with_usage() | |
print(sys.abiflags) | |
elif opt == '--configdir': | |
print(sysconfig.get_config_var('LIBPL')) |
#!/home/dev/PycharmProjects/ca/venv/bin/python3.5 | |
# -*- coding: utf-8 -*- | |
import re | |
import sys | |
from wheel.tool import main | |
if __name__ == '__main__': | |
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) | |
sys.exit(main()) |
/* | |
* The Python Imaging Library | |
* $Id$ | |
* | |
* declarations for the imaging core library | |
* | |
* Copyright (c) 1997-2005 by Secret Labs AB | |
* Copyright (c) 1995-2005 by Fredrik Lundh | |
* | |
* See the README file for information on usage and redistribution. | |
*/ | |
#include "ImPlatform.h" | |
#if defined(__cplusplus) | |
extern "C" { | |
#endif | |
#ifndef M_PI | |
#define M_PI 3.1415926535897932384626433832795 | |
#endif | |
/* -------------------------------------------------------------------- */ | |
/* | |
* Image data organization: | |
* | |
* mode bytes byte order | |
* ------------------------------- | |
* 1 1 1 | |
* L 1 L | |
* P 1 P | |
* I 4 I (32-bit integer, native byte order) | |
* F 4 F (32-bit IEEE float, native byte order) | |
* RGB 4 R, G, B, - | |
* RGBA 4 R, G, B, A | |
* CMYK 4 C, M, Y, K | |
* YCbCr 4 Y, Cb, Cr, - | |
* Lab 4 L, a, b, - | |
* | |
* experimental modes (incomplete): | |
* LA 4 L, -, -, A | |
* PA 4 P, -, -, A | |
* I;16 2 I (16-bit integer, native byte order) | |
* | |
* "P" is an 8-bit palette mode, which should be mapped through the | |
* palette member to get an output image. Check palette->mode to | |
* find the corresponding "real" mode. | |
* | |
* For information on how to access Imaging objects from your own C | |
* extensions, see http://www.effbot.org/zone/pil-extending.htm | |
*/ | |
/* Handles */ | |
typedef struct ImagingMemoryInstance* Imaging; | |
typedef struct ImagingAccessInstance* ImagingAccess; | |
typedef struct ImagingHistogramInstance* ImagingHistogram; | |
typedef struct ImagingOutlineInstance* ImagingOutline; | |
typedef struct ImagingPaletteInstance* ImagingPalette; | |
/* handle magics (used with PyCObject). */ | |
#define IMAGING_MAGIC "PIL Imaging" | |
/* pixel types */ | |
#define IMAGING_TYPE_UINT8 0 | |
#define IMAGING_TYPE_INT32 1 | |
#define IMAGING_TYPE_FLOAT32 2 | |
#define IMAGING_TYPE_SPECIAL 3 /* check mode for details */ | |
#define IMAGING_MODE_LENGTH 6+1 /* Band names ("1", "L", "P", "RGB", "RGBA", "CMYK", "YCbCr", "BGR;xy") */ | |
struct ImagingMemoryInstance { | |
/* Format */ | |
char mode[IMAGING_MODE_LENGTH]; /* Band names ("1", "L", "P", "RGB", "RGBA", "CMYK", "YCbCr", "BGR;xy") */ | |
int type; /* Data type (IMAGING_TYPE_*) */ | |
int depth; /* Depth (ignored in this version) */ | |
int bands; /* Number of bands (1, 2, 3, or 4) */ | |
int xsize; /* Image dimension. */ | |
int ysize; | |
/* Colour palette (for "P" images only) */ | |
ImagingPalette palette; | |
/* Data pointers */ | |
UINT8 **image8; /* Set for 8-bit images (pixelsize=1). */ | |
INT32 **image32; /* Set for 32-bit images (pixelsize=4). */ | |
/* Internals */ | |
char **image; /* Actual raster data. */ | |
char *block; /* Set if data is allocated in a single block. */ | |
int pixelsize; /* Size of a pixel, in bytes (1, 2 or 4) */ | |
int linesize; /* Size of a line, in bytes (xsize * pixelsize) */ | |
/* Virtual methods */ | |
void (*destroy)(Imaging im); | |
}; | |
#define IMAGING_PIXEL_1(im,x,y) ((im)->image8[(y)][(x)]) | |
#define IMAGING_PIXEL_L(im,x,y) ((im)->image8[(y)][(x)]) | |
#define IMAGING_PIXEL_LA(im,x,y) ((im)->image[(y)][(x)*4]) | |
#define IMAGING_PIXEL_P(im,x,y) ((im)->image8[(y)][(x)]) | |
#define IMAGING_PIXEL_PA(im,x,y) ((im)->image[(y)][(x)*4]) | |
#define IMAGING_PIXEL_I(im,x,y) ((im)->image32[(y)][(x)]) | |
#define IMAGING_PIXEL_F(im,x,y) (((FLOAT32*)(im)->image32[y])[x]) | |
#define IMAGING_PIXEL_RGB(im,x,y) ((im)->image[(y)][(x)*4]) | |
#define IMAGING_PIXEL_RGBA(im,x,y) ((im)->image[(y)][(x)*4]) | |
#define IMAGING_PIXEL_CMYK(im,x,y) ((im)->image[(y)][(x)*4]) | |
#define IMAGING_PIXEL_YCbCr(im,x,y) ((im)->image[(y)][(x)*4]) | |
#define IMAGING_PIXEL_UINT8(im,x,y) ((im)->image8[(y)][(x)]) | |
#define IMAGING_PIXEL_INT32(im,x,y) ((im)->image32[(y)][(x)]) | |
#define IMAGING_PIXEL_FLOAT32(im,x,y) (((FLOAT32*)(im)->image32[y])[x]) | |
struct ImagingAccessInstance { | |
const char* mode; | |
void* (*line)(Imaging im, int x, int y); | |
void (*get_pixel)(Imaging im, int x, int y, void* pixel); | |
void (*put_pixel)(Imaging im, int x, int y, const void* pixel); | |
}; | |
struct ImagingHistogramInstance { | |
/* Format */ | |
char mode[IMAGING_MODE_LENGTH]; /* Band names (of corresponding source image) */ | |
int bands; /* Number of bands (1, 3, or 4) */ | |
/* Data */ | |
long *histogram; /* Histogram (bands*256 longs) */ | |
}; | |
struct ImagingPaletteInstance { | |
/* Format */ | |
char mode[IMAGING_MODE_LENGTH]; /* Band names */ | |
/* Data */ | |
UINT8 palette[1024];/* Palette data (same format as image data) */ | |
INT16* cache; /* Palette cache (used for predefined palettes) */ | |
int keep_cache; /* This palette will be reused; keep cache */ | |
}; | |
/* Objects */ | |
/* ------- */ | |
extern int ImagingNewCount; | |
extern Imaging ImagingNew(const char* mode, int xsize, int ysize); | |
extern Imaging ImagingNew2(const char* mode, Imaging imOut, Imaging imIn); | |
extern void ImagingDelete(Imaging im); | |
extern Imaging ImagingNewBlock(const char* mode, int xsize, int ysize); | |
extern Imaging ImagingNewArray(const char* mode, int xsize, int ysize); | |
extern Imaging ImagingNewMap(const char* filename, int readonly, | |
const char* mode, int xsize, int ysize); | |
extern Imaging ImagingNewPrologue(const char *mode, | |
unsigned xsize, unsigned ysize); | |
extern Imaging ImagingNewPrologueSubtype(const char *mode, | |
unsigned xsize, unsigned ysize, | |
int structure_size); | |
extern Imaging ImagingNewEpilogue(Imaging im); | |
extern void ImagingCopyInfo(Imaging destination, Imaging source); | |
extern void ImagingHistogramDelete(ImagingHistogram histogram); | |
extern void ImagingAccessInit(void); | |
extern ImagingAccess ImagingAccessNew(Imaging im); | |
extern void _ImagingAccessDelete(Imaging im, ImagingAccess access); | |
#define ImagingAccessDelete(im, access) /* nop, for now */ | |
/*#define ImagingAccessDelete(im, access) \ | |
((access)->dynamic ? _ImagingAccessDelete((im), (access)), 0 : 0)) */ | |
extern ImagingPalette ImagingPaletteNew(const char *mode); | |
extern ImagingPalette ImagingPaletteNewBrowser(void); | |
extern ImagingPalette ImagingPaletteDuplicate(ImagingPalette palette); | |
extern void ImagingPaletteDelete(ImagingPalette palette); | |
extern int ImagingPaletteCachePrepare(ImagingPalette palette); | |
extern void ImagingPaletteCacheUpdate(ImagingPalette palette, | |
int r, int g, int b); | |
extern void ImagingPaletteCacheDelete(ImagingPalette palette); | |
#define ImagingPaletteCache(p, r, g, b)\ | |
p->cache[(r>>2) + (g>>2)*64 + (b>>2)*64*64] | |
extern Imaging ImagingQuantize(Imaging im, int colours, int mode, int kmeans); | |
/* Threading */ | |
/* --------- */ | |
typedef void* ImagingSectionCookie; | |
extern void ImagingSectionEnter(ImagingSectionCookie* cookie); | |
extern void ImagingSectionLeave(ImagingSectionCookie* cookie); | |
/* Exceptions */ | |
/* ---------- */ | |
extern void* ImagingError_IOError(void); | |
extern void* ImagingError_MemoryError(void); | |
extern void* ImagingError_ModeError(void); /* maps to ValueError by default */ | |
extern void* ImagingError_Mismatch(void); /* maps to ValueError by default */ | |
extern void* ImagingError_ValueError(const char* message); | |
extern void ImagingError_Clear(void); | |
/* Transform callbacks */ | |
/* ------------------- */ | |
/* standard transforms */ | |
#define IMAGING_TRANSFORM_AFFINE 0 | |
#define IMAGING_TRANSFORM_PERSPECTIVE 2 | |
#define IMAGING_TRANSFORM_QUAD 3 | |
/* standard filters */ | |
#define IMAGING_TRANSFORM_NEAREST 0 | |
#define IMAGING_TRANSFORM_LANCZOS 1 | |
#define IMAGING_TRANSFORM_BILINEAR 2 | |
#define IMAGING_TRANSFORM_BICUBIC 3 | |
typedef int (*ImagingTransformMap)(double* X, double* Y, | |
int x, int y, void* data); | |
typedef int (*ImagingTransformFilter)(void* out, Imaging im, | |
double x, double y, | |
void* data); | |
/* Image Manipulation Methods */ | |
/* -------------------------- */ | |
extern Imaging ImagingAlphaComposite(Imaging imIn1, Imaging imIn2); | |
extern Imaging ImagingBlend(Imaging imIn1, Imaging imIn2, float alpha); | |
extern Imaging ImagingCopy(Imaging im); | |
extern Imaging ImagingConvert(Imaging im, const char* mode, ImagingPalette palette, int dither); | |
extern Imaging ImagingConvertInPlace(Imaging im, const char* mode); | |
extern Imaging ImagingConvertMatrix(Imaging im, const char *mode, float m[]); | |
extern Imaging ImagingConvertTransparent(Imaging im, const char *mode, int r, int g, int b); | |
extern Imaging ImagingCrop(Imaging im, int x0, int y0, int x1, int y1); | |
extern Imaging ImagingExpand(Imaging im, int x, int y, int mode); | |
extern Imaging ImagingFill(Imaging im, const void* ink); | |
extern int ImagingFill2( | |
Imaging into, const void* ink, Imaging mask, | |
int x0, int y0, int x1, int y1); | |
extern Imaging ImagingFillBand(Imaging im, int band, int color); | |
extern Imaging ImagingFillLinearGradient(const char* mode); | |
extern Imaging ImagingFillRadialGradient(const char* mode); | |
extern Imaging ImagingFilter( | |
Imaging im, int xsize, int ysize, const FLOAT32* kernel, | |
FLOAT32 offset, FLOAT32 divisor); | |
extern Imaging ImagingFlipLeftRight(Imaging imOut, Imaging imIn); | |
extern Imaging ImagingFlipTopBottom(Imaging imOut, Imaging imIn); | |
extern Imaging ImagingGaussianBlur(Imaging imOut, Imaging imIn, float radius, | |
int passes); | |
extern Imaging ImagingGetBand(Imaging im, int band); | |
extern int ImagingGetBBox(Imaging im, int bbox[4]); | |
typedef struct { int x, y; INT32 count; INT32 pixel; } ImagingColorItem; | |
extern ImagingColorItem* ImagingGetColors(Imaging im, int maxcolors, | |
int *colors); | |
extern int ImagingGetExtrema(Imaging im, void *extrema); | |
extern int ImagingGetProjection(Imaging im, UINT8* xproj, UINT8* yproj); | |
extern ImagingHistogram ImagingGetHistogram( | |
Imaging im, Imaging mask, void *extrema); | |
extern Imaging ImagingModeFilter(Imaging im, int size); | |
extern Imaging ImagingNegative(Imaging im); | |
extern Imaging ImagingOffset(Imaging im, int xoffset, int yoffset); | |
extern int ImagingPaste( | |
Imaging into, Imaging im, Imaging mask, | |
int x0, int y0, int x1, int y1); | |
extern Imaging ImagingPoint( | |
Imaging im, const char* tablemode, const void* table); | |
extern Imaging ImagingPointTransform( | |
Imaging imIn, double scale, double offset); | |
extern Imaging ImagingPutBand(Imaging im, Imaging imIn, int band); | |
extern Imaging ImagingRankFilter(Imaging im, int size, int rank); | |
extern Imaging ImagingRotate( | |
Imaging imOut, Imaging imIn, double theta, int filter); | |
extern Imaging ImagingRotate90(Imaging imOut, Imaging imIn); | |
extern Imaging ImagingRotate180(Imaging imOut, Imaging imIn); | |
extern Imaging ImagingRotate270(Imaging imOut, Imaging imIn); | |
extern Imaging ImagingResample(Imaging imIn, int xsize, int ysize, int filter); | |
extern Imaging ImagingTranspose(Imaging imOut, Imaging imIn); | |
extern Imaging ImagingTransposeToNew(Imaging imIn); | |
extern Imaging ImagingTransformPerspective( | |
Imaging imOut, Imaging imIn, int x0, int y0, int x1, int y1, | |
double a[8], int filter, int fill); | |
extern Imaging ImagingTransformAffine( | |
Imaging imOut, Imaging imIn, int x0, int y0, int x1, int y1, | |
double a[6], int filter, int fill); | |
extern Imaging ImagingTransformQuad( | |
Imaging imOut, Imaging imIn, int x0, int y0, int x1, int y1, | |
double a[8], int filter, int fill); | |
extern Imaging ImagingTransform( | |
Imaging imOut, Imaging imIn, int x0, int y0, int x1, int y1, | |
ImagingTransformMap transform, void* transform_data, | |
ImagingTransformFilter filter, void* filter_data, | |
int fill); | |
extern Imaging ImagingUnsharpMask( | |
Imaging imOut, Imaging im, float radius, int percent, int threshold); | |
extern Imaging ImagingBoxBlur(Imaging imOut, Imaging imIn, float radius, int n); | |
extern Imaging ImagingCopy2(Imaging imOut, Imaging imIn); | |
extern Imaging ImagingConvert2(Imaging imOut, Imaging imIn); | |
/* Channel operations */ | |
/* any mode, except "F" */ | |
extern Imaging ImagingChopLighter(Imaging imIn1, Imaging imIn2); | |
extern Imaging ImagingChopDarker(Imaging imIn1, Imaging imIn2); | |
extern Imaging ImagingChopDifference(Imaging imIn1, Imaging imIn2); | |
extern Imaging ImagingChopMultiply(Imaging imIn1, Imaging imIn2); | |
extern Imaging ImagingChopScreen(Imaging imIn1, Imaging imIn2); | |
extern Imaging ImagingChopAdd( | |
Imaging imIn1, Imaging imIn2, float scale, int offset); | |
extern Imaging ImagingChopSubtract( | |
Imaging imIn1, Imaging imIn2, float scale, int offset); | |
extern Imaging ImagingChopAddModulo(Imaging imIn1, Imaging imIn2); | |
extern Imaging ImagingChopSubtractModulo(Imaging imIn1, Imaging imIn2); | |
/* "1" images only */ | |
extern Imaging ImagingChopAnd(Imaging imIn1, Imaging imIn2); | |
extern Imaging ImagingChopOr(Imaging imIn1, Imaging imIn2); | |
extern Imaging ImagingChopXor(Imaging imIn1, Imaging imIn2); | |
/* Image measurement */ | |
extern void ImagingCrack(Imaging im, int x0, int y0); | |
/* Graphics */ | |
struct ImagingAffineMatrixInstance { | |
float a[9]; | |
}; | |
typedef struct ImagingAffineMatrixInstance *ImagingAffineMatrix; | |
extern int ImagingDrawArc(Imaging im, int x0, int y0, int x1, int y1, | |
float start, float end, const void* ink, int op); | |
extern int ImagingDrawBitmap(Imaging im, int x0, int y0, Imaging bitmap, | |
const void* ink, int op); | |
extern int ImagingDrawChord(Imaging im, int x0, int y0, int x1, int y1, | |
float start, float end, const void* ink, int fill, | |
int op); | |
extern int ImagingDrawEllipse(Imaging im, int x0, int y0, int x1, int y1, | |
const void* ink, int fill, int op); | |
extern int ImagingDrawLine(Imaging im, int x0, int y0, int x1, int y1, | |
const void* ink, int op); | |
extern int ImagingDrawWideLine(Imaging im, int x0, int y0, int x1, int y1, | |
const void* ink, int width, int op); | |
extern int ImagingDrawPieslice(Imaging im, int x0, int y0, int x1, int y1, | |
float start, float end, const void* ink, int fill, | |
int op); | |
extern int ImagingDrawPoint(Imaging im, int x, int y, const void* ink, int op); | |
extern int ImagingDrawPolygon(Imaging im, int points, int *xy, | |
const void* ink, int fill, int op); | |
extern int ImagingDrawRectangle(Imaging im, int x0, int y0, int x1, int y1, | |
const void* ink, int fill, int op); | |
/* Level 2 graphics (WORK IN PROGRESS) */ | |
extern ImagingOutline ImagingOutlineNew(void); | |
extern void ImagingOutlineDelete(ImagingOutline outline); | |
extern int ImagingDrawOutline(Imaging im, ImagingOutline outline, | |
const void* ink, int fill, int op); | |
extern int ImagingOutlineMove(ImagingOutline outline, float x, float y); | |
extern int ImagingOutlineLine(ImagingOutline outline, float x, float y); | |
extern int ImagingOutlineCurve(ImagingOutline outline, float x1, float y1, | |
float x2, float y2, float x3, float y3); | |
extern int ImagingOutlineTransform(ImagingOutline outline, double a[6]); | |
extern int ImagingOutlineClose(ImagingOutline outline); | |
/* Special effects */ | |
extern Imaging ImagingEffectSpread(Imaging imIn, int distance); | |
extern Imaging ImagingEffectNoise(int xsize, int ysize, float sigma); | |
extern Imaging ImagingEffectMandelbrot(int xsize, int ysize, | |
double extent[4], int quality); | |
/* Obsolete */ | |
extern int ImagingToString(Imaging im, int orientation, char *buffer); | |
extern int ImagingFromString(Imaging im, int orientation, char *buffer); | |
/* File I/O */ | |
/* -------- */ | |
/* Built-in drivers */ | |
extern Imaging ImagingOpenPPM(const char* filename); | |
extern int ImagingSavePPM(Imaging im, const char* filename); | |
/* Utility functions */ | |
extern UINT32 ImagingCRC32(UINT32 crc, UINT8* buffer, int bytes); | |
/* Codecs */ | |
typedef struct ImagingCodecStateInstance *ImagingCodecState; | |
typedef int (*ImagingCodec)(Imaging im, ImagingCodecState state, | |
UINT8* buffer, int bytes); | |
extern int ImagingBitDecode(Imaging im, ImagingCodecState state, | |
UINT8* buffer, int bytes); | |
extern int ImagingEpsEncode(Imaging im, ImagingCodecState state, | |
UINT8* buffer, int bytes); | |
extern int ImagingFliDecode(Imaging im, ImagingCodecState state, | |
UINT8* buffer, int bytes); | |
extern int ImagingGifDecode(Imaging im, ImagingCodecState state, | |
UINT8* buffer, int bytes); | |
extern int ImagingGifEncode(Imaging im, ImagingCodecState state, | |
UINT8* buffer, int bytes); | |
extern int ImagingHexDecode(Imaging im, ImagingCodecState state, | |
UINT8* buffer, int bytes); | |
#ifdef HAVE_LIBJPEG | |
extern int ImagingJpegDecode(Imaging im, ImagingCodecState state, | |
UINT8* buffer, int bytes); | |
extern int ImagingJpegDecodeCleanup(ImagingCodecState state); | |
extern int ImagingJpegEncode(Imaging im, ImagingCodecState state, | |
UINT8* buffer, int bytes); | |
#endif | |
#ifdef HAVE_OPENJPEG | |
extern int ImagingJpeg2KDecode(Imaging im, ImagingCodecState state, | |
UINT8* buffer, int bytes); | |
extern int ImagingJpeg2KDecodeCleanup(ImagingCodecState state); | |
extern int ImagingJpeg2KEncode(Imaging im, ImagingCodecState state, | |
UINT8* buffer, int bytes); | |
extern int ImagingJpeg2KEncodeCleanup(ImagingCodecState state); | |
#endif | |
extern int ImagingLzwDecode(Imaging im, ImagingCodecState state, | |
UINT8* buffer, int bytes); | |
#ifdef HAVE_LIBTIFF | |
extern int ImagingLibTiffDecode(Imaging im, ImagingCodecState state, | |
UINT8* buffer, int bytes); | |
extern int ImagingLibTiffEncode(Imaging im, ImagingCodecState state, | |
UINT8* buffer, int bytes); | |
#endif | |
#ifdef HAVE_LIBMPEG | |
extern int ImagingMpegDecode(Imaging im, ImagingCodecState state, | |
UINT8* buffer, int bytes); | |
#endif | |
extern int ImagingMspDecode(Imaging im, ImagingCodecState state, | |
UINT8* buffer, int bytes); | |
extern int ImagingPackbitsDecode(Imaging im, ImagingCodecState state, | |
UINT8* buffer, int bytes); | |
extern int ImagingPcdDecode(Imaging im, ImagingCodecState state, | |
UINT8* buffer, int bytes); | |
extern int ImagingPcxDecode(Imaging im, ImagingCodecState state, | |
UINT8* buffer, int bytes); | |
extern int ImagingPcxEncode(Imaging im, ImagingCodecState state, | |
UINT8* buffer, int bytes); | |
extern int ImagingRawDecode(Imaging im, ImagingCodecState state, | |
UINT8* buffer, int bytes); | |
extern int ImagingRawEncode(Imaging im, ImagingCodecState state, | |
UINT8* buffer, int bytes); | |
extern int ImagingSunRleDecode(Imaging im, ImagingCodecState state, | |
UINT8* buffer, int bytes); | |
extern int ImagingTgaRleDecode(Imaging im, ImagingCodecState state, | |
UINT8* buffer, int bytes); | |
extern int ImagingXbmDecode(Imaging im, ImagingCodecState state, | |
UINT8* buffer, int bytes); | |
extern int ImagingXbmEncode(Imaging im, ImagingCodecState state, | |
UINT8* buffer, int bytes); | |
#ifdef HAVE_LIBZ | |
extern int ImagingZipDecode(Imaging im, ImagingCodecState state, | |
UINT8* buffer, int bytes); | |
extern int ImagingZipEncode(Imaging im, ImagingCodecState state, | |
UINT8* buffer, int bytes); | |
#endif | |
typedef void (*ImagingShuffler)(UINT8* out, const UINT8* in, int pixels); | |
/* Public shufflers */ | |
extern void ImagingPackRGB(UINT8* out, const UINT8* in, int pixels); | |
extern void ImagingPackBGR(UINT8* out, const UINT8* in, int pixels); | |
extern void ImagingUnpackRGB(UINT8* out, const UINT8* in, int pixels); | |
extern void ImagingUnpackBGR(UINT8* out, const UINT8* in, int pixels); | |
extern void ImagingUnpackYCC(UINT8* out, const UINT8* in, int pixels); | |
extern void ImagingUnpackYCCA(UINT8* out, const UINT8* in, int pixels); | |
extern void ImagingUnpackYCbCr(UINT8* out, const UINT8* in, int pixels); | |
extern void ImagingConvertRGB2YCbCr(UINT8* out, const UINT8* in, int pixels); | |
extern void ImagingConvertYCbCr2RGB(UINT8* out, const UINT8* in, int pixels); | |
extern ImagingShuffler ImagingFindUnpacker(const char* mode, | |
const char* rawmode, int* bits_out); | |
extern ImagingShuffler ImagingFindPacker(const char* mode, | |
const char* rawmode, int* bits_out); | |
struct ImagingCodecStateInstance { | |
int count; | |
int state; | |
int errcode; | |
int x, y; | |
int ystep; | |
int xsize, ysize, xoff, yoff; | |
ImagingShuffler shuffle; | |
int bits, bytes; | |
UINT8 *buffer; | |
void *context; | |
}; | |
/* Incremental encoding/decoding support */ | |
typedef struct ImagingIncrementalCodecStruct *ImagingIncrementalCodec; | |
typedef int (*ImagingIncrementalCodecEntry)(Imaging im, | |
ImagingCodecState state, | |
ImagingIncrementalCodec codec); | |
enum { | |
INCREMENTAL_CODEC_READ = 1, | |
INCREMENTAL_CODEC_WRITE = 2 | |
}; | |
enum { | |
INCREMENTAL_CODEC_NOT_SEEKABLE = 0, | |
INCREMENTAL_CODEC_SEEKABLE = 1 | |
}; | |
extern ImagingIncrementalCodec ImagingIncrementalCodecCreate(ImagingIncrementalCodecEntry codec_entry, Imaging im, ImagingCodecState state, int read_or_write, int seekable, int fd); | |
extern void ImagingIncrementalCodecDestroy(ImagingIncrementalCodec codec); | |
extern int ImagingIncrementalCodecPushBuffer(ImagingIncrementalCodec codec, UINT8 *buf, int bytes); | |
extern Py_ssize_t ImagingIncrementalCodecRead(ImagingIncrementalCodec codec, void *buffer, size_t bytes); | |
extern off_t ImagingIncrementalCodecSkip(ImagingIncrementalCodec codec, off_t bytes); | |
extern Py_ssize_t ImagingIncrementalCodecWrite(ImagingIncrementalCodec codec, const void *buffer, size_t bytes); | |
extern off_t ImagingIncrementalCodecSeek(ImagingIncrementalCodec codec, off_t bytes); | |
extern size_t ImagingIncrementalCodecBytesInBuffer(ImagingIncrementalCodec codec); | |
/* Errcodes */ | |
#define IMAGING_CODEC_END 1 | |
#define IMAGING_CODEC_OVERRUN -1 | |
#define IMAGING_CODEC_BROKEN -2 | |
#define IMAGING_CODEC_UNKNOWN -3 | |
#define IMAGING_CODEC_CONFIG -8 | |
#define IMAGING_CODEC_MEMORY -9 | |
#if defined(__cplusplus) | |
} | |
#endif |
/* | |
* The Python Imaging Library | |
* $Id$ | |
* | |
* Windows DIB specifics | |
* | |
* Copyright (c) Secret Labs AB 1997-98. | |
* Copyright (c) Fredrik Lundh 1996. | |
* | |
* See the README file for information on usage and redistribution. | |
*/ | |
#ifdef _WIN32 | |
#include "ImPlatform.h" | |
#if defined(__cplusplus) | |
extern "C" { | |
#endif | |
struct ImagingDIBInstance { | |
/* Windows interface */ | |
HDC dc; | |
HBITMAP bitmap; | |
HGDIOBJ old_bitmap; | |
BITMAPINFO *info; | |
UINT8 *bits; | |
HPALETTE palette; | |
/* Used by cut and paste */ | |
char mode[4]; | |
int xsize, ysize; | |
int pixelsize; | |
int linesize; | |
ImagingShuffler pack; | |
ImagingShuffler unpack; | |
}; | |
typedef struct ImagingDIBInstance* ImagingDIB; | |
extern char* ImagingGetModeDIB(int size_out[2]); | |
extern ImagingDIB ImagingNewDIB(const char *mode, int xsize, int ysize); | |
extern void ImagingDeleteDIB(ImagingDIB im); | |
extern void ImagingDrawDIB(ImagingDIB dib, void *dc, int dst[4], int src[4]); | |
extern void ImagingExposeDIB(ImagingDIB dib, void *dc); | |
extern int ImagingQueryPaletteDIB(ImagingDIB dib, void *dc); | |
extern void ImagingPasteDIB(ImagingDIB dib, Imaging im, int xy[4]); | |
#if defined(__cplusplus) | |
} | |
#endif | |
#endif |
/* | |
* The Python Imaging Library | |
* $Id$ | |
* | |
* platform declarations for the imaging core library | |
* | |
* Copyright (c) Fredrik Lundh 1995-2003. | |
*/ | |
#include "Python.h" | |
/* Check that we have an ANSI compliant compiler */ | |
#ifndef HAVE_PROTOTYPES | |
#error Sorry, this library requires support for ANSI prototypes. | |
#endif | |
#ifndef STDC_HEADERS | |
#error Sorry, this library requires ANSI header files. | |
#endif | |
#if defined(PIL_NO_INLINE) | |
#define inline | |
#else | |
#if defined(_MSC_VER) && !defined(__GNUC__) | |
#define inline __inline | |
#endif | |
#endif | |
#ifdef _WIN32 | |
#define WIN32_LEAN_AND_MEAN | |
#include <Windows.h> | |
#else | |
/* For System that are not Windows, we'll need to define these. */ | |
#if SIZEOF_SHORT == 2 | |
#define INT16 short | |
#elif SIZEOF_INT == 2 | |
#define INT16 int | |
#else | |
#define INT16 short /* most things works just fine anyway... */ | |
#endif | |
#if SIZEOF_SHORT == 4 | |
#define INT32 short | |
#elif SIZEOF_INT == 4 | |
#define INT32 int | |
#elif SIZEOF_LONG == 4 | |
#define INT32 long | |
#else | |
#error Cannot find required 32-bit integer type | |
#endif | |
#if SIZEOF_LONG == 8 | |
#define INT64 long | |
#elif SIZEOF_LONG_LONG == 8 | |
#define INT64 long | |
#endif | |
#define INT8 signed char | |
#define UINT8 unsigned char | |
#define UINT16 unsigned INT16 | |
#define UINT32 unsigned INT32 | |
#endif | |
/* assume IEEE; tweak if necessary (patches are welcome) */ | |
#define FLOAT32 float | |
#define FLOAT64 double | |
#ifdef _MSC_VER | |
typedef signed __int64 int64_t; | |
#endif | |
#ifdef __GNUC__ | |
#define GCC_VERSION (__GNUC__ * 10000 \ | |
+ __GNUC_MINOR__ * 100 \ | |
+ __GNUC_PATCHLEVEL__) | |
#endif |
"""Record of phased-in incompatible language changes. | |
Each line is of the form: | |
FeatureName = "_Feature(" OptionalRelease "," MandatoryRelease "," | |
CompilerFlag ")" | |
where, normally, OptionalRelease < MandatoryRelease, and both are 5-tuples | |
of the same form as sys.version_info: | |
(PY_MAJOR_VERSION, # the 2 in 2.1.0a3; an int | |
PY_MINOR_VERSION, # the 1; an int | |
PY_MICRO_VERSION, # the 0; an int | |
PY_RELEASE_LEVEL, # "alpha", "beta", "candidate" or "final"; string | |
PY_RELEASE_SERIAL # the 3; an int | |
) | |
OptionalRelease records the first release in which | |
from __future__ import FeatureName | |
was accepted. | |
In the case of MandatoryReleases that have not yet occurred, | |
MandatoryRelease predicts the release in which the feature will become part | |
of the language. | |
Else MandatoryRelease records when the feature became part of the language; | |
in releases at or after that, modules no longer need | |
from __future__ import FeatureName | |
to use the feature in question, but may continue to use such imports. | |
MandatoryRelease may also be None, meaning that a planned feature got | |
dropped. | |
Instances of class _Feature have two corresponding methods, | |
.getOptionalRelease() and .getMandatoryRelease(). | |
CompilerFlag is the (bitfield) flag that should be passed in the fourth | |
argument to the builtin function compile() to enable the feature in | |
dynamically compiled code. This flag is stored in the .compiler_flag | |
attribute on _Future instances. These values must match the appropriate | |
#defines of CO_xxx flags in Include/compile.h. | |
No feature line is ever to be deleted from this file. | |
""" | |
all_feature_names = [ | |
"nested_scopes", | |
"generators", | |
"division", | |
"absolute_import", | |
"with_statement", | |
"print_function", | |
"unicode_literals", | |
"barry_as_FLUFL", | |
"generator_stop", | |
] | |
__all__ = ["all_feature_names"] + all_feature_names | |
# The CO_xxx symbols are defined here under the same names used by | |
# compile.h, so that an editor search will find them here. However, | |
# they're not exported in __all__, because they don't really belong to | |
# this module. | |
CO_NESTED = 0x0010 # nested_scopes | |
CO_GENERATOR_ALLOWED = 0 # generators (obsolete, was 0x1000) | |
CO_FUTURE_DIVISION = 0x2000 # division | |
CO_FUTURE_ABSOLUTE_IMPORT = 0x4000 # perform absolute imports by default | |
CO_FUTURE_WITH_STATEMENT = 0x8000 # with statement | |
CO_FUTURE_PRINT_FUNCTION = 0x10000 # print function | |
CO_FUTURE_UNICODE_LITERALS = 0x20000 # unicode string literals | |
CO_FUTURE_BARRY_AS_BDFL = 0x40000 | |
CO_FUTURE_GENERATOR_STOP = 0x80000 # StopIteration becomes RuntimeError in generators | |
class _Feature: | |
def __init__(self, optionalRelease, mandatoryRelease, compiler_flag): | |
self.optional = optionalRelease | |
self.mandatory = mandatoryRelease | |
self.compiler_flag = compiler_flag | |
def getOptionalRelease(self): | |
"""Return first release in which this feature was recognized. | |
This is a 5-tuple, of the same form as sys.version_info. | |
""" | |
return self.optional | |
def getMandatoryRelease(self): | |
"""Return release in which this feature will become mandatory. | |
This is a 5-tuple, of the same form as sys.version_info, or, if | |
the feature was dropped, is None. | |
""" | |
return self.mandatory | |
def __repr__(self): | |
return "_Feature" + repr((self.optional, | |
self.mandatory, | |
self.compiler_flag)) | |
nested_scopes = _Feature((2, 1, 0, "beta", 1), | |
(2, 2, 0, "alpha", 0), | |
CO_NESTED) | |
generators = _Feature((2, 2, 0, "alpha", 1), | |
(2, 3, 0, "final", 0), | |
CO_GENERATOR_ALLOWED) | |
division = _Feature((2, 2, 0, "alpha", 2), | |
(3, 0, 0, "alpha", 0), | |
CO_FUTURE_DIVISION) | |
absolute_import = _Feature((2, 5, 0, "alpha", 1), | |
(3, 0, 0, "alpha", 0), | |
CO_FUTURE_ABSOLUTE_IMPORT) | |
with_statement = _Feature((2, 5, 0, "alpha", 1), | |
(2, 6, 0, "alpha", 0), | |
CO_FUTURE_WITH_STATEMENT) | |
print_function = _Feature((2, 6, 0, "alpha", 2), | |
(3, 0, 0, "alpha", 0), | |
CO_FUTURE_PRINT_FUNCTION) | |
unicode_literals = _Feature((2, 6, 0, "alpha", 2), | |
(3, 0, 0, "alpha", 0), | |
CO_FUTURE_UNICODE_LITERALS) | |
barry_as_FLUFL = _Feature((3, 1, 0, "alpha", 2), | |
(3, 9, 0, "alpha", 0), | |
CO_FUTURE_BARRY_AS_BDFL) | |
generator_stop = _Feature((3, 5, 0, "beta", 1), | |
(3, 7, 0, "alpha", 0), | |
CO_FUTURE_GENERATOR_STOP) |
"""A minimal subset of the locale module used at interpreter startup | |
(imported by the _io module), in order to reduce startup time. | |
Don't import directly from third-party code; use the `locale` module instead! | |
""" | |
import sys | |
import _locale | |
if sys.platform.startswith("win"): | |
def getpreferredencoding(do_setlocale=True): | |
return _locale._getdefaultlocale()[1] | |
else: | |
try: | |
_locale.CODESET | |
except AttributeError: | |
def getpreferredencoding(do_setlocale=True): | |
# This path for legacy systems needs the more complex | |
# getdefaultlocale() function, import the full locale module. | |
import locale | |
return locale.getpreferredencoding(do_setlocale) | |
else: | |
def getpreferredencoding(do_setlocale=True): | |
assert not do_setlocale | |
result = _locale.nl_langinfo(_locale.CODESET) | |
if not result and sys.platform == 'darwin': | |
# nl_langinfo can return an empty string | |
# when the setting has an invalid value. | |
# Default to UTF-8 in that case because | |
# UTF-8 is the default charset on OSX and | |
# returning nothing will crash the | |
# interpreter. | |
result = 'UTF-8' | |
return result |
# Copyright 2007 Google, Inc. All Rights Reserved. | |
# Licensed to PSF under a Contributor Agreement. | |
"""Abstract Base Classes (ABCs) for collections, according to PEP 3119. | |
Unit tests are in test_collections. | |
""" | |
from abc import ABCMeta, abstractmethod | |
import sys | |
__all__ = ["Awaitable", "Coroutine", "AsyncIterable", "AsyncIterator", | |
"Hashable", "Iterable", "Iterator", "Generator", | |
"Sized", "Container", "Callable", | |
"Set", "MutableSet", | |
"Mapping", "MutableMapping", | |
"MappingView", "KeysView", "ItemsView", "ValuesView", | |
"Sequence", "MutableSequence", | |
"ByteString", | |
] | |
# This module has been renamed from collections.abc to _collections_abc to | |
# speed up interpreter startup. Some of the types such as MutableMapping are | |
# required early but collections module imports a lot of other modules. | |
# See issue #19218 | |
__name__ = "collections.abc" | |
# Private list of types that we want to register with the various ABCs | |
# so that they will pass tests like: | |
# it = iter(somebytearray) | |
# assert isinstance(it, Iterable) | |
# Note: in other implementations, these types many not be distinct | |
# and they make have their own implementation specific types that | |
# are not included on this list. | |
bytes_iterator = type(iter(b'')) | |
bytearray_iterator = type(iter(bytearray())) | |
#callable_iterator = ??? | |
dict_keyiterator = type(iter({}.keys())) | |
dict_valueiterator = type(iter({}.values())) | |
dict_itemiterator = type(iter({}.items())) | |
list_iterator = type(iter([])) | |
list_reverseiterator = type(iter(reversed([]))) | |
range_iterator = type(iter(range(0))) | |
set_iterator = type(iter(set())) | |
str_iterator = type(iter("")) | |
tuple_iterator = type(iter(())) | |
zip_iterator = type(iter(zip())) | |
## views ## | |
dict_keys = type({}.keys()) | |
dict_values = type({}.values()) | |
dict_items = type({}.items()) | |
## misc ## | |
mappingproxy = type(type.__dict__) | |
generator = type((lambda: (yield))()) | |
## coroutine ## | |
async def _coro(): pass | |
_coro = _coro() | |
coroutine = type(_coro) | |
_coro.close() # Prevent ResourceWarning | |
del _coro | |
### ONE-TRICK PONIES ### | |
class Hashable(metaclass=ABCMeta): | |
__slots__ = () | |
@abstractmethod | |
def __hash__(self): | |
return 0 | |
@classmethod | |
def __subclasshook__(cls, C): | |
if cls is Hashable: | |
for B in C.__mro__: | |
if "__hash__" in B.__dict__: | |
if B.__dict__["__hash__"]: | |
return True | |
break | |
return NotImplemented | |
class Awaitable(metaclass=ABCMeta): | |
__slots__ = () | |
@abstractmethod | |
def __await__(self): | |
yield | |
@classmethod | |
def __subclasshook__(cls, C): | |
if cls is Awaitable: | |
for B in C.__mro__: | |
if "__await__" in B.__dict__: | |
if B.__dict__["__await__"]: | |
return True | |
break | |
return NotImplemented | |
class Coroutine(Awaitable): | |
__slots__ = () | |
@abstractmethod | |
def send(self, value): | |
"""Send a value into the coroutine. | |
Return next yielded value or raise StopIteration. | |
""" | |
raise StopIteration | |
@abstractmethod | |
def throw(self, typ, val=None, tb=None): | |
"""Raise an exception in the coroutine. | |
Return next yielded value or raise StopIteration. | |
""" | |
if val is None: | |
if tb is None: | |
raise typ | |
val = typ() | |
if tb is not None: | |
val = val.with_traceback(tb) | |
raise val | |
def close(self): | |
"""Raise GeneratorExit inside coroutine. | |
""" | |
try: | |
self.throw(GeneratorExit) | |
except (GeneratorExit, StopIteration): | |
pass | |
else: | |
raise RuntimeError("coroutine ignored GeneratorExit") | |
@classmethod | |
def __subclasshook__(cls, C): | |
if cls is Coroutine: | |
mro = C.__mro__ | |
for method in ('__await__', 'send', 'throw', 'close'): | |
for base in mro: | |
if method in base.__dict__: | |
break | |
else: | |
return NotImplemented | |
return True | |
return NotImplemented | |
Coroutine.register(coroutine) | |
class AsyncIterable(metaclass=ABCMeta): | |
__slots__ = () | |
@abstractmethod | |
def __aiter__(self): | |
return AsyncIterator() | |
@classmethod | |
def __subclasshook__(cls, C): | |
if cls is AsyncIterable: | |
if any("__aiter__" in B.__dict__ for B in C.__mro__): | |
return True | |
return NotImplemented | |
class AsyncIterator(AsyncIterable): | |
__slots__ = () | |
@abstractmethod | |
async def __anext__(self): | |
"""Return the next item or raise StopAsyncIteration when exhausted.""" | |
raise StopAsyncIteration | |
def __aiter__(self): | |
return self | |
@classmethod | |
def __subclasshook__(cls, C): | |
if cls is AsyncIterator: | |
if (any("__anext__" in B.__dict__ for B in C.__mro__) and | |
any("__aiter__" in B.__dict__ for B in C.__mro__)): | |
return True | |
return NotImplemented | |
class Iterable(metaclass=ABCMeta): | |
__slots__ = () | |
@abstractmethod | |
def __iter__(self): | |
while False: | |
yield None | |
@classmethod | |
def __subclasshook__(cls, C): | |
if cls is Iterable: | |
if any("__iter__" in B.__dict__ for B in C.__mro__): | |
return True | |
return NotImplemented | |
class Iterator(Iterable): | |
__slots__ = () | |
@abstractmethod | |
def __next__(self): | |
'Return the next item from the iterator. When exhausted, raise StopIteration' | |
raise StopIteration | |
def __iter__(self): | |
return self | |
@classmethod | |
def __subclasshook__(cls, C): | |
if cls is Iterator: | |
if (any("__next__" in B.__dict__ for B in C.__mro__) and | |
any("__iter__" in B.__dict__ for B in C.__mro__)): | |
return True | |
return NotImplemented | |
Iterator.register(bytes_iterator) | |
Iterator.register(bytearray_iterator) | |
#Iterator.register(callable_iterator) | |
Iterator.register(dict_keyiterator) | |
Iterator.register(dict_valueiterator) | |
Iterator.register(dict_itemiterator) | |
Iterator.register(list_iterator) | |
Iterator.register(list_reverseiterator) | |
Iterator.register(range_iterator) | |
Iterator.register(set_iterator) | |
Iterator.register(str_iterator) | |
Iterator.register(tuple_iterator) | |
Iterator.register(zip_iterator) | |
class Generator(Iterator): | |
__slots__ = () | |
def __next__(self): | |
"""Return the next item from the generator. | |
When exhausted, raise StopIteration. | |
""" | |
return self.send(None) | |
@abstractmethod | |
def send(self, value): | |
"""Send a value into the generator. | |
Return next yielded value or raise StopIteration. | |
""" | |
raise StopIteration | |
@abstractmethod | |
def throw(self, typ, val=None, tb=None): | |
"""Raise an exception in the generator. | |
Return next yielded value or raise StopIteration. | |
""" | |
if val is None: | |
if tb is None: | |
raise typ | |
val = typ() | |
if tb is not None: | |
val = val.with_traceback(tb) | |
raise val | |
def close(self): | |
"""Raise GeneratorExit inside generator. | |
""" | |
try: | |
self.throw(GeneratorExit) | |
except (GeneratorExit, StopIteration): | |
pass | |
else: | |
raise RuntimeError("generator ignored GeneratorExit") | |
@classmethod | |
def __subclasshook__(cls, C): | |
if cls is Generator: | |
mro = C.__mro__ | |
for method in ('__iter__', '__next__', 'send', 'throw', 'close'): | |
for base in mro: | |
if method in base.__dict__: | |
break | |
else: | |
return NotImplemented | |
return True | |
return NotImplemented | |
Generator.register(generator) | |
class Sized(metaclass=ABCMeta): | |
__slots__ = () | |
@abstractmethod | |
def __len__(self): | |
return 0 | |
@classmethod | |
def __subclasshook__(cls, C): | |
if cls is Sized: | |
if any("__len__" in B.__dict__ for B in C.__mro__): | |
return True | |
return NotImplemented | |
class Container(metaclass=ABCMeta): | |
__slots__ = () | |
@abstractmethod | |
def __contains__(self, x): | |
return False | |
@classmethod | |
def __subclasshook__(cls, C): | |
if cls is Container: | |
if any("__contains__" in B.__dict__ for B in C.__mro__): | |
return True | |
return NotImplemented | |
class Callable(metaclass=ABCMeta): | |
__slots__ = () | |
@abstractmethod | |
def __call__(self, *args, **kwds): | |
return False | |
@classmethod | |
def __subclasshook__(cls, C): | |
if cls is Callable: | |
if any("__call__" in B.__dict__ for B in C.__mro__): | |
return True | |
return NotImplemented | |
### SETS ### | |
class Set(Sized, Iterable, Container): | |
"""A set is a finite, iterable container. | |
This class provides concrete generic implementations of all | |
methods except for __contains__, __iter__ and __len__. | |
To override the comparisons (presumably for speed, as the | |
semantics are fixed), redefine __le__ and __ge__, | |
then the other operations will automatically follow suit. | |
""" | |
__slots__ = () | |
def __le__(self, other): | |
if not isinstance(other, Set): | |
return NotImplemented | |
if len(self) > len(other): | |
return False | |
for elem in self: | |
if elem not in other: | |
return False | |
return True | |
def __lt__(self, other): | |
if not isinstance(other, Set): | |
return NotImplemented | |
return len(self) < len(other) and self.__le__(other) | |
def __gt__(self, other): | |
if not isinstance(other, Set): | |
return NotImplemented | |
return len(self) > len(other) and self.__ge__(other) | |
def __ge__(self, other): | |
if not isinstance(other, Set): | |
return NotImplemented | |
if len(self) < len(other): | |
return False | |
for elem in other: | |
if elem not in self: | |
return False | |
return True | |
def __eq__(self, other): | |
if not isinstance(other, Set): | |
return NotImplemented | |
return len(self) == len(other) and self.__le__(other) | |
@classmethod | |
def _from_iterable(cls, it): | |
'''Construct an instance of the class from any iterable input. | |
Must override this method if the class constructor signature | |
does not accept an iterable for an input. | |
''' | |
return cls(it) | |
def __and__(self, other): | |
if not isinstance(other, Iterable): | |
return NotImplemented | |
return self._from_iterable(value for value in other if value in self) | |
__rand__ = __and__ | |
def isdisjoint(self, other): | |
'Return True if two sets have a null intersection.' | |
for value in other: | |
if value in self: | |
return False | |
return True | |
def __or__(self, other): | |
if not isinstance(other, Iterable): | |
return NotImplemented | |
chain = (e for s in (self, other) for e in s) | |
return self._from_iterable(chain) | |
__ror__ = __or__ | |
def __sub__(self, other): | |
if not isinstance(other, Set): | |
if not isinstance(other, Iterable): | |
return NotImplemented | |
other = self._from_iterable(other) | |
return self._from_iterable(value for value in self | |
if value not in other) | |
def __rsub__(self, other): | |
if not isinstance(other, Set): | |
if not isinstance(other, Iterable): | |
return NotImplemented | |
other = self._from_iterable(other) | |
return self._from_iterable(value for value in other | |
if value not in self) | |
def __xor__(self, other): | |
if not isinstance(other, Set): | |
if not isinstance(other, Iterable): | |
return NotImplemented | |
other = self._from_iterable(other) | |
return (self - other) | (other - self) | |
__rxor__ = __xor__ | |
def _hash(self): | |
"""Compute the hash value of a set. | |
Note that we don't define __hash__: not all sets are hashable. | |
But if you define a hashable set type, its __hash__ should | |
call this function. | |
This must be compatible __eq__. | |
All sets ought to compare equal if they contain the same | |
elements, regardless of how they are implemented, and | |
regardless of the order of the elements; so there's not much | |
freedom for __eq__ or __hash__. We match the algorithm used | |
by the built-in frozenset type. | |
""" | |
MAX = sys.maxsize | |
MASK = 2 * MAX + 1 | |
n = len(self) | |
h = 1927868237 * (n + 1) | |
h &= MASK | |
for x in self: | |
hx = hash(x) | |
h ^= (hx ^ (hx << 16) ^ 89869747) * 3644798167 | |
h &= MASK | |
h = h * 69069 + 907133923 | |
h &= MASK | |
if h > MAX: | |
h -= MASK + 1 | |
if h == -1: | |
h = 590923713 | |
return h | |
Set.register(frozenset) | |
class MutableSet(Set): | |
"""A mutable set is a finite, iterable container. | |
This class provides concrete generic implementations of all | |
methods except for __contains__, __iter__, __len__, | |
add(), and discard(). | |
To override the comparisons (presumably for speed, as the | |
semantics are fixed), all you have to do is redefine __le__ and | |
then the other operations will automatically follow suit. | |
""" | |
__slots__ = () | |
@abstractmethod | |
def add(self, value): | |
"""Add an element.""" | |
raise NotImplementedError | |
@abstractmethod | |
def discard(self, value): | |
"""Remove an element. Do not raise an exception if absent.""" | |
raise NotImplementedError | |
def remove(self, value): | |
"""Remove an element. If not a member, raise a KeyError.""" | |
if value not in self: | |
raise KeyError(value) | |
self.discard(value) | |
def pop(self): | |
"""Return the popped value. Raise KeyError if empty.""" | |
it = iter(self) | |
try: | |
value = next(it) | |
except StopIteration: | |
raise KeyError | |
self.discard(value) | |
return value | |
def clear(self): | |
"""This is slow (creates N new iterators!) but effective.""" | |
try: | |
while True: | |
self.pop() | |
except KeyError: | |
pass | |
def __ior__(self, it): | |
for value in it: | |
self.add(value) | |
return self | |
def __iand__(self, it): | |
for value in (self - it): | |
self.discard(value) | |
return self | |
def __ixor__(self, it): | |
if it is self: | |
self.clear() | |
else: | |
if not isinstance(it, Set): | |
it = self._from_iterable(it) | |
for value in it: | |
if value in self: | |
self.discard(value) | |
else: | |
self.add(value) | |
return self | |
def __isub__(self, it): | |
if it is self: | |
self.clear() | |
else: | |
for value in it: | |
self.discard(value) | |
return self | |
MutableSet.register(set) | |
### MAPPINGS ### | |
class Mapping(Sized, Iterable, Container): | |
__slots__ = () | |
"""A Mapping is a generic container for associating key/value | |
pairs. | |
This class provides concrete generic implementations of all | |
methods except for __getitem__, __iter__, and __len__. | |
""" | |
@abstractmethod | |
def __getitem__(self, key): | |
raise KeyError | |
def get(self, key, default=None): | |
'D.get(k[,d]) -> D[k] if k in D, else d. d defaults to None.' | |
try: | |
return self[key] | |
except KeyError: | |
return default | |
def __contains__(self, key): | |
try: | |
self[key] | |
except KeyError: | |
return False | |
else: | |
return True | |
def keys(self): | |
"D.keys() -> a set-like object providing a view on D's keys" | |
return KeysView(self) | |
def items(self): | |
"D.items() -> a set-like object providing a view on D's items" | |
return ItemsView(self) | |
def values(self): | |
"D.values() -> an object providing a view on D's values" | |
return ValuesView(self) | |
def __eq__(self, other): | |
if not isinstance(other, Mapping): | |
return NotImplemented | |
return dict(self.items()) == dict(other.items()) | |
Mapping.register(mappingproxy) | |
class MappingView(Sized): | |
__slots__ = '_mapping', | |
def __init__(self, mapping): | |
self._mapping = mapping | |
def __len__(self): | |
return len(self._mapping) | |
def __repr__(self): | |
return '{0.__class__.__name__}({0._mapping!r})'.format(self) | |
class KeysView(MappingView, Set): | |
__slots__ = () | |
@classmethod | |
def _from_iterable(self, it): | |
return set(it) | |
def __contains__(self, key): | |
return key in self._mapping | |
def __iter__(self): | |
yield from self._mapping | |
KeysView.register(dict_keys) | |
class ItemsView(MappingView, Set): | |
__slots__ = () | |
@classmethod | |
def _from_iterable(self, it): | |
return set(it) | |
def __contains__(self, item): | |
key, value = item | |
try: | |
v = self._mapping[key] | |
except KeyError: | |
return False | |
else: | |
return v == value | |
def __iter__(self): | |
for key in self._mapping: | |
yield (key, self._mapping[key]) | |
ItemsView.register(dict_items) | |
class ValuesView(MappingView): | |
__slots__ = () | |
def __contains__(self, value): | |
for key in self._mapping: | |
if value == self._mapping[key]: | |
return True | |
return False | |
def __iter__(self): | |
for key in self._mapping: | |
yield self._mapping[key] | |
ValuesView.register(dict_values) | |
class MutableMapping(Mapping): | |
__slots__ = () | |
"""A MutableMapping is a generic container for associating | |
key/value pairs. | |
This class provides concrete generic implementations of all | |
methods except for __getitem__, __setitem__, __delitem__, | |
__iter__, and __len__. | |
""" | |
@abstractmethod | |
def __setitem__(self, key, value): | |
raise KeyError | |
@abstractmethod | |
def __delitem__(self, key): | |
raise KeyError | |
__marker = object() | |
def pop(self, key, default=__marker): | |
'''D.pop(k[,d]) -> v, remove specified key and return the corresponding value. | |
If key is not found, d is returned if given, otherwise KeyError is raised. | |
''' | |
try: | |
value = self[key] | |
except KeyError: | |
if default is self.__marker: | |
raise | |
return default | |
else: | |
del self[key] | |
return value | |
def popitem(self): | |
'''D.popitem() -> (k, v), remove and return some (key, value) pair | |
as a 2-tuple; but raise KeyError if D is empty. | |
''' | |
try: | |
key = next(iter(self)) | |
except StopIteration: | |
raise KeyError | |
value = self[key] | |
del self[key] | |
return key, value | |
def clear(self): | |
'D.clear() -> None. Remove all items from D.' | |
try: | |
while True: | |
self.popitem() | |
except KeyError: | |
pass | |
def update(*args, **kwds): | |
''' D.update([E, ]**F) -> None. Update D from mapping/iterable E and F. | |
If E present and has a .keys() method, does: for k in E: D[k] = E[k] | |
If E present and lacks .keys() method, does: for (k, v) in E: D[k] = v | |
In either case, this is followed by: for k, v in F.items(): D[k] = v | |
''' | |
if not args: | |
raise TypeError("descriptor 'update' of 'MutableMapping' object " | |
"needs an argument") | |
self, *args = args | |
if len(args) > 1: | |
raise TypeError('update expected at most 1 arguments, got %d' % | |
len(args)) | |
if args: | |
other = args[0] | |
if isinstance(other, Mapping): | |
for key in other: | |
self[key] = other[key] | |
elif hasattr(other, "keys"): | |
for key in other.keys(): | |
self[key] = other[key] | |
else: | |
for key, value in other: | |
self[key] = value | |
for key, value in kwds.items(): | |
self[key] = value | |
def setdefault(self, key, default=None): | |
'D.setdefault(k[,d]) -> D.get(k,d), also set D[k]=d if k not in D' | |
try: | |
return self[key] | |
except KeyError: | |
self[key] = default | |
return default | |
MutableMapping.register(dict) | |
### SEQUENCES ### | |
class Sequence(Sized, Iterable, Container): | |
"""All the operations on a read-only sequence. | |
Concrete subclasses must override __new__ or __init__, | |
__getitem__, and __len__. | |
""" | |
__slots__ = () | |
@abstractmethod | |
def __getitem__(self, index): | |
raise IndexError | |
def __iter__(self): | |
i = 0 | |
try: | |
while True: | |
v = self[i] | |
yield v | |
i += 1 | |
except IndexError: | |
return | |
def __contains__(self, value): | |
for v in self: | |
if v == value: | |
return True | |
return False | |
def __reversed__(self): | |
for i in reversed(range(len(self))): | |
yield self[i] | |
def index(self, value, start=0, stop=None): | |
'''S.index(value, [start, [stop]]) -> integer -- return first index of value. | |
Raises ValueError if the value is not present. | |
''' | |
if start is not None and start < 0: | |
start = max(len(self) + start, 0) | |
if stop is not None and stop < 0: | |
stop += len(self) | |
i = start | |
while stop is None or i < stop: | |
try: | |
if self[i] == value: | |
return i | |
except IndexError: | |
break | |
i += 1 | |
raise ValueError | |
def count(self, value): | |
'S.count(value) -> integer -- return number of occurrences of value' | |
return sum(1 for v in self if v == value) | |
Sequence.register(tuple) | |
Sequence.register(str) | |
Sequence.register(range) | |
Sequence.register(memoryview) | |
class ByteString(Sequence): | |
"""This unifies bytes and bytearray. | |
XXX Should add all their methods. | |
""" | |
__slots__ = () | |
ByteString.register(bytes) | |
ByteString.register(bytearray) | |
class MutableSequence(Sequence): | |
__slots__ = () | |
"""All the operations on a read-write sequence. | |
Concrete subclasses must provide __new__ or __init__, | |
__getitem__, __setitem__, __delitem__, __len__, and insert(). | |
""" | |
@abstractmethod | |
def __setitem__(self, index, value): | |
raise IndexError | |
@abstractmethod | |
def __delitem__(self, index): | |
raise IndexError | |
@abstractmethod | |
def insert(self, index, value): | |
'S.insert(index, value) -- insert value before index' | |
raise IndexError | |
def append(self, value): | |
'S.append(value) -- append value to the end of the sequence' | |
self.insert(len(self), value) | |
def clear(self): | |
'S.clear() -> None -- remove all items from S' | |
try: | |
while True: | |
self.pop() | |
except IndexError: | |
pass | |
def reverse(self): | |
'S.reverse() -- reverse *IN PLACE*' | |
n = len(self) | |
for i in range(n//2): | |
self[i], self[n-i-1] = self[n-i-1], self[i] | |
def extend(self, values): | |
'S.extend(iterable) -- extend sequence by appending elements from the iterable' | |
for v in values: | |
self.append(v) | |
def pop(self, index=-1): | |
'''S.pop([index]) -> item -- remove and return item at index (default last). | |
Raise IndexError if list is empty or index is out of range. | |
''' | |
v = self[index] | |
del self[index] | |
return v | |
def remove(self, value): | |
'''S.remove(value) -- remove first occurrence of value. | |
Raise ValueError if the value is not present. | |
''' | |
del self[self.index(value)] | |
def __iadd__(self, values): | |
self.extend(values) | |
return self | |
MutableSequence.register(list) | |
MutableSequence.register(bytearray) # Multiply inheriting, see ByteString |
"""Drop-in replacement for the thread module. | |
Meant to be used as a brain-dead substitute so that threaded code does | |
not need to be rewritten for when the thread module is not present. | |
Suggested usage is:: | |
try: | |
import _thread | |
except ImportError: | |
import _dummy_thread as _thread | |
""" | |
# Exports only things specified by thread documentation; | |
# skipping obsolete synonyms allocate(), start_new(), exit_thread(). | |
__all__ = ['error', 'start_new_thread', 'exit', 'get_ident', 'allocate_lock', | |
'interrupt_main', 'LockType'] | |
# A dummy value | |
TIMEOUT_MAX = 2**31 | |
# NOTE: this module can be imported early in the extension building process, | |
# and so top level imports of other modules should be avoided. Instead, all | |
# imports are done when needed on a function-by-function basis. Since threads | |
# are disabled, the import lock should not be an issue anyway (??). | |
error = RuntimeError | |
def start_new_thread(function, args, kwargs={}): | |
"""Dummy implementation of _thread.start_new_thread(). | |
Compatibility is maintained by making sure that ``args`` is a | |
tuple and ``kwargs`` is a dictionary. If an exception is raised | |
and it is SystemExit (which can be done by _thread.exit()) it is | |
caught and nothing is done; all other exceptions are printed out | |
by using traceback.print_exc(). | |
If the executed function calls interrupt_main the KeyboardInterrupt will be | |
raised when the function returns. | |
""" | |
if type(args) != type(tuple()): | |
raise TypeError("2nd arg must be a tuple") | |
if type(kwargs) != type(dict()): | |
raise TypeError("3rd arg must be a dict") | |
global _main | |
_main = False | |
try: | |
function(*args, **kwargs) | |
except SystemExit: | |
pass | |
except: | |
import traceback | |
traceback.print_exc() | |
_main = True | |
global _interrupt | |
if _interrupt: | |
_interrupt = False | |
raise KeyboardInterrupt | |
def exit(): | |
"""Dummy implementation of _thread.exit().""" | |
raise SystemExit | |
def get_ident(): | |
"""Dummy implementation of _thread.get_ident(). | |
Since this module should only be used when _threadmodule is not | |
available, it is safe to assume that the current process is the | |
only thread. Thus a constant can be safely returned. | |
""" | |
return -1 | |
def allocate_lock(): | |
"""Dummy implementation of _thread.allocate_lock().""" | |
return LockType() | |
def stack_size(size=None): | |
"""Dummy implementation of _thread.stack_size().""" | |
if size is not None: | |
raise error("setting thread stack size not supported") | |
return 0 | |
def _set_sentinel(): | |
"""Dummy implementation of _thread._set_sentinel().""" | |
return LockType() | |
class LockType(object): | |
"""Class implementing dummy implementation of _thread.LockType. | |
Compatibility is maintained by maintaining self.locked_status | |
which is a boolean that stores the state of the lock. Pickling of | |
the lock, though, should not be done since if the _thread module is | |
then used with an unpickled ``lock()`` from here problems could | |
occur from this class not having atomic methods. | |
""" | |
def __init__(self): | |
self.locked_status = False | |
def acquire(self, waitflag=None, timeout=-1): | |
"""Dummy implementation of acquire(). | |
For blocking calls, self.locked_status is automatically set to | |
True and returned appropriately based on value of | |
``waitflag``. If it is non-blocking, then the value is | |
actually checked and not set if it is already acquired. This | |
is all done so that threading.Condition's assert statements | |
aren't triggered and throw a little fit. | |
""" | |
if waitflag is None or waitflag: | |
self.locked_status = True | |
return True | |
else: | |
if not self.locked_status: | |
self.locked_status = True | |
return True | |
else: | |
if timeout > 0: | |
import time | |
time.sleep(timeout) | |
return False | |
__enter__ = acquire | |
def __exit__(self, typ, val, tb): | |
self.release() | |
def release(self): | |
"""Release the dummy lock.""" | |
# XXX Perhaps shouldn't actually bother to test? Could lead | |
# to problems for complex, threaded code. | |
if not self.locked_status: | |
raise error | |
self.locked_status = False | |
return True | |
def locked(self): | |
return self.locked_status | |
def __repr__(self): | |
return "<%s %s.%s object at %s>" % ( | |
"locked" if self.locked_status else "unlocked", | |
self.__class__.__module__, | |
self.__class__.__qualname__, | |
hex(id(self)) | |
) | |
# Used to signal that interrupt_main was called in a "thread" | |
_interrupt = False | |
# True when not executing in a "thread" | |
_main = True | |
def interrupt_main(): | |
"""Set _interrupt flag to True to have start_new_thread raise | |
KeyboardInterrupt upon exiting.""" | |
if _main: | |
raise KeyboardInterrupt | |
else: | |
global _interrupt | |
_interrupt = True |
# Access WeakSet through the weakref module. | |
# This code is separated-out because it is needed | |
# by abc.py to load everything else at startup. | |
from _weakref import ref | |
__all__ = ['WeakSet'] | |
class _IterationGuard: | |
# This context manager registers itself in the current iterators of the | |
# weak container, such as to delay all removals until the context manager | |
# exits. | |
# This technique should be relatively thread-safe (since sets are). | |
def __init__(self, weakcontainer): | |
# Don't create cycles | |
self.weakcontainer = ref(weakcontainer) | |
def __enter__(self): | |
w = self.weakcontainer() | |
if w is not None: | |
w._iterating.add(self) | |
return self | |
def __exit__(self, e, t, b): | |
w = self.weakcontainer() | |
if w is not None: | |
s = w._iterating | |
s.remove(self) | |
if not s: | |
w._commit_removals() | |
class WeakSet: | |
def __init__(self, data=None): | |
self.data = set() | |
def _remove(item, selfref=ref(self)): | |
self = selfref() | |
if self is not None: | |
if self._iterating: | |
self._pending_removals.append(item) | |
else: | |
self.data.discard(item) | |
self._remove = _remove | |
# A list of keys to be removed | |
self._pending_removals = [] | |
self._iterating = set() | |
if data is not None: | |
self.update(data) | |
def _commit_removals(self): | |
l = self._pending_removals | |
discard = self.data.discard | |
while l: | |
discard(l.pop()) | |
def __iter__(self): | |
with _IterationGuard(self): | |
for itemref in self.data: | |
item = itemref() | |
if item is not None: | |
# Caveat: the iterator will keep a strong reference to | |
# `item` until it is resumed or closed. | |
yield item | |
def __len__(self): | |
return len(self.data) - len(self._pending_removals) | |
def __contains__(self, item): | |
try: | |
wr = ref(item) | |
except TypeError: | |
return False | |
return wr in self.data | |
def __reduce__(self): | |
return (self.__class__, (list(self),), | |
getattr(self, '__dict__', None)) | |
def add(self, item): | |
if self._pending_removals: | |
self._commit_removals() | |
self.data.add(ref(item, self._remove)) | |
def clear(self): | |
if self._pending_removals: | |
self._commit_removals() | |
self.data.clear() | |
def copy(self): | |
return self.__class__(self) | |
def pop(self): | |
if self._pending_removals: | |
self._commit_removals() | |
while True: | |
try: | |
itemref = self.data.pop() | |
except KeyError: | |
raise KeyError('pop from empty WeakSet') | |
item = itemref() | |
if item is not None: | |
return item | |
def remove(self, item): | |
if self._pending_removals: | |
self._commit_removals() | |
self.data.remove(ref(item)) | |
def discard(self, item): | |
if self._pending_removals: | |
self._commit_removals() | |
self.data.discard(ref(item)) | |
def update(self, other): | |
if self._pending_removals: | |
self._commit_removals() | |
for element in other: | |
self.add(element) | |
def __ior__(self, other): | |
self.update(other) | |
return self | |
def difference(self, other): | |
newset = self.copy() | |
newset.difference_update(other) | |
return newset | |
__sub__ = difference | |
def difference_update(self, other): | |
self.__isub__(other) | |
def __isub__(self, other): | |
if self._pending_removals: | |
self._commit_removals() | |
if self is other: | |
self.data.clear() | |
else: | |
self.data.difference_update(ref(item) for item in other) | |
return self | |
def intersection(self, other): | |
return self.__class__(item for item in other if item in self) | |
__and__ = intersection | |
def intersection_update(self, other): | |
self.__iand__(other) | |
def __iand__(self, other): | |
if self._pending_removals: | |
self._commit_removals() | |
self.data.intersection_update(ref(item) for item in other) | |
return self | |
def issubset(self, other): | |
return self.data.issubset(ref(item) for item in other) | |
__le__ = issubset | |
def __lt__(self, other): | |
return self.data < set(ref(item) for item in other) | |
def issuperset(self, other): | |
return self.data.issuperset(ref(item) for item in other) | |
__ge__ = issuperset | |
def __gt__(self, other): | |
return self.data > set(ref(item) for item in other) | |
def __eq__(self, other): | |
if not isinstance(other, self.__class__): | |
return NotImplemented | |
return self.data == set(ref(item) for item in other) | |
def symmetric_difference(self, other): | |
newset = self.copy() | |
newset.symmetric_difference_update(other) | |
return newset | |
__xor__ = symmetric_difference | |
def symmetric_difference_update(self, other): | |
self.__ixor__(other) | |
def __ixor__(self, other): | |
if self._pending_removals: | |
self._commit_removals() | |
if self is other: | |
self.data.clear() | |
else: | |
self.data.symmetric_difference_update(ref(item, self._remove) for item in other) | |
return self | |
def union(self, other): | |
return self.__class__(e for s in (self, other) for e in s) | |
__or__ = union | |
def isdisjoint(self, other): | |
return len(self.intersection(other)) == 0 |
# Copyright 2007 Google, Inc. All Rights Reserved. | |
# Licensed to PSF under a Contributor Agreement. | |
"""Abstract Base Classes (ABCs) according to PEP 3119.""" | |
from _weakrefset import WeakSet | |
def abstractmethod(funcobj): | |
"""A decorator indicating abstract methods. | |
Requires that the metaclass is ABCMeta or derived from it. A | |
class that has a metaclass derived from ABCMeta cannot be | |
instantiated unless all of its abstract methods are overridden. | |
The abstract methods can be called using any of the normal | |
'super' call mechanisms. | |
Usage: | |
class C(metaclass=ABCMeta): | |
@abstractmethod | |
def my_abstract_method(self, ...): | |
... | |
""" | |
funcobj.__isabstractmethod__ = True | |
return funcobj | |
class abstractclassmethod(classmethod): | |
""" | |
A decorator indicating abstract classmethods. | |
Similar to abstractmethod. | |
Usage: | |
class C(metaclass=ABCMeta): | |
@abstractclassmethod | |
def my_abstract_classmethod(cls, ...): | |
... | |
'abstractclassmethod' is deprecated. Use 'classmethod' with | |
'abstractmethod' instead. | |
""" | |
__isabstractmethod__ = True | |
def __init__(self, callable): | |
callable.__isabstractmethod__ = True | |
super().__init__(callable) | |
class abstractstaticmethod(staticmethod): | |
""" | |
A decorator indicating abstract staticmethods. | |
Similar to abstractmethod. | |
Usage: | |
class C(metaclass=ABCMeta): | |
@abstractstaticmethod | |
def my_abstract_staticmethod(...): | |
... | |
'abstractstaticmethod' is deprecated. Use 'staticmethod' with | |
'abstractmethod' instead. | |
""" | |
__isabstractmethod__ = True | |
def __init__(self, callable): | |
callable.__isabstractmethod__ = True | |
super().__init__(callable) | |
class abstractproperty(property): | |
""" | |
A decorator indicating abstract properties. | |
Requires that the metaclass is ABCMeta or derived from it. A | |
class that has a metaclass derived from ABCMeta cannot be | |
instantiated unless all of its abstract properties are overridden. | |
The abstract properties can be called using any of the normal | |
'super' call mechanisms. | |
Usage: | |
class C(metaclass=ABCMeta): | |
@abstractproperty | |
def my_abstract_property(self): | |
... | |
This defines a read-only property; you can also define a read-write | |
abstract property using the 'long' form of property declaration: | |
class C(metaclass=ABCMeta): | |
def getx(self): ... | |
def setx(self, value): ... | |
x = abstractproperty(getx, setx) | |
'abstractproperty' is deprecated. Use 'property' with 'abstractmethod' | |
instead. | |
""" | |
__isabstractmethod__ = True | |
class ABCMeta(type): | |
"""Metaclass for defining Abstract Base Classes (ABCs). | |
Use this metaclass to create an ABC. An ABC can be subclassed | |
directly, and then acts as a mix-in class. You can also register | |
unrelated concrete classes (even built-in classes) and unrelated | |
ABCs as 'virtual subclasses' -- these and their descendants will | |
be considered subclasses of the registering ABC by the built-in | |
issubclass() function, but the registering ABC won't show up in | |
their MRO (Method Resolution Order) nor will method | |
implementations defined by the registering ABC be callable (not | |
even via super()). | |
""" | |
# A global counter that is incremented each time a class is | |
# registered as a virtual subclass of anything. It forces the | |
# negative cache to be cleared before its next use. | |
# Note: this counter is private. Use `abc.get_cache_token()` for | |
# external code. | |
_abc_invalidation_counter = 0 | |
def __new__(mcls, name, bases, namespace): | |
cls = super().__new__(mcls, name, bases, namespace) | |
# Compute set of abstract method names | |
abstracts = {name | |
for name, value in namespace.items() | |
if getattr(value, "__isabstractmethod__", False)} | |
for base in bases: | |
for name in getattr(base, "__abstractmethods__", set()): | |
value = getattr(cls, name, None) | |
if getattr(value, "__isabstractmethod__", False): | |
abstracts.add(name) | |
cls.__abstractmethods__ = frozenset(abstracts) | |
# Set up inheritance registry | |
cls._abc_registry = WeakSet() | |
cls._abc_cache = WeakSet() | |
cls._abc_negative_cache = WeakSet() | |
cls._abc_negative_cache_version = ABCMeta._abc_invalidation_counter | |
return cls | |
def register(cls, subclass): | |
"""Register a virtual subclass of an ABC. | |
Returns the subclass, to allow usage as a class decorator. | |
""" | |
if not isinstance(subclass, type): | |
raise TypeError("Can only register classes") | |
if issubclass(subclass, cls): | |
return subclass # Already a subclass | |
# Subtle: test for cycles *after* testing for "already a subclass"; | |
# this means we allow X.register(X) and interpret it as a no-op. | |
if issubclass(cls, subclass): | |
# This would create a cycle, which is bad for the algorithm below | |
raise RuntimeError("Refusing to create an inheritance cycle") | |
cls._abc_registry.add(subclass) | |
ABCMeta._abc_invalidation_counter += 1 # Invalidate negative cache | |
return subclass | |
def _dump_registry(cls, file=None): | |
"""Debug helper to print the ABC registry.""" | |
print("Class: %s.%s" % (cls.__module__, cls.__qualname__), file=file) | |
print("Inv.counter: %s" % ABCMeta._abc_invalidation_counter, file=file) | |
for name in sorted(cls.__dict__.keys()): | |
if name.startswith("_abc_"): | |
value = getattr(cls, name) | |
print("%s: %r" % (name, value), file=file) | |
def __instancecheck__(cls, instance): | |
"""Override for isinstance(instance, cls).""" | |
# Inline the cache checking | |
subclass = instance.__class__ | |
if subclass in cls._abc_cache: | |
return True | |
subtype = type(instance) | |
if subtype is subclass: | |
if (cls._abc_negative_cache_version == | |
ABCMeta._abc_invalidation_counter and | |
subclass in cls._abc_negative_cache): | |
return False | |
# Fall back to the subclass check. | |
return cls.__subclasscheck__(subclass) | |
return any(cls.__subclasscheck__(c) for c in {subclass, subtype}) | |
def __subclasscheck__(cls, subclass): | |
"""Override for issubclass(subclass, cls).""" | |
# Check cache | |
if subclass in cls._abc_cache: | |
return True | |
# Check negative cache; may have to invalidate | |
if cls._abc_negative_cache_version < ABCMeta._abc_invalidation_counter: | |
# Invalidate the negative cache | |
cls._abc_negative_cache = WeakSet() | |
cls._abc_negative_cache_version = ABCMeta._abc_invalidation_counter | |
elif subclass in cls._abc_negative_cache: | |
return False | |
# Check the subclass hook | |
ok = cls.__subclasshook__(subclass) | |
if ok is not NotImplemented: | |
assert isinstance(ok, bool) | |
if ok: | |
cls._abc_cache.add(subclass) | |
else: | |
cls._abc_negative_cache.add(subclass) | |
return ok | |
# Check if it's a direct subclass | |
if cls in getattr(subclass, '__mro__', ()): | |
cls._abc_cache.add(subclass) | |
return True | |
# Check if it's a subclass of a registered class (recursive) | |
for rcls in cls._abc_registry: | |
if issubclass(subclass, rcls): | |
cls._abc_cache.add(subclass) | |
return True | |
# Check if it's a subclass of a subclass (recursive) | |
for scls in cls.__subclasses__(): | |
if issubclass(subclass, scls): | |
cls._abc_cache.add(subclass) | |
return True | |
# No dice; update negative cache | |
cls._abc_negative_cache.add(subclass) | |
return False | |
class ABC(metaclass=ABCMeta): | |
"""Helper class that provides a standard way to create an ABC using | |
inheritance. | |
""" | |
pass | |
def get_cache_token(): | |
"""Returns the current ABC cache token. | |
The token is an opaque object (supporting equality testing) identifying the | |
current version of the ABC cache for virtual subclasses. The token changes | |
with every call to ``register()`` on any ABC. | |
""" | |
return ABCMeta._abc_invalidation_counter |
#! /usr/bin/python3.5 | |
"""Base16, Base32, Base64 (RFC 3548), Base85 and Ascii85 data encodings""" | |
# Modified 04-Oct-1995 by Jack Jansen to use binascii module | |
# Modified 30-Dec-2003 by Barry Warsaw to add full RFC 3548 support | |
# Modified 22-May-2007 by Guido van Rossum to use bytes everywhere | |
import re | |
import struct | |
import binascii | |
__all__ = [ | |
# Legacy interface exports traditional RFC 2045 Base64 encodings | |
'encode', 'decode', 'encodebytes', 'decodebytes', | |
# Generalized interface for other encodings | |
'b64encode', 'b64decode', 'b32encode', 'b32decode', | |
'b16encode', 'b16decode', | |
# Base85 and Ascii85 encodings | |
'b85encode', 'b85decode', 'a85encode', 'a85decode', | |
# Standard Base64 encoding | |
'standard_b64encode', 'standard_b64decode', | |
# Some common Base64 alternatives. As referenced by RFC 3458, see thread | |
# starting at: | |
# | |
# http://zgp.org/pipermail/p2p-hackers/2001-September/000316.html | |
'urlsafe_b64encode', 'urlsafe_b64decode', | |
] | |
bytes_types = (bytes, bytearray) # Types acceptable as binary data | |
def _bytes_from_decode_data(s): | |
if isinstance(s, str): | |
try: | |
return s.encode('ascii') | |
except UnicodeEncodeError: | |
raise ValueError('string argument should contain only ASCII characters') | |
if isinstance(s, bytes_types): | |
return s | |
try: | |
return memoryview(s).tobytes() | |
except TypeError: | |
raise TypeError("argument should be a bytes-like object or ASCII " | |
"string, not %r" % s.__class__.__name__) from None | |
# Base64 encoding/decoding uses binascii | |
def b64encode(s, altchars=None): | |
"""Encode the bytes-like object s using Base64 and return a bytes object. | |
Optional altchars should be a byte string of length 2 which specifies an | |
alternative alphabet for the '+' and '/' characters. This allows an | |
application to e.g. generate url or filesystem safe Base64 strings. | |
""" | |
# Strip off the trailing newline | |
encoded = binascii.b2a_base64(s)[:-1] | |
if altchars is not None: | |
assert len(altchars) == 2, repr(altchars) | |
return encoded.translate(bytes.maketrans(b'+/', altchars)) | |
return encoded | |
def b64decode(s, altchars=None, validate=False): | |
"""Decode the Base64 encoded bytes-like object or ASCII string s. | |
Optional altchars must be a bytes-like object or ASCII string of length 2 | |
which specifies the alternative alphabet used instead of the '+' and '/' | |
characters. | |
The result is returned as a bytes object. A binascii.Error is raised if | |
s is incorrectly padded. | |
If validate is False (the default), characters that are neither in the | |
normal base-64 alphabet nor the alternative alphabet are discarded prior | |
to the padding check. If validate is True, these non-alphabet characters | |
in the input result in a binascii.Error. | |
""" | |
s = _bytes_from_decode_data(s) | |
if altchars is not None: | |
altchars = _bytes_from_decode_data(altchars) | |
assert len(altchars) == 2, repr(altchars) | |
s = s.translate(bytes.maketrans(altchars, b'+/')) | |
if validate and not re.match(b'^[A-Za-z0-9+/]*={0,2}$', s): | |
raise binascii.Error('Non-base64 digit found') | |
return binascii.a2b_base64(s) | |
def standard_b64encode(s): | |
"""Encode bytes-like object s using the standard Base64 alphabet. | |
The result is returned as a bytes object. | |
""" | |
return b64encode(s) | |
def standard_b64decode(s): | |
"""Decode bytes encoded with the standard Base64 alphabet. | |
Argument s is a bytes-like object or ASCII string to decode. The result | |
is returned as a bytes object. A binascii.Error is raised if the input | |
is incorrectly padded. Characters that are not in the standard alphabet | |
are discarded prior to the padding check. | |
""" | |
return b64decode(s) | |
_urlsafe_encode_translation = bytes.maketrans(b'+/', b'-_') | |
_urlsafe_decode_translation = bytes.maketrans(b'-_', b'+/') | |
def urlsafe_b64encode(s): | |
"""Encode bytes using the URL- and filesystem-safe Base64 alphabet. | |
Argument s is a bytes-like object to encode. The result is returned as a | |
bytes object. The alphabet uses '-' instead of '+' and '_' instead of | |
'/'. | |
""" | |
return b64encode(s).translate(_urlsafe_encode_translation) | |
def urlsafe_b64decode(s): | |
"""Decode bytes using the URL- and filesystem-safe Base64 alphabet. | |
Argument s is a bytes-like object or ASCII string to decode. The result | |
is returned as a bytes object. A binascii.Error is raised if the input | |
is incorrectly padded. Characters that are not in the URL-safe base-64 | |
alphabet, and are not a plus '+' or slash '/', are discarded prior to the | |
padding check. | |
The alphabet uses '-' instead of '+' and '_' instead of '/'. | |
""" | |
s = _bytes_from_decode_data(s) | |
s = s.translate(_urlsafe_decode_translation) | |
return b64decode(s) | |
# Base32 encoding/decoding must be done in Python | |
_b32alphabet = b'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567' | |
_b32tab2 = None | |
_b32rev = None | |
def b32encode(s): | |
"""Encode the bytes-like object s using Base32 and return a bytes object. | |
""" | |
global _b32tab2 | |
# Delay the initialization of the table to not waste memory | |
# if the function is never called | |
if _b32tab2 is None: | |
b32tab = [bytes((i,)) for i in _b32alphabet] | |
_b32tab2 = [a + b for a in b32tab for b in b32tab] | |
b32tab = None | |
if not isinstance(s, bytes_types): | |
s = memoryview(s).tobytes() | |
leftover = len(s) % 5 | |
# Pad the last quantum with zero bits if necessary | |
if leftover: | |
s = s + bytes(5 - leftover) # Don't use += ! | |
encoded = bytearray() | |
from_bytes = int.from_bytes | |
b32tab2 = _b32tab2 | |
for i in range(0, len(s), 5): | |
c = from_bytes(s[i: i + 5], 'big') | |
encoded += (b32tab2[c >> 30] + # bits 1 - 10 | |
b32tab2[(c >> 20) & 0x3ff] + # bits 11 - 20 | |
b32tab2[(c >> 10) & 0x3ff] + # bits 21 - 30 | |
b32tab2[c & 0x3ff] # bits 31 - 40 | |
) | |
# Adjust for any leftover partial quanta | |
if leftover == 1: | |
encoded[-6:] = b'======' | |
elif leftover == 2: | |
encoded[-4:] = b'====' | |
elif leftover == 3: | |
encoded[-3:] = b'===' | |
elif leftover == 4: | |
encoded[-1:] = b'=' | |
return bytes(encoded) | |
def b32decode(s, casefold=False, map01=None): | |
"""Decode the Base32 encoded bytes-like object or ASCII string s. | |
Optional casefold is a flag specifying whether a lowercase alphabet is | |
acceptable as input. For security purposes, the default is False. | |
RFC 3548 allows for optional mapping of the digit 0 (zero) to the | |
letter O (oh), and for optional mapping of the digit 1 (one) to | |
either the letter I (eye) or letter L (el). The optional argument | |
map01 when not None, specifies which letter the digit 1 should be | |
mapped to (when map01 is not None, the digit 0 is always mapped to | |
the letter O). For security purposes the default is None, so that | |
0 and 1 are not allowed in the input. | |
The result is returned as a bytes object. A binascii.Error is raised if | |
the input is incorrectly padded or if there are non-alphabet | |
characters present in the input. | |
""" | |
global _b32rev | |
# Delay the initialization of the table to not waste memory | |
# if the function is never called | |
if _b32rev is None: | |
_b32rev = {v: k for k, v in enumerate(_b32alphabet)} | |
s = _bytes_from_decode_data(s) | |
if len(s) % 8: | |
raise binascii.Error('Incorrect padding') | |
# Handle section 2.4 zero and one mapping. The flag map01 will be either | |
# False, or the character to map the digit 1 (one) to. It should be | |
# either L (el) or I (eye). | |
if map01 is not None: | |
map01 = _bytes_from_decode_data(map01) | |
assert len(map01) == 1, repr(map01) | |
s = s.translate(bytes.maketrans(b'01', b'O' + map01)) | |
if casefold: | |
s = s.upper() | |
# Strip off pad characters from the right. We need to count the pad | |
# characters because this will tell us how many null bytes to remove from | |
# the end of the decoded string. | |
l = len(s) | |
s = s.rstrip(b'=') | |
padchars = l - len(s) | |
# Now decode the full quanta | |
decoded = bytearray() | |
b32rev = _b32rev | |
for i in range(0, len(s), 8): | |
quanta = s[i: i + 8] | |
acc = 0 | |
try: | |
for c in quanta: | |
acc = (acc << 5) + b32rev[c] | |
except KeyError: | |
raise binascii.Error('Non-base32 digit found') from None | |
decoded += acc.to_bytes(5, 'big') | |
# Process the last, partial quanta | |
if padchars: | |
acc <<= 5 * padchars | |
last = acc.to_bytes(5, 'big') | |
if padchars == 1: | |
decoded[-5:] = last[:-1] | |
elif padchars == 3: | |
decoded[-5:] = last[:-2] | |
elif padchars == 4: | |
decoded[-5:] = last[:-3] | |
elif padchars == 6: | |
decoded[-5:] = last[:-4] | |
else: | |
raise binascii.Error('Incorrect padding') | |
return bytes(decoded) | |
# RFC 3548, Base 16 Alphabet specifies uppercase, but hexlify() returns | |
# lowercase. The RFC also recommends against accepting input case | |
# insensitively. | |
def b16encode(s): | |
"""Encode the bytes-like object s using Base16 and return a bytes object. | |
""" | |
return binascii.hexlify(s).upper() | |
def b16decode(s, casefold=False): | |
"""Decode the Base16 encoded bytes-like object or ASCII string s. | |
Optional casefold is a flag specifying whether a lowercase alphabet is | |
acceptable as input. For security purposes, the default is False. | |
The result is returned as a bytes object. A binascii.Error is raised if | |
s is incorrectly padded or if there are non-alphabet characters present | |
in the input. | |
""" | |
s = _bytes_from_decode_data(s) | |
if casefold: | |
s = s.upper() | |
if re.search(b'[^0-9A-F]', s): | |
raise binascii.Error('Non-base16 digit found') | |
return binascii.unhexlify(s) | |
# | |
# Ascii85 encoding/decoding | |
# | |
_a85chars = None | |
_a85chars2 = None | |
_A85START = b"<~" | |
_A85END = b"~>" | |
def _85encode(b, chars, chars2, pad=False, foldnuls=False, foldspaces=False): | |
# Helper function for a85encode and b85encode | |
if not isinstance(b, bytes_types): | |
b = memoryview(b).tobytes() | |
padding = (-len(b)) % 4 | |
if padding: | |
b = b + b'\0' * padding | |
words = struct.Struct('!%dI' % (len(b) // 4)).unpack(b) | |
chunks = [b'z' if foldnuls and not word else | |
b'y' if foldspaces and word == 0x20202020 else | |
(chars2[word // 614125] + | |
chars2[word // 85 % 7225] + | |
chars[word % 85]) | |
for word in words] | |
if padding and not pad: | |
if chunks[-1] == b'z': | |
chunks[-1] = chars[0] * 5 | |
chunks[-1] = chunks[-1][:-padding] | |
return b''.join(chunks) | |
def a85encode(b, *, foldspaces=False, wrapcol=0, pad=False, adobe=False): | |
"""Encode bytes-like object b using Ascii85 and return a bytes object. | |
foldspaces is an optional flag that uses the special short sequence 'y' | |
instead of 4 consecutive spaces (ASCII 0x20) as supported by 'btoa'. This | |
feature is not supported by the "standard" Adobe encoding. | |
wrapcol controls whether the output should have newline (b'\\n') characters | |
added to it. If this is non-zero, each output line will be at most this | |
many characters long. | |
pad controls whether the input is padded to a multiple of 4 before | |
encoding. Note that the btoa implementation always pads. | |
adobe controls whether the encoded byte sequence is framed with <~ and ~>, | |
which is used by the Adobe implementation. | |
""" | |
global _a85chars, _a85chars2 | |
# Delay the initialization of tables to not waste memory | |
# if the function is never called | |
if _a85chars is None: | |
_a85chars = [bytes((i,)) for i in range(33, 118)] | |
_a85chars2 = [(a + b) for a in _a85chars for b in _a85chars] | |
result = _85encode(b, _a85chars, _a85chars2, pad, True, foldspaces) | |
if adobe: | |
result = _A85START + result | |
if wrapcol: | |
wrapcol = max(2 if adobe else 1, wrapcol) | |
chunks = [result[i: i + wrapcol] | |
for i in range(0, len(result), wrapcol)] | |
if adobe: | |
if len(chunks[-1]) + 2 > wrapcol: | |
chunks.append(b'') | |
result = b'\n'.join(chunks) | |
if adobe: | |
result += _A85END | |
return result | |
def a85decode(b, *, foldspaces=False, adobe=False, ignorechars=b' \t\n\r\v'): | |
"""Decode the Ascii85 encoded bytes-like object or ASCII string b. | |
foldspaces is a flag that specifies whether the 'y' short sequence should be | |
accepted as shorthand for 4 consecutive spaces (ASCII 0x20). This feature is | |
not supported by the "standard" Adobe encoding. | |
adobe controls whether the input sequence is in Adobe Ascii85 format (i.e. | |
is framed with <~ and ~>). | |
ignorechars should be a byte string containing characters to ignore from the | |
input. This should only contain whitespace characters, and by default | |
contains all whitespace characters in ASCII. | |
The result is returned as a bytes object. | |
""" | |
b = _bytes_from_decode_data(b) | |
if adobe: | |
if not b.endswith(_A85END): | |
raise ValueError( | |
"Ascii85 encoded byte sequences must end " | |
"with {!r}".format(_A85END) | |
) | |
if b.startswith(_A85START): | |
b = b[2:-2] # Strip off start/end markers | |
else: | |
b = b[:-2] | |
# | |
# We have to go through this stepwise, so as to ignore spaces and handle | |
# special short sequences | |
# | |
packI = struct.Struct('!I').pack | |
decoded = [] | |
decoded_append = decoded.append | |
curr = [] | |
curr_append = curr.append | |
curr_clear = curr.clear | |
for x in b + b'u' * 4: | |
if b'!'[0] <= x <= b'u'[0]: | |
curr_append(x) | |
if len(curr) == 5: | |
acc = 0 | |
for x in curr: | |
acc = 85 * acc + (x - 33) | |
try: | |
decoded_append(packI(acc)) | |
except struct.error: | |
raise ValueError('Ascii85 overflow') from None | |
curr_clear() | |
elif x == b'z'[0]: | |
if curr: | |
raise ValueError('z inside Ascii85 5-tuple') | |
decoded_append(b'\0\0\0\0') | |
elif foldspaces and x == b'y'[0]: | |
if curr: | |
raise ValueError('y inside Ascii85 5-tuple') | |
decoded_append(b'\x20\x20\x20\x20') | |
elif x in ignorechars: | |
# Skip whitespace | |
continue | |
else: | |
raise ValueError('Non-Ascii85 digit found: %c' % x) | |
result = b''.join(decoded) | |
padding = 4 - len(curr) | |
if padding: | |
# Throw away the extra padding | |
result = result[:-padding] | |
return result | |
# The following code is originally taken (with permission) from Mercurial | |
_b85alphabet = (b"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" | |
b"abcdefghijklmnopqrstuvwxyz!#$%&()*+-;<=>?@^_`{|}~") | |
_b85chars = None | |
_b85chars2 = None | |
_b85dec = None | |
def b85encode(b, pad=False): | |
"""Encode bytes-like object b in base85 format and return a bytes object. | |
If pad is true, the input is padded with b'\\0' so its length is a multiple of | |
4 bytes before encoding. | |
""" | |
global _b85chars, _b85chars2 | |
# Delay the initialization of tables to not waste memory | |
# if the function is never called | |
if _b85chars is None: | |
_b85chars = [bytes((i,)) for i in _b85alphabet] | |
_b85chars2 = [(a + b) for a in _b85chars for b in _b85chars] | |
return _85encode(b, _b85chars, _b85chars2, pad) | |
def b85decode(b): | |
"""Decode the base85-encoded bytes-like object or ASCII string b | |
The result is returned as a bytes object. | |
""" | |
global _b85dec | |
# Delay the initialization of tables to not waste memory | |
# if the function is never called | |
if _b85dec is None: | |
_b85dec = [None] * 256 | |
for i, c in enumerate(_b85alphabet): | |
_b85dec[c] = i | |
b = _bytes_from_decode_data(b) | |
padding = (-len(b)) % 5 | |
b = b + b'~' * padding | |
out = [] | |
packI = struct.Struct('!I').pack | |
for i in range(0, len(b), 5): | |
chunk = b[i:i + 5] | |
acc = 0 | |
try: | |
for c in chunk: | |
acc = acc * 85 + _b85dec[c] | |
except TypeError: | |
for j, c in enumerate(chunk): | |
if _b85dec[c] is None: | |
raise ValueError('bad base85 character at position %d' | |
% (i + j)) from None | |
raise | |
try: | |
out.append(packI(acc)) | |
except struct.error: | |
raise ValueError('base85 overflow in hunk starting at byte %d' | |
% i) from None | |
result = b''.join(out) | |
if padding: | |
result = result[:-padding] | |
return result | |
# Legacy interface. This code could be cleaned up since I don't believe | |
# binascii has any line length limitations. It just doesn't seem worth it | |
# though. The files should be opened in binary mode. | |
MAXLINESIZE = 76 # Excluding the CRLF | |
MAXBINSIZE = (MAXLINESIZE//4)*3 | |
def encode(input, output): | |
"""Encode a file; input and output are binary files.""" | |
while True: | |
s = input.read(MAXBINSIZE) | |
if not s: | |
break | |
while len(s) < MAXBINSIZE: | |
ns = input.read(MAXBINSIZE-len(s)) | |
if not ns: | |
break | |
s += ns | |
line = binascii.b2a_base64(s) | |
output.write(line) | |
def decode(input, output): | |
"""Decode a file; input and output are binary files.""" | |
while True: | |
line = input.readline() | |
if not line: | |
break | |
s = binascii.a2b_base64(line) | |
output.write(s) | |
def _input_type_check(s): | |
try: | |
m = memoryview(s) | |
except TypeError as err: | |
msg = "expected bytes-like object, not %s" % s.__class__.__name__ | |
raise TypeError(msg) from err | |
if m.format not in ('c', 'b', 'B'): | |
msg = ("expected single byte elements, not %r from %s" % | |
(m.format, s.__class__.__name__)) | |
raise TypeError(msg) | |
if m.ndim != 1: | |
msg = ("expected 1-D data, not %d-D data from %s" % | |
(m.ndim, s.__class__.__name__)) | |
raise TypeError(msg) | |
def encodebytes(s): | |
"""Encode a bytestring into a bytes object containing multiple lines | |
of base-64 data.""" | |
_input_type_check(s) | |
pieces = [] | |
for i in range(0, len(s), MAXBINSIZE): | |
chunk = s[i : i + MAXBINSIZE] | |
pieces.append(binascii.b2a_base64(chunk)) | |
return b"".join(pieces) | |
def encodestring(s): | |
"""Legacy alias of encodebytes().""" | |
import warnings | |
warnings.warn("encodestring() is a deprecated alias, use encodebytes()", | |
DeprecationWarning, 2) | |
return encodebytes(s) | |
def decodebytes(s): | |
"""Decode a bytestring of base-64 data into a bytes object.""" | |
_input_type_check(s) | |
return binascii.a2b_base64(s) | |
def decodestring(s): | |
"""Legacy alias of decodebytes().""" | |
import warnings | |
warnings.warn("decodestring() is a deprecated alias, use decodebytes()", | |
DeprecationWarning, 2) | |
return decodebytes(s) | |
# Usable as a script... | |
def main(): | |
"""Small main program""" | |
import sys, getopt | |
try: | |
opts, args = getopt.getopt(sys.argv[1:], 'deut') | |
except getopt.error as msg: | |
sys.stdout = sys.stderr | |
print(msg) | |
print("""usage: %s [-d|-e|-u|-t] [file|-] | |
-d, -u: decode | |
-e: encode (default) | |
-t: encode and decode string 'Aladdin:open sesame'"""%sys.argv[0]) | |
sys.exit(2) | |
func = encode | |
for o, a in opts: | |
if o == '-e': func = encode | |
if o == '-d': func = decode | |
if o == '-u': func = decode | |
if o == '-t': test(); return | |
if args and args[0] != '-': | |
with open(args[0], 'rb') as f: | |
func(f, sys.stdout.buffer) | |
else: | |
func(sys.stdin.buffer, sys.stdout.buffer) | |
def test(): | |
s0 = b"Aladdin:open sesame" | |
print(repr(s0)) | |
s1 = encodebytes(s0) | |
print(repr(s1)) | |
s2 = decodebytes(s1) | |
print(repr(s2)) | |
assert s0 == s2 | |
if __name__ == '__main__': | |
main() |
"""Bisection algorithms.""" | |
def insort_right(a, x, lo=0, hi=None): | |
"""Insert item x in list a, and keep it sorted assuming a is sorted. | |
If x is already in a, insert it to the right of the rightmost x. | |
Optional args lo (default 0) and hi (default len(a)) bound the | |
slice of a to be searched. | |
""" | |
if lo < 0: | |
raise ValueError('lo must be non-negative') | |
if hi is None: | |
hi = len(a) | |
while lo < hi: | |
mid = (lo+hi)//2 | |
if x < a[mid]: hi = mid | |
else: lo = mid+1 | |
a.insert(lo, x) | |
insort = insort_right # backward compatibility | |
def bisect_right(a, x, lo=0, hi=None): | |
"""Return the index where to insert item x in list a, assuming a is sorted. | |
The return value i is such that all e in a[:i] have e <= x, and all e in | |
a[i:] have e > x. So if x already appears in the list, a.insert(x) will | |
insert just after the rightmost x already there. | |
Optional args lo (default 0) and hi (default len(a)) bound the | |
slice of a to be searched. | |
""" | |
if lo < 0: | |
raise ValueError('lo must be non-negative') | |
if hi is None: | |
hi = len(a) | |
while lo < hi: | |
mid = (lo+hi)//2 | |
if x < a[mid]: hi = mid | |
else: lo = mid+1 | |
return lo | |
bisect = bisect_right # backward compatibility | |
def insort_left(a, x, lo=0, hi=None): | |
"""Insert item x in list a, and keep it sorted assuming a is sorted. | |
If x is already in a, insert it to the left of the leftmost x. | |
Optional args lo (default 0) and hi (default len(a)) bound the | |
slice of a to be searched. | |
""" | |
if lo < 0: | |
raise ValueError('lo must be non-negative') | |
if hi is None: | |
hi = len(a) | |
while lo < hi: | |
mid = (lo+hi)//2 | |
if a[mid] < x: lo = mid+1 | |
else: hi = mid | |
a.insert(lo, x) | |
def bisect_left(a, x, lo=0, hi=None): | |
"""Return the index where to insert item x in list a, assuming a is sorted. | |
The return value i is such that all e in a[:i] have e < x, and all e in | |
a[i:] have e >= x. So if x already appears in the list, a.insert(x) will | |
insert just before the leftmost x already there. | |
Optional args lo (default 0) and hi (default len(a)) bound the | |
slice of a to be searched. | |
""" | |
if lo < 0: | |
raise ValueError('lo must be non-negative') | |
if hi is None: | |
hi = len(a) | |
while lo < hi: | |
mid = (lo+hi)//2 | |
if a[mid] < x: lo = mid+1 | |
else: hi = mid | |
return lo | |
# Overwrite above definitions with a fast C implementation | |
try: | |
from _bisect import * | |
except ImportError: | |
pass |
""" codecs -- Python Codec Registry, API and helpers. | |
Written by Marc-Andre Lemburg ([email protected]). | |
(c) Copyright CNRI, All Rights Reserved. NO WARRANTY. | |
"""#" | |
import builtins, sys | |
### Registry and builtin stateless codec functions | |
try: | |
from _codecs import * | |
except ImportError as why: | |
raise SystemError('Failed to load the builtin codecs: %s' % why) | |
__all__ = ["register", "lookup", "open", "EncodedFile", "BOM", "BOM_BE", | |
"BOM_LE", "BOM32_BE", "BOM32_LE", "BOM64_BE", "BOM64_LE", | |
"BOM_UTF8", "BOM_UTF16", "BOM_UTF16_LE", "BOM_UTF16_BE", | |
"BOM_UTF32", "BOM_UTF32_LE", "BOM_UTF32_BE", | |
"CodecInfo", "Codec", "IncrementalEncoder", "IncrementalDecoder", | |
"StreamReader", "StreamWriter", | |
"StreamReaderWriter", "StreamRecoder", | |
"getencoder", "getdecoder", "getincrementalencoder", | |
"getincrementaldecoder", "getreader", "getwriter", | |
"encode", "decode", "iterencode", "iterdecode", | |
"strict_errors", "ignore_errors", "replace_errors", | |
"xmlcharrefreplace_errors", | |
"backslashreplace_errors", "namereplace_errors", | |
"register_error", "lookup_error"] | |
### Constants | |
# | |
# Byte Order Mark (BOM = ZERO WIDTH NO-BREAK SPACE = U+FEFF) | |
# and its possible byte string values | |
# for UTF8/UTF16/UTF32 output and little/big endian machines | |
# | |
# UTF-8 | |
BOM_UTF8 = b'\xef\xbb\xbf' | |
# UTF-16, little endian | |
BOM_LE = BOM_UTF16_LE = b'\xff\xfe' | |
# UTF-16, big endian | |
BOM_BE = BOM_UTF16_BE = b'\xfe\xff' | |
# UTF-32, little endian | |
BOM_UTF32_LE = b'\xff\xfe\x00\x00' | |
# UTF-32, big endian | |
BOM_UTF32_BE = b'\x00\x00\xfe\xff' | |
if sys.byteorder == 'little': | |
# UTF-16, native endianness | |
BOM = BOM_UTF16 = BOM_UTF16_LE | |
# UTF-32, native endianness | |
BOM_UTF32 = BOM_UTF32_LE | |
else: | |
# UTF-16, native endianness | |
BOM = BOM_UTF16 = BOM_UTF16_BE | |
# UTF-32, native endianness | |
BOM_UTF32 = BOM_UTF32_BE | |
# Old broken names (don't use in new code) | |
BOM32_LE = BOM_UTF16_LE | |
BOM32_BE = BOM_UTF16_BE | |
BOM64_LE = BOM_UTF32_LE | |
BOM64_BE = BOM_UTF32_BE | |
### Codec base classes (defining the API) | |
class CodecInfo(tuple): | |
"""Codec details when looking up the codec registry""" | |
# Private API to allow Python 3.4 to blacklist the known non-Unicode | |
# codecs in the standard library. A more general mechanism to | |
# reliably distinguish test encodings from other codecs will hopefully | |
# be defined for Python 3.5 | |
# | |
# See http://bugs.python.org/issue19619 | |
_is_text_encoding = True # Assume codecs are text encodings by default | |
def __new__(cls, encode, decode, streamreader=None, streamwriter=None, | |
incrementalencoder=None, incrementaldecoder=None, name=None, | |
*, _is_text_encoding=None): | |
self = tuple.__new__(cls, (encode, decode, streamreader, streamwriter)) | |
self.name = name | |
self.encode = encode | |
self.decode = decode | |
self.incrementalencoder = incrementalencoder | |
self.incrementaldecoder = incrementaldecoder | |
self.streamwriter = streamwriter | |
self.streamreader = streamreader | |
if _is_text_encoding is not None: | |
self._is_text_encoding = _is_text_encoding | |
return self | |
def __repr__(self): | |
return "<%s.%s object for encoding %s at %#x>" % \ | |
(self.__class__.__module__, self.__class__.__qualname__, | |
self.name, id(self)) | |
class Codec: | |
""" Defines the interface for stateless encoders/decoders. | |
The .encode()/.decode() methods may use different error | |
handling schemes by providing the errors argument. These | |
string values are predefined: | |
'strict' - raise a ValueError error (or a subclass) | |
'ignore' - ignore the character and continue with the next | |
'replace' - replace with a suitable replacement character; | |
Python will use the official U+FFFD REPLACEMENT | |
CHARACTER for the builtin Unicode codecs on | |
decoding and '?' on encoding. | |
'surrogateescape' - replace with private code points U+DCnn. | |
'xmlcharrefreplace' - Replace with the appropriate XML | |
character reference (only for encoding). | |
'backslashreplace' - Replace with backslashed escape sequences. | |
'namereplace' - Replace with \\N{...} escape sequences | |
(only for encoding). | |
The set of allowed values can be extended via register_error. | |
""" | |
def encode(self, input, errors='strict'): | |
""" Encodes the object input and returns a tuple (output | |
object, length consumed). | |
errors defines the error handling to apply. It defaults to | |
'strict' handling. | |
The method may not store state in the Codec instance. Use | |
StreamWriter for codecs which have to keep state in order to | |
make encoding efficient. | |
The encoder must be able to handle zero length input and | |
return an empty object of the output object type in this | |
situation. | |
""" | |
raise NotImplementedError | |
def decode(self, input, errors='strict'): | |
""" Decodes the object input and returns a tuple (output | |
object, length consumed). | |
input must be an object which provides the bf_getreadbuf | |
buffer slot. Python strings, buffer objects and memory | |
mapped files are examples of objects providing this slot. | |
errors defines the error handling to apply. It defaults to | |
'strict' handling. | |
The method may not store state in the Codec instance. Use | |
StreamReader for codecs which have to keep state in order to | |
make decoding efficient. | |
The decoder must be able to handle zero length input and | |
return an empty object of the output object type in this | |
situation. | |
""" | |
raise NotImplementedError | |
class IncrementalEncoder(object): | |
""" | |
An IncrementalEncoder encodes an input in multiple steps. The input can | |
be passed piece by piece to the encode() method. The IncrementalEncoder | |
remembers the state of the encoding process between calls to encode(). | |
""" | |
def __init__(self, errors='strict'): | |
""" | |
Creates an IncrementalEncoder instance. | |
The IncrementalEncoder may use different error handling schemes by | |
providing the errors keyword argument. See the module docstring | |
for a list of possible values. | |
""" | |
self.errors = errors | |
self.buffer = "" | |
def encode(self, input, final=False): | |
""" | |
Encodes input and returns the resulting object. | |
""" | |
raise NotImplementedError | |
def reset(self): | |
""" | |
Resets the encoder to the initial state. | |
""" | |
def getstate(self): | |
""" | |
Return the current state of the encoder. | |
""" | |
return 0 | |
def setstate(self, state): | |
""" | |
Set the current state of the encoder. state must have been | |
returned by getstate(). | |
""" | |
class BufferedIncrementalEncoder(IncrementalEncoder): | |
""" | |
This subclass of IncrementalEncoder can be used as the baseclass for an | |
incremental encoder if the encoder must keep some of the output in a | |
buffer between calls to encode(). | |
""" | |
def __init__(self, errors='strict'): | |
IncrementalEncoder.__init__(self, errors) | |
# unencoded input that is kept between calls to encode() | |
self.buffer = "" | |
def _buffer_encode(self, input, errors, final): | |
# Overwrite this method in subclasses: It must encode input | |
# and return an (output, length consumed) tuple | |
raise NotImplementedError | |
def encode(self, input, final=False): | |
# encode input (taking the buffer into account) | |
data = self.buffer + input | |
(result, consumed) = self._buffer_encode(data, self.errors, final) | |
# keep unencoded input until the next call | |
self.buffer = data[consumed:] | |
return result | |
def reset(self): | |
IncrementalEncoder.reset(self) | |
self.buffer = "" | |
def getstate(self): | |
return self.buffer or 0 | |
def setstate(self, state): | |
self.buffer = state or "" | |
class IncrementalDecoder(object): | |
""" | |
An IncrementalDecoder decodes an input in multiple steps. The input can | |
be passed piece by piece to the decode() method. The IncrementalDecoder | |
remembers the state of the decoding process between calls to decode(). | |
""" | |
def __init__(self, errors='strict'): | |
""" | |
Create an IncrementalDecoder instance. | |
The IncrementalDecoder may use different error handling schemes by | |
providing the errors keyword argument. See the module docstring | |
for a list of possible values. | |
""" | |
self.errors = errors | |
def decode(self, input, final=False): | |
""" | |
Decode input and returns the resulting object. | |
""" | |
raise NotImplementedError | |
def reset(self): | |
""" | |
Reset the decoder to the initial state. | |
""" | |
def getstate(self): | |
""" | |
Return the current state of the decoder. | |
This must be a (buffered_input, additional_state_info) tuple. | |
buffered_input must be a bytes object containing bytes that | |
were passed to decode() that have not yet been converted. | |
additional_state_info must be a non-negative integer | |
representing the state of the decoder WITHOUT yet having | |
processed the contents of buffered_input. In the initial state | |
and after reset(), getstate() must return (b"", 0). | |
""" | |
return (b"", 0) | |
def setstate(self, state): | |
""" | |
Set the current state of the decoder. | |
state must have been returned by getstate(). The effect of | |
setstate((b"", 0)) must be equivalent to reset(). | |
""" | |
class BufferedIncrementalDecoder(IncrementalDecoder): | |
""" | |
This subclass of IncrementalDecoder can be used as the baseclass for an | |
incremental decoder if the decoder must be able to handle incomplete | |
byte sequences. | |
""" | |
def __init__(self, errors='strict'): | |
IncrementalDecoder.__init__(self, errors) | |
# undecoded input that is kept between calls to decode() | |
self.buffer = b"" | |
def _buffer_decode(self, input, errors, final): | |
# Overwrite this method in subclasses: It must decode input | |
# and return an (output, length consumed) tuple | |
raise NotImplementedError | |
def decode(self, input, final=False): | |
# decode input (taking the buffer into account) | |
data = self.buffer + input | |
(result, consumed) = self._buffer_decode(data, self.errors, final) | |
# keep undecoded input until the next call | |
self.buffer = data[consumed:] | |
return result | |
def reset(self): | |
IncrementalDecoder.reset(self) | |
self.buffer = b"" | |
def getstate(self): | |
# additional state info is always 0 | |
return (self.buffer, 0) | |
def setstate(self, state): | |
# ignore additional state info | |
self.buffer = state[0] | |
# | |
# The StreamWriter and StreamReader class provide generic working | |
# interfaces which can be used to implement new encoding submodules | |
# very easily. See encodings/utf_8.py for an example on how this is | |
# done. | |
# | |
class StreamWriter(Codec): | |
def __init__(self, stream, errors='strict'): | |
""" Creates a StreamWriter instance. | |
stream must be a file-like object open for writing. | |
The StreamWriter may use different error handling | |
schemes by providing the errors keyword argument. These | |
parameters are predefined: | |
'strict' - raise a ValueError (or a subclass) | |
'ignore' - ignore the character and continue with the next | |
'replace'- replace with a suitable replacement character | |
'xmlcharrefreplace' - Replace with the appropriate XML | |
character reference. | |
'backslashreplace' - Replace with backslashed escape | |
sequences. | |
'namereplace' - Replace with \\N{...} escape sequences. | |
The set of allowed parameter values can be extended via | |
register_error. | |
""" | |
self.stream = stream | |
self.errors = errors | |
def write(self, object): | |
""" Writes the object's contents encoded to self.stream. | |
""" | |
data, consumed = self.encode(object, self.errors) | |
self.stream.write(data) | |
def writelines(self, list): | |
""" Writes the concatenated list of strings to the stream | |
using .write(). | |
""" | |
self.write(''.join(list)) | |
def reset(self): | |
""" Flushes and resets the codec buffers used for keeping state. | |
Calling this method should ensure that the data on the | |
output is put into a clean state, that allows appending | |
of new fresh data without having to rescan the whole | |
stream to recover state. | |
""" | |
pass | |
def seek(self, offset, whence=0): | |
self.stream.seek(offset, whence) | |
if whence == 0 and offset == 0: | |
self.reset() | |
def __getattr__(self, name, | |
getattr=getattr): | |
""" Inherit all other methods from the underlying stream. | |
""" | |
return getattr(self.stream, name) | |
def __enter__(self): | |
return self | |
def __exit__(self, type, value, tb): | |
self.stream.close() | |
### | |
class StreamReader(Codec): | |
charbuffertype = str | |
def __init__(self, stream, errors='strict'): | |
""" Creates a StreamReader instance. | |
stream must be a file-like object open for reading. | |
The StreamReader may use different error handling | |
schemes by providing the errors keyword argument. These | |
parameters are predefined: | |
'strict' - raise a ValueError (or a subclass) | |
'ignore' - ignore the character and continue with the next | |
'replace'- replace with a suitable replacement character | |
'backslashreplace' - Replace with backslashed escape sequences; | |
The set of allowed parameter values can be extended via | |
register_error. | |
""" | |
self.stream = stream | |
self.errors = errors | |
self.bytebuffer = b"" | |
self._empty_charbuffer = self.charbuffertype() | |
self.charbuffer = self._empty_charbuffer | |
self.linebuffer = None | |
def decode(self, input, errors='strict'): | |
raise NotImplementedError | |
def read(self, size=-1, chars=-1, firstline=False): | |
""" Decodes data from the stream self.stream and returns the | |
resulting object. | |
chars indicates the number of decoded code points or bytes to | |
return. read() will never return more data than requested, | |
but it might return less, if there is not enough available. | |
size indicates the approximate maximum number of decoded | |
bytes or code points to read for decoding. The decoder | |
can modify this setting as appropriate. The default value | |
-1 indicates to read and decode as much as possible. size | |
is intended to prevent having to decode huge files in one | |
step. | |
If firstline is true, and a UnicodeDecodeError happens | |
after the first line terminator in the input only the first line | |
will be returned, the rest of the input will be kept until the | |
next call to read(). | |
The method should use a greedy read strategy, meaning that | |
it should read as much data as is allowed within the | |
definition of the encoding and the given size, e.g. if | |
optional encoding endings or state markers are available | |
on the stream, these should be read too. | |
""" | |
# If we have lines cached, first merge them back into characters | |
if self.linebuffer: | |
self.charbuffer = self._empty_charbuffer.join(self.linebuffer) | |
self.linebuffer = None | |
# read until we get the required number of characters (if available) | |
while True: | |
# can the request be satisfied from the character buffer? | |
if chars >= 0: | |
if len(self.charbuffer) >= chars: | |
break | |
elif size >= 0: | |
if len(self.charbuffer) >= size: | |
break | |
# we need more data | |
if size < 0: | |
newdata = self.stream.read() | |
else: | |
newdata = self.stream.read(size) | |
# decode bytes (those remaining from the last call included) | |
data = self.bytebuffer + newdata | |
if not data: | |
break | |
try: | |
newchars, decodedbytes = self.decode(data, self.errors) | |
except UnicodeDecodeError as exc: | |
if firstline: | |
newchars, decodedbytes = \ | |
self.decode(data[:exc.start], self.errors) | |
lines = newchars.splitlines(keepends=True) | |
if len(lines)<=1: | |
raise | |
else: | |
raise | |
# keep undecoded bytes until the next call | |
self.bytebuffer = data[decodedbytes:] | |
# put new characters in the character buffer | |
self.charbuffer += newchars | |
# there was no data available | |
if not newdata: | |
break | |
if chars < 0: | |
# Return everything we've got | |
result = self.charbuffer | |
self.charbuffer = self._empty_charbuffer | |
else: | |
# Return the first chars characters | |
result = self.charbuffer[:chars] | |
self.charbuffer = self.charbuffer[chars:] | |
return result | |
def readline(self, size=None, keepends=True): | |
""" Read one line from the input stream and return the | |
decoded data. | |
size, if given, is passed as size argument to the | |
read() method. | |
""" | |
# If we have lines cached from an earlier read, return | |
# them unconditionally | |
if self.linebuffer: | |
line = self.linebuffer[0] | |
del self.linebuffer[0] | |
if len(self.linebuffer) == 1: | |
# revert to charbuffer mode; we might need more data | |
# next time | |
self.charbuffer = self.linebuffer[0] | |
self.linebuffer = None | |
if not keepends: | |
line = line.splitlines(keepends=False)[0] | |
return line | |
readsize = size or 72 | |
line = self._empty_charbuffer | |
# If size is given, we call read() only once | |
while True: | |
data = self.read(readsize, firstline=True) | |
if data: | |
# If we're at a "\r" read one extra character (which might | |
# be a "\n") to get a proper line ending. If the stream is | |
# temporarily exhausted we return the wrong line ending. | |
if (isinstance(data, str) and data.endswith("\r")) or \ | |
(isinstance(data, bytes) and data.endswith(b"\r")): | |
data += self.read(size=1, chars=1) | |
line += data | |
lines = line.splitlines(keepends=True) | |
if lines: | |
if len(lines) > 1: | |
# More than one line result; the first line is a full line | |
# to return | |
line = lines[0] | |
del lines[0] | |
if len(lines) > 1: | |
# cache the remaining lines | |
lines[-1] += self.charbuffer | |
self.linebuffer = lines | |
self.charbuffer = None | |
else: | |
# only one remaining line, put it back into charbuffer | |
self.charbuffer = lines[0] + self.charbuffer | |
if not keepends: | |
line = line.splitlines(keepends=False)[0] | |
break | |
line0withend = lines[0] | |
line0withoutend = lines[0].splitlines(keepends=False)[0] | |
if line0withend != line0withoutend: # We really have a line end | |
# Put the rest back together and keep it until the next call | |
self.charbuffer = self._empty_charbuffer.join(lines[1:]) + \ | |
self.charbuffer | |
if keepends: | |
line = line0withend | |
else: | |
line = line0withoutend | |
break | |
# we didn't get anything or this was our only try | |
if not data or size is not None: | |
if line and not keepends: | |
line = line.splitlines(keepends=False)[0] | |
break | |
if readsize < 8000: | |
readsize *= 2 | |
return line | |
def readlines(self, sizehint=None, keepends=True): | |
""" Read all lines available on the input stream | |
and return them as a list. | |
Line breaks are implemented using the codec's decoder | |
method and are included in the list entries. | |
sizehint, if given, is ignored since there is no efficient | |
way to finding the true end-of-line. | |
""" | |
data = self.read() | |
return data.splitlines(keepends) | |
def reset(self): | |
""" Resets the codec buffers used for keeping state. | |
Note that no stream repositioning should take place. | |
This method is primarily intended to be able to recover | |
from decoding errors. | |
""" | |
self.bytebuffer = b"" | |
self.charbuffer = self._empty_charbuffer | |
self.linebuffer = None | |
def seek(self, offset, whence=0): | |
""" Set the input stream's current position. | |
Resets the codec buffers used for keeping state. | |
""" | |
self.stream.seek(offset, whence) | |
self.reset() | |
def __next__(self): | |
""" Return the next decoded line from the input stream.""" | |
line = self.readline() | |
if line: | |
return line | |
raise StopIteration | |
def __iter__(self): | |
return self | |
def __getattr__(self, name, | |
getattr=getattr): | |
""" Inherit all other methods from the underlying stream. | |
""" | |
return getattr(self.stream, name) | |
def __enter__(self): | |
return self | |
def __exit__(self, type, value, tb): | |
self.stream.close() | |
### | |
class StreamReaderWriter: | |
""" StreamReaderWriter instances allow wrapping streams which | |
work in both read and write modes. | |
The design is such that one can use the factory functions | |
returned by the codec.lookup() function to construct the | |
instance. | |
""" | |
# Optional attributes set by the file wrappers below | |
encoding = 'unknown' | |
def __init__(self, stream, Reader, Writer, errors='strict'): | |
""" Creates a StreamReaderWriter instance. | |
stream must be a Stream-like object. | |
Reader, Writer must be factory functions or classes | |
providing the StreamReader, StreamWriter interface resp. | |
Error handling is done in the same way as defined for the | |
StreamWriter/Readers. | |
""" | |
self.stream = stream | |
self.reader = Reader(stream, errors) | |
self.writer = Writer(stream, errors) | |
self.errors = errors | |
def read(self, size=-1): | |
return self.reader.read(size) | |
def readline(self, size=None): | |
return self.reader.readline(size) | |
def readlines(self, sizehint=None): | |
return self.reader.readlines(sizehint) | |
def __next__(self): | |
""" Return the next decoded line from the input stream.""" | |
return next(self.reader) | |
def __iter__(self): | |
return self | |
def write(self, data): | |
return self.writer.write(data) | |
def writelines(self, list): | |
return self.writer.writelines(list) | |
def reset(self): | |
self.reader.reset() | |
self.writer.reset() | |
def seek(self, offset, whence=0): | |
self.stream.seek(offset, whence) | |
self.reader.reset() | |
if whence == 0 and offset == 0: | |
self.writer.reset() | |
def __getattr__(self, name, | |
getattr=getattr): | |
""" Inherit all other methods from the underlying stream. | |
""" | |
return getattr(self.stream, name) | |
# these are needed to make "with codecs.open(...)" work properly | |
def __enter__(self): | |
return self | |
def __exit__(self, type, value, tb): | |
self.stream.close() | |
### | |
class StreamRecoder: | |
""" StreamRecoder instances translate data from one encoding to another. | |
They use the complete set of APIs returned by the | |
codecs.lookup() function to implement their task. | |
Data written to the StreamRecoder is first decoded into an | |
intermediate format (depending on the "decode" codec) and then | |
written to the underlying stream using an instance of the provided | |
Writer class. | |
In the other direction, data is read from the underlying stream using | |
a Reader instance and then encoded and returned to the caller. | |
""" | |
# Optional attributes set by the file wrappers below | |
data_encoding = 'unknown' | |
file_encoding = 'unknown' | |
def __init__(self, stream, encode, decode, Reader, Writer, | |
errors='strict'): | |
""" Creates a StreamRecoder instance which implements a two-way | |
conversion: encode and decode work on the frontend (the | |
data visible to .read() and .write()) while Reader and Writer | |
work on the backend (the data in stream). | |
You can use these objects to do transparent | |
transcodings from e.g. latin-1 to utf-8 and back. | |
stream must be a file-like object. | |
encode and decode must adhere to the Codec interface; Reader and | |
Writer must be factory functions or classes providing the | |
StreamReader and StreamWriter interfaces resp. | |
Error handling is done in the same way as defined for the | |
StreamWriter/Readers. | |
""" | |
self.stream = stream | |
self.encode = encode | |
self.decode = decode | |
self.reader = Reader(stream, errors) | |
self.writer = Writer(stream, errors) | |
self.errors = errors | |
def read(self, size=-1): | |
data = self.reader.read(size) | |
data, bytesencoded = self.encode(data, self.errors) | |
return data | |
def readline(self, size=None): | |
if size is None: | |
data = self.reader.readline() | |
else: | |
data = self.reader.readline(size) | |
data, bytesencoded = self.encode(data, self.errors) | |
return data | |
def readlines(self, sizehint=None): | |
data = self.reader.read() | |
data, bytesencoded = self.encode(data, self.errors) | |
return data.splitlines(keepends=True) | |
def __next__(self): | |
""" Return the next decoded line from the input stream.""" | |
data = next(self.reader) | |
data, bytesencoded = self.encode(data, self.errors) | |
return data | |
def __iter__(self): | |
return self | |
def write(self, data): | |
data, bytesdecoded = self.decode(data, self.errors) | |
return self.writer.write(data) | |
def writelines(self, list): | |
data = ''.join(list) | |
data, bytesdecoded = self.decode(data, self.errors) | |
return self.writer.write(data) | |
def reset(self): | |
self.reader.reset() | |
self.writer.reset() | |
def __getattr__(self, name, | |
getattr=getattr): | |
""" Inherit all other methods from the underlying stream. | |
""" | |
return getattr(self.stream, name) | |
def __enter__(self): | |
return self | |
def __exit__(self, type, value, tb): | |
self.stream.close() | |
### Shortcuts | |
def open(filename, mode='r', encoding=None, errors='strict', buffering=1): | |
""" Open an encoded file using the given mode and return | |
a wrapped version providing transparent encoding/decoding. | |
Note: The wrapped version will only accept the object format | |
defined by the codecs, i.e. Unicode objects for most builtin | |
codecs. Output is also codec dependent and will usually be | |
Unicode as well. | |
Underlying encoded files are always opened in binary mode. | |
The default file mode is 'r', meaning to open the file in read mode. | |
encoding specifies the encoding which is to be used for the | |
file. | |
errors may be given to define the error handling. It defaults | |
to 'strict' which causes ValueErrors to be raised in case an | |
encoding error occurs. | |
buffering has the same meaning as for the builtin open() API. | |
It defaults to line buffered. | |
The returned wrapped file object provides an extra attribute | |
.encoding which allows querying the used encoding. This | |
attribute is only available if an encoding was specified as | |
parameter. | |
""" | |
if encoding is not None and \ | |
'b' not in mode: | |
# Force opening of the file in binary mode | |
mode = mode + 'b' | |
file = builtins.open(filename, mode, buffering) | |
if encoding is None: | |
return file | |
info = lookup(encoding) | |
srw = StreamReaderWriter(file, info.streamreader, info.streamwriter, errors) | |
# Add attributes to simplify introspection | |
srw.encoding = encoding | |
return srw | |
def EncodedFile(file, data_encoding, file_encoding=None, errors='strict'): | |
""" Return a wrapped version of file which provides transparent | |
encoding translation. | |
Data written to the wrapped file is decoded according | |
to the given data_encoding and then encoded to the underlying | |
file using file_encoding. The intermediate data type | |
will usually be Unicode but depends on the specified codecs. | |
Bytes read from the file are decoded using file_encoding and then | |
passed back to the caller encoded using data_encoding. | |
If file_encoding is not given, it defaults to data_encoding. | |
errors may be given to define the error handling. It defaults | |
to 'strict' which causes ValueErrors to be raised in case an | |
encoding error occurs. | |
The returned wrapped file object provides two extra attributes | |
.data_encoding and .file_encoding which reflect the given | |
parameters of the same name. The attributes can be used for | |
introspection by Python programs. | |
""" | |
if file_encoding is None: | |
file_encoding = data_encoding | |
data_info = lookup(data_encoding) | |
file_info = lookup(file_encoding) | |
sr = StreamRecoder(file, data_info.encode, data_info.decode, | |
file_info.streamreader, file_info.streamwriter, errors) | |
# Add attributes to simplify introspection | |
sr.data_encoding = data_encoding | |
sr.file_encoding = file_encoding | |
return sr | |
### Helpers for codec lookup | |
def getencoder(encoding): | |
""" Lookup up the codec for the given encoding and return | |
its encoder function. | |
Raises a LookupError in case the encoding cannot be found. | |
""" | |
return lookup(encoding).encode | |
def getdecoder(encoding): | |
""" Lookup up the codec for the given encoding and return | |
its decoder function. | |
Raises a LookupError in case the encoding cannot be found. | |
""" | |
return lookup(encoding).decode | |
def getincrementalencoder(encoding): | |
""" Lookup up the codec for the given encoding and return | |
its IncrementalEncoder class or factory function. | |
Raises a LookupError in case the encoding cannot be found | |
or the codecs doesn't provide an incremental encoder. | |
""" | |
encoder = lookup(encoding).incrementalencoder | |
if encoder is None: | |
raise LookupError(encoding) | |
return encoder | |
def getincrementaldecoder(encoding): | |
""" Lookup up the codec for the given encoding and return | |
its IncrementalDecoder class or factory function. | |
Raises a LookupError in case the encoding cannot be found | |
or the codecs doesn't provide an incremental decoder. | |
""" | |
decoder = lookup(encoding).incrementaldecoder | |
if decoder is None: | |
raise LookupError(encoding) | |
return decoder | |
def getreader(encoding): | |
""" Lookup up the codec for the given encoding and return | |
its StreamReader class or factory function. | |
Raises a LookupError in case the encoding cannot be found. | |
""" | |
return lookup(encoding).streamreader | |
def getwriter(encoding): | |
""" Lookup up the codec for the given encoding and return | |
its StreamWriter class or factory function. | |
Raises a LookupError in case the encoding cannot be found. | |
""" | |
return lookup(encoding).streamwriter | |
def iterencode(iterator, encoding, errors='strict', **kwargs): | |
""" | |
Encoding iterator. | |
Encodes the input strings from the iterator using an IncrementalEncoder. | |
errors and kwargs are passed through to the IncrementalEncoder | |
constructor. | |
""" | |
encoder = getincrementalencoder(encoding)(errors, **kwargs) | |
for input in iterator: | |
output = encoder.encode(input) | |
if output: | |
yield output | |
output = encoder.encode("", True) | |
if output: | |
yield output | |
def iterdecode(iterator, encoding, errors='strict', **kwargs): | |
""" | |
Decoding iterator. | |
Decodes the input strings from the iterator using an IncrementalDecoder. | |
errors and kwargs are passed through to the IncrementalDecoder | |
constructor. | |
""" | |
decoder = getincrementaldecoder(encoding)(errors, **kwargs) | |
for input in iterator: | |
output = decoder.decode(input) | |
if output: | |
yield output | |
output = decoder.decode(b"", True) | |
if output: | |
yield output | |
### Helpers for charmap-based codecs | |
def make_identity_dict(rng): | |
""" make_identity_dict(rng) -> dict | |
Return a dictionary where elements of the rng sequence are | |
mapped to themselves. | |
""" | |
return {i:i for i in rng} | |
def make_encoding_map(decoding_map): | |
""" Creates an encoding map from a decoding map. | |
If a target mapping in the decoding map occurs multiple | |
times, then that target is mapped to None (undefined mapping), | |
causing an exception when encountered by the charmap codec | |
during translation. | |
One example where this happens is cp875.py which decodes | |
multiple character to \\u001a. | |
""" | |
m = {} | |
for k,v in decoding_map.items(): | |
if not v in m: | |
m[v] = k | |
else: | |
m[v] = None | |
return m | |
### error handlers | |
try: | |
strict_errors = lookup_error("strict") | |
ignore_errors = lookup_error("ignore") | |
replace_errors = lookup_error("replace") | |
xmlcharrefreplace_errors = lookup_error("xmlcharrefreplace") | |
backslashreplace_errors = lookup_error("backslashreplace") | |
namereplace_errors = lookup_error("namereplace") | |
except LookupError: | |
# In --disable-unicode builds, these error handler are missing | |
strict_errors = None | |
ignore_errors = None | |
replace_errors = None | |
xmlcharrefreplace_errors = None | |
backslashreplace_errors = None | |
namereplace_errors = None | |
# Tell modulefinder that using codecs probably needs the encodings | |
# package | |
_false = 0 | |
if _false: | |
import encodings | |
### Tests | |
if __name__ == '__main__': | |
# Make stdout translate Latin-1 output into UTF-8 output | |
sys.stdout = EncodedFile(sys.stdout, 'latin-1', 'utf-8') | |
# Have stdin translate Latin-1 input into UTF-8 input | |
sys.stdin = EncodedFile(sys.stdin, 'utf-8', 'latin-1') |
'''This module implements specialized container datatypes providing | |
alternatives to Python's general purpose built-in containers, dict, | |
list, set, and tuple. | |
* namedtuple factory function for creating tuple subclasses with named fields | |
* deque list-like container with fast appends and pops on either end | |
* ChainMap dict-like class for creating a single view of multiple mappings | |
* Counter dict subclass for counting hashable objects | |
* OrderedDict dict subclass that remembers the order entries were added | |
* defaultdict dict subclass that calls a factory function to supply missing values | |
* UserDict wrapper around dictionary objects for easier dict subclassing | |
* UserList wrapper around list objects for easier list subclassing | |
* UserString wrapper around string objects for easier string subclassing | |
''' | |
__all__ = ['deque', 'defaultdict', 'namedtuple', 'UserDict', 'UserList', | |
'UserString', 'Counter', 'OrderedDict', 'ChainMap'] | |
# For backwards compatibility, continue to make the collections ABCs | |
# available through the collections module. | |
from _collections_abc import * | |
import _collections_abc | |
__all__ += _collections_abc.__all__ | |
from operator import itemgetter as _itemgetter, eq as _eq | |
from keyword import iskeyword as _iskeyword | |
import sys as _sys | |
import heapq as _heapq | |
from _weakref import proxy as _proxy | |
from itertools import repeat as _repeat, chain as _chain, starmap as _starmap | |
from reprlib import recursive_repr as _recursive_repr | |
try: | |
from _collections import deque | |
except ImportError: | |
pass | |
else: | |
MutableSequence.register(deque) | |
try: | |
from _collections import defaultdict | |
except ImportError: | |
pass | |
################################################################################ | |
### OrderedDict | |
################################################################################ | |
class _OrderedDictKeysView(KeysView): | |
def __reversed__(self): | |
yield from reversed(self._mapping) | |
class _OrderedDictItemsView(ItemsView): | |
def __reversed__(self): | |
for key in reversed(self._mapping): | |
yield (key, self._mapping[key]) | |
class _OrderedDictValuesView(ValuesView): | |
def __reversed__(self): | |
for key in reversed(self._mapping): | |
yield self._mapping[key] | |
class _Link(object): | |
__slots__ = 'prev', 'next', 'key', '__weakref__' | |
class OrderedDict(dict): | |
'Dictionary that remembers insertion order' | |
# An inherited dict maps keys to values. | |
# The inherited dict provides __getitem__, __len__, __contains__, and get. | |
# The remaining methods are order-aware. | |
# Big-O running times for all methods are the same as regular dictionaries. | |
# The internal self.__map dict maps keys to links in a doubly linked list. | |
# The circular doubly linked list starts and ends with a sentinel element. | |
# The sentinel element never gets deleted (this simplifies the algorithm). | |
# The sentinel is in self.__hardroot with a weakref proxy in self.__root. | |
# The prev links are weakref proxies (to prevent circular references). | |
# Individual links are kept alive by the hard reference in self.__map. | |
# Those hard references disappear when a key is deleted from an OrderedDict. | |
def __init__(*args, **kwds): | |
'''Initialize an ordered dictionary. The signature is the same as | |
regular dictionaries, but keyword arguments are not recommended because | |
their insertion order is arbitrary. | |
''' | |
if not args: | |
raise TypeError("descriptor '__init__' of 'OrderedDict' object " | |
"needs an argument") | |
self, *args = args | |
if len(args) > 1: | |
raise TypeError('expected at most 1 arguments, got %d' % len(args)) | |
try: | |
self.__root | |
except AttributeError: | |
self.__hardroot = _Link() | |
self.__root = root = _proxy(self.__hardroot) | |
root.prev = root.next = root | |
self.__map = {} | |
self.__update(*args, **kwds) | |
def __setitem__(self, key, value, | |
dict_setitem=dict.__setitem__, proxy=_proxy, Link=_Link): | |
'od.__setitem__(i, y) <==> od[i]=y' | |
# Setting a new item creates a new link at the end of the linked list, | |
# and the inherited dictionary is updated with the new key/value pair. | |
if key not in self: | |
self.__map[key] = link = Link() | |
root = self.__root | |
last = root.prev | |
link.prev, link.next, link.key = last, root, key | |
last.next = link | |
root.prev = proxy(link) | |
dict_setitem(self, key, value) | |
def __delitem__(self, key, dict_delitem=dict.__delitem__): | |
'od.__delitem__(y) <==> del od[y]' | |
# Deleting an existing item uses self.__map to find the link which gets | |
# removed by updating the links in the predecessor and successor nodes. | |
dict_delitem(self, key) | |
link = self.__map.pop(key) | |
link_prev = link.prev | |
link_next = link.next | |
link_prev.next = link_next | |
link_next.prev = link_prev | |
link.prev = None | |
link.next = None | |
def __iter__(self): | |
'od.__iter__() <==> iter(od)' | |
# Traverse the linked list in order. | |
root = self.__root | |
curr = root.next | |
while curr is not root: | |
yield curr.key | |
curr = curr.next | |
def __reversed__(self): | |
'od.__reversed__() <==> reversed(od)' | |
# Traverse the linked list in reverse order. | |
root = self.__root | |
curr = root.prev | |
while curr is not root: | |
yield curr.key | |
curr = curr.prev | |
def clear(self): | |
'od.clear() -> None. Remove all items from od.' | |
root = self.__root | |
root.prev = root.next = root | |
self.__map.clear() | |
dict.clear(self) | |
def popitem(self, last=True): | |
'''od.popitem() -> (k, v), return and remove a (key, value) pair. | |
Pairs are returned in LIFO order if last is true or FIFO order if false. | |
''' | |
if not self: | |
raise KeyError('dictionary is empty') | |
root = self.__root | |
if last: | |
link = root.prev | |
link_prev = link.prev | |
link_prev.next = root | |
root.prev = link_prev | |
else: | |
link = root.next | |
link_next = link.next | |
root.next = link_next | |
link_next.prev = root | |
key = link.key | |
del self.__map[key] | |
value = dict.pop(self, key) | |
return key, value | |
def move_to_end(self, key, last=True): | |
'''Move an existing element to the end (or beginning if last==False). | |
Raises KeyError if the element does not exist. | |
When last=True, acts like a fast version of self[key]=self.pop(key). | |
''' | |
link = self.__map[key] | |
link_prev = link.prev | |
link_next = link.next | |
link_prev.next = link_next | |
link_next.prev = link_prev | |
root = self.__root | |
if last: | |
last = root.prev | |
link.prev = last | |
link.next = root | |
last.next = root.prev = link | |
else: | |
first = root.next | |
link.prev = root | |
link.next = first | |
root.next = first.prev = link | |
def __sizeof__(self): | |
sizeof = _sys.getsizeof | |
n = len(self) + 1 # number of links including root | |
size = sizeof(self.__dict__) # instance dictionary | |
size += sizeof(self.__map) * 2 # internal dict and inherited dict | |
size += sizeof(self.__hardroot) * n # link objects | |
size += sizeof(self.__root) * n # proxy objects | |
return size | |
update = __update = MutableMapping.update | |
def keys(self): | |
"D.keys() -> a set-like object providing a view on D's keys" | |
return _OrderedDictKeysView(self) | |
def items(self): | |
"D.items() -> a set-like object providing a view on D's items" | |
return _OrderedDictItemsView(self) | |
def values(self): | |
"D.values() -> an object providing a view on D's values" | |
return _OrderedDictValuesView(self) | |
__ne__ = MutableMapping.__ne__ | |
__marker = object() | |
def pop(self, key, default=__marker): | |
'''od.pop(k[,d]) -> v, remove specified key and return the corresponding | |
value. If key is not found, d is returned if given, otherwise KeyError | |
is raised. | |
''' | |
if key in self: | |
result = self[key] | |
del self[key] | |
return result | |
if default is self.__marker: | |
raise KeyError(key) | |
return default | |
def setdefault(self, key, default=None): | |
'od.setdefault(k[,d]) -> od.get(k,d), also set od[k]=d if k not in od' | |
if key in self: | |
return self[key] | |
self[key] = default | |
return default | |
@_recursive_repr() | |
def __repr__(self): | |
'od.__repr__() <==> repr(od)' | |
if not self: | |
return '%s()' % (self.__class__.__name__,) | |
return '%s(%r)' % (self.__class__.__name__, list(self.items())) | |
def __reduce__(self): | |
'Return state information for pickling' | |
inst_dict = vars(self).copy() | |
for k in vars(OrderedDict()): | |
inst_dict.pop(k, None) | |
return self.__class__, (), inst_dict or None, None, iter(self.items()) | |
def copy(self): | |
'od.copy() -> a shallow copy of od' | |
return self.__class__(self) | |
@classmethod | |
def fromkeys(cls, iterable, value=None): | |
'''OD.fromkeys(S[, v]) -> New ordered dictionary with keys from S. | |
If not specified, the value defaults to None. | |
''' | |
self = cls() | |
for key in iterable: | |
self[key] = value | |
return self | |
def __eq__(self, other): | |
'''od.__eq__(y) <==> od==y. Comparison to another OD is order-sensitive | |
while comparison to a regular mapping is order-insensitive. | |
''' | |
if isinstance(other, OrderedDict): | |
return dict.__eq__(self, other) and all(map(_eq, self, other)) | |
return dict.__eq__(self, other) | |
try: | |
from _collections import OrderedDict | |
except ImportError: | |
# Leave the pure Python version in place. | |
pass | |
################################################################################ | |
### namedtuple | |
################################################################################ | |
_class_template = """\ | |
from builtins import property as _property, tuple as _tuple | |
from operator import itemgetter as _itemgetter | |
from collections import OrderedDict | |
class {typename}(tuple): | |
'{typename}({arg_list})' | |
__slots__ = () | |
_fields = {field_names!r} | |
def __new__(_cls, {arg_list}): | |
'Create new instance of {typename}({arg_list})' | |
return _tuple.__new__(_cls, ({arg_list})) | |
@classmethod | |
def _make(cls, iterable, new=tuple.__new__, len=len): | |
'Make a new {typename} object from a sequence or iterable' | |
result = new(cls, iterable) | |
if len(result) != {num_fields:d}: | |
raise TypeError('Expected {num_fields:d} arguments, got %d' % len(result)) | |
return result | |
def _replace(_self, **kwds): | |
'Return a new {typename} object replacing specified fields with new values' | |
result = _self._make(map(kwds.pop, {field_names!r}, _self)) | |
if kwds: | |
raise ValueError('Got unexpected field names: %r' % list(kwds)) | |
return result | |
def __repr__(self): | |
'Return a nicely formatted representation string' | |
return self.__class__.__name__ + '({repr_fmt})' % self | |
def _asdict(self): | |
'Return a new OrderedDict which maps field names to their values.' | |
return OrderedDict(zip(self._fields, self)) | |
def __getnewargs__(self): | |
'Return self as a plain tuple. Used by copy and pickle.' | |
return tuple(self) | |
{field_defs} | |
""" | |
_repr_template = '{name}=%r' | |
_field_template = '''\ | |
{name} = _property(_itemgetter({index:d}), doc='Alias for field number {index:d}') | |
''' | |
def namedtuple(typename, field_names, verbose=False, rename=False): | |
"""Returns a new subclass of tuple with named fields. | |
>>> Point = namedtuple('Point', ['x', 'y']) | |
>>> Point.__doc__ # docstring for the new class | |
'Point(x, y)' | |
>>> p = Point(11, y=22) # instantiate with positional args or keywords | |
>>> p[0] + p[1] # indexable like a plain tuple | |
33 | |
>>> x, y = p # unpack like a regular tuple | |
>>> x, y | |
(11, 22) | |
>>> p.x + p.y # fields also accessible by name | |
33 | |
>>> d = p._asdict() # convert to a dictionary | |
>>> d['x'] | |
11 | |
>>> Point(**d) # convert from a dictionary | |
Point(x=11, y=22) | |
>>> p._replace(x=100) # _replace() is like str.replace() but targets named fields | |
Point(x=100, y=22) | |
""" | |
# Validate the field names. At the user's option, either generate an error | |
# message or automatically replace the field name with a valid name. | |
if isinstance(field_names, str): | |
field_names = field_names.replace(',', ' ').split() | |
field_names = list(map(str, field_names)) | |
typename = str(typename) | |
if rename: | |
seen = set() | |
for index, name in enumerate(field_names): | |
if (not name.isidentifier() | |
or _iskeyword(name) | |
or name.startswith('_') | |
or name in seen): | |
field_names[index] = '_%d' % index | |
seen.add(name) | |
for name in [typename] + field_names: | |
if type(name) != str: | |
raise TypeError('Type names and field names must be strings') | |
if not name.isidentifier(): | |
raise ValueError('Type names and field names must be valid ' | |
'identifiers: %r' % name) | |
if _iskeyword(name): | |
raise ValueError('Type names and field names cannot be a ' | |
'keyword: %r' % name) | |
seen = set() | |
for name in field_names: | |
if name.startswith('_') and not rename: | |
raise ValueError('Field names cannot start with an underscore: ' | |
'%r' % name) | |
if name in seen: | |
raise ValueError('Encountered duplicate field name: %r' % name) | |
seen.add(name) | |
# Fill-in the class template | |
class_definition = _class_template.format( | |
typename = typename, | |
field_names = tuple(field_names), | |
num_fields = len(field_names), | |
arg_list = repr(tuple(field_names)).replace("'", "")[1:-1], | |
repr_fmt = ', '.join(_repr_template.format(name=name) | |
for name in field_names), | |
field_defs = '\n'.join(_field_template.format(index=index, name=name) | |
for index, name in enumerate(field_names)) | |
) | |
# Execute the template string in a temporary namespace and support | |
# tracing utilities by setting a value for frame.f_globals['__name__'] | |
namespace = dict(__name__='namedtuple_%s' % typename) | |
exec(class_definition, namespace) | |
result = namespace[typename] | |
result._source = class_definition | |
if verbose: | |
print(result._source) | |
# For pickling to work, the __module__ variable needs to be set to the frame | |
# where the named tuple is created. Bypass this step in environments where | |
# sys._getframe is not defined (Jython for example) or sys._getframe is not | |
# defined for arguments greater than 0 (IronPython). | |
try: | |
result.__module__ = _sys._getframe(1).f_globals.get('__name__', '__main__') | |
except (AttributeError, ValueError): | |
pass | |
return result | |
######################################################################## | |
### Counter | |
######################################################################## | |
def _count_elements(mapping, iterable): | |
'Tally elements from the iterable.' | |
mapping_get = mapping.get | |
for elem in iterable: | |
mapping[elem] = mapping_get(elem, 0) + 1 | |
try: # Load C helper function if available | |
from _collections import _count_elements | |
except ImportError: | |
pass | |
class Counter(dict): | |
'''Dict subclass for counting hashable items. Sometimes called a bag | |
or multiset. Elements are stored as dictionary keys and their counts | |
are stored as dictionary values. | |
>>> c = Counter('abcdeabcdabcaba') # count elements from a string | |
>>> c.most_common(3) # three most common elements | |
[('a', 5), ('b', 4), ('c', 3)] | |
>>> sorted(c) # list all unique elements | |
['a', 'b', 'c', 'd', 'e'] | |
>>> ''.join(sorted(c.elements())) # list elements with repetitions | |
'aaaaabbbbcccdde' | |
>>> sum(c.values()) # total of all counts | |
15 | |
>>> c['a'] # count of letter 'a' | |
5 | |
>>> for elem in 'shazam': # update counts from an iterable | |
... c[elem] += 1 # by adding 1 to each element's count | |
>>> c['a'] # now there are seven 'a' | |
7 | |
>>> del c['b'] # remove all 'b' | |
>>> c['b'] # now there are zero 'b' | |
0 | |
>>> d = Counter('simsalabim') # make another counter | |
>>> c.update(d) # add in the second counter | |
>>> c['a'] # now there are nine 'a' | |
9 | |
>>> c.clear() # empty the counter | |
>>> c | |
Counter() | |
Note: If a count is set to zero or reduced to zero, it will remain | |
in the counter until the entry is deleted or the counter is cleared: | |
>>> c = Counter('aaabbc') | |
>>> c['b'] -= 2 # reduce the count of 'b' by two | |
>>> c.most_common() # 'b' is still in, but its count is zero | |
[('a', 3), ('c', 1), ('b', 0)] | |
''' | |
# References: | |
# http://en.wikipedia.org/wiki/Multiset | |
# http://www.gnu.org/software/smalltalk/manual-base/html_node/Bag.html | |
# http://www.demo2s.com/Tutorial/Cpp/0380__set-multiset/Catalog0380__set-multiset.htm | |
# http://code.activestate.com/recipes/259174/ | |
# Knuth, TAOCP Vol. II section 4.6.3 | |
def __init__(*args, **kwds): | |
'''Create a new, empty Counter object. And if given, count elements | |
from an input iterable. Or, initialize the count from another mapping | |
of elements to their counts. | |
>>> c = Counter() # a new, empty counter | |
>>> c = Counter('gallahad') # a new counter from an iterable | |
>>> c = Counter({'a': 4, 'b': 2}) # a new counter from a mapping | |
>>> c = Counter(a=4, b=2) # a new counter from keyword args | |
''' | |
if not args: | |
raise TypeError("descriptor '__init__' of 'Counter' object " | |
"needs an argument") | |
self, *args = args | |
if len(args) > 1: | |
raise TypeError('expected at most 1 arguments, got %d' % len(args)) | |
super(Counter, self).__init__() | |
self.update(*args, **kwds) | |
def __missing__(self, key): | |
'The count of elements not in the Counter is zero.' | |
# Needed so that self[missing_item] does not raise KeyError | |
return 0 | |
def most_common(self, n=None): | |
'''List the n most common elements and their counts from the most | |
common to the least. If n is None, then list all element counts. | |
>>> Counter('abcdeabcdabcaba').most_common(3) | |
[('a', 5), ('b', 4), ('c', 3)] | |
''' | |
# Emulate Bag.sortedByCount from Smalltalk | |
if n is None: | |
return sorted(self.items(), key=_itemgetter(1), reverse=True) | |
return _heapq.nlargest(n, self.items(), key=_itemgetter(1)) | |
def elements(self): | |
'''Iterator over elements repeating each as many times as its count. | |
>>> c = Counter('ABCABC') | |
>>> sorted(c.elements()) | |
['A', 'A', 'B', 'B', 'C', 'C'] | |
# Knuth's example for prime factors of 1836: 2**2 * 3**3 * 17**1 | |
>>> prime_factors = Counter({2: 2, 3: 3, 17: 1}) | |
>>> product = 1 | |
>>> for factor in prime_factors.elements(): # loop over factors | |
... product *= factor # and multiply them | |
>>> product | |
1836 | |
Note, if an element's count has been set to zero or is a negative | |
number, elements() will ignore it. | |
''' | |
# Emulate Bag.do from Smalltalk and Multiset.begin from C++. | |
return _chain.from_iterable(_starmap(_repeat, self.items())) | |
# Override dict methods where necessary | |
@classmethod | |
def fromkeys(cls, iterable, v=None): | |
# There is no equivalent method for counters because setting v=1 | |
# means that no element can have a count greater than one. | |
raise NotImplementedError( | |
'Counter.fromkeys() is undefined. Use Counter(iterable) instead.') | |
def update(*args, **kwds): | |
'''Like dict.update() but add counts instead of replacing them. | |
Source can be an iterable, a dictionary, or another Counter instance. | |
>>> c = Counter('which') | |
>>> c.update('witch') # add elements from another iterable | |
>>> d = Counter('watch') | |
>>> c.update(d) # add elements from another counter | |
>>> c['h'] # four 'h' in which, witch, and watch | |
4 | |
''' | |
# The regular dict.update() operation makes no sense here because the | |
# replace behavior results in the some of original untouched counts | |
# being mixed-in with all of the other counts for a mismash that | |
# doesn't have a straight-forward interpretation in most counting | |
# contexts. Instead, we implement straight-addition. Both the inputs | |
# and outputs are allowed to contain zero and negative counts. | |
if not args: | |
raise TypeError("descriptor 'update' of 'Counter' object " | |
"needs an argument") | |
self, *args = args | |
if len(args) > 1: | |
raise TypeError('expected at most 1 arguments, got %d' % len(args)) | |
iterable = args[0] if args else None | |
if iterable is not None: | |
if isinstance(iterable, Mapping): | |
if self: | |
self_get = self.get | |
for elem, count in iterable.items(): | |
self[elem] = count + self_get(elem, 0) | |
else: | |
super(Counter, self).update(iterable) # fast path when counter is empty | |
else: | |
_count_elements(self, iterable) | |
if kwds: | |
self.update(kwds) | |
def subtract(*args, **kwds): | |
'''Like dict.update() but subtracts counts instead of replacing them. | |
Counts can be reduced below zero. Both the inputs and outputs are | |
allowed to contain zero and negative counts. | |
Source can be an iterable, a dictionary, or another Counter instance. | |
>>> c = Counter('which') | |
>>> c.subtract('witch') # subtract elements from another iterable | |
>>> c.subtract(Counter('watch')) # subtract elements from another counter | |
>>> c['h'] # 2 in which, minus 1 in witch, minus 1 in watch | |
0 | |
>>> c['w'] # 1 in which, minus 1 in witch, minus 1 in watch | |
-1 | |
''' | |
if not args: | |
raise TypeError("descriptor 'subtract' of 'Counter' object " | |
"needs an argument") | |
self, *args = args | |
if len(args) > 1: | |
raise TypeError('expected at most 1 arguments, got %d' % len(args)) | |
iterable = args[0] if args else None | |
if iterable is not None: | |
self_get = self.get | |
if isinstance(iterable, Mapping): | |
for elem, count in iterable.items(): | |
self[elem] = self_get(elem, 0) - count | |
else: | |
for elem in iterable: | |
self[elem] = self_get(elem, 0) - 1 | |
if kwds: | |
self.subtract(kwds) | |
def copy(self): | |
'Return a shallow copy.' | |
return self.__class__(self) | |
def __reduce__(self): | |
return self.__class__, (dict(self),) | |
def __delitem__(self, elem): | |
'Like dict.__delitem__() but does not raise KeyError for missing values.' | |
if elem in self: | |
super().__delitem__(elem) | |
def __repr__(self): | |
if not self: | |
return '%s()' % self.__class__.__name__ | |
try: | |
items = ', '.join(map('%r: %r'.__mod__, self.most_common())) | |
return '%s({%s})' % (self.__class__.__name__, items) | |
except TypeError: | |
# handle case where values are not orderable | |
return '{0}({1!r})'.format(self.__class__.__name__, dict(self)) | |
# Multiset-style mathematical operations discussed in: | |
# Knuth TAOCP Volume II section 4.6.3 exercise 19 | |
# and at http://en.wikipedia.org/wiki/Multiset | |
# | |
# Outputs guaranteed to only include positive counts. | |
# | |
# To strip negative and zero counts, add-in an empty counter: | |
# c += Counter() | |
def __add__(self, other): | |
'''Add counts from two counters. | |
>>> Counter('abbb') + Counter('bcc') | |
Counter({'b': 4, 'c': 2, 'a': 1}) | |
''' | |
if not isinstance(other, Counter): | |
return NotImplemented | |
result = Counter() | |
for elem, count in self.items(): | |
newcount = count + other[elem] | |
if newcount > 0: | |
result[elem] = newcount | |
for elem, count in other.items(): | |
if elem not in self and count > 0: | |
result[elem] = count | |
return result | |
def __sub__(self, other): | |
''' Subtract count, but keep only results with positive counts. | |
>>> Counter('abbbc') - Counter('bccd') | |
Counter({'b': 2, 'a': 1}) | |
''' | |
if not isinstance(other, Counter): | |
return NotImplemented | |
result = Counter() | |
for elem, count in self.items(): | |
newcount = count - other[elem] | |
if newcount > 0: | |
result[elem] = newcount | |
for elem, count in other.items(): | |
if elem not in self and count < 0: | |
result[elem] = 0 - count | |
return result | |
def __or__(self, other): | |
'''Union is the maximum of value in either of the input counters. | |
>>> Counter('abbb') | Counter('bcc') | |
Counter({'b': 3, 'c': 2, 'a': 1}) | |
''' | |
if not isinstance(other, Counter): | |
return NotImplemented | |
result = Counter() | |
for elem, count in self.items(): | |
other_count = other[elem] | |
newcount = other_count if count < other_count else count | |
if newcount > 0: | |
result[elem] = newcount | |
for elem, count in other.items(): | |
if elem not in self and count > 0: | |
result[elem] = count | |
return result | |
def __and__(self, other): | |
''' Intersection is the minimum of corresponding counts. | |
>>> Counter('abbb') & Counter('bcc') | |
Counter({'b': 1}) | |
''' | |
if not isinstance(other, Counter): | |
return NotImplemented | |
result = Counter() | |
for elem, count in self.items(): | |
other_count = other[elem] | |
newcount = count if count < other_count else other_count | |
if newcount > 0: | |
result[elem] = newcount | |
return result | |
def __pos__(self): | |
'Adds an empty counter, effectively stripping negative and zero counts' | |
result = Counter() | |
for elem, count in self.items(): | |
if count > 0: | |
result[elem] = count | |
return result | |
def __neg__(self): | |
'''Subtracts from an empty counter. Strips positive and zero counts, | |
and flips the sign on negative counts. | |
''' | |
result = Counter() | |
for elem, count in self.items(): | |
if count < 0: | |
result[elem] = 0 - count | |
return result | |
def _keep_positive(self): | |
'''Internal method to strip elements with a negative or zero count''' | |
nonpositive = [elem for elem, count in self.items() if not count > 0] | |
for elem in nonpositive: | |
del self[elem] | |
return self | |
def __iadd__(self, other): | |
'''Inplace add from another counter, keeping only positive counts. | |
>>> c = Counter('abbb') | |
>>> c += Counter('bcc') | |
>>> c | |
Counter({'b': 4, 'c': 2, 'a': 1}) | |
''' | |
for elem, count in other.items(): | |
self[elem] += count | |
return self._keep_positive() | |
def __isub__(self, other): | |
'''Inplace subtract counter, but keep only results with positive counts. | |
>>> c = Counter('abbbc') | |
>>> c -= Counter('bccd') | |
>>> c | |
Counter({'b': 2, 'a': 1}) | |
''' | |
for elem, count in other.items(): | |
self[elem] -= count | |
return self._keep_positive() | |
def __ior__(self, other): | |
'''Inplace union is the maximum of value from either counter. | |
>>> c = Counter('abbb') | |
>>> c |= Counter('bcc') | |
>>> c | |
Counter({'b': 3, 'c': 2, 'a': 1}) | |
''' | |
for elem, other_count in other.items(): | |
count = self[elem] | |
if other_count > count: | |
self[elem] = other_count | |
return self._keep_positive() | |
def __iand__(self, other): | |
'''Inplace intersection is the minimum of corresponding counts. | |
>>> c = Counter('abbb') | |
>>> c &= Counter('bcc') | |
>>> c | |
Counter({'b': 1}) | |
''' | |
for elem, count in self.items(): | |
other_count = other[elem] | |
if other_count < count: | |
self[elem] = other_count | |
return self._keep_positive() | |
######################################################################## | |
### ChainMap (helper for configparser and string.Template) | |
######################################################################## | |
class ChainMap(MutableMapping): | |
''' A ChainMap groups multiple dicts (or other mappings) together | |
to create a single, updateable view. | |
The underlying mappings are stored in a list. That list is public and can | |
be accessed or updated using the *maps* attribute. There is no other | |
state. | |
Lookups search the underlying mappings successively until a key is found. | |
In contrast, writes, updates, and deletions only operate on the first | |
mapping. | |
''' | |
def __init__(self, *maps): | |
'''Initialize a ChainMap by setting *maps* to the given mappings. | |
If no mappings are provided, a single empty dictionary is used. | |
''' | |
self.maps = list(maps) or [{}] # always at least one map | |
def __missing__(self, key): | |
raise KeyError(key) | |
def __getitem__(self, key): | |
for mapping in self.maps: | |
try: | |
return mapping[key] # can't use 'key in mapping' with defaultdict | |
except KeyError: | |
pass | |
return self.__missing__(key) # support subclasses that define __missing__ | |
def get(self, key, default=None): | |
return self[key] if key in self else default | |
def __len__(self): | |
return len(set().union(*self.maps)) # reuses stored hash values if possible | |
def __iter__(self): | |
return iter(set().union(*self.maps)) | |
def __contains__(self, key): | |
return any(key in m for m in self.maps) | |
def __bool__(self): | |
return any(self.maps) | |
@_recursive_repr() | |
def __repr__(self): | |
return '{0.__class__.__name__}({1})'.format( | |
self, ', '.join(map(repr, self.maps))) | |
@classmethod | |
def fromkeys(cls, iterable, *args): | |
'Create a ChainMap with a single dict created from the iterable.' | |
return cls(dict.fromkeys(iterable, *args)) | |
def copy(self): | |
'New ChainMap or subclass with a new copy of maps[0] and refs to maps[1:]' | |
return self.__class__(self.maps[0].copy(), *self.maps[1:]) | |
__copy__ = copy | |
def new_child(self, m=None): # like Django's Context.push() | |
'''New ChainMap with a new map followed by all previous maps. | |
If no map is provided, an empty dict is used. | |
''' | |
if m is None: | |
m = {} | |
return self.__class__(m, *self.maps) | |
@property | |
def parents(self): # like Django's Context.pop() | |
'New ChainMap from maps[1:].' | |
return self.__class__(*self.maps[1:]) | |
def __setitem__(self, key, value): | |
self.maps[0][key] = value | |
def __delitem__(self, key): | |
try: | |
del self.maps[0][key] | |
except KeyError: | |
raise KeyError('Key not found in the first mapping: {!r}'.format(key)) | |
def popitem(self): | |
'Remove and return an item pair from maps[0]. Raise KeyError is maps[0] is empty.' | |
try: | |
return self.maps[0].popitem() | |
except KeyError: | |
raise KeyError('No keys found in the first mapping.') | |
def pop(self, key, *args): | |
'Remove *key* from maps[0] and return its value. Raise KeyError if *key* not in maps[0].' | |
try: | |
return self.maps[0].pop(key, *args) | |
except KeyError: | |
raise KeyError('Key not found in the first mapping: {!r}'.format(key)) | |
def clear(self): | |
'Clear maps[0], leaving maps[1:] intact.' | |
self.maps[0].clear() | |
################################################################################ | |
### UserDict | |
################################################################################ | |
class UserDict(MutableMapping): | |
# Start by filling-out the abstract methods | |
def __init__(*args, **kwargs): | |
if not args: | |
raise TypeError("descriptor '__init__' of 'UserDict' object " | |
"needs an argument") | |
self, *args = args | |
if len(args) > 1: | |
raise TypeError('expected at most 1 arguments, got %d' % len(args)) | |
if args: | |
dict = args[0] | |
elif 'dict' in kwargs: | |
dict = kwargs.pop('dict') | |
import warnings | |
warnings.warn("Passing 'dict' as keyword argument is deprecated", | |
PendingDeprecationWarning, stacklevel=2) | |
else: | |
dict = None | |
self.data = {} | |
if dict is not None: | |
self.update(dict) | |
if len(kwargs): | |
self.update(kwargs) | |
def __len__(self): return len(self.data) | |
def __getitem__(self, key): | |
if key in self.data: | |
return self.data[key] | |
if hasattr(self.__class__, "__missing__"): | |
return self.__class__.__missing__(self, key) | |
raise KeyError(key) | |
def __setitem__(self, key, item): self.data[key] = item | |
def __delitem__(self, key): del self.data[key] | |
def __iter__(self): | |
return iter(self.data) | |
# Modify __contains__ to work correctly when __missing__ is present | |
def __contains__(self, key): | |
return key in self.data | |
# Now, add the methods in dicts but not in MutableMapping | |
def __repr__(self): return repr(self.data) | |
def copy(self): | |
if self.__class__ is UserDict: | |
return UserDict(self.data.copy()) | |
import copy | |
data = self.data | |
try: | |
self.data = {} | |
c = copy.copy(self) | |
finally: | |
self.data = data | |
c.update(self) | |
return c | |
@classmethod | |
def fromkeys(cls, iterable, value=None): | |
d = cls() | |
for key in iterable: | |
d[key] = value | |
return d | |
################################################################################ | |
### UserList | |
################################################################################ | |
class UserList(MutableSequence): | |
"""A more or less complete user-defined wrapper around list objects.""" | |
def __init__(self, initlist=None): | |
self.data = [] | |
if initlist is not None: | |
# XXX should this accept an arbitrary sequence? | |
if type(initlist) == type(self.data): | |
self.data[:] = initlist | |
elif isinstance(initlist, UserList): | |
self.data[:] = initlist.data[:] | |
else: | |
self.data = list(initlist) | |
def __repr__(self): return repr(self.data) | |
def __lt__(self, other): return self.data < self.__cast(other) | |
def __le__(self, other): return self.data <= self.__cast(other) | |
def __eq__(self, other): return self.data == self.__cast(other) | |
def __gt__(self, other): return self.data > self.__cast(other) | |
def __ge__(self, other): return self.data >= self.__cast(other) | |
def __cast(self, other): | |
return other.data if isinstance(other, UserList) else other | |
def __contains__(self, item): return item in self.data | |
def __len__(self): return len(self.data) | |
def __getitem__(self, i): return self.data[i] | |
def __setitem__(self, i, item): self.data[i] = item | |
def __delitem__(self, i): del self.data[i] | |
def __add__(self, other): | |
if isinstance(other, UserList): | |
return self.__class__(self.data + other.data) | |
elif isinstance(other, type(self.data)): | |
return self.__class__(self.data + other) | |
return self.__class__(self.data + list(other)) | |
def __radd__(self, other): | |
if isinstance(other, UserList): | |
return self.__class__(other.data + self.data) | |
elif isinstance(other, type(self.data)): | |
return self.__class__(other + self.data) | |
return self.__class__(list(other) + self.data) | |
def __iadd__(self, other): | |
if isinstance(other, UserList): | |
self.data += other.data | |
elif isinstance(other, type(self.data)): | |
self.data += other | |
else: | |
self.data += list(other) | |
return self | |
def __mul__(self, n): | |
return self.__class__(self.data*n) | |
__rmul__ = __mul__ | |
def __imul__(self, n): | |
self.data *= n | |
return self | |
def append(self, item): self.data.append(item) | |
def insert(self, i, item): self.data.insert(i, item) | |
def pop(self, i=-1): return self.data.pop(i) | |
def remove(self, item): self.data.remove(item) | |
def clear(self): self.data.clear() | |
def copy(self): return self.__class__(self) | |
def count(self, item): return self.data.count(item) | |
def index(self, item, *args): return self.data.index(item, *args) | |
def reverse(self): self.data.reverse() | |
def sort(self, *args, **kwds): self.data.sort(*args, **kwds) | |
def extend(self, other): | |
if isinstance(other, UserList): | |
self.data.extend(other.data) | |
else: | |
self.data.extend(other) | |
################################################################################ | |
### UserString | |
################################################################################ | |
class UserString(Sequence): | |
def __init__(self, seq): | |
if isinstance(seq, str): | |
self.data = seq | |
elif isinstance(seq, UserString): | |
self.data = seq.data[:] | |
else: | |
self.data = str(seq) | |
def __str__(self): return str(self.data) | |
def __repr__(self): return repr(self.data) | |
def __int__(self): return int(self.data) | |
def __float__(self): return float(self.data) | |
def __complex__(self): return complex(self.data) | |
def __hash__(self): return hash(self.data) | |
def __getnewargs__(self): | |
return (self.data[:],) | |
def __eq__(self, string): | |
if isinstance(string, UserString): | |
return self.data == string.data | |
return self.data == string | |
def __lt__(self, string): | |
if isinstance(string, UserString): | |
return self.data < string.data | |
return self.data < string | |
def __le__(self, string): | |
if isinstance(string, UserString): | |
return self.data <= string.data | |
return self.data <= string | |
def __gt__(self, string): | |
if isinstance(string, UserString): | |
return self.data > string.data | |
return self.data > string | |
def __ge__(self, string): | |
if isinstance(string, UserString): | |
return self.data >= string.data | |
return self.data >= string | |
def __contains__(self, char): | |
if isinstance(char, UserString): | |
char = char.data | |
return char in self.data | |
def __len__(self): return len(self.data) | |
def __getitem__(self, index): return self.__class__(self.data[index]) | |
def __add__(self, other): | |
if isinstance(other, UserString): | |
return self.__class__(self.data + other.data) | |
elif isinstance(other, str): | |
return self.__class__(self.data + other) | |
return self.__class__(self.data + str(other)) | |
def __radd__(self, other): | |
if isinstance(other, str): | |
return self.__class__(other + self.data) | |
return self.__class__(str(other) + self.data) | |
def __mul__(self, n): | |
return self.__class__(self.data*n) | |
__rmul__ = __mul__ | |
def __mod__(self, args): | |
return self.__class__(self.data % args) | |
def __rmod__(self, format): | |
return self.__class__(format % args) | |
# the following methods are defined in alphabetical order: | |
def capitalize(self): return self.__class__(self.data.capitalize()) | |
def casefold(self): | |
return self.__class__(self.data.casefold()) | |
def center(self, width, *args): | |
return self.__class__(self.data.center(width, *args)) | |
def count(self, sub, start=0, end=_sys.maxsize): | |
if isinstance(sub, UserString): | |
sub = sub.data | |
return self.data.count(sub, start, end) | |
def encode(self, encoding=None, errors=None): # XXX improve this? | |
if encoding: | |
if errors: | |
return self.__class__(self.data.encode(encoding, errors)) | |
return self.__class__(self.data.encode(encoding)) | |
return self.__class__(self.data.encode()) | |
def endswith(self, suffix, start=0, end=_sys.maxsize): | |
return self.data.endswith(suffix, start, end) | |
def expandtabs(self, tabsize=8): | |
return self.__class__(self.data.expandtabs(tabsize)) | |
def find(self, sub, start=0, end=_sys.maxsize): | |
if isinstance(sub, UserString): | |
sub = sub.data | |
return self.data.find(sub, start, end) | |
def format(self, *args, **kwds): | |
return self.data.format(*args, **kwds) | |
def format_map(self, mapping): | |
return self.data.format_map(mapping) | |
def index(self, sub, start=0, end=_sys.maxsize): | |
return self.data.index(sub, start, end) | |
def isalpha(self): return self.data.isalpha() | |
def isalnum(self): return self.data.isalnum() | |
def isdecimal(self): return self.data.isdecimal() | |
def isdigit(self): return self.data.isdigit() | |
def isidentifier(self): return self.data.isidentifier() | |
def islower(self): return self.data.islower() | |
def isnumeric(self): return self.data.isnumeric() | |
def isprintable(self): return self.data.isprintable() | |
def isspace(self): return self.data.isspace() | |
def istitle(self): return self.data.istitle() | |
def isupper(self): return self.data.isupper() | |
def join(self, seq): return self.data.join(seq) | |
def ljust(self, width, *args): | |
return self.__class__(self.data.ljust(width, *args)) | |
def lower(self): return self.__class__(self.data.lower()) | |
def lstrip(self, chars=None): return self.__class__(self.data.lstrip(chars)) | |
maketrans = str.maketrans | |
def partition(self, sep): | |
return self.data.partition(sep) | |
def replace(self, old, new, maxsplit=-1): | |
if isinstance(old, UserString): | |
old = old.data | |
if isinstance(new, UserString): | |
new = new.data | |
return self.__class__(self.data.replace(old, new, maxsplit)) | |
def rfind(self, sub, start=0, end=_sys.maxsize): | |
if isinstance(sub, UserString): | |
sub = sub.data | |
return self.data.rfind(sub, start, end) | |
def rindex(self, sub, start=0, end=_sys.maxsize): | |
return self.data.rindex(sub, start, end) | |
def rjust(self, width, *args): | |
return self.__class__(self.data.rjust(width, *args)) | |
def rpartition(self, sep): | |
return self.data.rpartition(sep) | |
def rstrip(self, chars=None): | |
return self.__class__(self.data.rstrip(chars)) | |
def split(self, sep=None, maxsplit=-1): | |
return self.data.split(sep, maxsplit) | |
def rsplit(self, sep=None, maxsplit=-1): | |
return self.data.rsplit(sep, maxsplit) | |
def splitlines(self, keepends=False): return self.data.splitlines(keepends) | |
def startswith(self, prefix, start=0, end=_sys.maxsize): | |
return self.data.startswith(prefix, start, end) | |
def strip(self, chars=None): return self.__class__(self.data.strip(chars)) | |
def swapcase(self): return self.__class__(self.data.swapcase()) | |
def title(self): return self.__class__(self.data.title()) | |
def translate(self, *args): | |
return self.__class__(self.data.translate(*args)) | |
def upper(self): return self.__class__(self.data.upper()) | |
def zfill(self, width): return self.__class__(self.data.zfill(width)) |
################################################################################ | |
### Simple tests | |
################################################################################ | |
# verify that instances can be pickled | |
from collections import namedtuple | |
from pickle import loads, dumps | |
Point = namedtuple('Point', 'x, y', True) | |
p = Point(x=10, y=20) | |
assert p == loads(dumps(p)) | |
# test and demonstrate ability to override methods | |
class Point(namedtuple('Point', 'x y')): | |
__slots__ = () | |
@property | |
def hypot(self): | |
return (self.x ** 2 + self.y ** 2) ** 0.5 | |
def __str__(self): | |
return 'Point: x=%6.3f y=%6.3f hypot=%6.3f' % (self.x, self.y, self.hypot) | |
for p in Point(3, 4), Point(14, 5/7.): | |
print (p) | |
class Point(namedtuple('Point', 'x y')): | |
'Point class with optimized _make() and _replace() without error-checking' | |
__slots__ = () | |
_make = classmethod(tuple.__new__) | |
def _replace(self, _map=map, **kwds): | |
return self._make(_map(kwds.get, ('x', 'y'), self)) | |
print(Point(11, 22)._replace(x=100)) | |
Point3D = namedtuple('Point3D', Point._fields + ('z',)) | |
print(Point3D.__doc__) | |
import doctest, collections | |
TestResults = namedtuple('TestResults', 'failed attempted') | |
print(TestResults(*doctest.testmod(collections))) |
from _collections_abc import * | |
from _collections_abc import __all__ |
"""Generic (shallow and deep) copying operations. | |
Interface summary: | |
import copy | |
x = copy.copy(y) # make a shallow copy of y | |
x = copy.deepcopy(y) # make a deep copy of y | |
For module specific errors, copy.Error is raised. | |
The difference between shallow and deep copying is only relevant for | |
compound objects (objects that contain other objects, like lists or | |
class instances). | |
- A shallow copy constructs a new compound object and then (to the | |
extent possible) inserts *the same objects* into it that the | |
original contains. | |
- A deep copy constructs a new compound object and then, recursively, | |
inserts *copies* into it of the objects found in the original. | |
Two problems often exist with deep copy operations that don't exist | |
with shallow copy operations: | |
a) recursive objects (compound objects that, directly or indirectly, | |
contain a reference to themselves) may cause a recursive loop | |
b) because deep copy copies *everything* it may copy too much, e.g. | |
administrative data structures that should be shared even between | |
copies | |
Python's deep copy operation avoids these problems by: | |
a) keeping a table of objects already copied during the current | |
copying pass | |
b) letting user-defined classes override the copying operation or the | |
set of components copied | |
This version does not copy types like module, class, function, method, | |
nor stack trace, stack frame, nor file, socket, window, nor array, nor | |
any similar types. | |
Classes can use the same interfaces to control copying that they use | |
to control pickling: they can define methods called __getinitargs__(), | |
__getstate__() and __setstate__(). See the documentation for module | |
"pickle" for information on these methods. | |
""" | |
import types | |
import weakref | |
from copyreg import dispatch_table | |
import builtins | |
class Error(Exception): | |
pass | |
error = Error # backward compatibility | |
try: | |
from org.python.core import PyStringMap | |
except ImportError: | |
PyStringMap = None | |
__all__ = ["Error", "copy", "deepcopy"] | |
def copy(x): | |
"""Shallow copy operation on arbitrary Python objects. | |
See the module's __doc__ string for more info. | |
""" | |
cls = type(x) | |
copier = _copy_dispatch.get(cls) | |
if copier: | |
return copier(x) | |
try: | |
issc = issubclass(cls, type) | |
except TypeError: # cls is not a class | |
issc = False | |
if issc: | |
# treat it as a regular class: | |
return _copy_immutable(x) | |
copier = getattr(cls, "__copy__", None) | |
if copier: | |
return copier(x) | |
reductor = dispatch_table.get(cls) | |
if reductor: | |
rv = reductor(x) | |
else: | |
reductor = getattr(x, "__reduce_ex__", None) | |
if reductor: | |
rv = reductor(4) | |
else: | |
reductor = getattr(x, "__reduce__", None) | |
if reductor: | |
rv = reductor() | |
else: | |
raise Error("un(shallow)copyable object of type %s" % cls) | |
return _reconstruct(x, rv, 0) | |
_copy_dispatch = d = {} | |
def _copy_immutable(x): | |
return x | |
for t in (type(None), int, float, bool, str, tuple, | |
bytes, frozenset, type, range, | |
types.BuiltinFunctionType, type(Ellipsis), | |
types.FunctionType, weakref.ref): | |
d[t] = _copy_immutable | |
t = getattr(types, "CodeType", None) | |
if t is not None: | |
d[t] = _copy_immutable | |
for name in ("complex", "unicode"): | |
t = getattr(builtins, name, None) | |
if t is not None: | |
d[t] = _copy_immutable | |
def _copy_with_constructor(x): | |
return type(x)(x) | |
for t in (list, dict, set): | |
d[t] = _copy_with_constructor | |
def _copy_with_copy_method(x): | |
return x.copy() | |
if PyStringMap is not None: | |
d[PyStringMap] = _copy_with_copy_method | |
del d | |
def deepcopy(x, memo=None, _nil=[]): | |
"""Deep copy operation on arbitrary Python objects. | |
See the module's __doc__ string for more info. | |
""" | |
if memo is None: | |
memo = {} | |
d = id(x) | |
y = memo.get(d, _nil) | |
if y is not _nil: | |
return y | |
cls = type(x) | |
copier = _deepcopy_dispatch.get(cls) | |
if copier: | |
y = copier(x, memo) | |
else: | |
try: | |
issc = issubclass(cls, type) | |
except TypeError: # cls is not a class (old Boost; see SF #502085) | |
issc = 0 | |
if issc: | |
y = _deepcopy_atomic(x, memo) | |
else: | |
copier = getattr(x, "__deepcopy__", None) | |
if copier: | |
y = copier(memo) | |
else: | |
reductor = dispatch_table.get(cls) | |
if reductor: | |
rv = reductor(x) | |
else: | |
reductor = getattr(x, "__reduce_ex__", None) | |
if reductor: | |
rv = reductor(4) | |
else: | |
reductor = getattr(x, "__reduce__", None) | |
if reductor: | |
rv = reductor() | |
else: | |
raise Error( | |
"un(deep)copyable object of type %s" % cls) | |
y = _reconstruct(x, rv, 1, memo) | |
# If is its own copy, don't memoize. | |
if y is not x: | |
memo[d] = y | |
_keep_alive(x, memo) # Make sure x lives at least as long as d | |
return y | |
_deepcopy_dispatch = d = {} | |
def _deepcopy_atomic(x, memo): | |
return x | |
d[type(None)] = _deepcopy_atomic | |
d[type(Ellipsis)] = _deepcopy_atomic | |
d[int] = _deepcopy_atomic | |
d[float] = _deepcopy_atomic | |
d[bool] = _deepcopy_atomic | |
try: | |
d[complex] = _deepcopy_atomic | |
except NameError: | |
pass | |
d[bytes] = _deepcopy_atomic | |
d[str] = _deepcopy_atomic | |
try: | |
d[types.CodeType] = _deepcopy_atomic | |
except AttributeError: | |
pass | |
d[type] = _deepcopy_atomic | |
d[types.BuiltinFunctionType] = _deepcopy_atomic | |
d[types.FunctionType] = _deepcopy_atomic | |
d[weakref.ref] = _deepcopy_atomic | |
def _deepcopy_list(x, memo): | |
y = [] | |
memo[id(x)] = y | |
for a in x: | |
y.append(deepcopy(a, memo)) | |
return y | |
d[list] = _deepcopy_list | |
def _deepcopy_tuple(x, memo): | |
y = [deepcopy(a, memo) for a in x] | |
# We're not going to put the tuple in the memo, but it's still important we | |
# check for it, in case the tuple contains recursive mutable structures. | |
try: | |
return memo[id(x)] | |
except KeyError: | |
pass | |
for k, j in zip(x, y): | |
if k is not j: | |
y = tuple(y) | |
break | |
else: | |
y = x | |
return y | |
d[tuple] = _deepcopy_tuple | |
def _deepcopy_dict(x, memo): | |
y = {} | |
memo[id(x)] = y | |
for key, value in x.items(): | |
y[deepcopy(key, memo)] = deepcopy(value, memo) | |
return y | |
d[dict] = _deepcopy_dict | |
if PyStringMap is not None: | |
d[PyStringMap] = _deepcopy_dict | |
def _deepcopy_method(x, memo): # Copy instance methods | |
return type(x)(x.__func__, deepcopy(x.__self__, memo)) | |
_deepcopy_dispatch[types.MethodType] = _deepcopy_method | |
def _keep_alive(x, memo): | |
"""Keeps a reference to the object x in the memo. | |
Because we remember objects by their id, we have | |
to assure that possibly temporary objects are kept | |
alive by referencing them. | |
We store a reference at the id of the memo, which should | |
normally not be used unless someone tries to deepcopy | |
the memo itself... | |
""" | |
try: | |
memo[id(memo)].append(x) | |
except KeyError: | |
# aha, this is the first one :-) | |
memo[id(memo)]=[x] | |
def _reconstruct(x, info, deep, memo=None): | |
if isinstance(info, str): | |
return x | |
assert isinstance(info, tuple) | |
if memo is None: | |
memo = {} | |
n = len(info) | |
assert n in (2, 3, 4, 5) | |
callable, args = info[:2] | |
if n > 2: | |
state = info[2] | |
else: | |
state = None | |
if n > 3: | |
listiter = info[3] | |
else: | |
listiter = None | |
if n > 4: | |
dictiter = info[4] | |
else: | |
dictiter = None | |
if deep: | |
args = deepcopy(args, memo) | |
y = callable(*args) | |
memo[id(x)] = y | |
if state is not None: | |
if deep: | |
state = deepcopy(state, memo) | |
if hasattr(y, '__setstate__'): | |
y.__setstate__(state) | |
else: | |
if isinstance(state, tuple) and len(state) == 2: | |
state, slotstate = state | |
else: | |
slotstate = None | |
if state is not None: | |
y.__dict__.update(state) | |
if slotstate is not None: | |
for key, value in slotstate.items(): | |
setattr(y, key, value) | |
if listiter is not None: | |
for item in listiter: | |
if deep: | |
item = deepcopy(item, memo) | |
y.append(item) | |
if dictiter is not None: | |
for key, value in dictiter: | |
if deep: | |
key = deepcopy(key, memo) | |
value = deepcopy(value, memo) | |
y[key] = value | |
return y | |
del d | |
del types | |
# Helper for instance creation without calling __init__ | |
class _EmptyClass: | |
pass |
"""Helper to provide extensibility for pickle. | |
This is only useful to add pickle support for extension types defined in | |
C, not for instances of user-defined classes. | |
""" | |
__all__ = ["pickle", "constructor", | |
"add_extension", "remove_extension", "clear_extension_cache"] | |
dispatch_table = {} | |
def pickle(ob_type, pickle_function, constructor_ob=None): | |
if not callable(pickle_function): | |
raise TypeError("reduction functions must be callable") | |
dispatch_table[ob_type] = pickle_function | |
# The constructor_ob function is a vestige of safe for unpickling. | |
# There is no reason for the caller to pass it anymore. | |
if constructor_ob is not None: | |
constructor(constructor_ob) | |
def constructor(object): | |
if not callable(object): | |
raise TypeError("constructors must be callable") | |
# Example: provide pickling support for complex numbers. | |
try: | |
complex | |
except NameError: | |
pass | |
else: | |
def pickle_complex(c): | |
return complex, (c.real, c.imag) | |
pickle(complex, pickle_complex, complex) | |
# Support for pickling new-style objects | |
def _reconstructor(cls, base, state): | |
if base is object: | |
obj = object.__new__(cls) | |
else: | |
obj = base.__new__(cls, state) | |
if base.__init__ != object.__init__: | |
base.__init__(obj, state) | |
return obj | |
_HEAPTYPE = 1<<9 | |
# Python code for object.__reduce_ex__ for protocols 0 and 1 | |
def _reduce_ex(self, proto): | |
assert proto < 2 | |
for base in self.__class__.__mro__: | |
if hasattr(base, '__flags__') and not base.__flags__ & _HEAPTYPE: | |
break | |
else: | |
base = object # not really reachable | |
if base is object: | |
state = None | |
else: | |
if base is self.__class__: | |
raise TypeError("can't pickle %s objects" % base.__name__) | |
state = base(self) | |
args = (self.__class__, base, state) | |
try: | |
getstate = self.__getstate__ | |
except AttributeError: | |
if getattr(self, "__slots__", None): | |
raise TypeError("a class that defines __slots__ without " | |
"defining __getstate__ cannot be pickled") | |
try: | |
dict = self.__dict__ | |
except AttributeError: | |
dict = None | |
else: | |
dict = getstate() | |
if dict: | |
return _reconstructor, args, dict | |
else: | |
return _reconstructor, args | |
# Helper for __reduce_ex__ protocol 2 | |
def __newobj__(cls, *args): | |
return cls.__new__(cls, *args) | |
def __newobj_ex__(cls, args, kwargs): | |
"""Used by pickle protocol 4, instead of __newobj__ to allow classes with | |
keyword-only arguments to be pickled correctly. | |
""" | |
return cls.__new__(cls, *args, **kwargs) | |
def _slotnames(cls): | |
"""Return a list of slot names for a given class. | |
This needs to find slots defined by the class and its bases, so we | |
can't simply return the __slots__ attribute. We must walk down | |
the Method Resolution Order and concatenate the __slots__ of each | |
class found there. (This assumes classes don't modify their | |
__slots__ attribute to misrepresent their slots after the class is | |
defined.) | |
""" | |
# Get the value from a cache in the class if possible | |
names = cls.__dict__.get("__slotnames__") | |
if names is not None: | |
return names | |
# Not cached -- calculate the value | |
names = [] | |
if not hasattr(cls, "__slots__"): | |
# This class has no slots | |
pass | |
else: | |
# Slots found -- gather slot names from all base classes | |
for c in cls.__mro__: | |
if "__slots__" in c.__dict__: | |
slots = c.__dict__['__slots__'] | |
# if class has a single slot, it can be given as a string | |
if isinstance(slots, str): | |
slots = (slots,) | |
for name in slots: | |
# special descriptors | |
if name in ("__dict__", "__weakref__"): | |
continue | |
# mangled names | |
elif name.startswith('__') and not name.endswith('__'): | |
names.append('_%s%s' % (c.__name__, name)) | |
else: | |
names.append(name) | |
# Cache the outcome in the class if at all possible | |
try: | |
cls.__slotnames__ = names | |
except: | |
pass # But don't die if we can't | |
return names | |
# A registry of extension codes. This is an ad-hoc compression | |
# mechanism. Whenever a global reference to <module>, <name> is about | |
# to be pickled, the (<module>, <name>) tuple is looked up here to see | |
# if it is a registered extension code for it. Extension codes are | |
# universal, so that the meaning of a pickle does not depend on | |
# context. (There are also some codes reserved for local use that | |
# don't have this restriction.) Codes are positive ints; 0 is | |
# reserved. | |
_extension_registry = {} # key -> code | |
_inverted_registry = {} # code -> key | |
_extension_cache = {} # code -> object | |
# Don't ever rebind those names: pickling grabs a reference to them when | |
# it's initialized, and won't see a rebinding. | |
def add_extension(module, name, code): | |
"""Register an extension code.""" | |
code = int(code) | |
if not 1 <= code <= 0x7fffffff: | |
raise ValueError("code out of range") | |
key = (module, name) | |
if (_extension_registry.get(key) == code and | |
_inverted_registry.get(code) == key): | |
return # Redundant registrations are benign | |
if key in _extension_registry: | |
raise ValueError("key %s is already registered with code %s" % | |
(key, _extension_registry[key])) | |
if code in _inverted_registry: | |
raise ValueError("code %s is already in use for key %s" % | |
(code, _inverted_registry[code])) | |
_extension_registry[key] = code | |
_inverted_registry[code] = key | |
def remove_extension(module, name, code): | |
"""Unregister an extension code. For testing only.""" | |
key = (module, name) | |
if (_extension_registry.get(key) != code or | |
_inverted_registry.get(code) != key): | |
raise ValueError("key %s is not registered with code %s" % | |
(key, code)) | |
del _extension_registry[key] | |
del _inverted_registry[code] | |
if code in _extension_cache: | |
del _extension_cache[code] | |
def clear_extension_cache(): | |
_extension_cache.clear() | |
# Standard extension code assignments | |
# Reserved ranges | |
# First Last Count Purpose | |
# 1 127 127 Reserved for Python standard library | |
# 128 191 64 Reserved for Zope | |
# 192 239 48 Reserved for 3rd parties | |
# 240 255 16 Reserved for private use (will never be assigned) | |
# 256 Inf Inf Reserved for future assignment | |
# Extension codes are assigned by the Python Software Foundation. |
import os | |
import sys | |
import warnings | |
import imp | |
import opcode # opcode is not a virtualenv module, so we can use it to find the stdlib | |
# Important! To work on pypy, this must be a module that resides in the | |
# lib-python/modified-x.y.z directory | |
dirname = os.path.dirname | |
distutils_path = os.path.join(os.path.dirname(opcode.__file__), 'distutils') | |
if os.path.normpath(distutils_path) == os.path.dirname(os.path.normpath(__file__)): | |
warnings.warn( | |
"The virtualenv distutils package at %s appears to be in the same location as the system distutils?") | |
else: | |
__path__.insert(0, distutils_path) | |
real_distutils = imp.load_module("_virtualenv_distutils", None, distutils_path, ('', '', imp.PKG_DIRECTORY)) | |
# Copy the relevant attributes | |
try: | |
__revision__ = real_distutils.__revision__ | |
except AttributeError: | |
pass | |
__version__ = real_distutils.__version__ | |
from distutils import dist, sysconfig | |
try: | |
basestring | |
except NameError: | |
basestring = str | |
## patch build_ext (distutils doesn't know how to get the libs directory | |
## path on windows - it hardcodes the paths around the patched sys.prefix) | |
if sys.platform == 'win32': | |
from distutils.command.build_ext import build_ext as old_build_ext | |
class build_ext(old_build_ext): | |
def finalize_options (self): | |
if self.library_dirs is None: | |
self.library_dirs = [] | |
elif isinstance(self.library_dirs, basestring): | |
self.library_dirs = self.library_dirs.split(os.pathsep) | |
self.library_dirs.insert(0, os.path.join(sys.real_prefix, "Libs")) | |
old_build_ext.finalize_options(self) | |
from distutils.command import build_ext as build_ext_module | |
build_ext_module.build_ext = build_ext | |
## distutils.dist patches: | |
old_find_config_files = dist.Distribution.find_config_files | |
def find_config_files(self): | |
found = old_find_config_files(self) | |
system_distutils = os.path.join(distutils_path, 'distutils.cfg') | |
#if os.path.exists(system_distutils): | |
# found.insert(0, system_distutils) | |
# What to call the per-user config file | |
if os.name == 'posix': | |
user_filename = ".pydistutils.cfg" | |
else: | |
user_filename = "pydistutils.cfg" | |
user_filename = os.path.join(sys.prefix, user_filename) | |
if os.path.isfile(user_filename): | |
for item in list(found): | |
if item.endswith('pydistutils.cfg'): | |
found.remove(item) | |
found.append(user_filename) | |
return found | |
dist.Distribution.find_config_files = find_config_files | |
## distutils.sysconfig patches: | |
old_get_python_inc = sysconfig.get_python_inc | |
def sysconfig_get_python_inc(plat_specific=0, prefix=None): | |
if prefix is None: | |
prefix = sys.real_prefix | |
return old_get_python_inc(plat_specific, prefix) | |
sysconfig_get_python_inc.__doc__ = old_get_python_inc.__doc__ | |
sysconfig.get_python_inc = sysconfig_get_python_inc | |
old_get_python_lib = sysconfig.get_python_lib | |
def sysconfig_get_python_lib(plat_specific=0, standard_lib=0, prefix=None): | |
if standard_lib and prefix is None: | |
prefix = sys.real_prefix | |
return old_get_python_lib(plat_specific, standard_lib, prefix) | |
sysconfig_get_python_lib.__doc__ = old_get_python_lib.__doc__ | |
sysconfig.get_python_lib = sysconfig_get_python_lib | |
old_get_config_vars = sysconfig.get_config_vars | |
def sysconfig_get_config_vars(*args): | |
real_vars = old_get_config_vars(*args) | |
if sys.platform == 'win32': | |
lib_dir = os.path.join(sys.real_prefix, "libs") | |
if isinstance(real_vars, dict) and 'LIBDIR' not in real_vars: | |
real_vars['LIBDIR'] = lib_dir # asked for all | |
elif isinstance(real_vars, list) and 'LIBDIR' in args: | |
real_vars = real_vars + [lib_dir] # asked for list | |
return real_vars | |
sysconfig_get_config_vars.__doc__ = old_get_config_vars.__doc__ | |
sysconfig.get_config_vars = sysconfig_get_config_vars |
# This is a config file local to this virtualenv installation | |
# You may include options that will be used by all distutils commands, | |
# and by easy_install. For instance: | |
# | |
# [easy_install] | |
# find_links = http://mylocalsite |
""" Standard "encodings" Package | |
Standard Python encoding modules are stored in this package | |
directory. | |
Codec modules must have names corresponding to normalized encoding | |
names as defined in the normalize_encoding() function below, e.g. | |
'utf-8' must be implemented by the module 'utf_8.py'. | |
Each codec module must export the following interface: | |
* getregentry() -> codecs.CodecInfo object | |
The getregentry() API must return a CodecInfo object with encoder, decoder, | |
incrementalencoder, incrementaldecoder, streamwriter and streamreader | |
atttributes which adhere to the Python Codec Interface Standard. | |
In addition, a module may optionally also define the following | |
APIs which are then used by the package's codec search function: | |
* getaliases() -> sequence of encoding name strings to use as aliases | |
Alias names returned by getaliases() must be normalized encoding | |
names as defined by normalize_encoding(). | |
Written by Marc-Andre Lemburg ([email protected]). | |
(c) Copyright CNRI, All Rights Reserved. NO WARRANTY. | |
"""#" | |
import codecs | |
from . import aliases | |
_cache = {} | |
_unknown = '--unknown--' | |
_import_tail = ['*'] | |
_aliases = aliases.aliases | |
class CodecRegistryError(LookupError, SystemError): | |
pass | |
def normalize_encoding(encoding): | |
""" Normalize an encoding name. | |
Normalization works as follows: all non-alphanumeric | |
characters except the dot used for Python package names are | |
collapsed and replaced with a single underscore, e.g. ' -;#' | |
becomes '_'. Leading and trailing underscores are removed. | |
Note that encoding names should be ASCII only; if they do use | |
non-ASCII characters, these must be Latin-1 compatible. | |
""" | |
if isinstance(encoding, bytes): | |
encoding = str(encoding, "ascii") | |
chars = [] | |
punct = False | |
for c in encoding: | |
if c.isalnum() or c == '.': | |
if punct and chars: | |
chars.append('_') | |
chars.append(c) | |
punct = False | |
else: | |
punct = True | |
return ''.join(chars) | |
def search_function(encoding): | |
# Cache lookup | |
entry = _cache.get(encoding, _unknown) | |
if entry is not _unknown: | |
return entry | |
# Import the module: | |
# | |
# First try to find an alias for the normalized encoding | |
# name and lookup the module using the aliased name, then try to | |
# lookup the module using the standard import scheme, i.e. first | |
# try in the encodings package, then at top-level. | |
# | |
norm_encoding = normalize_encoding(encoding) | |
aliased_encoding = _aliases.get(norm_encoding) or \ | |
_aliases.get(norm_encoding.replace('.', '_')) | |
if aliased_encoding is not None: | |
modnames = [aliased_encoding, | |
norm_encoding] | |
else: | |
modnames = [norm_encoding] | |
for modname in modnames: | |
if not modname or '.' in modname: | |
continue | |
try: | |
# Import is absolute to prevent the possibly malicious import of a | |
# module with side-effects that is not in the 'encodings' package. | |
mod = __import__('encodings.' + modname, fromlist=_import_tail, | |
level=0) | |
except ImportError: | |
pass | |
else: | |
break | |
else: | |
mod = None | |
try: | |
getregentry = mod.getregentry | |
except AttributeError: | |
# Not a codec module | |
mod = None | |
if mod is None: | |
# Cache misses | |
_cache[encoding] = None | |
return None | |
# Now ask the module for the registry entry | |
entry = getregentry() | |
if not isinstance(entry, codecs.CodecInfo): | |
if not 4 <= len(entry) <= 7: | |
raise CodecRegistryError('module "%s" (%s) failed to register' | |
% (mod.__name__, mod.__file__)) | |
if not callable(entry[0]) or not callable(entry[1]) or \ | |
(entry[2] is not None and not callable(entry[2])) or \ | |
(entry[3] is not None and not callable(entry[3])) or \ | |
(len(entry) > 4 and entry[4] is not None and not callable(entry[4])) or \ | |
(len(entry) > 5 and entry[5] is not None and not callable(entry[5])): | |
raise CodecRegistryError('incompatible codecs in module "%s" (%s)' | |
% (mod.__name__, mod.__file__)) | |
if len(entry)<7 or entry[6] is None: | |
entry += (None,)*(6-len(entry)) + (mod.__name__.split(".", 1)[1],) | |
entry = codecs.CodecInfo(*entry) | |
# Cache the codec registry entry | |
_cache[encoding] = entry | |
# Register its aliases (without overwriting previously registered | |
# aliases) | |
try: | |
codecaliases = mod.getaliases() | |
except AttributeError: | |
pass | |
else: | |
for alias in codecaliases: | |
if alias not in _aliases: | |
_aliases[alias] = modname | |
# Return the registry entry | |
return entry | |
# Register the search_function in the Python codec registry | |
codecs.register(search_function) |
""" Encoding Aliases Support | |
This module is used by the encodings package search function to | |
map encodings names to module names. | |
Note that the search function normalizes the encoding names before | |
doing the lookup, so the mapping will have to map normalized | |
encoding names to module names. | |
Contents: | |
The following aliases dictionary contains mappings of all IANA | |
character set names for which the Python core library provides | |
codecs. In addition to these, a few Python specific codec | |
aliases have also been added. | |
""" | |
aliases = { | |
# Please keep this list sorted alphabetically by value ! | |
# ascii codec | |
'646' : 'ascii', | |
'ansi_x3.4_1968' : 'ascii', | |
'ansi_x3_4_1968' : 'ascii', # some email headers use this non-standard name | |
'ansi_x3.4_1986' : 'ascii', | |
'cp367' : 'ascii', | |
'csascii' : 'ascii', | |
'ibm367' : 'ascii', | |
'iso646_us' : 'ascii', | |
'iso_646.irv_1991' : 'ascii', | |
'iso_ir_6' : 'ascii', | |
'us' : 'ascii', | |
'us_ascii' : 'ascii', | |
# base64_codec codec | |
'base64' : 'base64_codec', | |
'base_64' : 'base64_codec', | |
# big5 codec | |
'big5_tw' : 'big5', | |
'csbig5' : 'big5', | |
# big5hkscs codec | |
'big5_hkscs' : 'big5hkscs', | |
'hkscs' : 'big5hkscs', | |
# bz2_codec codec | |
'bz2' : 'bz2_codec', | |
# cp037 codec | |
'037' : 'cp037', | |
'csibm037' : 'cp037', | |
'ebcdic_cp_ca' : 'cp037', | |
'ebcdic_cp_nl' : 'cp037', | |
'ebcdic_cp_us' : 'cp037', | |
'ebcdic_cp_wt' : 'cp037', | |
'ibm037' : 'cp037', | |
'ibm039' : 'cp037', | |
# cp1026 codec | |
'1026' : 'cp1026', | |
'csibm1026' : 'cp1026', | |
'ibm1026' : 'cp1026', | |
# cp1125 codec | |
'1125' : 'cp1125', | |
'ibm1125' : 'cp1125', | |
'cp866u' : 'cp1125', | |
'ruscii' : 'cp1125', | |
# cp1140 codec | |
'1140' : 'cp1140', | |
'ibm1140' : 'cp1140', | |
# cp1250 codec | |
'1250' : 'cp1250', | |
'windows_1250' : 'cp1250', | |
# cp1251 codec | |
'1251' : 'cp1251', | |
'windows_1251' : 'cp1251', | |
# cp1252 codec | |
'1252' : 'cp1252', | |
'windows_1252' : 'cp1252', | |
# cp1253 codec | |
'1253' : 'cp1253', | |
'windows_1253' : 'cp1253', | |
# cp1254 codec | |
'1254' : 'cp1254', | |
'windows_1254' : 'cp1254', | |
# cp1255 codec | |
'1255' : 'cp1255', | |
'windows_1255' : 'cp1255', | |
# cp1256 codec | |
'1256' : 'cp1256', | |
'windows_1256' : 'cp1256', | |
# cp1257 codec | |
'1257' : 'cp1257', | |
'windows_1257' : 'cp1257', | |
# cp1258 codec | |
'1258' : 'cp1258', | |
'windows_1258' : 'cp1258', | |
# cp273 codec | |
'273' : 'cp273', | |
'ibm273' : 'cp273', | |
'csibm273' : 'cp273', | |
# cp424 codec | |
'424' : 'cp424', | |
'csibm424' : 'cp424', | |
'ebcdic_cp_he' : 'cp424', | |
'ibm424' : 'cp424', | |
# cp437 codec | |
'437' : 'cp437', | |
'cspc8codepage437' : 'cp437', | |
'ibm437' : 'cp437', | |
# cp500 codec | |
'500' : 'cp500', | |
'csibm500' : 'cp500', | |
'ebcdic_cp_be' : 'cp500', | |
'ebcdic_cp_ch' : 'cp500', | |
'ibm500' : 'cp500', | |
# cp775 codec | |
'775' : 'cp775', | |
'cspc775baltic' : 'cp775', | |
'ibm775' : 'cp775', | |
# cp850 codec | |
'850' : 'cp850', | |
'cspc850multilingual' : 'cp850', | |
'ibm850' : 'cp850', | |
# cp852 codec | |
'852' : 'cp852', | |
'cspcp852' : 'cp852', | |
'ibm852' : 'cp852', | |
# cp855 codec | |
'855' : 'cp855', | |
'csibm855' : 'cp855', | |
'ibm855' : 'cp855', | |
# cp857 codec | |
'857' : 'cp857', | |
'csibm857' : 'cp857', | |
'ibm857' : 'cp857', | |
# cp858 codec | |
'858' : 'cp858', | |
'csibm858' : 'cp858', | |
'ibm858' : 'cp858', | |
# cp860 codec | |
'860' : 'cp860', | |
'csibm860' : 'cp860', | |
'ibm860' : 'cp860', | |
# cp861 codec | |
'861' : 'cp861', | |
'cp_is' : 'cp861', | |
'csibm861' : 'cp861', | |
'ibm861' : 'cp861', | |
# cp862 codec | |
'862' : 'cp862', | |
'cspc862latinhebrew' : 'cp862', | |
'ibm862' : 'cp862', | |
# cp863 codec | |
'863' : 'cp863', | |
'csibm863' : 'cp863', | |
'ibm863' : 'cp863', | |
# cp864 codec | |
'864' : 'cp864', | |
'csibm864' : 'cp864', | |
'ibm864' : 'cp864', | |
# cp865 codec | |
'865' : 'cp865', | |
'csibm865' : 'cp865', | |
'ibm865' : 'cp865', | |
# cp866 codec | |
'866' : 'cp866', | |
'csibm866' : 'cp866', | |
'ibm866' : 'cp866', | |
# cp869 codec | |
'869' : 'cp869', | |
'cp_gr' : 'cp869', | |
'csibm869' : 'cp869', | |
'ibm869' : 'cp869', | |
# cp932 codec | |
'932' : 'cp932', | |
'ms932' : 'cp932', | |
'mskanji' : 'cp932', | |
'ms_kanji' : 'cp932', | |
# cp949 codec | |
'949' : 'cp949', | |
'ms949' : 'cp949', | |
'uhc' : 'cp949', | |
# cp950 codec | |
'950' : 'cp950', | |
'ms950' : 'cp950', | |
# euc_jis_2004 codec | |
'jisx0213' : 'euc_jis_2004', | |
'eucjis2004' : 'euc_jis_2004', | |
'euc_jis2004' : 'euc_jis_2004', | |
# euc_jisx0213 codec | |
'eucjisx0213' : 'euc_jisx0213', | |
# euc_jp codec | |
'eucjp' : 'euc_jp', | |
'ujis' : 'euc_jp', | |
'u_jis' : 'euc_jp', | |
# euc_kr codec | |
'euckr' : 'euc_kr', | |
'korean' : 'euc_kr', | |
'ksc5601' : 'euc_kr', | |
'ks_c_5601' : 'euc_kr', | |
'ks_c_5601_1987' : 'euc_kr', | |
'ksx1001' : 'euc_kr', | |
'ks_x_1001' : 'euc_kr', | |
# gb18030 codec | |
'gb18030_2000' : 'gb18030', | |
# gb2312 codec | |
'chinese' : 'gb2312', | |
'csiso58gb231280' : 'gb2312', | |
'euc_cn' : 'gb2312', | |
'euccn' : 'gb2312', | |
'eucgb2312_cn' : 'gb2312', | |
'gb2312_1980' : 'gb2312', | |
'gb2312_80' : 'gb2312', | |
'iso_ir_58' : 'gb2312', | |
# gbk codec | |
'936' : 'gbk', | |
'cp936' : 'gbk', | |
'ms936' : 'gbk', | |
# hex_codec codec | |
'hex' : 'hex_codec', | |
# hp_roman8 codec | |
'roman8' : 'hp_roman8', | |
'r8' : 'hp_roman8', | |
'csHPRoman8' : 'hp_roman8', | |
# hz codec | |
'hzgb' : 'hz', | |
'hz_gb' : 'hz', | |
'hz_gb_2312' : 'hz', | |
# iso2022_jp codec | |
'csiso2022jp' : 'iso2022_jp', | |
'iso2022jp' : 'iso2022_jp', | |
'iso_2022_jp' : 'iso2022_jp', | |
# iso2022_jp_1 codec | |
'iso2022jp_1' : 'iso2022_jp_1', | |
'iso_2022_jp_1' : 'iso2022_jp_1', | |
# iso2022_jp_2 codec | |
'iso2022jp_2' : 'iso2022_jp_2', | |
'iso_2022_jp_2' : 'iso2022_jp_2', | |
# iso2022_jp_2004 codec | |
'iso_2022_jp_2004' : 'iso2022_jp_2004', | |
'iso2022jp_2004' : 'iso2022_jp_2004', | |
# iso2022_jp_3 codec | |
'iso2022jp_3' : 'iso2022_jp_3', | |
'iso_2022_jp_3' : 'iso2022_jp_3', | |
# iso2022_jp_ext codec | |
'iso2022jp_ext' : 'iso2022_jp_ext', | |
'iso_2022_jp_ext' : 'iso2022_jp_ext', | |
# iso2022_kr codec | |
'csiso2022kr' : 'iso2022_kr', | |
'iso2022kr' : 'iso2022_kr', | |
'iso_2022_kr' : 'iso2022_kr', | |
# iso8859_10 codec | |
'csisolatin6' : 'iso8859_10', | |
'iso_8859_10' : 'iso8859_10', | |
'iso_8859_10_1992' : 'iso8859_10', | |
'iso_ir_157' : 'iso8859_10', | |
'l6' : 'iso8859_10', | |
'latin6' : 'iso8859_10', | |
# iso8859_11 codec | |
'thai' : 'iso8859_11', | |
'iso_8859_11' : 'iso8859_11', | |
'iso_8859_11_2001' : 'iso8859_11', | |
# iso8859_13 codec | |
'iso_8859_13' : 'iso8859_13', | |
'l7' : 'iso8859_13', | |
'latin7' : 'iso8859_13', | |
# iso8859_14 codec | |
'iso_8859_14' : 'iso8859_14', | |
'iso_8859_14_1998' : 'iso8859_14', | |
'iso_celtic' : 'iso8859_14', | |
'iso_ir_199' : 'iso8859_14', | |
'l8' : 'iso8859_14', | |
'latin8' : 'iso8859_14', | |
# iso8859_15 codec | |
'iso_8859_15' : 'iso8859_15', | |
'l9' : 'iso8859_15', | |
'latin9' : 'iso8859_15', | |
# iso8859_16 codec | |
'iso_8859_16' : 'iso8859_16', | |
'iso_8859_16_2001' : 'iso8859_16', | |
'iso_ir_226' : 'iso8859_16', | |
'l10' : 'iso8859_16', | |
'latin10' : 'iso8859_16', | |
# iso8859_2 codec | |
'csisolatin2' : 'iso8859_2', | |
'iso_8859_2' : 'iso8859_2', | |
'iso_8859_2_1987' : 'iso8859_2', | |
'iso_ir_101' : 'iso8859_2', | |
'l2' : 'iso8859_2', | |
'latin2' : 'iso8859_2', | |
# iso8859_3 codec | |
'csisolatin3' : 'iso8859_3', | |
'iso_8859_3' : 'iso8859_3', | |
'iso_8859_3_1988' : 'iso8859_3', | |
'iso_ir_109' : 'iso8859_3', | |
'l3' : 'iso8859_3', | |
'latin3' : 'iso8859_3', | |
# iso8859_4 codec | |
'csisolatin4' : 'iso8859_4', | |
'iso_8859_4' : 'iso8859_4', | |
'iso_8859_4_1988' : 'iso8859_4', | |
'iso_ir_110' : 'iso8859_4', | |
'l4' : 'iso8859_4', | |
'latin4' : 'iso8859_4', | |
# iso8859_5 codec | |
'csisolatincyrillic' : 'iso8859_5', | |
'cyrillic' : 'iso8859_5', | |
'iso_8859_5' : 'iso8859_5', | |
'iso_8859_5_1988' : 'iso8859_5', | |
'iso_ir_144' : 'iso8859_5', | |
# iso8859_6 codec | |
'arabic' : 'iso8859_6', | |
'asmo_708' : 'iso8859_6', | |
'csisolatinarabic' : 'iso8859_6', | |
'ecma_114' : 'iso8859_6', | |
'iso_8859_6' : 'iso8859_6', | |
'iso_8859_6_1987' : 'iso8859_6', | |
'iso_ir_127' : 'iso8859_6', | |
# iso8859_7 codec | |
'csisolatingreek' : 'iso8859_7', | |
'ecma_118' : 'iso8859_7', | |
'elot_928' : 'iso8859_7', | |
'greek' : 'iso8859_7', | |
'greek8' : 'iso8859_7', | |
'iso_8859_7' : 'iso8859_7', | |
'iso_8859_7_1987' : 'iso8859_7', | |
'iso_ir_126' : 'iso8859_7', | |
# iso8859_8 codec | |
'csisolatinhebrew' : 'iso8859_8', | |
'hebrew' : 'iso8859_8', | |
'iso_8859_8' : 'iso8859_8', | |
'iso_8859_8_1988' : 'iso8859_8', | |
'iso_ir_138' : 'iso8859_8', | |
# iso8859_9 codec | |
'csisolatin5' : 'iso8859_9', | |
'iso_8859_9' : 'iso8859_9', | |
'iso_8859_9_1989' : 'iso8859_9', | |
'iso_ir_148' : 'iso8859_9', | |
'l5' : 'iso8859_9', | |
'latin5' : 'iso8859_9', | |
# johab codec | |
'cp1361' : 'johab', | |
'ms1361' : 'johab', | |
# koi8_r codec | |
'cskoi8r' : 'koi8_r', | |
# kz1048 codec | |
'kz_1048' : 'kz1048', | |
'rk1048' : 'kz1048', | |
'strk1048_2002' : 'kz1048', | |
# latin_1 codec | |
# | |
# Note that the latin_1 codec is implemented internally in C and a | |
# lot faster than the charmap codec iso8859_1 which uses the same | |
# encoding. This is why we discourage the use of the iso8859_1 | |
# codec and alias it to latin_1 instead. | |
# | |
'8859' : 'latin_1', | |
'cp819' : 'latin_1', | |
'csisolatin1' : 'latin_1', | |
'ibm819' : 'latin_1', | |
'iso8859' : 'latin_1', | |
'iso8859_1' : 'latin_1', | |
'iso_8859_1' : 'latin_1', | |
'iso_8859_1_1987' : 'latin_1', | |
'iso_ir_100' : 'latin_1', | |
'l1' : 'latin_1', | |
'latin' : 'latin_1', | |
'latin1' : 'latin_1', | |
# mac_cyrillic codec | |
'maccyrillic' : 'mac_cyrillic', | |
# mac_greek codec | |
'macgreek' : 'mac_greek', | |
# mac_iceland codec | |
'maciceland' : 'mac_iceland', | |
# mac_latin2 codec | |
'maccentraleurope' : 'mac_latin2', | |
'maclatin2' : 'mac_latin2', | |
# mac_roman codec | |
'macintosh' : 'mac_roman', | |
'macroman' : 'mac_roman', | |
# mac_turkish codec | |
'macturkish' : 'mac_turkish', | |
# mbcs codec | |
'dbcs' : 'mbcs', | |
# ptcp154 codec | |
'csptcp154' : 'ptcp154', | |
'pt154' : 'ptcp154', | |
'cp154' : 'ptcp154', | |
'cyrillic_asian' : 'ptcp154', | |
# quopri_codec codec | |
'quopri' : 'quopri_codec', | |
'quoted_printable' : 'quopri_codec', | |
'quotedprintable' : 'quopri_codec', | |
# rot_13 codec | |
'rot13' : 'rot_13', | |
# shift_jis codec | |
'csshiftjis' : 'shift_jis', | |
'shiftjis' : 'shift_jis', | |
'sjis' : 'shift_jis', | |
's_jis' : 'shift_jis', | |
# shift_jis_2004 codec | |
'shiftjis2004' : 'shift_jis_2004', | |
'sjis_2004' : 'shift_jis_2004', | |
's_jis_2004' : 'shift_jis_2004', | |
# shift_jisx0213 codec | |
'shiftjisx0213' : 'shift_jisx0213', | |
'sjisx0213' : 'shift_jisx0213', | |
's_jisx0213' : 'shift_jisx0213', | |
# tactis codec | |
'tis260' : 'tactis', | |
# tis_620 codec | |
'tis620' : 'tis_620', | |
'tis_620_0' : 'tis_620', | |
'tis_620_2529_0' : 'tis_620', | |
'tis_620_2529_1' : 'tis_620', | |
'iso_ir_166' : 'tis_620', | |
# utf_16 codec | |
'u16' : 'utf_16', | |
'utf16' : 'utf_16', | |
# utf_16_be codec | |
'unicodebigunmarked' : 'utf_16_be', | |
'utf_16be' : 'utf_16_be', | |
# utf_16_le codec | |
'unicodelittleunmarked' : 'utf_16_le', | |
'utf_16le' : 'utf_16_le', | |
# utf_32 codec | |
'u32' : 'utf_32', | |
'utf32' : 'utf_32', | |
# utf_32_be codec | |
'utf_32be' : 'utf_32_be', | |
# utf_32_le codec | |
'utf_32le' : 'utf_32_le', | |
# utf_7 codec | |
'u7' : 'utf_7', | |
'utf7' : 'utf_7', | |
'unicode_1_1_utf_7' : 'utf_7', | |
# utf_8 codec | |
'u8' : 'utf_8', | |
'utf' : 'utf_8', | |
'utf8' : 'utf_8', | |
'utf8_ucs2' : 'utf_8', | |
'utf8_ucs4' : 'utf_8', | |
# uu_codec codec | |
'uu' : 'uu_codec', | |
# zlib_codec codec | |
'zip' : 'zlib_codec', | |
'zlib' : 'zlib_codec', | |
# temporary mac CJK aliases, will be replaced by proper codecs in 3.1 | |
'x_mac_japanese' : 'shift_jis', | |
'x_mac_korean' : 'euc_kr', | |
'x_mac_simp_chinese' : 'gb2312', | |
'x_mac_trad_chinese' : 'big5', | |
} |
""" Python 'ascii' Codec | |
Written by Marc-Andre Lemburg ([email protected]). | |
(c) Copyright CNRI, All Rights Reserved. NO WARRANTY. | |
""" | |
import codecs | |
### Codec APIs | |
class Codec(codecs.Codec): | |
# Note: Binding these as C functions will result in the class not | |
# converting them to methods. This is intended. | |
encode = codecs.ascii_encode | |
decode = codecs.ascii_decode | |
class IncrementalEncoder(codecs.IncrementalEncoder): | |
def encode(self, input, final=False): | |
return codecs.ascii_encode(input, self.errors)[0] | |
class IncrementalDecoder(codecs.IncrementalDecoder): | |
def decode(self, input, final=False): | |
return codecs.ascii_decode(input, self.errors)[0] | |
class StreamWriter(Codec,codecs.StreamWriter): | |
pass | |
class StreamReader(Codec,codecs.StreamReader): | |
pass | |
class StreamConverter(StreamWriter,StreamReader): | |
encode = codecs.ascii_decode | |
decode = codecs.ascii_encode | |
### encodings module API | |
def getregentry(): | |
return codecs.CodecInfo( | |
name='ascii', | |
encode=Codec.encode, | |
decode=Codec.decode, | |
incrementalencoder=IncrementalEncoder, | |
incrementaldecoder=IncrementalDecoder, | |
streamwriter=StreamWriter, | |
streamreader=StreamReader, | |
) |
"""Python 'base64_codec' Codec - base64 content transfer encoding. | |
This codec de/encodes from bytes to bytes. | |
Written by Marc-Andre Lemburg ([email protected]). | |
""" | |
import codecs | |
import base64 | |
### Codec APIs | |
def base64_encode(input, errors='strict'): | |
assert errors == 'strict' | |
return (base64.encodebytes(input), len(input)) | |
def base64_decode(input, errors='strict'): | |
assert errors == 'strict' | |
return (base64.decodebytes(input), len(input)) | |
class Codec(codecs.Codec): | |
def encode(self, input, errors='strict'): | |
return base64_encode(input, errors) | |
def decode(self, input, errors='strict'): | |
return base64_decode(input, errors) | |
class IncrementalEncoder(codecs.IncrementalEncoder): | |
def encode(self, input, final=False): | |
assert self.errors == 'strict' | |
return base64.encodebytes(input) | |
class IncrementalDecoder(codecs.IncrementalDecoder): | |
def decode(self, input, final=False): | |
assert self.errors == 'strict' | |
return base64.decodebytes(input) | |
class StreamWriter(Codec, codecs.StreamWriter): | |
charbuffertype = bytes | |
class StreamReader(Codec, codecs.StreamReader): | |
charbuffertype = bytes | |
### encodings module API | |
def getregentry(): | |
return codecs.CodecInfo( | |
name='base64', | |
encode=base64_encode, | |
decode=base64_decode, | |
incrementalencoder=IncrementalEncoder, | |
incrementaldecoder=IncrementalDecoder, | |
streamwriter=StreamWriter, | |
streamreader=StreamReader, | |
_is_text_encoding=False, | |
) |
# | |
# big5.py: Python Unicode Codec for BIG5 | |
# | |
# Written by Hye-Shik Chang <[email protected]> | |
# | |
import _codecs_tw, codecs | |
import _multibytecodec as mbc | |
codec = _codecs_tw.getcodec('big5') | |
class Codec(codecs.Codec): | |
encode = codec.encode | |
decode = codec.decode | |
class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, | |
codecs.IncrementalEncoder): | |
codec = codec | |
class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, | |
codecs.IncrementalDecoder): | |
codec = codec | |
class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): | |
codec = codec | |
class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): | |
codec = codec | |
def getregentry(): | |
return codecs.CodecInfo( | |
name='big5', | |
encode=Codec().encode, | |
decode=Codec().decode, | |
incrementalencoder=IncrementalEncoder, | |
incrementaldecoder=IncrementalDecoder, | |
streamreader=StreamReader, | |
streamwriter=StreamWriter, | |
) |
# | |
# big5hkscs.py: Python Unicode Codec for BIG5HKSCS | |
# | |
# Written by Hye-Shik Chang <[email protected]> | |
# | |
import _codecs_hk, codecs | |
import _multibytecodec as mbc | |
codec = _codecs_hk.getcodec('big5hkscs') | |
class Codec(codecs.Codec): | |
encode = codec.encode | |
decode = codec.decode | |
class IncrementalEncoder(mbc.MultibyteIncrementalEncoder, | |
codecs.IncrementalEncoder): | |
codec = codec | |
class IncrementalDecoder(mbc.MultibyteIncrementalDecoder, | |
codecs.IncrementalDecoder): | |
codec = codec | |
class StreamReader(Codec, mbc.MultibyteStreamReader, codecs.StreamReader): | |
codec = codec | |
class StreamWriter(Codec, mbc.MultibyteStreamWriter, codecs.StreamWriter): | |
codec = codec | |
def getregentry(): | |
return codecs.CodecInfo( | |
name='big5hkscs', | |
encode=Codec().encode, | |
decode=Codec().decode, | |
incrementalencoder=IncrementalEncoder, | |
incrementaldecoder=IncrementalDecoder, | |
streamreader=StreamReader, | |
streamwriter=StreamWriter, | |
) |
"""Python 'bz2_codec' Codec - bz2 compression encoding. | |
This codec de/encodes from bytes to bytes and is therefore usable with | |
bytes.transform() and bytes.untransform(). | |
Adapted by Raymond Hettinger from zlib_codec.py which was written | |
by Marc-Andre Lemburg ([email protected]). | |
""" | |
import codecs | |
import bz2 # this codec needs the optional bz2 module ! | |
### Codec APIs | |
def bz2_encode(input, errors='strict'): | |
assert errors == 'strict' | |
return (bz2.compress(input), len(input)) | |
def bz2_decode(input, errors='strict'): | |
assert errors == 'strict' | |
return (bz2.decompress(input), len(input)) | |
class Codec(codecs.Codec): | |
def encode(self, input, errors='strict'): | |
return bz2_encode(input, errors) | |
def decode(self, input, errors='strict'): | |
return bz2_decode(input, errors) | |
class IncrementalEncoder(codecs.IncrementalEncoder): | |
def __init__(self, errors='strict'): | |
assert errors == 'strict' | |
self.errors = errors | |
self.compressobj = bz2.BZ2Compressor() | |
def encode(self, input, final=False): | |
if final: | |
c = self.compressobj.compress(input) | |
return c + self.compressobj.flush() | |
else: | |
return self.compressobj.compress(input) | |
def reset(self): | |
self.compressobj = bz2.BZ2Compressor() | |
class IncrementalDecoder(codecs.IncrementalDecoder): | |
def __init__(self, errors='strict'): | |
assert errors == 'strict' | |
self.errors = errors | |
self.decompressobj = bz2.BZ2Decompressor() | |
def decode(self, input, final=False): | |
try: | |
return self.decompressobj.decompress(input) | |
except EOFError: | |
return '' | |
def reset(self): | |
self.decompressobj = bz2.BZ2Decompressor() | |
class StreamWriter(Codec, codecs.StreamWriter): | |
charbuffertype = bytes | |
class StreamReader(Codec, codecs.StreamReader): | |
charbuffertype = bytes | |
### encodings module API | |
def getregentry(): | |
return codecs.CodecInfo( | |
name="bz2", | |
encode=bz2_encode, | |
decode=bz2_decode, | |
incrementalencoder=IncrementalEncoder, | |
incrementaldecoder=IncrementalDecoder, | |
streamwriter=StreamWriter, | |
streamreader=StreamReader, | |
_is_text_encoding=False, | |
) |
""" Generic Python Character Mapping Codec. | |
Use this codec directly rather than through the automatic | |
conversion mechanisms supplied by unicode() and .encode(). | |
Written by Marc-Andre Lemburg ([email protected]). | |
(c) Copyright CNRI, All Rights Reserved. NO WARRANTY. | |
"""#" | |
import codecs | |
### Codec APIs | |
class Codec(codecs.Codec): | |
# Note: Binding these as C functions will result in the class not | |
# converting them to methods. This is intended. | |
encode = codecs.charmap_encode | |
decode = codecs.charmap_decode | |
class IncrementalEncoder(codecs.IncrementalEncoder): | |
def __init__(self, errors='strict', mapping=None): | |
codecs.IncrementalEncoder.__init__(self, errors) | |
self.mapping = mapping | |
def encode(self, input, final=False): | |
return codecs.charmap_encode(input, self.errors, self.mapping)[0] | |
class IncrementalDecoder(codecs.IncrementalDecoder): | |
def __init__(self, errors='strict', mapping=None): | |
codecs.IncrementalDecoder.__init__(self, errors) | |
self.mapping = mapping | |
def decode(self, input, final=False): | |
return codecs.charmap_decode(input, self.errors, self.mapping)[0] | |
class StreamWriter(Codec,codecs.StreamWriter): | |
def __init__(self,stream,errors='strict',mapping=None): | |
codecs.StreamWriter.__init__(self,stream,errors) | |
self.mapping = mapping | |
def encode(self,input,errors='strict'): | |
return Codec.encode(input,errors,self.mapping) | |
class StreamReader(Codec,codecs.StreamReader): | |
def __init__(self,stream,errors='strict',mapping=None): | |
codecs.StreamReader.__init__(self,stream,errors) | |
self.mapping = mapping | |
def decode(self,input,errors='strict'): | |
return Codec.decode(input,errors,self.mapping) | |
### encodings module API | |
def getregentry(): | |
return codecs.CodecInfo( | |
name='charmap', | |
encode=Codec.encode, | |
decode=Codec.decode, | |
incrementalencoder=IncrementalEncoder, | |
incrementaldecoder=IncrementalDecoder, | |
streamwriter=StreamWriter, | |
streamreader=StreamReader, | |
) |
""" Python Character Mapping Codec cp037 generated from 'MAPPINGS/VENDORS/MICSFT/EBCDIC/CP037.TXT' with gencodec.py. | |
"""#" | |
import codecs | |
### Codec APIs | |
class Codec(codecs.Codec): | |
def encode(self,input,errors='strict'): | |
return codecs.charmap_encode(input,errors,encoding_table) | |
def decode(self,input,errors='strict'): | |
return codecs.charmap_decode(input,errors,decoding_table) | |
class IncrementalEncoder(codecs.IncrementalEncoder): | |
def encode(self, input, final=False): | |
return codecs.charmap_encode(input,self.errors,encoding_table)[0] | |
class IncrementalDecoder(codecs.IncrementalDecoder): | |
def decode(self, input, final=False): | |
return codecs.charmap_decode(input,self.errors,decoding_table)[0] | |
class StreamWriter(Codec,codecs.StreamWriter): | |
pass | |
class StreamReader(Codec,codecs.StreamReader): | |
pass | |
### encodings module API | |
def getregentry(): | |
return codecs.CodecInfo( | |
name='cp037', | |
encode=Codec().encode, | |
decode=Codec().decode, | |
incrementalencoder=IncrementalEncoder, | |
incrementaldecoder=IncrementalDecoder, | |
streamreader=StreamReader, | |
streamwriter=StreamWriter, | |
) | |
### Decoding Table | |
decoding_table = ( | |
'\x00' # 0x00 -> NULL | |
'\x01' # 0x01 -> START OF HEADING | |
'\x02' # 0x02 -> START OF TEXT | |
'\x03' # 0x03 -> END OF TEXT | |
'\x9c' # 0x04 -> CONTROL | |
'\t' # 0x05 -> HORIZONTAL TABULATION | |
'\x86' # 0x06 -> CONTROL | |
'\x7f' # 0x07 -> DELETE | |
'\x97' # 0x08 -> CONTROL | |
'\x8d' # 0x09 -> CONTROL | |
'\x8e' # 0x0A -> CONTROL | |
'\x0b' # 0x0B -> VERTICAL TABULATION | |
'\x0c' # 0x0C -> FORM FEED | |
'\r' # 0x0D -> CARRIAGE RETURN | |
'\x0e' # 0x0E -> SHIFT OUT | |
'\x0f' # 0x0F -> SHIFT IN | |
'\x10' # 0x10 -> DATA LINK ESCAPE | |
'\x11' # 0x11 -> DEVICE CONTROL ONE | |
'\x12' # 0x12 -> DEVICE CONTROL TWO | |
'\x13' # 0x13 -> DEVICE CONTROL THREE | |
'\x9d' # 0x14 -> CONTROL | |
'\x85' # 0x15 -> CONTROL | |
'\x08' # 0x16 -> BACKSPACE | |
'\x87' # 0x17 -> CONTROL | |
'\x18' # 0x18 -> CANCEL | |
'\x19' # 0x19 -> END OF MEDIUM | |
'\x92' # 0x1A -> CONTROL | |
'\x8f' # 0x1B -> CONTROL | |
'\x1c' # 0x1C -> FILE SEPARATOR | |
'\x1d' # 0x1D -> GROUP SEPARATOR | |
'\x1e' # 0x1E -> RECORD SEPARATOR | |
'\x1f' # 0x1F -> UNIT SEPARATOR | |
'\x80' # 0x20 -> CONTROL | |
'\x81' # 0x21 -> CONTROL | |
'\x82' # 0x22 -> CONTROL | |
'\x83' # 0x23 -> CONTROL | |
'\x84' # 0x24 -> CONTROL | |
'\n' # 0x25 -> LINE FEED | |
'\x17' # 0x26 -> END OF TRANSMISSION BLOCK | |
'\x1b' # 0x27 -> ESCAPE | |
'\x88' # 0x28 -> CONTROL | |
'\x89' # 0x29 -> CONTROL | |
'\x8a' # 0x2A -> CONTROL | |
'\x8b' # 0x2B -> CONTROL | |
'\x8c' # 0x2C -> CONTROL | |
'\x05' # 0x2D -> ENQUIRY | |
'\x06' # 0x2E -> ACKNOWLEDGE | |
'\x07' # 0x2F -> BELL | |
'\x90' # 0x30 -> CONTROL | |
'\x91' # 0x31 -> CONTROL | |
'\x16' # 0x32 -> SYNCHRONOUS IDLE | |
'\x93' # 0x33 -> CONTROL | |
'\x94' # 0x34 -> CONTROL | |
'\x95' # 0x35 -> CONTROL | |
'\x96' # 0x36 -> CONTROL | |
'\x04' # 0x37 -> END OF TRANSMISSION | |
'\x98' # 0x38 -> CONTROL | |
'\x99' # 0x39 -> CONTROL | |
'\x9a' # 0x3A -> CONTROL | |
'\x9b' # 0x3B -> CONTROL | |
'\x14' # 0x3C -> DEVICE CONTROL FOUR | |
'\x15' # 0x3D -> NEGATIVE ACKNOWLEDGE | |
'\x9e' # 0x3E -> CONTROL | |
'\x1a' # 0x3F -> SUBSTITUTE | |
' ' # 0x40 -> SPACE | |
'\xa0' # 0x41 -> NO-BREAK SPACE | |
'\xe2' # 0x42 -> LATIN SMALL LETTER A WITH CIRCUMFLEX | |
'\xe4' # 0x43 -> LATIN SMALL LETTER A WITH DIAERESIS | |
'\xe0' # 0x44 -> LATIN SMALL LETTER A WITH GRAVE | |
'\xe1' # 0x45 -> LATIN SMALL LETTER A WITH ACUTE | |
'\xe3' # 0x46 -> LATIN SMALL LETTER A WITH TILDE | |
'\xe5' # 0x47 -> LATIN SMALL LETTER A WITH RING ABOVE | |
'\xe7' # 0x48 -> LATIN SMALL LETTER C WITH CEDILLA | |
'\xf1' # 0x49 -> LATIN SMALL LETTER N WITH TILDE | |
'\xa2' # 0x4A -> CENT SIGN | |
'.' # 0x4B -> FULL STOP | |
'<' # 0x4C -> LESS-THAN SIGN | |
'(' # 0x4D -> LEFT PARENTHESIS | |
'+' # 0x4E -> PLUS SIGN | |
'|' # 0x4F -> VERTICAL LINE | |
'&' # 0x50 -> AMPERSAND | |
'\xe9' # 0x51 -> LATIN SMALL LETTER E WITH ACUTE | |
'\xea' # 0x52 -> LATIN SMALL LETTER E WITH CIRCUMFLEX | |
'\xeb' # 0x53 -> LATIN SMALL LETTER E WITH DIAERESIS | |
'\xe8' # 0x54 -> LATIN SMALL LETTER E WITH GRAVE | |
'\xed' # 0x55 -> LATIN SMALL LETTER I WITH ACUTE | |
'\xee' # 0x56 -> LATIN SMALL LETTER I WITH CIRCUMFLEX | |
'\xef' # 0x57 -> LATIN SMALL LETTER I WITH DIAERESIS | |
'\xec' # 0x58 -> LATIN SMALL LETTER I WITH GRAVE | |
'\xdf' # 0x59 -> LATIN SMALL LETTER SHARP S (GERMAN) | |
'!' # 0x5A -> EXCLAMATION MARK | |
'$' # 0x5B -> DOLLAR SIGN | |
'*' # 0x5C -> ASTERISK | |
')' # 0x5D -> RIGHT PARENTHESIS | |
';' # 0x5E -> SEMICOLON | |
'\xac' # 0x5F -> NOT SIGN | |
'-' # 0x60 -> HYPHEN-MINUS | |
'/' # 0x61 -> SOLIDUS | |
'\xc2' # 0x62 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX | |
'\xc4' # 0x63 -> LATIN CAPITAL LETTER A WITH DIAERESIS | |
'\xc0' # 0x64 -> LATIN CAPITAL LETTER A WITH GRAVE | |
'\xc1' # 0x65 -> LATIN CAPITAL LETTER A WITH ACUTE | |
'\xc3' # 0x66 -> LATIN CAPITAL LETTER A WITH TILDE | |
'\xc5' # 0x67 -> LATIN CAPITAL LETTER A WITH RING ABOVE | |
'\xc7' # 0x68 -> LATIN CAPITAL LETTER C WITH CEDILLA | |
'\xd1' # 0x69 -> LATIN CAPITAL LETTER N WITH TILDE | |
'\xa6' # 0x6A -> BROKEN BAR | |
',' # 0x6B -> COMMA | |
'%' # 0x6C -> PERCENT SIGN | |
'_' # 0x6D -> LOW LINE | |
'>' # 0x6E -> GREATER-THAN SIGN | |
'?' # 0x6F -> QUESTION MARK | |
'\xf8' # 0x70 -> LATIN SMALL LETTER O WITH STROKE | |
'\xc9' # 0x71 -> LATIN CAPITAL LETTER E WITH ACUTE | |
'\xca' # 0x72 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX | |
'\xcb' # 0x73 -> LATIN CAPITAL LETTER E WITH DIAERESIS | |
'\xc8' # 0x74 -> LATIN CAPITAL LETTER E WITH GRAVE | |
'\xcd' # 0x75 -> LATIN CAPITAL LETTER I WITH ACUTE | |
'\xce' # 0x76 -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX | |
'\xcf' # 0x77 -> LATIN CAPITAL LETTER I WITH DIAERESIS | |
'\xcc' # 0x78 -> LATIN CAPITAL LETTER I WITH GRAVE | |
'`' # 0x79 -> GRAVE ACCENT | |
':' # 0x7A -> COLON | |
'#' # 0x7B -> NUMBER SIGN | |
'@' # 0x7C -> COMMERCIAL AT | |
"'" # 0x7D -> APOSTROPHE | |
'=' # 0x7E -> EQUALS SIGN | |
'"' # 0x7F -> QUOTATION MARK | |
'\xd8' # 0x80 -> LATIN CAPITAL LETTER O WITH STROKE | |
'a' # 0x81 -> LATIN SMALL LETTER A | |
'b' # 0x82 -> LATIN SMALL LETTER B | |
'c' # 0x83 -> LATIN SMALL LETTER C | |
'd' # 0x84 -> LATIN SMALL LETTER D | |
'e' # 0x85 -> LATIN SMALL LETTER E | |
'f' # 0x86 -> LATIN SMALL LETTER F | |
'g' # 0x87 -> LATIN SMALL LETTER G | |
'h' # 0x88 -> LATIN SMALL LETTER H | |
'i' # 0x89 -> LATIN SMALL LETTER I | |
'\xab' # 0x8A -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK | |
'\xbb' # 0x8B -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK | |
'\xf0' # 0x8C -> LATIN SMALL LETTER ETH (ICELANDIC) | |
'\xfd' # 0x8D -> LATIN SMALL LETTER Y WITH ACUTE | |
'\xfe' # 0x8E -> LATIN SMALL LETTER THORN (ICELANDIC) | |
'\xb1' # 0x8F -> PLUS-MINUS SIGN | |
'\xb0' # 0x90 -> DEGREE SIGN | |
'j' # 0x91 -> LATIN SMALL LETTER J | |
'k' # 0x92 -> LATIN SMALL LETTER K | |
'l' # 0x93 -> LATIN SMALL LETTER L | |
'm' # 0x94 -> LATIN SMALL LETTER M | |
'n' # 0x95 -> LATIN SMALL LETTER N | |
'o' # 0x96 -> LATIN SMALL LETTER O | |
'p' # 0x97 -> LATIN SMALL LETTER P | |
'q' # 0x98 -> LATIN SMALL LETTER Q | |
'r' # 0x99 -> LATIN SMALL LETTER R | |
'\xaa' # 0x9A -> FEMININE ORDINAL INDICATOR | |
'\xba' # 0x9B -> MASCULINE ORDINAL INDICATOR | |
'\xe6' # 0x9C -> LATIN SMALL LIGATURE AE | |
'\xb8' # 0x9D -> CEDILLA | |
'\xc6' # 0x9E -> LATIN CAPITAL LIGATURE AE | |
'\xa4' # 0x9F -> CURRENCY SIGN | |
'\xb5' # 0xA0 -> MICRO SIGN | |
'~' # 0xA1 -> TILDE | |
's' # 0xA2 -> LATIN SMALL LETTER S | |
't' # 0xA3 -> LATIN SMALL LETTER T | |
'u' # 0xA4 -> LATIN SMALL LETTER U | |
'v' # 0xA5 -> LATIN SMALL LETTER V | |
'w' # 0xA6 -> LATIN SMALL LETTER W | |
'x' # 0xA7 -> LATIN SMALL LETTER X | |
'y' # 0xA8 -> LATIN SMALL LETTER Y | |
'z' # 0xA9 -> LATIN SMALL LETTER Z | |
'\xa1' # 0xAA -> INVERTED EXCLAMATION MARK | |
'\xbf' # 0xAB -> INVERTED QUESTION MARK | |
'\xd0' # 0xAC -> LATIN CAPITAL LETTER ETH (ICELANDIC) | |
'\xdd' # 0xAD -> LATIN CAPITAL LETTER Y WITH ACUTE | |
'\xde' # 0xAE -> LATIN CAPITAL LETTER THORN (ICELANDIC) | |
'\xae' # 0xAF -> REGISTERED SIGN | |
'^' # 0xB0 -> CIRCUMFLEX ACCENT | |
'\xa3' # 0xB1 -> POUND SIGN | |
'\xa5' # 0xB2 -> YEN SIGN | |
'\xb7' # 0xB3 -> MIDDLE DOT | |
'\xa9' # 0xB4 -> COPYRIGHT SIGN | |
'\xa7' # 0xB5 -> SECTION SIGN | |
'\xb6' # 0xB6 -> PILCROW SIGN | |
'\xbc' # 0xB7 -> VULGAR FRACTION ONE QUARTER | |
'\xbd' # 0xB8 -> VULGAR FRACTION ONE HALF | |
'\xbe' # 0xB9 -> VULGAR FRACTION THREE QUARTERS | |
'[' # 0xBA -> LEFT SQUARE BRACKET | |
']' # 0xBB -> RIGHT SQUARE BRACKET | |
'\xaf' # 0xBC -> MACRON | |
'\xa8' # 0xBD -> DIAERESIS | |
'\xb4' # 0xBE -> ACUTE ACCENT | |
'\xd7' # 0xBF -> MULTIPLICATION SIGN | |
'{' # 0xC0 -> LEFT CURLY BRACKET | |
'A' # 0xC1 -> LATIN CAPITAL LETTER A | |
'B' # 0xC2 -> LATIN CAPITAL LETTER B | |
'C' # 0xC3 -> LATIN CAPITAL LETTER C | |
'D' # 0xC4 -> LATIN CAPITAL LETTER D | |
'E' # 0xC5 -> LATIN CAPITAL LETTER E | |
'F' # 0xC6 -> LATIN CAPITAL LETTER F | |
'G' # 0xC7 -> LATIN CAPITAL LETTER G | |
'H' # 0xC8 -> LATIN CAPITAL LETTER H | |
'I' # 0xC9 -> LATIN CAPITAL LETTER I | |
'\xad' # 0xCA -> SOFT HYPHEN | |
'\xf4' # 0xCB -> LATIN SMALL LETTER O WITH CIRCUMFLEX | |
'\xf6' # 0xCC -> LATIN SMALL LETTER O WITH DIAERESIS | |
'\xf2' # 0xCD -> LATIN SMALL LETTER O WITH GRAVE | |
'\xf3' # 0xCE -> LATIN SMALL LETTER O WITH ACUTE | |
'\xf5' # 0xCF -> LATIN SMALL LETTER O WITH TILDE | |
'}' # 0xD0 -> RIGHT CURLY BRACKET | |
'J' # 0xD1 -> LATIN CAPITAL LETTER J | |
'K' # 0xD2 -> LATIN CAPITAL LETTER K | |
'L' # 0xD3 -> LATIN CAPITAL LETTER L | |
'M' # 0xD4 -> LATIN CAPITAL LETTER M | |
'N' # 0xD5 -> LATIN CAPITAL LETTER N | |
'O' # 0xD6 -> LATIN CAPITAL LETTER O | |
'P' # 0xD7 -> LATIN CAPITAL LETTER P | |
'Q' # 0xD8 -> LATIN CAPITAL LETTER Q | |
'R' # 0xD9 -> LATIN CAPITAL LETTER R | |
'\xb9' # 0xDA -> SUPERSCRIPT ONE | |
'\xfb' # 0xDB -> LATIN SMALL LETTER U WITH CIRCUMFLEX | |
'\xfc' # 0xDC -> LATIN SMALL LETTER U WITH DIAERESIS | |
'\xf9' # 0xDD -> LATIN SMALL LETTER U WITH GRAVE | |
'\xfa' # 0xDE -> LATIN SMALL LETTER U WITH ACUTE | |
'\xff' # 0xDF -> LATIN SMALL LETTER Y WITH DIAERESIS | |
'\\' # 0xE0 -> REVERSE SOLIDUS | |
'\xf7' # 0xE1 -> DIVISION SIGN | |
'S' # 0xE2 -> LATIN CAPITAL LETTER S | |
'T' # 0xE3 -> LATIN CAPITAL LETTER T | |
'U' # 0xE4 -> LATIN CAPITAL LETTER U | |
'V' # 0xE5 -> LATIN CAPITAL LETTER V | |
'W' # 0xE6 -> LATIN CAPITAL LETTER W | |
'X' # 0xE7 -> LATIN CAPITAL LETTER X | |
'Y' # 0xE8 -> LATIN CAPITAL LETTER Y | |
'Z' # 0xE9 -> LATIN CAPITAL LETTER Z | |
'\xb2' # 0xEA -> SUPERSCRIPT TWO | |
'\xd4' # 0xEB -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX | |
'\xd6' # 0xEC -> LATIN CAPITAL LETTER O WITH DIAERESIS | |
'\xd2' # 0xED -> LATIN CAPITAL LETTER O WITH GRAVE | |
'\xd3' # 0xEE -> LATIN CAPITAL LETTER O WITH ACUTE | |
'\xd5' # 0xEF -> LATIN CAPITAL LETTER O WITH TILDE | |
'0' # 0xF0 -> DIGIT ZERO | |
'1' # 0xF1 -> DIGIT ONE | |
'2' # 0xF2 -> DIGIT TWO | |
'3' # 0xF3 -> DIGIT THREE | |
'4' # 0xF4 -> DIGIT FOUR | |
'5' # 0xF5 -> DIGIT FIVE | |
'6' # 0xF6 -> DIGIT SIX | |
'7' # 0xF7 -> DIGIT SEVEN | |
'8' # 0xF8 -> DIGIT EIGHT | |
'9' # 0xF9 -> DIGIT NINE | |
'\xb3' # 0xFA -> SUPERSCRIPT THREE | |
'\xdb' # 0xFB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX | |
'\xdc' # 0xFC -> LATIN CAPITAL LETTER U WITH DIAERESIS | |
'\xd9' # 0xFD -> LATIN CAPITAL LETTER U WITH GRAVE | |
'\xda' # 0xFE -> LATIN CAPITAL LETTER U WITH ACUTE | |
'\x9f' # 0xFF -> CONTROL | |
) | |
### Encoding table | |
encoding_table=codecs.charmap_build(decoding_table) |
""" Python Character Mapping Codec cp1006 generated from 'MAPPINGS/VENDORS/MISC/CP1006.TXT' with gencodec.py. | |
"""#" | |
import codecs | |
### Codec APIs | |
class Codec(codecs.Codec): | |
def encode(self,input,errors='strict'): | |
return codecs.charmap_encode(input,errors,encoding_table) | |
def decode(self,input,errors='strict'): | |
return codecs.charmap_decode(input,errors,decoding_table) | |
class IncrementalEncoder(codecs.IncrementalEncoder): | |
def encode(self, input, final=False): | |
return codecs.charmap_encode(input,self.errors,encoding_table)[0] | |
class IncrementalDecoder(codecs.IncrementalDecoder): | |
def decode(self, input, final=False): | |
return codecs.charmap_decode(input,self.errors,decoding_table)[0] | |
class StreamWriter(Codec,codecs.StreamWriter): | |
pass | |
class StreamReader(Codec,codecs.StreamReader): | |
pass | |
### encodings module API | |
def getregentry(): | |
return codecs.CodecInfo( | |
name='cp1006', | |
encode=Codec().encode, | |
decode=Codec().decode, | |
incrementalencoder=IncrementalEncoder, | |
incrementaldecoder=IncrementalDecoder, | |
streamreader=StreamReader, | |
streamwriter=StreamWriter, | |
) | |
### Decoding Table | |
decoding_table = ( | |
'\x00' # 0x00 -> NULL | |
'\x01' # 0x01 -> START OF HEADING | |
'\x02' # 0x02 -> START OF TEXT | |
'\x03' # 0x03 -> END OF TEXT | |
'\x04' # 0x04 -> END OF TRANSMISSION | |
'\x05' # 0x05 -> ENQUIRY | |
'\x06' # 0x06 -> ACKNOWLEDGE | |
'\x07' # 0x07 -> BELL | |
'\x08' # 0x08 -> BACKSPACE | |
'\t' # 0x09 -> HORIZONTAL TABULATION | |
'\n' # 0x0A -> LINE FEED | |
'\x0b' # 0x0B -> VERTICAL TABULATION | |
'\x0c' # 0x0C -> FORM FEED | |
'\r' # 0x0D -> CARRIAGE RETURN | |
'\x0e' # 0x0E -> SHIFT OUT | |
'\x0f' # 0x0F -> SHIFT IN | |
'\x10' # 0x10 -> DATA LINK ESCAPE | |
'\x11' # 0x11 -> DEVICE CONTROL ONE | |
'\x12' # 0x12 -> DEVICE CONTROL TWO | |
'\x13' # 0x13 -> DEVICE CONTROL THREE | |
'\x14' # 0x14 -> DEVICE CONTROL FOUR | |
'\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE | |
'\x16' # 0x16 -> SYNCHRONOUS IDLE | |
'\x17' # 0x17 -> END OF TRANSMISSION BLOCK | |
'\x18' # 0x18 -> CANCEL | |
'\x19' # 0x19 -> END OF MEDIUM | |
'\x1a' # 0x1A -> SUBSTITUTE | |
'\x1b' # 0x1B -> ESCAPE | |
'\x1c' # 0x1C -> FILE SEPARATOR | |
'\x1d' # 0x1D -> GROUP SEPARATOR | |
'\x1e' # 0x1E -> RECORD SEPARATOR | |
'\x1f' # 0x1F -> UNIT SEPARATOR | |
' ' # 0x20 -> SPACE | |
'!' # 0x21 -> EXCLAMATION MARK | |
'"' # 0x22 -> QUOTATION MARK | |
'#' # 0x23 -> NUMBER SIGN | |
'$' # 0x24 -> DOLLAR SIGN | |
'%' # 0x25 -> PERCENT SIGN | |
'&' # 0x26 -> AMPERSAND | |
"'" # 0x27 -> APOSTROPHE | |
'(' # 0x28 -> LEFT PARENTHESIS | |
')' # 0x29 -> RIGHT PARENTHESIS | |
'*' # 0x2A -> ASTERISK | |
'+' # 0x2B -> PLUS SIGN | |
',' # 0x2C -> COMMA | |
'-' # 0x2D -> HYPHEN-MINUS | |
'.' # 0x2E -> FULL STOP | |
'/' # 0x2F -> SOLIDUS | |
'0' # 0x30 -> DIGIT ZERO | |
'1' # 0x31 -> DIGIT ONE | |
'2' # 0x32 -> DIGIT TWO | |
'3' # 0x33 -> DIGIT THREE | |
'4' # 0x34 -> DIGIT FOUR | |
'5' # 0x35 -> DIGIT FIVE | |
'6' # 0x36 -> DIGIT SIX | |
'7' # 0x37 -> DIGIT SEVEN | |
'8' # 0x38 -> DIGIT EIGHT | |
'9' # 0x39 -> DIGIT NINE | |
':' # 0x3A -> COLON | |
';' # 0x3B -> SEMICOLON | |
'<' # 0x3C -> LESS-THAN SIGN | |
'=' # 0x3D -> EQUALS SIGN | |
'>' # 0x3E -> GREATER-THAN SIGN | |
'?' # 0x3F -> QUESTION MARK | |
'@' # 0x40 -> COMMERCIAL AT | |
'A' # 0x41 -> LATIN CAPITAL LETTER A | |
'B' # 0x42 -> LATIN CAPITAL LETTER B | |
'C' # 0x43 -> LATIN CAPITAL LETTER C | |
'D' # 0x44 -> LATIN CAPITAL LETTER D | |
'E' # 0x45 -> LATIN CAPITAL LETTER E | |
'F' # 0x46 -> LATIN CAPITAL LETTER F | |
'G' # 0x47 -> LATIN CAPITAL LETTER G | |
'H' # 0x48 -> LATIN CAPITAL LETTER H | |
'I' # 0x49 -> LATIN CAPITAL LETTER I | |
'J' # 0x4A -> LATIN CAPITAL LETTER J | |
'K' # 0x4B -> LATIN CAPITAL LETTER K | |
'L' # 0x4C -> LATIN CAPITAL LETTER L | |
'M' # 0x4D -> LATIN CAPITAL LETTER M | |
'N' # 0x4E -> LATIN CAPITAL LETTER N | |
'O' # 0x4F -> LATIN CAPITAL LETTER O | |
'P' # 0x50 -> LATIN CAPITAL LETTER P | |
'Q' # 0x51 -> LATIN CAPITAL LETTER Q | |
'R' # 0x52 -> LATIN CAPITAL LETTER R | |
'S' # 0x53 -> LATIN CAPITAL LETTER S | |
'T' # 0x54 -> LATIN CAPITAL LETTER T | |
'U' # 0x55 -> LATIN CAPITAL LETTER U | |
'V' # 0x56 -> LATIN CAPITAL LETTER V | |
'W' # 0x57 -> LATIN CAPITAL LETTER W | |
'X' # 0x58 -> LATIN CAPITAL LETTER X | |
'Y' # 0x59 -> LATIN CAPITAL LETTER Y | |
'Z' # 0x5A -> LATIN CAPITAL LETTER Z | |
'[' # 0x5B -> LEFT SQUARE BRACKET | |
'\\' # 0x5C -> REVERSE SOLIDUS | |
']' # 0x5D -> RIGHT SQUARE BRACKET | |
'^' # 0x5E -> CIRCUMFLEX ACCENT | |
'_' # 0x5F -> LOW LINE | |
'`' # 0x60 -> GRAVE ACCENT | |
'a' # 0x61 -> LATIN SMALL LETTER A | |
'b' # 0x62 -> LATIN SMALL LETTER B | |
'c' # 0x63 -> LATIN SMALL LETTER C | |
'd' # 0x64 -> LATIN SMALL LETTER D | |
'e' # 0x65 -> LATIN SMALL LETTER E | |
'f' # 0x66 -> LATIN SMALL LETTER F | |
'g' # 0x67 -> LATIN SMALL LETTER G | |
'h' # 0x68 -> LATIN SMALL LETTER H | |
'i' # 0x69 -> LATIN SMALL LETTER I | |
'j' # 0x6A -> LATIN SMALL LETTER J | |
'k' # 0x6B -> LATIN SMALL LETTER K | |
'l' # 0x6C -> LATIN SMALL LETTER L | |
'm' # 0x6D -> LATIN SMALL LETTER M | |
'n' # 0x6E -> LATIN SMALL LETTER N | |
'o' # 0x6F -> LATIN SMALL LETTER O | |
'p' # 0x70 -> LATIN SMALL LETTER P | |
'q' # 0x71 -> LATIN SMALL LETTER Q | |
'r' # 0x72 -> LATIN SMALL LETTER R | |
's' # 0x73 -> LATIN SMALL LETTER S | |
't' # 0x74 -> LATIN SMALL LETTER T | |
'u' # 0x75 -> LATIN SMALL LETTER U | |
'v' # 0x76 -> LATIN SMALL LETTER V | |
'w' # 0x77 -> LATIN SMALL LETTER W | |
'x' # 0x78 -> LATIN SMALL LETTER X | |
'y' # 0x79 -> LATIN SMALL LETTER Y | |
'z' # 0x7A -> LATIN SMALL LETTER Z | |
'{' # 0x7B -> LEFT CURLY BRACKET | |
'|' # 0x7C -> VERTICAL LINE | |
'}' # 0x7D -> RIGHT CURLY BRACKET | |
'~' # 0x7E -> TILDE | |
'\x7f' # 0x7F -> DELETE | |
'\x80' # 0x80 -> <control> | |
'\x81' # 0x81 -> <control> | |
'\x82' # 0x82 -> <control> | |
'\x83' # 0x83 -> <control> | |
'\x84' # 0x84 -> <control> | |
'\x85' # 0x85 -> <control> | |
'\x86' # 0x86 -> <control> | |
'\x87' # 0x87 -> <control> | |
'\x88' # 0x88 -> <control> | |
'\x89' # 0x89 -> <control> | |
'\x8a' # 0x8A -> <control> | |
'\x8b' # 0x8B -> <control> | |
'\x8c' # 0x8C -> <control> | |
'\x8d' # 0x8D -> <control> | |
'\x8e' # 0x8E -> <control> | |
'\x8f' # 0x8F -> <control> | |
'\x90' # 0x90 -> <control> | |
'\x91' # 0x91 -> <control> | |
'\x92' # 0x92 -> <control> | |
'\x93' # 0x93 -> <control> | |
'\x94' # 0x94 -> <control> | |
'\x95' # 0x95 -> <control> | |
'\x96' # 0x96 -> <control> | |
'\x97' # 0x97 -> <control> | |
'\x98' # 0x98 -> <control> | |
'\x99' # 0x99 -> <control> | |
'\x9a' # 0x9A -> <control> | |
'\x9b' # 0x9B -> <control> | |
'\x9c' # 0x9C -> <control> | |
'\x9d' # 0x9D -> <control> | |
'\x9e' # 0x9E -> <control> | |
'\x9f' # 0x9F -> <control> | |
'\xa0' # 0xA0 -> NO-BREAK SPACE | |
'\u06f0' # 0xA1 -> EXTENDED ARABIC-INDIC DIGIT ZERO | |
'\u06f1' # 0xA2 -> EXTENDED ARABIC-INDIC DIGIT ONE | |
'\u06f2' # 0xA3 -> EXTENDED ARABIC-INDIC DIGIT TWO | |
'\u06f3' # 0xA4 -> EXTENDED ARABIC-INDIC DIGIT THREE | |
'\u06f4' # 0xA5 -> EXTENDED ARABIC-INDIC DIGIT FOUR | |
'\u06f5' # 0xA6 -> EXTENDED ARABIC-INDIC DIGIT FIVE | |
'\u06f6' # 0xA7 -> EXTENDED ARABIC-INDIC DIGIT SIX | |
'\u06f7' # 0xA8 -> EXTENDED ARABIC-INDIC DIGIT SEVEN | |
'\u06f8' # 0xA9 -> EXTENDED ARABIC-INDIC DIGIT EIGHT | |
'\u06f9' # 0xAA -> EXTENDED ARABIC-INDIC DIGIT NINE | |
'\u060c' # 0xAB -> ARABIC COMMA | |
'\u061b' # 0xAC -> ARABIC SEMICOLON | |
'\xad' # 0xAD -> SOFT HYPHEN | |
'\u061f' # 0xAE -> ARABIC QUESTION MARK | |
'\ufe81' # 0xAF -> ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM | |
'\ufe8d' # 0xB0 -> ARABIC LETTER ALEF ISOLATED FORM | |
'\ufe8e' # 0xB1 -> ARABIC LETTER ALEF FINAL FORM | |
'\ufe8e' # 0xB2 -> ARABIC LETTER ALEF FINAL FORM | |
'\ufe8f' # 0xB3 -> ARABIC LETTER BEH ISOLATED FORM | |
'\ufe91' # 0xB4 -> ARABIC LETTER BEH INITIAL FORM | |
'\ufb56' # 0xB5 -> ARABIC LETTER PEH ISOLATED FORM | |
'\ufb58' # 0xB6 -> ARABIC LETTER PEH INITIAL FORM | |
'\ufe93' # 0xB7 -> ARABIC LETTER TEH MARBUTA ISOLATED FORM | |
'\ufe95' # 0xB8 -> ARABIC LETTER TEH ISOLATED FORM | |
'\ufe97' # 0xB9 -> ARABIC LETTER TEH INITIAL FORM | |
'\ufb66' # 0xBA -> ARABIC LETTER TTEH ISOLATED FORM | |
'\ufb68' # 0xBB -> ARABIC LETTER TTEH INITIAL FORM | |
'\ufe99' # 0xBC -> ARABIC LETTER THEH ISOLATED FORM | |
'\ufe9b' # 0xBD -> ARABIC LETTER THEH INITIAL FORM | |
'\ufe9d' # 0xBE -> ARABIC LETTER JEEM ISOLATED FORM | |
'\ufe9f' # 0xBF -> ARABIC LETTER JEEM INITIAL FORM | |
'\ufb7a' # 0xC0 -> ARABIC LETTER TCHEH ISOLATED FORM | |
'\ufb7c' # 0xC1 -> ARABIC LETTER TCHEH INITIAL FORM | |
'\ufea1' # 0xC2 -> ARABIC LETTER HAH ISOLATED FORM | |
'\ufea3' # 0xC3 -> ARABIC LETTER HAH INITIAL FORM | |
'\ufea5' # 0xC4 -> ARABIC LETTER KHAH ISOLATED FORM | |
'\ufea7' # 0xC5 -> ARABIC LETTER KHAH INITIAL FORM | |
'\ufea9' # 0xC6 -> ARABIC LETTER DAL ISOLATED FORM | |
'\ufb84' # 0xC7 -> ARABIC LETTER DAHAL ISOLATED FORMN | |
'\ufeab' # 0xC8 -> ARABIC LETTER THAL ISOLATED FORM | |
'\ufead' # 0xC9 -> ARABIC LETTER REH ISOLATED FORM | |
'\ufb8c' # 0xCA -> ARABIC LETTER RREH ISOLATED FORM | |
'\ufeaf' # 0xCB -> ARABIC LETTER ZAIN ISOLATED FORM | |
'\ufb8a' # 0xCC -> ARABIC LETTER JEH ISOLATED FORM | |
'\ufeb1' # 0xCD -> ARABIC LETTER SEEN ISOLATED FORM | |
'\ufeb3' # 0xCE -> ARABIC LETTER SEEN INITIAL FORM | |
'\ufeb5' # 0xCF -> ARABIC LETTER SHEEN ISOLATED FORM | |
'\ufeb7' # 0xD0 -> ARABIC LETTER SHEEN INITIAL FORM | |
'\ufeb9' # 0xD1 -> ARABIC LETTER SAD ISOLATED FORM | |
'\ufebb' # 0xD2 -> ARABIC LETTER SAD INITIAL FORM | |
'\ufebd' # 0xD3 -> ARABIC LETTER DAD ISOLATED FORM | |
'\ufebf' # 0xD4 -> ARABIC LETTER DAD INITIAL FORM | |
'\ufec1' # 0xD5 -> ARABIC LETTER TAH ISOLATED FORM | |
'\ufec5' # 0xD6 -> ARABIC LETTER ZAH ISOLATED FORM | |
'\ufec9' # 0xD7 -> ARABIC LETTER AIN ISOLATED FORM | |
'\ufeca' # 0xD8 -> ARABIC LETTER AIN FINAL FORM | |
'\ufecb' # 0xD9 -> ARABIC LETTER AIN INITIAL FORM | |
'\ufecc' # 0xDA -> ARABIC LETTER AIN MEDIAL FORM | |
'\ufecd' # 0xDB -> ARABIC LETTER GHAIN ISOLATED FORM | |
'\ufece' # 0xDC -> ARABIC LETTER GHAIN FINAL FORM | |
'\ufecf' # 0xDD -> ARABIC LETTER GHAIN INITIAL FORM | |
'\ufed0' # 0xDE -> ARABIC LETTER GHAIN MEDIAL FORM | |
'\ufed1' # 0xDF -> ARABIC LETTER FEH ISOLATED FORM | |
'\ufed3' # 0xE0 -> ARABIC LETTER FEH INITIAL FORM | |
'\ufed5' # 0xE1 -> ARABIC LETTER QAF ISOLATED FORM | |
'\ufed7' # 0xE2 -> ARABIC LETTER QAF INITIAL FORM | |
'\ufed9' # 0xE3 -> ARABIC LETTER KAF ISOLATED FORM | |
'\ufedb' # 0xE4 -> ARABIC LETTER KAF INITIAL FORM | |
'\ufb92' # 0xE5 -> ARABIC LETTER GAF ISOLATED FORM | |
'\ufb94' # 0xE6 -> ARABIC LETTER GAF INITIAL FORM | |
'\ufedd' # 0xE7 -> ARABIC LETTER LAM ISOLATED FORM | |
'\ufedf' # 0xE8 -> ARABIC LETTER LAM INITIAL FORM | |
'\ufee0' # 0xE9 -> ARABIC LETTER LAM MEDIAL FORM | |
'\ufee1' # 0xEA -> ARABIC LETTER MEEM ISOLATED FORM | |
'\ufee3' # 0xEB -> ARABIC LETTER MEEM INITIAL FORM | |
'\ufb9e' # 0xEC -> ARABIC LETTER NOON GHUNNA ISOLATED FORM | |
'\ufee5' # 0xED -> ARABIC LETTER NOON ISOLATED FORM | |
'\ufee7' # 0xEE -> ARABIC LETTER NOON INITIAL FORM | |
'\ufe85' # 0xEF -> ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM | |
'\ufeed' # 0xF0 -> ARABIC LETTER WAW ISOLATED FORM | |
'\ufba6' # 0xF1 -> ARABIC LETTER HEH GOAL ISOLATED FORM | |
'\ufba8' # 0xF2 -> ARABIC LETTER HEH GOAL INITIAL FORM | |
'\ufba9' # 0xF3 -> ARABIC LETTER HEH GOAL MEDIAL FORM | |
'\ufbaa' # 0xF4 -> ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM | |
'\ufe80' # 0xF5 -> ARABIC LETTER HAMZA ISOLATED FORM | |
'\ufe89' # 0xF6 -> ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM | |
'\ufe8a' # 0xF7 -> ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM | |
'\ufe8b' # 0xF8 -> ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM | |
'\ufef1' # 0xF9 -> ARABIC LETTER YEH ISOLATED FORM | |
'\ufef2' # 0xFA -> ARABIC LETTER YEH FINAL FORM | |
'\ufef3' # 0xFB -> ARABIC LETTER YEH INITIAL FORM | |
'\ufbb0' # 0xFC -> ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM | |
'\ufbae' # 0xFD -> ARABIC LETTER YEH BARREE ISOLATED FORM | |
'\ufe7c' # 0xFE -> ARABIC SHADDA ISOLATED FORM | |
'\ufe7d' # 0xFF -> ARABIC SHADDA MEDIAL FORM | |
) | |
### Encoding table | |
encoding_table=codecs.charmap_build(decoding_table) |
""" Python Character Mapping Codec cp1026 generated from 'MAPPINGS/VENDORS/MICSFT/EBCDIC/CP1026.TXT' with gencodec.py. | |
"""#" | |
import codecs | |
### Codec APIs | |
class Codec(codecs.Codec): | |
def encode(self,input,errors='strict'): | |
return codecs.charmap_encode(input,errors,encoding_table) | |
def decode(self,input,errors='strict'): | |
return codecs.charmap_decode(input,errors,decoding_table) | |
class IncrementalEncoder(codecs.IncrementalEncoder): | |
def encode(self, input, final=False): | |
return codecs.charmap_encode(input,self.errors,encoding_table)[0] | |
class IncrementalDecoder(codecs.IncrementalDecoder): | |
def decode(self, input, final=False): | |
return codecs.charmap_decode(input,self.errors,decoding_table)[0] | |
class StreamWriter(Codec,codecs.StreamWriter): | |
pass | |
class StreamReader(Codec,codecs.StreamReader): | |
pass | |
### encodings module API | |
def getregentry(): | |
return codecs.CodecInfo( | |
name='cp1026', | |
encode=Codec().encode, | |
decode=Codec().decode, | |
incrementalencoder=IncrementalEncoder, | |
incrementaldecoder=IncrementalDecoder, | |
streamreader=StreamReader, | |
streamwriter=StreamWriter, | |
) | |
### Decoding Table | |
decoding_table = ( | |
'\x00' # 0x00 -> NULL | |
'\x01' # 0x01 -> START OF HEADING | |
'\x02' # 0x02 -> START OF TEXT | |
'\x03' # 0x03 -> END OF TEXT | |
'\x9c' # 0x04 -> CONTROL | |
'\t' # 0x05 -> HORIZONTAL TABULATION | |
'\x86' # 0x06 -> CONTROL | |
'\x7f' # 0x07 -> DELETE | |
'\x97' # 0x08 -> CONTROL | |
'\x8d' # 0x09 -> CONTROL | |
'\x8e' # 0x0A -> CONTROL | |
'\x0b' # 0x0B -> VERTICAL TABULATION | |
'\x0c' # 0x0C -> FORM FEED | |
'\r' # 0x0D -> CARRIAGE RETURN | |
'\x0e' # 0x0E -> SHIFT OUT | |
'\x0f' # 0x0F -> SHIFT IN | |
'\x10' # 0x10 -> DATA LINK ESCAPE | |
'\x11' # 0x11 -> DEVICE CONTROL ONE | |
'\x12' # 0x12 -> DEVICE CONTROL TWO | |
'\x13' # 0x13 -> DEVICE CONTROL THREE | |
'\x9d' # 0x14 -> CONTROL | |
'\x85' # 0x15 -> CONTROL | |
'\x08' # 0x16 -> BACKSPACE | |
'\x87' # 0x17 -> CONTROL | |
'\x18' # 0x18 -> CANCEL | |
'\x19' # 0x19 -> END OF MEDIUM | |
'\x92' # 0x1A -> CONTROL | |
'\x8f' # 0x1B -> CONTROL | |
'\x1c' # 0x1C -> FILE SEPARATOR | |
'\x1d' # 0x1D -> GROUP SEPARATOR | |
'\x1e' # 0x1E -> RECORD SEPARATOR | |
'\x1f' # 0x1F -> UNIT SEPARATOR | |
'\x80' # 0x20 -> CONTROL | |
'\x81' # 0x21 -> CONTROL | |
'\x82' # 0x22 -> CONTROL | |
'\x83' # 0x23 -> CONTROL | |
'\x84' # 0x24 -> CONTROL | |
'\n' # 0x25 -> LINE FEED | |
'\x17' # 0x26 -> END OF TRANSMISSION BLOCK | |
'\x1b' # 0x27 -> ESCAPE | |
'\x88' # 0x28 -> CONTROL | |
'\x89' # 0x29 -> CONTROL | |
'\x8a' # 0x2A -> CONTROL | |
'\x8b' # 0x2B -> CONTROL | |
'\x8c' # 0x2C -> CONTROL | |
'\x05' # 0x2D -> ENQUIRY | |
'\x06' # 0x2E -> ACKNOWLEDGE | |
'\x07' # 0x2F -> BELL | |
'\x90' # 0x30 -> CONTROL | |
'\x91' # 0x31 -> CONTROL | |
'\x16' # 0x32 -> SYNCHRONOUS IDLE | |
'\x93' # 0x33 -> CONTROL | |
'\x94' # 0x34 -> CONTROL | |
'\x95' # 0x35 -> CONTROL | |
'\x96' # 0x36 -> CONTROL | |
'\x04' # 0x37 -> END OF TRANSMISSION | |
'\x98' # 0x38 -> CONTROL | |
'\x99' # 0x39 -> CONTROL | |
'\x9a' # 0x3A -> CONTROL | |
'\x9b' # 0x3B -> CONTROL | |
'\x14' # 0x3C -> DEVICE CONTROL FOUR | |
'\x15' # 0x3D -> NEGATIVE ACKNOWLEDGE | |
'\x9e' # 0x3E -> CONTROL | |
'\x1a' # 0x3F -> SUBSTITUTE | |
' ' # 0x40 -> SPACE | |
'\xa0' # 0x41 -> NO-BREAK SPACE | |
'\xe2' # 0x42 -> LATIN SMALL LETTER A WITH CIRCUMFLEX | |
'\xe4' # 0x43 -> LATIN SMALL LETTER A WITH DIAERESIS | |
'\xe0' # 0x44 -> LATIN SMALL LETTER A WITH GRAVE | |
'\xe1' # 0x45 -> LATIN SMALL LETTER A WITH ACUTE | |
'\xe3' # 0x46 -> LATIN SMALL LETTER A WITH TILDE | |
'\xe5' # 0x47 -> LATIN SMALL LETTER A WITH RING ABOVE | |
'{' # 0x48 -> LEFT CURLY BRACKET | |
'\xf1' # 0x49 -> LATIN SMALL LETTER N WITH TILDE | |
'\xc7' # 0x4A -> LATIN CAPITAL LETTER C WITH CEDILLA | |
'.' # 0x4B -> FULL STOP | |
'<' # 0x4C -> LESS-THAN SIGN | |
'(' # 0x4D -> LEFT PARENTHESIS | |
'+' # 0x4E -> PLUS SIGN | |
'!' # 0x4F -> EXCLAMATION MARK | |
'&' # 0x50 -> AMPERSAND | |
'\xe9' # 0x51 -> LATIN SMALL LETTER E WITH ACUTE | |
'\xea' # 0x52 -> LATIN SMALL LETTER E WITH CIRCUMFLEX | |
'\xeb' # 0x53 -> LATIN SMALL LETTER E WITH DIAERESIS | |
'\xe8' # 0x54 -> LATIN SMALL LETTER E WITH GRAVE | |
'\xed' # 0x55 -> LATIN SMALL LETTER I WITH ACUTE | |
'\xee' # 0x56 -> LATIN SMALL LETTER I WITH CIRCUMFLEX | |
'\xef' # 0x57 -> LATIN SMALL LETTER I WITH DIAERESIS | |
'\xec' # 0x58 -> LATIN SMALL LETTER I WITH GRAVE | |
'\xdf' # 0x59 -> LATIN SMALL LETTER SHARP S (GERMAN) | |
'\u011e' # 0x5A -> LATIN CAPITAL LETTER G WITH BREVE | |
'\u0130' # 0x5B -> LATIN CAPITAL LETTER I WITH DOT ABOVE | |
'*' # 0x5C -> ASTERISK | |
')' # 0x5D -> RIGHT PARENTHESIS | |
';' # 0x5E -> SEMICOLON | |
'^' # 0x5F -> CIRCUMFLEX ACCENT | |
'-' # 0x60 -> HYPHEN-MINUS | |
'/' # 0x61 -> SOLIDUS | |
'\xc2' # 0x62 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX | |
'\xc4' # 0x63 -> LATIN CAPITAL LETTER A WITH DIAERESIS | |
'\xc0' # 0x64 -> LATIN CAPITAL LETTER A WITH GRAVE | |
'\xc1' # 0x65 -> LATIN CAPITAL LETTER A WITH ACUTE | |
'\xc3' # 0x66 -> LATIN CAPITAL LETTER A WITH TILDE | |
'\xc5' # 0x67 -> LATIN CAPITAL LETTER A WITH RING ABOVE | |
'[' # 0x68 -> LEFT SQUARE BRACKET | |
'\xd1' # 0x69 -> LATIN CAPITAL LETTER N WITH TILDE | |
'\u015f' # 0x6A -> LATIN SMALL LETTER S WITH CEDILLA | |
',' # 0x6B -> COMMA | |
'%' # 0x6C -> PERCENT SIGN | |
'_' # 0x6D -> LOW LINE | |
'>' # 0x6E -> GREATER-THAN SIGN | |
'?' # 0x6F -> QUESTION MARK | |
'\xf8' # 0x70 -> LATIN SMALL LETTER O WITH STROKE | |
'\xc9' # 0x71 -> LATIN CAPITAL LETTER E WITH ACUTE | |
'\xca' # 0x72 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX | |
'\xcb' # 0x73 -> LATIN CAPITAL LETTER E WITH DIAERESIS | |
'\xc8' # 0x74 -> LATIN CAPITAL LETTER E WITH GRAVE | |
'\xcd' # 0x75 -> LATIN CAPITAL LETTER I WITH ACUTE | |
'\xce' # 0x76 -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX | |
'\xcf' # 0x77 -> LATIN CAPITAL LETTER I WITH DIAERESIS | |
'\xcc' # 0x78 -> LATIN CAPITAL LETTER I WITH GRAVE | |
'\u0131' # 0x79 -> LATIN SMALL LETTER DOTLESS I | |
':' # 0x7A -> COLON | |
'\xd6' # 0x7B -> LATIN CAPITAL LETTER O WITH DIAERESIS | |
'\u015e' # 0x7C -> LATIN CAPITAL LETTER S WITH CEDILLA | |
"'" # 0x7D -> APOSTROPHE | |
'=' # 0x7E -> EQUALS SIGN | |
'\xdc' # 0x7F -> LATIN CAPITAL LETTER U WITH DIAERESIS | |
'\xd8' # 0x80 -> LATIN CAPITAL LETTER O WITH STROKE | |
'a' # 0x81 -> LATIN SMALL LETTER A | |
'b' # 0x82 -> LATIN SMALL LETTER B | |
'c' # 0x83 -> LATIN SMALL LETTER C | |
'd' # 0x84 -> LATIN SMALL LETTER D | |
'e' # 0x85 -> LATIN SMALL LETTER E | |
'f' # 0x86 -> LATIN SMALL LETTER F | |
'g' # 0x87 -> LATIN SMALL LETTER G | |
'h' # 0x88 -> LATIN SMALL LETTER H | |
'i' # 0x89 -> LATIN SMALL LETTER I | |
'\xab' # 0x8A -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK | |
'\xbb' # 0x8B -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK | |
'}' # 0x8C -> RIGHT CURLY BRACKET | |
'`' # 0x8D -> GRAVE ACCENT | |
'\xa6' # 0x8E -> BROKEN BAR | |
'\xb1' # 0x8F -> PLUS-MINUS SIGN | |
'\xb0' # 0x90 -> DEGREE SIGN | |
'j' # 0x91 -> LATIN SMALL LETTER J | |
'k' # 0x92 -> LATIN SMALL LETTER K | |
'l' # 0x93 -> LATIN SMALL LETTER L | |
'm' # 0x94 -> LATIN SMALL LETTER M | |
'n' # 0x95 -> LATIN SMALL LETTER N | |
'o' # 0x96 -> LATIN SMALL LETTER O | |
'p' # 0x97 -> LATIN SMALL LETTER P | |
'q' # 0x98 -> LATIN SMALL LETTER Q | |
'r' # 0x99 -> LATIN SMALL LETTER R | |
'\xaa' # 0x9A -> FEMININE ORDINAL INDICATOR | |
'\xba' # 0x9B -> MASCULINE ORDINAL INDICATOR | |
'\xe6' # 0x9C -> LATIN SMALL LIGATURE AE | |
'\xb8' # 0x9D -> CEDILLA | |
'\xc6' # 0x9E -> LATIN CAPITAL LIGATURE AE | |
'\xa4' # 0x9F -> CURRENCY SIGN | |
'\xb5' # 0xA0 -> MICRO SIGN | |
'\xf6' # 0xA1 -> LATIN SMALL LETTER O WITH DIAERESIS | |
's' # 0xA2 -> LATIN SMALL LETTER S | |
't' # 0xA3 -> LATIN SMALL LETTER T | |
'u' # 0xA4 -> LATIN SMALL LETTER U | |
'v' # 0xA5 -> LATIN SMALL LETTER V | |
'w' # 0xA6 -> LATIN SMALL LETTER W | |
'x' # 0xA7 -> LATIN SMALL LETTER X | |
'y' # 0xA8 -> LATIN SMALL LETTER Y | |
'z' # 0xA9 -> LATIN SMALL LETTER Z | |
'\xa1' # 0xAA -> INVERTED EXCLAMATION MARK | |
'\xbf' # 0xAB -> INVERTED QUESTION MARK | |
']' # 0xAC -> RIGHT SQUARE BRACKET | |
'$' # 0xAD -> DOLLAR SIGN | |
'@' # 0xAE -> COMMERCIAL AT | |
'\xae' # 0xAF -> REGISTERED SIGN | |
'\xa2' # 0xB0 -> CENT SIGN | |
'\xa3' # 0xB1 -> POUND SIGN | |
'\xa5' # 0xB2 -> YEN SIGN | |
'\xb7' # 0xB3 -> MIDDLE DOT | |
'\xa9' # 0xB4 -> COPYRIGHT SIGN | |
'\xa7' # 0xB5 -> SECTION SIGN | |
'\xb6' # 0xB6 -> PILCROW SIGN | |
'\xbc' # 0xB7 -> VULGAR FRACTION ONE QUARTER | |
'\xbd' # 0xB8 -> VULGAR FRACTION ONE HALF | |
'\xbe' # 0xB9 -> VULGAR FRACTION THREE QUARTERS | |
'\xac' # 0xBA -> NOT SIGN | |
'|' # 0xBB -> VERTICAL LINE | |
'\xaf' # 0xBC -> MACRON | |
'\xa8' # 0xBD -> DIAERESIS | |
'\xb4' # 0xBE -> ACUTE ACCENT | |
'\xd7' # 0xBF -> MULTIPLICATION SIGN | |
'\xe7' # 0xC0 -> LATIN SMALL LETTER C WITH CEDILLA | |
'A' # 0xC1 -> LATIN CAPITAL LETTER A | |
'B' # 0xC2 -> LATIN CAPITAL LETTER B | |
'C' # 0xC3 -> LATIN CAPITAL LETTER C | |
'D' # 0xC4 -> LATIN CAPITAL LETTER D | |
'E' # 0xC5 -> LATIN CAPITAL LETTER E | |
'F' # 0xC6 -> LATIN CAPITAL LETTER F | |
'G' # 0xC7 -> LATIN CAPITAL LETTER G | |
'H' # 0xC8 -> LATIN CAPITAL LETTER H | |
'I' # 0xC9 -> LATIN CAPITAL LETTER I | |
'\xad' # 0xCA -> SOFT HYPHEN | |
'\xf4' # 0xCB -> LATIN SMALL LETTER O WITH CIRCUMFLEX | |
'~' # 0xCC -> TILDE | |
'\xf2' # 0xCD -> LATIN SMALL LETTER O WITH GRAVE | |
'\xf3' # 0xCE -> LATIN SMALL LETTER O WITH ACUTE | |
'\xf5' # 0xCF -> LATIN SMALL LETTER O WITH TILDE | |
'\u011f' # 0xD0 -> LATIN SMALL LETTER G WITH BREVE | |
'J' # 0xD1 -> LATIN CAPITAL LETTER J | |
'K' # 0xD2 -> LATIN CAPITAL LETTER K | |
'L' # 0xD3 -> LATIN CAPITAL LETTER L | |
'M' # 0xD4 -> LATIN CAPITAL LETTER M | |
'N' # 0xD5 -> LATIN CAPITAL LETTER N | |
'O' # 0xD6 -> LATIN CAPITAL LETTER O | |
'P' # 0xD7 -> LATIN CAPITAL LETTER P | |
'Q' # 0xD8 -> LATIN CAPITAL LETTER Q | |
'R' # 0xD9 -> LATIN CAPITAL LETTER R | |
'\xb9' # 0xDA -> SUPERSCRIPT ONE | |
'\xfb' # 0xDB -> LATIN SMALL LETTER U WITH CIRCUMFLEX | |
'\\' # 0xDC -> REVERSE SOLIDUS | |
'\xf9' # 0xDD -> LATIN SMALL LETTER U WITH GRAVE | |
'\xfa' # 0xDE -> LATIN SMALL LETTER U WITH ACUTE | |
'\xff' # 0xDF -> LATIN SMALL LETTER Y WITH DIAERESIS | |
'\xfc' # 0xE0 -> LATIN SMALL LETTER U WITH DIAERESIS | |
'\xf7' # 0xE1 -> DIVISION SIGN | |
'S' # 0xE2 -> LATIN CAPITAL LETTER S | |
'T' # 0xE3 -> LATIN CAPITAL LETTER T | |
'U' # 0xE4 -> LATIN CAPITAL LETTER U | |
'V' # 0xE5 -> LATIN CAPITAL LETTER V | |
'W' # 0xE6 -> LATIN CAPITAL LETTER W | |
'X' # 0xE7 -> LATIN CAPITAL LETTER X | |
'Y' # 0xE8 -> LATIN CAPITAL LETTER Y | |
'Z' # 0xE9 -> LATIN CAPITAL LETTER Z | |
'\xb2' # 0xEA -> SUPERSCRIPT TWO | |
'\xd4' # 0xEB -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX | |
'#' # 0xEC -> NUMBER SIGN | |
'\xd2' # 0xED -> LATIN CAPITAL LETTER O WITH GRAVE | |
'\xd3' # 0xEE -> LATIN CAPITAL LETTER O WITH ACUTE | |
'\xd5' # 0xEF -> LATIN CAPITAL LETTER O WITH TILDE | |
'0' # 0xF0 -> DIGIT ZERO | |
'1' # 0xF1 -> DIGIT ONE | |
'2' # 0xF2 -> DIGIT TWO | |
'3' # 0xF3 -> DIGIT THREE | |
'4' # 0xF4 -> DIGIT FOUR | |
'5' # 0xF5 -> DIGIT FIVE | |
'6' # 0xF6 -> DIGIT SIX | |
'7' # 0xF7 -> DIGIT SEVEN | |
'8' # 0xF8 -> DIGIT EIGHT | |
'9' # 0xF9 -> DIGIT NINE | |
'\xb3' # 0xFA -> SUPERSCRIPT THREE | |
'\xdb' # 0xFB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX | |
'"' # 0xFC -> QUOTATION MARK | |
'\xd9' # 0xFD -> LATIN CAPITAL LETTER U WITH GRAVE | |
'\xda' # 0xFE -> LATIN CAPITAL LETTER U WITH ACUTE | |
'\x9f' # 0xFF -> CONTROL | |
) | |
### Encoding table | |
encoding_table=codecs.charmap_build(decoding_table) |
""" Python Character Mapping Codec for CP1125 | |
"""#" | |
import codecs | |
### Codec APIs | |
class Codec(codecs.Codec): | |
def encode(self,input,errors='strict'): | |
return codecs.charmap_encode(input,errors,encoding_map) | |
def decode(self,input,errors='strict'): | |
return codecs.charmap_decode(input,errors,decoding_table) | |
class IncrementalEncoder(codecs.IncrementalEncoder): | |
def encode(self, input, final=False): | |
return codecs.charmap_encode(input,self.errors,encoding_map)[0] | |
class IncrementalDecoder(codecs.IncrementalDecoder): | |
def decode(self, input, final=False): | |
return codecs.charmap_decode(input,self.errors,decoding_table)[0] | |
class StreamWriter(Codec,codecs.StreamWriter): | |
pass | |
class StreamReader(Codec,codecs.StreamReader): | |
pass | |
### encodings module API | |
def getregentry(): | |
return codecs.CodecInfo( | |
name='cp1125', | |
encode=Codec().encode, | |
decode=Codec().decode, | |
incrementalencoder=IncrementalEncoder, | |
incrementaldecoder=IncrementalDecoder, | |
streamreader=StreamReader, | |
streamwriter=StreamWriter, | |
) | |
### Decoding Map | |
decoding_map = codecs.make_identity_dict(range(256)) | |
decoding_map.update({ | |
0x0080: 0x0410, # CYRILLIC CAPITAL LETTER A | |
0x0081: 0x0411, # CYRILLIC CAPITAL LETTER BE | |
0x0082: 0x0412, # CYRILLIC CAPITAL LETTER VE | |
0x0083: 0x0413, # CYRILLIC CAPITAL LETTER GHE | |
0x0084: 0x0414, # CYRILLIC CAPITAL LETTER DE | |
0x0085: 0x0415, # CYRILLIC CAPITAL LETTER IE | |
0x0086: 0x0416, # CYRILLIC CAPITAL LETTER ZHE | |
0x0087: 0x0417, # CYRILLIC CAPITAL LETTER ZE | |
0x0088: 0x0418, # CYRILLIC CAPITAL LETTER I | |
0x0089: 0x0419, # CYRILLIC CAPITAL LETTER SHORT I | |
0x008a: 0x041a, # CYRILLIC CAPITAL LETTER KA | |
0x008b: 0x041b, # CYRILLIC CAPITAL LETTER EL | |
0x008c: 0x041c, # CYRILLIC CAPITAL LETTER EM | |
0x008d: 0x041d, # CYRILLIC CAPITAL LETTER EN | |
0x008e: 0x041e, # CYRILLIC CAPITAL LETTER O | |
0x008f: 0x041f, # CYRILLIC CAPITAL LETTER PE | |
0x0090: 0x0420, # CYRILLIC CAPITAL LETTER ER | |
0x0091: 0x0421, # CYRILLIC CAPITAL LETTER ES | |
0x0092: 0x0422, # CYRILLIC CAPITAL LETTER TE | |
0x0093: 0x0423, # CYRILLIC CAPITAL LETTER U | |
0x0094: 0x0424, # CYRILLIC CAPITAL LETTER EF | |
0x0095: 0x0425, # CYRILLIC CAPITAL LETTER HA | |
0x0096: 0x0426, # CYRILLIC CAPITAL LETTER TSE | |
0x0097: 0x0427, # CYRILLIC CAPITAL LETTER CHE | |
0x0098: 0x0428, # CYRILLIC CAPITAL LETTER SHA | |
0x0099: 0x0429, # CYRILLIC CAPITAL LETTER SHCHA | |
0x009a: 0x042a, # CYRILLIC CAPITAL LETTER HARD SIGN | |
0x009b: 0x042b, # CYRILLIC CAPITAL LETTER YERU | |
0x009c: 0x042c, # CYRILLIC CAPITAL LETTER SOFT SIGN | |
0x009d: 0x042d, # CYRILLIC CAPITAL LETTER E | |
0x009e: 0x042e, # CYRILLIC CAPITAL LETTER YU | |
0x009f: 0x042f, # CYRILLIC CAPITAL LETTER YA | |
0x00a0: 0x0430, # CYRILLIC SMALL LETTER A | |
0x00a1: 0x0431, # CYRILLIC SMALL LETTER BE | |
0x00a2: 0x0432, # CYRILLIC SMALL LETTER VE | |
0x00a3: 0x0433, # CYRILLIC SMALL LETTER GHE | |
0x00a4: 0x0434, # CYRILLIC SMALL LETTER DE | |
0x00a5: 0x0435, # CYRILLIC SMALL LETTER IE | |
0x00a6: 0x0436, # CYRILLIC SMALL LETTER ZHE | |
0x00a7: 0x0437, # CYRILLIC SMALL LETTER ZE | |
0x00a8: 0x0438, # CYRILLIC SMALL LETTER I | |
0x00a9: 0x0439, # CYRILLIC SMALL LETTER SHORT I | |
0x00aa: 0x043a, # CYRILLIC SMALL LETTER KA | |
0x00ab: 0x043b, # CYRILLIC SMALL LETTER EL | |
0x00ac: 0x043c, # CYRILLIC SMALL LETTER EM | |
0x00ad: 0x043d, # CYRILLIC SMALL LETTER EN | |
0x00ae: 0x043e, # CYRILLIC SMALL LETTER O | |
0x00af: 0x043f, # CYRILLIC SMALL LETTER PE | |
0x00b0: 0x2591, # LIGHT SHADE | |
0x00b1: 0x2592, # MEDIUM SHADE | |
0x00b2: 0x2593, # DARK SHADE | |
0x00b3: 0x2502, # BOX DRAWINGS LIGHT VERTICAL | |
0x00b4: 0x2524, # BOX DRAWINGS LIGHT VERTICAL AND LEFT | |
0x00b5: 0x2561, # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE | |
0x00b6: 0x2562, # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE | |
0x00b7: 0x2556, # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE | |
0x00b8: 0x2555, # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE | |
0x00b9: 0x2563, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT | |
0x00ba: 0x2551, # BOX DRAWINGS DOUBLE VERTICAL | |
0x00bb: 0x2557, # BOX DRAWINGS DOUBLE DOWN AND LEFT | |
0x00bc: 0x255d, # BOX DRAWINGS DOUBLE UP AND LEFT | |
0x00bd: 0x255c, # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE | |
0x00be: 0x255b, # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE | |
0x00bf: 0x2510, # BOX DRAWINGS LIGHT DOWN AND LEFT | |
0x00c0: 0x2514, # BOX DRAWINGS LIGHT UP AND RIGHT | |
0x00c1: 0x2534, # BOX DRAWINGS LIGHT UP AND HORIZONTAL | |
0x00c2: 0x252c, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL | |
0x00c3: 0x251c, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT | |
0x00c4: 0x2500, # BOX DRAWINGS LIGHT HORIZONTAL | |
0x00c5: 0x253c, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL | |
0x00c6: 0x255e, # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE | |
0x00c7: 0x255f, # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE | |
0x00c8: 0x255a, # BOX DRAWINGS DOUBLE UP AND RIGHT | |
0x00c9: 0x2554, # BOX DRAWINGS DOUBLE DOWN AND RIGHT | |
0x00ca: 0x2569, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL | |
0x00cb: 0x2566, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL | |
0x00cc: 0x2560, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT | |
0x00cd: 0x2550, # BOX DRAWINGS DOUBLE HORIZONTAL | |
0x00ce: 0x256c, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL | |
0x00cf: 0x2567, # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE | |
0x00d0: 0x2568, # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE | |
0x00d1: 0x2564, # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE | |
0x00d2: 0x2565, # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE | |
0x00d3: 0x2559, # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE | |
0x00d4: 0x2558, # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE | |
0x00d5: 0x2552, # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE | |
0x00d6: 0x2553, # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE | |
0x00d7: 0x256b, # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE | |
0x00d8: 0x256a, # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE | |
0x00d9: 0x2518, # BOX DRAWINGS LIGHT UP AND LEFT | |
0x00da: 0x250c, # BOX DRAWINGS LIGHT DOWN AND RIGHT | |
0x00db: 0x2588, # FULL BLOCK | |
0x00dc: 0x2584, # LOWER HALF BLOCK | |
0x00dd: 0x258c, # LEFT HALF BLOCK | |
0x00de: 0x2590, # RIGHT HALF BLOCK | |
0x00df: 0x2580, # UPPER HALF BLOCK | |
0x00e0: 0x0440, # CYRILLIC SMALL LETTER ER | |
0x00e1: 0x0441, # CYRILLIC SMALL LETTER ES | |
0x00e2: 0x0442, # CYRILLIC SMALL LETTER TE | |
0x00e3: 0x0443, # CYRILLIC SMALL LETTER U | |
0x00e4: 0x0444, # CYRILLIC SMALL LETTER EF | |
0x00e5: 0x0445, # CYRILLIC SMALL LETTER HA | |
0x00e6: 0x0446, # CYRILLIC SMALL LETTER TSE | |
0x00e7: 0x0447, # CYRILLIC SMALL LETTER CHE | |
0x00e8: 0x0448, # CYRILLIC SMALL LETTER SHA | |
0x00e9: 0x0449, # CYRILLIC SMALL LETTER SHCHA | |
0x00ea: 0x044a, # CYRILLIC SMALL LETTER HARD SIGN | |
0x00eb: 0x044b, # CYRILLIC SMALL LETTER YERU | |
0x00ec: 0x044c, # CYRILLIC SMALL LETTER SOFT SIGN | |
0x00ed: 0x044d, # CYRILLIC SMALL LETTER E | |
0x00ee: 0x044e, # CYRILLIC SMALL LETTER YU | |
0x00ef: 0x044f, # CYRILLIC SMALL LETTER YA | |
0x00f0: 0x0401, # CYRILLIC CAPITAL LETTER IO | |
0x00f1: 0x0451, # CYRILLIC SMALL LETTER IO | |
0x00f2: 0x0490, # CYRILLIC CAPITAL LETTER GHE WITH UPTURN | |
0x00f3: 0x0491, # CYRILLIC SMALL LETTER GHE WITH UPTURN | |
0x00f4: 0x0404, # CYRILLIC CAPITAL LETTER UKRAINIAN IE | |
0x00f5: 0x0454, # CYRILLIC SMALL LETTER UKRAINIAN IE | |
0x00f6: 0x0406, # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I | |
0x00f7: 0x0456, # CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I | |
0x00f8: 0x0407, # CYRILLIC CAPITAL LETTER YI | |
0x00f9: 0x0457, # CYRILLIC SMALL LETTER YI | |
0x00fa: 0x00b7, # MIDDLE DOT | |
0x00fb: 0x221a, # SQUARE ROOT | |
0x00fc: 0x2116, # NUMERO SIGN | |
0x00fd: 0x00a4, # CURRENCY SIGN | |
0x00fe: 0x25a0, # BLACK SQUARE | |
0x00ff: 0x00a0, # NO-BREAK SPACE | |
}) | |
### Decoding Table | |
decoding_table = ( | |
'\x00' # 0x0000 -> NULL | |
'\x01' # 0x0001 -> START OF HEADING | |
'\x02' # 0x0002 -> START OF TEXT | |
'\x03' # 0x0003 -> END OF TEXT | |
'\x04' # 0x0004 -> END OF TRANSMISSION | |
'\x05' # 0x0005 -> ENQUIRY | |
'\x06' # 0x0006 -> ACKNOWLEDGE | |
'\x07' # 0x0007 -> BELL | |
'\x08' # 0x0008 -> BACKSPACE | |
'\t' # 0x0009 -> HORIZONTAL TABULATION | |
'\n' # 0x000a -> LINE FEED | |
'\x0b' # 0x000b -> VERTICAL TABULATION | |
'\x0c' # 0x000c -> FORM FEED | |
'\r' # 0x000d -> CARRIAGE RETURN | |
'\x0e' # 0x000e -> SHIFT OUT | |
'\x0f' # 0x000f -> SHIFT IN | |
'\x10' # 0x0010 -> DATA LINK ESCAPE | |
'\x11' # 0x0011 -> DEVICE CONTROL ONE | |
'\x12' # 0x0012 -> DEVICE CONTROL TWO | |
'\x13' # 0x0013 -> DEVICE CONTROL THREE | |
'\x14' # 0x0014 -> DEVICE CONTROL FOUR | |
'\x15' # 0x0015 -> NEGATIVE ACKNOWLEDGE | |
'\x16' # 0x0016 -> SYNCHRONOUS IDLE | |
'\x17' # 0x0017 -> END OF TRANSMISSION BLOCK | |
'\x18' # 0x0018 -> CANCEL | |
'\x19' # 0x0019 -> END OF MEDIUM | |
'\x1a' # 0x001a -> SUBSTITUTE | |
'\x1b' # 0x001b -> ESCAPE | |
'\x1c' # 0x001c -> FILE SEPARATOR | |
'\x1d' # 0x001d -> GROUP SEPARATOR | |
'\x1e' # 0x001e -> RECORD SEPARATOR | |
'\x1f' # 0x001f -> UNIT SEPARATOR | |
' ' # 0x0020 -> SPACE | |
'!' # 0x0021 -> EXCLAMATION MARK | |
'"' # 0x0022 -> QUOTATION MARK | |
'#' # 0x0023 -> NUMBER SIGN | |
'$' # 0x0024 -> DOLLAR SIGN | |
'%' # 0x0025 -> PERCENT SIGN | |
'&' # 0x0026 -> AMPERSAND | |
"'" # 0x0027 -> APOSTROPHE | |
'(' # 0x0028 -> LEFT PARENTHESIS | |
')' # 0x0029 -> RIGHT PARENTHESIS | |
'*' # 0x002a -> ASTERISK | |
'+' # 0x002b -> PLUS SIGN | |
',' # 0x002c -> COMMA | |
'-' # 0x002d -> HYPHEN-MINUS | |
'.' # 0x002e -> FULL STOP | |
'/' # 0x002f -> SOLIDUS | |
'0' # 0x0030 -> DIGIT ZERO | |
'1' # 0x0031 -> DIGIT ONE | |
'2' # 0x0032 -> DIGIT TWO | |
'3' # 0x0033 -> DIGIT THREE | |
'4' # 0x0034 -> DIGIT FOUR | |
'5' # 0x0035 -> DIGIT FIVE | |
'6' # 0x0036 -> DIGIT SIX | |
'7' # 0x0037 -> DIGIT SEVEN | |
'8' # 0x0038 -> DIGIT EIGHT | |
'9' # 0x0039 -> DIGIT NINE | |
':' # 0x003a -> COLON | |
';' # 0x003b -> SEMICOLON | |
'<' # 0x003c -> LESS-THAN SIGN | |
'=' # 0x003d -> EQUALS SIGN | |
'>' # 0x003e -> GREATER-THAN SIGN | |
'?' # 0x003f -> QUESTION MARK | |
'@' # 0x0040 -> COMMERCIAL AT | |
'A' # 0x0041 -> LATIN CAPITAL LETTER A | |
'B' # 0x0042 -> LATIN CAPITAL LETTER B | |
'C' # 0x0043 -> LATIN CAPITAL LETTER C | |
'D' # 0x0044 -> LATIN CAPITAL LETTER D | |
'E' # 0x0045 -> LATIN CAPITAL LETTER E | |
'F' # 0x0046 -> LATIN CAPITAL LETTER F | |
'G' # 0x0047 -> LATIN CAPITAL LETTER G | |
'H' # 0x0048 -> LATIN CAPITAL LETTER H | |
'I' # 0x0049 -> LATIN CAPITAL LETTER I | |
'J' # 0x004a -> LATIN CAPITAL LETTER J | |
'K' # 0x004b -> LATIN CAPITAL LETTER K | |
'L' # 0x004c -> LATIN CAPITAL LETTER L | |
'M' # 0x004d -> LATIN CAPITAL LETTER M | |
'N' # 0x004e -> LATIN CAPITAL LETTER N | |
'O' # 0x004f -> LATIN CAPITAL LETTER O | |
'P' # 0x0050 -> LATIN CAPITAL LETTER P | |
'Q' # 0x0051 -> LATIN CAPITAL LETTER Q | |
'R' # 0x0052 -> LATIN CAPITAL LETTER R | |
'S' # 0x0053 -> LATIN CAPITAL LETTER S | |
'T' # 0x0054 -> LATIN CAPITAL LETTER T | |
'U' # 0x0055 -> LATIN CAPITAL LETTER U | |
'V' # 0x0056 -> LATIN CAPITAL LETTER V | |
'W' # 0x0057 -> LATIN CAPITAL LETTER W | |
'X' # 0x0058 -> LATIN CAPITAL LETTER X | |
'Y' # 0x0059 -> LATIN CAPITAL LETTER Y | |
'Z' # 0x005a -> LATIN CAPITAL LETTER Z | |
'[' # 0x005b -> LEFT SQUARE BRACKET | |
'\\' # 0x005c -> REVERSE SOLIDUS | |
']' # 0x005d -> RIGHT SQUARE BRACKET | |
'^' # 0x005e -> CIRCUMFLEX ACCENT | |
'_' # 0x005f -> LOW LINE | |
'`' # 0x0060 -> GRAVE ACCENT | |
'a' # 0x0061 -> LATIN SMALL LETTER A | |
'b' # 0x0062 -> LATIN SMALL LETTER B | |
'c' # 0x0063 -> LATIN SMALL LETTER C | |
'd' # 0x0064 -> LATIN SMALL LETTER D | |
'e' # 0x0065 -> LATIN SMALL LETTER E | |
'f' # 0x0066 -> LATIN SMALL LETTER F | |
'g' # 0x0067 -> LATIN SMALL LETTER G | |
'h' # 0x0068 -> LATIN SMALL LETTER H | |
'i' # 0x0069 -> LATIN SMALL LETTER I | |
'j' # 0x006a -> LATIN SMALL LETTER J | |
'k' # 0x006b -> LATIN SMALL LETTER K | |
'l' # 0x006c -> LATIN SMALL LETTER L | |
'm' # 0x006d -> LATIN SMALL LETTER M | |
'n' # 0x006e -> LATIN SMALL LETTER N | |
'o' # 0x006f -> LATIN SMALL LETTER O | |
'p' # 0x0070 -> LATIN SMALL LETTER P | |
'q' # 0x0071 -> LATIN SMALL LETTER Q | |
'r' # 0x0072 -> LATIN SMALL LETTER R | |
's' # 0x0073 -> LATIN SMALL LETTER S | |
't' # 0x0074 -> LATIN SMALL LETTER T | |
'u' # 0x0075 -> LATIN SMALL LETTER U | |
'v' # 0x0076 -> LATIN SMALL LETTER V | |
'w' # 0x0077 -> LATIN SMALL LETTER W | |
'x' # 0x0078 -> LATIN SMALL LETTER X | |
'y' # 0x0079 -> LATIN SMALL LETTER Y | |
'z' # 0x007a -> LATIN SMALL LETTER Z | |
'{' # 0x007b -> LEFT CURLY BRACKET | |
'|' # 0x007c -> VERTICAL LINE | |
'}' # 0x007d -> RIGHT CURLY BRACKET | |
'~' # 0x007e -> TILDE | |
'\x7f' # 0x007f -> DELETE | |
'\u0410' # 0x0080 -> CYRILLIC CAPITAL LETTER A | |
'\u0411' # 0x0081 -> CYRILLIC CAPITAL LETTER BE | |
'\u0412' # 0x0082 -> CYRILLIC CAPITAL LETTER VE | |
'\u0413' # 0x0083 -> CYRILLIC CAPITAL LETTER GHE | |
'\u0414' # 0x0084 -> CYRILLIC CAPITAL LETTER DE | |
'\u0415' # 0x0085 -> CYRILLIC CAPITAL LETTER IE | |
'\u0416' # 0x0086 -> CYRILLIC CAPITAL LETTER ZHE | |
'\u0417' # 0x0087 -> CYRILLIC CAPITAL LETTER ZE | |
'\u0418' # 0x0088 -> CYRILLIC CAPITAL LETTER I | |
'\u0419' # 0x0089 -> CYRILLIC CAPITAL LETTER SHORT I | |
'\u041a' # 0x008a -> CYRILLIC CAPITAL LETTER KA | |
'\u041b' # 0x008b -> CYRILLIC CAPITAL LETTER EL | |
'\u041c' # 0x008c -> CYRILLIC CAPITAL LETTER EM | |
'\u041d' # 0x008d -> CYRILLIC CAPITAL LETTER EN | |
'\u041e' # 0x008e -> CYRILLIC CAPITAL LETTER O | |
'\u041f' # 0x008f -> CYRILLIC CAPITAL LETTER PE | |
'\u0420' # 0x0090 -> CYRILLIC CAPITAL LETTER ER | |
'\u0421' # 0x0091 -> CYRILLIC CAPITAL LETTER ES | |
'\u0422' # 0x0092 -> CYRILLIC CAPITAL LETTER TE | |
'\u0423' # 0x0093 -> CYRILLIC CAPITAL LETTER U | |
'\u0424' # 0x0094 -> CYRILLIC CAPITAL LETTER EF | |
'\u0425' # 0x0095 -> CYRILLIC CAPITAL LETTER HA | |
'\u0426' # 0x0096 -> CYRILLIC CAPITAL LETTER TSE | |
'\u0427' # 0x0097 -> CYRILLIC CAPITAL LETTER CHE | |
'\u0428' # 0x0098 -> CYRILLIC CAPITAL LETTER SHA | |
'\u0429' # 0x0099 -> CYRILLIC CAPITAL LETTER SHCHA | |
'\u042a' # 0x009a -> CYRILLIC CAPITAL LETTER HARD SIGN | |
'\u042b' # 0x009b -> CYRILLIC CAPITAL LETTER YERU | |
'\u042c' # 0x009c -> CYRILLIC CAPITAL LETTER SOFT SIGN | |
'\u042d' # 0x009d -> CYRILLIC CAPITAL LETTER E | |
'\u042e' # 0x009e -> CYRILLIC CAPITAL LETTER YU | |
'\u042f' # 0x009f -> CYRILLIC CAPITAL LETTER YA | |
'\u0430' # 0x00a0 -> CYRILLIC SMALL LETTER A | |
'\u0431' # 0x00a1 -> CYRILLIC SMALL LETTER BE | |
'\u0432' # 0x00a2 -> CYRILLIC SMALL LETTER VE | |
'\u0433' # 0x00a3 -> CYRILLIC SMALL LETTER GHE | |
'\u0434' # 0x00a4 -> CYRILLIC SMALL LETTER DE | |
'\u0435' # 0x00a5 -> CYRILLIC SMALL LETTER IE | |
'\u0436' # 0x00a6 -> CYRILLIC SMALL LETTER ZHE | |
'\u0437' # 0x00a7 -> CYRILLIC SMALL LETTER ZE | |
'\u0438' # 0x00a8 -> CYRILLIC SMALL LETTER I | |
'\u0439' # 0x00a9 -> CYRILLIC SMALL LETTER SHORT I | |
'\u043a' # 0x00aa -> CYRILLIC SMALL LETTER KA | |
'\u043b' # 0x00ab -> CYRILLIC SMALL LETTER EL | |
'\u043c' # 0x00ac -> CYRILLIC SMALL LETTER EM | |
'\u043d' # 0x00ad -> CYRILLIC SMALL LETTER EN | |
'\u043e' # 0x00ae -> CYRILLIC SMALL LETTER O | |
'\u043f' # 0x00af -> CYRILLIC SMALL LETTER PE | |
'\u2591' # 0x00b0 -> LIGHT SHADE | |
'\u2592' # 0x00b1 -> MEDIUM SHADE | |
'\u2593' # 0x00b2 -> DARK SHADE | |
'\u2502' # 0x00b3 -> BOX DRAWINGS LIGHT VERTICAL | |
'\u2524' # 0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT | |
'\u2561' # 0x00b5 -> BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE | |
'\u2562' # 0x00b6 -> BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE | |
'\u2556' # 0x00b7 -> BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE | |
'\u2555' # 0x00b8 -> BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE | |
'\u2563' # 0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT | |
'\u2551' # 0x00ba -> BOX DRAWINGS DOUBLE VERTICAL | |
'\u2557' # 0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT | |
'\u255d' # 0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT | |
'\u255c' # 0x00bd -> BOX DRAWINGS UP DOUBLE AND LEFT SINGLE | |
'\u255b' # 0x00be -> BOX DRAWINGS UP SINGLE AND LEFT DOUBLE | |
'\u2510' # 0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT | |
'\u2514' # 0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT | |
'\u2534' # 0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL | |
'\u252c' # 0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL | |
'\u251c' # 0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT | |
'\u2500' # 0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL | |
'\u253c' # 0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL | |
'\u255e' # 0x00c6 -> BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE | |
'\u255f' # 0x00c7 -> BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE | |
'\u255a' # 0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT | |
'\u2554' # 0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT | |
'\u2569' # 0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL | |
'\u2566' # 0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL | |
'\u2560' # 0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT | |
'\u2550' # 0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL | |
'\u256c' # 0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL | |
'\u2567' # 0x00cf -> BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE | |
'\u2568' # 0x00d0 -> BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE | |
'\u2564' # 0x00d1 -> BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE | |
'\u2565' # 0x00d2 -> BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE | |
'\u2559' # 0x00d3 -> BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE | |
'\u2558' # 0x00d4 -> BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE | |
'\u2552' # 0x00d5 -> BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE | |
'\u2553' # 0x00d6 -> BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE | |
'\u256b' # 0x00d7 -> BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE | |
'\u256a' # 0x00d8 -> BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE | |
'\u2518' # 0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT | |
'\u250c' # 0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT | |
'\u2588' # 0x00db -> FULL BLOCK | |
'\u2584' # 0x00dc -> LOWER HALF BLOCK | |
'\u258c' # 0x00dd -> LEFT HALF BLOCK | |
'\u2590' # 0x00de -> RIGHT HALF BLOCK | |
'\u2580' # 0x00df -> UPPER HALF BLOCK | |
'\u0440' # 0x00e0 -> CYRILLIC SMALL LETTER ER | |
'\u0441' # 0x00e1 -> CYRILLIC SMALL LETTER ES | |
'\u0442' # 0x00e2 -> CYRILLIC SMALL LETTER TE | |
'\u0443' # 0x00e3 -> CYRILLIC SMALL LETTER U | |
'\u0444' # 0x00e4 -> CYRILLIC SMALL LETTER EF | |
'\u0445' # 0x00e5 -> CYRILLIC SMALL LETTER HA | |
'\u0446' # 0x00e6 -> CYRILLIC SMALL LETTER TSE | |
'\u0447' # 0x00e7 -> CYRILLIC SMALL LETTER CHE | |
'\u0448' # 0x00e8 -> CYRILLIC SMALL LETTER SHA | |
'\u0449' # 0x00e9 -> CYRILLIC SMALL LETTER SHCHA | |
'\u044a' # 0x00ea -> CYRILLIC SMALL LETTER HARD SIGN | |
'\u044b' # 0x00eb -> CYRILLIC SMALL LETTER YERU | |
'\u044c' # 0x00ec -> CYRILLIC SMALL LETTER SOFT SIGN | |
'\u044d' # 0x00ed -> CYRILLIC SMALL LETTER E | |
'\u044e' # 0x00ee -> CYRILLIC SMALL LETTER YU | |
'\u044f' # 0x00ef -> CYRILLIC SMALL LETTER YA | |
'\u0401' # 0x00f0 -> CYRILLIC CAPITAL LETTER IO | |
'\u0451' # 0x00f1 -> CYRILLIC SMALL LETTER IO | |
'\u0490' # 0x00f2 -> CYRILLIC CAPITAL LETTER GHE WITH UPTURN | |
'\u0491' # 0x00f3 -> CYRILLIC SMALL LETTER GHE WITH UPTURN | |
'\u0404' # 0x00f4 -> CYRILLIC CAPITAL LETTER UKRAINIAN IE | |
'\u0454' # 0x00f5 -> CYRILLIC SMALL LETTER UKRAINIAN IE | |
'\u0406' # 0x00f6 -> CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I | |
'\u0456' # 0x00f7 -> CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I | |
'\u0407' # 0x00f8 -> CYRILLIC CAPITAL LETTER YI | |
'\u0457' # 0x00f9 -> CYRILLIC SMALL LETTER YI | |
'\xb7' # 0x00fa -> MIDDLE DOT | |
'\u221a' # 0x00fb -> SQUARE ROOT | |
'\u2116' # 0x00fc -> NUMERO SIGN | |
'\xa4' # 0x00fd -> CURRENCY SIGN | |
'\u25a0' # 0x00fe -> BLACK SQUARE | |
'\xa0' # 0x00ff -> NO-BREAK SPACE | |
) | |
### Encoding Map | |
encoding_map = { | |
0x0000: 0x0000, # NULL | |
0x0001: 0x0001, # START OF HEADING | |
0x0002: 0x0002, # START OF TEXT | |
0x0003: 0x0003, # END OF TEXT | |
0x0004: 0x0004, # END OF TRANSMISSION | |
0x0005: 0x0005, # ENQUIRY | |
0x0006: 0x0006, # ACKNOWLEDGE | |
0x0007: 0x0007, # BELL | |
0x0008: 0x0008, # BACKSPACE | |
0x0009: 0x0009, # HORIZONTAL TABULATION | |
0x000a: 0x000a, # LINE FEED | |
0x000b: 0x000b, # VERTICAL TABULATION | |
0x000c: 0x000c, # FORM FEED | |
0x000d: 0x000d, # CARRIAGE RETURN | |
0x000e: 0x000e, # SHIFT OUT | |
0x000f: 0x000f, # SHIFT IN | |
0x0010: 0x0010, # DATA LINK ESCAPE | |
0x0011: 0x0011, # DEVICE CONTROL ONE | |
0x0012: 0x0012, # DEVICE CONTROL TWO | |
0x0013: 0x0013, # DEVICE CONTROL THREE | |
0x0014: 0x0014, # DEVICE CONTROL FOUR | |
0x0015: 0x0015, # NEGATIVE ACKNOWLEDGE | |
0x0016: 0x0016, # SYNCHRONOUS IDLE | |
0x0017: 0x0017, # END OF TRANSMISSION BLOCK | |
0x0018: 0x0018, # CANCEL | |
0x0019: 0x0019, # END OF MEDIUM | |
0x001a: 0x001a, # SUBSTITUTE | |
0x001b: 0x001b, # ESCAPE | |
0x001c: 0x001c, # FILE SEPARATOR | |
0x001d: 0x001d, # GROUP SEPARATOR | |
0x001e: 0x001e, # RECORD SEPARATOR | |
0x001f: 0x001f, # UNIT SEPARATOR | |
0x0020: 0x0020, # SPACE | |
0x0021: 0x0021, # EXCLAMATION MARK | |
0x0022: 0x0022, # QUOTATION MARK | |
0x0023: 0x0023, # NUMBER SIGN | |
0x0024: 0x0024, # DOLLAR SIGN | |
0x0025: 0x0025, # PERCENT SIGN | |
0x0026: 0x0026, # AMPERSAND | |
0x0027: 0x0027, # APOSTROPHE | |
0x0028: 0x0028, # LEFT PARENTHESIS | |
0x0029: 0x0029, # RIGHT PARENTHESIS | |
0x002a: 0x002a, # ASTERISK | |
0x002b: 0x002b, # PLUS SIGN | |
0x002c: 0x002c, # COMMA | |
0x002d: 0x002d, # HYPHEN-MINUS | |
0x002e: 0x002e, # FULL STOP | |
0x002f: 0x002f, # SOLIDUS | |
0x0030: 0x0030, # DIGIT ZERO | |
0x0031: 0x0031, # DIGIT ONE | |
0x0032: 0x0032, # DIGIT TWO | |
0x0033: 0x0033, # DIGIT THREE | |
0x0034: 0x0034, # DIGIT FOUR | |
0x0035: 0x0035, # DIGIT FIVE | |
0x0036: 0x0036, # DIGIT SIX | |
0x0037: 0x0037, # DIGIT SEVEN | |
0x0038: 0x0038, # DIGIT EIGHT | |
0x0039: 0x0039, # DIGIT NINE | |
0x003a: 0x003a, # COLON | |
0x003b: 0x003b, # SEMICOLON | |
0x003c: 0x003c, # LESS-THAN SIGN | |
0x003d: 0x003d, # EQUALS SIGN | |
0x003e: 0x003e, # GREATER-THAN SIGN | |
0x003f: 0x003f, # QUESTION MARK | |
0x0040: 0x0040, # COMMERCIAL AT | |
0x0041: 0x0041, # LATIN CAPITAL LETTER A | |
0x0042: 0x0042, # LATIN CAPITAL LETTER B | |
0x0043: 0x0043, # LATIN CAPITAL LETTER C | |
0x0044: 0x0044, # LATIN CAPITAL LETTER D | |
0x0045: 0x0045, # LATIN CAPITAL LETTER E | |
0x0046: 0x0046, # LATIN CAPITAL LETTER F | |
0x0047: 0x0047, # LATIN CAPITAL LETTER G | |
0x0048: 0x0048, # LATIN CAPITAL LETTER H | |
0x0049: 0x0049, # LATIN CAPITAL LETTER I | |
0x004a: 0x004a, # LATIN CAPITAL LETTER J | |
0x004b: 0x004b, # LATIN CAPITAL LETTER K | |
0x004c: 0x004c, # LATIN CAPITAL LETTER L | |
0x004d: 0x004d, # LATIN CAPITAL LETTER M | |
0x004e: 0x004e, # LATIN CAPITAL LETTER N | |
0x004f: 0x004f, # LATIN CAPITAL LETTER O | |
0x0050: 0x0050, # LATIN CAPITAL LETTER P | |
0x0051: 0x0051, # LATIN CAPITAL LETTER Q | |
0x0052: 0x0052, # LATIN CAPITAL LETTER R | |
0x0053: 0x0053, # LATIN CAPITAL LETTER S | |
0x0054: 0x0054, # LATIN CAPITAL LETTER T | |
0x0055: 0x0055, # LATIN CAPITAL LETTER U | |
0x0056: 0x0056, # LATIN CAPITAL LETTER V | |
0x0057: 0x0057, # LATIN CAPITAL LETTER W | |
0x0058: 0x0058, # LATIN CAPITAL LETTER X | |
0x0059: 0x0059, # LATIN CAPITAL LETTER Y | |
0x005a: 0x005a, # LATIN CAPITAL LETTER Z | |
0x005b: 0x005b, # LEFT SQUARE BRACKET | |
0x005c: 0x005c, # REVERSE SOLIDUS | |
0x005d: 0x005d, # RIGHT SQUARE BRACKET | |
0x005e: 0x005e, # CIRCUMFLEX ACCENT | |
0x005f: 0x005f, # LOW LINE | |
0x0060: 0x0060, # GRAVE ACCENT | |
0x0061: 0x0061, # LATIN SMALL LETTER A | |
0x0062: 0x0062, # LATIN SMALL LETTER B | |
0x0063: 0x0063, # LATIN SMALL LETTER C | |
0x0064: 0x0064, # LATIN SMALL LETTER D | |
0x0065: 0x0065, # LATIN SMALL LETTER E | |
0x0066: 0x0066, # LATIN SMALL LETTER F | |
0x0067: 0x0067, # LATIN SMALL LETTER G | |
0x0068: 0x0068, # LATIN SMALL LETTER H | |
0x0069: 0x0069, # LATIN SMALL LETTER I | |
0x006a: 0x006a, # LATIN SMALL LETTER J | |
0x006b: 0x006b, # LATIN SMALL LETTER K | |
0x006c: 0x006c, # LATIN SMALL LETTER L | |
0x006d: 0x006d, # LATIN SMALL LETTER M | |
0x006e: 0x006e, # LATIN SMALL LETTER N | |
0x006f: 0x006f, # LATIN SMALL LETTER O | |
0x0070: 0x0070, # LATIN SMALL LETTER P | |
0x0071: 0x0071, # LATIN SMALL LETTER Q | |
0x0072: 0x0072, # LATIN SMALL LETTER R | |
0x0073: 0x0073, # LATIN SMALL LETTER S | |
0x0074: 0x0074, # LATIN SMALL LETTER T | |
0x0075: 0x0075, # LATIN SMALL LETTER U | |
0x0076: 0x0076, # LATIN SMALL LETTER V | |
0x0077: 0x0077, # LATIN SMALL LETTER W | |
0x0078: 0x0078, # LATIN SMALL LETTER X | |
0x0079: 0x0079, # LATIN SMALL LETTER Y | |
0x007a: 0x007a, # LATIN SMALL LETTER Z | |
0x007b: 0x007b, # LEFT CURLY BRACKET | |
0x007c: 0x007c, # VERTICAL LINE | |
0x007d: 0x007d, # RIGHT CURLY BRACKET | |
0x007e: 0x007e, # TILDE | |
0x007f: 0x007f, # DELETE | |
0x00a0: 0x00ff, # NO-BREAK SPACE | |
0x00a4: 0x00fd, # CURRENCY SIGN | |
0x00b7: 0x00fa, # MIDDLE DOT | |
0x0401: 0x00f0, # CYRILLIC CAPITAL LETTER IO | |
0x0404: 0x00f4, # CYRILLIC CAPITAL LETTER UKRAINIAN IE | |
0x0406: 0x00f6, # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I | |
0x0407: 0x00f8, # CYRILLIC CAPITAL LETTER YI | |
0x0410: 0x0080, # CYRILLIC CAPITAL LETTER A | |
0x0411: 0x0081, # CYRILLIC CAPITAL LETTER BE | |
0x0412: 0x0082, # CYRILLIC CAPITAL LETTER VE | |
0x0413: 0x0083, # CYRILLIC CAPITAL LETTER GHE | |
0x0414: 0x0084, # CYRILLIC CAPITAL LETTER DE | |
0x0415: 0x0085, # CYRILLIC CAPITAL LETTER IE | |
0x0416: 0x0086, # CYRILLIC CAPITAL LETTER ZHE | |
0x0417: 0x0087, # CYRILLIC CAPITAL LETTER ZE | |
0x0418: 0x0088, # CYRILLIC CAPITAL LETTER I | |
0x0419: 0x0089, # CYRILLIC CAPITAL LETTER SHORT I | |
0x041a: 0x008a, # CYRILLIC CAPITAL LETTER KA | |
0x041b: 0x008b, # CYRILLIC CAPITAL LETTER EL | |
0x041c: 0x008c, # CYRILLIC CAPITAL LETTER EM | |
0x041d: 0x008d, # CYRILLIC CAPITAL LETTER EN | |
0x041e: 0x008e, # CYRILLIC CAPITAL LETTER O | |
0x041f: 0x008f, # CYRILLIC CAPITAL LETTER PE | |
0x0420: 0x0090, # CYRILLIC CAPITAL LETTER ER | |
0x0421: 0x0091, # CYRILLIC CAPITAL LETTER ES | |
0x0422: 0x0092, # CYRILLIC CAPITAL LETTER TE | |
0x0423: 0x0093, # CYRILLIC CAPITAL LETTER U | |
0x0424: 0x0094, # CYRILLIC CAPITAL LETTER EF | |
0x0425: 0x0095, # CYRILLIC CAPITAL LETTER HA | |
0x0426: 0x0096, # CYRILLIC CAPITAL LETTER TSE | |
0x0427: 0x0097, # CYRILLIC CAPITAL LETTER CHE | |
0x0428: 0x0098, # CYRILLIC CAPITAL LETTER SHA | |
0x0429: 0x0099, # CYRILLIC CAPITAL LETTER SHCHA | |
0x042a: 0x009a, # CYRILLIC CAPITAL LETTER HARD SIGN | |
0x042b: 0x009b, # CYRILLIC CAPITAL LETTER YERU | |
0x042c: 0x009c, # CYRILLIC CAPITAL LETTER SOFT SIGN | |
0x042d: 0x009d, # CYRILLIC CAPITAL LETTER E | |
0x042e: 0x009e, # CYRILLIC CAPITAL LETTER YU | |
0x042f: 0x009f, # CYRILLIC CAPITAL LETTER YA | |
0x0430: 0x00a0, # CYRILLIC SMALL LETTER A | |
0x0431: 0x00a1, # CYRILLIC SMALL LETTER BE | |
0x0432: 0x00a2, # CYRILLIC SMALL LETTER VE | |
0x0433: 0x00a3, # CYRILLIC SMALL LETTER GHE | |
0x0434: 0x00a4, # CYRILLIC SMALL LETTER DE | |
0x0435: 0x00a5, # CYRILLIC SMALL LETTER IE | |
0x0436: 0x00a6, # CYRILLIC SMALL LETTER ZHE | |
0x0437: 0x00a7, # CYRILLIC SMALL LETTER ZE | |
0x0438: 0x00a8, # CYRILLIC SMALL LETTER I | |
0x0439: 0x00a9, # CYRILLIC SMALL LETTER SHORT I | |
0x043a: 0x00aa, # CYRILLIC SMALL LETTER KA | |
0x043b: 0x00ab, # CYRILLIC SMALL LETTER EL | |
0x043c: 0x00ac, # CYRILLIC SMALL LETTER EM | |
0x043d: 0x00ad, # CYRILLIC SMALL LETTER EN | |
0x043e: 0x00ae, # CYRILLIC SMALL LETTER O | |
0x043f: 0x00af, # CYRILLIC SMALL LETTER PE | |
0x0440: 0x00e0, # CYRILLIC SMALL LETTER ER | |
0x0441: 0x00e1, # CYRILLIC SMALL LETTER ES | |
0x0442: 0x00e2, # CYRILLIC SMALL LETTER TE | |
0x0443: 0x00e3, # CYRILLIC SMALL LETTER U | |
0x0444: 0x00e4, # CYRILLIC SMALL LETTER EF | |
0x0445: 0x00e5, # CYRILLIC SMALL LETTER HA | |
0x0446: 0x00e6, # CYRILLIC SMALL LETTER TSE | |
0x0447: 0x00e7, # CYRILLIC SMALL LETTER CHE | |
0x0448: 0x00e8, # CYRILLIC SMALL LETTER SHA | |
0x0449: 0x00e9, # CYRILLIC SMALL LETTER SHCHA | |
0x044a: 0x00ea, # CYRILLIC SMALL LETTER HARD SIGN | |
0x044b: 0x00eb, # CYRILLIC SMALL LETTER YERU | |
0x044c: 0x00ec, # CYRILLIC SMALL LETTER SOFT SIGN | |
0x044d: 0x00ed, # CYRILLIC SMALL LETTER E | |
0x044e: 0x00ee, # CYRILLIC SMALL LETTER YU | |
0x044f: 0x00ef, # CYRILLIC SMALL LETTER YA | |
0x0451: 0x00f1, # CYRILLIC SMALL LETTER IO | |
0x0454: 0x00f5, # CYRILLIC SMALL LETTER UKRAINIAN IE | |
0x0456: 0x00f7, # CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I | |
0x0457: 0x00f9, # CYRILLIC SMALL LETTER YI | |
0x0490: 0x00f2, # CYRILLIC CAPITAL LETTER GHE WITH UPTURN | |
0x0491: 0x00f3, # CYRILLIC SMALL LETTER GHE WITH UPTURN | |
0x2116: 0x00fc, # NUMERO SIGN | |
0x221a: 0x00fb, # SQUARE ROOT | |
0x2500: 0x00c4, # BOX DRAWINGS LIGHT HORIZONTAL | |
0x2502: 0x00b3, # BOX DRAWINGS LIGHT VERTICAL | |
0x250c: 0x00da, # BOX DRAWINGS LIGHT DOWN AND RIGHT | |
0x2510: 0x00bf, # BOX DRAWINGS LIGHT DOWN AND LEFT | |
0x2514: 0x00c0, # BOX DRAWINGS LIGHT UP AND RIGHT | |
0x2518: 0x00d9, # BOX DRAWINGS LIGHT UP AND LEFT | |
0x251c: 0x00c3, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT | |
0x2524: 0x00b4, # BOX DRAWINGS LIGHT VERTICAL AND LEFT | |
0x252c: 0x00c2, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL | |
0x2534: 0x00c1, # BOX DRAWINGS LIGHT UP AND HORIZONTAL | |
0x253c: 0x00c5, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL | |
0x2550: 0x00cd, # BOX DRAWINGS DOUBLE HORIZONTAL | |
0x2551: 0x00ba, # BOX DRAWINGS DOUBLE VERTICAL | |
0x2552: 0x00d5, # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE | |
0x2553: 0x00d6, # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE | |
0x2554: 0x00c9, # BOX DRAWINGS DOUBLE DOWN AND RIGHT | |
0x2555: 0x00b8, # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE | |
0x2556: 0x00b7, # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE | |
0x2557: 0x00bb, # BOX DRAWINGS DOUBLE DOWN AND LEFT | |
0x2558: 0x00d4, # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE | |
0x2559: 0x00d3, # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE | |
0x255a: 0x00c8, # BOX DRAWINGS DOUBLE UP AND RIGHT | |
0x255b: 0x00be, # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE | |
0x255c: 0x00bd, # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE | |
0x255d: 0x00bc, # BOX DRAWINGS DOUBLE UP AND LEFT | |
0x255e: 0x00c6, # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE | |
0x255f: 0x00c7, # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE | |
0x2560: 0x00cc, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT | |
0x2561: 0x00b5, # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE | |
0x2562: 0x00b6, # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE | |
0x2563: 0x00b9, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT | |
0x2564: 0x00d1, # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE | |
0x2565: 0x00d2, # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE | |
0x2566: 0x00cb, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL | |
0x2567: 0x00cf, # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE | |
0x2568: 0x00d0, # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE | |
0x2569: 0x00ca, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL | |
0x256a: 0x00d8, # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE | |
0x256b: 0x00d7, # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE | |
0x256c: 0x00ce, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL | |
0x2580: 0x00df, # UPPER HALF BLOCK | |
0x2584: 0x00dc, # LOWER HALF BLOCK | |
0x2588: 0x00db, # FULL BLOCK | |
0x258c: 0x00dd, # LEFT HALF BLOCK | |
0x2590: 0x00de, # RIGHT HALF BLOCK | |
0x2591: 0x00b0, # LIGHT SHADE | |
0x2592: 0x00b1, # MEDIUM SHADE | |
0x2593: 0x00b2, # DARK SHADE | |
0x25a0: 0x00fe, # BLACK SQUARE | |
} |
""" Python Character Mapping Codec cp1140 generated from 'python-mappings/CP1140.TXT' with gencodec.py. | |
"""#" | |
import codecs | |
### Codec APIs | |
class Codec(codecs.Codec): | |
def encode(self,input,errors='strict'): | |
return codecs.charmap_encode(input,errors,encoding_table) | |
def decode(self,input,errors='strict'): | |
return codecs.charmap_decode(input,errors,decoding_table) | |
class IncrementalEncoder(codecs.IncrementalEncoder): | |
def encode(self, input, final=False): | |
return codecs.charmap_encode(input,self.errors,encoding_table)[0] | |
class IncrementalDecoder(codecs.IncrementalDecoder): | |
def decode(self, input, final=False): | |
return codecs.charmap_decode(input,self.errors,decoding_table)[0] | |
class StreamWriter(Codec,codecs.StreamWriter): | |
pass | |
class StreamReader(Codec,codecs.StreamReader): | |
pass | |
### encodings module API | |
def getregentry(): | |
return codecs.CodecInfo( | |
name='cp1140', | |
encode=Codec().encode, | |
decode=Codec().decode, | |
incrementalencoder=IncrementalEncoder, | |
incrementaldecoder=IncrementalDecoder, | |
streamreader=StreamReader, | |
streamwriter=StreamWriter, | |
) | |
### Decoding Table | |
decoding_table = ( | |
'\x00' # 0x00 -> NULL | |
'\x01' # 0x01 -> START OF HEADING | |
'\x02' # 0x02 -> START OF TEXT | |
'\x03' # 0x03 -> END OF TEXT | |
'\x9c' # 0x04 -> CONTROL | |
'\t' # 0x05 -> HORIZONTAL TABULATION | |
'\x86' # 0x06 -> CONTROL | |
'\x7f' # 0x07 -> DELETE | |
'\x97' # 0x08 -> CONTROL | |
'\x8d' # 0x09 -> CONTROL | |
'\x8e' # 0x0A -> CONTROL | |
'\x0b' # 0x0B -> VERTICAL TABULATION | |
'\x0c' # 0x0C -> FORM FEED | |
'\r' # 0x0D -> CARRIAGE RETURN | |
'\x0e' # 0x0E -> SHIFT OUT | |
'\x0f' # 0x0F -> SHIFT IN | |
'\x10' # 0x10 -> DATA LINK ESCAPE | |
'\x11' # 0x11 -> DEVICE CONTROL ONE | |
'\x12' # 0x12 -> DEVICE CONTROL TWO | |
'\x13' # 0x13 -> DEVICE CONTROL THREE | |
'\x9d' # 0x14 -> CONTROL | |
'\x85' # 0x15 -> CONTROL | |
'\x08' # 0x16 -> BACKSPACE | |
'\x87' # 0x17 -> CONTROL | |
'\x18' # 0x18 -> CANCEL | |
'\x19' # 0x19 -> END OF MEDIUM | |
'\x92' # 0x1A -> CONTROL | |
'\x8f' # 0x1B -> CONTROL | |
'\x1c' # 0x1C -> FILE SEPARATOR | |
'\x1d' # 0x1D -> GROUP SEPARATOR | |
'\x1e' # 0x1E -> RECORD SEPARATOR | |
'\x1f' # 0x1F -> UNIT SEPARATOR | |
'\x80' # 0x20 -> CONTROL | |
'\x81' # 0x21 -> CONTROL | |
'\x82' # 0x22 -> CONTROL | |
'\x83' # 0x23 -> CONTROL | |
'\x84' # 0x24 -> CONTROL | |
'\n' # 0x25 -> LINE FEED | |
'\x17' # 0x26 -> END OF TRANSMISSION BLOCK | |
'\x1b' # 0x27 -> ESCAPE | |
'\x88' # 0x28 -> CONTROL | |
'\x89' # 0x29 -> CONTROL | |
'\x8a' # 0x2A -> CONTROL | |
'\x8b' # 0x2B -> CONTROL | |
'\x8c' # 0x2C -> CONTROL | |
'\x05' # 0x2D -> ENQUIRY | |
'\x06' # 0x2E -> ACKNOWLEDGE | |
'\x07' # 0x2F -> BELL | |
'\x90' # 0x30 -> CONTROL | |
'\x91' # 0x31 -> CONTROL | |
'\x16' # 0x32 -> SYNCHRONOUS IDLE | |
'\x93' # 0x33 -> CONTROL | |
'\x94' # 0x34 -> CONTROL | |
'\x95' # 0x35 -> CONTROL | |
'\x96' # 0x36 -> CONTROL | |
'\x04' # 0x37 -> END OF TRANSMISSION | |
'\x98' # 0x38 -> CONTROL | |
'\x99' # 0x39 -> CONTROL | |
'\x9a' # 0x3A -> CONTROL | |
'\x9b' # 0x3B -> CONTROL | |
'\x14' # 0x3C -> DEVICE CONTROL FOUR | |
'\x15' # 0x3D -> NEGATIVE ACKNOWLEDGE | |
'\x9e' # 0x3E -> CONTROL | |
'\x1a' # 0x3F -> SUBSTITUTE | |
' ' # 0x40 -> SPACE | |
'\xa0' # 0x41 -> NO-BREAK SPACE | |
'\xe2' # 0x42 -> LATIN SMALL LETTER A WITH CIRCUMFLEX | |
'\xe4' # 0x43 -> LATIN SMALL LETTER A WITH DIAERESIS | |
'\xe0' # 0x44 -> LATIN SMALL LETTER A WITH GRAVE | |
'\xe1' # 0x45 -> LATIN SMALL LETTER A WITH ACUTE | |
'\xe3' # 0x46 -> LATIN SMALL LETTER A WITH TILDE | |
'\xe5' # 0x47 -> LATIN SMALL LETTER A WITH RING ABOVE | |
'\xe7' # 0x48 -> LATIN SMALL LETTER C WITH CEDILLA | |
'\xf1' # 0x49 -> LATIN SMALL LETTER N WITH TILDE | |
'\xa2' # 0x4A -> CENT SIGN | |
'.' # 0x4B -> FULL STOP | |
'<' # 0x4C -> LESS-THAN SIGN | |
'(' # 0x4D -> LEFT PARENTHESIS | |
'+' # 0x4E -> PLUS SIGN | |
'|' # 0x4F -> VERTICAL LINE | |
'&' # 0x50 -> AMPERSAND | |
'\xe9' # 0x51 -> LATIN SMALL LETTER E WITH ACUTE | |
'\xea' # 0x52 -> LATIN SMALL LETTER E WITH CIRCUMFLEX | |
'\xeb' # 0x53 -> LATIN SMALL LETTER E WITH DIAERESIS | |
'\xe8' # 0x54 -> LATIN SMALL LETTER E WITH GRAVE | |
'\xed' # 0x55 -> LATIN SMALL LETTER I WITH ACUTE | |
'\xee' # 0x56 -> LATIN SMALL LETTER I WITH CIRCUMFLEX | |
'\xef' # 0x57 -> LATIN SMALL LETTER I WITH DIAERESIS | |
'\xec' # 0x58 -> LATIN SMALL LETTER I WITH GRAVE | |
'\xdf' # 0x59 -> LATIN SMALL LETTER SHARP S (GERMAN) | |
'!' # 0x5A -> EXCLAMATION MARK | |
'$' # 0x5B -> DOLLAR SIGN | |
'*' # 0x5C -> ASTERISK | |
')' # 0x5D -> RIGHT PARENTHESIS | |
';' # 0x5E -> SEMICOLON | |
'\xac' # 0x5F -> NOT SIGN | |
'-' # 0x60 -> HYPHEN-MINUS | |
'/' # 0x61 -> SOLIDUS | |
'\xc2' # 0x62 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX | |
'\xc4' # 0x63 -> LATIN CAPITAL LETTER A WITH DIAERESIS | |
'\xc0' # 0x64 -> LATIN CAPITAL LETTER A WITH GRAVE | |
'\xc1' # 0x65 -> LATIN CAPITAL LETTER A WITH ACUTE | |
'\xc3' # 0x66 -> LATIN CAPITAL LETTER A WITH TILDE | |
'\xc5' # 0x67 -> LATIN CAPITAL LETTER A WITH RING ABOVE | |
'\xc7' # 0x68 -> LATIN CAPITAL LETTER C WITH CEDILLA | |
'\xd1' # 0x69 -> LATIN CAPITAL LETTER N WITH TILDE | |
'\xa6' # 0x6A -> BROKEN BAR | |
',' # 0x6B -> COMMA | |
'%' # 0x6C -> PERCENT SIGN | |
'_' # 0x6D -> LOW LINE | |
'>' # 0x6E -> GREATER-THAN SIGN | |
'?' # 0x6F -> QUESTION MARK | |
'\xf8' # 0x70 -> LATIN SMALL LETTER O WITH STROKE | |
'\xc9' # 0x71 -> LATIN CAPITAL LETTER E WITH ACUTE | |
'\xca' # 0x72 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX | |
'\xcb' # 0x73 -> LATIN CAPITAL LETTER E WITH DIAERESIS | |
'\xc8' # 0x74 -> LATIN CAPITAL LETTER E WITH GRAVE | |
'\xcd' # 0x75 -> LATIN CAPITAL LETTER I WITH ACUTE | |
'\xce' # 0x76 -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX | |
'\xcf' # 0x77 -> LATIN CAPITAL LETTER I WITH DIAERESIS | |
'\xcc' # 0x78 -> LATIN CAPITAL LETTER I WITH GRAVE | |
'`' # 0x79 -> GRAVE ACCENT | |
':' # 0x7A -> COLON | |
'#' # 0x7B -> NUMBER SIGN | |
'@' # 0x7C -> COMMERCIAL AT | |
"'" # 0x7D -> APOSTROPHE | |
'=' # 0x7E -> EQUALS SIGN | |
'"' # 0x7F -> QUOTATION MARK | |
'\xd8' # 0x80 -> LATIN CAPITAL LETTER O WITH STROKE | |
'a' # 0x81 -> LATIN SMALL LETTER A | |
'b' # 0x82 -> LATIN SMALL LETTER B | |
'c' # 0x83 -> LATIN SMALL LETTER C | |
'd' # 0x84 -> LATIN SMALL LETTER D | |
'e' # 0x85 -> LATIN SMALL LETTER E | |
'f' # 0x86 -> LATIN SMALL LETTER F | |
'g' # 0x87 -> LATIN SMALL LETTER G | |
'h' # 0x88 -> LATIN SMALL LETTER H | |
'i' # 0x89 -> LATIN SMALL LETTER I | |
'\xab' # 0x8A -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK | |
'\xbb' # 0x8B -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK | |
'\xf0' # 0x8C -> LATIN SMALL LETTER ETH (ICELANDIC) | |
'\xfd' # 0x8D -> LATIN SMALL LETTER Y WITH ACUTE | |
'\xfe' # 0x8E -> LATIN SMALL LETTER THORN (ICELANDIC) | |
'\xb1' # 0x8F -> PLUS-MINUS SIGN | |
'\xb0' # 0x90 -> DEGREE SIGN | |
'j' # 0x91 -> LATIN SMALL LETTER J | |
'k' # 0x92 -> LATIN SMALL LETTER K | |
'l' # 0x93 -> LATIN SMALL LETTER L | |
'm' # 0x94 -> LATIN SMALL LETTER M | |
'n' # 0x95 -> LATIN SMALL LETTER N | |
'o' # 0x96 -> LATIN SMALL LETTER O | |
'p' # 0x97 -> LATIN SMALL LETTER P | |
'q' # 0x98 -> LATIN SMALL LETTER Q | |
'r' # 0x99 -> LATIN SMALL LETTER R | |
'\xaa' # 0x9A -> FEMININE ORDINAL INDICATOR | |
'\xba' # 0x9B -> MASCULINE ORDINAL INDICATOR | |
'\xe6' # 0x9C -> LATIN SMALL LIGATURE AE | |
'\xb8' # 0x9D -> CEDILLA | |
'\xc6' # 0x9E -> LATIN CAPITAL LIGATURE AE | |
'\u20ac' # 0x9F -> EURO SIGN | |
'\xb5' # 0xA0 -> MICRO SIGN | |
'~' # 0xA1 -> TILDE | |
's' # 0xA2 -> LATIN SMALL LETTER S | |
't' # 0xA3 -> LATIN SMALL LETTER T | |
'u' # 0xA4 -> LATIN SMALL LETTER U | |
'v' # 0xA5 -> LATIN SMALL LETTER V | |
'w' # 0xA6 -> LATIN SMALL LETTER W | |
'x' # 0xA7 -> LATIN SMALL LETTER X | |
'y' # 0xA8 -> LATIN SMALL LETTER Y | |
'z' # 0xA9 -> LATIN SMALL LETTER Z | |
'\xa1' # 0xAA -> INVERTED EXCLAMATION MARK | |
'\xbf' # 0xAB -> INVERTED QUESTION MARK | |
'\xd0' # 0xAC -> LATIN CAPITAL LETTER ETH (ICELANDIC) | |
'\xdd' # 0xAD -> LATIN CAPITAL LETTER Y WITH ACUTE | |
'\xde' # 0xAE -> LATIN CAPITAL LETTER THORN (ICELANDIC) | |
'\xae' # 0xAF -> REGISTERED SIGN | |
'^' # 0xB0 -> CIRCUMFLEX ACCENT | |
'\xa3' # 0xB1 -> POUND SIGN | |
'\xa5' # 0xB2 -> YEN SIGN | |
'\xb7' # 0xB3 -> MIDDLE DOT | |
'\xa9' # 0xB4 -> COPYRIGHT SIGN | |
'\xa7' # 0xB5 -> SECTION SIGN | |
'\xb6' # 0xB6 -> PILCROW SIGN | |
'\xbc' # 0xB7 -> VULGAR FRACTION ONE QUARTER | |
'\xbd' # 0xB8 -> VULGAR FRACTION ONE HALF | |
'\xbe' # 0xB9 -> VULGAR FRACTION THREE QUARTERS | |
'[' # 0xBA -> LEFT SQUARE BRACKET | |
']' # 0xBB -> RIGHT SQUARE BRACKET | |
'\xaf' # 0xBC -> MACRON | |
'\xa8' # 0xBD -> DIAERESIS | |
'\xb4' # 0xBE -> ACUTE ACCENT | |
'\xd7' # 0xBF -> MULTIPLICATION SIGN | |
'{' # 0xC0 -> LEFT CURLY BRACKET | |
'A' # 0xC1 -> LATIN CAPITAL LETTER A | |
'B' # 0xC2 -> LATIN CAPITAL LETTER B | |
'C' # 0xC3 -> LATIN CAPITAL LETTER C | |
'D' # 0xC4 -> LATIN CAPITAL LETTER D | |
'E' # 0xC5 -> LATIN CAPITAL LETTER E | |
'F' # 0xC6 -> LATIN CAPITAL LETTER F | |
'G' # 0xC7 -> LATIN CAPITAL LETTER G | |
'H' # 0xC8 -> LATIN CAPITAL LETTER H | |
'I' # 0xC9 -> LATIN CAPITAL LETTER I | |
'\xad' # 0xCA -> SOFT HYPHEN | |
'\xf4' # 0xCB -> LATIN SMALL LETTER O WITH CIRCUMFLEX | |
'\xf6' # 0xCC -> LATIN SMALL LETTER O WITH DIAERESIS | |
'\xf2' # 0xCD -> LATIN SMALL LETTER O WITH GRAVE | |
'\xf3' # 0xCE -> LATIN SMALL LETTER O WITH ACUTE | |
'\xf5' # 0xCF -> LATIN SMALL LETTER O WITH TILDE | |
'}' # 0xD0 -> RIGHT CURLY BRACKET | |
'J' # 0xD1 -> LATIN CAPITAL LETTER J | |
'K' # 0xD2 -> LATIN CAPITAL LETTER K | |
'L' # 0xD3 -> LATIN CAPITAL LETTER L | |
'M' # 0xD4 -> LATIN CAPITAL LETTER M | |
'N' # 0xD5 -> LATIN CAPITAL LETTER N | |
'O' # 0xD6 -> LATIN CAPITAL LETTER O | |
'P' # 0xD7 -> LATIN CAPITAL LETTER P | |
'Q' # 0xD8 -> LATIN CAPITAL LETTER Q | |
'R' # 0xD9 -> LATIN CAPITAL LETTER R | |
'\xb9' # 0xDA -> SUPERSCRIPT ONE | |
'\xfb' # 0xDB -> LATIN SMALL LETTER U WITH CIRCUMFLEX | |
'\xfc' # 0xDC -> LATIN SMALL LETTER U WITH DIAERESIS | |
'\xf9' # 0xDD -> LATIN SMALL LETTER U WITH GRAVE | |
'\xfa' # 0xDE -> LATIN SMALL LETTER U WITH ACUTE | |
'\xff' # 0xDF -> LATIN SMALL LETTER Y WITH DIAERESIS | |
'\\' # 0xE0 -> REVERSE SOLIDUS | |
'\xf7' # 0xE1 -> DIVISION SIGN | |
'S' # 0xE2 -> LATIN CAPITAL LETTER S | |
'T' # 0xE3 -> LATIN CAPITAL LETTER T | |
'U' # 0xE4 -> LATIN CAPITAL LETTER U | |
'V' # 0xE5 -> LATIN CAPITAL LETTER V | |
'W' # 0xE6 -> LATIN CAPITAL LETTER W | |
'X' # 0xE7 -> LATIN CAPITAL LETTER X | |
'Y' # 0xE8 -> LATIN CAPITAL LETTER Y | |
'Z' # 0xE9 -> LATIN CAPITAL LETTER Z | |
'\xb2' # 0xEA -> SUPERSCRIPT TWO | |
'\xd4' # 0xEB -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX | |
'\xd6' # 0xEC -> LATIN CAPITAL LETTER O WITH DIAERESIS | |
'\xd2' # 0xED -> LATIN CAPITAL LETTER O WITH GRAVE | |
'\xd3' # 0xEE -> LATIN CAPITAL LETTER O WITH ACUTE | |
'\xd5' # 0xEF -> LATIN CAPITAL LETTER O WITH TILDE | |
'0' # 0xF0 -> DIGIT ZERO | |
'1' # 0xF1 -> DIGIT ONE | |
'2' # 0xF2 -> DIGIT TWO | |
'3' # 0xF3 -> DIGIT THREE | |
'4' # 0xF4 -> DIGIT FOUR | |
'5' # 0xF5 -> DIGIT FIVE | |
'6' # 0xF6 -> DIGIT SIX | |
'7' # 0xF7 -> DIGIT SEVEN | |
'8' # 0xF8 -> DIGIT EIGHT | |
'9' # 0xF9 -> DIGIT NINE | |
'\xb3' # 0xFA -> SUPERSCRIPT THREE | |
'\xdb' # 0xFB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX | |
'\xdc' # 0xFC -> LATIN CAPITAL LETTER U WITH DIAERESIS | |
'\xd9' # 0xFD -> LATIN CAPITAL LETTER U WITH GRAVE | |
'\xda' # 0xFE -> LATIN CAPITAL LETTER U WITH ACUTE | |
'\x9f' # 0xFF -> CONTROL | |
) | |
### Encoding table | |
encoding_table=codecs.charmap_build(decoding_table) |
""" Python Character Mapping Codec cp1250 generated from 'MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1250.TXT' with gencodec.py. | |
"""#" | |
import codecs | |
### Codec APIs | |
class Codec(codecs.Codec): | |
def encode(self,input,errors='strict'): | |
return codecs.charmap_encode(input,errors,encoding_table) | |
def decode(self,input,errors='strict'): | |
return codecs.charmap_decode(input,errors,decoding_table) | |
class IncrementalEncoder(codecs.IncrementalEncoder): | |
def encode(self, input, final=False): | |
return codecs.charmap_encode(input,self.errors,encoding_table)[0] | |
class IncrementalDecoder(codecs.IncrementalDecoder): | |
def decode(self, input, final=False): | |
return codecs.charmap_decode(input,self.errors,decoding_table)[0] | |
class StreamWriter(Codec,codecs.StreamWriter): | |
pass | |
class StreamReader(Codec,codecs.StreamReader): | |
pass | |
### encodings module API | |
def getregentry(): | |
return codecs.CodecInfo( | |
name='cp1250', | |
encode=Codec().encode, | |
decode=Codec().decode, | |
incrementalencoder=IncrementalEncoder, | |
incrementaldecoder=IncrementalDecoder, | |
streamreader=StreamReader, | |
streamwriter=StreamWriter, | |
) | |
### Decoding Table | |
decoding_table = ( | |
'\x00' # 0x00 -> NULL | |
'\x01' # 0x01 -> START OF HEADING | |
'\x02' # 0x02 -> START OF TEXT | |
'\x03' # 0x03 -> END OF TEXT | |
'\x04' # 0x04 -> END OF TRANSMISSION | |
'\x05' # 0x05 -> ENQUIRY | |
'\x06' # 0x06 -> ACKNOWLEDGE | |
'\x07' # 0x07 -> BELL | |
'\x08' # 0x08 -> BACKSPACE | |
'\t' # 0x09 -> HORIZONTAL TABULATION | |
'\n' # 0x0A -> LINE FEED | |
'\x0b' # 0x0B -> VERTICAL TABULATION | |
'\x0c' # 0x0C -> FORM FEED | |
'\r' # 0x0D -> CARRIAGE RETURN | |
'\x0e' # 0x0E -> SHIFT OUT | |
'\x0f' # 0x0F -> SHIFT IN | |
'\x10' # 0x10 -> DATA LINK ESCAPE | |
'\x11' # 0x11 -> DEVICE CONTROL ONE | |
'\x12' # 0x12 -> DEVICE CONTROL TWO | |
'\x13' # 0x13 -> DEVICE CONTROL THREE | |
'\x14' # 0x14 -> DEVICE CONTROL FOUR | |
'\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE | |
'\x16' # 0x16 -> SYNCHRONOUS IDLE | |
'\x17' # 0x17 -> END OF TRANSMISSION BLOCK | |
'\x18' # 0x18 -> CANCEL | |
'\x19' # 0x19 -> END OF MEDIUM | |
'\x1a' # 0x1A -> SUBSTITUTE | |
'\x1b' # 0x1B -> ESCAPE | |
'\x1c' # 0x1C -> FILE SEPARATOR | |
'\x1d' # 0x1D -> GROUP SEPARATOR | |
'\x1e' # 0x1E -> RECORD SEPARATOR | |
'\x1f' # 0x1F -> UNIT SEPARATOR | |
' ' # 0x20 -> SPACE | |
'!' # 0x21 -> EXCLAMATION MARK | |
'"' # 0x22 -> QUOTATION MARK | |
'#' # 0x23 -> NUMBER SIGN | |
'$' # 0x24 -> DOLLAR SIGN | |
'%' # 0x25 -> PERCENT SIGN | |
'&' # 0x26 -> AMPERSAND | |
"'" # 0x27 -> APOSTROPHE | |
'(' # 0x28 -> LEFT PARENTHESIS | |
')' # 0x29 -> RIGHT PARENTHESIS | |
'*' # 0x2A -> ASTERISK | |
'+' # 0x2B -> PLUS SIGN | |
',' # 0x2C -> COMMA | |
'-' # 0x2D -> HYPHEN-MINUS | |
'.' # 0x2E -> FULL STOP | |
'/' # 0x2F -> SOLIDUS | |
'0' # 0x30 -> DIGIT ZERO | |
'1' # 0x31 -> DIGIT ONE | |
'2' # 0x32 -> DIGIT TWO | |
'3' # 0x33 -> DIGIT THREE | |
'4' # 0x34 -> DIGIT FOUR | |
'5' # 0x35 -> DIGIT FIVE | |
'6' # 0x36 -> DIGIT SIX | |
'7' # 0x37 -> DIGIT SEVEN | |
'8' # 0x38 -> DIGIT EIGHT | |
'9' # 0x39 -> DIGIT NINE | |
':' # 0x3A -> COLON | |
';' # 0x3B -> SEMICOLON | |
'<' # 0x3C -> LESS-THAN SIGN | |
'=' # 0x3D -> EQUALS SIGN | |
'>' # 0x3E -> GREATER-THAN SIGN | |
'?' # 0x3F -> QUESTION MARK | |
'@' # 0x40 -> COMMERCIAL AT | |
'A' # 0x41 -> LATIN CAPITAL LETTER A | |
'B' # 0x42 -> LATIN CAPITAL LETTER B | |
'C' # 0x43 -> LATIN CAPITAL LETTER C | |
'D' # 0x44 -> LATIN CAPITAL LETTER D | |
'E' # 0x45 -> LATIN CAPITAL LETTER E | |
'F' # 0x46 -> LATIN CAPITAL LETTER F | |
'G' # 0x47 -> LATIN CAPITAL LETTER G | |
'H' # 0x48 -> LATIN CAPITAL LETTER H | |
'I' # 0x49 -> LATIN CAPITAL LETTER I | |
'J' # 0x4A -> LATIN CAPITAL LETTER J | |
'K' # 0x4B -> LATIN CAPITAL LETTER K | |
'L' # 0x4C -> LATIN CAPITAL LETTER L | |
'M' # 0x4D -> LATIN CAPITAL LETTER M | |
'N' # 0x4E -> LATIN CAPITAL LETTER N | |
'O' # 0x4F -> LATIN CAPITAL LETTER O | |
'P' # 0x50 -> LATIN CAPITAL LETTER P | |
'Q' # 0x51 -> LATIN CAPITAL LETTER Q | |
'R' # 0x52 -> LATIN CAPITAL LETTER R | |
'S' # 0x53 -> LATIN CAPITAL LETTER S | |
'T' # 0x54 -> LATIN CAPITAL LETTER T | |
'U' # 0x55 -> LATIN CAPITAL LETTER U | |
'V' # 0x56 -> LATIN CAPITAL LETTER V | |
'W' # 0x57 -> LATIN CAPITAL LETTER W | |
'X' # 0x58 -> LATIN CAPITAL LETTER X | |
'Y' # 0x59 -> LATIN CAPITAL LETTER Y | |
'Z' # 0x5A -> LATIN CAPITAL LETTER Z | |
'[' # 0x5B -> LEFT SQUARE BRACKET | |
'\\' # 0x5C -> REVERSE SOLIDUS | |
']' # 0x5D -> RIGHT SQUARE BRACKET | |
'^' # 0x5E -> CIRCUMFLEX ACCENT | |
'_' # 0x5F -> LOW LINE | |
'`' # 0x60 -> GRAVE ACCENT | |
'a' # 0x61 -> LATIN SMALL LETTER A | |
'b' # 0x62 -> LATIN SMALL LETTER B | |
'c' # 0x63 -> LATIN SMALL LETTER C | |
'd' # 0x64 -> LATIN SMALL LETTER D | |
'e' # 0x65 -> LATIN SMALL LETTER E | |
'f' # 0x66 -> LATIN SMALL LETTER F | |
'g' # 0x67 -> LATIN SMALL LETTER G | |
'h' # 0x68 -> LATIN SMALL LETTER H | |
'i' # 0x69 -> LATIN SMALL LETTER I | |
'j' # 0x6A -> LATIN SMALL LETTER J | |
'k' # 0x6B -> LATIN SMALL LETTER K | |
'l' # 0x6C -> LATIN SMALL LETTER L | |
'm' # 0x6D -> LATIN SMALL LETTER M | |
'n' # 0x6E -> LATIN SMALL LETTER N | |
'o' # 0x6F -> LATIN SMALL LETTER O | |
'p' # 0x70 -> LATIN SMALL LETTER P | |
'q' # 0x71 -> LATIN SMALL LETTER Q | |
'r' # 0x72 -> LATIN SMALL LETTER R | |
's' # 0x73 -> LATIN SMALL LETTER S | |
't' # 0x74 -> LATIN SMALL LETTER T | |
'u' # 0x75 -> LATIN SMALL LETTER U | |
'v' # 0x76 -> LATIN SMALL LETTER V | |
'w' # 0x77 -> LATIN SMALL LETTER W | |
'x' # 0x78 -> LATIN SMALL LETTER X | |
'y' # 0x79 -> LATIN SMALL LETTER Y | |
'z' # 0x7A -> LATIN SMALL LETTER Z | |
'{' # 0x7B -> LEFT CURLY BRACKET | |
'|' # 0x7C -> VERTICAL LINE | |
'}' # 0x7D -> RIGHT CURLY BRACKET | |
'~' # 0x7E -> TILDE | |
'\x7f' # 0x7F -> DELETE | |
'\u20ac' # 0x80 -> EURO SIGN | |
'\ufffe' # 0x81 -> UNDEFINED | |
'\u201a' # 0x82 -> SINGLE LOW-9 QUOTATION MARK | |
'\ufffe' # 0x83 -> UNDEFINED | |
'\u201e' # 0x84 -> DOUBLE LOW-9 QUOTATION MARK | |
'\u2026' # 0x85 -> HORIZONTAL ELLIPSIS | |
'\u2020' # 0x86 -> DAGGER | |
'\u2021' # 0x87 -> DOUBLE DAGGER | |
'\ufffe' # 0x88 -> UNDEFINED | |
'\u2030' # 0x89 -> PER MILLE SIGN | |
'\u0160' # 0x8A -> LATIN CAPITAL LETTER S WITH CARON | |
'\u2039' # 0x8B -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK | |
'\u015a' # 0x8C -> LATIN CAPITAL LETTER S WITH ACUTE | |
'\u0164' # 0x8D -> LATIN CAPITAL LETTER T WITH CARON | |
'\u017d' # 0x8E -> LATIN CAPITAL LETTER Z WITH CARON | |
'\u0179' # 0x8F -> LATIN CAPITAL LETTER Z WITH ACUTE | |
'\ufffe' # 0x90 -> UNDEFINED | |
'\u2018' # 0x91 -> LEFT SINGLE QUOTATION MARK | |
'\u2019' # 0x92 -> RIGHT SINGLE QUOTATION MARK | |
'\u201c' # 0x93 -> LEFT DOUBLE QUOTATION MARK | |
'\u201d' # 0x94 -> RIGHT DOUBLE QUOTATION MARK | |
'\u2022' # 0x95 -> BULLET | |
'\u2013' # 0x96 -> EN DASH | |
'\u2014' # 0x97 -> EM DASH | |
'\ufffe' # 0x98 -> UNDEFINED | |
'\u2122' # 0x99 -> TRADE MARK SIGN | |
'\u0161' # 0x9A -> LATIN SMALL LETTER S WITH CARON | |
'\u203a' # 0x9B -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK | |
'\u015b' # 0x9C -> LATIN SMALL LETTER S WITH ACUTE | |
'\u0165' # 0x9D -> LATIN SMALL LETTER T WITH CARON | |
'\u017e' # 0x9E -> LATIN SMALL LETTER Z WITH CARON | |
'\u017a' # 0x9F -> LATIN SMALL LETTER Z WITH ACUTE | |
'\xa0' # 0xA0 -> NO-BREAK SPACE | |
'\u02c7' # 0xA1 -> CARON | |
'\u02d8' # 0xA2 -> BREVE | |
'\u0141' # 0xA3 -> LATIN CAPITAL LETTER L WITH STROKE | |
'\xa4' # 0xA4 -> CURRENCY SIGN | |
'\u0104' # 0xA5 -> LATIN CAPITAL LETTER A WITH OGONEK | |
'\xa6' # 0xA6 -> BROKEN BAR | |
'\xa7' # 0xA7 -> SECTION SIGN | |
'\xa8' # 0xA8 -> DIAERESIS | |
'\xa9' # 0xA9 -> COPYRIGHT SIGN | |
'\u015e' # 0xAA -> LATIN CAPITAL LETTER S WITH CEDILLA | |
'\xab' # 0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK | |
'\xac' # 0xAC -> NOT SIGN | |
'\xad' # 0xAD -> SOFT HYPHEN | |
'\xae' # 0xAE -> REGISTERED SIGN | |
'\u017b' # 0xAF -> LATIN CAPITAL LETTER Z WITH DOT ABOVE | |
'\xb0' # 0xB0 -> DEGREE SIGN | |
'\xb1' # 0xB1 -> PLUS-MINUS SIGN | |
'\u02db' # 0xB2 -> OGONEK | |
'\u0142' # 0xB3 -> LATIN SMALL LETTER L WITH STROKE | |
'\xb4' # 0xB4 -> ACUTE ACCENT | |
'\xb5' # 0xB5 -> MICRO SIGN | |
'\xb6' # 0xB6 -> PILCROW SIGN | |
'\xb7' # 0xB7 -> MIDDLE DOT | |
'\xb8' # 0xB8 -> CEDILLA | |
'\u0105' # 0xB9 -> LATIN SMALL LETTER A WITH OGONEK | |
'\u015f' # 0xBA -> LATIN SMALL LETTER S WITH CEDILLA | |
'\xbb' # 0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK | |
'\u013d' # 0xBC -> LATIN CAPITAL LETTER L WITH CARON | |
'\u02dd' # 0xBD -> DOUBLE ACUTE ACCENT | |
'\u013e' # 0xBE -> LATIN SMALL LETTER L WITH CARON | |
'\u017c' # 0xBF -> LATIN SMALL LETTER Z WITH DOT ABOVE | |
'\u0154' # 0xC0 -> LATIN CAPITAL LETTER R WITH ACUTE | |
'\xc1' # 0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE | |
'\xc2' # 0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX | |
'\u0102' # 0xC3 -> LATIN CAPITAL LETTER A WITH BREVE | |
'\xc4' # 0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS | |
'\u0139' # 0xC5 -> LATIN CAPITAL LETTER L WITH ACUTE | |
'\u0106' # 0xC6 -> LATIN CAPITAL LETTER C WITH ACUTE | |
'\xc7' # 0xC7 -> LATIN CAPITAL LETTER C WITH CEDILLA | |
'\u010c' # 0xC8 -> LATIN CAPITAL LETTER C WITH CARON | |
'\xc9' # 0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE | |
'\u0118' # 0xCA -> LATIN CAPITAL LETTER E WITH OGONEK | |
'\xcb' # 0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS | |
'\u011a' # 0xCC -> LATIN CAPITAL LETTER E WITH CARON | |
'\xcd' # 0xCD -> LATIN CAPITAL LETTER I WITH ACUTE | |
'\xce' # 0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX | |
'\u010e' # 0xCF -> LATIN CAPITAL LETTER D WITH CARON | |
'\u0110' # 0xD0 -> LATIN CAPITAL LETTER D WITH STROKE | |
'\u0143' # 0xD1 -> LATIN CAPITAL LETTER N WITH ACUTE | |
'\u0147' # 0xD2 -> LATIN CAPITAL LETTER N WITH CARON | |
'\xd3' # 0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE | |
'\xd4' # 0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX | |
'\u0150' # 0xD5 -> LATIN CAPITAL LETTER O WITH DOUBLE ACUTE | |
'\xd6' # 0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS | |
'\xd7' # 0xD7 -> MULTIPLICATION SIGN | |
'\u0158' # 0xD8 -> LATIN CAPITAL LETTER R WITH CARON | |
'\u016e' # 0xD9 -> LATIN CAPITAL LETTER U WITH RING ABOVE | |
'\xda' # 0xDA -> LATIN CAPITAL LETTER U WITH ACUTE | |
'\u0170' # 0xDB -> LATIN CAPITAL LETTER U WITH DOUBLE ACUTE | |
'\xdc' # 0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS | |
'\xdd' # 0xDD -> LATIN CAPITAL LETTER Y WITH ACUTE | |
'\u0162' # 0xDE -> LATIN CAPITAL LETTER T WITH CEDILLA | |
'\xdf' # 0xDF -> LATIN SMALL LETTER SHARP S | |
'\u0155' # 0xE0 -> LATIN SMALL LETTER R WITH ACUTE | |
'\xe1' # 0xE1 -> LATIN SMALL LETTER A WITH ACUTE | |
'\xe2' # 0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX | |
'\u0103' # 0xE3 -> LATIN SMALL LETTER A WITH BREVE | |
'\xe4' # 0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS | |
'\u013a' # 0xE5 -> LATIN SMALL LETTER L WITH ACUTE | |
'\u0107' # 0xE6 -> LATIN SMALL LETTER C WITH ACUTE | |
'\xe7' # 0xE7 -> LATIN SMALL LETTER C WITH CEDILLA | |
'\u010d' # 0xE8 -> LATIN SMALL LETTER C WITH CARON | |
'\xe9' # 0xE9 -> LATIN SMALL LETTER E WITH ACUTE | |
'\u0119' # 0xEA -> LATIN SMALL LETTER E WITH OGONEK | |
'\xeb' # 0xEB -> LATIN SMALL LETTER E WITH DIAERESIS | |
'\u011b' # 0xEC -> LATIN SMALL LETTER E WITH CARON | |
'\xed' # 0xED -> LATIN SMALL LETTER I WITH ACUTE | |
'\xee' # 0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX | |
'\u010f' # 0xEF -> LATIN SMALL LETTER D WITH CARON | |
'\u0111' # 0xF0 -> LATIN SMALL LETTER D WITH STROKE | |
'\u0144' # 0xF1 -> LATIN SMALL LETTER N WITH ACUTE | |
'\u0148' # 0xF2 -> LATIN SMALL LETTER N WITH CARON | |
'\xf3' # 0xF3 -> LATIN SMALL LETTER O WITH ACUTE | |
'\xf4' # 0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX | |
'\u0151' # 0xF5 -> LATIN SMALL LETTER O WITH DOUBLE ACUTE | |
'\xf6' # 0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS | |
'\xf7' # 0xF7 -> DIVISION SIGN | |
'\u0159' # 0xF8 -> LATIN SMALL LETTER R WITH CARON | |
'\u016f' # 0xF9 -> LATIN SMALL LETTER U WITH RING ABOVE | |
'\xfa' # 0xFA -> LATIN SMALL LETTER U WITH ACUTE | |
'\u0171' # 0xFB -> LATIN SMALL LETTER U WITH DOUBLE ACUTE | |
'\xfc' # 0xFC -> LATIN SMALL LETTER U WITH DIAERESIS | |
'\xfd' # 0xFD -> LATIN SMALL LETTER Y WITH ACUTE | |
'\u0163' # 0xFE -> LATIN SMALL LETTER T WITH CEDILLA | |
'\u02d9' # 0xFF -> DOT ABOVE | |
) | |
### Encoding table | |
encoding_table=codecs.charmap_build(decoding_table) |
""" Python Character Mapping Codec cp1251 generated from 'MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1251.TXT' with gencodec.py. | |
"""#" | |
import codecs | |
### Codec APIs | |
class Codec(codecs.Codec): | |
def encode(self,input,errors='strict'): | |
return codecs.charmap_encode(input,errors,encoding_table) | |
def decode(self,input,errors='strict'): | |
return codecs.charmap_decode(input,errors,decoding_table) | |
class IncrementalEncoder(codecs.IncrementalEncoder): | |
def encode(self, input, final=False): | |
return codecs.charmap_encode(input,self.errors,encoding_table)[0] | |
class IncrementalDecoder(codecs.IncrementalDecoder): | |
def decode(self, input, final=False): | |
return codecs.charmap_decode(input,self.errors,decoding_table)[0] | |
class StreamWriter(Codec,codecs.StreamWriter): | |
pass | |
class StreamReader(Codec,codecs.StreamReader): | |
pass | |
### encodings module API | |
def getregentry(): | |
return codecs.CodecInfo( | |
name='cp1251', | |
encode=Codec().encode, | |
decode=Codec().decode, | |
incrementalencoder=IncrementalEncoder, | |
incrementaldecoder=IncrementalDecoder, | |
streamreader=StreamReader, | |
streamwriter=StreamWriter, | |
) | |
### Decoding Table | |
decoding_table = ( | |
'\x00' # 0x00 -> NULL | |
'\x01' # 0x01 -> START OF HEADING | |
'\x02' # 0x02 -> START OF TEXT | |
'\x03' # 0x03 -> END OF TEXT | |
'\x04' # 0x04 -> END OF TRANSMISSION | |
'\x05' # 0x05 -> ENQUIRY | |
'\x06' # 0x06 -> ACKNOWLEDGE | |
'\x07' # 0x07 -> BELL | |
'\x08' # 0x08 -> BACKSPACE | |
'\t' # 0x09 -> HORIZONTAL TABULATION | |
'\n' # 0x0A -> LINE FEED | |
'\x0b' # 0x0B -> VERTICAL TABULATION | |
'\x0c' # 0x0C -> FORM FEED | |
'\r' # 0x0D -> CARRIAGE RETURN | |
'\x0e' # 0x0E -> SHIFT OUT | |
'\x0f' # 0x0F -> SHIFT IN | |
'\x10' # 0x10 -> DATA LINK ESCAPE | |
'\x11' # 0x11 -> DEVICE CONTROL ONE | |
'\x12' # 0x12 -> DEVICE CONTROL TWO | |
'\x13' # 0x13 -> DEVICE CONTROL THREE | |
'\x14' # 0x14 -> DEVICE CONTROL FOUR | |
'\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE | |
'\x16' # 0x16 -> SYNCHRONOUS IDLE | |
'\x17' # 0x17 -> END OF TRANSMISSION BLOCK | |
'\x18' # 0x18 -> CANCEL | |
'\x19' # 0x19 -> END OF MEDIUM | |
'\x1a' # 0x1A -> SUBSTITUTE | |
'\x1b' # 0x1B -> ESCAPE | |
'\x1c' # 0x1C -> FILE SEPARATOR | |
'\x1d' # 0x1D -> GROUP SEPARATOR | |
'\x1e' # 0x1E -> RECORD SEPARATOR | |
'\x1f' # 0x1F -> UNIT SEPARATOR | |
' ' # 0x20 -> SPACE | |
'!' # 0x21 -> EXCLAMATION MARK | |
'"' # 0x22 -> QUOTATION MARK | |
'#' # 0x23 -> NUMBER SIGN | |
'$' # 0x24 -> DOLLAR SIGN | |
'%' # 0x25 -> PERCENT SIGN | |
'&' # 0x26 -> AMPERSAND | |
"'" # 0x27 -> APOSTROPHE | |
'(' # 0x28 -> LEFT PARENTHESIS | |
')' # 0x29 -> RIGHT PARENTHESIS | |
'*' # 0x2A -> ASTERISK | |
'+' # 0x2B -> PLUS SIGN | |
',' # 0x2C -> COMMA | |
'-' # 0x2D -> HYPHEN-MINUS | |
'.' # 0x2E -> FULL STOP | |
'/' # 0x2F -> SOLIDUS | |
'0' # 0x30 -> DIGIT ZERO | |
'1' # 0x31 -> DIGIT ONE | |
'2' # 0x32 -> DIGIT TWO | |
'3' # 0x33 -> DIGIT THREE | |
'4' # 0x34 -> DIGIT FOUR | |
'5' # 0x35 -> DIGIT FIVE | |
'6' # 0x36 -> DIGIT SIX | |
'7' # 0x37 -> DIGIT SEVEN | |
'8' # 0x38 -> DIGIT EIGHT | |
'9' # 0x39 -> DIGIT NINE | |
':' # 0x3A -> COLON | |
';' # 0x3B -> SEMICOLON | |
'<' # 0x3C -> LESS-THAN SIGN | |
'=' # 0x3D -> EQUALS SIGN | |
'>' # 0x3E -> GREATER-THAN SIGN | |
'?' # 0x3F -> QUESTION MARK | |
'@' # 0x40 -> COMMERCIAL AT | |
'A' # 0x41 -> LATIN CAPITAL LETTER A | |
'B' # 0x42 -> LATIN CAPITAL LETTER B | |
'C' # 0x43 -> LATIN CAPITAL LETTER C | |
'D' # 0x44 -> LATIN CAPITAL LETTER D | |
'E' # 0x45 -> LATIN CAPITAL LETTER E | |
'F' # 0x46 -> LATIN CAPITAL LETTER F | |
'G' # 0x47 -> LATIN CAPITAL LETTER G | |
'H' # 0x48 -> LATIN CAPITAL LETTER H | |
'I' # 0x49 -> LATIN CAPITAL LETTER I | |
'J' # 0x4A -> LATIN CAPITAL LETTER J | |
'K' # 0x4B -> LATIN CAPITAL LETTER K | |
'L' # 0x4C -> LATIN CAPITAL LETTER L | |
'M' # 0x4D -> LATIN CAPITAL LETTER M | |
'N' # 0x4E -> LATIN CAPITAL LETTER N | |
'O' # 0x4F -> LATIN CAPITAL LETTER O | |
'P' # 0x50 -> LATIN CAPITAL LETTER P | |
'Q' # 0x51 -> LATIN CAPITAL LETTER Q | |
'R' # 0x52 -> LATIN CAPITAL LETTER R | |
'S' # 0x53 -> LATIN CAPITAL LETTER S | |
'T' # 0x54 -> LATIN CAPITAL LETTER T | |
'U' # 0x55 -> LATIN CAPITAL LETTER U | |
'V' # 0x56 -> LATIN CAPITAL LETTER V | |
'W' # 0x57 -> LATIN CAPITAL LETTER W | |
'X' # 0x58 -> LATIN CAPITAL LETTER X | |
'Y' # 0x59 -> LATIN CAPITAL LETTER Y | |
'Z' # 0x5A -> LATIN CAPITAL LETTER Z | |
'[' # 0x5B -> LEFT SQUARE BRACKET | |
'\\' # 0x5C -> REVERSE SOLIDUS | |
']' # 0x5D -> RIGHT SQUARE BRACKET | |
'^' # 0x5E -> CIRCUMFLEX ACCENT | |
'_' # 0x5F -> LOW LINE | |
'`' # 0x60 -> GRAVE ACCENT | |
'a' # 0x61 -> LATIN SMALL LETTER A | |
'b' # 0x62 -> LATIN SMALL LETTER B | |
'c' # 0x63 -> LATIN SMALL LETTER C | |
'd' # 0x64 -> LATIN SMALL LETTER D | |
'e' # 0x65 -> LATIN SMALL LETTER E | |
'f' # 0x66 -> LATIN SMALL LETTER F | |
'g' # 0x67 -> LATIN SMALL LETTER G | |
'h' # 0x68 -> LATIN SMALL LETTER H | |
'i' # 0x69 -> LATIN SMALL LETTER I | |
'j' # 0x6A -> LATIN SMALL LETTER J | |
'k' # 0x6B -> LATIN SMALL LETTER K | |
'l' # 0x6C -> LATIN SMALL LETTER L | |
'm' # 0x6D -> LATIN SMALL LETTER M | |
'n' # 0x6E -> LATIN SMALL LETTER N | |
'o' # 0x6F -> LATIN SMALL LETTER O | |
'p' # 0x70 -> LATIN SMALL LETTER P | |
'q' # 0x71 -> LATIN SMALL LETTER Q | |
'r' # 0x72 -> LATIN SMALL LETTER R | |
's' # 0x73 -> LATIN SMALL LETTER S | |
't' # 0x74 -> LATIN SMALL LETTER T | |
'u' # 0x75 -> LATIN SMALL LETTER U | |
'v' # 0x76 -> LATIN SMALL LETTER V | |
'w' # 0x77 -> LATIN SMALL LETTER W | |
'x' # 0x78 -> LATIN SMALL LETTER X | |
'y' # 0x79 -> LATIN SMALL LETTER Y | |
'z' # 0x7A -> LATIN SMALL LETTER Z | |
'{' # 0x7B -> LEFT CURLY BRACKET | |
'|' # 0x7C -> VERTICAL LINE | |
'}' # 0x7D -> RIGHT CURLY BRACKET | |
'~' # 0x7E -> TILDE | |
'\x7f' # 0x7F -> DELETE | |
'\u0402' # 0x80 -> CYRILLIC CAPITAL LETTER DJE | |
'\u0403' # 0x81 -> CYRILLIC CAPITAL LETTER GJE | |
'\u201a' # 0x82 -> SINGLE LOW-9 QUOTATION MARK | |
'\u0453' # 0x83 -> CYRILLIC SMALL LETTER GJE | |
'\u201e' # 0x84 -> DOUBLE LOW-9 QUOTATION MARK | |
'\u2026' # 0x85 -> HORIZONTAL ELLIPSIS | |
'\u2020' # 0x86 -> DAGGER | |
'\u2021' # 0x87 -> DOUBLE DAGGER | |
'\u20ac' # 0x88 -> EURO SIGN | |
'\u2030' # 0x89 -> PER MILLE SIGN | |
'\u0409' # 0x8A -> CYRILLIC CAPITAL LETTER LJE | |
'\u2039' # 0x8B -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK | |
'\u040a' # 0x8C -> CYRILLIC CAPITAL LETTER NJE | |
'\u040c' # 0x8D -> CYRILLIC CAPITAL LETTER KJE | |
'\u040b' # 0x8E -> CYRILLIC CAPITAL LETTER TSHE | |
'\u040f' # 0x8F -> CYRILLIC CAPITAL LETTER DZHE | |
'\u0452' # 0x90 -> CYRILLIC SMALL LETTER DJE | |
'\u2018' # 0x91 -> LEFT SINGLE QUOTATION MARK | |
'\u2019' # 0x92 -> RIGHT SINGLE QUOTATION MARK | |
'\u201c' # 0x93 -> LEFT DOUBLE QUOTATION MARK | |
'\u201d' # 0x94 -> RIGHT DOUBLE QUOTATION MARK | |
'\u2022' # 0x95 -> BULLET | |
'\u2013' # 0x96 -> EN DASH | |
'\u2014' # 0x97 -> EM DASH | |
'\ufffe' # 0x98 -> UNDEFINED | |
'\u2122' # 0x99 -> TRADE MARK SIGN | |
'\u0459' # 0x9A -> CYRILLIC SMALL LETTER LJE | |
'\u203a' # 0x9B -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK | |
'\u045a' # 0x9C -> CYRILLIC SMALL LETTER NJE | |
'\u045c' # 0x9D -> CYRILLIC SMALL LETTER KJE | |
'\u045b' # 0x9E -> CYRILLIC SMALL LETTER TSHE | |
'\u045f' # 0x9F -> CYRILLIC SMALL LETTER DZHE | |
'\xa0' # 0xA0 -> NO-BREAK SPACE | |
'\u040e' # 0xA1 -> CYRILLIC CAPITAL LETTER SHORT U | |
'\u045e' # 0xA2 -> CYRILLIC SMALL LETTER SHORT U | |
'\u0408' # 0xA3 -> CYRILLIC CAPITAL LETTER JE | |
'\xa4' # 0xA4 -> CURRENCY SIGN | |
'\u0490' # 0xA5 -> CYRILLIC CAPITAL LETTER GHE WITH UPTURN | |
'\xa6' # 0xA6 -> BROKEN BAR | |
'\xa7' # 0xA7 -> SECTION SIGN | |
'\u0401' # 0xA8 -> CYRILLIC CAPITAL LETTER IO | |
'\xa9' # 0xA9 -> COPYRIGHT SIGN | |
'\u0404' # 0xAA -> CYRILLIC CAPITAL LETTER UKRAINIAN IE | |
'\xab' # 0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK | |
'\xac' # 0xAC -> NOT SIGN | |
'\xad' # 0xAD -> SOFT HYPHEN | |
'\xae' # 0xAE -> REGISTERED SIGN | |
'\u0407' # 0xAF -> CYRILLIC CAPITAL LETTER YI | |
'\xb0' # 0xB0 -> DEGREE SIGN | |
'\xb1' # 0xB1 -> PLUS-MINUS SIGN | |
'\u0406' # 0xB2 -> CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I | |
'\u0456' # 0xB3 -> CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I | |
'\u0491' # 0xB4 -> CYRILLIC SMALL LETTER GHE WITH UPTURN | |
'\xb5' # 0xB5 -> MICRO SIGN | |
'\xb6' # 0xB6 -> PILCROW SIGN | |
'\xb7' # 0xB7 -> MIDDLE DOT | |
'\u0451' # 0xB8 -> CYRILLIC SMALL LETTER IO | |
'\u2116' # 0xB9 -> NUMERO SIGN | |
'\u0454' # 0xBA -> CYRILLIC SMALL LETTER UKRAINIAN IE | |
'\xbb' # 0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK | |
'\u0458' # 0xBC -> CYRILLIC SMALL LETTER JE | |
'\u0405' # 0xBD -> CYRILLIC CAPITAL LETTER DZE | |
'\u0455' # 0xBE -> CYRILLIC SMALL LETTER DZE | |
'\u0457' # 0xBF -> CYRILLIC SMALL LETTER YI | |
'\u0410' # 0xC0 -> CYRILLIC CAPITAL LETTER A | |
'\u0411' # 0xC1 -> CYRILLIC CAPITAL LETTER BE | |
'\u0412' # 0xC2 -> CYRILLIC CAPITAL LETTER VE | |
'\u0413' # 0xC3 -> CYRILLIC CAPITAL LETTER GHE | |
'\u0414' # 0xC4 -> CYRILLIC CAPITAL LETTER DE | |
'\u0415' # 0xC5 -> CYRILLIC CAPITAL LETTER IE | |
'\u0416' # 0xC6 -> CYRILLIC CAPITAL LETTER ZHE | |
'\u0417' # 0xC7 -> CYRILLIC CAPITAL LETTER ZE | |
'\u0418' # 0xC8 -> CYRILLIC CAPITAL LETTER I | |
'\u0419' # 0xC9 -> CYRILLIC CAPITAL LETTER SHORT I | |
'\u041a' # 0xCA -> CYRILLIC CAPITAL LETTER KA | |
'\u041b' # 0xCB -> CYRILLIC CAPITAL LETTER EL | |
'\u041c' # 0xCC -> CYRILLIC CAPITAL LETTER EM | |
'\u041d' # 0xCD -> CYRILLIC CAPITAL LETTER EN | |
'\u041e' # 0xCE -> CYRILLIC CAPITAL LETTER O | |
'\u041f' # 0xCF -> CYRILLIC CAPITAL LETTER PE | |
'\u0420' # 0xD0 -> CYRILLIC CAPITAL LETTER ER | |
'\u0421' # 0xD1 -> CYRILLIC CAPITAL LETTER ES | |
'\u0422' # 0xD2 -> CYRILLIC CAPITAL LETTER TE | |
'\u0423' # 0xD3 -> CYRILLIC CAPITAL LETTER U | |
'\u0424' # 0xD4 -> CYRILLIC CAPITAL LETTER EF | |
'\u0425' # 0xD5 -> CYRILLIC CAPITAL LETTER HA | |
'\u0426' # 0xD6 -> CYRILLIC CAPITAL LETTER TSE | |
'\u0427' # 0xD7 -> CYRILLIC CAPITAL LETTER CHE | |
'\u0428' # 0xD8 -> CYRILLIC CAPITAL LETTER SHA | |
'\u0429' # 0xD9 -> CYRILLIC CAPITAL LETTER SHCHA | |
'\u042a' # 0xDA -> CYRILLIC CAPITAL LETTER HARD SIGN | |
'\u042b' # 0xDB -> CYRILLIC CAPITAL LETTER YERU | |
'\u042c' # 0xDC -> CYRILLIC CAPITAL LETTER SOFT SIGN | |
'\u042d' # 0xDD -> CYRILLIC CAPITAL LETTER E | |
'\u042e' # 0xDE -> CYRILLIC CAPITAL LETTER YU | |
'\u042f' # 0xDF -> CYRILLIC CAPITAL LETTER YA | |
'\u0430' # 0xE0 -> CYRILLIC SMALL LETTER A | |
'\u0431' # 0xE1 -> CYRILLIC SMALL LETTER BE | |
'\u0432' # 0xE2 -> CYRILLIC SMALL LETTER VE | |
'\u0433' # 0xE3 -> CYRILLIC SMALL LETTER GHE | |
'\u0434' # 0xE4 -> CYRILLIC SMALL LETTER DE | |
'\u0435' # 0xE5 -> CYRILLIC SMALL LETTER IE | |
'\u0436' # 0xE6 -> CYRILLIC SMALL LETTER ZHE | |
'\u0437' # 0xE7 -> CYRILLIC SMALL LETTER ZE | |
'\u0438' # 0xE8 -> CYRILLIC SMALL LETTER I | |
'\u0439' # 0xE9 -> CYRILLIC SMALL LETTER SHORT I | |
'\u043a' # 0xEA -> CYRILLIC SMALL LETTER KA | |
'\u043b' # 0xEB -> CYRILLIC SMALL LETTER EL | |
'\u043c' # 0xEC -> CYRILLIC SMALL LETTER EM | |
'\u043d' # 0xED -> CYRILLIC SMALL LETTER EN | |
'\u043e' # 0xEE -> CYRILLIC SMALL LETTER O | |
'\u043f' # 0xEF -> CYRILLIC SMALL LETTER PE | |
'\u0440' # 0xF0 -> CYRILLIC SMALL LETTER ER | |
'\u0441' # 0xF1 -> CYRILLIC SMALL LETTER ES | |
'\u0442' # 0xF2 -> CYRILLIC SMALL LETTER TE | |
'\u0443' # 0xF3 -> CYRILLIC SMALL LETTER U | |
'\u0444' # 0xF4 -> CYRILLIC SMALL LETTER EF | |
'\u0445' # 0xF5 -> CYRILLIC SMALL LETTER HA | |
'\u0446' # 0xF6 -> CYRILLIC SMALL LETTER TSE | |
'\u0447' # 0xF7 -> CYRILLIC SMALL LETTER CHE | |
'\u0448' # 0xF8 -> CYRILLIC SMALL LETTER SHA | |
'\u0449' # 0xF9 -> CYRILLIC SMALL LETTER SHCHA | |
'\u044a' # 0xFA -> CYRILLIC SMALL LETTER HARD SIGN | |
'\u044b' # 0xFB -> CYRILLIC SMALL LETTER YERU | |
'\u044c' # 0xFC -> CYRILLIC SMALL LETTER SOFT SIGN | |
'\u044d' # 0xFD -> CYRILLIC SMALL LETTER E | |
'\u044e' # 0xFE -> CYRILLIC SMALL LETTER YU | |
'\u044f' # 0xFF -> CYRILLIC SMALL LETTER YA | |
) | |
### Encoding table | |
encoding_table=codecs.charmap_build(decoding_table) |
""" Python Character Mapping Codec cp1252 generated from 'MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1252.TXT' with gencodec.py. | |
"""#" | |
import codecs | |
### Codec APIs | |
class Codec(codecs.Codec): | |
def encode(self,input,errors='strict'): | |
return codecs.charmap_encode(input,errors,encoding_table) | |
def decode(self,input,errors='strict'): | |
return codecs.charmap_decode(input,errors,decoding_table) | |
class IncrementalEncoder(codecs.IncrementalEncoder): | |
def encode(self, input, final=False): | |
return codecs.charmap_encode(input,self.errors,encoding_table)[0] | |
class IncrementalDecoder(codecs.IncrementalDecoder): | |
def decode(self, input, final=False): | |
return codecs.charmap_decode(input,self.errors,decoding_table)[0] | |
class StreamWriter(Codec,codecs.StreamWriter): | |
pass | |
class StreamReader(Codec,codecs.StreamReader): | |
pass | |
### encodings module API | |
def getregentry(): | |
return codecs.CodecInfo( | |
name='cp1252', | |
encode=Codec().encode, | |
decode=Codec().decode, | |
incrementalencoder=IncrementalEncoder, | |
incrementaldecoder=IncrementalDecoder, | |
streamreader=StreamReader, | |
streamwriter=StreamWriter, | |
) | |
### Decoding Table | |
decoding_table = ( | |
'\x00' # 0x00 -> NULL | |
'\x01' # 0x01 -> START OF HEADING | |
'\x02' # 0x02 -> START OF TEXT | |
'\x03' # 0x03 -> END OF TEXT | |
'\x04' # 0x04 -> END OF TRANSMISSION | |
'\x05' # 0x05 -> ENQUIRY | |
'\x06' # 0x06 -> ACKNOWLEDGE | |
'\x07' # 0x07 -> BELL | |
'\x08' # 0x08 -> BACKSPACE | |
'\t' # 0x09 -> HORIZONTAL TABULATION | |
'\n' # 0x0A -> LINE FEED | |
'\x0b' # 0x0B -> VERTICAL TABULATION | |
'\x0c' # 0x0C -> FORM FEED | |
'\r' # 0x0D -> CARRIAGE RETURN | |
'\x0e' # 0x0E -> SHIFT OUT | |
'\x0f' # 0x0F -> SHIFT IN | |
'\x10' # 0x10 -> DATA LINK ESCAPE | |
'\x11' # 0x11 -> DEVICE CONTROL ONE | |
'\x12' # 0x12 -> DEVICE CONTROL TWO | |
'\x13' # 0x13 -> DEVICE CONTROL THREE | |
'\x14' # 0x14 -> DEVICE CONTROL FOUR | |
'\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE | |
'\x16' # 0x16 -> SYNCHRONOUS IDLE | |
'\x17' # 0x17 -> END OF TRANSMISSION BLOCK | |
'\x18' # 0x18 -> CANCEL | |
'\x19' # 0x19 -> END OF MEDIUM | |
'\x1a' # 0x1A -> SUBSTITUTE | |
'\x1b' # 0x1B -> ESCAPE | |
'\x1c' # 0x1C -> FILE SEPARATOR | |
'\x1d' # 0x1D -> GROUP SEPARATOR | |
'\x1e' # 0x1E -> RECORD SEPARATOR | |
'\x1f' # 0x1F -> UNIT SEPARATOR | |
' ' # 0x20 -> SPACE | |
'!' # 0x21 -> EXCLAMATION MARK | |
'"' # 0x22 -> QUOTATION MARK | |
'#' # 0x23 -> NUMBER SIGN | |
'$' # 0x24 -> DOLLAR SIGN | |
'%' # 0x25 -> PERCENT SIGN | |
'&' # 0x26 -> AMPERSAND | |
"'" # 0x27 -> APOSTROPHE | |
'(' # 0x28 -> LEFT PARENTHESIS | |
')' # 0x29 -> RIGHT PARENTHESIS | |
'*' # 0x2A -> ASTERISK | |
'+' # 0x2B -> PLUS SIGN | |
',' # 0x2C -> COMMA | |
'-' # 0x2D -> HYPHEN-MINUS | |
'.' # 0x2E -> FULL STOP | |
'/' # 0x2F -> SOLIDUS | |
'0' # 0x30 -> DIGIT ZERO | |
'1' # 0x31 -> DIGIT ONE | |
'2' # 0x32 -> DIGIT TWO | |
'3' # 0x33 -> DIGIT THREE | |
'4' # 0x34 -> DIGIT FOUR | |
'5' # 0x35 -> DIGIT FIVE | |
'6' # 0x36 -> DIGIT SIX | |
'7' # 0x37 -> DIGIT SEVEN | |
'8' # 0x38 -> DIGIT EIGHT | |
'9' # 0x39 -> DIGIT NINE | |
':' # 0x3A -> COLON | |
';' # 0x3B -> SEMICOLON | |
'<' # 0x3C -> LESS-THAN SIGN | |
'=' # 0x3D -> EQUALS SIGN | |
'>' # 0x3E -> GREATER-THAN SIGN | |
'?' # 0x3F -> QUESTION MARK | |
'@' # 0x40 -> COMMERCIAL AT | |
'A' # 0x41 -> LATIN CAPITAL LETTER A | |
'B' # 0x42 -> LATIN CAPITAL LETTER B | |
'C' # 0x43 -> LATIN CAPITAL LETTER C | |
'D' # 0x44 -> LATIN CAPITAL LETTER D | |
'E' # 0x45 -> LATIN CAPITAL LETTER E | |
'F' # 0x46 -> LATIN CAPITAL LETTER F | |
'G' # 0x47 -> LATIN CAPITAL LETTER G | |
'H' # 0x48 -> LATIN CAPITAL LETTER H | |
'I' # 0x49 -> LATIN CAPITAL LETTER I | |
'J' # 0x4A -> LATIN CAPITAL LETTER J | |
'K' # 0x4B -> LATIN CAPITAL LETTER K | |
'L' # 0x4C -> LATIN CAPITAL LETTER L | |
'M' # 0x4D -> LATIN CAPITAL LETTER M | |
'N' # 0x4E -> LATIN CAPITAL LETTER N | |
'O' # 0x4F -> LATIN CAPITAL LETTER O | |
'P' # 0x50 -> LATIN CAPITAL LETTER P | |
'Q' # 0x51 -> LATIN CAPITAL LETTER Q | |
'R' # 0x52 -> LATIN CAPITAL LETTER R | |
'S' # 0x53 -> LATIN CAPITAL LETTER S | |
'T' # 0x54 -> LATIN CAPITAL LETTER T | |
'U' # 0x55 -> LATIN CAPITAL LETTER U | |
'V' # 0x56 -> LATIN CAPITAL LETTER V | |
'W' # 0x57 -> LATIN CAPITAL LETTER W | |
'X' # 0x58 -> LATIN CAPITAL LETTER X | |
'Y' # 0x59 -> LATIN CAPITAL LETTER Y | |
'Z' # 0x5A -> LATIN CAPITAL LETTER Z | |
'[' # 0x5B -> LEFT SQUARE BRACKET | |
'\\' # 0x5C -> REVERSE SOLIDUS | |
']' # 0x5D -> RIGHT SQUARE BRACKET | |
'^' # 0x5E -> CIRCUMFLEX ACCENT | |
'_' # 0x5F -> LOW LINE | |
'`' # 0x60 -> GRAVE ACCENT | |
'a' # 0x61 -> LATIN SMALL LETTER A | |
'b' # 0x62 -> LATIN SMALL LETTER B | |
'c' # 0x63 -> LATIN SMALL LETTER C | |
'd' # 0x64 -> LATIN SMALL LETTER D | |
'e' # 0x65 -> LATIN SMALL LETTER E | |
'f' # 0x66 -> LATIN SMALL LETTER F | |
'g' # 0x67 -> LATIN SMALL LETTER G | |
'h' # 0x68 -> LATIN SMALL LETTER H | |
'i' # 0x69 -> LATIN SMALL LETTER I | |
'j' # 0x6A -> LATIN SMALL LETTER J | |
'k' # 0x6B -> LATIN SMALL LETTER K | |
'l' # 0x6C -> LATIN SMALL LETTER L | |
'm' # 0x6D -> LATIN SMALL LETTER M | |
'n' # 0x6E -> LATIN SMALL LETTER N | |
'o' # 0x6F -> LATIN SMALL LETTER O | |
'p' # 0x70 -> LATIN SMALL LETTER P | |
'q' # 0x71 -> LATIN SMALL LETTER Q | |
'r' # 0x72 -> LATIN SMALL LETTER R | |
's' # 0x73 -> LATIN SMALL LETTER S | |
't' # 0x74 -> LATIN SMALL LETTER T | |
'u' # 0x75 -> LATIN SMALL LETTER U | |
'v' # 0x76 -> LATIN SMALL LETTER V | |
'w' # 0x77 -> LATIN SMALL LETTER W | |
'x' # 0x78 -> LATIN SMALL LETTER X | |
'y' # 0x79 -> LATIN SMALL LETTER Y | |
'z' # 0x7A -> LATIN SMALL LETTER Z | |
'{' # 0x7B -> LEFT CURLY BRACKET | |
'|' # 0x7C -> VERTICAL LINE | |
'}' # 0x7D -> RIGHT CURLY BRACKET | |
'~' # 0x7E -> TILDE | |
'\x7f' # 0x7F -> DELETE | |
'\u20ac' # 0x80 -> EURO SIGN | |
'\ufffe' # 0x81 -> UNDEFINED | |
'\u201a' # 0x82 -> SINGLE LOW-9 QUOTATION MARK | |
'\u0192' # 0x83 -> LATIN SMALL LETTER F WITH HOOK | |
'\u201e' # 0x84 -> DOUBLE LOW-9 QUOTATION MARK | |
'\u2026' # 0x85 -> HORIZONTAL ELLIPSIS | |
'\u2020' # 0x86 -> DAGGER | |
'\u2021' # 0x87 -> DOUBLE DAGGER | |
'\u02c6' # 0x88 -> MODIFIER LETTER CIRCUMFLEX ACCENT | |
'\u2030' # 0x89 -> PER MILLE SIGN | |
'\u0160' # 0x8A -> LATIN CAPITAL LETTER S WITH CARON | |
'\u2039' # 0x8B -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK | |
'\u0152' # 0x8C -> LATIN CAPITAL LIGATURE OE | |
'\ufffe' # 0x8D -> UNDEFINED | |
'\u017d' # 0x8E -> LATIN CAPITAL LETTER Z WITH CARON | |
'\ufffe' # 0x8F -> UNDEFINED | |
'\ufffe' # 0x90 -> UNDEFINED | |
'\u2018' # 0x91 -> LEFT SINGLE QUOTATION MARK | |
'\u2019' # 0x92 -> RIGHT SINGLE QUOTATION MARK | |
'\u201c' # 0x93 -> LEFT DOUBLE QUOTATION MARK | |
'\u201d' # 0x94 -> RIGHT DOUBLE QUOTATION MARK | |
'\u2022' # 0x95 -> BULLET | |
'\u2013' # 0x96 -> EN DASH | |
'\u2014' # 0x97 -> EM DASH | |
'\u02dc' # 0x98 -> SMALL TILDE | |
'\u2122' # 0x99 -> TRADE MARK SIGN | |
'\u0161' # 0x9A -> LATIN SMALL LETTER S WITH CARON | |
'\u203a' # 0x9B -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK | |
'\u0153' # 0x9C -> LATIN SMALL LIGATURE OE | |
'\ufffe' # 0x9D -> UNDEFINED | |
'\u017e' # 0x9E -> LATIN SMALL LETTER Z WITH CARON | |
'\u0178' # 0x9F -> LATIN CAPITAL LETTER Y WITH DIAERESIS | |
'\xa0' # 0xA0 -> NO-BREAK SPACE | |
'\xa1' # 0xA1 -> INVERTED EXCLAMATION MARK | |
'\xa2' # 0xA2 -> CENT SIGN | |
'\xa3' # 0xA3 -> POUND SIGN | |
'\xa4' # 0xA4 -> CURRENCY SIGN | |
'\xa5' # 0xA5 -> YEN SIGN | |
'\xa6' # 0xA6 -> BROKEN BAR | |
'\xa7' # 0xA7 -> SECTION SIGN | |
'\xa8' # 0xA8 -> DIAERESIS | |
'\xa9' # 0xA9 -> COPYRIGHT SIGN | |
'\xaa' # 0xAA -> FEMININE ORDINAL INDICATOR | |
'\xab' # 0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK | |
'\xac' # 0xAC -> NOT SIGN | |
'\xad' # 0xAD -> SOFT HYPHEN | |
'\xae' # 0xAE -> REGISTERED SIGN | |
'\xaf' # 0xAF -> MACRON | |
'\xb0' # 0xB0 -> DEGREE SIGN | |
'\xb1' # 0xB1 -> PLUS-MINUS SIGN | |
'\xb2' # 0xB2 -> SUPERSCRIPT TWO | |
'\xb3' # 0xB3 -> SUPERSCRIPT THREE | |
'\xb4' # 0xB4 -> ACUTE ACCENT | |
'\xb5' # 0xB5 -> MICRO SIGN | |
'\xb6' # 0xB6 -> PILCROW SIGN | |
'\xb7' # 0xB7 -> MIDDLE DOT | |
'\xb8' # 0xB8 -> CEDILLA | |
'\xb9' # 0xB9 -> SUPERSCRIPT ONE | |
'\xba' # 0xBA -> MASCULINE ORDINAL INDICATOR | |
'\xbb' # 0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK | |
'\xbc' # 0xBC -> VULGAR FRACTION ONE QUARTER | |
'\xbd' # 0xBD -> VULGAR FRACTION ONE HALF | |
'\xbe' # 0xBE -> VULGAR FRACTION THREE QUARTERS | |
'\xbf' # 0xBF -> INVERTED QUESTION MARK | |
'\xc0' # 0xC0 -> LATIN CAPITAL LETTER A WITH GRAVE | |
'\xc1' # 0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE | |
'\xc2' # 0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX | |
'\xc3' # 0xC3 -> LATIN CAPITAL LETTER A WITH TILDE | |
'\xc4' # 0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS | |
'\xc5' # 0xC5 -> LATIN CAPITAL LETTER A WITH RING ABOVE | |
'\xc6' # 0xC6 -> LATIN CAPITAL LETTER AE | |
'\xc7' # 0xC7 -> LATIN CAPITAL LETTER C WITH CEDILLA | |
'\xc8' # 0xC8 -> LATIN CAPITAL LETTER E WITH GRAVE | |
'\xc9' # 0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE | |
'\xca' # 0xCA -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX | |
'\xcb' # 0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS | |
'\xcc' # 0xCC -> LATIN CAPITAL LETTER I WITH GRAVE | |
'\xcd' # 0xCD -> LATIN CAPITAL LETTER I WITH ACUTE | |
'\xce' # 0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX | |
'\xcf' # 0xCF -> LATIN CAPITAL LETTER I WITH DIAERESIS | |
'\xd0' # 0xD0 -> LATIN CAPITAL LETTER ETH | |
'\xd1' # 0xD1 -> LATIN CAPITAL LETTER N WITH TILDE | |
'\xd2' # 0xD2 -> LATIN CAPITAL LETTER O WITH GRAVE | |
'\xd3' # 0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE | |
'\xd4' # 0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX | |
'\xd5' # 0xD5 -> LATIN CAPITAL LETTER O WITH TILDE | |
'\xd6' # 0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS | |
'\xd7' # 0xD7 -> MULTIPLICATION SIGN | |
'\xd8' # 0xD8 -> LATIN CAPITAL LETTER O WITH STROKE | |
'\xd9' # 0xD9 -> LATIN CAPITAL LETTER U WITH GRAVE | |
'\xda' # 0xDA -> LATIN CAPITAL LETTER U WITH ACUTE | |
'\xdb' # 0xDB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX | |
'\xdc' # 0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS | |
'\xdd' # 0xDD -> LATIN CAPITAL LETTER Y WITH ACUTE | |
'\xde' # 0xDE -> LATIN CAPITAL LETTER THORN | |
'\xdf' # 0xDF -> LATIN SMALL LETTER SHARP S | |
'\xe0' # 0xE0 -> LATIN SMALL LETTER A WITH GRAVE | |
'\xe1' # 0xE1 -> LATIN SMALL LETTER A WITH ACUTE | |
'\xe2' # 0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX | |
'\xe3' # 0xE3 -> LATIN SMALL LETTER A WITH TILDE | |
'\xe4' # 0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS | |
'\xe5' # 0xE5 -> LATIN SMALL LETTER A WITH RING ABOVE | |
'\xe6' # 0xE6 -> LATIN SMALL LETTER AE | |
'\xe7' # 0xE7 -> LATIN SMALL LETTER C WITH CEDILLA | |
'\xe8' # 0xE8 -> LATIN SMALL LETTER E WITH GRAVE | |
'\xe9' # 0xE9 -> LATIN SMALL LETTER E WITH ACUTE | |
'\xea' # 0xEA -> LATIN SMALL LETTER E WITH CIRCUMFLEX | |
'\xeb' # 0xEB -> LATIN SMALL LETTER E WITH DIAERESIS | |
'\xec' # 0xEC -> LATIN SMALL LETTER I WITH GRAVE | |
'\xed' # 0xED -> LATIN SMALL LETTER I WITH ACUTE | |
'\xee' # 0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX | |
'\xef' # 0xEF -> LATIN SMALL LETTER I WITH DIAERESIS | |
'\xf0' # 0xF0 -> LATIN SMALL LETTER ETH | |
'\xf1' # 0xF1 -> LATIN SMALL LETTER N WITH TILDE | |
'\xf2' # 0xF2 -> LATIN SMALL LETTER O WITH GRAVE | |
'\xf3' # 0xF3 -> LATIN SMALL LETTER O WITH ACUTE | |
'\xf4' # 0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX | |
'\xf5' # 0xF5 -> LATIN SMALL LETTER O WITH TILDE | |
'\xf6' # 0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS | |
'\xf7' # 0xF7 -> DIVISION SIGN | |
'\xf8' # 0xF8 -> LATIN SMALL LETTER O WITH STROKE | |
'\xf9' # 0xF9 -> LATIN SMALL LETTER U WITH GRAVE | |
'\xfa' # 0xFA -> LATIN SMALL LETTER U WITH ACUTE | |
'\xfb' # 0xFB -> LATIN SMALL LETTER U WITH CIRCUMFLEX | |
'\xfc' # 0xFC -> LATIN SMALL LETTER U WITH DIAERESIS | |
'\xfd' # 0xFD -> LATIN SMALL LETTER Y WITH ACUTE | |
'\xfe' # 0xFE -> LATIN SMALL LETTER THORN | |
'\xff' # 0xFF -> LATIN SMALL LETTER Y WITH DIAERESIS | |
) | |
### Encoding table | |
encoding_table=codecs.charmap_build(decoding_table) |
""" Python Character Mapping Codec cp1253 generated from 'MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1253.TXT' with gencodec.py. | |
"""#" | |
import codecs | |
### Codec APIs | |
class Codec(codecs.Codec): | |
def encode(self,input,errors='strict'): | |
return codecs.charmap_encode(input,errors,encoding_table) | |
def decode(self,input,errors='strict'): | |
return codecs.charmap_decode(input,errors,decoding_table) | |
class IncrementalEncoder(codecs.IncrementalEncoder): | |
def encode(self, input, final=False): | |
return codecs.charmap_encode(input,self.errors,encoding_table)[0] | |
class IncrementalDecoder(codecs.IncrementalDecoder): | |
def decode(self, input, final=False): | |
return codecs.charmap_decode(input,self.errors,decoding_table)[0] | |
class StreamWriter(Codec,codecs.StreamWriter): | |
pass | |
class StreamReader(Codec,codecs.StreamReader): | |
pass | |
### encodings module API | |
def getregentry(): | |
return codecs.CodecInfo( | |
name='cp1253', | |
encode=Codec().encode, | |
decode=Codec().decode, | |
incrementalencoder=IncrementalEncoder, | |
incrementaldecoder=IncrementalDecoder, | |
streamreader=StreamReader, | |
streamwriter=StreamWriter, | |
) | |
### Decoding Table | |
decoding_table = ( | |
'\x00' # 0x00 -> NULL | |
'\x01' # 0x01 -> START OF HEADING | |
'\x02' # 0x02 -> START OF TEXT | |
'\x03' # 0x03 -> END OF TEXT | |
'\x04' # 0x04 -> END OF TRANSMISSION | |
'\x05' # 0x05 -> ENQUIRY | |
'\x06' # 0x06 -> ACKNOWLEDGE | |
'\x07' # 0x07 -> BELL | |
'\x08' # 0x08 -> BACKSPACE | |
'\t' # 0x09 -> HORIZONTAL TABULATION | |
'\n' # 0x0A -> LINE FEED | |
'\x0b' # 0x0B -> VERTICAL TABULATION | |
'\x0c' # 0x0C -> FORM FEED | |
'\r' # 0x0D -> CARRIAGE RETURN | |
'\x0e' # 0x0E -> SHIFT OUT | |
'\x0f' # 0x0F -> SHIFT IN | |
'\x10' # 0x10 -> DATA LINK ESCAPE | |
'\x11' # 0x11 -> DEVICE CONTROL ONE | |
'\x12' # 0x12 -> DEVICE CONTROL TWO | |
'\x13' # 0x13 -> DEVICE CONTROL THREE | |
'\x14' # 0x14 -> DEVICE CONTROL FOUR | |
'\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE | |
'\x16' # 0x16 -> SYNCHRONOUS IDLE | |
'\x17' # 0x17 -> END OF TRANSMISSION BLOCK | |
'\x18' # 0x18 -> CANCEL | |
'\x19' # 0x19 -> END OF MEDIUM | |
'\x1a' # 0x1A -> SUBSTITUTE | |
'\x1b' # 0x1B -> ESCAPE | |
'\x1c' # 0x1C -> FILE SEPARATOR | |
'\x1d' # 0x1D -> GROUP SEPARATOR | |
'\x1e' # 0x1E -> RECORD SEPARATOR | |
'\x1f' # 0x1F -> UNIT SEPARATOR | |
' ' # 0x20 -> SPACE | |
'!' # 0x21 -> EXCLAMATION MARK | |
'"' # 0x22 -> QUOTATION MARK | |
'#' # 0x23 -> NUMBER SIGN | |
'$' # 0x24 -> DOLLAR SIGN | |
'%' # 0x25 -> PERCENT SIGN | |
'&' # 0x26 -> AMPERSAND | |
"'" # 0x27 -> APOSTROPHE | |
'(' # 0x28 -> LEFT PARENTHESIS | |
')' # 0x29 -> RIGHT PARENTHESIS | |
'*' # 0x2A -> ASTERISK | |
'+' # 0x2B -> PLUS SIGN | |
',' # 0x2C -> COMMA | |
'-' # 0x2D -> HYPHEN-MINUS | |
'.' # 0x2E -> FULL STOP | |
'/' # 0x2F -> SOLIDUS | |
'0' # 0x30 -> DIGIT ZERO | |
'1' # 0x31 -> DIGIT ONE | |
'2' # 0x32 -> DIGIT TWO | |
'3' # 0x33 -> DIGIT THREE | |
'4' # 0x34 -> DIGIT FOUR | |
'5' # 0x35 -> DIGIT FIVE | |
'6' # 0x36 -> DIGIT SIX | |
'7' # 0x37 -> DIGIT SEVEN | |
'8' # 0x38 -> DIGIT EIGHT | |
'9' # 0x39 -> DIGIT NINE | |
':' # 0x3A -> COLON | |
';' # 0x3B -> SEMICOLON | |
'<' # 0x3C -> LESS-THAN SIGN | |
'=' # 0x3D -> EQUALS SIGN | |
'>' # 0x3E -> GREATER-THAN SIGN | |
'?' # 0x3F -> QUESTION MARK | |
'@' # 0x40 -> COMMERCIAL AT | |
'A' # 0x41 -> LATIN CAPITAL LETTER A | |
'B' # 0x42 -> LATIN CAPITAL LETTER B | |
'C' # 0x43 -> LATIN CAPITAL LETTER C | |
'D' # 0x44 -> LATIN CAPITAL LETTER D | |
'E' # 0x45 -> LATIN CAPITAL LETTER E | |
'F' # 0x46 -> LATIN CAPITAL LETTER F | |
'G' # 0x47 -> LATIN CAPITAL LETTER G | |
'H' # 0x48 -> LATIN CAPITAL LETTER H | |
'I' # 0x49 -> LATIN CAPITAL LETTER I | |
'J' # 0x4A -> LATIN CAPITAL LETTER J | |
'K' # 0x4B -> LATIN CAPITAL LETTER K | |
'L' # 0x4C -> LATIN CAPITAL LETTER L | |
'M' # 0x4D -> LATIN CAPITAL LETTER M | |
'N' # 0x4E -> LATIN CAPITAL LETTER N | |
'O' # 0x4F -> LATIN CAPITAL LETTER O | |
'P' # 0x50 -> LATIN CAPITAL LETTER P | |
'Q' # 0x51 -> LATIN CAPITAL LETTER Q | |
'R' # 0x52 -> LATIN CAPITAL LETTER R | |
'S' # 0x53 -> LATIN CAPITAL LETTER S | |
'T' # 0x54 -> LATIN CAPITAL LETTER T | |
'U' # 0x55 -> LATIN CAPITAL LETTER U | |
'V' # 0x56 -> LATIN CAPITAL LETTER V | |
'W' # 0x57 -> LATIN CAPITAL LETTER W | |
'X' # 0x58 -> LATIN CAPITAL LETTER X | |
'Y' # 0x59 -> LATIN CAPITAL LETTER Y | |
'Z' # 0x5A -> LATIN CAPITAL LETTER Z | |
'[' # 0x5B -> LEFT SQUARE BRACKET | |
'\\' # 0x5C -> REVERSE SOLIDUS | |
']' # 0x5D -> RIGHT SQUARE BRACKET | |
'^' # 0x5E -> CIRCUMFLEX ACCENT | |
'_' # 0x5F -> LOW LINE | |
'`' # 0x60 -> GRAVE ACCENT | |
'a' # 0x61 -> LATIN SMALL LETTER A | |
'b' # 0x62 -> LATIN SMALL LETTER B | |
'c' # 0x63 -> LATIN SMALL LETTER C | |
'd' # 0x64 -> LATIN SMALL LETTER D | |
'e' # 0x65 -> LATIN SMALL LETTER E | |
'f' # 0x66 -> LATIN SMALL LETTER F | |
'g' # 0x67 -> LATIN SMALL LETTER G | |
'h' # 0x68 -> LATIN SMALL LETTER H | |
'i' # 0x69 -> LATIN SMALL LETTER I | |
'j' # 0x6A -> LATIN SMALL LETTER J | |
'k' # 0x6B -> LATIN SMALL LETTER K | |
'l' # 0x6C -> LATIN SMALL LETTER L | |
'm' # 0x6D -> LATIN SMALL LETTER M | |
'n' # 0x6E -> LATIN SMALL LETTER N | |
'o' # 0x6F -> LATIN SMALL LETTER O | |
'p' # 0x70 -> LATIN SMALL LETTER P | |
'q' # 0x71 -> LATIN SMALL LETTER Q | |
'r' # 0x72 -> LATIN SMALL LETTER R | |
's' # 0x73 -> LATIN SMALL LETTER S | |
't' # 0x74 -> LATIN SMALL LETTER T | |
'u' # 0x75 -> LATIN SMALL LETTER U | |
'v' # 0x76 -> LATIN SMALL LETTER V | |
'w' # 0x77 -> LATIN SMALL LETTER W | |
'x' # 0x78 -> LATIN SMALL LETTER X | |
'y' # 0x79 -> LATIN SMALL LETTER Y | |
'z' # 0x7A -> LATIN SMALL LETTER Z | |
'{' # 0x7B -> LEFT CURLY BRACKET | |
'|' # 0x7C -> VERTICAL LINE | |
'}' # 0x7D -> RIGHT CURLY BRACKET | |
'~' # 0x7E -> TILDE | |
'\x7f' # 0x7F -> DELETE | |
'\u20ac' # 0x80 -> EURO SIGN | |
'\ufffe' # 0x81 -> UNDEFINED | |
'\u201a' # 0x82 -> SINGLE LOW-9 QUOTATION MARK | |
'\u0192' # 0x83 -> LATIN SMALL LETTER F WITH HOOK | |
'\u201e' # 0x84 -> DOUBLE LOW-9 QUOTATION MARK | |
'\u2026' # 0x85 -> HORIZONTAL ELLIPSIS | |
'\u2020' # 0x86 -> DAGGER | |
'\u2021' # 0x87 -> DOUBLE DAGGER | |
'\ufffe' # 0x88 -> UNDEFINED | |
'\u2030' # 0x89 -> PER MILLE SIGN | |
'\ufffe' # 0x8A -> UNDEFINED | |
'\u2039' # 0x8B -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK | |
'\ufffe' # 0x8C -> UNDEFINED | |
'\ufffe' # 0x8D -> UNDEFINED | |
'\ufffe' # 0x8E -> UNDEFINED | |
'\ufffe' # 0x8F -> UNDEFINED | |
'\ufffe' # 0x90 -> UNDEFINED | |
'\u2018' # 0x91 -> LEFT SINGLE QUOTATION MARK | |
'\u2019' # 0x92 -> RIGHT SINGLE QUOTATION MARK | |
'\u201c' # 0x93 -> LEFT DOUBLE QUOTATION MARK | |
'\u201d' # 0x94 -> RIGHT DOUBLE QUOTATION MARK | |
'\u2022' # 0x95 -> BULLET | |
'\u2013' # 0x96 -> EN DASH | |
'\u2014' # 0x97 -> EM DASH | |
'\ufffe' # 0x98 -> UNDEFINED | |
'\u2122' # 0x99 -> TRADE MARK SIGN | |
'\ufffe' # 0x9A -> UNDEFINED | |
'\u203a' # 0x9B -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK | |
'\ufffe' # 0x9C -> UNDEFINED | |
'\ufffe' # 0x9D -> UNDEFINED | |
'\ufffe' # 0x9E -> UNDEFINED | |
'\ufffe' # 0x9F -> UNDEFINED | |
'\xa0' # 0xA0 -> NO-BREAK SPACE | |
'\u0385' # 0xA1 -> GREEK DIALYTIKA TONOS | |
'\u0386' # 0xA2 -> GREEK CAPITAL LETTER ALPHA WITH TONOS | |
'\xa3' # 0xA3 -> POUND SIGN | |
'\xa4' # 0xA4 -> CURRENCY SIGN | |
'\xa5' # 0xA5 -> YEN SIGN | |
'\xa6' # 0xA6 -> BROKEN BAR | |
'\xa7' # 0xA7 -> SECTION SIGN | |
'\xa8' # 0xA8 -> DIAERESIS | |
'\xa9' # 0xA9 -> COPYRIGHT SIGN | |
'\ufffe' # 0xAA -> UNDEFINED | |
'\xab' # 0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK | |
'\xac' # 0xAC -> NOT SIGN | |
'\xad' # 0xAD -> SOFT HYPHEN | |
'\xae' # 0xAE -> REGISTERED SIGN | |
'\u2015' # 0xAF -> HORIZONTAL BAR | |
'\xb0' # 0xB0 -> DEGREE SIGN | |
'\xb1' # 0xB1 -> PLUS-MINUS SIGN | |
'\xb2' # 0xB2 -> SUPERSCRIPT TWO | |
'\xb3' # 0xB3 -> SUPERSCRIPT THREE | |
'\u0384' # 0xB4 -> GREEK TONOS | |
'\xb5' # 0xB5 -> MICRO SIGN | |
'\xb6' # 0xB6 -> PILCROW SIGN | |
'\xb7' # 0xB7 -> MIDDLE DOT | |
'\u0388' # 0xB8 -> GREEK CAPITAL LETTER EPSILON WITH TONOS | |
'\u0389' # 0xB9 -> GREEK CAPITAL LETTER ETA WITH TONOS | |
'\u038a' # 0xBA -> GREEK CAPITAL LETTER IOTA WITH TONOS | |
'\xbb' # 0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK | |
'\u038c' # 0xBC -> GREEK CAPITAL LETTER OMICRON WITH TONOS | |
'\xbd' # 0xBD -> VULGAR FRACTION ONE HALF | |
'\u038e' # 0xBE -> GREEK CAPITAL LETTER UPSILON WITH TONOS | |
'\u038f' # 0xBF -> GREEK CAPITAL LETTER OMEGA WITH TONOS | |
'\u0390' # 0xC0 -> GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS | |
'\u0391' # 0xC1 -> GREEK CAPITAL LETTER ALPHA | |
'\u0392' # 0xC2 -> GREEK CAPITAL LETTER BETA | |
'\u0393' # 0xC3 -> GREEK CAPITAL LETTER GAMMA | |
'\u0394' # 0xC4 -> GREEK CAPITAL LETTER DELTA | |
'\u0395' # 0xC5 -> GREEK CAPITAL LETTER EPSILON | |
'\u0396' # 0xC6 -> GREEK CAPITAL LETTER ZETA | |
'\u0397' # 0xC7 -> GREEK CAPITAL LETTER ETA | |
'\u0398' # 0xC8 -> GREEK CAPITAL LETTER THETA | |
'\u0399' # 0xC9 -> GREEK CAPITAL LETTER IOTA | |
'\u039a' # 0xCA -> GREEK CAPITAL LETTER KAPPA | |
'\u039b' # 0xCB -> GREEK CAPITAL LETTER LAMDA | |
'\u039c' # 0xCC -> GREEK CAPITAL LETTER MU | |
'\u039d' # 0xCD -> GREEK CAPITAL LETTER NU | |
'\u039e' # 0xCE -> GREEK CAPITAL LETTER XI | |
'\u039f' # 0xCF -> GREEK CAPITAL LETTER OMICRON | |
'\u03a0' # 0xD0 -> GREEK CAPITAL LETTER PI | |
'\u03a1' # 0xD1 -> GREEK CAPITAL LETTER RHO | |
'\ufffe' # 0xD2 -> UNDEFINED | |
'\u03a3' # 0xD3 -> GREEK CAPITAL LETTER SIGMA | |
'\u03a4' # 0xD4 -> GREEK CAPITAL LETTER TAU | |
'\u03a5' # 0xD5 -> GREEK CAPITAL LETTER UPSILON | |
'\u03a6' # 0xD6 -> GREEK CAPITAL LETTER PHI | |
'\u03a7' # 0xD7 -> GREEK CAPITAL LETTER CHI | |
'\u03a8' # 0xD8 -> GREEK CAPITAL LETTER PSI | |
'\u03a9' # 0xD9 -> GREEK CAPITAL LETTER OMEGA | |
'\u03aa' # 0xDA -> GREEK CAPITAL LETTER IOTA WITH DIALYTIKA | |
'\u03ab' # 0xDB -> GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA | |
'\u03ac' # 0xDC -> GREEK SMALL LETTER ALPHA WITH TONOS | |
'\u03ad' # 0xDD -> GREEK SMALL LETTER EPSILON WITH TONOS | |
'\u03ae' # 0xDE -> GREEK SMALL LETTER ETA WITH TONOS | |
'\u03af' # 0xDF -> GREEK SMALL LETTER IOTA WITH TONOS | |
'\u03b0' # 0xE0 -> GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS | |
'\u03b1' # 0xE1 -> GREEK SMALL LETTER ALPHA | |
'\u03b2' # 0xE2 -> GREEK SMALL LETTER BETA | |
'\u03b3' # 0xE3 -> GREEK SMALL LETTER GAMMA | |
'\u03b4' # 0xE4 -> GREEK SMALL LETTER DELTA | |
'\u03b5' # 0xE5 -> GREEK SMALL LETTER EPSILON | |
'\u03b6' # 0xE6 -> GREEK SMALL LETTER ZETA | |
'\u03b7' # 0xE7 -> GREEK SMALL LETTER ETA | |
'\u03b8' # 0xE8 -> GREEK SMALL LETTER THETA | |
'\u03b9' # 0xE9 -> GREEK SMALL LETTER IOTA | |
'\u03ba' # 0xEA -> GREEK SMALL LETTER KAPPA | |
'\u03bb' # 0xEB -> GREEK SMALL LETTER LAMDA | |
'\u03bc' # 0xEC -> GREEK SMALL LETTER MU | |
'\u03bd' # 0xED -> GREEK SMALL LETTER NU | |
'\u03be' # 0xEE -> GREEK SMALL LETTER XI | |
'\u03bf' # 0xEF -> GREEK SMALL LETTER OMICRON | |
'\u03c0' # 0xF0 -> GREEK SMALL LETTER PI | |
'\u03c1' # 0xF1 -> GREEK SMALL LETTER RHO | |
'\u03c2' # 0xF2 -> GREEK SMALL LETTER FINAL SIGMA | |
'\u03c3' # 0xF3 -> GREEK SMALL LETTER SIGMA | |
'\u03c4' # 0xF4 -> GREEK SMALL LETTER TAU | |
'\u03c5' # 0xF5 -> GREEK SMALL LETTER UPSILON | |
'\u03c6' # 0xF6 -> GREEK SMALL LETTER PHI | |
'\u03c7' # 0xF7 -> GREEK SMALL LETTER CHI | |
'\u03c8' # 0xF8 -> GREEK SMALL LETTER PSI | |
'\u03c9' # 0xF9 -> GREEK SMALL LETTER OMEGA | |
'\u03ca' # 0xFA -> GREEK SMALL LETTER IOTA WITH DIALYTIKA | |
'\u03cb' # 0xFB -> GREEK SMALL LETTER UPSILON WITH DIALYTIKA | |
'\u03cc' # 0xFC -> GREEK SMALL LETTER OMICRON WITH TONOS | |
'\u03cd' # 0xFD -> GREEK SMALL LETTER UPSILON WITH TONOS | |
'\u03ce' # 0xFE -> GREEK SMALL LETTER OMEGA WITH TONOS | |
'\ufffe' # 0xFF -> UNDEFINED | |
) | |
### Encoding table | |
encoding_table=codecs.charmap_build(decoding_table) |
""" Python Character Mapping Codec cp1254 generated from 'MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1254.TXT' with gencodec.py. | |
"""#" | |
import codecs | |
### Codec APIs | |
class Codec(codecs.Codec): | |
def encode(self,input,errors='strict'): | |
return codecs.charmap_encode(input,errors,encoding_table) | |
def decode(self,input,errors='strict'): | |
return codecs.charmap_decode(input,errors,decoding_table) | |
class IncrementalEncoder(codecs.IncrementalEncoder): | |
def encode(self, input, final=False): | |
return codecs.charmap_encode(input,self.errors,encoding_table)[0] | |
class IncrementalDecoder(codecs.IncrementalDecoder): | |
def decode(self, input, final=False): | |
return codecs.charmap_decode(input,self.errors,decoding_table)[0] | |
class StreamWriter(Codec,codecs.StreamWriter): | |
pass | |
class StreamReader(Codec,codecs.StreamReader): | |
pass | |
### encodings module API | |
def getregentry(): | |
return codecs.CodecInfo( | |
name='cp1254', | |
encode=Codec().encode, | |
decode=Codec().decode, | |
incrementalencoder=IncrementalEncoder, | |
incrementaldecoder=IncrementalDecoder, | |
streamreader=StreamReader, | |
streamwriter=StreamWriter, | |
) | |
### Decoding Table | |
decoding_table = ( | |
'\x00' # 0x00 -> NULL | |
'\x01' # 0x01 -> START OF HEADING | |
'\x02' # 0x02 -> START OF TEXT | |
'\x03' # 0x03 -> END OF TEXT | |
'\x04' # 0x04 -> END OF TRANSMISSION | |
'\x05' # 0x05 -> ENQUIRY | |
'\x06' # 0x06 -> ACKNOWLEDGE | |
'\x07' # 0x07 -> BELL | |
'\x08' # 0x08 -> BACKSPACE | |
'\t' # 0x09 -> HORIZONTAL TABULATION | |
'\n' # 0x0A -> LINE FEED | |
'\x0b' # 0x0B -> VERTICAL TABULATION | |
'\x0c' # 0x0C -> FORM FEED | |
'\r' # 0x0D -> CARRIAGE RETURN | |
'\x0e' # 0x0E -> SHIFT OUT | |
'\x0f' # 0x0F -> SHIFT IN | |
'\x10' # 0x10 -> DATA LINK ESCAPE | |
'\x11' # 0x11 -> DEVICE CONTROL ONE | |
'\x12' # 0x12 -> DEVICE CONTROL TWO | |
'\x13' # 0x13 -> DEVICE CONTROL THREE | |
'\x14' # 0x14 -> DEVICE CONTROL FOUR | |
'\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE | |
'\x16' # 0x16 -> SYNCHRONOUS IDLE | |
'\x17' # 0x17 -> END OF TRANSMISSION BLOCK | |
'\x18' # 0x18 -> CANCEL | |
'\x19' # 0x19 -> END OF MEDIUM | |
'\x1a' # 0x1A -> SUBSTITUTE | |
'\x1b' # 0x1B -> ESCAPE | |
'\x1c' # 0x1C -> FILE SEPARATOR | |
'\x1d' # 0x1D -> GROUP SEPARATOR | |
'\x1e' # 0x1E -> RECORD SEPARATOR | |
'\x1f' # 0x1F -> UNIT SEPARATOR | |
' ' # 0x20 -> SPACE | |
'!' # 0x21 -> EXCLAMATION MARK | |
'"' # 0x22 -> QUOTATION MARK | |
'#' # 0x23 -> NUMBER SIGN | |
'$' # 0x24 -> DOLLAR SIGN | |
'%' # 0x25 -> PERCENT SIGN | |
'&' # 0x26 -> AMPERSAND | |
"'" # 0x27 -> APOSTROPHE | |
'(' # 0x28 -> LEFT PARENTHESIS | |
')' # 0x29 -> RIGHT PARENTHESIS | |
'*' # 0x2A -> ASTERISK | |
'+' # 0x2B -> PLUS SIGN | |
',' # 0x2C -> COMMA | |
'-' # 0x2D -> HYPHEN-MINUS | |
'.' # 0x2E -> FULL STOP | |
'/' # 0x2F -> SOLIDUS | |
'0' # 0x30 -> DIGIT ZERO | |
'1' # 0x31 -> DIGIT ONE | |
'2' # 0x32 -> DIGIT TWO | |
'3' # 0x33 -> DIGIT THREE | |
'4' # 0x34 -> DIGIT FOUR | |
'5' # 0x35 -> DIGIT FIVE | |
'6' # 0x36 -> DIGIT SIX | |
'7' # 0x37 -> DIGIT SEVEN | |
'8' # 0x38 -> DIGIT EIGHT | |
'9' # 0x39 -> DIGIT NINE | |
':' # 0x3A -> COLON | |
';' # 0x3B -> SEMICOLON | |
'<' # 0x3C -> LESS-THAN SIGN | |
'=' # 0x3D -> EQUALS SIGN | |
'>' # 0x3E -> GREATER-THAN SIGN | |
'?' # 0x3F -> QUESTION MARK | |
'@' # 0x40 -> COMMERCIAL AT | |
'A' # 0x41 -> LATIN CAPITAL LETTER A | |
'B' # 0x42 -> LATIN CAPITAL LETTER B | |
'C' # 0x43 -> LATIN CAPITAL LETTER C | |
'D' # 0x44 -> LATIN CAPITAL LETTER D | |
'E' # 0x45 -> LATIN CAPITAL LETTER E | |
'F' # 0x46 -> LATIN CAPITAL LETTER F | |
'G' # 0x47 -> LATIN CAPITAL LETTER G | |
'H' # 0x48 -> LATIN CAPITAL LETTER H | |
'I' # 0x49 -> LATIN CAPITAL LETTER I | |
'J' # 0x4A -> LATIN CAPITAL LETTER J | |
'K' # 0x4B -> LATIN CAPITAL LETTER K | |
'L' # 0x4C -> LATIN CAPITAL LETTER L | |
'M' # 0x4D -> LATIN CAPITAL LETTER M | |
'N' # 0x4E -> LATIN CAPITAL LETTER N | |
'O' # 0x4F -> LATIN CAPITAL LETTER O | |
'P' # 0x50 -> LATIN CAPITAL LETTER P | |
'Q' # 0x51 -> LATIN CAPITAL LETTER Q | |
'R' # 0x52 -> LATIN CAPITAL LETTER R | |
'S' # 0x53 -> LATIN CAPITAL LETTER S | |
'T' # 0x54 -> LATIN CAPITAL LETTER T | |
'U' # 0x55 -> LATIN CAPITAL LETTER U | |
'V' # 0x56 -> LATIN CAPITAL LETTER V | |
'W' # 0x57 -> LATIN CAPITAL LETTER W | |
'X' # 0x58 -> LATIN CAPITAL LETTER X | |
'Y' # 0x59 -> LATIN CAPITAL LETTER Y | |
'Z' # 0x5A -> LATIN CAPITAL LETTER Z | |
'[' # 0x5B -> LEFT SQUARE BRACKET | |
'\\' # 0x5C -> REVERSE SOLIDUS | |
']' # 0x5D -> RIGHT SQUARE BRACKET | |
'^' # 0x5E -> CIRCUMFLEX ACCENT | |
'_' # 0x5F -> LOW LINE | |
'`' # 0x60 -> GRAVE ACCENT | |
'a' # 0x61 -> LATIN SMALL LETTER A | |
'b' # 0x62 -> LATIN SMALL LETTER B | |
'c' # 0x63 -> LATIN SMALL LETTER C | |
'd' # 0x64 -> LATIN SMALL LETTER D | |
'e' # 0x65 -> LATIN SMALL LETTER E | |
'f' # 0x66 -> LATIN SMALL LETTER F | |
'g' # 0x67 -> LATIN SMALL LETTER G | |
'h' # 0x68 -> LATIN SMALL LETTER H | |
'i' # 0x69 -> LATIN SMALL LETTER I | |
'j' # 0x6A -> LATIN SMALL LETTER J | |
'k' # 0x6B -> LATIN SMALL LETTER K | |
'l' # 0x6C -> LATIN SMALL LETTER L | |
'm' # 0x6D -> LATIN SMALL LETTER M | |
'n' # 0x6E -> LATIN SMALL LETTER N | |
'o' # 0x6F -> LATIN SMALL LETTER O | |
'p' # 0x70 -> LATIN SMALL LETTER P | |
'q' # 0x71 -> LATIN SMALL LETTER Q | |
'r' # 0x72 -> LATIN SMALL LETTER R | |
's' # 0x73 -> LATIN SMALL LETTER S | |
't' # 0x74 -> LATIN SMALL LETTER T | |
'u' # 0x75 -> LATIN SMALL LETTER U | |
'v' # 0x76 -> LATIN SMALL LETTER V | |
'w' # 0x77 -> LATIN SMALL LETTER W | |
'x' # 0x78 -> LATIN SMALL LETTER X | |
'y' # 0x79 -> LATIN SMALL LETTER Y | |
'z' # 0x7A -> LATIN SMALL LETTER Z | |
'{' # 0x7B -> LEFT CURLY BRACKET | |
'|' # 0x7C -> VERTICAL LINE | |
'}' # 0x7D -> RIGHT CURLY BRACKET | |
'~' # 0x7E -> TILDE | |
'\x7f' # 0x7F -> DELETE | |
'\u20ac' # 0x80 -> EURO SIGN | |
'\ufffe' # 0x81 -> UNDEFINED | |
'\u201a' # 0x82 -> SINGLE LOW-9 QUOTATION MARK | |
'\u0192' # 0x83 -> LATIN SMALL LETTER F WITH HOOK | |
'\u201e' # 0x84 -> DOUBLE LOW-9 QUOTATION MARK | |
'\u2026' # 0x85 -> HORIZONTAL ELLIPSIS | |
'\u2020' # 0x86 -> DAGGER | |
'\u2021' # 0x87 -> DOUBLE DAGGER | |
'\u02c6' # 0x88 -> MODIFIER LETTER CIRCUMFLEX ACCENT | |
'\u2030' # 0x89 -> PER MILLE SIGN | |
'\u0160' # 0x8A -> LATIN CAPITAL LETTER S WITH CARON | |
'\u2039' # 0x8B -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK | |
'\u0152' # 0x8C -> LATIN CAPITAL LIGATURE OE | |
'\ufffe' # 0x8D -> UNDEFINED | |
'\ufffe' # 0x8E -> UNDEFINED | |
'\ufffe' # 0x8F -> UNDEFINED | |
'\ufffe' # 0x90 -> UNDEFINED | |
'\u2018' # 0x91 -> LEFT SINGLE QUOTATION MARK | |
'\u2019' # 0x92 -> RIGHT SINGLE QUOTATION MARK | |
'\u201c' # 0x93 -> LEFT DOUBLE QUOTATION MARK | |
'\u201d' # 0x94 -> RIGHT DOUBLE QUOTATION MARK | |
'\u2022' # 0x95 -> BULLET | |
'\u2013' # 0x96 -> EN DASH | |
'\u2014' # 0x97 -> EM DASH | |
'\u02dc' # 0x98 -> SMALL TILDE | |
'\u2122' # 0x99 -> TRADE MARK SIGN | |
'\u0161' # 0x9A -> LATIN SMALL LETTER S WITH CARON | |
'\u203a' # 0x9B -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK | |
'\u0153' # 0x9C -> LATIN SMALL LIGATURE OE | |
'\ufffe' # 0x9D -> UNDEFINED | |
'\ufffe' # 0x9E -> UNDEFINED | |
'\u0178' # 0x9F -> LATIN CAPITAL LETTER Y WITH DIAERESIS | |
'\xa0' # 0xA0 -> NO-BREAK SPACE | |
'\xa1' # 0xA1 -> INVERTED EXCLAMATION MARK | |
'\xa2' # 0xA2 -> CENT SIGN | |
'\xa3' # 0xA3 -> POUND SIGN | |
'\xa4' # 0xA4 -> CURRENCY SIGN | |
'\xa5' # 0xA5 -> YEN SIGN | |
'\xa6' # 0xA6 -> BROKEN BAR | |
'\xa7' # 0xA7 -> SECTION SIGN | |
'\xa8' # 0xA8 -> DIAERESIS | |
'\xa9' # 0xA9 -> COPYRIGHT SIGN | |
'\xaa' # 0xAA -> FEMININE ORDINAL INDICATOR | |
'\xab' # 0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK | |
'\xac' # 0xAC -> NOT SIGN | |
'\xad' # 0xAD -> SOFT HYPHEN | |
'\xae' # 0xAE -> REGISTERED SIGN | |
'\xaf' # 0xAF -> MACRON | |
'\xb0' # 0xB0 -> DEGREE SIGN | |
'\xb1' # 0xB1 -> PLUS-MINUS SIGN | |
'\xb2' # 0xB2 -> SUPERSCRIPT TWO | |
'\xb3' # 0xB3 -> SUPERSCRIPT THREE | |
'\xb4' # 0xB4 -> ACUTE ACCENT | |
'\xb5' # 0xB5 -> MICRO SIGN | |
'\xb6' # 0xB6 -> PILCROW SIGN | |
'\xb7' # 0xB7 -> MIDDLE DOT | |
'\xb8' # 0xB8 -> CEDILLA | |
'\xb9' # 0xB9 -> SUPERSCRIPT ONE | |
'\xba' # 0xBA -> MASCULINE ORDINAL INDICATOR | |
'\xbb' # 0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK | |
'\xbc' # 0xBC -> VULGAR FRACTION ONE QUARTER | |
'\xbd' # 0xBD -> VULGAR FRACTION ONE HALF | |
'\xbe' # 0xBE -> VULGAR FRACTION THREE QUARTERS | |
'\xbf' # 0xBF -> INVERTED QUESTION MARK | |
'\xc0' # 0xC0 -> LATIN CAPITAL LETTER A WITH GRAVE | |
'\xc1' # 0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE | |
'\xc2' # 0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX | |
'\xc3' # 0xC3 -> LATIN CAPITAL LETTER A WITH TILDE | |
'\xc4' # 0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS | |
'\xc5' # 0xC5 -> LATIN CAPITAL LETTER A WITH RING ABOVE | |
'\xc6' # 0xC6 -> LATIN CAPITAL LETTER AE | |
'\xc7' # 0xC7 -> LATIN CAPITAL LETTER C WITH CEDILLA | |
'\xc8' # 0xC8 -> LATIN CAPITAL LETTER E WITH GRAVE | |
'\xc9' # 0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE | |
'\xca' # 0xCA -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX | |
'\xcb' # 0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS | |
'\xcc' # 0xCC -> LATIN CAPITAL LETTER I WITH GRAVE | |
'\xcd' # 0xCD -> LATIN CAPITAL LETTER I WITH ACUTE | |
'\xce' # 0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX | |
'\xcf' # 0xCF -> LATIN CAPITAL LETTER I WITH DIAERESIS | |
'\u011e' # 0xD0 -> LATIN CAPITAL LETTER G WITH BREVE | |
'\xd1' # 0xD1 -> LATIN CAPITAL LETTER N WITH TILDE | |
'\xd2' # 0xD2 -> LATIN CAPITAL LETTER O WITH GRAVE | |
'\xd3' # 0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE | |
'\xd4' # 0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX | |
'\xd5' # 0xD5 -> LATIN CAPITAL LETTER O WITH TILDE | |
'\xd6' # 0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS | |
'\xd7' # 0xD7 -> MULTIPLICATION SIGN | |
'\xd8' # 0xD8 -> LATIN CAPITAL LETTER O WITH STROKE | |
'\xd9' # 0xD9 -> LATIN CAPITAL LETTER U WITH GRAVE | |
'\xda' # 0xDA -> LATIN CAPITAL LETTER U WITH ACUTE | |
'\xdb' # 0xDB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX | |
'\xdc' # 0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS | |
'\u0130' # 0xDD -> LATIN CAPITAL LETTER I WITH DOT ABOVE | |
'\u015e' # 0xDE -> LATIN CAPITAL LETTER S WITH CEDILLA | |
'\xdf' # 0xDF -> LATIN SMALL LETTER SHARP S | |
'\xe0' # 0xE0 -> LATIN SMALL LETTER A WITH GRAVE | |
'\xe1' # 0xE1 -> LATIN SMALL LETTER A WITH ACUTE | |
'\xe2' # 0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX | |
'\xe3' # 0xE3 -> LATIN SMALL LETTER A WITH TILDE | |
'\xe4' # 0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS | |
'\xe5' # 0xE5 -> LATIN SMALL LETTER A WITH RING ABOVE | |
'\xe6' # 0xE6 -> LATIN SMALL LETTER AE | |
'\xe7' # 0xE7 -> LATIN SMALL LETTER C WITH CEDILLA | |
'\xe8' # 0xE8 -> LATIN SMALL LETTER E WITH GRAVE | |
'\xe9' # 0xE9 -> LATIN SMALL LETTER E WITH ACUTE | |
'\xea' # 0xEA -> LATIN SMALL LETTER E WITH CIRCUMFLEX | |
'\xeb' # 0xEB -> LATIN SMALL LETTER E WITH DIAERESIS | |
'\xec' # 0xEC -> LATIN SMALL LETTER I WITH GRAVE | |
'\xed' # 0xED -> LATIN SMALL LETTER I WITH ACUTE | |
'\xee' # 0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX | |
'\xef' # 0xEF -> LATIN SMALL LETTER I WITH DIAERESIS | |
'\u011f' # 0xF0 -> LATIN SMALL LETTER G WITH BREVE | |
'\xf1' # 0xF1 -> LATIN SMALL LETTER N WITH TILDE | |
'\xf2' # 0xF2 -> LATIN SMALL LETTER O WITH GRAVE | |
'\xf3' # 0xF3 -> LATIN SMALL LETTER O WITH ACUTE | |
'\xf4' # 0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX | |
'\xf5' # 0xF5 -> LATIN SMALL LETTER O WITH TILDE | |
'\xf6' # 0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS | |
'\xf7' # 0xF7 -> DIVISION SIGN | |
'\xf8' # 0xF8 -> LATIN SMALL LETTER O WITH STROKE | |
'\xf9' # 0xF9 -> LATIN SMALL LETTER U WITH GRAVE | |
'\xfa' # 0xFA -> LATIN SMALL LETTER U WITH ACUTE | |
'\xfb' # 0xFB -> LATIN SMALL LETTER U WITH CIRCUMFLEX | |
'\xfc' # 0xFC -> LATIN SMALL LETTER U WITH DIAERESIS | |
'\u0131' # 0xFD -> LATIN SMALL LETTER DOTLESS I | |
'\u015f' # 0xFE -> LATIN SMALL LETTER S WITH CEDILLA | |
'\xff' # 0xFF -> LATIN SMALL LETTER Y WITH DIAERESIS | |
) | |
### Encoding table | |
encoding_table=codecs.charmap_build(decoding_table) |
""" Python Character Mapping Codec cp1255 generated from 'MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1255.TXT' with gencodec.py. | |
"""#" | |
import codecs | |
### Codec APIs | |
class Codec(codecs.Codec): | |
def encode(self,input,errors='strict'): | |
return codecs.charmap_encode(input,errors,encoding_table) | |
def decode(self,input,errors='strict'): | |
return codecs.charmap_decode(input,errors,decoding_table) | |
class IncrementalEncoder(codecs.IncrementalEncoder): | |
def encode(self, input, final=False): | |
return codecs.charmap_encode(input,self.errors,encoding_table)[0] | |
class IncrementalDecoder(codecs.IncrementalDecoder): | |
def decode(self, input, final=False): | |
return codecs.charmap_decode(input,self.errors,decoding_table)[0] | |
class StreamWriter(Codec,codecs.StreamWriter): | |
pass | |
class StreamReader(Codec,codecs.StreamReader): | |
pass | |
### encodings module API | |
def getregentry(): | |
return codecs.CodecInfo( | |
name='cp1255', | |
encode=Codec().encode, | |
decode=Codec().decode, | |
incrementalencoder=IncrementalEncoder, | |
incrementaldecoder=IncrementalDecoder, | |
streamreader=StreamReader, | |
streamwriter=StreamWriter, | |
) | |
### Decoding Table | |
decoding_table = ( | |
'\x00' # 0x00 -> NULL | |
'\x01' # 0x01 -> START OF HEADING | |
'\x02' # 0x02 -> START OF TEXT | |
'\x03' # 0x03 -> END OF TEXT | |
'\x04' # 0x04 -> END OF TRANSMISSION | |
'\x05' # 0x05 -> ENQUIRY | |
'\x06' # 0x06 -> ACKNOWLEDGE | |
'\x07' # 0x07 -> BELL | |
'\x08' # 0x08 -> BACKSPACE | |
'\t' # 0x09 -> HORIZONTAL TABULATION | |
'\n' # 0x0A -> LINE FEED | |
'\x0b' # 0x0B -> VERTICAL TABULATION | |
'\x0c' # 0x0C -> FORM FEED | |
'\r' # 0x0D -> CARRIAGE RETURN | |
'\x0e' # 0x0E -> SHIFT OUT | |
'\x0f' # 0x0F -> SHIFT IN | |
'\x10' # 0x10 -> DATA LINK ESCAPE | |
'\x11' # 0x11 -> DEVICE CONTROL ONE | |
'\x12' # 0x12 -> DEVICE CONTROL TWO | |
'\x13' # 0x13 -> DEVICE CONTROL THREE | |
'\x14' # 0x14 -> DEVICE CONTROL FOUR | |
'\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE | |
'\x16' # 0x16 -> SYNCHRONOUS IDLE | |
'\x17' # 0x17 -> END OF TRANSMISSION BLOCK | |
'\x18' # 0x18 -> CANCEL | |
'\x19' # 0x19 -> END OF MEDIUM | |
'\x1a' # 0x1A -> SUBSTITUTE | |
'\x1b' # 0x1B -> ESCAPE | |
'\x1c' # 0x1C -> FILE SEPARATOR | |
'\x1d' # 0x1D -> GROUP SEPARATOR | |
'\x1e' # 0x1E -> RECORD SEPARATOR | |
'\x1f' # 0x1F -> UNIT SEPARATOR | |
' ' # 0x20 -> SPACE | |
'!' # 0x21 -> EXCLAMATION MARK | |
'"' # 0x22 -> QUOTATION MARK | |
'#' # 0x23 -> NUMBER SIGN | |
'$' # 0x24 -> DOLLAR SIGN | |
'%' # 0x25 -> PERCENT SIGN | |
'&' # 0x26 -> AMPERSAND | |
"'" # 0x27 -> APOSTROPHE | |
'(' # 0x28 -> LEFT PARENTHESIS | |
')' # 0x29 -> RIGHT PARENTHESIS | |
'*' # 0x2A -> ASTERISK | |
'+' # 0x2B -> PLUS SIGN | |
',' # 0x2C -> COMMA | |
'-' # 0x2D -> HYPHEN-MINUS | |
'.' # 0x2E -> FULL STOP | |
'/' # 0x2F -> SOLIDUS | |
'0' # 0x30 -> DIGIT ZERO | |
'1' # 0x31 -> DIGIT ONE | |
'2' # 0x32 -> DIGIT TWO | |
'3' # 0x33 -> DIGIT THREE | |
'4' # 0x34 -> DIGIT FOUR | |
'5' # 0x35 -> DIGIT FIVE | |
'6' # 0x36 -> DIGIT SIX | |
'7' # 0x37 -> DIGIT SEVEN | |
'8' # 0x38 -> DIGIT EIGHT | |
'9' # 0x39 -> DIGIT NINE | |
':' # 0x3A -> COLON | |
';' # 0x3B -> SEMICOLON | |
'<' # 0x3C -> LESS-THAN SIGN | |
'=' # 0x3D -> EQUALS SIGN | |
'>' # 0x3E -> GREATER-THAN SIGN | |
'?' # 0x3F -> QUESTION MARK | |
'@' # 0x40 -> COMMERCIAL AT | |
'A' # 0x41 -> LATIN CAPITAL LETTER A | |
'B' # 0x42 -> LATIN CAPITAL LETTER B | |
'C' # 0x43 -> LATIN CAPITAL LETTER C | |
'D' # 0x44 -> LATIN CAPITAL LETTER D | |
'E' # 0x45 -> LATIN CAPITAL LETTER E | |
'F' # 0x46 -> LATIN CAPITAL LETTER F | |
'G' # 0x47 -> LATIN CAPITAL LETTER G | |
'H' # 0x48 -> LATIN CAPITAL LETTER H | |
'I' # 0x49 -> LATIN CAPITAL LETTER I | |
'J' # 0x4A -> LATIN CAPITAL LETTER J | |
'K' # 0x4B -> LATIN CAPITAL LETTER K | |
'L' # 0x4C -> LATIN CAPITAL LETTER L | |
'M' # 0x4D -> LATIN CAPITAL LETTER M | |
'N' # 0x4E -> LATIN CAPITAL LETTER N | |
'O' # 0x4F -> LATIN CAPITAL LETTER O | |
'P' # 0x50 -> LATIN CAPITAL LETTER P | |
'Q' # 0x51 -> LATIN CAPITAL LETTER Q | |
'R' # 0x52 -> LATIN CAPITAL LETTER R | |
'S' # 0x53 -> LATIN CAPITAL LETTER S | |
'T' # 0x54 -> LATIN CAPITAL LETTER T | |
'U' # 0x55 -> LATIN CAPITAL LETTER U | |
'V' # 0x56 -> LATIN CAPITAL LETTER V | |
'W' # 0x57 -> LATIN CAPITAL LETTER W | |
'X' # 0x58 -> LATIN CAPITAL LETTER X | |
'Y' # 0x59 -> LATIN CAPITAL LETTER Y | |
'Z' # 0x5A -> LATIN CAPITAL LETTER Z | |
'[' # 0x5B -> LEFT SQUARE BRACKET | |
'\\' # 0x5C -> REVERSE SOLIDUS | |
']' # 0x5D -> RIGHT SQUARE BRACKET | |
'^' # 0x5E -> CIRCUMFLEX ACCENT | |
'_' # 0x5F -> LOW LINE | |
'`' # 0x60 -> GRAVE ACCENT | |
'a' # 0x61 -> LATIN SMALL LETTER A | |
'b' # 0x62 -> LATIN SMALL LETTER B | |
'c' # 0x63 -> LATIN SMALL LETTER C | |
'd' # 0x64 -> LATIN SMALL LETTER D | |
'e' # 0x65 -> LATIN SMALL LETTER E | |
'f' # 0x66 -> LATIN SMALL LETTER F | |
'g' # 0x67 -> LATIN SMALL LETTER G | |
'h' # 0x68 -> LATIN SMALL LETTER H | |
'i' # 0x69 -> LATIN SMALL LETTER I | |
'j' # 0x6A -> LATIN SMALL LETTER J | |
'k' # 0x6B -> LATIN SMALL LETTER K | |
'l' # 0x6C -> LATIN SMALL LETTER L | |
'm' # 0x6D -> LATIN SMALL LETTER M | |
'n' # 0x6E -> LATIN SMALL LETTER N | |
'o' # 0x6F -> LATIN SMALL LETTER O | |
'p' # 0x70 -> LATIN SMALL LETTER P | |
'q' # 0x71 -> LATIN SMALL LETTER Q | |
'r' # 0x72 -> LATIN SMALL LETTER R | |
's' # 0x73 -> LATIN SMALL LETTER S | |
't' # 0x74 -> LATIN SMALL LETTER T | |
'u' # 0x75 -> LATIN SMALL LETTER U | |
'v' # 0x76 -> LATIN SMALL LETTER V | |
'w' # 0x77 -> LATIN SMALL LETTER W | |
'x' # 0x78 -> LATIN SMALL LETTER X | |
'y' # 0x79 -> LATIN SMALL LETTER Y | |
'z' # 0x7A -> LATIN SMALL LETTER Z | |
'{' # 0x7B -> LEFT CURLY BRACKET | |
'|' # 0x7C -> VERTICAL LINE | |
'}' # 0x7D -> RIGHT CURLY BRACKET | |
'~' # 0x7E -> TILDE | |
'\x7f' # 0x7F -> DELETE | |
'\u20ac' # 0x80 -> EURO SIGN | |
'\ufffe' # 0x81 -> UNDEFINED | |
'\u201a' # 0x82 -> SINGLE LOW-9 QUOTATION MARK | |
'\u0192' # 0x83 -> LATIN SMALL LETTER F WITH HOOK | |
'\u201e' # 0x84 -> DOUBLE LOW-9 QUOTATION MARK | |
'\u2026' # 0x85 -> HORIZONTAL ELLIPSIS | |
'\u2020' # 0x86 -> DAGGER | |
'\u2021' # 0x87 -> DOUBLE DAGGER | |
'\u02c6' # 0x88 -> MODIFIER LETTER CIRCUMFLEX ACCENT | |
'\u2030' # 0x89 -> PER MILLE SIGN | |
'\ufffe' # 0x8A -> UNDEFINED | |
'\u2039' # 0x8B -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK | |
'\ufffe' # 0x8C -> UNDEFINED | |
'\ufffe' # 0x8D -> UNDEFINED | |
'\ufffe' # 0x8E -> UNDEFINED | |
'\ufffe' # 0x8F -> UNDEFINED | |
'\ufffe' # 0x90 -> UNDEFINED | |
'\u2018' # 0x91 -> LEFT SINGLE QUOTATION MARK | |
'\u2019' # 0x92 -> RIGHT SINGLE QUOTATION MARK | |
'\u201c' # 0x93 -> LEFT DOUBLE QUOTATION MARK | |
'\u201d' # 0x94 -> RIGHT DOUBLE QUOTATION MARK | |
'\u2022' # 0x95 -> BULLET | |
'\u2013' # 0x96 -> EN DASH | |
'\u2014' # 0x97 -> EM DASH | |
'\u02dc' # 0x98 -> SMALL TILDE | |
'\u2122' # 0x99 -> TRADE MARK SIGN | |
'\ufffe' # 0x9A -> UNDEFINED | |
'\u203a' # 0x9B -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK | |
'\ufffe' # 0x9C -> UNDEFINED | |
'\ufffe' # 0x9D -> UNDEFINED | |
'\ufffe' # 0x9E -> UNDEFINED | |
'\ufffe' # 0x9F -> UNDEFINED | |
'\xa0' # 0xA0 -> NO-BREAK SPACE | |
'\xa1' # 0xA1 -> INVERTED EXCLAMATION MARK | |
'\xa2' # 0xA2 -> CENT SIGN | |
'\xa3' # 0xA3 -> POUND SIGN | |
'\u20aa' # 0xA4 -> NEW SHEQEL SIGN | |
'\xa5' # 0xA5 -> YEN SIGN | |
'\xa6' # 0xA6 -> BROKEN BAR | |
'\xa7' # 0xA7 -> SECTION SIGN | |
'\xa8' # 0xA8 -> DIAERESIS | |
'\xa9' # 0xA9 -> COPYRIGHT SIGN | |
'\xd7' # 0xAA -> MULTIPLICATION SIGN | |
'\xab' # 0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK | |
'\xac' # 0xAC -> NOT SIGN | |
'\xad' # 0xAD -> SOFT HYPHEN | |
'\xae' # 0xAE -> REGISTERED SIGN | |
'\xaf' # 0xAF -> MACRON | |
'\xb0' # 0xB0 -> DEGREE SIGN | |
'\xb1' # 0xB1 -> PLUS-MINUS SIGN | |
'\xb2' # 0xB2 -> SUPERSCRIPT TWO | |
'\xb3' # 0xB3 -> SUPERSCRIPT THREE | |
'\xb4' # 0xB4 -> ACUTE ACCENT | |
'\xb5' # 0xB5 -> MICRO SIGN | |
'\xb6' # 0xB6 -> PILCROW SIGN | |
'\xb7' # 0xB7 -> MIDDLE DOT | |
'\xb8' # 0xB8 -> CEDILLA | |
'\xb9' # 0xB9 -> SUPERSCRIPT ONE | |
'\xf7' # 0xBA -> DIVISION SIGN | |
'\xbb' # 0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK | |
'\xbc' # 0xBC -> VULGAR FRACTION ONE QUARTER | |
'\xbd' # 0xBD -> VULGAR FRACTION ONE HALF | |
'\xbe' # 0xBE -> VULGAR FRACTION THREE QUARTERS | |
'\xbf' # 0xBF -> INVERTED QUESTION MARK | |
'\u05b0' # 0xC0 -> HEBREW POINT SHEVA | |
'\u05b1' # 0xC1 -> HEBREW POINT HATAF SEGOL | |
'\u05b2' # 0xC2 -> HEBREW POINT HATAF PATAH | |
'\u05b3' # 0xC3 -> HEBREW POINT HATAF QAMATS | |
'\u05b4' # 0xC4 -> HEBREW POINT HIRIQ | |
'\u05b5' # 0xC5 -> HEBREW POINT TSERE | |
'\u05b6' # 0xC6 -> HEBREW POINT SEGOL | |
'\u05b7' # 0xC7 -> HEBREW POINT PATAH | |
'\u05b8' # 0xC8 -> HEBREW POINT QAMATS | |
'\u05b9' # 0xC9 -> HEBREW POINT HOLAM | |
'\ufffe' # 0xCA -> UNDEFINED | |
'\u05bb' # 0xCB -> HEBREW POINT QUBUTS | |
'\u05bc' # 0xCC -> HEBREW POINT DAGESH OR MAPIQ | |
'\u05bd' # 0xCD -> HEBREW POINT METEG | |
'\u05be' # 0xCE -> HEBREW PUNCTUATION MAQAF | |
'\u05bf' # 0xCF -> HEBREW POINT RAFE | |
'\u05c0' # 0xD0 -> HEBREW PUNCTUATION PASEQ | |
'\u05c1' # 0xD1 -> HEBREW POINT SHIN DOT | |
'\u05c2' # 0xD2 -> HEBREW POINT SIN DOT | |
'\u05c3' # 0xD3 -> HEBREW PUNCTUATION SOF PASUQ | |
'\u05f0' # 0xD4 -> HEBREW LIGATURE YIDDISH DOUBLE VAV | |
'\u05f1' # 0xD5 -> HEBREW LIGATURE YIDDISH VAV YOD | |
'\u05f2' # 0xD6 -> HEBREW LIGATURE YIDDISH DOUBLE YOD | |
'\u05f3' # 0xD7 -> HEBREW PUNCTUATION GERESH | |
'\u05f4' # 0xD8 -> HEBREW PUNCTUATION GERSHAYIM | |
'\ufffe' # 0xD9 -> UNDEFINED | |
'\ufffe' # 0xDA -> UNDEFINED | |
'\ufffe' # 0xDB -> UNDEFINED | |
'\ufffe' # 0xDC -> UNDEFINED | |
'\ufffe' # 0xDD -> UNDEFINED | |
'\ufffe' # 0xDE -> UNDEFINED | |
'\ufffe' # 0xDF -> UNDEFINED | |
'\u05d0' # 0xE0 -> HEBREW LETTER ALEF | |
'\u05d1' # 0xE1 -> HEBREW LETTER BET | |
'\u05d2' # 0xE2 -> HEBREW LETTER GIMEL | |
'\u05d3' # 0xE3 -> HEBREW LETTER DALET | |
'\u05d4' # 0xE4 -> HEBREW LETTER HE | |
'\u05d5' # 0xE5 -> HEBREW LETTER VAV | |
'\u05d6' # 0xE6 -> HEBREW LETTER ZAYIN | |
'\u05d7' # 0xE7 -> HEBREW LETTER HET | |
'\u05d8' # 0xE8 -> HEBREW LETTER TET | |
'\u05d9' # 0xE9 -> HEBREW LETTER YOD | |
'\u05da' # 0xEA -> HEBREW LETTER FINAL KAF | |
'\u05db' # 0xEB -> HEBREW LETTER KAF | |
'\u05dc' # 0xEC -> HEBREW LETTER LAMED | |
'\u05dd' # 0xED -> HEBREW LETTER FINAL MEM | |
'\u05de' # 0xEE -> HEBREW LETTER MEM | |
'\u05df' # 0xEF -> HEBREW LETTER FINAL NUN | |
'\u05e0' # 0xF0 -> HEBREW LETTER NUN | |
'\u05e1' # 0xF1 -> HEBREW LETTER SAMEKH | |
'\u05e2' # 0xF2 -> HEBREW LETTER AYIN | |
'\u05e3' # 0xF3 -> HEBREW LETTER FINAL PE | |
'\u05e4' # 0xF4 -> HEBREW LETTER PE | |
'\u05e5' # 0xF5 -> HEBREW LETTER FINAL TSADI | |
'\u05e6' # 0xF6 -> HEBREW LETTER TSADI | |
'\u05e7' # 0xF7 -> HEBREW LETTER QOF | |
'\u05e8' # 0xF8 -> HEBREW LETTER RESH | |
'\u05e9' # 0xF9 -> HEBREW LETTER SHIN | |
'\u05ea' # 0xFA -> HEBREW LETTER TAV | |
'\ufffe' # 0xFB -> UNDEFINED | |
'\ufffe' # 0xFC -> UNDEFINED | |
'\u200e' # 0xFD -> LEFT-TO-RIGHT MARK | |
'\u200f' # 0xFE -> RIGHT-TO-LEFT MARK | |
'\ufffe' # 0xFF -> UNDEFINED | |
) | |
### Encoding table | |
encoding_table=codecs.charmap_build(decoding_table) |
""" Python Character Mapping Codec cp1256 generated from 'MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1256.TXT' with gencodec.py. | |
"""#" | |
import codecs | |
### Codec APIs | |
class Codec(codecs.Codec): | |
def encode(self,input,errors='strict'): | |
return codecs.charmap_encode(input,errors,encoding_table) | |
def decode(self,input,errors='strict'): | |
return codecs.charmap_decode(input,errors,decoding_table) | |
class IncrementalEncoder(codecs.IncrementalEncoder): | |
def encode(self, input, final=False): | |
return codecs.charmap_encode(input,self.errors,encoding_table)[0] | |
class IncrementalDecoder(codecs.IncrementalDecoder): | |
def decode(self, input, final=False): | |
return codecs.charmap_decode(input,self.errors,decoding_table)[0] | |
class StreamWriter(Codec,codecs.StreamWriter): | |
pass | |
class StreamReader(Codec,codecs.StreamReader): | |
pass | |
### encodings module API | |
def getregentry(): | |
return codecs.CodecInfo( | |
name='cp1256', | |
encode=Codec().encode, | |
decode=Codec().decode, | |
incrementalencoder=IncrementalEncoder, | |
incrementaldecoder=IncrementalDecoder, | |
streamreader=StreamReader, | |
streamwriter=StreamWriter, | |
) | |
### Decoding Table | |
decoding_table = ( | |
'\x00' # 0x00 -> NULL | |
'\x01' # 0x01 -> START OF HEADING | |
'\x02' # 0x02 -> START OF TEXT | |
'\x03' # 0x03 -> END OF TEXT | |
'\x04' # 0x04 -> END OF TRANSMISSION | |
'\x05' # 0x05 -> ENQUIRY | |
'\x06' # 0x06 -> ACKNOWLEDGE | |
'\x07' # 0x07 -> BELL | |
'\x08' # 0x08 -> BACKSPACE | |
'\t' # 0x09 -> HORIZONTAL TABULATION | |
'\n' # 0x0A -> LINE FEED | |
'\x0b' # 0x0B -> VERTICAL TABULATION | |
'\x0c' # 0x0C -> FORM FEED | |
'\r' # 0x0D -> CARRIAGE RETURN | |
'\x0e' # 0x0E -> SHIFT OUT | |
'\x0f' # 0x0F -> SHIFT IN | |
'\x10' # 0x10 -> DATA LINK ESCAPE | |
'\x11' # 0x11 -> DEVICE CONTROL ONE | |
'\x12' # 0x12 -> DEVICE CONTROL TWO | |
'\x13' # 0x13 -> DEVICE CONTROL THREE | |
'\x14' # 0x14 -> DEVICE CONTROL FOUR | |
'\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE | |
'\x16' # 0x16 -> SYNCHRONOUS IDLE | |
'\x17' # 0x17 -> END OF TRANSMISSION BLOCK | |
'\x18' # 0x18 -> CANCEL | |
'\x19' # 0x19 -> END OF MEDIUM | |
'\x1a' # 0x1A -> SUBSTITUTE | |
'\x1b' # 0x1B -> ESCAPE | |
'\x1c' # 0x1C -> FILE SEPARATOR | |
'\x1d' # 0x1D -> GROUP SEPARATOR | |
'\x1e' # 0x1E -> RECORD SEPARATOR | |
'\x1f' # 0x1F -> UNIT SEPARATOR | |
' ' # 0x20 -> SPACE | |
'!' # 0x21 -> EXCLAMATION MARK | |
'"' # 0x22 -> QUOTATION MARK | |
'#' # 0x23 -> NUMBER SIGN | |
'$' # 0x24 -> DOLLAR SIGN | |
'%' # 0x25 -> PERCENT SIGN | |
'&' # 0x26 -> AMPERSAND | |
"'" # 0x27 -> APOSTROPHE | |
'(' # 0x28 -> LEFT PARENTHESIS | |
')' # 0x29 -> RIGHT PARENTHESIS | |
'*' # 0x2A -> ASTERISK | |
'+' # 0x2B -> PLUS SIGN | |
',' # 0x2C -> COMMA | |
'-' # 0x2D -> HYPHEN-MINUS | |
'.' # 0x2E -> FULL STOP | |
'/' # 0x2F -> SOLIDUS | |
'0' # 0x30 -> DIGIT ZERO | |
'1' # 0x31 -> DIGIT ONE | |
'2' # 0x32 -> DIGIT TWO | |
'3' # 0x33 -> DIGIT THREE | |
'4' # 0x34 -> DIGIT FOUR | |
'5' # 0x35 -> DIGIT FIVE | |
'6' # 0x36 -> DIGIT SIX | |
'7' # 0x37 -> DIGIT SEVEN | |
'8' # 0x38 -> DIGIT EIGHT | |
'9' # 0x39 -> DIGIT NINE | |
':' # 0x3A -> COLON | |
';' # 0x3B -> SEMICOLON | |
'<' # 0x3C -> LESS-THAN SIGN | |
'=' # 0x3D -> EQUALS SIGN | |
'>' # 0x3E -> GREATER-THAN SIGN | |
'?' # 0x3F -> QUESTION MARK | |
'@' # 0x40 -> COMMERCIAL AT | |
'A' # 0x41 -> LATIN CAPITAL LETTER A | |
'B' # 0x42 -> LATIN CAPITAL LETTER B | |
'C' # 0x43 -> LATIN CAPITAL LETTER C | |
'D' # 0x44 -> LATIN CAPITAL LETTER D | |
'E' # 0x45 -> LATIN CAPITAL LETTER E | |
'F' # 0x46 -> LATIN CAPITAL LETTER F | |
'G' # 0x47 -> LATIN CAPITAL LETTER G | |
'H' # 0x48 -> LATIN CAPITAL LETTER H | |
'I' # 0x49 -> LATIN CAPITAL LETTER I | |
'J' # 0x4A -> LATIN CAPITAL LETTER J | |
'K' # 0x4B -> LATIN CAPITAL LETTER K | |
'L' # 0x4C -> LATIN CAPITAL LETTER L | |
'M' # 0x4D -> LATIN CAPITAL LETTER M | |
'N' # 0x4E -> LATIN CAPITAL LETTER N | |
'O' # 0x4F -> LATIN CAPITAL LETTER O | |
'P' # 0x50 -> LATIN CAPITAL LETTER P | |
'Q' # 0x51 -> LATIN CAPITAL LETTER Q | |
'R' # 0x52 -> LATIN CAPITAL LETTER R | |
'S' # 0x53 -> LATIN CAPITAL LETTER S | |
'T' # 0x54 -> LATIN CAPITAL LETTER T | |
'U' # 0x55 -> LATIN CAPITAL LETTER U | |
'V' # 0x56 -> LATIN CAPITAL LETTER V | |
'W' # 0x57 -> LATIN CAPITAL LETTER W | |
'X' # 0x58 -> LATIN CAPITAL LETTER X | |
'Y' # 0x59 -> LATIN CAPITAL LETTER Y | |
'Z' # 0x5A -> LATIN CAPITAL LETTER Z | |
'[' # 0x5B -> LEFT SQUARE BRACKET | |
'\\' # 0x5C -> REVERSE SOLIDUS | |
']' # 0x5D -> RIGHT SQUARE BRACKET | |
'^' # 0x5E -> CIRCUMFLEX ACCENT | |
'_' # 0x5F -> LOW LINE | |
'`' # 0x60 -> GRAVE ACCENT | |
'a' # 0x61 -> LATIN SMALL LETTER A | |
'b' # 0x62 -> LATIN SMALL LETTER B | |
'c' # 0x63 -> LATIN SMALL LETTER C | |
'd' # 0x64 -> LATIN SMALL LETTER D | |
'e' # 0x65 -> LATIN SMALL LETTER E | |
'f' # 0x66 -> LATIN SMALL LETTER F | |
'g' # 0x67 -> LATIN SMALL LETTER G | |
'h' # 0x68 -> LATIN SMALL LETTER H | |
'i' # 0x69 -> LATIN SMALL LETTER I | |
'j' # 0x6A -> LATIN SMALL LETTER J | |
'k' # 0x6B -> LATIN SMALL LETTER K | |
'l' # 0x6C -> LATIN SMALL LETTER L | |
'm' # 0x6D -> LATIN SMALL LETTER M | |
'n' # 0x6E -> LATIN SMALL LETTER N | |
'o' # 0x6F -> LATIN SMALL LETTER O | |
'p' # 0x70 -> LATIN SMALL LETTER P | |
'q' # 0x71 -> LATIN SMALL LETTER Q | |
'r' # 0x72 -> LATIN SMALL LETTER R | |
's' # 0x73 -> LATIN SMALL LETTER S | |
't' # 0x74 -> LATIN SMALL LETTER T | |
'u' # 0x75 -> LATIN SMALL LETTER U | |
'v' # 0x76 -> LATIN SMALL LETTER V | |
'w' # 0x77 -> LATIN SMALL LETTER W | |
'x' # 0x78 -> LATIN SMALL LETTER X | |
'y' # 0x79 -> LATIN SMALL LETTER Y | |
'z' # 0x7A -> LATIN SMALL LETTER Z | |
'{' # 0x7B -> LEFT CURLY BRACKET | |
'|' # 0x7C -> VERTICAL LINE | |
'}' # 0x7D -> RIGHT CURLY BRACKET | |
'~' # 0x7E -> TILDE | |
'\x7f' # 0x7F -> DELETE | |
'\u20ac' # 0x80 -> EURO SIGN | |
'\u067e' # 0x81 -> ARABIC LETTER PEH | |
'\u201a' # 0x82 -> SINGLE LOW-9 QUOTATION MARK | |
'\u0192' # 0x83 -> LATIN SMALL LETTER F WITH HOOK | |
'\u201e' # 0x84 -> DOUBLE LOW-9 QUOTATION MARK | |
'\u2026' # 0x85 -> HORIZONTAL ELLIPSIS | |
'\u2020' # 0x86 -> DAGGER | |
'\u2021' # 0x87 -> DOUBLE DAGGER | |
'\u02c6' # 0x88 -> MODIFIER LETTER CIRCUMFLEX ACCENT | |
'\u2030' # 0x89 -> PER MILLE SIGN | |
'\u0679' # 0x8A -> ARABIC LETTER TTEH | |
'\u2039' # 0x8B -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK | |
'\u0152' # 0x8C -> LATIN CAPITAL LIGATURE OE | |
'\u0686' # 0x8D -> ARABIC LETTER TCHEH | |
'\u0698' # 0x8E -> ARABIC LETTER JEH | |
'\u0688' # 0x8F -> ARABIC LETTER DDAL | |
'\u06af' # 0x90 -> ARABIC LETTER GAF | |
'\u2018' # 0x91 -> LEFT SINGLE QUOTATION MARK | |
'\u2019' # 0x92 -> RIGHT SINGLE QUOTATION MARK | |
'\u201c' # 0x93 -> LEFT DOUBLE QUOTATION MARK | |
'\u201d' # 0x94 -> RIGHT DOUBLE QUOTATION MARK | |
'\u2022' # 0x95 -> BULLET | |
'\u2013' # 0x96 -> EN DASH | |
'\u2014' # 0x97 -> EM DASH | |
'\u06a9' # 0x98 -> ARABIC LETTER KEHEH | |
'\u2122' # 0x99 -> TRADE MARK SIGN | |
'\u0691' # 0x9A -> ARABIC LETTER RREH | |
'\u203a' # 0x9B -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK | |
'\u0153' # 0x9C -> LATIN SMALL LIGATURE OE | |
'\u200c' # 0x9D -> ZERO WIDTH NON-JOINER | |
'\u200d' # 0x9E -> ZERO WIDTH JOINER | |
'\u06ba' # 0x9F -> ARABIC LETTER NOON GHUNNA | |
'\xa0' # 0xA0 -> NO-BREAK SPACE | |
'\u060c' # 0xA1 -> ARABIC COMMA | |
'\xa2' # 0xA2 -> CENT SIGN | |
'\xa3' # 0xA3 -> POUND SIGN | |
'\xa4' # 0xA4 -> CURRENCY SIGN | |
'\xa5' # 0xA5 -> YEN SIGN | |
'\xa6' # 0xA6 -> BROKEN BAR | |
'\xa7' # 0xA7 -> SECTION SIGN | |
'\xa8' # 0xA8 -> DIAERESIS | |
'\xa9' # 0xA9 -> COPYRIGHT SIGN | |
'\u06be' # 0xAA -> ARABIC LETTER HEH DOACHASHMEE | |
'\xab' # 0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK | |
'\xac' # 0xAC -> NOT SIGN | |
'\xad' # 0xAD -> SOFT HYPHEN | |
'\xae' # 0xAE -> REGISTERED SIGN | |
'\xaf' # 0xAF -> MACRON | |
'\xb0' # 0xB0 -> DEGREE SIGN | |
'\xb1' # 0xB1 -> PLUS-MINUS SIGN | |
'\xb2' # 0xB2 -> SUPERSCRIPT TWO | |
'\xb3' # 0xB3 -> SUPERSCRIPT THREE | |
'\xb4' # 0xB4 -> ACUTE ACCENT | |
'\xb5' # 0xB5 -> MICRO SIGN | |
'\xb6' # 0xB6 -> PILCROW SIGN | |
'\xb7' # 0xB7 -> MIDDLE DOT | |
'\xb8' # 0xB8 -> CEDILLA | |
'\xb9' # 0xB9 -> SUPERSCRIPT ONE | |
'\u061b' # 0xBA -> ARABIC SEMICOLON | |
'\xbb' # 0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK | |
'\xbc' # 0xBC -> VULGAR FRACTION ONE QUARTER | |
'\xbd' # 0xBD -> VULGAR FRACTION ONE HALF | |
'\xbe' # 0xBE -> VULGAR FRACTION THREE QUARTERS | |
'\u061f' # 0xBF -> ARABIC QUESTION MARK | |
'\u06c1' # 0xC0 -> ARABIC LETTER HEH GOAL | |
'\u0621' # 0xC1 -> ARABIC LETTER HAMZA | |
'\u0622' # 0xC2 -> ARABIC LETTER ALEF WITH MADDA ABOVE | |
'\u0623' # 0xC3 -> ARABIC LETTER ALEF WITH HAMZA ABOVE | |
'\u0624' # 0xC4 -> ARABIC LETTER WAW WITH HAMZA ABOVE | |
'\u0625' # 0xC5 -> ARABIC LETTER ALEF WITH HAMZA BELOW | |
'\u0626' # 0xC6 -> ARABIC LETTER YEH WITH HAMZA ABOVE | |
'\u0627' # 0xC7 -> ARABIC LETTER ALEF | |
'\u0628' # 0xC8 -> ARABIC LETTER BEH | |
'\u0629' # 0xC9 -> ARABIC LETTER TEH MARBUTA | |
'\u062a' # 0xCA -> ARABIC LETTER TEH | |
'\u062b' # 0xCB -> ARABIC LETTER THEH | |
'\u062c' # 0xCC -> ARABIC LETTER JEEM | |
'\u062d' # 0xCD -> ARABIC LETTER HAH | |
'\u062e' # 0xCE -> ARABIC LETTER KHAH | |
'\u062f' # 0xCF -> ARABIC LETTER DAL | |
'\u0630' # 0xD0 -> ARABIC LETTER THAL | |
'\u0631' # 0xD1 -> ARABIC LETTER REH | |
'\u0632' # 0xD2 -> ARABIC LETTER ZAIN | |
'\u0633' # 0xD3 -> ARABIC LETTER SEEN | |
'\u0634' # 0xD4 -> ARABIC LETTER SHEEN | |
'\u0635' # 0xD5 -> ARABIC LETTER SAD | |
'\u0636' # 0xD6 -> ARABIC LETTER DAD | |
'\xd7' # 0xD7 -> MULTIPLICATION SIGN | |
'\u0637' # 0xD8 -> ARABIC LETTER TAH | |
'\u0638' # 0xD9 -> ARABIC LETTER ZAH | |
'\u0639' # 0xDA -> ARABIC LETTER AIN | |
'\u063a' # 0xDB -> ARABIC LETTER GHAIN | |
'\u0640' # 0xDC -> ARABIC TATWEEL | |
'\u0641' # 0xDD -> ARABIC LETTER FEH | |
'\u0642' # 0xDE -> ARABIC LETTER QAF | |
'\u0643' # 0xDF -> ARABIC LETTER KAF | |
'\xe0' # 0xE0 -> LATIN SMALL LETTER A WITH GRAVE | |
'\u0644' # 0xE1 -> ARABIC LETTER LAM | |
'\xe2' # 0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX | |
'\u0645' # 0xE3 -> ARABIC LETTER MEEM | |
'\u0646' # 0xE4 -> ARABIC LETTER NOON | |
'\u0647' # 0xE5 -> ARABIC LETTER HEH | |
'\u0648' # 0xE6 -> ARABIC LETTER WAW | |
'\xe7' # 0xE7 -> LATIN SMALL LETTER C WITH CEDILLA | |
'\xe8' # 0xE8 -> LATIN SMALL LETTER E WITH GRAVE | |
'\xe9' # 0xE9 -> LATIN SMALL LETTER E WITH ACUTE | |
'\xea' # 0xEA -> LATIN SMALL LETTER E WITH CIRCUMFLEX | |
'\xeb' # 0xEB -> LATIN SMALL LETTER E WITH DIAERESIS | |
'\u0649' # 0xEC -> ARABIC LETTER ALEF MAKSURA | |
'\u064a' # 0xED -> ARABIC LETTER YEH | |
'\xee' # 0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX | |
'\xef' # 0xEF -> LATIN SMALL LETTER I WITH DIAERESIS | |
'\u064b' # 0xF0 -> ARABIC FATHATAN | |
'\u064c' # 0xF1 -> ARABIC DAMMATAN | |
'\u064d' # 0xF2 -> ARABIC KASRATAN | |
'\u064e' # 0xF3 -> ARABIC FATHA | |
'\xf4' # 0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX | |
'\u064f' # 0xF5 -> ARABIC DAMMA | |
'\u0650' # 0xF6 -> ARABIC KASRA | |
'\xf7' # 0xF7 -> DIVISION SIGN | |
'\u0651' # 0xF8 -> ARABIC SHADDA | |
'\xf9' # 0xF9 -> LATIN SMALL LETTER U WITH GRAVE | |
'\u0652' # 0xFA -> ARABIC SUKUN | |
'\xfb' # 0xFB -> LATIN SMALL LETTER U WITH CIRCUMFLEX | |
'\xfc' # 0xFC -> LATIN SMALL LETTER U WITH DIAERESIS | |
'\u200e' # 0xFD -> LEFT-TO-RIGHT MARK | |
'\u200f' # 0xFE -> RIGHT-TO-LEFT MARK | |
'\u06d2' # 0xFF -> ARABIC LETTER YEH BARREE | |
) | |
### Encoding table | |
encoding_table=codecs.charmap_build(decoding_table) |
""" Python Character Mapping Codec cp1257 generated from 'MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1257.TXT' with gencodec.py. | |
"""#" | |
import codecs | |
### Codec APIs | |
class Codec(codecs.Codec): | |
def encode(self,input,errors='strict'): | |
return codecs.charmap_encode(input,errors,encoding_table) | |
def decode(self,input,errors='strict'): | |
return codecs.charmap_decode(input,errors,decoding_table) | |
class IncrementalEncoder(codecs.IncrementalEncoder): | |
def encode(self, input, final=False): | |
return codecs.charmap_encode(input,self.errors,encoding_table)[0] | |
class IncrementalDecoder(codecs.IncrementalDecoder): | |
def decode(self, input, final=False): | |
return codecs.charmap_decode(input,self.errors,decoding_table)[0] | |
class StreamWriter(Codec,codecs.StreamWriter): | |
pass | |
class StreamReader(Codec,codecs.StreamReader): | |
pass | |
### encodings module API | |
def getregentry(): | |
return codecs.CodecInfo( | |
name='cp1257', | |
encode=Codec().encode, | |
decode=Codec().decode, | |
incrementalencoder=IncrementalEncoder, | |
incrementaldecoder=IncrementalDecoder, | |
streamreader=StreamReader, | |
streamwriter=StreamWriter, | |
) | |
### Decoding Table | |
decoding_table = ( | |
'\x00' # 0x00 -> NULL | |
'\x01' # 0x01 -> START OF HEADING | |
'\x02' # 0x02 -> START OF TEXT | |
'\x03' # 0x03 -> END OF TEXT | |
'\x04' # 0x04 -> END OF TRANSMISSION | |
'\x05' # 0x05 -> ENQUIRY | |
'\x06' # 0x06 -> ACKNOWLEDGE | |
'\x07' # 0x07 -> BELL | |
'\x08' # 0x08 -> BACKSPACE | |
'\t' # 0x09 -> HORIZONTAL TABULATION | |
'\n' # 0x0A -> LINE FEED | |
'\x0b' # 0x0B -> VERTICAL TABULATION | |
'\x0c' # 0x0C -> FORM FEED | |
'\r' # 0x0D -> CARRIAGE RETURN | |
'\x0e' # 0x0E -> SHIFT OUT | |
'\x0f' # 0x0F -> SHIFT IN | |
'\x10' # 0x10 -> DATA LINK ESCAPE | |
'\x11' # 0x11 -> DEVICE CONTROL ONE | |
'\x12' # 0x12 -> DEVICE CONTROL TWO | |
'\x13' # 0x13 -> DEVICE CONTROL THREE | |
'\x14' # 0x14 -> DEVICE CONTROL FOUR | |
'\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE | |
'\x16' # 0x16 -> SYNCHRONOUS IDLE | |
'\x17' # 0x17 -> END OF TRANSMISSION BLOCK | |
'\x18' # 0x18 -> CANCEL | |
'\x19' # 0x19 -> END OF MEDIUM | |
'\x1a' # 0x1A -> SUBSTITUTE | |
'\x1b' # 0x1B -> ESCAPE | |
'\x1c' # 0x1C -> FILE SEPARATOR | |
'\x1d' # 0x1D -> GROUP SEPARATOR | |
'\x1e' # 0x1E -> RECORD SEPARATOR | |
'\x1f' # 0x1F -> UNIT SEPARATOR | |
' ' # 0x20 -> SPACE | |
'!' # 0x21 -> EXCLAMATION MARK | |
'"' # 0x22 -> QUOTATION MARK | |
'#' # 0x23 -> NUMBER SIGN | |
'$' # 0x24 -> DOLLAR SIGN | |
'%' # 0x25 -> PERCENT SIGN | |
'&' # 0x26 -> AMPERSAND | |
"'" # 0x27 -> APOSTROPHE | |
'(' # 0x28 -> LEFT PARENTHESIS | |
')' # 0x29 -> RIGHT PARENTHESIS | |
'*' # 0x2A -> ASTERISK | |
'+' # 0x2B -> PLUS SIGN | |
',' # 0x2C -> COMMA | |
'-' # 0x2D -> HYPHEN-MINUS | |
'.' # 0x2E -> FULL STOP | |
'/' # 0x2F -> SOLIDUS | |
'0' # 0x30 -> DIGIT ZERO | |
'1' # 0x31 -> DIGIT ONE | |
'2' # 0x32 -> DIGIT TWO | |
'3' # 0x33 -> DIGIT THREE | |
'4' # 0x34 -> DIGIT FOUR | |
'5' # 0x35 -> DIGIT FIVE | |
'6' # 0x36 -> DIGIT SIX | |
'7' # 0x37 -> DIGIT SEVEN | |
'8' # 0x38 -> DIGIT EIGHT | |
'9' # 0x39 -> DIGIT NINE | |
':' # 0x3A -> COLON | |
';' # 0x3B -> SEMICOLON | |
'<' # 0x3C -> LESS-THAN SIGN | |
'=' # 0x3D -> EQUALS SIGN | |
'>' # 0x3E -> GREATER-THAN SIGN | |
'?' # 0x3F -> QUESTION MARK | |
'@' # 0x40 -> COMMERCIAL AT | |
'A' # 0x41 -> LATIN CAPITAL LETTER A | |
'B' # 0x42 -> LATIN CAPITAL LETTER B | |
'C' # 0x43 -> LATIN CAPITAL LETTER C | |
'D' # 0x44 -> LATIN CAPITAL LETTER D | |
'E' # 0x45 -> LATIN CAPITAL LETTER E | |
'F' # 0x46 -> LATIN CAPITAL LETTER F | |
'G' # 0x47 -> LATIN CAPITAL LETTER G | |
'H' # 0x48 -> LATIN CAPITAL LETTER H | |
'I' # 0x49 -> LATIN CAPITAL LETTER I | |
'J' # 0x4A -> LATIN CAPITAL LETTER J | |
'K' # 0x4B -> LATIN CAPITAL LETTER K | |
'L' # 0x4C -> LATIN CAPITAL LETTER L | |
'M' # 0x4D -> LATIN CAPITAL LETTER M | |
'N' # 0x4E -> LATIN CAPITAL LETTER N | |
'O' # 0x4F -> LATIN CAPITAL LETTER O | |
'P' # 0x50 -> LATIN CAPITAL LETTER P | |
'Q' # 0x51 -> LATIN CAPITAL LETTER Q | |
'R' # 0x52 -> LATIN CAPITAL LETTER R | |
'S' # 0x53 -> LATIN CAPITAL LETTER S | |
'T' # 0x54 -> LATIN CAPITAL LETTER T | |
'U' # 0x55 -> LATIN CAPITAL LETTER U | |
'V' # 0x56 -> LATIN CAPITAL LETTER V | |
'W' # 0x57 -> LATIN CAPITAL LETTER W | |
'X' # 0x58 -> LATIN CAPITAL LETTER X | |
'Y' # 0x59 -> LATIN CAPITAL LETTER Y | |
'Z' # 0x5A -> LATIN CAPITAL LETTER Z | |
'[' # 0x5B -> LEFT SQUARE BRACKET | |
'\\' # 0x5C -> REVERSE SOLIDUS | |
']' # 0x5D -> RIGHT SQUARE BRACKET | |
'^' # 0x5E -> CIRCUMFLEX ACCENT | |
'_' # 0x5F -> LOW LINE | |
'`' # 0x60 -> GRAVE ACCENT | |
'a' # 0x61 -> LATIN SMALL LETTER A | |
'b' # 0x62 -> LATIN SMALL LETTER B | |
'c' # 0x63 -> LATIN SMALL LETTER C | |
'd' # 0x64 -> LATIN SMALL LETTER D | |
'e' # 0x65 -> LATIN SMALL LETTER E | |
'f' # 0x66 -> LATIN SMALL LETTER F | |
'g' # 0x67 -> LATIN SMALL LETTER G | |
'h' # 0x68 -> LATIN SMALL LETTER H | |
'i' # 0x69 -> LATIN SMALL LETTER I | |
'j' # 0x6A -> LATIN SMALL LETTER J | |
'k' # 0x6B -> LATIN SMALL LETTER K | |
'l' # 0x6C -> LATIN SMALL LETTER L | |
'm' # 0x6D -> LATIN SMALL LETTER M | |
'n' # 0x6E -> LATIN SMALL LETTER N | |
'o' # 0x6F -> LATIN SMALL LETTER O | |
'p' # 0x70 -> LATIN SMALL LETTER P | |
'q' # 0x71 -> LATIN SMALL LETTER Q | |
'r' # 0x72 -> LATIN SMALL LETTER R | |
's' # 0x73 -> LATIN SMALL LETTER S | |
't' # 0x74 -> LATIN SMALL LETTER T | |
'u' # 0x75 -> LATIN SMALL LETTER U | |
'v' # 0x76 -> LATIN SMALL LETTER V | |
'w' # 0x77 -> LATIN SMALL LETTER W | |
'x' # 0x78 -> LATIN SMALL LETTER X | |
'y' # 0x79 -> LATIN SMALL LETTER Y | |
'z' # 0x7A -> LATIN SMALL LETTER Z | |
'{' # 0x7B -> LEFT CURLY BRACKET | |
'|' # 0x7C -> VERTICAL LINE | |
'}' # 0x7D -> RIGHT CURLY BRACKET | |
'~' # 0x7E -> TILDE | |
'\x7f' # 0x7F -> DELETE | |
'\u20ac' # 0x80 -> EURO SIGN | |
'\ufffe' # 0x81 -> UNDEFINED | |
'\u201a' # 0x82 -> SINGLE LOW-9 QUOTATION MARK | |
'\ufffe' # 0x83 -> UNDEFINED | |
'\u201e' # 0x84 -> DOUBLE LOW-9 QUOTATION MARK | |
'\u2026' # 0x85 -> HORIZONTAL ELLIPSIS | |
'\u2020' # 0x86 -> DAGGER | |
'\u2021' # 0x87 -> DOUBLE DAGGER | |
'\ufffe' # 0x88 -> UNDEFINED | |
'\u2030' # 0x89 -> PER MILLE SIGN | |
'\ufffe' # 0x8A -> UNDEFINED | |
'\u2039' # 0x8B -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK | |
'\ufffe' # 0x8C -> UNDEFINED | |
'\xa8' # 0x8D -> DIAERESIS | |
'\u02c7' # 0x8E -> CARON | |
'\xb8' # 0x8F -> CEDILLA | |
'\ufffe' # 0x90 -> UNDEFINED | |
'\u2018' # 0x91 -> LEFT SINGLE QUOTATION MARK | |
'\u2019' # 0x92 -> RIGHT SINGLE QUOTATION MARK | |
'\u201c' # 0x93 -> LEFT DOUBLE QUOTATION MARK | |
'\u201d' # 0x94 -> RIGHT DOUBLE QUOTATION MARK | |
'\u2022' # 0x95 -> BULLET | |
'\u2013' # 0x96 -> EN DASH | |
'\u2014' # 0x97 -> EM DASH | |
'\ufffe' # 0x98 -> UNDEFINED | |
'\u2122' # 0x99 -> TRADE MARK SIGN | |
'\ufffe' # 0x9A -> UNDEFINED | |
'\u203a' # 0x9B -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK | |
'\ufffe' # 0x9C -> UNDEFINED | |
'\xaf' # 0x9D -> MACRON | |
'\u02db' # 0x9E -> OGONEK | |
'\ufffe' # 0x9F -> UNDEFINED | |
'\xa0' # 0xA0 -> NO-BREAK SPACE | |
'\ufffe' # 0xA1 -> UNDEFINED | |
'\xa2' # 0xA2 -> CENT SIGN | |
'\xa3' # 0xA3 -> POUND SIGN | |
'\xa4' # 0xA4 -> CURRENCY SIGN | |
'\ufffe' # 0xA5 -> UNDEFINED | |
'\xa6' # 0xA6 -> BROKEN BAR | |
'\xa7' # 0xA7 -> SECTION SIGN | |
'\xd8' # 0xA8 -> LATIN CAPITAL LETTER O WITH STROKE | |
'\xa9' # 0xA9 -> COPYRIGHT SIGN | |
'\u0156' # 0xAA -> LATIN CAPITAL LETTER R WITH CEDILLA | |
'\xab' # 0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK | |
'\xac' # 0xAC -> NOT SIGN | |
'\xad' # 0xAD -> SOFT HYPHEN | |
'\xae' # 0xAE -> REGISTERED SIGN | |
'\xc6' # 0xAF -> LATIN CAPITAL LETTER AE | |
'\xb0' # 0xB0 -> DEGREE SIGN | |
'\xb1' # 0xB1 -> PLUS-MINUS SIGN | |
'\xb2' # 0xB2 -> SUPERSCRIPT TWO | |
'\xb3' # 0xB3 -> SUPERSCRIPT THREE | |
'\xb4' # 0xB4 -> ACUTE ACCENT | |
'\xb5' # 0xB5 -> MICRO SIGN | |
'\xb6' # 0xB6 -> PILCROW SIGN | |
'\xb7' # 0xB7 -> MIDDLE DOT | |
'\xf8' # 0xB8 -> LATIN SMALL LETTER O WITH STROKE | |
'\xb9' # 0xB9 -> SUPERSCRIPT ONE | |
'\u0157' # 0xBA -> LATIN SMALL LETTER R WITH CEDILLA | |
'\xbb' # 0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK | |
'\xbc' # 0xBC -> VULGAR FRACTION ONE QUARTER | |
'\xbd' # 0xBD -> VULGAR FRACTION ONE HALF | |
'\xbe' # 0xBE -> VULGAR FRACTION THREE QUARTERS | |
'\xe6' # 0xBF -> LATIN SMALL LETTER AE | |
'\u0104' # 0xC0 -> LATIN CAPITAL LETTER A WITH OGONEK | |
'\u012e' # 0xC1 -> LATIN CAPITAL LETTER I WITH OGONEK | |
'\u0100' # 0xC2 -> LATIN CAPITAL LETTER A WITH MACRON | |
'\u0106' # 0xC3 -> LATIN CAPITAL LETTER C WITH ACUTE | |
'\xc4' # 0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS | |
'\xc5' # 0xC5 -> LATIN CAPITAL LETTER A WITH RING ABOVE | |
'\u0118' # 0xC6 -> LATIN CAPITAL LETTER E WITH OGONEK | |
'\u0112' # 0xC7 -> LATIN CAPITAL LETTER E WITH MACRON | |
'\u010c' # 0xC8 -> LATIN CAPITAL LETTER C WITH CARON | |
'\xc9' # 0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE | |
'\u0179' # 0xCA -> LATIN CAPITAL LETTER Z WITH ACUTE | |
'\u0116' # 0xCB -> LATIN CAPITAL LETTER E WITH DOT ABOVE | |
'\u0122' # 0xCC -> LATIN CAPITAL LETTER G WITH CEDILLA | |
'\u0136' # 0xCD -> LATIN CAPITAL LETTER K WITH CEDILLA | |
'\u012a' # 0xCE -> LATIN CAPITAL LETTER I WITH MACRON | |
'\u013b' # 0xCF -> LATIN CAPITAL LETTER L WITH CEDILLA | |
'\u0160' # 0xD0 -> LATIN CAPITAL LETTER S WITH CARON | |
'\u0143' # 0xD1 -> LATIN CAPITAL LETTER N WITH ACUTE | |
'\u0145' # 0xD2 -> LATIN CAPITAL LETTER N WITH CEDILLA | |
'\xd3' # 0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE | |
'\u014c' # 0xD4 -> LATIN CAPITAL LETTER O WITH MACRON | |
'\xd5' # 0xD5 -> LATIN CAPITAL LETTER O WITH TILDE | |
'\xd6' # 0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS | |
'\xd7' # 0xD7 -> MULTIPLICATION SIGN | |
'\u0172' # 0xD8 -> LATIN CAPITAL LETTER U WITH OGONEK | |
'\u0141' # 0xD9 -> LATIN CAPITAL LETTER L WITH STROKE | |
'\u015a' # 0xDA -> LATIN CAPITAL LETTER S WITH ACUTE | |
'\u016a' # 0xDB -> LATIN CAPITAL LETTER U WITH MACRON | |
'\xdc' # 0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS | |
'\u017b' # 0xDD -> LATIN CAPITAL LETTER Z WITH DOT ABOVE | |
'\u017d' # 0xDE -> LATIN CAPITAL LETTER Z WITH CARON | |
'\xdf' # 0xDF -> LATIN SMALL LETTER SHARP S | |
'\u0105' # 0xE0 -> LATIN SMALL LETTER A WITH OGONEK | |
'\u012f' # 0xE1 -> LATIN SMALL LETTER I WITH OGONEK | |
'\u0101' # 0xE2 -> LATIN SMALL LETTER A WITH MACRON | |
'\u0107' # 0xE3 -> LATIN SMALL LETTER C WITH ACUTE | |
'\xe4' # 0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS | |
'\xe5' # 0xE5 -> LATIN SMALL LETTER A WITH RING ABOVE | |
'\u0119' # 0xE6 -> LATIN SMALL LETTER E WITH OGONEK | |
'\u0113' # 0xE7 -> LATIN SMALL LETTER E WITH MACRON | |
'\u010d' # 0xE8 -> LATIN SMALL LETTER C WITH CARON | |
'\xe9' # 0xE9 -> LATIN SMALL LETTER E WITH ACUTE | |
'\u017a' # 0xEA -> LATIN SMALL LETTER Z WITH ACUTE | |
'\u0117' # 0xEB -> LATIN SMALL LETTER E WITH DOT ABOVE | |
'\u0123' # 0xEC -> LATIN SMALL LETTER G WITH CEDILLA | |
'\u0137' # 0xED -> LATIN SMALL LETTER K WITH CEDILLA | |
'\u012b' # 0xEE -> LATIN SMALL LETTER I WITH MACRON | |
'\u013c' # 0xEF -> LATIN SMALL LETTER L WITH CEDILLA | |
'\u0161' # 0xF0 -> LATIN SMALL LETTER S WITH CARON | |
'\u0144' # 0xF1 -> LATIN SMALL LETTER N WITH ACUTE | |
'\u0146' # 0xF2 -> LATIN SMALL LETTER N WITH CEDILLA | |
'\xf3' # 0xF3 -> LATIN SMALL LETTER O WITH ACUTE | |
'\u014d' # 0xF4 -> LATIN SMALL LETTER O WITH MACRON | |
'\xf5' # 0xF5 -> LATIN SMALL LETTER O WITH TILDE | |
'\xf6' # 0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS | |
'\xf7' # 0xF7 -> DIVISION SIGN | |
'\u0173' # 0xF8 -> LATIN SMALL LETTER U WITH OGONEK | |
'\u0142' # 0xF9 -> LATIN SMALL LETTER L WITH STROKE | |
'\u015b' # 0xFA -> LATIN SMALL LETTER S WITH ACUTE | |
'\u016b' # 0xFB -> LATIN SMALL LETTER U WITH MACRON | |
'\xfc' # 0xFC -> LATIN SMALL LETTER U WITH DIAERESIS | |
'\u017c' # 0xFD -> LATIN SMALL LETTER Z WITH DOT ABOVE | |
'\u017e' # 0xFE -> LATIN SMALL LETTER Z WITH CARON | |
'\u02d9' # 0xFF -> DOT ABOVE | |
) | |
### Encoding table | |
encoding_table=codecs.charmap_build(decoding_table) |
""" Python Character Mapping Codec cp1258 generated from 'MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1258.TXT' with gencodec.py. | |
"""#" | |
import codecs | |
### Codec APIs | |
class Codec(codecs.Codec): | |
def encode(self,input,errors='strict'): | |
return codecs.charmap_encode(input,errors,encoding_table) | |
def decode(self,input,errors='strict'): | |
return codecs.charmap_decode(input,errors,decoding_table) | |
class IncrementalEncoder(codecs.IncrementalEncoder): | |
def encode(self, input, final=False): | |
return codecs.charmap_encode(input,self.errors,encoding_table)[0] | |
class IncrementalDecoder(codecs.IncrementalDecoder): | |
def decode(self, input, final=False): | |
return codecs.charmap_decode(input,self.errors,decoding_table)[0] | |
class StreamWriter(Codec,codecs.StreamWriter): | |
pass | |
class StreamReader(Codec,codecs.StreamReader): | |
pass | |
### encodings module API | |
def getregentry(): | |
return codecs.CodecInfo( | |
name='cp1258', | |
encode=Codec().encode, | |
decode=Codec().decode, | |
incrementalencoder=IncrementalEncoder, | |
incrementaldecoder=IncrementalDecoder, | |
streamreader=StreamReader, | |
streamwriter=StreamWriter, | |
) | |
### Decoding Table | |
decoding_table = ( | |
'\x00' # 0x00 -> NULL | |
'\x01' # 0x01 -> START OF HEADING | |
'\x02' # 0x02 -> START OF TEXT | |
'\x03' # 0x03 -> END OF TEXT | |
'\x04' # 0x04 -> END OF TRANSMISSION | |
'\x05' # 0x05 -> ENQUIRY | |
'\x06' # 0x06 -> ACKNOWLEDGE | |
'\x07' # 0x07 -> BELL | |
'\x08' # 0x08 -> BACKSPACE | |
'\t' # 0x09 -> HORIZONTAL TABULATION | |
'\n' # 0x0A -> LINE FEED | |
'\x0b' # 0x0B -> VERTICAL TABULATION | |
'\x0c' # 0x0C -> FORM FEED | |
'\r' # 0x0D -> CARRIAGE RETURN | |
'\x0e' # 0x0E -> SHIFT OUT | |
'\x0f' # 0x0F -> SHIFT IN | |
'\x10' # 0x10 -> DATA LINK ESCAPE | |
'\x11' # 0x11 -> DEVICE CONTROL ONE | |
'\x12' # 0x12 -> DEVICE CONTROL TWO | |
'\x13' # 0x13 -> DEVICE CONTROL THREE | |
'\x14' # 0x14 -> DEVICE CONTROL FOUR | |
'\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE | |
'\x16' # 0x16 -> SYNCHRONOUS IDLE | |
'\x17' # 0x17 -> END OF TRANSMISSION BLOCK | |
'\x18' # 0x18 -> CANCEL | |
'\x19' # 0x19 -> END OF MEDIUM | |
'\x1a' # 0x1A -> SUBSTITUTE | |
'\x1b' # 0x1B -> ESCAPE | |
'\x1c' # 0x1C -> FILE SEPARATOR | |
'\x1d' # 0x1D -> GROUP SEPARATOR | |
'\x1e' # 0x1E -> RECORD SEPARATOR | |
'\x1f' # 0x1F -> UNIT SEPARATOR | |
' ' # 0x20 -> SPACE | |
'!' # 0x21 -> EXCLAMATION MARK | |
'"' # 0x22 -> QUOTATION MARK | |
'#' # 0x23 -> NUMBER SIGN | |
'$' # 0x24 -> DOLLAR SIGN | |
'%' # 0x25 -> PERCENT SIGN | |
'&' # 0x26 -> AMPERSAND | |
"'" # 0x27 -> APOSTROPHE | |
'(' # 0x28 -> LEFT PARENTHESIS | |
')' # 0x29 -> RIGHT PARENTHESIS | |
'*' # 0x2A -> ASTERISK | |
'+' # 0x2B -> PLUS SIGN | |
',' # 0x2C -> COMMA | |
'-' # 0x2D -> HYPHEN-MINUS | |
'.' # 0x2E -> FULL STOP | |
'/' # 0x2F -> SOLIDUS | |
'0' # 0x30 -> DIGIT ZERO | |
'1' # 0x31 -> DIGIT ONE | |
'2' # 0x32 -> DIGIT TWO | |
'3' # 0x33 -> DIGIT THREE | |
'4' # 0x34 -> DIGIT FOUR | |
'5' # 0x35 -> DIGIT FIVE | |
'6' # 0x36 -> DIGIT SIX | |
'7' # 0x37 -> DIGIT SEVEN | |
'8' # 0x38 -> DIGIT EIGHT | |
'9' # 0x39 -> DIGIT NINE | |
':' # 0x3A -> COLON | |
';' # 0x3B -> SEMICOLON | |
'<' # 0x3C -> LESS-THAN SIGN | |
'=' # 0x3D -> EQUALS SIGN | |
'>' # 0x3E -> GREATER-THAN SIGN | |
'?' # 0x3F -> QUESTION MARK | |
'@' # 0x40 -> COMMERCIAL AT | |
'A' # 0x41 -> LATIN CAPITAL LETTER A | |
'B' # 0x42 -> LATIN CAPITAL LETTER B | |
'C' # 0x43 -> LATIN CAPITAL LETTER C | |
'D' # 0x44 -> LATIN CAPITAL LETTER D | |
'E' # 0x45 -> LATIN CAPITAL LETTER E | |
'F' # 0x46 -> LATIN CAPITAL LETTER F | |
'G' # 0x47 -> LATIN CAPITAL LETTER G | |
'H' # 0x48 -> LATIN CAPITAL LETTER H | |
'I' # 0x49 -> LATIN CAPITAL LETTER I | |
'J' # 0x4A -> LATIN CAPITAL LETTER J | |
'K' # 0x4B -> LATIN CAPITAL LETTER K | |
'L' # 0x4C -> LATIN CAPITAL LETTER L | |
'M' # 0x4D -> LATIN CAPITAL LETTER M | |
'N' # 0x4E -> LATIN CAPITAL LETTER N | |
'O' # 0x4F -> LATIN CAPITAL LETTER O | |
'P' # 0x50 -> LATIN CAPITAL LETTER P | |
'Q' # 0x51 -> LATIN CAPITAL LETTER Q | |
'R' # 0x52 -> LATIN CAPITAL LETTER R | |
'S' # 0x53 -> LATIN CAPITAL LETTER S | |
'T' # 0x54 -> LATIN CAPITAL LETTER T | |
'U' # 0x55 -> LATIN CAPITAL LETTER U | |
'V' # 0x56 -> LATIN CAPITAL LETTER V | |
'W' # 0x57 -> LATIN CAPITAL LETTER W | |
'X' # 0x58 -> LATIN CAPITAL LETTER X | |
'Y' # 0x59 -> LATIN CAPITAL LETTER Y | |
'Z' # 0x5A -> LATIN CAPITAL LETTER Z | |
'[' # 0x5B -> LEFT SQUARE BRACKET | |
'\\' # 0x5C -> REVERSE SOLIDUS | |
']' # 0x5D -> RIGHT SQUARE BRACKET | |
'^' # 0x5E -> CIRCUMFLEX ACCENT | |
'_' # 0x5F -> LOW LINE | |
'`' # 0x60 -> GRAVE ACCENT | |
'a' # 0x61 -> LATIN SMALL LETTER A | |
'b' # 0x62 -> LATIN SMALL LETTER B | |
'c' # 0x63 -> LATIN SMALL LETTER C | |
'd' # 0x64 -> LATIN SMALL LETTER D | |
'e' # 0x65 -> LATIN SMALL LETTER E | |
'f' # 0x66 -> LATIN SMALL LETTER F | |
'g' # 0x67 -> LATIN SMALL LETTER G | |
'h' # 0x68 -> LATIN SMALL LETTER H | |
'i' # 0x69 -> LATIN SMALL LETTER I | |
'j' # 0x6A -> LATIN SMALL LETTER J | |
'k' # 0x6B -> LATIN SMALL LETTER K | |
'l' # 0x6C -> LATIN SMALL LETTER L | |
'm' # 0x6D -> LATIN SMALL LETTER M | |
'n' # 0x6E -> LATIN SMALL LETTER N | |
'o' # 0x6F -> LATIN SMALL LETTER O | |
'p' # 0x70 -> LATIN SMALL LETTER P | |
'q' # 0x71 -> LATIN SMALL LETTER Q | |
'r' # 0x72 -> LATIN SMALL LETTER R | |
's' # 0x73 -> LATIN SMALL LETTER S | |
't' # 0x74 -> LATIN SMALL LETTER T | |
'u' # 0x75 -> LATIN SMALL LETTER U | |
'v' # 0x76 -> LATIN SMALL LETTER V | |
'w' # 0x77 -> LATIN SMALL LETTER W | |
'x' # 0x78 -> LATIN SMALL LETTER X | |
'y' # 0x79 -> LATIN SMALL LETTER Y | |
'z' # 0x7A -> LATIN SMALL LETTER Z | |
'{' # 0x7B -> LEFT CURLY BRACKET | |
'|' # 0x7C -> VERTICAL LINE | |
'}' # 0x7D -> RIGHT CURLY BRACKET | |
'~' # 0x7E -> TILDE | |
'\x7f' # 0x7F -> DELETE | |
'\u20ac' # 0x80 -> EURO SIGN | |
'\ufffe' # 0x81 -> UNDEFINED | |
'\u201a' # 0x82 -> SINGLE LOW-9 QUOTATION MARK | |
'\u0192' # 0x83 -> LATIN SMALL LETTER F WITH HOOK | |
'\u201e' # 0x84 -> DOUBLE LOW-9 QUOTATION MARK | |
'\u2026' # 0x85 -> HORIZONTAL ELLIPSIS | |
'\u2020' # 0x86 -> DAGGER | |
'\u2021' # 0x87 -> DOUBLE DAGGER | |
'\u02c6' # 0x88 -> MODIFIER LETTER CIRCUMFLEX ACCENT | |
'\u2030' # 0x89 -> PER MILLE SIGN | |
'\ufffe' # 0x8A -> UNDEFINED | |
'\u2039' # 0x8B -> SINGLE LEFT-POINTING ANGLE QUOTATION MARK | |
'\u0152' # 0x8C -> LATIN CAPITAL LIGATURE OE | |
'\ufffe' # 0x8D -> UNDEFINED | |
'\ufffe' # 0x8E -> UNDEFINED | |
'\ufffe' # 0x8F -> UNDEFINED | |
'\ufffe' # 0x90 -> UNDEFINED | |
'\u2018' # 0x91 -> LEFT SINGLE QUOTATION MARK | |
'\u2019' # 0x92 -> RIGHT SINGLE QUOTATION MARK | |
'\u201c' # 0x93 -> LEFT DOUBLE QUOTATION MARK | |
'\u201d' # 0x94 -> RIGHT DOUBLE QUOTATION MARK | |
'\u2022' # 0x95 -> BULLET | |
'\u2013' # 0x96 -> EN DASH | |
'\u2014' # 0x97 -> EM DASH | |
'\u02dc' # 0x98 -> SMALL TILDE | |
'\u2122' # 0x99 -> TRADE MARK SIGN | |
'\ufffe' # 0x9A -> UNDEFINED | |
'\u203a' # 0x9B -> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK | |
'\u0153' # 0x9C -> LATIN SMALL LIGATURE OE | |
'\ufffe' # 0x9D -> UNDEFINED | |
'\ufffe' # 0x9E -> UNDEFINED | |
'\u0178' # 0x9F -> LATIN CAPITAL LETTER Y WITH DIAERESIS | |
'\xa0' # 0xA0 -> NO-BREAK SPACE | |
'\xa1' # 0xA1 -> INVERTED EXCLAMATION MARK | |
'\xa2' # 0xA2 -> CENT SIGN | |
'\xa3' # 0xA3 -> POUND SIGN | |
'\xa4' # 0xA4 -> CURRENCY SIGN | |
'\xa5' # 0xA5 -> YEN SIGN | |
'\xa6' # 0xA6 -> BROKEN BAR | |
'\xa7' # 0xA7 -> SECTION SIGN | |
'\xa8' # 0xA8 -> DIAERESIS | |
'\xa9' # 0xA9 -> COPYRIGHT SIGN | |
'\xaa' # 0xAA -> FEMININE ORDINAL INDICATOR | |
'\xab' # 0xAB -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK | |
'\xac' # 0xAC -> NOT SIGN | |
'\xad' # 0xAD -> SOFT HYPHEN | |
'\xae' # 0xAE -> REGISTERED SIGN | |
'\xaf' # 0xAF -> MACRON | |
'\xb0' # 0xB0 -> DEGREE SIGN | |
'\xb1' # 0xB1 -> PLUS-MINUS SIGN | |
'\xb2' # 0xB2 -> SUPERSCRIPT TWO | |
'\xb3' # 0xB3 -> SUPERSCRIPT THREE | |
'\xb4' # 0xB4 -> ACUTE ACCENT | |
'\xb5' # 0xB5 -> MICRO SIGN | |
'\xb6' # 0xB6 -> PILCROW SIGN | |
'\xb7' # 0xB7 -> MIDDLE DOT | |
'\xb8' # 0xB8 -> CEDILLA | |
'\xb9' # 0xB9 -> SUPERSCRIPT ONE | |
'\xba' # 0xBA -> MASCULINE ORDINAL INDICATOR | |
'\xbb' # 0xBB -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK | |
'\xbc' # 0xBC -> VULGAR FRACTION ONE QUARTER | |
'\xbd' # 0xBD -> VULGAR FRACTION ONE HALF | |
'\xbe' # 0xBE -> VULGAR FRACTION THREE QUARTERS | |
'\xbf' # 0xBF -> INVERTED QUESTION MARK | |
'\xc0' # 0xC0 -> LATIN CAPITAL LETTER A WITH GRAVE | |
'\xc1' # 0xC1 -> LATIN CAPITAL LETTER A WITH ACUTE | |
'\xc2' # 0xC2 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX | |
'\u0102' # 0xC3 -> LATIN CAPITAL LETTER A WITH BREVE | |
'\xc4' # 0xC4 -> LATIN CAPITAL LETTER A WITH DIAERESIS | |
'\xc5' # 0xC5 -> LATIN CAPITAL LETTER A WITH RING ABOVE | |
'\xc6' # 0xC6 -> LATIN CAPITAL LETTER AE | |
'\xc7' # 0xC7 -> LATIN CAPITAL LETTER C WITH CEDILLA | |
'\xc8' # 0xC8 -> LATIN CAPITAL LETTER E WITH GRAVE | |
'\xc9' # 0xC9 -> LATIN CAPITAL LETTER E WITH ACUTE | |
'\xca' # 0xCA -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX | |
'\xcb' # 0xCB -> LATIN CAPITAL LETTER E WITH DIAERESIS | |
'\u0300' # 0xCC -> COMBINING GRAVE ACCENT | |
'\xcd' # 0xCD -> LATIN CAPITAL LETTER I WITH ACUTE | |
'\xce' # 0xCE -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX | |
'\xcf' # 0xCF -> LATIN CAPITAL LETTER I WITH DIAERESIS | |
'\u0110' # 0xD0 -> LATIN CAPITAL LETTER D WITH STROKE | |
'\xd1' # 0xD1 -> LATIN CAPITAL LETTER N WITH TILDE | |
'\u0309' # 0xD2 -> COMBINING HOOK ABOVE | |
'\xd3' # 0xD3 -> LATIN CAPITAL LETTER O WITH ACUTE | |
'\xd4' # 0xD4 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX | |
'\u01a0' # 0xD5 -> LATIN CAPITAL LETTER O WITH HORN | |
'\xd6' # 0xD6 -> LATIN CAPITAL LETTER O WITH DIAERESIS | |
'\xd7' # 0xD7 -> MULTIPLICATION SIGN | |
'\xd8' # 0xD8 -> LATIN CAPITAL LETTER O WITH STROKE | |
'\xd9' # 0xD9 -> LATIN CAPITAL LETTER U WITH GRAVE | |
'\xda' # 0xDA -> LATIN CAPITAL LETTER U WITH ACUTE | |
'\xdb' # 0xDB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX | |
'\xdc' # 0xDC -> LATIN CAPITAL LETTER U WITH DIAERESIS | |
'\u01af' # 0xDD -> LATIN CAPITAL LETTER U WITH HORN | |
'\u0303' # 0xDE -> COMBINING TILDE | |
'\xdf' # 0xDF -> LATIN SMALL LETTER SHARP S | |
'\xe0' # 0xE0 -> LATIN SMALL LETTER A WITH GRAVE | |
'\xe1' # 0xE1 -> LATIN SMALL LETTER A WITH ACUTE | |
'\xe2' # 0xE2 -> LATIN SMALL LETTER A WITH CIRCUMFLEX | |
'\u0103' # 0xE3 -> LATIN SMALL LETTER A WITH BREVE | |
'\xe4' # 0xE4 -> LATIN SMALL LETTER A WITH DIAERESIS | |
'\xe5' # 0xE5 -> LATIN SMALL LETTER A WITH RING ABOVE | |
'\xe6' # 0xE6 -> LATIN SMALL LETTER AE | |
'\xe7' # 0xE7 -> LATIN SMALL LETTER C WITH CEDILLA | |
'\xe8' # 0xE8 -> LATIN SMALL LETTER E WITH GRAVE | |
'\xe9' # 0xE9 -> LATIN SMALL LETTER E WITH ACUTE | |
'\xea' # 0xEA -> LATIN SMALL LETTER E WITH CIRCUMFLEX | |
'\xeb' # 0xEB -> LATIN SMALL LETTER E WITH DIAERESIS | |
'\u0301' # 0xEC -> COMBINING ACUTE ACCENT | |
'\xed' # 0xED -> LATIN SMALL LETTER I WITH ACUTE | |
'\xee' # 0xEE -> LATIN SMALL LETTER I WITH CIRCUMFLEX | |
'\xef' # 0xEF -> LATIN SMALL LETTER I WITH DIAERESIS | |
'\u0111' # 0xF0 -> LATIN SMALL LETTER D WITH STROKE | |
'\xf1' # 0xF1 -> LATIN SMALL LETTER N WITH TILDE | |
'\u0323' # 0xF2 -> COMBINING DOT BELOW | |
'\xf3' # 0xF3 -> LATIN SMALL LETTER O WITH ACUTE | |
'\xf4' # 0xF4 -> LATIN SMALL LETTER O WITH CIRCUMFLEX | |
'\u01a1' # 0xF5 -> LATIN SMALL LETTER O WITH HORN | |
'\xf6' # 0xF6 -> LATIN SMALL LETTER O WITH DIAERESIS | |
'\xf7' # 0xF7 -> DIVISION SIGN | |
'\xf8' # 0xF8 -> LATIN SMALL LETTER O WITH STROKE | |
'\xf9' # 0xF9 -> LATIN SMALL LETTER U WITH GRAVE | |
'\xfa' # 0xFA -> LATIN SMALL LETTER U WITH ACUTE | |
'\xfb' # 0xFB -> LATIN SMALL LETTER U WITH CIRCUMFLEX | |
'\xfc' # 0xFC -> LATIN SMALL LETTER U WITH DIAERESIS | |
'\u01b0' # 0xFD -> LATIN SMALL LETTER U WITH HORN | |
'\u20ab' # 0xFE -> DONG SIGN | |
'\xff' # 0xFF -> LATIN SMALL LETTER Y WITH DIAERESIS | |
) | |
### Encoding table | |
encoding_table=codecs.charmap_build(decoding_table) |
""" Python Character Mapping Codec cp273 generated from 'python-mappings/CP273.TXT' with gencodec.py. | |
"""#" | |
import codecs | |
### Codec APIs | |
class Codec(codecs.Codec): | |
def encode(self,input,errors='strict'): | |
return codecs.charmap_encode(input,errors,encoding_table) | |
def decode(self,input,errors='strict'): | |
return codecs.charmap_decode(input,errors,decoding_table) | |
class IncrementalEncoder(codecs.IncrementalEncoder): | |
def encode(self, input, final=False): | |
return codecs.charmap_encode(input,self.errors,encoding_table)[0] | |
class IncrementalDecoder(codecs.IncrementalDecoder): | |
def decode(self, input, final=False): | |
return codecs.charmap_decode(input,self.errors,decoding_table)[0] | |
class StreamWriter(Codec,codecs.StreamWriter): | |
pass | |
class StreamReader(Codec,codecs.StreamReader): | |
pass | |
### encodings module API | |
def getregentry(): | |
return codecs.CodecInfo( | |
name='cp273', | |
encode=Codec().encode, | |
decode=Codec().decode, | |
incrementalencoder=IncrementalEncoder, | |
incrementaldecoder=IncrementalDecoder, | |
streamreader=StreamReader, | |
streamwriter=StreamWriter, | |
) | |
### Decoding Table | |
decoding_table = ( | |
'\x00' # 0x00 -> NULL (NUL) | |
'\x01' # 0x01 -> START OF HEADING (SOH) | |
'\x02' # 0x02 -> START OF TEXT (STX) | |
'\x03' # 0x03 -> END OF TEXT (ETX) | |
'\x9c' # 0x04 -> STRING TERMINATOR (ST) | |
'\t' # 0x05 -> CHARACTER TABULATION (HT) | |
'\x86' # 0x06 -> START OF SELECTED AREA (SSA) | |
'\x7f' # 0x07 -> DELETE (DEL) | |
'\x97' # 0x08 -> END OF GUARDED AREA (EPA) | |
'\x8d' # 0x09 -> REVERSE LINE FEED (RI) | |
'\x8e' # 0x0A -> SINGLE-SHIFT TWO (SS2) | |
'\x0b' # 0x0B -> LINE TABULATION (VT) | |
'\x0c' # 0x0C -> FORM FEED (FF) | |
'\r' # 0x0D -> CARRIAGE RETURN (CR) | |
'\x0e' # 0x0E -> SHIFT OUT (SO) | |
'\x0f' # 0x0F -> SHIFT IN (SI) | |
'\x10' # 0x10 -> DATALINK ESCAPE (DLE) | |
'\x11' # 0x11 -> DEVICE CONTROL ONE (DC1) | |
'\x12' # 0x12 -> DEVICE CONTROL TWO (DC2) | |
'\x13' # 0x13 -> DEVICE CONTROL THREE (DC3) | |
'\x9d' # 0x14 -> OPERATING SYSTEM COMMAND (OSC) | |
'\x85' # 0x15 -> NEXT LINE (NEL) | |
'\x08' # 0x16 -> BACKSPACE (BS) | |
'\x87' # 0x17 -> END OF SELECTED AREA (ESA) | |
'\x18' # 0x18 -> CANCEL (CAN) | |
'\x19' # 0x19 -> END OF MEDIUM (EM) | |
'\x92' # 0x1A -> PRIVATE USE TWO (PU2) | |
'\x8f' # 0x1B -> SINGLE-SHIFT THREE (SS3) | |
'\x1c' # 0x1C -> FILE SEPARATOR (IS4) | |
'\x1d' # 0x1D -> GROUP SEPARATOR (IS3) | |
'\x1e' # 0x1E -> RECORD SEPARATOR (IS2) | |
'\x1f' # 0x1F -> UNIT SEPARATOR (IS1) | |
'\x80' # 0x20 -> PADDING CHARACTER (PAD) | |
'\x81' # 0x21 -> HIGH OCTET PRESET (HOP) | |
'\x82' # 0x22 -> BREAK PERMITTED HERE (BPH) | |
'\x83' # 0x23 -> NO BREAK HERE (NBH) | |
'\x84' # 0x24 -> INDEX (IND) | |
'\n' # 0x25 -> LINE FEED (LF) | |
'\x17' # 0x26 -> END OF TRANSMISSION BLOCK (ETB) | |
'\x1b' # 0x27 -> ESCAPE (ESC) | |
'\x88' # 0x28 -> CHARACTER TABULATION SET (HTS) | |
'\x89' # 0x29 -> CHARACTER TABULATION WITH JUSTIFICATION (HTJ) | |
'\x8a' # 0x2A -> LINE TABULATION SET (VTS) | |
'\x8b' # 0x2B -> PARTIAL LINE FORWARD (PLD) | |
'\x8c' # 0x2C -> PARTIAL LINE BACKWARD (PLU) | |
'\x05' # 0x2D -> ENQUIRY (ENQ) | |
'\x06' # 0x2E -> ACKNOWLEDGE (ACK) | |
'\x07' # 0x2F -> BELL (BEL) | |
'\x90' # 0x30 -> DEVICE CONTROL STRING (DCS) | |
'\x91' # 0x31 -> PRIVATE USE ONE (PU1) | |
'\x16' # 0x32 -> SYNCHRONOUS IDLE (SYN) | |
'\x93' # 0x33 -> SET TRANSMIT STATE (STS) | |
'\x94' # 0x34 -> CANCEL CHARACTER (CCH) | |
'\x95' # 0x35 -> MESSAGE WAITING (MW) | |
'\x96' # 0x36 -> START OF GUARDED AREA (SPA) | |
'\x04' # 0x37 -> END OF TRANSMISSION (EOT) | |
'\x98' # 0x38 -> START OF STRING (SOS) | |
'\x99' # 0x39 -> SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) | |
'\x9a' # 0x3A -> SINGLE CHARACTER INTRODUCER (SCI) | |
'\x9b' # 0x3B -> CONTROL SEQUENCE INTRODUCER (CSI) | |
'\x14' # 0x3C -> DEVICE CONTROL FOUR (DC4) | |
'\x15' # 0x3D -> NEGATIVE ACKNOWLEDGE (NAK) | |
'\x9e' # 0x3E -> PRIVACY MESSAGE (PM) | |
'\x1a' # 0x3F -> SUBSTITUTE (SUB) | |
' ' # 0x40 -> SPACE | |
'\xa0' # 0x41 -> NO-BREAK SPACE | |
'\xe2' # 0x42 -> LATIN SMALL LETTER A WITH CIRCUMFLEX | |
'{' # 0x43 -> LEFT CURLY BRACKET | |
'\xe0' # 0x44 -> LATIN SMALL LETTER A WITH GRAVE | |
'\xe1' # 0x45 -> LATIN SMALL LETTER A WITH ACUTE | |
'\xe3' # 0x46 -> LATIN SMALL LETTER A WITH TILDE | |
'\xe5' # 0x47 -> LATIN SMALL LETTER A WITH RING ABOVE | |
'\xe7' # 0x48 -> LATIN SMALL LETTER C WITH CEDILLA | |
'\xf1' # 0x49 -> LATIN SMALL LETTER N WITH TILDE | |
'\xc4' # 0x4A -> LATIN CAPITAL LETTER A WITH DIAERESIS | |
'.' # 0x4B -> FULL STOP | |
'<' # 0x4C -> LESS-THAN SIGN | |
'(' # 0x4D -> LEFT PARENTHESIS | |
'+' # 0x4E -> PLUS SIGN | |
'!' # 0x4F -> EXCLAMATION MARK | |
'&' # 0x50 -> AMPERSAND | |
'\xe9' # 0x51 -> LATIN SMALL LETTER E WITH ACUTE | |
'\xea' # 0x52 -> LATIN SMALL LETTER E WITH CIRCUMFLEX | |
'\xeb' # 0x53 -> LATIN SMALL LETTER E WITH DIAERESIS | |
'\xe8' # 0x54 -> LATIN SMALL LETTER E WITH GRAVE | |
'\xed' # 0x55 -> LATIN SMALL LETTER I WITH ACUTE | |
'\xee' # 0x56 -> LATIN SMALL LETTER I WITH CIRCUMFLEX | |
'\xef' # 0x57 -> LATIN SMALL LETTER I WITH DIAERESIS | |
'\xec' # 0x58 -> LATIN SMALL LETTER I WITH GRAVE | |
'~' # 0x59 -> TILDE | |
'\xdc' # 0x5A -> LATIN CAPITAL LETTER U WITH DIAERESIS | |
'$' # 0x5B -> DOLLAR SIGN | |
'*' # 0x5C -> ASTERISK | |
')' # 0x5D -> RIGHT PARENTHESIS | |
';' # 0x5E -> SEMICOLON | |
'^' # 0x5F -> CIRCUMFLEX ACCENT | |
'-' # 0x60 -> HYPHEN-MINUS | |
'/' # 0x61 -> SOLIDUS | |
'\xc2' # 0x62 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX | |
'[' # 0x63 -> LEFT SQUARE BRACKET | |
'\xc0' # 0x64 -> LATIN CAPITAL LETTER A WITH GRAVE | |
'\xc1' # 0x65 -> LATIN CAPITAL LETTER A WITH ACUTE | |
'\xc3' # 0x66 -> LATIN CAPITAL LETTER A WITH TILDE | |
'\xc5' # 0x67 -> LATIN CAPITAL LETTER A WITH RING ABOVE | |
'\xc7' # 0x68 -> LATIN CAPITAL LETTER C WITH CEDILLA | |
'\xd1' # 0x69 -> LATIN CAPITAL LETTER N WITH TILDE | |
'\xf6' # 0x6A -> LATIN SMALL LETTER O WITH DIAERESIS | |
',' # 0x6B -> COMMA | |
'%' # 0x6C -> PERCENT SIGN | |
'_' # 0x6D -> LOW LINE | |
'>' # 0x6E -> GREATER-THAN SIGN | |
'?' # 0x6F -> QUESTION MARK | |
'\xf8' # 0x70 -> LATIN SMALL LETTER O WITH STROKE | |
'\xc9' # 0x71 -> LATIN CAPITAL LETTER E WITH ACUTE | |
'\xca' # 0x72 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX | |
'\xcb' # 0x73 -> LATIN CAPITAL LETTER E WITH DIAERESIS | |
'\xc8' # 0x74 -> LATIN CAPITAL LETTER E WITH GRAVE | |
'\xcd' # 0x75 -> LATIN CAPITAL LETTER I WITH ACUTE | |
'\xce' # 0x76 -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX | |
'\xcf' # 0x77 -> LATIN CAPITAL LETTER I WITH DIAERESIS | |
'\xcc' # 0x78 -> LATIN CAPITAL LETTER I WITH GRAVE | |
'`' # 0x79 -> GRAVE ACCENT | |
':' # 0x7A -> COLON | |
'#' # 0x7B -> NUMBER SIGN | |
'\xa7' # 0x7C -> SECTION SIGN | |
"'" # 0x7D -> APOSTROPHE | |
'=' # 0x7E -> EQUALS SIGN | |
'"' # 0x7F -> QUOTATION MARK | |
'\xd8' # 0x80 -> LATIN CAPITAL LETTER O WITH STROKE | |
'a' # 0x81 -> LATIN SMALL LETTER A | |
'b' # 0x82 -> LATIN SMALL LETTER B | |
'c' # 0x83 -> LATIN SMALL LETTER C | |
'd' # 0x84 -> LATIN SMALL LETTER D | |
'e' # 0x85 -> LATIN SMALL LETTER E | |
'f' # 0x86 -> LATIN SMALL LETTER F | |
'g' # 0x87 -> LATIN SMALL LETTER G | |
'h' # 0x88 -> LATIN SMALL LETTER H | |
'i' # 0x89 -> LATIN SMALL LETTER I | |
'\xab' # 0x8A -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK | |
'\xbb' # 0x8B -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK | |
'\xf0' # 0x8C -> LATIN SMALL LETTER ETH (Icelandic) | |
'\xfd' # 0x8D -> LATIN SMALL LETTER Y WITH ACUTE | |
'\xfe' # 0x8E -> LATIN SMALL LETTER THORN (Icelandic) | |
'\xb1' # 0x8F -> PLUS-MINUS SIGN | |
'\xb0' # 0x90 -> DEGREE SIGN | |
'j' # 0x91 -> LATIN SMALL LETTER J | |
'k' # 0x92 -> LATIN SMALL LETTER K | |
'l' # 0x93 -> LATIN SMALL LETTER L | |
'm' # 0x94 -> LATIN SMALL LETTER M | |
'n' # 0x95 -> LATIN SMALL LETTER N | |
'o' # 0x96 -> LATIN SMALL LETTER O | |
'p' # 0x97 -> LATIN SMALL LETTER P | |
'q' # 0x98 -> LATIN SMALL LETTER Q | |
'r' # 0x99 -> LATIN SMALL LETTER R | |
'\xaa' # 0x9A -> FEMININE ORDINAL INDICATOR | |
'\xba' # 0x9B -> MASCULINE ORDINAL INDICATOR | |
'\xe6' # 0x9C -> LATIN SMALL LETTER AE | |
'\xb8' # 0x9D -> CEDILLA | |
'\xc6' # 0x9E -> LATIN CAPITAL LETTER AE | |
'\xa4' # 0x9F -> CURRENCY SIGN | |
'\xb5' # 0xA0 -> MICRO SIGN | |
'\xdf' # 0xA1 -> LATIN SMALL LETTER SHARP S (German) | |
's' # 0xA2 -> LATIN SMALL LETTER S | |
't' # 0xA3 -> LATIN SMALL LETTER T | |
'u' # 0xA4 -> LATIN SMALL LETTER U | |
'v' # 0xA5 -> LATIN SMALL LETTER V | |
'w' # 0xA6 -> LATIN SMALL LETTER W | |
'x' # 0xA7 -> LATIN SMALL LETTER X | |
'y' # 0xA8 -> LATIN SMALL LETTER Y | |
'z' # 0xA9 -> LATIN SMALL LETTER Z | |
'\xa1' # 0xAA -> INVERTED EXCLAMATION MARK | |
'\xbf' # 0xAB -> INVERTED QUESTION MARK | |
'\xd0' # 0xAC -> LATIN CAPITAL LETTER ETH (Icelandic) | |
'\xdd' # 0xAD -> LATIN CAPITAL LETTER Y WITH ACUTE | |
'\xde' # 0xAE -> LATIN CAPITAL LETTER THORN (Icelandic) | |
'\xae' # 0xAF -> REGISTERED SIGN | |
'\xa2' # 0xB0 -> CENT SIGN | |
'\xa3' # 0xB1 -> POUND SIGN | |
'\xa5' # 0xB2 -> YEN SIGN | |
'\xb7' # 0xB3 -> MIDDLE DOT | |
'\xa9' # 0xB4 -> COPYRIGHT SIGN | |
'@' # 0xB5 -> COMMERCIAL AT | |
'\xb6' # 0xB6 -> PILCROW SIGN | |
'\xbc' # 0xB7 -> VULGAR FRACTION ONE QUARTER | |
'\xbd' # 0xB8 -> VULGAR FRACTION ONE HALF | |
'\xbe' # 0xB9 -> VULGAR FRACTION THREE QUARTERS | |
'\xac' # 0xBA -> NOT SIGN | |
'|' # 0xBB -> VERTICAL LINE | |
'\u203e' # 0xBC -> OVERLINE | |
'\xa8' # 0xBD -> DIAERESIS | |
'\xb4' # 0xBE -> ACUTE ACCENT | |
'\xd7' # 0xBF -> MULTIPLICATION SIGN | |
'\xe4' # 0xC0 -> LATIN SMALL LETTER A WITH DIAERESIS | |
'A' # 0xC1 -> LATIN CAPITAL LETTER A | |
'B' # 0xC2 -> LATIN CAPITAL LETTER B | |
'C' # 0xC3 -> LATIN CAPITAL LETTER C | |
'D' # 0xC4 -> LATIN CAPITAL LETTER D | |
'E' # 0xC5 -> LATIN CAPITAL LETTER E | |
'F' # 0xC6 -> LATIN CAPITAL LETTER F | |
'G' # 0xC7 -> LATIN CAPITAL LETTER G | |
'H' # 0xC8 -> LATIN CAPITAL LETTER H | |
'I' # 0xC9 -> LATIN CAPITAL LETTER I | |
'\xad' # 0xCA -> SOFT HYPHEN | |
'\xf4' # 0xCB -> LATIN SMALL LETTER O WITH CIRCUMFLEX | |
'\xa6' # 0xCC -> BROKEN BAR | |
'\xf2' # 0xCD -> LATIN SMALL LETTER O WITH GRAVE | |
'\xf3' # 0xCE -> LATIN SMALL LETTER O WITH ACUTE | |
'\xf5' # 0xCF -> LATIN SMALL LETTER O WITH TILDE | |
'\xfc' # 0xD0 -> LATIN SMALL LETTER U WITH DIAERESIS | |
'J' # 0xD1 -> LATIN CAPITAL LETTER J | |
'K' # 0xD2 -> LATIN CAPITAL LETTER K | |
'L' # 0xD3 -> LATIN CAPITAL LETTER L | |
'M' # 0xD4 -> LATIN CAPITAL LETTER M | |
'N' # 0xD5 -> LATIN CAPITAL LETTER N | |
'O' # 0xD6 -> LATIN CAPITAL LETTER O | |
'P' # 0xD7 -> LATIN CAPITAL LETTER P | |
'Q' # 0xD8 -> LATIN CAPITAL LETTER Q | |
'R' # 0xD9 -> LATIN CAPITAL LETTER R | |
'\xb9' # 0xDA -> SUPERSCRIPT ONE | |
'\xfb' # 0xDB -> LATIN SMALL LETTER U WITH CIRCUMFLEX | |
'}' # 0xDC -> RIGHT CURLY BRACKET | |
'\xf9' # 0xDD -> LATIN SMALL LETTER U WITH GRAVE | |
'\xfa' # 0xDE -> LATIN SMALL LETTER U WITH ACUTE | |
'\xff' # 0xDF -> LATIN SMALL LETTER Y WITH DIAERESIS | |
'\xd6' # 0xE0 -> LATIN CAPITAL LETTER O WITH DIAERESIS | |
'\xf7' # 0xE1 -> DIVISION SIGN | |
'S' # 0xE2 -> LATIN CAPITAL LETTER S | |
'T' # 0xE3 -> LATIN CAPITAL LETTER T | |
'U' # 0xE4 -> LATIN CAPITAL LETTER U | |
'V' # 0xE5 -> LATIN CAPITAL LETTER V | |
'W' # 0xE6 -> LATIN CAPITAL LETTER W | |
'X' # 0xE7 -> LATIN CAPITAL LETTER X | |
'Y' # 0xE8 -> LATIN CAPITAL LETTER Y | |
'Z' # 0xE9 -> LATIN CAPITAL LETTER Z | |
'\xb2' # 0xEA -> SUPERSCRIPT TWO | |
'\xd4' # 0xEB -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX | |
'\\' # 0xEC -> REVERSE SOLIDUS | |
'\xd2' # 0xED -> LATIN CAPITAL LETTER O WITH GRAVE | |
'\xd3' # 0xEE -> LATIN CAPITAL LETTER O WITH ACUTE | |
'\xd5' # 0xEF -> LATIN CAPITAL LETTER O WITH TILDE | |
'0' # 0xF0 -> DIGIT ZERO | |
'1' # 0xF1 -> DIGIT ONE | |
'2' # 0xF2 -> DIGIT TWO | |
'3' # 0xF3 -> DIGIT THREE | |
'4' # 0xF4 -> DIGIT FOUR | |
'5' # 0xF5 -> DIGIT FIVE | |
'6' # 0xF6 -> DIGIT SIX | |
'7' # 0xF7 -> DIGIT SEVEN | |
'8' # 0xF8 -> DIGIT EIGHT | |
'9' # 0xF9 -> DIGIT NINE | |
'\xb3' # 0xFA -> SUPERSCRIPT THREE | |
'\xdb' # 0xFB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX | |
']' # 0xFC -> RIGHT SQUARE BRACKET | |
'\xd9' # 0xFD -> LATIN CAPITAL LETTER U WITH GRAVE | |
'\xda' # 0xFE -> LATIN CAPITAL LETTER U WITH ACUTE | |
'\x9f' # 0xFF -> APPLICATION PROGRAM COMMAND (APC) | |
) | |
### Encoding table | |
encoding_table=codecs.charmap_build(decoding_table) |
""" Python Character Mapping Codec cp424 generated from 'MAPPINGS/VENDORS/MISC/CP424.TXT' with gencodec.py. | |
"""#" | |
import codecs | |
### Codec APIs | |
class Codec(codecs.Codec): | |
def encode(self,input,errors='strict'): | |
return codecs.charmap_encode(input,errors,encoding_table) | |
def decode(self,input,errors='strict'): | |
return codecs.charmap_decode(input,errors,decoding_table) | |
class IncrementalEncoder(codecs.IncrementalEncoder): | |
def encode(self, input, final=False): | |
return codecs.charmap_encode(input,self.errors,encoding_table)[0] | |
class IncrementalDecoder(codecs.IncrementalDecoder): | |
def decode(self, input, final=False): | |
return codecs.charmap_decode(input,self.errors,decoding_table)[0] | |
class StreamWriter(Codec,codecs.StreamWriter): | |
pass | |
class StreamReader(Codec,codecs.StreamReader): | |
pass | |
### encodings module API | |
def getregentry(): | |
return codecs.CodecInfo( | |
name='cp424', | |
encode=Codec().encode, | |
decode=Codec().decode, | |
incrementalencoder=IncrementalEncoder, | |
incrementaldecoder=IncrementalDecoder, | |
streamreader=StreamReader, | |
streamwriter=StreamWriter, | |
) | |
### Decoding Table | |
decoding_table = ( | |
'\x00' # 0x00 -> NULL | |
'\x01' # 0x01 -> START OF HEADING | |
'\x02' # 0x02 -> START OF TEXT | |
'\x03' # 0x03 -> END OF TEXT | |
'\x9c' # 0x04 -> SELECT | |
'\t' # 0x05 -> HORIZONTAL TABULATION | |
'\x86' # 0x06 -> REQUIRED NEW LINE | |
'\x7f' # 0x07 -> DELETE | |
'\x97' # 0x08 -> GRAPHIC ESCAPE | |
'\x8d' # 0x09 -> SUPERSCRIPT | |
'\x8e' # 0x0A -> REPEAT | |
'\x0b' # 0x0B -> VERTICAL TABULATION | |
'\x0c' # 0x0C -> FORM FEED | |
'\r' # 0x0D -> CARRIAGE RETURN | |
'\x0e' # 0x0E -> SHIFT OUT | |
'\x0f' # 0x0F -> SHIFT IN | |
'\x10' # 0x10 -> DATA LINK ESCAPE | |
'\x11' # 0x11 -> DEVICE CONTROL ONE | |
'\x12' # 0x12 -> DEVICE CONTROL TWO | |
'\x13' # 0x13 -> DEVICE CONTROL THREE | |
'\x9d' # 0x14 -> RESTORE/ENABLE PRESENTATION | |
'\x85' # 0x15 -> NEW LINE | |
'\x08' # 0x16 -> BACKSPACE | |
'\x87' # 0x17 -> PROGRAM OPERATOR COMMUNICATION | |
'\x18' # 0x18 -> CANCEL | |
'\x19' # 0x19 -> END OF MEDIUM | |
'\x92' # 0x1A -> UNIT BACK SPACE | |
'\x8f' # 0x1B -> CUSTOMER USE ONE | |
'\x1c' # 0x1C -> FILE SEPARATOR | |
'\x1d' # 0x1D -> GROUP SEPARATOR | |
'\x1e' # 0x1E -> RECORD SEPARATOR | |
'\x1f' # 0x1F -> UNIT SEPARATOR | |
'\x80' # 0x20 -> DIGIT SELECT | |
'\x81' # 0x21 -> START OF SIGNIFICANCE | |
'\x82' # 0x22 -> FIELD SEPARATOR | |
'\x83' # 0x23 -> WORD UNDERSCORE | |
'\x84' # 0x24 -> BYPASS OR INHIBIT PRESENTATION | |
'\n' # 0x25 -> LINE FEED | |
'\x17' # 0x26 -> END OF TRANSMISSION BLOCK | |
'\x1b' # 0x27 -> ESCAPE | |
'\x88' # 0x28 -> SET ATTRIBUTE | |
'\x89' # 0x29 -> START FIELD EXTENDED | |
'\x8a' # 0x2A -> SET MODE OR SWITCH | |
'\x8b' # 0x2B -> CONTROL SEQUENCE PREFIX | |
'\x8c' # 0x2C -> MODIFY FIELD ATTRIBUTE | |
'\x05' # 0x2D -> ENQUIRY | |
'\x06' # 0x2E -> ACKNOWLEDGE | |
'\x07' # 0x2F -> BELL | |
'\x90' # 0x30 -> <reserved> | |
'\x91' # 0x31 -> <reserved> | |
'\x16' # 0x32 -> SYNCHRONOUS IDLE | |
'\x93' # 0x33 -> INDEX RETURN | |
'\x94' # 0x34 -> PRESENTATION POSITION | |
'\x95' # 0x35 -> TRANSPARENT | |
'\x96' # 0x36 -> NUMERIC BACKSPACE | |
'\x04' # 0x37 -> END OF TRANSMISSION | |
'\x98' # 0x38 -> SUBSCRIPT | |
'\x99' # 0x39 -> INDENT TABULATION | |
'\x9a' # 0x3A -> REVERSE FORM FEED | |
'\x9b' # 0x3B -> CUSTOMER USE THREE | |
'\x14' # 0x3C -> DEVICE CONTROL FOUR | |
'\x15' # 0x3D -> NEGATIVE ACKNOWLEDGE | |
'\x9e' # 0x3E -> <reserved> | |
'\x1a' # 0x3F -> SUBSTITUTE | |
' ' # 0x40 -> SPACE | |
'\u05d0' # 0x41 -> HEBREW LETTER ALEF | |
'\u05d1' # 0x42 -> HEBREW LETTER BET | |
'\u05d2' # 0x43 -> HEBREW LETTER GIMEL | |
'\u05d3' # 0x44 -> HEBREW LETTER DALET | |
'\u05d4' # 0x45 -> HEBREW LETTER HE | |
'\u05d5' # 0x46 -> HEBREW LETTER VAV | |
'\u05d6' # 0x47 -> HEBREW LETTER ZAYIN | |
'\u05d7' # 0x48 -> HEBREW LETTER HET | |
'\u05d8' # 0x49 -> HEBREW LETTER TET | |
'\xa2' # 0x4A -> CENT SIGN | |
'.' # 0x4B -> FULL STOP | |
'<' # 0x4C -> LESS-THAN SIGN | |
'(' # 0x4D -> LEFT PARENTHESIS | |
'+' # 0x4E -> PLUS SIGN | |
'|' # 0x4F -> VERTICAL LINE | |
'&' # 0x50 -> AMPERSAND | |
'\u05d9' # 0x51 -> HEBREW LETTER YOD | |
'\u05da' # 0x52 -> HEBREW LETTER FINAL KAF | |
'\u05db' # 0x53 -> HEBREW LETTER KAF | |
'\u05dc' # 0x54 -> HEBREW LETTER LAMED | |
'\u05dd' # 0x55 -> HEBREW LETTER FINAL MEM | |
'\u05de' # 0x56 -> HEBREW LETTER MEM | |
'\u05df' # 0x57 -> HEBREW LETTER FINAL NUN | |
'\u05e0' # 0x58 -> HEBREW LETTER NUN | |
'\u05e1' # 0x59 -> HEBREW LETTER SAMEKH | |
'!' # 0x5A -> EXCLAMATION MARK | |
'$' # 0x5B -> DOLLAR SIGN | |
'*' # 0x5C -> ASTERISK | |
')' # 0x5D -> RIGHT PARENTHESIS | |
';' # 0x5E -> SEMICOLON | |
'\xac' # 0x5F -> NOT SIGN | |
'-' # 0x60 -> HYPHEN-MINUS | |
'/' # 0x61 -> SOLIDUS | |
'\u05e2' # 0x62 -> HEBREW LETTER AYIN | |
'\u05e3' # 0x63 -> HEBREW LETTER FINAL PE | |
'\u05e4' # 0x64 -> HEBREW LETTER PE | |
'\u05e5' # 0x65 -> HEBREW LETTER FINAL TSADI | |
'\u05e6' # 0x66 -> HEBREW LETTER TSADI | |
'\u05e7' # 0x67 -> HEBREW LETTER QOF | |
'\u05e8' # 0x68 -> HEBREW LETTER RESH | |
'\u05e9' # 0x69 -> HEBREW LETTER SHIN | |
'\xa6' # 0x6A -> BROKEN BAR | |
',' # 0x6B -> COMMA | |
'%' # 0x6C -> PERCENT SIGN | |
'_' # 0x6D -> LOW LINE | |
'>' # 0x6E -> GREATER-THAN SIGN | |
'?' # 0x6F -> QUESTION MARK | |
'\ufffe' # 0x70 -> UNDEFINED | |
'\u05ea' # 0x71 -> HEBREW LETTER TAV | |
'\ufffe' # 0x72 -> UNDEFINED | |
'\ufffe' # 0x73 -> UNDEFINED | |
'\xa0' # 0x74 -> NO-BREAK SPACE | |
'\ufffe' # 0x75 -> UNDEFINED | |
'\ufffe' # 0x76 -> UNDEFINED | |
'\ufffe' # 0x77 -> UNDEFINED | |
'\u2017' # 0x78 -> DOUBLE LOW LINE | |
'`' # 0x79 -> GRAVE ACCENT | |
':' # 0x7A -> COLON | |
'#' # 0x7B -> NUMBER SIGN | |
'@' # 0x7C -> COMMERCIAL AT | |
"'" # 0x7D -> APOSTROPHE | |
'=' # 0x7E -> EQUALS SIGN | |
'"' # 0x7F -> QUOTATION MARK | |
'\ufffe' # 0x80 -> UNDEFINED | |
'a' # 0x81 -> LATIN SMALL LETTER A | |
'b' # 0x82 -> LATIN SMALL LETTER B | |
'c' # 0x83 -> LATIN SMALL LETTER C | |
'd' # 0x84 -> LATIN SMALL LETTER D | |
'e' # 0x85 -> LATIN SMALL LETTER E | |
'f' # 0x86 -> LATIN SMALL LETTER F | |
'g' # 0x87 -> LATIN SMALL LETTER G | |
'h' # 0x88 -> LATIN SMALL LETTER H | |
'i' # 0x89 -> LATIN SMALL LETTER I | |
'\xab' # 0x8A -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK | |
'\xbb' # 0x8B -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK | |
'\ufffe' # 0x8C -> UNDEFINED | |
'\ufffe' # 0x8D -> UNDEFINED | |
'\ufffe' # 0x8E -> UNDEFINED | |
'\xb1' # 0x8F -> PLUS-MINUS SIGN | |
'\xb0' # 0x90 -> DEGREE SIGN | |
'j' # 0x91 -> LATIN SMALL LETTER J | |
'k' # 0x92 -> LATIN SMALL LETTER K | |
'l' # 0x93 -> LATIN SMALL LETTER L | |
'm' # 0x94 -> LATIN SMALL LETTER M | |
'n' # 0x95 -> LATIN SMALL LETTER N | |
'o' # 0x96 -> LATIN SMALL LETTER O | |
'p' # 0x97 -> LATIN SMALL LETTER P | |
'q' # 0x98 -> LATIN SMALL LETTER Q | |
'r' # 0x99 -> LATIN SMALL LETTER R | |
'\ufffe' # 0x9A -> UNDEFINED | |
'\ufffe' # 0x9B -> UNDEFINED | |
'\ufffe' # 0x9C -> UNDEFINED | |
'\xb8' # 0x9D -> CEDILLA | |
'\ufffe' # 0x9E -> UNDEFINED | |
'\xa4' # 0x9F -> CURRENCY SIGN | |
'\xb5' # 0xA0 -> MICRO SIGN | |
'~' # 0xA1 -> TILDE | |
's' # 0xA2 -> LATIN SMALL LETTER S | |
't' # 0xA3 -> LATIN SMALL LETTER T | |
'u' # 0xA4 -> LATIN SMALL LETTER U | |
'v' # 0xA5 -> LATIN SMALL LETTER V | |
'w' # 0xA6 -> LATIN SMALL LETTER W | |
'x' # 0xA7 -> LATIN SMALL LETTER X | |
'y' # 0xA8 -> LATIN SMALL LETTER Y | |
'z' # 0xA9 -> LATIN SMALL LETTER Z | |
'\ufffe' # 0xAA -> UNDEFINED | |
'\ufffe' # 0xAB -> UNDEFINED | |
'\ufffe' # 0xAC -> UNDEFINED | |
'\ufffe' # 0xAD -> UNDEFINED | |
'\ufffe' # 0xAE -> UNDEFINED | |
'\xae' # 0xAF -> REGISTERED SIGN | |
'^' # 0xB0 -> CIRCUMFLEX ACCENT | |
'\xa3' # 0xB1 -> POUND SIGN | |
'\xa5' # 0xB2 -> YEN SIGN | |
'\xb7' # 0xB3 -> MIDDLE DOT | |
'\xa9' # 0xB4 -> COPYRIGHT SIGN | |
'\xa7' # 0xB5 -> SECTION SIGN | |
'\xb6' # 0xB6 -> PILCROW SIGN | |
'\xbc' # 0xB7 -> VULGAR FRACTION ONE QUARTER | |
'\xbd' # 0xB8 -> VULGAR FRACTION ONE HALF | |
'\xbe' # 0xB9 -> VULGAR FRACTION THREE QUARTERS | |
'[' # 0xBA -> LEFT SQUARE BRACKET | |
']' # 0xBB -> RIGHT SQUARE BRACKET | |
'\xaf' # 0xBC -> MACRON | |
'\xa8' # 0xBD -> DIAERESIS | |
'\xb4' # 0xBE -> ACUTE ACCENT | |
'\xd7' # 0xBF -> MULTIPLICATION SIGN | |
'{' # 0xC0 -> LEFT CURLY BRACKET | |
'A' # 0xC1 -> LATIN CAPITAL LETTER A | |
'B' # 0xC2 -> LATIN CAPITAL LETTER B | |
'C' # 0xC3 -> LATIN CAPITAL LETTER C | |
'D' # 0xC4 -> LATIN CAPITAL LETTER D | |
'E' # 0xC5 -> LATIN CAPITAL LETTER E | |
'F' # 0xC6 -> LATIN CAPITAL LETTER F | |
'G' # 0xC7 -> LATIN CAPITAL LETTER G | |
'H' # 0xC8 -> LATIN CAPITAL LETTER H | |
'I' # 0xC9 -> LATIN CAPITAL LETTER I | |
'\xad' # 0xCA -> SOFT HYPHEN | |
'\ufffe' # 0xCB -> UNDEFINED | |
'\ufffe' # 0xCC -> UNDEFINED | |
'\ufffe' # 0xCD -> UNDEFINED | |
'\ufffe' # 0xCE -> UNDEFINED | |
'\ufffe' # 0xCF -> UNDEFINED | |
'}' # 0xD0 -> RIGHT CURLY BRACKET | |
'J' # 0xD1 -> LATIN CAPITAL LETTER J | |
'K' # 0xD2 -> LATIN CAPITAL LETTER K | |
'L' # 0xD3 -> LATIN CAPITAL LETTER L | |
'M' # 0xD4 -> LATIN CAPITAL LETTER M | |
'N' # 0xD5 -> LATIN CAPITAL LETTER N | |
'O' # 0xD6 -> LATIN CAPITAL LETTER O | |
'P' # 0xD7 -> LATIN CAPITAL LETTER P | |
'Q' # 0xD8 -> LATIN CAPITAL LETTER Q | |
'R' # 0xD9 -> LATIN CAPITAL LETTER R | |
'\xb9' # 0xDA -> SUPERSCRIPT ONE | |
'\ufffe' # 0xDB -> UNDEFINED | |
'\ufffe' # 0xDC -> UNDEFINED | |
'\ufffe' # 0xDD -> UNDEFINED | |
'\ufffe' # 0xDE -> UNDEFINED | |
'\ufffe' # 0xDF -> UNDEFINED | |
'\\' # 0xE0 -> REVERSE SOLIDUS | |
'\xf7' # 0xE1 -> DIVISION SIGN | |
'S' # 0xE2 -> LATIN CAPITAL LETTER S | |
'T' # 0xE3 -> LATIN CAPITAL LETTER T | |
'U' # 0xE4 -> LATIN CAPITAL LETTER U | |
'V' # 0xE5 -> LATIN CAPITAL LETTER V | |
'W' # 0xE6 -> LATIN CAPITAL LETTER W | |
'X' # 0xE7 -> LATIN CAPITAL LETTER X | |
'Y' # 0xE8 -> LATIN CAPITAL LETTER Y | |
'Z' # 0xE9 -> LATIN CAPITAL LETTER Z | |
'\xb2' # 0xEA -> SUPERSCRIPT TWO | |
'\ufffe' # 0xEB -> UNDEFINED | |
'\ufffe' # 0xEC -> UNDEFINED | |
'\ufffe' # 0xED -> UNDEFINED | |
'\ufffe' # 0xEE -> UNDEFINED | |
'\ufffe' # 0xEF -> UNDEFINED | |
'0' # 0xF0 -> DIGIT ZERO | |
'1' # 0xF1 -> DIGIT ONE | |
'2' # 0xF2 -> DIGIT TWO | |
'3' # 0xF3 -> DIGIT THREE | |
'4' # 0xF4 -> DIGIT FOUR | |
'5' # 0xF5 -> DIGIT FIVE | |
'6' # 0xF6 -> DIGIT SIX | |
'7' # 0xF7 -> DIGIT SEVEN | |
'8' # 0xF8 -> DIGIT EIGHT | |
'9' # 0xF9 -> DIGIT NINE | |
'\xb3' # 0xFA -> SUPERSCRIPT THREE | |
'\ufffe' # 0xFB -> UNDEFINED | |
'\ufffe' # 0xFC -> UNDEFINED | |
'\ufffe' # 0xFD -> UNDEFINED | |
'\ufffe' # 0xFE -> UNDEFINED | |
'\x9f' # 0xFF -> EIGHT ONES | |
) | |
### Encoding table | |
encoding_table=codecs.charmap_build(decoding_table) |
""" Python Character Mapping Codec cp437 generated from 'VENDORS/MICSFT/PC/CP437.TXT' with gencodec.py. | |
"""#" | |
import codecs | |
### Codec APIs | |
class Codec(codecs.Codec): | |
def encode(self,input,errors='strict'): | |
return codecs.charmap_encode(input,errors,encoding_map) | |
def decode(self,input,errors='strict'): | |
return codecs.charmap_decode(input,errors,decoding_table) | |
class IncrementalEncoder(codecs.IncrementalEncoder): | |
def encode(self, input, final=False): | |
return codecs.charmap_encode(input,self.errors,encoding_map)[0] | |
class IncrementalDecoder(codecs.IncrementalDecoder): | |
def decode(self, input, final=False): | |
return codecs.charmap_decode(input,self.errors,decoding_table)[0] | |
class StreamWriter(Codec,codecs.StreamWriter): | |
pass | |
class StreamReader(Codec,codecs.StreamReader): | |
pass | |
### encodings module API | |
def getregentry(): | |
return codecs.CodecInfo( | |
name='cp437', | |
encode=Codec().encode, | |
decode=Codec().decode, | |
incrementalencoder=IncrementalEncoder, | |
incrementaldecoder=IncrementalDecoder, | |
streamreader=StreamReader, | |
streamwriter=StreamWriter, | |
) | |
### Decoding Map | |
decoding_map = codecs.make_identity_dict(range(256)) | |
decoding_map.update({ | |
0x0080: 0x00c7, # LATIN CAPITAL LETTER C WITH CEDILLA | |
0x0081: 0x00fc, # LATIN SMALL LETTER U WITH DIAERESIS | |
0x0082: 0x00e9, # LATIN SMALL LETTER E WITH ACUTE | |
0x0083: 0x00e2, # LATIN SMALL LETTER A WITH CIRCUMFLEX | |
0x0084: 0x00e4, # LATIN SMALL LETTER A WITH DIAERESIS | |
0x0085: 0x00e0, # LATIN SMALL LETTER A WITH GRAVE | |
0x0086: 0x00e5, # LATIN SMALL LETTER A WITH RING ABOVE | |
0x0087: 0x00e7, # LATIN SMALL LETTER C WITH CEDILLA | |
0x0088: 0x00ea, # LATIN SMALL LETTER E WITH CIRCUMFLEX | |
0x0089: 0x00eb, # LATIN SMALL LETTER E WITH DIAERESIS | |
0x008a: 0x00e8, # LATIN SMALL LETTER E WITH GRAVE | |
0x008b: 0x00ef, # LATIN SMALL LETTER I WITH DIAERESIS | |
0x008c: 0x00ee, # LATIN SMALL LETTER I WITH CIRCUMFLEX | |
0x008d: 0x00ec, # LATIN SMALL LETTER I WITH GRAVE | |
0x008e: 0x00c4, # LATIN CAPITAL LETTER A WITH DIAERESIS | |
0x008f: 0x00c5, # LATIN CAPITAL LETTER A WITH RING ABOVE | |
0x0090: 0x00c9, # LATIN CAPITAL LETTER E WITH ACUTE | |
0x0091: 0x00e6, # LATIN SMALL LIGATURE AE | |
0x0092: 0x00c6, # LATIN CAPITAL LIGATURE AE | |
0x0093: 0x00f4, # LATIN SMALL LETTER O WITH CIRCUMFLEX | |
0x0094: 0x00f6, # LATIN SMALL LETTER O WITH DIAERESIS | |
0x0095: 0x00f2, # LATIN SMALL LETTER O WITH GRAVE | |
0x0096: 0x00fb, # LATIN SMALL LETTER U WITH CIRCUMFLEX | |
0x0097: 0x00f9, # LATIN SMALL LETTER U WITH GRAVE | |
0x0098: 0x00ff, # LATIN SMALL LETTER Y WITH DIAERESIS | |
0x0099: 0x00d6, # LATIN CAPITAL LETTER O WITH DIAERESIS | |
0x009a: 0x00dc, # LATIN CAPITAL LETTER U WITH DIAERESIS | |
0x009b: 0x00a2, # CENT SIGN | |
0x009c: 0x00a3, # POUND SIGN | |
0x009d: 0x00a5, # YEN SIGN | |
0x009e: 0x20a7, # PESETA SIGN | |
0x009f: 0x0192, # LATIN SMALL LETTER F WITH HOOK | |
0x00a0: 0x00e1, # LATIN SMALL LETTER A WITH ACUTE | |
0x00a1: 0x00ed, # LATIN SMALL LETTER I WITH ACUTE | |
0x00a2: 0x00f3, # LATIN SMALL LETTER O WITH ACUTE | |
0x00a3: 0x00fa, # LATIN SMALL LETTER U WITH ACUTE | |
0x00a4: 0x00f1, # LATIN SMALL LETTER N WITH TILDE | |
0x00a5: 0x00d1, # LATIN CAPITAL LETTER N WITH TILDE | |
0x00a6: 0x00aa, # FEMININE ORDINAL INDICATOR | |
0x00a7: 0x00ba, # MASCULINE ORDINAL INDICATOR | |
0x00a8: 0x00bf, # INVERTED QUESTION MARK | |
0x00a9: 0x2310, # REVERSED NOT SIGN | |
0x00aa: 0x00ac, # NOT SIGN | |
0x00ab: 0x00bd, # VULGAR FRACTION ONE HALF | |
0x00ac: 0x00bc, # VULGAR FRACTION ONE QUARTER | |
0x00ad: 0x00a1, # INVERTED EXCLAMATION MARK | |
0x00ae: 0x00ab, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK | |
0x00af: 0x00bb, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK | |
0x00b0: 0x2591, # LIGHT SHADE | |
0x00b1: 0x2592, # MEDIUM SHADE | |
0x00b2: 0x2593, # DARK SHADE | |
0x00b3: 0x2502, # BOX DRAWINGS LIGHT VERTICAL | |
0x00b4: 0x2524, # BOX DRAWINGS LIGHT VERTICAL AND LEFT | |
0x00b5: 0x2561, # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE | |
0x00b6: 0x2562, # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE | |
0x00b7: 0x2556, # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE | |
0x00b8: 0x2555, # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE | |
0x00b9: 0x2563, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT | |
0x00ba: 0x2551, # BOX DRAWINGS DOUBLE VERTICAL | |
0x00bb: 0x2557, # BOX DRAWINGS DOUBLE DOWN AND LEFT | |
0x00bc: 0x255d, # BOX DRAWINGS DOUBLE UP AND LEFT | |
0x00bd: 0x255c, # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE | |
0x00be: 0x255b, # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE | |
0x00bf: 0x2510, # BOX DRAWINGS LIGHT DOWN AND LEFT | |
0x00c0: 0x2514, # BOX DRAWINGS LIGHT UP AND RIGHT | |
0x00c1: 0x2534, # BOX DRAWINGS LIGHT UP AND HORIZONTAL | |
0x00c2: 0x252c, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL | |
0x00c3: 0x251c, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT | |
0x00c4: 0x2500, # BOX DRAWINGS LIGHT HORIZONTAL | |
0x00c5: 0x253c, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL | |
0x00c6: 0x255e, # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE | |
0x00c7: 0x255f, # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE | |
0x00c8: 0x255a, # BOX DRAWINGS DOUBLE UP AND RIGHT | |
0x00c9: 0x2554, # BOX DRAWINGS DOUBLE DOWN AND RIGHT | |
0x00ca: 0x2569, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL | |
0x00cb: 0x2566, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL | |
0x00cc: 0x2560, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT | |
0x00cd: 0x2550, # BOX DRAWINGS DOUBLE HORIZONTAL | |
0x00ce: 0x256c, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL | |
0x00cf: 0x2567, # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE | |
0x00d0: 0x2568, # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE | |
0x00d1: 0x2564, # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE | |
0x00d2: 0x2565, # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE | |
0x00d3: 0x2559, # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE | |
0x00d4: 0x2558, # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE | |
0x00d5: 0x2552, # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE | |
0x00d6: 0x2553, # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE | |
0x00d7: 0x256b, # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE | |
0x00d8: 0x256a, # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE | |
0x00d9: 0x2518, # BOX DRAWINGS LIGHT UP AND LEFT | |
0x00da: 0x250c, # BOX DRAWINGS LIGHT DOWN AND RIGHT | |
0x00db: 0x2588, # FULL BLOCK | |
0x00dc: 0x2584, # LOWER HALF BLOCK | |
0x00dd: 0x258c, # LEFT HALF BLOCK | |
0x00de: 0x2590, # RIGHT HALF BLOCK | |
0x00df: 0x2580, # UPPER HALF BLOCK | |
0x00e0: 0x03b1, # GREEK SMALL LETTER ALPHA | |
0x00e1: 0x00df, # LATIN SMALL LETTER SHARP S | |
0x00e2: 0x0393, # GREEK CAPITAL LETTER GAMMA | |
0x00e3: 0x03c0, # GREEK SMALL LETTER PI | |
0x00e4: 0x03a3, # GREEK CAPITAL LETTER SIGMA | |
0x00e5: 0x03c3, # GREEK SMALL LETTER SIGMA | |
0x00e6: 0x00b5, # MICRO SIGN | |
0x00e7: 0x03c4, # GREEK SMALL LETTER TAU | |
0x00e8: 0x03a6, # GREEK CAPITAL LETTER PHI | |
0x00e9: 0x0398, # GREEK CAPITAL LETTER THETA | |
0x00ea: 0x03a9, # GREEK CAPITAL LETTER OMEGA | |
0x00eb: 0x03b4, # GREEK SMALL LETTER DELTA | |
0x00ec: 0x221e, # INFINITY | |
0x00ed: 0x03c6, # GREEK SMALL LETTER PHI | |
0x00ee: 0x03b5, # GREEK SMALL LETTER EPSILON | |
0x00ef: 0x2229, # INTERSECTION | |
0x00f0: 0x2261, # IDENTICAL TO | |
0x00f1: 0x00b1, # PLUS-MINUS SIGN | |
0x00f2: 0x2265, # GREATER-THAN OR EQUAL TO | |
0x00f3: 0x2264, # LESS-THAN OR EQUAL TO | |
0x00f4: 0x2320, # TOP HALF INTEGRAL | |
0x00f5: 0x2321, # BOTTOM HALF INTEGRAL | |
0x00f6: 0x00f7, # DIVISION SIGN | |
0x00f7: 0x2248, # ALMOST EQUAL TO | |
0x00f8: 0x00b0, # DEGREE SIGN | |
0x00f9: 0x2219, # BULLET OPERATOR | |
0x00fa: 0x00b7, # MIDDLE DOT | |
0x00fb: 0x221a, # SQUARE ROOT | |
0x00fc: 0x207f, # SUPERSCRIPT LATIN SMALL LETTER N | |
0x00fd: 0x00b2, # SUPERSCRIPT TWO | |
0x00fe: 0x25a0, # BLACK SQUARE | |
0x00ff: 0x00a0, # NO-BREAK SPACE | |
}) | |
### Decoding Table | |
decoding_table = ( | |
'\x00' # 0x0000 -> NULL | |
'\x01' # 0x0001 -> START OF HEADING | |
'\x02' # 0x0002 -> START OF TEXT | |
'\x03' # 0x0003 -> END OF TEXT | |
'\x04' # 0x0004 -> END OF TRANSMISSION | |
'\x05' # 0x0005 -> ENQUIRY | |
'\x06' # 0x0006 -> ACKNOWLEDGE | |
'\x07' # 0x0007 -> BELL | |
'\x08' # 0x0008 -> BACKSPACE | |
'\t' # 0x0009 -> HORIZONTAL TABULATION | |
'\n' # 0x000a -> LINE FEED | |
'\x0b' # 0x000b -> VERTICAL TABULATION | |
'\x0c' # 0x000c -> FORM FEED | |
'\r' # 0x000d -> CARRIAGE RETURN | |
'\x0e' # 0x000e -> SHIFT OUT | |
'\x0f' # 0x000f -> SHIFT IN | |
'\x10' # 0x0010 -> DATA LINK ESCAPE | |
'\x11' # 0x0011 -> DEVICE CONTROL ONE | |
'\x12' # 0x0012 -> DEVICE CONTROL TWO | |
'\x13' # 0x0013 -> DEVICE CONTROL THREE | |
'\x14' # 0x0014 -> DEVICE CONTROL FOUR | |
'\x15' # 0x0015 -> NEGATIVE ACKNOWLEDGE | |
'\x16' # 0x0016 -> SYNCHRONOUS IDLE | |
'\x17' # 0x0017 -> END OF TRANSMISSION BLOCK | |
'\x18' # 0x0018 -> CANCEL | |
'\x19' # 0x0019 -> END OF MEDIUM | |
'\x1a' # 0x001a -> SUBSTITUTE | |
'\x1b' # 0x001b -> ESCAPE | |
'\x1c' # 0x001c -> FILE SEPARATOR | |
'\x1d' # 0x001d -> GROUP SEPARATOR | |
'\x1e' # 0x001e -> RECORD SEPARATOR | |
'\x1f' # 0x001f -> UNIT SEPARATOR | |
' ' # 0x0020 -> SPACE | |
'!' # 0x0021 -> EXCLAMATION MARK | |
'"' # 0x0022 -> QUOTATION MARK | |
'#' # 0x0023 -> NUMBER SIGN | |
'$' # 0x0024 -> DOLLAR SIGN | |
'%' # 0x0025 -> PERCENT SIGN | |
'&' # 0x0026 -> AMPERSAND | |
"'" # 0x0027 -> APOSTROPHE | |
'(' # 0x0028 -> LEFT PARENTHESIS | |
')' # 0x0029 -> RIGHT PARENTHESIS | |
'*' # 0x002a -> ASTERISK | |
'+' # 0x002b -> PLUS SIGN | |
',' # 0x002c -> COMMA | |
'-' # 0x002d -> HYPHEN-MINUS | |
'.' # 0x002e -> FULL STOP | |
'/' # 0x002f -> SOLIDUS | |
'0' # 0x0030 -> DIGIT ZERO | |
'1' # 0x0031 -> DIGIT ONE | |
'2' # 0x0032 -> DIGIT TWO | |
'3' # 0x0033 -> DIGIT THREE | |
'4' # 0x0034 -> DIGIT FOUR | |
'5' # 0x0035 -> DIGIT FIVE | |
'6' # 0x0036 -> DIGIT SIX | |
'7' # 0x0037 -> DIGIT SEVEN | |
'8' # 0x0038 -> DIGIT EIGHT | |
'9' # 0x0039 -> DIGIT NINE | |
':' # 0x003a -> COLON | |
';' # 0x003b -> SEMICOLON | |
'<' # 0x003c -> LESS-THAN SIGN | |
'=' # 0x003d -> EQUALS SIGN | |
'>' # 0x003e -> GREATER-THAN SIGN | |
'?' # 0x003f -> QUESTION MARK | |
'@' # 0x0040 -> COMMERCIAL AT | |
'A' # 0x0041 -> LATIN CAPITAL LETTER A | |
'B' # 0x0042 -> LATIN CAPITAL LETTER B | |
'C' # 0x0043 -> LATIN CAPITAL LETTER C | |
'D' # 0x0044 -> LATIN CAPITAL LETTER D | |
'E' # 0x0045 -> LATIN CAPITAL LETTER E | |
'F' # 0x0046 -> LATIN CAPITAL LETTER F | |
'G' # 0x0047 -> LATIN CAPITAL LETTER G | |
'H' # 0x0048 -> LATIN CAPITAL LETTER H | |
'I' # 0x0049 -> LATIN CAPITAL LETTER I | |
'J' # 0x004a -> LATIN CAPITAL LETTER J | |
'K' # 0x004b -> LATIN CAPITAL LETTER K | |
'L' # 0x004c -> LATIN CAPITAL LETTER L | |
'M' # 0x004d -> LATIN CAPITAL LETTER M | |
'N' # 0x004e -> LATIN CAPITAL LETTER N | |
'O' # 0x004f -> LATIN CAPITAL LETTER O | |
'P' # 0x0050 -> LATIN CAPITAL LETTER P | |
'Q' # 0x0051 -> LATIN CAPITAL LETTER Q | |
'R' # 0x0052 -> LATIN CAPITAL LETTER R | |
'S' # 0x0053 -> LATIN CAPITAL LETTER S | |
'T' # 0x0054 -> LATIN CAPITAL LETTER T | |
'U' # 0x0055 -> LATIN CAPITAL LETTER U | |
'V' # 0x0056 -> LATIN CAPITAL LETTER V | |
'W' # 0x0057 -> LATIN CAPITAL LETTER W | |
'X' # 0x0058 -> LATIN CAPITAL LETTER X | |
'Y' # 0x0059 -> LATIN CAPITAL LETTER Y | |
'Z' # 0x005a -> LATIN CAPITAL LETTER Z | |
'[' # 0x005b -> LEFT SQUARE BRACKET | |
'\\' # 0x005c -> REVERSE SOLIDUS | |
']' # 0x005d -> RIGHT SQUARE BRACKET | |
'^' # 0x005e -> CIRCUMFLEX ACCENT | |
'_' # 0x005f -> LOW LINE | |
'`' # 0x0060 -> GRAVE ACCENT | |
'a' # 0x0061 -> LATIN SMALL LETTER A | |
'b' # 0x0062 -> LATIN SMALL LETTER B | |
'c' # 0x0063 -> LATIN SMALL LETTER C | |
'd' # 0x0064 -> LATIN SMALL LETTER D | |
'e' # 0x0065 -> LATIN SMALL LETTER E | |
'f' # 0x0066 -> LATIN SMALL LETTER F | |
'g' # 0x0067 -> LATIN SMALL LETTER G | |
'h' # 0x0068 -> LATIN SMALL LETTER H | |
'i' # 0x0069 -> LATIN SMALL LETTER I | |
'j' # 0x006a -> LATIN SMALL LETTER J | |
'k' # 0x006b -> LATIN SMALL LETTER K | |
'l' # 0x006c -> LATIN SMALL LETTER L | |
'm' # 0x006d -> LATIN SMALL LETTER M | |
'n' # 0x006e -> LATIN SMALL LETTER N | |
'o' # 0x006f -> LATIN SMALL LETTER O | |
'p' # 0x0070 -> LATIN SMALL LETTER P | |
'q' # 0x0071 -> LATIN SMALL LETTER Q | |
'r' # 0x0072 -> LATIN SMALL LETTER R | |
's' # 0x0073 -> LATIN SMALL LETTER S | |
't' # 0x0074 -> LATIN SMALL LETTER T | |
'u' # 0x0075 -> LATIN SMALL LETTER U | |
'v' # 0x0076 -> LATIN SMALL LETTER V | |
'w' # 0x0077 -> LATIN SMALL LETTER W | |
'x' # 0x0078 -> LATIN SMALL LETTER X | |
'y' # 0x0079 -> LATIN SMALL LETTER Y | |
'z' # 0x007a -> LATIN SMALL LETTER Z | |
'{' # 0x007b -> LEFT CURLY BRACKET | |
'|' # 0x007c -> VERTICAL LINE | |
'}' # 0x007d -> RIGHT CURLY BRACKET | |
'~' # 0x007e -> TILDE | |
'\x7f' # 0x007f -> DELETE | |
'\xc7' # 0x0080 -> LATIN CAPITAL LETTER C WITH CEDILLA | |
'\xfc' # 0x0081 -> LATIN SMALL LETTER U WITH DIAERESIS | |
'\xe9' # 0x0082 -> LATIN SMALL LETTER E WITH ACUTE | |
'\xe2' # 0x0083 -> LATIN SMALL LETTER A WITH CIRCUMFLEX | |
'\xe4' # 0x0084 -> LATIN SMALL LETTER A WITH DIAERESIS | |
'\xe0' # 0x0085 -> LATIN SMALL LETTER A WITH GRAVE | |
'\xe5' # 0x0086 -> LATIN SMALL LETTER A WITH RING ABOVE | |
'\xe7' # 0x0087 -> LATIN SMALL LETTER C WITH CEDILLA | |
'\xea' # 0x0088 -> LATIN SMALL LETTER E WITH CIRCUMFLEX | |
'\xeb' # 0x0089 -> LATIN SMALL LETTER E WITH DIAERESIS | |
'\xe8' # 0x008a -> LATIN SMALL LETTER E WITH GRAVE | |
'\xef' # 0x008b -> LATIN SMALL LETTER I WITH DIAERESIS | |
'\xee' # 0x008c -> LATIN SMALL LETTER I WITH CIRCUMFLEX | |
'\xec' # 0x008d -> LATIN SMALL LETTER I WITH GRAVE | |
'\xc4' # 0x008e -> LATIN CAPITAL LETTER A WITH DIAERESIS | |
'\xc5' # 0x008f -> LATIN CAPITAL LETTER A WITH RING ABOVE | |
'\xc9' # 0x0090 -> LATIN CAPITAL LETTER E WITH ACUTE | |
'\xe6' # 0x0091 -> LATIN SMALL LIGATURE AE | |
'\xc6' # 0x0092 -> LATIN CAPITAL LIGATURE AE | |
'\xf4' # 0x0093 -> LATIN SMALL LETTER O WITH CIRCUMFLEX | |
'\xf6' # 0x0094 -> LATIN SMALL LETTER O WITH DIAERESIS | |
'\xf2' # 0x0095 -> LATIN SMALL LETTER O WITH GRAVE | |
'\xfb' # 0x0096 -> LATIN SMALL LETTER U WITH CIRCUMFLEX | |
'\xf9' # 0x0097 -> LATIN SMALL LETTER U WITH GRAVE | |
'\xff' # 0x0098 -> LATIN SMALL LETTER Y WITH DIAERESIS | |
'\xd6' # 0x0099 -> LATIN CAPITAL LETTER O WITH DIAERESIS | |
'\xdc' # 0x009a -> LATIN CAPITAL LETTER U WITH DIAERESIS | |
'\xa2' # 0x009b -> CENT SIGN | |
'\xa3' # 0x009c -> POUND SIGN | |
'\xa5' # 0x009d -> YEN SIGN | |
'\u20a7' # 0x009e -> PESETA SIGN | |
'\u0192' # 0x009f -> LATIN SMALL LETTER F WITH HOOK | |
'\xe1' # 0x00a0 -> LATIN SMALL LETTER A WITH ACUTE | |
'\xed' # 0x00a1 -> LATIN SMALL LETTER I WITH ACUTE | |
'\xf3' # 0x00a2 -> LATIN SMALL LETTER O WITH ACUTE | |
'\xfa' # 0x00a3 -> LATIN SMALL LETTER U WITH ACUTE | |
'\xf1' # 0x00a4 -> LATIN SMALL LETTER N WITH TILDE | |
'\xd1' # 0x00a5 -> LATIN CAPITAL LETTER N WITH TILDE | |
'\xaa' # 0x00a6 -> FEMININE ORDINAL INDICATOR | |
'\xba' # 0x00a7 -> MASCULINE ORDINAL INDICATOR | |
'\xbf' # 0x00a8 -> INVERTED QUESTION MARK | |
'\u2310' # 0x00a9 -> REVERSED NOT SIGN | |
'\xac' # 0x00aa -> NOT SIGN | |
'\xbd' # 0x00ab -> VULGAR FRACTION ONE HALF | |
'\xbc' # 0x00ac -> VULGAR FRACTION ONE QUARTER | |
'\xa1' # 0x00ad -> INVERTED EXCLAMATION MARK | |
'\xab' # 0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK | |
'\xbb' # 0x00af -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK | |
'\u2591' # 0x00b0 -> LIGHT SHADE | |
'\u2592' # 0x00b1 -> MEDIUM SHADE | |
'\u2593' # 0x00b2 -> DARK SHADE | |
'\u2502' # 0x00b3 -> BOX DRAWINGS LIGHT VERTICAL | |
'\u2524' # 0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT | |
'\u2561' # 0x00b5 -> BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE | |
'\u2562' # 0x00b6 -> BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE | |
'\u2556' # 0x00b7 -> BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE | |
'\u2555' # 0x00b8 -> BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE | |
'\u2563' # 0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT | |
'\u2551' # 0x00ba -> BOX DRAWINGS DOUBLE VERTICAL | |
'\u2557' # 0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT | |
'\u255d' # 0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT | |
'\u255c' # 0x00bd -> BOX DRAWINGS UP DOUBLE AND LEFT SINGLE | |
'\u255b' # 0x00be -> BOX DRAWINGS UP SINGLE AND LEFT DOUBLE | |
'\u2510' # 0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT | |
'\u2514' # 0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT | |
'\u2534' # 0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL | |
'\u252c' # 0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL | |
'\u251c' # 0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT | |
'\u2500' # 0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL | |
'\u253c' # 0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL | |
'\u255e' # 0x00c6 -> BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE | |
'\u255f' # 0x00c7 -> BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE | |
'\u255a' # 0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT | |
'\u2554' # 0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT | |
'\u2569' # 0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL | |
'\u2566' # 0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL | |
'\u2560' # 0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT | |
'\u2550' # 0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL | |
'\u256c' # 0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL | |
'\u2567' # 0x00cf -> BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE | |
'\u2568' # 0x00d0 -> BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE | |
'\u2564' # 0x00d1 -> BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE | |
'\u2565' # 0x00d2 -> BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE | |
'\u2559' # 0x00d3 -> BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE | |
'\u2558' # 0x00d4 -> BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE | |
'\u2552' # 0x00d5 -> BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE | |
'\u2553' # 0x00d6 -> BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE | |
'\u256b' # 0x00d7 -> BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE | |
'\u256a' # 0x00d8 -> BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE | |
'\u2518' # 0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT | |
'\u250c' # 0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT | |
'\u2588' # 0x00db -> FULL BLOCK | |
'\u2584' # 0x00dc -> LOWER HALF BLOCK | |
'\u258c' # 0x00dd -> LEFT HALF BLOCK | |
'\u2590' # 0x00de -> RIGHT HALF BLOCK | |
'\u2580' # 0x00df -> UPPER HALF BLOCK | |
'\u03b1' # 0x00e0 -> GREEK SMALL LETTER ALPHA | |
'\xdf' # 0x00e1 -> LATIN SMALL LETTER SHARP S | |
'\u0393' # 0x00e2 -> GREEK CAPITAL LETTER GAMMA | |
'\u03c0' # 0x00e3 -> GREEK SMALL LETTER PI | |
'\u03a3' # 0x00e4 -> GREEK CAPITAL LETTER SIGMA | |
'\u03c3' # 0x00e5 -> GREEK SMALL LETTER SIGMA | |
'\xb5' # 0x00e6 -> MICRO SIGN | |
'\u03c4' # 0x00e7 -> GREEK SMALL LETTER TAU | |
'\u03a6' # 0x00e8 -> GREEK CAPITAL LETTER PHI | |
'\u0398' # 0x00e9 -> GREEK CAPITAL LETTER THETA | |
'\u03a9' # 0x00ea -> GREEK CAPITAL LETTER OMEGA | |
'\u03b4' # 0x00eb -> GREEK SMALL LETTER DELTA | |
'\u221e' # 0x00ec -> INFINITY | |
'\u03c6' # 0x00ed -> GREEK SMALL LETTER PHI | |
'\u03b5' # 0x00ee -> GREEK SMALL LETTER EPSILON | |
'\u2229' # 0x00ef -> INTERSECTION | |
'\u2261' # 0x00f0 -> IDENTICAL TO | |
'\xb1' # 0x00f1 -> PLUS-MINUS SIGN | |
'\u2265' # 0x00f2 -> GREATER-THAN OR EQUAL TO | |
'\u2264' # 0x00f3 -> LESS-THAN OR EQUAL TO | |
'\u2320' # 0x00f4 -> TOP HALF INTEGRAL | |
'\u2321' # 0x00f5 -> BOTTOM HALF INTEGRAL | |
'\xf7' # 0x00f6 -> DIVISION SIGN | |
'\u2248' # 0x00f7 -> ALMOST EQUAL TO | |
'\xb0' # 0x00f8 -> DEGREE SIGN | |
'\u2219' # 0x00f9 -> BULLET OPERATOR | |
'\xb7' # 0x00fa -> MIDDLE DOT | |
'\u221a' # 0x00fb -> SQUARE ROOT | |
'\u207f' # 0x00fc -> SUPERSCRIPT LATIN SMALL LETTER N | |
'\xb2' # 0x00fd -> SUPERSCRIPT TWO | |
'\u25a0' # 0x00fe -> BLACK SQUARE | |
'\xa0' # 0x00ff -> NO-BREAK SPACE | |
) | |
### Encoding Map | |
encoding_map = { | |
0x0000: 0x0000, # NULL | |
0x0001: 0x0001, # START OF HEADING | |
0x0002: 0x0002, # START OF TEXT | |
0x0003: 0x0003, # END OF TEXT | |
0x0004: 0x0004, # END OF TRANSMISSION | |
0x0005: 0x0005, # ENQUIRY | |
0x0006: 0x0006, # ACKNOWLEDGE | |
0x0007: 0x0007, # BELL | |
0x0008: 0x0008, # BACKSPACE | |
0x0009: 0x0009, # HORIZONTAL TABULATION | |
0x000a: 0x000a, # LINE FEED | |
0x000b: 0x000b, # VERTICAL TABULATION | |
0x000c: 0x000c, # FORM FEED | |
0x000d: 0x000d, # CARRIAGE RETURN | |
0x000e: 0x000e, # SHIFT OUT | |
0x000f: 0x000f, # SHIFT IN | |
0x0010: 0x0010, # DATA LINK ESCAPE | |
0x0011: 0x0011, # DEVICE CONTROL ONE | |
0x0012: 0x0012, # DEVICE CONTROL TWO | |
0x0013: 0x0013, # DEVICE CONTROL THREE | |
0x0014: 0x0014, # DEVICE CONTROL FOUR | |
0x0015: 0x0015, # NEGATIVE ACKNOWLEDGE | |
0x0016: 0x0016, # SYNCHRONOUS IDLE | |
0x0017: 0x0017, # END OF TRANSMISSION BLOCK | |
0x0018: 0x0018, # CANCEL | |
0x0019: 0x0019, # END OF MEDIUM | |
0x001a: 0x001a, # SUBSTITUTE | |
0x001b: 0x001b, # ESCAPE | |
0x001c: 0x001c, # FILE SEPARATOR | |
0x001d: 0x001d, # GROUP SEPARATOR | |
0x001e: 0x001e, # RECORD SEPARATOR | |
0x001f: 0x001f, # UNIT SEPARATOR | |
0x0020: 0x0020, # SPACE | |
0x0021: 0x0021, # EXCLAMATION MARK | |
0x0022: 0x0022, # QUOTATION MARK | |
0x0023: 0x0023, # NUMBER SIGN | |
0x0024: 0x0024, # DOLLAR SIGN | |
0x0025: 0x0025, # PERCENT SIGN | |
0x0026: 0x0026, # AMPERSAND | |
0x0027: 0x0027, # APOSTROPHE | |
0x0028: 0x0028, # LEFT PARENTHESIS | |
0x0029: 0x0029, # RIGHT PARENTHESIS | |
0x002a: 0x002a, # ASTERISK | |
0x002b: 0x002b, # PLUS SIGN | |
0x002c: 0x002c, # COMMA | |
0x002d: 0x002d, # HYPHEN-MINUS | |
0x002e: 0x002e, # FULL STOP | |
0x002f: 0x002f, # SOLIDUS | |
0x0030: 0x0030, # DIGIT ZERO | |
0x0031: 0x0031, # DIGIT ONE | |
0x0032: 0x0032, # DIGIT TWO | |
0x0033: 0x0033, # DIGIT THREE | |
0x0034: 0x0034, # DIGIT FOUR | |
0x0035: 0x0035, # DIGIT FIVE | |
0x0036: 0x0036, # DIGIT SIX | |
0x0037: 0x0037, # DIGIT SEVEN | |
0x0038: 0x0038, # DIGIT EIGHT | |
0x0039: 0x0039, # DIGIT NINE | |
0x003a: 0x003a, # COLON | |
0x003b: 0x003b, # SEMICOLON | |
0x003c: 0x003c, # LESS-THAN SIGN | |
0x003d: 0x003d, # EQUALS SIGN | |
0x003e: 0x003e, # GREATER-THAN SIGN | |
0x003f: 0x003f, # QUESTION MARK | |
0x0040: 0x0040, # COMMERCIAL AT | |
0x0041: 0x0041, # LATIN CAPITAL LETTER A | |
0x0042: 0x0042, # LATIN CAPITAL LETTER B | |
0x0043: 0x0043, # LATIN CAPITAL LETTER C | |
0x0044: 0x0044, # LATIN CAPITAL LETTER D | |
0x0045: 0x0045, # LATIN CAPITAL LETTER E | |
0x0046: 0x0046, # LATIN CAPITAL LETTER F | |
0x0047: 0x0047, # LATIN CAPITAL LETTER G | |
0x0048: 0x0048, # LATIN CAPITAL LETTER H | |
0x0049: 0x0049, # LATIN CAPITAL LETTER I | |
0x004a: 0x004a, # LATIN CAPITAL LETTER J | |
0x004b: 0x004b, # LATIN CAPITAL LETTER K | |
0x004c: 0x004c, # LATIN CAPITAL LETTER L | |
0x004d: 0x004d, # LATIN CAPITAL LETTER M | |
0x004e: 0x004e, # LATIN CAPITAL LETTER N | |
0x004f: 0x004f, # LATIN CAPITAL LETTER O | |
0x0050: 0x0050, # LATIN CAPITAL LETTER P | |
0x0051: 0x0051, # LATIN CAPITAL LETTER Q | |
0x0052: 0x0052, # LATIN CAPITAL LETTER R | |
0x0053: 0x0053, # LATIN CAPITAL LETTER S | |
0x0054: 0x0054, # LATIN CAPITAL LETTER T | |
0x0055: 0x0055, # LATIN CAPITAL LETTER U | |
0x0056: 0x0056, # LATIN CAPITAL LETTER V | |
0x0057: 0x0057, # LATIN CAPITAL LETTER W | |
0x0058: 0x0058, # LATIN CAPITAL LETTER X | |
0x0059: 0x0059, # LATIN CAPITAL LETTER Y | |
0x005a: 0x005a, # LATIN CAPITAL LETTER Z | |
0x005b: 0x005b, # LEFT SQUARE BRACKET | |
0x005c: 0x005c, # REVERSE SOLIDUS | |
0x005d: 0x005d, # RIGHT SQUARE BRACKET | |
0x005e: 0x005e, # CIRCUMFLEX ACCENT | |
0x005f: 0x005f, # LOW LINE | |
0x0060: 0x0060, # GRAVE ACCENT | |
0x0061: 0x0061, # LATIN SMALL LETTER A | |
0x0062: 0x0062, # LATIN SMALL LETTER B | |
0x0063: 0x0063, # LATIN SMALL LETTER C | |
0x0064: 0x0064, # LATIN SMALL LETTER D | |
0x0065: 0x0065, # LATIN SMALL LETTER E | |
0x0066: 0x0066, # LATIN SMALL LETTER F | |
0x0067: 0x0067, # LATIN SMALL LETTER G | |
0x0068: 0x0068, # LATIN SMALL LETTER H | |
0x0069: 0x0069, # LATIN SMALL LETTER I | |
0x006a: 0x006a, # LATIN SMALL LETTER J | |
0x006b: 0x006b, # LATIN SMALL LETTER K | |
0x006c: 0x006c, # LATIN SMALL LETTER L | |
0x006d: 0x006d, # LATIN SMALL LETTER M | |
0x006e: 0x006e, # LATIN SMALL LETTER N | |
0x006f: 0x006f, # LATIN SMALL LETTER O | |
0x0070: 0x0070, # LATIN SMALL LETTER P | |
0x0071: 0x0071, # LATIN SMALL LETTER Q | |
0x0072: 0x0072, # LATIN SMALL LETTER R | |
0x0073: 0x0073, # LATIN SMALL LETTER S | |
0x0074: 0x0074, # LATIN SMALL LETTER T | |
0x0075: 0x0075, # LATIN SMALL LETTER U | |
0x0076: 0x0076, # LATIN SMALL LETTER V | |
0x0077: 0x0077, # LATIN SMALL LETTER W | |
0x0078: 0x0078, # LATIN SMALL LETTER X | |
0x0079: 0x0079, # LATIN SMALL LETTER Y | |
0x007a: 0x007a, # LATIN SMALL LETTER Z | |
0x007b: 0x007b, # LEFT CURLY BRACKET | |
0x007c: 0x007c, # VERTICAL LINE | |
0x007d: 0x007d, # RIGHT CURLY BRACKET | |
0x007e: 0x007e, # TILDE | |
0x007f: 0x007f, # DELETE | |
0x00a0: 0x00ff, # NO-BREAK SPACE | |
0x00a1: 0x00ad, # INVERTED EXCLAMATION MARK | |
0x00a2: 0x009b, # CENT SIGN | |
0x00a3: 0x009c, # POUND SIGN | |
0x00a5: 0x009d, # YEN SIGN | |
0x00aa: 0x00a6, # FEMININE ORDINAL INDICATOR | |
0x00ab: 0x00ae, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK | |
0x00ac: 0x00aa, # NOT SIGN | |
0x00b0: 0x00f8, # DEGREE SIGN | |
0x00b1: 0x00f1, # PLUS-MINUS SIGN | |
0x00b2: 0x00fd, # SUPERSCRIPT TWO | |
0x00b5: 0x00e6, # MICRO SIGN | |
0x00b7: 0x00fa, # MIDDLE DOT | |
0x00ba: 0x00a7, # MASCULINE ORDINAL INDICATOR | |
0x00bb: 0x00af, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK | |
0x00bc: 0x00ac, # VULGAR FRACTION ONE QUARTER | |
0x00bd: 0x00ab, # VULGAR FRACTION ONE HALF | |
0x00bf: 0x00a8, # INVERTED QUESTION MARK | |
0x00c4: 0x008e, # LATIN CAPITAL LETTER A WITH DIAERESIS | |
0x00c5: 0x008f, # LATIN CAPITAL LETTER A WITH RING ABOVE | |
0x00c6: 0x0092, # LATIN CAPITAL LIGATURE AE | |
0x00c7: 0x0080, # LATIN CAPITAL LETTER C WITH CEDILLA | |
0x00c9: 0x0090, # LATIN CAPITAL LETTER E WITH ACUTE | |
0x00d1: 0x00a5, # LATIN CAPITAL LETTER N WITH TILDE | |
0x00d6: 0x0099, # LATIN CAPITAL LETTER O WITH DIAERESIS | |
0x00dc: 0x009a, # LATIN CAPITAL LETTER U WITH DIAERESIS | |
0x00df: 0x00e1, # LATIN SMALL LETTER SHARP S | |
0x00e0: 0x0085, # LATIN SMALL LETTER A WITH GRAVE | |
0x00e1: 0x00a0, # LATIN SMALL LETTER A WITH ACUTE | |
0x00e2: 0x0083, # LATIN SMALL LETTER A WITH CIRCUMFLEX | |
0x00e4: 0x0084, # LATIN SMALL LETTER A WITH DIAERESIS | |
0x00e5: 0x0086, # LATIN SMALL LETTER A WITH RING ABOVE | |
0x00e6: 0x0091, # LATIN SMALL LIGATURE AE | |
0x00e7: 0x0087, # LATIN SMALL LETTER C WITH CEDILLA | |
0x00e8: 0x008a, # LATIN SMALL LETTER E WITH GRAVE | |
0x00e9: 0x0082, # LATIN SMALL LETTER E WITH ACUTE | |
0x00ea: 0x0088, # LATIN SMALL LETTER E WITH CIRCUMFLEX | |
0x00eb: 0x0089, # LATIN SMALL LETTER E WITH DIAERESIS | |
0x00ec: 0x008d, # LATIN SMALL LETTER I WITH GRAVE | |
0x00ed: 0x00a1, # LATIN SMALL LETTER I WITH ACUTE | |
0x00ee: 0x008c, # LATIN SMALL LETTER I WITH CIRCUMFLEX | |
0x00ef: 0x008b, # LATIN SMALL LETTER I WITH DIAERESIS | |
0x00f1: 0x00a4, # LATIN SMALL LETTER N WITH TILDE | |
0x00f2: 0x0095, # LATIN SMALL LETTER O WITH GRAVE | |
0x00f3: 0x00a2, # LATIN SMALL LETTER O WITH ACUTE | |
0x00f4: 0x0093, # LATIN SMALL LETTER O WITH CIRCUMFLEX | |
0x00f6: 0x0094, # LATIN SMALL LETTER O WITH DIAERESIS | |
0x00f7: 0x00f6, # DIVISION SIGN | |
0x00f9: 0x0097, # LATIN SMALL LETTER U WITH GRAVE | |
0x00fa: 0x00a3, # LATIN SMALL LETTER U WITH ACUTE | |
0x00fb: 0x0096, # LATIN SMALL LETTER U WITH CIRCUMFLEX | |
0x00fc: 0x0081, # LATIN SMALL LETTER U WITH DIAERESIS | |
0x00ff: 0x0098, # LATIN SMALL LETTER Y WITH DIAERESIS | |
0x0192: 0x009f, # LATIN SMALL LETTER F WITH HOOK | |
0x0393: 0x00e2, # GREEK CAPITAL LETTER GAMMA | |
0x0398: 0x00e9, # GREEK CAPITAL LETTER THETA | |
0x03a3: 0x00e4, # GREEK CAPITAL LETTER SIGMA | |
0x03a6: 0x00e8, # GREEK CAPITAL LETTER PHI | |
0x03a9: 0x00ea, # GREEK CAPITAL LETTER OMEGA | |
0x03b1: 0x00e0, # GREEK SMALL LETTER ALPHA | |
0x03b4: 0x00eb, # GREEK SMALL LETTER DELTA | |
0x03b5: 0x00ee, # GREEK SMALL LETTER EPSILON | |
0x03c0: 0x00e3, # GREEK SMALL LETTER PI | |
0x03c3: 0x00e5, # GREEK SMALL LETTER SIGMA | |
0x03c4: 0x00e7, # GREEK SMALL LETTER TAU | |
0x03c6: 0x00ed, # GREEK SMALL LETTER PHI | |
0x207f: 0x00fc, # SUPERSCRIPT LATIN SMALL LETTER N | |
0x20a7: 0x009e, # PESETA SIGN | |
0x2219: 0x00f9, # BULLET OPERATOR | |
0x221a: 0x00fb, # SQUARE ROOT | |
0x221e: 0x00ec, # INFINITY | |
0x2229: 0x00ef, # INTERSECTION | |
0x2248: 0x00f7, # ALMOST EQUAL TO | |
0x2261: 0x00f0, # IDENTICAL TO | |
0x2264: 0x00f3, # LESS-THAN OR EQUAL TO | |
0x2265: 0x00f2, # GREATER-THAN OR EQUAL TO | |
0x2310: 0x00a9, # REVERSED NOT SIGN | |
0x2320: 0x00f4, # TOP HALF INTEGRAL | |
0x2321: 0x00f5, # BOTTOM HALF INTEGRAL | |
0x2500: 0x00c4, # BOX DRAWINGS LIGHT HORIZONTAL | |
0x2502: 0x00b3, # BOX DRAWINGS LIGHT VERTICAL | |
0x250c: 0x00da, # BOX DRAWINGS LIGHT DOWN AND RIGHT | |
0x2510: 0x00bf, # BOX DRAWINGS LIGHT DOWN AND LEFT | |
0x2514: 0x00c0, # BOX DRAWINGS LIGHT UP AND RIGHT | |
0x2518: 0x00d9, # BOX DRAWINGS LIGHT UP AND LEFT | |
0x251c: 0x00c3, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT | |
0x2524: 0x00b4, # BOX DRAWINGS LIGHT VERTICAL AND LEFT | |
0x252c: 0x00c2, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL | |
0x2534: 0x00c1, # BOX DRAWINGS LIGHT UP AND HORIZONTAL | |
0x253c: 0x00c5, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL | |
0x2550: 0x00cd, # BOX DRAWINGS DOUBLE HORIZONTAL | |
0x2551: 0x00ba, # BOX DRAWINGS DOUBLE VERTICAL | |
0x2552: 0x00d5, # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE | |
0x2553: 0x00d6, # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE | |
0x2554: 0x00c9, # BOX DRAWINGS DOUBLE DOWN AND RIGHT | |
0x2555: 0x00b8, # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE | |
0x2556: 0x00b7, # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE | |
0x2557: 0x00bb, # BOX DRAWINGS DOUBLE DOWN AND LEFT | |
0x2558: 0x00d4, # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE | |
0x2559: 0x00d3, # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE | |
0x255a: 0x00c8, # BOX DRAWINGS DOUBLE UP AND RIGHT | |
0x255b: 0x00be, # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE | |
0x255c: 0x00bd, # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE | |
0x255d: 0x00bc, # BOX DRAWINGS DOUBLE UP AND LEFT | |
0x255e: 0x00c6, # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE | |
0x255f: 0x00c7, # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE | |
0x2560: 0x00cc, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT | |
0x2561: 0x00b5, # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE | |
0x2562: 0x00b6, # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE | |
0x2563: 0x00b9, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT | |
0x2564: 0x00d1, # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE | |
0x2565: 0x00d2, # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE | |
0x2566: 0x00cb, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL | |
0x2567: 0x00cf, # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE | |
0x2568: 0x00d0, # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE | |
0x2569: 0x00ca, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL | |
0x256a: 0x00d8, # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE | |
0x256b: 0x00d7, # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE | |
0x256c: 0x00ce, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL | |
0x2580: 0x00df, # UPPER HALF BLOCK | |
0x2584: 0x00dc, # LOWER HALF BLOCK | |
0x2588: 0x00db, # FULL BLOCK | |
0x258c: 0x00dd, # LEFT HALF BLOCK | |
0x2590: 0x00de, # RIGHT HALF BLOCK | |
0x2591: 0x00b0, # LIGHT SHADE | |
0x2592: 0x00b1, # MEDIUM SHADE | |
0x2593: 0x00b2, # DARK SHADE | |
0x25a0: 0x00fe, # BLACK SQUARE | |
} |
""" Python Character Mapping Codec cp500 generated from 'MAPPINGS/VENDORS/MICSFT/EBCDIC/CP500.TXT' with gencodec.py. | |
"""#" | |
import codecs | |
### Codec APIs | |
class Codec(codecs.Codec): | |
def encode(self,input,errors='strict'): | |
return codecs.charmap_encode(input,errors,encoding_table) | |
def decode(self,input,errors='strict'): | |
return codecs.charmap_decode(input,errors,decoding_table) | |
class IncrementalEncoder(codecs.IncrementalEncoder): | |
def encode(self, input, final=False): | |
return codecs.charmap_encode(input,self.errors,encoding_table)[0] | |
class IncrementalDecoder(codecs.IncrementalDecoder): | |
def decode(self, input, final=False): | |
return codecs.charmap_decode(input,self.errors,decoding_table)[0] | |
class StreamWriter(Codec,codecs.StreamWriter): | |
pass | |
class StreamReader(Codec,codecs.StreamReader): | |
pass | |
### encodings module API | |
def getregentry(): | |
return codecs.CodecInfo( | |
name='cp500', | |
encode=Codec().encode, | |
decode=Codec().decode, | |
incrementalencoder=IncrementalEncoder, | |
incrementaldecoder=IncrementalDecoder, | |
streamreader=StreamReader, | |
streamwriter=StreamWriter, | |
) | |
### Decoding Table | |
decoding_table = ( | |
'\x00' # 0x00 -> NULL | |
'\x01' # 0x01 -> START OF HEADING | |
'\x02' # 0x02 -> START OF TEXT | |
'\x03' # 0x03 -> END OF TEXT | |
'\x9c' # 0x04 -> CONTROL | |
'\t' # 0x05 -> HORIZONTAL TABULATION | |
'\x86' # 0x06 -> CONTROL | |
'\x7f' # 0x07 -> DELETE | |
'\x97' # 0x08 -> CONTROL | |
'\x8d' # 0x09 -> CONTROL | |
'\x8e' # 0x0A -> CONTROL | |
'\x0b' # 0x0B -> VERTICAL TABULATION | |
'\x0c' # 0x0C -> FORM FEED | |
'\r' # 0x0D -> CARRIAGE RETURN | |
'\x0e' # 0x0E -> SHIFT OUT | |
'\x0f' # 0x0F -> SHIFT IN | |
'\x10' # 0x10 -> DATA LINK ESCAPE | |
'\x11' # 0x11 -> DEVICE CONTROL ONE | |
'\x12' # 0x12 -> DEVICE CONTROL TWO | |
'\x13' # 0x13 -> DEVICE CONTROL THREE | |
'\x9d' # 0x14 -> CONTROL | |
'\x85' # 0x15 -> CONTROL | |
'\x08' # 0x16 -> BACKSPACE | |
'\x87' # 0x17 -> CONTROL | |
'\x18' # 0x18 -> CANCEL | |
'\x19' # 0x19 -> END OF MEDIUM | |
'\x92' # 0x1A -> CONTROL | |
'\x8f' # 0x1B -> CONTROL | |
'\x1c' # 0x1C -> FILE SEPARATOR | |
'\x1d' # 0x1D -> GROUP SEPARATOR | |
'\x1e' # 0x1E -> RECORD SEPARATOR | |
'\x1f' # 0x1F -> UNIT SEPARATOR | |
'\x80' # 0x20 -> CONTROL | |
'\x81' # 0x21 -> CONTROL | |
'\x82' # 0x22 -> CONTROL | |
'\x83' # 0x23 -> CONTROL | |
'\x84' # 0x24 -> CONTROL | |
'\n' # 0x25 -> LINE FEED | |
'\x17' # 0x26 -> END OF TRANSMISSION BLOCK | |
'\x1b' # 0x27 -> ESCAPE | |
'\x88' # 0x28 -> CONTROL | |
'\x89' # 0x29 -> CONTROL | |
'\x8a' # 0x2A -> CONTROL | |
'\x8b' # 0x2B -> CONTROL | |
'\x8c' # 0x2C -> CONTROL | |
'\x05' # 0x2D -> ENQUIRY | |
'\x06' # 0x2E -> ACKNOWLEDGE | |
'\x07' # 0x2F -> BELL | |
'\x90' # 0x30 -> CONTROL | |
'\x91' # 0x31 -> CONTROL | |
'\x16' # 0x32 -> SYNCHRONOUS IDLE | |
'\x93' # 0x33 -> CONTROL | |
'\x94' # 0x34 -> CONTROL | |
'\x95' # 0x35 -> CONTROL | |
'\x96' # 0x36 -> CONTROL | |
'\x04' # 0x37 -> END OF TRANSMISSION | |
'\x98' # 0x38 -> CONTROL | |
'\x99' # 0x39 -> CONTROL | |
'\x9a' # 0x3A -> CONTROL | |
'\x9b' # 0x3B -> CONTROL | |
'\x14' # 0x3C -> DEVICE CONTROL FOUR | |
'\x15' # 0x3D -> NEGATIVE ACKNOWLEDGE | |
'\x9e' # 0x3E -> CONTROL | |
'\x1a' # 0x3F -> SUBSTITUTE | |
' ' # 0x40 -> SPACE | |
'\xa0' # 0x41 -> NO-BREAK SPACE | |
'\xe2' # 0x42 -> LATIN SMALL LETTER A WITH CIRCUMFLEX | |
'\xe4' # 0x43 -> LATIN SMALL LETTER A WITH DIAERESIS | |
'\xe0' # 0x44 -> LATIN SMALL LETTER A WITH GRAVE | |
'\xe1' # 0x45 -> LATIN SMALL LETTER A WITH ACUTE | |
'\xe3' # 0x46 -> LATIN SMALL LETTER A WITH TILDE | |
'\xe5' # 0x47 -> LATIN SMALL LETTER A WITH RING ABOVE | |
'\xe7' # 0x48 -> LATIN SMALL LETTER C WITH CEDILLA | |
'\xf1' # 0x49 -> LATIN SMALL LETTER N WITH TILDE | |
'[' # 0x4A -> LEFT SQUARE BRACKET | |
'.' # 0x4B -> FULL STOP | |
'<' # 0x4C -> LESS-THAN SIGN | |
'(' # 0x4D -> LEFT PARENTHESIS | |
'+' # 0x4E -> PLUS SIGN | |
'!' # 0x4F -> EXCLAMATION MARK | |
'&' # 0x50 -> AMPERSAND | |
'\xe9' # 0x51 -> LATIN SMALL LETTER E WITH ACUTE | |
'\xea' # 0x52 -> LATIN SMALL LETTER E WITH CIRCUMFLEX | |
'\xeb' # 0x53 -> LATIN SMALL LETTER E WITH DIAERESIS | |
'\xe8' # 0x54 -> LATIN SMALL LETTER E WITH GRAVE | |
'\xed' # 0x55 -> LATIN SMALL LETTER I WITH ACUTE | |
'\xee' # 0x56 -> LATIN SMALL LETTER I WITH CIRCUMFLEX | |
'\xef' # 0x57 -> LATIN SMALL LETTER I WITH DIAERESIS | |
'\xec' # 0x58 -> LATIN SMALL LETTER I WITH GRAVE | |
'\xdf' # 0x59 -> LATIN SMALL LETTER SHARP S (GERMAN) | |
']' # 0x5A -> RIGHT SQUARE BRACKET | |
'$' # 0x5B -> DOLLAR SIGN | |
'*' # 0x5C -> ASTERISK | |
')' # 0x5D -> RIGHT PARENTHESIS | |
';' # 0x5E -> SEMICOLON | |
'^' # 0x5F -> CIRCUMFLEX ACCENT | |
'-' # 0x60 -> HYPHEN-MINUS | |
'/' # 0x61 -> SOLIDUS | |
'\xc2' # 0x62 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX | |
'\xc4' # 0x63 -> LATIN CAPITAL LETTER A WITH DIAERESIS | |
'\xc0' # 0x64 -> LATIN CAPITAL LETTER A WITH GRAVE | |
'\xc1' # 0x65 -> LATIN CAPITAL LETTER A WITH ACUTE | |
'\xc3' # 0x66 -> LATIN CAPITAL LETTER A WITH TILDE | |
'\xc5' # 0x67 -> LATIN CAPITAL LETTER A WITH RING ABOVE | |
'\xc7' # 0x68 -> LATIN CAPITAL LETTER C WITH CEDILLA | |
'\xd1' # 0x69 -> LATIN CAPITAL LETTER N WITH TILDE | |
'\xa6' # 0x6A -> BROKEN BAR | |
',' # 0x6B -> COMMA | |
'%' # 0x6C -> PERCENT SIGN | |
'_' # 0x6D -> LOW LINE | |
'>' # 0x6E -> GREATER-THAN SIGN | |
'?' # 0x6F -> QUESTION MARK | |
'\xf8' # 0x70 -> LATIN SMALL LETTER O WITH STROKE | |
'\xc9' # 0x71 -> LATIN CAPITAL LETTER E WITH ACUTE | |
'\xca' # 0x72 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX | |
'\xcb' # 0x73 -> LATIN CAPITAL LETTER E WITH DIAERESIS | |
'\xc8' # 0x74 -> LATIN CAPITAL LETTER E WITH GRAVE | |
'\xcd' # 0x75 -> LATIN CAPITAL LETTER I WITH ACUTE | |
'\xce' # 0x76 -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX | |
'\xcf' # 0x77 -> LATIN CAPITAL LETTER I WITH DIAERESIS | |
'\xcc' # 0x78 -> LATIN CAPITAL LETTER I WITH GRAVE | |
'`' # 0x79 -> GRAVE ACCENT | |
':' # 0x7A -> COLON | |
'#' # 0x7B -> NUMBER SIGN | |
'@' # 0x7C -> COMMERCIAL AT | |
"'" # 0x7D -> APOSTROPHE | |
'=' # 0x7E -> EQUALS SIGN | |
'"' # 0x7F -> QUOTATION MARK | |
'\xd8' # 0x80 -> LATIN CAPITAL LETTER O WITH STROKE | |
'a' # 0x81 -> LATIN SMALL LETTER A | |
'b' # 0x82 -> LATIN SMALL LETTER B | |
'c' # 0x83 -> LATIN SMALL LETTER C | |
'd' # 0x84 -> LATIN SMALL LETTER D | |
'e' # 0x85 -> LATIN SMALL LETTER E | |
'f' # 0x86 -> LATIN SMALL LETTER F | |
'g' # 0x87 -> LATIN SMALL LETTER G | |
'h' # 0x88 -> LATIN SMALL LETTER H | |
'i' # 0x89 -> LATIN SMALL LETTER I | |
'\xab' # 0x8A -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK | |
'\xbb' # 0x8B -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK | |
'\xf0' # 0x8C -> LATIN SMALL LETTER ETH (ICELANDIC) | |
'\xfd' # 0x8D -> LATIN SMALL LETTER Y WITH ACUTE | |
'\xfe' # 0x8E -> LATIN SMALL LETTER THORN (ICELANDIC) | |
'\xb1' # 0x8F -> PLUS-MINUS SIGN | |
'\xb0' # 0x90 -> DEGREE SIGN | |
'j' # 0x91 -> LATIN SMALL LETTER J | |
'k' # 0x92 -> LATIN SMALL LETTER K | |
'l' # 0x93 -> LATIN SMALL LETTER L | |
'm' # 0x94 -> LATIN SMALL LETTER M | |
'n' # 0x95 -> LATIN SMALL LETTER N | |
'o' # 0x96 -> LATIN SMALL LETTER O | |
'p' # 0x97 -> LATIN SMALL LETTER P | |
'q' # 0x98 -> LATIN SMALL LETTER Q | |
'r' # 0x99 -> LATIN SMALL LETTER R | |
'\xaa' # 0x9A -> FEMININE ORDINAL INDICATOR | |
'\xba' # 0x9B -> MASCULINE ORDINAL INDICATOR | |
'\xe6' # 0x9C -> LATIN SMALL LIGATURE AE | |
'\xb8' # 0x9D -> CEDILLA | |
'\xc6' # 0x9E -> LATIN CAPITAL LIGATURE AE | |
'\xa4' # 0x9F -> CURRENCY SIGN | |
'\xb5' # 0xA0 -> MICRO SIGN | |
'~' # 0xA1 -> TILDE | |
's' # 0xA2 -> LATIN SMALL LETTER S | |
't' # 0xA3 -> LATIN SMALL LETTER T | |
'u' # 0xA4 -> LATIN SMALL LETTER U | |
'v' # 0xA5 -> LATIN SMALL LETTER V | |
'w' # 0xA6 -> LATIN SMALL LETTER W | |
'x' # 0xA7 -> LATIN SMALL LETTER X | |
'y' # 0xA8 -> LATIN SMALL LETTER Y | |
'z' # 0xA9 -> LATIN SMALL LETTER Z | |
'\xa1' # 0xAA -> INVERTED EXCLAMATION MARK | |
'\xbf' # 0xAB -> INVERTED QUESTION MARK | |
'\xd0' # 0xAC -> LATIN CAPITAL LETTER ETH (ICELANDIC) | |
'\xdd' # 0xAD -> LATIN CAPITAL LETTER Y WITH ACUTE | |
'\xde' # 0xAE -> LATIN CAPITAL LETTER THORN (ICELANDIC) | |
'\xae' # 0xAF -> REGISTERED SIGN | |
'\xa2' # 0xB0 -> CENT SIGN | |
'\xa3' # 0xB1 -> POUND SIGN | |
'\xa5' # 0xB2 -> YEN SIGN | |
'\xb7' # 0xB3 -> MIDDLE DOT | |
'\xa9' # 0xB4 -> COPYRIGHT SIGN | |
'\xa7' # 0xB5 -> SECTION SIGN | |
'\xb6' # 0xB6 -> PILCROW SIGN | |
'\xbc' # 0xB7 -> VULGAR FRACTION ONE QUARTER | |
'\xbd' # 0xB8 -> VULGAR FRACTION ONE HALF | |
'\xbe' # 0xB9 -> VULGAR FRACTION THREE QUARTERS | |
'\xac' # 0xBA -> NOT SIGN | |
'|' # 0xBB -> VERTICAL LINE | |
'\xaf' # 0xBC -> MACRON | |
'\xa8' # 0xBD -> DIAERESIS | |
'\xb4' # 0xBE -> ACUTE ACCENT | |
'\xd7' # 0xBF -> MULTIPLICATION SIGN | |
'{' # 0xC0 -> LEFT CURLY BRACKET | |
'A' # 0xC1 -> LATIN CAPITAL LETTER A | |
'B' # 0xC2 -> LATIN CAPITAL LETTER B | |
'C' # 0xC3 -> LATIN CAPITAL LETTER C | |
'D' # 0xC4 -> LATIN CAPITAL LETTER D | |
'E' # 0xC5 -> LATIN CAPITAL LETTER E | |
'F' # 0xC6 -> LATIN CAPITAL LETTER F | |
'G' # 0xC7 -> LATIN CAPITAL LETTER G | |
'H' # 0xC8 -> LATIN CAPITAL LETTER H | |
'I' # 0xC9 -> LATIN CAPITAL LETTER I | |
'\xad' # 0xCA -> SOFT HYPHEN | |
'\xf4' # 0xCB -> LATIN SMALL LETTER O WITH CIRCUMFLEX | |
'\xf6' # 0xCC -> LATIN SMALL LETTER O WITH DIAERESIS | |
'\xf2' # 0xCD -> LATIN SMALL LETTER O WITH GRAVE | |
'\xf3' # 0xCE -> LATIN SMALL LETTER O WITH ACUTE | |
'\xf5' # 0xCF -> LATIN SMALL LETTER O WITH TILDE | |
'}' # 0xD0 -> RIGHT CURLY BRACKET | |
'J' # 0xD1 -> LATIN CAPITAL LETTER J | |
'K' # 0xD2 -> LATIN CAPITAL LETTER K | |
'L' # 0xD3 -> LATIN CAPITAL LETTER L | |
'M' # 0xD4 -> LATIN CAPITAL LETTER M | |
'N' # 0xD5 -> LATIN CAPITAL LETTER N | |
'O' # 0xD6 -> LATIN CAPITAL LETTER O | |
'P' # 0xD7 -> LATIN CAPITAL LETTER P | |
'Q' # 0xD8 -> LATIN CAPITAL LETTER Q | |
'R' # 0xD9 -> LATIN CAPITAL LETTER R | |
'\xb9' # 0xDA -> SUPERSCRIPT ONE | |
'\xfb' # 0xDB -> LATIN SMALL LETTER U WITH CIRCUMFLEX | |
'\xfc' # 0xDC -> LATIN SMALL LETTER U WITH DIAERESIS | |
'\xf9' # 0xDD -> LATIN SMALL LETTER U WITH GRAVE | |
'\xfa' # 0xDE -> LATIN SMALL LETTER U WITH ACUTE | |
'\xff' # 0xDF -> LATIN SMALL LETTER Y WITH DIAERESIS | |
'\\' # 0xE0 -> REVERSE SOLIDUS | |
'\xf7' # 0xE1 -> DIVISION SIGN | |
'S' # 0xE2 -> LATIN CAPITAL LETTER S | |
'T' # 0xE3 -> LATIN CAPITAL LETTER T | |
'U' # 0xE4 -> LATIN CAPITAL LETTER U | |
'V' # 0xE5 -> LATIN CAPITAL LETTER V | |
'W' # 0xE6 -> LATIN CAPITAL LETTER W | |
'X' # 0xE7 -> LATIN CAPITAL LETTER X | |
'Y' # 0xE8 -> LATIN CAPITAL LETTER Y | |
'Z' # 0xE9 -> LATIN CAPITAL LETTER Z | |
'\xb2' # 0xEA -> SUPERSCRIPT TWO | |
'\xd4' # 0xEB -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX | |
'\xd6' # 0xEC -> LATIN CAPITAL LETTER O WITH DIAERESIS | |
'\xd2' # 0xED -> LATIN CAPITAL LETTER O WITH GRAVE | |
'\xd3' # 0xEE -> LATIN CAPITAL LETTER O WITH ACUTE | |
'\xd5' # 0xEF -> LATIN CAPITAL LETTER O WITH TILDE | |
'0' # 0xF0 -> DIGIT ZERO | |
'1' # 0xF1 -> DIGIT ONE | |
'2' # 0xF2 -> DIGIT TWO | |
'3' # 0xF3 -> DIGIT THREE | |
'4' # 0xF4 -> DIGIT FOUR | |
'5' # 0xF5 -> DIGIT FIVE | |
'6' # 0xF6 -> DIGIT SIX | |
'7' # 0xF7 -> DIGIT SEVEN | |
'8' # 0xF8 -> DIGIT EIGHT | |
'9' # 0xF9 -> DIGIT NINE | |
'\xb3' # 0xFA -> SUPERSCRIPT THREE | |
'\xdb' # 0xFB -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX | |
'\xdc' # 0xFC -> LATIN CAPITAL LETTER U WITH DIAERESIS | |
'\xd9' # 0xFD -> LATIN CAPITAL LETTER U WITH GRAVE | |
'\xda' # 0xFE -> LATIN CAPITAL LETTER U WITH ACUTE | |
'\x9f' # 0xFF -> CONTROL | |
) | |
### Encoding table | |
encoding_table=codecs.charmap_build(decoding_table) |
""" | |
Code page 65001: Windows UTF-8 (CP_UTF8). | |
""" | |
import codecs | |
import functools | |
if not hasattr(codecs, 'code_page_encode'): | |
raise LookupError("cp65001 encoding is only available on Windows") | |
### Codec APIs | |
encode = functools.partial(codecs.code_page_encode, 65001) | |
_decode = functools.partial(codecs.code_page_decode, 65001) | |
def decode(input, errors='strict'): | |
return codecs.code_page_decode(65001, input, errors, True) | |
class IncrementalEncoder(codecs.IncrementalEncoder): | |
def encode(self, input, final=False): | |
return encode(input, self.errors)[0] | |
class IncrementalDecoder(codecs.BufferedIncrementalDecoder): | |
_buffer_decode = _decode | |
class StreamWriter(codecs.StreamWriter): | |
encode = encode | |
class StreamReader(codecs.StreamReader): | |
decode = _decode | |
### encodings module API | |
def getregentry(): | |
return codecs.CodecInfo( | |
name='cp65001', | |
encode=encode, | |
decode=decode, | |
incrementalencoder=IncrementalEncoder, | |
incrementaldecoder=IncrementalDecoder, | |
streamreader=StreamReader, | |
streamwriter=StreamWriter, | |
) |
"""Python Character Mapping Codec cp720 generated on Windows: | |
Vista 6.0.6002 SP2 Multiprocessor Free with the command: | |
python Tools/unicode/genwincodec.py 720 | |
"""#" | |
import codecs | |
### Codec APIs | |
class Codec(codecs.Codec): | |
def encode(self,input,errors='strict'): | |
return codecs.charmap_encode(input,errors,encoding_table) | |
def decode(self,input,errors='strict'): | |
return codecs.charmap_decode(input,errors,decoding_table) | |
class IncrementalEncoder(codecs.IncrementalEncoder): | |
def encode(self, input, final=False): | |
return codecs.charmap_encode(input,self.errors,encoding_table)[0] | |
class IncrementalDecoder(codecs.IncrementalDecoder): | |
def decode(self, input, final=False): | |
return codecs.charmap_decode(input,self.errors,decoding_table)[0] | |
class StreamWriter(Codec,codecs.StreamWriter): | |
pass | |
class StreamReader(Codec,codecs.StreamReader): | |
pass | |
### encodings module API | |
def getregentry(): | |
return codecs.CodecInfo( | |
name='cp720', | |
encode=Codec().encode, | |
decode=Codec().decode, | |
incrementalencoder=IncrementalEncoder, | |
incrementaldecoder=IncrementalDecoder, | |
streamreader=StreamReader, | |
streamwriter=StreamWriter, | |
) | |
### Decoding Table | |
decoding_table = ( | |
'\x00' # 0x00 -> CONTROL CHARACTER | |
'\x01' # 0x01 -> CONTROL CHARACTER | |
'\x02' # 0x02 -> CONTROL CHARACTER | |
'\x03' # 0x03 -> CONTROL CHARACTER | |
'\x04' # 0x04 -> CONTROL CHARACTER | |
'\x05' # 0x05 -> CONTROL CHARACTER | |
'\x06' # 0x06 -> CONTROL CHARACTER | |
'\x07' # 0x07 -> CONTROL CHARACTER | |
'\x08' # 0x08 -> CONTROL CHARACTER | |
'\t' # 0x09 -> CONTROL CHARACTER | |
'\n' # 0x0A -> CONTROL CHARACTER | |
'\x0b' # 0x0B -> CONTROL CHARACTER | |
'\x0c' # 0x0C -> CONTROL CHARACTER | |
'\r' # 0x0D -> CONTROL CHARACTER | |
'\x0e' # 0x0E -> CONTROL CHARACTER | |
'\x0f' # 0x0F -> CONTROL CHARACTER | |
'\x10' # 0x10 -> CONTROL CHARACTER | |
'\x11' # 0x11 -> CONTROL CHARACTER | |
'\x12' # 0x12 -> CONTROL CHARACTER | |
'\x13' # 0x13 -> CONTROL CHARACTER | |
'\x14' # 0x14 -> CONTROL CHARACTER | |
'\x15' # 0x15 -> CONTROL CHARACTER | |
'\x16' # 0x16 -> CONTROL CHARACTER | |
'\x17' # 0x17 -> CONTROL CHARACTER | |
'\x18' # 0x18 -> CONTROL CHARACTER | |
'\x19' # 0x19 -> CONTROL CHARACTER | |
'\x1a' # 0x1A -> CONTROL CHARACTER | |
'\x1b' # 0x1B -> CONTROL CHARACTER | |
'\x1c' # 0x1C -> CONTROL CHARACTER | |
'\x1d' # 0x1D -> CONTROL CHARACTER | |
'\x1e' # 0x1E -> CONTROL CHARACTER | |
'\x1f' # 0x1F -> CONTROL CHARACTER | |
' ' # 0x20 -> SPACE | |
'!' # 0x21 -> EXCLAMATION MARK | |
'"' # 0x22 -> QUOTATION MARK | |
'#' # 0x23 -> NUMBER SIGN | |
'$' # 0x24 -> DOLLAR SIGN | |
'%' # 0x25 -> PERCENT SIGN | |
'&' # 0x26 -> AMPERSAND | |
"'" # 0x27 -> APOSTROPHE | |
'(' # 0x28 -> LEFT PARENTHESIS | |
')' # 0x29 -> RIGHT PARENTHESIS | |
'*' # 0x2A -> ASTERISK | |
'+' # 0x2B -> PLUS SIGN | |
',' # 0x2C -> COMMA | |
'-' # 0x2D -> HYPHEN-MINUS | |
'.' # 0x2E -> FULL STOP | |
'/' # 0x2F -> SOLIDUS | |
'0' # 0x30 -> DIGIT ZERO | |
'1' # 0x31 -> DIGIT ONE | |
'2' # 0x32 -> DIGIT TWO | |
'3' # 0x33 -> DIGIT THREE | |
'4' # 0x34 -> DIGIT FOUR | |
'5' # 0x35 -> DIGIT FIVE | |
'6' # 0x36 -> DIGIT SIX | |
'7' # 0x37 -> DIGIT SEVEN | |
'8' # 0x38 -> DIGIT EIGHT | |
'9' # 0x39 -> DIGIT NINE | |
':' # 0x3A -> COLON | |
';' # 0x3B -> SEMICOLON | |
'<' # 0x3C -> LESS-THAN SIGN | |
'=' # 0x3D -> EQUALS SIGN | |
'>' # 0x3E -> GREATER-THAN SIGN | |
'?' # 0x3F -> QUESTION MARK | |
'@' # 0x40 -> COMMERCIAL AT | |
'A' # 0x41 -> LATIN CAPITAL LETTER A | |
'B' # 0x42 -> LATIN CAPITAL LETTER B | |
'C' # 0x43 -> LATIN CAPITAL LETTER C | |
'D' # 0x44 -> LATIN CAPITAL LETTER D | |
'E' # 0x45 -> LATIN CAPITAL LETTER E | |
'F' # 0x46 -> LATIN CAPITAL LETTER F | |
'G' # 0x47 -> LATIN CAPITAL LETTER G | |
'H' # 0x48 -> LATIN CAPITAL LETTER H | |
'I' # 0x49 -> LATIN CAPITAL LETTER I | |
'J' # 0x4A -> LATIN CAPITAL LETTER J | |
'K' # 0x4B -> LATIN CAPITAL LETTER K | |
'L' # 0x4C -> LATIN CAPITAL LETTER L | |
'M' # 0x4D -> LATIN CAPITAL LETTER M | |
'N' # 0x4E -> LATIN CAPITAL LETTER N | |
'O' # 0x4F -> LATIN CAPITAL LETTER O | |
'P' # 0x50 -> LATIN CAPITAL LETTER P | |
'Q' # 0x51 -> LATIN CAPITAL LETTER Q | |
'R' # 0x52 -> LATIN CAPITAL LETTER R | |
'S' # 0x53 -> LATIN CAPITAL LETTER S | |
'T' # 0x54 -> LATIN CAPITAL LETTER T | |
'U' # 0x55 -> LATIN CAPITAL LETTER U | |
'V' # 0x56 -> LATIN CAPITAL LETTER V | |
'W' # 0x57 -> LATIN CAPITAL LETTER W | |
'X' # 0x58 -> LATIN CAPITAL LETTER X | |
'Y' # 0x59 -> LATIN CAPITAL LETTER Y | |
'Z' # 0x5A -> LATIN CAPITAL LETTER Z | |
'[' # 0x5B -> LEFT SQUARE BRACKET | |
'\\' # 0x5C -> REVERSE SOLIDUS | |
']' # 0x5D -> RIGHT SQUARE BRACKET | |
'^' # 0x5E -> CIRCUMFLEX ACCENT | |
'_' # 0x5F -> LOW LINE | |
'`' # 0x60 -> GRAVE ACCENT | |
'a' # 0x61 -> LATIN SMALL LETTER A | |
'b' # 0x62 -> LATIN SMALL LETTER B | |
'c' # 0x63 -> LATIN SMALL LETTER C | |
'd' # 0x64 -> LATIN SMALL LETTER D | |
'e' # 0x65 -> LATIN SMALL LETTER E | |
'f' # 0x66 -> LATIN SMALL LETTER F | |
'g' # 0x67 -> LATIN SMALL LETTER G | |
'h' # 0x68 -> LATIN SMALL LETTER H | |
'i' # 0x69 -> LATIN SMALL LETTER I | |
'j' # 0x6A -> LATIN SMALL LETTER J | |
'k' # 0x6B -> LATIN SMALL LETTER K | |
'l' # 0x6C -> LATIN SMALL LETTER L | |
'm' # 0x6D -> LATIN SMALL LETTER M | |
'n' # 0x6E -> LATIN SMALL LETTER N | |
'o' # 0x6F -> LATIN SMALL LETTER O | |
'p' # 0x70 -> LATIN SMALL LETTER P | |
'q' # 0x71 -> LATIN SMALL LETTER Q | |
'r' # 0x72 -> LATIN SMALL LETTER R | |
's' # 0x73 -> LATIN SMALL LETTER S | |
't' # 0x74 -> LATIN SMALL LETTER T | |
'u' # 0x75 -> LATIN SMALL LETTER U | |
'v' # 0x76 -> LATIN SMALL LETTER V | |
'w' # 0x77 -> LATIN SMALL LETTER W | |
'x' # 0x78 -> LATIN SMALL LETTER X | |
'y' # 0x79 -> LATIN SMALL LETTER Y | |
'z' # 0x7A -> LATIN SMALL LETTER Z | |
'{' # 0x7B -> LEFT CURLY BRACKET | |
'|' # 0x7C -> VERTICAL LINE | |
'}' # 0x7D -> RIGHT CURLY BRACKET | |
'~' # 0x7E -> TILDE | |
'\x7f' # 0x7F -> CONTROL CHARACTER | |
'\x80' | |
'\x81' | |
'\xe9' # 0x82 -> LATIN SMALL LETTER E WITH ACUTE | |
'\xe2' # 0x83 -> LATIN SMALL LETTER A WITH CIRCUMFLEX | |
'\x84' | |
'\xe0' # 0x85 -> LATIN SMALL LETTER A WITH GRAVE | |
'\x86' | |
'\xe7' # 0x87 -> LATIN SMALL LETTER C WITH CEDILLA | |
'\xea' # 0x88 -> LATIN SMALL LETTER E WITH CIRCUMFLEX | |
'\xeb' # 0x89 -> LATIN SMALL LETTER E WITH DIAERESIS | |
'\xe8' # 0x8A -> LATIN SMALL LETTER E WITH GRAVE | |
'\xef' # 0x8B -> LATIN SMALL LETTER I WITH DIAERESIS | |
'\xee' # 0x8C -> LATIN SMALL LETTER I WITH CIRCUMFLEX | |
'\x8d' | |
'\x8e' | |
'\x8f' | |
'\x90' | |
'\u0651' # 0x91 -> ARABIC SHADDA | |
'\u0652' # 0x92 -> ARABIC SUKUN | |
'\xf4' # 0x93 -> LATIN SMALL LETTER O WITH CIRCUMFLEX | |
'\xa4' # 0x94 -> CURRENCY SIGN | |
'\u0640' # 0x95 -> ARABIC TATWEEL | |
'\xfb' # 0x96 -> LATIN SMALL LETTER U WITH CIRCUMFLEX | |
'\xf9' # 0x97 -> LATIN SMALL LETTER U WITH GRAVE | |
'\u0621' # 0x98 -> ARABIC LETTER HAMZA | |
'\u0622' # 0x99 -> ARABIC LETTER ALEF WITH MADDA ABOVE | |
'\u0623' # 0x9A -> ARABIC LETTER ALEF WITH HAMZA ABOVE | |
'\u0624' # 0x9B -> ARABIC LETTER WAW WITH HAMZA ABOVE | |
'\xa3' # 0x9C -> POUND SIGN | |
'\u0625' # 0x9D -> ARABIC LETTER ALEF WITH HAMZA BELOW | |
'\u0626' # 0x9E -> ARABIC LETTER YEH WITH HAMZA ABOVE | |
'\u0627' # 0x9F -> ARABIC LETTER ALEF | |
'\u0628' # 0xA0 -> ARABIC LETTER BEH | |
'\u0629' # 0xA1 -> ARABIC LETTER TEH MARBUTA | |
'\u062a' # 0xA2 -> ARABIC LETTER TEH | |
'\u062b' # 0xA3 -> ARABIC LETTER THEH | |
'\u062c' # 0xA4 -> ARABIC LETTER JEEM | |
'\u062d' # 0xA5 -> ARABIC LETTER HAH | |
'\u062e' # 0xA6 -> ARABIC LETTER KHAH | |
'\u062f' # 0xA7 -> ARABIC LETTER DAL | |
'\u0630' # 0xA8 -> ARABIC LETTER THAL | |
'\u0631' # 0xA9 -> ARABIC LETTER REH | |
'\u0632' # 0xAA -> ARABIC LETTER ZAIN | |
'\u0633' # 0xAB -> ARABIC LETTER SEEN | |
'\u0634' # 0xAC -> ARABIC LETTER SHEEN | |
'\u0635' # 0xAD -> ARABIC LETTER SAD | |
'\xab' # 0xAE -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK | |
'\xbb' # 0xAF -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK | |
'\u2591' # 0xB0 -> LIGHT SHADE | |
'\u2592' # 0xB1 -> MEDIUM SHADE | |
'\u2593' # 0xB2 -> DARK SHADE | |
'\u2502' # 0xB3 -> BOX DRAWINGS LIGHT VERTICAL | |
'\u2524' # 0xB4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT | |
'\u2561' # 0xB5 -> BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE | |
'\u2562' # 0xB6 -> BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE | |
'\u2556' # 0xB7 -> BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE | |
'\u2555' # 0xB8 -> BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE | |
'\u2563' # 0xB9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT | |
'\u2551' # 0xBA -> BOX DRAWINGS DOUBLE VERTICAL | |
'\u2557' # 0xBB -> BOX DRAWINGS DOUBLE DOWN AND LEFT | |
'\u255d' # 0xBC -> BOX DRAWINGS DOUBLE UP AND LEFT | |
'\u255c' # 0xBD -> BOX DRAWINGS UP DOUBLE AND LEFT SINGLE | |
'\u255b' # 0xBE -> BOX DRAWINGS UP SINGLE AND LEFT DOUBLE | |
'\u2510' # 0xBF -> BOX DRAWINGS LIGHT DOWN AND LEFT | |
'\u2514' # 0xC0 -> BOX DRAWINGS LIGHT UP AND RIGHT | |
'\u2534' # 0xC1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL | |
'\u252c' # 0xC2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL | |
'\u251c' # 0xC3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT | |
'\u2500' # 0xC4 -> BOX DRAWINGS LIGHT HORIZONTAL | |
'\u253c' # 0xC5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL | |
'\u255e' # 0xC6 -> BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE | |
'\u255f' # 0xC7 -> BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE | |
'\u255a' # 0xC8 -> BOX DRAWINGS DOUBLE UP AND RIGHT | |
'\u2554' # 0xC9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT | |
'\u2569' # 0xCA -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL | |
'\u2566' # 0xCB -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL | |
'\u2560' # 0xCC -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT | |
'\u2550' # 0xCD -> BOX DRAWINGS DOUBLE HORIZONTAL | |
'\u256c' # 0xCE -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL | |
'\u2567' # 0xCF -> BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE | |
'\u2568' # 0xD0 -> BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE | |
'\u2564' # 0xD1 -> BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE | |
'\u2565' # 0xD2 -> BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE | |
'\u2559' # 0xD3 -> BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE | |
'\u2558' # 0xD4 -> BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE | |
'\u2552' # 0xD5 -> BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE | |
'\u2553' # 0xD6 -> BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE | |
'\u256b' # 0xD7 -> BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE | |
'\u256a' # 0xD8 -> BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE | |
'\u2518' # 0xD9 -> BOX DRAWINGS LIGHT UP AND LEFT | |
'\u250c' # 0xDA -> BOX DRAWINGS LIGHT DOWN AND RIGHT | |
'\u2588' # 0xDB -> FULL BLOCK | |
'\u2584' # 0xDC -> LOWER HALF BLOCK | |
'\u258c' # 0xDD -> LEFT HALF BLOCK | |
'\u2590' # 0xDE -> RIGHT HALF BLOCK | |
'\u2580' # 0xDF -> UPPER HALF BLOCK | |
'\u0636' # 0xE0 -> ARABIC LETTER DAD | |
'\u0637' # 0xE1 -> ARABIC LETTER TAH | |
'\u0638' # 0xE2 -> ARABIC LETTER ZAH | |
'\u0639' # 0xE3 -> ARABIC LETTER AIN | |
'\u063a' # 0xE4 -> ARABIC LETTER GHAIN | |
'\u0641' # 0xE5 -> ARABIC LETTER FEH | |
'\xb5' # 0xE6 -> MICRO SIGN | |
'\u0642' # 0xE7 -> ARABIC LETTER QAF | |
'\u0643' # 0xE8 -> ARABIC LETTER KAF | |
'\u0644' # 0xE9 -> ARABIC LETTER LAM | |
'\u0645' # 0xEA -> ARABIC LETTER MEEM | |
'\u0646' # 0xEB -> ARABIC LETTER NOON | |
'\u0647' # 0xEC -> ARABIC LETTER HEH | |
'\u0648' # 0xED -> ARABIC LETTER WAW | |
'\u0649' # 0xEE -> ARABIC LETTER ALEF MAKSURA | |
'\u064a' # 0xEF -> ARABIC LETTER YEH | |
'\u2261' # 0xF0 -> IDENTICAL TO | |
'\u064b' # 0xF1 -> ARABIC FATHATAN | |
'\u064c' # 0xF2 -> ARABIC DAMMATAN | |
'\u064d' # 0xF3 -> ARABIC KASRATAN | |
'\u064e' # 0xF4 -> ARABIC FATHA | |
'\u064f' # 0xF5 -> ARABIC DAMMA | |
'\u0650' # 0xF6 -> ARABIC KASRA | |
'\u2248' # 0xF7 -> ALMOST EQUAL TO | |
'\xb0' # 0xF8 -> DEGREE SIGN | |
'\u2219' # 0xF9 -> BULLET OPERATOR | |
'\xb7' # 0xFA -> MIDDLE DOT | |
'\u221a' # 0xFB -> SQUARE ROOT | |
'\u207f' # 0xFC -> SUPERSCRIPT LATIN SMALL LETTER N | |
'\xb2' # 0xFD -> SUPERSCRIPT TWO | |
'\u25a0' # 0xFE -> BLACK SQUARE | |
'\xa0' # 0xFF -> NO-BREAK SPACE | |
) | |
### Encoding table | |
encoding_table=codecs.charmap_build(decoding_table) |
""" Python Character Mapping Codec cp737 generated from 'VENDORS/MICSFT/PC/CP737.TXT' with gencodec.py. | |
"""#" | |
import codecs | |
### Codec APIs | |
class Codec(codecs.Codec): | |
def encode(self,input,errors='strict'): | |
return codecs.charmap_encode(input,errors,encoding_map) | |
def decode(self,input,errors='strict'): | |
return codecs.charmap_decode(input,errors,decoding_table) | |
class IncrementalEncoder(codecs.IncrementalEncoder): | |
def encode(self, input, final=False): | |
return codecs.charmap_encode(input,self.errors,encoding_map)[0] | |
class IncrementalDecoder(codecs.IncrementalDecoder): | |
def decode(self, input, final=False): | |
return codecs.charmap_decode(input,self.errors,decoding_table)[0] | |
class StreamWriter(Codec,codecs.StreamWriter): | |
pass | |
class StreamReader(Codec,codecs.StreamReader): | |
pass | |
### encodings module API | |
def getregentry(): | |
return codecs.CodecInfo( | |
name='cp737', | |
encode=Codec().encode, | |
decode=Codec().decode, | |
incrementalencoder=IncrementalEncoder, | |
incrementaldecoder=IncrementalDecoder, | |
streamreader=StreamReader, | |
streamwriter=StreamWriter, | |
) | |
### Decoding Map | |
decoding_map = codecs.make_identity_dict(range(256)) | |
decoding_map.update({ | |
0x0080: 0x0391, # GREEK CAPITAL LETTER ALPHA | |
0x0081: 0x0392, # GREEK CAPITAL LETTER BETA | |
0x0082: 0x0393, # GREEK CAPITAL LETTER GAMMA | |
0x0083: 0x0394, # GREEK CAPITAL LETTER DELTA | |
0x0084: 0x0395, # GREEK CAPITAL LETTER EPSILON | |
0x0085: 0x0396, # GREEK CAPITAL LETTER ZETA | |
0x0086: 0x0397, # GREEK CAPITAL LETTER ETA | |
0x0087: 0x0398, # GREEK CAPITAL LETTER THETA | |
0x0088: 0x0399, # GREEK CAPITAL LETTER IOTA | |
0x0089: 0x039a, # GREEK CAPITAL LETTER KAPPA | |
0x008a: 0x039b, # GREEK CAPITAL LETTER LAMDA | |
0x008b: 0x039c, # GREEK CAPITAL LETTER MU | |
0x008c: 0x039d, # GREEK CAPITAL LETTER NU | |
0x008d: 0x039e, # GREEK CAPITAL LETTER XI | |
0x008e: 0x039f, # GREEK CAPITAL LETTER OMICRON | |
0x008f: 0x03a0, # GREEK CAPITAL LETTER PI | |
0x0090: 0x03a1, # GREEK CAPITAL LETTER RHO | |
0x0091: 0x03a3, # GREEK CAPITAL LETTER SIGMA | |
0x0092: 0x03a4, # GREEK CAPITAL LETTER TAU | |
0x0093: 0x03a5, # GREEK CAPITAL LETTER UPSILON | |
0x0094: 0x03a6, # GREEK CAPITAL LETTER PHI | |
0x0095: 0x03a7, # GREEK CAPITAL LETTER CHI | |
0x0096: 0x03a8, # GREEK CAPITAL LETTER PSI | |
0x0097: 0x03a9, # GREEK CAPITAL LETTER OMEGA | |
0x0098: 0x03b1, # GREEK SMALL LETTER ALPHA | |
0x0099: 0x03b2, # GREEK SMALL LETTER BETA | |
0x009a: 0x03b3, # GREEK SMALL LETTER GAMMA | |
0x009b: 0x03b4, # GREEK SMALL LETTER DELTA | |
0x009c: 0x03b5, # GREEK SMALL LETTER EPSILON | |
0x009d: 0x03b6, # GREEK SMALL LETTER ZETA | |
0x009e: 0x03b7, # GREEK SMALL LETTER ETA | |
0x009f: 0x03b8, # GREEK SMALL LETTER THETA | |
0x00a0: 0x03b9, # GREEK SMALL LETTER IOTA | |
0x00a1: 0x03ba, # GREEK SMALL LETTER KAPPA | |
0x00a2: 0x03bb, # GREEK SMALL LETTER LAMDA | |
0x00a3: 0x03bc, # GREEK SMALL LETTER MU | |
0x00a4: 0x03bd, # GREEK SMALL LETTER NU | |
0x00a5: 0x03be, # GREEK SMALL LETTER XI | |
0x00a6: 0x03bf, # GREEK SMALL LETTER OMICRON | |
0x00a7: 0x03c0, # GREEK SMALL LETTER PI | |
0x00a8: 0x03c1, # GREEK SMALL LETTER RHO | |
0x00a9: 0x03c3, # GREEK SMALL LETTER SIGMA | |
0x00aa: 0x03c2, # GREEK SMALL LETTER FINAL SIGMA | |
0x00ab: 0x03c4, # GREEK SMALL LETTER TAU | |
0x00ac: 0x03c5, # GREEK SMALL LETTER UPSILON | |
0x00ad: 0x03c6, # GREEK SMALL LETTER PHI | |
0x00ae: 0x03c7, # GREEK SMALL LETTER CHI | |
0x00af: 0x03c8, # GREEK SMALL LETTER PSI | |
0x00b0: 0x2591, # LIGHT SHADE | |
0x00b1: 0x2592, # MEDIUM SHADE | |
0x00b2: 0x2593, # DARK SHADE | |
0x00b3: 0x2502, # BOX DRAWINGS LIGHT VERTICAL | |
0x00b4: 0x2524, # BOX DRAWINGS LIGHT VERTICAL AND LEFT | |
0x00b5: 0x2561, # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE | |
0x00b6: 0x2562, # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE | |
0x00b7: 0x2556, # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE | |
0x00b8: 0x2555, # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE | |
0x00b9: 0x2563, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT | |
0x00ba: 0x2551, # BOX DRAWINGS DOUBLE VERTICAL | |
0x00bb: 0x2557, # BOX DRAWINGS DOUBLE DOWN AND LEFT | |
0x00bc: 0x255d, # BOX DRAWINGS DOUBLE UP AND LEFT | |
0x00bd: 0x255c, # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE | |
0x00be: 0x255b, # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE | |
0x00bf: 0x2510, # BOX DRAWINGS LIGHT DOWN AND LEFT | |
0x00c0: 0x2514, # BOX DRAWINGS LIGHT UP AND RIGHT | |
0x00c1: 0x2534, # BOX DRAWINGS LIGHT UP AND HORIZONTAL | |
0x00c2: 0x252c, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL | |
0x00c3: 0x251c, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT | |
0x00c4: 0x2500, # BOX DRAWINGS LIGHT HORIZONTAL | |
0x00c5: 0x253c, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL | |
0x00c6: 0x255e, # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE | |
0x00c7: 0x255f, # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE | |
0x00c8: 0x255a, # BOX DRAWINGS DOUBLE UP AND RIGHT | |
0x00c9: 0x2554, # BOX DRAWINGS DOUBLE DOWN AND RIGHT | |
0x00ca: 0x2569, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL | |
0x00cb: 0x2566, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL | |
0x00cc: 0x2560, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT | |
0x00cd: 0x2550, # BOX DRAWINGS DOUBLE HORIZONTAL | |
0x00ce: 0x256c, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL | |
0x00cf: 0x2567, # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE | |
0x00d0: 0x2568, # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE | |
0x00d1: 0x2564, # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE | |
0x00d2: 0x2565, # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE | |
0x00d3: 0x2559, # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE | |
0x00d4: 0x2558, # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE | |
0x00d5: 0x2552, # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE | |
0x00d6: 0x2553, # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE | |
0x00d7: 0x256b, # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE | |
0x00d8: 0x256a, # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE | |
0x00d9: 0x2518, # BOX DRAWINGS LIGHT UP AND LEFT | |
0x00da: 0x250c, # BOX DRAWINGS LIGHT DOWN AND RIGHT | |
0x00db: 0x2588, # FULL BLOCK | |
0x00dc: 0x2584, # LOWER HALF BLOCK | |
0x00dd: 0x258c, # LEFT HALF BLOCK | |
0x00de: 0x2590, # RIGHT HALF BLOCK | |
0x00df: 0x2580, # UPPER HALF BLOCK | |
0x00e0: 0x03c9, # GREEK SMALL LETTER OMEGA | |
0x00e1: 0x03ac, # GREEK SMALL LETTER ALPHA WITH TONOS | |
0x00e2: 0x03ad, # GREEK SMALL LETTER EPSILON WITH TONOS | |
0x00e3: 0x03ae, # GREEK SMALL LETTER ETA WITH TONOS | |
0x00e4: 0x03ca, # GREEK SMALL LETTER IOTA WITH DIALYTIKA | |
0x00e5: 0x03af, # GREEK SMALL LETTER IOTA WITH TONOS | |
0x00e6: 0x03cc, # GREEK SMALL LETTER OMICRON WITH TONOS | |
0x00e7: 0x03cd, # GREEK SMALL LETTER UPSILON WITH TONOS | |
0x00e8: 0x03cb, # GREEK SMALL LETTER UPSILON WITH DIALYTIKA | |
0x00e9: 0x03ce, # GREEK SMALL LETTER OMEGA WITH TONOS | |
0x00ea: 0x0386, # GREEK CAPITAL LETTER ALPHA WITH TONOS | |
0x00eb: 0x0388, # GREEK CAPITAL LETTER EPSILON WITH TONOS | |
0x00ec: 0x0389, # GREEK CAPITAL LETTER ETA WITH TONOS | |
0x00ed: 0x038a, # GREEK CAPITAL LETTER IOTA WITH TONOS | |
0x00ee: 0x038c, # GREEK CAPITAL LETTER OMICRON WITH TONOS | |
0x00ef: 0x038e, # GREEK CAPITAL LETTER UPSILON WITH TONOS | |
0x00f0: 0x038f, # GREEK CAPITAL LETTER OMEGA WITH TONOS | |
0x00f1: 0x00b1, # PLUS-MINUS SIGN | |
0x00f2: 0x2265, # GREATER-THAN OR EQUAL TO | |
0x00f3: 0x2264, # LESS-THAN OR EQUAL TO | |
0x00f4: 0x03aa, # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA | |
0x00f5: 0x03ab, # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA | |
0x00f6: 0x00f7, # DIVISION SIGN | |
0x00f7: 0x2248, # ALMOST EQUAL TO | |
0x00f8: 0x00b0, # DEGREE SIGN | |
0x00f9: 0x2219, # BULLET OPERATOR | |
0x00fa: 0x00b7, # MIDDLE DOT | |
0x00fb: 0x221a, # SQUARE ROOT | |
0x00fc: 0x207f, # SUPERSCRIPT LATIN SMALL LETTER N | |
0x00fd: 0x00b2, # SUPERSCRIPT TWO | |
0x00fe: 0x25a0, # BLACK SQUARE | |
0x00ff: 0x00a0, # NO-BREAK SPACE | |
}) | |
### Decoding Table | |
decoding_table = ( | |
'\x00' # 0x0000 -> NULL | |
'\x01' # 0x0001 -> START OF HEADING | |
'\x02' # 0x0002 -> START OF TEXT | |
'\x03' # 0x0003 -> END OF TEXT | |
'\x04' # 0x0004 -> END OF TRANSMISSION | |
'\x05' # 0x0005 -> ENQUIRY | |
'\x06' # 0x0006 -> ACKNOWLEDGE | |
'\x07' # 0x0007 -> BELL | |
'\x08' # 0x0008 -> BACKSPACE | |
'\t' # 0x0009 -> HORIZONTAL TABULATION | |
'\n' # 0x000a -> LINE FEED | |
'\x0b' # 0x000b -> VERTICAL TABULATION | |
'\x0c' # 0x000c -> FORM FEED | |
'\r' # 0x000d -> CARRIAGE RETURN | |
'\x0e' # 0x000e -> SHIFT OUT | |
'\x0f' # 0x000f -> SHIFT IN | |
'\x10' # 0x0010 -> DATA LINK ESCAPE | |
'\x11' # 0x0011 -> DEVICE CONTROL ONE | |
'\x12' # 0x0012 -> DEVICE CONTROL TWO | |
'\x13' # 0x0013 -> DEVICE CONTROL THREE | |
'\x14' # 0x0014 -> DEVICE CONTROL FOUR | |
'\x15' # 0x0015 -> NEGATIVE ACKNOWLEDGE | |
'\x16' # 0x0016 -> SYNCHRONOUS IDLE | |
'\x17' # 0x0017 -> END OF TRANSMISSION BLOCK | |
'\x18' # 0x0018 -> CANCEL | |
'\x19' # 0x0019 -> END OF MEDIUM | |
'\x1a' # 0x001a -> SUBSTITUTE | |
'\x1b' # 0x001b -> ESCAPE | |
'\x1c' # 0x001c -> FILE SEPARATOR | |
'\x1d' # 0x001d -> GROUP SEPARATOR | |
'\x1e' # 0x001e -> RECORD SEPARATOR | |
'\x1f' # 0x001f -> UNIT SEPARATOR | |
' ' # 0x0020 -> SPACE | |
'!' # 0x0021 -> EXCLAMATION MARK | |
'"' # 0x0022 -> QUOTATION MARK | |
'#' # 0x0023 -> NUMBER SIGN | |
'$' # 0x0024 -> DOLLAR SIGN | |
'%' # 0x0025 -> PERCENT SIGN | |
'&' # 0x0026 -> AMPERSAND | |
"'" # 0x0027 -> APOSTROPHE | |
'(' # 0x0028 -> LEFT PARENTHESIS | |
')' # 0x0029 -> RIGHT PARENTHESIS | |
'*' # 0x002a -> ASTERISK | |
'+' # 0x002b -> PLUS SIGN | |
',' # 0x002c -> COMMA | |
'-' # 0x002d -> HYPHEN-MINUS | |
'.' # 0x002e -> FULL STOP | |
'/' # 0x002f -> SOLIDUS | |
'0' # 0x0030 -> DIGIT ZERO | |
'1' # 0x0031 -> DIGIT ONE | |
'2' # 0x0032 -> DIGIT TWO | |
'3' # 0x0033 -> DIGIT THREE | |
'4' # 0x0034 -> DIGIT FOUR | |
'5' # 0x0035 -> DIGIT FIVE | |
'6' # 0x0036 -> DIGIT SIX | |
'7' # 0x0037 -> DIGIT SEVEN | |
'8' # 0x0038 -> DIGIT EIGHT | |
'9' # 0x0039 -> DIGIT NINE | |
':' # 0x003a -> COLON | |
';' # 0x003b -> SEMICOLON | |
'<' # 0x003c -> LESS-THAN SIGN | |
'=' # 0x003d -> EQUALS SIGN | |
'>' # 0x003e -> GREATER-THAN SIGN | |
'?' # 0x003f -> QUESTION MARK | |
'@' # 0x0040 -> COMMERCIAL AT | |
'A' # 0x0041 -> LATIN CAPITAL LETTER A | |
'B' # 0x0042 -> LATIN CAPITAL LETTER B | |
'C' # 0x0043 -> LATIN CAPITAL LETTER C | |
'D' # 0x0044 -> LATIN CAPITAL LETTER D | |
'E' # 0x0045 -> LATIN CAPITAL LETTER E | |
'F' # 0x0046 -> LATIN CAPITAL LETTER F | |
'G' # 0x0047 -> LATIN CAPITAL LETTER G | |
'H' # 0x0048 -> LATIN CAPITAL LETTER H | |
'I' # 0x0049 -> LATIN CAPITAL LETTER I | |
'J' # 0x004a -> LATIN CAPITAL LETTER J | |
'K' # 0x004b -> LATIN CAPITAL LETTER K | |
'L' # 0x004c -> LATIN CAPITAL LETTER L | |
'M' # 0x004d -> LATIN CAPITAL LETTER M | |
'N' # 0x004e -> LATIN CAPITAL LETTER N | |
'O' # 0x004f -> LATIN CAPITAL LETTER O | |
'P' # 0x0050 -> LATIN CAPITAL LETTER P | |
'Q' # 0x0051 -> LATIN CAPITAL LETTER Q | |
'R' # 0x0052 -> LATIN CAPITAL LETTER R | |
'S' # 0x0053 -> LATIN CAPITAL LETTER S | |
'T' # 0x0054 -> LATIN CAPITAL LETTER T | |
'U' # 0x0055 -> LATIN CAPITAL LETTER U | |
'V' # 0x0056 -> LATIN CAPITAL LETTER V | |
'W' # 0x0057 -> LATIN CAPITAL LETTER W | |
'X' # 0x0058 -> LATIN CAPITAL LETTER X | |
'Y' # 0x0059 -> LATIN CAPITAL LETTER Y | |
'Z' # 0x005a -> LATIN CAPITAL LETTER Z | |
'[' # 0x005b -> LEFT SQUARE BRACKET | |
'\\' # 0x005c -> REVERSE SOLIDUS | |
']' # 0x005d -> RIGHT SQUARE BRACKET | |
'^' # 0x005e -> CIRCUMFLEX ACCENT | |
'_' # 0x005f -> LOW LINE | |
'`' # 0x0060 -> GRAVE ACCENT | |
'a' # 0x0061 -> LATIN SMALL LETTER A | |
'b' # 0x0062 -> LATIN SMALL LETTER B | |
'c' # 0x0063 -> LATIN SMALL LETTER C | |
'd' # 0x0064 -> LATIN SMALL LETTER D | |
'e' # 0x0065 -> LATIN SMALL LETTER E | |
'f' # 0x0066 -> LATIN SMALL LETTER F | |
'g' # 0x0067 -> LATIN SMALL LETTER G | |
'h' # 0x0068 -> LATIN SMALL LETTER H | |
'i' # 0x0069 -> LATIN SMALL LETTER I | |
'j' # 0x006a -> LATIN SMALL LETTER J | |
'k' # 0x006b -> LATIN SMALL LETTER K | |
'l' # 0x006c -> LATIN SMALL LETTER L | |
'm' # 0x006d -> LATIN SMALL LETTER M | |
'n' # 0x006e -> LATIN SMALL LETTER N | |
'o' # 0x006f -> LATIN SMALL LETTER O | |
'p' # 0x0070 -> LATIN SMALL LETTER P | |
'q' # 0x0071 -> LATIN SMALL LETTER Q | |
'r' # 0x0072 -> LATIN SMALL LETTER R | |
's' # 0x0073 -> LATIN SMALL LETTER S | |
't' # 0x0074 -> LATIN SMALL LETTER T | |
'u' # 0x0075 -> LATIN SMALL LETTER U | |
'v' # 0x0076 -> LATIN SMALL LETTER V | |
'w' # 0x0077 -> LATIN SMALL LETTER W | |
'x' # 0x0078 -> LATIN SMALL LETTER X | |
'y' # 0x0079 -> LATIN SMALL LETTER Y | |
'z' # 0x007a -> LATIN SMALL LETTER Z | |
'{' # 0x007b -> LEFT CURLY BRACKET | |
'|' # 0x007c -> VERTICAL LINE | |
'}' # 0x007d -> RIGHT CURLY BRACKET | |
'~' # 0x007e -> TILDE | |
'\x7f' # 0x007f -> DELETE | |
'\u0391' # 0x0080 -> GREEK CAPITAL LETTER ALPHA | |
'\u0392' # 0x0081 -> GREEK CAPITAL LETTER BETA | |
'\u0393' # 0x0082 -> GREEK CAPITAL LETTER GAMMA | |
'\u0394' # 0x0083 -> GREEK CAPITAL LETTER DELTA | |
'\u0395' # 0x0084 -> GREEK CAPITAL LETTER EPSILON | |
'\u0396' # 0x0085 -> GREEK CAPITAL LETTER ZETA | |
'\u0397' # 0x0086 -> GREEK CAPITAL LETTER ETA | |
'\u0398' # 0x0087 -> GREEK CAPITAL LETTER THETA | |
'\u0399' # 0x0088 -> GREEK CAPITAL LETTER IOTA | |
'\u039a' # 0x0089 -> GREEK CAPITAL LETTER KAPPA | |
'\u039b' # 0x008a -> GREEK CAPITAL LETTER LAMDA | |
'\u039c' # 0x008b -> GREEK CAPITAL LETTER MU | |
'\u039d' # 0x008c -> GREEK CAPITAL LETTER NU | |
'\u039e' # 0x008d -> GREEK CAPITAL LETTER XI | |
'\u039f' # 0x008e -> GREEK CAPITAL LETTER OMICRON | |
'\u03a0' # 0x008f -> GREEK CAPITAL LETTER PI | |
'\u03a1' # 0x0090 -> GREEK CAPITAL LETTER RHO | |
'\u03a3' # 0x0091 -> GREEK CAPITAL LETTER SIGMA | |
'\u03a4' # 0x0092 -> GREEK CAPITAL LETTER TAU | |
'\u03a5' # 0x0093 -> GREEK CAPITAL LETTER UPSILON | |
'\u03a6' # 0x0094 -> GREEK CAPITAL LETTER PHI | |
'\u03a7' # 0x0095 -> GREEK CAPITAL LETTER CHI | |
'\u03a8' # 0x0096 -> GREEK CAPITAL LETTER PSI | |
'\u03a9' # 0x0097 -> GREEK CAPITAL LETTER OMEGA | |
'\u03b1' # 0x0098 -> GREEK SMALL LETTER ALPHA | |
'\u03b2' # 0x0099 -> GREEK SMALL LETTER BETA | |
'\u03b3' # 0x009a -> GREEK SMALL LETTER GAMMA | |
'\u03b4' # 0x009b -> GREEK SMALL LETTER DELTA | |
'\u03b5' # 0x009c -> GREEK SMALL LETTER EPSILON | |
'\u03b6' # 0x009d -> GREEK SMALL LETTER ZETA | |
'\u03b7' # 0x009e -> GREEK SMALL LETTER ETA | |
'\u03b8' # 0x009f -> GREEK SMALL LETTER THETA | |
'\u03b9' # 0x00a0 -> GREEK SMALL LETTER IOTA | |
'\u03ba' # 0x00a1 -> GREEK SMALL LETTER KAPPA | |
'\u03bb' # 0x00a2 -> GREEK SMALL LETTER LAMDA | |
'\u03bc' # 0x00a3 -> GREEK SMALL LETTER MU | |
'\u03bd' # 0x00a4 -> GREEK SMALL LETTER NU | |
'\u03be' # 0x00a5 -> GREEK SMALL LETTER XI | |
'\u03bf' # 0x00a6 -> GREEK SMALL LETTER OMICRON | |
'\u03c0' # 0x00a7 -> GREEK SMALL LETTER PI | |
'\u03c1' # 0x00a8 -> GREEK SMALL LETTER RHO | |
'\u03c3' # 0x00a9 -> GREEK SMALL LETTER SIGMA | |
'\u03c2' # 0x00aa -> GREEK SMALL LETTER FINAL SIGMA | |
'\u03c4' # 0x00ab -> GREEK SMALL LETTER TAU | |
'\u03c5' # 0x00ac -> GREEK SMALL LETTER UPSILON | |
'\u03c6' # 0x00ad -> GREEK SMALL LETTER PHI | |
'\u03c7' # 0x00ae -> GREEK SMALL LETTER CHI | |
'\u03c8' # 0x00af -> GREEK SMALL LETTER PSI | |
'\u2591' # 0x00b0 -> LIGHT SHADE | |
'\u2592' # 0x00b1 -> MEDIUM SHADE | |
'\u2593' # 0x00b2 -> DARK SHADE | |
'\u2502' # 0x00b3 -> BOX DRAWINGS LIGHT VERTICAL | |
'\u2524' # 0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT | |
'\u2561' # 0x00b5 -> BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE | |
'\u2562' # 0x00b6 -> BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE | |
'\u2556' # 0x00b7 -> BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE | |
'\u2555' # 0x00b8 -> BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE | |
'\u2563' # 0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT | |
'\u2551' # 0x00ba -> BOX DRAWINGS DOUBLE VERTICAL | |
'\u2557' # 0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT | |
'\u255d' # 0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT | |
'\u255c' # 0x00bd -> BOX DRAWINGS UP DOUBLE AND LEFT SINGLE | |
'\u255b' # 0x00be -> BOX DRAWINGS UP SINGLE AND LEFT DOUBLE | |
'\u2510' # 0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT | |
'\u2514' # 0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT | |
'\u2534' # 0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL | |
'\u252c' # 0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL | |
'\u251c' # 0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT | |
'\u2500' # 0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL | |
'\u253c' # 0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL | |
'\u255e' # 0x00c6 -> BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE | |
'\u255f' # 0x00c7 -> BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE | |
'\u255a' # 0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT | |
'\u2554' # 0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT | |
'\u2569' # 0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL | |
'\u2566' # 0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL | |
'\u2560' # 0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT | |
'\u2550' # 0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL | |
'\u256c' # 0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL | |
'\u2567' # 0x00cf -> BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE | |
'\u2568' # 0x00d0 -> BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE | |
'\u2564' # 0x00d1 -> BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE | |
'\u2565' # 0x00d2 -> BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE | |
'\u2559' # 0x00d3 -> BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE | |
'\u2558' # 0x00d4 -> BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE | |
'\u2552' # 0x00d5 -> BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE | |
'\u2553' # 0x00d6 -> BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE | |
'\u256b' # 0x00d7 -> BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE | |
'\u256a' # 0x00d8 -> BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE | |
'\u2518' # 0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT | |
'\u250c' # 0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT | |
'\u2588' # 0x00db -> FULL BLOCK | |
'\u2584' # 0x00dc -> LOWER HALF BLOCK | |
'\u258c' # 0x00dd -> LEFT HALF BLOCK | |
'\u2590' # 0x00de -> RIGHT HALF BLOCK | |
'\u2580' # 0x00df -> UPPER HALF BLOCK | |
'\u03c9' # 0x00e0 -> GREEK SMALL LETTER OMEGA | |
'\u03ac' # 0x00e1 -> GREEK SMALL LETTER ALPHA WITH TONOS | |
'\u03ad' # 0x00e2 -> GREEK SMALL LETTER EPSILON WITH TONOS | |
'\u03ae' # 0x00e3 -> GREEK SMALL LETTER ETA WITH TONOS | |
'\u03ca' # 0x00e4 -> GREEK SMALL LETTER IOTA WITH DIALYTIKA | |
'\u03af' # 0x00e5 -> GREEK SMALL LETTER IOTA WITH TONOS | |
'\u03cc' # 0x00e6 -> GREEK SMALL LETTER OMICRON WITH TONOS | |
'\u03cd' # 0x00e7 -> GREEK SMALL LETTER UPSILON WITH TONOS | |
'\u03cb' # 0x00e8 -> GREEK SMALL LETTER UPSILON WITH DIALYTIKA | |
'\u03ce' # 0x00e9 -> GREEK SMALL LETTER OMEGA WITH TONOS | |
'\u0386' # 0x00ea -> GREEK CAPITAL LETTER ALPHA WITH TONOS | |
'\u0388' # 0x00eb -> GREEK CAPITAL LETTER EPSILON WITH TONOS | |
'\u0389' # 0x00ec -> GREEK CAPITAL LETTER ETA WITH TONOS | |
'\u038a' # 0x00ed -> GREEK CAPITAL LETTER IOTA WITH TONOS | |
'\u038c' # 0x00ee -> GREEK CAPITAL LETTER OMICRON WITH TONOS | |
'\u038e' # 0x00ef -> GREEK CAPITAL LETTER UPSILON WITH TONOS | |
'\u038f' # 0x00f0 -> GREEK CAPITAL LETTER OMEGA WITH TONOS | |
'\xb1' # 0x00f1 -> PLUS-MINUS SIGN | |
'\u2265' # 0x00f2 -> GREATER-THAN OR EQUAL TO | |
'\u2264' # 0x00f3 -> LESS-THAN OR EQUAL TO | |
'\u03aa' # 0x00f4 -> GREEK CAPITAL LETTER IOTA WITH DIALYTIKA | |
'\u03ab' # 0x00f5 -> GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA | |
'\xf7' # 0x00f6 -> DIVISION SIGN | |
'\u2248' # 0x00f7 -> ALMOST EQUAL TO | |
'\xb0' # 0x00f8 -> DEGREE SIGN | |
'\u2219' # 0x00f9 -> BULLET OPERATOR | |
'\xb7' # 0x00fa -> MIDDLE DOT | |
'\u221a' # 0x00fb -> SQUARE ROOT | |
'\u207f' # 0x00fc -> SUPERSCRIPT LATIN SMALL LETTER N | |
'\xb2' # 0x00fd -> SUPERSCRIPT TWO | |
'\u25a0' # 0x00fe -> BLACK SQUARE | |
'\xa0' # 0x00ff -> NO-BREAK SPACE | |
) | |
### Encoding Map | |
encoding_map = { | |
0x0000: 0x0000, # NULL | |
0x0001: 0x0001, # START OF HEADING | |
0x0002: 0x0002, # START OF TEXT | |
0x0003: 0x0003, # END OF TEXT | |
0x0004: 0x0004, # END OF TRANSMISSION | |
0x0005: 0x0005, # ENQUIRY | |
0x0006: 0x0006, # ACKNOWLEDGE | |
0x0007: 0x0007, # BELL | |
0x0008: 0x0008, # BACKSPACE | |
0x0009: 0x0009, # HORIZONTAL TABULATION | |
0x000a: 0x000a, # LINE FEED | |
0x000b: 0x000b, # VERTICAL TABULATION | |
0x000c: 0x000c, # FORM FEED | |
0x000d: 0x000d, # CARRIAGE RETURN | |
0x000e: 0x000e, # SHIFT OUT | |
0x000f: 0x000f, # SHIFT IN | |
0x0010: 0x0010, # DATA LINK ESCAPE | |
0x0011: 0x0011, # DEVICE CONTROL ONE | |
0x0012: 0x0012, # DEVICE CONTROL TWO | |
0x0013: 0x0013, # DEVICE CONTROL THREE | |
0x0014: 0x0014, # DEVICE CONTROL FOUR | |
0x0015: 0x0015, # NEGATIVE ACKNOWLEDGE | |
0x0016: 0x0016, # SYNCHRONOUS IDLE | |
0x0017: 0x0017, # END OF TRANSMISSION BLOCK | |
0x0018: 0x0018, # CANCEL | |
0x0019: 0x0019, # END OF MEDIUM | |
0x001a: 0x001a, # SUBSTITUTE | |
0x001b: 0x001b, # ESCAPE | |
0x001c: 0x001c, # FILE SEPARATOR | |
0x001d: 0x001d, # GROUP SEPARATOR | |
0x001e: 0x001e, # RECORD SEPARATOR | |
0x001f: 0x001f, # UNIT SEPARATOR | |
0x0020: 0x0020, # SPACE | |
0x0021: 0x0021, # EXCLAMATION MARK | |
0x0022: 0x0022, # QUOTATION MARK | |
0x0023: 0x0023, # NUMBER SIGN | |
0x0024: 0x0024, # DOLLAR SIGN | |
0x0025: 0x0025, # PERCENT SIGN | |
0x0026: 0x0026, # AMPERSAND | |
0x0027: 0x0027, # APOSTROPHE | |
0x0028: 0x0028, # LEFT PARENTHESIS | |
0x0029: 0x0029, # RIGHT PARENTHESIS | |
0x002a: 0x002a, # ASTERISK | |
0x002b: 0x002b, # PLUS SIGN | |
0x002c: 0x002c, # COMMA | |
0x002d: 0x002d, # HYPHEN-MINUS | |
0x002e: 0x002e, # FULL STOP | |
0x002f: 0x002f, # SOLIDUS | |
0x0030: 0x0030, # DIGIT ZERO | |
0x0031: 0x0031, # DIGIT ONE | |
0x0032: 0x0032, # DIGIT TWO | |
0x0033: 0x0033, # DIGIT THREE | |
0x0034: 0x0034, # DIGIT FOUR | |
0x0035: 0x0035, # DIGIT FIVE | |
0x0036: 0x0036, # DIGIT SIX | |
0x0037: 0x0037, # DIGIT SEVEN | |
0x0038: 0x0038, # DIGIT EIGHT | |
0x0039: 0x0039, # DIGIT NINE | |
0x003a: 0x003a, # COLON | |
0x003b: 0x003b, # SEMICOLON | |
0x003c: 0x003c, # LESS-THAN SIGN | |
0x003d: 0x003d, # EQUALS SIGN | |
0x003e: 0x003e, # GREATER-THAN SIGN | |
0x003f: 0x003f, # QUESTION MARK | |
0x0040: 0x0040, # COMMERCIAL AT | |
0x0041: 0x0041, # LATIN CAPITAL LETTER A | |
0x0042: 0x0042, # LATIN CAPITAL LETTER B | |
0x0043: 0x0043, # LATIN CAPITAL LETTER C | |
0x0044: 0x0044, # LATIN CAPITAL LETTER D | |
0x0045: 0x0045, # LATIN CAPITAL LETTER E | |
0x0046: 0x0046, # LATIN CAPITAL LETTER F | |
0x0047: 0x0047, # LATIN CAPITAL LETTER G | |
0x0048: 0x0048, # LATIN CAPITAL LETTER H | |
0x0049: 0x0049, # LATIN CAPITAL LETTER I | |
0x004a: 0x004a, # LATIN CAPITAL LETTER J | |
0x004b: 0x004b, # LATIN CAPITAL LETTER K | |
0x004c: 0x004c, # LATIN CAPITAL LETTER L | |
0x004d: 0x004d, # LATIN CAPITAL LETTER M | |
0x004e: 0x004e, # LATIN CAPITAL LETTER N | |
0x004f: 0x004f, # LATIN CAPITAL LETTER O | |
0x0050: 0x0050, # LATIN CAPITAL LETTER P | |
0x0051: 0x0051, # LATIN CAPITAL LETTER Q | |
0x0052: 0x0052, # LATIN CAPITAL LETTER R | |
0x0053: 0x0053, # LATIN CAPITAL LETTER S | |
0x0054: 0x0054, # LATIN CAPITAL LETTER T | |
0x0055: 0x0055, # LATIN CAPITAL LETTER U | |
0x0056: 0x0056, # LATIN CAPITAL LETTER V | |
0x0057: 0x0057, # LATIN CAPITAL LETTER W | |
0x0058: 0x0058, # LATIN CAPITAL LETTER X | |
0x0059: 0x0059, # LATIN CAPITAL LETTER Y | |
0x005a: 0x005a, # LATIN CAPITAL LETTER Z | |
0x005b: 0x005b, # LEFT SQUARE BRACKET | |
0x005c: 0x005c, # REVERSE SOLIDUS | |
0x005d: 0x005d, # RIGHT SQUARE BRACKET | |
0x005e: 0x005e, # CIRCUMFLEX ACCENT | |
0x005f: 0x005f, # LOW LINE | |
0x0060: 0x0060, # GRAVE ACCENT | |
0x0061: 0x0061, # LATIN SMALL LETTER A | |
0x0062: 0x0062, # LATIN SMALL LETTER B | |
0x0063: 0x0063, # LATIN SMALL LETTER C | |
0x0064: 0x0064, # LATIN SMALL LETTER D | |
0x0065: 0x0065, # LATIN SMALL LETTER E | |
0x0066: 0x0066, # LATIN SMALL LETTER F | |
0x0067: 0x0067, # LATIN SMALL LETTER G | |
0x0068: 0x0068, # LATIN SMALL LETTER H | |
0x0069: 0x0069, # LATIN SMALL LETTER I | |
0x006a: 0x006a, # LATIN SMALL LETTER J | |
0x006b: 0x006b, # LATIN SMALL LETTER K | |
0x006c: 0x006c, # LATIN SMALL LETTER L | |
0x006d: 0x006d, # LATIN SMALL LETTER M | |
0x006e: 0x006e, # LATIN SMALL LETTER N | |
0x006f: 0x006f, # LATIN SMALL LETTER O | |
0x0070: 0x0070, # LATIN SMALL LETTER P | |
0x0071: 0x0071, # LATIN SMALL LETTER Q | |
0x0072: 0x0072, # LATIN SMALL LETTER R | |
0x0073: 0x0073, # LATIN SMALL LETTER S | |
0x0074: 0x0074, # LATIN SMALL LETTER T | |
0x0075: 0x0075, # LATIN SMALL LETTER U | |
0x0076: 0x0076, # LATIN SMALL LETTER V | |
0x0077: 0x0077, # LATIN SMALL LETTER W | |
0x0078: 0x0078, # LATIN SMALL LETTER X | |
0x0079: 0x0079, # LATIN SMALL LETTER Y | |
0x007a: 0x007a, # LATIN SMALL LETTER Z | |
0x007b: 0x007b, # LEFT CURLY BRACKET | |
0x007c: 0x007c, # VERTICAL LINE | |
0x007d: 0x007d, # RIGHT CURLY BRACKET | |
0x007e: 0x007e, # TILDE | |
0x007f: 0x007f, # DELETE | |
0x00a0: 0x00ff, # NO-BREAK SPACE | |
0x00b0: 0x00f8, # DEGREE SIGN | |
0x00b1: 0x00f1, # PLUS-MINUS SIGN | |
0x00b2: 0x00fd, # SUPERSCRIPT TWO | |
0x00b7: 0x00fa, # MIDDLE DOT | |
0x00f7: 0x00f6, # DIVISION SIGN | |
0x0386: 0x00ea, # GREEK CAPITAL LETTER ALPHA WITH TONOS | |
0x0388: 0x00eb, # GREEK CAPITAL LETTER EPSILON WITH TONOS | |
0x0389: 0x00ec, # GREEK CAPITAL LETTER ETA WITH TONOS | |
0x038a: 0x00ed, # GREEK CAPITAL LETTER IOTA WITH TONOS | |
0x038c: 0x00ee, # GREEK CAPITAL LETTER OMICRON WITH TONOS | |
0x038e: 0x00ef, # GREEK CAPITAL LETTER UPSILON WITH TONOS | |
0x038f: 0x00f0, # GREEK CAPITAL LETTER OMEGA WITH TONOS | |
0x0391: 0x0080, # GREEK CAPITAL LETTER ALPHA | |
0x0392: 0x0081, # GREEK CAPITAL LETTER BETA | |
0x0393: 0x0082, # GREEK CAPITAL LETTER GAMMA | |
0x0394: 0x0083, # GREEK CAPITAL LETTER DELTA | |
0x0395: 0x0084, # GREEK CAPITAL LETTER EPSILON | |
0x0396: 0x0085, # GREEK CAPITAL LETTER ZETA | |
0x0397: 0x0086, # GREEK CAPITAL LETTER ETA | |
0x0398: 0x0087, # GREEK CAPITAL LETTER THETA | |
0x0399: 0x0088, # GREEK CAPITAL LETTER IOTA | |
0x039a: 0x0089, # GREEK CAPITAL LETTER KAPPA | |
0x039b: 0x008a, # GREEK CAPITAL LETTER LAMDA | |
0x039c: 0x008b, # GREEK CAPITAL LETTER MU | |
0x039d: 0x008c, # GREEK CAPITAL LETTER NU | |
0x039e: 0x008d, # GREEK CAPITAL LETTER XI | |
0x039f: 0x008e, # GREEK CAPITAL LETTER OMICRON | |
0x03a0: 0x008f, # GREEK CAPITAL LETTER PI | |
0x03a1: 0x0090, # GREEK CAPITAL LETTER RHO | |
0x03a3: 0x0091, # GREEK CAPITAL LETTER SIGMA | |
0x03a4: 0x0092, # GREEK CAPITAL LETTER TAU | |
0x03a5: 0x0093, # GREEK CAPITAL LETTER UPSILON | |
0x03a6: 0x0094, # GREEK CAPITAL LETTER PHI | |
0x03a7: 0x0095, # GREEK CAPITAL LETTER CHI | |
0x03a8: 0x0096, # GREEK CAPITAL LETTER PSI | |
0x03a9: 0x0097, # GREEK CAPITAL LETTER OMEGA | |
0x03aa: 0x00f4, # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA | |
0x03ab: 0x00f5, # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA | |
0x03ac: 0x00e1, # GREEK SMALL LETTER ALPHA WITH TONOS | |
0x03ad: 0x00e2, # GREEK SMALL LETTER EPSILON WITH TONOS | |
0x03ae: 0x00e3, # GREEK SMALL LETTER ETA WITH TONOS | |
0x03af: 0x00e5, # GREEK SMALL LETTER IOTA WITH TONOS | |
0x03b1: 0x0098, # GREEK SMALL LETTER ALPHA | |
0x03b2: 0x0099, # GREEK SMALL LETTER BETA | |
0x03b3: 0x009a, # GREEK SMALL LETTER GAMMA | |
0x03b4: 0x009b, # GREEK SMALL LETTER DELTA | |
0x03b5: 0x009c, # GREEK SMALL LETTER EPSILON | |
0x03b6: 0x009d, # GREEK SMALL LETTER ZETA | |
0x03b7: 0x009e, # GREEK SMALL LETTER ETA | |
0x03b8: 0x009f, # GREEK SMALL LETTER THETA | |
0x03b9: 0x00a0, # GREEK SMALL LETTER IOTA | |
0x03ba: 0x00a1, # GREEK SMALL LETTER KAPPA | |
0x03bb: 0x00a2, # GREEK SMALL LETTER LAMDA | |
0x03bc: 0x00a3, # GREEK SMALL LETTER MU | |
0x03bd: 0x00a4, # GREEK SMALL LETTER NU | |
0x03be: 0x00a5, # GREEK SMALL LETTER XI | |
0x03bf: 0x00a6, # GREEK SMALL LETTER OMICRON | |
0x03c0: 0x00a7, # GREEK SMALL LETTER PI | |
0x03c1: 0x00a8, # GREEK SMALL LETTER RHO | |
0x03c2: 0x00aa, # GREEK SMALL LETTER FINAL SIGMA | |
0x03c3: 0x00a9, # GREEK SMALL LETTER SIGMA | |
0x03c4: 0x00ab, # GREEK SMALL LETTER TAU | |
0x03c5: 0x00ac, # GREEK SMALL LETTER UPSILON | |
0x03c6: 0x00ad, # GREEK SMALL LETTER PHI | |
0x03c7: 0x00ae, # GREEK SMALL LETTER CHI | |
0x03c8: 0x00af, # GREEK SMALL LETTER PSI | |
0x03c9: 0x00e0, # GREEK SMALL LETTER OMEGA | |
0x03ca: 0x00e4, # GREEK SMALL LETTER IOTA WITH DIALYTIKA | |
0x03cb: 0x00e8, # GREEK SMALL LETTER UPSILON WITH DIALYTIKA | |
0x03cc: 0x00e6, # GREEK SMALL LETTER OMICRON WITH TONOS | |
0x03cd: 0x00e7, # GREEK SMALL LETTER UPSILON WITH TONOS | |
0x03ce: 0x00e9, # GREEK SMALL LETTER OMEGA WITH TONOS | |
0x207f: 0x00fc, # SUPERSCRIPT LATIN SMALL LETTER N | |
0x2219: 0x00f9, # BULLET OPERATOR | |
0x221a: 0x00fb, # SQUARE ROOT | |
0x2248: 0x00f7, # ALMOST EQUAL TO | |
0x2264: 0x00f3, # LESS-THAN OR EQUAL TO | |
0x2265: 0x00f2, # GREATER-THAN OR EQUAL TO | |
0x2500: 0x00c4, # BOX DRAWINGS LIGHT HORIZONTAL | |
0x2502: 0x00b3, # BOX DRAWINGS LIGHT VERTICAL | |
0x250c: 0x00da, # BOX DRAWINGS LIGHT DOWN AND RIGHT | |
0x2510: 0x00bf, # BOX DRAWINGS LIGHT DOWN AND LEFT | |
0x2514: 0x00c0, # BOX DRAWINGS LIGHT UP AND RIGHT | |
0x2518: 0x00d9, # BOX DRAWINGS LIGHT UP AND LEFT | |
0x251c: 0x00c3, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT | |
0x2524: 0x00b4, # BOX DRAWINGS LIGHT VERTICAL AND LEFT | |
0x252c: 0x00c2, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL | |
0x2534: 0x00c1, # BOX DRAWINGS LIGHT UP AND HORIZONTAL | |
0x253c: 0x00c5, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL | |
0x2550: 0x00cd, # BOX DRAWINGS DOUBLE HORIZONTAL | |
0x2551: 0x00ba, # BOX DRAWINGS DOUBLE VERTICAL | |
0x2552: 0x00d5, # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE | |
0x2553: 0x00d6, # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE | |
0x2554: 0x00c9, # BOX DRAWINGS DOUBLE DOWN AND RIGHT | |
0x2555: 0x00b8, # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE | |
0x2556: 0x00b7, # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE | |
0x2557: 0x00bb, # BOX DRAWINGS DOUBLE DOWN AND LEFT | |
0x2558: 0x00d4, # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE | |
0x2559: 0x00d3, # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE | |
0x255a: 0x00c8, # BOX DRAWINGS DOUBLE UP AND RIGHT | |
0x255b: 0x00be, # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE | |
0x255c: 0x00bd, # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE | |
0x255d: 0x00bc, # BOX DRAWINGS DOUBLE UP AND LEFT | |
0x255e: 0x00c6, # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE | |
0x255f: 0x00c7, # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE | |
0x2560: 0x00cc, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT | |
0x2561: 0x00b5, # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE | |
0x2562: 0x00b6, # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE | |
0x2563: 0x00b9, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT | |
0x2564: 0x00d1, # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE | |
0x2565: 0x00d2, # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE | |
0x2566: 0x00cb, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL | |
0x2567: 0x00cf, # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE | |
0x2568: 0x00d0, # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE | |
0x2569: 0x00ca, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL | |
0x256a: 0x00d8, # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE | |
0x256b: 0x00d7, # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE | |
0x256c: 0x00ce, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL | |
0x2580: 0x00df, # UPPER HALF BLOCK | |
0x2584: 0x00dc, # LOWER HALF BLOCK | |
0x2588: 0x00db, # FULL BLOCK | |
0x258c: 0x00dd, # LEFT HALF BLOCK | |
0x2590: 0x00de, # RIGHT HALF BLOCK | |
0x2591: 0x00b0, # LIGHT SHADE | |
0x2592: 0x00b1, # MEDIUM SHADE | |
0x2593: 0x00b2, # DARK SHADE | |
0x25a0: 0x00fe, # BLACK SQUARE | |
} |
""" Python Character Mapping Codec cp775 generated from 'VENDORS/MICSFT/PC/CP775.TXT' with gencodec.py. | |
"""#" | |
import codecs | |
### Codec APIs | |
class Codec(codecs.Codec): | |
def encode(self,input,errors='strict'): | |
return codecs.charmap_encode(input,errors,encoding_map) | |
def decode(self,input,errors='strict'): | |
return codecs.charmap_decode(input,errors,decoding_table) | |
class IncrementalEncoder(codecs.IncrementalEncoder): | |
def encode(self, input, final=False): | |
return codecs.charmap_encode(input,self.errors,encoding_map)[0] | |
class IncrementalDecoder(codecs.IncrementalDecoder): | |
def decode(self, input, final=False): | |
return codecs.charmap_decode(input,self.errors,decoding_table)[0] | |
class StreamWriter(Codec,codecs.StreamWriter): | |
pass | |
class StreamReader(Codec,codecs.StreamReader): | |
pass | |
### encodings module API | |
def getregentry(): | |
return codecs.CodecInfo( | |
name='cp775', | |
encode=Codec().encode, | |
decode=Codec().decode, | |
incrementalencoder=IncrementalEncoder, | |
incrementaldecoder=IncrementalDecoder, | |
streamreader=StreamReader, | |
streamwriter=StreamWriter, | |
) | |
### Decoding Map | |
decoding_map = codecs.make_identity_dict(range(256)) | |
decoding_map.update({ | |
0x0080: 0x0106, # LATIN CAPITAL LETTER C WITH ACUTE | |
0x0081: 0x00fc, # LATIN SMALL LETTER U WITH DIAERESIS | |
0x0082: 0x00e9, # LATIN SMALL LETTER E WITH ACUTE | |
0x0083: 0x0101, # LATIN SMALL LETTER A WITH MACRON | |
0x0084: 0x00e4, # LATIN SMALL LETTER A WITH DIAERESIS | |
0x0085: 0x0123, # LATIN SMALL LETTER G WITH CEDILLA | |
0x0086: 0x00e5, # LATIN SMALL LETTER A WITH RING ABOVE | |
0x0087: 0x0107, # LATIN SMALL LETTER C WITH ACUTE | |
0x0088: 0x0142, # LATIN SMALL LETTER L WITH STROKE | |
0x0089: 0x0113, # LATIN SMALL LETTER E WITH MACRON | |
0x008a: 0x0156, # LATIN CAPITAL LETTER R WITH CEDILLA | |
0x008b: 0x0157, # LATIN SMALL LETTER R WITH CEDILLA | |
0x008c: 0x012b, # LATIN SMALL LETTER I WITH MACRON | |
0x008d: 0x0179, # LATIN CAPITAL LETTER Z WITH ACUTE | |
0x008e: 0x00c4, # LATIN CAPITAL LETTER A WITH DIAERESIS | |
0x008f: 0x00c5, # LATIN CAPITAL LETTER A WITH RING ABOVE | |
0x0090: 0x00c9, # LATIN CAPITAL LETTER E WITH ACUTE | |
0x0091: 0x00e6, # LATIN SMALL LIGATURE AE | |
0x0092: 0x00c6, # LATIN CAPITAL LIGATURE AE | |
0x0093: 0x014d, # LATIN SMALL LETTER O WITH MACRON | |
0x0094: 0x00f6, # LATIN SMALL LETTER O WITH DIAERESIS | |
0x0095: 0x0122, # LATIN CAPITAL LETTER G WITH CEDILLA | |
0x0096: 0x00a2, # CENT SIGN | |
0x0097: 0x015a, # LATIN CAPITAL LETTER S WITH ACUTE | |
0x0098: 0x015b, # LATIN SMALL LETTER S WITH ACUTE | |
0x0099: 0x00d6, # LATIN CAPITAL LETTER O WITH DIAERESIS | |
0x009a: 0x00dc, # LATIN CAPITAL LETTER U WITH DIAERESIS | |
0x009b: 0x00f8, # LATIN SMALL LETTER O WITH STROKE | |
0x009c: 0x00a3, # POUND SIGN | |
0x009d: 0x00d8, # LATIN CAPITAL LETTER O WITH STROKE | |
0x009e: 0x00d7, # MULTIPLICATION SIGN | |
0x009f: 0x00a4, # CURRENCY SIGN | |
0x00a0: 0x0100, # LATIN CAPITAL LETTER A WITH MACRON | |
0x00a1: 0x012a, # LATIN CAPITAL LETTER I WITH MACRON | |
0x00a2: 0x00f3, # LATIN SMALL LETTER O WITH ACUTE | |
0x00a3: 0x017b, # LATIN CAPITAL LETTER Z WITH DOT ABOVE | |
0x00a4: 0x017c, # LATIN SMALL LETTER Z WITH DOT ABOVE | |
0x00a5: 0x017a, # LATIN SMALL LETTER Z WITH ACUTE | |
0x00a6: 0x201d, # RIGHT DOUBLE QUOTATION MARK | |
0x00a7: 0x00a6, # BROKEN BAR | |
0x00a8: 0x00a9, # COPYRIGHT SIGN | |
0x00a9: 0x00ae, # REGISTERED SIGN | |
0x00aa: 0x00ac, # NOT SIGN | |
0x00ab: 0x00bd, # VULGAR FRACTION ONE HALF | |
0x00ac: 0x00bc, # VULGAR FRACTION ONE QUARTER | |
0x00ad: 0x0141, # LATIN CAPITAL LETTER L WITH STROKE | |
0x00ae: 0x00ab, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK | |
0x00af: 0x00bb, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK | |
0x00b0: 0x2591, # LIGHT SHADE | |
0x00b1: 0x2592, # MEDIUM SHADE | |
0x00b2: 0x2593, # DARK SHADE | |
0x00b3: 0x2502, # BOX DRAWINGS LIGHT VERTICAL | |
0x00b4: 0x2524, # BOX DRAWINGS LIGHT VERTICAL AND LEFT | |
0x00b5: 0x0104, # LATIN CAPITAL LETTER A WITH OGONEK | |
0x00b6: 0x010c, # LATIN CAPITAL LETTER C WITH CARON | |
0x00b7: 0x0118, # LATIN CAPITAL LETTER E WITH OGONEK | |
0x00b8: 0x0116, # LATIN CAPITAL LETTER E WITH DOT ABOVE | |
0x00b9: 0x2563, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT | |
0x00ba: 0x2551, # BOX DRAWINGS DOUBLE VERTICAL | |
0x00bb: 0x2557, # BOX DRAWINGS DOUBLE DOWN AND LEFT | |
0x00bc: 0x255d, # BOX DRAWINGS DOUBLE UP AND LEFT | |
0x00bd: 0x012e, # LATIN CAPITAL LETTER I WITH OGONEK | |
0x00be: 0x0160, # LATIN CAPITAL LETTER S WITH CARON | |
0x00bf: 0x2510, # BOX DRAWINGS LIGHT DOWN AND LEFT | |
0x00c0: 0x2514, # BOX DRAWINGS LIGHT UP AND RIGHT | |
0x00c1: 0x2534, # BOX DRAWINGS LIGHT UP AND HORIZONTAL | |
0x00c2: 0x252c, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL | |
0x00c3: 0x251c, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT | |
0x00c4: 0x2500, # BOX DRAWINGS LIGHT HORIZONTAL | |
0x00c5: 0x253c, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL | |
0x00c6: 0x0172, # LATIN CAPITAL LETTER U WITH OGONEK | |
0x00c7: 0x016a, # LATIN CAPITAL LETTER U WITH MACRON | |
0x00c8: 0x255a, # BOX DRAWINGS DOUBLE UP AND RIGHT | |
0x00c9: 0x2554, # BOX DRAWINGS DOUBLE DOWN AND RIGHT | |
0x00ca: 0x2569, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL | |
0x00cb: 0x2566, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL | |
0x00cc: 0x2560, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT | |
0x00cd: 0x2550, # BOX DRAWINGS DOUBLE HORIZONTAL | |
0x00ce: 0x256c, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL | |
0x00cf: 0x017d, # LATIN CAPITAL LETTER Z WITH CARON | |
0x00d0: 0x0105, # LATIN SMALL LETTER A WITH OGONEK | |
0x00d1: 0x010d, # LATIN SMALL LETTER C WITH CARON | |
0x00d2: 0x0119, # LATIN SMALL LETTER E WITH OGONEK | |
0x00d3: 0x0117, # LATIN SMALL LETTER E WITH DOT ABOVE | |
0x00d4: 0x012f, # LATIN SMALL LETTER I WITH OGONEK | |
0x00d5: 0x0161, # LATIN SMALL LETTER S WITH CARON | |
0x00d6: 0x0173, # LATIN SMALL LETTER U WITH OGONEK | |
0x00d7: 0x016b, # LATIN SMALL LETTER U WITH MACRON | |
0x00d8: 0x017e, # LATIN SMALL LETTER Z WITH CARON | |
0x00d9: 0x2518, # BOX DRAWINGS LIGHT UP AND LEFT | |
0x00da: 0x250c, # BOX DRAWINGS LIGHT DOWN AND RIGHT | |
0x00db: 0x2588, # FULL BLOCK | |
0x00dc: 0x2584, # LOWER HALF BLOCK | |
0x00dd: 0x258c, # LEFT HALF BLOCK | |
0x00de: 0x2590, # RIGHT HALF BLOCK | |
0x00df: 0x2580, # UPPER HALF BLOCK | |
0x00e0: 0x00d3, # LATIN CAPITAL LETTER O WITH ACUTE | |
0x00e1: 0x00df, # LATIN SMALL LETTER SHARP S (GERMAN) | |
0x00e2: 0x014c, # LATIN CAPITAL LETTER O WITH MACRON | |
0x00e3: 0x0143, # LATIN CAPITAL LETTER N WITH ACUTE | |
0x00e4: 0x00f5, # LATIN SMALL LETTER O WITH TILDE | |
0x00e5: 0x00d5, # LATIN CAPITAL LETTER O WITH TILDE | |
0x00e6: 0x00b5, # MICRO SIGN | |
0x00e7: 0x0144, # LATIN SMALL LETTER N WITH ACUTE | |
0x00e8: 0x0136, # LATIN CAPITAL LETTER K WITH CEDILLA | |
0x00e9: 0x0137, # LATIN SMALL LETTER K WITH CEDILLA | |
0x00ea: 0x013b, # LATIN CAPITAL LETTER L WITH CEDILLA | |
0x00eb: 0x013c, # LATIN SMALL LETTER L WITH CEDILLA | |
0x00ec: 0x0146, # LATIN SMALL LETTER N WITH CEDILLA | |
0x00ed: 0x0112, # LATIN CAPITAL LETTER E WITH MACRON | |
0x00ee: 0x0145, # LATIN CAPITAL LETTER N WITH CEDILLA | |
0x00ef: 0x2019, # RIGHT SINGLE QUOTATION MARK | |
0x00f0: 0x00ad, # SOFT HYPHEN | |
0x00f1: 0x00b1, # PLUS-MINUS SIGN | |
0x00f2: 0x201c, # LEFT DOUBLE QUOTATION MARK | |
0x00f3: 0x00be, # VULGAR FRACTION THREE QUARTERS | |
0x00f4: 0x00b6, # PILCROW SIGN | |
0x00f5: 0x00a7, # SECTION SIGN | |
0x00f6: 0x00f7, # DIVISION SIGN | |
0x00f7: 0x201e, # DOUBLE LOW-9 QUOTATION MARK | |
0x00f8: 0x00b0, # DEGREE SIGN | |
0x00f9: 0x2219, # BULLET OPERATOR | |
0x00fa: 0x00b7, # MIDDLE DOT | |
0x00fb: 0x00b9, # SUPERSCRIPT ONE | |
0x00fc: 0x00b3, # SUPERSCRIPT THREE | |
0x00fd: 0x00b2, # SUPERSCRIPT TWO | |
0x00fe: 0x25a0, # BLACK SQUARE | |
0x00ff: 0x00a0, # NO-BREAK SPACE | |
}) | |
### Decoding Table | |
decoding_table = ( | |
'\x00' # 0x0000 -> NULL | |
'\x01' # 0x0001 -> START OF HEADING | |
'\x02' # 0x0002 -> START OF TEXT | |
'\x03' # 0x0003 -> END OF TEXT | |
'\x04' # 0x0004 -> END OF TRANSMISSION | |
'\x05' # 0x0005 -> ENQUIRY | |
'\x06' # 0x0006 -> ACKNOWLEDGE | |
'\x07' # 0x0007 -> BELL | |
'\x08' # 0x0008 -> BACKSPACE | |
'\t' # 0x0009 -> HORIZONTAL TABULATION | |
'\n' # 0x000a -> LINE FEED | |
'\x0b' # 0x000b -> VERTICAL TABULATION | |
'\x0c' # 0x000c -> FORM FEED | |
'\r' # 0x000d -> CARRIAGE RETURN | |
'\x0e' # 0x000e -> SHIFT OUT | |
'\x0f' # 0x000f -> SHIFT IN | |
'\x10' # 0x0010 -> DATA LINK ESCAPE | |
'\x11' # 0x0011 -> DEVICE CONTROL ONE | |
'\x12' # 0x0012 -> DEVICE CONTROL TWO | |
'\x13' # 0x0013 -> DEVICE CONTROL THREE | |
'\x14' # 0x0014 -> DEVICE CONTROL FOUR | |
'\x15' # 0x0015 -> NEGATIVE ACKNOWLEDGE | |
'\x16' # 0x0016 -> SYNCHRONOUS IDLE | |
'\x17' # 0x0017 -> END OF TRANSMISSION BLOCK | |
'\x18' # 0x0018 -> CANCEL | |
'\x19' # 0x0019 -> END OF MEDIUM | |
'\x1a' # 0x001a -> SUBSTITUTE | |
'\x1b' # 0x001b -> ESCAPE | |
'\x1c' # 0x001c -> FILE SEPARATOR | |
'\x1d' # 0x001d -> GROUP SEPARATOR | |
'\x1e' # 0x001e -> RECORD SEPARATOR | |
'\x1f' # 0x001f -> UNIT SEPARATOR | |
' ' # 0x0020 -> SPACE | |
'!' # 0x0021 -> EXCLAMATION MARK | |
'"' # 0x0022 -> QUOTATION MARK | |
'#' # 0x0023 -> NUMBER SIGN | |
'$' # 0x0024 -> DOLLAR SIGN | |
'%' # 0x0025 -> PERCENT SIGN | |
'&' # 0x0026 -> AMPERSAND | |
"'" # 0x0027 -> APOSTROPHE | |
'(' # 0x0028 -> LEFT PARENTHESIS | |
')' # 0x0029 -> RIGHT PARENTHESIS | |
'*' # 0x002a -> ASTERISK | |
'+' # 0x002b -> PLUS SIGN | |
',' # 0x002c -> COMMA | |
'-' # 0x002d -> HYPHEN-MINUS | |
'.' # 0x002e -> FULL STOP | |
'/' # 0x002f -> SOLIDUS | |
'0' # 0x0030 -> DIGIT ZERO | |
'1' # 0x0031 -> DIGIT ONE | |
'2' # 0x0032 -> DIGIT TWO | |
'3' # 0x0033 -> DIGIT THREE | |
'4' # 0x0034 -> DIGIT FOUR | |
'5' # 0x0035 -> DIGIT FIVE | |
'6' # 0x0036 -> DIGIT SIX | |
'7' # 0x0037 -> DIGIT SEVEN | |
'8' # 0x0038 -> DIGIT EIGHT | |
'9' # 0x0039 -> DIGIT NINE | |
':' # 0x003a -> COLON | |
';' # 0x003b -> SEMICOLON | |
'<' # 0x003c -> LESS-THAN SIGN | |
'=' # 0x003d -> EQUALS SIGN | |
'>' # 0x003e -> GREATER-THAN SIGN | |
'?' # 0x003f -> QUESTION MARK | |
'@' # 0x0040 -> COMMERCIAL AT | |
'A' # 0x0041 -> LATIN CAPITAL LETTER A | |
'B' # 0x0042 -> LATIN CAPITAL LETTER B | |
'C' # 0x0043 -> LATIN CAPITAL LETTER C | |
'D' # 0x0044 -> LATIN CAPITAL LETTER D | |
'E' # 0x0045 -> LATIN CAPITAL LETTER E | |
'F' # 0x0046 -> LATIN CAPITAL LETTER F | |
'G' # 0x0047 -> LATIN CAPITAL LETTER G | |
'H' # 0x0048 -> LATIN CAPITAL LETTER H | |
'I' # 0x0049 -> LATIN CAPITAL LETTER I | |
'J' # 0x004a -> LATIN CAPITAL LETTER J | |
'K' # 0x004b -> LATIN CAPITAL LETTER K | |
'L' # 0x004c -> LATIN CAPITAL LETTER L | |
'M' # 0x004d -> LATIN CAPITAL LETTER M | |
'N' # 0x004e -> LATIN CAPITAL LETTER N | |
'O' # 0x004f -> LATIN CAPITAL LETTER O | |
'P' # 0x0050 -> LATIN CAPITAL LETTER P | |
'Q' # 0x0051 -> LATIN CAPITAL LETTER Q | |
'R' # 0x0052 -> LATIN CAPITAL LETTER R | |
'S' # 0x0053 -> LATIN CAPITAL LETTER S | |
'T' # 0x0054 -> LATIN CAPITAL LETTER T | |
'U' # 0x0055 -> LATIN CAPITAL LETTER U | |
'V' # 0x0056 -> LATIN CAPITAL LETTER V | |
'W' # 0x0057 -> LATIN CAPITAL LETTER W | |
'X' # 0x0058 -> LATIN CAPITAL LETTER X | |
'Y' # 0x0059 -> LATIN CAPITAL LETTER Y | |
'Z' # 0x005a -> LATIN CAPITAL LETTER Z | |
'[' # 0x005b -> LEFT SQUARE BRACKET | |
'\\' # 0x005c -> REVERSE SOLIDUS | |
']' # 0x005d -> RIGHT SQUARE BRACKET | |
'^' # 0x005e -> CIRCUMFLEX ACCENT | |
'_' # 0x005f -> LOW LINE | |
'`' # 0x0060 -> GRAVE ACCENT | |
'a' # 0x0061 -> LATIN SMALL LETTER A | |
'b' # 0x0062 -> LATIN SMALL LETTER B | |
'c' # 0x0063 -> LATIN SMALL LETTER C | |
'd' # 0x0064 -> LATIN SMALL LETTER D | |
'e' # 0x0065 -> LATIN SMALL LETTER E | |
'f' # 0x0066 -> LATIN SMALL LETTER F | |
'g' # 0x0067 -> LATIN SMALL LETTER G | |
'h' # 0x0068 -> LATIN SMALL LETTER H | |
'i' # 0x0069 -> LATIN SMALL LETTER I | |
'j' # 0x006a -> LATIN SMALL LETTER J | |
'k' # 0x006b -> LATIN SMALL LETTER K | |
'l' # 0x006c -> LATIN SMALL LETTER L | |
'm' # 0x006d -> LATIN SMALL LETTER M | |
'n' # 0x006e -> LATIN SMALL LETTER N | |
'o' # 0x006f -> LATIN SMALL LETTER O | |
'p' # 0x0070 -> LATIN SMALL LETTER P | |
'q' # 0x0071 -> LATIN SMALL LETTER Q | |
'r' # 0x0072 -> LATIN SMALL LETTER R | |
's' # 0x0073 -> LATIN SMALL LETTER S | |
't' # 0x0074 -> LATIN SMALL LETTER T | |
'u' # 0x0075 -> LATIN SMALL LETTER U | |
'v' # 0x0076 -> LATIN SMALL LETTER V | |
'w' # 0x0077 -> LATIN SMALL LETTER W | |
'x' # 0x0078 -> LATIN SMALL LETTER X | |
'y' # 0x0079 -> LATIN SMALL LETTER Y | |
'z' # 0x007a -> LATIN SMALL LETTER Z | |
'{' # 0x007b -> LEFT CURLY BRACKET | |
'|' # 0x007c -> VERTICAL LINE | |
'}' # 0x007d -> RIGHT CURLY BRACKET | |
'~' # 0x007e -> TILDE | |
'\x7f' # 0x007f -> DELETE | |
'\u0106' # 0x0080 -> LATIN CAPITAL LETTER C WITH ACUTE | |
'\xfc' # 0x0081 -> LATIN SMALL LETTER U WITH DIAERESIS | |
'\xe9' # 0x0082 -> LATIN SMALL LETTER E WITH ACUTE | |
'\u0101' # 0x0083 -> LATIN SMALL LETTER A WITH MACRON | |
'\xe4' # 0x0084 -> LATIN SMALL LETTER A WITH DIAERESIS | |
'\u0123' # 0x0085 -> LATIN SMALL LETTER G WITH CEDILLA | |
'\xe5' # 0x0086 -> LATIN SMALL LETTER A WITH RING ABOVE | |
'\u0107' # 0x0087 -> LATIN SMALL LETTER C WITH ACUTE | |
'\u0142' # 0x0088 -> LATIN SMALL LETTER L WITH STROKE | |
'\u0113' # 0x0089 -> LATIN SMALL LETTER E WITH MACRON | |
'\u0156' # 0x008a -> LATIN CAPITAL LETTER R WITH CEDILLA | |
'\u0157' # 0x008b -> LATIN SMALL LETTER R WITH CEDILLA | |
'\u012b' # 0x008c -> LATIN SMALL LETTER I WITH MACRON | |
'\u0179' # 0x008d -> LATIN CAPITAL LETTER Z WITH ACUTE | |
'\xc4' # 0x008e -> LATIN CAPITAL LETTER A WITH DIAERESIS | |
'\xc5' # 0x008f -> LATIN CAPITAL LETTER A WITH RING ABOVE | |
'\xc9' # 0x0090 -> LATIN CAPITAL LETTER E WITH ACUTE | |
'\xe6' # 0x0091 -> LATIN SMALL LIGATURE AE | |
'\xc6' # 0x0092 -> LATIN CAPITAL LIGATURE AE | |
'\u014d' # 0x0093 -> LATIN SMALL LETTER O WITH MACRON | |
'\xf6' # 0x0094 -> LATIN SMALL LETTER O WITH DIAERESIS | |
'\u0122' # 0x0095 -> LATIN CAPITAL LETTER G WITH CEDILLA | |
'\xa2' # 0x0096 -> CENT SIGN | |
'\u015a' # 0x0097 -> LATIN CAPITAL LETTER S WITH ACUTE | |
'\u015b' # 0x0098 -> LATIN SMALL LETTER S WITH ACUTE | |
'\xd6' # 0x0099 -> LATIN CAPITAL LETTER O WITH DIAERESIS | |
'\xdc' # 0x009a -> LATIN CAPITAL LETTER U WITH DIAERESIS | |
'\xf8' # 0x009b -> LATIN SMALL LETTER O WITH STROKE | |
'\xa3' # 0x009c -> POUND SIGN | |
'\xd8' # 0x009d -> LATIN CAPITAL LETTER O WITH STROKE | |
'\xd7' # 0x009e -> MULTIPLICATION SIGN | |
'\xa4' # 0x009f -> CURRENCY SIGN | |
'\u0100' # 0x00a0 -> LATIN CAPITAL LETTER A WITH MACRON | |
'\u012a' # 0x00a1 -> LATIN CAPITAL LETTER I WITH MACRON | |
'\xf3' # 0x00a2 -> LATIN SMALL LETTER O WITH ACUTE | |
'\u017b' # 0x00a3 -> LATIN CAPITAL LETTER Z WITH DOT ABOVE | |
'\u017c' # 0x00a4 -> LATIN SMALL LETTER Z WITH DOT ABOVE | |
'\u017a' # 0x00a5 -> LATIN SMALL LETTER Z WITH ACUTE | |
'\u201d' # 0x00a6 -> RIGHT DOUBLE QUOTATION MARK | |
'\xa6' # 0x00a7 -> BROKEN BAR | |
'\xa9' # 0x00a8 -> COPYRIGHT SIGN | |
'\xae' # 0x00a9 -> REGISTERED SIGN | |
'\xac' # 0x00aa -> NOT SIGN | |
'\xbd' # 0x00ab -> VULGAR FRACTION ONE HALF | |
'\xbc' # 0x00ac -> VULGAR FRACTION ONE QUARTER | |
'\u0141' # 0x00ad -> LATIN CAPITAL LETTER L WITH STROKE | |
'\xab' # 0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK | |
'\xbb' # 0x00af -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK | |
'\u2591' # 0x00b0 -> LIGHT SHADE | |
'\u2592' # 0x00b1 -> MEDIUM SHADE | |
'\u2593' # 0x00b2 -> DARK SHADE | |
'\u2502' # 0x00b3 -> BOX DRAWINGS LIGHT VERTICAL | |
'\u2524' # 0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT | |
'\u0104' # 0x00b5 -> LATIN CAPITAL LETTER A WITH OGONEK | |
'\u010c' # 0x00b6 -> LATIN CAPITAL LETTER C WITH CARON | |
'\u0118' # 0x00b7 -> LATIN CAPITAL LETTER E WITH OGONEK | |
'\u0116' # 0x00b8 -> LATIN CAPITAL LETTER E WITH DOT ABOVE | |
'\u2563' # 0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT | |
'\u2551' # 0x00ba -> BOX DRAWINGS DOUBLE VERTICAL | |
'\u2557' # 0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT | |
'\u255d' # 0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT | |
'\u012e' # 0x00bd -> LATIN CAPITAL LETTER I WITH OGONEK | |
'\u0160' # 0x00be -> LATIN CAPITAL LETTER S WITH CARON | |
'\u2510' # 0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT | |
'\u2514' # 0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT | |
'\u2534' # 0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL | |
'\u252c' # 0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL | |
'\u251c' # 0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT | |
'\u2500' # 0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL | |
'\u253c' # 0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL | |
'\u0172' # 0x00c6 -> LATIN CAPITAL LETTER U WITH OGONEK | |
'\u016a' # 0x00c7 -> LATIN CAPITAL LETTER U WITH MACRON | |
'\u255a' # 0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT | |
'\u2554' # 0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT | |
'\u2569' # 0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL | |
'\u2566' # 0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL | |
'\u2560' # 0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT | |
'\u2550' # 0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL | |
'\u256c' # 0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL | |
'\u017d' # 0x00cf -> LATIN CAPITAL LETTER Z WITH CARON | |
'\u0105' # 0x00d0 -> LATIN SMALL LETTER A WITH OGONEK | |
'\u010d' # 0x00d1 -> LATIN SMALL LETTER C WITH CARON | |
'\u0119' # 0x00d2 -> LATIN SMALL LETTER E WITH OGONEK | |
'\u0117' # 0x00d3 -> LATIN SMALL LETTER E WITH DOT ABOVE | |
'\u012f' # 0x00d4 -> LATIN SMALL LETTER I WITH OGONEK | |
'\u0161' # 0x00d5 -> LATIN SMALL LETTER S WITH CARON | |
'\u0173' # 0x00d6 -> LATIN SMALL LETTER U WITH OGONEK | |
'\u016b' # 0x00d7 -> LATIN SMALL LETTER U WITH MACRON | |
'\u017e' # 0x00d8 -> LATIN SMALL LETTER Z WITH CARON | |
'\u2518' # 0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT | |
'\u250c' # 0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT | |
'\u2588' # 0x00db -> FULL BLOCK | |
'\u2584' # 0x00dc -> LOWER HALF BLOCK | |
'\u258c' # 0x00dd -> LEFT HALF BLOCK | |
'\u2590' # 0x00de -> RIGHT HALF BLOCK | |
'\u2580' # 0x00df -> UPPER HALF BLOCK | |
'\xd3' # 0x00e0 -> LATIN CAPITAL LETTER O WITH ACUTE | |
'\xdf' # 0x00e1 -> LATIN SMALL LETTER SHARP S (GERMAN) | |
'\u014c' # 0x00e2 -> LATIN CAPITAL LETTER O WITH MACRON | |
'\u0143' # 0x00e3 -> LATIN CAPITAL LETTER N WITH ACUTE | |
'\xf5' # 0x00e4 -> LATIN SMALL LETTER O WITH TILDE | |
'\xd5' # 0x00e5 -> LATIN CAPITAL LETTER O WITH TILDE | |
'\xb5' # 0x00e6 -> MICRO SIGN | |
'\u0144' # 0x00e7 -> LATIN SMALL LETTER N WITH ACUTE | |
'\u0136' # 0x00e8 -> LATIN CAPITAL LETTER K WITH CEDILLA | |
'\u0137' # 0x00e9 -> LATIN SMALL LETTER K WITH CEDILLA | |
'\u013b' # 0x00ea -> LATIN CAPITAL LETTER L WITH CEDILLA | |
'\u013c' # 0x00eb -> LATIN SMALL LETTER L WITH CEDILLA | |
'\u0146' # 0x00ec -> LATIN SMALL LETTER N WITH CEDILLA | |
'\u0112' # 0x00ed -> LATIN CAPITAL LETTER E WITH MACRON | |
'\u0145' # 0x00ee -> LATIN CAPITAL LETTER N WITH CEDILLA | |
'\u2019' # 0x00ef -> RIGHT SINGLE QUOTATION MARK | |
'\xad' # 0x00f0 -> SOFT HYPHEN | |
'\xb1' # 0x00f1 -> PLUS-MINUS SIGN | |
'\u201c' # 0x00f2 -> LEFT DOUBLE QUOTATION MARK | |
'\xbe' # 0x00f3 -> VULGAR FRACTION THREE QUARTERS | |
'\xb6' # 0x00f4 -> PILCROW SIGN | |
'\xa7' # 0x00f5 -> SECTION SIGN | |
'\xf7' # 0x00f6 -> DIVISION SIGN | |
'\u201e' # 0x00f7 -> DOUBLE LOW-9 QUOTATION MARK | |
'\xb0' # 0x00f8 -> DEGREE SIGN | |
'\u2219' # 0x00f9 -> BULLET OPERATOR | |
'\xb7' # 0x00fa -> MIDDLE DOT | |
'\xb9' # 0x00fb -> SUPERSCRIPT ONE | |
'\xb3' # 0x00fc -> SUPERSCRIPT THREE | |
'\xb2' # 0x00fd -> SUPERSCRIPT TWO | |
'\u25a0' # 0x00fe -> BLACK SQUARE | |
'\xa0' # 0x00ff -> NO-BREAK SPACE | |
) | |
### Encoding Map | |
encoding_map = { | |
0x0000: 0x0000, # NULL | |
0x0001: 0x0001, # START OF HEADING | |
0x0002: 0x0002, # START OF TEXT | |
0x0003: 0x0003, # END OF TEXT | |
0x0004: 0x0004, # END OF TRANSMISSION | |
0x0005: 0x0005, # ENQUIRY | |
0x0006: 0x0006, # ACKNOWLEDGE | |
0x0007: 0x0007, # BELL | |
0x0008: 0x0008, # BACKSPACE | |
0x0009: 0x0009, # HORIZONTAL TABULATION | |
0x000a: 0x000a, # LINE FEED | |
0x000b: 0x000b, # VERTICAL TABULATION | |
0x000c: 0x000c, # FORM FEED | |
0x000d: 0x000d, # CARRIAGE RETURN | |
0x000e: 0x000e, # SHIFT OUT | |
0x000f: 0x000f, # SHIFT IN | |
0x0010: 0x0010, # DATA LINK ESCAPE | |
0x0011: 0x0011, # DEVICE CONTROL ONE | |
0x0012: 0x0012, # DEVICE CONTROL TWO | |
0x0013: 0x0013, # DEVICE CONTROL THREE | |
0x0014: 0x0014, # DEVICE CONTROL FOUR | |
0x0015: 0x0015, # NEGATIVE ACKNOWLEDGE | |
0x0016: 0x0016, # SYNCHRONOUS IDLE | |
0x0017: 0x0017, # END OF TRANSMISSION BLOCK | |
0x0018: 0x0018, # CANCEL | |
0x0019: 0x0019, # END OF MEDIUM | |
0x001a: 0x001a, # SUBSTITUTE | |
0x001b: 0x001b, # ESCAPE | |
0x001c: 0x001c, # FILE SEPARATOR | |
0x001d: 0x001d, # GROUP SEPARATOR | |
0x001e: 0x001e, # RECORD SEPARATOR | |
0x001f: 0x001f, # UNIT SEPARATOR | |
0x0020: 0x0020, # SPACE | |
0x0021: 0x0021, # EXCLAMATION MARK | |
0x0022: 0x0022, # QUOTATION MARK | |
0x0023: 0x0023, # NUMBER SIGN | |
0x0024: 0x0024, # DOLLAR SIGN | |
0x0025: 0x0025, # PERCENT SIGN | |
0x0026: 0x0026, # AMPERSAND | |
0x0027: 0x0027, # APOSTROPHE | |
0x0028: 0x0028, # LEFT PARENTHESIS | |
0x0029: 0x0029, # RIGHT PARENTHESIS | |
0x002a: 0x002a, # ASTERISK | |
0x002b: 0x002b, # PLUS SIGN | |
0x002c: 0x002c, # COMMA | |
0x002d: 0x002d, # HYPHEN-MINUS | |
0x002e: 0x002e, # FULL STOP | |
0x002f: 0x002f, # SOLIDUS | |
0x0030: 0x0030, # DIGIT ZERO | |
0x0031: 0x0031, # DIGIT ONE | |
0x0032: 0x0032, # DIGIT TWO | |
0x0033: 0x0033, # DIGIT THREE | |
0x0034: 0x0034, # DIGIT FOUR | |
0x0035: 0x0035, # DIGIT FIVE | |
0x0036: 0x0036, # DIGIT SIX | |
0x0037: 0x0037, # DIGIT SEVEN | |
0x0038: 0x0038, # DIGIT EIGHT | |
0x0039: 0x0039, # DIGIT NINE | |
0x003a: 0x003a, # COLON | |
0x003b: 0x003b, # SEMICOLON | |
0x003c: 0x003c, # LESS-THAN SIGN | |
0x003d: 0x003d, # EQUALS SIGN | |
0x003e: 0x003e, # GREATER-THAN SIGN | |
0x003f: 0x003f, # QUESTION MARK | |
0x0040: 0x0040, # COMMERCIAL AT | |
0x0041: 0x0041, # LATIN CAPITAL LETTER A | |
0x0042: 0x0042, # LATIN CAPITAL LETTER B | |
0x0043: 0x0043, # LATIN CAPITAL LETTER C | |
0x0044: 0x0044, # LATIN CAPITAL LETTER D | |
0x0045: 0x0045, # LATIN CAPITAL LETTER E | |
0x0046: 0x0046, # LATIN CAPITAL LETTER F | |
0x0047: 0x0047, # LATIN CAPITAL LETTER G | |
0x0048: 0x0048, # LATIN CAPITAL LETTER H | |
0x0049: 0x0049, # LATIN CAPITAL LETTER I | |
0x004a: 0x004a, # LATIN CAPITAL LETTER J | |
0x004b: 0x004b, # LATIN CAPITAL LETTER K | |
0x004c: 0x004c, # LATIN CAPITAL LETTER L | |
0x004d: 0x004d, # LATIN CAPITAL LETTER M | |
0x004e: 0x004e, # LATIN CAPITAL LETTER N | |
0x004f: 0x004f, # LATIN CAPITAL LETTER O | |
0x0050: 0x0050, # LATIN CAPITAL LETTER P | |
0x0051: 0x0051, # LATIN CAPITAL LETTER Q | |
0x0052: 0x0052, # LATIN CAPITAL LETTER R | |
0x0053: 0x0053, # LATIN CAPITAL LETTER S | |
0x0054: 0x0054, # LATIN CAPITAL LETTER T | |
0x0055: 0x0055, # LATIN CAPITAL LETTER U | |
0x0056: 0x0056, # LATIN CAPITAL LETTER V | |
0x0057: 0x0057, # LATIN CAPITAL LETTER W | |
0x0058: 0x0058, # LATIN CAPITAL LETTER X | |
0x0059: 0x0059, # LATIN CAPITAL LETTER Y | |
0x005a: 0x005a, # LATIN CAPITAL LETTER Z | |
0x005b: 0x005b, # LEFT SQUARE BRACKET | |
0x005c: 0x005c, # REVERSE SOLIDUS | |
0x005d: 0x005d, # RIGHT SQUARE BRACKET | |
0x005e: 0x005e, # CIRCUMFLEX ACCENT | |
0x005f: 0x005f, # LOW LINE | |
0x0060: 0x0060, # GRAVE ACCENT | |
0x0061: 0x0061, # LATIN SMALL LETTER A | |
0x0062: 0x0062, # LATIN SMALL LETTER B | |
0x0063: 0x0063, # LATIN SMALL LETTER C | |
0x0064: 0x0064, # LATIN SMALL LETTER D | |
0x0065: 0x0065, # LATIN SMALL LETTER E | |
0x0066: 0x0066, # LATIN SMALL LETTER F | |
0x0067: 0x0067, # LATIN SMALL LETTER G | |
0x0068: 0x0068, # LATIN SMALL LETTER H | |
0x0069: 0x0069, # LATIN SMALL LETTER I | |
0x006a: 0x006a, # LATIN SMALL LETTER J | |
0x006b: 0x006b, # LATIN SMALL LETTER K | |
0x006c: 0x006c, # LATIN SMALL LETTER L | |
0x006d: 0x006d, # LATIN SMALL LETTER M | |
0x006e: 0x006e, # LATIN SMALL LETTER N | |
0x006f: 0x006f, # LATIN SMALL LETTER O | |
0x0070: 0x0070, # LATIN SMALL LETTER P | |
0x0071: 0x0071, # LATIN SMALL LETTER Q | |
0x0072: 0x0072, # LATIN SMALL LETTER R | |
0x0073: 0x0073, # LATIN SMALL LETTER S | |
0x0074: 0x0074, # LATIN SMALL LETTER T | |
0x0075: 0x0075, # LATIN SMALL LETTER U | |
0x0076: 0x0076, # LATIN SMALL LETTER V | |
0x0077: 0x0077, # LATIN SMALL LETTER W | |
0x0078: 0x0078, # LATIN SMALL LETTER X | |
0x0079: 0x0079, # LATIN SMALL LETTER Y | |
0x007a: 0x007a, # LATIN SMALL LETTER Z | |
0x007b: 0x007b, # LEFT CURLY BRACKET | |
0x007c: 0x007c, # VERTICAL LINE | |
0x007d: 0x007d, # RIGHT CURLY BRACKET | |
0x007e: 0x007e, # TILDE | |
0x007f: 0x007f, # DELETE | |
0x00a0: 0x00ff, # NO-BREAK SPACE | |
0x00a2: 0x0096, # CENT SIGN | |
0x00a3: 0x009c, # POUND SIGN | |
0x00a4: 0x009f, # CURRENCY SIGN | |
0x00a6: 0x00a7, # BROKEN BAR | |
0x00a7: 0x00f5, # SECTION SIGN | |
0x00a9: 0x00a8, # COPYRIGHT SIGN | |
0x00ab: 0x00ae, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK | |
0x00ac: 0x00aa, # NOT SIGN | |
0x00ad: 0x00f0, # SOFT HYPHEN | |
0x00ae: 0x00a9, # REGISTERED SIGN | |
0x00b0: 0x00f8, # DEGREE SIGN | |
0x00b1: 0x00f1, # PLUS-MINUS SIGN | |
0x00b2: 0x00fd, # SUPERSCRIPT TWO | |
0x00b3: 0x00fc, # SUPERSCRIPT THREE | |
0x00b5: 0x00e6, # MICRO SIGN | |
0x00b6: 0x00f4, # PILCROW SIGN | |
0x00b7: 0x00fa, # MIDDLE DOT | |
0x00b9: 0x00fb, # SUPERSCRIPT ONE | |
0x00bb: 0x00af, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK | |
0x00bc: 0x00ac, # VULGAR FRACTION ONE QUARTER | |
0x00bd: 0x00ab, # VULGAR FRACTION ONE HALF | |
0x00be: 0x00f3, # VULGAR FRACTION THREE QUARTERS | |
0x00c4: 0x008e, # LATIN CAPITAL LETTER A WITH DIAERESIS | |
0x00c5: 0x008f, # LATIN CAPITAL LETTER A WITH RING ABOVE | |
0x00c6: 0x0092, # LATIN CAPITAL LIGATURE AE | |
0x00c9: 0x0090, # LATIN CAPITAL LETTER E WITH ACUTE | |
0x00d3: 0x00e0, # LATIN CAPITAL LETTER O WITH ACUTE | |
0x00d5: 0x00e5, # LATIN CAPITAL LETTER O WITH TILDE | |
0x00d6: 0x0099, # LATIN CAPITAL LETTER O WITH DIAERESIS | |
0x00d7: 0x009e, # MULTIPLICATION SIGN | |
0x00d8: 0x009d, # LATIN CAPITAL LETTER O WITH STROKE | |
0x00dc: 0x009a, # LATIN CAPITAL LETTER U WITH DIAERESIS | |
0x00df: 0x00e1, # LATIN SMALL LETTER SHARP S (GERMAN) | |
0x00e4: 0x0084, # LATIN SMALL LETTER A WITH DIAERESIS | |
0x00e5: 0x0086, # LATIN SMALL LETTER A WITH RING ABOVE | |
0x00e6: 0x0091, # LATIN SMALL LIGATURE AE | |
0x00e9: 0x0082, # LATIN SMALL LETTER E WITH ACUTE | |
0x00f3: 0x00a2, # LATIN SMALL LETTER O WITH ACUTE | |
0x00f5: 0x00e4, # LATIN SMALL LETTER O WITH TILDE | |
0x00f6: 0x0094, # LATIN SMALL LETTER O WITH DIAERESIS | |
0x00f7: 0x00f6, # DIVISION SIGN | |
0x00f8: 0x009b, # LATIN SMALL LETTER O WITH STROKE | |
0x00fc: 0x0081, # LATIN SMALL LETTER U WITH DIAERESIS | |
0x0100: 0x00a0, # LATIN CAPITAL LETTER A WITH MACRON | |
0x0101: 0x0083, # LATIN SMALL LETTER A WITH MACRON | |
0x0104: 0x00b5, # LATIN CAPITAL LETTER A WITH OGONEK | |
0x0105: 0x00d0, # LATIN SMALL LETTER A WITH OGONEK | |
0x0106: 0x0080, # LATIN CAPITAL LETTER C WITH ACUTE | |
0x0107: 0x0087, # LATIN SMALL LETTER C WITH ACUTE | |
0x010c: 0x00b6, # LATIN CAPITAL LETTER C WITH CARON | |
0x010d: 0x00d1, # LATIN SMALL LETTER C WITH CARON | |
0x0112: 0x00ed, # LATIN CAPITAL LETTER E WITH MACRON | |
0x0113: 0x0089, # LATIN SMALL LETTER E WITH MACRON | |
0x0116: 0x00b8, # LATIN CAPITAL LETTER E WITH DOT ABOVE | |
0x0117: 0x00d3, # LATIN SMALL LETTER E WITH DOT ABOVE | |
0x0118: 0x00b7, # LATIN CAPITAL LETTER E WITH OGONEK | |
0x0119: 0x00d2, # LATIN SMALL LETTER E WITH OGONEK | |
0x0122: 0x0095, # LATIN CAPITAL LETTER G WITH CEDILLA | |
0x0123: 0x0085, # LATIN SMALL LETTER G WITH CEDILLA | |
0x012a: 0x00a1, # LATIN CAPITAL LETTER I WITH MACRON | |
0x012b: 0x008c, # LATIN SMALL LETTER I WITH MACRON | |
0x012e: 0x00bd, # LATIN CAPITAL LETTER I WITH OGONEK | |
0x012f: 0x00d4, # LATIN SMALL LETTER I WITH OGONEK | |
0x0136: 0x00e8, # LATIN CAPITAL LETTER K WITH CEDILLA | |
0x0137: 0x00e9, # LATIN SMALL LETTER K WITH CEDILLA | |
0x013b: 0x00ea, # LATIN CAPITAL LETTER L WITH CEDILLA | |
0x013c: 0x00eb, # LATIN SMALL LETTER L WITH CEDILLA | |
0x0141: 0x00ad, # LATIN CAPITAL LETTER L WITH STROKE | |
0x0142: 0x0088, # LATIN SMALL LETTER L WITH STROKE | |
0x0143: 0x00e3, # LATIN CAPITAL LETTER N WITH ACUTE | |
0x0144: 0x00e7, # LATIN SMALL LETTER N WITH ACUTE | |
0x0145: 0x00ee, # LATIN CAPITAL LETTER N WITH CEDILLA | |
0x0146: 0x00ec, # LATIN SMALL LETTER N WITH CEDILLA | |
0x014c: 0x00e2, # LATIN CAPITAL LETTER O WITH MACRON | |
0x014d: 0x0093, # LATIN SMALL LETTER O WITH MACRON | |
0x0156: 0x008a, # LATIN CAPITAL LETTER R WITH CEDILLA | |
0x0157: 0x008b, # LATIN SMALL LETTER R WITH CEDILLA | |
0x015a: 0x0097, # LATIN CAPITAL LETTER S WITH ACUTE | |
0x015b: 0x0098, # LATIN SMALL LETTER S WITH ACUTE | |
0x0160: 0x00be, # LATIN CAPITAL LETTER S WITH CARON | |
0x0161: 0x00d5, # LATIN SMALL LETTER S WITH CARON | |
0x016a: 0x00c7, # LATIN CAPITAL LETTER U WITH MACRON | |
0x016b: 0x00d7, # LATIN SMALL LETTER U WITH MACRON | |
0x0172: 0x00c6, # LATIN CAPITAL LETTER U WITH OGONEK | |
0x0173: 0x00d6, # LATIN SMALL LETTER U WITH OGONEK | |
0x0179: 0x008d, # LATIN CAPITAL LETTER Z WITH ACUTE | |
0x017a: 0x00a5, # LATIN SMALL LETTER Z WITH ACUTE | |
0x017b: 0x00a3, # LATIN CAPITAL LETTER Z WITH DOT ABOVE | |
0x017c: 0x00a4, # LATIN SMALL LETTER Z WITH DOT ABOVE | |
0x017d: 0x00cf, # LATIN CAPITAL LETTER Z WITH CARON | |
0x017e: 0x00d8, # LATIN SMALL LETTER Z WITH CARON | |
0x2019: 0x00ef, # RIGHT SINGLE QUOTATION MARK | |
0x201c: 0x00f2, # LEFT DOUBLE QUOTATION MARK | |
0x201d: 0x00a6, # RIGHT DOUBLE QUOTATION MARK | |
0x201e: 0x00f7, # DOUBLE LOW-9 QUOTATION MARK | |
0x2219: 0x00f9, # BULLET OPERATOR | |
0x2500: 0x00c4, # BOX DRAWINGS LIGHT HORIZONTAL | |
0x2502: 0x00b3, # BOX DRAWINGS LIGHT VERTICAL | |
0x250c: 0x00da, # BOX DRAWINGS LIGHT DOWN AND RIGHT | |
0x2510: 0x00bf, # BOX DRAWINGS LIGHT DOWN AND LEFT | |
0x2514: 0x00c0, # BOX DRAWINGS LIGHT UP AND RIGHT | |
0x2518: 0x00d9, # BOX DRAWINGS LIGHT UP AND LEFT | |
0x251c: 0x00c3, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT | |
0x2524: 0x00b4, # BOX DRAWINGS LIGHT VERTICAL AND LEFT | |
0x252c: 0x00c2, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL | |
0x2534: 0x00c1, # BOX DRAWINGS LIGHT UP AND HORIZONTAL | |
0x253c: 0x00c5, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL | |
0x2550: 0x00cd, # BOX DRAWINGS DOUBLE HORIZONTAL | |
0x2551: 0x00ba, # BOX DRAWINGS DOUBLE VERTICAL | |
0x2554: 0x00c9, # BOX DRAWINGS DOUBLE DOWN AND RIGHT | |
0x2557: 0x00bb, # BOX DRAWINGS DOUBLE DOWN AND LEFT | |
0x255a: 0x00c8, # BOX DRAWINGS DOUBLE UP AND RIGHT | |
0x255d: 0x00bc, # BOX DRAWINGS DOUBLE UP AND LEFT | |
0x2560: 0x00cc, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT | |
0x2563: 0x00b9, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT | |
0x2566: 0x00cb, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL | |
0x2569: 0x00ca, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL | |
0x256c: 0x00ce, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL | |
0x2580: 0x00df, # UPPER HALF BLOCK | |
0x2584: 0x00dc, # LOWER HALF BLOCK | |
0x2588: 0x00db, # FULL BLOCK | |
0x258c: 0x00dd, # LEFT HALF BLOCK | |
0x2590: 0x00de, # RIGHT HALF BLOCK | |
0x2591: 0x00b0, # LIGHT SHADE | |
0x2592: 0x00b1, # MEDIUM SHADE | |
0x2593: 0x00b2, # DARK SHADE | |
0x25a0: 0x00fe, # BLACK SQUARE | |
} |
""" Python Character Mapping Codec generated from 'VENDORS/MICSFT/PC/CP850.TXT' with gencodec.py. | |
"""#" | |
import codecs | |
### Codec APIs | |
class Codec(codecs.Codec): | |
def encode(self,input,errors='strict'): | |
return codecs.charmap_encode(input,errors,encoding_map) | |
def decode(self,input,errors='strict'): | |
return codecs.charmap_decode(input,errors,decoding_table) | |
class IncrementalEncoder(codecs.IncrementalEncoder): | |
def encode(self, input, final=False): | |
return codecs.charmap_encode(input,self.errors,encoding_map)[0] | |
class IncrementalDecoder(codecs.IncrementalDecoder): | |
def decode(self, input, final=False): | |
return codecs.charmap_decode(input,self.errors,decoding_table)[0] | |
class StreamWriter(Codec,codecs.StreamWriter): | |
pass | |
class StreamReader(Codec,codecs.StreamReader): | |
pass | |
### encodings module API | |
def getregentry(): | |
return codecs.CodecInfo( | |
name='cp850', | |
encode=Codec().encode, | |
decode=Codec().decode, | |
incrementalencoder=IncrementalEncoder, | |
incrementaldecoder=IncrementalDecoder, | |
streamreader=StreamReader, | |
streamwriter=StreamWriter, | |
) | |
### Decoding Map | |
decoding_map = codecs.make_identity_dict(range(256)) | |
decoding_map.update({ | |
0x0080: 0x00c7, # LATIN CAPITAL LETTER C WITH CEDILLA | |
0x0081: 0x00fc, # LATIN SMALL LETTER U WITH DIAERESIS | |
0x0082: 0x00e9, # LATIN SMALL LETTER E WITH ACUTE | |
0x0083: 0x00e2, # LATIN SMALL LETTER A WITH CIRCUMFLEX | |
0x0084: 0x00e4, # LATIN SMALL LETTER A WITH DIAERESIS | |
0x0085: 0x00e0, # LATIN SMALL LETTER A WITH GRAVE | |
0x0086: 0x00e5, # LATIN SMALL LETTER A WITH RING ABOVE | |
0x0087: 0x00e7, # LATIN SMALL LETTER C WITH CEDILLA | |
0x0088: 0x00ea, # LATIN SMALL LETTER E WITH CIRCUMFLEX | |
0x0089: 0x00eb, # LATIN SMALL LETTER E WITH DIAERESIS | |
0x008a: 0x00e8, # LATIN SMALL LETTER E WITH GRAVE | |
0x008b: 0x00ef, # LATIN SMALL LETTER I WITH DIAERESIS | |
0x008c: 0x00ee, # LATIN SMALL LETTER I WITH CIRCUMFLEX | |
0x008d: 0x00ec, # LATIN SMALL LETTER I WITH GRAVE | |
0x008e: 0x00c4, # LATIN CAPITAL LETTER A WITH DIAERESIS | |
0x008f: 0x00c5, # LATIN CAPITAL LETTER A WITH RING ABOVE | |
0x0090: 0x00c9, # LATIN CAPITAL LETTER E WITH ACUTE | |
0x0091: 0x00e6, # LATIN SMALL LIGATURE AE | |
0x0092: 0x00c6, # LATIN CAPITAL LIGATURE AE | |
0x0093: 0x00f4, # LATIN SMALL LETTER O WITH CIRCUMFLEX | |
0x0094: 0x00f6, # LATIN SMALL LETTER O WITH DIAERESIS | |
0x0095: 0x00f2, # LATIN SMALL LETTER O WITH GRAVE | |
0x0096: 0x00fb, # LATIN SMALL LETTER U WITH CIRCUMFLEX | |
0x0097: 0x00f9, # LATIN SMALL LETTER U WITH GRAVE | |
0x0098: 0x00ff, # LATIN SMALL LETTER Y WITH DIAERESIS | |
0x0099: 0x00d6, # LATIN CAPITAL LETTER O WITH DIAERESIS | |
0x009a: 0x00dc, # LATIN CAPITAL LETTER U WITH DIAERESIS | |
0x009b: 0x00f8, # LATIN SMALL LETTER O WITH STROKE | |
0x009c: 0x00a3, # POUND SIGN | |
0x009d: 0x00d8, # LATIN CAPITAL LETTER O WITH STROKE | |
0x009e: 0x00d7, # MULTIPLICATION SIGN | |
0x009f: 0x0192, # LATIN SMALL LETTER F WITH HOOK | |
0x00a0: 0x00e1, # LATIN SMALL LETTER A WITH ACUTE | |
0x00a1: 0x00ed, # LATIN SMALL LETTER I WITH ACUTE | |
0x00a2: 0x00f3, # LATIN SMALL LETTER O WITH ACUTE | |
0x00a3: 0x00fa, # LATIN SMALL LETTER U WITH ACUTE | |
0x00a4: 0x00f1, # LATIN SMALL LETTER N WITH TILDE | |
0x00a5: 0x00d1, # LATIN CAPITAL LETTER N WITH TILDE | |
0x00a6: 0x00aa, # FEMININE ORDINAL INDICATOR | |
0x00a7: 0x00ba, # MASCULINE ORDINAL INDICATOR | |
0x00a8: 0x00bf, # INVERTED QUESTION MARK | |
0x00a9: 0x00ae, # REGISTERED SIGN | |
0x00aa: 0x00ac, # NOT SIGN | |
0x00ab: 0x00bd, # VULGAR FRACTION ONE HALF | |
0x00ac: 0x00bc, # VULGAR FRACTION ONE QUARTER | |
0x00ad: 0x00a1, # INVERTED EXCLAMATION MARK | |
0x00ae: 0x00ab, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK | |
0x00af: 0x00bb, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK | |
0x00b0: 0x2591, # LIGHT SHADE | |
0x00b1: 0x2592, # MEDIUM SHADE | |
0x00b2: 0x2593, # DARK SHADE | |
0x00b3: 0x2502, # BOX DRAWINGS LIGHT VERTICAL | |
0x00b4: 0x2524, # BOX DRAWINGS LIGHT VERTICAL AND LEFT | |
0x00b5: 0x00c1, # LATIN CAPITAL LETTER A WITH ACUTE | |
0x00b6: 0x00c2, # LATIN CAPITAL LETTER A WITH CIRCUMFLEX | |
0x00b7: 0x00c0, # LATIN CAPITAL LETTER A WITH GRAVE | |
0x00b8: 0x00a9, # COPYRIGHT SIGN | |
0x00b9: 0x2563, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT | |
0x00ba: 0x2551, # BOX DRAWINGS DOUBLE VERTICAL | |
0x00bb: 0x2557, # BOX DRAWINGS DOUBLE DOWN AND LEFT | |
0x00bc: 0x255d, # BOX DRAWINGS DOUBLE UP AND LEFT | |
0x00bd: 0x00a2, # CENT SIGN | |
0x00be: 0x00a5, # YEN SIGN | |
0x00bf: 0x2510, # BOX DRAWINGS LIGHT DOWN AND LEFT | |
0x00c0: 0x2514, # BOX DRAWINGS LIGHT UP AND RIGHT | |
0x00c1: 0x2534, # BOX DRAWINGS LIGHT UP AND HORIZONTAL | |
0x00c2: 0x252c, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL | |
0x00c3: 0x251c, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT | |
0x00c4: 0x2500, # BOX DRAWINGS LIGHT HORIZONTAL | |
0x00c5: 0x253c, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL | |
0x00c6: 0x00e3, # LATIN SMALL LETTER A WITH TILDE | |
0x00c7: 0x00c3, # LATIN CAPITAL LETTER A WITH TILDE | |
0x00c8: 0x255a, # BOX DRAWINGS DOUBLE UP AND RIGHT | |
0x00c9: 0x2554, # BOX DRAWINGS DOUBLE DOWN AND RIGHT | |
0x00ca: 0x2569, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL | |
0x00cb: 0x2566, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL | |
0x00cc: 0x2560, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT | |
0x00cd: 0x2550, # BOX DRAWINGS DOUBLE HORIZONTAL | |
0x00ce: 0x256c, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL | |
0x00cf: 0x00a4, # CURRENCY SIGN | |
0x00d0: 0x00f0, # LATIN SMALL LETTER ETH | |
0x00d1: 0x00d0, # LATIN CAPITAL LETTER ETH | |
0x00d2: 0x00ca, # LATIN CAPITAL LETTER E WITH CIRCUMFLEX | |
0x00d3: 0x00cb, # LATIN CAPITAL LETTER E WITH DIAERESIS | |
0x00d4: 0x00c8, # LATIN CAPITAL LETTER E WITH GRAVE | |
0x00d5: 0x0131, # LATIN SMALL LETTER DOTLESS I | |
0x00d6: 0x00cd, # LATIN CAPITAL LETTER I WITH ACUTE | |
0x00d7: 0x00ce, # LATIN CAPITAL LETTER I WITH CIRCUMFLEX | |
0x00d8: 0x00cf, # LATIN CAPITAL LETTER I WITH DIAERESIS | |
0x00d9: 0x2518, # BOX DRAWINGS LIGHT UP AND LEFT | |
0x00da: 0x250c, # BOX DRAWINGS LIGHT DOWN AND RIGHT | |
0x00db: 0x2588, # FULL BLOCK | |
0x00dc: 0x2584, # LOWER HALF BLOCK | |
0x00dd: 0x00a6, # BROKEN BAR | |
0x00de: 0x00cc, # LATIN CAPITAL LETTER I WITH GRAVE | |
0x00df: 0x2580, # UPPER HALF BLOCK | |
0x00e0: 0x00d3, # LATIN CAPITAL LETTER O WITH ACUTE | |
0x00e1: 0x00df, # LATIN SMALL LETTER SHARP S | |
0x00e2: 0x00d4, # LATIN CAPITAL LETTER O WITH CIRCUMFLEX | |
0x00e3: 0x00d2, # LATIN CAPITAL LETTER O WITH GRAVE | |
0x00e4: 0x00f5, # LATIN SMALL LETTER O WITH TILDE | |
0x00e5: 0x00d5, # LATIN CAPITAL LETTER O WITH TILDE | |
0x00e6: 0x00b5, # MICRO SIGN | |
0x00e7: 0x00fe, # LATIN SMALL LETTER THORN | |
0x00e8: 0x00de, # LATIN CAPITAL LETTER THORN | |
0x00e9: 0x00da, # LATIN CAPITAL LETTER U WITH ACUTE | |
0x00ea: 0x00db, # LATIN CAPITAL LETTER U WITH CIRCUMFLEX | |
0x00eb: 0x00d9, # LATIN CAPITAL LETTER U WITH GRAVE | |
0x00ec: 0x00fd, # LATIN SMALL LETTER Y WITH ACUTE | |
0x00ed: 0x00dd, # LATIN CAPITAL LETTER Y WITH ACUTE | |
0x00ee: 0x00af, # MACRON | |
0x00ef: 0x00b4, # ACUTE ACCENT | |
0x00f0: 0x00ad, # SOFT HYPHEN | |
0x00f1: 0x00b1, # PLUS-MINUS SIGN | |
0x00f2: 0x2017, # DOUBLE LOW LINE | |
0x00f3: 0x00be, # VULGAR FRACTION THREE QUARTERS | |
0x00f4: 0x00b6, # PILCROW SIGN | |
0x00f5: 0x00a7, # SECTION SIGN | |
0x00f6: 0x00f7, # DIVISION SIGN | |
0x00f7: 0x00b8, # CEDILLA | |
0x00f8: 0x00b0, # DEGREE SIGN | |
0x00f9: 0x00a8, # DIAERESIS | |
0x00fa: 0x00b7, # MIDDLE DOT | |
0x00fb: 0x00b9, # SUPERSCRIPT ONE | |
0x00fc: 0x00b3, # SUPERSCRIPT THREE | |
0x00fd: 0x00b2, # SUPERSCRIPT TWO | |
0x00fe: 0x25a0, # BLACK SQUARE | |
0x00ff: 0x00a0, # NO-BREAK SPACE | |
}) | |
### Decoding Table | |
decoding_table = ( | |
'\x00' # 0x0000 -> NULL | |
'\x01' # 0x0001 -> START OF HEADING | |
'\x02' # 0x0002 -> START OF TEXT | |
'\x03' # 0x0003 -> END OF TEXT | |
'\x04' # 0x0004 -> END OF TRANSMISSION | |
'\x05' # 0x0005 -> ENQUIRY | |
'\x06' # 0x0006 -> ACKNOWLEDGE | |
'\x07' # 0x0007 -> BELL | |
'\x08' # 0x0008 -> BACKSPACE | |
'\t' # 0x0009 -> HORIZONTAL TABULATION | |
'\n' # 0x000a -> LINE FEED | |
'\x0b' # 0x000b -> VERTICAL TABULATION | |
'\x0c' # 0x000c -> FORM FEED | |
'\r' # 0x000d -> CARRIAGE RETURN | |
'\x0e' # 0x000e -> SHIFT OUT | |
'\x0f' # 0x000f -> SHIFT IN | |
'\x10' # 0x0010 -> DATA LINK ESCAPE | |
'\x11' # 0x0011 -> DEVICE CONTROL ONE | |
'\x12' # 0x0012 -> DEVICE CONTROL TWO | |
'\x13' # 0x0013 -> DEVICE CONTROL THREE | |
'\x14' # 0x0014 -> DEVICE CONTROL FOUR | |
'\x15' # 0x0015 -> NEGATIVE ACKNOWLEDGE | |
'\x16' # 0x0016 -> SYNCHRONOUS IDLE | |
'\x17' # 0x0017 -> END OF TRANSMISSION BLOCK | |
'\x18' # 0x0018 -> CANCEL | |
'\x19' # 0x0019 -> END OF MEDIUM | |
'\x1a' # 0x001a -> SUBSTITUTE | |
'\x1b' # 0x001b -> ESCAPE | |
'\x1c' # 0x001c -> FILE SEPARATOR | |
'\x1d' # 0x001d -> GROUP SEPARATOR | |
'\x1e' # 0x001e -> RECORD SEPARATOR | |
'\x1f' # 0x001f -> UNIT SEPARATOR | |
' ' # 0x0020 -> SPACE | |
'!' # 0x0021 -> EXCLAMATION MARK | |
'"' # 0x0022 -> QUOTATION MARK | |
'#' # 0x0023 -> NUMBER SIGN | |
'$' # 0x0024 -> DOLLAR SIGN | |
'%' # 0x0025 -> PERCENT SIGN | |
'&' # 0x0026 -> AMPERSAND | |
"'" # 0x0027 -> APOSTROPHE | |
'(' # 0x0028 -> LEFT PARENTHESIS | |
')' # 0x0029 -> RIGHT PARENTHESIS | |
'*' # 0x002a -> ASTERISK | |
'+' # 0x002b -> PLUS SIGN | |
',' # 0x002c -> COMMA | |
'-' # 0x002d -> HYPHEN-MINUS | |
'.' # 0x002e -> FULL STOP | |
'/' # 0x002f -> SOLIDUS | |
'0' # 0x0030 -> DIGIT ZERO | |
'1' # 0x0031 -> DIGIT ONE | |
'2' # 0x0032 -> DIGIT TWO | |
'3' # 0x0033 -> DIGIT THREE | |
'4' # 0x0034 -> DIGIT FOUR | |
'5' # 0x0035 -> DIGIT FIVE | |
'6' # 0x0036 -> DIGIT SIX | |
'7' # 0x0037 -> DIGIT SEVEN | |
'8' # 0x0038 -> DIGIT EIGHT | |
'9' # 0x0039 -> DIGIT NINE | |
':' # 0x003a -> COLON | |
';' # 0x003b -> SEMICOLON | |
'<' # 0x003c -> LESS-THAN SIGN | |
'=' # 0x003d -> EQUALS SIGN | |
'>' # 0x003e -> GREATER-THAN SIGN | |
'?' # 0x003f -> QUESTION MARK | |
'@' # 0x0040 -> COMMERCIAL AT | |
'A' # 0x0041 -> LATIN CAPITAL LETTER A | |
'B' # 0x0042 -> LATIN CAPITAL LETTER B | |
'C' # 0x0043 -> LATIN CAPITAL LETTER C | |
'D' # 0x0044 -> LATIN CAPITAL LETTER D | |
'E' # 0x0045 -> LATIN CAPITAL LETTER E | |
'F' # 0x0046 -> LATIN CAPITAL LETTER F | |
'G' # 0x0047 -> LATIN CAPITAL LETTER G | |
'H' # 0x0048 -> LATIN CAPITAL LETTER H | |
'I' # 0x0049 -> LATIN CAPITAL LETTER I | |
'J' # 0x004a -> LATIN CAPITAL LETTER J | |
'K' # 0x004b -> LATIN CAPITAL LETTER K | |
'L' # 0x004c -> LATIN CAPITAL LETTER L | |
'M' # 0x004d -> LATIN CAPITAL LETTER M | |
'N' # 0x004e -> LATIN CAPITAL LETTER N | |
'O' # 0x004f -> LATIN CAPITAL LETTER O | |
'P' # 0x0050 -> LATIN CAPITAL LETTER P | |
'Q' # 0x0051 -> LATIN CAPITAL LETTER Q | |
'R' # 0x0052 -> LATIN CAPITAL LETTER R | |
'S' # 0x0053 -> LATIN CAPITAL LETTER S | |
'T' # 0x0054 -> LATIN CAPITAL LETTER T | |
'U' # 0x0055 -> LATIN CAPITAL LETTER U | |
'V' # 0x0056 -> LATIN CAPITAL LETTER V | |
'W' # 0x0057 -> LATIN CAPITAL LETTER W | |
'X' # 0x0058 -> LATIN CAPITAL LETTER X | |
'Y' # 0x0059 -> LATIN CAPITAL LETTER Y | |
'Z' # 0x005a -> LATIN CAPITAL LETTER Z | |
'[' # 0x005b -> LEFT SQUARE BRACKET | |
'\\' # 0x005c -> REVERSE SOLIDUS | |
']' # 0x005d -> RIGHT SQUARE BRACKET | |
'^' # 0x005e -> CIRCUMFLEX ACCENT | |
'_' # 0x005f -> LOW LINE | |
'`' # 0x0060 -> GRAVE ACCENT | |
'a' # 0x0061 -> LATIN SMALL LETTER A | |
'b' # 0x0062 -> LATIN SMALL LETTER B | |
'c' # 0x0063 -> LATIN SMALL LETTER C | |
'd' # 0x0064 -> LATIN SMALL LETTER D | |
'e' # 0x0065 -> LATIN SMALL LETTER E | |
'f' # 0x0066 -> LATIN SMALL LETTER F | |
'g' # 0x0067 -> LATIN SMALL LETTER G | |
'h' # 0x0068 -> LATIN SMALL LETTER H | |
'i' # 0x0069 -> LATIN SMALL LETTER I | |
'j' # 0x006a -> LATIN SMALL LETTER J | |
'k' # 0x006b -> LATIN SMALL LETTER K | |
'l' # 0x006c -> LATIN SMALL LETTER L | |
'm' # 0x006d -> LATIN SMALL LETTER M | |
'n' # 0x006e -> LATIN SMALL LETTER N | |
'o' # 0x006f -> LATIN SMALL LETTER O | |
'p' # 0x0070 -> LATIN SMALL LETTER P | |
'q' # 0x0071 -> LATIN SMALL LETTER Q | |
'r' # 0x0072 -> LATIN SMALL LETTER R | |
's' # 0x0073 -> LATIN SMALL LETTER S | |
't' # 0x0074 -> LATIN SMALL LETTER T | |
'u' # 0x0075 -> LATIN SMALL LETTER U | |
'v' # 0x0076 -> LATIN SMALL LETTER V | |
'w' # 0x0077 -> LATIN SMALL LETTER W | |
'x' # 0x0078 -> LATIN SMALL LETTER X | |
'y' # 0x0079 -> LATIN SMALL LETTER Y | |
'z' # 0x007a -> LATIN SMALL LETTER Z | |
'{' # 0x007b -> LEFT CURLY BRACKET | |
'|' # 0x007c -> VERTICAL LINE | |
'}' # 0x007d -> RIGHT CURLY BRACKET | |
'~' # 0x007e -> TILDE | |
'\x7f' # 0x007f -> DELETE | |
'\xc7' # 0x0080 -> LATIN CAPITAL LETTER C WITH CEDILLA | |
'\xfc' # 0x0081 -> LATIN SMALL LETTER U WITH DIAERESIS | |
'\xe9' # 0x0082 -> LATIN SMALL LETTER E WITH ACUTE | |
'\xe2' # 0x0083 -> LATIN SMALL LETTER A WITH CIRCUMFLEX | |
'\xe4' # 0x0084 -> LATIN SMALL LETTER A WITH DIAERESIS | |
'\xe0' # 0x0085 -> LATIN SMALL LETTER A WITH GRAVE | |
'\xe5' # 0x0086 -> LATIN SMALL LETTER A WITH RING ABOVE | |
'\xe7' # 0x0087 -> LATIN SMALL LETTER C WITH CEDILLA | |
'\xea' # 0x0088 -> LATIN SMALL LETTER E WITH CIRCUMFLEX | |
'\xeb' # 0x0089 -> LATIN SMALL LETTER E WITH DIAERESIS | |
'\xe8' # 0x008a -> LATIN SMALL LETTER E WITH GRAVE | |
'\xef' # 0x008b -> LATIN SMALL LETTER I WITH DIAERESIS | |
'\xee' # 0x008c -> LATIN SMALL LETTER I WITH CIRCUMFLEX | |
'\xec' # 0x008d -> LATIN SMALL LETTER I WITH GRAVE | |
'\xc4' # 0x008e -> LATIN CAPITAL LETTER A WITH DIAERESIS | |
'\xc5' # 0x008f -> LATIN CAPITAL LETTER A WITH RING ABOVE | |
'\xc9' # 0x0090 -> LATIN CAPITAL LETTER E WITH ACUTE | |
'\xe6' # 0x0091 -> LATIN SMALL LIGATURE AE | |
'\xc6' # 0x0092 -> LATIN CAPITAL LIGATURE AE | |
'\xf4' # 0x0093 -> LATIN SMALL LETTER O WITH CIRCUMFLEX | |
'\xf6' # 0x0094 -> LATIN SMALL LETTER O WITH DIAERESIS | |
'\xf2' # 0x0095 -> LATIN SMALL LETTER O WITH GRAVE | |
'\xfb' # 0x0096 -> LATIN SMALL LETTER U WITH CIRCUMFLEX | |
'\xf9' # 0x0097 -> LATIN SMALL LETTER U WITH GRAVE | |
'\xff' # 0x0098 -> LATIN SMALL LETTER Y WITH DIAERESIS | |
'\xd6' # 0x0099 -> LATIN CAPITAL LETTER O WITH DIAERESIS | |
'\xdc' # 0x009a -> LATIN CAPITAL LETTER U WITH DIAERESIS | |
'\xf8' # 0x009b -> LATIN SMALL LETTER O WITH STROKE | |
'\xa3' # 0x009c -> POUND SIGN | |
'\xd8' # 0x009d -> LATIN CAPITAL LETTER O WITH STROKE | |
'\xd7' # 0x009e -> MULTIPLICATION SIGN | |
'\u0192' # 0x009f -> LATIN SMALL LETTER F WITH HOOK | |
'\xe1' # 0x00a0 -> LATIN SMALL LETTER A WITH ACUTE | |
'\xed' # 0x00a1 -> LATIN SMALL LETTER I WITH ACUTE | |
'\xf3' # 0x00a2 -> LATIN SMALL LETTER O WITH ACUTE | |
'\xfa' # 0x00a3 -> LATIN SMALL LETTER U WITH ACUTE | |
'\xf1' # 0x00a4 -> LATIN SMALL LETTER N WITH TILDE | |
'\xd1' # 0x00a5 -> LATIN CAPITAL LETTER N WITH TILDE | |
'\xaa' # 0x00a6 -> FEMININE ORDINAL INDICATOR | |
'\xba' # 0x00a7 -> MASCULINE ORDINAL INDICATOR | |
'\xbf' # 0x00a8 -> INVERTED QUESTION MARK | |
'\xae' # 0x00a9 -> REGISTERED SIGN | |
'\xac' # 0x00aa -> NOT SIGN | |
'\xbd' # 0x00ab -> VULGAR FRACTION ONE HALF | |
'\xbc' # 0x00ac -> VULGAR FRACTION ONE QUARTER | |
'\xa1' # 0x00ad -> INVERTED EXCLAMATION MARK | |
'\xab' # 0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK | |
'\xbb' # 0x00af -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK | |
'\u2591' # 0x00b0 -> LIGHT SHADE | |
'\u2592' # 0x00b1 -> MEDIUM SHADE | |
'\u2593' # 0x00b2 -> DARK SHADE | |
'\u2502' # 0x00b3 -> BOX DRAWINGS LIGHT VERTICAL | |
'\u2524' # 0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT | |
'\xc1' # 0x00b5 -> LATIN CAPITAL LETTER A WITH ACUTE | |
'\xc2' # 0x00b6 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX | |
'\xc0' # 0x00b7 -> LATIN CAPITAL LETTER A WITH GRAVE | |
'\xa9' # 0x00b8 -> COPYRIGHT SIGN | |
'\u2563' # 0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT | |
'\u2551' # 0x00ba -> BOX DRAWINGS DOUBLE VERTICAL | |
'\u2557' # 0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT | |
'\u255d' # 0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT | |
'\xa2' # 0x00bd -> CENT SIGN | |
'\xa5' # 0x00be -> YEN SIGN | |
'\u2510' # 0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT | |
'\u2514' # 0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT | |
'\u2534' # 0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL | |
'\u252c' # 0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL | |
'\u251c' # 0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT | |
'\u2500' # 0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL | |
'\u253c' # 0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL | |
'\xe3' # 0x00c6 -> LATIN SMALL LETTER A WITH TILDE | |
'\xc3' # 0x00c7 -> LATIN CAPITAL LETTER A WITH TILDE | |
'\u255a' # 0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT | |
'\u2554' # 0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT | |
'\u2569' # 0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL | |
'\u2566' # 0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL | |
'\u2560' # 0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT | |
'\u2550' # 0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL | |
'\u256c' # 0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL | |
'\xa4' # 0x00cf -> CURRENCY SIGN | |
'\xf0' # 0x00d0 -> LATIN SMALL LETTER ETH | |
'\xd0' # 0x00d1 -> LATIN CAPITAL LETTER ETH | |
'\xca' # 0x00d2 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX | |
'\xcb' # 0x00d3 -> LATIN CAPITAL LETTER E WITH DIAERESIS | |
'\xc8' # 0x00d4 -> LATIN CAPITAL LETTER E WITH GRAVE | |
'\u0131' # 0x00d5 -> LATIN SMALL LETTER DOTLESS I | |
'\xcd' # 0x00d6 -> LATIN CAPITAL LETTER I WITH ACUTE | |
'\xce' # 0x00d7 -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX | |
'\xcf' # 0x00d8 -> LATIN CAPITAL LETTER I WITH DIAERESIS | |
'\u2518' # 0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT | |
'\u250c' # 0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT | |
'\u2588' # 0x00db -> FULL BLOCK | |
'\u2584' # 0x00dc -> LOWER HALF BLOCK | |
'\xa6' # 0x00dd -> BROKEN BAR | |
'\xcc' # 0x00de -> LATIN CAPITAL LETTER I WITH GRAVE | |
'\u2580' # 0x00df -> UPPER HALF BLOCK | |
'\xd3' # 0x00e0 -> LATIN CAPITAL LETTER O WITH ACUTE | |
'\xdf' # 0x00e1 -> LATIN SMALL LETTER SHARP S | |
'\xd4' # 0x00e2 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX | |
'\xd2' # 0x00e3 -> LATIN CAPITAL LETTER O WITH GRAVE | |
'\xf5' # 0x00e4 -> LATIN SMALL LETTER O WITH TILDE | |
'\xd5' # 0x00e5 -> LATIN CAPITAL LETTER O WITH TILDE | |
'\xb5' # 0x00e6 -> MICRO SIGN | |
'\xfe' # 0x00e7 -> LATIN SMALL LETTER THORN | |
'\xde' # 0x00e8 -> LATIN CAPITAL LETTER THORN | |
'\xda' # 0x00e9 -> LATIN CAPITAL LETTER U WITH ACUTE | |
'\xdb' # 0x00ea -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX | |
'\xd9' # 0x00eb -> LATIN CAPITAL LETTER U WITH GRAVE | |
'\xfd' # 0x00ec -> LATIN SMALL LETTER Y WITH ACUTE | |
'\xdd' # 0x00ed -> LATIN CAPITAL LETTER Y WITH ACUTE | |
'\xaf' # 0x00ee -> MACRON | |
'\xb4' # 0x00ef -> ACUTE ACCENT | |
'\xad' # 0x00f0 -> SOFT HYPHEN | |
'\xb1' # 0x00f1 -> PLUS-MINUS SIGN | |
'\u2017' # 0x00f2 -> DOUBLE LOW LINE | |
'\xbe' # 0x00f3 -> VULGAR FRACTION THREE QUARTERS | |
'\xb6' # 0x00f4 -> PILCROW SIGN | |
'\xa7' # 0x00f5 -> SECTION SIGN | |
'\xf7' # 0x00f6 -> DIVISION SIGN | |
'\xb8' # 0x00f7 -> CEDILLA | |
'\xb0' # 0x00f8 -> DEGREE SIGN | |
'\xa8' # 0x00f9 -> DIAERESIS | |
'\xb7' # 0x00fa -> MIDDLE DOT | |
'\xb9' # 0x00fb -> SUPERSCRIPT ONE | |
'\xb3' # 0x00fc -> SUPERSCRIPT THREE | |
'\xb2' # 0x00fd -> SUPERSCRIPT TWO | |
'\u25a0' # 0x00fe -> BLACK SQUARE | |
'\xa0' # 0x00ff -> NO-BREAK SPACE | |
) | |
### Encoding Map | |
encoding_map = { | |
0x0000: 0x0000, # NULL | |
0x0001: 0x0001, # START OF HEADING | |
0x0002: 0x0002, # START OF TEXT | |
0x0003: 0x0003, # END OF TEXT | |
0x0004: 0x0004, # END OF TRANSMISSION | |
0x0005: 0x0005, # ENQUIRY | |
0x0006: 0x0006, # ACKNOWLEDGE | |
0x0007: 0x0007, # BELL | |
0x0008: 0x0008, # BACKSPACE | |
0x0009: 0x0009, # HORIZONTAL TABULATION | |
0x000a: 0x000a, # LINE FEED | |
0x000b: 0x000b, # VERTICAL TABULATION | |
0x000c: 0x000c, # FORM FEED | |
0x000d: 0x000d, # CARRIAGE RETURN | |
0x000e: 0x000e, # SHIFT OUT | |
0x000f: 0x000f, # SHIFT IN | |
0x0010: 0x0010, # DATA LINK ESCAPE | |
0x0011: 0x0011, # DEVICE CONTROL ONE | |
0x0012: 0x0012, # DEVICE CONTROL TWO | |
0x0013: 0x0013, # DEVICE CONTROL THREE | |
0x0014: 0x0014, # DEVICE CONTROL FOUR | |
0x0015: 0x0015, # NEGATIVE ACKNOWLEDGE | |
0x0016: 0x0016, # SYNCHRONOUS IDLE | |
0x0017: 0x0017, # END OF TRANSMISSION BLOCK | |
0x0018: 0x0018, # CANCEL | |
0x0019: 0x0019, # END OF MEDIUM | |
0x001a: 0x001a, # SUBSTITUTE | |
0x001b: 0x001b, # ESCAPE | |
0x001c: 0x001c, # FILE SEPARATOR | |
0x001d: 0x001d, # GROUP SEPARATOR | |
0x001e: 0x001e, # RECORD SEPARATOR | |
0x001f: 0x001f, # UNIT SEPARATOR | |
0x0020: 0x0020, # SPACE | |
0x0021: 0x0021, # EXCLAMATION MARK | |
0x0022: 0x0022, # QUOTATION MARK | |
0x0023: 0x0023, # NUMBER SIGN | |
0x0024: 0x0024, # DOLLAR SIGN | |
0x0025: 0x0025, # PERCENT SIGN | |
0x0026: 0x0026, # AMPERSAND | |
0x0027: 0x0027, # APOSTROPHE | |
0x0028: 0x0028, # LEFT PARENTHESIS | |
0x0029: 0x0029, # RIGHT PARENTHESIS | |
0x002a: 0x002a, # ASTERISK | |
0x002b: 0x002b, # PLUS SIGN | |
0x002c: 0x002c, # COMMA | |
0x002d: 0x002d, # HYPHEN-MINUS | |
0x002e: 0x002e, # FULL STOP | |
0x002f: 0x002f, # SOLIDUS | |
0x0030: 0x0030, # DIGIT ZERO | |
0x0031: 0x0031, # DIGIT ONE | |
0x0032: 0x0032, # DIGIT TWO | |
0x0033: 0x0033, # DIGIT THREE | |
0x0034: 0x0034, # DIGIT FOUR | |
0x0035: 0x0035, # DIGIT FIVE | |
0x0036: 0x0036, # DIGIT SIX | |
0x0037: 0x0037, # DIGIT SEVEN | |
0x0038: 0x0038, # DIGIT EIGHT | |
0x0039: 0x0039, # DIGIT NINE | |
0x003a: 0x003a, # COLON | |
0x003b: 0x003b, # SEMICOLON | |
0x003c: 0x003c, # LESS-THAN SIGN | |
0x003d: 0x003d, # EQUALS SIGN | |
0x003e: 0x003e, # GREATER-THAN SIGN | |
0x003f: 0x003f, # QUESTION MARK | |
0x0040: 0x0040, # COMMERCIAL AT | |
0x0041: 0x0041, # LATIN CAPITAL LETTER A | |
0x0042: 0x0042, # LATIN CAPITAL LETTER B | |
0x0043: 0x0043, # LATIN CAPITAL LETTER C | |
0x0044: 0x0044, # LATIN CAPITAL LETTER D | |
0x0045: 0x0045, # LATIN CAPITAL LETTER E | |
0x0046: 0x0046, # LATIN CAPITAL LETTER F | |
0x0047: 0x0047, # LATIN CAPITAL LETTER G | |
0x0048: 0x0048, # LATIN CAPITAL LETTER H | |
0x0049: 0x0049, # LATIN CAPITAL LETTER I | |
0x004a: 0x004a, # LATIN CAPITAL LETTER J | |
0x004b: 0x004b, # LATIN CAPITAL LETTER K | |
0x004c: 0x004c, # LATIN CAPITAL LETTER L | |
0x004d: 0x004d, # LATIN CAPITAL LETTER M | |
0x004e: 0x004e, # LATIN CAPITAL LETTER N | |
0x004f: 0x004f, # LATIN CAPITAL LETTER O | |
0x0050: 0x0050, # LATIN CAPITAL LETTER P | |
0x0051: 0x0051, # LATIN CAPITAL LETTER Q | |
0x0052: 0x0052, # LATIN CAPITAL LETTER R | |
0x0053: 0x0053, # LATIN CAPITAL LETTER S | |
0x0054: 0x0054, # LATIN CAPITAL LETTER T | |
0x0055: 0x0055, # LATIN CAPITAL LETTER U | |
0x0056: 0x0056, # LATIN CAPITAL LETTER V | |
0x0057: 0x0057, # LATIN CAPITAL LETTER W | |
0x0058: 0x0058, # LATIN CAPITAL LETTER X | |
0x0059: 0x0059, # LATIN CAPITAL LETTER Y | |
0x005a: 0x005a, # LATIN CAPITAL LETTER Z | |
0x005b: 0x005b, # LEFT SQUARE BRACKET | |
0x005c: 0x005c, # REVERSE SOLIDUS | |
0x005d: 0x005d, # RIGHT SQUARE BRACKET | |
0x005e: 0x005e, # CIRCUMFLEX ACCENT | |
0x005f: 0x005f, # LOW LINE | |
0x0060: 0x0060, # GRAVE ACCENT | |
0x0061: 0x0061, # LATIN SMALL LETTER A | |
0x0062: 0x0062, # LATIN SMALL LETTER B | |
0x0063: 0x0063, # LATIN SMALL LETTER C | |
0x0064: 0x0064, # LATIN SMALL LETTER D | |
0x0065: 0x0065, # LATIN SMALL LETTER E | |
0x0066: 0x0066, # LATIN SMALL LETTER F | |
0x0067: 0x0067, # LATIN SMALL LETTER G | |
0x0068: 0x0068, # LATIN SMALL LETTER H | |
0x0069: 0x0069, # LATIN SMALL LETTER I | |
0x006a: 0x006a, # LATIN SMALL LETTER J | |
0x006b: 0x006b, # LATIN SMALL LETTER K | |
0x006c: 0x006c, # LATIN SMALL LETTER L | |
0x006d: 0x006d, # LATIN SMALL LETTER M | |
0x006e: 0x006e, # LATIN SMALL LETTER N | |
0x006f: 0x006f, # LATIN SMALL LETTER O | |
0x0070: 0x0070, # LATIN SMALL LETTER P | |
0x0071: 0x0071, # LATIN SMALL LETTER Q | |
0x0072: 0x0072, # LATIN SMALL LETTER R | |
0x0073: 0x0073, # LATIN SMALL LETTER S | |
0x0074: 0x0074, # LATIN SMALL LETTER T | |
0x0075: 0x0075, # LATIN SMALL LETTER U | |
0x0076: 0x0076, # LATIN SMALL LETTER V | |
0x0077: 0x0077, # LATIN SMALL LETTER W | |
0x0078: 0x0078, # LATIN SMALL LETTER X | |
0x0079: 0x0079, # LATIN SMALL LETTER Y | |
0x007a: 0x007a, # LATIN SMALL LETTER Z | |
0x007b: 0x007b, # LEFT CURLY BRACKET | |
0x007c: 0x007c, # VERTICAL LINE | |
0x007d: 0x007d, # RIGHT CURLY BRACKET | |
0x007e: 0x007e, # TILDE | |
0x007f: 0x007f, # DELETE | |
0x00a0: 0x00ff, # NO-BREAK SPACE | |
0x00a1: 0x00ad, # INVERTED EXCLAMATION MARK | |
0x00a2: 0x00bd, # CENT SIGN | |
0x00a3: 0x009c, # POUND SIGN | |
0x00a4: 0x00cf, # CURRENCY SIGN | |
0x00a5: 0x00be, # YEN SIGN | |
0x00a6: 0x00dd, # BROKEN BAR | |
0x00a7: 0x00f5, # SECTION SIGN | |
0x00a8: 0x00f9, # DIAERESIS | |
0x00a9: 0x00b8, # COPYRIGHT SIGN | |
0x00aa: 0x00a6, # FEMININE ORDINAL INDICATOR | |
0x00ab: 0x00ae, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK | |
0x00ac: 0x00aa, # NOT SIGN | |
0x00ad: 0x00f0, # SOFT HYPHEN | |
0x00ae: 0x00a9, # REGISTERED SIGN | |
0x00af: 0x00ee, # MACRON | |
0x00b0: 0x00f8, # DEGREE SIGN | |
0x00b1: 0x00f1, # PLUS-MINUS SIGN | |
0x00b2: 0x00fd, # SUPERSCRIPT TWO | |
0x00b3: 0x00fc, # SUPERSCRIPT THREE | |
0x00b4: 0x00ef, # ACUTE ACCENT | |
0x00b5: 0x00e6, # MICRO SIGN | |
0x00b6: 0x00f4, # PILCROW SIGN | |
0x00b7: 0x00fa, # MIDDLE DOT | |
0x00b8: 0x00f7, # CEDILLA | |
0x00b9: 0x00fb, # SUPERSCRIPT ONE | |
0x00ba: 0x00a7, # MASCULINE ORDINAL INDICATOR | |
0x00bb: 0x00af, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK | |
0x00bc: 0x00ac, # VULGAR FRACTION ONE QUARTER | |
0x00bd: 0x00ab, # VULGAR FRACTION ONE HALF | |
0x00be: 0x00f3, # VULGAR FRACTION THREE QUARTERS | |
0x00bf: 0x00a8, # INVERTED QUESTION MARK | |
0x00c0: 0x00b7, # LATIN CAPITAL LETTER A WITH GRAVE | |
0x00c1: 0x00b5, # LATIN CAPITAL LETTER A WITH ACUTE | |
0x00c2: 0x00b6, # LATIN CAPITAL LETTER A WITH CIRCUMFLEX | |
0x00c3: 0x00c7, # LATIN CAPITAL LETTER A WITH TILDE | |
0x00c4: 0x008e, # LATIN CAPITAL LETTER A WITH DIAERESIS | |
0x00c5: 0x008f, # LATIN CAPITAL LETTER A WITH RING ABOVE | |
0x00c6: 0x0092, # LATIN CAPITAL LIGATURE AE | |
0x00c7: 0x0080, # LATIN CAPITAL LETTER C WITH CEDILLA | |
0x00c8: 0x00d4, # LATIN CAPITAL LETTER E WITH GRAVE | |
0x00c9: 0x0090, # LATIN CAPITAL LETTER E WITH ACUTE | |
0x00ca: 0x00d2, # LATIN CAPITAL LETTER E WITH CIRCUMFLEX | |
0x00cb: 0x00d3, # LATIN CAPITAL LETTER E WITH DIAERESIS | |
0x00cc: 0x00de, # LATIN CAPITAL LETTER I WITH GRAVE | |
0x00cd: 0x00d6, # LATIN CAPITAL LETTER I WITH ACUTE | |
0x00ce: 0x00d7, # LATIN CAPITAL LETTER I WITH CIRCUMFLEX | |
0x00cf: 0x00d8, # LATIN CAPITAL LETTER I WITH DIAERESIS | |
0x00d0: 0x00d1, # LATIN CAPITAL LETTER ETH | |
0x00d1: 0x00a5, # LATIN CAPITAL LETTER N WITH TILDE | |
0x00d2: 0x00e3, # LATIN CAPITAL LETTER O WITH GRAVE | |
0x00d3: 0x00e0, # LATIN CAPITAL LETTER O WITH ACUTE | |
0x00d4: 0x00e2, # LATIN CAPITAL LETTER O WITH CIRCUMFLEX | |
0x00d5: 0x00e5, # LATIN CAPITAL LETTER O WITH TILDE | |
0x00d6: 0x0099, # LATIN CAPITAL LETTER O WITH DIAERESIS | |
0x00d7: 0x009e, # MULTIPLICATION SIGN | |
0x00d8: 0x009d, # LATIN CAPITAL LETTER O WITH STROKE | |
0x00d9: 0x00eb, # LATIN CAPITAL LETTER U WITH GRAVE | |
0x00da: 0x00e9, # LATIN CAPITAL LETTER U WITH ACUTE | |
0x00db: 0x00ea, # LATIN CAPITAL LETTER U WITH CIRCUMFLEX | |
0x00dc: 0x009a, # LATIN CAPITAL LETTER U WITH DIAERESIS | |
0x00dd: 0x00ed, # LATIN CAPITAL LETTER Y WITH ACUTE | |
0x00de: 0x00e8, # LATIN CAPITAL LETTER THORN | |
0x00df: 0x00e1, # LATIN SMALL LETTER SHARP S | |
0x00e0: 0x0085, # LATIN SMALL LETTER A WITH GRAVE | |
0x00e1: 0x00a0, # LATIN SMALL LETTER A WITH ACUTE | |
0x00e2: 0x0083, # LATIN SMALL LETTER A WITH CIRCUMFLEX | |
0x00e3: 0x00c6, # LATIN SMALL LETTER A WITH TILDE | |
0x00e4: 0x0084, # LATIN SMALL LETTER A WITH DIAERESIS | |
0x00e5: 0x0086, # LATIN SMALL LETTER A WITH RING ABOVE | |
0x00e6: 0x0091, # LATIN SMALL LIGATURE AE | |
0x00e7: 0x0087, # LATIN SMALL LETTER C WITH CEDILLA | |
0x00e8: 0x008a, # LATIN SMALL LETTER E WITH GRAVE | |
0x00e9: 0x0082, # LATIN SMALL LETTER E WITH ACUTE | |
0x00ea: 0x0088, # LATIN SMALL LETTER E WITH CIRCUMFLEX | |
0x00eb: 0x0089, # LATIN SMALL LETTER E WITH DIAERESIS | |
0x00ec: 0x008d, # LATIN SMALL LETTER I WITH GRAVE | |
0x00ed: 0x00a1, # LATIN SMALL LETTER I WITH ACUTE | |
0x00ee: 0x008c, # LATIN SMALL LETTER I WITH CIRCUMFLEX | |
0x00ef: 0x008b, # LATIN SMALL LETTER I WITH DIAERESIS | |
0x00f0: 0x00d0, # LATIN SMALL LETTER ETH | |
0x00f1: 0x00a4, # LATIN SMALL LETTER N WITH TILDE | |
0x00f2: 0x0095, # LATIN SMALL LETTER O WITH GRAVE | |
0x00f3: 0x00a2, # LATIN SMALL LETTER O WITH ACUTE | |
0x00f4: 0x0093, # LATIN SMALL LETTER O WITH CIRCUMFLEX | |
0x00f5: 0x00e4, # LATIN SMALL LETTER O WITH TILDE | |
0x00f6: 0x0094, # LATIN SMALL LETTER O WITH DIAERESIS | |
0x00f7: 0x00f6, # DIVISION SIGN | |
0x00f8: 0x009b, # LATIN SMALL LETTER O WITH STROKE | |
0x00f9: 0x0097, # LATIN SMALL LETTER U WITH GRAVE | |
0x00fa: 0x00a3, # LATIN SMALL LETTER U WITH ACUTE | |
0x00fb: 0x0096, # LATIN SMALL LETTER U WITH CIRCUMFLEX | |
0x00fc: 0x0081, # LATIN SMALL LETTER U WITH DIAERESIS | |
0x00fd: 0x00ec, # LATIN SMALL LETTER Y WITH ACUTE | |
0x00fe: 0x00e7, # LATIN SMALL LETTER THORN | |
0x00ff: 0x0098, # LATIN SMALL LETTER Y WITH DIAERESIS | |
0x0131: 0x00d5, # LATIN SMALL LETTER DOTLESS I | |
0x0192: 0x009f, # LATIN SMALL LETTER F WITH HOOK | |
0x2017: 0x00f2, # DOUBLE LOW LINE | |
0x2500: 0x00c4, # BOX DRAWINGS LIGHT HORIZONTAL | |
0x2502: 0x00b3, # BOX DRAWINGS LIGHT VERTICAL | |
0x250c: 0x00da, # BOX DRAWINGS LIGHT DOWN AND RIGHT | |
0x2510: 0x00bf, # BOX DRAWINGS LIGHT DOWN AND LEFT | |
0x2514: 0x00c0, # BOX DRAWINGS LIGHT UP AND RIGHT | |
0x2518: 0x00d9, # BOX DRAWINGS LIGHT UP AND LEFT | |
0x251c: 0x00c3, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT | |
0x2524: 0x00b4, # BOX DRAWINGS LIGHT VERTICAL AND LEFT | |
0x252c: 0x00c2, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL | |
0x2534: 0x00c1, # BOX DRAWINGS LIGHT UP AND HORIZONTAL | |
0x253c: 0x00c5, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL | |
0x2550: 0x00cd, # BOX DRAWINGS DOUBLE HORIZONTAL | |
0x2551: 0x00ba, # BOX DRAWINGS DOUBLE VERTICAL | |
0x2554: 0x00c9, # BOX DRAWINGS DOUBLE DOWN AND RIGHT | |
0x2557: 0x00bb, # BOX DRAWINGS DOUBLE DOWN AND LEFT | |
0x255a: 0x00c8, # BOX DRAWINGS DOUBLE UP AND RIGHT | |
0x255d: 0x00bc, # BOX DRAWINGS DOUBLE UP AND LEFT | |
0x2560: 0x00cc, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT | |
0x2563: 0x00b9, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT | |
0x2566: 0x00cb, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL | |
0x2569: 0x00ca, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL | |
0x256c: 0x00ce, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL | |
0x2580: 0x00df, # UPPER HALF BLOCK | |
0x2584: 0x00dc, # LOWER HALF BLOCK | |
0x2588: 0x00db, # FULL BLOCK | |
0x2591: 0x00b0, # LIGHT SHADE | |
0x2592: 0x00b1, # MEDIUM SHADE | |
0x2593: 0x00b2, # DARK SHADE | |
0x25a0: 0x00fe, # BLACK SQUARE | |
} |
""" Python Character Mapping Codec generated from 'VENDORS/MICSFT/PC/CP852.TXT' with gencodec.py. | |
"""#" | |
import codecs | |
### Codec APIs | |
class Codec(codecs.Codec): | |
def encode(self,input,errors='strict'): | |
return codecs.charmap_encode(input,errors,encoding_map) | |
def decode(self,input,errors='strict'): | |
return codecs.charmap_decode(input,errors,decoding_table) | |
class IncrementalEncoder(codecs.IncrementalEncoder): | |
def encode(self, input, final=False): | |
return codecs.charmap_encode(input,self.errors,encoding_map)[0] | |
class IncrementalDecoder(codecs.IncrementalDecoder): | |
def decode(self, input, final=False): | |
return codecs.charmap_decode(input,self.errors,decoding_table)[0] | |
class StreamWriter(Codec,codecs.StreamWriter): | |
pass | |
class StreamReader(Codec,codecs.StreamReader): | |
pass | |
### encodings module API | |
def getregentry(): | |
return codecs.CodecInfo( | |
name='cp852', | |
encode=Codec().encode, | |
decode=Codec().decode, | |
incrementalencoder=IncrementalEncoder, | |
incrementaldecoder=IncrementalDecoder, | |
streamreader=StreamReader, | |
streamwriter=StreamWriter, | |
) | |
### Decoding Map | |
decoding_map = codecs.make_identity_dict(range(256)) | |
decoding_map.update({ | |
0x0080: 0x00c7, # LATIN CAPITAL LETTER C WITH CEDILLA | |
0x0081: 0x00fc, # LATIN SMALL LETTER U WITH DIAERESIS | |
0x0082: 0x00e9, # LATIN SMALL LETTER E WITH ACUTE | |
0x0083: 0x00e2, # LATIN SMALL LETTER A WITH CIRCUMFLEX | |
0x0084: 0x00e4, # LATIN SMALL LETTER A WITH DIAERESIS | |
0x0085: 0x016f, # LATIN SMALL LETTER U WITH RING ABOVE | |
0x0086: 0x0107, # LATIN SMALL LETTER C WITH ACUTE | |
0x0087: 0x00e7, # LATIN SMALL LETTER C WITH CEDILLA | |
0x0088: 0x0142, # LATIN SMALL LETTER L WITH STROKE | |
0x0089: 0x00eb, # LATIN SMALL LETTER E WITH DIAERESIS | |
0x008a: 0x0150, # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE | |
0x008b: 0x0151, # LATIN SMALL LETTER O WITH DOUBLE ACUTE | |
0x008c: 0x00ee, # LATIN SMALL LETTER I WITH CIRCUMFLEX | |
0x008d: 0x0179, # LATIN CAPITAL LETTER Z WITH ACUTE | |
0x008e: 0x00c4, # LATIN CAPITAL LETTER A WITH DIAERESIS | |
0x008f: 0x0106, # LATIN CAPITAL LETTER C WITH ACUTE | |
0x0090: 0x00c9, # LATIN CAPITAL LETTER E WITH ACUTE | |
0x0091: 0x0139, # LATIN CAPITAL LETTER L WITH ACUTE | |
0x0092: 0x013a, # LATIN SMALL LETTER L WITH ACUTE | |
0x0093: 0x00f4, # LATIN SMALL LETTER O WITH CIRCUMFLEX | |
0x0094: 0x00f6, # LATIN SMALL LETTER O WITH DIAERESIS | |
0x0095: 0x013d, # LATIN CAPITAL LETTER L WITH CARON | |
0x0096: 0x013e, # LATIN SMALL LETTER L WITH CARON | |
0x0097: 0x015a, # LATIN CAPITAL LETTER S WITH ACUTE | |
0x0098: 0x015b, # LATIN SMALL LETTER S WITH ACUTE | |
0x0099: 0x00d6, # LATIN CAPITAL LETTER O WITH DIAERESIS | |
0x009a: 0x00dc, # LATIN CAPITAL LETTER U WITH DIAERESIS | |
0x009b: 0x0164, # LATIN CAPITAL LETTER T WITH CARON | |
0x009c: 0x0165, # LATIN SMALL LETTER T WITH CARON | |
0x009d: 0x0141, # LATIN CAPITAL LETTER L WITH STROKE | |
0x009e: 0x00d7, # MULTIPLICATION SIGN | |
0x009f: 0x010d, # LATIN SMALL LETTER C WITH CARON | |
0x00a0: 0x00e1, # LATIN SMALL LETTER A WITH ACUTE | |
0x00a1: 0x00ed, # LATIN SMALL LETTER I WITH ACUTE | |
0x00a2: 0x00f3, # LATIN SMALL LETTER O WITH ACUTE | |
0x00a3: 0x00fa, # LATIN SMALL LETTER U WITH ACUTE | |
0x00a4: 0x0104, # LATIN CAPITAL LETTER A WITH OGONEK | |
0x00a5: 0x0105, # LATIN SMALL LETTER A WITH OGONEK | |
0x00a6: 0x017d, # LATIN CAPITAL LETTER Z WITH CARON | |
0x00a7: 0x017e, # LATIN SMALL LETTER Z WITH CARON | |
0x00a8: 0x0118, # LATIN CAPITAL LETTER E WITH OGONEK | |
0x00a9: 0x0119, # LATIN SMALL LETTER E WITH OGONEK | |
0x00aa: 0x00ac, # NOT SIGN | |
0x00ab: 0x017a, # LATIN SMALL LETTER Z WITH ACUTE | |
0x00ac: 0x010c, # LATIN CAPITAL LETTER C WITH CARON | |
0x00ad: 0x015f, # LATIN SMALL LETTER S WITH CEDILLA | |
0x00ae: 0x00ab, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK | |
0x00af: 0x00bb, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK | |
0x00b0: 0x2591, # LIGHT SHADE | |
0x00b1: 0x2592, # MEDIUM SHADE | |
0x00b2: 0x2593, # DARK SHADE | |
0x00b3: 0x2502, # BOX DRAWINGS LIGHT VERTICAL | |
0x00b4: 0x2524, # BOX DRAWINGS LIGHT VERTICAL AND LEFT | |
0x00b5: 0x00c1, # LATIN CAPITAL LETTER A WITH ACUTE | |
0x00b6: 0x00c2, # LATIN CAPITAL LETTER A WITH CIRCUMFLEX | |
0x00b7: 0x011a, # LATIN CAPITAL LETTER E WITH CARON | |
0x00b8: 0x015e, # LATIN CAPITAL LETTER S WITH CEDILLA | |
0x00b9: 0x2563, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT | |
0x00ba: 0x2551, # BOX DRAWINGS DOUBLE VERTICAL | |
0x00bb: 0x2557, # BOX DRAWINGS DOUBLE DOWN AND LEFT | |
0x00bc: 0x255d, # BOX DRAWINGS DOUBLE UP AND LEFT | |
0x00bd: 0x017b, # LATIN CAPITAL LETTER Z WITH DOT ABOVE | |
0x00be: 0x017c, # LATIN SMALL LETTER Z WITH DOT ABOVE | |
0x00bf: 0x2510, # BOX DRAWINGS LIGHT DOWN AND LEFT | |
0x00c0: 0x2514, # BOX DRAWINGS LIGHT UP AND RIGHT | |
0x00c1: 0x2534, # BOX DRAWINGS LIGHT UP AND HORIZONTAL | |
0x00c2: 0x252c, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL | |
0x00c3: 0x251c, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT | |
0x00c4: 0x2500, # BOX DRAWINGS LIGHT HORIZONTAL | |
0x00c5: 0x253c, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL | |
0x00c6: 0x0102, # LATIN CAPITAL LETTER A WITH BREVE | |
0x00c7: 0x0103, # LATIN SMALL LETTER A WITH BREVE | |
0x00c8: 0x255a, # BOX DRAWINGS DOUBLE UP AND RIGHT | |
0x00c9: 0x2554, # BOX DRAWINGS DOUBLE DOWN AND RIGHT | |
0x00ca: 0x2569, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL | |
0x00cb: 0x2566, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL | |
0x00cc: 0x2560, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT | |
0x00cd: 0x2550, # BOX DRAWINGS DOUBLE HORIZONTAL | |
0x00ce: 0x256c, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL | |
0x00cf: 0x00a4, # CURRENCY SIGN | |
0x00d0: 0x0111, # LATIN SMALL LETTER D WITH STROKE | |
0x00d1: 0x0110, # LATIN CAPITAL LETTER D WITH STROKE | |
0x00d2: 0x010e, # LATIN CAPITAL LETTER D WITH CARON | |
0x00d3: 0x00cb, # LATIN CAPITAL LETTER E WITH DIAERESIS | |
0x00d4: 0x010f, # LATIN SMALL LETTER D WITH CARON | |
0x00d5: 0x0147, # LATIN CAPITAL LETTER N WITH CARON | |
0x00d6: 0x00cd, # LATIN CAPITAL LETTER I WITH ACUTE | |
0x00d7: 0x00ce, # LATIN CAPITAL LETTER I WITH CIRCUMFLEX | |
0x00d8: 0x011b, # LATIN SMALL LETTER E WITH CARON | |
0x00d9: 0x2518, # BOX DRAWINGS LIGHT UP AND LEFT | |
0x00da: 0x250c, # BOX DRAWINGS LIGHT DOWN AND RIGHT | |
0x00db: 0x2588, # FULL BLOCK | |
0x00dc: 0x2584, # LOWER HALF BLOCK | |
0x00dd: 0x0162, # LATIN CAPITAL LETTER T WITH CEDILLA | |
0x00de: 0x016e, # LATIN CAPITAL LETTER U WITH RING ABOVE | |
0x00df: 0x2580, # UPPER HALF BLOCK | |
0x00e0: 0x00d3, # LATIN CAPITAL LETTER O WITH ACUTE | |
0x00e1: 0x00df, # LATIN SMALL LETTER SHARP S | |
0x00e2: 0x00d4, # LATIN CAPITAL LETTER O WITH CIRCUMFLEX | |
0x00e3: 0x0143, # LATIN CAPITAL LETTER N WITH ACUTE | |
0x00e4: 0x0144, # LATIN SMALL LETTER N WITH ACUTE | |
0x00e5: 0x0148, # LATIN SMALL LETTER N WITH CARON | |
0x00e6: 0x0160, # LATIN CAPITAL LETTER S WITH CARON | |
0x00e7: 0x0161, # LATIN SMALL LETTER S WITH CARON | |
0x00e8: 0x0154, # LATIN CAPITAL LETTER R WITH ACUTE | |
0x00e9: 0x00da, # LATIN CAPITAL LETTER U WITH ACUTE | |
0x00ea: 0x0155, # LATIN SMALL LETTER R WITH ACUTE | |
0x00eb: 0x0170, # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE | |
0x00ec: 0x00fd, # LATIN SMALL LETTER Y WITH ACUTE | |
0x00ed: 0x00dd, # LATIN CAPITAL LETTER Y WITH ACUTE | |
0x00ee: 0x0163, # LATIN SMALL LETTER T WITH CEDILLA | |
0x00ef: 0x00b4, # ACUTE ACCENT | |
0x00f0: 0x00ad, # SOFT HYPHEN | |
0x00f1: 0x02dd, # DOUBLE ACUTE ACCENT | |
0x00f2: 0x02db, # OGONEK | |
0x00f3: 0x02c7, # CARON | |
0x00f4: 0x02d8, # BREVE | |
0x00f5: 0x00a7, # SECTION SIGN | |
0x00f6: 0x00f7, # DIVISION SIGN | |
0x00f7: 0x00b8, # CEDILLA | |
0x00f8: 0x00b0, # DEGREE SIGN | |
0x00f9: 0x00a8, # DIAERESIS | |
0x00fa: 0x02d9, # DOT ABOVE | |
0x00fb: 0x0171, # LATIN SMALL LETTER U WITH DOUBLE ACUTE | |
0x00fc: 0x0158, # LATIN CAPITAL LETTER R WITH CARON | |
0x00fd: 0x0159, # LATIN SMALL LETTER R WITH CARON | |
0x00fe: 0x25a0, # BLACK SQUARE | |
0x00ff: 0x00a0, # NO-BREAK SPACE | |
}) | |
### Decoding Table | |
decoding_table = ( | |
'\x00' # 0x0000 -> NULL | |
'\x01' # 0x0001 -> START OF HEADING | |
'\x02' # 0x0002 -> START OF TEXT | |
'\x03' # 0x0003 -> END OF TEXT | |
'\x04' # 0x0004 -> END OF TRANSMISSION | |
'\x05' # 0x0005 -> ENQUIRY | |
'\x06' # 0x0006 -> ACKNOWLEDGE | |
'\x07' # 0x0007 -> BELL | |
'\x08' # 0x0008 -> BACKSPACE | |
'\t' # 0x0009 -> HORIZONTAL TABULATION | |
'\n' # 0x000a -> LINE FEED | |
'\x0b' # 0x000b -> VERTICAL TABULATION | |
'\x0c' # 0x000c -> FORM FEED | |
'\r' # 0x000d -> CARRIAGE RETURN | |
'\x0e' # 0x000e -> SHIFT OUT | |
'\x0f' # 0x000f -> SHIFT IN | |
'\x10' # 0x0010 -> DATA LINK ESCAPE | |
'\x11' # 0x0011 -> DEVICE CONTROL ONE | |
'\x12' # 0x0012 -> DEVICE CONTROL TWO | |
'\x13' # 0x0013 -> DEVICE CONTROL THREE | |
'\x14' # 0x0014 -> DEVICE CONTROL FOUR | |
'\x15' # 0x0015 -> NEGATIVE ACKNOWLEDGE | |
'\x16' # 0x0016 -> SYNCHRONOUS IDLE | |
'\x17' # 0x0017 -> END OF TRANSMISSION BLOCK | |
'\x18' # 0x0018 -> CANCEL | |
'\x19' # 0x0019 -> END OF MEDIUM | |
'\x1a' # 0x001a -> SUBSTITUTE | |
'\x1b' # 0x001b -> ESCAPE | |
'\x1c' # 0x001c -> FILE SEPARATOR | |
'\x1d' # 0x001d -> GROUP SEPARATOR | |
'\x1e' # 0x001e -> RECORD SEPARATOR | |
'\x1f' # 0x001f -> UNIT SEPARATOR | |
' ' # 0x0020 -> SPACE | |
'!' # 0x0021 -> EXCLAMATION MARK | |
'"' # 0x0022 -> QUOTATION MARK | |
'#' # 0x0023 -> NUMBER SIGN | |
'$' # 0x0024 -> DOLLAR SIGN | |
'%' # 0x0025 -> PERCENT SIGN | |
'&' # 0x0026 -> AMPERSAND | |
"'" # 0x0027 -> APOSTROPHE | |
'(' # 0x0028 -> LEFT PARENTHESIS | |
')' # 0x0029 -> RIGHT PARENTHESIS | |
'*' # 0x002a -> ASTERISK | |
'+' # 0x002b -> PLUS SIGN | |
',' # 0x002c -> COMMA | |
'-' # 0x002d -> HYPHEN-MINUS | |
'.' # 0x002e -> FULL STOP | |
'/' # 0x002f -> SOLIDUS | |
'0' # 0x0030 -> DIGIT ZERO | |
'1' # 0x0031 -> DIGIT ONE | |
'2' # 0x0032 -> DIGIT TWO | |
'3' # 0x0033 -> DIGIT THREE | |
'4' # 0x0034 -> DIGIT FOUR | |
'5' # 0x0035 -> DIGIT FIVE | |
'6' # 0x0036 -> DIGIT SIX | |
'7' # 0x0037 -> DIGIT SEVEN | |
'8' # 0x0038 -> DIGIT EIGHT | |
'9' # 0x0039 -> DIGIT NINE | |
':' # 0x003a -> COLON | |
';' # 0x003b -> SEMICOLON | |
'<' # 0x003c -> LESS-THAN SIGN | |
'=' # 0x003d -> EQUALS SIGN | |
'>' # 0x003e -> GREATER-THAN SIGN | |
'?' # 0x003f -> QUESTION MARK | |
'@' # 0x0040 -> COMMERCIAL AT | |
'A' # 0x0041 -> LATIN CAPITAL LETTER A | |
'B' # 0x0042 -> LATIN CAPITAL LETTER B | |
'C' # 0x0043 -> LATIN CAPITAL LETTER C | |
'D' # 0x0044 -> LATIN CAPITAL LETTER D | |
'E' # 0x0045 -> LATIN CAPITAL LETTER E | |
'F' # 0x0046 -> LATIN CAPITAL LETTER F | |
'G' # 0x0047 -> LATIN CAPITAL LETTER G | |
'H' # 0x0048 -> LATIN CAPITAL LETTER H | |
'I' # 0x0049 -> LATIN CAPITAL LETTER I | |
'J' # 0x004a -> LATIN CAPITAL LETTER J | |
'K' # 0x004b -> LATIN CAPITAL LETTER K | |
'L' # 0x004c -> LATIN CAPITAL LETTER L | |
'M' # 0x004d -> LATIN CAPITAL LETTER M | |
'N' # 0x004e -> LATIN CAPITAL LETTER N | |
'O' # 0x004f -> LATIN CAPITAL LETTER O | |
'P' # 0x0050 -> LATIN CAPITAL LETTER P | |
'Q' # 0x0051 -> LATIN CAPITAL LETTER Q | |
'R' # 0x0052 -> LATIN CAPITAL LETTER R | |
'S' # 0x0053 -> LATIN CAPITAL LETTER S | |
'T' # 0x0054 -> LATIN CAPITAL LETTER T | |
'U' # 0x0055 -> LATIN CAPITAL LETTER U | |
'V' # 0x0056 -> LATIN CAPITAL LETTER V | |
'W' # 0x0057 -> LATIN CAPITAL LETTER W | |
'X' # 0x0058 -> LATIN CAPITAL LETTER X | |
'Y' # 0x0059 -> LATIN CAPITAL LETTER Y | |
'Z' # 0x005a -> LATIN CAPITAL LETTER Z | |
'[' # 0x005b -> LEFT SQUARE BRACKET | |
'\\' # 0x005c -> REVERSE SOLIDUS | |
']' # 0x005d -> RIGHT SQUARE BRACKET | |
'^' # 0x005e -> CIRCUMFLEX ACCENT | |
'_' # 0x005f -> LOW LINE | |
'`' # 0x0060 -> GRAVE ACCENT | |
'a' # 0x0061 -> LATIN SMALL LETTER A | |
'b' # 0x0062 -> LATIN SMALL LETTER B | |
'c' # 0x0063 -> LATIN SMALL LETTER C | |
'd' # 0x0064 -> LATIN SMALL LETTER D | |
'e' # 0x0065 -> LATIN SMALL LETTER E | |
'f' # 0x0066 -> LATIN SMALL LETTER F | |
'g' # 0x0067 -> LATIN SMALL LETTER G | |
'h' # 0x0068 -> LATIN SMALL LETTER H | |
'i' # 0x0069 -> LATIN SMALL LETTER I | |
'j' # 0x006a -> LATIN SMALL LETTER J | |
'k' # 0x006b -> LATIN SMALL LETTER K | |
'l' # 0x006c -> LATIN SMALL LETTER L | |
'm' # 0x006d -> LATIN SMALL LETTER M | |
'n' # 0x006e -> LATIN SMALL LETTER N | |
'o' # 0x006f -> LATIN SMALL LETTER O | |
'p' # 0x0070 -> LATIN SMALL LETTER P | |
'q' # 0x0071 -> LATIN SMALL LETTER Q | |
'r' # 0x0072 -> LATIN SMALL LETTER R | |
's' # 0x0073 -> LATIN SMALL LETTER S | |
't' # 0x0074 -> LATIN SMALL LETTER T | |
'u' # 0x0075 -> LATIN SMALL LETTER U | |
'v' # 0x0076 -> LATIN SMALL LETTER V | |
'w' # 0x0077 -> LATIN SMALL LETTER W | |
'x' # 0x0078 -> LATIN SMALL LETTER X | |
'y' # 0x0079 -> LATIN SMALL LETTER Y | |
'z' # 0x007a -> LATIN SMALL LETTER Z | |
'{' # 0x007b -> LEFT CURLY BRACKET | |
'|' # 0x007c -> VERTICAL LINE | |
'}' # 0x007d -> RIGHT CURLY BRACKET | |
'~' # 0x007e -> TILDE | |
'\x7f' # 0x007f -> DELETE | |
'\xc7' # 0x0080 -> LATIN CAPITAL LETTER C WITH CEDILLA | |
'\xfc' # 0x0081 -> LATIN SMALL LETTER U WITH DIAERESIS | |
'\xe9' # 0x0082 -> LATIN SMALL LETTER E WITH ACUTE | |
'\xe2' # 0x0083 -> LATIN SMALL LETTER A WITH CIRCUMFLEX | |
'\xe4' # 0x0084 -> LATIN SMALL LETTER A WITH DIAERESIS | |
'\u016f' # 0x0085 -> LATIN SMALL LETTER U WITH RING ABOVE | |
'\u0107' # 0x0086 -> LATIN SMALL LETTER C WITH ACUTE | |
'\xe7' # 0x0087 -> LATIN SMALL LETTER C WITH CEDILLA | |
'\u0142' # 0x0088 -> LATIN SMALL LETTER L WITH STROKE | |
'\xeb' # 0x0089 -> LATIN SMALL LETTER E WITH DIAERESIS | |
'\u0150' # 0x008a -> LATIN CAPITAL LETTER O WITH DOUBLE ACUTE | |
'\u0151' # 0x008b -> LATIN SMALL LETTER O WITH DOUBLE ACUTE | |
'\xee' # 0x008c -> LATIN SMALL LETTER I WITH CIRCUMFLEX | |
'\u0179' # 0x008d -> LATIN CAPITAL LETTER Z WITH ACUTE | |
'\xc4' # 0x008e -> LATIN CAPITAL LETTER A WITH DIAERESIS | |
'\u0106' # 0x008f -> LATIN CAPITAL LETTER C WITH ACUTE | |
'\xc9' # 0x0090 -> LATIN CAPITAL LETTER E WITH ACUTE | |
'\u0139' # 0x0091 -> LATIN CAPITAL LETTER L WITH ACUTE | |
'\u013a' # 0x0092 -> LATIN SMALL LETTER L WITH ACUTE | |
'\xf4' # 0x0093 -> LATIN SMALL LETTER O WITH CIRCUMFLEX | |
'\xf6' # 0x0094 -> LATIN SMALL LETTER O WITH DIAERESIS | |
'\u013d' # 0x0095 -> LATIN CAPITAL LETTER L WITH CARON | |
'\u013e' # 0x0096 -> LATIN SMALL LETTER L WITH CARON | |
'\u015a' # 0x0097 -> LATIN CAPITAL LETTER S WITH ACUTE | |
'\u015b' # 0x0098 -> LATIN SMALL LETTER S WITH ACUTE | |
'\xd6' # 0x0099 -> LATIN CAPITAL LETTER O WITH DIAERESIS | |
'\xdc' # 0x009a -> LATIN CAPITAL LETTER U WITH DIAERESIS | |
'\u0164' # 0x009b -> LATIN CAPITAL LETTER T WITH CARON | |
'\u0165' # 0x009c -> LATIN SMALL LETTER T WITH CARON | |
'\u0141' # 0x009d -> LATIN CAPITAL LETTER L WITH STROKE | |
'\xd7' # 0x009e -> MULTIPLICATION SIGN | |
'\u010d' # 0x009f -> LATIN SMALL LETTER C WITH CARON | |
'\xe1' # 0x00a0 -> LATIN SMALL LETTER A WITH ACUTE | |
'\xed' # 0x00a1 -> LATIN SMALL LETTER I WITH ACUTE | |
'\xf3' # 0x00a2 -> LATIN SMALL LETTER O WITH ACUTE | |
'\xfa' # 0x00a3 -> LATIN SMALL LETTER U WITH ACUTE | |
'\u0104' # 0x00a4 -> LATIN CAPITAL LETTER A WITH OGONEK | |
'\u0105' # 0x00a5 -> LATIN SMALL LETTER A WITH OGONEK | |
'\u017d' # 0x00a6 -> LATIN CAPITAL LETTER Z WITH CARON | |
'\u017e' # 0x00a7 -> LATIN SMALL LETTER Z WITH CARON | |
'\u0118' # 0x00a8 -> LATIN CAPITAL LETTER E WITH OGONEK | |
'\u0119' # 0x00a9 -> LATIN SMALL LETTER E WITH OGONEK | |
'\xac' # 0x00aa -> NOT SIGN | |
'\u017a' # 0x00ab -> LATIN SMALL LETTER Z WITH ACUTE | |
'\u010c' # 0x00ac -> LATIN CAPITAL LETTER C WITH CARON | |
'\u015f' # 0x00ad -> LATIN SMALL LETTER S WITH CEDILLA | |
'\xab' # 0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK | |
'\xbb' # 0x00af -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK | |
'\u2591' # 0x00b0 -> LIGHT SHADE | |
'\u2592' # 0x00b1 -> MEDIUM SHADE | |
'\u2593' # 0x00b2 -> DARK SHADE | |
'\u2502' # 0x00b3 -> BOX DRAWINGS LIGHT VERTICAL | |
'\u2524' # 0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT | |
'\xc1' # 0x00b5 -> LATIN CAPITAL LETTER A WITH ACUTE | |
'\xc2' # 0x00b6 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX | |
'\u011a' # 0x00b7 -> LATIN CAPITAL LETTER E WITH CARON | |
'\u015e' # 0x00b8 -> LATIN CAPITAL LETTER S WITH CEDILLA | |
'\u2563' # 0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT | |
'\u2551' # 0x00ba -> BOX DRAWINGS DOUBLE VERTICAL | |
'\u2557' # 0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT | |
'\u255d' # 0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT | |
'\u017b' # 0x00bd -> LATIN CAPITAL LETTER Z WITH DOT ABOVE | |
'\u017c' # 0x00be -> LATIN SMALL LETTER Z WITH DOT ABOVE | |
'\u2510' # 0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT | |
'\u2514' # 0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT | |
'\u2534' # 0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL | |
'\u252c' # 0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL | |
'\u251c' # 0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT | |
'\u2500' # 0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL | |
'\u253c' # 0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL | |
'\u0102' # 0x00c6 -> LATIN CAPITAL LETTER A WITH BREVE | |
'\u0103' # 0x00c7 -> LATIN SMALL LETTER A WITH BREVE | |
'\u255a' # 0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT | |
'\u2554' # 0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT | |
'\u2569' # 0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL | |
'\u2566' # 0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL | |
'\u2560' # 0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT | |
'\u2550' # 0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL | |
'\u256c' # 0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL | |
'\xa4' # 0x00cf -> CURRENCY SIGN | |
'\u0111' # 0x00d0 -> LATIN SMALL LETTER D WITH STROKE | |
'\u0110' # 0x00d1 -> LATIN CAPITAL LETTER D WITH STROKE | |
'\u010e' # 0x00d2 -> LATIN CAPITAL LETTER D WITH CARON | |
'\xcb' # 0x00d3 -> LATIN CAPITAL LETTER E WITH DIAERESIS | |
'\u010f' # 0x00d4 -> LATIN SMALL LETTER D WITH CARON | |
'\u0147' # 0x00d5 -> LATIN CAPITAL LETTER N WITH CARON | |
'\xcd' # 0x00d6 -> LATIN CAPITAL LETTER I WITH ACUTE | |
'\xce' # 0x00d7 -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX | |
'\u011b' # 0x00d8 -> LATIN SMALL LETTER E WITH CARON | |
'\u2518' # 0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT | |
'\u250c' # 0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT | |
'\u2588' # 0x00db -> FULL BLOCK | |
'\u2584' # 0x00dc -> LOWER HALF BLOCK | |
'\u0162' # 0x00dd -> LATIN CAPITAL LETTER T WITH CEDILLA | |
'\u016e' # 0x00de -> LATIN CAPITAL LETTER U WITH RING ABOVE | |
'\u2580' # 0x00df -> UPPER HALF BLOCK | |
'\xd3' # 0x00e0 -> LATIN CAPITAL LETTER O WITH ACUTE | |
'\xdf' # 0x00e1 -> LATIN SMALL LETTER SHARP S | |
'\xd4' # 0x00e2 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX | |
'\u0143' # 0x00e3 -> LATIN CAPITAL LETTER N WITH ACUTE | |
'\u0144' # 0x00e4 -> LATIN SMALL LETTER N WITH ACUTE | |
'\u0148' # 0x00e5 -> LATIN SMALL LETTER N WITH CARON | |
'\u0160' # 0x00e6 -> LATIN CAPITAL LETTER S WITH CARON | |
'\u0161' # 0x00e7 -> LATIN SMALL LETTER S WITH CARON | |
'\u0154' # 0x00e8 -> LATIN CAPITAL LETTER R WITH ACUTE | |
'\xda' # 0x00e9 -> LATIN CAPITAL LETTER U WITH ACUTE | |
'\u0155' # 0x00ea -> LATIN SMALL LETTER R WITH ACUTE | |
'\u0170' # 0x00eb -> LATIN CAPITAL LETTER U WITH DOUBLE ACUTE | |
'\xfd' # 0x00ec -> LATIN SMALL LETTER Y WITH ACUTE | |
'\xdd' # 0x00ed -> LATIN CAPITAL LETTER Y WITH ACUTE | |
'\u0163' # 0x00ee -> LATIN SMALL LETTER T WITH CEDILLA | |
'\xb4' # 0x00ef -> ACUTE ACCENT | |
'\xad' # 0x00f0 -> SOFT HYPHEN | |
'\u02dd' # 0x00f1 -> DOUBLE ACUTE ACCENT | |
'\u02db' # 0x00f2 -> OGONEK | |
'\u02c7' # 0x00f3 -> CARON | |
'\u02d8' # 0x00f4 -> BREVE | |
'\xa7' # 0x00f5 -> SECTION SIGN | |
'\xf7' # 0x00f6 -> DIVISION SIGN | |
'\xb8' # 0x00f7 -> CEDILLA | |
'\xb0' # 0x00f8 -> DEGREE SIGN | |
'\xa8' # 0x00f9 -> DIAERESIS | |
'\u02d9' # 0x00fa -> DOT ABOVE | |
'\u0171' # 0x00fb -> LATIN SMALL LETTER U WITH DOUBLE ACUTE | |
'\u0158' # 0x00fc -> LATIN CAPITAL LETTER R WITH CARON | |
'\u0159' # 0x00fd -> LATIN SMALL LETTER R WITH CARON | |
'\u25a0' # 0x00fe -> BLACK SQUARE | |
'\xa0' # 0x00ff -> NO-BREAK SPACE | |
) | |
### Encoding Map | |
encoding_map = { | |
0x0000: 0x0000, # NULL | |
0x0001: 0x0001, # START OF HEADING | |
0x0002: 0x0002, # START OF TEXT | |
0x0003: 0x0003, # END OF TEXT | |
0x0004: 0x0004, # END OF TRANSMISSION | |
0x0005: 0x0005, # ENQUIRY | |
0x0006: 0x0006, # ACKNOWLEDGE | |
0x0007: 0x0007, # BELL | |
0x0008: 0x0008, # BACKSPACE | |
0x0009: 0x0009, # HORIZONTAL TABULATION | |
0x000a: 0x000a, # LINE FEED | |
0x000b: 0x000b, # VERTICAL TABULATION | |
0x000c: 0x000c, # FORM FEED | |
0x000d: 0x000d, # CARRIAGE RETURN | |
0x000e: 0x000e, # SHIFT OUT | |
0x000f: 0x000f, # SHIFT IN | |
0x0010: 0x0010, # DATA LINK ESCAPE | |
0x0011: 0x0011, # DEVICE CONTROL ONE | |
0x0012: 0x0012, # DEVICE CONTROL TWO | |
0x0013: 0x0013, # DEVICE CONTROL THREE | |
0x0014: 0x0014, # DEVICE CONTROL FOUR | |
0x0015: 0x0015, # NEGATIVE ACKNOWLEDGE | |
0x0016: 0x0016, # SYNCHRONOUS IDLE | |
0x0017: 0x0017, # END OF TRANSMISSION BLOCK | |
0x0018: 0x0018, # CANCEL | |
0x0019: 0x0019, # END OF MEDIUM | |
0x001a: 0x001a, # SUBSTITUTE | |
0x001b: 0x001b, # ESCAPE | |
0x001c: 0x001c, # FILE SEPARATOR | |
0x001d: 0x001d, # GROUP SEPARATOR | |
0x001e: 0x001e, # RECORD SEPARATOR | |
0x001f: 0x001f, # UNIT SEPARATOR | |
0x0020: 0x0020, # SPACE | |
0x0021: 0x0021, # EXCLAMATION MARK | |
0x0022: 0x0022, # QUOTATION MARK | |
0x0023: 0x0023, # NUMBER SIGN | |
0x0024: 0x0024, # DOLLAR SIGN | |
0x0025: 0x0025, # PERCENT SIGN | |
0x0026: 0x0026, # AMPERSAND | |
0x0027: 0x0027, # APOSTROPHE | |
0x0028: 0x0028, # LEFT PARENTHESIS | |
0x0029: 0x0029, # RIGHT PARENTHESIS | |
0x002a: 0x002a, # ASTERISK | |
0x002b: 0x002b, # PLUS SIGN | |
0x002c: 0x002c, # COMMA | |
0x002d: 0x002d, # HYPHEN-MINUS | |
0x002e: 0x002e, # FULL STOP | |
0x002f: 0x002f, # SOLIDUS | |
0x0030: 0x0030, # DIGIT ZERO | |
0x0031: 0x0031, # DIGIT ONE | |
0x0032: 0x0032, # DIGIT TWO | |
0x0033: 0x0033, # DIGIT THREE | |
0x0034: 0x0034, # DIGIT FOUR | |
0x0035: 0x0035, # DIGIT FIVE | |
0x0036: 0x0036, # DIGIT SIX | |
0x0037: 0x0037, # DIGIT SEVEN | |
0x0038: 0x0038, # DIGIT EIGHT | |
0x0039: 0x0039, # DIGIT NINE | |
0x003a: 0x003a, # COLON | |
0x003b: 0x003b, # SEMICOLON | |
0x003c: 0x003c, # LESS-THAN SIGN | |
0x003d: 0x003d, # EQUALS SIGN | |
0x003e: 0x003e, # GREATER-THAN SIGN | |
0x003f: 0x003f, # QUESTION MARK | |
0x0040: 0x0040, # COMMERCIAL AT | |
0x0041: 0x0041, # LATIN CAPITAL LETTER A | |
0x0042: 0x0042, # LATIN CAPITAL LETTER B | |
0x0043: 0x0043, # LATIN CAPITAL LETTER C | |
0x0044: 0x0044, # LATIN CAPITAL LETTER D | |
0x0045: 0x0045, # LATIN CAPITAL LETTER E | |
0x0046: 0x0046, # LATIN CAPITAL LETTER F | |
0x0047: 0x0047, # LATIN CAPITAL LETTER G | |
0x0048: 0x0048, # LATIN CAPITAL LETTER H | |
0x0049: 0x0049, # LATIN CAPITAL LETTER I | |
0x004a: 0x004a, # LATIN CAPITAL LETTER J | |
0x004b: 0x004b, # LATIN CAPITAL LETTER K | |
0x004c: 0x004c, # LATIN CAPITAL LETTER L | |
0x004d: 0x004d, # LATIN CAPITAL LETTER M | |
0x004e: 0x004e, # LATIN CAPITAL LETTER N | |
0x004f: 0x004f, # LATIN CAPITAL LETTER O | |
0x0050: 0x0050, # LATIN CAPITAL LETTER P | |
0x0051: 0x0051, # LATIN CAPITAL LETTER Q | |
0x0052: 0x0052, # LATIN CAPITAL LETTER R | |
0x0053: 0x0053, # LATIN CAPITAL LETTER S | |
0x0054: 0x0054, # LATIN CAPITAL LETTER T | |
0x0055: 0x0055, # LATIN CAPITAL LETTER U | |
0x0056: 0x0056, # LATIN CAPITAL LETTER V | |
0x0057: 0x0057, # LATIN CAPITAL LETTER W | |
0x0058: 0x0058, # LATIN CAPITAL LETTER X | |
0x0059: 0x0059, # LATIN CAPITAL LETTER Y | |
0x005a: 0x005a, # LATIN CAPITAL LETTER Z | |
0x005b: 0x005b, # LEFT SQUARE BRACKET | |
0x005c: 0x005c, # REVERSE SOLIDUS | |
0x005d: 0x005d, # RIGHT SQUARE BRACKET | |
0x005e: 0x005e, # CIRCUMFLEX ACCENT | |
0x005f: 0x005f, # LOW LINE | |
0x0060: 0x0060, # GRAVE ACCENT | |
0x0061: 0x0061, # LATIN SMALL LETTER A | |
0x0062: 0x0062, # LATIN SMALL LETTER B | |
0x0063: 0x0063, # LATIN SMALL LETTER C | |
0x0064: 0x0064, # LATIN SMALL LETTER D | |
0x0065: 0x0065, # LATIN SMALL LETTER E | |
0x0066: 0x0066, # LATIN SMALL LETTER F | |
0x0067: 0x0067, # LATIN SMALL LETTER G | |
0x0068: 0x0068, # LATIN SMALL LETTER H | |
0x0069: 0x0069, # LATIN SMALL LETTER I | |
0x006a: 0x006a, # LATIN SMALL LETTER J | |
0x006b: 0x006b, # LATIN SMALL LETTER K | |
0x006c: 0x006c, # LATIN SMALL LETTER L | |
0x006d: 0x006d, # LATIN SMALL LETTER M | |
0x006e: 0x006e, # LATIN SMALL LETTER N | |
0x006f: 0x006f, # LATIN SMALL LETTER O | |
0x0070: 0x0070, # LATIN SMALL LETTER P | |
0x0071: 0x0071, # LATIN SMALL LETTER Q | |
0x0072: 0x0072, # LATIN SMALL LETTER R | |
0x0073: 0x0073, # LATIN SMALL LETTER S | |
0x0074: 0x0074, # LATIN SMALL LETTER T | |
0x0075: 0x0075, # LATIN SMALL LETTER U | |
0x0076: 0x0076, # LATIN SMALL LETTER V | |
0x0077: 0x0077, # LATIN SMALL LETTER W | |
0x0078: 0x0078, # LATIN SMALL LETTER X | |
0x0079: 0x0079, # LATIN SMALL LETTER Y | |
0x007a: 0x007a, # LATIN SMALL LETTER Z | |
0x007b: 0x007b, # LEFT CURLY BRACKET | |
0x007c: 0x007c, # VERTICAL LINE | |
0x007d: 0x007d, # RIGHT CURLY BRACKET | |
0x007e: 0x007e, # TILDE | |
0x007f: 0x007f, # DELETE | |
0x00a0: 0x00ff, # NO-BREAK SPACE | |
0x00a4: 0x00cf, # CURRENCY SIGN | |
0x00a7: 0x00f5, # SECTION SIGN | |
0x00a8: 0x00f9, # DIAERESIS | |
0x00ab: 0x00ae, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK | |
0x00ac: 0x00aa, # NOT SIGN | |
0x00ad: 0x00f0, # SOFT HYPHEN | |
0x00b0: 0x00f8, # DEGREE SIGN | |
0x00b4: 0x00ef, # ACUTE ACCENT | |
0x00b8: 0x00f7, # CEDILLA | |
0x00bb: 0x00af, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK | |
0x00c1: 0x00b5, # LATIN CAPITAL LETTER A WITH ACUTE | |
0x00c2: 0x00b6, # LATIN CAPITAL LETTER A WITH CIRCUMFLEX | |
0x00c4: 0x008e, # LATIN CAPITAL LETTER A WITH DIAERESIS | |
0x00c7: 0x0080, # LATIN CAPITAL LETTER C WITH CEDILLA | |
0x00c9: 0x0090, # LATIN CAPITAL LETTER E WITH ACUTE | |
0x00cb: 0x00d3, # LATIN CAPITAL LETTER E WITH DIAERESIS | |
0x00cd: 0x00d6, # LATIN CAPITAL LETTER I WITH ACUTE | |
0x00ce: 0x00d7, # LATIN CAPITAL LETTER I WITH CIRCUMFLEX | |
0x00d3: 0x00e0, # LATIN CAPITAL LETTER O WITH ACUTE | |
0x00d4: 0x00e2, # LATIN CAPITAL LETTER O WITH CIRCUMFLEX | |
0x00d6: 0x0099, # LATIN CAPITAL LETTER O WITH DIAERESIS | |
0x00d7: 0x009e, # MULTIPLICATION SIGN | |
0x00da: 0x00e9, # LATIN CAPITAL LETTER U WITH ACUTE | |
0x00dc: 0x009a, # LATIN CAPITAL LETTER U WITH DIAERESIS | |
0x00dd: 0x00ed, # LATIN CAPITAL LETTER Y WITH ACUTE | |
0x00df: 0x00e1, # LATIN SMALL LETTER SHARP S | |
0x00e1: 0x00a0, # LATIN SMALL LETTER A WITH ACUTE | |
0x00e2: 0x0083, # LATIN SMALL LETTER A WITH CIRCUMFLEX | |
0x00e4: 0x0084, # LATIN SMALL LETTER A WITH DIAERESIS | |
0x00e7: 0x0087, # LATIN SMALL LETTER C WITH CEDILLA | |
0x00e9: 0x0082, # LATIN SMALL LETTER E WITH ACUTE | |
0x00eb: 0x0089, # LATIN SMALL LETTER E WITH DIAERESIS | |
0x00ed: 0x00a1, # LATIN SMALL LETTER I WITH ACUTE | |
0x00ee: 0x008c, # LATIN SMALL LETTER I WITH CIRCUMFLEX | |
0x00f3: 0x00a2, # LATIN SMALL LETTER O WITH ACUTE | |
0x00f4: 0x0093, # LATIN SMALL LETTER O WITH CIRCUMFLEX | |
0x00f6: 0x0094, # LATIN SMALL LETTER O WITH DIAERESIS | |
0x00f7: 0x00f6, # DIVISION SIGN | |
0x00fa: 0x00a3, # LATIN SMALL LETTER U WITH ACUTE | |
0x00fc: 0x0081, # LATIN SMALL LETTER U WITH DIAERESIS | |
0x00fd: 0x00ec, # LATIN SMALL LETTER Y WITH ACUTE | |
0x0102: 0x00c6, # LATIN CAPITAL LETTER A WITH BREVE | |
0x0103: 0x00c7, # LATIN SMALL LETTER A WITH BREVE | |
0x0104: 0x00a4, # LATIN CAPITAL LETTER A WITH OGONEK | |
0x0105: 0x00a5, # LATIN SMALL LETTER A WITH OGONEK | |
0x0106: 0x008f, # LATIN CAPITAL LETTER C WITH ACUTE | |
0x0107: 0x0086, # LATIN SMALL LETTER C WITH ACUTE | |
0x010c: 0x00ac, # LATIN CAPITAL LETTER C WITH CARON | |
0x010d: 0x009f, # LATIN SMALL LETTER C WITH CARON | |
0x010e: 0x00d2, # LATIN CAPITAL LETTER D WITH CARON | |
0x010f: 0x00d4, # LATIN SMALL LETTER D WITH CARON | |
0x0110: 0x00d1, # LATIN CAPITAL LETTER D WITH STROKE | |
0x0111: 0x00d0, # LATIN SMALL LETTER D WITH STROKE | |
0x0118: 0x00a8, # LATIN CAPITAL LETTER E WITH OGONEK | |
0x0119: 0x00a9, # LATIN SMALL LETTER E WITH OGONEK | |
0x011a: 0x00b7, # LATIN CAPITAL LETTER E WITH CARON | |
0x011b: 0x00d8, # LATIN SMALL LETTER E WITH CARON | |
0x0139: 0x0091, # LATIN CAPITAL LETTER L WITH ACUTE | |
0x013a: 0x0092, # LATIN SMALL LETTER L WITH ACUTE | |
0x013d: 0x0095, # LATIN CAPITAL LETTER L WITH CARON | |
0x013e: 0x0096, # LATIN SMALL LETTER L WITH CARON | |
0x0141: 0x009d, # LATIN CAPITAL LETTER L WITH STROKE | |
0x0142: 0x0088, # LATIN SMALL LETTER L WITH STROKE | |
0x0143: 0x00e3, # LATIN CAPITAL LETTER N WITH ACUTE | |
0x0144: 0x00e4, # LATIN SMALL LETTER N WITH ACUTE | |
0x0147: 0x00d5, # LATIN CAPITAL LETTER N WITH CARON | |
0x0148: 0x00e5, # LATIN SMALL LETTER N WITH CARON | |
0x0150: 0x008a, # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE | |
0x0151: 0x008b, # LATIN SMALL LETTER O WITH DOUBLE ACUTE | |
0x0154: 0x00e8, # LATIN CAPITAL LETTER R WITH ACUTE | |
0x0155: 0x00ea, # LATIN SMALL LETTER R WITH ACUTE | |
0x0158: 0x00fc, # LATIN CAPITAL LETTER R WITH CARON | |
0x0159: 0x00fd, # LATIN SMALL LETTER R WITH CARON | |
0x015a: 0x0097, # LATIN CAPITAL LETTER S WITH ACUTE | |
0x015b: 0x0098, # LATIN SMALL LETTER S WITH ACUTE | |
0x015e: 0x00b8, # LATIN CAPITAL LETTER S WITH CEDILLA | |
0x015f: 0x00ad, # LATIN SMALL LETTER S WITH CEDILLA | |
0x0160: 0x00e6, # LATIN CAPITAL LETTER S WITH CARON | |
0x0161: 0x00e7, # LATIN SMALL LETTER S WITH CARON | |
0x0162: 0x00dd, # LATIN CAPITAL LETTER T WITH CEDILLA | |
0x0163: 0x00ee, # LATIN SMALL LETTER T WITH CEDILLA | |
0x0164: 0x009b, # LATIN CAPITAL LETTER T WITH CARON | |
0x0165: 0x009c, # LATIN SMALL LETTER T WITH CARON | |
0x016e: 0x00de, # LATIN CAPITAL LETTER U WITH RING ABOVE | |
0x016f: 0x0085, # LATIN SMALL LETTER U WITH RING ABOVE | |
0x0170: 0x00eb, # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE | |
0x0171: 0x00fb, # LATIN SMALL LETTER U WITH DOUBLE ACUTE | |
0x0179: 0x008d, # LATIN CAPITAL LETTER Z WITH ACUTE | |
0x017a: 0x00ab, # LATIN SMALL LETTER Z WITH ACUTE | |
0x017b: 0x00bd, # LATIN CAPITAL LETTER Z WITH DOT ABOVE | |
0x017c: 0x00be, # LATIN SMALL LETTER Z WITH DOT ABOVE | |
0x017d: 0x00a6, # LATIN CAPITAL LETTER Z WITH CARON | |
0x017e: 0x00a7, # LATIN SMALL LETTER Z WITH CARON | |
0x02c7: 0x00f3, # CARON | |
0x02d8: 0x00f4, # BREVE | |
0x02d9: 0x00fa, # DOT ABOVE | |
0x02db: 0x00f2, # OGONEK | |
0x02dd: 0x00f1, # DOUBLE ACUTE ACCENT | |
0x2500: 0x00c4, # BOX DRAWINGS LIGHT HORIZONTAL | |
0x2502: 0x00b3, # BOX DRAWINGS LIGHT VERTICAL | |
0x250c: 0x00da, # BOX DRAWINGS LIGHT DOWN AND RIGHT | |
0x2510: 0x00bf, # BOX DRAWINGS LIGHT DOWN AND LEFT | |
0x2514: 0x00c0, # BOX DRAWINGS LIGHT UP AND RIGHT | |
0x2518: 0x00d9, # BOX DRAWINGS LIGHT UP AND LEFT | |
0x251c: 0x00c3, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT | |
0x2524: 0x00b4, # BOX DRAWINGS LIGHT VERTICAL AND LEFT | |
0x252c: 0x00c2, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL | |
0x2534: 0x00c1, # BOX DRAWINGS LIGHT UP AND HORIZONTAL | |
0x253c: 0x00c5, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL | |
0x2550: 0x00cd, # BOX DRAWINGS DOUBLE HORIZONTAL | |
0x2551: 0x00ba, # BOX DRAWINGS DOUBLE VERTICAL | |
0x2554: 0x00c9, # BOX DRAWINGS DOUBLE DOWN AND RIGHT | |
0x2557: 0x00bb, # BOX DRAWINGS DOUBLE DOWN AND LEFT | |
0x255a: 0x00c8, # BOX DRAWINGS DOUBLE UP AND RIGHT | |
0x255d: 0x00bc, # BOX DRAWINGS DOUBLE UP AND LEFT | |
0x2560: 0x00cc, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT | |
0x2563: 0x00b9, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT | |
0x2566: 0x00cb, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL | |
0x2569: 0x00ca, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL | |
0x256c: 0x00ce, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL | |
0x2580: 0x00df, # UPPER HALF BLOCK | |
0x2584: 0x00dc, # LOWER HALF BLOCK | |
0x2588: 0x00db, # FULL BLOCK | |
0x2591: 0x00b0, # LIGHT SHADE | |
0x2592: 0x00b1, # MEDIUM SHADE | |
0x2593: 0x00b2, # DARK SHADE | |
0x25a0: 0x00fe, # BLACK SQUARE | |
} |
""" Python Character Mapping Codec generated from 'VENDORS/MICSFT/PC/CP855.TXT' with gencodec.py. | |
"""#" | |
import codecs | |
### Codec APIs | |
class Codec(codecs.Codec): | |
def encode(self,input,errors='strict'): | |
return codecs.charmap_encode(input,errors,encoding_map) | |
def decode(self,input,errors='strict'): | |
return codecs.charmap_decode(input,errors,decoding_table) | |
class IncrementalEncoder(codecs.IncrementalEncoder): | |
def encode(self, input, final=False): | |
return codecs.charmap_encode(input,self.errors,encoding_map)[0] | |
class IncrementalDecoder(codecs.IncrementalDecoder): | |
def decode(self, input, final=False): | |
return codecs.charmap_decode(input,self.errors,decoding_table)[0] | |
class StreamWriter(Codec,codecs.StreamWriter): | |
pass | |
class StreamReader(Codec,codecs.StreamReader): | |
pass | |
### encodings module API | |
def getregentry(): | |
return codecs.CodecInfo( | |
name='cp855', | |
encode=Codec().encode, | |
decode=Codec().decode, | |
incrementalencoder=IncrementalEncoder, | |
incrementaldecoder=IncrementalDecoder, | |
streamreader=StreamReader, | |
streamwriter=StreamWriter, | |
) | |
### Decoding Map | |
decoding_map = codecs.make_identity_dict(range(256)) | |
decoding_map.update({ | |
0x0080: 0x0452, # CYRILLIC SMALL LETTER DJE | |
0x0081: 0x0402, # CYRILLIC CAPITAL LETTER DJE | |
0x0082: 0x0453, # CYRILLIC SMALL LETTER GJE | |
0x0083: 0x0403, # CYRILLIC CAPITAL LETTER GJE | |
0x0084: 0x0451, # CYRILLIC SMALL LETTER IO | |
0x0085: 0x0401, # CYRILLIC CAPITAL LETTER IO | |
0x0086: 0x0454, # CYRILLIC SMALL LETTER UKRAINIAN IE | |
0x0087: 0x0404, # CYRILLIC CAPITAL LETTER UKRAINIAN IE | |
0x0088: 0x0455, # CYRILLIC SMALL LETTER DZE | |
0x0089: 0x0405, # CYRILLIC CAPITAL LETTER DZE | |
0x008a: 0x0456, # CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I | |
0x008b: 0x0406, # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I | |
0x008c: 0x0457, # CYRILLIC SMALL LETTER YI | |
0x008d: 0x0407, # CYRILLIC CAPITAL LETTER YI | |
0x008e: 0x0458, # CYRILLIC SMALL LETTER JE | |
0x008f: 0x0408, # CYRILLIC CAPITAL LETTER JE | |
0x0090: 0x0459, # CYRILLIC SMALL LETTER LJE | |
0x0091: 0x0409, # CYRILLIC CAPITAL LETTER LJE | |
0x0092: 0x045a, # CYRILLIC SMALL LETTER NJE | |
0x0093: 0x040a, # CYRILLIC CAPITAL LETTER NJE | |
0x0094: 0x045b, # CYRILLIC SMALL LETTER TSHE | |
0x0095: 0x040b, # CYRILLIC CAPITAL LETTER TSHE | |
0x0096: 0x045c, # CYRILLIC SMALL LETTER KJE | |
0x0097: 0x040c, # CYRILLIC CAPITAL LETTER KJE | |
0x0098: 0x045e, # CYRILLIC SMALL LETTER SHORT U | |
0x0099: 0x040e, # CYRILLIC CAPITAL LETTER SHORT U | |
0x009a: 0x045f, # CYRILLIC SMALL LETTER DZHE | |
0x009b: 0x040f, # CYRILLIC CAPITAL LETTER DZHE | |
0x009c: 0x044e, # CYRILLIC SMALL LETTER YU | |
0x009d: 0x042e, # CYRILLIC CAPITAL LETTER YU | |
0x009e: 0x044a, # CYRILLIC SMALL LETTER HARD SIGN | |
0x009f: 0x042a, # CYRILLIC CAPITAL LETTER HARD SIGN | |
0x00a0: 0x0430, # CYRILLIC SMALL LETTER A | |
0x00a1: 0x0410, # CYRILLIC CAPITAL LETTER A | |
0x00a2: 0x0431, # CYRILLIC SMALL LETTER BE | |
0x00a3: 0x0411, # CYRILLIC CAPITAL LETTER BE | |
0x00a4: 0x0446, # CYRILLIC SMALL LETTER TSE | |
0x00a5: 0x0426, # CYRILLIC CAPITAL LETTER TSE | |
0x00a6: 0x0434, # CYRILLIC SMALL LETTER DE | |
0x00a7: 0x0414, # CYRILLIC CAPITAL LETTER DE | |
0x00a8: 0x0435, # CYRILLIC SMALL LETTER IE | |
0x00a9: 0x0415, # CYRILLIC CAPITAL LETTER IE | |
0x00aa: 0x0444, # CYRILLIC SMALL LETTER EF | |
0x00ab: 0x0424, # CYRILLIC CAPITAL LETTER EF | |
0x00ac: 0x0433, # CYRILLIC SMALL LETTER GHE | |
0x00ad: 0x0413, # CYRILLIC CAPITAL LETTER GHE | |
0x00ae: 0x00ab, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK | |
0x00af: 0x00bb, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK | |
0x00b0: 0x2591, # LIGHT SHADE | |
0x00b1: 0x2592, # MEDIUM SHADE | |
0x00b2: 0x2593, # DARK SHADE | |
0x00b3: 0x2502, # BOX DRAWINGS LIGHT VERTICAL | |
0x00b4: 0x2524, # BOX DRAWINGS LIGHT VERTICAL AND LEFT | |
0x00b5: 0x0445, # CYRILLIC SMALL LETTER HA | |
0x00b6: 0x0425, # CYRILLIC CAPITAL LETTER HA | |
0x00b7: 0x0438, # CYRILLIC SMALL LETTER I | |
0x00b8: 0x0418, # CYRILLIC CAPITAL LETTER I | |
0x00b9: 0x2563, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT | |
0x00ba: 0x2551, # BOX DRAWINGS DOUBLE VERTICAL | |
0x00bb: 0x2557, # BOX DRAWINGS DOUBLE DOWN AND LEFT | |
0x00bc: 0x255d, # BOX DRAWINGS DOUBLE UP AND LEFT | |
0x00bd: 0x0439, # CYRILLIC SMALL LETTER SHORT I | |
0x00be: 0x0419, # CYRILLIC CAPITAL LETTER SHORT I | |
0x00bf: 0x2510, # BOX DRAWINGS LIGHT DOWN AND LEFT | |
0x00c0: 0x2514, # BOX DRAWINGS LIGHT UP AND RIGHT | |
0x00c1: 0x2534, # BOX DRAWINGS LIGHT UP AND HORIZONTAL | |
0x00c2: 0x252c, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL | |
0x00c3: 0x251c, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT | |
0x00c4: 0x2500, # BOX DRAWINGS LIGHT HORIZONTAL | |
0x00c5: 0x253c, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL | |
0x00c6: 0x043a, # CYRILLIC SMALL LETTER KA | |
0x00c7: 0x041a, # CYRILLIC CAPITAL LETTER KA | |
0x00c8: 0x255a, # BOX DRAWINGS DOUBLE UP AND RIGHT | |
0x00c9: 0x2554, # BOX DRAWINGS DOUBLE DOWN AND RIGHT | |
0x00ca: 0x2569, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL | |
0x00cb: 0x2566, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL | |
0x00cc: 0x2560, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT | |
0x00cd: 0x2550, # BOX DRAWINGS DOUBLE HORIZONTAL | |
0x00ce: 0x256c, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL | |
0x00cf: 0x00a4, # CURRENCY SIGN | |
0x00d0: 0x043b, # CYRILLIC SMALL LETTER EL | |
0x00d1: 0x041b, # CYRILLIC CAPITAL LETTER EL | |
0x00d2: 0x043c, # CYRILLIC SMALL LETTER EM | |
0x00d3: 0x041c, # CYRILLIC CAPITAL LETTER EM | |
0x00d4: 0x043d, # CYRILLIC SMALL LETTER EN | |
0x00d5: 0x041d, # CYRILLIC CAPITAL LETTER EN | |
0x00d6: 0x043e, # CYRILLIC SMALL LETTER O | |
0x00d7: 0x041e, # CYRILLIC CAPITAL LETTER O | |
0x00d8: 0x043f, # CYRILLIC SMALL LETTER PE | |
0x00d9: 0x2518, # BOX DRAWINGS LIGHT UP AND LEFT | |
0x00da: 0x250c, # BOX DRAWINGS LIGHT DOWN AND RIGHT | |
0x00db: 0x2588, # FULL BLOCK | |
0x00dc: 0x2584, # LOWER HALF BLOCK | |
0x00dd: 0x041f, # CYRILLIC CAPITAL LETTER PE | |
0x00de: 0x044f, # CYRILLIC SMALL LETTER YA | |
0x00df: 0x2580, # UPPER HALF BLOCK | |
0x00e0: 0x042f, # CYRILLIC CAPITAL LETTER YA | |
0x00e1: 0x0440, # CYRILLIC SMALL LETTER ER | |
0x00e2: 0x0420, # CYRILLIC CAPITAL LETTER ER | |
0x00e3: 0x0441, # CYRILLIC SMALL LETTER ES | |
0x00e4: 0x0421, # CYRILLIC CAPITAL LETTER ES | |
0x00e5: 0x0442, # CYRILLIC SMALL LETTER TE | |
0x00e6: 0x0422, # CYRILLIC CAPITAL LETTER TE | |
0x00e7: 0x0443, # CYRILLIC SMALL LETTER U | |
0x00e8: 0x0423, # CYRILLIC CAPITAL LETTER U | |
0x00e9: 0x0436, # CYRILLIC SMALL LETTER ZHE | |
0x00ea: 0x0416, # CYRILLIC CAPITAL LETTER ZHE | |
0x00eb: 0x0432, # CYRILLIC SMALL LETTER VE | |
0x00ec: 0x0412, # CYRILLIC CAPITAL LETTER VE | |
0x00ed: 0x044c, # CYRILLIC SMALL LETTER SOFT SIGN | |
0x00ee: 0x042c, # CYRILLIC CAPITAL LETTER SOFT SIGN | |
0x00ef: 0x2116, # NUMERO SIGN | |
0x00f0: 0x00ad, # SOFT HYPHEN | |
0x00f1: 0x044b, # CYRILLIC SMALL LETTER YERU | |
0x00f2: 0x042b, # CYRILLIC CAPITAL LETTER YERU | |
0x00f3: 0x0437, # CYRILLIC SMALL LETTER ZE | |
0x00f4: 0x0417, # CYRILLIC CAPITAL LETTER ZE | |
0x00f5: 0x0448, # CYRILLIC SMALL LETTER SHA | |
0x00f6: 0x0428, # CYRILLIC CAPITAL LETTER SHA | |
0x00f7: 0x044d, # CYRILLIC SMALL LETTER E | |
0x00f8: 0x042d, # CYRILLIC CAPITAL LETTER E | |
0x00f9: 0x0449, # CYRILLIC SMALL LETTER SHCHA | |
0x00fa: 0x0429, # CYRILLIC CAPITAL LETTER SHCHA | |
0x00fb: 0x0447, # CYRILLIC SMALL LETTER CHE | |
0x00fc: 0x0427, # CYRILLIC CAPITAL LETTER CHE | |
0x00fd: 0x00a7, # SECTION SIGN | |
0x00fe: 0x25a0, # BLACK SQUARE | |
0x00ff: 0x00a0, # NO-BREAK SPACE | |
}) | |
### Decoding Table | |
decoding_table = ( | |
'\x00' # 0x0000 -> NULL | |
'\x01' # 0x0001 -> START OF HEADING | |
'\x02' # 0x0002 -> START OF TEXT | |
'\x03' # 0x0003 -> END OF TEXT | |
'\x04' # 0x0004 -> END OF TRANSMISSION | |
'\x05' # 0x0005 -> ENQUIRY | |
'\x06' # 0x0006 -> ACKNOWLEDGE | |
'\x07' # 0x0007 -> BELL | |
'\x08' # 0x0008 -> BACKSPACE | |
'\t' # 0x0009 -> HORIZONTAL TABULATION | |
'\n' # 0x000a -> LINE FEED | |
'\x0b' # 0x000b -> VERTICAL TABULATION | |
'\x0c' # 0x000c -> FORM FEED | |
'\r' # 0x000d -> CARRIAGE RETURN | |
'\x0e' # 0x000e -> SHIFT OUT | |
'\x0f' # 0x000f -> SHIFT IN | |
'\x10' # 0x0010 -> DATA LINK ESCAPE | |
'\x11' # 0x0011 -> DEVICE CONTROL ONE | |
'\x12' # 0x0012 -> DEVICE CONTROL TWO | |
'\x13' # 0x0013 -> DEVICE CONTROL THREE | |
'\x14' # 0x0014 -> DEVICE CONTROL FOUR | |
'\x15' # 0x0015 -> NEGATIVE ACKNOWLEDGE | |
'\x16' # 0x0016 -> SYNCHRONOUS IDLE | |
'\x17' # 0x0017 -> END OF TRANSMISSION BLOCK | |
'\x18' # 0x0018 -> CANCEL | |
'\x19' # 0x0019 -> END OF MEDIUM | |
'\x1a' # 0x001a -> SUBSTITUTE | |
'\x1b' # 0x001b -> ESCAPE | |
'\x1c' # 0x001c -> FILE SEPARATOR | |
'\x1d' # 0x001d -> GROUP SEPARATOR | |
'\x1e' # 0x001e -> RECORD SEPARATOR | |
'\x1f' # 0x001f -> UNIT SEPARATOR | |
' ' # 0x0020 -> SPACE | |
'!' # 0x0021 -> EXCLAMATION MARK | |
'"' # 0x0022 -> QUOTATION MARK | |
'#' # 0x0023 -> NUMBER SIGN | |
'$' # 0x0024 -> DOLLAR SIGN | |
'%' # 0x0025 -> PERCENT SIGN | |
'&' # 0x0026 -> AMPERSAND | |
"'" # 0x0027 -> APOSTROPHE | |
'(' # 0x0028 -> LEFT PARENTHESIS | |
')' # 0x0029 -> RIGHT PARENTHESIS | |
'*' # 0x002a -> ASTERISK | |
'+' # 0x002b -> PLUS SIGN | |
',' # 0x002c -> COMMA | |
'-' # 0x002d -> HYPHEN-MINUS | |
'.' # 0x002e -> FULL STOP | |
'/' # 0x002f -> SOLIDUS | |
'0' # 0x0030 -> DIGIT ZERO | |
'1' # 0x0031 -> DIGIT ONE | |
'2' # 0x0032 -> DIGIT TWO | |
'3' # 0x0033 -> DIGIT THREE | |
'4' # 0x0034 -> DIGIT FOUR | |
'5' # 0x0035 -> DIGIT FIVE | |
'6' # 0x0036 -> DIGIT SIX | |
'7' # 0x0037 -> DIGIT SEVEN | |
'8' # 0x0038 -> DIGIT EIGHT | |
'9' # 0x0039 -> DIGIT NINE | |
':' # 0x003a -> COLON | |
';' # 0x003b -> SEMICOLON | |
'<' # 0x003c -> LESS-THAN SIGN | |
'=' # 0x003d -> EQUALS SIGN | |
'>' # 0x003e -> GREATER-THAN SIGN | |
'?' # 0x003f -> QUESTION MARK | |
'@' # 0x0040 -> COMMERCIAL AT | |
'A' # 0x0041 -> LATIN CAPITAL LETTER A | |
'B' # 0x0042 -> LATIN CAPITAL LETTER B | |
'C' # 0x0043 -> LATIN CAPITAL LETTER C | |
'D' # 0x0044 -> LATIN CAPITAL LETTER D | |
'E' # 0x0045 -> LATIN CAPITAL LETTER E | |
'F' # 0x0046 -> LATIN CAPITAL LETTER F | |
'G' # 0x0047 -> LATIN CAPITAL LETTER G | |
'H' # 0x0048 -> LATIN CAPITAL LETTER H | |
'I' # 0x0049 -> LATIN CAPITAL LETTER I | |
'J' # 0x004a -> LATIN CAPITAL LETTER J | |
'K' # 0x004b -> LATIN CAPITAL LETTER K | |
'L' # 0x004c -> LATIN CAPITAL LETTER L | |
'M' # 0x004d -> LATIN CAPITAL LETTER M | |
'N' # 0x004e -> LATIN CAPITAL LETTER N | |
'O' # 0x004f -> LATIN CAPITAL LETTER O | |
'P' # 0x0050 -> LATIN CAPITAL LETTER P | |
'Q' # 0x0051 -> LATIN CAPITAL LETTER Q | |
'R' # 0x0052 -> LATIN CAPITAL LETTER R | |
'S' # 0x0053 -> LATIN CAPITAL LETTER S | |
'T' # 0x0054 -> LATIN CAPITAL LETTER T | |
'U' # 0x0055 -> LATIN CAPITAL LETTER U | |
'V' # 0x0056 -> LATIN CAPITAL LETTER V | |
'W' # 0x0057 -> LATIN CAPITAL LETTER W | |
'X' # 0x0058 -> LATIN CAPITAL LETTER X | |
'Y' # 0x0059 -> LATIN CAPITAL LETTER Y | |
'Z' # 0x005a -> LATIN CAPITAL LETTER Z | |
'[' # 0x005b -> LEFT SQUARE BRACKET | |
'\\' # 0x005c -> REVERSE SOLIDUS | |
']' # 0x005d -> RIGHT SQUARE BRACKET | |
'^' # 0x005e -> CIRCUMFLEX ACCENT | |
'_' # 0x005f -> LOW LINE | |
'`' # 0x0060 -> GRAVE ACCENT | |
'a' # 0x0061 -> LATIN SMALL LETTER A | |
'b' # 0x0062 -> LATIN SMALL LETTER B | |
'c' # 0x0063 -> LATIN SMALL LETTER C | |
'd' # 0x0064 -> LATIN SMALL LETTER D | |
'e' # 0x0065 -> LATIN SMALL LETTER E | |
'f' # 0x0066 -> LATIN SMALL LETTER F | |
'g' # 0x0067 -> LATIN SMALL LETTER G | |
'h' # 0x0068 -> LATIN SMALL LETTER H | |
'i' # 0x0069 -> LATIN SMALL LETTER I | |
'j' # 0x006a -> LATIN SMALL LETTER J | |
'k' # 0x006b -> LATIN SMALL LETTER K | |
'l' # 0x006c -> LATIN SMALL LETTER L | |
'm' # 0x006d -> LATIN SMALL LETTER M | |
'n' # 0x006e -> LATIN SMALL LETTER N | |
'o' # 0x006f -> LATIN SMALL LETTER O | |
'p' # 0x0070 -> LATIN SMALL LETTER P | |
'q' # 0x0071 -> LATIN SMALL LETTER Q | |
'r' # 0x0072 -> LATIN SMALL LETTER R | |
's' # 0x0073 -> LATIN SMALL LETTER S | |
't' # 0x0074 -> LATIN SMALL LETTER T | |
'u' # 0x0075 -> LATIN SMALL LETTER U | |
'v' # 0x0076 -> LATIN SMALL LETTER V | |
'w' # 0x0077 -> LATIN SMALL LETTER W | |
'x' # 0x0078 -> LATIN SMALL LETTER X | |
'y' # 0x0079 -> LATIN SMALL LETTER Y | |
'z' # 0x007a -> LATIN SMALL LETTER Z | |
'{' # 0x007b -> LEFT CURLY BRACKET | |
'|' # 0x007c -> VERTICAL LINE | |
'}' # 0x007d -> RIGHT CURLY BRACKET | |
'~' # 0x007e -> TILDE | |
'\x7f' # 0x007f -> DELETE | |
'\u0452' # 0x0080 -> CYRILLIC SMALL LETTER DJE | |
'\u0402' # 0x0081 -> CYRILLIC CAPITAL LETTER DJE | |
'\u0453' # 0x0082 -> CYRILLIC SMALL LETTER GJE | |
'\u0403' # 0x0083 -> CYRILLIC CAPITAL LETTER GJE | |
'\u0451' # 0x0084 -> CYRILLIC SMALL LETTER IO | |
'\u0401' # 0x0085 -> CYRILLIC CAPITAL LETTER IO | |
'\u0454' # 0x0086 -> CYRILLIC SMALL LETTER UKRAINIAN IE | |
'\u0404' # 0x0087 -> CYRILLIC CAPITAL LETTER UKRAINIAN IE | |
'\u0455' # 0x0088 -> CYRILLIC SMALL LETTER DZE | |
'\u0405' # 0x0089 -> CYRILLIC CAPITAL LETTER DZE | |
'\u0456' # 0x008a -> CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I | |
'\u0406' # 0x008b -> CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I | |
'\u0457' # 0x008c -> CYRILLIC SMALL LETTER YI | |
'\u0407' # 0x008d -> CYRILLIC CAPITAL LETTER YI | |
'\u0458' # 0x008e -> CYRILLIC SMALL LETTER JE | |
'\u0408' # 0x008f -> CYRILLIC CAPITAL LETTER JE | |
'\u0459' # 0x0090 -> CYRILLIC SMALL LETTER LJE | |
'\u0409' # 0x0091 -> CYRILLIC CAPITAL LETTER LJE | |
'\u045a' # 0x0092 -> CYRILLIC SMALL LETTER NJE | |
'\u040a' # 0x0093 -> CYRILLIC CAPITAL LETTER NJE | |
'\u045b' # 0x0094 -> CYRILLIC SMALL LETTER TSHE | |
'\u040b' # 0x0095 -> CYRILLIC CAPITAL LETTER TSHE | |
'\u045c' # 0x0096 -> CYRILLIC SMALL LETTER KJE | |
'\u040c' # 0x0097 -> CYRILLIC CAPITAL LETTER KJE | |
'\u045e' # 0x0098 -> CYRILLIC SMALL LETTER SHORT U | |
'\u040e' # 0x0099 -> CYRILLIC CAPITAL LETTER SHORT U | |
'\u045f' # 0x009a -> CYRILLIC SMALL LETTER DZHE | |
'\u040f' # 0x009b -> CYRILLIC CAPITAL LETTER DZHE | |
'\u044e' # 0x009c -> CYRILLIC SMALL LETTER YU | |
'\u042e' # 0x009d -> CYRILLIC CAPITAL LETTER YU | |
'\u044a' # 0x009e -> CYRILLIC SMALL LETTER HARD SIGN | |
'\u042a' # 0x009f -> CYRILLIC CAPITAL LETTER HARD SIGN | |
'\u0430' # 0x00a0 -> CYRILLIC SMALL LETTER A | |
'\u0410' # 0x00a1 -> CYRILLIC CAPITAL LETTER A | |
'\u0431' # 0x00a2 -> CYRILLIC SMALL LETTER BE | |
'\u0411' # 0x00a3 -> CYRILLIC CAPITAL LETTER BE | |
'\u0446' # 0x00a4 -> CYRILLIC SMALL LETTER TSE | |
'\u0426' # 0x00a5 -> CYRILLIC CAPITAL LETTER TSE | |
'\u0434' # 0x00a6 -> CYRILLIC SMALL LETTER DE | |
'\u0414' # 0x00a7 -> CYRILLIC CAPITAL LETTER DE | |
'\u0435' # 0x00a8 -> CYRILLIC SMALL LETTER IE | |
'\u0415' # 0x00a9 -> CYRILLIC CAPITAL LETTER IE | |
'\u0444' # 0x00aa -> CYRILLIC SMALL LETTER EF | |
'\u0424' # 0x00ab -> CYRILLIC CAPITAL LETTER EF | |
'\u0433' # 0x00ac -> CYRILLIC SMALL LETTER GHE | |
'\u0413' # 0x00ad -> CYRILLIC CAPITAL LETTER GHE | |
'\xab' # 0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK | |
'\xbb' # 0x00af -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK | |
'\u2591' # 0x00b0 -> LIGHT SHADE | |
'\u2592' # 0x00b1 -> MEDIUM SHADE | |
'\u2593' # 0x00b2 -> DARK SHADE | |
'\u2502' # 0x00b3 -> BOX DRAWINGS LIGHT VERTICAL | |
'\u2524' # 0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT | |
'\u0445' # 0x00b5 -> CYRILLIC SMALL LETTER HA | |
'\u0425' # 0x00b6 -> CYRILLIC CAPITAL LETTER HA | |
'\u0438' # 0x00b7 -> CYRILLIC SMALL LETTER I | |
'\u0418' # 0x00b8 -> CYRILLIC CAPITAL LETTER I | |
'\u2563' # 0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT | |
'\u2551' # 0x00ba -> BOX DRAWINGS DOUBLE VERTICAL | |
'\u2557' # 0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT | |
'\u255d' # 0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT | |
'\u0439' # 0x00bd -> CYRILLIC SMALL LETTER SHORT I | |
'\u0419' # 0x00be -> CYRILLIC CAPITAL LETTER SHORT I | |
'\u2510' # 0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT | |
'\u2514' # 0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT | |
'\u2534' # 0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL | |
'\u252c' # 0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL | |
'\u251c' # 0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT | |
'\u2500' # 0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL | |
'\u253c' # 0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL | |
'\u043a' # 0x00c6 -> CYRILLIC SMALL LETTER KA | |
'\u041a' # 0x00c7 -> CYRILLIC CAPITAL LETTER KA | |
'\u255a' # 0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT | |
'\u2554' # 0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT | |
'\u2569' # 0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL | |
'\u2566' # 0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL | |
'\u2560' # 0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT | |
'\u2550' # 0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL | |
'\u256c' # 0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL | |
'\xa4' # 0x00cf -> CURRENCY SIGN | |
'\u043b' # 0x00d0 -> CYRILLIC SMALL LETTER EL | |
'\u041b' # 0x00d1 -> CYRILLIC CAPITAL LETTER EL | |
'\u043c' # 0x00d2 -> CYRILLIC SMALL LETTER EM | |
'\u041c' # 0x00d3 -> CYRILLIC CAPITAL LETTER EM | |
'\u043d' # 0x00d4 -> CYRILLIC SMALL LETTER EN | |
'\u041d' # 0x00d5 -> CYRILLIC CAPITAL LETTER EN | |
'\u043e' # 0x00d6 -> CYRILLIC SMALL LETTER O | |
'\u041e' # 0x00d7 -> CYRILLIC CAPITAL LETTER O | |
'\u043f' # 0x00d8 -> CYRILLIC SMALL LETTER PE | |
'\u2518' # 0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT | |
'\u250c' # 0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT | |
'\u2588' # 0x00db -> FULL BLOCK | |
'\u2584' # 0x00dc -> LOWER HALF BLOCK | |
'\u041f' # 0x00dd -> CYRILLIC CAPITAL LETTER PE | |
'\u044f' # 0x00de -> CYRILLIC SMALL LETTER YA | |
'\u2580' # 0x00df -> UPPER HALF BLOCK | |
'\u042f' # 0x00e0 -> CYRILLIC CAPITAL LETTER YA | |
'\u0440' # 0x00e1 -> CYRILLIC SMALL LETTER ER | |
'\u0420' # 0x00e2 -> CYRILLIC CAPITAL LETTER ER | |
'\u0441' # 0x00e3 -> CYRILLIC SMALL LETTER ES | |
'\u0421' # 0x00e4 -> CYRILLIC CAPITAL LETTER ES | |
'\u0442' # 0x00e5 -> CYRILLIC SMALL LETTER TE | |
'\u0422' # 0x00e6 -> CYRILLIC CAPITAL LETTER TE | |
'\u0443' # 0x00e7 -> CYRILLIC SMALL LETTER U | |
'\u0423' # 0x00e8 -> CYRILLIC CAPITAL LETTER U | |
'\u0436' # 0x00e9 -> CYRILLIC SMALL LETTER ZHE | |
'\u0416' # 0x00ea -> CYRILLIC CAPITAL LETTER ZHE | |
'\u0432' # 0x00eb -> CYRILLIC SMALL LETTER VE | |
'\u0412' # 0x00ec -> CYRILLIC CAPITAL LETTER VE | |
'\u044c' # 0x00ed -> CYRILLIC SMALL LETTER SOFT SIGN | |
'\u042c' # 0x00ee -> CYRILLIC CAPITAL LETTER SOFT SIGN | |
'\u2116' # 0x00ef -> NUMERO SIGN | |
'\xad' # 0x00f0 -> SOFT HYPHEN | |
'\u044b' # 0x00f1 -> CYRILLIC SMALL LETTER YERU | |
'\u042b' # 0x00f2 -> CYRILLIC CAPITAL LETTER YERU | |
'\u0437' # 0x00f3 -> CYRILLIC SMALL LETTER ZE | |
'\u0417' # 0x00f4 -> CYRILLIC CAPITAL LETTER ZE | |
'\u0448' # 0x00f5 -> CYRILLIC SMALL LETTER SHA | |
'\u0428' # 0x00f6 -> CYRILLIC CAPITAL LETTER SHA | |
'\u044d' # 0x00f7 -> CYRILLIC SMALL LETTER E | |
'\u042d' # 0x00f8 -> CYRILLIC CAPITAL LETTER E | |
'\u0449' # 0x00f9 -> CYRILLIC SMALL LETTER SHCHA | |
'\u0429' # 0x00fa -> CYRILLIC CAPITAL LETTER SHCHA | |
'\u0447' # 0x00fb -> CYRILLIC SMALL LETTER CHE | |
'\u0427' # 0x00fc -> CYRILLIC CAPITAL LETTER CHE | |
'\xa7' # 0x00fd -> SECTION SIGN | |
'\u25a0' # 0x00fe -> BLACK SQUARE | |
'\xa0' # 0x00ff -> NO-BREAK SPACE | |
) | |
### Encoding Map | |
encoding_map = { | |
0x0000: 0x0000, # NULL | |
0x0001: 0x0001, # START OF HEADING | |
0x0002: 0x0002, # START OF TEXT | |
0x0003: 0x0003, # END OF TEXT | |
0x0004: 0x0004, # END OF TRANSMISSION | |
0x0005: 0x0005, # ENQUIRY | |
0x0006: 0x0006, # ACKNOWLEDGE | |
0x0007: 0x0007, # BELL | |
0x0008: 0x0008, # BACKSPACE | |
0x0009: 0x0009, # HORIZONTAL TABULATION | |
0x000a: 0x000a, # LINE FEED | |
0x000b: 0x000b, # VERTICAL TABULATION | |
0x000c: 0x000c, # FORM FEED | |
0x000d: 0x000d, # CARRIAGE RETURN | |
0x000e: 0x000e, # SHIFT OUT | |
0x000f: 0x000f, # SHIFT IN | |
0x0010: 0x0010, # DATA LINK ESCAPE | |
0x0011: 0x0011, # DEVICE CONTROL ONE | |
0x0012: 0x0012, # DEVICE CONTROL TWO | |
0x0013: 0x0013, # DEVICE CONTROL THREE | |
0x0014: 0x0014, # DEVICE CONTROL FOUR | |
0x0015: 0x0015, # NEGATIVE ACKNOWLEDGE | |
0x0016: 0x0016, # SYNCHRONOUS IDLE | |
0x0017: 0x0017, # END OF TRANSMISSION BLOCK | |
0x0018: 0x0018, # CANCEL | |
0x0019: 0x0019, # END OF MEDIUM | |
0x001a: 0x001a, # SUBSTITUTE | |
0x001b: 0x001b, # ESCAPE | |
0x001c: 0x001c, # FILE SEPARATOR | |
0x001d: 0x001d, # GROUP SEPARATOR | |
0x001e: 0x001e, # RECORD SEPARATOR | |
0x001f: 0x001f, # UNIT SEPARATOR | |
0x0020: 0x0020, # SPACE | |
0x0021: 0x0021, # EXCLAMATION MARK | |
0x0022: 0x0022, # QUOTATION MARK | |
0x0023: 0x0023, # NUMBER SIGN | |
0x0024: 0x0024, # DOLLAR SIGN | |
0x0025: 0x0025, # PERCENT SIGN | |
0x0026: 0x0026, # AMPERSAND | |
0x0027: 0x0027, # APOSTROPHE | |
0x0028: 0x0028, # LEFT PARENTHESIS | |
0x0029: 0x0029, # RIGHT PARENTHESIS | |
0x002a: 0x002a, # ASTERISK | |
0x002b: 0x002b, # PLUS SIGN | |
0x002c: 0x002c, # COMMA | |
0x002d: 0x002d, # HYPHEN-MINUS | |
0x002e: 0x002e, # FULL STOP | |
0x002f: 0x002f, # SOLIDUS | |
0x0030: 0x0030, # DIGIT ZERO | |
0x0031: 0x0031, # DIGIT ONE | |
0x0032: 0x0032, # DIGIT TWO | |
0x0033: 0x0033, # DIGIT THREE | |
0x0034: 0x0034, # DIGIT FOUR | |
0x0035: 0x0035, # DIGIT FIVE | |
0x0036: 0x0036, # DIGIT SIX | |
0x0037: 0x0037, # DIGIT SEVEN | |
0x0038: 0x0038, # DIGIT EIGHT | |
0x0039: 0x0039, # DIGIT NINE | |
0x003a: 0x003a, # COLON | |
0x003b: 0x003b, # SEMICOLON | |
0x003c: 0x003c, # LESS-THAN SIGN | |
0x003d: 0x003d, # EQUALS SIGN | |
0x003e: 0x003e, # GREATER-THAN SIGN | |
0x003f: 0x003f, # QUESTION MARK | |
0x0040: 0x0040, # COMMERCIAL AT | |
0x0041: 0x0041, # LATIN CAPITAL LETTER A | |
0x0042: 0x0042, # LATIN CAPITAL LETTER B | |
0x0043: 0x0043, # LATIN CAPITAL LETTER C | |
0x0044: 0x0044, # LATIN CAPITAL LETTER D | |
0x0045: 0x0045, # LATIN CAPITAL LETTER E | |
0x0046: 0x0046, # LATIN CAPITAL LETTER F | |
0x0047: 0x0047, # LATIN CAPITAL LETTER G | |
0x0048: 0x0048, # LATIN CAPITAL LETTER H | |
0x0049: 0x0049, # LATIN CAPITAL LETTER I | |
0x004a: 0x004a, # LATIN CAPITAL LETTER J | |
0x004b: 0x004b, # LATIN CAPITAL LETTER K | |
0x004c: 0x004c, # LATIN CAPITAL LETTER L | |
0x004d: 0x004d, # LATIN CAPITAL LETTER M | |
0x004e: 0x004e, # LATIN CAPITAL LETTER N | |
0x004f: 0x004f, # LATIN CAPITAL LETTER O | |
0x0050: 0x0050, # LATIN CAPITAL LETTER P | |
0x0051: 0x0051, # LATIN CAPITAL LETTER Q | |
0x0052: 0x0052, # LATIN CAPITAL LETTER R | |
0x0053: 0x0053, # LATIN CAPITAL LETTER S | |
0x0054: 0x0054, # LATIN CAPITAL LETTER T | |
0x0055: 0x0055, # LATIN CAPITAL LETTER U | |
0x0056: 0x0056, # LATIN CAPITAL LETTER V | |
0x0057: 0x0057, # LATIN CAPITAL LETTER W | |
0x0058: 0x0058, # LATIN CAPITAL LETTER X | |
0x0059: 0x0059, # LATIN CAPITAL LETTER Y | |
0x005a: 0x005a, # LATIN CAPITAL LETTER Z | |
0x005b: 0x005b, # LEFT SQUARE BRACKET | |
0x005c: 0x005c, # REVERSE SOLIDUS | |
0x005d: 0x005d, # RIGHT SQUARE BRACKET | |
0x005e: 0x005e, # CIRCUMFLEX ACCENT | |
0x005f: 0x005f, # LOW LINE | |
0x0060: 0x0060, # GRAVE ACCENT | |
0x0061: 0x0061, # LATIN SMALL LETTER A | |
0x0062: 0x0062, # LATIN SMALL LETTER B | |
0x0063: 0x0063, # LATIN SMALL LETTER C | |
0x0064: 0x0064, # LATIN SMALL LETTER D | |
0x0065: 0x0065, # LATIN SMALL LETTER E | |
0x0066: 0x0066, # LATIN SMALL LETTER F | |
0x0067: 0x0067, # LATIN SMALL LETTER G | |
0x0068: 0x0068, # LATIN SMALL LETTER H | |
0x0069: 0x0069, # LATIN SMALL LETTER I | |
0x006a: 0x006a, # LATIN SMALL LETTER J | |
0x006b: 0x006b, # LATIN SMALL LETTER K | |
0x006c: 0x006c, # LATIN SMALL LETTER L | |
0x006d: 0x006d, # LATIN SMALL LETTER M | |
0x006e: 0x006e, # LATIN SMALL LETTER N | |
0x006f: 0x006f, # LATIN SMALL LETTER O | |
0x0070: 0x0070, # LATIN SMALL LETTER P | |
0x0071: 0x0071, # LATIN SMALL LETTER Q | |
0x0072: 0x0072, # LATIN SMALL LETTER R | |
0x0073: 0x0073, # LATIN SMALL LETTER S | |
0x0074: 0x0074, # LATIN SMALL LETTER T | |
0x0075: 0x0075, # LATIN SMALL LETTER U | |
0x0076: 0x0076, # LATIN SMALL LETTER V | |
0x0077: 0x0077, # LATIN SMALL LETTER W | |
0x0078: 0x0078, # LATIN SMALL LETTER X | |
0x0079: 0x0079, # LATIN SMALL LETTER Y | |
0x007a: 0x007a, # LATIN SMALL LETTER Z | |
0x007b: 0x007b, # LEFT CURLY BRACKET | |
0x007c: 0x007c, # VERTICAL LINE | |
0x007d: 0x007d, # RIGHT CURLY BRACKET | |
0x007e: 0x007e, # TILDE | |
0x007f: 0x007f, # DELETE | |
0x00a0: 0x00ff, # NO-BREAK SPACE | |
0x00a4: 0x00cf, # CURRENCY SIGN | |
0x00a7: 0x00fd, # SECTION SIGN | |
0x00ab: 0x00ae, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK | |
0x00ad: 0x00f0, # SOFT HYPHEN | |
0x00bb: 0x00af, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK | |
0x0401: 0x0085, # CYRILLIC CAPITAL LETTER IO | |
0x0402: 0x0081, # CYRILLIC CAPITAL LETTER DJE | |
0x0403: 0x0083, # CYRILLIC CAPITAL LETTER GJE | |
0x0404: 0x0087, # CYRILLIC CAPITAL LETTER UKRAINIAN IE | |
0x0405: 0x0089, # CYRILLIC CAPITAL LETTER DZE | |
0x0406: 0x008b, # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I | |
0x0407: 0x008d, # CYRILLIC CAPITAL LETTER YI | |
0x0408: 0x008f, # CYRILLIC CAPITAL LETTER JE | |
0x0409: 0x0091, # CYRILLIC CAPITAL LETTER LJE | |
0x040a: 0x0093, # CYRILLIC CAPITAL LETTER NJE | |
0x040b: 0x0095, # CYRILLIC CAPITAL LETTER TSHE | |
0x040c: 0x0097, # CYRILLIC CAPITAL LETTER KJE | |
0x040e: 0x0099, # CYRILLIC CAPITAL LETTER SHORT U | |
0x040f: 0x009b, # CYRILLIC CAPITAL LETTER DZHE | |
0x0410: 0x00a1, # CYRILLIC CAPITAL LETTER A | |
0x0411: 0x00a3, # CYRILLIC CAPITAL LETTER BE | |
0x0412: 0x00ec, # CYRILLIC CAPITAL LETTER VE | |
0x0413: 0x00ad, # CYRILLIC CAPITAL LETTER GHE | |
0x0414: 0x00a7, # CYRILLIC CAPITAL LETTER DE | |
0x0415: 0x00a9, # CYRILLIC CAPITAL LETTER IE | |
0x0416: 0x00ea, # CYRILLIC CAPITAL LETTER ZHE | |
0x0417: 0x00f4, # CYRILLIC CAPITAL LETTER ZE | |
0x0418: 0x00b8, # CYRILLIC CAPITAL LETTER I | |
0x0419: 0x00be, # CYRILLIC CAPITAL LETTER SHORT I | |
0x041a: 0x00c7, # CYRILLIC CAPITAL LETTER KA | |
0x041b: 0x00d1, # CYRILLIC CAPITAL LETTER EL | |
0x041c: 0x00d3, # CYRILLIC CAPITAL LETTER EM | |
0x041d: 0x00d5, # CYRILLIC CAPITAL LETTER EN | |
0x041e: 0x00d7, # CYRILLIC CAPITAL LETTER O | |
0x041f: 0x00dd, # CYRILLIC CAPITAL LETTER PE | |
0x0420: 0x00e2, # CYRILLIC CAPITAL LETTER ER | |
0x0421: 0x00e4, # CYRILLIC CAPITAL LETTER ES | |
0x0422: 0x00e6, # CYRILLIC CAPITAL LETTER TE | |
0x0423: 0x00e8, # CYRILLIC CAPITAL LETTER U | |
0x0424: 0x00ab, # CYRILLIC CAPITAL LETTER EF | |
0x0425: 0x00b6, # CYRILLIC CAPITAL LETTER HA | |
0x0426: 0x00a5, # CYRILLIC CAPITAL LETTER TSE | |
0x0427: 0x00fc, # CYRILLIC CAPITAL LETTER CHE | |
0x0428: 0x00f6, # CYRILLIC CAPITAL LETTER SHA | |
0x0429: 0x00fa, # CYRILLIC CAPITAL LETTER SHCHA | |
0x042a: 0x009f, # CYRILLIC CAPITAL LETTER HARD SIGN | |
0x042b: 0x00f2, # CYRILLIC CAPITAL LETTER YERU | |
0x042c: 0x00ee, # CYRILLIC CAPITAL LETTER SOFT SIGN | |
0x042d: 0x00f8, # CYRILLIC CAPITAL LETTER E | |
0x042e: 0x009d, # CYRILLIC CAPITAL LETTER YU | |
0x042f: 0x00e0, # CYRILLIC CAPITAL LETTER YA | |
0x0430: 0x00a0, # CYRILLIC SMALL LETTER A | |
0x0431: 0x00a2, # CYRILLIC SMALL LETTER BE | |
0x0432: 0x00eb, # CYRILLIC SMALL LETTER VE | |
0x0433: 0x00ac, # CYRILLIC SMALL LETTER GHE | |
0x0434: 0x00a6, # CYRILLIC SMALL LETTER DE | |
0x0435: 0x00a8, # CYRILLIC SMALL LETTER IE | |
0x0436: 0x00e9, # CYRILLIC SMALL LETTER ZHE | |
0x0437: 0x00f3, # CYRILLIC SMALL LETTER ZE | |
0x0438: 0x00b7, # CYRILLIC SMALL LETTER I | |
0x0439: 0x00bd, # CYRILLIC SMALL LETTER SHORT I | |
0x043a: 0x00c6, # CYRILLIC SMALL LETTER KA | |
0x043b: 0x00d0, # CYRILLIC SMALL LETTER EL | |
0x043c: 0x00d2, # CYRILLIC SMALL LETTER EM | |
0x043d: 0x00d4, # CYRILLIC SMALL LETTER EN | |
0x043e: 0x00d6, # CYRILLIC SMALL LETTER O | |
0x043f: 0x00d8, # CYRILLIC SMALL LETTER PE | |
0x0440: 0x00e1, # CYRILLIC SMALL LETTER ER | |
0x0441: 0x00e3, # CYRILLIC SMALL LETTER ES | |
0x0442: 0x00e5, # CYRILLIC SMALL LETTER TE | |
0x0443: 0x00e7, # CYRILLIC SMALL LETTER U | |
0x0444: 0x00aa, # CYRILLIC SMALL LETTER EF | |
0x0445: 0x00b5, # CYRILLIC SMALL LETTER HA | |
0x0446: 0x00a4, # CYRILLIC SMALL LETTER TSE | |
0x0447: 0x00fb, # CYRILLIC SMALL LETTER CHE | |
0x0448: 0x00f5, # CYRILLIC SMALL LETTER SHA | |
0x0449: 0x00f9, # CYRILLIC SMALL LETTER SHCHA | |
0x044a: 0x009e, # CYRILLIC SMALL LETTER HARD SIGN | |
0x044b: 0x00f1, # CYRILLIC SMALL LETTER YERU | |
0x044c: 0x00ed, # CYRILLIC SMALL LETTER SOFT SIGN | |
0x044d: 0x00f7, # CYRILLIC SMALL LETTER E | |
0x044e: 0x009c, # CYRILLIC SMALL LETTER YU | |
0x044f: 0x00de, # CYRILLIC SMALL LETTER YA | |
0x0451: 0x0084, # CYRILLIC SMALL LETTER IO | |
0x0452: 0x0080, # CYRILLIC SMALL LETTER DJE | |
0x0453: 0x0082, # CYRILLIC SMALL LETTER GJE | |
0x0454: 0x0086, # CYRILLIC SMALL LETTER UKRAINIAN IE | |
0x0455: 0x0088, # CYRILLIC SMALL LETTER DZE | |
0x0456: 0x008a, # CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I | |
0x0457: 0x008c, # CYRILLIC SMALL LETTER YI | |
0x0458: 0x008e, # CYRILLIC SMALL LETTER JE | |
0x0459: 0x0090, # CYRILLIC SMALL LETTER LJE | |
0x045a: 0x0092, # CYRILLIC SMALL LETTER NJE | |
0x045b: 0x0094, # CYRILLIC SMALL LETTER TSHE | |
0x045c: 0x0096, # CYRILLIC SMALL LETTER KJE | |
0x045e: 0x0098, # CYRILLIC SMALL LETTER SHORT U | |
0x045f: 0x009a, # CYRILLIC SMALL LETTER DZHE | |
0x2116: 0x00ef, # NUMERO SIGN | |
0x2500: 0x00c4, # BOX DRAWINGS LIGHT HORIZONTAL | |
0x2502: 0x00b3, # BOX DRAWINGS LIGHT VERTICAL | |
0x250c: 0x00da, # BOX DRAWINGS LIGHT DOWN AND RIGHT | |
0x2510: 0x00bf, # BOX DRAWINGS LIGHT DOWN AND LEFT | |
0x2514: 0x00c0, # BOX DRAWINGS LIGHT UP AND RIGHT | |
0x2518: 0x00d9, # BOX DRAWINGS LIGHT UP AND LEFT | |
0x251c: 0x00c3, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT | |
0x2524: 0x00b4, # BOX DRAWINGS LIGHT VERTICAL AND LEFT | |
0x252c: 0x00c2, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL | |
0x2534: 0x00c1, # BOX DRAWINGS LIGHT UP AND HORIZONTAL | |
0x253c: 0x00c5, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL | |
0x2550: 0x00cd, # BOX DRAWINGS DOUBLE HORIZONTAL | |
0x2551: 0x00ba, # BOX DRAWINGS DOUBLE VERTICAL | |
0x2554: 0x00c9, # BOX DRAWINGS DOUBLE DOWN AND RIGHT | |
0x2557: 0x00bb, # BOX DRAWINGS DOUBLE DOWN AND LEFT | |
0x255a: 0x00c8, # BOX DRAWINGS DOUBLE UP AND RIGHT | |
0x255d: 0x00bc, # BOX DRAWINGS DOUBLE UP AND LEFT | |
0x2560: 0x00cc, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT | |
0x2563: 0x00b9, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT | |
0x2566: 0x00cb, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL | |
0x2569: 0x00ca, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL | |
0x256c: 0x00ce, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL | |
0x2580: 0x00df, # UPPER HALF BLOCK | |
0x2584: 0x00dc, # LOWER HALF BLOCK | |
0x2588: 0x00db, # FULL BLOCK | |
0x2591: 0x00b0, # LIGHT SHADE | |
0x2592: 0x00b1, # MEDIUM SHADE | |
0x2593: 0x00b2, # DARK SHADE | |
0x25a0: 0x00fe, # BLACK SQUARE | |
} |
""" Python Character Mapping Codec cp856 generated from 'MAPPINGS/VENDORS/MISC/CP856.TXT' with gencodec.py. | |
"""#" | |
import codecs | |
### Codec APIs | |
class Codec(codecs.Codec): | |
def encode(self,input,errors='strict'): | |
return codecs.charmap_encode(input,errors,encoding_table) | |
def decode(self,input,errors='strict'): | |
return codecs.charmap_decode(input,errors,decoding_table) | |
class IncrementalEncoder(codecs.IncrementalEncoder): | |
def encode(self, input, final=False): | |
return codecs.charmap_encode(input,self.errors,encoding_table)[0] | |
class IncrementalDecoder(codecs.IncrementalDecoder): | |
def decode(self, input, final=False): | |
return codecs.charmap_decode(input,self.errors,decoding_table)[0] | |
class StreamWriter(Codec,codecs.StreamWriter): | |
pass | |
class StreamReader(Codec,codecs.StreamReader): | |
pass | |
### encodings module API | |
def getregentry(): | |
return codecs.CodecInfo( | |
name='cp856', | |
encode=Codec().encode, | |
decode=Codec().decode, | |
incrementalencoder=IncrementalEncoder, | |
incrementaldecoder=IncrementalDecoder, | |
streamreader=StreamReader, | |
streamwriter=StreamWriter, | |
) | |
### Decoding Table | |
decoding_table = ( | |
'\x00' # 0x00 -> NULL | |
'\x01' # 0x01 -> START OF HEADING | |
'\x02' # 0x02 -> START OF TEXT | |
'\x03' # 0x03 -> END OF TEXT | |
'\x04' # 0x04 -> END OF TRANSMISSION | |
'\x05' # 0x05 -> ENQUIRY | |
'\x06' # 0x06 -> ACKNOWLEDGE | |
'\x07' # 0x07 -> BELL | |
'\x08' # 0x08 -> BACKSPACE | |
'\t' # 0x09 -> HORIZONTAL TABULATION | |
'\n' # 0x0A -> LINE FEED | |
'\x0b' # 0x0B -> VERTICAL TABULATION | |
'\x0c' # 0x0C -> FORM FEED | |
'\r' # 0x0D -> CARRIAGE RETURN | |
'\x0e' # 0x0E -> SHIFT OUT | |
'\x0f' # 0x0F -> SHIFT IN | |
'\x10' # 0x10 -> DATA LINK ESCAPE | |
'\x11' # 0x11 -> DEVICE CONTROL ONE | |
'\x12' # 0x12 -> DEVICE CONTROL TWO | |
'\x13' # 0x13 -> DEVICE CONTROL THREE | |
'\x14' # 0x14 -> DEVICE CONTROL FOUR | |
'\x15' # 0x15 -> NEGATIVE ACKNOWLEDGE | |
'\x16' # 0x16 -> SYNCHRONOUS IDLE | |
'\x17' # 0x17 -> END OF TRANSMISSION BLOCK | |
'\x18' # 0x18 -> CANCEL | |
'\x19' # 0x19 -> END OF MEDIUM | |
'\x1a' # 0x1A -> SUBSTITUTE | |
'\x1b' # 0x1B -> ESCAPE | |
'\x1c' # 0x1C -> FILE SEPARATOR | |
'\x1d' # 0x1D -> GROUP SEPARATOR | |
'\x1e' # 0x1E -> RECORD SEPARATOR | |
'\x1f' # 0x1F -> UNIT SEPARATOR | |
' ' # 0x20 -> SPACE | |
'!' # 0x21 -> EXCLAMATION MARK | |
'"' # 0x22 -> QUOTATION MARK | |
'#' # 0x23 -> NUMBER SIGN | |
'$' # 0x24 -> DOLLAR SIGN | |
'%' # 0x25 -> PERCENT SIGN | |
'&' # 0x26 -> AMPERSAND | |
"'" # 0x27 -> APOSTROPHE | |
'(' # 0x28 -> LEFT PARENTHESIS | |
')' # 0x29 -> RIGHT PARENTHESIS | |
'*' # 0x2A -> ASTERISK | |
'+' # 0x2B -> PLUS SIGN | |
',' # 0x2C -> COMMA | |
'-' # 0x2D -> HYPHEN-MINUS | |
'.' # 0x2E -> FULL STOP | |
'/' # 0x2F -> SOLIDUS | |
'0' # 0x30 -> DIGIT ZERO | |
'1' # 0x31 -> DIGIT ONE | |
'2' # 0x32 -> DIGIT TWO | |
'3' # 0x33 -> DIGIT THREE | |
'4' # 0x34 -> DIGIT FOUR | |
'5' # 0x35 -> DIGIT FIVE | |
'6' # 0x36 -> DIGIT SIX | |
'7' # 0x37 -> DIGIT SEVEN | |
'8' # 0x38 -> DIGIT EIGHT | |
'9' # 0x39 -> DIGIT NINE | |
':' # 0x3A -> COLON | |
';' # 0x3B -> SEMICOLON | |
'<' # 0x3C -> LESS-THAN SIGN | |
'=' # 0x3D -> EQUALS SIGN | |
'>' # 0x3E -> GREATER-THAN SIGN | |
'?' # 0x3F -> QUESTION MARK | |
'@' # 0x40 -> COMMERCIAL AT | |
'A' # 0x41 -> LATIN CAPITAL LETTER A | |
'B' # 0x42 -> LATIN CAPITAL LETTER B | |
'C' # 0x43 -> LATIN CAPITAL LETTER C | |
'D' # 0x44 -> LATIN CAPITAL LETTER D | |
'E' # 0x45 -> LATIN CAPITAL LETTER E | |
'F' # 0x46 -> LATIN CAPITAL LETTER F | |
'G' # 0x47 -> LATIN CAPITAL LETTER G | |
'H' # 0x48 -> LATIN CAPITAL LETTER H | |
'I' # 0x49 -> LATIN CAPITAL LETTER I | |
'J' # 0x4A -> LATIN CAPITAL LETTER J | |
'K' # 0x4B -> LATIN CAPITAL LETTER K | |
'L' # 0x4C -> LATIN CAPITAL LETTER L | |
'M' # 0x4D -> LATIN CAPITAL LETTER M | |
'N' # 0x4E -> LATIN CAPITAL LETTER N | |
'O' # 0x4F -> LATIN CAPITAL LETTER O | |
'P' # 0x50 -> LATIN CAPITAL LETTER P | |
'Q' # 0x51 -> LATIN CAPITAL LETTER Q | |
'R' # 0x52 -> LATIN CAPITAL LETTER R | |
'S' # 0x53 -> LATIN CAPITAL LETTER S | |
'T' # 0x54 -> LATIN CAPITAL LETTER T | |
'U' # 0x55 -> LATIN CAPITAL LETTER U | |
'V' # 0x56 -> LATIN CAPITAL LETTER V | |
'W' # 0x57 -> LATIN CAPITAL LETTER W | |
'X' # 0x58 -> LATIN CAPITAL LETTER X | |
'Y' # 0x59 -> LATIN CAPITAL LETTER Y | |
'Z' # 0x5A -> LATIN CAPITAL LETTER Z | |
'[' # 0x5B -> LEFT SQUARE BRACKET | |
'\\' # 0x5C -> REVERSE SOLIDUS | |
']' # 0x5D -> RIGHT SQUARE BRACKET | |
'^' # 0x5E -> CIRCUMFLEX ACCENT | |
'_' # 0x5F -> LOW LINE | |
'`' # 0x60 -> GRAVE ACCENT | |
'a' # 0x61 -> LATIN SMALL LETTER A | |
'b' # 0x62 -> LATIN SMALL LETTER B | |
'c' # 0x63 -> LATIN SMALL LETTER C | |
'd' # 0x64 -> LATIN SMALL LETTER D | |
'e' # 0x65 -> LATIN SMALL LETTER E | |
'f' # 0x66 -> LATIN SMALL LETTER F | |
'g' # 0x67 -> LATIN SMALL LETTER G | |
'h' # 0x68 -> LATIN SMALL LETTER H | |
'i' # 0x69 -> LATIN SMALL LETTER I | |
'j' # 0x6A -> LATIN SMALL LETTER J | |
'k' # 0x6B -> LATIN SMALL LETTER K | |
'l' # 0x6C -> LATIN SMALL LETTER L | |
'm' # 0x6D -> LATIN SMALL LETTER M | |
'n' # 0x6E -> LATIN SMALL LETTER N | |
'o' # 0x6F -> LATIN SMALL LETTER O | |
'p' # 0x70 -> LATIN SMALL LETTER P | |
'q' # 0x71 -> LATIN SMALL LETTER Q | |
'r' # 0x72 -> LATIN SMALL LETTER R | |
's' # 0x73 -> LATIN SMALL LETTER S | |
't' # 0x74 -> LATIN SMALL LETTER T | |
'u' # 0x75 -> LATIN SMALL LETTER U | |
'v' # 0x76 -> LATIN SMALL LETTER V | |
'w' # 0x77 -> LATIN SMALL LETTER W | |
'x' # 0x78 -> LATIN SMALL LETTER X | |
'y' # 0x79 -> LATIN SMALL LETTER Y | |
'z' # 0x7A -> LATIN SMALL LETTER Z | |
'{' # 0x7B -> LEFT CURLY BRACKET | |
'|' # 0x7C -> VERTICAL LINE | |
'}' # 0x7D -> RIGHT CURLY BRACKET | |
'~' # 0x7E -> TILDE | |
'\x7f' # 0x7F -> DELETE | |
'\u05d0' # 0x80 -> HEBREW LETTER ALEF | |
'\u05d1' # 0x81 -> HEBREW LETTER BET | |
'\u05d2' # 0x82 -> HEBREW LETTER GIMEL | |
'\u05d3' # 0x83 -> HEBREW LETTER DALET | |
'\u05d4' # 0x84 -> HEBREW LETTER HE | |
'\u05d5' # 0x85 -> HEBREW LETTER VAV | |
'\u05d6' # 0x86 -> HEBREW LETTER ZAYIN | |
'\u05d7' # 0x87 -> HEBREW LETTER HET | |
'\u05d8' # 0x88 -> HEBREW LETTER TET | |
'\u05d9' # 0x89 -> HEBREW LETTER YOD | |
'\u05da' # 0x8A -> HEBREW LETTER FINAL KAF | |
'\u05db' # 0x8B -> HEBREW LETTER KAF | |
'\u05dc' # 0x8C -> HEBREW LETTER LAMED | |
'\u05dd' # 0x8D -> HEBREW LETTER FINAL MEM | |
'\u05de' # 0x8E -> HEBREW LETTER MEM | |
'\u05df' # 0x8F -> HEBREW LETTER FINAL NUN | |
'\u05e0' # 0x90 -> HEBREW LETTER NUN | |
'\u05e1' # 0x91 -> HEBREW LETTER SAMEKH | |
'\u05e2' # 0x92 -> HEBREW LETTER AYIN | |
'\u05e3' # 0x93 -> HEBREW LETTER FINAL PE | |
'\u05e4' # 0x94 -> HEBREW LETTER PE | |
'\u05e5' # 0x95 -> HEBREW LETTER FINAL TSADI | |
'\u05e6' # 0x96 -> HEBREW LETTER TSADI | |
'\u05e7' # 0x97 -> HEBREW LETTER QOF | |
'\u05e8' # 0x98 -> HEBREW LETTER RESH | |
'\u05e9' # 0x99 -> HEBREW LETTER SHIN | |
'\u05ea' # 0x9A -> HEBREW LETTER TAV | |
'\ufffe' # 0x9B -> UNDEFINED | |
'\xa3' # 0x9C -> POUND SIGN | |
'\ufffe' # 0x9D -> UNDEFINED | |
'\xd7' # 0x9E -> MULTIPLICATION SIGN | |
'\ufffe' # 0x9F -> UNDEFINED | |
'\ufffe' # 0xA0 -> UNDEFINED | |
'\ufffe' # 0xA1 -> UNDEFINED | |
'\ufffe' # 0xA2 -> UNDEFINED | |
'\ufffe' # 0xA3 -> UNDEFINED | |
'\ufffe' # 0xA4 -> UNDEFINED | |
'\ufffe' # 0xA5 -> UNDEFINED | |
'\ufffe' # 0xA6 -> UNDEFINED | |
'\ufffe' # 0xA7 -> UNDEFINED | |
'\ufffe' # 0xA8 -> UNDEFINED | |
'\xae' # 0xA9 -> REGISTERED SIGN | |
'\xac' # 0xAA -> NOT SIGN | |
'\xbd' # 0xAB -> VULGAR FRACTION ONE HALF | |
'\xbc' # 0xAC -> VULGAR FRACTION ONE QUARTER | |
'\ufffe' # 0xAD -> UNDEFINED | |
'\xab' # 0xAE -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK | |
'\xbb' # 0xAF -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK | |
'\u2591' # 0xB0 -> LIGHT SHADE | |
'\u2592' # 0xB1 -> MEDIUM SHADE | |
'\u2593' # 0xB2 -> DARK SHADE | |
'\u2502' # 0xB3 -> BOX DRAWINGS LIGHT VERTICAL | |
'\u2524' # 0xB4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT | |
'\ufffe' # 0xB5 -> UNDEFINED | |
'\ufffe' # 0xB6 -> UNDEFINED | |
'\ufffe' # 0xB7 -> UNDEFINED | |
'\xa9' # 0xB8 -> COPYRIGHT SIGN | |
'\u2563' # 0xB9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT | |
'\u2551' # 0xBA -> BOX DRAWINGS DOUBLE VERTICAL | |
'\u2557' # 0xBB -> BOX DRAWINGS DOUBLE DOWN AND LEFT | |
'\u255d' # 0xBC -> BOX DRAWINGS DOUBLE UP AND LEFT | |
'\xa2' # 0xBD -> CENT SIGN | |
'\xa5' # 0xBE -> YEN SIGN | |
'\u2510' # 0xBF -> BOX DRAWINGS LIGHT DOWN AND LEFT | |
'\u2514' # 0xC0 -> BOX DRAWINGS LIGHT UP AND RIGHT | |
'\u2534' # 0xC1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL | |
'\u252c' # 0xC2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL | |
'\u251c' # 0xC3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT | |
'\u2500' # 0xC4 -> BOX DRAWINGS LIGHT HORIZONTAL | |
'\u253c' # 0xC5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL | |
'\ufffe' # 0xC6 -> UNDEFINED | |
'\ufffe' # 0xC7 -> UNDEFINED | |
'\u255a' # 0xC8 -> BOX DRAWINGS DOUBLE UP AND RIGHT | |
'\u2554' # 0xC9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT | |
'\u2569' # 0xCA -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL | |
'\u2566' # 0xCB -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL | |
'\u2560' # 0xCC -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT | |
'\u2550' # 0xCD -> BOX DRAWINGS DOUBLE HORIZONTAL | |
'\u256c' # 0xCE -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL | |
'\xa4' # 0xCF -> CURRENCY SIGN | |
'\ufffe' # 0xD0 -> UNDEFINED | |
'\ufffe' # 0xD1 -> UNDEFINED | |
'\ufffe' # 0xD2 -> UNDEFINED | |
'\ufffe' # 0xD3 -> UNDEFINEDS | |
'\ufffe' # 0xD4 -> UNDEFINED | |
'\ufffe' # 0xD5 -> UNDEFINED | |
'\ufffe' # 0xD6 -> UNDEFINEDE | |
'\ufffe' # 0xD7 -> UNDEFINED | |
'\ufffe' # 0xD8 -> UNDEFINED | |
'\u2518' # 0xD9 -> BOX DRAWINGS LIGHT UP AND LEFT | |
'\u250c' # 0xDA -> BOX DRAWINGS LIGHT DOWN AND RIGHT | |
'\u2588' # 0xDB -> FULL BLOCK | |
'\u2584' # 0xDC -> LOWER HALF BLOCK | |
'\xa6' # 0xDD -> BROKEN BAR | |
'\ufffe' # 0xDE -> UNDEFINED | |
'\u2580' # 0xDF -> UPPER HALF BLOCK | |
'\ufffe' # 0xE0 -> UNDEFINED | |
'\ufffe' # 0xE1 -> UNDEFINED | |
'\ufffe' # 0xE2 -> UNDEFINED | |
'\ufffe' # 0xE3 -> UNDEFINED | |
'\ufffe' # 0xE4 -> UNDEFINED | |
'\ufffe' # 0xE5 -> UNDEFINED | |
'\xb5' # 0xE6 -> MICRO SIGN | |
'\ufffe' # 0xE7 -> UNDEFINED | |
'\ufffe' # 0xE8 -> UNDEFINED | |
'\ufffe' # 0xE9 -> UNDEFINED | |
'\ufffe' # 0xEA -> UNDEFINED | |
'\ufffe' # 0xEB -> UNDEFINED | |
'\ufffe' # 0xEC -> UNDEFINED | |
'\ufffe' # 0xED -> UNDEFINED | |
'\xaf' # 0xEE -> MACRON | |
'\xb4' # 0xEF -> ACUTE ACCENT | |
'\xad' # 0xF0 -> SOFT HYPHEN | |
'\xb1' # 0xF1 -> PLUS-MINUS SIGN | |
'\u2017' # 0xF2 -> DOUBLE LOW LINE | |
'\xbe' # 0xF3 -> VULGAR FRACTION THREE QUARTERS | |
'\xb6' # 0xF4 -> PILCROW SIGN | |
'\xa7' # 0xF5 -> SECTION SIGN | |
'\xf7' # 0xF6 -> DIVISION SIGN | |
'\xb8' # 0xF7 -> CEDILLA | |
'\xb0' # 0xF8 -> DEGREE SIGN | |
'\xa8' # 0xF9 -> DIAERESIS | |
'\xb7' # 0xFA -> MIDDLE DOT | |
'\xb9' # 0xFB -> SUPERSCRIPT ONE | |
'\xb3' # 0xFC -> SUPERSCRIPT THREE | |
'\xb2' # 0xFD -> SUPERSCRIPT TWO | |
'\u25a0' # 0xFE -> BLACK SQUARE | |
'\xa0' # 0xFF -> NO-BREAK SPACE | |
) | |
### Encoding table | |
encoding_table=codecs.charmap_build(decoding_table) |
""" Python Character Mapping Codec generated from 'VENDORS/MICSFT/PC/CP857.TXT' with gencodec.py. | |
"""#" | |
import codecs | |
### Codec APIs | |
class Codec(codecs.Codec): | |
def encode(self,input,errors='strict'): | |
return codecs.charmap_encode(input,errors,encoding_map) | |
def decode(self,input,errors='strict'): | |
return codecs.charmap_decode(input,errors,decoding_table) | |
class IncrementalEncoder(codecs.IncrementalEncoder): | |
def encode(self, input, final=False): | |
return codecs.charmap_encode(input,self.errors,encoding_map)[0] | |
class IncrementalDecoder(codecs.IncrementalDecoder): | |
def decode(self, input, final=False): | |
return codecs.charmap_decode(input,self.errors,decoding_table)[0] | |
class StreamWriter(Codec,codecs.StreamWriter): | |
pass | |
class StreamReader(Codec,codecs.StreamReader): | |
pass | |
### encodings module API | |
def getregentry(): | |
return codecs.CodecInfo( | |
name='cp857', | |
encode=Codec().encode, | |
decode=Codec().decode, | |
incrementalencoder=IncrementalEncoder, | |
incrementaldecoder=IncrementalDecoder, | |
streamreader=StreamReader, | |
streamwriter=StreamWriter, | |
) | |
### Decoding Map | |
decoding_map = codecs.make_identity_dict(range(256)) | |
decoding_map.update({ | |
0x0080: 0x00c7, # LATIN CAPITAL LETTER C WITH CEDILLA | |
0x0081: 0x00fc, # LATIN SMALL LETTER U WITH DIAERESIS | |
0x0082: 0x00e9, # LATIN SMALL LETTER E WITH ACUTE | |
0x0083: 0x00e2, # LATIN SMALL LETTER A WITH CIRCUMFLEX | |
0x0084: 0x00e4, # LATIN SMALL LETTER A WITH DIAERESIS | |
0x0085: 0x00e0, # LATIN SMALL LETTER A WITH GRAVE | |
0x0086: 0x00e5, # LATIN SMALL LETTER A WITH RING ABOVE | |
0x0087: 0x00e7, # LATIN SMALL LETTER C WITH CEDILLA | |
0x0088: 0x00ea, # LATIN SMALL LETTER E WITH CIRCUMFLEX | |
0x0089: 0x00eb, # LATIN SMALL LETTER E WITH DIAERESIS | |
0x008a: 0x00e8, # LATIN SMALL LETTER E WITH GRAVE | |
0x008b: 0x00ef, # LATIN SMALL LETTER I WITH DIAERESIS | |
0x008c: 0x00ee, # LATIN SMALL LETTER I WITH CIRCUMFLEX | |
0x008d: 0x0131, # LATIN SMALL LETTER DOTLESS I | |
0x008e: 0x00c4, # LATIN CAPITAL LETTER A WITH DIAERESIS | |
0x008f: 0x00c5, # LATIN CAPITAL LETTER A WITH RING ABOVE | |
0x0090: 0x00c9, # LATIN CAPITAL LETTER E WITH ACUTE | |
0x0091: 0x00e6, # LATIN SMALL LIGATURE AE | |
0x0092: 0x00c6, # LATIN CAPITAL LIGATURE AE | |
0x0093: 0x00f4, # LATIN SMALL LETTER O WITH CIRCUMFLEX | |
0x0094: 0x00f6, # LATIN SMALL LETTER O WITH DIAERESIS | |
0x0095: 0x00f2, # LATIN SMALL LETTER O WITH GRAVE | |
0x0096: 0x00fb, # LATIN SMALL LETTER U WITH CIRCUMFLEX | |
0x0097: 0x00f9, # LATIN SMALL LETTER U WITH GRAVE | |
0x0098: 0x0130, # LATIN CAPITAL LETTER I WITH DOT ABOVE | |
0x0099: 0x00d6, # LATIN CAPITAL LETTER O WITH DIAERESIS | |
0x009a: 0x00dc, # LATIN CAPITAL LETTER U WITH DIAERESIS | |
0x009b: 0x00f8, # LATIN SMALL LETTER O WITH STROKE | |
0x009c: 0x00a3, # POUND SIGN | |
0x009d: 0x00d8, # LATIN CAPITAL LETTER O WITH STROKE | |
0x009e: 0x015e, # LATIN CAPITAL LETTER S WITH CEDILLA | |
0x009f: 0x015f, # LATIN SMALL LETTER S WITH CEDILLA | |
0x00a0: 0x00e1, # LATIN SMALL LETTER A WITH ACUTE | |
0x00a1: 0x00ed, # LATIN SMALL LETTER I WITH ACUTE | |
0x00a2: 0x00f3, # LATIN SMALL LETTER O WITH ACUTE | |
0x00a3: 0x00fa, # LATIN SMALL LETTER U WITH ACUTE | |
0x00a4: 0x00f1, # LATIN SMALL LETTER N WITH TILDE | |
0x00a5: 0x00d1, # LATIN CAPITAL LETTER N WITH TILDE | |
0x00a6: 0x011e, # LATIN CAPITAL LETTER G WITH BREVE | |
0x00a7: 0x011f, # LATIN SMALL LETTER G WITH BREVE | |
0x00a8: 0x00bf, # INVERTED QUESTION MARK | |
0x00a9: 0x00ae, # REGISTERED SIGN | |
0x00aa: 0x00ac, # NOT SIGN | |
0x00ab: 0x00bd, # VULGAR FRACTION ONE HALF | |
0x00ac: 0x00bc, # VULGAR FRACTION ONE QUARTER | |
0x00ad: 0x00a1, # INVERTED EXCLAMATION MARK | |
0x00ae: 0x00ab, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK | |
0x00af: 0x00bb, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK | |
0x00b0: 0x2591, # LIGHT SHADE | |
0x00b1: 0x2592, # MEDIUM SHADE | |
0x00b2: 0x2593, # DARK SHADE | |
0x00b3: 0x2502, # BOX DRAWINGS LIGHT VERTICAL | |
0x00b4: 0x2524, # BOX DRAWINGS LIGHT VERTICAL AND LEFT | |
0x00b5: 0x00c1, # LATIN CAPITAL LETTER A WITH ACUTE | |
0x00b6: 0x00c2, # LATIN CAPITAL LETTER A WITH CIRCUMFLEX | |
0x00b7: 0x00c0, # LATIN CAPITAL LETTER A WITH GRAVE | |
0x00b8: 0x00a9, # COPYRIGHT SIGN | |
0x00b9: 0x2563, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT | |
0x00ba: 0x2551, # BOX DRAWINGS DOUBLE VERTICAL | |
0x00bb: 0x2557, # BOX DRAWINGS DOUBLE DOWN AND LEFT | |
0x00bc: 0x255d, # BOX DRAWINGS DOUBLE UP AND LEFT | |
0x00bd: 0x00a2, # CENT SIGN | |
0x00be: 0x00a5, # YEN SIGN | |
0x00bf: 0x2510, # BOX DRAWINGS LIGHT DOWN AND LEFT | |
0x00c0: 0x2514, # BOX DRAWINGS LIGHT UP AND RIGHT | |
0x00c1: 0x2534, # BOX DRAWINGS LIGHT UP AND HORIZONTAL | |
0x00c2: 0x252c, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL | |
0x00c3: 0x251c, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT | |
0x00c4: 0x2500, # BOX DRAWINGS LIGHT HORIZONTAL | |
0x00c5: 0x253c, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL | |
0x00c6: 0x00e3, # LATIN SMALL LETTER A WITH TILDE | |
0x00c7: 0x00c3, # LATIN CAPITAL LETTER A WITH TILDE | |
0x00c8: 0x255a, # BOX DRAWINGS DOUBLE UP AND RIGHT | |
0x00c9: 0x2554, # BOX DRAWINGS DOUBLE DOWN AND RIGHT | |
0x00ca: 0x2569, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL | |
0x00cb: 0x2566, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL | |
0x00cc: 0x2560, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT | |
0x00cd: 0x2550, # BOX DRAWINGS DOUBLE HORIZONTAL | |
0x00ce: 0x256c, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL | |
0x00cf: 0x00a4, # CURRENCY SIGN | |
0x00d0: 0x00ba, # MASCULINE ORDINAL INDICATOR | |
0x00d1: 0x00aa, # FEMININE ORDINAL INDICATOR | |
0x00d2: 0x00ca, # LATIN CAPITAL LETTER E WITH CIRCUMFLEX | |
0x00d3: 0x00cb, # LATIN CAPITAL LETTER E WITH DIAERESIS | |
0x00d4: 0x00c8, # LATIN CAPITAL LETTER E WITH GRAVE | |
0x00d5: None, # UNDEFINED | |
0x00d6: 0x00cd, # LATIN CAPITAL LETTER I WITH ACUTE | |
0x00d7: 0x00ce, # LATIN CAPITAL LETTER I WITH CIRCUMFLEX | |
0x00d8: 0x00cf, # LATIN CAPITAL LETTER I WITH DIAERESIS | |
0x00d9: 0x2518, # BOX DRAWINGS LIGHT UP AND LEFT | |
0x00da: 0x250c, # BOX DRAWINGS LIGHT DOWN AND RIGHT | |
0x00db: 0x2588, # FULL BLOCK | |
0x00dc: 0x2584, # LOWER HALF BLOCK | |
0x00dd: 0x00a6, # BROKEN BAR | |
0x00de: 0x00cc, # LATIN CAPITAL LETTER I WITH GRAVE | |
0x00df: 0x2580, # UPPER HALF BLOCK | |
0x00e0: 0x00d3, # LATIN CAPITAL LETTER O WITH ACUTE | |
0x00e1: 0x00df, # LATIN SMALL LETTER SHARP S | |
0x00e2: 0x00d4, # LATIN CAPITAL LETTER O WITH CIRCUMFLEX | |
0x00e3: 0x00d2, # LATIN CAPITAL LETTER O WITH GRAVE | |
0x00e4: 0x00f5, # LATIN SMALL LETTER O WITH TILDE | |
0x00e5: 0x00d5, # LATIN CAPITAL LETTER O WITH TILDE | |
0x00e6: 0x00b5, # MICRO SIGN | |
0x00e7: None, # UNDEFINED | |
0x00e8: 0x00d7, # MULTIPLICATION SIGN | |
0x00e9: 0x00da, # LATIN CAPITAL LETTER U WITH ACUTE | |
0x00ea: 0x00db, # LATIN CAPITAL LETTER U WITH CIRCUMFLEX | |
0x00eb: 0x00d9, # LATIN CAPITAL LETTER U WITH GRAVE | |
0x00ed: 0x00ff, # LATIN SMALL LETTER Y WITH DIAERESIS | |
0x00ee: 0x00af, # MACRON | |
0x00ef: 0x00b4, # ACUTE ACCENT | |
0x00f0: 0x00ad, # SOFT HYPHEN | |
0x00f1: 0x00b1, # PLUS-MINUS SIGN | |
0x00f2: None, # UNDEFINED | |
0x00f3: 0x00be, # VULGAR FRACTION THREE QUARTERS | |
0x00f4: 0x00b6, # PILCROW SIGN | |
0x00f5: 0x00a7, # SECTION SIGN | |
0x00f6: 0x00f7, # DIVISION SIGN | |
0x00f7: 0x00b8, # CEDILLA | |
0x00f8: 0x00b0, # DEGREE SIGN | |
0x00f9: 0x00a8, # DIAERESIS | |
0x00fa: 0x00b7, # MIDDLE DOT | |
0x00fb: 0x00b9, # SUPERSCRIPT ONE | |
0x00fc: 0x00b3, # SUPERSCRIPT THREE | |
0x00fd: 0x00b2, # SUPERSCRIPT TWO | |
0x00fe: 0x25a0, # BLACK SQUARE | |
0x00ff: 0x00a0, # NO-BREAK SPACE | |
}) | |
### Decoding Table | |
decoding_table = ( | |
'\x00' # 0x0000 -> NULL | |
'\x01' # 0x0001 -> START OF HEADING | |
'\x02' # 0x0002 -> START OF TEXT | |
'\x03' # 0x0003 -> END OF TEXT | |
'\x04' # 0x0004 -> END OF TRANSMISSION | |
'\x05' # 0x0005 -> ENQUIRY | |
'\x06' # 0x0006 -> ACKNOWLEDGE | |
'\x07' # 0x0007 -> BELL | |
'\x08' # 0x0008 -> BACKSPACE | |
'\t' # 0x0009 -> HORIZONTAL TABULATION | |
'\n' # 0x000a -> LINE FEED | |
'\x0b' # 0x000b -> VERTICAL TABULATION | |
'\x0c' # 0x000c -> FORM FEED | |
'\r' # 0x000d -> CARRIAGE RETURN | |
'\x0e' # 0x000e -> SHIFT OUT | |
'\x0f' # 0x000f -> SHIFT IN | |
'\x10' # 0x0010 -> DATA LINK ESCAPE | |
'\x11' # 0x0011 -> DEVICE CONTROL ONE | |
'\x12' # 0x0012 -> DEVICE CONTROL TWO | |
'\x13' # 0x0013 -> DEVICE CONTROL THREE | |
'\x14' # 0x0014 -> DEVICE CONTROL FOUR | |
'\x15' # 0x0015 -> NEGATIVE ACKNOWLEDGE | |
'\x16' # 0x0016 -> SYNCHRONOUS IDLE | |
'\x17' # 0x0017 -> END OF TRANSMISSION BLOCK | |
'\x18' # 0x0018 -> CANCEL | |
'\x19' # 0x0019 -> END OF MEDIUM | |
'\x1a' # 0x001a -> SUBSTITUTE | |
'\x1b' # 0x001b -> ESCAPE | |
'\x1c' # 0x001c -> FILE SEPARATOR | |
'\x1d' # 0x001d -> GROUP SEPARATOR | |
'\x1e' # 0x001e -> RECORD SEPARATOR | |
'\x1f' # 0x001f -> UNIT SEPARATOR | |
' ' # 0x0020 -> SPACE | |
'!' # 0x0021 -> EXCLAMATION MARK | |
'"' # 0x0022 -> QUOTATION MARK | |
'#' # 0x0023 -> NUMBER SIGN | |
'$' # 0x0024 -> DOLLAR SIGN | |
'%' # 0x0025 -> PERCENT SIGN | |
'&' # 0x0026 -> AMPERSAND | |
"'" # 0x0027 -> APOSTROPHE | |
'(' # 0x0028 -> LEFT PARENTHESIS | |
')' # 0x0029 -> RIGHT PARENTHESIS | |
'*' # 0x002a -> ASTERISK | |
'+' # 0x002b -> PLUS SIGN | |
',' # 0x002c -> COMMA | |
'-' # 0x002d -> HYPHEN-MINUS | |
'.' # 0x002e -> FULL STOP | |
'/' # 0x002f -> SOLIDUS | |
'0' # 0x0030 -> DIGIT ZERO | |
'1' # 0x0031 -> DIGIT ONE | |
'2' # 0x0032 -> DIGIT TWO | |
'3' # 0x0033 -> DIGIT THREE | |
'4' # 0x0034 -> DIGIT FOUR | |
'5' # 0x0035 -> DIGIT FIVE | |
'6' # 0x0036 -> DIGIT SIX | |
'7' # 0x0037 -> DIGIT SEVEN | |
'8' # 0x0038 -> DIGIT EIGHT | |
'9' # 0x0039 -> DIGIT NINE | |
':' # 0x003a -> COLON | |
';' # 0x003b -> SEMICOLON | |
'<' # 0x003c -> LESS-THAN SIGN | |
'=' # 0x003d -> EQUALS SIGN | |
'>' # 0x003e -> GREATER-THAN SIGN | |
'?' # 0x003f -> QUESTION MARK | |
'@' # 0x0040 -> COMMERCIAL AT | |
'A' # 0x0041 -> LATIN CAPITAL LETTER A | |
'B' # 0x0042 -> LATIN CAPITAL LETTER B | |
'C' # 0x0043 -> LATIN CAPITAL LETTER C | |
'D' # 0x0044 -> LATIN CAPITAL LETTER D | |
'E' # 0x0045 -> LATIN CAPITAL LETTER E | |
'F' # 0x0046 -> LATIN CAPITAL LETTER F | |
'G' # 0x0047 -> LATIN CAPITAL LETTER G | |
'H' # 0x0048 -> LATIN CAPITAL LETTER H | |
'I' # 0x0049 -> LATIN CAPITAL LETTER I | |
'J' # 0x004a -> LATIN CAPITAL LETTER J | |
'K' # 0x004b -> LATIN CAPITAL LETTER K | |
'L' # 0x004c -> LATIN CAPITAL LETTER L | |
'M' # 0x004d -> LATIN CAPITAL LETTER M | |
'N' # 0x004e -> LATIN CAPITAL LETTER N | |
'O' # 0x004f -> LATIN CAPITAL LETTER O | |
'P' # 0x0050 -> LATIN CAPITAL LETTER P | |
'Q' # 0x0051 -> LATIN CAPITAL LETTER Q | |
'R' # 0x0052 -> LATIN CAPITAL LETTER R | |
'S' # 0x0053 -> LATIN CAPITAL LETTER S | |
'T' # 0x0054 -> LATIN CAPITAL LETTER T | |
'U' # 0x0055 -> LATIN CAPITAL LETTER U | |
'V' # 0x0056 -> LATIN CAPITAL LETTER V | |
'W' # 0x0057 -> LATIN CAPITAL LETTER W | |
'X' # 0x0058 -> LATIN CAPITAL LETTER X | |
'Y' # 0x0059 -> LATIN CAPITAL LETTER Y | |
'Z' # 0x005a -> LATIN CAPITAL LETTER Z | |
'[' # 0x005b -> LEFT SQUARE BRACKET | |
'\\' # 0x005c -> REVERSE SOLIDUS | |
']' # 0x005d -> RIGHT SQUARE BRACKET | |
'^' # 0x005e -> CIRCUMFLEX ACCENT | |
'_' # 0x005f -> LOW LINE | |
'`' # 0x0060 -> GRAVE ACCENT | |
'a' # 0x0061 -> LATIN SMALL LETTER A | |
'b' # 0x0062 -> LATIN SMALL LETTER B | |
'c' # 0x0063 -> LATIN SMALL LETTER C | |
'd' # 0x0064 -> LATIN SMALL LETTER D | |
'e' # 0x0065 -> LATIN SMALL LETTER E | |
'f' # 0x0066 -> LATIN SMALL LETTER F | |
'g' # 0x0067 -> LATIN SMALL LETTER G | |
'h' # 0x0068 -> LATIN SMALL LETTER H | |
'i' # 0x0069 -> LATIN SMALL LETTER I | |
'j' # 0x006a -> LATIN SMALL LETTER J | |
'k' # 0x006b -> LATIN SMALL LETTER K | |
'l' # 0x006c -> LATIN SMALL LETTER L | |
'm' # 0x006d -> LATIN SMALL LETTER M | |
'n' # 0x006e -> LATIN SMALL LETTER N | |
'o' # 0x006f -> LATIN SMALL LETTER O | |
'p' # 0x0070 -> LATIN SMALL LETTER P | |
'q' # 0x0071 -> LATIN SMALL LETTER Q | |
'r' # 0x0072 -> LATIN SMALL LETTER R | |
's' # 0x0073 -> LATIN SMALL LETTER S | |
't' # 0x0074 -> LATIN SMALL LETTER T | |
'u' # 0x0075 -> LATIN SMALL LETTER U | |
'v' # 0x0076 -> LATIN SMALL LETTER V | |
'w' # 0x0077 -> LATIN SMALL LETTER W | |
'x' # 0x0078 -> LATIN SMALL LETTER X | |
'y' # 0x0079 -> LATIN SMALL LETTER Y | |
'z' # 0x007a -> LATIN SMALL LETTER Z | |
'{' # 0x007b -> LEFT CURLY BRACKET | |
'|' # 0x007c -> VERTICAL LINE | |
'}' # 0x007d -> RIGHT CURLY BRACKET | |
'~' # 0x007e -> TILDE | |
'\x7f' # 0x007f -> DELETE | |
'\xc7' # 0x0080 -> LATIN CAPITAL LETTER C WITH CEDILLA | |
'\xfc' # 0x0081 -> LATIN SMALL LETTER U WITH DIAERESIS | |
'\xe9' # 0x0082 -> LATIN SMALL LETTER E WITH ACUTE | |
'\xe2' # 0x0083 -> LATIN SMALL LETTER A WITH CIRCUMFLEX | |
'\xe4' # 0x0084 -> LATIN SMALL LETTER A WITH DIAERESIS | |
'\xe0' # 0x0085 -> LATIN SMALL LETTER A WITH GRAVE | |
'\xe5' # 0x0086 -> LATIN SMALL LETTER A WITH RING ABOVE | |
'\xe7' # 0x0087 -> LATIN SMALL LETTER C WITH CEDILLA | |
'\xea' # 0x0088 -> LATIN SMALL LETTER E WITH CIRCUMFLEX | |
'\xeb' # 0x0089 -> LATIN SMALL LETTER E WITH DIAERESIS | |
'\xe8' # 0x008a -> LATIN SMALL LETTER E WITH GRAVE | |
'\xef' # 0x008b -> LATIN SMALL LETTER I WITH DIAERESIS | |
'\xee' # 0x008c -> LATIN SMALL LETTER I WITH CIRCUMFLEX | |
'\u0131' # 0x008d -> LATIN SMALL LETTER DOTLESS I | |
'\xc4' # 0x008e -> LATIN CAPITAL LETTER A WITH DIAERESIS | |
'\xc5' # 0x008f -> LATIN CAPITAL LETTER A WITH RING ABOVE | |
'\xc9' # 0x0090 -> LATIN CAPITAL LETTER E WITH ACUTE | |
'\xe6' # 0x0091 -> LATIN SMALL LIGATURE AE | |
'\xc6' # 0x0092 -> LATIN CAPITAL LIGATURE AE | |
'\xf4' # 0x0093 -> LATIN SMALL LETTER O WITH CIRCUMFLEX | |
'\xf6' # 0x0094 -> LATIN SMALL LETTER O WITH DIAERESIS | |
'\xf2' # 0x0095 -> LATIN SMALL LETTER O WITH GRAVE | |
'\xfb' # 0x0096 -> LATIN SMALL LETTER U WITH CIRCUMFLEX | |
'\xf9' # 0x0097 -> LATIN SMALL LETTER U WITH GRAVE | |
'\u0130' # 0x0098 -> LATIN CAPITAL LETTER I WITH DOT ABOVE | |
'\xd6' # 0x0099 -> LATIN CAPITAL LETTER O WITH DIAERESIS | |
'\xdc' # 0x009a -> LATIN CAPITAL LETTER U WITH DIAERESIS | |
'\xf8' # 0x009b -> LATIN SMALL LETTER O WITH STROKE | |
'\xa3' # 0x009c -> POUND SIGN | |
'\xd8' # 0x009d -> LATIN CAPITAL LETTER O WITH STROKE | |
'\u015e' # 0x009e -> LATIN CAPITAL LETTER S WITH CEDILLA | |
'\u015f' # 0x009f -> LATIN SMALL LETTER S WITH CEDILLA | |
'\xe1' # 0x00a0 -> LATIN SMALL LETTER A WITH ACUTE | |
'\xed' # 0x00a1 -> LATIN SMALL LETTER I WITH ACUTE | |
'\xf3' # 0x00a2 -> LATIN SMALL LETTER O WITH ACUTE | |
'\xfa' # 0x00a3 -> LATIN SMALL LETTER U WITH ACUTE | |
'\xf1' # 0x00a4 -> LATIN SMALL LETTER N WITH TILDE | |
'\xd1' # 0x00a5 -> LATIN CAPITAL LETTER N WITH TILDE | |
'\u011e' # 0x00a6 -> LATIN CAPITAL LETTER G WITH BREVE | |
'\u011f' # 0x00a7 -> LATIN SMALL LETTER G WITH BREVE | |
'\xbf' # 0x00a8 -> INVERTED QUESTION MARK | |
'\xae' # 0x00a9 -> REGISTERED SIGN | |
'\xac' # 0x00aa -> NOT SIGN | |
'\xbd' # 0x00ab -> VULGAR FRACTION ONE HALF | |
'\xbc' # 0x00ac -> VULGAR FRACTION ONE QUARTER | |
'\xa1' # 0x00ad -> INVERTED EXCLAMATION MARK | |
'\xab' # 0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK | |
'\xbb' # 0x00af -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK | |
'\u2591' # 0x00b0 -> LIGHT SHADE | |
'\u2592' # 0x00b1 -> MEDIUM SHADE | |
'\u2593' # 0x00b2 -> DARK SHADE | |
'\u2502' # 0x00b3 -> BOX DRAWINGS LIGHT VERTICAL | |
'\u2524' # 0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT | |
'\xc1' # 0x00b5 -> LATIN CAPITAL LETTER A WITH ACUTE | |
'\xc2' # 0x00b6 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX | |
'\xc0' # 0x00b7 -> LATIN CAPITAL LETTER A WITH GRAVE | |
'\xa9' # 0x00b8 -> COPYRIGHT SIGN | |
'\u2563' # 0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT | |
'\u2551' # 0x00ba -> BOX DRAWINGS DOUBLE VERTICAL | |
'\u2557' # 0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT | |
'\u255d' # 0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT | |
'\xa2' # 0x00bd -> CENT SIGN | |
'\xa5' # 0x00be -> YEN SIGN | |
'\u2510' # 0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT | |
'\u2514' # 0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT | |
'\u2534' # 0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL | |
'\u252c' # 0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL | |
'\u251c' # 0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT | |
'\u2500' # 0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL | |
'\u253c' # 0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL | |
'\xe3' # 0x00c6 -> LATIN SMALL LETTER A WITH TILDE | |
'\xc3' # 0x00c7 -> LATIN CAPITAL LETTER A WITH TILDE | |
'\u255a' # 0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT | |
'\u2554' # 0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT | |
'\u2569' # 0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL | |
'\u2566' # 0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL | |
'\u2560' # 0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT | |
'\u2550' # 0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL | |
'\u256c' # 0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL | |
'\xa4' # 0x00cf -> CURRENCY SIGN | |
'\xba' # 0x00d0 -> MASCULINE ORDINAL INDICATOR | |
'\xaa' # 0x00d1 -> FEMININE ORDINAL INDICATOR | |
'\xca' # 0x00d2 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX | |
'\xcb' # 0x00d3 -> LATIN CAPITAL LETTER E WITH DIAERESIS | |
'\xc8' # 0x00d4 -> LATIN CAPITAL LETTER E WITH GRAVE | |
'\ufffe' # 0x00d5 -> UNDEFINED | |
'\xcd' # 0x00d6 -> LATIN CAPITAL LETTER I WITH ACUTE | |
'\xce' # 0x00d7 -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX | |
'\xcf' # 0x00d8 -> LATIN CAPITAL LETTER I WITH DIAERESIS | |
'\u2518' # 0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT | |
'\u250c' # 0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT | |
'\u2588' # 0x00db -> FULL BLOCK | |
'\u2584' # 0x00dc -> LOWER HALF BLOCK | |
'\xa6' # 0x00dd -> BROKEN BAR | |
'\xcc' # 0x00de -> LATIN CAPITAL LETTER I WITH GRAVE | |
'\u2580' # 0x00df -> UPPER HALF BLOCK | |
'\xd3' # 0x00e0 -> LATIN CAPITAL LETTER O WITH ACUTE | |
'\xdf' # 0x00e1 -> LATIN SMALL LETTER SHARP S | |
'\xd4' # 0x00e2 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX | |
'\xd2' # 0x00e3 -> LATIN CAPITAL LETTER O WITH GRAVE | |
'\xf5' # 0x00e4 -> LATIN SMALL LETTER O WITH TILDE | |
'\xd5' # 0x00e5 -> LATIN CAPITAL LETTER O WITH TILDE | |
'\xb5' # 0x00e6 -> MICRO SIGN | |
'\ufffe' # 0x00e7 -> UNDEFINED | |
'\xd7' # 0x00e8 -> MULTIPLICATION SIGN | |
'\xda' # 0x00e9 -> LATIN CAPITAL LETTER U WITH ACUTE | |
'\xdb' # 0x00ea -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX | |
'\xd9' # 0x00eb -> LATIN CAPITAL LETTER U WITH GRAVE | |
'\xec' # 0x00ec -> LATIN SMALL LETTER I WITH GRAVE | |
'\xff' # 0x00ed -> LATIN SMALL LETTER Y WITH DIAERESIS | |
'\xaf' # 0x00ee -> MACRON | |
'\xb4' # 0x00ef -> ACUTE ACCENT | |
'\xad' # 0x00f0 -> SOFT HYPHEN | |
'\xb1' # 0x00f1 -> PLUS-MINUS SIGN | |
'\ufffe' # 0x00f2 -> UNDEFINED | |
'\xbe' # 0x00f3 -> VULGAR FRACTION THREE QUARTERS | |
'\xb6' # 0x00f4 -> PILCROW SIGN | |
'\xa7' # 0x00f5 -> SECTION SIGN | |
'\xf7' # 0x00f6 -> DIVISION SIGN | |
'\xb8' # 0x00f7 -> CEDILLA | |
'\xb0' # 0x00f8 -> DEGREE SIGN | |
'\xa8' # 0x00f9 -> DIAERESIS | |
'\xb7' # 0x00fa -> MIDDLE DOT | |
'\xb9' # 0x00fb -> SUPERSCRIPT ONE | |
'\xb3' # 0x00fc -> SUPERSCRIPT THREE | |
'\xb2' # 0x00fd -> SUPERSCRIPT TWO | |
'\u25a0' # 0x00fe -> BLACK SQUARE | |
'\xa0' # 0x00ff -> NO-BREAK SPACE | |
) | |
### Encoding Map | |
encoding_map = { | |
0x0000: 0x0000, # NULL | |
0x0001: 0x0001, # START OF HEADING | |
0x0002: 0x0002, # START OF TEXT | |
0x0003: 0x0003, # END OF TEXT | |
0x0004: 0x0004, # END OF TRANSMISSION | |
0x0005: 0x0005, # ENQUIRY | |
0x0006: 0x0006, # ACKNOWLEDGE | |
0x0007: 0x0007, # BELL | |
0x0008: 0x0008, # BACKSPACE | |
0x0009: 0x0009, # HORIZONTAL TABULATION | |
0x000a: 0x000a, # LINE FEED | |
0x000b: 0x000b, # VERTICAL TABULATION | |
0x000c: 0x000c, # FORM FEED | |
0x000d: 0x000d, # CARRIAGE RETURN | |
0x000e: 0x000e, # SHIFT OUT | |
0x000f: 0x000f, # SHIFT IN | |
0x0010: 0x0010, # DATA LINK ESCAPE | |
0x0011: 0x0011, # DEVICE CONTROL ONE | |
0x0012: 0x0012, # DEVICE CONTROL TWO | |
0x0013: 0x0013, # DEVICE CONTROL THREE | |
0x0014: 0x0014, # DEVICE CONTROL FOUR | |
0x0015: 0x0015, # NEGATIVE ACKNOWLEDGE | |
0x0016: 0x0016, # SYNCHRONOUS IDLE | |
0x0017: 0x0017, # END OF TRANSMISSION BLOCK | |
0x0018: 0x0018, # CANCEL | |
0x0019: 0x0019, # END OF MEDIUM | |
0x001a: 0x001a, # SUBSTITUTE | |
0x001b: 0x001b, # ESCAPE | |
0x001c: 0x001c, # FILE SEPARATOR | |
0x001d: 0x001d, # GROUP SEPARATOR | |
0x001e: 0x001e, # RECORD SEPARATOR | |
0x001f: 0x001f, # UNIT SEPARATOR | |
0x0020: 0x0020, # SPACE | |
0x0021: 0x0021, # EXCLAMATION MARK | |
0x0022: 0x0022, # QUOTATION MARK | |
0x0023: 0x0023, # NUMBER SIGN | |
0x0024: 0x0024, # DOLLAR SIGN | |
0x0025: 0x0025, # PERCENT SIGN | |
0x0026: 0x0026, # AMPERSAND | |
0x0027: 0x0027, # APOSTROPHE | |
0x0028: 0x0028, # LEFT PARENTHESIS | |
0x0029: 0x0029, # RIGHT PARENTHESIS | |
0x002a: 0x002a, # ASTERISK | |
0x002b: 0x002b, # PLUS SIGN | |
0x002c: 0x002c, # COMMA | |
0x002d: 0x002d, # HYPHEN-MINUS | |
0x002e: 0x002e, # FULL STOP | |
0x002f: 0x002f, # SOLIDUS | |
0x0030: 0x0030, # DIGIT ZERO | |
0x0031: 0x0031, # DIGIT ONE | |
0x0032: 0x0032, # DIGIT TWO | |
0x0033: 0x0033, # DIGIT THREE | |
0x0034: 0x0034, # DIGIT FOUR | |
0x0035: 0x0035, # DIGIT FIVE | |
0x0036: 0x0036, # DIGIT SIX | |
0x0037: 0x0037, # DIGIT SEVEN | |
0x0038: 0x0038, # DIGIT EIGHT | |
0x0039: 0x0039, # DIGIT NINE | |
0x003a: 0x003a, # COLON | |
0x003b: 0x003b, # SEMICOLON | |
0x003c: 0x003c, # LESS-THAN SIGN | |
0x003d: 0x003d, # EQUALS SIGN | |
0x003e: 0x003e, # GREATER-THAN SIGN | |
0x003f: 0x003f, # QUESTION MARK | |
0x0040: 0x0040, # COMMERCIAL AT | |
0x0041: 0x0041, # LATIN CAPITAL LETTER A | |
0x0042: 0x0042, # LATIN CAPITAL LETTER B | |
0x0043: 0x0043, # LATIN CAPITAL LETTER C | |
0x0044: 0x0044, # LATIN CAPITAL LETTER D | |
0x0045: 0x0045, # LATIN CAPITAL LETTER E | |
0x0046: 0x0046, # LATIN CAPITAL LETTER F | |
0x0047: 0x0047, # LATIN CAPITAL LETTER G | |
0x0048: 0x0048, # LATIN CAPITAL LETTER H | |
0x0049: 0x0049, # LATIN CAPITAL LETTER I | |
0x004a: 0x004a, # LATIN CAPITAL LETTER J | |
0x004b: 0x004b, # LATIN CAPITAL LETTER K | |
0x004c: 0x004c, # LATIN CAPITAL LETTER L | |
0x004d: 0x004d, # LATIN CAPITAL LETTER M | |
0x004e: 0x004e, # LATIN CAPITAL LETTER N | |
0x004f: 0x004f, # LATIN CAPITAL LETTER O | |
0x0050: 0x0050, # LATIN CAPITAL LETTER P | |
0x0051: 0x0051, # LATIN CAPITAL LETTER Q | |
0x0052: 0x0052, # LATIN CAPITAL LETTER R | |
0x0053: 0x0053, # LATIN CAPITAL LETTER S | |
0x0054: 0x0054, # LATIN CAPITAL LETTER T | |
0x0055: 0x0055, # LATIN CAPITAL LETTER U | |
0x0056: 0x0056, # LATIN CAPITAL LETTER V | |
0x0057: 0x0057, # LATIN CAPITAL LETTER W | |
0x0058: 0x0058, # LATIN CAPITAL LETTER X | |
0x0059: 0x0059, # LATIN CAPITAL LETTER Y | |
0x005a: 0x005a, # LATIN CAPITAL LETTER Z | |
0x005b: 0x005b, # LEFT SQUARE BRACKET | |
0x005c: 0x005c, # REVERSE SOLIDUS | |
0x005d: 0x005d, # RIGHT SQUARE BRACKET | |
0x005e: 0x005e, # CIRCUMFLEX ACCENT | |
0x005f: 0x005f, # LOW LINE | |
0x0060: 0x0060, # GRAVE ACCENT | |
0x0061: 0x0061, # LATIN SMALL LETTER A | |
0x0062: 0x0062, # LATIN SMALL LETTER B | |
0x0063: 0x0063, # LATIN SMALL LETTER C | |
0x0064: 0x0064, # LATIN SMALL LETTER D | |
0x0065: 0x0065, # LATIN SMALL LETTER E | |
0x0066: 0x0066, # LATIN SMALL LETTER F | |
0x0067: 0x0067, # LATIN SMALL LETTER G | |
0x0068: 0x0068, # LATIN SMALL LETTER H | |
0x0069: 0x0069, # LATIN SMALL LETTER I | |
0x006a: 0x006a, # LATIN SMALL LETTER J | |
0x006b: 0x006b, # LATIN SMALL LETTER K | |
0x006c: 0x006c, # LATIN SMALL LETTER L | |
0x006d: 0x006d, # LATIN SMALL LETTER M | |
0x006e: 0x006e, # LATIN SMALL LETTER N | |
0x006f: 0x006f, # LATIN SMALL LETTER O | |
0x0070: 0x0070, # LATIN SMALL LETTER P | |
0x0071: 0x0071, # LATIN SMALL LETTER Q | |
0x0072: 0x0072, # LATIN SMALL LETTER R | |
0x0073: 0x0073, # LATIN SMALL LETTER S | |
0x0074: 0x0074, # LATIN SMALL LETTER T | |
0x0075: 0x0075, # LATIN SMALL LETTER U | |
0x0076: 0x0076, # LATIN SMALL LETTER V | |
0x0077: 0x0077, # LATIN SMALL LETTER W | |
0x0078: 0x0078, # LATIN SMALL LETTER X | |
0x0079: 0x0079, # LATIN SMALL LETTER Y | |
0x007a: 0x007a, # LATIN SMALL LETTER Z | |
0x007b: 0x007b, # LEFT CURLY BRACKET | |
0x007c: 0x007c, # VERTICAL LINE | |
0x007d: 0x007d, # RIGHT CURLY BRACKET | |
0x007e: 0x007e, # TILDE | |
0x007f: 0x007f, # DELETE | |
0x00a0: 0x00ff, # NO-BREAK SPACE | |
0x00a1: 0x00ad, # INVERTED EXCLAMATION MARK | |
0x00a2: 0x00bd, # CENT SIGN | |
0x00a3: 0x009c, # POUND SIGN | |
0x00a4: 0x00cf, # CURRENCY SIGN | |
0x00a5: 0x00be, # YEN SIGN | |
0x00a6: 0x00dd, # BROKEN BAR | |
0x00a7: 0x00f5, # SECTION SIGN | |
0x00a8: 0x00f9, # DIAERESIS | |
0x00a9: 0x00b8, # COPYRIGHT SIGN | |
0x00aa: 0x00d1, # FEMININE ORDINAL INDICATOR | |
0x00ab: 0x00ae, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK | |
0x00ac: 0x00aa, # NOT SIGN | |
0x00ad: 0x00f0, # SOFT HYPHEN | |
0x00ae: 0x00a9, # REGISTERED SIGN | |
0x00af: 0x00ee, # MACRON | |
0x00b0: 0x00f8, # DEGREE SIGN | |
0x00b1: 0x00f1, # PLUS-MINUS SIGN | |
0x00b2: 0x00fd, # SUPERSCRIPT TWO | |
0x00b3: 0x00fc, # SUPERSCRIPT THREE | |
0x00b4: 0x00ef, # ACUTE ACCENT | |
0x00b5: 0x00e6, # MICRO SIGN | |
0x00b6: 0x00f4, # PILCROW SIGN | |
0x00b7: 0x00fa, # MIDDLE DOT | |
0x00b8: 0x00f7, # CEDILLA | |
0x00b9: 0x00fb, # SUPERSCRIPT ONE | |
0x00ba: 0x00d0, # MASCULINE ORDINAL INDICATOR | |
0x00bb: 0x00af, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK | |
0x00bc: 0x00ac, # VULGAR FRACTION ONE QUARTER | |
0x00bd: 0x00ab, # VULGAR FRACTION ONE HALF | |
0x00be: 0x00f3, # VULGAR FRACTION THREE QUARTERS | |
0x00bf: 0x00a8, # INVERTED QUESTION MARK | |
0x00c0: 0x00b7, # LATIN CAPITAL LETTER A WITH GRAVE | |
0x00c1: 0x00b5, # LATIN CAPITAL LETTER A WITH ACUTE | |
0x00c2: 0x00b6, # LATIN CAPITAL LETTER A WITH CIRCUMFLEX | |
0x00c3: 0x00c7, # LATIN CAPITAL LETTER A WITH TILDE | |
0x00c4: 0x008e, # LATIN CAPITAL LETTER A WITH DIAERESIS | |
0x00c5: 0x008f, # LATIN CAPITAL LETTER A WITH RING ABOVE | |
0x00c6: 0x0092, # LATIN CAPITAL LIGATURE AE | |
0x00c7: 0x0080, # LATIN CAPITAL LETTER C WITH CEDILLA | |
0x00c8: 0x00d4, # LATIN CAPITAL LETTER E WITH GRAVE | |
0x00c9: 0x0090, # LATIN CAPITAL LETTER E WITH ACUTE | |
0x00ca: 0x00d2, # LATIN CAPITAL LETTER E WITH CIRCUMFLEX | |
0x00cb: 0x00d3, # LATIN CAPITAL LETTER E WITH DIAERESIS | |
0x00cc: 0x00de, # LATIN CAPITAL LETTER I WITH GRAVE | |
0x00cd: 0x00d6, # LATIN CAPITAL LETTER I WITH ACUTE | |
0x00ce: 0x00d7, # LATIN CAPITAL LETTER I WITH CIRCUMFLEX | |
0x00cf: 0x00d8, # LATIN CAPITAL LETTER I WITH DIAERESIS | |
0x00d1: 0x00a5, # LATIN CAPITAL LETTER N WITH TILDE | |
0x00d2: 0x00e3, # LATIN CAPITAL LETTER O WITH GRAVE | |
0x00d3: 0x00e0, # LATIN CAPITAL LETTER O WITH ACUTE | |
0x00d4: 0x00e2, # LATIN CAPITAL LETTER O WITH CIRCUMFLEX | |
0x00d5: 0x00e5, # LATIN CAPITAL LETTER O WITH TILDE | |
0x00d6: 0x0099, # LATIN CAPITAL LETTER O WITH DIAERESIS | |
0x00d7: 0x00e8, # MULTIPLICATION SIGN | |
0x00d8: 0x009d, # LATIN CAPITAL LETTER O WITH STROKE | |
0x00d9: 0x00eb, # LATIN CAPITAL LETTER U WITH GRAVE | |
0x00da: 0x00e9, # LATIN CAPITAL LETTER U WITH ACUTE | |
0x00db: 0x00ea, # LATIN CAPITAL LETTER U WITH CIRCUMFLEX | |
0x00dc: 0x009a, # LATIN CAPITAL LETTER U WITH DIAERESIS | |
0x00df: 0x00e1, # LATIN SMALL LETTER SHARP S | |
0x00e0: 0x0085, # LATIN SMALL LETTER A WITH GRAVE | |
0x00e1: 0x00a0, # LATIN SMALL LETTER A WITH ACUTE | |
0x00e2: 0x0083, # LATIN SMALL LETTER A WITH CIRCUMFLEX | |
0x00e3: 0x00c6, # LATIN SMALL LETTER A WITH TILDE | |
0x00e4: 0x0084, # LATIN SMALL LETTER A WITH DIAERESIS | |
0x00e5: 0x0086, # LATIN SMALL LETTER A WITH RING ABOVE | |
0x00e6: 0x0091, # LATIN SMALL LIGATURE AE | |
0x00e7: 0x0087, # LATIN SMALL LETTER C WITH CEDILLA | |
0x00e8: 0x008a, # LATIN SMALL LETTER E WITH GRAVE | |
0x00e9: 0x0082, # LATIN SMALL LETTER E WITH ACUTE | |
0x00ea: 0x0088, # LATIN SMALL LETTER E WITH CIRCUMFLEX | |
0x00eb: 0x0089, # LATIN SMALL LETTER E WITH DIAERESIS | |
0x00ec: 0x00ec, # LATIN SMALL LETTER I WITH GRAVE | |
0x00ed: 0x00a1, # LATIN SMALL LETTER I WITH ACUTE | |
0x00ee: 0x008c, # LATIN SMALL LETTER I WITH CIRCUMFLEX | |
0x00ef: 0x008b, # LATIN SMALL LETTER I WITH DIAERESIS | |
0x00f1: 0x00a4, # LATIN SMALL LETTER N WITH TILDE | |
0x00f2: 0x0095, # LATIN SMALL LETTER O WITH GRAVE | |
0x00f3: 0x00a2, # LATIN SMALL LETTER O WITH ACUTE | |
0x00f4: 0x0093, # LATIN SMALL LETTER O WITH CIRCUMFLEX | |
0x00f5: 0x00e4, # LATIN SMALL LETTER O WITH TILDE | |
0x00f6: 0x0094, # LATIN SMALL LETTER O WITH DIAERESIS | |
0x00f7: 0x00f6, # DIVISION SIGN | |
0x00f8: 0x009b, # LATIN SMALL LETTER O WITH STROKE | |
0x00f9: 0x0097, # LATIN SMALL LETTER U WITH GRAVE | |
0x00fa: 0x00a3, # LATIN SMALL LETTER U WITH ACUTE | |
0x00fb: 0x0096, # LATIN SMALL LETTER U WITH CIRCUMFLEX | |
0x00fc: 0x0081, # LATIN SMALL LETTER U WITH DIAERESIS | |
0x00ff: 0x00ed, # LATIN SMALL LETTER Y WITH DIAERESIS | |
0x011e: 0x00a6, # LATIN CAPITAL LETTER G WITH BREVE | |
0x011f: 0x00a7, # LATIN SMALL LETTER G WITH BREVE | |
0x0130: 0x0098, # LATIN CAPITAL LETTER I WITH DOT ABOVE | |
0x0131: 0x008d, # LATIN SMALL LETTER DOTLESS I | |
0x015e: 0x009e, # LATIN CAPITAL LETTER S WITH CEDILLA | |
0x015f: 0x009f, # LATIN SMALL LETTER S WITH CEDILLA | |
0x2500: 0x00c4, # BOX DRAWINGS LIGHT HORIZONTAL | |
0x2502: 0x00b3, # BOX DRAWINGS LIGHT VERTICAL | |
0x250c: 0x00da, # BOX DRAWINGS LIGHT DOWN AND RIGHT | |
0x2510: 0x00bf, # BOX DRAWINGS LIGHT DOWN AND LEFT | |
0x2514: 0x00c0, # BOX DRAWINGS LIGHT UP AND RIGHT | |
0x2518: 0x00d9, # BOX DRAWINGS LIGHT UP AND LEFT | |
0x251c: 0x00c3, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT | |
0x2524: 0x00b4, # BOX DRAWINGS LIGHT VERTICAL AND LEFT | |
0x252c: 0x00c2, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL | |
0x2534: 0x00c1, # BOX DRAWINGS LIGHT UP AND HORIZONTAL | |
0x253c: 0x00c5, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL | |
0x2550: 0x00cd, # BOX DRAWINGS DOUBLE HORIZONTAL | |
0x2551: 0x00ba, # BOX DRAWINGS DOUBLE VERTICAL | |
0x2554: 0x00c9, # BOX DRAWINGS DOUBLE DOWN AND RIGHT | |
0x2557: 0x00bb, # BOX DRAWINGS DOUBLE DOWN AND LEFT | |
0x255a: 0x00c8, # BOX DRAWINGS DOUBLE UP AND RIGHT | |
0x255d: 0x00bc, # BOX DRAWINGS DOUBLE UP AND LEFT | |
0x2560: 0x00cc, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT | |
0x2563: 0x00b9, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT | |
0x2566: 0x00cb, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL | |
0x2569: 0x00ca, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL | |
0x256c: 0x00ce, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL | |
0x2580: 0x00df, # UPPER HALF BLOCK | |
0x2584: 0x00dc, # LOWER HALF BLOCK | |
0x2588: 0x00db, # FULL BLOCK | |
0x2591: 0x00b0, # LIGHT SHADE | |
0x2592: 0x00b1, # MEDIUM SHADE | |
0x2593: 0x00b2, # DARK SHADE | |
0x25a0: 0x00fe, # BLACK SQUARE | |
} |
""" Python Character Mapping Codec for CP858, modified from cp850. | |
""" | |
import codecs | |
### Codec APIs | |
class Codec(codecs.Codec): | |
def encode(self,input,errors='strict'): | |
return codecs.charmap_encode(input,errors,encoding_map) | |
def decode(self,input,errors='strict'): | |
return codecs.charmap_decode(input,errors,decoding_table) | |
class IncrementalEncoder(codecs.IncrementalEncoder): | |
def encode(self, input, final=False): | |
return codecs.charmap_encode(input,self.errors,encoding_map)[0] | |
class IncrementalDecoder(codecs.IncrementalDecoder): | |
def decode(self, input, final=False): | |
return codecs.charmap_decode(input,self.errors,decoding_table)[0] | |
class StreamWriter(Codec,codecs.StreamWriter): | |
pass | |
class StreamReader(Codec,codecs.StreamReader): | |
pass | |
### encodings module API | |
def getregentry(): | |
return codecs.CodecInfo( | |
name='cp858', | |
encode=Codec().encode, | |
decode=Codec().decode, | |
incrementalencoder=IncrementalEncoder, | |
incrementaldecoder=IncrementalDecoder, | |
streamreader=StreamReader, | |
streamwriter=StreamWriter, | |
) | |
### Decoding Map | |
decoding_map = codecs.make_identity_dict(range(256)) | |
decoding_map.update({ | |
0x0080: 0x00c7, # LATIN CAPITAL LETTER C WITH CEDILLA | |
0x0081: 0x00fc, # LATIN SMALL LETTER U WITH DIAERESIS | |
0x0082: 0x00e9, # LATIN SMALL LETTER E WITH ACUTE | |
0x0083: 0x00e2, # LATIN SMALL LETTER A WITH CIRCUMFLEX | |
0x0084: 0x00e4, # LATIN SMALL LETTER A WITH DIAERESIS | |
0x0085: 0x00e0, # LATIN SMALL LETTER A WITH GRAVE | |
0x0086: 0x00e5, # LATIN SMALL LETTER A WITH RING ABOVE | |
0x0087: 0x00e7, # LATIN SMALL LETTER C WITH CEDILLA | |
0x0088: 0x00ea, # LATIN SMALL LETTER E WITH CIRCUMFLEX | |
0x0089: 0x00eb, # LATIN SMALL LETTER E WITH DIAERESIS | |
0x008a: 0x00e8, # LATIN SMALL LETTER E WITH GRAVE | |
0x008b: 0x00ef, # LATIN SMALL LETTER I WITH DIAERESIS | |
0x008c: 0x00ee, # LATIN SMALL LETTER I WITH CIRCUMFLEX | |
0x008d: 0x00ec, # LATIN SMALL LETTER I WITH GRAVE | |
0x008e: 0x00c4, # LATIN CAPITAL LETTER A WITH DIAERESIS | |
0x008f: 0x00c5, # LATIN CAPITAL LETTER A WITH RING ABOVE | |
0x0090: 0x00c9, # LATIN CAPITAL LETTER E WITH ACUTE | |
0x0091: 0x00e6, # LATIN SMALL LIGATURE AE | |
0x0092: 0x00c6, # LATIN CAPITAL LIGATURE AE | |
0x0093: 0x00f4, # LATIN SMALL LETTER O WITH CIRCUMFLEX | |
0x0094: 0x00f6, # LATIN SMALL LETTER O WITH DIAERESIS | |
0x0095: 0x00f2, # LATIN SMALL LETTER O WITH GRAVE | |
0x0096: 0x00fb, # LATIN SMALL LETTER U WITH CIRCUMFLEX | |
0x0097: 0x00f9, # LATIN SMALL LETTER U WITH GRAVE | |
0x0098: 0x00ff, # LATIN SMALL LETTER Y WITH DIAERESIS | |
0x0099: 0x00d6, # LATIN CAPITAL LETTER O WITH DIAERESIS | |
0x009a: 0x00dc, # LATIN CAPITAL LETTER U WITH DIAERESIS | |
0x009b: 0x00f8, # LATIN SMALL LETTER O WITH STROKE | |
0x009c: 0x00a3, # POUND SIGN | |
0x009d: 0x00d8, # LATIN CAPITAL LETTER O WITH STROKE | |
0x009e: 0x00d7, # MULTIPLICATION SIGN | |
0x009f: 0x0192, # LATIN SMALL LETTER F WITH HOOK | |
0x00a0: 0x00e1, # LATIN SMALL LETTER A WITH ACUTE | |
0x00a1: 0x00ed, # LATIN SMALL LETTER I WITH ACUTE | |
0x00a2: 0x00f3, # LATIN SMALL LETTER O WITH ACUTE | |
0x00a3: 0x00fa, # LATIN SMALL LETTER U WITH ACUTE | |
0x00a4: 0x00f1, # LATIN SMALL LETTER N WITH TILDE | |
0x00a5: 0x00d1, # LATIN CAPITAL LETTER N WITH TILDE | |
0x00a6: 0x00aa, # FEMININE ORDINAL INDICATOR | |
0x00a7: 0x00ba, # MASCULINE ORDINAL INDICATOR | |
0x00a8: 0x00bf, # INVERTED QUESTION MARK | |
0x00a9: 0x00ae, # REGISTERED SIGN | |
0x00aa: 0x00ac, # NOT SIGN | |
0x00ab: 0x00bd, # VULGAR FRACTION ONE HALF | |
0x00ac: 0x00bc, # VULGAR FRACTION ONE QUARTER | |
0x00ad: 0x00a1, # INVERTED EXCLAMATION MARK | |
0x00ae: 0x00ab, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK | |
0x00af: 0x00bb, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK | |
0x00b0: 0x2591, # LIGHT SHADE | |
0x00b1: 0x2592, # MEDIUM SHADE | |
0x00b2: 0x2593, # DARK SHADE | |
0x00b3: 0x2502, # BOX DRAWINGS LIGHT VERTICAL | |
0x00b4: 0x2524, # BOX DRAWINGS LIGHT VERTICAL AND LEFT | |
0x00b5: 0x00c1, # LATIN CAPITAL LETTER A WITH ACUTE | |
0x00b6: 0x00c2, # LATIN CAPITAL LETTER A WITH CIRCUMFLEX | |
0x00b7: 0x00c0, # LATIN CAPITAL LETTER A WITH GRAVE | |
0x00b8: 0x00a9, # COPYRIGHT SIGN | |
0x00b9: 0x2563, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT | |
0x00ba: 0x2551, # BOX DRAWINGS DOUBLE VERTICAL | |
0x00bb: 0x2557, # BOX DRAWINGS DOUBLE DOWN AND LEFT | |
0x00bc: 0x255d, # BOX DRAWINGS DOUBLE UP AND LEFT | |
0x00bd: 0x00a2, # CENT SIGN | |
0x00be: 0x00a5, # YEN SIGN | |
0x00bf: 0x2510, # BOX DRAWINGS LIGHT DOWN AND LEFT | |
0x00c0: 0x2514, # BOX DRAWINGS LIGHT UP AND RIGHT | |
0x00c1: 0x2534, # BOX DRAWINGS LIGHT UP AND HORIZONTAL | |
0x00c2: 0x252c, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL | |
0x00c3: 0x251c, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT | |
0x00c4: 0x2500, # BOX DRAWINGS LIGHT HORIZONTAL | |
0x00c5: 0x253c, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL | |
0x00c6: 0x00e3, # LATIN SMALL LETTER A WITH TILDE | |
0x00c7: 0x00c3, # LATIN CAPITAL LETTER A WITH TILDE | |
0x00c8: 0x255a, # BOX DRAWINGS DOUBLE UP AND RIGHT | |
0x00c9: 0x2554, # BOX DRAWINGS DOUBLE DOWN AND RIGHT | |
0x00ca: 0x2569, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL | |
0x00cb: 0x2566, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL | |
0x00cc: 0x2560, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT | |
0x00cd: 0x2550, # BOX DRAWINGS DOUBLE HORIZONTAL | |
0x00ce: 0x256c, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL | |
0x00cf: 0x00a4, # CURRENCY SIGN | |
0x00d0: 0x00f0, # LATIN SMALL LETTER ETH | |
0x00d1: 0x00d0, # LATIN CAPITAL LETTER ETH | |
0x00d2: 0x00ca, # LATIN CAPITAL LETTER E WITH CIRCUMFLEX | |
0x00d3: 0x00cb, # LATIN CAPITAL LETTER E WITH DIAERESIS | |
0x00d4: 0x00c8, # LATIN CAPITAL LETTER E WITH GRAVE | |
0x00d5: 0x20ac, # EURO SIGN | |
0x00d6: 0x00cd, # LATIN CAPITAL LETTER I WITH ACUTE | |
0x00d7: 0x00ce, # LATIN CAPITAL LETTER I WITH CIRCUMFLEX | |
0x00d8: 0x00cf, # LATIN CAPITAL LETTER I WITH DIAERESIS | |
0x00d9: 0x2518, # BOX DRAWINGS LIGHT UP AND LEFT | |
0x00da: 0x250c, # BOX DRAWINGS LIGHT DOWN AND RIGHT | |
0x00db: 0x2588, # FULL BLOCK | |
0x00dc: 0x2584, # LOWER HALF BLOCK | |
0x00dd: 0x00a6, # BROKEN BAR | |
0x00de: 0x00cc, # LATIN CAPITAL LETTER I WITH GRAVE | |
0x00df: 0x2580, # UPPER HALF BLOCK | |
0x00e0: 0x00d3, # LATIN CAPITAL LETTER O WITH ACUTE | |
0x00e1: 0x00df, # LATIN SMALL LETTER SHARP S | |
0x00e2: 0x00d4, # LATIN CAPITAL LETTER O WITH CIRCUMFLEX | |
0x00e3: 0x00d2, # LATIN CAPITAL LETTER O WITH GRAVE | |
0x00e4: 0x00f5, # LATIN SMALL LETTER O WITH TILDE | |
0x00e5: 0x00d5, # LATIN CAPITAL LETTER O WITH TILDE | |
0x00e6: 0x00b5, # MICRO SIGN | |
0x00e7: 0x00fe, # LATIN SMALL LETTER THORN | |
0x00e8: 0x00de, # LATIN CAPITAL LETTER THORN | |
0x00e9: 0x00da, # LATIN CAPITAL LETTER U WITH ACUTE | |
0x00ea: 0x00db, # LATIN CAPITAL LETTER U WITH CIRCUMFLEX | |
0x00eb: 0x00d9, # LATIN CAPITAL LETTER U WITH GRAVE | |
0x00ec: 0x00fd, # LATIN SMALL LETTER Y WITH ACUTE | |
0x00ed: 0x00dd, # LATIN CAPITAL LETTER Y WITH ACUTE | |
0x00ee: 0x00af, # MACRON | |
0x00ef: 0x00b4, # ACUTE ACCENT | |
0x00f0: 0x00ad, # SOFT HYPHEN | |
0x00f1: 0x00b1, # PLUS-MINUS SIGN | |
0x00f2: 0x2017, # DOUBLE LOW LINE | |
0x00f3: 0x00be, # VULGAR FRACTION THREE QUARTERS | |
0x00f4: 0x00b6, # PILCROW SIGN | |
0x00f5: 0x00a7, # SECTION SIGN | |
0x00f6: 0x00f7, # DIVISION SIGN | |
0x00f7: 0x00b8, # CEDILLA | |
0x00f8: 0x00b0, # DEGREE SIGN | |
0x00f9: 0x00a8, # DIAERESIS | |
0x00fa: 0x00b7, # MIDDLE DOT | |
0x00fb: 0x00b9, # SUPERSCRIPT ONE | |
0x00fc: 0x00b3, # SUPERSCRIPT THREE | |
0x00fd: 0x00b2, # SUPERSCRIPT TWO | |
0x00fe: 0x25a0, # BLACK SQUARE | |
0x00ff: 0x00a0, # NO-BREAK SPACE | |
}) | |
### Decoding Table | |
decoding_table = ( | |
'\x00' # 0x0000 -> NULL | |
'\x01' # 0x0001 -> START OF HEADING | |
'\x02' # 0x0002 -> START OF TEXT | |
'\x03' # 0x0003 -> END OF TEXT | |
'\x04' # 0x0004 -> END OF TRANSMISSION | |
'\x05' # 0x0005 -> ENQUIRY | |
'\x06' # 0x0006 -> ACKNOWLEDGE | |
'\x07' # 0x0007 -> BELL | |
'\x08' # 0x0008 -> BACKSPACE | |
'\t' # 0x0009 -> HORIZONTAL TABULATION | |
'\n' # 0x000a -> LINE FEED | |
'\x0b' # 0x000b -> VERTICAL TABULATION | |
'\x0c' # 0x000c -> FORM FEED | |
'\r' # 0x000d -> CARRIAGE RETURN | |
'\x0e' # 0x000e -> SHIFT OUT | |
'\x0f' # 0x000f -> SHIFT IN | |
'\x10' # 0x0010 -> DATA LINK ESCAPE | |
'\x11' # 0x0011 -> DEVICE CONTROL ONE | |
'\x12' # 0x0012 -> DEVICE CONTROL TWO | |
'\x13' # 0x0013 -> DEVICE CONTROL THREE | |
'\x14' # 0x0014 -> DEVICE CONTROL FOUR | |
'\x15' # 0x0015 -> NEGATIVE ACKNOWLEDGE | |
'\x16' # 0x0016 -> SYNCHRONOUS IDLE | |
'\x17' # 0x0017 -> END OF TRANSMISSION BLOCK | |
'\x18' # 0x0018 -> CANCEL | |
'\x19' # 0x0019 -> END OF MEDIUM | |
'\x1a' # 0x001a -> SUBSTITUTE | |
'\x1b' # 0x001b -> ESCAPE | |
'\x1c' # 0x001c -> FILE SEPARATOR | |
'\x1d' # 0x001d -> GROUP SEPARATOR | |
'\x1e' # 0x001e -> RECORD SEPARATOR | |
'\x1f' # 0x001f -> UNIT SEPARATOR | |
' ' # 0x0020 -> SPACE | |
'!' # 0x0021 -> EXCLAMATION MARK | |
'"' # 0x0022 -> QUOTATION MARK | |
'#' # 0x0023 -> NUMBER SIGN | |
'$' # 0x0024 -> DOLLAR SIGN | |
'%' # 0x0025 -> PERCENT SIGN | |
'&' # 0x0026 -> AMPERSAND | |
"'" # 0x0027 -> APOSTROPHE | |
'(' # 0x0028 -> LEFT PARENTHESIS | |
')' # 0x0029 -> RIGHT PARENTHESIS | |
'*' # 0x002a -> ASTERISK | |
'+' # 0x002b -> PLUS SIGN | |
',' # 0x002c -> COMMA | |
'-' # 0x002d -> HYPHEN-MINUS | |
'.' # 0x002e -> FULL STOP | |
'/' # 0x002f -> SOLIDUS | |
'0' # 0x0030 -> DIGIT ZERO | |
'1' # 0x0031 -> DIGIT ONE | |
'2' # 0x0032 -> DIGIT TWO | |
'3' # 0x0033 -> DIGIT THREE | |
'4' # 0x0034 -> DIGIT FOUR | |
'5' # 0x0035 -> DIGIT FIVE | |
'6' # 0x0036 -> DIGIT SIX | |
'7' # 0x0037 -> DIGIT SEVEN | |
'8' # 0x0038 -> DIGIT EIGHT | |
'9' # 0x0039 -> DIGIT NINE | |
':' # 0x003a -> COLON | |
';' # 0x003b -> SEMICOLON | |
'<' # 0x003c -> LESS-THAN SIGN | |
'=' # 0x003d -> EQUALS SIGN | |
'>' # 0x003e -> GREATER-THAN SIGN | |
'?' # 0x003f -> QUESTION MARK | |
'@' # 0x0040 -> COMMERCIAL AT | |
'A' # 0x0041 -> LATIN CAPITAL LETTER A | |
'B' # 0x0042 -> LATIN CAPITAL LETTER B | |
'C' # 0x0043 -> LATIN CAPITAL LETTER C | |
'D' # 0x0044 -> LATIN CAPITAL LETTER D | |
'E' # 0x0045 -> LATIN CAPITAL LETTER E | |
'F' # 0x0046 -> LATIN CAPITAL LETTER F | |
'G' # 0x0047 -> LATIN CAPITAL LETTER G | |
'H' # 0x0048 -> LATIN CAPITAL LETTER H | |
'I' # 0x0049 -> LATIN CAPITAL LETTER I | |
'J' # 0x004a -> LATIN CAPITAL LETTER J | |
'K' # 0x004b -> LATIN CAPITAL LETTER K | |
'L' # 0x004c -> LATIN CAPITAL LETTER L | |
'M' # 0x004d -> LATIN CAPITAL LETTER M | |
'N' # 0x004e -> LATIN CAPITAL LETTER N | |
'O' # 0x004f -> LATIN CAPITAL LETTER O | |
'P' # 0x0050 -> LATIN CAPITAL LETTER P | |
'Q' # 0x0051 -> LATIN CAPITAL LETTER Q | |
'R' # 0x0052 -> LATIN CAPITAL LETTER R | |
'S' # 0x0053 -> LATIN CAPITAL LETTER S | |
'T' # 0x0054 -> LATIN CAPITAL LETTER T | |
'U' # 0x0055 -> LATIN CAPITAL LETTER U | |
'V' # 0x0056 -> LATIN CAPITAL LETTER V | |
'W' # 0x0057 -> LATIN CAPITAL LETTER W | |
'X' # 0x0058 -> LATIN CAPITAL LETTER X | |
'Y' # 0x0059 -> LATIN CAPITAL LETTER Y | |
'Z' # 0x005a -> LATIN CAPITAL LETTER Z | |
'[' # 0x005b -> LEFT SQUARE BRACKET | |
'\\' # 0x005c -> REVERSE SOLIDUS | |
']' # 0x005d -> RIGHT SQUARE BRACKET | |
'^' # 0x005e -> CIRCUMFLEX ACCENT | |
'_' # 0x005f -> LOW LINE | |
'`' # 0x0060 -> GRAVE ACCENT | |
'a' # 0x0061 -> LATIN SMALL LETTER A | |
'b' # 0x0062 -> LATIN SMALL LETTER B | |
'c' # 0x0063 -> LATIN SMALL LETTER C | |
'd' # 0x0064 -> LATIN SMALL LETTER D | |
'e' # 0x0065 -> LATIN SMALL LETTER E | |
'f' # 0x0066 -> LATIN SMALL LETTER F | |
'g' # 0x0067 -> LATIN SMALL LETTER G | |
'h' # 0x0068 -> LATIN SMALL LETTER H | |
'i' # 0x0069 -> LATIN SMALL LETTER I | |
'j' # 0x006a -> LATIN SMALL LETTER J | |
'k' # 0x006b -> LATIN SMALL LETTER K | |
'l' # 0x006c -> LATIN SMALL LETTER L | |
'm' # 0x006d -> LATIN SMALL LETTER M | |
'n' # 0x006e -> LATIN SMALL LETTER N | |
'o' # 0x006f -> LATIN SMALL LETTER O | |
'p' # 0x0070 -> LATIN SMALL LETTER P | |
'q' # 0x0071 -> LATIN SMALL LETTER Q | |
'r' # 0x0072 -> LATIN SMALL LETTER R | |
's' # 0x0073 -> LATIN SMALL LETTER S | |
't' # 0x0074 -> LATIN SMALL LETTER T | |
'u' # 0x0075 -> LATIN SMALL LETTER U | |
'v' # 0x0076 -> LATIN SMALL LETTER V | |
'w' # 0x0077 -> LATIN SMALL LETTER W | |
'x' # 0x0078 -> LATIN SMALL LETTER X | |
'y' # 0x0079 -> LATIN SMALL LETTER Y | |
'z' # 0x007a -> LATIN SMALL LETTER Z | |
'{' # 0x007b -> LEFT CURLY BRACKET | |
'|' # 0x007c -> VERTICAL LINE | |
'}' # 0x007d -> RIGHT CURLY BRACKET | |
'~' # 0x007e -> TILDE | |
'\x7f' # 0x007f -> DELETE | |
'\xc7' # 0x0080 -> LATIN CAPITAL LETTER C WITH CEDILLA | |
'\xfc' # 0x0081 -> LATIN SMALL LETTER U WITH DIAERESIS | |
'\xe9' # 0x0082 -> LATIN SMALL LETTER E WITH ACUTE | |
'\xe2' # 0x0083 -> LATIN SMALL LETTER A WITH CIRCUMFLEX | |
'\xe4' # 0x0084 -> LATIN SMALL LETTER A WITH DIAERESIS | |
'\xe0' # 0x0085 -> LATIN SMALL LETTER A WITH GRAVE | |
'\xe5' # 0x0086 -> LATIN SMALL LETTER A WITH RING ABOVE | |
'\xe7' # 0x0087 -> LATIN SMALL LETTER C WITH CEDILLA | |
'\xea' # 0x0088 -> LATIN SMALL LETTER E WITH CIRCUMFLEX | |
'\xeb' # 0x0089 -> LATIN SMALL LETTER E WITH DIAERESIS | |
'\xe8' # 0x008a -> LATIN SMALL LETTER E WITH GRAVE | |
'\xef' # 0x008b -> LATIN SMALL LETTER I WITH DIAERESIS | |
'\xee' # 0x008c -> LATIN SMALL LETTER I WITH CIRCUMFLEX | |
'\xec' # 0x008d -> LATIN SMALL LETTER I WITH GRAVE | |
'\xc4' # 0x008e -> LATIN CAPITAL LETTER A WITH DIAERESIS | |
'\xc5' # 0x008f -> LATIN CAPITAL LETTER A WITH RING ABOVE | |
'\xc9' # 0x0090 -> LATIN CAPITAL LETTER E WITH ACUTE | |
'\xe6' # 0x0091 -> LATIN SMALL LIGATURE AE | |
'\xc6' # 0x0092 -> LATIN CAPITAL LIGATURE AE | |
'\xf4' # 0x0093 -> LATIN SMALL LETTER O WITH CIRCUMFLEX | |
'\xf6' # 0x0094 -> LATIN SMALL LETTER O WITH DIAERESIS | |
'\xf2' # 0x0095 -> LATIN SMALL LETTER O WITH GRAVE | |
'\xfb' # 0x0096 -> LATIN SMALL LETTER U WITH CIRCUMFLEX | |
'\xf9' # 0x0097 -> LATIN SMALL LETTER U WITH GRAVE | |
'\xff' # 0x0098 -> LATIN SMALL LETTER Y WITH DIAERESIS | |
'\xd6' # 0x0099 -> LATIN CAPITAL LETTER O WITH DIAERESIS | |
'\xdc' # 0x009a -> LATIN CAPITAL LETTER U WITH DIAERESIS | |
'\xf8' # 0x009b -> LATIN SMALL LETTER O WITH STROKE | |
'\xa3' # 0x009c -> POUND SIGN | |
'\xd8' # 0x009d -> LATIN CAPITAL LETTER O WITH STROKE | |
'\xd7' # 0x009e -> MULTIPLICATION SIGN | |
'\u0192' # 0x009f -> LATIN SMALL LETTER F WITH HOOK | |
'\xe1' # 0x00a0 -> LATIN SMALL LETTER A WITH ACUTE | |
'\xed' # 0x00a1 -> LATIN SMALL LETTER I WITH ACUTE | |
'\xf3' # 0x00a2 -> LATIN SMALL LETTER O WITH ACUTE | |
'\xfa' # 0x00a3 -> LATIN SMALL LETTER U WITH ACUTE | |
'\xf1' # 0x00a4 -> LATIN SMALL LETTER N WITH TILDE | |
'\xd1' # 0x00a5 -> LATIN CAPITAL LETTER N WITH TILDE | |
'\xaa' # 0x00a6 -> FEMININE ORDINAL INDICATOR | |
'\xba' # 0x00a7 -> MASCULINE ORDINAL INDICATOR | |
'\xbf' # 0x00a8 -> INVERTED QUESTION MARK | |
'\xae' # 0x00a9 -> REGISTERED SIGN | |
'\xac' # 0x00aa -> NOT SIGN | |
'\xbd' # 0x00ab -> VULGAR FRACTION ONE HALF | |
'\xbc' # 0x00ac -> VULGAR FRACTION ONE QUARTER | |
'\xa1' # 0x00ad -> INVERTED EXCLAMATION MARK | |
'\xab' # 0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK | |
'\xbb' # 0x00af -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK | |
'\u2591' # 0x00b0 -> LIGHT SHADE | |
'\u2592' # 0x00b1 -> MEDIUM SHADE | |
'\u2593' # 0x00b2 -> DARK SHADE | |
'\u2502' # 0x00b3 -> BOX DRAWINGS LIGHT VERTICAL | |
'\u2524' # 0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT | |
'\xc1' # 0x00b5 -> LATIN CAPITAL LETTER A WITH ACUTE | |
'\xc2' # 0x00b6 -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX | |
'\xc0' # 0x00b7 -> LATIN CAPITAL LETTER A WITH GRAVE | |
'\xa9' # 0x00b8 -> COPYRIGHT SIGN | |
'\u2563' # 0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT | |
'\u2551' # 0x00ba -> BOX DRAWINGS DOUBLE VERTICAL | |
'\u2557' # 0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT | |
'\u255d' # 0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT | |
'\xa2' # 0x00bd -> CENT SIGN | |
'\xa5' # 0x00be -> YEN SIGN | |
'\u2510' # 0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT | |
'\u2514' # 0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT | |
'\u2534' # 0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL | |
'\u252c' # 0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL | |
'\u251c' # 0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT | |
'\u2500' # 0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL | |
'\u253c' # 0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL | |
'\xe3' # 0x00c6 -> LATIN SMALL LETTER A WITH TILDE | |
'\xc3' # 0x00c7 -> LATIN CAPITAL LETTER A WITH TILDE | |
'\u255a' # 0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT | |
'\u2554' # 0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT | |
'\u2569' # 0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL | |
'\u2566' # 0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL | |
'\u2560' # 0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT | |
'\u2550' # 0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL | |
'\u256c' # 0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL | |
'\xa4' # 0x00cf -> CURRENCY SIGN | |
'\xf0' # 0x00d0 -> LATIN SMALL LETTER ETH | |
'\xd0' # 0x00d1 -> LATIN CAPITAL LETTER ETH | |
'\xca' # 0x00d2 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX | |
'\xcb' # 0x00d3 -> LATIN CAPITAL LETTER E WITH DIAERESIS | |
'\xc8' # 0x00d4 -> LATIN CAPITAL LETTER E WITH GRAVE | |
'\u20ac' # 0x00d5 -> EURO SIGN | |
'\xcd' # 0x00d6 -> LATIN CAPITAL LETTER I WITH ACUTE | |
'\xce' # 0x00d7 -> LATIN CAPITAL LETTER I WITH CIRCUMFLEX | |
'\xcf' # 0x00d8 -> LATIN CAPITAL LETTER I WITH DIAERESIS | |
'\u2518' # 0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT | |
'\u250c' # 0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT | |
'\u2588' # 0x00db -> FULL BLOCK | |
'\u2584' # 0x00dc -> LOWER HALF BLOCK | |
'\xa6' # 0x00dd -> BROKEN BAR | |
'\xcc' # 0x00de -> LATIN CAPITAL LETTER I WITH GRAVE | |
'\u2580' # 0x00df -> UPPER HALF BLOCK | |
'\xd3' # 0x00e0 -> LATIN CAPITAL LETTER O WITH ACUTE | |
'\xdf' # 0x00e1 -> LATIN SMALL LETTER SHARP S | |
'\xd4' # 0x00e2 -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX | |
'\xd2' # 0x00e3 -> LATIN CAPITAL LETTER O WITH GRAVE | |
'\xf5' # 0x00e4 -> LATIN SMALL LETTER O WITH TILDE | |
'\xd5' # 0x00e5 -> LATIN CAPITAL LETTER O WITH TILDE | |
'\xb5' # 0x00e6 -> MICRO SIGN | |
'\xfe' # 0x00e7 -> LATIN SMALL LETTER THORN | |
'\xde' # 0x00e8 -> LATIN CAPITAL LETTER THORN | |
'\xda' # 0x00e9 -> LATIN CAPITAL LETTER U WITH ACUTE | |
'\xdb' # 0x00ea -> LATIN CAPITAL LETTER U WITH CIRCUMFLEX | |
'\xd9' # 0x00eb -> LATIN CAPITAL LETTER U WITH GRAVE | |
'\xfd' # 0x00ec -> LATIN SMALL LETTER Y WITH ACUTE | |
'\xdd' # 0x00ed -> LATIN CAPITAL LETTER Y WITH ACUTE | |
'\xaf' # 0x00ee -> MACRON | |
'\xb4' # 0x00ef -> ACUTE ACCENT | |
'\xad' # 0x00f0 -> SOFT HYPHEN | |
'\xb1' # 0x00f1 -> PLUS-MINUS SIGN | |
'\u2017' # 0x00f2 -> DOUBLE LOW LINE | |
'\xbe' # 0x00f3 -> VULGAR FRACTION THREE QUARTERS | |
'\xb6' # 0x00f4 -> PILCROW SIGN | |
'\xa7' # 0x00f5 -> SECTION SIGN | |
'\xf7' # 0x00f6 -> DIVISION SIGN | |
'\xb8' # 0x00f7 -> CEDILLA | |
'\xb0' # 0x00f8 -> DEGREE SIGN | |
'\xa8' # 0x00f9 -> DIAERESIS | |
'\xb7' # 0x00fa -> MIDDLE DOT | |
'\xb9' # 0x00fb -> SUPERSCRIPT ONE | |
'\xb3' # 0x00fc -> SUPERSCRIPT THREE | |
'\xb2' # 0x00fd -> SUPERSCRIPT TWO | |
'\u25a0' # 0x00fe -> BLACK SQUARE | |
'\xa0' # 0x00ff -> NO-BREAK SPACE | |
) | |
### Encoding Map | |
encoding_map = { | |
0x0000: 0x0000, # NULL | |
0x0001: 0x0001, # START OF HEADING | |
0x0002: 0x0002, # START OF TEXT | |
0x0003: 0x0003, # END OF TEXT | |
0x0004: 0x0004, # END OF TRANSMISSION | |
0x0005: 0x0005, # ENQUIRY | |
0x0006: 0x0006, # ACKNOWLEDGE | |
0x0007: 0x0007, # BELL | |
0x0008: 0x0008, # BACKSPACE | |
0x0009: 0x0009, # HORIZONTAL TABULATION | |
0x000a: 0x000a, # LINE FEED | |
0x000b: 0x000b, # VERTICAL TABULATION | |
0x000c: 0x000c, # FORM FEED | |
0x000d: 0x000d, # CARRIAGE RETURN | |
0x000e: 0x000e, # SHIFT OUT | |
0x000f: 0x000f, # SHIFT IN | |
0x0010: 0x0010, # DATA LINK ESCAPE | |
0x0011: 0x0011, # DEVICE CONTROL ONE | |
0x0012: 0x0012, # DEVICE CONTROL TWO | |
0x0013: 0x0013, # DEVICE CONTROL THREE | |
0x0014: 0x0014, # DEVICE CONTROL FOUR | |
0x0015: 0x0015, # NEGATIVE ACKNOWLEDGE | |
0x0016: 0x0016, # SYNCHRONOUS IDLE | |
0x0017: 0x0017, # END OF TRANSMISSION BLOCK | |
0x0018: 0x0018, # CANCEL | |
0x0019: 0x0019, # END OF MEDIUM | |
0x001a: 0x001a, # SUBSTITUTE | |
0x001b: 0x001b, # ESCAPE | |
0x001c: 0x001c, # FILE SEPARATOR | |
0x001d: 0x001d, # GROUP SEPARATOR | |
0x001e: 0x001e, # RECORD SEPARATOR | |
0x001f: 0x001f, # UNIT SEPARATOR | |
0x0020: 0x0020, # SPACE | |
0x0021: 0x0021, # EXCLAMATION MARK | |
0x0022: 0x0022, # QUOTATION MARK | |
0x0023: 0x0023, # NUMBER SIGN | |
0x0024: 0x0024, # DOLLAR SIGN | |
0x0025: 0x0025, # PERCENT SIGN | |
0x0026: 0x0026, # AMPERSAND | |
0x0027: 0x0027, # APOSTROPHE | |
0x0028: 0x0028, # LEFT PARENTHESIS | |
0x0029: 0x0029, # RIGHT PARENTHESIS | |
0x002a: 0x002a, # ASTERISK | |
0x002b: 0x002b, # PLUS SIGN | |
0x002c: 0x002c, # COMMA | |
0x002d: 0x002d, # HYPHEN-MINUS | |
0x002e: 0x002e, # FULL STOP | |
0x002f: 0x002f, # SOLIDUS | |
0x0030: 0x0030, # DIGIT ZERO | |
0x0031: 0x0031, # DIGIT ONE | |
0x0032: 0x0032, # DIGIT TWO | |
0x0033: 0x0033, # DIGIT THREE | |
0x0034: 0x0034, # DIGIT FOUR | |
0x0035: 0x0035, # DIGIT FIVE | |
0x0036: 0x0036, # DIGIT SIX | |
0x0037: 0x0037, # DIGIT SEVEN | |
0x0038: 0x0038, # DIGIT EIGHT | |
0x0039: 0x0039, # DIGIT NINE | |
0x003a: 0x003a, # COLON | |
0x003b: 0x003b, # SEMICOLON | |
0x003c: 0x003c, # LESS-THAN SIGN | |
0x003d: 0x003d, # EQUALS SIGN | |
0x003e: 0x003e, # GREATER-THAN SIGN | |
0x003f: 0x003f, # QUESTION MARK | |
0x0040: 0x0040, # COMMERCIAL AT | |
0x0041: 0x0041, # LATIN CAPITAL LETTER A | |
0x0042: 0x0042, # LATIN CAPITAL LETTER B | |
0x0043: 0x0043, # LATIN CAPITAL LETTER C | |
0x0044: 0x0044, # LATIN CAPITAL LETTER D | |
0x0045: 0x0045, # LATIN CAPITAL LETTER E | |
0x0046: 0x0046, # LATIN CAPITAL LETTER F | |
0x0047: 0x0047, # LATIN CAPITAL LETTER G | |
0x0048: 0x0048, # LATIN CAPITAL LETTER H | |
0x0049: 0x0049, # LATIN CAPITAL LETTER I | |
0x004a: 0x004a, # LATIN CAPITAL LETTER J | |
0x004b: 0x004b, # LATIN CAPITAL LETTER K | |
0x004c: 0x004c, # LATIN CAPITAL LETTER L | |
0x004d: 0x004d, # LATIN CAPITAL LETTER M | |
0x004e: 0x004e, # LATIN CAPITAL LETTER N | |
0x004f: 0x004f, # LATIN CAPITAL LETTER O | |
0x0050: 0x0050, # LATIN CAPITAL LETTER P | |
0x0051: 0x0051, # LATIN CAPITAL LETTER Q | |
0x0052: 0x0052, # LATIN CAPITAL LETTER R | |
0x0053: 0x0053, # LATIN CAPITAL LETTER S | |
0x0054: 0x0054, # LATIN CAPITAL LETTER T | |
0x0055: 0x0055, # LATIN CAPITAL LETTER U | |
0x0056: 0x0056, # LATIN CAPITAL LETTER V | |
0x0057: 0x0057, # LATIN CAPITAL LETTER W | |
0x0058: 0x0058, # LATIN CAPITAL LETTER X | |
0x0059: 0x0059, # LATIN CAPITAL LETTER Y | |
0x005a: 0x005a, # LATIN CAPITAL LETTER Z | |
0x005b: 0x005b, # LEFT SQUARE BRACKET | |
0x005c: 0x005c, # REVERSE SOLIDUS | |
0x005d: 0x005d, # RIGHT SQUARE BRACKET | |
0x005e: 0x005e, # CIRCUMFLEX ACCENT | |
0x005f: 0x005f, # LOW LINE | |
0x0060: 0x0060, # GRAVE ACCENT | |
0x0061: 0x0061, # LATIN SMALL LETTER A | |
0x0062: 0x0062, # LATIN SMALL LETTER B | |
0x0063: 0x0063, # LATIN SMALL LETTER C | |
0x0064: 0x0064, # LATIN SMALL LETTER D | |
0x0065: 0x0065, # LATIN SMALL LETTER E | |
0x0066: 0x0066, # LATIN SMALL LETTER F | |
0x0067: 0x0067, # LATIN SMALL LETTER G | |
0x0068: 0x0068, # LATIN SMALL LETTER H | |
0x0069: 0x0069, # LATIN SMALL LETTER I | |
0x006a: 0x006a, # LATIN SMALL LETTER J | |
0x006b: 0x006b, # LATIN SMALL LETTER K | |
0x006c: 0x006c, # LATIN SMALL LETTER L | |
0x006d: 0x006d, # LATIN SMALL LETTER M | |
0x006e: 0x006e, # LATIN SMALL LETTER N | |
0x006f: 0x006f, # LATIN SMALL LETTER O | |
0x0070: 0x0070, # LATIN SMALL LETTER P | |
0x0071: 0x0071, # LATIN SMALL LETTER Q | |
0x0072: 0x0072, # LATIN SMALL LETTER R | |
0x0073: 0x0073, # LATIN SMALL LETTER S | |
0x0074: 0x0074, # LATIN SMALL LETTER T | |
0x0075: 0x0075, # LATIN SMALL LETTER U | |
0x0076: 0x0076, # LATIN SMALL LETTER V | |
0x0077: 0x0077, # LATIN SMALL LETTER W | |
0x0078: 0x0078, # LATIN SMALL LETTER X | |
0x0079: 0x0079, # LATIN SMALL LETTER Y | |
0x007a: 0x007a, # LATIN SMALL LETTER Z | |
0x007b: 0x007b, # LEFT CURLY BRACKET | |
0x007c: 0x007c, # VERTICAL LINE | |
0x007d: 0x007d, # RIGHT CURLY BRACKET | |
0x007e: 0x007e, # TILDE | |
0x007f: 0x007f, # DELETE | |
0x00a0: 0x00ff, # NO-BREAK SPACE | |
0x00a1: 0x00ad, # INVERTED EXCLAMATION MARK | |
0x00a2: 0x00bd, # CENT SIGN | |
0x00a3: 0x009c, # POUND SIGN | |
0x00a4: 0x00cf, # CURRENCY SIGN | |
0x00a5: 0x00be, # YEN SIGN | |
0x00a6: 0x00dd, # BROKEN BAR | |
0x00a7: 0x00f5, # SECTION SIGN | |
0x00a8: 0x00f9, # DIAERESIS | |
0x00a9: 0x00b8, # COPYRIGHT SIGN | |
0x00aa: 0x00a6, # FEMININE ORDINAL INDICATOR | |
0x00ab: 0x00ae, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK | |
0x00ac: 0x00aa, # NOT SIGN | |
0x00ad: 0x00f0, # SOFT HYPHEN | |
0x00ae: 0x00a9, # REGISTERED SIGN | |
0x00af: 0x00ee, # MACRON | |
0x00b0: 0x00f8, # DEGREE SIGN | |
0x00b1: 0x00f1, # PLUS-MINUS SIGN | |
0x00b2: 0x00fd, # SUPERSCRIPT TWO | |
0x00b3: 0x00fc, # SUPERSCRIPT THREE | |
0x00b4: 0x00ef, # ACUTE ACCENT | |
0x00b5: 0x00e6, # MICRO SIGN | |
0x00b6: 0x00f4, # PILCROW SIGN | |
0x00b7: 0x00fa, # MIDDLE DOT | |
0x00b8: 0x00f7, # CEDILLA | |
0x00b9: 0x00fb, # SUPERSCRIPT ONE | |
0x00ba: 0x00a7, # MASCULINE ORDINAL INDICATOR | |
0x00bb: 0x00af, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK | |
0x00bc: 0x00ac, # VULGAR FRACTION ONE QUARTER | |
0x00bd: 0x00ab, # VULGAR FRACTION ONE HALF | |
0x00be: 0x00f3, # VULGAR FRACTION THREE QUARTERS | |
0x00bf: 0x00a8, # INVERTED QUESTION MARK | |
0x00c0: 0x00b7, # LATIN CAPITAL LETTER A WITH GRAVE | |
0x00c1: 0x00b5, # LATIN CAPITAL LETTER A WITH ACUTE | |
0x00c2: 0x00b6, # LATIN CAPITAL LETTER A WITH CIRCUMFLEX | |
0x00c3: 0x00c7, # LATIN CAPITAL LETTER A WITH TILDE | |
0x00c4: 0x008e, # LATIN CAPITAL LETTER A WITH DIAERESIS | |
0x00c5: 0x008f, # LATIN CAPITAL LETTER A WITH RING ABOVE | |
0x00c6: 0x0092, # LATIN CAPITAL LIGATURE AE | |
0x00c7: 0x0080, # LATIN CAPITAL LETTER C WITH CEDILLA | |
0x00c8: 0x00d4, # LATIN CAPITAL LETTER E WITH GRAVE | |
0x00c9: 0x0090, # LATIN CAPITAL LETTER E WITH ACUTE | |
0x00ca: 0x00d2, # LATIN CAPITAL LETTER E WITH CIRCUMFLEX | |
0x00cb: 0x00d3, # LATIN CAPITAL LETTER E WITH DIAERESIS | |
0x00cc: 0x00de, # LATIN CAPITAL LETTER I WITH GRAVE | |
0x00cd: 0x00d6, # LATIN CAPITAL LETTER I WITH ACUTE | |
0x00ce: 0x00d7, # LATIN CAPITAL LETTER I WITH CIRCUMFLEX | |
0x00cf: 0x00d8, # LATIN CAPITAL LETTER I WITH DIAERESIS | |
0x00d0: 0x00d1, # LATIN CAPITAL LETTER ETH | |
0x00d1: 0x00a5, # LATIN CAPITAL LETTER N WITH TILDE | |
0x00d2: 0x00e3, # LATIN CAPITAL LETTER O WITH GRAVE | |
0x00d3: 0x00e0, # LATIN CAPITAL LETTER O WITH ACUTE | |
0x00d4: 0x00e2, # LATIN CAPITAL LETTER O WITH CIRCUMFLEX | |
0x00d5: 0x00e5, # LATIN CAPITAL LETTER O WITH TILDE | |
0x00d6: 0x0099, # LATIN CAPITAL LETTER O WITH DIAERESIS | |
0x00d7: 0x009e, # MULTIPLICATION SIGN | |
0x00d8: 0x009d, # LATIN CAPITAL LETTER O WITH STROKE | |
0x00d9: 0x00eb, # LATIN CAPITAL LETTER U WITH GRAVE | |
0x00da: 0x00e9, # LATIN CAPITAL LETTER U WITH ACUTE | |
0x00db: 0x00ea, # LATIN CAPITAL LETTER U WITH CIRCUMFLEX | |
0x00dc: 0x009a, # LATIN CAPITAL LETTER U WITH DIAERESIS | |
0x00dd: 0x00ed, # LATIN CAPITAL LETTER Y WITH ACUTE | |
0x00de: 0x00e8, # LATIN CAPITAL LETTER THORN | |
0x00df: 0x00e1, # LATIN SMALL LETTER SHARP S | |
0x00e0: 0x0085, # LATIN SMALL LETTER A WITH GRAVE | |
0x00e1: 0x00a0, # LATIN SMALL LETTER A WITH ACUTE | |
0x00e2: 0x0083, # LATIN SMALL LETTER A WITH CIRCUMFLEX | |
0x00e3: 0x00c6, # LATIN SMALL LETTER A WITH TILDE | |
0x00e4: 0x0084, # LATIN SMALL LETTER A WITH DIAERESIS | |
0x00e5: 0x0086, # LATIN SMALL LETTER A WITH RING ABOVE | |
0x00e6: 0x0091, # LATIN SMALL LIGATURE AE | |
0x00e7: 0x0087, # LATIN SMALL LETTER C WITH CEDILLA | |
0x00e8: 0x008a, # LATIN SMALL LETTER E WITH GRAVE | |
0x00e9: 0x0082, # LATIN SMALL LETTER E WITH ACUTE | |
0x00ea: 0x0088, # LATIN SMALL LETTER E WITH CIRCUMFLEX | |
0x00eb: 0x0089, # LATIN SMALL LETTER E WITH DIAERESIS | |
0x00ec: 0x008d, # LATIN SMALL LETTER I WITH GRAVE | |
0x00ed: 0x00a1, # LATIN SMALL LETTER I WITH ACUTE | |
0x00ee: 0x008c, # LATIN SMALL LETTER I WITH CIRCUMFLEX | |
0x00ef: 0x008b, # LATIN SMALL LETTER I WITH DIAERESIS | |
0x00f0: 0x00d0, # LATIN SMALL LETTER ETH | |
0x00f1: 0x00a4, # LATIN SMALL LETTER N WITH TILDE | |
0x00f2: 0x0095, # LATIN SMALL LETTER O WITH GRAVE | |
0x00f3: 0x00a2, # LATIN SMALL LETTER O WITH ACUTE | |
0x00f4: 0x0093, # LATIN SMALL LETTER O WITH CIRCUMFLEX | |
0x00f5: 0x00e4, # LATIN SMALL LETTER O WITH TILDE | |
0x00f6: 0x0094, # LATIN SMALL LETTER O WITH DIAERESIS | |
0x00f7: 0x00f6, # DIVISION SIGN | |
0x00f8: 0x009b, # LATIN SMALL LETTER O WITH STROKE | |
0x00f9: 0x0097, # LATIN SMALL LETTER U WITH GRAVE | |
0x00fa: 0x00a3, # LATIN SMALL LETTER U WITH ACUTE | |
0x00fb: 0x0096, # LATIN SMALL LETTER U WITH CIRCUMFLEX | |
0x00fc: 0x0081, # LATIN SMALL LETTER U WITH DIAERESIS | |
0x00fd: 0x00ec, # LATIN SMALL LETTER Y WITH ACUTE | |
0x00fe: 0x00e7, # LATIN SMALL LETTER THORN | |
0x00ff: 0x0098, # LATIN SMALL LETTER Y WITH DIAERESIS | |
0x20ac: 0x00d5, # EURO SIGN | |
0x0192: 0x009f, # LATIN SMALL LETTER F WITH HOOK | |
0x2017: 0x00f2, # DOUBLE LOW LINE | |
0x2500: 0x00c4, # BOX DRAWINGS LIGHT HORIZONTAL | |
0x2502: 0x00b3, # BOX DRAWINGS LIGHT VERTICAL | |
0x250c: 0x00da, # BOX DRAWINGS LIGHT DOWN AND RIGHT | |
0x2510: 0x00bf, # BOX DRAWINGS LIGHT DOWN AND LEFT | |
0x2514: 0x00c0, # BOX DRAWINGS LIGHT UP AND RIGHT | |
0x2518: 0x00d9, # BOX DRAWINGS LIGHT UP AND LEFT | |
0x251c: 0x00c3, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT | |
0x2524: 0x00b4, # BOX DRAWINGS LIGHT VERTICAL AND LEFT | |
0x252c: 0x00c2, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL | |
0x2534: 0x00c1, # BOX DRAWINGS LIGHT UP AND HORIZONTAL | |
0x253c: 0x00c5, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL | |
0x2550: 0x00cd, # BOX DRAWINGS DOUBLE HORIZONTAL | |
0x2551: 0x00ba, # BOX DRAWINGS DOUBLE VERTICAL | |
0x2554: 0x00c9, # BOX DRAWINGS DOUBLE DOWN AND RIGHT | |
0x2557: 0x00bb, # BOX DRAWINGS DOUBLE DOWN AND LEFT | |
0x255a: 0x00c8, # BOX DRAWINGS DOUBLE UP AND RIGHT | |
0x255d: 0x00bc, # BOX DRAWINGS DOUBLE UP AND LEFT | |
0x2560: 0x00cc, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT | |
0x2563: 0x00b9, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT | |
0x2566: 0x00cb, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL | |
0x2569: 0x00ca, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL | |
0x256c: 0x00ce, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL | |
0x2580: 0x00df, # UPPER HALF BLOCK | |
0x2584: 0x00dc, # LOWER HALF BLOCK | |
0x2588: 0x00db, # FULL BLOCK | |
0x2591: 0x00b0, # LIGHT SHADE | |
0x2592: 0x00b1, # MEDIUM SHADE | |
0x2593: 0x00b2, # DARK SHADE | |
0x25a0: 0x00fe, # BLACK SQUARE | |
} |
""" Python Character Mapping Codec generated from 'VENDORS/MICSFT/PC/CP860.TXT' with gencodec.py. | |
"""#" | |
import codecs | |
### Codec APIs | |
class Codec(codecs.Codec): | |
def encode(self,input,errors='strict'): | |
return codecs.charmap_encode(input,errors,encoding_map) | |
def decode(self,input,errors='strict'): | |
return codecs.charmap_decode(input,errors,decoding_table) | |
class IncrementalEncoder(codecs.IncrementalEncoder): | |
def encode(self, input, final=False): | |
return codecs.charmap_encode(input,self.errors,encoding_map)[0] | |
class IncrementalDecoder(codecs.IncrementalDecoder): | |
def decode(self, input, final=False): | |
return codecs.charmap_decode(input,self.errors,decoding_table)[0] | |
class StreamWriter(Codec,codecs.StreamWriter): | |
pass | |
class StreamReader(Codec,codecs.StreamReader): | |
pass | |
### encodings module API | |
def getregentry(): | |
return codecs.CodecInfo( | |
name='cp860', | |
encode=Codec().encode, | |
decode=Codec().decode, | |
incrementalencoder=IncrementalEncoder, | |
incrementaldecoder=IncrementalDecoder, | |
streamreader=StreamReader, | |
streamwriter=StreamWriter, | |
) | |
### Decoding Map | |
decoding_map = codecs.make_identity_dict(range(256)) | |
decoding_map.update({ | |
0x0080: 0x00c7, # LATIN CAPITAL LETTER C WITH CEDILLA | |
0x0081: 0x00fc, # LATIN SMALL LETTER U WITH DIAERESIS | |
0x0082: 0x00e9, # LATIN SMALL LETTER E WITH ACUTE | |
0x0083: 0x00e2, # LATIN SMALL LETTER A WITH CIRCUMFLEX | |
0x0084: 0x00e3, # LATIN SMALL LETTER A WITH TILDE | |
0x0085: 0x00e0, # LATIN SMALL LETTER A WITH GRAVE | |
0x0086: 0x00c1, # LATIN CAPITAL LETTER A WITH ACUTE | |
0x0087: 0x00e7, # LATIN SMALL LETTER C WITH CEDILLA | |
0x0088: 0x00ea, # LATIN SMALL LETTER E WITH CIRCUMFLEX | |
0x0089: 0x00ca, # LATIN CAPITAL LETTER E WITH CIRCUMFLEX | |
0x008a: 0x00e8, # LATIN SMALL LETTER E WITH GRAVE | |
0x008b: 0x00cd, # LATIN CAPITAL LETTER I WITH ACUTE | |
0x008c: 0x00d4, # LATIN CAPITAL LETTER O WITH CIRCUMFLEX | |
0x008d: 0x00ec, # LATIN SMALL LETTER I WITH GRAVE | |
0x008e: 0x00c3, # LATIN CAPITAL LETTER A WITH TILDE | |
0x008f: 0x00c2, # LATIN CAPITAL LETTER A WITH CIRCUMFLEX | |
0x0090: 0x00c9, # LATIN CAPITAL LETTER E WITH ACUTE | |
0x0091: 0x00c0, # LATIN CAPITAL LETTER A WITH GRAVE | |
0x0092: 0x00c8, # LATIN CAPITAL LETTER E WITH GRAVE | |
0x0093: 0x00f4, # LATIN SMALL LETTER O WITH CIRCUMFLEX | |
0x0094: 0x00f5, # LATIN SMALL LETTER O WITH TILDE | |
0x0095: 0x00f2, # LATIN SMALL LETTER O WITH GRAVE | |
0x0096: 0x00da, # LATIN CAPITAL LETTER U WITH ACUTE | |
0x0097: 0x00f9, # LATIN SMALL LETTER U WITH GRAVE | |
0x0098: 0x00cc, # LATIN CAPITAL LETTER I WITH GRAVE | |
0x0099: 0x00d5, # LATIN CAPITAL LETTER O WITH TILDE | |
0x009a: 0x00dc, # LATIN CAPITAL LETTER U WITH DIAERESIS | |
0x009b: 0x00a2, # CENT SIGN | |
0x009c: 0x00a3, # POUND SIGN | |
0x009d: 0x00d9, # LATIN CAPITAL LETTER U WITH GRAVE | |
0x009e: 0x20a7, # PESETA SIGN | |
0x009f: 0x00d3, # LATIN CAPITAL LETTER O WITH ACUTE | |
0x00a0: 0x00e1, # LATIN SMALL LETTER A WITH ACUTE | |
0x00a1: 0x00ed, # LATIN SMALL LETTER I WITH ACUTE | |
0x00a2: 0x00f3, # LATIN SMALL LETTER O WITH ACUTE | |
0x00a3: 0x00fa, # LATIN SMALL LETTER U WITH ACUTE | |
0x00a4: 0x00f1, # LATIN SMALL LETTER N WITH TILDE | |
0x00a5: 0x00d1, # LATIN CAPITAL LETTER N WITH TILDE | |
0x00a6: 0x00aa, # FEMININE ORDINAL INDICATOR | |
0x00a7: 0x00ba, # MASCULINE ORDINAL INDICATOR | |
0x00a8: 0x00bf, # INVERTED QUESTION MARK | |
0x00a9: 0x00d2, # LATIN CAPITAL LETTER O WITH GRAVE | |
0x00aa: 0x00ac, # NOT SIGN | |
0x00ab: 0x00bd, # VULGAR FRACTION ONE HALF | |
0x00ac: 0x00bc, # VULGAR FRACTION ONE QUARTER | |
0x00ad: 0x00a1, # INVERTED EXCLAMATION MARK | |
0x00ae: 0x00ab, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK | |
0x00af: 0x00bb, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK | |
0x00b0: 0x2591, # LIGHT SHADE | |
0x00b1: 0x2592, # MEDIUM SHADE | |
0x00b2: 0x2593, # DARK SHADE | |
0x00b3: 0x2502, # BOX DRAWINGS LIGHT VERTICAL | |
0x00b4: 0x2524, # BOX DRAWINGS LIGHT VERTICAL AND LEFT | |
0x00b5: 0x2561, # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE | |
0x00b6: 0x2562, # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE | |
0x00b7: 0x2556, # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE | |
0x00b8: 0x2555, # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE | |
0x00b9: 0x2563, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT | |
0x00ba: 0x2551, # BOX DRAWINGS DOUBLE VERTICAL | |
0x00bb: 0x2557, # BOX DRAWINGS DOUBLE DOWN AND LEFT | |
0x00bc: 0x255d, # BOX DRAWINGS DOUBLE UP AND LEFT | |
0x00bd: 0x255c, # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE | |
0x00be: 0x255b, # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE | |
0x00bf: 0x2510, # BOX DRAWINGS LIGHT DOWN AND LEFT | |
0x00c0: 0x2514, # BOX DRAWINGS LIGHT UP AND RIGHT | |
0x00c1: 0x2534, # BOX DRAWINGS LIGHT UP AND HORIZONTAL | |
0x00c2: 0x252c, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL | |
0x00c3: 0x251c, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT | |
0x00c4: 0x2500, # BOX DRAWINGS LIGHT HORIZONTAL | |
0x00c5: 0x253c, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL | |
0x00c6: 0x255e, # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE | |
0x00c7: 0x255f, # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE | |
0x00c8: 0x255a, # BOX DRAWINGS DOUBLE UP AND RIGHT | |
0x00c9: 0x2554, # BOX DRAWINGS DOUBLE DOWN AND RIGHT | |
0x00ca: 0x2569, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL | |
0x00cb: 0x2566, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL | |
0x00cc: 0x2560, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT | |
0x00cd: 0x2550, # BOX DRAWINGS DOUBLE HORIZONTAL | |
0x00ce: 0x256c, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL | |
0x00cf: 0x2567, # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE | |
0x00d0: 0x2568, # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE | |
0x00d1: 0x2564, # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE | |
0x00d2: 0x2565, # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE | |
0x00d3: 0x2559, # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE | |
0x00d4: 0x2558, # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE | |
0x00d5: 0x2552, # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE | |
0x00d6: 0x2553, # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE | |
0x00d7: 0x256b, # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE | |
0x00d8: 0x256a, # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE | |
0x00d9: 0x2518, # BOX DRAWINGS LIGHT UP AND LEFT | |
0x00da: 0x250c, # BOX DRAWINGS LIGHT DOWN AND RIGHT | |
0x00db: 0x2588, # FULL BLOCK | |
0x00dc: 0x2584, # LOWER HALF BLOCK | |
0x00dd: 0x258c, # LEFT HALF BLOCK | |
0x00de: 0x2590, # RIGHT HALF BLOCK | |
0x00df: 0x2580, # UPPER HALF BLOCK | |
0x00e0: 0x03b1, # GREEK SMALL LETTER ALPHA | |
0x00e1: 0x00df, # LATIN SMALL LETTER SHARP S | |
0x00e2: 0x0393, # GREEK CAPITAL LETTER GAMMA | |
0x00e3: 0x03c0, # GREEK SMALL LETTER PI | |
0x00e4: 0x03a3, # GREEK CAPITAL LETTER SIGMA | |
0x00e5: 0x03c3, # GREEK SMALL LETTER SIGMA | |
0x00e6: 0x00b5, # MICRO SIGN | |
0x00e7: 0x03c4, # GREEK SMALL LETTER TAU | |
0x00e8: 0x03a6, # GREEK CAPITAL LETTER PHI | |
0x00e9: 0x0398, # GREEK CAPITAL LETTER THETA | |
0x00ea: 0x03a9, # GREEK CAPITAL LETTER OMEGA | |
0x00eb: 0x03b4, # GREEK SMALL LETTER DELTA | |
0x00ec: 0x221e, # INFINITY | |
0x00ed: 0x03c6, # GREEK SMALL LETTER PHI | |
0x00ee: 0x03b5, # GREEK SMALL LETTER EPSILON | |
0x00ef: 0x2229, # INTERSECTION | |
0x00f0: 0x2261, # IDENTICAL TO | |
0x00f1: 0x00b1, # PLUS-MINUS SIGN | |
0x00f2: 0x2265, # GREATER-THAN OR EQUAL TO | |
0x00f3: 0x2264, # LESS-THAN OR EQUAL TO | |
0x00f4: 0x2320, # TOP HALF INTEGRAL | |
0x00f5: 0x2321, # BOTTOM HALF INTEGRAL | |
0x00f6: 0x00f7, # DIVISION SIGN | |
0x00f7: 0x2248, # ALMOST EQUAL TO | |
0x00f8: 0x00b0, # DEGREE SIGN | |
0x00f9: 0x2219, # BULLET OPERATOR | |
0x00fa: 0x00b7, # MIDDLE DOT | |
0x00fb: 0x221a, # SQUARE ROOT | |
0x00fc: 0x207f, # SUPERSCRIPT LATIN SMALL LETTER N | |
0x00fd: 0x00b2, # SUPERSCRIPT TWO | |
0x00fe: 0x25a0, # BLACK SQUARE | |
0x00ff: 0x00a0, # NO-BREAK SPACE | |
}) | |
### Decoding Table | |
decoding_table = ( | |
'\x00' # 0x0000 -> NULL | |
'\x01' # 0x0001 -> START OF HEADING | |
'\x02' # 0x0002 -> START OF TEXT | |
'\x03' # 0x0003 -> END OF TEXT | |
'\x04' # 0x0004 -> END OF TRANSMISSION | |
'\x05' # 0x0005 -> ENQUIRY | |
'\x06' # 0x0006 -> ACKNOWLEDGE | |
'\x07' # 0x0007 -> BELL | |
'\x08' # 0x0008 -> BACKSPACE | |
'\t' # 0x0009 -> HORIZONTAL TABULATION | |
'\n' # 0x000a -> LINE FEED | |
'\x0b' # 0x000b -> VERTICAL TABULATION | |
'\x0c' # 0x000c -> FORM FEED | |
'\r' # 0x000d -> CARRIAGE RETURN | |
'\x0e' # 0x000e -> SHIFT OUT | |
'\x0f' # 0x000f -> SHIFT IN | |
'\x10' # 0x0010 -> DATA LINK ESCAPE | |
'\x11' # 0x0011 -> DEVICE CONTROL ONE | |
'\x12' # 0x0012 -> DEVICE CONTROL TWO | |
'\x13' # 0x0013 -> DEVICE CONTROL THREE | |
'\x14' # 0x0014 -> DEVICE CONTROL FOUR | |
'\x15' # 0x0015 -> NEGATIVE ACKNOWLEDGE | |
'\x16' # 0x0016 -> SYNCHRONOUS IDLE | |
'\x17' # 0x0017 -> END OF TRANSMISSION BLOCK | |
'\x18' # 0x0018 -> CANCEL | |
'\x19' # 0x0019 -> END OF MEDIUM | |
'\x1a' # 0x001a -> SUBSTITUTE | |
'\x1b' # 0x001b -> ESCAPE | |
'\x1c' # 0x001c -> FILE SEPARATOR | |
'\x1d' # 0x001d -> GROUP SEPARATOR | |
'\x1e' # 0x001e -> RECORD SEPARATOR | |
'\x1f' # 0x001f -> UNIT SEPARATOR | |
' ' # 0x0020 -> SPACE | |
'!' # 0x0021 -> EXCLAMATION MARK | |
'"' # 0x0022 -> QUOTATION MARK | |
'#' # 0x0023 -> NUMBER SIGN | |
'$' # 0x0024 -> DOLLAR SIGN | |
'%' # 0x0025 -> PERCENT SIGN | |
'&' # 0x0026 -> AMPERSAND | |
"'" # 0x0027 -> APOSTROPHE | |
'(' # 0x0028 -> LEFT PARENTHESIS | |
')' # 0x0029 -> RIGHT PARENTHESIS | |
'*' # 0x002a -> ASTERISK | |
'+' # 0x002b -> PLUS SIGN | |
',' # 0x002c -> COMMA | |
'-' # 0x002d -> HYPHEN-MINUS | |
'.' # 0x002e -> FULL STOP | |
'/' # 0x002f -> SOLIDUS | |
'0' # 0x0030 -> DIGIT ZERO | |
'1' # 0x0031 -> DIGIT ONE | |
'2' # 0x0032 -> DIGIT TWO | |
'3' # 0x0033 -> DIGIT THREE | |
'4' # 0x0034 -> DIGIT FOUR | |
'5' # 0x0035 -> DIGIT FIVE | |
'6' # 0x0036 -> DIGIT SIX | |
'7' # 0x0037 -> DIGIT SEVEN | |
'8' # 0x0038 -> DIGIT EIGHT | |
'9' # 0x0039 -> DIGIT NINE | |
':' # 0x003a -> COLON | |
';' # 0x003b -> SEMICOLON | |
'<' # 0x003c -> LESS-THAN SIGN | |
'=' # 0x003d -> EQUALS SIGN | |
'>' # 0x003e -> GREATER-THAN SIGN | |
'?' # 0x003f -> QUESTION MARK | |
'@' # 0x0040 -> COMMERCIAL AT | |
'A' # 0x0041 -> LATIN CAPITAL LETTER A | |
'B' # 0x0042 -> LATIN CAPITAL LETTER B | |
'C' # 0x0043 -> LATIN CAPITAL LETTER C | |
'D' # 0x0044 -> LATIN CAPITAL LETTER D | |
'E' # 0x0045 -> LATIN CAPITAL LETTER E | |
'F' # 0x0046 -> LATIN CAPITAL LETTER F | |
'G' # 0x0047 -> LATIN CAPITAL LETTER G | |
'H' # 0x0048 -> LATIN CAPITAL LETTER H | |
'I' # 0x0049 -> LATIN CAPITAL LETTER I | |
'J' # 0x004a -> LATIN CAPITAL LETTER J | |
'K' # 0x004b -> LATIN CAPITAL LETTER K | |
'L' # 0x004c -> LATIN CAPITAL LETTER L | |
'M' # 0x004d -> LATIN CAPITAL LETTER M | |
'N' # 0x004e -> LATIN CAPITAL LETTER N | |
'O' # 0x004f -> LATIN CAPITAL LETTER O | |
'P' # 0x0050 -> LATIN CAPITAL LETTER P | |
'Q' # 0x0051 -> LATIN CAPITAL LETTER Q | |
'R' # 0x0052 -> LATIN CAPITAL LETTER R | |
'S' # 0x0053 -> LATIN CAPITAL LETTER S | |
'T' # 0x0054 -> LATIN CAPITAL LETTER T | |
'U' # 0x0055 -> LATIN CAPITAL LETTER U | |
'V' # 0x0056 -> LATIN CAPITAL LETTER V | |
'W' # 0x0057 -> LATIN CAPITAL LETTER W | |
'X' # 0x0058 -> LATIN CAPITAL LETTER X | |
'Y' # 0x0059 -> LATIN CAPITAL LETTER Y | |
'Z' # 0x005a -> LATIN CAPITAL LETTER Z | |
'[' # 0x005b -> LEFT SQUARE BRACKET | |
'\\' # 0x005c -> REVERSE SOLIDUS | |
']' # 0x005d -> RIGHT SQUARE BRACKET | |
'^' # 0x005e -> CIRCUMFLEX ACCENT | |
'_' # 0x005f -> LOW LINE | |
'`' # 0x0060 -> GRAVE ACCENT | |
'a' # 0x0061 -> LATIN SMALL LETTER A | |
'b' # 0x0062 -> LATIN SMALL LETTER B | |
'c' # 0x0063 -> LATIN SMALL LETTER C | |
'd' # 0x0064 -> LATIN SMALL LETTER D | |
'e' # 0x0065 -> LATIN SMALL LETTER E | |
'f' # 0x0066 -> LATIN SMALL LETTER F | |
'g' # 0x0067 -> LATIN SMALL LETTER G | |
'h' # 0x0068 -> LATIN SMALL LETTER H | |
'i' # 0x0069 -> LATIN SMALL LETTER I | |
'j' # 0x006a -> LATIN SMALL LETTER J | |
'k' # 0x006b -> LATIN SMALL LETTER K | |
'l' # 0x006c -> LATIN SMALL LETTER L | |
'm' # 0x006d -> LATIN SMALL LETTER M | |
'n' # 0x006e -> LATIN SMALL LETTER N | |
'o' # 0x006f -> LATIN SMALL LETTER O | |
'p' # 0x0070 -> LATIN SMALL LETTER P | |
'q' # 0x0071 -> LATIN SMALL LETTER Q | |
'r' # 0x0072 -> LATIN SMALL LETTER R | |
's' # 0x0073 -> LATIN SMALL LETTER S | |
't' # 0x0074 -> LATIN SMALL LETTER T | |
'u' # 0x0075 -> LATIN SMALL LETTER U | |
'v' # 0x0076 -> LATIN SMALL LETTER V | |
'w' # 0x0077 -> LATIN SMALL LETTER W | |
'x' # 0x0078 -> LATIN SMALL LETTER X | |
'y' # 0x0079 -> LATIN SMALL LETTER Y | |
'z' # 0x007a -> LATIN SMALL LETTER Z | |
'{' # 0x007b -> LEFT CURLY BRACKET | |
'|' # 0x007c -> VERTICAL LINE | |
'}' # 0x007d -> RIGHT CURLY BRACKET | |
'~' # 0x007e -> TILDE | |
'\x7f' # 0x007f -> DELETE | |
'\xc7' # 0x0080 -> LATIN CAPITAL LETTER C WITH CEDILLA | |
'\xfc' # 0x0081 -> LATIN SMALL LETTER U WITH DIAERESIS | |
'\xe9' # 0x0082 -> LATIN SMALL LETTER E WITH ACUTE | |
'\xe2' # 0x0083 -> LATIN SMALL LETTER A WITH CIRCUMFLEX | |
'\xe3' # 0x0084 -> LATIN SMALL LETTER A WITH TILDE | |
'\xe0' # 0x0085 -> LATIN SMALL LETTER A WITH GRAVE | |
'\xc1' # 0x0086 -> LATIN CAPITAL LETTER A WITH ACUTE | |
'\xe7' # 0x0087 -> LATIN SMALL LETTER C WITH CEDILLA | |
'\xea' # 0x0088 -> LATIN SMALL LETTER E WITH CIRCUMFLEX | |
'\xca' # 0x0089 -> LATIN CAPITAL LETTER E WITH CIRCUMFLEX | |
'\xe8' # 0x008a -> LATIN SMALL LETTER E WITH GRAVE | |
'\xcd' # 0x008b -> LATIN CAPITAL LETTER I WITH ACUTE | |
'\xd4' # 0x008c -> LATIN CAPITAL LETTER O WITH CIRCUMFLEX | |
'\xec' # 0x008d -> LATIN SMALL LETTER I WITH GRAVE | |
'\xc3' # 0x008e -> LATIN CAPITAL LETTER A WITH TILDE | |
'\xc2' # 0x008f -> LATIN CAPITAL LETTER A WITH CIRCUMFLEX | |
'\xc9' # 0x0090 -> LATIN CAPITAL LETTER E WITH ACUTE | |
'\xc0' # 0x0091 -> LATIN CAPITAL LETTER A WITH GRAVE | |
'\xc8' # 0x0092 -> LATIN CAPITAL LETTER E WITH GRAVE | |
'\xf4' # 0x0093 -> LATIN SMALL LETTER O WITH CIRCUMFLEX | |
'\xf5' # 0x0094 -> LATIN SMALL LETTER O WITH TILDE | |
'\xf2' # 0x0095 -> LATIN SMALL LETTER O WITH GRAVE | |
'\xda' # 0x0096 -> LATIN CAPITAL LETTER U WITH ACUTE | |
'\xf9' # 0x0097 -> LATIN SMALL LETTER U WITH GRAVE | |
'\xcc' # 0x0098 -> LATIN CAPITAL LETTER I WITH GRAVE | |
'\xd5' # 0x0099 -> LATIN CAPITAL LETTER O WITH TILDE | |
'\xdc' # 0x009a -> LATIN CAPITAL LETTER U WITH DIAERESIS | |
'\xa2' # 0x009b -> CENT SIGN | |
'\xa3' # 0x009c -> POUND SIGN | |
'\xd9' # 0x009d -> LATIN CAPITAL LETTER U WITH GRAVE | |
'\u20a7' # 0x009e -> PESETA SIGN | |
'\xd3' # 0x009f -> LATIN CAPITAL LETTER O WITH ACUTE | |
'\xe1' # 0x00a0 -> LATIN SMALL LETTER A WITH ACUTE | |
'\xed' # 0x00a1 -> LATIN SMALL LETTER I WITH ACUTE | |
'\xf3' # 0x00a2 -> LATIN SMALL LETTER O WITH ACUTE | |
'\xfa' # 0x00a3 -> LATIN SMALL LETTER U WITH ACUTE | |
'\xf1' # 0x00a4 -> LATIN SMALL LETTER N WITH TILDE | |
'\xd1' # 0x00a5 -> LATIN CAPITAL LETTER N WITH TILDE | |
'\xaa' # 0x00a6 -> FEMININE ORDINAL INDICATOR | |
'\xba' # 0x00a7 -> MASCULINE ORDINAL INDICATOR | |
'\xbf' # 0x00a8 -> INVERTED QUESTION MARK | |
'\xd2' # 0x00a9 -> LATIN CAPITAL LETTER O WITH GRAVE | |
'\xac' # 0x00aa -> NOT SIGN | |
'\xbd' # 0x00ab -> VULGAR FRACTION ONE HALF | |
'\xbc' # 0x00ac -> VULGAR FRACTION ONE QUARTER | |
'\xa1' # 0x00ad -> INVERTED EXCLAMATION MARK | |
'\xab' # 0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK | |
'\xbb' # 0x00af -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK | |
'\u2591' # 0x00b0 -> LIGHT SHADE | |
'\u2592' # 0x00b1 -> MEDIUM SHADE | |
'\u2593' # 0x00b2 -> DARK SHADE | |
'\u2502' # 0x00b3 -> BOX DRAWINGS LIGHT VERTICAL | |
'\u2524' # 0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT | |
'\u2561' # 0x00b5 -> BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE | |
'\u2562' # 0x00b6 -> BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE | |
'\u2556' # 0x00b7 -> BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE | |
'\u2555' # 0x00b8 -> BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE | |
'\u2563' # 0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT | |
'\u2551' # 0x00ba -> BOX DRAWINGS DOUBLE VERTICAL | |
'\u2557' # 0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT | |
'\u255d' # 0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT | |
'\u255c' # 0x00bd -> BOX DRAWINGS UP DOUBLE AND LEFT SINGLE | |
'\u255b' # 0x00be -> BOX DRAWINGS UP SINGLE AND LEFT DOUBLE | |
'\u2510' # 0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT | |
'\u2514' # 0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT | |
'\u2534' # 0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL | |
'\u252c' # 0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL | |
'\u251c' # 0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT | |
'\u2500' # 0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL | |
'\u253c' # 0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL | |
'\u255e' # 0x00c6 -> BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE | |
'\u255f' # 0x00c7 -> BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE | |
'\u255a' # 0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT | |
'\u2554' # 0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT | |
'\u2569' # 0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL | |
'\u2566' # 0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL | |
'\u2560' # 0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT | |
'\u2550' # 0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL | |
'\u256c' # 0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL | |
'\u2567' # 0x00cf -> BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE | |
'\u2568' # 0x00d0 -> BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE | |
'\u2564' # 0x00d1 -> BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE | |
'\u2565' # 0x00d2 -> BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE | |
'\u2559' # 0x00d3 -> BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE | |
'\u2558' # 0x00d4 -> BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE | |
'\u2552' # 0x00d5 -> BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE | |
'\u2553' # 0x00d6 -> BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE | |
'\u256b' # 0x00d7 -> BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE | |
'\u256a' # 0x00d8 -> BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE | |
'\u2518' # 0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT | |
'\u250c' # 0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT | |
'\u2588' # 0x00db -> FULL BLOCK | |
'\u2584' # 0x00dc -> LOWER HALF BLOCK | |
'\u258c' # 0x00dd -> LEFT HALF BLOCK | |
'\u2590' # 0x00de -> RIGHT HALF BLOCK | |
'\u2580' # 0x00df -> UPPER HALF BLOCK | |
'\u03b1' # 0x00e0 -> GREEK SMALL LETTER ALPHA | |
'\xdf' # 0x00e1 -> LATIN SMALL LETTER SHARP S | |
'\u0393' # 0x00e2 -> GREEK CAPITAL LETTER GAMMA | |
'\u03c0' # 0x00e3 -> GREEK SMALL LETTER PI | |
'\u03a3' # 0x00e4 -> GREEK CAPITAL LETTER SIGMA | |
'\u03c3' # 0x00e5 -> GREEK SMALL LETTER SIGMA | |
'\xb5' # 0x00e6 -> MICRO SIGN | |
'\u03c4' # 0x00e7 -> GREEK SMALL LETTER TAU | |
'\u03a6' # 0x00e8 -> GREEK CAPITAL LETTER PHI | |
'\u0398' # 0x00e9 -> GREEK CAPITAL LETTER THETA | |
'\u03a9' # 0x00ea -> GREEK CAPITAL LETTER OMEGA | |
'\u03b4' # 0x00eb -> GREEK SMALL LETTER DELTA | |
'\u221e' # 0x00ec -> INFINITY | |
'\u03c6' # 0x00ed -> GREEK SMALL LETTER PHI | |
'\u03b5' # 0x00ee -> GREEK SMALL LETTER EPSILON | |
'\u2229' # 0x00ef -> INTERSECTION | |
'\u2261' # 0x00f0 -> IDENTICAL TO | |
'\xb1' # 0x00f1 -> PLUS-MINUS SIGN | |
'\u2265' # 0x00f2 -> GREATER-THAN OR EQUAL TO | |
'\u2264' # 0x00f3 -> LESS-THAN OR EQUAL TO | |
'\u2320' # 0x00f4 -> TOP HALF INTEGRAL | |
'\u2321' # 0x00f5 -> BOTTOM HALF INTEGRAL | |
'\xf7' # 0x00f6 -> DIVISION SIGN | |
'\u2248' # 0x00f7 -> ALMOST EQUAL TO | |
'\xb0' # 0x00f8 -> DEGREE SIGN | |
'\u2219' # 0x00f9 -> BULLET OPERATOR | |
'\xb7' # 0x00fa -> MIDDLE DOT | |
'\u221a' # 0x00fb -> SQUARE ROOT | |
'\u207f' # 0x00fc -> SUPERSCRIPT LATIN SMALL LETTER N | |
'\xb2' # 0x00fd -> SUPERSCRIPT TWO | |
'\u25a0' # 0x00fe -> BLACK SQUARE | |
'\xa0' # 0x00ff -> NO-BREAK SPACE | |
) | |
### Encoding Map | |
encoding_map = { | |
0x0000: 0x0000, # NULL | |
0x0001: 0x0001, # START OF HEADING | |
0x0002: 0x0002, # START OF TEXT | |
0x0003: 0x0003, # END OF TEXT | |
0x0004: 0x0004, # END OF TRANSMISSION | |
0x0005: 0x0005, # ENQUIRY | |
0x0006: 0x0006, # ACKNOWLEDGE | |
0x0007: 0x0007, # BELL | |
0x0008: 0x0008, # BACKSPACE | |
0x0009: 0x0009, # HORIZONTAL TABULATION | |
0x000a: 0x000a, # LINE FEED | |
0x000b: 0x000b, # VERTICAL TABULATION | |
0x000c: 0x000c, # FORM FEED | |
0x000d: 0x000d, # CARRIAGE RETURN | |
0x000e: 0x000e, # SHIFT OUT | |
0x000f: 0x000f, # SHIFT IN | |
0x0010: 0x0010, # DATA LINK ESCAPE | |
0x0011: 0x0011, # DEVICE CONTROL ONE | |
0x0012: 0x0012, # DEVICE CONTROL TWO | |
0x0013: 0x0013, # DEVICE CONTROL THREE | |
0x0014: 0x0014, # DEVICE CONTROL FOUR | |
0x0015: 0x0015, # NEGATIVE ACKNOWLEDGE | |
0x0016: 0x0016, # SYNCHRONOUS IDLE | |
0x0017: 0x0017, # END OF TRANSMISSION BLOCK | |
0x0018: 0x0018, # CANCEL | |
0x0019: 0x0019, # END OF MEDIUM | |
0x001a: 0x001a, # SUBSTITUTE | |
0x001b: 0x001b, # ESCAPE | |
0x001c: 0x001c, # FILE SEPARATOR | |
0x001d: 0x001d, # GROUP SEPARATOR | |
0x001e: 0x001e, # RECORD SEPARATOR | |
0x001f: 0x001f, # UNIT SEPARATOR | |
0x0020: 0x0020, # SPACE | |
0x0021: 0x0021, # EXCLAMATION MARK | |
0x0022: 0x0022, # QUOTATION MARK | |
0x0023: 0x0023, # NUMBER SIGN | |
0x0024: 0x0024, # DOLLAR SIGN | |
0x0025: 0x0025, # PERCENT SIGN | |
0x0026: 0x0026, # AMPERSAND | |
0x0027: 0x0027, # APOSTROPHE | |
0x0028: 0x0028, # LEFT PARENTHESIS | |
0x0029: 0x0029, # RIGHT PARENTHESIS | |
0x002a: 0x002a, # ASTERISK | |
0x002b: 0x002b, # PLUS SIGN | |
0x002c: 0x002c, # COMMA | |
0x002d: 0x002d, # HYPHEN-MINUS | |
0x002e: 0x002e, # FULL STOP | |
0x002f: 0x002f, # SOLIDUS | |
0x0030: 0x0030, # DIGIT ZERO | |
0x0031: 0x0031, # DIGIT ONE | |
0x0032: 0x0032, # DIGIT TWO | |
0x0033: 0x0033, # DIGIT THREE | |
0x0034: 0x0034, # DIGIT FOUR | |
0x0035: 0x0035, # DIGIT FIVE | |
0x0036: 0x0036, # DIGIT SIX | |
0x0037: 0x0037, # DIGIT SEVEN | |
0x0038: 0x0038, # DIGIT EIGHT | |
0x0039: 0x0039, # DIGIT NINE | |
0x003a: 0x003a, # COLON | |
0x003b: 0x003b, # SEMICOLON | |
0x003c: 0x003c, # LESS-THAN SIGN | |
0x003d: 0x003d, # EQUALS SIGN | |
0x003e: 0x003e, # GREATER-THAN SIGN | |
0x003f: 0x003f, # QUESTION MARK | |
0x0040: 0x0040, # COMMERCIAL AT | |
0x0041: 0x0041, # LATIN CAPITAL LETTER A | |
0x0042: 0x0042, # LATIN CAPITAL LETTER B | |
0x0043: 0x0043, # LATIN CAPITAL LETTER C | |
0x0044: 0x0044, # LATIN CAPITAL LETTER D | |
0x0045: 0x0045, # LATIN CAPITAL LETTER E | |
0x0046: 0x0046, # LATIN CAPITAL LETTER F | |
0x0047: 0x0047, # LATIN CAPITAL LETTER G | |
0x0048: 0x0048, # LATIN CAPITAL LETTER H | |
0x0049: 0x0049, # LATIN CAPITAL LETTER I | |
0x004a: 0x004a, # LATIN CAPITAL LETTER J | |
0x004b: 0x004b, # LATIN CAPITAL LETTER K | |
0x004c: 0x004c, # LATIN CAPITAL LETTER L | |
0x004d: 0x004d, # LATIN CAPITAL LETTER M | |
0x004e: 0x004e, # LATIN CAPITAL LETTER N | |
0x004f: 0x004f, # LATIN CAPITAL LETTER O | |
0x0050: 0x0050, # LATIN CAPITAL LETTER P | |
0x0051: 0x0051, # LATIN CAPITAL LETTER Q | |
0x0052: 0x0052, # LATIN CAPITAL LETTER R | |
0x0053: 0x0053, # LATIN CAPITAL LETTER S | |
0x0054: 0x0054, # LATIN CAPITAL LETTER T | |
0x0055: 0x0055, # LATIN CAPITAL LETTER U | |
0x0056: 0x0056, # LATIN CAPITAL LETTER V | |
0x0057: 0x0057, # LATIN CAPITAL LETTER W | |
0x0058: 0x0058, # LATIN CAPITAL LETTER X | |
0x0059: 0x0059, # LATIN CAPITAL LETTER Y | |
0x005a: 0x005a, # LATIN CAPITAL LETTER Z | |
0x005b: 0x005b, # LEFT SQUARE BRACKET | |
0x005c: 0x005c, # REVERSE SOLIDUS | |
0x005d: 0x005d, # RIGHT SQUARE BRACKET | |
0x005e: 0x005e, # CIRCUMFLEX ACCENT | |
0x005f: 0x005f, # LOW LINE | |
0x0060: 0x0060, # GRAVE ACCENT | |
0x0061: 0x0061, # LATIN SMALL LETTER A | |
0x0062: 0x0062, # LATIN SMALL LETTER B | |
0x0063: 0x0063, # LATIN SMALL LETTER C | |
0x0064: 0x0064, # LATIN SMALL LETTER D | |
0x0065: 0x0065, # LATIN SMALL LETTER E | |
0x0066: 0x0066, # LATIN SMALL LETTER F | |
0x0067: 0x0067, # LATIN SMALL LETTER G | |
0x0068: 0x0068, # LATIN SMALL LETTER H | |
0x0069: 0x0069, # LATIN SMALL LETTER I | |
0x006a: 0x006a, # LATIN SMALL LETTER J | |
0x006b: 0x006b, # LATIN SMALL LETTER K | |
0x006c: 0x006c, # LATIN SMALL LETTER L | |
0x006d: 0x006d, # LATIN SMALL LETTER M | |
0x006e: 0x006e, # LATIN SMALL LETTER N | |
0x006f: 0x006f, # LATIN SMALL LETTER O | |
0x0070: 0x0070, # LATIN SMALL LETTER P | |
0x0071: 0x0071, # LATIN SMALL LETTER Q | |
0x0072: 0x0072, # LATIN SMALL LETTER R | |
0x0073: 0x0073, # LATIN SMALL LETTER S | |
0x0074: 0x0074, # LATIN SMALL LETTER T | |
0x0075: 0x0075, # LATIN SMALL LETTER U | |
0x0076: 0x0076, # LATIN SMALL LETTER V | |
0x0077: 0x0077, # LATIN SMALL LETTER W | |
0x0078: 0x0078, # LATIN SMALL LETTER X | |
0x0079: 0x0079, # LATIN SMALL LETTER Y | |
0x007a: 0x007a, # LATIN SMALL LETTER Z | |
0x007b: 0x007b, # LEFT CURLY BRACKET | |
0x007c: 0x007c, # VERTICAL LINE | |
0x007d: 0x007d, # RIGHT CURLY BRACKET | |
0x007e: 0x007e, # TILDE | |
0x007f: 0x007f, # DELETE | |
0x00a0: 0x00ff, # NO-BREAK SPACE | |
0x00a1: 0x00ad, # INVERTED EXCLAMATION MARK | |
0x00a2: 0x009b, # CENT SIGN | |
0x00a3: 0x009c, # POUND SIGN | |
0x00aa: 0x00a6, # FEMININE ORDINAL INDICATOR | |
0x00ab: 0x00ae, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK | |
0x00ac: 0x00aa, # NOT SIGN | |
0x00b0: 0x00f8, # DEGREE SIGN | |
0x00b1: 0x00f1, # PLUS-MINUS SIGN | |
0x00b2: 0x00fd, # SUPERSCRIPT TWO | |
0x00b5: 0x00e6, # MICRO SIGN | |
0x00b7: 0x00fa, # MIDDLE DOT | |
0x00ba: 0x00a7, # MASCULINE ORDINAL INDICATOR | |
0x00bb: 0x00af, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK | |
0x00bc: 0x00ac, # VULGAR FRACTION ONE QUARTER | |
0x00bd: 0x00ab, # VULGAR FRACTION ONE HALF | |
0x00bf: 0x00a8, # INVERTED QUESTION MARK | |
0x00c0: 0x0091, # LATIN CAPITAL LETTER A WITH GRAVE | |
0x00c1: 0x0086, # LATIN CAPITAL LETTER A WITH ACUTE | |
0x00c2: 0x008f, # LATIN CAPITAL LETTER A WITH CIRCUMFLEX | |
0x00c3: 0x008e, # LATIN CAPITAL LETTER A WITH TILDE | |
0x00c7: 0x0080, # LATIN CAPITAL LETTER C WITH CEDILLA | |
0x00c8: 0x0092, # LATIN CAPITAL LETTER E WITH GRAVE | |
0x00c9: 0x0090, # LATIN CAPITAL LETTER E WITH ACUTE | |
0x00ca: 0x0089, # LATIN CAPITAL LETTER E WITH CIRCUMFLEX | |
0x00cc: 0x0098, # LATIN CAPITAL LETTER I WITH GRAVE | |
0x00cd: 0x008b, # LATIN CAPITAL LETTER I WITH ACUTE | |
0x00d1: 0x00a5, # LATIN CAPITAL LETTER N WITH TILDE | |
0x00d2: 0x00a9, # LATIN CAPITAL LETTER O WITH GRAVE | |
0x00d3: 0x009f, # LATIN CAPITAL LETTER O WITH ACUTE | |
0x00d4: 0x008c, # LATIN CAPITAL LETTER O WITH CIRCUMFLEX | |
0x00d5: 0x0099, # LATIN CAPITAL LETTER O WITH TILDE | |
0x00d9: 0x009d, # LATIN CAPITAL LETTER U WITH GRAVE | |
0x00da: 0x0096, # LATIN CAPITAL LETTER U WITH ACUTE | |
0x00dc: 0x009a, # LATIN CAPITAL LETTER U WITH DIAERESIS | |
0x00df: 0x00e1, # LATIN SMALL LETTER SHARP S | |
0x00e0: 0x0085, # LATIN SMALL LETTER A WITH GRAVE | |
0x00e1: 0x00a0, # LATIN SMALL LETTER A WITH ACUTE | |
0x00e2: 0x0083, # LATIN SMALL LETTER A WITH CIRCUMFLEX | |
0x00e3: 0x0084, # LATIN SMALL LETTER A WITH TILDE | |
0x00e7: 0x0087, # LATIN SMALL LETTER C WITH CEDILLA | |
0x00e8: 0x008a, # LATIN SMALL LETTER E WITH GRAVE | |
0x00e9: 0x0082, # LATIN SMALL LETTER E WITH ACUTE | |
0x00ea: 0x0088, # LATIN SMALL LETTER E WITH CIRCUMFLEX | |
0x00ec: 0x008d, # LATIN SMALL LETTER I WITH GRAVE | |
0x00ed: 0x00a1, # LATIN SMALL LETTER I WITH ACUTE | |
0x00f1: 0x00a4, # LATIN SMALL LETTER N WITH TILDE | |
0x00f2: 0x0095, # LATIN SMALL LETTER O WITH GRAVE | |
0x00f3: 0x00a2, # LATIN SMALL LETTER O WITH ACUTE | |
0x00f4: 0x0093, # LATIN SMALL LETTER O WITH CIRCUMFLEX | |
0x00f5: 0x0094, # LATIN SMALL LETTER O WITH TILDE | |
0x00f7: 0x00f6, # DIVISION SIGN | |
0x00f9: 0x0097, # LATIN SMALL LETTER U WITH GRAVE | |
0x00fa: 0x00a3, # LATIN SMALL LETTER U WITH ACUTE | |
0x00fc: 0x0081, # LATIN SMALL LETTER U WITH DIAERESIS | |
0x0393: 0x00e2, # GREEK CAPITAL LETTER GAMMA | |
0x0398: 0x00e9, # GREEK CAPITAL LETTER THETA | |
0x03a3: 0x00e4, # GREEK CAPITAL LETTER SIGMA | |
0x03a6: 0x00e8, # GREEK CAPITAL LETTER PHI | |
0x03a9: 0x00ea, # GREEK CAPITAL LETTER OMEGA | |
0x03b1: 0x00e0, # GREEK SMALL LETTER ALPHA | |
0x03b4: 0x00eb, # GREEK SMALL LETTER DELTA | |
0x03b5: 0x00ee, # GREEK SMALL LETTER EPSILON | |
0x03c0: 0x00e3, # GREEK SMALL LETTER PI | |
0x03c3: 0x00e5, # GREEK SMALL LETTER SIGMA | |
0x03c4: 0x00e7, # GREEK SMALL LETTER TAU | |
0x03c6: 0x00ed, # GREEK SMALL LETTER PHI | |
0x207f: 0x00fc, # SUPERSCRIPT LATIN SMALL LETTER N | |
0x20a7: 0x009e, # PESETA SIGN | |
0x2219: 0x00f9, # BULLET OPERATOR | |
0x221a: 0x00fb, # SQUARE ROOT | |
0x221e: 0x00ec, # INFINITY | |
0x2229: 0x00ef, # INTERSECTION | |
0x2248: 0x00f7, # ALMOST EQUAL TO | |
0x2261: 0x00f0, # IDENTICAL TO | |
0x2264: 0x00f3, # LESS-THAN OR EQUAL TO | |
0x2265: 0x00f2, # GREATER-THAN OR EQUAL TO | |
0x2320: 0x00f4, # TOP HALF INTEGRAL | |
0x2321: 0x00f5, # BOTTOM HALF INTEGRAL | |
0x2500: 0x00c4, # BOX DRAWINGS LIGHT HORIZONTAL | |
0x2502: 0x00b3, # BOX DRAWINGS LIGHT VERTICAL | |
0x250c: 0x00da, # BOX DRAWINGS LIGHT DOWN AND RIGHT | |
0x2510: 0x00bf, # BOX DRAWINGS LIGHT DOWN AND LEFT | |
0x2514: 0x00c0, # BOX DRAWINGS LIGHT UP AND RIGHT | |
0x2518: 0x00d9, # BOX DRAWINGS LIGHT UP AND LEFT | |
0x251c: 0x00c3, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT | |
0x2524: 0x00b4, # BOX DRAWINGS LIGHT VERTICAL AND LEFT | |
0x252c: 0x00c2, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL | |
0x2534: 0x00c1, # BOX DRAWINGS LIGHT UP AND HORIZONTAL | |
0x253c: 0x00c5, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL | |
0x2550: 0x00cd, # BOX DRAWINGS DOUBLE HORIZONTAL | |
0x2551: 0x00ba, # BOX DRAWINGS DOUBLE VERTICAL | |
0x2552: 0x00d5, # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE | |
0x2553: 0x00d6, # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE | |
0x2554: 0x00c9, # BOX DRAWINGS DOUBLE DOWN AND RIGHT | |
0x2555: 0x00b8, # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE | |
0x2556: 0x00b7, # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE | |
0x2557: 0x00bb, # BOX DRAWINGS DOUBLE DOWN AND LEFT | |
0x2558: 0x00d4, # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE | |
0x2559: 0x00d3, # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE | |
0x255a: 0x00c8, # BOX DRAWINGS DOUBLE UP AND RIGHT | |
0x255b: 0x00be, # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE | |
0x255c: 0x00bd, # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE | |
0x255d: 0x00bc, # BOX DRAWINGS DOUBLE UP AND LEFT | |
0x255e: 0x00c6, # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE | |
0x255f: 0x00c7, # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE | |
0x2560: 0x00cc, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT | |
0x2561: 0x00b5, # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE | |
0x2562: 0x00b6, # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE | |
0x2563: 0x00b9, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT | |
0x2564: 0x00d1, # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE | |
0x2565: 0x00d2, # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE | |
0x2566: 0x00cb, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL | |
0x2567: 0x00cf, # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE | |
0x2568: 0x00d0, # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE | |
0x2569: 0x00ca, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL | |
0x256a: 0x00d8, # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE | |
0x256b: 0x00d7, # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE | |
0x256c: 0x00ce, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL | |
0x2580: 0x00df, # UPPER HALF BLOCK | |
0x2584: 0x00dc, # LOWER HALF BLOCK | |
0x2588: 0x00db, # FULL BLOCK | |
0x258c: 0x00dd, # LEFT HALF BLOCK | |
0x2590: 0x00de, # RIGHT HALF BLOCK | |
0x2591: 0x00b0, # LIGHT SHADE | |
0x2592: 0x00b1, # MEDIUM SHADE | |
0x2593: 0x00b2, # DARK SHADE | |
0x25a0: 0x00fe, # BLACK SQUARE | |
} |
""" Python Character Mapping Codec generated from 'VENDORS/MICSFT/PC/CP861.TXT' with gencodec.py. | |
"""#" | |
import codecs | |
### Codec APIs | |
class Codec(codecs.Codec): | |
def encode(self,input,errors='strict'): | |
return codecs.charmap_encode(input,errors,encoding_map) | |
def decode(self,input,errors='strict'): | |
return codecs.charmap_decode(input,errors,decoding_table) | |
class IncrementalEncoder(codecs.IncrementalEncoder): | |
def encode(self, input, final=False): | |
return codecs.charmap_encode(input,self.errors,encoding_map)[0] | |
class IncrementalDecoder(codecs.IncrementalDecoder): | |
def decode(self, input, final=False): | |
return codecs.charmap_decode(input,self.errors,decoding_table)[0] | |
class StreamWriter(Codec,codecs.StreamWriter): | |
pass | |
class StreamReader(Codec,codecs.StreamReader): | |
pass | |
### encodings module API | |
def getregentry(): | |
return codecs.CodecInfo( | |
name='cp861', | |
encode=Codec().encode, | |
decode=Codec().decode, | |
incrementalencoder=IncrementalEncoder, | |
incrementaldecoder=IncrementalDecoder, | |
streamreader=StreamReader, | |
streamwriter=StreamWriter, | |
) | |
### Decoding Map | |
decoding_map = codecs.make_identity_dict(range(256)) | |
decoding_map.update({ | |
0x0080: 0x00c7, # LATIN CAPITAL LETTER C WITH CEDILLA | |
0x0081: 0x00fc, # LATIN SMALL LETTER U WITH DIAERESIS | |
0x0082: 0x00e9, # LATIN SMALL LETTER E WITH ACUTE | |
0x0083: 0x00e2, # LATIN SMALL LETTER A WITH CIRCUMFLEX | |
0x0084: 0x00e4, # LATIN SMALL LETTER A WITH DIAERESIS | |
0x0085: 0x00e0, # LATIN SMALL LETTER A WITH GRAVE | |
0x0086: 0x00e5, # LATIN SMALL LETTER A WITH RING ABOVE | |
0x0087: 0x00e7, # LATIN SMALL LETTER C WITH CEDILLA | |
0x0088: 0x00ea, # LATIN SMALL LETTER E WITH CIRCUMFLEX | |
0x0089: 0x00eb, # LATIN SMALL LETTER E WITH DIAERESIS | |
0x008a: 0x00e8, # LATIN SMALL LETTER E WITH GRAVE | |
0x008b: 0x00d0, # LATIN CAPITAL LETTER ETH | |
0x008c: 0x00f0, # LATIN SMALL LETTER ETH | |
0x008d: 0x00de, # LATIN CAPITAL LETTER THORN | |
0x008e: 0x00c4, # LATIN CAPITAL LETTER A WITH DIAERESIS | |
0x008f: 0x00c5, # LATIN CAPITAL LETTER A WITH RING ABOVE | |
0x0090: 0x00c9, # LATIN CAPITAL LETTER E WITH ACUTE | |
0x0091: 0x00e6, # LATIN SMALL LIGATURE AE | |
0x0092: 0x00c6, # LATIN CAPITAL LIGATURE AE | |
0x0093: 0x00f4, # LATIN SMALL LETTER O WITH CIRCUMFLEX | |
0x0094: 0x00f6, # LATIN SMALL LETTER O WITH DIAERESIS | |
0x0095: 0x00fe, # LATIN SMALL LETTER THORN | |
0x0096: 0x00fb, # LATIN SMALL LETTER U WITH CIRCUMFLEX | |
0x0097: 0x00dd, # LATIN CAPITAL LETTER Y WITH ACUTE | |
0x0098: 0x00fd, # LATIN SMALL LETTER Y WITH ACUTE | |
0x0099: 0x00d6, # LATIN CAPITAL LETTER O WITH DIAERESIS | |
0x009a: 0x00dc, # LATIN CAPITAL LETTER U WITH DIAERESIS | |
0x009b: 0x00f8, # LATIN SMALL LETTER O WITH STROKE | |
0x009c: 0x00a3, # POUND SIGN | |
0x009d: 0x00d8, # LATIN CAPITAL LETTER O WITH STROKE | |
0x009e: 0x20a7, # PESETA SIGN | |
0x009f: 0x0192, # LATIN SMALL LETTER F WITH HOOK | |
0x00a0: 0x00e1, # LATIN SMALL LETTER A WITH ACUTE | |
0x00a1: 0x00ed, # LATIN SMALL LETTER I WITH ACUTE | |
0x00a2: 0x00f3, # LATIN SMALL LETTER O WITH ACUTE | |
0x00a3: 0x00fa, # LATIN SMALL LETTER U WITH ACUTE | |
0x00a4: 0x00c1, # LATIN CAPITAL LETTER A WITH ACUTE | |
0x00a5: 0x00cd, # LATIN CAPITAL LETTER I WITH ACUTE | |
0x00a6: 0x00d3, # LATIN CAPITAL LETTER O WITH ACUTE | |
0x00a7: 0x00da, # LATIN CAPITAL LETTER U WITH ACUTE | |
0x00a8: 0x00bf, # INVERTED QUESTION MARK | |
0x00a9: 0x2310, # REVERSED NOT SIGN | |
0x00aa: 0x00ac, # NOT SIGN | |
0x00ab: 0x00bd, # VULGAR FRACTION ONE HALF | |
0x00ac: 0x00bc, # VULGAR FRACTION ONE QUARTER | |
0x00ad: 0x00a1, # INVERTED EXCLAMATION MARK | |
0x00ae: 0x00ab, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK | |
0x00af: 0x00bb, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK | |
0x00b0: 0x2591, # LIGHT SHADE | |
0x00b1: 0x2592, # MEDIUM SHADE | |
0x00b2: 0x2593, # DARK SHADE | |
0x00b3: 0x2502, # BOX DRAWINGS LIGHT VERTICAL | |
0x00b4: 0x2524, # BOX DRAWINGS LIGHT VERTICAL AND LEFT | |
0x00b5: 0x2561, # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE | |
0x00b6: 0x2562, # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE | |
0x00b7: 0x2556, # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE | |
0x00b8: 0x2555, # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE | |
0x00b9: 0x2563, # BOX DRAWINGS DOUBLE VERTICAL AND LEFT | |
0x00ba: 0x2551, # BOX DRAWINGS DOUBLE VERTICAL | |
0x00bb: 0x2557, # BOX DRAWINGS DOUBLE DOWN AND LEFT | |
0x00bc: 0x255d, # BOX DRAWINGS DOUBLE UP AND LEFT | |
0x00bd: 0x255c, # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE | |
0x00be: 0x255b, # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE | |
0x00bf: 0x2510, # BOX DRAWINGS LIGHT DOWN AND LEFT | |
0x00c0: 0x2514, # BOX DRAWINGS LIGHT UP AND RIGHT | |
0x00c1: 0x2534, # BOX DRAWINGS LIGHT UP AND HORIZONTAL | |
0x00c2: 0x252c, # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL | |
0x00c3: 0x251c, # BOX DRAWINGS LIGHT VERTICAL AND RIGHT | |
0x00c4: 0x2500, # BOX DRAWINGS LIGHT HORIZONTAL | |
0x00c5: 0x253c, # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL | |
0x00c6: 0x255e, # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE | |
0x00c7: 0x255f, # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE | |
0x00c8: 0x255a, # BOX DRAWINGS DOUBLE UP AND RIGHT | |
0x00c9: 0x2554, # BOX DRAWINGS DOUBLE DOWN AND RIGHT | |
0x00ca: 0x2569, # BOX DRAWINGS DOUBLE UP AND HORIZONTAL | |
0x00cb: 0x2566, # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL | |
0x00cc: 0x2560, # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT | |
0x00cd: 0x2550, # BOX DRAWINGS DOUBLE HORIZONTAL | |
0x00ce: 0x256c, # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL | |
0x00cf: 0x2567, # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE | |
0x00d0: 0x2568, # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE | |
0x00d1: 0x2564, # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE | |
0x00d2: 0x2565, # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE | |
0x00d3: 0x2559, # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE | |
0x00d4: 0x2558, # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE | |
0x00d5: 0x2552, # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE | |
0x00d6: 0x2553, # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE | |
0x00d7: 0x256b, # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE | |
0x00d8: 0x256a, # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE | |
0x00d9: 0x2518, # BOX DRAWINGS LIGHT UP AND LEFT | |
0x00da: 0x250c, # BOX DRAWINGS LIGHT DOWN AND RIGHT | |
0x00db: 0x2588, # FULL BLOCK | |
0x00dc: 0x2584, # LOWER HALF BLOCK | |
0x00dd: 0x258c, # LEFT HALF BLOCK | |
0x00de: 0x2590, # RIGHT HALF BLOCK | |
0x00df: 0x2580, # UPPER HALF BLOCK | |
0x00e0: 0x03b1, # GREEK SMALL LETTER ALPHA | |
0x00e1: 0x00df, # LATIN SMALL LETTER SHARP S | |
0x00e2: 0x0393, # GREEK CAPITAL LETTER GAMMA | |
0x00e3: 0x03c0, # GREEK SMALL LETTER PI | |
0x00e4: 0x03a3, # GREEK CAPITAL LETTER SIGMA | |
0x00e5: 0x03c3, # GREEK SMALL LETTER SIGMA | |
0x00e6: 0x00b5, # MICRO SIGN | |
0x00e7: 0x03c4, # GREEK SMALL LETTER TAU | |
0x00e8: 0x03a6, # GREEK CAPITAL LETTER PHI | |
0x00e9: 0x0398, # GREEK CAPITAL LETTER THETA | |
0x00ea: 0x03a9, # GREEK CAPITAL LETTER OMEGA | |
0x00eb: 0x03b4, # GREEK SMALL LETTER DELTA | |
0x00ec: 0x221e, # INFINITY | |
0x00ed: 0x03c6, # GREEK SMALL LETTER PHI | |
0x00ee: 0x03b5, # GREEK SMALL LETTER EPSILON | |
0x00ef: 0x2229, # INTERSECTION | |
0x00f0: 0x2261, # IDENTICAL TO | |
0x00f1: 0x00b1, # PLUS-MINUS SIGN | |
0x00f2: 0x2265, # GREATER-THAN OR EQUAL TO | |
0x00f3: 0x2264, # LESS-THAN OR EQUAL TO | |
0x00f4: 0x2320, # TOP HALF INTEGRAL | |
0x00f5: 0x2321, # BOTTOM HALF INTEGRAL | |
0x00f6: 0x00f7, # DIVISION SIGN | |
0x00f7: 0x2248, # ALMOST EQUAL TO | |
0x00f8: 0x00b0, # DEGREE SIGN | |
0x00f9: 0x2219, # BULLET OPERATOR | |
0x00fa: 0x00b7, # MIDDLE DOT | |
0x00fb: 0x221a, # SQUARE ROOT | |
0x00fc: 0x207f, # SUPERSCRIPT LATIN SMALL LETTER N | |
0x00fd: 0x00b2, # SUPERSCRIPT TWO | |
0x00fe: 0x25a0, # BLACK SQUARE | |
0x00ff: 0x00a0, # NO-BREAK SPACE | |
}) | |
### Decoding Table | |
decoding_table = ( | |
'\x00' # 0x0000 -> NULL | |
'\x01' # 0x0001 -> START OF HEADING | |
'\x02' # 0x0002 -> START OF TEXT | |
'\x03' # 0x0003 -> END OF TEXT | |
'\x04' # 0x0004 -> END OF TRANSMISSION | |
'\x05' # 0x0005 -> ENQUIRY | |
'\x06' # 0x0006 -> ACKNOWLEDGE | |
'\x07' # 0x0007 -> BELL | |
'\x08' # 0x0008 -> BACKSPACE | |
'\t' # 0x0009 -> HORIZONTAL TABULATION | |
'\n' # 0x000a -> LINE FEED | |
'\x0b' # 0x000b -> VERTICAL TABULATION | |
'\x0c' # 0x000c -> FORM FEED | |
'\r' # 0x000d -> CARRIAGE RETURN | |
'\x0e' # 0x000e -> SHIFT OUT | |
'\x0f' # 0x000f -> SHIFT IN | |
'\x10' # 0x0010 -> DATA LINK ESCAPE | |
'\x11' # 0x0011 -> DEVICE CONTROL ONE | |
'\x12' # 0x0012 -> DEVICE CONTROL TWO | |
'\x13' # 0x0013 -> DEVICE CONTROL THREE | |
'\x14' # 0x0014 -> DEVICE CONTROL FOUR | |
'\x15' # 0x0015 -> NEGATIVE ACKNOWLEDGE | |
'\x16' # 0x0016 -> SYNCHRONOUS IDLE | |
'\x17' # 0x0017 -> END OF TRANSMISSION BLOCK | |
'\x18' # 0x0018 -> CANCEL | |
'\x19' # 0x0019 -> END OF MEDIUM | |
'\x1a' # 0x001a -> SUBSTITUTE | |
'\x1b' # 0x001b -> ESCAPE | |
'\x1c' # 0x001c -> FILE SEPARATOR | |
'\x1d' # 0x001d -> GROUP SEPARATOR | |
'\x1e' # 0x001e -> RECORD SEPARATOR | |
'\x1f' # 0x001f -> UNIT SEPARATOR | |
' ' # 0x0020 -> SPACE | |
'!' # 0x0021 -> EXCLAMATION MARK | |
'"' # 0x0022 -> QUOTATION MARK | |
'#' # 0x0023 -> NUMBER SIGN | |
'$' # 0x0024 -> DOLLAR SIGN | |
'%' # 0x0025 -> PERCENT SIGN | |
'&' # 0x0026 -> AMPERSAND | |
"'" # 0x0027 -> APOSTROPHE | |
'(' # 0x0028 -> LEFT PARENTHESIS | |
')' # 0x0029 -> RIGHT PARENTHESIS | |
'*' # 0x002a -> ASTERISK | |
'+' # 0x002b -> PLUS SIGN | |
',' # 0x002c -> COMMA | |
'-' # 0x002d -> HYPHEN-MINUS | |
'.' # 0x002e -> FULL STOP | |
'/' # 0x002f -> SOLIDUS | |
'0' # 0x0030 -> DIGIT ZERO | |
'1' # 0x0031 -> DIGIT ONE | |
'2' # 0x0032 -> DIGIT TWO | |
'3' # 0x0033 -> DIGIT THREE | |
'4' # 0x0034 -> DIGIT FOUR | |
'5' # 0x0035 -> DIGIT FIVE | |
'6' # 0x0036 -> DIGIT SIX | |
'7' # 0x0037 -> DIGIT SEVEN | |
'8' # 0x0038 -> DIGIT EIGHT | |
'9' # 0x0039 -> DIGIT NINE | |
':' # 0x003a -> COLON | |
';' # 0x003b -> SEMICOLON | |
'<' # 0x003c -> LESS-THAN SIGN | |
'=' # 0x003d -> EQUALS SIGN | |
'>' # 0x003e -> GREATER-THAN SIGN | |
'?' # 0x003f -> QUESTION MARK | |
'@' # 0x0040 -> COMMERCIAL AT | |
'A' # 0x0041 -> LATIN CAPITAL LETTER A | |
'B' # 0x0042 -> LATIN CAPITAL LETTER B | |
'C' # 0x0043 -> LATIN CAPITAL LETTER C | |
'D' # 0x0044 -> LATIN CAPITAL LETTER D | |
'E' # 0x0045 -> LATIN CAPITAL LETTER E | |
'F' # 0x0046 -> LATIN CAPITAL LETTER F | |
'G' # 0x0047 -> LATIN CAPITAL LETTER G | |
'H' # 0x0048 -> LATIN CAPITAL LETTER H | |
'I' # 0x0049 -> LATIN CAPITAL LETTER I | |
'J' # 0x004a -> LATIN CAPITAL LETTER J | |
'K' # 0x004b -> LATIN CAPITAL LETTER K | |
'L' # 0x004c -> LATIN CAPITAL LETTER L | |
'M' # 0x004d -> LATIN CAPITAL LETTER M | |
'N' # 0x004e -> LATIN CAPITAL LETTER N | |
'O' # 0x004f -> LATIN CAPITAL LETTER O | |
'P' # 0x0050 -> LATIN CAPITAL LETTER P | |
'Q' # 0x0051 -> LATIN CAPITAL LETTER Q | |
'R' # 0x0052 -> LATIN CAPITAL LETTER R | |
'S' # 0x0053 -> LATIN CAPITAL LETTER S | |
'T' # 0x0054 -> LATIN CAPITAL LETTER T | |
'U' # 0x0055 -> LATIN CAPITAL LETTER U | |
'V' # 0x0056 -> LATIN CAPITAL LETTER V | |
'W' # 0x0057 -> LATIN CAPITAL LETTER W | |
'X' # 0x0058 -> LATIN CAPITAL LETTER X | |
'Y' # 0x0059 -> LATIN CAPITAL LETTER Y | |
'Z' # 0x005a -> LATIN CAPITAL LETTER Z | |
'[' # 0x005b -> LEFT SQUARE BRACKET | |
'\\' # 0x005c -> REVERSE SOLIDUS | |
']' # 0x005d -> RIGHT SQUARE BRACKET | |
'^' # 0x005e -> CIRCUMFLEX ACCENT | |
'_' # 0x005f -> LOW LINE | |
'`' # 0x0060 -> GRAVE ACCENT | |
'a' # 0x0061 -> LATIN SMALL LETTER A | |
'b' # 0x0062 -> LATIN SMALL LETTER B | |
'c' # 0x0063 -> LATIN SMALL LETTER C | |
'd' # 0x0064 -> LATIN SMALL LETTER D | |
'e' # 0x0065 -> LATIN SMALL L |
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)
(Sorry about that, but we can’t show files that are this big right now.)