inkcpp_rb 0.1.0

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 (273) hide show
  1. checksums.yaml +7 -0
  2. data/.ruby-version +1 -0
  3. data/CHANGELOG.md +1 -0
  4. data/Gemfile +10 -0
  5. data/Gemfile.lock +84 -0
  6. data/LICENSE +7 -0
  7. data/README.md +3 -0
  8. data/Rakefile +16 -0
  9. data/bin/console +15 -0
  10. data/bin/setup +10 -0
  11. data/bin/tapioca +29 -0
  12. data/ext/inkcpp_rb/extconf.rb +19 -0
  13. data/ext/inkcpp_rb/inkcpp/.clang-format +99 -0
  14. data/ext/inkcpp_rb/inkcpp/.github/FUNDING.yml +1 -0
  15. data/ext/inkcpp_rb/inkcpp/.github/workflows/build.yml +344 -0
  16. data/ext/inkcpp_rb/inkcpp/.github/workflows/release.yml +49 -0
  17. data/ext/inkcpp_rb/inkcpp/.gitignore +25 -0
  18. data/ext/inkcpp_rb/inkcpp/.gitmodules +9 -0
  19. data/ext/inkcpp_rb/inkcpp/CMakeLists.txt +170 -0
  20. data/ext/inkcpp_rb/inkcpp/CODE_OF_CONDUCT.md +76 -0
  21. data/ext/inkcpp_rb/inkcpp/CONTRIBUTING.md +55 -0
  22. data/ext/inkcpp_rb/inkcpp/Config.cmake.in +2 -0
  23. data/ext/inkcpp_rb/inkcpp/Documentation/cmake_example/CMakeLists.txt +13 -0
  24. data/ext/inkcpp_rb/inkcpp/Documentation/cmake_example/main.c +38 -0
  25. data/ext/inkcpp_rb/inkcpp/Documentation/cmake_example/main.cpp +40 -0
  26. data/ext/inkcpp_rb/inkcpp/Documentation/cmake_example/test.ink +8 -0
  27. data/ext/inkcpp_rb/inkcpp/Documentation/cmake_example/test.ink.json +1 -0
  28. data/ext/inkcpp_rb/inkcpp/Documentation/cmake_example.zip +0 -0
  29. data/ext/inkcpp_rb/inkcpp/Documentation/unreal/InkCPP_DEMO.zip +0 -0
  30. data/ext/inkcpp_rb/inkcpp/Documentation/unreal/imgs/CreateThread.png +0 -0
  31. data/ext/inkcpp_rb/inkcpp/Documentation/unreal/imgs/HandleChoice.png +0 -0
  32. data/ext/inkcpp_rb/inkcpp/Documentation/unreal/imgs/ListElementOf.png +0 -0
  33. data/ext/inkcpp_rb/inkcpp/Documentation/unreal/imgs/MinimalRuntime.png +0 -0
  34. data/ext/inkcpp_rb/inkcpp/Documentation/unreal/imgs/MinimalThread.png +0 -0
  35. data/ext/inkcpp_rb/inkcpp/Documentation/unreal/imgs/ObseverChange.png +0 -0
  36. data/ext/inkcpp_rb/inkcpp/Documentation/unreal/imgs/TagListGetValue.png +0 -0
  37. data/ext/inkcpp_rb/inkcpp/Documentation/unreal/imgs/YieldResume.png +0 -0
  38. data/ext/inkcpp_rb/inkcpp/Doxyfile +2825 -0
  39. data/ext/inkcpp_rb/inkcpp/LICENSE.txt +22 -0
  40. data/ext/inkcpp_rb/inkcpp/Minimal.runsettings +8 -0
  41. data/ext/inkcpp_rb/inkcpp/README.md +192 -0
  42. data/ext/inkcpp_rb/inkcpp/inkcpp/CMakeLists.txt +67 -0
  43. data/ext/inkcpp_rb/inkcpp/inkcpp/array.h +481 -0
  44. data/ext/inkcpp_rb/inkcpp/inkcpp/avl_array.h +833 -0
  45. data/ext/inkcpp_rb/inkcpp/inkcpp/casting.h +93 -0
  46. data/ext/inkcpp_rb/inkcpp/inkcpp/choice.cpp +54 -0
  47. data/ext/inkcpp_rb/inkcpp/inkcpp/collections/restorable.cpp +124 -0
  48. data/ext/inkcpp_rb/inkcpp/inkcpp/collections/restorable.h +406 -0
  49. data/ext/inkcpp_rb/inkcpp/inkcpp/container_operations.cpp +52 -0
  50. data/ext/inkcpp_rb/inkcpp/inkcpp/container_operations.h +34 -0
  51. data/ext/inkcpp_rb/inkcpp/inkcpp/executioner.h +179 -0
  52. data/ext/inkcpp_rb/inkcpp/inkcpp/functional.cpp +86 -0
  53. data/ext/inkcpp_rb/inkcpp/inkcpp/functions.cpp +54 -0
  54. data/ext/inkcpp_rb/inkcpp/inkcpp/functions.h +40 -0
  55. data/ext/inkcpp_rb/inkcpp/inkcpp/globals_impl.cpp +289 -0
  56. data/ext/inkcpp_rb/inkcpp/inkcpp/globals_impl.h +149 -0
  57. data/ext/inkcpp_rb/inkcpp/inkcpp/header.cpp +44 -0
  58. data/ext/inkcpp_rb/inkcpp/inkcpp/include/choice.h +106 -0
  59. data/ext/inkcpp_rb/inkcpp/inkcpp/include/functional.h +327 -0
  60. data/ext/inkcpp_rb/inkcpp/inkcpp/include/globals.h +196 -0
  61. data/ext/inkcpp_rb/inkcpp/inkcpp/include/list.h +187 -0
  62. data/ext/inkcpp_rb/inkcpp/inkcpp/include/runner.h +291 -0
  63. data/ext/inkcpp_rb/inkcpp/inkcpp/include/snapshot.h +61 -0
  64. data/ext/inkcpp_rb/inkcpp/inkcpp/include/story.h +219 -0
  65. data/ext/inkcpp_rb/inkcpp/inkcpp/include/story_ptr.h +233 -0
  66. data/ext/inkcpp_rb/inkcpp/inkcpp/include/traits.h +270 -0
  67. data/ext/inkcpp_rb/inkcpp/inkcpp/include/types.h +169 -0
  68. data/ext/inkcpp_rb/inkcpp/inkcpp/list_impl.cpp +79 -0
  69. data/ext/inkcpp_rb/inkcpp/inkcpp/list_impl.h +39 -0
  70. data/ext/inkcpp_rb/inkcpp/inkcpp/list_operations.cpp +276 -0
  71. data/ext/inkcpp_rb/inkcpp/inkcpp/list_operations.h +356 -0
  72. data/ext/inkcpp_rb/inkcpp/inkcpp/list_table.cpp +841 -0
  73. data/ext/inkcpp_rb/inkcpp/inkcpp/list_table.h +450 -0
  74. data/ext/inkcpp_rb/inkcpp/inkcpp/numeric_operations.cpp +40 -0
  75. data/ext/inkcpp_rb/inkcpp/inkcpp/numeric_operations.h +529 -0
  76. data/ext/inkcpp_rb/inkcpp/inkcpp/operation_bases.h +164 -0
  77. data/ext/inkcpp_rb/inkcpp/inkcpp/operations.h +100 -0
  78. data/ext/inkcpp_rb/inkcpp/inkcpp/output.cpp +528 -0
  79. data/ext/inkcpp_rb/inkcpp/inkcpp/output.h +153 -0
  80. data/ext/inkcpp_rb/inkcpp/inkcpp/platform.h +22 -0
  81. data/ext/inkcpp_rb/inkcpp/inkcpp/random.h +38 -0
  82. data/ext/inkcpp_rb/inkcpp/inkcpp/runner_impl.cpp +1396 -0
  83. data/ext/inkcpp_rb/inkcpp/inkcpp/runner_impl.h +336 -0
  84. data/ext/inkcpp_rb/inkcpp/inkcpp/simple_restorable_stack.h +335 -0
  85. data/ext/inkcpp_rb/inkcpp/inkcpp/snapshot_impl.cpp +182 -0
  86. data/ext/inkcpp_rb/inkcpp/inkcpp/snapshot_impl.h +91 -0
  87. data/ext/inkcpp_rb/inkcpp/inkcpp/snapshot_interface.h +57 -0
  88. data/ext/inkcpp_rb/inkcpp/inkcpp/stack.cpp +618 -0
  89. data/ext/inkcpp_rb/inkcpp/inkcpp/stack.h +243 -0
  90. data/ext/inkcpp_rb/inkcpp/inkcpp/story_impl.cpp +361 -0
  91. data/ext/inkcpp_rb/inkcpp/inkcpp/story_impl.h +92 -0
  92. data/ext/inkcpp_rb/inkcpp/inkcpp/story_ptr.cpp +75 -0
  93. data/ext/inkcpp_rb/inkcpp/inkcpp/string_operations.cpp +125 -0
  94. data/ext/inkcpp_rb/inkcpp/inkcpp/string_operations.h +67 -0
  95. data/ext/inkcpp_rb/inkcpp/inkcpp/string_table.cpp +149 -0
  96. data/ext/inkcpp_rb/inkcpp/inkcpp/string_table.h +47 -0
  97. data/ext/inkcpp_rb/inkcpp/inkcpp/string_utils.h +207 -0
  98. data/ext/inkcpp_rb/inkcpp/inkcpp/system.cpp +39 -0
  99. data/ext/inkcpp_rb/inkcpp/inkcpp/tuple.hpp +151 -0
  100. data/ext/inkcpp_rb/inkcpp/inkcpp/value.cpp +279 -0
  101. data/ext/inkcpp_rb/inkcpp/inkcpp/value.h +666 -0
  102. data/ext/inkcpp_rb/inkcpp/inkcpp_c/CMakeLists.txt +62 -0
  103. data/ext/inkcpp_rb/inkcpp/inkcpp_c/include/inkcpp.h +393 -0
  104. data/ext/inkcpp_rb/inkcpp/inkcpp_c/inkcpp.cpp +344 -0
  105. data/ext/inkcpp_rb/inkcpp/inkcpp_c/inkcpp_c.pc.in +10 -0
  106. data/ext/inkcpp_rb/inkcpp/inkcpp_c/tests/ExternalFunction.c +56 -0
  107. data/ext/inkcpp_rb/inkcpp/inkcpp_c/tests/Globals.c +98 -0
  108. data/ext/inkcpp_rb/inkcpp/inkcpp_c/tests/Lists.c +73 -0
  109. data/ext/inkcpp_rb/inkcpp/inkcpp_c/tests/Observer.c +36 -0
  110. data/ext/inkcpp_rb/inkcpp/inkcpp_c/tests/Snapshot.c +65 -0
  111. data/ext/inkcpp_rb/inkcpp/inkcpp_cl/CMakeLists.txt +49 -0
  112. data/ext/inkcpp_rb/inkcpp/inkcpp_cl/inkcpp_cl.cpp +215 -0
  113. data/ext/inkcpp_rb/inkcpp/inkcpp_cl/test.cpp +209 -0
  114. data/ext/inkcpp_rb/inkcpp/inkcpp_cl/test.h +8 -0
  115. data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/CMakeLists.txt +37 -0
  116. data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/binary_emitter.cpp +446 -0
  117. data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/binary_emitter.h +70 -0
  118. data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/binary_stream.cpp +166 -0
  119. data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/binary_stream.h +79 -0
  120. data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/command.cpp +107 -0
  121. data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/compiler.cpp +96 -0
  122. data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/emitter.cpp +62 -0
  123. data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/emitter.h +104 -0
  124. data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/include/compilation_results.h +22 -0
  125. data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/include/compiler.h +44 -0
  126. data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/json.hpp +24596 -0
  127. data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/json_compiler.cpp +411 -0
  128. data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/json_compiler.h +62 -0
  129. data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/list_data.cpp +47 -0
  130. data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/list_data.h +70 -0
  131. data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/reporter.cpp +107 -0
  132. data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/reporter.h +55 -0
  133. data/ext/inkcpp_rb/inkcpp/inkcpp_py/CMakeLists.txt +19 -0
  134. data/ext/inkcpp_rb/inkcpp/inkcpp_py/example.py +78 -0
  135. data/ext/inkcpp_rb/inkcpp/inkcpp_py/src/module.cpp +317 -0
  136. data/ext/inkcpp_rb/inkcpp/inkcpp_py/tests/conftest.py +53 -0
  137. data/ext/inkcpp_rb/inkcpp/inkcpp_py/tests/test_ExternalFunctions.py +35 -0
  138. data/ext/inkcpp_rb/inkcpp/inkcpp_py/tests/test_Globals.py +40 -0
  139. data/ext/inkcpp_rb/inkcpp/inkcpp_py/tests/test_Lists.py +43 -0
  140. data/ext/inkcpp_rb/inkcpp/inkcpp_py/tests/test_Observer.py +27 -0
  141. data/ext/inkcpp_rb/inkcpp/inkcpp_py/tests/test_Snapshot.py +57 -0
  142. data/ext/inkcpp_rb/inkcpp/inkcpp_py/unreal_example.ink +71 -0
  143. data/ext/inkcpp_rb/inkcpp/inkcpp_test/Array.cpp +115 -0
  144. data/ext/inkcpp_rb/inkcpp/inkcpp_test/CMakeLists.txt +117 -0
  145. data/ext/inkcpp_rb/inkcpp/inkcpp_test/Callstack.cpp +392 -0
  146. data/ext/inkcpp_rb/inkcpp/inkcpp_test/EmptyStringForDivert.cpp +36 -0
  147. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ExternalFunctionsExecuteProperly.cpp +34 -0
  148. data/ext/inkcpp_rb/inkcpp/inkcpp_test/FallbackFunction.cpp +77 -0
  149. data/ext/inkcpp_rb/inkcpp/inkcpp_test/Globals.cpp +73 -0
  150. data/ext/inkcpp_rb/inkcpp/inkcpp_test/InkyJson.cpp +34 -0
  151. data/ext/inkcpp_rb/inkcpp/inkcpp_test/LabelCondition.cpp +60 -0
  152. data/ext/inkcpp_rb/inkcpp/inkcpp_test/Lists.cpp +144 -0
  153. data/ext/inkcpp_rb/inkcpp/inkcpp_test/LookaheadSafe.cpp +46 -0
  154. data/ext/inkcpp_rb/inkcpp/inkcpp_test/Main.cpp +7 -0
  155. data/ext/inkcpp_rb/inkcpp/inkcpp_test/MoveTo.cpp +95 -0
  156. data/ext/inkcpp_rb/inkcpp/inkcpp_test/NewLines.cpp +76 -0
  157. data/ext/inkcpp_rb/inkcpp/inkcpp_test/NoEarlyTags.cpp +33 -0
  158. data/ext/inkcpp_rb/inkcpp/inkcpp_test/Observer.cpp +245 -0
  159. data/ext/inkcpp_rb/inkcpp/inkcpp_test/Pointer.cpp +191 -0
  160. data/ext/inkcpp_rb/inkcpp/inkcpp_test/Restorable.cpp +294 -0
  161. data/ext/inkcpp_rb/inkcpp/inkcpp_test/SpaceAfterBracketChoice.cpp +45 -0
  162. data/ext/inkcpp_rb/inkcpp/inkcpp_test/Stack.cpp +224 -0
  163. data/ext/inkcpp_rb/inkcpp/inkcpp_test/Tags.cpp +131 -0
  164. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ThirdTierChoiceAfterBrackets.cpp +38 -0
  165. data/ext/inkcpp_rb/inkcpp/inkcpp_test/UTF8.cpp +56 -0
  166. data/ext/inkcpp_rb/inkcpp/inkcpp_test/Value.cpp +210 -0
  167. data/ext/inkcpp_rb/inkcpp/inkcpp_test/catch.hpp +17970 -0
  168. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/AHF.ink +7 -0
  169. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/ChoiceBracketStory.ink +7 -0
  170. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/EmptyStringForDivert.ink +13 -0
  171. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/ExternalFunctionsExecuteProperly.ink +11 -0
  172. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/FallBack.ink +15 -0
  173. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/GlobalStory.ink +9 -0
  174. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/LabelConditionStory.ink +5 -0
  175. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/LinesStory.ink +42 -0
  176. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/ListLogicStory.ink +40 -0
  177. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/ListStory.ink +8 -0
  178. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/LookaheadSafe.ink +14 -0
  179. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/MoveTo.ink +36 -0
  180. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/NoEarlyTags.ink +19 -0
  181. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/ObserverStory.ink +8 -0
  182. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/SimpleStoryFlow.ink +65 -0
  183. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/TagsStory.ink +22 -0
  184. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/TheIntercept.ink +1686 -0
  185. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/ThirdTierChoiceAfterBracketsStory.ink +13 -0
  186. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/UTF-8-demo.txt +212 -0
  187. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/UTF8Story.ink +218 -0
  188. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/simple-1.1.1-inklecate.json +154 -0
  189. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/simple-1.1.1-inky.json +160 -0
  190. data/ext/inkcpp_rb/inkcpp/notes/ArchitectureNotes.md +54 -0
  191. data/ext/inkcpp_rb/inkcpp/notes/ListNotes.md +69 -0
  192. data/ext/inkcpp_rb/inkcpp/notes/OperationNotes.md +35 -0
  193. data/ext/inkcpp_rb/inkcpp/notes/TagsNotes.md +24 -0
  194. data/ext/inkcpp_rb/inkcpp/notes/WhitespaceNotes.md +28 -0
  195. data/ext/inkcpp_rb/inkcpp/proofing/README.md +3 -0
  196. data/ext/inkcpp_rb/inkcpp/proofing/inkcpp_runtime_driver +12 -0
  197. data/ext/inkcpp_rb/inkcpp/pyproject.toml +63 -0
  198. data/ext/inkcpp_rb/inkcpp/setup.py +166 -0
  199. data/ext/inkcpp_rb/inkcpp/shared/CMakeLists.txt +14 -0
  200. data/ext/inkcpp_rb/inkcpp/shared/private/command.h +172 -0
  201. data/ext/inkcpp_rb/inkcpp/shared/private/header.h +46 -0
  202. data/ext/inkcpp_rb/inkcpp/shared/public/config.h +53 -0
  203. data/ext/inkcpp_rb/inkcpp/shared/public/system.h +307 -0
  204. data/ext/inkcpp_rb/inkcpp/shared/public/version.h +14 -0
  205. data/ext/inkcpp_rb/inkcpp/tests/TestAllSequenceTypes.ink +59 -0
  206. data/ext/inkcpp_rb/inkcpp/tests/TestArithmetic.ink +17 -0
  207. data/ext/inkcpp_rb/inkcpp/tests/TestBasicStringLiterals.ink +8 -0
  208. data/ext/inkcpp_rb/inkcpp/tests/TestBasicTunnel.ink +10 -0
  209. data/ext/inkcpp_rb/inkcpp/tests/TestBlanksInInlineSequences.ink +51 -0
  210. data/ext/inkcpp_rb/inkcpp/tests/TestCallStackEvaluation.ink +15 -0
  211. data/ext/inkcpp_rb/inkcpp/tests/TestChoiceCount.ink +15 -0
  212. data/ext/inkcpp_rb/inkcpp/tests/TestChoiceDivertsToDone.ink +6 -0
  213. data/ext/inkcpp_rb/inkcpp/tests/TestChoiceWithBracketsOnly.ink +9 -0
  214. data/ext/inkcpp_rb/inkcpp/tests/TestCompareDivertTargets.ink +26 -0
  215. data/ext/inkcpp_rb/inkcpp/tests/TestComplexTunnels.ink +22 -0
  216. data/ext/inkcpp_rb/inkcpp/tests/TestConditionalChoiceInWeave.ink +19 -0
  217. data/ext/inkcpp_rb/inkcpp/tests/TestTunnelOnwardsAfterTunnel.ink +17 -0
  218. data/ext/inkcpp_rb/inkcpp/unreal/CMakeLists.txt +51 -0
  219. data/ext/inkcpp_rb/inkcpp/unreal/UE_example.ink +92 -0
  220. data/ext/inkcpp_rb/inkcpp/unreal/blueprint_filter.js +377 -0
  221. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Resources/Icon128.png +0 -0
  222. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Private/InkAsset.cpp +47 -0
  223. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Private/InkChoice.cpp +40 -0
  224. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Private/InkList.cpp +86 -0
  225. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Private/InkRuntime.cpp +265 -0
  226. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Private/InkThread.cpp +239 -0
  227. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Private/InkVar.cpp +143 -0
  228. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Private/TagList.cpp +95 -0
  229. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Private/inkcpp.cpp +13 -0
  230. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Public/InkAsset.h +50 -0
  231. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Public/InkChoice.h +58 -0
  232. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Public/InkDelegates.h +139 -0
  233. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Public/InkList.h +102 -0
  234. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Public/InkRuntime.h +177 -0
  235. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Public/InkSnapshot.h +30 -0
  236. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Public/InkThread.h +215 -0
  237. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Public/InkVar.h +245 -0
  238. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Public/TagList.h +77 -0
  239. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Public/inkcpp.h +217 -0
  240. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/inkcpp.Build.cs +62 -0
  241. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp_editor/Private/InkAssetFactory.cpp +237 -0
  242. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp_editor/Private/InkAssetFactory.h +43 -0
  243. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp_editor/Private/inkcpp_editor.cpp +13 -0
  244. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp_editor/Private/inklecate_cmd.cpp.in +24 -0
  245. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp_editor/Public/inkcpp_editor.h +9 -0
  246. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp_editor/inkcpp_editor.Build.cs +61 -0
  247. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/inkcpp.uplugin +44 -0
  248. data/ext/inkcpp_rb/inkcpp/unreal/render.css +1 -0
  249. data/ext/inkcpp_rb/inkcpp_rb.cpp +321 -0
  250. data/inkcpp_rb.gemspec +54 -0
  251. data/rbi/inkcpp_rb.rbi +211 -0
  252. data/sorbet/config +4 -0
  253. data/sorbet/rbi/annotations/.gitattributes +1 -0
  254. data/sorbet/rbi/annotations/minitest.rbi +119 -0
  255. data/sorbet/rbi/gems/.gitattributes +1 -0
  256. data/sorbet/rbi/gems/benchmark@0.4.0.rbi +618 -0
  257. data/sorbet/rbi/gems/erubi@1.13.1.rbi +155 -0
  258. data/sorbet/rbi/gems/minitest@5.25.4.rbi +1547 -0
  259. data/sorbet/rbi/gems/netrc@0.11.0.rbi +159 -0
  260. data/sorbet/rbi/gems/parallel@1.26.3.rbi +291 -0
  261. data/sorbet/rbi/gems/prism@1.3.0.rbi +40040 -0
  262. data/sorbet/rbi/gems/rake-compiler@1.2.8.rbi +9 -0
  263. data/sorbet/rbi/gems/rake@13.2.1.rbi +3033 -0
  264. data/sorbet/rbi/gems/rbi@0.2.2.rbi +4527 -0
  265. data/sorbet/rbi/gems/rice@4.3.3.rbi +44 -0
  266. data/sorbet/rbi/gems/spoom@1.5.0.rbi +4932 -0
  267. data/sorbet/rbi/gems/tapioca@0.16.7.rbi +3611 -0
  268. data/sorbet/rbi/gems/thor@1.3.2.rbi +4378 -0
  269. data/sorbet/rbi/gems/yard-sorbet@0.9.0.rbi +435 -0
  270. data/sorbet/rbi/gems/yard@0.9.37.rbi +18379 -0
  271. data/sorbet/tapioca/config.yml +13 -0
  272. data/sorbet/tapioca/require.rb +4 -0
  273. metadata +400 -0
