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,49 @@
|
|
|
1
|
+
# Create executable
|
|
2
|
+
add_executable(inkcpp_cl inkcpp_cl.cpp test.h test.cpp)
|
|
3
|
+
|
|
4
|
+
# Include compiler and runtime libraries
|
|
5
|
+
target_link_libraries(inkcpp_cl PUBLIC inkcpp inkcpp_compiler inkcpp_shared)
|
|
6
|
+
|
|
7
|
+
# For https://en.cppreference.com/w/cpp/filesystem#Notes
|
|
8
|
+
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
|
9
|
+
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "9.1")
|
|
10
|
+
target_link_libraries(inkcpp_cl PRIVATE stdc++fs)
|
|
11
|
+
endif()
|
|
12
|
+
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
|
|
13
|
+
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "9.0")
|
|
14
|
+
target_link_libraries(inkcpp_cl PRIVATE stdc++fs)
|
|
15
|
+
endif()
|
|
16
|
+
endif()
|
|
17
|
+
|
|
18
|
+
# Install
|
|
19
|
+
install(TARGETS inkcpp_cl DESTINATION . COMPONENT cl EXCLUDE_FROM_ALL)
|
|
20
|
+
string(TOUPPER "${INKCPP_INKLECATE}" inkcpp_inklecate_upper)
|
|
21
|
+
unset(inklecate_dir)
|
|
22
|
+
if((inkcpp_inklecate_upper STREQUAL "ALL") OR (inkcpp_inklecate_upper STREQUAL "OS"))
|
|
23
|
+
if(UNIX AND NOT APPLE)
|
|
24
|
+
FetchContent_GetProperties(inklecate_linux)
|
|
25
|
+
if(inklecate_linux_POPULATED)
|
|
26
|
+
set(inklecate_dir "${inklecate_linux_SOURCE_DIR}")
|
|
27
|
+
else()
|
|
28
|
+
message(WARNING "Inklecate for this OS was not downloaded successfully, and will therfore not be packat with cl")
|
|
29
|
+
endif(inklecate_linux_POPULATED)
|
|
30
|
+
elseif(APPLE)
|
|
31
|
+
if(inklecate_mac_POPULATED)
|
|
32
|
+
set(inklecate_dir "${inklecate_mac_SOURCE_DIR}")
|
|
33
|
+
else()
|
|
34
|
+
message(WARNING "Inklecate for this OS was not downloaded successfully, and will therfore not be packat with cl")
|
|
35
|
+
endif(inklecate_mac_POPULATED)
|
|
36
|
+
elseif(MSYS OR MINGW OR WIN32 OR CYGWIN)
|
|
37
|
+
if(inklecate_windows_POPULATED)
|
|
38
|
+
set(inklecate_dir "${inklecate_windows_SOURCE_DIR}")
|
|
39
|
+
else()
|
|
40
|
+
message(WARNING "Inklecate for this OS was not downloaded successfully, and will therfore not be packat with cl")
|
|
41
|
+
endif(inklecate_windows_POPULATED)
|
|
42
|
+
else()
|
|
43
|
+
message(WARNING "Failed to determine OS for bundling inklecate with command line application!")
|
|
44
|
+
endif()
|
|
45
|
+
if(inklecate_dir)
|
|
46
|
+
file(GLOB inklecate_files "${inklecate_dir}/*")
|
|
47
|
+
install(FILES ${inklecate_files} DESTINATION . COMPONENT cl EXCLUDE_FROM_ALL)
|
|
48
|
+
endif(inklecate_dir)
|
|
49
|
+
endif((inkcpp_inklecate_upper STREQUAL "ALL") OR (inkcpp_inklecate_upper STREQUAL "OS"))
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
// inkcpp_cl.cpp : This file contains the 'main' function. Program execution begins and ends there.
|
|
2
|
+
//
|
|
3
|
+
|
|
4
|
+
#include <iostream>
|
|
5
|
+
#include <fstream>
|
|
6
|
+
#include <regex>
|
|
7
|
+
|
|
8
|
+
#include <story.h>
|
|
9
|
+
#include <runner.h>
|
|
10
|
+
#include <compiler.h>
|
|
11
|
+
#include <choice.h>
|
|
12
|
+
#include <globals.h>
|
|
13
|
+
#include <snapshot.h>
|
|
14
|
+
|
|
15
|
+
#include "test.h"
|
|
16
|
+
|
|
17
|
+
void usage()
|
|
18
|
+
{
|
|
19
|
+
using namespace std;
|
|
20
|
+
cout << "Usage: inkcpp_cl <options> <json file>\n"
|
|
21
|
+
<< "\t-o <filename>:\tOutput file name\n"
|
|
22
|
+
<< "\t-p [<snapshot_file>]:\tPlay mode\n\toptional snapshot file to load\n\tto create a "
|
|
23
|
+
"snapshot file enter '-1' as choice\n"
|
|
24
|
+
<< "\t--ommit-choice-tags:\tdo not print tags after choices, primarly used to be compatible "
|
|
25
|
+
"with inkclecat output"
|
|
26
|
+
<< "\t--inklecate <path-to-inklecate>:\toverwrites INKLECATE enviroment variable\n"
|
|
27
|
+
<< endl;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
int main(int argc, const char** argv)
|
|
31
|
+
{
|
|
32
|
+
// Usage
|
|
33
|
+
if (argc == 1) {
|
|
34
|
+
usage();
|
|
35
|
+
return 1;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// Parse options
|
|
39
|
+
std::string outputFilename;
|
|
40
|
+
bool playMode = false, testMode = false, testDirectory = false, ommit_choice_tags = false;
|
|
41
|
+
std::string snapshotFile;
|
|
42
|
+
const char* inklecateOverwrite = nullptr;
|
|
43
|
+
for (int i = 1; i < argc - 1; i++) {
|
|
44
|
+
std::string option = argv[i];
|
|
45
|
+
if (option == "-o") {
|
|
46
|
+
outputFilename = argv[i + 1];
|
|
47
|
+
i += 1;
|
|
48
|
+
} else if (option == "-p") {
|
|
49
|
+
playMode = true;
|
|
50
|
+
if (i + 1 < argc - 1 && argv[i + 1][0] != '-') {
|
|
51
|
+
++i;
|
|
52
|
+
snapshotFile = argv[i];
|
|
53
|
+
}
|
|
54
|
+
} else if (option == "--ommit-choice-tags") {
|
|
55
|
+
ommit_choice_tags = true;
|
|
56
|
+
} else if (option == "-t") {
|
|
57
|
+
testMode = true;
|
|
58
|
+
} else if (option == "-td") {
|
|
59
|
+
testMode = true;
|
|
60
|
+
testDirectory = true;
|
|
61
|
+
} else if (option == "--inklecate") {
|
|
62
|
+
if (i + 1 < argc - 1 && argv[i + 1][0] != '-') {
|
|
63
|
+
++i;
|
|
64
|
+
inklecateOverwrite = argv[i];
|
|
65
|
+
}
|
|
66
|
+
} else {
|
|
67
|
+
std::cerr << "Unrecognized option: '" << option << "'\n";
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// Get input filename
|
|
72
|
+
std::string inputFilename = argv[argc - 1];
|
|
73
|
+
|
|
74
|
+
// Test mode
|
|
75
|
+
// if (testMode) {
|
|
76
|
+
// bool result;
|
|
77
|
+
// if (testDirectory) {
|
|
78
|
+
// result = test_directory(inputFilename);
|
|
79
|
+
// } else {
|
|
80
|
+
// result = test(inputFilename);
|
|
81
|
+
// }
|
|
82
|
+
|
|
83
|
+
// return result ? 0 : -1;
|
|
84
|
+
// }
|
|
85
|
+
|
|
86
|
+
// If output filename not specified, use input filename as guideline
|
|
87
|
+
if (outputFilename.empty()) {
|
|
88
|
+
outputFilename = std::regex_replace(inputFilename, std::regex("\\.[^\\.]+$"), ".bin");
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// If input filename is an .ink file
|
|
92
|
+
int val = inputFilename.find(".ink");
|
|
93
|
+
bool json_file_is_tmp_file = false;
|
|
94
|
+
if (val == inputFilename.length() - 4) {
|
|
95
|
+
// Create temporary filename
|
|
96
|
+
std::string jsonFile = std::regex_replace(inputFilename, std::regex("\\.[^\\.]+$"), ".tmp");
|
|
97
|
+
|
|
98
|
+
// Then we need to do a compilation with inklecate
|
|
99
|
+
try {
|
|
100
|
+
inklecate(inputFilename, jsonFile, inklecateOverwrite);
|
|
101
|
+
} catch (const std::exception& e) {
|
|
102
|
+
std::cerr << "Inklecate Error: " << e.what() << std::endl;
|
|
103
|
+
return 1;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// New input is the json file
|
|
107
|
+
json_file_is_tmp_file = true;
|
|
108
|
+
inputFilename = jsonFile;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// Open file and compile
|
|
112
|
+
try {
|
|
113
|
+
ink::compiler::compilation_results results;
|
|
114
|
+
std::ofstream fout(outputFilename, std::ios::binary | std::ios::out);
|
|
115
|
+
ink::compiler::run(inputFilename.c_str(), fout, &results);
|
|
116
|
+
fout.close();
|
|
117
|
+
if (json_file_is_tmp_file) {
|
|
118
|
+
remove(inputFilename.c_str());
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// Report errors
|
|
122
|
+
for (auto& warn : results.warnings) {
|
|
123
|
+
std::cerr << "WARNING: " << warn << '\n';
|
|
124
|
+
}
|
|
125
|
+
for (auto& err : results.errors) {
|
|
126
|
+
std::cerr << "ERROR: " << err << '\n';
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
if (results.errors.size() > 0 && playMode) {
|
|
130
|
+
std::cerr << "Cancelling play mode. Errors detected in compilation" << std::endl;
|
|
131
|
+
return -1;
|
|
132
|
+
}
|
|
133
|
+
} catch (std::exception& e) {
|
|
134
|
+
if (json_file_is_tmp_file) {
|
|
135
|
+
remove(inputFilename.c_str());
|
|
136
|
+
}
|
|
137
|
+
std::cerr << "Unhandled InkBin compiler exception: " << e.what() << std::endl;
|
|
138
|
+
return 1;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
if (! playMode) {
|
|
142
|
+
return 0;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
// Run the story
|
|
146
|
+
try {
|
|
147
|
+
using namespace ink::runtime;
|
|
148
|
+
|
|
149
|
+
// Load story
|
|
150
|
+
std::unique_ptr<story> myInk{story::from_file(outputFilename.c_str())};
|
|
151
|
+
|
|
152
|
+
// Start runner
|
|
153
|
+
runner thread;
|
|
154
|
+
if (snapshotFile.size()) {
|
|
155
|
+
auto snap_ptr = snapshot::from_file(snapshotFile.c_str());
|
|
156
|
+
thread = myInk->new_runner_from_snapshot(*snap_ptr);
|
|
157
|
+
delete snap_ptr;
|
|
158
|
+
} else {
|
|
159
|
+
thread = myInk->new_runner();
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
while (true) {
|
|
163
|
+
while (thread->can_continue()) {
|
|
164
|
+
std::cout << thread->getline();
|
|
165
|
+
if (thread->has_tags()) {
|
|
166
|
+
std::cout << "# tags: ";
|
|
167
|
+
for (int i = 0; i < thread->num_tags(); ++i) {
|
|
168
|
+
if (i != 0) {
|
|
169
|
+
std::cout << ", ";
|
|
170
|
+
}
|
|
171
|
+
std::cout << thread->get_tag(i);
|
|
172
|
+
}
|
|
173
|
+
std::cout << std::endl;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
if (thread->has_choices()) {
|
|
177
|
+
// Extra end line
|
|
178
|
+
std::cout << std::endl;
|
|
179
|
+
|
|
180
|
+
int index = 1;
|
|
181
|
+
for (const ink::runtime::choice& c : *thread) {
|
|
182
|
+
std::cout << index++ << ": " << c.text();
|
|
183
|
+
if (! ommit_choice_tags && c.has_tags()) {
|
|
184
|
+
std::cout << "\n\t";
|
|
185
|
+
for (size_t i = 0; i < c.num_tags(); ++i) {
|
|
186
|
+
std::cout << "# " << c.get_tag(i) << " ";
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
std::cout << std::endl;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
int c = 0;
|
|
193
|
+
std::cout << "?> ";
|
|
194
|
+
std::cin >> c;
|
|
195
|
+
if (c == -1) {
|
|
196
|
+
snapshot* snap = thread->create_snapshot();
|
|
197
|
+
snap->write_to_file(
|
|
198
|
+
std::regex_replace(inputFilename, std::regex("\\.[^\\.]+$"), ".snap").c_str()
|
|
199
|
+
);
|
|
200
|
+
delete snap;
|
|
201
|
+
break;
|
|
202
|
+
}
|
|
203
|
+
thread->choose(c - 1);
|
|
204
|
+
continue;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
// out of content
|
|
208
|
+
break;
|
|
209
|
+
}
|
|
210
|
+
} catch (const std::exception& e) {
|
|
211
|
+
std::cerr << "Unhandled ink runtime exception: " << e.what() << std::endl;
|
|
212
|
+
return 1;
|
|
213
|
+
}
|
|
214
|
+
return 0;
|
|
215
|
+
}
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
#include "test.h"
|
|
2
|
+
|
|
3
|
+
#include <fstream>
|
|
4
|
+
#include <sstream>
|
|
5
|
+
#include <regex>
|
|
6
|
+
#include <filesystem>
|
|
7
|
+
#include <cstdlib>
|
|
8
|
+
|
|
9
|
+
#include <globals.h>
|
|
10
|
+
#include <runner.h>
|
|
11
|
+
#include <story.h>
|
|
12
|
+
#include <compiler.h>
|
|
13
|
+
#include <choice.h>
|
|
14
|
+
|
|
15
|
+
void inklecate(
|
|
16
|
+
const std::string& inkFilename, const std::string& jsonFilename, const char* inklecateOverwrite
|
|
17
|
+
)
|
|
18
|
+
{
|
|
19
|
+
// Get environment specific inklecate invocation command
|
|
20
|
+
|
|
21
|
+
const char* inklecateCmd = nullptr;
|
|
22
|
+
if (inklecateCmd == nullptr) {
|
|
23
|
+
if (inklecateOverwrite) {
|
|
24
|
+
inklecateCmd = inklecateOverwrite;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
if (inklecateCmd == nullptr) {
|
|
28
|
+
std::getenv("INKLECATE");
|
|
29
|
+
}
|
|
30
|
+
if (inklecateCmd == nullptr)
|
|
31
|
+
inklecateCmd = "inklecate";
|
|
32
|
+
|
|
33
|
+
// Create command
|
|
34
|
+
std::stringstream cmd;
|
|
35
|
+
cmd << inklecateCmd << " -o \"" << jsonFilename << "\" \"" << inkFilename << "\"";
|
|
36
|
+
|
|
37
|
+
// Run
|
|
38
|
+
int result = std::system(cmd.str().c_str());
|
|
39
|
+
if (result != 0) {
|
|
40
|
+
std::stringstream msg; msg << "Inklecate failed with exit code " << result;
|
|
41
|
+
throw std::runtime_error(msg.str());
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
void load_file(const std::string& filename, std::string& result)
|
|
46
|
+
{
|
|
47
|
+
// Open file
|
|
48
|
+
std::ifstream file(filename.c_str());
|
|
49
|
+
|
|
50
|
+
// Get size
|
|
51
|
+
file.seekg(0, std::ios::end);
|
|
52
|
+
result.reserve(file.tellg());
|
|
53
|
+
file.seekg(0, std::ios::beg);
|
|
54
|
+
|
|
55
|
+
// Load into string
|
|
56
|
+
result.assign(std::istreambuf_iterator<char>(file), std::istreambuf_iterator<char>());
|
|
57
|
+
|
|
58
|
+
// Close
|
|
59
|
+
file.close();
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
bool test(const std::string& inkFilename)
|
|
63
|
+
{
|
|
64
|
+
using namespace ink::runtime;
|
|
65
|
+
|
|
66
|
+
std::cout << std::filesystem::path(inkFilename).filename().string() << std::endl;
|
|
67
|
+
|
|
68
|
+
// Compile into a temporary json file
|
|
69
|
+
inklecate(inkFilename, "test.tmp", nullptr);
|
|
70
|
+
|
|
71
|
+
// Compile into binary
|
|
72
|
+
ink::compiler::compilation_results results;
|
|
73
|
+
ink::compiler::run("test.tmp", "test.bin", &results);
|
|
74
|
+
|
|
75
|
+
std::vector<std::string> expectations;
|
|
76
|
+
std::vector<int> choices;
|
|
77
|
+
std::vector<std::string> choiceStrings;
|
|
78
|
+
|
|
79
|
+
{
|
|
80
|
+
// Load entire ink file into memory
|
|
81
|
+
std::string inkFile;
|
|
82
|
+
load_file(inkFilename, inkFile);
|
|
83
|
+
|
|
84
|
+
// Check for ignore
|
|
85
|
+
if (inkFile.find("//IGNORE") == 0)
|
|
86
|
+
{
|
|
87
|
+
std::cout << "IGNORED" << std::endl;
|
|
88
|
+
return true;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// Check for compile errors post ignore
|
|
92
|
+
if (results.errors.size() > 0)
|
|
93
|
+
{
|
|
94
|
+
for (auto& error : results.errors)
|
|
95
|
+
{
|
|
96
|
+
std::cerr << "ERROR: " << error << std::endl;
|
|
97
|
+
}
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// Load expectations
|
|
102
|
+
auto reg = std::regex("\\/\\*\\*[ \t]*(\\d+(:.+)?)?[ \t]*\n((.|\n)*?)\\*\\*\\/");
|
|
103
|
+
auto iter = std::sregex_iterator(inkFile.begin(), inkFile.end(), reg);
|
|
104
|
+
auto end = std::sregex_iterator();
|
|
105
|
+
|
|
106
|
+
// Go through them
|
|
107
|
+
for (; iter != end; ++iter)
|
|
108
|
+
{
|
|
109
|
+
if ((*iter)[1].matched)
|
|
110
|
+
{
|
|
111
|
+
expectations.push_back((*iter)[3].str());
|
|
112
|
+
choices.push_back(atoi((*iter)[1].str().c_str()));
|
|
113
|
+
|
|
114
|
+
if ((*iter)[2].matched)
|
|
115
|
+
choiceStrings.push_back((*iter)[2].str().substr(1));
|
|
116
|
+
else
|
|
117
|
+
choiceStrings.push_back("");
|
|
118
|
+
}
|
|
119
|
+
else
|
|
120
|
+
{
|
|
121
|
+
expectations.push_back((*iter)[3].str());
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
std::reverse(expectations.begin(), expectations.end());
|
|
126
|
+
std::reverse(choices.begin(), choices.end());
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
// Load story
|
|
130
|
+
auto file = story::from_file("test.bin");
|
|
131
|
+
auto runner = file->new_runner();
|
|
132
|
+
|
|
133
|
+
while (true)
|
|
134
|
+
{
|
|
135
|
+
// Run continuously
|
|
136
|
+
std::string output = runner->getall();
|
|
137
|
+
|
|
138
|
+
// Check against expectatins
|
|
139
|
+
if (expectations.size() == 0)
|
|
140
|
+
{
|
|
141
|
+
std::cout << "FAIL: Extra content detected in ink file:\n"
|
|
142
|
+
<< output;
|
|
143
|
+
return false;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// Check against expectations
|
|
147
|
+
std::string expect = *expectations.rbegin();
|
|
148
|
+
expectations.pop_back();
|
|
149
|
+
bool success = output == expect;
|
|
150
|
+
if (!success)
|
|
151
|
+
{
|
|
152
|
+
std::cout << "FAIL: Mismatch\n";
|
|
153
|
+
std::cout << "== Expected ==\n"
|
|
154
|
+
<< expect;
|
|
155
|
+
std::cout << "\n== Actual ==\n"
|
|
156
|
+
<< output;
|
|
157
|
+
return false;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
if (runner->has_choices())
|
|
161
|
+
{
|
|
162
|
+
if (choices.size() == 0)
|
|
163
|
+
{
|
|
164
|
+
std::cout << "FAIL: Encountered choice without choice index" << std::endl;
|
|
165
|
+
return false;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
// Pick choice
|
|
169
|
+
int choice = *choices.rbegin();
|
|
170
|
+
choices.pop_back();
|
|
171
|
+
|
|
172
|
+
// Make sure text matches
|
|
173
|
+
std::string choiceStr = *choiceStrings.rbegin();
|
|
174
|
+
choiceStrings.pop_back();
|
|
175
|
+
if (choiceStr != "" && runner->get_choice(choice)->text() != choiceStr)
|
|
176
|
+
{
|
|
177
|
+
std::cout << "FAIL: CHOICE MISMATCH\n";
|
|
178
|
+
|
|
179
|
+
std::cout << "== Expected ==\n"
|
|
180
|
+
<< choiceStr << "\n"
|
|
181
|
+
<< "== Actual ==\n"
|
|
182
|
+
<< runner->get_choice(choice)->text() << std::endl;
|
|
183
|
+
return false;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
runner->choose(choice);
|
|
187
|
+
}
|
|
188
|
+
else
|
|
189
|
+
break;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
std::cout << "SUCCESS!" << std::endl;
|
|
193
|
+
return true;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
bool test_directory(const std::string& directory)
|
|
197
|
+
{
|
|
198
|
+
for (auto p : std::filesystem::directory_iterator(directory))
|
|
199
|
+
{
|
|
200
|
+
if (p.path().extension() == ".ink")
|
|
201
|
+
{
|
|
202
|
+
bool success = test(p.path().string());
|
|
203
|
+
if (!success)
|
|
204
|
+
return false;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
return true;
|
|
209
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
#include <string>
|
|
2
|
+
|
|
3
|
+
void inklecate(
|
|
4
|
+
const std::string& inkFilename, const std::string& jsonFilename, const char* inkclecateOverwrite
|
|
5
|
+
);
|
|
6
|
+
// TODO: reevaluate in ink file test mechanism
|
|
7
|
+
// bool test(const std::string& inkFilename);
|
|
8
|
+
// bool test_directory(const std::string& directory);
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
list(APPEND SOURCES
|
|
2
|
+
compiler.cpp binary_stream.h binary_stream.cpp json.hpp
|
|
3
|
+
json_compiler.h json_compiler.cpp
|
|
4
|
+
emitter.h emitter.cpp
|
|
5
|
+
reporter.h reporter.cpp
|
|
6
|
+
binary_emitter.h binary_emitter.cpp
|
|
7
|
+
list_data.h list_data.cpp
|
|
8
|
+
command.cpp
|
|
9
|
+
)
|
|
10
|
+
add_definitions(-DINK_EXPOSE_JSON)
|
|
11
|
+
add_library(inkcpp_compiler_o OBJECT ${SOURCES})
|
|
12
|
+
add_library(inkcpp_compiler $<TARGET_OBJECTS:inkcpp_compiler_o>)
|
|
13
|
+
|
|
14
|
+
target_include_directories(inkcpp_compiler_o PUBLIC
|
|
15
|
+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
|
16
|
+
$<INSTALL_INTERFACE:include>
|
|
17
|
+
)
|
|
18
|
+
target_include_directories(inkcpp_compiler PUBLIC
|
|
19
|
+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
|
20
|
+
$<INSTALL_INTERFACE:include>
|
|
21
|
+
)
|
|
22
|
+
FILE(GLOB PUBLIC_HEADERS "include/*")
|
|
23
|
+
set_target_properties(inkcpp_compiler PROPERTIES PUBLIC_HEADER "${PUBLIC_HEADERS}")
|
|
24
|
+
|
|
25
|
+
target_link_libraries(inkcpp_compiler PRIVATE inkcpp_shared)
|
|
26
|
+
target_link_libraries(inkcpp_compiler_o PRIVATE inkcpp_shared)
|
|
27
|
+
|
|
28
|
+
# Make sure this project and all dependencies use the C++17 standard
|
|
29
|
+
target_compile_features(inkcpp_compiler PUBLIC cxx_std_17)
|
|
30
|
+
target_compile_features(inkcpp_compiler PUBLIC cxx_std_17)
|
|
31
|
+
|
|
32
|
+
# Unreal installation
|
|
33
|
+
list(REMOVE_ITEM SOURCES "json.hpp")
|
|
34
|
+
install(FILES "json.hpp" DESTINATION "inkcpp/Source/ThirdParty/Private/"
|
|
35
|
+
COMPONENT unreal EXCLUDE_FROM_ALL)
|
|
36
|
+
install(DIRECTORY "include/" DESTINATION "inkcpp/Source/inkcpp_editor/Private/ink/" COMPONENT unreal EXCLUDE_FROM_ALL)
|
|
37
|
+
install(FILES ${SOURCES} DESTINATION "inkcpp/Source/inkcpp_editor/Private/ink/" COMPONENT unreal EXCLUDE_FROM_ALL)
|