private void ReadScriptRecord(TagAndLocation tagLoc) { openTypeReader.rf.Seek(tagLoc.location); int locationDefaultLanguage = openTypeReader.rf.ReadUnsignedShort(); if (locationDefaultLanguage > 0) { locationDefaultLanguage += tagLoc.location; } TagAndLocation[] tagsLocs = openTypeReader.ReadTagAndLocations(tagLoc.location); ScriptRecord srec = new ScriptRecord(); srec.tag = tagLoc.tag; srec.languages = new LanguageRecord[tagsLocs.Length]; for (int k = 0; k < tagsLocs.Length; ++k) { srec.languages[k] = ReadLanguageRecord(tagsLocs[k]); } if (locationDefaultLanguage > 0) { TagAndLocation t = new TagAndLocation(); t.tag = ""; t.location = locationDefaultLanguage; srec.defaultLanguage = ReadLanguageRecord(t); } records.Add(srec); }
private LanguageRecord ReadLanguageRecord(TagAndLocation tagLoc) { LanguageRecord rec = new LanguageRecord(); //skip lookup order openTypeReader.rf.Seek(tagLoc.location + 2); rec.featureRequired = openTypeReader.rf.ReadUnsignedShort(); int count = openTypeReader.rf.ReadUnsignedShort(); rec.features = openTypeReader.ReadUShortArray(count); rec.tag = tagLoc.tag; return(rec); }
/// <exception cref="System.IO.IOException"/> protected internal virtual TagAndLocation[] ReadTagAndLocations(int baseLocation) { int count = rf.ReadUnsignedShort(); TagAndLocation[] tagslLocs = new TagAndLocation[count]; for (int k = 0; k < count; ++k) { TagAndLocation tl = new TagAndLocation(); tl.tag = rf.ReadString(4, "utf-8"); tl.location = rf.ReadUnsignedShort() + baseLocation; tagslLocs[k] = tl; } return(tagslLocs); }