You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
88 lines
2.9 KiB
88 lines
2.9 KiB
2 years ago
|
/**
|
||
|
* Splits an input string into lexical tokens, i.e. smaller strings that are
|
||
|
* easily identifiable by `tokens.tokenType()`.
|
||
|
*
|
||
|
* Lexing starts always in a "stream" context. Incomplete input may be buffered
|
||
|
* until a complete token can be emitted.
|
||
|
*
|
||
|
* In addition to slices of the original input, the following control characters
|
||
|
* may also be emitted:
|
||
|
*
|
||
|
* - `\x02` (Start of Text): A document starts with the next token
|
||
|
* - `\x18` (Cancel): Unexpected end of flow-mode (indicates an error)
|
||
|
* - `\x1f` (Unit Separator): Next token is a scalar value
|
||
|
* - `\u{FEFF}` (Byte order mark): Emitted separately outside documents
|
||
|
*/
|
||
|
export declare class Lexer {
|
||
|
/**
|
||
|
* Flag indicating whether the end of the current buffer marks the end of
|
||
|
* all input
|
||
|
*/
|
||
|
private atEnd;
|
||
|
/**
|
||
|
* Explicit indent set in block scalar header, as an offset from the current
|
||
|
* minimum indent, so e.g. set to 1 from a header `|2+`. Set to -1 if not
|
||
|
* explicitly set.
|
||
|
*/
|
||
|
private blockScalarIndent;
|
||
|
/**
|
||
|
* Block scalars that include a + (keep) chomping indicator in their header
|
||
|
* include trailing empty lines, which are otherwise excluded from the
|
||
|
* scalar's contents.
|
||
|
*/
|
||
|
private blockScalarKeep;
|
||
|
/** Current input */
|
||
|
private buffer;
|
||
|
/**
|
||
|
* Flag noting whether the map value indicator : can immediately follow this
|
||
|
* node within a flow context.
|
||
|
*/
|
||
|
private flowKey;
|
||
|
/** Count of surrounding flow collection levels. */
|
||
|
private flowLevel;
|
||
|
/**
|
||
|
* Minimum level of indentation required for next lines to be parsed as a
|
||
|
* part of the current scalar value.
|
||
|
*/
|
||
|
private indentNext;
|
||
|
/** Indentation level of the current line. */
|
||
|
private indentValue;
|
||
|
/** Position of the next \n character. */
|
||
|
private lineEndPos;
|
||
|
/** Stores the state of the lexer if reaching the end of incpomplete input */
|
||
|
private next;
|
||
|
/** A pointer to `buffer`; the current position of the lexer. */
|
||
|
private pos;
|
||
|
/**
|
||
|
* Generate YAML tokens from the `source` string. If `incomplete`,
|
||
|
* a part of the last line may be left as a buffer for the next call.
|
||
|
*
|
||
|
* @returns A generator of lexical tokens
|
||
|
*/
|
||
|
lex(source: string, incomplete?: boolean): Generator<string, void, unknown>;
|
||
|
private atLineEnd;
|
||
|
private charAt;
|
||
|
private continueScalar;
|
||
|
private getLine;
|
||
|
private hasChars;
|
||
|
private setNext;
|
||
|
private peek;
|
||
|
private parseNext;
|
||
|
private parseStream;
|
||
|
private parseLineStart;
|
||
|
private parseBlockStart;
|
||
|
private parseDocument;
|
||
|
private parseFlowCollection;
|
||
|
private parseQuotedScalar;
|
||
|
private parseBlockScalarHeader;
|
||
|
private parseBlockScalar;
|
||
|
private parsePlainScalar;
|
||
|
private pushCount;
|
||
|
private pushToIndex;
|
||
|
private pushIndicators;
|
||
|
private pushTag;
|
||
|
private pushNewline;
|
||
|
private pushSpaces;
|
||
|
private pushUntil;
|
||
|
}
|