@bbob/parser
Version:
Just parses BBcode to AST array. Part of @bbob bbcode parser
201 lines (153 loc) • 4.26 kB
JavaScript
"use strict";
exports.__esModule = true;
exports.default = 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 = void 0;
var _char = require("@bbob/plugin-helper/lib/char");
// type, value, line, row,
var TOKEN_TYPE_ID = 'type'; // 0;
var TOKEN_VALUE_ID = 'value'; // 1;
var TOKEN_COLUMN_ID = 'row'; // 2;
var TOKEN_LINE_ID = 'line'; // 3;
var TOKEN_TYPE_WORD = 1; // 'word';
var TOKEN_TYPE_TAG = 2; // 'tag';
var TOKEN_TYPE_ATTR_NAME = 3; // 'attr-name';
var TOKEN_TYPE_ATTR_VALUE = 4; // 'attr-value';
var TOKEN_TYPE_SPACE = 5; // 'space';
var TOKEN_TYPE_NEW_LINE = 6; // 'new-line';
/**
* @param {Token} token
* @returns {string}
*/
var getTokenValue = token => {
if (token && typeof token[TOKEN_VALUE_ID] !== 'undefined') {
return token[TOKEN_VALUE_ID];
}
return '';
};
/**
* @param {Token}token
* @returns {number}
*/
var getTokenLine = token => token && token[TOKEN_LINE_ID] || 0;
var getTokenColumn = token => token && token[TOKEN_COLUMN_ID] || 0;
/**
* @param {Token} token
* @returns {boolean}
*/
var isTextToken = token => {
if (token && typeof token[TOKEN_TYPE_ID] !== 'undefined') {
return token[TOKEN_TYPE_ID] === TOKEN_TYPE_SPACE || token[TOKEN_TYPE_ID] === TOKEN_TYPE_NEW_LINE || token[TOKEN_TYPE_ID] === TOKEN_TYPE_WORD;
}
return false;
};
/**
* @param {Token} token
* @returns {boolean}
*/
var isTagToken = token => {
if (token && typeof token[TOKEN_TYPE_ID] !== 'undefined') {
return token[TOKEN_TYPE_ID] === TOKEN_TYPE_TAG;
}
return false;
};
var isTagEnd = token => getTokenValue(token).charCodeAt(0) === _char.SLASH.charCodeAt(0);
var isTagStart = token => !isTagEnd(token);
var isAttrNameToken = token => {
if (token && typeof token[TOKEN_TYPE_ID] !== 'undefined') {
return token[TOKEN_TYPE_ID] === TOKEN_TYPE_ATTR_NAME;
}
return false;
};
/**
* @param {Token} token
* @returns {boolean}
*/
var isAttrValueToken = token => {
if (token && typeof token[TOKEN_TYPE_ID] !== 'undefined') {
return token[TOKEN_TYPE_ID] === TOKEN_TYPE_ATTR_VALUE;
}
return false;
};
var getTagName = token => {
var value = getTokenValue(token);
return isTagEnd(token) ? value.slice(1) : value;
};
var convertTagToText = token => {
var text = _char.OPEN_BRAKET;
text += getTokenValue(token);
text += _char.CLOSE_BRAKET;
return text;
};
class Token {
/**
* @param {String} type
* @param {String} value
* @param line
* @param row
*/
constructor(type, value, line, row) {
this[TOKEN_TYPE_ID] = Number(type);
this[TOKEN_VALUE_ID] = String(value);
this[TOKEN_LINE_ID] = Number(line);
this[TOKEN_COLUMN_ID] = Number(row);
}
isEmpty() {
// eslint-disable-next-line no-restricted-globals
return isNaN(this[TOKEN_TYPE_ID]);
}
isText() {
return isTextToken(this);
}
isTag() {
return isTagToken(this);
}
isAttrName() {
return isAttrNameToken(this);
}
isAttrValue() {
return isAttrValueToken(this);
}
isStart() {
return isTagStart(this);
}
isEnd() {
return isTagEnd(this);
}
getName() {
return getTagName(this);
}
getValue() {
return getTokenValue(this);
}
getLine() {
return getTokenLine(this);
}
getColumn() {
return getTokenColumn(this);
}
toString() {
return convertTagToText(this);
}
}
exports.Token = Token;
var TYPE_ID = TOKEN_TYPE_ID;
exports.TYPE_ID = TYPE_ID;
var VALUE_ID = TOKEN_VALUE_ID;
exports.VALUE_ID = VALUE_ID;
var LINE_ID = TOKEN_LINE_ID;
exports.LINE_ID = LINE_ID;
var COLUMN_ID = TOKEN_COLUMN_ID;
exports.COLUMN_ID = COLUMN_ID;
var TYPE_WORD = TOKEN_TYPE_WORD;
exports.TYPE_WORD = TYPE_WORD;
var TYPE_TAG = TOKEN_TYPE_TAG;
exports.TYPE_TAG = TYPE_TAG;
var TYPE_ATTR_NAME = TOKEN_TYPE_ATTR_NAME;
exports.TYPE_ATTR_NAME = TYPE_ATTR_NAME;
var TYPE_ATTR_VALUE = TOKEN_TYPE_ATTR_VALUE;
exports.TYPE_ATTR_VALUE = TYPE_ATTR_VALUE;
var TYPE_SPACE = TOKEN_TYPE_SPACE;
exports.TYPE_SPACE = TYPE_SPACE;
var TYPE_NEW_LINE = TOKEN_TYPE_NEW_LINE;
exports.TYPE_NEW_LINE = TYPE_NEW_LINE;
var _default = Token;
exports.default = _default;