blob: a753a546af6acce26d896a36d6a3b80cb40bc650 [file] [log] [blame]
"use strict";
const Literal = require("./literal");
const isLiteral = token => token[0] === "word" && /^\$\{[\s\S]*\}$/.test(token[1]);
function literal (start) {
if (!isLiteral(start)) {
return;
}
const tokens = [];
let hasWord;
let type;
let token;
while ((token = this.tokenizer.nextToken())) {
tokens.push(token);
type = token[0];
if (type.length === 1) {
break;
} else if (type === "word") {
hasWord = true;
}
}
while (tokens.length) {
this.tokenizer.back(tokens.pop());
}
if (type === "{" || (type === ":" && !hasWord)) {
return;
}
const node = new Literal({
text: start[1],
});
this.init(node, start[2], start[3]);
return node;
}
function freeSemicolon (token) {
this.spaces += token[1];
const nodes = this.current.nodes;
const prev = nodes && nodes[nodes.length - 1];
if (prev && /^(rule|literal)$/.test(prev.type) && !prev.raws.ownSemicolon) {
prev.raws.ownSemicolon = this.spaces;
this.spaces = "";
}
}
module.exports = {
freeSemicolon: freeSemicolon,
literal: literal,
};