unibetacode-1.2/ 0000755 0001750 0001750 00000000000 13423202120 012307 5 ustar paul paul unibetacode-1.2/examples/ 0000755 0001750 0001750 00000000000 13324230662 014141 5 ustar paul paul unibetacode-1.2/examples/byzantine.prep 0000644 0001750 0001750 00000001115 13323410334 017025 0 ustar paul paul &Byzantine Music Symbols (Unicode Block U+1D000..U+1D0FF)$
#2070 &(U+1D046)$ *)/ison
#2071 &(U+1D047)$ *)oli/gon
#2078 &(U+1D04E)$ *kenth/mata
#2073 &(U+1D049)$ *petasth/
#2081 &(U+1D051)$ *)apo/strofos
#2083 &(U+1D053)$ *(uporroh/
#2085 &(U+1D055)$ *)elafro/n
#2086 &(U+1D056)$ *xamhlh/
#2036 &(U+1D024)$ *kla/sma
#2133 &(U+1D085)$ *(aplh/
#2134 &(U+1D086)$ *diplh/
#2135 &(U+1D087)$ *triplh/
#2143 &(U+1D08F)$ *gorgo\n
#2146 &(U+1D092)$ *di/gorgon
#2150 &(U+1D096)$ *tri/gorgon
#2151 &(U+1D097)$ *)argo\n
unibetacode-1.2/examples/genesis.beta 0000644 0001750 0001750 00000001134 13323406353 016433 0 ustar paul paul &Genesis 1:1$
&Koine Greek (Septuagint):$
*)en a)rxh=| e)poi/hsen o( *qeo\s to\n ou)rano\n kai\ th\n gh=n.
&Hebrew, Letters Only (Standard Beta Code):$
&300brAsyt brA Alhym2 At hsm1ym2 vAt hArT2$
&Hebrew, Full Orthography (Unicode Extension to Beta Code):$
&300b{\u05B0\u05BC}r{\u05B5}As{\u05B4\u05C1\u0596}yt b{\u05B8\u05BC}r{\u05B8\u0583}A A{\u05B1}l{\u05B9}h{\u05B4\u0591}ym2$
&300A{\u05B5\u05A5}t h{\u05B7}s{\u05B8\u05BC\u05C1}m1{\u05B7\u0596}y{\u05B4}m2 v{\u05B0}A{\u05B5\u05A5}t h{\u05B8}A{\u05B8\u05BD}r{\u05B6}T2{\u05C3}$
&Bohairic Coptic:$
&100*kEN OUARXH A\ F\NOUt QAMIO\ N\TFE NEM PHAOI$
unibetacode-1.2/examples/genesis.utf8 0000644 0001750 0001750 00000001057 13323410033 016400 0 ustar paul paul Genesis 1:1
Koine Greek (Septuagint):
Ἐν ἀρχῇ ἐποίησεν ὁ Θεὸς τὸν οὐρανὸν καὶ τὴν γῆν.
Hebrew, Letters Only (Standard Beta Code):
בראשית ברא אלהים את השמים ואת הארץ
Hebrew, Full Orthography (Unicode Extension to Beta Code):
בְּרֵאשִׁ֖ית בָּרָփא אֱלֹהִ֑ים
אֵ֥ת הַשָּׁמַ֖יִם וְאֵ֥ת הָאָֽרֶץ׃
Bohairic Coptic:
Ϧⲉⲛ ⲟⲩⲁⲣⲭⲏ ⲁ̀ ⲫ̀ⲛⲟⲩϯ ⲑⲁⲙⲓⲟ̀ ⲛ̀ⲧⲫⲉ ⲛⲉⲙ ⲡⲏⲁⲟⲓ
unibetacode-1.2/examples/byzantine.beta 0000644 0001750 0001750 00000001215 13323405742 017002 0 ustar paul paul &Byzantine Music Symbols (Unicode Block U+1D000..U+1D0FF)$
{\u1D046} &(U+1D046)$ *)/ison
{\u1D047} &(U+1D047)$ *)oli/gon
{\u1D04E} &(U+1D04E)$ *kenth/mata
{\u1D049} &(U+1D049)$ *petasth/
{\u1D051} &(U+1D051)$ *)apo/strofos
{\u1D053} &(U+1D053)$ *(uporroh/
{\u1D055} &(U+1D055)$ *)elafro/n
{\u1D056} &(U+1D056)$ *xamhlh/
{\u1D024} &(U+1D024)$ *kla/sma
{\u1D085} &(U+1D085)$ *(aplh/
{\u1D086} &(U+1D086)$ *diplh/
{\u1D087} &(U+1D087)$ *triplh/
{\u1D08F} &(U+1D08F)$ *gorgo\n
{\u1D092} &(U+1D092)$ *di/gorgon
{\u1D096} &(U+1D096)$ *tri/gorgon
{\u1D097} &(U+1D097)$ *)argo\n
unibetacode-1.2/examples/byzantine.utf8 0000644 0001750 0001750 00000001146 13323255152 016756 0 ustar paul paul Byzantine Music Symbols (Unicode Block U+1D000..U+1D0FF)
𝁆 (U+1D046) Ἴσον
𝁇 (U+1D047) Ὀλίγον
𝁎 (U+1D04E) Κεντήματα
𝁉 (U+1D049) Πεταστή
𝁑 (U+1D051) Ἀπόστροφος
𝁓 (U+1D053) Ὑπορροή
𝁕 (U+1D055) Ἐλαφρόν
𝁖 (U+1D056) Χαμηλή
𝀤 (U+1D024) Κλάσμα
𝂅 (U+1D085) Ἁπλή
𝂆 (U+1D086) Διπλή
𝂇 (U+1D087) Τριπλή
𝂏 (U+1D08F) Γοργὸν
𝂒 (U+1D092) Δίγοργον
𝂖 (U+1D096) Τρίγοργον
𝂗 (U+1D097) Ἀργὸν
unibetacode-1.2/README 0000644 0001750 0001750 00000006075 13331366245 013220 0 ustar paul paul This is the README file for the unibetacode package.
Information about the latest version is in the NEWS file.
This package contains utilities for conversion of polytonic Greek
between Beta Code and Unicode UTF-8 formats.
Beta code is a plain ASCII encoding scheme developed in the
the 1970s for representing classical Greek. It is the standard
encoding scheme employed by many Greek classical manuscript
repositories, including the Thesaurus Linguae Graecae Project
at the University of California, Irvine, and the Perseus
Digital Library Project at Tufts University.
Two programs written in flex(1) provide this conversion.
The sources are in the src directory:
- unibetaprep converts custom TLG numeric codes
- beta2uni converts Beta Code documents to UTF-8
- uni2beta converts UTF-8 documents to Beta Code
If you downloaded this source package, instructions for
building and installation can be found in the INSTALL file
and license information is in the COPYING file.
If you are a downstream maintainer porting this package
to a new architecture, you can remove all files that
Autotools added with the command
autoreconf -f -i && ./configure && make orig
In all other cases, typing the following command will
usually build the software on your system:
./configure
make
Then test that the programs are operating correctly by running
make check
This testing uses files in the "examples" directory to check for
proper operation of the unibetaprep, beta2uni, and uni2beta programs
on the target system. Files in "examples" directory ending in ".beta"
are in Beta Code format; those ending in ".utf8" are in Unicode UTF-8
format. Those files can serve as useful samples. Further information
on these programs and the Beta Code format that they implement is
contained in the following man pages, located in the "man" directory,
which are installed during package installation:
unibetaprep(1)
beta2uni(1)
uni2beta(1)
unibetacode(5)
Consult the INSTALL file for detailed installation instructions.
To install the programs and man pages on your system, edit the top-level
Makefile to define the destination directories. Then type
make install
By default, binaries will be installed in /usr/local/bin and man pages
will be installed in /usr/local/share/man.
LICENSE
--------
The license is contained in the COPYING file. A summary of the license
appears below.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
unibetacode-1.2/Makefile.am 0000644 0001750 0001750 00000000753 13331364620 014364 0 ustar paul paul ## Process this file with automake to produce Makefile.in
SUBDIRS = man src test
EXTRA_DIST = examples
#
# Add "orig" target to remove all Autotools-added files left over from
#
# autoreconf && ./configure && make && make distclean
#
orig: distclean
\rm -rf aclocal.m4 autom4te.cache build-aux configure *~ */*~ \
INSTALL Makefile.in man/Makefile.in test/Makefile.in \
src/Makefile.in test/Makefile.in src/config.h.in \
src/beta2uni.c src/uni2beta.c src/unibetaprep.c
unibetacode-1.2/man/ 0000755 0001750 0001750 00000000000 13423202120 013062 5 ustar paul paul unibetacode-1.2/man/Makefile.am 0000644 0001750 0001750 00000000222 13323250242 015121 0 ustar paul paul ## Process this file with automake to produce Makefile.in
man_MANS = beta2uni.1 uni2beta.1 unibetaprep.1 unibetacode.5
EXTRA_DIST = $(man_MANS)
unibetacode-1.2/man/uni2beta.1 0000644 0001750 0001750 00000005062 13320304265 014671 0 ustar paul paul .TH UNI2BETA 1 "2018 Jun 23"
.SH NAME
uni2beta \- Convert a polytonic Greek document from UTF-8 Unicode to Beta Code
.SH SYNOPSIS
.br
.B uni2beta
[{\-l|\-u}] [\-i \fIinput_file.beta\fP] [\-o \fIoutput_file.utf8\fP]
.SH DESCRIPTION
\fBuni2beta\fP(1)
reads a document encoded using Unicode and converts it to
Beta Code. Beta Code is an ASCII-only encoding scheme most
commonly used for digital representation of polytonic Greek.
.PP
Beta Code has become a widely-adopted standard for encoding
classical Greek. It was developed by David Packard in the 1970s
and adopted by the Thesaurus Linguae Graecae (TLG) Project at
the University of California, Irvine shortly thereafter.
This encoding was later adopted by the Perseus Project in the
1980s (originally at Harvard University, now at Tufts University)
and by many other collections of classical and Koine Greek.
Today, the TLG corpus alone contains over 100 million words
from classical to Byzantine Greek.
.PP
The TLG uses uppercase Latin letters for encoding;
the Perseus Project uses lowercase.
\fBuni2beta\fP(1)
defaults to lowercase output. This can be overridden with
the `-u' (generate uppercase) option.
.PP
Many classicists who use Beta Code have been actively involved
in The Unicode Standard, with evolving recommendations for mapping
between Beta Code and Unicode.
\fBuni2beta\fP(1)
provides a capability for GNU/Linux users who wish to convert
Unicode texts to Beta Code.
.PP
Any encountered UTF-8 Unicode Byte Order Mark (BOM), U+FFFE,
is ignored.
.PP
Note: Thesaurus Linguae Graecae and TLG are registered trademarks
of the University of California.
.SH OPTIONS
.TP 12
\-l
Create Beta Code output file using lowercase Latin letters.
This is the convention that the Perseus Project uses.
This is the default.
.TP
\-u
Create Beta Code output file using uppercase Latin letters.
This is the convention that the TLG Project uses.
.TP
\-i
Specify the input file. The default is STDIN.
.TP
\-o
Specify the output file. The default is STDOUT.
.PP
Sample usage:
.PP
.RS
uni2beta \-i \fImy_input_file.utf8\fP \-o \fImy_output_file.beta\fP
.RE
.SH FILES
Polytonic Greek files in UTF-8 Unicode.
.SH SEE ALSO
\fBunibetaprep\fP(1),
\fBbeta2uni\fP(1),
\fBunibetacode\fP(5)
.SH AUTHOR
.B uni2beta
was written by Paul Hardy.
.SH LICENSE
.B uni2beta
is Copyright \(co 2018 Paul Hardy.
.PP
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
.SH BUGS
No known bugs exist.
unibetacode-1.2/man/unibetacode.5 0000644 0001750 0001750 00000041564 13423202051 015447 0 ustar paul paul .TH UNIBETACODE 5 "2019 Jan 26"
.SH NAME
unibetacode \- Format for polytonic Greek Beta Code files
.SH SYNOPSIS
.br
.I source_file.beta
.SH DESCRIPTION
.B Unibetacode
is an implementation of Beta Code, as adopted by the
University of California, Irvine Thesaurus Linguae Graecae (TLG)
Program and the Tufts University Perseus Project, among others.
Beta Code provides a way of encoding polytonic Greek characters
using plain ASCII characters. The
.B unibetacode
package contains three utility programs:
\fBunibetaprep\fP(1)
converts TLG-unique numeric codes to Unicode code points,
\fBbeta2uni\fP(1)
converts a Beta Code file to UTF-8 Unicode, and
\fBuni2beta\fP(1)
converts a UTF-8 Unicode file to Beta Code.
These programs can also process Coptic and some Hebrew,
but historically the focus of Beta Code documents has been
classical Greek.
.PP
A Unicode \fIcode point\fP is an assignment to a specific
numeric value for glyphs and other entities in Unicode fonts.
Throughout this document, Unicode code points are given by
their Unicode numeric values in the form U+xxxx, where "xxxx"
is a string of four hexadecimal digits representing a glyph
in the Unicode Basic Multilingual Plane. This is how they
are usually specified in The Unicode Standard and elsewhere.
.PP
Note: Thesaurus Linguae Graecae and TLG are registered trademarks
of the University of California.
.SH "GENERAL PUNCTUATION"
.SS "PUNCTUATION COMMON TO ALL MODES"
Regardless of the language mode (Greek, Latin, Coptic, or
Hebrew), several punctuation marks are retained as is
between the input file and the output file. They are
as follows:
.RS
.TP 10
.
Full Stop (Period)
.TP
,
Comma
.TP
?
Question Mark (except in Greek mode, where it becomes
a Combining Dot Below)
.TP
!
Exclamation Mark
.TP
;
Semicolon / Greek Question Mark (see the Greek section below)
.TP
[ ]
Square Brackets
.RE
.SS "QUOTATION MARK STYLES"
The TLG Beta Code specification supports nine different
styles of quotation mark. While support of different
styles is beneficial, this complicates round-trip
conversion from Beta Code to Unicode and back.
This is further complicated by the same Unicode
character being used as an opening quotation mark in
one style and as a closing quotation mark in another
style.
.PP
\fBDouble quotes\fP in the
.B unibetacode
package just use ASCII quotation marks in a Beta Code
source file; the quotation style is determined by the
language mode. This greatly simplifies round-trip
conversion between Beta Code and a Unicode UTF-8 document.
Double quotation marks must be balanced.
The first quotation mark encountered will be interpreted
as a left quotation mark for the chosen style, the second
will be interpreted as a right quotation mark, and so on.
Double quotation marks are converted as follows:
.RS
.TP 10
Greek, Coptic
The opening double quotation mark is rendered as
U+00AB, LEFT-POINTING DOUBLE ANGLE QUOTATION MARK.
The closing double quotation mark is rendered as
U+00BB, RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK.
.TP
Hebrew
The opening double quotation mark is rendered as
U+201E, DOUBLE LOW-9 QUOTATION MARK.
The closing double quotation mark is rendered as
U+201D, RIGHT DOUBLE QUOTATION MARK.
.TP
Latin
The opening double quotation mark is rendered as
U+201C, LEFT DOUBLE QUOTATION MARK.
The closing double quotation mark is rendered as
U+201D, RIGHT DOUBLE QUOTATION MARK.
.RE
.PP
\fBSingle quotes\fP are specified explicitly.
For Latin and Hebrew, they are specified with
a Grave Accent (U+0060) for an opening single quote and
an apostrophe (U+0027) for a closing single quote.
For Greek and Coptic, they are specified with
a "<" for an opening single quote and
a ">" for a closing single quote.
The use of "<" and ">" for Greek and Coptic was a
compromise so that an ASCII apostrophe in Greek mode
would render as U+02BC, MODIFIER LETTER APOSTROPHE.
As with double quotation marks, the rendering
of these characters is dependent on the language mode.
Single quotation marks are converted as follows:
.RS
.TP 10
Greek, Coptic
The opening single quotation mark is rendered as
U+2039, SINGLE LEFT-POINTING ANGLE QUOTATION MARK.
The closing single quotation mark is rendered as
U+203A, SINGLE RIGHT-POINTING ANGLE QUOTATION MARK.
.TP
Hebrew
The opening single quotation mark is rendered as
U+201A, SINGLE LOW-9 QUOTATION MARK.
The closing single quotation mark is rendered as
U+2018, LEFT SINGLE QUOTATION MARK.
.TP
Latin
The opening single quotation mark is rendered as
U+2018, LEFT SINGLE QUOTATION MARK.
The closing single quotation mark is rendered as
U+2019, RIGHT SINGLE QUOTATION MARK.
.RE
.SH "EXTENSIONS FOR ASCII AND UNICODE"
The \fBunibetacode\fP package includes two extensions to
TLG Beta Code: one for efficiently inserting an ASCII string
into text when not in Latin mode, and the other for inserting
a Unicode code point in any language mode. These are described
in the following two sub-sections.
.SS "ASCII STRING INSERTION"
An ASCII string can be enclosed in curly brackets when in
a non-Latin language mode. The string will be output
verbatim. This can be useful if a Greek text uses
ASCII symbols, in order to produce a Greek document with
an ASCII colon (':') rather than a Unicode
"GREEK ANO TELEIA" character, U+0387. The format
is as follows:
.RS
.TP 10
{\fIASCII-string\fP}
.RE
.PP
.I This is an extension to standard Beta Code;
.I the TLG specification assigns a different use to '{'.
By itself, the use of '{' not followed by a decimal
number is deprecated in the TLG specification, so
this should avoid some conflict.
Curly brackets are not allowed in the string.
.SS "SPECIAL UNICODE CHARACTER INSERTION"
The original Beta Code specification lists many numeric
codes for producing special symbols that today have become
part of The Unicode Standard. In the future, it will
likely be most beneficial if any specialized numeric
codes for characters use Unicode code points rather than
the historical TLG Beta Code numeric assignments.
.PP
The
.B unibetacode
package allows any Unicode code point to be specified in
hexadecimal (which is how The Unicode Standard provides
them) as a string inside an ASCII '{'\|.\|.\|.\|'}' escape sequence.
The Unicode hexadecimal code point of one to six digits
is preceded by "\\u", taking the form "\\u\fIx...\^x\fP".
For example, strings such as
.RS
.TP 10
{\\u3d8} or {\\u3D8} or {\\u03D8}
.RE
.PP
can be used to insert the Unicode character
U+03D8, GREEK LETTER ARCHAIC KOPPA, which does not
have an associated Beta Code letter assignment.
Such Unicode code point strings can be mixed with
other characters in the same string, as long as any
character that follows the Unicode code point is not
a hexadecimal digit of '0'\-'9', 'A'\-'F', or 'a'\-'f'.
.SS "NUMERIC DIGITS"
The numeric digits '0' through '9' are simply entered as '0'
through '9', respectively, in any language mode. The language
modes are Coptic, Greek, Hebrew, and Latin. They are described
in the following sections.
.SH GREEK
.SS LETTERS
Capital and small letters can take the same set of
accent marks, but the order in which these are specified
differs between capital and small.
.PP
Small letters are given in Beta Code in this order:
(1) letter, (2) breathing marks, (3) accents, and (4) iota
subscript. This follows the traditional typed appearance
of small polytonic Greek letters, where breathing marks
and then accent marks appear on top of the small letter,
and iota subscripts appear below small long vowels.
.PP
Capital letters are given in Beta Code in this order:
(1) asterisk (which denotes a Capital letter),
(2) breathing marks, (3) accents, (4) letter, and
(5) iota subscript. This follows the traditional
typed appearance of capital polytonic Greek letters,
where breathing marks and then accent marks appear
to the left of the capital letter, and iota subscripts
appear to the right of capital long vowels.
.PP
The letter mapping is as follows, in Greek alphabetical
order. Letters can be capital or small; generally
speaking, small is easier to read, so it is the
default output from \fBuni2beta\fP(1):
.RS
.TP 12
*a or a
Capital or Small Alpha, respectively
.TP
*b or b
Capital or Small Beta, resp.
.TP
*g or g
Capital or Small Gamma, resp.
.TP
*d or d
Capital or Small Delta, resp.
.TP
*e or e
Capital or Small Epsilon, resp.
.TP
*z or z
Capital or Small Zeta, resp.
.TP
*h or h
Capital or Small Eta, resp.
.TP
*q or q
Capital or Small Theta, resp.
.TP
*i or i
Capital or Small Iota, resp.
.TP
*k or k
Capital or Small Kappa, resp.
.TP
*l or l
Capital or Small Lambda, resp.
.TP
*m or m
Capital or Small Mu, resp.
.TP
*n or n
Capital or Small Nu, resp.
.TP
*c or c
Capital or Small Xi, resp.
.TP
*o or o
Capital or Small Omicron, resp.
.TP
*p or p
Capital or Small Pi, resp.
.TP
*r or r
Capital or Small Rho, resp.
.TP
*s or s
Capital or Small Sigma, resp.
Note: a small "s" is interpreted as middle (medial) sigma
or final sigma depending upon the context. To force
one or the other, see the following two entries.
.TP
s1
Small Middle (Medial) Sigma
.TP
s2 or j
Small Final Sigma
.TP
*s3 or s3
Capital or Small Lunate Sigma, resp.
.TP
*t or t
Capital or Small Tau, resp.
.TP
*u or u
Capital or Small Upsilon, resp.
.TP
*f or f
Capital or Small Phi, resp.
.TP
*x or x
Capital or Small Chi, resp.
.TP
*y or y
Capital or Small Psi, resp.
.TP
*w or w
Capital or Small Omega, resp.
.TP
*v or v
Capital or Small Digamma, resp.
.RE
.PP
Example: "*to fws", "the light"
(without accent marks).
This could also be written as "*TO FWS"; both capital
and small letters give the same conversion into UTF-8.
.SS "BREATHING MARKS AND ACCENTS"
These are the encodings of breathing marks and accents.
In Beta Code (as in written Greek), breathing marks appear
before accents.
.RS
.TP 10
)
Smooth Breathing
.TP
(
Rough Breathing
.TP
\\
Grave accent
.TP
/
Acute accent
.TP
=
Circumflex
.TP
+
Diaresis
.TP
&
Macron
.TP
\'
Breve
.TP
?
Combining Dot Below
.RE
.PP
Example: "*to\\ fw=s", "the light",
with a grave accent, or \fIvaria,\fP over the omicron and
a circumflex accent, or \fIperispomeni,\fP over the omega.
This could also be written as "*TO\\ FW=S".
\fBN.B.:\fP Note that the case of the Latin letter
does not matter for accent placement; it is only the
case of the Greek letter that matters. Greek capital
letters are encoded with a preceding asterisk, so in
this example, "O\\" and "W=" will appear as small
UTF-8.
.SS "IOTA SUBSCRIPT"
The iota subscript is the last character written after
a long vowel with which it appears, whether the letter
is capital or small. It is denoted by a vertical
bar:
.RS
.TP 10
|
Iota subscript
.RE
.SS "GREEK PUNCTUATION"
These are the punctuation symbols that the
.B unibetacode
package supports:
.RS
.TP 20
.
Period (\fITeleia\fP)
.TP
,
Comma
.TP
:
Middle Dot (\fIAno Teleia\fP)
.TP
;
Question Mark (\fIEpotematiko\fP)
.TP
\'
Apostrophe (\fIApostrophos\fP)
.TP
\- (hyphen)
Hyphen (\fIPavla\fP)
.TP
_ (underscore)
Em Dash
.TP
#
Greek Number Sign
.RE
.SS "UNICODE GREEK"
The Greek Extended range of The Unicode Standard,
U+1F00 \- U+1FFF, contains 16 small and
capital vowels that have identical representation
in the Greek and Coptic range, U+0370 \- U+03FF.
These are vowels with an "oxia" (acute) accent in the
Greek Extended range; they have equivalent glyphs with
a "tonos" (acute) accent in the Greek and Coptic range.
Because of this duplication, the use of these 16 Greek
Extended glyphs is deprecated.
\fBuni2beta\fP(1)
will convert those 16 characters to Beta Code, but
\fBbeta2uni\fP(1)
will convert the resulting Beta Code into characters
in the Greek and Coptic range (U+0370 \- U+03FF);
it will \fInot\fP convert them back into Greek
Extended glyphs.
.PP
Also in the Greek Extended Unicode range, the TLG Project
considers U+1FBF to be the equivalent of a smooth breathing
mark, and
\fBuni2beta\fP(1)
will convert it as such.
.SH "LATIN (ASCII)"
To display ASCII characters, including the Latin letters 'A'
through 'Z' and 'a' through 'z', begin with an ampersand
('&') character. Switch back to Greek mode with a dollar
sign ('$') character.
.PP
ASCII characters can also be surrounded with curly brackets;
for example, "{Here is some ASCII!}". This is non-standard
though; the TLG specification uses '&' and '$' to enter
Latin and then switch back to Greek.
.PP
For efficiency, \fBbeta2uni\fP(1) is conditioned to interpret
sequences that look like accented Greek as accnted Greek.
Curly brackets can also be useful for overriding such
interpretations. For example, if a document contained the text
.PP
.RS
.\|.\|.\|(this is an example)
.RE
.PP
The "e)" could be interpreted as a small epsilon with
a smooth breathing mark above it. To break this behavior, type
.PP
.RS
.\|.\|.\|(this is an example{}) \fIor\fP .\|.\|.\|(this is an example{)}
.RE
.PP
and the Unicode output from \fBbeta2uni\fP(1) will appear as intended.
This technique will appear familiar to TeX users.
.SH COPTIC
To display Coptic letters, begin with the character
sequence "&100". Switch back to Greek mode with a dollar
sign ('$') character. As with Greek Beta Code, capital
Coptic letters in Beta Code begin with an asterisk ('*')
and small Coptic letters do not.
.PP
.I Note that unlike in Greek mode, the Coptic Beta Code letters
.I are case-sensitive.
In general, Coptic letters derived from Demotic use
lowercase Beta Codes and map to the Greek and Coptic
Unicode script in the range U+03E2 \- U+03EF; the
rest of the Coptic letters use uppercase Beta Codes
and map to the separate Coptic Unicode script in the
range U+2C80 \- U+2C8D.
.PP
The encoding is as follows:
.RS
.TP 12
*A or A
Capital or Small Alfa, respectively
.TP
*B or B
Capital or Small Vida, resp.
.TP
*G or G
Capital or Small Gamma, resp.
.TP
*D or D
Capital or Small Dalda, resp.
.TP
*E or E
Capital or Small Eie, resp.
.TP
*V or V
Capital or Small Sou, resp.
.TP
*Z or Z
Capital or Small Zata, resp.
.TP
*H or H
Capital or Small Hate, resp.
.TP
*Q or Q
Capital or Small Tethe, resp.
.TP
*I or I
Capital or Small Iauda, resp.
.TP
*K or K
Capital or Small Kapa, resp.
.TP
*L or L
Capital or Small Laula, resp.
.TP
*M or M
Capital or Small Mi, resp.
.TP
*N or N
Capital or Small Ni, resp.
.TP
*C or C
Capital or Small Ksi, resp.
.TP
*O or O
Capital or Small O, resp.
.TP
*P or P
Capital or Small Pi, resp.
.TP
*R or R
Capital or Small Ro, resp.
.TP
*S or S
Capital or Small Sima, resp.
.TP
*T or T
Capital or Small Tau, resp.
.TP
*U or U
Capital or Small Ua, resp.
.TP
*F or F
Capital or Small Fi, resp.
.TP
*X or X
Capital or Small Khi, resp.
.TP
*Y or Y
Capital or Small Psi, resp.
.TP
*W or W
Capital or Small Oou, resp.
.TP
*s or s
Capital or Small Shei, resp.
.TP
*f or f
Capital or Small Fei, resp.
.TP
*k or k
Capital or Small Khei, resp.
.TP
*h or h
Capital or Small Hori, resp.
.TP
*j or j
Capital or Small Gangia, resp.
.TP
*g or g
Capital or Small Shima, resp.
.TP
*t or t
Capital or Small Dei, resp.
.TP
\\
Jinma (Grave) Accent
.RE
.PP
Switch back to Greek mode by ending with
a dollar sign ('$') character.
.SH HEBREW
The TLG specification only covers the basic Hebrew
letters aleph through tav. These letters map to
the Hebrew Unicode script in the range
U+05D0 \- U+05EA. Beta Codes are not defined in
the specification for cantillation marks, Yiddish
digraphs, etc.
.PP
To display Hebrew letters, begin with the character
sequence "&300".
.PP
.I Note that unlike in Greek mode, the Hebrew Beta Codes are
.I case-sensitive and they \fPnever \fIbegin with an
.I asterisk ('*').
.PP
The encoding is as follows:
.RS
.TP 5
A
Alef
.TP
b
Bet
.TP
g
Gimel
.TP
d
Dalet
.TP
h
He
.TP
v
Vav
.TP
z
Zayin
.TP
H
Het
.TP
Q
Tet
.TP
y
Yod
.TP
k1
Middle Kaf
.TP
k2
Final Kaf
.TP
l
Lamed
.TP
m1
Middle Mem
.TP
m2
Final Mem
.TP
n1
Middle Nun
.TP
n2
Final Nun
.TP
S
Samekh
.TP
a
Ayin
.TP
p1
Middle Pe
.TP
p2
Final Pe
.TP
T1
Middle Tsadi
.TP
T2
Final Tsadi
.TP
q
Qof
.TP
r
Resh
.TP
s
Shin
.TP
t
Tav
.RE
.PP
Switch back to Greek mode with a dollar
sign ('$') character.
.SH SAMPLES
The directory test/reference contains samples with
mappings from Beta Code to UTF-8 and vice versa.
The "genesis-1-1.beta" and "genesis-1-1.utf8" files
show the verse Genesis 1:1 in Koine Greek (from the
Septuagint), Hebrew, and Bohairic Coptic in Beta Code
and UTF-8, respectively.
.SH SEE ALSO
\fBunibetaprep\fP(1),
\fBbeta2uni\fP(1),
\fBuni2beta\fP(1)
.SH AUTHOR
The
.B unibetacode
package was created by Paul Hardy.
.SH LICENSE
.B unibetacode
is Copyright \(co 2018, 2019 Paul Hardy.
.PP
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
.SH BUGS
The format is very straightforward and no known bugs exist. However,
Beta Code has been evolving for almost 50 years, especially since
the advent of Unicode. As a result, many Beta Code-encoded documents
exist in versions of the standard much older than the current version.
This version also does not implement many numbered codes that are
contained in the TLG Beta Code specification. There are no plans
to support the TLG Beta Code formatting codes, as that is beyond
the scope of Unicode.
unibetacode-1.2/man/beta2uni.1 0000644 0001750 0001750 00000004423 13320304244 014666 0 ustar paul paul .TH BETA2UNI 1 "2018 Jun 23"
.SH NAME
beta2uni \- Convert a polytonic Greek document from Beta Code to UTF-8
.SH SYNOPSIS
.br
.B beta2uni
[\-b] [\-i \fIinput_file.utf8\fP] [\-o \fIoutput_file.beta\fP]
.SH DESCRIPTION
\fBbeta2uni\fP(1)
reads a document encoded using Beta Code and converts it to
UTF-8 Unicode. Beta Code is an ASCII-only encoding scheme most
commonly used for digital representation of polytonic Greek.
.PP
Beta Code has become a widely-adopted standard for encoding
classical Greek. It was developed by David Packard in the 1970s
and adopted by the Thesaurus Linguae Graecae (TLG) Project at
the University of California, Irvine shortly thereafter.
This encoding was later adopted by the Perseus Project in the
1980s (originally at Harvard University, now at Tufts University)
and by many other collections of classical and Koine Greek.
Today, the TLG corpus alone contains over 100 million words
from classical to Byzantine Greek.
.PP
The TLG uses uppercase Latin letters; the Perseus Project uses
lowercase.
\fBbeta2uni\fP(1)
will accept either.
.PP
Many classicists who use Beta Code have been actively involved
in The Unicode Standard, with evolving recommendations for mapping
between Beta Code and Unicode.
\fBbeta2uni\fP(1)
provides a capability for GNU/Linux users who wish to convert
Beta Code texts to Unicode.
.PP
Note: Thesaurus Linguae Graecae and TLG are registered trademarks
of the University of California.
.SH OPTIONS
.TP 12
\-b
Begin the UTF-8 output file with the UTF-8 encoding of
the Unicode Byte Order Mark, U+FFFE. This is
.I not
the default.
.TP
\-i
Specify the input file. The default is STDIN.
.TP
\-o
Specify the output file. The default is STDOUT.
.PP
Sample usage:
.PP
.RS
beta2uni \-i \fImy_input_file.beta\fP \-o \fImy_output_file.utf8\fP
.RE
.SH FILES
ASCII text files using Beta Code to encode polytonic Greek.
.SH SEE ALSO
\fBunibetaprep\fP(1),
\fBuni2beta\fP(1),
\fBunibetacode\fP(5)
.SH AUTHOR
.B beta2uni
was written by Paul Hardy.
.SH LICENSE
.B beta2uni
is Copyright \(co 2018 Paul Hardy.
.PP
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
.SH BUGS
No known bugs exist.
unibetacode-1.2/man/unibetaprep.1 0000644 0001750 0001750 00000007271 13423175551 015512 0 ustar paul paul .TH UNIBETAPREP 1 "2019 Jan 26"
.SH NAME
unibetaprep \- Pre-process Beta Code files for \fBbeta2uni\fP(1)
.SH SYNOPSIS
.br
.B unibetaprep
[\-i \fIinput_file.pre\fP] [\-o \fIoutput_file.beta\fP]
.SH DESCRIPTION
\fBunibetaprep\fP(1)
reads a document encoded using Beta Code that may contain
special character codes from the full Beta Code of the
Thesaurus Linguae Graecae (TLG) specification, and converts it
to a Beta Code file that has those special characters converted
to Unicode escape sequences. This departs from the traditional
encoding of those special characters in favor of Unicode code
point assignments.
.PP
Beta Code is an ASCII-only encoding scheme most commonly used
for digital representation of polytonic Greek.
.PP
Beta Code has become a widely-adopted standard for encoding
classical Greek. It was developed by David Packard in the 1970s
and adopted by the Thesaurus Linguae Graecae (TLG) Project at
the University of California, Irvine shortly thereafter.
This encoding was later adopted by the Perseus Project in the
1980s (originally at Harvard University, now at Tufts University)
and by many other collections of classical and Koine Greek.
Today, the TLG corpus alone contains over 100 million words
from classical to Byzantine Greek.
.PP
The TLG uses uppercase Latin letters; the Perseus Project uses
lowercase.
\fBunibetaprep\fP(1)
will accept either.
.PP
Many classicists who use Beta Code have been actively involved
in The Unicode Standard, with evolving recommendations for mapping
between Beta Code and Unicode.
\fBunibetaprep\fP(1)
provides a capability for GNU/Linux users who wish to convert
Beta Code texts to Unicode.
.PP
The most notable range of special characters in the TLG
specification is the complete range of Byzantine Musical
Symbols, in the Unicode range U+1D000 through U+1D0FF,
inclusive. This range corresponds to the TLG special
character encodings "#2000" through "#2245", respectively.
If a character sequence in the TLG Beta Code specification
corresponds to a Unicode glyph or glyph combination,
\fBunibetaprep\fP should handle the translation correctly.
.PP
Most of these Beta Code sequences consist of a "#", "%",
"<", ">", "[", or "]" character followed by one or more
decimal digits. Sequences corresponding to idiosyncratic
Beta Code glyphs are not translated to Unicode. The Beta Code
quotation mark sequences "1, "2, "4, and "5 are converted to
represent Unicode code points U+201E, U+201C, U+201A, and U+201B,
respectively. For other special code sequences, consult the
.I TLG Beta Code Quick Reference Guide,
or examine the flex program source in file unibetaprep.l.
.PP
The output of \fBunibetaprep\fP is designed to provide the
input to \fBbeta2uni\fP(1), which then produces UTF-8 Unicode
output.
.PP
Note: Thesaurus Linguae Graecae and TLG are registered trademarks
of the University of California.
.SH OPTIONS
.TP 12
\-i
Specify the input file. The default is STDIN.
.TP
\-o
Specify the output file. The default is STDOUT.
.PP
Sample usage:
.PP
.RS
unibetaprep \-i \fImy_input_file.pre\fP \-o \fImy_output_file.beta\fP
.RE
.PP
The output file, \fImy_output_file.beta,\fP can then be used
as input for \fBbeta2uni\fP(1) for conversion into a UTF-8
Unicode document.
.SH FILES
ASCII text files using Beta Code to encode polytonic Greek.
.SH SEE ALSO
\fBbeta2uni\fP(1),
\fBuni2beta\fP(1),
\fBunibetacode\fP(5)
.SH AUTHOR
.B unibetaprep
was written by Paul Hardy.
.SH LICENSE
.B unibetaprep
is Copyright \(co 2018 Paul Hardy.
.PP
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
.SH BUGS
No known bugs exist.
unibetacode-1.2/configure.ac 0000644 0001750 0001750 00000000615 13422770630 014616 0 ustar paul paul AC_INIT([unibetacode], [1.2], [unifoundry@unifoundry.com],
[unibetacode], [http://www.unifoundry.com/unibetacode/])
AC_PREREQ([2.68])
AC_CONFIG_SRCDIR([src/beta2uni.l])
AC_CONFIG_AUX_DIR([build-aux])
AM_INIT_AUTOMAKE([1.11 subdir-objects -Wall -Werror])
AC_CONFIG_HEADERS([src/config.h])
AC_CONFIG_FILES([Makefile man/Makefile src/Makefile test/Makefile])
AC_PROG_LEX
AC_PROG_CC
AC_OUTPUT
unibetacode-1.2/test/ 0000755 0001750 0001750 00000000000 13423202120 013266 5 ustar paul paul unibetacode-1.2/test/test-2utf8-1 0000755 0001750 0001750 00000002340 13323301731 015305 0 ustar paul paul #!/bin/sh
set -e
# The input file to convert
INFILE=../examples/byzantine.beta
# The output file of the conversion
OUTFILE=test-2utf8-1.utf8
# The reference file to compare the output against
CMPFILE=../examples/byzantine.utf8
#
# Create temporary directory for test
# output if AUTOPKGTEST_TMP is undefined.
# Debian GNU/Linux defines AUTOPKGTEST_TMP.
#
if [ "x${AUTOPKGTEST_TMP}" = "x" ] ; then
TEST_TMP=$(mktemp -d)
trap "\rm -rf ${AUTOPKGTEST_TMP}" 0 INT QUIT ABRT PIPE TERM
else
TEST_TMP=${AUTOPKGTEST_TMP}
fi
#
# Point to the source directory for test.
#
if [ "x${srcdir}" = "x" ] ; then
srcdir=.
fi
#
# Point to binary executable; unibetacode_bindir
# should be defined for "make installcheck".
# Otherwise, leave undefined for "make check".
#
if [ "x${unibetacode_bindir}" = "x" ] ; then
unibetacode_bindir=../src
fi
${unibetacode_bindir}/beta2uni \
< ${srcdir}/${INFILE} \
> ${TEST_TMP}/${OUTFILE}
diff ${srcdir}/${CMPFILE} ${TEST_TMP}/${OUTFILE} || \
(echo "test-2utf8-1 FAILED; output in ${TEST_TMP}/${OUTFILE}" ; exit 1)
#
# If AUTOPKGTEST_TMP was defined, don't remove it;
# a Debian calling process will take care of that.
#
if [ "x${AUTOPKGTEST_TMP}" = "x" ] ; then
\rm -rf ${TEST_TMP}
fi
unibetacode-1.2/test/Makefile.am 0000644 0001750 0001750 00000000603 13323413174 015335 0 ustar paul paul ## Process this file with automake to produce Makefile.in
check_SCRIPTS=test-prep-1 test-2utf8-1 test-2utf8-2 \
test-2beta-1 test-2beta-2
TESTS=$(check_SCRIPTS)
EXTRA_DIST=$(check_SCRIPTS) test-all
AM_TESTS_ENVIRONMENT = unibetacode_path='$(abs_top_builddir)/src' ; \
export unibetacode_path ;
installcheck-local:
make unibetacode_bindir=${DESTDIR}${bindir} check
unibetacode-1.2/test/test-prep-1 0000755 0001750 0001750 00000002344 13323302320 015302 0 ustar paul paul #!/bin/sh
set -e
# The input file to convert
INFILE=../examples/byzantine.prep
# The output file of the conversion
OUTFILE=test-prep-1.beta
# The reference file to compare the output against
CMPFILE=../examples/byzantine.beta
#
# Create temporary directory for test
# output if AUTOPKGTEST_TMP is undefined.
# Debian GNU/Linux defines AUTOPKGTEST_TMP.
#
if [ "x${AUTOPKGTEST_TMP}" = "x" ] ; then
TEST_TMP=$(mktemp -d)
trap "\rm -rf ${AUTOPKGTEST_TMP}" 0 INT QUIT ABRT PIPE TERM
else
TEST_TMP=${AUTOPKGTEST_TMP}
fi
#
# Point to the source directory for test.
#
if [ "x${srcdir}" = "x" ] ; then
srcdir=.
fi
#
# Point to binary executable; unibetacode_bindir
# should be defined for "make installcheck".
# Otherwise, leave undefined for "make check".
#
if [ "x${unibetacode_bindir}" = "x" ] ; then
unibetacode_bindir=../src
fi
${unibetacode_bindir}/unibetaprep \
< ${srcdir}/${INFILE} \
> ${TEST_TMP}/${OUTFILE}
diff ${srcdir}/${CMPFILE} ${TEST_TMP}/${OUTFILE} || \
(echo "test-prep-1 FAILED; output in ${TEST_TMP}/${OUTFILE}" ; exit 1)
#
# If AUTOPKGTEST_TMP was defined, don't remove it;
# a Debian calling process will take care of that.
#
if [ "x${AUTOPKGTEST_TMP}" = "x" ] ; then
\rm -rf ${TEST_TMP}
fi
unibetacode-1.2/test/test-2utf8-2 0000755 0001750 0001750 00000002334 13323307736 015324 0 ustar paul paul #!/bin/sh
set -e
# The input file to convert
INFILE=../examples/genesis.beta
# The output file of the conversion
OUTFILE=test-2utf8-2.utf8
# The reference file to compare the output against
CMPFILE=../examples/genesis.utf8
#
# Create temporary directory for test
# output if AUTOPKGTEST_TMP is undefined.
# Debian GNU/Linux defines AUTOPKGTEST_TMP.
#
if [ "x${AUTOPKGTEST_TMP}" = "x" ] ; then
TEST_TMP=$(mktemp -d)
trap "\rm -rf ${AUTOPKGTEST_TMP}" 0 INT QUIT ABRT PIPE TERM
else
TEST_TMP=${AUTOPKGTEST_TMP}
fi
#
# Point to the source directory for test.
#
if [ "x${srcdir}" = "x" ] ; then
srcdir=.
fi
#
# Point to binary executable; unibetacode_bindir
# should be defined for "make installcheck".
# Otherwise, leave undefined for "make check".
#
if [ "x${unibetacode_bindir}" = "x" ] ; then
unibetacode_bindir=../src
fi
${unibetacode_bindir}/beta2uni \
< ${srcdir}/${INFILE} \
> ${TEST_TMP}/${OUTFILE}
diff ${srcdir}/${CMPFILE} ${TEST_TMP}/${OUTFILE} || \
(echo "test-2utf8-2 FAILED; output in ${TEST_TMP}/${OUTFILE}" ; exit 1)
#
# If AUTOPKGTEST_TMP was defined, don't remove it;
# a Debian calling process will take care of that.
#
if [ "x${AUTOPKGTEST_TMP}" = "x" ] ; then
\rm -rf ${TEST_TMP}
fi
unibetacode-1.2/test/test-2beta-2 0000755 0001750 0001750 00000002334 13323301546 015342 0 ustar paul paul #!/bin/sh
set -e
# The input file to convert
INFILE=../examples/genesis.utf8
# The output file of the conversion
OUTFILE=test-2beta-2.beta
# The reference file to compare the output against
CMPFILE=../examples/genesis.beta
#
# Create temporary directory for test
# output if AUTOPKGTEST_TMP is undefined.
# Debian GNU/Linux defines AUTOPKGTEST_TMP.
#
if [ "x${AUTOPKGTEST_TMP}" = "x" ] ; then
TEST_TMP=$(mktemp -d)
trap "\rm -rf ${AUTOPKGTEST_TMP}" 0 INT QUIT ABRT PIPE TERM
else
TEST_TMP=${AUTOPKGTEST_TMP}
fi
#
# Point to the source directory for test.
#
if [ "x${srcdir}" = "x" ] ; then
srcdir=.
fi
#
# Point to binary executable; unibetacode_bindir
# should be defined for "make installcheck".
# Otherwise, leave undefined for "make check".
#
if [ "x${unibetacode_bindir}" = "x" ] ; then
unibetacode_bindir=../src
fi
${unibetacode_bindir}/uni2beta \
< ${srcdir}/${INFILE} \
> ${TEST_TMP}/${OUTFILE}
diff ${srcdir}/${CMPFILE} ${TEST_TMP}/${OUTFILE} || \
(echo "test-2beta-2 FAILED; output in ${TEST_TMP}/${OUTFILE}" ; exit 1)
#
# If AUTOPKGTEST_TMP was defined, don't remove it;
# a Debian calling process will take care of that.
#
if [ "x${AUTOPKGTEST_TMP}" = "x" ] ; then
\rm -rf ${TEST_TMP}
fi
unibetacode-1.2/test/test-2beta-1 0000755 0001750 0001750 00000002343 13323301412 015331 0 ustar paul paul #!/bin/sh
set -e
# The input file to convert
INFILE=../examples/byzantine.utf8
# The output file of the conversion
OUTFILE=test-2beta-1.beta
# The reference file to compare the output against
CMPFILE=../examples/byzantine.beta
#
# Create temporary directory for test
# output if AUTOPKGTEST_TMP is undefined.
# Debian GNU/Linux defines AUTOPKGTEST_TMP.
#
if [ "x${AUTOPKGTEST_TMP}" = "x" ] ; then
TEST_TMP=$(mktemp -d)
trap "\rm -rf ${AUTOPKGTEST_TMP}" 0 INT QUIT ABRT PIPE TERM
else
TEST_TMP=${AUTOPKGTEST_TMP}
fi
#
# Point to the source directory for test.
#
if [ "x${srcdir}" = "x" ] ; then
srcdir=.
fi
#
# Point to binary executable; unibetacode_bindir
# should be defined for "make installcheck".
# Otherwise, leave undefined for "make check".
#
if [ "x${unibetacode_bindir}" = "x" ] ; then
unibetacode_bindir=../src
fi
${unibetacode_bindir}/uni2beta \
< ${srcdir}/${INFILE} \
> ${TEST_TMP}/${OUTFILE}
diff ${srcdir}/${CMPFILE} ${TEST_TMP}/${OUTFILE} || \
(echo "test-2beta-1 FAILED; output in ${TEST_TMP}/${OUTFILE}" ; exit 1)
#
# If AUTOPKGTEST_TMP was defined, don't remove it;
# a Debian calling process will take care of that.
#
if [ "x${AUTOPKGTEST_TMP}" = "x" ] ; then
\rm -rf ${TEST_TMP}
fi
unibetacode-1.2/test/test-all 0000755 0001750 0001750 00000000512 13323410365 014752 0 ustar paul paul #!/bin/sh
echo "*** Running Tests..."
./test-prep-1 || exit 1
echo "test-prep-1 PASSED"
./test-2utf8-1 || exit 1
echo "test-2utf8-1 PASSED"
./test-2utf8-2 || exit 1
echo "test-2utf8-2 PASSED"
./test-2beta-1 || exit 1
echo "test-2beta-1 PASSED"
./test-2beta-2 || exit 1
echo "test-2beta-2 PASSED"
echo "*** Finished Tests"
unibetacode-1.2/src/ 0000755 0001750 0001750 00000000000 13423202120 013076 5 ustar paul paul unibetacode-1.2/src/Makefile.am 0000644 0001750 0001750 00000000311 13324516351 015143 0 ustar paul paul ## Process this file with automake to produce Makefile.in
bin_PROGRAMS = unibetaprep beta2uni uni2beta
unibetaprep_SOURCES = unibetaprep.l
beta2uni_SOURCES = beta2uni.l
uni2beta_SOURCES = uni2beta.l
unibetacode-1.2/src/uni2beta.l 0000644 0001750 0001750 00000253656 13324515720 015022 0 ustar paul paul /*
uni2beta - Convert Unicode to Beta Code.
Author: Paul Hardy
Date: 2018
*/
%{
#include /* Generated by GNU Autotools */
#include
#include
#include
#include
/*
Definitions for Beta Code encoding.
*/
#define LANG_GREEK 0x00000
#define LANG_LATIN 0x01000
#define LANG_COPTIC 0x02000
#define LANG_ARABIC 0x04000 /* Defined by Thesaurus Linguae Graecae but not in their corpus */
#define LANG_HEBREW 0x08000
#define LANG_UTF 0x10000 /* Well-formed UTF-8 character; non-well-formed UTF-8 is skipped */
#define LANG_ASCII 0x20000 /* Miscellaneous character in ASCII range */
/*
Use LATIN_START of "&" and LATIN_END of "$" for
traditional Beta Code Latin and Greek combination.
Use LATIN_START of "{" and LATIN_END of "}" for
unibetacode ASCII/Unicode escape sequence.
*/
#define LATIN_START "&"
#define LATIN_END "$"
// #define LATIN_START "{"
// #define LATIN_END "}"
/*
IS_HEXADECIMAL returns 1 if character is a valid
hexadecimal digit, and returns 0 otherwise.
*/
#define IS_HEXADECIMAL(A) ( ( (A >= '0' && A <= '9') || \
(A >= 'A' && A <= 'F') || \
(A >= 'a' && A <= 'f') ) ? 1 : 0 )
#define YY_NO_INPUT
#define YY_NO_UNPUT
#define MAXSTRING 4096
/*
The sole reason of being for outword is to construct one output
word at a time to detect whether middle sigma and final sigma
(s1 and s2, respectively) can be reduced to simply "s" based
upon their position. Simple lookahead to the next input
character will not suffice, because Greek in UTF-8 consists
of multiple bytes per Unicode code point.
*/
char outword[MAXSTRING]; /* Construct the next output Beta Code word */
int uppercase=0; /* =1 to output uppercase Latin Beta Code; default is lowercase */
/* lang_mode selects Greek, Latin, Coptic or Hebrew output; default is Greek */
int lang_mode=LANG_GREEK;
int was_escaped=0; /* =1 if last string was an escape sequence "{...}" */
int was_codept=0; /* =1 if last string was a Unicode code point "\u..." */
void escape_out (char *); /* print escape sequence inside '{'...'}' */
/*
build_output builds output one word at a time, for
context-dependent interpretation of small middle
and final Greek sigma.
*/
void build_output (int, char *); /* Construct an output word; buffered for sigma */
void end_escape (); /* End escape sequence if printing one out */
%}
%option noyywrap
ASCII [\042-\051\053\055\057\072\074-\176]
ASCII_STRING [\042-\051\053\055\057\072\074-\176]+([ \011]+[\041-\176]+)*
PUNCTUATION [\041\054\056\073]+
GREEK ((\315\264)|(\315\276)|(\316[\220-\277])|(\317[\200-\216])|(\341[\274-\277][\200-\277]))
COPTIC ((\317[\242-\257])|(\342\262[\200-\261]))
HEBREW \327[\220-\252]
NEWLINE [\n]
%%
\302\253 build_output (LANG_GREEK, "\""); /* U+00AB LEFT-POINTING DOUBLE ANGLE QUOTATION MARK */
\302\273 build_output (LANG_GREEK, "\""); /* U+00BB RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK */
\312\273 build_output (LANG_GREEK, "`"); /* U+02BB MODIFIER LETTER TURNED COMMA */
\312\274 build_output (LANG_GREEK, "'"); /* U+02BC MODIFIER LETTER APOSTROPHE */
\342\200\230 build_output (LANG_GREEK, "`"); /* U+2018 LEFT SINGLE QUOTATION MARK */
\342\200\231 build_output (LANG_GREEK, "'"); /* U+2019 RIGHT SINGLE QUOTATION MARK */
\342\200\232 build_output (LANG_GREEK, "`"); /* U+201A SINGLE LOW-9 QUOTATION MARK */
\342\200\233 build_output (LANG_GREEK, "'"); /* U+201B SINGLE HIGH-REVERSED-9 QUOTATION MARK */
\342\200\234 build_output (LANG_GREEK, "\""); /* U+201C LEFT DOUBLE QUOTATION MARK */
\342\200\235 build_output (LANG_GREEK, "\""); /* U+201D RIGHT DOUBLE QUOTATION MARK */
\342\200\236 build_output (LANG_GREEK, "\""); /* U+201E DOUBLE LOW-9 QUOTATION MARK */
\342\200\271 build_output (LANG_GREEK, "`"); /* U+2039 SINGLE LEFT-POINTING ANGLE QUOTATION MARK */
\342\200\272 build_output (LANG_GREEK, "'"); /* U+203A SINGLE RIGHT-POINTING ANGLE QUOTATION MARK */
\314\200 { /*
A combining grave accent is supported in Greek or Coptic.
If font mode is not Coptic, call as LANG_GREEK
*/
if (lang_mode == LANG_COPTIC) {
build_output (LANG_COPTIC, "\\"); /* U+0300 COMBINING GRAVE ACCENT */
}
else {
build_output (LANG_GREEK, "\\"); /* U+0300 COMBINING GRAVE ACCENT */
}
}
\314\201 build_output (LANG_GREEK, "/"); /* U+0301 COMBINING ACUTE ACCENT */
\314\210 build_output (LANG_GREEK, "+"); /* U+0308 COMBINING DIAERESIS */
\314\223 build_output (LANG_GREEK, ")"); /* U+0313 COMBINING COMMA ABOVE */
\314\224 build_output (LANG_GREEK, "("); /* U+0314 COMBINING REVERSED COMMA ABOVE */
\314\243 build_output (LANG_GREEK, "?"); /* U+0323 COMBINING DOT BELOW */
\315\202 build_output (LANG_GREEK, "="); /* U+0342 COMBINING GREEK PERISPOMENI */
\315\205 build_output (LANG_GREEK, "|"); /* U+0345 COMBINING GREEK YPOGEGRAMMENI */
\315\264 build_output (LANG_GREEK, "#"); /* U+0374 GREEK NUMERAL SIGN */
\315\272 build_output (LANG_GREEK, "|"); /* U+037A GREEK YPOGEGRAMMENI */
\315\276 build_output (LANG_GREEK, ";"); /* U+037E GREEK QUESTION MARK */
\316\204 build_output (LANG_GREEK, "/"); /* U+0384 GREEK TONOS */
\316\205 build_output (LANG_GREEK, "+/"); /* U+0385 GREEK DIALYTIKA TONOS */
\316\206 build_output (LANG_GREEK, "*/a");/* U+0386 GREEK CAPITAL LETTER ALPHA WITH TONOS */
\316\207 build_output (LANG_GREEK, ":"); /* U+0387 GREEK ANO TELEIA */
\316\210 build_output (LANG_GREEK, "*/e");/* U+0388 GREEK CAPITAL LETTER EPSILON WITH TONOS */
\316\211 build_output (LANG_GREEK, "*/h");/* U+0389 GREEK CAPITAL LETTER ETA WITH TONOS */
\316\212 build_output (LANG_GREEK, "*/i");/* U+038A GREEK CAPITAL LETTER IOTA WITH TONOS */
\316\214 build_output (LANG_GREEK, "*/o");/* U+038C GREEK CAPITAL LETTER OMICRON WITH TONOS */
\316\216 build_output (LANG_GREEK, "*/u");/* U+038E GREEK CAPITAL LETTER UPSILON WITH TONOS */
\316\217 build_output (LANG_GREEK, "*/w");/* U+038F GREEK CAPITAL LETTER OMEGA WITH TONOS */
\316\220 build_output (LANG_GREEK, "i+/");/* U+0390 GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */
\316\221 build_output (LANG_GREEK, "*a"); /* U+0391 GREEK CAPITAL LETTER ALPHA */
\316\222 build_output (LANG_GREEK, "*b"); /* U+0392 GREEK CAPITAL LETTER BETA */
\316\223 build_output (LANG_GREEK, "*g"); /* U+0393 GREEK CAPITAL LETTER GAMMA */
\316\224 build_output (LANG_GREEK, "*d"); /* U+0394 GREEK CAPITAL LETTER DELTA */
\316\225 build_output (LANG_GREEK, "*e"); /* U+0395 GREEK CAPITAL LETTER EPSILON */
\316\226 build_output (LANG_GREEK, "*z"); /* U+0396 GREEK CAPITAL LETTER ZETA */
\316\227 build_output (LANG_GREEK, "*h"); /* U+0397 GREEK CAPITAL LETTER ETA */
\316\230 build_output (LANG_GREEK, "*q"); /* U+0398 GREEK CAPITAL LETTER THETA */
\316\231 build_output (LANG_GREEK, "*i"); /* U+0399 GREEK CAPITAL LETTER IOTA */
\316\232 build_output (LANG_GREEK, "*k"); /* U+039A GREEK CAPITAL LETTER KAPPA */
\316\233 build_output (LANG_GREEK, "*l"); /* U+039B GREEK CAPITAL LETTER LAMDA */
\316\234 build_output (LANG_GREEK, "*m"); /* U+039C GREEK CAPITAL LETTER MU */
\316\235 build_output (LANG_GREEK, "*n"); /* U+039D GREEK CAPITAL LETTER NU */
\316\236 build_output (LANG_GREEK, "*c"); /* U+039E GREEK CAPITAL LETTER XI */
\316\237 build_output (LANG_GREEK, "*o"); /* U+039F GREEK CAPITAL LETTER OMICRON */
\316\240 build_output (LANG_GREEK, "*p"); /* U+03A0 GREEK CAPITAL LETTER PI */
\316\241 build_output (LANG_GREEK, "*r"); /* U+03A1 GREEK CAPITAL LETTER RHO */
\316\243 build_output (LANG_GREEK, "*s"); /* U+03A3 GREEK CAPITAL LETTER SIGMA */
\316\244 build_output (LANG_GREEK, "*t"); /* U+03A4 GREEK CAPITAL LETTER TAU */
\316\245 build_output (LANG_GREEK, "*u"); /* U+03A5 GREEK CAPITAL LETTER UPSILON */
\316\246 build_output (LANG_GREEK, "*f"); /* U+03A6 GREEK CAPITAL LETTER PHI */
\316\247 build_output (LANG_GREEK, "*x"); /* U+03A7 GREEK CAPITAL LETTER CHI */
\316\250 build_output (LANG_GREEK, "*y"); /* U+03A8 GREEK CAPITAL LETTER PSI */
\316\251 build_output (LANG_GREEK, "*w"); /* U+03A9 GREEK CAPITAL LETTER OMEGA */
\316\252 build_output (LANG_GREEK, "*+i");/* U+03AA GREEK CAPITAL LETTER IOTA WITH DIALYTIKA */
\316\253 build_output (LANG_GREEK, "*+u");/* U+03AB GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA */
\316\254 build_output (LANG_GREEK, "a/"); /* U+03AC GREEK SMALL LETTER ALPHA WITH TONOS */
\316\255 build_output (LANG_GREEK, "e/"); /* U+03AD GREEK SMALL LETTER EPSILON WITH TONOS */
\316\256 build_output (LANG_GREEK, "h/"); /* U+03AE GREEK SMALL LETTER ETA WITH TONOS */
\316\257 build_output (LANG_GREEK, "i/"); /* U+03AF GREEK SMALL LETTER IOTA WITH TONOS */
\316\260 build_output (LANG_GREEK, "u+/");/* U+03B0 GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS */
\316\261 build_output (LANG_GREEK, "a"); /* U+03B1 GREEK SMALL LETTER ALPHA */
\316\262 build_output (LANG_GREEK, "b"); /* U+03B2 GREEK SMALL LETTER BETA */
\316\263 build_output (LANG_GREEK, "g"); /* U+03B3 GREEK SMALL LETTER GAMMA */
\316\264 build_output (LANG_GREEK, "d"); /* U+03B4 GREEK SMALL LETTER DELTA */
\316\265 build_output (LANG_GREEK, "e"); /* U+03B5 GREEK SMALL LETTER EPSILON */
\316\266 build_output (LANG_GREEK, "z"); /* U+03B6 GREEK SMALL LETTER ZETA */
\316\267 build_output (LANG_GREEK, "h"); /* U+03B7 GREEK SMALL LETTER ETA */
\316\270 build_output (LANG_GREEK, "q"); /* U+03B8 GREEK SMALL LETTER THETA */
\316\271 build_output (LANG_GREEK, "i"); /* U+03B9 GREEK SMALL LETTER IOTA */
\316\272 build_output (LANG_GREEK, "k"); /* U+03BA GREEK SMALL LETTER KAPPA */
\316\273 build_output (LANG_GREEK, "l"); /* U+03BB GREEK SMALL LETTER LAMDA */
\316\274 build_output (LANG_GREEK, "m"); /* U+03BC GREEK SMALL LETTER MU */
\316\275 build_output (LANG_GREEK, "n"); /* U+03BD GREEK SMALL LETTER NU */
\316\276 build_output (LANG_GREEK, "c"); /* U+03BE GREEK SMALL LETTER XI */
\316\277 build_output (LANG_GREEK, "o"); /* U+03BF GREEK SMALL LETTER OMICRON */
\317\200 build_output (LANG_GREEK, "p"); /* U+03C0 GREEK SMALL LETTER PI */
\317\201 build_output (LANG_GREEK, "r"); /* U+03C1 GREEK SMALL LETTER RHO */
\317\202/315[\220-\277] build_output (LANG_GREEK, "s2"); /* U+03C2 GREEK SMALL LETTER FINAL SIGMA before Greek letter */
\317\202/[\316-\317] build_output (LANG_GREEK, "s2"); /* U+03C2 GREEK SMALL LETTER FINAL SIGMA before Greek letter */
\317\202 build_output (LANG_GREEK, "s"); /* U+03C2 GREEK SMALL LETTER FINAL SIGMA at end of Greek word */
\317\203/[^\315\316\317] build_output (LANG_GREEK, "s1"); /* U+03C3 GREEK SMALL LETTER SIGMA not before Greek letter */
\317\203 build_output (LANG_GREEK, "s"); /* U+03C3 GREEK SMALL LETTER SIGMA in middle of Greek word */
\317\204 build_output (LANG_GREEK, "t"); /* U+03C4 GREEK SMALL LETTER TAU */
\317\205 build_output (LANG_GREEK, "u"); /* U+03C5 GREEK SMALL LETTER UPSILON */
\317\206 build_output (LANG_GREEK, "f"); /* U+03C6 GREEK SMALL LETTER PHI */
\317\207 build_output (LANG_GREEK, "x"); /* U+03C7 GREEK SMALL LETTER CHI */
\317\210 build_output (LANG_GREEK, "y"); /* U+03C8 GREEK SMALL LETTER PSI */
\317\211 build_output (LANG_GREEK, "w"); /* U+03C9 GREEK SMALL LETTER OMEGA */
\317\212 build_output (LANG_GREEK, "i+"); /* U+03CA GREEK SMALL LETTER IOTA WITH DIALYTIKA */
\317\213 build_output (LANG_GREEK, "u+"); /* U+03CB GREEK SMALL LETTER UPSILON WITH DIALYTIKA */
\317\214 build_output (LANG_GREEK, "o/"); /* U+03CC GREEK SMALL LETTER OMICRON WITH TONOS */
\317\215 build_output (LANG_GREEK, "u/"); /* U+03CD GREEK SMALL LETTER UPSILON WITH TONOS */
\317\216 build_output (LANG_GREEK, "w/"); /* U+03CE GREEK SMALL LETTER OMEGA WITH TONOS */
\317\234 build_output (LANG_GREEK, "*v"); /* U+03DC GREEK LETTER DIGAMMA */
\317\235 build_output (LANG_GREEK, "v"); /* U+03DD GREEK SMALL LETTER DIGAMMA */
\317\242 build_output (LANG_COPTIC, "*s"); /* U+03E2 COPTIC CAPITAL LETTER SHEI */
\317\243 build_output (LANG_COPTIC, "s"); /* U+03E3 COPTIC SMALL LETTER SHEI */
\317\244 build_output (LANG_COPTIC, "*f"); /* U+03E4 COPTIC CAPITAL LETTER FEI */
\317\245 build_output (LANG_COPTIC, "f"); /* U+03E5 COPTIC SMALL LETTER FEI */
\317\246 build_output (LANG_COPTIC, "*k"); /* U+03E6 COPTIC CAPITAL LETTER KHEI */
\317\247 build_output (LANG_COPTIC, "k"); /* U+03E7 COPTIC SMALL LETTER KHEI */
\317\250 build_output (LANG_COPTIC, "*h"); /* U+03E8 COPTIC CAPITAL LETTER HORI */
\317\251 build_output (LANG_COPTIC, "h"); /* U+03E9 COPTIC SMALL LETTER HORI */
\317\252 build_output (LANG_COPTIC, "*j"); /* U+03EA COPTIC CAPITAL LETTER GANGIA */
\317\253 build_output (LANG_COPTIC, "j"); /* U+03EB COPTIC SMALL LETTER GANGIA */
\317\254 build_output (LANG_COPTIC, "*g"); /* U+03EC COPTIC CAPITAL LETTER SHIMA */
\317\255 build_output (LANG_COPTIC, "g"); /* U+03ED COPTIC SMALL LETTER SHIMA */
\317\256 build_output (LANG_COPTIC, "*t"); /* U+03EE COPTIC CAPITAL LETTER DEI */
\317\257 build_output (LANG_COPTIC, "t"); /* U+03EF COPTIC SMALL LETTER DEI */
\317\262 build_output (LANG_GREEK, "s3"); /* U+03F2 GREEK LUNATE SIGMA SYMBOL */
\317\271 build_output (LANG_GREEK, "*s3"); /* U+03F9 GREEK CAPITAL LUNATE SIGMA SYMBOL */
\327\220 build_output (LANG_HEBREW, "A"); /* U+05D0 HEBREW LETTER ALEF */
\327\221 build_output (LANG_HEBREW, "b"); /* U+05D1 HEBREW LETTER BET */
\327\222 build_output (LANG_HEBREW, "g"); /* U+05D2 HEBREW LETTER GIMEL */
\327\223 build_output (LANG_HEBREW, "d"); /* U+05D3 HEBREW LETTER DALET */
\327\224 build_output (LANG_HEBREW, "h"); /* U+05D4 HEBREW LETTER HE */
\327\225 build_output (LANG_HEBREW, "v"); /* U+05D5 HEBREW LETTER VAV */
\327\226 build_output (LANG_HEBREW, "z"); /* U+05D6 HEBREW LETTER ZAYIN */
\327\227 build_output (LANG_HEBREW, "H"); /* U+05D7 HEBREW LETTER HET */
\327\230 build_output (LANG_HEBREW, "Q"); /* U+05D8 HEBREW LETTER TET */
\327\231 build_output (LANG_HEBREW, "y"); /* U+05D9 HEBREW LETTER YOD */
\327\232 build_output (LANG_HEBREW, "k2"); /* U+05DA HEBREW LETTER FINAL KAF */
\327\233 build_output (LANG_HEBREW, "k1"); /* U+05DB HEBREW LETTER KAF */
\327\234 build_output (LANG_HEBREW, "l"); /* U+05DC HEBREW LETTER LAMED */
\327\235 build_output (LANG_HEBREW, "m2"); /* U+05DD HEBREW LETTER FINAL MEM */
\327\236 build_output (LANG_HEBREW, "m1"); /* U+05DE HEBREW LETTER MEM */
\327\237 build_output (LANG_HEBREW, "n2"); /* U+05DF HEBREW LETTER FINAL NUN */
\327\240 build_output (LANG_HEBREW, "n1"); /* U+05E0 HEBREW LETTER NUN */
\327\241 build_output (LANG_HEBREW, "S"); /* U+05E1 HEBREW LETTER SAMEKH */
\327\242 build_output (LANG_HEBREW, "a"); /* U+05E2 HEBREW LETTER AYIN */
\327\243 build_output (LANG_HEBREW, "p2"); /* U+05E3 HEBREW LETTER FINAL PE */
\327\244 build_output (LANG_HEBREW, "p1"); /* U+05E4 HEBREW LETTER PE */
\327\245 build_output (LANG_HEBREW, "T2"); /* U+05E5 HEBREW LETTER FINAL TSADI */
\327\246 build_output (LANG_HEBREW, "T1"); /* U+05E6 HEBREW LETTER TSADI */
\327\247 build_output (LANG_HEBREW, "q"); /* U+05E7 HEBREW LETTER QOF */
\327\250 build_output (LANG_HEBREW, "r"); /* U+05E8 HEBREW LETTER RESH */
\327\251 build_output (LANG_HEBREW, "s"); /* U+05E9 HEBREW LETTER SHIN */
\327\252 build_output (LANG_HEBREW, "t"); /* U+05EA HEBREW LETTER TAV */
\341\274\200 build_output (LANG_GREEK, "a)"); /* U+1F00 GREEK SMALL LETTER ALPHA WITH PSILI */
\341\274\201 build_output (LANG_GREEK, "a("); /* U+1F01 GREEK SMALL LETTER ALPHA WITH DASIA */
\341\274\202 build_output (LANG_GREEK, "a)\\"); /* U+1F02 GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA */
\341\274\203 build_output (LANG_GREEK, "a(\\"); /* U+1F03 GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA */
\341\274\204 build_output (LANG_GREEK, "a)/"); /* U+1F04 GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA */
\341\274\205 build_output (LANG_GREEK, "a(/"); /* U+1F05 GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA */
\341\274\206 build_output (LANG_GREEK, "a)="); /* U+1F06 GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI */
\341\274\207 build_output (LANG_GREEK, "a(="); /* U+1F07 GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI */
\341\274\210 build_output (LANG_GREEK, "*)a"); /* U+1F08 GREEK CAPITAL LETTER ALPHA WITH PSILI */
\341\274\211 build_output (LANG_GREEK, "*(a"); /* U+1F09 GREEK CAPITAL LETTER ALPHA WITH DASIA */
\341\274\212 build_output (LANG_GREEK, "*)\\a"); /* U+1F0A GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA */
\341\274\213 build_output (LANG_GREEK, "*(\\a"); /* U+1F0B GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA */
\341\274\214 build_output (LANG_GREEK, "*)/a"); /* U+1F0C GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA */
\341\274\215 build_output (LANG_GREEK, "*(/a"); /* U+1F0D GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA */
\341\274\216 build_output (LANG_GREEK, "*)=a"); /* U+1F0E GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI */
\341\274\217 build_output (LANG_GREEK, "*(=a"); /* U+1F0F GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI */
\341\274\220 build_output (LANG_GREEK, "e)"); /* U+1F10 GREEK SMALL LETTER EPSILON WITH PSILI */
\341\274\221 build_output (LANG_GREEK, "e("); /* U+1F11 GREEK SMALL LETTER EPSILON WITH DASIA */
\341\274\222 build_output (LANG_GREEK, "e)\\"); /* U+1F12 GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA */
\341\274\223 build_output (LANG_GREEK, "e(\\"); /* U+1F13 GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA */
\341\274\224 build_output (LANG_GREEK, "e)/"); /* U+1F14 GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA */
\341\274\225 build_output (LANG_GREEK, "e(/"); /* U+1F15 GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA */
\341\274\230 build_output (LANG_GREEK, "*)e"); /* U+1F18 GREEK CAPITAL LETTER EPSILON WITH PSILI */
\341\274\231 build_output (LANG_GREEK, "*(e"); /* U+1F19 GREEK CAPITAL LETTER EPSILON WITH DASIA */
\341\274\232 build_output (LANG_GREEK, "*)\\e"); /* U+1F1A GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA */
\341\274\233 build_output (LANG_GREEK, "*(\\e"); /* U+1F1B GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA */
\341\274\234 build_output (LANG_GREEK, "*)/e"); /* U+1F1C GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA */
\341\274\235 build_output (LANG_GREEK, "*(/e"); /* U+1F1D GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA */
\341\274\240 build_output (LANG_GREEK, "h)"); /* U+1F20 GREEK SMALL LETTER ETA WITH PSILI */
\341\274\241 build_output (LANG_GREEK, "h("); /* U+1F21 GREEK SMALL LETTER ETA WITH DASIA */
\341\274\242 build_output (LANG_GREEK, "h)\\"); /* U+1F22 GREEK SMALL LETTER ETA WITH PSILI AND VARIA */
\341\274\243 build_output (LANG_GREEK, "h(\\"); /* U+1F23 GREEK SMALL LETTER ETA WITH DASIA AND VARIA */
\341\274\244 build_output (LANG_GREEK, "h)/"); /* U+1F24 GREEK SMALL LETTER ETA WITH PSILI AND OXIA */
\341\274\245 build_output (LANG_GREEK, "h(/"); /* U+1F25 GREEK SMALL LETTER ETA WITH DASIA AND OXIA */
\341\274\246 build_output (LANG_GREEK, "h)="); /* U+1F26 GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI */
\341\274\247 build_output (LANG_GREEK, "h(="); /* U+1F27 GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI */
\341\274\250 build_output (LANG_GREEK, "*)h"); /* U+1F28 GREEK CAPITAL LETTER ETA WITH PSILI */
\341\274\251 build_output (LANG_GREEK, "*)h"); /* U+1F29 GREEK CAPITAL LETTER ETA WITH DASIA */
\341\274\252 build_output (LANG_GREEK, "*)\\h"); /* U+1F2A GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA */
\341\274\253 build_output (LANG_GREEK, "*)\\h"); /* U+1F2B GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA */
\341\274\254 build_output (LANG_GREEK, "*)/h"); /* U+1F2C GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA */
\341\274\255 build_output (LANG_GREEK, "*)/h"); /* U+1F2D GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA */
\341\274\256 build_output (LANG_GREEK, "*)=h"); /* U+1F2E GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI */
\341\274\257 build_output (LANG_GREEK, "*)=h"); /* U+1F2F GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI */
\341\274\260 build_output (LANG_GREEK, "i)"); /* U+1F30 GREEK SMALL LETTER IOTA WITH PSILI */
\341\274\261 build_output (LANG_GREEK, "i("); /* U+1F31 GREEK SMALL LETTER IOTA WITH DASIA */
\341\274\262 build_output (LANG_GREEK, "i)\\"); /* U+1F32 GREEK SMALL LETTER IOTA WITH PSILI AND VARIA */
\341\274\263 build_output (LANG_GREEK, "i(\\"); /* U+1F33 GREEK SMALL LETTER IOTA WITH DASIA AND VARIA */
\341\274\264 build_output (LANG_GREEK, "i)/"); /* U+1F34 GREEK SMALL LETTER IOTA WITH PSILI AND OXIA */
\341\274\265 build_output (LANG_GREEK, "i(/"); /* U+1F35 GREEK SMALL LETTER IOTA WITH DASIA AND OXIA */
\341\274\266 build_output (LANG_GREEK, "i)="); /* U+1F36 GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI */
\341\274\267 build_output (LANG_GREEK, "i(="); /* U+1F37 GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI */
\341\274\270 build_output (LANG_GREEK, "*)i"); /* U+1F38 GREEK CAPITAL LETTER IOTA WITH PSILI */
\341\274\271 build_output (LANG_GREEK, "*(i"); /* U+1F39 GREEK CAPITAL LETTER IOTA WITH DASIA */
\341\274\272 build_output (LANG_GREEK, "*)\\i"); /* U+1F3A GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA */
\341\274\273 build_output (LANG_GREEK, "*)\\i"); /* U+1F3B GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA */
\341\274\274 build_output (LANG_GREEK, "*)/i"); /* U+1F3C GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA */
\341\274\275 build_output (LANG_GREEK, "*)/i"); /* U+1F3D GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA */
\341\274\276 build_output (LANG_GREEK, "*)=i"); /* U+1F3E GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI */
\341\274\277 build_output (LANG_GREEK, "*)=i"); /* U+1F3F GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI */
\341\275\200 build_output (LANG_GREEK, "o)"); /* U+1F40 GREEK SMALL LETTER OMICRON WITH PSILI */
\341\275\201 build_output (LANG_GREEK, "o("); /* U+1F41 GREEK SMALL LETTER OMICRON WITH DASIA */
\341\275\202 build_output (LANG_GREEK, "o)\\"); /* U+1F42 GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA */
\341\275\203 build_output (LANG_GREEK, "o(\\"); /* U+1F43 GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA */
\341\275\204 build_output (LANG_GREEK, "o)/"); /* U+1F44 GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA */
\341\275\205 build_output (LANG_GREEK, "o(/"); /* U+1F45 GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA */
\341\275\210 build_output (LANG_GREEK, "*)o"); /* U+1F48 GREEK CAPITAL LETTER OMICRON WITH PSILI */
\341\275\211 build_output (LANG_GREEK, "*(o"); /* U+1F49 GREEK CAPITAL LETTER OMICRON WITH DASIA */
\341\275\212 build_output (LANG_GREEK, "*)\\o"); /* U+1F4A GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA */
\341\275\213 build_output (LANG_GREEK, "*(\\o"); /* U+1F4B GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA */
\341\275\214 build_output (LANG_GREEK, "*)/o"); /* U+1F4C GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA */
\341\275\215 build_output (LANG_GREEK, "*(/o"); /* U+1F4D GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA */
\341\275\220 build_output (LANG_GREEK, "u)"); /* U+1F50 GREEK SMALL LETTER UPSILON WITH PSILI */
\341\275\221 build_output (LANG_GREEK, "u("); /* U+1F51 GREEK SMALL LETTER UPSILON WITH DASIA */
\341\275\222 build_output (LANG_GREEK, "u)\\"); /* U+1F52 GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA */
\341\275\223 build_output (LANG_GREEK, "u(\\"); /* U+1F53 GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA */
\341\275\224 build_output (LANG_GREEK, "u)/"); /* U+1F54 GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA */
\341\275\225 build_output (LANG_GREEK, "u(/"); /* U+1F55 GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA */
\341\275\226 build_output (LANG_GREEK, "u)="); /* U+1F56 GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI */
\341\275\227 build_output (LANG_GREEK, "u(="); /* U+1F57 GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI */
\341\275\231 build_output (LANG_GREEK, "*(u"); /* U+1F59 GREEK CAPITAL LETTER UPSILON WITH DASIA */
\341\275\233 build_output (LANG_GREEK, "*(\\u"); /* U+1F5B GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA */
\341\275\235 build_output (LANG_GREEK, "*(/u"); /* U+1F5D GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA */
\341\275\237 build_output (LANG_GREEK, "*(=u"); /* U+1F5F GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI */
\341\275\240 build_output (LANG_GREEK, "w)"); /* U+1F60 GREEK SMALL LETTER OMEGA WITH PSILI */
\341\275\241 build_output (LANG_GREEK, "w("); /* U+1F61 GREEK SMALL LETTER OMEGA WITH DASIA */
\341\275\242 build_output (LANG_GREEK, "w)\\"); /* U+1F62 GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA */
\341\275\243 build_output (LANG_GREEK, "w(\\"); /* U+1F63 GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA */
\341\275\244 build_output (LANG_GREEK, "w)/"); /* U+1F64 GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA */
\341\275\245 build_output (LANG_GREEK, "w(/"); /* U+1F65 GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA */
\341\275\246 build_output (LANG_GREEK, "w)="); /* U+1F66 GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI */
\341\275\247 build_output (LANG_GREEK, "w(="); /* U+1F67 GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI */
\341\275\250 build_output (LANG_GREEK, "*)w"); /* U+1F68 GREEK CAPITAL LETTER OMEGA WITH PSILI */
\341\275\251 build_output (LANG_GREEK, "*(w"); /* U+1F69 GREEK CAPITAL LETTER OMEGA WITH DASIA */
\341\275\252 build_output (LANG_GREEK, "*)\\w"); /* U+1F6A GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA */
\341\275\253 build_output (LANG_GREEK, "*(\\w"); /* U+1F6B GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA */
\341\275\254 build_output (LANG_GREEK, "*)/w"); /* U+1F6C GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA */
\341\275\255 build_output (LANG_GREEK, "*(/w"); /* U+1F6D GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA */
\341\275\256 build_output (LANG_GREEK, "*)=w"); /* U+1F6E GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI */
\341\275\257 build_output (LANG_GREEK, "*(=w"); /* U+1F6F GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI */
\341\275\260 build_output (LANG_GREEK, "a\\"); /* U+1F70 GREEK SMALL LETTER ALPHA WITH VARIA */
\341\275\261 build_output (LANG_GREEK, "a/"); /* U+1F71 GREEK SMALL LETTER ALPHA WITH OXIA */
\341\275\262 build_output (LANG_GREEK, "e\\"); /* U+1F72 GREEK SMALL LETTER EPSILON WITH VARIA */
\341\275\263 build_output (LANG_GREEK, "e/"); /* U+1F73 GREEK SMALL LETTER EPSILON WITH OXIA */
\341\275\264 build_output (LANG_GREEK, "h\\"); /* U+1F74 GREEK SMALL LETTER ETA WITH VARIA */
\341\275\265 build_output (LANG_GREEK, "h/"); /* U+1F75 GREEK SMALL LETTER ETA WITH OXIA */
\341\275\266 build_output (LANG_GREEK, "i\\"); /* U+1F76 GREEK SMALL LETTER IOTA WITH VARIA */
\341\275\267 build_output (LANG_GREEK, "i/"); /* U+1F77 GREEK SMALL LETTER IOTA WITH OXIA */
\341\275\270 build_output (LANG_GREEK, "o\\"); /* U+1F78 GREEK SMALL LETTER OMICRON WITH VARIA */
\341\275\271 build_output (LANG_GREEK, "o/"); /* U+1F79 GREEK SMALL LETTER OMICRON WITH OXIA */
\341\275\272 build_output (LANG_GREEK, "u\\"); /* U+1F7A GREEK SMALL LETTER UPSILON WITH VARIA */
\341\275\273 build_output (LANG_GREEK, "u/"); /* U+1F7B GREEK SMALL LETTER UPSILON WITH OXIA */
\341\275\274 build_output (LANG_GREEK, "w\\"); /* U+1F7C GREEK SMALL LETTER OMEGA WITH VARIA */
\341\275\275 build_output (LANG_GREEK, "w/"); /* U+1F7D GREEK SMALL LETTER OMEGA WITH OXIA */
\341\276\200 build_output (LANG_GREEK, "a)|"); /* U+1F80 GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI */
\341\276\201 build_output (LANG_GREEK, "a(|"); /* U+1F81 GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI */
\341\276\202 build_output (LANG_GREEK, "a)\\|"); /* U+1F82 GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI */
\341\276\203 build_output (LANG_GREEK, "a(\\|"); /* U+1F83 GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI */
\341\276\204 build_output (LANG_GREEK, "a)/|"); /* U+1F84 GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI */
\341\276\205 build_output (LANG_GREEK, "a(/|"); /* U+1F85 GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI */
\341\276\206 build_output (LANG_GREEK, "a)=|"); /* U+1F86 GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI */
\341\276\207 build_output (LANG_GREEK, "a(=|"); /* U+1F87 GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI */
\341\276\210 build_output (LANG_GREEK, "*)a|"); /* U+1F88 GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI */
\341\276\211 build_output (LANG_GREEK, "*(a|"); /* U+1F89 GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI */
\341\276\212 build_output (LANG_GREEK, "*)\\a|"); /* U+1F8A GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI */
\341\276\213 build_output (LANG_GREEK, "*(\\a|"); /* U+1F8B GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI */
\341\276\214 build_output (LANG_GREEK, "*)/a|"); /* U+1F8C GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI */
\341\276\215 build_output (LANG_GREEK, "*(/a|"); /* U+1F8D GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI */
\341\276\216 build_output (LANG_GREEK, "*)=a|"); /* U+1F8E GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI */
\341\276\217 build_output (LANG_GREEK, "*(=a|"); /* U+1F8F GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI */
\341\276\220 build_output (LANG_GREEK, "h)|"); /* U+1F90 GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI */
\341\276\221 build_output (LANG_GREEK, "h(|"); /* U+1F91 GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI */
\341\276\222 build_output (LANG_GREEK, "h)\\|"); /* U+1F92 GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI */
\341\276\223 build_output (LANG_GREEK, "h(\\|"); /* U+1F93 GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI */
\341\276\224 build_output (LANG_GREEK, "h)/|"); /* U+1F94 GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI */
\341\276\225 build_output (LANG_GREEK, "h(/|"); /* U+1F95 GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI */
\341\276\226 build_output (LANG_GREEK, "h)=|"); /* U+1F96 GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI */
\341\276\227 build_output (LANG_GREEK, "h(=|"); /* U+1F97 GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI */
\341\276\230 build_output (LANG_GREEK, "*)e|"); /* U+1F98 GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI */
\341\276\231 build_output (LANG_GREEK, "*(e|"); /* U+1F99 GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI */
\341\276\232 build_output (LANG_GREEK, "*)\\e|"); /* U+1F9A GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI */
\341\276\233 build_output (LANG_GREEK, "*(\\e|"); /* U+1F9B GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI */
\341\276\234 build_output (LANG_GREEK, "*)/e|"); /* U+1F9C GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI */
\341\276\235 build_output (LANG_GREEK, "*(/e|"); /* U+1F9D GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI */
\341\276\236 build_output (LANG_GREEK, "*)=e|"); /* U+1F9E GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI */
\341\276\237 build_output (LANG_GREEK, "*(=e|"); /* U+1F9F GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI */
\341\276\240 build_output (LANG_GREEK, "w)|"); /* U+1FA0 GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI */
\341\276\241 build_output (LANG_GREEK, "w(|"); /* U+1FA1 GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI */
\341\276\242 build_output (LANG_GREEK, "w)\\|"); /* U+1FA2 GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI */
\341\276\243 build_output (LANG_GREEK, "w(\\|"); /* U+1FA3 GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI */
\341\276\244 build_output (LANG_GREEK, "w)/|"); /* U+1FA4 GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI */
\341\276\245 build_output (LANG_GREEK, "w(/|"); /* U+1FA5 GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI */
\341\276\246 build_output (LANG_GREEK, "w)=|"); /* U+1FA6 GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI */
\341\276\247 build_output (LANG_GREEK, "w(=|"); /* U+1FA7 GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI */
\341\276\250 build_output (LANG_GREEK, "*)w|"); /* U+1FA8 GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI */
\341\276\251 build_output (LANG_GREEK, "*(w|"); /* U+1FA9 GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI */
\341\276\252 build_output (LANG_GREEK, "*)\\w|"); /* U+1FAA GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI */
\341\276\253 build_output (LANG_GREEK, "*(\\w|"); /* U+1FAB GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI */
\341\276\254 build_output (LANG_GREEK, "*)/w|"); /* U+1FAC GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI */
\341\276\255 build_output (LANG_GREEK, "*(/w|"); /* U+1FAD GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI */
\341\276\256 build_output (LANG_GREEK, "*)=w|"); /* U+1FAE GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI */
\341\276\257 build_output (LANG_GREEK, "*(=w|"); /* U+1FAF GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI */
\341\276\260 build_output (LANG_GREEK, "a'"); /* U+1FB0 GREEK SMALL LETTER ALPHA WITH VRACHY */
\341\276\261 build_output (LANG_GREEK, "a&"); /* U+1FB1 GREEK SMALL LETTER ALPHA WITH MACRON */
\341\276\262 build_output (LANG_GREEK, "a\\|"); /* U+1FB2 GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI */
\341\276\263 build_output (LANG_GREEK, "a|"); /* U+1FB3 GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI */
\341\276\264 build_output (LANG_GREEK, "a/|"); /* U+1FB4 GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI */
\341\276\266 build_output (LANG_GREEK, "a="); /* U+1FB6 GREEK SMALL LETTER ALPHA WITH PERISPOMENI */
\341\276\267 build_output (LANG_GREEK, "a=|"); /* U+1FB7 GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI */
\341\276\270 build_output (LANG_GREEK, "*'a"); /* U+1FB8 GREEK CAPITAL LETTER ALPHA WITH VRACHY */
\341\276\271 build_output (LANG_GREEK, "*&a"); /* U+1FB9 GREEK CAPITAL LETTER ALPHA WITH MACRON */
\341\276\272 build_output (LANG_GREEK, "*\\a"); /* U+1FBA GREEK CAPITAL LETTER ALPHA WITH VARIA */
\341\276\273 build_output (LANG_GREEK, "*/a"); /* U+1FBB GREEK CAPITAL LETTER ALPHA WITH OXIA */
\341\276\274 build_output (LANG_GREEK, "*a|"); /* U+1FBC GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI */
\341\276\275 build_output (LANG_GREEK, "'"); /* U+1FBD GREEK KORONIS */
\341\276\276 build_output (LANG_GREEK, "|"); /* U+1FBE GREEK PROSGEGRAMMENI */
\341\276\277 build_output (LANG_GREEK, ")"); /* U+1FBF GREEK PSILI */
\341\277\200 build_output (LANG_GREEK, "="); /* U+1FC0 GREEK PERISPOMENI */
\341\277\201 build_output (LANG_GREEK, "+="); /* U+1FC1 GREEK DIALYTIKA AND PERISPOMENI */
\341\277\202 build_output (LANG_GREEK, "h\\|"); /* U+1FC2 GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI */
\341\277\203 build_output (LANG_GREEK, "h|"); /* U+1FC3 GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI */
\341\277\204 build_output (LANG_GREEK, "h/|"); /* U+1FC4 GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI */
\341\277\206 build_output (LANG_GREEK, "h="); /* U+1FC6 GREEK SMALL LETTER ETA WITH PERISPOMENI */
\341\277\207 build_output (LANG_GREEK, "h=|"); /* U+1FC7 GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI */
\341\277\210 build_output (LANG_GREEK, "*\\e"); /* U+1FC8 GREEK CAPITAL LETTER EPSILON WITH VARIA */
\341\277\211 build_output (LANG_GREEK, "*/e"); /* U+1FC9 GREEK CAPITAL LETTER EPSILON WITH OXIA */
\341\277\212 build_output (LANG_GREEK, "*\\h"); /* U+1FCA GREEK CAPITAL LETTER ETA WITH VARIA */
\341\277\213 build_output (LANG_GREEK, "*/h"); /* U+1FCB GREEK CAPITAL LETTER ETA WITH OXIA */
\341\277\214 build_output (LANG_GREEK, "*h|"); /* U+1FCC GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI */
\341\277\215 build_output (LANG_GREEK, ")\\"); /* U+1FCD GREEK PSILI AND VARIA */
\341\277\216 build_output (LANG_GREEK, ")/"); /* U+1FCE GREEK PSILI AND OXIA */
\341\277\217 build_output (LANG_GREEK, ")="); /* U+1FCF GREEK PSILI AND PERISPOMENI */
\341\277\220 build_output (LANG_GREEK, "i'"); /* U+1FD0 GREEK SMALL LETTER IOTA WITH VRACHY */
\341\277\221 build_output (LANG_GREEK, "i&"); /* U+1FD1 GREEK SMALL LETTER IOTA WITH MACRON */
\341\277\222 build_output (LANG_GREEK, "i+\\"); /* U+1FD2 GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA */
\341\277\223 build_output (LANG_GREEK, "i+/"); /* U+1FD3 GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA */
\341\277\226 build_output (LANG_GREEK, "i="); /* U+1FD6 GREEK SMALL LETTER IOTA WITH PERISPOMENI */
\341\277\227 build_output (LANG_GREEK, "i+="); /* U+1FD7 GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI */
\341\277\230 build_output (LANG_GREEK, "*'i"); /* U+1FD8 GREEK CAPITAL LETTER IOTA WITH VRACHY */
\341\277\231 build_output (LANG_GREEK, "*&i"); /* U+1FD9 GREEK CAPITAL LETTER IOTA WITH MACRON */
\341\277\232 build_output (LANG_GREEK, "*\\i"); /* U+1FDA GREEK CAPITAL LETTER IOTA WITH VARIA */
\341\277\233 build_output (LANG_GREEK, "*/i"); /* U+1FDB GREEK CAPITAL LETTER IOTA WITH OXIA */
\341\277\235 build_output (LANG_GREEK, "(\\"); /* U+1FDD GREEK DASIA AND VARIA */
\341\277\236 build_output (LANG_GREEK, "(/"); /* U+1FDE GREEK DASIA AND OXIA */
\341\277\237 build_output (LANG_GREEK, "(="); /* U+1FDF GREEK DASIA AND PERISPOMENI */
\341\277\240 build_output (LANG_GREEK, "u'"); /* U+1FE0 GREEK SMALL LETTER UPSILON WITH VRACHY */
\341\277\241 build_output (LANG_GREEK, "u&"); /* U+1FE1 GREEK SMALL LETTER UPSILON WITH MACRON */
\341\277\242 build_output (LANG_GREEK, "u+\\"); /* U+1FE2 GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA */
\341\277\243 build_output (LANG_GREEK, "u+/"); /* U+1FE3 GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA */
\341\277\244 build_output (LANG_GREEK, "r)"); /* U+1FE4 GREEK SMALL LETTER RHO WITH PSILI */
\341\277\245 build_output (LANG_GREEK, "r("); /* U+1FE5 GREEK SMALL LETTER RHO WITH DASIA */
\341\277\246 build_output (LANG_GREEK, "u="); /* U+1FE6 GREEK SMALL LETTER UPSILON WITH PERISPOMENI */
\341\277\247 build_output (LANG_GREEK, "u+="); /* U+1FE7 GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI */
\341\277\250 build_output (LANG_GREEK, "*'u"); /* U+1FE8 GREEK CAPITAL LETTER UPSILON WITH VRACHY */
\341\277\251 build_output (LANG_GREEK, "*&u"); /* U+1FE9 GREEK CAPITAL LETTER UPSILON WITH MACRON */
\341\277\252 build_output (LANG_GREEK, "*\\u"); /* U+1FEA GREEK CAPITAL LETTER UPSILON WITH VARIA */
\341\277\253 build_output (LANG_GREEK, "*/u"); /* U+1FEB GREEK CAPITAL LETTER UPSILON WITH OXIA */
\341\277\254 build_output (LANG_GREEK, "*(r"); /* U+1FEC GREEK CAPITAL LETTER RHO WITH DASIA */
\341\277\255 build_output (LANG_GREEK, "+\\"); /* U+1FED GREEK DIALYTIKA AND VARIA */
\341\277\256 build_output (LANG_GREEK, "+/"); /* U+1FEE GREEK DIALYTIKA AND OXIA */
\341\277\257 build_output (LANG_GREEK, "\\"); /* U+1FEF GREEK VARIA */
\341\277\262 build_output (LANG_GREEK, "w\\|"); /* U+1FF2 GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI */
\341\277\263 build_output (LANG_GREEK, "w|"); /* U+1FF3 GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI */
\341\277\264 build_output (LANG_GREEK, "w/|"); /* U+1FF4 GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI */
\341\277\266 build_output (LANG_GREEK, "w="); /* U+1FF6 GREEK SMALL LETTER OMEGA WITH PERISPOMENI */
\341\277\267 build_output (LANG_GREEK, "w=|"); /* U+1FF7 GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI */
\341\277\270 build_output (LANG_GREEK, "*\\o"); /* U+1FF8 GREEK CAPITAL LETTER OMICRON WITH VARIA */
\341\277\271 build_output (LANG_GREEK, "*/o"); /* U+1FF9 GREEK CAPITAL LETTER OMICRON WITH OXIA */
\341\277\272 build_output (LANG_GREEK, "*\\w"); /* U+1FFA GREEK CAPITAL LETTER OMEGA WITH VARIA */
\341\277\273 build_output (LANG_GREEK, "*/w"); /* U+1FFB GREEK CAPITAL LETTER OMEGA WITH OXIA */
\341\277\274 build_output (LANG_GREEK, "*w|"); /* U+1FFC GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI */
\341\277\275 build_output (LANG_GREEK, "/"); /* U+1FFD GREEK OXIA */
\341\277\276 build_output (LANG_GREEK, "("); /* U+1FFE GREEK DASIA */
\316\221\314\201 build_output (LANG_GREEK, "*/a"); /* U+0386 GREEK CAPITAL LETTER ALPHA WITH TONOS */
\316\225\314\201 build_output (LANG_GREEK, "*/e"); /* U+0388 GREEK CAPITAL LETTER EPSILON WITH TONOS */
\316\227\314\201 build_output (LANG_GREEK, "*/h"); /* U+0389 GREEK CAPITAL LETTER ETA WITH TONOS */
\316\231\314\201 build_output (LANG_GREEK, "*/i"); /* U+038A GREEK CAPITAL LETTER IOTA WITH TONOS */
\316\237\314\201 build_output (LANG_GREEK, "*/o"); /* U+038C GREEK CAPITAL LETTER OMICRON WITH TONOS */
\316\245\314\201 build_output (LANG_GREEK, "*/u"); /* U+038E GREEK CAPITAL LETTER UPSILON WITH TONOS */
\316\251\314\201 build_output (LANG_GREEK, "*/w"); /* U+038F GREEK CAPITAL LETTER OMEGA WITH TONOS */
\316\271\314\201\314\210 build_output (LANG_GREEK, "i+/"); /* U+0390 GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */
\316\271\314\210\314\201 build_output (LANG_GREEK, "i+/"); /* U+0390 GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */
\316\231\314\210 build_output (LANG_GREEK, "*+i"); /* U+03AA GREEK CAPITAL LETTER IOTA WITH DIALYTIKA */
\316\245\314\210 build_output (LANG_GREEK, "*+u"); /* U+03AB GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA */
\316\261\314\201 build_output (LANG_GREEK, "a/"); /* U+03AC GREEK SMALL LETTER ALPHA WITH TONOS */
\316\265\314\201 build_output (LANG_GREEK, "e/"); /* U+03AD GREEK SMALL LETTER EPSILON WITH TONOS */
\316\267\314\201 build_output (LANG_GREEK, "h/"); /* U+03AE GREEK SMALL LETTER ETA WITH TONOS */
\316\271\314\201 build_output (LANG_GREEK, "i/"); /* U+03AF GREEK SMALL LETTER IOTA WITH TONOS */
\317\205\314\201\314\210 build_output (LANG_GREEK, "u+/"); /* U+03B0 GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS */
\317\205\314\210\314\201 build_output (LANG_GREEK, "u+/"); /* U+03B0 GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS */
\316\271\314\210 build_output (LANG_GREEK, "i+"); /* U+03CA GREEK SMALL LETTER IOTA WITH DIALYTIKA */
\317\205\314\210 build_output (LANG_GREEK, "u+"); /* U+03CB GREEK SMALL LETTER UPSILON WITH DIALYTIKA */
\316\277\314\201 build_output (LANG_GREEK, "o/"); /* U+03CC GREEK SMALL LETTER OMICRON WITH TONOS */
\317\205\314\201 build_output (LANG_GREEK, "u/"); /* U+03CD GREEK SMALL LETTER UPSILON WITH TONOS */
\317\211\314\201 build_output (LANG_GREEK, "w/"); /* U+03CE GREEK SMALL LETTER OMEGA WITH TONOS */
\316\261\314\223 build_output (LANG_GREEK, "a)"); /* U+1F00 GREEK SMALL LETTER ALPHA WITH PSILI */
\316\261\314\224 build_output (LANG_GREEK, "a("); /* U+1F01 GREEK SMALL LETTER ALPHA WITH DASIA */
\316\261\314\223\314\200 build_output (LANG_GREEK, "a)\\"); /* U+1F02 GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA */
\316\261\314\224\314\200 build_output (LANG_GREEK, "a(\\"); /* U+1F03 GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA */
\316\261\314\223\314\201 build_output (LANG_GREEK, "a)/"); /* U+1F04 GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA */
\316\261\314\224\314\201 build_output (LANG_GREEK, "a(/"); /* U+1F05 GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA */
\316\261\314\223\315\202 build_output (LANG_GREEK, "a)="); /* U+1F06 GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI */
\316\261\314\224\315\202 build_output (LANG_GREEK, "a(="); /* U+1F07 GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI */
\316\221\314\223 build_output (LANG_GREEK, "*)a"); /* U+1F08 GREEK CAPITAL LETTER ALPHA WITH PSILI */
\316\221\314\224 build_output (LANG_GREEK, "*(a"); /* U+1F09 GREEK CAPITAL LETTER ALPHA WITH DASIA */
\316\221\314\223\314\200 build_output (LANG_GREEK, "*)\\a"); /* U+1F0A GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA */
\316\221\314\224\314\200 build_output (LANG_GREEK, "*(\\a"); /* U+1F0B GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA */
\316\221\314\223\314\201 build_output (LANG_GREEK, "*)/a"); /* U+1F0C GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA */
\316\221\314\224\314\201 build_output (LANG_GREEK, "*(/a"); /* U+1F0D GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA */
\316\221\314\223\315\202 build_output (LANG_GREEK, "*)=a"); /* U+1F0E GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI */
\316\221\314\224\315\202 build_output (LANG_GREEK, "*(=a"); /* U+1F0F GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI */
\316\265\314\223 build_output (LANG_GREEK, "e)"); /* U+1F10 GREEK SMALL LETTER EPSILON WITH PSILI */
\316\265\314\224 build_output (LANG_GREEK, "e("); /* U+1F11 GREEK SMALL LETTER EPSILON WITH DASIA */
\316\265\314\223\314\200 build_output (LANG_GREEK, "e)\\"); /* U+1F12 GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA */
\316\265\314\224\314\200 build_output (LANG_GREEK, "e(\\"); /* U+1F13 GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA */
\316\265\314\223\314\201 build_output (LANG_GREEK, "e)/"); /* U+1F14 GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA */
\316\265\314\224\314\201 build_output (LANG_GREEK, "e(/"); /* U+1F15 GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA */
\316\225\314\223 build_output (LANG_GREEK, "*)e"); /* U+1F18 GREEK CAPITAL LETTER EPSILON WITH PSILI */
\316\225\314\224 build_output (LANG_GREEK, "*(e"); /* U+1F19 GREEK CAPITAL LETTER EPSILON WITH DASIA */
\316\225\314\223\314\200 build_output (LANG_GREEK, "*)\\e"); /* U+1F1A GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA */
\316\225\314\224\314\200 build_output (LANG_GREEK, "*(\\e"); /* U+1F1B GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA */
\316\225\314\223\314\201 build_output (LANG_GREEK, "*)/e"); /* U+1F1C GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA */
\316\225\314\224\314\201 build_output (LANG_GREEK, "*(/e"); /* U+1F1D GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA */
\316\267\314\223 build_output (LANG_GREEK, "h)"); /* U+1F20 GREEK SMALL LETTER ETA WITH PSILI */
\316\267\314\224 build_output (LANG_GREEK, "h("); /* U+1F21 GREEK SMALL LETTER ETA WITH DASIA */
\316\267\314\223\314\200 build_output (LANG_GREEK, "h)\\"); /* U+1F22 GREEK SMALL LETTER ETA WITH PSILI AND VARIA */
\316\267\314\224\314\200 build_output (LANG_GREEK, "h(\\"); /* U+1F23 GREEK SMALL LETTER ETA WITH DASIA AND VARIA */
\316\267\314\223\314\201 build_output (LANG_GREEK, "h)/"); /* U+1F24 GREEK SMALL LETTER ETA WITH PSILI AND OXIA */
\316\267\314\224\314\201 build_output (LANG_GREEK, "h(/"); /* U+1F25 GREEK SMALL LETTER ETA WITH DASIA AND OXIA */
\316\267\314\223\315\202 build_output (LANG_GREEK, "h)="); /* U+1F26 GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI */
\316\267\314\224\315\202 build_output (LANG_GREEK, "h(="); /* U+1F27 GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI */
\316\227\314\223 build_output (LANG_GREEK, "*)h"); /* U+1F28 GREEK CAPITAL LETTER ETA WITH PSILI */
\316\227\314\224 build_output (LANG_GREEK, "*(h"); /* U+1F29 GREEK CAPITAL LETTER ETA WITH DASIA */
\316\227\314\223\314\200 build_output (LANG_GREEK, "*)\\h"); /* U+1F2A GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA */
\316\227\314\224\314\200 build_output (LANG_GREEK, "*(\\h"); /* U+1F2B GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA */
\316\227\314\223\314\201 build_output (LANG_GREEK, "*)/h"); /* U+1F2C GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA */
\316\227\314\224\314\201 build_output (LANG_GREEK, "*(/h"); /* U+1F2D GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA */
\316\227\314\223\315\202 build_output (LANG_GREEK, "*)=h"); /* U+1F2E GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI */
\316\227\314\224\315\202 build_output (LANG_GREEK, "*(=h"); /* U+1F2F GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI */
\316\271\314\223 build_output (LANG_GREEK, "i)"); /* U+1F30 GREEK SMALL LETTER IOTA WITH PSILI */
\316\271\314\224 build_output (LANG_GREEK, "i("); /* U+1F31 GREEK SMALL LETTER IOTA WITH DASIA */
\316\271\314\223\314\200 build_output (LANG_GREEK, "i)\\"); /* U+1F32 GREEK SMALL LETTER IOTA WITH PSILI AND VARIA */
\316\271\314\224\314\200 build_output (LANG_GREEK, "i(\\"); /* U+1F33 GREEK SMALL LETTER IOTA WITH DASIA AND VARIA */
\316\271\314\223\314\201 build_output (LANG_GREEK, "i)/"); /* U+1F34 GREEK SMALL LETTER IOTA WITH PSILI AND OXIA */
\316\271\314\224\314\201 build_output (LANG_GREEK, "i(/"); /* U+1F35 GREEK SMALL LETTER IOTA WITH DASIA AND OXIA */
\316\271\314\223\315\202 build_output (LANG_GREEK, "i)="); /* U+1F36 GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI */
\316\271\314\224\315\202 build_output (LANG_GREEK, "i(="); /* U+1F37 GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI */
\316\231\314\223 build_output (LANG_GREEK, "*)i"); /* U+1F38 GREEK CAPITAL LETTER IOTA WITH PSILI */
\316\231\314\224 build_output (LANG_GREEK, "*(i"); /* U+1F39 GREEK CAPITAL LETTER IOTA WITH DASIA */
\316\231\314\223\314\200 build_output (LANG_GREEK, "*)\\i"); /* U+1F3A GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA */
\316\231\314\224\314\200 build_output (LANG_GREEK, "*(\\i"); /* U+1F3B GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA */
\316\231\314\223\314\201 build_output (LANG_GREEK, "*)/i"); /* U+1F3C GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA */
\316\231\314\224\314\201 build_output (LANG_GREEK, "*(/i"); /* U+1F3D GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA */
\316\231\314\223\315\202 build_output (LANG_GREEK, "*)=i"); /* U+1F3E GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI */
\316\231\314\224\315\202 build_output (LANG_GREEK, "*(=i"); /* U+1F3F GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI */
\316\277\314\223 build_output (LANG_GREEK, "o)"); /* U+1F40 GREEK SMALL LETTER OMICRON WITH PSILI */
\316\277\314\224 build_output (LANG_GREEK, "o("); /* U+1F41 GREEK SMALL LETTER OMICRON WITH DASIA */
\316\277\314\223\314\200 build_output (LANG_GREEK, "o)\\"); /* U+1F42 GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA */
\316\277\314\224\314\200 build_output (LANG_GREEK, "o(\\"); /* U+1F43 GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA */
\316\277\314\223\314\201 build_output (LANG_GREEK, "o)/"); /* U+1F44 GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA */
\316\277\314\224\314\201 build_output (LANG_GREEK, "o(/"); /* U+1F45 GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA */
\316\237\314\223 build_output (LANG_GREEK, "*)o"); /* U+1F48 GREEK CAPITAL LETTER OMICRON WITH PSILI */
\316\237\314\224 build_output (LANG_GREEK, "*(o"); /* U+1F49 GREEK CAPITAL LETTER OMICRON WITH DASIA */
\316\237\314\223\314\200 build_output (LANG_GREEK, "*)\\o"); /* U+1F4A GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA */
\316\237\314\224\314\200 build_output (LANG_GREEK, "*(\\o"); /* U+1F4B GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA */
\316\237\314\223\314\201 build_output (LANG_GREEK, "*)/o"); /* U+1F4C GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA */
\316\237\314\224\314\201 build_output (LANG_GREEK, "*(/o"); /* U+1F4D GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA */
\317\205\314\223 build_output (LANG_GREEK, "u)"); /* U+1F50 GREEK SMALL LETTER UPSILON WITH PSILI */
\317\205\314\224 build_output (LANG_GREEK, "u("); /* U+1F51 GREEK SMALL LETTER UPSILON WITH DASIA */
\317\205\314\223\314\200 build_output (LANG_GREEK, "u)\\"); /* U+1F52 GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA */
\317\205\314\224\314\200 build_output (LANG_GREEK, "u(\\"); /* U+1F53 GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA */
\317\205\314\223\314\201 build_output (LANG_GREEK, "u)/"); /* U+1F54 GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA */
\317\205\314\224\314\201 build_output (LANG_GREEK, "u(/"); /* U+1F55 GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA */
\317\205\314\223\315\202 build_output (LANG_GREEK, "u)="); /* U+1F56 GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI */
\317\205\314\224\315\202 build_output (LANG_GREEK, "u(="); /* U+1F57 GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI */
\316\245\314\224 build_output (LANG_GREEK, "*(u"); /* U+1F59 GREEK CAPITAL LETTER UPSILON WITH DASIA */
\316\245\314\224\314\200 build_output (LANG_GREEK, "*(\\u"); /* U+1F5B GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA */
\316\245\314\224\314\201 build_output (LANG_GREEK, "*(/u"); /* U+1F5D GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA */
\316\245\314\224\315\202 build_output (LANG_GREEK, "*(=u"); /* U+1F5F GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI */
\317\211\314\223 build_output (LANG_GREEK, "w)"); /* U+1F60 GREEK SMALL LETTER OMEGA WITH PSILI */
\317\211\314\224 build_output (LANG_GREEK, "w("); /* U+1F61 GREEK SMALL LETTER OMEGA WITH DASIA */
\317\211\314\223\314\200 build_output (LANG_GREEK, "w)\\"); /* U+1F62 GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA */
\317\211\314\224\314\200 build_output (LANG_GREEK, "w(\\"); /* U+1F63 GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA */
\317\211\314\223\314\201 build_output (LANG_GREEK, "w)/"); /* U+1F64 GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA */
\317\211\314\224\314\201 build_output (LANG_GREEK, "w(/"); /* U+1F65 GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA */
\317\211\314\223\315\202 build_output (LANG_GREEK, "w)="); /* U+1F66 GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI */
\317\211\314\224\315\202 build_output (LANG_GREEK, "w(="); /* U+1F67 GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI */
\316\251\314\223 build_output (LANG_GREEK, "*)w"); /* U+1F68 GREEK CAPITAL LETTER OMEGA WITH PSILI */
\316\251\314\224 build_output (LANG_GREEK, "*(w"); /* U+1F69 GREEK CAPITAL LETTER OMEGA WITH DASIA */
\316\251\314\223\314\200 build_output (LANG_GREEK, "*)\\w"); /* U+1F6A GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA */
\316\251\314\224\314\200 build_output (LANG_GREEK, "*(\\w"); /* U+1F6B GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA */
\316\251\314\223\314\201 build_output (LANG_GREEK, "*)/w"); /* U+1F6C GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA */
\316\251\314\224\314\201 build_output (LANG_GREEK, "*(/w"); /* U+1F6D GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA */
\316\251\314\223\315\202 build_output (LANG_GREEK, "*)=w"); /* U+1F6E GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI */
\316\251\314\224\315\202 build_output (LANG_GREEK, "*(=w"); /* U+1F6F GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI */
\316\261\314\200 build_output (LANG_GREEK, "a\\"); /* U+1F70 GREEK SMALL LETTER ALPHA WITH VARIA */
\316\265\314\200 build_output (LANG_GREEK, "e\\"); /* U+1F72 GREEK SMALL LETTER EPSILON WITH VARIA */
\316\267\314\200 build_output (LANG_GREEK, "h\\"); /* U+1F74 GREEK SMALL LETTER ETA WITH VARIA */
\316\271\314\200 build_output (LANG_GREEK, "i\\"); /* U+1F76 GREEK SMALL LETTER IOTA WITH VARIA */
\316\277\314\200 build_output (LANG_GREEK, "o\\"); /* U+1F78 GREEK SMALL LETTER OMICRON WITH VARIA */
\317\205\314\200 build_output (LANG_GREEK, "u\\"); /* U+1F7A GREEK SMALL LETTER UPSILON WITH VARIA */
\317\211\314\200 build_output (LANG_GREEK, "w\\"); /* U+1F7C GREEK SMALL LETTER OMEGA WITH VARIA */
\316\261\314\223\315\205 build_output (LANG_GREEK, "a)|"); /* U+1F80 GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI */
\316\261\314\224\315\205 build_output (LANG_GREEK, "a(|"); /* U+1F81 GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI */
\316\261\314\223\314\200\315\205 build_output (LANG_GREEK, "a)\\|"); /* U+1F82 GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI */
\316\261\314\224\314\200\315\205 build_output (LANG_GREEK, "a(\\|"); /* U+1F83 GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI */
\316\261\314\223\314\201\315\205 build_output (LANG_GREEK, "a)/|"); /* U+1F84 GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI */
\316\261\314\224\314\201\315\205 build_output (LANG_GREEK, "a(/|"); /* U+1F85 GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI */
\316\261\314\223\315\202\315\205 build_output (LANG_GREEK, "a)=|"); /* U+1F86 GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI */
\316\261\314\224\315\202\315\205 build_output (LANG_GREEK, "a(=|"); /* U+1F87 GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI */
\316\221\314\223\315\205 build_output (LANG_GREEK, "*)a|"); /* U+1F88 GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI */
\316\221\314\224\315\205 build_output (LANG_GREEK, "*(a|"); /* U+1F89 GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI */
\316\221\314\223\314\200\315\205 build_output (LANG_GREEK, "*)\\a|"); /* U+1F8A GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI */
\316\221\314\224\314\200\315\205 build_output (LANG_GREEK, "*(\\a|"); /* U+1F8B GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI */
\316\221\314\223\314\201\315\205 build_output (LANG_GREEK, "*)/a|"); /* U+1F8C GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI */
\316\221\314\224\314\201\315\205 build_output (LANG_GREEK, "*(/a|"); /* U+1F8D GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI */
\316\221\314\223\315\202\315\205 build_output (LANG_GREEK, "*)=a|"); /* U+1F8E GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI */
\316\221\314\224\315\202\315\205 build_output (LANG_GREEK, "*(=a|"); /* U+1F8F GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI */
\316\267\314\223\315\205 build_output (LANG_GREEK, "h)|"); /* U+1F90 GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI */
\316\267\314\224\315\205 build_output (LANG_GREEK, "h(|"); /* U+1F91 GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI */
\316\267\314\223\314\200\315\205 build_output (LANG_GREEK, "h)\\|"); /* U+1F92 GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI */
\316\267\314\224\314\200\315\205 build_output (LANG_GREEK, "h(\\|"); /* U+1F93 GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI */
\316\267\314\223\314\201\315\205 build_output (LANG_GREEK, "h)/|"); /* U+1F94 GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI */
\316\267\314\224\314\201\315\205 build_output (LANG_GREEK, "h(/|"); /* U+1F95 GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI */
\316\267\314\223\315\202\315\205 build_output (LANG_GREEK, "h)=|"); /* U+1F96 GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI */
\316\267\314\224\315\202\315\205 build_output (LANG_GREEK, "h(=|"); /* U+1F97 GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI */
\316\227\314\223\315\205 build_output (LANG_GREEK, "*)h|"); /* U+1F98 GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI */
\316\227\314\224\315\205 build_output (LANG_GREEK, "*(h|"); /* U+1F99 GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI */
\316\227\314\223\314\200\315\205 build_output (LANG_GREEK, "*)\\h|"); /* U+1F9A GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI */
\316\227\314\224\314\200\315\205 build_output (LANG_GREEK, "*(\\h|"); /* U+1F9B GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI */
\316\227\314\223\314\201\315\205 build_output (LANG_GREEK, "*)/h|"); /* U+1F9C GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI */
\316\227\314\224\314\201\315\205 build_output (LANG_GREEK, "*(/h|"); /* U+1F9D GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI */
\316\227\314\223\315\202\315\205 build_output (LANG_GREEK, "*)=h|"); /* U+1F9E GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI */
\316\227\314\224\315\202\315\205 build_output (LANG_GREEK, "*(=h|"); /* U+1F9F GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI */
\317\211\314\223\315\205 build_output (LANG_GREEK, "w)|"); /* U+1FA0 GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI */
\317\211\314\224\315\205 build_output (LANG_GREEK, "w(|"); /* U+1FA1 GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI */
\317\211\314\223\314\200\315\205 build_output (LANG_GREEK, "w)\\|"); /* U+1FA2 GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI */
\317\211\314\224\314\200\315\205 build_output (LANG_GREEK, "w(\\|"); /* U+1FA3 GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI */
\317\211\314\223\314\201\315\205 build_output (LANG_GREEK, "w)/|"); /* U+1FA4 GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI */
\317\211\314\224\314\201\315\205 build_output (LANG_GREEK, "w(/|"); /* U+1FA5 GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI */
\317\211\314\223\315\202\315\205 build_output (LANG_GREEK, "w)=|"); /* U+1FA6 GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI */
\317\211\314\224\315\202\315\205 build_output (LANG_GREEK, "w(=|"); /* U+1FA7 GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI */
\316\251\314\223\315\205 build_output (LANG_GREEK, "*)w|"); /* U+1FA8 GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI */
\316\251\314\224\315\205 build_output (LANG_GREEK, "*(w|"); /* U+1FA9 GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI */
\316\251\314\223\314\200\315\205 build_output (LANG_GREEK, "*)\\w|"); /* U+1FAA GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI */
\316\251\314\224\314\200\315\205 build_output (LANG_GREEK, "*(\\w|"); /* U+1FAB GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI */
\316\251\314\223\314\201\315\205 build_output (LANG_GREEK, "*)/w|"); /* U+1FAC GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI */
\316\251\314\224\314\201\315\205 build_output (LANG_GREEK, "*(/w|"); /* U+1FAD GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI */
\316\251\314\223\315\202\315\205 build_output (LANG_GREEK, "*)=w|"); /* U+1FAE GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI */
\316\251\314\224\315\202\315\205 build_output (LANG_GREEK, "*(=w|"); /* U+1FAF GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI */
\316\261\314\206 build_output (LANG_GREEK, "a'"); /* U+1FB0 GREEK SMALL LETTER ALPHA WITH VRACHY */
\316\261\314\204 build_output (LANG_GREEK, "a&"); /* U+1FB1 GREEK SMALL LETTER ALPHA WITH MACRON */
\316\261\314\200\315\205 build_output (LANG_GREEK, "a\\|"); /* U+1FB2 GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI */
\316\261\315\205 build_output (LANG_GREEK, "a|"); /* U+1FB3 GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI */
\316\261\314\201\315\205 build_output (LANG_GREEK, "a/|"); /* U+1FB4 GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI */
\316\261\315\202 build_output (LANG_GREEK, "a="); /* U+1FB6 GREEK SMALL LETTER ALPHA WITH PERISPOMENI */
\316\261\315\202\315\205 build_output (LANG_GREEK, "a=|"); /* U+1FB7 GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI */
\316\221\314\206 build_output (LANG_GREEK, "*'a"); /* U+1FB8 GREEK CAPITAL LETTER ALPHA WITH VRACHY */
\316\221\314\204 build_output (LANG_GREEK, "*&a"); /* U+1FB9 GREEK CAPITAL LETTER ALPHA WITH MACRON */
\316\221\314\200 build_output (LANG_GREEK, "*\\a"); /* U+1FBA GREEK CAPITAL LETTER ALPHA WITH VARIA */
\316\221\315\205 build_output (LANG_GREEK, "*a|"); /* U+1FBC GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI */
\316\267\314\200\315\205 build_output (LANG_GREEK, "h\\|"); /* U+1FC2 GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI */
\316\267\315\205 build_output (LANG_GREEK, "h|"); /* U+1FC3 GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI */
\316\267\314\201\315\205 build_output (LANG_GREEK, "h/|"); /* U+1FC4 GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI */
\316\267\315\202 build_output (LANG_GREEK, "h="); /* U+1FC6 GREEK SMALL LETTER ETA WITH PERISPOMENI */
\316\267\315\202\315\205 build_output (LANG_GREEK, "h=|"); /* U+1FC7 GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI */
\316\225\314\200 build_output (LANG_GREEK, "*\\e"); /* U+1FC8 GREEK CAPITAL LETTER EPSILON WITH VARIA */
\316\227\314\200 build_output (LANG_GREEK, "*\\h"); /* U+1FCA GREEK CAPITAL LETTER ETA WITH VARIA */
\316\227\315\205 build_output (LANG_GREEK, "*h|"); /* U+1FCC GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI */
\316\271\314\206 build_output (LANG_GREEK, "i'"); /* U+1FD0 GREEK SMALL LETTER IOTA WITH VRACHY */
\316\271\314\204 build_output (LANG_GREEK, "&"); /* U+1FD1 GREEK SMALL LETTER IOTA WITH MACRON */
\316\271\314\200\314\210 build_output (LANG_GREEK, "i+\\"); /* U+1FD2 GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA */
\316\271\314\210\314\200 build_output (LANG_GREEK, "i+\\"); /* U+1FD2 GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA */
\316\271\315\202 build_output (LANG_GREEK, "i="); /* U+1FD6 GREEK SMALL LETTER IOTA WITH PERISPOMENI */
\316\271\314\202\315\210 build_output (LANG_GREEK, "i+="); /* U+1FD7 GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI */
\316\271\314\210\315\202 build_output (LANG_GREEK, "i+="); /* U+1FD7 GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI */
\316\231\314\206 build_output (LANG_GREEK, "*'i"); /* U+1FD8 GREEK CAPITAL LETTER IOTA WITH VRACHY */
\316\231\314\204 build_output (LANG_GREEK, "*&i"); /* U+1FD9 GREEK CAPITAL LETTER IOTA WITH MACRON */
\316\231\314\200 build_output (LANG_GREEK, "*\\i"); /* U+1FDA GREEK CAPITAL LETTER IOTA WITH VARIA */
\317\205\314\206 build_output (LANG_GREEK, "u'"); /* U+1FE0 GREEK SMALL LETTER UPSILON WITH VRACHY */
\317\205\314\204 build_output (LANG_GREEK, "u&"); /* U+1FE1 GREEK SMALL LETTER UPSILON WITH MACRON */
\317\205\314\200\314\210 build_output (LANG_GREEK, "u+\\"); /* U+1FE2 GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA */
\317\205\314\210\314\200 build_output (LANG_GREEK, "u+\\"); /* U+1FE2 GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA */
\317\201\314\223 build_output (LANG_GREEK, "r)"); /* U+1FE4 GREEK SMALL LETTER RHO WITH PSILI */
\317\201\314\224 build_output (LANG_GREEK, "r("); /* U+1FE5 GREEK SMALL LETTER RHO WITH DASIA */
\317\205\315\202 build_output (LANG_GREEK, "u="); /* U+1FE6 GREEK SMALL LETTER UPSILON WITH PERISPOMENI */
\317\205\314\202\315\210 build_output (LANG_GREEK, "u+="); /* U+1FE7 GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI */
\317\205\314\210\315\202 build_output (LANG_GREEK, "u+="); /* U+1FE7 GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI */
\316\245\314\206 build_output (LANG_GREEK, "*'u"); /* U+1FE8 GREEK CAPITAL LETTER UPSILON WITH VRACHY */
\316\245\314\204 build_output (LANG_GREEK, "*&u"); /* U+1FE9 GREEK CAPITAL LETTER UPSILON WITH MACRON */
\316\245\314\200 build_output (LANG_GREEK, "*\\u"); /* U+1FEA GREEK CAPITAL LETTER UPSILON WITH VARIA */
\316\241\314\224 build_output (LANG_GREEK, "*(r"); /* U+1FEC GREEK CAPITAL LETTER RHO WITH DASIA */
\317\211\314\200\315\205 build_output (LANG_GREEK, "w\\|"); /* U+1FF2 GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI */
\317\211\315\205 build_output (LANG_GREEK, "w|"); /* U+1FF3 GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI */
\317\211\314\201\315\205 build_output (LANG_GREEK, "w/|"); /* U+1FF4 GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI */
\317\211\315\202 build_output (LANG_GREEK, "w="); /* U+1FF6 GREEK SMALL LETTER OMEGA WITH PERISPOMENI */
\317\211\315\202\315\205 build_output (LANG_GREEK, "w=|"); /* U+1FF7 GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI */
\316\237\314\200 build_output (LANG_GREEK, "*\\o"); /* U+1FF8 GREEK CAPITAL LETTER OMICRON WITH VARIA */
\316\251\314\200 build_output (LANG_GREEK, "*\\w"); /* U+1FFA GREEK CAPITAL LETTER OMEGA WITH VARIA */
\316\251\315\205 build_output (LANG_GREEK, "*=w"); /* U+1FFC GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI */
\342\262\200 build_output (LANG_COPTIC, "*A"); /* U+2C80 COPTIC CAPITAL LETTER ALFA */
\342\262\201 build_output (LANG_COPTIC, "A"); /* U+2C81 COPTIC SMALL LETTER ALFA */
\342\262\202 build_output (LANG_COPTIC, "*B"); /* U+2C82 COPTIC CAPITAL LETTER VIDA */
\342\262\203 build_output (LANG_COPTIC, "B"); /* U+2C83 COPTIC SMALL LETTER VIDA */
\342\262\204 build_output (LANG_COPTIC, "*G"); /* U+2C84 COPTIC CAPITAL LETTER GAMMA */
\342\262\205 build_output (LANG_COPTIC, "G"); /* U+2C85 COPTIC SMALL LETTER GAMMA */
\342\262\206 build_output (LANG_COPTIC, "*D"); /* U+2C86 COPTIC CAPITAL LETTER DALDA */
\342\262\207 build_output (LANG_COPTIC, "D"); /* U+2C87 COPTIC SMALL LETTER DALDA */
\342\262\210 build_output (LANG_COPTIC, "*E"); /* U+2C88 COPTIC CAPITAL LETTER EIE */
\342\262\211 build_output (LANG_COPTIC, "E"); /* U+2C89 COPTIC SMALL LETTER EIE */
\342\262\212 build_output (LANG_COPTIC, "*V"); /* U+2C8A COPTIC CAPITAL LETTER SOU */
\342\262\213 build_output (LANG_COPTIC, "V"); /* U+2C8B COPTIC SMALL LETTER SOU */
\342\262\214 build_output (LANG_COPTIC, "*Z"); /* U+2C8C COPTIC CAPITAL LETTER ZATA */
\342\262\215 build_output (LANG_COPTIC, "Z"); /* U+2C8D COPTIC SMALL LETTER ZATA */
\342\262\216 build_output (LANG_COPTIC, "*H"); /* U+2C8E COPTIC CAPITAL LETTER HATE */
\342\262\217 build_output (LANG_COPTIC, "H"); /* U+2C8F COPTIC SMALL LETTER HATE */
\342\262\220 build_output (LANG_COPTIC, "*Q"); /* U+2C90 COPTIC CAPITAL LETTER THETHE */
\342\262\221 build_output (LANG_COPTIC, "Q"); /* U+2C91 COPTIC SMALL LETTER THETHE */
\342\262\222 build_output (LANG_COPTIC, "*I"); /* U+2C92 COPTIC CAPITAL LETTER IAUDA */
\342\262\223 build_output (LANG_COPTIC, "I"); /* U+2C93 COPTIC SMALL LETTER IAUDA */
\342\262\224 build_output (LANG_COPTIC, "*K"); /* U+2C94 COPTIC CAPITAL LETTER KAPA */
\342\262\225 build_output (LANG_COPTIC, "K"); /* U+2C95 COPTIC SMALL LETTER KAPA */
\342\262\226 build_output (LANG_COPTIC, "*L"); /* U+2C96 COPTIC CAPITAL LETTER LAULA */
\342\262\227 build_output (LANG_COPTIC, "L"); /* U+2C97 COPTIC SMALL LETTER LAULA */
\342\262\230 build_output (LANG_COPTIC, "*M"); /* U+2C98 COPTIC CAPITAL LETTER MI */
\342\262\231 build_output (LANG_COPTIC, "M"); /* U+2C99 COPTIC SMALL LETTER MI */
\342\262\232 build_output (LANG_COPTIC, "*N"); /* U+2C9A COPTIC CAPITAL LETTER NI */
\342\262\233 build_output (LANG_COPTIC, "N"); /* U+2C9B COPTIC SMALL LETTER NI */
\342\262\234 build_output (LANG_COPTIC, "*C"); /* U+2C9C COPTIC CAPITAL LETTER KSI */
\342\262\235 build_output (LANG_COPTIC, "C"); /* U+2C9D COPTIC SMALL LETTER KSI */
\342\262\236 build_output (LANG_COPTIC, "*O"); /* U+2C9E COPTIC CAPITAL LETTER O */
\342\262\237 build_output (LANG_COPTIC, "O"); /* U+2C9F COPTIC SMALL LETTER O */
\342\262\240 build_output (LANG_COPTIC, "*P"); /* U+2CA0 COPTIC CAPITAL LETTER PI */
\342\262\241 build_output (LANG_COPTIC, "P"); /* U+2CA1 COPTIC SMALL LETTER PI */
\342\262\242 build_output (LANG_COPTIC, "*R"); /* U+2CA2 COPTIC CAPITAL LETTER RO */
\342\262\243 build_output (LANG_COPTIC, "R"); /* U+2CA3 COPTIC SMALL LETTER RO */
\342\262\244 build_output (LANG_COPTIC, "*S"); /* U+2CA4 COPTIC CAPITAL LETTER SIMA */
\342\262\245 build_output (LANG_COPTIC, "S"); /* U+2CA5 COPTIC SMALL LETTER SIMA */
\342\262\246 build_output (LANG_COPTIC, "*T"); /* U+2CA6 COPTIC CAPITAL LETTER TAU */
\342\262\247 build_output (LANG_COPTIC, "T"); /* U+2CA7 COPTIC SMALL LETTER TAU */
\342\262\250 build_output (LANG_COPTIC, "*U"); /* U+2CA8 COPTIC CAPITAL LETTER UA */
\342\262\251 build_output (LANG_COPTIC, "U"); /* U+2CA9 COPTIC SMALL LETTER UA */
\342\262\252 build_output (LANG_COPTIC, "*F"); /* U+2CAA COPTIC CAPITAL LETTER FI */
\342\262\253 build_output (LANG_COPTIC, "F"); /* U+2CAB COPTIC SMALL LETTER FI */
\342\262\254 build_output (LANG_COPTIC, "*X"); /* U+2CAC COPTIC CAPITAL LETTER KHI */
\342\262\255 build_output (LANG_COPTIC, "X"); /* U+2CAD COPTIC SMALL LETTER KHI */
\342\262\256 build_output (LANG_COPTIC, "*Y"); /* U+2CAE COPTIC CAPITAL LETTER PSI */
\342\262\257 build_output (LANG_COPTIC, "Y"); /* U+2CAF COPTIC SMALL LETTER PSI */
\342\262\260 build_output (LANG_COPTIC, "*W"); /* U+2CB0 COPTIC CAPITAL LETTER OOU */
\342\262\261 build_output (LANG_COPTIC, "W"); /* U+2CB1 COPTIC SMALL LETTER OOU */
[\302-\337][\200-\277] build_output (LANG_UTF, yytext); /* well-formed 2 byte UTF-8 character U+0080 .. U+07FF */
[\340-\357][\200-\277]{2} build_output (LANG_UTF, yytext); /* well-formed 3 byte UTF-8 character U+0800 .. U+FFFF */
[\360-\363][\200-\277]{3} build_output (LANG_UTF, yytext); /* well-formed 4 byte UTF-8 character U+10000 .. U+FFFFF */
\364[\200-\217][\200-\277]{2} build_output (LANG_UTF, yytext); /* well-formed 4 byte UTF-8 character U+100000 .. U+10FFFF */
[ ]/{GREEK} { /* Switch to Greek mode before a preceding space, so Greek text is easier to read */
if (was_escaped == 1)
end_escape ();
if (lang_mode != LANG_GREEK) {
fputc ('$', yyout);
lang_mode = LANG_GREEK;
}
fputc (' ', yyout);
}
[ ]/{COPTIC} { /* Switch to Coptic mode before a preceding space, so Coptic text is easier to read */
if (was_escaped == 1)
end_escape ();
if (lang_mode != LANG_COPTIC) {
fprintf (yyout, "&100");
lang_mode = LANG_COPTIC;
}
fputc (' ', yyout);
}
[ ]/{HEBREW} { /* Switch to Hebrew mode before a preceding space, so Hebrew text is easier to read */
if (was_escaped == 1)
end_escape ();
if (lang_mode != LANG_HEBREW) {
fprintf (yyout, "&300");
lang_mode = LANG_HEBREW;
}
fputc (' ', yyout);
}
\n { /*
Flush any pending output and set the font to LANG_GREEK at end of line.
*/
end_escape ();
if (lang_mode != LANG_GREEK) {
fputc ('$', yyout); /* Return to Greek mode */
lang_mode = LANG_GREEK;
}
fputc ('\n', yyout);
}
. build_output (LANG_ASCII, yytext); /* Miscellaneous character in the ASCII range */
%%
int
main (int argc, char *argv[])
{
int i; /* loop variable */
int exit_status; /* program exit status */
void print_help (char *);
exit_status = EXIT_SUCCESS;
yyin = stdin;
yyout = stdout;
outword[0] = '\0'; /* No initial string queued for output */
for (i = 1; i < argc; i++) {
/*
Parse options. If an invalid command line argument
was given, print a help menu and exit with error status.
*/
if (argv[i][0] == '-') {
switch (argv[i][1]) {
case 'l': uppercase = 0; /* Output lowercase Latin (the default) */
break;
case 'u': uppercase = 1; /* Output uppercase Latin */
break;
/*
input file format; file name follows
in next parameter, so increment i
*/
case 'i': yyin = fopen (argv[++i], "r");
break;
/*
output file format; file name follows
in next parameter, so increment i
*/
case 'o': yyout = fopen (argv[++i], "w");
break;
default: print_help (argv[0]);
exit_status = EXIT_FAILURE;
break;
}
}
else {
print_help (argv[0]);
exit_status = EXIT_FAILURE;
}
}
if (exit_status == EXIT_SUCCESS) {
yylex ();
/* Write final Beta Code output if there is any. */
end_escape ();
}
exit (exit_status);
}
/*
Print a help message. The parameter is the program name,
taken from argv[0].
*/
void
print_help (char * progname)
{
fprintf (stderr, "\nUnknown command line parameter.\n\n");
fprintf (stderr, "Syntax: %s [-l|-u] [-i input_file] [-o output_file]\n\n",
progname);
fprintf (stderr, " -l: output Greek in lowercase Latin letters (the default)\n\n");
fprintf (stderr, " -u: output Greek in uppercase Latin letters\n\n");
fprintf (stderr, " -i: specify input file name\n\n");
fprintf (stderr, " -o: specify output file name\n\n");
return;
}
/*
Print a Unicode sequence or other sequence that might be
interpreted as another character if it does not appear within
curly brackets ("{...}").
*/
void
escape_out (char *new_text)
{
int i;
uint32_t this_char; /* Current character in new_text */
unsigned mask; /* To determine UTF-8 character length */
int utf8_len; /* # of bytes in current UTF-8 character */
uint32_t codept; /* An input Unicode code point to print */
i = 0;
this_char = new_text[i] & 0xFF;
if ((this_char & 0x80) == 0x80) { /* Found start of a UTF-8 sequence */
this_char &= 0xFF;
/* Find out how many bytes long this UTF-8 character is */
mask = 0x80; /* examine input character bits from MSB to LSB */
for (utf8_len = 0; (this_char & mask) != 0; utf8_len++) {
this_char ^= mask; /* toggle next UTF-8 header bit off */
mask >>= 1;
}
/*
Now this_char contains the high-order siginificant
bytes of the code point, with the leading UTF-8
length indicator bits set to zero.
utf8_len contains byte length of this UTF-8 character.
*/
codept = this_char;
while (--utf8_len > 0) {
codept <<= 6; /* 6 code point bits per UTF-8 byte after the first byte */
this_char = new_text [++i];
this_char &= 0x3F; /* mask off the two high-order bits */
codept |= this_char;
}
/*
If last output wasn't an escape sequence, start with '{'
*/
if (was_escaped != 1) {
fputc ('{', yyout);
was_escaped = 1;
}
fprintf (yyout, "\\u%04X", codept);
was_codept = 1; /* last output was a Unicode codepoint "\u..." */
} /* if high bit set, print Uniocde code point */
else { /* print ASCII character */
/*
If last thing printed was a Unicode code point of the form
"\u..." and we are about to print what could be misinterpreted
as a hexadecimal sequence, end the last escape string and
begin a new one.
*/
if (was_codept == 1 &&
((this_char >= '0' && this_char <= '9') ||
(this_char >= 'A' && this_char <= 'F') ||
(this_char >= 'a' && this_char <= 'f'))) {
fprintf (yyout, "}{");
}
fprintf (yyout, "%s", yytext);
}
return;
}
/*
Build the output, one Beta Code at a time. If the current
Beta Code contains a small sigma, preserve it until we see
the Beta Code that follows. This allows simplifying s1 to s
for a middle sigma, and s2 to s for a final sigma, when they
are in their proper positions in a word.
*/
void
build_output (int this_lang, char *new_text)
{
int i; /* loop variable */
uint32_t this_char; /* Current character in new_text */
void end_escape (); /* end a running escape sequence "{...}" */
this_char = new_text [0] & 0xFF;
/*
See if we need to change the font. If this_lang < 0,
it indicates a numeric digit, ASCII '0' through '9';
never change the font for digits. They are output
the same for all fonts.
*/
if (this_lang == LANG_ASCII) {
if (was_escaped == 1) { /* End a UTF-8 "\ux...x" series */
end_escape ();
}
/*
For a character common to all font modes, just print the character.
*/
if (this_char == ' ' || this_char == '!' ||
this_char == ',' || this_char == '.' ||
this_char == ';') {
fprintf (yyout, "%s", new_text);
}
else {
if (lang_mode != LANG_LATIN) {
fputc ('&', yyout);
lang_mode = LANG_LATIN;
}
/*
If a Beta Code language mode character, '$' or '&',
print as Unicode to avoid misinterpretation.
*/
if (this_char == '$') {
escape_out ("\\u0024");
}
else if (this_char == '&') {
escape_out ("\\u0026");
}
else {
fprintf (yyout, "%s", new_text);
}
}
} /* this_lang == LANG_ASCII */
else if (this_lang == LANG_UTF) { /* yytext holds a UTF-8 byte sequence */
escape_out (new_text);
} /* this_lang == LANG_UTF */
/*
Switch font mode if necessary.
*/
else if (was_escaped == 1 || this_lang != lang_mode) {
/*
If changing to non-Latin language mode,
make sure a running escape sequence ends
*/
if (lang_mode != LANG_LATIN)
end_escape ();
if (this_lang != lang_mode) {
switch (this_lang) {
case LANG_GREEK:
fprintf (yyout, "$");
break;
case LANG_LATIN:
fprintf (yyout, "&");
break;
case LANG_COPTIC:
fprintf (yyout, "&100");
break;
case LANG_HEBREW:
fprintf (yyout, "&300");
break;
default:
fprintf (yyout, "$"); /* Greek mode is the default */
break;
} /* switch (this_lang) */
} /* this_lang != lang_mode */
lang_mode = this_lang;
} /* was_escaped == 1 || this_lang != lang_mode */
/*
If this wasn't already processed for printing above,
output the string that was passed to build_output.
*/
if (this_lang != LANG_ASCII && this_lang != LANG_UTF) {
/* Convert case of Greek Beta Code letters if desired */
if ((lang_mode == LANG_GREEK) && (uppercase == 1)) {
/* Don't modify new_text, because it could be a const char * */
for (i = 0; new_text [i] != '\0'; i++) {
fputc (toupper (new_text [i]), yyout);
}
}
else {
fprintf (yyout, "%s", new_text);
}
}
return;
}
/*
End an escape sequence if we have been printing one.
*/
void
end_escape ()
{
/*
Flush any pending output of a preceding escape sequence.
*/
if (was_escaped == 1) {
fputc ('}', yyout);
was_escaped = 0;
was_codept = 0;
}
return;
}
unibetacode-1.2/src/beta2uni.l 0000644 0001750 0001750 00000155536 13323414074 015017 0 ustar paul paul /*
beta2uni - convert Beta Code to Unicode.
Author: Paul Hardy
Date: 2018
*/
%{
#include
#include
#include
/*
Definitions for Beta Code encoding.
*/
#define LANG_GREEK 0x0000
#define LANG_LATIN 0x1000
#define LANG_COPTIC 0x2000
#define LANG_ARABIC 0x4000 /* Defined by Thesaurus Linguae Graecae but not in their corpus */
#define LANG_HEBREW 0x8000
#define YY_NO_INPUT
#define YY_NO_UNPUT
int bom_out=0; /* =1 to begin output with a UTF-8 Byte Order Mark (U+FFFE). */
int lang_type=LANG_GREEK; /* For selecting Greek, Latin, Coptic or Hebrew output. */
int doubleq_style=6; /* style for double quotation marks (Greek double quotes) */
int singleq_style=7; /* style for single quotation marks (Greek single quotes) */
/*
State for quotation type 0 through 9, inclusive; Beta
Code only uses quotation types 1 through 8, inclusive.
0 = open quote not active
1 = open quote active, so next encounter will close this quote
*/
int quote_state[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
/* Unicode character for an opening quote for styles 0 through 9 */
int quote_open[10] = {
0x201C, /* 0 */ /* LANG_LATIN: U+201C LEFT DOUBLE QUOTATION MARK */
0x201E, /* 1 */ /* LANG_HEBREW: U+201E DOUBLE LOW-9 QUOTATION MARK */
0x201E, /* 2 */ /* U+201E DOUBLE LOW-9 QUOTATION MARK (not in TLG spec) */
0x2018, /* 3 */ /* LANG_LATIN: U+2018 LEFT SINGLE QUOTATION MARK */
/* 0x02BB 3 */ /* LANG_LATIN: U+02BB Alternative - MODIFIER LETTER TURNED COMMA */
0x201A, /* 4 */ /* LANG_HEBREW: U+201A SINGLE LOW-9 QUOTATION MARK */
0x2018, /* 5 */ /* U+2018 LEFT SINGLE QUOTATION MARK (not in TLG spec) */
0x00AB, /* 6 */ /* LANG_GREEK:
LANG_COPTIC: U+00AB LEFT-POINTING DOUBLE ANGLE QUOTATION MARK */
0x02BB, /* 7 */ /* LANG_GREEK:
LANG_COPTIC: U+02BB MODIFIER LETTER TURNED COMMA
Alternative - U+2039 SINGLE LEFT-POINTING ANGLE QUOTATION MARK
*/
0x201C, /* 8 */ /* U+201C LEFT DOUBLE QUOTATION MARK (not implemented) */
0x0022 /* 9 */ /* U+0022 QUOTATION MARK (not implemented) */
};
/* Unicode character for a closing quote for styles 0 through 9 */
int quote_close[10] = {
0x201D, /* 0 */ /* LANG_LATIN: U+201D RIGHT DOUBLE QUOTATION MARK */
0x201E, /* 1 */ /* LANG_HEBREW: U+201E DOUBLE LOW-9 QUOTATION MARK */
0x201C, /* 2 */ /* U+201C LEFT DOUBLE QUOTATION MARK (not paired in TLG spec) */
0x2019, /* 3 */ /* LANG_LATIN: U+2019 RIGHT SINGLE QUOTATION MARK */
/* 0x02BC 3 */ /* LANG_LATIN: U+02BC Alternative - MODIFIER LETTER APOSTROPHE */
0x201A, /* 4 */ /* LANG_HEBREW: U+201A SINGLE LOW-9 QUOTATION MARK */
0x201B, /* 5 */ /* U+201B SINGLE HIGH-REVERSED-9 QUOTATION MARK (not paired in TLG spec) */
0x00BB, /* 6 */ /* LANG_GREEK:
LANG_COPTIC: U+00BB RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK */
0x02BC, /* 7 */ /* LANG_GREEK:
LANG_COPTIC: U+02BC MODIFIER LETTER APOSTROPHE
Alternative - U+203A SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
*/
0x201E, /* 8 */ /* U+201E DOUBLE LOW-9 QUOTATION MARK (not implemented) */
0x0022 /* 9 */ /* U+0022 QUOTATION MARK (not implemented) */
};
/*
Table to convert an ASCII letter into a capital Unicode Greek letter.
Middle Sigma, Final Sigma, and Lunate Sigma are handled specially elsewhere.
*/
uint32_t ascii2greek_capital[128] = {
/* 0/8 1/9 2/A 3/B 4/C 5/D 6/E 7/F */
0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 0x00..0x07 */
0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 0x08..0x0F */
0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 0x10..0x17 */
0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 0x18..0x1F */
0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 0x20..0x27 */
0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 0x28..0x2F */
'0', '1', '2', '3', '4', '5', '6', '7', /* 0x30..0x37 0..7 */
'8', '9', 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 0x38..0x3F 8..? */
0x000, 0x391, 0x392, 0x39E, 0x394, 0x395, 0x3A6, 0x393, /* 0x40..0x47 @..G */
0x397, 0x399, 0x3A2, 0x39A, 0x39B, 0x39C, 0x39D, 0x39F, /* 0x48..0x4F H..O */
0x3A0, 0x398, 0x3A1, 0x3A3, 0x3A4, 0x3A5, 0x3F9, 0x3A9, /* 0x50..0x57 P..W */
0x3A7, 0x3A8, 0x396, 0x000, 0x000, 0x000, 0x000, 0x000, /* 0x58..0x5F X.._ */
0x000, 0x391, 0x392, 0x39E, 0x394, 0x395, 0x3A6, 0x393, /* 0x60..0x67 `..g */
0x397, 0x399, 0x3A2, 0x39A, 0x39B, 0x39C, 0x39D, 0x39F, /* 0x68..0x6F h..o */
0x3A0, 0x398, 0x3A1, 0x3A3, 0x3A4, 0x3A5, 0x3DD, 0x3A9, /* 0x70..0x77 p..w */
0x3A7, 0x3A8, 0x396, 0x000, 0x000, 0x000, 0x000, 0x000, /* 0x78..0x7F x.. */
/* 0/8 1/9 2/A 3/B 4/C 5/D 6/E 7/F */
};
/*
Table to convert an ASCII letter into a small Unicode Greek letter.
Middle Sigma, Final Sigma, and Lunate Sigma are handled specially elsewhere.
*/
uint32_t ascii2greek_small[128] = {
/* 0/8 1/9 2/A 3/B 4/C 5/D 6/E 7/F */
0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 0x00..0x07 */
0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 0x08..0x0F */
0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 0x10..0x17 */
0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 0x18..0x1F */
0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 0x20..0x27 */
0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 0x28..0x2F */
'0', '1', '2', '3', '4', '5', '6', '7', /* 0x30..0x37 0..7 */
'8', '9', 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 0x38..0x3F 8..? */
0x000, 0x3B1, 0x3B2, 0x3BE, 0x3B4, 0x3B5, 0x3C6, 0x3B3, /* 0x40..0x47 @..G */
0x3B7, 0x3B9, 0x3C2, 0x3BA, 0x3BB, 0x3BC, 0x3BD, 0x3BF, /* 0x48..0x4F H..O */
0x3C0, 0x3B8, 0x3C1, 0x3C3, 0x3C4, 0x3C5, 0x3DD, 0x3C9, /* 0x50..0x57 P..W */
0x3C7, 0x3C8, 0x3B6, 0x000, 0x000, 0x000, 0x000, 0x000, /* 0x58..0x5F X.._ */
0x000, 0x3B1, 0x3B2, 0x3BE, 0x3B4, 0x3B5, 0x3C6, 0x3B3, /* 0x60..0x67 `..g */
0x3B7, 0x3B9, 0x3C2, 0x3BA, 0x3BB, 0x3BC, 0x3BD, 0x3BF, /* 0x68..0x6F h..o */
0x3C0, 0x3B8, 0x3C1, 0x3C3, 0x3C4, 0x3C5, 0x3DD, 0x3C9, /* 0x70..0x77 p..w */
0x3C7, 0x3C8, 0x3B6, 0x000, 0x000, 0x000, 0x000, 0x000, /* 0x78..0x7F x.. */
/* 0/8 1/9 2/A 3/B 4/C 5/D 6/E 7/F */
};
/*
Table to convert an ASCII letter into a Coptic Unicode letter.
This table encodes letters that were preceded by a '*'. If the Latin letter
was not preceded by a '*', add 1 to get the Unicode code point.
*/
uint32_t ascii2coptic[128] = {
/* 0/8 1/9 2/A 3/B 4/C 5/D 6/E 7/F */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x00..0x07 */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x08..0x0F */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x10..0x17 */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x18..0x1F */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x20..0x27 */
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x28..0x2F */
'0', '1', '2', '3', '4', '5', '6', '7', /* 0x30..0x37 0..7 */
'8', '9', 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x38..0x3F 8..? */
0x0000, 0x2C80, 0x2C82, 0x2C9C, 0x2C86, 0x2C88, 0x2CAA, 0x2C84, /* 0x40..0x47 @..G */
0x2C8E, 0x2C92, 0x0, 0x2C94, 0x2C96, 0x2C98, 0x2C9A, 0x2C9E, /* 0x48..0x4F H..O */
0x2CA0, 0x2C90, 0x2CA2, 0x2CA4, 0x2CA6, 0x2CA8, 0x2C8A, 0x2CB0, /* 0x50..0x57 P..W */
0x2CAC, 0x0, 0x2C8C, 0x0, 0x0, 0x0, 0x0, 0x0, /* 0x58..0x5F X.._ */
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x03E4, 0x03EC, /* 0x60..0x67 `..g */
0x03E8, 0x0, 0x03EA, 0x03E6, 0x0, 0x0, 0x0, 0x0, /* 0x68..0x6F h..o */
0x0, 0x0, 0x0, 0x03E2, 0x03EE, 0x0, 0x0, 0x0, /* 0x70..0x77 p..w */
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, /* 0x78..0x7F x.. */
/* 0/8 1/9 2/A 3/B 4/C 5/D 6/E 7/F */
};
/*
Table to convert an ASCII letter into a Hebrew Unicode letter.
*/
uint32_t ascii2hebrew[128] = {
/* 0/8 1/9 2/A 3/B 4/C 5/D 6/E 7/F */
0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 0x00..0x07 */
0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 0x08..0x0F */
0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 0x10..0x17 */
0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 0x18..0x1F */
0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 0x20..0x27 */
0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 0x28..0x2F */
'0', '1', '2', '3', '4', '5', '6', '7', /* 0x30..0x37 0..7 */
'8', '9', 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 0x38..0x3F 8..? */
0x0, 0x5D0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, /* 0x40..0x47 @..G */
0x5D7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, /* 0x48..0x4F H..O */
0x0, 0x5D8, 0x0, 0x5E1, 0x5E6, 0x0, 0x0, 0x0, /* 0x50..0x57 P..W */
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, /* 0x58..0x5F X.._ */
0x0, 0x5E2, 0x5D1, 0x0, 0x5D3, 0x0, 0x0, 0x5D2, /* 0x60..0x67 `..g */
0x5D4, 0x0, 0x0, 0x5DB, 0x5DC, 0x5DE, 0x5E0, 0x0, /* 0x68..0x6F h..o */
0x5E4, 0x5E7, 0x5E8, 0x5E9, 0x5EA, 0x0, 0x5D5, 0x0, /* 0x70..0x77 p..w */
0x0, 0x5D9, 0x5D6, 0x0, 0x0, 0x0, 0x0, 0x0, /* 0x78..0x7F x.. */
/* 0/8 1/9 2/A 3/B 4/C 5/D 6/E 7/F */
};
void print_ascii (char *); /* print a string that's inside '{'...'}' pair */
void print_unicode (char *); /* print a Unicode code point in the form "\uXXXX" */
void print_quote (char *); /* print open or close quoation mark styles */
void print_utf8 (uint32_t); /* Print a Unicode code point in UTF-8 */
void print_capital (char *); /* Print Greek, Hebrew, or Coptic capital letter */
void print_small (char *); /* Print Greek, Hebrew, or Coptic small letter */
void print_pattern (char *, uint32_t); /* Print yytext in Latin mode or print a Unicode code point in UTF-8 */
/*
Print a letter in one of four language modes:
Latin, Greek, Coptic, and Hebrew, respectively.
Currently this is only needed to handle 'S' and 's'
because of Greek context-dependent middle and final sigma.
*/
void print_letter (uint32_t, uint32_t, uint32_t, uint32_t);
//LATIN_GREEK &[^\$&0-9]*\$([1-4]?[0-9])?
//{LATIN_GREEK} { /* Latin short text on one line enclosed within '&' and '$' */
// int i, j; /* loop variables */
// lang_type = LANG_LATIN;
// singleq_style = 3; /* single quote style */
// doubleq_style = 0; /* double quote style */
// /* Find start of enclosed string after '&' possible with trailing digits */
// for (i = 1; isdigit (yytext [i]); i++);
// /* Find '$' that returns to Greek mode, possibly with trailing digits */
// for (j = strlen (yytext) - 1; yytext[j] != '$'; j--);
// yytext[j] = '\0'; /* Stop output just before the mark to return to Greek mode */
// fprintf (yyout, "%s", &yytext[i]);
// lang_type = LANG_GREEK;
// singleq_style = 7; /* single quote style */
// doubleq_style = 6; /* double quote style */
// }
%}
%option noyywrap
ESCAPE \{[^\{\}]*\}
QUOTE (\"|`|')
DECIMAL_DIGIT [0-9]
SELECT_LATIN &([1-4]?[0-9])?
SELECT_GREEK (\$70|\$([1-4]?[0-9])?)
SELECT_COPTIC (\$50|&100)
SELECT_DEMOTIC \$51
SELECT_HEBREW (\$53|&300)
GREEK_ACCENT [\(\)\\\/=\+\?\|]
%%
{ESCAPE} { /*
Print escape-delimited string of ASCII and/or
special Unicode symbols of the form "\ux...x"
*/
yytext [strlen (yytext) - 1] = '\0';
/* fprintf (yyout, "%s", &yytext[1]); */
print_ascii (&yytext[1]);
}
{QUOTE} print_quote (yytext); /* print open or close quoation mark according to language mode */
{DECIMAL_DIGIT} fputc (yytext[0], yyout); /* 0 through 9 are the same in all scripts */
{SELECT_LATIN} { /* Latin text extends to end of line */
int i; /* loop variable */
lang_type = LANG_LATIN; /* continues after this character */
singleq_style = 3; /* single quote style */
doubleq_style = 0; /* double quote style */
/* Find start of enclosed string after '&' possible with trailing digits */
for (i = 1; isdigit (yytext [i]); i++);
fprintf (yyout, "%s", &yytext[i]);
}
{SELECT_GREEK} {
lang_type = LANG_GREEK;
singleq_style = 7; /* single quote style */
doubleq_style = 6; /* double quote style */
}
{SELECT_DEMOTIC} {
lang_type = LANG_GREEK;
singleq_style = 7; /* single quote style */
doubleq_style = 6; /* double quote style */
}
{SELECT_COPTIC} {
lang_type = LANG_COPTIC;
singleq_style = 7; /* single quote style */
doubleq_style = 6; /* double quote style */
}
{SELECT_HEBREW} {
lang_type = LANG_HEBREW;
singleq_style = 4; /* single quote style */
doubleq_style = 1; /* double quote style */
}
\! print_utf8 ('!'); /* EXCLAMATION MARK (not in Beta Code spec, but preserve it) */
\. print_utf8 ('.'); /* FULL STOP */
, print_utf8 (','); /* COMMA */
: print_letter (':', 0x00B7, 0x00B7, ':'); /* Latin, Greek, Coptic, Hebrew; U+00B7 is MIDDLE DOT */
; print_utf8 (';'); /* Unicode prefers this over U+037E, GREEK QUESTION MARK */
\- print_letter ('-', 0x2010, 0x2010, '-'); /* Latin, Greek, Coptic, Hebrew */
_ print_letter ('_', 0x2014, 0x2014,0x2014); /* EM DASH */
# print_letter ('#', 0x0374, 0x0374, '#'); /* GREEK NUMERAL SIGN; can also be U+02B9 MODIFIER LETTER PRIME */
\) print_letter (')', 0x0313, 0x0313, ')'); /* COMBINING COMMA ABOVE */
\( print_letter ('(', 0x0314, 0x0314, '('); /* COMBINING REVERSED COMMA ABOVE */
\/ print_letter ('/', 0x0301, 0x0301, '/'); /* COMBINING ACUTE ACCENT */
= print_letter ('=', 0x0342, 0x0301, '='); /* COMBINING GREEK PERISPOMENI */
\\ print_letter ('\\',0x0300, 0x0300, '\\'); /* COMBINING GRAVE ACCENT */
\+ print_letter ('+', 0x0308, 0x0308, '+'); /* COMBINING DIAERESIS */
\| print_letter ('|', 0x0345, 0x0345, '|'); /* COMBINING GREEK YPOGEGRAMMENI */
\? print_letter ('?', 0x0323, '?', '?'); /* COMBINING DOT BELOW */
\< print_letter ('<', 0x2039, 0x2039, '<'); /* SINGLE LEFT-POINTING ANGLE QUOTATION MARK */
\> print_letter ('>', 0x203A, 0x203A, '>'); /* SINGLE RIGHT-POINTING ANGLE QUOTATION MARK */
\*[A-Za-za] print_capital (yytext); /* Print Greek, Latin, or Coptic capital letter */
[kmnpT][12] print_small (yytext); /* Special cases for Hebrew letters */
[A-Za-za] print_small (yytext); /* Print Greek, Latin, Coptic, or Hebrew small letter */
\*\/[Aa] print_pattern (yytext, 0x0386); /* GREEK CAPITAL LETTER ALPHA WITH TONOS */
\*\/[Ee] print_pattern (yytext, 0x0388); /* GREEK CAPITAL LETTER EPSILON WITH TONOS */
\*\/[Hh] print_pattern (yytext, 0x0389); /* GREEK CAPITAL LETTER ETA WITH TONOS */
\*\/[Ii] print_pattern (yytext, 0x038A); /* GREEK CAPITAL LETTER IOTA WITH TONOS */
\*\/[Oo] print_pattern (yytext, 0x038C); /* GREEK CAPITAL LETTER OMICRON WITH TONOS */
\*\/[Uu] print_pattern (yytext, 0x038E); /* GREEK CAPITAL LETTER UPSILON WITH TONOS */
\*\/[Ww] print_pattern (yytext, 0x038F); /* GREEK CAPITAL LETTER OMEGA WITH TONOS */
[Ii](\+\/|\/\+) print_pattern (yytext, 0x0390); /* GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */
\*\+[I] print_pattern (yytext, 0x03AA); /* GREEK CAPITAL LETTER IOTA WITH DIALYTIKA */
\*\+[i] print_pattern (yytext, 0x03AA); /* GREEK CAPITAL LETTER IOTA WITH DIALYTIKA */
\*\+[Uu] print_pattern (yytext, 0x03AB); /* GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA */
[Aa]\/ print_pattern (yytext, 0x03AC); /* GREEK SMALL LETTER ALPHA WITH TONOS */
[Ee]\/ print_pattern (yytext, 0x03AD); /* GREEK SMALL LETTER EPSILON WITH TONOS */
[Hh]\/ print_pattern (yytext, 0x03AE); /* GREEK SMALL LETTER ETA WITH TONOS */
[Ii]\/ print_pattern (yytext, 0x03AF); /* GREEK SMALL LETTER IOTA WITH TONOS */
[Uu](\+\/|\/\+) print_pattern (yytext, 0x03B0); /* GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS */
([Ss]2|[Jj]) print_pattern (yytext, 0x03C2); /* GREEK SMALL LETTER FINAL SIGMA */
S/[^[:alnum:]] { /* "s" at end of word --> final sigma if Greek, otherwise just 's' */
print_letter ('s',0x03C2,0x2CA5,0x05E1); /* Latin, Greek, Coptic, Hebrew */
}
s/[^[:alnum:]] { /* "s" at end of word --> final sigma if Greek, otherwise just 's' */
print_letter ('s',0x03C2,0x03E3,0x05E9); /* Latin, Greek, Coptic, Hebrew */
}
[Ss]1? print_pattern (yytext, 0x03C3); /* GREEK SMALL LETTER SIGMA */
[I]\+ {
if (lang_type == LANG_GREEK)
print_pattern (yytext, 0x03CA); /* GREEK SMALL LETTER IOTA WITH DIALYTIKA */
else if (lang_type == LANG_LATIN)
fprintf (yyout, "I+");
else
fprintf (yyout, "{I+}");
}
[i]\+ {
if (lang_type == LANG_GREEK)
print_pattern (yytext, 0x03CA); /* GREEK SMALL LETTER IOTA WITH DIALYTIKA */
else if (lang_type == LANG_LATIN)
fprintf (yyout, "i+");
else
fprintf (yyout, "{i+}");
}
[U]\+ {
if (lang_type == LANG_GREEK)
print_pattern (yytext, 0x03CB); /* GREEK SMALL LETTER UPSILON WITH DIALYTIKA */
else if (lang_type == LANG_LATIN) /* Most likely a "U+xxxx" Unicode code point */
fprintf (yyout, "U+");
else
fprintf (yyout, "{U+}");
}
[u]\+ {
if (lang_type == LANG_GREEK)
print_pattern (yytext, 0x03CB); /* GREEK SMALL LETTER UPSILON WITH DIALYTIKA */
else if (lang_type == LANG_LATIN)
fprintf (yyout, "u+");
else
fprintf (yyout, "{u+}");
}
[Oo]\/ print_pattern (yytext, 0x03CC); /* GREEK SMALL LETTER OMICRON WITH TONOS */
[Uu]\/ print_pattern (yytext, 0x03CD); /* GREEK SMALL LETTER UPSILON WITH TONOS */
[Ww]\/ print_pattern (yytext, 0x03CE); /* GREEK SMALL LETTER OMEGA WITH TONOS */
[Ss]3 print_pattern (yytext, 0x03F2); /* GREEK LUNATE SIGMA SYMBOL */
\*[Ss]3 print_pattern (yytext, 0x03F9); /* GREEK CAPITAL LUNATE SIGMA SYMBOL */
[A-Za-z]\\ print_small (yytext);/* Disambiguation between Greek and Coptic */
\*\\[A-Za-z] print_capital (yytext);/* Disambiguation between Greek and Coptic */
[Aa]\) print_pattern (yytext, 0x1F00); /* GREEK SMALL LETTER ALPHA WITH PSILI */
[Aa]\( print_pattern (yytext, 0x1F01); /* GREEK SMALL LETTER ALPHA WITH DASIA */
[Aa]\)\\ print_pattern (yytext, 0x1F02); /* GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA */
[Aa]\(\\ print_pattern (yytext, 0x1F03); /* GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA */
[Aa]\)\/ print_pattern (yytext, 0x1F04); /* GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA */
[Aa]\(\/ print_pattern (yytext, 0x1F05); /* GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA */
[Aa]\)= print_pattern (yytext, 0x1F06); /* GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI */
[Aa]\(= print_pattern (yytext, 0x1F07); /* GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI */
\*\)[Aa] print_pattern (yytext, 0x1F08); /* GREEK CAPITAL LETTER ALPHA WITH PSILI */
\*\([Aa] print_pattern (yytext, 0x1F09); /* GREEK CAPITAL LETTER ALPHA WITH DASIA */
\*\)\\[Aa] print_pattern (yytext, 0x1F0A); /* GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA */
\*\(\\[Aa] print_pattern (yytext, 0x1F0B); /* GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA */
\*\)\/[Aa] print_pattern (yytext, 0x1F0C); /* GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA */
\*\(\/[Aa] print_pattern (yytext, 0x1F0D); /* GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA */
\*\)=[Aa] print_pattern (yytext, 0x1F0E); /* GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI */
\*\(=[Aa] print_pattern (yytext, 0x1F0F); /* GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI */
[Ee]\) print_pattern (yytext, 0x1F10); /* GREEK SMALL LETTER EPSILON WITH PSILI */
[Ee]\( print_pattern (yytext, 0x1F11); /* GREEK SMALL LETTER EPSILON WITH DASIA */
[Ee]\)\\ print_pattern (yytext, 0x1F12); /* GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA */
[Ee]\(\\ print_pattern (yytext, 0x1F13); /* GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA */
[Ee]\)\/ print_pattern (yytext, 0x1F14); /* GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA */
[Ee]\(\/ print_pattern (yytext, 0x1F15); /* GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA */
\*\)[Ee] print_pattern (yytext, 0x1F18); /* GREEK CAPITAL LETTER EPSILON WITH PSILI */
\*\([Ee] print_pattern (yytext, 0x1F19); /* GREEK CAPITAL LETTER EPSILON WITH DASIA */
\*\)\\[Ee] print_pattern (yytext, 0x1F1A); /* GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA */
\*\(\\[Ee] print_pattern (yytext, 0x1F1B); /* GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA */
\*\)\/[Ee] print_pattern (yytext, 0x1F1C); /* GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA */
\*\(\/[Ee] print_pattern (yytext, 0x1F1D); /* GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA */
[Hh]\) print_pattern (yytext, 0x1F20); /* GREEK SMALL LETTER ETA WITH PSILI */
[Hh]\( print_pattern (yytext, 0x1F21); /* GREEK SMALL LETTER ETA WITH DASIA */
[Hh]\)\\ print_pattern (yytext, 0x1F22); /* GREEK SMALL LETTER ETA WITH PSILI AND VARIA */
[Hh]\(\\ print_pattern (yytext, 0x1F23); /* GREEK SMALL LETTER ETA WITH DASIA AND VARIA */
[Hh]\)\/ print_pattern (yytext, 0x1F24); /* GREEK SMALL LETTER ETA WITH PSILI AND OXIA */
[Hh]\(\/ print_pattern (yytext, 0x1F25); /* GREEK SMALL LETTER ETA WITH DASIA AND OXIA */
[Hh]\)= print_pattern (yytext, 0x1F26); /* GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI */
[Hh]\(= print_pattern (yytext, 0x1F27); /* GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI */
\*\)[Hh] print_pattern (yytext, 0x1F28); /* GREEK CAPITAL LETTER ETA WITH PSILI */
\*\([Hh] print_pattern (yytext, 0x1F29); /* GREEK CAPITAL LETTER ETA WITH DASIA */
\*\)\\[Hh] print_pattern (yytext, 0x1F2A); /* GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA */
\*\(\\[Hh] print_pattern (yytext, 0x1F2B); /* GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA */
\*\)\/[Hh] print_pattern (yytext, 0x1F2C); /* GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA */
\*\(\/[Hh] print_pattern (yytext, 0x1F2D); /* GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA */
\*\)=[Hh] print_pattern (yytext, 0x1F2E); /* GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI */
\*\(=[Hh] print_pattern (yytext, 0x1F2F); /* GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI */
[Ii]\) print_pattern (yytext, 0x1F30); /* GREEK SMALL LETTER IOTA WITH PSILI */
[Ii]\( print_pattern (yytext, 0x1F31); /* GREEK SMALL LETTER IOTA WITH DASIA */
[Ii]\)\\ print_pattern (yytext, 0x1F32); /* GREEK SMALL LETTER IOTA WITH PSILI AND VARIA */
[Ii]\(\\ print_pattern (yytext, 0x1F33); /* GREEK SMALL LETTER IOTA WITH DASIA AND VARIA */
[Ii]\)\/ print_pattern (yytext, 0x1F34); /* GREEK SMALL LETTER IOTA WITH PSILI AND OXIA */
[Ii]\(\/ print_pattern (yytext, 0x1F35); /* GREEK SMALL LETTER IOTA WITH DASIA AND OXIA */
[Ii]\)= print_pattern (yytext, 0x1F36); /* GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI */
[Ii]\(= print_pattern (yytext, 0x1F37); /* GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI */
\*\)[Ii] print_pattern (yytext, 0x1F38); /* GREEK CAPITAL LETTER IOTA WITH PSILI */
\*\([Ii] print_pattern (yytext, 0x1F39); /* GREEK CAPITAL LETTER IOTA WITH DASIA */
\*\)\\[Ii] print_pattern (yytext, 0x1F3A); /* GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA */
\*\(\\[Ii] print_pattern (yytext, 0x1F3B); /* GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA */
\*\)\/[Ii] print_pattern (yytext, 0x1F3C); /* GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA */
\*\(\/[Ii] print_pattern (yytext, 0x1F3D); /* GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA */
\*\)=[Ii] print_pattern (yytext, 0x1F3E); /* GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI */
\*\(=[Ii] print_pattern (yytext, 0x1F3F); /* GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI */
[Oo]\) print_pattern (yytext, 0x1F40); /* GREEK SMALL LETTER OMICRON WITH PSILI */
[Oo]\( print_pattern (yytext, 0x1F41); /* GREEK SMALL LETTER OMICRON WITH DASIA */
[Oo]\)\\ print_pattern (yytext, 0x1F42); /* GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA */
[Oo]\(\\ print_pattern (yytext, 0x1F43); /* GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA */
[Oo]\)\/ print_pattern (yytext, 0x1F44); /* GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA */
[Oo]\(\/ print_pattern (yytext, 0x1F45); /* GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA */
\*\)[Oo] print_pattern (yytext, 0x1F48); /* GREEK CAPITAL LETTER OMICRON WITH PSILI */
\*\([Oo] print_pattern (yytext, 0x1F49); /* GREEK CAPITAL LETTER OMICRON WITH DASIA */
\*\)\\[Oo] print_pattern (yytext, 0x1F4A); /* GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA */
\*\(\\[Oo] print_pattern (yytext, 0x1F4B); /* GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA */
\*\)\/[Oo] print_pattern (yytext, 0x1F4C); /* GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA */
\*\(\/[Oo] print_pattern (yytext, 0x1F4D); /* GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA */
[Uu]\) print_pattern (yytext, 0x1F50); /* GREEK SMALL LETTER UPSILON WITH PSILI */
[Uu]\( print_pattern (yytext, 0x1F51); /* GREEK SMALL LETTER UPSILON WITH DASIA */
[Uu]\)\\ print_pattern (yytext, 0x1F52); /* GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA */
[Uu]\(\\ print_pattern (yytext, 0x1F53); /* GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA */
[Uu]\)\/ print_pattern (yytext, 0x1F54); /* GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA */
[Uu]\(\/ print_pattern (yytext, 0x1F55); /* GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA */
[Uu]\)= print_pattern (yytext, 0x1F56); /* GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI */
[Uu]\(= print_pattern (yytext, 0x1F57); /* GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI */
\*\([Uu] print_pattern (yytext, 0x1F59); /* GREEK CAPITAL LETTER UPSILON WITH DASIA */
\*\(\\[Uu] print_pattern (yytext, 0x1F5B); /* GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA */
\*\(\/[Uu] print_pattern (yytext, 0x1F5D); /* GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA */
\*\(=[Uu] print_pattern (yytext, 0x1F5F); /* GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI */
[Ww]\) print_pattern (yytext, 0x1F60); /* GREEK SMALL LETTER OMEGA WITH PSILI */
[Ww]\( print_pattern (yytext, 0x1F61); /* GREEK SMALL LETTER OMEGA WITH DASIA */
[Ww]\)\\ print_pattern (yytext, 0x1F62); /* GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA */
[Ww]\(\\ print_pattern (yytext, 0x1F63); /* GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA */
[Ww]\)\/ print_pattern (yytext, 0x1F64); /* GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA */
[Ww]\(\/ print_pattern (yytext, 0x1F65); /* GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA */
[Ww]\)= print_pattern (yytext, 0x1F66); /* GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI */
[Ww]\(= print_pattern (yytext, 0x1F67); /* GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI */
\*\)[Ww] print_pattern (yytext, 0x1F68); /* GREEK CAPITAL LETTER OMEGA WITH PSILI */
\*\([Ww] print_pattern (yytext, 0x1F69); /* GREEK CAPITAL LETTER OMEGA WITH DASIA */
\*\)\\[Ww] print_pattern (yytext, 0x1F6A); /* GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA */
\*\(\\[Ww] print_pattern (yytext, 0x1F6B); /* GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA */
\*\)\/[Ww] print_pattern (yytext, 0x1F6C); /* GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA */
\*\(\/[Ww] print_pattern (yytext, 0x1F6D); /* GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA */
\*\)=[Ww] print_pattern (yytext, 0x1F6E); /* GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI */
\*\(=[Ww] print_pattern (yytext, 0x1F6F); /* GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI */
[Aa]\)\| print_pattern (yytext, 0x1F80); /* GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI */
[Aa]\(\| print_pattern (yytext, 0x1F81); /* GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI */
[Aa]\)\\\| print_pattern (yytext, 0x1F82); /* GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI */
[Aa]\(\\\| print_pattern (yytext, 0x1F83); /* GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI */
[Aa]\)\/\| print_pattern (yytext, 0x1F84); /* GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI */
[Aa]\(\/\| print_pattern (yytext, 0x1F85); /* GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI */
[Aa]\)=\| print_pattern (yytext, 0x1F86); /* GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI */
[Aa]\(=\| print_pattern (yytext, 0x1F87); /* GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI */
\*\)[Aa]\| print_pattern (yytext, 0x1F88); /* GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI */
\*\([Aa]\| print_pattern (yytext, 0x1F89); /* GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI */
\*\)\\[Aa]\| print_pattern (yytext, 0x1F8A); /* GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI */
\*\(\\[Aa]\| print_pattern (yytext, 0x1F8B); /* GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI */
\*\)\/[Aa]\| print_pattern (yytext, 0x1F8C); /* GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI */
\*\(\/[Aa]\| print_pattern (yytext, 0x1F8D); /* GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI */
\*\)=[Aa]\| print_pattern (yytext, 0x1F8E); /* GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI */
\*\(=[Aa]\| print_pattern (yytext, 0x1F8F); /* GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI */
[Hh]\)\| print_pattern (yytext, 0x1F90); /* GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI */
[Hh]\(\| print_pattern (yytext, 0x1F91); /* GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI */
[Hh]\)\\\| print_pattern (yytext, 0x1F92); /* GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI */
[Hh]\(\\\| print_pattern (yytext, 0x1F93); /* GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI */
[Hh]\)\/\| print_pattern (yytext, 0x1F94); /* GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI */
[Hh]\(\/\| print_pattern (yytext, 0x1F95); /* GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI */
[Hh]\)=\| print_pattern (yytext, 0x1F96); /* GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI */
[Hh]\(=\| print_pattern (yytext, 0x1F97); /* GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI */
\*\)[Hh]\| print_pattern (yytext, 0x1F98); /* GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI */
\*\([Hh]\| print_pattern (yytext, 0x1F99); /* GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI */
\*\)\\[Hh]\| print_pattern (yytext, 0x1F9A); /* GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI */
\*\(\\[Hh]\| print_pattern (yytext, 0x1F9B); /* GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI */
\*\)\/[Hh]\| print_pattern (yytext, 0x1F9C); /* GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI */
\*\(\/[Hh]\| print_pattern (yytext, 0x1F9D); /* GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI */
\*\)=[Hh]\| print_pattern (yytext, 0x1F9E); /* GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI */
\*\(=[Hh]\| print_pattern (yytext, 0x1F9F); /* GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI */
[Ww]\)\| print_pattern (yytext, 0x1FA0); /* GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI */
[Ww]\(\| print_pattern (yytext, 0x1FA1); /* GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI */
[Ww]\)\\\| print_pattern (yytext, 0x1FA2); /* GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI */
[Ww]\(\\\| print_pattern (yytext, 0x1FA3); /* GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI */
[Ww]\)\/\| print_pattern (yytext, 0x1FA4); /* GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI */
[Ww]\(\/\| print_pattern (yytext, 0x1FA5); /* GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI */
[Ww]\)=\| print_pattern (yytext, 0x1FA6); /* GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI */
[Ww]\(=\| print_pattern (yytext, 0x1FA7); /* GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI */
\*\)[Ww]\| print_pattern (yytext, 0x1FA8); /* GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI */
\*\([Ww]\| print_pattern (yytext, 0x1FA9); /* GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI */
\*\)\\[Ww]\| print_pattern (yytext, 0x1FAA); /* GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI */
\*\(\\[Ww]\| print_pattern (yytext, 0x1FAB); /* GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI */
\*\)\/[Ww]\| print_pattern (yytext, 0x1FAC); /* GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI */
\*\(\/[Ww]\| print_pattern (yytext, 0x1FAD); /* GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI */
\*\)=[Ww]\| print_pattern (yytext, 0x1FAE); /* GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI */
\*\(=[Ww]\| print_pattern (yytext, 0x1FAF); /* GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI */
[Aa]' print_pattern (yytext, 0x1FB0); /* GREEK SMALL LETTER ALPHA WITH VRACHY */
[Aa]& print_pattern (yytext, 0x1FB1); /* GREEK SMALL LETTER ALPHA WITH MACRON */
[Aa]\\\| print_pattern (yytext, 0x1FB2); /* GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI */
[Aa]\| print_pattern (yytext, 0x1FB3); /* GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI */
[Aa]\/\| print_pattern (yytext, 0x1FB4); /* GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI */
[Aa]= print_pattern (yytext, 0x1FB6); /* GREEK SMALL LETTER ALPHA WITH PERISPOMENI */
[Aa]=\| print_pattern (yytext, 0x1FB7); /* GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI */
\*'[Aa] print_pattern (yytext, 0x1FB8); /* GREEK CAPITAL LETTER ALPHA WITH VRACHY */
\*&[Aa] print_pattern (yytext, 0x1FB9); /* GREEK CAPITAL LETTER ALPHA WITH MACRON */
\*[Aa]\| print_pattern (yytext, 0x1FBC); /* GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI */
(\+=|=\+) print_pattern (yytext, 0x1FC1); /* GREEK DIALYTIKA AND PERISPOMENI */
[Hh]\\\| print_pattern (yytext, 0x1FC2); /* GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI */
[Hh]\| print_pattern (yytext, 0x1FC3); /* GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI */
[Hh]\/\| print_pattern (yytext, 0x1FC4); /* GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI */
[Hh]= print_pattern (yytext, 0x1FC6); /* GREEK SMALL LETTER ETA WITH PERISPOMENI */
[Hh]=\| print_pattern (yytext, 0x1FC7); /* GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI */
\*[Hh]\| print_pattern (yytext, 0x1FCC); /* GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI */
\)\\ print_pattern (yytext, 0x1FCD); /* GREEK PSILI AND VARIA */
\)\/ print_pattern (yytext, 0x1FCE); /* GREEK PSILI AND OXIA */
\)= print_pattern (yytext, 0x1FCF); /* GREEK PSILI AND PERISPOMENI */
[Ii]' print_pattern (yytext, 0x1FD0); /* GREEK SMALL LETTER IOTA WITH VRACHY */
[Ii]& print_pattern (yytext, 0x1FD1); /* GREEK SMALL LETTER IOTA WITH MACRON */
[Ii](\\\+|\+\\) print_pattern (yytext, 0x1FD2); /* GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA */
[Ii]= print_pattern (yytext, 0x1FD6); /* GREEK SMALL LETTER IOTA WITH PERISPOMENI */
[Ii](=\+|\+=) print_pattern (yytext, 0x1FD7); /* GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI */
\*'[Ii] print_pattern (yytext, 0x1FD8); /* GREEK CAPITAL LETTER IOTA WITH VRACHY */
\*&[Ii] print_pattern (yytext, 0x1FD9); /* GREEK CAPITAL LETTER IOTA WITH MACRON */
\(\\ print_pattern (yytext, 0x1FDD); /* GREEK DASIA AND VARIA */
\(\/ print_pattern (yytext, 0x1FDE); /* GREEK DASIA AND OXIA */
\(= print_pattern (yytext, 0x1FDF); /* GREEK DASIA AND PERISPOMENI */
[Uu]' print_pattern (yytext, 0x1FE0); /* GREEK SMALL LETTER UPSILON WITH VRACHY */
[Uu]& print_pattern (yytext, 0x1FE1); /* GREEK SMALL LETTER UPSILON WITH MACRON */
[Uu](\\\+|\+\\) print_pattern (yytext, 0x1FE2); /* GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA */
[Rr]\) print_pattern (yytext, 0x1FE4); /* GREEK SMALL LETTER RHO WITH PSILI */
[Rr]\( print_pattern (yytext, 0x1FE5); /* GREEK SMALL LETTER RHO WITH DASIA */
[Uu]= print_pattern (yytext, 0x1FE6); /* GREEK SMALL LETTER UPSILON WITH PERISPOMENI */
[Uu](=\+|\+=) print_pattern (yytext, 0x1FE7); /* GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI */
\*'[Uu] print_pattern (yytext, 0x1FE8); /* GREEK CAPITAL LETTER UPSILON WITH VRACHY */
\*&[Uu] print_pattern (yytext, 0x1FE9); /* GREEK CAPITAL LETTER UPSILON WITH MACRON */
\*\([Rr] print_pattern (yytext, 0x1FEC); /* GREEK CAPITAL LETTER RHO WITH DASIA */
(\\\+|\+\\) print_pattern (yytext, 0x1FED); /* GREEK DIALYTIKA AND VARIA */
(\/\+|\+\/) print_pattern (yytext, 0x1FEE); /* GREEK DIALYTIKA AND OXIA */
[Ww]\\\| print_pattern (yytext, 0x1FF2); /* GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI */
[Ww]\| print_pattern (yytext, 0x1FF3); /* GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI */
[Ww]\/\| print_pattern (yytext, 0x1FF4); /* GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI */
[Ww]= print_pattern (yytext, 0x1FF6); /* GREEK SMALL LETTER OMEGA WITH PERISPOMENI */
[Ww]=\| print_pattern (yytext, 0x1FF7); /* GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI */
\*[Ww]\| print_pattern (yytext, 0x1FFC); /* GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI */
%%
int
main (int argc, char *argv[])
{
int i; /* loop variable */
int exit_status; /* program exit status */
void print_help (char *);
exit_status = EXIT_SUCCESS;
yyin = stdin;
yyout = stdout;
for (i = 1; i < argc; i++) {
/*
Parse options. If an invalid command line argument
was given, print a help menu and exit with error status.
*/
if (argv[i][0] == '-') {
switch (argv[i][1]) {
/* Begin output with Byte Order Mark, U+FFFE */
case 'b': bom_out = 1;
break;
/*
input file format; file name follows
in next parameter, so increment i
*/
case 'i': yyin = fopen (argv[++i], "r");
break;
/*
output file format; file name follows
in next parameter, so increment i
*/
case 'o': yyout = fopen (argv[++i], "w");
break;
/* quote mark style for open & close quotes */
default: print_help (argv[0]);
exit_status = EXIT_FAILURE;
break;
}
}
else {
print_help (argv[0]);
exit_status = EXIT_FAILURE;
}
}
if (exit_status == EXIT_SUCCESS) {
if (bom_out != 0) {
print_utf8 (0xFFFE); /* Unicode Byte Order Mark */
}
yylex ();
}
exit (exit_status);
}
/*
Print a help message. The parameter is the program name,
taken from argv[0].
*/
void
print_help (char * progname)
{
fprintf (stderr, "\nUnknown command line parameter.\n\n");
fprintf (stderr, "Syntax: %s [-b] [-i input_file] [-o output_file]\n\n",
progname);
fprintf (stderr, " -b: begin output with UTF-8 Byte Order Mark\n\n");
fprintf (stderr, " -i: specify input file name\n\n");
fprintf (stderr, " -o: specify output file name\n\n");
return;
}
/*
Print a pattern that was read as ASCII if in Latin mode.
Otherwise, print the UTF-8 code point.
*/
void
print_pattern (char *intext, uint32_t codept)
{
void print_ascii (char *);
void print_utf8 (uint32_t);
if (lang_type == LANG_LATIN)
print_ascii (intext);
else
print_utf8 (codept);
return;
}
/*
Print an ASCII sequence that appeared inside braces, '{'...'}'.
*/
void
print_ascii (char *intext)
{
int i, j, k; /* loop variables */
char unicode_string[7]; /* up to six hexadecimal digits, null-terminated */
for (i = 0; intext[i] != '\0'; i++) {
/*
Scan for a backslash, looking for an escape sequence.
At present, the only recognized escape sequence is "\u"
to represent a Unicode hexadecimal code point of the
form "\uX...X", where "X...X" is a string of one to six
hexadecimal digits that specify a valid Unicode code point.
*/
for (j = i;
intext[j] != '\0' && intext[j] != '\\';
j++);
if (intext [j] == '\0') { /* this is probably the most frequent case */
fprintf (yyout, "%s", &intext [i]);
i = j-1; /* so the outer i loop will terminate */
}
/*
Found a backslash, so look for a following 'u'.
*/
else if (intext [j+1] == 'u') {
/* print the string up to but not including the backslash */
intext[j] = '\0';
fprintf (yyout, "%s", &intext[i]);
i = j + 2; /* i points to first digit in Unicode code point */
unicode_string [0] = '\0'; /* start building the Unicode code point string */
/*
scan to end of hexadecimal digits, up to six digits
*/
for (k = 0;
k < 6 && /* allow up to six hexadecimal digits */
(isdigit (intext [i]) ||
(intext [i] >= 'A' && intext [i] <= 'F') ||
(intext [i] >= 'a' && intext [i] <= 'f'));
k++) {
unicode_string [k] = intext[i];
unicode_string [k + 1] = '\0'; /* make sure string stays null-terminated */
i++;
}
print_unicode (unicode_string);
/* intext [i] points to the remainder of the input string */
i--; /* it will be incremented again next i loop iteration */
} /* intext [j+1] == 'u' */
/*
Otherwise, this was not a recognized '\' sequence,
so print string up to the backslash and keep going.
*/
else {
intext [j] = '\0'; /* replace '\\' with null to print up to this location */
fprintf (yyout, "%s\\", &intext [i]);
i = j; /* keep scanning intext[i] until the end is reached */
}
}
return;
}
/*
Print a Unicode code point in the form "X...X",
where "X...X" is a string of one to six hexadeimcal
digits that describe a valid Unicode code point.
*/
void
print_unicode (char *intext)
{
int i; /* loop variable */
uint32_t this_digit; /* current ASCII hexadecimal digit being converted */
uint32_t codept; /* the Unicode code point to output */
void print_utf8 (uint32_t);
codept = 0;
for (i = 0; intext[i] != '\0'; i++) {
codept <<= 4; /* shift one hexadecimal digit to the left */
this_digit = intext[i];
if (this_digit >= 'a')
this_digit = this_digit - 'a' + 10;
else if (this_digit >= 'A')
this_digit = this_digit - 'A' + 10;
else
this_digit -= '0';
codept |= this_digit;
} /* for i */
print_utf8 (codept);
return;
}
/*
Print an open or close quote dependent on language mode.
intext character string starting with '"'
or "`" or "'".
*/
void
print_quote (char *intext)
{
void print_utf8 (uint32_t);
/* Double qoute, the most common case */
if (intext[0] == '"') {
if (quote_state[doubleq_style] == 0) { /* print opening quote */
print_utf8 (quote_open[doubleq_style]);
quote_state[doubleq_style] = 1; /* now entering a quote style */
}
else { /* print closing quote */
print_utf8 (quote_close[doubleq_style]);
quote_state[doubleq_style] = 0; /* now leaving a quote style */
}
}
else { /* open ("`") or close ("'") single quote */
if (intext[0] == '`') { /* open quote */
if (singleq_style == 0) /* Latin */
print_utf8 (0x02BB);
else if (singleq_style == 4) /* Hebrew */
print_utf8 (0x201A);
else /* Greek, Coptic, or Demotic */
print_utf8 (0x02BB);
}
else { /* close quote, "'" */
if (singleq_style == 0) /* Latin */
print_utf8 (0x02BC);
else if (singleq_style == 4) /* Hebrew */
print_utf8 (0x2018);
else /* Greek, Coptic, or Demotic */
print_utf8 (0x02BC);
}
}
return;
}
/*
Print Greek, Latin, Coptic, or Hebrew capital letter.
This is passed yytext, so the first character in the
input string is a '*'; skip over it for indexing.
*/
void
print_capital (char *intext)
{
int test_char; /* character to test */
test_char = intext[1] & 0x7F;
switch (lang_type) {
case LANG_GREEK:
/* First check for Greek varia (grave accent) on vowel */
if (intext[2] == '\\') { /* intext[2] should either be '\\' or '\0' */
test_char = tolower (test_char);
switch (test_char) {
case 'a':
print_utf8 (0x1FBA); /* GREEK CAPITAL LETTER ALPHA WITH VARIA */
break;
case 'e':
print_utf8 (0x1FC8); /* GREEK CAPITAL LETTER EPSILON WITH VARIA */
break;
case 'h':
print_utf8 (0x1FCA); /* GREEK CAPITAL LETTER ETA WITH VARIA */
break;
case 'i':
print_utf8 (0x1FDA); /* GREEK CAPITAL LETTER IOTA WITH VARIA */
break;
case 'o':
print_utf8 (0x1FEA); /* GREEK CAPITAL LETTER UPSILON WITH VARIA */
break;
case 'u':
print_utf8 (0x1FF8); /* GREEK CAPITAL LETTER OMICRON WITH VARIA */
break;
case 'w':
print_utf8 (0x1FFA); /* GREEK CAPITAL LETTER OMEGA WITH VARIA */
break;
default:
fprintf (yyout, "%s", intext); /* unexpected combination */
break;
}
}
else {
/*
ascii2greek_cap contains Unicode encodings for
capital Greek letters.
*/
print_utf8 (ascii2greek_capital[test_char]);
}
break;
case LANG_COPTIC:
print_utf8 (ascii2coptic[test_char]);
/* Now check for Coptic jinkim (grave accent) on letter */
if (intext[2] == '\\')
print_utf8 (0x0300); /* COMBINING GRAVE ACCENT */
break;
case LANG_HEBREW: /* Hebrew Beta Code doesn't use '*'; we should not reach this point */
break;
case LANG_LATIN:
fprintf (yyout, "%s", intext);
break;
default:
break;
}
return;
}
/*
Print Greek, Latin, Coptic, or Hebrew small letter.
*/
void
print_small (char *intext)
{
int test_char; /* character to test */
int letter_form; /* =1 if letter is the final form, 2 if not; for Hebrew */
test_char = intext[0] & 0x7F;
switch (lang_type) {
case LANG_GREEK:
/* First check for varia (grave accent) on vowel */
if (intext[1] == '\\') { /* intext[1] should either be '\\' or '\0' */
test_char = tolower (test_char);
switch (test_char) {
case 'a':
print_utf8 (0x1F70); /* GREEK SMALL LETTER ALPHA WITH VARIA */
break;
case 'e':
print_utf8 (0x1F72); /* GREEK SMALL LETTER EPSILON WITH VARIA */
break;
case 'h':
print_utf8 (0x1F74); /* GREEK SMALL LETTER ETA WITH VARIA */
break;
case 'i':
print_utf8 (0x1F76); /* GREEK SMALL LETTER IOTA WITH VARIA */
break;
case 'o':
print_utf8 (0x1F78); /* GREEK SMALL LETTER OMICRON WITH VARIA */
break;
case 'u':
print_utf8 (0x1F7A); /* GREEK SMALL LETTER UPSILON WITH VARIA */
break;
case 'w':
print_utf8 (0x1F7C); /* GREEK SMALL LETTER OMEGA WITH VARIA */
break;
default:
fprintf (yyout, "%s", intext); /* unexpected combination */
break;
}
}
else {
print_utf8 (ascii2greek_small[test_char]);
}
break;
case LANG_COPTIC:
/*
Small Coptic letters are one code point above
the corresponding capital letter contained in
the ascii2coptic array, so add one for print_utf8.
*/
print_utf8 (ascii2coptic[test_char] + 1);
if (intext[1] == '\\')
print_utf8 (0x0300); /* COMBINING GRAVE ACCENT */
break;
case LANG_HEBREW:
test_char = intext[0];
/*
If this is a letter that has middle and final forms,
look at next character for the digit '1' (final form)
or '2' (middle form).
*/
if (test_char == 'k' || test_char == 'm' || test_char == 'n' ||
test_char == 'p' || test_char == 'T') {
letter_form = yytext[1];
if (letter_form == '2') {
switch (test_char) {
case 'k':
print_utf8 (0x5DA); /* HEBREW LETTER FINAL KAF */
break;
case 'm':
print_utf8 (0x5DD); /* HEBREW LETTER FINAL MEM */
break;
case 'n':
print_utf8 (0x5DF); /* HEBREW LETTER FINAL NUN */
break;
case 'p':
print_utf8 (0x5E3); /* HEBREW LETTER FINAL PE */
break;
case 'T':
print_utf8 (0x5E5); /* HEBREW LETTER FINAL TSADI */
break;
default:
fprintf (yyout, "%s", intext);
break;
}
}
else { /* a '2' was not the next character, so not final form */
/*
Print the middle form of the letter, even if
it was not given correctly with a '1' appended.
*/
switch (test_char) {
case 'k':
print_utf8 (0x5DB); /* HEBREW LETTER KAF */
break;
case 'm':
print_utf8 (0x5DE); /* HEBREW LETTER MEM */
break;
case 'n':
print_utf8 (0x5E0); /* HEBREW LETTER NUN */
break;
case 'p':
print_utf8 (0x5E4); /* HEBREW LETTER PE */
break;
case 'T':
print_utf8 (0x5E6); /* HEBREW LETTER TSADI */
break;
default:
fprintf (yyout, "%s", intext);
break;
}
}
}
else { /* it's a Hebrew letter that only has one form */
print_utf8 (ascii2hebrew[test_char]);
}
break;
case LANG_LATIN:
fprintf (yyout, "%s", intext);
break;
default:
break;
}
return;
}
/*
Print one of four letter choices depending on whether the
language mode is Latin, Greek, Coptic, or Hebrew, respectively.
*/
void
print_letter (uint32_t latin, uint32_t greek,
uint32_t coptic, uint32_t hebrew)
{
switch (lang_type) {
case LANG_LATIN:
print_utf8 (latin);
break;
case LANG_GREEK:
print_utf8 (greek);
break;
case LANG_COPTIC:
print_utf8 (coptic);
break;
case LANG_HEBREW:
print_utf8 (hebrew);
break;
default:
print_utf8 (greek);
break;
}
return;
}
/*
Convert a UTF-32 code point to a UTF-8 string.
*/
void
print_utf8 (uint32_t codept)
{
int i; /* loop variable */
int bin_length; /* number of binary digits, for forming UTF-8 */
int byte_length; /* numberof bytes of UTF-8 */
char utf8_bytes[4]; /* temporary array of UTF-8 output bytes */
int bin_digits (uint32_t);
byte_length = 0;
/*
If within valid 0x2039Unicode range of U+0000..U+10FFFF, proceed
*/
if (codept <= 0x10FFFF) {
bin_length = bin_digits (codept);
if (bin_length < 8) { /* U+0000..U+007F */
byte_length = 1;
utf8_bytes [0] = codept;
}
else if (bin_length < 12) { /* U+0080..U+07FF */
byte_length = 2;
utf8_bytes [0] = 0xC0 | ((codept >> 6) & 0x1F);
utf8_bytes [1] = 0x80 | ( codept & 0x3F);
}
else if (bin_length < 17) { /* U+0800..U+FFFF */
byte_length = 3;
utf8_bytes [0] = 0xE0 | ((codept >> 12) & 0x0F);
utf8_bytes [1] = 0x80 | ((codept >> 6) & 0x3F);
utf8_bytes [2] = 0x80 | ( codept & 0x3F);
}
else if (bin_length < 22) { /* U+010000..U+10FFFF */
byte_length = 4;
utf8_bytes [0] = 0xF0 | ((codept >> 18) & 0x07);
utf8_bytes [1] = 0x80 | ((codept >> 12) & 0x3F);
utf8_bytes [2] = 0x80 | ((codept >> 6) & 0x3F);
utf8_bytes [3] = 0x80 | ( codept & 0x3F);
}
else {
fprintf (stderr,
"Internal error forming UTF-8 in print_utf8() for U+%04X\n",
codept);
}
for (i = 0; i < byte_length; i++) putchar (utf8_bytes [i]);
}
else {
fprintf (stderr,
"print_utf8() called with illegal Unicode code point U+%06X\n",
codept);
}
return;
}
/*
Return the number of significant binary digits in an unsigned number.
*/
int
bin_digits (uint32_t itest)
{
uint32_t i;
int result;
i = 0x80000000; /* mask highest uint32_t bit */
result = 32;
while ( (i != 0) && ((itest & i) == 0) ) {
i >>= 1;
result--;
}
return result;
}
unibetacode-1.2/src/unibetaprep.l 0000644 0001750 0001750 00000106030 13323414322 015601 0 ustar paul paul /*
unibetaprep - Prepare a Beta Code file contianing traditional
Beta Code special numeric values for conversion
with beta2uni.
Author: Paul Hardy
Date: 2018
*/
%{
#include /* Generated by GNU Autotools */
#include
#include
#include
#define YY_NO_INPUT
#define YY_NO_UNPUT
#define PROG_NAME "unibetaprep"
#define MAXSTRING 4096
int escaped_last=0; /* =1 if last string printed started with '{' */
void escape_out (char *); /* output a hexadecimal Unicode code point */
%}
%option noyywrap
%%
$[1-9] escape_out ("$");
$[1-4][0-9] escape_out ("$");
$50 escape_out ("$50");
$51 escape_out ("$50");
$52 escape_out ("$52");
$53 escape_out ("$53");
$70 escape_out ("$");
$80 escape_out ("&");
&[1-9] escape_out ("&");
&[1-4][0-9] escape_out ("&");
\{10 escape_out ("\\u0332");
\{100 escape_out ("{100");
\{101 escape_out ("{101");
\< escape_out ("\\u0305");
\<1 escape_out ("\\u0332");
\<2 escape_out ("\\u2035");
\>2 escape_out ("\\u2032");
\<3 escape_out ("\\u0361");
\<4 escape_out ("\\u035C");
\<5 escape_out ("\\u035D");
\<8 escape_out ("\\u0333");
\<16 escape_out ("\\u2035");
\>16 escape_out ("\\u2032");
\<17 escape_out ("\\u0333");
\<18 escape_out ("\\u0336");
\<19 escape_out ("\\u2032");
\<31 escape_out ("\\u0336");
\<32 escape_out ("\\u0305\\u0332");
\<33 escape_out ("\\u221A");
\<100 escape_out ("\\u0338");
\"1 escape_out ("\\u201E");
\"2 escape_out ("\\u201C");
\"4 escape_out ("\\u201A");
\"5 escape_out ("\\u201B");
\[ escape_out ("[");
\] escape_out ("]");
\[1 escape_out ("\\u0028");
\]1 escape_out ("\\u0029");
\[2 escape_out ("\\u2329");
\]2 escape_out ("\\u232A");
\[3 escape_out ("\\u007B");
\]3 escape_out ("\\u007D");
\[4 escape_out ("\\u27E6");
\]4 escape_out ("\\u27E7");
\[5 escape_out ("\\u2E24");
\]5 escape_out ("\\u2E25");
\[6 escape_out ("\\u2E22");
\]6 escape_out ("\\u2E23");
\[7 escape_out ("\\u2E22");
\]7 escape_out ("\\u2E25");
\[8 escape_out ("\\u2E24");
\]8 escape_out ("\\u2E23");
\[9 escape_out ("\\u2027");
\]9 escape_out ("\\u2027");
\[10 escape_out ("[");
\]10 escape_out ("]");
\[11 escape_out ("\\u208D");
\]11 escape_out ("\\u208E");
\[12 escape_out ("\\u2192");
\]12 escape_out ("\\u2190");
\[13 escape_out ("/");
\]13 escape_out ("/");
\[14 escape_out ("|:");
\]14 escape_out (":|");
\[16 escape_out ("\\u27E6");
\]16 escape_out ("\\u27E7");
\[17 escape_out ("\\u230A\\u230A");
\]17 escape_out ("\\u230B\\u230B");
\[18 escape_out ("\\u27EA");
\]18 escape_out ("\\u27EB");
\[20 escape_out ("\\u23A7");
\]20 escape_out ("\\u23AB");
\[21 escape_out ("\\u23AA");
\]21 escape_out ("\\u23AA");
\[22 escape_out ("\\u23AB");
\]22 escape_out ("\\u23AC");
\[23 escape_out ("\\u23A9");
\]23 escape_out ("\\u23AD");
\[30 escape_out ("\\u239B");
\]30 escape_out ("\\u239E");
\[31 escape_out ("\\u239C");
\]31 escape_out ("\\u239F");
\[32 escape_out ("\\u239D");
\]32 escape_out ("\\u23A0");
\[70 escape_out ("\\u2E02");
\]70 escape_out ("\\u2E03");
\[71 escape_out ("\\u2E04");
\]71 escape_out ("\\u2E05");
\[72 escape_out ("\\u2E09");
\]72 escape_out ("\\u2E0A");
\[73 escape_out ("\\u2E0B");
\]73 escape_out ("\\u2E0C");
\[80 escape_out ("/");
\]80 escape_out ("/");
\[81 escape_out ("//");
\]81 escape_out ("//");
\[82 escape_out ("\\u2E20");
\]82 escape_out ("\\u2E21");
\[83 escape_out ("\\u2E21");
\]83 escape_out ("\\u2E20");
\[84 escape_out ("\\u2E26");
\]84 escape_out ("\\u2E27");
\[85 escape_out ("\\u2E28");
\]85 escape_out ("\\u2E29");
% escape_out ("\\u2020");
%1 escape_out ("?");
%2 escape_out ("*");
%3 escape_out ("/");
%4 escape_out ("!");
%5 escape_out ("|");
%6 escape_out ("=");
%7 escape_out ("+");
%8 escape_out ("%%");
%9 escape_out ("&");
%10 escape_out (":");
%11 escape_out ("\\u2022");
%12 escape_out ("*");
%13 escape_out ("\\u2021");
%14 escape_out ("\\u00A7");
%15 escape_out ("\\u02C8");
%16 escape_out ("\\u00A6");
%17 escape_out ("\\u2016");
%18 escape_out ("'");
%19 escape_out ("\\u2013");
%20 escape_out ("\\u0301");
%21 escape_out ("\\u0300");
%22 escape_out ("\\u0302");
%23 escape_out ("\\u0308");
%24 escape_out ("\\u0342");
%25 escape_out ("\\u0327");
%26 escape_out ("\\u0304");
%27 escape_out ("\\u0306");
%28 escape_out ("\\u0308");
%29 escape_out ("\\u0323\\u0323");
%30 escape_out ("\\u02BC");
%31 escape_out ("\\u02BD");
%32 escape_out ("\\u00B4");
%33 escape_out ("`");
%34 escape_out ("\\u1FC0");
%35 escape_out ("\\u1FCE");
%36 escape_out ("\\u1FDE");
%37 escape_out ("\\u1FDD");
%38 escape_out ("\\u1FDF");
%39 escape_out ("\\u00A8");
%40 escape_out ("\\u23D1");
%41 escape_out ("\\u2013");
%42 escape_out ("\\u23D5");
%43 escape_out ("\\u00D7");
%44 escape_out ("\\u23D2");
%45 escape_out ("\\u23D3");
%46 escape_out ("\\u23D4");
%47 escape_out ("\\u10111");
%48 escape_out ("\\u23D1\\u23D1");
%49 escape_out ("\\u23D1\\u23D1\\u23D1");
%80 escape_out ("v.");
%81 escape_out ("vac.");
%91 escape_out ("\\u0485");
%92 escape_out ("\\u0486");
%93 escape_out ("\\u1DC0");
%94 escape_out ("\\u0307");
%95 escape_out ("\\u1DC1");
%96 escape_out ("\\u035C");
%97 escape_out ("\\u0307");
%98 escape_out ("?");
%99 escape_out ("\\u2248");
%100 escape_out (";");
%101 escape_out ("#");
%102 escape_out ("\\u2018");
%103 escape_out ("\\");
%104 escape_out ("^");
%105 escape_out ("|||");
%106 escape_out ("\\u224C");
%107 escape_out ("~");
%108 escape_out ("\\u00B1");
%109 escape_out ("\\u00B7");
%110 escape_out ("\\u25CB");
%127 escape_out ("\\u032F");
%128 escape_out ("\\u030C");
%129 escape_out ("\\u2020");
%130 escape_out ("\\u0307");
%132 escape_out ("\\u0385");
%133 escape_out ("\\u1FCD");
%134 escape_out ("\\u1FCF");
%138 escape_out ("\\u23D1\\u0301");
%139 escape_out ("%%139");
%140 escape_out ("\\u10112");
%141 escape_out ("\\u23D6");
%142 escape_out ("\\u2510");
%144 escape_out ("\\u23D1\\u0336");
%145 escape_out ("\\u2013\\u0301");
%146 escape_out ("\\u00B7");
%147 escape_out ("\\u030A");
%148 escape_out ("\\u030C");
%149 escape_out ("\\u0328");
%150 escape_out ("|");
%154 escape_out ("\\u2234");
%155 escape_out ("\\u2235");
%157 escape_out ("%%157");
%158 escape_out ("\\u2042");
%159 escape_out ("\\u00D7");
%160 escape_out ("-");
%161 escape_out ("\\u00F7");
%162 escape_out ("\\u0338");
%163 escape_out ("\\u00B6");
%170 escape_out ("\\u0359");
%171 escape_out ("//");
%172 escape_out ("\\u02BC");
%173 escape_out ("\\u02BD");
%174 escape_out ("\\u00B4");
%175 escape_out ("`");
%176 escape_out ("\\u1FC0");
%177 escape_out ("\\u0313");
%178 escape_out ("\\u0314");
%179 escape_out ("\\u0323");
%180 escape_out ("\\u033D");
%181 escape_out ("\\u032D");
%182 escape_out ("\\u0361");
%183 escape_out ("\\u035D");
%184 escape_out ("\\u035E");
%185 escape_out ("\\u2319");
%186 escape_out ("\\u1D242");
%187 escape_out ("\\u00AC");
%188 escape_out ("\\u031A");
# escape_out ("\\u0374");
\*#1 escape_out ("\\u03DE");
#1 escape_out ("\\u03DF");
\*#2 escape_out ("\\u03DA");
#2 escape_out ("\\u03DB");
\*#3 escape_out ("\\u03D8");
#3 escape_out ("\\u03D9");
#4 escape_out ("\\u03DE");
\*#5 escape_out ("\\u03E0");
#5 escape_out ("\\u03E1");
#6 escape_out ("\\u2E0F");
#8 escape_out ("\\u2E10");
#9 escape_out ("\\u0301");
#10 escape_out ("\\u03FD");
#11 escape_out ("\\u03FF");
#12 escape_out ("\\u2014");
#13 escape_out ("\\u203B");
#14 escape_out ("\\u2E16");
#15 escape_out (">");
#16 escape_out ("\\u03FE");
#17 escape_out ("/");
#18 escape_out ("<");
#19 escape_out ("\\u0300");
#20 escape_out ("\\u10175");
#21 escape_out ("\\u10176");
#22 escape_out ("\\u0375");
#23 escape_out ("\\u03D8");
#24 escape_out ("\\u10176");
#25 escape_out ("\\u10176");
#26 escape_out ("\\u2E0F");
#29 escape_out ("\\u00B7");
#30 escape_out ("#30");
#31 escape_out ("#31");
#51 escape_out ("\\u00B7");
#52 escape_out ("\\u205A");
#53 escape_out ("\\u205D");
#55 escape_out ("\\u2059");
#59 escape_out ("\\u03FD");
#60 escape_out ("\\u0399");
#61 escape_out ("\\u10142");
#62 escape_out ("\\u10143");
#63 escape_out ("\\u0394");
#64 escape_out ("\\u10144");
#65 escape_out ("\\u0397");
#66 escape_out ("\\u10145");
#67 escape_out ("\\u03A7");
#68 escape_out ("\\u10146");
#69 escape_out ("\\u039C");
#70 escape_out (".");
#71 escape_out ("\\u00B7");
#72 escape_out ("\\u02D9");
#73 escape_out ("\\u205A");
#74 escape_out ("\\u205D");
#75 escape_out (".");
#80 escape_out ("\\u0308");
#81 escape_out ("'");
#82 escape_out ("\\u02CA");
#83 escape_out ("\\u02CB");
#84 escape_out ("\\u1FC0");
#85 escape_out ("\\u02BD");
#86 escape_out ("\\u02BC");
#87 escape_out ("\\u0394\\u0345");
#90 escape_out ("\\u2014");
#100 escape_out ("\\u10186");
#101 escape_out ("\\u1017B");
#102 escape_out ("\\u10182\\u03C5");
#103 escape_out ("\\u039B\\u0338");
#104 escape_out ("\\u10182\\u03BF");
#105 escape_out ("#105");
#106 escape_out ("\\u10184");
#107 escape_out ("#107");
#108 escape_out ("#108");
#109 escape_out ("\\u10182\\u03BF");
#110 escape_out ("\\u03B1\\u0317");
#111 escape_out ("\\u10182\\u03B5");
#112 escape_out ("\\u10188");
#113 escape_out ("\\u1017C");
#114 escape_out ("\\u10140");
#115 escape_out ("\\u10189");
#116 escape_out ("\\u1017C");
#117 escape_out ("\\u10183");
#118 escape_out ("\\u03BB\\u0338");
#119 escape_out ("\\u1017D");
#120 escape_out ("\\u10184");
#121 escape_out ("\\u03BE\\u0338");
#122 escape_out ("\\u1017D");
#123 escape_out ("\\u1017C");
#124 escape_out ("#124");
#125 escape_out ("\\u10182\\u03C5");
#126 escape_out ("#126");
#127 escape_out ("\\u03BB\\u0345");
#128 escape_out ("\\u03FC");
#129 escape_out ("\\u039B\\u0325");
#130 escape_out ("\\u1018A");
#131 escape_out ("\\u10177");
#132 escape_out ("\\u03B2\\u0338");
#133 escape_out ("\\u03C7\\u03BF");
#134 escape_out ("\\u0393\\u03B2");
#135 escape_out ("\\u02D9");
#136 escape_out ("\\u03A3");
#137 escape_out ("\\u0393\\u03B2");
#150 escape_out ("\\u221E");
#151 escape_out ("\\u2014");
#152 escape_out ("\\u205A\\u2014");
#153 escape_out ("\\u2026\\u0305");
#154 escape_out ("\\u2C80");
#155 escape_out ("\\u2014\\u0323");
#156 escape_out ("\\u2310");
#157 escape_out ("#157");
#158 escape_out ("\\u2237\\u0336");
#159 escape_out ("\\u2237\\u0334");
#160 escape_out ("~\\u0323");
#161 escape_out ("\\u10175");
#162 escape_out ("\\u25A1");
#163 escape_out ("\\u0375");
#165 escape_out ("\\u00D7");
#166 escape_out ("\\u2A5A");
#167 escape_out ("\\u039C\\u039C");
#168 escape_out ("\\u039C\\u039C\\u039C");
#169 escape_out ("\\u10175");
#170 escape_out ("II");
#171 escape_out ("\\u10175");
#172 escape_out ("\\u10176");
#173 escape_out ("\\u10175");
#200 escape_out ("\\u2643");
#201 escape_out ("\\u25A1");
#202 escape_out ("\\u264F");
#203 escape_out ("\\u264D");
#204 escape_out ("\\u2640");
#205 escape_out ("\\u2650");
#206 escape_out ("\\u2644");
#207 escape_out ("\\u2609");
#208 escape_out ("\\u263F");
#209 escape_out ("\\u263E");
#210 escape_out ("\\u2642");
#211 escape_out ("\\u2651");
#212 escape_out ("\\u264C");
#213 escape_out ("\\u2648");
#214 escape_out ("\\u264E");
#215 escape_out ("\\u264A");
#216 escape_out ("\\u264B");
#217 escape_out ("\\u2653");
#218 escape_out ("\\u2652");
#219 escape_out ("\\u2649");
#220 escape_out ("\\u260D");
#221 escape_out ("\\u263D");
#222 escape_out ("\\u260C");
#223 escape_out ("\\u2605");
#240 escape_out ("\\u10177");
#241 escape_out ("\\u260B");
#242 escape_out ("\\u2651");
#243 escape_out ("#243");
#244 escape_out ("\\u264C");
#245 escape_out ("\\u264E\\u033D");
#246 escape_out ("#246");
#247 escape_out ("#247");
#248 escape_out ("#248");
#249 escape_out ("\\u03C0\\u263E");
#250 escape_out ("#250");
#300 escape_out ("#300");
#301 escape_out ("\\u039B\\u039F");
#302 escape_out ("#302");
#303 escape_out (">");
#304 escape_out ("#304");
#305 escape_out ("\\u2EDE");
#306 escape_out ("#306");
#307 escape_out ("#307");
#308 escape_out ("#308");
#310 escape_out ("\\u2EDE");
#311 escape_out ("#311");
#312 escape_out ("#312");
#313 escape_out ("\\u2E0E");
#314 escape_out ("#314");
#315 escape_out ("\\u2E0E");
#319 escape_out ("\\u25CF");
#320 escape_out ("\\u2629");
#321 escape_out ("\\u2629");
#322 escape_out ("\\u2627");
#323 escape_out (">");
\*#400 escape_out ("\\u0370");
#400 escape_out ("\\u0371");
\*#401 escape_out ("\\u037F");
#401 escape_out ("\\u03F3");
#451 escape_out ("\\u0283");
#452 escape_out ("\\u2E10");
#453 escape_out ("\\u2E11");
#454 escape_out ("\\u2E10");
#455 escape_out ("\\u2E11");
#456 escape_out ("\\u2EDE");
#457 escape_out ("#457");
#458 escape_out ("\\u03A7");
#459 escape_out ("\\u00B7");
#460 escape_out ("\\u2014");
#461 escape_out ("|");
#465 escape_out ("\\u2627");
#466 escape_out ("#466");
#467 escape_out ("\\u2192");
#468 escape_out ("\\u2E0E");
#476 escape_out ("\\u0283");
#501 escape_out ("#501");
#502 escape_out ("#502");
#503 escape_out ("#503");
#504 escape_out ("\\u2E0E");
#505 escape_out ("\\u205C");
#506 escape_out ("\\u2E15");
#507 escape_out ("\\u2E14");
#508 escape_out ("\\u203B");
#509 escape_out ("\\u0305\\u0311");
#510 escape_out ("\\u03C0\\u2014\\u03B5");
#511 escape_out ("\\u03BA\\u2014\\u03B9");
#512 escape_out ("\\u03FD");
#513 escape_out ("#513");
#514 escape_out ("#514");
#515 escape_out ("\\u10185");
#516 escape_out ("\\u0394\\u0345");
#517 escape_out ("\\u10185");
#518 escape_out ("\\u10179");
#519 escape_out ("\\u2191");
#520 escape_out ("\\u2629");
#521 escape_out ("#521");
#522 escape_out ("\\u0397");
#523 escape_out ("\\u2E13");
#524 escape_out ("\\u2297");
#525 escape_out ("\\u271B");
#526 escape_out ("\\u2190");
#527 escape_out ("\\u02C6");
#528 escape_out ("\\u03BB\\u032D");
#529 escape_out ("\\u204B");
#530 escape_out ("#530");
#531 escape_out ("\\u035C");
#532 escape_out ("\\u2E12");
#533 escape_out ("\\u03DA");
#534 escape_out ("\\u0302\\u02C6");
#535 escape_out ("#535");
#536 escape_out ("#536");
#537 escape_out ("#537");
#538 escape_out ("#538");
#539 escape_out ("#539");
#540 escape_out ("#540");
#542 escape_out ("\\u03A1\\u0336");
#543 escape_out ("#543");
#544 escape_out ("\\u2058");
#545 escape_out ("#545");
#546 escape_out ("#546");
#547 escape_out ("#547");
#548 escape_out ("\\u2016\\u0334");
#549 escape_out ("#549");
#550 escape_out ("\\u2E2E");
#551 escape_out ("#551");
#552 escape_out ("#552");
#553 escape_out ("#553");
#554 escape_out ("#554");
#555 escape_out ("#555");
#556 escape_out ("\\u2629");
#557 escape_out ("#557");
#558 escape_out ("#558");
#559 escape_out ("#559");
#561 escape_out ("\\u2191");
#562 escape_out ("\\u0305");
#563 escape_out ("\\u1D242");
#564 escape_out ("\\u1D243");
#565 escape_out ("\\u1D244");
#566 escape_out ("\\u1D231");
#567 escape_out ("\\u1D213");
#568 escape_out ("\\u1D233");
#569 escape_out ("\\u1D236");
#570 escape_out ("\\u03F9");
#571 escape_out ("\\u10143");
#572 escape_out ("\\u1D229");
#573 escape_out ("\\u1D212");
#574 escape_out ("\\u0393");
#575 escape_out ("\\u1D215");
#576 escape_out ("\\u1D216");
#577 escape_out ("\\u03A6");
#578 escape_out ("\\u03A1");
#579 escape_out ("\\u039C");
#580 escape_out ("\\u0399");
#581 escape_out ("\\u0398");
#582 escape_out ("\\u1D20D");
#583 escape_out ("\\u039D");
#584 escape_out ("\\u2127");
#585 escape_out ("\\u0396");
#586 escape_out ("\\u1D238");
#587 escape_out ("\\u0395");
#588 escape_out ("\\u1D208");
#589 escape_out ("\\u1D21A");
#590 escape_out ("\\u1D23F");
#591 escape_out ("\\u1D21B");
#592 escape_out ("\\u1D240");
#593 escape_out ("\\u039B");
#594 escape_out ("#594");
#595 escape_out ("#595");
#596 escape_out ("#596");
#597 escape_out ("#597");
#598 escape_out ("\\u0394");
#599 escape_out ("\\u1D214");
#600 escape_out ("\\u1D228");
#601 escape_out ("#601");
#602 escape_out ("\\u1D237");
#603 escape_out ("\\u03A0");
#604 escape_out ("\\u1D226");
#605 escape_out ("#605");
#606 escape_out ("#606");
#607 escape_out ("#607");
#608 escape_out ("#608");
#609 escape_out ("#609");
#610 escape_out ("#610");
#611 escape_out ("#611");
#612 escape_out ("#612");
#613 escape_out ("#613");
#614 escape_out ("#614");
#615 escape_out ("\\u1D230");
#616 escape_out ("\\u1D21E");
#617 escape_out ("\\u03A9");
#618 escape_out ("#618");
#619 escape_out ("\\u03BB");
#620 escape_out ("#620");
#621 escape_out ("\\u1D205");
#622 escape_out ("\\u1D201");
#623 escape_out ("\\u2127");
#624 escape_out ("\\u03FD");
#625 escape_out ("#625");
#626 escape_out ("#626");
#627 escape_out ("\\u1D217");
#628 escape_out ("\\u039F");
#629 escape_out ("\\u039E");
#630 escape_out ("\\u0394");
#631 escape_out ("\\u039A");
#632 escape_out ("\\u1D20E");
#633 escape_out ("\\u1D232");
#634 escape_out ("\\u1D239");
#635 escape_out ("\\u1D200");
#636 escape_out ("\\u1D203");
#637 escape_out ("\\u1D206");
#638 escape_out ("\\u1D209");
#639 escape_out ("\\u1D20C");
#640 escape_out ("\\u1D211");
#641 escape_out ("\\u03A9");
#642 escape_out ("\\u0397");
#643 escape_out ("\\u1D21D");
#644 escape_out ("\\u1D21F");
#645 escape_out ("\\u1D221");
#646 escape_out ("\\u1D225");
#647 escape_out ("\\u1D22C");
#648 escape_out ("\\u1D235");
#649 escape_out ("\\u1D20B");
#650 escape_out ("\\u1D20F");
#651 escape_out ("\\u03A7");
#652 escape_out ("\\u03A4");
#653 escape_out ("\\u1D219");
#654 escape_out ("\\u1D21C");
#655 escape_out ("\\u1D202");
#656 escape_out ("\\u1D224");
#657 escape_out ("\\u1D22E");
#658 escape_out ("\\u1D23E");
#659 escape_out ("\\u1D241");
#660 escape_out ("\\u0391");
#661 escape_out ("\\u0392");
#662 escape_out ("\\u03A5");
#663 escape_out ("\\u03A8");
#664 escape_out ("\\u1D23A");
#665 escape_out ("\\u1D234");
#666 escape_out ("\\u1D22F");
#667 escape_out ("\\u1D22D");
#668 escape_out ("\\u1D210");
#669 escape_out ("\\u1D20A");
#670 escape_out ("\\u1D207");
#671 escape_out ("\\u1D21B");
#672 escape_out ("\\u1D218");
#673 escape_out ("\\u1D223");
#674 escape_out ("\\u1D222");
#675 escape_out ("\\u1D240");
#676 escape_out ("\\u1D23D");
#677 escape_out ("\\u03BC");
#678 escape_out ("\\u1D220");
#679 escape_out ("\\u1D204");
#680 escape_out ("#680");
#681 escape_out ("#681");
#682 escape_out ("#682");
#683 escape_out ("\\u2733");
#684 escape_out ("\\u1D22A");
#685 escape_out ("#685");
#686 escape_out ("#686");
#687 escape_out ("#687");
#688 escape_out ("\\u03BC\\u030A");
#689 escape_out ("\\u10175");
#690 escape_out ("\\u27D8");
#691 escape_out ("\\u27C0");
#692 escape_out ("\\u27C1");
#693 escape_out ("#693");
#694 escape_out ("\\u0396");
#695 escape_out ("\\u2014");
#696 escape_out ("\\u1D227");
#697 escape_out ("\\u1D245");
#700 escape_out ("\\u205E");
#701 escape_out ("#701");
#702 escape_out ("#702");
#703 escape_out ("\\u25CB\\u25CB\\u25CB");
#704 escape_out ("\\u2014\\u0307");
#705 escape_out ("#705");
#706 escape_out ("#706");
#707 escape_out ("#707");
#708 escape_out ("#708");
#709 escape_out ("\\u223B");
#710 escape_out ("\\u039A\\u0336");
\*#711 escape_out ("\\u03FA");
#711 escape_out ("\\u03FB");
#712 escape_out ("#712");
#713 escape_out ("#713");
#714 escape_out ("#714");
#715 escape_out ("#715");
#716 escape_out ("#716");
#717 escape_out ("\\u2E00");
#718 escape_out ("\\u2E01");
#719 escape_out ("\\u2E06");
#720 escape_out ("\\u2E07");
#721 escape_out ("\\u003A");
#722 escape_out ("\\u2135");
#723 escape_out ("\\u1D516");
#724 escape_out ("\\u210C");
#725 escape_out ("\\u1D510");
#730 escape_out ("\\u2014");
#731 escape_out ("\\u23D7");
#732 escape_out ("\\u23D8");
#733 escape_out ("\\u23D9");
#751 escape_out ("\\u0661");
#752 escape_out ("\\u0662");
#753 escape_out ("\\u0663");
#754 escape_out ("\\u0664");
#755 escape_out ("\\u0665");
#756 escape_out ("\\u0666");
#757 escape_out ("\\u0667");
#758 escape_out ("\\u0668");
#759 escape_out ("\\u0669");
#760 escape_out ("\\u0660");
#761 escape_out ("#761");
#762 escape_out ("\\u02D9");
#800 escape_out ("\\u2733");
#801 escape_out ("\\u10141");
#802 escape_out ("\\u10140");
#803 escape_out ("\\u03A7");
#804 escape_out ("/");
#805 escape_out ("\\u03A4");
#806 escape_out ("\\u039A");
#807 escape_out ("\\u10166");
#808 escape_out ("\\u10148");
#811 escape_out ("\\u03A4");
#812 escape_out ("\\u10148");
#813 escape_out ("\\u10149");
#814 escape_out ("\\u1014A");
#815 escape_out ("\\u1014B");
#816 escape_out ("\\u1014C");
#817 escape_out ("\\u1014D");
#818 escape_out ("\\u1014E");
#819 escape_out ("#819");
#821 escape_out ("\\u03A3");
#822 escape_out ("\\u1014F");
#823 escape_out ("\\u10150");
#824 escape_out ("\\u10151");
#825 escape_out ("\\u10152");
#826 escape_out ("\\u10153");
#827 escape_out ("\\u10154");
#828 escape_out ("#828");
#829 escape_out ("\\u10155");
#830 escape_out ("\\u10147");
#831 escape_out ("\\u10147");
#832 escape_out ("\\u10156");
#833 escape_out ("\\u039C");
#834 escape_out ("\\u10157");
#835 escape_out ("\\u03A7");
#836 escape_out ("\\u03A3");
#837 escape_out ("\\u03A4");
#838 escape_out ("\\u10143");
#839 escape_out ("\\u10141");
#840 escape_out ("||");
#841 escape_out ("|||");
#842 escape_out ("\\u00B7");
#843 escape_out ("\\u1015B");
#844 escape_out ("\\u205D");
#845 escape_out ("\\u10158");
#846 escape_out ("\\u10110");
#847 escape_out ("\\u1015E");
#848 escape_out ("\\u10112");
#850 escape_out ("#850");
#853 escape_out ("\\u0399");
#862 escape_out ("\\u0394");
#863 escape_out ("\\u10144");
#865 escape_out ("\\u10145");
#866 escape_out ("\\u03A7");
#867 escape_out ("\\u10146");
#899 escape_out ("#899");
#922 escape_out ("\\u1D228");
#923 escape_out ("#923");
#924 escape_out ("#924");
#925 escape_out ("\\u1D217");
#926 escape_out ("\\u1D232");
#927 escape_out ("W");
#928 escape_out ("\\u1D20B");
#929 escape_out ("\\u1D214");
#930 escape_out ("#930");
#932 escape_out ("\\u2733");
#933 escape_out ("#933");
#934 escape_out ("#934");
#936 escape_out ("#936");
#938 escape_out ("\\u01A7");
#939 escape_out ("~");
#940 escape_out ("#940");
#941 escape_out ("\\u1D205");
#980 escape_out ("#980");
#1000 escape_out ("\\u1017C");
#1001 escape_out ("\\u1017D");
#1002 escape_out ("\\u1017E");
#1003 escape_out ("\\u1017F");
#1004 escape_out ("\\u10180");
#1005 escape_out ("\\u03A7");
#1006 escape_out ("\\u03A7\\u0391");
#1007 escape_out ("\\u03A7\\u0392");
#1008 escape_out ("\\u03A7\\u0393");
#1009 escape_out ("\\u03A7\\u0394");
#1010 escape_out ("\\u03A7\\u0395");
#1011 escape_out ("\\u03A7\\u0396");
#1012 escape_out ("\\u03A7\\u0397");
#1013 escape_out ("\\u03A7>");
#1020 escape_out ("<");
#1021 escape_out ("\\u0394\\u0374");
#1022 escape_out ("\\u0397\\u0374");
#1023 escape_out ("\\u0399\\u0374");
#1024 escape_out ("\\u039B\\u0392");
#1100 escape_out ("\\u2183");
#1101 escape_out ("#1101");
#1102 escape_out ("#1102");
#1103 escape_out ("\\u0323\\u0313");
#1104 escape_out ("#1104");
#1105 escape_out ("M\\u030A");
#1106 escape_out ("#1106");
#1107 escape_out ("S\\u0336S\\u0336S");
#1108 escape_out ("X\\u0336");
#1109 escape_out ("=");
#1110 escape_out ("-");
#1111 escape_out ("\\u00B0");
#1112 escape_out ("#1112");
#1113 escape_out ("#1113");
#1114 escape_out ("\\u1D201");
#1115 escape_out ("|");
#1116 escape_out ("\\u01A7");
#1117 escape_out ("Z");
#1118 escape_out ("#1118");
#1119 escape_out ("\\u0110");
#1120 escape_out ("#1120");
#1121 escape_out ("Z");
#1122 escape_out ("#1122");
#1123 escape_out ("#1123");
#1124 escape_out ("\\u211E");
#1125 escape_out ("#1125");
#1126 escape_out ("O");
#1127 escape_out ("V\\u0338");
#1128 escape_out ("I\\u0336I\\u0336S\\u0336");
#1129 escape_out ("Z\\u0336");
#1130 escape_out ("\\");
#1131 escape_out ("\\\\");
#1132 escape_out ("\\\\u0336");
#1133 escape_out ("\\\\u0336\\\\u0336");
#1134 escape_out ("#1134");
#1135 escape_out ("9");
#1136 escape_out ("\\u2112");
#1200 escape_out ("\\u00A2");
#1201 escape_out ("\\u2021");
#1202 escape_out ("\\u20A4");
#1203 escape_out ("\\u00DF");
#1204 escape_out ("\\u00B0");
#1209 escape_out ("\\u0127");
#1212 escape_out ("D\\u0336");
#1213 escape_out ("\\u0152");
#1214 escape_out ("\\u0153");
#1215 escape_out ("\\u00C6");
#1216 escape_out ("\\u00E6");
#1219 escape_out ("$");
#1220 escape_out ("@");
#1221 escape_out ("\\u0131");
#1222 escape_out ("\\u0130");
#1223 escape_out ("i\\u0336");
#1224 escape_out ("\\u2295");
#1225 escape_out ("\\u00A9");
#1226 escape_out ("\\u2731");
#1227 escape_out ("\\u2021");
#1228 escape_out ("#1228");
#1229 escape_out ("#1229");
#1230 escape_out ("\\u25AD");
#1231 escape_out ("#1231");
#1232 escape_out ("#1232");
#1233 escape_out ("#1233");
#1312 escape_out ("M\\u2019");
#1313 escape_out ("\\u223D");
#1314 escape_out ("n\\u030A");
#1315 escape_out ("#1315");
#1316 escape_out ("\\u0292");
#1317 escape_out ("\\u02D9//.");
#1318 escape_out ("\\u223B");
#1319 escape_out ("#1319");
#1320 escape_out ("\\u0375\\u0311");
#1321 escape_out ("#1321");
#1322 escape_out ("\\u2644");
#1323 escape_out ("\\u03B6\\u0337\\u03C2\\u0300");
#1324 escape_out ("\\u03B8\\u03C2\\u0302");
#1326 escape_out ("#1326");
#1327 escape_out ("#1327");
#1328 escape_out ("#1328");
#1334 escape_out ("#1334");
#1335 escape_out ("//");
#1336 escape_out ("#1336");
#1337 escape_out (">");
#1338 escape_out ("\\u1017E");
#1340 escape_out ("\\u039D\\u03BF");
#1341 escape_out ("#1341");
#1500 escape_out ("\\u03B3\\u0374");
#1501 escape_out ("#1501");
#1502 escape_out ("\\u03A7\\u0374");
#1503 escape_out ("#1503");
#1504 escape_out ("#1504");
#1505 escape_out ("#1505");
#1506 escape_out ("\\u0300\\u030C");
#1509 escape_out ("#1509");
#1510 escape_out ("#1510");
#1511 escape_out ("#1511");
#1512 escape_out ("<");
#1513 escape_out ("\\u10175");
#1514 escape_out ("\\u00F7");
#1515 escape_out ("\\u1D20F");
#1516 escape_out ("#1516");
#1517 escape_out ("#1517");
#1518 escape_out ("\\u1D229");
#1519 escape_out ("#1519");
#1520 escape_out ("#1520");
#1521 escape_out ("\\u0222");
#1522 escape_out ("#1522");
#1523 escape_out ("\\u205B");
#1524 escape_out ("#1524");
#1525 escape_out ("#1525");
#1526 escape_out ("#1526");
#1527 escape_out ("#1527");
#1528 escape_out ("#1528");
#1529 escape_out ("\\u2227");
#1530 escape_out ("\\u2228");
#1531 escape_out ("\\u03CF");
#1532 escape_out ("\\u03D7");
#2000 escape_out ("\\u1D000");
#2001 escape_out ("\\u1D001");
#2002 escape_out ("\\u1D002");
#2003 escape_out ("\\u1D003");
#2004 escape_out ("\\u1D004");
#2005 escape_out ("\\u1D005");
#2006 escape_out ("\\u1D006");
#2007 escape_out ("\\u1D007");
#2008 escape_out ("\\u1D008");
#2009 escape_out ("\\u1D009");
#2010 escape_out ("\\u1D00A");
#2011 escape_out ("\\u1D00B");
#2012 escape_out ("\\u1D00C");
#2013 escape_out ("\\u1D00D");
#2014 escape_out ("\\u1D00E");
#2015 escape_out ("\\u1D00F");
#2016 escape_out ("\\u1D010");
#2017 escape_out ("\\u1D011");
#2018 escape_out ("\\u1D012");
#2019 escape_out ("\\u1D013");
#2020 escape_out ("\\u1D014");
#2021 escape_out ("\\u1D015");
#2022 escape_out ("\\u1D016");
#2023 escape_out ("\\u1D017");
#2024 escape_out ("\\u1D018");
#2025 escape_out ("\\u1D019");
#2026 escape_out ("\\u1D01A");
#2027 escape_out ("\\u1D01B");
#2028 escape_out ("\\u1D01C");
#2029 escape_out ("\\u1D01D");
#2030 escape_out ("\\u1D01E");
#2031 escape_out ("\\u1D01F");
#2032 escape_out ("\\u1D020");
#2033 escape_out ("\\u1D021");
#2034 escape_out ("\\u1D022");
#2035 escape_out ("\\u1D023");
#2036 escape_out ("\\u1D024");
#2037 escape_out ("\\u1D025");
#2038 escape_out ("\\u1D026");
#2039 escape_out ("\\u1D027");
#2040 escape_out ("\\u1D028");
#2041 escape_out ("\\u1D029");
#2042 escape_out ("\\u1D02A");
#2043 escape_out ("\\u1D02B");
#2044 escape_out ("\\u1D02C");
#2045 escape_out ("\\u1D02D");
#2046 escape_out ("\\u1D02E");
#2047 escape_out ("\\u1D02F");
#2048 escape_out ("\\u1D030");
#2049 escape_out ("\\u1D031");
#2050 escape_out ("\\u1D032");
#2051 escape_out ("\\u1D033");
#2052 escape_out ("\\u1D034");
#2053 escape_out ("\\u1D035");
#2054 escape_out ("\\u1D036");
#2055 escape_out ("\\u1D037");
#2056 escape_out ("\\u1D038");
#2057 escape_out ("\\u1D039");
#2058 escape_out ("\\u1D03A");
#2059 escape_out ("\\u1D03B");
#2060 escape_out ("\\u1D03C");
#2061 escape_out ("\\u1D03D");
#2062 escape_out ("\\u1D03E");
#2063 escape_out ("\\u1D03F");
#2064 escape_out ("\\u1D040");
#2065 escape_out ("\\u1D041");
#2066 escape_out ("\\u1D042");
#2067 escape_out ("\\u1D043");
#2068 escape_out ("\\u1D044");
#2069 escape_out ("\\u1D045");
#2070 escape_out ("\\u1D046");
#2071 escape_out ("\\u1D047");
#2072 escape_out ("\\u1D048");
#2073 escape_out ("\\u1D049");
#2074 escape_out ("\\u1D04A");
#2075 escape_out ("\\u1D04B");
#2076 escape_out ("\\u1D04C");
#2077 escape_out ("\\u1D04D");
#2078 escape_out ("\\u1D04E");
#2079 escape_out ("\\u1D04F");
#2080 escape_out ("\\u1D050");
#2081 escape_out ("\\u1D051");
#2082 escape_out ("\\u1D052");
#2083 escape_out ("\\u1D053");
#2084 escape_out ("\\u1D054");
#2085 escape_out ("\\u1D055");
#2086 escape_out ("\\u1D056");
#2087 escape_out ("\\u1D057");
#2088 escape_out ("\\u1D058");
#2089 escape_out ("\\u1D059");
#2090 escape_out ("\\u1D05A");
#2091 escape_out ("\\u1D05B");
#2092 escape_out ("\\u1D05C");
#2093 escape_out ("\\u1D05D");
#2094 escape_out ("\\u1D05E");
#2095 escape_out ("\\u1D05F");
#2096 escape_out ("\\u1D060");
#2097 escape_out ("\\u1D061");
#2098 escape_out ("\\u1D062");
#2099 escape_out ("\\u1D063");
#2100 escape_out ("\\u1D064");
#2101 escape_out ("\\u1D065");
#2102 escape_out ("\\u1D066");
#2103 escape_out ("\\u1D067");
#2104 escape_out ("\\u1D068");
#2105 escape_out ("\\u1D069");
#2106 escape_out ("\\u1D06A");
#2107 escape_out ("\\u1D06B");
#2108 escape_out ("\\u1D06C");
#2109 escape_out ("\\u1D06D");
#2110 escape_out ("\\u1D06E");
#2111 escape_out ("\\u1D06F");
#2112 escape_out ("\\u1D070");
#2113 escape_out ("\\u1D071");
#2114 escape_out ("\\u1D072");
#2115 escape_out ("\\u1D073");
#2116 escape_out ("\\u1D074");
#2117 escape_out ("\\u1D075");
#2118 escape_out ("\\u1D076");
#2119 escape_out ("\\u1D077");
#2120 escape_out ("\\u1D078");
#2121 escape_out ("\\u1D079");
#2122 escape_out ("\\u1D07A");
#2123 escape_out ("\\u1D07B");
#2124 escape_out ("\\u1D07C");
#2125 escape_out ("\\u1D07D");
#2126 escape_out ("\\u1D07E");
#2127 escape_out ("\\u1D07F");
#2128 escape_out ("\\u1D080");
#2129 escape_out ("\\u1D081");
#2130 escape_out ("\\u1D082");
#2131 escape_out ("\\u1D083");
#2132 escape_out ("\\u1D084");
#2133 escape_out ("\\u1D085");
#2134 escape_out ("\\u1D086");
#2135 escape_out ("\\u1D087");
#2136 escape_out ("\\u1D088");
#2137 escape_out ("\\u1D089");
#2138 escape_out ("\\u1D08A");
#2139 escape_out ("\\u1D08B");
#2140 escape_out ("\\u1D08C");
#2141 escape_out ("\\u1D08D");
#2142 escape_out ("\\u1D08E");
#2143 escape_out ("\\u1D08F");
#2144 escape_out ("\\u1D090");
#2145 escape_out ("\\u1D091");
#2146 escape_out ("\\u1D092");
#2147 escape_out ("\\u1D093");
#2148 escape_out ("\\u1D094");
#2149 escape_out ("\\u1D095");
#2150 escape_out ("\\u1D096");
#2151 escape_out ("\\u1D097");
#2152 escape_out ("\\u1D098");
#2153 escape_out ("\\u1D099");
#2154 escape_out ("\\u1D09A");
#2155 escape_out ("\\u1D09B");
#2156 escape_out ("\\u1D09C");
#2157 escape_out ("\\u1D09D");
#2158 escape_out ("\\u1D09E");
#2159 escape_out ("\\u1D09F");
#2160 escape_out ("\\u1D0A0");
#2161 escape_out ("\\u1D0A1");
#2162 escape_out ("\\u1D0A2");
#2163 escape_out ("\\u1D0A3");
#2164 escape_out ("\\u1D0A4");
#2165 escape_out ("\\u1D0A5");
#2166 escape_out ("\\u1D0A6");
#2167 escape_out ("\\u1D0A7");
#2168 escape_out ("\\u1D0A8");
#2169 escape_out ("\\u1D0A9");
#2170 escape_out ("\\u1D0AA");
#2171 escape_out ("\\u1D0AB");
#2172 escape_out ("\\u1D0AC");
#2173 escape_out ("\\u1D0AD");
#2174 escape_out ("\\u1D0AE");
#2175 escape_out ("\\u1D0AF");
#2176 escape_out ("\\u1D0B0");
#2177 escape_out ("\\u1D0B1");
#2178 escape_out ("\\u1D0B2");
#2179 escape_out ("\\u1D0B3");
#2180 escape_out ("\\u1D0B4");
#2181 escape_out ("\\u1D0B5");
#2182 escape_out ("\\u1D0B6");
#2183 escape_out ("\\u1D0B7");
#2184 escape_out ("\\u1D0B8");
#2185 escape_out ("\\u1D0B9");
#2186 escape_out ("\\u1D0BA");
#2187 escape_out ("\\u1D0BB");
#2188 escape_out ("\\u1D0BC");
#2189 escape_out ("\\u1D0BD");
#2190 escape_out ("\\u1D0BE");
#2191 escape_out ("\\u1D0BF");
#2192 escape_out ("\\u1D0C0");
#2193 escape_out ("\\u1D0C1");
#2194 escape_out ("\\u1D0C2");
#2195 escape_out ("\\u1D0C3");
#2196 escape_out ("\\u1D0C4");
#2197 escape_out ("\\u1D0C5");
#2198 escape_out ("\\u1D0C6");
#2199 escape_out ("\\u1D0C7");
#2200 escape_out ("\\u1D0C8");
#2201 escape_out ("\\u1D0C9");
#2202 escape_out ("\\u1D0CA");
#2203 escape_out ("\\u1D0CB");
#2204 escape_out ("\\u1D0CC");
#2205 escape_out ("\\u1D0CD");
#2206 escape_out ("\\u1D0CE");
#2207 escape_out ("\\u1D0CF");
#2208 escape_out ("\\u1D0D0");
#2209 escape_out ("\\u1D0D1");
#2210 escape_out ("\\u1D0D2");
#2211 escape_out ("\\u1D0D3");
#2212 escape_out ("\\u1D0D4");
#2213 escape_out ("\\u1D0D5");
#2214 escape_out ("\\u1D0D6");
#2215 escape_out ("\\u1D0D7");
#2216 escape_out ("\\u1D0D8");
#2217 escape_out ("\\u1D0D9");
#2218 escape_out ("\\u1D0DA");
#2219 escape_out ("\\u1D0DB");
#2220 escape_out ("\\u1D0DC");
#2221 escape_out ("\\u1D0DD");
#2222 escape_out ("\\u1D0DE");
#2223 escape_out ("\\u1D0DF");
#2224 escape_out ("\\u1D0E0");
#2225 escape_out ("\\u1D0E1");
#2226 escape_out ("\\u1D0E2");
#2227 escape_out ("\\u1D0E3");
#2228 escape_out ("\\u1D0E4");
#2229 escape_out ("\\u1D0E5");
#2230 escape_out ("\\u1D0E6");
#2231 escape_out ("\\u1D0E7");
#2232 escape_out ("\\u1D0E8");
#2233 escape_out ("\\u1D0E9");
#2234 escape_out ("\\u1D0EA");
#2235 escape_out ("\\u1D0EB");
#2236 escape_out ("\\u1D0EC");
#2237 escape_out ("\\u1D0ED");
#2238 escape_out ("\\u1D0EE");
#2239 escape_out ("\\u1D0EF");
#2240 escape_out ("\\u1D0F0");
#2241 escape_out ("\\u1D0F1");
#2242 escape_out ("\\u1D0F2");
#2243 escape_out ("\\u1D0F3");
#2244 escape_out ("\\u1D0F4");
#2245 escape_out ("\\u1D0F5");
#2300 escape_out ("#2300");
. {
if (escaped_last == 1) {
fputc ('}', yyout);
escaped_last = 0;
}
fprintf (yyout, "%s", yytext);
}
%%
int
main (int argc, char *argv[])
{
int i; /* loop variable */
int exit_status; /* program exit status */
void print_help ();
exit_status = EXIT_SUCCESS;
yyin = stdin;
yyout = stdout;
for (i = 1; i < argc; i++) {
/*
Parse options. If an invalid command line argument
was given, print a help menu and exit with error status.
*/
if (argv[i][0] == '-') {
switch (argv[i][1]) {
case 'i': yyin = fopen (argv[++i], "r");
break;
/*
output file format; file name follows
in next parameter, so increment i
*/
case 'o': yyout = fopen (argv[++i], "w");
break;
default: print_help ();
exit_status = EXIT_FAILURE;
break;
}
}
else {
print_help ();
exit_status = EXIT_FAILURE;
}
}
if (exit_status == EXIT_SUCCESS) {
yylex ();
/*
Done reading output. End an escape sequence
if that was the last thing output.
*/
if (escaped_last == 1) {
fputc ('}', yyout);
escaped_last = 0;
}
}
exit (exit_status);
}
/*
Print a help message. The parameter is the program name,
taken from argv[0].
*/
void
print_help ()
{
fprintf (stderr, "\nUnknown command line parameter.\n\n");
fprintf (stderr, "Syntax: %s [-i input_file] [-o output_file]\n\n",
PROG_NAME);
fprintf (stderr, " -i: specify input file name\n\n");
fprintf (stderr, " -o: specify output file name\n\n");
return;
}
/*
Print an escaped sequence. Such sequences are enclosed in
ASCII braces ("{...}"). Multiple such escape sequences
back to back can be joined into one, so keep track of
whether or not the last thing we printed was also an
escape sequence. If it was, combine the last escape
sequence with the current one; generate consolidated
sequence output of the form
"{\u....\u....\u....}"
rather than
"{\u....}{\u....}{\u....}"
*/
void
escape_out (char *escaped_text)
{
if (escaped_last == 0) {
fputc ('{', yyout); /* start a new escape string */
}
fprintf (yyout, "%s", escaped_text);
escaped_last = 1;
return;
}
unibetacode-1.2/ChangeLog 0000644 0001750 0001750 00000000640 13423175621 014100 0 ustar paul paul 2019-01-26 Paul Hardy
* Version 1.2.
* Improved text in man/unibetacode.5 and man/unibetaprep.1.
2018-08-04 Paul Hardy
* Version 1.1. Added "orig" target in Makefile.am to remove
all Autotools-generated files, returning the source package
to its pristine state.
2018-07-20 Paul Hardy
* Version: 1.0
* Initial version.
unibetacode-1.2/AUTHORS 0000644 0001750 0001750 00000000105 13323253101 013357 0 ustar paul paul The unibetacode package was written by Paul Hardy in June-July 2018.
unibetacode-1.2/NEWS 0000644 0001750 0001750 00000000664 13423200220 013013 0 ustar paul paul 2019-01-26 Version 1.2
Improved text in man/unibetacode.5 and man/unibetaprep.1.
2018-08-04 Version 1.1
Added "make orig" target to restore pristine pre-Autotools tarball.
This is to help downstream distros port packages to new architectures,
as well as to guarantee that all files are build with the latest
versions of Autotools programs.
2018-07-20 Version 1.0
This is the first release of this package.
unibetacode-1.2/COPYING 0000644 0001750 0001750 00000043254 13331365450 013370 0 ustar paul paul GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
Copyright (C)
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.