Advertisement
StanleyGoldman

Untitled

Feb 7th, 2015
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.10 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Linq;
  5. using System.Reflection;
  6. using TypeLite;
  7. using TypeLite.TsModels;
  8.  
  9. namespace MyApp.Devel.TypeLite
  10. {
  11. public class CustomScriptGenerator : TsGenerator
  12. {
  13. public CustomScriptGenerator()
  14. {
  15. }
  16.  
  17. public string GenerateEnumsCustom(TsModel model)
  18. {
  19. var sb = new ScriptBuilder(IndentationString);
  20.  
  21. foreach (var module in model.Modules)
  22. this.AppendCustomEnumModule(module, sb);
  23.  
  24. return sb.ToString();
  25. }
  26.  
  27. private void AppendCustomEnumModule(TsModule module, ScriptBuilder sb)
  28. {
  29. var enums = module.Enums.Where(e => !_typeConvertors.IsConvertorRegistered(e.Type) && !e.IsIgnored).ToList();
  30.  
  31. var moduleName = GetModuleName(module);
  32. if (moduleName != module.Name)
  33. {
  34. _renamedModules.Add(module.Name, moduleName);
  35. }
  36.  
  37. if (enums.Any())
  38. {
  39. sb.AppendLine(string.Format("module {0} {{", moduleName));
  40. using (sb.IncreaseIndentation())
  41. {
  42. foreach (var enumModel in enums)
  43. {
  44. this.AppendCustomEnumDefinition(enumModel, sb);
  45. }
  46. }
  47. sb.AppendLine("}");
  48. sb.AppendLine(string.Format("export = {0};", moduleName));
  49. }
  50. }
  51.  
  52. private void AppendCustomEnumDefinition(TsEnum enumModel, ScriptBuilder sb)
  53. {
  54. var typeName = this.GetTypeName(enumModel);
  55.  
  56. var descriptionDictionary = new Dictionary<string, string>();
  57.  
  58. sb.AppendLineIndented(string.Format("export module {0} {{", typeName));
  59.  
  60. using (sb.IncreaseIndentation())
  61. {
  62. sb.AppendLineIndented("export enum Enum {");
  63. using (sb.IncreaseIndentation())
  64. {
  65. var i = 1;
  66. foreach (var v in enumModel.Values)
  67. {
  68. sb.AppendLineIndented(string.Format(i < enumModel.Values.Count ? "{0} = {1}," : "{0} = {1}", v.Name, v.Value));
  69. i++;
  70.  
  71. var description = v.Field.GetCustomAttributes(typeof(DescriptionAttribute))
  72. .Cast<DescriptionAttribute>()
  73. .Select(attribute => attribute.Description.Replace("\"", "\\\""))
  74. .FirstOrDefault();
  75.  
  76. description = description ?? v.Name;
  77.  
  78. descriptionDictionary.Add(v.Name, description);
  79. }
  80. }
  81.  
  82. sb.AppendLineIndented("}");
  83.  
  84. sb.AppendLine();
  85.  
  86. sb.AppendLineIndented("export function describe (enumValue: Enum) {");
  87. using (sb.IncreaseIndentation())
  88. {
  89. sb.AppendLineIndented("switch (enumValue) {");
  90. using (sb.IncreaseIndentation())
  91. {
  92. foreach (var key in descriptionDictionary.Keys)
  93. {
  94. sb.AppendLineIndented(string.Format("case Enum.{0}:", key));
  95. using (sb.IncreaseIndentation())
  96. {
  97. sb.AppendLineIndented(string.Format("return \"{0}\";", descriptionDictionary[key]));
  98. }
  99. }
  100. sb.AppendLineIndented("default:");
  101. using (sb.IncreaseIndentation())
  102. {
  103. sb.AppendLineIndented("throw Error(\"Unknown Enum Value\");");
  104. }
  105. }
  106. sb.AppendLineIndented("}");
  107. }
  108. sb.AppendLineIndented("}");
  109.  
  110. }
  111. sb.AppendLineIndented("}");
  112.  
  113. _generatedEnums.Add(enumModel);
  114. }
  115. }
  116. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement