lexer.d.ts 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. /**
  2. * Splits an input string into lexical tokens, i.e. smaller strings that are
  3. * easily identifiable by `tokens.tokenType()`.
  4. *
  5. * Lexing starts always in a "stream" context. Incomplete input may be buffered
  6. * until a complete token can be emitted.
  7. *
  8. * In addition to slices of the original input, the following control characters
  9. * may also be emitted:
  10. *
  11. * - `\x02` (Start of Text): A document starts with the next token
  12. * - `\x18` (Cancel): Unexpected end of flow-mode (indicates an error)
  13. * - `\x1f` (Unit Separator): Next token is a scalar value
  14. * - `\u{FEFF}` (Byte order mark): Emitted separately outside documents
  15. */
  16. export declare class Lexer {
  17. /**
  18. * Flag indicating whether the end of the current buffer marks the end of
  19. * all input
  20. */
  21. private atEnd;
  22. /**
  23. * Explicit indent set in block scalar header, as an offset from the current
  24. * minimum indent, so e.g. set to 1 from a header `|2+`. Set to -1 if not
  25. * explicitly set.
  26. */
  27. private blockScalarIndent;
  28. /**
  29. * Block scalars that include a + (keep) chomping indicator in their header
  30. * include trailing empty lines, which are otherwise excluded from the
  31. * scalar's contents.
  32. */
  33. private blockScalarKeep;
  34. /** Current input */
  35. private buffer;
  36. /**
  37. * Flag noting whether the map value indicator : can immediately follow this
  38. * node within a flow context.
  39. */
  40. private flowKey;
  41. /** Count of surrounding flow collection levels. */
  42. private flowLevel;
  43. /**
  44. * Minimum level of indentation required for next lines to be parsed as a
  45. * part of the current scalar value.
  46. */
  47. private indentNext;
  48. /** Indentation level of the current line. */
  49. private indentValue;
  50. /** Position of the next \n character. */
  51. private lineEndPos;
  52. /** Stores the state of the lexer if reaching the end of incpomplete input */
  53. private next;
  54. /** A pointer to `buffer`; the current position of the lexer. */
  55. private pos;
  56. /**
  57. * Generate YAML tokens from the `source` string. If `incomplete`,
  58. * a part of the last line may be left as a buffer for the next call.
  59. *
  60. * @returns A generator of lexical tokens
  61. */
  62. lex(source: string, incomplete?: boolean): Generator<string, void, any>;
  63. private atLineEnd;
  64. private charAt;
  65. private continueScalar;
  66. private getLine;
  67. private hasChars;
  68. private setNext;
  69. private peek;
  70. private parseNext;
  71. private parseStream;
  72. private parseLineStart;
  73. private parseBlockStart;
  74. private parseDocument;
  75. private parseFlowCollection;
  76. private parseQuotedScalar;
  77. private parseBlockScalarHeader;
  78. private parseBlockScalar;
  79. private parsePlainScalar;
  80. private pushCount;
  81. private pushToIndex;
  82. private pushIndicators;
  83. private pushTag;
  84. private pushNewline;
  85. private pushSpaces;
  86. private pushUntil;
  87. }