public override ITypefaceFont ReadTypefaceAfterVersion(BigEndianReader reader, IFontInfo forReference, string source) { long startOffset = reader.BaseStream.Position - 4; TrueTypeHeader header; if (TrueTypeHeader.TryReadHeaderAfterVersion(reader, this, false, out header) == false) { throw new TypefaceReadException("Could not read the TrueType header for " + forReference.ToString() + " font"); } List <TrueTypeTableEntry> dirs; try { dirs = new List <TrueTypeTableEntry>(); for (int i = 0; i < header.NumberOfTables; i++) { TrueTypeTableEntry dir = new TrueTypeTableEntry(); dir.Read(reader); dirs.Add(dir); } dirs.Sort(delegate(TrueTypeTableEntry one, TrueTypeTableEntry two) { return(one.Offset.CompareTo(two.Offset)); }); return(ReadFile(header, dirs, reader, startOffset, forReference)); } catch (Exception ex) { throw new TypefaceReadException("Could not read the TTF File", ex); } }
public override ITypefaceInfo ReadTypefaceInfoAfterVersion(BigEndianReader reader, string source) { ushort numtables = reader.ReadUInt16(); ushort search = reader.ReadUInt16(); ushort entry = reader.ReadUInt16(); ushort range = reader.ReadUInt16(); TrueTypeTableEntryList list = new TrueTypeTableEntryList(); bool hasOs2 = false; bool hasFHead = false; bool hasName = false; for (int i = 0; i < numtables; i++) { TrueTypeTableEntry dir = new TrueTypeTableEntry(); dir.Read(reader); list.Add(dir); if (dir.Tag == TrueTypeTableNames.WindowsMetrics) { hasOs2 = true; } else if (dir.Tag == TrueTypeTableNames.FontHeader) { hasFHead = true; } else if (dir.Tag == TrueTypeTableNames.NamingTable) { hasName = true; } } if (!(hasOs2 || hasName) || !hasFHead) { return(new Utility.UnknownTypefaceInfo(source, "Not all the required tables (head with OS/2 or name) were found in the font file")); } else { return(ReadInfoFromTables(list, reader, source, hasOs2)); } }
protected void Read(BigEndianReader reader) { TrueTypeHeader header; if (TrueTypeHeader.TryReadHeader(reader, out header) == false) { throw new NotSupportedException("The current stream is not a supported OpenType or TrueType font file"); } List <TrueTypeTableEntry> dirs; try { dirs = new List <TrueTypeTableEntry>(); for (int i = 0; i < header.NumberOfTables; i++) { TrueTypeTableEntry dir = new TrueTypeTableEntry(); dir.Read(reader); dirs.Add(dir); } dirs.Sort(delegate(TrueTypeTableEntry one, TrueTypeTableEntry two) { return(one.Offset.CompareTo(two.Offset)); }); this._dirs = new TrueTypeTableEntryList(dirs); this._head = header; TrueTypeTableFactory factory = this.GetFactory(header); foreach (TrueTypeTableEntry dir in dirs) { TrueTypeFontTable tbl = factory.ReadTable(dir, this, reader); if (tbl != null) { dir.SetTable(tbl); } } } catch (Exception ex) { throw new TypefaceReadException("Could not read the TTF File", ex); } }