UNPKG

3.24 kBJavaScriptView Raw
1'use strict';
2
3var cstScalar = require('./cst-scalar.js');
4var cstStringify = require('./cst-stringify.js');
5var cstVisit = require('./cst-visit.js');
6
7/** The byte order mark */
8const BOM = '\u{FEFF}';
9/** Start of doc-mode */
10const DOCUMENT = '\x02'; // C0: Start of Text
11/** Unexpected end of flow-mode */
12const FLOW_END = '\x18'; // C0: Cancel
13/** Next token is a scalar value */
14const SCALAR = '\x1f'; // C0: Unit Separator
15/** @returns `true` if `token` is a flow or block collection */
16const isCollection = (token) => !!token && 'items' in token;
17/** @returns `true` if `token` is a flow or block scalar; not an alias */
18const isScalar = (token) => !!token &&
19 (token.type === 'scalar' ||
20 token.type === 'single-quoted-scalar' ||
21 token.type === 'double-quoted-scalar' ||
22 token.type === 'block-scalar');
23/* istanbul ignore next */
24/** Get a printable representation of a lexer token */
25function prettyToken(token) {
26 switch (token) {
27 case BOM:
28 return '<BOM>';
29 case DOCUMENT:
30 return '<DOC>';
31 case FLOW_END:
32 return '<FLOW_END>';
33 case SCALAR:
34 return '<SCALAR>';
35 default:
36 return JSON.stringify(token);
37 }
38}
39/** Identify the type of a lexer token. May return `null` for unknown tokens. */
40function tokenType(source) {
41 switch (source) {
42 case BOM:
43 return 'byte-order-mark';
44 case DOCUMENT:
45 return 'doc-mode';
46 case FLOW_END:
47 return 'flow-error-end';
48 case SCALAR:
49 return 'scalar';
50 case '---':
51 return 'doc-start';
52 case '...':
53 return 'doc-end';
54 case '':
55 case '\n':
56 case '\r\n':
57 return 'newline';
58 case '-':
59 return 'seq-item-ind';
60 case '?':
61 return 'explicit-key-ind';
62 case ':':
63 return 'map-value-ind';
64 case '{':
65 return 'flow-map-start';
66 case '}':
67 return 'flow-map-end';
68 case '[':
69 return 'flow-seq-start';
70 case ']':
71 return 'flow-seq-end';
72 case ',':
73 return 'comma';
74 }
75 switch (source[0]) {
76 case ' ':
77 case '\t':
78 return 'space';
79 case '#':
80 return 'comment';
81 case '%':
82 return 'directive-line';
83 case '*':
84 return 'alias';
85 case '&':
86 return 'anchor';
87 case '!':
88 return 'tag';
89 case "'":
90 return 'single-quoted-scalar';
91 case '"':
92 return 'double-quoted-scalar';
93 case '|':
94 case '>':
95 return 'block-scalar-header';
96 }
97 return null;
98}
99
100exports.createScalarToken = cstScalar.createScalarToken;
101exports.resolveAsScalar = cstScalar.resolveAsScalar;
102exports.setScalarValue = cstScalar.setScalarValue;
103exports.stringify = cstStringify.stringify;
104exports.visit = cstVisit.visit;
105exports.BOM = BOM;
106exports.DOCUMENT = DOCUMENT;
107exports.FLOW_END = FLOW_END;
108exports.SCALAR = SCALAR;
109exports.isCollection = isCollection;
110exports.isScalar = isScalar;
111exports.prettyToken = prettyToken;
112exports.tokenType = tokenType;