@bbob/parser
Advanced tools
Comparing version 1.3.0 to 1.3.1
@@ -1,1 +0,18 @@ | ||
module.exports = require('./parse'); | ||
'use strict'; | ||
exports.__esModule = true; | ||
var _parse = require('./parse'); | ||
Object.defineProperty(exports, 'parse', { | ||
enumerable: true, | ||
get: function get() { | ||
return _parse.parse; | ||
} | ||
}); | ||
Object.defineProperty(exports, 'createTagNode', { | ||
enumerable: true, | ||
get: function get() { | ||
return _parse.createTagNode; | ||
} | ||
}); |
182
lib/lexer.js
@@ -1,37 +0,43 @@ | ||
/* eslint-disable no-plusplus,no-param-reassign */ | ||
const c = require('@bbob/plugin-helper/lib/char'); | ||
const Token = require('./Token'); | ||
'use strict'; | ||
const OPEN_BRAKET = c.getChar(c.OPEN_BRAKET); | ||
const CLOSE_BRAKET = c.getChar(c.CLOSE_BRAKET); | ||
const QUOTEMARK = c.getChar(c.QUOTEMARK); | ||
const BACKSLASH = c.getChar(c.BACKSLASH); | ||
const SLASH = c.getChar(c.SLASH); | ||
const SPACE = c.getChar(c.SPACE); | ||
const TAB = c.getChar(c.TAB); | ||
const EQ = c.getChar(c.EQ); | ||
const N = c.getChar(c.N); | ||
exports.__esModule = true; | ||
exports.createLexer = exports.createTokenOfType = undefined; | ||
const RESERVED_CHARS = [CLOSE_BRAKET, OPEN_BRAKET, QUOTEMARK, BACKSLASH, SPACE, TAB, EQ, N]; | ||
const NOT_CHAR_TOKENS = [OPEN_BRAKET, SPACE, TAB, N]; | ||
const WHITESPACES = [SPACE, TAB]; | ||
var _char = require('@bbob/plugin-helper/lib/char'); | ||
const isCharReserved = char => (RESERVED_CHARS.indexOf(char) >= 0); | ||
const isWhiteSpace = char => (WHITESPACES.indexOf(char) >= 0); | ||
const isCharToken = char => (NOT_CHAR_TOKENS.indexOf(char) === -1); | ||
var _Token = require('./Token'); | ||
const createCharGrabber = (source) => { | ||
let idx = 0; | ||
/* eslint-disable no-plusplus,no-param-reassign */ | ||
var RESERVED_CHARS = [_char.CLOSE_BRAKET, _char.OPEN_BRAKET, _char.QUOTEMARK, _char.BACKSLASH, _char.SPACE, _char.TAB, _char.EQ, _char.N]; | ||
var NOT_CHAR_TOKENS = [_char.OPEN_BRAKET, _char.SPACE, _char.TAB, _char.N]; | ||
var WHITESPACES = [_char.SPACE, _char.TAB]; | ||
const skip = () => { | ||
var isCharReserved = function isCharReserved(char) { | ||
return RESERVED_CHARS.indexOf(char) >= 0; | ||
}; | ||
var isWhiteSpace = function isWhiteSpace(char) { | ||
return WHITESPACES.indexOf(char) >= 0; | ||
}; | ||
var isCharToken = function isCharToken(char) { | ||
return NOT_CHAR_TOKENS.indexOf(char) === -1; | ||
}; | ||
var createCharGrabber = function createCharGrabber(source) { | ||
var idx = 0; | ||
var skip = function skip() { | ||
idx += 1; | ||
}; | ||
const hasNext = () => source.length > idx; | ||
var hasNext = function hasNext() { | ||
return source.length > idx; | ||
}; | ||
return { | ||
skip, | ||
hasNext, | ||
isLast: () => (idx === source.length), | ||
grabWhile: (cond) => { | ||
const start = idx; | ||
skip: skip, | ||
hasNext: hasNext, | ||
isLast: function isLast() { | ||
return idx === source.length; | ||
}, | ||
grabWhile: function grabWhile(cond) { | ||
var start = idx; | ||
@@ -44,9 +50,15 @@ while (hasNext() && cond(source[idx])) { | ||
}, | ||
getNext: () => source[idx + 1], | ||
getPrev: () => source[idx - 1], | ||
getCurr: () => source[idx], | ||
getNext: function getNext() { | ||
return source[idx + 1]; | ||
}, | ||
getPrev: function getPrev() { | ||
return source[idx - 1]; | ||
}, | ||
getCurr: function getCurr() { | ||
return source[idx]; | ||
} | ||
}; | ||
}; | ||
const trimChar = (str, charToRemove) => { | ||
var trimChar = function trimChar(str, charToRemove) { | ||
while (str.charAt(0) === charToRemove) { | ||
@@ -63,12 +75,20 @@ str = str.substring(1); | ||
const unquote = str => str.replace(BACKSLASH + QUOTEMARK, QUOTEMARK); | ||
const createToken = (type, value, r = 0, cl = 0) => new Token(type, value, r, cl); | ||
var unquote = function unquote(str) { | ||
return str.replace(_char.BACKSLASH + _char.QUOTEMARK, _char.QUOTEMARK); | ||
}; | ||
var createToken = function createToken(type, value) { | ||
var r = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; | ||
var cl = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0; | ||
return new _Token.Token(type, value, r, cl); | ||
}; | ||
function createLexer(buffer, options = {}) { | ||
let row = 0; | ||
let col = 0; | ||
function createLexer(buffer) { | ||
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; | ||
let tokenIndex = -1; | ||
const tokens = new Array(Math.floor(buffer.length)); | ||
const emitToken = (token) => { | ||
var row = 0; | ||
var col = 0; | ||
var tokenIndex = -1; | ||
var tokens = new Array(Math.floor(buffer.length)); | ||
var emitToken = function emitToken(token) { | ||
if (options.onToken) { | ||
@@ -82,12 +102,12 @@ options.onToken(token); | ||
const parseAttrs = (str) => { | ||
let tagName = null; | ||
let skipSpaces = false; | ||
var parseAttrs = function parseAttrs(str) { | ||
var tagName = null; | ||
var skipSpaces = false; | ||
const attrTokens = []; | ||
const attrCharGrabber = createCharGrabber(str); | ||
const validAttr = (val) => { | ||
const isEQ = val === EQ; | ||
const isWS = isWhiteSpace(val); | ||
const isPrevSLASH = attrCharGrabber.getPrev() === SLASH; | ||
var attrTokens = []; | ||
var attrCharGrabber = createCharGrabber(str); | ||
var validAttr = function validAttr(val) { | ||
var isEQ = val === _char.EQ; | ||
var isWS = isWhiteSpace(val); | ||
var isPrevSLASH = attrCharGrabber.getPrev() === _char.SLASH; | ||
@@ -102,3 +122,3 @@ if (tagName === null) { | ||
if (val === QUOTEMARK && !isPrevSLASH) { | ||
if (val === _char.QUOTEMARK && !isPrevSLASH) { | ||
skipSpaces = !skipSpaces; | ||
@@ -110,4 +130,4 @@ } | ||
const nextAttr = () => { | ||
const attrStr = attrCharGrabber.grabWhile(validAttr); | ||
var nextAttr = function nextAttr() { | ||
var attrStr = attrCharGrabber.grabWhile(validAttr); | ||
@@ -118,6 +138,6 @@ // first string before space is a tag name | ||
} else if (isWhiteSpace(attrCharGrabber.getCurr()) || !attrCharGrabber.hasNext()) { | ||
const escaped = unquote(trimChar(attrStr, QUOTEMARK)); | ||
attrTokens.push(createToken(Token.TYPE_ATTR_VALUE, escaped, row, col)); | ||
var escaped = unquote(trimChar(attrStr, _char.QUOTEMARK)); | ||
attrTokens.push(createToken(_Token.TYPE_ATTR_VALUE, escaped, row, col)); | ||
} else { | ||
attrTokens.push(createToken(Token.TYPE_ATTR_NAME, attrStr, row, col)); | ||
attrTokens.push(createToken(_Token.TYPE_ATTR_NAME, attrStr, row, col)); | ||
} | ||
@@ -135,8 +155,8 @@ | ||
const grabber = createCharGrabber(buffer); | ||
var grabber = createCharGrabber(buffer); | ||
const next = () => { | ||
const char = grabber.getCurr(); | ||
var next = function next() { | ||
var char = grabber.getCurr(); | ||
if (char === N) { | ||
if (char === _char.N) { | ||
grabber.skip(); | ||
@@ -146,37 +166,39 @@ col = 0; | ||
emitToken(createToken(Token.TYPE_NEW_LINE, char, row, col)); | ||
emitToken(createToken(_Token.TYPE_NEW_LINE, char, row, col)); | ||
} else if (isWhiteSpace(char)) { | ||
const str = grabber.grabWhile(isWhiteSpace); | ||
emitToken(createToken(Token.TYPE_SPACE, str, row, col)); | ||
} else if (char === OPEN_BRAKET) { | ||
const nextChar = grabber.getNext(); | ||
var str = grabber.grabWhile(isWhiteSpace); | ||
emitToken(createToken(_Token.TYPE_SPACE, str, row, col)); | ||
} else if (char === _char.OPEN_BRAKET) { | ||
var nextChar = grabber.getNext(); | ||
grabber.skip(); // skip [ | ||
if (isCharReserved(nextChar)) { | ||
emitToken(createToken(Token.TYPE_WORD, char, row, col)); | ||
emitToken(createToken(_Token.TYPE_WORD, char, row, col)); | ||
} else { | ||
const str = grabber.grabWhile(val => val !== CLOSE_BRAKET); | ||
var _str = grabber.grabWhile(function (val) { | ||
return val !== _char.CLOSE_BRAKET; | ||
}); | ||
grabber.skip(); // skip ] | ||
if (!(str.indexOf(EQ) > 0) || str[0] === SLASH) { | ||
emitToken(createToken(Token.TYPE_TAG, str, row, col)); | ||
if (!(_str.indexOf(_char.EQ) > 0) || _str[0] === _char.SLASH) { | ||
emitToken(createToken(_Token.TYPE_TAG, _str, row, col)); | ||
} else { | ||
const parsed = parseAttrs(str); | ||
var parsed = parseAttrs(_str); | ||
emitToken(createToken(Token.TYPE_TAG, parsed.tag, row, col)); | ||
emitToken(createToken(_Token.TYPE_TAG, parsed.tag, row, col)); | ||
parsed.attrs.map(emitToken); | ||
} | ||
} | ||
} else if (char === CLOSE_BRAKET) { | ||
} else if (char === _char.CLOSE_BRAKET) { | ||
grabber.skip(); | ||
emitToken(createToken(Token.TYPE_WORD, char, row, col)); | ||
emitToken(createToken(_Token.TYPE_WORD, char, row, col)); | ||
} else if (isCharToken(char)) { | ||
const str = grabber.grabWhile(isCharToken); | ||
var _str2 = grabber.grabWhile(isCharToken); | ||
emitToken(createToken(Token.TYPE_WORD, str, row, col)); | ||
emitToken(createToken(_Token.TYPE_WORD, _str2, row, col)); | ||
} | ||
}; | ||
const tokenize = () => { | ||
var tokenize = function tokenize() { | ||
while (grabber.hasNext()) { | ||
@@ -191,4 +213,4 @@ next(); | ||
const isTokenNested = (token) => { | ||
const value = OPEN_BRAKET + SLASH + token.getValue(); | ||
var isTokenNested = function isTokenNested(token) { | ||
var value = _char.OPEN_BRAKET + _char.SLASH + token.getValue(); | ||
return buffer.indexOf(value) > -1; | ||
@@ -198,8 +220,8 @@ }; | ||
return { | ||
tokenize, | ||
isTokenNested, | ||
tokenize: tokenize, | ||
isTokenNested: isTokenNested | ||
}; | ||
} | ||
module.exports = createLexer; | ||
module.exports.createTokenOfType = createToken; | ||
var createTokenOfType = exports.createTokenOfType = createToken; | ||
exports.createLexer = createLexer; |
@@ -1,4 +0,14 @@ | ||
const createLexer = require('./lexer'); | ||
const TagNode = require('@bbob/plugin-helper/lib/TagNode'); | ||
'use strict'; | ||
exports.__esModule = true; | ||
exports.parse = exports.createTagNode = undefined; | ||
var _TagNode = require('@bbob/plugin-helper/lib/TagNode'); | ||
var _TagNode2 = _interopRequireDefault(_TagNode); | ||
var _lexer = require('./lexer'); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
/** | ||
@@ -8,3 +18,3 @@ * @private | ||
*/ | ||
let nodes; | ||
var nodes = void 0; | ||
/** | ||
@@ -14,3 +24,3 @@ * @private | ||
*/ | ||
let nestedNodes; | ||
var nestedNodes = void 0; | ||
/** | ||
@@ -20,3 +30,3 @@ * @private | ||
*/ | ||
let tagNodes; | ||
var tagNodes = void 0; | ||
/** | ||
@@ -26,11 +36,13 @@ * @private | ||
*/ | ||
let tagNodesAttrName; | ||
var tagNodesAttrName = void 0; | ||
let options = {}; | ||
let tokenizer = null; | ||
var options = {}; | ||
var tokenizer = null; | ||
// eslint-disable-next-line no-unused-vars | ||
let tokens = null; | ||
var tokens = null; | ||
const createTokenizer = (input, onToken) => createLexer(input, { onToken }); | ||
var createTokenizer = function createTokenizer(input, onToken) { | ||
return (0, _lexer.createLexer)(input, { onToken: onToken }); | ||
}; | ||
@@ -42,3 +54,5 @@ /** | ||
*/ | ||
const isTagNested = token => tokenizer.isTokenNested(token); | ||
var isTagNested = function isTagNested(token) { | ||
return tokenizer.isTokenNested(token); | ||
}; | ||
@@ -49,3 +63,5 @@ /** | ||
*/ | ||
const getTagNode = () => (tagNodes.length ? tagNodes[tagNodes.length - 1] : null); | ||
var getTagNode = function getTagNode() { | ||
return tagNodes.length ? tagNodes[tagNodes.length - 1] : null; | ||
}; | ||
@@ -57,3 +73,5 @@ /** | ||
*/ | ||
const createTagNode = token => tagNodes.push(TagNode.create(token.getValue())); | ||
var createTagNode = function createTagNode(token) { | ||
return tagNodes.push(_TagNode2.default.create(token.getValue())); | ||
}; | ||
/** | ||
@@ -64,3 +82,5 @@ * @private | ||
*/ | ||
const createTagNodeAttrName = token => tagNodesAttrName.push(token.getValue()); | ||
var createTagNodeAttrName = function createTagNodeAttrName(token) { | ||
return tagNodesAttrName.push(token.getValue()); | ||
}; | ||
@@ -71,4 +91,5 @@ /** | ||
*/ | ||
const getTagNodeAttrName = () => | ||
(tagNodesAttrName.length ? tagNodesAttrName[tagNodesAttrName.length - 1] : getTagNode().tag); | ||
var getTagNodeAttrName = function getTagNodeAttrName() { | ||
return tagNodesAttrName.length ? tagNodesAttrName[tagNodesAttrName.length - 1] : getTagNode().tag; | ||
}; | ||
@@ -79,3 +100,3 @@ /** | ||
*/ | ||
const clearTagNodeAttrName = () => { | ||
var clearTagNodeAttrName = function clearTagNodeAttrName() { | ||
if (tagNodesAttrName.length) { | ||
@@ -90,3 +111,3 @@ tagNodesAttrName.pop(); | ||
*/ | ||
const clearTagNode = () => { | ||
var clearTagNode = function clearTagNode() { | ||
if (tagNodes.length) { | ||
@@ -103,5 +124,5 @@ tagNodes.pop(); | ||
*/ | ||
const getNodes = () => { | ||
var getNodes = function getNodes() { | ||
if (nestedNodes.length) { | ||
const nestedNode = nestedNodes[nestedNodes.length - 1]; | ||
var nestedNode = nestedNodes[nestedNodes.length - 1]; | ||
return nestedNode.content; | ||
@@ -117,3 +138,3 @@ } | ||
*/ | ||
const appendNode = (tag) => { | ||
var appendNode = function appendNode(tag) { | ||
getNodes().push(tag); | ||
@@ -127,3 +148,3 @@ }; | ||
*/ | ||
const isAllowedTag = (value) => { | ||
var isAllowedTag = function isAllowedTag(value) { | ||
if (options.onlyAllowTags && options.onlyAllowTags.length) { | ||
@@ -139,3 +160,3 @@ return options.onlyAllowTags.indexOf(value) >= 0; | ||
*/ | ||
const handleTagStart = (token) => { | ||
var handleTagStart = function handleTagStart(token) { | ||
if (token.isStart()) { | ||
@@ -157,7 +178,7 @@ createTagNode(token); | ||
*/ | ||
const handleTagEnd = (token) => { | ||
var handleTagEnd = function handleTagEnd(token) { | ||
if (token.isEnd()) { | ||
clearTagNode(); | ||
const lastNestedNode = nestedNodes.pop(); | ||
var lastNestedNode = nestedNodes.pop(); | ||
@@ -167,9 +188,9 @@ if (lastNestedNode) { | ||
} else if (options.onError) { | ||
const tag = token.getValue(); | ||
const line = token.getLine(); | ||
const column = token.getColumn(); | ||
var tag = token.getValue(); | ||
var line = token.getLine(); | ||
var column = token.getColumn(); | ||
options.onError({ | ||
message: `Inconsistent tag '${tag}' on line ${line} and column ${column}`, | ||
message: 'Inconsistent tag \'' + tag + '\' on line ' + line + ' and column ' + column, | ||
lineNumber: line, | ||
columnNumber: column, | ||
columnNumber: column | ||
}); | ||
@@ -184,3 +205,3 @@ } | ||
*/ | ||
const handleTagToken = (token) => { | ||
var handleTagToken = function handleTagToken(token) { | ||
if (token.isTag()) { | ||
@@ -203,4 +224,4 @@ if (isAllowedTag(token.getName())) { | ||
*/ | ||
const handleTagNode = (token) => { | ||
const tagNode = getTagNode(); | ||
var handleTagNode = function handleTagNode(token) { | ||
var tagNode = getTagNode(); | ||
@@ -226,3 +247,3 @@ if (tagNode) { | ||
*/ | ||
const parseToken = (token) => { | ||
var parseToken = function parseToken(token) { | ||
handleTagToken(token); | ||
@@ -236,3 +257,5 @@ handleTagNode(token); | ||
*/ | ||
const parse = (input, opts = {}) => { | ||
var parse = function parse(input) { | ||
var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; | ||
options = opts; | ||
@@ -251,3 +274,4 @@ tokenizer = (opts.createTokenizer ? opts.createTokenizer : createTokenizer)(input, parseToken); | ||
module.exports = parse; | ||
module.exports.createTagNode = createTagNode; | ||
exports.createTagNode = createTagNode; | ||
exports.parse = parse; | ||
exports.default = parse; |
165
lib/Token.js
@@ -1,38 +0,55 @@ | ||
const { | ||
getChar, | ||
OPEN_BRAKET, | ||
CLOSE_BRAKET, | ||
SLASH, | ||
} = require('@bbob/plugin-helper/lib/char'); | ||
'use strict'; | ||
exports.__esModule = true; | ||
exports.Token = exports.TYPE_NEW_LINE = exports.TYPE_SPACE = exports.TYPE_ATTR_VALUE = exports.TYPE_ATTR_NAME = exports.TYPE_TAG = exports.TYPE_WORD = exports.COLUMN_ID = exports.LINE_ID = exports.VALUE_ID = exports.TYPE_ID = undefined; | ||
var _char = require('@bbob/plugin-helper/lib/char'); | ||
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } | ||
// type, value, line, row, | ||
const TOKEN_TYPE_ID = 'type'; // 0; | ||
const TOKEN_VALUE_ID = 'value'; // 1; | ||
const TOKEN_COLUMN_ID = 'row'; // 2; | ||
const TOKEN_LINE_ID = 'line'; // 3; | ||
var TOKEN_TYPE_ID = 'type'; // 0; | ||
var TOKEN_VALUE_ID = 'value'; // 1; | ||
var TOKEN_COLUMN_ID = 'row'; // 2; | ||
var TOKEN_LINE_ID = 'line'; // 3; | ||
const TOKEN_TYPE_WORD = 'word'; | ||
const TOKEN_TYPE_TAG = 'tag'; | ||
const TOKEN_TYPE_ATTR_NAME = 'attr-name'; | ||
const TOKEN_TYPE_ATTR_VALUE = 'attr-value'; | ||
const TOKEN_TYPE_SPACE = 'space'; | ||
const TOKEN_TYPE_NEW_LINE = 'new-line'; | ||
var TOKEN_TYPE_WORD = 'word'; | ||
var TOKEN_TYPE_TAG = 'tag'; | ||
var TOKEN_TYPE_ATTR_NAME = 'attr-name'; | ||
var TOKEN_TYPE_ATTR_VALUE = 'attr-value'; | ||
var TOKEN_TYPE_SPACE = 'space'; | ||
var TOKEN_TYPE_NEW_LINE = 'new-line'; | ||
const getTokenValue = token => token[TOKEN_VALUE_ID]; | ||
const getTokenLine = token => token[TOKEN_LINE_ID]; | ||
const getTokenColumn = token => token[TOKEN_COLUMN_ID]; | ||
var getTokenValue = function getTokenValue(token) { | ||
return token[TOKEN_VALUE_ID]; | ||
}; | ||
var getTokenLine = function getTokenLine(token) { | ||
return token[TOKEN_LINE_ID]; | ||
}; | ||
var getTokenColumn = function getTokenColumn(token) { | ||
return token[TOKEN_COLUMN_ID]; | ||
}; | ||
const isTextToken = token => | ||
token[TOKEN_TYPE_ID] === TOKEN_TYPE_SPACE || | ||
token[TOKEN_TYPE_ID] === TOKEN_TYPE_NEW_LINE || | ||
token[TOKEN_TYPE_ID] === TOKEN_TYPE_WORD; | ||
var isTextToken = function isTextToken(token) { | ||
return token[TOKEN_TYPE_ID] === TOKEN_TYPE_SPACE || token[TOKEN_TYPE_ID] === TOKEN_TYPE_NEW_LINE || token[TOKEN_TYPE_ID] === TOKEN_TYPE_WORD; | ||
}; | ||
const isTagToken = token => token[TOKEN_TYPE_ID] === TOKEN_TYPE_TAG; | ||
const isTagEnd = token => getTokenValue(token).charCodeAt(0) === SLASH; | ||
const isTagStart = token => !isTagEnd(token); | ||
const isAttrNameToken = token => token[TOKEN_TYPE_ID] === TOKEN_TYPE_ATTR_NAME; | ||
const isAttrValueToken = token => token[TOKEN_TYPE_ID] === TOKEN_TYPE_ATTR_VALUE; | ||
var isTagToken = function isTagToken(token) { | ||
return token[TOKEN_TYPE_ID] === TOKEN_TYPE_TAG; | ||
}; | ||
var isTagEnd = function isTagEnd(token) { | ||
return getTokenValue(token).charCodeAt(0) === _char.SLASH.charCodeAt(0); | ||
}; | ||
var isTagStart = function isTagStart(token) { | ||
return !isTagEnd(token); | ||
}; | ||
var isAttrNameToken = function isAttrNameToken(token) { | ||
return token[TOKEN_TYPE_ID] === TOKEN_TYPE_ATTR_NAME; | ||
}; | ||
var isAttrValueToken = function isAttrValueToken(token) { | ||
return token[TOKEN_TYPE_ID] === TOKEN_TYPE_ATTR_VALUE; | ||
}; | ||
const getTagName = (token) => { | ||
const value = getTokenValue(token); | ||
var getTagName = function getTagName(token) { | ||
var value = getTokenValue(token); | ||
@@ -42,11 +59,11 @@ return isTagEnd(token) ? value.slice(1) : value; | ||
const convertTagToText = (token) => { | ||
let text = getChar(OPEN_BRAKET); | ||
var convertTagToText = function convertTagToText(token) { | ||
var text = _char.OPEN_BRAKET; | ||
if (isTagEnd(token)) { | ||
text += getChar(SLASH); | ||
text += _char.SLASH; | ||
} | ||
text += getTokenValue(token); | ||
text += getChar(CLOSE_BRAKET); | ||
text += _char.CLOSE_BRAKET; | ||
@@ -56,4 +73,6 @@ return text; | ||
class Token { | ||
constructor(type, value, line, row) { | ||
var Token = function () { | ||
function Token(type, value, line, row) { | ||
_classCallCheck(this, Token); | ||
this.type = String(type); | ||
@@ -65,62 +84,64 @@ this.value = String(value); | ||
isEmpty() { | ||
Token.prototype.isEmpty = function isEmpty() { | ||
return !!this.type; | ||
} | ||
}; | ||
isText() { | ||
Token.prototype.isText = function isText() { | ||
return isTextToken(this); | ||
} | ||
}; | ||
isTag() { | ||
Token.prototype.isTag = function isTag() { | ||
return isTagToken(this); | ||
} | ||
}; | ||
isAttrName() { | ||
Token.prototype.isAttrName = function isAttrName() { | ||
return isAttrNameToken(this); | ||
} | ||
}; | ||
isAttrValue() { | ||
Token.prototype.isAttrValue = function isAttrValue() { | ||
return isAttrValueToken(this); | ||
} | ||
}; | ||
isStart() { | ||
Token.prototype.isStart = function isStart() { | ||
return isTagStart(this); | ||
} | ||
}; | ||
isEnd() { | ||
Token.prototype.isEnd = function isEnd() { | ||
return isTagEnd(this); | ||
} | ||
}; | ||
getName() { | ||
Token.prototype.getName = function getName() { | ||
return getTagName(this); | ||
} | ||
}; | ||
getValue() { | ||
Token.prototype.getValue = function getValue() { | ||
return getTokenValue(this); | ||
} | ||
}; | ||
getLine() { | ||
Token.prototype.getLine = function getLine() { | ||
return getTokenLine(this); | ||
} | ||
}; | ||
getColumn() { | ||
Token.prototype.getColumn = function getColumn() { | ||
return getTokenColumn(this); | ||
} | ||
}; | ||
toString() { | ||
Token.prototype.toString = function toString() { | ||
return convertTagToText(this); | ||
} | ||
} | ||
}; | ||
module.exports = Token; | ||
return Token; | ||
}(); | ||
module.exports.TYPE_ID = TOKEN_TYPE_ID; | ||
module.exports.VALUE_ID = TOKEN_VALUE_ID; | ||
module.exports.LINE_ID = TOKEN_LINE_ID; | ||
module.exports.COLUMN_ID = TOKEN_COLUMN_ID; | ||
module.exports.TYPE_WORD = TOKEN_TYPE_WORD; | ||
module.exports.TYPE_TAG = TOKEN_TYPE_TAG; | ||
module.exports.TYPE_ATTR_NAME = TOKEN_TYPE_ATTR_NAME; | ||
module.exports.TYPE_ATTR_VALUE = TOKEN_TYPE_ATTR_VALUE; | ||
module.exports.TYPE_SPACE = TOKEN_TYPE_SPACE; | ||
module.exports.TYPE_NEW_LINE = TOKEN_TYPE_NEW_LINE; | ||
var TYPE_ID = exports.TYPE_ID = TOKEN_TYPE_ID; | ||
var VALUE_ID = exports.VALUE_ID = TOKEN_VALUE_ID; | ||
var LINE_ID = exports.LINE_ID = TOKEN_LINE_ID; | ||
var COLUMN_ID = exports.COLUMN_ID = TOKEN_COLUMN_ID; | ||
var TYPE_WORD = exports.TYPE_WORD = TOKEN_TYPE_WORD; | ||
var TYPE_TAG = exports.TYPE_TAG = TOKEN_TYPE_TAG; | ||
var TYPE_ATTR_NAME = exports.TYPE_ATTR_NAME = TOKEN_TYPE_ATTR_NAME; | ||
var TYPE_ATTR_VALUE = exports.TYPE_ATTR_VALUE = TOKEN_TYPE_ATTR_VALUE; | ||
var TYPE_SPACE = exports.TYPE_SPACE = TOKEN_TYPE_SPACE; | ||
var TYPE_NEW_LINE = exports.TYPE_NEW_LINE = TOKEN_TYPE_NEW_LINE; | ||
exports.Token = Token; | ||
exports.default = Token; |
{ | ||
"name": "@bbob/parser", | ||
"version": "1.3.0", | ||
"description": "Fast, flexible, and lean implementation of BBcode parser", | ||
"homepage": "https://github.com/JiLiZART/bbob", | ||
"version": "1.3.1", | ||
"description": "Just parses BBcode to AST array", | ||
"keywords": [ | ||
"bbcode", | ||
"parser", | ||
"fast", | ||
"ast", | ||
"bbcode parser", | ||
"bbcodeparser", | ||
"bbob", | ||
"serializer", | ||
"bbcode serializer", | ||
"bbcode serializer", | ||
"bbcodeserializer", | ||
"parse", | ||
"serialize", | ||
"html" | ||
"array", | ||
"parse" | ||
], | ||
"main": "lib/index.js", | ||
"dependencies": { | ||
"@bbob/plugin-helper": "^1.1.0" | ||
"@bbob/plugin-helper": "^1.1.1" | ||
}, | ||
"main": "lib/index.js", | ||
"module": "es/index.js", | ||
"jsnext:main": "es/index.js", | ||
"browser": "dist/index.js", | ||
"browserName": "BbobParser", | ||
"homepage": "https://github.com/JiLiZART/bbob", | ||
"author": "Nikolay Kostyurin <jilizart@gmail.com>", | ||
"license": "MIT", | ||
"bugs": { | ||
"url": "https://github.com/JiLiZART/bbob/issues" | ||
}, | ||
"repository": { | ||
@@ -30,4 +34,6 @@ "type": "git", | ||
"scripts": { | ||
"build": "../../node_modules/.bin/rollup -c", | ||
"dev": "../../node_modules/.bin/rollup -c -w", | ||
"build:commonjs": "../../node_modules/.bin/cross-env BABEL_ENV=commonjs ../../node_modules/.bin/babel src --out-dir lib", | ||
"build:es": "../../node_modules/.bin/cross-env BABEL_ENV=es ../../node_modules/.bin/babel src --out-dir es", | ||
"build:umd": "../../node_modules/.bin/cross-env BABEL_ENV=rollup NODE_ENV=development ../../node_modules/.bin/rollup --config ../../rollup.config.js", | ||
"build": "npm run build:commonjs && npm run build:es && npm run build:umd", | ||
"test": "../../node_modules/.bin/jest --", | ||
@@ -38,4 +44,2 @@ "cover": "../../node_modules/.bin/jest --coverage", | ||
}, | ||
"author": "Nikolay Kostyurin <jilizart@gmail.com>", | ||
"license": "MIT", | ||
"size-limit": [ | ||
@@ -50,4 +54,7 @@ { | ||
"files": [ | ||
"lib" | ||
"dist", | ||
"lib", | ||
"src", | ||
"es" | ||
] | ||
} |
@@ -8,4 +8,12 @@ # @bbob/parser | ||
## Install | ||
```bash | ||
npm i @bbob/parser | ||
``` | ||
## Usage | ||
### API | ||
```js | ||
@@ -21,3 +29,3 @@ import parse from '@bbob/parser' | ||
## Results | ||
**Results to** | ||
@@ -35,1 +43,15 @@ ```json | ||
``` | ||
### PostHTML | ||
```js | ||
import render from 'posthtml-render' | ||
import parse from '@bbob/parser' | ||
const options = { | ||
onlyAllowTags: ['url', 'h'], | ||
onError: (err) => console.warn(err.message, err.lineNumber, err.columnNumber) | ||
} | ||
const ast = parse('[url=https://github.com]hello world![/url]', options) | ||
const html = render(ast) // <url url="https://github.com">hello world!</url> | ||
``` |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
No bug tracker
MaintenancePackage does not have a linked bug tracker in package.json.
Found 1 instance in 1 package
75794
17
2448
0
55
1
Updated@bbob/plugin-helper@^1.1.1