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.
- checksums.yaml +7 -0
- data/.ruby-version +1 -0
- data/CHANGELOG.md +1 -0
- data/Gemfile +10 -0
- data/Gemfile.lock +84 -0
- data/LICENSE +7 -0
- data/README.md +3 -0
- data/Rakefile +16 -0
- data/bin/console +15 -0
- data/bin/setup +10 -0
- data/bin/tapioca +29 -0
- data/ext/inkcpp_rb/extconf.rb +19 -0
- data/ext/inkcpp_rb/inkcpp/.clang-format +99 -0
- data/ext/inkcpp_rb/inkcpp/.github/FUNDING.yml +1 -0
- data/ext/inkcpp_rb/inkcpp/.github/workflows/build.yml +344 -0
- data/ext/inkcpp_rb/inkcpp/.github/workflows/release.yml +49 -0
- data/ext/inkcpp_rb/inkcpp/.gitignore +25 -0
- data/ext/inkcpp_rb/inkcpp/.gitmodules +9 -0
- data/ext/inkcpp_rb/inkcpp/CMakeLists.txt +170 -0
- data/ext/inkcpp_rb/inkcpp/CODE_OF_CONDUCT.md +76 -0
- data/ext/inkcpp_rb/inkcpp/CONTRIBUTING.md +55 -0
- data/ext/inkcpp_rb/inkcpp/Config.cmake.in +2 -0
- data/ext/inkcpp_rb/inkcpp/Documentation/cmake_example/CMakeLists.txt +13 -0
- data/ext/inkcpp_rb/inkcpp/Documentation/cmake_example/main.c +38 -0
- data/ext/inkcpp_rb/inkcpp/Documentation/cmake_example/main.cpp +40 -0
- data/ext/inkcpp_rb/inkcpp/Documentation/cmake_example/test.ink +8 -0
- data/ext/inkcpp_rb/inkcpp/Documentation/cmake_example/test.ink.json +1 -0
- data/ext/inkcpp_rb/inkcpp/Documentation/cmake_example.zip +0 -0
- data/ext/inkcpp_rb/inkcpp/Documentation/unreal/InkCPP_DEMO.zip +0 -0
- data/ext/inkcpp_rb/inkcpp/Documentation/unreal/imgs/CreateThread.png +0 -0
- data/ext/inkcpp_rb/inkcpp/Documentation/unreal/imgs/HandleChoice.png +0 -0
- data/ext/inkcpp_rb/inkcpp/Documentation/unreal/imgs/ListElementOf.png +0 -0
- data/ext/inkcpp_rb/inkcpp/Documentation/unreal/imgs/MinimalRuntime.png +0 -0
- data/ext/inkcpp_rb/inkcpp/Documentation/unreal/imgs/MinimalThread.png +0 -0
- data/ext/inkcpp_rb/inkcpp/Documentation/unreal/imgs/ObseverChange.png +0 -0
- data/ext/inkcpp_rb/inkcpp/Documentation/unreal/imgs/TagListGetValue.png +0 -0
- data/ext/inkcpp_rb/inkcpp/Documentation/unreal/imgs/YieldResume.png +0 -0
- data/ext/inkcpp_rb/inkcpp/Doxyfile +2825 -0
- data/ext/inkcpp_rb/inkcpp/LICENSE.txt +22 -0
- data/ext/inkcpp_rb/inkcpp/Minimal.runsettings +8 -0
- data/ext/inkcpp_rb/inkcpp/README.md +192 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/CMakeLists.txt +67 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/array.h +481 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/avl_array.h +833 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/casting.h +93 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/choice.cpp +54 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/collections/restorable.cpp +124 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/collections/restorable.h +406 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/container_operations.cpp +52 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/container_operations.h +34 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/executioner.h +179 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/functional.cpp +86 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/functions.cpp +54 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/functions.h +40 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/globals_impl.cpp +289 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/globals_impl.h +149 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/header.cpp +44 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/include/choice.h +106 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/include/functional.h +327 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/include/globals.h +196 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/include/list.h +187 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/include/runner.h +291 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/include/snapshot.h +61 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/include/story.h +219 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/include/story_ptr.h +233 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/include/traits.h +270 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/include/types.h +169 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/list_impl.cpp +79 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/list_impl.h +39 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/list_operations.cpp +276 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/list_operations.h +356 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/list_table.cpp +841 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/list_table.h +450 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/numeric_operations.cpp +40 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/numeric_operations.h +529 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/operation_bases.h +164 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/operations.h +100 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/output.cpp +528 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/output.h +153 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/platform.h +22 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/random.h +38 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/runner_impl.cpp +1396 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/runner_impl.h +336 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/simple_restorable_stack.h +335 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/snapshot_impl.cpp +182 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/snapshot_impl.h +91 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/snapshot_interface.h +57 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/stack.cpp +618 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/stack.h +243 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/story_impl.cpp +361 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/story_impl.h +92 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/story_ptr.cpp +75 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/string_operations.cpp +125 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/string_operations.h +67 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/string_table.cpp +149 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/string_table.h +47 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/string_utils.h +207 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/system.cpp +39 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/tuple.hpp +151 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/value.cpp +279 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/value.h +666 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_c/CMakeLists.txt +62 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_c/include/inkcpp.h +393 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_c/inkcpp.cpp +344 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_c/inkcpp_c.pc.in +10 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_c/tests/ExternalFunction.c +56 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_c/tests/Globals.c +98 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_c/tests/Lists.c +73 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_c/tests/Observer.c +36 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_c/tests/Snapshot.c +65 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_cl/CMakeLists.txt +49 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_cl/inkcpp_cl.cpp +215 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_cl/test.cpp +209 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_cl/test.h +8 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/CMakeLists.txt +37 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/binary_emitter.cpp +446 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/binary_emitter.h +70 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/binary_stream.cpp +166 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/binary_stream.h +79 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/command.cpp +107 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/compiler.cpp +96 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/emitter.cpp +62 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/emitter.h +104 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/include/compilation_results.h +22 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/include/compiler.h +44 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/json.hpp +24596 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/json_compiler.cpp +411 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/json_compiler.h +62 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/list_data.cpp +47 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/list_data.h +70 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/reporter.cpp +107 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/reporter.h +55 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_py/CMakeLists.txt +19 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_py/example.py +78 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_py/src/module.cpp +317 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_py/tests/conftest.py +53 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_py/tests/test_ExternalFunctions.py +35 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_py/tests/test_Globals.py +40 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_py/tests/test_Lists.py +43 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_py/tests/test_Observer.py +27 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_py/tests/test_Snapshot.py +57 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_py/unreal_example.ink +71 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/Array.cpp +115 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/CMakeLists.txt +117 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/Callstack.cpp +392 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/EmptyStringForDivert.cpp +36 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ExternalFunctionsExecuteProperly.cpp +34 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/FallbackFunction.cpp +77 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/Globals.cpp +73 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/InkyJson.cpp +34 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/LabelCondition.cpp +60 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/Lists.cpp +144 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/LookaheadSafe.cpp +46 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/Main.cpp +7 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/MoveTo.cpp +95 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/NewLines.cpp +76 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/NoEarlyTags.cpp +33 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/Observer.cpp +245 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/Pointer.cpp +191 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/Restorable.cpp +294 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/SpaceAfterBracketChoice.cpp +45 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/Stack.cpp +224 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/Tags.cpp +131 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ThirdTierChoiceAfterBrackets.cpp +38 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/UTF8.cpp +56 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/Value.cpp +210 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/catch.hpp +17970 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/AHF.ink +7 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/ChoiceBracketStory.ink +7 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/EmptyStringForDivert.ink +13 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/ExternalFunctionsExecuteProperly.ink +11 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/FallBack.ink +15 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/GlobalStory.ink +9 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/LabelConditionStory.ink +5 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/LinesStory.ink +42 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/ListLogicStory.ink +40 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/ListStory.ink +8 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/LookaheadSafe.ink +14 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/MoveTo.ink +36 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/NoEarlyTags.ink +19 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/ObserverStory.ink +8 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/SimpleStoryFlow.ink +65 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/TagsStory.ink +22 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/TheIntercept.ink +1686 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/ThirdTierChoiceAfterBracketsStory.ink +13 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/UTF-8-demo.txt +212 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/UTF8Story.ink +218 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/simple-1.1.1-inklecate.json +154 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/simple-1.1.1-inky.json +160 -0
- data/ext/inkcpp_rb/inkcpp/notes/ArchitectureNotes.md +54 -0
- data/ext/inkcpp_rb/inkcpp/notes/ListNotes.md +69 -0
- data/ext/inkcpp_rb/inkcpp/notes/OperationNotes.md +35 -0
- data/ext/inkcpp_rb/inkcpp/notes/TagsNotes.md +24 -0
- data/ext/inkcpp_rb/inkcpp/notes/WhitespaceNotes.md +28 -0
- data/ext/inkcpp_rb/inkcpp/proofing/README.md +3 -0
- data/ext/inkcpp_rb/inkcpp/proofing/inkcpp_runtime_driver +12 -0
- data/ext/inkcpp_rb/inkcpp/pyproject.toml +63 -0
- data/ext/inkcpp_rb/inkcpp/setup.py +166 -0
- data/ext/inkcpp_rb/inkcpp/shared/CMakeLists.txt +14 -0
- data/ext/inkcpp_rb/inkcpp/shared/private/command.h +172 -0
- data/ext/inkcpp_rb/inkcpp/shared/private/header.h +46 -0
- data/ext/inkcpp_rb/inkcpp/shared/public/config.h +53 -0
- data/ext/inkcpp_rb/inkcpp/shared/public/system.h +307 -0
- data/ext/inkcpp_rb/inkcpp/shared/public/version.h +14 -0
- data/ext/inkcpp_rb/inkcpp/tests/TestAllSequenceTypes.ink +59 -0
- data/ext/inkcpp_rb/inkcpp/tests/TestArithmetic.ink +17 -0
- data/ext/inkcpp_rb/inkcpp/tests/TestBasicStringLiterals.ink +8 -0
- data/ext/inkcpp_rb/inkcpp/tests/TestBasicTunnel.ink +10 -0
- data/ext/inkcpp_rb/inkcpp/tests/TestBlanksInInlineSequences.ink +51 -0
- data/ext/inkcpp_rb/inkcpp/tests/TestCallStackEvaluation.ink +15 -0
- data/ext/inkcpp_rb/inkcpp/tests/TestChoiceCount.ink +15 -0
- data/ext/inkcpp_rb/inkcpp/tests/TestChoiceDivertsToDone.ink +6 -0
- data/ext/inkcpp_rb/inkcpp/tests/TestChoiceWithBracketsOnly.ink +9 -0
- data/ext/inkcpp_rb/inkcpp/tests/TestCompareDivertTargets.ink +26 -0
- data/ext/inkcpp_rb/inkcpp/tests/TestComplexTunnels.ink +22 -0
- data/ext/inkcpp_rb/inkcpp/tests/TestConditionalChoiceInWeave.ink +19 -0
- data/ext/inkcpp_rb/inkcpp/tests/TestTunnelOnwardsAfterTunnel.ink +17 -0
- data/ext/inkcpp_rb/inkcpp/unreal/CMakeLists.txt +51 -0
- data/ext/inkcpp_rb/inkcpp/unreal/UE_example.ink +92 -0
- data/ext/inkcpp_rb/inkcpp/unreal/blueprint_filter.js +377 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Resources/Icon128.png +0 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Private/InkAsset.cpp +47 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Private/InkChoice.cpp +40 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Private/InkList.cpp +86 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Private/InkRuntime.cpp +265 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Private/InkThread.cpp +239 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Private/InkVar.cpp +143 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Private/TagList.cpp +95 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Private/inkcpp.cpp +13 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Public/InkAsset.h +50 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Public/InkChoice.h +58 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Public/InkDelegates.h +139 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Public/InkList.h +102 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Public/InkRuntime.h +177 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Public/InkSnapshot.h +30 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Public/InkThread.h +215 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Public/InkVar.h +245 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Public/TagList.h +77 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Public/inkcpp.h +217 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/inkcpp.Build.cs +62 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp_editor/Private/InkAssetFactory.cpp +237 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp_editor/Private/InkAssetFactory.h +43 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp_editor/Private/inkcpp_editor.cpp +13 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp_editor/Private/inklecate_cmd.cpp.in +24 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp_editor/Public/inkcpp_editor.h +9 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp_editor/inkcpp_editor.Build.cs +61 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/inkcpp.uplugin +44 -0
- data/ext/inkcpp_rb/inkcpp/unreal/render.css +1 -0
- data/ext/inkcpp_rb/inkcpp_rb.cpp +321 -0
- data/inkcpp_rb.gemspec +54 -0
- data/rbi/inkcpp_rb.rbi +211 -0
- data/sorbet/config +4 -0
- data/sorbet/rbi/annotations/.gitattributes +1 -0
- data/sorbet/rbi/annotations/minitest.rbi +119 -0
- data/sorbet/rbi/gems/.gitattributes +1 -0
- data/sorbet/rbi/gems/benchmark@0.4.0.rbi +618 -0
- data/sorbet/rbi/gems/erubi@1.13.1.rbi +155 -0
- data/sorbet/rbi/gems/minitest@5.25.4.rbi +1547 -0
- data/sorbet/rbi/gems/netrc@0.11.0.rbi +159 -0
- data/sorbet/rbi/gems/parallel@1.26.3.rbi +291 -0
- data/sorbet/rbi/gems/prism@1.3.0.rbi +40040 -0
- data/sorbet/rbi/gems/rake-compiler@1.2.8.rbi +9 -0
- data/sorbet/rbi/gems/rake@13.2.1.rbi +3033 -0
- data/sorbet/rbi/gems/rbi@0.2.2.rbi +4527 -0
- data/sorbet/rbi/gems/rice@4.3.3.rbi +44 -0
- data/sorbet/rbi/gems/spoom@1.5.0.rbi +4932 -0
- data/sorbet/rbi/gems/tapioca@0.16.7.rbi +3611 -0
- data/sorbet/rbi/gems/thor@1.3.2.rbi +4378 -0
- data/sorbet/rbi/gems/yard-sorbet@0.9.0.rbi +435 -0
- data/sorbet/rbi/gems/yard@0.9.37.rbi +18379 -0
- data/sorbet/tapioca/config.yml +13 -0
- data/sorbet/tapioca/require.rb +4 -0
- 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
|
+
*/
|