コード例 #1
0
ファイル: svgpath2code.cs プロジェクト: lanicon/svgpath2code
    public static int Main(string[] args)
    {
        TextWriter writer      = Console.Out;
        string     method_name = null;
        string     formatter   = null;
        bool       show_help   = false;

        var os = new OptionSet()
        {
            { "formatter=", "Source code formatter. Valid values are: 'csharp-coregraphics'", v => formatter = v },
            { "out=", "Source code output", v => writer = new StreamWriter(v) },
            { "h|?|help", "Displays the help", v => show_help = true },
        };

        var    svg  = os.Parse(args);
        string path = (svg.Count > 1) ? String.Concat(svg) : svg [0];

        if (show_help)
        {
            Usage(os, null);
        }

        var parser = new SvgPathParser();

        switch (formatter)
        {
        case "csharp-coregraphics":
        case "cs-cg":
            parser.Formatter = new CSharpCoreGraphicsFormatter(writer);
            break;

        default:
            Usage(os, "error: unkown {0} code formatter", formatter);
            break;
        }

        parser.Parse(path, method_name);
        return(0);
    }
コード例 #2
0
        public override void AwakeFromNib()
        {
            base.AwakeFromNib();

            SourceCodeOutput.Editable = false;

            parser = new SvgPathParser();

            Convert.Activated += (object sender, EventArgs e) => {
                using (var tw = new StringWriter()) {
                    parser.Formatter = GetFormatter(tw);
                    try {
                        parser.Parse(SvgPathInput.StringValue ?? String.Empty, "Unnamed");
                        SourceCodeOutput.Value = tw.ToString();
                    }
                    catch {
                        SourceCodeOutput.Value = "Invalid path data. If this looks like a valid path then please " +
                                                 "file an issue on github: " + Environment.NewLine + BugReport + Environment.NewLine +
                                                 "and include the offending SVG path: " + Environment.NewLine + SvgPathInput.StringValue;
                    }
                }
            };
        }
コード例 #3
0
    public static int Main(string[] args)
    {
        if (args.Length < 1)
        {
            Usage("error: Path to streamline directory required");
        }

        string font_dir = args [0];

        if (string.IsNullOrEmpty(font_dir))
        {
            font_dir = "font-streamlines";
        }

        string css_file = Path.Combine(font_dir, "styles.css");

        if (!File.Exists(css_file))
        {
            Usage("error: Missing '{0}' file.", css_file);
        }

        string[] svgFiles = System.IO.Directory.GetFiles(font_dir, "*.svg", SearchOption.AllDirectories);
        if (svgFiles.Length == 0)
        {
            Usage("error: Can not found any svg file.");
        }
        string svg_file = svgFiles[0];


        var output = args [1];

        if (string.IsNullOrEmpty(output))
        {
            output = "StreamlineIcons.generated.cs";
        }
        TextWriter writer = /*(args.Length < 2) ? Console.Out :*/ new StreamWriter(output);

        writer.WriteLine("// note: Generated file - do not modify - use convert-font-streamline to regenerate");
        writer.WriteLine();
        writer.WriteLine("using MonoTouch.CoreGraphics;");
        writer.WriteLine("using MonoTouch.Dialog;");
        writer.WriteLine("using MonoTouch.Foundation;");
        writer.WriteLine("using MonoTouch.UIKit;");
        writer.WriteLine();
        writer.WriteLine("namespace UI.Icons {");
        writer.WriteLine();
        writer.WriteLine("\t[Preserve]");
        writer.WriteLine("\tpublic partial class StreamlineIcons {");

        Dictionary <int, string> names = new Dictionary <int, string>();

        string[] lines = File.ReadLines(css_file).ToArray();
        for (int i = 0; i < lines.Length; i++)
        {
            string line = lines[i];
            // get value first
            int p = line.IndexOf("content: \"", StringComparison.Ordinal);
            if (p == -1)
            {
                continue;
            }
            int    begin  = line.IndexOf('\"');
            string _value = line.Substring(begin + 1, line.LastIndexOf('\"') - begin - 1);
            int    value  = 0;
            if (_value.StartsWith("\\e"))
            {
                value = Convert.ToInt32(_value.Substring(1), 16);
            }
            else
            {
                value = (int)_value[0];
            }

            // get names
            string name = null;
            if (names.ContainsKey(value))
            {
                name = names[value];
            }
            for (int j = i - 1; j >= 0; j--)
            {
                line = lines[j];
                if (!line.StartsWith(".icon-", StringComparison.Ordinal))
                {
                    break;
                }

                p = line.IndexOf(':');
                if (p == -1)
                {
                    break;
                }
                string curName = line.Substring(1, p - 1).Replace('-', '_');
                if (name == null)
                {
                    name = curName;
                    names.Add(value, name);
                }

                writer.WriteLine("\t\t// {0} : {1}", name, value);
                writer.WriteLine("\t\tpublic UIImage {0} {{ get {{ return Get ({1}_path); }} }}", curName, name);
                writer.WriteLine();
            }
        }
        writer.WriteLine("\t\t// total: {0}", names.Count);
        writer.WriteLine();

        // MonoTouch uses C# and CoreGraphics
        var code   = new CSharpCoreGraphicsFormatter(writer);
        var parser = new SvgPathParser()
        {
            Formatter = code
        };

        foreach (string line in File.ReadLines(svg_file))
        {
            if (!line.StartsWith("<glyph unicode=\"&#", StringComparison.Ordinal))
            {
                continue;
            }
            int    begin = line.IndexOf('#');
            string _id   = line.Substring(begin + 1, line.IndexOf(';') - begin - 1);
            int    id    = Convert.ToInt32(_id, 10);
            string name;
            if (!names.TryGetValue(id, out name))
            {
                continue;
            }
            int    p    = line.IndexOf(" d=\"") + 4;
            int    e    = line.LastIndexOf('"');
            string data = line.Substring(p, e - p);
            parser.Parse(data, name);
        }
        writer.WriteLine("\t}");
        writer.WriteLine("}");
        writer.Close();

        return(0);
    }
