@turnipxenon/pineapple 1.1.2 → 2.2.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.
Files changed (236) hide show
  1. package/package.json +20 -13
  2. package/src/lib/app.postcss +106 -47
  3. package/src/lib/assets/icons/bitbucket-icon.svg +1 -0
  4. package/src/lib/assets/icons/github-mark.svg +1 -0
  5. package/src/lib/assets/icons/link-icon.svg +1 -0
  6. package/src/lib/assets/icons/linkedin.svg +1 -0
  7. package/src/lib/assets/icons/mail.svg +1 -0
  8. package/src/lib/assets/others/seaweed-showcase.mp4 +0 -0
  9. package/src/lib/assets/others/weaver-footage.gif +0 -0
  10. package/src/lib/assets/others/window-set.png +0 -0
  11. package/src/lib/assets/placeholder/placeholder_circle.png +0 -0
  12. package/src/lib/components/Card.svelte +24 -0
  13. package/src/lib/components/CarouselElement.svelte +23 -0
  14. package/src/lib/components/Chip.svelte +12 -0
  15. package/src/lib/components/ElementVisbilityDetector.svelte +22 -0
  16. package/src/lib/components/OnElementVisbilityChanged.ts +1 -0
  17. package/src/lib/components/RandomizedBackground.svelte +6 -4
  18. package/src/lib/components/RandomizedImage.svelte +23 -14
  19. package/src/lib/components/StickyElement.svelte +40 -0
  20. package/src/lib/components/ToggleableContent.svelte +86 -0
  21. package/src/lib/components/ToggleableContentType.ts +4 -0
  22. package/src/lib/components/layouts/LayoutConstants.ts +1 -0
  23. package/src/lib/components/{PineappleBaseLayout.svelte → layouts/PineappleBaseLayout.svelte} +73 -71
  24. package/src/lib/components/layouts/SeaweedBaseLayout.svelte +109 -0
  25. package/src/lib/consts.ts +2 -0
  26. package/src/lib/index.ts +2 -1
  27. package/src/lib/styles/global.css +1 -0
  28. package/src/lib/template/SeaweedTemplate.svelte +873 -0
  29. package/src/lib/theme.postcss +114 -105
  30. package/src/lib/util/create_go_to_function.ts +5 -0
  31. package/src/routes/+layout.svelte +15 -19
  32. package/src/routes/+page.svelte +9 -12
  33. package/src/routes/personal/+layout.svelte +23 -0
  34. package/src/routes/personal/+page.svelte +37 -0
  35. package/src/routes/portfolio/+page.server.ts +44 -0
  36. package/src/routes/portfolio/+page.svelte +19 -0
  37. package/src/routes/portfolio/SocialSection.svelte +93 -0
  38. package/src/routes/portfolio/actual/+page.svelte +10 -0
  39. package/dist/app.postcss +0 -94
  40. package/dist/assets/bg_tiled/bg_tiled_ares.png +0 -0
  41. package/dist/assets/bg_tiled/bg_tiled_corn.png +0 -0
  42. package/dist/assets/bg_tiled/bg_tiled_pineapple.png +0 -0
  43. package/dist/assets/bg_tiled/bg_tiled_reinhard.png +0 -0
  44. package/dist/assets/bg_tiled/bg_tiled_tomato.png +0 -0
  45. package/dist/assets/bg_tiled/bg_tiled_turnip.png +0 -0
  46. package/dist/assets/characters/ares/ares_blushing.webp +0 -0
  47. package/dist/assets/characters/ares/ares_disappointed.webp +0 -0
  48. package/dist/assets/characters/ares/ares_happy.webp +0 -0
  49. package/dist/assets/characters/ares/ares_lets_go.webp +0 -0
  50. package/dist/assets/characters/ares/ares_logo.webp +0 -0
  51. package/dist/assets/characters/ares/ares_mad.webp +0 -0
  52. package/dist/assets/characters/ares/ares_neutral.webp +0 -0
  53. package/dist/assets/characters/ares/ares_slightly_mad.webp +0 -0
  54. package/dist/assets/characters/ares/ares_surprised.webp +0 -0
  55. package/dist/assets/characters/ares/ares_yay.webp +0 -0
  56. package/dist/assets/game_dev/footage-chef-wings.gif +0 -0
  57. package/dist/assets/game_dev/footage-depreciation.webm +0 -0
  58. package/dist/assets/game_dev/footage-thinking-of-flowers.webm +0 -0
  59. package/dist/assets/game_dev/screenshot-game-jam-mama.png +0 -0
  60. package/dist/assets/game_dev/screenshot-string-hop.png +0 -0
  61. package/dist/assets/game_dev/screenshot-wet-ass-road.png +0 -0
  62. package/dist/assets/temp/background-image.jpg +0 -0
  63. package/dist/assets/temp/bitbucket-logo.png +0 -0
  64. package/dist/assets/temp/github-logo.png +0 -0
  65. package/dist/assets/temp/header-hep-cat.mp4 +0 -0
  66. package/dist/assets/temp/header-hep-cat.ogg +0 -0
  67. package/dist/assets/temp/header-hep-cat.webm +0 -0
  68. package/dist/assets/temp/header-pengi.mp4 +0 -0
  69. package/dist/assets/temp/header-pengi.webm +0 -0
  70. package/dist/assets/temp/header-soulwork.mp4 +0 -0
  71. package/dist/assets/temp/header-soulwork.ogg +0 -0
  72. package/dist/assets/temp/header-soulwork.webm +0 -0
  73. package/dist/components/DialogOverlay.svelte +0 -93
  74. package/dist/components/DialogOverlay.svelte.d.ts +0 -14
  75. package/dist/components/LazyAsset.svelte +0 -96
  76. package/dist/components/LazyAsset.svelte.d.ts +0 -20
  77. package/dist/components/LazyAssetType.d.ts +0 -10
  78. package/dist/components/LazyAssetType.js +0 -12
  79. package/dist/components/PineappleBaseLayout.svelte +0 -186
  80. package/dist/components/PineappleBaseLayout.svelte.d.ts +0 -19
  81. package/dist/components/RandomizedBackground.svelte +0 -62
  82. package/dist/components/RandomizedBackground.svelte.d.ts +0 -16
  83. package/dist/components/RandomizedImage.svelte +0 -29
  84. package/dist/components/RandomizedImage.svelte.d.ts +0 -17
  85. package/dist/components/dialog_manager/DialogManager.d.ts +0 -77
  86. package/dist/components/dialog_manager/DialogManager.js +0 -239
  87. package/dist/components/dialog_manager/DialogManagerStore.d.ts +0 -41
  88. package/dist/components/dialog_manager/DialogManagerStore.js +0 -45
  89. package/dist/components/dialog_manager/DialogProcessor.d.ts +0 -13
  90. package/dist/components/dialog_manager/DialogProcessor.js +0 -62
  91. package/dist/components/dialog_manager/DialogUtils.d.ts +0 -5
  92. package/dist/components/dialog_manager/DialogUtils.js +0 -8
  93. package/dist/components/dialog_manager/behavior_tree/core/BTreeUtils.d.ts +0 -15
  94. package/dist/components/dialog_manager/behavior_tree/core/BTreeUtils.js +0 -34
  95. package/dist/components/dialog_manager/behavior_tree/core/BaseBehaviorResult.d.ts +0 -4
  96. package/dist/components/dialog_manager/behavior_tree/core/BaseBehaviorResult.js +0 -1
  97. package/dist/components/dialog_manager/behavior_tree/core/BehaviorNode.d.ts +0 -3
  98. package/dist/components/dialog_manager/behavior_tree/core/BehaviorNode.js +0 -1
  99. package/dist/components/dialog_manager/behavior_tree/core/BehaviorStatus.d.ts +0 -5
  100. package/dist/components/dialog_manager/behavior_tree/core/BehaviorStatus.js +0 -6
  101. package/dist/components/dialog_manager/behavior_tree/core/SelectorNode.d.ts +0 -12
  102. package/dist/components/dialog_manager/behavior_tree/core/SelectorNode.js +0 -22
  103. package/dist/components/dialog_manager/behavior_tree/expression/ExpressionArguments.d.ts +0 -5
  104. package/dist/components/dialog_manager/behavior_tree/expression/ExpressionArguments.js +0 -1
  105. package/dist/components/dialog_manager/behavior_tree/expression/ExpressionBehaviorNode.d.ts +0 -4
  106. package/dist/components/dialog_manager/behavior_tree/expression/ExpressionBehaviorNode.js +0 -1
  107. package/dist/components/dialog_manager/behavior_tree/expression/ExpressionEvaluator.d.ts +0 -15
  108. package/dist/components/dialog_manager/behavior_tree/expression/ExpressionEvaluator.js +0 -220
  109. package/dist/components/dialog_manager/behavior_tree/expression/ExpressionResult.d.ts +0 -5
  110. package/dist/components/dialog_manager/behavior_tree/expression/ExpressionResult.js +0 -1
  111. package/dist/components/dialog_manager/behavior_tree/expression/ExpressionSelectorNode.d.ts +0 -8
  112. package/dist/components/dialog_manager/behavior_tree/expression/ExpressionSelectorNode.js +0 -15
  113. package/dist/components/dialog_manager/behavior_tree/expression/ExpressionState.d.ts +0 -3
  114. package/dist/components/dialog_manager/behavior_tree/expression/ExpressionState.js +0 -1
  115. package/dist/components/dialog_manager/behavior_tree/expression/OperandNode.d.ts +0 -10
  116. package/dist/components/dialog_manager/behavior_tree/expression/OperandNode.js +0 -15
  117. package/dist/components/dialog_manager/behavior_tree/expression/OperatorNode.d.ts +0 -11
  118. package/dist/components/dialog_manager/behavior_tree/expression/OperatorNode.js +0 -30
  119. package/dist/components/dialog_manager/behavior_tree/expression/commands/CommandExpressionNode.d.ts +0 -6
  120. package/dist/components/dialog_manager/behavior_tree/expression/commands/CommandExpressionNode.js +0 -21
  121. package/dist/components/dialog_manager/behavior_tree/expression/commands/CommandLogicNode.d.ts +0 -9
  122. package/dist/components/dialog_manager/behavior_tree/expression/commands/CommandLogicNode.js +0 -19
  123. package/dist/components/dialog_manager/behavior_tree/expression/commands/CommandMap.d.ts +0 -9
  124. package/dist/components/dialog_manager/behavior_tree/expression/commands/CommandMap.js +0 -18
  125. package/dist/components/dialog_manager/behavior_tree/expression/commands/RandomRangeCommand.d.ts +0 -15
  126. package/dist/components/dialog_manager/behavior_tree/expression/commands/RandomRangeCommand.js +0 -24
  127. package/dist/components/dialog_manager/behavior_tree/expression/commands/VisitedCommand.d.ts +0 -20
  128. package/dist/components/dialog_manager/behavior_tree/expression/commands/VisitedCommand.js +0 -32
  129. package/dist/components/dialog_manager/behavior_tree/expression/commands/VisitedCountCommand.d.ts +0 -13
  130. package/dist/components/dialog_manager/behavior_tree/expression/commands/VisitedCountCommand.js +0 -25
  131. package/dist/components/dialog_manager/behavior_tree/expression/operators/AndOperator.d.ts +0 -7
  132. package/dist/components/dialog_manager/behavior_tree/expression/operators/AndOperator.js +0 -15
  133. package/dist/components/dialog_manager/behavior_tree/expression/operators/EqualityOperator.d.ts +0 -7
  134. package/dist/components/dialog_manager/behavior_tree/expression/operators/EqualityOperator.js +0 -14
  135. package/dist/components/dialog_manager/behavior_tree/expression/operators/GreaterThanEqualOperator.d.ts +0 -7
  136. package/dist/components/dialog_manager/behavior_tree/expression/operators/GreaterThanEqualOperator.js +0 -12
  137. package/dist/components/dialog_manager/behavior_tree/expression/operators/GreaterThanOperator.d.ts +0 -7
  138. package/dist/components/dialog_manager/behavior_tree/expression/operators/GreaterThanOperator.js +0 -12
  139. package/dist/components/dialog_manager/behavior_tree/expression/operators/InequalityOperator.d.ts +0 -7
  140. package/dist/components/dialog_manager/behavior_tree/expression/operators/InequalityOperator.js +0 -12
  141. package/dist/components/dialog_manager/behavior_tree/expression/operators/LessThanEqualOperator.d.ts +0 -7
  142. package/dist/components/dialog_manager/behavior_tree/expression/operators/LessThanEqualOperator.js +0 -12
  143. package/dist/components/dialog_manager/behavior_tree/expression/operators/LessThanOperator.d.ts +0 -7
  144. package/dist/components/dialog_manager/behavior_tree/expression/operators/LessThanOperator.js +0 -12
  145. package/dist/components/dialog_manager/behavior_tree/expression/operators/NegationOperator.d.ts +0 -7
  146. package/dist/components/dialog_manager/behavior_tree/expression/operators/NegationOperator.js +0 -13
  147. package/dist/components/dialog_manager/behavior_tree/expression/operators/OperatorLogicNode.d.ts +0 -17
  148. package/dist/components/dialog_manager/behavior_tree/expression/operators/OperatorLogicNode.js +0 -32
  149. package/dist/components/dialog_manager/behavior_tree/expression/operators/OperatorMap.d.ts +0 -9
  150. package/dist/components/dialog_manager/behavior_tree/expression/operators/OperatorMap.js +0 -47
  151. package/dist/components/dialog_manager/behavior_tree/expression/operators/OrOperator.d.ts +0 -7
  152. package/dist/components/dialog_manager/behavior_tree/expression/operators/OrOperator.js +0 -13
  153. package/dist/components/dialog_manager/behavior_tree/expression/operators/XorOperator.d.ts +0 -7
  154. package/dist/components/dialog_manager/behavior_tree/expression/operators/XorOperator.js +0 -17
  155. package/dist/components/dialog_manager/behavior_tree/expression/operators/arithmetic/DivisionOperator.d.ts +0 -7
  156. package/dist/components/dialog_manager/behavior_tree/expression/operators/arithmetic/DivisionOperator.js +0 -14
  157. package/dist/components/dialog_manager/behavior_tree/expression/operators/arithmetic/MinusOperator.d.ts +0 -7
  158. package/dist/components/dialog_manager/behavior_tree/expression/operators/arithmetic/MinusOperator.js +0 -14
  159. package/dist/components/dialog_manager/behavior_tree/expression/operators/arithmetic/MultiplicationOperator.d.ts +0 -7
  160. package/dist/components/dialog_manager/behavior_tree/expression/operators/arithmetic/MultiplicationOperator.js +0 -12
  161. package/dist/components/dialog_manager/behavior_tree/expression/operators/arithmetic/PlusOperator.d.ts +0 -7
  162. package/dist/components/dialog_manager/behavior_tree/expression/operators/arithmetic/PlusOperator.js +0 -14
  163. package/dist/components/dialog_manager/behavior_tree/expression/operators/arithmetic/RemainderDivisionOperator.d.ts +0 -7
  164. package/dist/components/dialog_manager/behavior_tree/expression/operators/arithmetic/RemainderDivisionOperator.js +0 -14
  165. package/dist/components/dialog_manager/behavior_tree/line_core/LineBehaviorNode.d.ts +0 -4
  166. package/dist/components/dialog_manager/behavior_tree/line_core/LineBehaviorNode.js +0 -1
  167. package/dist/components/dialog_manager/behavior_tree/line_core/LineBehaviorResult.d.ts +0 -6
  168. package/dist/components/dialog_manager/behavior_tree/line_core/LineBehaviorResult.js +0 -1
  169. package/dist/components/dialog_manager/behavior_tree/line_core/LineNodeArguments.d.ts +0 -6
  170. package/dist/components/dialog_manager/behavior_tree/line_core/LineNodeArguments.js +0 -1
  171. package/dist/components/dialog_manager/behavior_tree/line_core/LineSelectorNode.d.ts +0 -8
  172. package/dist/components/dialog_manager/behavior_tree/line_core/LineSelectorNode.js +0 -15
  173. package/dist/components/dialog_manager/behavior_tree/line_processors/BehaviorState.d.ts +0 -5
  174. package/dist/components/dialog_manager/behavior_tree/line_processors/BehaviorState.js +0 -5
  175. package/dist/components/dialog_manager/behavior_tree/line_processors/ElseIfNode.d.ts +0 -11
  176. package/dist/components/dialog_manager/behavior_tree/line_processors/ElseIfNode.js +0 -53
  177. package/dist/components/dialog_manager/behavior_tree/line_processors/ElseNode.d.ts +0 -11
  178. package/dist/components/dialog_manager/behavior_tree/line_processors/ElseNode.js +0 -49
  179. package/dist/components/dialog_manager/behavior_tree/line_processors/EndIfNode.d.ts +0 -11
  180. package/dist/components/dialog_manager/behavior_tree/line_processors/EndIfNode.js +0 -23
  181. package/dist/components/dialog_manager/behavior_tree/line_processors/IfMode.d.ts +0 -6
  182. package/dist/components/dialog_manager/behavior_tree/line_processors/IfMode.js +0 -8
  183. package/dist/components/dialog_manager/behavior_tree/line_processors/IfNode.d.ts +0 -12
  184. package/dist/components/dialog_manager/behavior_tree/line_processors/IfNode.js +0 -43
  185. package/dist/components/dialog_manager/behavior_tree/line_processors/IgnoreGuardNode.d.ts +0 -11
  186. package/dist/components/dialog_manager/behavior_tree/line_processors/IgnoreGuardNode.js +0 -25
  187. package/dist/components/dialog_manager/behavior_tree/line_processors/IgnoreJumpNode.d.ts +0 -6
  188. package/dist/components/dialog_manager/behavior_tree/line_processors/IgnoreJumpNode.js +0 -18
  189. package/dist/components/dialog_manager/behavior_tree/line_processors/LineCommentNode.d.ts +0 -6
  190. package/dist/components/dialog_manager/behavior_tree/line_processors/LineCommentNode.js +0 -17
  191. package/dist/components/dialog_manager/behavior_tree/line_processors/NormalLineProcessorNode.d.ts +0 -10
  192. package/dist/components/dialog_manager/behavior_tree/line_processors/NormalLineProcessorNode.js +0 -38
  193. package/dist/components/dialog_manager/behavior_tree/line_processors/SetVariableNode.d.ts +0 -11
  194. package/dist/components/dialog_manager/behavior_tree/line_processors/SetVariableNode.js +0 -31
  195. package/dist/components/dialog_manager/behavior_tree/line_processors/commands/DeclareCommand.d.ts +0 -8
  196. package/dist/components/dialog_manager/behavior_tree/line_processors/commands/DeclareCommand.js +0 -39
  197. package/dist/components/dialog_manager/behavior_tree/line_processors/commands/JumpCommand.d.ts +0 -8
  198. package/dist/components/dialog_manager/behavior_tree/line_processors/commands/JumpCommand.js +0 -40
  199. package/dist/components/dialog_manager/behavior_tree/line_processors/commands/UnvisitCommand.d.ts +0 -9
  200. package/dist/components/dialog_manager/behavior_tree/line_processors/commands/UnvisitCommand.js +0 -28
  201. package/dist/index.d.ts +0 -8
  202. package/dist/index.js +0 -8
  203. package/dist/scripts/SetDefaultEnvironment.d.ts +0 -1
  204. package/dist/scripts/SetDefaultEnvironment.js +0 -41
  205. package/dist/scripts/pineapple_fiber/PineappleWeaver.d.ts +0 -9
  206. package/dist/scripts/pineapple_fiber/PineappleWeaver.js +0 -201
  207. package/dist/scripts/util/FileManagement.d.ts +0 -7
  208. package/dist/scripts/util/FileManagement.js +0 -35
  209. package/dist/scripts/util/ManualCheck.d.ts +0 -1
  210. package/dist/scripts/util/ManualCheck.js +0 -28
  211. package/dist/scripts/util/ManualCheckRun.d.ts +0 -1
  212. package/dist/scripts/util/ManualCheckRun.js +0 -6
  213. package/dist/store.d.ts +0 -17
  214. package/dist/store.js +0 -17
  215. package/dist/styles/DefaultGridContainer.css +0 -61
  216. package/dist/theme.postcss +0 -107
  217. package/dist/types/BlogBlurbMeta.d.ts +0 -11
  218. package/dist/types/BlogBlurbMeta.js +0 -16
  219. package/dist/types/BreadcrumbData.d.ts +0 -4
  220. package/dist/types/BreadcrumbData.js +0 -1
  221. package/dist/types/pineapple_fiber/DialogDetail.d.ts +0 -6
  222. package/dist/types/pineapple_fiber/DialogDetail.js +0 -1
  223. package/dist/types/pineapple_fiber/DialogState.d.ts +0 -5
  224. package/dist/types/pineapple_fiber/DialogState.js +0 -6
  225. package/dist/types/pineapple_fiber/DialogVariableStore.d.ts +0 -2
  226. package/dist/types/pineapple_fiber/DialogVariableStore.js +0 -20
  227. package/dist/types/pineapple_fiber/PortraitType.d.ts +0 -11
  228. package/dist/types/pineapple_fiber/PortraitType.js +0 -12
  229. package/dist/util/stable_random.d.ts +0 -2
  230. package/dist/util/stable_random.js +0 -15
  231. package/src/lib/assets/icons/chat_cursor.svg +0 -47
  232. package/src/lib/assets/icons/external_link.svg +0 -50
  233. package/static/default-card.png +0 -0
  234. package/static/favicon.png +0 -0
  235. /package/{dist/assets/icons/chat_cursor.svg → src/lib/assets/icons/chat-cursor.svg} +0 -0
  236. /package/{dist/assets/icons/external_link.svg → src/lib/assets/icons/external-link.svg} +0 -0
