internal/*For test*/ Byte[] GenerateCodeInternal(String inputFileName, String inputFileContent) { using (var stream = new MemoryStream()) { using (var writer = new IndentStreamWriter(stream, Encoding.UTF8)) { using (var reader = new ContentReader(inputFileContent)) { var headerProcessor = new HeaderProcessor { Namespace = this.FileNamespace, ClassName = inputFileName.Split('/', '\\').Last().Split('.').First(), }; var headerOver = false; while (true) { var line = reader.ReadLine(); if (line == null) { // EOL break; } if (line.StartsWith("@") && !headerOver) { // Processing headers. headerOver = !headerProcessor.Process(line); if (headerOver) { headerProcessor.WriteHeader(writer); } } else { // End processing headers. if (!headerOver) { // Header is just over last line. headerOver = true; headerProcessor.WriteHeader(writer); } // Read documents var document = new StringBuilder(); while (ContentReader.IsDocumentLine(line)) { document.AppendLine(line.TrimStart().Remove(0, 3).TrimStart()); line = reader.ReadLine(); } using (var propertyProcessor = new PropertyProcessor(line)) { propertyProcessor.Default = headerProcessor.PropertyDefaultSettings; propertyProcessor.Document = document.ToString(); propertyProcessor.Process(); propertyProcessor.WriteProperty(writer); } } // End header detection. } // End loop. } // End ContentgReader. writer.Flush(); } // End IndentStreamWriter. stream.Flush(); return stream.ToArray(); } }
public void WriteProperty(IndentStreamWriter writer) { this.WriteDocument(writer); var declare = new String[] { this.propertyAccess, this.propertyStatic, this.propertyType, this.propertyName, }; var declareLine = String.Join(" ", declare.Where(w => w != PropertyReader.Missed)); writer.WriteLineIndent(declareLine); using (new BraceWriter(writer)) { if (this.propertyGettable) { writer.WriteIndent(String.Empty); if (!String.IsNullOrWhiteSpace(this.propertyGetAccess)) { writer.Write("{0} ", this.propertyGetAccess); } writer.WriteLine("get"); using (new BraceWriter(writer)) { writer.WriteLineIndent(this.GetterTemplate, this.propertyCode); } } if (this.propertySettable) { writer.WriteIndent(String.Empty); if (!String.IsNullOrWhiteSpace(this.propertySetAccess)) { writer.Write("{0} ", this.propertySetAccess); } writer.WriteLine("set"); using (new BraceWriter(writer)) { writer.WriteLineIndent(this.SetterTemplate, this.propertyCode); } } } writer.WriteLine(); }
public BraceWriter(IndentStreamWriter writer) { this.writer = writer; this.writer.WriteOpenBrace(); }
public void WriteHeader(IndentStreamWriter writer) { if (this._fullUsings.Count == 0) { writer.WriteLine("using System;"); } else { foreach (var @using in this._fullUsings.OrderBy(key => key)) { writer.WriteLine("using {0};", @using); } } writer.WriteLine(); writer.WriteLine("namespace {0}", this._namespace ?? this.Namespace); writer.WriteOpenBrace(); foreach (var @using in this._shortUsings.OrderBy(key => key)) { writer.WriteLineIndent("using {0};", @using); } writer.WriteLine(); writer.WriteIndent("public partial class {0}", this.ClassName); if (this._base != null) { writer.Write(" : {0}", this._base); } if (this._implements.Count != 0) { writer.Write(this._base == null ? " : {0}" : ", {0}", String.Join(", ", this._implements)); } writer.WriteLine(); writer.WriteOpenBrace(); }
private void WriteDocument(IndentStreamWriter writer) { if (String.IsNullOrWhiteSpace(this.Document)) { return; } writer.WriteLineIndent("/// <summary>"); using (var docReader = new StringReader(this.Document)) { while (true) { var line = docReader.ReadLine(); if (line == null) { break; } writer.WriteLineIndent("/// {0}", line); } } writer.WriteLineIndent("/// </summary>"); }