inkcpp_rb 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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,291 @@
1
+ /* Copyright (c) 2024 Julian Benda
2
+ *
3
+ * This file is part of inkCPP which is released under MIT license.
4
+ * See file LICENSE.txt or go to
5
+ * https://github.com/JBenda/inkcpp for full license details.
6
+ */
7
+ #pragma once
8
+
9
+ #include "config.h"
10
+ #include "system.h"
11
+ #include "functional.h"
12
+ #include "types.h"
13
+
14
+ #ifdef INK_ENABLE_UNREAL
15
+ # include "Containers/UnrealString.h"
16
+ #endif
17
+
18
+ namespace ink::runtime
19
+ {
20
+ class choice;
21
+
22
+ /**
23
+ * A runner to execute ink script from a story.
24
+ *
25
+ * An independant runner which can execute ink script from a
26
+ * story independant of other runners. Think of the ink story
27
+ * object like an executable file and the runners as 'threads'
28
+ * (not to be confused with ink threads, which are a language
29
+ * feature). Runners track their own instruction pointer, choice
30
+ * list, temporary variables, callstack, etc. They can either
31
+ * be started with their own globals store, or can share
32
+ * one with other runner instances.
33
+ * @see globals
34
+ * @see story
35
+ */
36
+ class runner_interface
37
+ {
38
+ public:
39
+ virtual ~runner_interface(){};
40
+
41
+ #pragma region Interface Methods
42
+ /**
43
+ * Sets seed for PRNG used in runner.
44
+ * Else runner is started with the current time as seed.
45
+ * @param seed seed to use for PRNG
46
+ */
47
+ virtual void set_rng_seed(uint32_t seed) = 0;
48
+
49
+ /**
50
+ * Moves the runner to the specified path
51
+ *
52
+ * Clears any execution context and moves the runner
53
+ * to the content at the specified path.
54
+ *
55
+ * @param path path to search and move execution to
56
+ * @return If the path was found
57
+ */
58
+ virtual bool move_to(hash_t path) = 0;
59
+
60
+ /**
61
+ * Can the runner continue?
62
+ *
63
+ * Checks if the runner can continue execution. If it
64
+ * can't, we are either at a choice or are out of content.
65
+ * @see continue
66
+ * @see has_choices
67
+ *
68
+ * @return Can continue be called
69
+ */
70
+ virtual bool can_continue() const = 0;
71
+
72
+ #ifdef INK_ENABLE_CSTD
73
+ /**
74
+ * Continue execution until the next newline, then allocate a c-style
75
+ * string with the output. This allocated string is managed by the runtime
76
+ * and will be deleted at the next @ref ink::runtime::runner_interface::choose() "choose()" or
77
+ * @ref ink::runtime::runner_interface::getline() "getline()"
78
+ *
79
+ * @return allocated c-style string with the output of a single line of execution
80
+ */
81
+ virtual const char* getline_alloc() = 0;
82
+ #endif
83
+
84
+ /**
85
+ * @brief creates a snapshot containing the runner, globals and all other runners connected to the
86
+ * globals.
87
+ * @sa story::new_runner_from_snapshot, story::new_globals_from_snapshot
88
+ */
89
+ virtual snapshot* create_snapshot() const = 0;
90
+
91
+ #ifdef INK_ENABLE_STL
92
+ /**
93
+ * Gets the next line of output using C++ STL string.
94
+ *
95
+ * Continue execution until the next newline, then return the output as
96
+ * an STL C++ std::string. Requires INK_ENABLE_STL
97
+ *
98
+ * @return std::string with the next line of output
99
+ */
100
+ virtual std::string getline() = 0;
101
+
102
+ /**
103
+ * Gets the next line of output using C++ STL string.
104
+ *
105
+ * Continue execution until the next newline, then return the output to
106
+ * an STL C++ std::ostream. Requires INK_ENABLE_STL
107
+ */
108
+ virtual void getline(std::ostream&) = 0;
109
+
110
+ /**
111
+ * Gets all the text until the next choice or end
112
+ *
113
+ * Continue execution until the next choice or the story ends,
114
+ * then return the output as an STL C++ std::string.
115
+ * Requires INK_ENABLE_STL
116
+ *
117
+ * @return std::string with the next line of output
118
+ */
119
+ virtual std::string getall() = 0;
120
+
121
+ /**
122
+ * Gets all the text until the next choice or end
123
+ *
124
+ * Continue execution until the next choice or the story ends,
125
+ * then return the output to an STL C++ std::ostream.
126
+ * Requires INK_ENABLE_STL
127
+ */
128
+ virtual void getall(std::ostream&) = 0;
129
+ #endif
130
+
131
+ #ifdef INK_ENABLE_UNREAL
132
+ /**
133
+ * Gets the next line of output using unreal string allocation
134
+ *
135
+ * Continue execution until the next newline, then return the output as
136
+ * an Unreal FString. Requires INK_ENABLE_UNREAL
137
+ *
138
+ * @return FString with the next line of output
139
+ */
140
+ virtual FString getline() = 0;
141
+ #endif
142
+
143
+ /**
144
+ * Choice iterator.
145
+ *
146
+ * Iterates over choices the runner is currently facing.
147
+ *
148
+ * @see end
149
+ * @return constant iterator to the first choice
150
+ */
151
+ virtual const choice* begin() const = 0;
152
+
153
+ /**
154
+ * Terminal choice iterator.
155
+ *
156
+ * Pointer past the last choice the runner is currently facing.
157
+ *
158
+ * @see begin
159
+ * @return end iterator
160
+ */
161
+ virtual const choice* end() const = 0;
162
+
163
+ /**
164
+ * Make a choice.
165
+ *
166
+ * Takes the choice at the given index and moves the instruction
167
+ * pointer to that branch.
168
+ *
169
+ * @param index index of the choice to make
170
+ */
171
+ virtual void choose(size_t index) = 0;
172
+
173
+ /** check if since last choice selection tags have been added */
174
+ virtual bool has_tags() const = 0;
175
+ /** return the number of current.
176
+ *
177
+ * The tags will be accumulated since last choice
178
+ * order of tags wont change, and new are added at the end */
179
+ virtual size_t num_tags() const = 0;
180
+ /** access tag.
181
+ * @param index tag id to fetch [0;@ref ink::runtime::runner_interface::num_tags() "num_tags()")
182
+ */
183
+ virtual const char* get_tag(size_t index) const = 0;
184
+
185
+ protected:
186
+ /** internal bind implementation. not for calling.
187
+ * @private */
188
+ virtual void internal_bind(hash_t name, internal::function_base* function) = 0;
189
+
190
+ public:
191
+ /**
192
+ * Binds an external callable to the runtime
193
+ *
194
+ * Given a name and a callable object, register this function
195
+ * to be called back from the ink runtime.
196
+ *
197
+ * beside an exact signature match, the function can also have one of the following signatures:
198
+ * + void(size_t argl, const ink::runtime::value* argv)
199
+ * + ink::runtime::value(size_t argl, const ink::runtime::value* argv)
200
+ * this provides a generic way to bind functions with abitrary length
201
+ * @param name name hash
202
+ * @param function callable
203
+ * @param lookaheadSafe if false stop glue lookahead if encounter this function
204
+ * this prevents double execution of external functions but can lead to
205
+ * missing glues
206
+ */
207
+ template<typename F>
208
+ inline void bind(hash_t name, F function, bool lookaheadSafe = false)
209
+ {
210
+ internal_bind(name, new internal::function(function, lookaheadSafe));
211
+ }
212
+
213
+ /**
214
+ * Binds an external callable to the runtime
215
+ *
216
+ * Given a name and a callable object, register this function
217
+ * to be called back from the ink runtime.
218
+ *
219
+ * @param name name string
220
+ * @param function callable
221
+ * @param lookaheadSafe if false stop glue lookahead if encounter this function
222
+ * this prevents double execution of external functions but can lead to
223
+ * missing glues
224
+ */
225
+ template<typename F>
226
+ inline void bind(const char* name, F function, bool lookaheadSafe = false)
227
+ {
228
+ bind(ink::hash_string(name), function, lookaheadSafe);
229
+ }
230
+
231
+ #ifdef INK_ENABLE_UNREAL
232
+ /** bind and unreal delegate
233
+ * @param name hash of external function name in ink script
234
+ * @param functionDelegate
235
+ * @param lookaheadSafe @ref #bind()
236
+ */
237
+ template<typename D>
238
+ void bind_delegate(hash_t name, D functionDelegate, bool lookaheadSafe)
239
+ {
240
+ internal_bind(name, new internal::function_array_delegate(functionDelegate, lookaheadSafe));
241
+ }
242
+ #endif
243
+
244
+ #pragma endregion
245
+
246
+ #pragma region Convenience Methods
247
+
248
+ /**
249
+ * Shortcut for checking if the runner can continue.
250
+ *
251
+ * @see can_continue
252
+ */
253
+ inline operator bool() const { return can_continue(); }
254
+
255
+ /**
256
+ * Checks if we're currently facing any choices
257
+ *
258
+ * @return are there any choices available
259
+ */
260
+ inline bool has_choices() const { return begin() != end(); }
261
+
262
+ /**
263
+ * Returns the number of choices currently available
264
+ *
265
+ * @return number of choices
266
+ */
267
+ size_t num_choices() const;
268
+
269
+ /**
270
+ * Gets a choice
271
+ *
272
+ * Returns the choice object at a given index
273
+ *
274
+ * @see num_choices
275
+ * @param index index of the choice to access
276
+ * @return choice object with info on the choice
277
+ */
278
+ const choice* get_choice(size_t index) const;
279
+
280
+ /**
281
+ * Shorcut for accessing a choice
282
+ *
283
+ * @see get_choice
284
+ * @param index index of the choice to access
285
+ * @return choice object with info on the choice
286
+ */
287
+ inline const choice* operator[](size_t index) { return get_choice(index); }
288
+
289
+ #pragma endregion
290
+ };
291
+ } // namespace ink::runtime
@@ -0,0 +1,61 @@
1
+ /* Copyright (c) 2024 Julian Benda
2
+ *
3
+ * This file is part of inkCPP which is released under MIT license.
4
+ * See file LICENSE.txt or go to
5
+ * https://github.com/JBenda/inkcpp for full license details.
6
+ */
7
+ #pragma once
8
+
9
+ #include "types.h"
10
+
11
+ namespace ink::runtime
12
+ {
13
+ /**
14
+ * Container for an InkCPP runtime snapshot.
15
+ * Each snapshot contains a @ref ink::runtime::globals_interface "globals store"
16
+ * and all assoziated @ref ink::runtime::runner_interface "runners/threads"
17
+ * For convinience there exist @ref ink::runtime::globals_interface::create_snapshot() and
18
+ * runner_interface::create_snapshot() . If the runner is assoziated to the globals the snapshot
19
+ * will be identical. If multiple runners are assoziated to the same globals all will be contained,
20
+ * and cann be reconsrtucted with the id parameter of @ref
21
+ * ink::runtime::story::new_runner_from_snapshot()
22
+ *
23
+ * @todo Currently the id is equal to the creation order, a way to name the single runner/threads is
24
+ * WIP
25
+ */
26
+ class snapshot
27
+ {
28
+ public:
29
+ virtual ~snapshot(){};
30
+
31
+ /** Construct snapshot from blob.
32
+ * Memory must be kept valid until the snapshot is deconstructed.
33
+ * @param data pointer to blob
34
+ * @param length number of bytes in blob
35
+ * @param freeOnDestroy if the memory should be freed (delete[]) when the snapshot is
36
+ * deconstructed
37
+ * @return newly created snapshot
38
+ */
39
+ static snapshot* from_binary(const unsigned char* data, size_t length, bool freeOnDestroy = true);
40
+
41
+ /** acces blob inside snapshot */
42
+ virtual const unsigned char* get_data() const = 0;
43
+ /** size of blob inside snapshot */
44
+ virtual size_t get_data_len() const = 0;
45
+ /** number of runners which are stored inside this snapshot */
46
+ virtual size_t num_runners() const = 0;
47
+
48
+ #ifdef INK_ENABLE_STL
49
+ /** deserialize snapshot from file.
50
+ * @param filename of input file
51
+ * @throws ink_exception if it fails to open the file
52
+ */
53
+ static snapshot* from_file(const char* filename);
54
+ /** serialize snapshot to file
55
+ * @param filename output file filename, if already exist it will be overwritten
56
+ * @throws ink_exception if it failt to open the file
57
+ */
58
+ void write_to_file(const char* filename) const;
59
+ #endif
60
+ };
61
+ } // namespace ink::runtime
@@ -0,0 +1,219 @@
1
+ /* Copyright (c) 2024 Julian Benda
2
+ *
3
+ * This file is part of inkCPP which is released under MIT license.
4
+ * See file LICENSE.txt or go to
5
+ * https://github.com/JBenda/inkcpp for full license details.
6
+ */
7
+ #pragma once
8
+
9
+ #include "types.h"
10
+
11
+ namespace ink::runtime
12
+ {
13
+ /**
14
+ * A loaded ink story.
15
+ *
16
+ * Created by loading a binary ink story into memory. Once loaded,
17
+ * the story class can create "runners" which execute story code.
18
+ * A story can have any number of runners, which can optionally
19
+ * share globals (variables, visit counts, etc). through the
20
+ * globals object. By default, each runner gets its own newly
21
+ * created globals store.
22
+ * @see ink::runtime::runner_interface
23
+ * @see ink::runtime::globals_interface
24
+ */
25
+ class story
26
+ {
27
+ public:
28
+ virtual ~story(){};
29
+ #pragma region Interface Methods
30
+ /**
31
+ * Creates a new global store
32
+ *
33
+ * Creates a new global store that can be passed in when
34
+ * creating new runners for this story. Note: Can not be
35
+ * used for other stories. It is tied to this story.
36
+ *
37
+ * @return managed pointer to a new global store
38
+ */
39
+ virtual globals new_globals() = 0;
40
+ /** Reconstructs globals from snapshot
41
+ * @param obj snapshot to load
42
+ */
43
+ virtual globals new_globals_from_snapshot(const snapshot& obj) = 0;
44
+
45
+ /**
46
+ * Creates a new runner
47
+ *
48
+ * Creates a new runner whose initial instruction pointer
49
+ * is the first instruction in this story. If no global
50
+ * store is passed, a new one will be created for the runner.
51
+ *
52
+ * @param store globals to use for the runner
53
+ * @return managed pointer to a new runner
54
+ */
55
+ virtual runner new_runner(globals store = nullptr) = 0;
56
+ /**
57
+ * @brief reconstruct runner from a snapshot
58
+ * @attention runner must be snap_shotted from the same story
59
+ * @attention if globals is explicit set,
60
+ * make sure the globals are from the same snapshot as
61
+ * @attention if you snap_shotted a multiple runner with shared global
62
+ * please reconstruct it in the same fashion
63
+ * @param obj
64
+ * @param store can be set if explicit access to globals is required or multiple runner with a
65
+ * shared global are used
66
+ * @param runner_id if the snapshot was of a multiple runner one global situation load first the
67
+ * global, and then each runner with global set and increasing idx
68
+ */
69
+ virtual runner new_runner_from_snapshot(
70
+ const snapshot& obj, globals store = nullptr, unsigned runner_id = 0
71
+ ) = 0;
72
+ #pragma endregion
73
+
74
+ #pragma region Factory Methods
75
+ /**
76
+ * Creates a new story object from a file.
77
+ *
78
+ * Requires STL or other extension which allows files
79
+ * to be loaded and read. Will allocate all the data
80
+ * necessary to load the file and close it.
81
+ *
82
+ * @param filename filename of the binary ink data
83
+ * @return new story object
84
+ */
85
+ static story* from_file(const char* filename);
86
+
87
+ /**
88
+ * Create a new story object from binary buffer
89
+ *
90
+ * No extensions required. Creates the story from binary
91
+ * data already loaded into memory. By default, the story
92
+ * will free this buffer when it is destroyed.
93
+ *
94
+ * @param data binary data
95
+ * @param length of the binary data in bytes
96
+ * @param freeOnDestroy if true, free this buffer once the story is destroyed
97
+ * @return new story object
98
+ */
99
+ static story* from_binary(unsigned char* data, size_t length, bool freeOnDestroy = true);
100
+ #pragma endregion
101
+ };
102
+ }
103
+
104
+ /** @namespace ink
105
+ * Namespace contaning all modules and classes from InkCPP
106
+ *
107
+ * (Unreal Blueprint Classes Excluded, but there will not be there in a normal build)
108
+ */
109
+
110
+ /** @namespace ink::runtime
111
+ * Contaning all modules and classes used for the inkles ink runtime.
112
+ * A minimal example can be found at @ref src_main
113
+ */
114
+
115
+ /** @mainpage InkCPP Documentation
116
+ * @tableofcontents
117
+ * Inkle Ink C++ Runtime with INK.JSON -> Binary Compiler.<br/>
118
+ * supports ussage in:
119
+ * + C++ (with CMAKE)
120
+ * + UE
121
+ * + Python [inkcpp_py](https://pypi.org/project/inkcpp-py/)
122
+ *
123
+ * @section cmake CMAKE usage
124
+ *
125
+ * The current erlease is available at the [release
126
+ * page](https://github.com/JBenda/inkcpp/releases/latest), as `<os>-lib.zip` (e.g.
127
+ * `linux-lib.zip`). <br/> to link the libraries you can use `find_package(inkcpp CONFIG)` which
128
+ * provides two targets:
129
+ * + inkcpp: the runtime enviroment
130
+ * + inkcpp_compiler: functionality to compile a story.json to story.bin
131
+ *
132
+ * To run your own `.ink` files you need a way to compile it to inks runtime format `.ink.json`. One
133
+ * way is to use `inklecate <story>.ink`.<br/> Which is available at the [official release
134
+ * page](https://github.com/inkle/ink/releases/latest).<br/>
135
+ * Alternativly set the enviroment variable `INKLECATE` so that `%INKLECATE%` executes inklecate.
136
+ *
137
+ * If you want to use the inkcpp with C link against the target inkcpp_c and `#include
138
+ * <ink/c/inkcpp.h>` The C-API documentation and example can be found @ref clib "here".
139
+ *
140
+ * Exampl with library extracted at /YOUR/PROJECT/linux-lib
141
+ * And the [Example project](../cmake_example.zip) is extracted to /YOUR/PROJECT
142
+ * @code {sh}
143
+ * cd /YOUR/PROJECT
144
+ * ls # expected output: CMakeLists.txt main.cpp test.ink test.ink.json linux-lib
145
+ * mkdir build
146
+ * cd build
147
+ * inkcpp_DIR=../linux-lib cmake .. -DCMAKE_BUILD_TYPE=Release # linux
148
+ * set inkcpp_DIR=../win64-lib # windows
149
+ * cmake .. # windows
150
+ * cmake --build . --config=Release
151
+ * cd ..
152
+ * ./build/main_cpp # exact path depends on build system
153
+ * used
154
+ * @endcode
155
+ *
156
+ * @subsection cmake_flags CMake Flags
157
+ * + INKCPP_TEST: (ON|OFF) weather or not execute tests
158
+ * requires `inklecate` to be in the PATH or `INKCPP_INKLECATE=OS` or `=ALL`
159
+ * + INKCPP_INKLECATE: (NONE|OS|ALL) download the current supported inklecate version from the
160
+ * official [release page](https://github.com/inkle/ink/releases/latest)</br> They are stored at
161
+ * `<build-dir>/inklecate/<os>/` and will be automatcilly used for the tests
162
+ * + NONE: disable this function
163
+ * + OS: only the version supported for the OS
164
+ * + ALL: all versions
165
+ * + INKCPP_C: (ON|OFF) Build the inkcpp c bindings (and thest them if test is enabled)
166
+ * + INKCPP_PY: (ON|OFF) Build python bindings (build system only)
167
+ * + WHEEL_BUILD: (ON|OFF) Settings to work with a python wheel build (build system only)
168
+ * + INKCPP_DOC_BlueprintUE: (ON|OFF) enables nice blueprint renders for the documentation
169
+ *
170
+ * @subsection src_main main.cpp
171
+ * @include cmake_example/main.cpp
172
+ *
173
+ * @subsection src_cmake CMakeLists.txt
174
+ * @include cmake_example/CMakeLists.txt
175
+ *
176
+ * @subsection src_story_json test.ink
177
+ * @include cmake_example/test.ink
178
+ * compiled: [test.ink.json](../cmake_example/test.ink.json)
179
+ *
180
+ * @section ue Unreal Installation
181
+ *
182
+ * The easiest way is to install it via the [unreal
183
+ * marcetplace](https://www.unrealengine.com/marketplace/en-US/product/inkcpp). The overview to the
184
+ * UE Blueprint class and examples can be found at @ref unreal "here".
185
+ *
186
+ * The current release is also available at the [release
187
+ * page](https://github.com/JBenda/inkcpp/releases/latest), as `unreal.zip`.<br/>
188
+ * Unpack this foldor in `/PATH/TO/UNREAL_ENGINE/Engine/Plugins/` and it will be available
189
+ * as plugin in the plugin list. <br/>
190
+ * Or unpack this folder in `/PATH/TO/UNREAL_PROJECT/Plugins/` and it will be
191
+ * intigrated at the next startup.<br/> A MarketPlace appearance is work in progress :)
192
+ *
193
+ * If you want to use the newest version clone the project and install the unreal component.
194
+ * @code {sh}
195
+ * git clone https://github.com/JBenda/inkcpp
196
+ * cd inkcpp
197
+ * mkdir build
198
+ * mkdir plugin
199
+ * cd build
200
+ * cmake ..
201
+ * cmake --install . --component unreal --prefix ../plugin
202
+ * cd ../plugin
203
+ * # Should contain a folder named 'inkcpp'
204
+ * cp -r inkcpp /PATH/TO/UNREAL_PROJECT/Plugins
205
+ * @endcode
206
+ *
207
+ * @section py Python example
208
+ *
209
+ * You can install the current release from [pypi](https://pypi.org/project/inkcpp-py/) with <br/>
210
+ * `pip install inkcpp-py`.<br/>
211
+ * Or build it yourself from main with: <br/>
212
+ * `pip install .`
213
+ *
214
+ * Here can you find an
215
+ * [example](https://raw.githubusercontent.com/JBenda/inkcpp/master/inkcpp_py/example.py) inclusive
216
+ * [story](https://raw.githubusercontent.com/JBenda/inkcpp/master/inkcpp_py/unreal_example.ink).
217
+ *
218
+ * [Python module documentation](./inkcpp_py.html)
219
+ */