mirror of
https://github.com/tenrok/BBob.git
synced 2026-05-21 13:24:05 +03:00
80 lines
1.9 KiB
JavaScript
80 lines
1.9 KiB
JavaScript
const {
|
|
getChar,
|
|
OPEN_BRAKET,
|
|
CLOSE_BRAKET,
|
|
SLASH,
|
|
} = require('./char');
|
|
|
|
const TOKEN_TYPE_ID = 0;
|
|
const TOKEN_VALUE_ID = 1;
|
|
const TOKEN_COLUMN_ID = 2;
|
|
const TOKEN_LINE_ID = 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';
|
|
|
|
const getTokenValue = token => token[TOKEN_VALUE_ID];
|
|
const getTokenLine = token => token[TOKEN_LINE_ID];
|
|
const getTokenColumn = token => token[TOKEN_COLUMN_ID];
|
|
|
|
const isTextToken = (token) => {
|
|
const type = token[TOKEN_TYPE_ID];
|
|
|
|
return type === TOKEN_TYPE_SPACE || type === TOKEN_TYPE_NEW_LINE || type === 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;
|
|
|
|
const getTagName = (token) => {
|
|
const value = getTokenValue(token);
|
|
|
|
return isTagEnd(token) ? value.slice(1) : value;
|
|
};
|
|
|
|
|
|
const convertTagToText = (token) => {
|
|
let text = getChar(OPEN_BRAKET);
|
|
|
|
if (isTagEnd(token)) {
|
|
text += getChar(SLASH);
|
|
}
|
|
|
|
text += getTokenValue(token);
|
|
text += getChar(CLOSE_BRAKET);
|
|
|
|
return text;
|
|
};
|
|
|
|
|
|
module.exports = {
|
|
TYPE_ID: TOKEN_TYPE_ID,
|
|
VALUE_ID: TOKEN_VALUE_ID,
|
|
LINE_ID: TOKEN_LINE_ID,
|
|
COLUMN_ID: TOKEN_COLUMN_ID,
|
|
TYPE_WORD: TOKEN_TYPE_WORD,
|
|
TYPE_TAG: TOKEN_TYPE_TAG,
|
|
TYPE_ATTR_NAME: TOKEN_TYPE_ATTR_NAME,
|
|
TYPE_ATTR_VALUE: TOKEN_TYPE_ATTR_VALUE,
|
|
TYPE_SPACE: TOKEN_TYPE_SPACE,
|
|
TYPE_NEW_LINE: TOKEN_TYPE_NEW_LINE,
|
|
convertTagToText,
|
|
getTagName,
|
|
getTokenColumn,
|
|
getTokenLine,
|
|
getTokenValue,
|
|
isAttrNameToken,
|
|
isAttrValueToken,
|
|
isTagStart,
|
|
isTagToken,
|
|
isTextToken,
|
|
isTagEnd,
|
|
};
|