[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'));
        }
Exemple #2
0
        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();
                }
            }
        }