tap
Version:
A Test-Anything-Protocol library for JavaScript
80 lines (58 loc) • 1.73 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _constants = require("../constants");
var _Node = _interopRequireDefault(require("./Node"));
var _Range = _interopRequireDefault(require("./Range"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
class Directive extends _Node.default {
static endOfDirective(src, offset) {
let ch = src[offset];
while (ch && ch !== '\n' && ch !== '#') ch = src[offset += 1]; // last char can't be whitespace
ch = src[offset - 1];
while (ch === ' ' || ch === '\t') {
offset -= 1;
ch = src[offset - 1];
}
return offset;
}
constructor() {
super(_constants.Type.DIRECTIVE);
this.name = null;
}
get parameters() {
const raw = this.rawValue;
return raw ? raw.trim().split(/[ \t]+/) : [];
}
parseName(start) {
const {
src
} = this.context;
let offset = start;
let ch = src[offset];
while (ch && ch !== '\n' && ch !== '\t' && ch !== ' ') ch = src[offset += 1];
this.name = src.slice(start, offset);
return offset;
}
parseParameters(start) {
const {
src
} = this.context;
let offset = start;
let ch = src[offset];
while (ch && ch !== '\n' && ch !== '#') ch = src[offset += 1];
this.valueRange = new _Range.default(start, offset);
return offset;
}
parse(context, start) {
this.context = context;
let offset = this.parseName(start + 1);
offset = this.parseParameters(offset);
offset = this.parseComment(offset);
this.range = new _Range.default(start, offset);
return offset;
}
}
exports.default = Directive;