90 lines
1.6 KiB
TypeScript
90 lines
1.6 KiB
TypeScript
export interface MathExpression {
|
|
type: 'MathExpression';
|
|
right: CalcNode;
|
|
left: CalcNode;
|
|
operator: '*' | '+' | '-' | '/';
|
|
}
|
|
|
|
export interface ParenthesizedExpression {
|
|
type: 'ParenthesizedExpression';
|
|
content: CalcNode;
|
|
}
|
|
|
|
export interface DimensionExpression {
|
|
type:
|
|
| 'LengthValue'
|
|
| 'AngleValue'
|
|
| 'TimeValue'
|
|
| 'FrequencyValue'
|
|
| 'PercentageValue'
|
|
| 'ResolutionValue'
|
|
| 'EmValue'
|
|
| 'ExValue'
|
|
| 'ChValue'
|
|
| 'RemValue'
|
|
| 'VhValue'
|
|
| 'SvhValue'
|
|
| 'LvhValue'
|
|
| 'DvhValue'
|
|
| 'VwValue'
|
|
| 'SvwValue'
|
|
| 'LvwValue'
|
|
| 'DvwValue'
|
|
| 'VminValue'
|
|
| 'SvminValue'
|
|
| 'LvminValue'
|
|
| 'DvminValue'
|
|
| 'VmaxValue'
|
|
| 'SvmaxValue'
|
|
| 'LvmaxValue'
|
|
| 'DvmaxValue'
|
|
| 'VbValue'
|
|
| 'SvbValue'
|
|
| 'LvbValue'
|
|
| 'DvbValue'
|
|
| 'ViValue'
|
|
| 'SviValue'
|
|
| 'LviValue'
|
|
| 'DviValue'
|
|
| 'CqwValue'
|
|
| 'CqhValue'
|
|
| 'CqbValue'
|
|
| 'CqiValue'
|
|
| 'CqminValue'
|
|
| 'CqmaxValue'
|
|
| 'LhValue'
|
|
| 'RlhValue';
|
|
value: number;
|
|
unit: string;
|
|
}
|
|
|
|
export interface NumberExpression {
|
|
type: 'Number';
|
|
value: number;
|
|
}
|
|
|
|
export interface FunctionExpression {
|
|
type: 'Function';
|
|
value: string;
|
|
}
|
|
|
|
export interface CalcKeywordExpression {
|
|
type: 'CalcKeyword';
|
|
value: string;
|
|
}
|
|
|
|
export type ValueExpression = DimensionExpression | NumberExpression;
|
|
|
|
export type CalcNode =
|
|
| MathExpression
|
|
| ValueExpression
|
|
| FunctionExpression
|
|
| ParenthesizedExpression
|
|
| CalcKeywordExpression;
|
|
|
|
export interface Parser {
|
|
parse: (arg: string) => CalcNode;
|
|
}
|
|
|
|
export const parser: Parser;
|