protected void ReadPrivate(BinaryReaderFont reader) { long start = reader.Position; //Console.WriteLine("private dict: {0}", topDict.Private); privateDict = CFFPrivateDict.Read(reader, (int)topDict.Private.values[0]); //Console.WriteLine("private dict: {0}", privateDict); //reader.Position = position + (int)topDict.Private.values[1]; //CFFIndex index = CFFIndex.Read(reader); //int[] offset = index.offset; //Console.WriteLine("local subr index: {0}", index); if (privateDict.Subrs > 0) { reader.Position = start + (int)privateDict.Subrs; CFFIndex index = CFFIndex.Read(reader); int[] offset = index.ReadAllOffsets(reader); //Console.WriteLine("local subr index: {0}", index); localSubr = new byte[index.count][]; for (int i = 0; i < offset.Length - 1; i++) { int length = offset[i + 1] - offset[i]; localSubr[i] = reader.ReadBytes(length); } } charString.localSubr = localSubr; }
protected void ReadTopDict(BinaryReaderFont reader) { CFFIndex index = CFFIndex.Read(reader); //Console.WriteLine("topDict: {0}", index); int[] offset = index.ReadAllOffsets(reader); int length = offset[1] - offset[0]; topDict = CFFTopDict.Read(reader, length); }
protected void ReadName(BinaryReaderFont reader) { CFFIndex index = CFFIndex.Read(reader); int[] offset = index.ReadAllOffsets(reader); names = new string[index.count]; int length = offset.Length - 1; for (int i = 0; i < length; i++) { int byteSize = offset[i + 1] - offset[i]; names[i] = reader.ReadString(byteSize); } }
protected void ReadGlobalSubr(BinaryReaderFont reader) { CFFIndex index = CFFIndex.Read(reader); int[] offset = index.ReadAllOffsets(reader); //Console.WriteLine("global subr index: {0}", index); globalSubr = new byte[index.count][]; int length = offset.Length - 1; for (int i = 0; i < length; i++) { int byteSize = offset[i + 1] - offset[i]; globalSubr[i] = reader.ReadBytes(byteSize); } charString.globalSubr = globalSubr; }
protected void ReadString(BinaryReaderFont reader) { CFFIndex index = CFFIndex.Read(reader); int[] offset = index.ReadAllOffsets(reader); //Console.WriteLine("string index: {0}", index); strings = new string[index.count]; int length = offset.Length - 1; for (int i = 0; i < length; i++) { int byteSize = offset[i + 1] - offset[i]; //value.strings[i] = value.ConvertString(reader.ReadBytes(length)); strings[i] = reader.ReadString(byteSize); } }