Add all new font files.

This commit is contained in:
20xd6 2024-03-28 15:56:20 -04:00
parent 7734de9fa4
commit ee0bef39b3
85 changed files with 199160 additions and 0 deletions

Binary file not shown.

View File

@ -0,0 +1,92 @@
Copyright (c) 2020 Fredrick R. Brennan (<copypaste@kittens.ph>)
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.

View File

@ -0,0 +1,11 @@
# TT2020
(Version 0.2: 21 November 2020)
## [Download the font](https://ctrlcctrlv.github.io/TT2020/docs/download.html)
### [Why another typewriter font?](https://ctrlcctrlv.github.io/TT2020/docs/moreinfo.html) &diams; [How does it work?](https://ctrlcctrlv.github.io/TT2020/docs/moreinfo2.html) &diams; [Animated specimen](https://ctrlcctrlv.github.io/TT2020/docs/) &diams; [BoingBoing article](https://boingboing.net/2020/01/03/tt2020-an-old-timey-typewrite.html)
![](https://raw.githubusercontent.com/ctrlcctrlv/TT2020/master/docs/tt2020.png)
TT2020 is an advanced, open source, hyperrealistic, multilingual typewriter font for a new decade!

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,17 @@
# TT2020 build files
Required:
* Python 3+
* GEGL
* `python-gegl`
* GIMP
* Inkscape
Here lie the TT2020 build files; they are typically called in this order:
* gen_glyphs.sh (list_glyphs.py, export_glyph.py)
* gen_style.sh (style[A-G].sh)
Most styles are generated via GIMP scripts; all styles so far generate bitmaps which are expected to be autotraced by FontForge.
Possible future work would be, using Inkscape to generate a style, and using OpenGL shaders to much more quickly generate a style than GIMP can do.

View File

@ -0,0 +1,12 @@
#!/usr/bin/env python3
import sys
sys.path.append("/usr/local/lib/python3.8/site-packages")
import fontforge
gn=sys.argv[1]
f = fontforge.open("../TT_ita.sfd")
f.ascent+=300
f.descent+=300
g=f[gn]
if g.width == 0:
g.width = f["A"].width
g.export("svgs/{}.svg".format(gn))

View File

@ -0,0 +1,37 @@
#!/usr/bin/env python3
# Minimal example of using the filter `cell-noise` with GEGL through python-gegl.
import argparse
import sys
sys.path.append("/usr/local/lib/python3.8/site-packages")
ap = argparse.ArgumentParser(description="Generate Cell Noise without opening GIMP (unneeded arguments hardcoded, see script).", add_help=False)
ap.add_argument('-h', '--height', type=int, required=True)
ap.add_argument('-w', '--width', type=int, required=True)
ap.add_argument('-o', '--outdir', type=str, required=True)
ap.add_argument('-s', '--seed', type=int, required=True)
ap.add_argument('-б', '--бесцельный', type=int)
args = ap.parse_args()
# These two lines makes sure version of gegl is correct
import gi
gi.require_version('Gegl', '0.4')
import gegl
import random
g = gegl.Graph("cell-noise", "crop", "png-save")
g[2].path = "{outdir}/{height}x{width}x{seed}.png".format(outdir=args.outdir, height=args.height, width=args.width, seed=args.seed)
g[1].height = args.height
g[1].width = args.width
# Seed bounds ( on my system anyway )
#g[0].seed = random.randint(-2147483648, 2147483648)
g[0].seed = args.seed
g[0].scale = 0.100
#These are all the defaults, but we set them in case the defaults change.
g[0].iterations = 1
g[0].shape = 2
g[0].rank = 1
g[0].palettize = False
g()

View File

@ -0,0 +1,5 @@
#!/bin/bash
printf "\033[31mStep 1\e[0m"
python list_glyphs.py | parallel --progress './export_glyph.py {}'
printf "\033[31mStep 2\e[0m"
ls svgs/* | parallel --progress 'inkscape -z {} --export-png=pngs/{/.}.png -d 600 2&>/dev/null'

View File

@ -0,0 +1,15 @@
#!/bin/bash
STYLE=$1
SEQ="$2 $3"
# Style arg required.
if [[ -z $1 ]]; then exit 1; fi;
if [[ -z $2 || -z $3 ]]; then SEQ="1 9"; fi;
if [[ !("$1" =~ [A-G]) ]]; then exit 2; fi
for i in `seq $SEQ`; do
printf "\033[31mStep $i\e[0m\n"
./list_glyphs.py | parallel --timeout 500% --progress --bar "./style$1.sh pngs/{}.png $i $i {#}"
done

View File

@ -0,0 +1,6 @@
#!/usr/bin/env python3
import sys
sys.path.append("/usr/local/lib/python3.8/site-packages")
import fontforge
f = fontforge.open("../TT_ita.sfd")
print('\n'.join(['{}'.format(c.glyphname) for c in f.glyphs("encoding")]))

View File

@ -0,0 +1,52 @@
# Generate style B, given PNG of a single glyph image.
import sys
import os
import subprocess
i_f = os.environ["GIMPIMAGE"]
seed = os.environ["SEED"] or 11
alt = os.environ["ALT"] or 1
if alt <= 1:
outfile = "styleB/{}.png".format(i_f.replace("pngs/", "").replace(".png", ""))
else:
outfile = "styleB/{}.{}.png".format(i_f.replace("pngs/", "").replace(".png", ""), alt)
print("Opening {} and writing to {}".format(i_f, outfile))
im = pdb.file_png_load(i_f, 0)
print("===SIZE IS: {}===".format(str(im.height)+"X"+str(im.width)))
pdb.gimp_image_scale(im,im.width/3,im.height/3)
print("===SIZE IS: {}===".format(str(im.height)+"X"+str(im.width)))
pdb.gimp_image_resize(im, im.width+1000, im.height, 500, 0)
print(im.layers)
for layer in im.layers:
pdb.gimp_layer_resize_to_image_size(layer)
pdb.plug_in_gauss(im, im.active_drawable, 80, 80, 0)
cell_noise_file = "gegl:cell-noise/{}x{}x{}.png".format(im.height, im.width, seed)
if not os.path.isfile(cell_noise_file):
command = "/usr/bin/python3.8 gen_cell_noise.py -h {} -w {} -o 'gegl:cell-noise' -s {}".format(im.height, im.width, seed)
os.system(command)
la = pdb.gimp_file_load_layer(im, cell_noise_file)
new_mask = pdb.gimp_layer_create_mask(la, 5)
pdb.gimp_layer_add_mask(im.layers[0], new_mask)
pdb.gimp_drawable_invert(new_mask, False)
pdb.gimp_brightness_contrast(new_mask, 57, 94)
pdb.gimp_layer_remove_mask(im.layers[0], 0)
pdb.gimp_layer_flatten(im.layers[0])
pdb.gimp_brightness_contrast(im.active_drawable, -127, 127)
pdb.gimp_image_convert_indexed(im, 0, 3, 0, False, True, '')
pdb.gimp_image_convert_grayscale(im)
pdb.gimp_layer_add_alpha(im.layers[0])
pdb.gimp_image_select_color(im, 2, im.active_drawable, (1.0,1.0,1.0))
pdb.gimp_drawable_edit_clear(im.active_drawable)
pdb.script_fu_distress_selection(im, im.active_drawable, 127, 2, 2, 10, 1, 1)
pdb.gimp_selection_invert(im)
nl = pdb.gimp_layer_new(im, im.width, im.height, 3, "QQ", 100, 0)
pdb.gimp_image_insert_layer(im, nl, None, -1)
pdb.gimp_image_remove_layer(im, im.layers[0])
#Below is problem command
pdb.gimp_edit_bucket_fill(im.active_drawable, 0, 0, 100, 255, True, 1.0, 1.0)
pdb.file_png_save_defaults(im, im.active_drawable, outfile, 0)
pdb.gimp_quit(1)

View File

@ -0,0 +1,2 @@
#!/bin/bash
ALT="$3" SEED=$((100000+$2+($4-1))) GIMPIMAGE="$1" /home/fred/Downloads/GIMP_AppImage-release-2.10.8-withplugins-x86_64.AppImage -idf --batch-interpreter=python-fu-eval -b - < styleB.py

View File

@ -0,0 +1,29 @@
# Generate style D, given PNG of a single glyph image. This style is pretty much verbatim copy of the instructions at https://www.xach.com/gimp/tutorials/rough.html
import gi
gi.require_version('Gegl', '0.4')
import gegl
import sys
import os
i_f = os.environ["GIMPIMAGE"]
seed = os.environ["SEED"] or 11
alt = os.environ["ALT"] or 1
outfile = "styleD/{}.{}.png".format(i_f.replace("pngs/", "").replace(".png", ""), alt)
#print("Opening {} and writing to {}".format(i_f, outfile), file=sys.stderr)
g = gegl.Graph("png-load", "scale-ratio", "noise-spread", "noise-spread", "gaussian-blur")
g[0].path = i_f
g[1].x = 0.1
g[1].y = 0.1
g[2].seed = g[3].seed = int(seed)
g[2]["amount-x"] = g[3]["amount-x"] = g[2]["amount-y"] = g[3]["amount-y"] = 35
g[4]["std-dev-x"] = g[4]["std-dev-y"] = 3.5
g2 = gegl.Graph("color", "over", "crop", "threshold", "png-save")
g2[-1].path = outfile
g2[0].value = (1, 1, 1)
g2[2].width = 500
g2[2].height = 1000
g.plug_as_aux(g2[1])
g2()

View File

@ -0,0 +1,2 @@
#!/bin/bash
ALT="$3" SEED=$((100000+$2+($4-1))) GIMPIMAGE="$1" python styleD.py

View File

@ -0,0 +1,52 @@
# Generate style B, given PNG of a single glyph image.
import sys
import os
import subprocess
i_f = os.environ["GIMPIMAGE"]
seed = os.environ["SEED"] or 11
alt = os.environ["ALT"] or 1
if alt <= 1:
outfile = "styleE/{}.png".format(i_f.replace("pngs/", "").replace(".png", ""))
else:
outfile = "styleE/{}.{}.png".format(i_f.replace("pngs/", "").replace(".png", ""), alt)
print("Opening {} and writing to {}".format(i_f, outfile))
im = pdb.file_png_load(i_f, 0)
print("===SIZE IS: {}===".format(str(im.height)+"X"+str(im.width)))
pdb.gimp_image_scale(im,im.width/3,im.height/3)
print("===SIZE IS: {}===".format(str(im.height)+"X"+str(im.width)))
pdb.gimp_image_resize(im, im.width+1000, im.height, 500, 0)
print(im.layers)
for layer in im.layers:
pdb.gimp_layer_resize_to_image_size(layer)
pdb.plug_in_gauss(im, im.active_drawable, 40, 40, 0)
cell_noise_file = "gegl:cell-noise/{}x{}x{}.png".format(im.height, im.width, seed)
if not os.path.isfile(cell_noise_file):
command = "/usr/bin/python3.8 gen_cell_noise.py -h {} -w {} -o 'gegl:cell-noise' -s {}".format(im.height, im.width, seed)
os.system(command)
la = pdb.gimp_file_load_layer(im, cell_noise_file)
new_mask = pdb.gimp_layer_create_mask(la, 5)
pdb.gimp_layer_add_mask(im.layers[0], new_mask)
pdb.gimp_drawable_invert(new_mask, False)
pdb.gimp_brightness_contrast(new_mask, 47, 84)
pdb.gimp_layer_remove_mask(im.layers[0], 0)
pdb.gimp_layer_flatten(im.layers[0])
pdb.gimp_brightness_contrast(im.active_drawable, -127, 127)
pdb.gimp_image_convert_indexed(im, 0, 3, 0, False, True, '')
pdb.gimp_image_convert_grayscale(im)
pdb.gimp_layer_add_alpha(im.layers[0])
pdb.gimp_image_select_color(im, 2, im.active_drawable, (1.0,1.0,1.0))
pdb.gimp_drawable_edit_clear(im.active_drawable)
pdb.script_fu_distress_selection(im, im.active_drawable, 127, 2, 2, 10, 1, 1)
pdb.gimp_selection_invert(im)
nl = pdb.gimp_layer_new(im, im.width, im.height, 3, "QQ", 100, 0)
pdb.gimp_image_insert_layer(im, nl, None, -1)
pdb.gimp_image_remove_layer(im, im.layers[0])
#Below is problem command
pdb.gimp_edit_bucket_fill(im.active_drawable, 0, 0, 100, 255, True, 1.0, 1.0)
pdb.file_png_save_defaults(im, im.active_drawable, outfile, 0)
pdb.gimp_quit(1)

View File

@ -0,0 +1,2 @@
#!/bin/bash
ALT="$3" SEED=$((100000+$2+($4-1))) GIMPIMAGE="$1" /home/fred/Downloads/GIMP_AppImage-release-2.10.8-withplugins-x86_64.AppImage -idf --batch-interpreter=python-fu-eval -b - < styleE.py

View File

@ -0,0 +1,37 @@
# Generate style C, given PNG of a single glyph image.
import gimpfu
import sys
import os
i_f = os.environ["GIMPIMAGE"]
seed = os.environ["SEED"] or 11
alt = os.environ["ALT"] or 1
if alt <= 1:
outfile = "styleF/{}.png".format(i_f.replace("pngs/", "").replace(".png", ""))
else:
outfile = "styleF/{}.{}.png".format(i_f.replace("pngs/", "").replace(".png", ""), alt)
#print("Opening {} and writing to {}".format(i_f, outfile))
im = pdb.file_png_load(i_f, 0)
pdb.gimp_image_scale(im,im.width/5,im.height/5)
pdb.gimp_image_resize(im, im.width+500, im.height, 250, 0)
print(im.layers)
for layer in im.layers:
pdb.gimp_layer_resize_to_image_size(layer)
new_mask = pdb.gimp_layer_create_mask(im.layers[0], gimpfu.ADD_MASK_WHITE)
pdb.gimp_layer_add_mask(im.layers[0], new_mask)
pdb.plug_in_plasma(im, new_mask, seed, 2.5)
pdb.plug_in_gauss(im, im.layers[0], 40, 40, 0)
pdb.gimp_brightness_contrast(new_mask, 45, 45)
pdb.gimp_layer_remove_mask(im.layers[0], gimpfu.MASK_APPLY)
pdb.gimp_layer_flatten(im.layers[0])
pdb.gimp_brightness_contrast(im.layers[0], -117, 127)
pdb.plug_in_gauss(im, im.layers[0], 40, 40, 0)
pdb.gimp_image_convert_grayscale(im)
# 20 is cell-size, 60 is degrees
pdb.plug_in_newsprint(im, im.layers[0], 20, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 1)
pdb.file_png_save_defaults(im, im.layers[0], outfile, 0)
pdb.gimp_quit(1)

View File

@ -0,0 +1,2 @@
#!/bin/bash
ALT="$3" SEED=$((100000+($2*1000)+($4-1))) GIMPIMAGE="$1" /home/fred/Downloads/GIMP_AppImage-release-2.10.8-withplugins-x86_64.AppImage -idf --batch-interpreter=python-fu-eval -b - < styleF.py

View File

@ -0,0 +1,37 @@
# Generate style G, given PNG of a single glyph image.
import gimpfu
import sys
import os
i_f = os.environ["GIMPIMAGE"]
seed = os.environ["SEED"] or 11
alt = os.environ["ALT"] or 1
if alt <= 1:
outfile = "styleG/{}.png".format(i_f.replace("pngs/", "").replace(".png", ""))
else:
outfile = "styleG/{}.{}.png".format(i_f.replace("pngs/", "").replace(".png", ""), alt)
#print("Opening {} and writing to {}".format(i_f, outfile))
im = pdb.file_png_load(i_f, 0)
pdb.gimp_image_scale(im,im.width/5,im.height/5)
pdb.gimp_image_resize(im, im.width+500, im.height, 250, 0)
print(im.layers)
for layer in im.layers:
pdb.gimp_layer_resize_to_image_size(layer)
new_mask = pdb.gimp_layer_create_mask(im.layers[0], gimpfu.ADD_MASK_WHITE)
pdb.gimp_layer_add_mask(im.layers[0], new_mask)
pdb.plug_in_plasma(im, new_mask, seed, 2.5)
pdb.plug_in_gauss(im, im.layers[0], 40, 40, 0)
pdb.gimp_brightness_contrast(new_mask, 90, 90)
pdb.gimp_layer_remove_mask(im.layers[0], gimpfu.MASK_APPLY)
pdb.gimp_layer_flatten(im.layers[0])
pdb.gimp_brightness_contrast(im.layers[0], -117, 127)
pdb.plug_in_gauss(im, im.layers[0], 40, 40, 0)
pdb.gimp_image_convert_grayscale(im)
# 20 is cell-size, 60 is degrees
pdb.plug_in_newsprint(im, im.layers[0], 20, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 1)
pdb.file_png_save_defaults(im, im.layers[0], outfile, 0)
pdb.gimp_quit(1)

View File

@ -0,0 +1,2 @@
#!/bin/bash
ALT="$3" SEED=$((100000+$2+($4-1))) GIMPIMAGE="$1" /home/fred/Downloads/GIMP_AppImage-release-2.10.8-withplugins-x86_64.AppImage -idf --batch-interpreter=python-fu-eval -b - < styleG.py

View File

@ -0,0 +1,31 @@
#!/usr/bin/env python3
# I was in the middle of moving when this release was made and some vital build files were on another computer.
# Therefore, let's patch the binaries and call it a release. Users will never know as long as I don't fuck up.
# (Famous last words.)
import fontTools.ttLib
import sys
assert len(sys.argv) == 2, "No filename given"
ttf=fontTools.ttLib.TTFont(file=sys.argv[1])
# SFNT revision
ttf["head"].fontRevision = 0.2
# `name` font version
padZeroes = lambda bs: b'\x00'.join([b.encode('ascii') for b in bs])
names=ttf["name"].names
for n in names:
if n.nameID != 5: continue
n.string = n.string.replace(b'001', b'0.2').replace(padZeroes('001'), padZeroes('0.2')) \
.replace(b'0.1', b'0.2').replace(padZeroes('0.1'), padZeroes('0.2'))
ttf["name"].names=names
# `liga` ⇒ `dlig` (Closes #8)
if "GSUB" in ttf:
for fr in ttf["GSUB"].table.FeatureList.FeatureRecord:
fr.FeatureTag = 'dlig' if fr.FeatureTag == 'liga' else fr.FeatureTag
ttf.save(sys.argv[1])
print("Patched {}".format(sys.argv[1]), file=sys.stderr)

View File

@ -0,0 +1,15 @@
include(langs.fea);
include(classes2.fea);
feature calt {
lookup calt1 {
sub @a1 @a1' by @a2;
sub @a2 @a1' by @a3;
sub @a3 @a1' by @a4;
sub @a4 @a1' by @a5;
sub @a5 @a1' by @a6;
sub @a6 @a1' by @a7;
sub @a7 @a1' by @a8;
sub @a8 @a1' by @a9;
} calt1;
} calt;

View File

@ -0,0 +1,15 @@
include(langs.fea);
include(classes2_ita.fea);
feature calt {
lookup calt1 {
sub @a1 @a1' by @a2;
sub @a2 @a1' by @a3;
sub @a3 @a1' by @a4;
sub @a4 @a1' by @a5;
sub @a5 @a1' by @a6;
sub @a6 @a1' by @a7;
sub @a7 @a1' by @a8;
sub @a8 @a1' by @a9;
} calt1;
} calt;

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,9 @@
@a1 = [space exclam quotedbl numbersign dollar percent ampersand quotesingle parenleft parenright asterisk plus comma hyphen period slash zero one two three four five six seven eight nine colon semicolon less equal greater question at A B C D E F G H I J K L M N O P Q R S T U V W X Y Z bracketleft backslash bracketright asciicircum underscore grave a b c d e f g h i j k l m n o p q r s t u v w x y z braceleft bar braceright asciitilde exclamdown cent sterling currency yen brokenbar section dieresis copyright ordfeminine guillemotleft logicalnot uni00AD registered macron degree plusminus uni00B2 uni00B3 acute paragraph periodcentered cedilla uni00B9 ordmasculine guillemotright onequarter onehalf threequarters questiondown Agrave Aacute Acircumflex Atilde Adieresis Aring AE Ccedilla Egrave Eacute Ecircumflex Edieresis Igrave Iacute Icircumflex Idieresis Eth Ntilde Ograve Oacute Ocircumflex Otilde Odieresis multiply Oslash Ugrave Uacute Ucircumflex Udieresis Yacute Thorn germandbls agrave aacute acircumflex atilde adieresis aring ae ccedilla egrave eacute ecircumflex edieresis igrave iacute icircumflex idieresis eth ntilde ograve oacute ocircumflex otilde odieresis divide oslash ugrave uacute ucircumflex udieresis yacute thorn ydieresis Amacron amacron Abreve abreve Aogonek aogonek Cacute cacute Ccircumflex ccircumflex Cdotaccent cdotaccent Ccaron ccaron Dcaron dcaron Dcroat dcroat Emacron emacron Ebreve ebreve Edotaccent edotaccent Eogonek eogonek Ecaron ecaron Gcircumflex gcircumflex Gbreve gbreve Gdotaccent gdotaccent uni0122 uni0123 Hcircumflex hcircumflex Itilde itilde Imacron imacron Ibreve ibreve Iogonek iogonek Idotaccent dotlessi Jcircumflex jcircumflex uni0136 uni0137 Lacute lacute uni013B uni013C Lcaron lcaron uni013F uni0140 Lslash lslash Nacute nacute uni0145 uni0146 Ncaron ncaron Omacron omacron Obreve obreve Ohungarumlaut ohungarumlaut OE oe Racute racute uni0156 uni0157 Rcaron rcaron Sacute sacute Scircumflex scircumflex Scedilla scedilla Scaron scaron uni0162 uni0163 Tcaron tcaron Utilde utilde Umacron umacron Ubreve ubreve Uring uring Uhungarumlaut uhungarumlaut Uogonek uogonek Wcircumflex wcircumflex Ycircumflex ycircumflex Ydieresis Zacute zacute Zdotaccent zdotaccent Zcaron zcaron longs uni01CD uni01CE uni01CF uni01D0 uni01D1 uni01D2 uni01D3 uni01D4 uni01E2 uni01E3 uni01E6 uni01E7 uni01E8 uni01E9 uni01EA uni01EB uni01F4 uni01F5 uni01F8 uni01F9 uni01FC uni01FD uni01FE uni01FF uni0218 uni0219 uni021A uni021B uni0226 uni0227 uni0228 uni0229 uni022E uni022F uni0232 uni0233 dotlessj gravecomb acutecomb circumflexcomb tildecomb uni0304 brevecomb uni0307 uni0308 uni030A uni030B uni030C commabelowcomb uni0327 uni0328 uni0400 uni0401 uni0403 uni0404 uni0405 uni0406 uni0407 uni0408 uni040C uni040D uni040E cyr_A cyr_BE cyr_VE cyr_GHE cyr_DE cyr_IE cyr_ZHE cyr_ZE cyr_I cyr_SHORT_I cyr_KA cyr_EL cyr_EM cyr_EN cyr_O cyr_PE cyr_ER cyr_ES cyr_TE cyr_U cyr_EF cyr_HA cyr_TSE cyr_CHE cyr_SHA cyr_SHCHA cyr_HARD_SIGN cyr_YERU cyr_SOFT_SIGN cyr_E cyr_YU cyr_YA cyr_a cyr_be cyr_ve cyr_ghe cyr_de cyr_ie cyr_zhe cyr_ze cyr_i cyr_short_i cyr_ka cyr_el cyr_em cyr_en cyr_o cyr_pe cyr_er cyr_es cyr_te cyr_u cyr_ef cyr_ha cyr_tse cyr_che cyr_sha cyr_shcha cyr_hard_sign cyr_yeru cyr_soft_sign cyr_e cyr_yu cyr_ya uni0450 uni0451 uni0453 uni0454 uni0455 uni0456 uni0457 uni0458 uni045C uni045D uni045E uni0490 uni0491 uni1E80 uni1E81 uni1E82 uni1E83 uni1E84 uni1E85 uni1EF2 uni1EF3 uni2010 uni2011 figuredash endash emdash quoteleft quoteright quotesinglbase quotereversed quotedblleft quotedblright quotedblbase uni201F dagger daggerdbl bullet ellipsis fraction twoinferior fourinferior Euro phpeso uni215F brevecomb.salt];
@a2 = [space.2 exclam.2 quotedbl.2 numbersign.2 dollar.2 percent.2 ampersand.2 quotesingle.2 parenleft.2 parenright.2 asterisk.2 plus.2 comma.2 hyphen.2 period.2 slash.2 zero.2 one.2 two.2 three.2 four.2 five.2 six.2 seven.2 eight.2 nine.2 colon.2 semicolon.2 less.2 equal.2 greater.2 question.2 at.2 A.2 B.2 C.2 D.2 E.2 F.2 G.2 H.2 I.2 J.2 K.2 L.2 M.2 N.2 O.2 P.2 Q.2 R.2 S.2 T.2 U.2 V.2 W.2 X.2 Y.2 Z.2 bracketleft.2 backslash.2 bracketright.2 asciicircum.2 underscore.2 grave.2 a.2 b.2 c.2 d.2 e.2 f.2 g.2 h.2 i.2 j.2 k.2 l.2 m.2 n.2 o.2 p.2 q.2 r.2 s.2 t.2 u.2 v.2 w.2 x.2 y.2 z.2 braceleft.2 bar.2 braceright.2 asciitilde.2 exclamdown.2 cent.2 sterling.2 currency.2 yen.2 brokenbar.2 section.2 dieresis.2 copyright.2 ordfeminine.2 guillemotleft.2 logicalnot.2 uni00AD.2 registered.2 macron.2 degree.2 plusminus.2 uni00B2.2 uni00B3.2 acute.2 paragraph.2 periodcentered.2 cedilla.2 uni00B9.2 ordmasculine.2 guillemotright.2 onequarter.2 onehalf.2 threequarters.2 questiondown.2 Agrave.2 Aacute.2 Acircumflex.2 Atilde.2 Adieresis.2 Aring.2 AE.2 Ccedilla.2 Egrave.2 Eacute.2 Ecircumflex.2 Edieresis.2 Igrave.2 Iacute.2 Icircumflex.2 Idieresis.2 Eth.2 Ntilde.2 Ograve.2 Oacute.2 Ocircumflex.2 Otilde.2 Odieresis.2 multiply.2 Oslash.2 Ugrave.2 Uacute.2 Ucircumflex.2 Udieresis.2 Yacute.2 Thorn.2 germandbls.2 agrave.2 aacute.2 acircumflex.2 atilde.2 adieresis.2 aring.2 ae.2 ccedilla.2 egrave.2 eacute.2 ecircumflex.2 edieresis.2 igrave.2 iacute.2 icircumflex.2 idieresis.2 eth.2 ntilde.2 ograve.2 oacute.2 ocircumflex.2 otilde.2 odieresis.2 divide.2 oslash.2 ugrave.2 uacute.2 ucircumflex.2 udieresis.2 yacute.2 thorn.2 ydieresis.2 Amacron.2 amacron.2 Abreve.2 abreve.2 Aogonek.2 aogonek.2 Cacute.2 cacute.2 Ccircumflex.2 ccircumflex.2 Cdotaccent.2 cdotaccent.2 Ccaron.2 ccaron.2 Dcaron.2 dcaron.2 Dcroat.2 dcroat.2 Emacron.2 emacron.2 Ebreve.2 ebreve.2 Edotaccent.2 edotaccent.2 Eogonek.2 eogonek.2 Ecaron.2 ecaron.2 Gcircumflex.2 gcircumflex.2 Gbreve.2 gbreve.2 Gdotaccent.2 gdotaccent.2 uni0122.2 uni0123.2 Hcircumflex.2 hcircumflex.2 Itilde.2 itilde.2 Imacron.2 imacron.2 Ibreve.2 ibreve.2 Iogonek.2 iogonek.2 Idotaccent.2 dotlessi.2 Jcircumflex.2 jcircumflex.2 uni0136.2 uni0137.2 Lacute.2 lacute.2 uni013B.2 uni013C.2 Lcaron.2 lcaron.2 uni013F.2 uni0140.2 Lslash.2 lslash.2 Nacute.2 nacute.2 uni0145.2 uni0146.2 Ncaron.2 ncaron.2 Omacron.2 omacron.2 Obreve.2 obreve.2 Ohungarumlaut.2 ohungarumlaut.2 OE.2 oe.2 Racute.2 racute.2 uni0156.2 uni0157.2 Rcaron.2 rcaron.2 Sacute.2 sacute.2 Scircumflex.2 scircumflex.2 Scedilla.2 scedilla.2 Scaron.2 scaron.2 uni0162.2 uni0163.2 Tcaron.2 tcaron.2 Utilde.2 utilde.2 Umacron.2 umacron.2 Ubreve.2 ubreve.2 Uring.2 uring.2 Uhungarumlaut.2 uhungarumlaut.2 Uogonek.2 uogonek.2 Wcircumflex.2 wcircumflex.2 Ycircumflex.2 ycircumflex.2 Ydieresis.2 Zacute.2 zacute.2 Zdotaccent.2 zdotaccent.2 Zcaron.2 zcaron.2 longs.2 uni01CD.2 uni01CE.2 uni01CF.2 uni01D0.2 uni01D1.2 uni01D2.2 uni01D3.2 uni01D4.2 uni01E2.2 uni01E3.2 uni01E6.2 uni01E7.2 uni01E8.2 uni01E9.2 uni01EA.2 uni01EB.2 uni01F4.2 uni01F5.2 uni01F8.2 uni01F9.2 uni01FC.2 uni01FD.2 uni01FE.2 uni01FF.2 uni0218.2 uni0219.2 uni021A.2 uni021B.2 uni0226.2 uni0227.2 uni0228.2 uni0229.2 uni022E.2 uni022F.2 uni0232.2 uni0233.2 dotlessj.2 gravecomb.2 acutecomb.2 circumflexcomb.2 tildecomb.2 uni0304.2 brevecomb.2 uni0307.2 uni0308.2 uni030A.2 uni030B.2 uni030C.2 commabelowcomb.2 uni0327.2 uni0328.2 uni0400.2 uni0401.2 uni0403.2 uni0404.2 uni0405.2 uni0406.2 uni0407.2 uni0408.2 uni040C.2 uni040D.2 uni040E.2 cyr_A.2 cyr_BE.2 cyr_VE.2 cyr_GHE.2 cyr_DE.2 cyr_IE.2 cyr_ZHE.2 cyr_ZE.2 cyr_I.2 cyr_SHORT_I.2 cyr_KA.2 cyr_EL.2 cyr_EM.2 cyr_EN.2 cyr_O.2 cyr_PE.2 cyr_ER.2 cyr_ES.2 cyr_TE.2 cyr_U.2 cyr_EF.2 cyr_HA.2 cyr_TSE.2 cyr_CHE.2 cyr_SHA.2 cyr_SHCHA.2 cyr_HARD_SIGN.2 cyr_YERU.2 cyr_SOFT_SIGN.2 cyr_E.2 cyr_YU.2 cyr_YA.2 cyr_a.2 cyr_be.2 cyr_ve.2 cyr_ghe.2 cyr_de.2 cyr_ie.2 cyr_zhe.2 cyr_ze.2 cyr_i.2 cyr_short_i.2 cyr_ka.2 cyr_el.2 cyr_em.2 cyr_en.2 cyr_o.2 cyr_pe.2 cyr_er.2 cyr_es.2 cyr_te.2 cyr_u.2 cyr_ef.2 cyr_ha.2 cyr_tse.2 cyr_che.2 cyr_sha.2 cyr_shcha.2 cyr_hard_sign.2 cyr_yeru.2 cyr_soft_sign.2 cyr_e.2 cyr_yu.2 cyr_ya.2 uni0450.2 uni0451.2 uni0453.2 uni0454.2 uni0455.2 uni0456.2 uni0457.2 uni0458.2 uni045C.2 uni045D.2 uni045E.2 uni0490.2 uni0491.2 uni1E80.2 uni1E81.2 uni1E82.2 uni1E83.2 uni1E84.2 uni1E85.2 uni1EF2.2 uni1EF3.2 uni2010.2 uni2011.2 figuredash.2 endash.2 emdash.2 quoteleft.2 quoteright.2 quotesinglbase.2 quotereversed.2 quotedblleft.2 quotedblright.2 quotedblbase.2 uni201F.2 dagger.2 daggerdbl.2 bullet.2 ellipsis.2 fraction.2 twoinferior.2 fourinferior.2 Euro.2 phpeso.2 uni215F.2 brevecomb.salt.2];
@a3 = [space.3 exclam.3 quotedbl.3 numbersign.3 dollar.3 percent.3 ampersand.3 quotesingle.3 parenleft.3 parenright.3 asterisk.3 plus.3 comma.3 hyphen.3 period.3 slash.3 zero.3 one.3 two.3 three.3 four.3 five.3 six.3 seven.3 eight.3 nine.3 colon.3 semicolon.3 less.3 equal.3 greater.3 question.3 at.3 A.3 B.3 C.3 D.3 E.3 F.3 G.3 H.3 I.3 J.3 K.3 L.3 M.3 N.3 O.3 P.3 Q.3 R.3 S.3 T.3 U.3 V.3 W.3 X.3 Y.3 Z.3 bracketleft.3 backslash.3 bracketright.3 asciicircum.3 underscore.3 grave.3 a.3 b.3 c.3 d.3 e.3 f.3 g.3 h.3 i.3 j.3 k.3 l.3 m.3 n.3 o.3 p.3 q.3 r.3 s.3 t.3 u.3 v.3 w.3 x.3 y.3 z.3 braceleft.3 bar.3 braceright.3 asciitilde.3 exclamdown.3 cent.3 sterling.3 currency.3 yen.3 brokenbar.3 section.3 dieresis.3 copyright.3 ordfeminine.3 guillemotleft.3 logicalnot.3 uni00AD.3 registered.3 macron.3 degree.3 plusminus.3 uni00B2.3 uni00B3.3 acute.3 paragraph.3 periodcentered.3 cedilla.3 uni00B9.3 ordmasculine.3 guillemotright.3 onequarter.3 onehalf.3 threequarters.3 questiondown.3 Agrave.3 Aacute.3 Acircumflex.3 Atilde.3 Adieresis.3 Aring.3 AE.3 Ccedilla.3 Egrave.3 Eacute.3 Ecircumflex.3 Edieresis.3 Igrave.3 Iacute.3 Icircumflex.3 Idieresis.3 Eth.3 Ntilde.3 Ograve.3 Oacute.3 Ocircumflex.3 Otilde.3 Odieresis.3 multiply.3 Oslash.3 Ugrave.3 Uacute.3 Ucircumflex.3 Udieresis.3 Yacute.3 Thorn.3 germandbls.3 agrave.3 aacute.3 acircumflex.3 atilde.3 adieresis.3 aring.3 ae.3 ccedilla.3 egrave.3 eacute.3 ecircumflex.3 edieresis.3 igrave.3 iacute.3 icircumflex.3 idieresis.3 eth.3 ntilde.3 ograve.3 oacute.3 ocircumflex.3 otilde.3 odieresis.3 divide.3 oslash.3 ugrave.3 uacute.3 ucircumflex.3 udieresis.3 yacute.3 thorn.3 ydieresis.3 Amacron.3 amacron.3 Abreve.3 abreve.3 Aogonek.3 aogonek.3 Cacute.3 cacute.3 Ccircumflex.3 ccircumflex.3 Cdotaccent.3 cdotaccent.3 Ccaron.3 ccaron.3 Dcaron.3 dcaron.3 Dcroat.3 dcroat.3 Emacron.3 emacron.3 Ebreve.3 ebreve.3 Edotaccent.3 edotaccent.3 Eogonek.3 eogonek.3 Ecaron.3 ecaron.3 Gcircumflex.3 gcircumflex.3 Gbreve.3 gbreve.3 Gdotaccent.3 gdotaccent.3 uni0122.3 uni0123.3 Hcircumflex.3 hcircumflex.3 Itilde.3 itilde.3 Imacron.3 imacron.3 Ibreve.3 ibreve.3 Iogonek.3 iogonek.3 Idotaccent.3 dotlessi.3 Jcircumflex.3 jcircumflex.3 uni0136.3 uni0137.3 Lacute.3 lacute.3 uni013B.3 uni013C.3 Lcaron.3 lcaron.3 uni013F.3 uni0140.3 Lslash.3 lslash.3 Nacute.3 nacute.3 uni0145.3 uni0146.3 Ncaron.3 ncaron.3 Omacron.3 omacron.3 Obreve.3 obreve.3 Ohungarumlaut.3 ohungarumlaut.3 OE.3 oe.3 Racute.3 racute.3 uni0156.3 uni0157.3 Rcaron.3 rcaron.3 Sacute.3 sacute.3 Scircumflex.3 scircumflex.3 Scedilla.3 scedilla.3 Scaron.3 scaron.3 uni0162.3 uni0163.3 Tcaron.3 tcaron.3 Utilde.3 utilde.3 Umacron.3 umacron.3 Ubreve.3 ubreve.3 Uring.3 uring.3 Uhungarumlaut.3 uhungarumlaut.3 Uogonek.3 uogonek.3 Wcircumflex.3 wcircumflex.3 Ycircumflex.3 ycircumflex.3 Ydieresis.3 Zacute.3 zacute.3 Zdotaccent.3 zdotaccent.3 Zcaron.3 zcaron.3 longs.3 uni01CD.3 uni01CE.3 uni01CF.3 uni01D0.3 uni01D1.3 uni01D2.3 uni01D3.3 uni01D4.3 uni01E2.3 uni01E3.3 uni01E6.3 uni01E7.3 uni01E8.3 uni01E9.3 uni01EA.3 uni01EB.3 uni01F4.3 uni01F5.3 uni01F8.3 uni01F9.3 uni01FC.3 uni01FD.3 uni01FE.3 uni01FF.3 uni0218.3 uni0219.3 uni021A.3 uni021B.3 uni0226.3 uni0227.3 uni0228.3 uni0229.3 uni022E.3 uni022F.3 uni0232.3 uni0233.3 dotlessj.3 gravecomb.3 acutecomb.3 circumflexcomb.3 tildecomb.3 uni0304.3 brevecomb.3 uni0307.3 uni0308.3 uni030A.3 uni030B.3 uni030C.3 commabelowcomb.3 uni0327.3 uni0328.3 uni0400.3 uni0401.3 uni0403.3 uni0404.3 uni0405.3 uni0406.3 uni0407.3 uni0408.3 uni040C.3 uni040D.3 uni040E.3 cyr_A.3 cyr_BE.3 cyr_VE.3 cyr_GHE.3 cyr_DE.3 cyr_IE.3 cyr_ZHE.3 cyr_ZE.3 cyr_I.3 cyr_SHORT_I.3 cyr_KA.3 cyr_EL.3 cyr_EM.3 cyr_EN.3 cyr_O.3 cyr_PE.3 cyr_ER.3 cyr_ES.3 cyr_TE.3 cyr_U.3 cyr_EF.3 cyr_HA.3 cyr_TSE.3 cyr_CHE.3 cyr_SHA.3 cyr_SHCHA.3 cyr_HARD_SIGN.3 cyr_YERU.3 cyr_SOFT_SIGN.3 cyr_E.3 cyr_YU.3 cyr_YA.3 cyr_a.3 cyr_be.3 cyr_ve.3 cyr_ghe.3 cyr_de.3 cyr_ie.3 cyr_zhe.3 cyr_ze.3 cyr_i.3 cyr_short_i.3 cyr_ka.3 cyr_el.3 cyr_em.3 cyr_en.3 cyr_o.3 cyr_pe.3 cyr_er.3 cyr_es.3 cyr_te.3 cyr_u.3 cyr_ef.3 cyr_ha.3 cyr_tse.3 cyr_che.3 cyr_sha.3 cyr_shcha.3 cyr_hard_sign.3 cyr_yeru.3 cyr_soft_sign.3 cyr_e.3 cyr_yu.3 cyr_ya.3 uni0450.3 uni0451.3 uni0453.3 uni0454.3 uni0455.3 uni0456.3 uni0457.3 uni0458.3 uni045C.3 uni045D.3 uni045E.3 uni0490.3 uni0491.3 uni1E80.3 uni1E81.3 uni1E82.3 uni1E83.3 uni1E84.3 uni1E85.3 uni1EF2.3 uni1EF3.3 uni2010.3 uni2011.3 figuredash.3 endash.3 emdash.3 quoteleft.3 quoteright.3 quotesinglbase.3 quotereversed.3 quotedblleft.3 quotedblright.3 quotedblbase.3 uni201F.3 dagger.3 daggerdbl.3 bullet.3 ellipsis.3 fraction.3 twoinferior.3 fourinferior.3 Euro.3 phpeso.3 uni215F.3 brevecomb.salt.3];
@a4 = [space.4 exclam.4 quotedbl.4 numbersign.4 dollar.4 percent.4 ampersand.4 quotesingle.4 parenleft.4 parenright.4 asterisk.4 plus.4 comma.4 hyphen.4 period.4 slash.4 zero.4 one.4 two.4 three.4 four.4 five.4 six.4 seven.4 eight.4 nine.4 colon.4 semicolon.4 less.4 equal.4 greater.4 question.4 at.4 A.4 B.4 C.4 D.4 E.4 F.4 G.4 H.4 I.4 J.4 K.4 L.4 M.4 N.4 O.4 P.4 Q.4 R.4 S.4 T.4 U.4 V.4 W.4 X.4 Y.4 Z.4 bracketleft.4 backslash.4 bracketright.4 asciicircum.4 underscore.4 grave.4 a.4 b.4 c.4 d.4 e.4 f.4 g.4 h.4 i.4 j.4 k.4 l.4 m.4 n.4 o.4 p.4 q.4 r.4 s.4 t.4 u.4 v.4 w.4 x.4 y.4 z.4 braceleft.4 bar.4 braceright.4 asciitilde.4 exclamdown.4 cent.4 sterling.4 currency.4 yen.4 brokenbar.4 section.4 dieresis.4 copyright.4 ordfeminine.4 guillemotleft.4 logicalnot.4 uni00AD.4 registered.4 macron.4 degree.4 plusminus.4 uni00B2.4 uni00B3.4 acute.4 paragraph.4 periodcentered.4 cedilla.4 uni00B9.4 ordmasculine.4 guillemotright.4 onequarter.4 onehalf.4 threequarters.4 questiondown.4 Agrave.4 Aacute.4 Acircumflex.4 Atilde.4 Adieresis.4 Aring.4 AE.4 Ccedilla.4 Egrave.4 Eacute.4 Ecircumflex.4 Edieresis.4 Igrave.4 Iacute.4 Icircumflex.4 Idieresis.4 Eth.4 Ntilde.4 Ograve.4 Oacute.4 Ocircumflex.4 Otilde.4 Odieresis.4 multiply.4 Oslash.4 Ugrave.4 Uacute.4 Ucircumflex.4 Udieresis.4 Yacute.4 Thorn.4 germandbls.4 agrave.4 aacute.4 acircumflex.4 atilde.4 adieresis.4 aring.4 ae.4 ccedilla.4 egrave.4 eacute.4 ecircumflex.4 edieresis.4 igrave.4 iacute.4 icircumflex.4 idieresis.4 eth.4 ntilde.4 ograve.4 oacute.4 ocircumflex.4 otilde.4 odieresis.4 divide.4 oslash.4 ugrave.4 uacute.4 ucircumflex.4 udieresis.4 yacute.4 thorn.4 ydieresis.4 Amacron.4 amacron.4 Abreve.4 abreve.4 Aogonek.4 aogonek.4 Cacute.4 cacute.4 Ccircumflex.4 ccircumflex.4 Cdotaccent.4 cdotaccent.4 Ccaron.4 ccaron.4 Dcaron.4 dcaron.4 Dcroat.4 dcroat.4 Emacron.4 emacron.4 Ebreve.4 ebreve.4 Edotaccent.4 edotaccent.4 Eogonek.4 eogonek.4 Ecaron.4 ecaron.4 Gcircumflex.4 gcircumflex.4 Gbreve.4 gbreve.4 Gdotaccent.4 gdotaccent.4 uni0122.4 uni0123.4 Hcircumflex.4 hcircumflex.4 Itilde.4 itilde.4 Imacron.4 imacron.4 Ibreve.4 ibreve.4 Iogonek.4 iogonek.4 Idotaccent.4 dotlessi.4 Jcircumflex.4 jcircumflex.4 uni0136.4 uni0137.4 Lacute.4 lacute.4 uni013B.4 uni013C.4 Lcaron.4 lcaron.4 uni013F.4 uni0140.4 Lslash.4 lslash.4 Nacute.4 nacute.4 uni0145.4 uni0146.4 Ncaron.4 ncaron.4 Omacron.4 omacron.4 Obreve.4 obreve.4 Ohungarumlaut.4 ohungarumlaut.4 OE.4 oe.4 Racute.4 racute.4 uni0156.4 uni0157.4 Rcaron.4 rcaron.4 Sacute.4 sacute.4 Scircumflex.4 scircumflex.4 Scedilla.4 scedilla.4 Scaron.4 scaron.4 uni0162.4 uni0163.4 Tcaron.4 tcaron.4 Utilde.4 utilde.4 Umacron.4 umacron.4 Ubreve.4 ubreve.4 Uring.4 uring.4 Uhungarumlaut.4 uhungarumlaut.4 Uogonek.4 uogonek.4 Wcircumflex.4 wcircumflex.4 Ycircumflex.4 ycircumflex.4 Ydieresis.4 Zacute.4 zacute.4 Zdotaccent.4 zdotaccent.4 Zcaron.4 zcaron.4 longs.4 uni01CD.4 uni01CE.4 uni01CF.4 uni01D0.4 uni01D1.4 uni01D2.4 uni01D3.4 uni01D4.4 uni01E2.4 uni01E3.4 uni01E6.4 uni01E7.4 uni01E8.4 uni01E9.4 uni01EA.4 uni01EB.4 uni01F4.4 uni01F5.4 uni01F8.4 uni01F9.4 uni01FC.4 uni01FD.4 uni01FE.4 uni01FF.4 uni0218.4 uni0219.4 uni021A.4 uni021B.4 uni0226.4 uni0227.4 uni0228.4 uni0229.4 uni022E.4 uni022F.4 uni0232.4 uni0233.4 dotlessj.4 gravecomb.4 acutecomb.4 circumflexcomb.4 tildecomb.4 uni0304.4 brevecomb.4 uni0307.4 uni0308.4 uni030A.4 uni030B.4 uni030C.4 commabelowcomb.4 uni0327.4 uni0328.4 uni0400.4 uni0401.4 uni0403.4 uni0404.4 uni0405.4 uni0406.4 uni0407.4 uni0408.4 uni040C.4 uni040D.4 uni040E.4 cyr_A.4 cyr_BE.4 cyr_VE.4 cyr_GHE.4 cyr_DE.4 cyr_IE.4 cyr_ZHE.4 cyr_ZE.4 cyr_I.4 cyr_SHORT_I.4 cyr_KA.4 cyr_EL.4 cyr_EM.4 cyr_EN.4 cyr_O.4 cyr_PE.4 cyr_ER.4 cyr_ES.4 cyr_TE.4 cyr_U.4 cyr_EF.4 cyr_HA.4 cyr_TSE.4 cyr_CHE.4 cyr_SHA.4 cyr_SHCHA.4 cyr_HARD_SIGN.4 cyr_YERU.4 cyr_SOFT_SIGN.4 cyr_E.4 cyr_YU.4 cyr_YA.4 cyr_a.4 cyr_be.4 cyr_ve.4 cyr_ghe.4 cyr_de.4 cyr_ie.4 cyr_zhe.4 cyr_ze.4 cyr_i.4 cyr_short_i.4 cyr_ka.4 cyr_el.4 cyr_em.4 cyr_en.4 cyr_o.4 cyr_pe.4 cyr_er.4 cyr_es.4 cyr_te.4 cyr_u.4 cyr_ef.4 cyr_ha.4 cyr_tse.4 cyr_che.4 cyr_sha.4 cyr_shcha.4 cyr_hard_sign.4 cyr_yeru.4 cyr_soft_sign.4 cyr_e.4 cyr_yu.4 cyr_ya.4 uni0450.4 uni0451.4 uni0453.4 uni0454.4 uni0455.4 uni0456.4 uni0457.4 uni0458.4 uni045C.4 uni045D.4 uni045E.4 uni0490.4 uni0491.4 uni1E80.4 uni1E81.4 uni1E82.4 uni1E83.4 uni1E84.4 uni1E85.4 uni1EF2.4 uni1EF3.4 uni2010.4 uni2011.4 figuredash.4 endash.4 emdash.4 quoteleft.4 quoteright.4 quotesinglbase.4 quotereversed.4 quotedblleft.4 quotedblright.4 quotedblbase.4 uni201F.4 dagger.4 daggerdbl.4 bullet.4 ellipsis.4 fraction.4 twoinferior.4 fourinferior.4 Euro.4 phpeso.4 uni215F.4 brevecomb.salt.4];
@a5 = [space.5 exclam.5 quotedbl.5 numbersign.5 dollar.5 percent.5 ampersand.5 quotesingle.5 parenleft.5 parenright.5 asterisk.5 plus.5 comma.5 hyphen.5 period.5 slash.5 zero.5 one.5 two.5 three.5 four.5 five.5 six.5 seven.5 eight.5 nine.5 colon.5 semicolon.5 less.5 equal.5 greater.5 question.5 at.5 A.5 B.5 C.5 D.5 E.5 F.5 G.5 H.5 I.5 J.5 K.5 L.5 M.5 N.5 O.5 P.5 Q.5 R.5 S.5 T.5 U.5 V.5 W.5 X.5 Y.5 Z.5 bracketleft.5 backslash.5 bracketright.5 asciicircum.5 underscore.5 grave.5 a.5 b.5 c.5 d.5 e.5 f.5 g.5 h.5 i.5 j.5 k.5 l.5 m.5 n.5 o.5 p.5 q.5 r.5 s.5 t.5 u.5 v.5 w.5 x.5 y.5 z.5 braceleft.5 bar.5 braceright.5 asciitilde.5 exclamdown.5 cent.5 sterling.5 currency.5 yen.5 brokenbar.5 section.5 dieresis.5 copyright.5 ordfeminine.5 guillemotleft.5 logicalnot.5 uni00AD.5 registered.5 macron.5 degree.5 plusminus.5 uni00B2.5 uni00B3.5 acute.5 paragraph.5 periodcentered.5 cedilla.5 uni00B9.5 ordmasculine.5 guillemotright.5 onequarter.5 onehalf.5 threequarters.5 questiondown.5 Agrave.5 Aacute.5 Acircumflex.5 Atilde.5 Adieresis.5 Aring.5 AE.5 Ccedilla.5 Egrave.5 Eacute.5 Ecircumflex.5 Edieresis.5 Igrave.5 Iacute.5 Icircumflex.5 Idieresis.5 Eth.5 Ntilde.5 Ograve.5 Oacute.5 Ocircumflex.5 Otilde.5 Odieresis.5 multiply.5 Oslash.5 Ugrave.5 Uacute.5 Ucircumflex.5 Udieresis.5 Yacute.5 Thorn.5 germandbls.5 agrave.5 aacute.5 acircumflex.5 atilde.5 adieresis.5 aring.5 ae.5 ccedilla.5 egrave.5 eacute.5 ecircumflex.5 edieresis.5 igrave.5 iacute.5 icircumflex.5 idieresis.5 eth.5 ntilde.5 ograve.5 oacute.5 ocircumflex.5 otilde.5 odieresis.5 divide.5 oslash.5 ugrave.5 uacute.5 ucircumflex.5 udieresis.5 yacute.5 thorn.5 ydieresis.5 Amacron.5 amacron.5 Abreve.5 abreve.5 Aogonek.5 aogonek.5 Cacute.5 cacute.5 Ccircumflex.5 ccircumflex.5 Cdotaccent.5 cdotaccent.5 Ccaron.5 ccaron.5 Dcaron.5 dcaron.5 Dcroat.5 dcroat.5 Emacron.5 emacron.5 Ebreve.5 ebreve.5 Edotaccent.5 edotaccent.5 Eogonek.5 eogonek.5 Ecaron.5 ecaron.5 Gcircumflex.5 gcircumflex.5 Gbreve.5 gbreve.5 Gdotaccent.5 gdotaccent.5 uni0122.5 uni0123.5 Hcircumflex.5 hcircumflex.5 Itilde.5 itilde.5 Imacron.5 imacron.5 Ibreve.5 ibreve.5 Iogonek.5 iogonek.5 Idotaccent.5 dotlessi.5 Jcircumflex.5 jcircumflex.5 uni0136.5 uni0137.5 Lacute.5 lacute.5 uni013B.5 uni013C.5 Lcaron.5 lcaron.5 uni013F.5 uni0140.5 Lslash.5 lslash.5 Nacute.5 nacute.5 uni0145.5 uni0146.5 Ncaron.5 ncaron.5 Omacron.5 omacron.5 Obreve.5 obreve.5 Ohungarumlaut.5 ohungarumlaut.5 OE.5 oe.5 Racute.5 racute.5 uni0156.5 uni0157.5 Rcaron.5 rcaron.5 Sacute.5 sacute.5 Scircumflex.5 scircumflex.5 Scedilla.5 scedilla.5 Scaron.5 scaron.5 uni0162.5 uni0163.5 Tcaron.5 tcaron.5 Utilde.5 utilde.5 Umacron.5 umacron.5 Ubreve.5 ubreve.5 Uring.5 uring.5 Uhungarumlaut.5 uhungarumlaut.5 Uogonek.5 uogonek.5 Wcircumflex.5 wcircumflex.5 Ycircumflex.5 ycircumflex.5 Ydieresis.5 Zacute.5 zacute.5 Zdotaccent.5 zdotaccent.5 Zcaron.5 zcaron.5 longs.5 uni01CD.5 uni01CE.5 uni01CF.5 uni01D0.5 uni01D1.5 uni01D2.5 uni01D3.5 uni01D4.5 uni01E2.5 uni01E3.5 uni01E6.5 uni01E7.5 uni01E8.5 uni01E9.5 uni01EA.5 uni01EB.5 uni01F4.5 uni01F5.5 uni01F8.5 uni01F9.5 uni01FC.5 uni01FD.5 uni01FE.5 uni01FF.5 uni0218.5 uni0219.5 uni021A.5 uni021B.5 uni0226.5 uni0227.5 uni0228.5 uni0229.5 uni022E.5 uni022F.5 uni0232.5 uni0233.5 dotlessj.5 gravecomb.5 acutecomb.5 circumflexcomb.5 tildecomb.5 uni0304.5 brevecomb.5 uni0307.5 uni0308.5 uni030A.5 uni030B.5 uni030C.5 commabelowcomb.5 uni0327.5 uni0328.5 uni0400.5 uni0401.5 uni0403.5 uni0404.5 uni0405.5 uni0406.5 uni0407.5 uni0408.5 uni040C.5 uni040D.5 uni040E.5 cyr_A.5 cyr_BE.5 cyr_VE.5 cyr_GHE.5 cyr_DE.5 cyr_IE.5 cyr_ZHE.5 cyr_ZE.5 cyr_I.5 cyr_SHORT_I.5 cyr_KA.5 cyr_EL.5 cyr_EM.5 cyr_EN.5 cyr_O.5 cyr_PE.5 cyr_ER.5 cyr_ES.5 cyr_TE.5 cyr_U.5 cyr_EF.5 cyr_HA.5 cyr_TSE.5 cyr_CHE.5 cyr_SHA.5 cyr_SHCHA.5 cyr_HARD_SIGN.5 cyr_YERU.5 cyr_SOFT_SIGN.5 cyr_E.5 cyr_YU.5 cyr_YA.5 cyr_a.5 cyr_be.5 cyr_ve.5 cyr_ghe.5 cyr_de.5 cyr_ie.5 cyr_zhe.5 cyr_ze.5 cyr_i.5 cyr_short_i.5 cyr_ka.5 cyr_el.5 cyr_em.5 cyr_en.5 cyr_o.5 cyr_pe.5 cyr_er.5 cyr_es.5 cyr_te.5 cyr_u.5 cyr_ef.5 cyr_ha.5 cyr_tse.5 cyr_che.5 cyr_sha.5 cyr_shcha.5 cyr_hard_sign.5 cyr_yeru.5 cyr_soft_sign.5 cyr_e.5 cyr_yu.5 cyr_ya.5 uni0450.5 uni0451.5 uni0453.5 uni0454.5 uni0455.5 uni0456.5 uni0457.5 uni0458.5 uni045C.5 uni045D.5 uni045E.5 uni0490.5 uni0491.5 uni1E80.5 uni1E81.5 uni1E82.5 uni1E83.5 uni1E84.5 uni1E85.5 uni1EF2.5 uni1EF3.5 uni2010.5 uni2011.5 figuredash.5 endash.5 emdash.5 quoteleft.5 quoteright.5 quotesinglbase.5 quotereversed.5 quotedblleft.5 quotedblright.5 quotedblbase.5 uni201F.5 dagger.5 daggerdbl.5 bullet.5 ellipsis.5 fraction.5 twoinferior.5 fourinferior.5 Euro.5 phpeso.5 uni215F.5 brevecomb.salt.5];
@a6 = [space.6 exclam.6 quotedbl.6 numbersign.6 dollar.6 percent.6 ampersand.6 quotesingle.6 parenleft.6 parenright.6 asterisk.6 plus.6 comma.6 hyphen.6 period.6 slash.6 zero.6 one.6 two.6 three.6 four.6 five.6 six.6 seven.6 eight.6 nine.6 colon.6 semicolon.6 less.6 equal.6 greater.6 question.6 at.6 A.6 B.6 C.6 D.6 E.6 F.6 G.6 H.6 I.6 J.6 K.6 L.6 M.6 N.6 O.6 P.6 Q.6 R.6 S.6 T.6 U.6 V.6 W.6 X.6 Y.6 Z.6 bracketleft.6 backslash.6 bracketright.6 asciicircum.6 underscore.6 grave.6 a.6 b.6 c.6 d.6 e.6 f.6 g.6 h.6 i.6 j.6 k.6 l.6 m.6 n.6 o.6 p.6 q.6 r.6 s.6 t.6 u.6 v.6 w.6 x.6 y.6 z.6 braceleft.6 bar.6 braceright.6 asciitilde.6 exclamdown.6 cent.6 sterling.6 currency.6 yen.6 brokenbar.6 section.6 dieresis.6 copyright.6 ordfeminine.6 guillemotleft.6 logicalnot.6 uni00AD.6 registered.6 macron.6 degree.6 plusminus.6 uni00B2.6 uni00B3.6 acute.6 paragraph.6 periodcentered.6 cedilla.6 uni00B9.6 ordmasculine.6 guillemotright.6 onequarter.6 onehalf.6 threequarters.6 questiondown.6 Agrave.6 Aacute.6 Acircumflex.6 Atilde.6 Adieresis.6 Aring.6 AE.6 Ccedilla.6 Egrave.6 Eacute.6 Ecircumflex.6 Edieresis.6 Igrave.6 Iacute.6 Icircumflex.6 Idieresis.6 Eth.6 Ntilde.6 Ograve.6 Oacute.6 Ocircumflex.6 Otilde.6 Odieresis.6 multiply.6 Oslash.6 Ugrave.6 Uacute.6 Ucircumflex.6 Udieresis.6 Yacute.6 Thorn.6 germandbls.6 agrave.6 aacute.6 acircumflex.6 atilde.6 adieresis.6 aring.6 ae.6 ccedilla.6 egrave.6 eacute.6 ecircumflex.6 edieresis.6 igrave.6 iacute.6 icircumflex.6 idieresis.6 eth.6 ntilde.6 ograve.6 oacute.6 ocircumflex.6 otilde.6 odieresis.6 divide.6 oslash.6 ugrave.6 uacute.6 ucircumflex.6 udieresis.6 yacute.6 thorn.6 ydieresis.6 Amacron.6 amacron.6 Abreve.6 abreve.6 Aogonek.6 aogonek.6 Cacute.6 cacute.6 Ccircumflex.6 ccircumflex.6 Cdotaccent.6 cdotaccent.6 Ccaron.6 ccaron.6 Dcaron.6 dcaron.6 Dcroat.6 dcroat.6 Emacron.6 emacron.6 Ebreve.6 ebreve.6 Edotaccent.6 edotaccent.6 Eogonek.6 eogonek.6 Ecaron.6 ecaron.6 Gcircumflex.6 gcircumflex.6 Gbreve.6 gbreve.6 Gdotaccent.6 gdotaccent.6 uni0122.6 uni0123.6 Hcircumflex.6 hcircumflex.6 Itilde.6 itilde.6 Imacron.6 imacron.6 Ibreve.6 ibreve.6 Iogonek.6 iogonek.6 Idotaccent.6 dotlessi.6 Jcircumflex.6 jcircumflex.6 uni0136.6 uni0137.6 Lacute.6 lacute.6 uni013B.6 uni013C.6 Lcaron.6 lcaron.6 uni013F.6 uni0140.6 Lslash.6 lslash.6 Nacute.6 nacute.6 uni0145.6 uni0146.6 Ncaron.6 ncaron.6 Omacron.6 omacron.6 Obreve.6 obreve.6 Ohungarumlaut.6 ohungarumlaut.6 OE.6 oe.6 Racute.6 racute.6 uni0156.6 uni0157.6 Rcaron.6 rcaron.6 Sacute.6 sacute.6 Scircumflex.6 scircumflex.6 Scedilla.6 scedilla.6 Scaron.6 scaron.6 uni0162.6 uni0163.6 Tcaron.6 tcaron.6 Utilde.6 utilde.6 Umacron.6 umacron.6 Ubreve.6 ubreve.6 Uring.6 uring.6 Uhungarumlaut.6 uhungarumlaut.6 Uogonek.6 uogonek.6 Wcircumflex.6 wcircumflex.6 Ycircumflex.6 ycircumflex.6 Ydieresis.6 Zacute.6 zacute.6 Zdotaccent.6 zdotaccent.6 Zcaron.6 zcaron.6 longs.6 uni01CD.6 uni01CE.6 uni01CF.6 uni01D0.6 uni01D1.6 uni01D2.6 uni01D3.6 uni01D4.6 uni01E2.6 uni01E3.6 uni01E6.6 uni01E7.6 uni01E8.6 uni01E9.6 uni01EA.6 uni01EB.6 uni01F4.6 uni01F5.6 uni01F8.6 uni01F9.6 uni01FC.6 uni01FD.6 uni01FE.6 uni01FF.6 uni0218.6 uni0219.6 uni021A.6 uni021B.6 uni0226.6 uni0227.6 uni0228.6 uni0229.6 uni022E.6 uni022F.6 uni0232.6 uni0233.6 dotlessj.6 gravecomb.6 acutecomb.6 circumflexcomb.6 tildecomb.6 uni0304.6 brevecomb.6 uni0307.6 uni0308.6 uni030A.6 uni030B.6 uni030C.6 commabelowcomb.6 uni0327.6 uni0328.6 uni0400.6 uni0401.6 uni0403.6 uni0404.6 uni0405.6 uni0406.6 uni0407.6 uni0408.6 uni040C.6 uni040D.6 uni040E.6 cyr_A.6 cyr_BE.6 cyr_VE.6 cyr_GHE.6 cyr_DE.6 cyr_IE.6 cyr_ZHE.6 cyr_ZE.6 cyr_I.6 cyr_SHORT_I.6 cyr_KA.6 cyr_EL.6 cyr_EM.6 cyr_EN.6 cyr_O.6 cyr_PE.6 cyr_ER.6 cyr_ES.6 cyr_TE.6 cyr_U.6 cyr_EF.6 cyr_HA.6 cyr_TSE.6 cyr_CHE.6 cyr_SHA.6 cyr_SHCHA.6 cyr_HARD_SIGN.6 cyr_YERU.6 cyr_SOFT_SIGN.6 cyr_E.6 cyr_YU.6 cyr_YA.6 cyr_a.6 cyr_be.6 cyr_ve.6 cyr_ghe.6 cyr_de.6 cyr_ie.6 cyr_zhe.6 cyr_ze.6 cyr_i.6 cyr_short_i.6 cyr_ka.6 cyr_el.6 cyr_em.6 cyr_en.6 cyr_o.6 cyr_pe.6 cyr_er.6 cyr_es.6 cyr_te.6 cyr_u.6 cyr_ef.6 cyr_ha.6 cyr_tse.6 cyr_che.6 cyr_sha.6 cyr_shcha.6 cyr_hard_sign.6 cyr_yeru.6 cyr_soft_sign.6 cyr_e.6 cyr_yu.6 cyr_ya.6 uni0450.6 uni0451.6 uni0453.6 uni0454.6 uni0455.6 uni0456.6 uni0457.6 uni0458.6 uni045C.6 uni045D.6 uni045E.6 uni0490.6 uni0491.6 uni1E80.6 uni1E81.6 uni1E82.6 uni1E83.6 uni1E84.6 uni1E85.6 uni1EF2.6 uni1EF3.6 uni2010.6 uni2011.6 figuredash.6 endash.6 emdash.6 quoteleft.6 quoteright.6 quotesinglbase.6 quotereversed.6 quotedblleft.6 quotedblright.6 quotedblbase.6 uni201F.6 dagger.6 daggerdbl.6 bullet.6 ellipsis.6 fraction.6 twoinferior.6 fourinferior.6 Euro.6 phpeso.6 uni215F.6 brevecomb.salt.6];
@a7 = [space.7 exclam.7 quotedbl.7 numbersign.7 dollar.7 percent.7 ampersand.7 quotesingle.7 parenleft.7 parenright.7 asterisk.7 plus.7 comma.7 hyphen.7 period.7 slash.7 zero.7 one.7 two.7 three.7 four.7 five.7 six.7 seven.7 eight.7 nine.7 colon.7 semicolon.7 less.7 equal.7 greater.7 question.7 at.7 A.7 B.7 C.7 D.7 E.7 F.7 G.7 H.7 I.7 J.7 K.7 L.7 M.7 N.7 O.7 P.7 Q.7 R.7 S.7 T.7 U.7 V.7 W.7 X.7 Y.7 Z.7 bracketleft.7 backslash.7 bracketright.7 asciicircum.7 underscore.7 grave.7 a.7 b.7 c.7 d.7 e.7 f.7 g.7 h.7 i.7 j.7 k.7 l.7 m.7 n.7 o.7 p.7 q.7 r.7 s.7 t.7 u.7 v.7 w.7 x.7 y.7 z.7 braceleft.7 bar.7 braceright.7 asciitilde.7 exclamdown.7 cent.7 sterling.7 currency.7 yen.7 brokenbar.7 section.7 dieresis.7 copyright.7 ordfeminine.7 guillemotleft.7 logicalnot.7 uni00AD.7 registered.7 macron.7 degree.7 plusminus.7 uni00B2.7 uni00B3.7 acute.7 paragraph.7 periodcentered.7 cedilla.7 uni00B9.7 ordmasculine.7 guillemotright.7 onequarter.7 onehalf.7 threequarters.7 questiondown.7 Agrave.7 Aacute.7 Acircumflex.7 Atilde.7 Adieresis.7 Aring.7 AE.7 Ccedilla.7 Egrave.7 Eacute.7 Ecircumflex.7 Edieresis.7 Igrave.7 Iacute.7 Icircumflex.7 Idieresis.7 Eth.7 Ntilde.7 Ograve.7 Oacute.7 Ocircumflex.7 Otilde.7 Odieresis.7 multiply.7 Oslash.7 Ugrave.7 Uacute.7 Ucircumflex.7 Udieresis.7 Yacute.7 Thorn.7 germandbls.7 agrave.7 aacute.7 acircumflex.7 atilde.7 adieresis.7 aring.7 ae.7 ccedilla.7 egrave.7 eacute.7 ecircumflex.7 edieresis.7 igrave.7 iacute.7 icircumflex.7 idieresis.7 eth.7 ntilde.7 ograve.7 oacute.7 ocircumflex.7 otilde.7 odieresis.7 divide.7 oslash.7 ugrave.7 uacute.7 ucircumflex.7 udieresis.7 yacute.7 thorn.7 ydieresis.7 Amacron.7 amacron.7 Abreve.7 abreve.7 Aogonek.7 aogonek.7 Cacute.7 cacute.7 Ccircumflex.7 ccircumflex.7 Cdotaccent.7 cdotaccent.7 Ccaron.7 ccaron.7 Dcaron.7 dcaron.7 Dcroat.7 dcroat.7 Emacron.7 emacron.7 Ebreve.7 ebreve.7 Edotaccent.7 edotaccent.7 Eogonek.7 eogonek.7 Ecaron.7 ecaron.7 Gcircumflex.7 gcircumflex.7 Gbreve.7 gbreve.7 Gdotaccent.7 gdotaccent.7 uni0122.7 uni0123.7 Hcircumflex.7 hcircumflex.7 Itilde.7 itilde.7 Imacron.7 imacron.7 Ibreve.7 ibreve.7 Iogonek.7 iogonek.7 Idotaccent.7 dotlessi.7 Jcircumflex.7 jcircumflex.7 uni0136.7 uni0137.7 Lacute.7 lacute.7 uni013B.7 uni013C.7 Lcaron.7 lcaron.7 uni013F.7 uni0140.7 Lslash.7 lslash.7 Nacute.7 nacute.7 uni0145.7 uni0146.7 Ncaron.7 ncaron.7 Omacron.7 omacron.7 Obreve.7 obreve.7 Ohungarumlaut.7 ohungarumlaut.7 OE.7 oe.7 Racute.7 racute.7 uni0156.7 uni0157.7 Rcaron.7 rcaron.7 Sacute.7 sacute.7 Scircumflex.7 scircumflex.7 Scedilla.7 scedilla.7 Scaron.7 scaron.7 uni0162.7 uni0163.7 Tcaron.7 tcaron.7 Utilde.7 utilde.7 Umacron.7 umacron.7 Ubreve.7 ubreve.7 Uring.7 uring.7 Uhungarumlaut.7 uhungarumlaut.7 Uogonek.7 uogonek.7 Wcircumflex.7 wcircumflex.7 Ycircumflex.7 ycircumflex.7 Ydieresis.7 Zacute.7 zacute.7 Zdotaccent.7 zdotaccent.7 Zcaron.7 zcaron.7 longs.7 uni01CD.7 uni01CE.7 uni01CF.7 uni01D0.7 uni01D1.7 uni01D2.7 uni01D3.7 uni01D4.7 uni01E2.7 uni01E3.7 uni01E6.7 uni01E7.7 uni01E8.7 uni01E9.7 uni01EA.7 uni01EB.7 uni01F4.7 uni01F5.7 uni01F8.7 uni01F9.7 uni01FC.7 uni01FD.7 uni01FE.7 uni01FF.7 uni0218.7 uni0219.7 uni021A.7 uni021B.7 uni0226.7 uni0227.7 uni0228.7 uni0229.7 uni022E.7 uni022F.7 uni0232.7 uni0233.7 dotlessj.7 gravecomb.7 acutecomb.7 circumflexcomb.7 tildecomb.7 uni0304.7 brevecomb.7 uni0307.7 uni0308.7 uni030A.7 uni030B.7 uni030C.7 commabelowcomb.7 uni0327.7 uni0328.7 uni0400.7 uni0401.7 uni0403.7 uni0404.7 uni0405.7 uni0406.7 uni0407.7 uni0408.7 uni040C.7 uni040D.7 uni040E.7 cyr_A.7 cyr_BE.7 cyr_VE.7 cyr_GHE.7 cyr_DE.7 cyr_IE.7 cyr_ZHE.7 cyr_ZE.7 cyr_I.7 cyr_SHORT_I.7 cyr_KA.7 cyr_EL.7 cyr_EM.7 cyr_EN.7 cyr_O.7 cyr_PE.7 cyr_ER.7 cyr_ES.7 cyr_TE.7 cyr_U.7 cyr_EF.7 cyr_HA.7 cyr_TSE.7 cyr_CHE.7 cyr_SHA.7 cyr_SHCHA.7 cyr_HARD_SIGN.7 cyr_YERU.7 cyr_SOFT_SIGN.7 cyr_E.7 cyr_YU.7 cyr_YA.7 cyr_a.7 cyr_be.7 cyr_ve.7 cyr_ghe.7 cyr_de.7 cyr_ie.7 cyr_zhe.7 cyr_ze.7 cyr_i.7 cyr_short_i.7 cyr_ka.7 cyr_el.7 cyr_em.7 cyr_en.7 cyr_o.7 cyr_pe.7 cyr_er.7 cyr_es.7 cyr_te.7 cyr_u.7 cyr_ef.7 cyr_ha.7 cyr_tse.7 cyr_che.7 cyr_sha.7 cyr_shcha.7 cyr_hard_sign.7 cyr_yeru.7 cyr_soft_sign.7 cyr_e.7 cyr_yu.7 cyr_ya.7 uni0450.7 uni0451.7 uni0453.7 uni0454.7 uni0455.7 uni0456.7 uni0457.7 uni0458.7 uni045C.7 uni045D.7 uni045E.7 uni0490.7 uni0491.7 uni1E80.7 uni1E81.7 uni1E82.7 uni1E83.7 uni1E84.7 uni1E85.7 uni1EF2.7 uni1EF3.7 uni2010.7 uni2011.7 figuredash.7 endash.7 emdash.7 quoteleft.7 quoteright.7 quotesinglbase.7 quotereversed.7 quotedblleft.7 quotedblright.7 quotedblbase.7 uni201F.7 dagger.7 daggerdbl.7 bullet.7 ellipsis.7 fraction.7 twoinferior.7 fourinferior.7 Euro.7 phpeso.7 uni215F.7 brevecomb.salt.7];
@a8 = [space.8 exclam.8 quotedbl.8 numbersign.8 dollar.8 percent.8 ampersand.8 quotesingle.8 parenleft.8 parenright.8 asterisk.8 plus.8 comma.8 hyphen.8 period.8 slash.8 zero.8 one.8 two.8 three.8 four.8 five.8 six.8 seven.8 eight.8 nine.8 colon.8 semicolon.8 less.8 equal.8 greater.8 question.8 at.8 A.8 B.8 C.8 D.8 E.8 F.8 G.8 H.8 I.8 J.8 K.8 L.8 M.8 N.8 O.8 P.8 Q.8 R.8 S.8 T.8 U.8 V.8 W.8 X.8 Y.8 Z.8 bracketleft.8 backslash.8 bracketright.8 asciicircum.8 underscore.8 grave.8 a.8 b.8 c.8 d.8 e.8 f.8 g.8 h.8 i.8 j.8 k.8 l.8 m.8 n.8 o.8 p.8 q.8 r.8 s.8 t.8 u.8 v.8 w.8 x.8 y.8 z.8 braceleft.8 bar.8 braceright.8 asciitilde.8 exclamdown.8 cent.8 sterling.8 currency.8 yen.8 brokenbar.8 section.8 dieresis.8 copyright.8 ordfeminine.8 guillemotleft.8 logicalnot.8 uni00AD.8 registered.8 macron.8 degree.8 plusminus.8 uni00B2.8 uni00B3.8 acute.8 paragraph.8 periodcentered.8 cedilla.8 uni00B9.8 ordmasculine.8 guillemotright.8 onequarter.8 onehalf.8 threequarters.8 questiondown.8 Agrave.8 Aacute.8 Acircumflex.8 Atilde.8 Adieresis.8 Aring.8 AE.8 Ccedilla.8 Egrave.8 Eacute.8 Ecircumflex.8 Edieresis.8 Igrave.8 Iacute.8 Icircumflex.8 Idieresis.8 Eth.8 Ntilde.8 Ograve.8 Oacute.8 Ocircumflex.8 Otilde.8 Odieresis.8 multiply.8 Oslash.8 Ugrave.8 Uacute.8 Ucircumflex.8 Udieresis.8 Yacute.8 Thorn.8 germandbls.8 agrave.8 aacute.8 acircumflex.8 atilde.8 adieresis.8 aring.8 ae.8 ccedilla.8 egrave.8 eacute.8 ecircumflex.8 edieresis.8 igrave.8 iacute.8 icircumflex.8 idieresis.8 eth.8 ntilde.8 ograve.8 oacute.8 ocircumflex.8 otilde.8 odieresis.8 divide.8 oslash.8 ugrave.8 uacute.8 ucircumflex.8 udieresis.8 yacute.8 thorn.8 ydieresis.8 Amacron.8 amacron.8 Abreve.8 abreve.8 Aogonek.8 aogonek.8 Cacute.8 cacute.8 Ccircumflex.8 ccircumflex.8 Cdotaccent.8 cdotaccent.8 Ccaron.8 ccaron.8 Dcaron.8 dcaron.8 Dcroat.8 dcroat.8 Emacron.8 emacron.8 Ebreve.8 ebreve.8 Edotaccent.8 edotaccent.8 Eogonek.8 eogonek.8 Ecaron.8 ecaron.8 Gcircumflex.8 gcircumflex.8 Gbreve.8 gbreve.8 Gdotaccent.8 gdotaccent.8 uni0122.8 uni0123.8 Hcircumflex.8 hcircumflex.8 Itilde.8 itilde.8 Imacron.8 imacron.8 Ibreve.8 ibreve.8 Iogonek.8 iogonek.8 Idotaccent.8 dotlessi.8 Jcircumflex.8 jcircumflex.8 uni0136.8 uni0137.8 Lacute.8 lacute.8 uni013B.8 uni013C.8 Lcaron.8 lcaron.8 uni013F.8 uni0140.8 Lslash.8 lslash.8 Nacute.8 nacute.8 uni0145.8 uni0146.8 Ncaron.8 ncaron.8 Omacron.8 omacron.8 Obreve.8 obreve.8 Ohungarumlaut.8 ohungarumlaut.8 OE.8 oe.8 Racute.8 racute.8 uni0156.8 uni0157.8 Rcaron.8 rcaron.8 Sacute.8 sacute.8 Scircumflex.8 scircumflex.8 Scedilla.8 scedilla.8 Scaron.8 scaron.8 uni0162.8 uni0163.8 Tcaron.8 tcaron.8 Utilde.8 utilde.8 Umacron.8 umacron.8 Ubreve.8 ubreve.8 Uring.8 uring.8 Uhungarumlaut.8 uhungarumlaut.8 Uogonek.8 uogonek.8 Wcircumflex.8 wcircumflex.8 Ycircumflex.8 ycircumflex.8 Ydieresis.8 Zacute.8 zacute.8 Zdotaccent.8 zdotaccent.8 Zcaron.8 zcaron.8 longs.8 uni01CD.8 uni01CE.8 uni01CF.8 uni01D0.8 uni01D1.8 uni01D2.8 uni01D3.8 uni01D4.8 uni01E2.8 uni01E3.8 uni01E6.8 uni01E7.8 uni01E8.8 uni01E9.8 uni01EA.8 uni01EB.8 uni01F4.8 uni01F5.8 uni01F8.8 uni01F9.8 uni01FC.8 uni01FD.8 uni01FE.8 uni01FF.8 uni0218.8 uni0219.8 uni021A.8 uni021B.8 uni0226.8 uni0227.8 uni0228.8 uni0229.8 uni022E.8 uni022F.8 uni0232.8 uni0233.8 dotlessj.8 gravecomb.8 acutecomb.8 circumflexcomb.8 tildecomb.8 uni0304.8 brevecomb.8 uni0307.8 uni0308.8 uni030A.8 uni030B.8 uni030C.8 commabelowcomb.8 uni0327.8 uni0328.8 uni0400.8 uni0401.8 uni0403.8 uni0404.8 uni0405.8 uni0406.8 uni0407.8 uni0408.8 uni040C.8 uni040D.8 uni040E.8 cyr_A.8 cyr_BE.8 cyr_VE.8 cyr_GHE.8 cyr_DE.8 cyr_IE.8 cyr_ZHE.8 cyr_ZE.8 cyr_I.8 cyr_SHORT_I.8 cyr_KA.8 cyr_EL.8 cyr_EM.8 cyr_EN.8 cyr_O.8 cyr_PE.8 cyr_ER.8 cyr_ES.8 cyr_TE.8 cyr_U.8 cyr_EF.8 cyr_HA.8 cyr_TSE.8 cyr_CHE.8 cyr_SHA.8 cyr_SHCHA.8 cyr_HARD_SIGN.8 cyr_YERU.8 cyr_SOFT_SIGN.8 cyr_E.8 cyr_YU.8 cyr_YA.8 cyr_a.8 cyr_be.8 cyr_ve.8 cyr_ghe.8 cyr_de.8 cyr_ie.8 cyr_zhe.8 cyr_ze.8 cyr_i.8 cyr_short_i.8 cyr_ka.8 cyr_el.8 cyr_em.8 cyr_en.8 cyr_o.8 cyr_pe.8 cyr_er.8 cyr_es.8 cyr_te.8 cyr_u.8 cyr_ef.8 cyr_ha.8 cyr_tse.8 cyr_che.8 cyr_sha.8 cyr_shcha.8 cyr_hard_sign.8 cyr_yeru.8 cyr_soft_sign.8 cyr_e.8 cyr_yu.8 cyr_ya.8 uni0450.8 uni0451.8 uni0453.8 uni0454.8 uni0455.8 uni0456.8 uni0457.8 uni0458.8 uni045C.8 uni045D.8 uni045E.8 uni0490.8 uni0491.8 uni1E80.8 uni1E81.8 uni1E82.8 uni1E83.8 uni1E84.8 uni1E85.8 uni1EF2.8 uni1EF3.8 uni2010.8 uni2011.8 figuredash.8 endash.8 emdash.8 quoteleft.8 quoteright.8 quotesinglbase.8 quotereversed.8 quotedblleft.8 quotedblright.8 quotedblbase.8 uni201F.8 dagger.8 daggerdbl.8 bullet.8 ellipsis.8 fraction.8 twoinferior.8 fourinferior.8 Euro.8 phpeso.8 uni215F.8 brevecomb.salt.8];
@a9 = [space.9 exclam.9 quotedbl.9 numbersign.9 dollar.9 percent.9 ampersand.9 quotesingle.9 parenleft.9 parenright.9 asterisk.9 plus.9 comma.9 hyphen.9 period.9 slash.9 zero.9 one.9 two.9 three.9 four.9 five.9 six.9 seven.9 eight.9 nine.9 colon.9 semicolon.9 less.9 equal.9 greater.9 question.9 at.9 A.9 B.9 C.9 D.9 E.9 F.9 G.9 H.9 I.9 J.9 K.9 L.9 M.9 N.9 O.9 P.9 Q.9 R.9 S.9 T.9 U.9 V.9 W.9 X.9 Y.9 Z.9 bracketleft.9 backslash.9 bracketright.9 asciicircum.9 underscore.9 grave.9 a.9 b.9 c.9 d.9 e.9 f.9 g.9 h.9 i.9 j.9 k.9 l.9 m.9 n.9 o.9 p.9 q.9 r.9 s.9 t.9 u.9 v.9 w.9 x.9 y.9 z.9 braceleft.9 bar.9 braceright.9 asciitilde.9 exclamdown.9 cent.9 sterling.9 currency.9 yen.9 brokenbar.9 section.9 dieresis.9 copyright.9 ordfeminine.9 guillemotleft.9 logicalnot.9 uni00AD.9 registered.9 macron.9 degree.9 plusminus.9 uni00B2.9 uni00B3.9 acute.9 paragraph.9 periodcentered.9 cedilla.9 uni00B9.9 ordmasculine.9 guillemotright.9 onequarter.9 onehalf.9 threequarters.9 questiondown.9 Agrave.9 Aacute.9 Acircumflex.9 Atilde.9 Adieresis.9 Aring.9 AE.9 Ccedilla.9 Egrave.9 Eacute.9 Ecircumflex.9 Edieresis.9 Igrave.9 Iacute.9 Icircumflex.9 Idieresis.9 Eth.9 Ntilde.9 Ograve.9 Oacute.9 Ocircumflex.9 Otilde.9 Odieresis.9 multiply.9 Oslash.9 Ugrave.9 Uacute.9 Ucircumflex.9 Udieresis.9 Yacute.9 Thorn.9 germandbls.9 agrave.9 aacute.9 acircumflex.9 atilde.9 adieresis.9 aring.9 ae.9 ccedilla.9 egrave.9 eacute.9 ecircumflex.9 edieresis.9 igrave.9 iacute.9 icircumflex.9 idieresis.9 eth.9 ntilde.9 ograve.9 oacute.9 ocircumflex.9 otilde.9 odieresis.9 divide.9 oslash.9 ugrave.9 uacute.9 ucircumflex.9 udieresis.9 yacute.9 thorn.9 ydieresis.9 Amacron.9 amacron.9 Abreve.9 abreve.9 Aogonek.9 aogonek.9 Cacute.9 cacute.9 Ccircumflex.9 ccircumflex.9 Cdotaccent.9 cdotaccent.9 Ccaron.9 ccaron.9 Dcaron.9 dcaron.9 Dcroat.9 dcroat.9 Emacron.9 emacron.9 Ebreve.9 ebreve.9 Edotaccent.9 edotaccent.9 Eogonek.9 eogonek.9 Ecaron.9 ecaron.9 Gcircumflex.9 gcircumflex.9 Gbreve.9 gbreve.9 Gdotaccent.9 gdotaccent.9 uni0122.9 uni0123.9 Hcircumflex.9 hcircumflex.9 Itilde.9 itilde.9 Imacron.9 imacron.9 Ibreve.9 ibreve.9 Iogonek.9 iogonek.9 Idotaccent.9 dotlessi.9 Jcircumflex.9 jcircumflex.9 uni0136.9 uni0137.9 Lacute.9 lacute.9 uni013B.9 uni013C.9 Lcaron.9 lcaron.9 uni013F.9 uni0140.9 Lslash.9 lslash.9 Nacute.9 nacute.9 uni0145.9 uni0146.9 Ncaron.9 ncaron.9 Omacron.9 omacron.9 Obreve.9 obreve.9 Ohungarumlaut.9 ohungarumlaut.9 OE.9 oe.9 Racute.9 racute.9 uni0156.9 uni0157.9 Rcaron.9 rcaron.9 Sacute.9 sacute.9 Scircumflex.9 scircumflex.9 Scedilla.9 scedilla.9 Scaron.9 scaron.9 uni0162.9 uni0163.9 Tcaron.9 tcaron.9 Utilde.9 utilde.9 Umacron.9 umacron.9 Ubreve.9 ubreve.9 Uring.9 uring.9 Uhungarumlaut.9 uhungarumlaut.9 Uogonek.9 uogonek.9 Wcircumflex.9 wcircumflex.9 Ycircumflex.9 ycircumflex.9 Ydieresis.9 Zacute.9 zacute.9 Zdotaccent.9 zdotaccent.9 Zcaron.9 zcaron.9 longs.9 uni01CD.9 uni01CE.9 uni01CF.9 uni01D0.9 uni01D1.9 uni01D2.9 uni01D3.9 uni01D4.9 uni01E2.9 uni01E3.9 uni01E6.9 uni01E7.9 uni01E8.9 uni01E9.9 uni01EA.9 uni01EB.9 uni01F4.9 uni01F5.9 uni01F8.9 uni01F9.9 uni01FC.9 uni01FD.9 uni01FE.9 uni01FF.9 uni0218.9 uni0219.9 uni021A.9 uni021B.9 uni0226.9 uni0227.9 uni0228.9 uni0229.9 uni022E.9 uni022F.9 uni0232.9 uni0233.9 dotlessj.9 gravecomb.9 acutecomb.9 circumflexcomb.9 tildecomb.9 uni0304.9 brevecomb.9 uni0307.9 uni0308.9 uni030A.9 uni030B.9 uni030C.9 commabelowcomb.9 uni0327.9 uni0328.9 uni0400.9 uni0401.9 uni0403.9 uni0404.9 uni0405.9 uni0406.9 uni0407.9 uni0408.9 uni040C.9 uni040D.9 uni040E.9 cyr_A.9 cyr_BE.9 cyr_VE.9 cyr_GHE.9 cyr_DE.9 cyr_IE.9 cyr_ZHE.9 cyr_ZE.9 cyr_I.9 cyr_SHORT_I.9 cyr_KA.9 cyr_EL.9 cyr_EM.9 cyr_EN.9 cyr_O.9 cyr_PE.9 cyr_ER.9 cyr_ES.9 cyr_TE.9 cyr_U.9 cyr_EF.9 cyr_HA.9 cyr_TSE.9 cyr_CHE.9 cyr_SHA.9 cyr_SHCHA.9 cyr_HARD_SIGN.9 cyr_YERU.9 cyr_SOFT_SIGN.9 cyr_E.9 cyr_YU.9 cyr_YA.9 cyr_a.9 cyr_be.9 cyr_ve.9 cyr_ghe.9 cyr_de.9 cyr_ie.9 cyr_zhe.9 cyr_ze.9 cyr_i.9 cyr_short_i.9 cyr_ka.9 cyr_el.9 cyr_em.9 cyr_en.9 cyr_o.9 cyr_pe.9 cyr_er.9 cyr_es.9 cyr_te.9 cyr_u.9 cyr_ef.9 cyr_ha.9 cyr_tse.9 cyr_che.9 cyr_sha.9 cyr_shcha.9 cyr_hard_sign.9 cyr_yeru.9 cyr_soft_sign.9 cyr_e.9 cyr_yu.9 cyr_ya.9 uni0450.9 uni0451.9 uni0453.9 uni0454.9 uni0455.9 uni0456.9 uni0457.9 uni0458.9 uni045C.9 uni045D.9 uni045E.9 uni0490.9 uni0491.9 uni1E80.9 uni1E81.9 uni1E82.9 uni1E83.9 uni1E84.9 uni1E85.9 uni1EF2.9 uni1EF3.9 uni2010.9 uni2011.9 figuredash.9 endash.9 emdash.9 quoteleft.9 quoteright.9 quotesinglbase.9 quotereversed.9 quotedblleft.9 quotedblright.9 quotedblbase.9 uni201F.9 dagger.9 daggerdbl.9 bullet.9 ellipsis.9 fraction.9 twoinferior.9 fourinferior.9 Euro.9 phpeso.9 uni215F.9 brevecomb.salt.9];

View File

@ -0,0 +1,120 @@
languagesystem DFLT dflt;
languagesystem latn dflt;
languagesystem grek dflt;
languagesystem cyrl dflt;
@zero = [zero zero.2 zero.3 zero.4 zero.5 zero.6 zero.7 zero.8 zero.9];
@one = [one one.2 one.3 one.4 one.5 one.6 one.7 one.8 one.9];
@two = [two two.2 two.3 two.4 two.5 two.6 two.7 two.8 two.9];
@three = [three three.2 three.3 three.4 three.5 three.6 three.7 three.8 three.9];
@four = [four four.2 four.3 four.4 four.5 four.6 four.7 four.8 four.9];
@five = [five five.2 five.3 five.4 five.5 five.6 five.7 five.8 five.9];
@six = [six six.2 six.3 six.4 six.5 six.6 six.7 six.8 six.9];
@seven = [seven seven.2 seven.3 seven.4 seven.5 seven.6 seven.7 seven.8 seven.9];
@eight = [eight eight.2 eight.3 eight.4 eight.5 eight.6 eight.7 eight.8 eight.9];
@nine = [nine nine.2 nine.3 nine.4 nine.5 nine.6 nine.7 nine.8 nine.9];
@zero.dnom = [zero.dnom zero.dnom.2 zero.dnom.3 zero.dnom.4 zero.dnom.5 zero.dnom.6 zero.dnom.7 zero.dnom.8 zero.dnom.9];
@one.dnom = [one.dnom one.dnom.2 one.dnom.3 one.dnom.4 one.dnom.5 one.dnom.6 one.dnom.7 one.dnom.8 one.dnom.9];
@two.dnom = [two.dnom two.dnom.2 two.dnom.3 two.dnom.4 two.dnom.5 two.dnom.6 two.dnom.7 two.dnom.8 two.dnom.9];
@three.dnom = [three.dnom three.dnom.2 three.dnom.3 three.dnom.4 three.dnom.5 three.dnom.6 three.dnom.7 three.dnom.8 three.dnom.9];
@four.dnom = [four.dnom four.dnom.2 four.dnom.3 four.dnom.4 four.dnom.5 four.dnom.6 four.dnom.7 four.dnom.8 four.dnom.9];
@five.dnom = [five.dnom five.dnom.2 five.dnom.3 five.dnom.4 five.dnom.5 five.dnom.6 five.dnom.7 five.dnom.8 five.dnom.9];
@six.dnom = [six.dnom six.dnom.2 six.dnom.3 six.dnom.4 six.dnom.5 six.dnom.6 six.dnom.7 six.dnom.8 six.dnom.9];
@seven.dnom = [seven.dnom seven.dnom.2 seven.dnom.3 seven.dnom.4 seven.dnom.5 seven.dnom.6 seven.dnom.7 seven.dnom.8 seven.dnom.9];
@eight.dnom = [eight.dnom eight.dnom.2 eight.dnom.3 eight.dnom.4 eight.dnom.5 eight.dnom.6 eight.dnom.7 eight.dnom.8 eight.dnom.9];
@nine.dnom = [nine.dnom nine.dnom.2 nine.dnom.3 nine.dnom.4 nine.dnom.5 nine.dnom.6 nine.dnom.7 nine.dnom.8 nine.dnom.9];
@zero.numr = [zero.numr zero.numr.2 zero.numr.3 zero.numr.4 zero.numr.5 zero.numr.6 zero.numr.7 zero.numr.8 zero.numr.9];
@one.numr = [one.numr one.numr.2 one.numr.3 one.numr.4 one.numr.5 one.numr.6 one.numr.7 one.numr.8 one.numr.9];
@two.numr = [two.numr two.numr.2 two.numr.3 two.numr.4 two.numr.5 two.numr.6 two.numr.7 two.numr.8 two.numr.9];
@three.numr = [three.numr three.numr.2 three.numr.3 three.numr.4 three.numr.5 three.numr.6 three.numr.7 three.numr.8 three.numr.9];
@four.numr = [four.numr four.numr.2 four.numr.3 four.numr.4 four.numr.5 four.numr.6 four.numr.7 four.numr.8 four.numr.9];
@five.numr = [five.numr five.numr.2 five.numr.3 five.numr.4 five.numr.5 five.numr.6 five.numr.7 five.numr.8 five.numr.9];
@six.numr = [six.numr six.numr.2 six.numr.3 six.numr.4 six.numr.5 six.numr.6 six.numr.7 six.numr.8 six.numr.9];
@seven.numr = [seven.numr seven.numr.2 seven.numr.3 seven.numr.4 seven.numr.5 seven.numr.6 seven.numr.7 seven.numr.8 seven.numr.9];
@eight.numr = [eight.numr eight.numr.2 eight.numr.3 eight.numr.4 eight.numr.5 eight.numr.6 eight.numr.7 eight.numr.8 eight.numr.9];
@nine.numr = [nine.numr nine.numr.2 nine.numr.3 nine.numr.4 nine.numr.5 nine.numr.6 nine.numr.7 nine.numr.8 nine.numr.9];
@dnom = [@zero.dnom @one.dnom @two.dnom @three.dnom @four.dnom @five.dnom @six.dnom @seven.dnom @eight.dnom @nine.dnom];
@numr = [@zero.numr @one.numr @two.numr @three.numr @four.numr @five.numr @six.numr @seven.numr @eight.numr @nine.numr];
@ordn = [@zero @one @two @three @four @five @six @seven @eight @nine];
feature frac {
lookup fracf {
sub slash by fraction;
} fracf;
lookup fracs {
sub @ordn' fraction by @numr;
sub fraction @ordn' by @dnom;
sub @dnom @ordn' by @dnom;
} fracs;
lookup fracn {
sub @ordn' @numr by @numr;
} fracn;
lookup fracn3 {
sub @ordn' @numr @numr by @numr;
} fracn3;
lookup fracn4 {
sub @ordn' @numr @numr @numr by @numr;
} fracn4;
lookup fracn5 {
sub @ordn' @numr @numr @numr @numr by @numr;
} fracn5;
lookup fracn6 {
sub @ordn' @numr @numr @numr @numr @numr by @numr;
} fracn6;
lookup fracn7 {
sub @ordn' @numr @numr @numr @numr @numr @numr by @numr;
} fracn7;
lookup fracn8 {
sub @ordn' @numr @numr @numr @numr @numr @numr @numr by @numr;
} fracn8;
lookup fracn9 {
sub @ordn' @numr @numr @numr @numr @numr @numr @numr @numr by @numr;
} fracn9;
lookup fracn10 {
sub @ordn' @numr @numr @numr @numr @numr @numr @numr @numr @numr by @numr;
} fracn10;
lookup fracq {
pos @numr fraction -150;
pos fraction @dnom -150;
pos @numr @numr -150;
pos @dnom @dnom -150;
} fracq;
} frac;
@geresh = [geresh geresh.2 geresh.3 geresh.4];
@gershayim = [gershayim gershayim.2 gershayim.3 gershayim.4];
@yud = [yud yud.2 yud.3 yud.4];
@vav = [vav vav.2 vav.3 vav.4];
@vav_vav = [vav_vav vav_vav.2 vav_vav.3 vav_vav.4];
@yud_vav = [yud_vav yud_vav.2 yud_vav.3 yud_vav.4];
@yud_yud = [yud_yud yud_yud.2 yud_yud.3 yud_yud.4];
@f = [f f.2 f.3 f.4];
@i = [i i.2 i.3 i.4];
@l = [l l.2 l.3 l.4];
feature liga {
lookup ligahebrew {
sub @geresh @geresh by gershayim;
sub @yud @yud by yud_yud;
sub @vav @vav by vav_vav;
sub @yud @vav by yud_vav;
} ligahebrew;
lookup ligalatin {
sub @f @i by fi;
sub @f @l by fl;
} ligalatin;
} liga;

View File

@ -0,0 +1,18 @@
import unicodedata as ud
import fontforge
f=fontforge.fonts()[0]
WIDTH=547
f.ascent -= 300
f.descent -= 300
for g in f.glyphs("encoding"):
if ud.category( chr(abs(g.unicode)) ) == "Mn":
g.width = 0
for i in range (2,10):
try: f[g.glyphname+".{}".format(str(i))].width = 0
except: pass
else:
g.width = WIDTH
for i in range (2,10):
try: f[g.glyphname+".{}".format(str(i))].width = WIDTH
except: pass

View File

@ -0,0 +1,7 @@
languagesystem DFLT dflt;
languagesystem latn dflt;
languagesystem grek dflt;
languagesystem cyrl dflt;
languagesystem armn dflt;
languagesystem hebr dflt;
languagesystem geor dflt;

View File

@ -0,0 +1,26 @@
import fontforge
f=fontforge.fonts()[0]
f.ascent+=300
f.descent+=300
for g in f.glyphs("encoding"):
if g.glyphname == ".notdef": continue
if g.glyphname.endswith(".2"): break # loop-around
if g.glyphname.startswith("NameMe"): break # ignore junkies
origglyphname = g.glyphname
for j in range(1,10):
if j!=1: g=f.createChar(-1,origglyphname+"."+str(j))
print("Trying {} \u2026".format(g.glyphname))
g.clear()
try:
# Change this line as needed, depending on where the glyph bitmaps are
g.importOutlines("buildI/styleB/"+origglyphname+".{}.png".format(j))
except:
print("Failed to import {}".format(g.glyphname))
g.autoTrace()
g.clearBackground()
g.right_side_bearing=547

View File

@ -0,0 +1,28 @@
import fontforge
import subprocess
import sys
S=sys.argv[1]
ita=sys.argv[2] if len(sys.argv) >= 2 else ''
f=fontforge.open("TT{}.sfd".format("_"+ita if len(ita) > 0 else ""))
from itertools import zip_longest # for Python 3.x
def grouper(n, iterable, padvalue=None):
"grouper(3, 'abcdefg', 'x') --> ('a','b','c'), ('d','e','f'), ('g','x','x')"
return zip_longest(*[iter(iterable)]*n, fillvalue=padvalue)
f.ascent+=300
f.descent+=300
G = list()
for g in f.glyphs("encoding"):
if g.glyphname == ".notdef": continue
if g.glyphname.endswith(".2"): break # loop-around
G.append(g.glyphname)
f.save("TT{}_{}.sfd".format(ita,S))
f.close()
for gL in grouper(100, G):
glyphs = "\n".join([e for e in gL if e is not None])
pr = subprocess.Popen(["fontforge", "-lang=py", "-script", "styleChunk_sub.py", S, ita], stdin=subprocess.PIPE, bufsize=0)
pr.communicate(glyphs.encode("ascii"))

View File

@ -0,0 +1,28 @@
import fontforge
import sys
S=sys.argv[1]
ita=sys.argv[2] if len(sys.argv) >= 2 else ''
f=fontforge.open("TT{}_{}.sfd".format(ita, S))
print("Opened file")
for gO in sys.stdin.readlines():
g = f.createMappedChar(gO.strip())
if g.glyphname == ".notdef": continue
if g.glyphname.endswith(".2"): break # loop-around
origglyphname = g.glyphname
for j in range(1,10):
if j!=1: g=f.createChar(-1,origglyphname+"."+str(j))
print("Trying {} \u2026".format(g.glyphname))
g.clear()
try:
g.importOutlines("build{}/style{}/{}.{}.png".format("I" if ita == "ita" else ita,S,origglyphname,j))
except:
print("Failed to import {}".format(g.glyphname))
g.autoTrace()
g.clearBackground()
g.right_side_bearing=547
f.save()
f.close()
print("Font closed")

View File

@ -0,0 +1,3 @@
To build the WOFF2 files from the TTF's, do:
ls | parallel --progress woff2_compress

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 139 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 135 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 151 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 142 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 415 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 456 KiB

View File

@ -0,0 +1 @@
../dist/

View File

@ -0,0 +1,103 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>TT2020 | More Information</title>
<style>img{width:42em}</style>
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body>
<h2>DOWNLOAD.</h2>
<p>
<a href="https://github.com/ctrlcctrlv/TT2020/archive/master.zip">Download all fonts & documentation</a>, or:
</p>
<h2><span style="color:rgba(1,1,1,0)">&#x30c;</span>DOWNLOAD INDIVI<span style="color:rgba(1,1,1,0)">&#x30c;</span>DUAL STYLES.</h2>
<p>
In general, the TTF is most useful. However, if you will be using my fonts on your website, use the WOFF2 to save on your bandwidth bill. :-)
</p>
<p>
All of the fonts on this page are licensed under the <a href="https://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=OFL#5667e9e4">SIL Open Font License</a>, version 1.1.<br/>
These documentation pages are licensed under the <a href="https://creativecommons.org/licenses/by/3.0/">Creative Commons Attribution 3.0 License</a>.
</p>
<!-- === Begin output from fonts.sh === -->
<h2>Base Style</h2>
<h3>Regular</h3>
<img src="TT2020Base-Regular.png">
<a href="../dist/TT2020Base-Regular.ttf">TT2020Base-Regular.ttf</a>
164K<br/>
<a href="../dist/TT2020Base-Regular.woff2">TT2020Base-Regular.woff2</a>
64K<br/>
<h3>Italic</h3>
<img src="TT2020Base-Italic.png">
<a href="../dist/TT2020Base-Italic.ttf">TT2020Base-Italic.ttf</a>
72K<br/>
<a href="../dist/TT2020Base-Italic.woff2">TT2020Base-Italic.woff2</a>
32K<br/>
<h2>Style B</h2>
<h3>Regular</h3>
<img src="TT2020StyleB-Regular.png">
<a href="../dist/TT2020StyleB-Regular.ttf">TT2020StyleB-Regular.ttf</a>
3.5M<br/>
<a href="../dist/TT2020StyleB-Regular.woff2">TT2020StyleB-Regular.woff2</a>
1.9M<br/>
<h3>Italic</h3>
<img src="TT2020StyleB-Italic.png">
<a href="../dist/TT2020StyleB-Italic.ttf">TT2020StyleB-Italic.ttf</a>
4.2M<br/>
<a href="../dist/TT2020StyleB-Italic.woff2">TT2020StyleB-Italic.woff2</a>
1.9M<br/>
<h2>Style D</h2>
<h3>Regular</h3>
<img src="TT2020StyleD-Regular.png">
<a href="../dist/TT2020StyleD-Regular.ttf">TT2020StyleD-Regular.ttf</a>
2.9M<br/>
<a href="../dist/TT2020StyleD-Regular.woff2">TT2020StyleD-Regular.woff2</a>
844K<br/>
<h3>Italic</h3>
<img src="TT2020StyleD-Italic.png">
<a href="../dist/TT2020StyleD-Italic.ttf">TT2020StyleD-Italic.ttf</a>
3.7M<br/>
<a href="../dist/TT2020StyleD-Italic.woff2">TT2020StyleD-Italic.woff2</a>
1.4M<br/>
<h2>Style E</h2>
<h3>Regular</h3>
<img src="TT2020StyleE-Regular.png">
<a href="../dist/TT2020StyleE-Regular.ttf">TT2020StyleE-Regular.ttf</a>
3.3M<br/>
<a href="../dist/TT2020StyleE-Regular.woff2">TT2020StyleE-Regular.woff2</a>
1.8M<br/>
<h3>Italic</h3>
<img src="TT2020StyleE-Italic.png">
<a href="../dist/TT2020StyleE-Italic.ttf">TT2020StyleE-Italic.ttf</a>
4.1M<br/>
<a href="../dist/TT2020StyleE-Italic.woff2">TT2020StyleE-Italic.woff2</a>
1.8M<br/>
<h2>Style F</h2>
<h3>Regular</h3>
<img src="TT2020StyleF-Regular.png">
<a href="../dist/TT2020StyleF-Regular.ttf">TT2020StyleF-Regular.ttf</a>
84M<br/>
<a href="../dist/TT2020StyleF-Regular.woff2">TT2020StyleF-Regular.woff2</a>
31M<br/>
<a href="../dist/TT2020StyleF-Regular-ASCII.ttf">TT2020StyleF-Regular-ASCII.ttf</a>
9.0M<br/>
<a href="../dist/TT2020StyleF-Regular-ASCII.woff2">TT2020StyleF-Regular-ASCII.woff2</a>
3.4M<br/>
<h2>Style G</h2>
<h3>Regular</h3>
<img src="TT2020StyleG-Regular.png">
<a href="../dist/TT2020StyleG-Regular.ttf">TT2020StyleG-Regular.ttf</a>
96M<br/>
<a href="../dist/TT2020StyleG-Regular.woff2">TT2020StyleG-Regular.woff2</a>
19M<br/>
<a href="../dist/TT2020StyleG-Regular-ASCII.ttf">TT2020StyleG-Regular-ASCII.ttf</a>
11M<br/>
<a href="../dist/TT2020StyleG-Regular-ASCII.woff2">TT2020StyleG-Regular-ASCII.woff2</a>
2.3M<br/>
<!-- End output from fonts.sh -->
</p>
<hr>
<p>Content &copy; Fredrick R. Brennan, originally released on 1 January 2020</p>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 161 KiB

View File

@ -0,0 +1,46 @@
#!/bin/bash
echo '<!-- === Begin output from fonts.sh === -->'
for f in ../dist/*.ttf;
do
s='../dist/'
r=""
ff=${f/$s/$r}
fs=${ff/%\.ttf/$r}
if [[ $fs =~ "ASCII" || $fs =~ "Italic" ]]; then continue; fi
STYLE=`echo $fs | sed -E -e 's/.*Style([A-Za-z0-9])+-.*/\1/'`
if [[ ${#STYLE} -eq 1 ]]; then
echo "<h2>Style $STYLE</h2>"
else
echo "<h2>Base Style</h2>"
fi
filesize() {
printf `du -h "$1" | cut -f1`
printf "<br/>"
printf "\n"
}
H3="<h3>Regular</h3>"
echo $H3;
convert -font "$f" -pointsize 288 label:'Beekeepers QqGgRrAa\nMMMM ЖЖЖЖ אאאלף' "$fs".png
echo "<img src=\"""$fs".png"\">"
VAR='<a href="'$f'">'$ff'</a>'
echo $VAR;
filesize "${f}"
WOFF2="${VAR//ttf/woff2}";
echo $WOFF2;
filesize "${f//ttf/woff2}"
if [[ -f "${f/Regular/Italic}" ]]; then
convert -font "${f/Regular/Italic}" -pointsize 288 label:'Beekeepers QqGgRrAa\nMMMM ЖЖЖЖ אאאלף' "${fs/Regular/Italic}".png
echo "${H3/Regular/Italic}";
echo "<img src=\"""${fs/Regular/Italic}".png"\">"
echo "${VAR//Regular/Italic}"; filesize "${f/Regular/Italic}"; echo "${WOFF2//Regular/Italic}"; W2="${f/Regular/Italic}"; W2="${W2//ttf/woff2}"; filesize $W2;
fi
if [[ -f "${f/Regular/Regular-ASCII}" ]]; then echo "${VAR//Regular/Regular-ASCII}"; filesize "${f/Regular/Regular-ASCII}"; echo "${WOFF2//Regular/Regular-ASCII}"; W2="${f/Regular/Regular-ASCII}"; W2="${W2//ttf/woff2}"; filesize $W2; fi
done
echo '<!-- End output from fonts.sh -->'

View File

@ -0,0 +1,205 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>TT2020</title>
<style type="text/css">
@keyframes spincube {
from,to { transform: rotateX(0deg) }
25% { transform: rotateX(90deg); }
50% { transform: rotateX(180deg); }
75% { transform: rotateX(270deg); }
100% { transform: rotateX(360deg); }
}
.cubespinner {
animation-name: spincube;
/*animation-timing-function: ease-in-out;*/
animation-timing-function: cubic-bezier(1.0, 0.05, 0.05, 1.0);
animation-iteration-count: infinite;
animation-duration: 25s;
transform-style: preserve-3d;
transform-origin: 0.655em 0.655em 0;
}
.stage {
width: 800px;
height: 120px;
}
.cubespinner div {
width: 800px;
position: absolute;
border: 1px solid #ccc;
background: rgba(255,255,255,1.0);
box-shadow: inset 0 0 20px rgba(0,0,0,0.2);
line-height: 120px;
text-align: center;
font-size: 100px;
}
.cubespinner .face1 {
transform: translateZ(0.6em);
}
.cubespinner .face2 {
transform: rotateY(90deg) translateZ(0.6em);
}
.cubespinner .face3 {
transform: rotateY(0deg) rotateX(90deg) translateZ(0.6em);
}
.cubespinner .face4 {
transform: rotateY(180deg) rotateZ(180deg) translateZ(0.6em);
}
.cubespinner .face5 {
transform: rotateY(-90deg) rotateZ(90deg) translateZ(0.6em);
}
.cubespinner .face6 {
transform: rotateX(-90deg) translateZ(0.6em);
}
</style>
<style>
@font-face {
font-family: TTE;
src: url(dist/TT2020StyleE-Regular.woff2);
}
@font-face {
font-family: TTD;
src: url(dist/TT2020StyleD-Regular.woff2);
}
@font-face {
font-family: TTB;
src: url(dist/TT2020StyleB-Regular.woff2);
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: TTB_ita;
src: url(dist/TT2020StyleB-Italic.woff2);
font-weight: normal;
font-style: italic, oblique;
}
@font-face {
font-family: TTF;
src: url(dist/TT2020StyleF-Regular-ASCII.woff2);
}
@font-face {
font-family: TTG;
src: url(dist/TT2020StyleG-Regular-ASCII.woff2);
}
@font-face {
font-family: TT;
src: url(dist/TT2020Base-Regular.woff2);
}
*{font-display:block}
p{margin:0;margin-top:50px}
body {font-family:TT;font-size:100px}
h1{font-family:TTB;font-weight:normal;font-size:400px;text-align:center;margin-bottom:0px;margin-top:0px}
hr{margin:15px}
.slogan{text-align:center;font-family:TTB;line-height:1.15}
em{font-family:TTB_ita;font-style:normal}
.dl {text-align:center}
.dl a:hover{font-family:TTB_ita;line-height:.9}
@media screen and (max-width: 1776px) {
h1 {
font-size:200px;
}
.dl { font-size:100px }
.cubespinner div, .slogan {
font-size:70px
}
.cubespinner, .stage {
height:80px;
width:450px;
}
.cubespinner div {
height:80px;
width:450px;
line-height:80px;
overflow:hidden;
}
}
@media screen and (max-width: 770px) {
h1 {
font-size:100px;
}
.dl { font-size:36px }
.cubespinner div, .slogan {
font-size:35px
}
.cubespinner, .stage {
height:35px;
width:250px;
}
.cubespinner div {
height:35px;
width:250px;
line-height:35px;
overflow:hidden;
}
}
</style>
</head>
<body>
<h1>TT2020-</h1>
<div class="slogan">
<div style="display:inline-block;vertical-align:0.2em">the</div>
<div class="stage" style="display:inline-block">
<div class="cubespinner">
<div class="face1" style="font-family:TTF">advanced</div>
<div class="face3" style="font-family:TTD">spontaneous</div>
<div class="face4" style="font-family:TTG"><span>open source</span></div>
<div class="face6" style="font-family:TTE">multilingual</div>
</div>
</div>
<div><em>typewriter font family</em> for a new decade.</div>
</div>
<hr>
<div class="dl"><a href="download.html">Download</a> <a href="moreinfo.html">More Info</a></div>
<!--
<p>TT2020 is an advanced, multilingual and free typewriter font family for a new decade.</p>
<p>תת ה'תש"ף הוא продвинутый, многоязычный և անվճար γραμματοσειρά γραφομηχανής նոր տասնամյակի համար:</p>
<p>MMMMMMMMMM &Ntilde;&Ntilde;&Ntilde;&Ntilde;&Ntilde;&Ntilde;&Ntilde;&Ntilde;&Ntilde;&Ntilde; $$$$$$$$$$ ?????????? <span style="font-feature-settings: 'frac'">88/33</span></p>-->
<!--
<span style="font-family:TTD;">
<p>Mamma&rsquo;s sisters, (nuns,) in a nunnery abide.</p>
</span>
<p>Mamma&rsquo;s sisters, (nuns,) in a nunnery abide.</p>
<span style="font-family:TTD;">
<p>Matagal talaga ang buhay; kaya dapat tayo laging mag-enjoy.</p>
<p>Nga deti në det të ndritshëm, Nga majë mali në majë mali</p>
<p>Жук жужжит над абажуром, Жужжит жужелица, Жужжит, кружится.</p>
<p>En tres tristes trastos tragaban trigo tres tristes tigres.</p>
<p>¿Qué tigre trigaba más? Todos trigaban igual (sino yo).</p>
</span>
-->
<p></p>
</body>
<script>
tt=document.querySelector("h1")
console.log(tt.innerHTML)
var i=j=0;
u=function(){
i++;j++;
if (i>10)i=0;
tt.innerHTML=("<span style='color:white'>q</span>".repeat(i))+"TT2020-"
tt.style.marginLeft = "-"+(i*0.548)+"em"
styles=new Array("TTB", "TTD", "TTE", "TTF", "TTG");
s=Math.floor(j/20)%5
tt.style.fontFamily=styles[s]
}
setInterval(u, 500)
</script>
</html>

View File

@ -0,0 +1,69 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>TT2020 | More Information</title>
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body>
<h2>THE PROBLEM.</h2>
<p>
Most typewriter fonts out there are hopelessly unrealistic&mdash;especially the popular freeware ones, most of them made in the early 2000&rsquo;s.
</p>
<p>
What's worse, the typewriter is now so old that many (mostly young) people don't even <em>know</em> that the output is unrealistic!!
</p>
<p>
The main problem is that an analog typewriter is incapable of producing the same output every time. Even the IBM Selectric, one of the most mechanically sophisticated typewriters ever produced, is incapable of doing this. However, most people are not trying to imitate an IBM Selectric; instead they are trying to imitate much older typewriters such as the Underwood &numero;5.
</p>
<p>
I had the idea for this font for a while, but bearing in mind how much work it would be to recreate, and how many other projects I had to do, I put it off &amp; put it off. Then, one day in Q4 2019, I saw <em>Joker</em>, a very popular film. At the climax of the film, the eponymous Joker is reading typewritten documents.
</p>
<p>
<img src="problem1.jpg">
</p>
<p>
<img src="problem2.jpg">
</p>
<p>
The absurd lack of realism displayed here let me know that I could put this project off no longer. In case you don't see anything wrong, let me try to help:
<ul>
<li>The letters are of different sizes in the first image. That, quite simply, would never happen. Only at the end of the era did typewriters even have changable type elements (&ldquo;fonts&rdquo;), certainly the typewriter clumsily being imitated here wouldn't have had them. Look especially at the word &laquo;was&raquo;, that huge &lsaquo;a&rsaquo; is completely unrealistic.</li>
<li>In the second image, there are three &lsaquo;N&rsaquo;&rsquo;s. Yet, they all look exactly the same. A real typewriter can, quite rarely, have one of its letters damaged, or misaligned, such that that letter regularly makes an inferior strike to all the other letters. However, this degree of regularity is <em>impossible</em>; could Underwood or Remington have acheived it, they would have leapt for joy. It is therefore clearly a digital facsimile and not a real typewritten document.
</ul>
</p>
<p>
If you still can't see it, as <a href="https://www.reddit.com/r/typography/comments/ei3gr7/tt2020_is_an_advanced_open_source_hyperrealistic/fcnw7kv/">u/Bureaucrat_Conrad on Reddit</a> wasn't able to, simply compare the images in the movie to an old-school typewriter font, <a href="https://www.1001fonts.com/carbontype-font.html">CarbonType</a>, &copy; 2004 Vic Fieger, which has one glyph per character:<br>
<img src="problem4.png" style="width:20em">
<img src="problem2.jpg" style="width:20em">
</p>
<p>
It is abundantly clear that this is the font they used, and no typewriter was involved in the production of this scene, even though the documents were the primary object of the scene.
</p>
<p>While working on the project, incredibly, another bad typewriter scene intruded upon my life. I don't often sit around and watch movies, so I suppose there are only two possibilities:
<ol type="a">
<li> There are so many of these unrealistic typewritten documents in late-2010&rsquo;s cinema that almost any movie with a typewritten document in it will be hopelessly unrealistic, <em>or</em></li>
<li> The universe, nay, God himself, was urging me on to complete this project in lieu of others I could finish!</li>
</ol>
</p>
<p>Behold, <em>The Irishman</em> and its &lsaquo;W&rsaquo;&rsquo;s:</p>
<p>
<img src="problem3.jpg">
</p>
<p>In case you still continue to doubt that I am right about how analog typewriter outlook appears, let me display below a sampling of it before I discuss my solution to this vexing issue.</p>
<hr>
<p>
Notice especially the dissimilarity of the &laquo;a&raquo;&rsquo;s&mdash;<br/>
<img src="sampling1.jpg" width="720"><br/>
(Image courtesy <a href="https://repository.tcu.edu/handle/116099117/25873">Texas Christian University&mdash;Mary Couts Burnett Library</a>)
</p>
<p>
Notice especially the dissimilarity of the CAPITAL LETTERS&mdash;<br/>
<img src="sampling2.jpg" width="720"><br/>
(Image courtesy <a href="https://munk.org/typecast/2011/03/11/1920-underwood-5/">Theodore Munk</a>)
<hr>
<a href="moreinfo2.html">NEXT PAGE: &raquo;&raquo; My Solution &raquo;&raquo;</a>
<hr>
<p>Content &copy; Fredrick R. Brennan, originally released on 1 January 2020</p>
</body>
</html>

View File

@ -0,0 +1,61 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>TT2020 | More Information</title>
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body>
<h2>MY SOLUTION.</h2>
<p>
While it would be ideal for the font itself to contain code through which it could create a (near-) infinite number of similar-looking glyphs, that is not possible in an OpenType font.<sup style="position:absolute">&dagger;</sup>&nbsp;&nbsp;My first inspiration was <em>FF Duper</em>, a plucky little proprietary font developed by Martin Wenzel in 2009. <em>FF Duper</em>, however, works via hundreds of GSUB subtables; while I tried to follow Wenzel's lead in this regard, I eventually realized that for my font it was not going to be possible; the layout would be far too slow and the GSUB table far too large.
</p>
<p>The solution came to me after an IRC chat with my extremely patient friend Skef Iterum (thank you Skef). Instead of large tables and variable numbers of alternate glyphs, acquiesce, and include <em>n</em> (I decided on 9) versions of each glyph, even such glyphs as &ldquo;space&rdquo;. Then, define classes <em>@a1</em> through <em>@a9</em> which include a list of all glyphs in the font. For example, <em>@a2</em> begins as:<br>
<code><em>@a2</em> = [space.2 exclam.2 quotedbl.2 numbersign.2 dollar.2 percent.2 ampersand.2 quotesingle.2 parenleft.2 parenright.2 asterisk.2plus.2 comma.2 hyphen.2 period.2 slash.2 zero.2 one.2 two.2 three. 2 four.2 five.2 six.2 seven.2 eight.2 nine.2 colon.2 semicolon.2 less.2 equal.2 greater.2 question.2 at.2 A.2 B.2 C.2 D.2 E.2 F.2 G.2 H.2 I.2 J.2 K.2 L.2 M.2 N.2 O.2 P.2 Q.2 &hellip;</code>
Having these classes, we can then do this:
<code>
feature calt {<br/>
&nbsp;&nbsp;&nbsp;&nbsp;lookup calt1 {<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sub @a1 @a1' by @a2;<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sub @a2 @a1' by @a3;<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sub @a3 @a1' by @a4;<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sub @a4 @a1' by @a5;<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sub @a5 @a1' by @a6;<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sub @a6 @a1' by @a7;<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sub @a7 @a1' by @a8;<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sub @a8 @a1' by @a9;<br/>
&nbsp;&nbsp;&nbsp;&nbsp;} calt1;<br/>
} calt;
</code>
And do our layout with a single subtable! This is of course only pseudo-random, but it's, almost all of the time, &ldquo;good enough,&rdquo; and with a higher <em>n</em> hereon <em>m</em> it becomes more and more realistic. Perhaps, indeed, only popular glyphs would need have the full number of <em>m</em> versions; &ldquo;unpopular&rdquo; glyphs, when a version of index <em>i</em> is requested and <em>i</em> &gt; <em>n</em>, the glyph could simply be a reference to the glyph of index <em>i</em> mod <em>n</em>.<br/>
</p>
<p>
As it stands though, what we have is good enough for an initial version. The guts of the system only obviously spill out with carefully chosen inputs, e.g.:<br>
<span style="font-size:4em;line-height:1.5em">QBEE<span style="color:#ee0000">K</span>E<span style="color:#0000ee">E</span>PINBEE<span style="color:#ee0000">K</span>E<span style="color:#0000ee">E</span>PIN </span>
</p>
<p>
<img src="ff.png" style="width:42em">
</p>
<p>
The letters highlighted in red and blue are the same because they are nine characters apart. The computer tokenizes the string to glyph-names as <em>Q B.2 E.3 E.4 <span style="color:#ee0000">K.5</span> E.6 <span style="color:#0000ee">E.7</span> P.8 I.9 N B.2 E.3 E.4 <span style="color:#ee0000">K.5</span> E.6 <span style="color:#0000ee">E.7</span> P.8 I.9 N</em>.
</p>
<p>
Each distinct font style is built from a base font and a base SFD; for the regular style, <em>TT.sfd</em> (based on IBM Selectric Pica 10 Pitch), and the italic, <em>TT_ita.sfd</em> (based on IBM Selectric Light Italic 12 Pitch).
<ol>
<li>First, we need an SVG of each glyph image. So, we ask FontForge to give us one.</li>
<li>We have two choices. We can either <ul style="list-style:'&bullet;&nbsp;'"><li>write an Inkscape script to roughen up the glyph but keeping it as a vector, or</li> <li>we can export it to PNG and roughen it up as a bitmap. So far all &laquo;style&raquo;s do the latter, but I haven't ruled out the former forever. The important thing about the script is that it must be pseudo-random, initialized with a seed, so that we get the same output each time for the same seed. Right now, all the scripts are GIMP scripts (or rely on GIMP's plumbling via GEGL), and this means it can take a long time to generate each glyph @ a high DPI, muchless nine versions of each glyph. I'm interested in making a script which would use OpenGL shaders on the input bitmap instead.</li></ul></li>
<li>Re-import the glyph back into FontForge, followed by the other <em>n</em> copies of the glyph.</li>
<li>Merge the OpenType layout features, the most important one of which is &ldquo;Contextual Alternates&rdquo;, (&laquo;calt&raquo;).</li>
</ol>
</p>
<p> &dagger; Assuming that one is using one of the commonplace OpenType layout engines of late 2019, such as HarfBuzz.
</p>
<hr>
<a href="download.html">NEXT PAGE: &raquo;&raquo; Download the Fonts &raquo;&raquo;</a>
<hr>
<p>Content &copy; Fredrick R. Brennan, originally released on 1 January 2020</p>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 384 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 140 KiB

View File

@ -0,0 +1,27 @@
@font-face {
font-family: TTB;
src: url(dist/TT2020StyleB-Regular.woff2);
font-weight:bold;
}
@font-face {
font-family: TTE;
src: url(dist/TT2020StyleE-Regular.woff2);
font-style: normal;
}
@font-face {
font-family: TTE;
src: url(dist/TT2020StyleE-Italic.woff2);
font-weight: normal;
font-style: italic;
}
*{font-display:block}
p{margin:0;margin-top:1.1em;line-height:1em}
h2 {font-family:TTB}
body {font-family:TTE;max-width:42em;font-size:1.5em}
em{font-size:1em}
code{font-family:TTE;padding:1.5em;display:block;color:#888}
@media screen and (max-width: 1776px) {
}
@media screen and (max-width: 770px) {
}

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 715 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 250 KiB

Binary file not shown.

Binary file not shown.