CodeEmitUtils.cs 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. namespace SharpGLTF.CodeGen
  5. {
  6. /// <summary>
  7. /// Text processing extensions to facilitate source code emission.
  8. /// </summary>
  9. static class CodeEmitUtils
  10. {
  11. public static string Indent(this string text, int indent)
  12. {
  13. while (indent > 0) { text = $"\t{text}"; --indent; }
  14. return text;
  15. }
  16. public static void EmitLine(this StringBuilder sb, int indent, string text)
  17. {
  18. text = text.Indent(indent);
  19. sb.AppendLine(text);
  20. }
  21. public static void EmitBlock(this StringBuilder sb, int indent, string body)
  22. {
  23. sb.EmitLine(indent, "{");
  24. var lines = body.Split(new[] { "\r\n", "\r", "\n" },StringSplitOptions.None);
  25. foreach (var line in lines)
  26. {
  27. sb.EmitLine(indent + 1, line);
  28. }
  29. sb.EmitLine(indent, "}");
  30. }
  31. public static IEnumerable<string> AsCodeBlock(this IEnumerable<string> lines)
  32. {
  33. yield return "{";
  34. foreach (var l in lines) yield return $"\t{l}";
  35. yield return "}";
  36. }
  37. public static IEnumerable<string> Indent(this IEnumerable<string> lines, int indent)
  38. {
  39. foreach (var l in lines) yield return l.Indent(indent);
  40. }
  41. }
  42. }