コード例 #4
0
        private void Parse()
        {
            var parser = new SvgPathParser(_raw);

            parser.Reset();
            _parsed = new FastList <SvgCommand>();

            while (!parser.Eof)
            {
                var command = new SvgCommand();
                _parsed.Add(command);

                command.Cmd = parser.GetString();
                switch (command.Cmd)
                {
                //
                // Moving
                //
                case "M":     // absolute moveto
                    command.Numbers = new FastList <float>();
                    command.Numbers.Add(parser.GetNumber());
                    command.Numbers.Add(parser.GetNumber());
                    break;

                case "m":     // relative moveto
                    command.Numbers = new FastList <float>();
                    command.Numbers.Add(parser.GetNumber());
                    command.Numbers.Add(parser.GetNumber());
                    break;

                //
                // Closing
                //
                case "Z":
                case "z":
                    break;

                //
                // Lines
                //
                case "L":     // absolute lineTo
                    command.Numbers = new FastList <float>();
                    do
                    {
                        command.Numbers.Add(parser.GetNumber());
                        command.Numbers.Add(parser.GetNumber());
                    } while (parser.CurrentTokenIsNumber);
                    break;

                case "l":     // relative lineTo
                    command.Numbers = new FastList <float>();
                    do
                    {
                        command.Numbers.Add(parser.GetNumber());
                        command.Numbers.Add(parser.GetNumber());
                    } while (parser.CurrentTokenIsNumber);
                    break;

                case "V":     // absolute verticalTo
                    command.Numbers = new FastList <float>();
                    do
                    {
                        command.Numbers.Add(parser.GetNumber());
                    } while (parser.CurrentTokenIsNumber);
                    break;

                case "v":     // relative verticalTo
                    command.Numbers = new FastList <float>();
                    do
                    {
                        command.Numbers.Add(parser.GetNumber());
                    } while (parser.CurrentTokenIsNumber);
                    break;

                case "H":     // absolute horizontalTo
                    command.Numbers = new FastList <float>();
                    do
                    {
                        command.Numbers.Add(parser.GetNumber());
                    } while (parser.CurrentTokenIsNumber);
                    break;

                case "h":     // relative horizontalTo
                    command.Numbers = new FastList <float>();
                    do
                    {
                        command.Numbers.Add(parser.GetNumber());
                    } while (parser.CurrentTokenIsNumber);
                    break;

                //
                // cubic bezier curves
                //
                case "C":     // absolute cubicTo
                    command.Numbers = new FastList <float>();
                    do
                    {
                        command.Numbers.Add(parser.GetNumber());
                        command.Numbers.Add(parser.GetNumber());
                        command.Numbers.Add(parser.GetNumber());
                        command.Numbers.Add(parser.GetNumber());
                        command.Numbers.Add(parser.GetNumber());
                        command.Numbers.Add(parser.GetNumber());
                    } while (parser.CurrentTokenIsNumber);
                    break;

                case "c":     // relative cubicTo
                    command.Numbers = new FastList <float>();
                    do
                    {
                        command.Numbers.Add(parser.GetNumber());
                        command.Numbers.Add(parser.GetNumber());
                        command.Numbers.Add(parser.GetNumber());
                        command.Numbers.Add(parser.GetNumber());
                        command.Numbers.Add(parser.GetNumber());
                        command.Numbers.Add(parser.GetNumber());
                    } while (parser.CurrentTokenIsNumber);
                    break;

                case "S":     // absolute shorthand cubicTo
                    command.Numbers = new FastList <float>();
                    do
                    {
                        command.Numbers.Add(parser.GetNumber());
                        command.Numbers.Add(parser.GetNumber());
                        command.Numbers.Add(parser.GetNumber());
                        command.Numbers.Add(parser.GetNumber());
                    } while (parser.CurrentTokenIsNumber);
                    break;

                case "s":     // relative shorthand cubicTo
                    command.Numbers = new FastList <float>();
                    do
                    {
                        command.Numbers.Add(parser.GetNumber());
                        command.Numbers.Add(parser.GetNumber());
                        command.Numbers.Add(parser.GetNumber());
                        command.Numbers.Add(parser.GetNumber());
                    } while (parser.CurrentTokenIsNumber);
                    break;

                //
                // quadratic bezier curves
                //
                case "Q":     // absolute quadraticTo
                    command.Numbers = new FastList <float>();
                    do
                    {
                        command.Numbers.Add(parser.GetNumber());
                        command.Numbers.Add(parser.GetNumber());
                        command.Numbers.Add(parser.GetNumber());
                        command.Numbers.Add(parser.GetNumber());
                    } while (parser.CurrentTokenIsNumber);
                    break;

                case "q":     // relative quadraticTo
                    command.Numbers = new FastList <float>();
                    do
                    {
                        command.Numbers.Add(parser.GetNumber());
                        command.Numbers.Add(parser.GetNumber());
                        command.Numbers.Add(parser.GetNumber());
                        command.Numbers.Add(parser.GetNumber());
                    } while (parser.CurrentTokenIsNumber);
                    break;

                case "T":     // absolute shorthand quadraticTo
                    command.Numbers = new FastList <float>();
                    do
                    {
                        command.Numbers.Add(parser.GetNumber());
                        command.Numbers.Add(parser.GetNumber());
                    } while (parser.CurrentTokenIsNumber);
                    break;

                case "t":     // relative shorthand quadraticTo
                    command.Numbers = new FastList <float>();
                    do
                    {
                        command.Numbers.Add(parser.GetNumber());
                        command.Numbers.Add(parser.GetNumber());
                    } while (parser.CurrentTokenIsNumber);
                    break;
                }
            }
            _raw = null; // not needed anymore.
        }
