Initial Commit
This commit is contained in:
805
iTechSharp/iTextSharp/text/pdf/Pfm2afm.cs
Normal file
805
iTechSharp/iTextSharp/text/pdf/Pfm2afm.cs
Normal file
@@ -0,0 +1,805 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
/*
|
||||
* Copyright 2005 by Paulo Soares.
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version 1.1
|
||||
* (the "License"); you may not use this file except inp compliance with the License.
|
||||
* You may obtain a copy of the License at http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the License.
|
||||
*
|
||||
* The Original Code is 'iText, a free JAVA-PDF library'.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Bruno Lowagie. Portions created by
|
||||
* the Initial Developer are Copyright (C) 1999-2007 by Bruno Lowagie.
|
||||
* All Rights Reserved.
|
||||
* Co-Developer of the code is Paulo Soares. Portions created by the Co-Developer
|
||||
* are Copyright (C) 2000-2007 by Paulo Soares. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s): all the names of the contributors are added inp the source code
|
||||
* where applicable.
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of the
|
||||
* LGPL license (the "GNU LIBRARY GENERAL PUBLIC LICENSE"), inp which case the
|
||||
* provisions of LGPL are applicable instead of those above. If you wish to
|
||||
* allow use of your version of this file only under the terms of the LGPL
|
||||
* License and not to allow others to use your version of this file under
|
||||
* the MPL, indicate your decision by deleting the provisions above and
|
||||
* replace them with the notice and other provisions required by the LGPL.
|
||||
* If you do not delete the provisions above, a recipient may use your version
|
||||
* of this file under either the MPL or the GNU LIBRARY GENERAL PUBLIC LICENSE.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the MPL as stated above or under the terms of the GNU
|
||||
* Library General Public License as published by the Free Software Foundation;
|
||||
* either version 2 of the License, or any later version.
|
||||
*
|
||||
* This library is distributed inp 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 Library general Public License for more
|
||||
* details.
|
||||
*
|
||||
* If you didn't download this code from the following link, you should check if
|
||||
* you aren't using an obsolete version:
|
||||
* http://www.lowagie.com/iText/
|
||||
*/
|
||||
/********************************************************************
|
||||
* *
|
||||
* Title: pfm2afm - Convert Windows .pfm files to .afm files *
|
||||
* *
|
||||
* Author: Ken Borgendale 10/9/91 Version 1.0 *
|
||||
* *
|
||||
* Function: *
|
||||
* Convert a Windows .pfm (Printer Font Metrics) file to a *
|
||||
* .afm (Adobe Font Metrics) file. The purpose of this is *
|
||||
* to allow fonts put outp for Windows to be used with OS/2. *
|
||||
* *
|
||||
* Syntax: *
|
||||
* pfm2afm infile [outfile] -a *
|
||||
* *
|
||||
* Copyright: *
|
||||
* pfm2afm - Copyright (C) IBM Corp., 1991 *
|
||||
* *
|
||||
* This code is released for public use as long as the *
|
||||
* copyright remains intact. This code is provided asis *
|
||||
* without any warrenties, express or implied. *
|
||||
* *
|
||||
* Notes: *
|
||||
* 1. Much of the information inp the original .afm file is *
|
||||
* lost when the .pfm file is created, and thus cannot be *
|
||||
* reconstructed by this utility. This is especially true *
|
||||
* of data for characters not inp the Windows character set. *
|
||||
* *
|
||||
* 2. This module is coded to be compiled by the MSC 6.0. *
|
||||
* For other compilers, be careful of the packing of the *
|
||||
* PFM structure. *
|
||||
* *
|
||||
********************************************************************/
|
||||
|
||||
/********************************************************************
|
||||
* *
|
||||
* Modifications by Rod Smith, 5/22/96 *
|
||||
* *
|
||||
* These changes look for the strings "italic", "bold", "black", *
|
||||
* and "light" inp the font's name and set the weight accordingly *
|
||||
* and adds an ItalicAngle line with a value of "0" or "-12.00". *
|
||||
* This allows OS/2 programs such as DeScribe to handle the bold *
|
||||
* and italic attributes appropriately, which was not the case *
|
||||
* when I used the original version on fonts from the KeyFonts *
|
||||
* Pro 2002 font CD. *
|
||||
* *
|
||||
* I've also increased the size of the buffer used to load the *
|
||||
* .PFM file; the old size was inadequate for most of the fonts *
|
||||
* from the SoftKey collection. *
|
||||
* *
|
||||
* Compiled with Watcom C 10.6 *
|
||||
* *
|
||||
********************************************************************/
|
||||
|
||||
/********************************************************************
|
||||
* *
|
||||
* Further modifications, 4/21/98, by Rod Smith *
|
||||
* *
|
||||
* Minor changes to get the program to compile with gcc under *
|
||||
* Linux (Red Hat 5.0, to be precise). I had to add an itoa *
|
||||
* function from the net (the function was buggy, so I had to fix *
|
||||
* it, too!). I also made the program more friendly towards *
|
||||
* files with mixed-case filenames. *
|
||||
* *
|
||||
********************************************************************/
|
||||
|
||||
/********************************************************************
|
||||
* *
|
||||
* 1/31/2005, by Paulo Soares *
|
||||
* *
|
||||
* This code was integrated into iText. *
|
||||
* Note that the itoa function mentioned in the comment by Rod *
|
||||
* Smith is no longer in the code because Java has native support *
|
||||
* in PrintWriter to convert integers to strings *
|
||||
* *
|
||||
********************************************************************/
|
||||
|
||||
/********************************************************************
|
||||
* *
|
||||
* 7/16/2005, by Bruno Lowagie *
|
||||
* *
|
||||
* I solved an Eclipse Warning. *
|
||||
* *
|
||||
********************************************************************/
|
||||
|
||||
/********************************************************************
|
||||
* *
|
||||
* 9/14/2006, by Xavier Le Vourch *
|
||||
* *
|
||||
* expand import clauses (import java.io.*) *
|
||||
* the removal of an exception in readString was restored on 9/16 *
|
||||
* *
|
||||
********************************************************************/
|
||||
|
||||
namespace iTextSharp.text.pdf {
|
||||
/**
|
||||
* Converts a PFM file into an AFM file.
|
||||
*/
|
||||
public sealed class Pfm2afm {
|
||||
private RandomAccessFileOrArray inp;
|
||||
private StreamWriter outp;
|
||||
private Encoding encoding;
|
||||
|
||||
/** Creates a new instance of Pfm2afm */
|
||||
private Pfm2afm(RandomAccessFileOrArray inp, Stream outp) {
|
||||
this.inp = inp;
|
||||
encoding = Encoding.GetEncoding(1252);
|
||||
this.outp = new StreamWriter(outp, encoding);
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts a PFM file into an AFM file.
|
||||
* @param inp the PFM file
|
||||
* @param outp the AFM file
|
||||
* @throws IOException on error
|
||||
*/
|
||||
public static void Convert(RandomAccessFileOrArray inp, Stream outp) {
|
||||
Pfm2afm p = new Pfm2afm(inp, outp);
|
||||
p.Openpfm();
|
||||
p.Putheader();
|
||||
p.Putchartab();
|
||||
p.Putkerntab();
|
||||
p.Puttrailer();
|
||||
p.outp.Flush();
|
||||
}
|
||||
|
||||
/* public static void Main(String[] args) {
|
||||
try {
|
||||
RandomAccessFileOrArray inp = new RandomAccessFileOrArray(args[0]);
|
||||
Stream outp = new FileOutputStream(args[1]);
|
||||
Convert(inp, outp);
|
||||
inp.Close();
|
||||
outp.Close();
|
||||
}
|
||||
catch (Exception e) {
|
||||
e.PrintStackTrace();
|
||||
}
|
||||
}*/
|
||||
|
||||
private String ReadString(int n) {
|
||||
byte[] b = new byte[n];
|
||||
inp.ReadFully(b);
|
||||
int k;
|
||||
for (k = 0; k < b.Length; ++k) {
|
||||
if (b[k] == 0)
|
||||
break;
|
||||
}
|
||||
return encoding.GetString(b, 0, k);
|
||||
}
|
||||
|
||||
private String ReadString() {
|
||||
StringBuilder buf = new StringBuilder();
|
||||
while (true) {
|
||||
int c = inp.Read();
|
||||
if (c <= 0)
|
||||
break;
|
||||
buf.Append((char)c);
|
||||
}
|
||||
return buf.ToString();
|
||||
}
|
||||
|
||||
private void Outval(int n) {
|
||||
outp.Write(' ');
|
||||
outp.Write(n);
|
||||
}
|
||||
|
||||
/*
|
||||
* Output a character entry
|
||||
*/
|
||||
private void Outchar(int code, int width, String name) {
|
||||
outp.Write("C ");
|
||||
Outval(code);
|
||||
outp.Write(" ; WX ");
|
||||
Outval(width);
|
||||
if (name != null) {
|
||||
outp.Write(" ; N ");
|
||||
outp.Write(name);
|
||||
}
|
||||
outp.Write(" ;\n");
|
||||
}
|
||||
|
||||
private void Openpfm() {
|
||||
inp.Seek(0);
|
||||
vers = inp.ReadShortLE();
|
||||
h_len = inp.ReadIntLE();
|
||||
copyright = ReadString(60);
|
||||
type = inp.ReadShortLE();
|
||||
points = inp.ReadShortLE();
|
||||
verres = inp.ReadShortLE();
|
||||
horres = inp.ReadShortLE();
|
||||
ascent = inp.ReadShortLE();
|
||||
intleading = inp.ReadShortLE();
|
||||
extleading = inp.ReadShortLE();
|
||||
italic = (byte)inp.Read();
|
||||
uline = (byte)inp.Read();
|
||||
overs = (byte)inp.Read();
|
||||
weight = inp.ReadShortLE();
|
||||
charset = (byte)inp.Read();
|
||||
pixwidth = inp.ReadShortLE();
|
||||
pixheight = inp.ReadShortLE();
|
||||
kind = (byte)inp.Read();
|
||||
avgwidth = inp.ReadShortLE();
|
||||
maxwidth = inp.ReadShortLE();
|
||||
firstchar = inp.Read();
|
||||
lastchar = inp.Read();
|
||||
defchar = (byte)inp.Read();
|
||||
brkchar = (byte)inp.Read();
|
||||
widthby = inp.ReadShortLE();
|
||||
device = inp.ReadIntLE();
|
||||
face = inp.ReadIntLE();
|
||||
bits = inp.ReadIntLE();
|
||||
bitoff = inp.ReadIntLE();
|
||||
extlen = inp.ReadShortLE();
|
||||
psext = inp.ReadIntLE();
|
||||
chartab = inp.ReadIntLE();
|
||||
res1 = inp.ReadIntLE();
|
||||
kernpairs = inp.ReadIntLE();
|
||||
res2 = inp.ReadIntLE();
|
||||
fontname = inp.ReadIntLE();
|
||||
if (h_len != inp.Length || extlen != 30 || fontname < 75 || fontname > 512)
|
||||
throw new IOException("Not a valid PFM file.");
|
||||
inp.Seek(psext + 14);
|
||||
capheight = inp.ReadShortLE();
|
||||
xheight = inp.ReadShortLE();
|
||||
ascender = inp.ReadShortLE();
|
||||
descender = inp.ReadShortLE();
|
||||
}
|
||||
|
||||
private void Putheader() {
|
||||
outp.Write("StartFontMetrics 2.0\n");
|
||||
if (copyright.Length > 0)
|
||||
outp.Write("Comment " + copyright + '\n');
|
||||
outp.Write("FontName ");
|
||||
inp.Seek(fontname);
|
||||
String fname = ReadString();
|
||||
outp.Write(fname);
|
||||
outp.Write("\nEncodingScheme ");
|
||||
if (charset != 0)
|
||||
outp.Write("FontSpecific\n");
|
||||
else
|
||||
outp.Write("AdobeStandardEncoding\n");
|
||||
/*
|
||||
* The .pfm is missing full name, so construct from font name by
|
||||
* changing the hyphen to a space. This actually works inp a lot
|
||||
* of cases.
|
||||
*/
|
||||
outp.Write("FullName " + fname.Replace('-', ' '));
|
||||
if (face != 0) {
|
||||
inp.Seek(face);
|
||||
outp.Write("\nFamilyName " + ReadString());
|
||||
}
|
||||
|
||||
outp.Write("\nWeight ");
|
||||
if (weight > 475 || fname.ToLower(System.Globalization.CultureInfo.InvariantCulture).IndexOf("bold") >= 0)
|
||||
outp.Write("Bold");
|
||||
else if ((weight < 325 && weight != 0) || fname.ToLower(System.Globalization.CultureInfo.InvariantCulture).IndexOf("light") >= 0)
|
||||
outp.Write("Light");
|
||||
else if (fname.ToLower(System.Globalization.CultureInfo.InvariantCulture).IndexOf("black") >= 0)
|
||||
outp.Write("Black");
|
||||
else
|
||||
outp.Write("Medium");
|
||||
|
||||
outp.Write("\nItalicAngle ");
|
||||
if (italic != 0 || fname.ToLower(System.Globalization.CultureInfo.InvariantCulture).IndexOf("italic") >= 0)
|
||||
outp.Write("-12.00");
|
||||
/* this is a typical value; something else may work better for a
|
||||
specific font */
|
||||
else
|
||||
outp.Write("0");
|
||||
|
||||
/*
|
||||
* The mono flag inp the pfm actually indicates whether there is a
|
||||
* table of font widths, not if they are all the same.
|
||||
*/
|
||||
outp.Write("\nIsFixedPitch ");
|
||||
if ((kind & 1) == 0 || /* Flag for mono */
|
||||
avgwidth == maxwidth ) { /* Avg width = max width */
|
||||
outp.Write("true");
|
||||
isMono = true;
|
||||
}
|
||||
else {
|
||||
outp.Write("false");
|
||||
isMono = false;
|
||||
}
|
||||
|
||||
/*
|
||||
* The font bounding box is lost, but try to reconstruct it.
|
||||
* Much of this is just guess work. The bounding box is required inp
|
||||
* the .afm, but is not used by the PM font installer.
|
||||
*/
|
||||
outp.Write("\nFontBBox");
|
||||
if (isMono)
|
||||
Outval(-20); /* Just guess at left bounds */
|
||||
else
|
||||
Outval(-100);
|
||||
Outval(-(descender+5)); /* Descender is given as positive value */
|
||||
Outval(maxwidth+10);
|
||||
Outval(ascent+5);
|
||||
|
||||
/*
|
||||
* Give other metrics that were kept
|
||||
*/
|
||||
outp.Write("\nCapHeight");
|
||||
Outval(capheight);
|
||||
outp.Write("\nXHeight");
|
||||
Outval(xheight);
|
||||
outp.Write("\nDescender");
|
||||
Outval(descender);
|
||||
outp.Write("\nAscender");
|
||||
Outval(ascender);
|
||||
outp.Write('\n');
|
||||
}
|
||||
|
||||
private void Putchartab() {
|
||||
int count = lastchar - firstchar + 1;
|
||||
int[] ctabs = new int[count];
|
||||
inp.Seek(chartab);
|
||||
for (int k = 0; k < count; ++k)
|
||||
ctabs[k] = inp.ReadUnsignedShortLE();
|
||||
int[] back = new int[256];
|
||||
if (charset == 0) {
|
||||
for (int i = firstchar; i <= lastchar; ++i) {
|
||||
if (Win2PSStd[i] != 0)
|
||||
back[Win2PSStd[i]] = i;
|
||||
}
|
||||
}
|
||||
/* Put outp the header */
|
||||
outp.Write("StartCharMetrics");
|
||||
Outval(count);
|
||||
outp.Write('\n');
|
||||
|
||||
/* Put outp all encoded chars */
|
||||
if (charset != 0) {
|
||||
/*
|
||||
* If the charset is not the Windows standard, just put outp
|
||||
* unnamed entries.
|
||||
*/
|
||||
for (int i = firstchar; i <= lastchar; i++) {
|
||||
if (ctabs[i - firstchar] != 0) {
|
||||
Outchar(i, ctabs[i - firstchar], null);
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
for (int i = 0; i < 256; i++) {
|
||||
int j = back[i];
|
||||
if (j != 0) {
|
||||
Outchar(i, ctabs[j - firstchar], WinChars[j]);
|
||||
ctabs[j - firstchar] = 0;
|
||||
}
|
||||
}
|
||||
/* Put outp all non-encoded chars */
|
||||
for (int i = firstchar; i <= lastchar; i++) {
|
||||
if (ctabs[i - firstchar] != 0) {
|
||||
Outchar(-1, ctabs[i - firstchar], WinChars[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
/* Put outp the trailer */
|
||||
outp.Write("EndCharMetrics\n");
|
||||
|
||||
}
|
||||
|
||||
private void Putkerntab() {
|
||||
if (kernpairs == 0)
|
||||
return;
|
||||
inp.Seek(kernpairs);
|
||||
int count = inp.ReadUnsignedShortLE();
|
||||
int nzero = 0;
|
||||
int[] kerns = new int[count * 3];
|
||||
for (int k = 0; k < kerns.Length;) {
|
||||
kerns[k++] = inp.Read();
|
||||
kerns[k++] = inp.Read();
|
||||
if ((kerns[k++] = inp.ReadShortLE()) != 0)
|
||||
++nzero;
|
||||
}
|
||||
if (nzero == 0)
|
||||
return;
|
||||
outp.Write("StartKernData\nStartKernPairs");
|
||||
Outval(nzero);
|
||||
outp.Write('\n');
|
||||
for (int k = 0; k < kerns.Length; k += 3) {
|
||||
if (kerns[k + 2] != 0) {
|
||||
outp.Write("KPX ");
|
||||
outp.Write(WinChars[kerns[k]]);
|
||||
outp.Write(' ');
|
||||
outp.Write(WinChars[kerns[k + 1]]);
|
||||
Outval(kerns[k + 2]);
|
||||
outp.Write('\n');
|
||||
}
|
||||
}
|
||||
/* Put outp trailer */
|
||||
outp.Write("EndKernPairs\nEndKernData\n");
|
||||
}
|
||||
|
||||
|
||||
private void Puttrailer() {
|
||||
outp.Write("EndFontMetrics\n");
|
||||
}
|
||||
|
||||
private short vers;
|
||||
private int h_len; /* Total length of .pfm file */
|
||||
private String copyright; /* Copyright string [60]*/
|
||||
private short type;
|
||||
private short points;
|
||||
private short verres;
|
||||
private short horres;
|
||||
private short ascent;
|
||||
private short intleading;
|
||||
private short extleading;
|
||||
private byte italic;
|
||||
private byte uline;
|
||||
private byte overs;
|
||||
private short weight;
|
||||
private byte charset; /* 0=windows, otherwise nomap */
|
||||
private short pixwidth; /* Width for mono fonts */
|
||||
private short pixheight;
|
||||
private byte kind; /* Lower bit off inp mono */
|
||||
private short avgwidth; /* Mono if avg=max width */
|
||||
private short maxwidth; /* Use to compute bounding box */
|
||||
private int firstchar; /* First char inp table */
|
||||
private int lastchar; /* Last char inp table */
|
||||
private byte defchar;
|
||||
private byte brkchar;
|
||||
private short widthby;
|
||||
private int device;
|
||||
private int face; /* Face name */
|
||||
private int bits;
|
||||
private int bitoff;
|
||||
private short extlen;
|
||||
private int psext; /* PostScript extension */
|
||||
private int chartab; /* Character width tables */
|
||||
private int res1;
|
||||
private int kernpairs; /* Kerning pairs */
|
||||
private int res2;
|
||||
private int fontname; /* Font name */
|
||||
|
||||
/*
|
||||
* Some metrics from the PostScript extension
|
||||
*/
|
||||
private short capheight; /* Cap height */
|
||||
private short xheight; /* X height */
|
||||
private short ascender; /* Ascender */
|
||||
private short descender; /* Descender (positive) */
|
||||
|
||||
|
||||
private bool isMono;
|
||||
/*
|
||||
* Translate table from 1004 to psstd. 1004 is an extension of the
|
||||
* Windows translate table used inp PM.
|
||||
*/
|
||||
private int[] Win2PSStd = {
|
||||
0, 0, 0, 0, 197, 198, 199, 0, 202, 0, 205, 206, 207, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
32, 33, 34, 35, 36, 37, 38, 169, 40, 41, 42, 43, 44, 45, 46, 47,
|
||||
48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
|
||||
64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
|
||||
80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
|
||||
193, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
|
||||
112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
|
||||
0, 0, 184, 0, 185, 188, 178, 179, 94, 189, 0, 172, 234, 0, 0, 0,
|
||||
0, 96, 0, 170, 186, 0, 177, 208, 126, 0, 0, 173, 250, 0, 0, 0,
|
||||
0, 161, 162, 163, 168, 165, 0, 167, 200, 0, 227, 171, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 194, 0, 182, 180, 203, 0, 235, 187, 0, 0, 0, 191,
|
||||
0, 0, 0, 0, 0, 0, 225, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 233, 0, 0, 0, 0, 0, 0, 251,
|
||||
0, 0, 0, 0, 0, 0, 241, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 249, 0, 0, 0, 0, 0, 0, 0
|
||||
};
|
||||
|
||||
/*
|
||||
* Character class. This is a minor attempt to overcome the problem that
|
||||
* inp the pfm file, all unused characters are given the width of space.
|
||||
*/
|
||||
private int[] WinClass = {
|
||||
0, 0, 0, 0, 2, 2, 2, 0, 2, 0, 2, 2, 2, 0, 0, 0, /* 00 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 10 */
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 20 */
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 30 */
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 40 */
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 50 */
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 60 */
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, /* 70 */
|
||||
0, 0, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, /* 80 */
|
||||
0, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, /* 90 */
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* a0 */
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* b0 */
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* c0 */
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* d0 */
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* e0 */
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 /* f0 */
|
||||
};
|
||||
|
||||
/*
|
||||
* Windows chararacter names. Give a name to the usused locations
|
||||
* for when the all flag is specified.
|
||||
*/
|
||||
private String[] WinChars = {
|
||||
"W00", /* 00 */
|
||||
"W01", /* 01 */
|
||||
"W02", /* 02 */
|
||||
"W03", /* 03 */
|
||||
"macron", /* 04 */
|
||||
"breve", /* 05 */
|
||||
"dotaccent", /* 06 */
|
||||
"W07", /* 07 */
|
||||
"ring", /* 08 */
|
||||
"W09", /* 09 */
|
||||
"W0a", /* 0a */
|
||||
"W0b", /* 0b */
|
||||
"W0c", /* 0c */
|
||||
"W0d", /* 0d */
|
||||
"W0e", /* 0e */
|
||||
"W0f", /* 0f */
|
||||
"hungarumlaut", /* 10 */
|
||||
"ogonek", /* 11 */
|
||||
"caron", /* 12 */
|
||||
"W13", /* 13 */
|
||||
"W14", /* 14 */
|
||||
"W15", /* 15 */
|
||||
"W16", /* 16 */
|
||||
"W17", /* 17 */
|
||||
"W18", /* 18 */
|
||||
"W19", /* 19 */
|
||||
"W1a", /* 1a */
|
||||
"W1b", /* 1b */
|
||||
"W1c", /* 1c */
|
||||
"W1d", /* 1d */
|
||||
"W1e", /* 1e */
|
||||
"W1f", /* 1f */
|
||||
"space", /* 20 */
|
||||
"exclam", /* 21 */
|
||||
"quotedbl", /* 22 */
|
||||
"numbersign", /* 23 */
|
||||
"dollar", /* 24 */
|
||||
"percent", /* 25 */
|
||||
"ampersand", /* 26 */
|
||||
"quotesingle", /* 27 */
|
||||
"parenleft", /* 28 */
|
||||
"parenright", /* 29 */
|
||||
"asterisk", /* 2A */
|
||||
"plus", /* 2B */
|
||||
"comma", /* 2C */
|
||||
"hyphen", /* 2D */
|
||||
"period", /* 2E */
|
||||
"slash", /* 2F */
|
||||
"zero", /* 30 */
|
||||
"one", /* 31 */
|
||||
"two", /* 32 */
|
||||
"three", /* 33 */
|
||||
"four", /* 34 */
|
||||
"five", /* 35 */
|
||||
"six", /* 36 */
|
||||
"seven", /* 37 */
|
||||
"eight", /* 38 */
|
||||
"nine", /* 39 */
|
||||
"colon", /* 3A */
|
||||
"semicolon", /* 3B */
|
||||
"less", /* 3C */
|
||||
"equal", /* 3D */
|
||||
"greater", /* 3E */
|
||||
"question", /* 3F */
|
||||
"at", /* 40 */
|
||||
"A", /* 41 */
|
||||
"B", /* 42 */
|
||||
"C", /* 43 */
|
||||
"D", /* 44 */
|
||||
"E", /* 45 */
|
||||
"F", /* 46 */
|
||||
"G", /* 47 */
|
||||
"H", /* 48 */
|
||||
"I", /* 49 */
|
||||
"J", /* 4A */
|
||||
"K", /* 4B */
|
||||
"L", /* 4C */
|
||||
"M", /* 4D */
|
||||
"N", /* 4E */
|
||||
"O", /* 4F */
|
||||
"P", /* 50 */
|
||||
"Q", /* 51 */
|
||||
"R", /* 52 */
|
||||
"S", /* 53 */
|
||||
"T", /* 54 */
|
||||
"U", /* 55 */
|
||||
"V", /* 56 */
|
||||
"W", /* 57 */
|
||||
"X", /* 58 */
|
||||
"Y", /* 59 */
|
||||
"Z", /* 5A */
|
||||
"bracketleft", /* 5B */
|
||||
"backslash", /* 5C */
|
||||
"bracketright", /* 5D */
|
||||
"asciicircum", /* 5E */
|
||||
"underscore", /* 5F */
|
||||
"grave", /* 60 */
|
||||
"a", /* 61 */
|
||||
"b", /* 62 */
|
||||
"c", /* 63 */
|
||||
"d", /* 64 */
|
||||
"e", /* 65 */
|
||||
"f", /* 66 */
|
||||
"g", /* 67 */
|
||||
"h", /* 68 */
|
||||
"i", /* 69 */
|
||||
"j", /* 6A */
|
||||
"k", /* 6B */
|
||||
"l", /* 6C */
|
||||
"m", /* 6D */
|
||||
"n", /* 6E */
|
||||
"o", /* 6F */
|
||||
"p", /* 70 */
|
||||
"q", /* 71 */
|
||||
"r", /* 72 */
|
||||
"s", /* 73 */
|
||||
"t", /* 74 */
|
||||
"u", /* 75 */
|
||||
"v", /* 76 */
|
||||
"w", /* 77 */
|
||||
"x", /* 78 */
|
||||
"y", /* 79 */
|
||||
"z", /* 7A */
|
||||
"braceleft", /* 7B */
|
||||
"bar", /* 7C */
|
||||
"braceright", /* 7D */
|
||||
"asciitilde", /* 7E */
|
||||
"W7f", /* 7F */
|
||||
"W80", /* 80 */
|
||||
"W81", /* 81 */
|
||||
"quotesinglbase", /* 82 */
|
||||
"W83", /* 83 */
|
||||
"quotedblbase", /* 84 */
|
||||
"ellipsis", /* 85 */
|
||||
"dagger", /* 86 */
|
||||
"daggerdbl", /* 87 */
|
||||
"asciicircum", /* 88 */
|
||||
"perthousand", /* 89 */
|
||||
"Scaron", /* 8A */
|
||||
"guilsinglleft", /* 8B */
|
||||
"OE", /* 8C */
|
||||
"W8d", /* 8D */
|
||||
"W8e", /* 8E */
|
||||
"W8f", /* 8F */
|
||||
"W90", /* 90 */
|
||||
"quoteleft", /* 91 */
|
||||
"quoteright", /* 92 */
|
||||
"quotedblleft", /* 93 */
|
||||
"quotedblright", /* 94 */
|
||||
"bullet1", /* 95 */
|
||||
"endash", /* 96 */
|
||||
"emdash", /* 97 */
|
||||
"asciitilde", /* 98 */
|
||||
"trademark", /* 99 */
|
||||
"scaron", /* 9A */
|
||||
"guilsinglright", /* 9B */
|
||||
"oe", /* 9C */
|
||||
"W9d", /* 9D */
|
||||
"W9e", /* 9E */
|
||||
"Ydieresis", /* 9F */
|
||||
"reqspace", /* A0 */
|
||||
"exclamdown", /* A1 */
|
||||
"cent", /* A2 */
|
||||
"sterling", /* A3 */
|
||||
"currency", /* A4 */
|
||||
"yen", /* A5 */
|
||||
"brokenbar", /* A6 */
|
||||
"section", /* A7 */
|
||||
"dieresis", /* A8 */
|
||||
"copyright", /* A9 */
|
||||
"ordfeminine", /* AA */
|
||||
"guillemotleft", /* AB */
|
||||
"logicalnot", /* AC */
|
||||
"syllable", /* AD */
|
||||
"registered", /* AE */
|
||||
"overbar", /* AF */
|
||||
"degree", /* B0 */
|
||||
"plusminus", /* B1 */
|
||||
"twosuperior", /* B2 */
|
||||
"threesuperior", /* B3 */
|
||||
"acute", /* B4 */
|
||||
"mu", /* B5 */
|
||||
"paragraph", /* B6 */
|
||||
"periodcentered", /* B7 */
|
||||
"cedilla", /* B8 */
|
||||
"onesuperior", /* B9 */
|
||||
"ordmasculine", /* BA */
|
||||
"guillemotright", /* BB */
|
||||
"onequarter", /* BC */
|
||||
"onehalf", /* BD */
|
||||
"threequarters", /* BE */
|
||||
"questiondown", /* BF */
|
||||
"Agrave", /* C0 */
|
||||
"Aacute", /* C1 */
|
||||
"Acircumflex", /* C2 */
|
||||
"Atilde", /* C3 */
|
||||
"Adieresis", /* C4 */
|
||||
"Aring", /* C5 */
|
||||
"AE", /* C6 */
|
||||
"Ccedilla", /* C7 */
|
||||
"Egrave", /* C8 */
|
||||
"Eacute", /* C9 */
|
||||
"Ecircumflex", /* CA */
|
||||
"Edieresis", /* CB */
|
||||
"Igrave", /* CC */
|
||||
"Iacute", /* CD */
|
||||
"Icircumflex", /* CE */
|
||||
"Idieresis", /* CF */
|
||||
"Eth", /* D0 */
|
||||
"Ntilde", /* D1 */
|
||||
"Ograve", /* D2 */
|
||||
"Oacute", /* D3 */
|
||||
"Ocircumflex", /* D4 */
|
||||
"Otilde", /* D5 */
|
||||
"Odieresis", /* D6 */
|
||||
"multiply", /* D7 */
|
||||
"Oslash", /* D8 */
|
||||
"Ugrave", /* D9 */
|
||||
"Uacute", /* DA */
|
||||
"Ucircumflex", /* DB */
|
||||
"Udieresis", /* DC */
|
||||
"Yacute", /* DD */
|
||||
"Thorn", /* DE */
|
||||
"germandbls", /* DF */
|
||||
"agrave", /* E0 */
|
||||
"aacute", /* E1 */
|
||||
"acircumflex", /* E2 */
|
||||
"atilde", /* E3 */
|
||||
"adieresis", /* E4 */
|
||||
"aring", /* E5 */
|
||||
"ae", /* E6 */
|
||||
"ccedilla", /* E7 */
|
||||
"egrave", /* E8 */
|
||||
"eacute", /* E9 */
|
||||
"ecircumflex", /* EA */
|
||||
"edieresis", /* EB */
|
||||
"igrave", /* EC */
|
||||
"iacute", /* ED */
|
||||
"icircumflex", /* EE */
|
||||
"idieresis", /* EF */
|
||||
"eth", /* F0 */
|
||||
"ntilde", /* F1 */
|
||||
"ograve", /* F2 */
|
||||
"oacute", /* F3 */
|
||||
"ocircumflex", /* F4 */
|
||||
"otilde", /* F5 */
|
||||
"odieresis", /* F6 */
|
||||
"divide", /* F7 */
|
||||
"oslash", /* F8 */
|
||||
"ugrave", /* F9 */
|
||||
"uacute", /* FA */
|
||||
"ucircumflex", /* FB */
|
||||
"udieresis", /* FC */
|
||||
"yacute", /* FD */
|
||||
"thorn", /* FE */
|
||||
"ydieresis" /* FF */
|
||||
};
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user