bedstead/bedstead.c
Ben Harris 1bbf25bf26 Fill in disunified mathematical operators and punctuation
Table 22-5 in Unicode 15.0 lists a number of mathematical operators
that have been disunified from punctuation characters because in some
fonts they might look different or because they otherwise need
different handling.  In some cases Bedstead only had a glyph for one
of the two characters.  Now we have both in all cases.  Here's what
happened in each case:

U+002D HYPHEN vs U+2122 MINUS SIGN: both already present and
different.

U+003F SOLIDUS vs U+2215 DIVISION SLASH: U+003F copied as U+2215.

U+005C REVERSE SOLIDUS vs U+2216 SET MINUS: U+005C copied as U+2216.

U+002A ASTERISK vs U+2217 ASTERISK OPERATOR: U+002A copied as U+2217.

U+25E6 WHITE BULLET vs U+2218 RING OPERATOR: new U+25E6 designed based
on U+2022 BULLET.  It's identical to U+25AB WHITE SMALL SQUARE but I
think that's reasonable.  Bullets represent a font's preference and
are likely to be identical to some geometric shape.

U+007C VERTICAL LINE vs U+2223 DIVIDES: both already present and
identical.

U+2016 DOUBLE VERTICAL LINE vs U+2225 PARALLEL TO: both already
present and identical.

U+003A COLON vs U+2236 RATIO: new U+2236 drawn one pixel higher than
U+003A.

U+007E TILDE vs U+223C TILDE OPERATOR: both already present and
different.

U+00B7 MIDDLE DOT vs U+22C5 DOT OPERATOR: U+00B7 copied as U+22C5.
2024-05-05 10:16:04 +01:00

3393 lines
160 KiB
C