@@ -1,220 +0,0 @@
1
- import { browser } from "$app/environment";
2
- import { OperatorNode } from "./OperatorNode";
3
- import { OperandNode } from "./OperandNode";
4
- import { ExpressionSelectorNode } from "./ExpressionSelectorNode";
5
- import { btreeUtils } from "../core/BTreeUtils";
6
- import { CommandExpressionNode } from "./commands/CommandExpressionNode";
7
- class ExpressionEvaluator {
8
- evaluatorTree = new ExpressionSelectorNode([
9
- new OperatorNode(),
10
- new CommandExpressionNode(),
11
- new OperandNode()
12
- ]);
13
- // from https://stackoverflow.com/a/175787/17836168
14
- isNumeric = (str) => {
15
- return (
16
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
17
- // @ts-ignore
18
- !isNaN(str) && // use type coercion to parse the _entirety_ of the string (`parseFloat` alone does not do this)...
19
- !isNaN(parseFloat(str))); // ...and ensure strings of whitespace fail
20
- };
21
- getPrecedence = (token) => {
22
- switch (token) {
23
- case "&&":
24
- case "||":
25
- case "^":
26
- return 1;
27
- case "==":
28
- case "!=":
29
- return 2;
30
- case "<":
31
- case ">":
32
- case ">=":
33
- case "<=":
34
- return 3;
35
- case "+":
36
- case "-":
37
- return 4;
38
- case "*":
39
- case "/":
40
- case "%":
41
- return 3;
42
- case "!":
43
- return 4;
44
- case "(":
45
- case ")":
46
- return 0; // hack lol
47
- default:
48
- // usable to test if operator lol
49
- // console.error(`Unknown token: ${token}`);
50
- return -1;
51
- }
52
- };
53
- evaluateFreeform = (line, prefix) => {
54
- if (!browser) {
55
- return []; // do not process when not in browser
56
- }
57
- // tokenize first!
58
- const infixTokens = [];
59
- const expression = line
60
- .split("//")[0]
61
- .trim()
62
- .slice(prefix === "" ? 0 : prefix.trim().length + 1, line.length - 2);
63
- // region tokenizer
64
- // console.log("Tokenizing:", expression);
65
- const operators = "+-*/%!<>=&|^";
66
- let currentToken = "";
67
- let escapeToggle = false;
68
- let quoteToggle = false;
69
- let operatorFound = false;
70
- for (const character of expression) {
71
- if (escapeToggle) {
72
- currentToken += character;
73
- escapeToggle = false;
74
- }
75
- else if (quoteToggle) {
76
- currentToken += character;
77
- if (character === '"') {
78
- infixTokens.push(currentToken);
79
- currentToken = "";
80
- quoteToggle = false;
81
- }
82
- }
83
- else if (operatorFound) {
84
- if (operators.includes(character)) {
85
- currentToken += character;
86
- }
87
- else if ("()".includes(character)) {
88
- if (currentToken !== "") {
89
- infixTokens.push(currentToken);
90
- }
91
- infixTokens.push(character);
92
- currentToken = "";
93
- operatorFound = false;
94
- }
95
- else {
96
- operatorFound = false;
97
- infixTokens.push(currentToken);
98
- if (character !== " ") {
99
- currentToken = character;
100
- }
101
- else {
102
- currentToken = "";
103
- }
104
- }
105
- }
106
- else if (character === "," || character === " ") {
107
- if (currentToken !== "") {
108
- infixTokens.push(currentToken);
109
- currentToken = "";
110
- }
111
- }
112
- else if (character === '"') {
113
- // do quote stuff unless we had an escape toggle
114
- currentToken += character;
115
- quoteToggle = true;
116
- }
117
- else if (operators.includes(character)) {
118
- if (currentToken !== "") {
119
- infixTokens.push(currentToken);
120
- }
121
- currentToken = character;
122
- operatorFound = true;
123
- }
124
- else if ("()".includes(character)) {
125
- if (currentToken !== "") {
126
- // determine if function
127
- if (currentToken[0] !== "$" && // should not be a variable stand-in
128
- currentToken[0] !== '"' && // should not be a string literal
129
- !this.isNumeric(currentToken[0]) // should not be a number literal
130
- ) {
131
- currentToken = `#${currentToken}`;
132
- }
133
- infixTokens.push(currentToken);
134
- }
135
- infixTokens.push(character);
136
- currentToken = "";
137
- }
138
- else {
139
- currentToken += character;
140
- }
141
- }
142
- if (currentToken !== "") {
143
- infixTokens.push(currentToken);
144
- }
145
- // console.log(infixTokens);
146
- // endregion tokenizer
147
- // region infix to postfix
148
- // convert from infix to postfix
149
- // algo from https://www.geeksforgeeks.org/convert-infix-expression-to-postfix-expression/
150
- // console.log(infixTokens);
151
- const postfixTokens = [];
152
- const stack = [];
153
- infixTokens.forEach((token) => {
154
- if (token.startsWith("#")) {
155
- stack.push(token);
156
- }
157
- else if (token === "(") {
158
- stack.push("(");
159
- }
160
- else if (token === ")") {
161
- while (btreeUtils.peek(stack) !== "(") {
162
- // just for safety
163
- if (stack.length === 0) {
164
- console.error("Assumption was made in postfix conversion that stack will not be empty! It was wrong!");
165
- throw new Error("Wrong postfix conversion!");
166
- }
167
- postfixTokens.push(stack.pop());
168
- }
169
- stack.pop(); // remove "("
170
- if (stack.length > 0 && btreeUtils.peek(stack).startsWith("#")) {
171
- postfixTokens.push(stack.pop());
172
- }
173
- }
174
- else if (![-1, 5].includes(this.getPrecedence(token))) {
175
- while (stack.length > 0 &&
176
- this.getPrecedence(btreeUtils.peek(stack)) >= this.getPrecedence(token)) {
177
- postfixTokens.push(stack.pop());
178
- }
179
- stack.push(token);
180
- }
181
- else {
182
- // operand
183
- postfixTokens.push(token);
184
- }
185
- });
186
- // pop all remaining elements from the stack
187
- while (stack.length > 0) {
188
- postfixTokens.push(stack.pop());
189
- }
190
- // console.log("Finished postfix", postfixTokens);
191
- // endregion infix to postfix
192
- // evaluate
193
- let currentState = {
194
- operandStack: []
195
- };
196
- postfixTokens.forEach((token) => {
197
- // console.log("Current token", token);
198
- const result = this.evaluatorTree.process({
199
- initState: currentState,
200
- token: token
201
- });
202
- // console.log("Token evaluated with result", result.nextState.operandStack.toString());
203
- currentState = result.nextState;
204
- });
205
- // console.log("Result", currentState.operandStack);
206
- return currentState.operandStack;
207
- };
208
- /**
209
- * evaluates a yarn if or elseif statement
210
- * @param line is the current line being evaluated
211
- * @param prefix is either "<<if" or "<<elseif"
212
- */
213
- evaluate = (line, prefix) => {
214
- if (!browser) {
215
- return false; // do not process when not in browser
216
- }
217
- return String(btreeUtils.peek(this.evaluateFreeform(line, prefix))) === "true";
218
- };
219
- }
220
- export const expressionEvaluator = new ExpressionEvaluator();
@@ -1,5 +0,0 @@
1
- import type { BaseBehaviorResult } from "../core/BaseBehaviorResult";
2
- import type { ExpressionState } from "./ExpressionState";
3
- export interface ExpressionResult extends BaseBehaviorResult {
4
- nextState: ExpressionState;
5
- }
@@ -1,8 +0,0 @@
1
- import { SelectorNode } from "../core/SelectorNode";
2
- import type { ExpressionArguments } from "./ExpressionArguments";
3
- import type { ExpressionResult } from "./ExpressionResult";
4
- import type { ExpressionBehaviorNode } from "./ExpressionBehaviorNode";
5
- export declare class ExpressionSelectorNode extends SelectorNode<ExpressionArguments, ExpressionResult> {
6
- constructor(nodeList: ExpressionBehaviorNode[]);
7
- defaultResult: () => ExpressionResult;
8
- }
@@ -1,15 +0,0 @@
1
- import { SelectorNode } from "../core/SelectorNode";
2
- import { BehaviorStatus } from "../core/BehaviorStatus";
3
- export class ExpressionSelectorNode extends SelectorNode {
4
- constructor(nodeList) {
5
- super(nodeList);
6
- }
7
- defaultResult = () => {
8
- return {
9
- nextState: {
10
- operandStack: []
11
- },
12
- status: BehaviorStatus.Failure
13
- };
14
- };
15
- }
@@ -1,3 +0,0 @@
1
- export interface ExpressionState {
2
- operandStack: string[];
3
- }
@@ -1,10 +0,0 @@
1
- import type { ExpressionBehaviorNode } from "./ExpressionBehaviorNode";
2
- import type { ExpressionArguments } from "./ExpressionArguments";
3
- import type { ExpressionResult } from "./ExpressionResult";
4
- /**
5
- * Puts the token as an operand
6
- * It's always successful
7
- */
8
- export declare class OperandNode implements ExpressionBehaviorNode {
9
- process(nodeArgs: ExpressionArguments): ExpressionResult;
10
- }
@@ -1,15 +0,0 @@
1
- import { BehaviorStatus } from "../core/BehaviorStatus";
2
- import { btreeUtils } from "../core/BTreeUtils";
3
- /**
4
- * Puts the token as an operand
5
- * It's always successful
6
- */
7
- export class OperandNode {
8
- process(nodeArgs) {
9
- nodeArgs.initState.operandStack.push(btreeUtils.simplifyToken(nodeArgs.token));
10
- return {
11
- nextState: nodeArgs.initState,
12
- status: BehaviorStatus.Success
13
- };
14
- }
15
- }
@@ -1,11 +0,0 @@
1
- import type { ExpressionBehaviorNode } from "./ExpressionBehaviorNode";
2
- import type { ExpressionArguments } from "./ExpressionArguments";
3
- import type { ExpressionResult } from "./ExpressionResult";
4
- /**
5
- * A leaf node that returns:
6
- * - Success if the current token is an operator, and does its associated logic
7
- * - Failure if it is not an operator
8
- */
9
- export declare class OperatorNode implements ExpressionBehaviorNode {
10
- process(nodeArgs: ExpressionArguments): ExpressionResult;
11
- }
@@ -1,30 +0,0 @@
1
- import { BehaviorStatus } from "../core/BehaviorStatus";
2
- import { operatorMap } from "./operators/OperatorMap";
3
- /**
4
- * A leaf node that returns:
5
- * - Success if the current token is an operator, and does its associated logic
6
- * - Failure if it is not an operator
7
- */
8
- export class OperatorNode {
9
- process(nodeArgs) {
10
- if (!operatorMap.exists(nodeArgs.token)) {
11
- return {
12
- nextState: nodeArgs.initState,
13
- status: BehaviorStatus.Failure
14
- };
15
- }
16
- const logic = operatorMap.get(nodeArgs.token);
17
- if (logic === undefined) {
18
- console.error(`Unimplemented operator: ${nodeArgs.token}`);
19
- return {
20
- nextState: nodeArgs.initState,
21
- status: BehaviorStatus.Failure
22
- };
23
- }
24
- logic.process(nodeArgs);
25
- return {
26
- nextState: nodeArgs.initState,
27
- status: BehaviorStatus.Success
28
- };
29
- }
30
- }
@@ -1,6 +0,0 @@
1
- import type { ExpressionBehaviorNode } from "../ExpressionBehaviorNode";
2
- import type { ExpressionArguments } from "../ExpressionArguments";
3
- import type { ExpressionResult } from "../ExpressionResult";
4
- export declare class CommandExpressionNode implements ExpressionBehaviorNode {
5
- process(nodeArgs: ExpressionArguments): ExpressionResult;
6
- }
@@ -1,21 +0,0 @@
1
- import { commandMap } from "./CommandMap";
2
- import { BehaviorStatus } from "../../core/BehaviorStatus";
3
- export class CommandExpressionNode {
4
- process(nodeArgs) {
5
- const commandNode = commandMap.get(nodeArgs.token);
6
- if (commandNode === undefined) {
7
- if (nodeArgs.token.startsWith("#")) {
8
- console.error(`Unimplemented command: ${nodeArgs.token}`);
9
- }
10
- return {
11
- nextState: nodeArgs.initState,
12
- status: BehaviorStatus.Failure
13
- };
14
- }
15
- commandNode.process(nodeArgs);
16
- return {
17
- nextState: nodeArgs.initState,
18
- status: BehaviorStatus.Success
19
- };
20
- }
21
- }
@@ -1,9 +0,0 @@
1
- import type { ExpressionBehaviorNode } from "../ExpressionBehaviorNode";
2
- import type { ExpressionArguments } from "../ExpressionArguments";
3
- import type { ExpressionResult } from "../ExpressionResult";
4
- export declare abstract class CommandLogicNode implements ExpressionBehaviorNode {
5
- abstract getToken: () => string;
6
- abstract getArgumentCount: () => number;
7
- abstract doOperation: (currentOperands: string[], nodeArgs: ExpressionArguments) => void;
8
- process(nodeArgs: ExpressionArguments): ExpressionResult;
9
- }
@@ -1,19 +0,0 @@
1
- import { BehaviorStatus } from "../../core/BehaviorStatus";
2
- export class CommandLogicNode {
3
- process(nodeArgs) {
4
- const currentOperands = nodeArgs.initState.operandStack.slice(nodeArgs.initState.operandStack.length - this.getArgumentCount(), nodeArgs.initState.operandStack.length);
5
- nodeArgs.initState.operandStack = nodeArgs.initState.operandStack.slice(0, nodeArgs.initState.operandStack.length - this.getArgumentCount());
6
- if (currentOperands.length !== this.getArgumentCount()) {
7
- console.error(`Insufficient operands/arguments found for command ${this.getToken()}`);
8
- console.error(`Arguments found instead: ${currentOperands}`);
9
- console.error(`Error occurred at token: ${nodeArgs.token}`);
10
- }
11
- else {
12
- this.doOperation(currentOperands, nodeArgs);
13
- }
14
- return {
15
- nextState: nodeArgs.initState,
16
- status: BehaviorStatus.Success
17
- };
18
- }
19
- }
@@ -1,9 +0,0 @@
1
- import type { CommandLogicNode } from "./CommandLogicNode";
2
- declare class CommandMap {
3
- _commandMap: Map<string, CommandLogicNode>;
4
- constructor();
5
- get: (command: string) => CommandLogicNode | undefined;
6
- exists: (command: string) => boolean;
7
- }
8
- export declare const commandMap: CommandMap;
9
- export {};
@@ -1,18 +0,0 @@
1
- import { RandomRangeCommand } from "./RandomRangeCommand";
2
- import { VisitedCountCommand } from "./VisitedCountCommand";
3
- import { VisitedCommand } from "./VisitedCommand";
4
- class CommandMap {
5
- _commandMap = new Map();
6
- constructor() {
7
- [new RandomRangeCommand(), new VisitedCountCommand(), new VisitedCommand()].forEach((commandLogic) => {
8
- this._commandMap.set(commandLogic.getToken(), commandLogic);
9
- });
10
- }
11
- get = (command) => {
12
- return this._commandMap.get(command);
13
- };
14
- exists = (command) => {
15
- return this.get(command) !== undefined;
16
- };
17
- }
18
- export const commandMap = new CommandMap();
@@ -1,15 +0,0 @@
1
- import { CommandLogicNode } from "./CommandLogicNode";
2
- import type { ExpressionArguments } from "../ExpressionArguments";
3
- /**
4
- * Used for command like
5
- * random_range(1, 2);
6
- */
7
- export declare class RandomRangeCommand extends CommandLogicNode {
8
- /**
9
- * From: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random#getting_a_random_integer_between_two_values
10
- */
11
- getRandomInt: (min: number, max: number) => number;
12
- doOperation: (currentOperands: string[], nodeArgs: ExpressionArguments) => void;
13
- getArgumentCount: () => number;
14
- getToken: () => string;
15
- }
@@ -1,24 +0,0 @@
1
- import { CommandLogicNode } from "./CommandLogicNode";
2
- /**
3
- * Used for command like
4
- * random_range(1, 2);
5
- */
6
- export class RandomRangeCommand extends CommandLogicNode {
7
- /**
8
- * From: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random#getting_a_random_integer_between_two_values
9
- */
10
- getRandomInt = (min, max) => {
11
- min = Math.ceil(min);
12
- max = Math.floor(max);
13
- return Math.floor(Math.random() * (max - min + 1)) + min;
14
- };
15
- doOperation = (currentOperands, nodeArgs) => {
16
- nodeArgs.initState.operandStack.push(String(this.getRandomInt(Number(currentOperands[0]), Number(currentOperands[1]))));
17
- };
18
- getArgumentCount = () => {
19
- return 2;
20
- };
21
- getToken = () => {
22
- return "#random_range";
23
- };
24
- }
@@ -1,20 +0,0 @@
1
- import { CommandLogicNode } from "./CommandLogicNode";
2
- import type { ExpressionArguments } from "../ExpressionArguments";
3
- import { VisitedCountCommand } from "./VisitedCountCommand";
4
- /**
5
- * Used for command like
6
- * visited("node name here");
7
- *
8
- * Pushes a boolean in the operand stack
9
- *
10
- * Some design decision note:
11
- * I opted for composition over inheritance.
12
- * This may look like a good case for composition but my philosophy is if they both are equally
13
- * viable, always prefer composition. It will help in the long run if we do refactoring
14
- */
15
- export declare class VisitedCommand extends CommandLogicNode {
16
- visitedCountCommand: VisitedCountCommand;
17
- doOperation: (currentOperands: string[], nodeArgs: ExpressionArguments) => void;
18
- getArgumentCount: () => number;
19
- getToken: () => string;
20
- }
@@ -1,32 +0,0 @@
1
- import { CommandLogicNode } from "./CommandLogicNode";
2
- import { VisitedCountCommand } from "./VisitedCountCommand";
3
- /**
4
- * Used for command like
5
- * visited("node name here");
6
- *
7
- * Pushes a boolean in the operand stack
8
- *
9
- * Some design decision note:
10
- * I opted for composition over inheritance.
11
- * This may look like a good case for composition but my philosophy is if they both are equally
12
- * viable, always prefer composition. It will help in the long run if we do refactoring
13
- */
14
- export class VisitedCommand extends CommandLogicNode {
15
- visitedCountCommand = new VisitedCountCommand();
16
- doOperation = (currentOperands, nodeArgs) => {
17
- this.visitedCountCommand.process(nodeArgs);
18
- const value = Number(nodeArgs.initState.operandStack.pop());
19
- if (isNaN(value) || value === 0) {
20
- nodeArgs.initState.operandStack.push("false");
21
- }
22
- else {
23
- nodeArgs.initState.operandStack.push("true");
24
- }
25
- };
26
- getArgumentCount = () => {
27
- return 0; // let the child work; this is only a decorator
28
- };
29
- getToken = () => {
30
- return "#visited";
31
- };
32
- }
@@ -1,13 +0,0 @@
1
- import { CommandLogicNode } from "./CommandLogicNode";
2
- import type { ExpressionArguments } from "../ExpressionArguments";
3
- /**
4
- * Used for command like
5
- * visited_count("node name here");
6
- *
7
- * Pushed a number in the operand stack
8
- */
9
- export declare class VisitedCountCommand extends CommandLogicNode {
10
- doOperation: (currentOperands: string[], nodeArgs: ExpressionArguments) => void;
11
- getArgumentCount: () => number;
12
- getToken: () => string;
13
- }
@@ -1,25 +0,0 @@
1
- import { CommandLogicNode } from "./CommandLogicNode";
2
- import { dialogVariableStore } from "../../../DialogManagerStore";
3
- /**
4
- * Used for command like
5
- * visited_count("node name here");
6
- *
7
- * Pushed a number in the operand stack
8
- */
9
- export class VisitedCountCommand extends CommandLogicNode {
10
- doOperation = (currentOperands, nodeArgs) => {
11
- const value = Number(dialogVariableStore.getItem(`+${currentOperands[0]}`));
12
- if (isNaN(value) || value === 0) {
13
- nodeArgs.initState.operandStack.push("0");
14
- }
15
- else {
16
- nodeArgs.initState.operandStack.push(String(value));
17
- }
18
- };
19
- getArgumentCount = () => {
20
- return 1;
21
- };
22
- getToken = () => {
23
- return "#visited_count";
24
- };
25
- }
@@ -1,7 +0,0 @@
1
- import { OperatorLogicNode, OperatorType } from "./OperatorLogicNode";
2
- import type { ExpressionArguments } from "../ExpressionArguments";
3
- export declare class AndOperator extends OperatorLogicNode {
4
- doOperation: (currentOperands: string[], nodeArgs: ExpressionArguments) => void;
5
- getOperatorType: () => OperatorType;
6
- getToken: () => string;
7
- }
@@ -1,15 +0,0 @@
1
- import { OperatorLogicNode, OperatorType } from "./OperatorLogicNode";
2
- import { btreeUtils } from "../../core/BTreeUtils";
3
- export class AndOperator extends OperatorLogicNode {
4
- doOperation = (currentOperands, nodeArgs) => {
5
- // todo: evaluate possible weird cases when doing number comparisons
6
- // ISSUE #88 https://github.com/TurnipXenon/pineapple/issues/88
7
- nodeArgs.initState.operandStack.push(String(btreeUtils.isTrue(currentOperands[0]) && btreeUtils.isTrue(currentOperands[1])));
8
- };
9
- getOperatorType = () => {
10
- return OperatorType.Binary;
11
- };
12
- getToken = () => {
13
- return "&&";
14
- };
15
- }
@@ -1,7 +0,0 @@
1
- import { OperatorLogicNode, OperatorType } from "./OperatorLogicNode";
2
- import type { ExpressionArguments } from "../ExpressionArguments";
3
- export declare class EqualityOperator extends OperatorLogicNode {
4
- doOperation: (currentOperands: string[], nodeArgs: ExpressionArguments) => void;
5
- getOperatorType: () => OperatorType;
6
- getToken: () => string;
7
- }
@@ -1,14 +0,0 @@
1
- import { OperatorLogicNode, OperatorType } from "./OperatorLogicNode";
2
- export class EqualityOperator extends OperatorLogicNode {
3
- doOperation = (currentOperands, nodeArgs) => {
4
- // todo: evaluate possible weird cases when doing number comparisons
5
- // ISSUE #88 https://github.com/TurnipXenon/pineapple/issues/88
6
- nodeArgs.initState.operandStack.push(String(currentOperands[0] === currentOperands[1]));
7
- };
8
- getOperatorType = () => {
9
- return OperatorType.Binary;
10
- };
11
- getToken = () => {
12
- return "==";
13
- };
14
- }
@@ -1,7 +0,0 @@
1
- import { OperatorLogicNode, OperatorType } from "./OperatorLogicNode";
2
- import type { ExpressionArguments } from "../ExpressionArguments";
3
- export declare class GreaterThanEqualOperator extends OperatorLogicNode {
4
- doOperation: (currentOperands: string[], nodeArgs: ExpressionArguments) => void;
5
- getOperatorType: () => OperatorType;
6
- getToken: () => string;
7
- }
@@ -1,12 +0,0 @@
1
- import { OperatorLogicNode, OperatorType } from "./OperatorLogicNode";
2
- export class GreaterThanEqualOperator extends OperatorLogicNode {
3
- doOperation = (currentOperands, nodeArgs) => {
4
- nodeArgs.initState.operandStack.push(String(Number(currentOperands[0]) >= Number(currentOperands[1])));
5
- };
6
- getOperatorType = () => {
7
- return OperatorType.Binary;
8
- };
9
- getToken = () => {
10
- return ">=";
11
- };
12
- }
@@ -1,7 +0,0 @@
1
- import { OperatorLogicNode, OperatorType } from "./OperatorLogicNode";
2
- import type { ExpressionArguments } from "../ExpressionArguments";
3
- export declare class GreaterThanOperator extends OperatorLogicNode {
4
- doOperation: (currentOperands: string[], nodeArgs: ExpressionArguments) => void;
5
- getOperatorType: () => OperatorType;
6
- getToken: () => string;
7
- }