private static void ReadCjkRadicalInfo(BinaryReader reader, out CjkRadicalData value) { char tr; char tc; tr = (char)reader.ReadUInt16(); tc = (char)reader.ReadUInt16(); value = (tr & 0x8000) == 0 ? new CjkRadicalData(tr, tc) : new CjkRadicalData((char)(tr & 0x7FFF), tc, (char)reader.ReadUInt16(), (char)reader.ReadUInt16()); }
internal static void ReadFromStream(Stream stream, out Version unicodeVersion, out UnicodeCharacterData[] unicodeCharacterData, out UnihanCharacterData[] unihanCharacterData, out CjkRadicalData[] radicals, out UnicodeBlock[] blocks, out int maxContiguousIndex) { using (var reader = new BinaryReader(stream, Encoding.UTF8)) { int i; if (reader.ReadByte() != 'U' | reader.ReadByte() != 'C' | reader.ReadByte() != 'D') { throw new InvalidDataException(); } byte formatVersion = reader.ReadByte(); if (formatVersion != 2) { throw new InvalidDataException(); } var fileUnicodeVersion = new Version(reader.ReadUInt16(), reader.ReadByte(), reader.ReadByte()); var unicodeCharacterDataEntries = new UnicodeCharacterData[ReadCodePoint(reader)]; // Allocate one extra entry to act as a dummy entry. byte[] nameBuffer = new byte[128]; int mci = 0; for (i = 0; i < unicodeCharacterDataEntries.Length; ++i) { ReadUnicodeCharacterDataEntry(reader, nameBuffer, out unicodeCharacterDataEntries[i]); if (unicodeCharacterDataEntries[i].CodePointRange.Contains(i)) { mci = i; } else { ++i; break; } } maxContiguousIndex = mci; for (; i < unicodeCharacterDataEntries.Length; ++i) { ReadUnicodeCharacterDataEntry(reader, nameBuffer, out unicodeCharacterDataEntries[i]); } var blockEntries = new UnicodeBlock[reader.ReadUInt16()]; for (i = 0; i < blockEntries.Length; ++i) { ReadBlockEntry(reader, out blockEntries[i]); } var cjkRadicalEntries = new CjkRadicalData[reader.ReadByte()]; for (i = 0; i < cjkRadicalEntries.Length; ++i) { ReadCjkRadicalInfo(reader, out cjkRadicalEntries[i]); } var unihanCharacterDataEntries = new UnihanCharacterData[ReadCodePoint(reader)]; for (i = 0; i < unihanCharacterDataEntries.Length; ++i) { ReadUnihanCharacterDataEntry(reader, out unihanCharacterDataEntries[i]); } unicodeVersion = fileUnicodeVersion; unicodeCharacterData = unicodeCharacterDataEntries; unihanCharacterData = unihanCharacterDataEntries; radicals = cjkRadicalEntries; blocks = blockEntries; } }
public static UnicodeData ReadFromStream(Stream stream) { using (var reader = new BinaryReader(stream, Encoding.UTF8)) { int i; if (reader.ReadByte() != 'U' | reader.ReadByte() != 'C' | reader.ReadByte() != 'D') { throw new InvalidDataException(); } byte formatVersion = reader.ReadByte(); if (formatVersion != 2) { throw new InvalidDataException(); } var fileUnicodeVersion = new Version(reader.ReadUInt16(), reader.ReadByte(), reader.ReadByte()); var unicodeCharacterDataEntries = new UnicodeCharacterData[ReadCodePoint(reader)]; // Allocate one extra entry to act as a dummy entry. byte[] nameBuffer = new byte[128]; int maxContiguousIndex = 0; for (i = 0; i < unicodeCharacterDataEntries.Length; ++i) { ReadUnicodeCharacterDataEntry(reader, nameBuffer, out unicodeCharacterDataEntries[i]); if (unicodeCharacterDataEntries[i].CodePointRange.Contains(i)) { maxContiguousIndex = i; } else { ++i; break; } } for (; i < unicodeCharacterDataEntries.Length; ++i) { ReadUnicodeCharacterDataEntry(reader, nameBuffer, out unicodeCharacterDataEntries[i]); } var blockEntries = new UnicodeBlock[reader.ReadUInt16()]; for (i = 0; i < blockEntries.Length; ++i) { ReadBlockEntry(reader, out blockEntries[i]); } var cjkRadicalEntries = new CjkRadicalData[reader.ReadByte()]; for (i = 0; i < cjkRadicalEntries.Length; ++i) { ReadCjkRadicalInfo(reader, out cjkRadicalEntries[i]); } var unihanCharacterDataEntries = new UnihanCharacterData[ReadCodePoint(reader)]; for (i = 0; i < unihanCharacterDataEntries.Length; ++i) { ReadUnihanCharacterDataEntry(reader, out unihanCharacterDataEntries[i]); } return(new UnicodeData ( fileUnicodeVersion, unicodeCharacterDataEntries, unihanCharacterDataEntries, blockEntries, cjkRadicalEntries, maxContiguousIndex )); } }
internal CjkRadicalInfo(byte radicalIndex, CjkRadicalData radicalData) { this.radicalIndex = radicalIndex; this.radicalData = radicalData; }
internal CjkRadicalInfo(byte radicalIndex, CjkRadicalData radicalData) { RadicalIndex = radicalIndex; _radicalData = radicalData; }