diff options
| author | Roy Ben-Shabat <Roy@Twine-s.com> | 2017-12-04 18:44:33 +0200 |
|---|---|---|
| committer | Roy Ben-Shabat <Roy@Twine-s.com> | 2017-12-04 18:44:33 +0200 |
| commit | 3689238cb9ca77cbd7fa34dbd15003af87266e36 (patch) | |
| tree | 3d928df9c9b0b11703e6fb10ddf09a436a405dde /Software/Visual_Studio/Tango.CodeGeneration/CodeObject.cs | |
| parent | 6c3f942b4e321dc9e7bbca8d95dc81dcb43f7fd2 (diff) | |
| download | Tango-3689238cb9ca77cbd7fa34dbd15003af87266e36.tar.gz Tango-3689238cb9ca77cbd7fa34dbd15003af87266e36.zip | |
Added Code Generation Library.
Diffstat (limited to 'Software/Visual_Studio/Tango.CodeGeneration/CodeObject.cs')
| -rw-r--r-- | Software/Visual_Studio/Tango.CodeGeneration/CodeObject.cs | 134 |
1 files changed, 134 insertions, 0 deletions
diff --git a/Software/Visual_Studio/Tango.CodeGeneration/CodeObject.cs b/Software/Visual_Studio/Tango.CodeGeneration/CodeObject.cs new file mode 100644 index 000000000..6d7e74960 --- /dev/null +++ b/Software/Visual_Studio/Tango.CodeGeneration/CodeObject.cs @@ -0,0 +1,134 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading.Tasks; +using System.Web; + +namespace Tango.CodeGeneration +{ + /// <summary> + /// Represents a code object base class. + /// </summary> + /// <seealso cref="Tango.CodeGeneration.ICodeObject" /> + public abstract class CodeObject : ICodeObject + { + /// <summary> + /// Initializes a new instance of the <see cref="CodeObject"/> class. + /// </summary> + public CodeObject() + { + Attributes = new List<string>(); + IndentResult = true; + } + + /// <summary> + /// Gets or sets the code object modifier. + /// </summary> + public CodeObjectModifier Modifier { get; set; } + + /// <summary> + /// Gets or sets the attributes associated with this code object. + /// </summary> + public List<String> Attributes { get; set; } + + /// <summary> + /// Gets or sets a value indicating whether to indent the resulting code. + /// </summary> + public bool IndentResult { get; set; } + + /// <summary> + /// Generates the code represented by this code object. + /// </summary> + /// <returns></returns> + public virtual string GenerateCode() + { + var code = Helper.ParseTemplate(GetTemplate(), this); + + if (IndentResult) + { + code = Helper.IndentCSharpCode(code); + code = RemoveDoubleLines(code); + } + + code = code.Replace("&amp;quot;", "\""); + code = HttpUtility.HtmlDecode(code); + + return code; + } + + /// <summary> + /// Removes the double lines. + /// </summary> + /// <param name="str">The string.</param> + /// <returns></returns> + private String RemoveDoubleLines(string str) + { + String result = String.Empty; + + using (var streamReader = new StringReader(str)) + { + string line = null; + bool previousLineWasBlank = false; + while ((line = streamReader.ReadLine()) != null) + { + if (!string.IsNullOrEmpty(line) || !previousLineWasBlank) + { + result += line +Environment.NewLine; + } + + previousLineWasBlank = string.IsNullOrEmpty(line); + } + } + + return result; + } + + /// <summary> + /// Gets the template associated with this code object. + /// </summary> + /// <returns></returns> + public virtual string GetTemplate() + { + return Helper.GetTemplate(this.GetType()); + } + + /// <summary> + /// Returns a <see cref="System.String" /> that represents this instance. + /// </summary> + /// <returns> + /// A <see cref="System.String" /> that represents this instance. + /// </returns> + public override string ToString() + { + return GenerateCode(); + } + + /// <summary> + /// Gets the modifier string. + /// </summary> + /// <returns></returns> + public String GetModifierString() + { + return Modifier.ToString().ToLower(); + } + + /// <summary> + /// Gets the attributes string. + /// </summary> + /// <returns></returns> + public String GetAttributesString() + { + if (Attributes != null && Attributes.Count > 0) + { + return String.Join(Environment.NewLine, Attributes); + } + else + { + return null; + } + } + } +} |
