[Test] public void MultiItemLookup() { // A lookup where there are multiple pairs sharing the same items FontKerningPair[] pairs = new FontKerningPair[] { new FontKerningPair('a', 'a', 1.0f), new FontKerningPair('a', 'b', 2.0f), new FontKerningPair('a', 'c', 3.0f), new FontKerningPair('b', 'a', 4.0f), new FontKerningPair('b', 'b', 5.0f), new FontKerningPair('b', 'c', 6.0f), new FontKerningPair('c', 'a', 7.0f), new FontKerningPair('c', 'b', 8.0f), new FontKerningPair('c', 'c', 9.0f), }; // Shuffle the pairs array, as they are no expected to be in order Random rnd = new Random(1); rnd.Shuffle(pairs); FontKerningLookup lookup = new FontKerningLookup(pairs); Assert.AreEqual(0.0f, lookup.GetAdvanceOffset('x', 'y')); Assert.AreEqual(1.0f, lookup.GetAdvanceOffset('a', 'a')); Assert.AreEqual(2.0f, lookup.GetAdvanceOffset('a', 'b')); Assert.AreEqual(3.0f, lookup.GetAdvanceOffset('a', 'c')); Assert.AreEqual(4.0f, lookup.GetAdvanceOffset('b', 'a')); Assert.AreEqual(5.0f, lookup.GetAdvanceOffset('b', 'b')); Assert.AreEqual(6.0f, lookup.GetAdvanceOffset('b', 'c')); Assert.AreEqual(7.0f, lookup.GetAdvanceOffset('c', 'a')); Assert.AreEqual(8.0f, lookup.GetAdvanceOffset('c', 'b')); Assert.AreEqual(9.0f, lookup.GetAdvanceOffset('c', 'c')); }
static void Vf3ToXml(Options options) { Dictionary <char, char> charMap = null; using (Stream cStream = File.OpenRead(options.Charlist)) { charMap = LanguageUtility.GetDecodeCharMapFromStream(cStream); } using (Stream s = File.OpenRead(options.Source)) { FontFile font = new FontFile(s); XmlWriterSettings settings = new XmlWriterSettings(); settings.Indent = true; settings.IndentChars = "\t"; settings.NewLineChars = "\r\n"; using (XmlWriter xml = XmlWriter.Create(options.Output, settings)) { xml.WriteStartDocument(); xml.WriteStartElement("font"); xml.WriteAttributeString("id", font.Header.ID.ToString()); xml.WriteAttributeString("version", font.Header.Version.ToString()); xml.WriteAttributeString("first_ascii", font.Header.FirstAscii.ToString()); xml.WriteAttributeString("width", font.Header.Width.ToString()); xml.WriteAttributeString("height", font.Header.Height.ToString()); xml.WriteAttributeString("render_height", font.Header.RenderHeight.ToString()); xml.WriteAttributeString("baseline_offset", font.Header.BaselineOffset.ToString()); xml.WriteAttributeString("character_spacing", font.Header.CharacterSpacing.ToString()); xml.WriteAttributeString("vertical_offset", font.Header.VerticalOffset.ToString()); xml.WriteAttributeString("peg_name", font.Header.PegName); xml.WriteAttributeString("bitmap_name", font.Header.BitmapName); xml.WriteStartElement("characters"); for (int i = 0; i < font.Characters.Count; i++) { FontCharacter c = font.Characters[i]; int u = font.U[i]; int v = font.V[i]; xml.WriteStartElement("character"); int charValue = font.Header.FirstAscii + i; char actualChar = DecodeChar(font.Header, charMap, i); xml.WriteAttributeString("spacing", c.Spacing.ToString()); xml.WriteAttributeString("byte_width", c.ByteWidth.ToString()); xml.WriteAttributeString("offset", c.Offset.ToString()); xml.WriteAttributeString("kerning_entry", c.KerningEntry.ToString()); xml.WriteAttributeString("user_data", c.UserData.ToString()); xml.WriteAttributeString("u", u.ToString()); xml.WriteAttributeString("v", v.ToString()); xml.WriteAttributeString("char_value", charValue.ToString()); xml.WriteAttributeString("actual_char", actualChar.ToString()); xml.WriteEndElement(); // character } xml.WriteEndElement(); // characters xml.WriteStartElement("kerning_pairs"); for (int i = 0; i < font.KerningPairs.Count; i++) { FontKerningPair pair = font.KerningPairs[i]; xml.WriteStartElement("kerning_pair"); char char1 = DecodeChar(font.Header, charMap, pair.Char1); char char2 = DecodeChar(font.Header, charMap, pair.Char2); xml.WriteAttributeString("char1", char1.ToString()); xml.WriteAttributeString("char2", char2.ToString()); xml.WriteAttributeString("offset", pair.Offset.ToString()); xml.WriteAttributeString("padding", pair.Padding.ToString()); xml.WriteEndElement(); // kerning_pair } xml.WriteEndElement(); // kerning_pairs xml.WriteEndElement(); // font xml.WriteEndDocument(); } } }