diff options
author | Karl Berry <karl@freefriends.org> | 2008-07-12 00:58:13 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2008-07-12 00:58:13 +0000 |
commit | b644be7550076c874437a062a31c63be6daaa12e (patch) | |
tree | c65475d5cd98a50d3b77049242bb980d75d3554d /Master/texmf-dist/source/latex/cjk | |
parent | 438c86541627788f5c36d5af5d2fdd2682bf4d4c (diff) |
cjk 4.8.0 update (named CJK before)
git-svn-id: svn://tug.org/texlive/trunk@9456 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/cjk')
131 files changed, 43328 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/cjk/contrib/wadalab/DNP.sfd b/Master/texmf-dist/source/latex/cjk/contrib/wadalab/DNP.sfd new file mode 100644 index 00000000000..cd279422656 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/contrib/wadalab/DNP.sfd @@ -0,0 +1,42 @@ +# DNP.sfd +# +# subfont numbers for JIS character set in DNP font encoding to be used +# with the CJK package for LaTeX. + +sy 1: 0xA1A1_0xA1FE 101: 0xA2A1_0xA2FE +roma 33: 0xA3A1_0xA3FE +hira 1: 0xA4A1_0xA4FE +kata 1: 0xA5A1_0xA5FE +greek 1: 0xA6A1_0xA6FE +russian 1: 0xA7A1_0xA7FE +keisen 1: 0xA8A1_0xA8FE + +ka 0xB0A1_0xB0FE 0xB1A1_0xB1FE 0xB2A1_0xB2E4 +kb 0xB2E5_0xB2FE 0xB3A1_0xB3FE 0xB4A1_0xB4FE 0xB5A1_0xB5CA +kc 0xB5CB_0xB5FE 0xB6A1_0xB6FE 0xB7A1_0xB7FE 0xB8A1_0xB8B0 +kd 0xB8B1_0xB8FE 0xB9A1_0xB9FE 0xBAA1_0xBAF4 +ke 0xBAF5_0xBAFE 0xBBA1_0xBBFE 0xBCA1_0xBCFE 0xBDA1_0xBDDA +kf 0xBDDB_0xBDFE 0xBEA1_0xBEFE 0xBFA1_0xBFFE 0xC0A1_0xC0C0 +kg 0xC0C1_0xC0FE 0xC1A1_0xC1FE 0xC2A1_0xC2FE 0xC3A1_0xC3A6 +kh 0xC3A7_0xC3FE 0xC4A1_0xC4FE 0xC5A1_0xC5EA +ki 0xC5EB_0xC5FE 0xC6A1_0xC6FE 0xC7A1_0xC7FE 0xC8A1_0xC8D0 +kj 0xC8D1_0xC8FE 0xC9A1_0xC9FE 0xCAA1_0xCAFE 0xCBA1_0xCBB6 +kk 0xCBB7_0xCBFE 0xCCA1_0xCCFE 0xCDA1_0xCDFA +kl 0xCDFB_0xCDFE 0xCEA1_0xCEFE 0xCFA1_0xCFFE + +km 0xD0A1_0xD0FE 0xD1A1_0xD1FE 0xD2A1_0xD2E4 +kn 0xD2E5_0xD2FE 0xD3A1_0xD3FE 0xD4A1_0xD4FE 0xD5A1_0xD5CA +ko 0xD5CB_0xD5FE 0xD6A1_0xD6FE 0xD7A1_0xD7FE 0xD8A1_0xD8B0 +kp 0xD8B1_0xD8FE 0xD9A1_0xD9FE 0xDAA1_0xDAF4 +kq 0xDAF5_0xDAFE 0xDBA1_0xDBFE 0xDCA1_0xDCFE 0xDDA1_0xDDDA +kr 0xDDDB_0xDDFE 0xDEA1_0xDEFE 0xDFA1_0xDFFE 0xE0A1_0xE0C0 +ks 0xE0C1_0xE0FE 0xE1A1_0xE1FE 0xE2A1_0xE2FE 0xE3A1_0xE3A6 +kt 0xE3A7_0xE3FE 0xE4A1_0xE4FE 0xE5A1_0xE5EA +ku 0xE5EB_0xE5FE 0xE6A1_0xE6FE 0xE7A1_0xE7FE 0xE8A1_0xE8D0 +kv 0xE8D1_0xE8FE 0xE9A1_0xE9FE 0xEAA1_0xEAFE 0xEBA1_0xEBB6 +kw 0xEBB7_0xEBFE 0xECA1_0xECFE 0xEDA1_0xEDFA +kx 0xEDFB_0xEDFE 0xEEA1_0xEEFE 0xEFA1_0xEFFE 0xF0A1_0xF0E0 +ky 0xF0E1_0xF0FE 0xF1A1_0xF1FE 0xF2A1_0xF2FE 0xF3A1_0xF3C6 +kz 0xF3C7_0xF3FE 0xF4A1_0xF4FE + +# eof diff --git a/Master/texmf-dist/source/latex/cjk/contrib/wadalab/DNP.txt b/Master/texmf-dist/source/latex/cjk/contrib/wadalab/DNP.txt new file mode 100644 index 00000000000..e9db5585d4b --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/contrib/wadalab/DNP.txt @@ -0,0 +1,384 @@ +This file describes how to set up the CJK package with Wadalab postscript +fonts for Japanese under Unix-like operating systems using distributions +based on web2c (teTeX, TeXLive, etc.). + +The printer does not need to have resident Japanese fonts. + + +By Hin-Tak Leung <htl10@users.sourceforge.net>, September 1997. + +Revised November 1998. + +Last revised by Werner Lemberg, July 2006. + +=================== + + +Summary steps +------------- + + 1. Download the CJK package and install it. + + 2. Download and install the Wadalab font bundles for the CJK package from + CTAN. + + 3a. Update `<TEXMF>/dvips/psfont.map', or update your `~/.dvipsrc' file. + Use the updmap script if possible. + + 3b. Alternatively, create a `config.wadalab' file. + + 3c. For pdfTeX, update `pdftex.map' (normally handled already by the updmap + script). Omit this step for recent teTeX and TeXLive versions. + + 3d. For dvipdfmx (and dvipdfm), update `dvipdfm.map' (normally handled + already by the updmap script). Omit this step for recent teTeX and + TeXLive versions. + + 4. Run mktexlsr. + + 5. Test it! + + +Details of each step +-------------------- + +1. The following files are essential and must be in your $TEXINPUTS path. + + CJK/texinput/: + CJK.enc CJK.sty CJKnumb.sty + CJKulem.sty ruby.sty standard.bdg + standard.chr standard.enc + + CJK/texinput/JIS/: + JIS.cap JIS.cpx JISdnp.enc + c42song.fd EUC-JP.bdg EUC-JP.chr + EUC-JP.enc + + CJK/texinput/UTF8/: + UTF8.bdg UTF8.chr UTF8.enc + c70song.fd + + [Even if you don't use `c42song.fd' and `c70song.fd' these two files + should be here to avoid a strange LaTeX error message if a font shape is + missing.] + + [The EUC-JP files support real EUC-JP with single shift to access + JIS X 0212.] + + And one or more of the following files: + + file name Description + ------------------------------------------------------------------------ + c42goth.fd Gothic JIS X 0208 (level 1,2 kanji), DNP font encoding + c42maru.fd Maru + c42min.fd Mincho + + c52maru.fd Maru JIS X 0212 (level 3 kanji), DNP font encoding + c52min.fd Mincho + + c70goth.fd Gothic JIS X 0208, Unicode font encoding + + c70maru.fd Maru JIS X 0208 + 0212, Unicode font encoding + c70min.fd Mincho + + And finally, `wadalab.map'. + + Also keep `CJK/examples/JIS.tex' for testing. The rest of the CJK files + are not essential for this setup. Usage is documented in + `CJK/examples/JIS.tex' but reading `CJK/doc/CJK.txt' and + `CJK/doc/ruby.txt' is recommended. + + For pseudo vertical typesetting you need the `*.fdx' files accompaning + the above `*.fd' files, together with the `CJKvert.sty' file. + + For using Unicode as the input encoding you should use `CJKutf8.sty'. + +2. The CJK sub font packages of the Wadalab fonts can be found on CTAN in + the directory `fonts/wadalab'. The real TeX font names consist of the + concatenation of the family name with the subfont suffix. Examples: + `dgjkeisen', `mrjkj', `umcj5d'. + + file name TeX font family + DNP Unicode + --------------------------------------------- + gothic-0-13.tar.gz dgj udgj + maru-0-8.tar.gz mrj umrj + maru-1-8.tar.gz mr2j + mincho-0-12.tar.gz dmj udmj [*] + mincho-0-8.tar.gz mcj umcj + mincho-1-8.tar.gz mc2j + + [*] The `udmj' family uses mc2j for glyphs Level 3 Kanji. It doesn't + really fit (mc2j is too thin), but it is still better than having + no Level 3 Kanji at all. + + Installation should be straightforward since the directories in the + font bundles already follow the TDS standard. + +3a. Append `wadalab.map' to `<TEXMF>/dvips/config/psfont.map; or, for + non-root users, create a `~/.dvipsrc' file containing this single line: + +========================================================================= +p +/my-home/where_I_want_it/wadalab.map +========================================================================= + + (or add this line to your `~/.dvipsrc' if it already exists) and set + $DVIPSFONTS to the location of the `*.pfb' files. + + teTeX and TeXLive users should do the following instead of the above: + + a) Copy `wadalab.map' into the `<TEXMF>/fonts/map/dvips/wadalab' + directory. If you are non-root, create a private TEXMF tree in your + home directory, and copy the file to a similar location in your + private tree. + + Users of older versions of teTeX and TeXLive should use the + directory `<TEXMF>/dvips/config' instead. + + b) Add the following line to <TEXMF>/web2c/updmap.cfg: + +========================================================================= +Map wadalab.map +========================================================================= + + and call the updmap script to regenerate all program specific map + files. If you are non-root, copy `updmap.cfg' from the main TEXMF + tree to a similar location in your private tree and modify it there. + + Users of older version of teTeX and TeXLive should add `wadalab.map' + to the `extra_modules' variable directly in the updmap script. + +3b. Another solution is to just copy wadalab.map to the location in + step 3a. After creating a file `config.wadalab', containing a single line + +========================================================================= +p +wadalab.map +========================================================================= + + you can use the `-P wadalab' switch while calling dvips. + + The preferred location of `config.wadalab' is `<TEXMF>/dvips/wadalab' for + recent teTeX and TeXLive versions, and `<TEXMF>/dvips/config' otherwise. + +3c. [This step is optional and should be omitted for recent teTeX and + TeXLive versions.] + + Append `wadalab.map' to `<TEXMF>/dvips/config/pdftex.map' so that pdfTeX + can use the Wadalab fonts. The updmap script does this automatically. + +3d. [This step is optional and should be omitted for recent teTeX and + TeXLive versions.] + + Append `wadalab.map' to <TEXMF>/dvipdfm/config/dvipdfm.map so that + dvipdfmx (and dvipdfm) can use the Wadalab fonts. The updmap script does + this automatically. + + +4. Run mktexlsr to make your TeX system actually find your font data files. + + +5. Edit CJK/examples/JIS.tex and replace `\begin{CJK*}{JIS}{song}' by + `\begin{CJK*}[dnp]{JIS}{xxx}'; `xxx' can be `min' (for mincho), `goth' + (for gothic), or `maru'. To see the mincho-0-8 font (which is in `light' + series), insert + + \fontseries{l} + \selectfont + + in the CJK environment. All fonts use the poor-man's bold mechanism of + the CJK package. + + Then do the sequence + + latex JIS.tex + dvips JIS.dvi -j -o JIS.ps + + or + + dvips JIS.dvi -j -P wadalab -o JIS.ps + + if you haven't modified `psfonts.map'. The `-j' switch activates partial + font downloading (which usually is the default). + + At this stage running ghostview on `JIS.ps' should display it on screen. + Send `JIS.ps' to a postscript printer or run ghostscript for + non-postscript printers as you wish; and there you have your first + printed Japanese document. Enjoy! + + Note: The level 3 Kanji fonts are generated in a DNP-like encoding also. + A single level 3 Kanji character can be most easily input with + + \CJKchar[JIS2]{<first-byte>}{<second-byte>} , + + provided that you have said + + \CJKfontenc{JIS2}{dnp} + \CJKencfamily{JIS2}{xxx} + + in the preamble of your document to activate dnp font encoding for + the JIS2 encoding in font shape `xxx' (which can be either `maru' + or `min'). + + In case you use Emacs or Mule together with cjk-enc.el (of the CJK + package), JIS X 0212 characters can be displayed directly; they + will be automatically converted into appropriate CJK macros. + + +How the Wadalab fonts have been created +--------------------------------------- + +This section contains a description of the conversion process which +transforms the raw Wadalab PS files into subfonts usable by the CJK package. + +1. The Wadalab PS files are available from the original host + + ftp://ftp.ipl.t.u-tokyo.ac.jp/Font/ + + Alternative locations are CTAN hosts like ftp.dante.de or ftp.tug.org and + its mirrors: + + ftp://ftp.dante.de/pub/tex/support/ghostscript/3rdparty + /fonts/kanji/Font + + Obtain the following files (if you download the files from CTAN, the + final extension is `.gz' instead of `.Z'): + + wadalab-sym.7.tar.Z (symbols + Greek letters, necessary) + + wadalab-mincho-0-12.8.tar.Z (JIS X 0208 level 1,2 kanji) + wadalab-gothic-0-13.5.tar.Z + wadalab-mincho-0-8.4.tar.Z + wadalab-maru-0-8.4.tar.Z + + wadalab-maru-1-8.tar.Z (JIS X 0212 level 3 kanji) + wadalab-mincho-1-8.tar.Z + + tools/wftodm.c (conversion program, c.f. step 2) + + Unpack the font archives in a temporary directory; you should get + subdirectories called `wadalab-sym', `wadalab-mincho-0-12', etc. + + Note: DO NOT read the misleading `readme.ghostscript' document which + accompanies the fonts. + + +2. Patch `wftodm.c' with the following to enable partial font downloading. + You can simply say + + patch < DNP.txt + + to do that. + +========================================================================= +--- wftodm-orig2.c Tue Sep 23 22:45:32 1997 ++++ wftodm.c Sun Jul 30 08:56:43 2006 +@@ -1,6 +1,8 @@ + #include <stdio.h> ++#include <string.h> ++#include <stdlib.h> + #include <sys/types.h> +-#include <sys/time.h> ++#include <time.h> + char *charstrs[34][256]; + int charlens[34][256]; + char *version_str="001.001"; +@@ -157,6 +159,7 @@ + output_afm(i); + } + } ++return 0; + } + output_afm(file) + { +@@ -209,14 +212,13 @@ + fprintf(ofp,"/UnderlineThickness 0 def\n"); + fprintf(ofp,"end readonly def\n"); + fprintf(ofp,"/FontName /%s def\n",fontname); +- fprintf(ofp,"/DmEncoding [\n"); ++ fprintf(ofp,"/Encoding 256 array\n"); ++ fprintf(ofp,"0 1 255 {1 index exch /.notdef put} for\n"); + for(i=0;i<16;i++){ + for(j=0;j<16;j++) +- fprintf(ofp," /c%02X",i*16+j); +- putc('\n',ofp); ++ fprintf(ofp,"dup %d /c%02X put\n",i*16+j,i*16+j); + } +- fprintf(ofp,"] readonly def\n"); +- fprintf(ofp,"/Encoding DmEncoding def\n"); ++ fprintf(ofp,"readonly def\n"); + fprintf(ofp,"/PaintType 0 def\n"); + fprintf(ofp,"/FontType 1 def\n"); + fprintf(ofp,"/FontMatrix [.001 0 0 .001 0 -0.16] readonly def\n"); +========================================================================= + + After compilation with + + cc -O -o wftodm wftodm.c + + use it as follows: + + wftodm -FontBase dg wadalab-sym/jis*.ps wadalab-gothic-0-13/goth-*.ps + wftodm -FontBase dm wadalab-sym/jis*.ps wadalab-mincho-0-12/min-*.ps + wftodm -FontBase mc wadalab-sym/jis*.ps wadalab-mincho-0-8/min-*.ps + wftodm -FontBase mr wadalab-sym/jis*.ps wadalab-maru-0-8/maru-*.ps + wftodm -FontBase mc2 wadalab-mincho-1-8/min*.ps + wftodm -FontBase mr2 wadalab-maru-1-8/maru*.ps + + [Note: The order of the PS files on the command line doesn't matter.] + + You should then get a whole set of {dg,dm,mc,mr}j[*].{afm,pfa} files in + your current directory, with [*]={greek,keisen,roma,russian,sy} coming + from sym-dir, and [*]={hira,kata,ka-kz} from the Kanji fonts. + {mc2,mr2}j[*].{afm,pfa} with [*]={ka-kw} are JIS X 0212 level 3 Kanji + font files. + + Note: `wftodm.c' has been updated in Oct 97; previous versions will fail. + + +3. Run the `makefont' script. It first normalizes the font matrix (to make + the subfonts work with pdfTeX), then it calls afm2tfm on each of the afm + files, and run t1disasm/t1asm (which are part of the t1utils package) on + each of the PFA files to convert them to PFB files which are much + smaller. + + +4. Run the `fixwada2.pl' script to correct the glyph names. This needs the + perl program and the files `DNP.sfd' (from the CJK package), + `JIS0208.TXT', and `JIS0212.TXT' (from ftp.unicode.org, in the `OBSOLETE' + directory). + + perl fixwada2.pl dgj jis0208 + perl fixwada2.pl mrj jis0208 + perl fixwada2.pl mr2j jis0212 + perl fixwada2.pl dmj jis0208 + perl fixwada2.pl mcj jis0208 + perl fixwada2.pl mc2j jis0212 + + +5. Run the `makeuniwada.pl' script -- it needs the same auxiliary files + as `fixwada2.pl' -- to create virtual fonts for Unicode input encoding. + + perl makeuniwada.pl dgj udgj + perl makeuniwada.pl mrj mr2j umrj + perl makeuniwada.pl dmj mc2j udmj + perl makeuniwada.pl mcj mc2j umcj + + +Thanks +------ + + Werner Lemberg <wl@gnu.org> for creating CJK and comments to this help + document. + +and + + Joshua Redstone <redstone@cs.washington.edu> for contribution to non-root + setups. + +Also check out the following variables: $TEXFORMATS, $TEXINPUTS, $TEXFONTS, +$DVIPSFONTS. + + +Please send any suggestions or comments to LEUNG Hin-Tak <htl10@cam.ac.uk>. + +--- end of DNP.txt --- diff --git a/Master/texmf-dist/source/latex/cjk/contrib/wadalab/fixwada b/Master/texmf-dist/source/latex/cjk/contrib/wadalab/fixwada new file mode 100644 index 00000000000..17b2475f302 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/contrib/wadalab/fixwada @@ -0,0 +1,81 @@ +# Copyright (C) 1994-2008 Werner Lemberg <wl@gnu.org> +# +# 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 in doc/COPYING; if not, write to the Free +# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +# MA 02110-1301 USA + +# This script fixes the Wadalab fonts which have been created with the +# `makefont' script of the CJK package version 4.5.1 or earlier. +# +# It converts all PFB files in the current directory. + + +for i in *.pfb; do + echo $i + mv $i $i.old + cat $i.old | \ + t1disasm | \ + awk ' + { + sub(/001\.001/, "001.002") + + if (/%%Creation/) { + print "%%CreationDate: 2003-Feb-07" + next + } + + if (/0 -160 rmoveto/ && last_is_hsbw) { + last_is_hsbw = 0 + next + } + + if (/hsbw/) { + last_is_hsbw = 1 + waiting_for_Xmoveto = 1 + } + else + last_is_hsbw = 0 + + if (waiting_for_Xmoveto) { + if (/rmoveto/) { + printf "\t%d %d rmoveto\n", $1, $2 - 160 + waiting_for_Xmoveto = 0 + next + } + else if (/vmoveto/) { + printf "\t%d vmoveto\n", $1 - 160 + waiting_for_Xmoveto = 0 + next + } + else if (/hmoveto/) { + printf "\t%d %d rmoveto\n", $1, -160 + waiting_for_Xmoveto = 0 + next + } + } + + if (/moveto/) + print "\tclosepath" + + if (/hstem/) { + printf "\t%d %d hstem\n", $1 - 160, $2 + next + } + + print + } + ' | \ + t1asm > $i + rm $i.old +done diff --git a/Master/texmf-dist/source/latex/cjk/contrib/wadalab/fixwada2.pl b/Master/texmf-dist/source/latex/cjk/contrib/wadalab/fixwada2.pl new file mode 100644 index 00000000000..94989805c6f --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/contrib/wadalab/fixwada2.pl @@ -0,0 +1,242 @@ +#! /usr/bin/perl -w +# +# Copyright (C) 1994-2008 Werner Lemberg <wl@gnu.org> +# +# 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 in doc/COPYING; if not, write to the Free +# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +# MA 02110-1301 USA + +# This script fixes the Wadalab fonts which have been created with the +# `makefont' script version 1.0 (from CJK 4.8.0), or which have been updated +# with the `fixwada' script. +# +# . Make all glyph names compliant to the Adobe Glyph List (AGL) to +# get proper ToUnicode mappings in PDF documents. +# +# . Fix the encoding vector in the PFBs to contain only glyphs which +# actually have an outline. +# +# . Update the version number and creation date. +# +# . Fix a typo in the original fonts (`UniqueId' -> `UniqueID'). +# +# The files `JIS0208.TXT' and `JIS0212.TXT' from the `OBSOLETE' directory in +# the `MAPPINGS' tree on ftp.unicode.org are necessary for running this +# script. It also reads the file `DNP.sfd' which gives the relationship +# between JIS X 0208 (and JIS X 0212) in EUC encoding and wadalab's DNP font +# encoding. Finally, the programs `t1asm' and `t1disasm' must be available +# (and in the path). +# +# Call the script as +# +# perl fixwada2.pl wadalab_namestem [JIS0208|JIS0212] +# +# Example: +# +# perl fixwada2.pl dmj JIS0208 +# +# `fixwada2' reads all PFB and AFM files from the given wadalab font +# family and replaces them with new versions. + +use strict; + +my $prog = $0; +$prog =~ s@.*/@@; + +if ($#ARGV != 1) { + die("usage: $prog wadalab_namestem [JIS0208|JIS0212]\n"); +} + +my $namestem = $ARGV[0]; +my $encoding = $ARGV[1]; +my $encfile; +my $doshift; + + +if ("\U$encoding" eq "JIS0208") { + $encfile = "JIS0208.TXT"; + $doshift = 1; +} +elsif ("\U$encoding" eq "JIS0212") { + $encfile = "JIS0212.TXT"; + $doshift = 0; +} +else { + die("$prog: unknown encoding\n"); +} + + +# Read `DNP.sfd'. + +my %sfd; +my @subfonts; + +print("Reading \`DNP.sfd'...\n"); + +open(DNP, "DNP.sfd") +|| die("$prog: can't open \`DNP.sfd': $!\n"); + +# This loop doesn't handle the complete syntax of SFD files yet. +while (<DNP>) { + chop; + my @field = split(" "); + next if ($#field < 0); + next if ($field[0] =~ /^#/); + + my $suffix = $field[0]; + push(@subfonts, $suffix); + + shift(@field); + my $index = 0; + + while (@field) { + if ($field[0] =~ /(.*):$/) { + $index = $1; + } + elsif ($field[0] =~ /(0x[0-9A-Fa-f]+)_(0x[0-9A-Fa-f]+)/) { + foreach my $i (hex($1) .. hex($2)) { + $sfd{$suffix . "c" . sprintf("%02X", $index)} = $i; + $index++; + } + } + shift(@field); + } +} + + +# Read encoding file. + +print("Reading \`$encfile'...\n"); + +my %jisx; + +open(JISX, $encfile) +|| die("$prog: can't open \`$encfile': $!\n"); + +while (<JISX>) { + chop; + my @field = split(" "); + next if ($#field < 0); + next if ($field[0] =~ /^#/); + + if ($doshift) { + shift(@field); + } + + my $unicode = $field[1]; + $unicode =~ s/0x//; + my $value = hex($field[0]) + 0x8080; + $jisx{$value} = $unicode; +} + + +# Process AFM files. + +foreach my $afm (@subfonts) { + my $filename = "$namestem$afm.afm"; + print("Processing \`$filename'...\n"); + + if (!-f $filename) { + print("$prog: \`$filename' doesn't exist\n"); + next; + } + + rename($filename, "$filename.old"); + + open(INFILE, "$filename.old") + || die("$prog: can't open \`$filename.old': $!\n"); + open(OUTFILE, ">", "$filename") + || die("$prog: can't open \`$filename': $!\n"); + + while (<INFILE>) { + # Replace the `cXX' entries with correct `uniXXXX' glyph names. + s/ N (.*?) ;/ N uni$jisx{$sfd{$afm . $1}} ;/; + + # Update version number. + s/001\.001/001.004/; + + print(OUTFILE $_); + } + + close(INFILE); + close(OUTFILE); + + unlink("$filename.old"); +} + + +# Process PFB files. + +foreach my $pfb (@subfonts) { + my $arg; + my $filename = "$namestem$pfb.pfb"; + print("Processing \`$filename'...\n"); + + if (!-f $filename) { + print("$prog: \`$filename' doesn't exist\n"); + next; + } + + rename($filename, "$filename.old"); + + $arg = "t1disasm < $filename.old > $filename.disasm.old"; + system("$arg") == 0 + || die("$prog: calling \`$arg' failed: $?"); + + open(INFILE, "$filename.disasm.old") + || die("$prog: can't open \`$filename.disasm.old': $!\n"); + open(OUTFILE, ">", "$filename.disasm") + || die("$prog: can't open \`$filename.disasm': $!\n"); + + while (<INFILE>) { + # Replace the `cXX' entries with correct `uniXXXX' glyph names + # (or `.notdef' if there isn't one). + if (m@/(c.*?) @) { + my $replacement; + if (defined ($sfd{$pfb . $1}) + && defined ($jisx{$sfd{$pfb . $1}})) { + $replacement = "uni$jisx{$sfd{$pfb . $1}}"; + } + else { + $replacement = ".notdef"; + } + s@/(c.*?) @/$replacement @; + } + + # Fix a typo in original fonts. + s/UniqueId/UniqueID/; + + # Update version number. + s/001\.002/001.004/; + + # Update creation date. + s/2003-Feb-07/2005-Jul-29/; + + print(OUTFILE $_); + } + + close(INFILE); + close(OUTFILE); + + $arg = "t1asm < $filename.disasm > $filename"; + system("$arg") == 0 + || die("$prog: calling \`$arg' failed: $?"); + + unlink("$filename.disasm.old", "$filename.disasm"); + unlink("$filename.old"); +} + +print("Done.\n"); + +# eof diff --git a/Master/texmf-dist/source/latex/cjk/contrib/wadalab/makefont b/Master/texmf-dist/source/latex/cjk/contrib/wadalab/makefont new file mode 100644 index 00000000000..deb9310a326 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/contrib/wadalab/makefont @@ -0,0 +1,108 @@ +#!/bin/sh +# +# Copyright (C) 1994-2008 Werner Lemberg <wl@gnu.org> +# +# 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 in doc/COPYING; if not, write to the Free +# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +# MA 02110-1301 USA + +# Version 1.0 +# +# This script transforms Wadalab PFA and AFM files created by the +# wftodm program into PFB and TFM files. All files in the current +# directory and its subdirectories are converted. +# +# Additionally, it normalizes the font matrix so that the subfonts work +# with pdfTeX; for convenience, it also inserts `closepath' commands to +# end subpaths in glyphs. +# +# Note that an older version of this script (without a version number) has +# some flaws; you should either regenerate all Wadalab subfonts or use the +# `fixwada' script to fix PFB fonts which have already been created with +# this older version. +# +# The programs t1asm, t1disasm, and afm2tfm must be in the path. + +for f in `find . -name '*.pfa' -print`; do + echo processing $f + name=`basename $f .pfa` + t1disasm < $name.pfa > $name.old + + cat $name.old | \ + awk ' + { + sub(/001\.001/, "001.002") + sub(/\[.001 0 0 .001 0 -0.16\]/, "[.001 0 0 .001 0 0]") + sub(/\[0 0 1000 1000\]/, "[0 -160 1000 840]") + + if (/%%Creation/) { + print "%%CreationDate: 2003-Feb-07" + next + } + + if (/hsbw/) + waiting_for_Xmoveto = 1 + + if (waiting_for_Xmoveto) { + if (/rmoveto/) { + printf "\t%d %d rmoveto\n", $1, $2 - 160 + waiting_for_Xmoveto = 0 + next + } + if (/vmoveto/) { + printf "\t%d vmoveto\n", $1 - 160 + waiting_for_Xmoveto = 0 + next + } + if (/hmoveto/) { + printf "\t%d %d rmoveto\n", $1, -160 + waiting_for_Xmoveto = 0 + next + } + } + + if (/moveto/) + print "\tclosepath" + + if (/hstem/) { + printf "\t%d %d hstem\n", $1 - 160, $2 + next + } + + print + } + ' > $name.asm + rm $name.old + + t1asm < $name.asm > $name.pfb + rm $name.asm +done + +for f in `find . -name '*.afm' -print`; do + echo processing $f + name=`basename $f .afm` + mv $name.afm $name.old + + cat $name.old | \ + sed -e " + s/FontBBox 0 0 1000 1000/FontBBox 0 -160 1000 840/ + s/B 0 0 1000 1000/B 0 -160 1000 840/ + " > $name.afm + + rm $name.old + + afm2tfm $name.afm &> /dev/null +done + +# EOF diff --git a/Master/texmf-dist/source/latex/cjk/contrib/wadalab/makeuniwada.pl b/Master/texmf-dist/source/latex/cjk/contrib/wadalab/makeuniwada.pl new file mode 100644 index 00000000000..cbf4ca6d306 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/contrib/wadalab/makeuniwada.pl @@ -0,0 +1,333 @@ +#! /usr/bin/perl -w +# +# Copyright (C) 1994-2008 Werner Lemberg <wl@gnu.org> +# +# 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 in doc/COPYING; if not, write to the Free +# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +# MA 02110-1301 USA + +# This script creates virtual subfonts in Unicode encoding for Wadalab +# subfonts. It can merge a JIS X 0208 and JIS X 0212 family into a single +# set of Unicode subfonts. +# +# As prerequisites, it needs the files `JIS0208.TXT' and `JIS0212.TXT' from +# the `OBSOLETE' directory in the `MAPPINGS' tree on ftp.unicode.org. It +# also needs the file `DNP.sfd' which gives the relationship between JIS X +# 0208 (and JIS X 0212) in EUC encoding and wadalab's DNP font encoding. +# The program `vptovf' must be available (and in the path). +# +# Call the script as +# +# perl makeuniwada.pl namestem1 [namestem2] uni_namestem +# +# `namestem1' is the font in JIS X 0208 encoding. The optional `namestem2' +# argument is the font in JIS X 0212, and `uni_namestem' holds the prefix +# for the Unicode subfonts. `makeuniwada.pl' reads all AFM files from the +# given wadalab font families. +# +# Example: +# +# perl makeuniwada.pl dmj mc2j udmj +# +# This call mixes the mincho-0-12 (dmj) with mincho-1-8 (mc2j) families. + +use strict; + +my $prog = $0; +$prog =~ s@.*/@@; + +if ($#ARGV < 1 || $#ARGV > 2) { + die("usage: $prog namestem1 [namestem2] uni_namestem\n"); +} + +my $namestem1; +my $namestem2; +my $two_encodings = 0; +my @args = @ARGV; + +$namestem1 = $ARGV[0]; +if ($#ARGV == 2) { + $namestem2 = $ARGV[1]; + $two_encodings = 1; + shift; +} +my $uninamestem = $ARGV[1]; + + +# Read `DNP.sfd'. + +my %sfd; +my @subfonts; + +read_sfdfile("DNP.sfd", \%sfd, \@subfonts); + + +# Read encoding files. +# +# The files `JIS0208.TXT' and `JIS0212.TXT' are from the `OBSOLETE' +# directory in the `MAPPINGS' tree on ftp.unicode.org. + +my %jisx0208; +my %jisx0212; + +read_encfile("JIS0208.TXT", \%jisx0208, 1); +if ($two_encodings) { + read_encfile("JIS0212.TXT", \%jisx0212, 0); +} + + +# Read AFM files. + +my @unicode; + +foreach my $sub (@subfonts) { + my $afmname = "$namestem1$sub.afm"; + + if (-f $afmname) { + read_afmfile($afmname, \@unicode, \%sfd, \%jisx0208, $sub); + } +} +if ($two_encodings) { + foreach my $sub (@subfonts) { + my $afmname = "$namestem2$sub.afm"; + + if (-f $afmname) { + read_afmfile($afmname, \@unicode, \%sfd, \%jisx0212, $sub); + } + } +} + + +# Write VPL files. + +my $index = 0; +foreach my $i (0 .. 255) { + my @entries; + + foreach my $j (0 .. 255) { + if (defined ($unicode[$index])) { + push(@entries, "$j $unicode[$index]"); + } + $index++; + } + + if ($#entries >= 0) { + write_vplfile($uninamestem . sprintf("%02x.vpl", $i), \@entries); + } +} + + +# Generate VF and TFM files, then remove the VPL files. + +my @vplfiles = glob("$uninamestem*.vpl"); +foreach my $vplfile (@vplfiles) { + print("Processing \`$vplfile'...\n"); + my $arg = "vptovf $vplfile"; + system($arg) == 0 + || die("$prog: calling \`$arg' failed: $?");; + print("Removing \`$vplfile'...\n"); + unlink($vplfile); +} + + +# Read an SFD file. +# +# $1: Name of the SFD file. +# $2: Reference to the target hash file, mapping from the subfont index +# to the character code. The format of the hash key is the +# concatenation of the subfont suffix, a space, and the index. +# $3: Reference to a target array which holds the subfont suffixes. + +sub read_sfdfile { + my ($sfdfile, $sfdhash, $sfdarray) = @_; + + print("Reading subfont definition file \`$sfdfile'...\n"); + + open(SFD, $sfdfile) + || die("$prog: can't open \`$sfdfile': $!\n"); + + # This loop doesn't handle the complete syntax of SFD files yet. + while (<SFD>) { + chop; + my @field = split(" "); + next if ($#field < 0); + next if ($field[0] =~ /^#/); + + my $suffix = $field[0]; + push(@{$sfdarray}, $suffix); + + shift(@field); + my $index = 0; + + while (@field) { + if ($field[0] =~ /(.*):$/) { + $index = $1; + } + elsif ($field[0] =~ /(0x[0-9A-Fa-f]+)_(0x[0-9A-Fa-f]+)/) { + foreach my $i (hex($1) .. hex($2)) { + $sfdhash->{"$suffix $index"} = $i; + $index++; + } + } + shift(@field); + } + } + close(SFD); +} + + +# Read encoding file. +# +# $1: Name of the encoding file. +# $2: Reference to the target hash file, mapping from the charset +# to Unicode. +# $3: Set to 1 if the needed mapping data is not in field 1 and 2, but in +# field 2 and 3. + +sub read_encfile { + my ($encfile, $enchash, $doshift) = @_; + + print("Reading encoding file \`$encfile'...\n"); + + open(ENC, $encfile) + || die("$prog: can't open \`$encfile': $!\n"); + + while (<ENC>) { + chop; + my @field = split(" "); + next if ($#field < 0); + next if ($field[0] =~ /^#/); + + if ($doshift) { + shift(@field); + } + + my $unicode = $field[1]; + $unicode =~ s/0x//; + my $value = hex($field[0]) + 0x8080; + $enchash->{$value} = hex($unicode); + } + close(ENC); +} + + +# Read AFM file. +# +# $1: Name of the AFM file. +# $2: Reference to the target array which maps from Unicode to the string +# "<subfont name> <subfont index> <width> <height> <depth>". +# $3: Reference to the SFD hash (as extracted by `read_sfdfile'). +# $4: Reference to the encoding hash (as extracted by `read_encfile'). +# $5: Suffix. + +sub read_afmfile { + my ($afmfile, $unicarray, $sfdhash, $enchash, $suffix) = @_; + + print("Reading metric file \`$afmfile'...\n"); + + open(AFM, $afmfile) + || die("$prog: can't open \`$afmfile': $!\n"); + + $afmfile =~ s/\.[^.]*$//; + while (<AFM>) { + if (/^C (\d+) ;/) { + my $key = "$suffix $1"; + my $value = $sfdhash->{$key}; + my $unicvalue = $enchash->{$value}; + my $s = "$afmfile $1"; + + # Add advance width. + / WX (.*?) ;/; + $s .= " $1"; + + # Add glyph height and depth. + / B .*? (.*?) .*? (.*?) ;/; + $s .= " $1 $2"; + + $unicarray->[$unicvalue] = $s; + } + } + close(AFM); +} + + +# Write VPL file. +# +# $1: Name of the VPL file. +# $2: Reference to list which holds the font entries. An entry has the +# form `<idx> <subfont> <subfont_idx> <adv_width> <height> <depth>'. + +sub write_vplfile { + my ($vplfile, $glypharray) = @_; + + my %subfonts; + my $subcount = 0; + + foreach my $entry (@{$glypharray}) { + my @field = split(" ", $entry); + my $subfont = $field[1]; + if (!defined ($subfonts{$subfont})) { + $subfonts{$subfont} = $subcount; + $subcount++; + } + } + + print("Writing virtual property list file \`$vplfile'...\n"); + + open(VPL, ">", $vplfile) + || die("$prog: can't open \`$vplfile': $!\n"); + my $oldfh = select(VPL); + + print("(VTITLE Created by \`$prog " . join(" ", @args) . "')\n"); + print("(FAMILY TEX-\U$uninamestem\E)\n"); + print("(CODINGSCHEME DNPUNICODE)\n"); + print("(FONTDIMEN\n"); + print(" (SPACE R 0.5)\n"); + print(" (XHEIGHT R 0.4)\n"); + print(" (QUAD R 1)\n"); + print(" )\n"); + + foreach my $subfont + (sort { $subfonts{$a} <=> $subfonts{$b} } keys %subfonts) { + print("(MAPFONT D $subfonts{$subfont}\n"); + print(" (FONTNAME $subfont)\n"); + print(" )\n"); + } + + foreach my $entry (@{$glypharray}) { + my @field = split(" ", $entry); + my $index = $field[0]; + my $subnumber = $subfonts{$field[1]}; + my $subindex = $field[2]; + my $adv_width = $field[3] / 1000.0; + my $depth = $field[4] / -1000.0; + my $height = $field[5] / 1000.0; + + print("(CHARACTER D $index\n"); + print(" (CHARWD R $adv_width)\n"); + print(" (CHARHT R $height)\n"); + print(" (CHARDP R $depth)\n"); + print(" (MAP\n"); + print(" (SELECTFONT D $subnumber)\n"); + print(" (SETCHAR D $subindex)\n"); + print(" )\n"); + print(" )\n"); + } + + close(VPL); + select($oldfh); +} + + +# eof diff --git a/Master/texmf-dist/source/latex/cjk/contrib/wadalab/wadalab.map b/Master/texmf-dist/source/latex/cjk/contrib/wadalab/wadalab.map new file mode 100644 index 00000000000..dd008d525fa --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/contrib/wadalab/wadalab.map @@ -0,0 +1,187 @@ + +% Wadalab Japanese fonts + +dgjgreek dgjgreek <dgjgreek.pfb +dgjhira dgjhira <dgjhira.pfb +dgjkata dgjkata <dgjkata.pfb +dgjkeisen dgjkeisen <dgjkeisen.pfb +dgjroma dgjroma <dgjroma.pfb +dgjrussian dgjrussian <dgjrussian.pfb +dgjsy dgjsy <dgjsy.pfb +dgjka dgjka <dgjka.pfb +dgjkb dgjkb <dgjkb.pfb +dgjkc dgjkc <dgjkc.pfb +dgjkd dgjkd <dgjkd.pfb +dgjke dgjke <dgjke.pfb +dgjkf dgjkf <dgjkf.pfb +dgjkg dgjkg <dgjkg.pfb +dgjkh dgjkh <dgjkh.pfb +dgjki dgjki <dgjki.pfb +dgjkj dgjkj <dgjkj.pfb +dgjkk dgjkk <dgjkk.pfb +dgjkl dgjkl <dgjkl.pfb +dgjkm dgjkm <dgjkm.pfb +dgjkn dgjkn <dgjkn.pfb +dgjko dgjko <dgjko.pfb +dgjkp dgjkp <dgjkp.pfb +dgjkq dgjkq <dgjkq.pfb +dgjkr dgjkr <dgjkr.pfb +dgjks dgjks <dgjks.pfb +dgjkt dgjkt <dgjkt.pfb +dgjku dgjku <dgjku.pfb +dgjkv dgjkv <dgjkv.pfb +dgjkw dgjkw <dgjkw.pfb +dgjkx dgjkx <dgjkx.pfb +dgjky dgjky <dgjky.pfb +dgjkz dgjkz <dgjkz.pfb + +dmjgreek dmjgreek <dmjgreek.pfb +dmjhira dmjhira <dmjhira.pfb +dmjkata dmjkata <dmjkata.pfb +dmjkeisen dmjkeisen <dmjkeisen.pfb +dmjroma dmjroma <dmjroma.pfb +dmjrussian dmjrussian <dmjrussian.pfb +dmjsy dmjsy <dmjsy.pfb +dmjka dmjka <dmjka.pfb +dmjkb dmjkb <dmjkb.pfb +dmjkc dmjkc <dmjkc.pfb +dmjkd dmjkd <dmjkd.pfb +dmjke dmjke <dmjke.pfb +dmjkf dmjkf <dmjkf.pfb +dmjkg dmjkg <dmjkg.pfb +dmjkh dmjkh <dmjkh.pfb +dmjki dmjki <dmjki.pfb +dmjkj dmjkj <dmjkj.pfb +dmjkk dmjkk <dmjkk.pfb +dmjkl dmjkl <dmjkl.pfb +dmjkm dmjkm <dmjkm.pfb +dmjkn dmjkn <dmjkn.pfb +dmjko dmjko <dmjko.pfb +dmjkp dmjkp <dmjkp.pfb +dmjkq dmjkq <dmjkq.pfb +dmjkr dmjkr <dmjkr.pfb +dmjks dmjks <dmjks.pfb +dmjkt dmjkt <dmjkt.pfb +dmjku dmjku <dmjku.pfb +dmjkv dmjkv <dmjkv.pfb +dmjkw dmjkw <dmjkw.pfb +dmjkx dmjkx <dmjkx.pfb +dmjky dmjky <dmjky.pfb +dmjkz dmjkz <dmjkz.pfb + +mcjgreek mcjgreek <mcjgreek.pfb +mcjhira mcjhira <mcjhira.pfb +mcjkata mcjkata <mcjkata.pfb +mcjkeisen mcjkeisen <mcjkeisen.pfb +mcjroma mcjroma <mcjroma.pfb +mcjrussian mcjrussian <mcjrussian.pfb +mcjsy mcjsy <mcjsy.pfb +mcjka mcjka <mcjka.pfb +mcjkb mcjkb <mcjkb.pfb +mcjkc mcjkc <mcjkc.pfb +mcjkd mcjkd <mcjkd.pfb +mcjke mcjke <mcjke.pfb +mcjkf mcjkf <mcjkf.pfb +mcjkg mcjkg <mcjkg.pfb +mcjkh mcjkh <mcjkh.pfb +mcjki mcjki <mcjki.pfb +mcjkj mcjkj <mcjkj.pfb +mcjkk mcjkk <mcjkk.pfb +mcjkl mcjkl <mcjkl.pfb +mcjkm mcjkm <mcjkm.pfb +mcjkn mcjkn <mcjkn.pfb +mcjko mcjko <mcjko.pfb +mcjkp mcjkp <mcjkp.pfb +mcjkq mcjkq <mcjkq.pfb +mcjkr mcjkr <mcjkr.pfb +mcjks mcjks <mcjks.pfb +mcjkt mcjkt <mcjkt.pfb +mcjku mcjku <mcjku.pfb +mcjkv mcjkv <mcjkv.pfb +mcjkw mcjkw <mcjkw.pfb +mcjkx mcjkx <mcjkx.pfb +mcjky mcjky <mcjky.pfb +mcjkz mcjkz <mcjkz.pfb + +mrjgreek mrjgreek <mrjgreek.pfb +mrjhira mrjhira <mrjhira.pfb +mrjkata mrjkata <mrjkata.pfb +mrjkeisen mrjkeisen <mrjkeisen.pfb +mrjroma mrjroma <mrjroma.pfb +mrjrussian mrjrussian <mrjrussian.pfb +mrjsy mrjsy <mrjsy.pfb +mrjka mrjka <mrjka.pfb +mrjkb mrjkb <mrjkb.pfb +mrjkc mrjkc <mrjkc.pfb +mrjkd mrjkd <mrjkd.pfb +mrjke mrjke <mrjke.pfb +mrjkf mrjkf <mrjkf.pfb +mrjkg mrjkg <mrjkg.pfb +mrjkh mrjkh <mrjkh.pfb +mrjki mrjki <mrjki.pfb +mrjkj mrjkj <mrjkj.pfb +mrjkk mrjkk <mrjkk.pfb +mrjkl mrjkl <mrjkl.pfb +mrjkm mrjkm <mrjkm.pfb +mrjkn mrjkn <mrjkn.pfb +mrjko mrjko <mrjko.pfb +mrjkp mrjkp <mrjkp.pfb +mrjkq mrjkq <mrjkq.pfb +mrjkr mrjkr <mrjkr.pfb +mrjks mrjks <mrjks.pfb +mrjkt mrjkt <mrjkt.pfb +mrjku mrjku <mrjku.pfb +mrjkv mrjkv <mrjkv.pfb +mrjkw mrjkw <mrjkw.pfb +mrjkx mrjkx <mrjkx.pfb +mrjky mrjky <mrjky.pfb +mrjkz mrjkz <mrjkz.pfb + +mc2jka mc2jka <mc2jka.pfb +mc2jkb mc2jkb <mc2jkb.pfb +mc2jkc mc2jkc <mc2jkc.pfb +mc2jkd mc2jkd <mc2jkd.pfb +mc2jke mc2jke <mc2jke.pfb +mc2jkf mc2jkf <mc2jkf.pfb +mc2jkg mc2jkg <mc2jkg.pfb +mc2jkh mc2jkh <mc2jkh.pfb +mc2jki mc2jki <mc2jki.pfb +mc2jkj mc2jkj <mc2jkj.pfb +mc2jkk mc2jkk <mc2jkk.pfb +mc2jkl mc2jkl <mc2jkl.pfb +mc2jkm mc2jkm <mc2jkm.pfb +mc2jkn mc2jkn <mc2jkn.pfb +mc2jko mc2jko <mc2jko.pfb +mc2jkp mc2jkp <mc2jkp.pfb +mc2jkq mc2jkq <mc2jkq.pfb +mc2jkr mc2jkr <mc2jkr.pfb +mc2jks mc2jks <mc2jks.pfb +mc2jkt mc2jkt <mc2jkt.pfb +mc2jku mc2jku <mc2jku.pfb +mc2jkv mc2jkv <mc2jkv.pfb +mc2jkw mc2jkw <mc2jkw.pfb + +mr2jka mr2jka <mr2jka.pfb +mr2jkb mr2jkb <mr2jkb.pfb +mr2jkc mr2jkc <mr2jkc.pfb +mr2jkd mr2jkd <mr2jkd.pfb +mr2jke mr2jke <mr2jke.pfb +mr2jkf mr2jkf <mr2jkf.pfb +mr2jkg mr2jkg <mr2jkg.pfb +mr2jkh mr2jkh <mr2jkh.pfb +mr2jki mr2jki <mr2jki.pfb +mr2jkj mr2jkj <mr2jkj.pfb +mr2jkk mr2jkk <mr2jkk.pfb +mr2jkl mr2jkl <mr2jkl.pfb +mr2jkm mr2jkm <mr2jkm.pfb +mr2jkn mr2jkn <mr2jkn.pfb +mr2jko mr2jko <mr2jko.pfb +mr2jkp mr2jkp <mr2jkp.pfb +mr2jkq mr2jkq <mr2jkq.pfb +mr2jkr mr2jkr <mr2jkr.pfb +mr2jks mr2jks <mr2jks.pfb +mr2jkt mr2jkt <mr2jkt.pfb +mr2jku mr2jku <mr2jku.pfb +mr2jkv mr2jkv <mr2jkv.pfb +mr2jkw mr2jkw <mr2jkw.pfb + diff --git a/Master/texmf-dist/source/latex/cjk/utils/Bg5conv/bg5conv.1 b/Master/texmf-dist/source/latex/cjk/utils/Bg5conv/bg5conv.1 new file mode 100644 index 00000000000..90af2cd08e5 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/Bg5conv/bg5conv.1 @@ -0,0 +1,110 @@ +.\" man page for bg5conv +.\" Copyright (C) 1994-2008 Werner Lemberg <wl@gnu.org> +.\" +.\" 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 in doc/COPYING; if not, write to the Free +.\" Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +.\" MA 02110-1301 USA +. +.TH BG5CONV 1 22-May-2008 "CJK Version 4.8.0" +. +.\" ==== +.\" ==== macro definitions +.\" ==== +. +.\" here we define \TeX for troff and nroff +.if t .ds TX \fRT\\h'-0.1667m'\\v'0.20v'E\\v'-0.20v'\\h'-0.125m'X\fP +.if n .ds TX TeX +. +.\" and here the same for \LaTeX +.if t \{\ +.ie '\*(.T'dvi' \ +.ds LX \fRL\h'-0.36m'\v'-0.15v'\s-3A\s0\h'-0.15m'\v'0.15v'\fP\*(TX +.el .ds LX \fRL\h'-0.36m'\v'-0.22v'\s-2A\s0\h'-0.15m'\v'0.22v'\fP\*(TX +.\} +.if n .ds LX LaTeX +. +.\" \LaTeXe +.\" note that we need \vareps for TeX instead of \eps which can only be +.\" accessed with the \N escape sequence (in the Math Italic font) +.if t \{\ +.ie '\*(.T'dvi' .ds LE \*(LX\h'0.15m'2\v'0.20v'\f(MI\N'34'\fP\v'-0.20v' +.el .ds LE \*(LX\h'0.15m'2\v'0.20v'\(*e\v'-0.20v' +.\} +.if n .ds LE LaTeX\ 2e +. +.\" a typewriter font +.if t \{\ +.de C +\fC\\$1\fP\\$2 +.. +.\} +.if n \{\ +.de C +\\$1\\$2 +.. +.\} +. +.\" ==== +.\" ==== end of macro definitions +.\" ==== +. +. +. +.SH NAME +bg5conv \- convert a TeX document in Big\ 5 encoding into `preprocessed' +form. +. +. +.SH SYNOPSIS +.B bg5conv +< +.I infile +> +.I outfile +. +. +.SH DESCRIPTION +Big\ 5 encoding for traditional Chinese uses the characters +.C { , +.C } , +and +.C \e +which have special meanings in \*(TX +documents. +.PP +After processing a \*(LE +document which contains Big\ 5 characters with +.B bg5conv +you need not care about these special characters. +.PP +This filter is part of the +.B CJK +macro package for \*(LE. +. +. +.SH "SEE ALSO" +.BR \%sjisconv (1), +.BR \%cefconv (1), +.BR cef5conv (1), +.BR \%cefsconv (1), +.BR \%extconv (1), +.br +the +.B CJK +documentation files. +. +. +.SH AUTHOR +Werner Lemberg +.C <wl@gnu.org> diff --git a/Master/texmf-dist/source/latex/cjk/utils/Bg5conv/bg5conv.c b/Master/texmf-dist/source/latex/cjk/utils/Bg5conv/bg5conv.c new file mode 100644 index 00000000000..595292ea3b6 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/Bg5conv/bg5conv.c @@ -0,0 +1,36 @@ +#define banner \ +"bg5conv (CJK ver. 4.8.0)" \ + +/*2:*/ +#line 94 "/home/wl/git/cjk/cjk-4.8.0/utils/Bg5conv/bg5conv.w" + +#include <stdio.h> +#include <stdlib.h> + + +int main(argc,argv) +int argc; +char*argv[]; + +{int ch; + +fprintf(stdout,"\\def\\CJKpreproc{%s}",banner); + +ch= fgetc(stdin); + +while(!feof(stdin)) +{if(ch>=0xA1&&ch<=0xFE) +{fprintf(stdout,"\177%c\177",ch); + +ch= fgetc(stdin); +if(!feof(stdin)) +fprintf(stdout,"%d\177",ch); +} +else +fputc(ch,stdout); + +ch= fgetc(stdin); +} +exit(EXIT_SUCCESS); +return 0; +}/*:2*/ diff --git a/Master/texmf-dist/source/latex/cjk/utils/Bg5conv/bg5conv.w b/Master/texmf-dist/source/latex/cjk/utils/Bg5conv/bg5conv.w new file mode 100644 index 00000000000..c3c60970622 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/Bg5conv/bg5conv.w @@ -0,0 +1,124 @@ +% This is the cweb file bg5conv.w of the CJK Package Ver. 4.8.0 22-May-2008 + +% Copyright (C) 1994-2008 Werner Lemberg <wl@@gnu.org> +% +% 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 in doc/COPYING; if not, write to the Free +% Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +% MA 02110-1301 USA + +% To print this CWEB file you should (but not must) use the CWEAVE of the +% c2cweb-package (found at the CTAN archives, e.g. ftp.dante.de) and then say +% +% cweave +a bg5conv.w +% +% This (fully compatible) CWEAVE can transform CWEB-files with alternative +% output rules (look at the position of braces below!) the author (it's me +% too :-) prefer. Otherwise this file will be formatted traditionally. + +\def\title{bg5conv (CJK Version 4.8.0)} + +\def\topofcontents{ + \null\vfill + \centerline{\titlefont The {\ttitlefont bg5conv} program} + \vskip 20pt + \centerline{(CJK Version 4.8.0)} + \vfill} + +\def\botofcontents{ + \vfill + \noindent + Copyright \copyright\ 1996, 1998 by Werner Lemberg + \bigskip\noindent + Permission is granted to make and distribute verbatim copies of this + document provided that the copyright notice and this permission notice + are preserved on all copies. + + \smallskip\noindent + Permission is granted to copy and distribute modified versions of this + document under the conditions for verbatim copying, provided that the + entire resulting derived work is distributed under the terms of a + permission notice identical to this one.} + +\pageno=\contentspagenumber \advance\pageno by 1 +\let\maybe=\iftrue +\fullpageheight=240mm +\pageheight=223mm +\pagewidth=158mm +\setpage +\frenchspacing + +\noinx +\nosecs +\nocon + +@* Function and Use. +This small program will convert Big~5 encoded Chinese characters into a +`preprocessed' form. The need of this program arises from the fact that this +encoding uses the characters `\.{\\}', `\.{\{}', and `\.{\}}' which have +special meanings in \TeX. + +Use this program as a filter: + +\hskip 2em \.{bg5conv < input\_file > output\_file} + + +@* The program. +The only function of this program is to replace all occurrences of Big 5 +encoded characters \.{XY} (\.{X} and \.{Y} are the first and the second byte +of the character) with +\.{\char94 \char94 7fX\char94 \char94 7fZZZ\char94 \char94 7f}, where +\.{ZZZ} represents the second byte as a decimal number. \.{0x7F} is used as +an active character and delimiter. + +Additionally we define a \TeX\ macro at the very beginning to signal a +preprocessed file. + +The following code is very simple. No error detection is done because \TeX\ +which will see the output of \.{bg5conv} complains loudly if something is +wrong. + +@d banner +"bg5conv (CJK ver. 4.8.0)" + +@c +#include <stdio.h> +#include <stdlib.h>@# + + +int main(argc, argv) + int argc; + char *argv[]; + + {int ch; + + fprintf(stdout, "\\def\\CJKpreproc{%s}", banner);@# + + ch = fgetc(stdin);@# + + while(!feof(stdin)) + {if(ch >= 0xA1 && ch <= 0xFE) + {fprintf(stdout, "\177%c\177", ch);@# + + ch = fgetc(stdin); + if(!feof(stdin)) + fprintf(stdout, "%d\177", ch); + } + else + fputc(ch, stdout);@# + + ch = fgetc(stdin); + } + exit(EXIT_SUCCESS); + return 0; /* never reached */ + } diff --git a/Master/texmf-dist/source/latex/cjk/utils/Bg5conv/bg5latex b/Master/texmf-dist/source/latex/cjk/utils/Bg5conv/bg5latex new file mode 100644 index 00000000000..30195776a87 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/Bg5conv/bg5latex @@ -0,0 +1,43 @@ +#! /bin/sh + +# Copyright (C) 1994-2008 Werner Lemberg <wl@gnu.org> +# +# 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 in doc/COPYING; if not, write to the Free +# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +# MA 02110-1301 USA + +n=1 +argv= + +# get last argument +while test 1 -lt $#; do + eval argv$n=\$1 + argv="$argv \"\$argv$n\"" + n=`expr $n + 1` + shift +done + +# replace extension with .cjk or append .cjk if there is no extension +tex=$1 +case $tex in +""|*.cjk) + echo >&2 "Usage: $0 [options] latex-file" + exit 1;; +*) + aux=`expr "X$tex" : 'X\(.*\)\.[^/]*$' \| "X$tex" : 'X\(.*\)'`.cjk;; +esac + +bg5conv < "$tex" > "$aux" && eval latex "$argv" "\$aux" + +# EOF diff --git a/Master/texmf-dist/source/latex/cjk/utils/Bg5conv/bg5latex.bat b/Master/texmf-dist/source/latex/cjk/utils/Bg5conv/bg5latex.bat new file mode 100755 index 00000000000..91e7dfd8575 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/Bg5conv/bg5latex.bat @@ -0,0 +1,3 @@ +call f_name %1
+bg5conv < %1 > %fd%%fp%%fn%.cjk
+latex %fd%%fu%%fn%.cjk
diff --git a/Master/texmf-dist/source/latex/cjk/utils/Bg5conv/bg5latex.cmd b/Master/texmf-dist/source/latex/cjk/utils/Bg5conv/bg5latex.cmd new file mode 100644 index 00000000000..de695fcb554 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/Bg5conv/bg5latex.cmd @@ -0,0 +1,44 @@ +/*----------------------------------------------------------------------*\ + bg5latex.cmd + + This file is part of the CJK macro package for LaTeX2e ver. 4.8.0 + + Copyright (C) 1994-2008 Wonkoo Kim <wkim+@pitt.edu> + + 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 in doc/COPYING; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, + MA 02110-1301 USA + + Wonkoo Kim (wkim+@pitt.edu), September 2, 1996 +\*----------------------------------------------------------------------*/ + +Call RxFuncAdd 'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs' +Call SysLoadFuncs + +parse arg file + +drive = filespec('drive', file) +path = filespec('path', file) +fname = filespec('name', file) +m = lastpos('.', fname) +if (m = 0) then m = length(fname) + 1 +cjkfile = drive||path||delstr(fname, m)||'.cjk' + +'bg5conv <' file '>' cjkfile + +ucjkfile = translate(cjkfile,'/','\') +if stream(cjkfile, 'C', 'QUERY EXISTS') \= '' then + 'call latex.cmd' ucjkfile + +/* End of bg5latex.cmd */ diff --git a/Master/texmf-dist/source/latex/cjk/utils/Bg5conv/bg5pdflatex b/Master/texmf-dist/source/latex/cjk/utils/Bg5conv/bg5pdflatex new file mode 100644 index 00000000000..ae165527569 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/Bg5conv/bg5pdflatex @@ -0,0 +1,43 @@ +#! /bin/sh + +# Copyright (C) 1994-2008 Werner Lemberg <wl@gnu.org> +# +# 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 in doc/COPYING; if not, write to the Free +# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +# MA 02110-1301 USA + +n=1 +argv= + +# get last argument +while test 1 -lt $#; do + eval argv$n=\$1 + argv="$argv \"\$argv$n\"" + n=`expr $n + 1` + shift +done + +# replace extension with .cjk or append .cjk if there is no extension +tex=$1 +case $tex in +""|*.cjk) + echo >&2 "Usage: $0 [options] pdflatex-file" + exit 1;; +*) + aux=`expr "X$tex" : 'X\(.*\)\.[^/]*$' \| "X$tex" : 'X\(.*\)'`.cjk;; +esac + +bg5conv < "$tex" > "$aux" && eval pdflatex "$argv" "\$aux" + +# EOF diff --git a/Master/texmf-dist/source/latex/cjk/utils/CEFconv/cef5conv.1 b/Master/texmf-dist/source/latex/cjk/utils/CEFconv/cef5conv.1 new file mode 100644 index 00000000000..5d9b7f5d8c4 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/CEFconv/cef5conv.1 @@ -0,0 +1,127 @@ +.\" man page for cef5conv +.\" Copyright (C) 1994-2008 Werner Lemberg <wl@gnu.org> +.\" +.\" 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 in doc/COPYING; if not, write to the Free +.\" Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +.\" MA 02110-1301 USA +. +.TH CEF5CONV 1 22-May-2008 "CJK Version 4.8.0" +. +.\" ==== +.\" ==== macro definitions +.\" ==== +. +.\" here we define \TeX for troff and nroff +.if t .ds TX \fRT\\h'-0.1667m'\\v'0.20v'E\\v'-0.20v'\\h'-0.125m'X\fP +.if n .ds TX TeX +. +.\" and here the same for \LaTeX +.if t \{\ +.ie '\*(.T'dvi' \ +.ds LX \fRL\h'-0.36m'\v'-0.15v'\s-3A\s0\h'-0.15m'\v'0.15v'\fP\*(TX +.el .ds LX \fRL\h'-0.36m'\v'-0.22v'\s-2A\s0\h'-0.15m'\v'0.22v'\fP\*(TX +.\} +.if n .ds LX LaTeX +. +.\" \LaTeXe +.\" note that we need \vareps for TeX instead of \eps which can only be +.\" accessed with the \N escape sequence (in the Math Italic font) +.if t \{\ +.ie '\*(.T'dvi' .ds LE \*(LX\h'0.15m'2\v'0.20v'\f(MI\N'34'\fP\v'-0.20v' +.el .ds LE \*(LX\h'0.15m'2\v'0.20v'\(*e\v'-0.20v' +.\} +.if n .ds LE LaTeX\ 2e +. +.\" a typewriter font +.if t \{\ +.de C +\fC\\$1\fP +.. +.\} +.if n \{\ +.de C +\\$1 +.. +.\} +. +.\" ==== +.\" ==== end of macro definitions +.\" ==== +. +. +. +.SH NAME +cef5conv \- convert a TeX document in Big\ 5 encoding containing CEF macros +into `preprocessed' form. +. +. +.SH SYNOPSIS +.B cef5conv +< +.I infile +> +.I outfile +. +. +.SH DESCRIPTION +The +.B Chinese Encoding Framework +.RB ( CEF ) +developed by Christian Wittern +.C <cwittern@conline.central.de> +makes it possible to include CJK characters in various encodings using the +SGML macros +.B &CX-aabb; +for Big\ 5 and CNS encoding and +.B &U-aabb; +for Unicode +.RB ( X +denotes a number between 0 and 7; 0 represents Big\ 5 encoding, 1-7 CNS +encoding planes 1-7. +.B aabb +is either a decimal or hexadecimal number). +.PP +.B cef5conv +converts the CEF macros of a Big\ 5 encoded document together with the Big\ +5 encoding itself into a form which can directly processed with \*(LE. +It is identical to +.IP +.B bg5conv +< +.I infile +| +.B cefconv +> +.I outfile +.PP +This filter is part of the +.B CJK +macro package for \*(LE. +. +. +.SH "SEE ALSO" +.BR \%sjisconv (1), +.BR bg5conv (1), +.BR \%cefconv (1), +.BR \%cefsconv (1), +.BR \%extconv (1), +.br +the +.B CJK +documentation files. +. +. +.SH AUTHOR +Werner Lemberg +.C <wl@gnu.org> diff --git a/Master/texmf-dist/source/latex/cjk/utils/CEFconv/cef5conv.c b/Master/texmf-dist/source/latex/cjk/utils/CEFconv/cef5conv.c new file mode 100644 index 00000000000..b62eb30443b --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/CEFconv/cef5conv.c @@ -0,0 +1,138 @@ +#define banner \ +"cef5conv (CJK ver. 4.8.0)" \ + +/*2:*/ +#line 108 "/home/wl/git/cjk/cjk-4.8.0/utils/CEFconv/cef5conv.w" + +#include <ctype.h> +#include <stdio.h> +#include <stdlib.h> + + +int main(argc,argv) +int argc; +char*argv[]; + +{int ch,i; +unsigned char in[16]; +unsigned char out[32]; +unsigned char*inp,*outp; + +fprintf(stdout,"\\def\\CNSpreproc{%s}",banner); + +ch= fgetc(stdin); + +while(!feof(stdin)) +{if(ch>=0xA1&&ch<=0xFE) +{fprintf(stdout,"\177%c\177",ch); + +ch= fgetc(stdin); +if(!feof(stdin)) +fprintf(stdout,"%d\177",ch); +} +else if(ch=='&') + +{inp= in; +outp= out; +*inp= ch; +*(++inp)= fgetc(stdin); + +if(*inp=='C'&&!feof(stdin)) +{*(++inp)= fgetc(stdin); +if(*inp=='0'&&!feof(stdin)) +{*(outp++)= 'B'; +*(outp++)= 'g'; +*(outp++)= '5'; +} +else if(*inp>='1'&&*inp<='7'&&!feof(stdin)) +{*(outp++)= 'C'; +*(outp++)= 'N'; +*(outp++)= 'S'; +*(outp++)= *inp; +} +else if((*inp=='X'||*inp=='Y')&&!feof(stdin)) +{*(outp++)= 'C'; +*(outp++)= 'E'; +*(outp++)= 'F'; +*(outp++)= *inp; +} +else +goto no_macro; +} +else if(*inp=='U'&&!feof(stdin)) +{*(outp++)= 'U'; +*(outp++)= 'T'; +*(outp++)= 'F'; +*(outp++)= '8'; +} +else +goto no_macro; + +*(++inp)= fgetc(stdin); +if(*inp!='-'||feof(stdin)) +goto no_macro; + +*(outp++)= '\177'; +*(outp++)= '\"'; +*(outp++)= '0'; + +*(++inp)= fgetc(stdin); +if(isxdigit(*inp)&&*inp<0x80&&!feof(stdin)) +*(outp++)= toupper(*inp); +else +goto no_macro; + +*(++inp)= fgetc(stdin); +if(isxdigit(*inp)&&*inp<0x80&&!feof(stdin)) +*(outp++)= toupper(*inp); +else +goto no_macro; + +*(outp++)= '\177'; +*(outp++)= '\177'; +*(outp++)= '\"'; +*(outp++)= '0'; + +*(++inp)= fgetc(stdin); +if(isxdigit(*inp)&&*inp<0x80&&!feof(stdin)) +*(outp++)= toupper(*inp); +else +goto no_macro; + +*(++inp)= fgetc(stdin); +if(isxdigit(*inp)&&*inp<0x80&&!feof(stdin)) +*(outp++)= toupper(*inp); +else +goto no_macro; + +*(outp++)= '\177'; +*outp= '\0'; + +*(++inp)= fgetc(stdin); +if(*inp!=';'||feof(stdin)) +goto no_macro; + +outp= out; +fprintf(stdout,"\17772\177"); +while(*outp) +fputc(*(outp++),stdout); + +ch= fgetc(stdin); +continue; + +no_macro: +ch= *inp; +i= inp-in; +inp= in; +while(i--) +fputc(*(inp++),stdout); +continue; +} +else +fputc(ch,stdout); + +ch= fgetc(stdin); +} +exit(EXIT_SUCCESS); +return 0; +}/*:2*/ diff --git a/Master/texmf-dist/source/latex/cjk/utils/CEFconv/cef5conv.w b/Master/texmf-dist/source/latex/cjk/utils/CEFconv/cef5conv.w new file mode 100644 index 00000000000..3877e4c19fb --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/CEFconv/cef5conv.w @@ -0,0 +1,240 @@ +% This is the cweb file cef5conv.w of the CJK Package Ver. 4.8.0 22-May-2008 + +% Copyright (C) 1994-2008 Werner Lemberg <wl@@gnu.org> +% +% 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 in doc/COPYING; if not, write to the Free +% Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +% MA 02110-1301 USA + +% To print this CWEB file you should (but not must) use the CWEAVE of the +% c2cweb-package (found at the CTAN archives, e.g. ftp.dante.de) and then say +% +% cweave +a cef5conv.w +% +% This (fully compatible) CWEAVE can transform CWEB-files with alternative +% output rules (look at the position of braces below!) the author (it's me +% too :-) prefer. Otherwise this file will be formatted traditionally. + +\def\title{cef5conv (CJK Version 4.8.0)} + +\def\topofcontents{ + \null\vfill + \centerline{\titlefont The {\ttitlefont cef5conv} program} + \vskip 20pt + \centerline{(CJK Version 4.8.0)} + \vfill} + +\def\botofcontents{ + \vfill + \noindent + Copyright \copyright\ 1996, 1998, 2002 by Werner Lemberg + \bigskip\noindent + Permission is granted to make and distribute verbatim copies of this + document provided that the copyright notice and this permission notice + are preserved on all copies. + + \smallskip\noindent + Permission is granted to copy and distribute modified versions of this + document under the conditions for verbatim copying, provided that the + entire resulting derived work is distributed under the terms of a + permission notice identical to this one.} + +\pageno=\contentspagenumber \advance\pageno by 1 +\let\maybe=\iftrue +\fullpageheight=240mm +\pageheight=223mm +\pagewidth=158mm +\setpage +\frenchspacing + +\noinx +\nosecs +\nocon + +@* Function and Use. +This small program will convert Big~5 encoding with CNS encoded Chinese +characters using the {\it Chinese Encoding Framework (CEF)} into a +`preprocessed' form. The need of this program arises from the fact that +Big~5 encoding uses the characters `\.{\\}', `\.{\{}', and `\.{\}}' which +have special meanings in \TeX. + +Use this program as a filter: + +\hskip 2em \.{cef5conv < input\_file > output\_file} + + +@* The program. +In contrast to \.{cefconv} two tasks will be executed: + +Replacing all occurrences of Big~5 encoded characters \.{XY} (\.{X} and +\.{Y} are the first and the second byte of the character) with +\.{\char94 \char94 7fX\char94 \char94 7fZZZ\char94 \char94 7f}, where +\.{ZZZ} represents the second byte as a decimal number. \.{0x7F} is used as +a control character and a delimiter. + +Replacing CEF macros of the form \.{\&xx-yyzz;} (\.{xx} can be C1--C7 for +the CNS planes 1--7, C0 for Big~5 encoding, an encoding CX reserved for +IRIZ, a private encoding CY, and U for Unicode encoding; \.{yyzz} is a +hexadecimal representation of the code point in this plane) with +\medskip +\quad\.{\char94 \char94 7f72\char94 \char94 7fXX\char94 \char94 7f% +\char94 \char94 7f"0yy\char94 \char94 7f"0zz\char94 \char94 7f}\quad. +\medskip +\.{XX} is the corresponding CJK encoding of \.{xx}; the number `72' +specifies a macro in the file \.{MULEenc.sty} which further processes this +representation -- it is automatically loaded by the \.{CJK} package. + +Additionally we define a \TeX\ macro at the very beginning to signal a +preprocessed file. + +The following code is very simple. No error detection is done because \TeX\ +which will see the output of \.{cef5conv} complains loudly if something is +wrong. + +@d banner +"cef5conv (CJK ver. 4.8.0)" + +@c +#include <ctype.h> +#include <stdio.h> +#include <stdlib.h>@# + + +int main(argc, argv) + int argc; + char *argv[]; + + {int ch, i; + unsigned char in[16]; + unsigned char out[32]; + unsigned char *inp, *outp; + + fprintf(stdout, "\\def\\CNSpreproc{%s}", banner);@# + + ch = fgetc(stdin);@# + + while(!feof(stdin)) + {if(ch >= 0xA1 && ch <= 0xFE) + {fprintf(stdout, "\177%c\177", ch);@# + + ch = fgetc(stdin); + if(!feof(stdin)) + fprintf(stdout, "%d\177", ch); + } + else if(ch == '&') + /* the macro test is hardcoded to make things simple */ + {inp = in; + outp = out; + *inp = ch; + *(++inp) = fgetc(stdin);@# + + if(*inp == 'C' && !feof(stdin)) + {*(++inp) = fgetc(stdin); + if(*inp == '0' && !feof(stdin)) + {*(outp++) = 'B'; + *(outp++) = 'g'; + *(outp++) = '5'; + } + else if(*inp >= '1' && *inp <= '7' && !feof(stdin)) + {*(outp++) = 'C'; + *(outp++) = 'N'; + *(outp++) = 'S'; + *(outp++) = *inp; + } + else if((*inp == 'X' || *inp == 'Y') && !feof(stdin)) + {*(outp++) = 'C'; + *(outp++) = 'E'; + *(outp++) = 'F'; + *(outp++) = *inp; + } + else + goto no_macro; + } + else if(*inp == 'U' && !feof(stdin)) + {*(outp++) = 'U'; + *(outp++) = 'T'; + *(outp++) = 'F'; + *(outp++) = '8'; + } + else + goto no_macro;@# + + *(++inp) = fgetc(stdin); + if(*inp != '-' || feof(stdin)) + goto no_macro;@# + + *(outp++) = '\177'; + *(outp++) = '\"'; + *(outp++) = '0';@# + + *(++inp) = fgetc(stdin); + if(isxdigit(*inp) && *inp < 0x80 && !feof(stdin)) + *(outp++) = toupper(*inp); + else + goto no_macro;@# + + *(++inp) = fgetc(stdin); + if(isxdigit(*inp) && *inp < 0x80 && !feof(stdin)) + *(outp++) = toupper(*inp); + else + goto no_macro;@# + + *(outp++) = '\177'; + *(outp++) = '\177'; + *(outp++) = '\"'; + *(outp++) = '0';@# + + *(++inp) = fgetc(stdin); + if(isxdigit(*inp) && *inp < 0x80 && !feof(stdin)) + *(outp++) = toupper(*inp); + else + goto no_macro;@# + + *(++inp) = fgetc(stdin); + if(isxdigit(*inp) && *inp < 0x80 && !feof(stdin)) + *(outp++) = toupper(*inp); + else + goto no_macro;@# + + *(outp++) = '\177'; + *outp = '\0';@# + + *(++inp) = fgetc(stdin); + if(*inp != ';' || feof(stdin)) + goto no_macro;@# + + outp = out; + fprintf(stdout, "\17772\177"); + while(*outp) + fputc(*(outp++), stdout);@# + + ch = fgetc(stdin); + continue;@# + +no_macro: + ch = *inp; + i = inp - in; + inp = in; + while(i--) + fputc(*(inp++), stdout); + continue; + } + else + fputc(ch, stdout);@# + + ch = fgetc(stdin); + } + exit(EXIT_SUCCESS); + return 0; /* never reached */ + } diff --git a/Master/texmf-dist/source/latex/cjk/utils/CEFconv/cef5latex b/Master/texmf-dist/source/latex/cjk/utils/CEFconv/cef5latex new file mode 100644 index 00000000000..5e609181030 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/CEFconv/cef5latex @@ -0,0 +1,43 @@ +#! /bin/sh + +# Copyright (C) 1994-2008 Werner Lemberg <wl@gnu.org> +# +# 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 in doc/COPYING; if not, write to the Free +# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +# MA 02110-1301 USA + +n=1 +argv= + +# get last argument +while test 1 -lt $#; do + eval argv$n=\$1 + argv="$argv \"\$argv$n\"" + n=`expr $n + 1` + shift +done + +# replace extension with .cjk or append .cjk if there is no extension +tex=$1 +case $tex in +""|*.cjk) + echo >&2 "Usage: $0 [options] latex-file" + exit 1;; +*) + aux=`expr "X$tex" : 'X\(.*\)\.[^/]*$' \| "X$tex" : 'X\(.*\)'`.cjk;; +esac + +cef5conv < "$tex" > "$aux" && eval latex "$argv" "\$aux" + +# EOF diff --git a/Master/texmf-dist/source/latex/cjk/utils/CEFconv/cef5ltx.bat b/Master/texmf-dist/source/latex/cjk/utils/CEFconv/cef5ltx.bat new file mode 100755 index 00000000000..187485301f9 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/CEFconv/cef5ltx.bat @@ -0,0 +1,3 @@ +call f_name %1
+cef5conv < %1 > %fd%%fp%%fn%.cjk
+latex %fd%%fu%%fn%.cjk
diff --git a/Master/texmf-dist/source/latex/cjk/utils/CEFconv/cef5ltx.cmd b/Master/texmf-dist/source/latex/cjk/utils/CEFconv/cef5ltx.cmd new file mode 100644 index 00000000000..325de4b6d89 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/CEFconv/cef5ltx.cmd @@ -0,0 +1,46 @@ +/*----------------------------------------------------------------------*\ + cef5ltx.cmd + + This file is part of the CJK macro package for LaTeX2e ver. 4.8.0 + + This file is part of the CJK macro package for LaTeX2e ver. 4.8.0 + + Copyright (C) 1994-2008 Wonkoo Kim <wkim+@pitt.edu> + + 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 in doc/COPYING; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, + MA 02110-1301 USA + + Wonkoo Kim (wkim+@pitt.edu), September 2, 1996 +\*----------------------------------------------------------------------*/ + +Call RxFuncAdd 'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs' +Call SysLoadFuncs + +parse arg file + +drive = filespec('drive', file) +path = filespec('path', file) +fname = filespec('name', file) +m = lastpos('.', fname) +if (m = 0) then m = length(fname) + 1 +cjkfile = drive||path||delstr(fname, m)||'.cjk' + +'cef5conv <' file '>' cjkfile + +ucjkfile = translate(cjkfile,'/','\') +if stream(cjkfile, 'C', 'QUERY EXISTS') \= '' then + 'call latex.cmd' ucjkfile + +/* End of cef5ltx.cmd */ diff --git a/Master/texmf-dist/source/latex/cjk/utils/CEFconv/cef5pdflatex b/Master/texmf-dist/source/latex/cjk/utils/CEFconv/cef5pdflatex new file mode 100644 index 00000000000..cd1118cd7c3 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/CEFconv/cef5pdflatex @@ -0,0 +1,43 @@ +#! /bin/sh + +# Copyright (C) 1994-2008 Werner Lemberg <wl@gnu.org> +# +# 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 in doc/COPYING; if not, write to the Free +# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +# MA 02110-1301 USA + +n=1 +argv= + +# get last argument +while test 1 -lt $#; do + eval argv$n=\$1 + argv="$argv \"\$argv$n\"" + n=`expr $n + 1` + shift +done + +# replace extension with .cjk or append .cjk if there is no extension +tex=$1 +case $tex in +""|*.cjk) + echo >&2 "Usage: $0 [options] pdflatex-file" + exit 1;; +*) + aux=`expr "X$tex" : 'X\(.*\)\.[^/]*$' \| "X$tex" : 'X\(.*\)'`.cjk;; +esac + +cef5conv < "$tex" > "$aux" && eval pdflatex "$argv" "\$aux" + +# EOF diff --git a/Master/texmf-dist/source/latex/cjk/utils/CEFconv/cefconv.1 b/Master/texmf-dist/source/latex/cjk/utils/CEFconv/cefconv.1 new file mode 100644 index 00000000000..fcadd795f35 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/CEFconv/cefconv.1 @@ -0,0 +1,117 @@ +.\" man page for cefconv +.\" Copyright (C) 1994-2008 Werner Lemberg <wl@gnu.org> +.\" +.\" 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 in doc/COPYING; if not, write to the Free +.\" Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +.\" MA 02110-1301 USA +. +.TH CEFCONV 1 22-May-2008 "CJK Version 4.8.0" +. +.\" ==== +.\" ==== macro definitions +.\" ==== +. +.\" here we define \TeX for troff and nroff +.if t .ds TX \fRT\\h'-0.1667m'\\v'0.20v'E\\v'-0.20v'\\h'-0.125m'X\fP +.if n .ds TX TeX +. +.\" and here the same for \LaTeX +.if t \{\ +.ie '\*(.T'dvi' \ +.ds LX \fRL\h'-0.36m'\v'-0.15v'\s-3A\s0\h'-0.15m'\v'0.15v'\fP\*(TX +.el .ds LX \fRL\h'-0.36m'\v'-0.22v'\s-2A\s0\h'-0.15m'\v'0.22v'\fP\*(TX +.\} +.if n .ds LX LaTeX +. +.\" \LaTeXe +.\" note that we need \vareps for TeX instead of \eps which can only be +.\" accessed with the \N escape sequence (in the Math Italic font) +.if t \{\ +.ie '\*(.T'dvi' .ds LE \*(LX\h'0.15m'2\v'0.20v'\f(MI\N'34'\fP\v'-0.20v' +.el .ds LE \*(LX\h'0.15m'2\v'0.20v'\(*e\v'-0.20v' +.\} +.if n .ds LE LaTeX\ 2e +. +.\" a typewriter font +.if t \{\ +.de C +\fC\\$1\fP +.. +.\} +.if n \{\ +.de C +\\$1 +.. +.\} +. +.\" ==== +.\" ==== end of macro definitions +.\" ==== +. +. +. +.SH NAME +cefconv \- convert a TeX document containing CEF macros into `preprocessed' +form. +. +. +.SH SYNOPSIS +.B cefconv +< +.I infile +> +.I outfile +. +. +.SH DESCRIPTION +The +.B Chinese Encoding Framework +.RB ( CEF ) +developed by Christian Wittern +.C <cwittern@conline.central.de> +makes it possible to include CJK characters in various encodings using the +SGML macros +.B &CX-aabb; +for Big\ 5 and CNS encoding and +.B &U-aabb; +for Unicode +.RB ( X +denotes a number between 0 and 7; 0 represents Big\ 5 encoding, 1-7 CNS +encoding planes 1-7. +.B aabb +is either a decimal or hexadecimal number) +.PP +.B \%cefconv +converts the CEF macros into a form which can directly processed with \*(LE. +.PP +This filter is part of the +.B CJK +macro package for \*(LE. +. +. +.SH "SEE ALSO" +.BR \%sjisconv (1), +.BR bg5conv (1), +.BR cef5conv (1), +.BR \%cefsconv (1), +.BR \%extconv (1), +.br +the +.B CJK +documentation files. +. +. +.SH AUTHOR +Werner Lemberg +.C <wl@gnu.org> diff --git a/Master/texmf-dist/source/latex/cjk/utils/CEFconv/cefconv.c b/Master/texmf-dist/source/latex/cjk/utils/CEFconv/cefconv.c new file mode 100644 index 00000000000..562c6775922 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/CEFconv/cefconv.c @@ -0,0 +1,130 @@ +#define banner \ +"cefconv (CJK ver. 4.8.0)" \ + +/*2:*/ +#line 100 "/home/wl/git/cjk/cjk-4.8.0/utils/CEFconv/cefconv.w" + +#include <ctype.h> +#include <stdio.h> +#include <stdlib.h> + + +int main(argc,argv) +int argc; +char*argv[]; + +{int ch,i; +unsigned char in[16]; +unsigned char out[32]; +unsigned char*inp,*outp; + +fprintf(stdout,"\\def\\CNSpreproc{%s}",banner); + +ch= fgetc(stdin); + +while(!feof(stdin)) +{if(ch=='&') +{inp= in; +outp= out; +*inp= ch; +*(++inp)= fgetc(stdin); + +if(*inp=='C'&&!feof(stdin)) +{*(++inp)= fgetc(stdin); +if(*inp=='0'&&!feof(stdin)) +{*(outp++)= 'B'; +*(outp++)= 'g'; +*(outp++)= '5'; +} +else if(*inp>='1'&&*inp<='7'&&!feof(stdin)) +{*(outp++)= 'C'; +*(outp++)= 'N'; +*(outp++)= 'S'; +*(outp++)= *inp; +} +else if((*inp=='X'||*inp=='Y')&&!feof(stdin)) +{*(outp++)= 'C'; +*(outp++)= 'E'; +*(outp++)= 'F'; +*(outp++)= *inp; +} +else +goto no_macro; +} +else if(*inp=='U'&&!feof(stdin)) +{*(outp++)= 'U'; +*(outp++)= 'T'; +*(outp++)= 'F'; +*(outp++)= '8'; +} +else +goto no_macro; + +*(++inp)= fgetc(stdin); +if(*inp!='-'||feof(stdin)) +goto no_macro; + +*(outp++)= '\177'; +*(outp++)= '\177'; +*(outp++)= '\"'; +*(outp++)= '0'; + +*(++inp)= fgetc(stdin); +if(isxdigit(*inp)&&*inp<0x80&&!feof(stdin)) +*(outp++)= toupper(*inp); +else +goto no_macro; + +*(++inp)= fgetc(stdin); +if(isxdigit(*inp)&&*inp<0x80&&!feof(stdin)) +*(outp++)= toupper(*inp); +else +goto no_macro; + +*(outp++)= '\177'; +*(outp++)= '\"'; +*(outp++)= '0'; + +*(++inp)= fgetc(stdin); +if(isxdigit(*inp)&&*inp<0x80&&!feof(stdin)) +*(outp++)= toupper(*inp); +else +goto no_macro; + +*(++inp)= fgetc(stdin); +if(isxdigit(*inp)&&*inp<0x80&&!feof(stdin)) +*(outp++)= toupper(*inp); +else +goto no_macro; + +*(outp++)= '\177'; +*outp= '\0'; + +*(++inp)= fgetc(stdin); +if(*inp!=';'||feof(stdin)) +goto no_macro; + +outp= out; +fprintf(stdout,"\17772\177"); +while(*outp) +fputc(*(outp++),stdout); + +ch= fgetc(stdin); +continue; + +no_macro: +ch= *inp; +i= inp-in; +inp= in; +while(i--) +fputc(*(inp++),stdout); +continue; +} +else +fputc(ch,stdout); + +ch= fgetc(stdin); +} +exit(EXIT_SUCCESS); +return 0; +}/*:2*/ diff --git a/Master/texmf-dist/source/latex/cjk/utils/CEFconv/cefconv.w b/Master/texmf-dist/source/latex/cjk/utils/CEFconv/cefconv.w new file mode 100644 index 00000000000..b376926e978 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/CEFconv/cefconv.w @@ -0,0 +1,224 @@ +% This is the cweb file cefconv.w of the CJK Package Ver. 4.8.0 22-May-2008 + +% Copyright (C) 1994-2008 Werner Lemberg <wl@@gnu.org> +% +% 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 in doc/COPYING; if not, write to the Free +% Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +% MA 02110-1301 USA + +% To print this CWEB file you should (but not must) use the CWEAVE of the +% c2cweb-package (found at the CTAN archives, e.g. ftp.dante.de) and then say +% +% cweave +a cefconv.w +% +% This (fully compatible) CWEAVE can transform CWEB-files with alternative +% output rules (look at the position of braces below!) the author (it's me +% too :-) prefer. Otherwise this file will be formatted traditionally. + +\def\title{cefconv (CJK Version 4.8.0)} + +\def\topofcontents{ + \null\vfill + \centerline{\titlefont The {\ttitlefont cefconv} program} + \vskip 20pt + \centerline{(CJK Version 4.8.0)} + \vfill} + +\def\botofcontents{ + \vfill + \noindent + Copyright \copyright\ 1996, 1998, 2002 by Werner Lemberg + \bigskip\noindent + Permission is granted to make and distribute verbatim copies of this + document provided that the copyright notice and this permission notice + are preserved on all copies. + + \smallskip\noindent + Permission is granted to copy and distribute modified versions of this + document under the conditions for verbatim copying, provided that the + entire resulting derived work is distributed under the terms of a + permission notice identical to this one.} + +\pageno=\contentspagenumber \advance\pageno by 1 +\let\maybe=\iftrue +\fullpageheight=240mm +\pageheight=223mm +\pagewidth=158mm +\setpage +\frenchspacing + +\noinx +\nosecs +\nocon + +@* Function and Use. +This small program will convert EUC encoding with CNS encoded Chinese +characters using the {\it Chinese Encoding Framework (CEF)} into a +`preprocessed' form, expanding the CEF macros. + +Use this program as a filter: + +\hskip 2em \.{cefconv < input\_file > output\_file} + + +@* The program. +In contrast to \.{cef5conv} or \.{cefsconv}, only one task will be executed: + +Replacing CEF macros of the form \.{\&xx-yyzz;} (\.{xx} can be C1--C7 for +the CNS planes 1--7, C0 for Big~5 encoding, an encoding CX reserved for +IRIZ, a private encoding CY, and U for Unicode encoding; \.{yyzz} is a +hexadecimal representation of the code point in this plane) with +\medskip +\quad\.{\char94 \char94 7f72\char94 \char94 ffXX\char94 \char94 7f% +\char94 \char94 7f"0yy\char94 \char94 7f"0zz\char94 \char94 7f}\quad. +\medskip +\.{XX} is the corresponding CJK encoding of \.{xx}; the number `72' +specifies a macro in the file \.{MULEenc.sty} which further processes this +representation -- it is automatically loaded by the \.{CJK} package. + +Additionally we define an empty \TeX\ macro at the very beginning to signal +a preprocessed file. + +The following code is very simple. No error detection is done because \TeX\ +which will see the output of \.{cefconv} complains loudly if something is +wrong. + +@d banner +"cefconv (CJK ver. 4.8.0)" + +@c +#include <ctype.h> +#include <stdio.h> +#include <stdlib.h>@# + + +int main(argc, argv) + int argc; + char *argv[]; + + {int ch, i; + unsigned char in[16]; + unsigned char out[32]; + unsigned char *inp, *outp; + + fprintf(stdout, "\\def\\CNSpreproc{%s}", banner);@# + + ch = fgetc(stdin);@# + + while(!feof(stdin)) + {if(ch == '&') /* the macro test is hardcoded to make things simple */ + {inp = in; + outp = out; + *inp = ch; + *(++inp) = fgetc(stdin);@# + + if(*inp == 'C' && !feof(stdin)) + {*(++inp) = fgetc(stdin); + if(*inp == '0' && !feof(stdin)) + {*(outp++) = 'B'; + *(outp++) = 'g'; + *(outp++) = '5'; + } + else if(*inp >= '1' && *inp <= '7' && !feof(stdin)) + {*(outp++) = 'C'; + *(outp++) = 'N'; + *(outp++) = 'S'; + *(outp++) = *inp; + } + else if((*inp == 'X' || *inp == 'Y') && !feof(stdin)) + {*(outp++) = 'C'; + *(outp++) = 'E'; + *(outp++) = 'F'; + *(outp++) = *inp; + } + else + goto no_macro; + } + else if(*inp == 'U' && !feof(stdin)) + {*(outp++) = 'U'; + *(outp++) = 'T'; + *(outp++) = 'F'; + *(outp++) = '8'; + } + else + goto no_macro;@# + + *(++inp) = fgetc(stdin); + if(*inp != '-' || feof(stdin)) + goto no_macro;@# + + *(outp++) = '\177'; + *(outp++) = '\177'; + *(outp++) = '\"'; + *(outp++) = '0';@# + + *(++inp) = fgetc(stdin); + if(isxdigit(*inp) && *inp < 0x80 && !feof(stdin)) + *(outp++) = toupper(*inp); + else + goto no_macro;@# + + *(++inp) = fgetc(stdin); + if(isxdigit(*inp) && *inp < 0x80 && !feof(stdin)) + *(outp++) = toupper(*inp); + else + goto no_macro;@# + + *(outp++) = '\177'; + *(outp++) = '\"'; + *(outp++) = '0';@# + + *(++inp) = fgetc(stdin); + if(isxdigit(*inp) && *inp < 0x80 && !feof(stdin)) + *(outp++) = toupper(*inp); + else + goto no_macro;@# + + *(++inp) = fgetc(stdin); + if(isxdigit(*inp) && *inp < 0x80 && !feof(stdin)) + *(outp++) = toupper(*inp); + else + goto no_macro;@# + + *(outp++) = '\177'; + *outp = '\0';@# + + *(++inp) = fgetc(stdin); + if(*inp != ';' || feof(stdin)) + goto no_macro;@# + + outp = out; + fprintf(stdout, "\17772\177"); + while(*outp) + fputc(*(outp++), stdout);@# + + ch = fgetc(stdin); + continue;@# + +no_macro: + ch = *inp; + i = inp - in; + inp = in; + while(i--) + fputc(*(inp++), stdout); + continue; + } + else + fputc(ch, stdout);@# + + ch = fgetc(stdin); + } + exit(EXIT_SUCCESS); + return 0; /* never reached */ + } diff --git a/Master/texmf-dist/source/latex/cjk/utils/CEFconv/ceflatex b/Master/texmf-dist/source/latex/cjk/utils/CEFconv/ceflatex new file mode 100644 index 00000000000..1b110c613c6 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/CEFconv/ceflatex @@ -0,0 +1,43 @@ +#! /bin/sh + +# Copyright (C) 1994-2008 Werner Lemberg <wl@gnu.org> +# +# 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 in doc/COPYING; if not, write to the Free +# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +# MA 02110-1301 USA + +n=1 +argv= + +# get last argument +while test 1 -lt $#; do + eval argv$n=\$1 + argv="$argv \"\$argv$n\"" + n=`expr $n + 1` + shift +done + +# replace extension with .cjk or append .cjk if there is no extension +tex=$1 +case $tex in +""|*.cjk) + echo >&2 "Usage: $0 [options] latex-file" + exit 1;; +*) + aux=`expr "X$tex" : 'X\(.*\)\.[^/]*$' \| "X$tex" : 'X\(.*\)'`.cjk;; +esac + +cefconv < "$tex" > "$aux" && eval latex "$argv" "\$aux" + +# EOF diff --git a/Master/texmf-dist/source/latex/cjk/utils/CEFconv/ceflatex.bat b/Master/texmf-dist/source/latex/cjk/utils/CEFconv/ceflatex.bat new file mode 100755 index 00000000000..ba5925a6df3 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/CEFconv/ceflatex.bat @@ -0,0 +1,3 @@ +call f_name %1
+cefconv < %1 > %fd%%fp%%fn%.cjk
+latex %fd%%fu%%fn%.cjk
diff --git a/Master/texmf-dist/source/latex/cjk/utils/CEFconv/ceflatex.cmd b/Master/texmf-dist/source/latex/cjk/utils/CEFconv/ceflatex.cmd new file mode 100644 index 00000000000..ed43ec94304 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/CEFconv/ceflatex.cmd @@ -0,0 +1,46 @@ +/*----------------------------------------------------------------------*\ + ceflatex.cmd + + This file is part of the CJK macro package for LaTeX2e ver. 4.8.0 + + This file is part of the CJK macro package for LaTeX2e ver. 4.8.0 + + Copyright (C) 1994-2008 Wonkoo Kim <wkim+@pitt.edu> + + 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 in doc/COPYING; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, + MA 02110-1301 USA + + Wonkoo Kim (wkim+@pitt.edu), September 2, 1996 +\*----------------------------------------------------------------------*/ + +Call RxFuncAdd 'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs' +Call SysLoadFuncs + +parse arg file + +drive = filespec('drive', file) +path = filespec('path', file) +fname = filespec('name', file) +m = lastpos('.', fname) +if (m = 0) then m = length(fname) + 1 +cjkfile = drive||path||delstr(fname, m)||'.cjk' + +'cefconv <' file '>' cjkfile + +ucjkfile = translate(cjkfile,'/','\') +if stream(cjkfile, 'C', 'QUERY EXISTS') \= '' then + 'call latex.cmd' ucjkfile + +/* End of ceflatex.cmd */ diff --git a/Master/texmf-dist/source/latex/cjk/utils/CEFconv/cefpdflatex b/Master/texmf-dist/source/latex/cjk/utils/CEFconv/cefpdflatex new file mode 100644 index 00000000000..706114a8c77 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/CEFconv/cefpdflatex @@ -0,0 +1,43 @@ +#! /bin/sh + +# Copyright (C) 1994-2008 Werner Lemberg <wl@gnu.org> +# +# 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 in doc/COPYING; if not, write to the Free +# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +# MA 02110-1301 USA + +n=1 +argv= + +# get last argument +while test 1 -lt $#; do + eval argv$n=\$1 + argv="$argv \"\$argv$n\"" + n=`expr $n + 1` + shift +done + +# replace extension with .cjk or append .cjk if there is no extension +tex=$1 +case $tex in +""|*.cjk) + echo >&2 "Usage: $0 [options] pdflatex-file" + exit 1;; +*) + aux=`expr "X$tex" : 'X\(.*\)\.[^/]*$' \| "X$tex" : 'X\(.*\)'`.cjk;; +esac + +cefconv < "$tex" > "$aux" && eval pdflatex "$argv" "\$aux" + +# EOF diff --git a/Master/texmf-dist/source/latex/cjk/utils/CEFconv/cefsconv.1 b/Master/texmf-dist/source/latex/cjk/utils/CEFconv/cefsconv.1 new file mode 100644 index 00000000000..82995a98b6a --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/CEFconv/cefsconv.1 @@ -0,0 +1,127 @@ +.\" man page for cefsconv +.\" Copyright (C) 1994-2008 Werner Lemberg <wl@gnu.org> +.\" +.\" 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 in doc/COPYING; if not, write to the Free +.\" Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +.\" MA 02110-1301 USA +. +.TH CEFSCONV 1 22-May-2008 "CJK Version 4.8.0" +. +.\" ==== +.\" ==== macro definitions +.\" ==== +. +.\" here we define \TeX for troff and nroff +.if t .ds TX \fRT\\h'-0.1667m'\\v'0.20v'E\\v'-0.20v'\\h'-0.125m'X\fP +.if n .ds TX TeX +. +.\" and here the same for \LaTeX +.if t \{\ +.ie '\*(.T'dvi' \ +.ds LX \fRL\h'-0.36m'\v'-0.15v'\s-3A\s0\h'-0.15m'\v'0.15v'\fP\*(TX +.el .ds LX \fRL\h'-0.36m'\v'-0.22v'\s-2A\s0\h'-0.15m'\v'0.22v'\fP\*(TX +.\} +.if n .ds LX LaTeX +. +.\" \LaTeXe +.\" note that we need \vareps for TeX instead of \eps which can only be +.\" accessed with the \N escape sequence (in the Math Italic font) +.if t \{\ +.ie '\*(.T'dvi' .ds LE \*(LX\h'0.15m'2\v'0.20v'\f(MI\N'34'\fP\v'-0.20v' +.el .ds LE \*(LX\h'0.15m'2\v'0.20v'\(*e\v'-0.20v' +.\} +.if n .ds LE LaTeX\ 2e +. +.\" a typewriter font +.if t \{\ +.de C +\fC\\$1\fP +.. +.\} +.if n \{\ +.de C +\\$1 +.. +.\} +. +.\" ==== +.\" ==== end of macro definitions +.\" ==== +. +. +. +.SH NAME +cefsconv \- convert a TeX document in SJIS encoding containing CEF macros +into `preprocessed' form. +. +. +.SH SYNOPSIS +.B cefsconv +< +.I infile +> +.I outfile +. +. +.SH DESCRIPTION +The +.B Chinese Encoding Framework +.RB ( CEF ) +developed by Christian Wittern +.C <cwittern@conline.central.de> +makes it possible to include CJK characters in various encodings using the +SGML macros +.B &CX-aabb; +for Big\ 5 and CNS encoding and +.B &U-aabb; +for Unicode +.RB ( X +denotes a number between 0 and 7; 0 represents Big\ 5 encoding, 1-7 CNS +encoding planes 1-7. +.B aabb +is either a decimal or hexadecimal number). +.PP +.B \%cefsconv +converts the CEF macros of a SJIS encoded document together with the SJIS +encoding itself into a form which can directly processed with \*(LE. +It is identical to +.IP +.B sjisconv +< +.I infile +| +.B cefconv +> +.I outfile +.PP +This filter is part of the +.B CJK +macro package for \*(LE. +. +. +.SH "SEE ALSO" +.BR \%sjisconv (1), +.BR bg5conv (1), +.BR \%cefconv (1), +.BR cef5conv (1), +.BR \%extconv (1), +.br +the +.B CJK +documentation files. +. +. +.SH AUTHOR +Werner Lemberg +.C <wl@gnu.org> diff --git a/Master/texmf-dist/source/latex/cjk/utils/CEFconv/cefsconv.c b/Master/texmf-dist/source/latex/cjk/utils/CEFconv/cefsconv.c new file mode 100644 index 00000000000..bd738d742f4 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/CEFconv/cefsconv.c @@ -0,0 +1,138 @@ +#define banner \ +"cefsconv (CJK ver. 4.8.0)" \ + +/*2:*/ +#line 108 "/home/wl/git/cjk/cjk-4.8.0/utils/CEFconv/cefsconv.w" + +#include <ctype.h> +#include <stdio.h> +#include <stdlib.h> + + +int main(argc,argv) +int argc; +char*argv[]; + +{int ch,i; +unsigned char in[16]; +unsigned char out[32]; +unsigned char*inp,*outp; + +fprintf(stdout,"\\def\\CNSpreproc{%s}",banner); + +ch= fgetc(stdin); + +while(!feof(stdin)) +{if((ch>=0x81&&ch<=0x9F)||(ch>=0xE0&&ch<=0xEF)) +{fprintf(stdout,"\177%c\177",ch); + +ch= fgetc(stdin); +if(!feof(stdin)) +fprintf(stdout,"%d\177",ch); +} +else if(ch=='&') + +{inp= in; +outp= out; +*inp= ch; +*(++inp)= fgetc(stdin); + +if(*inp=='C'&&!feof(stdin)) +{*(++inp)= fgetc(stdin); +if(*inp=='0'&&!feof(stdin)) +{*(outp++)= 'B'; +*(outp++)= 'g'; +*(outp++)= '5'; +} +else if(*inp>='1'&&*inp<='7'&&!feof(stdin)) +{*(outp++)= 'C'; +*(outp++)= 'N'; +*(outp++)= 'S'; +*(outp++)= *inp; +} +else if((*inp=='X'||*inp=='Y')&&!feof(stdin)) +{*(outp++)= 'C'; +*(outp++)= 'E'; +*(outp++)= 'F'; +*(outp++)= *inp; +} +else +goto no_macro; +} +else if(*inp=='U'&&!feof(stdin)) +{*(outp++)= 'U'; +*(outp++)= 'T'; +*(outp++)= 'F'; +*(outp++)= '8'; +} +else +goto no_macro; + +*(++inp)= fgetc(stdin); +if(*inp!='-'||feof(stdin)) +goto no_macro; + +*(outp++)= '\177'; +*(outp++)= '\"'; +*(outp++)= '0'; + +*(++inp)= fgetc(stdin); +if(isxdigit(*inp)&&*inp<0x80&&!feof(stdin)) +*(outp++)= toupper(*inp); +else +goto no_macro; + +*(++inp)= fgetc(stdin); +if(isxdigit(*inp)&&*inp<0x80&&!feof(stdin)) +*(outp++)= toupper(*inp); +else +goto no_macro; + +*(outp++)= '\177'; +*(outp++)= '\177'; +*(outp++)= '\"'; +*(outp++)= '0'; + +*(++inp)= fgetc(stdin); +if(isxdigit(*inp)&&*inp<0x80&&!feof(stdin)) +*(outp++)= toupper(*inp); +else +goto no_macro; + +*(++inp)= fgetc(stdin); +if(isxdigit(*inp)&&*inp<0x80&&!feof(stdin)) +*(outp++)= toupper(*inp); +else +goto no_macro; + +*(outp++)= '\177'; +*outp= '\0'; + +*(++inp)= fgetc(stdin); +if(*inp!=';'||feof(stdin)) +goto no_macro; + +outp= out; +fprintf(stdout,"\17772\177"); +while(*outp) +fputc(*(outp++),stdout); + +ch= fgetc(stdin); +continue; + +no_macro: +ch= *inp; +i= inp-in; +inp= in; +while(i--) +fputc(*(inp++),stdout); +continue; +} +else +fputc(ch,stdout); + +ch= fgetc(stdin); +} +exit(EXIT_SUCCESS); +return 0; +}/*:2*/ diff --git a/Master/texmf-dist/source/latex/cjk/utils/CEFconv/cefsconv.w b/Master/texmf-dist/source/latex/cjk/utils/CEFconv/cefsconv.w new file mode 100644 index 00000000000..f1a5629b25e --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/CEFconv/cefsconv.w @@ -0,0 +1,240 @@ +% This is the cweb file cefsconv.w of the CJK Package Ver. 4.8.0 22-May-2008 + +% Copyright (C) 1994-2008 Werner Lemberg <wl@@gnu.org> +% +% 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 in doc/COPYING; if not, write to the Free +% Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +% MA 02110-1301 USA + +% To print this CWEB file you should (but not must) use the CWEAVE of the +% c2cweb-package (found at the CTAN archives, e.g. ftp.dante.de) and then say +% +% cweave +a cefsconv.w +% +% This (fully compatible) CWEAVE can transform CWEB-files with alternative +% output rules (look at the position of braces below!) the author (it's me +% too :-) prefer. Otherwise this file will be formatted traditionally. + +\def\title{cefsconv (CJK Version 4.8.0)} + +\def\topofcontents{ + \null\vfill + \centerline{\titlefont The {\ttitlefont cefsconv} program} + \vskip 20pt + \centerline{(CJK Version 4.8.0)} + \vfill} + +\def\botofcontents{ + \vfill + \noindent + Copyright \copyright\ 1996, 1998 by Werner Lemberg + \bigskip\noindent + Permission is granted to make and distribute verbatim copies of this + document provided that the copyright notice and this permission notice + are preserved on all copies. + + \smallskip\noindent + Permission is granted to copy and distribute modified versions of this + document under the conditions for verbatim copying, provided that the + entire resulting derived work is distributed under the terms of a + permission notice identical to this one.} + +\pageno=\contentspagenumber \advance\pageno by 1 +\let\maybe=\iftrue +\fullpageheight=240mm +\pageheight=223mm +\pagewidth=158mm +\setpage +\frenchspacing + +\noinx +\nosecs +\nocon + +@* Function and Use. +This small program will convert SJIS encoding with CNS encoded Chinese +characters using the {\it Chinese Encoding Framework (CEF)} into a +`preprocessed' form. The need of this program arises from the fact that +SJIS encoding uses the characters `\.{\\}', `\.{\{}', and `\.{\}}' which +have special meanings in \TeX. + +Use this program as a filter: + +\hskip 2em \.{cefsconv < input\_file > output\_file} + + +@* The program. +In contrast to \.{cefconv} two tasks will be executed: + +Replacing all occurrences of two byte SJIS encoded characters \.{XY} with +\.{\char94 \char94 7fX\char94 \char94 7fZZZ\char94 \char94 7f} (\.{X} and +\.{Y} are the first and the second byte of the character; \.{ZZZ} represents +the second byte as a decimal number). + +Replacing CEF macros of the form \.{\&xx-yyzz;} (\.{xx} can be C1--C7 for +the CNS planes 1--7, C0 for Big~5 encoding, an encoding CX reserved for +IRIZ, a private encoding CY, and U for Unicode encoding; \.{yyzz} is a +hexadecimal representation of the code point in this plane) with +\medskip +\quad\.{\char94 \char94 7f72\char94 \char94 7fXX\char94 \char94 7f% +\char94 \char94 7f"0yy\char94 \char94 7f"0zz\char94 \char94 7f}\quad. +\medskip +\.{XX} is the corresponding CJK encoding of \.{xx}; the number `72' +specifies a macro in the file \.{MULEenc.sty} which further processes this +representation -- it is necessary to explicitly load this file with +\.{\\usepackage}. + +Additionally we define a \TeX\ macro at the very beginning to signal a +preprocessed file. + +The following code is very simple. No error detection is done because \TeX\ +which will see the output of \.{cefsconv} complains loudly if something is +wrong. + +@d banner +"cefsconv (CJK ver. 4.8.0)" + +@c +#include <ctype.h> +#include <stdio.h> +#include <stdlib.h>@# + + +int main(argc, argv) + int argc; + char *argv[]; + + {int ch, i; + unsigned char in[16]; + unsigned char out[32]; + unsigned char *inp, *outp; + + fprintf(stdout, "\\def\\CNSpreproc{%s}", banner);@# + + ch = fgetc(stdin);@# + + while(!feof(stdin)) + {if((ch >= 0x81 && ch <= 0x9F) || (ch >= 0xE0 && ch <= 0xEF)) + {fprintf(stdout, "\177%c\177", ch);@# + + ch = fgetc(stdin); + if(!feof(stdin)) + fprintf(stdout, "%d\177", ch); + } + else if(ch == '&') + /* the macro test is hardcoded to make things simple */ + {inp = in; + outp = out; + *inp = ch; + *(++inp) = fgetc(stdin);@# + + if(*inp == 'C' && !feof(stdin)) + {*(++inp) = fgetc(stdin); + if(*inp == '0' && !feof(stdin)) + {*(outp++) = 'B'; + *(outp++) = 'g'; + *(outp++) = '5'; + } + else if(*inp >= '1' && *inp <= '7' && !feof(stdin)) + {*(outp++) = 'C'; + *(outp++) = 'N'; + *(outp++) = 'S'; + *(outp++) = *inp; + } + else if((*inp == 'X' || *inp == 'Y') && !feof(stdin)) + {*(outp++) = 'C'; + *(outp++) = 'E'; + *(outp++) = 'F'; + *(outp++) = *inp; + } + else + goto no_macro; + } + else if(*inp == 'U' && !feof(stdin)) + {*(outp++) = 'U'; + *(outp++) = 'T'; + *(outp++) = 'F'; + *(outp++) = '8'; + } + else + goto no_macro;@# + + *(++inp) = fgetc(stdin); + if(*inp != '-' || feof(stdin)) + goto no_macro;@# + + *(outp++) = '\177'; + *(outp++) = '\"'; + *(outp++) = '0';@# + + *(++inp) = fgetc(stdin); + if(isxdigit(*inp) && *inp < 0x80 && !feof(stdin)) + *(outp++) = toupper(*inp); + else + goto no_macro;@# + + *(++inp) = fgetc(stdin); + if(isxdigit(*inp) && *inp < 0x80 && !feof(stdin)) + *(outp++) = toupper(*inp); + else + goto no_macro;@# + + *(outp++) = '\177'; + *(outp++) = '\177'; + *(outp++) = '\"'; + *(outp++) = '0';@# + + *(++inp) = fgetc(stdin); + if(isxdigit(*inp) && *inp < 0x80 && !feof(stdin)) + *(outp++) = toupper(*inp); + else + goto no_macro;@# + + *(++inp) = fgetc(stdin); + if(isxdigit(*inp) && *inp < 0x80 && !feof(stdin)) + *(outp++) = toupper(*inp); + else + goto no_macro;@# + + *(outp++) = '\177'; + *outp = '\0';@# + + *(++inp) = fgetc(stdin); + if(*inp != ';' || feof(stdin)) + goto no_macro;@# + + outp = out; + fprintf(stdout, "\17772\177"); + while(*outp) + fputc(*(outp++), stdout);@# + + ch = fgetc(stdin); + continue;@# + +no_macro: + ch = *inp; + i = inp - in; + inp = in; + while(i--) + fputc(*(inp++), stdout); + continue; + } + else + fputc(ch, stdout);@# + + ch = fgetc(stdin); + } + exit(EXIT_SUCCESS); + return 0; /* never reached */ + } diff --git a/Master/texmf-dist/source/latex/cjk/utils/CEFconv/cefslatex b/Master/texmf-dist/source/latex/cjk/utils/CEFconv/cefslatex new file mode 100644 index 00000000000..db2232d98c6 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/CEFconv/cefslatex @@ -0,0 +1,43 @@ +#! /bin/sh + +# Copyright (C) 1994-2008 Werner Lemberg <wl@gnu.org> +# +# 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 in doc/COPYING; if not, write to the Free +# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +# MA 02110-1301 USA + +n=1 +argv= + +# get last argument +while test 1 -lt $#; do + eval argv$n=\$1 + argv="$argv \"\$argv$n\"" + n=`expr $n + 1` + shift +done + +# replace extension with .cjk or append .cjk if there is no extension +tex=$1 +case $tex in +""|*.cjk) + echo >&2 "Usage: $0 [options] latex-file" + exit 1;; +*) + aux=`expr "X$tex" : 'X\(.*\)\.[^/]*$' \| "X$tex" : 'X\(.*\)'`.cjk;; +esac + +cefsconv < "$tex" > "$aux" && eval latex "$argv" "\$aux" + +# EOF diff --git a/Master/texmf-dist/source/latex/cjk/utils/CEFconv/cefsltx.bat b/Master/texmf-dist/source/latex/cjk/utils/CEFconv/cefsltx.bat new file mode 100755 index 00000000000..662ef9e3af4 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/CEFconv/cefsltx.bat @@ -0,0 +1,3 @@ +call f_name %1
+cefsconv < %1 > %fd%%fp%%fn%.cjk
+latex %fd%%fu%%fn%.cjk
diff --git a/Master/texmf-dist/source/latex/cjk/utils/CEFconv/cefsltx.cmd b/Master/texmf-dist/source/latex/cjk/utils/CEFconv/cefsltx.cmd new file mode 100644 index 00000000000..896634d414e --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/CEFconv/cefsltx.cmd @@ -0,0 +1,46 @@ +/*----------------------------------------------------------------------*\ + cefsltx.cmd + + This file is part of the CJK macro package for LaTeX2e ver. 4.8.0 + + This file is part of the CJK macro package for LaTeX2e ver. 4.8.0 + + Copyright (C) 1994-2008 Wonkoo Kim <wkim+@pitt.edu> + + 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 in doc/COPYING; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, + MA 02110-1301 USA + + Wonkoo Kim (wkim+@pitt.edu), September 2, 1996 +\*----------------------------------------------------------------------*/ + +Call RxFuncAdd 'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs' +Call SysLoadFuncs + +parse arg file + +drive = filespec('drive', file) +path = filespec('path', file) +fname = filespec('name', file) +m = lastpos('.', fname) +if (m = 0) then m = length(fname) + 1 +cjkfile = drive||path||delstr(fname, m)||'.cjk' + +'cefsconv <' file '>' cjkfile + +ucjkfile = translate(cjkfile,'/','\') +if stream(cjkfile, 'C', 'QUERY EXISTS') \= '' then + 'call latex.cmd' ucjkfile + +/* End of cefsltx.cmd */ diff --git a/Master/texmf-dist/source/latex/cjk/utils/CEFconv/cefspdflatex b/Master/texmf-dist/source/latex/cjk/utils/CEFconv/cefspdflatex new file mode 100644 index 00000000000..bc99498f4af --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/CEFconv/cefspdflatex @@ -0,0 +1,43 @@ +#! /bin/sh + +# Copyright (C) 1994-2008 Werner Lemberg <wl@gnu.org> +# +# 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 in doc/COPYING; if not, write to the Free +# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +# MA 02110-1301 USA + +n=1 +argv= + +# get last argument +while test 1 -lt $#; do + eval argv$n=\$1 + argv="$argv \"\$argv$n\"" + n=`expr $n + 1` + shift +done + +# replace extension with .cjk or append .cjk if there is no extension +tex=$1 +case $tex in +""|*.cjk) + echo >&2 "Usage: $0 [options] latex-file" + exit 1;; +*) + aux=`expr "X$tex" : 'X\(.*\)\.[^/]*$' \| "X$tex" : 'X\(.*\)'`.cjk;; +esac + +cefsconv < "$tex" > "$aux" && eval pdflatex "$argv" "\$aux" + +# EOF diff --git a/Master/texmf-dist/source/latex/cjk/utils/SJISconv/sjisconv.1 b/Master/texmf-dist/source/latex/cjk/utils/SJISconv/sjisconv.1 new file mode 100644 index 00000000000..b0b85d21215 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/SJISconv/sjisconv.1 @@ -0,0 +1,110 @@ +.\" man page for sjisconv +.\" Copyright (C) 1994-2008 Werner Lemberg <wl@gnu.org> +.\" +.\" 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 in doc/COPYING; if not, write to the Free +.\" Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +.\" MA 02110-1301 USA +. +.TH SJISCONV 1 22-May-2008 "CJK Version 4.8.0" +. +.\" ==== +.\" ==== macro definitions +.\" ==== +. +.\" here we define \TeX for troff and nroff +.if t .ds TX \fRT\\h'-0.1667m'\\v'0.20v'E\\v'-0.20v'\\h'-0.125m'X\fP +.if n .ds TX TeX +. +.\" and here the same for \LaTeX +.if t \{\ +.ie '\*(.T'dvi' \ +.ds LX \fRL\h'-0.36m'\v'-0.15v'\s-3A\s0\h'-0.15m'\v'0.15v'\fP\*(TX +.el .ds LX \fRL\h'-0.36m'\v'-0.22v'\s-2A\s0\h'-0.15m'\v'0.22v'\fP\*(TX +.\} +.if n .ds LX LaTeX +. +.\" \LaTeXe +.\" note that we need \vareps for TeX instead of \eps which can only be +.\" accessed with the \N escape sequence (in the Math Italic font) +.if t \{\ +.ie '\*(.T'dvi' .ds LE \*(LX\h'0.15m'2\v'0.20v'\f(MI\N'34'\fP\v'-0.20v' +.el .ds LE \*(LX\h'0.15m'2\v'0.20v'\(*e\v'-0.20v' +.\} +.if n .ds LE LaTeX\ 2e +. +.\" a typewriter font +.if t \{\ +.de C +\fC\\$1\fP\\$2 +.. +.\} +.if n \{\ +.de C +\\$1\\$2 +.. +.\} +. +.\" ==== +.\" ==== end of macro definitions +.\" ==== +. +. +. +.SH NAME +sjisconv \- convert a TeX document in SJIS encoding into `preprocessed' +form. +. +. +.SH SYNOPSIS +.B sjisconv +< +.I infile +> +.I outfile +. +. +.SH DESCRIPTION +SJIS encoding for Japanese uses the characters +.C { , +.C } , +and +.C \e +which have special meanings in \*(TX +documents. +.PP +After processing a \*(LE +document which contains SJIS characters with +.B \%sjisconv +you need not care about these special characters. +.PP +This filter is part of the +.B CJK +macro package for \*(LE. +. +. +.SH "SEE ALSO" +.BR bg5conv (1), +.BR \%cefconv (1), +.BR cef5conv (1), +.BR \%cefsconv (1), +.BR \%extconv (1), +.br +the +.B CJK +documentation files. +. +. +.SH AUTHOR +Werner Lemberg +.C <wl@gnu.org> diff --git a/Master/texmf-dist/source/latex/cjk/utils/SJISconv/sjisconv.c b/Master/texmf-dist/source/latex/cjk/utils/SJISconv/sjisconv.c new file mode 100644 index 00000000000..0da8aa3fe78 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/SJISconv/sjisconv.c @@ -0,0 +1,36 @@ +#define banner \ +"sjisconv (CJK ver. 4.8.0)" \ + +/*2:*/ +#line 93 "/home/wl/git/cjk/cjk-4.8.0/utils/SJISconv/sjisconv.w" + +#include <stdio.h> +#include <stdlib.h> + + +int main(argc,argv) +int argc; +char*argv[]; + +{int ch; + +fprintf(stdout,"\\def\\CJKpreproc{%s}",banner); + +ch= fgetc(stdin); + +while(!feof(stdin)) +{if((ch>=0x81&&ch<=0x9F)||(ch>=0xE0&&ch<=0xEF)) +{fprintf(stdout,"\177%c\177",ch); + +ch= fgetc(stdin); +if(!feof(stdin)) +fprintf(stdout,"%d\177",ch); +} +else +fputc(ch,stdout); + +ch= fgetc(stdin); +} +exit(EXIT_SUCCESS); +return 0; +}/*:2*/ diff --git a/Master/texmf-dist/source/latex/cjk/utils/SJISconv/sjisconv.w b/Master/texmf-dist/source/latex/cjk/utils/SJISconv/sjisconv.w new file mode 100644 index 00000000000..d5f55a96f3c --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/SJISconv/sjisconv.w @@ -0,0 +1,123 @@ +% This is the cweb file sjisconv.w of the CJK Package Ver. 4.8.0 22-May-2008 + +% Copyright (C) 1994-2008 Werner Lemberg <wl@@gnu.org> +% +% 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 in doc/COPYING; if not, write to the Free +% Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +% MA 02110-1301 USA + +% To print this CWEB file you should (but not must) use the CWEAVE of the +% c2cweb-package (found at the CTAN archives, e.g. ftp.dante.de) and then say +% +% cweave +a sjisconv.w +% +% This (fully compatible) CWEAVE can transform CWEB-files with alternative +% output rules (look at the position of braces below!) the author (it's me +% too :-) prefer. Otherwise this file will be formatted traditionally. + +\def\title{sjisconv (CJK Version 4.8.0)} + +\def\topofcontents{ + \null\vfill + \centerline{\titlefont The {\ttitlefont sjisconv} program} + \vskip 20pt + \centerline{(CJK Version 4.8.0)} + \vfill} + +\def\botofcontents{ + \vfill + \noindent + Copyright \copyright\ 1996, 1998 by Werner Lemberg + \bigskip\noindent + Permission is granted to make and distribute verbatim copies of this + document provided that the copyright notice and this permission notice + are preserved on all copies. + + \smallskip\noindent + Permission is granted to copy and distribute modified versions of this + document under the conditions for verbatim copying, provided that the + entire resulting derived work is distributed under the terms of a + permission notice identical to this one.} + +\pageno=\contentspagenumber \advance\pageno by 1 +\let\maybe=\iftrue +\fullpageheight=240mm +\pageheight=223mm +\pagewidth=158mm +\setpage +\frenchspacing + +\noinx +\nosecs +\nocon + +@* Function and Use. +This small program will convert SJIS encoded Japanese characters into a +`preprocessed' form. The need of this program arises from the fact that this +encoding uses the characters `\.{\\}', `\.{\{}', and `\.{\}}' which have +special meanings in \TeX. + +Use this program as a filter: + +\hskip 2em \.{sjisconv < input\_file > output\_file} + + +@* The program. +The only function of this program is to replace all occurrences of SJIS +encoded two byte characters \.{XY} with +\.{\char94 \char94 7fX\char94 \char94 7fZZZ\char94 \char94 7f} (\.{X} +and \.{Y} are the first and the second byte of the character; \.{ZZZ} +represents the second byte as a decimal number). + +Additionally we define a \TeX\ macro at the very beginning to signal a +preprocessed file. + +The following code is very simple. No error detection is done because \TeX\ +which will see the output of \.{sjisconv} complains loudly if something is +wrong. + +@d banner +"sjisconv (CJK ver. 4.8.0)" + +@c +#include <stdio.h> +#include <stdlib.h>@# + + +int main(argc, argv) + int argc; + char *argv[]; + + {int ch; + + fprintf(stdout, "\\def\\CJKpreproc{%s}", banner);@# + + ch = fgetc(stdin);@# + + while(!feof(stdin)) + {if((ch >= 0x81 && ch <= 0x9F) || (ch >= 0xE0 && ch <= 0xEF)) + {fprintf(stdout, "\177%c\177", ch);@# + + ch = fgetc(stdin); + if(!feof(stdin)) + fprintf(stdout, "%d\177", ch); + } + else + fputc(ch, stdout);@# + + ch = fgetc(stdin); + } + exit(EXIT_SUCCESS); + return 0; /* never reached */ + } diff --git a/Master/texmf-dist/source/latex/cjk/utils/SJISconv/sjislatex b/Master/texmf-dist/source/latex/cjk/utils/SJISconv/sjislatex new file mode 100644 index 00000000000..d794a7c7f5e --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/SJISconv/sjislatex @@ -0,0 +1,43 @@ +#! /bin/sh + +# Copyright (C) 1994-2008 Werner Lemberg <wl@gnu.org> +# +# 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 in doc/COPYING; if not, write to the Free +# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +# MA 02110-1301 USA + +n=1 +argv= + +# get last argument +while test 1 -lt $#; do + eval argv$n=\$1 + argv="$argv \"\$argv$n\"" + n=`expr $n + 1` + shift +done + +# replace extension with .cjk or append .cjk if there is no extension +tex=$1 +case $tex in +""|*.cjk) + echo >&2 "Usage: $0 [options] latex-file" + exit 1;; +*) + aux=`expr "X$tex" : 'X\(.*\)\.[^/]*$' \| "X$tex" : 'X\(.*\)'`.cjk;; +esac + +sjisconv < "$tex" > "$aux" && eval latex "$argv" "\$aux" + +# EOF diff --git a/Master/texmf-dist/source/latex/cjk/utils/SJISconv/sjisltx.bat b/Master/texmf-dist/source/latex/cjk/utils/SJISconv/sjisltx.bat new file mode 100755 index 00000000000..5702c113bdf --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/SJISconv/sjisltx.bat @@ -0,0 +1,3 @@ +call f_name %1
+sjisconv < %1 > %fd%%fp%%fn%.cjk
+latex %fd%%fu%%fn%.cjk
diff --git a/Master/texmf-dist/source/latex/cjk/utils/SJISconv/sjisltx.cmd b/Master/texmf-dist/source/latex/cjk/utils/SJISconv/sjisltx.cmd new file mode 100644 index 00000000000..6769896fbdb --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/SJISconv/sjisltx.cmd @@ -0,0 +1,44 @@ +/*----------------------------------------------------------------------*\ + sjisltx.cmd + + This file is part of the CJK macro package for LaTeX2e ver. 4.8.0 + + Copyright (C) 1994-2008 Wonkoo Kim <wkim+@pitt.edu> + + 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 in doc/COPYING; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, + MA 02110-1301 USA + + Wonkoo Kim (wkim+@pitt.edu), September 2, 1996 +\*----------------------------------------------------------------------*/ + +Call RxFuncAdd 'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs' +Call SysLoadFuncs + +parse arg file + +drive = filespec('drive', file) +path = filespec('path', file) +fname = filespec('name', file) +m = lastpos('.', fname) +if (m = 0) then m = length(fname) + 1 +cjkfile = drive||path||delstr(fname, m)||'.cjk' + +'sjisconv <' file '>' cjkfile + +ucjkfile = translate(cjkfile,'/','\') +if stream(cjkfile, 'C', 'QUERY EXISTS') \= '' then + 'call latex.cmd' ucjkfile + +/* End of sjisltx.cmd */ diff --git a/Master/texmf-dist/source/latex/cjk/utils/SJISconv/sjispdflatex b/Master/texmf-dist/source/latex/cjk/utils/SJISconv/sjispdflatex new file mode 100644 index 00000000000..50daf343502 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/SJISconv/sjispdflatex @@ -0,0 +1,43 @@ +#! /bin/sh + +# Copyright (C) 1994-2008 Werner Lemberg <wl@gnu.org> +# +# 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 in doc/COPYING; if not, write to the Free +# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +# MA 02110-1301 USA + +n=1 +argv= + +# get last argument +while test 1 -lt $#; do + eval argv$n=\$1 + argv="$argv \"\$argv$n\"" + n=`expr $n + 1` + shift +done + +# replace extension with .cjk or append .cjk if there is no extension +tex=$1 +case $tex in +""|*.cjk) + echo >&2 "Usage: $0 [options] latex-file" + exit 1;; +*) + aux=`expr "X$tex" : 'X\(.*\)\.[^/]*$' \| "X$tex" : 'X\(.*\)'`.cjk;; +esac + +sjisconv < "$tex" > "$aux" && eval pdflatex "$argv" "\$aux" + +# EOF diff --git a/Master/texmf-dist/source/latex/cjk/utils/cjklatex/cjklatex.c b/Master/texmf-dist/source/latex/cjk/utils/cjklatex/cjklatex.c new file mode 100644 index 00000000000..6750bd4f4d1 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/cjklatex/cjklatex.c @@ -0,0 +1,290 @@ +/* + Purpose: call latex after preprocessing of the .tex file by + the cjk conversion tool. The old f_name.bat script + is not working anymore. + Author : F. Popineau <Fabrice.Popineau@supelec.fr> + Date : <29/06/2001> +*/ + +/* + Copyright (C) 2001-2008 F. Popineau <Fabrice.Popineau@supelec.fr> + + 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 in doc/COPYING; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, + MA 02110-1301 USA +*/ + +#include <stdio.h> +#include <stdlib.h> +#include <win32lib.h> + +#include <kpathsea/config.h> +#include <kpathsea/lib.h> +#include <kpathsea/getopt.h> + +static char *cjklatex_version_string = "1.0"; + +static const char *usage_str[] = { + "Usage: %s OPTIONS FILE\n", + "Calls `latex' on FILE after conversion by the filter\n", + "specified by OPTIONS.\n", + "--conv=bg5\tfor traditional Chinese, encoding Big 5,\n", + "--conv=bg5p\tfor Chinese, encoding Big 5+,\n", + "--conv=cef\tfor Chinese Encoding Framework, encoding CEF,\n", + "--conv=cef5\tidem CEF, also converts Big5 characters,\n", + "--conv=cefs\tidem CEF, also converts SJIS characters,\n", + "--conv=sjis\tfor Japanese, SJIS encoding,\n", + "--conv=gbk\tfor Chinese, encoding GBK.", + "\nAlternatively, for compatibility with the previous DOS batch files,\n", + "you can also copy this program to any of the following names:\n", + "bg5latex.exe,bg5pltx.exe,cef5ltx.exe,ceflatex.exe,cefsltx.exe,\n", + "gbklatex.exe and sjisltx.exe .\n", + "Then running one of these programs will be identical to specify\n", + "the corresponding option.\n", + "\nAdditional options:\n", + "--verbose\tbe a bit more verbose about what is happening,\n", + "--nocleanup\tdo not remove intermediate files,\n", + "--latex=engine\tuse `engine' instead of `latex' to process the file.\n", + NULL +}; + +static char *progname = NULL; + +static struct _conv_table { + char *progname; + char *processor; +} CJKtable[] = { + { "cjklatex", "" }, + { "bg5latex", "bg5conv" }, + { "bg5pltx", "extconv" }, + { "cef5ltx", "cef5conv" }, + { "ceflatex", "cefconv" }, + { "cefsltx", "cefsconv" }, + { "gbklatex", "extconv" }, + { "sjisltx", "sjisconv" } +}; + +#define PROGRAM_IS(p) FILESTRCASEEQ (p, progname) +#define ARGUMENT_IS(a) STREQ (long_options[option_index].name, a) + +static int program_number = -1; +static int opt_verbose = 0; +static int opt_nocleanup = 0; +static char *texname, *cjkname, *texengine; + +static struct option long_options [] = { + { "debug", 1, 0, 0}, + { "help", 0, 0, 0}, + { "version", 0, 0, 0}, + { "verbose", 0, 0, 0}, + { "nocleanup", 0, 0, 0}, + { "latex", 1, 0, 0}, + { "conv", 1, 0, 0}, + {0, 0, 0, 0} +}; + +BOOL sigint_handler(DWORD dwCtrlType) +{ + /* Fix me : there is a problem if a system() command is running. + We should wait for the son process to be interrupted. + Only way I can think of to do that : rewrite system() based on + spawn() with parsing of the command line and set a global pid + Next cwait(pid) in the HandlerRoutine. + */ + + /* This is not that good, but else we would need to wait for + the child processes to finish ! */ + Sleep(250); + + fprintf(stderr, "Sending Ctrl+Break!\n"); + GenerateConsoleCtrlEvent(CTRL_BREAK_EVENT, 0); + + if (! opt_nocleanup) + unlink(cjkname); + + exit(1); + + return FALSE; /* return value obligatory */ +} + +void usage() +{ + int i; + fprintf(stderr, "CJKlatex version %s\n", cjklatex_version_string); + fprintf(stderr,usage_str[0], progname ); + fputs("\n", stderr); + for(i = 1; usage_str[i]; ++i) + fputs(usage_str[i], stderr); +} + +int do_process(char *processor, char *filename) +{ + char *ext, *p; + char cmd[_MAX_PATH*3]; + DWORD dwFA; + int ret; + + if (strlen(filename) > 4 && _strnicmp(filename + strlen(filename) - 4, ".tex", 4) == 0) { + texname = xstrdup(filename); + } + else { + texname = concat(filename, ".tex"); + } + for (p = texname; p && *p; p++) + *p = (*p == '\\' ? '/' : *p); + + dwFA = GetFileAttributes(texname); + if (dwFA == 0xFFFFFFFF || (dwFA & FILE_ATTRIBUTE_DIRECTORY)) { + fprintf(stderr, "%s: %s is an invalid input file.\n", + progname, texname); + ret = 1; + } + else { + cjkname = xstrdup(texname); + ext = strrchr(cjkname, '.'); + assert(ext != NULL); + strcpy(cjkname + (ext - cjkname), ".cjk"); + + sprintf(cmd, "%s < %s > %s", processor, texname, cjkname); + if (opt_verbose) + fprintf(stderr, "%s: running command `%s'.\n", progname, cmd); + ret = system(cmd); + if (ret == 0) { + sprintf(cmd, "%s %s", texengine, cjkname); + if (opt_verbose) + fprintf(stderr, "%s: running command `%s'.\n", progname, cmd); + ret = system(cmd); + if (! opt_nocleanup) + unlink(cjkname); + } + } + + free(texname); + free(cjkname); + + return ret; +} + +void main(int argc, char *argv[]) +{ + int g; /* getopt return code */ + int i; + int option_index; + char *filename; + + if (!progname) + progname = argv[0]; + + kpse_set_program_name (progname, NULL); + progname = kpse_program_name; + + for (i = 0; i < sizeof(CJKtable)/sizeof(CJKtable[0]) && program_number < 0; i++) { + if (STREQ(progname, CJKtable[i].progname) +#if 0 + || (STREQ(progname, CJKtable[i].progname) + && STREQ(progname+strlen(CJKtable[i].progname), ".exe")) +#endif + ) { + program_number = i; + } + } + + if (program_number == -1) { + fprintf(stderr, "%s: this program has been incorrecty copied to the name %s.\n", progname, progname); + usage(); + exit(1); + } + + for(;;) { + g = getopt_long_only (argc, argv, "", long_options, &option_index); + + if (g == EOF) + break; + + if (g == '?') { + usage(); /* Unknown option. */ + exit(1); + } + + /* assert (g == 0); */ /* We have no short option names. */ + /* + FIXME : try 'mktexpk --mfmode --bdpi 600 ...' + */ + if (ARGUMENT_IS ("debug")) { + kpathsea_debug |= atoi (optarg); + } + else if (ARGUMENT_IS ("help")) { + usage(); + exit(0); + } + else if (ARGUMENT_IS ("verbose")) { + opt_verbose = 1; + } + else if (ARGUMENT_IS ("nocleanup")) { + opt_nocleanup = 1; + } + else if (ARGUMENT_IS ("latex")) { + texengine = xstrdup(optarg); + } + else if (ARGUMENT_IS ("version")) { + fprintf(stderr, "%s of %s.\n", progname, cjklatex_version_string); + exit(0); + } + else if (PROGRAM_IS("cjklatex")) { + if (ARGUMENT_IS("conv")) { + for (i = 1; i < sizeof(CJKtable)/sizeof(CJKtable[0]) && program_number <= 0; i++) { + if (STRNEQ(optarg, CJKtable[i].progname, strlen(optarg))) { + program_number = i; + } + } + } + } + } + + /* shifting options from argv[] list */ + for (i = 1; optind < argc; i++, optind++) + argv[i] = argv[optind]; + argv[i] = NULL; + + argc = i; + + if (argc < 2) { + fprintf (stderr, "%s: Missing argument(s).\nTry `%s --help' for more information.\n", progname, kpse_program_name); + exit(1); + } + + if (argc > 2) { + fprintf(stderr, "%s: Extra arguments", progname); + for (i = 2; i < argc; i++) + fprintf (stderr, " \"%s\"", argv[i]); + fprintf (stderr, "\nTry `%s --help' for more information.\n", + kpse_program_name); + exit(1); + } + + SetConsoleCtrlHandler((PHANDLER_ROUTINE)sigint_handler, TRUE); + + filename = xstrdup(argv[1]); + + assert(program_number > 0); + + if (! texengine) { + texengine = xstrdup("latex"); + } + + do_process(CJKtable[program_number].processor, filename); + + free(filename); + free(texengine); +} diff --git a/Master/texmf-dist/source/latex/cjk/utils/extconv/bg5+latex b/Master/texmf-dist/source/latex/cjk/utils/extconv/bg5+latex new file mode 100644 index 00000000000..4136537872e --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/extconv/bg5+latex @@ -0,0 +1,43 @@ +#! /bin/sh + +# Copyright (C) 1994-2008 Werner Lemberg <wl@gnu.org> +# +# 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 in doc/COPYING; if not, write to the Free +# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +# MA 02110-1301 USA + +n=1 +argv= + +# get last argument +while test 1 -lt $#; do + eval argv$n=\$1 + argv="$argv \"\$argv$n\"" + n=`expr $n + 1` + shift +done + +# replace extension with .cjk or append .cjk if there is no extension +tex=$1 +case $tex in +""|*.cjk) + echo >&2 "Usage: $0 [options] latex-file" + exit 1;; +*) + aux=`expr "X$tex" : 'X\(.*\)\.[^/]*$' \| "X$tex" : 'X\(.*\)'`.cjk;; +esac + +extconv < "$tex" > "$aux" && eval latex "$argv" "\$aux" + +# EOF diff --git a/Master/texmf-dist/source/latex/cjk/utils/extconv/bg5+pdflatex b/Master/texmf-dist/source/latex/cjk/utils/extconv/bg5+pdflatex new file mode 100644 index 00000000000..e28761ef423 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/extconv/bg5+pdflatex @@ -0,0 +1,43 @@ +#! /bin/sh + +# Copyright (C) 1994-2008 Werner Lemberg <wl@gnu.org> +# +# 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 in doc/COPYING; if not, write to the Free +# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +# MA 02110-1301 USA + +n=1 +argv= + +# get last argument +while test 1 -lt $#; do + eval argv$n=\$1 + argv="$argv \"\$argv$n\"" + n=`expr $n + 1` + shift +done + +# replace extension with .cjk or append .cjk if there is no extension +tex=$1 +case $tex in +""|*.cjk) + echo >&2 "Usage: $0 [options] pdflatex-file" + exit 1;; +*) + aux=`expr "X$tex" : 'X\(.*\)\.[^/]*$' \| "X$tex" : 'X\(.*\)'`.cjk;; +esac + +extconv < "$tex" > "$aux" && eval pdflatex "$argv" "\$aux" + +# EOF diff --git a/Master/texmf-dist/source/latex/cjk/utils/extconv/bg5pltx.bat b/Master/texmf-dist/source/latex/cjk/utils/extconv/bg5pltx.bat new file mode 100755 index 00000000000..ccc6c76acd5 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/extconv/bg5pltx.bat @@ -0,0 +1,3 @@ +call f_name %1
+extconv < %1 > %fd%%fp%%fn%.cjk
+latex %fd%%fu%%fn%.cjk
diff --git a/Master/texmf-dist/source/latex/cjk/utils/extconv/bg5pltx.cmd b/Master/texmf-dist/source/latex/cjk/utils/extconv/bg5pltx.cmd new file mode 100644 index 00000000000..e41ecb44a5f --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/extconv/bg5pltx.cmd @@ -0,0 +1,44 @@ +/*----------------------------------------------------------------------*\ + bg5pltx.cmd + + This file is part of the CJK macro package for LaTeX2e ver. 4.8.0 + + Copyright (C) 1994-2008 Wonkoo Kim <wkim+@pitt.edu> + + 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 in doc/COPYING; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, + MA 02110-1301 USA + + Wonkoo Kim (wkim+@pitt.edu), September 2, 1996 +\*----------------------------------------------------------------------*/ + +Call RxFuncAdd 'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs' +Call SysLoadFuncs + +parse arg file + +drive = filespec('drive', file) +path = filespec('path', file) +fname = filespec('name', file) +m = lastpos('.', fname) +if (m = 0) then m = length(fname) + 1 +cjkfile = drive||path||delstr(fname, m)||'.cjk' + +'extconv <' file '>' cjkfile + +ucjkfile = translate(cjkfile,'/','\') +if stream(cjkfile, 'C', 'QUERY EXISTS') \= '' then + 'call latex.cmd' ucjkfile + +/* End of bg5pltx.cmd */ diff --git a/Master/texmf-dist/source/latex/cjk/utils/extconv/extconv.1 b/Master/texmf-dist/source/latex/cjk/utils/extconv/extconv.1 new file mode 100644 index 00000000000..bcb5f9d92c7 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/extconv/extconv.1 @@ -0,0 +1,111 @@ +.\" man page for bg5conv +.\" +.\" Copyright (C) 1994-2008 Werner Lemberg <wl@gnu.org> +.\" +.\" 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 in doc/COPYING; if not, write to the Free +.\" Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +.\" MA 02110-1301 USA +. +.TH EXTCONV 1 22-May-2008 "CJK Version 4.8.0" +. +.\" ==== +.\" ==== macro definitions +.\" ==== +. +.\" here we define \TeX for troff and nroff +.if t .ds TX \fRT\\h'-0.1667m'\\v'0.20v'E\\v'-0.20v'\\h'-0.125m'X\fP +.if n .ds TX TeX +. +.\" and here the same for \LaTeX +.if t \{\ +.ie '\*(.T'dvi' \ +.ds LX \fRL\h'-0.36m'\v'-0.15v'\s-3A\s0\h'-0.15m'\v'0.15v'\fP\*(TX +.el .ds LX \fRL\h'-0.36m'\v'-0.22v'\s-2A\s0\h'-0.15m'\v'0.22v'\fP\*(TX +.\} +.if n .ds LX LaTeX +. +.\" \LaTeXe +.\" note that we need \vareps for TeX instead of \eps which can only be +.\" accessed with the \N escape sequence (in the Math Italic font) +.if t \{\ +.ie '\*(.T'dvi' .ds LE \*(LX\h'0.15m'2\v'0.20v'\f(MI\N'34'\fP\v'-0.20v' +.el .ds LE \*(LX\h'0.15m'2\v'0.20v'\(*e\v'-0.20v' +.\} +.if n .ds LE LaTeX\ 2e +. +.\" a typewriter font +.if t \{\ +.de C +\fC\\$1\fP\\$2 +.. +.\} +.if n \{\ +.de C +\\$1\\$2 +.. +.\} +. +.\" ==== +.\" ==== end of macro definitions +.\" ==== +. +. +. +.SH NAME +extconv \- convert a TeX document in either Big\ 5+ or GBK encoding into +`preprocessed' form. +. +. +.SH SYNOPSIS +.B extconv +< +.I infile +> +.I outfile +. +. +.SH DESCRIPTION +Big\ 5+ and GBK encodings use the characters +.C { , +.C } , +and +.C \e +which have special meanings in \*(TX +documents. +.PP +After processing a \*(LE +document which contains such characters with +.B \%extconv +you need not care about these special characters. +.PP +This filter is part of the +.B CJK +macro package for \*(LE. +. +. +.SH "SEE ALSO" +.BR bg5conv (1), +.BR \%sjisconv (1), +.BR \%cefconv (1), +.BR cef5conv (1), +.BR \%cefsconv (1), +.br +the +.B CJK +documentation files. +. +. +.SH AUTHOR +Werner Lemberg +.C <wl@gnu.org> diff --git a/Master/texmf-dist/source/latex/cjk/utils/extconv/extconv.c b/Master/texmf-dist/source/latex/cjk/utils/extconv/extconv.c new file mode 100644 index 00000000000..e6c3d60a17a --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/extconv/extconv.c @@ -0,0 +1,37 @@ +#define banner \ +"extconv (CJK ver. 4.8.0)" \ + +/*2:*/ +#line 94 "/home/wl/git/cjk/cjk-4.8.0/utils/extconv/extconv.w" + +#include <stdio.h> +#include <stdlib.h> + + +int main(argc,argv) +int argc; +char*argv[]; + +{int ch; + + +fprintf(stdout,"\\def\\CJKpreproc{%s}",banner); + +ch= fgetc(stdin); + +while(!feof(stdin)) +{if(ch>=0x81&&ch<=0xFE) +{fprintf(stdout,"\177%c\177",ch); + +ch= fgetc(stdin); +if(!feof(stdin)) +fprintf(stdout,"%d\177",ch); +} +else +fputc(ch,stdout); + +ch= fgetc(stdin); +} +exit(EXIT_SUCCESS); +return 0; +}/*:2*/ diff --git a/Master/texmf-dist/source/latex/cjk/utils/extconv/extconv.w b/Master/texmf-dist/source/latex/cjk/utils/extconv/extconv.w new file mode 100644 index 00000000000..6dd7a19ac03 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/extconv/extconv.w @@ -0,0 +1,125 @@ +% This is the cweb file extconv.w of the CJK Package Ver. 4.8.0 22-May-2008 + +% Copyright (C) 1994-2008 Werner Lemberg <wl@@gnu.org> +% +% 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 in doc/COPYING; if not, write to the Free +% Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +% MA 02110-1301 USA + +% To print this CWEB file you should (but not must) use the CWEAVE of the +% c2cweb-package (found at the CTAN archives, e.g. ftp.dante.de) and then say +% +% cweave +a extconv.w +% +% This (fully compatible) CWEAVE can transform CWEB-files with alternative +% output rules (look at the position of braces below!) the author (it's me +% too :-) prefer. Otherwise this file will be formatted traditionally. + +\def\title{extconv (CJK Version 4.8.0)} + +\def\topofcontents{ + \null\vfill + \centerline{\titlefont The {\ttitlefont extconv} program} + \vskip 20pt + \centerline{(CJK Version 4.8.0)} + \vfill} + +\def\botofcontents{ + \vfill + \noindent + Copyright \copyright\ 1996, 1998 by Werner Lemberg + \bigskip\noindent + Permission is granted to make and distribute verbatim copies of this + document provided that the copyright notice and this permission notice + are preserved on all copies. + + \smallskip\noindent + Permission is granted to copy and distribute modified versions of this + document under the conditions for verbatim copying, provided that the + entire resulting derived work is distributed under the terms of a + permission notice identical to this one.} + +\pageno=\contentspagenumber \advance\pageno by 1 +\let\maybe=\iftrue +\fullpageheight=240mm +\pageheight=223mm +\pagewidth=158mm +\setpage +\frenchspacing + +\noinx +\nosecs +\nocon + +@* Function and Use. +This small program will convert Big~5+ or GBK encoded Chinese characters +into a `preprocessed' form. The need of this program arises from the fact +that these two encodings use the characters `\.{\\}', `\.{\{}', and `\.{\}}' +which have special meanings in \TeX. + +Use this program as a filter: + +\hskip 2em \.{extconv < input\_file > output\_file} + + +@* The program. +The only function of this program is to replace all occurrences of Big~5+ +and GBK encoded characters \.{XY} (\.{X} and \.{Y} are the first and the +second byte of the character) with +\.{\char94 \char94 7fX\char94 \char94 7fZZZ\char94 \char94 7f}, where \.{ZZZ} +represents the second byte as a decimal number. \.{0x7F} is used as an active +character and delimiter. + +Additionally we define a \TeX\ macro at the very beginning to signal a +preprocessed file. + +The following code is very simple. No error detection is done because \TeX\ +which will see the output of \.{extconv} complains loudly if something is +wrong. + +@d banner +"extconv (CJK ver. 4.8.0)" + +@c +#include <stdio.h> +#include <stdlib.h>@# + + +int main(argc, argv) + int argc; + char *argv[]; + + {int ch; + + + fprintf(stdout, "\\def\\CJKpreproc{%s}", banner);@# + + ch = fgetc(stdin);@# + + while(!feof(stdin)) + {if(ch >= 0x81 && ch <= 0xFE) + {fprintf(stdout, "\177%c\177", ch);@# + + ch = fgetc(stdin); + if(!feof(stdin)) + fprintf(stdout, "%d\177", ch); + } + else + fputc(ch, stdout);@# + + ch = fgetc(stdin); + } + exit(EXIT_SUCCESS); + return 0; /* never reached */ + } diff --git a/Master/texmf-dist/source/latex/cjk/utils/extconv/gbklatex b/Master/texmf-dist/source/latex/cjk/utils/extconv/gbklatex new file mode 100644 index 00000000000..4136537872e --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/extconv/gbklatex @@ -0,0 +1,43 @@ +#! /bin/sh + +# Copyright (C) 1994-2008 Werner Lemberg <wl@gnu.org> +# +# 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 in doc/COPYING; if not, write to the Free +# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +# MA 02110-1301 USA + +n=1 +argv= + +# get last argument +while test 1 -lt $#; do + eval argv$n=\$1 + argv="$argv \"\$argv$n\"" + n=`expr $n + 1` + shift +done + +# replace extension with .cjk or append .cjk if there is no extension +tex=$1 +case $tex in +""|*.cjk) + echo >&2 "Usage: $0 [options] latex-file" + exit 1;; +*) + aux=`expr "X$tex" : 'X\(.*\)\.[^/]*$' \| "X$tex" : 'X\(.*\)'`.cjk;; +esac + +extconv < "$tex" > "$aux" && eval latex "$argv" "\$aux" + +# EOF diff --git a/Master/texmf-dist/source/latex/cjk/utils/extconv/gbklatex.bat b/Master/texmf-dist/source/latex/cjk/utils/extconv/gbklatex.bat new file mode 100755 index 00000000000..ccc6c76acd5 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/extconv/gbklatex.bat @@ -0,0 +1,3 @@ +call f_name %1
+extconv < %1 > %fd%%fp%%fn%.cjk
+latex %fd%%fu%%fn%.cjk
diff --git a/Master/texmf-dist/source/latex/cjk/utils/extconv/gbklatex.cmd b/Master/texmf-dist/source/latex/cjk/utils/extconv/gbklatex.cmd new file mode 100644 index 00000000000..cbe9776de04 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/extconv/gbklatex.cmd @@ -0,0 +1,44 @@ +/*----------------------------------------------------------------------*\ + gbklatex.cmd + + This file is part of the CJK macro package for LaTeX2e ver. 4.8.0 + + Copyright (C) 1994-2008 Wonkoo Kim <wkim+@pitt.edu> + + 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 in doc/COPYING; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, + MA 02110-1301 USA + + Wonkoo Kim (wkim+@pitt.edu), September 2, 1996 +\*----------------------------------------------------------------------*/ + +Call RxFuncAdd 'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs' +Call SysLoadFuncs + +parse arg file + +drive = filespec('drive', file) +path = filespec('path', file) +fname = filespec('name', file) +m = lastpos('.', fname) +if (m = 0) then m = length(fname) + 1 +cjkfile = drive||path||delstr(fname, m)||'.cjk' + +'extconv <' file '>' cjkfile + +ucjkfile = translate(cjkfile,'/','\') +if stream(cjkfile, 'C', 'QUERY EXISTS') \= '' then + 'call latex.cmd' ucjkfile + +/* End of gbklatex.cmd */ diff --git a/Master/texmf-dist/source/latex/cjk/utils/extconv/gbkpdflatex b/Master/texmf-dist/source/latex/cjk/utils/extconv/gbkpdflatex new file mode 100644 index 00000000000..e28761ef423 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/extconv/gbkpdflatex @@ -0,0 +1,43 @@ +#! /bin/sh + +# Copyright (C) 1994-2008 Werner Lemberg <wl@gnu.org> +# +# 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 in doc/COPYING; if not, write to the Free +# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +# MA 02110-1301 USA + +n=1 +argv= + +# get last argument +while test 1 -lt $#; do + eval argv$n=\$1 + argv="$argv \"\$argv$n\"" + n=`expr $n + 1` + shift +done + +# replace extension with .cjk or append .cjk if there is no extension +tex=$1 +case $tex in +""|*.cjk) + echo >&2 "Usage: $0 [options] pdflatex-file" + exit 1;; +*) + aux=`expr "X$tex" : 'X\(.*\)\.[^/]*$' \| "X$tex" : 'X\(.*\)'`.cjk;; +esac + +extconv < "$tex" > "$aux" && eval pdflatex "$argv" "\$aux" + +# EOF diff --git a/Master/texmf-dist/source/latex/cjk/utils/f_name.bat b/Master/texmf-dist/source/latex/cjk/utils/f_name.bat new file mode 100755 index 00000000000..70e6e69ce9a --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/f_name.bat @@ -0,0 +1,205 @@ +@echo off
+:4dosCheck
+ if "%@eval[2+2]"=="4" loadbtm on
+:Start
+ if [%1]==[] goto Usage
+ if [%1]==[/?] goto Help
+ if [%2]==[] goto InputCheck
+REM
+REM This file is called F_NAME.BAT per default. Call it whatever you like.
+REM
+REM You need enough free environment space for this batch file.
+REM If there's not enough free space, f_name.bat will give you a warning.
+REM
+REM While f_name.bat tries to test your free environment space, you'll
+REM probably need to check your config.sys for the following line:
+REM
+REM SHELL=C:\DOS\COMMAND.COM C:\DOS\ /E:1024 /p
+REM
+REM The '/E:1024' sets your environment space - it will probably need to
+REM be 1024 or higher (unless you're really economical with env-space).
+REM
+REM If you are not sure about free space, set fp and fn with long dummy
+REM strings in autoexec.bat to get enough free space, eg.:
+REM
+REM set fp=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+REM set fu=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+REM set fn=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+REM set fd=xx
+REM set fe=xxxx
+REM
+REM Using dummy strings is necessary if you're going to execute
+REM f_name.bat from a second command shell, eg. from Norton Commander.
+REM In this case the total length reserved for f_name.bat should be up
+REM to 192 bytes. My suggestion is, let the strings for fp, fu, and fn count
+REM up to 186 bytes (eg. 62 each).
+REM
+REM Some releases of DOS (eg. some beta-releases/pre-releases of DOS 6.0
+REM and some older DOS releases) does not support the batchcommand 'NOT'.
+REM If you're still using such a release you cannot use this batchfile
+REM since it uses this batchcommand.
+REM
+REM Please also note that f_name.bat cannot work properly if filespec is
+REM longer than around 38 (? I don't know the exact length) characters. If
+REM filespec is long, f_name.bat will fail at 'for %%x in ... do if ...'
+REM lines. The result of error is fairly unpredictable as DOS will try to
+REM execute with a truncated batch command line. So, please use the
+REM batch file for short filespecs (< 38??). (On my DOS 6.22 using
+REM strings above 38 chars gives me an endless loop, Claus Futtrup).
+REM
+REM For large batchfiles it is usually an advantage to use a
+REM 'batch-compiler', which will convert the .bat file into a .com or
+REM .exe file. With f_name.bat this could probably speed it up many
+REM times, but it has not been possible to find a batch-compiler, which
+REM will compile this batchfile. The compilers PWR14G.ZIP and
+REM BAT2EX15.ZIP have been tested without success.
+REM
+REM This modified release is more solid when it comes to garbage input, it
+REM is provided with help option, additional documentation and additional
+REM checking for sufficient environment space and now remove the temporary
+REM environment settings (P, Q, R, S, T) at the bottom of the batchfile. The
+REM structure is changed a bit, but the basic still is made by Wonkoo Kim.
+REM
+REM Please do not distribute this file without the above documentation
+REM included in the batch-file. If you change the file please add your
+REM name as a "modifier" as done below + document your changes. We do
+REM not intend to hold a copyright, though. You may use, misuse or abuse
+REM this batchfile as you see fit.
+REM
+REM This file is provided to you on a free basis. The author/modifiers
+REM do not want to be hold responsible to whatever this batchfile is
+REM doing. Use of this batchfile is entirely at your own risk.
+REM
+REM Wonkoo Kim (wkim+@pitt.edu), August 11, 1995
+REM Modified by Claus Futtrup (odie@csek.iprod.auc.dk), August 23. 1995
+REM Modified by Werner Lemberg (wl@gnu.org), Jan. 10. 1996
+REM to run this batch file under 4DOS too (replacing all %%f with %%x
+REM and doubling the speed with the LOADBTM ON command)
+REM Modified by Werner Lemberg (wl@gnu.org), Aug. 31. 1996
+REM to return unix-like paths additionally in the variable %fu%;
+REM the batch file will now parse e.g. \a.b\ correctly as a directory.
+REM
+:Usage
+ echo.
+ echo Usage: %0 filespec
+ echo.
+ echo Returns: fd (drive), fp (path), fu (unix path), fn (name), fe (extension)
+ echo.
+ echo Type %0 /? for additional help
+ echo %0 is made by Wonkoo Kim, modified by C. Futtrup and W. Lemberg.
+ echo.
+ goto END
+:Help
+ cls
+ echo %0 -- extracts the drive, path, name, and ext from file-path-name.
+ echo.
+ echo Return envs: FD (drive), FP (path), FU (unix path), FN (name), FE (ext)
+ echo Temp envs: P, Q, R, S, T
+ echo.
+ echo INPUT FILE fd fp fn fe
+ echo ------------------ --------- --------- --------- ---------
+ echo abc abc
+ echo abc.tex abc .tex
+ echo c:\abc.tex c: \ abc .tex
+ echo c:tmp\abc.tex c: tmp\ abc .tex
+ echo c:\tmp\abc.tex c: \tmp\ abc .tex
+ echo c:tmp\tex\abc.tex c: tmp\tex\ abc .tex
+ echo c:\tmp\tex\abc.tex c: \tmp\tex\ abc .tex
+ echo.
+ echo Please note this file isn't blazing fast + it needs a lot
+ echo of environment space. See comments in %0 for more info.
+ echo.
+ echo Wonkoo Kim (wkim+@pitt.edu), August 11, 1995
+ echo Modified by Claus Futtrup (odie@csek.iprod.auc.dk), August 23. 1995
+ echo Modified by Werner Lemberg (wl@gnu.org), Aug 31. 1996
+ goto END
+:InputCheck
+ for %%x in (%1) do if "%%x"=="%1" goto Okay
+ echo *** ERROR: Please do not use wildcards in input file name.
+ goto END
+:Okay
+ set p=
+ set r=
+ set fp=
+ set fu=
+ set fe=
+ set fn=%1
+ set s=XXXXXXXX%fn%
+ set t=%fn%
+ set s=
+ if [%t%]==[%1] goto GetDrive
+:EnvErr
+ echo *** ERROR: Not enough environment space!
+ echo *** See documentation at top of file '%0'
+ goto END
+:GetDrive
+ for %%x in (/%t%) do set fn=%%x
+ for %%x in (/%t%) do if not [%%x]==[%fn%] set fd=%%x
+ if [%fn%]==[:] goto DriveOnly
+ set t=%fn%
+ for %%x in (/%t%) do set fn=%%x
+ if [:%fn%]==[%t%] goto DriveFound
+ set fd=
+ set fn=%1
+ goto GetPath
+:DriveOnly
+ set fn=
+:DriveFound
+ set fd=%fd%:
+:GetPath
+ set s=%fn%
+:PathLoop
+ set t=%s%
+ for %%x in (/%t%) do set s=%%x
+ set q=
+ for %%x in (/%t%) do if not [%%x]==[%s%] set q=%%x
+ if "\%s%"=="%t%" goto Separator
+ set p=%p%%q%
+ set r=%r%%q%
+ if [%s%]==[%t%] goto PathCheck
+ goto PathLoop
+:Separator
+ set fn=%s%
+ set p=%p%\
+ set r=%r%/
+ set fp=%p%
+ set fu=%r%
+ goto PathLoop
+:PathCheck
+ if [%s%]==[\] goto NoFilename
+ if not [%fn%]==[\] goto GetExt
+ set fp=\
+ set fu=/
+ set fn=
+ goto Done
+:NoFilename
+ set fp=%p%\
+ set fu=%r%/
+ set fn=
+ goto Done
+:GetExt
+ set s=%fn%
+ set fe=%fn%
+ set fn=
+:ExtLoop
+ set t=%fe%
+ for %%x in (/%t%) do set fe=%%x
+ if ".%fe%"=="%t%" goto ExtFound
+ if [%fe%]==[%t%] goto NoExt
+ for %%x in (/%t%) do if not [%%x]==[%fe%] set fn=%fn%%%x
+ goto ExtLoop
+:ExtFound
+ set fe=.%fe%
+ goto Done
+:NoExt
+ if not [%fe%]==[.] set fn=%s%
+ set fe=
+:Done
+ echo DRIVE=%fd% PATH=%fp% UNIX_PATH=%fu% NAME=%fn% EXT=%fe%
+:END
+ set p=
+ set q=
+ set r=
+ set s=
+ set t=
+
diff --git a/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/Makefile.gnu b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/Makefile.gnu new file mode 100644 index 00000000000..5b42acf1604 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/Makefile.gnu @@ -0,0 +1,127 @@ +# This file is part of the CJK package Version 4.8.0 (22-May-2008) + +# Copyright (C) 1994-2008 Werner Lemberg <wl@gnu.org> +# +# 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 in doc/COPYING; if not, write to the Free +# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +# MA 02110-1301 USA + +# GNU Makefile for hbf2gf + +.PHONY: default all debug documentation clean \ + do_all + +.CAUTIOUS: hbf2gf.c + +default: + @echo " say " + @echo ". " + @echo " make TARGET OS=SYSTEM " + @echo ". " + @echo " SYSTEM can be one of the following: " + @echo ". " + @echo " os2 bound (emx) " + @echo " dos (djgpp) " + @echo ". " + @echo " TARGET can be one of the following: " + @echo ". " + @echo " all debug " + @echo " documentation (needs cweave package)" + @echo " clean " + +ifdef OS + + # default values (bound executables built with emx) + FS = msdos + CC = gcc -Wall -O -DHAVE_EMTEXDIR + LIB = + O = .o + EXE = .exe + RM = del + + ifeq ($(OS),os2) + FS = msdos + CC = gcc -Wall -Zomf -Zmtd -O -DHAVE_EMTEXDIR + LIB = hbf2gf.def + O = .obj + EXE = .exe + RM = del + endif + + ifeq ($(OS),dos) + FS = msdos + CC = gcc -Wall -O -DHAVE_EMTEXDIR + LIB = + O = .o + EXE = .exe + RM = del + endif + + + %$O: %.c + $(CC) $(CFLAGS) -c -D$(FS) -o $@ $< + + %.c: %.w %.ch + $(CTANGLE) $^ $@ + %.c: %.w + $(CTANGLE) $< + + %.tex: %.w %.ch + $(CWEAVE) +ai $^ $@ + %.tex: %.w + $(CWEAVE) +ai $< + + %.dvi: %.tex + $(TEX) $* + + + all: + $(MAKE) -f Makefile.gnu do_all CFLAGS=-s + + debug: + $(MAKE) -f Makefile.gnu do_all CFLAGS=-g + + # this builds the .dvi-file + documentation: hbf2gf.dvi + + # remove the unnecessary files; + clean: + -$(RM) *.scn + -$(RM) *.toc + -$(RM) *.idx + -$(RM) *.log + -$(RM) *.o + + + do_all: hbf2gf$(EXE) + + hbf2gf$(EXE): hbf2gf$O hbf$O emdir$O emtexdir$O + ifeq ($(OS),dos) + $(CC) $(CFLAGS) -o $(basename $@) $^ + strip $(basename $@) + coff2exe $(basename $@) + -del $(basename $@) + else + $(CC) $(CFLAGS) -o $@ $^ $(LIB) + endif + + hbf$O: hbf.c hbf.h + emdir$O: emdir.c emdir.h + emtexdir$O: emtexdir.c emtexdir.h emdir.h + +else # ifdef OS + + all debug documentation clean: default + +endif diff --git a/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/Makefile.in b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/Makefile.in new file mode 100644 index 00000000000..ece2f79c89a --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/Makefile.in @@ -0,0 +1,127 @@ +# Makefile for hbf2gf -- wl@gnu.org + +# Copyright (C) 1994-2008 Werner Lemberg <wl@gnu.org> +# +# 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 in doc/COPYING; if not, write to the Free +# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +# MA 02110-1301 USA + +VPATH = @srcdir@ +srcdir = @srcdir@ + +prefix = @prefix@ +exec_prefix = @exec_prefix@ +libdir = @libdir@ +bindir = @bindir@ +mandir = @mandir@ + +RM = @RM@ +RMF = @RM@ -f + +TEX = tex +CTANGLE = ctangle +CWEAVE = cweave + +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ + +CC = @CC@ +CPP = @CPP@ + +MKINSTALLDIRS = $(srcdir)/mkinstalldirs + +CFLAGS = @CFLAGS@ +CPPFLAGS = @CPPFLAGS@ @DEFS@ @no_strdup@ -Dunix +MY_CFLAGS = $(CFLAGS) $(CPPFLAGS) @XX_CFLAGS@ +LDFLAGS = @LDFLAGS@ @LIBS@ + +SRC = hbf2gf.c $(srcdir)/hbf.c +OBJ = hbf2gf.o hbf.o + + +.SUFFIXES: .dvi .tex .w + + +.w.c: + $(CTANGLE) $< +.c.o: + $(CC) -c $(MY_CFLAGS) $< + +.w.tex: + $(CWEAVE) +ai $< + +.tex.dvi: + $(TEX) $< + + + +PROGRAMS = hbf2gf + +default all: $(PROGRAMS) + +hbf2gf.c: $(srcdir)/hbf2gf.w + +hbf2gf: $(OBJ) + $(CC) $(MY_CFLAGS) -o hbf2gf $(OBJ) $(LDFLAGS) + +documentation: hbf2gf.dvi + +install: $(PROGRAMS) + $(MKINSTALLDIRS) $(bindir) $(mandir)/man1 + for P in $(PROGRAMS) ; do \ + $(INSTALL_PROGRAM) $$P $(bindir)/$$P ; \ + $(INSTALL_DATA) $(srcdir)/$$P.1 $(mandir)/man1 ; \ + done + +uninstall: + -for P in $(PROGRAMS) ; do \ + $(RMF) $(bindir)/$$P ; \ + $(RMF) $(mandir)/man1/$$P.1 ; \ + done + +clean: do_clean + +distclean: do_clean + -$(RMF) dep.end $(PROGRAMS) *.dvi + -$(RMF) *~ *.orig core *.core + -$(RMF) config.cache config.log config.status Makefile + +do_clean: + -$(RMF) *.o + -$(RMF) *.scn *.toc *.idx *.log + +maintainer-clean: distclean + -$(RMF) hbf2gf.c + +depend: $(SRC) + (echo '/^#.* PUT NO STUFF BELOW/,$$d'; echo w; echo q) | \ + ed - Makefile + echo '# Dependencies generated by make depend: PUT NO STUFF BELOW' \ + >> Makefile + for file in $(SRC) ; do \ + $(CPP) $(CPPFLAGS) $$file | \ + sed -n -e 's|^# [1-9][0-9]* "\([^/].*\.h\)".*|\1|p' \ + -e 's|^# [1-9][0-9]* "\($(srcdir)/.*\.h\)".*|\1|p' | \ + sed -e 's|/\./|.|g' -e "s/^/`basename $$file .c`.o: /" ; \ + done | \ + sort -u | \ + awk '{ if (LINE == 1) \ + { line = last = $$1 } \ + else if ($$1 != last) \ + { print line ; line = last = $$1 } \ + line = line " " $$2 } \ + END { print line }' >> Makefile + +# Dependencies generated by make depend: PUT NO STUFF BELOW diff --git a/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/README b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/README new file mode 100644 index 00000000000..a7de0ec1402 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/README @@ -0,0 +1,2 @@ +Additional installation documentation can be found in the files `INSTALL' +(in the top directory) and `doc/hbf2gf.txt'. diff --git a/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/c-auto.h b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/c-auto.h new file mode 100644 index 00000000000..7554af22494 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/c-auto.h @@ -0,0 +1,39 @@ +/* + * c-auto.h + * + * This file is part of the CJK package ver 4.8.0 22-May-2008 + * + */ + +/* + Copyright (C) 1994-2008 Werner Lemberg <wl@gnu.org> + + 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 in doc/COPYING; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, + MA 02110-1301 USA + */ + +#ifndef C_AUTO_H +#define C_AUTO_H + +/* + * We need to get kpathsea's configuration file. + */ + +#include "kpathsea/c-auto.h" + +#endif /* C_AUTO_H */ + + +/* end */ diff --git a/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/cfg/README b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/cfg/README new file mode 100644 index 00000000000..689d59e7397 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/cfg/README @@ -0,0 +1,10 @@ +In this directory you find some hbf2gf configuration files for common CJK +bitmap fonts. + +No paths are specified for the HBF files -- under web2c you should add the +path for these fonts to the `MISCFONTS' variable in texmf.cnf; under emTeX +you should set the environment variable `HBFONTS'. + +The font paths used here in the config files of this directory are TDS +compliant; only the `HBF_TARGET' environment variable is used (an example +would be `set HBF_TARGET=/usr/local/TeX/texmf/fonts'). diff --git a/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/cfg/b5ka12.cfg b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/cfg/b5ka12.cfg new file mode 100644 index 00000000000..f5c142f0235 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/cfg/b5ka12.cfg @@ -0,0 +1,28 @@ + +hbf_header ntukai48.hbf +mag_x 1 +threshold 128 +comment Big 5 normal 48x48 pixel font scaled and adapted to 12pt + +design_size 12 + +x_offset 2 +y_offset -12 + +nmb_files -1 + +output_name b5ka12 + +checksum 123456789 + +dpi_x 300 + +pk_files no +tfm_files yes + + long_extension no + +coding codingscheme Big 5 encoded TeX text + +pk_directory $HBF_TARGET/pk/modeless/ntu/b5ka12/ +tfm_directory $HBF_TARGET/tfm/ntu/b5ka12/ diff --git a/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/cfg/b5kr12.cfg b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/cfg/b5kr12.cfg new file mode 100644 index 00000000000..9d9da2c1a2f --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/cfg/b5kr12.cfg @@ -0,0 +1,30 @@ + +hbf_header ntukai48.hbf +mag_x 1 +threshold 128 +comment Big 5 normal 48x48 pixel font rotated, scaled and adapted to 12pt + +design_size 12 + +x_offset 2 +y_offset -10 + +rotation yes + +nmb_files -1 + +output_name b5kr12 + +checksum 123456789 + +dpi_x 300 + +pk_files no +tfm_files yes + + long_extension no + +coding codingscheme Big 5 encoded TeX text + +pk_directory $HBF_TARGET/pk/modeless/ntu/b5kr12/ +tfm_directory $HBF_TARGET/tfm/ntu/b5kr12/ diff --git a/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/cfg/b5so12.cfg b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/cfg/b5so12.cfg new file mode 100644 index 00000000000..dc0bcd9fbf0 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/cfg/b5so12.cfg @@ -0,0 +1,31 @@ + +hbf_header et24.hbf +mag_x 2.076 +threshold 128 +comment fanti songti 24x24 pixel font magnified and adapted for 12pt + +design_size 12.0 + +x_offset 3 +y_offset -8 + +nmb_files -1 + +output_name b5so12 + +checksum 123456789 + +dpi_x 300 + +tfm_files yes +pk_files no + +coding codingscheme Big 5 encoded TeX text + +pk_directory $HBF_TARGET/pk/modeless/eten/b5so12/ +tfm_directory $HBF_TARGET/tfm/eten/b5so12/ + + rm_command del + cp_command copy + long_extension no + job_extension .cmd diff --git a/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/cfg/c1so12.cfg b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/cfg/c1so12.cfg new file mode 100644 index 00000000000..de5b32b3efc --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/cfg/c1so12.cfg @@ -0,0 +1,28 @@ + +hbf_header cns40-1.hbf +mag_x 1 +threshold 128 +comment CNS plane 1 song 40x40 pixel font scaled and adapted to 12pt + +design_size 12.0 + +x_offset 2 +y_offset -8 + +nmb_files -1 + +output_name c1so12 + +checksum 123456789 + +dpi_x 300 + +pk_files no +tfm_files yes + + long_extension no + +coding codingscheme CNS plane 1 encoded TeX text + +pk_directory $HBF_TARGET/pk/modeless/cns/c1so12/ +tfm_directory $HBF_TARGET/tfm/cns/c1so12/ diff --git a/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/cfg/c2so12.cfg b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/cfg/c2so12.cfg new file mode 100644 index 00000000000..969af8fae14 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/cfg/c2so12.cfg @@ -0,0 +1,28 @@ + +hbf_header cns40-2.hbf +mag_x 1 +threshold 128 +comment CNS plane 2 song 40x40 pixel font scaled and adapted to 12pt + +design_size 12.0 + +x_offset 2 +y_offset -8 + +nmb_files -1 + +output_name c2so12 + +checksum 123456789 + +dpi_x 300 + +pk_files no +tfm_files yes + + long_extension no + +coding codingscheme CNS plane 2 encoded TeX text + +pk_directory $HBF_TARGET/pk/modeless/cns/c2so12/ +tfm_directory $HBF_TARGET/tfm/cns/c2so12/ diff --git a/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/cfg/c3so12.cfg b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/cfg/c3so12.cfg new file mode 100644 index 00000000000..0e65768ee5e --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/cfg/c3so12.cfg @@ -0,0 +1,28 @@ + +hbf_header cns40-3.hbf +mag_x 1 +threshold 128 +comment CNS plane 3 song 40x40 pixel font scaled and adapted to 12pt + +design_size 12.0 + +x_offset 2 +y_offset -8 + +nmb_files -1 + +output_name c3so12 + +checksum 123456789 + +dpi_x 300 + +pk_files no +tfm_files yes + + long_extension no + +coding codingscheme CNS plane 3 encoded TeX text + +pk_directory $HBF_TARGET/pk/modeless/cns/c3so12/ +tfm_directory $HBF_TARGET/tfm/cns/c3so12/ diff --git a/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/cfg/c4so12.cfg b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/cfg/c4so12.cfg new file mode 100644 index 00000000000..8ea3a8b270c --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/cfg/c4so12.cfg @@ -0,0 +1,28 @@ + +hbf_header cns40-4.hbf +mag_x 1 +threshold 128 +comment CNS plane 4 song 40x40 pixel font scaled and adapted to 12pt + +design_size 12.0 + +x_offset 2 +y_offset -8 + +nmb_files -1 + +output_name c4so12 + +checksum 123456789 + +dpi_x 300 + +pk_files no +tfm_files yes + + long_extension no + +coding codingscheme CNS plane 4 encoded TeX text + +pk_directory $HBF_TARGET/pk/modeless/cns/c4so12/ +tfm_directory $HBF_TARGET/tfm/cns/c4so12/ diff --git a/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/cfg/c5so12.cfg b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/cfg/c5so12.cfg new file mode 100644 index 00000000000..1b81c90a0d3 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/cfg/c5so12.cfg @@ -0,0 +1,28 @@ + +hbf_header cns40-5.hbf +mag_x 1 +threshold 128 +comment CNS plane 5 song 40x40 pixel font scaled and adapted to 12pt + +design_size 12.0 + +x_offset 2 +y_offset -8 + +nmb_files -1 + +output_name c5so12 + +checksum 123456789 + +dpi_x 300 + +pk_files no +tfm_files yes + + long_extension no + +coding codingscheme CNS plane 5 encoded TeX text + +pk_directory $HBF_TARGET/pk/modeless/cns/c5so12/ +tfm_directory $HBF_TARGET/tfm/cns/c5so12/ diff --git a/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/cfg/c6so12.cfg b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/cfg/c6so12.cfg new file mode 100644 index 00000000000..5b9c912ce53 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/cfg/c6so12.cfg @@ -0,0 +1,28 @@ + +hbf_header cns40-6.hbf +mag_x 1 +threshold 128 +comment CNS plane 6 song 40x40 pixel font scaled and adapted to 12pt + +design_size 12.0 + +x_offset 2 +y_offset -8 + +nmb_files -1 + +output_name c6so12 + +checksum 123456789 + +dpi_x 300 + +pk_files no +tfm_files yes + + long_extension no + +coding codingscheme CNS plane 6 encoded TeX text + +pk_directory $HBF_TARGET/pk/modeless/cns/c6so12/ +tfm_directory $HBF_TARGET/tfm/cns/c6so12/ diff --git a/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/cfg/c7so12.cfg b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/cfg/c7so12.cfg new file mode 100644 index 00000000000..051b2601426 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/cfg/c7so12.cfg @@ -0,0 +1,28 @@ + +hbf_header cns40-7.hbf +mag_x 1 +threshold 128 +comment CNS plane 7 song 40x40 pixel font scaled and adapted to 12pt + +design_size 12.0 + +x_offset 2 +y_offset -8 + +nmb_files -1 + +output_name c7so12 + +checksum 123456789 + +dpi_x 300 + +pk_files no +tfm_files yes + + long_extension no + +coding codingscheme CNS plane 7 encoded TeX text + +pk_directory $HBF_TARGET/pk/modeless/cns/c7so12/ +tfm_directory $HBF_TARGET/tfm/cns/c7so12/ diff --git a/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/cfg/csso12.cfg b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/cfg/csso12.cfg new file mode 100644 index 00000000000..9ad91b0c574 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/cfg/csso12.cfg @@ -0,0 +1,28 @@ + +hbf_header cns40-b5.hbf +mag_x 1 +threshold 128 +comment CNS song 40x40 pixel font (Bg5 encoded) scaled and adapted to 12pt + +design_size 12.0 + +x_offset 2 +y_offset -8 + +nmb_files -1 + +output_name csso12 + +checksum 123456789 + +dpi_x 300 + +pk_files no +tfm_files yes + + long_extension no + +coding codingscheme Big 5 encoded TeX text + +pk_directory $HBF_TARGET/pk/modeless/cns/csso12/ +tfm_directory $HBF_TARGET/tfm/cns/csso12/ diff --git a/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/cfg/gsfs14.cfg b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/cfg/gsfs14.cfg new file mode 100644 index 00000000000..4b397aca464 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/cfg/gsfs14.cfg @@ -0,0 +1,27 @@ + +hbf_header jfs56.hbf +mag_x 1 +threshold 128 +comment jianti fansongti 56x56 pixel font scaled and adapted to 14.4pt + +design_size 14.4 + +y_offset -13 + +nmb_files -1 + +output_name gsfs14 + +checksum 123456789 + +dpi_x 300 + +pk_files no +tfm_files yes + + long_extension no + +coding codingscheme GuoBiao encoded TeX text + +pk_directory $HBF_TARGET/pk/modeless/ccdos/gsfs14/ +tfm_directory $HBF_TARGET/tfm/ccdos/gsfs14/ diff --git a/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/cfg/j2so12.cfg b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/cfg/j2so12.cfg new file mode 100644 index 00000000000..7e0d70b5c0f --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/cfg/j2so12.cfg @@ -0,0 +1,30 @@ + +hbf_header jisksp40.hbf +mag_x 1.0 +threshold 128 +comment supplemental kanji normal 40x40 pixel font scaled and adapted to 12pt + +design_size 12 + +min_char 0x2121 + +x_offset 2 +y_offset -7 + +nmb_files -1 + +output_name j2so12 + +checksum 123456789 + +dpi_x 300 + +pk_files no +tfm_files yes + + long_extension no + +coding codingscheme JIS2 encoded TeX text + +pk_directory $HBF_TARGET/pk/modeless/jisx0212/j2so12/ +tfm_directory $HBF_TARGET/tfm/jisx0212/j2so12/ diff --git a/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/cfg/jsso12.cfg b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/cfg/jsso12.cfg new file mode 100644 index 00000000000..9bdfc7b1e8a --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/cfg/jsso12.cfg @@ -0,0 +1,28 @@ + +hbf_header kanji48.hbf +mag_x 0.83 +threshold 128 +comment kanji normal 48x48 pixel font scaled and adapted to 12pt + +design_size 12 + +x_offset 2 +y_offset -7 + +nmb_files -1 + +output_name jsso12 + +checksum 123456789 + +dpi_x 300 + +pk_files no +tfm_files yes + + long_extension no + +coding codingscheme JIS encoded TeX text + +pk_directory $HBF_TARGET/pk/modeless/jisx0208/jsso12/ +tfm_directory $HBF_TARGET/tfm/jisx0208/jsso12/ diff --git a/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/cfg/ksso17.cfg b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/cfg/ksso17.cfg new file mode 100644 index 00000000000..c82f7e7eee4 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/cfg/ksso17.cfg @@ -0,0 +1,27 @@ + +hbf_header hanja65.hbf +mag_x 1 +threshold 128 +comment hanja normal 65x65 pixel font scaled and adapted to 17.28pt + +design_size 17.28 + +y_offset -16 + +nmb_files -1 + +output_name ksso17 + +checksum 123456789 + +dpi_x 300 + +pk_files no +tfm_files yes + + long_extension no + +coding codingscheme KS encoded TeX text + +pk_directory $HBF_TARGET/pk/modeless/ksc5601/ksso17/ +tfm_directory $HBF_TARGET/tfm/ksc5601/ksso17/ diff --git a/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/config.guess b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/config.guess new file mode 100644 index 00000000000..c7607c74f1b --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/config.guess @@ -0,0 +1,1526 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 +# Free Software Foundation, Inc. + +timestamp='2008-04-14' + +# This file 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. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + + +# Originally written by Per Bothner <per@bothner.com>. +# Please send patches to <config-patches@gnu.org>. Submit a context +# diff and a properly formatted ChangeLog entry. +# +# This script attempts to guess a canonical system name similar to +# config.sub. If it succeeds, it prints the system name on stdout, and +# exits with 0. Otherwise, it exits with 1. +# +# The plan is that this can be called by configure scripts if you +# don't specify an explicit build system type. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to <config-patches@gnu.org>." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, +2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +trap 'exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ; set_cc_for_build= ;' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + sh5el) machine=sh5le-unknown ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE_ARCH}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep __ELF__ >/dev/null + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "${UNAME_VERSION}" in + Debian*) + release='-gnu' + ;; + *) + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} + exit ;; + *:ekkoBSD:*:*) + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + exit ;; + *:SolidBSD:*:*) + echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} + exit ;; + macppc:MirBSD:*:*) + echo powerpc-unknown-mirbsd${UNAME_RELEASE} + exit ;; + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + exit ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE="alpha" ;; + "EV4.5 (21064)") + UNAME_MACHINE="alpha" ;; + "LCA4 (21066/21068)") + UNAME_MACHINE="alpha" ;; + "EV5 (21164)") + UNAME_MACHINE="alphaev5" ;; + "EV5.6 (21164A)") + UNAME_MACHINE="alphaev56" ;; + "EV5.6 (21164PC)") + UNAME_MACHINE="alphapca56" ;; + "EV5.7 (21164PC)") + UNAME_MACHINE="alphapca57" ;; + "EV6 (21264)") + UNAME_MACHINE="alphaev6" ;; + "EV6.7 (21264A)") + UNAME_MACHINE="alphaev67" ;; + "EV6.8CB (21264C)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8AL (21264B)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8CX (21264D)") + UNAME_MACHINE="alphaev68" ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE="alphaev69" ;; + "EV7 (21364)") + UNAME_MACHINE="alphaev7" ;; + "EV7.9 (21364A)") + UNAME_MACHINE="alphaev79" ;; + esac + # A Pn.n version is a patched version. + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + exit ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit ;; + arm:riscos:*:*|arm:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) + echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include <stdio.h> /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && + dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`$dummy $dummyarg` && + { echo "$SYSTEM_NAME"; exit; } + echo mips-mips-riscos${UNAME_RELEASE} + exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include <sys/systemcfg.h> + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` + then + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit ;; + *:AIX:*:[456]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include <stdlib.h> + #include <unistd.h> + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ ${HP_ARCH} = "hppa2.0w" ] + then + eval $set_cc_for_build + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | + grep __LP64__ >/dev/null + then + HP_ARCH="hppa2.0w" + else + HP_ARCH="hppa64" + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include <unistd.h> + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + echo unknown-hitachi-hiuxwe2 + exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:FreeBSD:*:*) + case ${UNAME_MACHINE} in + pc98) + echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + amd64) + echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + *) + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + esac + exit ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit ;; + *:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit ;; + i*:windows32*:*) + # uname -m includes "-pc" on this system. + echo ${UNAME_MACHINE}-mingw32 + exit ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit ;; + *:Interix*:[3456]*) + case ${UNAME_MACHINE} in + x86) + echo i586-pc-interix${UNAME_RELEASE} + exit ;; + EM64T | authenticamd) + echo x86_64-unknown-interix${UNAME_RELEASE} + exit ;; + IA64) + echo ia64-unknown-interix${UNAME_RELEASE} + exit ;; + esac ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix + exit ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + *:GNU:*:*) + # the GNU system + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu + exit ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit ;; + arm*:Linux:*:*) + eval $set_cc_for_build + if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_EABI__ + then + echo ${UNAME_MACHINE}-unknown-linux-gnu + else + echo ${UNAME_MACHINE}-unknown-linux-gnueabi + fi + exit ;; + avr32*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + cris:Linux:*:*) + echo cris-axis-linux-gnu + exit ;; + crisv32:Linux:*:*) + echo crisv32-axis-linux-gnu + exit ;; + frv:Linux:*:*) + echo frv-unknown-linux-gnu + exit ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m32r*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + mips:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef mips + #undef mipsel + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mipsel + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips + #else + CPU= + #endif + #endif +EOF + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' + /^CPU/{ + s: ::g + p + }'`" + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + ;; + mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef mips64 + #undef mips64el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mips64el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips64 + #else + CPU= + #endif + #endif +EOF + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' + /^CPU/{ + s: ::g + p + }'`" + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + ;; + or32:Linux:*:*) + echo or32-unknown-linux-gnu + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-gnu + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-gnu + exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null + if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + exit ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-gnu ;; + PA8*) echo hppa2.0-unknown-linux-gnu ;; + *) echo hppa-unknown-linux-gnu ;; + esac + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-gnu + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux + exit ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + vax:Linux:*:*) + echo ${UNAME_MACHINE}-dec-linux-gnu + exit ;; + x86_64:Linux:*:*) + echo x86_64-unknown-linux-gnu + exit ;; + xtensa*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + i*86:Linux:*:*) + # The BFD linker knows what the default object file format is, so + # first see if it will tell us. cd to the root directory to prevent + # problems with other programs or directories called `ld' in the path. + # Set LC_ALL=C to ensure ld outputs messages in English. + ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ + | sed -ne '/supported targets:/!d + s/[ ][ ]*/ /g + s/.*supported targets: *// + s/ .*// + p'` + case "$ld_supported_targets" in + elf32-i386) + TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" + ;; + a.out-i386-linux) + echo "${UNAME_MACHINE}-pc-linux-gnuaout" + exit ;; + "") + # Either a pre-BFD a.out linker (linux-gnuoldld) or + # one that does not give us useful --help. + echo "${UNAME_MACHINE}-pc-linux-gnuoldld" + exit ;; + esac + # Determine whether the default compiler is a.out or elf + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include <features.h> + #ifdef __ELF__ + # ifdef __GLIBC__ + # if __GLIBC__ >= 2 + LIBC=gnu + # else + LIBC=gnulibc1 + # endif + # else + LIBC=gnulibc1 + # endif + #else + #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) + LIBC=gnu + #else + LIBC=gnuaout + #endif + #endif + #ifdef __dietlibc__ + LIBC=dietlibc + #endif +EOF + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' + /^LIBC/{ + s: ::g + p + }'`" + test x"${LIBC}" != x && { + echo "${UNAME_MACHINE}-pc-linux-${LIBC}" + exit + } + test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } + ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit ;; + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit ;; + i*86:*:5:[678]*) + # UnixWare 7.x, OpenUNIX and OpenServer 6. + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name` + echo ${UNAME_MACHINE}-pc-isc$UNAME_REL + elif /bin/uname -X 2>/dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i386. + echo i386-pc-msdosdjgpp + exit ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit ;; + M68*:*:R3V[5678]*:*) + test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4; exit; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says <Richard.M.Bartel@ccMail.Census.GOV> + echo i586-unisys-sysv4 + exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes <hewes@openmarket.com>. + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo ${UNAME_MACHINE}-stratus-vos + exit ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit ;; + BePC:Haiku:*:*) # Haiku running on Intel PC compatible. + echo i586-pc-haiku + exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit ;; + SX-7:SUPER-UX:*:*) + echo sx7-nec-superux${UNAME_RELEASE} + exit ;; + SX-8:SUPER-UX:*:*) + echo sx8-nec-superux${UNAME_RELEASE} + exit ;; + SX-8R:SUPER-UX:*:*) + echo sx8r-nec-superux${UNAME_RELEASE} + exit ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Darwin:*:*) + UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown + case $UNAME_PROCESSOR in + unknown) UNAME_PROCESSOR=powerpc ;; + esac + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; + NSE-?:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; + NSR-?:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "${UNAME_MACHINE}" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' + exit ;; + i*86:rdos:*:*) + echo ${UNAME_MACHINE}-pc-rdos + exit ;; +esac + +#echo '(No uname command or uname output not recognized.)' 1>&2 +#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 + +eval $set_cc_for_build +cat >$dummy.c <<EOF +#ifdef _SEQUENT_ +# include <sys/types.h> +# include <sys/utsname.h> +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include <sys/param.h> + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix\n"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +# if !defined (ultrix) +# include <sys/param.h> +# if defined (BSD) +# if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +# else +# if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# endif +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# else + printf ("vax-dec-ultrix\n"); exit (0); +# endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + c34*) + echo c34-convex-bsd + exit ;; + c38*) + echo c38-convex-bsd + exit ;; + c4*) + echo c4-convex-bsd + exit ;; + esac +fi + +cat >&2 <<EOF +$0: unable to guess system type + +This script, last modified $timestamp, has failed to recognize +the operating system you are using. It is advised that you +download the most up to date version of the config scripts from + + http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD +and + http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD + +If the version you run ($0) is already up to date, please +send the following data and any information you think might be +pertinent to <config-patches@gnu.org> in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/config.sub b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/config.sub new file mode 100644 index 00000000000..63bfff03070 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/config.sub @@ -0,0 +1,1669 @@ +#! /bin/sh +# Configuration validation subroutine script. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 +# Free Software Foundation, Inc. + +timestamp='2008-04-14' + +# This file is (in principle) common to ALL GNU software. +# The presence of a machine in this file suggests that SOME GNU software +# can handle that machine. It does not imply ALL GNU software can. +# +# This file 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. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + + +# Please send patches to <config-patches@gnu.org>. Submit a context +# diff and a properly formatted ChangeLog entry. +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to <config-patches@gnu.org>." + +version="\ +GNU config.sub ($timestamp) + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, +2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit ;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ + uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ + storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple | -axis | -knuth | -cray) + os= + basic_machine=$1 + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco6) + os=-sco5v6 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ + | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ + | bfin \ + | c4x | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | fido | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | i370 | i860 | i960 | ia64 \ + | ip2k | iq2000 \ + | m32c | m32r | m32rle | m68000 | m68k | m88k \ + | maxq | mb | microblaze | mcore | mep | metag \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64octeon | mips64octeonel \ + | mips64orion | mips64orionel \ + | mips64r5900 | mips64r5900el \ + | mips64vr | mips64vrel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | mt \ + | msp430 \ + | nios | nios2 \ + | ns16k | ns32k \ + | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ + | pyramid \ + | score \ + | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ + | spu | strongarm \ + | tahoe | thumb | tic4x | tic80 | tron \ + | v850 | v850e \ + | we32k \ + | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ + | z8k) + basic_machine=$basic_machine-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12) + # Motorola 68HC11/12. + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + ms1) + basic_machine=mt-unknown + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* | avr32-* \ + | bfin-* | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ + | clipper-* | craynv-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* | iq2000-* \ + | m32c-* | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64octeon-* | mips64octeonel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64r5900-* | mips64r5900el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mips64vr5900-* | mips64vr5900el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipstx39-* | mipstx39el-* \ + | mmix-* \ + | mt-* \ + | msp430-* \ + | nios-* | nios2-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ + | pyramid-* \ + | romp-* | rs6000-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ + | sparclite-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ + | tahoe-* | thumb-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \ + | tron-* \ + | v850-* | v850e-* | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ + | xstormy16-* | xtensa*-* \ + | ymp-* \ + | z8k-*) + ;; + # Recognize the basic CPU types without company name, with glob match. + xtensa*) + basic_machine=$basic_machine-unknown + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + abacus) + basic_machine=abacus-unknown + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amd64) + basic_machine=x86_64-pc + ;; + amd64-*) + basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + blackfin) + basic_machine=bfin-unknown + os=-linux + ;; + blackfin-*) + basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | j90) + basic_machine=j90-cray + os=-unicos + ;; + craynv) + basic_machine=craynv-cray + os=-unicosmp + ;; + cr16) + basic_machine=cr16-unknown + os=-elf + ;; + crds | unos) + basic_machine=m68k-crds + ;; + crisv32 | crisv32-* | etraxfs*) + basic_machine=crisv32-axis + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + crx) + basic_machine=crx-unknown + os=-elf + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + dicos) + basic_machine=i686-pc + os=-dicos + ;; + djgpp) + basic_machine=i586-pc + os=-msdosdjgpp + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; +# I'm not sure what "Sysv32" means. Should this be sysv3.2? + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m68knommu) + basic_machine=m68k-unknown + os=-linux + ;; + m68knommu-*) + basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + mingw32) + basic_machine=i386-pc + os=-mingw32 + ;; + mingw32ce) + basic_machine=arm-unknown + os=-mingw32ce + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + ms1-*) + basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + openrisc | openrisc-*) + basic_machine=or32-unknown + ;; + os400) + basic_machine=powerpc-ibm + os=-os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + parisc) + basic_machine=hppa-unknown + os=-linux + ;; + parisc-*) + basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pc98) + basic_machine=i386-pc + ;; + pc98-*) + basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2 | pentiumiii | pentium3) + basic_machine=i686-pc + ;; + pentium4) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium4-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc) basic_machine=powerpc-unknown + ;; + ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rdos) + basic_machine=i386-pc + os=-rdos + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sde) + basic_machine=mipsisa32-sde + os=-elf + ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sh5el) + basic_machine=sh5le-unknown + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + tic54x | c54x*) + basic_machine=tic54x-unknown + os=-coff + ;; + tic55x | c55x*) + basic_machine=tic55x-unknown + os=-coff + ;; + tic6x | c6x*) + basic_machine=tic6x-unknown + os=-coff + ;; + tile*) + basic_machine=tile-unknown + os=-linux-gnu + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + tpf) + basic_machine=s390x-ibm + os=-tpf + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + xbox) + basic_machine=i686-pc + os=-mingw32 + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + mmix) + basic_machine=mmix-knuth + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ + | -openbsd* | -solidbsd* \ + | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ + | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* \ + | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ + | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ + | -skyos* | -haiku* | -rdos* | -toppers* | -drops*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux-dietlibc) + os=-linux-dietlibc + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -os400*) + os=-os400 + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -syllable*) + os=-syllable + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -tpf*) + os=-tpf + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -aros*) + os=-aros + ;; + -kaos*) + os=-kaos + ;; + -zvmoe) + os=-zvmoe + ;; + -dicos*) + os=-dicos + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + score-*) + os=-elf + ;; + spu-*) + os=-elf + ;; + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + c4x-* | tic4x-*) + os=-coff + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + # This also exists in the configure program, but was not the + # default. + # os=-sunos4 + ;; + m68*-cisco) + os=-aout + ;; + mep-*) + os=-elf + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-haiku) + os=-haiku + ;; + *-ibm) + os=-aix + ;; + *-knuth) + os=-mmixware + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -os400*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -tpf*) + vendor=ibm + ;; + -vxsim* | -vxworks* | -windiss*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/configure b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/configure new file mode 100644 index 00000000000..8135890028e --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/configure @@ -0,0 +1,5741 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.62. +# +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +# 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac + +fi + + + + +# PATH needs CR +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + +# Support unset when possible. +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + { (exit 1); exit 1; } +fi + +# Work around bugs in pre-3.0 UWIN ksh. +for as_var in ENV MAIL MAILPATH +do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + + +# Name of the executable. +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# CDPATH. +$as_unset CDPATH + + +if test "x$CONFIG_SHELL" = x; then + if (eval ":") 2>/dev/null; then + as_have_required=yes +else + as_have_required=no +fi + + if test $as_have_required = yes && (eval ": +(as_func_return () { + (exit \$1) +} +as_func_success () { + as_func_return 0 +} +as_func_failure () { + as_func_return 1 +} +as_func_ret_success () { + return 0 +} +as_func_ret_failure () { + return 1 +} + +exitcode=0 +if as_func_success; then + : +else + exitcode=1 + echo as_func_success failed. +fi + +if as_func_failure; then + exitcode=1 + echo as_func_failure succeeded. +fi + +if as_func_ret_success; then + : +else + exitcode=1 + echo as_func_ret_success failed. +fi + +if as_func_ret_failure; then + exitcode=1 + echo as_func_ret_failure succeeded. +fi + +if ( set x; as_func_ret_success y && test x = \"\$1\" ); then + : +else + exitcode=1 + echo positional parameters were not saved. +fi + +test \$exitcode = 0) || { (exit 1); exit 1; } + +( + as_lineno_1=\$LINENO + as_lineno_2=\$LINENO + test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" && + test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; } +") 2> /dev/null; then + : +else + as_candidate_shells= + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + case $as_dir in + /*) + for as_base in sh bash ksh sh5; do + as_candidate_shells="$as_candidate_shells $as_dir/$as_base" + done;; + esac +done +IFS=$as_save_IFS + + + for as_shell in $as_candidate_shells $SHELL; do + # Try only shells that exist, to save several forks. + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { ("$as_shell") 2> /dev/null <<\_ASEOF +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac + +fi + + +: +_ASEOF +}; then + CONFIG_SHELL=$as_shell + as_have_required=yes + if { "$as_shell" 2> /dev/null <<\_ASEOF +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac + +fi + + +: +(as_func_return () { + (exit $1) +} +as_func_success () { + as_func_return 0 +} +as_func_failure () { + as_func_return 1 +} +as_func_ret_success () { + return 0 +} +as_func_ret_failure () { + return 1 +} + +exitcode=0 +if as_func_success; then + : +else + exitcode=1 + echo as_func_success failed. +fi + +if as_func_failure; then + exitcode=1 + echo as_func_failure succeeded. +fi + +if as_func_ret_success; then + : +else + exitcode=1 + echo as_func_ret_success failed. +fi + +if as_func_ret_failure; then + exitcode=1 + echo as_func_ret_failure succeeded. +fi + +if ( set x; as_func_ret_success y && test x = "$1" ); then + : +else + exitcode=1 + echo positional parameters were not saved. +fi + +test $exitcode = 0) || { (exit 1); exit 1; } + +( + as_lineno_1=$LINENO + as_lineno_2=$LINENO + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; } + +_ASEOF +}; then + break +fi + +fi + + done + + if test "x$CONFIG_SHELL" != x; then + for as_var in BASH_ENV ENV + do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var + done + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} +fi + + + if test $as_have_required = no; then + echo This script requires a shell more modern than all the + echo shells that I found on your system. Please install a + echo modern shell, or manually run the script under such a + echo shell if you do have one. + { (exit 1); exit 1; } +fi + + +fi + +fi + + + +(eval "as_func_return () { + (exit \$1) +} +as_func_success () { + as_func_return 0 +} +as_func_failure () { + as_func_return 1 +} +as_func_ret_success () { + return 0 +} +as_func_ret_failure () { + return 1 +} + +exitcode=0 +if as_func_success; then + : +else + exitcode=1 + echo as_func_success failed. +fi + +if as_func_failure; then + exitcode=1 + echo as_func_failure succeeded. +fi + +if as_func_ret_success; then + : +else + exitcode=1 + echo as_func_ret_success failed. +fi + +if as_func_ret_failure; then + exitcode=1 + echo as_func_ret_failure succeeded. +fi + +if ( set x; as_func_ret_success y && test x = \"\$1\" ); then + : +else + exitcode=1 + echo positional parameters were not saved. +fi + +test \$exitcode = 0") || { + echo No shell found that supports shell functions. + echo Please tell bug-autoconf@gnu.org about your system, + echo including any error possibly output before this message. + echo This can help us improve future autoconf versions. + echo Configuration will now proceed without shell functions. +} + + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line after each line using $LINENO; the second 'sed' + # does the real work. The second script uses 'N' to pair each + # line-number line with the line containing $LINENO, and appends + # trailing '-' during substitution so that $LINENO is not a special + # case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # scripts with optimization help from Paolo Bonzini. Blame Lee + # E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in +-n*) + case `echo 'x\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + *) ECHO_C='\c';; + esac;; +*) + ECHO_N='-n';; +esac +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + + +exec 7<&0 </dev/null 6>&1 + +# Name of the host. +# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIBOBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= +SHELL=${CONFIG_SHELL-/bin/sh} + +# Identity of this package. +PACKAGE_NAME= +PACKAGE_TARNAME= +PACKAGE_VERSION= +PACKAGE_STRING= +PACKAGE_BUGREPORT= + +ac_unique_file="hbf.h" +# Factoring default headers for most tests. +ac_includes_default="\ +#include <stdio.h> +#ifdef HAVE_SYS_TYPES_H +# include <sys/types.h> +#endif +#ifdef HAVE_SYS_STAT_H +# include <sys/stat.h> +#endif +#ifdef STDC_HEADERS +# include <stdlib.h> +# include <stddef.h> +#else +# ifdef HAVE_STDLIB_H +# include <stdlib.h> +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include <memory.h> +# endif +# include <string.h> +#endif +#ifdef HAVE_STRINGS_H +# include <strings.h> +#endif +#ifdef HAVE_INTTYPES_H +# include <inttypes.h> +#endif +#ifdef HAVE_STDINT_H +# include <stdint.h> +#endif +#ifdef HAVE_UNISTD_H +# include <unistd.h> +#endif" + +ac_subst_vars='SHELL +PATH_SEPARATOR +PACKAGE_NAME +PACKAGE_TARNAME +PACKAGE_VERSION +PACKAGE_STRING +PACKAGE_BUGREPORT +exec_prefix +prefix +program_transform_name +bindir +sbindir +libexecdir +datarootdir +datadir +sysconfdir +sharedstatedir +localstatedir +includedir +oldincludedir +docdir +infodir +htmldir +dvidir +pdfdir +psdir +libdir +localedir +mandir +DEFS +ECHO_C +ECHO_N +ECHO_T +LIBS +build_alias +host_alias +target_alias +build +build_cpu +build_vendor +build_os +host +host_cpu +host_vendor +host_os +target +target_cpu +target_vendor +target_os +CC +CFLAGS +LDFLAGS +CPPFLAGS +ac_ct_CC +EXEEXT +OBJEXT +CPP +GREP +EGREP +XX_CFLAGS +no_strdup +RM +INSTALL_PROGRAM +INSTALL_SCRIPT +INSTALL_DATA +LIBOBJS +LTLIBOBJS' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +with_kpathsea_include +with_kpathsea_lib +' + ac_precious_vars='build_alias +host_alias +target_alias +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS +CPP' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *) ac_optarg=yes ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2 + { (exit 1); exit 1; }; } + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2 + { (exit 1); exit 1; }; } + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2 + { (exit 1); exit 1; }; } + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2 + { (exit 1); exit 1; }; } + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) { $as_echo "$as_me: error: unrecognized option: $ac_option +Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; } + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && + { $as_echo "$as_me: error: invalid variable name: $ac_envvar" >&2 + { (exit 1); exit 1; }; } + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + { $as_echo "$as_me: error: missing argument to $ac_option" >&2 + { (exit 1); exit 1; }; } +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) { $as_echo "$as_me: error: Unrecognized options: $ac_unrecognized_opts" >&2 + { (exit 1); exit 1; }; } ;; + *) $as_echo "$as_me: WARNING: Unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + { $as_echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 + { (exit 1); exit 1; }; } +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. + If a cross compiler is detected then cross compile mode will be used." >&2 + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + { $as_echo "$as_me: error: Working directory cannot be determined" >&2 + { (exit 1); exit 1; }; } +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + { $as_echo "$as_me: error: pwd does not report name of working directory" >&2 + { (exit 1); exit 1; }; } + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + { $as_echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 + { (exit 1); exit 1; }; } +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || { $as_echo "$as_me: error: $ac_msg" >&2 + { (exit 1); exit 1; }; } + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures this package to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] + --target=TARGET configure for building compilers for TARGET [HOST] +_ACEOF +fi + +if test -n "$ac_init_help"; then + + cat <<\_ACEOF + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-kpathsea-include=DIR + location of the kpathsea include dir + --with-kpathsea-lib=DIR + location of the kpathsea lib dir + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a + nonstandard directory <lib dir> + LIBS libraries to pass to the linker, e.g. -l<library> + CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I<include dir> if + you have headers in a nonstandard directory <include dir> + CPP C preprocessor + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +configure +generated by GNU Autoconf 2.62 + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by $as_me, which was +generated by GNU Autoconf 2.62. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" +done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; + 2) + ac_configure_args1="$ac_configure_args1 '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + ac_configure_args="$ac_configure_args '$ac_arg'" + ;; + esac + done +done +$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } +$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + cat <<\_ASBOX +## ---------------- ## +## Cache variables. ## +## ---------------- ## +_ASBOX + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 +$as_echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) $as_unset $ac_var ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + cat <<\_ASBOX +## ----------------- ## +## Output variables. ## +## ----------------- ## +_ASBOX + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + cat <<\_ASBOX +## ------------------- ## +## File substitutions. ## +## ------------------- ## +_ASBOX + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + cat <<\_ASBOX +## ----------- ## +## confdefs.h. ## +## ----------- ## +_ASBOX + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + ac_site_file1=$CONFIG_SITE +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test -r "$ac_site_file"; then + { $as_echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special + # files actually), so we avoid doing that. + if test -f "$cache_file"; then + { $as_echo "$as_me:$LINENO: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:$LINENO: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { $as_echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:$LINENO: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:$LINENO: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:$LINENO: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + { { $as_echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 +$as_echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} + { (exit 1); exit 1; }; } +fi + + + + + + + + + + + + + + + + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + + +ac_aux_dir= +for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + { { $as_echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5 +$as_echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;} + { (exit 1); exit 1; }; } +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + { { $as_echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5 +$as_echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;} + { (exit 1); exit 1; }; } + +{ $as_echo "$as_me:$LINENO: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if test "${ac_cv_build+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + { { $as_echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 +$as_echo "$as_me: error: cannot guess build type; you must specify one" >&2;} + { (exit 1); exit 1; }; } +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + { { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5 +$as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;} + { (exit 1); exit 1; }; } + +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical build" >&5 +$as_echo "$as_me: error: invalid value of canonical build" >&2;} + { (exit 1); exit 1; }; };; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:$LINENO: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if test "${ac_cv_host+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + { { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5 +$as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;} + { (exit 1); exit 1; }; } +fi + +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical host" >&5 +$as_echo "$as_me: error: invalid value of canonical host" >&2;} + { (exit 1); exit 1; }; };; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:$LINENO: checking target system type" >&5 +$as_echo_n "checking target system type... " >&6; } +if test "${ac_cv_target+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test "x$target_alias" = x; then + ac_cv_target=$ac_cv_host +else + ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || + { { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $target_alias failed" >&5 +$as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $target_alias failed" >&2;} + { (exit 1); exit 1; }; } +fi + +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_target" >&5 +$as_echo "$ac_cv_target" >&6; } +case $ac_cv_target in +*-*-*) ;; +*) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical target" >&5 +$as_echo "$as_me: error: invalid value of canonical target" >&2;} + { (exit 1); exit 1; }; };; +esac +target=$ac_cv_target +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_target +shift +target_cpu=$1 +target_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +target_os=$* +IFS=$ac_save_IFS +case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac + + +# The aliases save the names the user supplied, while $host etc. +# will get canonicalized. +test -n "$target_alias" && + test "$program_prefix$program_suffix$program_transform_name" = \ + NONENONEs,x,x, && + program_prefix=${target_alias}- + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:$LINENO: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&5 +$as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:$LINENO: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:$LINENO: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:$LINENO: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&5 +$as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&5 +$as_echo "$as_me: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } + +# Provide some information about the compiler. +$as_echo "$as_me:$LINENO: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +{ (ac_try="$ac_compiler --version >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compiler --version >&5") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (ac_try="$ac_compiler -v >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compiler -v >&5") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (ac_try="$ac_compiler -V >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compiler -V >&5") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { (ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi + +{ $as_echo "$as_me:$LINENO: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +if test -z "$ac_file"; then + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:$LINENO: error: C compiler cannot create executables +See \`config.log' for more details." >&5 +$as_echo "$as_me: error: C compiler cannot create executables +See \`config.log' for more details." >&2;} + { (exit 77); exit 77; }; } +fi + +ac_exeext=$ac_cv_exeext + +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:$LINENO: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } +# FIXME: These cross compiler hacks should be removed for Autoconf 3.0 +# If not cross compiling, check that we can run a simple program. +if test "$cross_compiling" != yes; then + if { ac_try='./$ac_file' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:$LINENO: error: cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." >&5 +$as_echo "$as_me: error: cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } + fi + fi +fi +{ $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +{ $as_echo "$as_me:$LINENO: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +{ $as_echo "$as_me:$LINENO: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { $as_echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." >&5 +$as_echo "$as_me: error: cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +rm -f conftest$ac_cv_exeext +{ $as_echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +{ $as_echo "$as_me:$LINENO: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if test "${ac_cv_objext+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile +See \`config.log' for more details." >&5 +$as_echo "$as_me: error: cannot compute suffix of object files: cannot compile +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if test "${ac_cv_c_compiler_gnu+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_compiler_gnu=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_compiler_gnu=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if test "${ac_cv_prog_cc_g+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_cc_g=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + CFLAGS="" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + : +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_cc_g=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if test "${ac_cv_prog_cc_c89+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <stdarg.h> +#include <stdio.h> +#include <sys/types.h> +#include <sys/stat.h> +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_cc_c89=$ac_arg +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:$LINENO: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:$LINENO: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if test "${ac_cv_prog_CPP+set}" = set; then + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since + # <limits.h> exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifdef __STDC__ +# include <limits.h> +#else +# include <assert.h> +#endif + Syntax error +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + : +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi + +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <ac_nonexistent.h> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + # Broken: success on invalid input. +continue +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi + +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:$LINENO: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since + # <limits.h> exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifdef __STDC__ +# include <limits.h> +#else +# include <assert.h> +#endif + Syntax error +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + : +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi + +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <ac_nonexistent.h> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + # Broken: success on invalid input. +continue +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi + +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + : +else + { { $as_echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." >&5 +$as_echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ $as_echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if test "${ac_cv_path_GREP+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + ac_count=`expr $ac_count + 1` + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done +done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + { { $as_echo "$as_me:$LINENO: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 +$as_echo "$as_me: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} + { (exit 1); exit 1; }; } + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:$LINENO: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if test "${ac_cv_path_EGREP+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + ac_count=`expr $ac_count + 1` + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done +done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + { { $as_echo "$as_me:$LINENO: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 +$as_echo "$as_me: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} + { (exit 1); exit 1; }; } + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ $as_echo "$as_me:$LINENO: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if test "${ac_cv_header_stdc+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <stdlib.h> +#include <stdarg.h> +#include <string.h> +#include <float.h> + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_header_stdc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_header_stdc=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <string.h> + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <stdlib.h> + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then + : +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <ctype.h> +#include <stdlib.h> +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_cv_header_stdc=no +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + +fi +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +cat >>confdefs.h <<\_ACEOF +#define STDC_HEADERS 1 +_ACEOF + +fi + + + +# Check whether --with-kpathsea-include was given. +if test "${with_kpathsea_include+set}" = set; then + withval=$with_kpathsea_include; + if test x$withval = xyes; then + { $as_echo "$as_me:$LINENO: WARNING: Usage is: --with-kpathsea-include=includedir" >&5 +$as_echo "$as_me: WARNING: Usage is: --with-kpathsea-include=includedir" >&2;} + else + if test x$withval = xno; then + { $as_echo "$as_me:$LINENO: WARNING: Usage is: --with-kpathsea-include=includedir" >&5 +$as_echo "$as_me: WARNING: Usage is: --with-kpathsea-include=includedir" >&2;} + else + kpathsea_include=$withval + fi + fi + +fi + + + + +# Check whether --with-kpathsea-lib was given. +if test "${with_kpathsea_lib+set}" = set; then + withval=$with_kpathsea_lib; + if test x$withval = xyes; then + { $as_echo "$as_me:$LINENO: WARNING: Usage is: --with-kpathsea-lib=libdir" >&5 +$as_echo "$as_me: WARNING: Usage is: --with-kpathsea-lib=libdir" >&2;} + else + if test x$withval = xno; then + { $as_echo "$as_me:$LINENO: WARNING: Usage is: --with-kpathsea-lib=libdir" >&5 +$as_echo "$as_me: WARNING: Usage is: --with-kpathsea-lib=libdir" >&2;} + else + kpathsea_lib=$withval + fi + fi + +fi + + + +if test -n "$kpathsea_include" -o -n "$kpathsea_lib"; then + LIBS="$LIBS -L$kpathsea_lib" + CPPFLAGS="$CPPFLAGS -I$kpathsea_include -I$srcdir" + + +{ $as_echo "$as_me:$LINENO: checking for kpse_set_program_name in -lkpathsea" >&5 +$as_echo_n "checking for kpse_set_program_name in -lkpathsea... " >&6; } +if test "${ac_cv_lib_kpathsea_kpse_set_program_name+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lkpathsea $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char kpse_set_program_name (); +int +main () +{ +return kpse_set_program_name (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_kpathsea_kpse_set_program_name=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_kpathsea_kpse_set_program_name=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_kpathsea_kpse_set_program_name" >&5 +$as_echo "$ac_cv_lib_kpathsea_kpse_set_program_name" >&6; } +if test $ac_cv_lib_kpathsea_kpse_set_program_name = yes; then + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBKPATHSEA 1 +_ACEOF + + LIBS="-lkpathsea $LIBS" + +else + cat >>confdefs.h <<\_ACEOF +#define OLD_KPATHSEA 1 +_ACEOF + +fi + + + +{ $as_echo "$as_me:$LINENO: checking for kpse_init_prog in -lkpathsea" >&5 +$as_echo_n "checking for kpse_init_prog in -lkpathsea... " >&6; } +if test "${ac_cv_lib_kpathsea_kpse_init_prog+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lkpathsea $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char kpse_init_prog (); +int +main () +{ +return kpse_init_prog (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_kpathsea_kpse_init_prog=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_kpathsea_kpse_init_prog=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_kpathsea_kpse_init_prog" >&5 +$as_echo "$ac_cv_lib_kpathsea_kpse_init_prog" >&6; } +if test $ac_cv_lib_kpathsea_kpse_init_prog = yes; then + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBKPATHSEA 1 +_ACEOF + + LIBS="-lkpathsea $LIBS" + +else + + { { $as_echo "$as_me:$LINENO: error: Can't find kpathsea library! Use --with-kpathsea-lib option." >&5 +$as_echo "$as_me: error: Can't find kpathsea library! Use --with-kpathsea-lib option." >&2;} + { (exit 1); exit 1; }; } +fi + + + # On IRIX 5.3, sys/types and inttypes.h are conflicting. + + + + + + + + + +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do +as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + eval "$as_ac_Header=yes" +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_Header=no" +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if test `eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +if test "${ac_cv_header_kpathsea_kpathsea_h+set}" = set; then + { $as_echo "$as_me:$LINENO: checking for kpathsea/kpathsea.h" >&5 +$as_echo_n "checking for kpathsea/kpathsea.h... " >&6; } +if test "${ac_cv_header_kpathsea_kpathsea_h+set}" = set; then + $as_echo_n "(cached) " >&6 +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_kpathsea_kpathsea_h" >&5 +$as_echo "$ac_cv_header_kpathsea_kpathsea_h" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:$LINENO: checking kpathsea/kpathsea.h usability" >&5 +$as_echo_n "checking kpathsea/kpathsea.h usability... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <kpathsea/kpathsea.h> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:$LINENO: checking kpathsea/kpathsea.h presence" >&5 +$as_echo_n "checking kpathsea/kpathsea.h presence... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <kpathsea/kpathsea.h> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { $as_echo "$as_me:$LINENO: WARNING: kpathsea/kpathsea.h: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: kpathsea/kpathsea.h: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: kpathsea/kpathsea.h: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: kpathsea/kpathsea.h: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { $as_echo "$as_me:$LINENO: WARNING: kpathsea/kpathsea.h: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: kpathsea/kpathsea.h: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: kpathsea/kpathsea.h: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: kpathsea/kpathsea.h: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: kpathsea/kpathsea.h: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: kpathsea/kpathsea.h: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: kpathsea/kpathsea.h: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: kpathsea/kpathsea.h: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: kpathsea/kpathsea.h: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: kpathsea/kpathsea.h: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: kpathsea/kpathsea.h: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: kpathsea/kpathsea.h: in the future, the compiler will take precedence" >&2;} + + ;; +esac +{ $as_echo "$as_me:$LINENO: checking for kpathsea/kpathsea.h" >&5 +$as_echo_n "checking for kpathsea/kpathsea.h... " >&6; } +if test "${ac_cv_header_kpathsea_kpathsea_h+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_cv_header_kpathsea_kpathsea_h=$ac_header_preproc +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_kpathsea_kpathsea_h" >&5 +$as_echo "$ac_cv_header_kpathsea_kpathsea_h" >&6; } + +fi +if test $ac_cv_header_kpathsea_kpathsea_h = yes; then + : +else + cat >>confdefs.h <<\_ACEOF +#define VERY_OLD_KPATHSEA 1 +_ACEOF + +fi + + + + if test "${ac_cv_header_kpathsea_c_auto_h+set}" = set; then + { $as_echo "$as_me:$LINENO: checking for kpathsea/c-auto.h" >&5 +$as_echo_n "checking for kpathsea/c-auto.h... " >&6; } +if test "${ac_cv_header_kpathsea_c_auto_h+set}" = set; then + $as_echo_n "(cached) " >&6 +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_kpathsea_c_auto_h" >&5 +$as_echo "$ac_cv_header_kpathsea_c_auto_h" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:$LINENO: checking kpathsea/c-auto.h usability" >&5 +$as_echo_n "checking kpathsea/c-auto.h usability... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <kpathsea/c-auto.h> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:$LINENO: checking kpathsea/c-auto.h presence" >&5 +$as_echo_n "checking kpathsea/c-auto.h presence... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <kpathsea/c-auto.h> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { $as_echo "$as_me:$LINENO: WARNING: kpathsea/c-auto.h: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: kpathsea/c-auto.h: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: kpathsea/c-auto.h: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: kpathsea/c-auto.h: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { $as_echo "$as_me:$LINENO: WARNING: kpathsea/c-auto.h: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: kpathsea/c-auto.h: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: kpathsea/c-auto.h: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: kpathsea/c-auto.h: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: kpathsea/c-auto.h: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: kpathsea/c-auto.h: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: kpathsea/c-auto.h: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: kpathsea/c-auto.h: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: kpathsea/c-auto.h: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: kpathsea/c-auto.h: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: kpathsea/c-auto.h: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: kpathsea/c-auto.h: in the future, the compiler will take precedence" >&2;} + + ;; +esac +{ $as_echo "$as_me:$LINENO: checking for kpathsea/c-auto.h" >&5 +$as_echo_n "checking for kpathsea/c-auto.h... " >&6; } +if test "${ac_cv_header_kpathsea_c_auto_h+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_cv_header_kpathsea_c_auto_h=$ac_header_preproc +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_kpathsea_c_auto_h" >&5 +$as_echo "$ac_cv_header_kpathsea_c_auto_h" >&6; } + +fi +if test $ac_cv_header_kpathsea_c_auto_h = yes; then + : +else + + { { $as_echo "$as_me:$LINENO: error: Can't find kpathsea include files! Use --with-kpathsea-include option." >&5 +$as_echo "$as_me: error: Can't find kpathsea include files! Use --with-kpathsea-include option." >&2;} + { (exit 1); exit 1; }; } +fi + + +else + CPPFLAGS="$CPPFLAGS -I$srcdir" +fi + + +if test "x$CC" = xgcc; then + XX_CFLAGS="-Wall" +else + case "$host" in + alpha-dec-osf*) + XX_CFLAGS="-std1 -O2 -g3" + ;; + *) + XX_CFLAGS= + ;; + esac +fi + + + +{ $as_echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5 +$as_echo_n "checking for an ANSI C-conforming const... " >&6; } +if test "${ac_cv_c_const+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ +/* FIXME: Include the comments suggested by Paul. */ +#ifndef __cplusplus + /* Ultrix mips cc rejects this. */ + typedef int charset[2]; + const charset cs; + /* SunOS 4.1.1 cc rejects this. */ + char const *const *pcpcc; + char **ppc; + /* NEC SVR4.0.2 mips cc rejects this. */ + struct point {int x, y;}; + static struct point const zero = {0,0}; + /* AIX XL C 1.02.0.0 rejects this. + It does not let you subtract one const X* pointer from another in + an arm of an if-expression whose if-part is not a constant + expression */ + const char *g = "string"; + pcpcc = &g + (g ? g-g : 0); + /* HPUX 7.0 cc rejects these. */ + ++pcpcc; + ppc = (char**) pcpcc; + pcpcc = (char const *const *) ppc; + { /* SCO 3.2v4 cc rejects this. */ + char *t; + char const *s = 0 ? (char *) 0 : (char const *) 0; + + *t++ = 0; + if (s) return 0; + } + { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ + int x[] = {25, 17}; + const int *foo = &x[0]; + ++foo; + } + { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ + typedef const int *iptr; + iptr p = 0; + ++p; + } + { /* AIX XL C 1.02.0.0 rejects this saying + "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ + struct s { int j; const int *ap[3]; }; + struct s *b; b->j = 5; + } + { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ + const int foo = 10; + if (!foo) return 0; + } + return !cs[0] && !zero.x; +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_c_const=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_c_const=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5 +$as_echo "$ac_cv_c_const" >&6; } +if test $ac_cv_c_const = no; then + +cat >>confdefs.h <<\_ACEOF +#define const /**/ +_ACEOF + +fi + +{ $as_echo "$as_me:$LINENO: checking whether struct tm is in sys/time.h or time.h" >&5 +$as_echo_n "checking whether struct tm is in sys/time.h or time.h... " >&6; } +if test "${ac_cv_struct_tm+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <sys/types.h> +#include <time.h> + +int +main () +{ +struct tm tm; + int *p = &tm.tm_sec; + return !p; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_struct_tm=time.h +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_struct_tm=sys/time.h +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_struct_tm" >&5 +$as_echo "$ac_cv_struct_tm" >&6; } +if test $ac_cv_struct_tm = sys/time.h; then + +cat >>confdefs.h <<\_ACEOF +#define TM_IN_SYS_TIME 1 +_ACEOF + +fi + + + + +for ac_func in vprintf +do +as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5 +$as_echo_n "checking for $ac_func... " >&6; } +if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func. + For example, HP-UX 11i <limits.h> declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer <limits.h> to <assert.h> if __STDC__ is defined, since + <limits.h> exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include <limits.h> +#else +# include <assert.h> +#endif + +#undef $ac_func + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$ac_func || defined __stub___$ac_func +choke me +#endif + +int +main () +{ +return $ac_func (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + eval "$as_ac_var=yes" +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_var=no" +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +ac_res=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if test `eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +{ $as_echo "$as_me:$LINENO: checking for _doprnt" >&5 +$as_echo_n "checking for _doprnt... " >&6; } +if test "${ac_cv_func__doprnt+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define _doprnt to an innocuous variant, in case <limits.h> declares _doprnt. + For example, HP-UX 11i <limits.h> declares gettimeofday. */ +#define _doprnt innocuous__doprnt + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char _doprnt (); below. + Prefer <limits.h> to <assert.h> if __STDC__ is defined, since + <limits.h> exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include <limits.h> +#else +# include <assert.h> +#endif + +#undef _doprnt + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char _doprnt (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub__doprnt || defined __stub____doprnt +choke me +#endif + +int +main () +{ +return _doprnt (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_func__doprnt=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_func__doprnt=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_func__doprnt" >&5 +$as_echo "$ac_cv_func__doprnt" >&6; } +if test $ac_cv_func__doprnt = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_DOPRNT 1 +_ACEOF + +fi + +fi +done + + + + + + +for ac_func in strdup strstr strtol strtoul +do +as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5 +$as_echo_n "checking for $ac_func... " >&6; } +if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func. + For example, HP-UX 11i <limits.h> declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer <limits.h> to <assert.h> if __STDC__ is defined, since + <limits.h> exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include <limits.h> +#else +# include <assert.h> +#endif + +#undef $ac_func + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$ac_func || defined __stub___$ac_func +choke me +#endif + +int +main () +{ +return $ac_func (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + eval "$as_ac_var=yes" +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_var=no" +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +ac_res=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if test `eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + +if test "x$ac_cv_func_strdup" = xno; then + no_strdup=-DNO_STRDUP +fi + + +# Extract the first word of "rm", so it can be a program name with args. +set dummy rm; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_RM+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$RM"; then + ac_cv_prog_RM="$RM" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_RM="rm" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +RM=$ac_cv_prog_RM +if test -n "$RM"; then + { $as_echo "$as_me:$LINENO: result: $RM" >&5 +$as_echo "$RM" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if test "${ac_cv_path_install+set}" = set; then + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in + ./ | .// | /cC/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac + +done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ $as_echo "$as_me:$LINENO: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + + +if test -z "$kpathsea_include" -a -z "$kpathsea_lib"; then + { $as_echo "$as_me:$LINENO: WARNING: + + hbf2gf will be compiled without file search library support! + For kpathsea support use the --with-kpathsea-lib and + --with-kpathsea-include options. + " >&5 +$as_echo "$as_me: WARNING: + + hbf2gf will be compiled without file search library support! + For kpathsea support use the --with-kpathsea-lib and + --with-kpathsea-include options. + " >&2;} +fi + +ac_config_files="$ac_config_files Makefile" + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 +$as_echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) $as_unset $ac_var ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + test "x$cache_file" != "x/dev/null" && + { $as_echo "$as_me:$LINENO: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + cat confcache >$cache_file + else + { $as_echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +# Transform confdefs.h into DEFS. +# Protect against shell expansion while executing Makefile rules. +# Protect against Makefile macro expansion. +# +# If the first sed substitution is executed (which looks for macros that +# take arguments), then branch to the quote section. Otherwise, +# look for a macro that doesn't take arguments. +ac_script=' +:mline +/\\$/{ + N + s,\\\n,, + b mline +} +t clear +:clear +s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g +t quote +s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g +t quote +b any +:quote +s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g +s/\[/\\&/g +s/\]/\\&/g +s/\$/$$/g +H +:any +${ + g + s/^\n// + s/\n/ /g + p +} +' +DEFS=`sed -n "$ac_script" confdefs.h` + + +ac_libobjs= +ac_ltlibobjs= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext" + ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + + +: ${CONFIG_STATUS=./config.status} +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +cat >$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false +SHELL=\${CONFIG_SHELL-$SHELL} +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac + +fi + + + + +# PATH needs CR +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + +# Support unset when possible. +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + { (exit 1); exit 1; } +fi + +# Work around bugs in pre-3.0 UWIN ksh. +for as_var in ENV MAIL MAILPATH +do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + + +# Name of the executable. +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# CDPATH. +$as_unset CDPATH + + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line after each line using $LINENO; the second 'sed' + # does the real work. The second script uses 'N' to pair each + # line-number line with the line containing $LINENO, and appends + # trailing '-' during substitution so that $LINENO is not a special + # case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # scripts with optimization help from Paolo Bonzini. Blame Lee + # E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in +-n*) + case `echo 'x\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + *) ECHO_C='\c';; + esac;; +*) + ECHO_N='-n';; +esac +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 + +# Save the log message, to keep $[0] and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by $as_me, which was +generated by GNU Autoconf 2.62. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files from templates according to the +current configuration. + +Usage: $0 [OPTIONS] [FILE]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + -q, --quiet do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + +Configuration files: +$config_files + +Report bugs to <bug-autoconf@gnu.org>." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_version="\\ +config.status +configured by $0, generated by GNU Autoconf 2.62, + with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" + +Copyright (C) 2008 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + CONFIG_FILES="$CONFIG_FILES '$ac_optarg'" + ac_need_defaults=false;; + --he | --h | --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) { $as_echo "$as_me: error: unrecognized option: $1 +Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; } ;; + + *) ac_config_targets="$ac_config_targets $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + + *) { { $as_echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 +$as_echo "$as_me: error: invalid argument: $ac_config_target" >&2;} + { (exit 1); exit 1; }; };; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= + trap 'exit_status=$? + { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status +' 0 + trap '{ (exit 1); exit 1; }' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -n "$tmp" && test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || +{ + $as_echo "$as_me: cannot create a temporary directory in ." >&2 + { (exit 1); exit 1; } +} + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr='
' +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 +$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} + { (exit 1); exit 1; }; } +ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 +$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} + { (exit 1); exit 1; }; } + + if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` = $ac_delim_num; then + break + elif $ac_last_try; then + { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 +$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} + { (exit 1); exit 1; }; } + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\).*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\).*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' <conf$$subs.awk | sed ' +/^[^""]/{ + N + s/\n// +} +' >>$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ + || { { $as_echo "$as_me:$LINENO: error: could not setup config files machinery" >&5 +$as_echo "$as_me: error: could not setup config files machinery" >&2;} + { (exit 1); exit 1; }; } +_ACEOF + +# VPATH may cause trouble with some makes, so we remove $(srcdir), +# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=/{ +s/:*\$(srcdir):*/:/ +s/:*\${srcdir}:*/:/ +s/:*@srcdir@:*/:/ +s/^\([^=]*=[ ]*\):*/\1/ +s/:*$// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + + +eval set X " :F $CONFIG_FILES " +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) { { $as_echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5 +$as_echo "$as_me: error: Invalid tag $ac_tag." >&2;} + { (exit 1); exit 1; }; };; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + { { $as_echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5 +$as_echo "$as_me: error: cannot find input file: $ac_f" >&2;} + { (exit 1); exit 1; }; };; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + ac_file_inputs="$ac_file_inputs '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:$LINENO: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$tmp/stdin" \ + || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 +$as_echo "$as_me: error: could not create $ac_file" >&2;} + { (exit 1); exit 1; }; } ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + { as_dir="$ac_dir" + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || { { $as_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 +$as_echo "$as_me: error: cannot create directory $as_dir" >&2;} + { (exit 1); exit 1; }; }; } + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= + +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p +' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ + || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 +$as_echo "$as_me: error: could not create $ac_file" >&2;} + { (exit 1); exit 1; }; } + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined." >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined." >&2;} + + rm -f "$tmp/stdin" + case $ac_file in + -) cat "$tmp/out" && rm -f "$tmp/out";; + *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; + esac \ + || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 +$as_echo "$as_me: error: could not create $ac_file" >&2;} + { (exit 1); exit 1; }; } + ;; + + + + esac + +done # for ac_tag + + +{ (exit 0); exit 0; } +_ACEOF +chmod +x $CONFIG_STATUS +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + { { $as_echo "$as_me:$LINENO: error: write failure creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: error: write failure creating $CONFIG_STATUS" >&2;} + { (exit 1); exit 1; }; } + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || { (exit 1); exit 1; } +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:$LINENO: WARNING: Unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: Unrecognized options: $ac_unrecognized_opts" >&2;} +fi + diff --git a/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/configure.ac b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/configure.ac new file mode 100644 index 00000000000..69f791a7d41 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/configure.ac @@ -0,0 +1,131 @@ +dnl This file is part of the CJK package ver. 4.8.0 + +dnl Copyright (C) 1994-2008 Werner Lemberg <wl@gnu.org> + +dnl This program is free software; you can redistribute it and/or modify +dnl it under the terms of the GNU General Public License as published by +dnl the Free Software Foundation; either version 2 of the License, or +dnl (at your option) any later version. + +dnl This program is distributed in the hope that it will be useful, +dnl but WITHOUT ANY WARRANTY; without even the implied warranty of +dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +dnl GNU General Public License for more details. + +dnl You should have received a copy of the GNU General Public License +dnl along with this program in doc/COPYING; if not, write to the Free +dnl Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +dnl MA 02110-1301 USA + +dnl Process this file with autoconf to produce a configure script. +AC_INIT +AC_CONFIG_SRCDIR([hbf.h]) + + +dnl check host +AC_CANONICAL_TARGET([]) + + +dnl Checks for programs. +AC_PROG_CC + + +dnl Checks for header files. +AC_HEADER_STDC + +AC_ARG_WITH(kpathsea-include, + [ --with-kpathsea-include=DIR + location of the kpathsea include dir],[ + if test x$withval = xyes; then + AC_MSG_WARN(Usage is: --with-kpathsea-include=includedir) + else + if test x$withval = xno; then + AC_MSG_WARN(Usage is: --with-kpathsea-include=includedir) + else + kpathsea_include=$withval + fi + fi +]) + + +dnl Checks for libraries. +AC_ARG_WITH(kpathsea-lib, + [ --with-kpathsea-lib=DIR + location of the kpathsea lib dir],[ + if test x$withval = xyes; then + AC_MSG_WARN(Usage is: --with-kpathsea-lib=libdir) + else + if test x$withval = xno; then + AC_MSG_WARN(Usage is: --with-kpathsea-lib=libdir) + else + kpathsea_lib=$withval + fi + fi +]) + + +if test -n "$kpathsea_include" -o -n "$kpathsea_lib"; then + LIBS="$LIBS -L$kpathsea_lib" + CPPFLAGS="$CPPFLAGS -I$kpathsea_include -I$srcdir" + + dnl the function kpse_set_program_name() is available since kpathsea 3.2 + AC_CHECK_LIB(kpathsea, kpse_set_program_name, , AC_DEFINE(OLD_KPATHSEA)) + + AC_CHECK_LIB(kpathsea, kpse_init_prog, ,[ + AC_MSG_ERROR([Can't find kpathsea library! Use --with-kpathsea-lib option.])]) + + dnl the header file kpathsea.h doesn't exist in kpathsea 2.6 and before + AC_CHECK_HEADER(kpathsea/kpathsea.h, , AC_DEFINE(VERY_OLD_KPATHSEA)) + + AC_CHECK_HEADER(kpathsea/c-auto.h, ,[ + AC_MSG_ERROR([Can't find kpathsea include files! Use --with-kpathsea-include option.])]) +else + CPPFLAGS="$CPPFLAGS -I$srcdir" +fi + + +dnl Get compiler flags right. +if test "x$CC" = xgcc; then + XX_CFLAGS="-Wall" +else + case "$host" in + alpha-dec-osf*) + XX_CFLAGS="-std1 -O2 -g3" + ;; + *) + XX_CFLAGS= + ;; + esac +fi +AC_SUBST(XX_CFLAGS) + + +dnl Checks for typedefs, structures, and compiler characteristics. +AC_C_CONST +AC_STRUCT_TM + + +dnl Checks for library functions. +AC_FUNC_VPRINTF +AC_CHECK_FUNCS(strdup strstr strtol strtoul) + +dnl we need this for hbf.c +if test "x$ac_cv_func_strdup" = xno; then + no_strdup=-DNO_STRDUP +fi +AC_SUBST(no_strdup) + +AC_CHECK_PROG(RM, rm, rm) +AC_PROG_INSTALL + +if test -z "$kpathsea_include" -a -z "$kpathsea_lib"; then + AC_MSG_WARN([ + + hbf2gf will be compiled without file search library support! + For kpathsea support use the --with-kpathsea-lib and + --with-kpathsea-include options. + ]) +fi + +AC_CONFIG_FILES([Makefile]) +AC_OUTPUT diff --git a/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/dvidrv.btm b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/dvidrv.btm new file mode 100644 index 00000000000..daeba96f01c --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/dvidrv.btm @@ -0,0 +1,352 @@ +setdos /y1 +:: +:: Copyright (C) 1994-2008 Werner Lemberg <wl@gnu.org> +:: +:: 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 in doc/COPYING; if not, write to the Free +:: Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +:: MA 02110-1301 USA +:: +:: +:: This is dvidrv.btm, a batch file for 4DOS/4OS2 written by +:: Werner Lemberg <wl@gnu.org> partially based on the +:: dvidrv.btm file of the 4allTeX package written by Phons Bloemen. +:: +:: It is a replacement for dvidrv.exe of the emTeX package. +:: +:: Additional features: support of ps2pk +:: support of ttf2pk +:: support of hbf2gf for HBFs (Hanzi bitmap fonts) +:: +:: Only quadratic printer modes are supported for ttf2pk! +:: +:: All needed binaries will be searched in the path. + +iff %# lt 2 then + echo `` + echo Usage: %0 dvi-driver dvi-file [parameters] + quit +endiff + +setlocal + :: we set a default value only if the corresponding environment variable + :: is empty. The `=' must follow the variable name immediately. + alias set_def `iff "%[%@word["=",0,%1]]" eq "" then %+ set %& %+ endiff` + + :: ========================================= + :: ======== User defined variables. ======== + :: ========================================= + :: + :: Can be overridden in the environment (except %ps2pk, %ttf2pk, %hbf2gf, + :: %pre_dpi, and %post_dpi). + + :: Comment out the programs you don't want to use. + set ps2pk=yes + set ttf2pk=yes + set hbf2gf=yes + + :: where the PK files will be installed created by ps2pk, ttf2pk, and + :: hbf2gf. + :: dvidrv.btm adds `\modeless\XXXdpi' to this string (see below for the + :: exact string). + set_def pkdir=%emtexdir\pixel\tmp\pk + + :: where the TrueType fonts reside. + set_def ttfonts=%emtexdir\fonts\truetype + :: where auxiliary files of ttf2pk are located. + set_def ttfcfg=%emtexdir\ttf2pk + + :: where the HBF files reside. + set_def hbfonts=%emtexdir\fonts\hbf + :: where the hbf2gf config files are. + set_def hbfcfg=%emtexdir\hbf2gf + + :: the dpi-subdirectory has various forms; the most common are XXXdpi and + :: dpiXXX, e.g. 300dpi and dpi300. Here we define two variables which + :: control this behaviour. + :: [dpiXXX is used for TDS compatible TeX trees.] + set pre_dpi=dpi + set post_dpi= + + :: ================================================ + :: ======== End of user defined variables. ======== + :: ================================================ + + :: the base name for log files etc. + set basename=%@name[%1] + + :: do we run dvips? + iff "%basename" ne "dvips" then + goto nodvips1 + endiff + + :: we delete dvips.mfj if it exists. + del dvips.mfj >& nul + + :: now we run dvips with all supplied parameters. + %& + + :: do we have to generate fonts? + iff exist dvips.mfj then + goto generate_fonts + endiff + + :: else all is done. + goto end + + +:nodvips1 + :: here we call the dvi driver with all supplied parameters. + %& -pj:%basename.mfj + + :: do we have to generate fonts? + iff errorlevel 8 then + goto generate_fonts + endiff + + :: else all is done. + goto end + + +:generate_fonts + gosub call_mfjob + + :: do we run dvips? + iff "%basename" ne "dvips" then + goto nodvips2 + endiff + + :: we now call dvips a second time + %& + + :: since no fonts will be generated in the second run we remove dvips.mfj + del dvips.mfj >& nul + + goto end + + +:nodvips2 + :: we call the dvi driver a second time (without font generation). + %& -pj -fm + + del %basename.mfj >& nul + + goto end + + +:: this is the main subroutine which calls mfjob and then parses the mfjob +:: file for fonts which can be handled by ps2pk, ttf2pk, or hbf2gf. +:call_mfjob + :: this alias prints a message on the screen and writes it into the logfile. + alias echolog=`echo %& | tee /a %basename.mlg` + + echo ======== DVIDRV.BTM logfile ======== > %basename.mlg + echo Commandline: dvidrv.btm %& >> %basename.mlg + echo `` >> %basename.mlg + echo basename=%basename >> %basename.mlg + echo emtexdir=%emtexdir >> %basename.mlg + echo dvidrvfonts=%dvidrvfonts >> %basename.mlg + echo mfinput=%mfinput >> %basename.mlg + echo mfjobopt=%mfjobopt >> %basename.mlg + echo textfm=%textfm >> %basename.mlg + echo psfonts=%psfonts >> %basename.mlg + echo ttfonts=%ttfonts >> %basename.mlg + echo ttfcfg=%ttfcfg >> %basename.mlg + echo hbfonts=%hbfonts >> %basename.mlg + echo hbfcfg=%hbfcfg >> %basename.mlg + echo `` >> %basename.mlg + + iff "%@search[mfjob]" eq "" then + echolog MFJOB not found in the path. + echolog Can't generate PK fonts from METAFONT automatically. + echo `` + quit + endiff + + :: now we call mfjob. + echolog mfjob %mfjobopt -g%basename.mfl %basename.mfj + mfjob %mfjobopt -g%basename.mfl %basename.mfj + iff %? gt 0 then + echolog `` + echolog Something went wrong while running METAFONT. + echolog Look into the log files... + echolog `` + endiff + + :: after running mfjob we scan the mfjob input file for fonts which can + :: be handled by ps2pk, ttf2pk or hbf2gf. + set lnnr=0 + set totlines=%@lines[%basename.mfj] + + do while %lnnr le %totlines + :: input a line. + set scratch=%@line[%basename.mfj,%lnnr] + set lnnr=%@inc[%lnnr] + + :: get resolutions (METAFONT mode will be ignored). + :: example: + :: mode=lqlores[180 180]; + iff %@index[%scratch,mode] ge 0 then + set temp=%@word["[]",1,%scratch] + set xdpi=%@word[0,%temp] + set ydpi=%@word[1,%temp] + endiff + + :: get fontname and magnification; we then compute the font resolutions + :: (rounded to the nearest integer---there is no necessity to adjust + :: these values further because of possible rounding errors since both + :: emTeX's dvi drivers and dvips check neighbored values too). + :: example: + :: {font=cmr10; mag=0.5;} + iff %@index[%scratch,{font] ge 0 then + set testfont=%@word["=;",1,%scratch] + set temp=%@word["=;",3,%scratch] + :: we use highest arithmetic precision for these calculations. + :: Additionally we write 1/2 instead of 0.5 to avoid problems with + :: countries which use a comma instead of a colon as the decimal + :: separator. + set fontresx=%@int[%@eval[%xdpi*%temp+1/2=8]] + set fontresy=%@int[%@eval[%ydpi*%temp+1/2=8]] + set pksubdir=modeless\%[pre_dpi]%[fontresx]%post_dpi + + set success=0 + + :: check whether %testfont leads to a PS font (we call ps2pkmfj). + iff %success == 0 .and. "%ps2pk" ne "" then + gosub call_ps2pk + endiff + + :: check whether %testfont leads to a TrueType font. + iff %success == 0 .and. "%ttf2pk" ne "" then + gosub call_ttf2pk + endiff + + :: check whether %testfont leads to a HBF file. + iff %success == 0 .and. "%hbf2gf" ne "" then + gosub call_hbf2gf + endiff + endiff + enddo + + iff exist %basename.mfp then + echo `` >> %basename.mlg + echo `` >> %basename.mlg + echo ======== PS2PK logfile ======== >> %basename.mlg + echo `` >> %basename.mlg + type %basename.mfp >> %basename.mlg + echo `` >> %basename.mlg + del %basename.mfp >& nul + endiff + + iff exist %basename.mfl then + echo `` >> %basename.mlg + type %basename.mfl >> %basename.mlg + echo `` >> %basename.mlg + del %basename.mfl >& nul + endiff + + return + + +:call_ttf2pk + iff "%@search[ttf2pk]" eq "" then + echolog TTF2PK not found in the path. + echolog Can't generate PK fonts from TrueType fonts automatically. + echo `` + quit + endiff + + echolog ttf2pk -q -n %testfont %fontresx + ttf2pk -q -n %testfont %fontresx + + iff %? == 0 then + echolog Font %pkdir\%pksubdir\%testfont.pk generated. + mkdir /s %pkdir\%pksubdir >& nul + move %testfont.pk %pkdir\%pksubdir >& nul + set success=1 + elseiff %? == 2 then + echolog (%lnnr/%totlines): Font %testfont is no TrueType font. + set success=0 + else + echolog Error running TTF2PK for font %testfont! + endiff + + return + + +:call_hbf2gf + iff "%@search[hbf2gf]" eq "" then + echolog HBF2GF not found in the path. + echolog Can't generate PK fonts from HBF files automatically. + echo `` + quit + endiff + + echolog hbf2gf -q -p -n %testfont %fontresx %fontresy + hbf2gf -q -p -n %testfont %fontresx %fontresy + + iff %? == 0 then + echolog Font %pkdir\%pksubdir\%testfont.pk generated. + mkdir /s %pkdir\%pksubdir >& nul + gftopk %testfont.gf %testfont.pk + move %testfont.pk %pkdir\%pksubdir >& nul + del %testfont.gf >& nul + set success=1 + elseiff %? == 2 then + echolog (%lnnr/%totlines): Font %testfont is no HBF. + set success=0 + else + echolog Error running HBF2GF for font %testfont! + endiff + + return + + +:call_ps2pk + iff not exist %pkdir\%pksubdir\%testfont.pk then + iff "%@search[ps2pkmfj]" eq "" .or. "%@search[ps2pk]" eq "" then + echolog PS2PKMFJ and/or PS2PK not found in the path. + echolog Can't generate PK fonts from PostScript fonts automatically. + echo `` + quit + endiff + + echolog ps2pkmfj -X%fontresx -Y%fontresy %testfont %testfont.pk + ps2pkmfj -X%fontresx -Y%fontresy %testfont %testfont.pk | input %%pspkline + + iff errorlevel != 1 then + %pspkline >> %basename.mfp + iff %? == 0 then + echolog Font %pkdir\%pksubdir\%testfont.pk generated. + mkdir /s %pkdir\%pksubdir >& nul + move %testfont.pk %pkdir\%pksubdir >& nul + success=1 + else + echolog Error running PS2PK for font %testfont! + endiff + else + echolog (%lnnr/%totlines): Font %testfont is no PS font. + success=0 + endiff + else + echolog Font %pkdir\%pksubdir\%testfont.pk already exists. + endiff + + return + + +:end + +endlocal + +:: ==== end of dvidrv.btm ==== diff --git a/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/emdir.c b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/emdir.c new file mode 100644 index 00000000000..4e759c83eb2 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/emdir.c @@ -0,0 +1,109 @@ +/* emdir.c -- Written by Eberhard Mattes, donated to the public domain */ + +#include "emdir.h" + +#ifdef OS2 + +#undef HPS +#define INCL_DOSFILEMGR +#include <os2.h> +#include <string.h> + +#define FHDIR(b) (*(HDIR *)(b)->reserved) + +static void fconv (struct ll_findbuffer *dst, const FILEFINDBUF *src) +{ + dst->attr = src->attrFile; + dst->time = *(unsigned *)&src->ftimeLastWrite; + dst->date = *(unsigned *)&src->fdateLastWrite; + dst->size = src->cbFile; + strcpy (dst->name, src->achName); +} + + +int ll_findfirst (const char *path, int attr, struct ll_findbuffer *buffer) +{ + USHORT rc; + ULONG count; + HDIR hdir; + FILEFINDBUF ffbuf; + + hdir = HDIR_CREATE; + count = 1; + rc = DosFindFirst ((PSZ)path, &hdir, attr, &ffbuf, sizeof (ffbuf), + &count, 0L); + if (rc != 0 || count != 1) + return 0; + FHDIR (buffer) = hdir; + fconv (buffer, &ffbuf); + return 1; +} + + +int ll_findnext (struct ll_findbuffer *buffer) +{ + USHORT rc; + ULONG count; + HDIR hdir; + FILEFINDBUF ffbuf; + + hdir = FHDIR (buffer); + count = 1; + rc = DosFindNext (hdir, &ffbuf, sizeof (ffbuf), &count); + if (rc != 0 || count != 1) + { + DosFindClose (hdir); + return 0; + } + fconv (buffer, &ffbuf); + return 1; +} + + +#elif defined(DJGPP) + +/* djgpp support by Hartmut Schirmer (hsc@techfak.uni-kiel.de), May 30, 1997 */ + +#include <dos.h> +#include <dir.h> + +static int ll_attr = 0; +int ll_findnext (struct ll_findbuffer *buffer) +{ + int res; + do { + res = _dos_findnext ((struct find_t *)buffer); + if (res != 0) return 0; + } while ( (buffer->attrib&ll_attr) == 0); + return 1; +} + +int ll_findfirst (const char *path, int attr, struct ll_findbuffer *buffer) +{ + int res; + ll_attr = attr; + res = _dos_findfirst((char *)path, attr, (struct find_t *)buffer); + if (res != 0) return 0; + if ( (buffer->attrib&ll_attr) == 0) + return ll_findnext(buffer); + return 1; +} + +#elif !defined(__EMX__) /* if not OS2 nor DJGPP nor __EMX__ defined */ + +/* Not tested */ + +#include <dos.h> + +int ll_findfirst (const char *path, int attr, struct ll_findbuffer *buffer) +{ + return _dos_findfirst (path, attr, (struct find_t *)buffer) == 0; +} + + +int ll_findnext (struct ll_findbuffer *buffer) +{ + return _dos_findnext ((struct find_t *)buffer) == 0; +} + +#endif diff --git a/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/emdir.h b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/emdir.h new file mode 100644 index 00000000000..0606d476ab1 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/emdir.h @@ -0,0 +1,25 @@ +/* emdir.h -- Written by Eberhard Mattes, donated to the public domain */ + +#if defined(DJGPP) + +/* djgpp support by Hartmut Schirmer (hsc@techfak.uni-kiel.de), May 30, 1997 */ +#include <dos.h> +#define ll_findbuffer find_t +#define attr attrib + +#else + +struct ll_findbuffer +{ + char reserved[21]; + unsigned char attr; + unsigned time; + unsigned date; + long size; + char name[257]; +}; + +#endif + +int ll_findfirst (const char *path, int attr, struct ll_findbuffer *buffer); +int ll_findnext (struct ll_findbuffer *buffer); diff --git a/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/emtexdir.c b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/emtexdir.c new file mode 100644 index 00000000000..9a35570adb3 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/emtexdir.c @@ -0,0 +1,405 @@ +/* emtexdir.c -- written by Eberhard Mattes, donated to the public domain */ + +#if defined (__EMX__) +#include <emx/syscalls.h> +#else +#include "emdir.h" +#endif +#if defined(DJGPP) || defined(GO32) +#include <unistd.h> +#endif +#include <stdlib.h> +#include <string.h> +#include <fcntl.h> +#include <io.h> +#include "emtexdir.h" + +#define FALSE 0 +#define TRUE 1 + +void (*emtex_dir_find_callback)(const char *name, int ok) = NULL; + +static int setup_add (struct emtex_dir *dst, const char *path) +{ + char *p; + + if (dst->used >= dst->alloc) + { + dst->alloc += 8; + dst->list = realloc (dst->list, dst->alloc * sizeof (*dst->list)); + if (dst->list == NULL) + return (FALSE); + } + p = strdup (path); + if (p == NULL) + return (FALSE); + dst->list[dst->used++] = p; + return (TRUE); +} + + +static int setup_subdir (struct emtex_dir *dst, char *path, size_t add, + unsigned flags, int recurse) +{ + int ok, i, end, len; +#if defined (__EMX__) + struct _find find; +#else + struct ll_findbuffer find; +#endif + + i = dst->used; + strcpy (path + add, "*.*"); +#if defined (__EMX__) + ok = __findfirst (path, 0x10, &find) == 0; +#else + ok = ll_findfirst (path, 0x10, &find); +#endif + while (ok) + { + if ((find.attr & 0x10) + && !(strcmp (find.name, ".") == 0 || strcmp (find.name, "..") == 0)) + { + len = strlen (find.name); + memcpy (path + add, find.name, len); + path[add+len] = '\\'; + path[add+len+1] = 0; + if (!setup_add (dst, path)) + return (FALSE); + } +#if defined (__EMX__) + ok = __findnext (&find) == 0; +#else + ok = ll_findnext (&find); +#endif + } + if (recurse) + { + end = dst->used; + while (i < end) + { + strcpy (path, dst->list[i]); + if (!setup_subdir (dst, path, strlen (path), flags, TRUE)) + return (FALSE); + ++i; + } + } + return (TRUE); +} + + +static int setup_dir (struct emtex_dir *dst, char *path, + const char *base_dir, size_t base_dir_len, + const char *sub_dir, + unsigned flags) +{ + size_t i, len; + + memcpy (path, base_dir, base_dir_len); + i = base_dir_len; + if ((flags & EDS_BANG) && sub_dir == NULL) + { + flags &= ~(EDS_ONESUBDIR|EDS_ALLSUBDIR); + if (i >= 2 && path[i-1] == '!' && path[i-2] == '!') + { + flags |= EDS_ALLSUBDIR; + i -= 2; + } + else if (i >= 1 && path[i-1] == '!') + { + flags |= EDS_ONESUBDIR; + --i; + } + } + if (sub_dir != NULL && *sub_dir != 0) + { + if (i != 0 && path[i-1] != ':' && path[i-1] != '/' && path[i-1] != '\\') + path[i++] = '\\'; + len = strlen (sub_dir); + memcpy (path+i, sub_dir, len); + i += len; + } + if (path[i-1] != ':' && path[i-1] != '/' && path[i-1] != '\\') + path[i++] = '\\'; + path[i] = 0; + if (!setup_add (dst, path)) + return (FALSE); + if (flags & EDS_ALLSUBDIR) + return (setup_subdir (dst, path, i, flags, TRUE)); + else if (flags & EDS_ONESUBDIR) + return (setup_subdir (dst, path, i, flags, FALSE)); + else + return (TRUE); +} + + +/*static */int setup_list (struct emtex_dir *dst, char *path, + const char *list, unsigned flags) +{ + const char *end; + size_t i; + + for (;;) + { + while (*list == ' ' || *list == '\t') + ++list; + if (*list == 0) + return (TRUE); + end = list; + while (*end != 0 && *end != ';') + ++end; + i = end - list; + while (i > 0 && (list[i-1] == ' ' || list[i-1] == '\t')) + --i; + if (i != 0 && !setup_dir (dst, path, list, i, NULL, flags)) + return (FALSE); + if (*end == 0) + return (TRUE); + list = end + 1; + } +} + + +int emtex_dir_setup (struct emtex_dir *ed, const char *env, const char *dir, + unsigned flags) +{ + const char *val; + char path[260]; + + ed->alloc = 0; + ed->used = 0; + ed->list = NULL; + if (env != NULL && (val = getenv (env)) != NULL) + return (setup_list (ed, path, val, flags)); + else if ((val = getenv ("EMTEXDIR")) != NULL) + return (setup_dir (ed, path, val, strlen (val), dir, flags)); + else + return (setup_dir (ed, path, "\\emtex", 6, dir, flags)); +} + + +static void pretty (char *path, unsigned flags) +{ + char *p; + + if (flags & EDF_FSLASH) + for (p = path; *p != 0; ++p) + if (*p == '\\') + *p = '/'; +} + + +#define ADDCHAR(C) \ + if (dst_size < 1) return (EDT_TOOLONG); \ + *dst++ = (C); --dst_size + +int emtex_dir_trunc (char *dst, size_t dst_size, const char *src, + unsigned flags, int method) +{ + int len, truncated, dot; + + if (src[0] != 0 && src[1] == ':') + { + ADDCHAR (src[0]); + ADDCHAR (src[1]); + src += 2; + } + + truncated = FALSE; dot = FALSE; len = 0; + for (;;) + { + switch (*src) + { + case 0: + ADDCHAR (0); + return (truncated ? EDT_CHANGED : EDT_UNCHANGED); + + case ':': + return (EDT_INVALID); + + case '/': + case '\\': + ADDCHAR (*src); + len = 0; dot = FALSE; + break; + + case '.': + if (dot) + return (EDT_INVALID); + ADDCHAR (*src); + + /* ".." is allowed -- don't return EDT_INVALID for the next + dot. */ + + if (!(len == 0 && src[1] == '.' + && (src[2] == 0 || src[2] == '/' || src[2] == '\\'))) + { + len = 0; dot = TRUE; + } + break; + + default: + if (dot && len == 3) + truncated = TRUE; + else if (!dot && len == 8) + { + truncated = TRUE; + if (method == 0) + { + dst[-3] = dst[-2]; + dst[-2] = dst[-1]; + dst[-1] = *src; + } + } + else + { + ADDCHAR (*src); + ++len; + } + break; + } + ++src; + } +} + + +static int find2 (const char *name, unsigned flags) +{ + int ok; + + ok = (access (name, 4) == 0); + if (flags & EDF_TRACE) + emtex_dir_find_callback (name, ok); + return (ok); +} + + +static int find1 (char *path, size_t path_size, const char *dir, + const char *fname, unsigned flags) +{ + char buf[260]; + int method, rc; + size_t len, tmp; + + len = 0; + if (dir != NULL) + { + tmp = strlen (dir); + if (tmp >= sizeof (buf)) + return (FALSE); + memcpy (buf, dir, tmp); + len = tmp; + } + tmp = strlen (fname); + if (len + tmp >= sizeof (buf)) + return (FALSE); + memcpy (buf + len, fname, tmp + 1); + len += tmp; +#if 0 /* wkim */ +/* disabled for Win95's long file name support */ +/* -- Wonkoo Kim (wkim+@pitt.edu), May 18, 1997 */ + if (_osmode == DOS_MODE) + { + rc = emtex_dir_trunc (path, path_size, buf, flags, EDT_5_PLUS_3); + if ((rc == EDT_UNCHANGED || rc == EDT_CHANGED) && find2 (path, flags)) + { + pretty (path, flags); + return (TRUE); + } + rc = emtex_dir_trunc (path, path_size, buf, flags, EDT_8); + if (rc == EDT_CHANGED && find2 (path, flags)) + { + pretty (path, flags); + return (TRUE); + } + return (FALSE); + } + else +#endif /* wkim */ + { + if (len < path_size && find2 (buf, flags)) + { + memcpy (path, buf, len + 1); + pretty (path, flags); + return (TRUE); + } + for (method = 0; method < 2; ++method) + { + rc = emtex_dir_trunc (path, path_size, buf, flags, method); + if (rc == EDT_CHANGED && find2 (path, flags)) + { + pretty (path, flags); + return (TRUE); + } + } + return (FALSE); + } +} + + +int emtex_dir_find (char *path, size_t path_size, + const struct emtex_dir *ed, + const char *fname, unsigned flags) +{ + int i, absp; + const char *p; + + absp = FALSE; + for (p = fname; *p != 0; ++p) + if (*p == ':' || *p == '/' || *p == '\\') + { + absp = TRUE; + break; + } + + if (absp) + return (find1 (path, path_size, NULL, fname, flags)); + + if ((flags & EDF_CWD) && find1 (path, path_size, NULL, fname, flags)) + return (TRUE); + + for (i = 0; i < ed->used; ++i) + if (find1 (path, path_size, ed->list[i], fname, flags)) + return (TRUE); + return (FALSE); +} + + +#if defined (TEST) + +#include <stdio.h> + +int main (int argc, char *argv[]) +{ + struct emtex_dir ed; + int i; + unsigned flags1, flags2; + char path[260]; + + if (argc != 6) + { + puts ("Usage: emtexdir <flags> <flags> <env> <dir> <fname>"); + return (1); + } + + flags1 = (unsigned)strtol (argv[1], NULL, 0); + flags2 = (unsigned)strtol (argv[2], NULL, 0); + + if (!emtex_dir_setup (&ed, argv[3], argv[4], flags1)) + { + fputs ("emtex_dir_setup failed\n", stderr); + return (2); + } + + printf ("Directories:\n"); + for (i = 0; i < ed.used; ++i) + printf (" %s\n", ed.list[i]); + + if (!emtex_dir_find (path, sizeof (path), &ed, argv[5], flags2)) + puts ("File not found"); + else + printf ("Path: %s\n", path); + return (0); +} + +#endif diff --git a/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/emtexdir.h b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/emtexdir.h new file mode 100644 index 00000000000..a9a986db05b --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/emtexdir.h @@ -0,0 +1,57 @@ +/* emtexdir.h -- written by Eberhard Mattes, donated to the public domain */ + +#if !defined (_EMTEXDIR_H) +#define _EMTEXDIR_H + +#if defined (__cplusplus) +extern "C" { +#endif + + +/* Flags for emtex_dir_setup */ + +#define EDS_ONESUBDIR 0x0001 +#define EDS_ALLSUBDIR 0x0002 +#define EDS_BANG 0x0004 + +/* Flags for emtex_dir_find */ + +#define EDF_CWD 0x0001 +#define EDF_FSLASH 0x0002 +#define EDF_TRACE 0x8000 + +/* Methods for emtex_dir_trunc */ + +#define EDT_5_PLUS_3 0 /* 5+3.3 */ +#define EDT_8 1 /* 8.3 */ + +/* Return values for emtex_dir_trunc */ + +#define EDT_UNCHANGED 0 /* Path name not changed */ +#define EDT_CHANGED 1 /* Path name truncated */ +#define EDT_TOOLONG 2 /* Path name too long */ +#define EDT_INVALID 3 /* Path name invalid */ + +struct emtex_dir +{ + char **list; + int used; + int alloc; +}; + +extern void (*emtex_dir_find_callback)(const char *name, int ok); + +int emtex_dir_setup (struct emtex_dir *ed, const char *env, const char *dir, + unsigned flags); + +int emtex_dir_find (char *path, size_t path_size, const struct emtex_dir *ed, + const char *fname, unsigned flags); + +int emtex_dir_trunc (char *dst, size_t dst_size, const char *src, + unsigned flags, int method); + +#if defined (__cplusplus) +} +#endif + +#endif /* !defined (_EMTEXDIR_H) */ diff --git a/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/hbf.c b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/hbf.c new file mode 100644 index 00000000000..b55f7e8a401 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/hbf.c @@ -0,0 +1,1589 @@ +/* + * Copyright 1993,1994,1995,2005 by Ross Paterson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior written + * permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * + * Ross Paterson <ross@soi.city.ac.uk> + * 17 October 1995 + * + * The following people have supplied bug fixes: + * + * Simon Chow <khsc@synoptics.com> + * Fung Fung Lee <lee@simd.stanford.edu> + * Man-Chi Pong <mcpong@cs.ust.hk> + * Steven Simpson <simpson@math.psu.edu> + * Charles Wang <charles.wang@infores.com> + * Werner Lemberg <wl@gnu.org> + * + * Ross no longer maintains this code. Please send bug reports to + * Werner Lemberg <wl@gnu.org>. + * + */ + +/* + * Two C interfaces to HBF files. + * + * The multiple interfaces make this code rather messy; I intend + * to clean it up as experience is gained on what is really needed. + * + * There are also two modes of operation: + * - the default is to read each bitmap from its file as demanded + * - if IN_MEMORY is defined, the whole bitmap file is held in memory. + * In this case, if running under Unix, the bitmap files may be gzipped + * (but the filename used in the HBF file should be the name of the + * file before it was gzipped). + */ +#include <stddef.h> +#include <stdlib.h> +#include <stdio.h> +#include <ctype.h> +#include <string.h> +#include "hbf.h" + +#ifdef __MSDOS__ +#define msdos +#endif + +/* + * if the linker complains about an unresolved identifier '_strdup', + * uncomment the following definition. + */ +/* #define NO_STRDUP */ + +#ifdef __STDC__ +# define _(x) x +#else +# define _(x) () +#endif + +#define reg register + +typedef int bool; +#define TRUE 1 +#define FALSE 0 + +#define Bit(n) (1<<(7 - (n))) + +/* + * Messy file system issues + */ + +#ifdef unix +#define PATH_DELIMITER ':' +#define RelativeFileName(fn) ((fn)[0] != '/') +#define LocalFileName(fn) (strchr(fn, '/') == NULL) +#endif /* unix */ +#ifdef msdos +#define PATH_DELIMITER ';' +#define HasDrive(fn) (isalpha((fn)[0]) && (fn)[1] == ':') +#ifdef __EMX__ +#define RelativeFileName(fn) (! HasDrive(fn) && \ + !((fn)[0] == '\\' || (fn)[0] == '/')) +#define LocalFileName(fn) (! HasDrive(fn) && \ + strchr(fn, '\\') == NULL && \ + strchr(fn, '/') == NULL) +#else +#define RelativeFileName(fn) (! HasDrive(fn) && (fn)[0] != '\\') +#define LocalFileName(fn) (! HasDrive(fn) && strchr(fn, '\\') == NULL) +#endif /* __EMX__ */ +#define READ_BINARY "rb" +#endif /* msdos */ +#ifdef vms +#define PATH_DELIMITER ',' +#define RelativeFileName(fn) (strchr(fn, ':') == NULL && ((fn)[0] != '[' || (fn)[1] == '.' || (fn)[1] == '-')) +#define LocalFileName(fn) (strchr(fn, ':') == NULL && strchr(fn, ']') == NULL) +#endif + +#ifndef RelativeFileName +#define RelativeFileName(fn) FALSE +#endif + +#ifndef LocalFileName +#define LocalFileName(fn) FALSE +#endif + +#ifndef READ_BINARY +#define READ_BINARY "r" +#endif + +#define MAX_FILENAME 1024 + +/* + * Internal structures + */ + +typedef unsigned char byte; + +#define PROPERTY struct _PROPERTY +#define BM_FILE struct _BM_FILE +#define B2_RANGE struct _B2_RANGE +#define CODE_RANGE struct _CODE_RANGE + +PROPERTY { + char *prop_name; + char *prop_value; + PROPERTY *prop_next; +}; + +BM_FILE { + char *bmf_name; +#ifdef IN_MEMORY + byte *bmf_contents; +#else + FILE *bmf_file; +#endif + long bmf_size; + BM_FILE *bmf_next; +}; + +B2_RANGE { + byte b2r_start; + byte b2r_finish; + B2_RANGE *b2r_next; +}; + +typedef unsigned short CHAR; +typedef unsigned int CHAR_INDEX; /* character index in file */ +#define BAD_CHAR_INDEX 0xffff + +CODE_RANGE { + CHAR code_start; + CHAR code_finish; + BM_FILE *code_bm_file; + long code_offset; + CHAR_INDEX code_pos; + bool code_transposed; + bool code_inverted; + CODE_RANGE *code_next; +}; + +/* + * Extended internal version of HBF + */ + +typedef struct { + /* fields corresponding to the definition */ + HBF public; + /* plus internal stuff */ + char *filename; + byte *bitmap_buffer; + unsigned int b2_size; /* number of legal byte-2's */ + PROPERTY *property; + B2_RANGE *byte_2_range; + CODE_RANGE *code_range; + BM_FILE *bm_file; +} HBF_STRUCT; + +#define FirstByte(code) ((code)>>8) +#define SecondByte(code) ((code)&0xff) +#define MakeCode(byte1,byte2) (((byte1)<<8)|(byte2)) + +/* size of a bitmap in the file (may be affected by transposition) */ +#define FileBitmapSize(hbfFile,cp) \ + ((cp)->code_transposed ? \ + (hbfBitmapBBox(hbfFile)->hbf_height + 7)/8 * \ + hbfBitmapBBox(hbfFile)->hbf_width : \ + HBF_BitmapSize(hbfFile)) + +#define NEW(type) ((type *)malloc((unsigned)(sizeof(type)))) + +#define QUOTE '"' + +#define MAXLINE 1024 + +#ifdef WIN32 +#define strdup(x) _strdup(x) +#else + extern char *strdup _((const char *s)); +#endif + +static void add_b2r _((B2_RANGE **last_b2r, int start, int finish)); +static bool add_code_range _((HBF_STRUCT *hbf, const char *line)); +static void add_property _((HBF_STRUCT *hbf, const char *lp)); +static CHAR_INDEX b2_pos _((HBF_STRUCT *hbf, HBF_CHAR code)); +static int b2_size _((B2_RANGE *b2r)); +static void clear_bbox _((HBF_BBOX *bbox)); +static void clear_record _((HBF_STRUCT *hbf)); +static char *concat _((const char *dir, int dirlen, const char *stem)); +static char *expand_filename _((const char *name, const char *filename)); +static const byte *get_bitmap + _((HBF_STRUCT *hbf, HBF_CHAR code, byte *buffer)); +static byte *local_buffer _((HBF_STRUCT *hbf)); +static void invert _((byte *buffer, unsigned length)); +#ifdef IN_MEMORY +static bool read_bitmap_file _((BM_FILE *bmf, FILE *f)); +static bool copy_transposed + _((HBF *hbf, byte *bitmap, const byte *source)); +#else +static bool get_transposed _((HBF *hbf, FILE *f, byte *bitmap)); +#endif +static bool match _((const char *lp, const char *sp)); +static bool parse_file _((FILE *f, HBF_STRUCT *hbf)); +static FILE *path_open + _((const char *path, const char *filename, char **fullp)); +static bool real_open _((const char *filename, HBF_STRUCT *hbf)); + +/* Error reporting */ + +int hbfDebug; /* set this for error reporting */ + +#ifdef __STDC__ +#include <stdarg.h> + +static void +eprintf(const char *fmt, ...) +{ + if (hbfDebug) { + va_list args; + + (void)fprintf(stderr, "HBF: "); + va_start(args, fmt); + (void)vfprintf(stderr, fmt, args); + va_end(args); + (void)fprintf(stderr, "\n"); + } +} +#else /* ! __STDC__ */ +/* poor man's variable-length argument list */ +static void +eprintf(fmt, x1, x2, x3, x4, x5, x6, x7, x8, x9) + const char *fmt; + int x1, x2, x3, x4, x5, x6, x7, x8, x9; +{ + if (hbfDebug) { + (void)fprintf(stderr, "HBF: "); + (void)fprintf(stderr, fmt, x1, x2, x3, x4, x5, x6, x7, x8, x9); + (void)fprintf(stderr, "\n"); + } +} +#endif /* __STDC__ */ + +static void +clear_bbox(bbox) + HBF_BBOX *bbox; +{ + bbox->hbf_width = bbox->hbf_height = 0; + bbox->hbf_xDisplacement = bbox->hbf_yDisplacement = 0; +} + +static void +clear_record(hbf) + HBF_STRUCT *hbf; +{ + clear_bbox(&(hbf->public.hbf_bitmap_bbox)); + clear_bbox(&(hbf->public.hbf_font_bbox)); + hbf->property = NULL; + hbf->filename = NULL; + hbf->bitmap_buffer = NULL; + hbf->byte_2_range = NULL; + hbf->code_range = NULL; + hbf->bm_file = NULL; +} + +/* + * Byte-2 ranges + */ + +static void +add_b2r(last_b2r, start, finish) +reg B2_RANGE **last_b2r; + int start; + int finish; +{ +reg B2_RANGE *b2r; + + b2r = NEW(B2_RANGE); + while (*last_b2r != NULL && (*last_b2r)->b2r_start < start) + last_b2r = &((*last_b2r)->b2r_next); + b2r->b2r_next = *last_b2r; + b2r->b2r_start = start; + b2r->b2r_finish = finish; + *last_b2r = b2r; +} + +static CHAR_INDEX +b2_pos(hbf, code) + HBF_STRUCT *hbf; + HBF_CHAR code; +{ +reg B2_RANGE *b2r; +reg unsigned c; +reg CHAR_INDEX pos; + + c = SecondByte(code); + pos = 0; + for (b2r = hbf->byte_2_range; b2r != NULL; b2r = b2r->b2r_next) + if (b2r->b2r_start <= c && c <= b2r->b2r_finish) + return pos + c - b2r->b2r_start; + else + pos += b2r->b2r_finish - b2r->b2r_start + 1; + return BAD_CHAR_INDEX; +} + +static int +b2_size(b2r) +reg B2_RANGE *b2r; +{ +reg int size; + + size = 0; + for ( ; b2r != NULL; b2r = b2r->b2r_next) + size += b2r->b2r_finish - b2r->b2r_start + 1; + return size; +} + +/* map a position to a character code */ +static long +code_of(hbf, pos) + HBF_STRUCT *hbf; + long pos; +{ + long code; + int residue; +reg B2_RANGE *b2r; + + code = pos / hbf->b2_size * 256; + residue = pos % hbf->b2_size; + for (b2r = hbf->byte_2_range; b2r != NULL; b2r = b2r->b2r_next) + if (b2r->b2r_start + residue <= b2r->b2r_finish) + return code + b2r->b2r_start + residue; + else + residue -= b2r->b2r_finish - b2r->b2r_start + 1; + /* should never get here */ + return 0L; +} + +/* + * String stuff + */ + +static bool +match(lp, sp) +reg const char *lp; +reg const char *sp; +{ + while (*lp == *sp && *sp != '\0') { + lp++; + sp++; + } + return (*lp == '\0' || isspace(*lp)) && *sp == '\0'; +} + +#ifdef NO_STRDUP +char * +strdup(s) + const char *s; +{ + char *new_s; + + new_s = malloc((unsigned)strlen(s) + 1); + strcpy(new_s, s); + return new_s; +} +#endif + +/* + * Properties + */ + +static void +add_property(hbf, lp) +reg HBF_STRUCT *hbf; +reg const char *lp; +{ +reg PROPERTY *prop; + char tmp[MAXLINE]; +reg char *tp; + + prop = NEW(PROPERTY); + + tp = tmp; + while (*lp != '\0' && ! isspace(*lp)) + *tp++ = *lp++; + *tp = '\0'; + prop->prop_name = strdup(tmp); + + while (*lp != '\0' && isspace(*lp)) + lp++; + + tp = tmp; + if (*lp == QUOTE) { + lp++; + while (*lp != '\0' && ! (*lp == QUOTE && *++lp != QUOTE)) + *tp++ = *lp++; + } + else + for (;;) { + while (*lp != '\0' && ! isspace(*lp)) + *tp++ = *lp++; + while (*lp != '\0' && isspace(*lp)) + lp++; + if (*lp == '\0') + break; + *tp++ = ' '; + } + *tp = '\0'; + prop->prop_value = strdup(tmp); + + prop->prop_next = hbf->property; + hbf->property = prop; +} + +const char * +hbfProperty(hbfFile, propName) + HBF *hbfFile; + const char *propName; +{ +reg HBF_STRUCT *hbf; +reg PROPERTY *prop; + + hbf = (HBF_STRUCT *)hbfFile; + for (prop = hbf->property; prop != NULL; prop = prop->prop_next) + if (strcmp(prop->prop_name, propName) == 0) + return prop->prop_value; + return NULL; +} + +/* + * Compatability routines + */ + +const char * +HBF_GetProperty(handle, propertyName) + HBF *handle; + const char *propertyName; +{ + return hbfProperty(handle, propertyName); +} + +int +HBF_GetFontBoundingBox(handle, width, height, xDisplacement, yDisplacement) + HBF_Handle handle; + unsigned int *width; + unsigned int *height; + int *xDisplacement; + int *yDisplacement; +{ + if (width != NULL) + *width = hbfFontBBox(handle)->hbf_width; + if (height != NULL) + *height = hbfFontBBox(handle)->hbf_height; + if (xDisplacement != NULL) + *xDisplacement = hbfFontBBox(handle)->hbf_xDisplacement; + if (yDisplacement != NULL) + *yDisplacement = hbfFontBBox(handle)->hbf_yDisplacement; + return 0; +} + +int +HBF_GetBitmapBoundingBox(handle, width, height, xDisplacement, yDisplacement) + HBF_Handle handle; + unsigned int *width; + unsigned int *height; + int *xDisplacement; + int *yDisplacement; +{ + if (width != NULL) + *width = hbfBitmapBBox(handle)->hbf_width; + if (height != NULL) + *height = hbfBitmapBBox(handle)->hbf_height; + if (xDisplacement != NULL) + *xDisplacement = hbfBitmapBBox(handle)->hbf_xDisplacement; + if (yDisplacement != NULL) + *yDisplacement = hbfBitmapBBox(handle)->hbf_yDisplacement; + return 0; +} + +/* + * Prepend a directory to a relative filename. + */ +static char * +concat(dir, dirlen, stem) + const char *dir; /* not necessarily null-terminated */ + int dirlen; /* number of significant chars in dir */ + const char *stem; /* relative filename */ +{ + char *fullname; + + if (dirlen == 0) /* null: current directory */ + return strdup(stem); +#ifdef unix + fullname = malloc(dirlen + strlen(stem) + 2); + (void)sprintf(fullname, "%.*s/%s", dirlen, dir, stem); +#else +#ifdef msdos + fullname = malloc(dirlen + strlen(stem) + 2); + (void)sprintf(fullname, "%.*s\\%s", dirlen, dir, stem); +#else +#ifdef vms + if (dir[dirlen-1] == ']' && stem[0] == '[' && stem[1] == '-') { + dirlen--; + stem++; + fullname = malloc(dirlen + strlen(stem) + 2); + (void)sprintf(fullname, "%.*s.%s", dirlen, dir, stem); + } + else { + if (dir[dirlen-1] == ']' && stem[0] == '[' && stem[1] == '.') { + dirlen--; + stem++; + } + fullname = malloc(dirlen + strlen(stem) + 1); + (void)sprintf(fullname, "%.*s%s", dirlen, dir, stem); + } +#else + fullname = strdup(stem); +#endif /* vms */ +#endif /* msdos */ +#endif /* unix */ + return fullname; +} + +/* + * Bitmap files + * + * If the host operating system has a heirarchical file system and + * the bitmap file name is relative, it is relative to the directory + * containing the HBF file. + */ +static char * +expand_filename(name, hbf_name) + const char *name; + const char *hbf_name; +{ +#ifdef unix +reg char *s; +reg int size; + + size = name[0] != '/' && (s = strrchr(hbf_name, '/')) != NULL ? + s - hbf_name + 1 : 0; + s = malloc((unsigned)size + strlen(name) + 1); + (void)sprintf(s, "%.*s%s", size, hbf_name, name); + return s; +#else +#ifdef msdos +reg char *s; +reg int size; + +#ifdef __EMX__ + s = (unsigned char *)hbf_name + strlen((unsigned char *)hbf_name) - 1; + for(;;) { + if (*s == '\\' || *s == '/') + break; + if (s == hbf_name) { + s = NULL; + break; + } + s--; + } + + size = HasDrive(name) ? 0 : + (name[0] == '\\' || name[0] == '/') ? + (HasDrive(hbf_name) ? 2 : 0) : + s != NULL ? s - hbf_name + 1 : 0; +#else + size = HasDrive(name) ? 0 : + name[0] == '\\' ? (HasDrive(hbf_name) ? 2 : 0) : + (s = strrchr(hbf_name, '\\')) != NULL ? + s - hbf_name + 1 : 0; +#endif /* __EMX__ */ + s = malloc((unsigned)size + strlen(name) + 1); + (void)sprintf(s, "%.*s%s", size, hbf_name, name); + return s; +#else +#ifdef vms +reg char *s; +reg const char *copyto; +reg int size; + + if ((s = strchr(hbf_name, ']')) != NULL && RelativeFileName(name)) + return concat(hbf_name, (s - hbf_name) + 1, name); + + copyto = hbf_name; + if ((s = strstr(copyto, "::")) != NULL && strstr(name, "::") == NULL) + copyto = s+2; + if ((s = strchr(copyto, ':')) != NULL && strchr(name, ':') == NULL) + copyto = s+1; + size = copyto - hbf_name; + s = malloc((unsigned)size + strlen(name) + 1); + (void)sprintf(s, "%.*s%s", size, hbf_name, name); + return s; +#else + return strdup(name); +#endif /* vms */ +#endif /* msdos */ +#endif /* unix */ +} + +static BM_FILE * +find_file(hbf, filename) + HBF_STRUCT *hbf; + const char *filename; +{ + BM_FILE **fp; +reg BM_FILE *file; + FILE *f; + char *bmfname; +#ifdef IN_MEMORY +#ifdef unix + bool from_pipe; +#endif +#endif + + for (fp = &(hbf->bm_file); *fp != NULL; fp = &((*fp)->bmf_next)) { + bmfname = strrchr((*fp)->bmf_name, '/'); + bmfname = (bmfname) ? bmfname + 1 : (*fp)->bmf_name; + if (strcmp(bmfname, filename) == 0) + return *fp; + } + + file = NEW(BM_FILE); + if (file == NULL) { + eprintf("out of memory"); + return NULL; + } + file->bmf_name = expand_filename(filename, hbf->filename); + if (file->bmf_name == NULL) { + free((char *)file); + return NULL; + } + f = fopen(file->bmf_name, READ_BINARY); +#ifdef IN_MEMORY +#ifdef unix + from_pipe = FALSE; + if (f == NULL) { + char tmp[400]; + + sprintf(tmp, "%s.gz", file->bmf_name); + if ((f = fopen(tmp, "r")) != NULL) { + fclose(f); + sprintf(tmp, "gzcat %s.gz", file->bmf_name); + if ((f = popen(tmp, "r")) != NULL) + from_pipe = TRUE; + } + } +#endif /* unix */ +#endif /* IN_MEMORY */ + if (f == NULL) { + eprintf("can't open bitmap file '%s'", file->bmf_name); + free(file->bmf_name); + free((char *)file); + return NULL; + } +#ifdef IN_MEMORY + if (! read_bitmap_file(file, f)) { + free(file->bmf_name); + free((char *)file); + return NULL; + } +#ifdef unix + if (from_pipe) + pclose(f); + else + fclose(f); +#else /* ! unix */ + fclose(f); +#endif /* ! unix */ +#else /* ! IN_MEMORY */ + file->bmf_file = f; + fseek(f, 0L, 2); + file->bmf_size = ftell(f); +#endif /* ! IN_MEMORY */ + file->bmf_next = NULL; + *fp = file; + return file; +} + +#ifdef IN_MEMORY +#define GRAIN_SIZE 512 + +static bool +read_bitmap_file(bmf, f) + BM_FILE *bmf; + FILE *f; +{ + byte *contents, *cp; + long size; + int c; + + size = 0; + cp = contents = (byte *)malloc((unsigned)GRAIN_SIZE); + if (contents == NULL) { + eprintf("not enough space for bitmap file"); + return NULL; + } + while ((c = getc(f)) != EOF) { + if (size%GRAIN_SIZE == 0) { + contents = (byte *)realloc((char *)contents, + (unsigned)(size + GRAIN_SIZE)); + if (contents == NULL) { + eprintf("not enough space for bitmap file"); + return NULL; + } + cp = contents + size; + } + *cp++ = c; + size++; + } + bmf->bmf_size = size; + bmf->bmf_contents = (byte *)realloc((char *)contents, (unsigned)size); + return TRUE; +} +#endif /* IN_MEMORY */ + +/* + * Code ranges + */ + +/* check that a code range fits within its bitmap file */ +static bool +too_short(hbf, cp) + HBF_STRUCT *hbf; + CODE_RANGE *cp; +{ + int bm_size; + long offset, end_offset; + BM_FILE *bmf; + long start, finish; + + bm_size = FileBitmapSize(&(hbf->public), cp); + offset = cp->code_offset; + start = cp->code_start; + finish = cp->code_finish; + end_offset = offset + bm_size * + (hbf->b2_size*(long)FirstByte(finish) + + b2_pos(hbf, finish) - cp->code_pos + 1); + bmf = cp->code_bm_file; + if (end_offset <= bmf->bmf_size) + return FALSE; + /* bitmap file is too short: produce a specific error message */ + if (offset > bmf->bmf_size) + eprintf("bitmap file '%s' is shorter than offset 0x%04lx", + bmf->bmf_name, offset); + else if (offset + bm_size > bmf->bmf_size) + eprintf("bitmap file '%s' too short: no room for any bitmaps at offset 0x%04lx", + bmf->bmf_name, offset); + else + eprintf("bitmap file '%s' is too short - code range appears to be 0x%04lx-0x%04lx", + bmf->bmf_name, + start, + code_of(hbf, cp->code_pos + + (bmf->bmf_size - offset)/bm_size) - 1); + return TRUE; +} + +static const char * +skip_word(n, s) + int n; + const char *s; +{ + for ( ; n > 0; n--) { + while (*s != '\0' && ! isspace(*s)) + s++; + while (*s != '\0' && isspace(*s)) + s++; + } + return s; +} + +/* optional keywords at the end of a CODE_RANGE line */ +static void +parse_keywords(cp, s) + CODE_RANGE *cp; + const char *s; +{ + for (s = skip_word(4, s) ; *s != '\0'; s = skip_word(1, s)) { + switch (*s) { + case 's': case 'S': case 't': case 'T': + /* keyword "sideways" or "transposed" */ + cp->code_transposed = TRUE; + break; + case 'i': case 'I': + /* keyword "inverted" */ + cp->code_inverted = TRUE; + } + } +} + +static bool +add_code_range(hbf, line) + HBF_STRUCT *hbf; + const char *line; +{ + CODE_RANGE *cp; + CODE_RANGE **cpp; + long start, finish; + long offset; + char filename[MAXLINE]; + BM_FILE *bmf; + CHAR_INDEX b2pos; + + if (sscanf(line, "HBF_CODE_RANGE %li-%li %s %li", + &start, &finish, filename, &offset) != 4) { + eprintf("syntax error in HBF_CODE_RANGE"); + return FALSE; + } + /* code ranges are checked in real_open() */ + if ((bmf = find_file(hbf, filename)) == NULL) + return FALSE; + if ((cp = NEW(CODE_RANGE)) == NULL) { + eprintf("out of memory"); + return FALSE; + } + + cp->code_start = (CHAR)start; + cp->code_finish = (CHAR)finish; + cp->code_bm_file = bmf; + cp->code_offset = offset; + cp->code_transposed = cp->code_inverted = FALSE; + parse_keywords(cp, line); + /* insert it in order */ + for (cpp = &hbf->code_range; + *cpp != NULL && (*cpp)->code_finish < start; + cpp = &((*cpp)->code_next)) + ; + if (*cpp != NULL && (*cpp)->code_start <= finish) { + eprintf("code ranges overlap"); + return FALSE; + } + cp->code_next = *cpp; + *cpp = cp; + + /* set code_pos, and check range */ + if (start > finish) { + eprintf("illegal code range 0x%04lx-0x%04lx", start, finish); + return FALSE; + } + if ((b2pos = b2_pos(hbf, start)) == BAD_CHAR_INDEX) { + eprintf("illegal start code 0x%04lx", start); + return FALSE; + } + cp->code_pos = hbf->b2_size*(long)FirstByte(start) + b2pos; + if ((b2pos = b2_pos(hbf, finish)) == BAD_CHAR_INDEX) { + eprintf("illegal finish code 0x%04lx", finish); + return FALSE; + } + /* check that the bitmap file has enough bitmaps */ + return ! too_short(hbf, cp); +} + +/* + * Reading and parsing of an HBF file + */ + +/* get line, truncating to len, and trimming trailing spaces */ +static bool +get_line(buf, len, f) + char *buf; + int len; + FILE *f; +{ + int c; + char *bp; + + bp = buf; + for (;;) { + if ((c = getc(f)) == EOF) { + eprintf("unexpected end of file"); + return FALSE; + } + if (c == '\n' || c == '\r') { + /* trim trailing space */ + while (bp > buf && isspace(*(bp-1))) + bp--; + *bp = '\0'; + return TRUE; + } + if (len > 0) { + *bp++ = c; + len--; + } + } +} + +/* get next non-COMMENT line */ +static bool +get_text_line(buf, len, f) + char *buf; + int len; + FILE *f; +{ + while (get_line(buf, len, f)) + if (*buf != '\0' && ! match(buf, "COMMENT")) + return TRUE; + return FALSE; +} + +static bool +get_property(line, keyword, hbf) + const char *line; + const char *keyword; + HBF_STRUCT *hbf; +{ + if (! match(line, keyword)) { + eprintf("%s expected", keyword); + return FALSE; + } + add_property(hbf, line); + return TRUE; +} + +static bool +get_bbox(line, keyword, bbox) + const char *line; + const char *keyword; + HBF_BBOX *bbox; +{ + int w, h, xd, yd; + + if (! match(line, keyword) || + sscanf(line + strlen(keyword), "%i %i %i %i", + &w, &h, &xd, &yd) != 4) { + eprintf("%s expected", keyword); + return FALSE; + } + if (w <= 0 || h <= 0) { + eprintf("illegal %s dimensions %dx%d", keyword, w, h); + return FALSE; + } + bbox->hbf_width = w; + bbox->hbf_height = h; + bbox->hbf_xDisplacement = xd; + bbox->hbf_yDisplacement = yd; + return TRUE; +} + +/* + * HBFHeaderFile ::= + * 'HBF_START_FONT' version EOLN + * 'HBF_CODE_SCHEME' word ... EOLN + * 'FONT' fontName EOLN + * 'SIZE' ptsize xres yres EOLN + * 'HBF_BITMAP_BOUNDING_BOX' w h xd yd EOLN + * 'FONTBOUNDINGBOX' w h xd yd EOLN + * X11R5FontPropertySection + * 'CHARS' n EOLN + * HBFByte2RangeSection + * HBFCodeRangeSection + * 'HBF_END_FONT' EOLN . + * + * This implementation allows extra lines before HBF_END_FONT. + * Anything after HBF_END_FONT is ignored. + */ + +static bool +parse_file(f, hbf) + FILE *f; +reg HBF_STRUCT *hbf; +{ + char line[MAXLINE]; + int start, finish; + + if (! get_text_line(line, MAXLINE, f) || + ! get_property(line, "HBF_START_FONT", hbf)) + return FALSE; + + if (! get_text_line(line, MAXLINE, f) || + ! get_property(line, "HBF_CODE_SCHEME", hbf)) + return FALSE; + + if (! get_text_line(line, MAXLINE, f) || + ! get_property(line, "FONT", hbf)) + return FALSE; + + if (! get_text_line(line, MAXLINE, f) || + ! get_property(line, "SIZE", hbf)) + return FALSE; + + if (! get_text_line(line, MAXLINE, f) || + ! get_bbox(line, "HBF_BITMAP_BOUNDING_BOX", + &(hbf->public.hbf_bitmap_bbox))) + return FALSE; + + if (! get_text_line(line, MAXLINE, f) || + ! get_bbox(line, "FONTBOUNDINGBOX", &(hbf->public.hbf_font_bbox))) + return FALSE; + + if (! get_text_line(line, MAXLINE, f)) + return FALSE; + if (match(line, "STARTPROPERTIES")) { + for (;;) { + if (! get_text_line(line, MAXLINE, f)) + return FALSE; + if (match(line, "ENDPROPERTIES")) + break; + add_property(hbf, line); + } + if (! get_text_line(line, MAXLINE, f)) + return FALSE; + } + + if (match(line, "CHARS")) + if (! get_text_line(line, MAXLINE, f)) + return FALSE; + + if (match(line, "HBF_START_BYTE_2_RANGES")) { + for (;;) { + if (! get_text_line(line, MAXLINE, f)) + return FALSE; + if (match(line, "HBF_END_BYTE_2_RANGES")) + break; + if (sscanf(line, "HBF_BYTE_2_RANGE %i-%i", + &start, &finish) != 2) { + eprintf("HBF_BYTE_2_RANGE expected"); + return FALSE; + } + add_b2r(&(hbf->byte_2_range), start, finish); + } + if (! get_text_line(line, MAXLINE, f)) + return FALSE; + } + else + add_b2r(&(hbf->byte_2_range), 0, 0xff); + hbf->b2_size = b2_size(hbf->byte_2_range); + + if (! match(line, "HBF_START_CODE_RANGES")) { + eprintf("HBF_START_CODE_RANGES expected"); + return FALSE; + } + for (;;) { + if (! get_text_line(line, MAXLINE, f)) + return FALSE; + if (match(line, "HBF_END_CODE_RANGES")) + break; + if (! add_code_range(hbf, line)) + return FALSE; + } + + for (;;) { + if (! get_text_line(line, MAXLINE, f)) + return FALSE; + if (match(line, "HBF_END_FONT")) + break; + /* treat extra lines as properties (for private extensions) */ + add_property(hbf, line); + } + + return TRUE; +} + +static FILE * +path_open(path, filename, fullp) + const char *path; + const char *filename; + char **fullp; +{ + if (LocalFileName(filename) && path != NULL) { +#ifdef PATH_DELIMITER + int len; + char *fullname; + FILE *f; + const char *p_next; + + len = strlen(filename); + for (;;) { + p_next = strchr(path, PATH_DELIMITER); + if (p_next == NULL) + p_next = path + strlen(path); + fullname = concat(path, p_next - path, filename); + if ((f = fopen(fullname, "r")) != NULL) { + *fullp = fullname; + return f; + } + free(fullname); + if (*p_next == '\0') + break; + path = p_next + 1; + } +#endif + return NULL; + } + else { + *fullp = strdup(filename); + return fopen(*fullp, "r"); + } +} + +static bool +real_open(filename, hbf) + const char *filename; +reg HBF_STRUCT *hbf; +{ + FILE *f; + + f = path_open(getenv("HBFPATH"), filename, &(hbf->filename)); + if (f == NULL) { + eprintf("can't read file '%s'", filename); + return FALSE; + } + if (! parse_file(f, hbf)) { + fclose(f); + return FALSE; + } + fclose(f); + return TRUE; +} + +HBF * +hbfOpen(filename) + const char *filename; +{ +reg HBF_STRUCT *hbf; + + if ((hbf = NEW(HBF_STRUCT)) == NULL) { + eprintf("can't allocate HBF structure"); + return NULL; + } + clear_record(hbf); + if (real_open(filename, hbf)) + return &(hbf->public); + hbfClose(&(hbf->public)); + return NULL; +} + +int +HBF_OpenFont(filename, ptrHandleStorage) + const char *filename; + HBF **ptrHandleStorage; +{ + return (*ptrHandleStorage = hbfOpen(filename)) == NULL ? -1 : 0; +} + +/* + * Close files, free everything associated with the HBF. + */ + +int +HBF_CloseFont(hbfFile) + HBF *hbfFile; +{ +reg HBF_STRUCT *hbf; + PROPERTY *prop_ptr, *prop_next; + B2_RANGE *b2r_ptr, *b2r_next; + CODE_RANGE *code_ptr, *code_next; + BM_FILE *bmf_ptr, *bmf_next; + int status; + + status = 0; + hbf = (HBF_STRUCT *)hbfFile; + + if (hbf->filename != NULL) + free(hbf->filename); + if (hbf->bitmap_buffer != NULL) + free(hbf->bitmap_buffer); + + for (prop_ptr = hbf->property; + prop_ptr != NULL; + prop_ptr = prop_next) { + prop_next = prop_ptr->prop_next; + free(prop_ptr->prop_name); + free(prop_ptr->prop_value); + free((char *)prop_ptr); + } + + for (b2r_ptr = hbf->byte_2_range; + b2r_ptr != NULL; + b2r_ptr = b2r_next) { + b2r_next = b2r_ptr->b2r_next; + free((char *)b2r_ptr); + } + + for (code_ptr = hbf->code_range; + code_ptr != NULL; + code_ptr = code_next) { + code_next = code_ptr->code_next; + free((char *)code_ptr); + } + + for (bmf_ptr = hbf->bm_file; + bmf_ptr != NULL; + bmf_ptr = bmf_next) { + bmf_next = bmf_ptr->bmf_next; +#ifdef IN_MEMORY + free((char *)(bmf_ptr->bmf_contents)); +#else + if (bmf_ptr->bmf_file != NULL && + fclose(bmf_ptr->bmf_file) < 0) + status = -1; +#endif + free(bmf_ptr->bmf_name); + free((char *)bmf_ptr); + } + + free((char *)hbf); + + return status; +} + +void +hbfClose(hbfFile) + HBF *hbfFile; +{ + (void)HBF_CloseFont(hbfFile); +} + +/* + * Fetch a bitmap + */ + +const byte * +hbfGetBitmap(hbf, code) + HBF *hbf; + HBF_CHAR code; +{ + return get_bitmap((HBF_STRUCT *)hbf, code, (byte *)NULL); +} + +int +HBF_GetBitmap(hbf, code, buffer) + HBF *hbf; + HBF_CHAR code; + byte *buffer; +{ + return get_bitmap((HBF_STRUCT *)hbf, code, buffer) == NULL ? -1 : 0; +} + +/* + * Internal function to fetch a bitmap. + * If buffer is non-null, it must be used. + */ +static const byte * +get_bitmap(hbf, code, buffer) +reg HBF_STRUCT *hbf; + HBF_CHAR code; + byte *buffer; +{ + CHAR_INDEX pos, b2pos; +reg CODE_RANGE *cp; + BM_FILE *bmf; + int bm_size; + long offset; + + if ((b2pos = b2_pos(hbf, code)) == BAD_CHAR_INDEX) + return NULL; + pos = hbf->b2_size*FirstByte(code) + b2pos; + for (cp = hbf->code_range; cp != NULL; cp = cp->code_next) + if (cp->code_start <= code && code <= cp->code_finish) { + bmf = cp->code_bm_file; + bm_size = FileBitmapSize(&(hbf->public), cp); + offset = cp->code_offset + + (long)(pos - cp->code_pos) * bm_size; +#ifdef IN_MEMORY + if (buffer == NULL && + ! cp->code_transposed && ! cp->code_inverted) + return bmf->bmf_contents + offset; +#endif /* IN_MEMORY */ + if (buffer == NULL && + ((buffer = local_buffer(hbf)) == NULL)) + return NULL; +#ifdef IN_MEMORY + if (cp->code_transposed) + copy_transposed(&(hbf->public), + buffer, + bmf->bmf_contents + offset); + else + memcpy((char *)buffer, + (char *)(bmf->bmf_contents + offset), + bm_size); +#else /* ! IN_MEMORY */ + if (fseek(bmf->bmf_file, offset, 0) != 0) { + eprintf("seek error on code 0x%04x", code); + return NULL; + } + if (cp->code_transposed ? + ! get_transposed(&(hbf->public), bmf->bmf_file, + buffer) : + fread((char *)buffer, + bm_size, 1, bmf->bmf_file) != 1) { + eprintf("read error on code 0x%04x", code); + return NULL; + } +#endif /* IN_MEMORY */ + if (cp->code_inverted) + invert(buffer, HBF_BitmapSize(&(hbf->public))); + return buffer; + } + eprintf("code 0x%04x out of range", code); + return NULL; +} + +static byte * +local_buffer(hbf) + HBF_STRUCT *hbf; +{ + if (hbf->bitmap_buffer == NULL && + (hbf->bitmap_buffer = (byte *)malloc(HBF_BitmapSize(&(hbf->public)))) == NULL) { + eprintf("out of memory"); + return NULL; + } + return hbf->bitmap_buffer; +} + +static void +invert(buffer, length) + byte *buffer; + unsigned int length; +{ + for ( ; length > 0; length--) + *buffer++ ^= 0xff; +} + +#ifdef IN_MEMORY +static bool +copy_transposed(hbf, bitmap, source) + HBF *hbf; +reg byte *bitmap; +reg const byte *source; +{ +reg byte *pos; +reg byte *bm_end; + int x; + int width; +reg int row_size; +reg int c; +reg int imask, omask; + + width = hbfBitmapBBox(hbf)->hbf_width; + row_size = HBF_RowSize(hbf); + bm_end = bitmap + HBF_BitmapSize(hbf); + (void)memset((char *)bitmap, '\0', HBF_BitmapSize(hbf)); + for (x = 0; x < width; x++) { + pos = bitmap + x/8; + omask = Bit(x%8); + /* y = 0 */ + for (;;) { + c = *source++; + for (imask = Bit(0); imask != 0; imask >>= 1) { + /* + * At this point, + * + * imask == Bit(y%8) + * pos == bitmap + y*row_size + x/8 + * + * We examine bit y of row x of the input, + * setting bit x of row y of the output if + * required, by applying omask to *pos. + */ + if ((c & imask) != 0) + *pos |= omask; + /* if (++y > height) goto end_column */ + pos += row_size; + if (pos >= bm_end) + goto end_column; + } + } +end_column: + ; + } + return TRUE; +} +#else /* ! IN_MEMORY */ +static bool +get_transposed(hbf, f, bitmap) + HBF *hbf; + FILE *f; +reg byte *bitmap; +{ +reg byte *pos; +reg byte *bm_end; + int x; + int width; +reg int row_size; +reg int c; +reg int imask, omask; + + width = hbfBitmapBBox(hbf)->hbf_width; + row_size = HBF_RowSize(hbf); + bm_end = bitmap + HBF_BitmapSize(hbf); + (void)memset((char *)bitmap, '\0', HBF_BitmapSize(hbf)); + for (x = 0; x < width; x++) { + pos = bitmap + x/8; + omask = Bit(x%8); + /* y = 0 */ + for (;;) { + if ((c = getc(f)) == EOF) + return FALSE; + for (imask = Bit(0); imask != 0; imask >>= 1) { + /* + * At this point, + * + * imask == Bit(y%8) + * pos == bitmap + y*row_size + x/8 + * + * We examine bit y of row x of the input, + * setting bit x of row y of the output if + * required, by applying omask to *pos. + */ + if ((c & imask) != 0) + *pos |= omask; + /* if (++y > height) goto end_column */ + pos += row_size; + if (pos >= bm_end) + goto end_column; + } + } +end_column: + ; + } + return TRUE; +} +#endif /* ! IN_MEMORY */ + +/* + * Call function on each valid code in ascending order. + */ +void +hbfForEach(hbfFile, func) +reg HBF *hbfFile; +reg void (*func)_((HBF *sameHbfFile, HBF_CHAR code)); +{ + HBF_STRUCT *hbf; + CODE_RANGE *cp; +reg B2_RANGE *b2r; +reg unsigned byte1, byte2; +reg unsigned finish; + + hbf = (HBF_STRUCT *)hbfFile; + for (cp = hbf->code_range; cp != NULL; cp = cp->code_next) { + byte1 = FirstByte(cp->code_start); + byte2 = SecondByte(cp->code_start); + while (MakeCode(byte1, byte2) <= cp->code_finish) { + for (b2r = hbf->byte_2_range; + b2r != NULL; + b2r = b2r->b2r_next) { + if (byte2 < b2r->b2r_start) + byte2 = b2r->b2r_start; + finish = b2r->b2r_finish; + if (byte1 == FirstByte(cp->code_finish) && + finish > SecondByte(cp->code_finish)) + finish = SecondByte(cp->code_finish); + while (byte2 <= finish) { + (*func)(hbfFile, + MakeCode(byte1, byte2)); + byte2++; + } + } + byte1++; + byte2 = 0; + } + } +} + +const char * +hbfFileName(hbf) + HBF *hbf; +{ + return ((HBF_STRUCT *)hbf)->filename; +} + +long +hbfChars(hbfFile) + HBF *hbfFile; +{ + HBF_STRUCT *hbf; + CODE_RANGE *cp; + long num_chars; + + hbf = (HBF_STRUCT *)hbfFile; + num_chars = 0; + for (cp = hbf->code_range; cp != NULL; cp = cp->code_next) + num_chars += + hbf->b2_size*FirstByte(cp->code_finish) + + b2_pos(hbf, cp->code_finish) - + (hbf->b2_size*FirstByte(cp->code_start) + + b2_pos(hbf, cp->code_start)) + 1; + return num_chars; +} + +/* + * Functions also implemented as macros + */ + +#ifdef hbfBitmapBBox +#undef hbfBitmapBBox +#endif + +HBF_BBOX * +hbfBitmapBBox(hbf) + HBF *hbf; +{ + return &(hbf->hbf_bitmap_bbox); +} + +#ifdef hbfFontBBox +#undef hbfFontBBox +#endif + +HBF_BBOX * +hbfFontBBox(hbf) + HBF *hbf; +{ + return &(hbf->hbf_font_bbox); +} + +const void * +hbfGetByte2Range(hbfFile, b2r_pointer, startp, finishp) + HBF *hbfFile; + const void *b2r_pointer; + byte *startp; + byte *finishp; +{ + HBF_STRUCT *hbf; + B2_RANGE *b2r; + + hbf = (HBF_STRUCT *)hbfFile; + if (b2r_pointer == NULL) + b2r = hbf->byte_2_range; + else + b2r = ((B2_RANGE *)b2r_pointer)->b2r_next; + if(b2r == NULL) + return NULL; + *startp = b2r->b2r_start; + *finishp = b2r->b2r_finish; + return (void *)b2r; +} + +const void * +hbfGetCodeRange(hbfFile, code_pointer, startp, finishp) + HBF *hbfFile; + const void *code_pointer; + HBF_CHAR *startp; + HBF_CHAR *finishp; +{ + HBF_STRUCT *hbf; + CODE_RANGE *cp; + + hbf = (HBF_STRUCT *)hbfFile; + if (code_pointer == NULL) + cp = hbf->code_range; + else + cp = ((CODE_RANGE *)code_pointer)->code_next; + if(cp == NULL) + return NULL; + *startp = cp->code_start; + *finishp = cp->code_finish; + return (void *)cp; +} diff --git a/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/hbf.h b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/hbf.h new file mode 100644 index 00000000000..34f5940a71b --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/hbf.h @@ -0,0 +1,215 @@ +/* + * Copyright 1993,1994,1995,2005 by Ross Paterson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior written + * permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * + * Two interfaces to HBF files -- take your pick. + * + * Ross Paterson <ross@soi.city.ac.uk> + * + * Ross no longer maintains this code. Please send bug reports to + * Werner Lemberg <wl@gnu.org>. + * + */ +#ifndef _HBF_ +#define _HBF_ + +#ifndef __STDC__ +# ifndef const +# define const +# endif +#endif + +/* + * #1: a lightweight C interface. + */ + +typedef unsigned int HBF_CHAR; + +typedef struct { + unsigned short hbf_width; + unsigned short hbf_height; + short hbf_xDisplacement; + short hbf_yDisplacement; +} HBF_BBOX; + +typedef struct { + /* fields corresponding to the definition */ + HBF_BBOX hbf_bitmap_bbox; /* HBF_BITMAP_BOUNDING_BOX */ + HBF_BBOX hbf_font_bbox; /* FONTBOUNDINGBOX */ +} HBF; + +extern HBF *hbfOpen( +#ifdef __STDC__ + const char *filename +#endif + ); + +extern void hbfClose( +#ifdef __STDC__ + HBF *hbf +#endif + ); + +extern const char *hbfProperty( +#ifdef __STDC__ + HBF *hbf, + const char *propName +#endif + ); + +extern const unsigned char *hbfGetBitmap( +#ifdef __STDC__ + HBF *hbf, + HBF_CHAR code +#endif + ); + +extern void hbfForEach( +#ifdef __STDC__ + HBF *hbf, + void (*func)(HBF *sameHbf, HBF_CHAR code) +#endif + ); + +extern const char *hbfFileName( +#ifdef __STDC__ + HBF *hbf +#endif + ); + +extern long hbfChars( +#ifdef __STDC__ + HBF *hbf +#endif + ); + +extern HBF_BBOX *hbfBitmapBBox( +#ifdef __STDC__ + HBF *hbf +#endif + ); +/* but defined here as a macro */ +#define hbfBitmapBBox(hbf) (&((hbf)->hbf_bitmap_bbox)) + +extern HBF_BBOX *hbfFontBBox( +#ifdef __STDC__ + HBF *hbf +#endif + ); +/* but defined here as a macro */ +#define hbfFontBBox(hbf) (&((hbf)->hbf_font_bbox)) + +#define HBF_RowSize(hbf)\ + ((hbfBitmapBBox(hbf)->hbf_width + 7)/8) + +#define HBF_BitmapSize(hbf)\ + (HBF_RowSize(hbf) * hbfBitmapBBox(hbf)->hbf_height) + +#define HBF_GetBit(hbf,bitmap,x,y)\ + (((bitmap)[(y)*HBF_RowSize(hbf) + (x)/8]>>(7 - (x)%8))&01) + +extern int hbfDebug; /* set non-zero for error reporting */ + +extern const void *hbfGetCodeRange( +#ifdef __STDC__ + HBF *hbfFile, + const void *code_pointer, + HBF_CHAR *startp, + HBF_CHAR *finishp +#endif + ); + +extern const void *hbfGetByte2Range( +#ifdef __STDC__ + HBF *hbfFile, + const void *b2r_pointer, + unsigned char *startp, + unsigned char *finishp +#endif + ); + +/* + * #2: taken from Appendix 2 of the HBF draft. + */ + +typedef unsigned int HBF_HzCode; +typedef unsigned char HBF_Byte ; +typedef HBF_Byte * HBF_BytePtr ; +typedef HBF * HBF_Handle ; +typedef HBF_Handle * HBF_HandlePtr ; +typedef char * String ; + +extern int HBF_OpenFont( +#ifdef __STDC__ + const char * filename, + HBF_HandlePtr ptrHandleStorage +#endif +); + +extern int HBF_CloseFont( +#ifdef __STDC__ + HBF_Handle handle +#endif +); + +extern const char * HBF_GetProperty( +#ifdef __STDC__ + HBF_Handle handle, + const char * propertyName +#endif +); + +extern int HBF_GetFontBoundingBox( +#ifdef __STDC__ + HBF_Handle handle, + unsigned int *width, + unsigned int *height, + int *xDisplacement, + int *yDisplacement +#endif +); + +extern int HBF_GetBitmapBoundingBox( +#ifdef __STDC__ + HBF_Handle handle, + unsigned int *width, + unsigned int *height, + int *xDisplacement, + int *yDisplacement +#endif +); + +extern int HBF_GetBitmap( +#ifdef __STDC__ + HBF_Handle handle, + HBF_HzCode hanziCode, + HBF_BytePtr ptrBitmapBuffer +#endif +); + +#endif /* ! _HBF_ */ diff --git a/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/hbf2gf.1 b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/hbf2gf.1 new file mode 100644 index 00000000000..d3753164173 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/hbf2gf.1 @@ -0,0 +1,754 @@ +.\" man page for hbf2gf +.\" +.\" Copyright (C) 1994-2008 Werner Lemberg <wl@gnu.org> +.\" +.\" 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 in doc/COPYING; if not, write to the Free +.\" Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +.\" MA 02110-1301 USA +.\" +. +.TH HBF2GF 1 22-May-2008 "CJK Version 4.8.0" +.SH NAME +hbf2gf \- convert a CJK bitmap font into subfonts usable by TeX and Omega. +. +. +.SH SYNOPSIS +.na +.nh +.B hbf2gf +.RB [ \-q ] +.IR \%configuration-file [ .cfg ] +.br +.B hbf2gf +'in +\n(.ku +.RB [ \-q ] +.RB [ \-p ] +.RB [ \-g ] +.RB [ \-n ] +.I \%subfont-name \%x-resolution +.RI [ \%y-scale \ | \ \%y-resolution ] +.br +.in +.B hbf2gf +.B \-t +.RB [ \-q ] +.I \%subfont-name +.br +.B "hbf2gf \-\-version" +| +.B \-\-help +.ad +.hy +. +. +. +.\" ==== +.\" ==== macro definitions +.\" ==== +. +.\" here we define \TeX for troff and nroff +.if t .ds TX \fRT\h'-0.1667m'\v'0.20v'E\v'-0.20v'\h'-0.125m'X\fP +.if n .ds TX TeX +. +.\" and here the same for \LaTeX +.if t \{\ +.ie '\*(.T'dvi' \ +.ds LX \fRL\h'-0.36m'\v'-0.15v'\s-3A\s0\h'-0.15m'\v'0.15v'\fP\*(TX +.el .ds LX \fRL\h'-0.36m'\v'-0.22v'\s-2A\s0\h'-0.15m'\v'0.22v'\fP\*(TX +.\} +.if n .ds LX LaTeX +. +.\" \LaTeXe +.\" note that we need \vareps for TeX instead of \eps which can only be +.\" accessed with the \N escape sequence (in the Math Italic font) +.if t \{\ +.ie '\*(.T'dvi' .ds LE \*(LX\h'0.15m'2\v'0.20v'\f(MI\N'34'\fP\v'-0.20v' +.el .ds LE \*(LX\h'0.15m'2\v'0.20v'\(*e\v'-0.20v' +.\} +.if n .ds LE LaTeX\ 2e +. +.\" a definition for \Delta +.if t .ds DE \(*D +.if n .ds DE Delta_ +. +.\" a typewriter font +.if t \{\ +.de C +\fC\\$1\fP\\$2 +.. +.\} +.if n \{\ +.de C +\\$1\\$2 +.. +.\} +. +.\" an addition to .TP to allow two labels for the same item +.de TQ +.br +.ns +.TP +.. +. +.\" ==== +.\" ==== end of macro definitions +.\" ==== +. +. +. +.SH DESCRIPTION +CJK bitmap fonts can't be directly used with \*(TX +because the number of characters in such fonts exceeds\ 256, the limit of a +\*(TX +font. +Thus it is necessary to split these fonts into subfonts, and this is +exactly what +.B hbf2gf +does. +.PP +As the name says, +.B hbf2gf +uses CJK fonts in a certain format which is called +.B Hanzi Bitmap Font +.RB ( HBF ) +format. +It simply consists of the CJK bitmap file(s) and a text file in a format +very similar to the BDF format of the X\ Window System which describes the +bitmap font files: the encoding, the size, etc. +The produced +.C GF +files can then be converted with +.B gftopk +into standard +.C PK +files. +.PP +.B hbf2gf +can be called in three modes: +. +.PP +.in +2m +.B hbf2gf +.RB [ \-q ] +.IR configuration-file [ .cfg ] +.PP +.in +5m +This call normally creates a set of +.C GF +files, one +.C PL +file, and a batch file which must be executed after +.B hbf2gf +has finished. +This script will then call +.B gftopk +to convert all +.C GF +files into +.C PK +files, and it will call +.B pltotf +to convert the +.C PL +file into a +.C TFM +file. +Finally it will copy the +.C TFM +file so that each +.C PK +file has its +.C TFM +file (which are all identical). +.PP +.in +5m +If +.B ofm_file +is set to \(oqyes\(cq in the configuration file, +.C OFM +and +.C OVF +files will be created too. +. +.PP +.in +5m +.B \-q +makes +.B hbf2gf +quiet. +.PP +.in +2m +.na +.nh +.B hbf2gf +'in +\n(.ku +.RB [ \-q ] +.RB [ \-p ] +.RB [ \-g ] +.RB [ \-n ] +.I \%subfont-name \%x-resolution +.RI [ \%y-scale \ | \ \%y-resolution ] +.ad +.hy +.PP +.in +5m +This mode is intended for use with +.B \%mktexpk +and its derivates. +Only one +.C GF +file together with a +.C PL +file for the given subfont will be computed, taking the horizontal +resolution and a vertical scaling factor (if the value is smaller than\ 10) +resp. the vertical resolution (otherwise) from the command line, ignoring +the +.B nmb_fonts +parameter of the configuration file. +The last two characters (which are interpreted as the subfont number) are +stripped to get the name for the configuration file (which must end with +\(oq\c +.C \&.cfg \(cq). +No job file will be created. +If option +.B \-p +is set, no +.C PL +file is created. +If +.B \-g +is set, no +.C GF +file is created. +The extension can be controlled with +.BR \-n ; +if set, the extension is \(oq\c +.C \&.gf \(cq, +otherwise \(oq\c +.C \&. <\c +.IR resolution >\c +.C gf \(cq. +.B \-q +makes +.B hbf2gf +quiet. +. +.PP +.in +2m +.na +.nh +.B hbf2gf +'in +\n(.ku +.B \-t +.RB [ \-q ] +.I \%subfont-name +.ad +.hy +.PP +.in +5m +This mode is intended for use with scripts like +.BR \%mktexpk ; +it tests whether the specified subfont name leads to an +.B hbf2gf +configuration file. +It returns 0 on success and prints out the name of that configuration file +(provided the +.B \-q +switch isn't set). +This test isn't a thorough one; it only removes the last two characters +and checks whether a configuration file with that name exists. +.PP +See the next section for more details about configuration files. +.PP +Specifying the option +.B \-\-version +returns the current version of +.B hbf2gf +and the used file search library (e.g.\ \c +.BR kpathsea ). +Usage information is shown with the +.B \-\-help +parameter. +. +. +.SH "CONFIGURATION FILE" +Here a sample configuration file (\c +.C gsfs14.cfg ) +for a 56\(mu56 Chinese font in GB encoding; note that all information +about the font is in the +.C jfs56.hbf +file. +See the +.B "FILE SEARCHING" +section how HBF fonts and +.B hbf2gf +configuration files are found. +See the +.B AVAILABILITY +section where to get CJK fonts together with its +.C HBF +files: +.PP +.if t \fC +.nf + hbf_header jfs56.hbf + mag_x 1 + threshold 128 + comment jianti fansongti 56x56 pixel font + + design_size 14.4 + + y_offset \-13 + + nmb_files \-1 + + output_name gsfs14 + + checksum 123456789 + + dpi_x 300 + + pk_files no + tfm_files yes + + coding codingscheme GuoBiao encoded TeX text + + pk_directory $HBF_TARGET/pk/modeless/gb2312/gsfs14/ + tfm_directory $HBF_TARGET/tfm/gb2312/gsfs14/ +.fi +.if t \fP +.PP +A configuration file is a plain text file consisting of keywords and its +arguments. +A keyword must start a line, otherwise the whole line will be ignored. +If the word starting a line is not a keyword, the line will be ignored too. +Empty lines will also be skipped. +The search for keywords is case insensitive; in contrast, the arguments will +be taken exactly as given (except \(oqyes\(cq and \(oqno\(cq which can be written with +uppercase or lowercase letters). +Each keyword has one argument which must be separated by whitespace (blanks +or tabs) from the keyword and must be on the same line. +Each line must not be longer than 256 characters. +.PP +You can use environment variables in the configuration file. +The escape character starting an environment variable in the configuration +file is always \(oq\c +.C $ \(cq, +even for operating systems like DOS which has other conventions. +.B hbf2gf +recognizes only environment variable names which start with a letter or an +underscore, followed by alphanumeric characters or underscores. +You can surround the variable with braces to indicate where the variable +name ends, for example +.C ${FOO} . +To get a dollar sign you must write \(oq\c +.C $$ \(cq. +The expansion of environment variables in hbf2gf itself (without the help of +either kpathsea, emtexdir, or MiKTeX searching routines) is very limited; +this feature has been carried over from previous versions. +It can't expand variables set in texmf.cnf; it also can't handle more than +one directory as the variable's value. +.B Don't use it except for the \(oqpk_directory\(cq and \(oqtfm_directory\(cq +.B parameters! +.PP +This is the list of all necessary keywords: +.TP +.B hbf_header +The HBF header file name of the input font(s). +.B hbf2gf +uses the given searching mechanism (kpathsea, emtexdir, or MiKTeX) to locate +this file. +.TP +.B output_name +The name stem of the output files. +A running two digit decimal number starting with \(oq\c +.C 01 \(cq +will be appended. +For Unicode fonts see the keyword +.B unicode +below. +This value is in almost all cases identical to the name of the configuration +file. +.PP +And now all optional keywords: +.TP +.B x_offset +Increases the character width. +Will be applied on both sides; default for non-rotated glyphs is the value +given in the HBF header +.RB ( HBF_BITMAP_BOUNDING_BOX ) +scaled to +.B design_size +(in pixels). +.TP +.B y_offset +Shifts all characters up or down; default for non-rotated glyphs is the value +given in the HBF header +.RB ( HBF_BITMAP_BOUNDING_BOX ) +scaled to +.B design_size +(in pixels). +.TP +.B design_size +The design size (in points) of the font. +.B x_offset +and +.B y_offset +refer to this size. +Default is\ 10.0. +.TP +.B slant +The slant of the font (given as \*(DEx\ /\ \*(DEy). +Only values in the range 0\ \(<=\ \fBslant\fP\ \(<=\ 1 are allowed. +Default is\ 0.0. +.TP +.B rotation +If set to \(oqyes\(cq, all glyphs will be rotated 90\ degrees counter-clockwise. +The default offsets as given in the HBF header will be ignored (and set +to\ 0). +Default is \(oqno\(cq. +.TP +.B mag_x +.TQ +.B mag_y +Scaling values of the characters to reach design size. +If only one magnification is given, x and y values are assumed to be equal. +Default is \fBmag_x\fP\ =\ \fBmag_y\fP\ =\ 1.0. +.PP +.TP +.B threshold +A value between 1 and\ 254 defining a threshold for converting the internal +graymap into the output bitmap; lower values cut more pixels. +Default value is\ 128. +.PP +.TP +.B comment +A comment describing the font; default is none. +.PP +.TP +.B nmb_fonts +The number of subfonts to create. +Default value is \-1 for creating all fonts. +.TP +.B unicode +If \(oqyes\(cq, a two digit hexadecimal number will be used as a running number, +starting with the value of the first byte of the first code range. +Default is \(oqno\(cq. +.TP +.B min_char +The minimum value of the encoding. +You should set this value to get correct subfile offsets if it is not +identical to the lowest character code in the HBF file. +.PP +.TP +.B dpi_x +.TQ +.B dpi_y +The horizontal and vertical resolution (in dpi) of the printer. +If only one resolution is given, x and y values are assumed to be equal. +Default is\ 300. +.TP +.B checksum +A checksum to identify the +.C GF +files with the appropriate +.C TFM +files. +The default value of this unsigned 32bit integer is\ 0. +.TP +.B coding +A comment describing the coding scheme; default is none. +.PP +.TP +.B pk_directory +The destination directory of the +.C PK +files; default: none. +Attention! +The batch file will not check whether this directory exists. +.TP +.B tfm_directory +The destination directory of the +.C TFM +files; default: none. +Attention! +The batch file will not check whether this directory exists. +.TP +.B pk_files +Whether to create +.C PK +files or not; default is \(oqyes\(cq. +.TP +.B tfm_files +Whether to create +.C TFM +files or not; default is \(oqyes\(cq. +.TP +.B ofm_file +Whether to create an +.C OPL +file or not; default is \(oqno\(cq. +The batch file will then use +.B ovp2ovf +of the Omega distribution to convert it into an +.C OFM +and an +.C OVF +file. +The +.C OPL +file simply maps all subfonts back to a single Omega font. +.TP +.B long_extension +If \(oqyes\(cq, +.C PK +files will include the resolution in the extension (e.g. +.C gsso1201.300pk ). +This affects the batch file only (default is \(oqyes\(cq). +.TP +.B rm_command +The shell command to remove files; default: \(oqrm\(cq. +.TP +.B cp_command +The shell command to copy files; default: \(oqcp\(cq. +.TP +.B job_extension +The extension of the batch file which calls +.B gftopk +and +.B pltotf +to convert the +.C GF +and the +.C PL +files into +.C PK +and +.C TFM +files respectively; default is none. +. +. +.SH "FILE SEARCHING" +.B hbf2gf +uses either the +.BR kpathsea , +.BR emtexdir , +or +.B MiKTeX +library for searching files +.RB ( emtexdir +will work only on operating systems which have an MS-DOSish background, +i.e., MS-DOS, OS/2, Windows; +.B MiKTeX +is for Win32 systems). +. +.SS kpathsea +Please note that older versions of +.B kpathsea +(<3.2) have no special means to seach for program related files. +Additionally, versions older than 3.3 have no default path for miscellaneous +fonts, thus we use the paths for PostScript related stuff if necessary for +fonts resp. configuration files. +The actual version of kpathsea is displayed on screen if you call +.B hbf2gf +.BR \-\-version . +.PP +Here is a table of the file type and the corresponding +.B kpathsea +variables. +.PP +Version\ 3.3 and newer (this won't change again in the future!): +.PP +.in +4m +.ta 2i +.br +.C "\&.hbf MISCFONTS" +.br +.C "\&.cfg HBF2GFINPUTS" +.PP +Version\ 3.2: +.PP +.in +4m +.ta 2i +.br +.C "\&.hbf T1FONTS" +.br +.C "\&.cfg HBF2GFINPUTS" +.PP +And here the same for pre-3.2-versions of +.B kpathsea: +.PP +.in +4m +.ta 2i +.br +.C "\&.hbf T1FONTS" +.br +.C "\&.cfg TEXCONFIG" +.PP +Finally, the same for versions\ \(<=2.6: +.PP +.in +4m +.ta 2i +.br +.C "\&.hbf DVIPSHEADERS" +.br +.C "\&.cfg TEXCONFIG" +.PP +Please consult the info files of +.B kpathsea +for details on these variables. +The decision which naming scheme to use for variables will be done during +compilation. +.PP +You should set the +.C TEXMFCNF +variable to the directory where your +.C texmf.cnf +configuration file resides. +.PP +Here is the proper command to find out to which value a +.B kpathsea +variable is set (we use +.C MISCFONTS +as an example). +This is especially useful if a variable isn't set in +.C texmf.cnf +or in the environment, thus pointing to the default value which is +hard-coded into the +.B kpathsea +library. +.PP +.in +2m +.C "kpsewhich \-progname=hbf2gf \-expand\-var='$MISCFONTS'" +.PP +We select the program name also since it is possible to specify +variables which are searched only for a certain program \(en in our +example it would be +.C MISCFONTS.hbf2gf . +.PP +A similar but not identical method is to say +.PP +.in +2m +.C "kpsewhich \-progname=hbf2gf \-show\-path='misc fonts'" +.PP +[A full list of format types can be obtained by saying \(oq\c +.C "kpsewhich \-\-help" \(cq +on the command line prompt.] +This is exactly the how +.B hbf2gf +searches for files; the disadvantage is that all variables are expanded +which can cause very long strings. +. +.SS emtexdir +.PP +Here the list of suffixes and its related environment variables to be set in +.C autoexec.bat +(resp. in +.C config.sys +for OS/2): +.PP +.in +4m +.ta 2i +.br +.C "\&.hbf HBFONTS" +.br +.C "\&.cfg HBFCFG" +.PP +If one of the variables isn't set, a warning message is emitted. +The current directory will always be searched. +As usual, one exclamation mark appended to a directory path causes +subdirectories one level deep to be searched, two exclamation marks causes +all subdirectories to be searched. +Example: +.PP +.in +2m +.C HBFONTS=c:\\\\fonts\\\\hbf!!;d:\\\\myfonts\\\\hbf! +.PP +Constructions like \(oq\c +.C c:\\\\fonts!!\\\\hbf \(cq +aren't possible. +. +.SS MikTeX +.PP +Please consult the documentation files of +.B MiKTeX +for more details. +. +. +.SH LIMITATIONS +The x and y output size must not exceed +.BR MAX_CHAR_SIZE , +which is defined at compile time; its default value is 1023\ (pixel). +. +. +.SH "SEE ALSO" +.BR ttf2pk (1) +.PP +.C hbf2gf.w : +'in +\n(.ku +this is the source code written in +.B CWEB +which can be converted into a pretty-printed \*(TX +document using +.BR cweave . +The CJK package also contains a preformatted +.C hbf2gf.dvi +file. +.PP +the +.B CJK +documentation files (\c +.C hbf2gf.txt ). +.PP +the +.B Hanzi Bitmap File +.RB ( HBF ) +standard version\ 1.3; available at +.C ftp.ifcss.org +.PP +the Omega documentation available at +.C ftp.ens.fr +and the CTAN hosts and mirrors. +. +. +.SH FILES +.TP +.C *.cfg +The +.B hbf2gf +configuration scripts +.TP +.C *.hbf +HBF header files which describe fixed-width bitmap fonts. +Note that the bitmap font name(s) themselves as specified in the header files +are irrelevant for +.BR hbf2gf . +. +. +.SH AVAILABILITY +.B hbf2gf +is part of the CJK macro package for \*(LE +available at the CTAN hosts and its mirrors. +.PP +CJK fonts together with HBF header files can be found at +.C ftp.ifcss.org +and its mirrors. +. +. +.SH AUTHORS +Werner Lemberg +.C <wl@gnu.org> +.br +Ross Paterson (the HBF API) +.C <ross@soi.city.ac.uk> diff --git a/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/hbf2gf.c b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/hbf2gf.c new file mode 100644 index 00000000000..fd72d284ff3 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/hbf2gf.c @@ -0,0 +1,2302 @@ +#define banner \ +"hbf2gf (CJK ver. 4.8.0)" \ + \ + +#define TRUE 1 +#define FALSE 0 \ + +#define STRING_LENGTH 255 \ + +#define FILE_NAME_LENGTH 1024 \ + \ + +#define VERSION \ +"\n" \ +"Copyright (C) 1996-1999 Werner Lemberg.\n" \ +"There is NO warranty. You may redistribute this software\n" \ +"under the terms of the GNU General Public License\n" \ +"and the HBF library copyright.\n" \ +"\n" \ +"For more information about these matters, see the files\n" \ +"named COPYING and hbf.c.\n" \ +"\n" \ + +#define USAGE \ +"\n" \ +"Usage: hbf2gf [-q] configuration_file[.cfg]\n" \ +" hbf2gf [options] font_name x_resolution [y_scale | y_resolution]\n" \ +" hbf2gf -t [-q] font_name\n" \ +"\n" \ +" Convert a font in HBF format to TeX's GF resp. PK format.\n" \ +"\n" \ +" -q be silent\n" \ +" -p don't produce a PL file\n" \ +" -g don't produce a GF file\n" \ +" -n use no resolution in extension (only `.gf')\n" \ +" -t test for font_name (returns 0 on success)\n" \ +" --help print this message and exit\n" \ +" --version print version number and exit\n" \ +"\n" \ + +#define GF_ID 131 +#define PRE 247 \ + +#define header " hbf2gf output " \ + +#define BOC 67 +#define BOC1 68 +#define EOC 69 \ + +#define _2_16 65536.0 +#define _2_20 1048576.0 \ + +#define XXX1 239 +#define XXX2 240 +#define XXX3 241 +#define XXX4 242 \ + +#define YYY 243 \ + +#define POST 248 \ + +#define CHAR_LOC 245 +#define CHAR_LOC0 246 \ + +#define POSTPOST 249 +#define POSTPOST_ID 223 \ + +#define BLACK 1 +#define WHITE 0 \ + +#define PIXEL_MAXVAL 255 +#define SCALE 4096 +#define HALFSCALE 2048 \ + +#define MAX_CHAR_SIZE 1023 \ + +#define PAINT_(x) (x) +#define PAINT1 64 +#define PAINT2 65 +#define PAINT3 66 \ + +#define SKIP0 70 +#define SKIP1 71 +#define SKIP2 72 +#define SKIP3 73 \ + +#define NEW_ROW_(x) ((x) +74) \ + +#define NOOP 244 \ + +#define EXTENSION_LENGTH 8 \ + +#define GFTOPK_NAME "gftopk" +#define PLTOTF_NAME "pltotf" +#define OVP2OVF_NAME "ovp2ovf" \ + +#define PRINTER_MIN_RES_X 50 +#define PRINTER_MIN_RES_Y 50 \ + +#define VALID_SUBCODE 1 \ + +/*4:*/ +#line 193 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +/*10:*/ +#line 413 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +#include <ctype.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <time.h> +#ifdef TM_IN_SYS_TIME +#include <sys/time.h> +#endif +#include "hbf.h" + + + +/*:10*//*69:*/ +#line 2483 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +#if defined(HAVE_LIBKPATHSEA) +#ifdef VERY_OLD_KPATHSEA +#include "kpathsea/proginit.h" +#include "kpathsea/progname.h" +#include "kpathsea/tex-glyph.h" +#else +#include "kpathsea/kpathsea.h" +#endif + +#elif defined(HAVE_EMTEXDIR) +#include "emtexdir.h" + +#elif defined(HAVE_MIKTEX) +#include "miktex.h" +#endif + +/*:69*/ +#line 194 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +/*11:*/ +#line 431 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +void write_file(void); + + +/*:11*//*13:*/ +#line 493 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +void write_pre(void); + + +/*:13*//*16:*/ +#line 581 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +void write_data(void); + + +/*:16*//*20:*/ +#line 692 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +void write_post(void); + + +/*:20*//*25:*/ +#line 836 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +void fputl(long,FILE*); + + +/*:25*//*29:*/ +#line 999 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +void make_pixel_array(void); + + +/*:29*//*36:*/ +#line 1227 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +#ifdef __GNUC__ +__inline__ +#endif +void read_row(unsigned char*); + + +/*:36*//*39:*/ +#line 1279 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +#ifdef __GNUC__ +__inline__ +#endif +void write_row(unsigned char*); + + +/*:39*//*41:*/ +#line 1334 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +void write_coding(void); + + +/*:41*//*45:*/ +#line 1495 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +void write_pl(void); + + +/*:45*//*47:*/ +#line 1592 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +void write_ovp(void); + + +/*:47*//*50:*/ +#line 1737 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +void write_job(void); + + +/*:50*//*54:*/ +#line 1986 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +void read_config(void); + + +/*:54*//*64:*/ +#line 2317 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +int fsearch(char*); + + +/*:64*//*67:*/ +#line 2457 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +void config_error(char*); + + +/*:67*//*71:*/ +#line 2517 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +char*TeX_search_version(void); + + +/*:71*//*74:*/ +#line 2552 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +#ifdef HAVE_EMTEXDIR +extern int setup_list(struct emtex_dir*,char*,const char*,unsigned); +int dir_setup(struct emtex_dir*,const char*,const char*,unsigned); +char*file_find(char*,struct emtex_dir*); +#endif + + +/*:74*//*79:*/ +#line 2649 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +char*TeX_search_cfg_file(char*); +char*TeX_search_hbf_file(char*); + + +/*:79*/ +#line 195 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +/*2:*/ +#line 129 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +int nmb_files= -1; +int unicode= FALSE; + +int testing= FALSE; + +int mf_like= FALSE; +int file_number= 0; + +double x_resolution= 0.0; +double y_scale= 1.0; + +int pk_files= TRUE; +int tfm_files= TRUE; +int long_extension= TRUE; +int quiet= FALSE; + +char config_file[FILE_NAME_LENGTH+4+1]; + +char output_name[STRING_LENGTH+1]; + +FILE*config,*out; +HBF*hbf; + +#ifdef msdos +#define WRITE_BIN "wb" +#define WRITE_TXT "wt" +#define READ_BIN "rb" +#define READ_TXT "rt" +#else +#define WRITE_BIN "w" +#define WRITE_TXT "w" +#define READ_BIN "r" +#define READ_TXT "r" +#endif + +int end_of_file= FALSE; + + +/*:2*//*15:*/ +#line 540 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +long char_adr[256]; +long*char_adr_p; + +int pk_offset_x; + + +double tfm_offset_x; +int pk_offset_y; + +double tfm_offset_y; + +int input_size_x; +int input_size_y; +const char*font_encoding; +int pk_width; +int pk_output_size_x; + +double tfm_output_size_x; +int pk_output_size_y; +double tfm_output_size_y; + +double design_size= 10.0; +double target_size_x; +double target_size_y; +double magstep_x; +double magstep_y; +double slant; +int rotation; + +double mag_x; +double mag_y; + +int empty_char; +int last_char; + +int dot_count; + + + +/*:15*//*19:*/ +#line 669 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +char coding[STRING_LENGTH+1]; +char comment[STRING_LENGTH+1]; + +unsigned long checksum; + +long pk_total_min_x; +long pk_total_max_x; +long pk_total_min_y; +long pk_total_max_y; + +int dpi_x; +int dpi_y; +double ppp_x; +double ppp_y; + + +/*:19*//*27:*/ +#line 876 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +HBF_CHAR code; +const unsigned char*bitmap; + +unsigned char*bP; + +unsigned char out_char[MAX_CHAR_SIZE*MAX_CHAR_SIZE+1]; + +unsigned char*out_char_p; + +unsigned char pixelrow[MAX_CHAR_SIZE]; +unsigned char temp_pixelrow[MAX_CHAR_SIZE]; +unsigned char new_pixelrow[MAX_CHAR_SIZE+1]; + +int curr_row; + +long grayrow[MAX_CHAR_SIZE]; + +long s_mag_x,s_mag_y,s_slant; + + +/*:27*//*38:*/ +#line 1274 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +int threshold= 128; + + +/*:38*//*49:*/ +#line 1726 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +char job_extension[EXTENSION_LENGTH+1]; +char rm_command[STRING_LENGTH+1]; +char cp_command[STRING_LENGTH+1]; +char pk_directory[STRING_LENGTH+1]; +char tfm_directory[STRING_LENGTH+1]; + +int ofm_file= FALSE; + + +/*:49*//*53:*/ +#line 1981 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +char Buffer[STRING_LENGTH+1]; + + +/*:53*//*58:*/ +#line 2099 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +int offset_x; +int offset_y; + +HBF_CHAR user_min_char; +int have_min_char= FALSE; + +/*:58*//*60:*/ +#line 2256 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +HBF_CHAR min_char,max_char; + + +/*:60*//*62:*/ +#line 2283 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +char b2_codes[256]; +unsigned char min_2_byte,max_2_byte; +int nmb_2_bytes= 0; + + +/*:62*//*70:*/ +#line 2501 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +#if defined(HAVE_LIBKPATHSEA) +#ifdef KPSEDLL + +extern KPSEDLL char*kpathsea_version_string; +#else +extern DllImport char*kpathsea_version_string; +#endif +#elif defined(HAVE_EMTEXDIR) +char emtex_version_string[]= "emTeXdir"; +#elif !defined(HAVE_MIKTEX) +char no_version_string[]= "no search library"; +#endif + + +/*:70*//*73:*/ +#line 2545 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +#ifdef HAVE_EMTEXDIR +struct emtex_dir cfg_path,hbf_path; +#endif + + +/*:73*//*76:*/ +#line 2591 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +char name_buffer[FILE_NAME_LENGTH+1]; + + +/*:76*/ +#line 196 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + + + +int main(argc,argv) +int argc; +char*argv[]; + +{char*p; + +/*78:*/ +#line 2613 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +#if defined(HAVE_LIBKPATHSEA) +#ifdef OLD_KPATHSEA +kpse_set_progname(argv[0]); +#else +kpse_set_program_name(argv[0],"hbf2gf"); +#endif + +#ifdef VERY_OLD_KPATHSEA +kpse_init_prog("HBF2GF",300,"cx",true,"cmr10"); +#else +kpse_init_prog("HBF2GF",300,"cx","cmr10"); +#endif + +#elif defined(HAVE_EMTEXDIR) +if(!dir_setup(&cfg_path,"HBFCFG",NULL,EDS_BANG)) +{fprintf(stderr, +"Couldn't setup search path for configuration files\n"); +exit(1); +} +if(!dir_setup(&hbf_path,"HBFONTS",NULL,EDS_BANG)) +{fprintf(stderr, +"Couldn't setup search path for HBF header files\n"); +exit(1); +} +#endif + + +/*:78*/ +#line 205 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + + +/*7:*/ +#line 312 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +if(argc==2) +{if(strcmp(argv[1],"--help")==0) +/*6:*/ +#line 293 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +{printf(USAGE); +exit(0); +} + + +/*:6*/ +#line 315 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +else if(strcmp(argv[1],"--version")==0) +/*5:*/ +#line 266 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +{printf("\n"); +printf(banner); +printf(" (%s)\n",TeX_search_version()); +printf(VERSION); +exit(0); +} + + +/*:5*/ +#line 317 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +} + +while(argc> 1) +{p= argv[1]; +if(p[0]!='-') +break; +if(p[1]=='p') +tfm_files= FALSE; +else if(p[1]=='g') +pk_files= FALSE; +else if(p[1]=='n') +long_extension= FALSE; +else if(p[1]=='q') +quiet= TRUE; +else if(p[1]=='t') +testing= TRUE; + +argv++; +argc--; +} + +if(testing) +{if(argc!=2) +{fprintf(stderr,"Need exactly one parameter for `-t' option.\n"); +fprintf(stderr,"Try `hbf2gf --help' for more information.\n"); +exit(1); +} +} +else if(argc<2||argc> 4) +{fprintf(stderr,"Invalid number of parameters.\n"); +fprintf(stderr,"Try `hbf2gf --help' for more information.\n"); +exit(1); +} + + +/*:7*/ +#line 207 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + + +if(!quiet) +printf("\n%s\n\n",banner); + +strncpy(config_file,argv[1],FILE_NAME_LENGTH); +config_file[FILE_NAME_LENGTH]= '\0'; + +if(argc> 2||testing) +{int l= strlen(config_file); + +if(l> 2) +config_file[l-2]= '\0'; + +else +{if(!quiet) +printf("`%s' can't be a subfont created by hbf2gf\n", +config_file); +exit(2); +} + +mf_like= TRUE; +} + +read_config(); + +if(mf_like) +/*8:*/ +#line 357 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +{if(unicode) +file_number= (int)strtol(&argv[1][strlen(argv[1])-2], +(char**)NULL,16); +else +file_number= atoi(&argv[1][strlen(argv[1])-2]); + +x_resolution= atof(argv[2]); +if(x_resolution<PRINTER_MIN_RES_X) +{fprintf(stderr,"Invalid horizontal resolution\n"); +exit(1); +} + +if(argc> 3) +{y_scale= atof(argv[3]); +if(y_scale<0.01) +{fprintf(stderr, +"Invalid vertical scaling factor or resolution\n"); +exit(1); +} +if(y_scale> 10.0) +y_scale= (double)x_resolution/y_scale; +} +} + + +/*:8*/ +#line 234 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + + +/*28:*/ +#line 908 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +{int col,offset; + +if(rotation) +{int tmp; + + +tmp= input_size_x; +input_size_x= input_size_y; +input_size_y= tmp; +} + +if(mf_like) +{target_size_x= design_size*(x_resolution/dpi_x); +target_size_y= design_size*(x_resolution*y_scale/dpi_y); +} +else +target_size_x= target_size_y= design_size; +magstep_x= target_size_x/design_size; +magstep_y= target_size_y/design_size; + +pk_offset_x= offset_x*magstep_x+0.5; +pk_offset_y= offset_y*magstep_y+0.5; +tfm_offset_x= offset_x/(dpi_x/72.27)/design_size; +tfm_offset_y= offset_y/(dpi_y/72.27)/design_size; + +pk_width= input_size_x*mag_x*magstep_x+0.5; +pk_output_size_x= input_size_x*mag_x*magstep_x+ +input_size_y*mag_y*magstep_y*slant+0.5; +pk_output_size_y= input_size_y*mag_y*magstep_y+0.5; +tfm_output_size_x= input_size_x*mag_x/ +(dpi_x/72.27)/design_size; +tfm_output_size_y= input_size_y*mag_y/ +(dpi_y/72.27)/design_size; +if(pk_output_size_x> MAX_CHAR_SIZE) +{fprintf(stderr,"Output character box width too big\n"); +exit(1); +} +if(pk_output_size_y> MAX_CHAR_SIZE) +{fprintf(stderr,"Output character box height too big\n"); +exit(1); +} + +for(col= 0;col<input_size_x;++col) +grayrow[col]= HALFSCALE; + +if(!mf_like) +code= (min_char&0xFF00)+min_2_byte; +else +{if((file_number<(unicode?0:1))||(file_number>=0x100)) +{fprintf(stderr,"Invalid subfile number\n"); +exit(1); +} + +if(unicode) +{offset= 0; +code= file_number*0x100; +} +else +{offset= (file_number-1)*256%nmb_2_bytes; +code= (min_char&0xFF00)+min_2_byte+ +(file_number-1)*256/nmb_2_bytes*0x100; +} + +while(offset--) +while(!b2_codes[code++&0xFF]) + +; + +if(code> max_char) +{fprintf(stderr,"Invalid subfile number\n"); +exit(1); +} +} + +s_mag_x= mag_x*magstep_x*SCALE; +s_mag_y= mag_y*magstep_y*SCALE; +s_slant= slant*SCALE; +} + + +/*:28*/ +#line 236 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + + +/*9:*/ +#line 392 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +{int j,max_numb; + +if(!mf_like) +{file_number= (unicode==TRUE?(min_char>>8):1); +if(nmb_files==-1) +max_numb= (unicode==TRUE?0x100:100); +else +max_numb= nmb_files; +} +else +max_numb= 1; + +for(j= 0;(j<max_numb)&&!end_of_file;file_number++,j++) +write_file(); + +nmb_files= j; +} + + +/*:9*/ +#line 238 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + + +if(tfm_files) +write_pl(); +if(ofm_file) +write_ovp(); +if(!mf_like) +write_job(); + +hbfClose(hbf); + +exit(0); +return 0; +} + + +/*:4*//*12:*/ +#line 439 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +void write_file(void) +{char output_file[FILE_NAME_LENGTH+1]; + + +if(pk_files) +{if(mf_like) +{if(unicode) +sprintf(output_file,"%s%02x.%.0igf", +output_name,file_number, +long_extension?(int)(x_resolution+0.5):0); +else +sprintf(output_file,"%s%02i.%.0igf", +output_name,file_number, +long_extension?(int)(x_resolution+0.5):0); +} +else +{if(unicode) +sprintf(output_file,"%s%02x.gf",output_name,file_number); +else +sprintf(output_file,"%s%02i.gf",output_name,file_number); +} +if(!(out= fopen(output_file,WRITE_BIN))) +{fprintf(stderr,"Couldn't open `%s'\n",output_file); +exit(1); +} +if(!quiet) +printf("Writing `%s' ",output_file); + +write_pre(); +write_data(); +write_post(); +fclose(out); + +if(!quiet) +printf("\n"); +} +else +write_data(); +} + + +/*:12*//*14:*/ +#line 500 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +void write_pre(void) +{char out_s[40],s[20]; +time_t secs_now; +struct tm*time_now; + + +strcpy(out_s,header); + +secs_now= time(NULL); +time_now= localtime(&secs_now); +strftime(s,20,"%Y.%m.%d:%H.%M",time_now); +strcat(out_s,s); + +fputc(PRE,out); +fputc(GF_ID,out); +fputc(strlen(out_s),out); +fputs(out_s,out); +} + + +/*:14*//*17:*/ +#line 586 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +void write_data(void) +{dot_count= 0; +char_adr_p= char_adr; + +for(last_char= 0;(last_char<256)&&!end_of_file;last_char++) +/*18:*/ +#line 611 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +{if(dot_count++%10==0) +if(pk_files&&!quiet) +{printf("."); +fflush(stdout); +} + +empty_char= FALSE; +make_pixel_array(); +if(end_of_file) +return; + +if(pk_files) +{*char_adr_p= ftell(out); +char_adr_p++; + +if(empty_char) +{fputc(BOC1,out); +fputc((unsigned char)last_char,out); +fputc(0,out); +fputc(0,out); +fputc(0,out); +fputc(0,out); +fputc(EOC,out); +} +else +{fputc(BOC,out); +fputl(last_char,out); +fputl(-1L,out); +fputl(pk_offset_x,out); +fputl(pk_output_size_x+pk_offset_x,out); +fputl(pk_offset_y,out); +fputl(pk_output_size_y+pk_offset_y,out); + +write_coding(); + +fputc(EOC,out); +} +} +} + + +/*:18*/ +#line 592 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +} + + +/*:17*//*21:*/ +#line 697 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +void write_post(void) +{long special_adr; +long post_adr; + +long designsize= design_size*_2_20; + +int pk_dx; +long tfm_width; + +int i; +long temp; + + +ppp_x= dpi_x/72.27*magstep_x; +ppp_y= dpi_y/72.27*magstep_y; + +pk_total_min_x= pk_offset_x; +pk_total_max_x= pk_output_size_x+2*pk_offset_x; +pk_total_min_y= pk_offset_y; +pk_total_max_y= pk_output_size_y+pk_offset_y; + +pk_dx= pk_width+2*pk_offset_x; +tfm_width= (tfm_output_size_x+2*tfm_offset_x)*_2_20; + + +/*22:*/ +#line 743 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +special_adr= ftell(out); + +if(*coding) +{fputc(XXX1,out); +fputc(strlen(coding),out); +fputs(coding,out); +} + +if(*comment) +{fputc(XXX1,out); +fputc(strlen(comment),out); +fputs(comment,out); +} + + +/*:22*/ +#line 723 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +/*23:*/ +#line 772 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +post_adr= ftell(out); +fputc(POST,out); +fputl(special_adr,out); + +fputl(designsize,out); +fputl(checksum,out); +fputl(ppp_x*_2_16,out); +fputl(ppp_y*_2_16,out); +fputl(pk_total_min_x,out); +fputl(pk_total_max_x,out); +fputl(pk_total_min_y,out); +fputl(pk_total_max_y,out); + +char_adr_p= char_adr; + +if(pk_dx<256) +{for(i= 0;i<last_char;i++) +{fputc(CHAR_LOC0,out); +fputc(i,out); +fputc(pk_dx,out); +fputl(tfm_width,out); +fputl(*char_adr_p++,out); +} +} +else +{for(i= 0;i<last_char;i++) +{fputc(CHAR_LOC,out); +fputc(i,out); +fputl(pk_dx*_2_16,out); +fputl(0,out); +fputl(tfm_width,out); +fputl(*char_adr_p++,out); +} +} + + +/*:23*/ +#line 724 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +/*24:*/ +#line 823 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +fputc(POSTPOST,out); +fputl(post_adr,out); +fputc(GF_ID,out); +temp= ftell(out); +i= (int)(temp%4)+4; +while(i--) +fputc(POSTPOST_ID,out); + + +/*:24*/ +#line 725 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +} + + +/*:21*//*26:*/ +#line 841 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +void fputl(num,f) +long num; +FILE*f; + +{fputc(num>>24,f); +fputc(num>>16,f); +fputc(num>>8,f); +fputc(num,f); +} + + +/*:26*//*30:*/ +#line 1004 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +void make_pixel_array(void) +{unsigned char*prP; +unsigned char*temp_prP; +unsigned char*new_prP; +long*grP; + +register unsigned char*xP; +register unsigned char*nxP; + +register int row,col; +int rows_read= 0; +register int need_to_read_row= 1; + +long frac_row_to_fill= SCALE; +long frac_row_left= s_mag_y; + +int no_code= FALSE; + + +prP= pixelrow; +temp_prP= temp_pixelrow; +new_prP= new_pixelrow; +grP= grayrow; +out_char_p= out_char; + +again: +if(b2_codes[code&0xFF]) +{if(pk_files) +{bitmap= hbfGetBitmap(hbf,code); +bP= (unsigned char*)bitmap; + + +if(!bitmap) +empty_char= TRUE; +else +/*31:*/ +#line 1063 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +{if(pk_output_size_y==input_size_y) +temp_prP= prP; + +curr_row= input_size_y-1; +for(row= 0;row<pk_output_size_y;++row) +{/*32:*/ +#line 1077 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +if(pk_output_size_y==input_size_y) + +read_row(prP); +else +{while(frac_row_left<frac_row_to_fill) +{if(need_to_read_row) +if(rows_read<input_size_y) +{read_row(prP); +++rows_read; +} + +for(col= 0,xP= prP;col<input_size_x;++col,++xP) +grP[col]+= frac_row_left*(*xP); + +frac_row_to_fill-= frac_row_left; +frac_row_left= s_mag_y; +need_to_read_row= 1; +} + +/*33:*/ +#line 1104 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +if(need_to_read_row) +if(rows_read<input_size_y) +{read_row(prP); +++rows_read; +need_to_read_row= 0; +} + +for(col= 0,xP= prP,nxP= temp_prP; +col<input_size_x;++col,++xP,++nxP) +{register long g; + + +g= grP[col]+frac_row_to_fill*(*xP); +g/= SCALE; +if(g> PIXEL_MAXVAL) +g= PIXEL_MAXVAL; + +*nxP= g; +grP[col]= HALFSCALE; +} + +frac_row_left-= frac_row_to_fill; +if(frac_row_left==0) +{frac_row_left= s_mag_y; +need_to_read_row= 1; +} +frac_row_to_fill= SCALE; + + +/*:33*/ +#line 1097 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +} + + +/*:32*/ +#line 1069 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +/*34:*/ +#line 1145 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +if(pk_width==input_size_x&&s_slant==0) + +write_row(temp_prP); +else +{register long g= HALFSCALE; +register long frac_col_to_fill= SCALE; +register long frac_col_left; +register int need_col= 0; + + +nxP= new_prP; + +frac_col_left= (pk_output_size_y-row)*s_slant; +while(frac_col_left>=frac_col_to_fill) +{*(nxP++)= 0; +frac_col_left-= frac_col_to_fill; +} + +if(frac_col_left> 0) +frac_col_to_fill-= frac_col_left; + +for(col= 0,xP= temp_prP;col<input_size_x;++col,++xP) +{frac_col_left= s_mag_x; +while(frac_col_left>=frac_col_to_fill) +{if(need_col) +{++nxP; +g= HALFSCALE; +} + +g+= frac_col_to_fill*(*xP); +g/= SCALE; +if(g> PIXEL_MAXVAL) +g= PIXEL_MAXVAL; + +*nxP= g; +frac_col_left-= frac_col_to_fill; +frac_col_to_fill= SCALE; +need_col= 1; +} + +if(frac_col_left> 0) +{if(need_col) +{++nxP; +g= HALFSCALE; +need_col= 0; +} + +g+= frac_col_left*(*xP); +frac_col_to_fill-= frac_col_left; +} +} + +/*35:*/ +#line 1203 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +if(frac_col_to_fill> 0) +{--xP; +g+= frac_col_to_fill*(*xP); +} + +if(!need_col) +{g/= SCALE; +if(g> PIXEL_MAXVAL) +g= PIXEL_MAXVAL; +*nxP= g; +} + +*(++nxP)= 0; + +write_row(new_prP); + + +/*:35*/ +#line 1198 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +} + + +/*:34*/ +#line 1071 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +} +} + + +/*:31*/ +#line 1040 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +} +} +else +no_code= TRUE; + +if((code&0xFF)==max_2_byte) +code+= 0xFF-(max_2_byte-min_2_byte); +if(code>=max_char) +{end_of_file= TRUE; +return; +} + +code++; + +if(no_code) +{no_code= FALSE; +goto again; +} +} + + +/*:30*//*37:*/ +#line 1235 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +#ifdef __GNUC__ +__inline__ +#endif +void read_row(pixelrow) +unsigned char*pixelrow; + +{register int col,bitshift,offset; +register unsigned char*xP; +register unsigned char item= 0; + +if(rotation) +{bitshift= 7-(curr_row%8); +offset= (input_size_y+7)/8; +bP= (unsigned char*)bitmap+curr_row/8; +for(col= 0,xP= pixelrow;col<input_size_x;++col,++xP) +{*xP= ((*bP>>bitshift)&1)==1?PIXEL_MAXVAL:0; +bP+= offset; +} +curr_row--; +} +else +{bitshift= -1; +for(col= 0,xP= pixelrow;col<input_size_x;++col,++xP) +{if(bitshift==-1) +{item= *(bP++); +bitshift= 7; +} +*xP= ((item>>bitshift)&1)==1?PIXEL_MAXVAL:0; +--bitshift; +} +} +} + + +/*:37*//*40:*/ +#line 1287 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +#ifdef __GNUC__ +__inline__ +#endif +void write_row(pixelrow) +unsigned char*pixelrow; + +{register int col; +register unsigned char*xP; + +for(col= 0,xP= pixelrow;col<pk_output_size_x;++col,++xP) +*(out_char_p++)= (*xP>=threshold)?1:0; + +} + + +/*:40*//*42:*/ +#line 1342 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +void write_coding(void) +{register int count,skip; +register unsigned char paint; +register int x,y; +register unsigned char*cp; + +x= 0; +y= 0; +cp= out_char+y*pk_output_size_x+x; +count= skip= 0; +paint= WHITE; +goto start; + +while(y<pk_output_size_y) +{/*43:*/ +#line 1366 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +count= 0; +x= 0; +cp= out_char+y*pk_output_size_x+x; + +while(x<pk_output_size_x) +{if(*cp==paint) +count++; +else +{if(skip==0) +{if(count<=164) +fputc(NEW_ROW_(count),out); +else +{fputc(SKIP0,out); + +if(count<256) +{fputc(PAINT1,out); +fputc(count,out); +} +else +{fputc(PAINT2,out); +fputc(count>>8,out); +fputc(count&0xFF,out); +} +} +} +else +{if(skip==1) +fputc(SKIP0,out); +else +{if(skip<256) +{fputc(SKIP1,out); +fputc(skip,out); +} +else +{fputc(SKIP2,out); +fputc(skip>>8,out); +fputc(skip&0xFF,out); +} +} +skip= 0; +if(count<64) +fputc(PAINT_(count),out); +else if(count<256) +{fputc(PAINT1,out); +fputc(count,out); +} +else +{fputc(PAINT2,out); +fputc(count>>8,out); +fputc(count&0xFF,out); +} +} +count= 0; +paint= BLACK; +break; +} +x++; +cp++; +} +if(x>=pk_output_size_x) +{skip++; +y++; +continue; +} + + +/*:43*/ +#line 1357 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +start: +/*44:*/ +#line 1434 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +while(x<pk_output_size_x) +{if(*cp==paint) +count++; +else +{if(count<64) +fputc(PAINT_(count),out); +else if(count<256) +{fputc(PAINT1,out); +fputc(count,out); +} +else +{fputc(PAINT2,out); +fputc(count>>8,out); +fputc(count&0xFF,out); +} +count= 1; +paint= BLACK-paint; +} +x++; +cp++; +} +if(paint==BLACK) +{if(count<64) +fputc(PAINT_(count),out); +else if(count<256) +{fputc(PAINT1,out); +fputc(count,out); +} +else +{fputc(PAINT2,out); +fputc(count>>8,out); +fputc(count&0xFF,out); +} +paint= WHITE; +} + + + +/*:44*/ +#line 1359 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +y++; +} +} + + +/*:42*//*46:*/ +#line 1500 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +void write_pl(void) +{int i,pos; +char output_file[FILE_NAME_LENGTH+1]; +long t,sc; +char*s; +char tfm_header[]= "Created by hbf2gf"; + +file_number--; + +if(mf_like) +{if(unicode) +sprintf(output_file,"%s%02x.pl",output_name,file_number); +else +sprintf(output_file,"%s%02i.pl",output_name,file_number); +} +else +sprintf(output_file,"%s.pl",output_name); + +if(!(out= fopen(output_file,WRITE_TXT))) +{fprintf(stderr,"Couldn't open `%s'\n",output_file); +exit(1); +} +if(!quiet) +printf("\nWriting `%s'\n",output_file); + +fprintf(out, +"\n(FAMILY %s%d)" +"\n(CODINGSCHEME CJK-%s)", +output_name,file_number,font_encoding); + +fprintf(out, +"\n(DESIGNSIZE R %.6f)" +"\n(COMMENT DESIGNSIZE IS IN POINTS)" +"\n(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)" +"\n(CHECKSUM O %lo)" +"\n(FONTDIMEN" +"\n (SLANT R %.6f)" +"\n (SPACE R 0.0)" +"\n (STRETCH R 0.0)" +"\n (SHRINK R 0.0)" +"\n (XHEIGHT R 1.0)" +"\n (QUAD R 1.0)" +"\n (EXTRASPACE R 0.0)" +"\n )",design_size,checksum,slant); + +s= tfm_header; +i= strlen(s); +t= ((long)i)<<24; +sc= 16; +pos= 18; + +fprintf(out,"\n"); +while(i> 0) +{t|= ((long)(*(unsigned char*)s++))<<sc; +sc-= 8; +if(sc<0) +{fprintf(out,"\n(HEADER D %d O %lo)",pos,t); +t= 0; +sc= 24; +pos++; +} +i--; +} +if(t) +fprintf(out,"\n(HEADER D %d O %lo)",pos,t); +fprintf(out,"\n"); + +for(i= 0;i<256;i++) +{fprintf(out, +"\n(CHARACTER O %o" +"\n (CHARWD R %.6f)" +"\n (CHARHT R %.6f)" +"\n (CHARDP R %.6f)" +"\n (CHARIC R %.6f)" +"\n )", +i, +tfm_output_size_x+2*tfm_offset_x, +tfm_output_size_y+tfm_offset_y, +-tfm_offset_y, +slant*(tfm_output_size_y+tfm_offset_y)); +} + +fclose(out); +} + + + +/*:46*//*48:*/ +#line 1597 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +void write_ovp(void) +{int c,i,nmb_subfonts,remainder,count,pos; +char output_file[FILE_NAME_LENGTH+1]; +long t,sc; +char*s; +char ofm_header[]= "Created by hbf2gf"; + +nmb_subfonts= ((max_char-(min_char&0xFF00))/256*nmb_2_bytes) +/256+1; +remainder= ((max_char-(min_char&0xFF00))/256*nmb_2_bytes) +%256; + + +for(count= 0;count<(max_char&0xFF);count++) +if(b2_codes[count]) +remainder++; +if(remainder>=256) +nmb_subfonts++; + +sprintf(output_file,"%s.ovp",output_name); + +if(!(out= fopen(output_file,WRITE_TXT))) +{fprintf(stderr,"Couldn't open `%s'\n",output_file); +exit(1); +} +if(!quiet) +printf("\nWriting `%s'\n",output_file); + +fprintf(out, +"\n(VTITLE Omega virtual font created by hbf2gf)" +"\n(DESIGNSIZE R %.6f)" +"\n(COMMENT DESIGNSIZE IS IN POINTS)" +"\n(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)" +"\n(CHECKSUM O %lo)" +"\n(FONTDIMEN" +"\n (SLANT R %.6f)" +"\n (SPACE R 0.0)" +"\n (STRETCH R 0.0)" +"\n (SHRINK R 0.0)" +"\n (XHEIGHT R 1.0)" +"\n (QUAD R 1.0)" +"\n (EXTRASPACE R 0.0)" +"\n )",design_size,checksum,slant); + +s= ofm_header; +i= strlen(s); +t= ((long)i)<<24; +sc= 16; +pos= 18; + +fprintf(out,"\n"); +while(i> 0) +{t|= ((long)(*(unsigned char*)s++))<<sc; +sc-= 8; +if(sc<0) +{fprintf(out,"\n(HEADER D %d O %lo)",pos,t); +t= 0; +sc= 24; +pos++; +} +i--; +} +if(t) +fprintf(out,"\n(HEADER D %d O %lo)",pos,t); +fprintf(out,"\n"); + +for(i= 0;i<nmb_subfonts;i++) +{fprintf(out, +"\n(MAPFONT D %i" +"\n (FONTNAME %s%02i)" +"\n (FONTCHECKSUM O %lo)" +"\n (FONTAT R 1.0)" +"\n (FONTDSIZE R %.6f)" +"\n )",i,output_name,i+1,checksum,design_size); +} + +for(c= min_char,i= 0,count= 0;c<=max_char;c++) +{if(b2_codes[c&0xFF]==VALID_SUBCODE) +{fprintf(out, +"\n(CHARACTER O %o" +"\n (CHARWD R %.6f)" +"\n (CHARHT R %.6f)" +"\n (CHARDP R %.6f)" +"\n (CHARIC R %.6f)" +"\n (MAP" +"\n (SELECTFONT D %i)" +"\n (SETCHAR O %o)" +"\n )" +"\n )", +c, +tfm_output_size_x+2*tfm_offset_x, +tfm_output_size_y+tfm_offset_y, +-tfm_offset_y, +slant*(tfm_output_size_y+tfm_offset_y), +i, +count); + +count++; +if(count==256) +{count= 0; +i++; +} +} +else +continue; +} + +fclose(out); +} + + + +/*:48*//*51:*/ +#line 1742 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +void write_job(void) +{FILE*out; +int i,j; +char buffer[FILE_NAME_LENGTH+1]; + + +strcpy(buffer,output_name); +strcat(buffer,job_extension); +if(!(out= fopen(buffer,WRITE_TXT))) +{fprintf(stderr,"Couldn't open `%s'\n",buffer); +exit(1); +} +if(!quiet) +printf("\nWriting `%s'\n",buffer); + +if(pk_files) +{if(unicode) +{for(i= (min_char>>8),j= 0;j<nmb_files;i++,j++) +fprintf(out, +"%s %s%02x.gf %s%s%02x.%.0ipk\n" +"%s %s%02x.gf\n", +GFTOPK_NAME,output_name,i, +pk_directory,output_name,i, +long_extension?(int)(dpi_x*magstep_x+0.5):0, +rm_command,output_name,i); +} +else +{for(i= 1;i<=nmb_files;i++) +fprintf(out, +"%s %s%02i.gf %s%s%02i.%.0ipk\n" +"%s %s%02i.gf\n", +GFTOPK_NAME,output_name,i, +pk_directory,output_name,i, +long_extension?(int)(dpi_x*magstep_x+0.5):0, +rm_command,output_name,i); +} +} + +if(tfm_files) +{fprintf(out, +"\n" +"%s %s.pl %s.tfm\n" +"%s %s.pl\n" +"\n", +PLTOTF_NAME,output_name,output_name, +rm_command,output_name); + +if(unicode) +{for(i= (min_char>>8),j= 0;j<nmb_files;i++,j++) +fprintf(out, +"%s %s.tfm %s%s%02x.tfm\n", +cp_command,output_name, +tfm_directory,output_name,i); +} +else +{for(i= 1;i<=nmb_files;i++) +fprintf(out, +"%s %s.tfm %s%s%02i.tfm\n", +cp_command,output_name, +tfm_directory,output_name,i); +} + +fprintf(out, +"\n" +"%s %s.tfm", +rm_command,output_name); +} + +if(ofm_file) +{fprintf(out, +"\n" +"%s %s.ovp %s.ovf %s.ofm\n" +"%s %s.ovp\n" +"\n", +OVP2OVF_NAME,output_name,output_name,output_name, +rm_command,output_name); +} + +fclose(out); +} + + + +/*:51*//*55:*/ +#line 1994 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +void read_config(void) +{HBF_BBOX*boxp; +char*real_config_file; + + +/*56:*/ +#line 2046 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +{int i,lastext= -1; + +for(i= 0;config_file[i];i++) +if(config_file[i]=='.') +lastext= i; +else if(config_file[i]=='/'|| +config_file[i]==':'|| +config_file[i]=='\\') +lastext= -1; + +if(lastext==-1) +strcat(config_file,".cfg"); +} + + +/*:56*/ +#line 2000 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + + +real_config_file= TeX_search_cfg_file(config_file); +if(!real_config_file) +{if(mf_like) +{if(!quiet) +printf("Couldn't find `%s'\n",config_file); +exit(2); +} +else +{fprintf(stderr,"Couldn't find `%s'\n",config_file); +exit(1); +} +} + +if(!(config= fopen(real_config_file,READ_TXT))) +{if(!testing) +{fprintf(stderr,"Couldn't open `%s'\n",config_file); +exit(1); +} +else +{if(!quiet) +fprintf(stderr,"Couldn't find or open `%s'\n",config_file); +exit(2); +} +} + +if(testing) +{if(!quiet) +printf("%s\n",real_config_file); +exit(0); +} + +/*57:*/ +#line 2063 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +{char hbf_header[STRING_LENGTH+1]; +char*real_hbf_header; + +if(!fsearch("hbf_header")) +config_error("hbf_header"); +else +strcpy(hbf_header,Buffer); + +real_hbf_header= TeX_search_hbf_file(hbf_header); +if(!real_hbf_header) +{fprintf(stderr,"Couldn't find `%s'\n",hbf_header); +exit(1); +} + +hbfDebug= 1; + + +if(!(hbf= hbfOpen(real_hbf_header))) +exit(1); + +hbfDebug= 0; + +boxp= hbfBitmapBBox(hbf); +input_size_x= boxp->hbf_height; +input_size_y= boxp->hbf_width; +font_encoding= hbfProperty(hbf,"HBF_CODE_SCHEME"); + +if(!fsearch("output_name")) +config_error("output_name"); +else +strcpy(output_name,Buffer); +} + + +/*:57*/ +#line 2033 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +/*59:*/ +#line 2107 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +{if(fsearch("nmb_files")) +nmb_files= atoi(Buffer); +if(fsearch("unicode")) +if(Buffer[0]=='y'||Buffer[0]=='Y') +unicode= TRUE; +if(fsearch("min_char")) +{user_min_char= strtoul(Buffer,(char**)NULL,0); +have_min_char= TRUE; +} + +if(!mf_like) +{if(fsearch("pk_files")) +if(Buffer[0]=='n'||Buffer[0]=='N') +pk_files= FALSE; +if(fsearch("tfm_files")) +if(Buffer[0]=='n'||Buffer[0]=='N') +tfm_files= FALSE; +if(fsearch("ofm_file")) +if(Buffer[0]=='y'||Buffer[0]=='Y') +ofm_file= TRUE; +if(fsearch("long_extension")) +if(Buffer[0]=='n'||Buffer[0]=='N') +long_extension= FALSE; +} + +if(fsearch("slant")) +slant= atof(Buffer); +if(slant<0.0||slant> 1.0) +{fprintf(stderr,"Invalid slant\n"); +exit(1); +} +if(fsearch("rotation")) +if(Buffer[0]=='y'||Buffer[0]=='Y') +rotation= TRUE; + +if(fsearch("mag_x")) +mag_x= atof(Buffer); +if(fsearch("mag_y")) +mag_y= atof(Buffer); +if(!mag_x&&!mag_y) +{mag_x= 1.0; +mag_y= 1.0; +} +if(mag_x&&!mag_y) +mag_y= mag_x; +if(mag_y&&!mag_x) +mag_x= mag_y; +if(mag_x<=0.0) +{fprintf(stderr,"Invalid horizontal magnification\n"); +exit(1); +} +if(mag_y<=0.0) +{fprintf(stderr,"Invalid vertical magnification\n"); +exit(1); +} + +if(fsearch("dpi_x")) +dpi_x= atoi(Buffer); +if(fsearch("dpi_y")) +dpi_y= atoi(Buffer); +if(!dpi_x&&!dpi_y) +{dpi_x= 300; +dpi_y= 300; +} +if(dpi_x&&!dpi_y) +dpi_y= dpi_x; +if(dpi_y&&!dpi_x) +dpi_x= dpi_y; +if(dpi_x<=PRINTER_MIN_RES_X) +{fprintf(stderr,"Invalid horizontal printer resolution\n"); +exit(1); +} +if(dpi_y<=PRINTER_MIN_RES_Y) +{fprintf(stderr,"Invalid vertical printer resolution\n"); +exit(1); +} + +if(fsearch("design_size")) +design_size= atof(Buffer); + +if(fsearch("x_offset")) +offset_x= atoi(Buffer); +else +offset_x= rotation?0:(boxp->hbf_xDisplacement*mag_x+0.5); +if(fsearch("y_offset")) +offset_y= atoi(Buffer); +else +offset_y= rotation?0:(boxp->hbf_yDisplacement*mag_y+0.5); +if(!fsearch("comment")) +comment[0]= '\0'; +else +strcpy(comment,Buffer); + +if(fsearch("threshold")) +threshold= atoi(Buffer); +if(threshold<=0||threshold>=255) +{fprintf(stderr,"Invalid threshold\n"); +exit(1); +} + +if(!fsearch("checksum")) +checksum= 0; +else +checksum= strtoul(Buffer,(char**)NULL,0); + +if(!fsearch("coding")) +coding[0]= '\0'; +else +strcpy(coding,Buffer); + +if(!fsearch("pk_directory")) +pk_directory[0]= '\0'; +else +strcpy(pk_directory,Buffer); + +if(!fsearch("tfm_directory")) +tfm_directory[0]= '\0'; +else +strcpy(tfm_directory,Buffer); + +if(fsearch("rm_command")) +strcpy(rm_command,Buffer); +else +strcpy(rm_command,"rm"); + +if(fsearch("cp_command")) +strcpy(cp_command,Buffer); +else +strcpy(cp_command,"cp"); + +if(!fsearch("job_extension")) +job_extension[0]= '\0'; +else +{strncpy(job_extension,Buffer,EXTENSION_LENGTH); +job_extension[EXTENSION_LENGTH]= '\0'; +} +} + + +/*:59*/ +#line 2034 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + + +/*61:*/ +#line 2261 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +{const void*cp; +HBF_CHAR dummy; + +cp= hbfGetCodeRange(hbf,NULL,&min_char,&max_char); +for(;cp!=NULL;cp= hbfGetCodeRange(hbf,cp,&dummy,&max_char)) +; + +if(have_min_char) +min_char= user_min_char; +} + + +/*:61*/ +#line 2036 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +/*63:*/ +#line 2290 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +{const void*b2r; +unsigned char dummy; +int i; + +for(i= 0;i<256;i++) +b2_codes[i]= 0; + +b2r= hbfGetByte2Range(hbf,NULL,&min_2_byte,&max_2_byte); +dummy= min_2_byte; +for(;b2r!=NULL;b2r= hbfGetByte2Range(hbf,b2r,&dummy,&max_2_byte)) +{for(i= dummy;i<=max_2_byte;i++) +b2_codes[i]= VALID_SUBCODE; +} + +for(i= 0;i<256;i++) +if(b2_codes[i]==VALID_SUBCODE) +nmb_2_bytes++; +} + + +/*:63*/ +#line 2037 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + + +fclose(config); +} + + +/*:55*//*65:*/ +#line 2322 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +int fsearch(search_string) +char*search_string; + +{char*P,p; +char temp_buffer[STRING_LENGTH+1]; +char env_name[STRING_LENGTH+1]; +char*env_p; +char*env_value; +char*Buf_p; +int Ch,ch,old_ch= '\n'; +int count= STRING_LENGTH; + +rewind(config); + +do +{P= search_string; +p= tolower(*P); +Ch= fgetc(config); +ch= tolower(Ch); +while(!(ch==p&&old_ch=='\n')&&Ch!=EOF) + + +{old_ch= ch; +Ch= fgetc(config); +ch= tolower(Ch); +} + +for(;;) +{if(*(++P)=='\0') +if((Ch= fgetc(config))==' '||Ch=='\t') + +goto success; +Ch= fgetc(config); +if(tolower(Ch)!=tolower(*P)) +break; +} +} +while(Ch!=EOF); + +return 0; + +success: +P= temp_buffer; + +while((Ch= fgetc(config))==' '||Ch=='\t') + +; +while(Ch!='\n'&&--count> 0&&Ch!=EOF) +{*P++= Ch; +Ch= fgetc(config); +} +*P= '\0'; + +if(*temp_buffer) +/*66:*/ +#line 2402 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +{P= temp_buffer; +Buf_p= Buffer; +count= STRING_LENGTH-1; + +while(*P&&count> 0) +{env_p= env_name; + +if(*P=='$') +{P++; +if(*P=='$') +{*(Buf_p++)= *(P++); +count--; +continue; +} +while(*P=='{') +P++; +if(!(isalpha(*P)||*P=='_')) +{fprintf(stderr, +"Invalid environment variable name in configuration file\n"); +exit(1); +} +*(env_p++)= *(P++); +while(*P) +{if(isalnum(*P)||*P=='_') +*(env_p++)= *(P++); +else +{while(*P=='}') +P++; +*env_p= '\0'; +break; +} +} + +env_value= getenv(env_name); +if(env_value) +{while(*env_value&&count> 0) +{*(Buf_p++)= *(env_value++); +count--; +} +} +} +else +{*(Buf_p++)= *(P++); +count--; +} +} +*Buf_p= '\0'; +} + + +/*:66*/ +#line 2377 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +else +*Buffer= '\0'; + +return(*Buffer)?1:0; +} + + +/*:65*//*68:*/ +#line 2462 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +void config_error(message) +char*message; + +{fprintf(stderr,"Couldn't find `%s' entry in configuration file\n", +message); +exit(1); +} + + + +/*:68*//*72:*/ +#line 2522 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +char*TeX_search_version(void) +{ +#if defined(HAVE_LIBKPATHSEA) +return kpathsea_version_string; +#elif defined(HAVE_EMTEXDIR) +return emtex_version_string; +#elif defined(HAVE_MIKTEX) +char buf[200]; + +strcpy(buf,"MiKTeX "); +miktex_get_miktex_version_string_ex(buf+7,sizeof(buf)-7); + +return buf; +#else +return no_version_string; +#endif +} + + +/*:72*//*75:*/ +#line 2564 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +#ifdef HAVE_EMTEXDIR +int dir_setup(ed,env,dir,flags) +struct emtex_dir*ed; +const char*env; +const char*dir; +unsigned flags; + +{const char*val; +char path[260]; + +ed->alloc= 0; +ed->used= 0; +ed->list= NULL; + +if(env!=NULL&&(val= getenv(env))!=NULL) +return setup_list(ed,path,val,flags); +else +fprintf(stderr, +"Environment variable `%s' not set; use current directory\n", +env); + +return TRUE; +} + + +/*:75*//*77:*/ +#line 2596 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +char*file_find(name,list) +char*name; +struct emtex_dir*list; + +{if(emtex_dir_find(name_buffer,sizeof(name_buffer),list,name,EDF_CWD)) +return name_buffer; + +return NULL; +} +#endif + + +/*:77*//*80:*/ +#line 2655 "/home/wl/git/cjk/cjk-4.8.0/utils/hbf2gf/hbf2gf.w" + +#if defined(HAVE_LIBKPATHSEA) +char*TeX_search_cfg_file(name) +char*name; + +{ +#ifdef OLD_KPATHSEA +return kpse_find_file(name,kpse_dvips_config_format,TRUE); +#else +return kpse_find_file(name,kpse_program_text_format,TRUE); +#endif +} + + +char*TeX_search_hbf_file(name) +char*name; + +{ +#ifdef VERY_OLD_KPATHSEA +return kpse_find_file(name,kpse_dvips_header_format,TRUE); +#else +#ifndef KPSEDLL +return kpse_find_file(name,kpse_type1_format,TRUE); +#else +return kpse_find_file(name,kpse_miscfonts_format,TRUE); +#endif +#endif +} + + +#elif defined(HAVE_EMTEXDIR) +char*TeX_search_cfg_file(name) +char*name; + +{return file_find(name,&cfg_path); +} + + +char*TeX_search_hbf_file(name) +char*name; + +{return file_find(name,&hbf_path); +} + + +#elif defined(HAVE_MIKTEX) +char*TeX_search_cfg_file(name) +char*name; + +{char result[_MAX_PATH]; + +if(!miktex_find_input_file("hbf2gf",*name,result)) +return 0; +return strdup(result); +} + + +char*TeX_search_hbf_file(name) +char*name; + +{char result[_MAX_PATH]; + + +if(!miktex_find_miscfont_file(*name,result)) +return 0; +return strdup(result); +} + + +#else +char*TeX_search_cfg_file(name) +char*name; + +{return name; +} + + +char*TeX_search_hbf_file(name) +char*name; + +{return name; +} +#endif + + + +/*:80*/ diff --git a/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/hbf2gf.def b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/hbf2gf.def new file mode 100644 index 00000000000..21236cd42ad --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/hbf2gf.def @@ -0,0 +1,3 @@ +NAME HBF2GF WINDOWCOMPAT +DESCRIPTION 'hbf2gf (CJK Ver. 4.8.0)' +STACKSIZE 0x80000 diff --git a/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/hbf2gf.w b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/hbf2gf.w new file mode 100644 index 00000000000..b703caa5ebb --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/hbf2gf.w @@ -0,0 +1,2872 @@ +% This is the cweb file hbf2gf.w of the CJK package ver. 4.8.0 22-May-2008 + +% Copyright (C) 1994-2008 Werner Lemberg <wl@@gnu.org> +% +% 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 in doc/COPYING; if not, write to the Free +% Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +% MA 02110-1301 USA + +% To print this CWEB file you should (but not must) use the CWEAVE of the +% c2cweb-package (found at the CTAN archives, e.g. ftp.dante.de) and then say +% +% cweave +ai hbf2gf.w +% +% This (fully compatible) CWEAVE can transform CWEB-files with alternative +% output rules (look at the position of braces below!) the author (it's me +% too :-) prefer. Otherwise this file will be formatted traditionally. + +\font\meta=logo10 +\def\mf{{\meta META}\-{\meta FONT}} +\def\Om{\char "0A} % Omega symbol + +\def\title{hbf2gf (CJK Version 4.8.0)} + +\def\topofcontents{ + \null\vfill + \centerline{\titlefont The {\ttitlefont hbf2gf} program} + \vskip 20pt + \centerline{(CJK Version 4.8.0)} + \vfill} + +\def\botofcontents{ + \vfill + \noindent + Copyright \copyright~1996-1999 by Werner Lemberg + \bigskip\noindent + Permission is granted to make and distribute verbatim copies of this + document provided that the copyright notice and this permission notice are + preserved on all copies. + + \smallskip\noindent + Permission is granted to copy and distribute modified versions of this + document under the conditions for verbatim copying, provided that the + entire resulting derived work is distributed under the terms of a + permission notice identical to this one.} + +\pageno=\contentspagenumber \advance\pageno by 1 +\let\maybe=\iftrue +\fullpageheight=240mm +\pageheight=223mm +\pagewidth=158mm +\setpage +\frenchspacing + + +\def\msdos{\.{msdos}} +@s msdos TeX + +@s HBF int +@s HBF_CHAR int +@s HBF_BBOX int + +@s __inline__ int +@s DllImport int +@s KPSEDLL int + + +@* Introduction. +This is the \.{hbf2gf} program by Werner Lemberg +(\.{wl@@gnu.org}). + +The ``banner line'' defined here should be changed whenever \.{hbf2gf} is +modified. + +@d banner +"hbf2gf (CJK ver. 4.8.0)" + + +@ +\.{hbf2gf} is intended to convert Hanzi Bitmap Fonts (HBF) into \TeX\ +generic font files (\.{GF} files) according to the \\{CJK} package, which +\.{hbf2gf} is part of. + +The outline of \.{hbf2gf} is simple: a CJK (Chinese/Japanese/Korean) bitmap +file will be scaled and written in at most |nmb_files| \.{GF} files, each +file containing |256|~characters (except the last and possibly the first +one). In the normal case it's not necessary to compute the right value of +|nmb_files| because \.{hbf2gf} will do this; you should use |-1| instead to +indicate this. See the last section for an example. + +Alternatively you can call \.{hbf2gf} similar to \mf, i.e., the program will +compute one font on demand. This mode will be used if two or three input +parameters instead of one are given: the font name, the horizontal +resolution, and optionally a vertical scaling factor or resolution to allow +modes for e.g.\ $300\times600\,\hbox{dpi}$ printers. \.{hbf2gf} will extract +the configuration file name from the font name; if this file isn't found, +the program exits with error code~|2| (this is useful for scripts like +\.{mktexpk}). If the configuration file is found but an error occurs while +computing the font, error code~|1| is returned. In case of success, the exit +code is zero. + +The characters in the input font files are completely described by the HBF +header file. This program uses the HBF API implementation of Ross Paterson +(\.{ross@@soi.city.ac.uk}; with small extensions). You will find a +description of the HBF standard at \.{ftp.ifcss.org}. + +A batch file created by \.{hbf2gf} too (if the program computes a whole set +of subfonts) will convert the \.{GF} files to \.{PK} files using +\.{GFtoPK}, a part of every \TeX\ package. + +@d TRUE 1 +@d FALSE 0@# + +@d STRING_LENGTH 255 + /* the maximal length of an input string in the configuration file */ +@d FILE_NAME_LENGTH 1024 + /* the maximal length (including the path) of a filename */@# + +@<Global variables@>= +int nmb_files = -1; /* create all files by default */ +int unicode = FALSE; /* whether a Unicode font should be processed */@# + +int testing = FALSE; /* whether we test only the font name */@# + +int mf_like = FALSE; /* whether we are in the \mf-like mode */ +int file_number = 0; /* the subfont number */@# + +double x_resolution = 0.0; /* the second and third input parameter */ +double y_scale = 1.0;@# + +int pk_files = TRUE; /* command line options */ +int tfm_files = TRUE; +int long_extension = TRUE; +int quiet = FALSE;@# + +char config_file[FILE_NAME_LENGTH + 4 + 1]; + /* we probably must add `\.{.cfg}' */ +char output_name[STRING_LENGTH + 1];@# + +FILE *config, *out; +HBF *hbf;@# + +#ifdef msdos /* if we compile under DOS or OS/2 */ +#define WRITE_BIN "wb" +#define WRITE_TXT "wt" +#define READ_BIN "rb" +#define READ_TXT "rt" +#else +#define WRITE_BIN "w" +#define WRITE_TXT "w" +#define READ_BIN "r" +#define READ_TXT "r" +#endif@# + +int end_of_file = FALSE; + + +@ +One \.{PL} file will be created additionally, which describes the font +metrics in a readable way. Because all CJK characters have identical +bounding boxes, one metrics file is enough---the batch job created by +\.{hbf2gf} calls \.{PLtoTF} to produce this \.{TFM} file and then copies +it into |nmb_files| metrics files. There usually will be a discrepancy +between the number of characters in the last \.{GF} file and the +\.{TFM} file, but this does not harm. + +If you specify the \.{ofm\_file} option in the configuration file, an +extended virtual property file (such files have the extension \.{.ovp}) for +the \Om\ system is written; this will be then converted with +\.{ovp2ovf} into an \.{OFM} and an \.{OVF} file to map all the subfonts +into one large virtual font. + + + +@* The main routine. +The main routine takes |file_name|, |x_resolution|, and |y_scale| as command +line parameters if in \mf-like mode, otherwise |config_file| as the only +argument. |read_config()| scans the configuration file and fills the global +variables, |write_file()| writes the \.{GF} files, |write_pl()| and +|write_ovp()| write the \.{PL} and \.{OVP} files respectively, and +|write_job()| the batch file. + +@c +@<Include files@>@; +@<Prototypes@>@; +@<Global variables@>@;@# + + +int main(argc, argv) + int argc; /* argument count */ + char *argv[]; /* argument values */ + + {char *p; + + @<Initialize \TeX\ file searching@>@;@# + + @<Scan options@>@;@# + + if(!quiet) + printf("\n%s\n\n", banner);@# + + strncpy(config_file, argv[1], FILE_NAME_LENGTH); + config_file[FILE_NAME_LENGTH] = '\0';@# + + if(argc > 2 || testing) + {int l = strlen(config_file); + + if(l > 2) + config_file[l - 2] = '\0'; + /* strip subfont number from file name */ + else + {if(!quiet) + printf("`%s' can't be a subfont created by hbf2gf\n", + config_file); + exit(2); + }@# + + mf_like = TRUE; + }@# + + read_config(); /* will call |exit(1)| on errors */@# + + if(mf_like) + @<Check other arguments@>@;@# + + @<Initialize variables@>@;@# + + @<Write files@>@;@# + + if(tfm_files) + write_pl(); + if(ofm_file) + write_ovp(); + if(!mf_like) + write_job();@# + + hbfClose(hbf);@# + + exit(0); + return 0; /* never reached */ + } + + +@ +@d VERSION @/ +"\n"@/ +"Copyright (C) 1996-1999 Werner Lemberg.\n"@/ +"There is NO warranty. You may redistribute this software\n"@/ +"under the terms of the GNU General Public License\n"@/ +"and the HBF library copyright.\n"@/ +"\n"@/ +"For more information about these matters, see the files\n"@/ +"named COPYING and hbf.c.\n"@/ +"\n" + +@<Print version@>= + {printf("\n"); + printf(banner); + printf(" (%s)\n", TeX_search_version()); + printf(VERSION); + exit(0); + } + + +@ +@d USAGE @/ +"\n"@/ +"Usage: hbf2gf [-q] configuration_file[.cfg]\n"@/ +" hbf2gf [options] font_name x_resolution [y_scale | y_resolution]\n"@/ +" hbf2gf -t [-q] font_name\n"@/ +"\n"@/ +" Convert a font in HBF format to TeX's GF resp. PK format.\n"@/ +"\n"@/ +" -q be silent\n"@/ +" -p don't produce a PL file\n"@/ +" -g don't produce a GF file\n"@/ +" -n use no resolution in extension (only `.gf')\n"@/ +" -t test for font_name (returns 0 on success)\n"@/ +" --help print this message and exit\n"@/ +" --version print version number and exit\n"@/ +"\n" + +@<Print help information@>= + {printf(USAGE); + exit(0); + } + + +@ +Three options can be specified to the program (\.{-p}, \.{-g}, and \.{-n}) +if in \mf-like mode to suppress creation of a \.{PL} resp.\ a +\.{GF} file, and to force a `\.{.gf}' extension (instead of +e.g.\ `\.{.300gf}'). The corresponding setting of a particular switch in the +configuration file is ignored then. + +Additionally, the option \.{-t} tests whether the specified subfont name +leads to an \.{hbf2gf} configuration file. It returns 0 on success and prints +out the name of that configuration file (provided the \.{-q} switch isn't +set). This test isn't a thorough one; it only removes the last two characters +and checks whether a configuration file with that name exists. + +@<Scan options@>= + if(argc == 2) + {if(strcmp(argv[1], "--help") == 0) + @<Print help information@>@; + else if(strcmp(argv[1], "--version") == 0) + @<Print version@>@; + }@# + + while(argc > 1) + {p = argv[1]; + if(p[0] != '-') + break; + if(p[1] == 'p') + tfm_files = FALSE; + else if(p[1] == 'g') + pk_files = FALSE; + else if(p[1] == 'n') + long_extension = FALSE; + else if(p[1] == 'q') + quiet = TRUE; + else if(p[1] == 't') + testing = TRUE;@# + + argv++; + argc--; + }@# + + if(testing) + {if(argc != 2) + {fprintf(stderr, "Need exactly one parameter for `-t' option.\n"); + fprintf(stderr, "Try `hbf2gf --help' for more information.\n"); + exit(1); + } + } + else if(argc < 2 || argc > 4) + {fprintf(stderr, "Invalid number of parameters.\n"); + fprintf(stderr, "Try `hbf2gf --help' for more information.\n"); + exit(1); + }@# + + +@ +If the (optional) argument is larger than~|10|, we treat it as a value for +the vertical resolution (in dpi), otherwise as a vertical scaling factor. + +@<Check other arguments@>= + {if(unicode) + file_number = (int)strtol(&argv[1][strlen(argv[1]) - 2], + (char **)NULL, 16); + else + file_number = atoi(&argv[1][strlen(argv[1]) - 2]);@# + + x_resolution = atof(argv[2]); + if(x_resolution < PRINTER_MIN_RES_X) + {fprintf(stderr, "Invalid horizontal resolution\n"); + exit(1); + }@# + + if(argc > 3) + {y_scale = atof(argv[3]); + if(y_scale < 0.01) + {fprintf(stderr, + "Invalid vertical scaling factor or resolution\n"); + exit(1); + } + if(y_scale > 10.0) + y_scale = (double)x_resolution / y_scale; + } + } + + +@ +If |unicode| is |TRUE|, the start value of the running number appended to +the base name of the output font files is taken from the HBF header file, +otherwise it starts with~`\.{01}'. |min_char| represents the lower bound of +the code range. + +If we are in \mf-like mode, |file_number| is taken from the command line, +and |max_numb| will be set to~|1|. + +@<Write files@>= + {int j, max_numb; + + if(!mf_like) + {file_number = (unicode == TRUE ? (min_char >> 8) : 1); + if(nmb_files == -1) + max_numb = (unicode == TRUE ? 0x100 : 100); + else + max_numb = nmb_files; + } + else + max_numb = 1;@# + + for(j = 0; (j < max_numb) && !end_of_file; file_number++, j++) + write_file();@# + + nmb_files = j; /* the real number of output font files */ + } + + +@ +@<Include files@>= +#include <ctype.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <time.h> +#ifdef TM_IN_SYS_TIME +#include <sys/time.h> +#endif +#include "hbf.h" + + + +@* The functions. +The first function to be described is |write_file()|. Each \.{GF} file +consists of three sections: a preamble, a data section, and a postamble. The +functions |write_pre()|, |write_data()|, and |write_post()| handle this. + +@<Prototypes@>= +void write_file(void); + + +@ +In \mf-like mode we create font file name extensions similar to \mf\ if +the \.{-n} option isn't specified; otherwise only `\.{.gf}' will be appended. + +@c +void write_file(void) + {char output_file[FILE_NAME_LENGTH + 1]; + + + if(pk_files) + {if(mf_like) + {if(unicode) + sprintf(output_file, "%s%02x.%.0igf",@/ + output_name, file_number, + long_extension ? (int)(x_resolution + 0.5) : 0); + else + sprintf(output_file, "%s%02i.%.0igf",@/ + output_name, file_number, + long_extension ? (int)(x_resolution + 0.5) : 0); + } + else + {if(unicode) + sprintf(output_file, "%s%02x.gf", output_name, file_number); + else + sprintf(output_file, "%s%02i.gf", output_name, file_number); + } + if(!(out = fopen(output_file, WRITE_BIN))) + {fprintf(stderr, "Couldn't open `%s'\n", output_file); + exit(1); + } + if(!quiet) + printf("Writing `%s' ", output_file);@# + + write_pre(); + write_data(); + write_post(); + fclose(out);@# + + if(!quiet) + printf("\n"); + } + else + write_data(); + } + + +@ +The preamble has two bytes at the very beginning, |PRE| and |GF_ID|. |PRE| +starts the preamble, and |GF_ID| is the Generic Font Identity Byte. The next +bytes are a string in Pascal format containing a header, the date, and the +time. Strings in Pascal format start with the length of the string and have +no terminating NULL byte. + +@d GF_ID 131 +@d PRE 247@# + +@d header " hbf2gf output " + +@<Prototypes@>= +void write_pre(void); + + +@ +@s tm int + +@c +void write_pre(void) + {char out_s[40], s[20]; + time_t secs_now; + struct tm *time_now; + + + strcpy(out_s, header);@# + + secs_now = time(NULL); /* system date and time */ + time_now = localtime(&secs_now); + strftime(s, 20, "%Y.%m.%d:%H.%M", time_now); + strcat(out_s, s);@# + + fputc(PRE, out); + fputc(GF_ID, out); + fputc(strlen(out_s), out); + fputs(out_s, out); + } + + +@ +|write_data()| produces the middle part of the \.{GF} file. It first sets +|char_adr_p| equal to the address of |char_adr[]| which will contain file +offsets of the compressed characters. + +|input_size_x| and |input_size_y| reflect the original dimensions of the +bitmap font, |pk_output_size_x| and |pk_output_size_y| contain the width and +height of the output character box (in pixels), |pk_offset_x| and +|pk_offset_y| define the baseline of the font. The same names starting with +`\\{tfm\_}' instead of `\\{pk\_}' are used for \.{TFM} files (values are +multiples of design size). |mag_x| and |mag_y| hold the scaling factors +which are needed to reach |design_size|. |slant| defines the slant ($\Delta +x / \Delta y$), |target_size_x| and |target_size_y| will be the final +dimensions; |magstep_x = target_size_x / design_size| is \TeX's +\.{\\magstep}. + +The \CEE/ standard specifies that all global values will be automatically +set to~|0| if no initialization value is given. + +@<Global...@>= +long char_adr[256]; +long *char_adr_p;@# + +int pk_offset_x; + /* horizontal offset (increase character width a bit; will be applied on + both the left and the right side) */ +double tfm_offset_x; +int pk_offset_y; + /* vertical offset (must be configured to desired font size) */ +double tfm_offset_y;@# + +int input_size_x; +int input_size_y; +const char *font_encoding; /* taken from the HBF file */ +int pk_width; /* without slant */ +int pk_output_size_x; + /* the output character box dimensions without offsets */ +double tfm_output_size_x; +int pk_output_size_y; +double tfm_output_size_y;@# + +double design_size = 10.0; /* in points */ +double target_size_x; /* in points */ +double target_size_y; +double magstep_x; +double magstep_y; +double slant; +int rotation;@# + +double mag_x; /* horizontal and vertical magnification values */ +double mag_y;@# + +int empty_char; /* a flag whether the character does not exist or is empty */ +int last_char; /* the last valid character in a \.{GF} file */@# + +int dot_count; /* this counts the processed characters; + every ten characters a dot is output to the screen */ + + +@ +@<Prototypes@>= +void write_data(void); + + +@ +@c +void write_data(void) + {dot_count = 0; + char_adr_p = char_adr;@# + + for(last_char = 0; (last_char < 256) && !end_of_file; last_char++) + @<Write character@>@; + } + + +@ +The code in this section saves the current file position first and calls +|make_pixel_array()|, which expands and scales the character bitmap. + +|BOC| (and |BOC1|), the Begin Of Character command byte, must be followed by +the character code and the dimensions of the character as explained in +``\mf---the program'' (corrected by vertical and horizontal offsets). + +|write_coding()| compresses and outputs the bitmap; |EOC| (End Of Character) +finishes the current character. + +@d BOC 67 +@d BOC1 68 /* simplified version of |BOC| */ +@d EOC 69 + +@<Write character@>= + {if(dot_count++ % 10 == 0) /* a progress report for impatient users */ + if(pk_files && !quiet) + {printf("."); + fflush(stdout); + }@# + + empty_char = FALSE; + make_pixel_array(); + if(end_of_file) + return;@# + + if(pk_files) + {*char_adr_p = ftell(out); + char_adr_p++;@# + + if(empty_char) + {fputc(BOC1, out); + fputc((unsigned char)last_char, out); + fputc(0, out); + fputc(0, out); + fputc(0, out); + fputc(0, out); + fputc(EOC, out); + } + else + {fputc(BOC, out); + fputl(last_char, out); + fputl(-1L, out); + fputl(pk_offset_x, out); + fputl(pk_output_size_x + pk_offset_x, out); + fputl(pk_offset_y, out); + fputl(pk_output_size_y + pk_offset_y, out);@# + + write_coding();@# + + fputc(EOC, out); + } + } + } + + +@ +The current \.{GF} file will be completed with data written by +|write_post()|. The end consists of three sections: ``special'', ``post'', +and ``postpost''. The first contains material not used by \TeX\ itself but +which can be used by other programs like \.{GFtoDVI} or for documentary +purposes (|coding[]| and |comment[]|). The second describes the font as a +whole, and the last marks the end of the file. + +|pk_total_min_x| up to |pk_total_max_y| define the greatest bounding box of +this file (including offsets); the horizontal character escapement after +drawing the character is |pk_dx|. |tfm_width| is the width in multiples of +the design size ignoring the target size. + +@d _2_16 65536.0 /* $2^{16}$ */ +@d _2_20 1048576.0 /* $2^{20}$ */ + +@<Global...@>= +char coding[STRING_LENGTH + 1]; /* a comment describing the font encoding */ +char comment[STRING_LENGTH + 1]; /* a comment describing the font */@# + +unsigned long checksum;@# + +long pk_total_min_x; +long pk_total_max_x; +long pk_total_min_y; +long pk_total_max_y;@# + +int dpi_x; /* printer resolution */ +int dpi_y; +double ppp_x; /* pixels per point */ +double ppp_y; + + +@ +To clarify the meaning of these values see the sections about the metrics +and configuration file also. + +\TeX\ defines that 72.27~points are exactly 1~inch. + +@<Prototypes@>= +void write_post(void); + + +@ +@c +void write_post(void) + {long special_adr; + long post_adr;@# + + long designsize = design_size * _2_20; /* design size $* 2^{20}$ */@# + + int pk_dx; + long tfm_width;@# + + int i; + long temp; + + + ppp_x = dpi_x / 72.27 * magstep_x; + ppp_y = dpi_y / 72.27 * magstep_y;@# + + pk_total_min_x = pk_offset_x; + pk_total_max_x = pk_output_size_x + 2 * pk_offset_x; + pk_total_min_y = pk_offset_y; + pk_total_max_y = pk_output_size_y + pk_offset_y;@# + + pk_dx = pk_width + 2 * pk_offset_x; /* no slant */ + tfm_width = (tfm_output_size_x + 2 * tfm_offset_x) * _2_20; + /* width in multiples of design size $* 2^{20}$ */@# + + @<Special section@>@; + @<Post section@>@; + @<Postpost section@>@; + } + + +@ +\.{XXXn} will be followed by n~bytes representing the length of a string +which follows immediately. |YYY| is a 32~bit integer which is normally +connected with the preceding string (but not used here). |special_adr| +contains the address of the ``special section''. All items here are +optional. + +@d XXX1 239 /* these are all special command bytes */ +@d XXX2 240 /* not used */ +@d XXX3 241 /* not used */ +@d XXX4 242 /* not used */@# + +@d YYY 243 /* not used */ + +@<Special section@>= + special_adr = ftell(out);@# + + if(*coding) + {fputc(XXX1, out); /* |XXX1| implies a string length |< 256| */ + fputc(strlen(coding), out); + fputs(coding, out); + }@# + + if(*comment) + {fputc(XXX1, out); + fputc(strlen(comment), out); + fputs(comment, out); + } + + +@ +All character offsets collected in |char_adr| will be written to the output +file. |fputl()| writes a 32~bit integer into a file. + +|CHAR_LOC0| (and |CHAR_LOC|) is the first byte of a character locator +(i.e., offset, character code, and width information). |POST| starts the +postamble, and |post_adr| points to the beginning byte of the postamble. + +@d POST 248@# + +@d CHAR_LOC 245 +@d CHAR_LOC0 246 /* simplified version of |CHAR_LOC| */ + +@<Post section@>= + post_adr = ftell(out); + fputc(POST, out); + fputl(special_adr, out);@# + + fputl(designsize, out); + fputl(checksum, out); + fputl(ppp_x * _2_16, out); + fputl(ppp_y * _2_16, out); + fputl(pk_total_min_x, out); + fputl(pk_total_max_x, out); + fputl(pk_total_min_y, out); + fputl(pk_total_max_y, out);@# + + char_adr_p = char_adr;@# + + if(pk_dx < 256) + {for(i = 0; i < last_char; i++) /* the character locators */ + {fputc(CHAR_LOC0, out); + fputc(i, out); + fputc(pk_dx, out); + fputl(tfm_width, out); + fputl(*char_adr_p++, out); + } + } + else /* will only happen if |MAX_CHAR_SIZE >= 256| */ + {for(i = 0; i < last_char; i++) + {fputc(CHAR_LOC, out); + fputc(i, out); + fputl(pk_dx * _2_16, out); + fputl(0, out); + fputl(tfm_width, out); + fputl(*char_adr_p++, out); + } + } + + +@ +|POSTPOST| starts the section after the postamble. To get all information in +a \.{GF} file, you must start here. The very last bytes of the file have +the value |POSTPOST_ID| (the file is filled with at least 4 of these bytes +until a file length of a multiple of~4 is reached). Going backwards a +|GF_ID| will be next, then comes the address of the postamble section. + +Jumping to the postamble, a |POST| byte comes first, then the address of +the special section, and afterwards all character offsets. These offsets and +addresses describe the whole file. + +@d POSTPOST 249 +@d POSTPOST_ID 223 + +@<Postpost section@>= + fputc(POSTPOST, out); + fputl(post_adr, out); + fputc(GF_ID, out); + temp = ftell(out); + i = (int)(temp % 4) + 4; + while(i--) + fputc(POSTPOST_ID, out); + + +@ +\TeX\ wants the most significant byte first. + +@<Prototypes@>= +void fputl(long, FILE *); + + +@ +@c +void fputl(num, f) + long num; + FILE *f; + + {fputc(num >> 24, f); + fputc(num >> 16, f); + fputc(num >> 8, f); + fputc(num, f); + } + + +@ +|make_pixel_array()| scales a character into the array |out_char[]| where +each \\{byte} represents one pixel, contrary to the input file where each +\\{bit} is used to store the character bitmap. |BLACK| indicates a black +pixel. + +The scaling routine was modeled after the program \.{pnmscale} of the +\.{pbmplus} package. \.{pbmplus} was designed to handle arbitrary pictures, +and bitmaps are only a special case of a graymap with values from~0 for +white up to |PIXEL_MAXVAL = 255| for black. + +If |EOF| is encountered, |end_of_file| is set and the function returns +immediately. + +@d BLACK 1 +@d WHITE 0@# + +@d PIXEL_MAXVAL 255 +@d SCALE 4096 +@d HALFSCALE 2048@# + +@d MAX_CHAR_SIZE 1023 + +@<Global...@>= +HBF_CHAR code; +const unsigned char *bitmap; + /* a proper input bitmap array will be allocated by the HBF API */ +unsigned char *bP;@# + +unsigned char out_char[MAX_CHAR_SIZE * MAX_CHAR_SIZE + 1]; + /* the output bitmap array */ +unsigned char *out_char_p;@# + +unsigned char pixelrow[MAX_CHAR_SIZE]; +unsigned char temp_pixelrow[MAX_CHAR_SIZE]; +unsigned char new_pixelrow[MAX_CHAR_SIZE + 1]; + /* we need space to append a white pixel */@# +int curr_row; /* for |read_row()| if we access the glyph rotated */ + +long grayrow[MAX_CHAR_SIZE];@# + +long s_mag_x, s_mag_y, s_slant; + + +@ +We need to initialize the |grayrow[]| array together with some other +variables. + +Two steps are necessary to compute the |code| if we are in the \mf-like +mode. Assuming that we search the code \.{0xXXYY}, we first set |code| to +the value \.{0xXXAA}, where \.{0xAA} is equal to |min_2_byte| (getting +|offset| as the number of remaining characters to reach the first character +in our given subfont), then we increment |code| (and decrement |offset|) +until |offset| equals~0. + +@<Initialize variables@>= + {int col, offset; + + if(rotation) + {int tmp; + + + tmp = input_size_x; + input_size_x = input_size_y; + input_size_y = tmp; + }@# + + if(mf_like) + {target_size_x = design_size * (x_resolution / dpi_x); + target_size_y = design_size * (x_resolution * y_scale / dpi_y); + } + else + target_size_x = target_size_y = design_size; + magstep_x = target_size_x / design_size; + magstep_y = target_size_y / design_size;@# + + pk_offset_x = offset_x * magstep_x + 0.5; + pk_offset_y = offset_y * magstep_y + 0.5; + tfm_offset_x = offset_x / (dpi_x / 72.27) / design_size; + tfm_offset_y = offset_y / (dpi_y / 72.27) / design_size;@# + + pk_width = input_size_x * mag_x * magstep_x + 0.5; /* without slant */ + pk_output_size_x = input_size_x * mag_x * magstep_x + + input_size_y * mag_y * magstep_y * slant + 0.5; + pk_output_size_y = input_size_y * mag_y * magstep_y + 0.5; + tfm_output_size_x = input_size_x * mag_x / + (dpi_x / 72.27) / design_size; + tfm_output_size_y = input_size_y * mag_y / + (dpi_y / 72.27) / design_size; + if(pk_output_size_x > MAX_CHAR_SIZE) + {fprintf(stderr, "Output character box width too big\n"); + exit(1); + } + if(pk_output_size_y > MAX_CHAR_SIZE) + {fprintf(stderr, "Output character box height too big\n"); + exit(1); + }@# + + for(col = 0; col < input_size_x; ++col) + grayrow[col] = HALFSCALE;@# + + if(!mf_like) + code = (min_char & 0xFF00) + min_2_byte; + else + {if((file_number < (unicode ? 0 : 1)) || (file_number >= 0x100)) + {fprintf(stderr, "Invalid subfile number\n"); + exit(1); + }@# + + if(unicode) + {offset = 0; + code = file_number * 0x100; + } + else + {offset = (file_number - 1) * 256 % nmb_2_bytes; + code = (min_char & 0xFF00) + min_2_byte + + (file_number - 1) * 256 / nmb_2_bytes * 0x100; + }@# + + while(offset--) + while(!b2_codes[code++ & 0xFF]) + /* eliminate invalid |b2_codes| */ + ;@# + + if(code > max_char) + {fprintf(stderr, "Invalid subfile number\n"); + exit(1); + } + } + + s_mag_x = mag_x * magstep_x * SCALE; + s_mag_y = mag_y * magstep_y * SCALE; + s_slant = slant * SCALE; + } + + +@ +All arrays of the \\{pixelrow} family contain gray values. While scaling +with non-integer values a pixel of the input bitmap will normally not align +with the pixel grid of the output bitmap (geometrically spoken). In this +case we first compute the fractions of input pixel rows scaled vertically +and add the corresponding gray values until a temporary row is produced. +Then we repeat this procedure horizontally pixel by pixel and write the +result into an output array. + + +@<Prototypes@>= +void make_pixel_array(void); + + +@ +@c +void make_pixel_array(void) + {unsigned char *prP; + unsigned char *temp_prP; + unsigned char *new_prP; + long *grP;@# + + register unsigned char *xP; + register unsigned char *nxP;@# + + register int row, col; + int rows_read = 0; + register int need_to_read_row = 1;@# + + long frac_row_to_fill = SCALE; + long frac_row_left = s_mag_y;@# + + int no_code = FALSE; + + + prP = pixelrow; + temp_prP = temp_pixelrow; + new_prP = new_pixelrow; + grP = grayrow; + out_char_p = out_char; /* will be increased by |write_row()| */@# + +again: + if(b2_codes[code & 0xFF]) /* a valid second byte? */ + {if(pk_files) + {bitmap = hbfGetBitmap(hbf, code); + bP = (unsigned char *)bitmap; + /* will be increased by |read_row()| */@# + + if(!bitmap) + empty_char = TRUE; + else + @<Scale row by row@>@; + } + } + else + no_code = TRUE;@# + + if((code & 0xFF) == max_2_byte) + code += 0xFF - (max_2_byte - min_2_byte); /* go to next plane */ + if(code >= max_char) + {end_of_file = TRUE; + return; + }@# + + code++;@# + + if(no_code) + {no_code = FALSE; + goto again; + } + } + + +@ +@<Scale row by row@>= + {if(pk_output_size_y == input_size_y) /* shortcut Y~scaling if possible */ + temp_prP = prP;@# + + curr_row = input_size_y - 1; /* only needed for rotated glyphs */ + for(row = 0; row < pk_output_size_y; ++row) + {@<Scale Y from |pixelrow[]| into |temp_pixelrow[]|@>@; + @<Scale X from |temp_pixelrow[]| into |new_pixelrow[]| + and write it into |out_char[]|@>@; + } + } + + +@ +@<Scale Y from |pixelrow[]| into |temp_pixelrow[]|@>= + if(pk_output_size_y == input_size_y) + /* shortcut Y~scaling if possible */ + read_row(prP); + else + {while(frac_row_left < frac_row_to_fill) + {if(need_to_read_row) + if(rows_read < input_size_y) + {read_row(prP); + ++rows_read; + }@# + + for(col = 0, xP = prP; col < input_size_x; ++col, ++xP) + grP[col] += frac_row_left * (*xP);@# + + frac_row_to_fill -= frac_row_left; + frac_row_left = s_mag_y; + need_to_read_row = 1; + }@# + + @<Produce a temporary row@>@; + } + + +@ +Now |frac_row_left >= frac_row_to_fill|, so we can produce a row. + +@<Produce a temporary row@>= + if(need_to_read_row) + if(rows_read < input_size_y) + {read_row(prP); + ++rows_read; + need_to_read_row = 0; + }@# + + for(col = 0, xP = prP, nxP = temp_prP; + col < input_size_x; ++col, ++xP, ++nxP) + {register long g; + + + g = grP[col] + frac_row_to_fill * (*xP); + g /= SCALE; + if(g > PIXEL_MAXVAL) + g = PIXEL_MAXVAL;@# + + *nxP = g; + grP[col] = HALFSCALE; + }@# + + frac_row_left -= frac_row_to_fill; + if(frac_row_left == 0) + {frac_row_left = s_mag_y; + need_to_read_row = 1; + } + frac_row_to_fill = SCALE; + + +@ +To implement the slant we move the starting point |nxP| to the right +according to the corresponding |y|~value. To simplify life only positive +shift values are allowed. + +We always append a white pixel to avoid artefacts at the end of the line +produced by the last line. This rule sets the second condition that the +slant must not be greater than~|1|---such a large slant would be unusable +anyway for typesetting purposes. + +@<Scale X from |temp_pixelrow[]| into |new_pixelrow[]| + and write it into |out_char[]|@>= + if(pk_width == input_size_x && s_slant == 0) + /* shortcut X~scaling if possible */ + write_row(temp_prP); + else + {register long g = HALFSCALE; + register long frac_col_to_fill = SCALE; + register long frac_col_left; + register int need_col = 0; + + + nxP = new_prP;@# + + frac_col_left = (pk_output_size_y - row) * s_slant; + while(frac_col_left >= frac_col_to_fill) + {*(nxP++) = 0; + frac_col_left -= frac_col_to_fill; + }@# + + if(frac_col_left > 0) + frac_col_to_fill -= frac_col_left;@# + + for(col = 0, xP = temp_prP; col < input_size_x; ++col, ++xP) + {frac_col_left = s_mag_x; + while(frac_col_left >= frac_col_to_fill) + {if(need_col) + {++nxP; + g = HALFSCALE; + }@# + + g += frac_col_to_fill * (*xP); + g /= SCALE; + if(g > PIXEL_MAXVAL) + g = PIXEL_MAXVAL;@# + + *nxP = g; + frac_col_left -= frac_col_to_fill; + frac_col_to_fill = SCALE; + need_col = 1; + }@# + + if(frac_col_left > 0) + {if(need_col) + {++nxP; + g = HALFSCALE; + need_col = 0; + }@# + + g += frac_col_left * (*xP); + frac_col_to_fill -= frac_col_left; + } + }@# + + @<Write out a row@>@; + } + + +@ +@<Write out a row@>= + if(frac_col_to_fill > 0) + {--xP; + g += frac_col_to_fill * (*xP); + }@# + + if(!need_col) + {g /= SCALE; + if(g > PIXEL_MAXVAL) + g = PIXEL_MAXVAL; + *nxP = g; + }@# + + *(++nxP) = 0; /* append a blank pixel */@# + + write_row(new_prP); + + +@ +|read_row()| reads a row from |bitmap[]| and converts it into a graymap row. +If the |rotation| flag has been set, we get the proper column instead (note +that in this case |input_size_x| already reflects the width of the rotated +glyph). + +@<Prototypes@>= +#ifdef __GNUC__ +__inline__ +#endif +void read_row(unsigned char *); + + +@ +@c +#ifdef __GNUC__ +__inline__ +#endif +void read_row(pixelrow) + unsigned char *pixelrow; + + {register int col, bitshift, offset; + register unsigned char *xP; + register unsigned char item = 0; + + if(rotation) + {bitshift = 7 - (curr_row % 8); + offset = (input_size_y + 7) / 8; + bP = (unsigned char *)bitmap + curr_row / 8; + for(col = 0, xP = pixelrow; col < input_size_x; ++col, ++xP) + {*xP = ((*bP >> bitshift) & 1) == 1 ? PIXEL_MAXVAL : 0; + bP += offset; + } + curr_row--; + } + else + {bitshift = -1; + for(col = 0, xP = pixelrow; col < input_size_x; ++col, ++xP) + {if(bitshift == -1) + {item = *(bP++); /* increase input bitmap pointer */ + bitshift = 7; + } + *xP = ((item >> bitshift) & 1) == 1 ? PIXEL_MAXVAL : 0; + --bitshift; + } + } + } + + +@ +|write_row()| converts the graymap back into a bitmap using a simple +threshold. + +@<Global...@>= +int threshold = 128; + + +@ +@<Prototypes@>= +#ifdef __GNUC__ +__inline__ +#endif +void write_row(unsigned char *); + + +@ +@c +#ifdef __GNUC__ +__inline__ +#endif +void write_row(pixelrow) + unsigned char *pixelrow; + + {register int col; + register unsigned char *xP; + + for(col = 0, xP = pixelrow; col < pk_output_size_x; ++col, ++xP) + *(out_char_p++) = (*xP >= threshold) ? 1 : 0; + /* increase output bitmap pointer */ + } + + +@ +Now comes the most interesting routine. The pixel array will be compressed +in sequences of black and white pixels. + +|SKIP0|, |SKIP1|, and |SKIP2| indicate how many blank lines will be skipped. +|PAINT_(x)| means that the next x~pixels will have the same color, then the +color changes. |NEW_ROW_(x)| is the first black pixel in the next row. + +An example: the pixel sequence 111100011001 [new row] 000111011110 will be +output as 4 3 2 2 1 77 3 1 4 1. + +Commands with an ending~`n' in its name indicate that the next n~bytes +should be read as the counter. Example: |SKIP1|~26 means `skip the next +26~rows'. + +For further details please refer to ``\mf---the program''. + +@d PAINT_(x) (x) /* $0 \le x \le 63$ */ +@d PAINT1 64 +@d PAINT2 65 +@d PAINT3 66 /* not used */@# + +@d SKIP0 70 +@d SKIP1 71 +@d SKIP2 72 +@d SKIP3 73 /* not used */@# + +@d NEW_ROW_(x) ((x) + 74) /* $0 \le x \le 164$ */@# + +@d NOOP 244 /* not used */ + +@<Prototypes@>= +void write_coding(void); + + +@ +The |goto start| instruction causes some compilers to complain about +``Unreachable code $\ldots$'' or something similar. + +@c +void write_coding(void) + {register int count, skip; + register unsigned char paint; + register int x, y; + register unsigned char *cp; + + x = 0; + y = 0; + cp = out_char + y * pk_output_size_x + x; + count = skip = 0; + paint = WHITE; + goto start;@# + + while (y < pk_output_size_y) + {@<Search blank lines@>@; +start: + @<Process rest of line@>@; + y++; + } + }@# + + +@ +@<Search blank lines@>= + count = 0; + x = 0; + cp = out_char + y * pk_output_size_x + x;@# + + while(x < pk_output_size_x) + {if(*cp == paint) + count++; + else + {if(skip == 0) + {if(count <= 164) + fputc(NEW_ROW_(count), out); + else + {fputc(SKIP0, out);@# + + if(count < 256) + {fputc(PAINT1, out); + fputc(count, out); + } + else + {fputc(PAINT2, out); + fputc(count >> 8, out); + fputc(count & 0xFF, out); + } + } + } + else + {if(skip == 1) + fputc(SKIP0, out); + else + {if(skip < 256) + {fputc(SKIP1, out); + fputc(skip, out); + } + else + {fputc(SKIP2, out); + fputc(skip >> 8, out); + fputc(skip & 0xFF, out); + } + } + skip = 0; + if(count < 64) + fputc(PAINT_(count), out); + else if(count < 256) + {fputc(PAINT1, out); + fputc(count, out); + } + else + {fputc(PAINT2, out); + fputc(count >> 8, out); + fputc(count & 0xFF, out); + } + } + count = 0; + paint = BLACK; + break; + } + x++; + cp++; + } + if(x >= pk_output_size_x) + {skip++; + y++; + continue; + } + + +@ +@<Process rest of line@>= + while(x < pk_output_size_x) + {if(*cp == paint) + count++; + else + {if(count < 64) + fputc(PAINT_(count), out); + else if(count < 256) + {fputc(PAINT1, out); + fputc(count, out); + } + else + {fputc(PAINT2, out); + fputc(count >> 8, out); + fputc(count & 0xFF, out); + } + count = 1; + paint = BLACK - paint; + } + x++; + cp++; + } + if(paint == BLACK) + {if(count < 64) + fputc(PAINT_(count), out); + else if(count < 256) + {fputc(PAINT1, out); + fputc(count, out); + } + else + {fputc(PAINT2, out); + fputc(count >> 8, out); + fputc(count & 0xFF, out); + } + paint = WHITE; + } + + + +@* The font metrics file. +This routine creates one \.{PL} file with the font properties. None of the +\TeX\ font dimensions are needed because you never will use CJK fonts +directly, and intercharacter stretching is handled by the \\{CJK} macro +\.{\\CJKglue}. (Other packages may define similar commands.) + +The name of the \.{PL} file will contain the running two digits in +\mf-like mode only. + +It makes sense \\{not} to compute the check sum automatically for two +reasons. Firstly, since \TeX's checksum algorithm is based on the character +width, the number of valid characters, and the designsize, there is a much +higher chance that two subfonts from different HBF fonts have the same check +sum than it is for ordinary fonts, because all characters have the same +width, usually 256~characters in a subfont, and very often the same design +size. Secondly, and this is more important, we create just one +\.{TFM} file for all subfonts regardless of the real number of characters +in a particular subfont. + +To have an identification string in the \.{TFM} file, we split it into +single bytes and use the \.{HEADER} command repeatedly. + +@<Prototypes@>= +void write_pl(void); + + +@ +@c +void write_pl(void) + {int i, pos; + char output_file[FILE_NAME_LENGTH + 1]; + long t, sc; + char *s; + char tfm_header[] = "Created by hbf2gf"; + + file_number--; /* for \mf-like mode */@# + + if(mf_like) + {if(unicode) + sprintf(output_file, "%s%02x.pl", output_name, file_number); + else + sprintf(output_file, "%s%02i.pl", output_name, file_number); + } + else + sprintf(output_file, "%s.pl", output_name);@# + + if(!(out = fopen(output_file, WRITE_TXT))) + {fprintf(stderr, "Couldn't open `%s'\n", output_file); + exit(1); + } + if(!quiet) + printf("\nWriting `%s'\n", output_file);@# + + fprintf(out,@/ + "\n(FAMILY %s%d)"@/ + "\n(CODINGSCHEME CJK-%s)", + output_name, file_number, font_encoding);@# + + fprintf(out,@/ + "\n(DESIGNSIZE R %.6f)"@/ + "\n(COMMENT DESIGNSIZE IS IN POINTS)"@/ + "\n(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)"@/ + "\n(CHECKSUM O %lo)"@/ + "\n(FONTDIMEN"@/ + "\n (SLANT R %.6f)"@/ + "\n (SPACE R 0.0)"@/ + "\n (STRETCH R 0.0)"@/ + "\n (SHRINK R 0.0)"@/ + "\n (XHEIGHT R 1.0)"@/ + "\n (QUAD R 1.0)"@/ + "\n (EXTRASPACE R 0.0)"@/ + "\n )", design_size, checksum, slant);@# + + s = tfm_header; + i = strlen(s); + t = ((long)i) << 24; + sc = 16; + pos = 18;@# + + fprintf(out, "\n"); + while(i > 0) + {t |= ((long)(*(unsigned char *)s++)) << sc; + sc -= 8; + if(sc < 0) + {fprintf(out, "\n(HEADER D %d O %lo)", pos, t); + t = 0; + sc = 24; + pos++; + } + i--; + } + if(t) + fprintf(out, "\n(HEADER D %d O %lo)", pos, t); + fprintf(out, "\n");@# + + for(i = 0; i < 256; i++) + {fprintf(out,@/ + "\n(CHARACTER O %o"@/ + "\n (CHARWD R %.6f)"@/ + "\n (CHARHT R %.6f)"@/ + "\n (CHARDP R %.6f)"@/ + "\n (CHARIC R %.6f)"@/ + "\n )",@/ + i, + tfm_output_size_x + 2 * tfm_offset_x, + tfm_output_size_y + tfm_offset_y, + -tfm_offset_y, + slant * (tfm_output_size_y + tfm_offset_y)); + }@# + + fclose(out); + } + + + +@* The extended virtual font file for \Om. +The following is very similar to |write_pl()|; we simply map the glyphs +of the subfonts back to the original encoding positions. + +@<Prototypes@>= +void write_ovp(void); + + +@ +@c +void write_ovp(void) + {int c, i, nmb_subfonts, remainder, count, pos; + char output_file[FILE_NAME_LENGTH + 1]; + long t, sc; + char *s; + char ofm_header[] = "Created by hbf2gf"; + + nmb_subfonts = ((max_char - (min_char & 0xFF00)) / 256 * nmb_2_bytes) + / 256 + 1; + remainder = ((max_char - (min_char & 0xFF00)) / 256 * nmb_2_bytes) + % 256;@# + + /* correction for the last incomplete second byte range */ + for(count = 0; count < (max_char & 0xFF); count++) + if(b2_codes[count]) + remainder++; + if(remainder >= 256) + nmb_subfonts++;@# + + sprintf(output_file, "%s.ovp", output_name);@# + + if(!(out = fopen(output_file, WRITE_TXT))) + {fprintf(stderr, "Couldn't open `%s'\n", output_file); + exit(1); + } + if(!quiet) + printf("\nWriting `%s'\n", output_file);@# + + fprintf(out,@/ + "\n(VTITLE Omega virtual font created by hbf2gf)"@/ + "\n(DESIGNSIZE R %.6f)"@/ + "\n(COMMENT DESIGNSIZE IS IN POINTS)"@/ + "\n(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)"@/ + "\n(CHECKSUM O %lo)"@/ + "\n(FONTDIMEN"@/ + "\n (SLANT R %.6f)"@/ + "\n (SPACE R 0.0)"@/ + "\n (STRETCH R 0.0)"@/ + "\n (SHRINK R 0.0)"@/ + "\n (XHEIGHT R 1.0)"@/ + "\n (QUAD R 1.0)"@/ + "\n (EXTRASPACE R 0.0)"@/ + "\n )", design_size, checksum, slant);@# + + s = ofm_header; + i = strlen(s); + t = ((long)i) << 24; + sc = 16; + pos = 18;@# + + fprintf(out, "\n"); + while(i > 0) + {t |= ((long)(*(unsigned char *)s++)) << sc; + sc -= 8; + if(sc < 0) + {fprintf(out, "\n(HEADER D %d O %lo)", pos, t); + t = 0; + sc = 24; + pos++; + } + i--; + } + if(t) + fprintf(out, "\n(HEADER D %d O %lo)", pos, t); + fprintf(out, "\n");@# + + for(i = 0; i < nmb_subfonts; i++) + {fprintf(out,@/ + "\n(MAPFONT D %i"@/ + "\n (FONTNAME %s%02i)"@/ + "\n (FONTCHECKSUM O %lo)"@/ + "\n (FONTAT R 1.0)"@/ + "\n (FONTDSIZE R %.6f)"@/ + "\n )", i, output_name, i + 1, checksum, design_size); + }@# + + for(c = min_char, i = 0, count = 0; c <= max_char; c++) + {if(b2_codes[c & 0xFF] == VALID_SUBCODE) + {fprintf(out,@/ + "\n(CHARACTER O %o"@/ + "\n (CHARWD R %.6f)"@/ + "\n (CHARHT R %.6f)"@/ + "\n (CHARDP R %.6f)"@/ + "\n (CHARIC R %.6f)"@/ + "\n (MAP"@/ + "\n (SELECTFONT D %i)"@/ + "\n (SETCHAR O %o)"@/ + "\n )"@/ + "\n )",@/ + c, + tfm_output_size_x + 2 * tfm_offset_x, + tfm_output_size_y + tfm_offset_y, + -tfm_offset_y, + slant * (tfm_output_size_y + tfm_offset_y), + i, + count);@# + + count++; + if(count == 256) + {count = 0; + i++; + } + } + else + continue; + }@# + + fclose(out); + } + + + +@* The job file. +This routine is the most system specific one. If your operating system needs +a different outline, make appropriate changes here. + +You have to call this batch file after \.{hbf2gf} has finished (if not in +\mf-like mode). It will transform the \.{GF} files into \.{PK} files and +delete the now unnecessary \.{GF} files, then transform the \.{PL} file into +a \.{TFM} file and copy it |nmb_files| times. The name of the job file is +|output_name|. + +@d EXTENSION_LENGTH 8 /* the maximal length of a file extension */@# + +@d GFTOPK_NAME "gftopk" +@d PLTOTF_NAME "pltotf" +@d OVP2OVF_NAME "ovp2ovf" + +@<Global...@>= +char job_extension[EXTENSION_LENGTH + 1]; +char rm_command[STRING_LENGTH + 1]; +char cp_command[STRING_LENGTH + 1]; +char pk_directory[STRING_LENGTH + 1]; +char tfm_directory[STRING_LENGTH + 1];@# + +int ofm_file = FALSE; + + +@ +@<Prototypes@>= +void write_job(void); + + +@ +@c +void write_job(void) + {FILE *out; + int i, j; + char buffer[FILE_NAME_LENGTH + 1]; + + + strcpy(buffer, output_name); + strcat(buffer, job_extension); + if(!(out = fopen(buffer, WRITE_TXT))) + {fprintf(stderr, "Couldn't open `%s'\n", buffer); + exit(1); + } + if(!quiet) + printf("\nWriting `%s'\n", buffer);@# + + if(pk_files) + {if(unicode) + {for(i = (min_char >> 8), j = 0; j < nmb_files; i++, j++) + fprintf(out,@/ + "%s %s%02x.gf %s%s%02x.%.0ipk\n"@/ + "%s %s%02x.gf\n",@/ + GFTOPK_NAME, output_name, i,@/ + pk_directory, output_name, i, + long_extension ? (int)(dpi_x * magstep_x + 0.5) : 0,@/ + rm_command, output_name, i); + } + else + {for(i = 1; i <= nmb_files; i++) + fprintf(out,@/ + "%s %s%02i.gf %s%s%02i.%.0ipk\n"@/ + "%s %s%02i.gf\n",@/ + GFTOPK_NAME, output_name, i,@/ + pk_directory, output_name, i, + long_extension ? (int)(dpi_x * magstep_x + 0.5) : 0,@/ + rm_command, output_name, i); + } + }@# + + if(tfm_files) + {fprintf(out,@/ + "\n"@/ + "%s %s.pl %s.tfm\n"@/ + "%s %s.pl\n"@/ + "\n",@/ + PLTOTF_NAME, output_name, output_name,@/ + rm_command, output_name);@# + + if(unicode) + {for(i = (min_char >> 8), j = 0; j < nmb_files; i++, j++) + fprintf(out,@/ + "%s %s.tfm %s%s%02x.tfm\n",@/ + cp_command, output_name, + tfm_directory, output_name, i); + } + else + {for(i = 1; i <= nmb_files; i++) + fprintf(out,@/ + "%s %s.tfm %s%s%02i.tfm\n",@/ + cp_command, output_name, + tfm_directory, output_name, i); + }@# + + fprintf(out,@/ + "\n"@/ + "%s %s.tfm",@/ + rm_command, output_name); + }@# + + if(ofm_file) + {fprintf(out,@/ + "\n"@/ + "%s %s.ovp %s.ovf %s.ofm\n"@/ + "%s %s.ovp\n"@/ + "\n",@/ + OVP2OVF_NAME, output_name, output_name, output_name,@/ + rm_command, output_name); + }@# + + fclose(out); + } + + + +@* The configuration file. +Here is a list with all necessary keywords (and parameters): +\medskip +\halign{\quad\.{#}\hfil&\quad#\hfil\cr + hbf\_header & the HBF header file name of the input font(s). \cr + output\_name & the name stem of the output files. \cr + & Should be equal to the name of the configuration file + in most cases.\cr + & A running two digit decimal number starting with + \.{01} will be appended. \cr + & (For Unicode fonts see the keyword \.{unicode} + below.) \cr + } +\bigskip +And now all optional keywords: +\medskip +\halign{\quad\.{#}\hfil&\quad#\hfil\cr + x\_offset & increases the character width. \cr + & Will be applied on both sides; \cr + & default is the value given in the HBF header + (\.{HBF\_BITMAP\_BOUNDING\_BOX}) \cr + & scaled to \\{design\/}size (in pixels). \cr + y\_offset & shifts all characters up or down; \cr + & default is the value given in the HBF header + (\.{HBF\_BITMAP\_BOUNDING\_BOX}) \cr + & scaled to \\{design\/}size (in pixels). \cr + design\_size & the design size (in points) of the font. \cr + & \.{x\_offset} and \.{y\_offset} refer to this + size. \cr + & Default is |10.0| \cr + target\_size & This command is obsolete now and will be + ignored.\cr + & \cr + slant & the slant of the font (given as $\Delta x / + \Delta y$). \cr + & Only values in the range |0 <= slant <= 1| + are allowed. \cr + & Default is |0.0| \cr + rotation & if set to `yes'. the glyphs are rotated + 90~degrees counter-clockwise. \cr + & The default offsets as given in the HBF header + will be ignored (and set to~|0|). \cr + & Default is `no'. \cr + & \cr + mag\_x & \cr + mag\_y & scaling values of the characters to reach + design size. \cr + & If only one magnification is given, x and y + values are assumed to be equal. \cr + & Default is \.{mag\_x} $=$ \.{mag\_y} $=$ |1.0| + \cr + threshold & A value between |1| and |254| defining a + threshold for converting the internal \cr + & graymap into the output bitmap; lower values + cut more pixels. \cr + & Default value is |128|. \cr + & \cr + comment & a comment describing the font; \cr + & default is none. \cr + & \cr + nmb\_fonts & the number of the fonts. \cr + & Default value is~|-1| for creating all + fonts. \cr + unicode & if `yes', a two digit hexadecimal number will + be used as a running number, \cr + & starting with the value of the first byte of + the first code range. \cr + & Default is `no'. \cr + min\_char & the minimum of the encoding range. \cr + & Specify this value if it is not identical to + the lowest code value \cr + & in the HBF file (to which it defaults). \cr + & \cr + dpi\_x & \cr + dpi\_y & the horizontal and vertical resolution (in + dpi) of the printer. \cr + & If only one resolution is given, x and y + values are assumed to be equal. \cr + & Default is |300|. \cr + checksum & a checksum to identify the \.{GF} files + with the appropriate \.{TFM} files. \cr + & The default of this 32~bit unsigned integer + is |0|. \cr + coding & a comment describing the coding scheme; \cr + & default is none. \cr + & \cr + pk\_directory & the destination directory of the + \.{PK} files; \cr + & default: none. \cr + & Attention! The batch file will not check + whether this directory exists. \cr + tfm\_directory & the destination directory of the + \.{TFM} files; \cr + & default: none. \cr + & Attention! The batch file will not check + whether this directory exists. \cr + pk\_files & whether to create \.{PK} files or not; \cr + & default is `yes'. \cr + tfm\_files & whether to create \.{TFM} files or not; \cr + & default is `yes'. \cr + ofm\_file & whether to create an \.{OFM} and an + \.{OVF} file or not; \cr + & default is `no'. \cr + long\_extension & if `yes', \.{PK} files will include the + resolution in the extension \cr + & (e.g. \.{gsso1201.300pk}). \cr + & This affects the batch file only (default is + `yes'). \cr + rm\_command & this shell command removes files; \cr + & default: `rm'. \cr + cp\_command & this shell command copies files; \cr + & default: `cp'. \cr + job\_extension & the extension of the batch file which calls + \.{GFtoPK} and \.{PLtoTF} \cr + & to convert the \.{GF} and the + \.{PL} files into \.{PK} and + \.{TFM} files; \cr + & default is none. \cr + } +\bigskip + +The searching algorithm (for the keywords) of \.{hbf2gf} is case +insensitive; it makes no difference whether you write for example \.{comment} +or \.{CommenT}. The keywords must start a line (be in the first column), and +the corresponding parameters must be on the same line with the keyword and +separated by at least one space or tabulator stop. Lines starting not with a +keyword are ignored. + +Key values \\{are} case sensitive (except \.{yes} and \.{no}). + +The default system dependent values are for \UNIX/-like operating systems; +if you use for example DOS, you must write +\medskip +\halign{\quad\.{#}\hfil&\quad\.{#}\hfil\cr + long\_extension & no \cr + rm\_command & del \cr + cp\_command & copy \cr + job\_extension & .bat \cr + } +\medskip + +Both the values |pk_output_size_x| and |pk_output_size_y| must not exceed +|MAX_CHAR_SIZE|; \.{x\_offset} and \.{y\_offset} are related to the +design size (and not to the input size). + +In \mf-like mode, one \.{GF} file and one \.{PL} file will be computed +(depending on the command line options \.{-g} and \.{-p}), taking +|x_resolution| and |y_scale| from the command line. \.{nmb\_fonts} will +always be set to~|1|; no job file will be created. + + +@ +@d PRINTER_MIN_RES_X 50 +@d PRINTER_MIN_RES_Y 50 + +@<Global...@>= +char Buffer[STRING_LENGTH + 1]; + + +@ +@<Prototypes@>= +void read_config(void); + + +@ +If |config_file| isn't found in \mf-like mode we assume that the font +isn't a HBF font at all. + +@c +void read_config(void) + {HBF_BBOX *boxp; + char *real_config_file; + + + @<Handle extension@>@;@# + + real_config_file = TeX_search_cfg_file(config_file); + if(!real_config_file) + {if(mf_like) + {if(!quiet) + printf("Couldn't find `%s'\n", config_file); + exit(2); + } + else + {fprintf(stderr, "Couldn't find `%s'\n", config_file); + exit(1); + } + }@# + + if(!(config = fopen(real_config_file, READ_TXT))) + {if(!testing) + {fprintf(stderr, "Couldn't open `%s'\n", config_file); + exit(1); + } + else /* We reach this point only if no searching library is used */ + {if(!quiet) + fprintf(stderr, "Couldn't find or open `%s'\n", config_file); + exit(2); + } + }@# + + if(testing) + {if(!quiet) + printf("%s\n", real_config_file); + exit(0); + } + + @<Necessary parameters@>@; + @<Optional parameters@>@;@# + + @<Get code range@>@; + @<Get sub code range@>@;@# + + fclose(config); + } + + +@ +Here we check whether we have to add an extension. + +@<Handle extension@>= + {int i, lastext = -1; + + for(i = 0; config_file[i]; i++) + if(config_file[i] == '.') + lastext = i; + else if (config_file[i] == '/' || + config_file[i] == ':' || + config_file[i] == '\\') + lastext = -1;@# + + if(lastext == -1) + strcat(config_file, ".cfg"); + } + + +@ +@<Necess...@>= + {char hbf_header[STRING_LENGTH + 1]; + char *real_hbf_header; + + if(!fsearch("hbf_header")) + config_error("hbf_header"); + else + strcpy(hbf_header, Buffer);@# + + real_hbf_header = TeX_search_hbf_file(hbf_header); + if(!real_hbf_header) + {fprintf(stderr, "Couldn't find `%s'\n", hbf_header); + exit(1); + }@# + + hbfDebug = 1; /* we activate error messages of the HBF API + while scanning the HBF header file */@# + + if(!(hbf = hbfOpen(real_hbf_header))) + exit(1);@# + + hbfDebug = 0;@# + + boxp = hbfBitmapBBox(hbf); + input_size_x = boxp->hbf_height; /* will be checked later for rotation */ + input_size_y = boxp->hbf_width; + font_encoding = hbfProperty(hbf, "HBF_CODE_SCHEME");@# + + if(!fsearch("output_name")) + config_error("output_name"); + else + strcpy(output_name, Buffer); + } + + +@ +@<Global...@>= +int offset_x; +int offset_y;@# + +HBF_CHAR user_min_char; +int have_min_char = FALSE; + +@ +@<Opt...@>= + {if(fsearch("nmb_files")) + nmb_files = atoi(Buffer); + if(fsearch("unicode")) + if(Buffer[0] == 'y' || Buffer[0] == 'Y') + unicode = TRUE; + if(fsearch("min_char")) + {user_min_char = strtoul(Buffer, (char **)NULL, 0); + have_min_char = TRUE; + }@# + + if(!mf_like) + {if(fsearch("pk_files")) + if(Buffer[0] == 'n' || Buffer[0] == 'N') + pk_files = FALSE; + if(fsearch("tfm_files")) + if(Buffer[0] == 'n' || Buffer[0] == 'N') + tfm_files = FALSE; + if(fsearch("ofm_file")) + if(Buffer[0] == 'y' || Buffer[0] == 'Y') + ofm_file = TRUE; + if(fsearch("long_extension")) + if(Buffer[0] == 'n' || Buffer[0] == 'N') + long_extension = FALSE; + }@# + + if(fsearch("slant")) + slant = atof(Buffer); + if(slant < 0.0 || slant > 1.0) + {fprintf(stderr, "Invalid slant\n"); + exit(1); + } + if(fsearch("rotation")) + if(Buffer[0] == 'y' || Buffer[0] == 'Y') + rotation = TRUE;@# + + if(fsearch("mag_x")) + mag_x = atof(Buffer); + if(fsearch("mag_y")) + mag_y = atof(Buffer); + if(!mag_x && !mag_y) + {mag_x = 1.0; + mag_y = 1.0; + } + if(mag_x && !mag_y) + mag_y = mag_x; + if(mag_y && !mag_x) + mag_x = mag_y; + if(mag_x <= 0.0) + {fprintf(stderr, "Invalid horizontal magnification\n"); + exit(1); + } + if(mag_y <= 0.0) + {fprintf(stderr, "Invalid vertical magnification\n"); + exit(1); + }@# + + if(fsearch("dpi_x")) + dpi_x = atoi(Buffer); + if(fsearch("dpi_y")) + dpi_y = atoi(Buffer); + if(!dpi_x && !dpi_y) + {dpi_x = 300; + dpi_y = 300; + } + if(dpi_x && !dpi_y) + dpi_y = dpi_x; + if(dpi_y && !dpi_x) + dpi_x = dpi_y; + if(dpi_x <= PRINTER_MIN_RES_X) + {fprintf(stderr, "Invalid horizontal printer resolution\n"); + exit(1); + } + if(dpi_y <= PRINTER_MIN_RES_Y) + {fprintf(stderr, "Invalid vertical printer resolution\n"); + exit(1); + }@# + + if(fsearch("design_size")) + design_size = atof(Buffer);@# + + if(fsearch("x_offset")) + offset_x = atoi(Buffer); + else + offset_x = rotation ? 0 : (boxp->hbf_xDisplacement * mag_x + 0.5); + if(fsearch("y_offset")) + offset_y = atoi(Buffer); + else + offset_y = rotation ? 0 : (boxp->hbf_yDisplacement * mag_y + 0.5); + if(!fsearch("comment")) + comment[0] = '\0'; + else + strcpy(comment, Buffer);@# + + if(fsearch("threshold")) + threshold = atoi(Buffer); + if(threshold <= 0 || threshold >= 255) + {fprintf(stderr, "Invalid threshold\n"); + exit(1); + }@# + + if(!fsearch("checksum")) + checksum = 0; + else + checksum = strtoul(Buffer, (char **)NULL, 0);@# + + if(!fsearch("coding")) + coding[0] = '\0'; + else + strcpy(coding, Buffer);@# + + if(!fsearch("pk_directory")) + pk_directory[0] = '\0'; + else + strcpy(pk_directory, Buffer);@# + + if(!fsearch("tfm_directory")) + tfm_directory[0] = '\0'; + else + strcpy(tfm_directory, Buffer);@# + + if(fsearch("rm_command")) + strcpy(rm_command, Buffer); + else + strcpy(rm_command, "rm");@# + + if(fsearch("cp_command")) + strcpy(cp_command, Buffer); + else + strcpy(cp_command, "cp");@# + + if(!fsearch("job_extension")) + job_extension[0] = '\0'; + else + {strncpy(job_extension, Buffer, EXTENSION_LENGTH); + job_extension[EXTENSION_LENGTH] = '\0'; + } + } + + +@ +The function |hbfGetCodeRange()| is an extension to the HBF API. + +Successive calls return the code ranges in ascending order; we only need the +extrema of the whole code range. + +In case |min_char| has been supplied in the configuration file, we use that +value instead. + +@<Global...@>= +HBF_CHAR min_char, max_char; + + +@ +@<Get code range@>= + {const void *cp; + HBF_CHAR dummy; + + cp = hbfGetCodeRange(hbf, NULL, &min_char, &max_char); + for(; cp != NULL; cp = hbfGetCodeRange(hbf, cp, &dummy, &max_char)) + ;@# + + if(have_min_char) + min_char = user_min_char; + } + + +@ +The function |hbfGetByte2Range()| is an extension to the HBF API. + +Successive calls return the byte~2 ranges in ascending order. We raise +|VALID_SUBCODE| in the array |b2_codes[]| for all characters in subcode +ranges. + +@d VALID_SUBCODE 1 + +@<Global...@>= +char b2_codes[256]; +unsigned char min_2_byte, max_2_byte; +int nmb_2_bytes = 0; + + +@ +@<Get sub code range@>= + {const void *b2r; + unsigned char dummy; + int i; + + for(i = 0; i < 256; i++) + b2_codes[i] = 0;@# + + b2r = hbfGetByte2Range(hbf, NULL, &min_2_byte, &max_2_byte); + dummy = min_2_byte; + for(; b2r != NULL; b2r = hbfGetByte2Range(hbf, b2r, &dummy, &max_2_byte)) + {for(i = dummy; i <= max_2_byte; i++) + b2_codes[i] = VALID_SUBCODE; + }@# + + for(i = 0; i < 256; i++) /* compute the number of valid |b2_codes| */ + if(b2_codes[i] == VALID_SUBCODE) + nmb_2_bytes++; + } + + +@ +This search routine is case insignificant. Each keyword must start a line; +the function checks whether the character before the keyword is a newline +character (|'\n'|). It also checks the presence of a parameter and fills +|Buffer| if existent. |fsearch()| returns~1 on success. + +@<Prototypes@>= +int fsearch(char *); + + +@ +@c +int fsearch(search_string) + char *search_string; + + {char *P, p; + char temp_buffer[STRING_LENGTH + 1]; + char env_name[STRING_LENGTH + 1]; + char *env_p; + char *env_value; + char *Buf_p; + int Ch, ch, old_ch = '\n'; + int count = STRING_LENGTH; + + rewind(config); /* we start at offset~0 */@# + + do + {P = search_string; + p = tolower(*P); + Ch = fgetc(config); + ch = tolower(Ch); + while(!(ch == p && old_ch == '\n') && Ch != EOF) + /* search first character of |search_string|; + |'\n'| must be the character before */ + {old_ch = ch; + Ch = fgetc(config); + ch = tolower(Ch); + }@# + + for(;;) + {if(*(++P) == '\0') + if((Ch = fgetc(config)) == ' ' || Ch == '\t') + /* there must be a space or a tab stop after the keyword */ + goto success; + Ch = fgetc(config); + if(tolower(Ch) != tolower(*P)) + break; + } + } + while(Ch != EOF);@# + + return 0;@# + +success: + P = temp_buffer;@# + + while((Ch = fgetc(config)) == ' ' || Ch == '\t') + /* remove leading blanks and tabs */ + ; + while(Ch != '\n' && --count > 0 && Ch != EOF) /* fill |Buffer| */ + {*P++ = Ch; + Ch = fgetc(config); + } + *P = '\0';@# + + if (*temp_buffer) + @<Check for environment variables@>@; + else + *Buffer = '\0';@# + + return (*Buffer) ? 1 : 0; /* is there something in the buffer? */ + } + + +@ +To make the configuration file more flexible we allow environment variables +in the arguments. We scan the parameter stored in |temp_buffer| whether it +contains a `\.{\$}' character. If yes, the following code fragment tries to +get an environment variable name whose value will be then fetched with +|getenv()|. An environment variable name recognized by \.{hbf2gf} must start +with a letter or underscore; the other characters may be alphanumeric or an +underscore. You can surround the environment variable name with braces to +indicate where the name ends, e.g. \.{\$\{FOO\}}. The interpolated +configuration parameter will be truncated to |STRING_LENGTH| characters. If +you want to have `\.{\$}' you must write `\.{\$\$}'. + +Note that you should avoid to use such environment variables for specifying +the location of the configuration file in case you have support for a file +searching library like kpathsea. Its primary aim is to specify the target +directories for the \.{pk\_directory} and the \.{tfm\_directory} keywords. + +@<Check for environment variables@>= + {P = temp_buffer; + Buf_p = Buffer; + count = STRING_LENGTH - 1;@# + + while(*P && count > 0) + {env_p = env_name;@# + + if(*P == '$') + {P++; + if(*P == '$') + {*(Buf_p++) = *(P++); + count--; + continue; + } + while(*P == '{') @q } @> + P++; + if(!(isalpha(*P) || *P == '_')) + {fprintf(stderr,@/ + "Invalid environment variable name in configuration file\n"); + exit(1); + } + *(env_p++) = *(P++); + while(*P) + {if(isalnum(*P) || *P == '_') + *(env_p++) = *(P++); + else + {@q { @> while(*P == '}') + P++; + *env_p = '\0'; + break; + } + }@# + + env_value = getenv(env_name); + if(env_value) /* append the environment value to |Buffer| */ + {while(*env_value && count > 0) + {*(Buf_p++) = *(env_value++); + count--; + } + } + } + else + {*(Buf_p++) = *(P++); + count--; + } + } + *Buf_p = '\0'; + } + + +@ +If an error occurs, |config_error()| will leave the program with an error +message. + +@<Prototypes@>= +void config_error(char *); + + +@ +@c +void config_error(message) + char *message; + + {fprintf(stderr, "Couldn't find `%s' entry in configuration file\n", + message); + exit(1); + } + + + +@* File searching. + +We support three searching engines: emtexdir, kpathsea, and MiKTeX (which is +a Win32 port of kpathsea). For emtexdir, define |HAVE_EMTEXDIR| while +compiling. For kpathsea, define |HAVE_LIBKPATHSEA|. If you have a version of +kpathsea older than~3.2, define |OLD_KPATHSEA| additionally. For kpathsea +older than~3.0, |VERY_OLD_KPATHSEA| must be also set. For MikTeX, define +|HAVE_MIKTEX|. If none of these macros is defined, a simple |fopen()| will +be used instead. + +@<Include files@>= +#if defined(HAVE_LIBKPATHSEA) +#ifdef VERY_OLD_KPATHSEA +#include "kpathsea/proginit.h" +#include "kpathsea/progname.h" +#include "kpathsea/tex-glyph.h" +#else +#include "kpathsea/kpathsea.h" +#endif@# + +#elif defined(HAVE_EMTEXDIR) +#include "emtexdir.h" + +#elif defined(HAVE_MIKTEX) +#include "miktex.h" +#endif + +@ +@<Global variables@>= +#if defined(HAVE_LIBKPATHSEA) +#ifdef KPSEDLL +/* this is kpathsea 3.3 and newer */ +extern KPSEDLL char *kpathsea_version_string; +#else +extern DllImport char *kpathsea_version_string; +#endif +#elif defined(HAVE_EMTEXDIR) +char emtex_version_string[] = "emTeXdir"; +#elif !defined(HAVE_MIKTEX) +char no_version_string[] = "no search library"; +#endif + + +@ +@<Prototypes@>= +char *TeX_search_version(void); + + +@ +@c +char *TeX_search_version(void) + { +#if defined(HAVE_LIBKPATHSEA) + return kpathsea_version_string; +#elif defined(HAVE_EMTEXDIR) + return emtex_version_string; +#elif defined(HAVE_MIKTEX) + char buf[200]; + + strcpy(buf, "MiKTeX "); + miktex_get_miktex_version_string_ex(buf + 7, sizeof (buf) - 7); + + return buf; +#else + return no_version_string; +#endif + } + + +@ +@s emtex_dir int + +@<Global variables@>= +#ifdef HAVE_EMTEXDIR +struct emtex_dir cfg_path, hbf_path; +#endif + + +@ +@<Prototypes@>= +#ifdef HAVE_EMTEXDIR +extern int setup_list(struct emtex_dir *, char *, const char *, unsigned); +int dir_setup(struct emtex_dir *, const char *, const char *, unsigned); +char *file_find(char *, struct emtex_dir *); +#endif + + +@ +We slightly modify |emtex_dir_setup()| (from the file \.{emtexdir.c}) to +output a warning in case the environment variable |env| isn't set properly. + +@c +#ifdef HAVE_EMTEXDIR +int dir_setup(ed, env, dir, flags) + struct emtex_dir *ed; + const char *env; + const char *dir; + unsigned flags; + + {const char *val; + char path[260]; + + ed->alloc = 0; + ed->used = 0; + ed->list = NULL;@# + + if(env != NULL && (val = getenv(env)) != NULL) + return setup_list(ed, path, val, flags); + else + fprintf(stderr, + "Environment variable `%s' not set; use current directory\n", + env);@# + + return TRUE; + } + + +@ +@<Global variables@>= +char name_buffer[FILE_NAME_LENGTH + 1]; + + +@ +@c +char *file_find(name, list) + char *name; + struct emtex_dir *list; + + {if(emtex_dir_find(name_buffer, sizeof(name_buffer), list, name, EDF_CWD)) + return name_buffer;@# + + return NULL; + } +#endif + + +@ +For emtexdir we use the environment variables \.{HBFCFG} and \.{HBFONTS} for +configuration resp.\ HBF header files. + +@<Initialize \TeX\ file searching@>= +#if defined(HAVE_LIBKPATHSEA) +#ifdef OLD_KPATHSEA + kpse_set_progname(argv[0]); +#else + kpse_set_program_name(argv[0], "hbf2gf"); +#endif@# + +#ifdef VERY_OLD_KPATHSEA + kpse_init_prog("HBF2GF", 300, "cx", true, "cmr10"); +#else + kpse_init_prog("HBF2GF", 300, "cx", "cmr10");@# +#endif@# + +#elif defined(HAVE_EMTEXDIR) + if(!dir_setup(&cfg_path, "HBFCFG", NULL, EDS_BANG)) + {fprintf(stderr, + "Couldn't setup search path for configuration files\n"); + exit(1); + } + if(!dir_setup(&hbf_path, "HBFONTS", NULL, EDS_BANG)) + {fprintf(stderr, + "Couldn't setup search path for HBF header files\n"); + exit(1); + } +#endif + + +@ +Finally, here are the searching routines. A special format in the kpathsea +library for fonts which are neither PostScript nor TrueType (\.{MISCFONTS}) +is available with version~3.3 and newer. For older versions we use the path +for PostScript fonts (\.{T1FONTS}) to find HBF files. Configuration files +are searched in the path specified within \.{TEXCONFIG} for old kpathsea +versions, and within \.{HBF2GFINPUTS} for new versions. + +@<Prototypes@>= +char *TeX_search_cfg_file(char *); +char *TeX_search_hbf_file(char *); + + +@ +@c +#if defined(HAVE_LIBKPATHSEA) +char *TeX_search_cfg_file(name) + char *name; + + { +#ifdef OLD_KPATHSEA + return kpse_find_file(name, kpse_dvips_config_format, TRUE); +#else + return kpse_find_file(name, kpse_program_text_format, TRUE); +#endif + }@# + + +char *TeX_search_hbf_file(name) + char *name; + + { +#ifdef VERY_OLD_KPATHSEA + return kpse_find_file(name, kpse_dvips_header_format, TRUE); +#else +#ifndef KPSEDLL + return kpse_find_file(name, kpse_type1_format, TRUE); +#else + return kpse_find_file(name, kpse_miscfonts_format, TRUE); +#endif +#endif + }@# + + +#elif defined(HAVE_EMTEXDIR) +char *TeX_search_cfg_file(name) + char *name; + + {return file_find(name, &cfg_path); + }@# + + +char *TeX_search_hbf_file(name) + char *name; + + {return file_find(name, &hbf_path); + }@# + + +#elif defined(HAVE_MIKTEX) +char *TeX_search_cfg_file(name) + char *name; + + {char result[_MAX_PATH]; + + if (!miktex_find_input_file("hbf2gf", *name, result)) + return 0; + return strdup(result); + }@# + + +char *TeX_search_hbf_file(name) + char *name; + + {char result[_MAX_PATH]; + + + if (!miktex_find_miscfont_file(*name, result)) + return 0; + return strdup(result); + }@# + + +#else +char *TeX_search_cfg_file(name) + char *name; + + {return name; + }@# + + +char *TeX_search_hbf_file(name) + char *name; + + {return name; + } +#endif + + + +@* An example. +This is the example configuration file \.{b5so12.cfg} (for use with DOS or +OS/2 and the emtexdir searching engine): +\bigskip +\halign{\quad\.{#}\hfil&\quad\.{#}\hfil\cr + hbf\_header & et24.hbf \cr + mag\_x & 2.076 \cr + x\_offset & 3 \cr + y\_offset & -8 \cr + comment & fanti songti 24x24 pixel font scaled and + adapted to 12 pt \cr + & \cr + design\_size & 12.0 \cr + & \cr + nmb\_fonts & -1 \cr + & \cr + output\_name & b5so12 \cr + & \cr + dpi\_x & 300 \cr + checksum & 123456789 \cr + coding & codingscheme Big 5 encoded TeX text \cr + & \cr + long\_extension & no \cr + job\_extension & .cmd \cr + rm\_command & del \cr + cp\_command & copy \cr + pk\_directory & \$HBF\_TARGET\\pk\\360dpi\\ \cr + tfm\_directory & \$HBF\_TARGET\\tfm\\ \cr + } +\bigskip +If you say e.g. +\medskip +\quad \.{set HBF\_TARGET=c:\\emtex\\texfonts} +\medskip +on your DOS prompt (or in your \.{autoexec.bat} file), then the interpolated +value of the \.{tfm\_directory} keyword is \.{c:\\emtex\\texfonts\\tfm\\}. +The HBF header file \.{et24.hbf} will be searched in the path specified by +the \.{HBFCFG} environment variable. +\bigskip +The call +\medskip +\quad \.{hbf2gf b5so12.cfg} +\medskip +creates the files +\medskip +\quad \.{b5so1201.gf}, \.{b5so1202.gf}, $\ldots$ , \.{b5so1255.gf}, +\.{b5so12.pl}, and \.{b5so12.cmd} +\bigskip +After calling +\medskip +\quad \.{b5so12.cmd} +\medskip +you will find the \.{PK} files in the +\.{c:\\emtex\\texfonts\\pk\\360dpi} directory and the \.{TFM} files in +the \.{c:\\emtex\\texfonts\\tfm} directory; all \.{GF} files and +\.{b5so12.pl} will be deleted. +\bigskip +The call +\medskip +\quad \.{hbf2gf -n b5so1220 417} +\medskip +creates two files: +\medskip +\quad \.{b5so1220.gf} and \.{b5so1220.pl} +\medskip +using the configuration file \.{b5so12.cfg}. The \.{GF} file would be +named \.{b5so1220.417gf} if the flag \.{-n} had not been used. + +\medskip + +It is possible to convert bitmap fonts to \.{PK} files almost +automatically. The HBF header file already has the entry +\.{HBF\_BITMAP\_BOUNDING\_BOX} which defines vertical and horizontal offsets +(in pixels), but these values are not in all cases optimal. If you omit +\.{x\_offset} and \.{y\_offset} in the configuration file, the third and +fourth parameter of \.{HBF\_BITMAP\_BOUNDING\_BOX} is used, scaled to design +size (to say it with other words: \.{x\_offset} and \.{y\_offset} will always +apply to the design size to be synchronous with the \.{TFM} files). + +Don't confuse scaling and magnification: Scaling here means that you choose +a (arbitrary) design size and compute scaling values (\.{mag\_x} and +\.{mag\_y}) which scales the bitmap to this particular design size at a +certain (arbitrarily chosen) resolution (\.{dpi\_x} and \.{dpi\_y}). +Magnification means that the scaled bitmap will be then magnified to a +certain target size while still using the font parameters (i.e., the +\.{TFM} file) of the design size. + +In the sample, you have a $24 \times 24$ bitmap font which will be scaled to +$12\,\hbox{pt}$ having a resolution of $300\,\hbox{dpi}$: +\medskip +\quad $1\,\hbox{pt}$ are $300 / 72.27 = 4.1511$ pixel; + +\quad $12\,\hbox{pt}$ are $4.1511 * 12 = 49.813$ pixel; + +\quad thus the theoretical scaling value is $49.813 / 24 = 2.076$. + +\medskip + +But especially for small sizes, this may not be the best value if the font +should harmonize with, say, Knuth's Computer Modern fonts. I recommend to +compute, say, 5~\.{PK} fonts, then check the CJK font with different \TeX\ +fonts to see whether the offsets and/or the scaling value is good. The +greater the design size the finer you can control the offsets---as an +example you could use a design size of $30\,\hbox{pt}$ (nevertheless there +is a compile-time constant |MAX_CHAR_SIZE| which limits the maximal +character size; default is 255~pixels). + +If you have found optimal offsets, you can produce many different +magnifications of the CJK font using the same set of \.{TFM} files +analogous to ordinary \TeX\ fonts; as a simplification, we assume that +\.{PK} files with a resolution of $300\,\hbox{dpi}$ and a design size of +$10\,\hbox{pt}$ have the extension `\.{.300pk}' (respectively come into a +`\.{300dpi}' subdirectory)---this is the reason why in the above example for +the $12\,\hbox{pt}$ design size a `\.{360dpi}' target directory has been +used. Now we can use the following formula: + + $$ \\{needed\_dpi} = \\{your\_horizontal\_resolution} * + {\\{your\_target\_size} \over 10.0} $$ + +Example: assuming that your printer has a resolution of +$300\times400\,\hbox{dpi}$, and you want $14.4\,\hbox{pt}$: + + $$ 300 * {14.4 \over 10.0} = 432 $$ + +The vertical scaling value is $400 / 300 = 1.3333$. Use these values now to +call \.{hbf2gf} in \mf-like mode: + +\quad \.{hbf2gf b5so1220 432 1.3333} + + + +@* Index. diff --git a/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/install-sh b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/install-sh new file mode 100644 index 00000000000..ebc66913e94 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/install-sh @@ -0,0 +1,250 @@ +#! /bin/sh +# +# install - install a program, script, or datafile +# This comes from X11R5 (mit/util/scripts/install.sh). +# +# Copyright 1991 by the Massachusetts Institute of Technology +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of M.I.T. not be used in advertising or +# publicity pertaining to distribution of the software without specific, +# written prior permission. M.I.T. makes no representations about the +# suitability of this software for any purpose. It is provided "as is" +# without express or implied warranty. +# +# Calling this script install-sh is preferred over install.sh, to prevent +# `make' implicit rules from creating a file called install from it +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. It can only install one file at a time, a restriction +# shared with many OS's install programs. + + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit="${DOITPROG-}" + + +# put in absolute paths if you don't have them in your path; or use env. vars. + +mvprog="${MVPROG-mv}" +cpprog="${CPPROG-cp}" +chmodprog="${CHMODPROG-chmod}" +chownprog="${CHOWNPROG-chown}" +chgrpprog="${CHGRPPROG-chgrp}" +stripprog="${STRIPPROG-strip}" +rmprog="${RMPROG-rm}" +mkdirprog="${MKDIRPROG-mkdir}" + +transformbasename="" +transform_arg="" +instcmd="$mvprog" +chmodcmd="$chmodprog 0755" +chowncmd="" +chgrpcmd="" +stripcmd="" +rmcmd="$rmprog -f" +mvcmd="$mvprog" +src="" +dst="" +dir_arg="" + +while [ x"$1" != x ]; do + case $1 in + -c) instcmd="$cpprog" + shift + continue;; + + -d) dir_arg=true + shift + continue;; + + -m) chmodcmd="$chmodprog $2" + shift + shift + continue;; + + -o) chowncmd="$chownprog $2" + shift + shift + continue;; + + -g) chgrpcmd="$chgrpprog $2" + shift + shift + continue;; + + -s) stripcmd="$stripprog" + shift + continue;; + + -t=*) transformarg=`echo $1 | sed 's/-t=//'` + shift + continue;; + + -b=*) transformbasename=`echo $1 | sed 's/-b=//'` + shift + continue;; + + *) if [ x"$src" = x ] + then + src=$1 + else + # this colon is to work around a 386BSD /bin/sh bug + : + dst=$1 + fi + shift + continue;; + esac +done + +if [ x"$src" = x ] +then + echo "install: no input file specified" + exit 1 +else + true +fi + +if [ x"$dir_arg" != x ]; then + dst=$src + src="" + + if [ -d $dst ]; then + instcmd=: + else + instcmd=mkdir + fi +else + +# Waiting for this to be detected by the "$instcmd $src $dsttmp" command +# might cause directories to be created, which would be especially bad +# if $src (and thus $dsttmp) contains '*'. + + if [ -f $src -o -d $src ] + then + true + else + echo "install: $src does not exist" + exit 1 + fi + + if [ x"$dst" = x ] + then + echo "install: no destination specified" + exit 1 + else + true + fi + +# If destination is a directory, append the input filename; if your system +# does not like double slashes in filenames, you may need to add some logic + + if [ -d $dst ] + then + dst="$dst"/`basename $src` + else + true + fi +fi + +## this sed command emulates the dirname command +dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` + +# Make sure that the destination directory exists. +# this part is taken from Noah Friedman's mkinstalldirs script + +# Skip lots of stat calls in the usual case. +if [ ! -d "$dstdir" ]; then +defaultIFS=' +' +IFS="${IFS-${defaultIFS}}" + +oIFS="${IFS}" +# Some sh's can't handle IFS=/ for some reason. +IFS='%' +set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` +IFS="${oIFS}" + +pathcomp='' + +while [ $# -ne 0 ] ; do + pathcomp="${pathcomp}${1}" + shift + + if [ ! -d "${pathcomp}" ] ; + then + $mkdirprog "${pathcomp}" + else + true + fi + + pathcomp="${pathcomp}/" +done +fi + +if [ x"$dir_arg" != x ] +then + $doit $instcmd $dst && + + if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && + if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi +else + +# If we're going to rename the final executable, determine the name now. + + if [ x"$transformarg" = x ] + then + dstfile=`basename $dst` + else + dstfile=`basename $dst $transformbasename | + sed $transformarg`$transformbasename + fi + +# don't allow the sed command to completely eliminate the filename + + if [ x"$dstfile" = x ] + then + dstfile=`basename $dst` + else + true + fi + +# Make a temp file name in the proper directory. + + dsttmp=$dstdir/#inst.$$# + +# Move or copy the file name to the temp name + + $doit $instcmd $src $dsttmp && + + trap "rm -f ${dsttmp}" 0 && + +# and set any options; do chmod last to preserve setuid bits + +# If any of these fail, we abort the whole thing. If we want to +# ignore errors from any of these, just make sure not to ignore +# errors from the above "$doit $instcmd $src $dsttmp" command. + + if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && + if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && + +# Now rename the file to the real destination. + + $doit $rmcmd -f $dstdir/$dstfile && + $doit $mvcmd $dsttmp $dstdir/$dstfile + +fi && + + +exit 0 diff --git a/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/mkinstalldirs b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/mkinstalldirs new file mode 100644 index 00000000000..91f6d04e17c --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/mkinstalldirs @@ -0,0 +1,32 @@ +#!/bin/sh +# mkinstalldirs --- make directory hierarchy +# Author: Noah Friedman <friedman@prep.ai.mit.edu> +# Created: 1993-05-16 +# Last modified: 1994-03-25 +# Public domain + +errstatus=0 + +for file in ${1+"$@"} ; do + set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` + shift + + pathcomp= + for d in ${1+"$@"} ; do + pathcomp="$pathcomp$d" + case "$pathcomp" in + -* ) pathcomp=./$pathcomp ;; + esac + + if test ! -d "$pathcomp"; then + echo "mkdir $pathcomp" 1>&2 + mkdir "$pathcomp" || errstatus=$? + fi + + pathcomp="$pathcomp/" + done +done + +exit $errstatus + +# mkinstalldirs ends here diff --git a/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/scripts/teTeX-0.4/MakeTeXPK.diff b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/scripts/teTeX-0.4/MakeTeXPK.diff new file mode 100644 index 00000000000..02f6250898a --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/scripts/teTeX-0.4/MakeTeXPK.diff @@ -0,0 +1,63 @@ +--- MakeTeXPK.orig Sun Feb 23 22:12:05 1997 ++++ MakeTeXPK Tue Aug 18 08:07:40 1998 +@@ -80,18 +80,57 @@ + : ${MAKETEXDIR=$TEXMF/maketex} + export TEXMF MAKETEXDIR + ++unset cmd ++ ++# test for TTF fonts ++if test -z "$cmd"; then ++ ttf2pk -q $NAME $DPI ++ errstatus=$? ++ ++ if test $errstatus -ne 2; then ++ if test $errstatus -ne 0; then ++ echo "ttf2pk failed" >&2 ++ exit 1 ++ fi ++ MODE=ttf2pk # preferred mode for TDS would be `modeless' ++ cmd=true ++ fi ++fi ++ ++# test for HBF fonts ++if test -z "$cmd"; then ++ hbf2gf -q -p $NAME $DPI ++ errstatus=$? ++ ++ if test $errstatus -ne 2; then ++ if test $errstatus -ne 0; then ++ echo "hbf2gf failed" >&2 ++ exit 1 ++ fi ++ MODE=hbf2gf # preferred mode for TDS would be `modeless' ++ cmd=true ++ fi ++fi ++ ++unset psline ++ + # grep for the font in $PSMAPFILE, if some ps-to-pk is claimed to be supported. + # We have to figure out the name of the base font -- $NAME is probably + # something like pplr, but it's rpplr or pplr0 or pplr8r that's in psfonts.map. +-pattern="^r?$NAME"'(0|8r)?([ ]|$)' +-psline=`egrep "$pattern" $PSMAPFILE` ++if test -z "$cmd"; then ++ pattern="^r?$NAME"'(0|8r)?([ ]|$)' ++ psline=`egrep "$pattern" $PSMAPFILE` ++fi ++ + if test -n "$psline"; then + cmd="gsftopk $NAME $DPI" + MODE=gsftopk + # some installations have set up gs in such a way that creating files + # is only allowed if the parameter -DNOSAFER is used: + GS_OPTIONS=-DNOSAFER; export GS_OPTIONS +-else ++fi ++ ++if test -z "$cmd"; then + # If an explicit mode is not supplied, try to guess. You can get a + # list of extant modes from ftp.cs.umb.edu:pub/tex/modes.mf. + if test -z "$MODE" || test "$MODE" = default; then diff --git a/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/scripts/teTeX-0.4/MakeTeXTFM.diff b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/scripts/teTeX-0.4/MakeTeXTFM.diff new file mode 100644 index 00000000000..52cd52e1c1d --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/scripts/teTeX-0.4/MakeTeXTFM.diff @@ -0,0 +1,28 @@ +--- MakeTeXTFM.orig Mon Feb 10 22:40:31 1997 ++++ MakeTeXTFM Tue Aug 18 08:14:40 1998 +@@ -48,7 +48,24 @@ + BDPI=${MT_DEF_BDPI-600} + DPI=$BDPI + +-cmd="mf \mode:=$MODE; mag:=$MAG; scrollmode; input $NAME" ++unset cmd ++ ++# test for CJK bitmap font in HBF format ++hbf2gf -q $NAME $DPI ++errstatus=$? ++ ++if test $errstatus -ne 2; then ++ if test $errstatus -ne 0; then ++ echo "$progname: \`hbf2gf failed." >&2 ++ exit 1 ++ fi ++ pltotf ./$NAME.pl $TFMNAME || exit 1 ++ cmd=true ++fi ++ ++if test -z "$cmd"; then ++ cmd="mf \mode:=$MODE; mag:=$MAG; scrollmode; input $NAME" ++fi + + set x `MakeTeXnames $NAME $DPI $MODE $DEST` + PKDEST=$2 diff --git a/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/scripts/web2c-6.1/MakeTeXPK.diff b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/scripts/web2c-6.1/MakeTeXPK.diff new file mode 100644 index 00000000000..0536dbc7a4a --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/scripts/web2c-6.1/MakeTeXPK.diff @@ -0,0 +1,75 @@ +--- MakeTeXPK.orig Sun Aug 16 08:05:07 1998 ++++ MakeTeXPK Tue Aug 18 07:53:57 1998 +@@ -1,5 +1,5 @@ + #!/bin/sh +-# original MakeTeXPK -- make a new PK font, because one wasn't found. ++# MakeTeXPK -- make a new PK font, because one wasn't found. + # Version of 12dec94. + # + # (If you change or delete the word `original' on the previous line, +@@ -142,11 +142,52 @@ + test -d $TEMPDIR || mkdir $TEMPDIR + cd $TEMPDIR || exit 1 + ++unset cmd ++ ++# test for TTF fonts ++if test -z "$cmd"; then ++ ttf2pk -q $NAME $DPI ++ errstatus=$? ++ ++ if test $errstatus -ne 2; then ++ if test $errstatus -ne 0; then ++ echo "ttf2pk failed" >&2 ++ exit 1 ++ fi ++ test -z "$6" && DESTDIR="$DESTROOT/ttf2pk" # preferred mode for TDS ++ # would be `modeless' ++ echo "Successful call to ttf2pk" >&2 ++ cmd=ttf2pk ++ fi ++fi ++ ++# test for HBF fonts ++if test -z "$cmd"; then ++ hbf2gf -q -p $NAME $DPI ++ errstatus=$? ++ ++ if test $errstatus -ne 2; then ++ if test $errstatus -ne 0; then ++ echo "hbf2gf failed" >&2 ++ exit 1 ++ fi ++ test -z "$6" && DESTDIR="$DESTROOT/hbf2gf" # preferred mode for TDS ++ # would be `modeless' ++ echo "Successful call to hbf2gf" >&2 ++ cmd=hbf2gf ++ ++ gftopk ./$GFNAME $PKNAME || exit 1 ++ fi ++fi ++ + # grep for the font in $PSMAPFILE, if some ps-to-pk is claimed to be supported. + # We have to figure out the name of the base font -- $NAME is probably + # something like pplr, but it's rpplr or pplr0 or pplr8r that's in psfonts.map. +-pattern="^r?$NAME"'(0|8r)?([ ]|$)' +-test -n "$ps_to_pk" && egrep "$pattern" $PSMAPFILE >psline ++if test -z "$cmd"; then ++ pattern="^r?$NAME"'(0|8r)?([ ]|$)' ++ test -n "$ps_to_pk" && egrep "$pattern" $PSMAPFILE > psline ++fi ++ + if test -s psline; then + # This is a PostScript font. + MODE=$ps_to_pk +@@ -173,8 +214,9 @@ + export DVIPSHEADERS + echo "$0: Running $cmd" >&2 + $cmd >&2 || { echo "$0: $ps_to_pk failed." >&2; exit 1; } ++fi + +-else ++if test -z "$cmd"; then + # Try Metafont. + MFINPUTS="$MFINPUTS:$SAVEPWD" + export MFINPUTS diff --git a/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/scripts/web2c-6.1/README b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/scripts/web2c-6.1/README new file mode 100644 index 00000000000..eb12bec7a33 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/scripts/web2c-6.1/README @@ -0,0 +1 @@ +This is for web2c-6.1 with the patch for kpathsea 2.6 diff --git a/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/scripts/web2c-7.0/MakeTeXPK.diff b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/scripts/web2c-7.0/MakeTeXPK.diff new file mode 100644 index 00000000000..23f7cb58fed --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/scripts/web2c-7.0/MakeTeXPK.diff @@ -0,0 +1,67 @@ +--- MakeTeXPK.orig Sat Feb 8 15:52:00 1997 ++++ MakeTeXPK Tue Aug 18 07:58:22 1998 +@@ -1,5 +1,5 @@ + #!/bin/sh +-# original MakeTeXPK -- make a new PK font, because one wasn't found. ++# MakeTeXPK -- make a new PK font, because one wasn't found. + # + # (If you change or delete the word `original' on the previous line, + # installation won't write this script over yours.) +@@ -44,15 +44,54 @@ + MODE=$5 + DEST=$6 + ++unset cmd ++ ++# test for TTF fonts ++if test -z "$cmd"; then ++ ttf2pk -q $NAME $DPI ++ errstatus=$? ++ ++ if test $errstatus -ne 2; then ++ if test $errstatus -ne 0; then ++ echo "ttf2pk failed" >&2 ++ exit 1 ++ fi ++ MODE=modeless ++ cmd=true ++ fi ++fi ++ ++# test for HBF fonts ++if test -z "$cmd"; then ++ hbf2gf -q -p $NAME $DPI ++ errstatus=$? ++ ++ if test $errstatus -ne 2; then ++ if test $errstatus -ne 0; then ++ echo "hbf2gf failed" >&2 ++ exit 1 ++ fi ++ MODE=modeless ++ cmd=true ++ fi ++fi ++ ++unset psline ++ + # grep for the font in $PSMAPFILE. These are base font names, such as + # rpplr (the original) or pplr0 (an interim step) or pplr8r (current). +-pattern="^r?$NAME"'(0|8r)?([ ]|$)' +-psline=`egrep "$pattern" $PSMAPFILE` ++if test -z "$cmd"; then ++ pattern="^r?$NAME"'(0|8r)?([ ]|$)' ++ psline=`egrep "$pattern" $PSMAPFILE` ++fi ++ + if test -n "$psline"; then + MODE=modeless + # ps_to_pk set in MakeTeXcommon and/or MakeTeX.site. + cmd="$ps_to_pk $NAME $DPI" +-else ++fi ++ ++if test -z "$cmd"; then + # Check that $BDPI and $MODE are consistent; if not, ignore the mode and + # hope we can correctly guess it from bdpi. (People like to specify the + # resolution on the command line, not the mode so much.) diff --git a/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/scripts/web2c-7.0/MakeTeXTFM.diff b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/scripts/web2c-7.0/MakeTeXTFM.diff new file mode 100644 index 00000000000..a67df4e14b1 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/scripts/web2c-7.0/MakeTeXTFM.diff @@ -0,0 +1,36 @@ +--- MakeTeXTFM.orig Sat Feb 8 15:52:00 1997 ++++ MakeTeXTFM Sun Aug 16 15:41:39 1998 +@@ -1,5 +1,5 @@ + #!/bin/sh +-# original MakeTeXTFM -- make a new TFM file, because one wasn't found. ++# MakeTeXTFM -- make a new TFM file, because one wasn't found. + # + # (If you change or delete the word `original' on the previous line, + # installation won't write this script over yours.) +@@ -50,7 +50,25 @@ + exit 1 + fi + +-cmd="mf \mode:=$MODE; mag:=$MAG; scrollmode; input $NAME" ++unset cmd ++ ++# test for CJK bitmap font in HBF format ++hbf2gf -q $NAME $DPI ++errstatus=$? ++ ++if test $errstatus -ne 2; then ++ if test $errstatus -ne 0; then ++ echo "$progname: \`hbf2gf failed." >&2 ++ exit 1 ++ fi ++ pltotf ./$NAME.pl $TFMNAME || exit 1 ++ cmd=true ++fi ++ ++if test -z "$cmd"; then ++ cmd="mf \mode:=$MODE; mag:=$MAG; scrollmode; input $NAME" ++fi ++ + echo "$0: Running $cmd" + $cmd </dev/null + test -r $TFMNAME || { echo "$0: \`$cmd' failed to make $TFMNAME."; exit 1; } diff --git a/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/scripts/web2c-7.1/MakeTeXPK.diff b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/scripts/web2c-7.1/MakeTeXPK.diff new file mode 100644 index 00000000000..1faf078adb3 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/scripts/web2c-7.1/MakeTeXPK.diff @@ -0,0 +1,72 @@ +--- MakeTeXPK.orig Fri Oct 31 09:30:54 1997 ++++ MakeTeXPK Tue Aug 18 08:01:33 1998 +@@ -1,5 +1,5 @@ + #!/bin/sh +-# original MakeTeXPK -- make a new PK font, because one wasn't found. ++# MakeTeXPK -- make a new PK font, because one wasn't found. + # + # (If you change or delete the word `original' on the previous line, + # installation won't write this script over yours.) +@@ -57,11 +57,48 @@ + MODE=$5 + DEST=$6 + ++unset cmd ++ ++# test for TTF fonts ++if test -z "$cmd"; then ++ ttf2pk -q $NAME $DPI ++ errstatus=$? ++ ++ if test $errstatus -ne 2; then ++ if test $errstatus -ne 0; then ++ echo "ttf2pk failed" >&2 ++ exit 1 ++ fi ++ MODE=modeless ++ cmd=true ++ fi ++fi ++ ++# test for HBF fonts ++if test -z "$cmd"; then ++ hbf2gf -q -p $NAME $DPI ++ errstatus=$? ++ ++ if test $errstatus -ne 2; then ++ if test $errstatus -ne 0; then ++ echo "hbf2gf failed" >&2 ++ exit 1 ++ fi ++ MODE=modeless ++ cmd=true ++ fi ++fi ++ ++unset psline ++ + # grep for the font in $PSMAPFILE. These are base font names, such as + # rpplr (the original) or pplr0 (an interim step) or pplr8r (current). +-: ${PSMAPFILE=`kpsewhich psfonts.map`} +-pattern="^$NAME"'([ ]|$)' +-psline=`egrep "$pattern" $PSMAPFILE` ++if test -z "$cmd"; then ++ : ${PSMAPFILE=`kpsewhich psfonts.map`} ++ pattern="^r?$NAME"'(0|8r)?([ ]|$)' ++ psline=`egrep "$pattern" $PSMAPFILE` ++fi ++ + if test -n "$psline"; then + MODE=modeless + # ps_to_pk is set in MakeTeX.cnf +@@ -100,7 +137,9 @@ + cmd="$ps_to_pk $NAME $DPI" + ;; + esac +-else ++fi ++ ++if test -z "$cmd"; then + # Check that $BDPI and $MODE are consistent; if not, ignore the mode and + # hope we can correctly guess it from bdpi. (People like to specify the + # resolution on the command line, not the mode so much.) diff --git a/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/scripts/web2c-7.1/MakeTeXTFM.diff b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/scripts/web2c-7.1/MakeTeXTFM.diff new file mode 100644 index 00000000000..3fd17f94539 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/scripts/web2c-7.1/MakeTeXTFM.diff @@ -0,0 +1,36 @@ +--- MakeTeXTFM.orig Tue Oct 21 21:22:12 1997 ++++ MakeTeXTFM Sun Aug 16 15:51:20 1998 +@@ -1,5 +1,5 @@ + #!/bin/sh +-# original MakeTeXTFM -- make a new TFM file, because one wasn't found. ++# MakeTeXTFM -- make a new TFM file, because one wasn't found. + # + # (If you change or delete the word `original' on the previous line, + # installation won't write this script over yours.) +@@ -53,7 +53,25 @@ + exit 1 + fi + +-cmd="mf \mode:=$MODE; mag:=$MAG; scrollmode; input $NAME" ++unset cmd ++ ++# test for CJK bitmap font in HBF format ++hbf2gf -q $NAME $DPI ++errstatus=$? ++ ++if test $errstatus -ne 2; then ++ if test $errstatus -ne 0; then ++ echo "$progname: \`hbf2gf failed." >&2 ++ exit 1 ++ fi ++ pltotf ./$NAME.pl $TFMNAME || exit 1 ++ cmd=true ++fi ++ ++if test -z "$cmd"; then ++ cmd="mf \mode:=$MODE; mag:=$MAG; scrollmode; input $NAME" ++fi ++ + echo "$progname: Running $cmd" + + $cmd </dev/null || { diff --git a/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/scripts/web2c-7.2/mktexpk.diff b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/scripts/web2c-7.2/mktexpk.diff new file mode 100644 index 00000000000..ac703fd7d39 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/scripts/web2c-7.2/mktexpk.diff @@ -0,0 +1,72 @@ +--- mktexpk.orig Fri Feb 20 16:23:22 1998 ++++ mktexpk Tue Aug 18 08:04:40 1998 +@@ -1,5 +1,5 @@ + #!/bin/sh +-# original mktexpk -- make a new PK font, because one wasn't found. ++# mktexpk -- make a new PK font, because one wasn't found. + # + # (If you change or delete the word `original' on the previous line, + # installation won't write this script over yours.) +@@ -73,11 +73,48 @@ + + NAME=$1 + ++unset cmd ++ ++# test for TTF fonts ++if test -z "$cmd"; then ++ ttf2pk -q $NAME $DPI ++ errstatus=$? ++ ++ if test $errstatus -ne 2; then ++ if test $errstatus -ne 0; then ++ echo "ttf2pk failed" >&2 ++ exit 1 ++ fi ++ MODE=modeless ++ cmd=true ++ fi ++fi ++ ++# test for HBF fonts ++if test -z "$cmd"; then ++ hbf2gf -q -p $NAME $DPI ++ errstatus=$? ++ ++ if test $errstatus -ne 2; then ++ if test $errstatus -ne 0; then ++ echo "hbf2gf failed" >&2 ++ exit 1 ++ fi ++ MODE=modeless ++ cmd=true ++ fi ++fi ++ ++unset psline ++ + # grep for the font in $PSMAPFILE. These are base font names, such as + # rpplr (the original) or pplr0 (an interim step) or pplr8r (current). +-: ${PSMAPFILE=`kpsewhich psfonts.map`} +-pattern="^$NAME"'([ ]|$)' +-psline=`egrep "$pattern" $PSMAPFILE` ++if test -z "$cmd"; then ++ : ${PSMAPFILE=`kpsewhich psfonts.map`} ++ pattern="^r?$NAME"'(0|8r)?([ ]|$)' ++ psline=`egrep "$pattern" $PSMAPFILE` ++fi ++ + if test -n "$psline"; then + MODE=modeless + # ps_to_pk is set in mktex.opt +@@ -116,7 +153,9 @@ + cmd="$ps_to_pk $NAME $DPI" + ;; + esac +-else ++fi ++ ++if test -z "$cmd"; then + # Check that $BDPI and $MODE are consistent; if not, ignore the mode and + # hope we can correctly guess it from bdpi. (People like to specify the + # resolution on the command line, not the mode so much.) diff --git a/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/scripts/web2c-7.2/mktextfm.diff b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/scripts/web2c-7.2/mktextfm.diff new file mode 100644 index 00000000000..b7bf872e8cc --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/hbf2gf/scripts/web2c-7.2/mktextfm.diff @@ -0,0 +1,36 @@ +--- mktextfm.orig Mon Feb 16 08:56:13 1998 ++++ mktextfm Tue Aug 18 06:13:22 1998 +@@ -1,5 +1,5 @@ + #!/bin/sh +-# original mktextfm -- make a new TFM file, because one wasn't found. ++# mktextfm -- make a new TFM file, because one wasn't found. + # + # (If you change or delete the word `original' on the previous line, + # installation won't write this script over yours.) +@@ -70,7 +70,25 @@ + exit 1 + fi + +-cmd="mf \mode:=$MODE; mag:=$MAG; nonstopmode; input $NAME" ++unset cmd ++ ++# test for CJK bitmap font in HBF format ++hbf2gf -q $NAME $DPI ++errstatus=$? ++ ++if test $errstatus -ne 2; then ++ if test $errstatus -ne 0; then ++ echo "$progname: \`hbf2gf failed." >&2 ++ exit 1 ++ fi ++ pltotf ./$NAME.pl $TFMNAME || exit 1 ++ cmd=true ++fi ++ ++if test -z "$cmd"; then ++ cmd="mf \mode:=$MODE; mag:=$MAG; nonstopmode; input $NAME" ++fi ++ + echo "$progname: Running $cmd" + + $cmd </dev/null || { diff --git a/Master/texmf-dist/source/latex/cjk/utils/lisp/cjkspace.el b/Master/texmf-dist/source/latex/cjk/utils/lisp/cjkspace.el new file mode 100644 index 00000000000..ac99e86ec95 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/lisp/cjkspace.el @@ -0,0 +1,102 @@ +;;; cjkspace.el --- provide a tilde character if you type a space. +;;; use this file with AUCTeX. + +;; Copyright (C) 1994-2008 Werner Lemberg <wl@gnu.org> +;; +;; 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 in doc/COPYING; if not, write to the Free +;; Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +;; MA 02110-1301 USA + +;; This file is part of the CJK package Version 4.8.0 (22-May-2008) + +;; Insert tilde characters instead of spaces for LaTeX CJK documents. +;; If `CJK-space-after-space' is non-nil, typing a space yields a space. +;; Typing two consecutive spaces yields a tilde. If `CJK-space-after-space' +;; is nil, the behaviour is reversed. +;; +;; You should put the following in your .emacs file (additionally to the +;; common AUCTeX adaptations): +;; +;; (autoload 'CJK-insert-space "cjkspace" +;; "Insert tildes appropriately in CJK document." t) +;; (defun my-LaTeX-mode-hook () +;; "Key definitions for LaTeX mode." +;; (define-key LaTeX-mode-map " " 'CJK-insert-space) +;; ) +;; (add-hook 'LaTeX-mode-hook 'my-LaTeX-mode-hook) + + +;;; Code: + +(provide 'cjkspace) + + +(defvar CJK-space "~") + +(defvar CJK-space-after-space nil + + "*If non-nil, typing a space yields a space. Typing two consecutive +spaces yields a tilde. If nil the behaviour is reversed.") + +(make-variable-buffer-local 'CJK-space-after-space) + + +;;;###autoload +(defun CJK-insert-space (arg) + + "Insert tilde characters instead of spaces for LaTeX CJK documents. +If `CJK-space-after-space' is non-nil, typing a space yields a space. +Typing two consecutive spaces yields a tilde. If `CJK-space-after-space' +is nil, the behaviour is reversed. + +With prefix argument, always inserts space characters." + + (interactive "*P") + + (if arg + (self-insert-command (prefix-numeric-value arg)) + (TeX-update-style) + (if CJK-space-after-space + (insert (cond ((bobp) + ?\ ) + ((not (= (preceding-char) ?\ )) + ?\ ) + ((and (> (point) 2) + (save-excursion + (forward-char -2) + (looking-at (concat "[" CJK-space + (regexp-quote TeX-esc) "]")))) + ?\ ) + (t + (delete-backward-char 1) + CJK-space))) + (insert (cond ((bobp) + ?\ ) + ((= (preceding-char) (string-to-char TeX-esc)) + ?\ ) + ((= (preceding-char) ?\ ) + ?\ ) + ((and (> (point) 2) + (save-excursion + (forward-char -2) + (looking-at (concat (regexp-quote TeX-esc) + CJK-space)))) + CJK-space) + ((= (preceding-char) (string-to-char CJK-space)) + (delete-backward-char 1) + ?\ ) + (t + CJK-space)))))) + +;;; EOF diff --git a/Master/texmf-dist/source/latex/cjk/utils/lisp/cjktilde.el b/Master/texmf-dist/source/latex/cjk/utils/lisp/cjktilde.el new file mode 100644 index 00000000000..d709cbeb0e2 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/lisp/cjktilde.el @@ -0,0 +1,111 @@ +;;; cjktilde.el -- minor mode exchanging `~' and ` ' keys. + +;; Copyright (C) 1994-2008 Werner Lemberg <wl@gnu.org> +;; +;; 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 in doc/COPYING; if not, write to the Free +;; Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +;; MA 02110-1301 USA + +;; This file is part of the CJK package Version 4.8.0 (22-May-2008) + +;; Function `cjk-tilde-mode' activates a minor mode (`cjk-tilde-minor-mode') +;; which exchanges the tilde key with the space key. This is useful for +;; writing Chinese or Japanese with the CJK macro package for LaTeX 2e which +;; redefines the `~' command to insert a shibuaki space (see documentation +;; of the \CJKtilde macro for further details). + +;;; Code: + +(provide 'cjktilde) + + +(defvar cjk-tilde-minor-mode nil + + "*Non-nil enables CJK tilde mode. +Setting this variable makes it local to the current buffer. +See `cjk-tilde-mode' for details.") + +(make-variable-buffer-local 'cjk-tilde-minor-mode) + + +;; the following two functions do the exchange. +(defun electric-cjk-tilde (arg) + + "insert space if tilde key is pressed provided cjk-tilde-minor-mode is +activated." + + (if cjk-tilde-minor-mode + (char-to-string ?\ ) + (char-to-string ?\~) + ) +) + + +(defun electric-cjk-space (arg) + + "insert tilde if space key is pressed provided cjk-tilde-minor-mode is +activated." + + (if cjk-tilde-minor-mode + (char-to-string ?\~) + (char-to-string ?\ ) + ) +) + + +(or key-translation-map (setq key-translation-map (make-sparse-keymap))) + +(define-key key-translation-map " " 'electric-cjk-space) +(define-key key-translation-map "~" 'electric-cjk-tilde) + + +;; we indicate the minor mode in the mode line. +(or (assq 'cjk-tilde-minor-mode minor-mode-map-alist) + (setq minor-mode-alist + (append minor-mode-alist + '((cjk-tilde-minor-mode " ~")) + ) + ) +) + +;;;###autoload +(defun cjk-tilde-mode (&optional arg) + + "Toggle CJK tilde mode. If enabled, a tilde character will be inserted if +the space key is pressed and vice versa. + +Use with caution! This minor mode makes only sense for CJK environments +after insertion of the \\CJKtilde command. See the documentation of the +CJK package for further details. + +With an argument, a positive argument enables CJK tilde mode, +and a negative argument disables it." + + (interactive "P") + + (if (if arg + ;; negative arg: switch off + (<= (prefix-numeric-value arg) 0) + ;; no arg: toggle + cjk-tilde-minor-mode) + (setq cjk-tilde-minor-mode nil) + + ;; positive arg: switch on + (setq cjk-tilde-minor-mode t) + ) + (force-mode-line-update) +) + + +;;; end of cjktilde.el diff --git a/Master/texmf-dist/source/latex/cjk/utils/lisp/emacs/cjk-enc.el b/Master/texmf-dist/source/latex/cjk/utils/lisp/emacs/cjk-enc.el new file mode 100644 index 00000000000..32b7887153d --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/lisp/emacs/cjk-enc.el @@ -0,0 +1,1100 @@ +;;; cjk-enc.el --- provide a coding system for LaTeX2e CJK package + +;; Copyright (C) 1996-2000 Electrotechnical Laboratory, JAPAN. + +;; Author: Kenichi HANDA <handa@etl.go.jp> +;; Werner LEMBERG <wl@gnu.org> + +;; Keywords: CJK package, LaTeX2e, emacs, xemacs + +;; 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, 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 GNU Emacs; see the file COPYING. If not, write to +;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + +;; +;; CJK Version 4.8.0 (22-May-2008) +;; + +;;; Code + +;; This file will work with both Emacs (>=20.3) and XEmacs (>=21). In +;; the following `Emacs' is used for both Emacs and XEmacs except where +;; it differs. + +;; XXX: Thai stuff not yet ported to XEmacs. I don't know whether it +;; makes sense currently to support it because the Thai implementation +;; in XEmacs (version 21.1 and probably the upcoming 21.2) is not +;; complete: For example, there is no correct display handling of IR +;; 166 (this is the right part of TIS-620) in an ISO-2022 data stream, +;; decomposition of precomposed Thai (in xtis character set) doesn't +;; provide linguistic properties, etc. + +;; The following tables map from Emacs's character sets to LaTeX2e +;; macros. Note that not all macros defined here really do exist. See +;; MULEenc.sty and cjk-enc.txt for further details. +;; +;; MULEenc.sty makes TeX character 0x7F `active' and assigns to it a +;; multiplex command which executes its first argument. To make the +;; macro expansion robust against \uppercase and \lowercase, only +;; numbers are used as parameters which index the various commands. +;; +;; 0x7F will be used as a parameter delimiting character also. +;; +(defconst cjk-latin-1 + [;0xa0 + "99\177" "1\177" "2\177" "3\177" + "4\177" "5\177" "6\177" "7\177" + "8\177\\ " "9\177" "10\177" "11\177" + "12\177" "0\177-{}" "14\177" "15\177\\ " + + ; 0xb0 + "16\177" "17\177" "18\177" "19\177" + "20\177\\ " "21\177" "22\177" "23\177" + "24\177\\ " "25\177" "26\177" "27\177" + "28\177" "29\177" "30\177" "31\177" + + ; 0xc0 + "32\177A" "20\177A" "33\177A" "34\177A" + "8\177A" "0\177\\AA" "0\177\\AE" "24\177C" + "32\177E" "20\177E" "33\177E" "8\177E" + "32\177I" "20\177I" "33\177I" "8\177I" + + ; 0xd0 + "0\177\\DJ" "34\177N" "32\177O" "20\177O" + "33\177O" "34\177O" "8\177O" "38\177" + "0\177\\O" "32\177U" "20\177U" "33\177U" + "8\177U" "20\177Y" "0\177\\TH" "0\177\\ss" + + ; 0xe0 + "32\177a" "20\177a" "33\177a" "34\177a" + "8\177a" "0\177\\aa" "0\177\\ae" "24\177c" + "32\177e" "20\177e" "33\177e" "8\177e" + "32\177\\i" "20\177\\i" "33\177\\i" "8\177\\i" + + ; 0xf0 + "0\177\\dj" "34\177n" "32\177o" "20\177o" + "33\177o" "34\177o" "8\177o" "45\177" + "0\177\\o" "32\177u" "20\177u" "33\177u" + "8\177u" "20\177y" "0\177\\th" "8\177y" + ]) + +(defconst cjk-latin-2 + [; 0xa0 + "99\177" "48\177A" "49\177\\ " "0\177\\L" + "4\177" "51\177L" "20\177S" "7\177" + "8\177\\ " "51\177S" "24\177S" "51\177T" + "20\177Z" "0\177-{}" "51\177Z" "52\177Z" + + ; 0xb0 + "16\177" "48\177a" "48\177\\ " "0\177\\l" + "20\177\\ " "51\177l" "20\177s" "51\177\\ " + "24\177\\ " "51\177s" "24\177s" "51\177t" + "20\177z" "55\177\\ " "51\177z" "52\177z" + + ; 0xc0 + "20\177R" "20\177A" "33\177A" "49\177A" + "8\177A" "20\177L" "20\177C" "24\177C" + "51\177C" "20\177E" "48\177E" "8\177E" + "51\177E" "20\177I" "33\177I" "51\177D" + + ; 0xd0 + "0\177\\DJ" "20\177N" "51\177N" "20\177O" + "33\177O" "55\177O" "8\177O" "38\177" + "51\177R" "53\177U" "20\177U" "55\177U" + "8\177U" "20\177Y" "24\177T" "0\177\\ss" + + ; 0xe0 + "20\177r" "20\177a" "33\177a" "49\177a" + "8\177a" "20\177l" "20\177c" "24\177c" + "51\177c" "20\177e" "48\177e" "8\177e" + "51\177e" "20\177\\i" "33\177\\i" "51\177d" + + ; 0xf0 + "0\177\\dj" "20\177n" "51\177n" "20\177o" + "33\177o" "55\177o" "8\177o" "45\177" + "51\177r" "53\177u" "20\177u" "55\177u" + "8\177u" "20\177y" "24\177t" "52\177\\ " + ]) + +(defconst cjk-latin-3 + [; 0xa0 + "99\177" "0\177\\TEXTMALTESEH" "49\177\\ " "3\177" + "4\177" "" "33\177H" "7\177" + "8\177\\ " "52\177I" "24\177S" "49\177G" + "33\177J" "0\177-{}" "" "52\177Z" + + ; 0xb0 + "16\177" "0\177\\textmalteseh" "18\177" "19\177" + "20\177\\ " "21\177" "33\177h" "23\177" + "24\177\\ " "0\177\\i" "24\177s" "49\177g" + "33\177\\j" "29\177" "" "52\177z" + + ; 0xc0 + "32\177A" "20\177A" "33\177A" "" + "8\177A" "52\177C" "33\177C" "24\177C" + "32\177E" "20\177E" "33\177E" "8\177E" + "32\177I" "20\177I" "33\177I" "8\177I" + + ; 0xd0 + "" "34\177N" "32\177O" "20\177O" + "33\177O" "52\177G" "8\177O" "38\177" + "33\177G" "32\177U" "20\177U" "33\177U" + "8\177U" "49\177U" "33\177S" "0\177\\ss" + + ; 0xe0 + "32\177a" "20\177a" "33\177a" "" + "8\177a" "52\177c" "33\177c" "24\177c" + "32\177e" "20\177e" "33\177e" "8\177e" + "32\177\\i" "20\177\\i" "33\177\\i" "8\177\\i" + + ; 0xf0 + "" "34\177n" "32\177o" "20\177o" + "33\177o" "52\177g" "8\177o" "45\177" + "33\177g" "32\177u" "20\177u" "33\177u" + "8\177u" "49\177u" "33\177s" "52\177\\ " + ]) + +(defconst cjk-latin-4 + [; 0xa0 + "99\177" "48\177A" "59\177" "24\177R" + "4\177" "34\177I" "24\177L" "7\177" + "8\177\\ " "51\177S" "15\177E" "24\177G" + "0\177\\TEXTTSTROKE" "0\177-{}" "51\177Z" "15\177\\ " + + ; 0xb0 + "16\177" "48\177a" "48\177\\ " "24\177r" + "20\177\\ " "34\177\\i" "24\177l" "51\177\\ " + "24\177\\ " "51\177s" "15\177e" "24\177g" + "0\177\\texttstroke" "0\177\\NG" "51\177z" "0\177\\ng" + + ; 0xc0 + "15\177A" "20\177A" "33\177A" "34\177A" + "8\177A" "0\177\\AA" "0\177\\AE" "48\177I" + "51\177C" "20\177E" "48\177E" "8\177E" + "52\177E" "20\177I" "33\177I" "15\177I" + + ; 0xd0 + "0\177\\DJ" "24\177N" "15\177O" "24\177K" + "33\177O" "34\177O" "8\177O" "38\177" + "0\177\\O" "48\177U" "20\177U" "33\177U" + "8\177U" "34\177U" "15\177U" "0\177\\ss" + + ; 0xe0 + "15\177a" "20\177a" "33\177a" "34\177a" + "8\177a" "0\177\\aa" "0\177\\ae" "48\177i" + "51\177c" "20\177e" "48\177e" "8\177e" + "52\177e" "20\177\\i" "33\177\\i" "15\177\\i" + + ; 0xf0 + "0\177\\dj" "24\177n" "15\177o" "24\177k" + "33\177o" "34\177o" "8\177o" "45\177" + "0\177\\o" "48\177u" "20\177u" "33\177u" + "8\177u" "34\177u" "15\177u" "52\177\\ " + ]) + +(defconst cjk-latin-5 ; ISO 8859-9 + [; 0xa0 + "99\177" "1\177" "2\177" "3\177" + "4\177" "5\177" "6\177" "7\177" + "8\177\\ " "9\177" "10\177" "11\177" + "12\177" "0\177-{}" "14\177" "15\177\\ " + + ; 0xb0 + "16\177" "17\177" "18\177" "19\177" + "20\177\\ " "21\177" "22\177" "23\177" + "24\177\\ " "25\177" "26\177" "27\177" + "28\177" "29\177" "30\177" "31\177" + + ; 0xc0 + "32\177A" "20\177A" "33\177A" "34\177A" + "8\177A" "0\177\\AA" "0\177\\AE" "24\177C" + "32\177E" "20\177E" "33\177E" "8\177E" + "32\177I" "20\177I" "33\177I" "8\177I" + + ; 0xd0 + "49\177G" "34\177N" "32\177O" "20\177O" + "33\177O" "34\177O" "8\177O" "38\177" + "0\177\\O" "32\177U" "20\177U" "33\177U" + "8\177U" "52\177I" "24\177S" "0\177\\ss" + + ; 0xe0 + "32\177a" "20\177a" "33\177a" "34\177a" + "8\177a" "0\177\\aa" "0\177\\ae" "24\177c" + "32\177e" "20\177e" "33\177e" "8\177e" + "32\177\\i" "20\177\\i" "33\177\\i" "8\177\\i" + + ; 0xf0 + "49\177g" "34\177n" "32\177o" "20\177o" + "33\177o" "34\177o" "8\177o" "45\177" + "0\177\\o" "32\177u" "20\177u" "33\177u" + "8\177u" "0\177\\i" "24\177s" "8\177y" + ]) + +(defconst cjk-latin-jisx ; JIS X 0201 lower half + [; 0xa0 + "" "0\177!" "37\177" "0\177\\#" + "39\177" "0\177\\%" "0\177\\&" "40\177" + "0\177(" "0\177)" "0\177*" "0\177+" + "0\177," "0\177-" "0\177." "0\177/" + + ; 0xb0 + "0\1770" "0\1771" "0\1772" "0\1773" + "0\1774" "0\1775" "0\1776" "0\1777" + "0\1778" "0\1779" "0\177:" "0\177;" + "41\177" "0\177=" "42\177" "0\177?" + + ; 0xc0 + "36\177" "0\177A" "0\177B" "0\177C" + "0\177D" "0\177E" "0\177F" "0\177G" + "0\177H" "0\177I" "0\177J" "0\177K" + "0\177L" "0\177M" "0\177N" "0\177O" + + ; 0xd0 + "0\177P" "0\177Q" "0\177R" "0\177S" + "0\177T" "0\177U" "0\177V" "0\177W" + "0\177X" "0\177Y" "0\177Z" "0\177[" + "5\177" "0\177]" "43\177" "44\177" + + ; 0xe0 + "46\177" "0\177a" "0\177b" "0\177c" + "0\177d" "0\177e" "0\177f" "0\177g" + "0\177h" "0\177i" "0\177j" "0\177k" + "0\177l" "0\177m" "0\177n" "0\177o" + + ; 0xf0 + "0\177p" "0\177q" "0\177r" "0\177s" + "0\177t" "0\177u" "0\177v" "0\177w" + "0\177x" "0\177y" "0\177z" "47\177" + "50\177" "54\177" "56\177" "" + ]) + +(defconst cjk-cyrillic ; ISO 8859-5 + [; 0xa0 + "99\177" "0\177\\CYRYO" "0\177\\CYRDJE" "20\177\\CYRG" + "0\177\\CYRIE" "0\177\\CYRDZE" "0\177\\CYRII" "0\177\\CYRYI" + "0\177\\CYRJE" "0\177\\CYRLJE" "0\177\\CYRNJE" "0\177\\CYRTSHE" + "20\177\\CYRK" "0\177-{}" "0\177\\CYRUSHRT" "0\177\\CYRDZHE" + + ; 0xb0 + "0\177\\CYRA" "0\177\\CYRB" "0\177\\CYRV" "0\177\\CYRG" + "0\177\\CYRD" "0\177\\CYRE" "0\177\\CYRZH" "0\177\\CYRZ" + "0\177\\CYRI" "0\177\\CYRISHRT" "0\177\\CYRK" "0\177\\CYRL" + "0\177\\CYRM" "0\177\\CYRN" "0\177\\CYRO" "0\177\\CYRP" + + ; 0xc0 + "0\177\\CYRR" "0\177\\CYRS" "0\177\\CYRT" "0\177\\CYRU" + "0\177\\CYRF" "0\177\\CYRH" "0\177\\CYRC" "0\177\\CYRCH" + "0\177\\CYRSH" "0\177\\CYRSHCH" "0\177\\CYRHRDSN" "0\177\\CYRERY" + "0\177\\CYRSFTSN" "0\177\\CYREREV" "0\177\\CYRYU" "0\177\\CYRYA" + + ; 0xd0 + "0\177\\cyra" "0\177\\cyrb" "0\177\\cyrv" "0\177\\cyrg" + "0\177\\cyrd" "0\177\\cyre" "0\177\\cyrzh" "0\177\\cyrz" + "0\177\\cyri" "0\177\\cyrishrt" "0\177\\cyrk" "0\177\\cyrl" + "0\177\\cyrm" "0\177\\cyrn" "0\177\\cyro" "0\177\\cyrp" + + ; 0xe0 + "0\177\\cyrr" "0\177\\cyrs" "0\177\\cyrt" "0\177\\cyru" + "0\177\\cyrf" "0\177\\cyrh" "0\177\\cyrc" "0\177\\cyrch" + "0\177\\cyrsh" "0\177\\cyrshch" "0\177\\cyrhrdsn" "0\177\\cyrery" + "0\177\\cyrsftsn" "0\177\\cyrerev" "0\177\\cyryu" "0\177\\cyrya" + + ; 0xf0 + "35\177" "0\177\\cyryo" "0\177\\cyrdje" "20\177\\cyrg" + "0\177\\cyrie" "0\177\\cyrdze" "0\177\\cyrii" "0\177\\cyryi" + "0\177\\cyrje" "0\177\\cyrlje" "0\177\\cyrnje" "0\177\\cyrtshe" + "20\177\\cyrk" "7\177" "0\177\\cyrushrt" "0\177\\cyrdzhe" + ]) + +(defconst cjk-greek ; ISO 8859-7 + [;0xa0 + "99\177" "0\177<{}" "0\177>{}" "3\177" + "" "" "6\177" "7\177" + "8\177\\ " "9\177" "" "0\177((" + "12\177" "0\177-{}" "" "0\177---" + + ; 0xb0 + "16\177" "17\177" "18\177" "19\177" + "0\177'{}" "0\177\"'{}" "0\177'A" "0\177;" + "0\177'E" "0\177'H" "0\177'I" "0\177))" + "0\177'O" "29\177" "0\177'U" "0\177'W" + + ; 0xc0 + "0\177\"'i" "0\177A" "0\177B" "0\177G" + "0\177D" "0\177E" "0\177Z" "0\177H" + "0\177J" "0\177I" "0\177K" "0\177L" + "0\177M" "0\177N" "0\177X" "0\177O" + + ; 0xd0 + "0\177P" "0\177R" "" "0\177S" + "0\177T" "0\177U" "0\177F" "0\177Q" + "0\177Y" "0\177W" "0\177\"I" "0\177\"U" + "0\177'a" "0\177'e" "0\177'h" "0\177'i" + + ; 0xe0 + "0\177\"'u" "0\177a" "0\177b" "0\177g" + "0\177d" "0\177e" "0\177z" "0\177h" + "0\177j" "0\177i" "0\177k" "0\177l" + "0\177m" "0\177n" "0\177x" "0\177o" + + ; 0xf0 + "0\177p" "0\177r" "0\177c" "0\177s" + "0\177t" "0\177u" "0\177f" "0\177q" + "0\177y" "0\177w" "0\177\"i" "0\177\"u" + "0\177'o" "0\177'u" "0\177'w" "" + ]) + +(defconst cjk-viscii-lower + [; 0xA0 + "" "20\177\\abreve" "32\177\\abreve" "71\177\\abreve" + "20\177\\acircumflex" "32\177\\acircumflex" "73\177\\acircumflex" "71\177\\acircumflex" + "34\177e" "71\177e" "20\177\\ecircumflex" "32\177\\ecircumflex" + "73\177\\ecircumflex" "34\177\\ecircumflex" "71\177\\ecircumflex" "20\177\\ocircumflex" + + ; 0xB0 + "32\177\\ocircumflex" "73\177\\ocircumflex" "34\177\\ocircumflex" "" + "" "71\177\\ocircumflex" "32\177\\ohorn" "73\177\\ohorn" + "71\177i" "" "" "" + "" "0\177\\ohorn" "20\177\\ohorn" "" + + ; 0xC0 + "" "" "" "" + "" "" "73\177\\abreve" "34\177\\abreve" + "" "" "" "" + "" "" "" "32\177y" + + ; 0xD0 + "" "20\177\\uhorn" "" "" + "" "71\177a" "73\177y" "32\177\\uhorn" + "73\177\\uhorn" "" "" "34\177y" + "71\177y" "" "34\177\\ohorn" "0\177\\uhorn" + + ; 0xE0 + "32\177a" "20\177a" "0\177\\acircumflex" "34\177a" + "73\177a" "0\177\\abreve" "34\177\\uhorn" "34\177\\acircumflex" + "32\177e" "20\177e" "0\177\\ecircumflex" "73\177e" + "32\177i" "20\177i" "34\177i" "73\177i" + + ; 0xF0 + "0\177\\dj" "71\177\\uhorn" "32\177o" "20\177o" + "0\177\\ocircumflex" "34\177o" "73\177o" "71\177o" + "71\177u" "32\177u" "20\177u" "34\177u" + "73\177u" "20\177y" "71\177\\ohorn" "" + ]) + +(defconst cjk-viscii-upper + [; 0xA0 + "" "20\177\\ABREVE" "32\177\\ABREVE" "71\177\\ABREVE" + "20\177\\ACIRCUMFLEX" "32\177\\ACIRCUMFLEX" "73\177\\ACIRCUMFLEX" "71\177\\ACIRCUMFLEX" + "34\177E" "71\177E" "20\177\\ECIRCUMFLEX" "32\177\\ECIRCUMFLEX" + "73\177\\ECIRCUMFLEX" "34\177\\ECIRCUMFLEX" "71\177\\ECIRCUMFLEX" "20\177\\OCIRCUMFLEX" + + ; 0xB0 + "32\177\\OCIRCUMFLEX" "73\177\\OCIRCUMFLEX" "34\177\\OCIRCUMFLEX" "" + "" "71\177\\OCIRCUMFLEX" "32\177\\OHORN" "73\177\\OHORN" + "71\177I" "" "" "" + "" "0\177\\OHORN" "20\177\\OHORN" "" + + ; 0xC0 + "" "" "" "" + "" "" "73\177\\ABREVE" "34\177\\ABREVE" + "" "" "" "" + "" "" "" "32\177Y" + + ; 0xD0 + "" "20\177\\UHORN" "" "" + "" "71\177A" "73\177Y" "32\177\\UHORN" + "73\177\\UHORN" "" "" "34\177Y" + "71\177Y" "" "34\177\\OHORN" "0\177\\UHORN" + + ; 0xE0 + "32\177A" "20\177A" "0\177\\ACIRCUMFLEX" "34\177A" + "73\177A" "0\177\\ABREVE" "34\177\\UHORN" "34\177\\ACIRCUMFLEX" + "32\177E" "20\177E" "0\177\\ECIRCUMFLEX" "73\177E" + "32\177I" "20\177I" "34\177I" "73\177I" + + ; 0xF0 + "0\177\\DJ" "71\177\\UHORN" "32\177O" "20\177O" + "0\177\\OCIRCUMFLEX" "34\177O" "73\177O" "71\177O" + "71\177U" "32\177U" "20\177U" "34\177U" + "73\177U" "20\177Y" "71\177\\OHORN" "" + ]) + + +;; The following encodings will be selected (if they occur in the input +;; buffer) at the very beginning of the output buffer to load the +;; corresponding CJK macros. +;; +(defconst cjk-enc-table + '((chinese-gb2312 . GB) + (katakana-jisx0201 . SJIS) + (japanese-jisx0208 . JIS) + (japanese-jisx0212 . JIS2) + (korean-ksc5601 . KS) + (chinese-big5-1 . Bg5) + (chinese-big5-2 . Bg5) + (chinese-cns11643-1 . CNS1) + (chinese-cns11643-2 . CNS2) + (chinese-cns11643-3 . CNS3) + (chinese-cns11643-4 . CNS4) + (chinese-cns11643-5 . CNS5) + (chinese-cns11643-6 . CNS6) + (chinese-cns11643-7 . CNS7))) + + +;; MULEenc's versions of \CJKspace and \CJKnospace +;; +(defconst cjk-space "\17764\177\177") +(defconst cjk-nospace "\17765\177\177") + +;; MULEenc's command to insert a word break. +;; +(defconst cjk-word-break "\17761\177\177") + + +;; Here we have the format specification table which defines what to do +;; for each encoding. +;; +;; Later in the code we check to which group of commands the encoding +;; belongs. This is done by testing how the encoding and its data is +;; stored, e.g. whether it is a vector, or a cons cell, etc. +;; +(defconst cjk-format-spec-table + `( + ;; Cdr part is a vector VEC. Each character is formatted as: + ;; + ;; (format "\177%s\177" (aref VEC (- char-position-code-1 32))) + ;; + (latin-iso8859-1 . ,cjk-latin-1) + (latin-iso8859-2 . ,cjk-latin-2) + (latin-iso8859-3 . ,cjk-latin-3) + (latin-iso8859-4 . ,cjk-latin-4) + (latin-iso8859-9 . ,cjk-latin-5) + (latin-jisx0201 . ,cjk-latin-jisx) + ;; T2A encoding is used for Cyrillic letters. You must explicitly + ;; switch between T2 and T1/OT1 encoding. + (cyrillic-iso8859-5 . ,cjk-cyrillic) + ;; LGR encoding (resp. its ligatures) is used for Greek letters. + ;; You must explicitly switch between LGR and T1/OT1 encoding (using + ;; e.g. Babel's `greek' option). + (greek-iso8859-7 . ,cjk-greek) + ;; For Vietnamese a Vietnamese TeX-font has to be used which + ;; contains ASCII characters too! You must explicitly switch + ;; between Vietnamese T5 and T1/OT1 encoding. + (vietnamese-viscii-lower . ,cjk-viscii-lower) + (vietnamese-viscii-upper . ,cjk-viscii-upper) + + ;; Cdr part is a cons of header HEAD and formatter FORMAT. HEAD is + ;; printed first, then each character is formatted as: + ;; + ;; (format FORMAT char-code-1 [char-code-2]) + ;; + (katakana-jisx0201 . ("\17770\177\177" . "\177%c\177\177")) + (japanese-jisx0208 . ("\17766\177\177" . "\177%c\177%d\177")) + (chinese-gb2312 . ("\17767\177\177" . "\177%c\177%d\177")) + (chinese-big5-1 . ("\17768\177\177" . "\177%c\177%d\177")) + (chinese-big5-2 . ("\17768\177\177" . "\177%c\177%d\177")) + (korean-ksc5601 . ("\17769\177\177" . "\177%c\177%d\177")) + + ;; Cdr part is a formatter string FORMAT. Each character is + ;; formatted as: + ;; + ;; (format FORMAT char-code-1 char-code-2) + ;; + (japanese-jisx0212 . "\17772\177JIS2\177\177%d\177%d\177") + (chinese-cns11643-1 . "\17772\177CNS1\177\177%d\177%d\177") + (chinese-cns11643-2 . "\17772\177CNS2\177\177%d\177%d\177") + (chinese-cns11643-3 . "\17772\177CNS3\177\177%d\177%d\177") + (chinese-cns11643-4 . "\17772\177CNS4\177\177%d\177%d\177") + (chinese-cns11643-5 . "\17772\177CNS5\177\177%d\177%d\177") + (chinese-cns11643-6 . "\17772\177CNS6\177\177%d\177%d\177") + (chinese-cns11643-7 . "\17772\177CNS7\177\177%d\177%d\177") + + ;; Cdr part is a list of the form (SYMBOL ARG1 ARG2 ...). SYMBOL + ;; indicates how to process the following characters. + ;; + (thai-tis620 . (thai + "\17757\177\177" ; Thai start + "\17758\177\177" ; Thai end + "\17762\177%d\177" ; Thai base character + "\17760\177%d\177" ; Thai upper/lower vowel and tone + "\17763\177\177" ; Thai EOL + )) + )) + + +;; An alist of charsets vs list of features required for processing +;; the corresponding charset. The feature is loaded then on demand. +;; +(defconst cjk-feature-table + '((thai-tis620 thai-word))) + + +;; Create an output encoding called `cjk-coding', using the function +;; cjk-encode to actually convert the output. +;; +(if (featurep 'xemacs) + (make-coding-system + 'cjk-coding 'no-conversion + "Coding-system for LaTeX2e CJK Package" + '(mnemonic "CJK" + pre-write-conversion cjk-encode)) + (make-coding-system + 'cjk-coding 0 ?c + "Coding-system for LaTeX2e CJK Package" + nil + '((pre-write-conversion . cjk-encode)))) + + +;; XEmacs doesn't have set-buffer-multibyte. +;; +(defmacro cjk-set-buffer-multibyte (arg) + (if (fboundp 'set-buffer-multibyte) + `(set-buffer-multibyte ,arg))) + + +;; The conversion routine. Its main idea is to analyze the character +;; set for each character and then to do something if the previous +;; character has a different character set. For Thai, we must +;; additionally find proper word breaks using a large word list. +;; +(defun cjk-encode (from to) + (let ((old-buf (current-buffer)) + (temp-buf (get-buffer-create " *cjk-tmp*")) + (work-buf (get-buffer-create " *cjk-work*")) + (required-features (copy-sequence cjk-feature-table))) + ;; Initialize all working buffers. + (set-buffer work-buf) + (erase-buffer) + (cjk-set-buffer-multibyte nil) + + (set-buffer temp-buf) + (erase-buffer) + (cjk-set-buffer-multibyte t) + + ;; Copy the original contents into TEMP-BUF. + (insert-buffer-substring old-buf from to) + (if (and (not (featurep 'xemacs)) + (string< emacs-version "21.0")) + (progn + (message "Decomposing...") + (decompose-region (point-min) (point-max)))) + + (let ((enc nil) + (space-state nil) + prev-charset charset + ch ch1 ch2 + format-spec + (skipped-whitespace nil) + (last-pos 0)) + ;; Now we go to beginning of TEMP-BUF and start the loop. + (goto-char (point-min)) + (setq prev-charset 'ascii) + + (while (not (eobp)) + (setq ch (following-char)) + (set-buffer work-buf) + + ;; Set CHARSET to the character set of the current character. + (setq charset (char-charset ch)) + (if (eq charset 'ascii) + ;; Not a multibyte character. + (progn + ;; Don't modify PREV-CHARSET for whitespace characters. + (setq skipped-whitespace (string-match "[ \t\n]" + (string ch))) + (if (not skipped-whitespace) + (setq prev-charset 'ascii)) + (insert ch)) + + ;; Now we are at a multibyte character. Set the following + ;; variables: + ;; + ;; CH1 -- first character code + ;; CH2 -- second character code (of two-byte characters) + ;; if any + (if (or (eq charset 'chinese-big5-1) + (eq charset 'chinese-big5-2)) + ;; Emacs uses two special character sets for Big5 + ;; characters. We must decode the current character to + ;; get the real Big5 character code. + (progn + (setq ch (encode-big5-char ch)) + (if (consp ch) + ;; XEmacs + (setq ch1 (car ch) + ch2 (cdr ch)) + ;; Emacs + (setq ch1 (lsh ch -8) + ch2 (logand ch 255))) + ;; 128 will be later added again. + (setq ch1 (- ch1 128)) + (setq ch2 (- ch2 128))) + ;; For all other character sets, split-char does the right + ;; thing. Note that CH2 can be zero in case it is a + ;; single-byte character set. + (let ((l (split-char ch))) + (setq ch1 (nth 1 l) + ch2 (or (nth 2 l) 0)))) + + ;; FORMAT-SPEC tells how to encode this character. + (setq format-spec (cdr (assq charset cjk-format-spec-table))) + (if (null format-spec) + ;; Unsupported character set. Do nothing. + nil + ;; Ok, it is supported. If this character set is a CJK + ;; character set (i.e., it is in CJK-ENC-TABLE), we need a + ;; special header at the beginning of the output file. + ;; This information is stored in the ENC list. + (let ((tag (cdr (assq charset cjk-enc-table)))) + (if tag + (or (memq tag enc) + (setq enc (cons tag enc))))) + + ;; Load all features which are required to handle this + ;; character set. + (let ((tail (assq charset required-features))) + ;; We remove all occurrences of TAIL in the feature list + ;; to avoid loading packages multiple times. + (setq required-features (delete tail required-features) + tail (cdr tail)) + (while tail + (require (car tail)) + (setq tail (cdr tail)))) + + (cond + ;; If FORMAT-SPEC has the form (SYMBOL ARG1 ARG2 ...), + ;; SYMBOL indicates how to process the following + ;; characters. + ((and (consp format-spec) (symbolp (car format-spec))) + (cond + ((eq (car format-spec) 'thai) + ;; FORMAT-SPEC has this form: + ;; (thai START-STRING END-STRING + ;; BASE-CHAR-FORMAT COMBINING-CHAR-FORMAT + ;; EOL-STRING) + (let ((base-format (nth 3 format-spec)) + (combining-format (nth 4 format-spec)) + pos + start + end + str + len + (i 0)) + ;; First, insert the code for starting Thai. + (if (not (eq prev-charset charset)) + (insert (nth 1 format-spec))) + ;; Analyze the maximum run of Thai characters in + ;; TEMP-BUF and insert `|' at all word boundaries. + (set-buffer temp-buf) + (setq start (point)) + ;; "\\ct+" searches for characters which have the + ;; category `t', i.e. are Thai characters. + (re-search-forward "\\ct+" nil t) + (setq end (point-marker)) + (goto-char start) + (thai-break-words "|" end) + ;; Extract this run. + (setq str (buffer-substring start end) + len (length str)) + (goto-char end) + (set-marker end nil) + ;; Insert characters in STR one by one while + ;; converting `|' to `cjk-word-break' and formatting + ;; Thai characters according to FORMAT-SPEC. + (set-buffer work-buf) + (while (< i len) + (setq ch (aref str i) + i (1+ i)) + (if (= ch ?|) + (insert cjk-word-break) + (let* ((split (split-char ch)) + (category-set (char-category-set ch))) + ;; We now analyze the linguistic category + ;; assigned to the current character and take + ;; the appropriate format. Then we add 128 + ;; for producing TIS-620 output. + (insert (format + (if (or (aref category-set ?2) + (aref category-set ?3) + (aref category-set ?4)) + combining-format + base-format) + (+ (nth 1 split) 128)))))) + ;; It depends on the following characters what to do + ;; next. If we have tabs and spaces followed by a + ;; Thai character, nothing will be done. If we have + ;; a newline character additionally, we insert a + ;; special command which usually expands to + ;; `\ignorespaces' (which will suppress all + ;; whitespace characters). In all other cases, we + ;; close the Thai block. + ;; + ;; Reason for this algorithm is the fact that in the + ;; Thai language a space isn't used to separate + ;; words but to structure a sentence. A normal line + ;; break shall not automatically cause the insertion + ;; of a space. The user has rather to explicitly + ;; type one or more space characters in the middle + ;; of a line to indicate that he or she really wants + ;; a space -- note that usually a Thai space is + ;; wider than a Roman space resp. can be stretched + ;; more. + (set-buffer temp-buf) + (if (looking-at "[ \t]+\\ct") + (setq str "") + (if (looking-at "[ \t]*\n[ \t]*\\ct") + (setq str (nth 5 format-spec)) + (setq str (nth 2 format-spec)))) + ;; To compensate the forward-char at the end of loop. + (forward-char -1) + (set-buffer work-buf) + (insert str))))) + + ;; We may have to insert the car part of the cons and/or + ;; space controlling commands (cjk-space/cjk-nospace) + ;; depending on the current context. + ;; + ;; Note that this logic sometimes fails. In the example + ;; below, cjk-encode will insert \CJKspace in the comment + ;; instead of right after the comment. Since cjk-encode + ;; should be a low-level function we can't assume that + ;; `%' is always the TeX comment character. Only TeX + ;; itself can reliably detect the current comment + ;; character. + ;; + ;; Chinese Text + ;; % Korean comment + ;; Korean Text + ;; + ;; Two solutions: Either switch between Korean and other + ;; languages only outside of a comment, or manually insert + ;; \CJKspace and \CJKnospace commands as needed. + ((consp format-spec) + (if (eq charset 'korean-ksc5601) + (or (eq space-state cjk-space) + (insert (setq space-state cjk-space))) + (or (eq space-state cjk-nospace) + (insert (setq space-state cjk-nospace)))) + + ;; Now insert the the header and character(s) + ;; according to CJK-FORMAT-SPEC-TABLE. The CJK + ;; package needs the characters in GR notation, so + ;; we add 0x80. + (if (not (eq prev-charset charset)) + (insert (car format-spec))) + (insert (format (cdr format-spec) + (+ ch1 128) (+ ch2 128)))) + + ;; Since Emacs provides the character sets in GL + ;; notation, we simply subtract 0x20 to get the proper + ;; index. + ((vectorp format-spec) + (insert (format "\177%s\177" + (aref format-spec (- ch1 32))))) + + ;; Otherwise, FORMAT-SPEC is just a formatting + ;; string. + (t + (insert (format format-spec ch1 ch2))))) + + (setq prev-charset charset)) + + ;; We have finished the analysis of the character set. Print + ;; some progress information if we have done another 1000 + ;; characters. + (set-buffer temp-buf) + (if (> (- (point) last-pos) 1000) + (progn + (setq last-pos (point)) + (message "Converting: %2d%%" + (/ (* 100 (point)) (point-max))))) + + ;; Advance to the next character and loop. + (forward-char 1)) + + ;; The remaining task is to insert an appropriate header at the + ;; very beginning of the output file. If ENC isn't empty, we need + ;; the extra LaTeX commands to load CJK package and to output all + ;; collected CJK encodings. + (set-buffer work-buf) + (goto-char (point-min)) + (if enc + (progn + (insert "\\def\\CJKhook{") + (while enc + (insert (format "\\CJKenc{%s}" (car enc))) + (setq enc (cdr enc))) + (insert "}") + (insert "\\ifx\\CJKpreproc\\undefined") + (insert "\\def\\CJKpreproc{cjk-enc}") + (insert "\\RequirePackage[global]{CJK}") + (insert "\\AtBeginDocument{\\begin{CJK}{}{}\\CJKspace}") + (insert "\\AtEndDocument{\\end{CJK}}") + (insert "\\else\\CJKhook\\fi ")) + (insert "\\ifx\\CJKpreproc\\undefined") + (insert "\\def\\CJKpreproc{cjk-enc}") + (insert "\\RequirePackage{MULEenc}") + (insert "\\fi "))))) + + +(defun cjk-get-name (filename) + "Replace the extension of the file name with `.cjk'. +If the extension of FILENAME is `.bib', `-cjk.bib' will be appended +to the file name without extension." + + (concat (file-name-sans-extension filename) + (if (string-equal (file-name-extension filename) "bib") + "-cjk.bib" + ".cjk"))) + + +(defun cjk-write-file () + "Save current buffer and <buffername>.cjk in cjk-coding. +Files of the form <buffername>.bib are saved as <buffername>-cjk.bib. + +If no file is associated with the buffer, you are asked to specify a +file name." + + (interactive) + (save-buffer) + (let* ((bufname (buffer-file-name)) + (newbufname (cjk-get-name bufname))) + (message "Saving %s and %s" bufname newbufname) + (let ((coding-system-for-write 'cjk-coding)) + (write-region (point-min) (point-max) newbufname)))) + + +(defun cjk-file-write-file (filename &optional load) + "Save FILENAME as <FILENAME>.cjk in cjk-coding. +With prefix arg (noninteractively: 2nd arg LOAD), load FILENAME into +current buffer also." + + (interactive + (let ((file buffer-file-name) + (file-name nil) + (file-dir nil)) + (and file + ;; If we are in LaTeX mode, we present the file associated + ;; with the current buffer as the default. + (eq (cdr (assq 'major-mode (buffer-local-variables))) + 'latex-mode) + (setq file-name (file-name-nondirectory file) + file-dir (file-name-directory file))) + ;; Now we build the argument list. + (list (read-file-name (if current-prefix-arg + "Load file and save it in cjk-coding: " + "Save file in cjk-coding: ") + file-dir file-name nil) + current-prefix-arg))) + + (setq filename (expand-file-name filename)) + + (let (input-buffer + (new-filename (cjk-get-name filename))) + (save-excursion + (setq input-buffer (get-buffer-create " *cjk-temp*")) + (set-buffer input-buffer) + (erase-buffer) + (cjk-set-buffer-multibyte t) + (insert-file-contents filename) + (let ((coding-system-for-write 'cjk-coding)) + (write-region (point-min) (point-max) new-filename)))) + + (if load + (find-file filename))) + + +;; To be independent from AUC TeX, we copy the TeX-in-comment function. + +(defvar cjk-tex-esc "\\" + "The TeX escape character.") + + +(defconst cjk-comment-start-skip (concat "\\(\\(^\\|[^\\]\\)\\(" + (regexp-quote cjk-tex-esc) + (regexp-quote cjk-tex-esc) + "\\)*\\)\\(%+ *\\)") + "A regexp to identify the beginning of a comment in TeX.") + + +(defun cjk-tex-in-comment () + "Return non-nil if point is in a TeX comment." + + (if (or (bolp) + (eq (preceding-char) ?\r)) + nil + (save-excursion + (let ((pos (point))) + (re-search-backward "^\\|\r" nil t) + (or (looking-at cjk-comment-start-skip) + (re-search-forward cjk-comment-start-skip pos t)))))) + + +(defun cjk-write-all-files (filename &optional load force) + "Save FILENAME and all files included in FILENAME in cjk-coding. +This function runs `cjk-file-write-file' on each file if necessary. +The inclusion commands scanned for are `\\CJKinput', `\\CJKinclude', +and `\\CJKbibliography'. + +With 1 \\[universal-argument] (noninteractively: 2nd arg LOAD), + load FILENAME into current buffer also. +With 2 \\[universal-argument]'s (noninteractively: 3rd arg FORCE), + run `cjk-file-write-file' unconditionally. +With 3 \\[universal-argument]'s, do both." + + (interactive + (let ((file buffer-file-name) + (file-name nil) + (file-dir nil)) + (and file + ;; If we are in LaTeX mode, we present the file associated + ;; with the current buffer as the default. + (eq (cdr (assq 'major-mode (buffer-local-variables))) + 'latex-mode) + (setq file-name (file-name-nondirectory file) + file-dir (file-name-directory file))) + ;; Now we build the argument list. + (setq load (member current-prefix-arg '((4) (64)))) + (setq force (member current-prefix-arg '((16) (64)))) + (list + (read-file-name (if load + "Load file and save it in cjk-coding: " + "Save file in cjk-coding: ") + file-dir file-name nil) + load + force))) + + (let (input-buffer + (dir (file-name-directory filename)) + (tex-include-regexp "\\\\CJKinclude *{\\(.*\\)}") + (tex-input-regexp "\\\\CJKinput *{\\(.*\\)}") + (bib-regexp "\\\\CJKbibliography *{\\(.*\\)}") + (result '()) + (newresult '())) + (save-excursion + ;; First, load the file associated with FILENAME into INPUT-BUFFER + (setq input-buffer (get-buffer-create " *cjk-temp*")) + (set-buffer input-buffer) + (erase-buffer) + (cjk-set-buffer-multibyte t) + (insert-file-contents filename) + (goto-char (point-min)) + + ;; Then, search `\CJKinput', `\CJKinclude', and `\CJKbibliography' and + ;; append the found filenames to the RESULT list. + (while (re-search-forward tex-include-regexp nil t) + ;; We assume that the include file name is well behaved and + ;; doesn't contain a comment character. + (let ((match (match-string 1))) + (if (not (cjk-tex-in-comment)) + (setq result (cons (concat match ".tex") result))))) + (while (re-search-forward tex-input-regexp nil t) + (let ((match (match-string 1))) + (if (not (cjk-tex-in-comment)) + (if (string-equal (file-name-sans-extension match) match) + (setq result (cons (concat match ".tex") result)) + (setq result (cons match result)))))) + (while (re-search-forward bib-regexp nil t) + (let ((match (match-string 1))) + (if (not (cjk-tex-in-comment)) + (setq result (cons (concat match ".bib") result)))))) + + ;; Add directory to each element. + (dolist (elt result) + (setq newresult (cons (concat dir elt) newresult))) + + ;; Add the master file itself to the list. + (setq newresult (cons filename newresult)) + + ;; Process file by file. + (dolist (source newresult) + (if (not (file-readable-p source)) + (message "Can't operate on %s" source) + (if (or (file-newer-than-file-p source (cjk-get-name source)) + force) + (cjk-file-write-file source))))) + + (if load + (find-file filename))) + + +(defun batch-cjk-write-file () + "Run `cjk-file-write-file' on the remaining files if necessary. +Use this from the command line, with `--batch' (or `-batch'); it won't +work in an interactive Emacs. For example, invoke + + \"emacs -batch -l cjk-enc -f batch-cjk-write-file *.tex\" + +Note that if you specify a directory name, all files in this directory +are processed." + + (do-batch-cjk-write-file)) + + +(defun batch-force-cjk-write-file () + "Run `cjk-file-write-file' on the remaining files unconditionally. +Use this from the command line, with `--batch' (or `-batch'); it won't +work in an interactive Emacs. For example, invoke + + \"emacs -b -l cjk-enc -f batch-force-cjk-write-file *.tex\" + +Note that if you specify a directory name, all files in this directory +are processed. + +This function is useful for Makefiles to let the make program do the +file time management." + + (do-batch-cjk-write-file t)) + + +(defun do-batch-cjk-write-file (&optional force) + "Run `cjk-file-write-file' on remaining arguments. +If optional argument FORCE is non-nil, run it unconditionally." + + (defvar command-line-args-left) ; Avoid `free variable' warning. + + (if (not noninteractive) + (error "`batch-write-cjk-file' is to be used only with --batch")) + + (while command-line-args-left + (let ((source (car command-line-args-left)) + dest) + (if (file-directory-p (expand-file-name source)) + ;; Handle all files in directory. + (let ((files (directory-files source))) + (while files + (if (and (not (auto-save-file-name-p (car files))) + ;; Replace the directory name saved in `source' + ;; with a file name. + (setq source + (expand-file-name (car files) source)) + (setq dest (cjk-get-name source)) + (not (file-directory-p source)) + (or (file-newer-than-file-p source dest) + force)) + (cjk-file-write-file source)) + (setq files (cdr files)))) + ;; Otherwise, process a single file. + (if (not (file-readable-p source)) + (message "Can't operate on %s" source) + (if (or (file-newer-than-file-p source (cjk-get-name source)) + force) + (cjk-file-write-file source))))) + + (setq command-line-args-left (cdr command-line-args-left))) + + (message "Done") + (kill-emacs 0)) + +;;; EOF diff --git a/Master/texmf-dist/source/latex/cjk/utils/lisp/emacs/thai-word.el b/Master/texmf-dist/source/latex/cjk/utils/lisp/emacs/thai-word.el new file mode 100644 index 00000000000..956cf27b06e --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/lisp/emacs/thai-word.el @@ -0,0 +1,11052 @@ +;;; thai-word.el -- find Thai word boundaries + +;; Copyright (C) 2000, 2001, 2002, 2003, 2004 +;; Electrotechnical Laboratory, JAPAN. + +;; Author: Kenichi HANDA <handa@etl.go.jp> + +;; Keywords: thai, word break, emacs + +;; 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, 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 GNU Emacs; see the file COPYING. If not, write to +;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + +;; The used Thai word list has been taken from IBM's ICU4J project +;; (file `thai6.ucs', version 1.4, converted to TIS encoding, with +;; removal of three incorrect entries) to which the following license +;; applies: +;; +;; COPYRIGHT AND PERMISSION NOTICE +;; +;; +;; Copyright (c) 1995-2001 International Business Machines +;; Corporation and others +;; +;; All rights reserved. +;; +;; +;; Permission is hereby granted, free of charge, to any person +;; obtaining a copy of this software and associated documentation +;; files (the "Software"), to deal in the Software without +;; restriction, including without limitation the rights to use, +;; copy, modify, merge, publish, distribute, and/or sell copies of +;; the Software, and to permit persons to whom the Software is +;; furnished to do so, provided that the above copyright notice(s) +;; and this permission notice appear in all copies of the Software +;; and that both the above copyright notice(s) and this permission +;; notice appear in supporting documentation. +;; +;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +;; EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +;; OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +;; NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE +;; COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE +;; FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, +;; OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR +;; PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +;; TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +;; PERFORMANCE OF THIS SOFTWARE. +;; +;; Except as contained in this notice, the name of a copyright +;; holder shall not be used in advertising or otherwise to promote +;; the sale, use or other dealings in this Software without prior +;; written authorization of the copyright holder. + + +;; This file implements an algorithm to find Thai word breaks using a +;; dictionary. It is based on the C program `cttex' written by +;; Vuthichai Ampornaramveth <vuthi@nii.ac.jp>. + + +;; Table of Thai words. It is a nested alist (see `nested-alist-p'), +;; which means that you can easily index the list character by +;; character. + +(defconst thai-word-table nil) + + +;; Set up `thai-word-table'. + +(let + ((l + '("¡¡" + "¡¡Å" + "¡¡Ø¸Àѳ±ì" + "¡§" + "¡§¡ÒÃ" + "¡§ÊØÅ" + "¡§àµê¡" + "¡®" + "¡®ËÁÒÂ" + "¡°Ô¹" + "¡´" + "¡µÑªÅÕ" + "¡µÑصÒ" + "¡µÑÙ" + "¡µÒ¸Ô¡ÒÃ" + "¡µÒÀÔ¹ÔËÒÃ" + "¡µÔ¡Ò" + "¡µàÇ·ÔµÒ" + "¡µàÇ·Õ" + "¡¶Ò" + "¡·Á" + "¡·ÅÕ" + "¡¹" + "¡¹¡" + "¡¹ÔÉ°Ò" + "¡º" + "¡º¯" + "¡º´Ò¹" + "¡º·Ù" + "¡ºÒÅ" + "¡ºÔ¹·Ãì" + "¡ºÔÅ" + "¡ºÕè" + "¡ÁÅ" + "¡Ã" + "¡Ã¡®" + "¡Ã¡®Ò¤Á" + "¡Ã¡¯" + "¡Ã§" + "¡Ã³±ì" + "¡Ã³Õ" + "¡Ã³Õ¡Ԩ" + "¡Ã³ÕÂì" + "¡Ã´" + "¡Ã¹" + "¡Ãº" + "¡ÃºÙÃ" + "¡ÃÁ" + "¡ÃÁ·èÒ" + "¡ÃÁ¸ÃÃÁì" + "¡ÃÃ" + "¡Ãêԧ" + "¡Ãó" + "¡ÃóԡÒÃì" + "¡ÃþØÁ" + "¡ÃÃÁ" + "¡ÃÃÁ¡Ã" + "¡ÃÃÁ¡ÒÃ" + "¡ÃÃÁªÇÒµ" + "¡ÃÃÁÒª¹" + "¡ÃÃÁÒªÕ¾" + "¡ÃÃÁÒ¸Ô¡ÒÃ" + "¡ÃÃà¨Õ¡" + "¡ÃÃàªÕ§" + "¡ÃÃá·Ã¡" + "¡ÃÃ⪡" + "¡ÃÃä¡Ã" + "¡ÃÇ´" + "¡ÃǺ" + "¡ÃÇÂ" + "¡ÃÍ" + "¡ÃÍ¡" + "¡ÃÍ¡á¡Ã¡" + "¡Ãͧ" + "¡Ãͧ¡ÃÍÂ" + "¡ÃÍ´" + "¡Ãͺ" + "¡ÃÍÁ" + "¡ÃÐ" + "¡ÃЧ¡¡ÃÐà§Ôè¹" + "¡ÃЧèͧ¡ÃÐá§è§" + "¡ÃЧè͹¡ÃÐá§è¹" + "¡ÃШ¡" + "¡ÃШ͡" + "¡ÃШͧÍá§" + "¡ÃШѧ" + "¡ÃШѺ" + "¡ÃШҴ" + "¡ÃШҺ" + "¡ÃШÒÂ" + "¡ÃШԴ" + "¡ÃШԺ" + "¡ÃШÔÃÔ´" + "¡ÃШء" + "¡ÃШغ¡ÃШԺ" + "¡ÃШØÂ" + "¡ÃШØ맡ÃШÔë§" + "¡ÃШØëÁ¡ÃШÔëÁ" + "¡ÃШÙë¡ÃШÕë" + "¡ÃШèÒ§" + "¡ÃШé͹" + "¡ÃЩ͡" + "¡ÃЩѺ¡ÃÐ੧" + "¡ÃЩٴ" + "¡ÃЩè͹" + "¡ÃЪ͹" + "¡ÃЪѺ" + "¡ÃЪÑé¹" + "¡ÃЪҡ" + "¡ÃЪØ" + "¡ÃЫԡ" + "¡ÃЫԺ" + "¡ÃЮØÁ¾Õ" + "¡Ãд¡" + "¡Ãдͧ" + "¡Ãд͹" + "¡Ãдѧ§Ò" + "¡Ãдҡ" + "¡ÃдҧÅÒ§" + "¡Ãдҹ" + "¡ÃдÒÉ" + "¡Ãдԡ" + "¡ÃдÔè§" + "¡ÃдÕè" + "¡Ãд׺" + "¡ÃдØÁ" + "¡Ãд١" + "¡Ãдé§" + "¡ÃдéÒ§" + "¡Ãеԡ" + "¡ÃеԺ" + "¡ÃеÔê´" + "¡Ãе×ÍÃ×ÍÃé¹" + "¡Ãеء" + "¡ÃеØ駡ÃеÔé§" + "¡ÃеØé¹" + "¡Ãеèͧ¡ÃÐáµè§" + "¡ÃеèÒÂ" + "¡ÃеéÇÁ¡ÃÐàµÕéÂÁ" + "¡Ãеêͺ" + "¡ÃжԹ" + "¡Ãз§" + "¡Ãзº" + "¡ÃзÃǧ" + "¡ÃзÐ" + "¡ÃзÑè§" + "¡Ãзԧ" + "¡Ãз׺" + "¡Ãзا" + "¡ÃзÙé" + "¡ÃзèÍÁ" + "¡Ãзé͹" + "¡ÃзéÍÁ¡ÃÐá·éÁ" + "¡ÃйÑé¹" + "¡Ãкǹ" + "¡ÃкÇÂ" + "¡Ãк͡" + "¡Ãкͧ" + "¡ÃкÐ" + "¡ÃкÔ" + "¡ÃкÕè" + "¡Ãк×Í" + "¡Ãкا" + "¡ÃлÃÕé¡ÃÐà»ÃèÒ" + "¡ÃлÑéÇ¡ÃÐà»ÕéÂ" + "¡ÃлèÓ" + "¡ÃлéÍ¡ÃÐá»é" + "¡Ãлëͧ" + "¡ÃмÅÕ¡ÃмÅÒÁ" + "¡Ãмա" + "¡ÃоÕé" + "¡Ãо×Í" + "¡ÃоØé§" + "¡ÃпѴ¡ÃÐà¿Õ´" + "¡ÃпÙÁ¡ÃпÒÂ" + "¡ÃÐÁÍÁ¡ÃÐáÁÁ" + "¡ÃÐÁѧ" + "¡ÃÐÂÒ˧ѹ" + "¡ÃÐÂÖ¡¡ÃÐÂ×Í" + "¡ÃÐÂè͹" + "¡ÃÐÃÍ¡" + "¡ÃÐÅÍÁ" + "¡ÃÐÅÑÁ¾Ã" + "¡ÃÐÇÔ¹" + "¡ÃÐÇÕ¡ÃÐÇÒ´" + "¡ÃÐÉÑÂ" + "¡ÃÐÉÒ»³ì" + "¡ÃÐÊͺ" + "¡ÃÐÊѧ" + "¡ÃÐÊѹ" + "¡ÃÐÊÒ" + "¡ÃÐÊ×Í" + "¡ÃÐÊا¡ÃÐÊÔ§" + "¡ÃÐÊع" + "¡ÃÐ˹¡" + "¡ÃÐ˹Һ" + "¡ÃÐ˹èÓ" + "¡ÃÐËÁÔº" + "¡ÃÐËÁèÍÁ" + "¡ÃÐËÂÔèÁ" + "¡ÃÐËÒÂ" + "¡ÃÐËÖÁ" + "¡ÃÐËÖèÁ" + "¡ÃÐÍͺ" + "¡ÃÐÍÑ¡" + "¡ÃÐÍÑ¡¡ÃÐÍèǹ" + "¡ÃÐà§éÒ¡ÃЧʹ" + "¡ÃÐà¨Ò" + "¡ÃÐà¨Ô§" + "¡ÃÐà¨Ô´¡ÃÐà¨Ô§" + "¡ÃÐà¨Õêº" + "¡ÃÐàªéÒ" + "¡ÃÐà«Í" + "¡ÃÐà«Ô§" + "¡ÃÐà«ç¹" + "¡ÃÐà«éÒ" + "¡ÃÐà´Ô´" + "¡ÃÐà´Õ´" + "¡ÃÐà´×Í¡" + "¡ÃÐà´×èͧ" + "¡ÃÐà´ç¹" + "¡ÃÐà´éÒ" + "¡ÃÐ൧" + "¡ÃÐàµÒÐ" + "¡ÃÐàµ×éͧ" + "¡ÃÐàµç¹" + "¡ÃÐà¶Ôº" + "¡ÃÐà·ÕÂÁ" + "¡ÃÐà·×͹" + "¡ÃÐູ" + "¡ÃÐàºÕ´" + "¡ÃÐàº×éͧ" + "¡ÃÐà»ÒÐ" + "¡ÃÐà»ëÒ" + "¡ÃÐà¾ÒÐ" + "¡ÃÐà¾×èÍÁ" + "¡ÃÐàÂéÍ¡ÃÐáËÂè§" + "¡ÃÐàÃÕ¹" + "¡ÃÐàÊÕ¹" + "¡ÃÐàÊÕÂÃ" + "¡ÃÐàÊ繡ÃÐÊÒÂ" + "¡ÃÐàÊèÒ" + "¡ÃÐàËÁç´¡ÃÐáËÁè" + "¡ÃÐá¨Ð" + "¡ÃÐá«Ð" + "¡ÃÐá´Ð" + "¡ÃÐá´èÇ" + "¡ÃÐáµ" + "¡ÃÐá·¡" + "¡ÃÐáÊ" + "¡ÃÐáÍÁ" + "¡ÃÐ⨹" + "¡ÃÐâ¨Á" + "¡ÃÐâ©¡¡ÃÐà©¡" + "¡ÃÐâ´¡" + "¡ÃÐâ´¡¡ÃÐà´¡" + "¡ÃÐâ´§" + "¡ÃÐâ´´" + "¡ÃÐⶹ" + "¡ÃÐâºÁ" + "¡ÃÐâ»Ã§" + "¡ÃÐâËé" + "¡ÃÑ¡" + "¡Ãѧ" + "¡Ãѹ" + "¡ÃѺ" + "¡ÃÑÁ" + "¡ÃÒ¡" + "¡ÃÒ§" + "¡ÃÒ´" + "¡ÃÒ¹" + "¡ÃÒº" + "¡ÃÒ¿" + "¡ÃÒ¿¿Ô¡" + "¡ÃÒ¿Ô¡" + "¡ÃÒÁ" + "¡ÃÒÂ" + "¡ÃÒÇ" + "¡ÃÓ" + "¡ÃÔ¡" + "¡ÃÔ§¡ÃÔÇ" + "¡ÃÔª" + "¡ÃÔº" + "¡ÃÔÁ" + "¡ÃÔÂÒ" + "¡ÃÔÇ" + "¡ÃÔè§" + "¡ÃÔèÁ" + "¡ÃÔéÇ" + "¡ÃÔê¡" + "¡ÃÔê§" + "¡ÃÕ" + "¡ÃÕ¡" + "¡ÃÕ±Ò" + "¡ÃÕ´" + "¡ÃÕ¸Ò" + "¡ÃÕê´" + "¡ÃØ" + "¡ÃØ¡" + "¡Ãا" + "¡Ãا෾" + "¡ÃسÒ" + "¡ÃسҸԤس" + "¡Ãع" + "¡Ãغ" + "¡ÃØÂ" + "¡ÃØè¹" + "¡ÃØèÁ" + "¡ÃØéÁ¡ÃÔèÁ" + "¡ÃØê»" + "¡ÃÙ" + "¡ÃÙ´" + "¡ÃçÍ¡¡ÃëÍÂ" + "¡Ãè͹" + "¡ÃèÍÂ" + "¡ÃèÒ§" + "¡ÃèÒÂ" + "¡ÃèÓ" + "¡ÃéÇÁ" + "¡ÃéÍ" + "¡ÃéÒ¹" + "¡ÃéÒÇ" + "¡ÄɮաÒ" + "¡ÄɳÒ" + "¡Å" + "¡Å´" + "¡Åº" + "¡ÅÁ" + "¡ÅÂØ·¸ì" + "¡Åǧ" + "¡ÅÍ¡" + "¡Åͧ" + "¡Å͹" + "¡ÅÍÂ" + "¡ÅÑ¡" + "¡ÅÑ´" + "¡ÅѺ" + "¡ÅÑÇ" + "¡ÅÑè¹" + "¡ÅÑé¹" + "¡ÅÑéÇ" + "¡ÅÒ¡" + "¡ÅÒ§" + "¡ÅÒ´" + "¡ÅÒÂ" + "¡ÅÒâËÁ" + "¡ÅÔè§" + "¡ÅÔè¹" + "¡ÅÔé§" + "¡ÅÔéÁ" + "¡ÅÕ" + "¡ÅÕº" + "¡ÅÕè" + "¡ÅÖ§" + "¡Å×¹" + "¡ÅØèÁ" + "¡ÅØéÁ" + "¡ÅÙâ¤Ê" + "¡ÅàÁç´" + "¡Åè¹" + "¡Åèͧ" + "¡Åè͹" + "¡ÅèÍÁ" + "¡ÅèÒÇ" + "¡ÅèÓ" + "¡ÅéÇÂ" + "¡ÅéÇÂäÁé" + "¡ÅéÍ" + "¡Åéͧ" + "¡Åé͹" + "¡ÅéÍÁá¡ÅéÁ" + "¡ÅéÒ" + "¡ÅéÒÁ" + "¡ÅéÓ" + "¡Ç´" + "¡Ç¹" + "¡ÇÁ" + "¡ÇÂ" + "¡Ç¨Ñêº" + "¡Ç¨Õê" + "¡ÇÑ¡" + "¡ÇÑ´" + "¡ÇÒ§" + "¡ÇÒ§µØé§" + "¡ÇÒ´" + "¡ÇÒÇà¤Ã×Í" + "¡ÇÕ" + "¡ÇèÒ" + "¡ÇéÒ§" + "¡ÇéÒ¹" + "¡ÇêÒ¹" + "¡ÉѵÃÔÂì" + "¡ÉÑÂ" + "¡ÉÒ»³ì" + "¡ÊÔ" + "¡ÊÔ¡Ã" + "¡ÊÔ¡ÃÃÁ" + "¡ÊÔ³" + "¡Í" + "¡Í¡" + "¡Í§" + "¡Í«" + "¡Í´" + "¡Íº" + "¡Í»Ã" + "¡ÍÂ" + "¡ÍÃÔÅÅÒ" + "¡ÍÅì¿" + "¡ÍàÍÕêÂÐ" + "¡Ð" + "¡ÐªÖ衡ЪÑè¡" + "¡Ð«Ç¡" + "¡Ð´Õè" + "¡ÐµéÓ" + "¡ÐµêÒ¡" + "¡Ð·¡Ã¡" + "¡Ð·Ñ´ÃÑ´" + "¡Ð·Ñ¹Ëѹ" + "¡Ð·Ô" + "¡Ð·×Í" + "¡ÐºÑ§ÅÁ" + "¡ÐºÔé§" + "¡Ð»ÃÔ´¡Ð»ÃÍÂ" + "¡Ð»Ç¡¡Ðà»Õ¡" + "¡Ð»Ð" + "¡Ð»Ô" + "¡Ð¾§" + "¡Ð¾ÃÔº" + "¡Ð¾Åèͧ¡Ðá¾Åè§" + "¡Ð¾éÍ" + "¡ÐÃѵ" + "¡ÐÃØ觡ÐÃÔè§" + "¡ÐÅÇÂ" + "¡ÐÅÍ" + "¡ÐÅлѧËÒ" + "¡ÐÅÐÁѧ" + "¡ÐÅÐáÁ" + "¡ÐÅÒ" + "¡ÐÅÒÊÕ" + "¡ÐÅÔéÁ¡ÐàËÅÕèÂ" + "¡ÐÅè͹" + "¡ÐÅèÍÁ¡ÐáÅèÁ" + "¡ÐÅèÍ¡ÐËÅÔº" + "¡ÐÊéÒËÍÂ" + "¡Ð˹ا¡Ð˹ԧ" + "¡Ð˹çͧ¡Ðá˹ç§" + "¡ÐËÃÍ´" + "¡ÐËÃÕè" + "¡ÐËÃçÍÁ¡ÐáËÃçÁ" + "¡ÐËÃèͧ" + "¡ÐËÅÕè" + "¡ÐËÅØ¡¡ÐËÅÔ¡" + "¡ÐËÅèÓ" + "¡Ðà´¡" + "¡Ð൧" + "¡Ðà·Â" + "¡Ðà·ÒÐ" + "¡Ðà»Ô꺡лêÒº" + "¡Ðà¼Å¡" + "¡ÐàÃÕè¡ÐÃÒ´" + "¡ÐàÅÔ´" + "¡ÐàÅèÍ¡ÐÅèÒ" + "¡ÐàËÃÕè§" + "¡ÐàËÅÒÐà»ÒÐ" + "¡Ðáªè" + "¡Ðⵧ¡Ð൧" + "¡Ðâµé§âËè§" + "¡Ðâµê¡" + "¡Ðâ»Ã§" + "¡Ðâ»âÅ" + "¡Ðâ¼Å¡¡Ðà¼Å¡" + "¡ÐâËÅ¡" + "¡Ñ¡" + "¡Ñ¡¢ÌÐ" + "¡Ñ§" + "¡Ñ§¡éÒ" + "¡Ñ§¢Ò" + "¡Ñ§©Ô¹" + "¡Ñ§¿Ù" + "¡Ñ§ÇÅ" + "¡Ñ§ÇÒ¹" + "¡Ñ§Ê´ÒÅ" + "¡Ñ§Ëѹ" + "¡Ñ§äÊ" + "¡ÑªÒ" + "¡ÑÒ" + "¡Ñ³±ì" + "¡Ñ´" + "¡Ñ¹" + "¡Ñ¹´ÒÃ" + "¡Ñ¹µì" + "¡Ñ¹ÂÒ¹" + "¡Ñ¹Âì" + "¡Ñº" + "¡Ñ»" + "¡Ñ»µÑ¹" + "¡ÑÁ»¹Ò·" + "¡ÑÁ»ÃÐâ´" + "¡ÑÁ¾ÙªÒ" + "¡ÑÁÁѹµÀÒ¾ÃѧÊÕ" + "¡ÑÁÁѹµÃѧÊÕ" + "¡Ñź¡" + "¡ÑÅ»¾Ä¡Éì" + "¡ÑŻѧËÒ" + "¡ÑÅ»ÒÇÊÒ¹" + "¡ÑÅ»ì" + "¡ÑÅÂÒ" + "¡ÑÅÂÒ³" + "¡ÑÅÂÒ³ÁÔµÃ" + "¡ÑÅÂÒ³Õ" + "¡ÑÅâª" + "¡Ñè¹" + "¡Ñé§" + "¡Ñé¹" + "¡Ñé¹ËÂÑè¹" + "¡Ñê¡" + "¡Ò" + "¡Ò¡" + "¡Ò¡Õ" + "¡Ò§" + "¡Ò§à¡§" + "¡Ò§à¢¹" + "¡Ò«ÐÅͧ" + "¡Ò¨¹ºØÃÕ" + "¡Ò¨¹Ò" + "¡Ò´" + "¡Ò¹" + "¡Ò¹´Ò" + "¡Ò¹¾ÅÙ" + "¡Òº" + "¡Ò½Ò¡" + "¡Ò¾Âì" + "¡ÒÁ" + "¡ÒÁÒÃÁ³ì" + "¡ÒÂ" + "¡Ò¡ÃÃÁ" + "¡ÒÂÀÒ¾" + "¡ÒÂÇÔÀÒ¤" + "¡ÒÂÊÔ·¸Ôì" + "¡ÒÂҾ¾" + "¡ÒÃ" + "¡Òóì" + "¡ÒúÙÃ" + "¡ÒÃÐà¡´" + "¡ÒÃѳÂì" + "¡ÒÃѹµì" + "¡ÒÃØ" + "¡ÒÃسÂì" + "¡ÒÃàÇ¡" + "¡ÒÃì" + "¡ÒÃì´" + "¡ÒÃìµÙ¹" + "¡ÒÅ" + "¡ÒÅ¡Ô³Õ" + "¡ÒÅÕ" + "¡ÒÅà·ÈÐ" + "¡ÒÇ" + "¡ÒÈ" + "¡ÒÊ" + "¡ÒÊÃ" + "¡ÒÊÔâ¹" + "¡ÒËŧ" + "¡ÒÌ" + "¡ÒàËÇèÒ" + "¡Òá¿" + "¡ÒáÅç¡«Õ" + "¡Ó" + "¡Ó¡ÇÁ" + "¡Ó¡Ñ´" + "¡Ó¡Ñº" + "¡Ó¨Ã" + "¡Ó¨Ñ´" + "¡Ó¨ÒÂ" + "¡ÓªÑº" + "¡Ó«Òº" + "¡Ó´Ñ´" + "¡Ó¸Ã" + "¡Ó¹Ñ¹" + "¡Ó¹ÑÅ" + "¡ÓºÑ§" + "¡Ó»Ñè¹" + "¡Ó¾ÃéÒ" + "¡Ó¾×´" + "¡ÓÁжѹ" + "¡ÓÁÐÅÍ" + "¡ÓÁÐËÂÕè" + "¡ÓÂÒ¹" + "¡ÓÂÓ" + "¡ÓÃÒº" + "¡ÓÅѧ" + "¡ÓÊÃÇÅ" + "¡Ó˹´" + "¡Ó˹Ѵ" + "¡Óà´Ò" + "¡Óà¹Ô´" + "¡ÓàÃÔº" + "¡Óà˹ç¨" + "¡Óᾧ" + "¡Óá˧" + "¡ÓäÃ" + "¡ÓäÅ" + "¡Ô¡" + "¡Ô¡Ð" + "¡Ô¨" + "¡Ô¨¡ÃÃÁ" + "¡Ô¨¡ÒÃ" + "¡Ô¨¨ÐÅѡɳÐ" + "¡Ô¨¨Ò" + "¡ÔµµÔ" + "¡ÔµµÔ¤Ø³" + "¡ÔµµÔÁÈÑ¡´Ôì" + "¡ÔµµÔÈѾ·ì" + "¡Ô¹" + "¡Ô¹¹Ã" + "¡Ô¹ÃÕ" + "¡ÔÃÔ³Õ" + "¡ÔÃÔÂÒ" + "¡ÔàŹ" + "¡ÔàÅÊ" + "¡ÔâÁâ¹" + "¡Ôâµչ" + "¡ÔâÅ" + "¡ÔâÅ¡ÃÑÁ" + "¡ÔâÅÅÔµÃ" + "¡ÔâÅàÁµÃ" + "¡ÔâÅàÎÔõ«ì" + "¡Ôè§" + "¡ÔèÇ" + "¡Ô駡×Í" + "¡Ô駡èÒ" + "¡Ôê¡" + "¡Ôêº" + "¡ÔëÇ" + "¡Õ¯ÇÔ·ÂÒ" + "¡Õ´" + "¡ÕµÒÃì" + "¡Õº" + "¡ÕÌÒ" + "¡Õè" + "¡Õé" + "¡Õë" + "¡Ö¡" + "¡Ö¡¡éͧ" + "¡Öè§" + "¡Öë¹" + "¡Ø" + "¡Ø¡" + "¡Ø¡¡Ñ¡" + "¡ØªÃ" + "¡Øá¨" + "¡Ø®ØÁ¾Õ" + "¡Ø¯°Ñ§" + "¡Ø¯Ô" + "¡Ø³±Å" + "¡Ø´" + "¡Ø´Ñ§" + "¡Ø´Ñè¹" + "¡Ø¹" + "¡Ø¹«×Í" + "¡Ø¹àªÕ§" + "¡Øº" + "¡ØÁ" + "¡ØÁÀÒ" + "¡ØÁÀì" + "¡ØÁÒÃ" + "¡ØÁÒÃÒ" + "¡ØÁÒÃÕ" + "¡ØÂ" + "¡ØªèÒÂ" + "¡ØÂàΧ" + "¡ØÅ" + "¡ØŸԴÒ" + "¡ØźصÃ" + "¡ØÅʵÃÕ" + "¡ØÅÒ" + "¡ØÅÕ" + "¡ØÅաبÍ" + "¡ØÈÅ" + "¡ØÈâźÒÂ" + "¡ØËÅÒº" + "¡ØèÁ" + "¡Øé§" + "¡Øê¡" + "¡Øê¹" + "¡ØêÂ" + "¡ØëÂ" + "¡Ù" + "¡Ù³±ì" + "¡Ù´" + "¡Ùº" + "¡Ùè" + "¡Ùé" + "¡àÌÇÃÒ¡" + "¡ç" + "¡è§" + "¡è¹" + "¡èÍ" + "¡èͧ" + "¡è͹" + "¡èÒÂ" + "¡èÓ" + "¡é§â¤é§" + "¡é¹" + "¡éÁ" + "¡éÍ" + "¡éͧ" + "¡é͹" + "¡éÍÁ" + "¡éÍÂ" + "¡éÍÃèÍ¡é͵ԡ" + "¡éÒ§" + "¡éÒ¹" + "¡éÒÁ" + "¡éÒÇ" + "¡éÓ" + "¡éÓ¡Öè§" + "¡éÓà¡Ô¹" + "¡ê¡" + "¡ê§" + "¡êÍ¡" + "¡êͺ»Õé" + "¡êÍ»»Õé" + "¡êÒ«" + "¡êÒ´" + "¡ë§" + "¡ëÇÂàµÕëÂÇ" + "¡ëÍÂ" + "¡ëÒ" + "¢§¨×êÍ" + "¢¨Ã" + "¢¨Ñ´" + "¢¨ÒÂ" + "¢¨Õ" + "¢¨ØÂ" + "¢³Ð" + "¢´" + "¢¹" + "¢¹§" + "¢¹´" + "¢¹¹" + "¢¹º" + "¢¹Á" + "¢¹Áͺ" + "¢¹Ñ´" + "¢¹Ñ¹" + "¢¹Ò¡" + "¢¹Ò§" + "¢¹Ò´" + "¢¹Ò¹" + "¢¹Òº" + "¢¹ÒÂ" + "¢¹ÔÉ°Ò" + "¢¹Ø¹" + "¢º" + "¢º¶" + "¢ºÇ¹" + "¢Á" + "¢ÁÇ´" + "¢Áͧ" + "¢ÁÍÂ" + "¢Áѧ" + "¢ÁѺ" + "¢ÁÒ" + "¢ÁÔº" + "¢ÁÔé¹" + "¢ÁÕ¢Áѹ" + "¢ÁÖ§" + "¢ÁØ¡¢ÁÍÁ" + "¢ÁØ¡¢ÁÑÇ" + "¢Áغ" + "¢Áغ¢ÁÔº" + "¢ÁèÍÁ" + "¢ÁéÓ" + "¢ÂÍ¡" + "¢Âͧ" + "¢ÂÐ" + "¢ÂÑ¡" + "¢Âѹ" + "¢ÂѺ" + "¢ÂÑé¹" + "¢ÂÒ´" + "¢ÂÒº" + "¢ÂÒÂ" + "¢ÂÓ" + "¢ÂÔ¡" + "¢ÂÔº" + "¢ÂÔèÁ" + "¢ÂÕé" + "¢ÂØ¡¢ÂÔ¡" + "¢ÂØ¡¢ÂØÂ" + "¢Âغ" + "¢Âغ¢ÂÔº" + "¢ÂØÁ" + "¢ÂØÂ" + "¢ÂØéÁ" + "¢ÂèÁ" + "¢Âè͹" + "¢Âé͹" + "¢ÂéÓ" + "¢ÃÁ" + "¢Ãäì" + "¢ÃÑÇ" + "¢ÃÔº" + "¢ÃÖÁ" + "¢ÃØ¢ÃÐ" + "¢Åѧ" + "¢ÅѺ" + "¢ÅÒ" + "¢ÅÒ´" + "¢ÅÔº" + "¢ÅØ¡" + "¢ÅØ¡¢ÅÑ¡" + "¢ÅØ¡¢ÅÔ¡" + "¢Åغ" + "¢ÅØÁ" + "¢ÅØèÂ" + "¢Ç§" + "¢Ç´" + "¢Ç¹¢ÇÒÂ" + "¢Çº" + "¢ÇÂ" + "¢ÇÑ¡ä¢Çè" + "¢ÇÑ" + "¢ÇÑ´" + "¢ÇѺ" + "¢ÇѺà¢ÇÕÂÇ" + "¢ÇÑé¹" + "¢ÇÒ" + "¢ÇÒ¡" + "¢ÇÒ§" + "¢ÇÒ´" + "¢ÇÒ¹" + "¢ÇÒ¢ǹ" + "¢ÇÔ´" + "¢ÇéÒ§" + "¢Í" + "¢Í¡" + "¢Í§" + "¢Í´" + "¢Í¹" + "¢Íº" + "¢Íº¤Ø³" + "¢Íºã¨" + "¢ÍÁ" + "¢ÐÁÍÁ¢ÐáÁÁ" + "¢ÐÁÑ¡à¢Áé¹" + "¢ÐÁØ¡¢ÐÁÍÁ" + "¢ÐÂÔ¡" + "¢ÐÂØ¡" + "¢ÐàÂéÍá¢Âè§" + "¢ÐáÂÐ" + "¢Ñ§" + "¢Ñ³±Ê¡Ã" + "¢Ñ³±ÊÕÁÒ" + "¢Ñ´" + "¢ÑµµÔÂÁÒ¹Ð" + "¢Ñ¹" + "¢Ñ¹ªÐà¹ÒÐ" + "¢Ñ¹µÔ" + "¢Ñ¹·Õ" + "¢Ñ¹¸ì" + "¢Ñ¹ËÁÒ¡" + "¢Ñ¹âµ¡" + "¢Ñº" + "¢ÑÂ" + "¢Ñé¹" + "¢ÑéÇ" + "¢Ò" + "¢Ò¡" + "¢Ò¡êÇÂ" + "¢Ò§" + "¢Ò´" + "¢Ò¹" + "¢Òº" + "¢ÒÁ" + "¢ÒÂ" + "¢ÒÅ" + "¢ÒÇ" + "¢Ó" + "¢Ô¡" + "¢Ô§" + "¢ÔÁ" + "¢Ôè§" + "¢Õ´" + "¢Õ»¹ÒÇظ" + "¢Õè" + "¢Õé" + "¢ÕéàËÃè" + "¢Ö§" + "¢Öé§" + "¢Öé¹" + "¢Ö鹩èÒÂ" + "¢×¹" + "¢×è¹" + "¢×èÍ" + "¢Ø¡" + "¢Ø´" + "¢Ø¹" + "¢Ø¹·Í§" + "¢Ø¹á¼¹" + "¢ØÁ" + "¢ØÂ" + "¢Øè¹" + "¢Ù´" + "¢Ùè" + "¢âÁÂ" + "¢èÁ" + "¢èǹ" + "¢èÍ" + "¢è͹" + "¢èÍÂ" + "¢èÒ" + "¢èÒ§" + "¢èÒÂ" + "¢èÒÇ" + "¢èÒÇÊÒÃ" + "¢é¹" + "¢éÍ" + "¢éͧ" + "¢é͹" + "¢éÍÁÙÅ" + "¢éÍÂ" + "¢éÒ" + "¢éÒ§" + "¢éÒ¾à¨éÒ" + "¢éÒÁ" + "¢éÒÇ" + "¢éÒÇÊÒÃ" + "¢éÒÇàÁèÒ" + "¢éÒÇâ¾´" + "¢éÒÈÖ¡" + "¢éÒËÅǧ" + "¤¤¹ÑÁ¾Ã" + "¤¤¹Ò§¤ì" + "¤¤¹Ò¹µì" + "¤§" + "¤§¤Ò" + "¤ªÃÒª" + "¤ªÊÒÃ" + "¤ªÒªÒµÔ" + "¤ªÒªÕ¾" + "¤ªÒ¸ÒÃ" + "¤ªÒÀóì" + "¤³¹Ò" + "¤³º´Õ" + "¤³Ð" + "¤³Ò¨ÒÃÂì" + "¤³Ò¸Ô¡ÒÃ" + "¤³Ò¸Ô»äµÂ" + "¤³Ò¹Ñº" + "¤³Ô¡Ò" + "¤³Ôµ" + "¤³ÔµÈÒʵÃì" + "¤´" + "¤´Õ" + "¤µÔ" + "¤µÔ¸ÃÃÁ" + "¤µÔ¾¨¹ì" + "¤·Ò" + "¤¹" + "¤¹¸Ãþì" + "¤¹â·" + "¤º" + "¤Á" + "¤Á¹Ò¡ÒÃ" + "¤Á¹Ò¤Á" + "¤Ã¡" + "¤Ãº" + "¤ÃêԵ" + "¤ÃÃÀ" + "¤ÃÃÀì" + "¤ÃÃÅͧ" + "¤ÃÃâŧ" + "¤ÃÃäÅ" + "¤ÃÇ" + "¤ÃÇÑ¡" + "¤ÃÇÕ" + "¤ÃËÒ" + "¤ÃÍ¡" + "¤Ãͧ" + "¤Ãͧá¤Ã§" + "¤Ãͺ" + "¤Ãͺ¤ÃÑÇ" + "¤ÃÐ" + "¤ÃÑ´à¤Ãè§" + "¤Ãѹ" + "¤ÃѺ" + "¤ÃÑÇ" + "¤ÃÑè§" + "¤ÃÑè¹" + "¤ÃÑé§" + "¤ÃÑé¹" + "¤ÃÒ" + "¤ÃÒ¡" + "¤ÃÒ§" + "¤ÃÒ" + "¤ÃÒ´" + "¤ÃÒº" + "¤ÃÒÁ" + "¤ÃÒÇ" + "¤ÃÒÊ" + "¤ÃÓ" + "¤ÃÔʵ¡ÒÅ" + "¤ÃÔʵѧ" + "¤ÃÔʵì" + "¤ÃÔʵìÁÒÊ" + "¤ÃÔÊàµÕ¹" + "¤ÃÕº" + "¤ÃÕÁ" + "¤ÃÖ" + "¤ÃÖ¡¤Ã×é¹" + "¤ÃÖ¡â¤ÃÁ" + "¤ÃÖ¹" + "¤ÃÖÁ" + "¤ÃÖè§" + "¤ÃÖéÁ" + "¤Ã×´" + "¤Ã×¹" + "¤Ã×Í" + "¤Ã×é¹" + "¤Ã×鹤ÃÖ¡" + "¤ÃØ" + "¤Ãر" + "¤ÃØÁà¤Ã×Í" + "¤ÃØÂ" + "¤ÃØè¹" + "¤ÃÙ" + "¤ÃÙ´" + "¤ÃÙè" + "¤Ãè§" + "¤ÃèÍÁ" + "¤ÃèÒ" + "¤ÃèÒÇ" + "¤ÃèÓ" + "¤ÃéÒ¹" + "¤ÃéÒÁ" + "¤ÄË" + "¤ÄËÑʶì" + "¤ÄËÒʹì" + "¤ÅÍ" + "¤ÅÍ¡" + "¤Åͧ" + "¤ÅÍ´" + "¤Å͹" + "¤ÅÍÃÕ¹" + "¤ÅÍâÿÍÃìÁ" + "¤ÅÍâÿÕÅÅì" + "¤ÅÐ" + "¤ÅÑ¡" + "¤Åѧ" + "¤Åѵªì" + "¤ÅѺ" + "¤ÅÑè¡" + "¤ÅÑè§" + "¤ÅÒ" + "¤ÅÒ§á¤Å§" + "¤ÅÒ´" + "¤ÅÒ¹" + "¤ÅÒÂ" + "¤ÅÒÊ" + "¤ÅÒÊÊÔ¤" + "¤ÅÓ" + "¤ÅÔ¹Ô¡" + "¤ÅÔé¡" + "¤ÅÕ" + "¤ÅÕ¹Ô¤" + "¤ÅÕè" + "¤ÅÖ§" + "¤Å×è¹" + "¤Å×è¹àËÕ¹" + "¤Å×è¹äÊé" + "¤ÅØ¡" + "¤ÅØÁ" + "¤ÅØèÁ" + "¤ÅØé§" + "¤ÅØéÁ" + "¤Åèͧ" + "¤Åèͧá¤ÅèÇ" + "¤ÅèÓ" + "¤Åéͧ" + "¤ÅéÍÂ" + "¤ÅéÒÂ" + "¤ÅéÓ" + "¤Ç§" + "¤Çº" + "¤ÇÃ" + "¤ÇÑ¡" + "¤Çѹ" + "¤ÇÑè¹" + "¤ÇÒ¡" + "¤ÇÒ" + "¤ÇÒ¹" + "¤ÇÒÁ" + "¤ÇÒÂ" + "¤ÇÔ¹Ô¹" + "¤ÇÕ¹" + "¤ÇèÓ" + "¤ÇéÒ" + "¤ÇéÒ§" + "¤ÇéÒ¹" + "¤Ë¡ÃÃÁ" + "¤Ë¡ÃÃÁÈÒʵÃì" + "¤Ëº´Õ" + "¤Ë»µÒ¹Õ" + "¤Í" + "¤Í¡" + "¤Í´" + "¤Í¹" + "¤Í¹¡ÃÕµ" + "¤Í¹¿Ô¡" + "¤Í¹à´¹à«ÍÃì" + "¤Í¹àÊÔÃìµ" + "¤Í¹àÊÔÃì·" + "¤Í¹áǹµì" + "¤ÍÁ" + "¤ÍÁ¾ÔÇàµÍÃì" + "¤ÍÁÁÒ¹â´" + "¤ÍÁÁÔǹÔʵì" + "¤ÍÁᾤ" + "¤ÍÁâ¾à¹¹·ì" + "¤ÍÂ" + "¤ÍÂÅì" + "¤ÍÃÑ»ªÑè¹" + "¤ÍÃì«Ô¡Ò" + "¤ÍÃì´" + "¤ÍÃì»ÍàêÑè¹" + "¤ÍÅÑÁ¹ì" + "¤ÍʵÒÃÔ¡Ò" + "¤ÍफÍ´ì" + "¤ÍàÅÊàµÍÃÍÅ" + "¤Ð" + "¤Ð¹Í§" + "¤Ð¹Ö§" + "¤Ð¹éÒ" + "¤ÐÁÓ" + "¤ÐÂÑ鹤ÐÂÍ" + "¤Ðà¹" + "¤ÐàÂÍ" + "¤Ðá¹¹" + "¤Ñ¡" + "¤Ñ¤¹ÑÁ¾Ã" + "¤Ñ¤¹Ò§¤ì" + "¤Ñ¤¹Ò¹µì" + "¤Ñ³±ÊÙµÃ" + "¤Ñ´" + "¤Ñ·ÅÕÂÒ" + "¤Ñ¹" + "¤Ñ¹©ÒÂ" + "¤Ñ¹·Ã§" + "¤Ñº" + "¤ÑÁÀÕÃÀÒ¾" + "¤ÑÁÀÕÃì" + "¤Ñè¡" + "¤Ñè§" + "¤Ñè¹" + "¤ÑèÇ" + "¤Ñé¹" + "¤Ò" + "¤Ò§" + "¤Ò§¤¡" + "¤Ò´" + "¤Ò¶Ò" + "¤Ò·ÍÅÔ¡" + "¤Ò¹" + "¤Òº" + "¤ÒÁ" + "¤ÒÁÇÒÊÕ" + "¤ÒÂ" + "¤ÒÃÁ" + "¤ÒÃÇÐ" + "¤ÒÃÒÇÒ¹" + "¤ÒÃÒàµé" + "¤ÒÃÒâÍà¡Ð" + "¤ÒÃì" + "¤ÒÃìºÍ¹" + "¤ÒÃìºÍ¹Á͹͡䫴ì" + "¤ÒÃìºÍ¹ä´ÍÍ¡ä«´ì" + "¤ÒÃìºÍÅÔ¡" + "¤ÒÃìºÍ๵" + "¤ÒÃìºÙàÃàµÍÃì" + "¤ÒÃìÅ" + "¤ÒÃìâºäÎà´Ãµ" + "¤ÒÇ" + "¤ÒÇÕ" + "¤Òà¸Âì" + "¤Òà¿è" + "¤Ó" + "¤Ó¹Ç³" + "¤Ó¹Ñº" + "¤Ó¹Ö§" + "¤Óù" + "¤Óú" + "¤ÓÃÒÁ" + "¤Óá˧" + "¤Óãµé" + "¤Ô¡" + "¤Ô§" + "¤Ô´" + "¤ÔÁËѹµì" + "¤ÔÇ" + "¤ÔéÇ" + "¤Õµ" + "¤Õ¹ÂÒ" + "¤Õº" + "¤ÕÁ" + "¤ÕÂì" + "¤ÕÂìºÍÃì´" + "¤ÕÃÕ" + "¤Õè" + "¤Ö¡" + "¤Ö¡¤Ñ¡" + "¤Öè¡" + "¤×¹" + "¤×º" + "¤×Í" + "¤Ø" + "¤Ø¡" + "¤Ø¡¡Õé" + "¤Ø³" + "¤Ø³¸ÃÃÁ" + "¤Ø³ÀÒ¾" + "¤Ø³ÇزÔ" + "¤Ø³ÈѾ·ì" + "¤Ø³ÊÁºÑµÔ" + "¤Ø³Ò¡Ã" + "¤Ø³Ù»¡ÒÃ" + "¤Ø´" + "¤Ø´·ÐÃÒ´" + "¤ØÁ" + "¤ØÂ" + "¤ØÃØ" + "¤Øâ³»¡ÒÃ" + "¤ØèÁ" + "¤Øé§" + "¤Øé¹" + "¤ØéÁ" + "¤ØéÂ" + "¤Ù" + "¤Ù³" + "¤Ù¹" + "¤Ù»Í§" + "¤ÙËÒ" + "¤Ùè" + "¤Ùé" + "¤à¹¨Ã" + "¤çÍ¡à·Å" + "¤è͹" + "¤èÍÁ" + "¤èÍÂ" + "¤èÐ" + "¤èÒ" + "¤èÒ§" + "¤èÒÂ" + "¤èÓ" + "¤é¹" + "¤é͹" + "¤éÍÁ" + "¤éÒ" + "¤éÒ§" + "¤éÒ§¤ÒÇ" + "¤éÒ§àµÔè§" + "¤éÒ¹" + "¤éÓ" + "¦ÃÒÇÒÊ" + "¦Òµ" + "¦Òµ¡Ã" + "¦Òµ¡ÃÃÁ" + "¦èÒ" + "¦éͧ" + "§¡" + "§§" + "§§§ÇÂ" + "§´" + "§º" + "§Á" + "§Ç§" + "§Ç´" + "§Ç§§" + "§Í" + "§Í¡" + "§Í¡á§¡" + "§Í´" + "§Í´á§´" + "§Í¹" + "§Í¹Ë§èÍ" + "§Íº" + "§ÍÁ" + "§ÍÂ" + "§Íá§" + "§Ð" + "§Ñ¡" + "§Ñ´" + "§Ñ¹" + "§Ñº" + "§ÑÇ" + "§ÑÇà§ÕÂ" + "§Ñè¡" + "§Ñè§" + "§ÑèÇ" + "§Ò" + "§Ò¹" + "§Òº" + "§ÒÁ" + "§ÒÂ" + "§Ó" + "§ÔéÇ" + "§Õº" + "§Ö¡" + "§ÖÁ" + "§ÖÁ§Ó" + "§Ø´" + "§Ø¹§§" + "§Øº" + "§Øº§Ôº" + "§ØÂ" + "§Ø蹧èÒ¹" + "§ØèÁ§èÒÁ" + "§ØéÁ" + "§Ù" + "§ÙÊÇÑ´" + "§èǧ" + "§èǹ" + "§èͧ" + "§è͹" + "§èÍÂ" + "§èÒ" + "§èÒ¹" + "§èÒÁ" + "§èÒÂ" + "§èÓ" + "§éǹ" + "§éÍ" + "§éÍÁ" + "§éÒ§" + "§éÒÇ" + "§éÓ" + "¨¡" + "¨§" + "¨§¡Å¹Õ" + "¨§ÍÒ§" + "¨´" + "¨µØ" + "¨µØç¤ì" + "¨µØþԸ" + "¨µØÊ´ÁÀì" + "¨¹" + "¨º" + "¨Á" + "¨ÁÙ¡" + "¨Ã" + "¨Ã¨Ñ´" + "¨Ã´" + "¨ÃÃÂÒ" + "¨ÃÃâŧ" + "¨ÃÅÕ" + "¨ÃÇ´" + "¨ÃÐà¢é" + "¨ÃÑÅ" + "¨ÃÑÊ" + "¨ÃÒ¨Ã" + "¨ÃÔ§" + "¨ÃÔµ" + "¨ÃÔ¸ÃÃÁ" + "¨ÃÔÂÈÒʵÃì" + "¨ÃÔÂÈÖ¡ÉÒ" + "¨ÃÔÂÒ" + "¨Ãا" + "¨ÃÙ" + "¨Å" + "¨Å¹¾ÅÈÒʵÃì" + "¨Å¹ÈÒʵÃì" + "¨ÅÒ¨Å" + "¨Ç¡" + "¨Ç§" + "¨Ç¹" + "¨Çº" + "¨ÇÑ¡" + "¨Í" + "¨Í¡" + "¨Í§" + "¨Í§Ëͧ" + "¨Í´" + "¨Í¹" + "¨Íº" + "¨ÍÁ" + "¨ÍÃìá´¹" + "¨Íá¨" + "¨Ð" + "¨Ð¡ÅÐ" + "¨Ð¡ÅÒÁ" + "¨ÐÅÐËÇÑè¹" + "¨ÐÅÐàÁç´" + "¨Ðà¢é" + "¨Ñ¡" + "¨Ñ¡¢Ø" + "¨Ñ¡¨Ñè¹" + "¨Ñ¡Ã" + "¨Ñ¡Ã¾ÃôÔ" + "¨Ñ¡ÃÀ¾" + "¨Ñ¡ÃÂÒ¹" + "¨Ñ¡ÃÇÃôÔ" + "¨Ñ¡ÃÇÒÅ" + "¨Ñ¡ÃÕ" + "¨Ñ¡ÉØ" + "¨Ñ¡áËÅè¹" + "¨Ñ§" + "¨Ñ§¡Íº" + "¨Ñ§¡éÒ" + "¨Ñ§§Ñ§" + "¨Ñ§ËÇÐ" + "¨Ñ§ËÇÑ´" + "¨Ñ§Ëѹ" + "¨Ñ§äÃ" + "¨ÑäÃ" + "¨Ñ³±ÒÅ" + "¨Ñ³±ì" + "¨Ñ´" + "¨Ñ´¡ÒÃ" + "¨ÑµÇÒ" + "¨ÑµØÃÑÊ" + "¨Ñ¹" + "¨Ñ¹·¹ì" + "¨Ñ¹·ºØÃÕ" + "¨Ñ¹·Ã" + "¨Ñ¹·Ã¤µÔ" + "¨Ñ¹·Ã¤ÃÒÊ" + "¨Ñ¹·ÃØ»ÃÒ¤Ò" + "¨Ñ¹·Ãì" + "¨Ñº" + "¨Ñº¡Ñ§" + "¨Ñº©èÒÂ" + "¨Ñè¹" + "¨ÑèÇ" + "¨Ñé¡" + "¨ÑꡨÕé" + "¨Ñê¡à´ÕÂÁ" + "¨ÑêÇÐ" + "¨Ò¡" + "¨Ò§" + "¨Ò´" + "¨ÒµØç¤Êѹ¹ÔºÒµ" + "¨Ò¹" + "¨Òº" + "¨ÒºÑÅ" + "¨ÒºÑÅÂì" + "¨ÒÁ" + "¨ÒÁ¨ØÃÕ" + "¨ÒÁÃ" + "¨ÒÁÃÕ" + "¨ÒÃ" + "¨ÒÃкÕ" + "¨ÒÃÐä¹" + "¨ÒÃÔ¡" + "¨ÒÃÕ" + "¨ÒÃÕµ" + "¨ÒÃÖ¡" + "¨ÒÇ" + "¨ÒÇÒ" + "¨ÒàÁ¡Ò" + "¨Ó" + "¨Ó¡Ñ´" + "¨Ó¹§" + "¨Ó¹¹" + "¨Ó¹ÃèÒ" + "¨Ó¹Ãèì" + "¨Ó¹Ç¹" + "¨Ó¹Í§" + "¨Ó¹Ó" + "¨Ó»Ò" + "¨Ó»Õ" + "¨Ó¾Ç¡" + "¨ÓÃÑÊ" + "¨ÓÃÙ" + "¨ÓÅͧ" + "¨Ó˹èÒÂ" + "¨ÓÍÇ´" + "¨Óà¾ÒÐ" + "¨ÓàÃÔ" + "¨ÓàÃÕ§" + "¨ÓàÅÂ" + "¨Óṡ" + "¨Ô¡" + "¨Ô§â¨é" + "¨Ôµ" + "¨ÔµÃ" + "¨ÔµÃ¡Ã" + "¨ÔµÃ¡ÃÃÁ" + "¨ÔµÃÅ´Ò" + "¨ÔµÇÔ·ÂÒ" + "¨ÔµàǪ" + "¨Ôµá¾·Âì" + "¨Ô¹´Ò" + "¨Ô¹µ¡ÇÕ" + "¨Ô¹µ¹Ò" + "¨Ô¹µ¹Ò¡ÒÃ" + "¨Ô¹µÀÒ¾" + "¨Ôº" + "¨Ô»Ò¶Ð" + "¨ÔèÁ" + "¨Ô駨¡" + "¨Ô駨͡" + "¨Ôé§ËÃÕ´" + "¨Ôé§àËŹ" + "¨ÔéÁ" + "¨ÔëÇ" + "¨Õ¹" + "¨Õ¹áÊ" + "¨Õº" + "¨ÕÇÃ" + "¨Õè" + "¨Õé" + "¨Õê" + "¨Õê´" + "¨Õë" + "¨Ö§" + "¨Öè§" + "¨Öé§" + "¨×´" + "¨Ø" + "¨Ø¡" + "¨Ø´" + "¨ØµÔ" + "¨Ø¹" + "¨Øº" + "¨Øº¨Ôº" + "¨ØÁ¾¯" + "¨ØÁ¾Ôµ" + "¨ØŨÍÁ" + "¨ØŪվ" + "¨ØŪÕÇѹ" + "¨ØŪÕÇÔ¹" + "¨ØÅ·ÃÃȹì" + "¨ØÅÀÒ¤" + "¨ØÅÇÃä" + "¨ØÅÈÑ¡ÃÒª" + "¨ØÅÊÒÃ" + "¨ØÅÔ¹·ÃÕÂì" + "¨ØÌÒ" + "¨ØÌÒŧ¡Ã³ì" + "¨Øè§" + "¨Øè¹" + "¨ØèÁ" + "¨Øé¹" + "¨Ø鹨Ùê" + "¨ØéÁ" + "¨ØéÂ" + "¨Øê¡¡ÃÙê" + "¨Øêº" + "¨Øêºá¨§" + "¨Ø맨Ôë§" + "¨ØëÁ¨ÔëÁ" + "¨Ù" + "¨Ù§" + "¨Ùº" + "¨Ùè" + "¨Ùé" + "¨Ùê´" + "¨Ùë" + "¨àÃ" + "¨èÍ" + "¨èÍÁ" + "¨èÒ" + "¨èÒ§" + "¨èÒÂ" + "¨é¹" + "¨éǧ" + "¨éÍ" + "¨éÍ¡" + "¨éÍ¡á¨é¡" + "¨éͧ" + "¨é͹" + "¨éÍÂ" + "¨éÐ" + "¨éÒ" + "¨éÒ§" + "¨éÒ¹" + "¨éÒÅÐËÇÑè¹" + "¨éÒÇ" + "¨éÓ" + "¨éÓ¨Õé" + "¨éÓÁèÓ" + "¨êÍ¡" + "¨êÐ" + "¨ëÍ" + "¨ëͧ" + "¨ëÍÂ" + "¨ëÐ" + "¨ëÒ" + "©¡" + "©¡Ãèì" + "©¡ÉѵÃÔÂì" + "©¡Ò¨" + "©¡ÒÁÒ¾¨Ã" + "©§¹" + "©§ÒÂ" + "©¹Ç¹" + "©¹Ñ§" + "©¹Ò¡" + "©¹Ó" + "©ºÑ§" + "©ºÑº" + "©Á" + "©ÁÇ¡" + "©Áѧ" + "©ÁÒ" + "©ÁÓ" + "©Å" + "©ÅÇÂ" + "©Åͧ" + "©ÅÍÁ" + "©ÅÑ¡" + "©ÅÒ¡" + "©ÅÒ´" + "©ÅÒÁ" + "©ÅÒÂ" + "©ÅÔÇ" + "©ÅØ" + "©ÅØ¡©ÅÇÂ" + "©ÅÙ" + "©ÇÂ" + "©ÇÑ´à©ÇÕ¹" + "©ÇÒ§" + "©ÇÕ" + "©È¡" + "©Í¡" + "©Í´" + "©ÍàÅÒÐ" + "©Ð" + "©Ð©Ò¹" + "©Ð¹Ñé¹" + "©Ð¹Õé" + "©ÐÍé͹" + "©ÑµÃ" + "©Ñ¹" + "©Ñ¹·Åѡɳì" + "©Ñ¹·Ð" + "©Ñ¹·Ò" + "©Ñ¹·Ò¹ØÁѵÔ" + "©Ñ¹·ì" + "©Ñº" + "©Ò¡" + "©Ò§" + "©Ò´" + "©Ò¹" + "©Òº" + "©ÒÂ" + "©ÒÂÒ" + "©ÒÇ" + "©Ó©Ò" + "©Ô¹" + "©Ôº" + "©ÔÁ¾ÅÕ" + "©ÔÇ" + "©Ôè§" + "©Õ¡" + "©Õ´" + "©Õè" + "©Ø" + "©Ø¡" + "©Ø¡à©Ô¹" + "©Ø´" + "©Ø¹" + "©ØÂ" + "©Ù´" + "©Ùè" + "©èͧ" + "©èÍÂ" + "©èÒ" + "©èÒ§" + "©èÓ" + "©éÍ" + "ª¡" + "ª§" + "ª§â¤" + "ª®Ò" + "ª´" + "ª¹" + "ª¹¡" + "ª¹¹Õ" + "ª¹Á¾ÃÃÉÒ" + "ª¹Áì" + "ª¹Ç¹" + "ª¹Ð" + "ª¹Ñ¡" + "ª¹Ô´" + "ªºÒ" + "ªÁ" + "ªÁ´ªÁéÍÂ" + "ªÁ¾Ù" + "ªÁ¾Ù¹·" + "ªÁ¾Ù¹Ø·" + "ªÁ¾Ùè" + "ªÁÃÁ" + "ªÁÒ" + "ªÁéÍÂ" + "ªÁéÒÂ" + "ªÂ" + "ªÃ" + "ªÃÐ" + "ªÃÑÇ" + "ªÃÒ" + "ªÅ" + "ªÅ¸ÒÃ" + "ªÅ¸Õ" + "ªÅ¹Ò" + "ªÅ»Ãзҹ" + "ªÅÒÅÑÂ" + "ªÅÒÈÑÂ" + "ªÇ" + "ªÇ´" + "ªÇ¹" + "ªÇÃ" + "ªÇÅÔµ" + "ªÇÒ" + "ªÇÒÅ" + "ªÍ¡" + "ªÍ¡ªéÓ" + "ªÍ§" + "ªÍ¹" + "ªÍº" + "ªÍ»»Ôé§" + "ªÍÁ" + "ªÍÅì¡" + "ªÍ×éÍ" + "ªÍØèÁ" + "ªÍèÓ" + "ªÐ" + "ªÐ§Ñ¡" + "ªÐ§Ñ´" + "ªÐ§ØéÁ" + "ªÐ§è͹" + "ªÐ§éÓ" + "ªÐµÒ" + "ªÐ¹Õ" + "ªÐÁ´" + "ªÐÁÑ´" + "ªÐÃÍÂ" + "ªÐÅÍ" + "ªÐÅÍÁ" + "ªÐÅÙ´" + "ªÐÅèÒ" + "ªÐà§éÍ" + "ªÐà¹ÒÐ" + "ªÐá§é" + "ªÐáŧ" + "ªÐ⧡" + "ªÐâ´" + "ªÑ¡" + "ªÑ§" + "ªÑªÇÒÅ" + "ªÑ¯" + "ªÑ´" + "ªÑ¹" + "ªÑ¹¹ÐµØ" + "ªÑ¹ÉÒ" + "ªÑ¹ÊÙµÃ" + "ªÑÂ" + "ªÑ¾ġÉì" + "ªÑÂÀÙÁÔ" + "ªÑè§" + "ªÑèÇ" + "ªÑèÇâÁ§" + "ªÑé¹" + "ªÑéÇ" + "ªÒ" + "ªÒ" + "ªÒ´" + "ªÒ´¡" + "ªÒµÃÕ" + "ªÒµÐ" + "ªÒµÔ" + "ªÒ¹" + "ªÒ¹Ø" + "ªÒÁ" + "ªÒÂ" + "ªÒÂÒ" + "ªÒÅÒ" + "ªÒÇ" + "ªÒÇàÅ" + "ªÓ" + "ªÓ¹Ñ" + "ªÓ¹Ò" + "ªÓ¹Ô" + "ªÓÃÐ" + "ªÓÃØ´" + "ªÓÃèÇÂ" + "ªÓà¹Õ¹" + "ªÓà¹ÕÂÃ" + "ªÓàÃÒ" + "ªÓàÅ×ͧ" + "ªÓáËÅÐ" + "ªÔ" + "ªÔ¤Òâ¡" + "ªÔ§" + "ªÔ§ªéÒ" + "ªÔ´" + "ªÔ¹" + "ªÔ»" + "ªÔ¾" + "ªÔÁ" + "ªÔÁỹ«Õ" + "ªÔÇËÒ" + "ªÔè§" + "ªÔé¹" + "ªÕ" + "ªÕ»Ð¢ÒÇ" + "ªÕ¾" + "ªÕ¾ÔµÑ¡ÉÑÂ" + "ªÕÇ»ÃÐÇѵÔ" + "ªÕÇÇÔ·ÂÒ" + "ªÕÇÒµÁì" + "ªÕÇÒÅÑÂ" + "ªÕÇÔµ" + "ªÕÇԵѡÉÑÂ" + "ªÕÇÔ¹" + "ªÕÇÕ" + "ªÕÇà¤ÁÕ" + "ªÕé" + "ª×´" + "ª×è¹" + "ª×è¹Á×è¹" + "ª×èÍ" + "ª×é¹" + "ª×éÍ" + "ªØ¡" + "ªØ´" + "ªØ¹" + "ªØº" + "ªØÁ" + "ªØÁ¹ØÁ" + "ªØÁ¾Ã" + "ªØÅÁع" + "ªØÅÕ" + "ªØèÁ" + "ªØèÂ" + "ªØé§" + "ªÙ" + "ªÙé" + "ªâÂ" + "ªâÅ·Ã" + "ªâÅÁ" + "ªäÁ" + "ªçÍ¡â¡àŵ" + "ªçÍ¡â¡áŵ" + "ªèǧ" + "ªèÇÂ" + "ªèÍ" + "ªèͧ" + "ªè͹" + "ªèÒ§" + "ªèÓ" + "ªèӪͧ" + "ªéͧ" + "ªé͹" + "ªéÍÂ" + "ªéÒ" + "ªéÒ§" + "ªéÓ" + "«¡" + "«´" + "«¹" + "«º" + "«Á" + "«Ç´à«" + "«Ç¹" + "«ÇÂ" + "«Í" + "«Í¡" + "«Í§" + "«Í¹" + "«Í¿µìáÇÃì" + "«Í¿·ì" + "«Í¿·ìáÇÃì" + "«ÍÁ«èÍ" + "«ÍÂ" + "«ÍÊ" + "«Ñ¡" + "«Ñ§" + "«Ñ´" + "«Ñ¹" + "«Ñ¹µÒ¤ÅÍÊ" + "«Ñº" + "«Ñ¾¾ÍÃìµ" + "«ÑÅ¿Ò" + "«Ò" + "«Ò¡" + "«Ò¡ØÃÐ" + "«Ò§" + "«Ò¹" + "«Òº«Öé§" + "«Òº«èÒ¹" + "«ÒÁÙäÃ" + "«ÒÅÒà»Ò" + "«ÒÇ" + "«ÒÇ´ì" + "«Ô" + "«Ô¡" + "«Ô¡ÒÃì" + "«Ô¡á«ç¡" + "«Ô¹áÊ" + "«Ôº" + "«Ô»" + "«Ô¿ÔÅÔÊ" + "«ÔÅԤ͹" + "«ÔÇ" + "«Ôè¹" + "«Õ" + "«Õ¡" + "«Õ´" + "«Õ´Õ" + "«Õ¹Í¹" + "«ÕÃÍ¡«ì" + "«Õà¡ÁÊì" + "«ÕàÁ¹µì" + "«ÕàÃÕÂ" + "«Õè" + "«Õé" + "«Ö§" + "«ÖÁ" + "«Öè§" + "«Öé§" + "«×èÍ" + "«×éÍ" + "«Ø¡" + "«Ø§" + "«Ø¹" + "«Øº" + "«Ø»" + "«ØÂ" + "«ØèÁ" + "«ØèÁ«èÒÁ" + "«ØéÁ" + "«ÙªÔ" + "«Ù´«Ò´" + "«Ù´Ò¹" + "«Ùº" + "«Ùà»ÍÃìÁÒà¡çµ" + "«Ùâ¤ÃÊ" + "«Ùè" + "«è¡" + "«èͧ" + "«è͹" + "«èÍÁ" + "«èÒ" + "«èÒ¹" + "«èÒËÃÔèÁ" + "«é¹" + "«éͧ" + "«é͹" + "«éÍÁ" + "«éÒÂ" + "«éÓ" + "¬Ò¹" + "¬Ò»¹¡Ô¨" + "¬Ò»¹Ê¶Ò¹" + "ǹ" + "ѵµÔ" + "Ò³" + "ÒµÔ" + "Õè»Øè¹" + "°Ò¹" + "°Ò¹Ð" + "°Ò¹Ñ¹´Ã" + "°Ò»¹Ò" + "´¡" + "´§" + "´¹µÃÕ" + "´¹â´è" + "´Á" + "´Ãê¹Õ" + "´ÃÒ¿µì" + "´Ãس" + "´ÃسÕ" + "´Å" + "´Ç§" + "´Ç´" + "´ÇÅ" + "´Í¡" + "´Í¡àºÕéÂ" + "´Í¡äÁé" + "´Í§" + "´Í´" + "´Í¹" + "´ÍÁ" + "´ÍÂ" + "´ÍÅÅÒÃì" + "´ÍÊ" + "´Ð" + "´Ñ¡" + "´Ñ¡´Ò¹" + "´Ñ¡á´é" + "´Ñ§" + "´Ñª¹Õ" + "´Ñ´" + "´Ñµ«ì" + "´Ñ¹" + "´Ñº" + "´ÑºàºÔéÅ" + "´ÑÁ¾ì" + "´ÑÊ¡Ã" + "´Ñè§" + "´Ñé§" + "´Ñé¹" + "´Ò" + "´Ò¡" + "´Ò´" + "´ÒµéÒ" + "´Ò¹" + "´Òº" + "´ÒºÊ" + "´ÒÁ" + "´ÒÁ¾ì" + "´ÒÂ" + "´ÒóÕ" + "´ÒôÒÉ" + "´ÒÃÒ" + "´ÒÃì" + "´ÒÅ" + "´ÒÅÑ´" + "´ÒÇ" + "´ÒÇ´Ö§Êì" + "´ÒǹìâËÅ´" + "´ÒÇ⨹Êì" + "´ÒÉ" + "´ÒÉ´Ò" + "´Ó" + "´Óç" + "´ÓÃÑÊ" + "´ÓÃÔ" + "´ÓÄɳÒ" + "´Óà¡Ô§" + "´Óà¹Ô¹" + "´Óᤧ" + "´Ô" + "´Ô¡" + "´Ô¨ÔµÍÅ" + "´Ô©Ñ¹" + "´Ô¶Õ" + "´Ô¹" + "´Ôº" + "´ÔÃѨ©Ò¹" + "´ÔÅ¡" + "´ÔÇÔªÑè¹" + "´ÔʹÕÂì" + "´ÔÊࡵ" + "´Ôè§" + "´ÔèÇ" + "´Ôé¹" + "´ÔéÇ" + "´Õ" + "´Õ¡ÃÕ" + "´Õ´" + "´Õ´Õ·Õ" + "´ÕºØ¡" + "´ÕÇÕ´Õ" + "´Õà«Å" + "´Õà»ÃʪÑè¹" + "´Õ䫹ì" + "´Õä«à¹ÍÃì" + "´Ö¡" + "´Ö¡´ÓºÃþì" + "´Ö§" + "´Ö§ÊÐ" + "´Öè§" + "´ÖèÁ" + "´×Í" + "´×è¹" + "´×èÁ" + "´×éÍ" + "´Ø" + "´Ø¡" + "´Ø¨" + "´Ø´" + "´Ø¹" + "´Øº" + "´ØÁ" + "´Øç¤ì" + "´ØÃÔÂÒ§¤ÈÒʵÃì" + "´ØÃÔÂÒ§¤ÈÔÅ»ì" + "´ØÃÔÂÒ§¤ì" + "´ØÅ" + "´ØžԹԨ" + "´ØÅÀÒ¤" + "´ØžԹԨ" + "´ØÅÂÀÒ¾" + "´ØÉ®Õ" + "´ØɳÕ" + "´ØÉÔµ" + "´ØÊÔµ" + "´ØàËÇèÒ" + "´ØèÁ" + "´ØèÂ" + "´Øé§" + "´Ø駴Ôé§" + "´Øé¹" + "´Ù" + "´Ù¡Ã" + "´Ù´" + "´ÙÃÒ" + "´èǹ" + "´è͹" + "´èÍÁ" + "´èÒ" + "´èÒ§" + "´èÒ¹" + "´èÒÇ" + "´èÓ" + "´é§" + "´é¹" + "´éǧ" + "´éǹ" + "´éÇÂ" + "´éÍÁ" + "´éÍÂ" + "´éÒ¹" + "´éÒÁ" + "´éÒÂ" + "´éÒÇ" + "´éÓ" + "µ¡" + "µ¡Å§" + "µ§" + "µ§©Ô¹" + "µ§Ô´" + "µ´" + "µ¶Ò¤µ" + "µ¹" + "µº" + "µºÐ" + "µÁ" + "µÃ§" + "µÃÁ" + "µÃÁµÃÍÁ" + "µÃáÇÔ·ÂÒ" + "µÃáÈÒʵÃì" + "µÃáÐ" + "µÃǨ" + "µÃǹ" + "µÃÍ¡" + "µÃͧ" + "µÃÍÁµÃÁ" + "µÃÍÁã¨" + "µÃÐ" + "µÃСÙÅ" + "µÃÐ˧èÒ¹" + "µÃÐ˹¡" + "µÃÐ˹ѡ" + "µÃÐ˹Õè" + "µÃÐàǹ" + "µÃѧ" + "µÃѺ" + "µÃÑÂ" + "µÃÑÊ" + "µÃÒ" + "µÃÒ¡µÃÓ" + "µÃÒº" + "µÃÒÊѧ" + "µÃÓ" + "µÃÔ" + "µÃÕ" + "µÃÕÂÑÁ»ÇÒÂ" + "µÃÕ⡳" + "µÃÖ¡" + "µÃÖ§" + "µÃØ" + "µÃØÉ" + "µÃÙ" + "µÃÙè" + "µÄ³" + "µÅ¡" + "µÅº" + "µÅÍ´" + "µÅѺ" + "µÅÒ´" + "µÅÔè§" + "µÇ§" + "µÇÑ´" + "µÇÒ´" + "µÍ" + "µÍ¡" + "µÍ§" + "µÍ´" + "µÍ¹" + "µÍº" + "µÍÁ" + "µÍÃì" + "µÍÃì»Ôâ´" + "µÍáÂ" + "µÍáËÅ" + "µÐ" + "µÐ¡Ãѹ" + "µÐ¡ÃØ´" + "µÐ¡ÃØÁ" + "µÐ¡ÃéÍ" + "µÐ¡ÃéÒ" + "µÐ¡ÅÐ" + "µÐ¡ÅÒÁ" + "µÐ¡Í¹" + "µÐ¡Ñ§" + "µÐ¡ÑèÇ" + "µÐ¡Ø¡µÐ¡Ñ¡" + "µÐ¢Í" + "µÐ¢Òº" + "µÐ¢Ô´µÐ¢Ç§" + "µÐ¤ÃÔÇ" + "µÐ¤Ãغ" + "µÐ¤Í¡" + "µÐ¹ÍÂ" + "µÐºÍ§" + "µÐºÍÂ" + "µÐºÑ¹" + "µÐ»ØèÁµÐ»èÓ" + "µÐ¾Òº" + "µÐ¾Ö´" + "µÐ¾Ö´µÐ¾×Í" + "µÐ¾Øè¹" + "µÐÅÕµÐÅÒ¹" + "µÐÅÖ§" + "µÐÅا" + "µÐÅØÁºÍ¹" + "µÐÅØÁ¾Ø¡" + "µÐÅèÍÁ" + "µÐÇѹ" + "µÐËÅÔÇ" + "µÐà¡Õ¡µÐ¡ÒÂ" + "µÐà¡Õ§" + "µÐà¡Õº" + "µÐà¢çº" + "µÐà¤Õ¹" + "µÐà¦è" + "µÐàºç§" + "µÐà¾Ô´" + "µÐà¾Ôè¹" + "µÐà¾Õ¹" + "µÐàÀÒ" + "µÐàŧ" + "µÐá¡Ã§" + "µÐᤧ" + "µÐầ" + "µÐâ¡" + "µÐâ¡¡" + "µÐ⡹" + "µÐâ¡é" + "µÐ⢧" + "µÐâºÁ" + "µÐ⾡" + "µÐâ˧¡" + "µÐä¡Ã" + "µÐä¤Ãè" + "µÐä¤Ãé" + "µÐäº" + "µÐäÅ" + "µÑ¡" + "µÑ¡ÉÑÂ" + "µÑ§" + "µÑ§©èÒÂ" + "µÑ§à¡" + "µÑ§àÁ" + "µÑ§âÍë" + "µÑ³ËÒ" + "µÑ´" + "µÑ´ÊÔ¹" + "µÑ¹" + "µÑ¹Ë§" + "µÑº" + "µÑÇ" + "µÑè§" + "µÑé§" + "µÑé§áµè" + "µÑéÇâ¼" + "µÑê¡áµ¹" + "µÑëÇ" + "µÒ" + "µÒ¡" + "µÒ´" + "µÒ¹" + "µÒ¹Õ" + "µÒº" + "µÒÁ" + "µÒÂ" + "µÒÅ" + "µÒŻѵÃ" + "µÓ" + "µÓ¹Ò¹" + "µÓºÅ" + "µÓÃǨ" + "µÓÃѺ" + "µÓÃÒ" + "µÓÅÖ§" + "µÓ˹ѡ" + "µÓ˹Ô" + "µÓáÂ" + "µÓá˹è§" + "µÔ" + "µÔ¡ÒËÃѧ" + "µÔ§" + "µÔ³" + "µÔ´" + "µÔÃѨ©Ò¹" + "µÔÅ¡" + "µÔè§" + "µÔéÇ" + "µÔê¡" + "µÔë§" + "µÕ" + "µÕ¹" + "µÕº" + "µÕè" + "µÕë" + "µÖ" + "µÖ¡" + "µÖ§" + "µÖ´µ×ëÍ" + "µÖé¡" + "µÖ页Ñé¡" + "µÖê´µ×ëÍ" + "µ×´" + "µ×ÍÎǹ" + "µ×è¹" + "µ×é¹" + "µ×éÍ" + "µ×êÍ" + "µ×ëÍ" + "µØ" + "µØ¡µÔ¡" + "µØ§" + "µØ¹" + "µØ¹Ò˧ѹ" + "µØº" + "µØáÕ" + "µØÅÒ" + "µØÅÒ¡ÒÃ" + "µØÅÒ¤Á" + "µØËÃÑ´µØàËÃè" + "µØè¹" + "µØèÁ" + "µØèÂ" + "µØ駡èÒ" + "µØ駵Ôé§" + "µØéº" + "µØéÁ" + "µØéÂ" + "µØê" + "µØê¡" + "µØ꡵Ò" + "µØê¡á¡" + "µØê´" + "µØêµêÐ" + "µØ꺻èͧ" + "µØêÂ" + "µØë¹" + "µØëÁ" + "µØëµØèÂ" + "µÙ" + "µÙ¡" + "µÙ´" + "µÙº" + "µÙÁ" + "µÙè" + "µÙé" + "µèǹ" + "µèÍ" + "µèͧáµè§" + "µèÍÁ" + "µèÍÂ" + "µèÒ§" + "µèÓ" + "µé¹" + "µéÁ" + "µéÇÁàµÕéÂÁ" + "µéÍ" + "µéͧ" + "µéͧàµ" + "µé͹" + "µéÍÂ" + "µé͵Ôè§" + "µé͵ÕÇÔ´" + "µéÒ¹" + "µêÍ¡" + "µêÍ¡µëÍÂ" + "µë§" + "µëÍÁ" + "¶¡" + "¶´" + "¶¹¹" + "¶¹ÍÁ" + "¶¹Ñ´" + "¶¹Ñ´¶¹Õè" + "¶¹ÔÁ" + "¶Á" + "¶ÁÖ§·Ö§" + "¶Å¡" + "¶Å¹" + "¶ÅÍ¡" + "¶Åѹ" + "¶ÅÒ" + "¶ÅÒ¡" + "¶ÅÓ" + "¶ÅÕ¶ÅÓ" + "¶ÅÖ§µÒ" + "¶Åا" + "¶Åع" + "¶ÅèÁ" + "¶ÇÑÅÂì" + "¶ÇÒÂ" + "¶ÇÔÅ" + "¶Í¡" + "¶Í§" + "¶Í´" + "¶Í¹" + "¶ÍÂ" + "¶Ð" + "¶Ñ¡" + "¶Ñ§" + "¶Ñ´" + "¶Ñ¹" + "¶ÑÇ" + "¶ÑèÇ" + "¶Ò" + "¶Ò¡" + "¶Ò§" + "¶Ò´" + "¶Ò¹" + "¶ÒÁ" + "¶ÒÇÃ" + "¶Ôè¹" + "¶Õº" + "¶Õè" + "¶Ö¡" + "¶Ö§" + "¶×Í" + "¶Ø§" + "¶Ø¹" + "¶ØÂ" + "¶Ù" + "¶Ù¡" + "¶èÁ" + "¶èǧ" + "¶èÍ" + "¶èͧ" + "¶èÍÁ" + "¶èÍÂ" + "¶èÒ§" + "¶èÒ¹" + "¶èÒÂ" + "¶éǹ" + "¶éÇÂ" + "¶éÍÂ" + "¶éÒ" + "¶éÓ" + "·¡" + "·¡ÅéÒ" + "·´" + "·¹" + "·¹µì" + "·¹ÒÂ" + "·¹â·è" + "·º" + "·º·Ç¹" + "·ºÇ§" + "·ÁÔÌ" + "·ÂÍÂ" + "·Ã¡ÃÃÁ" + "·Ã§" + "·Ãª¹" + "·ÃªÒµÔ" + "·Ã¾ÔÉ" + "·Ã¾Õ" + "·ÃÁÒ¹" + "·ÃÂÈ" + "·ÃÂؤ" + "·Ãû" + "·ÃÃȹÐ" + "·ÃÃÒª" + "·ÃÅѡɳì" + "·Ãǧ" + "·ÃÇ´·Ã§" + "·ÃË´" + "·ÃѾÂÒ¡Ã" + "·ÃѾÂì" + "·ÃѾÂìÊÔ¹" + "·ÃÑÁà»çµ" + "·ÃÒ¹«ÔÊàµÍÃì" + "·ÃÒº" + "·ÃÒÁ" + "·ÃÒÂ" + "·ÃØ´" + "·ÄÉ®Õ" + "·ÅÒÂ" + "·Ç§" + "·Ç´" + "·Ç¹" + "·ÇÂ" + "·ÇÒ·È" + "·ÇÒÂ" + "·ÇÒÃ" + "·ÇÔ" + "·ÇÕ" + "·ÇÕ¸ÒÀÔàÉ¡" + "·ÇÕ»" + "·ÇèÒ" + "·È" + "·È¹ÔÂÁ" + "·ËÒÃ" + "·Í" + "·Í¡" + "·Í§" + "·Í§¡ÇÒÇ" + "·Í§ËÅÒ§" + "·Í´" + "·Í¹" + "·Í¹«ÔÅ" + "·Í¿¿Õè" + "·ÍÂ" + "·ÍÅì¤" + "·Ð¹§" + "·Ð¹Ò¹" + "·Ð¹Ø" + "·ÐÁÑ´·ÐáÁ§" + "·ÐÁÖ¹" + "·ÐÁ×è¹" + "·ÐÂÒ¹" + "·ÐÅǧ" + "·ÐÅÑ¡" + "·ÐÅÒÂ" + "·ÐÅÖè§" + "·ÐÅØ" + "·ÐÇÒÂ" + "·ÐàºÕ¹" + "·ÐàÂÍ·ÐÂÒ¹" + "·ÐàÅ" + "·ÐàÅÒÐ" + "·ÐàÅèÍ·ÐÅèÒ" + "·ÐàÅé¹" + "·ÐáÁè§" + "·Ñ¡" + "·Ñ¡¢Ô" + "·Ñ¡¢Ô³Ò" + "·Ñ¡¢Ô³ÒÇѯ" + "·Ñ¡¢ì" + "·Ñ¡ÉÐ" + "·Ñ¡ÉÔ³" + "·Ñ¡ÉÔ³Ò" + "·Ñ¡ÉÔ³ÒÇÃõ" + "·Ñ¡ÉÔâ³·¡" + "·Ñ§Ê൹" + "·Ñ³±¡ÃÃÁ" + "·Ñ³±¦Òµ" + "·Ñ³±Ê¶Ò¹" + "·Ñ³±ì" + "·Ñ´" + "·Ñ¹" + "·Ñ¹µá¾·Âì" + "·Ñ¹µì" + "·Ñ¹·Õ" + "·Ñº" + "·ÑºÊÁÔ§¤ÅÒ" + "·Ñ¾" + "·Ñ¾¾Õ" + "·Ñȹ¤µÔ" + "·ÑȹÇÔÊÑÂ" + "·ÑȹÈÖ¡ÉÒ" + "·ÑȹÐ" + "·ÑȹÒ" + "·ÑȹҨÃ" + "·ÑȹÕÂÀÒ¾" + "·ÑȹÕÂì" + "·Ñȹٻ¡Ã³ì" + "·Ñȹì" + "·ÑÈä¹Â" + "·Ñè§" + "·ÑèÇ" + "·Ñé§" + "·Ò" + "·Ò¡" + "·Ò§" + "·Ò¹" + "·Òº" + "·ÒÁ" + "·ÒÂ" + "·ÒÂÒ´" + "·ÒÂÒ·" + "·Òá" + "·ÒÃÔ¡Ò" + "·ÒÃس" + "·ÒÃì«Ò¹" + "·ÒÊ" + "·Ó" + "·Ó¹º" + "·Ó¹Í§" + "·Ó¹ÒÂ" + "·Ó¹Ø" + "·ÓÅÒÂ" + "·Óà¹Ò" + "·Óà¹Õº" + "·ÓàÅ" + "·ÓäÁ" + "·Ô¤ÑÁ¾Ã" + "·Ô¦ÑÁ¾Ã" + "·Ô§à¨ÍÃì" + "·Ô°Ô" + "·Ô´" + "·Ô¾Â¨Ñ¡ÉØ" + "·Ô¾ÂÒ³" + "·Ô¾ÂÃÊ" + "·Ô¾Â๵Ã" + "·Ô¾Âì" + "·Ô¾Ò¡Ã" + "·ÔÁ" + "·ÔÇ" + "·Ôǧ¤µ" + "·ÔÇ·Ñȹì" + "·ÔÇÒ" + "·ÔÈ" + "·ÔÈÒ" + "·ÔÈҹطÔÈ" + "·Ôີ" + "·ÔèÁ" + "·Ôé§" + "·Õ" + "·Õ¦ªÒµÔ" + "·ÕÁ" + "·Õà͹·Õ" + "·Õè" + "·Õè´Ô¹" + "·Ö¡" + "·Ö¹·Ö¡" + "·Öº" + "·ÖÁ" + "·Öè§" + "·ÖèÁ" + "·Öé§" + "·×èÍ" + "·Ø" + "·Ø¡" + "·Ø¡¢ÅÒÀ" + "·Ø¡¢ÒÃÁ³ì" + "·Ø¡¢àÇ·¹Ò" + "·Ø¡¢ì" + "·Ø¡Ã¡ÔÃÔÂÒ" + "·Ø¤µÔ" + "·Ø¨ÃÔµ" + "·Ø´" + "·Ø¹" + "·Øº" + "·Ø¾¾Å" + "·Ø¾ÀÔ¡¢ÀÑÂ" + "·ØÂ" + "·Øáѹ´ÒÃ" + "·Øê¹" + "·ØêҵÔ" + "·Øù·ØÃÒÂ" + "·ØþÅ" + "·ØÅÑ¡·ØàÅ" + "·ØÈÕÅ" + "·ØàÃÈ" + "·ØàÃÕ¹" + "·ØàÅÒ" + "·Øè§" + "·Øè¹" + "·ØèÁ" + "·Øé§" + "·ØéÁ" + "·ØéÂ" + "·Ù" + "·Ùµ" + "·ÙµÒ¹Ø·Ùµ" + "·Ù¹" + "·Ùº" + "·ÙÁ" + "·ÙÅ" + "·Ùè" + "·Ùé" + "·á¡ÅéÇ" + "·á§" + "·âÁ¹" + "·èǧ·Ó¹Í§" + "·èǧ·Õ" + "·èǧ·èÒ" + "·èÇÁ" + "·èÍ" + "·èͧ" + "·è͹" + "·èÍÁ" + "·èÒ" + "·èÒ¹" + "·èÒÁ¡ÅÒ§" + "·é¹" + "·éǧ" + "·éǹ" + "·éÇÁ" + "·éÍ" + "·éͧ" + "·éÒ" + "·éÒÂ" + "·éÒÇ" + "¸§" + "¸¹" + "¸¹ºÑµÃ" + "¸¹ºØÃÕ" + "¸¹ÊÁºÑµÔ" + "¸¹ÊÒÃ" + "¸¹Ò¤ÒÃ" + "¸¹Ò³ÑµÔ" + "¸¹ÒÃÑ¡Éì" + "¸¹Ù" + "¸Á" + "¸Ã" + "¸Ã³Õ" + "¸ÃÃÁ" + "¸ÃÃÁ¡ÒÂ" + "¸ÃÃÁªÒµÔ" + "¸ÃÃÁ´Ò" + "¸ÃÃÁÈÒʵÃì" + "¸ÃÃÁÐ" + "¸ÃÃÁиÑÁâÁ" + "¸ÃÃÁÒ·ÔµÂì" + "¸ÃÃÁÒ¸ÃÃÁ" + "¸ÃÃÁÒ¸Ô»äµÂ" + "¸ÃÃÁÒ¸ÔÉ°Ò¹" + "¸ÃÃÁÒ¹ØÊÒ¹" + "¸ÃÃÁÒÀÔÁØ¢" + "¸ÃÃÁÒÀÔÊÁÑÂ" + "¸ÃÃÁÒµ¹Ð" + "¸ÃÃÁÒÃÁ³ì" + "¸ÃÃÁÒʹì" + "¸ÃÃÁÔ¡" + "¸ÃÒ¸Ã" + "¸ÃÒ¸ÒÃ" + "¸ÃÒ¸Ôº´Õ" + "¸ÃÒ¸Ô»" + "¸Ñ" + "¸ÑÒËÒÃ" + "¸Ñ¾×ª" + "¸Ñ¹ÇÒ¤Á" + "¸ÑÁÁÐ" + "¸ÒµØ" + "¸Ò¹Õ" + "¸ÒÃ" + "¸ÒÃÒ" + "¸ÓÁç¤ì" + "¸Óç" + "¸Ô´Ò" + "¸Ôີ" + "¸Ø´§¤ì" + "¸ØáÃÃÁ" + "¸ØáÒÃ" + "¸ØáԨ" + "¸ØÃÐ" + "¸ØÅÕ" + "¸ØÇ´ÒÃÒ" + "¸ØÇÀÒ¤" + "¸ØÇÁ³±Å" + "¸Ù»" + "¹¡" + "¹¤Ã" + "¹¤ÃÃÒªÊÕÁÒ" + "¹¤ÃÔ¹·Ãì" + "¹¤àÃÈ" + "¹§¤ÃÒ" + "¹§¹Øª" + "¹§¾Ð§Ò" + "¹§¾ÒÅ" + "¹§ÃÒÁ" + "¹§Åѡɳì" + "¹§àÂÒÇì" + "¹·Õ" + "¹¹·ºØÃÕ" + "¹¹·ÃÕ" + "¹¹·ÅÕ" + "¹º" + "¹¾" + "¹¾»®Å" + "¹¾È¡" + "¹¾ÈÙÅ" + "¹ÀÒ" + "¹ÀÒÅÑÂ" + "¹Á" + "¹ÁÑÊ¡ÒÃ" + "¹Ã¡" + "¹ÃÊÔ§Ëì" + "¹ÃÕàǪ" + "¹ÃÕá¾·Âì" + "¹Ä¤ËÔµ" + "¹Ä¹Ò·" + "¹ÄÁÅ" + "¹ÄÁÔµ" + "¹ÅÒ¯" + "¹ÅÔ¹Õ" + "¹Ç´" + "¹Ç¹ÔÂÒÂ" + "¹ÇÁ" + "¹ÇÂ" + "¹ÇÅ" + "¹ÇÅÅÍÍ" + "¹ÇÅÅÐÍͧ" + "¹Í" + "¹Í¡" + "¹Í§" + "¹Íµ" + "¹Í¹" + "¹Íº" + "¹ÍÂ" + "¹ÍÃìàÇÂì" + "¹Ð" + "¹Ñ¡" + "¹Ñ¡¢Ñµ" + "¹Ñ¡ÈÖ¡ÉÒ" + "¹Ñ¡ÉѵÃ" + "¹Ñ¡àÃÕ¹" + "¹Ñ§¤ÑÅ" + "¹Ñ´" + "¹Ñ´´Ò" + "¹Ñµ¶Øì" + "¹Ñ¹·¹Ò¡ÒÃ" + "¹Ñº" + "¹ÑÂ" + "¹Ñ¹ì" + "¹ÑÇ" + "¹Ñè§" + "¹Ñè¹" + "¹Ñé¹" + "¹Ò" + "¹Ò¡" + "¹Ò¤" + "¹Ò¤Ã" + "¹Ò¤ÃÒª" + "¹Ò¤Õ" + "¹Ò§" + "¹Ò§ÊÒÇ" + "¹Ò§áÍè¹" + "¹Ò«Ò" + "¹Ò¯" + "¹Ò´" + "¹Ò¶" + "¹Ò·" + "¹Ò·Õ" + "¹Ò¹" + "¹Ò¹Ñ»¡ÒÃ" + "¹Ò¹Ò" + "¹Òº" + "¹ÒÀÕ" + "¹ÒÁ" + "¹ÒÁ¡Ã" + "¹ÒÁÊ¡ØÅ" + "¹ÒÁҹءÃÁ" + "¹ÒÁÒÀÔä¸Â" + "¹ÒÂ" + "¹Ò¡" + "¹ÒÃÒ³ì" + "¹ÒÃÕ" + "¹ÒÇÒ" + "¹ÒÇÔ¡" + "¹ÒÇÔ¹" + "¹ÒÇÕ" + "¹ÒÊÔ¡" + "¹ÒÌÔ¡Ò" + "¹ÒÌÔà¡" + "¹Òâ¹" + "¹Ó" + "¹Ô" + "¹Ô¡Ã" + "¹Ô¡ÃÍ´ì" + "¹Ô¡ÒÂ" + "¹Ô¡à¡ÔÅ" + "¹Ô¤Á" + "¹Ô¤Ã¹¶ì" + "¹Ô¤ËÔµ" + "¹Ô¨" + "¹Ô´" + "¹ÔµÂÊÒÃ" + "¹ÔµÂì" + "¹ÔµÔ" + "¹Ô·ÃÃÈ" + "¹Ô·ÃÒ" + "¹Ô·Ñȹì" + "¹Ô·Ò¹" + "¹Ô¹·Ò" + "¹ÔºÒµ" + "¹Ô¾¹¸ì" + "¹Ô¾¾Ò¹" + "¹ÔÁ¹µì" + "¹ÔÁÁÒ¹" + "¹ÔÁÁҹôÕ" + "¹ÔÁÔµ" + "¹ÔÂÁ" + "¹ÔÂÒÁ" + "¹ÔÂÒÂ" + "¹Ô÷ء¢ì" + "¹ÔùÒÁ" + "¹ÔÃÀÑÂ" + "¹ÔÃÁÅ" + "¹ÔÃÁÔµ" + "¹ÔÃѹ´Ã" + "¹ÔÃÒÈ" + "¹ÔÃâ·É" + "¹ÔÅ" + "¹ÔÅغÅ" + "¹ÔÇ¡Ô¹Õ" + "¹ÔǤÅÔÍÔ¡" + "¹ÔÇ«ÕᏴì" + "¹ÔǵÃ͹" + "¹ÔÇÂÍÃì¤" + "¹ÔÇóì" + "¹ÔÇѵ" + "¹ÔÇѵ¹ì" + "¹ÔÇÒµ" + "¹ÔÇÒÊ" + "¹ÔÇà¤ÅÕÂÃì" + "¹ÔÇà¤ÅÕÂÊ" + "¹ÔÊÑÂ" + "¹ÔÊÔµ" + "¹Ôà·È" + "¹ÔàÇÈ" + "¹ÔàÇȹì" + "¹Ô⤵Թ" + "¹Ôâø" + "¹ÔâźÅ" + "¹Ôè§" + "¹ÔèÁ" + "¹ÔèÇ" + "¹ÔéÇ" + "¹Õ" + "¹ÕÍ͹" + "¹ÕâÍ´ÔàÁÕÂÁ" + "¹Õè" + "¹Õé" + "¹Ö¡" + "¹Öè§" + "¹Ø§" + "¹Øª" + "¹Øè§" + "¹Øè¹" + "¹ØèÁ" + "¹ØéÂ" + "¹Ù¹" + "¹Ùè¹" + "¹Ùé¹" + "¹àÃÈÇÃ" + "¹âºÒÂ" + "¹âôÁ" + "¹èÇÁ" + "¹èͧ" + "¹èÒ" + "¹èÒ¹" + "¹éͧ" + "¹éÍÁ" + "¹éÍÂ" + "¹éÍÂ˹èÒ" + "¹éÍÂâ˹è§" + "¹éÒ" + "¹éÒÇ" + "¹éÓ" + "¹éÓÁѹ" + "¹éÓà§Ô¹" + "º¡" + "º¡¾Ãèͧ" + "º§" + "º§¡ª" + "º´" + "º´Ô¹·Ãà´ªÒ" + "º´Ô¹·Ãì" + "º´Õ" + "º·" + "º¹" + "º¾ÔµÃ" + "º¾Ô¸" + "ºÃÁ" + "ºÃÁѵ¶ì" + "ºÃÃ" + "ºÃè§" + "ºÃè¶Ã³ì" + "ºÃèº" + "ºÃèǺ" + "ºÃèØ" + "ºÃó" + "ºÃóҡÒÃ" + "ºÃóҤÁ" + "ºÃóҸԡÒÃ" + "ºÃóҹءÃÁ" + "ºÃóÒÃÑ¡ÉÈÒʵÃì" + "ºÃóÒÃÑ¡Éì" + "ºÃôÒ" + "ºÃ÷Á" + "ºÃ÷Ѵ" + "ºÃ÷ء" + "ºÃþ" + "ºÃþªÒ" + "ºÃþªÔµ" + "ºÃþµ" + "ºÃþºØÃØÉ" + "ºÃç" + "ºÃç¡ì" + "ºÃÃÂÒ¡ÒÈ" + "ºÃÃÂÒÂ" + "ºÃÃÅÑÂ" + "ºÃÃÅØ" + "ºÃÃÉÑ·" + "ºÃÃËÒÃ" + "ºÃÃà¨Ô´" + "ºÃÃà·Ò" + "ºÃÃàŧ" + "ºÃÃâÅÁ" + "ºÃÑè¹´Õ" + "ºÃÒÇà«ÍÃì" + "ºÃÔ" + "ºÃÔ¡ÃÃÁ" + "ºÃÔ¡ÒÃ" + "ºÃÔ¢ÒÃ" + "ºÃÔ¤³Ëì" + "ºÃÔ¨Ò¤" + "ºÃÔ¨Òá" + "ºÃÔ¨ÒÃÔ¡Ò" + "ºÃÔºÒÅ" + "ºÃÔºÙóì" + "ºÃԾѵÃ" + "ºÃÔ¾ÒÃ" + "ºÃÔÀѳ±ì" + "ºÃÔÀÒÉ" + "ºÃÔÃÑ¡Éì" + "ºÃÔÃÒª" + "ºÃÔÇÒÃ" + "ºÃÔÉÑ·" + "ºÃÔÊØ·¸Ôì" + "ºÃÔËÒÃ" + "ºÃÔà©·" + "ºÃÔ൹" + "ºÃÔàdz" + "ºÃÔâÀ¤" + "ºÅçÍ¡" + "ºÇ¡" + "ºÇ§" + "ºÇª" + "ºÇ¹" + "ºÇº" + "ºÇÁ" + "ºÇÃ" + "ºÍ" + "ºÍ¡" + "ºÍ´" + "ºÍ´Õé" + "ºÍ¹" + "ºÍº" + "ºÍÃì¡" + "ºÍÃì´" + "ºÍÃìà¹ÕÂÇ" + "ºÍÅ" + "ºÍÅÅÙ¹" + "ºÐËÁÕè" + "ºÑ¡" + "ºÑ¤àµÃÕ" + "ºÑ§" + "ºÑ§¡ÐâÅ" + "ºÑ§¤Á" + "ºÑ§¤Å" + "ºÑ§¤Ñº" + "ºÑ§ÊØ¡ØÅ" + "ºÑ§ÍÃ" + "ºÑ§ÍÒ¨" + "ºÑ§à¡Ô´" + "ºÑ§àËÕ¹" + "ºÑ§àÍÔ" + "ºÑªÃ" + "ºÑªÒ" + "ºÑªÕ" + "ºÑѵÔ" + "ºÑ³±Ôµ" + "ºÑ³±ÔµÂì" + "ºÑ³±Ø" + "ºÑ³±ÙÃ" + "ºÑ³³ÒÊ" + "ºÑ³ÃÊ" + "ºÑ³ÃÊÕ" + "ºÑ³à±ÒСì" + "ºÑ³à±ÒÐÇì" + "ºÑ´" + "ºÑ´¡ÃÕ" + "ºÑ´«º" + "ºÑ´ÊÕ" + "ºÑµÃ" + "ºÑ¹" + "ºÑ¹´ÒÅ" + "ºÑ¹·Ö¡" + "ºÑ¹ÂкѹÂѧ" + "ºÑ¹Å×Í" + "ºÑ¹à·Ô§" + "ºÑ¹ä´" + "ºÑ»¼ÒÊÐ" + "ºÑ¾" + "ºÑÅ¡ÒàÃÕÂ" + "ºÑÅÅѧ¡ì" + "ºÑÅÅÙ¹" + "ºÑÇ" + "ºÑÊ" + "ºÑè¹" + "ºÑé§" + "ºÑé¹" + "ºÑê¡" + "ºÒ" + "ºÒ¡" + "ºÒ§" + "ºÒ´" + "ºÒ´·ÐÂÑ¡" + "ºÒ´ÒÅ" + "ºÒµ" + "ºÒµÃ" + "ºÒ·" + "ºÒ·º§ÊØì" + "ºÒ·ËÅǧ" + "ºÒ·Ò¸Ö¡" + "ºÒ·Ø¡Ò" + "ºÒ¹" + "ºÒ¹ª×è¹" + "ºÒ¹ºØÃÕ" + "ºÒ¹ÕÂÐ" + "ºÒ¹àªéÒ" + "ºÒ¹àÂç¹" + "ºÒ»" + "ºÒÂ" + "ºÒÃÁÕ" + "ºÒÃÍÁÔàµÍÃì" + "ºÒÃì" + "ºÒÃìàÃÅ" + "ºÒÅ" + "ºÒÅÕ" + "ºÒÈ" + "ºÒÈ¡ì" + "ºÒÊࡵºÍÅ" + "ºÒËÅÕ" + "ºÓ¹Ò" + "ºÓºÑ´" + "ºÓÃÒº" + "ºÓÃÒÈ" + "ºÓÃا" + "ºÓÃÙ" + "ºÓà¾ç" + "ºÓàÃÍ" + "ºÓà˹ç¨" + "ºÔ" + "ºÔ°" + "ºÔ³±ºÒµ" + "ºÔ´" + "ºÔ´¾ÅÔéÇ" + "ºÔ´Ã" + "ºÔ´Ò" + "ºÔµ" + "ºÔ¹" + "ºÔÅ" + "ºÔÅàÅÕ´" + "ºÔè¹" + "ºÕ±Ò" + "ºÕ¹" + "ºÕº" + "ºÕé" + "ºÖ¡" + "ºÖ¡ºÖ¹" + "ºÖ§" + "ºÖè§" + "ºÖé§" + "ºØ" + "ºØ¡" + "ºØ¡ÃØ¡" + "ºØ¡É¡" + "ºØ¤¤Å" + "ºØ¤ÅÒ¡Ã" + "ºØ¤ÅÒ¸ÔÉ°Ò¹" + "ºØ¤ÅÔ¡" + "ºØ¤ÅÔ¡ÀÒ¾" + "ºØ" + "ºØÒ¹ØÀÒ¾" + "ºØÒÀÔ¹ÔËÒÃ" + "ºØ³±ÃÔ¡" + "ºØ³Âì" + "ºØµÃ" + "ºØµÃÒ" + "ºØµÃÕ" + "ºØº" + "ºØ»¼ªÒµÔ" + "ºØ¾¡ÃÃÁ" + "ºØ¾¡ÒÃÕ" + "ºØ¾¡Ô¨" + "ºØ¾ªÒµÔ" + "ºØ¾·Ñ¡ÉÔ³" + "ºØ¾¹ÔÁÔµ" + "ºØ¾º·" + "ºØ¾¾Ò¨ÒÃÂì" + "ºØ¾à¾Êѹ¹ÔÇÒÊ" + "ºØ¿à¿èµì" + "ºØþ·ÔÈ" + "ºØþº·" + "ºØþҨÒÃÂì" + "ºØÃÒ³" + "ºØÃÔÁ·ÔÈ" + "ºØÃÔÁ¾ÃÃÉÒ" + "ºØÃÔÁÊÔ·¸Ô" + "ºØÃÕ" + "ºØÃØÉ" + "ºØÉ¡Ã" + "ºØɺ§" + "ºØɺÒ" + "ºØÉÂÁÒÊ" + "ºØÉÃÒ¤ÑÁ" + "ºØ˧ѹ" + "ºØ˧Ò" + "ºØËç" + "ºØËÃÕè" + "ºØËÅѹ" + "ºØâ÷Ñè§" + "ºØèÁºèÒÁ" + "ºØé§" + "ºØéÂ" + "ºØëÁ" + "ºÙªÒ" + "ºÙªÒÂÑ" + "ºÙ´" + "ºÙµ" + "ºÙóÀÒ¾" + "ºÙóÐ" + "ºÙþÒ" + "ºÙþҨÒÃÂì" + "ºÙé" + "ºÙê" + "ºè" + "ºè§" + "ºè¹" + "ºèÁ" + "ºèǧ" + "ºèÍ" + "ºèͧ" + "ºè͹" + "ºèÍÂ" + "ºèÒ" + "ºèÒ§" + "ºèÒÂ" + "ºèÒÇ" + "ºéǹ" + "ºéͧ" + "ºéͧáºêÇ" + "ºéÍÁ" + "ºéÒ" + "ºéÒ§" + "ºéÒ¹" + "ºéÒÃÐËèÓ" + "ºê§àºê§" + "ºêÇÂ" + "ºêͧ" + "ºêÐ" + "ºëÍÁ" + "ºëÍÂ" + "ºëÓ" + "»¡" + "»¡¤Ãͧ" + "»¡µÔ" + "»¡Ã³ì" + "»¡ÒÃ" + "»¡Ô³¡Ð" + "»¯Ñ¡" + "»¯Ô¡Ã³ì" + "»¯Ô¡ÃÃÁ" + "»¯Ô¡ÔÃÔÂÒ" + "»¯Ô¡ÙÅ" + "»¯Ô¤Á" + "»¯ÔªÕǹÐ" + "»¯ÔÒ" + "»¯ÔÒ³" + "»¯Ô·Ô¹" + "»¯Ôº¶" + "»¯ÔºÑµÔ" + "»¯Ô»·Ò" + "»¯Ô»Ñ¡Éì" + "»¯Ô¾Ñ·¸ì" + "»¯Ô¾Ò¡Âì" + "»¯ÔÀÒ¤" + "»¯ÔÀÒ³" + "»¯ÔÁÒ" + "»¯ÔÁÒ¡Ã" + "»¯ÔÂØ·¸ì" + "»¯ÔÃÙ»" + "»¯ÔÇѵÔ" + "»¯ÔÇÒµ" + "»¯ÔÇÒ·" + "»¯Ôʹ¸Ô" + "»¯ÔÊѧ¢Ã³ì" + "»¯ÔÊѹ¶ÒÃ" + "»¯ÔÊÑÁ¾Ñ¹¸ì" + "»¯ÔàǸ" + "»¯Ôàʸ" + "»¯ÔâÅÁ" + "»°¾Õ" + "»°Á" + "»°Á·Ñȹì" + "»°Á¹Ôà·È" + "»°Á¾ÂÒºÒÅ" + "»°ÁÄ¡Éì" + "»°ÁÇÑÂ" + "»°Áà·È¹Ò" + "»³µ" + "»³Ô¸Ò¹" + "»´" + "»¶¾Õ" + "»·Ò¹Ø¡ÃÁ" + "»·ØÁ" + "»·ØÁ¸Ò¹Õ" + "»¹" + "»¹Ñ´´Ò" + "»¹à»" + "»º" + "»Á" + "»Ã¡" + "»Ã¡µÔ" + "»Ã§" + "»Ã¹" + "»Ã¹¹ÔºÑµÔ" + "»Ã¹ÑÂ" + "»Ãº" + "»Ã»Ñ¡Éì" + "»ÃÁѵ¶ì" + "»ÃÁÒ¨ÒÃÂì" + "»ÃÁÒ³Ù" + "»ÃÁÒÀÔàÉ¡" + "»ÃÁÒÀÔä¸Â" + "»ÃÇ´" + "»Ãǹá»Ã" + "»ÃÇÒ·Õ" + "»ÃÊÔµ" + "»Ãͧ´Í§" + "»ÃÍ´" + "»ÃÍ·" + "»ÃÍÂ" + "»ÃÐ" + "»ÃСº" + "»ÃСǴ" + "»ÃСͺ" + "»ÃСѹ" + "»ÃСѺ" + "»ÃСÒÂ" + "»ÃСÒÃ" + "»ÃСÒÈ" + "»ÃСÒȹÕºѵÃ" + "»ÃСÒÈÔµ" + "»ÃСԴ" + "»ÃФº" + "»ÃФº»ÃÐ˧Á" + "»ÃФͧ" + "»ÃФÓ" + "»ÃШº" + "»ÃШǺ" + "»ÃШѡÉì" + "»ÃШÑ" + "»ÃШѹ" + "»ÃШҤ" + "»ÃШҹ" + "»ÃШÓ" + "»ÃШÔÁ" + "»ÃШØ" + "»ÃШëÍ»ÃÐá¨ë" + "»ÃЪ´" + "»ÃЪÇÃ" + "»ÃЪѹ" + "»ÃЪÒ" + "»ÃЪҪ¹" + "»ÃЪҸԻѵÂì" + "»ÃЪҸԻäµÂ" + "»ÃЪÒÀÔºÒÅ" + "»ÃЪԴ" + "»ÃЪØÁ" + "»Ãгµ" + "»ÃгÁ" + "»ÃгÒÁ" + "»ÃгԸҹ" + "»ÃгԸÔ" + "»Ãгյ" + "»Ãд¹" + "»Ãдǹ" + "»Ãд͹" + "»Ãдѡ»ÃÐà´Ô´" + "»Ãдѧ" + "»ÃдѺ" + "»ÃдÒ" + "»Ãдһ" + "»ÃдÒÉ" + "»ÃдԴ»ÃдÍÂ" + "»ÃдԷԹ" + "»ÃдÔÉ°Ò¹" + "»ÃдÔÉ°ì" + "»Ãдا" + "»Ãдب" + "»ÃдÙè" + "»ÃеÙ" + "»ÃжÁ" + "»Ãзǹ" + "»ÃзѡÉì" + "»Ãзѧ" + "»ÃзѴ" + "»ÃзѺ" + "»Ãзҹ" + "»ÃзԹ" + "»ÃзÔè¹" + "»Ãзջ" + "»Ãзع" + "»ÃзØÉ" + "»ÃзØÉÃéÒÂ" + "»Ãзéǧ" + "»Ãиҹ" + "»ÃиҹҸԺ´Õ" + "»ÃйÁ" + "»ÃйÍÁ" + "»ÃйջÃйÍÁ" + "»ÃлÃÒÂ" + "»ÃлÒ" + "»ÃоĵÔ" + "»ÃоĸÔì" + "»Ãоѷ¸ì" + "»Ãоѹ¸ì" + "»Ãоҵ" + "»ÃоÒÊ" + "»ÃоÒÌ" + "»ÃоԳ" + "»Ãоط¸ì" + "»ÃÐÀÑÊÊÃ" + "»ÃÐÀÒ" + "»ÃÐÀÒ¤ÒÃ" + "»ÃÐÀÒ¾" + "»ÃÐÀÒÊ" + "»ÃÐÁ§" + "»ÃÐÁÇ" + "»ÃÐÁÇÅ" + "»ÃÐÁÒ³" + "»ÃÐÁÒ·" + "»ÃÐÁØ¢" + "»ÃÐÁØ·" + "»ÃÐÁÙÅ" + "»ÃÐÂØ¡µì" + "»ÃÐÂØ·¸ì" + "»ÃÐÂÙÃ" + "»ÃÐÅÁ¾ì" + "»ÃÐÅͧ" + "»ÃÐÅÑÂ" + "»ÃÐÅÒµ" + "»ÃÐÇÃõ" + "»ÃÐÇÃõ¹ì" + "»ÃÐÇѵÔ" + "»ÃÐÇѵԡÒóì" + "»ÃÐÇѵÔÈÒʵÃì" + "»ÃÐÇÒµ" + "»ÃÐÇÒÅ" + "»ÃÐÇÒÊ" + "»ÃÐÇÔ§" + "»ÃÐÇÔª" + "»ÃÐÇÔµÃ" + "»ÃÐÇÕ³" + "»ÃÐÈÁ" + "»ÃÐÈÒʹì" + "»ÃÐÊ¡" + "»ÃÐʧ¤ì" + "»ÃÐʺ" + "»ÃÐʺ¡Òóì" + "»ÃÐʾ" + "»ÃÐÊÒ" + "»ÃÐÊÒ·" + "»ÃÐÊÒ¹" + "»ÃÐÊÔ·¸Ô¼Å" + "»ÃÐÊÔ·¸ÔÀÒ¾" + "»ÃÐÊÔ·¸Ôì" + "»ÃÐÊÙµÔ" + "»ÃÐËÁèÒ" + "»ÃÐËÂÑ´" + "»ÃÐËÅÒ´" + "»ÃÐËÅèÓ" + "»ÃÐËÒÃ" + "»ÃÐÎÒÁ" + "»ÃÐह" + "»ÃÐਡ" + "»ÃÐà¨Ô´»ÃÐà¨éÍ" + "»ÃÐà¨Õ´" + "»ÃÐà´" + "»ÃÐà´ÔÁ" + "»ÃÐà´Õ§" + "»ÃÐà´ÕëÂÇ" + "»ÃÐà´ÕëÂÇ»ÃдëÒÇ" + "»ÃÐà´ç¹" + "»ÃÐà·È" + "»ÃÐà·ÈÃÒª" + "»ÃÐà·Èä·Â" + "»ÃÐà·×ͧ" + "»ÃÐླÕ" + "»ÃÐàÀ·" + "»ÃÐàÁÔ¹" + "»ÃÐàdzÕ" + "»ÃÐàÇÈ" + "»ÃÐàÇȹì" + "»ÃÐàÊÃÔ°" + "»ÃÐá¡¡" + "»ÃÐá¨" + "»ÃÐâ¤Á" + "»ÃÐâ¤" + "»ÃÐ⪹ì" + "»ÃÐâÅÁ" + "»ÃÑ¡" + "»Ãѧ" + "»ÃѪÒ" + "»ÃѵÂصºÑ¹" + "»ÃѵÂغѹ" + "»Ãѹ" + "»ÃѺ" + "»ÃÑÁ»ÃÒ" + "»ÃÑȹÕ" + "»ÃÑÈÇì" + "»ÃÒ¡¯" + "»ÃÒ¡ÃÁ" + "»ÃÒ¡ÒÃ" + "»ÃÒ¤ÀÒÃ" + "»ÃÒ§" + "»ÃÒ§¤ì" + "»ÃÒ¨Õ¹" + "»ÃÒªÒ" + "»ÃÒªì" + "»ÃÒªÑÂ" + "»ÃÒªÔµ" + "»ÃÒ³" + "»ÃÒ³Õ" + "»ÃÒ´" + "»ÃÒ¹Õ" + "»ÃÒº" + "»ÃÒº´ÒÀÔàÉ¡" + "»ÃÒ»µì" + "»ÃÒÀ¾" + "»ÃÒÁ" + "»ÃÒÁÒÊ" + "»ÃÒÂ" + "»ÃÒö¹Ò" + "»ÃÒÃÀ" + "»ÃÒÃÁÀì" + "»ÃÒÈ" + "»ÃÒÈÃÑÂ" + "»ÃÒÈÒÃ" + "»ÃÒɳÕ" + "»ÃÒÉÒ³" + "»ÃÒÊÒ·" + "»ÃÒâÁª" + "»ÃÒâÁ·Âì" + "»ÃÓ" + "»ÃÔ" + "»ÃÔ¡" + "»ÃÔ¤³Ëì" + "»ÃÔ¨Ò¤" + "»ÃÔ¨ÒÃÔ¡Ò" + "»ÃÔ«ÖÁ" + "»ÃÔÒ" + "»ÃÔ³ÒÁ" + "»ÃÔ³Ò¡" + "»ÃÔµ" + "»ÃÔµµÐ" + "»ÃÔµÃ" + "»ÃÔ·ÃÃȹì" + "»ÃÔ·Ñȹì" + "»ÃÔ¹" + "»ÃÔ¹Êì" + "»ÃÔ¹Ô¾¾Ò¹" + "»ÃÔº" + "»ÃÔÁ³±Å" + "»ÃÔÁÑ·" + "»ÃÔÁÒ³" + "»ÃÔÁÒµÃ" + "»ÃÔÂѵÔ" + "»ÃÔÂÒÂ" + "»ÃÔÇÃõ" + "»ÃÔÇÒÊ" + "»ÃÔȹÒ" + "»ÃÔà©·" + "»ÃÔèÁ" + "»ÃÕªÒ" + "»ÃÕ´Ò" + "»ÃÕ´Ôì" + "»ÃÕÂÒ" + "»ÃÕè" + "»ÃÕê´" + "»ÃÖ¡ÉÒ" + "»Ã×Í" + "»Ã×ëÍ" + "»ÃØ" + "»Ãا" + "»ÃÙ´" + "»ÃÙê´»ÃêÒ´" + "»ÃÙê¿" + "»ÃàÁ¹·Ãì" + "»ÃâÅ¡" + "»ÃèÒ" + "»ÃëÍ" + "»Ä¨©Ò" + "»Äɮҧ¤ì" + "»Å¡" + "»Å§" + "»Å´" + "»ÅÇ¡" + "»ÅÍ¡" + "»ÅÍ´" + "»ÅÍ´ÀÑÂ" + "»Åͺ" + "»ÅÍÁ" + "»ÅÐ" + "»ÅÑ¡" + "»ÅÑ´" + "»ÅÑè§" + "»ÅÑê¡" + "»ÅÑê¡ÍÔ¹" + "»ÅÒ" + "»ÅÒµ" + "»ÅÒº" + "»ÅÒÂ" + "»ÅÒÇÒÌ" + "»ÅÒʹҡÒÃ" + "»ÅÒÊàµÍÃì" + "»ÅÔ§" + "»ÅÔ´" + "»ÅÔÇ" + "»ÅÔ⾸" + "»ÅÔèÁ" + "»ÅÔé¹" + "»ÅÕ" + "»ÅÕ¡" + "»Å×éÁ" + "»ÅØ¡" + "»ÅÙ¡" + "»Åè§" + "»Åèͧ" + "»ÅèÍÂ" + "»Åé¹" + "»Åéͧ" + "»Åé͹" + "»ÅéÓ" + "»Ç¡à»Õ¡" + "»Ç§" + "»Ç´" + "»ÇÒóÒ" + "»ÈØ" + "»Í" + "»Í¡" + "»Í§" + "»Í´" + "»Í¹" + "»Í¹´ì" + "»Íº" + "»ÍÂ" + "»ÍÃì" + "»ÍÃìµØà¡Ê" + "»Ð" + "»Ð¡¹" + "»Ð¡ÒÃѧ" + "»Ð¢ÒÇ" + "»Ð·Ð" + "»Ð·Ø" + "»Ð˧Ѻ" + "»ÐàËÅÒÐ" + "»ÐáÅèÁ" + "»Ðâŧ" + "»Ñ¡" + "»Ñ¡¡Ôè§" + "»Ñ¡ÉÒ" + "»Ñ¡ÉÒÇÊÒ¹" + "»Ñ¡ÉÔ³" + "»Ñ¡ÉÔ¹" + "»Ñ¡ÉÕ" + "»Ñ¡Éì" + "»Ñ¡à»éÒ" + "»Ñ§" + "»Ñ§ÊØ¡ØÅ" + "»Ñ¨¨Ñ¹µ¤ÒÁ" + "»Ñ¨¨Ñ¹µª¹º·" + "»Ñ¨¨Ñ¹µ»ÃÐà·È" + "»Ñ¨¨Ñ¹µì" + "»Ñ¨¨ÑÂ" + "»Ñ¨¨ÒÁÔµÃ" + "»Ñ¨¨ØºÑ¹" + "»Ñ¨¨ØÊÁÑÂ" + "»Ñ¨©Ò" + "»Ñ¨©ÔÁ" + "»Ñ¨à¨¡" + "»Ñ¨ÇѤ¤ÕÂì" + "»ÑÒ" + "»ÑËÒ" + "»Ñ´" + "»ÑµµÒ¹Õ" + "»ÑµµÒàÇÕÂ" + "»Ñ·Áì" + "»Ñ¹" + "»Ñº" + "»Ñ»¼ÒÊÐ" + "»ÑÊÊÒÇÐ" + "»ÑÊÊÒÊÐ" + "»Ñè¹" + "»Ñé¹" + "»Ñêº" + "»ÑêÁ" + "»Ñë§" + "»Ò" + "»Ò¡" + "»Ò¡¡Ò" + "»Ò¡Õʶҹ" + "»Ò§" + "»Ò¯ÔËÒÃÔÂì" + "»Ò°¡" + "»Ò°¡¶Ò" + "»Ò³ÒµÔºÒµ" + "»Ò´" + "»ÒµÔâÁ¡¢ì" + "»Ò·Ñ§¡Ò" + "»Ò·èͧâ¡ë" + "»Ò¹" + "»Ò»ÑÇ" + "»ÒÁ" + "»ÒÂÒÊ" + "»ÒÃÒªÔ¡" + "»ÒÃԩѵÃ" + "»ÒÃÔªÒµ" + "»ÒÃÕÊ" + "»ÒÃìࡵì" + "»ÒÅÕ" + "»ÒÅìÁ" + "»ÒÇ" + "»Ò˹ѹ" + "»ÒËÕè" + "»ÒâÁ¡¢ì" + "»Ó" + "»Ô¡¹Ô¡" + "»Ô§»Í§" + "»Ô®¡" + "»Ô´" + "»ÔµÒ" + "»ÔµÔ" + "»ÔµØ" + "»ÔµØ¦Òµ" + "»ÔµØÀÙÁÔ" + "»ÔµØÅÒ" + "»ÔÂÁÔµÃ" + "»ÔÂÐ" + "»ÔÈÒ¨" + "»ÔâµÃàÅÕÂÁ" + "»ÔâÂÃÊ" + "»Ôè¹" + "»Ôè¹âµ" + "»ÔèÁ" + "»Ôé§" + "»ÔéÁ" + "»ÔëÇ" + "»Õ" + "»Õ¡" + "»Õ¹" + "»Õº" + "»ÕÁÐâÇé" + "»ÕÈÒ¨" + "»Õè" + "»Õé" + "»Õê´" + "»Õêº" + "»Õë" + "»Ö¡" + "»Ö§" + "»Öè§" + "»Öé´" + "»Öë§" + "»×¹" + "»×é¹" + "»×ëÍ" + "»Ø" + "»Ø¡" + "»Ø¨©Ò" + "»Ø´" + "»Ø¶Øª¹" + "»Øº" + "»ØÂ" + "»ØâÃËÔµ" + "»ØèÁ" + "»Ø駡Õë" + "»ØéÁ" + "»Øê" + "»Øêº" + "»ØëÁ" + "»ØëÂ" + "»Ù" + "»Ùª¹Õºؤ¤Å" + "»Ùª¹ÕÂÇѵ¶Ø" + "»Ù´" + "»Ù¹" + "»ÙÁ" + "»Ùè" + "»ÙéÂÕé»ÙéÂÓ" + "»àdzÕ" + "»è¹" + "»èǧ" + "»èǹ" + "»èÇÂ" + "»èͧ" + "»èÒ" + "»èÒ¹" + "»èÒÂ" + "»èÒÇ" + "»éǹ" + "»éǹà»Õé¹" + "»éÍ" + "»éͧ" + "»éͧ¡Ñ¹" + "»é͹" + "»éÍÁ" + "»éÍÂ" + "»éÍá»é" + "»éÒ" + "»éÒ§" + "»éÒ¹" + "»éÒº" + "»éÒÂ" + "»éÓ" + "»êÍ¡¡Õé" + "»êÒº" + "»ëÍ" + "»ëÍÁ" + "»ëÒ" + "¼¡" + "¼¡Ò" + "¼¡ÒÂ" + "¼§" + "¼§¡" + "¼§Ð" + "¼§Ò´" + "¼¨§" + "¼¨" + "¼´" + "¼´Ø§" + "¼¹Ç¡" + "¼¹Çª" + "¼¹Ñ§" + "¼¹Ö¡" + "¼Á" + "¼Áºêͺ" + "¼Âͧ" + "¼ÃØÊÇÒ·" + "¼Å" + "¼ÅÐ" + "¼ÅÑ¡" + "¼ÅÑ´" + "¼ÅÑÇÐ" + "¼ÅÒ" + "¼ÅÒ¹ÔʧÊì" + "¼ÅÒ¼Å" + "¼ÅÒËÒÃ" + "¼ÅÔ" + "¼ÅÔµ" + "¼ÅÔµÀѳ±ì" + "¼ÅÕ¼ÅÒÁ" + "¼ÅÖ¡" + "¼ÅÖè§" + "¼ÅØ" + "¼Åا" + "¼ÅØ´" + "¼Åع" + "¼Åغ" + "¼ÅØÂ" + "¼ÅÙ" + "¼ÅçÍÂ" + "¼Ç¹" + "¼ÇÂ" + "¼ÇÒ" + "¼ÊÁ" + "¼ÊÒ¹" + "¼ÊÒÂ" + "¼Í¡" + "¼Í§" + "¼Í´" + "¼Íº" + "¼ÍÁ" + "¼ÍÇ´" + "¼ÍÙ¹" + "¼Ð" + "¼Ñ¡" + "¼Ñ§" + "¼Ñ´" + "¼Ñ¹" + "¼Ñ¹¼Ç¹" + "¼Ñº" + "¼ÑÇ" + "¼ÑÇÐ" + "¼Ò" + "¼Ò¡" + "¼Ò§" + "¼Ò³Ôµ" + "¼Ò´" + "¼ÒÂ" + "¼Ô" + "¼Ô§" + "¼Ô´" + "¼Ô¹" + "¼ÔÇ" + "¼Õ" + "¼Ö§" + "¼Öè§" + "¼Öé§" + "¼×¹" + "¼×è¹" + "¼Ø" + "¼Ø´" + "¼Ø¼§" + "¼Ù¡" + "¼Ùé" + "¼çÍÂ" + "¼èͧ" + "¼è͹" + "¼èÍÂ" + "¼èÒ" + "¼èÒ¹" + "¼èÒ¼ÍÁ" + "¼èÒÇ" + "¼éÒ" + "½¹" + "½ÃÑè§" + "½ÃÑè§àÈÊ" + "½ÍÂ" + "½Ñ¡" + "½Ñ§" + "½Ñ´" + "½Ñ¹" + "½Ñè§" + "½Ò" + "½Ò¡" + "½Ò§" + "½Ò´" + "½Ò¹" + "½ÒÂ" + "½Ôè¹" + "½Õ" + "½Ö¡" + "½×´" + "½×¹" + "½Øè¹" + "½Ù§" + "½èÍ" + "½èÒ" + "½èÒÂ" + "½éÒ" + "½éÒÂ" + "¾¡" + "¾§" + "¾§ÈÒÇ´ÒÃ" + "¾§Èì" + "¾¨¹Ò" + "¾¨¹Ò¹Ø¡ÃÁ" + "¾¨¹Òö" + "¾¨¹ÕÂì" + "¾¨¹ì" + "¾¨ÁÒ¹" + "¾¨Õ" + "¾Ò" + "¾ÒÅÍ" + "¾³Ôª" + "¾³ÔªÂì" + "¾´" + "¾¸Ù" + "¾¹Á" + "¾¹Ñ¡" + "¾¹Ñ¡§Ò¹" + "¾¹Ñ§" + "¾¹Ñ¹" + "¾¹ÑÊ" + "¾¹Ò" + "¾¹Ò´Ã" + "¾¹ÒÃÒÁ" + "¾¹ÒÅÑÂ" + "¾¹Ô´Ò" + "¾º" + "¾ÁèÒ" + "¾Â¹µì" + "¾ÂÈ" + "¾ÂÑ¡" + "¾ÂÑ¡¾àÂÔ´" + "¾ÂѤ¦Ò" + "¾ÂѤ¦Ô¹" + "¾ÂѤ¦Õ" + "¾ÂѤ¦ì" + "¾ÂѪ¹Ð" + "¾Âѵ" + "¾ÂѺ" + "¾Âҡóì" + "¾ÂÒ§¤ì" + "¾ÂÒ¸Ô" + "¾ÂÒ¹" + "¾ÂÒºÒ·" + "¾ÂÒºÒÅ" + "¾ÂÒÂÒÁ" + "¾ÂØ" + "¾Âا" + "¾ÂØËÂÒµÃÒ" + "¾ÂØËÐ" + "¾ÂØËàʹÒ" + "¾Ã" + "¾Ãµ" + "¾ÃÁ" + "¾ÃÃ" + "¾Ãä" + "¾Ãäì" + "¾Ãó" + "¾Ãó¹Ò" + "¾ÃÃÉ" + "¾ÃÃÉÒ" + "¾ÃÇ´" + "¾Ãǹ" + "¾ÃËÁ" + "¾ÃËÁ¨ÃÃÂì" + "¾ÃËÁ¨ÒÃÔ³Õ" + "¾ÃËÁ¨ÒÃÕ" + "¾ÃÍ´" + "¾ÃÐ" + "¾ÃÐÃÒªÇѧ" + "¾ÃÐͧ¤ì" + "¾ÃÐà¨éÒÍÂÙèËÑÇ" + "¾ÃÑ¡¾ÃéÍÁ" + "¾ÃÑ´" + "¾ÃÑè§" + "¾ÃÑè¹" + "¾ÃÒ¡" + "¾ÃÒ§" + "¾ÃÒ´" + "¾ÃÒ¹" + "¾ÃÒÂ" + "¾ÃÒÇ" + "¾ÃÒËÁ³ì" + "¾ÃÓ" + "¾ÃÔ¡" + "¾ÃÔ¹àµÍÃì" + "¾ÃÔº" + "¾ÃÔé§" + "¾ÃÔéÁ" + "¾ÃÕàÁÕÂÁ" + "¾ÃÕàÁÕÂÃì" + "¾ÃÖ§" + "¾ÃÖ¹" + "¾ÃÖº" + "¾Ã×´" + "¾ÃØ" + "¾ÃØ¡" + "¾Ãع" + "¾ÃØè§" + "¾ÃÙ" + "¾ÃÙ´" + "¾Ãèͧ" + "¾ÃèÍÁ¾ÃéÍ" + "¾ÃèÍÂ" + "¾ÃèÒ" + "¾ÃèÒ§" + "¾ÃèÓ" + "¾Ãéͧ" + "¾ÃéÍÁ" + "¾ÃéÍÁ¾ÃÑ¡" + "¾ÃéÍÂ" + "¾ÃéÒ" + "¾ÃéÓ" + "¾Ä¡ÉªÒµÔ" + "¾Ä¡É·Å" + "¾Ä¡ÉÃÒª" + "¾Ä¡ÉÈÒʵÃì" + "¾Ä¡ÉÒ" + "¾Ä¡Éà·Ç´Ò" + "¾Ä¡Éì" + "¾Ä²" + "¾Ä²Ò" + "¾Ä²Ò¨ÒÃÂì" + "¾Ä²Ô" + "¾Äµ" + "¾ÄµÔ" + "¾ÄµÔ¡ÃÃÁ" + "¾ÄµÔ¡Òóì" + "¾ÄµÔ¹ÑÂ" + "¾Ä·¸Ôì" + "¾Ä·¸ì" + "¾Ä¹µì" + "¾Ä¹·ì" + "¾ÄȨÔ" + "¾ÄȨԡÒ¹" + "¾ÄÉÀ" + "¾ÄÉÀÒ¤Á" + "¾ÄËÑÊ" + "¾ÄËÑʺ´Õ" + "¾Å" + "¾Å¡ÒÃ" + "¾Å¤ÇÒÁ" + "¾Åº" + "¾Åǧ" + "¾ÅÇѵ" + "¾ÅÈÖ¡ÉÒ" + "¾Åͧ" + "¾ÅÍ´" + "¾ÅÍÁá¾ÅÁ" + "¾ÅÍÂ" + "¾ÅÐ" + "¾Åѧ" + "¾Åѧ§Ò¹" + "¾ÅÑ´" + "¾Åѹ" + "¾ÅѺ" + "¾ÅѺ¾ÅÒ" + "¾ÅѺ¾ÅÖ§" + "¾ÅÑè¡" + "¾ÅÑè§" + "¾ÅÑèÇ" + "¾ÅÑé§" + "¾ÅÒ¡Ã" + "¾ÅÒ§" + "¾ÅÒ´" + "¾ÅÒ¸Ô¡ÒÃ" + "¾ÅÒ¹ÒÁÑÂ" + "¾ÅÒÁ" + "¾ÅÒÂ" + "¾ÅÒʵԡ" + "¾ÅÒÊÁÒ" + "¾ÅÒË¡" + "¾ÅÔ¡" + "¾ÅÔéÇ" + "¾ÅÕ" + "¾ÅØ" + "¾ÅØ¡" + "¾ÅØè¡" + "¾ÅØè§" + "¾ÅØéÂ" + "¾ÅÙ" + "¾ÅàÁ×ͧ" + "¾ÅàÃ×͹" + "¾ÅâÅ¡" + "¾ÅèÍÂ" + "¾ÅèÒ" + "¾ÅèÒ¹" + "¾ÅèÒÁ" + "¾ÅéÓ" + "¾Ç¡" + "¾Ç§" + "¾Ç¹" + "¾ÇÂ" + "¾Ê¡" + "¾ÊظÒ" + "¾ËÅ" + "¾ËÅâ¸Թ" + "¾ËØ" + "¾ËÙ" + "¾ËÙ¾¨¹ì" + "¾ËÙÊÙµ" + "¾Í" + "¾Í¡" + "¾Í§" + "¾Í·ÑÅ" + "¾ÍÃìµ" + "¾Ð" + "¾Ð¾Ô§" + "¾ÐÂÙ¹" + "¾ÐÃا¾ÐÃѧ" + "¾Ðǧ" + "¾ÐÇÑ¡¾Ðǹ" + "¾ÐÇéÒ¾ÐÇѧ" + "¾Ðͧ" + "¾ÐÍ×´¾ÐÍÁ" + "¾Ðà¹Õ§" + "¾Ðà¹éҾйÍ" + "¾ÐàÂÔº" + "¾ÐàÂÔº¾ÐÂÒº" + "¾Ðṧ" + "¾ÐâÅé" + "¾Ñ¡" + "¾Ñ¡µÃì" + "¾Ñ§" + "¾Ñ§§Ò" + "¾Ñ§¼×´" + "¾Ñ§¾ÇÂ" + "¾Ñ§¾Í¹" + "¾Ñ§¾Òº" + "¾Ñ§à¾Â" + "¾ÑªÃ" + "¾Ñ²¹Ð" + "¾Ñ²¹Ò" + "¾Ñ´" + "¾ÑµÃ" + "¾Ñ·¸ÊÕÁÒ" + "¾Ñ·ÂÒ" + "¾Ñ·Åا" + "¾Ñ¹" + "¾Ñ¹·Ò§" + "¾Ñ¹¸¡Ã³Õ" + "¾Ñ¹¸·Ô¾Âì" + "¾Ñ¹¸¹Ò¡ÒÃ" + "¾Ñ¹¸ºÑµÃ" + "¾Ñ¹¸ÁÔµÃ" + "¾Ñ¹¸Ð" + "¾Ñ¹¸Ø" + "¾Ñ¹¸Øì" + "¾Ñ¹¸ì" + "¾Ñº" + "¾ÑÅÅÀ" + "¾ÑÅÇѹ" + "¾ÑÇ" + "¾ÑÇÐ" + "¾ÑÈ´Õ" + "¾ÑÊ´Ø" + "¾ÑʵÃì" + "¾Ñʶҹ" + "¾Ò" + "¾Ò¡" + "¾Ò¡Âì" + "¾Ò§" + "¾Ò³" + "¾Ò³Ôª" + "¾Ò³ÔªÂì" + "¾Ò³Õ" + "¾Ò³Õ¹Õ" + "¾Ò´" + "¾Òµ" + "¾Ò·" + "¾Ò·Âì" + "¾Ò¸" + "¾Ò¸Ò" + "¾Ò¹" + "¾Ò¹Ã" + "¾ÒÁ" + "¾ÒÂ" + "¾ÒÂѾ" + "¾ÒÂØ" + "¾Òó" + "¾ÒÃÒ" + "¾ÒÃÒ¿Ô¹" + "¾ÒÃì" + "¾ÒÅ" + "¾ÒÅÕ" + "¾ÒÊ" + "¾ÒʹÒ" + "¾Òʹì" + "¾ÒÊØ¡ÃÕ" + "¾ÒÊàÇÔÃì´" + "¾Ò˹Ð" + "¾ÒËÐ" + "¾ÒËÒ" + "¾ÒËØ" + "¾ÒËØÃÑ´" + "¾ÒÌËÐ" + "¾Òà¹Å" + "¾ÒàËô" + "¾ÒàËÕÂÃ" + "¾ÒâÅ" + "¾Ó" + "¾Ó¹Ñ¡" + "¾Ô¡Å" + "¾Ô¡Ñ´" + "¾Ô¡ÑµÔ" + "¾Ô¡ÒÃ" + "¾Ô¡ØÅ" + "¾Ô¦Òµ" + "¾Ô¦à¹È" + "¾Ô§" + "¾Ô¨ÒóÒ" + "¾Ô¨Òóì" + "¾Ô¨ÔµÃ" + "¾ÔªÑÂ" + "¾ÔªÒ¹" + "¾ÔªÔµ" + "¾Ô««èÒ" + "¾Ô³" + "¾Ô¶Õ¾Ô¶Ñ¹" + "¾Ô·ÂÒ" + "¾Ô·Ñ¡Éì" + "¾Ô¸Ò¹" + "¾Ô¸Õ" + "¾Ô¹·Ø" + "¾Ô¹Íº¾Ôà·Ò" + "¾Ô¹ÑÂ" + "¾Ô¹ÒÈ" + "¾Ô¹Ô¨" + "¾Ô¹Ôµ" + "¾Ô¹ÔÈ" + "¾ÔºÑµÔ" + "¾ÔºÙÅ" + "¾Ô¾Áì" + "¾Ô¾Ñ¡¾Ô¾èǹ" + "¾Ô¾Ñ²¹ì" + "¾Ô¾Ò¡ÉÒ" + "¾Ô¾Ò¡Éì" + "¾Ô¾Ò·" + "¾Ô¾Ô¸" + "¾Ô¾Ô¸Àѳ±Ê¶Ò¹" + "¾Ô¾Ô¸Àѳ±ì" + "¾ÔÀ¾" + "¾ÔÁ¾ì" + "¾ÔÁÅ" + "¾ÔÁÒ¹" + "¾ÔÁØ¢" + "¾ÔÁàʹ" + "¾ÔÃÍ´" + "¾ÔÃÒº" + "¾ÔÃÒÅÑÂ" + "¾ÔÃÕé¾ÔäÃ" + "¾ÔÃس" + "¾ÔÃظ" + "¾ÔÅÒ»" + "¾ÔÅÒÊ" + "¾ÔÅÖ¡" + "¾ÔÅÖ¡¡Ö¡¡×Í" + "¾ÔÅÖ¡¾ÔÅÑè¹" + "¾ÔÈ" + "¾ÔÈǧ" + "¾ÔÈÇÒÊ" + "¾ÔÈÒÅ" + "¾ÔÈØ·¸Ôì" + "¾ÔÈØ·¸ì" + "¾ÔÉ" + "¾ÔɳØâÅ¡" + "¾ÔÉʧ" + "¾ÔÊ´ÒÃ" + "¾ÔÊÁÑÂ" + "¾ÔÊÑÂ" + "¾ÔÊÔ°" + "¾ÔÊØ·¸Ôì" + "¾ÔÊÙ¨¹ì" + "¾ÔËÒÃ" + "¾ÔÌÒÃ" + "¾Ôà¤ÃÒÐËì" + "¾ÔàÈÉ" + "¾Ô⡾Ôࡹ" + "¾Ôâ¤" + "¾Ôâø" + "¾ÔäÃ" + "¾ÔäÅ" + "¾Õ" + "¾Õª¤³Ôµ" + "¾Õ«Õ" + "¾ÕÃÐÁÔ´" + "¾Õè" + "¾Õé" + "¾Ö§" + "¾ÖÁ" + "¾ÖÁ¾Ó" + "¾Öè§" + "¾Öèº" + "¾×ª" + "¾×´" + "¾×é¹" + "¾×é¹·Õè" + "¾Ø" + "¾Ø¡" + "¾Ø§" + "¾Ø²" + "¾Ø²Ô" + "¾Ø´" + "¾Ø·¸" + "¾Ø·¸Ð" + "¾Ø·¸ÒÇÒÊ" + "¾Ø·¸Ô" + "¾Ø·ÃÒ" + "¾Ø·â¸è" + "¾Ø¸" + "¾Øè§" + "¾ØèÁ" + "¾ØéÂ" + "¾Ù" + "¾Ù´" + "¾Ù¹" + "¾Ùè" + "¾Ùé¹" + "¾à¹¨Ã" + "¾è¹" + "¾èǧ" + "¾èÍ" + "¾èÒ§" + "¾èÒ¹" + "¾èÒÂ" + "¾èÒËì" + "¾é¹" + "¾éÍ" + "¾éͧ" + "¾éÍÁ" + "¿¡" + "¿ÃÍ´ì" + "¿ÃÕ" + "¿ÅÍàù«ì" + "¿ÅÙÍÍÃÕ¹" + "¿Í¡" + "¿Í§" + "¿Í´" + "¿Í¹" + "¿Í¹µì" + "¿ÍÃìÁ" + "¿ÍÃìÁÒÅ´Õäδì" + "¿ÍÃìÁÒÅÔ¹" + "¿ÍÃìáÁµ" + "¿ÍÊ«ÔÅ" + "¿ÍÊ¿ÍÃÑÊ" + "¿ÍÊ࿵" + "¿Ñ¡" + "¿Ñ§" + "¿Ñ§¡ìªÑ¹" + "¿Ñ§¡ìªÑè¹" + "¿Ñ´" + "¿Ñ¹" + "¿Ñè¹" + "¿Ñé¹" + "¿Ò¡" + "¿Ò§" + "¿Ò´" + "¿Ò·ÍÁ" + "¿Ò¹" + "¿ÒÂ" + "¿ÒÃìÁ" + "¿ÒÊ«Ôʵì" + "¿Ô¡" + "¿Ô´" + "¿Ô¹áŹ´ì" + "¿Ôº" + "¿ÔÅ´ì" + "¿ÔÅÔ»»Ô¹Êì" + "¿ÔÅìÁ" + "¿ÔÇÊì" + "¿ÔÊÔ¡Êì" + "¿Õ¿èÒ" + "¿Õè" + "¿Õé" + "¿×¹" + "¿×Á" + "¿×é¹" + "¿Ø" + "¿Øµ" + "¿ØµºÍÅ" + "¿Ø¹" + "¿Øº" + "¿Ø¿Ð" + "¿ØÅÊá¡ê»" + "¿Øèº" + "¿ØèÁà¿×ÍÂ" + "¿Øé§" + "¿Ù" + "¿Ù¡" + "¿Ù¨Ô" + "¿Ù´" + "¿ÙÁ" + "¿ÙÁ¿ÒÂ" + "¿Ùè" + "¿èÍ" + "¿èͧ" + "¿è͹" + "¿èÒ§" + "¿èÒÁ" + "¿éÍ" + "¿éͧ" + "¿é͹" + "¿éÒ" + "À¤¹Õ" + "À¾" + "ÀÁÃ" + "ÀÂѹµÃÒÂ" + "Àõ" + "ÀÃÃ" + "ÀÃÃÂÒ" + "ÀÃÒ´Ã" + "ÀÃÔÂÒ" + "ÀǵѳËÒ" + "ÀÇѧ¤ì" + "ÀÑ¡´Õ" + "ÀÑ¡ÉÒ" + "ÀÑ¡ÉÒËÒÃ" + "Àѳ±ì" + "ÀѵµÒ¤ÒÃ" + "ÀѵµÒËÒÃ" + "ÀÑ·Ã" + "ÀѾ" + "ÀÑÂ" + "ÀÑÊ´Ò" + "ÀÑʵÃÒ" + "ÀÒ¤" + "ÀÒ¤Õ" + "ÀÒª¹Ð" + "ÀÒ³Ø" + "ÀÒ¾" + "ÀҾ¹µÃì" + "ÀÒÂ" + "ÀÒÃ" + "ÀÒáԨ" + "ÀÒôÕ" + "ÀÒõ" + "ÀÒÃÐ" + "ÀÒÃÒ" + "ÀÒÃâç" + "ÀÒǹÒ" + "ÀÒÇÐ" + "ÀÒÉ" + "ÀÒÉ¡" + "ÀÒɳì" + "ÀÒÉÒ" + "ÀÒÉÔµ" + "ÀÒÉÕ" + "ÀÒÊ¡Ã" + "ÀÒʹì" + "ÀÒÊÇÃ" + "ÀÔ¡¢Ò" + "ÀÔ¡¢Ò¨ÒÃ" + "ÀÔ¡¢Ø" + "ÀÔ¡¢Ø¹Õ" + "ÀÔ¡ÉÒ" + "ÀÔ¡ÉØ" + "ÀÔ¡ÉسÕ" + "ÀÔ§¤ÒÃ" + "ÀÔâ" + "ÀÔ¹·¹Ò¡ÒÃ" + "ÀÔ¹·ì" + "ÀÔÃÁÂì" + "Àت" + "Àت§¤ì" + "ÀØÁÃÒ" + "ÀØÁÃÔ¹" + "ÀØÁÃÕ" + "ÀÙ" + "ÀÙµ" + "ÀÙµÔ" + "ÀÙÁÔ" + "ÀÙÁÔ»ÃÐà·È" + "ÀÙÁÔÀÒ¤" + "ÀÙÁÔÅÓà¹Ò" + "ÀÙÁÔÈÒʵÃì" + "ÀÙÁÕ" + "ÀÙÃÔ" + "ÀÙÃÕ" + "ÀÙÇ´Å" + "ÀÙǹҶ" + "ÀÙÇ๵Ã" + "ÀÙÇä¹Â" + "ÀÙÉÒ" + "ÀÙÉÔµ" + "ÀÙà¡çµ" + "ÀÙè" + "Á¡" + "Á¡Ã" + "Á¡ÃÒ¤Á" + "Á¡Ø®" + "Á¡ØÅ" + "Á§¡Ø®" + "Á§¤Å" + "Á³±¡" + "Á³±»" + "Á³±Å" + "Á³Õ" + "Á³à±ÕÂÃ" + "Á´" + "ÁµÔ" + "Á¸Ø" + "Á¹" + "Á¹µÃÕ" + "Á¹µÃì" + "Á¹µì" + "Á¹ÊÔ¡ÒÃ" + "Á¹ÑÊ" + "Á¹ÑÊÇÕ" + "Á¹ÔÅÒ" + "Á¹ØɪҵÔ" + "Á¹ØɸÃÃÁ" + "Á¹ØÉÂÈÒʵÃì" + "Á¹ØÉÂÊÑÁ¾Ñ¹¸ì" + "Á¹ØÉÂà·¾" + "Á¹ØÉÂâÅ¡" + "Á¹ØÉÂì" + "Á¹à·ÕÂÃ" + "ÁÂØÃÒ" + "ÁÂØÃÕ" + "ÁÂØàÃÈ" + "ÁÂÙÃ" + "ÁÃ" + "Ááµ" + "ÁóÐ" + "Áóì" + "Áô¡" + "ÁÃä" + "ÁÃä¹Ò¡" + "ÁÃäÒ" + "ÁÃÃÂÒ" + "ÁÃÃÂÒ·" + "ÁÃÊØÁ" + "ÁĤ" + "ÁĵÂÙ" + "ÁÅ" + "ÁÅ·Ô¹" + "ÁÅÒÂ" + "ÁÅÒÂÙ" + "ÁÅéÒ§" + "Áǹ" + "ÁÇÂ" + "ÁÇÅ" + "ÁË¡ÃÃÁ" + "ÁËó¾" + "ÁËÃó¾" + "ÁËÃʾ" + "ÁËѹµâ·É" + "ÁËѹµì" + "ÁËÑȨÃÃÂì" + "ÁËÒ" + "ÁËÒª¹" + "ÁËÒ´àÅç¡" + "ÁËÒ´ä·Â" + "ÁËÒµÁÐ" + "ÁËÒÂÒ¹" + "ÁËÒÃÒª" + "ÁËÒÇÔ·ÂÒÅÑÂ" + "ÁËÒÈÒÅ" + "ÁËÒÊÁØ·Ã" + "ÁËÒËÔ§¤Øì" + "ÁËÔ§Êì" + "ÁËÔ´Å" + "ÁËÔÁÒ" + "ÁËÖÁÒ" + "ÁÍ" + "Áͧ" + "Áͧâ¡ÅÍ´ì" + "ÁÍ" + "ÁÍ´" + "Á͹ÔàµÍÃì" + "Áͺ" + "ÁÍÁ" + "ÁÍÁáÁÁ" + "ÁÍÃͤâ¤" + "ÁÍÃì¿Õ¹" + "ÁÍÅâ·Ê" + "ÁÍÊâ¤Çì" + "ÁÍàµÍÃì" + "ÁÐ" + "ÁСÃÙ´" + "ÁС͡" + "ÁСÐâùÕ" + "ÁТÇÔ´" + "ÁТÒÁ" + "ÁТèǧ" + "ÁФèÒ" + "ÁЧÑèÇ" + "ÁЧØÁÁЧÒËÃÒ" + "ÁЫҧ" + "Áдѹ" + "ÁекÐ" + "ÁеÖè§" + "ÁеÙÁ" + "Áеéͧ" + "ÁйÒÇ" + "ÁлÃÒ§" + "ÁоÃéÒÇ" + "ÁоÅѺ" + "Áоٴ" + "ÁÐÁèǧ" + "ÁÐÂÁ" + "ÁÐÃÐ" + "ÁÐÃ×¹" + "ÁÐÅСÍ" + "ÁÐÅÔ" + "ÁÐËÐËÁÑ´" + "ÁÐÎÍ¡¡Ò¹Õ" + "ÁÐà¡Å×Í" + "ÁÐà¢×Í" + "ÁÐà´×èÍ" + "ÁÐà¿×ͧ" + "ÁÐàÃç§" + "ÁÐàÊç§" + "ÁÐáÁ" + "ÁÐâç" + "ÁÐä¿" + "ÁÑ¡" + "ÁÑ¡¡ÐÊѹ" + "ÁѤ¤Øà·È¡ì" + "ÁѤ¹Ò¡" + "ÁѦÇÒ¹" + "Áѧ¡Ã" + "Áѧ¤Ø´" + "Áѧ¤èÒ" + "ÁѨ¨Ø" + "ÁѨ©Ò" + "ÁѪ¬ÔÁÂÒÁ" + "ÁѪ¬ÔÁÇÑÂ" + "ÁѪ¬ÔÁÒ" + "Áѳ±¹ÈÔÅ»ì" + "Áѳ±¹Ò" + "ÁÑ´" + "ÁѵÊÂÒ" + "ÁÑ·¹Ð" + "ÁÑ·¹ÕÂÐ" + "ÁÑ·ÂÐ" + "ÁѸ°ҹ" + "ÁѸÂÁ" + "ÁѸÂÑʶì" + "Áѹ" + "ÁѺ" + "ÁÑÁÁÕè" + "ÁÑÂ" + "ÁÑŵÔ" + "ÁÑÅÅÔ¡Ò" + "ÁÑÇ" + "ÁÑÈÂÒ" + "ÁÑʵÒÃì´" + "ÁÑÊÁÑè¹" + "ÁÑÊÂÔ´" + "ÁÑÊÅÔ¹" + "ÁÑè§" + "ÁÑè¹" + "ÁÑèÇ" + "ÁÒ" + "ÁÒ¡" + "ÁÒ¡¡ÇèÒ" + "ÁÒ¦ºÙªÒ" + "ÁÒ¦Ð" + "ÁÒ³¾" + "ÁÒ³ÇÔ¡Ò" + "ÁÒ´" + "ÁÒµÃ" + "ÁҵáÒÃ" + "Áҵðҹ" + "ÁÒµÃÒ" + "ÁÒµØ" + "ÁÒµØÅÒ" + "ÁÒ¹" + "ÁÒ¹¾" + "ÁÒ¹Ð" + "ÁÒ¹Ôµ" + "ÁÒ¹Õ" + "ÁÒ¹ØÉ" + "ÁÒ¹ØÉÂÇÔ·ÂÒ" + "ÁÒºµÒ¾Ø´" + "ÁÒÂ" + "ÁÒÂÒ" + "ÁÒÂÒÇÕ" + "ÁÒÃ" + "ÁÒä" + "ÁÒôÃ" + "ÁÒôÒ" + "ÁÒÃÂÒ" + "ÁÒÃÂÒ·" + "ÁÒÃÈÃÕ" + "ÁÒÃص" + "ÁÒÅÑÂ" + "ÁÒÅÒàÃÕÂ" + "ÁÒÅÕ" + "ÁÒÈ" + "ÁÒÊ" + "ÁÒÊàµÍÃì" + "ÁÒàÅà«ÕÂ" + "ÁÒâ¤Ã" + "ÁÒ⹪ì" + "ÁÓàÅ×ͧ" + "ÁÔ" + "ÁÔ¤ÊÑÕ" + "ÁÔ¨©Ò" + "ÁÔ´" + "ÁÔµÃ" + "ÁÔµÔ" + "ÁԶعÒ¹" + "ÁÔÂѹÁèÒ" + "ÁÔÅÅÔ¡ÃÑÁ" + "ÁÔÅÅÔºÒÃì" + "ÁÔÅÅÔÅÔµÃ" + "ÁÔÅÅÔàÁµÃ" + "ÁÔÅÒµ" + "ÁÔÇÊÔ¤" + "ÁÔÊ" + "ÁÔÊ«Ò" + "ÁÔÊàµÍÃì" + "ÁÔàµÍÃì" + "ÁÔè§" + "ÁÔéÁ" + "ÁÕ" + "ÁÕ´" + "ÁÕ¹" + "ÁÕ¹Ò¤Á" + "ÁÕà·¹" + "ÁÕè" + "ÁÕèÊÑéÇ" + "ÁÖ§" + "ÁÖ¹" + "Á×´" + "Á×¹" + "Á×Í" + "Á×è¹" + "Á×éÍ" + "ÁØ" + "ÁØ¡" + "ÁØ¡´Ò" + "ÁØ¡´ÒËÒÃ" + "ÁØ¢" + "Áا" + "ÁبÅÔ¹·ì" + "ÁØ´" + "Áص¡Ô´" + "ÁØ·ÔµÒ" + "ÁØ·Ø" + "ÁعԹ·Ãì" + "ÁعÕ" + "Áغ" + "ÁغÁÔº" + "ÁØÁ" + "ÁØÊÅÔÁ" + "ÁØÊÒ" + "ÁØè§" + "ÁØè¹" + "ÁØèÂ" + "ÁØé§" + "ÁÙ¡" + "ÁÙµÃ" + "ÁÙ¹" + "ÁÙÁÁÒÁ" + "ÁÙÅ" + "ÁÙŤèÒ" + "ÁÙÅ°Ò¹" + "ÁÙŹԸÔ" + "ÁÙà«Í" + "ÁÙè·Ùè" + "ÁÙèÅÕè" + "ÁàËÈÇÃ" + "ÁàËÊÕ" + "ÁàËÒÌÒÃ" + "Áâ¹" + "Áâ¹ÃÒËì" + "Áâ¹ÊÒàÃè" + "ÁâËÃʾ" + "ÁâËÃз֡" + "ÁâËÃÕ" + "ÁâËÌÒÃ" + "Áèǧ" + "Áèǹ" + "Áè͵éÍ" + "ÁèÍÂ" + "ÁèÍÎèÍÁ" + "ÁèÒ¹" + "ÁèÒÂ" + "Áéǹ" + "ÁéÇÂ" + "ÁéÒ" + "ÁéÒ¹" + "ÁéÒÁ" + "¡" + "¡Âèͧ" + "§" + "§âÂè" + "µÔ" + "¶ҡÃÃÁ" + "¹µÃì" + "¹µì" + "ÂÁ" + "ÂÁ¡" + "ÂÃç" + "ÂÅ" + "Âǧ" + "ÂÇ´" + "Âǹ" + "ÂǺ" + "ÂÈ" + "ÂÍ" + "ÂÍ¡" + "Âͧ" + "ÂÍ´" + "Â͹" + "Âͺ" + "ÂÍÁ" + "ÂÐ" + "ÂÑ¡" + "ÂÑ¡¢Ô¹Õ" + "ÂÑ¡¢ì" + "ÂÑ¡ÂÍ¡" + "ÂÑ¡ÉÔ³Õ" + "ÂÑ¡ÉÕ" + "ÂÑ¡Éì" + "Âѧ" + "ÂÑ´" + "ÂÑ´àÂÕ´" + "Âѹ" + "ÂѹµÃ¡ÃÃÁ" + "ÂѹµÃì" + "Âѹµì" + "ÂѺ" + "ÂÑè§Â×¹" + "ÂÑè¹" + "ÂÑèÇ" + "ÂÑé§" + "ÂÑéÇ" + "ÂÑéÇàÂÕéÂ" + "ÂÒ" + "ÂÒ¡" + "ÂÒ§" + "ÂÒ¨¡" + "ÂÒ´" + "ÂÒ´Ò" + "ÂÒµÃ" + "ÂÒµÃÒ" + "ÂÒ¹" + "ÂÒ¹Õ" + "ÂÒº" + "ÂÒºéÒ" + "ÂÒÁ" + "ÂÒÂ" + "ÂÒÇ" + "ÂÓ" + "ÂÔ¡" + "ÂÔ§" + "ÂÔ¹" + "ÂÔº" + "ÂÔ»«ÑÁ" + "ÂÔ»«Õ" + "ÂÔÁ¹Òʵԡ" + "ÂÔÇ" + "ÂÔËÇÒ" + "ÂÔè§" + "ÂÔéÁ" + "ÂÕ" + "ÂÕ¹" + "ÂÕÃÒ¿" + "ÂÕè" + "ÂÕèÊ¡" + "ÂÕèʧ" + "ÂÕèÊØè¹" + "ÂÕèÊèÒ¹" + "ÂÕèËÃÐ" + "ÂÕèËÃèÒ" + "ÂÕèËéÍ" + "ÂÖ¡Â×Í" + "ÂÖ´" + "Â×´" + "Â×¹" + "Â×Á" + "Â×è¹" + "Â×éÍ" + "ÂØ" + "ÂØ¡µì" + "Âؤ" + "ÂؤÅ" + "Âا" + "ÂØ´" + "ÂصÔ" + "ÂصԸÃÃÁ" + "ÂØ·¸" + "ÂØ·¸¡ÒÃ" + "ÂØ·¸¹Ò" + "ÂØ·¸ì" + "Âط⸻¡Ã³ì" + "Âغ" + "Âؾ´Õ" + "Âؾ§" + "ÂؾÃÒª" + "ÂؾàÂÒÇì" + "ÂؾàÃÈ" + "ÂØÃÂÒµÃ" + "ÂØǪ¹" + "ÂØâû" + "ÂØè§" + "ÂØèÁÂèÒÁ" + "ÂØèÂ" + "ÂØé§" + "ÂØéÂ" + "ÂÙ§" + "ÂÙ¹Ô¡«ì" + "ÂÙÃÂÒµÃ" + "ÂÙÃÔ¡" + "ÂÙÊà«ÍÃì" + "ÂÙàùÑÊ" + "ÂÙàÃà¹ÕÂÁ" + "ÂÙâ¡ÊÅÒàÇÕÂ" + "ÂÙâ´" + "ÂÙâÃ" + "ÂÙè" + "ÂâÊ" + "Âè¹" + "ÂèÍ" + "Âèͧ" + "ÂèÍÁ" + "ÂèÍÂ" + "ÂèÐ" + "ÂèÒ" + "ÂèÒ§" + "ÂèÒ¹" + "ÂèÒÁ" + "ÂèÓ" + "ÂéÇÂ" + "Âé͹" + "ÂéÍÁ" + "ÂéÍÂ" + "ÂéÒÂ" + "ÂéÓ" + "á" + "ç" + "ç¤Çѵ¶Ø" + "ç¤ì" + "è¹Ò" + "èԵ" + "èàè" + "èàÅ¢" + "ó" + "óѰ" + "ô" + "ôÕ" + "õÐ" + "õÔ" + "ö" + "öàÁÅì" + "ù" + "ú" + "þ" + "þÕ" + "ÃÁ" + "ÃÁ³Õ" + "ÃÁ³ÕÂì" + "ÃÁÂì" + "ÃÂÒ§¤ì" + "ÃÇ¡" + "Ãǧ" + "ÃÇ´" + "Ãǹ" + "ÃǹàÃ" + "ÃǺ" + "ÃÇÁ" + "ÃÇÂ" + "ÃÇÔ" + "ÃÇÕ" + "ÃȹÒ" + "ÃÊ" + "ÃʹÒ" + "ÃÊÒ¹àÇ·" + "ÃÊÔ¡" + "ÃËÑÊ" + "ÃËÔµ" + "ÃÍ" + "ÃÍ¡" + "Ãͧ" + "Ãͧà§ç§" + "ÃÍ´" + "Ã͹" + "Ãͺ" + "Ãͺ¤Íº" + "ÃÍÁ" + "ÃÍÂ" + "ÃÐ" + "ÃСÓ" + "ÃФ¹" + "ÃФÒÂ" + "ÃЦѧ" + "ÃЧÁ" + "ÃЧѺ" + "ÃдÁ" + "ÃдѺ" + "ÃдÙ" + "Ãз´" + "ÃзÁ" + "ÃзÇÂ" + "Ãз֡" + "ÃйҴ" + "ÃйҺ" + "ÃйÒÇ" + "Ãкº" + "ÃкÁ" + "Ãкͺ" + "ÃкѺ" + "ÃкÒ" + "ÃкҴ" + "ÃкÒÂ" + "ÃкÓ" + "ÃкÔÅ" + "Ãк×Í" + "ÃкØ" + "ÃÐÂÐ" + "ÃÐÂѺ" + "ÃÐÂÓ" + "ÃÐÂÔº" + "ÃÐÂéÒ" + "ÃÐÃÔ¡" + "ÃÐÅÍ¡" + "ÃÐÅÖ¡" + "ÃÐÇѧ" + "ÃÐÇÒ§" + "ÃÐËÇèÒ§" + "ÃÐËØÂ" + "ÃÐÍÒ" + "ÃÐÍØ" + "ÃÐ๹" + "ÃÐà¹ÃйҴ" + "ÃÐà¹Õ´" + "ÃÐàºÔ´" + "ÃÐàºÕ§" + "ÃÐàºÕ¹" + "ÃÐàºÕº" + "ÃÐàºç§" + "ÃÐàÁÕÂÃ" + "ÃÐàËÂ" + "ÃÐàËÔ´" + "ÃÐàËç¨" + "ÃÐá¤Ð" + "ÃÐá§é" + "ÃÐṧ" + "ÃÐáǧ" + "ÃÑ¡" + "ÃÑ¡¢ì" + "ÃÑ¡ºÕé" + "ÃÑ¡ÉÒ" + "ÃÑ¡Éì" + "ÃÑ¡áÃé" + "Ãѧ" + "ÃѧÊÔµ" + "ÃѧÊÕ" + "Ãѧá¡" + "Ãѧá¤" + "ÃѨ©Ò" + "ÃѪ" + "ÃѪ®ÒÀÔàÉ¡" + "ÃѪ´ÒÀÔàÉ¡" + "ÃѪ¹Õ" + "ÃѨǹ" + "ÃÑ°" + "ÃÑ°ºÒÅ" + "ÃÑ°ºØÃØÉ" + "ÃÑ°»ÃÐÈÒʹÈÒʵÃì" + "ÃÑ°»ÃÐËÒÃ" + "ÃÑ°Á¹µÃÕ" + "ÃÑ°ÇÔÊÒË¡Ô¨" + "ÃÑ°ÈÒʵÃì" + "ÃÑ°ÊÀÒ" + "ÃÑ´" + "Ãѵ" + "ÃѵµÔ" + "Ãѵ¹" + "Ãѵ¹µÃÑÂ" + "Ãѵ¹ºÑÅÅѧ¡ì" + "Ãѵ¹Ð" + "Ãѵ¹Ò" + "Ãѵ¹â¡ÊÔ¹·Ãì" + "Ãѵ¹ì" + "ÃѶÂÒ" + "Ãѹ" + "Ãѹ·´" + "ÃѺ" + "ÃѺÃͧ" + "ÃÑÁÀÒ" + "ÃÑÁÁÕè" + "ÃÑÇ" + "ÃÑÈÁÔÁѵ" + "ÃÑÈÁÔÁÒ¹" + "ÃÑÈÁÕ" + "ÃÑɮҡÃ" + "ÃÑÊà«ÕÂ" + "ÃÑèÇ" + "ÃÑé§" + "ÃÑé¹" + "ÃÑéÇ" + "ÃÒ" + "ÃÒ¡" + "ÃÒ¡ÉÊ" + "ÃÒ¤Ð" + "ÃÒ¤Ò" + "ÃÒ¤Ô¹" + "ÃÒ¤Õ" + "ÃÒ§" + "ÃÒ§ªÒ§" + "ÃÒ§ÇÑÅ" + "ÃÒª" + "ÃÒª¡ÒÃ" + "ÃÒª¹Ô¡ØÅ" + "ÃÒªºÑ³±ÔµÂʶҹ" + "ÃÒªÂì" + "ÃҪǧÈì" + "ÃÒªÇâç¡ÒÃ" + "ÃÒªÊÕÁÒ" + "ÃÒªÊÕËì" + "ÃҪѹÂì" + "ÃÒªÒ" + "ÃÒªÒ¸ÔÃÒª" + "ÃÒªÒÀÔàÉ¡" + "ÃÒªÒÇ´Õ" + "ÃÒªÔ¹Ô¡ØÅ" + "ÃÒªÔ¹Õ" + "ÃÒªÔ¹Ù»¶ÑÁÀì" + "ÃÒªÙ»¶ÑÁÀì" + "ÃÒªÙ»âÀ¤" + "ÃÒ" + "ÃÒ´" + "ÃÒµ" + "ÃÒµÃ" + "ÃÒµÃÕ" + "ÃÒ¹" + "ÃÒº" + "ÃÒ¾³ÒÊÙÃ" + "ÃÒÁ" + "ÃÒÁ¤Óá˧" + "ÃÒÁÊÙÃ" + "ÃÒÁÑ" + "ÃÒÁÒ" + "ÃÒÁÒ¸Ôº´Õ" + "ÃÒÁà¡ÕÂõÔì" + "ÃÒÂ" + "ÃÒ¡ÒÃ" + "ÃÒ§ҹ" + "ÃÒÇ" + "ÃÒÇÕ" + "ÃÒÈÕ" + "ÃÒÉ®Ã" + "ÃÒÉ®Ãì" + "ÃÒËÙ" + "ÃÒહ·Ãì" + "ÃÒ⪺ÒÂ" + "ÃÒâªÇÒ·" + "ÃÓ" + "ÃÓ¤Ò" + "ÃӨǹ" + "ÃӾѹ" + "ÃÓ¾Ö§" + "ÃÓÁйÒ" + "ÃÓÅÖ¡" + "ÃÓà¾Â" + "ÃÔ" + "ÃÔ¡" + "ÃÔ´Êմǧ" + "ÃÔ¹" + "ÃÔº" + "ÃÔººÔé¹" + "ÃÔÁ" + "ÃÔÉÂÒ" + "ÃÔé¹" + "ÃÔéÇ" + "ÃÕ" + "ÃÕ¨ÔÊ·ÃÕ" + "ÃÕ´" + "ÃÕµ" + "ÃÕº" + "ÃÕÁ" + "ÃÕÇÔÇ" + "ÃÕàÊÔÃìª" + "ÃÕàÊÔÃì«" + "ÃÕâÁµ" + "ÃÕè" + "ÃÕé" + "ÃÖ§" + "ÃÖé§" + "Ã×è¹" + "Ã×éÍ" + "ÃØ" + "ÃØ¡" + "ÃØ¡¢¡Ð" + "ÃØ¡¢ªÒµÔ" + "ÃØ¡¢ÁÙÅ" + "ÃØ¡¢à·Ç´Ò" + "ÃØ¡¢ì" + "ÃاÃѧ" + "ÃبÔ" + "ÃبÕ" + "ÃØ´" + "Ãص" + "ÃØ·¸ì" + "ÃØ·Ã" + "Ãع" + "Ãعáç" + "ÃغÃÙè" + "ÃØÁ" + "ÃØɯì" + "ÃØÊâ«" + "ÃØè§" + "ÃØè¹" + "ÃØèÁ" + "ÃØèÁÃèÒÁ" + "ÃØèÂ" + "ÃØé§" + "ÃÙ" + "ÃÙ´" + "ÃÙ»" + "ÃÙÁÒà¹ÕÂ" + "ÃÙÊà«ÕÂ" + "ÃÙàÁà¹ÕÂ" + "ÃÙàÅçµµì" + "ÃÙè" + "ÃÙé" + "ÃÙé¨Ñ¡" + "ÃâË" + "Ãè¹" + "ÃèÁ" + "Ãèǧ" + "Ãèǹ" + "ÃèÇÁ" + "ÃèÍ" + "Ãèͧ" + "Ãè͹" + "ÃèÍÂ" + "ÃèÒ" + "ÃèÒ§" + "ÃèÒ¹" + "ÃèÒÂ" + "ÃèÓ" + "ÃèÓÃÇÂ" + "Ãé¹" + "Ãéͧ" + "Ãé͹" + "ÃéÍÂ" + "ÃéÒ" + "ÃéÒ§" + "ÃéÒ¹" + "ÃéÒÂ" + "ÃéÒÇ" + "Ä¡Éì" + "ĪÒ" + "ĪØ" + "ij" + "Ä´Õ" + "Ä´Ù" + "ĵ" + "Ä·¸Ò" + "Ä·¸Ôì" + "Ä·ÑÂ" + "ÄÉÀ" + "ÄÉÕ" + "Äå" + "ŧ" + "Å´" + "Å´Ò" + "Å´ÒÇÑÅÂì" + "Ź" + "ź" + "žºØÃÕ" + "ÅÁ" + "ÅŹÒ" + "ÅÅÒ¯" + "ÅÅÔµ" + "ÅÇ¡" + "Åǧ" + "ÅÇ´" + "ÅǹÅÒÁ" + "ÅǹÐ" + "ÅÇÐ" + "ÅËØ" + "ÅÍ¡" + "ÅÍ¡ÒÃÔ·ÖÁ" + "Åͧ" + "Åͧ¡Í§" + "Åͧ¨Ô¨Ù´" + "ÅÍ´" + "Å͵àµÍÃÕè" + "Å͹" + "Å͹´Í¹" + "Åͺ" + "ÅÍÁ" + "ÅÍÂ" + "ÅÍÍ" + "ÅÐ" + "ÅФÃ" + "ÅеԨٴ" + "ÅеԹ" + "ÅкѴ" + "ÅÐÁÑè§" + "ÅÐÁع" + "ÅÐÁèÍÁ" + "ÅÐÁéÒÂ" + "ÅÐÅÇÂ" + "ÅÐËÁÒ´" + "ÅÐËÒ¹" + "ÅÐËØè§" + "ÅÐÍͧ" + "ÅÐÍÒÂ" + "ÅÐàÁÍ" + "ÅÐàÁÒÐ" + "ÅÐàÁÔ´" + "ÅÐàÁÕ´" + "ÅÐàŧ" + "ÅÐàÅÔ§" + "ÅÐàÅÕ´" + "ÅÐàǧ" + "ÅÐàËÕèÂ" + "ÅÐàÍÕ´" + "ÅÐáÇ¡" + "ÅÐâÁº" + "ÅÐâÇé" + "ÅÐäÁ" + "ÅÑ¡" + "ÅÑ¡¢³Ð" + "ÅѡɳÐ" + "ÅÑ¡ÉÁÕ" + "ÅѤ¤Ð" + "ÅѤ¹Ò" + "ÅѤ¹ì" + "Åѧ" + "ÅѧàÅ" + "ÅѪªÒ" + "ÅѪªÕ" + "ÅѨ¡Ã" + "ÅѨ¹ì" + "ÅÑ©" + "ÅÑ©¡Ã" + "ÅÑ©¹ì" + "ÅÑ´" + "ÅÑ´Ò" + "ÅÑ·¸Ô" + "ÅÑ·¸ì" + "Åѹ" + "ÅѺ" + "ÅѾ¸ì" + "ÅÑÂ" + "ÅÑè¹" + "ÅÑè¹·Á" + "ÅÒ" + "ÅÒ¡" + "ÅÒ§" + "ÅÒ" + "ÅÒ´" + "ÅÒ¹" + "ÅÒº" + "ÅÒ»" + "ÅÒÀ" + "ÅÒÁ" + "ÅÒÁ¡" + "ÅÒÂ" + "ÅÒÂÊ×Í" + "ÅÒŹÐ" + "ÅÒÅÊ" + "ÅÒÇ" + "ÅÒÇ¡" + "ÅÒÇѳÂì" + "ÅÒÇÒ" + "ÅÒʹÐ" + "ÅÓ" + "ÅӴǹ" + "ÅӴѺ" + "ÅÓºÒ¡" + "ÅӾǹ" + "ÅӾͧ" + "ÅӾѧ" + "ÅÓÀآѹ" + "ÅÓÂͧ" + "ÅÓà¤ç" + "ÅÓà¨Õ¡" + "ÅÓà¹Ò" + "ÅÓà¾Ò" + "ÅÓàÅÔ¡" + "ÅÓàÅÕ§" + "ÅÓ⾧" + "ÅÓäÂ" + "ÅÔ" + "ÅÔ¡ä¹µì" + "ÅÔ¢ÊÔ·¸Ôì" + "ÅÔ¢Ôµ" + "ÅÔ§" + "ÅÔ§¡ì" + "ÅÔ§¤ì" + "ÅÔ´" + "ÅÔµ" + "ÅÔµÁÑÊ" + "ÅÔµÃ" + "ÅÔ¹Ô¹" + "ÅÔº" + "ÅÔ»´Ò" + "ÅÔ»µì" + "ÅԻʵԡ" + "ÅÔ»Ô" + "ÅÔ¿µì" + "ÅÔÅÔµ" + "ÅÔÇ" + "ÅÔʧ" + "ÅÔà¡" + "ÅÔàºÕÂ" + "ÅÔàÇÍÃì¾ÙÅ" + "ÅÔèÁ" + "ÅÔèÇ" + "ÅÔé¹" + "ÅÔ鹨Õè" + "ÅÔéÁ" + "ÅÕ" + "ÅÕ¡" + "Åչء«ì" + "ÅÕº" + "ÅÕÅÒ" + "ÅÕÅÒÈ" + "ÅÕè" + "ÅÕé" + "ÅÖ¡" + "ÅÖ§¤ì" + "Å×´" + "Å׺" + "Å×Á" + "Å×Í" + "Å×è¹" + "Å×èÍ" + "Å×é¹" + "Å×éÍ" + "ÅØ" + "ÅØ¡" + "Åا" + "ÅØÂ" + "ÅØè¹" + "ÅØèÁ" + "ÅØèÂ" + "ÅØé§" + "ÅØéÂ" + "ÅÙ¡" + "ÅÙ¡¤éÒ" + "ÅÙ¡ºÒÈ¡ì" + "ÅÙº" + "ÅÙè" + "Åç͡ࡵ" + "Åè¹" + "ÅèÁ" + "Åèǧ" + "ÅèÇÁ" + "ÅèÍ" + "Åèͧ" + "Åè͹" + "ÅèÍÂ" + "ÅèÍáÅè" + "ÅèÐ" + "ÅèÒ" + "ÅèÒ§" + "ÅèÒ¹" + "ÅèÒÁ" + "ÅèÓ" + "Åé§àÅé§" + "Åé¹" + "ÅéÁ" + "Åéǧ" + "Åéǹ" + "ÅéÍ" + "ÅéÍÁ" + "ÅéÒ" + "ÅéÒ§" + "ÅéÒµéÒ" + "ÅéÒ¹" + "ÅéÓ" + "Ç¡" + "Ç¡Ð" + "ǧ" + "ǧ¡µ" + "ǧ¡ì" + "ǧ¨Ã" + "ǧȡÃ" + "ǧÈÒ" + "ǧÈì" + "Ǩ¹Ð" + "ǨÐ" + "ǨÕ" + "ǪÐ" + "ǪÔÃÐ" + "ǪÔÃÒÇظ" + "dzºÑµÃ" + "dz¾Ñ¹¸¹ì" + "dzÐ" + "dzԪ" + "dzԪªÒ" + "dzԪÂÒ" + "dzԪÂì" + "dzԾ¡" + "Ç´Õ" + "ǵÐ" + "Ç·Ð" + "Ç·ÑصÒ" + "ǸءÒ" + "ǸÙ" + "ǹ" + "ǹÑÊ" + "ǹÒ" + "ǹҹµì" + "ǹԴÒ" + "ǹԾ¡" + "ÇÂÑÊÂì" + "Çç¤ì" + "ÇóÐ" + "ÇÃÁËÒÇÔËÒÃ" + "ÇÃä" + "ÇÃäÂì" + "ÇÃê" + "ÇÃêÂì" + "ÇÃó¡ÃÃÁ" + "ÇÃó¤´Õ" + "ÇÃó¹Ò" + "ÇÃó¾ÄµÔ" + "ÇÃóÂØ¡µì" + "ÇÃóÂص" + "ÇÃóÈÔÅ»ì" + "ÇÃóÐ" + "ÇÃó֡" + "ÇÃø¡" + "ÇÃø¹Ð" + "ÇÃÃÉ" + "ÇÃÃÉÒ" + "ÇÃÇÔËÒÃ" + "ÇÃÑÙ" + "ÇÃÒ§¤¹Ò" + "ÇÃÒËÐ" + "ÇÃÒËì" + "ÇÃس" + "ÇÅѪ¹ì" + "ÇÅÑÂ" + "ÇÅÒË¡" + "ÇÅÕ" + "ÇÈÐ" + "ÇÊÊÐ" + "ÇÊÊÕ" + "ÇÊÐ" + "ÇÊѹµ´ÔÅ¡" + "ÇÊѹµì" + "ÇÊÒ" + "ÇÊÕ" + "ÇÊØ" + "ÇÊظÒ" + "ÇÊع¸ÃÒ" + "ÇÊØÁ´Õ" + "ÇËÐ" + "ÇËÒ" + "ÇÍ" + "ÇÍ¡" + "ÇÍ¡áÇ¡" + "ÇÍ´" + "Ç͹" + "ÇÍÃìáù·ì" + "ÇÍÅÅìʵÃÕ·" + "ÇÍÅàÅÂì" + "ÇÍÅàÅÂìºÍÅ" + "ÇÍáÇ" + "ÇÐ" + "ÇÑ¡" + "ÇÑ¡¡Ð" + "ÇѤ" + "ÇѤ¤ÕÂì" + "ÇѤ¤Ø" + "ÇѤ«Õ¹" + "Çѧ" + "Çѧ¡ì" + "Çѧàǧ" + "ÇѨ¹Ð" + "ÇѪ" + "ÇѪ¬ì" + "ÇѪÃÐ" + "ÇѪÃÔ¹·Ãì" + "ÇѪÃÕ" + "Çѯ¨Ñ¡Ã" + "Çѯ¯Ô" + "ÇѯʧÊÒÃ" + "ÇѲ¡Ð" + "ÇѲ¡Õ" + "ÇѲ¹¸ÃÃÁ" + "ÇѲ¹Ð" + "ÇѲ¹Ò" + "Çѳ" + "Çѳ¯ì" + "Çѳ¹Ò" + "ÇÑ´" + "Çѵ" + "ÇѵµÒ" + "Çѵµì" + "Çѵ¶Ø" + "Çѵ¶ì" + "Çѵ¹Ð" + "ÇѵÃ" + "ÇѵÔ" + "Çѹ" + "Çѹ·¹Ò" + "Çѹ·¹ÕÂì" + "Çѹ·ÂËѵ¶ì" + "Çѹ·ÂÒÇظ" + "Çѹ·Ò" + "ÇѺ" + "ÇÑ»»Ð" + "ÇÑÁÁÔ¡" + "ÇÑÂ" + "ÇÑÅÂì" + "ÇÑÅÅÀ" + "ÇÑÅÅÕ" + "ÇÑÇ" + "ÇÑÊ´Ø" + "ÇÑÊÊÐ" + "ÇÑÊÊÒ¹Ð" + "ÇÑÊâÊ·¡" + "ÇÒ" + "ÇÒ¡" + "ÇÒ¡ÂÊÑÁ¾Ñ¹¸ì" + "ÇÒ¡ÂÐ" + "ÇÒ§" + "ÇÒ¨¡" + "ÇÒ¨Ò" + "ÇÒ³Ôª" + "ÇÒ³ÔªÂì" + "ÇÒ³Õ" + "ÇÒ´" + "ÇÒµÀÑÂ" + "ÇÒµÐ" + "ÇÒ·" + "ÇÒ·¡" + "Çҷ¡Ã" + "ÇÒ·Âì" + "ÇÒ·Ôµ" + "ÇÒ·Ô¹" + "ÇÒ·Õ" + "ÇÒ¹" + "ÇÒ¹Ã" + "ÇÒ¹ÃÔ¹·Ãì" + "ÇÒº" + "ÇÒ»Ð" + "ÇÒ»ÔµÐ" + "ÇÒ»Õ" + "ÇÒÁ" + "ÇÒÁÐ" + "ÇÒÂ" + "ÇÒ·Ùà¤" + "ÇÒÂÊÐ" + "ÇÒÃ" + "ÇÒÃÊÒÃ" + "ÇÒÃÔ" + "ÇÒÃÕ" + "ÇÒÃس" + "ÇÒÃسÕ" + "ÇÒÅ" + "ÇÒÅìÇ" + "ÇÒÇ" + "ÇÒʹÐ" + "ÇÒʹÒ" + "ÇÒʾ" + "ÇÒËÐ" + "ÇÒËÔ¹Õ" + "ÇÒÌ" + "ÇÔ¡ÃÁ" + "Çԡĵ" + "Çԡĵ¡Òóì" + "ÇԡĵÔ" + "ÇÔ¡Å" + "ÇÔ¡ÊÔµ" + "ÇÔ¡Ñ»" + "ÇÔ¡ÒÅ" + "ÇÔ¤ËÐ" + "ÇÔ§" + "ÇÔ§Ç͹" + "ÇÔ¨Âص" + "ÇԨóÐ" + "ÇÔ¨Å" + "ÇԨѡ¢³ì" + "ÇԨѡɳì" + "ÇÔ¨ÑÂ" + "ÇÔ¨ÒÃ" + "ÇÔ¨Òóҳ" + "ÇÔ¨Òóì" + "ÇÔ¨Ô" + "ÇÔ¨Ô¡Ô¨©Ò" + "ÇÔ¨Ôµ" + "ÇÔ¨ÔµÃ" + "ÇÔ¨Ô¹" + "ÇԨس" + "ÇÔ¨Øó" + "ÇÔªªÒ" + "ÇÔªªØ" + "ÇÔªªØÅ´Ò" + "ÇÔªÐ" + "ÇÔª¹Õ" + "ÇÔªÒ" + "ÇÔªÒ¹¹Ð" + "ÇÔªÔµ" + "ÇÔѵÔ" + "ÇÔÒ³" + "ÇÔÙ" + "ÇÔ±ÙÃÂì" + "ÇÔ´" + "ÇÔ´ÕâÍ" + "ÇÔµ¡" + "ÇÔµ¶ÒÃ" + "ÇÔµÒÁÔ¹" + "ÇÔ¶Õ" + "ÇԷ°ҹÐ" + "ÇÔ·ÂÒ" + "ÇÔ·ÂÒÅÑÂ" + "ÇÔ·ÂØ" + "ÇÔ·Âص" + "ÇÔ·ÇÑÊ" + "ÇÔ·Òóì" + "ÇÔ·ÒŹì" + "ÇÔ·Ôµ" + "ÇÔ·Ù" + "ÇÔ·ÙÃ" + "ÇÔ¸" + "ÇÔ¸ÇÒ" + "ÇÔ¸Ò" + "ÇÔ¸Ò¹" + "ÇÔ¸Õ" + "ÇÔ¸Ù»¹Ð" + "ÇԹѹµÙ" + "ÇÔ¹ÑÂ" + "ÇÔ¹Ò·Õ" + "ÇÔ¹ÒÈ" + "ÇÔ¹Ô¨" + "ÇÔ¹Ô¨©ÑÂ" + "ÇÔ¹Ôµ" + "ÇÔ¹ÔºÒµ" + "ÇÔ¹Ô»ÒµÔ¡" + "ÇÔ¹â´ÇÊì" + "ÇÔ¹â´Çì" + "ÇԺѵÔ" + "ÇÔºÒ¡" + "ÇÔºØÅ" + "ÇÔºØÅÂì" + "ÇÔºÙÅ" + "ÇÔºÙÅÂì" + "ÇÔ»¡ÒÃ" + "ÇÔ»¯ÔÊÒÃ" + "ÇÔ»ÃСÒÃ" + "ÇÔ»ÃеÔÊÒÃ" + "ÇÔ»ÃÐÅÒ»" + "ÇÔ»ÃÐÇÒÊ" + "ÇÔ»ÃÔµ" + "ÇÔ»ÅÒ»" + "ÇÔ»ÅÒÊ" + "ÇÔ»ÇÒÊ" + "ÇԻѡÉì" + "ÇÔ»ÑÊÊ¡" + "ÇÔ»ÑÊʹÒ" + "ÇÔ»â¤" + "ÇÔ¾Ò¡Éì" + "ÇÔ¾Ô¸·ÑȹÒ" + "ÇÔÀǵѳËÒ" + "ÇÔÀѧ¤ì" + "ÇÔÀѪ" + "ÇÔÀѵµÔ" + "ÇÔÀÒ" + "ÇÔÀÒÇ´Õ" + "ÇÔÁѵÔ" + "ÇÔÁص" + "ÇÔÁصµÔ" + "ÇÔõÐ" + "ÇÔÃÁ³Ð" + "ÇÔÃÃø¹ì" + "ÇÔÃÇÐ" + "ÇÔÃѪ" + "ÇÔÃѵ" + "ÇÔÃѵÔ" + "ÇÔÃÔÂÀÒ¾" + "ÇÔÃÔÂÐ" + "ÇÔÃظ" + "ÇÔÃØÌË¡" + "ÇÔÃØÌËì" + "ÇÔÅѹ´Ò" + "ÇÔÅÒ´" + "ÇÔÅÒ»" + "ÇÔÅÒÇѳÂì" + "ÇÔÅÒÈ" + "ÇÔÅÒÊ" + "ÇÔÅÒÊÔ¹Õ" + "ÇÔÇ" + "ÇÔÇóì" + "ÇÔÇÃÐ" + "ÇÔÇѯ" + "ÇÔÇѲ¹Ò¡ÒÃ" + "ÇÔÇѲ¹ì" + "ÇÔÇÒ·" + "ÇÔÇÒËÁ§¤Å" + "ÇÔÇÒËÐ" + "ÇÔÇÒËì" + "ÇÔÇÔ¨" + "ÇÔÇÔµ" + "ÇÔÇÔ¸" + "ÇÔÈÃص" + "ÇÔÈÇ¡Ã" + "ÇÔÈÇ¡ÃÃÁ" + "ÇÔÈÑÅÂì" + "ÇÔÈÒ¢Ð" + "ÇÔÈÒ¢Ò" + "ÇÔÈÒ§¤ì" + "ÇÔÈÒÅ" + "ÇÔÈÔÉ°ì" + "ÇÔÈØ·¸Ôì" + "ÇÔÈØ·¸ì" + "ÇÔɳØ" + "ÇÔɸÃ" + "ÇÔÉÑ¡µì" + "ÇÔÉÑÂ" + "ÇÔÉÒ³" + "ÇÔÉØÇѵ" + "ÇÔÊ¡Õé" + "ÇÔÊÃê¹ÕÂì" + "ÇÔÊĵ" + "ÇÔÊÊØ¡ÃÃÁ" + "ÇÔÊѪ¹Ò" + "ÇÔÊÑÕ" + "ÇÔÊÑÂ" + "ÇÔÊÒ¢ºÙªÒ" + "ÇÔÊÒ¢Ð" + "ÇÔÊÒÁÑ" + "ÇÔÊÒÊÐ" + "ÇÔÊÒË¡Ô¨" + "ÇÔÊÔ°" + "ÇÔÊا¤ÒÁÊÕÁÒ" + "ÇÔÊØ·¸Ôì" + "ÇÔÊØ·¸ì" + "ÇÔÊÙµÃ" + "ÇÔˤ" + "ÇÔ˧¤ì" + "ÇÔËÅÑè¹" + "ÇÔËÒÂÊÐ" + "ÇÔËÒÃ" + "ÇÔËÔ§ÊÐ" + "ÇÔËÔ§ÊÒ" + "ÇÔÌѧ¤ì" + "ÇÔÌÒÃ" + "ÇÔÌÒÃì" + "ÇÔà¤ÃÒÐËì" + "ÇÔàªÕÂÃ" + "ÇÔà·ÇÉ" + "ÇÔà·È" + "ÇÔà·âȺÒÂ" + "ÇÔ๵" + "ÇÔà¹" + "ÇÔàù·Ãì" + "ÇÔàÅ»" + "ÇÔàÇ¡" + "ÇÔàÈÉ" + "ÇÔàÈɳì" + "ÇÔàÊ·" + "ÇÔàËÊÒ" + "ÇÔâ¹·¡" + "ÇÔâÁ¡¢ì" + "ÇÔâ¤" + "ÇÔâè" + "ÇÔâè¹ì" + "ÇÔâò" + "ÇÔâø" + "ÇÔâø¹ì" + "ÇÔâŨ¹Ð" + "ÇÔäÅ" + "ÇÔè§" + "ÇÔè§à»ÕéÂÇ" + "ÇÔè¹" + "ÇÕ" + "ÇÕ¨Ô" + "ÇÕª¹Õ" + "ÇÕ«èÒ" + "ÇÕ³Ò" + "ÇÕáÃÃÁ" + "ÇÕê¹" + "ÇÕúØÃØÉ" + "ÇÕÃʵÃÕ" + "ÇÕèÇѹ" + "ÇÕèáÇÇ" + "ÇÕé´" + "ÇØ°Ô" + "Çز" + "ÇزÔ" + "ÇØ´" + "Çغ" + "ÇØè¹" + "ÇØé§" + "ÇØé¹" + "ÇØéÂ" + "ÇÙ´ÇÒ´" + "ÇÙ¸Ù" + "ÇÙº" + "ÇÙèÇÒÁ" + "ÇÙé" + "Ç๨Ã" + "Çâ¹·ÂÒ¹" + "ÇâÃ" + "ÇâáÒÊ" + "ÇâôÁ" + "Çèͧ" + "Çè͹" + "ÇèÒ" + "ÇèÒ§" + "ÇèÒ¹" + "ÇèÒÂ" + "ÇèÒÇ" + "ÇéÒ" + "ÇéÒ§" + "ÇéÒÂ" + "È¡" + "ȵ" + "ȵÇÃÃÉ" + "Ⱦ" + "ÈÃ" + "ÈÃÑ·¸Ò" + "ÈÃÑÂ" + "ÈÃÕ" + "ÈÃÕÇÔäÅÄ·¸Ôì" + "ÈÃÕÉÐà¡É" + "Èħ¤ÒÃ" + "ÈÈÔ" + "ÈÍ" + "ÈÍ¡" + "ÈÑ¡´Ò" + "ÈÑ¡´Ô¹Ò" + "ÈÑ¡´Ôì" + "ÈÑ¡ÂÀÒ¾" + "ÈÑ¡ÂÐ" + "ÈÑ¡Âì" + "ÈÑ¡ÃÒª" + "ÈѵÃÙ" + "ÈѾ·ì" + "ÈÑÅ¡ÃÃÁ" + "ÈÑÅÂÈÒʵÃì" + "ÈÑÅÂá¾·Âì" + "ÈÑÅÂì" + "Èҡ¾ط¸" + "ÈÒ¡ÂÁعÕ" + "ÈÒ¡ÂÐ" + "ÈÒµÃÒ¨ÒÃÂì" + "ÈÒ¹µÔ" + "ÈÒ¹µì" + "ÈÒ÷" + "ÈÒ÷ÙÅ" + "ÈÒÅ" + "ÈÒÅÒ" + "ÈÒÊ¡" + "ÈÒÊ´Ò" + "ÈÒʵÃÒ" + "ÈÒʵÃÒ¨ÒÃÂì" + "ÈÒʵÃì" + "ÈÒʹ¨Ñ¡Ã" + "ÈÒʹÒ" + "ÈÒʹٻ¶ÑÁÀ¡" + "ÈÒʹì" + "ÈÔ¢ÃÔ¹" + "ÈÔÃÔÃÒª" + "ÈÔÅ»¡Ã" + "ÈÔÅ»¡ÃÃÁ" + "ÈÔÅ»¡ÒÃ" + "ÈÔÅ»¡Ô¨" + "ÈÔÅ»ÇÔ·ÂÒ" + "ÈÔÅ»ÈÒʵÃì" + "ÈÔÅ»Ð" + "ÈÔŻҡÃ" + "ÈÔŻԹ" + "ÈÔÅ»Õ" + "ÈÔÅ»ì" + "ÈÔÅÒ" + "ÈÔÇÅÖ§¤ì" + "ÈÔÇÐ" + "ÈÔÇàÇ·" + "ÈÔÇâÁ¡¢ì" + "ÈÔÉÂì" + "ÈÔâÃÃÒº" + "ÈÕÃÉÐ" + "ÈÕÅ" + "ÈÖ¡" + "ÈÖ¡ÉÒ" + "ÈÖ¡ÉÒ¸Ô¡ÒÃ" + "ÈÖ¡ÉÒ¹Ôà·È¡ì" + "ÈØ¡Ãì" + "ÈØÀ¡Ã" + "ÈØÀ¹ÔÁÔµ" + "ÈØÀÁÑÊ´Ø" + "ÈØÀÁÒµÃÒ" + "ÈØÀÁÒÊ" + "ÈØÀÍÑ¡ÉÃ" + "ÈØÀÒ§¤ì" + "ÈØÀà¤ÃÒÐËì" + "ÈØÅ¡Ò¡Ã" + "ÈØÅ¡ÒÃÑ¡Éì" + "ÈØÅÕ" + "ÈÙ·Ã" + "ÈÙ¹Âì" + "Ê¡" + "Ê¡¹¸ì" + "Ê¡»Ã¡" + "Ê¡Å" + "Ê¡ÇÒ·Õ" + "ʡ͵Ᏼì" + "Ê¡Ñ´" + "Ê¡Ò" + "Ê¡ÒÇ" + "Ê¡Õ" + "ʡس" + "ʡسÒ" + "ʡسÕ" + "ʡعµì" + "Ê¡ØÅ" + "Ê¡ç͵Ᏼì" + "ʧ" + "ʧ¡ÃÒ¹µì" + "ʧ¡Ò" + "ʧ¢ÅÒ" + "ʧ¤ÃÒÁ" + "ʧ¦ì" + "ʧº" + "ʧǹ" + "ʧÊÑÂ" + "ʧÊÒÃ" + "ʧÊÒÃÇѯ" + "ʧѴ" + "ʧà¤ÃÒÐËì" + "ʧèÒ" + "ʳ±ì" + "Ê´" + "Ê´ÁÀì" + "ʴѺ" + "Ê´Ø´Õ" + "ʵÃÕ" + "ʵ͡" + "ʵѿ¿ì" + "ʵҧ¤ì" + "ʵÒÃì·" + "ʵÔ" + "ʵÔê¡à¡ÍÃì" + "ʵÙ" + "ʵêÍ¡" + "ʶÅ" + "ʶҹ" + "ʶҹ¡Òóì" + "ʶҹÐ" + "ʶҹÕ" + "ʶҺѹ" + "ʶһ¹Ò" + "ʶһ¹Ô¡" + "ʶһѵ¡ÃÃÁ" + "ʶҾÃ" + "ʶÒÇÃ" + "ʶԵ" + "ʶԵÂ" + "ʶԵÂÈÒʵÃì" + "ʶԵÂì" + "ʶԵÔ" + "ʶØÅ" + "ʶٻ" + "ʷ;" + "ʹ" + "ʹ·¹Ò" + "ʹ¸ÂÒ" + "ʹ¸Ô" + "ʹ¹ÃÒ¤Ò" + "ʹÁ" + "ʹͧ" + "ʹѺ" + "ʹѺʹع" + "ʹÑè¹" + "ʹҹ" + "ʹÒÁ" + "ʹԷ" + "ʹÔÁ" + "ʹء" + "ʹØè¹" + "ʹà·È" + "ʹà·èËì" + "ʹã¨" + "ʺ" + "ʺ§" + "ʺ¶" + "ʺÒÂ" + "ʺÙè" + "Ê»ÃÔ§" + "Ê»ÒÂ" + "Ê»ÒࡵµÕ" + "Ê»ÔÃÔµ" + "ÊÀÒ" + "ÊÀÒ¾" + "ÊÀҾѲ¹ì" + "ÊÀÒÇÐ" + "ÊÁ" + "ÊÁ¡ÒÃ" + "ÊÁ¤ÇÃ" + "ÊÁÒ" + "ÊÁ³ÈÑ¡´Ôì" + "ÊÁ³Ð" + "ÊÁ´ØÅ" + "ÊÁ¶Ð" + "ÊÁ¹Ò¤Ø³" + "ÊÁºÑµÔ" + "ÊÁºÙóÒÒÊÔ·¸ÔÃÒªÂì" + "ÊÁºÙóì" + "ÊÁ»ÃдÕ" + "ÊÁ»Ä´Õ" + "ÊÁÀ¾" + "ÊÁÀÒÃ" + "ÊÁÁµ" + "ÊÁÁµÔ" + "ÊÁÁÒµÃ" + "ÊÁÁصÔ" + "ÊÁÃ" + "ÊÁÃö" + "ÊÁÃö¹Ð" + "ÊÁÃÊ" + "ÊÁÍ" + "ÊÁͧ" + "ÊÁѤÃ" + "ÊÁѪªÒ" + "ÊÁѹ" + "ÊÁÑÂ" + "ÊÁÒ" + "ÊÁÒ¤Á" + "ÊÁÒ¨ÒÃ" + "ÊÁÒªÔ¡" + "ÊÁÒ¸Ô" + "ÊÁÒ¹" + "ÊÁҺѵÔ" + "ÊÁÒÊ" + "ÊÁÔ§" + "ÊÁÔµ" + "ÊÁÕ" + "ÊÁد°Ò¹" + "ÊÁØ´" + "ÊÁØ·Ã" + "ÊÁØ·ÑÂ" + "ÊÁع" + "ÊÁعä¾Ã" + "ÊÁØËì" + "ÊÁà´ç¨" + "ÊÁྪ" + "ÊÁàÊÃç¨" + "ÊÁ⾸Ô" + "ÊÁâÀ¤" + "ÊÁâÀª" + "ÊÁèÓàÊÁÍ" + "Ê´" + "ʺ" + "ÊÂÁÀÙ" + "ÊÂͧ" + "ÊÂÒÁ" + "ÊÂÒÂ" + "ÊÂÔÇ" + "ÊÂØÁ¾Ã" + "ÊÂØÁÀÙ" + "Êç" + "ÊóÐ" + "ÊóҤÁ¹ì" + "ÊõÐ" + "ÊÃÃ" + "ÊÃäì" + "ÊÃþ" + "ÊÃþҡÃ" + "ÊÃþҧ¤ì" + "ÊÃÃྪ" + "ÊÃÃàÊÃÔ" + "ÊÃǧ" + "ÊÃÇÁ" + "ÊÃÇÅ" + "ÊÃÐ" + "ÊÃÒ" + "ÊÃÕáԨ" + "ÊÃÕøҵØ" + "ÊÃÕÃÇÔ·ÂÒ" + "ÊÃÕÃÈÒʵÃì" + "ÊÃÕÃÐ" + "ÊÃØ»" + "ÊÃè§" + "ÊÃèÒ§" + "ÊÃéÍÂ" + "ÊÃéÒ§" + "ÊÃéÒÇàÊÕÂÇ" + "Êĵ" + "ÊÄɯì" + "ÊÅ" + "ÊÅ´" + "Êź" + "ÊÅǹ" + "ÊÅÇÂ" + "ÊÅÍ´" + "ÊÅ͹" + "ÊÅÍÂ" + "ÊÅÐ" + "ÊÅÑ¡" + "ÊÅÑ¡àµé" + "ÊÅÑ´" + "ÊÅÑ´ä´" + "ÊÅѺ" + "ÊÅÑÁ" + "ÊÅÑÇ" + "ÊÅÒ" + "ÊÅÒ¡" + "ÊÅÒ´" + "ÊÅҵѹ" + "ÊÅÒº" + "ÊÅÒÂ" + "ÊÅÔ´" + "ÊÅÔÅ" + "ÊÅÖ¡" + "ÊÅÖ§" + "ÊÅص" + "ÊÅغ" + "ÊÅØÁ¾Ã" + "ÊÅç͵" + "ÊÅéÒ§" + "ÊÇ¡" + "ÊÇ´" + "Êǹ" + "ÊǹÐ" + "ÊǹҡÒÃ" + "ÊǺ" + "ÊÇÁ" + "ÊÇÂ" + "ÊÇÃ" + "ÊÇÃäµ" + "ÊÇÃäÒÅÑÂ" + "ÊÇÃäì" + "ÊÇÃÃÂÒ" + "ÊÇÍ»" + "ÊÇÐ" + "ÊÇÑÊ´Ô¡ÒÃ" + "ÊÇÑÊ´ÔÀÒ¾" + "ÊÇÑÊ´Ôì" + "ÊÇÑÊ´Õ" + "ÊÇÑʵԡÐ" + "ÊÇÒ" + "ÊÇÒ§" + "ÊÇÒ´" + "ÊÇÒ·" + "ÊÇÒÁÔ" + "ÊÇÒÁÕ" + "ÊÇÒÂ" + "ÊÇÒÊ´Ôì" + "ÊÇÒËÐ" + "ÊÇÔ§" + "ÊÇÔµªì" + "ÊÇÔµ«ì" + "ÊÇÔÊà«ÍÃìᏴì" + "ÊÇÕà´¹" + "ÊÇèÒ§" + "ÊÇèÒ¹" + "ÊÇéÒ¹" + "ÊÊÒÃ" + "Êˡóì" + "ÊË¡ÒÃ" + "Ê˨Ã" + "Ê˪ҵÔ" + "ÊË»ÃЪҪҵÔ" + "Ê˾ѹ¸ÃÑ°" + "Ê˾ѹ¸ì" + "ÊËÀÒ¾" + "ÊËÃÑ°" + "ÊËÇÔÃÔÂÒ" + "ÊËÈÖ¡ÉÒ" + "ÊËѪ" + "ÊËÑÁº´Õ" + "ÊËÑʹѹì" + "ÊËÑÊÇÃÃÉ" + "ÊËÑÊÊÐ" + "ÊËÑÊÊÒ" + "ÊËÒÂ" + "ÊÍ" + "Êͧ" + "ÊÍ´" + "Ê͹" + "Êͺ" + "Ê;ÅÍ" + "ÊÍÂ" + "ÊÐ" + "ÊС´" + "ÊСԴ" + "ÊФÃÒ" + "ÊдÁ" + "Êдǡ" + "ÊдÔé§" + "Êд֧" + "Êд×Í" + "Êдش" + "ÊдØé§" + "ÊеÍ" + "ÊеÖ" + "Êе×Í" + "Êзé͹" + "ÊзéÒ¹" + "Êкѡ" + "ÊкѴ" + "ÊкѴÊкÔé§" + "ÊкÑé¹" + "ÊкéÒ" + "ÊоÃÑ¡" + "ÊоÃÑè§" + "ÊоѴ" + "ÊоÑé¹" + "Êоҹ" + "ÊоÒÂ" + "ÊÐÃеÐ" + "ÊÐÃÐá˹è" + "ÊÐÅÖÁÊÐÅ×Í" + "ÊÐÇÕé´ÊÐÇéÒ´" + "ÊÐÊÁ" + "ÊÐÊÒ§" + "ÊÐÍÒ§" + "ÊÐÍÒ´" + "ÊÐÍÔ´ÊÐàÍÕ¹" + "ÊÐÍÔé§" + "ÊÐÍÖ¡" + "ÊÐÍ×é¹" + "ÊÐÍéÒ¹" + "ÊÐà¡ç´" + "ÊÐà´ç´" + "ÊÐà·Ôé¹" + "ÊÐà·×͹" + "ÊÐà·×é͹" + "ÊÐà¾ÃèÒ" + "ÊÐàÍÍÐ" + "ÊÐ⾡" + "ÊÐâÍ´ÊÐͧ" + "ÊÐãÀé" + "ÊÑ¡" + "ÊÑ¡¢Õ" + "ÊÑ¡ÇÒ" + "ÊÑ¡ËÅÒ´" + "ÊÑ¢ÂÐ" + "Êѧ¡Á·ÃѾÂì" + "Êѧ¡Ã" + "Êѧ¡Ã³Õ" + "Êѧ¡ÐµÑ§" + "Êѧ¡ÐÊÕ" + "Êѧ¡Ñ´" + "Êѧ¡Ñ»»Ð" + "Êѧ¡Ò" + "Êѧ¡ÒÈ" + "Êѧ¢ÂÒ" + "Êѧ¢ÒÃ" + "Êѧ¢ì" + "Êѧ¤ÒµÔ" + "Êѧ¤Á" + "Êѧ¤Ñ§" + "Êѧ¤Ò¹Ò" + "Êѧ¤Ò¹ÒÂ" + "Êѧ¤Õµ" + "Êѧ¤ì" + "Êѧ¦¡ÃÃÁ" + "Êѧ¦¹Ò¡" + "Êѧ¦Á³±Å" + "Êѧ¦Á¹µÃÕ" + "Êѧ¦ÃÒª" + "Êѧ¦ÊÀÒ" + "Êѧ¦Ò¯Ô" + "Êѧ¦ÒÇÒÊ" + "ÊѧÇÃ" + "ÊѧÇѸÂÒÂ" + "ÊѧÇÒÅ" + "ÊѧÇÒÊ" + "ÊѧʴÁÀì" + "ÊѧÊÃäì" + "ÊѧÊÒÃÇѯ" + "ÊѧËÃ" + "ÊѧËóì" + "ÊѧËÒÃ" + "ÊѧËÒÃÔÁ·ÃѾÂì" + "ÊѧËÔµ" + "Êѧࡵ" + "Êѧࢻ" + "Êѧà¤ÃÒÐËì" + "ÊѧàǤÐ" + "ÊѧàǪ" + "ÊѧàÇÂ" + "ÊѧàÇÕ¹" + "Êѧâ¤" + "Êѧ⪹ì" + "ÊѨ" + "ÊѨ¡ÔÃÔÂÒ" + "ÊѨ¨Ð" + "ÊѨҳ" + "ÊѨ¹ÔÂÁ" + "ÊѨ¾¨¹ì" + "ÊѪ¬Ø" + "ÊѨÃ" + "ÊѨÒÃ" + "ÊѪҵҳ" + "ÊѪҵÔ" + "ÊѬÒ" + "ÊÑÒ" + "ÊÑÒ³" + "ÊÑÕ" + "ÊÑ»ÃСÒÈ" + "ÊÑÅѡɳì" + "ÊÑਵ¹Ò" + "Êѳ°Ò¹" + "Êѳ±ì" + "ÊѳËì" + "ÊÑ´" + "Êѵ" + "ÊѵµÐ" + "ÊѵºÃó" + "ÊѵÂҺѹ" + "ÊѵÂì" + "ÊѵǺÒÅ" + "ÊѵÇÇÔ·ÂÒ" + "ÊѵÇÒ" + "ÊѵÇÒÃ" + "ÊѵÇá¾·Âì" + "ÊѵÇâÅ¡" + "ÊѵÇì" + "ÊÑ·¸ÃÃÁ" + "ÊÑ·¸Ò" + "ÊÑ·ÈÒʵÃì" + "Êѹ" + "Êѹ´Ò¹" + "Êѹ´Ò»" + "ÊѹµÐ»Ò»Ò" + "ÊѹµÔ" + "Êѹµì" + "Êѹ¶ÇäÁµÃÕ" + "Êѹ¶Ñµ" + "Êѹ¶ÒÃ" + "Êѹ·¹Ð" + "Êѹ·¹Ò¡ÒÃ" + "Êѹ·Ð" + "Êѹ·Ñ´" + "Êѹ¸Ò¹" + "Êѹ¹ÔºÒµ" + "Êѹ¹ÔÇÒÊ" + "Êѹ¹ÔÉ°Ò¹" + "Êѹ¹ÔàÇÊ" + "Êѹʡĵ" + "Êѹâ´É" + "ÊѺ" + "ÊѺ»ÅѺ" + "ÊѺ»Ðô" + "ÊÑ»¤Ñº" + "ÊÑ»´¹" + "ÊÑ»´ÒËì" + "ÊÑ»·¹" + "ÊÑ»ÃÐÂØ·¸ì" + "Êѻ˧¡" + "ÊÑ»àËÃèÍ" + "ÊѾ" + "ÊѾ¾Ð" + "ÊѾ¾ÑÙ" + "ÊѾÂÍ¡" + "ÊѾà¾àËÃÐ" + "ÊÑÁºÙóì" + "ÊÑÁ»ªÑÐ" + "ÊÑÁ»·Ò" + "ÊÑÁ»·Ò¹" + "ÊÑÁ»Âص" + "ÊÑÁ»ÃÐÊÔ·¸Ôì" + "ÊÑÁ»ÃÐËÒÃ" + "ÊÑÁ»ÃÒÂÀ¾" + "ÊÑÁ»ÃÒÂÔ¡À¾" + "ÊÑÁ»â¤" + "ÊÑÁ¼ÑÊ" + "ÊÑÁ¾Ñ·¸ì" + "ÊÑÁ¾Ñ¹¸¹ì" + "ÊÑÁ¾Ñ¹¸ÀÒ¾" + "ÊÑÁ¾Ñ¹¸ÁÔµÃ" + "ÊÑÁ¾Ñ¹¸äÁµÃÕ" + "ÊÑÁ¾Ñ¹¸ì" + "ÊÑÁ¾Ò¸Ð" + "ÊÑÁ¾Ø·¸Ð" + "ÊÑÁÀÒÃÐ" + "ÊÑÁÀÒɳì" + "ÊÑÁÁ¹Ò" + "ÊÑÁÁÒ" + "ÊÑÁÁÒªÕ¾" + "ÊÑÁÄ·¸Ôì" + "ÊÑÁ⾸Ô" + "ÊÑÁâÁ·¹Õ¡¶Ò" + "ÊÑÊ´Õ" + "ÊÑÊÊÐ" + "ÊÑè§" + "ÊÑè¹" + "ÊÑé¹" + "ÊÒ" + "ÊÒ¡" + "ÊÒ¡Ãèì" + "ÊÒ¡Å" + "ÊÒ¢Ò" + "ÊÒ¤Ã" + "ÊÒ¤Ù" + "ÊÒ¤àÃÊ" + "ÊÒ§" + "ÊÒ´" + "ÊÒ·Ã" + "ÊÒ·ÔÊ" + "ÊÒ¸¡" + "ÊÒ¸ÂÒÂ" + "ÊÒ¸ÒóÀÑÂ" + "ÊÒ¸ÒóÃÑ°" + "ÊÒ¸ÒóÊØ¢" + "ÊÒ¸ÒóÐ" + "ÊÒ¸Òóٻ¡ÒÃ" + "ÊÒ¸ÒóٻâÀ¤" + "ÊÒ¸Ôµ" + "ÊÒ¸Ø" + "ÊÒ¹" + "ÊÒ¹ØÈÔÉÂì" + "ÊÒº" + "ÊÒºÊÙ" + "ÊÒºÒ¹" + "ÊÒ»" + "ÊÒÁ" + "ÊÒÁѤ¤Õ" + "ÊÒÁÑ" + "ÊÒÁÒ¹Âì" + "ÊÒÁÒö" + "ÊÒÁÔµ" + "ÊÒÁÔÀÑ¡´Ôì" + "ÊÒÁÕ" + "ÊÒÁà³Ã" + "ÊÒÂ" + "ÊÒªÙ" + "ÊÒÂÂÙ" + "ÊÒÂѳËì" + "ÊÒÃ" + "ÊÒä´Õ" + "ÊÒöÕ" + "ÊÒ÷" + "ÊÒùÔà·È" + "ÊÒúº" + "ÊÒúÃó" + "ÊÒúÑ" + "ÊÒúѺ" + "ÊÒúÒ" + "ÊÒþѴ" + "ÊÒþѹ" + "ÊÒþҧ¤ì" + "ÊÒÃÀÒ¾" + "ÊÒÃÀÕ" + "ÊÒÃÇѵÃ" + "ÊÒÃÐ" + "ÊÒÃÐá¹" + "ÊÒÃÑ·¸ì" + "ÊÒÃÑÁÀì" + "ÊÒÃÒ³Õ¡Ã" + "ÊÒÃҹءÃÁ" + "ÊÒÃÕÃÔ¡¸ÒµØ" + "ÊÒÅÐǹ" + "ÊÒÅÔ¡Ò" + "ÊÒÅÔ¹Õ" + "ÊÒÅÕ" + "ÊÒÅÕè" + "ÊÒÇ" + "ÊÒÇ¡" + "ÊÒÇÔ¡Ò" + "ÊÒÇÔµÃ" + "ÊÒÇÔµÃÕ" + "ÊÒʹì" + "ÊÒÊì¹" + "ÊÒËÃèÒÂ" + "ÊÒËÑÊ" + "ÊÒà¡" + "ÊÒà˵Ø" + "ÊÒáËá" + "ÊÒâ·" + "ÊÒâê" + "ÊÒä¶Â" + "ÊÓ" + "ÊÓ¤Ñ" + "ÊӷѺ" + "Êӹǹ" + "Êӹѡ" + "ÊÓ¹Ö¡" + "ÊӺѴÊӹǹ" + "ÊÓ»ÐËÅѧ" + "ÊÓ»Ñé¹" + "ÊÓÁÐËÒ" + "ÊÓÁÐàÅà·àÁÒ" + "ÊÓÁÐ⹤ÃÑÇ" + "ÊÓÃǨ" + "ÊÓÃÇÁ" + "ÊÓÃÇÂ" + "ÊÓÃÇÅ" + "ÊÓÃÍ¡" + "ÊÓÃͧ" + "ÊÓÃѺ" + "ÊÓÃÒ¡" + "ÊÓÃÒ" + "ÊÓÃÔ´" + "ÊÓÅÑ¡" + "ÊÓÅÒ¹" + "ÊÓÅÕ" + "ÊÓÊè͹" + "ÊÓËÃѺ" + "ÊÓËÒ" + "ÊÓÍÍÂ" + "ÊÓÍÒ§" + "ÊÓà¹Ò" + "ÊÓà¹Õ§" + "ÊÓàÀÒ" + "ÊÓàÃÔ§" + "ÊÓàÃç¨" + "ÊÓà˹Õ¡" + "ÊÓàËÃè" + "ÊÓá´§" + "ÊÓáŧ" + "ÊÓâç" + "ÊÔ" + "ÊÔ¡¢Ò" + "ÊÔ¢Ã" + "ÊÔ¤ÒÅ" + "ÊÔ§" + "ÊÔ§¢Ã" + "ÊÔ§¤ÒÃ" + "ÊÔ§¤ÒÅ" + "ÊÔ§¤â»Ãì" + "ÊÔ§¤ì" + "ÊÔ§ÊÒÃÒÊѵÇì" + "Êԧ˹ҷ" + "Êԧ˺ѪÃ" + "ÊÔ§ËÃÒª" + "ÊÔ§ËÅ" + "ÊÔ§ËÒ¤Á" + "ÊÔ§ËÒʹì" + "ÊÔ§Ëì" + "ÊÔ§âµ" + "ÊÔ¨¹ì" + "ÊÔµ" + "ÊÔ¶ÔÅ" + "ÊÔ·¸" + "ÊÔ·¸Ò" + "ÊÔ·¸Òö" + "ÊÔ·¸Ô" + "ÊÔ·¸Ôì" + "ÊÔ¹" + "ÊÔ¹¤éÒ" + "ÊÔ¹¸Ø" + "ÊÔ¹Õ" + "ÊÔ¹à¸ÒÇì" + "ÊÔº" + "ÊÔÁ¾ÅÕ" + "ÊÔÃÔ" + "ÊÔÃÔ¡ÔµÔì" + "ÊÔÅÒ" + "ÊÔÇ" + "ÊÔà¹Ë¡" + "ÊÔà¹ËÒ" + "ÊÔà¹èËÒ" + "ÊÔè§" + "ÊÔèÇ" + "ÊÔé¹" + "ÊÕ" + "ÊÕ¡Ò" + "ÊÕ´Í" + "ÊÕè" + "ÊÖ¡" + "Ê׺" + "Ê×èÍ" + "ÊØ" + "ÊØ¡" + "ÊØ¡¢ì" + "ÊØ¡Ã" + "ÊØ¡ÕéÂÒ¡Õé" + "ÊØ¢" + "ÊØ¢Ð" + "ÊØ¢Ò" + "ÊØ¢ÒÀÔºÒÅ" + "ÊØ¢ÒÃÁ³ì" + "ÊØ¢ÒÇ´Õ" + "ÊØ¢Õ" + "ÊØ¢ØÁ" + "ÊØ¢ØÁÒÅ" + "Êؤµ" + "ÊؤµÔ" + "Êؤ¹¸ÃÊ" + "Êؤ¹¸ì" + "Êؤѹ¸ì" + "Êا¡Ò¡Ã" + "ÊاÊÔ§" + "ÊبÃÔµ" + "Êب˹Õè" + "ÊبÔ" + "Êت¹" + "ÊتҴÒ" + "ÊØ" + "ÊØÒ¡ÒÈ" + "Êس" + "ÊسÔÊÒ" + "ÊØ´" + "ÊØ´Ò" + "Êص" + "ÊصµÐ" + "ÊصÔ" + "ÊØ·¸ÒÇÒÊ" + "ÊØ·¸Ô" + "ÊØ·¸ì" + "ÊØ·Ñȹì" + "ÊظÒ" + "ÊظÕ" + "Êع·Ã" + "Êع·ÃÕ" + "Êع·ÃÕÂÀÒ¾" + "Êع·ÃÕÂÈÒʵÃì" + "ÊعѢ" + "Êعѹ·ì" + "ÊغÃó" + "ÊغԹ" + "ÊؾÃó" + "ÊØÀѤ" + "ÊØÀÒ¾" + "ÊØÀÒÉÔµ" + "ÊØÁ" + "ÊØÁ·ØÁ" + "ÊØÁ¹" + "ÊØÁ¹Ò" + "ÊØÁÒÅÕ" + "ÊØÃÊÕ˹ҷ" + "ÊØÃѵÔ" + "ÊØÃÑÊÇ´Õ" + "ÊØÃÒ" + "ÊØÃÒ§¤¹Ò" + "ÊØÃÒ§¤¹Ò§¤ì" + "ÊØÃÒÃÑ¡Éì" + "ÊØÃÒÅÑÂ" + "ÊØÃÒÉ®Ãì" + "ÊØÃÔ¹·Ãì" + "ÊØÃÔ¡ÒÃ" + "ÊØÃÔ¡ÒÅ" + "ÊØÃÔ¤µÔ" + "ÊØÃÔ¤ÃÒÊ" + "ÊØÃÔ§" + "ÊØÃÔ¹" + "ÊØÃÔÂÁ³±Å" + "ÊØÃÔÂÐ" + "ÊØÃÔÂѹ" + "ÊØÃÔÂÒ" + "ÊØÃÔÂØ»ÃÒ¤Ò" + "ÊØÃÔÂà¤ÃÒÐËì" + "ÊØÃÔ๷Ãì" + "ÊØÃÔàÂÈ" + "ÊØÃÔâÂ" + "ÊØÃÕÂì" + "ÊØÃØèÂÊØÃèÒÂ" + "ÊØÃàÊÕ§" + "ÊØŵèÒ¹" + "ÊØÇÀÒ¾" + "ÊØÇÃó" + "ÊØÇÒ¹" + "ÊØÇÔ·Âì" + "ÊØÇÔ¹ÑÂ" + "ÊØÇÔÁÅ" + "ÊØÊÒ¹" + "ÊØ˹ѵ" + "ÊØËÃèÒÂ" + "ÊØàÁ¸" + "ÊØàÁÃØ" + "ÊØàËÃèÒ" + "ÊØàÍ«" + "ÊØèÁ" + "ÊØéÁ" + "ÊÙ" + "ÊÙ§" + "ÊÙ¨Ô" + "ÊÙ" + "ÊÙ´" + "ÊÙµ" + "ÊÙµÃ" + "ÊÙµÔ" + "ÊÙµÔ¡ÃÃÁ" + "ÊٵԺѵÃ" + "ÊÙµÔÈÒʵÃì" + "ÊÙµÔá¾·Âì" + "ÊÙ·" + "ÊÙº" + "ÊÙÊÕ" + "ÊÙè" + "ÊÙé" + "Êࡵ" + "ÊàµÍÃÔâÍ" + "Êàµç¡" + "Êà¹èËì" + "Ê໡" + "Ê໡µÃÑÁ" + "Ê໹" + "Êà»Ã´ªÕµ" + "Ê᡹" + "Êáŧ" + "ÊâÁÊÃ" + "Êâê" + "ÊäµÅì" + "Êäº" + "ÊäÅ´ì" + "Êè§" + "Êèǹ" + "ÊèÇÂ" + "ÊèÍ" + "Êèͧ" + "Êè͹" + "ÊèÒ" + "ÊèÒ¹" + "ÊèÒÂ" + "ÊèÒËÃÕè" + "ÊèÒàËÅéÒ" + "ÊèÓ" + "Êé¹" + "ÊéÁ" + "ÊéÁ»èÍÂ" + "Êéǧ" + "ÊéÇÁ" + "ÊéÇÂ" + "Êéͧ" + "ÊéÍÁ" + "Ë¡" + "˧" + "˧Êì" + "˧Í" + "˧͡" + "˧ʹ" + "˧͹" + "˧ÍÂ" + "˧ѡ" + "˧Ѻ" + "˧ÒÂ" + "˧Ó" + "˧ԡ" + "˧ԧ" + "˧ÔÁ" + "˧֡" + "˧ا˧ԧ" + "˧ش˧Դ" + "˧غ" + "˧ØèÂ" + "˧èÍÁ" + "˧èÒ§" + "˧èÒÇ" + "ËÔ§" + "ËÔº" + "ËéÒ" + "Ë´" + "Ë·ÑÂ" + "˹" + "˹ǡ" + "˹Ǵ" + "˹Í" + "˹͡" + "˹ͧ" + "˹͹" + "˹ѡ" + "˹ѧ" + "˹ѧÊ×Í" + "˹Ѻ" + "˹Ñè¹" + "˹Ò" + "˹Ҵ" + "˹ҹ" + "˹ÒÁ" + "˹ÒÇ" + "˹Ó" + "˹ÓàÅÕéº" + "˹Õ" + "˹պ" + "˹Õé" + "˹ֺ" + "˹Öè§" + "˹״" + "˹Ø" + "˹ع" + "˹غ" + "˹ØèÁ" + "˹ØèÂ" + "˹Ù" + "˹çÍÂá¹è" + "˹èǧ" + "˹èÇÂ" + "˹èÇ¡Ե" + "˹èÍ" + "˹èÍÂ" + "˹èÒ" + "˹èÒ§" + "˹èÒÂ" + "˹éÒ" + "˹éÒ·Õè" + "ËÁ¡" + "ËÁ´" + "ËÁÇ¡" + "ËÁÇ´" + "ËÁÍ" + "ËÁÍ¡" + "ËÁͧ" + "ËÁ͹" + "ËÁͺ" + "ËÁÍÂ" + "ËÁÑ¡" + "ËÁÑ´" + "ËÁѹ" + "ËÁѺ" + "ËÁÑè¹" + "ËÁÑé¹" + "ËÁÒ" + "ËÁÒ¡" + "ËÁÒ¡ÎÍÊ" + "ËÁÒ§" + "ËÁÒ´" + "ËÁÒÂ" + "ËÁÔè¹" + "ËÁÕ" + "ËÁÕè" + "ËÁÖ¡" + "ËÁ×è¹" + "ËÁØ´" + "ËÁع" + "ËÁغ" + "ËÁغËÁÔº" + "ËÁØèÂ" + "ËÁÙ" + "ËÁÙè" + "ËÁè¹" + "ËÁèͧ" + "ËÁè͹" + "ËÁèÍÁ" + "ËÁèÒ" + "ËÁèÓ" + "ËÁéÍ" + "ËÁéÒÂ" + "Ë¡" + "Ë´" + "ËÂÇ¡" + "ËÂǺ" + "ËÂÍ¡" + "ËÂÍ¡àÍÔ¹" + "ËÂͧ" + "ËÂÍ´" + "ËÂÍÁáËÂÁ" + "ËÂÍÂ" + "ËÂÑ¡" + "ËÂѧ" + "ËÂÑ´" + "ËÂѹ" + "ËÂѺ" + "ËÂÑè§" + "ËÂÒ¡äÂè" + "ËÂÒ´" + "ËÂÒº" + "ËÂÒÁ" + "ËÂÒÇ" + "ËÂÓà»" + "ËÂÔ¡" + "ËÂÔº" + "ËÂÔÁ" + "ËÂÔè§" + "ËÂÕ" + "ËÂØ¡ËÂÔ¡" + "ËÂØ´" + "ËÂغ" + "ËÂØÁËÂÔÁ" + "ËÂØè¹" + "ËÂÙ¡ÂÒ" + "ËÂçͧáËÂç§" + "ËÂè§" + "ËÂèͧ" + "ËÂè͹" + "ËÂèÍÁ" + "ËÂèÍÂ" + "ËÂèÒ" + "ËôÕ" + "ËÃÃÉÒ" + "ËÃÍ" + "ËÃÍ¡" + "ËÃÍÂ" + "ËÃÒ" + "ËÃÔ" + "ËÃÔè§" + "ËÃÕ´" + "ËÃÕè" + "ËÃ×Í" + "ËÃغ" + "ËÃغÃÙè" + "ËÃغËÃÙè" + "ËÃØèÁ" + "ËÃÙ" + "ËÃçÍÁáËÃçÁ" + "ËÄ·ÑÂ" + "ËÄËÃÃÉì" + "ËÄâË´" + "ËÅ" + "Ëŧ" + "ËÅ´" + "ËŹ" + "Ëź" + "ËÅǧ" + "ËÅÇÁ" + "ËÅÍ" + "ËÅÍ¡" + "ËÅÍ´" + "ËÅ͹" + "ËÅÍÁ" + "ËÅÐ" + "ËÅÑ¡" + "ËÅѧ" + "ËÅÑ´" + "ËÅѺ" + "ËÅÑÇ" + "ËÅÑè§" + "ËÅÑè¹" + "ËÅÒ" + "ËÅÒ¡" + "ËÅÒ¹" + "ËÅÒº" + "ËÅÒÁ" + "ËÅÒÂ" + "ËÅÒÇ" + "ËÅÔ¡" + "ËÅÔÁ" + "ËÅÔÇ" + "ËÅÔèÇ" + "ËÅÕ" + "ËÅÕ¡" + "ËÅÕÎ×éÍ" + "ËÅ׺" + "ËÅØ¡ËÅÔ¡" + "ËÅØ´" + "ËÅع" + "ËÅغ" + "ËÅØÁ" + "ËÅÙè" + "ËÅè¹" + "ËÅèÁ" + "ËÅèÍ" + "ËÅè͹" + "ËÅèÐ" + "ËÅéÒ" + "Ëǧ" + "ËÇ´" + "Ëǹ" + "ËÇÂ" + "ËÇÍ" + "ËÇÍ´" + "ËÇÐ" + "ËÇѧ" + "ËÇÑ´" + "ËÇÑÇ" + "ËÇÑÇÃèÍ" + "ËÇÑè¹" + "ËÇÒ" + "ËÇÒ´" + "ËÇÒ¹" + "ËÇÒÁ" + "ËÇÒÂ" + "ËÇÓ" + "ËÇÔ´" + "ËÇÔÇ" + "ËÇÕ" + "ËÇÕ´" + "ËÇÕè" + "ËÇ×Í" + "ËÇØ´ËÇÔ´" + "ËÇØÁ" + "ËÇÙ´" + "ËÇçÍÂ" + "ËÇèÒ" + "ËÇèÒ§" + "ËÇèÒ¹" + "ËÇéÒ" + "ËÍ" + "ËÍ¡" + "Ëͧ" + "Ë͹" + "Ëͺ" + "ËÍÁ" + "ËÍÂ" + "ËÐáá" + "ËÑ¡" + "ËÑ´" + "Ëѵ¶¡ÃÃÁ" + "Ëѵ¶¡ÒÃ" + "Ëѵ¶¡Ô¨" + "Ëѵ¶ºÒÊ" + "Ëѵ¶ÈÔÅ»ì" + "Ëѵ¶ÈÖ¡ÉÒ" + "Ëѵ¶Õ" + "Ëѵ¶ì" + "Ëѹ" + "ËѺ" + "ËÑÇ" + "ËÑǺء" + "ËÑÇ˹éÒ" + "ËÑÇàÃÒÐ" + "ËÑÊ" + "ËÑè¹" + "ËÑé¹" + "ËÒ" + "ËÒ¡" + "ËÒ§" + "ËÒ" + "ËÒ´" + "ËÒ¹" + "ËÒº" + "ËÒÁ" + "ËÒÂ" + "ËÒ¹Ð" + "ËÒÃ" + "ËÒÃ×Í" + "ËÒÇ" + "ËÓ" + "ËÔ§ÊÒ" + "ËÔ§ËéÍÂ" + "ËÔ´" + "ËÔ¹" + "ËÔÁÐ" + "ËÔÁÒÅÑÂ" + "ËÔÃÑ" + "ËÔÃÔ" + "ËÔÇ" + "ËÔè§ËéÍÂ" + "ËÔé§" + "ËÔéÇ" + "ËÕ¹ÂÒ¹" + "ËÕº" + "ËÖ" + "ËÖ§" + "ËÖè§" + "Ë×´" + "Ë×¹" + "Ë×Í" + "Ë×è¹" + "Ë×éÍ" + "Ëا" + "Ëع" + "Ëغ" + "ËØÂÎÒ" + "ËØè¹" + "ËØé¹" + "ËØéÁ" + "ËÙ" + "ËÙ¡" + "ËÙ´" + "ËÙè" + "Ëâ´Á" + "ËèÁ" + "Ëèǧ" + "ËèÇÂ" + "ËèÍ" + "Ëè͹" + "ËèÒ" + "ËèÒ§" + "ËèÒ¹" + "ËèÒÁ" + "Ëéǧ" + "Ëéǹ" + "ËéÇÂ" + "ËéÍ" + "Ëéͧ" + "ËéÍÁ" + "ËéÍÂ" + "ËéÒ" + "ËéÒ§" + "ËéÒÁ" + "ËéÒÇ" + "ËéÓ" + "Í¡" + "Í¡µÑصÒ" + "Í¡µÑÙ" + "Í¡¹ÔÉ°ì" + "͡óÕÂì" + "Í¡ÃÃÁ¡ÃÔÂÒ" + "Í¡ØÈÅ" + "ͤµÔ" + "ͤҸ" + "ͧ¡ì" + "ͧ¤ªÒµÔ" + "ͧ¤Á¹µÃÕ" + "ͧ¤ÁÃÃÉ" + "ͧ¤ÃÑ¡Éì" + "ͧ¤ÇÔ·ÂÒ" + "ͧ¤Ò¾Â¾" + "ͧ¤ØÅ" + "ͧ¤ØÅÕ" + "ͧ¤ì" + "ͧ¤ì¡Ã" + "ͧ¤ì¡ÒÃ" + "ͧÈÒ" + "ͧÍÒ¨" + "ͧØè¹" + "ͨÅÒ" + "ͨԵµÔ" + "ͨԹµÒ" + "ͨԹäµÂ" + "ͨÔÃÐ" + "ͪ" + "ͪÒ" + "ͪԹ" + "ͪԹÕ" + "ͪÔÃ" + "ͯÇÕ" + "ͳÔ" + "ͳØ" + "ͳÙ" + "Í´" + "Í´Ô¶Õ" + "Í´ÔÈÃ" + "Í´ÔÈÇÃ" + "Í´ÔÈÑÂ" + "Í´Ôà·¾" + "Í´Ôàá" + "Í´Õµ" + "Í´ØÅ" + "Í´ØÅÂ" + "Í´ØÅÂì" + "͵Ԫҵ" + "͵ÔÁÒ¹Ð" + "͵ÔÃÒª" + "͵ÔÊÒÃ" + "͵Ôàá" + "Í·Ô¹¹Ò·Ò¹" + "͸ÃÃÁ" + "͸ԡÁÒÊ" + "͸ԡóì" + "͸ԡÇÒÃ" + "͸ԡÊØ÷Թ" + "͸ԡÒÃ" + "͸ԤÁ" + "͸ԯ°Ò¹" + "͸Ժ´Õ" + "͸ԺÒÂ" + "͸Ի" + "͸ԻäµÂ" + "͸ÔÃÒª" + "͸ÔÉ°Ò¹" + "͸֡" + "͹§¤³Ð" + "͹§¤àÅ¢Ò" + "͹§¤ì" + "͹§àÅ¢" + "͹¸¡ÒÃ" + "͹ѵµÒ" + "͹ѹµì" + "͹Ҥµ" + "͹ҤÒÁÕ" + "͹ҨÒÃ" + "͹Ҷ" + "͹ҶÒ" + "͹ҷÃ" + "͹ҸԻäµÂ" + "͹ÒÁÑÂ" + "͹Òê¹" + "͹ÒøÃÃÁ" + "͹ÒÃÂÐ" + "͹ÒÅÑÂ" + "͹Ԩ" + "͹Ԩ¨Ñ§" + "͹Ԩ¨Ò" + "͹ԯ°ÒÃÁÂì" + "͹ÔÂÁ" + "͹Öè§" + "͹Ø" + "͹ءÃ" + "͹ءÃÁ" + "͹ءÃÃÁ¡ÒÃ" + "͹ءҪҴ" + "͹ءÒÃ" + "͹ءÙÅ" + "͹بÃ" + "͹ت¹" + "͹تÒ" + "͹تҵ" + "͹تԵ" + "͹ØÒµ" + "͹ØÒâµµØÅÒ¡ÒÃ" + "͹طԹ" + "͹غ·" + "͹غÒÅ" + "͹ػÃÔÒ" + "͹ؾ§Èì" + "͹ؾѹ¸ì" + "͹ØÀÃÃÂÒ" + "͹ØÀÃÔÂÒ" + "͹ØÀÒ¤" + "͹ØÁѵÔ" + "͹ØÁÒµÃÒ" + "͹ØÁÒ¹" + "͹ØÁÙÅ" + "͹ØÃѡɹÔÂÁ" + "͹ØÃÑ¡Éì" + "͹ØÃÒª" + "͹ØÃÙ»" + "͹ØǧÈì" + "͹ØÇѵ" + "͹ØÈÒÊ¡" + "͹ØÈÒʵÃÒ¨ÒÃÂì" + "͹ØÈÒʹì" + "͹ØÈÔɯì" + "͹ØʵÔ" + "͹Øʹ¸Ô" + "͹ØÊÃ" + "͹ØÊóì" + "͹ØÊÑÒ" + "͹ØÊÑÂ" + "͹ØÊÒÇÃÕÂì" + "͹ØÊÒʹÕ" + "͹Øà¤ÃÒÐËì" + "͹Øà¶ÃÐ" + "͹ØâÁ·¹Ò" + "͹Øâ¤" + "͹ØâÅÁ" + "ͺ" + "ͺÒÂ" + "ͺÒÂÀÙÁÔ" + "ͺÒÂÁØ¢" + "Í»Á§¤Å" + ";¾" + ";ÒÃìµàÁ¹µì" + "ÍÀÑÂ" + "ÍÀÔª¹" + "ÍÀÔªÒµ" + "ÍÀÔÒ" + "ÍÀÔ¸ÃÃÁ" + "ÍÀÔ¸Ò¹" + "ÍÀԹѹ·ì" + "ÍÀÔ¹ÑÂ" + "ÍÀÔ¹ÔËÒÃ" + "ÍÀÔºÒÅ" + "ÍÀÔ»ÃѪÒ" + "ÍÀÔ»ÃÒÂ" + "ÍÀÔÁËÒÍÓ¹Ò¨" + "ÍÀÔÁÒ¹Ð" + "ÍÀÔÁØ¢" + "ÍÀÔôÕ" + "ÍÀÔÃÁÂì" + "ÍÀÔÃÑ¡Éì" + "ÍÀÔÅÑ¡¢ÔµÊÁÑÂ" + "ÍÀÔÇѹ·ì" + "ÍÀÔÇÒ·¹ì" + "ÍÀÔÊÁÑÂ" + "ÍÀÔÊÁÒ¨ÒÃ" + "ÍÀÔÊÁ⾸Ô" + "ÍÀÔÊÑÁ⾸Ô" + "ÍÀÔÊÔ·¸Ôì" + "ÍÀÔàÅ»¹ì" + "ÍÀÔàÉ¡" + "ÍÀÔä¸Â" + "ÍÁ" + "ÍÁµÐ" + "ÍÁ¹ØÉÂì" + "ÍÁÃ" + "ÍÁÃÒ" + "ÍÁÃÒÇ´Õ" + "ÍÁÃÔ¹·Ãì" + "ÍÁĵ" + "ÍÁĵÂÙ" + "ÍÁÔµÃ" + "ÍÁàÃÈ" + "ÍÂÒ¡" + "ÍÂظÂÒ" + "ÍÂÙè" + "ÍÂèÒ" + "ÍÂèÒ§" + "ÍÃ" + "ÍêÃ" + "ÍÃó¾" + "ÍÃö" + "ÍÃöҸԺÒÂ" + "ÍÃËÐ" + "ÍÃËѧ" + "ÍÃËѹµì" + "ÍÃÑ" + "ÍÃÔ" + "ÍÃÔºؤ¤Å" + "ÍÃÔÂÐ" + "ÍÃÔÊâµàµÔÅ" + "ÍÃس" + "ÍÃØâ³·ÑÂ" + "ÍÃä·" + "ÍÃèÍÂ" + "ÍÃèÒÁ" + "Íŧ¡µ" + "Íŧ¡Ã³ì" + "Íŧ¡ÒÃ" + "ÍÅǹ" + "ÍÅËÁèÒ¹" + "ÍÅѧ¡ÒÃ" + "ÍÅѪªÕ" + "ÍÅÖ觩Öè§" + "ÍÅàǧ" + "ÍÅèͧ©èͧ" + "ÍÅèÒ§©èÒ§" + "ÍÇ¡ÒÈ" + "ÍÇ´" + "ÍǵÒÃ" + "Íǹ" + "ÍǺ" + "ÍÇÁ§¤Å" + "ÍÇÂ" + "ÍÇÅ" + "ÍÇÊÒ¹" + "ÍÇËÒÃ" + "ÍÇÑÂÇÐ" + "ÍÇÔªªÒ" + "Íʧä¢Â" + "Íʹպҵ" + "ÍÊÁ¡ÒÃ" + "ÍÊÁÁÒµÃ" + "ÍÊþÔÉ" + "ÍÊѧËÒÃÔÁ·ÃѾÂì" + "ÍÊÑÕ" + "ÍÊÑá´ËÇÒ" + "ÍÊѵÂì" + "ÍÊÕµÔ" + "ÍÊبÔ" + "ÍÊعպҵ" + "ÍÊØáÒÂ" + "ÍÊØÃÕ" + "ÍÊÙÃ" + "ÍËѧ¡ÒÃ" + "ÍËÔ§ÊÒ" + "ÍËÔÇÒµ¡âä" + "ÍÍ" + "ÍÍ¡" + "ÍÍ¡«Ôਹ" + "ÍÍ¡«Ôപѹ" + "ÍÍ¡Ò" + "ÍÍ¡ä«´ì" + "ÍÍ´" + "ÍÍ´ÔâÍ" + "Í͹ªÍÃì" + "Í͹«Í¹" + "Í͹«ì" + "Í͹äŹì" + "ÍÍ»ªÑ¹" + "ÍÍ»à¨ç¡µì" + "ÍÍ¿" + "ÍÍ¿ªÍÃì" + "ÍÍ¿¿ÔÈ" + "ÍÍÁ" + "ÍÍÃÒà¤ÔÅ" + "ÍÍÃì᡹" + "ÍÍÊ" + "ÍÍÊàµÃàÅÕÂ" + "ÍФÃéÒÇ" + "ÍдÃÕ¹ÒÅÔ¹" + "ÍеÍÁ" + "ÍÐÃéÒÍÃèÒÁ" + "ÍÐÅØèÁÍÅèÇÂ" + "ÍÐÅØéÁÍÅèÇÂ" + "ÍÐÅÙÁÔà¹ÕÂÁ" + "ÍÐà¤×éÍ" + "ÍÐà«·ÔÅÕ¹" + "ÍÐäÃ" + "ÍÐäËÅè" + "ÍÑ¡" + "ÍÑ¡¢" + "ÍÑ¡¢ÃÇÔ¸Õ" + "ÍÑ¡¢ÃÇԺѵÔ" + "ÍÑ¡¢ÃÊÁÑÂ" + "ÍÑ¡¢ÃÐ" + "ÍÑ¡ÉÃ" + "ÍÑ¡ÉÐ" + "ÍÑ¡àʺ" + "ÍÑ¡â¢" + "ÍѤ¤Ð" + "ÍѤ¤Õ" + "ÍѤ¹Õ" + "ÍѤêÒÂÒ" + "ÍѤÃÁàËÊÕ" + "ÍѤÃÃÒª·Ùµ" + "Íѧ" + "Íѧ¡ÄÉ" + "Íѧ¡ÐÅا" + "Íѧ¤³Ò" + "Íѧ¤ÒÃ" + "Íѧ¤ÒÊ" + "ÍѧʵÃÍÁ" + "ÍѧʹÒ" + "ÍѨ¡ÅѺ" + "ÍѨ¨Ñ¹µì" + "ÍѨ¨ÑÂ" + "ÍѨ¨Ô" + "ÍѨ©ÃÒ" + "ÍѨ©ÃÔºؤ¤Å" + "ÍѨ©ÃÔÂÐ" + "ÍѨ¹Ò" + "ÍѪ¬Ò" + "ÍѪ¬ÒÊÑÂ" + "ÍѪ¹Ð" + "ÍѪÅÕ" + "ÍѪѹ" + "ÍÑ»ÃСÒÈ" + "ÍÑÁ³Õ" + "ÍÑÁÑÐ" + "ÍÑÃÙ»" + "ÍÑàªÔ" + "Íѯ" + "Íѯ°Ð" + "ÍÑ°" + "ÍÑ°ÌÊ" + "ÍÑ°Ô" + "ÍѲ¨Ñ¹·Ãì" + "ÍѲÀÒ¤" + "ÍѲÁ³±Å" + "ÍѲÁÒÊ" + "ÍѲÃѵµÔ" + "Íѳ±ªÐ" + "Íѳ±Ð" + "Íѳ±Ò¡ÒÃ" + "ÍÑ´" + "Íѵ¤Ñ´" + "ÍѵªÕÇ»ÃÐÇѵÔ" + "ÍѵµÐ" + "ÍѵµÒ" + "ÍѵµÒ¸Ô»äµÂ" + "Íѵ¹ÑÂ" + "ÍѵÀÒ¾" + "ÍѵÃÒ" + "ÍѵÇÔ¹ÔºÒµ¡ÃÃÁ" + "Íѵâ¹ÁѵÔ" + "ÍѸÂÒÈÑÂ" + "Íѹ" + "Íѹ´Ñº" + "ÍѹµÃ¸Ò¹" + "ÍѹµÃÒÂ" + "Íѹ¸¡ÒÃ" + "Íѹ¸¾ÒÅ" + "Íѹà´ÍÃì" + "ÍѺ" + "ÍÑ»ÀÒ¤Âì" + "ÍÑ»Á§¤Å" + "ÍÑ»ÂÈ" + "ÍÑ»ÃÐÁÒ³" + "ÍÑ»ÃÒªÑÂ" + "ÍÑ»ÃÕÂì" + "ÍÑ»Åѡɳì" + "ÍÑ»ÊÃ" + "ÍÑ»à»ËÔ" + "ÍѾà¡Ã´" + "ÍѾവ" + "ÍѾഷ" + "ÍÑ¿" + "ÍÑÁ¾Ã" + "ÍÑÁ¾Ä¡Éì" + "ÍÑÁ¾Ò" + "ÍÑÁ¾Òµ" + "ÍÑÁ¾Øª" + "ÍÑÁÊàµÍÃì´ÑÁ" + "ÍÑ¡Ò" + "ÍÑ¡ÒÃ" + "ÍÑÂÂÔ¡Ò" + "ÍÑŨÕàÃÕÂ" + "ÍÑźÑéÁ" + "ÍÑźÒà¹ÕÂ" + "ÍÑÅàºà¹ÕÂ" + "ÍÑȨÃÃÂì" + "ÍÑÈÇÔ¹" + "ÍÑÈÇÔ¹Õ" + "ÍÑÈà¨ÃÕÂì" + "ÍÑÉ®ÒÂØ·" + "ÍÑÉ®ÒÇظ" + "ÍÑÊ´§" + "ÍÑÊ´§¤µ" + "ÍÑÊ´Ã" + "ÍÑʹÕ" + "ÍÑÊÊÐ" + "ÍÑÊÊÒÊÐ" + "ÍÑÊÊØ" + "ÍÑé¡" + "ÍÑé§ÂÕè" + "ÍÑé§âÅè" + "ÍÑé¹" + "ÍÑê¡" + "ÍÑë¹" + "ÍÒ" + "ÍÒ¡Ã" + "ÍÒ¡Ñ»¡ÔÃÔÂÒ" + "ÍÒ¡ÒÃ" + "ÍÒ¡ÒÈ" + "ÍÒ¡ÙÅ" + "ÍÒ¡éÒ" + "ÍÒ¢ÂÒ¹" + "ÍÒ¤Á" + "ÍҤѹµØ¡Ð" + "ÍÒ¤ÒÃ" + "ÍÒ¤à¹Âì" + "ÍÒ¦Òµ" + "ÍÒ§¢¹Ò§" + "ÍÒ¨" + "ÍÒ¨Á" + "ÍÒ¨ÃÔÂÇѵÃ" + "ÍÒ¨Ò´" + "ÍÒ¨ÒÃÂì" + "ÍÒ¨Ô³" + "ÍÒªÒ" + "ÍÒªÒ" + "ÍÒªÒä¹Â" + "ÍÒªÕ¾" + "ÍÒªÕÇÈÖ¡ÉÒ" + "ÍÒªÕÇÐ" + "ÍÒÒ" + "ÍҳѵÔ" + "ÍÒ³Ò" + "ÍÒ´" + "ÍÒ´ÙÃ" + "ÍÒµÁÀÒ¾" + "ÍÒµÁÒ" + "ÍÒ¶Ãþ³ì" + "ÍÒ¶Ãþì" + "ÍÒ·Ã" + "ÍÒ·Ô" + "ÍÒ·ÔµÂì" + "ÍÒ¹" + "ÍÒ¹ÔʧÊì" + "ÍÒ¹ØÀÒ¾" + "ÍÒº" + "ÍҺѵÔ" + "ÍÒ¾Ò¸" + "ÍÒ¿¡Ò¹Ôʶҹ" + "ÍÒ¿ÃÔ¡Ò" + "ÍÒÀóì" + "ÍÒÀѾ" + "ÍÒÀÒ" + "ÍÒÁÔÊ" + "ÍÒÂ" + "ÍÒµ¹Ð" + "ÍÒÂÑ´" + "ÍÒÂØ" + "ÍÒÂØÃÈÒʵÃì" + "ÍÒÂØÃàǪ" + "ÍÒÂØÃá¾·Âì" + "ÍÒúԤ" + "ÍÒÃÁ³ì" + "ÍÒê¹" + "ÍÒêҵÔ" + "ÍÒøÃÃÁ" + "ÍÒûÃÐà·È" + "ÍÒÃÂÐ" + "ÍÒÃÂѹ" + "ÍÒÃÑ¡¢Ò" + "ÍÒÃÑ¡Éì" + "ÍÒÃÑÁÀ¡¶Ò" + "ÍÒÃÑÁÀº·" + "ÍÒÃÒ¸¹Ò" + "ÍÒÃÒÁ" + "ÍÒÃÒÁÔ¡" + "ÍÒÃÒàºÕÂ" + "ÍÒÃÕ" + "ÍÒÃ줵ԡ" + "ÍÒÃìૹÍÅ" + "ÍÒÅ»¹Ð" + "ÍÒÅÐÇÒ´" + "ÍÒÅѡɳì" + "ÍÒÅÑÂ" + "ÍÒÅÑÇ" + "ÍÒÇ" + "ÍÒÇóì" + "ÍÒÇÒÊ" + "ÍÒÇÒËÐ" + "ÍÒÇظ" + "ÍÒÇØâÊ" + "ÍÒÇì" + "ÍÒÈÃÁ" + "ÍÒÈÑÂ" + "ÍÒÈÔÃÇÒ·" + "ÍÒʹÐ" + "ÍÒʹì" + "ÍÒÊÑ" + "ÍÒÊÒ" + "ÍÒÊÒÌ˺٪Ò" + "ÍÒÊÙÃ" + "ÍÒËÃѺ" + "ÍÒËÒÃ" + "ÍÒà¨Õ¹" + "ÍÒà«ÕÂ" + "ÍÒàÃàºÕÂ" + "ÍÒàǤ" + "ÍÒàÇÈ" + "ÍÒàÈÕÂÃÇÒ·" + "ÍÓ" + "ÍÓ¹ÇÂ" + "ÍÓ¹Ò¨" + "ÍӾйÓ" + "ÍӾѹ" + "ÍÓÁĵ" + "ÍÓÁËÔµ" + "ÍÓÁÒµÂì" + "ÍÓÅÒ" + "ÍÓàÀÍ" + "ÍÓä¾" + "ÍÔ§" + "ÍÔ§¤ì" + "ÍÔ§¤ìà¨çµ" + "ÍÔ¨©Ò" + "Íԩѹ" + "ÍÔ¯°ÒÃÁ³ì" + "ÍÔ°" + "ÍÔ´" + "ÍÔµ¶Õ" + "ÍÔµÒÅÕ" + "ÍÔµÒàÅÕ¹" + "ÍÔ·¸Ô" + "ÍÔ¹" + "ÍÔ¹«ÙÅÔ¹" + "ÍÔ¹·¹ÔÅ" + "ÍÔ¹·¼ÅÑÁ" + "ÍÔ¹·Ã¸¹Ù" + "ÍÔ¹·ÃǧÈì" + "ÍÔ¹·ÃÇÔàªÕÂÃ" + "ÍÔ¹·ÃÒ" + "ÍÔ¹·ÃÒà¹çµ" + "ÍÔ¹·ÃÕ" + "ÍÔ¹·ÃÕÂÊѧÇÃ" + "ÍÔ¹·ÃÕÂì" + "ÍÔ¹·Ãì" + "ÍÔ¹¾Øµ" + "ÍÔ¹¿ÃÒàô" + "ÍÔ¹¿ÍÃìÁÔ¡" + "ÍԹѧ" + "ÍÔ¹à´ÕÂ" + "ÍÔ¹à´Õ¹ᴧ" + "ÍÔ¹àµÍÃì" + "ÍÔ¹àµÍÃìà¹çµ" + "ÍÔ¹àµÍÃìà¿«" + "ÍÔ¹à·Å" + "ÍÔ¹à·ÍÃì๵" + "ÍÔ¹à·ÍÃìà¹çµ" + "ÍÔ¹à·ÍÃìà¿«" + "ÍԹⴹÔà«ÕÂ" + "ÍԹⴹÕà«ÕÂ" + "ÍÔ¹â´à«ÕÂ" + "ÍÔÁ¾ÍÃìµ" + "ÍÔÁàÁ¨" + "ÍÔÂÔ»µì" + "ÍÔÃÔÂÒº¶" + "ÍÔÈÇÃ" + "ÍÔɯÕ" + "ÍÔɯì" + "ÍÔÊ" + "ÍÔʵÃÕ" + "ÍÔÊÃÀÒ¾" + "ÍÔÊÃÐ" + "ÍÔÊÃÒàÍÅ" + "ÍÔÊÃÔÂÂÈ" + "ÍÔÊÃÔÂÐ" + "ÍÔÊÃÔÂÒÀóì" + "ÍÔÊÊÒ" + "ÍÔÊÔ" + "ÍÔÊÕ" + "ÍÔËÁèÒÁ" + "ÍÔËÃèÒ¹" + "ÍÔËÅÑ¡ÍÔàËÅ×èÍ" + "ÍÔàÅ硵Ã͹" + "ÍÔàÅç¡·Ã͹ԡÊì" + "ÍÔàÅç¡â·¹" + "ÍÔèÁ" + "ÍÕ" + "ÍÕ¡" + "ÍÕ¡Ò" + "ÍÕ¡éÍ" + "ÍÕ¤ÍÁàÁÔÃì«" + "ÍչاµØ§¹Ñ§" + "ÍÕÁÙ" + "ÍÕÂÔ»µì" + "ÍÕÅØè©ØÂá©¡" + "ÍÕÅØéÁ" + "ÍÕÊÒ¹" + "ÍÕÊØ¡ÍÕãÊ" + "ÍÕËÃͺ" + "ÍÕËÅÑ¡ÍÔàËÅ×èÍ" + "ÍÕËÅÕ" + "ÍÕàµéÍ" + "ÍÕà·ÍÃì" + "ÍÕàÁÅì" + "ÍÕàËÅÐà¢Ð¢Ð" + "ÍÕâËÅ¡â¢Å¡à¢Å¡" + "ÍÕê´" + "ÍÕë" + "ÍÖ" + "ÍÖ¡" + "ÍÖ¡·Ö¡" + "ÍÖ¡ÍÑ¡" + "ÍÖ§" + "ÍÖ§ÁÕè" + "ÍÖ§ÍÅ" + "ÍÖ´" + "ÍÖè§" + "ÍÖé§" + "ÍÖé´·Öè´" + "ÍÖê¡" + "Í×´" + "Í×Í" + "Í×è¹" + "Í×é¹" + "Í×éÍ" + "ÍØ" + "ÍØ¡" + "ÍØ¡¡ÒºÒµ" + "ÍØ¡Äɯì" + "Íب¨ÒÃÐ" + "ÍبҴ" + "ÍبÒÃÁÃä" + "Íب੷" + "ÍتØ" + "Íد°Ò¡ÒÃ" + "ÍسËÀÙÁÔ" + "ÍسËÐ" + "ÍسËÒ¡ÒÃ" + "ÍسËÔÊ" + "ÍسÒ" + "ÍØ´" + "ÍØ´Á" + "ÍØ´Ã" + "Íش˹ع" + "Íص¾Ô´" + "ÍصôԵ¶ì" + "ÍصÃÔ" + "ÍصÅØ´" + "ÍصÊÒË¡ÃÃÁ" + "ÍصÊÒËÐ" + "ÍصÊèÒËì" + "ÍصØ" + "ÍØ·¡" + "ÍØ·¸Ã³ì" + "ÍØ·¸Ñ¨" + "ÍØ·ÂÒ¹" + "ÍØ·Ã" + "ÍØ·ÅØÁ" + "ÍطѪ" + "ÍØ·ÑÂ" + "ÍØ·Ò¹" + "ÍØ·ÒÃ" + "ÍØ·ÒËóì" + "ÍØ·ÔÈ" + "ÍØ·ØÁ¾Ã" + "ÍظѨ" + "Íغ" + "ÍغÅ" + "ÍغÍÔº" + "ÍغÐ" + "ÍغѵÔ" + "Íغҷ" + "ÍغҷÇì" + "ÍغÒÂ" + "ÍغÒÊ¡" + "ÍغÒÊÔ¡Ò" + "ÍغêÐ" + "ÍØ»" + "ÍØ»¡Ã³ì" + "ÍØ»¡ÃÁ" + "ÍØ»¡ÒÃÐ" + "ÍØ»¡ÒÃÕ" + "ÍØ»¶ÑÁÀ¡" + "ÍØ»¶ÑÁÀì" + "ÍØ»·Ò¹" + "ÍØ»·Ùµ" + "ÍØ»¹ÑÂ" + "ÍØ»¹Ò¡" + "ÍØ»¹ÔÊÑÂ" + "ÍØ»ÁÒ" + "ÍØ»ÁÒ¹" + "ÍØ»ÃÒª" + "Íػʧ¤ì" + "ÍØ»ÊÁº·" + "ÍØ»ÊÃä" + "ÍØ»ÊÑÁ»·Ò" + "ÍػѪ¬ÒÂÐ" + "ÍػѪ¬ÒÂì" + "Íػѯ°Ò¡" + "Íػѯ°Ò¹Ð" + "ÍػѷÇѹµÃÒÂ" + "ÍػѷÇà˵Ø" + "Íػҷҹ" + "ÍØ»âÀ¤" + "ÍØ»â¤" + "ÍØ»âÅ¡¹ì" + "ÍØ»äÁÂ" + "ÍØÂ" + "ÍØÃÐ" + "ÍØÃѧÍصѧ" + "ÍØÃÒ" + "ÍØÃØ" + "ÍØÃاÍصѧ" + "ÍØɳÕÂì" + "ÍØÉÒ" + "ÍØÊÒ" + "ÍØÊØ" + "ÍØມ¢Ò" + "ÍØàËÁè" + "ÍØáÇé" + "ÍØâ¦É" + "ÍØâºÊ¶" + "ÍØâÁ§¤ì" + "ÍØäÃ" + "ÍØè¹" + "ÍØèÂ" + "ÍØé§" + "ÍØéÁ" + "ÍØéÂ" + "ÍØêÂ" + "ÍÙ" + "ÍÙ°" + "ÍÙ´" + "ÍÙÁ" + "ÍÙÃØ" + "ÍÙè" + "ÍÙé" + "ÍÙéÍÕé" + "ÍÙëÍÕë" + "Íà¨Å¡" + "Íà¨ÅÐ" + "Í๡" + "Í๡¤Ø³" + "Í๨͹Ҷ" + "Íà»ËÔ" + "ÍàÁ" + "ÍàÁÃԡѹ" + "ÍàÁÃÔ¡Ò" + "ÍàǨÕ" + "Íá´»àµÍÃì" + "Íâ¦ÉÐ" + "Íâ³·ÑÂ" + "Í⹪Ò" + "Íâ¹´Òµ" + "ÍâÅËÐ" + "ÍâÈ¡" + "ÍâËÊÔ" + "Íèͧ" + "Íè͹" + "ÍèÍÂ" + "ÍèÒ" + "ÍèÒ§" + "ÍèÒ¹" + "ÍèÒÇ" + "ÍèÓ" + "Íé¹" + "ÍéÇ¡" + "Íéǹ" + "ÍéÍ" + "Íé͹" + "Íé͹áÍé¹" + "ÍéÍÁ" + "ÍéÍÂ" + "ÍéÍÂÊéÍÂ" + "ÍéÍÂÍÔè§" + "ÍéÒ" + "ÍéÒ§" + "ÍéÒÂ" + "ÍéÒÇ" + "ÍéÓÍÖé§" + "ÍêÍ´" + "ÍêÐ" + "ÍëÍ" + "Íëͧ" + "ÍëÍÂ" + "Ρà¡Õé¹" + "Îǧ«ØéÂ" + "Îǹ" + "ÎǺ" + "ÎÍ¡¡Õé" + "ÎÍ´" + "Î͹â¹ÅÙÅÙ" + "ÎÍÃìâÁ¹" + "ÎÍÅѹ´Ò" + "ÎÍÅᏴì" + "ÎÐ" + "ÎÑ¡" + "Îѧ¡ÒÃÕ" + "ÎÑè¹" + "ÎÑéÇ" + "ÎÒ" + "ÎÒÁ" + "ÎÒÃì´´Ôʤì" + "ÎÒÃì´áÇÃì" + "ÎÒàÃçÁ" + "ÎÒâÅÇÕ¹" + "ÎÔµ" + "ÎÔ¹´Ù" + "ÎÔ»â»â»àµÁÑÊ" + "ÎÔÊ·ÕàÃÕÂ" + "ÎÕàÅÕÂÁ" + "ÎÕâÃè" + "ÎÖ" + "ÎÖ¡" + "ÎÖ´" + "ÎÖ´ÎÑ´" + "ÎÖÁ" + "ÎÖÂ" + "ÎÖèÁ" + "Î×´ÎÒ´" + "Î×Í" + "Î×èÍ" + "Î×éÍ" + "Îغ" + "ÎØÂàÅÎØÂ" + "ÎÙ¡" + "ÎÙÁ" + "ÎÙé" + "ÎèÍ" + "Îèͧ¡§" + "Îèͧàµé" + "ÎéÍ" + "ÎéÒ" + "à¡" + "à¡¡ÁÐàËá" + "ࡨÔÍÒ¨ÒÃÂì" + "ࡳ±ì" + "à¡´" + "ࡵØ" + "ࡹ" + "à¡Á" + "à¡ÁÊì" + "à¡Â" + "à¡Ã§" + "à¡Ã´" + "à¡ÃÍÐ" + "à¡ÃÒÐ" + "à¡ÃÔ¡" + "à¡ÃÔè¹" + "à¡ÃÕ¡" + "à¡ÃÕ§" + "à¡ÃÕ¹" + "à¡ÃÕº" + "à¡ÃÕÂÁ" + "à¡ÃÕÂÇ" + "à¡ÃÕéÂÇ" + "à¡Ãç§" + "à¡Ãç´" + "à¡ÃèÍ" + "à¡Å" + "à¡ÅÍ" + "à¡ÅÒ" + "à¡ÅÕ§" + "à¡ÅÕ´" + "à¡ÅÕÂÇ" + "à¡ÅÕèÂ" + "à¡ÅÕéÂ" + "à¡ÅÕé§" + "à¡Å×Í" + "à¡Å×Í¡" + "à¡Å×è͹" + "à¡Å×éÍ" + "à¡Å×é͹" + "à¡Åç´" + "à¡ÅéÒ" + "à¡ÇÕ¹" + "à¡È" + "à¡ÈÒ" + "à¡ÈÔ¹Õ" + "à¡ÉµÃ" + "à¡ÉµÃ¡Ã" + "à¡ÉµÃ¡ÃÃÁ" + "à¡ÉÁ" + "à¡ÉÕ³" + "à¡ÉÕ¹" + "à¡ÊÃ" + "à¡Í" + "à¡ÍÃì" + "à¡ÍÔªÒ" + "à¡Ð" + "à¡Ð¡Ð" + "à¡Ò" + "à¡Òµì" + "à¡Ò·Ñ³±ì" + "à¡ÒÅÑ´" + "à¡ÒËÅÕ" + "à¡ÒÐ" + "à¡ÒàËÅÒ" + "à¡Ô§" + "à¡Ô´" + "à¡Ô¹" + "à¡ÕÂ" + "à¡Õ§" + "à¡Õ¨" + "à¡Õ´" + "à¡Õ¹" + "à¡ÕÂõÔ" + "à¡ÕÂõԤس" + "à¡ÕÂõԹÔÂÁ" + "à¡ÕÂõԻÃÐÇѵÔ" + "à¡ÕÂõÔÀÙÁÔ" + "à¡ÕÂõÔÂÈ" + "à¡ÕÂõÔÈÑ¡´Ôì" + "à¡ÕÂõÔì" + "à¡ÕÂÃì" + "à¡ÕèÂ" + "à¡Õè§" + "à¡ÕèÂÇ" + "à¡ÕéÂÁÍÕë" + "à¡ÕéÂÁä©è" + "à¡ÕéÂÇ" + "à¡ÕêÂÇ" + "à¡ÕêÂÐ" + "à¡×Í¡" + "à¡×ͺ" + "à¡×éÍ" + "à¡àÃ" + "à¡ç§" + "à¡ç¨" + "à¡çº" + "à¡è§" + "à¡è§¡Ò¨" + "à¡è¹" + "à¡èÒ" + "à¡é" + "à¡é§" + "à¡é§¡éÒ§" + "à¡éÍ" + "à¡éÒ" + "à¡éÒÍÕé" + "à¡ê" + "à¡ê¡" + "à¡ê¡ÎÇÂ" + "à¡ë" + "à¡ë§" + "à¡ëÒ" + "à¢" + "ࢡ" + "ࢵ" + "ࢹ" + "ࢹ§" + "ࢹÂ" + "ࢹç´" + "ࢺ稢ºÇ¹" + "ࢺçµ" + "à¢ÁÃ" + "à¢ÁÒ" + "à¢Á×ͺ" + "à¢Áç§" + "à¢Áç´á¢Áè" + "à¢Áè¹" + "à¢ÁèÒ" + "à¢Áé¹" + "à¢Â" + "à¢Â¡" + "à¢ÂÔº" + "à¢Â×é͹" + "à¢Âè§" + "à¢ÂèÒ" + "à¢ÂéÍá¢Âè§" + "à¢ÃÍÐ" + "à¢Å§" + "à¢ÅÍÐ" + "à¢ÅÐ" + "à¢ÅÒ" + "à¢ÅÒÐ" + "à¢Ç" + "à¢ÉÁ" + "à¢ÌÐ" + "à¢Ð¢Ð" + "à¢Ò" + "à¢Ô¹" + "à¢Õ§" + "à¢Õ´" + "à¢Õ¹" + "à¢ÕÂÁ" + "à¢ÕÂÇ" + "à¢ÕèÂ" + "à¢ÕéÂÇ" + "à¢×Í" + "à¢×èͧ" + "à¢×è͹" + "à¢ç" + "à¢ç´" + "à¢ç¹" + "à¢çÁ" + "à¢è§" + "à¢è¹" + "à¢èÒ" + "à¢éÁ" + "à¢éÒ" + "हÂÒ" + "à¤ÁÕ" + "à¤Â" + "à¤Ã§" + "à¤Ã´Ôµ" + "à¤ÃÒ" + "à¤ÃÒÐËì" + "à¤ÃÕ´" + "à¤Ã×Í" + "à¤Ã×èͧ" + "à¤Ã×èͧ¾ÔÁ¾ì" + "à¤Ãè§" + "à¤Ã觤ÃÑ´" + "à¤ÅÔºà¤ÅÔéÁ" + "à¤ÅÔéÁ" + "à¤ÅÕÂ" + "à¤Å×ͺ" + "à¤Å×è͹" + "à¤Åç´" + "à¤Åé¹" + "à¤ÅéÒ" + "à¤Çé§" + "à¤Ë" + "à¤ËÐ" + "à¤ËÒ" + "à¤ÍÃìà¹Å" + "à¤ÍÐ" + "à¤Ò¹ìàµÍÃì" + "à¤Òþ" + "à¤ÒÐ" + "à¤Õ§" + "à¤Õ´" + "à¤Õ¹" + "à¤ÕÂÇ" + "à¤ÕèÂÁ" + "à¤ÕèÂÇ" + "à¤ÕéÂÇ" + "à¤×ͧ" + "à¤àºÔÅ" + "à¤çÁ" + "à¤é¡" + "à¤é¹" + "à¤éÒ" + "à¤éà¡é" + "à¦Õè¹" + "ৡ" + "à§Â" + "à§ÍÐ" + "à§ÍЧÐ" + "à§Ò" + "à§ÒÐ" + "à§Ô¹" + "à§Õº" + "à§Õè§" + "à§Õè¹" + "à§ÕèÂËÙ" + "à§ÕéÂÇ" + "à§×Í¡" + "à§×Í´" + "à§×ͺ" + "à§×èͧ" + "à§×è͹" + "à§×è͹ä¢" + "à§×éÍ" + "à§×éÍÁ" + "à§èÒ" + "à§éÒ" + "à¨" + "਴ÕÂʶҹ" + "਴ÕÂì" + "ਵ" + "ਵ¤µÔ" + "ਵ¨Ó¹§" + "ਵ¹Ò" + "ਵ¹ÒÃÁ³ì" + "ਵÀÙµ" + "ਵÊÔ¡" + "ਹ" + "à¨ÁÊì" + "à¨Ã¨Ò" + "à¨ÃÔ" + "à¨ÃÔ´" + "à¨Çç´" + "à¨É®Ò" + "à¨Í" + "à¨ÍÃì" + "à¨ÍÐ" + "à¨ÒÐ" + "à¨Ô´" + "à¨ÔÁ" + "à¨Ôè§" + "à¨Ôè¹" + "à¨Õ´" + "à¨Õ¹" + "à¨ÕÂÁ" + "à¨ÕÂÃÐä¹" + "à¨ÕÂÇ" + "à¨Õêº" + "à¨ÕêÂÇ" + "à¨ÕêÂǨêÒÇ" + "à¨Õë¹" + "à¨ÕëÂÁà¨ÕéÂÁ" + "à¨×Í" + "à¨×è͹" + "à¨×éÍÂ" + "à¨ç´" + "à¨çº" + "à¨èÍ" + "à¨èÒ" + "à¨éÒ" + "à¨éÒªÙé" + "à¨ê" + "à¨ê¡" + "à¨ê§" + "à¨êµ" + "à¨êÒ" + "à¨ëÍ" + "à©" + "à©¡" + "à©´" + "੾ÒÐ" + "à©Â" + "à©ÂàÁÂ" + "à©ÅÂ" + "à©ÅÒ" + "à©ÅÔÁ" + "à©ÅÕ§" + "à©ÅÕÂÇ" + "à©ÅÕèÂ" + "à©ÇÕ§" + "à©ÇÕ¹" + "à©ÍÐá©Ð" + "à©Ò" + "à©Ò¡êÇÂ" + "à©ÒÐ" + "à©Ô´" + "à©Ôº" + "à©Õ§" + "à©Õ´" + "à©Õº" + "à©ÕÂÇ" + "à©ÕèÂÇ" + "à©×͹" + "à©×èÍÂ" + "à©â¡" + "à©è§" + "હ" + "àªÂ" + "àªÅ" + "àªÅÂ" + "àªÉ°Ò" + "àªÍ" + "àªÍÃì" + "àªÒǹì" + "àªÒÇì" + "àªÔ§" + "àªÔ" + "àªÔ´" + "àªÔéµ" + "àªÕ§" + "àªÕ§ãËÁè" + "àªÕº" + "àªÕÂÃì" + "àªÕÂÇ" + "àªÕè¹" + "àªÕèÂÇ" + "àª×Í¡" + "àª×Í´" + "àª×͹" + "àª×èÍ" + "àª×èͧ" + "àª×èÍÁ" + "àª×éÍ" + "àªç¤" + "àªç´" + "àªè¹" + "àªèÒ" + "àªé§" + "àªéÒ" + "à«" + "૵" + "ૹ" + "ૹµÔ¡ÃÑÁ" + "ૹµÔÅÔµÃ" + "ૹµÔà¡Ã´" + "ૹµÔàÁµÃ" + "ૹµì" + "ૻѡµÃСÃéÍ" + "à«¿" + "à«ÃØèÁ" + "à«ÅÅÙÅÍ´ì" + "à«ÅÅÙâÅÊ" + "à«ÅÅì" + "à«ÅÊì" + "à«Åà«ÕÂÊ" + "à«Í" + "à«ÍÃì" + "à«ÍÃìÇÔÊ" + "à«ÍÐ" + "à«Ò" + "à«ÒÐ" + "à«Ô§" + "à«ÔÃì¿àÇÍÃì" + "à«Ôé§" + "à«Õ¹" + "à«ÕÂÁ«Õ" + "à«ÕÂÇ" + "à«Õè§äÎé" + "à«×èͧ" + "à«ç¡àÁ¹µì" + "à«ç§" + "à«ç¹" + "à«ç¹àµÍÃì" + "à«è§" + "à«è¹" + "à«èÍ" + "à«é§" + "à«éÒ«Õé" + "à¬Í" + "à¬ÍàÍÁ" + "à²èÒ" + "à³Ã" + "à´¡«ìâ·ÃÊ" + "à´¤Ò¡ÃÑÁ" + "à´¤ÒÅÔµÃ" + "à´¤ÒàÁµÃ" + "à´ª" + "à´ªÐ" + "à´«Ô¡ÃÑÁ" + "à´«ÔÅÔµÃ" + "à´«ÔàÁµÃ" + "à´¹" + "à´¹ÁÒÃì¡" + "à´¹ÁÒÃì¤" + "à´ºÔµ" + "à´ÃѨ©Ò¹" + "à´ÅÅì" + "à´ÇÔ´" + "à´Ê¡ì·Í»" + "à´ÍÐ" + "à´Ò" + "à´ÒÐ" + "à´Ô¹" + "à´ÔÁ" + "à´ÕÂ" + "à´Õ§" + "à´Õ´" + "à´ÕÂÃ" + "à´ÕÂôÒÉ" + "à´ÕÂöÕÂì" + "à´ÕÂÃѨ©Ò¹" + "à´ÕÂÇ" + "à´ÕÂÐ" + "à´ÕèÂÇ" + "à´ÕéÂ" + "à´ÕëÂÇ" + "à´×Í´" + "à´×͹" + "à´×ÍÂ" + "à´âª" + "à´ç¡" + "à´ç¨" + "à´ç´" + "à´è" + "à´è¹" + "à´èÒ" + "à´é§" + "à´éÒ" + "à´ëÍ" + "à´ëÍ´ëÒ" + "àµÂ" + "àµÃÕÂ" + "àµÃÕ´" + "àµÃÕÂÁ" + "àµÃç´" + "àµÃè" + "àµÅÔ´" + "àµÇç´" + "àµÍÃì" + "àµÍÃì¡Õ" + "àµÍÐ" + "àµÐ" + "àµÒ" + "àµÒÐáµÐ" + "àµÔº" + "àµÔÁ" + "àµÔè§" + "àµÕ§" + "àµÕ¹" + "àµÕº" + "àµÕèÂ" + "àµÕèÂÇ" + "àµÕéÂ" + "àµÕëÂÁ" + "àµ×͹" + "àµ×éÍ" + "àµç§" + "àµç¹·ì" + "àµçÁ" + "àµè§" + "àµèÍ" + "àµèÒ" + "àµé¹" + "àµéÒ" + "àµéÒ·Ö§" + "àµéÒÊèǹ" + "àµéÒËÙé" + "àµéÒÎÇÂ" + "àµéÒà¨ÕéÂÇ" + "àµéÒàÊÕº" + "àµê¡" + "àµêÐ" + "àµëÒ" + "ඡԧ" + "ඹ" + "à¶Ã" + "à¶ÃÐ" + "à¶ÃÒ¹Øà¶ÃÐ" + "à¶ÅÔ§" + "à¶Å×Í¡¶Å¹" + "à¶Åä¶Å" + "à¶ÍÐ" + "à¶Ò" + "à¶ÒÇÑÅÂì" + "à¶ÒÐ" + "à¶Ô¡" + "à¶Ô´" + "à¶Ô´à·Ô§" + "à¶Ô¹" + "à¶Õ§" + "à¶×Í" + "à¶×Í¡" + "à¶×è͹" + "à¶èÍ" + "à¶éÒ" + "à·" + "à·¤¹Ô¤" + "à·¤â¹âÅÂÕ" + "à·¹¹ÔÊ" + "à·»" + "à·¾" + "à·¾´Ò" + "à·¾¸Ô´Ò" + "à·¾¹Á" + "෾´Ò" + "à·¾Âà¨éÒ" + "à·¾ÒÃÑ¡Éì" + "à·¾Õ" + "à·¾à¨éÒ" + "à·Á»ØÃÐ" + "à·Ã´à´ÍÃì" + "à·Ã¹à¹ÍÃì" + "à·Ç´Ò" + "à·Ç·Ñ³±ì" + "à·Ç·Ùµ" + "à·Ç¸ÃÃÁ" + "à·Ç¸Ô´Ò" + "à·Ç¹ÔÂÁ" + "à·ÇÃÙ»" + "à·ÇÉ" + "à·Çʶҹ" + "à·ÇÑ" + "à·Çѹ" + "à·ÇÒÅÑÂ" + "à·ÇÕ" + "à·ÇâÅ¡" + "à·È" + "à·È¡ÒÅ" + "à·È¹Ò" + "à·È¹ì" + "à·ÈºÒÅ" + "à·ÈÁ¹µÃÕ" + "à·ÈÒÀÔºÒÅ" + "à·Êµì" + "à·ËÇѵ¶Ø" + "à·Ëì" + "à·Í" + "à·ÍÁ" + "à·ÍÃìâÁÁÔàµÍÃì" + "à·ÍзÐ" + "à·Ò" + "à·Ô´" + "à·Ô¹" + "à·Ôº" + "à·Ôè§" + "à·ÔéÁ" + "à·Õ¹" + "à·Õº" + "à·ÕÂÁ" + "à·ÕÂÇ" + "à·Õè§" + "à·ÕèÂÇ" + "à·×Í¡" + "à·àºÔÅ" + "à·àŤÍÁ" + "à·àÇÈÃì" + "à·àÇÈÇÃì" + "à·â¾" + "à·ç¨" + "à·è" + "à·èÍ" + "à·èÒ" + "à·é§àµé§" + "à·éÍ" + "à·éÒ" + "ู" + "ูÊì" + "à¸Í" + "๤ä·" + "๵" + "๵Ã" + "๵Êऻ" + "๵Ô" + "๺ÔÇÅÒ" + "๻¨Ù¹" + "๻ÒÅ" + "à¹Â" + "à¹Ã¤Ø³" + "à¹ÃÁÔµ" + "à¹Ãà·È" + "à¹Ò" + "à¹Ô¹" + "à¹Ôº" + "à¹Ôè¹" + "à¹ÕÂ" + "à¹Õ¹" + "à¹ÕÂÁ" + "à¹×ͧ" + "à¹×ÍÂ" + "à¹×èͧ" + "à¹×éÍ" + "à¹çµ" + "à¹çµàÇÔÃì¡" + "à¹çµàÇÔÃì¤" + "à¹èÒ" + "à¹é¹" + "à¹éÍ" + "àº" + "຤͹" + "ວ¡ÍÅ" + "ຨ" + "ຨ¡" + "ຨ¡ÑÅÂÒ³Õ" + "ຨ¡ÒÁ¤Ø³" + "ຨ¸ÃÃÁ" + "ຨºÃþµ" + "ຨÁÒÈ" + "ຨç¤ì" + "ຨÒ" + "ຨҧ¤»ÃдÔÉ°ì" + "ຨҧ¤ì" + "ຨà¾Ê" + "ີéÒ" + "ູ" + "ູ«Ô¹" + "ູ«ì" + "àºÃ¡" + "àºÃì¡" + "àºÅàÂÕèÂÁ" + "àºÈ" + "àºÊ" + "àºÊºÍÅ" + "àºÍÃì" + "àºÍÃìÅÔ¹" + "àºÍÐ" + "àºÍкÐ" + "àºÐ" + "àºÒ" + "àºÒÐ" + "àºÒÐáÊ" + "àºÔ¡" + "àºÔÃì¡" + "àºÔè§" + "àºÕ´" + "àºÕ¹" + "àºÕÂÃì" + "àºÕè§" + "àºÕéÂ" + "àºÕéÂÇ" + "àº×Í" + "àº×͹" + "àº×èÍ" + "àº×éÍ" + "àº×éͧ" + "àºç´" + "àºç´àµÅç´" + "àºç´àÊÃç¨" + "àºè§" + "àºé" + "àºéÍ" + "àºéÍàÃÔèÁ" + "àºéÍàÃèÍ" + "àºéÒ" + "໡" + "à»Ãµ" + "à»ÃÁ" + "à»ÃÂ" + "à»ÃÍ" + "à»ÃÍÐ" + "à»ÃÒÐ" + "à»ÃÕ§" + "à»ÃÕÂ" + "à»ÃÕº" + "à»ÃÕÂÇ" + "à»ÃÕÂÐ" + "à»ÃÕé§" + "à»ÃÕéÂÇ" + "à»ÃÕêÂÐ" + "à»Ã×èͧ" + "à»Ã×éÍÂ" + "à»Å" + "à»ÅÇ" + "à»ÅÒÐ" + "à»ÅÕè¹" + "à»ÅÕèÂÇ" + "à»ÅÕéÂ" + "à»Å×Í¡" + "à»Å×ͧ" + "à»Å×ÍÂ" + "à»Å×éͧ" + "à»Åè§" + "à»ÅèÒ" + "à»Í" + "à»ÍÃì" + "à»ÍÃìà«ç¹µì" + "à»Ð" + "à»Ò" + "à»ÒÐ" + "à»Òà»Ò" + "à»Ô¡" + "à»Ô§" + "à»Ô´" + "à»Ôº" + "à»Ôè¹" + "à»Ôêº" + "à»ÕÂ" + "à»Õ¡" + "à»ÕèÂÁ" + "à»ÕéÂÇ" + "à»Õê¡" + "à»ÕêÂÐ" + "à»×Í¡" + "à»×èÍÂ" + "à»×é͹" + "à»ç´" + "à»ç¹" + "à»ç¹µé¹" + "à»è§" + "à»èÒ" + "à»é" + "à»é§" + "à»éÒ" + "à»ê¡" + "à»ë" + "à»ë§" + "à»ëÍ" + "à»ëÍàËÅÍ" + "à»ëÒ" + "à»ëÒÎ×éÍ" + "à¼" + "༧" + "༪Ô" + "༴ÔÁ" + "༴Õ§" + "༴ç¨" + "à¼Â" + "à¼ÂÍ" + "à¼ÅÍ" + "à¼ÅÍä¼Å" + "à¼ÅÐ" + "à¼ÅÒÐ" + "à¼Åè" + "à¼ÍÔ" + "à¼ÍàÃÍ" + "à¼Ð" + "à¼Ò" + "à¼ÒÐ" + "à¼Ô¹" + "à¼×Í¡" + "à¼×Í´" + "à¼×èÍ" + "à¼ç´" + "à¼è¹" + "à¼èÒ" + "à¼éÒ" + "à½×Í" + "à½×Í¡" + "à½×è͹" + "à½éÒ" + "à¾" + "ྨ" + "ྪ¬¦Òµ" + "ྪÃ" + "ྪÃÒÂظ" + "ྴҹ" + "ྷ¹Ò" + "ྷÒÂ" + "ྷغÒÂ" + "ྐྵ¡ÇÔ¹" + "ྐྵÕ´" + "ྐྵà·ÕÂÁ" + "à¾Ã§" + "à¾ÃÒ" + "à¾ÃÒÐ" + "à¾ÃÔ´" + "à¾ÃÔÈ" + "à¾ÃÕ¡" + "à¾ÃÕ§" + "à¾ÃÕº" + "à¾ÃÕÂÇ" + "à¾Ã×èÍ" + "à¾Å" + "à¾Å§" + "à¾ÅÒ" + "à¾ÅÒÐ" + "à¾ÅÔ§" + "à¾ÅÔ´à¾ÅÔ¹" + "à¾ÅÔ¹" + "à¾ÅÕÂ" + "à¾ÅÕè§" + "à¾ÅÕéÂ" + "à¾È" + "à¾ÒÐ" + "à¾Ô¡" + "à¾Ô§" + "à¾Ôè§" + "à¾ÔèÁ" + "à¾Õ§" + "à¾Õº" + "à¾ÕÂÃ" + "à¾ÕéÂ" + "à¾Õé§" + "à¾Õé¹" + "à¾×èÍ" + "à¾×è͹" + "à¾ç§" + "à¾ç¨" + "à¾ç" + "à¾ç´·ÙÅ" + "à¾è§" + "à¾è¹¾èÒ¹" + "à¾èÍ" + "à¾éÍ" + "à¿´" + "à¿Í" + "à¿ÍÃì" + "à¿ÍÃì¹Ôà¨ÍÃì" + "à¿ÍÃìàÁÕÂÁ" + "à¿ÍÐ" + "à¿Ð" + "à¿Ô¹" + "à¿ÕéÂÁ" + "à¿ÕéÂÇ" + "à¿×Í" + "à¿×ͧ" + "à¿×͹" + "à¿×ÍÂ" + "à¿×èͧ" + "à¿×éÍ" + "à¿×éͧ" + "à¿×éÍÂ" + "à¿ç´" + "à¿é¹" + "à¿éÍ" + "àÀµÃÒ" + "àÀ·" + "àÀ·ØºÒÂ" + "àÀÃÕ" + "àÀÊѪ" + "àÁ" + "àÁ¡Ð" + "àÁ¡ÐàÎÔõ«ì" + "àÁ¢ÅÒ" + "àÁ¦" + "àÁ¦Ò" + "àÁ¦Ô¹·Ãì" + "àÁ¦Õ" + "àÁµµÒ" + "àÁµÃ" + "àÁµÃÔ¡" + "àÁ¶Ø¹" + "àÁ·¹Õ" + "àÁ·Ô¹Õ" + "àÁ¸Ò" + "àÁ¸Õ" + "àÁ¹·ÍÅ" + "àÁ¹ºÍÃì´" + "àÁ¹Ù" + "àÁÁâÁÃÕ" + "àÁÃÑÂ" + "àÁÃØ" + "àÁÅ×ͧ" + "àÁÅ×èÍÂ" + "àÁÅ×éÍÂ" + "àÁÅç´" + "àÁÅì" + "àÁÉ" + "àÁÉÒ¹" + "àÁÐ" + "àÁÒ" + "àÁÒÅÕ" + "àÁÒÊì" + "àÁÒÌÕ" + "àÁÒÐ" + "àÁÔ¹" + "àÁÕÂ" + "àÁÕ§" + "àÁÕè§" + "àÁÕé¹" + "àÁ×Í¡" + "àÁ×ͧ" + "àÁ×èÍ" + "àÁ×èÍÂ" + "àÁâÁÃÕ" + "àÁç¡«Ôâ¡" + "àÁç´" + "àÁè¹" + "àÁèÒ" + "àÁéÁ" + "àÁéÒÊì" + "àÂ" + "à§" + "à«Ù" + "à¹" + "àÂÍ" + "àÂÍÃÁѹ" + "àÂÍÃÁѹ¹Õ" + "àÂÍÃÁѹÕ" + "àÂÍÐ" + "àÂÒ" + "àÂÒǪ¹" + "àÂÒǾÒ" + "àÂÒǾҹ" + "àÂÒÇÁÒÅÂì" + "àÂÒÇÂÍ´" + "àÂÒÇÃÒª" + "àÂÒÇÅѡɳì" + "àÂÒÇàÃÈ" + "àÂÒÇì" + "àÂÒÐ" + "àÂÔ¹" + "àÂÔº" + "àÂÔè¹" + "àÂÔè¹àÂéÍ" + "àÂÔéÁ" + "àÂÕÂ" + "àÂÕ¹" + "àÂÕº" + "àÂÕÂÇ" + "àÂÕè§" + "àÂÕèÂÁ" + "àÂÕèÂÇ" + "àÂ×Í¡" + "àÂ×͹" + "àÂ×èÍ" + "àÂ×éÍ" + "àÂ×éͧ" + "àÂ×é͹" + "àÂç¹" + "àÂçº" + "àÂè¹" + "àÂèÍ" + "àÂé" + "àÂéÂ" + "àÂéÒ" + "àâ" + "àâÒ" + "àâҤ³Ôµ" + "àóÙ" + "àô͹" + "àôÒÃì" + "àÃÃǹ" + "àÃÇ´Õ" + "àÃÍ" + "àÃÒ" + "àÃÒÐ" + "àÃÔ§" + "àÃÔ´" + "àÃÔÁ" + "àÃÔèÁ" + "àÃÔéÁ" + "àÃÕ¡" + "àÃÕ§" + "àÃÕ´" + "àÃÕ¹" + "àÃÕº" + "àÃÕÂÁ" + "àÃÕÂÇ" + "àÃÕèÂ" + "àÃÕèÂÁ" + "àÃÕèÂÇ" + "àÃÕéÂÇá" + "àÃ×Í" + "àÃ×Í¡" + "àÃ×ͧ" + "àÃ×Í´" + "àÃ×͹" + "àÃ×èÍ" + "àÃ×èͧ" + "àÃ×èÍÂ" + "àÃ×éÍ" + "àÃ×é͹" + "àÃäÃ" + "àÃçÇ" + "àÃè" + "àÃè§" + "àÃèÍ" + "àÃèÒ" + "àÃé¹" + "àÃéÒ" + "àÅ¢" + "àÅ¢Ò" + "àÅ¢Ò¸Ô¡ÒÃ" + "àŢҹءÒÃ" + "àÅ´Õé" + "àŵ" + "àŹ" + "àŹÊì" + "àźҹ͹" + "àÅÂ" + "àÅÇ" + "àÅÈ" + "àÅËÅѧ" + "àÅÍ" + "àÅÍÐ" + "àÅÍÐà·ÍÐ" + "àÅÐ" + "àÅÐà·Ð" + "àÅÒ" + "àÅÒÐ" + "àÅÔ¡" + "àÅÔ¡ÅÑè¡" + "àÅÔ¹àÅèÍ" + "àÅÔÈ" + "àÅÔé§" + "àÅÕÂ" + "àÅÕ§" + "àÅÕ¹" + "àÅÕº" + "àÅÕÂÁ" + "àÅÕÂÇ" + "àÅÕè§" + "àÅÕè¹" + "àÅÕèÂÁ" + "àÅÕé§" + "àÅÕéÂÇ" + "àÅ×Í¡" + "àÅ×Í´" + "àÅ×͹" + "àÅ×èͧ" + "àÅ×è͹" + "àÅ×èÍÁ" + "àÅ×èÍÁãÊ" + "àÅ×èÍÂ" + "àÅ×éÍÂ" + "àÅà«ÍÃì" + "àÅà¾" + "àÅç¡" + "àÅç§" + "àÅç´" + "àÅç¹" + "àÅçº" + "àÅçÁ" + "àÅè¹" + "àÅèÁ" + "àÅèËì" + "àÅèÍ" + "àÅèÒ" + "àÅé§" + "àÅéÒ" + "àǤ" + "àǤԹ" + "àǤÕ" + "àǨ" + "àǪ" + "àǪ¡ÃÃÁ" + "àÇ°¹ì" + "àdzÐ" + "àdzÔ" + "àdzԡ" + "àdzØ" + "àǵ¹ì" + "àǵÃ" + "àǵÒÅ" + "àÇ·" + "àÇ·¹Ò" + "àÇ·Âì" + "àÇ·Ò§¤ÈÒʵÃì" + "àÇ·Ò§¤ì" + "àÇ·Ò¹µÐ" + "àÇ·Ò¹µì" + "àÇ·Ô" + "àÇ·Õ" + "àǸÐ" + "àǹ" + "àǹÔÊ" + "àǹäµÂ" + "àǺ䫵ì" + "àÇÁºÅÕÂì" + "àÇÁÐ" + "àÇÁѵ" + "àÇÁÒµÔ¡" + "àÇÃ" + "àÇÃÁ³Õ" + "àÇÃѳ" + "àÇÃѳ³ÔÂÐ" + "àÇÃÕ" + "àÇÅÊì" + "àÇÅÒ" + "àÇÈÁì" + "àÇÈÂÒ" + "àÇÈÂì" + "àÇʵì" + "àÇʹì" + "àÇÊÀÙ" + "àÇÊÁÐ" + "àÇÊÁì" + "àÇÊÇѳ" + "àÇÊÊÐ" + "àÇÊÊѹ´Ã" + "àÇÊÊØ¡ÃÃÁ" + "àÇÊÊØÇѳ" + "àÇÊÒÃѪ" + "àÇÊÔ" + "àÇÊÔÂÒ" + "àÇ˹" + "àÇËÐ" + "àÇËѧ¤ì" + "àÇËÑ»µÔ" + "àÇËÒ" + "àÇËÒÂÊ" + "àÇËÒÊ" + "àÇÌØ" + "àÇÍ" + "àÇÍÃì" + "àÇÍÃìªÑ¹" + "àÇÔ¡" + "àÇÔÃì¡Ê൪ѹ" + "àÇÔÃì´" + "àÇÔé§" + "àÇÕ§" + "àÇÕ´¹ÒÁ" + "àÇÕ¹" + "àÇâè¹ì" + "àÇä¹Â" + "àÇçº" + "àÇç»" + "àÇèÍ" + "àÇé" + "àÇé¹" + "àÇéÂ" + "àÇéÒ" + "àÈÃÉ°¡Ô¨" + "àÈÃÉ°ÈÒʵÃì" + "àÈÃÉ°Ò¹Ð" + "àÈÃÉ°Õ" + "àÈÃÉ°ì" + "àÈÃéÒ" + "àÈǵ" + "àÈÉ" + "àÈÕÂÃ" + "àÊ" + "àÊ¡" + "àʧÕèÂÁ" + "àʩǹ" + "àÊ´" + "àÊ´ç¨" + "àʶÕÂÃ" + "àʶÕÂÃÀÒ¾" + "àʹ" + "àʹ§" + "àʹËÒ" + "àʹÍ" + "àʹÐ" + "àʹÒ" + "àʹҸԡÒÃ" + "àʹҺ´Õ" + "àʹÒʹÐ" + "àʹÒÐ" + "àʹÕ´" + "àʹÕÂì" + "àʹè§" + "àʹèËÒ" + "àʹèËì" + "àʹèÒ" + "àʺÂ" + "àʺÕ§" + "àʾ" + "àʾÂì" + "àÊÀÒ" + "àÊÁËÐ" + "àÊÁÍ" + "àÊÁÒ" + "àÊÁÕ¹" + "àÊÁ×͹" + "àÊÁç´" + "àÊÂ" + "àÊÃÔ´" + "àÊÃÔ¿" + "àÊÃÔÁ" + "àÊÃÕ" + "àÊÃç¨" + "àÊÅ´" + "àÊÅÒ" + "àÊÅÕè§" + "àÊÅ×Í¡ÊŹ" + "àÊÇ¡" + "àÊÇ¡ÒÁÒµÂì" + "àÊǹÐ" + "àÊǹÒ" + "àÊÇÂ" + "àÊÇÕ¹" + "àÊÒ" + "àÊÒÃÀÂì" + "àÊÒÃì" + "àÊÒǤ¹¸ì" + "àÊÒdzԵ" + "àÊÒǹÒ" + "àÊÒǹÕÂì" + "àÊÒÇÀÒ" + "àÊÒÇÀÒ¤Âì" + "àÊÒÇÀÒ¾" + "àÊÒÇÃÊ" + "àÊÒÇÅѡɳì" + "àÊÒÐ" + "àÊÔÃì¿" + "àÊÕÂ" + "àÊÕ§" + "àÊÕ´" + "àÊÕº" + "àÊÕÂÁ" + "àÊÕÂÇ" + "àÊÕèÂ" + "àÊÕè§" + "àÊÕèÂÇ" + "àÊÕé¹" + "àÊÕéÂÁ" + "àÊÕéÂÇ" + "àÊ×Í" + "àÊ×Í¡" + "àÊ×èÍ" + "àÊ×èÍÁ" + "àÊ×éÍ" + "àÊà¾Å" + "àÊâ·" + "àÊâÅ" + "àÊç§à¤Ãç§" + "àÊé§" + "àÊé¹" + "àÊéÒ" + "àË" + "à˧" + "à˧Ò" + "à˧×Í¡" + "à˧×èÍ" + "à˧è§" + "à˵Ø" + "à˵ءÒóì" + "à˹ÍÐ" + "à˹ÍÐ˹Ð" + "à˹ÒÐ" + "à˹Õ§" + "à˹ÕÂÁ" + "à˹ÕÂÇ" + "à˹ÕèÂÇ" + "à˹×Í" + "à˹×èÍÂ" + "à˹ç´" + "à˹çº" + "à˹è§" + "à˹èÍ" + "à˹éÒ" + "àËÁ" + "àËÁÇ´Õ" + "àËÁѹµì" + "àËÁÒ" + "àËÁÒÐ" + "àËÁÕÂÇ" + "àËÁÕèÂÇ" + "àËÁ×ͧ" + "àËÁ×Í´" + "àËÁ×͹" + "àËÁç¹" + "àËÁè" + "àËÁè§" + "àËÁèÍ" + "àËÂ" + "à˧" + "àËÂÒÐ" + "àËÂÔ§" + "àËÂÕ´" + "àËÂÕº" + "àËÂÕèÂÇ" + "àËÂ×Í¡" + "àËÂ×èÍ" + "àËÂéÒ" + "àËÃÑÔ¡" + "àËÃÒ" + "àËÃÕÂ" + "àËŹ" + "àËÅÇ" + "àËÅÍ" + "àËÅÒ" + "àËÅÒÐáËÅÐ" + "àËÅÔ§" + "àËÅÕ¹" + "àËÅÕÂÇ" + "àËÅÕèÂÁ" + "àËÅ×Í" + "àËÅ×Í¡" + "àËÅ×ͧ" + "àËÅ×ͺ" + "àËÅ×èÍÁ" + "àËÅç¡" + "àËÅè" + "àËÅèÒ" + "àËÅéÒ" + "àËÇ" + "àËǧ" + "àËÇÂ" + "àËÇÍÐ" + "àËÇÍÐËÇÐ" + "àËÇÕè§" + "àËÇè" + "àËÍÐ" + "àËÒ" + "àËÒÐ" + "àËÔ¹" + "àËÔÁ" + "àËÕ¹" + "àËÕèÂÇ" + "àËÕéÂ" + "àËÕé¹" + "àËÕéÂÁ" + "àË×Í´" + "àË×èÍ" + "àËç¨" + "àËç´" + "àËç¹" + "àËçº" + "àËè" + "àËèÍ" + "àËèÒ" + "àÍ" + "àÍ¡" + "àÍ¡©Ñ¹·ì" + "àÍ¡ª¹" + "àÍ¡«àÃÂì" + "àÍ¡«â»" + "àÍ¡À¾" + "àÍ¡ÀÒ¾" + "àÍ¡ÁÑÂ" + "àÍ¡Ãö»ÃÐâ¤" + "àÍ¡ÃÒª" + "àÍ¡Åѡɳì" + "àÍ¡ÊÒÃ" + "à͡ѤµÒ" + "àÍ¡Ò¸Ô»äµÂ" + "à͡ࢹ¡" + "àÍ¡à·È" + "àͧ" + "àͪ¾Õ" + "àÍ´Êì" + "àÍ´ÔàµÍÃì" + "à͵·Ñ¤¤Ð" + "àÍ·ÕàÍçÁ" + "à͹" + "à͹·ÃÒ¹«ì" + "à͹ä«Áì" + "àÍ»Êѹ" + "àÍÁ" + "àÍÂ" + "àÍÃÒÇѳ" + "àÍÃç´ÍÃèÍÂ" + "àÍÇ" + "àÍÇѧ" + "àÍÊ" + "àÍÌ¡" + "àÍÌÒ" + "àÍÍ" + "àÍÐÍÐ" + "àÍÐã¨" + "àÍÒ" + "àÍÒ·ì¾Øµ" + "àÍÒÌÒÃ" + "àÍÔ¡" + "àÍÔº" + "àÍÔé¹" + "àÍÕ§" + "àÍÕ´" + "àÍÕ¹" + "àÍÕè¹" + "àÍÕèÂÁ" + "àÍÕèÂÇ" + "àÍÕé§" + "àÍÕéÂÁà¿ÕéÂÁ" + "àÍÕéÂÇ" + "àÍÕê´" + "àÍÕêÂÁ" + "àÍÕêÂÁ¨Øê¹" + "àÍ×͹" + "àÍ×ÍÁ" + "àÍ×èÍÂ" + "àÍ×éÍ" + "àÍ×éͧ" + "àÍ×é͹" + "àÍ×éÍÁ" + "àÍ×éÍÂ" + "àÍà¤ÍÃì" + "àÍàªÕÂ" + "àÍàªÕè¹à¡ÁÊì" + "àÍà«ÕÂ" + "àÍàÂè¹µì" + "àÍẤ" + "àÍç¡«ì" + "àÍç¡«ì¾ÅÍàÃÍÃì" + "àÍç¡«ìà¾ÃÊ" + "àÍç§" + "àÍç´" + "àÍç´µÐâÃ" + "àÍç´ÍÖ§" + "àÍç¹" + "àÍç¹´Ù" + "àÍç¹àµÍÃìà·¹" + "àÍèÂ" + "àÍèÍ" + "àÍé" + "àÍé¡Ò" + "àÍéÍÃÐàËÂ" + "àÍéÍàÎÍ" + "àÍê¡" + "àÍêÂ" + "àÍêÐ" + "àÍë" + "àÍë§" + "àÍëÂ" + "àÎ" + "àΧ" + "àÎÂ" + "àÎÅԤͻàµÍÃì" + "àÎÔõ«ì" + "àÎÕÂ" + "àÎÕé¹" + "àÎÕéº" + "àÎÕéÂÇ" + "àÎ×Í¡" + "àÎ×͹" + "àÎâÃÍÕ¹" + "àÎâÅ" + "àÎéÂ" + "àÎéÇ" + "àÎéÍ" + "á¡" + "ᡧ" + "᡹" + "á¡Á" + "á¡ÁÁÒ" + "á¡Ã¡" + "á¡Ã¹Ôµ" + "á¡ÃÐ" + "á¡Ã俵ì" + "á¡Ãç¹" + "á¡Ãè§" + "á¡ÃèÇ" + "á¡Å" + "á¡Åº" + "á¡ÅÅ͹" + "á¡ÅÐ" + "á¡ÅàÅÕÂÁ" + "á¡Åé§" + "á¡ÅéÁ" + "á¡ÅéÇ" + "á¡Ç" + "á¡Çè§" + "á¡Çè¹" + "á¡Ð" + "á¡â´ÅÔà¹ÕÂÁ" + "á¡è" + "á¡è§" + "á¡è§áÂè§" + "á¡è¹" + "á¡é" + "á¡é§" + "á¡éÁ" + "á¡éÇ" + "á¡ê§" + "á¡ê»" + "á¡êÊ" + "á¢" + "ᢡ" + "ᢹ" + "ᢹ§" + "á¢Á" + "á¢Áçº" + "á¢ÁèÇ" + "á¢Â§" + "á¢Âç¡" + "á¢Âè§" + "á¢Ç¡" + "á¢Ç§" + "á¢Ç¹" + "á¢ÇÐ" + "á¢ç§" + "á¢è§" + "á¢è§¢Ñ¹" + "á¢é§" + "á¢é¹" + "á¤" + "ᤪàªÕÂÃì" + "ᤪàÁÕÂÃì" + "ᤵµÒÅͤ" + "᤹" + "᤺" + "᤻«ÙÅ" + "á¤Á" + "á¤Ã§" + "á¤ÃÐ" + "á¤Ãè" + "á¤Ãì" + "á¤Å¤ÙÅÑÊ" + "á¤Å§" + "á¤Å¹" + "á¤ÅÍÃÕ" + "á¤ÅÔ¿ÍÃìà¹ÕÂ" + "á¤Åà«ÕÂÁ" + "á¤ÅèǤÅèͧ" + "á¤ÅéÇ" + "á¤Ç" + "á¤Ç¡" + "á¤Çé¹" + "á¤Ð" + "á¤è" + "á¤è¹" + "á¤é¹" + "á§" + "á§Ð" + "á§è" + "á§è§" + "á§è¹" + "á§éÁ" + "á¨" + "ᨡ" + "ᨧ" + "á¨Ç" + "á¨Ð" + "á¨èÁ" + "á¨èÇ" + "á¨é" + "á¨é§" + "á¨é¹" + "á¨éÇ" + "á¨ê´" + "á¨ë" + "á¨ëÇ" + "á¨ëÇáËÇÇ" + "á©" + "á©¡" + "ᩧ" + "á©Åº" + "á©ÅÐ" + "á©ÅéÁ" + "á©Ð" + "á©è" + "á©è§" + "áª" + "áªÁ»ì" + "áªÁà»" + "áªÃì" + "áªÅèÁ" + "áªè" + "áªè§" + "áªèÁ" + "᫧" + "á«´" + "᫹´ìÇÔª" + "᫺" + "á«Á" + "á«ÂÔ´" + "á«Ç" + "á«Ð" + "á«è" + "á«èÇ" + "á´" + "á´¡" + "á´§" + "á´´" + "á´¹" + "á´Ð" + "á´ç¡" + "á´è" + "á´è¹" + "á´èÇ" + "ᵡ" + "ᵧ" + "ᵧ¡ÇÒ" + "ᵧàÁ" + "ᵧâÁ" + "áµ´" + "áµ¹" + "áµÃ" + "áµÐ" + "áµè" + "áµè§" + "áµé" + "áµé¨ÔëÇ" + "áµéÁ" + "áµê´áµë" + "á¶" + "ᶡ" + "ᶺ" + "á¶Á" + "á¶Å§" + "á¶Ç" + "á·§" + "á·¹" + "á·¹·ÒÅÑÁ" + "á·º" + "á·Ã¡" + "á·Ã¡àµÍÃì" + "á·Ð" + "á·ç¡«Õè" + "á·ç§¡ì¹éÓ" + "á·è§" + "á·è¹" + "á·é" + "á·é§" + "Ṻ" + "á¹Á" + "á¹Ç" + "á¹Ð" + "á¹è" + "á¹è§" + "á¹è¹" + "á¹èÇ" + "á¹èÐ" + "áº" + "ạ" + "Ấ·ÕàÃÕÂ" + "ầ¡ì" + "ầ¤ì" + "ẴÁÔ¹µÑ¹" + "ẵàµÍÃÕè" + "ẹ" + "ẹâ¨" + "Ẻ" + "áºÐ" + "áºàÃÕÂÁ" + "áºçº" + "áºè§" + "á»" + "ừԿԤ" + "á»´" + "Ỻ" + "á»Ã" + "á»Ã¡" + "á»Ã§" + "á»Ã»Ãǹ" + "á»ÃÐ" + "á»Ãè§" + "á»Ãé¹" + "á»Ãê´" + "á»Ãë" + "á»Å" + "á»Å¡" + "á»Å§" + "á»Å¹" + "á»Åº" + "á»Åé" + "á»Ð" + "á»é§" + "á»é¹" + "á»éÇ" + "á»ê´" + "á»êº" + "á»êÐ" + "á»êЫÐ" + "á»ë§" + "á»ëÇ" + "ἡ" + "ἧ" + "á¼´" + "á¼¹" + "á¼¹¡" + "á¼Å" + "á¼Å§" + "á¼ÅÐ" + "á¼Åçº" + "á¼ÅçÇ" + "á¼è" + "á¼è¹" + "á¼èÇ" + "á¼éÇ" + "ὡ" + "ὧ" + "á½´" + "á¾" + "ᾧ" + "ᾧ¾ÇÂ" + "á¾·ÂÈÒʵÃì" + "á¾·ÂÊÀÒ" + "á¾·ÂÒ" + "á¾·Âì" + "á¾¹" + "á¾¹¡" + "á¾¹§àªÔ" + "á¾Ã" + "á¾Ã¡" + "á¾ÃÇ" + "á¾Ãè" + "á¾Ãè§" + "á¾ÃéÇ" + "á¾Å§" + "á¾Åµ¿ÍÃìÁ" + "á¾Å·Ô¹ÑÁ" + "á¾ÅÁ" + "á¾ÈÂÒ" + "á¾ÈÂì" + "á¾Ð" + "á¾ç¡" + "á¾ç¤à¡¨" + "á¾è§" + "á¾è¹" + "á¾é" + "á¾éÇ" + "á¿¡«ì" + "ῧ" + "ῪÑè¹" + "Ό" + "Ό«Õ" + "Ὼ" + "á¿Ãì" + "á¿Å¡«ì" + "á¿Åµ" + "á¿Ð" + "á¿éÁ" + "áÁ¡" + "áÁ¡¹Õà«ÕÂÁ" + "áÁ¤â¤Ã" + "áÁ§" + "áÁ§¡Ò¹ÕÊ" + "áÁ¹" + "áÁ¹¨ÙàÃÕÂ" + "áÁŧ" + "áÁÇ" + "áÁÐ" + "áÁè" + "áÁè¹" + "áÁèÎèͧÊ͹" + "áÁé" + "áÁé¹" + "áÁéÇ" + "á¡" + "á§" + "áº" + "áÂÁ" + "áÂÐ" + "áÂáÊ" + "áÂçº" + "áÂè" + "áÂè§" + "áÂé" + "áÂé§" + "áÂéÁ" + "áÃ" + "áá" + "áç" + "áô" + "áÃÁ" + "áÃÐ" + "áÃç¡à¡µ" + "áÃè" + "áÃè§" + "áÃé§" + "áÃé¹á¤é¹" + "áÃéÇ" + "áÅ" + "áÅ¡" + "áŧ" + "áŹ" + "Ᏼ" + "Ᏼì" + "áź" + "áÅÐ" + "áÅç¡â·Ê" + "áÅè" + "áÅè§" + "áÅè¹" + "áÅé" + "áÅé§" + "áÅéÇ" + "áǧ" + "áÇ´" + "áǺ" + "áÇÁ" + "áÇÇ" + "áÇÐ" + "áÇè¹" + "áÇèÇ" + "áÇé" + "áÇé§" + "áÊ" + "áÊ¡" + "áʧ" + "áÊ´" + "áÊ´§" + "áʵÁ»ì" + "áʹ" + "áʹÂÒ¡Ã" + "áʹÂÒ¹ØÀÒ¾" + "áʺ" + "áÊÁ" + "áÊ¡" + "áʧ" + "áÊÂÐ" + "áÊÃé§" + "áÊŧ" + "áÊǧ" + "áÊÐ" + "áÊè" + "áÊé" + "áÊéÁéÒ" + "áË" + "áË¡" + "á˧" + "á˧¹" + "á˧á¡ë" + "á˧è" + "á˧è§" + "á˹" + "á˹§" + "á˹º" + "á˹Á" + "á˺" + "áËÁ" + "áËÁÐ" + "áËÁè" + "áËÁèÁ" + "áËÂ" + "á˧" + "áËÂÁ" + "áËÂÐ" + "áËÂè" + "áËÂè§" + "áËÅ" + "áËÅ¡" + "áËŹ" + "áËÅÁ" + "áËÅÐ" + "áËÅè" + "áËÅè§" + "áËÇ" + "áËÇ¡" + "áËǹ" + "áËÇÐ" + "áËÇè§" + "áËÐ" + "áËè" + "áËè§" + "áËé" + "áËé§" + "áËéÇ" + "áÍ" + "áÍ¡" + "áÍ´" + "áÍ´ÇÒ¹«ì" + "áÍ´à´ÃÊ" + "á͹" + "á͹´ì" + "á͹µÒÃ졵ԡ" + "á͹µÔºÍ´Õ" + "á͹µÔਹ" + "á͹µÕé" + "áͺ" + "á;¾ÅÔपѹ" + "á;à¾Åçµ" + "áÍ¿ÃÔ¡Ò" + "áÍÁÁÔàµÍÃì" + "áÍÁá»Ãì" + "áÍÁâÁà¹ÕÂ" + "áÍÃèÁ" + "áÍÃì" + "áÍÅ" + "áÍÅ¡ÍÎÍÅì" + "áÍÅ¿Ò" + "áÍÊ¿Ñŵì" + "áÍÊä¾ÃÔ¹" + "áÍÍÑ´" + "áÍâ¹´" + "áÍè§" + "áÍè¹" + "áÍèÇ" + "áÍé" + "áÍé§áÁé§" + "áÍé´" + "áÍéÁ" + "áÍꤪÑè¹" + "áÍê´" + "áÍë" + "áÎ" + "áι´ìºÍÅ" + "áÎÁ" + "áÎÁàºÍÃìà¡ÍÃì" + "áÎÐ" + "áÎè" + "áÎè¡Öê¹" + "â¡" + "â¡¡" + "⡧" + "⡧¡Ò§" + "⡯Ô" + "⡴ѧ" + "⡹" + "â¡ÁÅ" + "â¡ÁØ·" + "â¡Â" + "â¡Ã¡" + "â¡Ã§" + "â¡Ã¸" + "â¡Ã¸Ò" + "â¡Ãè§" + "â¡Ãë¹" + "â¡Å´ì" + "â¡Å¹" + "â¡ÅÒËÅ" + "â¡ÈÅ" + "â¡Ê¹" + "â¡ÊÔ¹·Ãì" + "â¡ÊÕÂì" + "â¡ÊØÁ" + "â¡Ë¡" + "â¡àÁ¹" + "â¡â¡é" + "â¡âÃâ¡âÊ" + "â¡äÊÂ" + "â¡è§" + "â¡é" + "â¡é§â¤é§" + "â¡ë" + "â¡ë¹" + "â¢" + "⢡" + "⢧" + "⢴" + "⢹" + "⢹§" + "â¢Á" + "â¢Á§" + "â¢Á´" + "â¢Â¡" + "â¢Â§" + "â¢Âè§" + "â¢Å¡" + "â¢Å§" + "â¢è§" + "â¤" + "⤡" + "⤨Ã" + "⤵Ã" + "⤹" + "⤹Á" + "⤺Íŵì" + "â¤Á" + "â¤ÁèÒ" + "â¤Ã¡" + "â¤Ã§" + "â¤Ã§¡ÒÃ" + "â¤ÃÁ" + "â¤ÃÒª" + "â¤ÃàÁÕÂÁ" + "â¤ÃâÁâ«Á" + "â¤Ãè§" + "â¤Å" + "â¤Å§" + "â¤Å§à¤Å§" + "â¤Å¹" + "â¤Å¹¹Ôè§" + "â¤ÅÍÁàºÕÂ" + "â¤ÇµÒ" + "â¤à¤¹" + "â¤è§" + "â¤è¹" + "â¤é§" + "â¤éª" + "â¤é´" + "â¦É¡" + "â¦É³Ò" + "â¦ÉÐ" + "â¦ÉÔµ" + "â§" + "⧡" + "⧧" + "⧧১" + "⧹" + "â§à§" + "â§è" + "â§è§" + "â§è§à§è§" + "â§é§" + "â¨" + "⨡" + "⨧" + "⨧â¤Ãè§" + "⨷" + "⨷¡ì" + "⨷Âì" + "⨹" + "â¨Á" + "â¨Ã" + "â¨Ã¡ÃÃÁ" + "â¨É" + "â¨É¨Ñ¹" + "â¨è§¤ÃÖèÁ" + "â¨è§á¨é§" + "â¨ê¡" + "â¨ë§¤ÃÖèÁ" + "â©" + "⩧੧" + "â©´" + "⩹´" + "⩺" + "â©Á" + "â©Å¡" + "â©è" + "â©è§©èÒ§" + "⪡" + "⪡ع" + "⪤" + "⪴¡" + "⪴֡" + "⪵Ô" + "⪹" + "âªÂ" + "âªÇì" + "â«" + "â«¡" + "â«´Ò" + "â«Á" + "â«ÃÁ" + "â«ÅÒ" + "â«ÅÙªÑè¹" + "â«à´ÕÂÁ" + "â«àÇÕµ" + "â«è" + "â´" + "â´¡à´¡" + "â´´" + "â´¹" + "ⴹѷ" + "â´Á" + "â´ÁÔâ¹" + "â´Â" + "â´è" + "â´è§" + "â´ê»" + "âµ" + "ⵡ" + "ⵧ൧" + "âµ¹" + "âµ¹´" + "âµÁÃ" + "âµÃ¡" + "âµà¡ÕÂÇ" + "âµè§" + "âµé" + "âµé§" + "âµéâ¼" + "âµê´" + "âµêÐ" + "âµêÐÍÔËÁèÒÁ" + "â¶" + "⶧" + "ⶺ" + "â¶Á" + "â·" + "â·¡à·¡" + "â·§" + "ⷧ෧" + "â·¹" + "â·Á¹ÑÊ" + "â·Ã" + "â·Ã¤Á¹Ò¤Á" + "â·Ã·ÃÃȹì" + "â·Ã·Ñȹì" + "â·Ã¾ÔÁ¾ì" + "â·ÃÀÒ¾" + "â·ÃÁ" + "â·ÃÈѾ·ì" + "â·ÃàÅ¢" + "â·É" + "â·É·Ñ³±ì" + "â·ÉÒ¹Øâ·É" + "â·ÉÒÃÁ³ì" + "â·ÊÐ" + "â·ÊÒ¤µÔ" + "â·âÊ" + "â·è" + "â¸è" + "â¹" + "â¹¹" + "â¹ÃÒ" + "â¹ÃÕ" + "â¹è¹" + "â¹éµ" + "â¹éµºØê¡" + "â¹éµÊì" + "â¹é¹" + "â¹éÁ" + "âº" + "⺡" + "⺡¢Ã³Õ" + "⺡Õé" + "⺵" + "⺵Ñë¹" + "⺹ÑÊ" + "âºÂ" + "âºÃÁÕ¹" + "âºÃ͹" + "âºÃÒ³" + "âºÅÔàÇÕÂ" + "âºÇìÅÔè§" + "âºÊ¶ì" + "âºêàºê" + "âºë" + "â»" + "⻡" + "⻧" + "⻧ÅÒ§" + "⻹" + "â»Ã" + "â»Ã§" + "â»Ã´" + "â»ÃµÍ¹" + "â»ÃµÕ¹" + "â»ÃµØà¡Ê" + "â»ÃÂ" + "â»Ãà«Êà«ÍÃì" + "â»ÃàµÊáµ¹µì" + "â»Ãá¡ÃÁ" + "â»Ãá¡ÃÁàÁÍÃì" + "â»ÃâÁªÑ¹" + "â»ÃâÁµ" + "â»Ãè§" + "â»Ãì" + "â»ÅÔâÍ" + "â»Åè§" + "â»Ê¡ÒÃì´" + "â»ÊàµÍÃì" + "â»Ð" + "â»áŹ´ì" + "â»âÅ" + "â»è§" + "â»è§¢èÒÁ" + "â»é" + "â»é§" + "â»ê" + "â»ê¡" + "â»ê¡à¡ÍÃì" + "â»êÂà«Õ¹" + "â»êÐ" + "â¼" + "⼧" + "â¼¹" + "â¼Â" + "â¼Å¡à¼Å¡" + "â¼Å¹" + "â¼ÅÐ" + "â¼Åè" + "â¼Ð" + "â¾" + "⾡" + "⾧" + "⾧¾Ò§" + "⾫ԵÃ͹" + "⾸ÔÒ³" + "⾸ԺÑÅÅѧ¡ì" + "⾸ÔÊÁÀÒÃ" + "⾸ÔÊѵÇì" + "⾸Ôì" + "â¾¹" + "â¾¹·Ð¹Ò" + "â¾Â" + "â¾Â¡êǹ" + "â¾ÂÁ" + "â¾Ã¡" + "â¾Ã§" + "â¾Ãд¡" + "â¾ÃⵤÍÅ" + "â¾Å§" + "â¾Å¹" + "â¾ÅÐ" + "â¾Åè§" + "â¾Åé§" + "â¾Åéà¾Åé" + "â¾Ê¾" + "â¾á·Êà«ÕÂÁ" + "â¾é¹" + "â¿¡ÑÊ" + "⿹" + "â¿Åìà´ÍÃì" + "âÀ¤" + "âÀ¤Ô¹" + "âÀ¤Õ" + "âÀª¹Ð" + "âÀª¹Ò" + "âÀª¹Ò¡Ã" + "âÀª¹Ò¡ÒÃ" + "âÀª¹ÒËÒÃ" + "âÀª¹ì" + "âÁ" + "âÁ¡" + "âÁ¡¢ì" + "âÁ¦¡ÃÃÁ" + "âÁ¦ÊÑÒ" + "âÁ¦Ð" + "âÁ¦Õ¡ÃÃÁ" + "âÁ¦ÕÂÐ" + "âÁ§" + "âÁ§¤ÃØèÁ" + "âÁ´ÙÅ" + "âÁ·¹Ò" + "âÁÅÔº´Õ¹ÑÁ" + "âÁÅÕ" + "âÁËÐ" + "âÁËѹ¸ì" + "âÁËÒ¤µÔ" + "âÁà´Å" + "âÁà´çÁ" + "âÁàÁ" + "âÁàÁ¹µì" + "âÁàÅ¡ØÅ" + "âÁàÊ¡" + "âÁàÊÊ" + "âÁâ¹" + "âÁâË" + "âÁä¹Â" + "âÁè" + "âÁè§" + "âÁé" + "âÂ" + "â¡" + "⡵Ãì" + "â¤Ð" + "â¤Õ" + "â§" + "⪹ì" + "â¸Ò" + "â¸Թ" + "â¹" + "â¹Õ" + "âÂÁ" + "âÂàÂ" + "âÂâÊ" + "âÂè§" + "âÂè§âÂè" + "âÂé" + "âÃ" + "âä" + "âä¨ÔµàÀ·" + "âäÒ" + "âäҾҸ" + "âç" + "âç¤ÑÅ" + "âçàÃÕ¹" + "âçáÃÁ" + "âè" + "âè¹ì" + "âõÕ" + "âø" + "âøÃ" + "âÃÁ" + "âÃÁѹ" + "âÃÁÒà¹ÕÂ" + "âÃÂ" + "âÃÉ" + "âÃËÔµ" + "âÃà¹ÕÂÇ" + "âÃè" + "âÅ¡" + "âÅ¡ÇÔ·Ù" + "âšѹµÃì" + "âÅ¡Ò" + "âÅ¡Ò¸Ôº´Õ" + "âÅ¡Ò¸ÔäµÂ" + "âÅ¡ÒÁÔÊ" + "âÅ¡ÒÇÔ¹ÒÈ" + "âÅ¡ÔÂÐ" + "âÅ¡ÕÂÇѵÃ" + "âÅ¡ÕÂì" + "âšصøÃÃÁ" + "âšصÃÐ" + "âŧ" + "âŨ¹Ð" + "âųÐ" + "âÅ´" + "âŵÑÊ" + "âŹ" + "âÅÀ" + "âÅÁ" + "âÅÁÒ" + "âÅËÐ" + "âÅËѪ" + "âÅËÔµ" + "âÅÐ" + "âÅàÅ" + "âÅè" + "âÅè§" + "âÅé" + "âÅé¹" + "âÇ" + "âÇÂ" + "âÇÂÇÒÂ" + "âÇËÒÃ" + "âÇè" + "âÇè§" + "âÇéÂ" + "âÇéàÇé" + "âÈ¡" + "âÈ¡Ò" + "âÈ¡Ò´ÙÃ" + "âÈ¡ÒÅÑÂ" + "âÈ¡Õ" + "âÊ" + "âʡѹµì" + "âʳ" + "âʳ±ì" + "âÊ´" + "âÊ´Ò" + "âʴҺѹ" + "âʵ" + "âÊ·¡" + "âÊ·Ã" + "âʸ¡" + "âʸ¹Ð" + "âʹ" + "âÊÀ³" + "âÊÀÒ" + "âÊÀÔ³Õ" + "âÊÀÕ" + "âÊÁ" + "âÊÁ¹ÑÊ" + "âÊÁÁ" + "âÊÁÂì" + "âÊè" + "âÊÃè§" + "âÊÇÃó" + "âÊËØéÂ" + "âÊÌÊ" + "âÊàÀ³Õ" + "âÊâ¤Ã¡" + "â˧" + "âË´" + "â˹" + "â˹¡" + "â˹è§" + "âËÁ" + "âËÁ´" + "âËÁè§" + "âËÂ" + "âË¡àË¡" + "â˧" + "âËÂè§" + "âËÃ" + "âËçàËç" + "âËÃоÒ" + "âËÃÒ" + "âËÃÒ¨ÒÃÂì" + "âËÃÒÈÒʵÃì" + "âËÅ" + "âËŧâ¨é§" + "âËŹ" + "âËÅè" + "âËÇ" + "âËÇ¡àËÇ¡" + "âËǧ" + "âËÇ´" + "âËǵ" + "âËÇè" + "âËè" + "âÍ" + "âÍ¡" + "âÍ¡ÒÊ" + "âÍ¡Ô¹ÒÇÒ" + "âͧ¡ÒÃ" + "âͧ⢴§" + "âͪÐ" + "âͪÒ" + "âÍ´" + "â͵µÑ»»Ð" + "â͹" + "âͺ" + "âÍÀÒ" + "âÍÀÒÊ" + "âÍÁ" + "âÍÂ" + "âÍÃÊ" + "âÍÅоèÍ" + "âÍÅÔÁ»Ô¡" + "âÍÇÒ·" + "âÍÉ°ÀÑÂ" + "âÍÉ°ì" + "âÍʶ" + "âÍËѧ" + "âÍËìÁ" + "âÍÌÒÃ" + "âÍÌÒÃÔ¡" + "âÍÌÒÃÖ¡" + "âÍ໡" + "âÍàÅÕé§" + "âÍàÇÍÃì" + "âÍàÍ«ÔÊ" + "âÍàÍÊ" + "âÍ⫹" + "âÍè" + "âÍè§" + "âÍèÍèÒ" + "âÍé" + "âÍé¡" + "âÍéàÍé" + "âÍéâÅÁ" + "âÍéâÎ" + "âÍê¡" + "âÍêÂ" + "âÍë" + "âÎ" + "âΡ" + "âÎÁ" + "âÎÅìÁ" + "âÎʵì" + "âÎÊàµÊ" + "âÎàµçÅ" + "ã¡Åé" + "ã¤Ã" + "ã¤Ãè" + "ã¨" + "ãªè" + "ãªé" + "ã´" + "ãµé" + "ã¹" + "ã¹ËÅǧ" + "ãº" + "ãºé" + "ã½è" + "ãÂ" + "ãÊ" + "ãÊè" + "ãËè" + "ãËÁè" + "ãËé" + "ä¡" + "ä¡Ã" + "ä¡ÃÅÒÊ" + "ä¡ÃÈÃ" + "ä¡ÃÊÃ" + "ä¡Å" + "ä¡Åè" + "ä¡Ç" + "ä¡è" + "ä¡ê´ì" + "ä¡ë" + "ä¢" + "ä¢Çè" + "ä¢Çé" + "ä¢Ê×Í" + "ä¢è" + "ä¢è´Ñ¹" + "ä¢èÁØ¡" + "ä¢é" + "ä¤" + "ä¤Ãé" + "ä¤Å" + "ä¤ÅàÍç¹µì" + "ä¤Åá͹µì" + "ä¤Åé" + "ä¤é" + "ä§" + "ä¨" + "䩹" + "ä©äÅ" + "äª" + "äªÂ" + "äªâÂ" + "ä«" + "䫵ì" + "䫹ì" + "䫺ÕàÃÕÂ" + "ä«»ÃÑÊ" + "ä«ÂÒä¹´ì" + "ä«Ãé" + "ä«à¡ÔÅ" + "ä«àºÍÃì" + "ä«àù" + "ä«â¤Å¹" + "ä«âÅ" + "ä«é" + "ä´" + "ä´¹ÒâÁ" + "ä´¹ÒäÁµì" + "ä´ÃàÇÍÃì" + "ä´Ãì¿" + "ä´ÍÐÅçÍ¡" + "ä´ÍÐÅçÍ¡ºçÍ¡«ì" + "ä´ÍÒÃÕè" + "ä´àá·ÍÃÕ" + "ä´â¹àÊÒÃì" + "ä´é" + "äµ" + "äµÃ" + "äµÃÁÒÊ" + "äµÃèµÃͧ" + "äµè" + "äµé" + "äµé¡ë§" + "äµé½Øè¹" + "äµéËÇѹ" + "äµë" + "ä¶" + "ä¶Å" + "ä¶è" + "ä¶é" + "ä·" + "ä·¡Í" + "ä·¿Í´ì" + "ä·Â" + "ä·ÂÃÑ°" + "ä·Ã" + "ä·ÃÍ´ì" + "ä·à·à¹ÕÂÁ" + "ä·é" + "ä¹" + "ä¹µì¤ÅѺ" + "ä¹Å͹" + "ä¹Åì" + "ä¹âµÃਹ" + "亵ì" + "äºÍÍÊ" + "äºàºÔÅ" + "ä»" + "ä»ÂÒÅ" + "ä»ÃɳÕºÃó" + "ä»ÃɳÕºѵÃ" + "ä»ÃɳÕÂÀѳ±ì" + "ä»ÃɳÕÂÇѵ¶Ø" + "ä»ÃɳÕÂÒ¡Ã" + "ä»ÃɳÕÂì" + "ä»Åè" + "ä»è" + "ä»ë" + "ä¼" + "ä¼·" + "ä¼è" + "ä½" + "ä¾" + "侨ԵÃ" + "ä¾±ÙÃÂì" + "侺ÙÅÂì" + "ä¾Ã" + "ä¾Ã¨ÔµÃ" + "ä¾Ã±ÙÃÂì" + "ä¾ÃѪ" + "ä¾ÃÔ¹" + "ä¾ÃÕ" + "ä¾Ãè" + "ä¾ÅÔ¹" + "ä¾Åè" + "ä¾ÈÒÅ" + "ä¾àÃÒÐ" + "ä¾âè¹ì" + "ä¾è" + "ä¾è»êÍ¡" + "ä¿" + "ä¿Åì" + "ä¿á¹¹«ì" + "äÁ¤Ã͹" + "äÁµÃÕ" + "äÁÂÃÒº" + "äÁÅì" + "äÁâ¤Ã" + "äÁâ¤Ã«Í¿·ì" + "äÁâ¤ÃàÇ¿" + "äÁâ¤Ã⿹" + "äÁè" + "äÁé" + "äÂ" + "äÂè" + "äÃ" + "äÃè" + "äÃé" + "äÅÂ" + "äÅૹÊì" + "äÅè" + "äÅèàÅÕèÂ" + "äÅé" + "äÇ" + "äÇ¡Ù³°ì" + "äDZÙÃÂì" + "äÇ·Âì" + "äǹì" + "äǾ¨¹ì" + "äÇÂҡóì" + "äÇÂÒÇѨ¡Ã" + "äÇÂÒÇѨÁÑÂ" + "äÇÃÑÊ" + "äÇâÍÅÔ¹" + "äÇé" + "äÈÅ" + "äÊ" + "äÊÂ" + "äÊÂÒ" + "äÊÃé" + "äÊÇ" + "äÊé" + "äË" + "ä˹" + "äËÁ" + "äËÁé" + "äËÃè" + "äËÅ" + "äËÅè" + "äËÇ" + "äËÇé" + "äËËÅÓ" + "äËè" + "äËé" + "äÍ" + "äͤ͹" + "äÍ·Õ" + "äͺÕàÍçÁ" + "äÍÂÃÒ" + "äÍÂàÃÈ" + "äÍÃÒÇѳ" + "äÍÃìᏴì" + "äÍÈ¡ÃÕÁ" + "äÍÈÇÃÃÂì" + "äÍÈÙÃÂì" + "äÍÍ͹" + "äÍâ«â·»" + "äÍâÍ´Õ¹" + "äÍé" + "äδÃÒ" + "äÎâ¡ÃÁÔàµÍÃì" + "äÎâ´Ã¤ÒÃìºÍ¹" + "äÎâÅ" + ))) + (setq thai-word-table (list 'thai-words)) + (while l + (set-nested-alist (car l) 1 thai-word-table) + (setq l (cdr l)))) + + +(defun thai-update-word-table (file &optional append) + "Update Thai word table by replacing the current word list with +FILE. If called with a prefix argument, FILE is appended instead to +the current word list." + (interactive "FThai word table file: \nP") + (let ((buf (generate-new-buffer "*thai-work*")) + (coding-system-for-read 'thai-tis620) + (table (if append thai-word-table (list 'thai-words)))) + (unwind-protect + (save-excursion + (set-buffer buf) + (insert-file-contents file) + (goto-char (point-min)) + (while (re-search-forward "\\ct+" nil t) + (set-nested-alist (match-string 0) 1 table))) + (kill-buffer buf)) + (setq thai-word-table table))) + + +;; Two special Thai characters regarded as suffix of words. + +(defconst thai-MaiYaMok (make-char 'thai-tis620 ?\xE6)) +(defconst thai-PaiYanNoi (make-char 'thai-tis620 ?\xCF)) + + +;; Find Thai words starting at POS and return a list of positions of +;; the Thai word ends. It doesn't move point. LIMIT limits the +;; maximum position. IGNORE is a list of positions to ignore. It is +;; assumed that all following characters to LIMIT are Thai. If the +;; following char is not Thai (i.e., POS is equal to LIMIT), return t. +;; +;; Note that the longest word position comes first. + +(defun thai-find-word-ends (pos limit &optional ignore) + (if (>= pos limit) + t + (let* ((char (char-after pos)) + (this (cdr (assq char (cdr thai-word-table)))) + category-set + positions) + ;; Look up the following character sequence in `thai-word-table' + ;; character by character. + (while this + (setq pos (1+ pos) + char (char-after pos) + category-set (char-category-set char)) + ;; If the current sequence is recorded in `thai-word-table' + ;; (i.e. (car THIS) is 1) and the following Thai character is + ;; not an upper-vowel, lower-vowel, or tone-mark, we have + ;; found a possible word ending position. + (if (and (eq (car this) 1) + (not (or (aref category-set ?2) + (aref category-set ?3) + (aref category-set ?4)))) + (progn + ;; Skip possible Thai suffices. + (while (or (eq char thai-MaiYaMok) (eq char thai-PaiYanNoi)) + (setq pos (1+ pos) + char (char-after pos))) + ;; Skip character positions in IGNORE list. + (or (memq pos ignore) + (setq positions (cons pos positions))))) + ;; Set up next loop. + (setq this (and (< pos limit) (cdr (assq char this))))) + positions))) + + +;; Move point forward to the end of Thai word which follows point and +;; update VEC. VEC is a vector of three elements used to cache word +;; end positions. The Nth element, if non-nil, is a list of end +;; points of the Nth word, or t indicating that there is no Thai +;; character. LIMIT limits the point movement. + +(defun thai-forward-word-update-info (vec limit) + (let ((pos (point)) + v0 v1 v2 v3 + second-best + tried + positions) + (if + ;; If four succeeding Thai words are found, throw t, otherwise + ;; throw nil. + (catch 'tag + ;; Start with first vector element. + (setq v0 (aref vec 0)) + (unless v0 + ;; Update VEC if V0 is empty. + (setq v0 (thai-find-word-ends pos limit)) + (aset vec 0 v0) + (aset vec 1 nil)) + ;; In case we haven't found any wordbreaks resp. point has + ;; reached LIMIT, exit the catch body. + (if (symbolp v0) ; i.e. nil or t? + (throw 'tag nil)) + ;; OK, V0 holds possible word ends for the current position. + ;; We save V0 for later reference. + (setq tried v0) + (setq v1 (aref vec 1)) + ;; Now we try all end word positions to find the next word. + (while v0 + (setq pos (car v0)) + (unless v1 + ;; Update VEC if V1 is empty, ignoring positions already + ;; found -- for Thai, we need the longest match, so if + ;; we have + ;; + ;; start(long-word) = start(short-word1) + ;; end(short-word1) = start(short-word2) + ;; end(short-word2) = end(long-word) + ;; + ;; only long-word is used. + (setq v1 (thai-find-word-ends pos limit tried)) + (aset vec 1 v1) + (aset vec 2 nil)) + ;; If point has reached LIMIT, exit the catch body. + (if (eq v1 t) + (throw 'tag t)) + ;; Save SECOND-BEST, if this hasn't been done already. + ;; The `second best' solution is the end position of the + ;; longest first word followed by the longest second word. + (or second-best + (not v1) + (setq second-best (cons v0 v1))) + ;; Update the already tried end word positions. + (setq tried (append tried v1)) + ;; Now repeat the whole process to find a third word. + (when v1 + (setq v2 (aref vec 2)) + (while v1 + (setq pos (car v1)) + (unless v2 + (setq v2 (thai-find-word-ends pos limit tried)) + (aset vec 2 v2)) + (if (eq v2 t) + (throw 'tag t)) + (setq tried (append tried v2)) + ;; And the same for a fourth word. + (while v2 + (setq pos (car v2)) + (setq v3 (thai-find-word-ends pos limit tried)) + (if v3 + (throw 'tag t)) + (setq v2 (cdr v2))) + (setq v1 (cdr v1)))) + (setq v0 (cdr v0))) + ;; No success. + nil) + (progn + ;; We found four succeeding Thai words (or LIMIT has been + ;; reached). Move to the end of the first word. + (goto-char (car v0)) + ;; Update VEC for the next function call. If no larger word + ;; positions have been found, set the corresponding vector + ;; element to nil. + (if (and (consp v1) (< (car v1) (car (aref vec 1)))) + (aset vec 0 nil) + (aset vec 0 v1) + (if (and (consp v2) (< (car v2) (car (aref vec 2)))) + (aset vec 1 nil) + (aset vec 1 v2) + (aset vec 2 v3)))) ; exit function successfully + + ;; We didn't find four consecutive words. If we have found a + ;; `second best' solution and the length of those two words is + ;; longer than the longest word we can see at the current point, + ;; adopt the second best solution. This decision is based on + ;; heuristic tests. + (if (and second-best + (< (car (aref vec 0)) (car (cdr second-best)))) + (progn + (goto-char (car (car second-best))) + (aset vec 0 (cdr second-best))) + ;; We finally failed to find a word break. For Thai, the best + ;; solution is to extend the first longest word so that the + ;; end point starts a second word. + (setq pos (or (car (aref vec 0)) pos)) + (while (and (< pos limit) + (not (setq positions (thai-find-word-ends pos limit)))) + (setq pos (1+ pos))) + (goto-char pos) + (aset vec 0 positions)) + (aset vec 1 nil) + nil))) + + +;; Return a list of Thai word boundary positions after the current +;; point. LIMIT, if non-nil, limits the region to check. + +(defun thai-find-word-boundaries (&optional limit) + (or limit + (setq limit (point-max))) + (save-excursion + (let ((vec (make-vector 3 nil)) + (boundaries nil) + this-limit) + ;; Loop over all (consecutive) Thai regions by using the + ;; character property `t' until LIMIT is reached. + (while (and (< (point) limit) + (re-search-forward "\\ct+" nil t)) + (setq this-limit (point)) + (goto-char (match-beginning 0)) + (fillarray vec nil) + ;; Check the first word, initializing VEC. + (thai-forward-word-update-info vec this-limit) + ;; Then loop over the remaining words in the current Thai + ;; region, collecting the boundaries. + (while (< (point) this-limit) + (setq boundaries (cons (point) boundaries)) + (thai-forward-word-update-info vec this-limit))) + boundaries))) + + +(defun thai-break-words (separator &optional limit) + "Break Thai words by inserting a separator string at word boundaries." + (interactive "sSeparator: ") + (save-excursion + (let ((boundaries (thai-find-word-boundaries limit))) + (while boundaries + (goto-char (car boundaries)) + (insert separator) + (setq boundaries (cdr boundaries)))))) + + +(defun thai-forward-word (count) + "Move point forward COUNT words considering Thai word boundaries. +If COUNT is negative, move point backward (- COUNT) words." + (interactive "p") + (if (> count 0) + (while (> count 0) + (skip-syntax-forward "^w") + (if (looking-at "\\ct+") + ;; We have reached a Thai region, so we must do something + ;; special instead of using forward-word. + (let ((start (point)) + (limit (match-end 0)) + boundaries + tail) + ;; If thai-forward-word has been called within a Thai + ;; region, we must go back until the Thai region starts + ;; to do the contextual analysis for finding word + ;; breaks. + (while (aref (char-category-set (preceding-char)) ?t) + (forward-char -1)) + ;; OK, we ask for the list of word boundaries in + ;; reversed order. + (setq boundaries (nreverse (thai-find-word-boundaries limit))) + ;; Now we search for the next boundary after START. + (while (and boundaries (<= (car boundaries) start)) + (setq boundaries (cdr boundaries))) + ;; Adjust loop for next while loop. + (setq count (1- count)) + ;; Now we skip Thai words until the BOUNDARIES list is + ;; empty or count-1 words have been passed. + (if (not boundaries) + (goto-char limit) + (while (and (> count 0) + boundaries) + (setq boundaries (cdr boundaries) + count (1- count))) + ;; If BOUNDARIES is empty, the word counter is not + ;; zero yet (remember that we have decreased COUNT by + ;; one), so we go to LIMIT. Otherwise go to next + ;; boundary. + (if boundaries + (goto-char (car boundaries)) + (goto-char limit)))) + ;; No Thai region. + (forward-word 1) + (setq count (1- count)))) + ;; The symmetrical action for negative values. + (if (< count 0) + (while (< count 0) + (skip-syntax-backward "^w") + (if (aref (char-category-set (preceding-char)) ?t) + (let ((start (point)) + (limit (if (looking-at "\\ct+") (match-end 0) + (point))) + boundaries) + (forward-char -1) + (while (aref (char-category-set (preceding-char)) ?t) + (forward-char -1)) + (setq boundaries (thai-find-word-boundaries limit)) + (while (and boundaries (>= (car boundaries) start)) + (setq boundaries (cdr boundaries))) + (setq count (1+ count)) + (if boundaries + (progn + (while (and (< count 0) boundaries) + (setq boundaries (cdr boundaries) + count (1+ count))) + (if boundaries + (goto-char (car boundaries)))))) + (forward-word -1) + (setq count (1+ count))))))) + + +(defun thai-backward-word (count) + "Move point backward COUNT words considering Thai word boundaries. +If COUNT is negative, move point forward (- COUNT) words." + (interactive "p") + (thai-forward-word (- count))) + + +(provide 'thai-word) + + +;; Local Variables: +;; coding: tis-620 +;; End: + +;; end of thai-word.el diff --git a/Master/texmf-dist/source/latex/cjk/utils/lisp/mule-2.3/cjk-enc.el b/Master/texmf-dist/source/latex/cjk/utils/lisp/mule-2.3/cjk-enc.el new file mode 100644 index 00000000000..9f484d49349 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/lisp/mule-2.3/cjk-enc.el @@ -0,0 +1,625 @@ +;;; cjk-enc.el --- provide a coding system for LaTeX2e CJK package + +;; Copyright (C) 1996, 1998 Electrotechnical Laboratory, JAPAN. + +;; Author: Kenichi HANDA <handa@etl.go.jp> +;; Werner LEMBERG <wl@gnu.org> + +;; Keywords: CJK package, LaTeX2e, mule + +;; 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, 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 GNU Emacs; see the file COPYING. If not, write to +;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + +;; +;; CJK Version 4.8.0 (22-May-2008) +;; + +;;; Code + +;; The following tables map from Mule's internal encoding to LaTeX2e +;; macros. Note that not all macros defined here really do exist. See +;; MULEenc.sty and cjk-enc.txt for further details. +;; +;; The active TeX character 0x80 is defined as a multiplex command which +;; executes its first argument. To make the macro expansion robust +;; against \uppercase and \lowercase, numbers are used as parameters which +;; index the various commands. +;; +;; 0xFF will be used as a parameter delimiting character. + +(defconst cjk-latin-1 + [;0xa0 + "99\177" "1\177" "2\177" "3\177" + "4\177" "5\177" "6\177" "7\177" + "8\177\\ " "9\177" "10\177" "11\177" + "12\177" "0\177-{}" "14\177" "15\177\\ " + + ; 0xb0 + "16\177" "17\177" "18\177" "19\177" + "20\177\\ " "21\177" "22\177" "23\177" + "24\177\\ " "25\177" "26\177" "27\177" + "28\177" "29\177" "30\177" "31\177" + + ; 0xc0 + "32\177A" "20\177A" "33\177A" "34\177A" + "8\177A" "0\177\\AA" "0\177\\AE" "24\177C" + "32\177E" "20\177E" "33\177E" "8\177E" + "32\177I" "20\177I" "33\177I" "8\177I" + + ; 0xd0 + "0\177\\DJ" "34\177N" "32\177O" "20\177O" + "33\177O" "34\177O" "8\177O" "38\177" + "0\177\\O" "32\177U" "20\177U" "33\177U" + "8\177U" "20\177Y" "0\177\\TH" "0\177\\ss" + + ; 0xe0 + "32\177a" "20\177a" "33\177a" "34\177a" + "8\177a" "0\177\\aa" "0\177\\ae" "24\177c" + "32\177e" "20\177e" "33\177e" "8\177e" + "32\177\\i" "20\177\\i" "33\177\\i" "8\177\\i" + + ; 0xf0 + "0\177\\dj" "34\177n" "32\177o" "20\177o" + "33\177o" "34\177o" "8\177o" "45\177" + "0\177\\o" "32\177u" "20\177u" "33\177u" + "8\177u" "20\177y" "0\177\\th" "8\177y" + ]) + +(defconst cjk-latin-2 + [; 0xa0 + "99\177" "48\177A" "49\177\\ " "0\177\\L" + "4\177" "51\177L" "20\177S" "7\177" + "8\177\\ " "51\177S" "24\177S" "51\177T" + "20\177Z" "0\177-{}" "51\177Z" "52\177Z" + + ; 0xb0 + "16\177" "48\177a" "48\177\\ " "0\177\\l" + "20\177\\ " "51\177l" "20\177s" "51\177\\ " + "24\177\\ " "51\177s" "24\177s" "51\177t" + "20\177z" "55\177\\ " "51\177z" "52\177z" + + ; 0xc0 + "20\177R" "20\177A" "33\177A" "49\177A" + "8\177A" "20\177L" "20\177C" "24\177C" + "51\177C" "20\177E" "48\177E" "8\177E" + "51\177E" "20\177I" "33\177I" "51\177D" + + ; 0xd0 + "0\177\\DJ" "20\177N" "51\177N" "20\177O" + "33\177O" "55\177O" "8\177O" "38\177" + "51\177R" "53\177U" "20\177U" "55\177U" + "8\177U" "20\177Y" "24\177T" "0\177\\ss" + + ; 0xe0 + "20\177r" "20\177a" "33\177a" "49\177a" + "8\177a" "20\177l" "20\177c" "24\177c" + "51\177c" "20\177e" "48\177e" "8\177e" + "51\177e" "20\177\\i" "33\177\\i" "51\177d" + + ; 0xf0 + "0\177\\dj" "20\177n" "51\177n" "20\177o" + "33\177o" "55\177o" "8\177o" "45\177" + "51\177r" "53\177u" "20\177u" "55\177u" + "8\177u" "20\177y" "24\177t" "52\177\\ " + ]) + +(defconst cjk-latin-3 + [; 0xa0 + "99\177" "0\177\\TEXTMALTESEH" "49\177\\ " "3\177" + "4\177" "" "33\177H" "7\177" + "8\177\\ " "52\177I" "24\177S" "49\177G" + "33\177J" "0\177-{}" "" "52\177Z" + + ; 0xb0 + "16\177" "0\177\\textmalteseh" "18\177" "19\177" + "20\177\\ " "21\177" "33\177h" "23\177" + "24\177\\ " "0\177\\i" "24\177s" "49\177g" + "33\177\\j" "29\177" "" "52\177z" + + ; 0xc0 + "32\177A" "20\177A" "33\177A" "" + "8\177A" "52\177C" "33\177C" "24\177C" + "32\177E" "20\177E" "33\177E" "8\177E" + "32\177I" "20\177I" "33\177I" "8\177I" + + ; 0xd0 + "" "34\177N" "32\177O" "20\177O" + "33\177O" "52\177G" "8\177O" "38\177" + "33\177G" "32\177U" "20\177U" "33\177U" + "8\177U" "49\177U" "33\177S" "0\177\\ss" + + ; 0xe0 + "32\177a" "20\177a" "33\177a" "" + "8\177a" "52\177c" "33\177c" "24\177c" + "32\177e" "20\177e" "33\177e" "8\177e" + "32\177\\i" "20\177\\i" "33\177\\i" "8\177\\i" + + ; 0xf0 + "" "34\177n" "32\177o" "20\177o" + "33\177o" "52\177g" "8\177o" "45\177" + "33\177g" "32\177u" "20\177u" "33\177u" + "8\177u" "49\177u" "33\177s" "52\177\\ " + ]) + +(defconst cjk-latin-4 + [; 0xa0 + "99\177" "48\177A" "59\177" "24\177R" + "4\177" "34\177I" "24\177L" "7\177" + "8\177\\ " "51\177S" "15\177E" "24\177G" + "0\177\\TEXTTSTROKE" "0\177-{}" "51\177Z" "15\177\\ " + + ; 0xb0 + "16\177" "48\177a" "48\177\\ " "24\177r" + "20\177\\ " "34\177\\i" "24\177l" "51\177\\ " + "24\177\\ " "51\177s" "15\177e" "24\177g" + "0\177\\texttstroke" "0\177\\NG" "51\177z" "0\177\\ng" + + ; 0xc0 + "15\177A" "20\177A" "33\177A" "34\177A" + "8\177A" "0\177\\AA" "0\177\\AE" "48\177I" + "51\177C" "20\177E" "48\177E" "8\177E" + "52\177E" "20\177I" "33\177I" "15\177I" + + ; 0xd0 + "0\177\\DJ" "24\177N" "15\177O" "24\177K" + "33\177O" "34\177O" "8\177O" "38\177" + "0\177\\O" "48\177U" "20\177U" "33\177U" + "8\177U" "34\177U" "15\177U" "0\177\\ss" + + ; 0xe0 + "15\177a" "20\177a" "33\177a" "34\177a" + "8\177a" "0\177\\aa" "0\177\\ae" "48\177i" + "51\177c" "20\177e" "48\177e" "8\177e" + "52\177e" "20\177\\i" "33\177\\i" "15\177\\i" + + ; 0xf0 + "0\177\\dj" "24\177n" "15\177o" "24\177k" + "33\177o" "34\177o" "8\177o" "45\177" + "0\177\\o" "48\177u" "20\177u" "33\177u" + "8\177u" "34\177u" "15\177u" "52\177\\ " + ]) + +(defconst cjk-latin-5 ; ISO 8859-9 + [; 0xa0 + "99\177" "1\177" "2\177" "3\177" + "4\177" "5\177" "6\177" "7\177" + "8\177\\ " "9\177" "10\177" "11\177" + "12\177" "0\177-{}" "14\177" "15\177\\ " + + ; 0xb0 + "16\177" "17\177" "18\177" "19\177" + "20\177\\ " "21\177" "22\177" "23\177" + "24\177\\ " "25\177" "26\177" "27\177" + "28\177" "29\177" "30\177" "31\177" + + ; 0xc0 + "32\177A" "20\177A" "33\177A" "34\177A" + "8\177A" "0\177\\AA" "0\177\\AE" "24\177C" + "32\177E" "20\177E" "33\177E" "8\177E" + "32\177I" "20\177I" "33\177I" "8\177I" + + ; 0xd0 + "49\177G" "34\177N" "32\177O" "20\177O" + "33\177O" "34\177O" "8\177O" "38\177" + "0\177\\O" "32\177U" "20\177U" "33\177U" + "8\177U" "52\177I" "24\177S" "0\177\\ss" + + ; 0xe0 + "32\177a" "20\177a" "33\177a" "34\177a" + "8\177a" "0\177\\aa" "0\177\\ae" "24\177c" + "32\177e" "20\177e" "33\177e" "8\177e" + "32\177\\i" "20\177\\i" "33\177\\i" "8\177\\i" + + ; 0xf0 + "49\177g" "34\177n" "32\177o" "20\177o" + "33\177o" "34\177o" "8\177o" "45\177" + "0\177\\o" "32\177u" "20\177u" "33\177u" + "8\177u" "0\177\\i" "24\177s" "8\177y" + ]) + +(defconst cjk-latin-jisx ; JIS X 0201 lower half + [; 0xa0 + "" "0\177!" "37\177" "0\177\\#" + "39\177" "0\177\\%" "0\177\\&" "40\177" + "0\177(" "0\177)" "0\177*" "0\177+" + "0\177," "0\177-" "0\177." "0\177/" + + ; 0xb0 + "0\1770" "0\1771" "0\1772" "0\1773" + "0\1774" "0\1775" "0\1776" "0\1777" + "0\1778" "0\1779" "0\177:" "0\177;" + "41\177" "0\177=" "42\177" "0\177?" + + ; 0xc0 + "36\177" "0\177A" "0\177B" "0\177C" + "0\177D" "0\177E" "0\177F" "0\177G" + "0\177H" "0\177I" "0\177J" "0\177K" + "0\177L" "0\177M" "0\177N" "0\177O" + + ; 0xd0 + "0\177P" "0\177Q" "0\177R" "0\177S" + "0\177T" "0\177U" "0\177V" "0\177W" + "0\177X" "0\177Y" "0\177Z" "0\177[" + "5\177" "0\177]" "43\177" "44\177" + + ; 0xe0 + "46\177" "0\177a" "0\177b" "0\177c" + "0\177d" "0\177e" "0\177f" "0\177g" + "0\177h" "0\177i" "0\177j" "0\177k" + "0\177l" "0\177m" "0\177n" "0\177o" + + ; 0xf0 + "0\177p" "0\177q" "0\177r" "0\177s" + "0\177t" "0\177u" "0\177v" "0\177w" + "0\177x" "0\177y" "0\177z" "47\177" + "50\177" "54\177" "56\177" "" + ]) + +(defconst cjk-cyrillic ; ISO 8859-5 + [; 0xa0 + "99\177" "0\177\\CYRYO" "0\177\\CYRDJE" "20\177\\CYRG" + "0\177\\CYRIE" "0\177\\CYRDZE" "0\177\\CYRII" "0\177\\CYRYI" + "0\177\\CYRJE" "0\177\\CYRLJE" "0\177\\CYRNJE" "0\177\\CYRTSHE" + "20\177\\CYRK" "0\177-{}" "0\177\\CYRUSHRT" "0\177\\CYRDZHE" + + ; 0xb0 + "0\177\\CYRA" "0\177\\CYRB" "0\177\\CYRV" "0\177\\CYRG" + "0\177\\CYRD" "0\177\\CYRE" "0\177\\CYRZH" "0\177\\CYRZ" + "0\177\\CYRI" "0\177\\CYRISHRT" "0\177\\CYRK" "0\177\\CYRL" + "0\177\\CYRM" "0\177\\CYRN" "0\177\\CYRO" "0\177\\CYRP" + + ; 0xc0 + "0\177\\CYRR" "0\177\\CYRS" "0\177\\CYRT" "0\177\\CYRU" + "0\177\\CYRF" "0\177\\CYRH" "0\177\\CYRC" "0\177\\CYRCH" + "0\177\\CYRSH" "0\177\\CYRSHCH" "0\177\\CYRHRDSN" "0\177\\CYRERY" + "0\177\\CYRSFTSN" "0\177\\CYREREV" "0\177\\CYRYU" "0\177\\CYRYA" + + ; 0xd0 + "0\177\\cyra" "0\177\\cyrb" "0\177\\cyrv" "0\177\\cyrg" + "0\177\\cyrd" "0\177\\cyre" "0\177\\cyrzh" "0\177\\cyrz" + "0\177\\cyri" "0\177\\cyrishrt" "0\177\\cyrk" "0\177\\cyrl" + "0\177\\cyrm" "0\177\\cyrn" "0\177\\cyro" "0\177\\cyrp" + + ; 0xe0 + "0\177\\cyrr" "0\177\\cyrs" "0\177\\cyrt" "0\177\\cyru" + "0\177\\cyrf" "0\177\\cyrh" "0\177\\cyrc" "0\177\\cyrch" + "0\177\\cyrsh" "0\177\\cyrshch" "0\177\\cyrhrdsn" "0\177\\cyrery" + "0\177\\cyrsftsn" "0\177\\cyrerev" "0\177\\cyryu" "0\177\\cyrya" + + ; 0xf0 + "35\177" "0\177\\cyryo" "0\177\\cyrdje" "20\177\\cyrg" + "0\177\\cyrie" "0\177\\cyrdze" "0\177\\cyrii" "0\177\\cyryi" + "0\177\\cyrje" "0\177\\cyrlje" "0\177\\cyrnje" "0\177\\cyrtshe" + "20\177\\cyrk" "7\177" "0\177\\cyrushrt" "0\177\\cyrdzhe" + ]) + +(defconst cjk-greek ; ISO 8859-7 + [;0xa0 + "99\177" "0\177<{}" "0\177>{}" "3\177" + "" "" "6\177" "7\177" + "8\177\\ " "9\177" "" "0\177((" + "12\177" "0\177-{}" "" "0\177---" + + ; 0xb0 + "16\177" "17\177" "18\177" "19\177" + "0\177'{}" "0\177\"'{}" "0\177'A" "0\177;" + "0\177'E" "0\177'H" "0\177'I" "0\177))" + "0\177'O" "29\177" "0\177'U" "0\177'W" + + ; 0xc0 + "0\177\"'i" "0\177A" "0\177B" "0\177G" + "0\177D" "0\177E" "0\177Z" "0\177H" + "0\177J" "0\177I" "0\177K" "0\177L" + "0\177M" "0\177N" "0\177X" "0\177O" + + ; 0xd0 + "0\177P" "0\177R" "" "0\177S" + "0\177T" "0\177U" "0\177F" "0\177Q" + "0\177Y" "0\177W" "0\177\"I" "0\177\"U" + "0\177'a" "0\177'e" "0\177'h" "0\177'i" + + ; 0xe0 + "0\177\"'u" "0\177a" "0\177b" "0\177g" + "0\177d" "0\177e" "0\177z" "0\177h" + "0\177j" "0\177i" "0\177k" "0\177l" + "0\177m" "0\177n" "0\177x" "0\177o" + + ; 0xf0 + "0\177p" "0\177r" "0\177c" "0\177s" + "0\177t" "0\177u" "0\177f" "0\177q" + "0\177y" "0\177w" "0\177\"i" "0\177\"u" + "0\177'o" "0\177'u" "0\177'w" "" + ]) + +(defconst cjk-viscii-lower + [; 0xA0 + "" "20\177\\abreve" "32\177\\abreve" "71\177\\abreve" + "20\177\\acircumflex" "32\177\\acircumflex" "73\177\\acircumflex" "71\177\\acircumflex" + "34\177e" "71\177e" "20\177\\ecircumflex" "32\177\\ecircumflex" + "73\177\\ecircumflex" "34\177\\ecircumflex" "71\177\\ecircumflex" "20\177\\ocircumflex" + + ; 0xB0 + "32\177\\ocircumflex" "73\177\\ocircumflex" "34\177\\ocircumflex" "" + "" "71\177\\ocircumflex" "32\177\\ohorn" "73\177\\ohorn" + "71\177i" "" "" "" + "" "0\177\\ohorn" "20\177\\ohorn" "" + + ; 0xC0 + "" "" "" "" + "" "" "73\177\\abreve" "34\177\\abreve" + "" "" "" "" + "" "" "" "32\177y" + + ; 0xD0 + "" "20\177\\uhorn" "" "" + "" "71\177a" "73\177y" "32\177\\uhorn" + "73\177\\uhorn" "" "" "34\177y" + "71\177y" "" "34\177\\ohorn" "0\177\\uhorn" + + ; 0xE0 + "32\177a" "20\177a" "0\177\\acircumflex" "34\177a" + "73\177a" "0\177\\abreve" "34\177\\uhorn" "34\177\\acircumflex" + "32\177e" "20\177e" "0\177\\ecircumflex" "73\177e" + "32\177i" "20\177i" "34\177i" "73\177i" + + ; 0xF0 + "0\177\\dj" "71\177\\uhorn" "32\177o" "20\177o" + "0\177\\ocircumflex" "34\177o" "73\177o" "71\177o" + "71\177u" "32\177u" "20\177u" "34\177u" + "73\177u" "20\177y" "71\177\\ohorn" "" + ]) + +(defconst cjk-viscii-upper + [; 0xA0 + "" "20\177\\ABREVE" "32\177\\ABREVE" "71\177\\ABREVE" + "20\177\\ACIRCUMFLEX" "32\177\\ACIRCUMFLEX" "73\177\\ACIRCUMFLEX" "71\177\\ACIRCUMFLEX" + "34\177E" "71\177E" "20\177\\ECIRCUMFLEX" "32\177\\ECIRCUMFLEX" + "73\177\\ECIRCUMFLEX" "34\177\\ECIRCUMFLEX" "71\177\\ECIRCUMFLEX" "20\177\\OCIRCUMFLEX" + + ; 0xB0 + "32\177\\OCIRCUMFLEX" "73\177\\OCIRCUMFLEX" "34\177\\OCIRCUMFLEX" "" + "" "71\177\\OCIRCUMFLEX" "32\177\\OHORN" "73\177\\OHORN" + "71\177I" "" "" "" + "" "0\177\\OHORN" "20\177\\OHORN" "" + + ; 0xC0 + "" "" "" "" + "" "" "73\177\\ABREVE" "34\177\\ABREVE" + "" "" "" "" + "" "" "" "32\177Y" + + ; 0xD0 + "" "20\177\\UHORN" "" "" + "" "71\177A" "73\177Y" "32\177\\UHORN" + "73\177\\UHORN" "" "" "34\177Y" + "71\177Y" "" "34\177\\OHORN" "0\177\\UHORN" + + ; 0xE0 + "32\177A" "20\177A" "0\177\\ACIRCUMFLEX" "34\177A" + "73\177A" "0\177\\ABREVE" "34\177\\UHORN" "34\177\\ACIRCUMFLEX" + "32\177E" "20\177E" "0\177\\ECIRCUMFLEX" "73\177E" + "32\177I" "20\177I" "34\177I" "73\177I" + + ; 0xF0 + "0\177\\DJ" "71\177\\UHORN" "32\177O" "20\177O" + "0\177\\OCIRCUMFLEX" "34\177O" "73\177O" "71\177O" + "71\177U" "32\177U" "20\177U" "34\177U" + "73\177U" "20\177Y" "71\177\\OHORN" "" + ]) + + +;; The following encodings will be selected (if they occur in the input +;; buffer) at the very beginning of the output buffer to load the +;; corresponding CJK macros. +(defconst cjk-enc-table + (let ((vec (make-vector 256 nil))) + (aset vec lc-cn "GB") + (aset vec lc-kana "SJIS") + (aset vec lc-jp "JIS") + (aset vec lc-jp2 "JIS2") + (aset vec lc-kr "KS") + (aset vec lc-big5-1 "Bg5") + (aset vec lc-big5-2 "Bg5") + (aset vec lc-cns1 "CNS1") + (aset vec lc-cns2 "CNS2") + (aset vec lc-cns3 "CNS3") + (aset vec lc-cns4 "CNS4") + (aset vec lc-cns5 "CNS5") + (aset vec lc-cns6 "CNS6") + (aset vec lc-cns7 "CNS7") + vec)) + +(defconst cjk-space "\17764\177\177") +(defconst cjk-nospace "\17765\177\177") + +;; here we have the format specification table which defines what to do +;; for each encoding. +(defconst cjk-format-spec-table + (let ((vec (make-vector 256 nil))) + ;; Element is a vector VEC. Each character is formatted as: + ;; (format "\177%s\177" (aref VEC (- char-code 160))) + (aset vec lc-ltn1 cjk-latin-1) + (aset vec lc-ltn2 cjk-latin-2) + (aset vec lc-ltn3 cjk-latin-3) + (aset vec lc-ltn4 cjk-latin-4) + (aset vec lc-ltn5 cjk-latin-5) + (aset vec lc-roman cjk-latin-jisx) + ;; T2A encoding is used for Cyrillic letters. You must explicitly + ;; switch between T2 and T1/OT1 encoding. + (aset vec lc-crl cjk-cyrillic) + ;; LGR encoding (resp. its ligatures) is used for Greek letters. You + ;; must explicitly switch between LGR and T1/OT1 encoding (using + ;; e.g. Babel's `greek' option). + (aset vec lc-grk cjk-greek) + ;; for Vietnamese a Vietnamese TeX-font has to be used which contains + ;; ASCII characters too! You must explicitly switch between Vietnamese + ;; T5 and T1/OT1 encoding. + (aset vec lc-vn-1 cjk-viscii-lower) + (aset vec lc-vn-2 cjk-viscii-upper) + + ;; Element is a cons of header HEAD and formatter FORMAT. HEAD is + ;; printed first, then each character is formatted as: + ;; (format FORMAT char-code-1 char-code-2) + (aset vec lc-kana '("\17770\177\177" . "\177%c\177\177")) + (aset vec lc-jp '("\17766\177\177" . "\177%c\177%d\177")) + (aset vec lc-cn '("\17767\177\177" . "\177%c\177%d\177")) + (aset vec lc-big5-1 '("\17768\177\177" . "\177%c\177%d\177")) + (aset vec lc-big5-2 '("\17768\177\177" . "\177%c\177%d\177")) + (aset vec lc-kr '("\17769\177\177" . "\177%c\177%d\177")) + + ;; Element is a formatter string FORMAT. Each character is + ;; formatted as: + ;; (format FORMAT char-code-1 char-code-2) + (aset vec lc-jp2 "\17772\177JIS2\177\177%d\177%d\177") + (aset vec lc-cns1 "\17772\177CNS1\177\177%d\177%d\177") + (aset vec lc-cns2 "\17772\177CNS2\177\177%d\177%d\177") + (aset vec lc-cns3 "\17772\177CNS3\177\177%d\177%d\177") + (aset vec lc-cns4 "\17772\177CNS4\177\177%d\177%d\177") + (aset vec lc-cns5 "\17772\177CNS5\177\177%d\177%d\177") + (aset vec lc-cns6 "\17772\177CNS6\177\177%d\177%d\177") + (aset vec lc-cns7 "\17772\177CNS7\177\177%d\177%d\177") + vec)) + + +(make-coding-system + '*cjk-coding* 0 ?c + "Coding-system for LaTeX2e CJK Package" 1) + + +(put '*cjk-coding* 'pre-write-conversion 'cjk-encode) + + +(defun cjk-encode (from to) + (save-excursion + (save-restriction + (narrow-to-region from to) + (let ((mc-flag t) + (re-multibyte-char "[\177-\237][\240-\177]+") + (enc (make-vector 256 nil)) + (space-state nil) + (require-cjk-execute nil) + prev-lc lc ch ch1 ch2 format-spec) + (goto-char (point-min)) + (if (null (let (mc-flag) (re-search-forward re-multibyte-char nil t))) + ;; No multilingual text. Nothing to do. + nil + (goto-char (match-beginning 0)) + (setq prev-lc lc-ascii) + (while (not (eobp)) + ;; Now we are at a multibyte character. + ;; Set the following variables: + ;; LC -- leading char + ;; CH1 -- first char code + ;; CH2 -- second char code (of two byte chars) + (setq ch (following-char)) + (delete-char 1) + (setq lc (char-component ch 0)) + (if (or (= lc lc-big5-1) (= lc lc-big5-2)) + ;; Mule has special encoding for Big5 characters. We + ;; must decode them to the normal Big5 codes. + (let ((vec (g2b ch))) + (setq ch1 (aref vec 0) ch2 (aref vec 1))) + (setq ch1 (char-component ch 1) + ch2 (char-component ch 2))) + + ;; FORMAT-SPEC tells how to encode this character. + (setq format-spec (aref cjk-format-spec-table lc)) + (if (null format-spec) + ;; Unsupported character set. + nil + ;; Ok, it is supported. If this character set is one of + ;; CJK, we need a special header at the beginning of the + ;; file. + (if (aset enc lc (aref cjk-enc-table lc)) + (setq require-cjk-execute t)) + + (cond ((consp format-spec) + ;; We may have to insert the car part of the cons + ;; and/or space controlling commands + ;; (cjk-space/cjk-nospace) depending on the current + ;; context. + (if (= lc lc-kr) + (or (eq space-state cjk-space) + (insert (setq space-state cjk-space))) + (or (eq space-state cjk-nospace) + (insert (setq space-state cjk-nospace)))) + (if (/= prev-lc lc) + (insert (car format-spec))) + (insert (format (cdr format-spec) ch1 ch2))) + + ((vectorp format-spec) + (insert (format "\177%s\177" + (aref format-spec (- ch1 160))))) + (t ; FORMAT-SPEC is just a formatting string. + (insert (format format-spec ch1 ch2))))) + + ;; Prepare the next loop. + (setq prev-lc lc) + ;; Skip spaces, etc. + (skip-chars-forward " \t\n") + ;; If there are any ASCII chars, skip them also, but set + ;; PREV-LC to LC-ASCII. + (if (and (< (following-char) 128) + (let (mc-flag) + (re-search-forward re-multibyte-char nil 'move))) + (progn + (goto-char (match-beginning 0)) + (setq prev-lc lc-ascii)))) + + ;; Now, insert an appropriate header at the head of the file. + (goto-char (point-min)) + (if require-cjk-execute + (let ((i 128)) + (insert "\\def\\CJKhook{") + (while (< i 256) + (if (aref enc i) + (insert (format "\\CJKenc{%s}" (aref enc i)))) + (setq i (1+ i))) + (insert "}") + (insert "\\ifx\\CJKpreproc\\undefined") + (insert "\\def\\CJKpreproc{cjk-enc}") + (insert "\\RequirePackage[global]{CJK}") + (insert "\\AtBeginDocument{\\begin{CJK}{}{}\\CJKspace}") + (insert "\\AtEndDocument{\\end{CJK}}") + (insert "\\else\\CJKhook\\fi ")) + (insert "\\ifx\\CJKpreproc\\undefined") + (insert "\\def\\CJKpreproc{cjk-enc}") + (insert "\\RequirePackage{MULEenc}") + (insert "\\fi "))))))) + + +(defun cjk-write-file () + "Save current buffer and <buffername>.cjk in *cjk-coding*. +Files of the form <buffername>.bib are saved as <buffername>-cjk.bib" + + (interactive) + (let ((bufname (buffer-file-name)) + body + extension + newbufname) + (save-buffer) + (string-match "\\(.*\\)\\(\\.[^/]*$\\)" bufname) + (setq body (match-string 1 bufname) + extension (match-string 2 bufname)) + (setq newbufname + (concat body + (if (string-equal extension ".bib") + "-cjk.bib" + ".cjk"))) + (message "Saving %s and %s" bufname newbufname) + (let ((set-file-coding-system *cjk-coding*)) + (write-region (point-min) (point-max) newbufname)))) + + +;;; EOF diff --git a/Master/texmf-dist/source/latex/cjk/utils/pyhyphen/pinyin.c b/Master/texmf-dist/source/latex/cjk/utils/pyhyphen/pinyin.c new file mode 100644 index 00000000000..5273fbbc03f --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/pyhyphen/pinyin.c @@ -0,0 +1,480 @@ +/* + + This is the file pinyin.c of the CJK macro package ver. 4.8.0 + (22-May-2008). + + Use this file to generate a hyphenation input file for patgen. + + Usage: + + pinyin > pinyin.dic + + */ + +/* + Copyright (C) 1994-2008 Werner Lemberg <wl@gnu.org> + + 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 in doc/COPYING; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, + MA 02110-1301 USA + */ + +#include <stdio.h> + + +/* A list of all Chinese syllables. We use latin-1 encoding for the + `umlaut u' character. */ + +char *py[] = +{ + "a", + "ai", + "an", + "ang", + "ao", + "ba", + "bai", + "ban", + "bang", + "bao", + "bei", + "ben", + "beng", + "bi", + "bian", + "biao", + "bie", + "bin", + "bing", + "bo", + "bu", + "ca", + "cai", + "can", + "cang", + "cao", + "ce", + "cen", + "ceng", + "cha", + "chai", + "chan", + "chang", + "chao", + "che", + "chen", + "cheng", + "chi", + "chong", + "chou", + "chu", + "chuai", + "chuan", + "chuang", + "chui", + "chun", + "chuo", + "ci", + "cong", + "cou", + "cu", + "cuan", + "cui", + "cun", + "cuo", + "da", + "dai", + "dan", + "dang", + "dao", + "de", + "dei", + "deng", + "di", + "dian", + "diao", + "die", + "ding", + "diu", + "dong", + "dou", + "du", + "duan", + "dui", + "dun", + "duo", + "e", + "ei", + "en", + "eng", + "er", + "fa", + "fan", + "fang", + "fei", + "fen", + "feng", + "fiao", + "fo", + "fou", + "fu", + "ga", + "gai", + "gan", + "gang", + "gao", + "ge", + "gei", + "gen", + "geng", + "gong", + "gou", + "gu", + "gua", + "guai", + "guan", + "guang", + "gui", + "gun", + "guo", + "ha", + "hai", + "han", + "hang", + "hao", + "he", + "hei", + "hen", + "heng", + "hong", + "hou", + "hu", + "hua", + "huai", + "huan", + "huang", + "hui", + "hun", + "huo", + "ji", + "jia", + "jian", + "jiang", + "jiao", + "jie", + "jin", + "jing", + "jiong", + "jiu", + "ju", + "juan", + "jue", + "jun", + "ka", + "kai", + "kan", + "kang", + "kao", + "ke", + "kei", + "ken", + "keng", + "kong", + "kou", + "ku", + "kua", + "kuai", + "kuan", + "kuang", + "kui", + "kun", + "kuo", + "la", + "lai", + "lan", + "lang", + "lao", + "le", + "lei", + "leng", + "li", + "lia", + "lian", + "liang", + "liao", + "lie", + "lin", + "ling", + "liu", + "long", + "lou", + "lu", + "luan", + "lun", + "luo", + "lü", + "lüe", + "ma", + "mai", + "man", + "mang", + "mao", + "me", + "mei", + "men", + "meng", + "mi", + "mian", + "miao", + "mie", + "min", + "ming", + "miu", + "mo", + "mou", + "mu", + "na", + "nai", + "nan", + "nang", + "nao", + "ne", + "nei", + "nen", + "neng", + "ni", + "nian", + "niang", + "niao", + "nie", + "nin", + "ning", + "niu", + "nong", + "nou", + "nu", + "nuan", + "nuo", + "nü", + "nüe", + "o", + "ou", + "pa", + "pai", + "pan", + "pang", + "pao", + "pei", + "pen", + "peng", + "pi", + "pian", + "piao", + "pie", + "pin", + "ping", + "po", + "pou", + "pu", + "qi", + "qia", + "qian", + "qiang", + "qiao", + "qie", + "qin", + "qing", + "qiong", + "qiu", + "qu", + "quan", + "que", + "qun", + "ran", + "rang", + "rao", + "re", + "ren", + "reng", + "ri", + "rong", + "rou", + "ru", + "ruan", + "rui", + "run", + "ruo", + "sa", + "sai", + "san", + "sang", + "sao", + "se", + "sen", + "seng", + "sha", + "shai", + "shan", + "shang", + "shao", + "she", + "shei", + "shen", + "sheng", + "shi", + "shou", + "shu", + "shua", + "shuai", + "shuan", + "shuang", + "shui", + "shun", + "shuo", + "si", + "song", + "sou", + "su", + "suan", + "sui", + "sun", + "suo", + "ta", + "tai", + "tan", + "tang", + "tao", + "te", + "tei", + "teng", + "ti", + "tian", + "tiao", + "tie", + "ting", + "tong", + "tou", + "tu", + "tuan", + "tui", + "tun", + "tuo", + "wa", + "wai", + "wan", + "wang", + "wei", + "wen", + "weng", + "wo", + "wu", + "xi", + "xia", + "xian", + "xiang", + "xiao", + "xie", + "xin", + "xing", + "xiong", + "xiu", + "xu", + "xuan", + "xue", + "xun", + "ya", + "yan", + "yang", + "yao", + "ye", + "yi", + "yin", + "ying", + "yo", + "yong", + "you", + "yu", + "yuan", + "yue", + "yun", + "za", + "zai", + "zan", + "zang", + "zao", + "ze", + "zei", + "zen", + "zeng", + "zha", + "zhai", + "zhan", + "zhang", + "zhao", + "zhe", + "zhei", + "zhen", + "zheng", + "zhi", + "zhong", + "zhou", + "zhu", + "zhua", + "zhuai", + "zhuan", + "zhuang", + "zhui", + "zhun", + "zhuo", + "zi", + "zong", + "zou", + "zu", + "zuan", + "zui", + "zun", + "zuo" +}; + + +int main(void) +{ + int i, j, off; + size_t size = sizeof (py) / sizeof (char*); + char s[20]; + + /* Now we loop through all possible syllable combinations. */ + + for (i = 0; i < size; i++) + for (j = 0; j < size; j++) + { + /* The seldom used `%n' construct yields the number of processed + characters so far. */ + + sprintf(s, "%s%n%s", py[i], &off, py[j]); + + /* We check the first character of the second syllable. If it is + a vowel, a quote will be inserted. Example: Tian'anmen. */ + + if (s[off] == 'a' || s[off] == 'e' || s[off] == 'o') + printf("%s'-%s\n", py[i], py[j]); + + /* No special case. */ + + else + printf("%s-%s\n", py[i], py[j]); + } + + return 0; +} diff --git a/Master/texmf-dist/source/latex/cjk/utils/pyhyphen/pinyin.ldf b/Master/texmf-dist/source/latex/cjk/utils/pyhyphen/pinyin.ldf new file mode 100644 index 00000000000..023ccefc1b8 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/pyhyphen/pinyin.ldf @@ -0,0 +1,62 @@ +% This is the file pinyin.ldf of the CJK package +% for hyphenating Chinese pinyin syllables. +% +% We use the latin-1 character code for `umlaut u' (0xfc). Additionally, +% the quote character "'" is used in its standard sense (resolving syllabic +% ambiguities). +% +% created by Werner Lemberg <wl@gnu.org> +% +% Version 4.8.0 (22-May-2008) + +% Copyright (C) 1994-2008 Werner Lemberg <wl@gnu.org> +% +% 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 in doc/COPYING; if not, write to the Free +% Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +% MA 02110-1301 USA + +\ProvidesLanguage{pinyin} + [CJK 4.8.0 pinyin support for the babel system] + +\LdfInit{pinyin}{captionspinyin} + +\ifx\l@pinyin\@undefined + \@nopatterns{pinyin} + \adddialect\l@pinyin0 +\fi + +\def\pinyinhyphenmins{11} +\def\captionspinyin{} +\def\datepinyin{} + +\initiate@active@char{"} + +\addto\extraspinyin{\languageshorthands{pinyin}} +\addto\extraspinyin{\bbl@activate{"}} +\addto\extraspinyin{\babel@save\"\umlautlow} +\addto\extraspinyin{% + \babel@savevariable{\lccode"27}% + \lccode"27 "27} + +\addto\noextraspinyin{\umlauthigh} + +\declare@shorthand{pinyin}{"u}{\textormath{\"{u}}{\ddot u}} +\declare@shorthand{pinyin}{"U}{\textormath{\"{U}}{\ddot U}} + +\def\mdqon{\shorthandon{"}} +\def\mdqoff{\shorthandoff{"}} + +\ldf@finish{pinyin} + +\endinput diff --git a/Master/texmf-dist/source/latex/cjk/utils/pyhyphen/pinyin.tr b/Master/texmf-dist/source/latex/cjk/utils/pyhyphen/pinyin.tr new file mode 100644 index 00000000000..ea89adb4fc6 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/pyhyphen/pinyin.tr @@ -0,0 +1,52 @@ + 1 1 +%% This is the file pinyin.tr of the CJK package +%% defining the letters used for generating pinyin hyphenation patterns +%% with patgen. +% +%% created by Werner Lemberg <wl@gnu.org> +%% +%% Version 4.8.0 (22-May-2008) +%% +%% Copyright (C) 1994-2008 Werner Lemberg <wl@gnu.org> +%% +%% 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 in doc/COPYING; if not, write to the Free +%% Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +%% MA 02110-1301 USA + a A + b B + c C + d D + e E + f F + g G + h H + i I + j J + k K + l L + m M + n N + o O + p P + q Q + r R + s S + t T + u U + ü Ü + w W + x X + y Y + z Z + ' diff --git a/Master/texmf-dist/source/latex/cjk/utils/pyhyphen/pyhyph.tex b/Master/texmf-dist/source/latex/cjk/utils/pyhyphen/pyhyph.tex new file mode 100644 index 00000000000..93dab277d64 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/pyhyphen/pyhyph.tex @@ -0,0 +1,236 @@ +% This is the file pyhyph.tex of the CJK package +% for hyphenating Chinese pinyin syllables. +% +% We use the latin-1 character code for `umlaut u' (0xfc). Additionally, +% the quote character "'" is used in its standard sense (resolving syllabic +% ambiguities). +% +% created by Werner Lemberg <wl@gnu.org> +% +% Version 4.8.0 (22-May-2008) + +% Copyright (C) 1994-2008 Werner Lemberg <wl@gnu.org> +% +% 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 in doc/COPYING; if not, write to the Free +% Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +% MA 02110-1301 USA + +\message{Hyphenation patterns for unaccented pinyin syllables (CJK 4.8.0)} + +\begingroup + +\catcode"0FC = 11 % umlaut u +\catcode"027 = 11 % quote (') +\lccode"0FC = "0FC +\lccode"027 = "027 + +\patterns{ +a1b +a1c +a1d +a1f +a1g +a1h +a1j +a1k +a1l +a1m +a1p +a1q +a1r +a1s +a1t +a1w +a1x +a1y +a1z +e1b +e1c +e1d +e1f +e1g +e1h +e1j +e1k +e1l +e1m +e1p +e1q +e1s +e1t +e1w +e1x +e1y +e1z +1ga +g1b +g1c +g1d +1ge +g1f +g1g +g1h +g1j +g1k +g1l +g1m +g1n +1go +g1p +g1q +g1r +g1s +g1t +1gu +g1w +g1x +g1y +g1z +i1b +i1c +i1d +i1f +i1g +i1h +i1j +i1k +i1l +i1m +i1p +i1q +i1r +i1s +i1t +i1w +i1x +i1y +i1z +1na +n1b +n1c +n1d +1ne +n1f +n1h +1ni +n1j +n1k +n1l +n1m +n1n +1no +n1p +n1q +n1r +n1s +n1t +1nu +1n^^fc +n1w +n1x +n1y +n1z +o1b +o1c +o1d +o1f +o1g +o1h +o1j +o1k +o1l +o1m +o1p +o1q +o1r +o1s +o1t +o1w +o1x +o1y +o1z +1ra +r1b +r1c +r1d +1re +r1f +r1g +r1h +1ri +r1j +r1k +r1l +r1m +r1n +1ro +r1p +r1q +r1r +r1s +r1t +1ru +r1w +r1x +r1y +r1z +u1b +u1c +u1d +u1f +u1g +u1h +u1j +u1k +u1l +u1m +u1p +u1q +u1r +u1s +u1t +u1w +u1x +u1y +u1z +^^fc1b +^^fc1c +^^fc1d +^^fc1f +^^fc1g +^^fc1h +^^fc1j +^^fc1k +^^fc1l +^^fc1m +^^fc1n +^^fc1p +^^fc1q +^^fc1r +^^fc1s +^^fc1t +^^fc1w +^^fc1x +^^fc1y +^^fc1z +'1a +'1e +'1o +} +\endgroup + +\lefthyphenmin 1 +\righthyphenmin 1 + +\endinput diff --git a/Master/texmf-dist/source/latex/cjk/utils/pyhyphen/pytest.tex b/Master/texmf-dist/source/latex/cjk/utils/pyhyphen/pytest.tex new file mode 100644 index 00000000000..3b862fcb6b2 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/pyhyphen/pytest.tex @@ -0,0 +1,51 @@ +% This is the file pytest.tex of the CJK package +% for testing Chinese pinyin hyphenation. +% +% created by Werner Lemberg <wl@gnu.org> +% +% Version 4.8.0 (22-May-2008) +% +%% +%% Attention! This will work only if you have created a new format file +%% with `pyhyph.tex' as additional hyphenation patterns for the language +%% `pinyin'. Otherwise no hyphenation will be used. +%% +% Note that the Babel package searches for `pinyin.ldf', not pinyin.sty -- +% the latter is for typesetting accented pinyin syllables. + +\documentclass[12pt,b5paper]{article} + +\usepackage[10pt]{type1ec} % use only 10pt fonts +\usepackage[T1]{fontenc} +\usepackage[pinyin]{babel} + + +\begin{document} + +% Taken from the TeXbook (p. 451) to force frequent insertion of hyphens. +\hyphenpenalty -1000 +\pretolerance -1 +\tolerance 1000 +\doublehyphendemerits -100000 +\finalhyphendemerits -100000 + +\selectlanguage{pinyin} + +Women hen xihuan l"uxing. Zai Beijing women hen xiang kan Tian'anmen. +Mingtian women xiang yao dao Xi'an qu. Xiage libai zai hui jia. +Women hen xihuan l"uxing. Zai Beijing women hen xiang kan Tian'anmen. +Mingtian women xiang yao dao Xi'an qu. Xiage libai zai hui jia. +Women hen xihuan l"uxing. Zai Beijing women hen xiang kan Tian'anmen. +Mingtian women xiang yao dao Xi'an qu. Xiage libai zai hui jia. +Women hen xihuan l"uxing. Zai Beijing women hen xiang kan Tian'anmen. +Mingtian women xiang yao dao Xi'an qu. Xiage libai zai hui jia. +Women hen xihuan l"uxing. Zai Beijing women hen xiang kan Tian'anmen. +Mingtian women xiang yao dao Xi'an qu. Xiage libai zai hui jia. +Women hen xihuan l"uxing. Zai Beijing women hen xiang kan Tian'anmen. +Mingtian women xiang yao dao Xi'an qu. Xiage libai zai hui jia. +Women hen xihuan l"uxing. Zai Beijing women hen xiang kan Tian'anmen. +Mingtian women xiang yao dao Xi'an qu. Xiage libai zai hui jia. +Women hen xihuan l"uxing. Zai Beijing women hen xiang kan Tian'anmen. +Mingtian women xiang yao dao Xi'an qu. Xiage libai zai hui jia. + +\end{document} diff --git a/Master/texmf-dist/source/latex/cjk/utils/subfonts/clonevf.pl b/Master/texmf-dist/source/latex/cjk/utils/subfonts/clonevf.pl new file mode 100644 index 00000000000..41ed9b19d7f --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/subfonts/clonevf.pl @@ -0,0 +1,122 @@ +#! /usr/bin/perl -w +# +# This script clones a virtual font from a TFM file. +# +# As prerequisites, it needs the programs `tftopl' and `vptovf', which must +# be in the path. +# +# Call the script as +# +# perl clonevf.pl tfm-name vf-name +# +# Example: +# +# perl clonevf.pl bsmiuv bsmilpv + +# Copyright (C) 1994-2008 Werner Lemberg <wl@gnu.org> +# +# 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 in doc/COPYING; if not, write to the Free +# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +# MA 02110-1301 USA + +use strict; + +my $prog = $0; +$prog =~ s@.*/@@; + +if ($#ARGV != 1) { + die("usage: $prog tfm-name vf-name\n"); +} + +my $tfmname = $ARGV[0]; +my $vfname = $ARGV[1]; + + +# Create PL file. + +print("Processing metrics file \`$tfmname.tfm'...\n"); + +my $arg = "tftopl $tfmname.tfm > $tfmname.pl"; +system($arg) == 0 +|| die("$prog: calling \`$arg' failed: $?\n"); + + +# Create VPL file. + +print("Writing virtual property list file \`$vfname.vpl'...\n"); + +open(PL, "$tfmname.pl") +|| die("$prog: can't open \`$tfmname.pl': $!\n"); + +open(VPL, ">", "$vfname.vpl") +|| die("$prog: can't open \`$vfname.vpl': $!\n"); + +print(VPL "(VTITLE Created by \`$prog " . join(" ", @ARGV) . "')\n"); +print(VPL "(FAMILY TEX-\U$vfname\E)\n"); + +my $have_mapfont = 0; +while (<PL>) { + next if /^\(FAMILY/; + next if /^\(CHECKSUM/; + + if (/^\(CHARACTER (.*)/) { + if (!$have_mapfont) { + print(VPL "(MAPFONT D 0\n"); + print(VPL " (FONTNAME $tfmname)\n"); + print(VPL " )\n"); + $have_mapfont = 1; + } + + my $char = $1; + + print(VPL $_); + + $_ = <PL>; + if (/CHARWD/) { + print(VPL $_); + $_ = <PL>; + } + if (/CHARHT/) { + print(VPL $_); + $_ = <PL>; + } + if (/CHARDP/) { + print(VPL $_); + $_ = <PL>; + } + + print(VPL " (MAP\n"); + print(VPL " (SELECTFONT D 0)\n"); + print(VPL " (SETCHAR $char)\n"); + print(VPL " )\n"); + } + + print(VPL $_); +} + +close(PL); +close(VPL); + +print("Processing \`$vfname.vpl'\n"); +$arg = "vptovf $vfname.vpl"; +system($arg) == 0 +|| die("$prog: calling \`$arg' failed: $?\n"); + +print("Removing \`$tfmname.pl'...\n"); +unlink("$tfmname.pl"); +print("Removing \`$vfname.vpl'...\n"); +unlink("$vfname.vpl"); + + +# eof diff --git a/Master/texmf-dist/source/latex/cjk/utils/subfonts/hlatex2agl.pl b/Master/texmf-dist/source/latex/cjk/utils/subfonts/hlatex2agl.pl new file mode 100644 index 00000000000..3d759801333 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/subfonts/hlatex2agl.pl @@ -0,0 +1,477 @@ +#! /usr/bin/perl -w +# +# This script adds AGL compliant glyph names to fonts from the HLaTeX +# package version 0.97 or newer. Note that only glyphs actually used in the +# (virtual) HLaTeX subfonts get new names; additionally, the used glyph +# shapes in the HLaTeX fonts aren't always correct -- consider this script +# as an auxiliary means, not a definitive solution. At least the Hangul and +# Hanja shapes are correct. +# +# As prerequisites, it needs the programs `t1asm' and `t1disasm' (from the +# t1utils package) and `vftovp' which must be in the path. The subfont +# definition file `UKS-HLaTeX.sfd' (from the ttf2pk package) and the file +# +# http://partners.adobe.com/public/developer/en/opentype/aglfn13.txt +# +# are necessary also. +# +# Call the script as +# +# perl hlatex2agl.pl virtual-namestem real-namestem sfd-file +# +# `virtual-namestem' specifies the name stem of the virtual subfonts +# directly used by LaTeX; both the VF and TFM files are needed. +# `real-namestem' gives the name stem of the real subfonts used by the +# virtual fonts; TFM, AFM, and PFB files are needed. +# +# Example: +# +# perl hlatex2agl.pl wmj umj UKS-HLaTeX.sfd + +# Copyright (C) 1994-2008 Werner Lemberg <wl@gnu.org> +# +# 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 in doc/COPYING; if not, write to the Free +# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +# MA 02110-1301 USA + +use strict; + +my $prog = $0; +$prog =~ s@.*/@@; + +if ($#ARGV != 2) { + die("usage: $prog virtual-namestem real-namestem sfd-file\n"); +} + +my $virtnamestem = $ARGV[0]; +my $realnamestem = $ARGV[1]; +my $sfdfile = $ARGV[2]; + + +# Read UKS-HLaTeX.sfd. + +my @sfd; +my @virtsubfonts; + +read_sfdfile($sfdfile, \@sfd, \@virtsubfonts); + + +# Read AGL file. + +my %agl; + +read_aglfile("aglfn13.txt", \%agl); + + +# Read VF files. + +my %vpl; +my %subfonts; + +for my $suffix (@virtsubfonts) { + read_vffile("$virtnamestem$suffix.vf", $suffix, \%vpl, \%subfonts); +} + + +# Decompose all Hangul syllables. + +my @hangul; + +decompose_hangul(\@hangul); + + +# Build glyph names. + +my %names; + +build_glyphnames(\%names); + + +# Process AFM files. + +foreach my $suffix (sort (keys %subfonts)) { + process_afmfile("$realnamestem$suffix.afm", $suffix); +} + + +# Process PFB files. + +foreach my $suffix (sort (keys %subfonts)) { + process_pfbfile("$realnamestem$suffix.pfb", $suffix); +} + + +# Read an SFD file. +# +# $1: Name of the SFD file. +# $2: Reference to the target array, mapping from Unicode to the subfont. +# The format of the array values is the concatenation of the subfont +# suffix, a space, and the index. +# $3: Reference to a target array which holds the subfont suffixes. + +sub read_sfdfile { + my ($sfdfile, $sfdarray, $subarray) = @_; + + print("Reading subfont definition file \`$sfdfile'...\n"); + + open(SFD, $sfdfile) + || die("$prog: can't open \`$sfdfile': $!\n"); + + my $line; + my $continuation = 0; + while (<SFD>) { + chop; + + next if /^\s*$/; + next if /^#/; + + if ($continuation) { + $line .= $_; + } + else { + $line = $_; + } + $continuation = 0; + + if ($line =~ s/\\$//) { + $continuation = 1; + next; + } + + $_ = $line; + my @field = split(" "); + + my $suffix = $field[0]; + push(@{$subarray}, $suffix); + + shift(@field); + my $index = 0; + + while (@field) { + if ($field[0] =~ /(.*):$/) { + $index = $1; + } + elsif ($field[0] =~ /(.*)_(.*)/) { + my $start = $1; + my $end = $2; + $start = oct($start) if ($start =~ /^0/); + $end = oct($end) if ($end =~ /^0/); + foreach my $i ($start .. $end) { + $sfdarray->[$i] = "$suffix $index"; + $index++; + } + } + else { + my $value = $field[0]; + $value = oct($value) if ($value =~ /^0/); + $sfdarray->[$value] = "$suffix $index"; + $index++; + } + shift(@field); + } + } + close(SFD); +} + + +# Read an AGL file. +# +# $1: Name of the AGL file. +# $2: Reference to the target hash file, mapping from the Unicode value +# to the glyph name. + +sub read_aglfile { + my ($aglfile, $aglhash) = @_; + + print("Reading Adobe Glyph List file \`$aglfile'...\n"); + + open(AGL, $aglfile) + || die("$prog: can't open \`$aglfile': $!\n"); + + while (<AGL>) { + chop; + + next if /^\s*$/; + next if /^#/; + + my @field = split(";"); + $aglhash->{hex($field[0])} = $field[1]; + } + close(AGL); +} + + +# Read a VF file. +# +# $1: Name of the VF file. +# $2: Subfont suffix. +# $3: Reference to a target hash, mapping from the virtual subfont to the +# real subfonts. The format of the key is the concatenation of the +# subfont suffix, a space, and the index. The format of the hash value +# is `<suffix1> <idx1>[,<suffix2> <idx2>[,...]]'. +# $4: Reference to a target hash, collecting the suffixes of the real +# subfonts. + +sub read_vffile { + my ($vffile, $vfsuffix, $vplhash, $subfonthash) = @_; + my $vplfile = "$vffile.vpl"; + + print("Creating virtual property list file \`$vplfile'...\n"); + my $arg = "vftovp -charcode-format=octal $vffile > $vplfile"; + system("$arg") == 0 + || die("$prog: calling \`$arg' failed: $?"); + + print("Reading \`$vplfile'...\n"); + open(VPL, $vplfile) + || die("$prog: can't open \`$vplfile': $!\n"); + + my @subfonts; + my $subindex; + my $index; + my $currfont; + my $map = ""; + + while (<VPL>) { + if (/\(MAPFONT D ([0-9]+)/) { + $subindex = $1; + } + elsif (/\(FONTNAME $realnamestem(.*?)\)/) { + $subfonts[$subindex] = $1; + if (!defined ($subfonthash->{$1})) { + $subfonthash->{$1} = 1; + } + } + elsif (/\(CHARACTER O ([0-7]+)/) { + # Save data from previous CHARACTER block. + $vplhash->{"$vfsuffix $index"} = $map if ($map); + + # Reset variables. + $index = oct($1); + $currfont = 0; + $map = ""; + } + elsif (/\(SELECTFONT D ([0-9]+)\)/) { + $currfont = $1; + } + elsif (/\(SETCHAR O ([0-7]+)\)/) { + $map .= "," if ($map); + $map .= "$subfonts[$currfont] " . oct($1); + } + } + + # Save data from last CHARACTER block. + $vplhash->{"$vfsuffix $index"} = $map if ($map); + + close(VPL); + unlink($vplfile); +} + + +# Decompose all Unicode Hangul syllables into Jamo elements. +# +# $1: The target array, mapping from Unicode value to a list of Jamos (in +# Unicode), separated by commata. +# +# This follows the algorithm given in the Unicode standard. + +sub decompose_hangul { + my ($hangularray) = @_; + + my $s_base = 0xAC00; + my $l_base = 0x1100; + my $v_base = 0x1161; + my $t_base = 0x11A7; + + my $s_count = 11172; + my $l_count = 19; + my $v_count = 21; + my $t_count = 28; + + my $n_count = $v_count * $t_count; + + for my $s ($s_base .. ($s_base + $s_count - 1)) { + my $s_index = $s - $s_base; + + my $l = $l_base + int($s_index / $n_count); + my $v = $v_base + int(($s_index % $n_count) / $t_count); + my $t = $t_base + $s_index % $t_count; + + my $jamos = "$l,$v"; + $jamos .= ",$t" if ($t != $t_base); + $hangularray->[$s] = $jamos; + } +} + + +# Build glyph names. +# +# $1: The target hash which maps from real subfonts to glyph names. Keys +# are of the form `<suffix> <index>', hash values are AGL compliant +# glyph names. Glyph variants get a trailing suffix of the form `.N', +# where is is a running number starting with 1. Example: `uni1100.24'. + +sub build_glyphnames { + my ($nameshash) = @_; + + my @entries; + + foreach my $unicode (0 .. 0xFFFF) { + next if !defined ($sfd[$unicode]); + + my $virtdata = $sfd[$unicode]; + + # We assume that only Hangul syllables are composed of more than + # a single element. + if (defined ($hangul[$unicode])) { + my @unijamos = split(",", $hangul[$unicode]); + my @jamos = split(",", $vpl{$virtdata}); + + foreach my $i (0 .. $#jamos) { + if (!defined ($nameshash->{$jamos[$i]})) { + if (defined ($entries[$unijamos[$i]])) { + $nameshash->{$jamos[$i]} = sprintf("uni%04X.%d", + $unijamos[$i], + $entries[$unijamos[$i]]); + $entries[$unijamos[$i]] += 1; + } + else { + $nameshash->{$jamos[$i]} = sprintf("uni%04X", $unijamos[$i]); + $entries[$unijamos[$i]] = 1; + } + } + } + } + else { + if (defined ($agl{$unicode})) { + $nameshash->{$vpl{$virtdata}} = $agl{$unicode}; + } + else { + $nameshash->{$vpl{$virtdata}} = sprintf("uni%04X", $unicode); + } + } + } +} + + +# Process AFM file. +# +# $1: Name of the AFM file to process. The file is first saved, then all +# glyph names are replaced for which an AGL compliant glyph name is +# known. +# $2: The suffix. + +sub process_afmfile { + my ($afmfile, $sub) = @_; + + print("Processing \`$afmfile'...\n"); + + if (!-f $afmfile) { + die("$prog: \`$afmfile' doesn't exist\n"); + } + + rename($afmfile, "$afmfile.old"); + + open(INFILE, "$afmfile.old") + || die("$prog: can't open \`$afmfile.old': $!\n"); + open(OUTFILE, ">", "$afmfile") + || die("$prog: can't open \`$afmfile': $!\n"); + + while (<INFILE>) { + # Replace the `kxx' entries. + if (/ N k(.*?) ;/) { + my $index = hex($1); + if (defined ($names{"$sub $index"})) { + s/ N .*? ;/ N $names{"$sub $index"} ;/; + } + } + + # Update version number. + s/001\.000/001.001/; + s/Altsys\ Fontographer\ 4\.1\ 1\/10\/95$/001.001/; + + print(OUTFILE $_); + + # Add comment. + if (/^Comment\ UniqueID/ || /^Comment\ Generated/) { + print(OUTFILE "Comment AGL compliant glyph names added " + . "by script $prog 2005-Jul-27.\n"); + } + } + + close(INFILE); + close(OUTFILE); +} + + +# Process PFB file. +# +# $1: Name of the PFB file to process. The file is first saved, then all +# glyph names are replaced for which an AGL compliant glyph name is +# known. +# $2: The suffix. + +sub process_pfbfile { + my ($pfbfile, $sub) = @_; + my $arg; + + print("Processing \`$pfbfile'...\n"); + + if (!-f $pfbfile) { + die("$prog: \`$pfbfile' doesn't exist\n"); + } + + rename($pfbfile, "$pfbfile.old"); + + $arg = "t1disasm < $pfbfile.old > $pfbfile.disasm.old"; + system("$arg") == 0 + || die("$prog: calling \`$arg' failed: $?"); + + open(INFILE, "$pfbfile.disasm.old") + || die("$prog: can't open \`$pfbfile.disasm.old': $!\n"); + open(OUTFILE, ">", "$pfbfile.disasm") + || die("$prog: can't open \`$pfbfile.disasm': $!\n"); + + while (<INFILE>) { + # Replace the `kxx' entries. + if (m@/k(.*?) @) { + my $index = hex($1); + if (defined ($names{"$sub $index"})) { + s@/k.*? @/$names{"$sub $index"} @; + } + } + + # Update version number. + s/001\.000/001.001/; + + print(OUTFILE $_); + + # Add comment. + if (/^%%CreationDate/) { + print(OUTFILE "% AGL compliant glyph names added " + . "by script $prog 2005-Jul-27.\n"); + } + } + + close(INFILE); + close(OUTFILE); + + $arg = "t1asm < $pfbfile.disasm > $pfbfile"; + system("$arg") == 0 + || die("$prog: calling \`$arg' failed: $?"); + + unlink("$pfbfile.disasm.old", "$pfbfile.disasm"); +} + + +# eof diff --git a/Master/texmf-dist/source/latex/cjk/utils/subfonts/makefdx.pl b/Master/texmf-dist/source/latex/cjk/utils/subfonts/makefdx.pl new file mode 100644 index 00000000000..d6571039e3c --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/subfonts/makefdx.pl @@ -0,0 +1,340 @@ +#! /usr/bin/perl -w +# +# This script creates proper entries for an FDX file as used by the CJK +# package for LaTeX. +# +# As a prerequisite, it needs the file +# +# http://partners.adobe.com/public/developer/en/opentype/aglfn13.txt +# +# which must be located in the current directory. +# +# Call the script as +# +# perl [-u] makefdx.pl vertref-afm-file sfd-file encoding font-name +# +# `vertref-afm-file' is an AFM file as produced by the script `vertref.pe'. +# The subfont definition file `sfd-file' gives the subfont scheme to get the +# proper entries in the FDX file. `encoding' and `font-name' are TeX font +# parameters as used by the CJK package; the scripts uses the concatenation +# of those two values as the name of the FDX file (with suffix `.fdx'). +# +# The switch `-u' makes the script add a macro to the FDX file (which is +# used by the CJKutf8.sty) to provide a proper /ToUnicode cmap to pdftex. +# +# Note that the created FDX file has to be completed manually. +# +# Examples: +# +# perl makefdx.pl bsmiuvr.afm UBig5.sfd c00 bsmi +# +# The result of this call is the file `c00bsmi.fdx' (you get some warnings +# because not all glyphs contained in bsmiuvr.afm can be accessed with Big5 +# encoding). +# +# perl makefdx.pl -u bsmiuvr.afm Unicode.sfd c70 bsmi +# +# The result of this call is the file `c70bsmi.fdx'. +# +# A collection of useful subfont definition files for CJK fonts can be found +# in the ttf2pk package. + +# Copyright (C) 1994-2008 Werner Lemberg <wl@gnu.org> +# +# 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 in doc/COPYING; if not, write to the Free +# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +# MA 02110-1301 USA + +use strict; + +my $prog = $0; +$prog =~ s@.*/@@; + +my $is_unicode = 0; +if ($ARGV[0] eq "-u") { + $is_unicode = 1; + shift @ARGV; +} + +if ($#ARGV != 3) { + die("usage: $prog [-u] vertref-afm-file sfd-file encoding font-name\n"); +} + +my $vertrefafmfile = $ARGV[0]; +my $sfdfile = $ARGV[1]; +my $encoding = $ARGV[2]; +my $fontname = $ARGV[3]; + +my $fdxfile = $encoding . $fontname . ".fdx"; + +# Read AGL file. + +my %agl; + +read_aglfile("aglfn13.txt", \%agl); + + +# Read AFM file. + +my @vertref; + +read_afmfile($vertrefafmfile, \@vertref); + + +# Read subfont definition file. + +my @sfd; + +read_sfdfile($sfdfile, \@sfd); + + +# Write FDX file. + +print("Writing extended font definition file \`$fdxfile'...\n"); + +open(FDX, ">", $fdxfile) +|| die("$prog: can't open \`$fdxfile': $!\n"); +my $oldfh = select(FDX); + +print("% This is the file $fdxfile of the CJK package +% for using Asian logographs (Chinese/Japanese/Korean) with LaTeX2e +% +% created by the script makefdx.pl for CJK Version 4.8.0 (22-May-2008). + +\\def\\fileversion{4.8.0} +\\def\\filedate{2008/05/22} +\\ProvidesFile{$fdxfile}[\\filedate\\space\\fileversion] + +\\CJKvdef{fullheight}{1em} +\\CJKvdef{height}{.88em} +\\CJKvdef{offset}{.6em} + +% Uncomment if necessary. +%\\CJKvdef{norotate}{} +"); + +my @unicodes; +my $mapping_count = 0; + +foreach my $index (0 .. $#vertref) { + my $glyphnameref = $vertref[$index]; + my $unicode; + + if (defined ($agl{$glyphnameref})) { + $unicode = $agl{$glyphnameref}; + } + elsif ($glyphnameref =~ /^uni([0-9A-F]{4})$/) { + $unicode = hex($1); + } + elsif ($glyphnameref =~ /^u([0-9A-F]{4,6})$/) { + $unicode = hex($1); + } + else { + $unicode = -1; + } + if ($unicode == -1 + || ($unicode >= 0xD800 && $unicode <= 0xDFFF) + || $unicode > 0x10FFFF) { + print(STDERR "Can't map glyph name \`$glyphnameref' to Unicode.\n"); + $unicodes[$index] = -1; + next; + } + $unicodes[$index] = $unicode; + + my $sfdentry; + + if (defined ($sfd[$unicode])) { + $sfdentry = $sfd[$unicode]; + } + else { + $unicodes[$index] = -1; + printf(STDERR "\`%s' (U+%04X) not in subfont encoding\n", + $glyphnameref, $unicode); + next; + } + + $mapping_count++; + + print("\\CJKvdef{m/n/$sfdentry}"); + print("{\\def\\CJK\@plane{v}\\selectfont\\CJKsymbol{$index}}\n"); + print("\\CJKvlet{bx/n/$sfdentry}"); + print("{m/n/$sfdentry}\n"); +} + +if ($is_unicode) { + print(" +\\gdef\\CJK\@cmap\@${fontname}v{ + \\expandafter\\ifx\\csname CJK\@CMap\@${fontname}v\\endcsname \\relax + \\immediate\\pdfobj stream { + /CIDInit\\space/ProcSet\\space findresource\\space begin\\space + 12\\space dict\\space begin\\space + begincmap\\space + /CIDSystemInfo\\space <<\\space + /Registry\\space (TeX)\\space + /Ordering\\space (${fontname}v)\\space + /Supplement\\space 0\\space >>\\space def\\space + /CMapName\\space /TeX-${fontname}v-0\\space def\\space + 1\\space begincodespacerange\\space + <00>\\space <FF>\\space + endcodespacerange\\space + $mapping_count\\space beginbfchar\\space +"); + + foreach my $index (0 .. $#vertref) { + if ($unicodes[$index] != -1) { + printf(" <%02X>\\space <%04X>\\space\n", + $index, $unicodes[$index]); + } + } + + print(" endbfchar\\space + endcmap\\space + CMapName\\space currentdict\\space /CMap\\space defineresource\\space + pop\\space + end\\space + end\\space} + \\expandafter\\xdef\\csname CJK\@CMap\@${fontname}v\\endcsname{ + \\the\\pdflastobj} + \\fi + \\pdffontattr\\font\@name{ + /ToUnicode\\space\\csname CJK\@CMap\@${fontname}v\\endcsname\\space 0\\space R} +} + +\\endinput +"); +} + + +# Read an AGL file. +# +# $1: Name of the AGL file. +# $2: Reference to the target hash file, mapping from the glyph name +# to the Unicode value. + +sub read_aglfile { + my ($aglfile, $aglhash) = @_; + + print("Reading Adobe Glyph List file \`$aglfile'...\n"); + + open(AGL, $aglfile) + || die("$prog: can't open \`$aglfile': $!\n"); + + while (<AGL>) { + chop; + + next if /^\s*$/; + next if /^#/; + + my @field = split(";"); + $aglhash->{$field[1]} = hex($field[0]); + } + close(AGL); +} + + +# Read an SFD file. +# +# $1: Name of the SFD file. +# $2: Reference to the target array file, mapping from the character code +# to the subfont index. The format of an array value is the +# concatenation of the subfont suffix, a slash, and the index. + +sub read_sfdfile { + my ($sfdfile, $sfdarray) = @_; + + print("Reading subfont definition file \`$sfdfile'...\n"); + + open(SFD, $sfdfile) + || die("$prog: can't open \`$sfdfile': $!\n"); + + my $line; + my $continuation = 0; + while (<SFD>) { + chop; + + next if /^\s*$/; + next if /^#/; + + if ($continuation) { + $line .= $_; + } + else { + $line = $_; + } + $continuation = 0; + + if ($line =~ s/\\$//) { + $continuation = 1; + next; + } + + $_ = $line; + my @field = split(" "); + + my $suffix = $field[0]; + + shift(@field); + my $index = 0; + + while (@field) { + if ($field[0] =~ /(.*):$/) { + $index = $1; + } + elsif ($field[0] =~ /(.*)_(.*)/) { + my $start = $1; + my $end = $2; + $start = oct($start) if ($start =~ /^0/); + $end = oct($end) if ($end =~ /^0/); + foreach my $i ($start .. $end) { + $sfdarray->[$i] = "$suffix/$index"; + $index++; + } + } + else { + my $value = $field[0]; + $value = oct($value) if ($value =~ /^0/); + $sfdarray->[$value] = "$suffix/$index"; + $index++; + } + shift(@field); + } + } + close(SFD); +} + + +# Read an AFM file. +# +# $1: Name of the AFM file. +# $2: Reference to array which maps glyph indices to glyph names. + +sub read_afmfile { + my ($afmfile, $maparray) = @_; + + print("Reading metrics file \`$afmfile'\n"); + + open(AFM, $afmfile) + || die("$prog: can't open \`$afmfile': $!\n"); + + while (<AFM>) { + if (/^C \d+ ;/) { + / N (.*?) ;/; + push (@$maparray, $1); + } + } + close(AFM); +} + + +# eof diff --git a/Master/texmf-dist/source/latex/cjk/utils/subfonts/sfd2uni.pl b/Master/texmf-dist/source/latex/cjk/utils/subfonts/sfd2uni.pl new file mode 100644 index 00000000000..d9cbba0ac7c --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/subfonts/sfd2uni.pl @@ -0,0 +1,348 @@ +#! /usr/bin/perl -w +# +# This script creates virtual subfonts in Unicode encoding for a font +# encoding given by a subfont definition file (which must use Unicode +# code points). +# +# As prerequisites it needs the programs `tftopl' and `vptovf' which must be +# in the path. +# +# Call the script as +# +# perl sfd2uni.pl sfd-file namestem uni-namestem codingscheme +# +# `sfd-file' is the subfont definition file, `namestem' is the name stem +# of the subfonts defined in `sfd-file', and `uni-namestem' holds the prefix +# for the Unicode subfonts. `codingscheme' (converted to uppercase) is used +# for the CODINGSCHEME parameter in the resulting TFM files. +# +# `sfd2uni.pl' reads all TFM files from the font family with name stem +# `namestem'. +# +# Example: +# +# perl sfd2uni.pl UKS-HLaTeX.sfd wmj uwmj HLATEX +# +# A collection of useful subfont definition files for CJK fonts can be found +# in the ttf2pk package. + +# Copyright (C) 1994-2008 Werner Lemberg <wl@gnu.org> +# +# 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 in doc/COPYING; if not, write to the Free +# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +# MA 02110-1301 USA + +use strict; + +my $prog = $0; +$prog =~ s@.*/@@; + +if ($#ARGV != 3) { + die("usage: $prog sfd-file namestem uni-namestem codingscheme\n"); +} + +my $sfdfile = $ARGV[0]; +my $namestem = $ARGV[1]; +my $uninamestem = $ARGV[2]; +my $codingscheme = $ARGV[3]; + + +# Read subfont definition file. + +my %sfd; +my @subfonts; + +read_sfdfile($sfdfile, \%sfd, \@subfonts); + + +# Read TFM files. + +my @unicmetrics; + +foreach my $sub (@subfonts) { + my $tfmname = "$namestem$sub.tfm"; + + read_tfmfile($tfmname, \@unicmetrics, \%sfd, $sub); +} + + +# Read FONTDIMEN block. + +my $fontdimen = read_fontdimen("$namestem$subfonts[0].tfm"); + + +# Write VPL files. + +my $index = 0; +foreach my $i (0 .. 255) { + my @entries; + + foreach my $j (0 .. 255) { + if (defined ($unicmetrics[$index])) { + push(@entries, "$j $unicmetrics[$index]"); + } + $index++; + } + + if ($#entries >= 0) { + write_vplfile($uninamestem . sprintf("%02x.vpl", $i), \@entries); + } +} + + +# Generate VF and TFM files, then remove the VPL files. + +my @vplfiles = glob("$uninamestem*.vpl"); +foreach my $vplfile (@vplfiles) { + print("Processing \`$vplfile'...\n"); + my $arg = "vptovf $vplfile"; + system($arg) == 0 + || die("$prog: calling \`$arg' failed: $?");; + print("Removing \`$vplfile'...\n"); + unlink($vplfile); +} + + +# Read an SFD file. +# +# $1: Name of the SFD file. +# $2: Reference to the target hash file, mapping from the subfont index to +# the character code. The format of the key value is the concatenation +# of the subfont suffix, a space, and the index. +# $3: Reference to a target array which holds the subfont suffixes. + +sub read_sfdfile { + my ($sfdfile, $sfdhash, $sfdarray) = @_; + + print("Reading subfont definition file \`$sfdfile'...\n"); + + open(SFD, $sfdfile) + || die("$prog: can't open \`$sfdfile': $!\n"); + + my $line; + my $continuation = 0; + while (<SFD>) { + chop; + + next if /^\s*$/; + next if /^#/; + + if ($continuation) { + $line .= $_; + } + else { + $line = $_; + } + $continuation = 0; + + if ($line =~ s/\\$//) { + $continuation = 1; + next; + } + + $_ = $line; + my @field = split(" "); + + my $suffix = $field[0]; + push(@{$sfdarray}, $suffix); + + shift(@field); + my $index = 0; + + while (@field) { + if ($field[0] =~ /(.*):$/) { + $index = $1; + } + elsif ($field[0] =~ /(.*)_(.*)/) { + my $start = $1; + my $end = $2; + $start = oct($start) if ($start =~ /^0/); + $end = oct($end) if ($end =~ /^0/); + foreach my $i ($start .. $end) { + $sfdhash->{"$suffix $index"} = $i; + $index++; + } + } + else { + my $value = $field[0]; + $value = oct($value) if ($value =~ /^0/); + $sfdhash->{"$suffix $index"} = $value; + $index++; + } + shift(@field); + } + } + close(SFD); +} + + +# Read TFM file. +# +# $1: Name of the TFM file. +# $2: Reference to the target array holding metric information in the form +# `<subfont> <subfont_index> <width> <heigth> <depth>'. +# $3: Reference to a hash created by `read_sfdfile'. +# $4: Subfont suffix. + +sub read_tfmfile { + my ($tfmfile, $unicarray, $sfdhash, $sub) = @_; + + print("Processing metrics file \`$tfmfile'...\n"); + my $arg = "tftopl $tfmfile > $tfmfile.pl"; + system($arg) == 0 + || die("$prog: calling \`$arg' failed: $?\n"); + + print("Reading property list file \`$tfmfile.pl'...\n"); + open(PL, "$tfmfile.pl") + || die("$prog: can't open \`$tfmfile.pl': $!\n"); + + while (<PL>) { + my $index; + if (/^\(CHARACTER O (\d+)/) { + $index = oct($1); + } + elsif (/^\(CHARACTER C (.)/) { + $index = ord($1); + } + else { + next; + } + + my $wd = "0"; + my $ht = "0"; + my $dp = "0"; + + $_ = <PL>; + if (/\(CHARWD R (.*)\)/) { + $wd = "$1"; + $_ = <PL>; + } + if (/\(CHARHT R (.*)\)/) { + $ht = "$1"; + $_ = <PL>; + } + if (/\(CHARDP R (.*)\)/) { + $dp = "$1"; + } + + if (defined ($sfdhash->{"$sub $index"})) { + $unicarray->[$sfdhash->{"$sub $index"}] = "$sub $index $wd $ht $dp"; + } + } + close(PL); + print("Removing \`$tfmfile.pl'...\n"); + unlink("$tfmfile.pl"); +} + + +# Read FONTDIMEN block of a TFM file. +# +# $1: Name of the TFM file. +# +# Return the block as a string. + +sub read_fontdimen { + my ($tfmfile) = @_; + + print("Processing metrics file \`$tfmfile'...\n"); + my $arg = "tftopl $tfmfile > $tfmfile.pl"; + system($arg) == 0 + || die("$prog: calling \`$arg' failed: $?\n"); + + print("Reading property list file \`$tfmfile.pl'...\n"); + open(PL, "$tfmfile.pl") + || die("$prog: can't open \`$tfmfile.pl': $!\n"); + + my $s = ""; + my $have_fontdimen = 0; + + while (<PL>) { + if (/^\(FONTDIMEN/) { + $have_fontdimen = 1; + } + + if ($have_fontdimen) { + $s .= $_; + + last if (/^ \)/); + } + } + + close(PL); + print("Removing \`$tfmfile.pl'...\n"); + unlink("$tfmfile.pl"); + + return $s; +} + + +# Write VPL file. +# +# $1: Name of the VPL file. +# $2: Reference to list which holds the font entries. An entry has the +# form `<idx> <subfont> <subfont_idx> <width> <height> <depth>'. + +sub write_vplfile { + my ($vplfile, $metricsarray) = @_; + + my %subfonts; + my $subcount = 0; + + foreach my $entry (@{$metricsarray}) { + my @field = split(" ", $entry); + my $subfont = $field[1]; + if (!defined ($subfonts{$subfont})) { + $subfonts{$subfont} = $subcount; + $subcount++; + } + } + + print("Writing virtual property list file \`$vplfile'...\n"); + + open(VPL, ">", $vplfile) + || die("$prog: can't open \`$vplfile': $!\n"); + my $oldfh = select(VPL); + + print("(VTITLE Created by \`$prog " . join(" ", @ARGV) . "')\n"); + print("(FAMILY TEX-\U$uninamestem\E)\n"); + print("(CODINGSCHEME \U$codingscheme\E)\n"); + print $fontdimen; + + foreach my $subfont + (sort { $subfonts{$a} <=> $subfonts{$b} } keys %subfonts) { + print("(MAPFONT D $subfonts{$subfont}\n"); + print(" (FONTNAME $namestem$subfont)\n"); + print(" )\n"); + } + + foreach my $entry (@{$metricsarray}) { + my ($index, $subnumber, $subindex, $wd, $ht, $dp) = split(" ", $entry); + + print("(CHARACTER D $index\n"); + print(" (CHARWD R $wd)\n"); + print(" (CHARHT R $ht)\n"); + print(" (CHARDP R $dp)\n"); + print(" (MAP\n"); + print(" (SELECTFONT D $subfonts{$subnumber})\n"); + print(" (SETCHAR D $subindex)\n"); + print(" )\n"); + print(" )\n"); + } + + close(VPL); + select($oldfh); +} + + +# eof diff --git a/Master/texmf-dist/source/latex/cjk/utils/subfonts/subfonts.pe b/Master/texmf-dist/source/latex/cjk/utils/subfonts/subfonts.pe new file mode 100644 index 00000000000..962b61d83a7 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/subfonts/subfonts.pe @@ -0,0 +1,88 @@ +# Generate CJK subfonts from master font. +# The fonts are created in the current directory. +# +# $1: The master font (e.g., `bsmi00lp.ttf'). +# $2: The name stem for the subfonts (e.g., `bsmilp'). +# $3: The subfont definition file (e.g., `UBig5.sfd'). +# +# A collection of useful subfont definition files for CJK fonts can be found +# in the ttf2pk package. + +# Copyright (C) 1994-2007 Werner Lemberg <wl@gnu.org> +# +# 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 in doc/COPYING; if not, write to the Free +# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +# MA 02110-1301 USA + +if (Strtol($version) < 20071105) + Print("Can't use FontForge version before 2007-11-05. Aborting."; + Quit(1); +endif; + +if ($argc != 4) + Print("usage: [fontforge -script] ", $0, " master-font name-stem SFD-file"); + Quit(1); +endif; + +Print("Loading ", $1, "..."); +Open($1); + +copyright = $copyright \ + + Chr(10) + Chr(10) \ + + "Subfont version " \ + + Strftime("%F", 1, "C") \ + + "."; +SetFontNames("", "", "", "", copyright, ""); + +Print("Ensure third order curves..."); +SetFontOrder(3); + +Print("Scaling to PostScript units..."); +ScaleToEm(900, 100); + +num_chars = CharCnt(); +count = 0; +delta = 100; + +while (count + delta < num_chars) + Print(count, "/", num_chars - 1, ":"); + Select(count, count + delta); + + Print(" Add extrema..."); + AddExtrema(); + + Print(" Simplifying outlines..."); + Simplify(0, 2); + + count += delta; +endloop; + +Print(count, "/", num_chars - 1, ":"); +Select(count, num_chars - 1); + +Print(" Add extrema..."); +AddExtrema(); + +Print(" Simplifying outlines..."); +Simplify(0, 2); + +SelectAll(); + +# generate AFM and TFM files, no PS hints, and rounded PS coordinates +Print("Generating subfonts..."); +Generate($2 + "%s.pfb", "", \ + 0x1 | 0x100 | 0x10000 | 0x80000 | 0x200000, \ + -1, $3); + +Quit(0); diff --git a/Master/texmf-dist/source/latex/cjk/utils/subfonts/uni2sfd.pl b/Master/texmf-dist/source/latex/cjk/utils/subfonts/uni2sfd.pl new file mode 100644 index 00000000000..722a3cf33ed --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/subfonts/uni2sfd.pl @@ -0,0 +1,312 @@ +#! /usr/bin/perl -w +# +# This script creates virtual subfonts in a font encoding given by a subfont +# definition file, based on Unicode subfonts. +# +# As prerequisites, it needs the programs `tftopl' and `vptovf' which must +# be in the path. +# +# Call the script as +# +# perl uni2sfd.pl uni-namestem sfd-file namestem codingscheme +# +# `uni-namestem' is the namestem of the Unicode subfonts; `uni2sfd.pl' +# appends the Unicode suffixes and reads the corresponding TFM files. +# `sfd-file' is the subfont definition file which maps Unicode input +# characters to the target subfont scheme using `namestem' as the namestem. +# `codingscheme' gives the value for the CODINGSCHEME parameter in the +# VF files (always converted to uppercase). +# +# Example: +# +# perl uni2sfd.pl bsmiu UBig5.sfd bsmilp cjkbig5 +# +# A collection of useful subfont definition files for CJK fonts can be found +# in the ttf2pk package. + +# Copyright (C) 1994-2008 Werner Lemberg <wl@gnu.org> +# +# 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 in doc/COPYING; if not, write to the Free +# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +# MA 02110-1301 USA + +use strict; + +my $prog = $0; +$prog =~ s@.*/@@; + +if ($#ARGV != 3) { + die("usage: $prog uni-namestem sfd-file namestem codingscheme\n"); +} + +my $uninamestem = $ARGV[0]; +my $sfdfile = $ARGV[1]; +my $namestem = $ARGV[2]; +my $codingscheme = $ARGV[3]; + + +# Read subfont definition file. + +my %sfd; +my @subfonts; + +read_sfdfile($sfdfile, \%sfd, \@subfonts); + + +# Read TFM files. + +my @unimetrics; + +foreach my $sub (0 .. 0xFF) { + my $suffix = sprintf("%02x", $sub); + my $tfmname = "$uninamestem$suffix.tfm"; + + if (-f $tfmname) { + read_tfmfile($tfmname, \@unimetrics, $suffix); + } +} + + +# Write VPL files. + +foreach my $sub (@subfonts) { + my @entries; + + foreach my $i (0 .. 255) { + if (defined ($sfd{"$sub $i"})) { + my $index = $sfd{"$sub $i"}; + if (defined ($unimetrics[$index])) { + push(@entries, "$i $index $unimetrics[$index]"); + } + } + } + + if ($#entries >= 0) { + write_vplfile("$namestem$sub.vpl", \@entries); + } +} + + +# Generate VF and TFM files, then remove the VPL files. + +my @vplfiles = glob("$namestem*.vpl"); +foreach my $vplfile (@vplfiles) { + print("Processing \`$vplfile'...\n"); + my $arg = "vptovf $vplfile"; + system($arg) == 0 + || die("$prog: calling \`$arg' failed: $?\n"); + print("Removing \`$vplfile'...\n"); + unlink($vplfile); +} + + +# Read an SFD file. +# +# $1: Name of the SFD file. +# $2: Reference to the target hash file, mapping from the character code +# to the subfont index. The format of the key value is the +# concatenation of the subfont suffix, a space, and the index. +# $3: Reference to a target array which holds the subfont suffixes. + +sub read_sfdfile { + my ($sfdfile, $sfdhash, $sfdarray) = @_; + + print("Reading subfont definition file \`$sfdfile'...\n"); + + open(SFD, $sfdfile) + || die("$prog: can't open \`$sfdfile': $!\n"); + + my $line; + my $continuation = 0; + while (<SFD>) { + chop; + + next if /^\s*$/; + next if /^#/; + + if ($continuation) { + $line .= $_; + } + else { + $line = $_; + } + $continuation = 0; + + if ($line =~ s/\\$//) { + $continuation = 1; + next; + } + + $_ = $line; + my @field = split(" "); + + my $suffix = $field[0]; + push(@{$sfdarray}, $suffix); + + shift(@field); + my $index = 0; + + while (@field) { + if ($field[0] =~ /(.*):$/) { + $index = $1; + } + elsif ($field[0] =~ /(.*)_(.*)/) { + my $start = $1; + my $end = $2; + $start = oct($start) if ($start =~ /^0/); + $end = oct($end) if ($end =~ /^0/); + foreach my $i ($start .. $end) { + $sfdhash->{"$suffix $index"} = $i; + $index++; + } + } + else { + my $value = $field[0]; + $value = oct($value) if ($value =~ /^0/); + $sfdhash->{"$suffix $index"} = $value; + $index++; + } + shift(@field); + } + } + close(SFD); +} + + +# Read TFM file. +# +# $1: Name of the TFM file. +# $2: Reference to the target array holding metric information in the form +# `<width> <heigth> <depth>'. +# $3: Subfont suffix. + +sub read_tfmfile { + my ($tfmfile, $unicarray, $suffix) = @_; + + print("Processing metrics file \`$tfmfile'...\n"); + my $arg = "tftopl $tfmfile > $tfmfile.pl"; + system($arg) == 0 + || die("$prog: calling \`$arg' failed: $?\n"); + + print("Reading property list file \`$tfmfile.pl'...\n"); + open(PL, "$tfmfile.pl") + || die("$prog: can't open \`$tfmfile.pl': $!\n"); + + while (<PL>) { + my $idx; + if (/^\(CHARACTER O (\d+)/) { + $idx = oct($1); + } + elsif (/^\(CHARACTER C (.)/) { + $idx = ord($1); + } + else { + next; + } + $idx += hex($suffix) * 256; + + my $wd = "0"; + my $ht = "0"; + my $dp = "0"; + + $_ = <PL>; + if (/\(CHARWD R (.*)\)/) { + $wd = "$1"; + $_ = <PL>; + } + if (/\(CHARHT R (.*)\)/) { + $ht = "$1"; + $_ = <PL>; + } + if (/\(CHARDP R (.*)\)/) { + $dp = "$1"; + } + + $unicarray->[$idx] = "$wd $ht $dp"; + } + close(PL); + print("Removing \`$tfmfile.pl'...\n"); + unlink("$tfmfile.pl"); +} + + +# Write VPL file. +# +# $1: Name of the VPL file. +# $2: Reference to list which holds the font entries. An entry has the +# form `<index> <Unicode> <width> <height> <depth>'. + +sub write_vplfile { + my ($vplfile, $glypharray) = @_; + + my %subfonts; + my $subcount = 0; + + foreach my $entry (@{$glypharray}) { + my @field = split(" ", $entry); + my $subfont = int($field[1] / 256); + if (!defined ($subfonts{$subfont})) { + $subfonts{$subfont} = $subcount; + $subcount++; + } + } + + print("Writing virtual property list file \`$vplfile'...\n"); + + open(VPL, ">", $vplfile) + || die("$prog: can't open \`$vplfile': $!\n"); + my $oldfh = select(VPL); + + print("(VTITLE Created by \`$prog " . join(" ", @ARGV) . "')\n"); + print("(FAMILY TEX-\U$namestem\E)\n"); + print("(CODINGSCHEME \U$codingscheme\E)\n"); + print("(FONTDIMEN\n"); + print(" (SPACE R 0.5)\n"); + print(" (XHEIGHT R 0.4)\n"); + print(" (QUAD R 1)\n"); + print(" )\n"); + + foreach my $subfont + (sort { $subfonts{$a} <=> $subfonts{$b} } keys %subfonts) { + print("(MAPFONT D $subfonts{$subfont}\n"); + print(" (FONTNAME $uninamestem" . sprintf("%02x", $subfont) . ")\n"); + print(" )\n"); + } + + foreach my $entry (@{$glypharray}) { + my @field = split(" ", $entry); + my $index = $field[0]; + my $subnumber = $subfonts{int($field[1] / 256)}; + my $subindex = $field[1] % 256; + my $width = $field[2]; + my $height = $field[3]; + my $depth = $field[4]; + + print("(CHARACTER D $index\n"); + print(" (CHARWD R $width)\n"); + print(" (CHARHT R $height)\n"); + print(" (CHARDP R $depth)\n"); + print(" (MAP\n"); + print(" (SELECTFONT D $subnumber)\n"); + print(" (SETCHAR D $subindex)\n"); + print(" )\n"); + print(" )\n"); + } + + close(VPL); + select($oldfh); +} + + +# eof diff --git a/Master/texmf-dist/source/latex/cjk/utils/subfonts/vertical.pe b/Master/texmf-dist/source/latex/cjk/utils/subfonts/vertical.pe new file mode 100644 index 00000000000..a10faef0887 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/subfonts/vertical.pe @@ -0,0 +1,108 @@ +# Generate a font which contains vertical glyph representations. +# The font is created in the current directory. +# +# $1: The master font (e.g., `bsmi00lp.ttf'). +# $2: The name of the vertical font (e.g., `bsmilpv'). + +# Copyright (C) 1994-2007 Werner Lemberg <wl@gnu.org> +# +# 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 in doc/COPYING; if not, write to the Free +# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +# MA 02110-1301 USA + +if (Strtol($version) < 20071105) + Print("Can't use FontForge version before 2007-11-05. Aborting."; + Quit(1); +endif; + +if ($argc != 3) + Print("usage: [fontforge -script] ", $0, " master-font vertical-fontname"); + Quit(1); +endif; + +Print("Loading ", $1, "..."); +Open($1); + +fontname = $2; +fullname = $fullname + " vertical"; +copyright = $copyright \ + + Chr(10) + Chr(10) \ + + "Vertical glyph representations version " \ + + Strftime("%F", 1, "C") \ + + "."; +SetFontNames(fontname, "", fullname, "", copyright, ""); + +SelectAll(); +ApplySubstitution("*", "*", "vert"); + +if (!$fontchanged) + Print("No vertical glyph representation forms found."); + Quit(1); +endif; + +SelectChanged(); + +SelectInvert(); +DetachAndRemoveGlyphs(); + +Print("Ensure third order curves..."); +SetFontOrder(3); + +Print("Scaling to PostScript units..."); +ScaleToEm(900, 100); + +num_chars = CharCnt(); +count = 0; +delta = 100; + +while (count + delta < num_chars) + Print(count, "/", num_chars - 1, ":"); + Select(count, count + delta); + + Print(" Add extrema..."); + AddExtrema(); + + Print(" Simplifying outlines..."); + Simplify(0, 2); + + count += delta; +endloop; + +Print(count, "/", num_chars - 1, ":"); +Select(count, num_chars - 1); + +Print(" Add extrema..."); +AddExtrema(); + +Print(" Simplifying outlines..."); +Simplify(0, 2); + +SelectAll(); +foreach + unicode = GlyphInfo("Unicode"); + if (unicode > 0) + SetUnicodeValue(unicode); + name = GlyphInfo("Name"); + SetGlyphName(name + ".vert", 0); + endif +endloop; + +Reencode("original"); + +# generate AFM and TFM files, no PS hints, and rounded PS coordinates +Print("Generating font..."); +Generate($2 + ".pfb", "", \ + 0x1 | 0x100 | 0x10000 | 0x80000 | 0x200000); + +Quit(0); diff --git a/Master/texmf-dist/source/latex/cjk/utils/subfonts/vertref.pe b/Master/texmf-dist/source/latex/cjk/utils/subfonts/vertref.pe new file mode 100644 index 00000000000..63533f94733 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/subfonts/vertref.pe @@ -0,0 +1,121 @@ +# Generate a font with glyphs which have vertical glyph representations (but +# don't include the vertical glyph representations itself). This is used by +# the perl script `makefdx.pl' to create an FDX file as used by the CJK +# package for LaTeX. +# +# The font is created in the current directory. +# +# $1: The master font (e.g., `bsmi00lp.ttf'). +# $2: The name of the target font (e.g., `bsmilpvr'). + +# Copyright (C) 1994-2007 Werner Lemberg <wl@gnu.org> +# +# 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 in doc/COPYING; if not, write to the Free +# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +# MA 02110-1301 USA + +if (Strtol($version) < 20071105) + Print("Can't use FontForge version before 2007-11-05. Aborting."; + Quit(1); +endif; + +if ($argc != 3) + Print("usage: [fontforge -script] ", $0, " master-font fontname"); + Quit(1); +endif; + +Print("Loading ", $1, "..."); +Open($1); + +fontname = $2; +fullname = $fullname + " vertical reference"; +copyright = $copyright \ + + Chr(10) + Chr(10) \ + + "Vertical glyph reference font version " \ + + Strftime("%F", 1, "C") \ + + "."; +SetFontNames(fontname, "", fullname, "", copyright, ""); + +lookups = GetLookups("GSUB"); + +i = 0; +result = -1; +while (i < SizeOf(lookups)) + if (Strstr(lookups[i], "'vert'") >= 0) + result = i; + endif; + i++; +endloop; + +if (result == -1) + Print("This font doesn't contain a GSUB table with a `vert' feature."); + Quit(1); +endif; + +subtables = GetLookupSubtables(lookups[result]); + +i = 0; +result = -1; +while (i < SizeOf(subtables)) + if (Strstr(subtables[i], "'vert'") >= 0) + result = i; + endif; + i++; +endloop; + +SelectByPosSub(subtables[result], 1); + +SelectInvert(); +DetachAndRemoveGlyphs(); + +Print("Ensure third order curves..."); +SetFontOrder(3); + +Print("Scaling to PostScript units..."); +ScaleToEm(900, 100); + +num_chars = CharCnt(); +count = 0; +delta = 100; + +while (count + delta < num_chars) + Print(count, "/", num_chars - 1, ":"); + Select(count, count + delta); + + Print(" Add extrema..."); + AddExtrema(); + + Print(" Simplifying outlines..."); + Simplify(0, 2); + + count += delta; +endloop; + +Print(count, "/", num_chars - 1, ":"); +Select(count, num_chars - 1); + +Print(" Add extrema..."); +AddExtrema(); + +Print(" Simplifying outlines..."); +Simplify(0, 2); + +Reencode("original"); + +# generate AFM and TFM files, no PS hints, and rounded PS coordinates +Print("Generating font..."); +Generate($2 + ".pfb", "", \ + 0x1 | 0x100 | 0x10000 | 0x80000 | 0x200000); + +Quit(0); diff --git a/Master/texmf-dist/source/latex/cjk/utils/thaifont/tools/INSTALL b/Master/texmf-dist/source/latex/cjk/utils/thaifont/tools/INSTALL new file mode 100644 index 00000000000..025e923ed99 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/thaifont/tools/INSTALL @@ -0,0 +1,337 @@ +Installation of Thai fonts for TeX with fontinst +------------------------------------------------ + +0. The files `c90.etx' and `c90.mtx' must be in the TeX inputs path. + Normally, the current directory also works. Note that you need + fontinst version 1.918 or higher. + +1. In case your Thai font doesn't come with an AFM metrics file you + must extract it from the font using tools like `type1afm' (from + the t1lib package) or ghostscript's `ps2afm' program. + +2. Create a control file for fontinst. + + Example: + + Let us assume that we have the following AFM files for the + Garuda family, using version 2.1 of the fonts (from the + ThaiLaTeX project): + + garuda.afm + garuda_b.afm + garuda_o.afm + garuda_bo.afm + + You should use glyph names compliant to Karl Berry's `fontname' + scheme. For `garuda', this could be `fgdr8z': `f' is the foundry + (`small foundry'), `gd' is the typeface name, `r' means the + weight (`regular'), and `8z' the encoding (8bit user). + Similarly, suitable names for the other fonts are `fgdb8z', + `fgdo8z', and `fgdbo8z', respectively. + + Fonts with `f' as the supplier should go into a `public' font + directory. The typeface `Garuda' already exists in the latest + fontname version (typeface.map version 4-Jul-2005 at the time of + writing), the associated directory is `garuda'. Please consult + the `fontname' standard for more information. + + A template for the fontinst control file can be found as + `norasi.fontinst'; here a version for garuda: + + ==== garuda.fontinst ==== + + \input fontinst.sty + + \needsfontinstversion{1.918} + + + % we explicitly set all slots in the encoding, so provide all + % glyph names in AFM files equally (this is, don't create + % `<glyph>-not' names) + \let\setnotglyph \setrawglyph + + % we want warnings for missing glyphs + \fontinstcc + \add_to\pre_fourth_etx_pass_hook{ + \def\do_slot{ + \if_undefined{g-\slot_name}\then + \fontinstwarningnoline{fontinst} + {missing~glyph~`\slot_name'\space + for~slot~\the\slot_number\space + in~font~`\out_filename'} + \fi + \do_character + } + } + \normalcc + + + % create PL files and an FD file + \installfonts + \setint{fontdimen(2)}{500} % SPACE + \setint{fontdimen(3)}{300} % STRETCH + \setint{fontdimen(4)}{100} % SHRINK + \setint{fontdimen(6)}{1000} % QUAD + \setint{fontdimen(7)}{0} % EXTRASPACE + + \installrawfont{fdbr8z}{garuda,c90}{c90} + {C90}{garuda}{m}{n}{} + \installrawfont{fdbb8z}{garuda_b,c90}{c90} + {C90}{garuda}{bx}{n}{} + \installrawfont{fdbbo8z}{garuda_bo,c90}{c90} + {C90}{garuda}{bx}{sl}{} + \installrawfont{fdbo8z}{garuda_o,c90}{c90} + {C90}{garuda}{m}{sl}{} + \endinstallfonts + + + \input finstmsc.sty + + + % create the c90.enc file + \installfonts + % the `makeenc' flag is used in c90.etx + \setint{makeenc}{1} + \setstr{encodingname}{C90Encoding} + \etxtoenc{c90}{c90} + \endinstallfonts + + \end + + ==== garuda.fontinst ==== + + Some explanations. + + - The control files also creates MTX and PL files for the AFM + files (e.g., garuda.mtx and garuda.pl) which aren't needed and + can be deleted. + + - AFM files don't provide all necessary font dimensions for TeX. + Consequently, you have to set some dimensions manually. The + `SPACE' value must be larger than for a Latin font; a + reasonable value is 500. You should increase the `STRETCH' + value also -- some tests have shown that 300 yields good + results, but this depends on the font. `EXTRASPACE' can be + set to zero since you must always use TeX's \frenchspacing + command for Thai. All other font dimension values given above + are default values and can stay unmodified. + + There is nothing for free: The changed font dimensions improve + spacing between Thai words, but Latin words are far too widely + spaced. + + - The arguments to \installrawfont are as follows. + + #1 The target font name. + #2 A comma separated list (without spaces) of metric + files. Above, the first one is the AFM file, the + second one is c90.mtx which sets up the three + mandatory alias glyph slots. + #3 The name of the encoding file (c90.etx). + #4-#7 The NFSS attributes for the font. + #8 The size command. If it is empty, `<->' is used. + + - The second \installfonts...\endinstallfonts block creates an + encoding file. + +3. Run fontinst: + + tex garuda.fontinst + + If you get warnings about missing glyphs which are critical (this + is, if it affects Thai characters), you have to configure fontinst + to use an alias file for glyph names. This is described below. + +4. Say + + pltotf <PL-file> + + for all target PL files to create TFM files. + + Example: + + pltotf fgdr8z + pltotf fgdb8z + pltotf fgdo8z + pltotf fgdbo8z + + After the conversion, the PL files are no longer needed and can be + deleted. As mentioned above, the PL files created directly from + the AFM files need not be converted. + +5. Create a mapping file <font>.map for the PS fonts (which can be + used by both dvips and pdftex). + + Example `garuda.map' (the lines are splitted for readability only): + + fgdr8z Garuda \ + " C90Encoding ReEncodeFont " <c90.enc <garuda.pfb + fgdb8z Garuda-Bold \ + " C90Encoding ReEncodeFont " <c90.enc <garuda_b.pfb + fgdo8z Garuda-Oblique \ + " C90Encoding ReEncodeFont " <c90.enc <garuda_o.pfb + fgdbo8z Garuda-BoldOblique \ + " C90Encoding ReEncodeFont " <c90.enc <garuda_bo.pfb + + A proper entry for the mapping file (dvipdfm.map) of dvipdfm (and + dvipdfmx) looks like this: + + fgdr8z c90 garuda + fgdb8z c90 garuda_b + fgdo8z c90 garuda_o + fgdbo8z c90 garuda_bo + + Note that teTeX's (and TeXLive's) `updmap' script can automatically + convert a map line for dvips to a proper entry for dvipdfm and + dvipdfmx. + +6. There are two possibilities how to make the Thai fonts known to + dvips. + + - Append the contents of the map file to `psfonts.map' (or the map + file specified in the configuration file of dvips, `config.ps', + with the `p' option). How to do this may vary depending on the + used TeX system; for example, teTeX and TeXLive both use a script + called `updmap' to maintain `psfonts.map'. + + - Write a small file called config.<font> (e.g., `config.garuda'; on + platforms like MS-DOS which don't support long filename + extensions you can use `garuda.cfg' instead) with the following + line in it: + + p +<map_file> + + Example: + + p +garuda.map + + Then you can use the `-P' command line option of dvips to + include the reencoded font. Example: + + dvips -P garuda test.dvi + +7. After testing, install the font and its support files in your TeX + tree. In the following example, `TEXMF' denotes the location of + your (local) `texmf' directory (we assume a TeX installation + compliant to TDS 1.1 as provided recent versions of TeXLive and + teTeX). + + garuda.pfb -> TEXMF/fonts/type1/public/garuda/ + garuda.afm -> TEXMF/fonts/afm/public/garuda/ + ... + + c90.enc -> TEXMF/fonts/enc/dvips/thai/ + + garuda.map -> TEXMF/fonts/map/dvips/garuda/ + config.garuda -> TEXMF/dvips/garuda/ + + fgdr8z.tfm -> TEXMF/fonts/tfm/public/garuda/ + ... + + c90gar.fd -> TEXMF/tex/latex/CJK/thai/ + +8. Run texhash or a similar program to update the TDS database if + necessary. + + +You are done! With plain TeX, say e.g. + + \font\thai = fgdr9z at 16pt + +to use the font \thai. This will typeset TIS-620 encoded Thai. +Note, however, that you need CJK's cjk-enc.el for Emacs to insert +proper inter-character glue and word breakpoints in case you want +to typeset longer Thai phrases. + + +Reencoding Thai fonts +--------------------- + +Older Thai fonts don't use proper glyph names, and recent ones +probably use different suffixes; it is thus necessary to make fontinst +aware of those names. + +A complete example can be found in the `dbtt-old' subdirectory (which +can be used for the dbtt fonts from TeXLive 8 or earlier). + +a. Set up a file which contains all the aliases, using the \galias + macro. This file should have the extension `.tex'. + + Example: + + If glyph `endash' is represented with glyph name `ucircumflex' + in the font, use the following: + + \galias{ucircumflex}{endash} + +b. Set up both ETX and MTX files which load the just created glyph + alias file. To do that, use the files `dbtt-old-alias.etx' and + `dbtt-old-alias.mtx' as templates. Leave everything unchanged + except the line with \input which should load your glyph alias + file. + +c. Set up a proper fontinst control file. Use `dbtt-old.fontinst' + as a template, replacing the `dbtt-old-alias' items in the + \installrawfont lines with the name of your MTX file. Similarly, + the three last lines in the second + \installfonts...\endinstallfonts block should be adjusted + accordingly. + +d. Continue with item 3 above. Note that in item 5, you have to use + not `C90Encoding' but the encoding name defined with the \setstr + line in your fontinst control file. + + +Using different LaTeX encodings for Thai +---------------------------------------- + +The used encoding scheme within the CJK package for Thai is `C90', +but it is straightforward to adapt it to other Thai encodings like +`LTH' by reordering the `\setslot ... \endsetslot' blocks in the file +`c90.etx'. + +Currently, only CJK's cjk-enc.el output filter for Emacs needs the +Thai ligatures -- other Thai word segmentation programs like `swath' +or `cttex' already replace the input characters with proper glyph +variants. Anyway, they don't harm, and it is on the TODO list of the +thailatex maintainers to finally use those ligatures also. + + +Printing c90.etx +---------------- + +It is possible to convert the main fontinst encoding file for Thai, +c90.etx, into a printable document. To do so, you have to apply the +patch below to the file `fontdoc.sty' (which is part of the fontinst +package -- tested with fontinst version 1.926; newer versions have +already been corrected and don't need this patch), then simply say + + latex c90.etx + + +==================================================================== + + +--- fontdoc.sty.old Mon Feb 9 21:28:59 2004 ++++ fontdoc.sty Wed Jun 23 12:13:04 2004 +@@ -1052,7 +1052,7 @@ + \x@cs\def{FD@lig-/LIG}#1#2{% + \FD@typeset@string{\slot@name}${}*{}$\typeset@glyph{#1}% + ${}\rightarrow{}$% +- \FD@typeset@string{\slot@name}${}*{}$\typeset@glyph{#2}$% ++ \FD@typeset@string{\slot@name}${}*{}$\typeset@glyph{#2}% + } + \x@cs\def{FD@lig-LIG/}#1#2{% + \FD@typeset@string{\slot@name}${}*{}$\typeset@glyph{#1}% +@@ -1085,7 +1085,7 @@ + \FD@typeset@string{\slot@name}${}*{}$\typeset@glyph{#1}% + ${}\rightarrow{}$% + \FD@typeset@string{\slot@name}${}*{}$% +- \typeset@glyph{#2}${}*\lfloor$\typeset@glyph{#1}$} ++ \typeset@glyph{#2}${}*\lfloor$\typeset@glyph{#1}} + \def\nextlarger#1{\Bheading{Next larger} \typeset@glyph{#1}} + \def\makerightboundary#1{% + \Bheading{Right boundary marker slot} designation \typeset@glyph{#1}% + + +---end of INSTALL--- diff --git a/Master/texmf-dist/source/latex/cjk/utils/thaifont/tools/c90.etx b/Master/texmf-dist/source/latex/cjk/utils/thaifont/tools/c90.etx new file mode 100644 index 00000000000..9b00a0c110b --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/thaifont/tools/c90.etx @@ -0,0 +1,2346 @@ +% c90.etx + +% Copyright (C) 1994-2008 Werner Lemberg <wl@gnu.org> +% +% 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 in doc/COPYING; if not, write to the Free +% Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +% MA 02110-1301 USA + +\relax +\documentclass{article} + +\usepackage[specification]{fontdoc}[2001/06/01] +\usepackage{textcomp} +\usepackage{shortvrb} +\usepackage{mflogo} +\usepackage{multicol} +\usepackage{url} + +\MakeShortVerb{\|} + +\newlength{\Stackwidth} + +\newcommand\StackAbove[2]{% + \settowidth{\Stackwidth}{$#1$}% + \vbox{\hbox{$#1$}% + \hbox to \Stackwidth{\hss $#2$\hss}}% +} +\newcommand\StackBelow[2]{% + \settowidth{\Stackwidth}{$#1$}% + \vtop{\hbox{$#1$}% + \hbox to \Stackwidth{\hss $#2$\hss}}% +} + +\newcommand{\thaiclass}[1]{% + {\textit{#1}}% +} +\newcommand{\thaiclassx}[2]{% + \thaiclass{#1}% + \raisebox{-0.4ex}{{\footnotesize\textit{#2}}}% +} +\newcommand{\thaiclassxx}[3]{% + \thaiclassx{#1}{#2}% + \raisebox{-0.8ex}{{\tiny\textit{#3}}}% +} + + +\begin{document} + +\title{The \texttt{C90} encoding for Thai} +\author{Werner Lemberg} +\date{2005/07/04} +\maketitle + + +\section{Introduction} + +This file describes a font encoding for Thai, as presented in a +TUGboat article~\cite{TUG-Thai}. The glyph names follow the Adobe +Glyph List (AGL)~\cite{AGL} recommendations. Since most available +Thai fonts neither use AGL glyph names nor follow the font encoding +used here, you have to be careful in setting up a proper encoding +vector. A specialty (for reasons explained below) is that three +glyphs, namely |/uni0E38| (Thai character `sara u'), |/uni0E39| (Thai +character `sara uu'), and |/uni0E3A| (Thai character `phinthu') must +appear twice in the encoding; the additional glyph indices are |0x80|, +|0x81|, and |0x82|, respectively. + + +\section{Ligatures} +The tricky part is implementing the ligatures. TeX's ligature +mechanism only provides contextual patterns of length~2. Due to the +very nature of the ETX format, ligatures aren't grouped into classes +which makes this file rather long. + +Thai glyphs can be grouped functionally into base glyphs (which are +spacing glyphs) and diacritics (which have zero advance width). +Usually, diacritical glyphs represent either vowels or tone +indicators, whereas base glyphs represent consonants -- I won't go +into detail here; please read the Unicode standard~\cite{Unicode} or +any introduction into the Thai script for more information. + +The general composing rules are as follows: + +\[ + CV \longrightarrow \StackAbove{V}{C}\,,\quad + CT \longrightarrow \StackAbove{T}{C}\,,\quad + CVT \longrightarrow \StackAbove{\StackAbove{T}{V}}{C}\,,\quad + Cv \longrightarrow \StackBelow{C}{v}\,,\quad + CvT \longrightarrow \StackBelow{\StackAbove{T}{C}}{v} +\] + +\noindent +where $C$ represents a base consonant, $V$ an upper vowel, $v$ a lower +vowel, and $T$ a tone mark. The tone mark always comes last. + +Sometimes you will find documents which have first the tone mark and +then the vowel. In real Thai input systems, this error will be +catched and fixed by reordering the characters according to the +TIS-620 Thai encoding standard before any output is created. The +ligatures given below are not able to handle such incorrect data, and +you have to normalize it before using them. + +It depends on context where the diacritics are exactly positioned; +some base glyphs have overlong ascenders or descenders, making it +necessary to shift the diacritics vertically and horizontally. + +To complicate things, the Thai vowel `sara am' (TIS-620 code point +|0xD3|, Unicode value |U+0E33|), which looks like the final nasal sign +`nikhahit' (|0xED|, |U+0E4D|) followed by the vowel `sara aa' (|0xD2|, +|U+0E32|), will be decomposed into these two glyphs for rendering. +The difficulty is that we must position the tone mark of the +\emph{previous} character properly! Thus we have + +\[ + C + SM \longrightarrow \StackAbove{N}{C} + SA\,,\quad + C + T + SM \longrightarrow \StackAbove{\StackAbove{T}{N}}{C} + SA +\] + +A last specialty (used for Sanskrit written in Thai) is that `sara aa' +if it follows the independent vowel letter `ru' (|0xC4|, |U+0E24|) or +`lu' (|0xC6|, |U+0E26|) is replaced with the `lakkhangyao' sign +(|0xE5|, |U+0E45|). + + +\section{Glyph Classes} + +To describe the patterns and rules we start with defining glyph +classes. + +\begin{quote} + \begin{description} + \item[\thaiclassx{base}{normal}] Normal base glyphs without special + features. + \item[\thaiclassx{base}{desc}] Base glyphs with descender. + \item[\thaiclassx{base}{desclike}] These base glyphs consist of two + elements which look like a normal base glyph combined with a lower + vowel diacritic; the diacritic-like element will be omitted if + combined with a lower vowel. + \item[\thaiclassx{base}{asc}] Base glyphs with an ascender on the + right side. + \item[\thaiclassx{base}{indic}] The two independent vowels \emph{ru} + and \emph{lu}. + \item[\thaiclassx{base}{sign}] The sign \emph{lakkhangyao}. + \item[\thaiclassx{base}{sara am}] The vowel \emph{sara am}. + \item[\thaiclassx{base}{sara aa}] The vowel \emph{sara aa}. + \item[\thaiclass{lower}] Lower vowel diacritics. + \item[\thaiclassx{upper}{vowel}] Upper vowel diacritics. + \item[\thaiclassx{upper}{sign}] The \emph{nikhahit} final nasal + sign. + \item[\thaiclass{top}] Tone marks. + \end{description} +\end{quote} + +Here the glyph variant classes: + +\begin{quote} + \begin{description} + \item[\thaiclassx{base}{descless}] The glyphs of class + \thaiclassx{base}{desclike} without the lower part. + \item[\thaiclassx{lower}{low}] The glyphs of class + \thaiclass{lower} shifted downwards. + \item[\thaiclassxx{upper}{vowel}{left}] The glyphs of class + \thaiclassx{upper}{vowel} shifted to the left. + \item[\thaiclassxx{upper}{sign}{left}] The glyphs of class + \thaiclassx{upper}{sign} shifted to the left. + \item[\thaiclassx{top}{left}] The glyphs of class + \thaiclass{top} shifted to the left. + \item[\thaiclassx{top}{low}] The glyphs of class + \thaiclass{top} shifted downwards. + \item[\thaiclassx{top}{low-left}] The glyphs of class + \thaiclass{top} shifted to the left and downwards. + \end{description} +\end{quote} + + +\section{Context Patterns} + +Using the glyph classes defined in the last section it is easy to +describe the context patterns for base glyphs with diacritical signs. +Surprisingly, these patterns are quite systematic. Patterns in +table~\ref{table:context-dia} which are marked with an asterisk do +nothing and are listed for completeness only. Note that these +patterns cover combinations which don't happen in the Thai script +(which doesn't harm). + +\begin{table*} + \centering + \def\arraystretch{1.3} + \begin{tabular} + {l@{~}l@{~}l@{~}l@{\hbox{~\textrightarrow~}}l@{~}l@{~}l@{~}l@{~}l} + \thaiclass{base} &\thaiclass{lower} + & & + &\thaiclass{base} &\thaiclass{lower} + & & &* \\ + \thaiclass{base} & + &\thaiclass{upper} & + &\thaiclass{base} & + &\thaiclass{upper} & &* \\ + \thaiclass{base} & + & &\thaiclass{top} + &\thaiclass{base} & + & &\thaiclassx{top}{low} & \\ + \thaiclass{base} &\thaiclass{lower} + & &\thaiclass{top} + &\thaiclass{base} &\thaiclass{lower} + & &\thaiclassx{top}{low} & \\ + \thaiclass{base} & + &\thaiclass{upper} &\thaiclass{top} + &\thaiclass{base} & + &\thaiclass{upper} &\thaiclass{top} &* \\[2ex] + + \thaiclassx{base}{desc} &\thaiclass{lower} + & & + &\thaiclassx{base}{desc} &\thaiclassx{lower}{low} + & & & \\ + \thaiclassx{base}{desc} & + &\thaiclass{upper} & + &\thaiclassx{base}{desc} & + &\thaiclass{upper} & &* \\ + \thaiclassx{base}{desc} & + & &\thaiclass{top} + &\thaiclassx{base}{desc} & + & &\thaiclassx{top}{low} & \\ + \thaiclassx{base}{desc} &\thaiclass{lower} + & &\thaiclass{top} + &\thaiclassx{base}{desc} &\thaiclassx{lower}{low} + & &\thaiclassx{top}{low} & \\ + \thaiclassx{base}{desc} & + &\thaiclass{upper} &\thaiclass{top} + &\thaiclassx{base}{desc} & + &\thaiclass{upper} &\thaiclass{top} &* \\[2ex] + + \thaiclassx{base}{desclike} &\thaiclass{lower} + & & + &\thaiclassx{base}{descless} & + & & & \\ + \thaiclassx{base}{desclike} & + &\thaiclass{upper} & + &\thaiclassx{base}{desclike} & + &\thaiclass{upper} & &* \\ + \thaiclassx{base}{desclike} & + & &\thaiclass{top} + &\thaiclassx{base}{desclike} & + & &\thaiclassx{top}{low} & \\ + \thaiclassx{base}{desclike} &\thaiclass{lower} + & &\thaiclass{top} + &\thaiclassx{base}{descless} &\thaiclass{lower} + & &\thaiclassx{top}{low} & \\ + \thaiclassx{base}{desclike} & + &\thaiclass{upper} &\thaiclass{top} + &\thaiclassx{base}{desclike} & + &\thaiclass{upper} &\thaiclass{top} &* \\[2ex] + + \thaiclassx{base}{asc} &\thaiclass{lower} + & & + &\thaiclassx{base}{asc} &\thaiclass{lower} + & & &* \\ + \thaiclassx{base}{asc} & + &\thaiclass{upper} & + &\thaiclassx{base}{asc} & + &\thaiclassx{upper}{left} & & \\ + \thaiclassx{base}{asc} & + & &\thaiclass{top} + &\thaiclassx{base}{asc} & + & &\thaiclassx{top}{low-left} & \\ + \thaiclassx{base}{asc} &\thaiclass{lower} + & &\thaiclass{top} + &\thaiclassx{base}{asc} &\thaiclass{lower} + & &\thaiclassx{top}{low-left} & \\ + \thaiclassx{base}{asc} & + &\thaiclass{upper} &\thaiclass{top} + &\thaiclassx{base}{asc} & + &\thaiclassx{upper}{left} &\thaiclassx{top}{left} & \\ + \end{tabular} + + \caption{Context patterns for diacritical signs. Here, + \thaiclass{base} refers to the union of the subclasses + \thaiclass{normal}, \thaiclass{indic}, \thaiclass{sign}, + \thaiclass{sara am}, and \thaiclass{sara aa} of \thaiclass{base}; + \thaiclass{upper} is the union of the subclasses \thaiclass{vowel} + and \thaiclass{sign} of \thaiclass{upper}.} + \label{table:context-dia} +\end{table*} + +Table~\ref{table:context-sara} covers the ligatures of the character +\emph{sara am}. Finally, table~\ref{table:context-indic} describes +the letters specific to Sanskrit. + +\begin{table*} + \centering + \def\arraystretch{1.3} + \begin{tabular}{l@{~}l@{~}l@{\hbox{~\textrightarrow~}}l@{~}l@{~}l@{~}l} + \thaiclass{base} &\thaiclassx{base}{sara am} & + &\thaiclass{base} &\thaiclassx{upper}{sign} + & &\thaiclassx{base}{sara aa} \\ + \thaiclassx{base}{asc} &\thaiclassx{base}{sara am} & + &\thaiclassx{base}{asc} &\thaiclassxx{upper}{sign}{left} + & &\thaiclassx{base}{sara aa} \\[2ex] + + \thaiclass{base} &\thaiclass{top} &\thaiclassx{base}{sara am} + &\thaiclass{base} &\thaiclassx{upper}{sign} + &\thaiclass{top} &\thaiclassx{base}{sara aa} \\ + \thaiclassx{base}{asc} &\thaiclass{top} &\thaiclassx{base}{sara + am} + &\thaiclassx{base}{asc} &\thaiclassxx{upper}{sign}{left} + &\thaiclassx{top}{left} &\thaiclassx{base}{sara aa} + \end{tabular} + \caption{Context patterns for \emph{sara am}. Here, + \thaiclass{base} denotes the union of subclasses + \thaiclass{normal}, \thaiclass{desc}, and \thaiclass{desclike} of + \thaiclass{base}.} + \label{table:context-sara} +\end{table*} + +\begin{table*} + \centering + \def\arraystretch{1.3} + \begin{tabular}{l@{~}l@{\hbox{~\textrightarrow~}}l@{~}l} + \thaiclassx{base}{indic} &\thaiclassx{base}{sara aa} + &\thaiclassx{base}{indic} &\thaiclassx{base}{sign} + \end{tabular} + \caption{Context patterns for \emph{ru} and \emph{lu}.} + \label{table:context-indic} +\end{table*} + +\section{\TeX's Ligature Mechanism} + +\DeleteShortVerb{\|} + +A small introduction into the exotic variants of \TeX's ligature +mechanism which probably many users haven't seen before. +Additionally, the documentation in the \emph{\MF book}~\cite{MFbook} +is very sparse. In the following examples \MF's notation is used. + +The usual ligature action of two glyphs $a$ and~$b$ is the replacement +of both glyphs with another glyph~$c$. + +\begin{center} + \texttt{a b =:\ c} +\end{center} + +Another possibility is to retain the left or the right original glyph +(before and after the ligature, respectively) or both. + +\begin{center} + \texttt{a b |=:\ c} \quad + \texttt{a b =:| c} \quad + \texttt{a b |=:| c} +\end{center} + +\noindent +The first rule creates $ac$, the second $cb$, and the last $acb$. In +all three cases, the current point after appying the ligature rule is +still at the first glyph of the replaced glyphs, and \TeX\ simply +restarts there to check ligatures (and kernings). A classical example +is + +\begin{center} + f f i \textrightarrow\ ff i \textrightarrow\ ffi +\end{center} + +To advance the current point to the right, append either \texttt{>} or +\texttt{>{}>} (the latter is only possible if you retain both input +glyphs). Here are the remaining four ligature rules. + +\begin{center} + \texttt{a b |=:> c} \quad + \texttt{a b =:|> c} \\ + \texttt{a b |=:|> c} \quad + \texttt{a b |=:|>{}> c} +\end{center} + +For Thai ligatures, the most often needed rule is \texttt{|=:}\ (i.e., +retain the left glyph and stay at the same position before applying +the next ligature rule). Note that using \texttt{|=:>} instead is not +a good idea since this would prohibit kerning between the left glyph +and the ligature. + +\section{Ligature Rules} + +\MakeShortVerb{\|} + +As just explained, \TeX\ can only handle context patterns of length~2, +whereas Thai needs patterns of length~3. It was an interesting +challenge to find out whether the problem can be solved with \TeX's +somewhat restricted ligature rules -- the gentle reader is invited to +find a solution by herself! There won't be any difficulties in +understanding ligatures afterwards. + +The tables~\ref{table:liga-dia}, \ref{table:liga-sara}, +and~\ref{table:liga-indic} use the same conventions as +tables~\ref{table:context-dia}, \ref{table:context-sara}, +and~\ref{table:context-indic}, respectively. The current point isn't +increased in any of the rules. + +\begin{table*} + \centering + \def\arraystretch{1.3} + \begin{tabular}{l@{~}l@{\hbox{~\textrightarrow~}}l@{~}l} + \thaiclass{base} &\thaiclass{top} + &\thaiclass{base} &\thaiclassx{top}{low} \\ + \thaiclassx{base}{desc} &\thaiclass{lower} + &\thaiclassx{base}{desc} &\thaiclassx{lower}{low} \\ + \thaiclassx{base}{desc} &\thaiclass{top} + &\thaiclassx{base}{desc} &\thaiclassx{top}{low} \\ + \thaiclassx{base}{desclike} &\thaiclass{lower} + &\thaiclassx{base}{descless} &\thaiclass{lower} \\ + \thaiclassx{base}{desclike} &\thaiclass{top} + &\thaiclassx{base}{desclike} &\thaiclassx{top}{low} \\ + \thaiclassx{base}{asc} &\thaiclass{lower} + &\thaiclassx{base}{asc} &\thaiclassx{lower}{left} \\ + \thaiclassx{base}{asc} &\thaiclass{upper} + &\thaiclassx{base}{asc} &\thaiclassx{upper}{left} \\ + \thaiclassx{base}{asc} &\thaiclass{top} + &\thaiclassx{base}{asc} &\thaiclassx{top}{low-left} \\[2ex] + + \thaiclass{lower} &\thaiclass{top} + &\thaiclass{lower} &\thaiclassx{top}{low} \\ + \thaiclassx{lower}{low} &\thaiclass{top} + &\thaiclassx{lower}{low} &\thaiclassx{top}{low} \\[2ex] + + \thaiclassx{upper}{left} &\thaiclass{top} + &\thaiclassx{upper}{left} &\thaiclassx{top}{left} \\[2ex] + + \thaiclassx{lower}{left} &\thaiclass{top} + &\thaiclassx{lower}{left} &\thaiclassx{top}{low-left} \\ + \end{tabular} + + \caption{Ligature rules for diacritical marks.} + \label{table:liga-dia} +\end{table*} + +\begin{table*} + \centering + \def\arraystretch{1.3} + \begin{tabular}{l@{~}l@{\hbox{~\textrightarrow~}}l@{~}l@{~}l} + \thaiclass{base} &\thaiclassx{base}{sara am} + &\thaiclass{base} &\thaiclassx{upper}{sign} + &\thaiclassx{base}{sara am} \\ + \thaiclassx{base}{asc} &\thaiclassx{base}{sara am} + &\thaiclassx{base}{asc} &\thaiclassxx{upper}{sign}{left} + &\thaiclassx{base}{sara am} \\[2ex] + + \thaiclassx{upper}{sign} &\thaiclassx{base}{sara am} + &\thaiclassx{upper}{sign} &\thaiclassx{base}{sara aa} + & \\ + \thaiclassxx{upper}{sign}{left} &\thaiclassx{base}{sara am} + &\thaiclassxx{upper}{sign}{left} &\thaiclassx{base}{sara aa} + & \\[2ex] + + \thaiclassx{top}{low} &\thaiclassx{base}{sara am} + &\thaiclassx{top}{low} &\thaiclass{top} + &\thaiclassx{base}{sara am} \\ + \thaiclassx{top}{low} &\thaiclass{top} + &\thaiclassx{upper}{sign} &\thaiclass{top} + & \\ + \thaiclass{top} &\thaiclassx{base}{sara am} + &\thaiclass{top} &\thaiclassx{base}{sara aa} + & \\[2ex] + + \thaiclassx{top}{low-left} &\thaiclassx{base}{sara am} + &\thaiclassx{top}{low-left} &\thaiclassx{top}{left} + &\thaiclassx{base}{sara am} \\ + \thaiclassx{top}{low-left} &\thaiclassx{top}{left} + &\thaiclassxx{upper}{sign}{left} &\thaiclassx{top}{left} + & \\ + \thaiclassx{top}{left} &\thaiclassx{base}{sara am} + &\thaiclassx{top}{left} &\thaiclassx{base}{sara aa} \\ + \end{tabular} + + \caption{Ligature rules for \emph{sara am}.} + \label{table:liga-sara} +\end{table*} + +\begin{table*} + \centering + \def\arraystretch{1.3} + \begin{tabular}{l@{~}l@{\hbox{~\textrightarrow~}}l@{~}l} + \thaiclassx{base}{indic} &\thaiclassx{base}{sara aa} + &\thaiclassx{base}{indic} &\thaiclassx{base}{sign} + \end{tabular} + \caption{Ligature rule for \emph{ru} and \emph{lu}.} + \label{table:liga-indic} +\end{table*} + +Most of the ligature rules can be derived easily by handling the +patterns sequentially (quite similar to logic puzzles found in various +magazines), but at the end there remain two patterns which apparently +contradict. + +\setlength{\tabcolsep}{3pt} + +\begin{center} + \begin{tabular}{l@{~}l@{~}l@{\hbox{~\textrightarrow~}}l@{~}l@{~}l} + \thaiclass{base} &\thaiclass{lower} &\thaiclass{top} + &\thaiclass{base} &\thaiclass{lower} + &\thaiclassx{top}{low} \\ + \thaiclassx{base}{asc} &\thaiclass{lower} &\thaiclass{top} + &\thaiclassx{base}{asc} &\thaiclass{lower} + &\thaiclassx{top}{low-left} \\ + \end{tabular} +\end{center} + +After applying ligature rules for the first two glyph classes it is +necessary to handle the context `\thaiclass{lower} \thaiclass{top}', +but depending on the previous glyph class \thaiclass{top} must be +replaced with \thaiclassx{top}{left} and \thaiclassx{top}{low-left}, +respectively. With a context pattern length of~3 this would be easy +to solve, but \TeX\ doesn't have this feature. What to do? + +The context `\thaiclass{base} \thaiclass{lower} \thaiclass{top}' must +be distinguished from `\thaiclassx{base}{asc} \thaiclass{lower} +\thaiclass{top}', i.e., two different \thaiclass{lower} classes are +needed depending on the previous character since \TeX\ is not able to +forward information from one ligature cycle to the next. The idea is +now to create an `alias class', a class which behaves identically to +the original one. The glyphs in this alias class are the same, but +different glyph indices and glyph names are assigned to it. A +closer look to table~\ref{table:liga-dia} shows that +\thaiclassx{lower}{left} isn't a typo but the alias class of +\thaiclass{lower}. + + +\section{The Implementation} + +After solving the problem theoretically now the practical +implementation. All glyph names follow the \emph{Adobe Glyph List + (AGL)}~\cite{AGL}. There are no predefined Adobe glyph names for +Thai, so the prefix `uni' with attached Unicode value will be used for +all glyphs which are encoded in Unicode. Glyph variants are +identified by an arbitrarily chosen postfix. + +Here the real glyph names for the various classes. Hexadecimal values +in parentheses after the glyph name give the glyph indices in the +encoding vector. + +\vspace{1ex} +\multicolsep 1ex + +\begin{multicols}{2}[\thaiclassx{base}{normal}:] + \begin{quote} + |uni0E01| (|0xA1|)\\ + |uni0E02| (|0xA2|)\\ + |uni0E03| (|0xA3|)\\ + |uni0E04| (|0xA4|)\\ + |uni0E05| (|0xA5|)\\ + |uni0E06| (|0xA6|)\\ + |uni0E07| (|0xA7|)\\ + |uni0E08| (|0xA8|)\\ + |uni0E09| (|0xA9|)\\ + |uni0E0A| (|0xAA|)\\ + |uni0E0B| (|0xAB|)\\ + |uni0E0C| (|0xAC|)\\ + |uni0E11| (|0xB1|)\\ + |uni0E12| (|0xB2|)\\ + |uni0E13| (|0xB3|)\\ + |uni0E14| (|0xB4|)\\ + |uni0E15| (|0xB5|)\\ + |uni0E16| (|0xB6|)\\ + |uni0E17| (|0xB7|)\\ + |uni0E18| (|0xB8|)\\ + |uni0E19| (|0xB9|)\\ + |uni0E1A| (|0xBA|)\\ + |uni0E1C| (|0xBC|)\\ + |uni0E1E| (|0xBE|)\\ + |uni0E20| (|0xC0|)\\ + |uni0E21| (|0xC1|)\\ + |uni0E22| (|0xC2|)\\ + |uni0E23| (|0xC3|)\\ + |uni0E25| (|0xC5|)\\ + |uni0E27| (|0xC7|)\\ + |uni0E28| (|0xC8|)\\ + |uni0E29| (|0xC9|)\\ + |uni0E2A| (|0xCA|)\\ + |uni0E2B| (|0xCB|)\\ + |uni0E2D| (|0xCD|)\\ + |uni0E2E| (|0xCE|)\\ + |uni0E2F| (|0xCF|)\\ + |uni0E30| (|0xD0|)\\ + |uni0E40| (|0xE0|)\\ + |uni0E41| (|0xE1|) + \end{quote} +\end{multicols} + +\begin{multicols}{2}[\thaiclassx{base}{desc}:] + \begin{quote} + |uni0E0E| (|0xAE|)\\ + |uni0E0F| (|0xAF|) + \end{quote} +\end{multicols} + +\begin{multicols}{2}[\thaiclassx{base}{desclike}:] + \begin{quote} + |uni0E0D| (|0xAD|)\\ + |uni0E10| (|0xB0|) + \end{quote} +\end{multicols} + +\begin{multicols}{2}[\thaiclassx{base}{indic}:] + \begin{quote} + |uni0E24| (|0xC4|)\\ + |uni0E26| (|0xC6|) + \end{quote} +\end{multicols} + +\begin{multicols}{2}[\thaiclassx{base}{sign}:] + \begin{quote} + |uni0E45| (|0xE5|) + \end{quote} +\end{multicols} + +\begin{multicols}{2}[\thaiclassx{base}{asc}:] + \begin{quote} + |uni0E1B| (|0xBB|)\\ + |uni0E1D| (|0xBD|)\\ + |uni0E1F| (|0xBF|)\\ + |uni0E2C| (|0xCC|) + \end{quote} +\end{multicols} + +\begin{multicols}{2}[\thaiclassx{base}{sara am}:] + \begin{quote} + |uni0E33| (|0xD3|) + \end{quote} +\end{multicols} + +\begin{multicols}{2}[\thaiclassx{base}{sara aa}:] + \begin{quote} + |uni0E32| (|0xD2|) + \end{quote} +\end{multicols} + +\begin{multicols}{2}[\thaiclassx{base}{descless}:] + \begin{quote} + |uni0E0D.descless| (|0x90|)\\ + |uni0E10.descless| (|0x9F|) + \end{quote} +\end{multicols} + +\begin{multicols}{2}[\thaiclass{lower}:] + \begin{quote} + |uni0E38| (|0xD8|)\\ + |uni0E39| (|0xD9|)\\ + |uni0E3A| (|0xDA|) + \end{quote} +\end{multicols} + +\begin{multicols}{2}[\thaiclassx{lower}{left}:] + \begin{quote} + |uni0E38.left| (|0x80|)\\ + |uni0E39.left| (|0x81|)\\ + |uni0E3A.left| (|0x82|) + \end{quote} +\end{multicols} + +\begin{multicols}{2}[\thaiclassx{lower}{low}:] + \begin{quote} + |uni0E38.low| (|0xFC|)\\ + |uni0E39.low| (|0xFD|)\\ + |uni0E3A.low| (|0xFE|) + \end{quote} +\end{multicols} + +\begin{multicols}{2}[\thaiclassx{upper}{vowel}:] + \begin{quote} + |uni0E31| (|0xD1|)\\ + |uni0E34| (|0xD4|)\\ + |uni0E35| (|0xD5|)\\ + |uni0E36| (|0xD6|)\\ + |uni0E37| (|0xD7|)\\ + |uni0E47| (|0xE7|)\\ + |uni0E4D| (|0xED|) + \end{quote} +\end{multicols} + +\begin{multicols}{2}[\thaiclassx{upper}{sign}:] + \begin{quote} + |uni0E4D| (|0xED|) + \end{quote} +\end{multicols} + +\begin{multicols}{2}[\thaiclassxx{upper}{vowel}{left}:] + \begin{quote} + |uni0E31.left| (|0x92|)\\ + |uni0E34.left| (|0x94|)\\ + |uni0E35.left| (|0x95|)\\ + |uni0E36.left| (|0x96|)\\ + |uni0E37.left| (|0x97|)\\ + |uni0E47.left| (|0x93|)\\ + |uni0E4D.left| (|0x8F|) + \end{quote} +\end{multicols} + +\begin{multicols}{2}[\thaiclassxx{upper}{sign}{left}:] + \begin{quote} + |uni0E4D.left| (|0x8F|) + \end{quote} +\end{multicols} + +\begin{multicols}{2}[\thaiclass{top}:] + \begin{quote} + |uni0E48| (|0xE8|)\\ + |uni0E49| (|0xE9|)\\ + |uni0E4A| (|0xEA|)\\ + |uni0E4B| (|0xEB|)\\ + |uni0E4C| (|0xEC|) + \end{quote} +\end{multicols} + +\begin{multicols}{2}[\thaiclassx{top}{left}:] + \begin{quote} + |uni0E48.left| (|0x98|)\\ + |uni0E49.left| (|0x99|)\\ + |uni0E4A.left| (|0x9A|)\\ + |uni0E4B.left| (|0x9B|)\\ + |uni0E4C.left| (|0x9C|) + \end{quote} +\end{multicols} + +\begin{multicols}{2}[\thaiclassx{top}{low}:] + \begin{quote} + |uni0E48.low| (|0x88|)\\ + |uni0E49.low| (|0x89|)\\ + |uni0E4A.low| (|0x8A|)\\ + |uni0E4B.low| (|0x8B|)\\ + |uni0E4C.low| (|0x8C|) + \end{quote} +\end{multicols} + +\begin{multicols}{2}[\thaiclassx{top}{low-left}:] + \begin{quote} + |uni0E48.low_left| (|0x83|)\\ + |uni0E49.low_left| (|0x84|)\\ + |uni0E4A.low_left| (|0x85|)\\ + |uni0E4B.low_left| (|0x86|)\\ + |uni0E4C.low_left| (|0x87|) + \end{quote} +\end{multicols} + +\vspace{1ex} + + +\encoding +\needsfontinstversion{1.918} + + +\begincomment +\section{Coding Scheme} +\endcomment + +\setstr{codingscheme}{C90 THAI ENCODING} + + +\begincomment +\section{Non-Thai Characters} + +Of the many different \LaTeX{} encodings, |OT1| supports {\small + ASCII} best (and this is what most Type~1 Thai fonts have). This +has two advantages: We can use the raw Thai font without specifying a +new encoding (switching to |OT1| will be sufficient), and it will work +with plain \TeX{} also. + +We use the |OT1| layout for typewriter fonts (i.e., for |cmtt|) with +the exception that `arrowup' and `arrowdown' are replaced with +`endash' and `emdash', and the seldom used `dotlessj' with +`quotedblleft'. +\endcomment + + +% 0x00 | 0 +\setslot{Gamma} + \Unicode{0393}{GREEK CAPITAL LETTER GAMMA} +\endsetslot + +\setslot{Delta} + \Unicode{0394}{GREEK CAPITAL LETTER DELTA} +\endsetslot + +\setslot{Theta} + \Unicode{0398}{GREEK CAPITAL LETTER THETA} +\endsetslot + +\setslot{Lambda} + \Unicode{039B}{GREEK CAPITAL LETTER LAMDA} +\endsetslot + +\setslot{Xi} + \Unicode{039E}{GREEK CAPITAL LETTER XI} +\endsetslot + +\setslot{Pi} + \Unicode{03A0}{GREEK CAPITAL LETTER PI} +\endsetslot + +\setslot{Sigma} + \Unicode{03A3}{GREEK CAPITAL LETTER SIGMA} +\endsetslot + +\setslot{Upsilon} + \Unicode{03D2}{GREEK UPSILON WITH HOOK SYMBOL} +\endsetslot + +\setslot{Phi} + \Unicode{03A6}{GREEK CAPITAL LETTER PHI} +\endsetslot + +\setslot{Psi} + \Unicode{03A8}{GREEK CAPITAL LETTER PSI} +\endsetslot + +\setslot{Omega} + \Unicode{03A9}{GREEK CAPITAL LETTER OMEGA} +\endsetslot + +\setslot{endash} + \Unicode{2013}{EN DASH} + \Ligature{LIG}{hyphen}{emdash} + \comment{This is `arrowup' in |OT1| encoding.} +\endsetslot + +\setslot{emdash} + \Unicode{2014}{EM DASH} + \comment{This is `arrowdown' in |OT1| encoding.} +\endsetslot + +\setslot{quotesingle} + \Unicode{0027}{APOSTROPHE} +\endsetslot + +\setslot{exclamdown} + \Unicode{00A1}{INVERTED EXCLAMATION MARK} +\endsetslot + +\setslot{questiondown} + \Unicode{00BF}{INVERTED QUESTION MARK} +\endsetslot + +% 0x10 | 16 +\setslot{dotlessi} + \Unicode{0131}{LATIN SMALL LETTER DOTLESS I} +\endsetslot + +\setslot{quotedblleft} + \Unicode{201C}{LEFT DOUBLE QUOTATION MARK} + \comment{This is `dotlessj' in |OT1| encoding.} +\endsetslot + +\setslot{grave} + \Unicode{0300}{COMBINING GRAVE ACCENT} +\endsetslot + +\setslot{acute} + \Unicode{0301}{COMBINING ACUTE ACCENT} +\endsetslot + +\setslot{caron} + \Unicode{030C}{COMBINING CARON} +\endsetslot + +\setslot{breve} + \Unicode{0306}{COMBINING BREVE} +\endsetslot + +\setslot{macron} + \Unicode{0304}{COMBINING MACRON} +\endsetslot + +\setslot{ring} + \Unicode{030A}{COMBINING RING ABOVE} +\endsetslot + +\setslot{cedilla} + \Unicode{0327}{COMBINING CEDILLA} +\endsetslot + +\setslot{germandbls} + \Unicode{00DF}{LATIN SMALL LETTER SHARP S} +\endsetslot + +\setslot{ae} + \Unicode{00E6}{LATIN SMALL LETTER AE} +\endsetslot + +\setslot{oe} + \Unicode{0153}{LATIN SMALL LIGATURE OE} +\endsetslot + +\setslot{oslash} + \Unicode{00F8}{LATIN SMALL LETTER O WITH STROKE} +\endsetslot + +\setslot{AE} + \Unicode{00C6}{LATIN CAPITAL LETTER AE} +\endsetslot + +\setslot{OE} + \Unicode{0152}{LATIN CAPITAL LIGATURE OE} +\endsetslot + +\setslot{Oslash} + \Unicode{00D8}{LATIN CAPITAL LETTER O WITH STROKE} +\endsetslot + +% 0x20 | 32 +\skipslots{1} + +\setslot{exclam} + \Unicode{0021}{EXCLAMATION MARK} + \Ligature{LIG}{quoteleft}{exclamdown} +\endsetslot + +\setslot{quotedblright} + \Unicode{201D}{RIGHT DOUBLE QUOTATION MARK} +\endsetslot + +\setslot{numbersign} + \Unicode{0023}{NUMBER SIGN} +\endsetslot + +\setslot{dollar} + \Unicode{0024}{DOLLAR SIGN} +\endsetslot + +\setslot{percent} + \Unicode{0025}{PERCENT SIGN} +\endsetslot + +\setslot{ampersand} + \Unicode{0026}{AMPERSAND} +\endsetslot + +\setslot{quoteright} + \Unicode{2019}{RIGHT SINGLE QUOTATION MARK} + \Ligature{LIG}{quoteright}{quotedblright} +\endsetslot + +\setslot{parenleft} + \Unicode{0028}{LEFT PARENTHESIS} +\endsetslot + +\setslot{parenright} + \Unicode{0029}{RIGHT PARENTHESIS} +\endsetslot + +\setslot{asterisk} + \Unicode{002A}{ASTERISK} +\endsetslot + +\setslot{plus} + \Unicode{002B}{PLUS SIGN} +\endsetslot + +\setslot{comma} + \Unicode{002C}{COMMA} +\endsetslot + +\setslot{hyphen} + \Unicode{002D}{HYPHEN-MINUS} + \Ligature{LIG}{hyphen}{endash} +\endsetslot + +\setslot{period} + \Unicode{002E}{FULL STOP} +\endsetslot + +\setslot{slash} + \Unicode{002F}{SOLIDUS} +\endsetslot + +% 0x30 | 48 +\setslot{zero} + \Unicode{0030}{DIGIT ZERO} +\endsetslot + +\setslot{one} + \Unicode{0031}{DIGIT ONE} +\endsetslot + +\setslot{two} + \Unicode{0032}{DIGIT TWO} +\endsetslot + +\setslot{three} + \Unicode{0033}{DIGIT THREE} +\endsetslot + +\setslot{four} + \Unicode{0034}{DIGIT FOUR} +\endsetslot + +\setslot{five} + \Unicode{0035}{DIGIT FIVE} +\endsetslot + +\setslot{six} + \Unicode{0036}{DIGIT SIX} +\endsetslot + +\setslot{seven} + \Unicode{0037}{DIGIT SEVEN} +\endsetslot + +\setslot{eight} + \Unicode{0038}{DIGIT EIGHT} +\endsetslot + +\setslot{nine} + \Unicode{0039}{DIGIT NINE} +\endsetslot + +\setslot{colon} + \Unicode{003A}{COLON} +\endsetslot + +\setslot{semicolon} + \Unicode{003B}{SEMICOLON} +\endsetslot + +\setslot{less} + \Unicode{003C}{LESS-THAN SIGN} +\endsetslot + +\setslot{equal} + \Unicode{003D}{EQUALS SIGN} +\endsetslot + +\setslot{greater} + \Unicode{003E}{GREATER-THAN SIGN} +\endsetslot + +\setslot{question} + \Unicode{003F}{QUESTION MARK} + \Ligature{LIG}{quoteleft}{questiondown} +\endsetslot + +% 0x40 | 64 +\setslot{at} + \Unicode{0040}{COMMERCIAL AT} +\endsetslot + +\setslot{A} + \Unicode{0041}{LATIN CAPITAL LETTER A} +\endsetslot + +\setslot{B} + \Unicode{0042}{LATIN CAPITAL LETTER B} +\endsetslot + +\setslot{C} + \Unicode{0043}{LATIN CAPITAL LETTER C} +\endsetslot + +\setslot{D} + \Unicode{0044}{LATIN CAPITAL LETTER D} +\endsetslot + +\setslot{E} + \Unicode{0045}{LATIN CAPITAL LETTER E} +\endsetslot + +\setslot{F} + \Unicode{0046}{LATIN CAPITAL LETTER F} +\endsetslot + +\setslot{G} + \Unicode{0047}{LATIN CAPITAL LETTER G} +\endsetslot + +\setslot{H} + \Unicode{0048}{LATIN CAPITAL LETTER H} +\endsetslot + +\setslot{I} + \Unicode{0049}{LATIN CAPITAL LETTER I} +\endsetslot + +\setslot{J} + \Unicode{004A}{LATIN CAPITAL LETTER J} +\endsetslot + +\setslot{K} + \Unicode{004B}{LATIN CAPITAL LETTER K} +\endsetslot + +\setslot{L} + \Unicode{004C}{LATIN CAPITAL LETTER L} +\endsetslot + +\setslot{M} + \Unicode{004D}{LATIN CAPITAL LETTER M} +\endsetslot + +\setslot{N} + \Unicode{004E}{LATIN CAPITAL LETTER N} +\endsetslot + +\setslot{O} + \Unicode{004F}{LATIN CAPITAL LETTER O} +\endsetslot + +% 0x50 | 80 +\setslot{P} + \Unicode{0050}{LATIN CAPITAL LETTER P} +\endsetslot + +\setslot{Q} + \Unicode{0051}{LATIN CAPITAL LETTER Q} +\endsetslot + +\setslot{R} + \Unicode{0052}{LATIN CAPITAL LETTER R} +\endsetslot + +\setslot{S} + \Unicode{0053}{LATIN CAPITAL LETTER S} +\endsetslot + +\setslot{T} + \Unicode{0054}{LATIN CAPITAL LETTER T} +\endsetslot + +\setslot{U} + \Unicode{0055}{LATIN CAPITAL LETTER U} +\endsetslot + +\setslot{V} + \Unicode{0056}{LATIN CAPITAL LETTER V} +\endsetslot + +\setslot{W} + \Unicode{0057}{LATIN CAPITAL LETTER W} +\endsetslot + +\setslot{X} + \Unicode{0058}{LATIN CAPITAL LETTER X} +\endsetslot + +\setslot{Y} + \Unicode{0059}{LATIN CAPITAL LETTER Y} +\endsetslot + +\setslot{Z} + \Unicode{005A}{LATIN CAPITAL LETTER Z} +\endsetslot + +\setslot{bracketleft} + \Unicode{005B}{LEFT SQUARE BRACKET} +\endsetslot + +\setslot{backslash} + \Unicode{005C}{REVERSE SOLIDUS} +\endsetslot + +\setslot{bracketright} + \Unicode{005D}{RIGHT SQUARE BRACKET} +\endsetslot + +\setslot{circumflex} + \Unicode{0302}{COMBINING CIRCUMFLEX ACCENT} +\endsetslot + +\setslot{underscore} + \Unicode{005F}{LOW LINE} +\endsetslot + +% 0x60 | 96 +\setslot{quoteleft} + \Unicode{2018}{LEFT SINGLE QUOTATION MARK} + \Ligature{LIG}{quoteleft}{quotedblleft} +\endsetslot + +\setslot{a} + \Unicode{0061}{LATIN SMALL LETTER A} +\endsetslot + +\setslot{b} + \Unicode{0062}{LATIN SMALL LETTER B} +\endsetslot + +\setslot{c} + \Unicode{0063}{LATIN SMALL LETTER C} +\endsetslot + +\setslot{d} + \Unicode{0064}{LATIN SMALL LETTER D} +\endsetslot + +\setslot{e} + \Unicode{0065}{LATIN SMALL LETTER E} +\endsetslot + +\setslot{f} + \Unicode{0066}{LATIN SMALL LETTER F} +\endsetslot + +\setslot{g} + \Unicode{0067}{LATIN SMALL LETTER G} +\endsetslot + +\setslot{h} + \Unicode{0068}{LATIN SMALL LETTER H} +\endsetslot + +\setslot{i} + \Unicode{0069}{LATIN SMALL LETTER I} +\endsetslot + +\setslot{j} + \Unicode{006A}{LATIN SMALL LETTER J} +\endsetslot + +\setslot{k} + \Unicode{006B}{LATIN SMALL LETTER K} +\endsetslot + +\setslot{l} + \Unicode{006C}{LATIN SMALL LETTER L} +\endsetslot + +\setslot{m} + \Unicode{006D}{LATIN SMALL LETTER M} +\endsetslot + +\setslot{n} + \Unicode{006E}{LATIN SMALL LETTER N} +\endsetslot + +\setslot{o} + \Unicode{006F}{LATIN SMALL LETTER O} +\endsetslot + +% 0x70 | 112 +\setslot{p} + \Unicode{0070}{LATIN SMALL LETTER P} +\endsetslot + +\setslot{q} + \Unicode{0071}{LATIN SMALL LETTER Q} +\endsetslot + +\setslot{r} + \Unicode{0072}{LATIN SMALL LETTER R} +\endsetslot + +\setslot{s} + \Unicode{0073}{LATIN SMALL LETTER S} +\endsetslot + +\setslot{t} + \Unicode{0074}{LATIN SMALL LETTER T} +\endsetslot + +\setslot{u} + \Unicode{0075}{LATIN SMALL LETTER U} +\endsetslot + +\setslot{v} + \Unicode{0076}{LATIN SMALL LETTER V} +\endsetslot + +\setslot{w} + \Unicode{0077}{LATIN SMALL LETTER W} +\endsetslot + +\setslot{x} + \Unicode{0078}{LATIN SMALL LETTER X} +\endsetslot + +\setslot{y} + \Unicode{0079}{LATIN SMALL LETTER Y} +\endsetslot + +\setslot{z} + \Unicode{007A}{LATIN SMALL LETTER Z} +\endsetslot + +\setslot{braceleft} + \Unicode{007B}{LEFT CURLY BRACKET} +\endsetslot + +\setslot{bar} + \Unicode{007C}{VERTICAL LINE} +\endsetslot + +\setslot{braceright} + \Unicode{007D}{RIGHT CURLY BRACKET} +\endsetslot + +\setslot{tilde} + \Unicode{0303}{COMBINING TILDE} +\endsetslot + +\setslot{dieresis} + \Unicode{0308}{COMBINING DIAERESIS} +\endsetslot + + +\begincomment +\section{Thai Characters} + +This is |TIS-620| encoding with glyph variants. The encoding presented +in~\cite{TUG-Thai} contained two alternate glyph forms at positions 157 +and 158 which have been removed meanwhile. + +The number of all Thai ligature rules is quite big (464~in total). +Note that |vptovf| will make the ligature table much more compact as +it may appear here. +\endcomment + +% 0x80 | 128 +\ifisint{makeenc}\then + \setslot{uni0E38} + \endsetslot +\Else + \setslot{uni0E38.left} + \comment{An alias for + \textunicode{0E38}{THAI CHARACTER SARA U}.} + \Ligature{/LIG}{uni0E48}{uni0E48.low_left} + \Ligature{/LIG}{uni0E49}{uni0E49.low_left} + \Ligature{/LIG}{uni0E4A}{uni0E4A.low_left} + \Ligature{/LIG}{uni0E4B}{uni0E4B.low_left} + \Ligature{/LIG}{uni0E4C}{uni0E4C.low_left} + \endsetslot +\Fi + +\ifisint{makeenc}\then + \setslot{uni0E39} + \endsetslot +\Else + \setslot{uni0E39.left} + \comment{An alias for + \textunicode{0E39}{THAI CHARACTER SARA UU}.} + \Ligature{/LIG}{uni0E48}{uni0E48.low_left} + \Ligature{/LIG}{uni0E49}{uni0E49.low_left} + \Ligature{/LIG}{uni0E4A}{uni0E4A.low_left} + \Ligature{/LIG}{uni0E4B}{uni0E4B.low_left} + \Ligature{/LIG}{uni0E4C}{uni0E4C.low_left} + \endsetslot +\Fi + +\ifisint{makeenc}\then + \setslot{uni0E3A} + \endsetslot +\Else + \setslot{uni0E3A.left} + \comment{An alias for + \textunicode{0E3A}{THAI CHARACTER PHINTHU}.} + \Ligature{/LIG}{uni0E48}{uni0E48.low_left} + \Ligature{/LIG}{uni0E49}{uni0E49.low_left} + \Ligature{/LIG}{uni0E4A}{uni0E4A.low_left} + \Ligature{/LIG}{uni0E4B}{uni0E4B.low_left} + \Ligature{/LIG}{uni0E4C}{uni0E4C.low_left} + \endsetslot +\Fi + +\setslot{uni0E48.low_left} + \comment{A glyph variant of + \textunicode{0E48}{THAI CHARACTER MAI EK}.} + \Ligature{/LIG/}{uni0E33}{uni0E48.left} + \Ligature{LIG/}{uni0E48.left}{uni0E4D.left} +\endsetslot + +\setslot{uni0E49.low_left} + \comment{A glyph variant of + \textunicode{0E49}{THAI CHARACTER MAI THO}.} + \Ligature{/LIG/}{uni0E33}{uni0E49.left} + \Ligature{LIG/}{uni0E49.left}{uni0E4D.left} +\endsetslot + +\setslot{uni0E4A.low_left} + \comment{A glyph variant of + \textunicode{0E4A}{THAI CHARACTER MAI TRI}.} + \Ligature{/LIG/}{uni0E33}{uni0E4A.left} + \Ligature{LIG/}{uni0E4A.left}{uni0E4D.left} +\endsetslot + +\setslot{uni0E4B.low_left} + \comment{A glyph variant of + \textunicode{0E4B}{THAI CHARACTER MAI CHATTAWA}.} + \Ligature{/LIG/}{uni0E33}{uni0E4B.left} + \Ligature{LIG/}{uni0E4B.left}{uni0E4D.left} +\endsetslot + +\setslot{uni0E4C.low_left} + \comment{A glyph variant of + \textunicode{0E4C}{THAI CHARACTER THANTHAKHAT}.} + \Ligature{/LIG/}{uni0E33}{uni0E4C.left} + \Ligature{LIG/}{uni0E4C.left}{uni0E4D.left} +\endsetslot + +\setslot{uni0E48.low} + \comment{A glyph variant of + \textunicode{0E48}{THAI CHARACTER MAI EK}.} + \Ligature{/LIG/}{uni0E33}{uni0E48} + \Ligature{LIG/}{uni0E48}{uni0E4D} +\endsetslot + +\setslot{uni0E49.low} + \comment{A glyph variant of + \textunicode{0E49}{THAI CHARACTER MAI THO}.} + \Ligature{/LIG/}{uni0E33}{uni0E49} + \Ligature{LIG/}{uni0E49}{uni0E4D} +\endsetslot + +\setslot{uni0E4A.low} + \comment{A glyph variant of + \textunicode{0E4A}{THAI CHARACTER MAI TRI}.} + \Ligature{/LIG/}{uni0E33}{uni0E4A} + \Ligature{LIG/}{uni0E4A}{uni0E4D} +\endsetslot + +\setslot{uni0E4B.low} + \comment{A glyph variant of + \textunicode{04EB}{THAI CHARACTER MAI CHATTAWA}.} + \Ligature{/LIG/}{uni0E33}{uni0E4B} + \Ligature{LIG/}{uni0E4B}{uni0E4D} +\endsetslot + +\setslot{uni0E4C.low} + \comment{A glyph variant of + \textunicode{0E4C}{THAI CHARACTER THANTHAKHAT}.} + \Ligature{/LIG/}{uni0E33}{uni0E4C} + \Ligature{LIG/}{uni0E4C}{uni0E4D} +\endsetslot + +\skipslots{2} + +\setslot{uni0E4D.left} + \comment{A glyph variant of + \textunicode{0E4D}{THAI CHARACTER NIKHAHIT}.} + \Ligature{/LIG}{uni0E33}{uni0E32} + \Ligature{/LIG}{uni0E48}{uni0E48.left} + \Ligature{/LIG}{uni0E49}{uni0E49.left} + \Ligature{/LIG}{uni0E4A}{uni0E4A.left} + \Ligature{/LIG}{uni0E4B}{uni0E4B.left} + \Ligature{/LIG}{uni0E4C}{uni0E4C.left} +\endsetslot + +% 0x90 | 144 +\setslot{uni0E0D.descless} + \comment{A glyph variant of + \textunicode{0E0D}{THAI CHARACTER YO YING}.} +\endsetslot + +\skipslots{1} + +\setslot{uni0E31.left} + \comment{A glyph variant of + \textunicode{0E31}{THAI CHARACTER MAI HAN-AKAT}.} + \Ligature{/LIG}{uni0E48}{uni0E48.left} + \Ligature{/LIG}{uni0E49}{uni0E49.left} + \Ligature{/LIG}{uni0E4A}{uni0E4A.left} + \Ligature{/LIG}{uni0E4B}{uni0E4B.left} + \Ligature{/LIG}{uni0E4C}{uni0E4C.left} +\endsetslot + +\setslot{uni0E47.left} + \comment{A glyph variant of + \textunicode{0E47}{THAI CHARACTER MAITAIKHU}.} + \Ligature{/LIG}{uni0E48}{uni0E48.left} + \Ligature{/LIG}{uni0E49}{uni0E49.left} + \Ligature{/LIG}{uni0E4A}{uni0E4A.left} + \Ligature{/LIG}{uni0E4B}{uni0E4B.left} + \Ligature{/LIG}{uni0E4C}{uni0E4C.left} +\endsetslot + +\setslot{uni0E34.left} + \comment{A glyph variant of + \textunicode{0E34}{THAI CHARACTER SARA I}.} + \Ligature{/LIG}{uni0E48}{uni0E48.left} + \Ligature{/LIG}{uni0E49}{uni0E49.left} + \Ligature{/LIG}{uni0E4A}{uni0E4A.left} + \Ligature{/LIG}{uni0E4B}{uni0E4B.left} + \Ligature{/LIG}{uni0E4C}{uni0E4C.left} +\endsetslot + +\setslot{uni0E35.left} + \comment{A glyph variant of + \textunicode{0E35}{THAI CHARACTER SARA II}.} + \Ligature{/LIG}{uni0E48}{uni0E48.left} + \Ligature{/LIG}{uni0E49}{uni0E49.left} + \Ligature{/LIG}{uni0E4A}{uni0E4A.left} + \Ligature{/LIG}{uni0E4B}{uni0E4B.left} + \Ligature{/LIG}{uni0E4C}{uni0E4C.left} +\endsetslot + +\setslot{uni0E36.left} + \comment{A glyph variant of + \textunicode{0E36}{THAI CHARACTER SARA UE}.} + \Ligature{/LIG}{uni0E48}{uni0E48.left} + \Ligature{/LIG}{uni0E49}{uni0E49.left} + \Ligature{/LIG}{uni0E4A}{uni0E4A.left} + \Ligature{/LIG}{uni0E4B}{uni0E4B.left} + \Ligature{/LIG}{uni0E4C}{uni0E4C.left} +\endsetslot + +\setslot{uni0E37.left} + \comment{A glyph variant of + \textunicode{0E37}{THAI CHARACTER SARA UEE}.} + \Ligature{/LIG}{uni0E48}{uni0E48.left} + \Ligature{/LIG}{uni0E49}{uni0E49.left} + \Ligature{/LIG}{uni0E4A}{uni0E4A.left} + \Ligature{/LIG}{uni0E4B}{uni0E4B.left} + \Ligature{/LIG}{uni0E4C}{uni0E4C.left} +\endsetslot + +\setslot{uni0E48.left} + \comment{A glyph variant of + \textunicode{0E48}{THAI CHARACTER MAI EK}.} + \Ligature{/LIG}{uni0E33}{uni0E32} +\endsetslot + +\setslot{uni0E49.left} + \comment{A glyph variant of + \textunicode{0E49}{THAI CHARACTER MAI THO}.} + \Ligature{/LIG}{uni0E33}{uni0E32} +\endsetslot + +\setslot{uni0E4A.left} + \comment{A glyph variant of + \textunicode{0E4A}{THAI CHARACTER MAI TRI}.} + \Ligature{/LIG}{uni0E33}{uni0E32} +\endsetslot + +\setslot{uni0E4B.left} + \comment{A glyph variant of + \textunicode{0E4B}{THAI CHARACTER MAI CHATTAWA}.} + \Ligature{/LIG}{uni0E33}{uni0E32} +\endsetslot + +\setslot{uni0E4C.left} + \comment{A glyph variant of + \textunicode{0E4C}{THAI CHARACTER THANTHAKHAT}.} + \Ligature{/LIG}{uni0E33}{uni0E32} +\endsetslot + +\skipslots{2} + +\setslot{uni0E10.descless} + \comment{A glyph variant of + \textunicode{0E10}{THAI CHARACTER THO THAN}.} +\endsetslot + +% 0xA0 | 160 +\skipslots{1} + +\setslot{uni0E01} + \Unicode{0E01}{THAI CHARACTER KO KAI} + \Ligature{/LIG/}{uni0E33}{uni0E4D} + \Ligature{/LIG}{uni0E48}{uni0E48.low} + \Ligature{/LIG}{uni0E49}{uni0E49.low} + \Ligature{/LIG}{uni0E4A}{uni0E4A.low} + \Ligature{/LIG}{uni0E4B}{uni0E4B.low} + \Ligature{/LIG}{uni0E4C}{uni0E4C.low} +\endsetslot + +\setslot{uni0E02} + \Unicode{0E02}{THAI CHARACTER KHO KHAI} + \Ligature{/LIG/}{uni0E33}{uni0E4D} + \Ligature{/LIG}{uni0E48}{uni0E48.low} + \Ligature{/LIG}{uni0E49}{uni0E49.low} + \Ligature{/LIG}{uni0E4A}{uni0E4A.low} + \Ligature{/LIG}{uni0E4B}{uni0E4B.low} + \Ligature{/LIG}{uni0E4C}{uni0E4C.low} +\endsetslot + +\setslot{uni0E03} + \Unicode{0E03}{THAI CHARACTER KHO KHUAT} + \Ligature{/LIG/}{uni0E33}{uni0E4D} + \Ligature{/LIG}{uni0E48}{uni0E48.low} + \Ligature{/LIG}{uni0E49}{uni0E49.low} + \Ligature{/LIG}{uni0E4A}{uni0E4A.low} + \Ligature{/LIG}{uni0E4B}{uni0E4B.low} + \Ligature{/LIG}{uni0E4C}{uni0E4C.low} +\endsetslot + +\setslot{uni0E04} + \Unicode{0E04}{THAI CHARACTER KHO KHWAI} + \Ligature{/LIG/}{uni0E33}{uni0E4D} + \Ligature{/LIG}{uni0E48}{uni0E48.low} + \Ligature{/LIG}{uni0E49}{uni0E49.low} + \Ligature{/LIG}{uni0E4A}{uni0E4A.low} + \Ligature{/LIG}{uni0E4B}{uni0E4B.low} + \Ligature{/LIG}{uni0E4C}{uni0E4C.low} +\endsetslot + +\setslot{uni0E05} + \Unicode{0E05}{THAI CHARACTER KHO KHON} + \Ligature{/LIG/}{uni0E33}{uni0E4D} + \Ligature{/LIG}{uni0E48}{uni0E48.low} + \Ligature{/LIG}{uni0E49}{uni0E49.low} + \Ligature{/LIG}{uni0E4A}{uni0E4A.low} + \Ligature{/LIG}{uni0E4B}{uni0E4B.low} + \Ligature{/LIG}{uni0E4C}{uni0E4C.low} +\endsetslot + +\setslot{uni0E06} + \Unicode{0E06}{THAI CHARACTER KHO RAKHANG} + \Ligature{/LIG/}{uni0E33}{uni0E4D} + \Ligature{/LIG}{uni0E48}{uni0E48.low} + \Ligature{/LIG}{uni0E49}{uni0E49.low} + \Ligature{/LIG}{uni0E4A}{uni0E4A.low} + \Ligature{/LIG}{uni0E4B}{uni0E4B.low} + \Ligature{/LIG}{uni0E4C}{uni0E4C.low} +\endsetslot + +\setslot{uni0E07} + \Unicode{0E07}{THAI CHARACTER NGO NGU} + \Ligature{/LIG/}{uni0E33}{uni0E4D} + \Ligature{/LIG}{uni0E48}{uni0E48.low} + \Ligature{/LIG}{uni0E49}{uni0E49.low} + \Ligature{/LIG}{uni0E4A}{uni0E4A.low} + \Ligature{/LIG}{uni0E4B}{uni0E4B.low} + \Ligature{/LIG}{uni0E4C}{uni0E4C.low} +\endsetslot + +\setslot{uni0E08} + \Unicode{0E08}{THAI CHARACTER CHO CHAN} + \Ligature{/LIG/}{uni0E33}{uni0E4D} + \Ligature{/LIG}{uni0E48}{uni0E48.low} + \Ligature{/LIG}{uni0E49}{uni0E49.low} + \Ligature{/LIG}{uni0E4A}{uni0E4A.low} + \Ligature{/LIG}{uni0E4B}{uni0E4B.low} + \Ligature{/LIG}{uni0E4C}{uni0E4C.low} +\endsetslot + +\setslot{uni0E09} + \Unicode{0E09}{THAI CHARACTER CHO CHING} + \Ligature{/LIG/}{uni0E33}{uni0E4D} + \Ligature{/LIG}{uni0E48}{uni0E48.low} + \Ligature{/LIG}{uni0E49}{uni0E49.low} + \Ligature{/LIG}{uni0E4A}{uni0E4A.low} + \Ligature{/LIG}{uni0E4B}{uni0E4B.low} + \Ligature{/LIG}{uni0E4C}{uni0E4C.low} +\endsetslot + +\setslot{uni0E0A} + \Unicode{0E0A}{THAI CHARACTER CHO CHANG} + \Ligature{/LIG/}{uni0E33}{uni0E4D} + \Ligature{/LIG}{uni0E48}{uni0E48.low} + \Ligature{/LIG}{uni0E49}{uni0E49.low} + \Ligature{/LIG}{uni0E4A}{uni0E4A.low} + \Ligature{/LIG}{uni0E4B}{uni0E4B.low} + \Ligature{/LIG}{uni0E4C}{uni0E4C.low} +\endsetslot + +\setslot{uni0E0B} + \Unicode{0E0B}{THAI CHARACTER SO SO} + \Ligature{/LIG/}{uni0E33}{uni0E4D} + \Ligature{/LIG}{uni0E48}{uni0E48.low} + \Ligature{/LIG}{uni0E49}{uni0E49.low} + \Ligature{/LIG}{uni0E4A}{uni0E4A.low} + \Ligature{/LIG}{uni0E4B}{uni0E4B.low} + \Ligature{/LIG}{uni0E4C}{uni0E4C.low} +\endsetslot + +\setslot{uni0E0C} + \Unicode{0E0C}{THAI CHARACTER CHO CHOE} + \Ligature{/LIG/}{uni0E33}{uni0E4D} + \Ligature{/LIG}{uni0E48}{uni0E48.low} + \Ligature{/LIG}{uni0E49}{uni0E49.low} + \Ligature{/LIG}{uni0E4A}{uni0E4A.low} + \Ligature{/LIG}{uni0E4B}{uni0E4B.low} + \Ligature{/LIG}{uni0E4C}{uni0E4C.low} +\endsetslot + +\setslot{uni0E0D} + \Unicode{0E0D}{THAI CHARACTER YO YING} + \Ligature{/LIG/}{uni0E33}{uni0E4D} + \Ligature{LIG/}{uni0E38}{uni0E0D.descless} + \Ligature{LIG/}{uni0E39}{uni0E0D.descless} + \Ligature{LIG/}{uni0E3A}{uni0E0D.descless} + \Ligature{/LIG}{uni0E48}{uni0E48.low} + \Ligature{/LIG}{uni0E49}{uni0E49.low} + \Ligature{/LIG}{uni0E4A}{uni0E4A.low} + \Ligature{/LIG}{uni0E4B}{uni0E4B.low} + \Ligature{/LIG}{uni0E4C}{uni0E4C.low} +\endsetslot + +\setslot{uni0E0E} + \Unicode{0E0E}{THAI CHARACTER DO CHADA} + \Ligature{/LIG/}{uni0E33}{uni0E4D} + \Ligature{/LIG}{uni0E38}{uni0E38.low} + \Ligature{/LIG}{uni0E39}{uni0E39.low} + \Ligature{/LIG}{uni0E3A}{uni0E3A.low} + \Ligature{/LIG}{uni0E48}{uni0E48.low} + \Ligature{/LIG}{uni0E49}{uni0E49.low} + \Ligature{/LIG}{uni0E4A}{uni0E4A.low} + \Ligature{/LIG}{uni0E4B}{uni0E4B.low} + \Ligature{/LIG}{uni0E4C}{uni0E4C.low} +\endsetslot + +\setslot{uni0E0F} + \Unicode{0E0F}{THAI CHARACTER TO PATAK} + \Ligature{/LIG/}{uni0E33}{uni0E4D} + \Ligature{/LIG}{uni0E38}{uni0E38.low} + \Ligature{/LIG}{uni0E39}{uni0E39.low} + \Ligature{/LIG}{uni0E3A}{uni0E3A.low} + \Ligature{/LIG}{uni0E48}{uni0E48.low} + \Ligature{/LIG}{uni0E49}{uni0E49.low} + \Ligature{/LIG}{uni0E4A}{uni0E4A.low} + \Ligature{/LIG}{uni0E4B}{uni0E4B.low} + \Ligature{/LIG}{uni0E4C}{uni0E4C.low} +\endsetslot + +% 0xB0 | 176 +\setslot{uni0E10} + \Unicode{0E10}{THAI CHARACTER THO THAN} + \Ligature{/LIG/}{uni0E33}{uni0E4D} + \Ligature{LIG/}{uni0E38}{uni0E10.descless} + \Ligature{LIG/}{uni0E39}{uni0E10.descless} + \Ligature{LIG/}{uni0E3A}{uni0E10.descless} + \Ligature{/LIG}{uni0E48}{uni0E48.low} + \Ligature{/LIG}{uni0E49}{uni0E49.low} + \Ligature{/LIG}{uni0E4A}{uni0E4A.low} + \Ligature{/LIG}{uni0E4B}{uni0E4B.low} + \Ligature{/LIG}{uni0E4C}{uni0E4C.low} +\endsetslot + +\setslot{uni0E11} + \Unicode{0E11}{THAI CHARACTER THO NANGMONTHO} + \Ligature{/LIG/}{uni0E33}{uni0E4D} + \Ligature{/LIG}{uni0E48}{uni0E48.low} + \Ligature{/LIG}{uni0E49}{uni0E49.low} + \Ligature{/LIG}{uni0E4A}{uni0E4A.low} + \Ligature{/LIG}{uni0E4B}{uni0E4B.low} + \Ligature{/LIG}{uni0E4C}{uni0E4C.low} +\endsetslot + +\setslot{uni0E12} + \Unicode{0E12}{THAI CHARACTER THO PHUTHAO} + \Ligature{/LIG/}{uni0E33}{uni0E4D} + \Ligature{/LIG}{uni0E48}{uni0E48.low} + \Ligature{/LIG}{uni0E49}{uni0E49.low} + \Ligature{/LIG}{uni0E4A}{uni0E4A.low} + \Ligature{/LIG}{uni0E4B}{uni0E4B.low} + \Ligature{/LIG}{uni0E4C}{uni0E4C.low} +\endsetslot + +\setslot{uni0E13} + \Unicode{0E13}{THAI CHARACTER NO NEN} + \Ligature{/LIG/}{uni0E33}{uni0E4D} + \Ligature{/LIG}{uni0E48}{uni0E48.low} + \Ligature{/LIG}{uni0E49}{uni0E49.low} + \Ligature{/LIG}{uni0E4A}{uni0E4A.low} + \Ligature{/LIG}{uni0E4B}{uni0E4B.low} + \Ligature{/LIG}{uni0E4C}{uni0E4C.low} +\endsetslot + +\setslot{uni0E14} + \Unicode{0E14}{THAI CHARACTER DO DEK} + \Ligature{/LIG/}{uni0E33}{uni0E4D} + \Ligature{/LIG}{uni0E48}{uni0E48.low} + \Ligature{/LIG}{uni0E49}{uni0E49.low} + \Ligature{/LIG}{uni0E4A}{uni0E4A.low} + \Ligature{/LIG}{uni0E4B}{uni0E4B.low} + \Ligature{/LIG}{uni0E4C}{uni0E4C.low} +\endsetslot + +\setslot{uni0E15} + \Unicode{0E15}{THAI CHARACTER TO TAO} + \Ligature{/LIG/}{uni0E33}{uni0E4D} + \Ligature{/LIG}{uni0E48}{uni0E48.low} + \Ligature{/LIG}{uni0E49}{uni0E49.low} + \Ligature{/LIG}{uni0E4A}{uni0E4A.low} + \Ligature{/LIG}{uni0E4B}{uni0E4B.low} + \Ligature{/LIG}{uni0E4C}{uni0E4C.low} +\endsetslot + +\setslot{uni0E16} + \Unicode{0E16}{THAI CHARACTER THO THUNG} + \Ligature{/LIG/}{uni0E33}{uni0E4D} + \Ligature{/LIG}{uni0E48}{uni0E48.low} + \Ligature{/LIG}{uni0E49}{uni0E49.low} + \Ligature{/LIG}{uni0E4A}{uni0E4A.low} + \Ligature{/LIG}{uni0E4B}{uni0E4B.low} + \Ligature{/LIG}{uni0E4C}{uni0E4C.low} +\endsetslot + +\setslot{uni0E17} + \Unicode{0E17}{THAI CHARACTER THO THAHAN} + \Ligature{/LIG/}{uni0E33}{uni0E4D} + \Ligature{/LIG}{uni0E48}{uni0E48.low} + \Ligature{/LIG}{uni0E49}{uni0E49.low} + \Ligature{/LIG}{uni0E4A}{uni0E4A.low} + \Ligature{/LIG}{uni0E4B}{uni0E4B.low} + \Ligature{/LIG}{uni0E4C}{uni0E4C.low} +\endsetslot + +\setslot{uni0E18} + \Unicode{0E18}{THAI CHARACTER THO THONG} + \Ligature{/LIG/}{uni0E33}{uni0E4D} + \Ligature{/LIG}{uni0E48}{uni0E48.low} + \Ligature{/LIG}{uni0E49}{uni0E49.low} + \Ligature{/LIG}{uni0E4A}{uni0E4A.low} + \Ligature{/LIG}{uni0E4B}{uni0E4B.low} + \Ligature{/LIG}{uni0E4C}{uni0E4C.low} +\endsetslot + +\setslot{uni0E19} + \Unicode{0E19}{THAI CHARACTER NO NU} + \Ligature{/LIG/}{uni0E33}{uni0E4D} + \Ligature{/LIG}{uni0E48}{uni0E48.low} + \Ligature{/LIG}{uni0E49}{uni0E49.low} + \Ligature{/LIG}{uni0E4A}{uni0E4A.low} + \Ligature{/LIG}{uni0E4B}{uni0E4B.low} + \Ligature{/LIG}{uni0E4C}{uni0E4C.low} +\endsetslot + +\setslot{uni0E1A} + \Unicode{0E1A}{THAI CHARACTER BO BAIMAI} + \Ligature{/LIG/}{uni0E33}{uni0E4D} + \Ligature{/LIG}{uni0E48}{uni0E48.low} + \Ligature{/LIG}{uni0E49}{uni0E49.low} + \Ligature{/LIG}{uni0E4A}{uni0E4A.low} + \Ligature{/LIG}{uni0E4B}{uni0E4B.low} + \Ligature{/LIG}{uni0E4C}{uni0E4C.low} +\endsetslot + +\setslot{uni0E1B} + \Unicode{0E1B}{THAI CHARACTER PO PLA} + \Ligature{/LIG}{uni0E31}{uni0E31.left} + \Ligature{/LIG/}{uni0E33}{uni0E4D.left} + \Ligature{/LIG}{uni0E34}{uni0E34.left} + \Ligature{/LIG}{uni0E35}{uni0E35.left} + \Ligature{/LIG}{uni0E36}{uni0E36.left} + \Ligature{/LIG}{uni0E37}{uni0E37.left} + \Ligature{/LIG}{uni0E38}{uni0E38.left} + \Ligature{/LIG}{uni0E39}{uni0E39.left} + \Ligature{/LIG}{uni0E3A}{uni0E3A.left} + \Ligature{/LIG}{uni0E47}{uni0E47.left} + \Ligature{/LIG}{uni0E48}{uni0E48.low_left} + \Ligature{/LIG}{uni0E49}{uni0E49.low_left} + \Ligature{/LIG}{uni0E4A}{uni0E4A.low_left} + \Ligature{/LIG}{uni0E4B}{uni0E4B.low_left} + \Ligature{/LIG}{uni0E4C}{uni0E4C.low} + \Ligature{/LIG}{uni0E4D}{uni0E4D.left} +\endsetslot + +\setslot{uni0E1C} + \Unicode{0E1C}{THAI CHARACTER PHO PHUNG} + \Ligature{/LIG/}{uni0E33}{uni0E4D} + \Ligature{/LIG}{uni0E48}{uni0E48.low} + \Ligature{/LIG}{uni0E49}{uni0E49.low} + \Ligature{/LIG}{uni0E4A}{uni0E4A.low} + \Ligature{/LIG}{uni0E4B}{uni0E4B.low} + \Ligature{/LIG}{uni0E4C}{uni0E4C.low} +\endsetslot + +\setslot{uni0E1D} + \Unicode{0E1D}{THAI CHARACTER FO FA} + \Ligature{/LIG}{uni0E31}{uni0E31.left} + \Ligature{/LIG/}{uni0E33}{uni0E4D.left} + \Ligature{/LIG}{uni0E34}{uni0E34.left} + \Ligature{/LIG}{uni0E35}{uni0E35.left} + \Ligature{/LIG}{uni0E36}{uni0E36.left} + \Ligature{/LIG}{uni0E37}{uni0E37.left} + \Ligature{/LIG}{uni0E38}{uni0E38.left} + \Ligature{/LIG}{uni0E39}{uni0E39.left} + \Ligature{/LIG}{uni0E3A}{uni0E3A.left} + \Ligature{/LIG}{uni0E47}{uni0E47.left} + \Ligature{/LIG}{uni0E48}{uni0E48.low_left} + \Ligature{/LIG}{uni0E49}{uni0E49.low_left} + \Ligature{/LIG}{uni0E4A}{uni0E4A.low_left} + \Ligature{/LIG}{uni0E4B}{uni0E4B.low_left} + \Ligature{/LIG}{uni0E4C}{uni0E4C.low} + \Ligature{/LIG}{uni0E4D}{uni0E4D.left} +\endsetslot + +\setslot{uni0E1E} + \Unicode{0E1E}{THAI CHARACTER PHO PHAN} + \Ligature{/LIG/}{uni0E33}{uni0E4D} + \Ligature{/LIG}{uni0E48}{uni0E48.low} + \Ligature{/LIG}{uni0E49}{uni0E49.low} + \Ligature{/LIG}{uni0E4A}{uni0E4A.low} + \Ligature{/LIG}{uni0E4B}{uni0E4B.low} + \Ligature{/LIG}{uni0E4C}{uni0E4C.low} +\endsetslot + +\setslot{uni0E1F} + \Unicode{0E1F}{THAI CHARACTER FO FAN} + \Ligature{/LIG}{uni0E31}{uni0E31.left} + \Ligature{/LIG/}{uni0E33}{uni0E4D.left} + \Ligature{/LIG}{uni0E34}{uni0E34.left} + \Ligature{/LIG}{uni0E35}{uni0E35.left} + \Ligature{/LIG}{uni0E36}{uni0E36.left} + \Ligature{/LIG}{uni0E37}{uni0E37.left} + \Ligature{/LIG}{uni0E38}{uni0E38.left} + \Ligature{/LIG}{uni0E39}{uni0E39.left} + \Ligature{/LIG}{uni0E3A}{uni0E3A.left} + \Ligature{/LIG}{uni0E47}{uni0E47.left} + \Ligature{/LIG}{uni0E48}{uni0E48.low_left} + \Ligature{/LIG}{uni0E49}{uni0E49.low_left} + \Ligature{/LIG}{uni0E4A}{uni0E4A.low_left} + \Ligature{/LIG}{uni0E4B}{uni0E4B.low_left} + \Ligature{/LIG}{uni0E4C}{uni0E4C.low} + \Ligature{/LIG}{uni0E4D}{uni0E4D.left} +\endsetslot + +% 0xC0 | 192 +\setslot{uni0E20} + \Unicode{0E20}{THAI CHARACTER PHO SAMPHAO} + \Ligature{/LIG/}{uni0E33}{uni0E4D} + \Ligature{/LIG}{uni0E48}{uni0E48.low} + \Ligature{/LIG}{uni0E49}{uni0E49.low} + \Ligature{/LIG}{uni0E4A}{uni0E4A.low} + \Ligature{/LIG}{uni0E4B}{uni0E4B.low} + \Ligature{/LIG}{uni0E4C}{uni0E4C.low} +\endsetslot + +\setslot{uni0E21} + \Unicode{0E21}{THAI CHARACTER MO MA} + \Ligature{/LIG/}{uni0E33}{uni0E4D} + \Ligature{/LIG}{uni0E48}{uni0E48.low} + \Ligature{/LIG}{uni0E49}{uni0E49.low} + \Ligature{/LIG}{uni0E4A}{uni0E4A.low} + \Ligature{/LIG}{uni0E4B}{uni0E4B.low} + \Ligature{/LIG}{uni0E4C}{uni0E4C.low} +\endsetslot + +\setslot{uni0E22} + \Unicode{0E22}{THAI CHARACTER YO YAK} + \Ligature{/LIG/}{uni0E33}{uni0E4D} + \Ligature{/LIG}{uni0E48}{uni0E48.low} + \Ligature{/LIG}{uni0E49}{uni0E49.low} + \Ligature{/LIG}{uni0E4A}{uni0E4A.low} + \Ligature{/LIG}{uni0E4B}{uni0E4B.low} + \Ligature{/LIG}{uni0E4C}{uni0E4C.low} +\endsetslot + +\setslot{uni0E23} + \Unicode{0E23}{THAI CHARACTER RO RUA} + \Ligature{/LIG/}{uni0E33}{uni0E4D} + \Ligature{/LIG}{uni0E48}{uni0E48.low} + \Ligature{/LIG}{uni0E49}{uni0E49.low} + \Ligature{/LIG}{uni0E4A}{uni0E4A.low} + \Ligature{/LIG}{uni0E4B}{uni0E4B.low} + \Ligature{/LIG}{uni0E4C}{uni0E4C.low} +\endsetslot + +\setslot{uni0E24} + \Unicode{0E24}{THAI CHARACTER RU} + \Ligature{/LIG}{uni0E32}{uni0E45} + \Ligature{/LIG}{uni0E48}{uni0E48.low} + \Ligature{/LIG}{uni0E49}{uni0E49.low} + \Ligature{/LIG}{uni0E4A}{uni0E4A.low} + \Ligature{/LIG}{uni0E4B}{uni0E4B.low} + \Ligature{/LIG}{uni0E4C}{uni0E4C.low} +\endsetslot + +\setslot{uni0E25} + \Unicode{0E25}{THAI CHARACTER LO LING} + \Ligature{/LIG/}{uni0E33}{uni0E4D} + \Ligature{/LIG}{uni0E48}{uni0E48.low} + \Ligature{/LIG}{uni0E49}{uni0E49.low} + \Ligature{/LIG}{uni0E4A}{uni0E4A.low} + \Ligature{/LIG}{uni0E4B}{uni0E4B.low} + \Ligature{/LIG}{uni0E4C}{uni0E4C.low} +\endsetslot + +\setslot{uni0E26} + \Unicode{0E26}{THAI CHARACTER LU} + \Ligature{/LIG}{uni0E32}{uni0E45} + \Ligature{/LIG}{uni0E48}{uni0E48.low} + \Ligature{/LIG}{uni0E49}{uni0E49.low} + \Ligature{/LIG}{uni0E4A}{uni0E4A.low} + \Ligature{/LIG}{uni0E4B}{uni0E4B.low} + \Ligature{/LIG}{uni0E4C}{uni0E4C.low} +\endsetslot + +\setslot{uni0E27} + \Unicode{0E27}{THAI CHARACTER WO WAEN} + \Ligature{/LIG/}{uni0E33}{uni0E4D} + \Ligature{/LIG}{uni0E48}{uni0E48.low} + \Ligature{/LIG}{uni0E49}{uni0E49.low} + \Ligature{/LIG}{uni0E4A}{uni0E4A.low} + \Ligature{/LIG}{uni0E4B}{uni0E4B.low} + \Ligature{/LIG}{uni0E4C}{uni0E4C.low} +\endsetslot + +\setslot{uni0E28} + \Unicode{0E28}{THAI CHARACTER SO SALA} + \Ligature{/LIG}{uni0E48}{uni0E48.low} + \Ligature{/LIG}{uni0E49}{uni0E49.low} + \Ligature{/LIG}{uni0E4A}{uni0E4A.low} + \Ligature{/LIG}{uni0E4B}{uni0E4B.low} + \Ligature{/LIG}{uni0E4C}{uni0E4C.low} +\endsetslot + +\setslot{uni0E29} + \Unicode{0E29}{THAI CHARACTER SO RUSI} + \Ligature{/LIG}{uni0E48}{uni0E48.low} + \Ligature{/LIG}{uni0E49}{uni0E49.low} + \Ligature{/LIG}{uni0E4A}{uni0E4A.low} + \Ligature{/LIG}{uni0E4B}{uni0E4B.low} + \Ligature{/LIG}{uni0E4C}{uni0E4C.low} +\endsetslot + +\setslot{uni0E2A} + \Unicode{0E2A}{THAI CHARACTER SO SUA} + \Ligature{/LIG}{uni0E48}{uni0E48.low} + \Ligature{/LIG}{uni0E49}{uni0E49.low} + \Ligature{/LIG}{uni0E4A}{uni0E4A.low} + \Ligature{/LIG}{uni0E4B}{uni0E4B.low} + \Ligature{/LIG}{uni0E4C}{uni0E4C.low} +\endsetslot + +\setslot{uni0E2B} + \Unicode{0E2B}{THAI CHARACTER HO HIP} + \Ligature{/LIG}{uni0E48}{uni0E48.low} + \Ligature{/LIG}{uni0E49}{uni0E49.low} + \Ligature{/LIG}{uni0E4A}{uni0E4A.low} + \Ligature{/LIG}{uni0E4B}{uni0E4B.low} + \Ligature{/LIG}{uni0E4C}{uni0E4C.low} +\endsetslot + +\setslot{uni0E2C} + \Unicode{0E2C}{THAI CHARACTER LO CHULA} + \Ligature{/LIG/}{uni0E33}{uni0E4D.left} + \Ligature{/LIG}{uni0E4A}{uni0E4A.low} + \Ligature{/LIG}{uni0E4B}{uni0E4B.low} +\endsetslot + +\setslot{uni0E2D} + \Unicode{0E2D}{THAI CHARACTER O ANG} + \Ligature{/LIG}{uni0E48}{uni0E48.low} + \Ligature{/LIG}{uni0E49}{uni0E49.low} + \Ligature{/LIG}{uni0E4A}{uni0E4A.low} + \Ligature{/LIG}{uni0E4C}{uni0E4C.low} +\endsetslot + +\setslot{uni0E2E} + \Unicode{0E2E}{THAI CHARACTER HO NOKHUK} + \Ligature{/LIG}{uni0E48}{uni0E48.low} + \Ligature{/LIG}{uni0E49}{uni0E49.low} + \Ligature{/LIG}{uni0E4A}{uni0E4A.low} + \Ligature{/LIG}{uni0E4B}{uni0E4B.low} + \Ligature{/LIG}{uni0E4C}{uni0E4C.low} +\endsetslot + +\setslot{uni0E2F} + \Unicode{0E2F}{THAI CHARACTER PAIYANNOI} + \Ligature{/LIG}{uni0E48}{uni0E48.low} + \Ligature{/LIG}{uni0E49}{uni0E49.low} + \Ligature{/LIG}{uni0E4A}{uni0E4A.low} + \Ligature{/LIG}{uni0E4B}{uni0E4B.low} + \Ligature{/LIG}{uni0E4C}{uni0E4C.low} +\endsetslot + +% 0xD0 | 208 +\setslot{uni0E30} + \Unicode{0E30}{THAI CHARACTER SARA A} + \Ligature{/LIG/}{uni0E33}{uni0E4D} + \Ligature{/LIG}{uni0E48}{uni0E48.low} + \Ligature{/LIG}{uni0E49}{uni0E49.low} + \Ligature{/LIG}{uni0E4A}{uni0E4A.low} + \Ligature{/LIG}{uni0E4B}{uni0E4B.low} + \Ligature{/LIG}{uni0E4C}{uni0E4C.low} +\endsetslot + +\setslot{uni0E31} + \Unicode{0E31}{THAI CHARACTER MAI HAN-AKAT} +\endsetslot + +\setslot{uni0E32} + \Unicode{0E32}{THAI CHARACTER SARA AA} + \Ligature{/LIG}{uni0E48}{uni0E48.low} + \Ligature{/LIG}{uni0E49}{uni0E49.low} + \Ligature{/LIG}{uni0E4A}{uni0E4A.low} + \Ligature{/LIG}{uni0E4B}{uni0E4B.low} + \Ligature{/LIG}{uni0E4C}{uni0E4C.low} +\endsetslot + +\setslot{uni0E33} + \Unicode{0E33}{THAI CHARACTER SARA AM} + \Ligature{/LIG}{uni0E48}{uni0E48.low} + \Ligature{/LIG}{uni0E49}{uni0E49.low} + \Ligature{/LIG}{uni0E4A}{uni0E4A.low} + \Ligature{/LIG}{uni0E4B}{uni0E4B.low} + \Ligature{/LIG}{uni0E4C}{uni0E4C.low} +\endsetslot + +\setslot{uni0E34} + \Unicode{0E34}{THAI CHARACTER SARA I} +\endsetslot + +\setslot{uni0E35} + \Unicode{0E35}{THAI CHARACTER SARA II} +\endsetslot + +\setslot{uni0E36} + \Unicode{0E36}{THAI CHARACTER SARA UE} +\endsetslot + +\setslot{uni0E37} + \Unicode{0E37}{THAI CHARACTER SARA UEE} +\endsetslot + +\setslot{uni0E38} + \Unicode{0E38}{THAI CHARACTER SARA U} + \Ligature{/LIG}{uni0E48}{uni0E48.low} + \Ligature{/LIG}{uni0E49}{uni0E49.low} + \Ligature{/LIG}{uni0E4A}{uni0E4A.low} + \Ligature{/LIG}{uni0E4B}{uni0E4B.low} + \Ligature{/LIG}{uni0E4C}{uni0E4C.low} +\endsetslot + +\setslot{uni0E39} + \Unicode{0E39}{THAI CHARACTER SARA UU} + \Ligature{/LIG}{uni0E48}{uni0E48.low} + \Ligature{/LIG}{uni0E49}{uni0E49.low} + \Ligature{/LIG}{uni0E4A}{uni0E4A.low} + \Ligature{/LIG}{uni0E4B}{uni0E4B.low} + \Ligature{/LIG}{uni0E4C}{uni0E4C.low} +\endsetslot + +\setslot{uni0E3A} + \Unicode{0E3A}{THAI CHARACTER PHINTHU} + \Ligature{/LIG}{uni0E48}{uni0E48.low} + \Ligature{/LIG}{uni0E49}{uni0E49.low} + \Ligature{/LIG}{uni0E4A}{uni0E4A.low} + \Ligature{/LIG}{uni0E4B}{uni0E4B.low} + \Ligature{/LIG}{uni0E4C}{uni0E4C.low} +\endsetslot + +\skipslots{4} + +\setslot{uni0E3F} + \Unicode{0E3F}{THAI CURRENCY SYMBOL BAHT} +\endsetslot + +% 0xE0 | 224 +\setslot{uni0E40} + \Unicode{0E40}{THAI CHARACTER SARA E} + \Ligature{/LIG/}{uni0E33}{uni0E4D} + \Ligature{/LIG}{uni0E48}{uni0E48.low} + \Ligature{/LIG}{uni0E49}{uni0E49.low} + \Ligature{/LIG}{uni0E4A}{uni0E4A.low} + \Ligature{/LIG}{uni0E4B}{uni0E4B.low} + \Ligature{/LIG}{uni0E4C}{uni0E4C.low} +\endsetslot + +\setslot{uni0E41} + \Unicode{0E41}{THAI CHARACTER SARA AE} + \Ligature{/LIG/}{uni0E33}{uni0E4D} + \Ligature{/LIG}{uni0E48}{uni0E48.low} + \Ligature{/LIG}{uni0E49}{uni0E49.low} + \Ligature{/LIG}{uni0E4A}{uni0E4A.low} + \Ligature{/LIG}{uni0E4B}{uni0E4B.low} + \Ligature{/LIG}{uni0E4C}{uni0E4C.low} +\endsetslot + +\setslot{uni0E42} + \Unicode{0E42}{THAI CHARACTER SARA O} +\endsetslot + +\setslot{uni0E43} + \Unicode{0E43}{THAI CHARACTER SARA AI MAIMUAN} +\endsetslot + +\setslot{uni0E44} + \Unicode{0E44}{THAI CHARACTER SARA AI MAIMALAI} +\endsetslot + +\setslot{uni0E45} + \Unicode{0E45}{THAI CHARACTER LAKKHANGYAO} +\endsetslot + +\setslot{uni0E46} + \Unicode{0E46}{THAI CHARACTER MAIYAMOK} + \Ligature{/LIG}{uni0E48}{uni0E48.low} + \Ligature{/LIG}{uni0E49}{uni0E49.low} + \Ligature{/LIG}{uni0E4A}{uni0E4A.low} + \Ligature{/LIG}{uni0E4B}{uni0E4B.low} + \Ligature{/LIG}{uni0E4C}{uni0E4C.low} +\endsetslot + +\setslot{uni0E47} + \Unicode{0E47}{THAI CHARACTER MAITAIKHU} +\endsetslot + +\setslot{uni0E48} + \Unicode{0E48}{THAI CHARACTER MAI EK} + \Ligature{/LIG}{uni0E33}{uni0E32} +\endsetslot + +\setslot{uni0E49} + \Unicode{0E49}{THAI CHARACTER MAI THO} + \Ligature{/LIG}{uni0E33}{uni0E32} +\endsetslot + +\setslot{uni0E4A} + \Unicode{0E4A}{THAI CHARACTER MAI TRI} + \Ligature{/LIG}{uni0E33}{uni0E32} +\endsetslot + +\setslot{uni0E4B} + \Unicode{0E4B}{THAI CHARACTER MAI CHATTAWA} + \Ligature{/LIG}{uni0E33}{uni0E32} +\endsetslot + +\setslot{uni0E4C} + \Unicode{0E4C}{THAI CHARACTER THANTHAKHAT} + \Ligature{/LIG}{uni0E33}{uni0E32} +\endsetslot + +\setslot{uni0E4D} + \Unicode{0E4D}{THAI CHARACTER NIKHAHIT} + \Ligature{/LIG}{uni0E33}{uni0E32} +\endsetslot + +\setslot{uni0E4E} + \Unicode{0E4E}{THAI CHARACTER YAMAKKAN} +\endsetslot + +\setslot{uni0E4F} + \Unicode{0E4F}{THAI CHARACTER FONGMAN} +\endsetslot + +% 0xF0 | 240 +\setslot{uni0E50} + \Unicode{0E50}{THAI DIGIT ZERO} +\endsetslot + +\setslot{uni0E51} + \Unicode{0E51}{THAI DIGIT ONE} +\endsetslot + +\setslot{uni0E52} + \Unicode{0E52}{THAI DIGIT TWO} +\endsetslot + +\setslot{uni0E53} + \Unicode{0E53}{THAI DIGIT THREE} +\endsetslot + +\setslot{uni0E54} + \Unicode{0E54}{THAI DIGIT FOUR} +\endsetslot + +\setslot{uni0E55} + \Unicode{0E55}{THAI DIGIT FIVE} +\endsetslot + +\setslot{uni0E56} + \Unicode{0E56}{THAI DIGIT SIX} +\endsetslot + +\setslot{uni0E57} + \Unicode{0E57}{THAI DIGIT SEVEN} +\endsetslot + +\setslot{uni0E58} + \Unicode{0E58}{THAI DIGIT EIGHT} +\endsetslot + +\setslot{uni0E59} + \Unicode{0E59}{THAI DIGIT NINE} +\endsetslot + +\setslot{uni0E5A} + \Unicode{0E5A}{THAI CHARACTER ANGKHANKHU} +\endsetslot + +\setslot{uni0E5B} + \Unicode{0E5B}{THAI CHARACTER KHOMUT} +\endsetslot + +\setslot{uni0E38.low} + \comment{A glyph variant of \textunicode{0E38}{THAI CHARACTER SARA U}.} + \Ligature{/LIG}{uni0E48}{uni0E48.low} + \Ligature{/LIG}{uni0E49}{uni0E49.low} + \Ligature{/LIG}{uni0E4A}{uni0E4A.low} + \Ligature{/LIG}{uni0E4B}{uni0E4B.low} + \Ligature{/LIG}{uni0E4C}{uni0E4C.low} +\endsetslot + +\setslot{uni0E39.low} + \comment{A glyph variant of \textunicode{0E39}{THAI CHARACTER SARA UU}.} + \Ligature{/LIG}{uni0E48}{uni0E48.low} + \Ligature{/LIG}{uni0E49}{uni0E49.low} + \Ligature{/LIG}{uni0E4A}{uni0E4A.low} + \Ligature{/LIG}{uni0E4B}{uni0E4B.low} + \Ligature{/LIG}{uni0E4C}{uni0E4C.low} +\endsetslot + +\setslot{uni0E3A.low} + \comment{A glyph variant of \textunicode{0E3A}{THAI CHARACTER PHINTHU}.} + \Ligature{/LIG}{uni0E48}{uni0E48.low} + \Ligature{/LIG}{uni0E49}{uni0E49.low} + \Ligature{/LIG}{uni0E4A}{uni0E4A.low} + \Ligature{/LIG}{uni0E4B}{uni0E4B.low} + \Ligature{/LIG}{uni0E4C}{uni0E4C.low} +\endsetslot + +\skipslots{1} + + +\begincomment +\section{Font Dimensions} +\endcomment + +\setfontdimen{1}{italicslant} +\setfontdimen{2}{interword} +\setfontdimen{3}{stretchword} +\setfontdimen{4}{shrinkword} +\setfontdimen{5}{xheight} +\setfontdimen{6}{quad} +\setfontdimen{7}{extraspace} + +\endencoding + + +\begin{thebibliography}{9} +\bibitem{TUG-Thai} + Werner Lemberg: \textit{Thai Fonts}, in \textit{TUGboat}, + 21(2):113--120, June 2000. Available online in PDF format as + \url{http://tug.org/TUGboat/Articles/tb21-2/tb67lemb.pdf}. +\bibitem{AGL} + Adobe Systems Incorporated: \textit{Adobe Glyph List}, 2003; + \url{http://partners.adobe.com/asn/developer/type/unicodegn.html}. +\bibitem{MFbook} + Donald E.\ Knuth, Duane Bibby (illustrations): \textit{The \MF + book}, Ad\-di\-son--Wes\-ley, 1986; ISBN~0-201-13445-4. +\bibitem{Unicode} + The Unicode Consortium (editor), \emph{et al.}: \textit{The Unicode + Standard, Version 4.0}, Addison Wesley Longman Publisher, 2003; + ISBN~0-321-18578-1. Most of the information in this book is also + available online at the Unicode consortium website, at + \url{http://www.unicode.org/versions/Unicode4.0.1}. +\end{thebibliography} + +\end{document} + +% end of c90.etx diff --git a/Master/texmf-dist/source/latex/cjk/utils/thaifont/tools/c90.mtx b/Master/texmf-dist/source/latex/cjk/utils/thaifont/tools/c90.mtx new file mode 100644 index 00000000000..eda3aa2fcb0 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/thaifont/tools/c90.mtx @@ -0,0 +1,42 @@ +% c90.mtx + +% Copyright (C) 1994-2008 Werner Lemberg <wl@gnu.org> +% +% 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 in doc/COPYING; if not, write to the Free +% Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +% MA 02110-1301 USA + +\relax + +\metrics + +\needsfontinstversion{1.918} + +% provide glyph aliases needed for the ligature mechanism + +\setglyph{uni0E38.left} + \glyph{uni0E38}{1000} +\endsetglyph + +\setglyph{uni0E39.left} + \glyph{uni0E39}{1000} +\endsetglyph + +\setglyph{uni0E3A.left} + \glyph{uni0E3A}{1000} +\endsetglyph + +\endmetrics + +% end of c90.mtx diff --git a/Master/texmf-dist/source/latex/cjk/utils/thaifont/tools/dbtt-old/config.dbtt-old b/Master/texmf-dist/source/latex/cjk/utils/thaifont/tools/dbtt-old/config.dbtt-old new file mode 100644 index 00000000000..5ce1be96b23 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/thaifont/tools/dbtt-old/config.dbtt-old @@ -0,0 +1 @@ +p +dbtt-old.map diff --git a/Master/texmf-dist/source/latex/cjk/utils/thaifont/tools/dbtt-old/dbtt-old-alias.etx b/Master/texmf-dist/source/latex/cjk/utils/thaifont/tools/dbtt-old/dbtt-old-alias.etx new file mode 100644 index 00000000000..5d826b0b546 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/thaifont/tools/dbtt-old/dbtt-old-alias.etx @@ -0,0 +1,46 @@ +% dbtt-old-alias.etx + +% Copyright (C) 1994-2008 Werner Lemberg <wl@gnu.org> +% +% 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 in doc/COPYING; if not, write to the Free +% Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +% MA 02110-1301 USA + +\relax + +\encoding + +\needsfontinstversion{1.918} + +\fontinstcc +\def\galias#1#2{ + \expandafter\def\csname slot-#2\endcsname{#1} +} +\def\setslot#1{ + \edef\slot_name{ + \if_defined{slot-#1}\then + \csname slot-#1\endcsname + \else + #1 + \fi + } + \do_slot +} +\normalcc + +\input dbtt-old-alias + +\endencoding + +% end of dbtt-old-alias.etx diff --git a/Master/texmf-dist/source/latex/cjk/utils/thaifont/tools/dbtt-old/dbtt-old-alias.mtx b/Master/texmf-dist/source/latex/cjk/utils/thaifont/tools/dbtt-old/dbtt-old-alias.mtx new file mode 100644 index 00000000000..3e91339cb8f --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/thaifont/tools/dbtt-old/dbtt-old-alias.mtx @@ -0,0 +1,36 @@ +% dbtt-old-alias.mtx + +% Copyright (C) 1994-2008 Werner Lemberg <wl@gnu.org> +% +% 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 in doc/COPYING; if not, write to the Free +% Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +% MA 02110-1301 USA + +\relax + +\metrics + +\needsfontinstversion{1.918} + +\def\galias#1#2{ + \setglyph{#2} + \glyph{#1}{1000} + \endsetglyph +} + +\input dbtt-old-alias + +\endmetrics + +% end of dbtt-old-alias.mtx diff --git a/Master/texmf-dist/source/latex/cjk/utils/thaifont/tools/dbtt-old/dbtt-old-alias.tex b/Master/texmf-dist/source/latex/cjk/utils/thaifont/tools/dbtt-old/dbtt-old-alias.tex new file mode 100644 index 00000000000..74398589e3b --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/thaifont/tools/dbtt-old/dbtt-old-alias.tex @@ -0,0 +1,139 @@ +% dbtt-old-alias.tex + +% Copyright (C) 1994-2008 Werner Lemberg <wl@gnu.org> +% +% 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 in doc/COPYING; if not, write to the Free +% Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +% MA 02110-1301 USA + +\galias{ucircumflex}{endash} +\galias{uacute}{emdash} +\galias{quotedbl}{quotedblleft} +\galias{quotedbl}{quotedblright} +\galias{quotesingle}{quoteright} +\galias{grave}{quoteleft} +\galias{florin}{uni0E48.low_left} +\galias{quotedblbase}{uni0E49.low_left} +\galias{ellipsis}{uni0E4A.low_left} +\galias{dagger}{uni0E4B.low_left} +\galias{daggerdbl}{uni0E4C.low_left} +\galias{circumflex}{uni0E48.low} +\galias{perthousand}{uni0E49.low} +\galias{Scaron}{uni0E4A.low} +\galias{guilsinglleft}{uni0E4B.low} +\galias{OE}{uni0E4C.low} +\galias{u008F}{uni0E4D.left} +\galias{u0090}{uni0E0D.descless} +\galias{quoteright}{uni0E31.left} +\galias{quotedblleft}{uni0E47.left} +\galias{quotedblright}{uni0E34.left} +\galias{bullet}{uni0E35.left} +\galias{emdash}{uni0E36.left} +\galias{endash}{uni0E37.left} +\galias{tilde}{uni0E48.left} +\galias{trademark}{uni0E49.left} +\galias{scaron}{uni0E4A.left} +\galias{guilsinglright}{uni0E4B.left} +\galias{oe}{uni0E4C.left} +\galias{Ydieresis}{uni0E10.descless} +\galias{exclamdown}{uni0E01} +\galias{cent}{uni0E02} +\galias{sterling}{uni0E03} +\galias{currency}{uni0E04} +\galias{yen}{uni0E05} +\galias{brokenbar}{uni0E06} +\galias{section}{uni0E07} +\galias{dieresis}{uni0E08} +\galias{copyright}{uni0E09} +\galias{ordfeminine}{uni0E0A} +\galias{guillemotleft}{uni0E0B} +\galias{logicalnot}{uni0E0C} +\galias{hyphen}{uni0E0D} +\galias{registered}{uni0E0E} +\galias{macron}{uni0E0F} +\galias{degree}{uni0E10} +\galias{plusminus}{uni0E11} +\galias{twosuperior}{uni0E12} +\galias{threesuperior}{uni0E13} +\galias{acute}{uni0E14} +\galias{mu}{uni0E15} +\galias{paragraph}{uni0E16} +\galias{periodcentered}{uni0E17} +\galias{cedilla}{uni0E18} +\galias{onesuperior}{uni0E19} +\galias{ordmasculine}{uni0E1A} +\galias{guillemotright}{uni0E1B} +\galias{onequarter}{uni0E1C} +\galias{onehalf}{uni0E1D} +\galias{threequarters}{uni0E1E} +\galias{questiondown}{uni0E1F} +\galias{Agrave}{uni0E20} +\galias{Aacute}{uni0E21} +\galias{Acircumflex}{uni0E22} +\galias{Atilde}{uni0E23} +\galias{Adieresis}{uni0E24} +\galias{Aring}{uni0E25} +\galias{AE}{uni0E26} +\galias{Ccedilla}{uni0E27} +\galias{Egrave}{uni0E28} +\galias{Eacute}{uni0E29} +\galias{Ecircumflex}{uni0E2A} +\galias{Edieresis}{uni0E2B} +\galias{Igrave}{uni0E2C} +\galias{Iacute}{uni0E2D} +\galias{Icircumflex}{uni0E2E} +\galias{Idieresis}{uni0E2F} +\galias{Eth}{uni0E30} +\galias{Ntilde}{uni0E31} +\galias{Ograve}{uni0E32} +\galias{Oacute}{uni0E33} +\galias{Ocircumflex}{uni0E34} +\galias{Otilde}{uni0E35} +\galias{Odieresis}{uni0E36} +\galias{multiply}{uni0E37} +\galias{Oslash}{uni0E38} +\galias{Ugrave}{uni0E39} +\galias{Uacute}{uni0E3A} +\galias{germandbls}{uni0E3F} +\galias{agrave}{uni0E40} +\galias{aacute}{uni0E41} +\galias{acircumflex}{uni0E42} +\galias{atilde}{uni0E43} +\galias{adieresis}{uni0E44} +\galias{aring}{uni0E45} +\galias{ae}{uni0E46} +\galias{ccedilla}{uni0E47} +\galias{egrave}{uni0E48} +\galias{eacute}{uni0E49} +\galias{ecircumflex}{uni0E4A} +\galias{edieresis}{uni0E4B} +\galias{igrave}{uni0E4C} +\galias{iacute}{uni0E4D} +\galias{icircumflex}{uni0E4E} +\galias{idieresis}{uni0E4F} +\galias{eth}{uni0E50} +\galias{ntilde}{uni0E51} +\galias{ograve}{uni0E52} +\galias{oacute}{uni0E53} +\galias{ocircumflex}{uni0E54} +\galias{otilde}{uni0E55} +\galias{odieresis}{uni0E56} +\galias{divide}{uni0E57} +\galias{oslash}{uni0E58} +\galias{ugrave}{uni0E59} +\galias{udieresis}{uni0E38.low} +\galias{yacute}{uni0E39.low} +\galias{Ucircumflex}{uni0E3A.low} + +% end of dbtt-old-alias.tex diff --git a/Master/texmf-dist/source/latex/cjk/utils/thaifont/tools/dbtt-old/dbtt-old.fontinst b/Master/texmf-dist/source/latex/cjk/utils/thaifont/tools/dbtt-old/dbtt-old.fontinst new file mode 100644 index 00000000000..0251ee373a4 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/thaifont/tools/dbtt-old/dbtt-old.fontinst @@ -0,0 +1,78 @@ +% dbtt-old.fontinst + +% Copyright (C) 1994-2008 Werner Lemberg <wl@gnu.org> +% +% 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 in doc/COPYING; if not, write to the Free +% Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +% MA 02110-1301 USA + +\input fontinst.sty + +\needsfontinstversion{1.918} + + +% we explicitly set all slots in the encoding, so provide all glyph names +% in AFM files equally (this is, don't create `<glyph>-not' names) +\let\setnotglyph \setrawglyph + +% we want warnings for missing glyphs +\fontinstcc +\add_to\pre_fourth_etx_pass_hook{ + \def\do_slot{ + \if_undefined{g-\slot_name}\then + \fontinstwarningnoline{fontinst} + {missing~glyph~`\slot_name'\space + for~slot~\the\slot_number\space + in~font~`\out_filename'} + \fi + \do_character + } +} +\normalcc + + +% create PL files and an FD file +\installfonts + \setint{fontdimen(2)}{500} % SPACE + \setint{fontdimen(3)}{300} % STRETCH + \setint{fontdimen(4)}{100} % SHRINK + \setint{fontdimen(6)}{1000} % QUAD + \setint{fontdimen(7)}{0} % EXTRASPACE + + \installrawfont{fdbr8z}{dbtt,dbtt-old-alias,c90}{c90} + {C90}{dbss}{m}{n}{<-> s *[1.3]} + \installrawfont{fdbb8z}{dbttb,dbtt-old-alias,c90}{c90} + {C90}{dbss}{bx}{n}{<-> s *[1.3]} + \installrawfont{fdbbo8z}{dbttbi,dbtt-old-alias,c90}{c90} + {C90}{dbss}{bx}{sl}{<-> s *[1.3]} + \installrawfont{fdbo8z}{dbtti,dbtt-old-alias,c90}{c90} + {C90}{dbss}{m}{sl}{<-> s *[1.3]} +\endinstallfonts + + +\input finstmsc.sty + + +% create the dbtt-old.enc file +\installfonts + % the `makeenc' flag is used in c90.etx + \setint{makeenc}{1} + \setstr{encodingname}{dbtt-oldEncoding} + \inputetx{dbtt-old-alias} + \etxtoenc{c90}{dbtt-old} +\endinstallfonts + +\end + +% end of dbtt-old.fontinst diff --git a/Master/texmf-dist/source/latex/cjk/utils/thaifont/tools/dbtt-old/dbtt-old.map b/Master/texmf-dist/source/latex/cjk/utils/thaifont/tools/dbtt-old/dbtt-old.map new file mode 100644 index 00000000000..c48f73fe714 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/thaifont/tools/dbtt-old/dbtt-old.map @@ -0,0 +1,4 @@ +fdbr8z DBThaiText " dbtt-oldEncoding ReEncodeFont " <dbtt-old.enc <dbtt.pfb +fdbb8z DBThaiTextBold " dbtt-oldEncoding ReEncodeFont " <dbtt-old.enc <dbttb.pfb +fdbo8z DBThaiTextItalic " dbtt-oldEncoding ReEncodeFont " <dbtt-old.enc <dbtti.pfb +fdbbo8z DBThaiTextBoldItalic " dbtt-oldEncoding ReEncodeFont " <dbtt-old.enc <dbttbi.pfb diff --git a/Master/texmf-dist/source/latex/cjk/utils/thaifont/tools/garuda.fontinst b/Master/texmf-dist/source/latex/cjk/utils/thaifont/tools/garuda.fontinst new file mode 100644 index 00000000000..f810f271b4e --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/thaifont/tools/garuda.fontinst @@ -0,0 +1,77 @@ +% garuda.fontinst + +% Copyright (C) 1994-2008 Werner Lemberg <wl@gnu.org> +% +% 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 in doc/COPYING; if not, write to the Free +% Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +% MA 02110-1301 USA + +\input fontinst.sty + +\needsfontinstversion{1.918} + + +% we explicitly set all slots in the encoding, so provide all glyph names +% in AFM files equally (this is, don't create `<glyph>-not' names) +\let\setnotglyph \setrawglyph + +% we want warnings for missing glyphs +\fontinstcc +\add_to\pre_fourth_etx_pass_hook{ + \def\do_slot{ + \if_undefined{g-\slot_name}\then + \fontinstwarningnoline{fontinst} + {missing~glyph~`\slot_name'\space + for~slot~\the\slot_number\space + in~font~`\out_filename'} + \fi + \do_character + } +} +\normalcc + + +% create PL files and an FD file +\installfonts + \setint{fontdimen(2)}{500} % SPACE + \setint{fontdimen(3)}{300} % STRETCH + \setint{fontdimen(4)}{100} % SHRINK + \setint{fontdimen(6)}{1000} % QUAD + \setint{fontdimen(7)}{0} % EXTRASPACE + + \installrawfont{fgdr8z}{garuda,c90}{c90} + {C90}{garuda}{m}{n}{} + \installrawfont{fgdb8z}{garuda_b,c90}{c90} + {C90}{garuda}{bx}{n}{} + \installrawfont{fgdbo8z}{garuda_bo,c90}{c90} + {C90}{garuda}{bx}{sl}{} + \installrawfont{fgdo8z}{garuda_o,c90}{c90} + {C90}{garuda}{m}{sl}{} +\endinstallfonts + + +\input finstmsc.sty + + +% create the c90.enc file +\installfonts + % the `makeenc' flag is used in c90.etx + \setint{makeenc}{1} + \setstr{encodingname}{C90Encoding} + \etxtoenc{c90}{c90} +\endinstallfonts + +\end + +% end of garuda.fontinst diff --git a/Master/texmf-dist/source/latex/cjk/utils/thaifont/tools/norasi.fontinst b/Master/texmf-dist/source/latex/cjk/utils/thaifont/tools/norasi.fontinst new file mode 100644 index 00000000000..2ea15d10ef6 --- /dev/null +++ b/Master/texmf-dist/source/latex/cjk/utils/thaifont/tools/norasi.fontinst @@ -0,0 +1,85 @@ +% norasi.fontinst + +% Copyright (C) 1994-2008 Werner Lemberg <wl@gnu.org> +% +% 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 in doc/COPYING; if not, write to the Free +% Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +% MA 02110-1301 USA + +\input fontinst.sty + +\needsfontinstversion{1.918} + + +% we explicitly set all slots in the encoding, so provide all glyph names +% in AFM files equally (this is, don't create `<glyph>-not' names) +\let\setnotglyph \setrawglyph + +% we want warnings for missing glyphs +\fontinstcc +\add_to\pre_fourth_etx_pass_hook{ + \def\do_slot{ + \if_undefined{g-\slot_name}\then + \fontinstwarningnoline{fontinst} + {missing~glyph~`\slot_name'\space + for~slot~\the\slot_number\space + in~font~`\out_filename'} + \fi + \do_character + } +} +\normalcc + + +% create PL files and an FD file +\installfonts + \setint{fontdimen(2)}{500} % SPACE + \setint{fontdimen(3)}{300} % STRETCH + \setint{fontdimen(4)}{100} % SHRINK + \setint{fontdimen(6)}{1000} % QUAD + \setint{fontdimen(7)}{0} % EXTRASPACE + + \installrawfont{ftnr8z}{norasi,c90}{c90} + {C90}{nrsr}{m}{n}{} + \installrawfont{ftnb8z}{norasi_b,c90}{c90} + {C90}{nrsr}{bx}{n}{} + \installrawfont{ftnbi8z}{norasi_bi,c90}{c90} + {C90}{nrsr}{bx}{it}{} + \installrawfont{ftni8z}{norasi_i,c90}{c90} + {C90}{nrsr}{m}{it}{} + +% Thai glyphs in norasi_o and norasi_bo are identical to the shapes +% in norasi_i and norasi_bi, respectively. +% +% \installrawfont{ftno8z}{norasi_o,c90}{c90} +% {C90}{nrsr}{m}{sl}{} +% \installrawfont{ftnbo8z}{norasi_bo,c90}{c90} +% {C90}{nrsr}{bx}{sl}{} +\endinstallfonts + + +\input finstmsc.sty + + +% create the c90.enc file +\installfonts + % the `makeenc' flag is used in c90.etx + \setint{makeenc}{1} + \setstr{encodingname}{C90Encoding} + \etxtoenc{c90}{c90} +\endinstallfonts + +\end + +% end of norasi.fontinst |