Newer
Older
TheVengeance-Project-IADE-Unity2D / Assets / Ink / InkLibs / InkCompiler / InkParser / InkParser_Whitespace.cs
  1. using System.Collections.Generic;
  2. namespace Ink
  3. {
  4. public partial class InkParser
  5. {
  6. // Handles both newline and endOfFile
  7. protected object EndOfLine()
  8. {
  9. return OneOf(Newline, EndOfFile);
  10. }
  11. // Allow whitespace before the actual newline
  12. protected object Newline()
  13. {
  14. Whitespace();
  15. bool gotNewline = ParseNewline () != null;
  16. // Optional \r, definite \n to support Windows (\r\n) and Mac/Unix (\n)
  17. if( !gotNewline ) {
  18. return null;
  19. } else {
  20. return ParseSuccess;
  21. }
  22. }
  23. protected object EndOfFile()
  24. {
  25. Whitespace();
  26. if (!endOfInput)
  27. return null;
  28. return ParseSuccess;
  29. }
  30. // General purpose space, returns N-count newlines (fails if no newlines)
  31. protected object MultilineWhitespace()
  32. {
  33. List<object> newlines = OneOrMore(Newline);
  34. if (newlines == null)
  35. return null;
  36. // Use content field of Token to say how many newlines there were
  37. // (in most circumstances it's unimportant)
  38. int numNewlines = newlines.Count;
  39. if (numNewlines >= 1) {
  40. return ParseSuccess;
  41. } else {
  42. return null;
  43. }
  44. }
  45. protected object Whitespace()
  46. {
  47. if( ParseCharactersFromCharSet(_inlineWhitespaceChars) != null ) {
  48. return ParseSuccess;
  49. }
  50. return null;
  51. }
  52. protected ParseRule Spaced(ParseRule rule)
  53. {
  54. return () => {
  55. Whitespace ();
  56. var result = ParseObject(rule);
  57. if (result == null) {
  58. return null;
  59. }
  60. Whitespace ();
  61. return result;
  62. };
  63. }
  64. protected object AnyWhitespace ()
  65. {
  66. bool anyWhitespace = false;
  67. while (OneOf (Whitespace, MultilineWhitespace) != null) {
  68. anyWhitespace = true;
  69. }
  70. return anyWhitespace ? ParseSuccess : null;
  71. }
  72. protected ParseRule MultiSpaced (ParseRule rule)
  73. {
  74. return () => {
  75. AnyWhitespace ();
  76. var result = ParseObject (rule);
  77. if (result == null) {
  78. return null;
  79. }
  80. AnyWhitespace ();
  81. return result;
  82. };
  83. }
  84. private CharacterSet _inlineWhitespaceChars = new CharacterSet(" \t");
  85. }
  86. }