Some checks failed
📦 Build / build (push) Has been cancelled
🧪 CI Test / test shard (1/4) (push) Has been cancelled
🧪 CI Test / test shard (2/4) (push) Has been cancelled
🧪 CI Test / test shard (3/4) (push) Has been cancelled
🧪 CI Test / test shard (4/4) (push) Has been cancelled
🧪 CI Test / test (push) Has been cancelled
🧪 CI Test / eslint (push) Has been cancelled
🧪 CI Test / typecheck (push) Has been cancelled
🔫 Sync to Pro / dispatch-sync (push) Has been cancelled
🔮 Sync Mirror / sync (push) Has been cancelled
99 lines
3.6 KiB
TypeScript
99 lines
3.6 KiB
TypeScript
/**
|
|
* Copyright 2023-present DreamNum Co., Ltd.
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
import type { ErrorType } from '../../basics/error-type';
|
|
import type { FunctionNode } from './';
|
|
import { DateSystem } from '@univerjs/core';
|
|
import { BooleanValue } from '../../basics/common';
|
|
import { ERROR_TYPE_SET } from '../../basics/error-type';
|
|
import { LexerNode } from '../analysis/lexer-node';
|
|
import { ValueObjectFactory } from '../value-object/array-value-object';
|
|
import { StringValueObject } from '../value-object/primitive-object';
|
|
import { BaseAstNode } from './base-ast-node';
|
|
import { BaseAstNodeFactory, DEFAULT_AST_NODE_FACTORY_Z_INDEX } from './base-ast-node-factory';
|
|
import { NODE_ORDER_MAP, NodeType } from './node-type';
|
|
|
|
export class ValueNode extends BaseAstNode {
|
|
constructor(operatorString: string) {
|
|
super(operatorString);
|
|
}
|
|
|
|
override get nodeType(): NodeType {
|
|
return NodeType.VALUE;
|
|
}
|
|
|
|
override execute(dateSystem: DateSystem = DateSystem.Date1900): void {
|
|
const token = this.getToken();
|
|
const tokenTrim = token.trim();
|
|
if (tokenTrim.startsWith('"') && tokenTrim.endsWith('"')) {
|
|
this.setValue(
|
|
StringValueObject.create(tokenTrim.slice(1, -1).replace(/""/g, '"')).withDateSystem(dateSystem)
|
|
);
|
|
return;
|
|
}
|
|
|
|
const parent = this.getParent();
|
|
let isIgnoreNumberPattern = true;
|
|
if (parent?.nodeType === NodeType.FUNCTION) {
|
|
isIgnoreNumberPattern = (parent as FunctionNode).isFunctionExecutorArgumentsIgnoreNumberPattern?.() ?? true;
|
|
}
|
|
this.setValue(ValueObjectFactory.create(token, isIgnoreNumberPattern, dateSystem));
|
|
}
|
|
}
|
|
|
|
export class ValueNodeFactory extends BaseAstNodeFactory {
|
|
override get zIndex(): number {
|
|
return NODE_ORDER_MAP.get(NodeType.VALUE) || DEFAULT_AST_NODE_FACTORY_Z_INDEX;
|
|
}
|
|
|
|
_checkValueNode(token: string): BaseAstNode | undefined {
|
|
if (Number.isNaN(Number(token))) {
|
|
const tokenTrim = token.trim();
|
|
const startToken = tokenTrim.charAt(0);
|
|
const endToken = tokenTrim.charAt(tokenTrim.length - 1);
|
|
|
|
if (ERROR_TYPE_SET.has(tokenTrim as ErrorType)) {
|
|
return this.create(tokenTrim);
|
|
}
|
|
|
|
if (startToken === '"' && endToken === '"') {
|
|
return this.create(tokenTrim);
|
|
}
|
|
if (startToken === '{' && endToken === '}') {
|
|
return this.create(tokenTrim);
|
|
}
|
|
|
|
const tokenTrimUpper = tokenTrim.toUpperCase();
|
|
if (tokenTrimUpper === BooleanValue.TRUE || tokenTrimUpper === BooleanValue.FALSE) {
|
|
return this.create(tokenTrimUpper);
|
|
}
|
|
} else {
|
|
return this.create(token);
|
|
}
|
|
}
|
|
|
|
override create(param: string): BaseAstNode {
|
|
return new ValueNode(param);
|
|
}
|
|
|
|
override checkAndCreateNodeType(param: LexerNode | string): BaseAstNode | undefined {
|
|
if (param instanceof LexerNode) {
|
|
return;
|
|
}
|
|
return this._checkValueNode(param);
|
|
}
|
|
}
|