@borgar/fx
Version:
Utilities for working with Excel formulas
130 lines (121 loc) • 3.84 kB
JavaScript
import {
REF_RANGE, REF_BEAM, REF_NAMED, REF_TERNARY, REF_STRUCT,
FX_PREFIX, WHITESPACE, NEWLINE,
FUNCTION, OPERATOR,
ERROR, STRING, NUMBER, BOOLEAN
} from './constants.js';
/**
* Determines whether the specified token is a range.
*
* Returns `true` if the input is a token that has a type of either REF_RANGE
* (`A1` or `A1:B2`), REF_TERNARY (`A1:A`, `A1:1`, `1:A1`, or `A:A1`), or
* REF_BEAM (`A:A` or `1:1`). In all other cases `false` is returned.
*
* @param {any} token A token
* @returns {boolean} True if the specified token is range, False otherwise.
*/
export function isRange (token) {
return !!token && (
token.type === REF_RANGE ||
token.type === REF_BEAM ||
token.type === REF_TERNARY
);
}
/**
* Determines whether the specified token is a reference.
*
* Returns `true` if the input is a token of type REF_RANGE (`A1` or `A1:B2`),
* REF_TERNARY (`A1:A`, `A1:1`, `1:A1`, or `A:A1`), REF_BEAM (`A:A` or `1:1`),
* or REF_NAMED (`myrange`). In all other cases `false` is returned.
*
* @param {any} token The token
* @returns {boolean} True if the specified token is reference, False otherwise.
*/
export function isReference (token) {
return !!token && (
token.type === REF_RANGE ||
token.type === REF_BEAM ||
token.type === REF_TERNARY ||
token.type === REF_STRUCT ||
token.type === REF_NAMED
);
}
/**
* Determines whether the specified token is a literal.
*
* Returns `true` if the input is a token of type BOOLEAN (`TRUE` or `FALSE`),
* ERROR (`#VALUE!`), NUMBER (123.4), or STRING (`"lorem ipsum"`). In all other
* cases `false` is returned.
*
* @param {any} token The token
* @returns {boolean} True if the specified token is literal, False otherwise.
*/
export function isLiteral (token) {
return !!token && (
token.type === BOOLEAN ||
token.type === ERROR ||
token.type === NUMBER ||
token.type === STRING
);
}
/**
* Determines whether the specified token is an error.
*
* Returns `true` if the input is a token of type ERROR (`#VALUE!`). In all
* other cases `false` is returned.
*
* @param {any} token The token
* @returns {boolean} True if the specified token is error, False otherwise.
*/
export function isError (token) {
return !!token && token.type === ERROR;
}
/**
* Determines whether the specified token is whitespace.
*
* Returns `true` if the input is a token of type WHITESPACE (` `) or
* NEWLINE (`\n`). In all other cases `false` is returned.
*
* @param {any} token The token
* @returns {boolean} True if the specified token is whitespace, False otherwise.
*/
export function isWhitespace (token) {
return !!token && (
token.type === WHITESPACE ||
token.type === NEWLINE
);
}
/**
* Determines whether the specified token is a function.
*
* Returns `true` if the input is a token of type FUNCTION.
* In all other cases `false` is returned.
*
* @param {any} token The token
* @returns {boolean} True if the specified token is function, False otherwise.
*/
export function isFunction (token) {
return !!token && token.type === FUNCTION;
}
/**
* Returns `true` if the input is a token of type FX_PREFIX (leading `=` in
* formula). In all other cases `false` is returned.
*
* @param {any} token The token
* @returns {boolean} True if the specified token is effects prefix, False otherwise.
*/
export function isFxPrefix (token) {
return !!token && token.type === FX_PREFIX;
}
/**
* Determines whether the specified token is an operator.
*
* Returns `true` if the input is a token of type OPERATOR (`+` or `:`). In all
* other cases `false` is returned.
*
* @param {any} token The token
* @returns {boolean} True if the specified token is operator, False otherwise.
*/
export function isOperator (token) {
return !!token && token.type === OPERATOR;
}