예제 #1
0
        public static BitmapFontInfo ReadText(IReadOnlyList <string> lineSegments)
        {
            var bitmapFontInfo = new BitmapFontInfo();

            bitmapFontInfo.Face   = TextFormatUtility.ReadString("face", lineSegments, string.Empty);
            bitmapFontInfo.Size   = TextFormatUtility.ReadInt("size", lineSegments);
            bitmapFontInfo.Bold   = TextFormatUtility.ReadBool("bold", lineSegments);
            bitmapFontInfo.Italic = TextFormatUtility.ReadBool("italic", lineSegments);

            bitmapFontInfo.Charset = TextFormatUtility.ReadString("charset", lineSegments, string.Empty);

            bitmapFontInfo.Unicode            = TextFormatUtility.ReadBool("unicode", lineSegments);
            bitmapFontInfo.StretchHeight      = TextFormatUtility.ReadInt("stretchH", lineSegments);
            bitmapFontInfo.Smooth             = TextFormatUtility.ReadBool("smooth", lineSegments);
            bitmapFontInfo.SuperSamplingLevel = TextFormatUtility.ReadInt("aa", lineSegments);

            var padding = TextFormatUtility.ReadValue("padding", lineSegments)?.Split(',');

            if (padding != null)
            {
                bitmapFontInfo.PaddingLeft  = padding.Length > 3 ? int.Parse(padding[3]) : 0;
                bitmapFontInfo.PaddingDown  = padding.Length > 2 ? int.Parse(padding[2]) : 0;
                bitmapFontInfo.PaddingRight = padding.Length > 1 ? int.Parse(padding[1]) : 0;
                bitmapFontInfo.PaddingUp    = padding.Length > 0 ? int.Parse(padding[0]) : 0;
            }

            var spacing = TextFormatUtility.ReadValue("spacing", lineSegments)?.Split(',');

            if (spacing != null)
            {
                bitmapFontInfo.SpacingVertical   = spacing.Length > 1 ? int.Parse(spacing[1]) : 0;
                bitmapFontInfo.SpacingHorizontal = spacing.Length > 0 ? int.Parse(spacing[0]) : 0;
            }

            bitmapFontInfo.Outline = TextFormatUtility.ReadInt("outline", lineSegments);

            return(bitmapFontInfo);
        }
예제 #2
0
        public static BitmapFont ReadText(TextReader textReader)
        {
            var bitmapFont = new BitmapFont();

            while (textReader.Peek() != -1)
            {
                var lineSegments = TextFormatUtility.GetSegments(textReader.ReadLine());

                switch (lineSegments[0])
                {
                case "info":
                {
                    bitmapFont.Info = BitmapFontInfo.ReadText(lineSegments);
                    break;
                }

                case "common":
                {
                    bitmapFont.Common = BitmapFontCommon.ReadText(lineSegments, out var pageCount);
                    bitmapFont.Pages  = new Dictionary <int, string>(pageCount);
                    break;
                }

                case "page":
                {
                    bitmapFont.Pages = bitmapFont.Pages ?? new Dictionary <int, string>();
                    var id   = TextFormatUtility.ReadInt("id", lineSegments);
                    var file = TextFormatUtility.ReadString("file", lineSegments);
                    bitmapFont.Pages[id] = file;
                    break;
                }

                case "chars":
                {
                    var count = TextFormatUtility.ReadInt("count", lineSegments);

                    bitmapFont.Characters = new Dictionary <int, Character>(count);

                    for (var i = 0; i < count; i++)
                    {
                        var characterLineSegments = TextFormatUtility.GetSegments(textReader.ReadLine());
                        var character             = Character.ReadText(characterLineSegments, out var id);
                        bitmapFont.Characters[id] = character;
                    }

                    break;
                }

                case "kernings":
                {
                    var count = TextFormatUtility.ReadInt("count", lineSegments);

                    bitmapFont.KerningPairs = new Dictionary <KerningPair, int>(count);

                    for (var i = 0; i < count; i++)
                    {
                        var kerningLineSegments = TextFormatUtility.GetSegments(textReader.ReadLine());
                        var kerningPair         = KerningPair.ReadText(kerningLineSegments, out var amount);
                        if (bitmapFont.KerningPairs.ContainsKey(kerningPair))
                        {
                            continue;
                        }
                        bitmapFont.KerningPairs[kerningPair] = amount;
                    }

                    break;
                }
                }
            }

            return(bitmapFont);
        }