unibetacode-1.2/0000755000175000017500000000000013423202120012307 5ustar paulpaulunibetacode-1.2/examples/0000755000175000017500000000000013324230662014141 5ustar paulpaulunibetacode-1.2/examples/byzantine.prep0000644000175000017500000000111513323410334017025 0ustar paulpaul&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.beta0000644000175000017500000000113413323406353016433 0ustar paulpaul&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.utf80000644000175000017500000000105713323410033016400 0ustar paulpaulGenesis 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.beta0000644000175000017500000000121513323405742017002 0ustar paulpaul&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.utf80000644000175000017500000000114613323255152016756 0ustar paulpaulByzantine 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/README0000644000175000017500000000607513331366245013220 0ustar paulpaulThis 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.am0000644000175000017500000000075313331364620014364 0ustar paulpaul## 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/0000755000175000017500000000000013423202120013062 5ustar paulpaulunibetacode-1.2/man/Makefile.am0000644000175000017500000000022213323250242015121 0ustar paulpaul## 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.10000644000175000017500000000506213320304265014671 0ustar paulpaul.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.50000644000175000017500000004156413423202051015447 0ustar paulpaul.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.10000644000175000017500000000442313320304244014666 0ustar paulpaul.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.10000644000175000017500000000727113423175551015512 0ustar paulpaul.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.ac0000644000175000017500000000061513422770630014616 0ustar paulpaulAC_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/0000755000175000017500000000000013423202120013266 5ustar paulpaulunibetacode-1.2/test/test-2utf8-10000755000175000017500000000234013323301731015305 0ustar paulpaul#!/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.am0000644000175000017500000000060313323413174015335 0ustar paulpaul## 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-10000755000175000017500000000234413323302320015302 0ustar paulpaul#!/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-20000755000175000017500000000233413323307736015324 0ustar paulpaul#!/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-20000755000175000017500000000233413323301546015342 0ustar paulpaul#!/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-10000755000175000017500000000234313323301412015331 0ustar paulpaul#!/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-all0000755000175000017500000000051213323410365014752 0ustar paulpaul#!/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/0000755000175000017500000000000013423202120013076 5ustar paulpaulunibetacode-1.2/src/Makefile.am0000644000175000017500000000031113324516351015143 0ustar paulpaul## 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.l0000644000175000017500000025365613324515720015022 0ustar paulpaul/* 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.l0000644000175000017500000015553613323414074015017 0ustar paulpaul/* 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.l0000644000175000017500000010603013323414322015601 0ustar paulpaul/* 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/ChangeLog0000644000175000017500000000064013423175621014100 0ustar paulpaul2019-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/AUTHORS0000644000175000017500000000010513323253101013357 0ustar paulpaulThe unibetacode package was written by Paul Hardy in June-July 2018. unibetacode-1.2/NEWS0000644000175000017500000000066413423200220013013 0ustar paulpaul2019-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/COPYING0000644000175000017500000004325413331365450013370 0ustar paulpaul 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.