public Pgf Load(Stream fileStream)
{
Header = fileStream.ReadStruct <HeaderStruct>();
if (Header.Revision >= 3)
{
HeaderExtraRevision3 = fileStream.ReadStruct <HeaderRevision3Struct>();
}
fileStream.ReadStructVector(out DimensionTable, Header.TableDimLength);
fileStream.ReadStructVector(out XAdjustTable, Header.TableXAdjustLength);
fileStream.ReadStructVector(out YAdjustTable, Header.TableYAdjustLength);
fileStream.ReadStructVector(out AdvanceTable, Header.TableAdvanceLength);
PackedShadowCharMap =
fileStream.ReadBytes(BitsToBytesHighAligned(Header.TableShadowMapLength * Header.TableShadowMapBpe));
if (Header.Revision == 3)
{
fileStream.ReadStructVector(out CharmapCompressionTable1, HeaderExtraRevision3.TableCompCharMapLength1);
fileStream.ReadStructVector(out CharmapCompressionTable2, HeaderExtraRevision3.TableCompCharMapLength2);
}
PackedCharMap =
fileStream.ReadBytes(BitsToBytesHighAligned(Header.TableCharMapLength * Header.TableCharMapBpe));
PackedCharPointerTable =
fileStream.ReadBytes(
BitsToBytesHighAligned(Header.TableCharPointerLength * Header.TableCharPointerBpe));
/*
* int BytesLeft = (int)(FileStream.Length - FileStream.Position);
* charData = new byte[BytesLeft];
* FileStream.Read(charData, 0, BytesLeft);
*/
CharData = fileStream.ReadBytes((int)(fileStream.Length - fileStream.Position));
var numberOfCharacters = Header.TableCharPointerLength;
CharMap = new int[Header.FirstGlyph + Header.LastGlyph + 1];
CharPointer = new int[numberOfCharacters];
Glyphs = new IGlyph[numberOfCharacters];
ReverseCharMap = new Dictionary <int, int>();
ShadowCharMap = new Dictionary <int, int>();
ReverseShadowCharMap = new Dictionary <int, int>();
foreach (var pair in BitReader.FixedBitReader(PackedShadowCharMap, Header.TableShadowMapBpe))
{
var unicodeIndex = (int)pair.Key + Header.FirstGlyph;
var glyphIndex = (int)pair.Value;
ShadowCharMap[unicodeIndex] = glyphIndex;
ReverseShadowCharMap[glyphIndex] = unicodeIndex;
}
foreach (var pair in BitReader.FixedBitReader(PackedCharMap, Header.TableCharMapBpe))
{
var unicodeIndex = (int)pair.Key + Header.FirstGlyph;
var glyphIndex = (int)pair.Value;
CharMap[unicodeIndex] = glyphIndex;
ReverseCharMap[glyphIndex] = unicodeIndex;
}
foreach (var pair in BitReader.FixedBitReader(PackedCharPointerTable, Header.TableCharPointerBpe))
{
CharPointer[pair.Key] = (int)pair.Value;
}
/*
* for (int n = 0; n < NumberOfCharacters; n++)
* {
* Glyphs[n] = new Glyph().Read(this, n);
* }
*/
Console.WriteLine(Header.FontName);
/*
* Console.WriteLine(this.header.fontName);
* for (int n = 0; n < 300; n++)
* {
* Console.WriteLine(GetGlyphId((char)n));
* }
*/
return(this);
}