@bbob/parser
Advanced tools
Comparing version 1.3.2 to 2.0.0
@@ -295,10 +295,10 @@ (function (global, factory) { | ||
this.type = String(type); | ||
this.value = String(value); | ||
this.line = Number(line); | ||
this.row = Number(row); | ||
this[TOKEN_TYPE_ID] = String(type); | ||
this[TOKEN_VALUE_ID] = String(value); | ||
this[TOKEN_LINE_ID] = Number(line); | ||
this[TOKEN_COLUMN_ID] = Number(row); | ||
} | ||
Token.prototype.isEmpty = function isEmpty() { | ||
return !!this.type; | ||
return !!this[TOKEN_TYPE_ID]; | ||
}; | ||
@@ -361,16 +361,4 @@ | ||
var RESERVED_CHARS = [char_10, char_9, char_7, char_14, char_8, char_5, char_6, char_2]; | ||
var NOT_CHAR_TOKENS = [char_9, char_8, char_5, char_2]; | ||
var WHITESPACES = [char_8, char_5]; | ||
var EM = '!'; | ||
var isCharReserved = function isCharReserved(char$$1) { | ||
return RESERVED_CHARS.indexOf(char$$1) >= 0; | ||
}; | ||
var isWhiteSpace = function isWhiteSpace(char$$1) { | ||
return WHITESPACES.indexOf(char$$1) >= 0; | ||
}; | ||
var isCharToken = function isCharToken(char$$1) { | ||
return NOT_CHAR_TOKENS.indexOf(char$$1) === -1; | ||
}; | ||
var createCharGrabber = function createCharGrabber(source) { | ||
@@ -442,2 +430,23 @@ var idx = 0; | ||
var tokens = new Array(Math.floor(buffer.length)); | ||
var openTag = options.openTag || char_9; | ||
var closeTag = options.closeTag || char_10; | ||
var RESERVED_CHARS = [closeTag, openTag, char_7, char_14, char_8, char_5, char_6, char_2, EM]; | ||
var NOT_CHAR_TOKENS = [openTag, char_8, char_5, char_2]; | ||
var WHITESPACES = [char_8, char_5]; | ||
var SPECIAL_CHARS = [char_6, char_8, char_5]; | ||
var isCharReserved = function isCharReserved(char$$1) { | ||
return RESERVED_CHARS.indexOf(char$$1) >= 0; | ||
}; | ||
var isWhiteSpace = function isWhiteSpace(char$$1) { | ||
return WHITESPACES.indexOf(char$$1) >= 0; | ||
}; | ||
var isCharToken = function isCharToken(char$$1) { | ||
return NOT_CHAR_TOKENS.indexOf(char$$1) === -1; | ||
}; | ||
var isSpecialChar = function isSpecialChar(char$$1) { | ||
return SPECIAL_CHARS.indexOf(char$$1) >= 0; | ||
}; | ||
var emitToken = function emitToken(token) { | ||
@@ -454,24 +463,32 @@ if (options.onToken) { | ||
var tagName = null; | ||
var skipSpaces = false; | ||
var skipSpecialChars = false; | ||
var attrTokens = []; | ||
var attrCharGrabber = createCharGrabber(str); | ||
var validAttr = function validAttr(val) { | ||
var isEQ = val === char_6; | ||
var isWS = isWhiteSpace(val); | ||
var isPrevSLASH = attrCharGrabber.getPrev() === char_11; | ||
if (tagName === null) { | ||
return !(isEQ || isWS || attrCharGrabber.isLast()); | ||
var validAttr = function validAttr(char$$1) { | ||
var isEQ = char$$1 === char_6; | ||
var isWS = isWhiteSpace(char$$1); | ||
var prevChar = attrCharGrabber.getPrev(); | ||
var nextChar = attrCharGrabber.getNext(); | ||
var isPrevSLASH = prevChar === char_14; | ||
var isTagNameEmpty = tagName === null; | ||
if (isTagNameEmpty) { | ||
return (isEQ || isWS || attrCharGrabber.isLast()) === false; | ||
} | ||
if (skipSpaces && isWS) { | ||
if (skipSpecialChars && isSpecialChar(char$$1)) { | ||
return true; | ||
} | ||
if (val === char_7 && !isPrevSLASH) { | ||
skipSpaces = !skipSpaces; | ||
if (char$$1 === char_7 && !isPrevSLASH) { | ||
skipSpecialChars = !skipSpecialChars; | ||
if (!skipSpecialChars && !(nextChar === char_6 || isWhiteSpace(nextChar))) { | ||
return false; | ||
} | ||
} | ||
return !(isEQ || isWS); | ||
return (isEQ || isWS) === false; | ||
}; | ||
@@ -481,2 +498,3 @@ | ||
var attrStr = attrCharGrabber.grabWhile(validAttr); | ||
var currChar = attrCharGrabber.getCurr(); | ||
@@ -486,3 +504,3 @@ // first string before space is a tag name | ||
tagName = attrStr; | ||
} else if (isWhiteSpace(attrCharGrabber.getCurr()) || !attrCharGrabber.hasNext()) { | ||
} else if (isWhiteSpace(currChar) || currChar === char_7 || !attrCharGrabber.hasNext()) { | ||
var escaped = unquote(trimChar(attrStr, char_7)); | ||
@@ -504,9 +522,9 @@ attrTokens.push(createToken(TYPE_ATTR_VALUE, escaped, row, col)); | ||
var grabber = createCharGrabber(buffer); | ||
var bufferGrabber = createCharGrabber(buffer); | ||
var next = function next() { | ||
var char$$1 = grabber.getCurr(); | ||
var char$$1 = bufferGrabber.getCurr(); | ||
if (char$$1 === char_2) { | ||
grabber.skip(); | ||
bufferGrabber.skip(); | ||
col = 0; | ||
@@ -517,7 +535,7 @@ row++; | ||
} else if (isWhiteSpace(char$$1)) { | ||
var str = grabber.grabWhile(isWhiteSpace); | ||
var str = bufferGrabber.grabWhile(isWhiteSpace); | ||
emitToken(createToken(TYPE_SPACE, str, row, col)); | ||
} else if (char$$1 === char_9) { | ||
var nextChar = grabber.getNext(); | ||
grabber.skip(); // skip [ | ||
} else if (char$$1 === openTag) { | ||
var nextChar = bufferGrabber.getNext(); | ||
bufferGrabber.skip(); // skip [ | ||
@@ -527,6 +545,6 @@ if (isCharReserved(nextChar)) { | ||
} else { | ||
var _str = grabber.grabWhile(function (val) { | ||
return val !== char_10; | ||
var _str = bufferGrabber.grabWhile(function (val) { | ||
return val !== closeTag; | ||
}); | ||
grabber.skip(); // skip ] | ||
bufferGrabber.skip(); // skip ] | ||
@@ -542,8 +560,8 @@ if (!(_str.indexOf(char_6) > 0) || _str[0] === char_11) { | ||
} | ||
} else if (char$$1 === char_10) { | ||
grabber.skip(); | ||
} else if (char$$1 === closeTag) { | ||
bufferGrabber.skip(); | ||
emitToken(createToken(TYPE_WORD, char$$1, row, col)); | ||
} else if (isCharToken(char$$1)) { | ||
var _str2 = grabber.grabWhile(isCharToken); | ||
var _str2 = bufferGrabber.grabWhile(isCharToken); | ||
@@ -555,3 +573,3 @@ emitToken(createToken(TYPE_WORD, _str2, row, col)); | ||
var tokenize = function tokenize() { | ||
while (grabber.hasNext()) { | ||
while (bufferGrabber.hasNext()) { | ||
next(); | ||
@@ -566,3 +584,3 @@ } | ||
var isTokenNested = function isTokenNested(token) { | ||
var value = char_9 + char_11 + token.getValue(); | ||
var value = openTag + char_11 + token.getValue(); | ||
return buffer.indexOf(value) > -1; | ||
@@ -604,6 +622,2 @@ }; | ||
var createTokenizer = function createTokenizer(input, onToken) { | ||
return createLexer(input, { onToken: onToken }); | ||
}; | ||
/** | ||
@@ -622,3 +636,3 @@ * @private | ||
*/ | ||
var getTagNode = function getTagNode() { | ||
var getLastTagNode = function getLastTagNode() { | ||
return tagNodes.length ? tagNodes[tagNodes.length - 1] : null; | ||
@@ -649,3 +663,3 @@ }; | ||
var getTagNodeAttrName = function getTagNodeAttrName() { | ||
return tagNodesAttrName.length ? tagNodesAttrName[tagNodesAttrName.length - 1] : getTagNode().tag; | ||
return tagNodesAttrName.length ? tagNodesAttrName[tagNodesAttrName.length - 1] : null; | ||
}; | ||
@@ -682,2 +696,3 @@ | ||
var nestedNode = nestedNodes[nestedNodes.length - 1]; | ||
return nestedNode.content; | ||
@@ -718,5 +733,5 @@ } | ||
if (isTagNested(token)) { | ||
nestedNodes.push(getTagNode()); | ||
nestedNodes.push(getLastTagNode()); | ||
} else { | ||
appendNode(getTagNode()); | ||
appendNode(getLastTagNode()); | ||
clearTagNode(); | ||
@@ -743,2 +758,3 @@ } | ||
var column = token.getColumn(); | ||
options.onError({ | ||
@@ -776,3 +792,3 @@ message: 'Inconsistent tag \'' + tag + '\' on line ' + line + ' and column ' + column, | ||
var handleTagNode = function handleTagNode(token) { | ||
var tagNode = getTagNode(); | ||
var tagNode = getLastTagNode(); | ||
@@ -782,6 +798,13 @@ if (tagNode) { | ||
createTagNodeAttrName(token); | ||
tagNode.attr(getTagNodeAttrName(), null); | ||
tagNode.attr(getTagNodeAttrName(), ''); | ||
} else if (token.isAttrValue()) { | ||
tagNode.attr(getTagNodeAttrName(), token.getValue()); | ||
clearTagNodeAttrName(); | ||
var attrName = getTagNodeAttrName(); | ||
var attrValue = token.getValue(); | ||
if (attrName) { | ||
tagNode.attr(getTagNodeAttrName(), attrValue); | ||
clearTagNodeAttrName(); | ||
} else { | ||
tagNode.attr(attrValue, attrValue); | ||
} | ||
} else if (token.isText()) { | ||
@@ -812,3 +835,8 @@ tagNode.append(token.getValue()); | ||
options = opts; | ||
tokenizer = (opts.createTokenizer ? opts.createTokenizer : createTokenizer)(input, parseToken); | ||
tokenizer = (opts.createTokenizer ? opts.createTokenizer : createLexer)(input, { | ||
onToken: parseToken, | ||
onlyAllowTags: options.onlyAllowTags, | ||
openTag: options.openTag, | ||
closeTag: options.closeTag | ||
}); | ||
@@ -815,0 +843,0 @@ nodes = []; |
@@ -295,10 +295,10 @@ (function (global, factory) { | ||
this.type = String(type); | ||
this.value = String(value); | ||
this.line = Number(line); | ||
this.row = Number(row); | ||
this[TOKEN_TYPE_ID] = String(type); | ||
this[TOKEN_VALUE_ID] = String(value); | ||
this[TOKEN_LINE_ID] = Number(line); | ||
this[TOKEN_COLUMN_ID] = Number(row); | ||
} | ||
Token.prototype.isEmpty = function isEmpty() { | ||
return !!this.type; | ||
return !!this[TOKEN_TYPE_ID]; | ||
}; | ||
@@ -361,16 +361,4 @@ | ||
var RESERVED_CHARS = [char_10, char_9, char_7, char_14, char_8, char_5, char_6, char_2]; | ||
var NOT_CHAR_TOKENS = [char_9, char_8, char_5, char_2]; | ||
var WHITESPACES = [char_8, char_5]; | ||
var EM = '!'; | ||
var isCharReserved = function isCharReserved(char$$1) { | ||
return RESERVED_CHARS.indexOf(char$$1) >= 0; | ||
}; | ||
var isWhiteSpace = function isWhiteSpace(char$$1) { | ||
return WHITESPACES.indexOf(char$$1) >= 0; | ||
}; | ||
var isCharToken = function isCharToken(char$$1) { | ||
return NOT_CHAR_TOKENS.indexOf(char$$1) === -1; | ||
}; | ||
var createCharGrabber = function createCharGrabber(source) { | ||
@@ -442,2 +430,23 @@ var idx = 0; | ||
var tokens = new Array(Math.floor(buffer.length)); | ||
var openTag = options.openTag || char_9; | ||
var closeTag = options.closeTag || char_10; | ||
var RESERVED_CHARS = [closeTag, openTag, char_7, char_14, char_8, char_5, char_6, char_2, EM]; | ||
var NOT_CHAR_TOKENS = [openTag, char_8, char_5, char_2]; | ||
var WHITESPACES = [char_8, char_5]; | ||
var SPECIAL_CHARS = [char_6, char_8, char_5]; | ||
var isCharReserved = function isCharReserved(char$$1) { | ||
return RESERVED_CHARS.indexOf(char$$1) >= 0; | ||
}; | ||
var isWhiteSpace = function isWhiteSpace(char$$1) { | ||
return WHITESPACES.indexOf(char$$1) >= 0; | ||
}; | ||
var isCharToken = function isCharToken(char$$1) { | ||
return NOT_CHAR_TOKENS.indexOf(char$$1) === -1; | ||
}; | ||
var isSpecialChar = function isSpecialChar(char$$1) { | ||
return SPECIAL_CHARS.indexOf(char$$1) >= 0; | ||
}; | ||
var emitToken = function emitToken(token) { | ||
@@ -454,24 +463,32 @@ if (options.onToken) { | ||
var tagName = null; | ||
var skipSpaces = false; | ||
var skipSpecialChars = false; | ||
var attrTokens = []; | ||
var attrCharGrabber = createCharGrabber(str); | ||
var validAttr = function validAttr(val) { | ||
var isEQ = val === char_6; | ||
var isWS = isWhiteSpace(val); | ||
var isPrevSLASH = attrCharGrabber.getPrev() === char_11; | ||
if (tagName === null) { | ||
return !(isEQ || isWS || attrCharGrabber.isLast()); | ||
var validAttr = function validAttr(char$$1) { | ||
var isEQ = char$$1 === char_6; | ||
var isWS = isWhiteSpace(char$$1); | ||
var prevChar = attrCharGrabber.getPrev(); | ||
var nextChar = attrCharGrabber.getNext(); | ||
var isPrevSLASH = prevChar === char_14; | ||
var isTagNameEmpty = tagName === null; | ||
if (isTagNameEmpty) { | ||
return (isEQ || isWS || attrCharGrabber.isLast()) === false; | ||
} | ||
if (skipSpaces && isWS) { | ||
if (skipSpecialChars && isSpecialChar(char$$1)) { | ||
return true; | ||
} | ||
if (val === char_7 && !isPrevSLASH) { | ||
skipSpaces = !skipSpaces; | ||
if (char$$1 === char_7 && !isPrevSLASH) { | ||
skipSpecialChars = !skipSpecialChars; | ||
if (!skipSpecialChars && !(nextChar === char_6 || isWhiteSpace(nextChar))) { | ||
return false; | ||
} | ||
} | ||
return !(isEQ || isWS); | ||
return (isEQ || isWS) === false; | ||
}; | ||
@@ -481,2 +498,3 @@ | ||
var attrStr = attrCharGrabber.grabWhile(validAttr); | ||
var currChar = attrCharGrabber.getCurr(); | ||
@@ -486,3 +504,3 @@ // first string before space is a tag name | ||
tagName = attrStr; | ||
} else if (isWhiteSpace(attrCharGrabber.getCurr()) || !attrCharGrabber.hasNext()) { | ||
} else if (isWhiteSpace(currChar) || currChar === char_7 || !attrCharGrabber.hasNext()) { | ||
var escaped = unquote(trimChar(attrStr, char_7)); | ||
@@ -504,9 +522,9 @@ attrTokens.push(createToken(TYPE_ATTR_VALUE, escaped, row, col)); | ||
var grabber = createCharGrabber(buffer); | ||
var bufferGrabber = createCharGrabber(buffer); | ||
var next = function next() { | ||
var char$$1 = grabber.getCurr(); | ||
var char$$1 = bufferGrabber.getCurr(); | ||
if (char$$1 === char_2) { | ||
grabber.skip(); | ||
bufferGrabber.skip(); | ||
col = 0; | ||
@@ -517,7 +535,7 @@ row++; | ||
} else if (isWhiteSpace(char$$1)) { | ||
var str = grabber.grabWhile(isWhiteSpace); | ||
var str = bufferGrabber.grabWhile(isWhiteSpace); | ||
emitToken(createToken(TYPE_SPACE, str, row, col)); | ||
} else if (char$$1 === char_9) { | ||
var nextChar = grabber.getNext(); | ||
grabber.skip(); // skip [ | ||
} else if (char$$1 === openTag) { | ||
var nextChar = bufferGrabber.getNext(); | ||
bufferGrabber.skip(); // skip [ | ||
@@ -527,6 +545,6 @@ if (isCharReserved(nextChar)) { | ||
} else { | ||
var _str = grabber.grabWhile(function (val) { | ||
return val !== char_10; | ||
var _str = bufferGrabber.grabWhile(function (val) { | ||
return val !== closeTag; | ||
}); | ||
grabber.skip(); // skip ] | ||
bufferGrabber.skip(); // skip ] | ||
@@ -542,8 +560,8 @@ if (!(_str.indexOf(char_6) > 0) || _str[0] === char_11) { | ||
} | ||
} else if (char$$1 === char_10) { | ||
grabber.skip(); | ||
} else if (char$$1 === closeTag) { | ||
bufferGrabber.skip(); | ||
emitToken(createToken(TYPE_WORD, char$$1, row, col)); | ||
} else if (isCharToken(char$$1)) { | ||
var _str2 = grabber.grabWhile(isCharToken); | ||
var _str2 = bufferGrabber.grabWhile(isCharToken); | ||
@@ -555,3 +573,3 @@ emitToken(createToken(TYPE_WORD, _str2, row, col)); | ||
var tokenize = function tokenize() { | ||
while (grabber.hasNext()) { | ||
while (bufferGrabber.hasNext()) { | ||
next(); | ||
@@ -566,3 +584,3 @@ } | ||
var isTokenNested = function isTokenNested(token) { | ||
var value = char_9 + char_11 + token.getValue(); | ||
var value = openTag + char_11 + token.getValue(); | ||
return buffer.indexOf(value) > -1; | ||
@@ -604,6 +622,2 @@ }; | ||
var createTokenizer = function createTokenizer(input, onToken) { | ||
return createLexer(input, { onToken: onToken }); | ||
}; | ||
/** | ||
@@ -622,3 +636,3 @@ * @private | ||
*/ | ||
var getTagNode = function getTagNode() { | ||
var getLastTagNode = function getLastTagNode() { | ||
return tagNodes.length ? tagNodes[tagNodes.length - 1] : null; | ||
@@ -649,3 +663,3 @@ }; | ||
var getTagNodeAttrName = function getTagNodeAttrName() { | ||
return tagNodesAttrName.length ? tagNodesAttrName[tagNodesAttrName.length - 1] : getTagNode().tag; | ||
return tagNodesAttrName.length ? tagNodesAttrName[tagNodesAttrName.length - 1] : null; | ||
}; | ||
@@ -682,2 +696,3 @@ | ||
var nestedNode = nestedNodes[nestedNodes.length - 1]; | ||
return nestedNode.content; | ||
@@ -718,5 +733,5 @@ } | ||
if (isTagNested(token)) { | ||
nestedNodes.push(getTagNode()); | ||
nestedNodes.push(getLastTagNode()); | ||
} else { | ||
appendNode(getTagNode()); | ||
appendNode(getLastTagNode()); | ||
clearTagNode(); | ||
@@ -743,2 +758,3 @@ } | ||
var column = token.getColumn(); | ||
options.onError({ | ||
@@ -776,3 +792,3 @@ message: 'Inconsistent tag \'' + tag + '\' on line ' + line + ' and column ' + column, | ||
var handleTagNode = function handleTagNode(token) { | ||
var tagNode = getTagNode(); | ||
var tagNode = getLastTagNode(); | ||
@@ -782,6 +798,13 @@ if (tagNode) { | ||
createTagNodeAttrName(token); | ||
tagNode.attr(getTagNodeAttrName(), null); | ||
tagNode.attr(getTagNodeAttrName(), ''); | ||
} else if (token.isAttrValue()) { | ||
tagNode.attr(getTagNodeAttrName(), token.getValue()); | ||
clearTagNodeAttrName(); | ||
var attrName = getTagNodeAttrName(); | ||
var attrValue = token.getValue(); | ||
if (attrName) { | ||
tagNode.attr(getTagNodeAttrName(), attrValue); | ||
clearTagNodeAttrName(); | ||
} else { | ||
tagNode.attr(attrValue, attrValue); | ||
} | ||
} else if (token.isText()) { | ||
@@ -812,3 +835,8 @@ tagNode.append(token.getValue()); | ||
options = opts; | ||
tokenizer = (opts.createTokenizer ? opts.createTokenizer : createTokenizer)(input, parseToken); | ||
tokenizer = (opts.createTokenizer ? opts.createTokenizer : createLexer)(input, { | ||
onToken: parseToken, | ||
onlyAllowTags: options.onlyAllowTags, | ||
openTag: options.openTag, | ||
closeTag: options.closeTag | ||
}); | ||
@@ -815,0 +843,0 @@ nodes = []; |
@@ -6,16 +6,4 @@ /* eslint-disable no-plusplus,no-param-reassign */ | ||
var RESERVED_CHARS = [CLOSE_BRAKET, OPEN_BRAKET, QUOTEMARK, BACKSLASH, SPACE, TAB, EQ, N]; | ||
var NOT_CHAR_TOKENS = [OPEN_BRAKET, SPACE, TAB, N]; | ||
var WHITESPACES = [SPACE, TAB]; | ||
var EM = '!'; | ||
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) { | ||
@@ -87,2 +75,23 @@ var idx = 0; | ||
var tokens = new Array(Math.floor(buffer.length)); | ||
var openTag = options.openTag || OPEN_BRAKET; | ||
var closeTag = options.closeTag || CLOSE_BRAKET; | ||
var RESERVED_CHARS = [closeTag, openTag, QUOTEMARK, BACKSLASH, SPACE, TAB, EQ, N, EM]; | ||
var NOT_CHAR_TOKENS = [openTag, SPACE, TAB, N]; | ||
var WHITESPACES = [SPACE, TAB]; | ||
var SPECIAL_CHARS = [EQ, SPACE, TAB]; | ||
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 isSpecialChar = function isSpecialChar(char) { | ||
return SPECIAL_CHARS.indexOf(char) >= 0; | ||
}; | ||
var emitToken = function emitToken(token) { | ||
@@ -99,24 +108,32 @@ if (options.onToken) { | ||
var tagName = null; | ||
var skipSpaces = false; | ||
var skipSpecialChars = false; | ||
var attrTokens = []; | ||
var attrCharGrabber = createCharGrabber(str); | ||
var validAttr = function validAttr(val) { | ||
var isEQ = val === EQ; | ||
var isWS = isWhiteSpace(val); | ||
var isPrevSLASH = attrCharGrabber.getPrev() === SLASH; | ||
if (tagName === null) { | ||
return !(isEQ || isWS || attrCharGrabber.isLast()); | ||
var validAttr = function validAttr(char) { | ||
var isEQ = char === EQ; | ||
var isWS = isWhiteSpace(char); | ||
var prevChar = attrCharGrabber.getPrev(); | ||
var nextChar = attrCharGrabber.getNext(); | ||
var isPrevSLASH = prevChar === BACKSLASH; | ||
var isTagNameEmpty = tagName === null; | ||
if (isTagNameEmpty) { | ||
return (isEQ || isWS || attrCharGrabber.isLast()) === false; | ||
} | ||
if (skipSpaces && isWS) { | ||
if (skipSpecialChars && isSpecialChar(char)) { | ||
return true; | ||
} | ||
if (val === QUOTEMARK && !isPrevSLASH) { | ||
skipSpaces = !skipSpaces; | ||
if (char === QUOTEMARK && !isPrevSLASH) { | ||
skipSpecialChars = !skipSpecialChars; | ||
if (!skipSpecialChars && !(nextChar === EQ || isWhiteSpace(nextChar))) { | ||
return false; | ||
} | ||
} | ||
return !(isEQ || isWS); | ||
return (isEQ || isWS) === false; | ||
}; | ||
@@ -126,2 +143,3 @@ | ||
var attrStr = attrCharGrabber.grabWhile(validAttr); | ||
var currChar = attrCharGrabber.getCurr(); | ||
@@ -131,3 +149,3 @@ // first string before space is a tag name | ||
tagName = attrStr; | ||
} else if (isWhiteSpace(attrCharGrabber.getCurr()) || !attrCharGrabber.hasNext()) { | ||
} else if (isWhiteSpace(currChar) || currChar === QUOTEMARK || !attrCharGrabber.hasNext()) { | ||
var escaped = unquote(trimChar(attrStr, QUOTEMARK)); | ||
@@ -149,9 +167,9 @@ attrTokens.push(createToken(TYPE_ATTR_VALUE, escaped, row, col)); | ||
var grabber = createCharGrabber(buffer); | ||
var bufferGrabber = createCharGrabber(buffer); | ||
var next = function next() { | ||
var char = grabber.getCurr(); | ||
var char = bufferGrabber.getCurr(); | ||
if (char === N) { | ||
grabber.skip(); | ||
bufferGrabber.skip(); | ||
col = 0; | ||
@@ -162,7 +180,7 @@ row++; | ||
} else if (isWhiteSpace(char)) { | ||
var str = grabber.grabWhile(isWhiteSpace); | ||
var str = bufferGrabber.grabWhile(isWhiteSpace); | ||
emitToken(createToken(TYPE_SPACE, str, row, col)); | ||
} else if (char === OPEN_BRAKET) { | ||
var nextChar = grabber.getNext(); | ||
grabber.skip(); // skip [ | ||
} else if (char === openTag) { | ||
var nextChar = bufferGrabber.getNext(); | ||
bufferGrabber.skip(); // skip [ | ||
@@ -172,6 +190,6 @@ if (isCharReserved(nextChar)) { | ||
} else { | ||
var _str = grabber.grabWhile(function (val) { | ||
return val !== CLOSE_BRAKET; | ||
var _str = bufferGrabber.grabWhile(function (val) { | ||
return val !== closeTag; | ||
}); | ||
grabber.skip(); // skip ] | ||
bufferGrabber.skip(); // skip ] | ||
@@ -187,8 +205,8 @@ if (!(_str.indexOf(EQ) > 0) || _str[0] === SLASH) { | ||
} | ||
} else if (char === CLOSE_BRAKET) { | ||
grabber.skip(); | ||
} else if (char === closeTag) { | ||
bufferGrabber.skip(); | ||
emitToken(createToken(TYPE_WORD, char, row, col)); | ||
} else if (isCharToken(char)) { | ||
var _str2 = grabber.grabWhile(isCharToken); | ||
var _str2 = bufferGrabber.grabWhile(isCharToken); | ||
@@ -200,3 +218,3 @@ emitToken(createToken(TYPE_WORD, _str2, row, col)); | ||
var tokenize = function tokenize() { | ||
while (grabber.hasNext()) { | ||
while (bufferGrabber.hasNext()) { | ||
next(); | ||
@@ -211,3 +229,3 @@ } | ||
var isTokenNested = function isTokenNested(token) { | ||
var value = OPEN_BRAKET + SLASH + token.getValue(); | ||
var value = openTag + SLASH + token.getValue(); | ||
return buffer.indexOf(value) > -1; | ||
@@ -214,0 +232,0 @@ }; |
@@ -31,6 +31,2 @@ import TagNode from '@bbob/plugin-helper/lib/TagNode'; | ||
var createTokenizer = function createTokenizer(input, onToken) { | ||
return createLexer(input, { onToken: onToken }); | ||
}; | ||
/** | ||
@@ -49,3 +45,3 @@ * @private | ||
*/ | ||
var getTagNode = function getTagNode() { | ||
var getLastTagNode = function getLastTagNode() { | ||
return tagNodes.length ? tagNodes[tagNodes.length - 1] : null; | ||
@@ -76,3 +72,3 @@ }; | ||
var getTagNodeAttrName = function getTagNodeAttrName() { | ||
return tagNodesAttrName.length ? tagNodesAttrName[tagNodesAttrName.length - 1] : getTagNode().tag; | ||
return tagNodesAttrName.length ? tagNodesAttrName[tagNodesAttrName.length - 1] : null; | ||
}; | ||
@@ -109,2 +105,3 @@ | ||
var nestedNode = nestedNodes[nestedNodes.length - 1]; | ||
return nestedNode.content; | ||
@@ -145,5 +142,5 @@ } | ||
if (isTagNested(token)) { | ||
nestedNodes.push(getTagNode()); | ||
nestedNodes.push(getLastTagNode()); | ||
} else { | ||
appendNode(getTagNode()); | ||
appendNode(getLastTagNode()); | ||
clearTagNode(); | ||
@@ -170,2 +167,3 @@ } | ||
var column = token.getColumn(); | ||
options.onError({ | ||
@@ -203,3 +201,3 @@ message: 'Inconsistent tag \'' + tag + '\' on line ' + line + ' and column ' + column, | ||
var handleTagNode = function handleTagNode(token) { | ||
var tagNode = getTagNode(); | ||
var tagNode = getLastTagNode(); | ||
@@ -209,6 +207,13 @@ if (tagNode) { | ||
createTagNodeAttrName(token); | ||
tagNode.attr(getTagNodeAttrName(), null); | ||
tagNode.attr(getTagNodeAttrName(), ''); | ||
} else if (token.isAttrValue()) { | ||
tagNode.attr(getTagNodeAttrName(), token.getValue()); | ||
clearTagNodeAttrName(); | ||
var attrName = getTagNodeAttrName(); | ||
var attrValue = token.getValue(); | ||
if (attrName) { | ||
tagNode.attr(getTagNodeAttrName(), attrValue); | ||
clearTagNodeAttrName(); | ||
} else { | ||
tagNode.attr(attrValue, attrValue); | ||
} | ||
} else if (token.isText()) { | ||
@@ -239,3 +244,8 @@ tagNode.append(token.getValue()); | ||
options = opts; | ||
tokenizer = (opts.createTokenizer ? opts.createTokenizer : createTokenizer)(input, parseToken); | ||
tokenizer = (opts.createTokenizer ? opts.createTokenizer : createLexer)(input, { | ||
onToken: parseToken, | ||
onlyAllowTags: options.onlyAllowTags, | ||
openTag: options.openTag, | ||
closeTag: options.closeTag | ||
}); | ||
@@ -242,0 +252,0 @@ nodes = []; |
@@ -71,10 +71,10 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } | ||
this.type = String(type); | ||
this.value = String(value); | ||
this.line = Number(line); | ||
this.row = Number(row); | ||
this[TOKEN_TYPE_ID] = String(type); | ||
this[TOKEN_VALUE_ID] = String(value); | ||
this[TOKEN_LINE_ID] = Number(line); | ||
this[TOKEN_COLUMN_ID] = Number(row); | ||
} | ||
Token.prototype.isEmpty = function isEmpty() { | ||
return !!this.type; | ||
return !!this[TOKEN_TYPE_ID]; | ||
}; | ||
@@ -81,0 +81,0 @@ |
@@ -11,16 +11,4 @@ 'use strict'; | ||
/* 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]; | ||
var EM = '!'; | ||
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) { | ||
@@ -92,2 +80,23 @@ var idx = 0; | ||
var tokens = new Array(Math.floor(buffer.length)); | ||
var openTag = options.openTag || _char.OPEN_BRAKET; | ||
var closeTag = options.closeTag || _char.CLOSE_BRAKET; | ||
var RESERVED_CHARS = [closeTag, openTag, _char.QUOTEMARK, _char.BACKSLASH, _char.SPACE, _char.TAB, _char.EQ, _char.N, EM]; | ||
var NOT_CHAR_TOKENS = [openTag, _char.SPACE, _char.TAB, _char.N]; | ||
var WHITESPACES = [_char.SPACE, _char.TAB]; | ||
var SPECIAL_CHARS = [_char.EQ, _char.SPACE, _char.TAB]; | ||
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 isSpecialChar = function isSpecialChar(char) { | ||
return SPECIAL_CHARS.indexOf(char) >= 0; | ||
}; | ||
var emitToken = function emitToken(token) { | ||
@@ -104,24 +113,32 @@ if (options.onToken) { | ||
var tagName = null; | ||
var skipSpaces = false; | ||
var skipSpecialChars = false; | ||
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; | ||
if (tagName === null) { | ||
return !(isEQ || isWS || attrCharGrabber.isLast()); | ||
var validAttr = function validAttr(char) { | ||
var isEQ = char === _char.EQ; | ||
var isWS = isWhiteSpace(char); | ||
var prevChar = attrCharGrabber.getPrev(); | ||
var nextChar = attrCharGrabber.getNext(); | ||
var isPrevSLASH = prevChar === _char.BACKSLASH; | ||
var isTagNameEmpty = tagName === null; | ||
if (isTagNameEmpty) { | ||
return (isEQ || isWS || attrCharGrabber.isLast()) === false; | ||
} | ||
if (skipSpaces && isWS) { | ||
if (skipSpecialChars && isSpecialChar(char)) { | ||
return true; | ||
} | ||
if (val === _char.QUOTEMARK && !isPrevSLASH) { | ||
skipSpaces = !skipSpaces; | ||
if (char === _char.QUOTEMARK && !isPrevSLASH) { | ||
skipSpecialChars = !skipSpecialChars; | ||
if (!skipSpecialChars && !(nextChar === _char.EQ || isWhiteSpace(nextChar))) { | ||
return false; | ||
} | ||
} | ||
return !(isEQ || isWS); | ||
return (isEQ || isWS) === false; | ||
}; | ||
@@ -131,2 +148,3 @@ | ||
var attrStr = attrCharGrabber.grabWhile(validAttr); | ||
var currChar = attrCharGrabber.getCurr(); | ||
@@ -136,3 +154,3 @@ // first string before space is a tag name | ||
tagName = attrStr; | ||
} else if (isWhiteSpace(attrCharGrabber.getCurr()) || !attrCharGrabber.hasNext()) { | ||
} else if (isWhiteSpace(currChar) || currChar === _char.QUOTEMARK || !attrCharGrabber.hasNext()) { | ||
var escaped = unquote(trimChar(attrStr, _char.QUOTEMARK)); | ||
@@ -154,9 +172,9 @@ attrTokens.push(createToken(_Token.TYPE_ATTR_VALUE, escaped, row, col)); | ||
var grabber = createCharGrabber(buffer); | ||
var bufferGrabber = createCharGrabber(buffer); | ||
var next = function next() { | ||
var char = grabber.getCurr(); | ||
var char = bufferGrabber.getCurr(); | ||
if (char === _char.N) { | ||
grabber.skip(); | ||
bufferGrabber.skip(); | ||
col = 0; | ||
@@ -167,7 +185,7 @@ row++; | ||
} else if (isWhiteSpace(char)) { | ||
var str = grabber.grabWhile(isWhiteSpace); | ||
var str = bufferGrabber.grabWhile(isWhiteSpace); | ||
emitToken(createToken(_Token.TYPE_SPACE, str, row, col)); | ||
} else if (char === _char.OPEN_BRAKET) { | ||
var nextChar = grabber.getNext(); | ||
grabber.skip(); // skip [ | ||
} else if (char === openTag) { | ||
var nextChar = bufferGrabber.getNext(); | ||
bufferGrabber.skip(); // skip [ | ||
@@ -177,6 +195,6 @@ if (isCharReserved(nextChar)) { | ||
} else { | ||
var _str = grabber.grabWhile(function (val) { | ||
return val !== _char.CLOSE_BRAKET; | ||
var _str = bufferGrabber.grabWhile(function (val) { | ||
return val !== closeTag; | ||
}); | ||
grabber.skip(); // skip ] | ||
bufferGrabber.skip(); // skip ] | ||
@@ -192,8 +210,8 @@ if (!(_str.indexOf(_char.EQ) > 0) || _str[0] === _char.SLASH) { | ||
} | ||
} else if (char === _char.CLOSE_BRAKET) { | ||
grabber.skip(); | ||
} else if (char === closeTag) { | ||
bufferGrabber.skip(); | ||
emitToken(createToken(_Token.TYPE_WORD, char, row, col)); | ||
} else if (isCharToken(char)) { | ||
var _str2 = grabber.grabWhile(isCharToken); | ||
var _str2 = bufferGrabber.grabWhile(isCharToken); | ||
@@ -205,3 +223,3 @@ emitToken(createToken(_Token.TYPE_WORD, _str2, row, col)); | ||
var tokenize = function tokenize() { | ||
while (grabber.hasNext()) { | ||
while (bufferGrabber.hasNext()) { | ||
next(); | ||
@@ -216,3 +234,3 @@ } | ||
var isTokenNested = function isTokenNested(token) { | ||
var value = _char.OPEN_BRAKET + _char.SLASH + token.getValue(); | ||
var value = openTag + _char.SLASH + token.getValue(); | ||
return buffer.indexOf(value) > -1; | ||
@@ -219,0 +237,0 @@ }; |
@@ -41,6 +41,2 @@ 'use strict'; | ||
var createTokenizer = function createTokenizer(input, onToken) { | ||
return (0, _lexer.createLexer)(input, { onToken: onToken }); | ||
}; | ||
/** | ||
@@ -59,3 +55,3 @@ * @private | ||
*/ | ||
var getTagNode = function getTagNode() { | ||
var getLastTagNode = function getLastTagNode() { | ||
return tagNodes.length ? tagNodes[tagNodes.length - 1] : null; | ||
@@ -86,3 +82,3 @@ }; | ||
var getTagNodeAttrName = function getTagNodeAttrName() { | ||
return tagNodesAttrName.length ? tagNodesAttrName[tagNodesAttrName.length - 1] : getTagNode().tag; | ||
return tagNodesAttrName.length ? tagNodesAttrName[tagNodesAttrName.length - 1] : null; | ||
}; | ||
@@ -119,2 +115,3 @@ | ||
var nestedNode = nestedNodes[nestedNodes.length - 1]; | ||
return nestedNode.content; | ||
@@ -155,5 +152,5 @@ } | ||
if (isTagNested(token)) { | ||
nestedNodes.push(getTagNode()); | ||
nestedNodes.push(getLastTagNode()); | ||
} else { | ||
appendNode(getTagNode()); | ||
appendNode(getLastTagNode()); | ||
clearTagNode(); | ||
@@ -180,2 +177,3 @@ } | ||
var column = token.getColumn(); | ||
options.onError({ | ||
@@ -213,3 +211,3 @@ message: 'Inconsistent tag \'' + tag + '\' on line ' + line + ' and column ' + column, | ||
var handleTagNode = function handleTagNode(token) { | ||
var tagNode = getTagNode(); | ||
var tagNode = getLastTagNode(); | ||
@@ -219,6 +217,13 @@ if (tagNode) { | ||
createTagNodeAttrName(token); | ||
tagNode.attr(getTagNodeAttrName(), null); | ||
tagNode.attr(getTagNodeAttrName(), ''); | ||
} else if (token.isAttrValue()) { | ||
tagNode.attr(getTagNodeAttrName(), token.getValue()); | ||
clearTagNodeAttrName(); | ||
var attrName = getTagNodeAttrName(); | ||
var attrValue = token.getValue(); | ||
if (attrName) { | ||
tagNode.attr(getTagNodeAttrName(), attrValue); | ||
clearTagNodeAttrName(); | ||
} else { | ||
tagNode.attr(attrValue, attrValue); | ||
} | ||
} else if (token.isText()) { | ||
@@ -249,3 +254,8 @@ tagNode.append(token.getValue()); | ||
options = opts; | ||
tokenizer = (opts.createTokenizer ? opts.createTokenizer : createTokenizer)(input, parseToken); | ||
tokenizer = (opts.createTokenizer ? opts.createTokenizer : _lexer.createLexer)(input, { | ||
onToken: parseToken, | ||
onlyAllowTags: options.onlyAllowTags, | ||
openTag: options.openTag, | ||
closeTag: options.closeTag | ||
}); | ||
@@ -252,0 +262,0 @@ nodes = []; |
@@ -76,10 +76,10 @@ 'use strict'; | ||
this.type = String(type); | ||
this.value = String(value); | ||
this.line = Number(line); | ||
this.row = Number(row); | ||
this[TOKEN_TYPE_ID] = String(type); | ||
this[TOKEN_VALUE_ID] = String(value); | ||
this[TOKEN_LINE_ID] = Number(line); | ||
this[TOKEN_COLUMN_ID] = Number(row); | ||
} | ||
Token.prototype.isEmpty = function isEmpty() { | ||
return !!this.type; | ||
return !!this[TOKEN_TYPE_ID]; | ||
}; | ||
@@ -86,0 +86,0 @@ |
{ | ||
"name": "@bbob/parser", | ||
"version": "1.3.2", | ||
"version": "2.0.0", | ||
"description": "Just parses BBcode to AST array", | ||
@@ -16,3 +16,3 @@ "keywords": [ | ||
"dependencies": { | ||
"@bbob/plugin-helper": "1.x" | ||
"@bbob/plugin-helper": "^2.0.0" | ||
}, | ||
@@ -19,0 +19,0 @@ "main": "lib/index.js", |
@@ -16,10 +16,4 @@ /* eslint-disable no-plusplus,no-param-reassign */ | ||
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]; | ||
const EM = '!'; | ||
const isCharReserved = char => (RESERVED_CHARS.indexOf(char) >= 0); | ||
const isWhiteSpace = char => (WHITESPACES.indexOf(char) >= 0); | ||
const isCharToken = char => (NOT_CHAR_TOKENS.indexOf(char) === -1); | ||
const createCharGrabber = (source) => { | ||
@@ -73,2 +67,15 @@ let idx = 0; | ||
const tokens = new Array(Math.floor(buffer.length)); | ||
const openTag = options.openTag || OPEN_BRAKET; | ||
const closeTag = options.closeTag || CLOSE_BRAKET; | ||
const RESERVED_CHARS = [closeTag, openTag, QUOTEMARK, BACKSLASH, SPACE, TAB, EQ, N, EM]; | ||
const NOT_CHAR_TOKENS = [openTag, SPACE, TAB, N]; | ||
const WHITESPACES = [SPACE, TAB]; | ||
const SPECIAL_CHARS = [EQ, SPACE, TAB]; | ||
const isCharReserved = char => (RESERVED_CHARS.indexOf(char) >= 0); | ||
const isWhiteSpace = char => (WHITESPACES.indexOf(char) >= 0); | ||
const isCharToken = char => (NOT_CHAR_TOKENS.indexOf(char) === -1); | ||
const isSpecialChar = char => (SPECIAL_CHARS.indexOf(char) >= 0); | ||
const emitToken = (token) => { | ||
@@ -85,24 +92,32 @@ if (options.onToken) { | ||
let tagName = null; | ||
let skipSpaces = false; | ||
let skipSpecialChars = false; | ||
const attrTokens = []; | ||
const attrCharGrabber = createCharGrabber(str); | ||
const validAttr = (val) => { | ||
const isEQ = val === EQ; | ||
const isWS = isWhiteSpace(val); | ||
const isPrevSLASH = attrCharGrabber.getPrev() === SLASH; | ||
if (tagName === null) { | ||
return !(isEQ || isWS || attrCharGrabber.isLast()); | ||
const validAttr = (char) => { | ||
const isEQ = char === EQ; | ||
const isWS = isWhiteSpace(char); | ||
const prevChar = attrCharGrabber.getPrev(); | ||
const nextChar = attrCharGrabber.getNext(); | ||
const isPrevSLASH = prevChar === BACKSLASH; | ||
const isTagNameEmpty = tagName === null; | ||
if (isTagNameEmpty) { | ||
return (isEQ || isWS || attrCharGrabber.isLast()) === false; | ||
} | ||
if (skipSpaces && isWS) { | ||
if (skipSpecialChars && isSpecialChar(char)) { | ||
return true; | ||
} | ||
if (val === QUOTEMARK && !isPrevSLASH) { | ||
skipSpaces = !skipSpaces; | ||
if (char === QUOTEMARK && !isPrevSLASH) { | ||
skipSpecialChars = !skipSpecialChars; | ||
if (!skipSpecialChars && !(nextChar === EQ || isWhiteSpace(nextChar))) { | ||
return false; | ||
} | ||
} | ||
return !(isEQ || isWS); | ||
return (isEQ || isWS) === false; | ||
}; | ||
@@ -112,2 +127,3 @@ | ||
const attrStr = attrCharGrabber.grabWhile(validAttr); | ||
const currChar = attrCharGrabber.getCurr(); | ||
@@ -117,3 +133,3 @@ // first string before space is a tag name | ||
tagName = attrStr; | ||
} else if (isWhiteSpace(attrCharGrabber.getCurr()) || !attrCharGrabber.hasNext()) { | ||
} else if (isWhiteSpace(currChar) || currChar === QUOTEMARK || !attrCharGrabber.hasNext()) { | ||
const escaped = unquote(trimChar(attrStr, QUOTEMARK)); | ||
@@ -135,9 +151,9 @@ attrTokens.push(createToken(TYPE_ATTR_VALUE, escaped, row, col)); | ||
const grabber = createCharGrabber(buffer); | ||
const bufferGrabber = createCharGrabber(buffer); | ||
const next = () => { | ||
const char = grabber.getCurr(); | ||
const char = bufferGrabber.getCurr(); | ||
if (char === N) { | ||
grabber.skip(); | ||
bufferGrabber.skip(); | ||
col = 0; | ||
@@ -148,7 +164,7 @@ row++; | ||
} else if (isWhiteSpace(char)) { | ||
const str = grabber.grabWhile(isWhiteSpace); | ||
const str = bufferGrabber.grabWhile(isWhiteSpace); | ||
emitToken(createToken(TYPE_SPACE, str, row, col)); | ||
} else if (char === OPEN_BRAKET) { | ||
const nextChar = grabber.getNext(); | ||
grabber.skip(); // skip [ | ||
} else if (char === openTag) { | ||
const nextChar = bufferGrabber.getNext(); | ||
bufferGrabber.skip(); // skip [ | ||
@@ -158,4 +174,4 @@ if (isCharReserved(nextChar)) { | ||
} else { | ||
const str = grabber.grabWhile(val => val !== CLOSE_BRAKET); | ||
grabber.skip(); // skip ] | ||
const str = bufferGrabber.grabWhile(val => val !== closeTag); | ||
bufferGrabber.skip(); // skip ] | ||
@@ -171,8 +187,8 @@ if (!(str.indexOf(EQ) > 0) || str[0] === SLASH) { | ||
} | ||
} else if (char === CLOSE_BRAKET) { | ||
grabber.skip(); | ||
} else if (char === closeTag) { | ||
bufferGrabber.skip(); | ||
emitToken(createToken(TYPE_WORD, char, row, col)); | ||
} else if (isCharToken(char)) { | ||
const str = grabber.grabWhile(isCharToken); | ||
const str = bufferGrabber.grabWhile(isCharToken); | ||
@@ -184,3 +200,3 @@ emitToken(createToken(TYPE_WORD, str, row, col)); | ||
const tokenize = () => { | ||
while (grabber.hasNext()) { | ||
while (bufferGrabber.hasNext()) { | ||
next(); | ||
@@ -195,3 +211,3 @@ } | ||
const isTokenNested = (token) => { | ||
const value = OPEN_BRAKET + SLASH + token.getValue(); | ||
const value = openTag + SLASH + token.getValue(); | ||
return buffer.indexOf(value) > -1; | ||
@@ -198,0 +214,0 @@ }; |
@@ -31,4 +31,2 @@ import TagNode from '@bbob/plugin-helper/lib/TagNode'; | ||
const createTokenizer = (input, onToken) => createLexer(input, { onToken }); | ||
/** | ||
@@ -45,3 +43,3 @@ * @private | ||
*/ | ||
const getTagNode = () => (tagNodes.length ? tagNodes[tagNodes.length - 1] : null); | ||
const getLastTagNode = () => (tagNodes.length ? tagNodes[tagNodes.length - 1] : null); | ||
@@ -66,3 +64,3 @@ /** | ||
const getTagNodeAttrName = () => | ||
(tagNodesAttrName.length ? tagNodesAttrName[tagNodesAttrName.length - 1] : getTagNode().tag); | ||
(tagNodesAttrName.length ? tagNodesAttrName[tagNodesAttrName.length - 1] : null); | ||
@@ -98,2 +96,3 @@ /** | ||
const nestedNode = nestedNodes[nestedNodes.length - 1]; | ||
return nestedNode.content; | ||
@@ -134,5 +133,5 @@ } | ||
if (isTagNested(token)) { | ||
nestedNodes.push(getTagNode()); | ||
nestedNodes.push(getLastTagNode()); | ||
} else { | ||
appendNode(getTagNode()); | ||
appendNode(getLastTagNode()); | ||
clearTagNode(); | ||
@@ -159,2 +158,3 @@ } | ||
const column = token.getColumn(); | ||
options.onError({ | ||
@@ -192,3 +192,3 @@ message: `Inconsistent tag '${tag}' on line ${line} and column ${column}`, | ||
const handleTagNode = (token) => { | ||
const tagNode = getTagNode(); | ||
const tagNode = getLastTagNode(); | ||
@@ -198,6 +198,13 @@ if (tagNode) { | ||
createTagNodeAttrName(token); | ||
tagNode.attr(getTagNodeAttrName(), null); | ||
tagNode.attr(getTagNodeAttrName(), ''); | ||
} else if (token.isAttrValue()) { | ||
tagNode.attr(getTagNodeAttrName(), token.getValue()); | ||
clearTagNodeAttrName(); | ||
const attrName = getTagNodeAttrName(); | ||
const attrValue = token.getValue(); | ||
if (attrName) { | ||
tagNode.attr(getTagNodeAttrName(), attrValue); | ||
clearTagNodeAttrName(); | ||
} else { | ||
tagNode.attr(attrValue, attrValue); | ||
} | ||
} else if (token.isText()) { | ||
@@ -226,3 +233,8 @@ tagNode.append(token.getValue()); | ||
options = opts; | ||
tokenizer = (opts.createTokenizer ? opts.createTokenizer : createTokenizer)(input, parseToken); | ||
tokenizer = (opts.createTokenizer ? opts.createTokenizer : createLexer)(input, { | ||
onToken: parseToken, | ||
onlyAllowTags: options.onlyAllowTags, | ||
openTag: options.openTag, | ||
closeTag: options.closeTag, | ||
}); | ||
@@ -229,0 +241,0 @@ nodes = []; |
@@ -56,10 +56,10 @@ import { | ||
constructor(type, value, line, row) { | ||
this.type = String(type); | ||
this.value = String(value); | ||
this.line = Number(line); | ||
this.row = Number(row); | ||
this[TOKEN_TYPE_ID] = String(type); | ||
this[TOKEN_VALUE_ID] = String(value); | ||
this[TOKEN_LINE_ID] = Number(line); | ||
this[TOKEN_COLUMN_ID] = Number(row); | ||
} | ||
isEmpty() { | ||
return !!this.type; | ||
return !!this[TOKEN_TYPE_ID]; | ||
} | ||
@@ -66,0 +66,0 @@ |
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
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
89999
2898
+ Added@bbob/plugin-helper@2.9.0(transitive)
- Removed@bbob/plugin-helper@1.1.2(transitive)
Updated@bbob/plugin-helper@^2.0.0