summaryrefslogtreecommitdiff
path: root/src/client/scripts/hpml/expr.ts
diff options
context:
space:
mode:
authormarihachi <marihachi0620@gmail.com>2021-01-30 10:59:05 +0900
committerGitHub <noreply@github.com>2021-01-30 10:59:05 +0900
commit100a13191340399abc50f4c597f81af4cbf971b4 (patch)
treefb54859b78cd82bfd62b082a90e99e10722d1774 /src/client/scripts/hpml/expr.ts
parentUpdate recaptcha's host (#7132) (diff)
downloadmisskey-100a13191340399abc50f4c597f81af4cbf971b4.tar.gz
misskey-100a13191340399abc50f4c597f81af4cbf971b4.tar.bz2
misskey-100a13191340399abc50f4c597f81af4cbf971b4.zip
pages refactoring, fix bug (#7066)
* pages refactoring * pages: fix if block * fix code format * remove passing of the page parameter * remove comment * fix indent * replace with unref * fix conditions of isVarBlock() * Update src/client/scripts/hpml/block.ts use includes() instead of find() Co-authored-by: syuilo <Syuilotan@yahoo.co.jp> Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
Diffstat (limited to 'src/client/scripts/hpml/expr.ts')
-rw-r--r--src/client/scripts/hpml/expr.ts79
1 files changed, 79 insertions, 0 deletions
diff --git a/src/client/scripts/hpml/expr.ts b/src/client/scripts/hpml/expr.ts
new file mode 100644
index 0000000000..00e3ed118b
--- /dev/null
+++ b/src/client/scripts/hpml/expr.ts
@@ -0,0 +1,79 @@
+import { literalDefs, Type } from '.';
+
+export type ExprBase = {
+ id: string;
+};
+
+// value
+
+export type EmptyValue = ExprBase & {
+ type: null;
+ value: null;
+};
+
+export type TextValue = ExprBase & {
+ type: 'text';
+ value: string;
+};
+
+export type MultiLineTextValue = ExprBase & {
+ type: 'multiLineText';
+ value: string;
+};
+
+export type TextListValue = ExprBase & {
+ type: 'textList';
+ value: string;
+};
+
+export type NumberValue = ExprBase & {
+ type: 'number';
+ value: number;
+};
+
+export type RefValue = ExprBase & {
+ type: 'ref';
+ value: string; // value is variable name
+};
+
+export type AiScriptRefValue = ExprBase & {
+ type: 'aiScriptVar';
+ value: string; // value is variable name
+};
+
+export type UserFnValue = ExprBase & {
+ type: 'fn';
+ value: UserFnInnerValue;
+};
+type UserFnInnerValue = {
+ slots: {
+ name: string;
+ type: Type;
+ }[];
+ expression: Expr;
+};
+
+export type Value =
+ EmptyValue | TextValue | MultiLineTextValue | TextListValue | NumberValue | RefValue | AiScriptRefValue | UserFnValue;
+
+export function isLiteralValue(expr: Expr): expr is Value {
+ if (expr.type == null) return true;
+ if (literalDefs[expr.type]) return true;
+ return false;
+}
+
+// call function
+
+export type CallFn = ExprBase & { // "fn:hoge" or string
+ type: string;
+ args: Expr[];
+ value: null;
+};
+
+// variable
+export type Variable = (Value | CallFn) & {
+ name: string;
+};
+
+// expression
+export type Expr = Variable | Value | CallFn;