/*
* Many of the character bitmaps below formed the typeface embodied in
* the SAA5050 series of character-generator chips originally made and
* sold by British company Mullard in the early 1980s. Copyright in the
* typeface will still be owned by Mullard's corporate successors, but
* under section 55 of the Copyright Designs and Patents Act 1988 that
* copyright is no longer infringed by the production or use of
* articles specifically designed or adapted for producing material in
* that typeface.
*
* The rest of the glyphs, and all of the code in this file, were
* written by Ben Harris <bjh21@bjh21.me.uk>, Simon Tatham
* <anakin@pobox.com>, and Marnanel Thurman <marnanel@thurman.org.uk>
* between 2009 and 2022.
*
* To the extent possible under law, Ben Harris, Simon Tatham, and
* Marnanel Thurman have dedicated all copyright and related and
* neighboring rights to this software and the embodied typeface to
* the public domain worldwide. This software and typeface are
* distributed without any warranty.
*
* You should have received a copy of the CC0 Public Domain Dedication
* along with this software. If not, see
* <http://creativecommons.org/publicdomain/zero/1.0/>.
*/
/*
* This is a program to construct an outline font from a bitmap. It's
* based on the character-rounding algorithm of the Mullard SAA5050
* series of Teletext character generators, and thus works best on
* character shapes in the same style of those of the SAA5050. This
* file includes all of the glyphs from the SAA5050, SAA5051, SAA5052,
* SAA5053, SAA5054, SAA5055, SAA5056, and SAA5057. The output is a
* Spline Font Database file suitable for feeding to Fontforge.
*
* The character-smoothing algorithm of the SAA5050 and friends is
* a fairly simple means of expanding a 5x9 pixel character to 10x18
* pixels for use on an interlaced display. All it does is to detect
* 2x2 clumps of pixels containing a diagonal line and add a couple of
* subpixels to it, like this:
*
* . # -> . . # # -> . . # # or # . -> # # . . -> # # . .
* # . . . # # . # # # . # # # . . # # # .
* # # . . # # # . . . # # . # # #
* # # . . # # . . . . # # . . # #
*
* This is applied to every occurrence of these patterns, even when
* they overlap, and the result is that thin diagonal lines are
* smoothed out while other features mostly remain the same.
*
* One way of extending this towards continuity would be to repeatedly
* double the resolution and add more pixels to diagonals each time,
* but this ends up with the diagonals being much too heavy. Instead,
* in places where the SAA5050 would add pixels, this program adds a
* largeish triangle to each unfilled pixel, and removes a small
* triangle from each filled one, something like this:
*
* . # -> . . # # -> . . / # or # . -> # # . . -> # \ . .
* # . . . # # . / # / . # # # . . \ # \ .
* # # . . / # / . . . # # . \ # \
* # # . . # / . . . . # # . . \ #
*
* The position of the lines is such that the diagonal stroke is the
* same width as a horizontal or vertical stroke (assuming square
* pixels). There are a few additional complications, in that the
* trimming of filled pixels can leave odd gaps where a diagonal stem
* joins another one, so the code detects this and doesn't trim in
* these cases:
*
* . # # -> . . # # # # -> . . / # # # -> . . / # # #
* # . . . . # # # # . / # / # # . / # # # #
* # # . . . . / # / . . . / # / . . .
* # # . . . . # / . . . . # / . . . .
*
* That is the interesting part of the program, and is in the dochar()
* function. Most of the rest is just dull geometry to join all the
* bits together into a sensible outline. Much of the code is wildly
* inefficient -- O(n^2) algorithms aren't much of a problem when you
* have at most a few thousand points to deal with.
*
* A rather nice feature of the outlines produced by this program is
* that when rasterised at precisely 10 or 20 pixels high, they
* produce the input and output respectively of the character-rounding
* process. While there are obious additional smoothings that could
* be applied, doing so would probably lose this nice property.
*
* The glyph bitmaps included below include all the ones from the various
* members of the SAA5050 family that I know about. They are as shown
* in the datasheet, and the English ones have been checked against a
* real SAA5050. Occasionally, different languages have different
* glyphs for the same character -- these are represented as
* alternates, with the default being the glyph that looks best.
*
* There are some extra glyphs included as well, some derived from
* standard ones and some made from whole cloth. They are built on
* the same 5x9 matrix as the originals, and processed in the same way.
*/
#include <assert.h>
#include <ctype.h>
#include <errno.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define XSIZE 6
#define YSIZE 10
/*
* Design parameters. These can vary between fonts in the Bedstead family.
*
* To faithfully represent the output of an SAA5050, we need to know a
* little about TV pixel aspect ratios:
*
* http://www.lurkertech.com/lg/video-systems/#sqnonsq
*
* The SAA5050 can be used to drive both 480i ("NTSC") and 576i
* ("PAL") displays. In 480i, industry convention is that you get
* square pixels with a pixel clock of 12+3/11 MHz. In 576i, you need
* 14.75 MHz. The SAA5050 takes a nominal 6MHz clock and uses both
* edges to output subpixels (duty cycle between 0.4 and 0.6). This
* means that the nominal pixel aspect ratios are 12+3/11:12 for 480i
* and 14.75:12 for 576i. These correspond to pixel widths of 102.3
* and 122.9 respectively.
*
* 102.3 is close enough to 100 that we may as well just use square
* pixels, which will work better on modern displays. Similarly,
* 122.9 is close to 125 and keeping the widths as simple fractions
* makes the fonts easier to work with.
*
* Double-height mode requires fonts half the usual width, hence the
* existence of ultra condensed and extra condensed forms. The other
* two widths just fill in the gap with the obvious fractions of the
* normal width.
*/
static struct width {
char const * option;
char const * suffix;
double xpix;
int ttfwidth;
} const widths[] = {
{
"--normal",
"",
100, /* xpix */
5, /* ttfwidth */
},
{
"--ultra-condensed",
" Ultra Condensed",
50, /* xpix */
1, /* ttfwidth */
},
{
"--extra-condensed",
" Extra Condensed",
62.5, /* xpix */
2, /* ttfwidth */
},
{
"--condensed",
" Condensed",
75, /* xpix */
3, /* ttfwidth */
},
{
"--semi-condensed",
" Semi Condensed",
87.5, /* xpix */
4, /* ttfwidth */
},
{
"--extended",
" Extended",
125, /* xpix */
7, /* ttfwidth */
},
};
static int const nwidths = sizeof(widths) / sizeof(widths[0]);
struct width const *width = &widths[0];
/* Size of output pixels in font design units (usually 1000/em) */
#define XPIX (width->xpix)
#define YPIX 100
/* Internally, we work in pixels 100 design units square */
#define XPIX_S 100
#define YPIX_S 100
#define XSCALE ((double)XPIX_S / (double)XPIX)
#define YSCALE ((double)YPIX_S / (double)YPIX)
/* Position of diagonal lines within pixels */
/* 29 is approximately 100 * (1-1/sqrt(2)) */
#define XQTR_S 29
#define YQTR_S 29
static struct weight {
char const *option;
char const *suffix;
int weight; /* Expressed in internal units */
int ttfweight;
} const weights[] = {
{
"--medium",
"",
0,
500,
},
{
"--light",
" Light",
2 * XQTR_S - 100,
300,
},
{
"--bold",
" Bold",
+50,
700,
},
};
static int const nweights = sizeof(weights) / sizeof(weights[0]);
struct weight const *weight = &weights[0];
static void dochar(char const data[YSIZE], unsigned flags);
static void dochar_plotter(char const data[YSIZE], unsigned flags);
static void domosaic(unsigned code, bool sep);
static void domosaic4(unsigned code, bool sep);
static void doalias(char const *alias_of);
static void dopanose(void);
static void glyph_complement(void);
/* U(N) sets the code point and name of a glyph not in AGLFN */
#define U(N) 0x ## N, 0x ## N >= 0x10000 ? "u" #N : "uni" #N
#define ALIAS(alias, canonical) {{},-1,alias,0,canonical}
static struct glyph {
char data[YSIZE];
int unicode;
char const *name;
unsigned int flags;
#define SEP 0x01 /* Separated graphics */
#define MOS6 0x02 /* 6-cell mosaic graphics character */
#define MOS4 0x04 /* 4-cell mosaic graphics character */
#define SEP6 (SEP | MOS6)
#define SEP4 (SEP | MOS4)
char const *alias_of;
} const glyphs[] = {
/*
* The first batch of glyphs comes from the code tables at the end of
* the Mullard SAA5050 series datasheet, dated July 1982.
*/
/* US ASCII (SAA5055) character set */
{{000,000,000,000,000,000,000,000,000}, 0x0020, "space" },
{{004,004,004,004,004,000,004,000,000}, 0x0021, "exclam" },
{{012,012,012,000,000,000,000,000,000}, 0x0022, "quotedbl" },
{{012,012,037,012,037,012,012,000,000}, 0x0023, "numbersign" },
{{016,025,024,016,005,025,016,000,000}, 0x0024, "dollar" },
{{030,031,002,004,010,023,003,000,000}, 0x0025, "percent" },
{{010,024,024,010,025,022,015,000,000}, 0x0026, "ampersand" },
{{004,004,010,000,000,000,000,000,000}, 0x2019, "quoteright" },
{{002,004,010,010,010,004,002,000,000}, 0x0028, "parenleft" },
{{010,004,002,002,002,004,010,000,000}, 0x0029, "parenright" },
{{004,025,016,004,016,025,004,000,000}, 0x002a, "asterisk" },
{{000,004,004,037,004,004,000,000,000}, 0x002b, "plus" },
{{000,000,000,000,000,004,004,010,000}, 0x002c, "comma"},
{{000,000,000,016,000,000,000,000,000}, 0x002d, "hyphen" },
{{000,000,000,000,000,000,004,000,000}, 0x002e, "period"},
{{000,001,002,004,010,020,000,000,000}, 0x002f, "slash" },
{{004,012,021,021,021,012,004,000,000}, 0x0030, "zero" },
{{004,014,004,004,004,004,016,000,000}, 0x0031, "one" },
{{016,021,001,006,010,020,037,000,000}, 0x0032, "two" },
{{037,001,002,006,001,021,016,000,000}, 0x0033, "three" },
{{002,006,012,022,037,002,002,000,000}, 0x0034, "four" },
{{037,020,036,001,001,021,016,000,000}, 0x0035, "five" },
{{006,010,020,036,021,021,016,000,000}, 0x0036, "six" },
{{037,001,002,004,010,010,010,000,000}, 0x0037, "seven" },
{{016,021,021,016,021,021,016,000,000}, 0x0038, "eight" },
{{016,021,021,017,001,002,014,000,000}, 0x0039, "nine" },
{{000,000,004,000,000,000,004,000,000}, 0x003a, "colon"},
{{000,000,004,000,000,004,004,010,000}, 0x003b, "semicolon"},
{{002,004,010,020,010,004,002,000,000}, 0x003c, "less" },
{{000,000,037,000,037,000,000,000,000}, 0x003d, "equal" },
{{010,004,002,001,002,004,010,000,000}, 0x003e, "greater" },
{{016,021,002,004,004,000,004,000,000}, 0x003f, "question" },
{{016,021,027,025,027,020,016,000,000}, 0x0040, "at" },
{{004,012,021,021,037,021,021,000,000}, 0x0041, "A" },
{{036,021,021,036,021,021,036,000,000}, 0x0042, "B" },
{{016,021,020,020,020,021,016,000,000}, 0x0043, "C" },
{{036,021,021,021,021,021,036,000,000}, 0x0044, "D" },
{{037,020,020,036,020,020,037,000,000}, 0x0045, "E" },
{{037,020,020,036,020,020,020,000,000}, 0x0046, "F" },
{{016,021,020,020,023,021,017,000,000}, 0x0047, "G" },
{{021,021,021,037,021,021,021,000,000}, 0x0048, "H" },
{{016,004,004,004,004,004,016,000,000}, 0x0049, "I" },
{{001,001,001,001,001,021,016,000,000}, 0x004a, "J" },
{{021,022,024,030,024,022,021,000,000}, 0x004b, "K" },
{{020,020,020,020,020,020,037,000,000}, 0x004c, "L" },
{{021,033,025,025,021,021,021,000,000}, 0x004d, "M" },
{{021,021,031,025,023,021,021,000,000}, 0x004e, "N" },
{{016,021,021,021,021,021,016,000,000}, 0x004f, "O" },
{{036,021,021,036,020,020,020,000,000}, 0x0050, "P" },
{{016,021,021,021,025,022,015,000,000}, 0x0051, "Q" },
{{036,021,021,036,024,022,021,000,000}, 0x0052, "R" },
{{016,021,020,016,001,021,016,000,000}, 0x0053, "S" },
{{037,004,004,004,004,004,004,000,000}, 0x0054, "T" },
{{021,021,021,021,021,021,016,000,000}, 0x0055, "U" },
{{021,021,021,012,012,004,004,000,000}, 0x0056, "V" },
{{021,021,021,025,025,025,012,000,000}, 0x0057, "W" },
{{021,021,012,004,012,021,021,000,000}, 0x0058, "X" },
{{021,021,012,004,004,004,004,000,000}, 0x0059, "Y" },
{{037,001,002,004,010,020,037,000,000}, 0x005a, "Z" },
{{017,010,010,010,010,010,017,000,000}, 0x005b, "bracketleft" },
{{000,020,010,004,002,001,000,000,000}, 0x005c, "backslash" },
{{036,002,002,002,002,002,036,000,000}, 0x005d, "bracketright" },
{{004,012,021,000,000,000,000,000,000}, 0x005e, "asciicircum" },
{{000,000,000,000,000,000,037,000,000}, 0x005f, "underscore" },
{{004,004,002,000,000,000,000,000,000}, 0x201b, "quotereversed" },
{{000,000,016,001,017,021,017,000,000}, 0x0061, "a" },
{{020,020,036,021,021,021,036,000,000}, 0x0062, "b" },
{{000,000,017,020,020,020,017,000,000}, 0x0063, "c" },
{{001,001,017,021,021,021,017,000,000}, 0x0064, "d" },
{{000,000,016,021,037,020,016,000,000}, 0x0065, "e" },
{{002,004,004,016,004,004,004,000,000}, 0x0066, "f" },
{{000,000,017,021,021,021,017,001,016}, 0x0067, "g" },
{{020,020,036,021,021,021,021,000,000}, 0x0068, "h" },
{{004,000,014,004,004,004,016,000,000}, 0x0069, "i" },
{{004,000,004,004,004,004,004,004,010}, 0x006a, "j" },
{{010,010,011,012,014,012,011,000,000}, 0x006b, "k" },
{{014,004,004,004,004,004,016,000,000}, 0x006c, "l" },
{{000,000,032,025,025,025,025,000,000}, 0x006d, "m" },
{{000,000,036,021,021,021,021,000,000}, 0x006e, "n" },
{{000,000,016,021,021,021,016,000,000}, 0x006f, "o" },
{{000,000,036,021,021,021,036,020,020}, 0x0070, "p" },
{{000,000,017,021,021,021,017,001,001}, 0x0071, "q" },
{{000,000,013,014,010,010,010,000,000}, 0x0072, "r" },
{{000,000,017,020,016,001,036,000,000}, 0x0073, "s" },
{{004,004,016,004,004,004,002,000,000}, 0x0074, "t" },
{{000,000,021,021,021,021,017,000,000}, 0x0075, "u" },
{{000,000,021,021,012,012,004,000,000}, 0x0076, "v" },
{{000,000,021,021,025,025,012,000,000}, 0x0077, "w" },
{{000,000,021,012,004,012,021,000,000}, 0x0078, "x" },
{{000,000,021,021,021,021,017,001,016}, 0x0079, "y" },
{{000,000,037,002,004,010,037,000,000}, 0x007a, "z" },
{{003,004,004,010,004,004,003,000,000}, 0x007b, "braceleft" },
{{004,004,004,000,004,004,004,000,000}, 0x00a6, "brokenbar" },
{{030,004,004,002,004,004,030,000,000}, 0x007d, "braceright" },
{{010,025,002,000,000,000,000,000,000}, 0x007e, "asciitilde" },
{{037,037,037,037,037,037,037,000,000}, 0x25a0, "filledbox" },
/* Extra characters found in the English (SAA5050) character set */
{{006,011,010,034,010,010,037,000,000}, 0x00a3, "sterling" },
{{004,004,004,000,000,000,000,000,000}, 0x0027, "quotesingle" },
{{000,004,010,037,010,004,000,000,000}, 0x2190, "arrowleft" },
{{020,020,020,020,026,001,002,004,007}, 0x00bd, "onehalf" },
{{000,004,002,037,002,004,000,000,000}, 0x2192, "arrowright" },
{{000,004,016,025,004,004,000,000,000}, 0x2191, "arrowup" },
{{000,000,000,037,000,000,000,000,000}, 0x2014, "emdash" },
{{010,010,010,010,011,003,005,007,001}, 0x00bc, "onequarter" },
{{012,012,012,012,012,012,012,000,000}, 0x2016, "dblverticalbar" },
{{030,004,030,004,031,003,005,007,001}, 0x00be, "threequarters" },
{{000,004,000,037,000,004,000,000,000}, 0x00f7, "divide" },
/* Extra characters found in the German (SAA5051) character set */
{{000,000,000,000,000,010,010,020,000}, 0xf1d0, "comma.saa5051" },
{{000,000,000,000,000,014,014,000,000}, 0xf1d1, "period.saa5051" },
{{000,000,000,010,000,000,010,000,000}, 0xf1d2, "colon.saa5051" },
{{000,000,010,000,000,010,010,020,000}, 0xf1d3, "semicolon.saa5051" },
{{016,021,020,016,021,016,001,021,016}, 0x00a7, "section" },
{{012,000,016,021,037,021,021,000,000}, 0x00c4, "Adieresis" },
{{012,000,016,021,021,021,016,000,000}, 0x00d6, "Odieresis" },
{{012,000,021,021,021,021,016,000,000}, 0x00dc, "Udieresis" },
{{006,011,006,000,000,000,000,000,000}, 0x00b0, "degree" },
{{012,000,016,001,017,021,017,000,000}, 0x00e4, "adieresis" },
{{000,012,000,016,021,021,016,000,000}, 0x00f6, "odieresis" },
{{000,012,000,021,021,021,017,000,000}, 0x00fc, "udieresis" },
{{014,022,022,026,021,021,026,020,020}, 0x00df, "germandbls" },
/* Extra characters found in the Swedish (SAA5052) character set */
{{000,000,021,016,012,016,021,000,000}, 0x00a4, "currency" },
{{002,004,037,020,036,020,037,000,000}, 0x00c9, "Eacute" },
{{016,011,011,011,011,011,016,000,000}, 0xf1d4, "D.saa5052" },
{{010,010,010,010,010,010,017,000,000}, 0xf1d5, "L.saa5052" },
{{004,000,016,021,037,021,021,000,000}, 0x00c5, "Aring" },
{{002,004,016,021,037,020,016,000,000}, 0x00e9, "eacute" },
{{004,000,016,001,017,021,017,000,000}, 0x00e5, "aring" },
/* Extra characters found in the Italian (SAA5053) character set */
{{000,000,017,020,020,020,017,002,004}, 0x00e7, "ccedilla" },
{{010,004,021,021,021,021,017,000,000}, 0x00f9, "ugrave" },
{{010,004,016,001,017,021,017,000,000}, 0x00e0, "agrave" },
{{010,004,000,016,021,021,016,000,000}, 0x00f2, "ograve" },
{{010,004,016,021,037,020,016,000,000}, 0x00e8, "egrave" },
{{010,004,000,014,004,004,016,000,000}, 0x00ec, "igrave" },
/* Extra characters found in the Belgian (SAA5054) character set */
{{012,000,014,004,004,004,016,000,000}, 0x00ef, "idieresis" },
{{012,000,016,021,037,020,016,000,000}, 0x00eb, "edieresis" },
{{004,012,016,021,037,020,016,000,000}, 0x00ea, "ecircumflex" },
{{004,002,021,021,021,021,017,000,000}, 0xf1d6, "ugrave.saa5054" },
{{004,012,000,014,004,004,016,000,000}, 0x00ee, "icircumflex" },
{{004,012,016,001,017,021,017,000,000}, 0x00e2, "acircumflex" },
{{004,012,016,021,021,021,016,000,000}, 0xf1d7, "ocircumflex.saa5054" },
{{004,012,000,021,021,021,017,000,000}, 0x00fb, "ucircumflex" },
{{000,000,017,020,020,020,017,002,006}, 0xf1d8, "ccedilla.saa5054" },
/* Extra characters found in the Hebrew (SAA5056) character set */
{{000,021,011,025,022,021,021,000,000}, U(05D0) }, /* alef */
{{000,016,002,002,002,002,037,000,000}, U(05D1) }, /* bet */
{{000,003,001,001,003,005,011,000,000}, U(05D2) }, /* gimel */
{{000,037,002,002,002,002,002,000,000}, U(05D3) }, /* dalet */
{{000,037,001,001,021,021,021,000,000}, U(05D4) }, /* he */
{{000,014,004,004,004,004,004,000,000}, U(05D5) }, /* vav */
{{000,016,004,010,004,004,004,000,000}, U(05D6) }, /* zayin */
{{000,037,021,021,021,021,021,000,000}, U(05D7) }, /* het */
{{000,021,023,025,021,021,037,000,000}, U(05D8) }, /* tet */
{{000,014,004,000,000,000,000,000,000}, U(05D9) }, /* yod */
{{000,037,001,001,001,001,001,001,000}, U(05DA) }, /* kaffinal */
{{000,037,001,001,001,001,037,000,000}, U(05DB) }, /* kaf */
{{020,037,001,001,001,002,014,000,000}, U(05DC) }, /* lamed */
{{000,037,021,021,021,021,037,000,000}, U(05DD) }, /* memfinal */
{{000,026,011,021,021,021,027,000,000}, U(05DE) }, /* mem */
{{000,014,004,004,004,004,004,004,004}, U(05DF) }, /* nunfinal */
{{000,006,002,002,002,002,016,000,000}, U(05E0) }, /* nun */
{{000,037,011,021,021,021,016,000,000}, U(05E1) }, /* samekh */
{{000,011,011,011,011,012,034,000,000}, U(05E2) }, /* ayin */
{{000,037,011,015,001,001,001,001,000}, U(05E3) }, /* pefinal */
{{000,037,011,015,001,001,037,000,000}, U(05E4) }, /* pe */
{{000,031,012,014,010,010,010,010,000}, U(05E5) }, /* tsadifinal */
{{000,021,021,012,004,002,037,000,000}, U(05E6) }, /* tsadi */
{{000,037,001,011,011,012,010,010,000}, U(05E7) }, /* qof */
{{000,037,001,001,001,001,001,000,000}, U(05E8) }, /* resh */
{{000,025,025,025,031,021,036,000,000}, U(05E9) }, /* shin */
{{000,017,011,011,011,011,031,000,000}, U(05EA) }, /* tav */
{{000,000,025,025,016,000,000,000,000}, 0xf1d9, "oldsheqel" },
/* Extra characters found in the Cyrillic (SAA5057) character set */
{{000,000,021,021,035,025,035,000,000}, U(044B) }, /* yeru */
{{022,025,025,035,025,025,022,000,000}, U(042E) }, /* Iu */
{{016,021,021,021,037,021,021,000,000}, U(0410) }, /* A */
{{037,020,020,037,021,021,037,000,000}, U(0411) }, /* Be */
{{022,022,022,022,022,022,037,001,000}, U(0426) }, /* Tse */
{{006,012,012,012,012,012,037,021,000}, U(0414) }, /* De */
{{037,020,020,036,020,020,037,000,000}, U(0415) }, /* Ie */
{{004,037,025,025,025,037,004,000,000}, U(0424) }, /* Ef */
{{037,020,020,020,020,020,020,000,000}, U(0413) }, /* Ghe */
{{021,021,012,004,012,021,021,000,000}, U(0425) }, /* Ha */
{{021,021,023,025,031,021,021,000,000}, U(0418) }, /* I */
{{025,021,023,025,031,021,021,000,000}, U(0419) }, /* Ishort */
{{021,022,024,030,024,022,021,000,000}, U(041A) }, /* Ka */
{{007,011,011,011,011,011,031,000,000}, U(041B) }, /* El */
{{021,033,025,025,021,021,021,000,000}, U(041C) }, /* Em */
{{021,021,021,037,021,021,021,000,000}, U(041D) }, /* En */
{{016,021,021,021,021,021,016,000,000}, U(041E) }, /* O */
{{037,021,021,021,021,021,021,000,000}, U(041F) }, /* Pe */
{{017,021,021,017,005,011,021,000,000}, U(042F) }, /* Ya */
{{036,021,021,036,020,020,020,000,000}, U(0420) }, /* Er */
{{016,021,020,020,020,021,016,000,000}, U(0421) }, /* Es */
{{037,004,004,004,004,004,004,000,000}, U(0422) }, /* Te */
{{021,021,021,037,001,001,037,000,000}, U(0423) }, /* U */
{{025,025,025,016,025,025,025,000,000}, U(0416) }, /* Zhe */
{{036,021,021,036,021,021,036,000,000}, U(0412) }, /* Ve */
{{020,020,020,037,021,021,037,000,000}, U(042C) }, /* Soft */
{{030,010,010,017,011,011,017,000,000}, U(042A) }, /* Hard */
{{016,021,001,006,001,021,016,000,000}, U(0417) }, /* Ze */
{{025,025,025,025,025,025,037,000,000}, U(0428) }, /* Sha */
{{014,022,001,007,001,022,014,000,000}, U(042D) }, /* E */
{{025,025,025,025,025,025,037,001,000}, U(0429) }, /* Shcha */
{{021,021,021,037,001,001,001,000,000}, U(0427) }, /* Che */
{{021,021,021,035,025,025,035,000,000}, U(042B) }, /* Yeru */
{{000,000,022,025,035,025,022,000,000}, U(044E) }, /* yu */
{{000,000,016,001,017,021,017,000,000}, U(0430) }, /* a */
{{016,020,036,021,021,021,036,000,000}, U(0431) }, /* be */
{{000,000,022,022,022,022,037,001,000}, U(0446) }, /* tse */
{{000,000,006,012,012,012,037,021,000}, U(0434) }, /* de */
{{000,000,016,021,037,020,016,000,000}, U(0435) }, /* ie */
{{000,004,016,025,025,025,016,004,000}, U(0444) }, /* ef */
{{000,000,037,020,020,020,020,000,000}, U(0433) }, /* ghe */
{{000,000,021,012,004,012,021,000,000}, U(0445) }, /* ha */
{{000,000,021,023,025,031,021,000,000}, U(0438) }, /* i */
{{000,004,021,023,025,031,021,000,000}, U(0439) }, /* ishort */
{{000,000,021,022,034,022,021,000,000}, U(043A) }, /* ka */
{{000,000,007,011,011,011,031,000,000}, U(043B) }, /* el */
{{000,000,021,033,025,021,021,000,000}, U(043C) }, /* em */
{{000,000,021,021,037,021,021,000,000}, U(043D) }, /* en */
{{000,000,016,021,021,021,016,000,000}, U(043E) }, /* o */
{{000,000,037,021,021,021,021,000,000}, U(043F) }, /* pe */
{{000,000,017,021,017,005,031,000,000}, U(044F) }, /* ya */
{{000,000,036,021,021,021,036,020,020}, U(0440) }, /* er */
{{000,000,016,021,020,021,016,000,000}, U(0441) }, /* es */
{{000,000,037,004,004,004,004,000,000}, U(0442) }, /* te */
{{000,000,021,021,021,021,017,001,016}, U(0443) }, /* u */
{{000,000,025,025,016,025,025,000,000}, U(0436) }, /* zhe */
{{000,000,036,021,036,021,036,000,000}, U(0432) }, /* ve */
{{000,000,020,020,036,021,036,000,000}, U(044C) }, /* soft */
{{000,000,030,010,016,011,016,000,000}, U(044A) }, /* hard */
{{000,000,016,021,006,021,016,000,000}, U(0437) }, /* ze */
{{000,000,025,025,025,025,037,000,000}, U(0448) }, /* sha */
{{000,000,014,022,006,022,014,000,000}, U(044D) }, /* e */
{{000,000,025,025,025,025,037,001,000}, U(0449) }, /* shcha */
{{000,000,021,021,021,017,001,000,000}, U(0447) }, /* che */
/*
* The other batch of glyphs were specially designed for this font.
* These are kept sorted by Unicode code point.
*/
/* Basic Latin */
{{010,004,002,000,000,000,000,000,000}, 0x0060, "grave" },
{{004,004,004,004,004,004,004,000,000}, 0x007c, "bar" },
/* Latin-1 supplement */
{{000,000,000,000,000,000,000,000,000}, U(00A0) }, /* non-breaking space */
{{000,000,004,000,004,004,004,004,004}, 0x00a1, "exclamdown" },
{{000,004,017,024,024,024,017,004,000}, 0x00a2, "cent" },
{{021,012,037,004,037,004,004,000,000}, 0x00a5, "yen" },
{{012,000,000,000,000,000,000,000,000}, 0x00a8, "dieresis" },
{{016,021,025,033,031,033,025,021,016}, 0x00a9, "copyright" },
{{016,001,017,021,017,000,037,000,000}, 0x00aa, "ordfeminine" },
{{000,000,000,011,022,011,000,000,000}, 0x00ab, "guillemotleft" },
{{000,000,037,001,001,000,000,000,000}, 0x00ac, "logicalnot" },
{{000,000,000,016,000,000,000,000,000}, U(00AD) }, /* soft hyphen */
{{016,021,035,033,033,035,033,021,016}, 0x00ae, "registered" },
{{016,000,000,000,000,000,000,000,000}, 0x00af, "macron" },
{{004,004,037,004,004,000,037,000,000}, 0x00b1, "plusminus" },
{{014,002,004,010,016,000,000,000,000}, 0x00b2, "twosuperior" },
{{014,002,014,002,014,000,000,000,000}, 0x00b3, "threesuperior" },
{{002,004,010,000,000,000,000,000,000}, 0x00b4, "acute" },
{{000,000,022,022,022,022,035,020,020}, 0x00b5, "mu" },
{{015,025,025,015,005,005,005,000,000}, 0x00b6, "paragraph" },
{{000,000,000,004,000,000,000,000,000}, 0x00b7, "periodcentered" },
{{000,000,000,000,000,000,004,002,004}, 0x00b8, "cedilla" },
{{004,014,004,004,016,000,000,000,000}, 0x00b9, "onesuperior" },
{{016,021,021,021,016,000,037,000,000}, 0x00ba, "ordmasculine" },
{{000,000,000,022,011,022,000,000,000}, 0x00bb, "guillemotright" },
{{000,000,004,000,004,004,010,021,016}, 0x00bf, "questiondown" },
{{010,004,016,021,037,021,021,000,000}, 0x00c0, "Agrave" },
{{002,004,016,021,037,021,021,000,000}, 0x00c1, "Aacute" },
{{004,012,016,021,037,021,021,000,000}, 0x00c2, "Acircumflex" },
{{005,012,016,021,037,021,021,000,000}, 0x00c3, "Atilde" },
{{017,024,024,026,034,024,027,000,000}, 0x00c6, "AE" },
{{016,021,020,020,020,021,016,004,010}, 0x00c7, "Ccedilla" },
{{010,004,037,020,036,020,037,000,000}, 0x00c8, "Egrave" },
{{004,012,037,020,036,020,037,000,000}, 0x00ca, "Ecircumflex" },
{{012,000,037,020,036,020,037,000,000}, 0x00cb, "Edieresis" },
{{010,004,000,016,004,004,016,000,000}, 0x00cc, "Igrave" },
{{002,004,000,016,004,004,016,000,000}, 0x00cd, "Iacute" },
{{004,012,000,016,004,004,016,000,000}, 0x00ce, "Icircumflex" },
{{012,000,016,004,004,004,016,000,000}, 0x00cf, "Idieresis" },
{{016,011,011,035,011,011,016,000,000}, 0x00d0, "Eth" },
{{005,012,000,031,025,023,021,000,000}, 0x00d1, "Ntilde" },
{{010,004,016,021,021,021,016,000,000}, 0x00d2, "Ograve" },
{{002,004,016,021,021,021,016,000,000}, 0x00d3, "Oacute" },
{{004,012,016,021,021,021,016,000,000}, 0x00d4, "Ocircumflex" },
{{005,012,016,021,021,021,016,000,000}, 0x00d5, "Otilde" },
{{000,021,012,004,012,021,000,000,000}, 0x00d7, "multiply" },
{{016,021,023,025,031,021,016,000,000}, 0x00d8, "Oslash" },
{{010,004,021,021,021,021,016,000,000}, 0x00d9, "Ugrave" },
{{002,004,021,021,021,021,016,000,000}, 0x00da, "Uacute" },
{{004,012,000,021,021,021,016,000,000}, 0x00db, "Ucircumflex" },
{{002,004,021,012,004,004,004,000,000}, 0x00dd, "Yacute" },
{{020,036,021,021,036,020,020,000,000}, 0x00de, "Thorn" },
{{002,004,016,001,017,021,017,000,000}, 0x00e1, "aacute" },
{{005,012,016,001,017,021,017,000,000}, 0x00e3, "atilde" },
{{000,000,012,005,017,024,016,000,000}, 0x00e6, "ae" },
{{002,004,000,014,004,004,016,000,000}, 0x00ed, "iacute" },
{{032,004,012,001,017,021,016,000,000}, 0x00f0, "eth" },
{{005,012,036,021,021,021,021,000,000}, 0x00f1, "ntilde" },
{{002,004,000,016,021,021,016,000,000}, 0x00f3, "oacute" },
{{004,012,000,016,021,021,016,000,000}, 0x00f4, "ocircumflex" },
{{005,012,000,016,021,021,016,000,000}, 0x00f5, "otilde" },
{{000,000,015,022,025,011,026,000,000}, 0x00f8, "oslash" },
{{002,004,021,021,021,021,017,000,000}, 0x00fa, "uacute" },
{{002,004,021,021,021,021,017,001,016}, 0x00fd, "yacute" },
{{020,020,036,021,021,021,036,020,020}, 0x00fe, "thorn" },
{{012,000,021,021,021,021,017,001,016}, 0x00ff, "ydieresis" },
/* Latin extended-A */
{{016,000,016,021,037,021,021,000,000}, 0x0100, "Amacron" },
{{016,000,016,001,017,021,017,000,000}, 0x0101, "amacron" },
{{004,012,021,021,037,021,021,002,001}, 0x0104, "Aogonek" },
{{000,000,016,001,017,021,017,002,001}, 0x0105, "aogonek" },
{{002,004,016,021,020,021,016,000,000}, 0x0106, "Cacute" },
{{002,004,017,020,020,020,017,000,000}, 0x0107, "cacute" },
{{004,012,016,021,020,021,016,000,000}, 0x0108, "Ccircumflex" },
{{004,012,017,020,020,020,017,000,000}, 0x0109, "ccircumflex" },
{{004,000,016,021,020,021,016,000,000}, 0x010a, "Cdotaccent" },
{{004,000,017,020,020,020,017,000,000}, 0x010b, "cdotaccent" },
{{012,004,016,021,020,021,016,000,000}, 0x010c, "Ccaron" },
{{012,004,017,020,020,020,017,000,000}, 0x010d, "ccaron" },
{{012,004,036,021,021,021,036,000,000}, 0x010e, "Dcaron" },
{{005,005,014,024,024,024,014,000,000}, 0x010f, "dcaron" },
{{016,011,011,035,011,011,016,000,000}, 0x0110, "Dcroat" },
{{002,007,002,016,022,022,016,000,000}, 0x0111, "dcroat" },
{{016,000,037,020,036,020,037,000,000}, 0x0112, "Emacron" },
{{016,000,016,021,037,020,016,000,000}, 0x0113, "emacron" },
{{004,000,037,020,036,020,037,000,000}, 0x0116, "Edotaccent" },
{{004,000,016,021,037,020,016,000,000}, 0x0117, "edotaccent" },
{{037,020,020,036,020,020,037,002,001}, 0x0118, "Eogonek" },
{{000,000,016,021,037,020,016,002,001}, 0x0119, "eogonek" },
{{012,004,037,020,036,020,037,000,000}, 0x011a, "Ecaron" },
{{012,004,016,021,037,020,016,000,000}, 0x011b, "ecaron" },
{{004,012,017,020,023,021,017,000,000}, 0x011c, "Gcircumflex" },
{{004,012,017,021,021,021,017,001,016}, 0x011d, "gcircumflex" },
{{004,000,017,020,023,021,017,000,000}, 0x0120, "Gdotaccent" },
{{004,000,017,021,021,021,017,001,016}, 0x0121, "gdotaccent" },
{{021,037,021,037,021,021,021,000,000}, 0x0126, "Hbar" },
{{010,034,010,016,011,011,011,000,000}, 0x0127, "hbar" },
{{005,012,000,016,004,004,016,000,000}, 0x0128, "Itilde" },
{{005,012,000,014,004,004,016,000,000}, 0x0129, "itilde" },
{{016,000,016,004,004,004,016,000,000}, 0x012a, "Imacron" },
{{016,000,014,004,004,004,016,000,000}, 0x012b, "imacron" },
{{016,004,004,004,004,004,016,004,002}, 0x012e, "Iogonek" },
{{004,000,014,004,004,004,016,004,002}, 0x012f, "iogonek" },
{{004,000,016,004,004,004,016,000,000}, 0x0130, "Idotaccent" },
{{000,000,014,004,004,004,016,000,000}, 0x0131, "dotlessi" },
{{021,021,021,021,021,025,022,000,000}, 0x0132, "IJ" },
{{011,000,031,011,011,011,035,001,002}, 0x0133, "ij" },
{{002,005,000,002,002,022,014,000,000}, 0x0134, "Jcircumflex" },
{{004,012,000,004,004,004,004,004,010}, 0x0135, "jcircumflex" },
{{000,000,021,022,034,022,021,000,000}, 0x0138, "kgreenlandic" },
{{022,022,024,020,020,020,037,000,000}, 0x013d, "Lcaron" },
{{031,011,012,010,010,010,034,000,000}, 0x013e, "lcaron" },
{{020,020,020,021,020,020,037,000,000}, 0x013f, "Ldot" },
{{030,010,010,011,010,010,034,000,000}, 0x0140, "ldot" },
{{010,010,014,030,010,010,017,000,000}, 0x0141, "Lslash" },
{{014,004,006,014,004,004,016,000,000}, 0x0142, "lslash" },
{{002,004,021,031,025,023,021,000,000}, 0x0143, "Nacute" },
{{002,004,036,021,021,021,021,000,000}, 0x0144, "nacute" },
{{012,004,021,031,025,023,021,000,000}, 0x0147, "Ncaron" },
{{012,004,036,021,021,021,021,000,000}, 0x0148, "ncaron" },
{{020,020,026,005,005,005,005,000,000}, 0x0149, "napostrophe" },
{{021,021,031,025,023,021,021,001,016}, 0x014a, "Eng" },
{{000,000,036,021,021,021,021,001,016}, 0x014b, "eng" },
{{016,000,016,021,021,021,016,000,000}, 0x014c, "Omacron" },
{{000,016,000,016,021,021,016,000,000}, 0x014d, "omacron" },
{{017,024,024,026,024,024,017,000,000}, 0x0152, "OE" },
{{000,000,012,025,027,024,013,000,000}, 0x0153, "oe" },
{{002,004,036,021,036,022,021,000,000}, 0x0154, "Racute" },
{{001,002,013,014,010,010,010,000,000}, 0x0155, "racute" },
{{012,004,036,021,036,022,021,000,000}, 0x0158, "Rcaron" },
{{005,002,013,014,010,010,010,000,000}, 0x0159, "rcaron" },
{{002,004,017,020,016,001,036,000,000}, 0x015b, "sacute" },
{{016,021,020,016,001,021,016,004,010}, 0x015e, "Scedilla" },
{{000,000,017,020,016,001,036,004,010}, 0x015f, "scedilla" },
{{012,004,017,020,016,001,036,000,000}, 0x0161, "scaron" },
{{037,004,004,004,004,004,004,002,004}, U(0162) }, /* Tcedilla */
{{004,004,016,004,004,005,002,002,004}, U(0163) }, /* tcedilla */
{{012,004,037,004,004,004,004,000,000}, 0x0164, "Tcaron" },
{{011,011,034,010,010,010,004,000,000}, 0x0165, "tcaron" },
{{016,000,021,021,021,021,016,000,000}, 0x016a, "Umacron" },
{{000,016,000,021,021,021,017,000,000}, 0x016b, "umacron" },
{{004,000,021,021,021,021,016,000,000}, 0x016e, "Uring" },
{{004,000,021,021,021,021,017,000,000}, 0x016f, "uring" },
{{021,021,021,021,021,021,016,004,002}, 0x0172, "Uogonek" },
{{000,000,021,021,021,021,017,002,001}, 0x0173, "uogonek" },
{{004,012,000,021,025,025,012,000,000}, 0x0174, "Wcircumflex" },
{{004,012,000,021,021,025,012,000,000}, 0x0175, "wcircumflex" },
{{004,012,000,021,012,004,004,000,000}, 0x0176, "Ycircumflex" },
{{004,012,000,021,021,021,017,001,016}, 0x0177, "ycircumflex" },
{{012,000,021,012,004,004,004,000,000}, 0x0178, "Ydieresis" },
{{002,004,037,001,016,020,037,000,000}, 0x0179, "Zacute" },
{{002,004,037,002,004,010,037,000,000}, 0x017a, "zacute" },
{{004,000,037,001,016,020,037,000,000}, 0x017b, "Zdotaccent" },
{{004,000,037,002,004,010,037,000,000}, 0x017c, "zdotaccent" },
{{012,004,037,001,016,020,037,000,000}, 0x017d, "Zcaron" },
{{012,004,037,002,004,010,037,000,000}, 0x017e, "zcaron" },
{{002,004,004,004,004,004,004,000,000}, 0x017f, "longs" },
/* Latin extended-B */
{{003,002,017,020,020,020,017,000,000}, U(0188) }, /* Hooktop C */
{{037,001,001,017,001,001,037,000,000}, U(018E) }, /* reversed E */
{{016,021,001,037,021,021,016,000,000}, U(018F) }, /* Schwa */
{{002,004,004,016,004,004,004,004,010}, 0x0192, "florin" },
{{006,010,011,012,014,012,011,000,000}, U(0199) }, /* Hooktop K */
{{030,004,016,004,012,012,021,000,000}, U(019B) }, /* Barred lambda */
{{000,000,036,021,021,021,021,001,001}, U(019E) }, /* N, right leg */
{{014,020,036,021,021,021,036,020,020}, U(01A5) }, /* Hooktop P */
{{016,021,001,016,020,021,016,000,000}, U(01A7) }, /* Tone 2 (reversed S) */
{{000,000,036,001,016,020,017,000,000}, U(01A8) }, /* tone 2 (reversed s) */
{{004,004,016,004,004,004,002,014,000}, U(01AB) }, /* Left-hook T */
{{002,004,016,004,004,004,002,000,000}, U(01AD) }, /* Hooktop T */
{{016,021,005,002,015,020,037,000,000}, U(01BB) }, /* Barred two */
{{004,004,004,004,004,004,004,004,004}, U(01C0) }, /* Pipe */
{{012,012,012,012,012,012,012,012,012}, U(01C1) }, /* Double pipe */
{{004,004,004,037,004,037,004,004,004}, U(01C2) }, /* Double-barred pipe */
{{004,004,004,004,004,000,004,000,000}, U(01C3) }, /* Exclamation point */
{{012,004,016,021,037,021,021,000,000}, U(01CD) }, /* Acaron */
{{012,004,016,001,017,021,017,000,000}, U(01CE) }, /* acaron */
{{012,004,000,016,004,004,016,000,000}, U(01CF) }, /* Icaron */
{{012,004,000,014,004,004,016,000,000}, U(01D0) }, /* icaron */
{{012,004,016,021,021,021,016,000,000}, U(01D1) }, /* Ocaron */
{{012,004,000,016,021,021,016,000,000}, U(01D2) }, /* ocaron */
{{012,004,021,021,021,021,016,000,000}, U(01D3) }, /* Ucaron */
{{012,004,021,021,021,021,017,000,000}, U(01D4) }, /* ucaron */
{{016,000,012,000,021,021,016,000,000}, U(01D5) }, /* Udieresismacron */
{{016,000,012,000,021,021,017,000,000}, U(01D6) }, /* udieresismacron */
{{002,004,021,000,021,021,016,000,000}, U(01D7) }, /* Udieresisacute */
{{002,004,021,000,021,021,017,000,000}, U(01D8) }, /* udieresisacute */
{{012,004,021,000,021,021,016,000,000}, U(01D9) }, /* Udieresiscaron */
{{012,004,021,000,021,021,017,000,000}, U(01DA) }, /* Udieresiscaron */
{{010,004,021,000,021,021,016,000,000}, U(01DB) }, /* Udieresisgrave */
{{010,004,021,000,021,021,017,000,000}, U(01DC) }, /* Udieresisgrave */
{{000,000,016,001,037,021,016,000,000}, U(01DD) }, /* turned e */
{{016,000,017,024,026,034,027,000,000}, U(01E2) }, /* AEmacron */
{{016,000,012,005,017,024,016,000,000}, U(01E3) }, /* aemacron */
{{012,004,000,004,004,004,004,004,010}, U(01F0) }, /* J wedge */
{{010,004,021,031,025,023,021,000,000}, U(01F8) }, /* Ngrave */
{{010,004,036,021,021,021,021,000,000}, U(01F9) }, /* ngrave */
{{016,000,021,012,004,004,004,000,000}, U(0232) }, /* Ymacron */
{{016,000,021,021,021,021,017,001,016}, U(0233) }, /* ymacron */
{{000,000,004,004,004,004,004,004,010}, U(0237) }, /* dotlessj */
{{000,000,017,020,016,001,036,004,003}, U(023F) }, /* s with swash tail */
{{000,000,037,002,004,010,030,004,003}, U(0240) }, /* z with swash tail */
{{004,004,012,012,021,021,021,000,000}, U(0245) }, /* turned V */
/* IPA extensions */
{{000,000,036,021,036,020,016,000,000}, U(0250) }, /* Turned A */
{{000,000,017,021,021,023,015,000,000}, U(0251) }, /* Script A */
{{000,000,026,031,021,021,036,000,000}, U(0252) }, /* Turned script A */
{{014,020,036,021,021,021,036,000,000}, U(0253) }, /* Hooktop B */
{{000,000,036,001,001,001,036,000,000}, U(0254) }, /* Open O */
{{000,000,017,020,022,025,016,004,000}, U(0255) }, /* Curly-tail C */
{{002,002,016,022,022,022,016,002,001}, U(0256) }, /* Right-tail D */
{{001,002,016,022,022,022,016,000,000}, U(0257) }, /* Hooktop D */
{{000,000,016,021,037,001,016,000,000}, U(0258) }, /* Reversed E */
{{000,000,016,001,037,021,016,000,000}, U(0259) }, /* Schwa */
{{000,000,030,004,035,026,010,000,000}, U(025A) }, /* Right-hook schwa */
{{000,000,017,020,016,020,017,000,000}, U(025B) }, /* Epsilon */
{{000,000,036,001,016,001,036,000,000}, U(025C) }, /* Reversed epsilon */
{{000,000,030,004,031,006,030,000,000}, U(025D) }, /* Right-hook rev epsilon */
{{000,000,016,021,026,021,016,000,000}, U(025E) }, /* Closed reversed epsilon */
{{000,000,004,004,004,016,004,004,010}, U(025F) }, /* Barred dotless J */
{{001,002,016,022,022,022,016,002,014}, U(0260) }, /* Hooktop G */
{{000,000,017,021,021,021,017,001,016}, U(0261) }, /* Opentail G */
{{000,000,017,020,023,021,017,000,000}, U(0262) }, /* Small capital G */
{{000,000,021,012,012,004,012,012,004}, U(0263) }, /* Gamma */
{{000,000,033,004,012,012,004,000,000}, U(0264) }, /* Ram's horns */
{{000,000,021,021,021,021,017,001,001}, U(0265) }, /* Turned H */
{{014,020,036,021,021,021,021,000,000}, U(0266) }, /* Hooktop H */
{{014,020,036,021,021,021,021,001,006}, U(0267) }, /* Hooktop heng */
{{004,000,014,004,016,004,016,000,000}, U(0268) }, /* Barred I */
{{000,000,014,004,004,004,002,000,000}, U(0269) }, /* Iota */
{{000,000,016,004,004,004,016,000,000}, U(026A) }, /* Small capital I */
{{014,004,015,026,004,004,016,000,000}, U(026B) }, /* L with tilde */
{{014,004,014,025,016,004,016,000,000}, U(026C) }, /* Belted L */
{{014,004,004,004,004,004,004,004,002}, U(026D) }, /* Right-tail L */
{{030,010,017,011,012,011,035,001,006}, U(026E) }, /* L-Ezh ligature */
{{000,000,025,025,025,025,013,000,000}, U(026F) }, /* Turned M */
{{000,000,025,025,025,025,013,001,001}, U(0270) }, /* Turned M, right tail */
{{000,000,032,025,025,025,025,001,002}, U(0271) }, /* Left-tail M (at right) */
{{000,000,016,011,011,011,011,010,020}, U(0272) }, /* Left-tail N (at left) */
{{000,000,034,022,022,022,022,002,001}, U(0273) }, /* Right-tail N */
{{000,000,021,031,025,023,021,000,000}, U(0274) }, /* Small capital N */
{{000,000,016,021,037,021,016,000,000}, U(0275) }, /* Barred O */
{{000,000,017,024,027,024,017,000,000}, U(0276) }, /* Small capital O-E ligature */
{{000,000,016,021,025,025,012,000,000}, U(0277) }, /* Closed omega */
{{004,004,016,025,025,025,016,004,004}, U(0278) }, /* Phi */
{{000,000,002,002,002,006,032,000,000}, U(0279) }, /* Turned R */
{{002,002,002,002,002,006,032,000,000}, U(027A) }, /* Turned long-leg R */
{{000,000,002,002,002,006,032,002,001}, U(027B) }, /* Turned R, rigfht tail */
{{000,000,013,014,010,010,010,010,010}, U(027C) }, /* Long-leg R */
{{000,000,013,014,010,010,010,010,004}, U(027D) }, /* Right-tail R */
{{000,000,006,011,010,010,010,000,000}, U(027E) }, /* Fish-hook R */
{{000,000,036,021,036,022,021,000,000}, U(0280) }, /* Small capital R */
{{000,000,021,022,036,021,036,000,000}, U(0281) }, /* Inverted small capital R */
{{000,000,017,020,016,001,036,020,010}, U(0282) }, /* Right-tail S (at left) */
{{002,004,004,004,004,004,004,004,010}, U(0283) }, /* Esh */
{{002,004,004,004,004,016,004,004,010}, U(0284) }, /* Hooktop barred dotless J */
{{002,004,004,004,004,016,024,024,010}, U(0286) }, /* Curly-tail esh */
{{000,000,010,004,004,004,016,004,004}, U(0287) }, /* Turned T */
{{004,004,016,004,004,004,004,004,002}, U(0288) }, /* Right-tail T */
{{000,000,012,037,012,012,006,000,000}, U(0289) }, /* Barred U */
{{000,000,033,012,021,021,016,000,000}, U(028A) }, /* Upsilon */
{{000,000,032,011,011,012,014,000,000}, U(028B) }, /* Cursive V */
{{000,000,004,012,012,021,021,000,000}, U(028C) }, /* Turned V */
{{000,000,012,025,025,021,021,000,000}, U(028D) }, /* Turned W */
{{016,020,034,022,021,021,021,000,000}, U(028E) }, /* Turned Y */
{{000,000,021,012,004,004,004,000,000}, U(028F) }, /* Small capital Y */
{{000,000,036,004,010,020,036,002,001}, U(0290) }, /* Right-tail Z */
{{000,000,037,002,004,010,036,005,002}, U(0291) }, /* Curly-tail Z */
{{000,000,037,002,004,016,001,021,016}, U(0292) }, /* Ezh; Tailed Z */
{{000,000,037,002,004,002,011,025,016}, U(0293) }, /* Curly-tail ezh */
{{016,021,020,020,020,020,020,021,016}, U(0297) }, /* Stretched C */
{{000,000,036,021,036,021,036,000,000}, U(0299) }, /* Small capital B */
{{016,021,002,004,004,004,004,000,000}, U(0294) }, /* Glottal stop */
{{016,021,010,004,004,004,004,000,000}, U(0295) }, /* Reversed glottal stop */
{{004,004,004,004,002,021,016,000,000}, U(0296) }, /* Inverted glottal stop */
{{016,021,021,025,021,021,016,000,000}, U(0298) }, /* Bull's eye */
{{000,000,016,021,015,021,016,000,000}, U(029A) }, /* Closed epsilon */
{{001,002,016,020,026,022,016,000,000}, U(029B) }, /* Hooktop small capital G */
{{000,000,021,021,037,021,021,000,000}, U(029C) }, /* Small capital H */
{{004,000,004,004,004,016,024,024,010}, U(029D) }, /* Curly-tail J */
{{000,000,022,012,006,012,022,002,002}, U(029E) }, /* Turned K */
{{000,000,020,020,020,020,037,000,000}, U(029F) }, /* Small capital L */
{{006,001,017,021,021,021,017,001,001}, U(02A0) }, /* Hooktop Q */
{{016,021,002,004,037,004,004,000,000}, U(02A1) }, /* Barred glottal stop */
{{016,021,010,004,037,004,004,000,000}, U(02A2) }, /* Barred reversed glottal stop */
{{004,004,017,025,026,026,017,000,000}, U(02A3) }, /* dz ligature */
{{004,004,017,025,026,025,015,001,006}, U(02A4) }, /* dezh ligature */
{{004,004,017,025,026,026,017,005,002}, U(02A5) }, /* dz-curl ligature */
{{020,020,037,024,022,021,016,000,000}, U(02A6) }, /* ts ligature */
{{011,012,036,012,012,012,006,002,004}, U(02A7) }, /* tesh ligature */
{{020,030,023,024,024,024,016,005,002}, U(02A8) }, /* tc-curl ligature */
{{010,020,020,036,025,025,025,001,006}, U(02A9) }, /* feng ligature */
{{030,010,013,014,012,011,036,000,000}, U(02AA) }, /* ls ligature */
{{030,010,017,011,012,014,037,000,000}, U(02AB) }, /* lz ligature */
{{000,000,025,012,000,025,012,000,000}, U(02AC) }, /* bilabial percussive */
{{000,000,016,012,000,016,012,000,000}, U(02AD) }, /* bidental percussive */
/* Spacing modifier letters */
{{020,020,030,024,024,000,000,000,000}, U(02B0) }, /* Superscript H */
{{010,000,010,010,010,020,000,000,000}, U(02B2) }, /* Superscript J */
{{010,010,020,020,000,000,000,000,000}, U(02B9) }, /* modifier letter prime */
{{011,011,022,022,000,000,000,000,000}, U(02BA) }, /* modifier double prime */
{{004,004,010,000,000,000,000,000,000}, U(02BC) }, /* Modifier apostrophe */
{{004,012,000,000,000,000,000,000,000}, 0x02c6, "circumflex" },
{{012,004,000,000,000,000,000,000,000}, 0x02c7, "caron" },
{{004,004,004,000,000,000,000,000,000}, U(02C8) }, /* Vertical stroke (superior) */
{{000,000,000,000,000,000,004,004,004}, U(02CC) }, /* Vertical stroke (inferior) */
{{000,000,012,004,000,004,012,000,000}, U(02D0) }, /* Length mark */
{{000,000,012,004,000,000,000,000,000}, U(02D1) }, /* Half-length mark */
{{021,016,000,000,000,000,000,000,000}, 0x02d8, "breve" },
{{004,000,000,000,000,000,000,000,000}, 0x02d9, "dotaccent" },
{{004,012,004,000,000,000,000,000,000}, 0x02da, "ring" },
{{000,000,000,000,000,000,004,010,004}, 0x02db, "ogonek" },
{{005,012,000,000,000,000,000,000,000}, 0x02dc, "tilde" },
{{011,022,000,000,000,000,000,000,000}, 0x02dd, "hungarumlaut" },
{{024,010,024,024,010,000,000,000,000}, U(02E0) }, /* Superscript gamma */
{{030,010,010,010,034,000,000,000,000}, U(02E1) }, /* Superscript L */
{{000,000,014,010,030,000,000,000,000}, U(02E2) }, /* Superscript S */
{{000,000,024,010,024,000,000,000,000}, U(02E3) }, /* Superscript X */
{{010,024,020,010,010,000,000,000,000}, U(02E4) }, /* Superscript reversed glottal stop */
{{037,001,001,001,001,001,001,000,000}, U(02E5) }, /* Extra-high tone letter */
{{001,037,001,001,001,001,001,000,000}, U(02E6) }, /* High tone letter */
{{001,001,001,037,001,001,001,000,000}, U(02E7) }, /* Mid tone letter */
{{001,001,001,001,001,037,001,000,000}, U(02E8) }, /* Low tone letter */
{{001,001,001,001,001,001,037,000,000}, U(02E9) }, /* Extra-low tone letter */
/* Greek and Coptic */
{{001,001,001,001,001,021,016,000,000}, U(037F), }, /* Yot */
{{004,000,000,000,000,000,000,000,000}, 0x0384, "tonos" },
{{004,025,000,000,000,000,000,000,000}, 0x0385, "dieresistonos" },
{{022,025,005,005,007,005,005,000,000}, 0x0386, "Alphatonos" },
{{027,024,004,006,004,004,007,000,000}, 0x0388, "Epsilontonos" },
{{025,025,005,007,005,005,005,000,000}, 0x0389, "Etatonos" },
{{027,022,002,002,002,002,007,000,000}, 0x038a, "Iotatonos" },
{{022,025,005,005,005,005,002,000,000}, 0x038c, "Omicrontonos" },
{{025,025,005,002,002,002,002,000,000}, 0x038e, "Upsilontonos" },
{{022,025,005,005,005,002,007,000,000}, 0x038f, "Omegatonos" },
{{004,025,000,014,004,004,002,000,000}, 0x0390, "iotadieresistonos" },
{{004,012,021,021,037,021,021,000,000}, 0x0391, "Alpha" },
{{036,021,021,036,021,021,036,000,000}, 0x0392, "Beta" },
{{037,020,020,020,020,020,020,000,000}, 0x0393, "Gamma" },
{{004,004,012,012,021,021,037,000,000}, U(0394) }, /* Delta */
{{037,020,020,036,020,020,037,000,000}, 0x0395, "Epsilon" },
{{037,001,002,004,010,020,037,000,000}, 0x0396, "Zeta" },
{{021,021,021,037,021,021,021,000,000}, 0x0397, "Eta" },
{{016,021,021,037,021,021,016,000,000}, 0x0398, "Theta" },
{{016,004,004,004,004,004,016,000,000}, 0x0399, "Iota" },
{{021,022,024,030,024,022,021,000,000}, 0x039a, "Kappa" },
{{004,004,012,012,021,021,021,000,000}, 0x039b, "Lambda" },
{{021,033,025,025,021,021,021,000,000}, 0x039c, "Mu" },
{{021,021,031,025,023,021,021,000,000}, 0x039d, "Nu" },
{{037,000,000,016,000,000,037,000,000}, 0x039e, "Xi" },
{{016,021,021,021,021,021,016,000,000}, 0x039f, "Omicron" },
{{037,021,021,021,021,021,021,000,000}, 0x03a0, "Pi" },
{{036,021,021,036,020,020,020,000,000}, 0x03a1, "Rho" },
{{037,020,010,004,010,020,037,000,000}, 0x03a3, "Sigma" },
{{037,004,004,004,004,004,004,000,000}, 0x03a4, "Tau" },
{{021,021,012,004,004,004,004,000,000}, 0x03a5, "Upsilon" },
{{004,016,025,025,025,016,004,000,000}, 0x03a6, "Phi" },
{{021,021,012,004,012,021,021,000,000}, 0x03a7, "Chi" },
{{025,025,025,025,025,016,004,000,000}, 0x03a8, "Psi" },
{{016,021,021,021,021,012,033,000,000}, U(03A9) }, /* Omega */
{{012,000,016,004,004,004,016,000,000}, 0x03aa, "Iotadieresis" },
{{012,000,021,012,004,004,004,000,000}, 0x03ab, "Upsilondieresis" },
{{004,000,015,022,022,022,015,000,000}, 0x03ac, "alphatonos" },
{{004,000,017,020,016,020,017,000,000}, 0x03ad, "epsilontonos" },
{{004,000,036,021,021,021,021,001,001}, 0x03ae, "etatonos" },
{{004,000,014,004,004,004,002,000,000}, 0x03af, "iotatonos" },
{{004,025,000,022,021,021,016,000,000}, 0x03b0, "upsilondieresistonos" },
{{000,000,015,022,022,022,015,000,000}, 0x03b1, "alpha" },
{{016,021,021,036,021,021,036,020,020}, 0x03b2, "beta" },
{{000,000,021,021,012,012,004,004,004}, 0x03b3, "gamma" },
{{017,020,016,021,021,021,016,000,000}, 0x03b4, "delta" },
{{000,000,017,020,016,020,017,000,000}, 0x03b5, "epsilon" },
{{036,002,004,010,020,020,014,002,004}, 0x03b6, "zeta" },
{{000,000,036,021,021,021,021,001,001}, 0x03b7, "eta" },
{{014,022,022,036,022,022,014,000,000}, 0x03b8, "theta" },
{{000,000,014,004,004,004,002,000,000}, 0x03b9, "iota" },
{{000,000,011,012,014,012,011,000,000}, 0x03ba, "kappa" },
{{030,004,004,012,012,021,021,000,000}, 0x03bb, "lambda" },
{{000,000,022,022,022,022,035,020,020}, U(03BC) }, /* mu */
{{000,000,021,021,011,012,004,000,000}, 0x03bd, "nu" },
{{016,020,020,016,020,020,016,001,002}, 0x03be, "xi" },
{{000,000,016,021,021,021,016,000,000}, 0x03bf, "omicron" },
{{000,000,037,012,012,012,011,000,000}, 0x03c0, "pi" },
{{000,000,016,021,021,021,036,020,020}, 0x03c1, "rho" },
{{000,000,017,020,020,020,016,001,002}, 0x03c2, "sigma1" },
{{000,000,017,022,021,021,016,000,000}, 0x03c3, "sigma" },
{{000,000,037,004,004,004,002,000,000}, 0x03c4, "tau" },
{{000,000,022,021,021,021,016,000,000}, 0x03c5, "upsilon" },
{{000,000,026,025,025,025,016,004,004}, 0x03c6, "phi" },
{{000,000,021,011,012,004,012,022,021}, 0x03c7, "chi" },
{{000,000,025,025,025,025,016,004,004}, 0x03c8, "psi" },
{{000,000,012,021,025,025,012,000,000}, 0x03c9, "omega" },
{{012,000,014,004,004,004,002,000,000}, 0x03ca, "iotadieresis" },
{{012,000,022,021,021,021,016,000,000}, 0x03cb, "upsilondieresis" },
{{004,000,016,021,021,021,016,000,000}, 0x03cc, "omicrontonos" },
{{004,000,022,021,021,021,016,000,000}, 0x03cd, "upsilontonos" },
{{004,000,012,021,025,025,012,000,000}, 0x03ce, "omegatonos" },
{{004,004,016,025,025,025,016,004,004}, 0x03d5, "phi1" },
{{004,000,004,004,004,004,004,004,010}, U(03F3) }, /* yot */
/* Cyrillic */
{{010,004,037,020,036,020,037,000,000}, U(0400) }, /* Ie grave */
{{012,000,037,020,036,020,037,000,000}, U(0401) }, /* Yo */
{{036,010,010,016,011,011,011,001,002}, U(0402) }, /* Dje */
{{006,011,020,034,020,011,006,000,000}, U(0404) }, /* Ye Ukrainian */
{{016,021,020,016,001,021,016,000,000}, U(0405) }, /* Dze */
{{016,004,004,004,004,004,016,000,000}, U(0406) }, /* dotted I */
{{012,000,016,004,004,004,016,000,000}, U(0407) }, /* Yi */
{{001,001,001,001,001,021,016,000,000}, U(0408) }, /* Je */
{{014,024,024,027,025,025,027,000,000}, U(0409) }, /* Lje */
{{024,024,024,037,025,025,027,000,000}, U(040A) }, /* Nje */
{{036,010,010,016,011,011,011,000,000}, U(040B) }, /* Tshe */
{{025,021,021,037,001,001,037,000,000}, U(040E) }, /* short U */
{{021,021,021,021,021,021,037,004,000}, U(040F) }, /* Dzhe */
{{010,004,016,021,037,020,016,000,000}, U(0450) }, /* ie grave */
{{012,000,016,021,037,020,016,000,000}, U(0451) }, /* yo */
{{010,036,010,016,011,011,011,001,002}, U(0452) }, /* dje */
{{000,000,014,022,030,022,014,000,000}, U(0454) }, /* ye Ukrainian */
{{000,000,017,020,016,001,036,000,000}, U(0455) }, /* dze */
{{004,000,014,004,004,004,016,000,000}, U(0456) }, /* dotted i */
{{012,000,014,004,004,004,016,000,000}, U(0457) }, /* yi */
{{004,000,004,004,004,004,004,004,010}, U(0458) }, /* je */
{{000,000,014,024,026,025,026,000,000}, U(0459) }, /* lje */
{{000,000,024,024,036,025,026,000,000}, U(045A) }, /* nje */
{{010,036,010,016,011,011,011,000,000}, U(045B) }, /* tshe */
{{000,004,021,021,021,021,017,001,016}, U(045E) }, /* short u */
{{000,000,021,021,021,021,037,004,000}, U(045F) }, /* dzhe */
{{001,037,020,020,020,020,020,000,000}, U(0490) }, /* Ghe with upturn */
{{000,001,037,020,020,020,020,000,000}, U(0491) }, /* ghe with upturn */
{{017,010,010,036,010,010,010,000,000}, U(0492) }, /* Ghe with stroke */
{{000,000,017,010,036,010,010,000,000}, U(0493) }, /* ghe with stroke */
#ifdef ARMENIAN
/* Armenian */
{{021,021,021,021,025,022,015,000,000}, U(0531) }, /* Ayb */
{{016,021,021,020,037,020,020,000,000}, U(0532) }, /* Ben */
{{014,022,022,022,017,002,002,000,000}, U(0533) }, /* Gim */
{{014,022,022,002,003,002,002,000,000}, U(0534) }, /* Da */
{{020,020,037,020,021,021,016,000,000}, U(0535) }, /* Ech */
{{016,021,021,001,001,022,037,000,000}, U(0536) }, /* Za */
{{020,020,020,037,020,020,036,000,000}, U(0537) }, /* Eh */
{{016,021,021,020,020,020,037,000,000}, U(0538) }, /* Et */
{{016,021,021,023,025,025,022,000,000}, U(0539) }, /* To */
{{002,002,017,022,022,022,014,000,000}, U(053A) }, /* Zhe */
{{020,020,036,021,021,021,020,000,000}, U(053B) }, /* Ini */
{{020,020,020,020,020,020,037,000,000}, U(053C) }, /* Liwn */
{{020,020,035,025,025,025,022,000,000}, U(053D) }, /* Xeh */
{{037,016,021,021,021,021,016,000,000}, U(053E) }, /* Ca */
{{020,021,021,017,001,001,001,000,000}, U(053F) }, /* Ken */
{{002,001,003,014,020,014,003,000,000}, U(0540) }, /* Ho */
{{016,021,021,001,015,022,015,000,000}, U(0541) }, /* Ja */
{{014,022,022,002,002,002,003,000,000}, U(0542) }, /* Ghad */
{{001,032,004,012,012,021,037,000,000}, U(0543) }, /* Cheh */
{{023,022,022,022,022,022,014,000,000}, U(0544) }, /* Men */
{{016,021,001,036,001,021,016,000,000}, U(0545) }, /* Yi */
{{030,010,010,010,011,011,006,000,000}, U(0546) }, /* Now */
{{030,007,010,020,021,021,016,000,000}, U(0547) }, /* Sha */
{{016,021,021,021,021,021,021,000,000}, U(0548) }, /* Vo */
{{016,021,021,001,002,034,003,000,000}, U(0549) }, /* Cha */
{{016,025,025,005,005,001,001,000,000}, U(054A) }, /* Peh */
{{016,021,021,031,005,026,037,000,000}, U(054B) }, /* Jheh */
{{014,022,022,023,022,022,022,000,000}, U(054C) }, /* Ra */
{{021,021,021,021,021,021,016,000,000}, U(054D) }, /* Seh */
{{002,022,022,022,016,002,003,000,000}, U(054E) }, /* Vew */
{{016,021,020,016,001,021,016,000,000}, U(054F) }, /* Tiwn */
{{016,021,021,020,020,020,020,000,000}, U(0550) }, /* Reh */
{{016,021,016,021,001,021,016,000,000}, U(0551) }, /* Co */
{{020,020,037,020,020,020,020,000,000}, U(0552) }, /* Yiwn */
{{004,016,025,025,025,016,004,000,000}, U(0553) }, /* Piwr */
{{006,011,011,016,010,037,010,000,000}, U(0554) }, /* Keh */
{{016,021,021,021,021,021,016,000,000}, U(0555) }, /* Oh */
{{014,024,016,005,025,025,016,000,000}, U(0556) }, /* Feh */
{{000,000,025,025,025,025,013,000,000}, U(0561) }, /* ayb */
{{000,000,036,021,021,020,037,020,020}, U(0562) }, /* ben */
{{000,000,016,022,022,022,017,002,002}, U(0563) }, /* gim */
{{000,000,034,022,022,022,023,002,002}, U(0564) }, /* da */
{{020,020,037,020,021,021,017,000,000}, U(0565) }, /* ech */
{{000,000,016,022,022,022,016,002,003}, U(0566) }, /* za */
{{020,020,037,020,020,020,036,000,000}, U(0567) }, /* eh */
{{000,000,036,021,021,021,021,020,037}, U(0568) }, /* et */
{{000,000,036,021,027,031,026,020,020}, U(0569) }, /* to */
{{002,002,017,022,022,022,014,000,000}, U(056A) }, /* zhe */
{{020,020,036,021,021,021,021,020,020}, U(056B) }, /* ini */
{{000,000,010,010,010,010,010,010,016}, U(056C) }, /* liwn */
{{020,020,035,025,025,025,023,020,020}, U(056D) }, /* xeh */
{{004,002,017,022,022,022,014,000,000}, U(056E) }, /* ca */
{{020,020,021,021,021,021,017,001,001}, U(056F) }, /* ken */
{{020,020,036,021,021,021,021,000,000}, U(0570) }, /* ho */
{{004,002,004,012,021,023,015,000,000}, U(0571) }, /* ja */
{{000,000,034,022,022,022,022,002,003}, U(0572) }, /* ghad */
{{007,010,036,011,011,011,007,000,000}, U(0573) }, /* cheh */
{{003,002,022,022,022,022,016,000,000}, U(0574) }, /* men */
{{000,000,004,004,004,004,004,004,010}, U(0575) }, /* yi */
{{030,010,011,011,011,011,007,000,000}, U(0576) }, /* now */
{{000,000,016,021,001,002,014,020,037}, U(0577) }, /* sha */
{{000,000,036,021,021,021,021,000,000}, U(0578) }, /* vo */
{{000,000,004,010,004,002,014,020,037}, U(0579) }, /* cha */
{{000,000,025,025,025,025,013,001,001}, U(057A) }, /* peh */
{{000,000,016,021,021,012,014,020,037}, U(057B) }, /* jheh */
{{000,000,036,021,021,022,023,000,000}, U(057C) }, /* ra */
{{000,000,021,021,021,021,017,000,000}, U(057D) }, /* seh */
{{002,002,022,022,022,022,016,002,003}, U(057E) }, /* vew */
{{000,000,026,025,025,025,015,000,000}, U(057F) }, /* tiwn */
{{000,000,036,021,021,021,021,020,020}, U(0580) }, /* reh */
{{000,000,017,021,021,021,017,001,016}, U(0581) }, /* co */
{{000,000,010,010,010,010,016,000,000}, U(0582) }, /* yiwn */
{{004,004,026,025,025,025,015,004,004}, U(0583) }, /* piwr */
{{000,000,016,011,011,016,010,037,010}, U(0584) }, /* keh */
{{000,000,016,021,021,021,016,000,000}, U(0585) }, /* oh */
{{014,024,016,005,025,025,016,004,004}, U(0586) }, /* feh */
{{020,020,024,024,024,024,017,000,000}, U(0587) }, /* ech_yiwn */
{{014,022,022,007,002,007,002,000,000}, U(058F) }, /* armdram */
#endif
/* Phonetic extensions */
{{000,000,016,021,037,021,021,000,000}, U(1D00) }, /* small cap A */
{{000,000,017,024,026,034,027,000,000}, U(1D01) }, /* small cap AE */
{{000,000,016,005,036,024,012,000,000}, U(1D02) }, /* turned ae */
{{000,000,016,021,020,021,016,000,000}, U(1D04) }, /* small cap C */
{{000,000,036,021,021,021,036,000,000}, U(1D05) }, /* small cap D */
{{000,000,016,011,035,011,016,000,000}, U(1D06) }, /* small cap Eth */
{{000,000,037,020,036,020,037,000,000}, U(1D07) }, /* small cap E */
{{000,000,016,004,004,004,006,000,004}, U(1D09) }, /* turned i */
{{000,000,001,001,001,021,016,000,000}, U(1D0A) }, /* small cap J */
{{000,000,021,022,034,022,021,000,000}, U(1D0B) }, /* small cap K */
{{000,000,021,033,025,021,021,000,000}, U(1D0D) }, /* small cap M */
{{000,000,021,023,025,031,021,000,000}, U(1D0E) }, /* small cap reversed N */
{{000,000,016,021,021,021,016,000,000}, U(1D0F) }, /* small cap O */
{{000,000,032,005,035,025,012,000,000}, U(1D14) }, /* turned oe */
{{000,000,036,021,036,020,020,000,000}, U(1D18) }, /* small cap P */
{{000,000,017,021,017,011,021,000,000}, U(1D19) }, /* small cap reversed R */
{{000,000,021,011,017,021,017,000,000}, U(1D1A) }, /* small cap turned R */
{{000,000,037,004,004,004,004,000,000}, U(1D1B) }, /* small cap T */
{{000,000,021,021,021,021,016,000,000}, U(1D1C) }, /* small cap U */
{{000,000,037,001,001,001,036,000,000}, U(1D1D) }, /* sideways u */
{{000,000,037,001,036,001,036,000,000}, U(1D1F) }, /* sideways m */
{{000,000,021,021,012,012,004,000,000}, U(1D20) }, /* small cap V */
{{000,000,021,021,025,025,012,000,000}, U(1D21) }, /* small cap W */
{{000,000,037,001,016,020,037,000,000}, U(1D22) }, /* small cap Z */
{{030,004,034,024,010,000,000,000,000}, U(1D4A) }, /* Superscript schwa */
{{000,000,000,000,004,000,014,004,016}, U(1D62) }, /* iinferior */
/* Phonetic extensions supplement */
{{010,024,034,024,010,000,000,000,000}, U(1DBF) }, /* Superscript theta */
/* Latin extended additional */
{{004,000,036,021,036,021,036,000,000}, U(1E02) }, /* Bdotaccent */
{{024,020,036,021,021,021,036,000,000}, U(1E03) }, /* bdotaccent */
{{036,021,021,036,021,021,036,000,004}, U(1E04) }, /* Bdotbelow */
{{020,020,036,021,021,021,036,000,004}, U(1E05) }, /* bdotbelow */
{{036,021,021,036,021,021,036,000,016}, U(1E06) }, /* Bmacronbelow */
{{020,020,036,021,021,021,036,000,016}, U(1E07) }, /* bmacronbelow */
{{002,004,016,021,020,021,016,004,010}, U(1E08) }, /* Ccedillaacute */
{{002,004,017,020,020,020,017,004,010}, U(1E09) }, /* ccedillaacute */
{{004,000,036,021,021,021,036,000,000}, U(1E0A) }, /* Ddotaccent */
{{005,001,017,021,021,021,017,000,000}, U(1E0B) }, /* ddotaccent */
{{036,021,021,021,021,021,036,000,004}, U(1E0C) }, /* Ddotbelow */
{{001,001,017,021,021,021,017,000,004}, U(1E0D) }, /* ddotbelow */
{{036,021,021,021,021,021,036,000,016}, U(1E0E) }, /* Dmacronbelow */
{{001,001,017,021,021,021,017,000,016}, U(1E0F) }, /* dmacronbelow */
{{036,021,021,021,021,021,036,004,010}, U(1E10) }, /* Dcedilla */
{{001,001,017,021,021,021,017,004,010}, U(1E11) }, /* dcedilla */
{{036,021,021,021,021,021,036,004,012}, U(1E12) }, /* Dcircumflexbelow */
{{001,001,017,021,021,021,017,004,012}, U(1E13) }, /* dcircumflexbelow */
{{037,020,020,036,020,020,037,004,012}, U(1E18) }, /* Ecircumflexbelow */
{{000,000,016,021,037,020,016,004,012}, U(1E19) }, /* ecircumflexbelow */
{{004,000,037,020,036,020,020,000,000}, U(1E1E) }, /* Fdotaccent */
{{004,000,002,004,016,004,004,000,000}, U(1E1F) }, /* fdotaccent */
{{016,000,017,020,023,021,017,000,000}, U(1E20) }, /* Gmacron */
{{016,000,017,021,021,021,017,001,016}, U(1E21) }, /* gmacron */
{{025,021,021,037,021,021,021,000,000}, U(1E22) }, /* Hdotaccent */
{{024,020,036,021,021,021,021,000,000}, U(1E23) }, /* hdotaccent */
{{021,021,021,037,021,021,021,000,004}, U(1E24) }, /* Hdotbelow */
{{020,020,036,021,021,021,021,000,004}, U(1E25) }, /* hdotbelow */
{{012,000,021,021,037,021,021,000,000}, U(1E26) }, /* Hdieresis */
{{025,020,036,021,021,021,021,000,000}, U(1E27) }, /* hdieresis */
{{021,021,037,021,021,021,004,002,004}, U(1E28) }, /* Hcedilla */
{{020,020,036,021,021,021,004,002,004}, U(1E29) }, /* hcedilla */
{{021,022,024,030,024,022,021,000,004}, U(1E32) }, /* Kdotbelow */
{{010,010,011,012,014,012,011,000,004}, U(1E33) }, /* kdotbelow */
{{021,022,024,030,024,022,021,000,016}, U(1E34) }, /* Kmacronbelow */
{{010,010,011,012,014,012,011,000,016}, U(1E35) }, /* kmacronbelow */
{{020,020,020,020,020,020,037,000,004}, U(1E36) }, /* Ldotbelow */
{{014,004,004,004,004,004,016,000,004}, U(1E37) }, /* ldotbelow */
{{020,020,020,020,020,020,037,000,016}, U(1E3A) }, /* Lmacronbelow */
{{014,004,004,004,004,004,016,000,016}, U(1E3B) }, /* lmacronbelow */
{{020,020,020,020,020,020,037,004,012}, U(1E3C) }, /* Lcircumflexbelow */
{{014,004,004,004,004,016,000,004,012}, U(1E3D) }, /* lcircumflexbelow */
{{002,004,021,033,025,021,021,000,000}, U(1E3E) }, /* Macute */
{{002,004,000,032,025,025,025,000,000}, U(1E3F) }, /* macute */
{{004,021,033,025,021,021,021,000,000}, U(1E40) }, /* Mdotaccent */
{{004,000,032,025,025,025,025,000,000}, U(1E41) }, /* mdotaccent */
{{021,033,025,025,021,021,021,000,004}, U(1E42) }, /* Mdotbelow */
{{000,000,032,025,025,025,025,000,004}, U(1E43) }, /* mdotbelow */
{{025,021,031,025,023,021,021,000,000}, U(1E44) }, /* Ndotaccent */
{{004,000,036,021,021,021,021,000,000}, U(1E45) }, /* ndotaccent */
{{021,021,031,025,023,021,021,000,004}, U(1E46) }, /* Ndotbelow */
{{000,000,036,021,021,021,021,000,004}, U(1E47) }, /* ndotbelow */
{{021,021,031,025,023,021,021,000,016}, U(1E48) }, /* Nmacronbelow */
{{000,000,036,021,021,021,021,000,016}, U(1E49) }, /* nmacronbelow */
{{002,004,036,021,036,020,020,000,000}, U(1E54) }, /* Pacute */
{{002,004,036,021,021,021,036,020,020}, U(1E55) }, /* pacute */
{{004,000,036,021,036,020,020,000,000}, U(1E56) }, /* Pdotaccent */
{{004,000,036,021,021,021,036,020,020}, U(1E57) }, /* pdotaccent */
{{004,000,036,021,036,022,021,000,000}, U(1E58) }, /* Rdotaccent */
{{004,000,013,014,010,010,010,000,000}, U(1E59) }, /* rdotaccent */
{{036,021,021,036,024,022,021,000,004}, U(1E5A) }, /* Rdotbelow */
{{000,000,013,014,010,010,010,000,004}, U(1E5B) }, /* rdotbelow */
{{016,000,036,021,036,022,021,000,004}, U(1E5C) }, /* Rdotbelowmacron */
{{016,000,013,014,010,010,010,000,004}, U(1E5D) }, /* rdotbelowmacron */
{{036,021,021,036,024,022,021,000,016}, U(1E5E) }, /* Rmacronbelow */
{{000,000,013,014,010,010,010,000,016}, U(1E5F) }, /* rmacronbelow */
{{016,021,020,016,001,021,016,000,004}, U(1E62) }, /* Sdotbelow */
{{000,000,017,020,016,001,036,000,004}, U(1E63) }, /* sdotbelow */
{{004,000,037,004,004,004,004,000,000}, U(1E6A) }, /* Tdotaccent */
{{004,000,004,016,004,004,002,000,000}, U(1E6B) }, /* tdotaccent */
{{037,004,004,004,004,004,004,000,004}, U(1E6C) }, /* Tdotbelow */
{{004,004,016,004,004,004,002,000,004}, U(1E6D) }, /* tdotbelow */
{{037,004,004,004,004,004,004,000,016}, U(1E6E) }, /* Tmacronbelow */
{{004,004,016,004,004,004,002,000,016}, U(1E6F) }, /* tmacronbelow */
{{037,004,004,004,004,004,000,004,012}, U(1E70) }, /* Tcircumflexbelow */
{{004,004,016,004,004,002,000,004,012}, U(1E71) }, /* tcircumflexbelow */
{{021,021,021,021,021,021,016,000,012}, U(1E72) }, /* Udieresisbelow */
{{000,000,021,021,021,021,017,000,012}, U(1E73) }, /* udieresisbelow */
{{021,021,021,021,021,021,016,004,012}, U(1E76) }, /* Ucircumflexbelow */
{{000,000,021,021,021,021,017,004,012}, U(1E77) }, /* ucircumflexbelow */
{{012,000,016,000,021,021,016,000,000}, U(1E7A) }, /* Umacrondieresis */
{{012,000,016,000,021,021,017,000,000}, U(1E7B) }, /* umacrondieresis */
{{021,021,021,012,012,004,004,000,004}, U(1E7E) }, /* Vdotbelow */
{{000,000,021,021,012,012,004,000,004}, U(1E7F) }, /* vdotbelow */
{{012,000,021,025,025,025,012,000,000}, 0x1e84, "Wdieresis", },
{{012,000,021,021,025,025,012,000,000}, 0x1e85, "wdieresis", },
{{021,021,021,025,025,025,012,000,004}, U(1E88) }, /* Wdotbelow */
{{000,000,021,021,025,025,012,000,004}, U(1E89) }, /* wdotbelow */
{{025,021,012,004,012,021,021,000,000}, U(1E8A) }, /* Xdotaccent */
{{004,000,021,012,004,012,021,000,000}, U(1E8B) }, /* xdotaccent */
{{012,000,021,021,016,021,021,000,000}, U(1E8C) }, /* Xdieresis */
{{012,000,021,012,004,012,021,000,000}, U(1E8D) }, /* xdieresis */
{{025,021,012,004,004,004,004,000,000}, U(1E8E) }, /* Ydotaccent */
{{004,000,021,021,021,021,017,001,016}, U(1E8F) }, /* ydotaccent */
{{004,012,037,001,016,020,037,000,000}, U(1E90) }, /* Zcircumflex */
{{004,012,037,002,004,010,037,000,000}, U(1E91) }, /* zcircumflex */
{{037,001,002,004,010,020,037,000,004}, U(1E92) }, /* Zdotbelow */
{{000,000,037,002,004,010,037,000,004}, U(1E93) }, /* zdotbelow */
{{037,001,002,004,010,020,037,000,016}, U(1E94) }, /* Zmacronbelow */
{{000,000,037,002,004,010,037,000,016}, U(1E95) }, /* zmacronbelow */
{{020,020,036,021,021,021,021,000,016}, U(1E96) }, /* Hmacronbelow */
{{025,004,016,004,004,004,002,000,000}, U(1E97) }, /* tdieresis */
{{016,021,022,022,021,021,026,000,000}, U(1E9E) }, /* Germandbls */
{{004,012,021,021,037,021,021,000,004}, U(1EA0) }, /* Adotbelow */
{{000,000,016,001,017,021,017,000,004}, U(1EA1) }, /* adotbelow */
{{037,020,020,036,020,020,037,000,004}, U(1EB8) }, /* Edotbelow */
{{000,000,016,021,037,020,016,000,004}, U(1EB9) }, /* edotbelow */
{{016,004,004,004,004,004,016,000,004}, U(1ECA) }, /* Idotbelow */
{{004,000,014,004,004,004,016,000,004}, U(1ECB) }, /* idotbelow */
{{016,021,021,021,021,021,016,000,004}, U(1ECC) }, /* Odotbelow */
{{000,000,016,021,021,021,016,000,004}, U(1ECD) }, /* odotbelow */
{{021,021,021,021,021,021,016,000,004}, U(1EE4) }, /* Udotbelow */
{{000,000,021,021,021,021,017,000,004}, U(1EE5) }, /* udotbelow */
{{021,021,012,004,004,004,004,000,004}, U(1EF4) }, /* Ydotbelow */
{{000,000,021,021,017,001,016,000,004}, U(1EF5) }, /* ydotbelow */
/* General punctuation */
{{000,000,000,016,000,000,000,000,000}, U(2010) }, /* hyphen */
{{000,000,000,016,000,000,000,000,000}, U(2011) }, /* non-breaking hyphen */
{{000,000,000,036,000,000,000,000,000}, 0x2013, "endash" },
{{000,000,000,000,000,000,037,000,037}, 0x2017, "underscoredbl" },
{{002,004,004,000,000,000,000,000,000}, 0x2018, "quoteleft" },
{{000,000,000,000,000,004,004,010,000}, 0x201a, "quotesinglbase" },
{{011,022,022,000,000,000,000,000,000}, 0x201c, "quotedblleft" },
{{011,011,022,000,000,000,000,000,000}, 0x201d, "quotedblright" },
{{000,000,000,000,000,011,011,022,000}, 0x201e, "quotedblbase" },
{{022,022,011,000,000,000,000,000,000}, U(201F) }, /* quotedblreversed */
{{004,004,037,004,004,004,004,004,004}, 0x2020, "dagger" },
{{004,004,037,004,004,004,037,004,004}, 0x2021, "daggerdbl" },
{{000,000,016,016,016,000,000,000,000}, 0x2022, "bullet" },
{{000,000,000,000,000,000,025,000,000}, 0x2026, "ellipsis" },
{{021,022,004,010,020,005,005,000,000}, 0x2030, "perthousand" },
{{010,010,020,020,000,000,000,000,000}, 0x2032, "minute" },
{{011,011,022,022,000,000,000,000,000}, 0x2033, "second" },
{{002,002,001,001,000,000,000,000,000}, U(2035) }, /* reversed prime */
{{022,022,011,011,000,000,000,000,000}, U(2036) }, /* reversed double prime */
{{000,000,000,002,004,002,000,000,000}, 0x2039, "guilsinglleft" },
{{000,000,000,010,004,010,000,000,000}, 0x203a, "guilsinglright" },
{{025,021,012,004,025,004,012,021,025}, U(203B) }, /* referencemark */
{{012,012,012,012,012,000,012,000,000}, 0x203c, "exclamdbl" },
{{016,025,005,006,004,000,004,000,000}, U(203D) }, /* interrobang */
{{037,000,000,000,000,000,000,000,000}, U(203E) }, /* overline */
{{000,000,000,000,000,000,000,021,016}, U(203F) }, /* Bottom tie bar */
{{016,021,000,000,000,000,000,000,000}, U(2040) }, /* character tie */
{{001,001,002,002,004,010,010,020,020}, 0x2044, "fraction" },
{{012,025,005,011,012,000,012,000,000}, U(2047) }, /* questiondbl */
{{011,025,005,011,011,000,011,000,000}, U(2048) }, /* question exclam */
{{022,025,021,022,022,000,022,000,000}, U(2049) }, /* exclam question */
{{026,025,025,026,024,024,024,000,000}, U(204B) }, /* reversed pilcrow */
{{000,000,004,000,000,004,004,002,000}, U(204F) }, /* reversed semicolon */
{{021,001,002,004,010,020,021,000,000}, U(2052) }, /* commercial minus */
{{000,000,010,025,002,000,000,000,000}, U(2053) }, /* swing dash */
{{000,000,000,000,000,000,000,016,021}, U(2054) }, /* inverted undertie */
{{000,000,001,000,020,000,001,000,000}, U(2056) }, /* three dots */
{{000,000,004,000,021,000,004,000,000}, U(2058) }, /* four dots */
{{000,000,021,000,004,000,021,000,000}, U(2059) }, /* five dots */
{{004,000,000,000,000,000,004,000,000}, U(205A) }, /* two dots */
{{004,000,000,000,021,000,000,000,004}, U(205B) }, /* large four dots */
{{000,000,025,004,037,004,025,000,000}, U(205C) }, /* dotted cross */
{{004,000,000,004,000,000,004,000,000}, U(205D) }, /* tricolon */
{{004,000,004,000,004,000,004,000,000}, U(205E) }, /* vertical four dots */
/* Subscripts and superscripts */
{{004,012,012,012,004,000,000,000,000}, U(2070) }, /* zerosuperior */
{{004,000,014,004,016,000,000,000,000}, U(2071) }, /* isuperior */
{{002,006,012,016,002,000,000,000,000}, U(2074) }, /* foursuperior */
{{016,010,014,002,014,000,000,000,000}, U(2075) }, /* fivesuperior */
{{004,010,014,012,004,000,000,000,000}, U(2076) }, /* sixsuperior */
{{016,002,004,010,010,000,000,000,000}, U(2077) }, /* sevensuperior */
{{004,012,004,012,004,000,000,000,000}, U(2078) }, /* eightsuperior */
{{004,012,006,002,004,000,000,000,000}, U(2079) }, /* ninesuperior */
{{000,004,016,004,000,000,000,000,000}, U(207A) }, /* plussuperior */
{{000,000,016,000,000,000,000,000,000}, U(207B) }, /* minussuperior */
{{000,016,000,016,000,000,000,000,000}, U(207C) }, /* equalssuperior */
{{002,004,004,004,002,000,000,000,000}, U(207D) }, /* parenleftsuperior */
{{010,004,004,004,010,000,000,000,000}, U(207E) }, /* parenrightsuperior */
{{000,000,014,012,012,000,000,000,000}, U(207F) }, /* nsuperior */
{{000,000,000,000,004,012,012,012,004}, U(2080) }, /* zeroinferior */
{{000,000,000,000,004,014,004,004,016}, U(2081) }, /* oneinferior */
{{000,000,000,000,014,002,004,010,016}, U(2082) }, /* twoinferior */
{{000,000,000,000,014,002,014,002,014}, U(2083) }, /* threeinferior */
{{000,000,000,000,002,006,012,016,002}, U(2084) }, /* fourinferior */
{{000,000,000,000,016,010,014,002,014}, U(2085) }, /* fiveinferior */
{{000,000,000,000,004,010,014,012,004}, U(2086) }, /* sixinferior */
{{000,000,000,000,016,002,004,010,010}, U(2087) }, /* seveninferior */
{{000,000,000,000,004,012,004,012,004}, U(2088) }, /* eightinferior */
{{000,000,000,000,004,012,006,002,004}, U(2089) }, /* nineinferior */
{{000,000,000,000,000,004,016,004,000}, U(208A) }, /* plusinferior */
{{000,000,000,000,000,000,016,000,000}, U(208B) }, /* minusinferior */
{{000,000,000,000,000,016,000,016,000}, U(208C) }, /* equalsinferior */
{{000,000,000,000,002,004,004,004,002}, U(208D) }, /* parenleftinferior */
{{000,000,000,000,010,004,004,004,010}, U(208E) }, /* parenrightinferior */
{{000,000,000,000,000,000,014,012,012}, U(2099) }, /* ninferior */
/* Currency symbols */
{{016,020,027,024,016,004,007,000,000}, U(20A0) }, /* euro-currency symbol */
{{017,010,036,010,034,010,010,000,000}, 0x20a3, "franc" },
{{006,011,034,010,034,010,037,000,000}, 0x20a4, "lira" },
{{030,024,030,022,027,022,021,000,000}, 0x20a7, "peseta" },
{{031,025,025,021,025,025,026,000,000}, U(20AA) }, /* newsheqel */
{{006,011,034,010,034,011,006,000,000}, 0x20ac, "Euro" },
/* Letterlike symbols */
{{016,025,024,024,024,025,016,000,000}, U(2102) }, /* double-struck C */
{{035,025,025,027,025,025,035,000,000}, U(210D) }, /* double-struck H */
{{031,025,023,031,025,023,021,000,000}, U(2115) }, /* double-struck N */
{{016,021,035,033,033,035,031,021,016}, U(2117) }, /* phonographic */
{{036,025,025,026,024,024,034,000,000}, U(2119) }, /* double-struck P */
{{016,025,025,025,025,022,015,000,000}, U(211A) }, /* double-struck Q */
{{036,025,025,026,025,025,035,000,000}, U(211D) }, /* double-struck R */
{{037,005,011,022,024,024,037,000,000}, U(2124) }, /* double-struck Z */
{{016,021,021,021,021,012,033,000,000}, 0x2126, "Omega" },
{{033,012,021,021,021,021,016,000,000}, U(2127) }, /* mho sign */
{{000,000,010,004,004,004,006,000,000}, U(2129) }, /* turned iota */
{{001,001,001,017,001,001,037,000,000}, U(2132) }, /* turned F */
{{026,011,025,002,005,005,002,000,000}, U(214B) }, /* turned ampersand */
{{000,000,001,001,017,001,037,000,000}, U(214E) }, /* small cap turned F */
/* Number forms */
{{020,020,020,020,027,001,002,004,004}, U(2150) }, /* oneseventh */
{{020,020,020,020,022,005,003,001,002}, U(2151) }, /* oneninth */
{{010,010,010,010,000,022,025,025,022}, U(2152) }, /* onetenth */
{{020,020,020,020,026,001,006,001,006}, 0x2153, "onethird" },
{{020,010,010,020,032,001,002,001,002}, 0x2154, "twothirds" },
{{020,020,020,020,027,004,006,001,006}, U(2155) }, /* onefifth */
{{020,010,010,020,033,002,003,001,002}, U(2156) }, /* twofifths */
{{020,010,020,010,023,002,003,001,002}, U(2157) }, /* threefifths */
{{004,014,024,034,007,002,003,001,002}, U(2158) }, /* fourfifths */
{{020,020,020,020,022,004,006,005,002}, U(2159) }, /* onesixth */
{{030,020,030,010,022,004,006,005,002}, U(215A) }, /* fivesixths */
{{020,020,020,020,022,005,002,005,002}, 0x215b, "oneeighth" },
{{020,010,020,010,022,005,002,005,002}, 0x215c, "threeeighths" },
{{030,020,030,010,022,005,002,005,002}, 0x215d, "fiveeighths" },
{{034,004,010,020,022,005,002,005,002}, 0x215e, "seveneighths" },
{{010,024,024,010,002,001,002,001,002}, U(2189) }, /* zerothirds */
{{037,001,002,014,020,021,016,000,000}, U(218A) }, /* turned 2 */
{{016,021,020,014,010,020,037,000,000}, U(218B) }, /* turned 3 */
/* Arrows */
{{000,004,004,025,016,004,000,000,000}, 0x2193, "arrowdown" },
{{000,012,021,037,021,012,000,000,000}, 0x2194, "arrowboth" },
{{004,016,025,004,025,016,004,000,000}, 0x2195, "arrowupdn" },
{{000,036,030,024,022,001,000,000,000}, U(2196) }, /* arrowupleft */
{{000,017,003,005,011,020,000,000,000}, U(2197) }, /* arrowupright */
{{000,020,011,005,003,017,000,000,000}, U(2198) }, /* arrowdownright */
{{000,001,022,024,030,036,000,000,000}, U(2199) }, /* arrowdownleft */
{{000,005,011,037,011,005,000,000,000}, U(21A4) }, /* arrowbarleft */
{{000,004,016,025,004,037,000,000,000}, U(21A5) }, /* arrowbarup" */
{{000,024,022,037,022,024,000,000,000}, U(21A6) }, /* arrowbarright */
{{000,037,004,025,016,004,000,000,000}, U(21A7) }, /* arrowbardown */
{{004,016,025,004,025,016,037,000,000}, 0x21a8, "arrowupdnbse" },
{{002,001,005,011,036,010,004,000,000}, U(21A9) }, /* arrowleft w/hook */
{{010,020,024,022,017,002,004,000,000}, U(21AA) }, /* arrowright w/hook */
{{000,034,004,025,016,004,000,000,000}, U(21B4) }, /* arrow right then down */
{{001,005,011,037,010,004,000,000,000}, 0x21b5, "carriagereturn" },
{{024,030,037,030,025,003,037,003,005}, U(21B9) }, /* arrowtabsleftright */
{{000,004,010,037,000,000,000,000,000}, U(21BC) }, /* harpoonleftbarbup */
{{000,000,000,037,010,004,000,000,000}, U(21BD) }, /* harpoonleftbarbdown */
{{000,004,006,005,004,004,000,000,000}, U(21BE) }, /* harpoonupbarbright */
{{000,004,014,024,004,004,000,000,000}, U(21BF) }, /* harpoonupbarbleft */
{{000,004,002,037,000,000,000,000,000}, U(21C0) }, /* harpoonrightbarbup */
{{000,000,000,037,002,004,000,000,000}, U(21C1) }, /* harpoonrightbarbdown */
{{000,004,004,005,006,004,000,000,000}, U(21C2) }, /* harpoondownbarbright */
{{000,004,004,024,014,004,000,000,000}, U(21C3) }, /* harpoondownbarbleft */
{{004,010,037,000,037,002,004,000,000}, U(21CB) }, /* harpoonsleftright */
{{004,002,037,000,037,010,004,000,000}, U(21CC) }, /* harpoonsrightleft */
{{000,006,013,020,013,006,000,000,000}, 0x21d0, "arrowdblleft" },
{{004,012,021,033,012,012,012,000,000}, 0x21d1, "arrowdblup" },
{{000,014,032,001,032,014,000,000,000}, 0x21d2, "arrowdblright" },
{{012,012,012,033,021,012,004,000,000}, 0x21d3, "arrowdbldown" },
{{000,024,030,037,030,024,000,000,000}, U(21E4) }, /* arrowtableft */
{{000,005,003,037,003,005,000,000,000}, U(21E5) }, /* arrowtabright */
{{000,006,013,021,013,006,000,000,000}, U(21E6) }, /* white left arrow */
{{004,012,021,033,012,012,016,000,000}, U(21E7) }, /* white up arrow */
{{000,014,032,021,032,014,000,000,000}, U(21E8) }, /* white right arrow */
{{016,012,012,033,021,012,004,000,000}, U(21E9) }, /* white down arrow */
{{004,012,021,033,016,012,016,000,000}, U(21EA) }, /* caps lock arrow */
/* Mathematical operators */
{{021,021,037,021,012,012,004,000,000}, 0x2200, "universal" },
{{016,021,001,017,021,021,016,000,000}, 0x2202, "partialdiff" },
{{037,001,001,017,001,001,037,000,000}, 0x2203, "existential" },
{{004,004,012,012,021,021,037,000,000}, 0x2206, "Delta" },
{{037,021,021,012,012,004,004,000,000}, 0x2207, "gradient" },
{{017,020,020,037,020,020,017,000,000}, 0x2208, "element" },
{{000,017,020,037,020,017,000,000,000}, U(220A) }, /* small element of */
{{036,001,001,037,001,001,036,000,000}, 0x220b, "suchthat" },
{{000,036,001,037,001,036,000,000,000}, U(220D) }, /* small has element */
{{037,021,021,021,021,021,021,021,021}, 0x220f, "product" },
{{021,021,021,021,021,021,021,021,037}, U(2210) }, /* n-ary coproduct */
{{037,020,010,004,002,004,010,020,037}, 0x2211, "summation" },
{{000,000,000,037,000,000,000,000,000}, 0x2212, "minus" },
{{037,000,004,004,037,004,004,000,000}, U(2213) }, /* minusplus */
{{004,000,004,004,037,004,004,000,000}, U(2214) }, /* dot plus */
{{000,001,002,004,010,020,000,000,000}, U(2215) }, /* division slash */
{{000,020,010,004,002,001,000,000,000}, U(2216) }, /* set minus */
{{004,025,016,004,016,025,004,000,000}, 0x2217, "asteriskmath" },
{{000,000,004,012,012,004,000,000,000}, U(2218) }, /* ring operator */
{{000,000,004,016,004,000,000,000,000}, U(2219) }, /* bulletoperator */
{{007,004,004,004,024,014,004,000,000}, 0x221a, "radical" },
{{023,012,022,012,022,006,002,000,000}, U(221B) }, /* cube root */
{{015,025,035,005,001,003,001,000,000}, U(221C) }, /* fourth root */
{{000,012,025,024,025,012,000,000,000}, 0x221d, "proportional" },
{{000,012,025,025,025,012,000,000,000}, 0x221e, "infinity" },
{{000,020,020,020,020,037,000,000,000}, 0x221f, "orthogonal" },
{{004,004,004,004,004,004,004,000,000}, U(2223) }, /* divides */
{{012,012,012,012,012,012,012,000,000}, U(2225) }, /* parallel */
{{000,000,004,012,021,000,000,000,000}, 0x2227, "logicaland" },
{{000,000,021,012,004,000,000,000,000}, 0x2228, "logicalor" },
{{000,016,021,021,021,021,000,000,000}, 0x2229, "intersection" },
{{000,021,021,021,021,016,000,000,000}, 0x222a, "union" },
{{002,005,004,004,004,004,004,024,010}, 0x222b, "integral" },
{{002,005,004,016,025,016,004,024,010}, U(222E) }, /* contour integral */
{{000,004,000,000,000,021,000,000,000}, 0x2234, "therefore" },
{{000,021,000,000,000,004,000,000,000}, U(2235) }, /* because */
{{000,004,000,000,000,004,000,000,000}, U(2236) }, /* ratio */
{{000,004,000,037,000,000,000,000,000}, U(2238) }, /* dot minus */
{{000,021,000,037,000,021,000,000,000}, U(223A) }, /* geometric proportion */
{{000,000,010,025,002,000,000,000,000}, 0x223c, "similar" },
{{000,000,002,025,010,000,000,000,000}, U(223D) }, /* reversed tilde */
{{000,002,011,025,022,010,000,000,000}, U(223E) }, /* inverted lazy S */
{{000,010,024,025,005,002,000,000,000}, U(223F) }, /* sinewave */
{{000,037,000,010,025,002,000,000,000}, U(2242) }, /* minus tilde */
{{000,010,025,002,000,037,000,000,000}, U(2243) }, /* asymptotically equal */
{{010,025,002,000,037,000,037,000,000}, 0x2245, "congruent" },
{{000,010,025,002,010,025,002,000,000}, 0x2248, "approxequal" },
{{002,025,010,000,037,000,037,000,000}, U(224C) }, /* all equal to */
{{000,021,016,000,016,021,000,000,000}, U(224D) }, /* equivalent to */
{{000,004,033,000,033,004,000,000,000}, U(224E) }, /* geom equiv to */
{{000,004,033,000,037,000,000,000,000}, U(224F) }, /* difference between */
{{004,000,037,000,037,000,000,000,000}, U(2250) }, /* approaches limit */
{{004,000,037,000,037,000,004,000,000}, U(2251) }, /* geometrically equal */
{{020,000,037,000,037,000,001,000,000}, U(2252) }, /* approx eq or image */
{{001,000,037,000,037,000,020,000,000}, U(2253) }, /* image or approx eq */
{{016,021,000,037,000,037,000,000,000}, U(2258) }, /* corresponds to */
{{032,025,025,000,037,000,037,000,000}, U(225E) }, /* measured by */
{{000,002,037,004,037,010,000,000,000}, 0x2260, "notequal" },
{{000,037,000,037,000,037,000,000,000}, 0x2261, "equivalence" },
{{002,037,004,037,004,037,010,000,000}, U(2262) }, /* not identical */
{{003,014,020,014,003,030,007,000,000}, 0x2264, "lessequal" },
{{030,006,001,006,030,003,034,000,000}, 0x2265, "greaterequal" },
{{012,004,012,012,012,004,012,000,000}, U(226C) }, /* between */
{{000,017,020,020,020,017,000,000,000}, 0x2282, "propersubset" },
{{000,036,001,001,001,036,000,000,000}, 0x2283, "propersuperset" },
{{017,020,020,020,017,000,037,000,000}, 0x2286, "reflexsubset" },
{{036,001,001,001,036,000,037,000,000}, 0x2287, "reflexsuperset" },
{{000,021,021,025,021,016,000,000,000}, U(228D) }, /* union with dot */
{{000,037,020,020,020,037,000,000,000}, U(228F) }, /* square image of */
{{000,037,001,001,001,037,000,000,000}, U(2290) }, /* square original of */
{{037,020,020,020,037,000,037,000,000}, U(2291) }, /* sq img or equal */
{{037,001,001,001,037,000,037,000,000}, U(2292) }, /* sq orig or eq */
{{000,037,021,021,021,021,000,000,000}, U(2293) }, /* square cap */
{{000,021,021,021,021,037,000,000,000}, U(2294) }, /* square cup */
{{000,016,025,037,025,016,000,000,000}, 0x2295, "circleplus" },
{{000,016,021,037,021,016,000,000,000}, U(2296) }, /* circled minus (ESC) */
{{000,016,021,025,021,016,000,000,000}, U(2299) }, /* circled dot (SI) */
{{000,037,025,037,025,037,000,000,000}, U(229E) }, /* squared plus */
{{000,037,021,037,021,037,000,000,000}, U(229F) }, /* squared minus (DLE) */
{{000,037,021,025,021,037,000,000,000}, U(22A1) }, /* squared dot */
{{000,020,020,037,020,020,000,000,000}, U(22A2) }, /* right tack */
{{000,001,001,037,001,001,000,000,000}, U(22A3) }, /* left tack */
{{000,037,004,004,004,004,000,000,000}, U(22A4) }, /* down tack */
{{000,004,004,004,004,037,000,000,000}, 0x22a5, "perpendicular" },
{{000,010,010,016,010,010,000,000,000}, U(22A6) }, /* assertion */
{{000,010,016,010,016,010,000,000,000}, U(22A7) }, /* models */
{{000,020,037,020,037,020,000,000,000}, U(22A8) }, /* true */
{{000,024,024,027,024,024,000,000,000}, U(22A9) }, /* forces */
{{000,024,027,024,027,024,000,000,000}, U(22AB) }, /* dbl v dbl rt tstile */
{{000,000,002,035,002,000,000,000,000}, U(22B8) }, /* multimap */
{{016,021,021,021,021,021,021,021,021}, U(22C2) }, /* n-ary intersection */
{{021,021,021,021,021,021,021,021,016}, U(22C3) }, /* n-ary union */
{{000,004,012,021,012,004,000,000,000}, U(22C4) }, /* diamond operator */
{{000,000,000,004,000,000,000,000,000}, U(22C5) }, /* dot operator */
{{000,020,010,004,012,021,000,000,000}, U(22CB) }, /* left semidirect prod */
{{000,001,002,004,012,021,000,000,000}, U(22CC) }, /* right semidirect prod */
{{000,002,025,010,000,037,000,000,000}, U(22CD) }, /* reversed tilde equals */
{{004,004,016,025,025,025,025,000,000}, U(22D4) }, /* pitchfork */
{{007,030,003,014,020,014,003,000,000}, U(22DC) }, /* equal or less than */
{{034,003,030,006,001,006,030,000,000}, U(22DD) }, /* equal or greater than */
{{000,004,000,004,000,004,000,000,000}, U(22EE) }, /* vertical ellipsis */
{{000,000,000,025,000,000,000,000,000}, U(22EF) }, /* midline ellipsis */
{{000,001,000,004,000,020,000,000,000}, U(22F0) }, /* /-diagonal ellipsis */
{{000,020,000,004,000,001,000,000,000}, U(22F1) }, /* \-diagonal ellipsis */
{{037,000,017,020,037,020,017,000,000}, U(22F7) }, /* small element overbar */
{{017,020,020,037,020,020,017,000,037}, U(22F8) }, /* element of underbar */
{{037,000,036,001,037,001,036,000,000}, U(22FE) }, /* small contains o'bar */
/* Miscellaneous technical */
{{004,012,021,021,021,021,037,000,000}, 0x2302, "house" },
{{016,010,010,010,010,010,010,000,000}, U(2308) }, /* left ceiling */
{{016,002,002,002,002,002,002,000,000}, U(2309) }, /* right ceiling */
{{010,010,010,010,010,010,016,000,000}, U(230A) }, /* left floor */
{{002,002,002,002,002,002,016,000,000}, U(230B) }, /* right floor */
{{000,000,037,020,020,000,000,000,000}, 0x2310, "revlogicalnot" },
{{037,020,020,020,020,000,000,000,000}, U(231C) }, /* top left corner */
{{037,001,001,001,001,000,000,000,000}, U(231D) }, /* top right corner */
{{000,000,020,020,020,020,037,000,000}, U(231E) }, /* bottom left corner */
{{000,000,001,001,001,001,037,000,000}, U(231F) }, /* bottom right corner */
{{000,000,002,005,004,004,004,004,004}, 0x2320, "integraltp" },
{{004,004,004,004,004,024,010,000,000}, 0x2321, "integralbt" },
{{000,037,004,004,004,037,000,000,000}, U(2336) }, /* APL I-beam */
{{016,012,012,012,012,012,016,000,000}, U(2337) }, /* APL squish quad */
{{037,021,037,021,037,021,037,000,000}, U(2338) }, /* APL quad equal */
{{037,025,021,037,021,025,037,000,000}, U(2339) }, /* APL quad divide */
{{037,025,033,021,033,025,037,000,000}, U(233A) }, /* APL quad diamond */
{{037,021,025,033,025,021,037,000,000}, U(233B) }, /* APL quad jot */
{{004,016,025,025,025,016,004,000,000}, U(233D) }, /* APL circle stile */
{{000,016,025,033,025,016,000,000,000}, U(233E) }, /* APL circle jot */
{{000,001,012,004,012,020,000,000,000}, U(233F) }, /* APL slash bar */
{{000,020,012,004,012,001,000,000,000}, U(2340) }, /* APL backslash bar */
{{037,021,023,025,031,021,037,000,000}, U(2341) }, /* APL quad slash */
{{037,021,031,025,023,021,037,000,000}, U(2342) }, /* APL quad backslash */
{{000,026,011,025,022,015,000,000,000}, U(2349) }, /* APL circle backslash */
{{004,004,004,004,037,000,037,000,000}, U(234A) }, /* APL down tack u'bar */
{{004,004,012,012,025,025,037,004,004}, U(234B) }, /* APL delta stile */
{{004,016,025,025,016,004,037,000,000}, U(234E) }, /* APL down tack jot */
{{037,000,037,004,004,004,004,000,000}, U(2351) }, /* APL up tack overbar */
{{004,004,037,025,025,012,012,004,004}, U(2352) }, /* APL del stile */
{{037,004,016,025,025,016,004,000,000}, U(2355) }, /* APL up tack jot */
{{004,004,012,012,021,021,037,000,037}, U(2359) }, /* APL delta underbar */
{{000,016,025,033,025,021,000,000,000}, U(235D) }, /* APL up shoe jot */
{{037,025,025,021,021,021,037,000,000}, U(235E) }, /* APL quote quad */
{{016,025,037,025,033,021,016,000,000}, U(235F) }, /* APL circle star */
{{037,021,025,021,025,021,037,000,000}, U(2360) }, /* APL quad colon */
{{012,000,025,016,004,016,025,000,000}, U(2363) }, /* APL star dieresis */
{{012,000,004,012,012,004,000,000,000}, U(2364) }, /* APL jot dieresis */
{{012,000,010,025,002,000,000,000,000}, U(2368) }, /* APL tilde dieresis */
{{000,000,000,037,000,000,004,004,010}, U(236A) }, /* APL comma bar */
{{037,021,021,016,033,004,004,000,000}, U(236B) }, /* APL del tilde */
{{004,012,021,037,021,012,004,000,000}, U(236C) }, /* APL zilde */
{{010,025,002,000,021,012,004,000,000}, U(2371) }, /* APL nor */
{{010,025,002,000,004,012,021,000,000}, U(2372) }, /* APL nand */
{{000,000,014,004,004,004,002,000,000}, U(2373) }, /* APL iota */
{{000,000,016,021,021,021,036,020,020}, U(2374) }, /* APL rho */
{{000,000,012,021,025,025,012,000,000}, U(2375) }, /* APL omega */
{{000,000,015,022,022,022,015,000,037}, U(2376) }, /* APL alpha underbar */
{{017,020,037,020,017,000,037,000,000}, U(2377) }, /* APL epsilon underbar */
{{000,000,014,004,004,004,002,000,037}, U(2378) }, /* APL iota underbar */
{{000,000,012,021,025,025,012,000,037}, U(2379) }, /* APL omega underbar*/
{{000,000,015,022,022,022,015,000,000}, U(237A) }, /* APL alpha */
{{000,000,005,002,025,010,000,000,000}, U(237B) }, /* crossed tick (NAK) */
{{000,000,000,000,000,033,016,000,000}, U(237D) }, /* nbsp symbol */
{{000,016,021,037,012,033,000,000,000}, U(237E) }, /* bell symbol (BEL) */
{{004,004,004,012,004,004,004,000,000}, U(237F) }, /* vert line w/dot (EOM) */
{{000,016,012,012,012,033,000,000,000}, U(238D) }, /* monostable (SYN) */
{{000,007,012,012,012,034,000,000,000}, U(238E) }, /* hysteresis */
{{000,000,037,000,025,000,000,000,000}, U(2393) }, /* directcurrent */
{{037,021,021,021,021,021,037,000,000}, U(2395) }, /* APL quad */
{{002,004,010,010,010,010,010,010,010}, U(239B) }, /* long parenleft top */
{{010,010,010,010,010,010,010,010,010}, U(239C) }, /* long parenleft middle */
{{010,010,010,010,010,004,002,000,000}, U(239D) }, /* long parenleft bottom */
{{010,004,002,002,002,002,002,002,002}, U(239E) }, /* long parenright top */
{{002,002,002,002,002,002,002,002,002}, U(239F) }, /* long parenright middle */
{{002,002,002,002,002,004,010,000,000}, U(23A0) }, /* long parenright bottom */
{{017,010,010,010,010,010,010,010,010}, U(23A1) }, /* long bracketleft top */
{{010,010,010,010,010,010,010,010,010}, U(23A2) }, /* long bracketleft mid */
{{010,010,010,010,010,010,017,000,000}, U(23A3) }, /* long bracketleft bot */
{{036,002,002,002,002,002,002,002,002}, U(23A4) }, /* long bracketright top */
{{002,002,002,002,002,002,002,002,002}, U(23A5) }, /* long bracketright mid */
{{002,002,002,002,002,002,036,000,000}, U(23A6) }, /* long bracketright bot */
{{003,004,004,004,004,004,004,004,004}, U(23A7) }, /* long braceleft top */
{{004,004,004,010,004,004,004,004,004}, U(23A8) }, /* long braceleft middle */
{{004,004,004,004,004,004,003,000,000}, U(23A9) }, /* long braceleft bottom */
{{004,004,004,004,004,004,004,004,004}, U(23AA) }, /* long brace extension */
{{030,004,004,004,004,004,004,004,004}, U(23AB) }, /* long braceright top */
{{004,004,004,002,004,004,004,004,004}, U(23AC) }, /* long braceright middle */
{{004,004,004,004,004,004,030,000,000}, U(23AD) }, /* long braceright bottom */
{{004,004,004,004,004,004,004,004,004}, U(23AE) }, /* integral extension */
{{003,004,004,004,004,004,004,004,030}, U(23B0) }, /* two-level brace / */
{{030,004,004,004,004,004,004,004,003}, U(23B1) }, /* two-level brace \ */
{{037,020,010,010,004,004,002,002,001}, U(23B2) }, /* summation top */
{{001,002,002,004,004,010,010,020,037}, U(23B3) }, /* summation bottom */
{{037,000,000,000,000,000,000,000,000}, U(23BA) }, /* horizontal scan 1 */
{{000,000,037,000,000,000,000,000,000}, U(23BB) }, /* horizontal scan 3 */
{{000,000,000,000,000,000,037,000,000}, U(23BC) }, /* horizontal scan 7 */
{{000,000,000,000,000,000,000,000,037}, U(23BD) }, /* horizontal scan 9 */
{{004,004,037,000,016,000,004,000,000}, U(23DA) }, /* earth */
/* Control pictures */
{{032,026,022,022,000,011,011,011,006}, U(2400) }, /* NUL */
{{010,020,010,020,005,005,007,005,005}, U(2401) }, /* SOH */
{{010,020,010,020,005,005,002,005,005}, U(2402) }, /* STX */
{{034,020,030,020,035,005,002,005,005}, U(2403) }, /* ETX */
{{034,020,030,020,037,002,002,002,002}, U(2404) }, /* EOT */
{{034,020,030,022,035,005,005,002,001}, U(2405) }, /* ENQ */
{{010,024,034,024,025,005,006,005,005}, U(2406) }, /* ACK */
{{030,024,030,024,030,002,002,002,003}, U(2407) }, /* BEL */
{{030,024,030,024,030,001,002,001,002}, U(2408) }, /* BS */
{{024,024,034,024,027,002,002,002,002}, U(2409) }, /* HT */
{{020,020,020,020,037,004,006,004,004}, U(240A) }, /* LF */
{{024,024,024,010,017,002,002,002,002}, U(240B) }, /* VT */
{{034,020,030,020,027,004,006,004,004}, U(240C) }, /* FF */
{{014,020,020,020,016,005,006,005,005}, U(240D) }, /* CR */
{{014,020,010,004,030,002,005,005,002}, U(240E) }, /* SO */
{{014,020,010,004,031,001,001,001,001}, U(240F) }, /* SI */
{{030,024,024,024,030,002,002,002,003}, U(2410) }, /* DLE */
{{030,024,024,024,031,001,001,001,001}, U(2411) }, /* DC1 */
{{030,024,024,024,030,002,001,002,003}, U(2412) }, /* DC2 */
{{030,024,024,030,002,001,002,001,002}, U(2413) }, /* DC3 */
{{030,024,024,024,031,003,005,007,001}, U(2414) }, /* DC4 */
{{032,026,022,022,000,005,006,005,005}, U(2415) }, /* NAK */
{{010,020,010,020,005,005,002,002,002}, U(2416) }, /* SYN */
{{034,020,030,020,036,005,006,005,006}, U(2417) }, /* ETB */
{{014,020,020,014,000,015,013,011,011}, U(2418) }, /* CAN */
{{034,020,030,020,034,000,033,025,021}, U(2419) }, /* EOM */
{{010,020,010,020,006,005,006,005,006}, U(241A) }, /* SUB */
{{030,020,030,020,030,003,004,004,003}, U(241B) }, /* ESC */
{{034,020,030,020,023,004,002,001,006}, U(241C) }, /* FS */
{{014,020,020,024,014,001,002,001,002}, U(241D) }, /* GS */
{{030,024,030,024,024,001,002,001,002}, U(241E) }, /* RS */
{{022,022,014,000,003,004,002,001,006}, U(241F) }, /* US */
{{010,020,010,020,006,005,006,004,004}, U(2420) }, /* SP */
{{030,024,024,030,000,007,002,002,002}, U(2421) }, /* DEL */
{{000,000,000,000,000,021,037,000,000}, U(2423) }, /* Visible space */
{{032,026,022,022,000,004,004,004,007}, U(2424) }, /* NL */
{{004,011,022,004,011,022,004,000,000}, U(2425) }, /* pictorial DEL */
{{016,021,010,004,004,000,004,000,000}, U(2426) }, /* pictorial SUB */
/* Box drawing */
{{000,000,000,000,037,000,000,000,000}, 0x2500, "SF100000" },
{{000,000,000,037,037,037,000,000,000}, U(2501) },
{{004,004,004,004,004,004,004,004,004}, 0x2502, "SF110000" },
{{016,016,016,016,016,016,016,016,016}, U(2503) },
{{000,000,000,000,025,000,000,000,000}, U(2504) },
{{000,000,000,025,025,025,000,000,000}, U(2505) },
{{004,004,000,004,004,004,000,004,004}, U(2506) },
{{016,016,000,016,016,016,000,016,016}, U(2507) },
{{004,000,004,004,000,004,000,004,004}, U(250A) },
{{016,000,016,016,000,016,000,016,016}, U(250B) },
{{000,000,000,000,007,004,004,004,004}, 0x250c, "SF010000" },
{{000,000,000,007,007,007,004,004,004}, U(250D) },
{{000,000,000,000,017,016,016,016,016}, U(250E) },
{{000,000,000,017,017,017,016,016,016}, U(250F) },
{{000,000,000,000,034,004,004,004,004}, 0x2510, "SF030000" },
{{000,000,000,034,034,034,004,004,004}, U(2511) },
{{000,000,000,000,036,016,016,016,016}, U(2512) },
{{000,000,000,036,036,036,016,016,016}, U(2513) },
{{004,004,004,004,007,000,000,000,000}, 0x2514, "SF020000" },
{{004,004,004,007,007,007,000,000,000}, U(2515) },
{{016,016,016,016,017,000,000,000,000}, U(2516) },
{{016,016,016,017,017,017,000,000,000}, U(2517) },
{{004,004,004,004,034,000,000,000,000}, 0x2518, "SF040000" },
{{004,004,004,034,034,034,000,000,000}, U(2519) },
{{016,016,016,016,036,000,000,000,000}, U(251A) },
{{016,016,016,036,036,036,000,000,000}, U(251B) },
{{004,004,004,004,007,004,004,004,004}, 0x251c, "SF080000" },
{{004,004,004,007,007,007,004,004,004}, U(251D) },
{{016,016,016,016,017,004,004,004,004}, U(251E) },
{{004,004,004,004,017,016,016,016,016}, U(251F) },
{{016,016,016,016,017,016,016,016,016}, U(2520) },
{{016,016,016,017,017,017,004,004,004}, U(2521) },
{{004,004,004,017,017,017,016,016,016}, U(2522) },
{{016,016,016,017,017,017,016,016,016}, U(2523) },
{{004,004,004,004,034,004,004,004,004}, 0x2524, "SF090000" },
{{004,004,004,034,034,034,004,004,004}, U(2525) },
{{016,016,016,016,036,004,004,004,004}, U(2526) },
{{004,004,004,004,036,016,016,016,016}, U(2527) },
{{016,016,016,016,036,016,016,016,016}, U(2528) },
{{016,016,016,036,036,036,004,004,004}, U(2529) },
{{004,004,004,036,036,036,016,016,016}, U(252A) },
{{016,016,016,036,036,036,016,016,016}, U(252B) },
{{000,000,000,000,037,004,004,004,004}, 0x252c, "SF060000" },
{{000,000,000,034,037,034,004,004,004}, U(252D) },
{{000,000,000,007,037,007,004,004,004}, U(252E) },
{{000,000,000,037,037,037,004,004,004}, U(252F) },
{{000,000,000,000,037,016,016,016,016}, U(2530) },
{{000,000,000,036,037,036,016,016,016}, U(2531) },
{{000,000,000,017,037,017,016,016,016}, U(2532) },
{{000,000,000,037,037,037,016,016,016}, U(2533) },
{{004,004,004,004,037,000,000,000,000}, 0x2534, "SF070000" },
{{004,004,004,034,037,034,000,000,000}, U(2535) },
{{004,004,004,007,037,007,000,000,000}, U(2536) },
{{004,004,004,037,037,037,000,000,000}, U(2537) },
{{016,016,016,016,037,000,000,000,000}, U(2538) },
{{016,016,016,036,037,036,000,000,000}, U(2539) },
{{016,016,016,017,037,017,000,000,000}, U(253A) },
{{016,016,016,037,037,037,000,000,000}, U(253B) },
{{004,004,004,004,037,004,004,004,004}, 0x253c, "SF050000" },
{{004,004,004,034,037,034,004,004,004}, U(253D) },
{{004,004,004,007,037,007,004,004,004}, U(253E) },
{{004,004,004,037,037,037,004,004,004}, U(253F) },
{{016,016,016,016,037,004,004,004,004}, U(2540) },
{{004,004,004,004,037,016,016,016,016}, U(2541) },
{{016,016,016,016,037,016,016,016,016}, U(2542) },
{{016,016,016,036,037,036,004,004,004}, U(2543) },
{{016,016,016,017,037,017,004,004,004}, U(2544) },
{{004,004,004,036,037,036,016,016,016}, U(2545) },
{{004,004,004,017,037,017,016,016,016}, U(2546) },
{{016,016,016,037,037,037,004,004,004}, U(2547) },
{{004,004,004,037,037,037,016,016,016}, U(2548) },
{{016,016,016,036,037,036,016,016,016}, U(2549) },
{{016,016,016,017,037,017,016,016,016}, U(254A) },
{{016,016,016,037,037,037,016,016,016}, U(254B) },
{{000,000,000,000,033,000,000,000,000}, U(254C) },
{{000,000,000,033,033,033,000,000,000}, U(254D) },
{{004,004,004,004,000,004,004,004,004}, U(254E) },
{{016,016,016,016,000,016,016,016,016}, U(254F) },
{{000,000,000,037,000,037,000,000,000}, 0x2550, "SF430000" },
{{012,012,012,012,012,012,012,012,012}, 0x2551, "SF240000" },
{{000,000,000,007,004,007,004,004,004}, 0x2552, "SF510000" },
{{000,000,000,000,017,012,012,012,012}, 0x2553, "SF520000" },
{{000,000,000,017,010,013,012,012,012}, 0x2554, "SF390000" },
{{000,000,000,034,004,034,004,004,004}, 0x2555, "SF220000" },
{{000,000,000,000,036,012,012,012,012}, 0x2556, "SF210000" },
{{000,000,000,036,002,032,012,012,012}, 0x2557, "SF250000" },
{{004,004,004,007,004,007,000,000,000}, 0x2558, "SF500000" },
{{012,012,012,012,017,000,000,000,000}, 0x2559, "SF490000" },
{{012,012,012,013,010,017,000,000,000}, 0x255a, "SF380000" },
{{004,004,004,034,004,034,000,000,000}, 0x255b, "SF280000" },
{{012,012,012,012,036,000,000,000,000}, 0x255c, "SF270000" },
{{012,012,012,032,002,036,000,000,000}, 0x255d, "SF260000" },
{{004,004,004,007,004,007,004,004,004}, 0x255e, "SF360000" },
{{012,012,012,012,013,012,012,012,012}, 0x255f, "SF370000" },
{{012,012,012,013,010,013,012,012,012}, 0x2560, "SF420000" },
{{004,004,004,034,004,034,004,004,004}, 0x2561, "SF190000" },
{{012,012,012,012,032,012,012,012,012}, 0x2562, "SF200000" },
{{012,012,012,032,002,032,012,012,012}, 0x2563, "SF230000" },
{{000,000,000,037,000,037,004,004,004}, 0x2564, "SF470000" },
{{000,000,000,000,037,012,012,012,012}, 0x2565, "SF480000" },
{{000,000,000,037,000,033,012,012,012}, 0x2566, "SF410000" },
{{004,004,004,037,000,037,000,000,000}, 0x2567, "SF450000" },
{{012,012,012,012,037,000,000,000,000}, 0x2568, "SF460000" },
{{012,012,012,033,000,037,000,000,000}, 0x2569, "SF400000" },
{{004,004,004,037,004,037,004,004,004}, 0x256a, "SF540000" },
{{012,012,012,012,037,012,012,012,012}, 0x256b, "SF530000" },
{{012,012,012,033,000,033,012,012,012}, 0x256c, "SF440000" },
{{000,000,000,000,003,004,004,004,004}, U(256D) },
{{000,000,000,000,030,004,004,004,004}, U(256E) },
{{004,004,004,004,030,000,000,000,000}, U(256F) },
{{004,004,004,004,003,000,000,000,000}, U(2570) },
{{000,000,000,000,034,000,000,000,000}, U(2574) },
{{004,004,004,004,004,000,000,000,000}, U(2575) },
{{000,000,000,000,007,000,000,000,000}, U(2576) },
{{000,000,000,000,004,004,004,004,004}, U(2577) },
{{000,000,000,034,034,034,000,000,000}, U(2578) },
{{016,016,016,016,016,000,000,000,000}, U(2579) },
{{000,000,000,007,007,007,000,000,000}, U(257A) },
{{000,000,000,000,016,016,016,016,016}, U(257B) },
{{000,000,000,007,037,007,000,000,000}, U(257C) },
{{004,004,004,004,016,016,016,016,016}, U(257D) },
{{000,000,000,034,037,034,000,000,000}, U(257E) },
{{016,016,016,016,016,004,004,004,004}, U(257F) },
/* Block elements */
#define M4N(x, u, n) { {x}, u, n, MOS4 }, { {x}, u+0xd000, n ".sep4", SEP4 }
M4N(0x03, 0x2580, "upblock"), M4N(0x0c, 0x2584, "dnblock"),
M4N(0x0f, 0x2588, "block"), {{0x3f}, -1, "block.sep6", SEP6 },
M4N(0x05, 0x258c, "lfblock"), {{0x15}, -1, "lfblock.sep6", SEP6 },
M4N(0x0a, 0x2590, "rtblock"), {{0x2a}, -1, "rtblock.sep6", SEP6 },
{{025,000,012,000,025,000,012,000,025}, 0x2591, "ltshade" },
{{022,011,004,022,011,004,022,011,004}, 0x2592, "shade" },
{{025,037,012,037,025,037,012,037,025}, 0x2593, "dkshade" },
#define M4(x, u) M4N(x, 0x ## u, "uni" #u)
M4( 4, 2596), M4( 8, 2597), M4( 1, 2598), M4(13, 2599),
M4( 9, 259A), M4( 7, 259B), M4(11, 259C), M4( 2, 259D),
M4( 6, 259E), M4(14, 259F),
#undef M4
#undef M4N
/* Geometric shapes */
{{037,021,021,021,021,021,037,000,000}, 0x25a1, "H22073" },
{{000,000,016,016,016,000,000,000,000}, 0x25aa, "H18543" },
{{000,000,016,012,016,000,000,000,000}, 0x25ab, "H18551" },
{{000,000,037,037,037,000,000,000,000}, 0x25ac, "filledrect" },
{{000,000,037,021,037,000,000,000,000}, U(25AD) }, /* rect */
{{004,004,016,016,037,037,037,000,000}, 0x25b2, "triagup" },
{{010,014,016,017,016,014,010,000,000}, U(25B6) }, /* blacktriangleright */
{{030,024,022,021,022,024,030,000,000}, U(25B7) }, /* whitetriangleright */
{{000,020,034,037,034,020,000,000,000}, 0x25ba, "triagrt" },
{{037,037,037,016,016,004,004,000,000}, 0x25bc, "triagdn" },
{{001,003,007,017,007,003,001,000,000}, U(25C0) }, /* blacktriangleleft */
{{003,005,011,021,011,005,003,000,000}, U(25C1) }, /* whitetriangleleft */
{{000,001,007,037,007,001,000,000,000}, 0x25c4, "triaglf" },
{{000,004,016,037,016,004,000,000,000}, U(25C6) }, /* black diamond shape */
{{000,004,012,021,012,004,000,000,000}, U(25C7) }, /* white diamond shape */
{{004,012,012,021,012,012,004,000,000}, 0x25ca, "lozenge" },
{{000,016,021,021,021,016,000,000,000}, 0x25cb, "circle" },
{{000,004,021,000,021,004,000,000,000}, U(25CC) }, /* dottedcircle */
{{000,016,037,037,037,016,000,000,000}, 0x25cf, "H18533" },
{{037,037,021,021,021,037,037,000,000}, 0x25d8, "invbullet" },
{{037,021,004,016,004,021,037,000,000}, 0x25d9, "invcircle" },
{{000,000,016,012,016,000,000,000,000}, 0x25e6, "openbullet" },
{{000,037,025,025,025,037,000,000,000}, U(25EB) }, /* squared vertical line */
{{000,037,025,035,021,037,000,000,000}, U(25F0) }, /* square upper left quad */
{{000,037,021,035,025,037,000,000,000}, U(25F1) }, /* square lower left quad */
{{000,037,025,027,021,037,000,000,000}, U(25F2) }, /* square lower right quad */
{{000,037,021,027,025,037,000,000,000}, U(25F3) }, /* square upper right quad */
{{000,016,025,035,021,016,000,000,000}, U(25F4) }, /* circle upper left quad */
{{000,016,021,035,025,016,000,000,000}, U(25F5) }, /* circle lower left quad */
{{000,016,025,027,021,016,000,000,000}, U(25F6) }, /* circle lower right quad */
{{000,016,021,027,025,016,000,000,000}, U(25F7) }, /* circle upper right quad */
/* Miscellaneous symbols */
{{001,002,004,010,005,003,007,000,000}, U(2607) }, /* lightning */
{{037,022,024,030,025,023,027,000,000}, U(2608) }, /* thunderstorm */
{{000,016,021,025,021,016,000,000,000}, U(2609) }, /* astrological sun */
{{000,012,000,000,016,021,000,000,000}, U(2639) }, /* frownface */
{{000,012,000,000,021,016,000,000,000}, 0x263a, "smileface" },
{{016,037,025,037,037,021,016,000,000}, 0x263b, "invsmileface" },
{{000,025,016,033,016,025,000,000,000}, 0x263c, "sun" },
{{016,021,021,016,004,016,004,000,000}, 0x2640, "female" },
{{007,003,005,014,022,022,014,000,000}, 0x2642, "male" },
{{000,004,016,037,037,004,016,000,000}, 0x2660, "spade" },
{{000,016,016,037,037,004,016,000,000}, 0x2663, "club" },
{{000,012,037,037,016,004,000,000,000}, 0x2665, "heart" },
{{000,004,016,037,016,004,000,000,000}, 0x2666, "diamond" },
{{002,002,002,002,006,016,004,000,000}, U(2669) }, /* crotchet */
{{004,006,005,005,014,034,010,000,000}, 0x266a, "musicalnote" },
{{003,015,011,011,013,033,030,000,000}, 0x266b, "musicalnotedbl" },
{{017,011,017,011,011,033,033,000,000}, U(266C) }, /* semiquavers */
{{010,010,013,015,011,012,014,000,000}, U(266D) }, /* flat */
{{010,013,015,011,013,015,001,000,000}, U(266E) }, /* natural */
{{002,013,016,033,016,032,010,000,000}, U(266F) }, /* sharp */
/* Dingbats */
{{000,004,022,017,022,004,000,000,000}, U(2708) }, /* airplane */
{{000,000,001,002,024,010,000,000,000}, U(2713) }, /* tick (ACK) */
{{016,004,025,037,025,004,016,000,000}, U(2720) }, /* maltese cross */
/* Miscellaneous mathematical symbols-A */
{{004,004,004,016,004,004,004,000,000}, U(27CA) }, /* vert bar horiz stroke */
{{000,025,025,025,025,016,000,000,000}, U(27D2) }, /* upward element of */
{{000,000,010,027,010,000,000,000,000}, U(27DC) }, /* left multimap */
{{002,002,004,010,004,002,002,000,000}, U(27E8) }, /* left angle bracket */
{{010,010,004,002,004,010,010,000,000}, U(27E9) }, /* right angle bracket */
/* Supplemental arrows-B */
{{000,037,016,025,004,004,000,000,000}, U(2912) }, /* arrowupbar */
{{000,004,004,025,016,037,000,000,000}, U(2913) }, /* arrowdownbar */
{{000,004,016,025,004,030,000,000,000}, U(2934) }, /* arrow right curve up */
{{000,030,004,025,016,004,000,000,000}, U(2935) }, /* arrow right curve down */
{{001,005,011,036,010,004,000,000,000}, U(2936) }, /* arrow down curve left */
{{020,024,022,017,002,004,000,000,000}, U(2937) }, /* arrow down curve right */
{{000,004,010,037,002,004,000,000,000}, U(294A) }, /* 2-barbed harpoons */
{{000,004,002,037,010,004,000,000,000}, U(294B) },
{{000,004,006,025,014,004,000,000,000}, U(294C) },
{{000,004,014,025,006,004,000,000,000}, U(294D) },
{{000,024,030,037,020,020,000,000,000}, U(2952) }, /* harpoons to bars... */
{{000,005,003,037,001,001,000,000,000}, U(2953) },
{{000,037,006,005,004,004,000,000,000}, U(2954) },
{{000,004,004,005,006,037,000,000,000}, U(2955) },
{{000,020,020,037,030,024,000,000,000}, U(2956) },
{{000,001,001,037,003,005,000,000,000}, U(2957) },
{{000,037,014,024,004,004,000,000,000}, U(2958) },
{{000,004,004,024,014,037,000,000,000}, U(2959) },
{{000,005,011,037,001,001,000,000,000}, U(295A) }, /* ... and from bars */
{{000,024,022,037,020,020,000,000,000}, U(295B) },
{{000,004,006,005,004,037,000,000,000}, U(295C) },
{{000,037,004,005,006,004,000,000,000}, U(295D) },
{{000,001,001,037,011,005,000,000,000}, U(295E) },
{{000,020,020,037,022,024,000,000,000}, U(295F) },
{{000,004,014,024,004,037,000,000,000}, U(2960) },
{{000,037,004,024,014,004,000,000,000}, U(2961) },
{{004,010,037,000,037,010,004,000,000}, U(2962) }, /* paired harpoons */
{{004,002,037,000,037,002,004,000,000}, U(2964) },
{{004,010,037,000,004,002,037,000,000}, U(2966) },
{{037,010,004,000,037,002,004,000,000}, U(2967) },
{{004,002,037,000,004,010,037,000,000}, U(2968) },
{{037,002,004,000,037,010,004,000,000}, U(2969) },
{{004,010,037,000,037,000,000,000,000}, U(296A) },
{{000,000,037,000,037,010,004,000,000}, U(296B) },
{{004,002,037,000,037,000,000,000,000}, U(296C) },
{{000,000,037,000,037,002,004,000,000}, U(296D) },
/* Miscellaneous mathematical symbols-B */
{{025,025,025,025,025,025,025,000,000}, U(2980) }, /* triple vertical bar */
{{000,016,025,025,025,016,000,000,000}, U(29B6) }, /* circled vert bar */
{{000,016,025,037,021,016,000,000,000}, U(29BA) }, /* circled horiz up */
/* Supplemental mathematical operators */
{{004,004,037,004,004,000,004,000,000}, U(2A25) }, /* plus dot */
{{000,000,000,037,000,004,000,000,000}, U(2A2A) }, /* minus dot */
{{000,020,000,037,000,001,000,000,000}, U(2A2B) }, /* minus falling dots */
{{000,001,000,037,000,020,000,000,000}, U(2A2C) }, /* minus rising dots */
{{004,021,012,004,012,021,000,000,000}, U(2A30) }, /* dot times */
{{000,016,021,025,021,021,000,000,000}, U(2A40) }, /* intersection with dot */
{{004,000,004,012,021,000,000,000,000}, U(2A51) }, /* dot and */
{{004,000,021,012,004,000,000,000,000}, U(2A52) }, /* dot or */
{{000,000,037,000,037,000,004,000,000}, U(2A66) }, /* equals dot */
{{004,000,037,000,037,000,037,000,000}, U(2A67) }, /* dot identical */
{{004,000,010,025,002,000,000,000,000}, U(2A6A) }, /* dot tilde */
{{000,001,010,025,002,020,000,000,000}, U(2A6B) }, /* tilde rising dots */
{{037,000,037,000,010,025,002,000,000}, U(2A73) }, /* equals tilde */
{{012,000,037,000,037,000,012,000,000}, U(2A77) }, /* equals with four dots */
{{004,033,000,037,000,037,000,000,000}, U(2AAE) }, /* bumpy equals */
{{000,017,020,024,020,017,000,000,000}, U(2ABD) }, /* subset with dot */
{{000,036,001,005,001,036,000,000,000}, U(2ABE) }, /* superset with dot */
{{017,020,017,000,004,016,004,000,000}, U(2ABF) }, /* subset plus */
{{036,001,036,000,004,016,004,000,000}, U(2AC0) }, /* superset plus */
{{017,020,017,000,012,004,012,000,000}, U(2AC1) }, /* subset times */
{{036,001,036,000,012,004,012,000,000}, U(2AC2) }, /* superset times */
{{004,000,017,020,017,000,037,000,000}, U(2AC3) }, /* dot subset or equal */
{{004,000,036,001,036,000,037,000,000}, U(2AC4) }, /* dot superset or equal */
{{017,020,017,000,037,000,037,000,000}, U(2AC5) }, /* subset equals */
{{036,001,036,000,037,000,037,000,000}, U(2AC6) }, /* superset equals */
{{017,020,017,000,010,025,002,000,000}, U(2AC7) }, /* subset tilde */
{{036,001,036,000,010,025,002,000,000}, U(2AC8) }, /* superset tilde */
{{000,017,021,021,021,017,000,000,000}, U(2ACF) }, /* closed subset */
{{000,036,021,021,021,036,000,000,000}, U(2AD0) }, /* closed superset */
{{017,021,021,021,017,000,037,000,000}, U(2AD1) }, /* closed subset or eq */
{{036,021,021,021,036,000,037,000,000}, U(2AD2) }, /* closed superset or eq */
{{017,020,017,000,036,001,036,000,000}, U(2AD3) }, /* subset superset */
{{036,001,036,000,017,020,017,000,000}, U(2AD4) }, /* superset subset */
{{017,020,017,000,017,020,017,000,000}, U(2AD5) }, /* subset subset */
{{036,001,036,000,036,001,036,000,000}, U(2AD6) }, /* superset superset */
{{000,016,025,025,025,025,000,000,000}, U(2AD9) }, /* downward element of */
{{016,004,016,025,025,025,025,000,000}, U(2ADA) }, /* tee top pitchfork */
{{004,016,025,025,025,025,004,000,000}, U(2ADB) }, /* transversal i'section */
{{000,002,002,016,002,002,000,000,000}, U(2ADE) }, /* short left tack */
{{000,000,037,004,004,000,000,000,000}, U(2ADF) }, /* short down tack */
{{000,000,004,004,037,000,000,000,000}, U(2AE0) }, /* short up tack */
{{020,037,020,037,020,037,020,000,000}, U(2AE2) }, /* triple rt turnstile */
{{000,005,005,035,005,005,000,000,000}, U(2AE3) }, /* dbl vert left tstile */
{{000,001,037,001,037,001,000,000,000}, U(2AE4) }, /* dbl left turnstile */
{{000,005,035,005,035,005,000,000,000}, U(2AE5) }, /* dbl v dbl left tstile */
{{000,024,024,037,024,024,000,000,000}, U(2AE6) },
{{000,037,000,037,004,004,000,000,000}, U(2AE7) }, /* short down tack o'bar */
{{000,004,004,037,000,037,000,000,000}, U(2AE8) }, /* short up tack u'bar */
{{004,004,037,000,037,004,004,000,000}, U(2AE9) }, /* short up down tacks */
{{000,037,012,012,012,012,000,000,000}, U(2AEA) }, /* dbl down tack */
{{000,012,012,012,012,037,000,000,000}, U(2AEB) }, /* dbl up tack */
{{000,037,001,037,001,001,000,000,000}, U(2AEC) }, /* dbl not sign */
{{000,037,020,037,020,020,000,000,000}, U(2AED) }, /* dbl reversed not */
{{012,012,012,037,012,012,012,000,000}, U(2AF2) }, /* dbl v bar h stroke */
{{025,025,025,025,025,025,025,000,000}, U(2AF4) }, /* triple v bar operator */
{{025,025,025,037,025,025,025,000,000}, U(2AF5) }, /* triple v bar h stroke */
{{025,025,025,025,025,025,025,025,025}, U(2AFC) }, /* large triple vert bar */
/* Miscellaneous symbols and arrows */
{{000,025,000,021,000,025,000,000,000}, U(2B1A) }, /* dottedsquare */
/* Latin extended-C */
{{021,021,037,021,021,012,004,000,000}, U(2C6F) }, /* turned A */
{{000,000,022,025,024,024,010,000,000}, U(2C71) }, /* vhook */
{{000,000,037,001,017,001,037,000,000}, U(2C7B) }, /* small cap turned E */
{{016,021,020,016,001,021,016,004,003}, U(2C7E) }, /* S with swash tail */
{{037,001,002,004,010,020,030,004,003}, U(2C7F) }, /* Z with swash tail */
/* Supplemental punctuation */
{{002,004,010,002,004,010,000,000,000}, U(2E17) }, /* dbl oblique hyphen */
{{000,000,004,000,004,014,024,025,016}, U(2E18) }, /* gnaborretni */
{{012,000,000,016,000,000,000,000,000}, U(2E1A) }, /* hyphendieresis */
{{004,012,004,000,010,025,002,000,000}, U(2E1B) }, /* tilde ring above */
{{004,000,010,025,002,000,000,000,000}, U(2E1E) }, /* tilde dot above */
{{000,000,010,025,002,000,004,000,000}, U(2E1F) }, /* tilde dot below */
{{017,010,010,010,000,000,000,000,000}, U(2E22) }, /* top half bracketleft */
{{036,002,002,002,000,000,000,000,000}, U(2E23) }, /* top half bracketright */
{{000,000,000,010,010,010,017,000,000}, U(2E24) }, /* bot half bracketleft */
{{000,000,000,002,002,002,036,000,000}, U(2E25) }, /* bot half bracketright */
{{011,022,022,022,022,022,011,000,000}, U(2E28) }, /* left double paren */
{{022,011,011,011,011,011,022,000,000}, U(2E29) }, /* right double paren */
{{000,000,021,000,000,000,004,000,000}, U(2E2A) }, /* two dots over one */
{{000,000,004,000,000,000,021,000,000}, U(2E2B) }, /* one dot over two */
{{000,000,021,000,000,000,021,000,000}, U(2E2C) }, /* squared four dots */
{{000,000,004,000,025,000,004,000,000}, U(2E2D) }, /* five dot mark */
{{016,021,010,004,004,000,004,000,000}, U(2E2E) }, /* reversed question */
{{000,000,000,000,000,002,004,004,000}, U(2E32) }, /* turned comma */
{{000,002,004,004,000,000,004,000,000}, U(2E35) }, /* turned semicolon */
{{004,004,034,004,004,004,004,004,004}, U(2E36) }, /* dagger w/left guard */
{{004,004,007,004,004,004,004,004,004}, U(2E37) }, /* dagger w/right guard */
{{004,004,004,004,004,004,037,004,004}, U(2E38) }, /* turned dagger */
{{016,021,020,016,021,016,000,000,000}, U(2E39) }, /* top half section */
{{000,000,016,000,016,000,000,000,000}, U(2E40) }, /* double hyphen */
{{000,000,000,000,000,004,004,002,000}, U(2E41) }, /* reversed comma */
{{000,000,000,000,000,022,022,011,000}, U(2E42) }, /* dbl low rev9 quote */
{{004,004,037,004,037,004,037,004,004}, U(2E4B) }, /* triple dagger */
{{017,010,010,034,010,010,017,000,000}, U(2E55) }, /* bracketleft stroke */
{{036,002,002,007,002,002,036,000,000}, U(2E56) }, /* bracketright stroke */
{{017,010,034,010,034,010,017,000,000}, U(2E57) }, /* bracketleft dbl strk */
{{036,002,007,002,007,002,036,000,000}, U(2E58) }, /* bracketright dbl strk */
{{002,004,010,010,000,000,000,000,000}, U(2E59) }, /* top half parenleft */
{{010,004,002,002,000,000,000,000,000}, U(2E5A) }, /* top half parenright */
{{000,000,000,010,010,004,002,000,000}, U(2E5B) }, /* bot half parenleft */
{{000,000,000,002,002,004,010,000,000}, U(2E5C) }, /* bot half parenright */
{{000,000,002,004,010,000,000,000,000}, U(2E5D) }, /* oblique hyphen */
/* Latin extended-D */
{{021,021,021,037,021,021,021,001,016}, U(A726) }, /* Heng */
{{020,020,036,021,021,021,021,001,006}, U(A727) }, /* heng */
{{000,000,037,020,036,020,020,000,000}, U(A730) }, /* small cap F */
{{000,000,017,020,016,001,036,000,000}, U(A731) }, /* small cap S */
{{037,001,001,001,001,001,001,000,000}, U(A780) }, /* turned L */
{{016,004,004,004,004,004,006,000,000}, U(A781) }, /* turned l */
{{021,021,021,037,001,001,001,000,000}, U(A78D) }, /* cap turned h */
{{006,011,010,034,010,011,006,000,000}, U(A792) }, /* C with bar */
{{000,000,007,010,034,010,007,000,000}, U(A793) }, /* c with bar */
{{011,031,011,017,011,011,011,000,000}, U(A7AA) }, /* H with hook */
{{016,021,001,006,001,021,016,000,000}, U(A7AB) }, /* reversed Epsilon */
{{004,004,014,025,016,004,007,000,000}, U(A7AD) }, /* belted L */
{{037,025,004,004,004,025,037,000,000}, U(A7AE) }, /* cap small-cap I */
{{000,000,016,021,025,022,015,000,000}, U(A7AF) }, /* small cap Q */
{{021,011,005,003,005,011,021,000,000}, U(A7B0) }, /* turned K */
{{004,004,004,004,004,004,037,000,000}, U(A7B1) }, /* turned T */
{{001,001,001,011,025,025,016,004,000}, U(A7B2) }, /* crossed-tail J */
{{037,001,001,017,001,001,001,000,000}, U(A7FB) }, /* reversed F */
{{017,021,021,017,001,001,001,000,000}, U(A7FC) }, /* reversed P */
{{021,021,021,025,025,033,021,000,000}, U(A7FD) }, /* inverted M */
/* Private use area */
/* U+EE00--U+EE7F: zvbi mosaic graphics */
#define M(x) {{(0x##x & 0x1f)|((0x##x & 0x40)>>1)}, U(EE##x), \
(0x##x & 0x20 ? SEP6 : MOS6)}
M(00), M(01), M(02), M(03), M(04), M(05), M(06), M(07),
M(08), M(09), M(0A), M(0B), M(0C), M(0D), M(0E), M(0F),
M(10), M(11), M(12), M(13), M(14), M(15), M(16), M(17),
M(18), M(19), M(1A), M(1B), M(1C), M(1D), M(1E), M(1F),
M(20), M(21), M(22), M(23), M(24), M(25), M(26), M(27),
M(28), M(29), M(2A), M(2B), M(2C), M(2D), M(2E), M(2F),
M(30), M(31), M(32), M(33), M(34), M(35), M(36), M(37),
M(38), M(39), M(3A), M(3B), M(3C), M(3D), M(3E), M(3F),
M(40), M(41), M(42), M(43), M(44), M(45), M(46), M(47),
M(48), M(49), M(4A), M(4B), M(4C), M(4D), M(4E), M(4F),
M(50), M(51), M(52), M(53), M(54), M(55), M(56), M(57),
M(58), M(59), M(5A), M(5B), M(5C), M(5D), M(5E), M(5F),
M(60), M(61), M(62), M(63), M(64), M(65), M(66), M(67),
M(68), M(69), M(6A), M(6B), M(6C), M(6D), M(6E), M(6F),
M(70), M(71), M(72), M(73), M(74), M(75), M(76), M(77),
M(78), M(79), M(7A), M(7B), M(7C), M(7D), M(7E), M(7F),
#undef M
/*
* Characters in the private use area are used for Bedstead glyphs
* that would otherwise be unencoded so as to make them easier to
* use. These encodings should be stable, but they do not use uniXXXX
* glyph names. U+F1D0 to U+F1D9 are used above for glyphs from real
* character generators. U+F580 to U+F59F are used above for
* separated 4-cell mosaic graphics. U+F1C0 and U+F1C1 are used
* below for small caps glyphs.
*/
/* Alphabetic presentation forms */
{{006,010,036,012,012,012,017,000,000}, 0xfb01, "fi" },
{{006,012,012,036,012,012,017,000,000}, 0xfb02, "fl" },
/* Halfwidth and fullwidth forms */
{{004,004,004,004,004,004,004,004,004}, U(FFE8) }, /* halfwidth U+2502 */
{{000,004,010,037,010,004,000,000,000}, U(FFE9) }, /* halfwidth U+2190 */
{{000,004,016,025,004,004,000,000,000}, U(FFEA) }, /* halfwidth U+2191 */
{{000,004,002,037,002,004,000,000,000}, U(FFEB) }, /* halfwidth U+2192 */
{{000,004,004,025,016,004,000,000,000}, U(FFEC) }, /* halfwidth U+2193 */
{{037,037,037,037,037,037,037,000,000}, U(FFED) }, /* halfwidth U+25A0 */
{{000,016,021,021,021,016,000,000,000}, U(FFEE) }, /* halfwidth U+25CB */
/* Specials */
{{016,021,025,011,016,012,016,000,000}, U(FFFD) }, /* replacement */
/* Shavian */
{{030,004,004,004,004,004,004,000,000}, U(10450) }, /* peep */
{{014,024,004,004,004,004,004,000,000}, U(10451) }, /* tot */
{{004,004,004,014,020,020,014,000,000}, U(10452) }, /* kick */
{{004,004,004,004,004,004,030,000,000}, U(10453) }, /* fee */
{{014,002,001,017,021,021,016,000,000}, U(10454) }, /* thigh */
{{017,020,016,001,001,001,036,000,000}, U(10455) }, /* so */
{{001,002,004,010,020,020,016,000,000}, U(10456) }, /* sure */
{{015,022,004,010,020,020,016,000,000}, U(10457) }, /* church */
{{020,020,010,004,002,001,001,000,000}, U(10458) }, /* yea */
{{004,012,021,012,004,012,021,000,000}, U(10459) }, /* hung */
{{000,000,004,004,004,004,004,004,003}, U(1045A) }, /* bib */
{{000,000,004,004,004,004,004,005,006}, U(1045B) }, /* dead */
{{000,000,006,001,001,006,004,004,004}, U(1045C) }, /* gag */
{{000,000,003,004,004,004,004,004,004}, U(1045D) }, /* vow */
{{000,000,016,021,021,036,020,010,006}, U(1045E) }, /* they */
{{000,000,036,001,001,001,016,020,017}, U(1045F) }, /* zoo */
{{000,000,016,001,001,002,004,010,020}, U(10460) }, /* measure */
{{000,000,016,001,001,002,004,011,026}, U(10461) }, /* judge */
{{000,000,001,001,002,004,010,020,020}, U(10462) }, /* woe */
{{000,000,021,012,004,012,021,012,004}, U(10463) }, /* ha-ha */
{{000,000,017,020,020,020,017,000,000}, U(10464) }, /* loll */
{{000,000,003,002,004,010,030,000,000}, U(10465) }, /* mime */
{{000,000,004,004,004,004,004,000,000}, U(10466) }, /* if */
{{000,000,004,004,004,004,003,000,000}, U(10467) }, /* egg */
{{000,000,004,004,004,004,030,000,000}, U(10468) }, /* ash */
{{000,000,003,004,004,004,004,000,000}, U(10469) }, /* ado */
{{000,000,030,004,004,004,004,000,000}, U(1046A) }, /* on */
{{000,000,021,021,012,012,004,000,000}, U(1046B) }, /* wool */
{{000,000,004,010,034,004,002,000,000}, U(1046C) }, /* out */
{{000,000,006,010,007,002,034,000,000}, U(1046D) }, /* ah */
{{000,000,036,001,001,001,036,000,000}, U(1046E) }, /* roar */
{{000,000,030,010,004,002,003,000,000}, U(1046F) }, /* nun */
{{000,000,020,023,025,031,001,000,000}, U(10470) }, /* eat */
{{000,000,037,020,010,004,003,000,000}, U(10471) }, /* age */
{{000,000,037,001,002,004,030,000,000}, U(10472) }, /* ice */
{{000,000,037,001,016,020,020,000,000}, U(10473) }, /* up */
{{000,000,016,021,021,021,016,000,000}, U(10474) }, /* oak */
{{000,000,004,012,012,021,021,000,000}, U(10475) }, /* ooze */
{{000,000,030,007,002,004,010,000,000}, U(10476) }, /* oil */
{{000,000,034,003,001,002,001,000,000}, U(10477) }, /* awe */
{{000,000,016,022,021,011,032,000,000}, U(10478) }, /* are */
{{000,000,013,022,021,011,016,000,000}, U(10479) }, /* or */
{{000,000,016,021,011,021,022,000,000}, U(1047A) }, /* air */
{{000,000,011,021,022,021,016,000,000}, U(1047B) }, /* err */
{{000,000,006,011,021,021,026,000,000}, U(1047C) }, /* array */
{{000,000,026,031,021,021,026,000,000}, U(1047D) }, /* ear */
{{000,000,027,030,020,020,020,000,000}, U(1047E) }, /* ian */
{{000,000,020,020,022,025,015,000,000}, U(1047F) }, /* yew */
/* Musical symbols */
{{004,004,004,004,004,004,004,004,004}, U(1D100) }, /* bar line */
{{012,012,012,012,012,012,012,012,012}, U(1D101) }, /* double bar line */
{{013,013,013,013,013,013,013,013,013}, U(1D102) }, /* final bar line */
{{032,032,032,032,032,032,032,032,032}, U(1D103) }, /* reversed ditto */
{{004,004,000,004,004,004,000,004,004}, U(1D104) }, /* dashed bar line */
{{000,000,004,004,004,004,004,000,000}, U(1D105) }, /* short bar line */
{{024,024,024,025,024,025,024,024,024}, U(1D106) }, /* start repeat */
{{005,005,005,025,005,025,005,005,005}, U(1D107) }, /* end repeat */
{{000,000,000,004,000,004,000,000,000}, U(1D108) }, /* repeat dots */
{{010,024,021,012,004,012,021,005,002}, U(1D10B) }, /* segno */
{{016,021,025,000,000,000,000,000,000}, U(1D110) }, /* fermata */
{{000,000,000,000,000,000,025,021,016}, U(1D111) }, /* fermata below */
{{000,000,000,000,037,000,000,000,000}, U(1D116) }, /* 1-line stave */
{{000,000,000,037,000,037,000,000,000}, U(1D117) }, /* 2-line stave */
{{000,000,037,000,037,000,037,000,000}, U(1D118) }, /* 3-line stave */
{{000,037,000,037,000,037,000,037,000}, U(1D119) }, /* 4-line stave */
{{037,000,037,000,037,000,037,000,037}, U(1D11A) }, /* 5-line stave */
{{004,012,012,012,014,026,025,016,004}, U(1D11E) }, /* G clef */
{{025,025,025,026,024,026,025,025,025}, U(1D121) }, /* C clef */
{{010,025,004,005,010,020,000,000,000}, U(1D122) }, /* F clef */
{{000,033,033,004,033,033,000,000,000}, U(1D12A) }, /* double sharp */
{{004,024,027,035,025,026,030,000,000}, U(1D12B) }, /* double flat */
{{000,000,037,016,037,000,000,000,000}, U(1D13A) }, /* breve rest */
{{000,000,037,016,000,000,000,000,000}, U(1D13B) }, /* semibreve rest */
{{000,000,000,016,037,000,000,000,000}, U(1D13C) }, /* minim rest */
/* Mathematical alphanumeric symbols */
{{016,025,025,035,025,025,027,000,000}, U(1D538) }, /* double-struck A */
{{036,025,025,026,025,025,036,000,000}, U(1D539) }, /* double-struck B */
{{036,025,025,025,025,025,036,000,000}, U(1D53B) }, /* double-struck D */
{{037,024,024,026,024,024,037,000,000}, U(1D53C) }, /* double-struck E */
{{037,024,024,026,024,024,034,000,000}, U(1D53D) }, /* double-struck F */
{{016,025,024,024,027,025,017,000,000}, U(1D53E) }, /* double-struck G */
{{037,012,012,012,012,012,037,000,000}, U(1D540) }, /* double-struck I */
{{007,005,005,005,005,025,016,000,000}, U(1D541) }, /* double-struck J */
{{035,025,025,026,025,025,035,000,000}, U(1D542) }, /* double-struck K */
{{034,024,024,024,024,024,037,000,000}, U(1D543) }, /* double-struck L */
{{021,033,025,025,025,025,027,000,000}, U(1D544) }, /* double-struck M */
{{016,025,025,025,025,025,016,000,000}, U(1D546) }, /* double-struck O */
{{017,024,022,011,005,005,036,000,000}, U(1D54A) }, /* double-struck S */
{{037,012,012,012,012,012,016,000,000}, U(1D54B) }, /* double-struck T */
{{035,025,025,025,025,025,016,000,000}, U(1D54C) }, /* double-struck U */
{{035,025,022,012,012,004,004,000,000}, U(1D54D) }, /* double-struck V */
{{035,025,025,025,025,025,012,000,000}, U(1D54E) }, /* double-struck W */
{{035,025,022,012,011,025,027,000,000}, U(1D54F) }, /* double-struck X */
{{035,025,022,012,012,012,016,000,000}, U(1D550) }, /* double-struck Y */
{{000,000,016,005,015,025,017,000,000}, U(1D552) }, /* double-struck a */
{{034,024,026,025,025,025,036,000,000}, U(1D553) }, /* double-struck b */
{{000,000,017,024,024,024,017,000,000}, U(1D554) }, /* double-struck c */
{{007,005,015,025,025,025,017,000,000}, U(1D555) }, /* double-struck d */
{{000,000,016,025,027,024,016,000,000}, U(1D556) }, /* double-struck e */
{{007,012,012,033,012,012,016,000,000}, U(1D557) }, /* double-struck f */
{{000,000,017,025,025,025,017,001,016}, U(1D558) }, /* double-struck g */
{{034,024,026,025,025,025,035,000,000}, U(1D559) }, /* double-struck h */
{{016,000,036,012,012,012,037,000,000}, U(1D55A) }, /* double-struck i */
{{016,000,016,012,012,012,012,012,034}, U(1D55B) }, /* double-struck j */
{{034,024,025,025,026,025,035,000,000}, U(1D55C) }, /* double-struck k */
{{036,012,012,012,012,012,037,000,000}, U(1D55D) }, /* double-struck l */
{{000,000,032,025,025,025,035,000,000}, U(1D55E) }, /* double-struck m */
{{000,000,036,025,025,025,035,000,000}, U(1D55F) }, /* double-struck n */
{{000,000,016,025,025,025,016,000,000}, U(1D560) }, /* double-struck o */
{{000,000,036,025,025,025,026,024,034}, U(1D561) }, /* double-struck p */
{{000,000,017,025,025,025,015,005,007}, U(1D562) }, /* double-struck q */
{{000,000,035,026,024,024,034,000,000}, U(1D563) }, /* double-struck r */
{{000,000,017,022,011,005,036,000,000}, U(1D564) }, /* double-struck s */
{{016,012,033,012,012,012,007,000,000}, U(1D565) }, /* double-struck t */
{{000,000,027,025,025,025,017,000,000}, U(1D566) }, /* double-struck u */
{{000,000,035,025,022,012,004,000,000}, U(1D567) }, /* double-struck v */
{{000,000,035,025,025,025,012,000,000}, U(1D568) }, /* double-struck w */
{{000,000,035,022,012,011,027,000,000}, U(1D569) }, /* double-struck x */
{{000,000,027,025,025,025,017,001,016}, U(1D56A) }, /* double-struck y */
{{000,000,037,011,012,022,037,000,000}, U(1D56B) }, /* double-struck z */
/* Transport and map symbols */
{{004,012,012,012,033,033,025,000,000}, U(1F680) }, /* rocket */
{{000,034,010,011,027,010,000,000,000}, U(1F681) }, /* helicopter */
{{000,000,013,036,037,025,000,000,000}, U(1F682) }, /* steamlocomotive */
{{000,007,017,027,037,011,000,000,000}, U(1F69A) }, /* deliverytruck */
/* Symbols for legacy computing */
#define M(x, u) { {x}, U(u), MOS6 }, { {x}, -1, "u" #u ".sep6", SEP6 }
/* space */ M(0x01, 1FB00), M(0x02, 1FB01), M(0x03, 1FB02),
M(0x04, 1FB03), M(0x05, 1FB04), M(0x06, 1FB05), M(0x07, 1FB06),
M(0x08, 1FB07), M(0x09, 1FB08), M(0x0a, 1FB09), M(0x0b, 1FB0A),
M(0x0c, 1FB0B), M(0x0d, 1FB0C), M(0x0e, 1FB0D), M(0x0f, 1FB0E),
M(0x10, 1FB0F), M(0x11, 1FB10), M(0x12, 1FB11), M(0x13, 1FB12),
M(0x14, 1FB13), /* lfblock */ M(0x16, 1FB14), M(0x17, 1FB15),
M(0x18, 1FB16), M(0x19, 1FB17), M(0x1a, 1FB18), M(0x1b, 1FB19),
M(0x1c, 1FB1A), M(0x1d, 1FB1B), M(0x1e, 1FB1C), M(0x1f, 1FB1D),
M(0x20, 1FB1E), M(0x21, 1FB1F), M(0x22, 1FB20), M(0x23, 1FB21),
M(0x24, 1FB22), M(0x25, 1FB23), M(0x26, 1FB24), M(0x27, 1FB25),
M(0x28, 1FB26), M(0x29, 1FB27), /* rtblock */ M(0x2b, 1FB28),
M(0x2c, 1FB29), M(0x2d, 1FB2A), M(0x2e, 1FB2B), M(0x2f, 1FB2C),
M(0x30, 1FB2D), M(0x31, 1FB2E), M(0x32, 1FB2F), M(0x33, 1FB30),
M(0x34, 1FB31), M(0x35, 1FB32), M(0x36, 1FB33), M(0x37, 1FB34),
M(0x38, 1FB35), M(0x39, 1FB36), M(0x3a, 1FB37), M(0x3b, 1FB38),
M(0x3c, 1FB39), M(0x3d, 1FB3A), M(0x3e, 1FB3B), /* block */
#undef M
{{030,024,022,021,027,030,000,000,000}, U(1FBB0) }, /* arrowheadptr */
{{000,012,033,000,033,012,000,000,000}, U(1FBBB) }, /* voided Greek cross */
{{000,037,001,005,001,037,000,000,000}, U(1FBBC) }, /* right open square dot */
{{012,025,021,012,021,025,012,000,000}, U(1FBC0) }, /* RISC OS close button */
{{037,021,035,031,037,033,037,000,000}, U(1FBC4) }, /* invquestion */
{{004,012,012,004,037,004,004,012,021}, U(1FBC5) }, /* stick figure */
{{004,012,012,004,025,016,004,012,021}, U(1FBC6) }, /* ... with arms up */
{{004,012,012,004,015,026,004,012,011}, U(1FBC7) }, /* ... leaning left */
{{004,012,012,004,026,015,004,012,022}, U(1FBC8) }, /* ... leaning right */
{{004,012,012,004,037,012,021,037,012}, U(1FBC9) }, /* ... wearing dress */
{{004,012,021,021,025,033,021,000,000}, U(1FBCA) }, /* white chevron up */
/* Latin small caps */
ALIAS("a.sc", "uni1D00"), ALIAS("A.c2sc", "a.sc"),
ALIAS("b.sc", "uni0299"), ALIAS("B.c2sc", "b.sc"),
ALIAS("c.sc", "uni1D04"), ALIAS("C.c2sc", "c.sc"),
ALIAS("d.sc", "uni1D05"), ALIAS("D.c2sc", "d.sc"),
ALIAS("e.sc", "uni1D07"), ALIAS("E.c2sc", "e.sc"),
ALIAS("f.sc", "uniA730"), ALIAS("F.c2sc", "f.sc"),
ALIAS("g.sc", "uni0262"), ALIAS("G.c2sc", "g.sc"),
ALIAS("h.sc", "uni029C"), ALIAS("H.c2sc", "h.sc"),
ALIAS("i.sc", "uni026A"), ALIAS("I.c2sc", "i.sc"),
ALIAS("j.sc", "uni1D0A"), ALIAS("J.c2sc", "j.sc"),
ALIAS("k.sc", "uni1D0B"), ALIAS("K.c2sc", "k.sc"),
ALIAS("l.sc", "uni029F"), ALIAS("L.c2sc", "l.sc"),
ALIAS("m.sc", "uni1D0D"), ALIAS("M.c2sc", "m.sc"),
ALIAS("n.sc", "uni0274"), ALIAS("N.c2sc", "n.sc"),
ALIAS("o.sc", "uni1D0F"), ALIAS("O.c2sc", "o.sc"),
ALIAS("p.sc", "uni1D18"), ALIAS("P.c2sc", "p.sc"),
ALIAS("q.sc", "uniA7AF"), ALIAS("Q.c2sc", "q.sc"),
ALIAS("r.sc", "uni0280"), ALIAS("R.c2sc", "r.sc"),
ALIAS("s.sc", "uniA731"), ALIAS("S.c2sc", "s.sc"),
ALIAS("t.sc", "uni1D1B"), ALIAS("T.c2sc", "t.sc"),
ALIAS("u.sc", "uni1D1C"), ALIAS("U.c2sc", "u.sc"),
ALIAS("v.sc", "uni1D20"), ALIAS("V.c2sc", "v.sc"),
ALIAS("w.sc", "uni1D21"), ALIAS("W.c2sc", "w.sc"),
{{000,000,021,012,004,012,021,000,000}, 0xf1c0, "x.sc" },
ALIAS("X.c2sc", "x.sc"),
ALIAS("y.sc", "uni028F"), ALIAS("Y.c2sc", "y.sc"),
ALIAS("z.sc", "uni1D22"), ALIAS("Z.c2sc", "z.sc"),
{{000,000,016,021,022,021,026,000,000}, 0xf1c1, "germandbls.sc" },
ALIAS("uni1E9E.c2sc", "germandbls.sc"),
ALIAS("ae.sc", "uni1D01"), ALIAS("AE.c2sc", "ae.sc"),
ALIAS("eth.sc", "uni1D06"), ALIAS("Eth.c2sc", "eth.sc"),
ALIAS("oe.sc", "uni0276"), ALIAS("OE.c2sc", "oe.sc"),
{{000,000,020,036,021,036,020,000,000}, 0xf1c2, "thorn.sc" },
ALIAS("Thorn.c2sc", "thorn.sc"),
/*
* Backward compatibility aliases. These are glyphs whose name has
* changed and where we want to keep the old name working. All of
* these were added in Bedstead 002.002.
*/
ALIAS("uni2126", "Omega"),
ALIAS("uni2295", "circleplus"),
#define UA(u) ALIAS("uni" #u, "u" #u)
UA(10450), UA(10451), UA(10452), UA(10453), UA(10454), UA(10455), UA(10456),
UA(10457), UA(10458), UA(10459), UA(1045A), UA(1045B), UA(1045C), UA(1045D),
UA(1045E), UA(1045F), UA(10460), UA(10461), UA(10462), UA(10463), UA(10464),
UA(10465), UA(10466), UA(10467), UA(10468), UA(10469), UA(1046A), UA(1046B),
UA(1046C), UA(1046D), UA(1046E), UA(1046F), UA(10470), UA(10471), UA(10472),
UA(10473), UA(10474), UA(10475), UA(10476), UA(10477), UA(10478), UA(10479),
UA(1047A), UA(1047B), UA(1047C), UA(1047D), UA(1047E), UA(1047F), UA(1F680),
UA(1F681), UA(1F682), UA(1F69A), UA(1FBB0), UA(1FBBB), UA(1FBBC), UA(1FBC0),
UA(1FBC4), UA(1FBC5), UA(1FBC6), UA(1FBC7), UA(1FBC8), UA(1FBC9), UA(1FBCA),
#undef UA
#define UA6(u) ALIAS("uni" #u, "u" #u), ALIAS("uni" #u ".sep6", "u" #u ".sep6")
UA6(1FB00), UA6(1FB01), UA6(1FB02),
UA6(1FB03), UA6(1FB04), UA6(1FB05), UA6(1FB06),
UA6(1FB07), UA6(1FB08), UA6(1FB09), UA6(1FB0A),
UA6(1FB0B), UA6(1FB0C), UA6(1FB0D), UA6(1FB0E),
UA6(1FB0F), UA6(1FB10), UA6(1FB11), UA6(1FB12),
UA6(1FB13), UA6(1FB14), UA6(1FB15),
UA6(1FB16), UA6(1FB17), UA6(1FB18), UA6(1FB19),
UA6(1FB1A), UA6(1FB1B), UA6(1FB1C), UA6(1FB1D),
UA6(1FB1E), UA6(1FB1F), UA6(1FB20), UA6(1FB21),
UA6(1FB22), UA6(1FB23), UA6(1FB24), UA6(1FB25),
UA6(1FB26), UA6(1FB27), UA6(1FB28),
UA6(1FB29), UA6(1FB2A), UA6(1FB2B), UA6(1FB2C),
UA6(1FB2D), UA6(1FB2E), UA6(1FB2F), UA6(1FB30),
UA6(1FB31), UA6(1FB32), UA6(1FB33), UA6(1FB34),
UA6(1FB35), UA6(1FB36), UA6(1FB37), UA6(1FB38),
UA6(1FB39), UA6(1FB3A), UA6(1FB3B),
#undef UA6
/* and finally */
{{037,021,021,021,021,021,037,000,000}, -1, ".notdef" },
};
#undef U
#define NGLYPHS (sizeof(glyphs) / sizeof(glyphs[0]))
static int const nglyphs = NGLYPHS;
static struct glyph const *glyphs_by_name[NGLYPHS];
static void dolookups(struct glyph const *);
static int
getpix(char const data[YSIZE], int x, int y, unsigned flags)
{
if (x < 0 || x >= XSIZE || y < 0 || y >= YSIZE)
return 0;
else
return (data[y] >> (XSIZE - x - 1)) & 1;
}
static bool plottermode = false;
static char * get_fullname()
{
#define FULLNAME_MAX 100
static char fullname[FULLNAME_MAX];
sprintf(fullname, "Bedstead%s%s", weight->suffix, width->suffix);
return fullname;
}
static char * fullname_to_fontname(char const *fullname)
{
#define FONTNAME_MAX 29 /* Adobe-recommended limit */
static char fontname[FONTNAME_MAX + 1], *op = fontname;
char const *p = fullname;
bool gotfamily = false;
while (*p != '\0') {
assert(op - fontname <= FONTNAME_MAX);
if (*p == ' ') {
if (!gotfamily) {
*op++ = '-';
gotfamily = true;
}
} else {
*op++ = *p;
}
++p;
}
*op++ = '\0';
return fontname;
}
static int
compare_glyphs_by_name(const void *va, const void *vb)
{
struct glyph const * const *ap = va, * const *bp = vb;
struct glyph const *a = *ap, *b = *bp;
return strcmp(a->name, b->name);
}
static int compare_glyph_to_name(const void *vn, const void *vg)
{
struct glyph const * const *gp = vg;
struct glyph const *g = *gp;
char const *name = vn;
return strcmp(name, g->name);
}
static struct glyph const *get_glyph_by_name(char const *name)
{
struct glyph const * const *gp;
gp = bsearch(name, glyphs_by_name, nglyphs,
sizeof(glyphs_by_name[0]), &compare_glyph_to_name);
assert(gp != NULL);
return *gp;
}
int
main(int argc, char **argv)
{
int i;
int extraglyphs = 0;
char *endptr;
if (argc == 2 && strcmp(argv[1], "--complement") == 0) {
glyph_complement();
return 0;
}
while (argc > 1) {
for (i = 0; i < nwidths; i++)
if (strcmp(argv[1], widths[i].option) == 0) {
width = &widths[i];
argv++; argc--;
goto next;
}
for (i = 0; i < nweights; i++)
if (strcmp(argv[1], weights[i].option) == 0) {
weight = &weights[i];
argv++; argc--;
goto next;
}
if (strcmp(argv[1], "--plotter") == 0) {
plottermode = true;
argv++; argc--;
} else if (strcmp(argv[1], "--") == 0) {
argv++; argc--;
break;
} else if (argv[1][0] == '-') {
fprintf(stderr, "unknown option '%s'\n", argv[1]);
return 1;
} else break;
argv++; argc--;
next:;
}
if (argc > 1) {
char data[YSIZE];
int i, y;
unsigned long u;
for (y = 0; y < YSIZE; y++)
data[y] = 0;
y = 0;
for (i = 1; i < argc; i++) {
if (y >= YSIZE) {
fprintf(stderr, "too many arguments\n");
return 1;
}
u = strtoul(argv[i], &endptr, 0);
if (u > 077 || !argv[i] || *endptr) {
fprintf(stderr, "invalid argument \"%s\"\n",
argv[i]);
return 1;
}
data[y++] = u;
}
dochar(data, 0);
return 0;
}
for (i = 0; i < nglyphs; i++)
if (glyphs[i].unicode == -1)
extraglyphs++;
printf("SplineFontDB: 3.0\n");
printf("FontName: %s\n", fullname_to_fontname(get_fullname()));
printf("FullName: %s\n", get_fullname());
printf("FamilyName: Bedstead\n");
if ((weight->ttfweight == 500 || weight->ttfweight == 700) &&
width->suffix[0] == '\0')
/* Normal width; regular or bold */
printf("LangName: 1033 \"\" \"Bedstead\" \"%s\"\n",
weight->suffix[0] ? weight->suffix + 1 : "Regular");
else
/*
* Slightly unusual face, so we need to set the
* "Preferred" family and style.
*/
printf("LangName: 1033 \"\" \"Bedstead%s%s\" \"%s\" \"\" \"\" "
"\"\" \"\" \"\" \"\" \"\" \"\" \"\" \"\" \"\" \"\" "
"\"\" \"Bedstead\" \"%s%s\"\n",
weight->ttfweight == 700 ? "" : weight->suffix,
width->suffix,
weight->ttfweight == 700 ? weight->suffix+1 : "Regular",
weight->suffix[0] ? weight->suffix+1 : "",
weight->suffix[0] ? width->suffix :
width->suffix[0] ? width->suffix+1 : "");
printf("Weight:%s\n", weight->suffix[0] ? weight->suffix : " Medium");
printf("OS2_WeightWidthSlopeOnly: 1\n");
printf("Copyright: Dedicated to the public domain\n");
printf("Version: 002.004\n");
printf("ItalicAngle: 0\n");
printf("UnderlinePosition: %g\n", (double)(-3 * YPIX / 2));
printf("UnderlineWidth: %g\n", (double)(YPIX));
printf("OS2StrikeYPos: %d\n", (int)(3 * YPIX));
printf("OS2StrikeYSize: %d\n", (int)(YPIX));
printf("Ascent: %g\n", (double)(8 * YPIX));
printf("Descent: %g\n", (double)(2 * YPIX));
/* Sub/Superscript are three by five pixels */
printf("OS2SubXSize: %d\n", (int)(YSIZE * YPIX * 3 / (XSIZE - 1)));
printf("OS2SupXSize: %d\n", (int)(YSIZE * YPIX * 3 / (XSIZE - 1)));
printf("OS2SubYSize: %d\n", (int)(YSIZE * YPIX * 5 / (YSIZE - 3)));
printf("OS2SupYSize: %d\n", (int)(YSIZE * YPIX * 5 / (YSIZE - 3)));
printf("OS2SubXOff: 0\n");
printf("OS2SupXOff: 0\n");
printf("OS2SubYOff: %d\n", (int)(2 * YPIX));
printf("OS2SupYOff: %d\n", (int)(2 * YPIX));
printf("FSType: 0\n");
printf("TTFWeight: %d\n", weight->ttfweight);
printf("TTFWidth: %d\n", width->ttfwidth);
dopanose();
printf("OS2FamilyClass: %d\n", 0x080a);
printf("LayerCount: 2\n");
printf("Layer: 0 0 \"Back\" 1\n");
printf("Layer: 1 0 \"Fore\" 0\n");
printf("Encoding: UnicodeFull\n");
printf("NameList: Adobe Glyph List\n");
printf("DisplaySize: -24\n");
printf("AntiAlias: 1\n");
printf("FitToEm: 1\n");
if (plottermode) {
printf("StrokedFont: 1\n");
printf("StrokeWidth: 50\n");
}
printf("BeginPrivate: 5\n");
printf(" StdHW 6 [%4g]\n", (double)YPIX);
printf(" StdVW 6 [%4g]\n",
(double)(XPIX * (100 + weight->weight) / 100));
printf(" BlueValues 35 [0 0 %4g %4g %4g %4g %4g %4g]\n",
(double)(YPIX * 5), (double)(YPIX * 5),
(double)(YPIX * 6), (double)(YPIX * 6),
(double)(YPIX * 7), (double)(YPIX * 7));
printf(" OtherBlues 21 [%4g %4g %4g %4g]\n",
(double)(YPIX * -2), (double)(YPIX * -2),
(double)(YPIX * 1), (double)(YPIX * 1));
printf(" BlueFuzz 1 0\n");
printf("EndPrivate\n");
/* Force monochrome at 10 and 20 pixels, and greyscale elsewhere. */
printf("GaspTable: 5 9 2 10 0 19 3 20 0 65535 3\n");
printf("Lookup: 3 0 0 \"aalt: all alternates\" {\"aalt\"} "
"['aalt' ('DFLT' <'dflt'> 'latn' <'dflt'>)]\n");
printf("Lookup: 1 0 0 \"ss01: SAA5051 forms\" {\"ss01\" (\"saa5051\")} "
"['ss01' ('DFLT' <'dflt'> 'latn' <'dflt'>)]\n");
printf("OtfFeatName: 'ss01' 1033 \"SAA5051\"\n");
printf("Lookup: 1 0 0 \"ss02: SAA5052 forms\" {\"ss02\" (\"saa5052\")} "
"['ss02' ('DFLT' <'dflt'> 'latn' <'dflt'>)]\n");
printf("OtfFeatName: 'ss02' 1033 \"SAA5052\"\n");
printf("Lookup: 1 0 0 \"ss04: SAA5054 forms\" {\"ss04\" (\"saa5054\")} "
"['ss04' ('DFLT' <'dflt'> 'latn' <'dflt'>)]\n");
printf("OtfFeatName: 'ss04' 1033 \"SAA5054\"\n");
printf("Lookup: 1 0 0 \"ss14: 4-cell separated graphics\" "
"{\"ss14\" (\"sep4\")} "
"['ss14' ('DFLT' <'dflt'> 'latn' <'dflt'>)]\n");
printf("OtfFeatName: 'ss14' 1033 \"4-cell separated graphics\"\n");
printf("Lookup: 1 0 0 \"ss16: 6-cell separated graphics\" "
"{\"ss16\" (\"sep6\")} "
"['ss16' ('DFLT' <'dflt'> 'latn' <'dflt'>)]\n");
printf("OtfFeatName: 'ss16' 1033 \"6-cell separated graphics\"\n");
printf("Lookup: 257 0 0 \"palt: proportional metrics\" {\"palt\"} "
"['palt' ('DFLT' <'dflt'> 'latn' <'dflt'>)]\n");
printf("Lookup: 1 0 0 \"smcp: lower-case to small caps\" "
"{\"smcp\" (\"sc\")} "
"['smcp' ('latn' <'dflt'>)]\n");
printf("Lookup: 1 0 0 \"c2sc: upper-case to small caps\" "
"{\"c2sc\" (\"c2sc\")} "
"['c2sc' ('latn' <'dflt'>)]\n");
printf("BeginChars: %d %d\n", 0x110000 + extraglyphs, nglyphs);
extraglyphs = 0;
for (i = 0; i < nglyphs; i++)
glyphs_by_name[i] = glyphs + i;
qsort(glyphs_by_name, nglyphs, sizeof(glyphs_by_name[0]),
&compare_glyphs_by_name);
for (i = 0; i < nglyphs; i++) {
printf("\nStartChar: %s\n", glyphs[i].name);
printf("Encoding: %d %d %d\n",
glyphs[i].unicode != -1 ? glyphs[i].unicode :
0x110000 + extraglyphs++, glyphs[i].unicode, i);
printf("Width: %g\n", (double)(XSIZE * XPIX));
if (glyphs[i].flags & (MOS6|MOS4))
printf("Flags: W\n");
else
printf("Flags: HW\n");
printf("LayerCount: 2\n");
dolookups(&glyphs[i]);
if (glyphs[i].alias_of != NULL)
doalias(glyphs[i].alias_of);
else if (glyphs[i].flags & MOS6)
domosaic(glyphs[i].data[0],
(glyphs[i].flags & SEP) != 0);
else if (glyphs[i].flags & MOS4)
domosaic4(glyphs[i].data[0],
(glyphs[i].flags & SEP) != 0);
else {
if (plottermode)
dochar_plotter(glyphs[i].data, glyphs[i].flags);
else
dochar(glyphs[i].data, glyphs[i].flags);
}
printf("EndChar\n");
}
printf("EndChars\n");
printf("EndSplineFont\n");
return 0;
}
static void
dopanose()
{
/*
* PANOSE is a complex font categorisation scheme. I suspect
* no-one uses it, but it's a mandatory part of the 'OS/2'
* table, so it would be nice to get it right. This procedure
* calculates the PANOSE code for a Bedstead variant based on
* its design parameters.
*
* See <http://panose.com> for the full details.
*/
int panose[10];
int stdvw;
/* Common digits */
/* WeightRat == 700/StdVW */
stdvw = XPIX * (100 + weight->weight) / 100;
if (stdvw <= 20) /* WeightRat >= 35 */
panose[2] = 2; /* Very Light */
else if (stdvw < 39) /* WeightRat > 17.9 */
panose[2] = 3; /* Light */
else if (stdvw <= 70) /* WeightRat >= 10 */
panose[2] = 4; /* Thin */
else if (stdvw <= 94) /* WeightRat > 7.44 */
panose[2] = 5; /* Book */
else if (stdvw < 128) /* WeightRat > 5.5 */
panose[2] = 6; /* Medium */
else if (stdvw < 156) /* WeightRat > 4.5 */
panose[2] = 7; /* Demi */
else if (stdvw <= 200) /* WeightRat >= 3.5 */
panose[2] = 8; /* Bold */
else if (stdvw <= 280) /* WeightRat >= 2.5 */
panose[2] = 9; /* Heavy */
else if (stdvw <= 350) /* WeightRat >= 2.0 */
panose[2] = 10; /* Black */
else
panose[2] = 11; /* Extra Black */
/*
* To make life simpler, ignore diagonals when calculating
* ConRat.
*/
/* ConRat == min(StdVW / 100, 100 / StdVW) */
if (stdvw > 80 && stdvw < 125)
panose[4] = 2; /* None */
else if (stdvw > 65 && stdvw < 154)
panose[4] = 3; /* Very Low */
else if (stdvw > 48 && stdvw < 209)
panose[4] = 4; /* Low */
else if (stdvw > 30 && stdvw < 334)
panose[4] = 5; /* Medium Low */
else if (stdvw > 20 && stdvw < 500)
panose[4] = 6; /* Medium */
else if (stdvw > 15 && stdvw < 667)
panose[4] = 7; /* Medium High */
else if (stdvw > 8 && stdvw < 1250)
panose[4] = 8; /* High */
else
panose[4] = 9; /* Very High */
/*
* First digit is overall style. Bedstead is a text font, but
* PANOSE says that fonts with horizontal stress and extreme
* aspect ratios should be classified as decorative.
*/
if (stdvw < 100 || /* ConRat > 1.00 */
XPIX > 164) { /* ORat < 0.85 */
panose[0] = 4; /* Latin Decorative */
panose[1] = 2; /* Derivative */
/* ORat == 140/XPIX */
if (XPIX <= 53)
panose[3] = 2; /* Super Condensed */
else if (XPIX <= 66)
panose[3] = 3; /* Very Condensed */
else if (XPIX <= 110)
panose[3] = 4; /* Condensed */
else if (XPIX <= 152)
panose[3] = 5; /* Normal */
else if (XPIX <= 155)
panose[3] = 6; /* Extended */
else if (XPIX <= 164)
panose[3] = 7; /* Very Extended */
else
panose[3] = 8; /* Super Extended */
panose[5] = 11; /* Normal Sans Serif */
panose[6] = 2; /* Standard Solid Fill */
panose[7] = 2; /* No Lining */
panose[8] = 3; /* Square */
panose[9] = 2; /* Extended Collection */
} else {
panose[0] = 2; /* Latin Text */
panose[1] = 11; /* Normal Sans Serif */
/* J and M are the same width. */
panose[3] = 9; /* Monospaced */
if (panose[4] == 2)
panose[5] = 2; /* No Variation */
else if (stdvw > 100)
panose[5] = 5; /* Gradual/Vertical */
else
panose[5] = 6; /* Gradual/Hoizontal */
/* Unusually shaped 'A' means no fit here. */
panose[6] = 1; /* No Fit */
/* OutCurv == 0.791 */
/* FIXME: Only correct for weight == 0 */
panose[7] = 5; /* Normal/Boxed */
panose[8] = 3; /* Standard/Pointed */
panose[9] = 7; /* Ducking/Large */
}
printf("Panose: %d %d %d %d %d %d %d %d %d %d\n",
panose[0], panose[1], panose[2], panose[3], panose[4],
panose[5], panose[6], panose[7], panose[8], panose[9]);
}
static void
dopalt(struct glyph const *g)
{
int i;
unsigned char cols = 0;
int dx = 0, dh = 0;
while (g->alias_of != NULL)
g = get_glyph_by_name(g->alias_of);
if (g->flags & (MOS6|MOS4)) return;
/*
* For proportional layout, we'd like a left side-bearing of
* one pixel, and a right side-bearing of zero. Space
* characters get an advance width of three pixels.
*/
for (i = 0; i < YSIZE; i++)
cols |= g->data[i] & ((1 << XSIZE) - 1);
if (cols == 0)
dh = 3 - XSIZE;
else {
while (!(cols & 1 << (XSIZE - 2))) {
cols <<= 1;
dx--;
}
while (!(cols & 1)) {
cols >>= 1;
dh--;
}
}
if (dx || dh)
printf("Position2: \"palt\" dx=%d dy=0 dh=%d dv=0\n",
(int)(dx * XPIX), (int)(dh * XPIX));
}
static void
dolookups(struct glyph const *g)
{
char prefix[32];
struct glyph const **found, **gp;
size_t plen;
bool any_alt = false;
plen = sprintf(prefix, "%s.", g->name);
assert(plen < 32);
/* Look for related glyphs */
found = bsearch(&g, glyphs_by_name, nglyphs, sizeof(glyphs_by_name[0]),
&compare_glyphs_by_name);
assert(found != NULL);
for (gp = found + 1; gp < glyphs_by_name + nglyphs; gp++) {
if (strncmp(prefix, (*gp)->name, plen) != 0) break;
any_alt = true;
if (strcmp((*gp)->name + plen, "saa5051") == 0)
printf("Substitution2: \"ss01\" %s\n", (*gp)->name);
if (strcmp((*gp)->name + plen, "saa5052") == 0)
printf("Substitution2: \"ss02\" %s\n", (*gp)->name);
if (strcmp((*gp)->name + plen, "saa5054") == 0)
printf("Substitution2: \"ss04\" %s\n", (*gp)->name);
if (strcmp((*gp)->name + plen, "sep4") == 0)
printf("Substitution2: \"ss14\" %s\n", (*gp)->name);
if (strcmp((*gp)->name + plen, "sep6") == 0)
printf("Substitution2: \"ss16\" %s\n", (*gp)->name);
if (strcmp((*gp)->name + plen, "sc") == 0)
printf("Substitution2: \"smcp\" %s\n", (*gp)->name);
if (strcmp((*gp)->name + plen, "c2sc") == 0)
printf("Substitution2: \"c2sc\" %s\n", (*gp)->name);
}
if (any_alt) {
printf("AlternateSubs2: \"aalt\"");
for (gp = found + 1; gp < glyphs_by_name + nglyphs; gp++) {
if (strncmp(prefix, (*gp)->name, plen) != 0) break;
printf(" %s", (*gp)->name);
}
printf("\n");
}
dopalt(g);
}
typedef struct vec {
int x, y;
} vec;
typedef struct point {
struct point *next, *prev;
struct vec v;
} point;
#define MAXPOINTS (XSIZE * YSIZE * 20)
static point points[MAXPOINTS];
static int nextpoint;
static void
clearpath()
{
nextpoint = 0;
}
static void
moveto(unsigned x, unsigned y)
{
struct point *p = &points[nextpoint++];
p->v.x = x; p->v.y = y;
p->next = p->prev = NULL;
}
static void
lineto(unsigned x, unsigned y)
{
struct point *p = &points[nextpoint++];
p->v.x = x; p->v.y = y;
p->next = NULL;
p->prev = p - 1;
p->prev->next = p;
}
static void
closepath()
{
struct point *p = &points[nextpoint - 1];
while (p->prev) p--;
p->prev = points + nextpoint - 1;
points[nextpoint - 1].next = p;
}
static void
killpoint(point *p)
{
p->prev->next = p->next;
p->next->prev = p->prev;
p->next = p->prev = NULL;
}
static vec const zero = { 0, 0 };
static int
vec_eqp(vec v1, vec v2)
{
return v1.x == v2.x && v1.y == v2.y;
}
static vec
vec_sub(vec v1, vec v2)
{
vec ret;
ret.x = v1.x - v2.x; ret.y = v1.y - v2.y;
return ret;
}
static int
gcd(int a, int b)
{
int t;
while (b != 0) {
t = b;
b = a % b;
a = t;
}
return a;
}
/* Return the shortest representable vector parallel to the argument. */
static vec
vec_bearing(vec v)
{
vec ret;
int d = gcd(abs(v.x), abs(v.y));
if (d != 0) {
ret.x = v.x / d;
ret.y = v.y / d;
} else {
ret.x = 0;
ret.y = 0;
}
return ret;
}
/* If p is identical to its successor, remove p. */
static void
fix_identical(point *p)
{
if (!p->next) return;
if (vec_eqp(p->next->v, p->v))
killpoint(p);
}
/* Are a, b, and c distinct collinear points in that order? */
static int
vec_inline3(vec a, vec b, vec c)
{
return
vec_eqp(vec_bearing(vec_sub(b, a)), vec_bearing(vec_sub(c, b))) &&
!vec_eqp(vec_bearing(vec_sub(b, a)), zero);
}
/* Are a, b, c, and d distinct collinear points in that order? */
static int
vec_inline4(vec a, vec b, vec c, vec d)
{
return vec_inline3(a, b, c) && vec_inline3(b, c, d);
}
/* If p is on the line between its predecessor and successor, remove p. */
static void
fix_collinear(point *p)
{
if (!p->next) return;
if (vec_inline3(p->prev->v, p->v, p->next->v))
killpoint(p);
}
/* If p is the only point on its path, remove p. */
static void
fix_isolated(point *p)
{
if (p->next == p)
killpoint(p);
}
static int done_anything;
static void
fix_edges(point *a0, point *b0)
{
point *a1 = a0->next, *b1 = b0->next;
assert(a1->prev == a0); assert(b1->prev == b0);
assert(a0 != a1); assert(a0 != b0);
assert(a1 != b1); assert(b0 != b1);
if (vec_eqp(vec_bearing(vec_sub(a0->v, a1->v)),
vec_bearing(vec_sub(b1->v, b0->v))) &&
(vec_inline4(a0->v, b1->v, a1->v, b0->v) ||
vec_inline4(a0->v, b1->v, b0->v, a1->v) ||
vec_inline4(b1->v, a0->v, b0->v, a1->v) ||
vec_inline4(b1->v, a0->v, a1->v, b0->v) ||
vec_eqp(a0->v, b1->v) || vec_eqp(a1->v, b0->v))) {
a0->next = b1; b1->prev = a0;
b0->next = a1; a1->prev = b0;
fix_isolated(a0);
fix_identical(a0);
fix_collinear(b1);
fix_isolated(b0);
fix_identical(b0);
fix_collinear(a1);
done_anything = 1;
}
}
static void
clean_path()
{
int i, j;
do {
done_anything = 0;
for (i = 0; i < nextpoint; i++)
for (j = i+1; points[i].next && j < nextpoint; j++)
if (points[j].next)
fix_edges(&points[i], &points[j]);
} while (done_anything);
}
static void
emit_contour(point *p0)
{
point *p = p0, *p1;
do {
printf(" %g %g %s 1\n",
(double)p->v.x / XSCALE,
(double)p->v.y / YSCALE - 3*YPIX,
p == p0 && p->next ? "m" : "l");
p1 = p->next;
p->prev = p->next = NULL;
p = p1;
} while (p);
}
static void
emit_path()
{
int i, pass;
point *p;
bool started = false;
/*
* On the first pass, emit open contours (if there are any).
* On the second pass, emit all remaining contours.
*/
for (pass = 0; pass <= 1; pass++) {
for (i = 0; i < nextpoint; i++) {
p = &points[i];
if (p->next && (!p->prev || pass == 1)) {
if (!started) printf("Fore\nSplineSet\n");
started = true;
emit_contour(p);
}
}
}
if (started) printf("EndSplineSet\n");
}
/*
* To vary the weight of Bedstead, we just vary the thickness of
* vertical strokes. More precisely, we pretend that the weight
* variation is achieved by moving the rising edges of the output
* waveform of the SAA5050. This is implemented by moving all left
* edges left and right. The code below is not fully general: it can
* handle cases where the slack in horizontal lines doesn't run out,
* and one special case where it does. This means it should work
* correctly for the range (2 * XQTR_S - 1) < weight < (2 * XQTR_S).
*/
static void
adjust_weight()
{
int i, X, Y, PX, PY, NX, NY, W = weight->weight;
point *p;
struct vec moves[MAXPOINTS];
for (i = 0; i < nextpoint; i++) {
p = &points[i];
if (p->next == NULL) continue;
assert(p->prev != NULL);
moves[i].x = moves[i].y = 0;
X = p->v.x; Y = p->v.y;
PX = p->prev->v.x; PY = p->prev->v.y;
NX = p->next->v.x; NY = p->next->v.y;
/* Move left-edge points horizontally */
if (PY <= Y && Y <= NY) {
moves[i].x -= W;
/*
* These two clauses deal in an ad-hoc way
* with the special cases (all four seen on
* the "asterisk" glyph) where the bevel of an
* inside corner gets completely consumed by
* boldening.
*/
if (W > XQTR_S && PY == Y && PX == X - XQTR_S) {
moves[i].y += W - XQTR_S;
if (NX != X) moves[i].x += W - XQTR_S;
killpoint(p->prev);
}
if (W > XQTR_S && NY == Y && NX == X - XQTR_S) {
moves[i].y -= W - XQTR_S;
if (PX != X) moves[i].x += W - XQTR_S;
killpoint(p->next);
}
}
/* Move top inner corner points along NE/SW diagonal */
if (PY < Y && Y > NY && PX > X && X > NX) {
moves[i].x -= W/2;
moves[i].y -= W/2;
}
/* Move bottom inner corner points along NW/SE diagonal */
if (PY > Y && Y < NY && PX < X && X < NX) {
moves[i].x -= W/2;
moves[i].y += W/2;
}
}
for (i = 0; i < nextpoint; i++) {
p = &points[i];
if (p->next == NULL) continue;
assert(p->prev != NULL);
p->v.x += moves[i].x;
p->v.y += moves[i].y;
}
}
static void
blackpixel(int x, int y, int bl, int br, int tr, int tl)
{
x *= XPIX_S; y *= YPIX_S;
if (bl) moveto(x, y);
else { moveto(x+XQTR_S, y); lineto(x, y+YQTR_S); }
if (tl) lineto(x, y+YPIX_S);
else { lineto(x, y+YPIX_S-YQTR_S); lineto(x+XQTR_S, y+YPIX_S); }
if (tr) lineto(x+XPIX_S, y+YPIX_S);
else { lineto(x+XPIX_S-XQTR_S, y+YPIX_S);
lineto(x+XPIX_S, y+YPIX_S-YQTR_S); }
if (br) lineto(x+XPIX_S, y);
else { lineto(x+XPIX_S, y+YQTR_S); lineto(x+XPIX_S-XQTR_S, y); }
closepath();
}
static void
whitepixel(int x, int y, int bl, int br, int tr, int tl)
{
x *= XPIX_S; y *= YPIX_S;
if (bl) {
moveto(x, y); lineto(x, y+YPIX_S-YQTR_S);
if (br) { lineto(x+XPIX_S/2, y+YPIX_S/2-YQTR_S);
lineto(x+XQTR_S, y); }
else lineto(x+XPIX_S-XQTR_S, y);
closepath();
}
if (tl) {
moveto(x, y+YPIX_S); lineto(x+XPIX_S-XQTR_S, y+YPIX_S);
if (bl) { lineto(x+XPIX_S/2-XQTR_S, y+YPIX_S/2);
lineto(x, y+YPIX_S-YQTR_S); }
else lineto(x, y+YQTR_S);
closepath();
}
if (tr) {
moveto(x+XPIX_S, y+YPIX_S); lineto(x+XPIX_S, y+YQTR_S);
if (tl) { lineto(x+XPIX_S/2, y+YPIX_S/2+YQTR_S);
lineto(x+XPIX_S-XQTR_S, y+YPIX_S); }
else lineto(x+XQTR_S, y+YPIX_S);
closepath();
}
if (br) {
moveto(x+XPIX_S, y); lineto(x+XQTR_S, y);
if (tr) { lineto(x+XPIX_S/2+XQTR_S, y+YPIX_S/2);
lineto(x+XPIX_S, y+YQTR_S); }
else lineto(x+XPIX_S, y+YPIX_S-YQTR_S);
closepath();
}
}
static void
dochar(char const data[YSIZE], unsigned flags)
{
int x, y;
#define GETPIX(x,y) (getpix(data, (x), (y), flags))
#define L GETPIX(x-1, y)
#define R GETPIX(x+1, y)
#define U GETPIX(x, y-1)
#define D GETPIX(x, y+1)
#define UL GETPIX(x-1, y-1)
#define UR GETPIX(x+1, y-1)
#define DL GETPIX(x-1, y+1)
#define DR GETPIX(x+1, y+1)
clearpath();
for (x = 0; x < XSIZE; x++) {
for (y = 0; y < YSIZE; y++) {
if (GETPIX(x, y)) {
bool tl, tr, bl, br;
/* Assume filled in */
tl = tr = bl = br = true;
/* Check for diagonals */
if ((UL && !U && !L) || (DR && !D && !R))
tr = bl = false;
if ((UR && !U && !R) || (DL && !D && !L))
tl = br = false;
/* Avoid odd gaps */
if (L || UL || U) tl = true;
if (R || UR || U) tr = true;
if (L || DL || D) bl = true;
if (R || DR || D) br = true;
blackpixel(x, YSIZE - y - 1, bl, br, tr, tl);
} else {
bool tl, tr, bl, br;
/* Assume clear */
tl = tr = bl = br = false;
/* white pixel -- just diagonals */
if (L && U && !UL) tl = true;
if (R && U && !UR) tr = true;
if (L && D && !DL) bl = true;
if (R && D && !DR) br = true;
whitepixel(x, YSIZE - y - 1, bl, br, tr, tl);
}
}
}
clean_path();
adjust_weight();
emit_path();
}
static void
reverse_contour(point *a)
{
point *tmp;
while (a->prev != NULL)
a = a->prev;
while (a != NULL) {
tmp = a->next;
a->next = a->prev;
a->prev = tmp;
a = tmp;
}
}
/* Join together two points each at the end of a contour */
static void
join_ends(point *a, point *b)
{
point *tmp;
if (a->prev == NULL && b->next == NULL) {
tmp = a; a = b; b = tmp;
}
if (a->prev == NULL)
reverse_contour(a);
if (b->next == NULL)
reverse_contour(b);
assert(a->next == NULL);
assert(a->prev != NULL);
assert(b->prev == NULL);
assert(b->next != NULL);
assert(vec_eqp(a->v, b->v));
a->next = b;
b->prev = a;
fix_identical(a); /* Will delete a */
fix_collinear(b); /* Might delete b */
}
static bool
point_endp(point *p)
{
return p->next == NULL || p->prev == NULL;
}
static bool
point_deadp(point *p)
{
return p->next == NULL && p->prev == NULL;
}
static void
clean_skeleton()
{
int i, j;
/* Pass 1: join collinear connected segments */
for (i = 0; i < nextpoint; i++) {
if (point_deadp(&points[i]))
continue;
for (j = 0; j < nextpoint; j++) {
if (point_deadp(&points[j]))
continue;
if (vec_eqp(points[i].v, points[j].v) &&
points[i].next == NULL && points[j].prev == NULL &&
vec_inline3(points[i].prev->v, points[i].v,
points[j].next->v))
join_ends(&points[i], &points[j]);
if (point_deadp(&points[i]))
break;
}
}
/* Pass 2: join any connected segments */
for (i = 0; i < nextpoint; i++) {
if (point_deadp(&points[i]))
continue;
for (j = i+1; j < nextpoint; j++) {
if (point_deadp(&points[j]))
continue;
if (vec_eqp(points[i].v, points[j].v) &&
point_endp(&points[i]) && point_endp(&points[j]))
join_ends(&points[i], &points[j]);
if (point_deadp(&points[i]))
break;
}
}
}
static void
dochar_plotter(char const data[YSIZE], unsigned flags)
{
int x, y;
#define CONNECT(dx, dy) do { \
moveto(x * XPIX_S, (YSIZE-y-1) * YPIX_S); \
lineto((x+dx) * XPIX_S, (YSIZE-y-1+dy) * YPIX_S); \
} while (0)
clearpath();
for (x = 0; x < XSIZE; x++) {
for (y = 0; y < YSIZE; y++) {
if (GETPIX(x, y)) {
if (R) CONNECT(1, 0);
if (D) CONNECT(0, -1);
if (DR && !D && !R) CONNECT(1, -1);
if (DL && !D && !L) CONNECT(-1, -1);
if (!U && !D && !L && !R &&
!UL && !UR && !DL && !DR) {
/* draw a dot */
CONNECT(0, 0);
}
}
}
}
clean_skeleton();
emit_path();
}
static void
tile(int x0, int y0, int x1, int y1)
{
x0 *= XPIX_S; y0 *= YPIX_S;
x1 *= XPIX_S; y1 *= YPIX_S;
moveto(x0, y0); lineto(x0, y1); lineto(x1, y1); lineto(x1, y0);
closepath();
}
static void
domosaic(unsigned code, bool sep)
{
clearpath();
if (code & 1) tile(0 + sep, 8 + sep, 3, 11);
if (code & 2) tile(3 + sep, 8 + sep, 6, 11);
if (code & 4) tile(0 + sep, 4 + sep, 3, 8);
if (code & 8) tile(3 + sep, 4 + sep, 6, 8);
if (code & 16) tile(0 + sep, 1 + sep, 3, 4);
if (code & 32) tile(3 + sep, 1 + sep, 6, 4);
clean_path();
emit_path();
}
static void
domosaic4(unsigned code, bool sep)
{
clearpath();
if (code & 1) tile(0 + sep, 6 + sep, 3, 11);
if (code & 2) tile(3 + sep, 6 + sep, 6, 11);
if (code & 4) tile(0 + sep, 1 + sep, 3, 6);
if (code & 8) tile(3 + sep, 1 + sep, 6, 6);
clean_path();
emit_path();
}
static void
doalias(char const *alias_of)
{
struct glyph const *g;
g = get_glyph_by_name(alias_of);
printf("Refer: %td %d N 1 0 0 1 0 0 1\n", g - glyphs, g->unicode);
}
static int
byunicode(const void *va, const void *vb)
{
struct glyph const *a = *(struct glyph const **)va,
*b = *(struct glyph const **)vb;
/* Cast to unsigned so -1 sorts last. */
if ((unsigned)a->unicode < (unsigned)b->unicode) return -1;
if ((unsigned)a->unicode > (unsigned)b->unicode) return +1;
return strcmp(a->name, b->name);
}
static void
glyph_complement()
{
int const nrow = 16, ncol=12;
int i, unicol = 32/nrow, col = -1, row = 0;
int const nglyphs = sizeof(glyphs) / sizeof(glyphs[0]);
int npages = 0;
bool newcol = false;
struct glyph const *sorted[nglyphs], *g;
for (i = 0; i < nglyphs; i++)
sorted[i] = &glyphs[i];
qsort(sorted, nglyphs, sizeof(sorted[0]), &byunicode);
printf("%%!PS-Adobe\n");
printf("%%%%Creator: bedstead\n");
printf("%%%%Title: Bedstead Glyph Complement\n");
printf("/xfont /Bedstead findfont 20 scalefont def\n");
printf("/nfont /Bedstead findfont 10 scalefont def\n");
printf("/lfont /Bedstead findfont 4 scalefont def\n");
printf("/str 50 string def\n");
printf("/centre {\n");
printf(" dup stringwidth pop 2 div neg 0 rmoveto show\n");
printf("} def\n");
printf("/label {\n");
printf(" lfont setfont centre\n");
printf("} def\n");
/* unicode glyphname exemplify -- */
printf("/exemplify {\n");
printf(" xfont setfont dup 14 14 moveto glyphshow\n");
printf(" 0 0 moveto 0 40 lineto 40 40 lineto 40 0 lineto closepath\n");
printf(" 1 setlinewidth gsave stroke grestore clip\n");
printf(" 0.1 setlinewidth\n");
printf(" 14 10 moveto 14 30 lineto 26 30 lineto 26 10 lineto\n");
printf(" closepath stroke\n");
printf(" 20 36 moveto str cvs label\n");
printf(" 20 2 moveto label\n");
printf("} def\n");
printf("/colnum {\n");
printf(" nfont setfont 20 42 moveto centre\n");
printf("} def\n");
printf("/rownums {\n");
printf(" nfont setfont 0 1 15 {\n");
printf(" dup -40 mul 16.5 add -10 exch moveto\n");
printf(" 16 1 string cvrs show\n");
printf(" } for\n");
printf("} def\n");
printf("%%%%EndProlog\n");
for (i = 0; i < nglyphs; i++) {
g = sorted[i];
if (g->unicode / nrow != unicol ||
(g->unicode == -1 && row == nrow)) {
if (++col == ncol) {
printf("grestore showpage\n");
col = -1;
}
unicol = g->unicode / nrow;
row = 0;
newcol = true;
}
if (col == -1) {
++npages;
printf("%%%%Page: %d %d\n", npages, npages);
printf("gsave 20 700 translate rownums\n");
col = 0;
newcol = true;
}
if (newcol && g->unicode != -1) {
printf("gsave %d 0 translate (%03X) colnum grestore\n",
col * 40, unicol);
newcol = false;
}
printf("gsave %d %d translate ",
(col * 40),
-((g->unicode == -1 ? row++ : g->unicode%nrow) * 40));
if (g->unicode != -1)
printf("(U+%04X)", g->unicode);
else
printf("()");
printf("/%s ", g->name);
printf("exemplify grestore\n");
}
printf("showpage\n");
printf("%%%%EOF\n");
}