public void Compile() { IEnumerable <ParsedPath> pinboardFileNames = Target.InputPaths.Where(f => f.Extension == ".pinboard"); IEnumerable <ParsedPath> distinctPinboardFileNames = pinboardFileNames.Distinct <ParsedPath>(new FileNameEqualityComparer()); Dictionary <ParsedPath, PinboardFileV1> pinboards = ReadPinboardFiles(pinboardFileNames); ReconcilePinboards(pinboardFileNames, distinctPinboardFileNames, pinboards); TextWriter writer; ParsedPath csFileName = Target.OutputPaths.Where(f => f.Extension == ".cs").First(); Context.WriteMessage("Writing output file '{0}'", csFileName); if (!Directory.Exists(csFileName.VolumeAndDirectory)) { Directory.CreateDirectory(csFileName.VolumeAndDirectory); } using (writer = new StreamWriter(csFileName, false, Encoding.UTF8)) { RectanglesContent rectangleData = CreateRectangleData(distinctPinboardFileNames, pinboards); WriteCsOutput(writer, rectangleData); } }
private RectanglesContent CreateRectangleData(IEnumerable <ParsedPath> distinctPinboardFiles, Dictionary <ParsedPath, PinboardFileV1> pinboards) { RectanglesContent rectData = new RectanglesContent(); rectData.Namespace = this.Namespace; rectData.Classes = new List <RectanglesContent.Class>(); foreach (var pinboardFile in distinctPinboardFiles) { PinboardFileV1 pinboard = pinboards[pinboardFile]; RectanglesContent.Class rectClass = new RectanglesContent.Class(); rectClass.ClassNamePrefix = pinboardFile.File; List <string> names = new List <string>(); names.Add("Screen"); foreach (var rectInfo in pinboard.RectInfos) { names.Add(rectInfo.Name); } rectClass.RectangleNames = names; rectData.Classes.Add(rectClass); } return(rectData); }
private void WriteCsOutput(TextWriter textWriter, RectanglesContent rectangleData) { CSharpStreamWriter writer = new CSharpStreamWriter(textWriter); writer.WriteLine("//"); writer.WriteLine("// This file was generated on {{0}}.", DateTime.Now); writer.WriteLine("//"); writer.WriteLine(); writer.WriteLine("using System;"); writer.WriteLine("using Microsoft.Xna.Framework;"); writer.WriteLine("using Microsoft.Xna.Framework.Graphics;"); writer.WriteLine("using System.Text;"); writer.WriteLine(); writer.WriteLine("namespace {{0}}", rectangleData.Namespace); writer.WriteLine("{"); for (int i = 0; i < rectangleData.Classes.Count; i++) { RectanglesContent.Class classData = rectangleData.Classes[i]; writer.WriteLine("public class {{0}}Rectangles", classData.ClassNamePrefix); writer.WriteLine("{"); writer.WriteLine("private Rectangle[] rectangles;"); writer.WriteLine(); writer.WriteLine("public {{0}}Rectangles(Rectangle[] rectangles)", classData.ClassNamePrefix); writer.WriteLine("{"); writer.WriteLine("this.rectangles = rectangles;"); writer.WriteLine("}"); writer.WriteLine(); for (int j = 0; j < classData.RectangleNames.Count; j++) { writer.WriteLine("public Rectangle {{0}} { get { return rectangles[{{1}}]; } }", classData.RectangleNames[j], j); } writer.WriteLine("}"); } writer.WriteLine("public static class Rectangles"); writer.WriteLine("{"); for (int i = 0; i < rectangleData.Classes.Count; i++) { writer.WriteLine("public static {{0}}Rectangles {{0}} { get; set; }", rectangleData.Classes[i].ClassNamePrefix); } writer.WriteLine("}"); writer.WriteLine("}"); }