コード例 #5
0
    public static int Main(string[] args)
    {
        if (args.Length < 1)
        {
            Usage("error: Path to FontAwesome directory required");
        }

        string font_dir = args [0];
        string css_file = Path.Combine(font_dir, "css/font-awesome.css");

        if (!File.Exists(css_file))
        {
            Usage("error: Missing '{0}' file.", css_file);
        }

        string svg_file = Path.Combine(font_dir, "font/fontawesome-webfont.svg");

        if (!File.Exists(svg_file))
        {
            Usage("error: Missing '{0}' file.", svg_file);
        }

        TextWriter writer = (args.Length < 2) ? Console.Out : new StreamWriter(args [1]);

        writer.WriteLine("// note: Generated file - do not modify - use convert-font-awesome to regenerate");
        writer.WriteLine();
        writer.WriteLine("using MonoTouch.CoreGraphics;");
        writer.WriteLine("using MonoTouch.Dialog;");
        writer.WriteLine("using MonoTouch.Foundation;");
        writer.WriteLine("using MonoTouch.UIKit;");
        writer.WriteLine();
        writer.WriteLine("namespace Poupou.Awesome.Demo {");
        writer.WriteLine();
        writer.WriteLine("\t[Preserve]");
        writer.WriteLine("\tpublic partial class Elements {");

        Dictionary <string, string> names = new Dictionary <string, string> ();

        foreach (string line in File.ReadLines(css_file))
        {
            if (!line.StartsWith(".icon-", StringComparison.Ordinal))
            {
                continue;
            }
            int p = line.IndexOf(':');
            if (p == -1)
            {
                continue;
            }
            string name = line.Substring(1, p - 1).Replace('-', '_');
            p = line.IndexOf("content: \"\\", StringComparison.Ordinal);
            if (p == -1)
            {
                continue;
            }
            string value = line.Substring(p + 11, 4);
            writer.WriteLine("\t\t// {0} : {1}", name, value);
            writer.WriteLine("\t\tImageStringElement {0}_element = new ImageStringElement (\"{0}\", GetAwesomeIcon ({0}));", name);
            writer.WriteLine();
            names.Add(value, name);
        }
        writer.WriteLine("\t\t// total: {0}", names.Count);
        writer.WriteLine();

        // MonoTouch uses C# and CoreGraphics
        var code   = new CSharpCoreGraphicsFormatter(writer);
        var parser = new SvgPathParser()
        {
            Formatter = code
        };

        foreach (string line in File.ReadLines(svg_file))
        {
            if (!line.StartsWith("<glyph unicode=\"&#x", StringComparison.Ordinal))
            {
                continue;
            }
            string id = line.Substring(19, 4);
            string name;
            if (!names.TryGetValue(id, out name))
            {
                continue;
            }
            int    p    = line.IndexOf(" d=\"") + 4;
            int    e    = line.LastIndexOf('"');
            string data = line.Substring(p, e - p);
            parser.Parse(data, name);
        }
        writer.WriteLine("\t}");
        writer.WriteLine("}");
        writer.Close();

        return(0);
    }