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,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
+ */