public override void Serialize(BinaryWriter writer, long startOffset, SerializationInfo additionalInfo) { writer.BaseStream.Position = startOffset; DataTypeConverter.WriteUShort(writer, Format); var lengthOffset = writer.BaseStream.Position; writer.BaseStream.Position += DataTypeLength.UShort; DataTypeConverter.WriteUShort(writer, Language); for (uint i = 0; i < 256; i++) { if (CharGlyphIdMap.ContainsKey(i)) { writer.Write((byte)CharGlyphIdMap[i]); } else { writer.Write((byte)0); } } // Set length var length = writer.BaseStream.Position - startOffset; writer.BaseStream.Position = lengthOffset; DataTypeConverter.WriteUShort(writer, (ushort)length); // Recover writer position writer.BaseStream.Position = startOffset + length; }
public override void Serialize(BinaryWriter writer, long startOffset, SerializationInfo additionalInfo) { writer.BaseStream.Position = startOffset; DataTypeConverter.WriteUShort(writer, Format); var lengthOffset = writer.BaseStream.Position; writer.BaseStream.Position += DataTypeLength.UShort; DataTypeConverter.WriteUShort(writer, Language); var firstCode = CharGlyphIdMap.Keys.Min(); var lastCode = CharGlyphIdMap.Keys.Max(); DataTypeConverter.WriteUShort(writer, (ushort)firstCode); DataTypeConverter.WriteUShort(writer, (ushort)(lastCode - firstCode + 1)); for (var i = firstCode; i <= lastCode; i++) { if (CharGlyphIdMap.ContainsKey(i)) { DataTypeConverter.WriteUShort(writer, (ushort)CharGlyphIdMap[i]); } else { DataTypeConverter.WriteUShort(writer, 0); } } // Set length var length = writer.BaseStream.Position - startOffset; writer.BaseStream.Position = lengthOffset; DataTypeConverter.WriteUShort(writer, (ushort)length); // Recover writer position writer.BaseStream.Position = startOffset + length; }