@@ -0,0 +1,344 @@
1
+ #include "inkcpp.h"
2
+ #include "list.h"
3
+ #include "system.h"
4
+ #include "types.h"
5
+
6
+ #include <cstring>
7
+
8
+ #include <story.h>
9
+ #include <snapshot.h>
10
+ #include <globals.h>
11
+ #include <runner.h>
12
+ #include <choice.h>
13
+ #include <compiler.h>
14
+
15
+ using namespace ink::runtime;
16
+
17
+ InkValue inkvar_to_c(value& val)
18
+ {
19
+ switch (val.type) {
20
+ case value::Type::Bool:
21
+ return InkValue{
22
+ .bool_v = val.get<value::Type::Bool>(),
23
+ .type = InkValue::ValueTypeBool,
24
+ };
25
+ case value::Type::Uint32:
26
+ return InkValue{
27
+ .uint32_v = val.get<value::Type::Uint32>(),
28
+ .type = InkValue::ValueTypeUint32,
29
+ };
30
+ case value::Type::Int32:
31
+ return InkValue{
32
+ .int32_v = val.get<value::Type::Int32>(),
33
+ .type = InkValue::ValueTypeInt32,
34
+ };
35
+ case value::Type::String:
36
+ return InkValue{
37
+ .string_v = val.get<value::Type::String>(),
38
+ .type = InkValue::ValueTypeString,
39
+ };
40
+ case value::Type::Float:
41
+ return InkValue{
42
+ .float_v = val.get<value::Type::Float>(),
43
+ .type = InkValue::ValueTypeFloat,
44
+ };
45
+ case value::Type::List:
46
+ return InkValue{
47
+ .list_v = reinterpret_cast<HInkList*>(val.get<value::Type::List>()),
48
+ .type = InkValue::ValueTypeList,
49
+ };
50
+ }
51
+ inkFail("Undefined value type can not be translated");
52
+ return InkValue{};
53
+ }
54
+
55
+ value inkvar_from_c(InkValue& val)
56
+ {
57
+ switch (val.type) {
58
+ case InkValue::ValueTypeBool: return value(val.bool_v);
59
+ case InkValue::ValueTypeUint32: return value(val.uint32_v);
60
+ case InkValue::ValueTypeInt32: return value(val.int32_v);
61
+ case InkValue::ValueTypeString: return value(val.string_v);
62
+ case InkValue::ValueTypeFloat: return value(val.float_v);
63
+ case InkValue::ValueTypeList: return value(reinterpret_cast<list_interface*>(val.list_v));
64
+ case InkValue::ValueTypeNone: break;
65
+ }
66
+ inkFail("Undefined value type can not be translated");
67
+ return value{};
68
+ }
69
+
70
+ extern "C" {
71
+ HInkSnapshot* ink_snapshot_from_file(const char* filename)
72
+ {
73
+ return reinterpret_cast<HInkSnapshot*>(snapshot::from_file(filename));
74
+ }
75
+
76
+ int ink_snapshot_num_runners(const HInkSnapshot* self)
77
+ {
78
+ return reinterpret_cast<const snapshot*>(self)->num_runners();
79
+ }
80
+
81
+ void ink_snapshot_write_to_file(const HInkSnapshot* self, const char* filename)
82
+ {
83
+ reinterpret_cast<const snapshot*>(self)->write_to_file(filename);
84
+ }
85
+
86
+ const char* ink_choice_text(const HInkChoice* self)
87
+ {
88
+ return reinterpret_cast<const choice*>(self)->text();
89
+ }
90
+
91
+ int ink_choice_num_tags(const HInkChoice* self)
92
+ {
93
+ return reinterpret_cast<const choice*>(self)->num_tags();
94
+ }
95
+
96
+ const char* ink_choice_get_tag(const HInkChoice* self, int tag_id)
97
+ {
98
+ return reinterpret_cast<const choice*>(self)->get_tag(tag_id);
99
+ }
100
+
101
+ void ink_list_add(HInkList* self, const char* flag_name)
102
+ {
103
+ reinterpret_cast<list>(self)->add(flag_name);
104
+ }
105
+
106
+ void ink_list_remove(HInkList* self, const char* flag_name)
107
+ {
108
+ reinterpret_cast<list>(self)->remove(flag_name);
109
+ }
110
+
111
+ int ink_list_contains(const HInkList* self, const char* flag_name)
112
+ {
113
+ return reinterpret_cast<const list_interface*>(self)->contains(flag_name);
114
+ }
115
+
116
+ int ink_list_flags(const HInkList* self, InkListIter* iter)
117
+ {
118
+ list_interface::iterator itr = reinterpret_cast<const list_interface*>(self)->begin();
119
+ *iter = InkListIter{
120
+ ._data = &itr._list,
121
+ ._i = itr._i,
122
+ ._single_list = itr._one_list_iterator,
123
+ .flag_name = itr._flag_name,
124
+ .list_name = itr._list_name,
125
+ };
126
+ return itr != reinterpret_cast<const list_interface*>(self)->end();
127
+ }
128
+
129
+ int ink_list_flags_from(const HInkList* self, const char* list_name, InkListIter* iter)
130
+ {
131
+ list_interface::iterator itr = reinterpret_cast<const list_interface*>(self)->begin(list_name);
132
+ *iter = InkListIter{
133
+ ._data = &itr._list,
134
+ ._i = itr._i,
135
+ ._single_list = itr._one_list_iterator,
136
+ .flag_name = itr._flag_name,
137
+ .list_name = itr._list_name,
138
+ };
139
+ return itr != reinterpret_cast<const list_interface*>(self)->end();
140
+ }
141
+
142
+ int ink_list_iter_next(InkListIter* self)
143
+ {
144
+ list_interface::iterator itr(
145
+ self->flag_name, *reinterpret_cast<const list_interface*>(self->_data), self->_i,
146
+ self->_single_list
147
+ );
148
+ ++itr;
149
+ self->flag_name = itr._flag_name;
150
+ self->list_name = itr._list_name;
151
+ self->_i = itr._i;
152
+ return itr != itr._list.end();
153
+ }
154
+
155
+ void ink_runner_delete(HInkRunner* self) { delete reinterpret_cast<const runner*>(self); }
156
+
157
+ HInkSnapshot* ink_runner_create_snapshot(const HInkRunner* self)
158
+ {
159
+ return reinterpret_cast<HInkSnapshot*>(
160
+ reinterpret_cast<const runner*>(self)->get()->create_snapshot()
161
+ );
162
+ }
163
+
164
+ int ink_runner_can_continue(const HInkRunner* self)
165
+ {
166
+ return reinterpret_cast<const runner*>(self)->get()->can_continue();
167
+ }
168
+
169
+ const char* ink_runner_get_line(HInkRunner* self)
170
+ {
171
+ return reinterpret_cast<runner*>(self)->get()->getline_alloc();
172
+ }
173
+
174
+ int ink_runner_get_num_tags(const HInkRunner* self)
175
+ {
176
+ return reinterpret_cast<const runner*>(self)->get()->num_tags();
177
+ }
178
+
179
+ const char* ink_runner_tag(const HInkRunner* self, int tag_id)
180
+ {
181
+ return reinterpret_cast<const runner*>(self)->get()->get_tag(tag_id);
182
+ }
183
+
184
+ int ink_runner_num_choices(const HInkRunner* self)
185
+ {
186
+ return reinterpret_cast<const runner*>(self)->get()->num_choices();
187
+ }
188
+
189
+ const HInkChoice* ink_runner_get_choice(const HInkRunner* self, int choice_id)
190
+ {
191
+ return reinterpret_cast<const HInkChoice*>(
192
+ reinterpret_cast<const runner*>(self)->get()->get_choice(choice_id)
193
+ );
194
+ }
195
+
196
+ void ink_runner_choose(HInkRunner* self, int choice_id)
197
+ {
198
+ return reinterpret_cast<runner*>(self)->get()->choose(choice_id);
199
+ }
200
+
201
+ void ink_runner_bind_void(
202
+ HInkRunner* self, const char* function_name, InkExternalFunctionVoid callback,
203
+ int lookaheadSafe
204
+ )
205
+ {
206
+ static_assert(sizeof(ink::runtime::value) >= sizeof(InkValue));
207
+ return reinterpret_cast<runner*>(self)->get()->bind(
208
+ function_name,
209
+ [callback](size_t len, const value* vals) {
210
+ InkValue* c_vals = reinterpret_cast<InkValue*>(const_cast<value*>(vals));
211
+ int c_len = len;
212
+ for (int i = 0; i < c_len; ++i) {
213
+ c_vals[i] = inkvar_to_c(const_cast<value&>(vals[i]));
214
+ }
215
+ callback(c_len, c_vals);
216
+ },
217
+ lookaheadSafe
218
+ );
219
+ }
220
+
221
+ void ink_runner_bind(
222
+ HInkRunner* self, const char* function_name, InkExternalFunction callback, int lookaheadSafe
223
+ )
224
+ {
225
+ static_assert(sizeof(ink::runtime::value) >= sizeof(InkValue));
226
+ return reinterpret_cast<runner*>(self)->get()->bind(
227
+ function_name,
228
+ [callback](size_t len, const value* vals) -> value {
229
+ InkValue* c_vals = reinterpret_cast<InkValue*>(const_cast<value*>(vals));
230
+ int c_len = len;
231
+ for (int i = 0; i < c_len; ++i) {
232
+ c_vals[i] = inkvar_to_c(const_cast<value&>(vals[i]));
233
+ }
234
+ InkValue res = callback(c_len, c_vals);
235
+ return inkvar_from_c(res);
236
+ },
237
+ lookaheadSafe
238
+ );
239
+ }
240
+
241
+ void ink_globals_delete(HInkGlobals* self) { delete reinterpret_cast<globals*>(self); }
242
+
243
+ HInkSnapshot* ink_globals_create_snapshot(const HInkGlobals* self)
244
+ {
245
+ return reinterpret_cast<HInkSnapshot*>(
246
+ reinterpret_cast<const globals*>(self)->get()->create_snapshot()
247
+ );
248
+ }
249
+
250
+ void ink_globals_observe(HInkGlobals* self, const char* variable_name, InkObserver observer)
251
+ {
252
+ reinterpret_cast<globals*>(self)->get()->observe(
253
+ variable_name,
254
+ [observer](value new_value, ink::optional<value> old_value) {
255
+ observer(
256
+ inkvar_to_c(new_value), old_value.has_value()
257
+ ? inkvar_to_c(old_value.value())
258
+ : InkValue{.type = InkValue::Type::ValueTypeNone}
259
+ );
260
+ }
261
+ );
262
+ }
263
+
264
+ InkValue ink_globals_get(const HInkGlobals* self, const char* variable_name)
265
+ {
266
+ ink::optional<value> o_val
267
+ = reinterpret_cast<const globals*>(self)->get()->get<value>(variable_name);
268
+ if (! o_val.has_value()) {
269
+ return InkValue{
270
+ .type = InkValue::ValueTypeNone,
271
+ };
272
+ } else {
273
+ return inkvar_to_c(o_val.value());
274
+ }
275
+ }
276
+
277
+ int ink_globals_set(HInkGlobals* self, const char* variable_name, InkValue val)
278
+ {
279
+ return reinterpret_cast<globals*>(self)->get()->set(variable_name, inkvar_from_c(val));
280
+ }
281
+
282
+ HInkStory* ink_story_from_file(const char* filename)
283
+ {
284
+ return reinterpret_cast<HInkStory*>(story::from_file(filename));
285
+ }
286
+
287
+ void ink_story_delete(HInkStory* self) { delete reinterpret_cast<story*>(self); }
288
+
289
+ HInkRunner* ink_story_new_runner(HInkStory* self, HInkGlobals* global_store)
290
+ {
291
+ runner* res = new runner(
292
+ global_store
293
+ ? reinterpret_cast<story*>(self)->new_runner(*reinterpret_cast<globals*>(global_store))
294
+ : reinterpret_cast<story*>(self)->new_runner()
295
+ );
296
+ return reinterpret_cast<HInkRunner*>(res);
297
+ }
298
+
299
+ HInkRunner* ink_story_new_runner_from_snapshot(
300
+ HInkStory* self, const HInkSnapshot* snapshot, HInkGlobals* global_store, int runner_id
301
+ )
302
+ {
303
+ const ink::runtime::snapshot& snap = *reinterpret_cast<const ink::runtime::snapshot*>(snapshot);
304
+ runner* res = new runner(
305
+ global_store
306
+ ? reinterpret_cast<story*>(self)->new_runner_from_snapshot(
307
+ snap, *reinterpret_cast<globals*>(global_store), runner_id
308
+ )
309
+ : reinterpret_cast<story*>(self)->new_runner_from_snapshot(snap, nullptr, runner_id)
310
+ );
311
+ return reinterpret_cast<HInkRunner*>(res);
312
+ }
313
+
314
+ HInkGlobals* ink_story_new_globals(HInkStory* self)
315
+ {
316
+ return reinterpret_cast<HInkGlobals*>(new globals(reinterpret_cast<story*>(self)->new_globals())
317
+ );
318
+ }
319
+
320
+ HInkGlobals* ink_story_new_globals_from_snapshot(HInkStory* self, const HInkSnapshot* snap)
321
+ {
322
+ return reinterpret_cast<HInkGlobals*>(
323
+ new globals(reinterpret_cast<story*>(self)->new_globals_from_snapshot(
324
+ *reinterpret_cast<const snapshot*>(snap)
325
+ ))
326
+ );
327
+ }
328
+
329
+ void ink_compile_json(const char* input_filename, const char* output_filename, const char** error)
330
+ {
331
+ ink::compiler::compilation_results result;
332
+ ink::compiler::run(input_filename, output_filename, &result);
333
+ if (error != nullptr && ! result.errors.empty() || ! result.warnings.empty()) {
334
+ std::string str{};
335
+ for (auto& warn : result.warnings) {
336
+ str += "WARNING: " + warn + '\n';
337
+ }
338
+ for (auto& err : result.errors) {
339
+ str += "ERROR: " + err + '\n';
340
+ }
341
+ *error = strdup(str.c_str());
342
+ }
343
+ }
344
+ }
@@ -0,0 +1,10 @@
1
+ prefix=@PREFIX@
2
+ exec_prefix=${prefix}
3
+ libdir=${prefix}/lib/ink
4
+ includedir=${prefix}/include
5
+
6
+ Name: inkcpp
7
+ Description: C Bindnigs for inkpp. @CMAKE_PROJECT_DESCRIPTION@
8
+ Version: @PROJECT_VERSION@
9
+ CFlags: -I${includedir}
10
+ Libs: -L${libdir} -linkcpp_c
@@ -0,0 +1,56 @@
1
+ #include <string.h>
2
+ #include <math.h>
3
+ #include <stdlib.h>
4
+ #include <stdio.h>
5
+
6
+ #include <inkcpp.h>
7
+
8
+ #undef NDEBUG
9
+ #include <assert.h>
10
+
11
+ int cnt_my_sqrt = 0;
12
+
13
+ InkValue my_sqrt(int argc, const InkValue argv[])
14
+ {
15
+ cnt_my_sqrt += 1;
16
+ assert(argc == 1);
17
+ InkValue v = argv[0];
18
+ switch (v.type) {
19
+ case ValueTypeFloat: v.float_v = sqrtf(v.float_v); break;
20
+ case ValueTypeInt32: v.int32_v = sqrt(v.int32_v); break;
21
+ case ValueTypeUint32: v.uint32_v = sqrtf(v.uint32_v); break;
22
+ default: assert(0);
23
+ }
24
+ return v;
25
+ }
26
+
27
+ int cnt_greeting = 0;
28
+
29
+ InkValue greeting(int argc, const InkValue argv[])
30
+ {
31
+ cnt_greeting += 1;
32
+ assert(argc == 0);
33
+ InkValue v;
34
+ v.type = ValueTypeString;
35
+ v.string_v = "Hohooh";
36
+ return v;
37
+ }
38
+
39
+ int main(int argc, const char* argv[])
40
+ {
41
+ HInkStory* story = ink_story_from_file(INK_TEST_RESOURCE_DIR "FallBack.bin");
42
+ HInkRunner* runner = ink_story_new_runner(story, NULL);
43
+ ink_runner_bind(runner, "greeting", greeting, 0);
44
+ ink_runner_bind(runner, "sqrt", my_sqrt, 0);
45
+
46
+ const char* res = ink_runner_get_line(runner);
47
+ assert(strcmp(res, "Hohooh ! A small demonstration of my power:\n") == 0);
48
+ assert(ink_runner_can_continue(runner));
49
+
50
+ assert(strcmp(ink_runner_get_line(runner), "Math 4 * 4 = 16, stunning i would say\n") == 0);
51
+ assert(ink_runner_can_continue(runner) == 0);
52
+
53
+ assert(cnt_my_sqrt == 2);
54
+ assert(cnt_greeting == 1);
55
+ return 0;
56
+ }
@@ -0,0 +1,98 @@
1
+ #include <string.h>
2
+ #include <math.h>
3
+ #include <stdlib.h>
4
+ #include <stdio.h>
5
+
6
+ #include <inkcpp.h>
7
+
8
+ #undef NDEBUG
9
+ #include <assert.h>
10
+
11
+ HInkStory* story = NULL;
12
+ HInkGlobals* store = NULL;
13
+ HInkRunner* thread = NULL;
14
+
15
+ void setup()
16
+ {
17
+ if (! story) {
18
+ story = ink_story_from_file(INK_TEST_RESOURCE_DIR "GlobalStory.bin");
19
+ }
20
+ if (store) {
21
+ ink_globals_delete(store);
22
+ }
23
+ store = ink_story_new_globals(story);
24
+ if (thread) {
25
+ ink_runner_delete(thread);
26
+ }
27
+ thread = ink_story_new_runner(story, store);
28
+ }
29
+
30
+ int main()
31
+ {
32
+ //====== Just reading Globals =====
33
+ setup();
34
+
35
+ // check story
36
+ assert(
37
+ strcmp(
38
+ ink_runner_get_line(thread),
39
+ "My name is Jean Passepartout, but my friend's call me Jackie. I'm 23 years old.\n"
40
+ )
41
+ == 0
42
+ );
43
+ assert(strcmp(ink_runner_get_line(thread), "Foo:23\n") == 0);
44
+
45
+ // check values in store
46
+ InkValue val = ink_globals_get(store, "age");
47
+ assert(val.type == ValueTypeInt32 && val.int32_v == 23);
48
+ val = ink_globals_get(store, "friendly_name_of_player");
49
+ assert(val.type == ValueTypeString && strcmp(val.string_v, "Jackie") == 0);
50
+
51
+
52
+ //===== Modifing Globals =====
53
+ setup();
54
+
55
+ // set value of 'age'
56
+ val.type = ValueTypeInt32;
57
+ val.int32_v = 30;
58
+ assert(ink_globals_set(store, "age", val));
59
+
60
+ // set value of 'friendl_name_of_player'
61
+ val.type = ValueTypeString;
62
+ val.string_v = "Freddy";
63
+ assert(ink_globals_set(store, "friendly_name_of_player", val));
64
+
65
+
66
+ // check story output
67
+ assert(
68
+ strcmp(
69
+ ink_runner_get_line(thread),
70
+ "My name is Jean Passepartout, but my friend's call me Freddy. I'm 30 years old.\n"
71
+ )
72
+ == 0
73
+ );
74
+ assert(strcmp(ink_runner_get_line(thread), "Foo:30\n") == 0);
75
+
76
+ // check variable content
77
+ val = ink_globals_get(store, "age");
78
+ assert(val.type == ValueTypeInt32 && val.int32_v == 30);
79
+ val = ink_globals_get(store, "friendly_name_of_player");
80
+ assert(val.type == ValueTypeString && strcmp(val.string_v, "Freddy") == 0);
81
+ val = ink_globals_get(store, "concat");
82
+ assert(val.type == ValueTypeString && strcmp(val.string_v, "Foo:30") == 0);
83
+
84
+ //===== Fail to set variables with invalid types or non existing variables =====
85
+ setup();
86
+ val = ink_globals_get(store, "foo");
87
+ assert(val.type == ValueTypeNone);
88
+ // not existing variable
89
+ val.type = ValueTypeString;
90
+ val.string_v = "o";
91
+ assert(! ink_globals_set(store, "foo", val));
92
+ val.type = ValueTypeString;
93
+ val.string_v = "o";
94
+ // wrong type
95
+ assert(! ink_globals_set(store, "age", val));
96
+
97
+ return 0;
98
+ }
@@ -0,0 +1,73 @@
1
+ #include <string.h>
2
+ #include <math.h>
3
+ #include <stdlib.h>
4
+ #include <stdio.h>
5
+
6
+ #include <inkcpp.h>
7
+
8
+ #undef NDEBUG
9
+ #include <assert.h>
10
+
11
+ int main()
12
+ {
13
+ HInkStory* story = ink_story_from_file(INK_TEST_RESOURCE_DIR "ListStory.bin");
14
+ HInkGlobals* store = ink_story_new_globals(story);
15
+ HInkRunner* runner = ink_story_new_runner(story, store);
16
+
17
+ InkValue val = ink_globals_get(store, "list");
18
+ assert(val.type == ValueTypeList);
19
+ HInkList* list = val.list_v;
20
+
21
+ InkListIter iter;
22
+
23
+ // iterate through all flags
24
+ {
25
+ int hits[3] = {0};
26
+ if (ink_list_flags(list, &iter)) {
27
+ do {
28
+ if (strcmp(iter.flag_name, "bird") == 0 && strcmp(iter.list_name, "animals") == 0) {
29
+ hits[0] = 1;
30
+ } else if (strcmp(iter.flag_name, "red") == 0 && strcmp(iter.list_name, "colors") == 0) {
31
+ hits[1] = 1;
32
+ } else if (strcmp(iter.flag_name, "yellow") == 0 && strcmp(iter.list_name, "colors") == 0) {
33
+ hits[2] = 1;
34
+ } else {
35
+ assert(0);
36
+ }
37
+ } while (ink_list_iter_next(&iter));
38
+ assert(hits[0] && hits[1] && hits[2]);
39
+ }
40
+ }
41
+ // through all animals in list
42
+ {
43
+ int hits[2] = {0};
44
+ if (ink_list_flags_from(list, "colors", &iter)) {
45
+ do {
46
+ if (strcmp(iter.flag_name, "red") == 0 && strcmp(iter.list_name, "colors") == 0) {
47
+ hits[0] = 1;
48
+ } else if (strcmp(iter.flag_name, "yellow") == 0 && strcmp(iter.list_name, "colors") == 0) {
49
+ hits[1] = 1;
50
+ } else {
51
+ assert(0);
52
+ }
53
+ } while (ink_list_iter_next(&iter));
54
+ }
55
+ assert(hits[0] && hits[1]);
56
+ }
57
+
58
+ assert(ink_list_contains(list, "yellow"));
59
+ assert(ink_list_contains(list, "white") == 0);
60
+
61
+ ink_list_add(list, "white");
62
+ ink_list_remove(list, "yellow");
63
+ assert(ink_list_contains(list, "yellow") == 0);
64
+ assert(ink_list_contains(list, "white"));
65
+
66
+ assert(ink_globals_set(store, "list", val));
67
+
68
+ assert(strcmp(ink_runner_get_line(runner), "cat, snake\n") == 0);
69
+ assert(ink_runner_num_choices(runner) == 2);
70
+ const HInkChoice* choice = ink_runner_get_choice(runner, 0);
71
+ assert(strcmp(ink_choice_text(choice), "list: bird, white, red") == 0);
72
+ return 0;
73
+ }
@@ -0,0 +1,36 @@
1
+ #include <string.h>
2
+ #include <math.h>
3
+ #include <stdlib.h>
4
+ #include <stdio.h>
5
+
6
+ #include <inkcpp.h>
7
+
8
+ #undef NDEBUG
9
+ #include <assert.h>
10
+
11
+ int cnt = 0;
12
+
13
+ void observer(InkValue new_value, InkValue old_value)
14
+ {
15
+ if (cnt++ == 0) {
16
+ assert(new_value.type == ValueTypeInt32 && new_value.int32_v == 1);
17
+ assert(old_value.type == ValueTypeNone);
18
+ } else {
19
+ assert(new_value.type == ValueTypeInt32 && new_value.int32_v == 5);
20
+ assert(old_value.type == ValueTypeInt32 && old_value.int32_v == 1);
21
+ }
22
+ }
23
+
24
+ int main()
25
+ {
26
+ HInkStory* story = ink_story_from_file(INK_TEST_RESOURCE_DIR "ObserverStory.bin");
27
+ HInkGlobals* store = ink_story_new_globals(story);
28
+ HInkRunner* thread = ink_story_new_runner(story, store);
29
+
30
+ ink_globals_observe(store, "var1", observer);
31
+
32
+ assert(strcmp(ink_runner_get_line(thread), "hello line 1 1 hello line 2 5 test line 3 5\n") == 0);
33
+ assert(cnt == 2);
34
+
35
+ return 0;
36
+ }
@@ -0,0 +1,65 @@
1
+ #include <string.h>
2
+ #include <math.h>
3
+ #include <stdlib.h>
4
+ #include <stdio.h>
5
+
6
+ #include <inkcpp.h>
7
+
8
+ #undef NDEBUG
9
+ #include <assert.h>
10
+
11
+ void check_end(HInkRunner* runner)
12
+ {
13
+ assert(ink_runner_num_choices(runner) == 3);
14
+ ink_runner_choose(runner, 2);
15
+ while (ink_runner_can_continue(runner)) {
16
+ ink_runner_get_line(runner);
17
+ }
18
+ assert(ink_runner_num_choices(runner) == 2);
19
+ }
20
+
21
+ int main()
22
+ {
23
+ HInkStory* story = ink_story_from_file(INK_TEST_RESOURCE_DIR "SimpleStoryFlow.bin");
24
+ HInkRunner* runner = ink_story_new_runner(story, NULL);
25
+
26
+ ink_runner_get_line(runner);
27
+ assert(ink_runner_num_choices(runner) == 3);
28
+ ink_runner_choose(runner, 2);
29
+
30
+ // snapshot after choose -> snapshot will print text after loading
31
+ HInkSnapshot* snap1 = ink_runner_create_snapshot(runner);
32
+
33
+ int cnt = 0;
34
+ while (ink_runner_can_continue(runner)) {
35
+ ink_runner_get_line(runner);
36
+ ++cnt;
37
+ }
38
+
39
+ // snapshot befroe choose, context (last output lines) can not bet optained at loading
40
+ HInkSnapshot* snap2 = ink_runner_create_snapshot(runner);
41
+
42
+ check_end(runner);
43
+
44
+
45
+ ink_runner_delete(runner);
46
+ runner = ink_story_new_runner_from_snapshot(story, snap1, NULL, 0);
47
+
48
+ // same amount at output then before
49
+ while (ink_runner_can_continue(runner)) {
50
+ ink_runner_get_line(runner);
51
+ --cnt;
52
+ }
53
+ assert(cnt == 0);
54
+
55
+ check_end(runner);
56
+
57
+
58
+ ink_runner_delete(runner);
59
+ runner = ink_story_new_runner_from_snapshot(story, snap2, NULL, 0);
60
+
61
+ assert(ink_runner_can_continue(runner) == 0);
62
+ check_end(runner);
63
+
64
+ return 0;
65
+ }