Click here to Skip to main content
15,896,400 members
Articles / Desktop Programming / WPF

SharpVectors - SVG# Reloaded: An Introduction

Rate me:
Please Sign up or sign in to vote.
4.98/5 (33 votes)
17 Nov 2010BSD10 min read 206K   21.7K   101  
A C# library for converting SVG to WPF and viewing SVG files in WPF Applications
using System;
using System.Collections.Generic;

using System.Windows;
using System.Windows.Media;

using SharpVectors.Renderers.Wpf;

namespace SharpVectors.Converters
{
    public sealed class FontFamilyVisitor : WpfFontFamilyVisitor
    {
        private FontFamily _arialFamily;

        public FontFamilyVisitor()
        {
            _arialFamily = new FontFamily("Arial");
        }

        public override WpfFontFamilyInfo Visit(string fontName, WpfFontFamilyInfo familyInfo, 
            WpfDrawingContext context)
        {
            if (String.IsNullOrEmpty(fontName))
            {
                return null;
            }

            if (fontName.StartsWith("Arial", StringComparison.OrdinalIgnoreCase) &&
                fontName.Length > 5)
            {
                if (String.Equals(fontName, "ArialMT",
                    StringComparison.OrdinalIgnoreCase))
                {
                    return new WpfFontFamilyInfo(_arialFamily, familyInfo.Weight,
                        familyInfo.Style, familyInfo.Stretch);
                }
                else if (String.Equals(fontName, "Arial-BoldMT",
                    StringComparison.OrdinalIgnoreCase))
                {
                    return new WpfFontFamilyInfo(_arialFamily, FontWeights.Bold,
                        familyInfo.Style, familyInfo.Stretch);
                }
                else if (String.Equals(fontName, "Arial-ItalicMT",
                    StringComparison.OrdinalIgnoreCase))
                {
                    return new WpfFontFamilyInfo(_arialFamily, familyInfo.Weight,
                        FontStyles.Italic, familyInfo.Stretch);
                }
                else if (String.Equals(fontName, "Arial-BoldItalicMT",
                    StringComparison.OrdinalIgnoreCase))
                {
                    return new WpfFontFamilyInfo(_arialFamily, FontWeights.Bold,
                        FontStyles.Italic, familyInfo.Stretch);
                }
                else if (String.Equals(fontName, "Arial Unicode MS",
                    StringComparison.OrdinalIgnoreCase))
                {
                    return null;
                }

                return new WpfFontFamilyInfo(_arialFamily, familyInfo.Weight,
                    familyInfo.Style, familyInfo.Stretch);
            }
            else if (fontName.StartsWith("Helvetica", StringComparison.OrdinalIgnoreCase))
            {
                if (String.Equals(fontName, "Helvetica", StringComparison.OrdinalIgnoreCase))
                {
                    return new WpfFontFamilyInfo(_arialFamily, familyInfo.Weight,
                        familyInfo.Style, familyInfo.Stretch);
                }
                else if (String.Equals(fontName, "Helvetica-Bold",
                    StringComparison.OrdinalIgnoreCase))
                {
                    return new WpfFontFamilyInfo(_arialFamily, FontWeights.Bold,
                        familyInfo.Style, familyInfo.Stretch);
                }
                else if (String.Equals(fontName, "Helvetica-Oblique",
                    StringComparison.OrdinalIgnoreCase))
                {
                    return new WpfFontFamilyInfo(_arialFamily, familyInfo.Weight,
                        FontStyles.Italic, familyInfo.Stretch);
                }
                else if (String.Equals(fontName, "Helvetica-BoldOblique",
                    StringComparison.OrdinalIgnoreCase))
                {
                    return new WpfFontFamilyInfo(_arialFamily, FontWeights.Bold,
                        FontStyles.Italic, familyInfo.Stretch);
                }

                return new WpfFontFamilyInfo(_arialFamily, familyInfo.Weight,
                    familyInfo.Style, familyInfo.Stretch);
            }
            else if (fontName.StartsWith("TimesNewRomanPS", StringComparison.OrdinalIgnoreCase))
            {
                if (String.Equals(fontName, "TimesNewRomanPSMT", StringComparison.OrdinalIgnoreCase))
                {
                    return new WpfFontFamilyInfo(_arialFamily, familyInfo.Weight,
                        familyInfo.Style, familyInfo.Stretch);
                }
                else if (String.Equals(fontName, "TimesNewRomanPS-BoldMT",
                    StringComparison.OrdinalIgnoreCase))
                {
                    return new WpfFontFamilyInfo(_arialFamily, FontWeights.Bold,
                        familyInfo.Style, familyInfo.Stretch);
                }
                else if (String.Equals(fontName, "TimesNewRomanPS-ItalicMT",
                    StringComparison.OrdinalIgnoreCase))
                {
                    return new WpfFontFamilyInfo(_arialFamily, familyInfo.Weight,
                        FontStyles.Italic, familyInfo.Stretch);
                }
                else if (String.Equals(fontName, "TimesNewRomanPS-BoldItalicMT",
                    StringComparison.OrdinalIgnoreCase))
                {
                    return new WpfFontFamilyInfo(_arialFamily, FontWeights.Bold,
                        FontStyles.Italic, familyInfo.Stretch);
                }

                return new WpfFontFamilyInfo(_arialFamily, familyInfo.Weight,
                    familyInfo.Style, familyInfo.Stretch);
            }
            else if (fontName.StartsWith("CourierNewPS", StringComparison.OrdinalIgnoreCase))
            {
                if (String.Equals(fontName, "CourierNewPSMT", StringComparison.OrdinalIgnoreCase))
                {
                    return new WpfFontFamilyInfo(_arialFamily, familyInfo.Weight,
                        familyInfo.Style, familyInfo.Stretch);
                }
                else if (String.Equals(fontName, "CourierNewPS-BoldMT",
                    StringComparison.OrdinalIgnoreCase))
                {
                    return new WpfFontFamilyInfo(_arialFamily, FontWeights.Bold,
                        familyInfo.Style, familyInfo.Stretch);
                }
                else if (String.Equals(fontName, "CourierNewPS-ItalicMT",
                    StringComparison.OrdinalIgnoreCase))
                {
                    return new WpfFontFamilyInfo(_arialFamily, familyInfo.Weight,
                        FontStyles.Italic, familyInfo.Stretch);
                }
                else if (String.Equals(fontName, "CourierNewPS-BoldItalicMT",
                    StringComparison.OrdinalIgnoreCase))
                {
                    return new WpfFontFamilyInfo(_arialFamily, FontWeights.Bold,
                        FontStyles.Italic, familyInfo.Stretch);
                }

                return new WpfFontFamilyInfo(_arialFamily, familyInfo.Weight,
                    familyInfo.Style, familyInfo.Stretch);
            }
            else if (fontName.Equals("MS-Gothic", StringComparison.OrdinalIgnoreCase))
            {
                return new WpfFontFamilyInfo(new FontFamily("MS Gothic"), familyInfo.Weight,
                    familyInfo.Style, familyInfo.Stretch);
                //return new WpfFontFamilyInfo(_arialFamily, familyInfo.Weight,
                //    familyInfo.Style, familyInfo.Stretch);
            }
            else if (fontName.Equals("MS-PGothic", StringComparison.OrdinalIgnoreCase))
            {
                return new WpfFontFamilyInfo(new FontFamily("MS PGothic"), familyInfo.Weight,
                    familyInfo.Style, familyInfo.Stretch);
            }
            else if (fontName.Equals("MS Pゴシック", StringComparison.OrdinalIgnoreCase))
            {
                return new WpfFontFamilyInfo(new FontFamily("MS PGothic"), familyInfo.Weight,
                    familyInfo.Style, familyInfo.Stretch);
            }

            return null;
            //return new WpfFontFamilyInfo(_arialFamily, familyInfo.Weight,
            //    familyInfo.Style, familyInfo.Stretch);
        }
    }
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The BSD License


Written By
Engineer
Japan Japan
Systems Engineer

Comments and Discussions