@slidejs/dsl 0.0.1 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +2 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +197 -10
- package/dist/{index.js → index.mjs} +2 -4
- package/dist/index.mjs.map +1 -0
- package/dist/parser-vQQlctmA.cjs +9 -0
- package/dist/parser-vQQlctmA.cjs.map +1 -0
- package/package.json +6 -5
- package/dist/ast.d.ts +0 -117
- package/dist/ast.d.ts.map +0 -1
- package/dist/compiler.d.ts +0 -15
- package/dist/compiler.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/parser.d.ts +0 -49
- package/dist/parser.d.ts.map +0 -1
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});class s extends Error{constructor(t,r){super(t),this.location=r,this.name="ParseError"}}async function c(){const{parse:e}=await Promise.resolve().then(()=>require("./parser-vQQlctmA.cjs"));return{parse(t){try{return e(t)}catch(r){if(r&&typeof r=="object"&&"location"in r){const i="message"in r&&typeof r.message=="string"?r.message:String(r);throw new s(i,r.location)}const o=r&&typeof r=="object"&&"message"in r&&typeof r.message=="string"?r.message:String(r);throw new s(o)}}}}async function m(e){if(e==null)throw new s("DSL source cannot be null or undefined");if(typeof e!="string")throw new s(`DSL source must be a string, got: ${typeof e}`);if(e.trim().length===0)throw new s("DSL source cannot be empty");return(await c()).parse(e)}class n extends Error{constructor(t){super(t),this.name="CompileError"}}function b(e){if(!e)throw new n("AST is null or undefined");if(!e.rules||!Array.isArray(e.rules))throw new n("AST rules must be an array");if(!e.sourceType||typeof e.sourceType!="string")throw new n("AST sourceType must be a non-empty string");if(!e.sourceId||typeof e.sourceId!="string")throw new n("AST sourceId must be a non-empty string");const t=e.rules.map(r=>w(r));return{version:e.version,sourceType:e.sourceType,sourceId:e.sourceId,rules:t}}function w(e){return{type:e.ruleType,name:e.name,generate:t=>e.slides?e.slides.map(r=>u(r,t)):e.body?h(e.body,t):[]}}function h(e,t){return Array.isArray(e)?e.map(r=>u(r,t)):p(e,t)}function p(e,t){const r=[];if(!e.variable||typeof e.variable!="string")throw new n("For loop variable must be a non-empty string");const o=a(e.collection,t);if(o==null)throw new n(`For loop collection "${e.collection}" evaluates to ${o===null?"null":"undefined"}`);if(!Array.isArray(o))throw new n(`For loop collection "${e.collection}" must be an array, got: ${typeof o}`);for(const i of o){const l={...t,[e.variable]:i};Array.isArray(e.body)?r.push(...e.body.map(y=>u(y,l))):r.push(...p(e.body,l))}return r}function u(e,t){return{content:g(e.content,t),behavior:e.behavior?d(e.behavior,t):void 0}}function g(e,t){return e.type==="dynamic"?{type:"dynamic",component:e.component,props:f(e.props,t)}:{type:"text",lines:e.lines.map(r=>String(a(r,t)))}}function d(e,t){return{transition:{type:e.transition.transType,...f(e.transition.options,t)}}}function f(e,t){const r={};for(const[o,i]of Object.entries(e))r[o]=a(i,t);return r}function a(e,t){if(typeof e=="string")return e;if(typeof e=="object"&&e!==null&&"type"in e)switch(e.type){case"number":return e.value;case"boolean":return e.value;case"member":return v(e,t);case"binary":return $(e,t);default:throw new n(`Unknown expression type: ${e.type}`)}throw new n(`Invalid expression: ${JSON.stringify(e)}`)}function v(e,t){let r=t[e.object];if(e.properties.length===0){if(r===void 0)throw new n(`Variable "${e.object}" is not defined in context`);return r}const o=[e.object];for(const i of e.properties){if(o.push(i),r==null)throw new n(`Cannot access property "${i}" of "${o.slice(0,-1).join(".")}" because it is ${r===null?"null":"undefined"}`);if(typeof r!="object")throw new n(`Cannot access property "${i}" of "${o.slice(0,-1).join(".")}" because it is not an object (got ${typeof r})`);if(!(i in r))throw new n(`Property "${i}" does not exist on "${o.slice(0,-1).join(".")}"`);r=r[i]}return r}function $(e,t){const r=a(e.left,t),o=a(e.right,t);switch(e.operator){case"+":if(typeof r=="string"||typeof o=="string")return String(r)+String(o);if(typeof r!="number"||typeof o!="number")throw new n(`Cannot add ${typeof r} and ${typeof o}. Both operands must be numbers or at least one must be a string.`);return r+o;case"-":if(typeof r!="number"||typeof o!="number")throw new n(`Cannot subtract ${typeof o} from ${typeof r}. Both operands must be numbers.`);return r-o;case"*":if(typeof r!="number"||typeof o!="number")throw new n(`Cannot multiply ${typeof r} and ${typeof o}. Both operands must be numbers.`);return r*o;case"/":if(typeof r!="number"||typeof o!="number")throw new n(`Cannot divide ${typeof r} by ${typeof o}. Both operands must be numbers.`);if(o===0)throw new n("Division by zero is not allowed");return r/o;default:throw new n(`Unknown operator: ${e.operator}`)}}exports.CompileError=n;exports.ParseError=s;exports.compile=b;exports.createParser=c;exports.parseSlideDSL=m;
|
|
2
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/parser.ts","../src/compiler.ts"],"sourcesContent":["/**\n * @slidejs/dsl - Parser 接口\n *\n * 使用 Peggy 生成的 parser 解析 Slide DSL 语法\n */\n\nimport type { PresentationNode } from './ast';\n\n/**\n * Parser 错误\n */\nexport class ParseError extends Error {\n constructor(\n message: string,\n public location?: {\n start: { line: number; column: number; offset: number };\n end: { line: number; column: number; offset: number };\n }\n ) {\n super(message);\n this.name = 'ParseError';\n }\n}\n\n/**\n * Parser 接口\n */\nexport interface Parser {\n /**\n * 解析 Slide DSL 源代码\n */\n parse(source: string): PresentationNode;\n}\n\n/**\n * 创建 Parser 实例\n */\nexport async function createParser(): Promise<Parser> {\n // 动态导入生成的 parser\n const { parse } = await import('./generated/parser.js');\n\n return {\n parse(source: string): PresentationNode {\n try {\n return parse(source) as PresentationNode;\n } catch (error) {\n if (error && typeof error === 'object' && 'location' in error) {\n const errorMessage =\n 'message' in error && typeof error.message === 'string' ? error.message : String(error);\n throw new ParseError(errorMessage, error.location as ParseError['location']);\n }\n const errorMessage =\n error &&\n typeof error === 'object' &&\n 'message' in error &&\n typeof error.message === 'string'\n ? error.message\n : String(error);\n throw new ParseError(errorMessage);\n }\n },\n };\n}\n\n/**\n * 便捷函数:直接解析 DSL 源代码\n */\nexport async function parseSlideDSL(source: string): Promise<PresentationNode> {\n // 输入验证\n if (source === null || source === undefined) {\n throw new ParseError('DSL source cannot be null or undefined');\n }\n\n if (typeof source !== 'string') {\n throw new ParseError(`DSL source must be a string, got: ${typeof source}`);\n }\n\n if (source.trim().length === 0) {\n throw new ParseError('DSL source cannot be empty');\n }\n\n const parser = await createParser();\n return parser.parse(source);\n}\n","/**\n * @slidejs/dsl - Compiler\n *\n * 将 AST 编译为可执行的 SlideDSL 对象\n */\n\nimport type { SlideContext } from '@slidejs/context';\nimport type { SlideDSL, SlideRule, SlideDefinition } from '@slidejs/core';\nimport type {\n PresentationNode,\n RuleNode,\n SlideNode,\n ForLoopNode,\n ContentNode,\n BehaviorNode,\n ExpressionValue,\n MemberExpressionNode,\n BinaryExpressionNode,\n NumberLiteralNode,\n BooleanLiteralNode,\n} from './ast';\n\n/**\n * Compiler 错误\n */\nexport class CompileError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'CompileError';\n }\n}\n\n/**\n * 编译 AST 为 SlideDSL\n */\nexport function compile<TContext extends SlideContext = SlideContext>(\n ast: PresentationNode\n): SlideDSL<TContext> {\n // 输入验证\n if (!ast) {\n throw new CompileError('AST is null or undefined');\n }\n\n if (!ast.rules || !Array.isArray(ast.rules)) {\n throw new CompileError('AST rules must be an array');\n }\n\n if (!ast.sourceType || typeof ast.sourceType !== 'string') {\n throw new CompileError('AST sourceType must be a non-empty string');\n }\n\n if (!ast.sourceId || typeof ast.sourceId !== 'string') {\n throw new CompileError('AST sourceId must be a non-empty string');\n }\n\n const rules: SlideRule<TContext>[] = ast.rules.map(ruleNode => compileRule(ruleNode));\n\n return {\n version: ast.version,\n sourceType: ast.sourceType,\n sourceId: ast.sourceId,\n rules,\n };\n}\n\n/**\n * 编译 Rule 节点\n */\nfunction compileRule<TContext extends SlideContext = SlideContext>(\n node: RuleNode\n): SlideRule<TContext> {\n return {\n type: node.ruleType,\n name: node.name,\n generate: (context: TContext) => {\n if (node.slides) {\n // 简单规则:直接生成 slides\n return node.slides.map(slideNode => compileSlide(slideNode, context));\n } else if (node.body) {\n // Content 规则:可能包含 for 循环\n return compileRuleBody(node.body, context);\n }\n return [];\n },\n };\n}\n\n/**\n * 编译 Rule Body(可能包含 for 循环)\n */\nfunction compileRuleBody<TContext extends SlideContext = SlideContext>(\n body: ForLoopNode | SlideNode[],\n context: TContext\n): SlideDefinition[] {\n if (Array.isArray(body)) {\n // 直接是 slides 数组\n return body.map(slideNode => compileSlide(slideNode, context));\n } else {\n // For 循环\n return compileForLoop(body, context);\n }\n}\n\n/**\n * 编译 For 循环\n */\nfunction compileForLoop<TContext extends SlideContext = SlideContext>(\n node: ForLoopNode,\n context: TContext\n): SlideDefinition[] {\n const slides: SlideDefinition[] = [];\n\n // 输入验证\n if (!node.variable || typeof node.variable !== 'string') {\n throw new CompileError('For loop variable must be a non-empty string');\n }\n\n // 解析集合表达式\n const collection = evaluateExpression(node.collection, context);\n\n if (collection === null || collection === undefined) {\n throw new CompileError(\n `For loop collection \"${node.collection}\" evaluates to ${collection === null ? 'null' : 'undefined'}`\n );\n }\n\n if (!Array.isArray(collection)) {\n throw new CompileError(\n `For loop collection \"${node.collection}\" must be an array, got: ${typeof collection}`\n );\n }\n\n // 遍历集合,为每个元素生成 slides\n for (const item of collection) {\n // 创建新的上下文,添加循环变量\n const loopContext = {\n ...context,\n [node.variable]: item,\n } as TContext;\n\n if (Array.isArray(node.body)) {\n // Body 是 slides 数组\n slides.push(...node.body.map(slideNode => compileSlide(slideNode, loopContext)));\n } else {\n // Body 是嵌套的 for 循环\n slides.push(...compileForLoop(node.body, loopContext));\n }\n }\n\n return slides;\n}\n\n/**\n * 编译 Slide 节点\n */\nfunction compileSlide<TContext extends SlideContext = SlideContext>(\n node: SlideNode,\n context: TContext\n): SlideDefinition {\n return {\n content: compileContent(node.content, context),\n behavior: node.behavior ? compileBehavior(node.behavior, context) : undefined,\n };\n}\n\n/**\n * 编译 Content 节点\n */\nfunction compileContent<TContext extends SlideContext = SlideContext>(\n node: ContentNode,\n context: TContext\n): SlideDefinition['content'] {\n if (node.type === 'dynamic') {\n // 动态内容(组件)\n return {\n type: 'dynamic',\n component: node.component,\n props: evaluateProps(node.props, context),\n };\n } else {\n // 静态文本\n return {\n type: 'text',\n lines: node.lines.map(line => String(evaluateExpression(line, context))),\n };\n }\n}\n\n/**\n * 编译 Behavior 节点\n */\nfunction compileBehavior<TContext extends SlideContext = SlideContext>(\n node: BehaviorNode,\n context: TContext\n): SlideDefinition['behavior'] {\n return {\n transition: {\n type: (node.transition as unknown as { transType: string }).transType as\n | 'slide'\n | 'zoom'\n | 'fade'\n | 'cube'\n | 'flip'\n | 'none',\n ...evaluateProps(node.transition.options, context),\n },\n };\n}\n\n/**\n * 计算属性对象\n */\nfunction evaluateProps<TContext extends SlideContext = SlideContext>(\n props: Record<string, ExpressionValue>,\n context: TContext\n): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(props)) {\n result[key] = evaluateExpression(value, context);\n }\n\n return result;\n}\n\n/**\n * 计算表达式\n */\nfunction evaluateExpression<TContext extends SlideContext = SlideContext>(\n expr: ExpressionValue,\n context: TContext\n): unknown {\n // 字符串字面量\n if (typeof expr === 'string') {\n return expr;\n }\n\n // 对象类型(AST 节点)\n if (typeof expr === 'object' && expr !== null && 'type' in expr) {\n switch (expr.type) {\n case 'number':\n return (expr as NumberLiteralNode).value;\n\n case 'boolean':\n return (expr as BooleanLiteralNode).value;\n\n case 'member':\n return evaluateMemberExpression(expr as MemberExpressionNode, context);\n\n case 'binary':\n return evaluateBinaryExpression(expr as BinaryExpressionNode, context);\n\n default:\n throw new CompileError(`Unknown expression type: ${(expr as { type: string }).type}`);\n }\n }\n\n throw new CompileError(`Invalid expression: ${JSON.stringify(expr)}`);\n}\n\n/**\n * 计算成员表达式(如 quiz.title, section.questions)\n * 也处理单个变量引用(properties 为空数组)\n */\nfunction evaluateMemberExpression<TContext extends SlideContext = SlideContext>(\n expr: MemberExpressionNode,\n context: TContext\n): unknown {\n // 从 context 中获取对象\n let value: unknown = context[expr.object as keyof TContext];\n\n // 如果没有属性,直接返回变量值(单个标识符的情况)\n if (expr.properties.length === 0) {\n if (value === undefined) {\n throw new CompileError(`Variable \"${expr.object}\" is not defined in context`);\n }\n return value;\n }\n\n // 构建属性路径用于错误信息\n const pathParts: string[] = [expr.object];\n\n // 遍历属性链\n for (const prop of expr.properties) {\n pathParts.push(prop);\n const currentPath = pathParts.join('.');\n\n // 检查 value 是否为 null 或 undefined\n if (value === null || value === undefined) {\n throw new CompileError(\n `Cannot access property \"${prop}\" of \"${pathParts.slice(0, -1).join('.')}\" because it is ${value === null ? 'null' : 'undefined'}`\n );\n }\n\n // 检查 value 是否为对象\n if (typeof value !== 'object') {\n throw new CompileError(\n `Cannot access property \"${prop}\" of \"${pathParts.slice(0, -1).join('.')}\" because it is not an object (got ${typeof value})`\n );\n }\n\n // 检查属性是否存在\n if (!(prop in value)) {\n throw new CompileError(\n `Property \"${prop}\" does not exist on \"${pathParts.slice(0, -1).join('.')}\"`\n );\n }\n\n value = (value as Record<string, unknown>)[prop];\n }\n\n return value;\n}\n\n/**\n * 计算二元表达式\n */\nfunction evaluateBinaryExpression<TContext extends SlideContext = SlideContext>(\n expr: BinaryExpressionNode,\n context: TContext\n): unknown {\n const left = evaluateExpression(expr.left, context);\n const right = evaluateExpression(expr.right, context);\n\n switch (expr.operator) {\n case '+':\n // 字符串拼接或数字相加\n if (typeof left === 'string' || typeof right === 'string') {\n return String(left) + String(right);\n }\n // 确保是数字类型\n if (typeof left !== 'number' || typeof right !== 'number') {\n throw new CompileError(\n `Cannot add ${typeof left} and ${typeof right}. Both operands must be numbers or at least one must be a string.`\n );\n }\n return left + right;\n\n case '-':\n if (typeof left !== 'number' || typeof right !== 'number') {\n throw new CompileError(\n `Cannot subtract ${typeof right} from ${typeof left}. Both operands must be numbers.`\n );\n }\n return left - right;\n\n case '*':\n if (typeof left !== 'number' || typeof right !== 'number') {\n throw new CompileError(\n `Cannot multiply ${typeof left} and ${typeof right}. Both operands must be numbers.`\n );\n }\n return left * right;\n\n case '/':\n if (typeof left !== 'number' || typeof right !== 'number') {\n throw new CompileError(\n `Cannot divide ${typeof left} by ${typeof right}. Both operands must be numbers.`\n );\n }\n if (right === 0) {\n throw new CompileError('Division by zero is not allowed');\n }\n return left / right;\n\n default:\n throw new CompileError(`Unknown operator: ${expr.operator}`);\n }\n}\n"],"names":["ParseError","message","location","createParser","parse","source","error","errorMessage","parseSlideDSL","CompileError","compile","ast","rules","ruleNode","compileRule","node","context","compileSlide","slideNode","compileRuleBody","body","compileForLoop","slides","collection","evaluateExpression","item","loopContext","compileContent","compileBehavior","evaluateProps","line","props","result","key","value","expr","evaluateMemberExpression","evaluateBinaryExpression","pathParts","prop","left","right"],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,10 +1,197 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
1
|
+
import { SlideContext } from '@slidejs/context';
|
|
2
|
+
import { SlideDSL } from '@slidejs/core';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* @slidejs/dsl - AST 类型定义
|
|
6
|
+
*
|
|
7
|
+
* Peggy 解析器生成的抽象语法树(AST)类型
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* AST 节点基类
|
|
11
|
+
*/
|
|
12
|
+
declare interface ASTNode {
|
|
13
|
+
type: string;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Behavior 节点
|
|
18
|
+
*/
|
|
19
|
+
export declare interface BehaviorNode extends ASTNode {
|
|
20
|
+
type: 'behavior';
|
|
21
|
+
transition: TransitionNode;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Binary Expression 节点
|
|
26
|
+
*/
|
|
27
|
+
export declare interface BinaryExpressionNode extends ASTNode {
|
|
28
|
+
type: 'binary';
|
|
29
|
+
operator: '+' | '-' | '*' | '/';
|
|
30
|
+
left: ExpressionValue;
|
|
31
|
+
right: ExpressionValue;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Boolean Literal 节点
|
|
36
|
+
*/
|
|
37
|
+
export declare interface BooleanLiteralNode extends ASTNode {
|
|
38
|
+
type: 'boolean';
|
|
39
|
+
value: boolean;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* 编译 AST 为 SlideDSL
|
|
44
|
+
*/
|
|
45
|
+
export declare function compile<TContext extends SlideContext = SlideContext>(ast: PresentationNode): SlideDSL<TContext>;
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Compiler 错误
|
|
49
|
+
*/
|
|
50
|
+
export declare class CompileError extends Error {
|
|
51
|
+
constructor(message: string);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Content 节点
|
|
56
|
+
*/
|
|
57
|
+
export declare type ContentNode = DynamicContentNode | TextContentNode;
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* 创建 Parser 实例
|
|
61
|
+
*/
|
|
62
|
+
export declare function createParser(): Promise<Parser>;
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Dynamic Content 节点
|
|
66
|
+
*/
|
|
67
|
+
export declare interface DynamicContentNode extends ASTNode {
|
|
68
|
+
type: 'dynamic';
|
|
69
|
+
component: string;
|
|
70
|
+
props: Record<string, ExpressionValue>;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Expression 值类型
|
|
75
|
+
*/
|
|
76
|
+
export declare type ExpressionValue = string | NumberLiteralNode | BooleanLiteralNode | MemberExpressionNode | BinaryExpressionNode;
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* For Loop 节点
|
|
80
|
+
*/
|
|
81
|
+
export declare interface ForLoopNode extends ASTNode {
|
|
82
|
+
type: 'for';
|
|
83
|
+
variable: string;
|
|
84
|
+
collection: MemberExpressionNode | string;
|
|
85
|
+
body: ForLoopNode | SlideNode[];
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Member Expression 节点
|
|
90
|
+
*/
|
|
91
|
+
export declare interface MemberExpressionNode extends ASTNode {
|
|
92
|
+
type: 'member';
|
|
93
|
+
object: string;
|
|
94
|
+
properties: string[];
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Number Literal 节点
|
|
99
|
+
*/
|
|
100
|
+
export declare interface NumberLiteralNode extends ASTNode {
|
|
101
|
+
type: 'number';
|
|
102
|
+
value: number;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Parser 错误
|
|
107
|
+
*/
|
|
108
|
+
export declare class ParseError extends Error {
|
|
109
|
+
location?: {
|
|
110
|
+
start: {
|
|
111
|
+
line: number;
|
|
112
|
+
column: number;
|
|
113
|
+
offset: number;
|
|
114
|
+
};
|
|
115
|
+
end: {
|
|
116
|
+
line: number;
|
|
117
|
+
column: number;
|
|
118
|
+
offset: number;
|
|
119
|
+
};
|
|
120
|
+
} | undefined;
|
|
121
|
+
constructor(message: string, location?: {
|
|
122
|
+
start: {
|
|
123
|
+
line: number;
|
|
124
|
+
column: number;
|
|
125
|
+
offset: number;
|
|
126
|
+
};
|
|
127
|
+
end: {
|
|
128
|
+
line: number;
|
|
129
|
+
column: number;
|
|
130
|
+
offset: number;
|
|
131
|
+
};
|
|
132
|
+
} | undefined);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Parser 接口
|
|
137
|
+
*/
|
|
138
|
+
export declare interface Parser {
|
|
139
|
+
/**
|
|
140
|
+
* 解析 Slide DSL 源代码
|
|
141
|
+
*/
|
|
142
|
+
parse(source: string): PresentationNode;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* 便捷函数:直接解析 DSL 源代码
|
|
147
|
+
*/
|
|
148
|
+
export declare function parseSlideDSL(source: string): Promise<PresentationNode>;
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* Presentation 节点(根节点)
|
|
152
|
+
*/
|
|
153
|
+
export declare interface PresentationNode {
|
|
154
|
+
version: string;
|
|
155
|
+
sourceType: string;
|
|
156
|
+
sourceId: string;
|
|
157
|
+
rules: RuleNode[];
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Rule 节点
|
|
162
|
+
*/
|
|
163
|
+
export declare interface RuleNode extends ASTNode {
|
|
164
|
+
type: 'rule';
|
|
165
|
+
ruleType: 'start' | 'content' | 'end';
|
|
166
|
+
name: string;
|
|
167
|
+
slides?: SlideNode[];
|
|
168
|
+
body?: ForLoopNode | SlideNode[];
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* Slide 节点
|
|
173
|
+
*/
|
|
174
|
+
export declare interface SlideNode extends ASTNode {
|
|
175
|
+
type: 'slide';
|
|
176
|
+
content: ContentNode;
|
|
177
|
+
behavior?: BehaviorNode;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* Text Content 节点
|
|
182
|
+
*/
|
|
183
|
+
export declare interface TextContentNode extends ASTNode {
|
|
184
|
+
type: 'text';
|
|
185
|
+
lines: ExpressionValue[];
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* Transition 节点
|
|
190
|
+
*/
|
|
191
|
+
export declare interface TransitionNode extends ASTNode {
|
|
192
|
+
type: 'transition';
|
|
193
|
+
transType: string;
|
|
194
|
+
options: Record<string, ExpressionValue>;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
export { }
|
|
@@ -135,9 +135,7 @@ function g(e, r) {
|
|
|
135
135
|
let t = r[e.object];
|
|
136
136
|
if (e.properties.length === 0) {
|
|
137
137
|
if (t === void 0)
|
|
138
|
-
throw new n(
|
|
139
|
-
`Variable "${e.object}" is not defined in context`
|
|
140
|
-
);
|
|
138
|
+
throw new n(`Variable "${e.object}" is not defined in context`);
|
|
141
139
|
return t;
|
|
142
140
|
}
|
|
143
141
|
const o = [e.object];
|
|
@@ -200,4 +198,4 @@ export {
|
|
|
200
198
|
y as createParser,
|
|
201
199
|
v as parseSlideDSL
|
|
202
200
|
};
|
|
203
|
-
//# sourceMappingURL=index.
|
|
201
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../src/parser.ts","../src/compiler.ts"],"sourcesContent":["/**\n * @slidejs/dsl - Parser 接口\n *\n * 使用 Peggy 生成的 parser 解析 Slide DSL 语法\n */\n\nimport type { PresentationNode } from './ast';\n\n/**\n * Parser 错误\n */\nexport class ParseError extends Error {\n constructor(\n message: string,\n public location?: {\n start: { line: number; column: number; offset: number };\n end: { line: number; column: number; offset: number };\n }\n ) {\n super(message);\n this.name = 'ParseError';\n }\n}\n\n/**\n * Parser 接口\n */\nexport interface Parser {\n /**\n * 解析 Slide DSL 源代码\n */\n parse(source: string): PresentationNode;\n}\n\n/**\n * 创建 Parser 实例\n */\nexport async function createParser(): Promise<Parser> {\n // 动态导入生成的 parser\n const { parse } = await import('./generated/parser.js');\n\n return {\n parse(source: string): PresentationNode {\n try {\n return parse(source) as PresentationNode;\n } catch (error) {\n if (error && typeof error === 'object' && 'location' in error) {\n const errorMessage =\n 'message' in error && typeof error.message === 'string' ? error.message : String(error);\n throw new ParseError(errorMessage, error.location as ParseError['location']);\n }\n const errorMessage =\n error &&\n typeof error === 'object' &&\n 'message' in error &&\n typeof error.message === 'string'\n ? error.message\n : String(error);\n throw new ParseError(errorMessage);\n }\n },\n };\n}\n\n/**\n * 便捷函数:直接解析 DSL 源代码\n */\nexport async function parseSlideDSL(source: string): Promise<PresentationNode> {\n // 输入验证\n if (source === null || source === undefined) {\n throw new ParseError('DSL source cannot be null or undefined');\n }\n\n if (typeof source !== 'string') {\n throw new ParseError(`DSL source must be a string, got: ${typeof source}`);\n }\n\n if (source.trim().length === 0) {\n throw new ParseError('DSL source cannot be empty');\n }\n\n const parser = await createParser();\n return parser.parse(source);\n}\n","/**\n * @slidejs/dsl - Compiler\n *\n * 将 AST 编译为可执行的 SlideDSL 对象\n */\n\nimport type { SlideContext } from '@slidejs/context';\nimport type { SlideDSL, SlideRule, SlideDefinition } from '@slidejs/core';\nimport type {\n PresentationNode,\n RuleNode,\n SlideNode,\n ForLoopNode,\n ContentNode,\n BehaviorNode,\n ExpressionValue,\n MemberExpressionNode,\n BinaryExpressionNode,\n NumberLiteralNode,\n BooleanLiteralNode,\n} from './ast';\n\n/**\n * Compiler 错误\n */\nexport class CompileError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'CompileError';\n }\n}\n\n/**\n * 编译 AST 为 SlideDSL\n */\nexport function compile<TContext extends SlideContext = SlideContext>(\n ast: PresentationNode\n): SlideDSL<TContext> {\n // 输入验证\n if (!ast) {\n throw new CompileError('AST is null or undefined');\n }\n\n if (!ast.rules || !Array.isArray(ast.rules)) {\n throw new CompileError('AST rules must be an array');\n }\n\n if (!ast.sourceType || typeof ast.sourceType !== 'string') {\n throw new CompileError('AST sourceType must be a non-empty string');\n }\n\n if (!ast.sourceId || typeof ast.sourceId !== 'string') {\n throw new CompileError('AST sourceId must be a non-empty string');\n }\n\n const rules: SlideRule<TContext>[] = ast.rules.map(ruleNode => compileRule(ruleNode));\n\n return {\n version: ast.version,\n sourceType: ast.sourceType,\n sourceId: ast.sourceId,\n rules,\n };\n}\n\n/**\n * 编译 Rule 节点\n */\nfunction compileRule<TContext extends SlideContext = SlideContext>(\n node: RuleNode\n): SlideRule<TContext> {\n return {\n type: node.ruleType,\n name: node.name,\n generate: (context: TContext) => {\n if (node.slides) {\n // 简单规则:直接生成 slides\n return node.slides.map(slideNode => compileSlide(slideNode, context));\n } else if (node.body) {\n // Content 规则:可能包含 for 循环\n return compileRuleBody(node.body, context);\n }\n return [];\n },\n };\n}\n\n/**\n * 编译 Rule Body(可能包含 for 循环)\n */\nfunction compileRuleBody<TContext extends SlideContext = SlideContext>(\n body: ForLoopNode | SlideNode[],\n context: TContext\n): SlideDefinition[] {\n if (Array.isArray(body)) {\n // 直接是 slides 数组\n return body.map(slideNode => compileSlide(slideNode, context));\n } else {\n // For 循环\n return compileForLoop(body, context);\n }\n}\n\n/**\n * 编译 For 循环\n */\nfunction compileForLoop<TContext extends SlideContext = SlideContext>(\n node: ForLoopNode,\n context: TContext\n): SlideDefinition[] {\n const slides: SlideDefinition[] = [];\n\n // 输入验证\n if (!node.variable || typeof node.variable !== 'string') {\n throw new CompileError('For loop variable must be a non-empty string');\n }\n\n // 解析集合表达式\n const collection = evaluateExpression(node.collection, context);\n\n if (collection === null || collection === undefined) {\n throw new CompileError(\n `For loop collection \"${node.collection}\" evaluates to ${collection === null ? 'null' : 'undefined'}`\n );\n }\n\n if (!Array.isArray(collection)) {\n throw new CompileError(\n `For loop collection \"${node.collection}\" must be an array, got: ${typeof collection}`\n );\n }\n\n // 遍历集合,为每个元素生成 slides\n for (const item of collection) {\n // 创建新的上下文,添加循环变量\n const loopContext = {\n ...context,\n [node.variable]: item,\n } as TContext;\n\n if (Array.isArray(node.body)) {\n // Body 是 slides 数组\n slides.push(...node.body.map(slideNode => compileSlide(slideNode, loopContext)));\n } else {\n // Body 是嵌套的 for 循环\n slides.push(...compileForLoop(node.body, loopContext));\n }\n }\n\n return slides;\n}\n\n/**\n * 编译 Slide 节点\n */\nfunction compileSlide<TContext extends SlideContext = SlideContext>(\n node: SlideNode,\n context: TContext\n): SlideDefinition {\n return {\n content: compileContent(node.content, context),\n behavior: node.behavior ? compileBehavior(node.behavior, context) : undefined,\n };\n}\n\n/**\n * 编译 Content 节点\n */\nfunction compileContent<TContext extends SlideContext = SlideContext>(\n node: ContentNode,\n context: TContext\n): SlideDefinition['content'] {\n if (node.type === 'dynamic') {\n // 动态内容(组件)\n return {\n type: 'dynamic',\n component: node.component,\n props: evaluateProps(node.props, context),\n };\n } else {\n // 静态文本\n return {\n type: 'text',\n lines: node.lines.map(line => String(evaluateExpression(line, context))),\n };\n }\n}\n\n/**\n * 编译 Behavior 节点\n */\nfunction compileBehavior<TContext extends SlideContext = SlideContext>(\n node: BehaviorNode,\n context: TContext\n): SlideDefinition['behavior'] {\n return {\n transition: {\n type: (node.transition as unknown as { transType: string }).transType as\n | 'slide'\n | 'zoom'\n | 'fade'\n | 'cube'\n | 'flip'\n | 'none',\n ...evaluateProps(node.transition.options, context),\n },\n };\n}\n\n/**\n * 计算属性对象\n */\nfunction evaluateProps<TContext extends SlideContext = SlideContext>(\n props: Record<string, ExpressionValue>,\n context: TContext\n): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(props)) {\n result[key] = evaluateExpression(value, context);\n }\n\n return result;\n}\n\n/**\n * 计算表达式\n */\nfunction evaluateExpression<TContext extends SlideContext = SlideContext>(\n expr: ExpressionValue,\n context: TContext\n): unknown {\n // 字符串字面量\n if (typeof expr === 'string') {\n return expr;\n }\n\n // 对象类型(AST 节点)\n if (typeof expr === 'object' && expr !== null && 'type' in expr) {\n switch (expr.type) {\n case 'number':\n return (expr as NumberLiteralNode).value;\n\n case 'boolean':\n return (expr as BooleanLiteralNode).value;\n\n case 'member':\n return evaluateMemberExpression(expr as MemberExpressionNode, context);\n\n case 'binary':\n return evaluateBinaryExpression(expr as BinaryExpressionNode, context);\n\n default:\n throw new CompileError(`Unknown expression type: ${(expr as { type: string }).type}`);\n }\n }\n\n throw new CompileError(`Invalid expression: ${JSON.stringify(expr)}`);\n}\n\n/**\n * 计算成员表达式(如 quiz.title, section.questions)\n * 也处理单个变量引用(properties 为空数组)\n */\nfunction evaluateMemberExpression<TContext extends SlideContext = SlideContext>(\n expr: MemberExpressionNode,\n context: TContext\n): unknown {\n // 从 context 中获取对象\n let value: unknown = context[expr.object as keyof TContext];\n\n // 如果没有属性,直接返回变量值(单个标识符的情况)\n if (expr.properties.length === 0) {\n if (value === undefined) {\n throw new CompileError(`Variable \"${expr.object}\" is not defined in context`);\n }\n return value;\n }\n\n // 构建属性路径用于错误信息\n const pathParts: string[] = [expr.object];\n\n // 遍历属性链\n for (const prop of expr.properties) {\n pathParts.push(prop);\n const currentPath = pathParts.join('.');\n\n // 检查 value 是否为 null 或 undefined\n if (value === null || value === undefined) {\n throw new CompileError(\n `Cannot access property \"${prop}\" of \"${pathParts.slice(0, -1).join('.')}\" because it is ${value === null ? 'null' : 'undefined'}`\n );\n }\n\n // 检查 value 是否为对象\n if (typeof value !== 'object') {\n throw new CompileError(\n `Cannot access property \"${prop}\" of \"${pathParts.slice(0, -1).join('.')}\" because it is not an object (got ${typeof value})`\n );\n }\n\n // 检查属性是否存在\n if (!(prop in value)) {\n throw new CompileError(\n `Property \"${prop}\" does not exist on \"${pathParts.slice(0, -1).join('.')}\"`\n );\n }\n\n value = (value as Record<string, unknown>)[prop];\n }\n\n return value;\n}\n\n/**\n * 计算二元表达式\n */\nfunction evaluateBinaryExpression<TContext extends SlideContext = SlideContext>(\n expr: BinaryExpressionNode,\n context: TContext\n): unknown {\n const left = evaluateExpression(expr.left, context);\n const right = evaluateExpression(expr.right, context);\n\n switch (expr.operator) {\n case '+':\n // 字符串拼接或数字相加\n if (typeof left === 'string' || typeof right === 'string') {\n return String(left) + String(right);\n }\n // 确保是数字类型\n if (typeof left !== 'number' || typeof right !== 'number') {\n throw new CompileError(\n `Cannot add ${typeof left} and ${typeof right}. Both operands must be numbers or at least one must be a string.`\n );\n }\n return left + right;\n\n case '-':\n if (typeof left !== 'number' || typeof right !== 'number') {\n throw new CompileError(\n `Cannot subtract ${typeof right} from ${typeof left}. Both operands must be numbers.`\n );\n }\n return left - right;\n\n case '*':\n if (typeof left !== 'number' || typeof right !== 'number') {\n throw new CompileError(\n `Cannot multiply ${typeof left} and ${typeof right}. Both operands must be numbers.`\n );\n }\n return left * right;\n\n case '/':\n if (typeof left !== 'number' || typeof right !== 'number') {\n throw new CompileError(\n `Cannot divide ${typeof left} by ${typeof right}. Both operands must be numbers.`\n );\n }\n if (right === 0) {\n throw new CompileError('Division by zero is not allowed');\n }\n return left / right;\n\n default:\n throw new CompileError(`Unknown operator: ${expr.operator}`);\n }\n}\n"],"names":["ParseError","message","location","createParser","parse","source","error","errorMessage","parseSlideDSL","CompileError","compile","ast","rules","ruleNode","compileRule","node","context","compileSlide","slideNode","compileRuleBody","body","compileForLoop","slides","collection","evaluateExpression","item","loopContext","compileContent","compileBehavior","evaluateProps","line","props","result","key","value","expr","evaluateMemberExpression","evaluateBinaryExpression","pathParts","prop","left","right"],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});function Gs(a,v){function r(){this.constructor=a}r.prototype=v.prototype,a.prototype=new r}function B(a,v,r,y){var d=Error.call(this,a);return Object.setPrototypeOf&&Object.setPrototypeOf(d,B.prototype),d.expected=v,d.found=r,d.location=y,d.name="SyntaxError",d}Gs(B,Error);function Ae(a,v,r){return r=r||" ",a.length>v?a:(v-=a.length,r+=r.repeat(v),a+r.slice(0,v))}B.prototype.format=function(a){var v="Error: "+this.message;if(this.location){var r=null,y;for(y=0;y<a.length;y++)if(a[y].source===this.location.source){r=a[y].text.split(/\r\n|\n|\r/g);break}var d=this.location.start,w=this.location.source&&typeof this.location.source.offset=="function"?this.location.source.offset(d):d,S=this.location.source+":"+w.line+":"+w.column;if(r){var A=this.location.end,b=Ae("",w.line.toString().length," "),$=r[d.line-1],p=d.line===A.line?A.column:$.length+1,C=p-d.column||1;v+=`
|
|
2
|
+
--> `+S+`
|
|
3
|
+
`+b+` |
|
|
4
|
+
`+w.line+" | "+$+`
|
|
5
|
+
`+b+" | "+Ae("",d.column-1," ")+Ae("",C,"^")}else v+=`
|
|
6
|
+
at `+S}return v};B.buildMessage=function(a,v){var r={literal:function($){return'"'+d($.text)+'"'},class:function($){var p=$.parts.map(function(C){return Array.isArray(C)?w(C[0])+"-"+w(C[1]):w(C)});return"["+($.inverted?"^":"")+p.join("")+"]"},any:function(){return"any character"},end:function(){return"end of input"},other:function($){return $.description}};function y($){return $.charCodeAt(0).toString(16).toUpperCase()}function d($){return $.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\0/g,"\\0").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/[\x00-\x0F]/g,function(p){return"\\x0"+y(p)}).replace(/[\x10-\x1F\x7F-\x9F]/g,function(p){return"\\x"+y(p)})}function w($){return $.replace(/\\/g,"\\\\").replace(/\]/g,"\\]").replace(/\^/g,"\\^").replace(/-/g,"\\-").replace(/\0/g,"\\0").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/[\x00-\x0F]/g,function(p){return"\\x0"+y(p)}).replace(/[\x10-\x1F\x7F-\x9F]/g,function(p){return"\\x"+y(p)})}function S($){return r[$.type]($)}function A($){var p=$.map(S),C,R;if(p.sort(),p.length>0){for(C=1,R=1;C<p.length;C++)p[C-1]!==p[C]&&(p[R]=p[C],R++);p.length=R}switch(p.length){case 1:return p[0];case 2:return p[0]+" or "+p[1];default:return p.slice(0,-1).join(", ")+", or "+p[p.length-1]}}function b($){return $?'"'+d($)+'"':"end of input"}return"Expected "+A(a)+" but "+b(v)+" found."};function Hs(a,v){v=v!==void 0?v:{};var r={},y=v.grammarSource,d={Start:qe},w=qe,S="present",A="{",b="}",$="quiz",p="survey",C="form",R="assessment",be="rules",P="rule",V="start",L="content",W="end",I="for",N="in",X="slide",G="dynamic",H="text",J="name",le=":",Q="attrs",Y="behavior",k="transition",fr="+",Ce=".",ce='"',oe="'",ee="\\",ir="n",tr="r",ar="t",me="true",ye="false",xe="//",Ee="/*",z="*/",re=/^[a-zA-Z_]/,j=/^[a-zA-Z0-9_]/,nr=/^["'\\]/,we=/^[0-9]/,Fe=/^[\t-\r \u2028-\u2029]/,lr=/^[\n\r\u2028\u2029]/,Se=g("present",!1),x=g("{",!1),E=g("}",!1),cr=g("quiz",!1),or=g("survey",!1),ur=g("form",!1),gr=g("assessment",!1),pr=g("rules",!1),se=g("rule",!1),je=g("start",!1),fe=g("content",!1),Te=g("end",!1),ue=g("for",!1),ge=g("in",!1),Pe=g("slide",!1),Le=g("dynamic",!1),Re=g("text",!1),Oe=g("name",!1),pe=g(":",!1),De=g("attrs",!1),ie=_([["a","z"],["A","Z"],"_"],!1,!1),T=_([["a","z"],["A","Z"],["0","9"],"_"],!1,!1),Be=g("behavior",!1),Ie=g("transition",!1),vr=g("+",!1),Ne=g(".",!1),ve=g('"',!1),$e=g("'",!1),te=g("\\",!1),M=ps(),$r=_(['"',"'","\\"],!1,!1),hr=g("n",!1),dr=g("r",!1),Ar=g("t",!1),ze=_([["0","9"]],!1,!1),br=g("true",!1),Cr=g("false",!1),mr=$s("whitespace"),Me=_([[" ","\r"]," ",["\u2028","\u2029"]],!1,!1),yr=_([`
|
|
7
|
+
`,"\r","\u2028","\u2029"],!1,!1),xr=g("//",!1),Er=g("/*",!1),he=g("*/",!1),wr=function(e){return e},Fr=function(e,f,i){return{version:"1.0.0",sourceType:e,sourceId:f,...i}},Sr=function(e){return{rules:e}},jr=function(e){return e},Tr=function(e,f){return m("rule",{ruleType:"start",name:e,slides:f})},Pr=function(e,f){return m("rule",{ruleType:"content",name:e,body:f})},Lr=function(e,f){return m("rule",{ruleType:"end",name:e,slides:f})},Rr=function(e,f,i){return m("for",{variable:e,collection:f,body:i})},Or=function(e,f,i){return m("for",{variable:e,collection:f,body:i})},Dr=function(e){return e},Br=function(e,f){return m("slide",{content:e,behavior:f||void 0})},Ir=function(e,f){return m("dynamic",{component:e,props:f})},Nr=function(e){return m("text",{lines:e})},zr=function(e){return e},Mr=function(e){return Ws(e)},Zr=function(e){return e},_r=function(e,f){return[e,f]},qr=function(e,f){return e+f.join("")},Kr=function(e){return e},Ur=function(e){return e},Vr=function(e){return m("behavior",{transition:e})},Wr=function(e,f){return m("transition",{transType:e,options:f||{}})},Xr=function(e,f){return e+f.join("")},Gr=function(e){return Xs(e)},Hr=function(e,f){return[e,f]},Jr=function(e,f){return m("binary",{operator:"+",left:e,right:f})},Qr=function(e,f){return m("member",{object:e,properties:f.map(i=>i[1])})},Yr=function(e){return m("member",{object:e,properties:[]})},kr=function(e,f){return e+f.join("")},es=function(e,f){return e+f.join("")},rs=function(e){return e.join("")},ss=function(e){return e.join("")},fs=function(e){return e},is=function(e){return e},ts=function(e){return e},as=function(e){return e},ns=function(){return`
|
|
8
|
+
`},ls=function(){return"\r"},cs=function(){return" "},os=function(e){return m("number",{value:parseInt(e.join(""),10)})},us=function(){return m("boolean",{value:!0})},gs=function(){return m("boolean",{value:!1})},s=v.peg$currPos|0,Z=[{line:1,column:1}],F=s,ae=v.peg$maxFailExpected||[],n=v.peg$silentFails|0,q;if(v.startRule){if(!(v.startRule in d))throw new Error(`Can't start parsing from rule "`+v.startRule+'".');w=d[v.startRule]}function g(e,f){return{type:"literal",text:e,ignoreCase:f}}function _(e,f,i){return{type:"class",parts:e,inverted:f,ignoreCase:i}}function ps(){return{type:"any"}}function vs(){return{type:"end"}}function $s(e){return{type:"other",description:e}}function Ze(e){var f=Z[e],i;if(f)return f;if(e>=Z.length)i=Z.length-1;else for(i=e;!Z[--i];);for(f=Z[i],f={line:f.line,column:f.column};i<e;)a.charCodeAt(i)===10?(f.line++,f.column=1):f.column++,i++;return Z[e]=f,f}function _e(e,f,i){var t=Ze(e),c=Ze(f),u={source:y,start:{offset:e,line:t.line,column:t.column},end:{offset:f,line:c.line,column:c.column}};return u}function l(e){s<F||(s>F&&(F=s,ae=[]),ae.push(e))}function hs(e,f,i){return new B(B.buildMessage(e,f),e,f,i)}function qe(){var e,f;return e=s,o(),f=ds(),f!==r?(o(),e=wr(f)):(s=e,e=r),e}function ds(){var e,f,i,t,c,u,h;return e=s,a.substr(s,7)===S?(f=S,s+=7):(f=r,n===0&&l(Se)),f!==r?(o(),i=As(),i!==r?(o(),t=O(),t!==r?(o(),a.charCodeAt(s)===123?(c=A,s++):(c=r,n===0&&l(x)),c!==r?(o(),u=bs(),u!==r?(o(),a.charCodeAt(s)===125?(h=b,s++):(h=r,n===0&&l(E)),h!==r?e=Fr(i,t,u):(s=e,e=r)):(s=e,e=r)):(s=e,e=r)):(s=e,e=r)):(s=e,e=r)):(s=e,e=r),e}function As(){var e;return a.substr(s,4)===$?(e=$,s+=4):(e=r,n===0&&l(cr)),e===r&&(a.substr(s,6)===p?(e=p,s+=6):(e=r,n===0&&l(or)),e===r&&(a.substr(s,4)===C?(e=C,s+=4):(e=r,n===0&&l(ur)),e===r&&(a.substr(s,10)===R?(e=R,s+=10):(e=r,n===0&&l(gr))))),e}function bs(){var e,f,i,t,c;return e=s,a.substr(s,5)===be?(f=be,s+=5):(f=r,n===0&&l(pr)),f!==r?(o(),a.charCodeAt(s)===123?(i=A,s++):(i=r,n===0&&l(x)),i!==r?(o(),t=Cs(),o(),a.charCodeAt(s)===125?(c=b,s++):(c=r,n===0&&l(E)),c!==r?e=Sr(t):(s=e,e=r)):(s=e,e=r)):(s=e,e=r),e}function Cs(){var e,f,i;for(e=s,f=[],i=Ke();i!==r;)f.push(i),i=Ke();return f=jr(f),e=f,e}function Ke(){var e;return e=ms(),e===r&&(e=ys(),e===r&&(e=xs())),e}function ms(){var e,f,i,t,c,u,h;return e=s,a.substr(s,4)===P?(f=P,s+=4):(f=r,n===0&&l(se)),f!==r?(o(),a.substr(s,5)===V?(i=V,s+=5):(i=r,n===0&&l(je)),i!==r?(o(),t=O(),t!==r?(o(),a.charCodeAt(s)===123?(c=A,s++):(c=r,n===0&&l(x)),c!==r?(o(),u=K(),o(),a.charCodeAt(s)===125?(h=b,s++):(h=r,n===0&&l(E)),h!==r?(o(),e=Tr(t,u)):(s=e,e=r)):(s=e,e=r)):(s=e,e=r)):(s=e,e=r)):(s=e,e=r),e}function ys(){var e,f,i,t,c,u,h;return e=s,a.substr(s,4)===P?(f=P,s+=4):(f=r,n===0&&l(se)),f!==r?(o(),a.substr(s,7)===L?(i=L,s+=7):(i=r,n===0&&l(fe)),i!==r?(o(),t=O(),t!==r?(o(),a.charCodeAt(s)===123?(c=A,s++):(c=r,n===0&&l(x)),c!==r?(o(),u=Es(),u!==r?(o(),a.charCodeAt(s)===125?(h=b,s++):(h=r,n===0&&l(E)),h!==r?(o(),e=Pr(t,u)):(s=e,e=r)):(s=e,e=r)):(s=e,e=r)):(s=e,e=r)):(s=e,e=r)):(s=e,e=r),e}function xs(){var e,f,i,t,c,u,h;return e=s,a.substr(s,4)===P?(f=P,s+=4):(f=r,n===0&&l(se)),f!==r?(o(),a.substr(s,3)===W?(i=W,s+=3):(i=r,n===0&&l(Te)),i!==r?(o(),t=O(),t!==r?(o(),a.charCodeAt(s)===123?(c=A,s++):(c=r,n===0&&l(x)),c!==r?(o(),u=K(),o(),a.charCodeAt(s)===125?(h=b,s++):(h=r,n===0&&l(E)),h!==r?(o(),e=Lr(t,u)):(s=e,e=r)):(s=e,e=r)):(s=e,e=r)):(s=e,e=r)):(s=e,e=r),e}function Es(){var e;return e=ws(),e===r&&(e=K()),e}function ws(){var e,f,i,t,c,u,h,D;return e=s,a.substr(s,3)===I?(f=I,s+=3):(f=r,n===0&&l(ue)),f!==r?(o(),i=U(),i!==r?(o(),a.substr(s,2)===N?(t=N,s+=2):(t=r,n===0&&l(ge)),t!==r?(o(),c=ne(),c!==r?(o(),a.charCodeAt(s)===123?(u=A,s++):(u=r,n===0&&l(x)),u!==r?(o(),h=Fs(),h!==r?(o(),a.charCodeAt(s)===125?(D=b,s++):(D=r,n===0&&l(E)),D!==r?(o(),e=Rr(i,c,h)):(s=e,e=r)):(s=e,e=r)):(s=e,e=r)):(s=e,e=r)):(s=e,e=r)):(s=e,e=r)):(s=e,e=r),e}function Fs(){var e;return e=Ss(),e===r&&(e=K()),e}function Ss(){var e,f,i,t,c,u,h,D;return e=s,a.substr(s,3)===I?(f=I,s+=3):(f=r,n===0&&l(ue)),f!==r?(o(),i=U(),i!==r?(o(),a.substr(s,2)===N?(t=N,s+=2):(t=r,n===0&&l(ge)),t!==r?(o(),c=ne(),c!==r?(o(),a.charCodeAt(s)===123?(u=A,s++):(u=r,n===0&&l(x)),u!==r?(o(),h=K(),o(),a.charCodeAt(s)===125?(D=b,s++):(D=r,n===0&&l(E)),D!==r?(o(),e=Or(i,c,h)):(s=e,e=r)):(s=e,e=r)):(s=e,e=r)):(s=e,e=r)):(s=e,e=r)):(s=e,e=r),e}function K(){var e,f,i;for(e=s,f=[],i=Ue();i!==r;)f.push(i),i=Ue();return f=Dr(f),e=f,e}function Ue(){var e,f,i,t,c,u;return e=s,a.substr(s,5)===X?(f=X,s+=5):(f=r,n===0&&l(Pe)),f!==r?(o(),a.charCodeAt(s)===123?(i=A,s++):(i=r,n===0&&l(x)),i!==r?(o(),t=js(),t!==r?(o(),c=Ns(),c===r&&(c=null),o(),a.charCodeAt(s)===125?(u=b,s++):(u=r,n===0&&l(E)),u!==r?(o(),e=Br(t,c)):(s=e,e=r)):(s=e,e=r)):(s=e,e=r)):(s=e,e=r),e}function js(){var e;return e=Ts(),e===r&&(e=Ps()),e}function Ts(){var e,f,i,t,c,u,h;return e=s,a.substr(s,7)===L?(f=L,s+=7):(f=r,n===0&&l(fe)),f!==r?(o(),a.substr(s,7)===G?(i=G,s+=7):(i=r,n===0&&l(Le)),i!==r?(o(),a.charCodeAt(s)===123?(t=A,s++):(t=r,n===0&&l(x)),t!==r?(o(),c=Ls(),c!==r?(o(),u=Rs(),u!==r?(o(),a.charCodeAt(s)===125?(h=b,s++):(h=r,n===0&&l(E)),h!==r?(o(),e=Ir(c,u)):(s=e,e=r)):(s=e,e=r)):(s=e,e=r)):(s=e,e=r)):(s=e,e=r)):(s=e,e=r),e}function Ps(){var e,f,i,t,c,u;return e=s,a.substr(s,7)===L?(f=L,s+=7):(f=r,n===0&&l(fe)),f!==r?(o(),a.substr(s,4)===H?(i=H,s+=4):(i=r,n===0&&l(Re)),i!==r?(o(),a.charCodeAt(s)===123?(t=A,s++):(t=r,n===0&&l(x)),t!==r?(o(),c=Is(),o(),a.charCodeAt(s)===125?(u=b,s++):(u=r,n===0&&l(E)),u!==r?(o(),e=Nr(c)):(s=e,e=r)):(s=e,e=r)):(s=e,e=r)):(s=e,e=r),e}function Ls(){var e,f,i,t;return e=s,a.substr(s,4)===J?(f=J,s+=4):(f=r,n===0&&l(Oe)),f!==r?(o(),a.charCodeAt(s)===58?(i=le,s++):(i=r,n===0&&l(pe)),i!==r?(o(),t=O(),t!==r?e=zr(t):(s=e,e=r)):(s=e,e=r)):(s=e,e=r),e}function Rs(){var e,f,i,t,c;return e=s,a.substr(s,5)===Q?(f=Q,s+=5):(f=r,n===0&&l(De)),f!==r?(o(),a.charCodeAt(s)===123?(i=A,s++):(i=r,n===0&&l(x)),i!==r?(o(),t=Os(),o(),a.charCodeAt(s)===125?(c=b,s++):(c=r,n===0&&l(E)),c!==r?e=Mr(t):(s=e,e=r)):(s=e,e=r)):(s=e,e=r),e}function Os(){var e,f,i;for(e=s,f=[],i=Ve();i!==r;)f.push(i),i=Ve();return f=Zr(f),e=f,e}function Ve(){var e,f,i,t;return e=s,f=Bs(),f!==r?(o(),a.charCodeAt(s)===58?(i=le,s++):(i=r,n===0&&l(pe)),i!==r?(o(),t=Ds(),t!==r?(o(),e=_r(f,t)):(s=e,e=r)):(s=e,e=r)):(s=e,e=r),e}function Ds(){var e;return e=O(),e===r&&(e=ke(),e===r&&(e=er(),e===r&&(e=ne()))),e}function Bs(){var e,f,i,t;if(e=s,f=a.charAt(s),re.test(f)?s++:(f=r,n===0&&l(ie)),f!==r){for(i=[],t=a.charAt(s),j.test(t)?s++:(t=r,n===0&&l(T));t!==r;)i.push(t),t=a.charAt(s),j.test(t)?s++:(t=r,n===0&&l(T));e=qr(f,i)}else s=e,e=r;return e}function Is(){var e,f,i;for(e=s,f=[],i=We();i!==r;)f.push(i),i=We();return f=Kr(f),e=f,e}function We(){var e,f;return e=s,f=de(),f!==r?(o(),e=Ur(f)):(s=e,e=r),e}function Ns(){var e,f,i,t,c;return e=s,a.substr(s,8)===Y?(f=Y,s+=8):(f=r,n===0&&l(Be)),f!==r?(o(),a.charCodeAt(s)===123?(i=A,s++):(i=r,n===0&&l(x)),i!==r?(o(),t=zs(),t!==r?(o(),a.charCodeAt(s)===125?(c=b,s++):(c=r,n===0&&l(E)),c!==r?(o(),e=Vr(t)):(s=e,e=r)):(s=e,e=r)):(s=e,e=r)):(s=e,e=r),e}function zs(){var e,f,i,t,c,u;return e=s,a.substr(s,10)===k?(f=k,s+=10):(f=r,n===0&&l(Ie)),f!==r?(o(),i=Ms(),i!==r?(o(),a.charCodeAt(s)===123?(t=A,s++):(t=r,n===0&&l(x)),t!==r?(o(),c=Zs(),o(),a.charCodeAt(s)===125?(u=b,s++):(u=r,n===0&&l(E)),u!==r?(o(),e=Wr(i,c)):(s=e,e=r)):(s=e,e=r)):(s=e,e=r)):(s=e,e=r),e}function Ms(){var e,f,i,t;if(e=s,f=a.charAt(s),re.test(f)?s++:(f=r,n===0&&l(ie)),f!==r){for(i=[],t=a.charAt(s),j.test(t)?s++:(t=r,n===0&&l(T));t!==r;)i.push(t),t=a.charAt(s),j.test(t)?s++:(t=r,n===0&&l(T));e=Xr(f,i)}else s=e,e=r;return e}function Zs(){var e,f,i;for(e=s,f=[],i=Xe();i!==r;)f.push(i),i=Xe();return f=Gr(f),e=f,e}function Xe(){var e,f,i,t;return e=s,f=U(),f!==r?(o(),a.charCodeAt(s)===58?(i=le,s++):(i=r,n===0&&l(pe)),i!==r?(o(),t=de(),t!==r?(o(),e=Hr(f,t)):(s=e,e=r)):(s=e,e=r)):(s=e,e=r),e}function de(){var e;return e=_s(),e===r&&(e=Ge()),e}function _s(){var e,f,i,t;return e=s,f=Ge(),f!==r?(o(),a.charCodeAt(s)===43?(i=fr,s++):(i=r,n===0&&l(vr)),i!==r?(o(),t=de(),t!==r?e=Jr(f,t):(s=e,e=r)):(s=e,e=r)):(s=e,e=r),e}function Ge(){var e;return e=O(),e===r&&(e=ke(),e===r&&(e=er(),e===r&&(e=ne()))),e}function ne(){var e,f,i,t,c,u;if(e=s,f=U(),f!==r){if(i=[],t=s,a.charCodeAt(s)===46?(c=Ce,s++):(c=r,n===0&&l(Ne)),c!==r?(u=He(),u!==r?(c=[c,u],t=c):(s=t,t=r)):(s=t,t=r),t!==r)for(;t!==r;)i.push(t),t=s,a.charCodeAt(s)===46?(c=Ce,s++):(c=r,n===0&&l(Ne)),c!==r?(u=He(),u!==r?(c=[c,u],t=c):(s=t,t=r)):(s=t,t=r);else i=r;i!==r?e=Qr(f,i):(s=e,e=r)}else s=e,e=r;return e===r&&(e=s,f=U(),f!==r&&(f=Yr(f)),e=f),e}function He(){var e,f,i,t;if(e=s,f=a.charAt(s),re.test(f)?s++:(f=r,n===0&&l(ie)),f!==r){for(i=[],t=a.charAt(s),j.test(t)?s++:(t=r,n===0&&l(T));t!==r;)i.push(t),t=a.charAt(s),j.test(t)?s++:(t=r,n===0&&l(T));e=kr(f,i)}else s=e,e=r;return e}function U(){var e,f,i,t,c;if(e=s,f=s,n++,i=qs(),n--,i===r?f=void 0:(s=f,f=r),f!==r)if(i=a.charAt(s),re.test(i)?s++:(i=r,n===0&&l(ie)),i!==r){for(t=[],c=a.charAt(s),j.test(c)?s++:(c=r,n===0&&l(T));c!==r;)t.push(c),c=a.charAt(s),j.test(c)?s++:(c=r,n===0&&l(T));e=es(i,t)}else s=e,e=r;else s=e,e=r;return e}function O(){var e,f,i,t;if(e=s,a.charCodeAt(s)===34?(f=ce,s++):(f=r,n===0&&l(ve)),f!==r){for(i=[],t=Je();t!==r;)i.push(t),t=Je();a.charCodeAt(s)===34?(t=ce,s++):(t=r,n===0&&l(ve)),t!==r?e=rs(i):(s=e,e=r)}else s=e,e=r;if(e===r)if(e=s,a.charCodeAt(s)===39?(f=oe,s++):(f=r,n===0&&l($e)),f!==r){for(i=[],t=Qe();t!==r;)i.push(t),t=Qe();a.charCodeAt(s)===39?(t=oe,s++):(t=r,n===0&&l($e)),t!==r?e=ss(i):(s=e,e=r)}else s=e,e=r;return e}function Je(){var e,f,i,t;return e=s,f=s,n++,a.charCodeAt(s)===34?(i=ce,s++):(i=r,n===0&&l(ve)),n--,i===r?f=void 0:(s=f,f=r),f!==r?(i=s,n++,a.charCodeAt(s)===92?(t=ee,s++):(t=r,n===0&&l(te)),n--,t===r?i=void 0:(s=i,i=r),i!==r?(a.length>s?(t=a.charAt(s),s++):(t=r,n===0&&l(M)),t!==r?e=fs(t):(s=e,e=r)):(s=e,e=r)):(s=e,e=r),e===r&&(e=s,a.charCodeAt(s)===92?(f=ee,s++):(f=r,n===0&&l(te)),f!==r?(i=Ye(),i!==r?e=is(i):(s=e,e=r)):(s=e,e=r)),e}function Qe(){var e,f,i,t;return e=s,f=s,n++,a.charCodeAt(s)===39?(i=oe,s++):(i=r,n===0&&l($e)),n--,i===r?f=void 0:(s=f,f=r),f!==r?(i=s,n++,a.charCodeAt(s)===92?(t=ee,s++):(t=r,n===0&&l(te)),n--,t===r?i=void 0:(s=i,i=r),i!==r?(a.length>s?(t=a.charAt(s),s++):(t=r,n===0&&l(M)),t!==r?e=ts(t):(s=e,e=r)):(s=e,e=r)):(s=e,e=r),e===r&&(e=s,a.charCodeAt(s)===92?(f=ee,s++):(f=r,n===0&&l(te)),f!==r?(i=Ye(),i!==r?e=as(i):(s=e,e=r)):(s=e,e=r)),e}function Ye(){var e,f;return e=a.charAt(s),nr.test(e)?s++:(e=r,n===0&&l($r)),e===r&&(e=s,a.charCodeAt(s)===110?(f=ir,s++):(f=r,n===0&&l(hr)),f!==r&&(f=ns()),e=f,e===r&&(e=s,a.charCodeAt(s)===114?(f=tr,s++):(f=r,n===0&&l(dr)),f!==r&&(f=ls()),e=f,e===r&&(e=s,a.charCodeAt(s)===116?(f=ar,s++):(f=r,n===0&&l(Ar)),f!==r&&(f=cs()),e=f))),e}function ke(){var e,f,i;if(e=s,f=[],i=a.charAt(s),we.test(i)?s++:(i=r,n===0&&l(ze)),i!==r)for(;i!==r;)f.push(i),i=a.charAt(s),we.test(i)?s++:(i=r,n===0&&l(ze));else f=r;return f!==r&&(f=os(f)),e=f,e}function er(){var e,f;return e=s,a.substr(s,4)===me?(f=me,s+=4):(f=r,n===0&&l(br)),f!==r&&(f=us()),e=f,e===r&&(e=s,a.substr(s,5)===ye?(f=ye,s+=5):(f=r,n===0&&l(Cr)),f!==r&&(f=gs()),e=f),e}function qs(){var e,f,i,t;return e=s,a.substr(s,7)===S?(f=S,s+=7):(f=r,n===0&&l(Se)),f===r&&(a.substr(s,4)===P?(f=P,s+=4):(f=r,n===0&&l(se)),f===r&&(a.substr(s,5)===V?(f=V,s+=5):(f=r,n===0&&l(je)),f===r&&(a.substr(s,7)===L?(f=L,s+=7):(f=r,n===0&&l(fe)),f===r&&(a.substr(s,3)===W?(f=W,s+=3):(f=r,n===0&&l(Te)),f===r&&(a.substr(s,3)===I?(f=I,s+=3):(f=r,n===0&&l(ue)),f===r&&(a.substr(s,2)===N?(f=N,s+=2):(f=r,n===0&&l(ge)),f===r&&(a.substr(s,5)===X?(f=X,s+=5):(f=r,n===0&&l(Pe)),f===r&&(a.substr(s,7)===G?(f=G,s+=7):(f=r,n===0&&l(Le)),f===r&&(a.substr(s,4)===H?(f=H,s+=4):(f=r,n===0&&l(Re)),f===r&&(a.substr(s,4)===J?(f=J,s+=4):(f=r,n===0&&l(Oe)),f===r&&(a.substr(s,5)===Q?(f=Q,s+=5):(f=r,n===0&&l(De)),f===r&&(a.substr(s,8)===Y?(f=Y,s+=8):(f=r,n===0&&l(Be)),f===r&&(a.substr(s,10)===k?(f=k,s+=10):(f=r,n===0&&l(Ie))))))))))))))),f!==r?(i=s,n++,t=Ks(),n--,t===r?i=void 0:(s=i,i=r),i!==r?(f=[f,i],e=f):(s=e,e=r)):(s=e,e=r),e}function Ks(){var e;return e=a.charAt(s),j.test(e)?s++:(e=r,n===0&&l(T)),e}function o(){var e,f;for(n++,e=[],f=a.charAt(s),Fe.test(f)?s++:(f=r,n===0&&l(Me)),f===r&&(f=sr());f!==r;)e.push(f),f=a.charAt(s),Fe.test(f)?s++:(f=r,n===0&&l(Me)),f===r&&(f=sr());return n--,f=r,n===0&&l(mr),e}function rr(){var e;return e=a.charAt(s),lr.test(e)?s++:(e=r,n===0&&l(yr)),e}function sr(){var e;return e=Us(),e===r&&(e=Vs()),e}function Us(){var e,f,i,t,c,u;if(e=s,a.substr(s,2)===xe?(f=xe,s+=2):(f=r,n===0&&l(xr)),f!==r){for(i=[],t=s,c=s,n++,u=rr(),n--,u===r?c=void 0:(s=c,c=r),c!==r?(a.length>s?(u=a.charAt(s),s++):(u=r,n===0&&l(M)),u!==r?(c=[c,u],t=c):(s=t,t=r)):(s=t,t=r);t!==r;)i.push(t),t=s,c=s,n++,u=rr(),n--,u===r?c=void 0:(s=c,c=r),c!==r?(a.length>s?(u=a.charAt(s),s++):(u=r,n===0&&l(M)),u!==r?(c=[c,u],t=c):(s=t,t=r)):(s=t,t=r);f=[f,i],e=f}else s=e,e=r;return e}function Vs(){var e,f,i,t,c,u;if(e=s,a.substr(s,2)===Ee?(f=Ee,s+=2):(f=r,n===0&&l(Er)),f!==r){for(i=[],t=s,c=s,n++,a.substr(s,2)===z?(u=z,s+=2):(u=r,n===0&&l(he)),n--,u===r?c=void 0:(s=c,c=r),c!==r?(a.length>s?(u=a.charAt(s),s++):(u=r,n===0&&l(M)),u!==r?(c=[c,u],t=c):(s=t,t=r)):(s=t,t=r);t!==r;)i.push(t),t=s,c=s,n++,a.substr(s,2)===z?(u=z,s+=2):(u=r,n===0&&l(he)),n--,u===r?c=void 0:(s=c,c=r),c!==r?(a.length>s?(u=a.charAt(s),s++):(u=r,n===0&&l(M)),u!==r?(c=[c,u],t=c):(s=t,t=r)):(s=t,t=r);a.substr(s,2)===z?(t=z,s+=2):(t=r,n===0&&l(he)),t!==r?(f=[f,i,t],e=f):(s=e,e=r)}else s=e,e=r;return e}function m(e,f){return{type:e,...f}}function Ws(e){return Object.fromEntries(e)}function Xs(e){return Object.fromEntries(e)}if(q=w(),v.peg$library)return{peg$result:q,peg$currPos:s,peg$FAILED:r,peg$maxFailExpected:ae,peg$maxFailPos:F};if(q!==r&&s===a.length)return q;throw q!==r&&s<a.length&&l(vs()),hs(ae,F<a.length?a.charAt(F):null,F<a.length?_e(F,F+1):_e(F,F))}exports.SyntaxError=B;exports.parse=Hs;
|
|
9
|
+
//# sourceMappingURL=parser-vQQlctmA.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser-vQQlctmA.cjs","sources":["../src/generated/parser.js"],"sourcesContent":["// @generated by Peggy 4.2.0.\n//\n// https://peggyjs.org/\n\n\nfunction peg$subclass(child, parent) {\n function C() { this.constructor = child; }\n C.prototype = parent.prototype;\n child.prototype = new C();\n}\n\nfunction peg$SyntaxError(message, expected, found, location) {\n var self = Error.call(this, message);\n // istanbul ignore next Check is a necessary evil to support older environments\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(self, peg$SyntaxError.prototype);\n }\n self.expected = expected;\n self.found = found;\n self.location = location;\n self.name = \"SyntaxError\";\n return self;\n}\n\npeg$subclass(peg$SyntaxError, Error);\n\nfunction peg$padEnd(str, targetLength, padString) {\n padString = padString || \" \";\n if (str.length > targetLength) { return str; }\n targetLength -= str.length;\n padString += padString.repeat(targetLength);\n return str + padString.slice(0, targetLength);\n}\n\npeg$SyntaxError.prototype.format = function(sources) {\n var str = \"Error: \" + this.message;\n if (this.location) {\n var src = null;\n var k;\n for (k = 0; k < sources.length; k++) {\n if (sources[k].source === this.location.source) {\n src = sources[k].text.split(/\\r\\n|\\n|\\r/g);\n break;\n }\n }\n var s = this.location.start;\n var offset_s = (this.location.source && (typeof this.location.source.offset === \"function\"))\n ? this.location.source.offset(s)\n : s;\n var loc = this.location.source + \":\" + offset_s.line + \":\" + offset_s.column;\n if (src) {\n var e = this.location.end;\n var filler = peg$padEnd(\"\", offset_s.line.toString().length, ' ');\n var line = src[s.line - 1];\n var last = s.line === e.line ? e.column : line.length + 1;\n var hatLen = (last - s.column) || 1;\n str += \"\\n --> \" + loc + \"\\n\"\n + filler + \" |\\n\"\n + offset_s.line + \" | \" + line + \"\\n\"\n + filler + \" | \" + peg$padEnd(\"\", s.column - 1, ' ')\n + peg$padEnd(\"\", hatLen, \"^\");\n } else {\n str += \"\\n at \" + loc;\n }\n }\n return str;\n};\n\npeg$SyntaxError.buildMessage = function(expected, found) {\n var DESCRIBE_EXPECTATION_FNS = {\n literal: function(expectation) {\n return \"\\\"\" + literalEscape(expectation.text) + \"\\\"\";\n },\n\n class: function(expectation) {\n var escapedParts = expectation.parts.map(function(part) {\n return Array.isArray(part)\n ? classEscape(part[0]) + \"-\" + classEscape(part[1])\n : classEscape(part);\n });\n\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts.join(\"\") + \"]\";\n },\n\n any: function() {\n return \"any character\";\n },\n\n end: function() {\n return \"end of input\";\n },\n\n other: function(expectation) {\n return expectation.description;\n }\n };\n\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n\n function literalEscape(s) {\n return s\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\"/g, \"\\\\\\\"\")\n .replace(/\\0/g, \"\\\\0\")\n .replace(/\\t/g, \"\\\\t\")\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\r/g, \"\\\\r\")\n .replace(/[\\x00-\\x0F]/g, function(ch) { return \"\\\\x0\" + hex(ch); })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) { return \"\\\\x\" + hex(ch); });\n }\n\n function classEscape(s) {\n return s\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\\]/g, \"\\\\]\")\n .replace(/\\^/g, \"\\\\^\")\n .replace(/-/g, \"\\\\-\")\n .replace(/\\0/g, \"\\\\0\")\n .replace(/\\t/g, \"\\\\t\")\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\r/g, \"\\\\r\")\n .replace(/[\\x00-\\x0F]/g, function(ch) { return \"\\\\x0\" + hex(ch); })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) { return \"\\\\x\" + hex(ch); });\n }\n\n function describeExpectation(expectation) {\n return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n }\n\n function describeExpected(expected) {\n var descriptions = expected.map(describeExpectation);\n var i, j;\n\n descriptions.sort();\n\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n descriptions.length = j;\n }\n\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n\n default:\n return descriptions.slice(0, -1).join(\", \")\n + \", or \"\n + descriptions[descriptions.length - 1];\n }\n }\n\n function describeFound(found) {\n return found ? \"\\\"\" + literalEscape(found) + \"\\\"\" : \"end of input\";\n }\n\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n};\n\nfunction peg$parse(input, options) {\n options = options !== undefined ? options : {};\n\n var peg$FAILED = {};\n var peg$source = options.grammarSource;\n\n var peg$startRuleFunctions = { Start: peg$parseStart };\n var peg$startRuleFunction = peg$parseStart;\n\n var peg$c0 = \"present\";\n var peg$c1 = \"{\";\n var peg$c2 = \"}\";\n var peg$c3 = \"quiz\";\n var peg$c4 = \"survey\";\n var peg$c5 = \"form\";\n var peg$c6 = \"assessment\";\n var peg$c7 = \"rules\";\n var peg$c8 = \"rule\";\n var peg$c9 = \"start\";\n var peg$c10 = \"content\";\n var peg$c11 = \"end\";\n var peg$c12 = \"for\";\n var peg$c13 = \"in\";\n var peg$c14 = \"slide\";\n var peg$c15 = \"dynamic\";\n var peg$c16 = \"text\";\n var peg$c17 = \"name\";\n var peg$c18 = \":\";\n var peg$c19 = \"attrs\";\n var peg$c20 = \"behavior\";\n var peg$c21 = \"transition\";\n var peg$c22 = \"+\";\n var peg$c23 = \".\";\n var peg$c24 = \"\\\"\";\n var peg$c25 = \"'\";\n var peg$c26 = \"\\\\\";\n var peg$c27 = \"n\";\n var peg$c28 = \"r\";\n var peg$c29 = \"t\";\n var peg$c30 = \"true\";\n var peg$c31 = \"false\";\n var peg$c32 = \"//\";\n var peg$c33 = \"/*\";\n var peg$c34 = \"*/\";\n\n var peg$r0 = /^[a-zA-Z_]/;\n var peg$r1 = /^[a-zA-Z0-9_]/;\n var peg$r2 = /^[\"'\\\\]/;\n var peg$r3 = /^[0-9]/;\n var peg$r4 = /^[\\t-\\r \\u2028-\\u2029]/;\n var peg$r5 = /^[ \\t\\v\\f]/;\n var peg$r6 = /^[\\n\\r\\u2028\\u2029]/;\n\n var peg$e0 = peg$literalExpectation(\"present\", false);\n var peg$e1 = peg$literalExpectation(\"{\", false);\n var peg$e2 = peg$literalExpectation(\"}\", false);\n var peg$e3 = peg$literalExpectation(\"quiz\", false);\n var peg$e4 = peg$literalExpectation(\"survey\", false);\n var peg$e5 = peg$literalExpectation(\"form\", false);\n var peg$e6 = peg$literalExpectation(\"assessment\", false);\n var peg$e7 = peg$literalExpectation(\"rules\", false);\n var peg$e8 = peg$literalExpectation(\"rule\", false);\n var peg$e9 = peg$literalExpectation(\"start\", false);\n var peg$e10 = peg$literalExpectation(\"content\", false);\n var peg$e11 = peg$literalExpectation(\"end\", false);\n var peg$e12 = peg$literalExpectation(\"for\", false);\n var peg$e13 = peg$literalExpectation(\"in\", false);\n var peg$e14 = peg$literalExpectation(\"slide\", false);\n var peg$e15 = peg$literalExpectation(\"dynamic\", false);\n var peg$e16 = peg$literalExpectation(\"text\", false);\n var peg$e17 = peg$literalExpectation(\"name\", false);\n var peg$e18 = peg$literalExpectation(\":\", false);\n var peg$e19 = peg$literalExpectation(\"attrs\", false);\n var peg$e20 = peg$classExpectation([[\"a\", \"z\"], [\"A\", \"Z\"], \"_\"], false, false);\n var peg$e21 = peg$classExpectation([[\"a\", \"z\"], [\"A\", \"Z\"], [\"0\", \"9\"], \"_\"], false, false);\n var peg$e22 = peg$literalExpectation(\"behavior\", false);\n var peg$e23 = peg$literalExpectation(\"transition\", false);\n var peg$e24 = peg$literalExpectation(\"+\", false);\n var peg$e25 = peg$literalExpectation(\".\", false);\n var peg$e26 = peg$literalExpectation(\"\\\"\", false);\n var peg$e27 = peg$literalExpectation(\"'\", false);\n var peg$e28 = peg$literalExpectation(\"\\\\\", false);\n var peg$e29 = peg$anyExpectation();\n var peg$e30 = peg$classExpectation([\"\\\"\", \"'\", \"\\\\\"], false, false);\n var peg$e31 = peg$literalExpectation(\"n\", false);\n var peg$e32 = peg$literalExpectation(\"r\", false);\n var peg$e33 = peg$literalExpectation(\"t\", false);\n var peg$e34 = peg$classExpectation([[\"0\", \"9\"]], false, false);\n var peg$e35 = peg$literalExpectation(\"true\", false);\n var peg$e36 = peg$literalExpectation(\"false\", false);\n var peg$e37 = peg$otherExpectation(\"whitespace\");\n var peg$e38 = peg$classExpectation([[\"\\t\", \"\\r\"], \" \", [\"\\u2028\", \"\\u2029\"]], false, false);\n var peg$e39 = peg$classExpectation([\" \", \"\\t\", \"\\v\", \"\\f\"], false, false);\n var peg$e40 = peg$classExpectation([\"\\n\", \"\\r\", \"\\u2028\", \"\\u2029\"], false, false);\n var peg$e41 = peg$literalExpectation(\"//\", false);\n var peg$e42 = peg$literalExpectation(\"/*\", false);\n var peg$e43 = peg$literalExpectation(\"*/\", false);\n\n var peg$f0 = function(presentation) {\n return presentation;\n };\n var peg$f1 = function(type, name, body) {\n return {\n version: \"1.0.0\",\n sourceType: type,\n sourceId: name,\n ...body\n };\n };\n var peg$f2 = function(rules) {\n return { rules };\n };\n var peg$f3 = function(rules) {\n return rules;\n };\n var peg$f4 = function(name, slides) {\n return buildNode(\"rule\", {\n ruleType: \"start\",\n name,\n slides\n });\n };\n var peg$f5 = function(name, body) {\n return buildNode(\"rule\", {\n ruleType: \"content\",\n name,\n body\n });\n };\n var peg$f6 = function(name, slides) {\n return buildNode(\"rule\", {\n ruleType: \"end\",\n name,\n slides\n });\n };\n var peg$f7 = function(variable, collection, body) {\n return buildNode(\"for\", {\n variable,\n collection,\n body\n });\n };\n var peg$f8 = function(variable, collection, body) {\n return buildNode(\"for\", {\n variable,\n collection,\n body\n });\n };\n var peg$f9 = function(slides) {\n return slides;\n };\n var peg$f10 = function(content, behavior) {\n return buildNode(\"slide\", {\n content,\n behavior: behavior || undefined\n });\n };\n var peg$f11 = function(name, attrs) {\n return buildNode(\"dynamic\", {\n component: name,\n props: attrs\n });\n };\n var peg$f12 = function(lines) {\n return buildNode(\"text\", {\n lines\n });\n };\n var peg$f13 = function(name) {\n return name;\n };\n var peg$f14 = function(attrs) {\n return buildAttrs(attrs);\n };\n var peg$f15 = function(attrs) {\n return attrs;\n };\n var peg$f16 = function(key, value) {\n return [key, value];\n };\n var peg$f17 = function(first, rest) {\n return first + rest.join('');\n };\n var peg$f18 = function(lines) {\n return lines;\n };\n var peg$f19 = function(expr) {\n return expr;\n };\n var peg$f20 = function(transition) {\n return buildNode(\"behavior\", {\n transition\n });\n };\n var peg$f21 = function(transType, options) {\n return buildNode(\"transition\", {\n transType,\n options: options || {}\n });\n };\n var peg$f22 = function(first, rest) {\n return first + rest.join('');\n };\n var peg$f23 = function(opts) {\n return buildOptions(opts);\n };\n var peg$f24 = function(key, value) {\n return [key, value];\n };\n var peg$f25 = function(left, right) {\n return buildNode(\"binary\", {\n operator: \"+\",\n left,\n right\n });\n };\n var peg$f26 = function(head, tail) {\n return buildNode(\"member\", {\n object: head,\n properties: tail.map(t => t[1])\n });\n };\n var peg$f27 = function(id) {\n return buildNode(\"member\", {\n object: id,\n properties: []\n });\n };\n var peg$f28 = function(first, rest) {\n return first + rest.join('');\n };\n var peg$f29 = function(first, rest) {\n return first + rest.join('');\n };\n var peg$f30 = function(chars) {\n return chars.join('');\n };\n var peg$f31 = function(chars) {\n return chars.join('');\n };\n var peg$f32 = function(char) { return char; };\n var peg$f33 = function(sequence) { return sequence; };\n var peg$f34 = function(char) { return char; };\n var peg$f35 = function(sequence) { return sequence; };\n var peg$f36 = function() { return \"\\n\"; };\n var peg$f37 = function() { return \"\\r\"; };\n var peg$f38 = function() { return \"\\t\"; };\n var peg$f39 = function(digits) {\n return buildNode(\"number\", {\n value: parseInt(digits.join(''), 10)\n });\n };\n var peg$f40 = function() {\n return buildNode(\"boolean\", {\n value: true\n });\n };\n var peg$f41 = function() {\n return buildNode(\"boolean\", {\n value: false\n });\n };\n var peg$currPos = options.peg$currPos | 0;\n var peg$savedPos = peg$currPos;\n var peg$posDetailsCache = [{ line: 1, column: 1 }];\n var peg$maxFailPos = peg$currPos;\n var peg$maxFailExpected = options.peg$maxFailExpected || [];\n var peg$silentFails = options.peg$silentFails | 0;\n\n var peg$result;\n\n if (options.startRule) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(\"Can't start parsing from rule \\\"\" + options.startRule + \"\\\".\");\n }\n\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n\n function offset() {\n return peg$savedPos;\n }\n\n function range() {\n return {\n source: peg$source,\n start: peg$savedPos,\n end: peg$currPos\n };\n }\n\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n\n function expected(description, location) {\n location = location !== undefined\n ? location\n : peg$computeLocation(peg$savedPos, peg$currPos);\n\n throw peg$buildStructuredError(\n [peg$otherExpectation(description)],\n input.substring(peg$savedPos, peg$currPos),\n location\n );\n }\n\n function error(message, location) {\n location = location !== undefined\n ? location\n : peg$computeLocation(peg$savedPos, peg$currPos);\n\n throw peg$buildSimpleError(message, location);\n }\n\n function peg$literalExpectation(text, ignoreCase) {\n return { type: \"literal\", text: text, ignoreCase: ignoreCase };\n }\n\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return { type: \"class\", parts: parts, inverted: inverted, ignoreCase: ignoreCase };\n }\n\n function peg$anyExpectation() {\n return { type: \"any\" };\n }\n\n function peg$endExpectation() {\n return { type: \"end\" };\n }\n\n function peg$otherExpectation(description) {\n return { type: \"other\", description: description };\n }\n\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos];\n var p;\n\n if (details) {\n return details;\n } else {\n if (pos >= peg$posDetailsCache.length) {\n p = peg$posDetailsCache.length - 1;\n } else {\n p = pos;\n while (!peg$posDetailsCache[--p]) {}\n }\n\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else {\n details.column++;\n }\n\n p++;\n }\n\n peg$posDetailsCache[pos] = details;\n\n return details;\n }\n }\n\n function peg$computeLocation(startPos, endPos, offset) {\n var startPosDetails = peg$computePosDetails(startPos);\n var endPosDetails = peg$computePosDetails(endPos);\n\n var res = {\n source: peg$source,\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n if (offset && peg$source && (typeof peg$source.offset === \"function\")) {\n res.start = peg$source.offset(res.start);\n res.end = peg$source.offset(res.end);\n }\n return res;\n }\n\n function peg$fail(expected) {\n if (peg$currPos < peg$maxFailPos) { return; }\n\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n\n peg$maxFailExpected.push(expected);\n }\n\n function peg$buildSimpleError(message, location) {\n return new peg$SyntaxError(message, null, null, location);\n }\n\n function peg$buildStructuredError(expected, found, location) {\n return new peg$SyntaxError(\n peg$SyntaxError.buildMessage(expected, found),\n expected,\n found,\n location\n );\n }\n\n function peg$parseStart() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n s1 = peg$parse_();\n s2 = peg$parsePresentation();\n if (s2 !== peg$FAILED) {\n s3 = peg$parse_();\n peg$savedPos = s0;\n s0 = peg$f0(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsePresentation() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 7) === peg$c0) {\n s1 = peg$c0;\n peg$currPos += 7;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n s3 = peg$parseSourceType();\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n s5 = peg$parseStringLiteral();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 123) {\n s7 = peg$c1;\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e1); }\n }\n if (s7 !== peg$FAILED) {\n s8 = peg$parse_();\n s9 = peg$parsePresentationBody();\n if (s9 !== peg$FAILED) {\n s10 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 125) {\n s11 = peg$c2;\n peg$currPos++;\n } else {\n s11 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n if (s11 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f1(s3, s5, s9);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseSourceType() {\n var s0;\n\n if (input.substr(peg$currPos, 4) === peg$c3) {\n s0 = peg$c3;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c4) {\n s0 = peg$c4;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e4); }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c5) {\n s0 = peg$c5;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e5); }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 10) === peg$c6) {\n s0 = peg$c6;\n peg$currPos += 10;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e6); }\n }\n }\n }\n }\n\n return s0;\n }\n\n function peg$parsePresentationBody() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 5) === peg$c7) {\n s1 = peg$c7;\n peg$currPos += 5;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e7); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 123) {\n s3 = peg$c1;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e1); }\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n s5 = peg$parseRuleList();\n s6 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 125) {\n s7 = peg$c2;\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n if (s7 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f2(s5);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseRuleList() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseRule();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseRule();\n }\n peg$savedPos = s0;\n s1 = peg$f3(s1);\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseRule() {\n var s0;\n\n s0 = peg$parseStartRule();\n if (s0 === peg$FAILED) {\n s0 = peg$parseContentRule();\n if (s0 === peg$FAILED) {\n s0 = peg$parseEndRule();\n }\n }\n\n return s0;\n }\n\n function peg$parseStartRule() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 4) === peg$c8) {\n s1 = peg$c8;\n peg$currPos += 4;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e8); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (input.substr(peg$currPos, 5) === peg$c9) {\n s3 = peg$c9;\n peg$currPos += 5;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e9); }\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n s5 = peg$parseStringLiteral();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 123) {\n s7 = peg$c1;\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e1); }\n }\n if (s7 !== peg$FAILED) {\n s8 = peg$parse_();\n s9 = peg$parseSlideList();\n s10 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 125) {\n s11 = peg$c2;\n peg$currPos++;\n } else {\n s11 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n if (s11 !== peg$FAILED) {\n s12 = peg$parse_();\n peg$savedPos = s0;\n s0 = peg$f4(s5, s9);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseContentRule() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 4) === peg$c8) {\n s1 = peg$c8;\n peg$currPos += 4;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e8); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (input.substr(peg$currPos, 7) === peg$c10) {\n s3 = peg$c10;\n peg$currPos += 7;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e10); }\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n s5 = peg$parseStringLiteral();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 123) {\n s7 = peg$c1;\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e1); }\n }\n if (s7 !== peg$FAILED) {\n s8 = peg$parse_();\n s9 = peg$parseContentBody();\n if (s9 !== peg$FAILED) {\n s10 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 125) {\n s11 = peg$c2;\n peg$currPos++;\n } else {\n s11 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n if (s11 !== peg$FAILED) {\n s12 = peg$parse_();\n peg$savedPos = s0;\n s0 = peg$f5(s5, s9);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseEndRule() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 4) === peg$c8) {\n s1 = peg$c8;\n peg$currPos += 4;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e8); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (input.substr(peg$currPos, 3) === peg$c11) {\n s3 = peg$c11;\n peg$currPos += 3;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e11); }\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n s5 = peg$parseStringLiteral();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 123) {\n s7 = peg$c1;\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e1); }\n }\n if (s7 !== peg$FAILED) {\n s8 = peg$parse_();\n s9 = peg$parseSlideList();\n s10 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 125) {\n s11 = peg$c2;\n peg$currPos++;\n } else {\n s11 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n if (s11 !== peg$FAILED) {\n s12 = peg$parse_();\n peg$savedPos = s0;\n s0 = peg$f6(s5, s9);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseContentBody() {\n var s0;\n\n s0 = peg$parseForLoop();\n if (s0 === peg$FAILED) {\n s0 = peg$parseSlideList();\n }\n\n return s0;\n }\n\n function peg$parseForLoop() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 3) === peg$c12) {\n s1 = peg$c12;\n peg$currPos += 3;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e12); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n s3 = peg$parseIdentifier();\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n if (input.substr(peg$currPos, 2) === peg$c13) {\n s5 = peg$c13;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e13); }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n s7 = peg$parsePathExpression();\n if (s7 !== peg$FAILED) {\n s8 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 123) {\n s9 = peg$c1;\n peg$currPos++;\n } else {\n s9 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e1); }\n }\n if (s9 !== peg$FAILED) {\n s10 = peg$parse_();\n s11 = peg$parseForLoopBody();\n if (s11 !== peg$FAILED) {\n s12 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 125) {\n s13 = peg$c2;\n peg$currPos++;\n } else {\n s13 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n if (s13 !== peg$FAILED) {\n s14 = peg$parse_();\n peg$savedPos = s0;\n s0 = peg$f7(s3, s7, s11);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseForLoopBody() {\n var s0;\n\n s0 = peg$parseNestedForLoop();\n if (s0 === peg$FAILED) {\n s0 = peg$parseSlideList();\n }\n\n return s0;\n }\n\n function peg$parseNestedForLoop() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 3) === peg$c12) {\n s1 = peg$c12;\n peg$currPos += 3;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e12); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n s3 = peg$parseIdentifier();\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n if (input.substr(peg$currPos, 2) === peg$c13) {\n s5 = peg$c13;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e13); }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n s7 = peg$parsePathExpression();\n if (s7 !== peg$FAILED) {\n s8 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 123) {\n s9 = peg$c1;\n peg$currPos++;\n } else {\n s9 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e1); }\n }\n if (s9 !== peg$FAILED) {\n s10 = peg$parse_();\n s11 = peg$parseSlideList();\n s12 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 125) {\n s13 = peg$c2;\n peg$currPos++;\n } else {\n s13 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n if (s13 !== peg$FAILED) {\n s14 = peg$parse_();\n peg$savedPos = s0;\n s0 = peg$f8(s3, s7, s11);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseSlideList() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseSlide();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseSlide();\n }\n peg$savedPos = s0;\n s1 = peg$f9(s1);\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseSlide() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 5) === peg$c14) {\n s1 = peg$c14;\n peg$currPos += 5;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e14); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 123) {\n s3 = peg$c1;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e1); }\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n s5 = peg$parseContent();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n s7 = peg$parseBehavior();\n if (s7 === peg$FAILED) {\n s7 = null;\n }\n s8 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 125) {\n s9 = peg$c2;\n peg$currPos++;\n } else {\n s9 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n if (s9 !== peg$FAILED) {\n s10 = peg$parse_();\n peg$savedPos = s0;\n s0 = peg$f10(s5, s7);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseContent() {\n var s0;\n\n s0 = peg$parseDynamicContent();\n if (s0 === peg$FAILED) {\n s0 = peg$parseTextContent();\n }\n\n return s0;\n }\n\n function peg$parseDynamicContent() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 7) === peg$c10) {\n s1 = peg$c10;\n peg$currPos += 7;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e10); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (input.substr(peg$currPos, 7) === peg$c15) {\n s3 = peg$c15;\n peg$currPos += 7;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e15); }\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 123) {\n s5 = peg$c1;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e1); }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n s7 = peg$parseComponentName();\n if (s7 !== peg$FAILED) {\n s8 = peg$parse_();\n s9 = peg$parseAttrs();\n if (s9 !== peg$FAILED) {\n s10 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 125) {\n s11 = peg$c2;\n peg$currPos++;\n } else {\n s11 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n if (s11 !== peg$FAILED) {\n s12 = peg$parse_();\n peg$savedPos = s0;\n s0 = peg$f11(s7, s9);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseTextContent() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 7) === peg$c10) {\n s1 = peg$c10;\n peg$currPos += 7;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e10); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (input.substr(peg$currPos, 4) === peg$c16) {\n s3 = peg$c16;\n peg$currPos += 4;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e16); }\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 123) {\n s5 = peg$c1;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e1); }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n s7 = peg$parseTextLineList();\n s8 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 125) {\n s9 = peg$c2;\n peg$currPos++;\n } else {\n s9 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n if (s9 !== peg$FAILED) {\n s10 = peg$parse_();\n peg$savedPos = s0;\n s0 = peg$f12(s7);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseComponentName() {\n var s0, s1, s2, s3, s4, s5;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 4) === peg$c17) {\n s1 = peg$c17;\n peg$currPos += 4;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e17); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 58) {\n s3 = peg$c18;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e18); }\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n s5 = peg$parseStringLiteral();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f13(s5);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseAttrs() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 5) === peg$c19) {\n s1 = peg$c19;\n peg$currPos += 5;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e19); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 123) {\n s3 = peg$c1;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e1); }\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n s5 = peg$parseAttrList();\n s6 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 125) {\n s7 = peg$c2;\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n if (s7 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f14(s5);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseAttrList() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseAttr();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseAttr();\n }\n peg$savedPos = s0;\n s1 = peg$f15(s1);\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseAttr() {\n var s0, s1, s2, s3, s4, s5, s6;\n\n s0 = peg$currPos;\n s1 = peg$parseAttrKey();\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 58) {\n s3 = peg$c18;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e18); }\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n s5 = peg$parseAttrValue();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n peg$savedPos = s0;\n s0 = peg$f16(s1, s5);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseAttrValue() {\n var s0;\n\n s0 = peg$parseStringLiteral();\n if (s0 === peg$FAILED) {\n s0 = peg$parseNumberLiteral();\n if (s0 === peg$FAILED) {\n s0 = peg$parseBooleanLiteral();\n if (s0 === peg$FAILED) {\n s0 = peg$parsePathExpression();\n }\n }\n }\n\n return s0;\n }\n\n function peg$parseAttrKey() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n s1 = input.charAt(peg$currPos);\n if (peg$r0.test(s1)) {\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e20); }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = input.charAt(peg$currPos);\n if (peg$r1.test(s3)) {\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e21); }\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = input.charAt(peg$currPos);\n if (peg$r1.test(s3)) {\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e21); }\n }\n }\n peg$savedPos = s0;\n s0 = peg$f17(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseTextLineList() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseTextLine();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseTextLine();\n }\n peg$savedPos = s0;\n s1 = peg$f18(s1);\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseTextLine() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = peg$parseExpression();\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n peg$savedPos = s0;\n s0 = peg$f19(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseBehavior() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 8) === peg$c20) {\n s1 = peg$c20;\n peg$currPos += 8;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e22); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 123) {\n s3 = peg$c1;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e1); }\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n s5 = peg$parseTransition();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 125) {\n s7 = peg$c2;\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n if (s7 !== peg$FAILED) {\n s8 = peg$parse_();\n peg$savedPos = s0;\n s0 = peg$f20(s5);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseTransition() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 10) === peg$c21) {\n s1 = peg$c21;\n peg$currPos += 10;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e23); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n s3 = peg$parseTransitionType();\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 123) {\n s5 = peg$c1;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e1); }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n s7 = peg$parseTransitionOptions();\n s8 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 125) {\n s9 = peg$c2;\n peg$currPos++;\n } else {\n s9 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n if (s9 !== peg$FAILED) {\n s10 = peg$parse_();\n peg$savedPos = s0;\n s0 = peg$f21(s3, s7);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseTransitionType() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n s1 = input.charAt(peg$currPos);\n if (peg$r0.test(s1)) {\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e20); }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = input.charAt(peg$currPos);\n if (peg$r1.test(s3)) {\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e21); }\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = input.charAt(peg$currPos);\n if (peg$r1.test(s3)) {\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e21); }\n }\n }\n peg$savedPos = s0;\n s0 = peg$f22(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseTransitionOptions() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseTransitionOption();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseTransitionOption();\n }\n peg$savedPos = s0;\n s1 = peg$f23(s1);\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseTransitionOption() {\n var s0, s1, s2, s3, s4, s5, s6;\n\n s0 = peg$currPos;\n s1 = peg$parseIdentifier();\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 58) {\n s3 = peg$c18;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e18); }\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n s5 = peg$parseExpression();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n peg$savedPos = s0;\n s0 = peg$f24(s1, s5);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseExpression() {\n var s0;\n\n s0 = peg$parseBinaryExpression();\n if (s0 === peg$FAILED) {\n s0 = peg$parsePrimaryExpression();\n }\n\n return s0;\n }\n\n function peg$parseBinaryExpression() {\n var s0, s1, s2, s3, s4, s5;\n\n s0 = peg$currPos;\n s1 = peg$parsePrimaryExpression();\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (input.charCodeAt(peg$currPos) === 43) {\n s3 = peg$c22;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e24); }\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n s5 = peg$parseExpression();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f25(s1, s5);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsePrimaryExpression() {\n var s0;\n\n s0 = peg$parseStringLiteral();\n if (s0 === peg$FAILED) {\n s0 = peg$parseNumberLiteral();\n if (s0 === peg$FAILED) {\n s0 = peg$parseBooleanLiteral();\n if (s0 === peg$FAILED) {\n s0 = peg$parsePathExpression();\n }\n }\n }\n\n return s0;\n }\n\n function peg$parsePathExpression() {\n var s0, s1, s2, s3, s4, s5;\n\n s0 = peg$currPos;\n s1 = peg$parseIdentifier();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 46) {\n s4 = peg$c23;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e25); }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsePropertyName();\n if (s5 !== peg$FAILED) {\n s4 = [s4, s5];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 46) {\n s4 = peg$c23;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e25); }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsePropertyName();\n if (s5 !== peg$FAILED) {\n s4 = [s4, s5];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f26(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseIdentifier();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f27(s1);\n }\n s0 = s1;\n }\n\n return s0;\n }\n\n function peg$parsePropertyName() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n s1 = input.charAt(peg$currPos);\n if (peg$r0.test(s1)) {\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e20); }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = input.charAt(peg$currPos);\n if (peg$r1.test(s3)) {\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e21); }\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = input.charAt(peg$currPos);\n if (peg$r1.test(s3)) {\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e21); }\n }\n }\n peg$savedPos = s0;\n s0 = peg$f28(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseIdentifier() {\n var s0, s1, s2, s3, s4;\n\n s0 = peg$currPos;\n s1 = peg$currPos;\n peg$silentFails++;\n s2 = peg$parseReservedWord();\n peg$silentFails--;\n if (s2 === peg$FAILED) {\n s1 = undefined;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = input.charAt(peg$currPos);\n if (peg$r0.test(s2)) {\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e20); }\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = input.charAt(peg$currPos);\n if (peg$r1.test(s4)) {\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e21); }\n }\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = input.charAt(peg$currPos);\n if (peg$r1.test(s4)) {\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e21); }\n }\n }\n peg$savedPos = s0;\n s0 = peg$f29(s2, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseStringLiteral() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 34) {\n s1 = peg$c24;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e26); }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parseDoubleStringCharacter();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parseDoubleStringCharacter();\n }\n if (input.charCodeAt(peg$currPos) === 34) {\n s3 = peg$c24;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e26); }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f30(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 39) {\n s1 = peg$c25;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e27); }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parseSingleStringCharacter();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parseSingleStringCharacter();\n }\n if (input.charCodeAt(peg$currPos) === 39) {\n s3 = peg$c25;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e27); }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f31(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n\n return s0;\n }\n\n function peg$parseDoubleStringCharacter() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n s1 = peg$currPos;\n peg$silentFails++;\n if (input.charCodeAt(peg$currPos) === 34) {\n s2 = peg$c24;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e26); }\n }\n peg$silentFails--;\n if (s2 === peg$FAILED) {\n s1 = undefined;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$currPos;\n peg$silentFails++;\n if (input.charCodeAt(peg$currPos) === 92) {\n s3 = peg$c26;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e28); }\n }\n peg$silentFails--;\n if (s3 === peg$FAILED) {\n s2 = undefined;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e29); }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f32(s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 92) {\n s1 = peg$c26;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e28); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseEscapeSequence();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f33(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n\n return s0;\n }\n\n function peg$parseSingleStringCharacter() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n s1 = peg$currPos;\n peg$silentFails++;\n if (input.charCodeAt(peg$currPos) === 39) {\n s2 = peg$c25;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e27); }\n }\n peg$silentFails--;\n if (s2 === peg$FAILED) {\n s1 = undefined;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$currPos;\n peg$silentFails++;\n if (input.charCodeAt(peg$currPos) === 92) {\n s3 = peg$c26;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e28); }\n }\n peg$silentFails--;\n if (s3 === peg$FAILED) {\n s2 = undefined;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e29); }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f34(s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 92) {\n s1 = peg$c26;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e28); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseEscapeSequence();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f35(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n\n return s0;\n }\n\n function peg$parseEscapeSequence() {\n var s0, s1;\n\n s0 = input.charAt(peg$currPos);\n if (peg$r2.test(s0)) {\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e30); }\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 110) {\n s1 = peg$c27;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e31); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f36();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 114) {\n s1 = peg$c28;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e32); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f37();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 116) {\n s1 = peg$c29;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e33); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f38();\n }\n s0 = s1;\n }\n }\n }\n\n return s0;\n }\n\n function peg$parseNumberLiteral() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = input.charAt(peg$currPos);\n if (peg$r3.test(s2)) {\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e34); }\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = input.charAt(peg$currPos);\n if (peg$r3.test(s2)) {\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e34); }\n }\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f39(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseBooleanLiteral() {\n var s0, s1;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 4) === peg$c30) {\n s1 = peg$c30;\n peg$currPos += 4;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e35); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f40();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 5) === peg$c31) {\n s1 = peg$c31;\n peg$currPos += 5;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e36); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f41();\n }\n s0 = s1;\n }\n\n return s0;\n }\n\n function peg$parseReservedWord() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 7) === peg$c0) {\n s1 = peg$c0;\n peg$currPos += 7;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c8) {\n s1 = peg$c8;\n peg$currPos += 4;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e8); }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c9) {\n s1 = peg$c9;\n peg$currPos += 5;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e9); }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c10) {\n s1 = peg$c10;\n peg$currPos += 7;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e10); }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 3) === peg$c11) {\n s1 = peg$c11;\n peg$currPos += 3;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e11); }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 3) === peg$c12) {\n s1 = peg$c12;\n peg$currPos += 3;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e12); }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c13) {\n s1 = peg$c13;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e13); }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c14) {\n s1 = peg$c14;\n peg$currPos += 5;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e14); }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c15) {\n s1 = peg$c15;\n peg$currPos += 7;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e15); }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c16) {\n s1 = peg$c16;\n peg$currPos += 4;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e16); }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c17) {\n s1 = peg$c17;\n peg$currPos += 4;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e17); }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c19) {\n s1 = peg$c19;\n peg$currPos += 5;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e19); }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c20) {\n s1 = peg$c20;\n peg$currPos += 8;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e22); }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 10) === peg$c21) {\n s1 = peg$c21;\n peg$currPos += 10;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e23); }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$currPos;\n peg$silentFails++;\n s3 = peg$parseIdentifierPart();\n peg$silentFails--;\n if (s3 === peg$FAILED) {\n s2 = undefined;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseIdentifierPart() {\n var s0;\n\n s0 = input.charAt(peg$currPos);\n if (peg$r1.test(s0)) {\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e21); }\n }\n\n return s0;\n }\n\n function peg$parse_() {\n var s0, s1;\n\n peg$silentFails++;\n s0 = [];\n s1 = input.charAt(peg$currPos);\n if (peg$r4.test(s1)) {\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e38); }\n }\n if (s1 === peg$FAILED) {\n s1 = peg$parseComment();\n }\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n s1 = input.charAt(peg$currPos);\n if (peg$r4.test(s1)) {\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e38); }\n }\n if (s1 === peg$FAILED) {\n s1 = peg$parseComment();\n }\n }\n peg$silentFails--;\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e37); }\n\n return s0;\n }\n\n function peg$parseWhiteSpace() {\n var s0;\n\n s0 = input.charAt(peg$currPos);\n if (peg$r5.test(s0)) {\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e39); }\n }\n\n return s0;\n }\n\n function peg$parseLineTerminator() {\n var s0;\n\n s0 = input.charAt(peg$currPos);\n if (peg$r6.test(s0)) {\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e40); }\n }\n\n return s0;\n }\n\n function peg$parseComment() {\n var s0;\n\n s0 = peg$parseSingleLineComment();\n if (s0 === peg$FAILED) {\n s0 = peg$parseMultiLineComment();\n }\n\n return s0;\n }\n\n function peg$parseSingleLineComment() {\n var s0, s1, s2, s3, s4, s5;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c32) {\n s1 = peg$c32;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e41); }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parseLineTerminator();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = undefined;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e29); }\n }\n if (s5 !== peg$FAILED) {\n s4 = [s4, s5];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parseLineTerminator();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = undefined;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e29); }\n }\n if (s5 !== peg$FAILED) {\n s4 = [s4, s5];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseMultiLineComment() {\n var s0, s1, s2, s3, s4, s5;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c33) {\n s1 = peg$c33;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e42); }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n if (input.substr(peg$currPos, 2) === peg$c34) {\n s5 = peg$c34;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e43); }\n }\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = undefined;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e29); }\n }\n if (s5 !== peg$FAILED) {\n s4 = [s4, s5];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n if (input.substr(peg$currPos, 2) === peg$c34) {\n s5 = peg$c34;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e43); }\n }\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = undefined;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e29); }\n }\n if (s5 !== peg$FAILED) {\n s4 = [s4, s5];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n if (input.substr(peg$currPos, 2) === peg$c34) {\n s3 = peg$c34;\n peg$currPos += 2;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e43); }\n }\n if (s3 !== peg$FAILED) {\n s1 = [s1, s2, s3];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n\n /**\n * 构建 AST 节点\n */\n function buildNode(type, data) {\n return { type, ...data };\n }\n\n /**\n * 构建属性对象\n */\n function buildAttrs(attrs) {\n return Object.fromEntries(attrs);\n }\n\n /**\n * 构建选项对象\n */\n function buildOptions(opts) {\n return Object.fromEntries(opts);\n }\n\n peg$result = peg$startRuleFunction();\n\n if (options.peg$library) {\n return /** @type {any} */ ({\n peg$result,\n peg$currPos,\n peg$FAILED,\n peg$maxFailExpected,\n peg$maxFailPos\n });\n }\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail(peg$endExpectation());\n }\n\n throw peg$buildStructuredError(\n peg$maxFailExpected,\n peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,\n peg$maxFailPos < input.length\n ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1)\n : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)\n );\n }\n}\n\nconst peg$allowedStartRules = [\n \"Start\"\n];\n\nexport {\n peg$allowedStartRules as StartRules,\n peg$SyntaxError as SyntaxError,\n peg$parse as parse\n};\n"],"names":["peg$subclass","child","parent","C","peg$SyntaxError","message","expected","found","location","self","peg$padEnd","str","targetLength","padString","sources","src","k","s","offset_s","loc","e","filler","line","last","hatLen","DESCRIBE_EXPECTATION_FNS","expectation","literalEscape","escapedParts","part","classEscape","hex","ch","describeExpectation","describeExpected","descriptions","i","j","describeFound","peg$parse","input","options","peg$FAILED","peg$source","peg$startRuleFunctions","peg$parseStart","peg$startRuleFunction","peg$c0","peg$c1","peg$c2","peg$c3","peg$c4","peg$c5","peg$c6","peg$c7","peg$c8","peg$c9","peg$c10","peg$c11","peg$c12","peg$c13","peg$c14","peg$c15","peg$c16","peg$c17","peg$c18","peg$c19","peg$c20","peg$c21","peg$c22","peg$c23","peg$c24","peg$c25","peg$c26","peg$c27","peg$c28","peg$c29","peg$c30","peg$c31","peg$c32","peg$c33","peg$c34","peg$r0","peg$r1","peg$r2","peg$r3","peg$r4","peg$r6","peg$e0","peg$literalExpectation","peg$e1","peg$e2","peg$e3","peg$e4","peg$e5","peg$e6","peg$e7","peg$e8","peg$e9","peg$e10","peg$e11","peg$e12","peg$e13","peg$e14","peg$e15","peg$e16","peg$e17","peg$e18","peg$e19","peg$e20","peg$classExpectation","peg$e21","peg$e22","peg$e23","peg$e24","peg$e25","peg$e26","peg$e27","peg$e28","peg$e29","peg$anyExpectation","peg$e30","peg$e31","peg$e32","peg$e33","peg$e34","peg$e35","peg$e36","peg$e37","peg$otherExpectation","peg$e38","peg$e40","peg$e41","peg$e42","peg$e43","peg$f0","presentation","peg$f1","type","name","body","peg$f2","rules","peg$f3","peg$f4","slides","buildNode","peg$f5","peg$f6","peg$f7","variable","collection","peg$f8","peg$f9","peg$f10","content","behavior","peg$f11","attrs","peg$f12","lines","peg$f13","peg$f14","buildAttrs","peg$f15","peg$f16","key","value","peg$f17","first","rest","peg$f18","peg$f19","expr","peg$f20","transition","peg$f21","transType","peg$f22","peg$f23","opts","buildOptions","peg$f24","peg$f25","left","right","peg$f26","head","tail","t","peg$f27","id","peg$f28","peg$f29","peg$f30","chars","peg$f31","peg$f32","char","peg$f33","sequence","peg$f34","peg$f35","peg$f36","peg$f37","peg$f38","peg$f39","digits","peg$f40","peg$f41","peg$currPos","peg$posDetailsCache","peg$maxFailPos","peg$maxFailExpected","peg$silentFails","peg$result","text","ignoreCase","parts","inverted","peg$endExpectation","description","peg$computePosDetails","pos","details","p","peg$computeLocation","startPos","endPos","offset","startPosDetails","endPosDetails","res","peg$fail","peg$buildStructuredError","s0","s2","peg$parse_","peg$parsePresentation","s1","s3","s5","s7","s9","s11","peg$parseSourceType","peg$parseStringLiteral","peg$parsePresentationBody","peg$parseRuleList","peg$parseRule","peg$parseStartRule","peg$parseContentRule","peg$parseEndRule","peg$parseSlideList","peg$parseContentBody","peg$parseForLoop","s13","peg$parseIdentifier","peg$parsePathExpression","peg$parseForLoopBody","peg$parseNestedForLoop","peg$parseSlide","peg$parseContent","peg$parseBehavior","peg$parseDynamicContent","peg$parseTextContent","peg$parseComponentName","peg$parseAttrs","peg$parseTextLineList","peg$parseAttrList","peg$parseAttr","peg$parseAttrKey","peg$parseAttrValue","peg$parseNumberLiteral","peg$parseBooleanLiteral","peg$parseTextLine","peg$parseExpression","peg$parseTransition","peg$parseTransitionType","peg$parseTransitionOptions","peg$parseTransitionOption","peg$parseBinaryExpression","peg$parsePrimaryExpression","s4","peg$parsePropertyName","peg$parseReservedWord","peg$parseDoubleStringCharacter","peg$parseSingleStringCharacter","peg$parseEscapeSequence","peg$parseIdentifierPart","peg$parseComment","peg$parseLineTerminator","peg$parseSingleLineComment","peg$parseMultiLineComment","data"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@slidejs/dsl",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "Slide DSL 语法解析器和编译器",
|
|
5
5
|
"type": "module",
|
|
6
|
-
"main": "./dist/index.
|
|
7
|
-
"module": "./dist/index.
|
|
6
|
+
"main": "./dist/index.cjs",
|
|
7
|
+
"module": "./dist/index.mjs",
|
|
8
8
|
"types": "./dist/index.d.ts",
|
|
9
9
|
"exports": {
|
|
10
10
|
".": {
|
|
11
|
-
"
|
|
12
|
-
"
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"import": "./dist/index.mjs",
|
|
13
|
+
"require": "./dist/index.cjs"
|
|
13
14
|
}
|
|
14
15
|
},
|
|
15
16
|
"files": [
|
package/dist/ast.d.ts
DELETED
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @slidejs/dsl - AST 类型定义
|
|
3
|
-
*
|
|
4
|
-
* Peggy 解析器生成的抽象语法树(AST)类型
|
|
5
|
-
*/
|
|
6
|
-
/**
|
|
7
|
-
* AST 节点基类
|
|
8
|
-
*/
|
|
9
|
-
export interface ASTNode {
|
|
10
|
-
type: string;
|
|
11
|
-
}
|
|
12
|
-
/**
|
|
13
|
-
* Presentation 节点(根节点)
|
|
14
|
-
*/
|
|
15
|
-
export interface PresentationNode {
|
|
16
|
-
version: string;
|
|
17
|
-
sourceType: string;
|
|
18
|
-
sourceId: string;
|
|
19
|
-
rules: RuleNode[];
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Rule 节点
|
|
23
|
-
*/
|
|
24
|
-
export interface RuleNode extends ASTNode {
|
|
25
|
-
type: 'rule';
|
|
26
|
-
ruleType: 'start' | 'content' | 'end';
|
|
27
|
-
name: string;
|
|
28
|
-
slides?: SlideNode[];
|
|
29
|
-
body?: ForLoopNode | SlideNode[];
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* For Loop 节点
|
|
33
|
-
*/
|
|
34
|
-
export interface ForLoopNode extends ASTNode {
|
|
35
|
-
type: 'for';
|
|
36
|
-
variable: string;
|
|
37
|
-
collection: MemberExpressionNode | string;
|
|
38
|
-
body: ForLoopNode | SlideNode[];
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Slide 节点
|
|
42
|
-
*/
|
|
43
|
-
export interface SlideNode extends ASTNode {
|
|
44
|
-
type: 'slide';
|
|
45
|
-
content: ContentNode;
|
|
46
|
-
behavior?: BehaviorNode;
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Content 节点
|
|
50
|
-
*/
|
|
51
|
-
export type ContentNode = DynamicContentNode | TextContentNode;
|
|
52
|
-
/**
|
|
53
|
-
* Dynamic Content 节点
|
|
54
|
-
*/
|
|
55
|
-
export interface DynamicContentNode extends ASTNode {
|
|
56
|
-
type: 'dynamic';
|
|
57
|
-
component: string;
|
|
58
|
-
props: Record<string, ExpressionValue>;
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Text Content 节点
|
|
62
|
-
*/
|
|
63
|
-
export interface TextContentNode extends ASTNode {
|
|
64
|
-
type: 'text';
|
|
65
|
-
lines: ExpressionValue[];
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* Behavior 节点
|
|
69
|
-
*/
|
|
70
|
-
export interface BehaviorNode extends ASTNode {
|
|
71
|
-
type: 'behavior';
|
|
72
|
-
transition: TransitionNode;
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* Transition 节点
|
|
76
|
-
*/
|
|
77
|
-
export interface TransitionNode extends ASTNode {
|
|
78
|
-
type: 'transition';
|
|
79
|
-
transType: string;
|
|
80
|
-
options: Record<string, ExpressionValue>;
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* Member Expression 节点
|
|
84
|
-
*/
|
|
85
|
-
export interface MemberExpressionNode extends ASTNode {
|
|
86
|
-
type: 'member';
|
|
87
|
-
object: string;
|
|
88
|
-
properties: string[];
|
|
89
|
-
}
|
|
90
|
-
/**
|
|
91
|
-
* Binary Expression 节点
|
|
92
|
-
*/
|
|
93
|
-
export interface BinaryExpressionNode extends ASTNode {
|
|
94
|
-
type: 'binary';
|
|
95
|
-
operator: '+' | '-' | '*' | '/';
|
|
96
|
-
left: ExpressionValue;
|
|
97
|
-
right: ExpressionValue;
|
|
98
|
-
}
|
|
99
|
-
/**
|
|
100
|
-
* Number Literal 节点
|
|
101
|
-
*/
|
|
102
|
-
export interface NumberLiteralNode extends ASTNode {
|
|
103
|
-
type: 'number';
|
|
104
|
-
value: number;
|
|
105
|
-
}
|
|
106
|
-
/**
|
|
107
|
-
* Boolean Literal 节点
|
|
108
|
-
*/
|
|
109
|
-
export interface BooleanLiteralNode extends ASTNode {
|
|
110
|
-
type: 'boolean';
|
|
111
|
-
value: boolean;
|
|
112
|
-
}
|
|
113
|
-
/**
|
|
114
|
-
* Expression 值类型
|
|
115
|
-
*/
|
|
116
|
-
export type ExpressionValue = string | NumberLiteralNode | BooleanLiteralNode | MemberExpressionNode | BinaryExpressionNode;
|
|
117
|
-
//# sourceMappingURL=ast.d.ts.map
|
package/dist/ast.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ast.d.ts","sourceRoot":"","sources":["../src/ast.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,QAAQ,EAAE,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,QAAS,SAAQ,OAAO;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,KAAK,CAAC;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;IACrB,IAAI,CAAC,EAAE,WAAW,GAAG,SAAS,EAAE,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,WAAY,SAAQ,OAAO;IAC1C,IAAI,EAAE,KAAK,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,oBAAoB,GAAG,MAAM,CAAC;IAC1C,IAAI,EAAE,WAAW,GAAG,SAAS,EAAE,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,SAAU,SAAQ,OAAO;IACxC,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,WAAW,CAAC;IACrB,QAAQ,CAAC,EAAE,YAAY,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,kBAAkB,GAAG,eAAe,CAAC;AAE/D;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,OAAO;IACjD,IAAI,EAAE,SAAS,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CACxC;AAED;;GAEG;AACH,MAAM,WAAW,eAAgB,SAAQ,OAAO;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,eAAe,EAAE,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,YAAa,SAAQ,OAAO;IAC3C,IAAI,EAAE,UAAU,CAAC;IACjB,UAAU,EAAE,cAAc,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,cAAe,SAAQ,OAAO;IAC7C,IAAI,EAAE,YAAY,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CAC1C;AAED;;GAEG;AACH,MAAM,WAAW,oBAAqB,SAAQ,OAAO;IACnD,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAqB,SAAQ,OAAO;IACnD,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IAChC,IAAI,EAAE,eAAe,CAAC;IACtB,KAAK,EAAE,eAAe,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAkB,SAAQ,OAAO;IAChD,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,OAAO;IACjD,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,MAAM,eAAe,GACvB,MAAM,GACN,iBAAiB,GACjB,kBAAkB,GAClB,oBAAoB,GACpB,oBAAoB,CAAC"}
|
package/dist/compiler.d.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { SlideContext } from '@slidejs/context';
|
|
2
|
-
import { SlideDSL } from '@slidejs/core';
|
|
3
|
-
import { PresentationNode } from './ast';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Compiler 错误
|
|
7
|
-
*/
|
|
8
|
-
export declare class CompileError extends Error {
|
|
9
|
-
constructor(message: string);
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* 编译 AST 为 SlideDSL
|
|
13
|
-
*/
|
|
14
|
-
export declare function compile<TContext extends SlideContext = SlideContext>(ast: PresentationNode): SlideDSL<TContext>;
|
|
15
|
-
//# sourceMappingURL=compiler.d.ts.map
|
package/dist/compiler.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../src/compiler.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,QAAQ,EAA8B,MAAM,eAAe,CAAC;AAC1E,OAAO,KAAK,EACV,gBAAgB,EAWjB,MAAM,OAAO,CAAC;AAEf;;GAEG;AACH,qBAAa,YAAa,SAAQ,KAAK;gBACzB,OAAO,EAAE,MAAM;CAI5B;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,QAAQ,SAAS,YAAY,GAAG,YAAY,EAClE,GAAG,EAAE,gBAAgB,GACpB,QAAQ,CAAC,QAAQ,CAAC,CA0BpB"}
|
package/dist/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,YAAY,EACV,gBAAgB,EAChB,QAAQ,EACR,SAAS,EACT,WAAW,EACX,WAAW,EACX,kBAAkB,EAClB,eAAe,EACf,YAAY,EACZ,cAAc,EACd,oBAAoB,EACpB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,GAChB,MAAM,OAAO,CAAC;AAEf,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACnE,YAAY,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/parser.ts","../src/compiler.ts"],"sourcesContent":["/**\n * @slidejs/dsl - Parser 接口\n *\n * 使用 Peggy 生成的 parser 解析 Slide DSL 语法\n */\n\nimport type { PresentationNode } from './ast';\n\n/**\n * Parser 错误\n */\nexport class ParseError extends Error {\n constructor(\n message: string,\n public location?: {\n start: { line: number; column: number; offset: number };\n end: { line: number; column: number; offset: number };\n }\n ) {\n super(message);\n this.name = 'ParseError';\n }\n}\n\n/**\n * Parser 接口\n */\nexport interface Parser {\n /**\n * 解析 Slide DSL 源代码\n */\n parse(source: string): PresentationNode;\n}\n\n/**\n * 创建 Parser 实例\n */\nexport async function createParser(): Promise<Parser> {\n // 动态导入生成的 parser\n const { parse } = await import('./generated/parser.js');\n\n return {\n parse(source: string): PresentationNode {\n try {\n return parse(source) as PresentationNode;\n } catch (error) {\n if (error && typeof error === 'object' && 'location' in error) {\n const errorMessage =\n 'message' in error && typeof error.message === 'string'\n ? error.message\n : String(error);\n throw new ParseError(errorMessage, error.location as ParseError['location']);\n }\n const errorMessage =\n error && typeof error === 'object' && 'message' in error && typeof error.message === 'string'\n ? error.message\n : String(error);\n throw new ParseError(errorMessage);\n }\n },\n };\n}\n\n/**\n * 便捷函数:直接解析 DSL 源代码\n */\nexport async function parseSlideDSL(source: string): Promise<PresentationNode> {\n // 输入验证\n if (source === null || source === undefined) {\n throw new ParseError('DSL source cannot be null or undefined');\n }\n\n if (typeof source !== 'string') {\n throw new ParseError(`DSL source must be a string, got: ${typeof source}`);\n }\n\n if (source.trim().length === 0) {\n throw new ParseError('DSL source cannot be empty');\n }\n\n const parser = await createParser();\n return parser.parse(source);\n}\n","/**\n * @slidejs/dsl - Compiler\n *\n * 将 AST 编译为可执行的 SlideDSL 对象\n */\n\nimport type { SlideContext } from '@slidejs/context';\nimport type { SlideDSL, SlideRule, SlideDefinition } from '@slidejs/core';\nimport type {\n PresentationNode,\n RuleNode,\n SlideNode,\n ForLoopNode,\n ContentNode,\n BehaviorNode,\n ExpressionValue,\n MemberExpressionNode,\n BinaryExpressionNode,\n NumberLiteralNode,\n BooleanLiteralNode,\n} from './ast';\n\n/**\n * Compiler 错误\n */\nexport class CompileError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'CompileError';\n }\n}\n\n/**\n * 编译 AST 为 SlideDSL\n */\nexport function compile<TContext extends SlideContext = SlideContext>(\n ast: PresentationNode\n): SlideDSL<TContext> {\n // 输入验证\n if (!ast) {\n throw new CompileError('AST is null or undefined');\n }\n\n if (!ast.rules || !Array.isArray(ast.rules)) {\n throw new CompileError('AST rules must be an array');\n }\n\n if (!ast.sourceType || typeof ast.sourceType !== 'string') {\n throw new CompileError('AST sourceType must be a non-empty string');\n }\n\n if (!ast.sourceId || typeof ast.sourceId !== 'string') {\n throw new CompileError('AST sourceId must be a non-empty string');\n }\n\n const rules: SlideRule<TContext>[] = ast.rules.map(ruleNode => compileRule(ruleNode));\n\n return {\n version: ast.version,\n sourceType: ast.sourceType,\n sourceId: ast.sourceId,\n rules,\n };\n}\n\n/**\n * 编译 Rule 节点\n */\nfunction compileRule<TContext extends SlideContext = SlideContext>(\n node: RuleNode\n): SlideRule<TContext> {\n return {\n type: node.ruleType,\n name: node.name,\n generate: (context: TContext) => {\n if (node.slides) {\n // 简单规则:直接生成 slides\n return node.slides.map(slideNode => compileSlide(slideNode, context));\n } else if (node.body) {\n // Content 规则:可能包含 for 循环\n return compileRuleBody(node.body, context);\n }\n return [];\n },\n };\n}\n\n/**\n * 编译 Rule Body(可能包含 for 循环)\n */\nfunction compileRuleBody<TContext extends SlideContext = SlideContext>(\n body: ForLoopNode | SlideNode[],\n context: TContext\n): SlideDefinition[] {\n if (Array.isArray(body)) {\n // 直接是 slides 数组\n return body.map(slideNode => compileSlide(slideNode, context));\n } else {\n // For 循环\n return compileForLoop(body, context);\n }\n}\n\n/**\n * 编译 For 循环\n */\nfunction compileForLoop<TContext extends SlideContext = SlideContext>(\n node: ForLoopNode,\n context: TContext\n): SlideDefinition[] {\n const slides: SlideDefinition[] = [];\n\n // 输入验证\n if (!node.variable || typeof node.variable !== 'string') {\n throw new CompileError('For loop variable must be a non-empty string');\n }\n\n // 解析集合表达式\n const collection = evaluateExpression(node.collection, context);\n\n if (collection === null || collection === undefined) {\n throw new CompileError(\n `For loop collection \"${node.collection}\" evaluates to ${collection === null ? 'null' : 'undefined'}`\n );\n }\n\n if (!Array.isArray(collection)) {\n throw new CompileError(\n `For loop collection \"${node.collection}\" must be an array, got: ${typeof collection}`\n );\n }\n\n // 遍历集合,为每个元素生成 slides\n for (const item of collection) {\n // 创建新的上下文,添加循环变量\n const loopContext = {\n ...context,\n [node.variable]: item,\n } as TContext;\n\n if (Array.isArray(node.body)) {\n // Body 是 slides 数组\n slides.push(...node.body.map(slideNode => compileSlide(slideNode, loopContext)));\n } else {\n // Body 是嵌套的 for 循环\n slides.push(...compileForLoop(node.body, loopContext));\n }\n }\n\n return slides;\n}\n\n/**\n * 编译 Slide 节点\n */\nfunction compileSlide<TContext extends SlideContext = SlideContext>(\n node: SlideNode,\n context: TContext\n): SlideDefinition {\n return {\n content: compileContent(node.content, context),\n behavior: node.behavior ? compileBehavior(node.behavior, context) : undefined,\n };\n}\n\n/**\n * 编译 Content 节点\n */\nfunction compileContent<TContext extends SlideContext = SlideContext>(\n node: ContentNode,\n context: TContext\n): SlideDefinition['content'] {\n if (node.type === 'dynamic') {\n // 动态内容(组件)\n return {\n type: 'dynamic',\n component: node.component,\n props: evaluateProps(node.props, context),\n };\n } else {\n // 静态文本\n return {\n type: 'text',\n lines: node.lines.map(line => String(evaluateExpression(line, context))),\n };\n }\n}\n\n/**\n * 编译 Behavior 节点\n */\nfunction compileBehavior<TContext extends SlideContext = SlideContext>(\n node: BehaviorNode,\n context: TContext\n): SlideDefinition['behavior'] {\n return {\n transition: {\n type: (node.transition as unknown as { transType: string }).transType as 'slide' | 'zoom' | 'fade' | 'cube' | 'flip' | 'none',\n ...evaluateProps(node.transition.options, context),\n },\n };\n}\n\n/**\n * 计算属性对象\n */\nfunction evaluateProps<TContext extends SlideContext = SlideContext>(\n props: Record<string, ExpressionValue>,\n context: TContext\n): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(props)) {\n result[key] = evaluateExpression(value, context);\n }\n\n return result;\n}\n\n/**\n * 计算表达式\n */\nfunction evaluateExpression<TContext extends SlideContext = SlideContext>(\n expr: ExpressionValue,\n context: TContext\n): unknown {\n // 字符串字面量\n if (typeof expr === 'string') {\n return expr;\n }\n\n // 对象类型(AST 节点)\n if (typeof expr === 'object' && expr !== null && 'type' in expr) {\n switch (expr.type) {\n case 'number':\n return (expr as NumberLiteralNode).value;\n\n case 'boolean':\n return (expr as BooleanLiteralNode).value;\n\n case 'member':\n return evaluateMemberExpression(expr as MemberExpressionNode, context);\n\n case 'binary':\n return evaluateBinaryExpression(expr as BinaryExpressionNode, context);\n\n default:\n throw new CompileError(`Unknown expression type: ${(expr as { type: string }).type}`);\n }\n }\n\n throw new CompileError(`Invalid expression: ${JSON.stringify(expr)}`);\n}\n\n/**\n * 计算成员表达式(如 quiz.title, section.questions)\n * 也处理单个变量引用(properties 为空数组)\n */\nfunction evaluateMemberExpression<TContext extends SlideContext = SlideContext>(\n expr: MemberExpressionNode,\n context: TContext\n): unknown {\n // 从 context 中获取对象\n let value: unknown = context[expr.object as keyof TContext];\n\n // 如果没有属性,直接返回变量值(单个标识符的情况)\n if (expr.properties.length === 0) {\n if (value === undefined) {\n throw new CompileError(\n `Variable \"${expr.object}\" is not defined in context`\n );\n }\n return value;\n }\n\n // 构建属性路径用于错误信息\n const pathParts: string[] = [expr.object];\n\n // 遍历属性链\n for (const prop of expr.properties) {\n pathParts.push(prop);\n const currentPath = pathParts.join('.');\n\n // 检查 value 是否为 null 或 undefined\n if (value === null || value === undefined) {\n throw new CompileError(\n `Cannot access property \"${prop}\" of \"${pathParts.slice(0, -1).join('.')}\" because it is ${value === null ? 'null' : 'undefined'}`\n );\n }\n\n // 检查 value 是否为对象\n if (typeof value !== 'object') {\n throw new CompileError(\n `Cannot access property \"${prop}\" of \"${pathParts.slice(0, -1).join('.')}\" because it is not an object (got ${typeof value})`\n );\n }\n\n // 检查属性是否存在\n if (!(prop in value)) {\n throw new CompileError(\n `Property \"${prop}\" does not exist on \"${pathParts.slice(0, -1).join('.')}\"`\n );\n }\n\n value = (value as Record<string, unknown>)[prop];\n }\n\n return value;\n}\n\n/**\n * 计算二元表达式\n */\nfunction evaluateBinaryExpression<TContext extends SlideContext = SlideContext>(\n expr: BinaryExpressionNode,\n context: TContext\n): unknown {\n const left = evaluateExpression(expr.left, context);\n const right = evaluateExpression(expr.right, context);\n\n switch (expr.operator) {\n case '+':\n // 字符串拼接或数字相加\n if (typeof left === 'string' || typeof right === 'string') {\n return String(left) + String(right);\n }\n // 确保是数字类型\n if (typeof left !== 'number' || typeof right !== 'number') {\n throw new CompileError(\n `Cannot add ${typeof left} and ${typeof right}. Both operands must be numbers or at least one must be a string.`\n );\n }\n return left + right;\n\n case '-':\n if (typeof left !== 'number' || typeof right !== 'number') {\n throw new CompileError(\n `Cannot subtract ${typeof right} from ${typeof left}. Both operands must be numbers.`\n );\n }\n return left - right;\n\n case '*':\n if (typeof left !== 'number' || typeof right !== 'number') {\n throw new CompileError(\n `Cannot multiply ${typeof left} and ${typeof right}. Both operands must be numbers.`\n );\n }\n return left * right;\n\n case '/':\n if (typeof left !== 'number' || typeof right !== 'number') {\n throw new CompileError(\n `Cannot divide ${typeof left} by ${typeof right}. Both operands must be numbers.`\n );\n }\n if (right === 0) {\n throw new CompileError('Division by zero is not allowed');\n }\n return left / right;\n\n default:\n throw new CompileError(`Unknown operator: ${expr.operator}`);\n }\n}\n"],"names":["ParseError","message","location","createParser","parse","source","error","errorMessage","parseSlideDSL","CompileError","compile","ast","rules","ruleNode","compileRule","node","context","compileSlide","slideNode","compileRuleBody","body","compileForLoop","slides","collection","evaluateExpression","item","loopContext","compileContent","compileBehavior","evaluateProps","line","props","result","key","value","expr","evaluateMemberExpression","evaluateBinaryExpression","pathParts","prop","left","right"],"mappings":"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"}
|
package/dist/parser.d.ts
DELETED
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import { PresentationNode } from './ast';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Parser 错误
|
|
5
|
-
*/
|
|
6
|
-
export declare class ParseError extends Error {
|
|
7
|
-
location?: {
|
|
8
|
-
start: {
|
|
9
|
-
line: number;
|
|
10
|
-
column: number;
|
|
11
|
-
offset: number;
|
|
12
|
-
};
|
|
13
|
-
end: {
|
|
14
|
-
line: number;
|
|
15
|
-
column: number;
|
|
16
|
-
offset: number;
|
|
17
|
-
};
|
|
18
|
-
} | undefined;
|
|
19
|
-
constructor(message: string, location?: {
|
|
20
|
-
start: {
|
|
21
|
-
line: number;
|
|
22
|
-
column: number;
|
|
23
|
-
offset: number;
|
|
24
|
-
};
|
|
25
|
-
end: {
|
|
26
|
-
line: number;
|
|
27
|
-
column: number;
|
|
28
|
-
offset: number;
|
|
29
|
-
};
|
|
30
|
-
} | undefined);
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Parser 接口
|
|
34
|
-
*/
|
|
35
|
-
export interface Parser {
|
|
36
|
-
/**
|
|
37
|
-
* 解析 Slide DSL 源代码
|
|
38
|
-
*/
|
|
39
|
-
parse(source: string): PresentationNode;
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* 创建 Parser 实例
|
|
43
|
-
*/
|
|
44
|
-
export declare function createParser(): Promise<Parser>;
|
|
45
|
-
/**
|
|
46
|
-
* 便捷函数:直接解析 DSL 源代码
|
|
47
|
-
*/
|
|
48
|
-
export declare function parseSlideDSL(source: string): Promise<PresentationNode>;
|
|
49
|
-
//# sourceMappingURL=parser.d.ts.map
|
package/dist/parser.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAC;AAE9C;;GAEG;AACH,qBAAa,UAAW,SAAQ,KAAK;IAG1B,QAAQ,CAAC,EAAE;QAChB,KAAK,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC;QACxD,GAAG,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC;KACvD;gBAJD,OAAO,EAAE,MAAM,EACR,QAAQ,CAAC,EAAE;QAChB,KAAK,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC;QACxD,GAAG,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC;KACvD,YAAA;CAKJ;AAED;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB;;OAEG;IACH,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,CAAC;CACzC;AAED;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAwBpD;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAgB7E"}
|