protected void CreateEncoding()
{
if (encoding.StartsWith("#")) {
specialMap = new IntHashtable();
StringTokenizer tok = new StringTokenizer(encoding.Substring(1), " ,\t\n\r\f");
if (tok.NextToken().Equals("full")) {
while (tok.HasMoreTokens()) {
String order = tok.NextToken();
String name = tok.NextToken();
char uni = (char)int.Parse(tok.NextToken(), NumberStyles.HexNumber);
int orderK;
if (order.StartsWith("'"))
orderK = (int)order[1];
else
orderK = int.Parse(order);
orderK %= 256;
specialMap[(int)uni] = orderK;
differences[orderK] = name;
unicodeDifferences[orderK] = uni;
widths[orderK] = GetRawWidth((int)uni, name);
charBBoxes[orderK] = GetRawCharBBox((int)uni, name);
}
}
else {
int k = 0;
if (tok.HasMoreTokens())
k = int.Parse(tok.NextToken());
while (tok.HasMoreTokens() && k < 256) {
String hex = tok.NextToken();
int uni = int.Parse(hex, NumberStyles.HexNumber) % 0x10000;
String name = GlyphList.UnicodeToName(uni);
if (name != null) {
specialMap[uni] = k;
differences[k] = name;
unicodeDifferences[k] = (char)uni;
widths[k] = GetRawWidth(uni, name);
charBBoxes[k] = GetRawCharBBox(uni, name);
++k;
}
}
}
for (int k = 0; k < 256; ++k) {
if (differences[k] == null) {
differences[k] = notdef;
}
}
}
else if (fontSpecific) {
for (int k = 0; k < 256; ++k) {
widths[k] = GetRawWidth(k, null);
charBBoxes[k] = GetRawCharBBox(k, null);
}
}
else {
string s;
string name;
char c;
byte[] b = new byte[1];
for (int k = 0; k < 256; ++k) {
b[0] = (byte)k;
s = PdfEncodings.ConvertToString(b, encoding);
if (s.Length > 0) {
c = s[0];
}
else {
c = '?';
}
name = GlyphList.UnicodeToName((int)c);
if (name == null)
name = notdef;
differences[k] = name;
this.UnicodeDifferences[k] = c;
widths[k] = GetRawWidth((int)c, name);
charBBoxes[k] = GetRawCharBBox((int)c, name);
}
}
}