Ejemplo n.º 1
0
        protected override void FormatTagElement(DefineFont3Tag tag, XElement xTag)
        {
            xTag.Add(new XAttribute(LANGUAGE_ATTRIB, tag.Language));
            xTag.Add(new XAttribute(SHIFT_JIS_ATTRIB, CommonFormatter.Format(tag.ShiftJIS)));
            xTag.Add(new XAttribute(UNICODE_ATTRIB, CommonFormatter.Format(tag.SmallText)));
            xTag.Add(new XAttribute(ANSI_ATTRIB, CommonFormatter.Format(tag.ANSI)));
            xTag.Add(new XAttribute(WIDE_GLYPH_OFFSETS_ATTRIB, CommonFormatter.Format(tag.WideOffsets)));
            xTag.Add(new XAttribute("wideCodes", CommonFormatter.Format(tag.WideCodes)));
            xTag.Add(new XAttribute(ITALIC_ATTRIB, CommonFormatter.Format(tag.Italic)));
            xTag.Add(new XAttribute(BOLD_ATTRIB, CommonFormatter.Format(tag.Bold)));
            xTag.Add(new XAttribute(NAME_ATTRIB, tag.FontName.TrimEnd('\0')));

            var xGlyphs = new XElement("glyphs");

            foreach (var glyph in tag.Glyphs)
            {
                var xGlyph = XGlyph.ToXml(glyph);
                xGlyphs.Add(xGlyph);
            }
            xTag.Add(xGlyphs);

            if (tag.HasLayout)
            {
                xTag.Add(new XAttribute("ascent", tag.Ascent));
                xTag.Add(new XAttribute("descent", tag.Descent));
                xTag.Add(new XAttribute("leading", tag.Leading));

                var xAdvance = new XElement("advance");
                foreach (var glyph in tag.Glyphs)
                {
                    var xGlyph = new XElement("Short");
                    xGlyph.Add(new XAttribute("value", glyph.Advance));
                    xAdvance.Add(xGlyph);
                }
                xTag.Add(xAdvance);

                var xBounds = new XElement("bounds");
                foreach (var glyph in tag.Glyphs)
                {
                    xBounds.Add(XRect.ToXml(glyph.Bounds));
                }
                xTag.Add(xBounds);

                var xKerningRecords = new XElement("wideKerning");
                foreach (var kerningRecord in tag.KerningRecords)
                {
                    xKerningRecords.Add(XKerningRecord.ToXml(kerningRecord));
                }
                xTag.Add(xKerningRecords);
            }
        }
Ejemplo n.º 2
0
        protected override bool AcceptTagElement(DefineFont3Tag tag, XElement element)
        {
            switch (element.Name.LocalName)
            {
            case "wideKerning":
                tag.HasLayout = true;
                foreach (var xRecord in element.Elements())
                {
                    tag.KerningRecords.Add(XKerningRecord.FromXml(xRecord));
                }
                break;

            case "advance":
                tag.HasLayout = true;
                var advanceIndex = 0;
                foreach (var xAdvance in element.Elements())
                {
                    var xValue = xAdvance.Attribute("value");
                    tag.Glyphs[advanceIndex].Advance = short.Parse(xValue.Value);
                    advanceIndex++;
                }
                break;

            case "bounds":
                tag.HasLayout = true;
                var boundIndex = 0;
                foreach (var xBound in element.Elements())
                {
                    tag.Glyphs[boundIndex].Bounds = XRect.FromXml(xBound);
                    boundIndex++;
                }
                break;

            case "glyphs":
                foreach (var xGlyph in element.Elements())
                {
                    tag.Glyphs.Add(XGlyph.FromXml(xGlyph));
                }
                break;

            default:
                return(false);
            }
            return(true);
        }