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); }
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; } } }; }
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); }
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. }
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); }