UNPKG

@haiku/player

Version:

Haiku Player is a JavaScript library for building user interfaces

111 lines 2.42 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); function Parser(str) { this.str = str; } Parser.prototype.skip = function (m) { this.str = this.str.slice(m[0].length); }; Parser.prototype.comma = function () { var m = /^, */.exec(this.str); if (!m) { return; } this.skip(m); return { type: 'comma', string: ',', }; }; Parser.prototype.ident = function () { var m = /^([\w-]+) */.exec(this.str); if (!m) { return; } this.skip(m); return { type: 'ident', string: m[1], }; }; Parser.prototype.int = function () { var m = /^((\d+)(\S+)?) */.exec(this.str); if (!m) { return; } this.skip(m); var n = ~~m[2]; var u = m[3]; return { type: 'number', string: m[1], unit: u || '', value: n, }; }; Parser.prototype.float = function () { var m = /^(((?:\d+)?\.\d+)(\S+)?) */.exec(this.str); if (!m) { return; } this.skip(m); var n = parseFloat(m[2]); var u = m[3]; return { type: 'number', string: m[1], unit: u || '', value: n, }; }; Parser.prototype.number = function () { return this.float() || this.int(); }; Parser.prototype.double = function () { var m = /^"([^"]*)" */.exec(this.str); if (!m) { return m; } this.skip(m); return { type: 'string', quote: '"', string: '"' + m[1] + '"', value: m[1], }; }; Parser.prototype.single = function () { var m = /^'([^']*)' */.exec(this.str); if (!m) { return m; } this.skip(m); return { type: 'string', quote: '\'', string: '\'' + m[1] + '\'', value: m[1], }; }; Parser.prototype.string = function () { return this.single() || this.double(); }; Parser.prototype.value = function () { return this.number() || this.ident() || this.string() || this.comma(); }; Parser.prototype.parse = function () { var vals = []; while (this.str.length) { var obj = this.value(); if (!obj) { throw new Error('failed to parse near `' + this.str.slice(0, 10) + '...`'); } vals.push(obj); } return vals; }; function parse(str) { return new Parser(str).parse(); } exports.default = parse; //# sourceMappingURL=index.js.map