├── .gitignore
├── CONTRIBUTING.md
├── LICENSE
├── Makefile
├── NOTES
├── NOTICE
├── README.md
├── docs
├── ARCHITECTURE.md
├── EXAMPLES.md
├── IDIOMS.md
├── OVERVIEW.md
├── PHILOSOPHY.md
├── SYNTAX.md
├── THREAT_MODEL.md
├── app-architecture.png
├── code-architecture.png
├── conf.py
├── index.md
└── modules
│ ├── cache_module.md
│ ├── confluence_module.md
│ ├── datasets_module.md
│ ├── excel_module.md
│ ├── gdoc_module.md
│ ├── global_module.md
│ ├── gsheet_module.md
│ ├── html_module.md
│ ├── isoweek_module.md
│ ├── jinja_module.md
│ ├── jira_module.md
│ └── org_module.md
├── experimental
├── forthic-cpp
│ ├── .gitignore
│ ├── ForthicLib.sln
│ ├── ForthicLib
│ │ ├── Defines.h
│ │ ├── ForthicLib.cpp
│ │ ├── ForthicLib.h
│ │ ├── ForthicLib.vcxproj
│ │ ├── ForthicLib.vcxproj.filters
│ │ ├── Interpreter.cpp
│ │ ├── Interpreter.h
│ │ ├── Modules
│ │ │ ├── GlobalItemGetters.cpp
│ │ │ ├── GlobalItemGetters.h
│ │ │ ├── GlobalModule.cpp
│ │ │ ├── GlobalModule.h
│ │ │ ├── GlobalModuleWords.cpp
│ │ │ ├── GlobalModuleWords.h
│ │ │ ├── Module.cpp
│ │ │ └── Module.h
│ │ ├── StackItems
│ │ │ ├── ArrayItem.cpp
│ │ │ ├── ArrayItem.h
│ │ │ ├── FloatItem.cpp
│ │ │ ├── FloatItem.h
│ │ │ ├── IntItem.cpp
│ │ │ ├── IntItem.h
│ │ │ ├── ModuleItem.cpp
│ │ │ ├── ModuleItem.h
│ │ │ ├── StackItem.cpp
│ │ │ ├── StackItem.h
│ │ │ ├── StartArrayItem.cpp
│ │ │ ├── StartArrayItem.h
│ │ │ ├── StringItem.cpp
│ │ │ ├── StringItem.h
│ │ │ ├── VariableItem.cpp
│ │ │ └── VariableItem.h
│ │ ├── Token.cpp
│ │ ├── Token.h
│ │ ├── Tokenizer.cpp
│ │ ├── Tokenizer.h
│ │ ├── Words
│ │ │ ├── DefinitionWord.cpp
│ │ │ ├── DefinitionWord.h
│ │ │ ├── EndArrayWord.cpp
│ │ │ ├── EndArrayWord.h
│ │ │ ├── PushItemWord.cpp
│ │ │ ├── PushItemWord.h
│ │ │ ├── Word.cpp
│ │ │ └── Word.h
│ │ ├── dllmain.cpp
│ │ ├── pch.cpp
│ │ ├── pch.h
│ │ └── targetver.h
│ └── ForthicLibTests
│ │ ├── Assets
│ │ ├── LockScreenLogo.scale-200.png
│ │ ├── SplashScreen.scale-200.png
│ │ ├── Square150x150Logo.scale-200.png
│ │ ├── Square44x44Logo.scale-200.png
│ │ ├── Square44x44Logo.targetsize-24_altform-unplated.png
│ │ ├── StoreLogo.png
│ │ └── Wide310x150Logo.scale-200.png
│ │ ├── ForthicLibTests.vcxproj
│ │ ├── ForthicLibTests.vcxproj.filters
│ │ ├── ForthicLibTests.vcxproj.user
│ │ ├── ForthicLibTests_TemporaryKey.pfx
│ │ ├── GlobalModuleTest.cpp
│ │ ├── InterpreterTest.cpp
│ │ ├── Moduletest.cpp
│ │ ├── Package.appxmanifest
│ │ ├── TokenizerTest.cpp
│ │ ├── UnitTestApp.rd.xml
│ │ ├── UnitTestApp.xaml
│ │ ├── UnitTestApp.xaml.cpp
│ │ ├── UnitTestApp.xaml.h
│ │ ├── pch.cpp
│ │ └── pch.h
├── forthic-hs
│ ├── .gitignore
│ ├── Forthic
│ │ ├── GlobalModule.hs
│ │ ├── Interpreter.hs
│ │ ├── Module.hs
│ │ ├── StackItem.hs
│ │ ├── Tokenizer.hs
│ │ └── Types.hs
│ ├── Modules
│ │ └── ModuleA.hs
│ ├── README.md
│ ├── Sample1.hs
│ └── test_tokenizer.hs
├── forthic-jl
│ ├── Forthic
│ │ ├── Project.toml
│ │ ├── src
│ │ │ ├── Forthic.jl
│ │ │ ├── global_module.jl
│ │ │ ├── interpreter.jl
│ │ │ ├── module.jl
│ │ │ ├── test.jl
│ │ │ └── tokenizer.jl
│ │ ├── test.forthic
│ │ └── test_interp.forthic
│ └── README.md
├── forthic-nvcc
│ ├── .gitignore
│ ├── Interpreter.cpp
│ ├── Interpreter.h
│ ├── Makefile
│ ├── Module.cpp
│ ├── Module.h
│ ├── S_StartArray.cpp
│ ├── S_StartArray.h
│ ├── S_String.cpp
│ ├── S_String.h
│ ├── S_Variable.cpp
│ ├── S_Variable.h
│ ├── StackItem.cpp
│ ├── StackItem.h
│ ├── Token.cpp
│ ├── Token.h
│ ├── Tokenizer.cpp
│ ├── Tokenizer.h
│ ├── W_Definition.cpp
│ ├── W_Definition.h
│ ├── W_EndArray.cpp
│ ├── W_EndArray.h
│ ├── W_PushItem.cpp
│ ├── W_PushItem.h
│ ├── Word.cpp
│ ├── Word.h
│ ├── deps.mk
│ ├── deps.py
│ ├── examples
│ │ ├── BHM-p.62-LP.forthic
│ │ ├── BHM-p.62.forthic
│ │ ├── Ch2Module.cu
│ │ ├── Ch2Module.h
│ │ ├── Example-2.1.forthic
│ │ ├── Example-2.2.forthic
│ │ ├── TestContext.forthic
│ │ ├── checkDimension.forthic
│ │ ├── checkThreadIndex.forthic
│ │ ├── main.cpp
│ │ ├── sumArraysOnGPU-managed.forthic
│ │ ├── sumArraysOnGPU-small-case.forthic
│ │ ├── sumArraysOnGPU.forthic
│ │ ├── sumMatrix2DGrid1DBlock.forthic
│ │ └── sumMatrix2DGrid2DBlock.forthic
│ ├── m_cuda
│ │ ├── I_AsDim3.cu
│ │ ├── I_AsDim3.h
│ │ ├── M_Cuda.cu
│ │ ├── M_Cuda.h
│ │ ├── S_CudaDeviceProp.cu
│ │ ├── S_CudaDeviceProp.h
│ │ ├── S_Dim3.cu
│ │ └── S_Dim3.h
│ ├── m_gauss
│ │ ├── M_Gauss.cu
│ │ └── M_Gauss.h
│ ├── m_global
│ │ ├── I_AsArray.cpp
│ │ ├── I_AsArray.h
│ │ ├── I_AsFloat.cpp
│ │ ├── I_AsFloat.h
│ │ ├── I_AsFloatStar.cpp
│ │ ├── I_AsFloatStar.h
│ │ ├── I_AsInt.cpp
│ │ ├── I_AsInt.h
│ │ ├── I_AsIntStar.cpp
│ │ ├── I_AsIntStar.h
│ │ ├── I_AsModule.cpp
│ │ ├── I_AsModule.h
│ │ ├── I_AsString.cpp
│ │ ├── I_AsString.h
│ │ ├── I_AsTimePoint.cpp
│ │ ├── I_AsTimePoint.h
│ │ ├── I_AsVoidStar.cpp
│ │ ├── I_AsVoidStar.h
│ │ ├── M_Global.cpp
│ │ ├── M_Global.h
│ │ ├── S_Address.cpp
│ │ ├── S_Address.h
│ │ ├── S_Array.cpp
│ │ ├── S_Array.h
│ │ ├── S_Float.cpp
│ │ ├── S_Float.h
│ │ ├── S_Int.cpp
│ │ ├── S_Int.h
│ │ ├── S_Module.cpp
│ │ ├── S_Module.h
│ │ ├── S_TimePoint.cpp
│ │ └── S_TimePoint.h
│ ├── m_lp
│ │ ├── M_LP.cu
│ │ ├── M_LP.h
│ │ ├── S_LP.cu
│ │ ├── S_LP.h
│ │ ├── S_LPEquation.cu
│ │ └── S_LPEquation.h
│ └── test
│ │ ├── GlobalModuleTest.cpp
│ │ ├── GlobalModuleTest.h
│ │ ├── InterpreterTest.cpp
│ │ ├── InterpreterTest.h
│ │ ├── ModuleTest.cpp
│ │ ├── ModuleTest.h
│ │ ├── Test.cpp
│ │ ├── Test.h
│ │ ├── TokenizerTest.cpp
│ │ ├── TokenizerTest.h
│ │ ├── dummy.cu
│ │ └── main_test.cpp
├── forthic-rs
│ ├── .gitignore
│ ├── Cargo.lock
│ ├── Cargo.toml
│ ├── Makefile
│ ├── src
│ │ ├── errors.rs
│ │ ├── lib.rs
│ │ ├── main.rs
│ │ ├── token.rs
│ │ └── tokenizer.rs
│ └── tests
│ │ ├── .gitignore
│ │ ├── Cargo.lock
│ │ ├── Cargo.toml
│ │ └── src
│ │ ├── lib.rs
│ │ └── test_tokenizer.rs
├── forthic-swift
│ ├── .gitignore
│ └── Forthic
│ │ ├── .gitignore
│ │ ├── Package.resolved
│ │ ├── Package.swift
│ │ ├── README.md
│ │ ├── Sources
│ │ └── Forthic
│ │ │ ├── Interpreter.swift
│ │ │ ├── Module.swift
│ │ │ ├── Tokenizer.swift
│ │ │ ├── Tokens.swift
│ │ │ └── global_module.swift
│ │ └── Tests
│ │ └── ForthicTests
│ │ ├── GlobalModuleTests.swift
│ │ ├── InterpreterTests.swift
│ │ └── TokenizerTests.swift
├── forthic-zig
│ ├── .gitignore
│ ├── Makefile
│ ├── build.zig
│ ├── build.zig.zon
│ └── src
│ │ ├── forthic
│ │ ├── token.zig
│ │ └── tokenizer.zig
│ │ ├── main.zig
│ │ └── root.zig
└── pre-forthic
│ ├── forrth-asm
│ ├── .gitattributes
│ ├── .gitignore
│ ├── forrth.sln
│ └── forrth
│ │ ├── BLOCK-1.forrth
│ │ ├── Constants.inc
│ │ ├── CoreWords.asm
│ │ ├── DEFINITION_DESIGN.txt
│ │ ├── Definitions.asm
│ │ ├── Dictionary.asm
│ │ ├── DictionaryMacros.inc
│ │ ├── ERROR_DESIGN.txt
│ │ ├── Engine.asm
│ │ ├── Entry.inc
│ │ ├── Error.asm
│ │ ├── Exercise.asm
│ │ ├── ForrthData.asm
│ │ ├── LITERALS_DESIGN.txt
│ │ ├── Literals.asm
│ │ ├── NESTED_INPUT.txt
│ │ ├── REWRITE_1.txt
│ │ ├── STACK_DESIGN.txt
│ │ ├── STRINGS.txt
│ │ ├── UninitializedData.asm
│ │ ├── forrth.cpp
│ │ ├── forrth.vcxproj
│ │ ├── forrth.vcxproj.filters
│ │ ├── stdafx.cpp
│ │ ├── stdafx.h
│ │ └── targetver.h
│ ├── forrth-cs
│ ├── .gitattributes
│ ├── .gitignore
│ ├── HoloForrth.sln
│ └── HoloForrth
│ │ ├── AppView.cs
│ │ ├── AppViewSource.cs
│ │ ├── Assets
│ │ ├── LockScreenLogo.scale-200.png
│ │ ├── SplashScreen.scale-200.png
│ │ ├── Square150x150Logo.scale-200.png
│ │ ├── Square44x44Logo.scale-200.png
│ │ ├── Square44x44Logo.targetsize-24_altform-unplated.png
│ │ ├── StoreLogo.png
│ │ └── Wide310x150Logo.scale-200.png
│ │ ├── Blocks.cs
│ │ ├── Common
│ │ ├── CameraResources.cs
│ │ ├── DeviceResources.cs
│ │ ├── DirectXHelper.cs
│ │ ├── Disposer.cs
│ │ ├── InteropStatics.cs
│ │ └── StepTimer.cs
│ │ ├── Content
│ │ ├── ShaderStructures.cs
│ │ ├── Shaders
│ │ │ ├── GeometryShader.hlsl
│ │ │ ├── PixelShader.hlsl
│ │ │ ├── VPRTVertexShader.hlsl
│ │ │ ├── VertexShader.hlsl
│ │ │ └── VertexShaderShared.hlsl
│ │ ├── SpatialInputHandler.cs
│ │ └── SpinningCubeRenderer.cs
│ │ ├── CoreWords.cs
│ │ ├── Entry.cs
│ │ ├── Forrth.cs
│ │ ├── FxCompile.cs
│ │ ├── HoloForrth.csproj
│ │ ├── HoloForrthMain.cs
│ │ ├── Literals.cs
│ │ ├── MessageBuffer.cs
│ │ ├── Package.appxmanifest
│ │ ├── Program.cs
│ │ ├── Properties
│ │ ├── AssemblyInfo.cs
│ │ └── Default.rd.xml
│ │ ├── Specs
│ │ ├── COMMANDLINE_UI.txt
│ │ ├── FORRTH.txt
│ │ ├── LITERALS.txt
│ │ └── PROCESSING_INPUT.txt
│ │ └── ms.fxcompile.targets
│ ├── forrth-erl
│ ├── .gitignore
│ ├── BLOCK-1.forrth
│ ├── ferrth.erl
│ └── specs
│ │ ├── DEFINITIONS.txt
│ │ ├── DICTIONARY.txt
│ │ ├── FERRTH.txt
│ │ ├── PARSE_INPUT.txt
│ │ ├── PROCESS_LOOP.txt
│ │ └── TASKS
│ └── forrth-f90
│ ├── .gitignore
│ ├── BLOCK-1.forrth
│ ├── Makefile
│ ├── constants.f90
│ ├── core_words.f90
│ ├── forrth_entry_sr.f90
│ ├── forrth_sr.f90
│ ├── forrth_types.f90
│ ├── forrthtran.f90
│ ├── items.f90
│ ├── parse_input.f90
│ ├── process_input.f90
│ └── specs
│ ├── DEFINITIONS.txt
│ ├── FORRTHTRAN.txt
│ ├── PARAM_STACK.txt
│ ├── PARSE_INPUT.txt
│ ├── PROCESS_INPUT.txt
│ └── TASKS
├── forthic-in
├── README.md
├── docs
│ ├── v1
│ │ └── README.md
│ ├── v2
│ │ ├── cache_module.md
│ │ ├── confluence_module.md
│ │ ├── datasets_module.md
│ │ ├── excel_module.md
│ │ ├── gdoc_module.md
│ │ ├── global_module.md
│ │ ├── gsheet_module.md
│ │ ├── html_module.md
│ │ ├── isoweek_module.md
│ │ ├── jinja_module.md
│ │ ├── jira_module.md
│ │ └── org_module.md
│ └── v3
│ │ ├── cache_module.md
│ │ ├── datasets_module.md
│ │ ├── global_module.md
│ │ ├── gsheet_module.md
│ │ ├── intake_module.md
│ │ ├── jinja_module.md
│ │ ├── jira_module.md
│ │ └── org_module.md
├── forthic
│ ├── __init__.py
│ ├── py.typed
│ ├── tests
│ │ ├── v1
│ │ │ └── README.md
│ │ ├── v2
│ │ │ ├── __init__.py
│ │ │ ├── modules
│ │ │ │ ├── confluence_context.py
│ │ │ │ ├── jira_context.py
│ │ │ │ ├── test_confluence_module.py
│ │ │ │ ├── test_gdoc_module.py
│ │ │ │ ├── test_html_module.py
│ │ │ │ ├── test_isoweek_module.py
│ │ │ │ ├── test_jira_module.py
│ │ │ │ └── test_org_module.py
│ │ │ ├── sample_date_module.py
│ │ │ ├── test_global_module.py
│ │ │ ├── test_interpreter.py
│ │ │ ├── test_tokenizer.py
│ │ │ └── test_tokenizer_errors.py
│ │ └── v3
│ │ │ ├── __init__.py
│ │ │ ├── modules
│ │ │ ├── datasets_data
│ │ │ │ ├── .gitignore
│ │ │ │ └── README.md
│ │ │ ├── jira_context.py
│ │ │ ├── test_v3_datasets_module.py
│ │ │ ├── test_v3_isoweek_module.py
│ │ │ ├── test_v3_jira_module.py
│ │ │ ├── test_v3_org_module.py
│ │ │ ├── test_v3_trino_module.py
│ │ │ └── trino_context.py
│ │ │ ├── sample_date_module.py
│ │ │ ├── test_v3_global_module.py
│ │ │ ├── test_v3_interpreter.py
│ │ │ └── test_v3_tokenizer.py
│ ├── utils
│ │ ├── __init__.py
│ │ ├── creds.py
│ │ └── errors.py
│ ├── v1
│ │ └── README.md
│ ├── v2
│ │ ├── flambda.py
│ │ ├── global_module.py
│ │ ├── interfaces.py
│ │ ├── interpreter.py
│ │ ├── module.py
│ │ ├── modules
│ │ │ ├── __init__.py
│ │ │ ├── airtable_module.py
│ │ │ ├── alation_module.py
│ │ │ ├── cache_module.py
│ │ │ ├── confluence_module.py
│ │ │ ├── datasets_module.py
│ │ │ ├── excel_module.py
│ │ │ ├── gdoc_module.py
│ │ │ ├── gsheet_module.py
│ │ │ ├── html_module.py
│ │ │ ├── isoweek_module.py
│ │ │ ├── jinja_module.py
│ │ │ ├── jira_module.py
│ │ │ ├── org_module.py
│ │ │ └── wiki_status_module.py
│ │ ├── profile.py
│ │ ├── tokenizer.py
│ │ └── tokens.py
│ └── v3
│ │ ├── README.md
│ │ ├── __init__.py
│ │ ├── global_module.py
│ │ ├── interfaces.py
│ │ ├── interpreter.py
│ │ ├── module.py
│ │ ├── modules
│ │ ├── __init__.py
│ │ ├── airtable_module.py
│ │ ├── alation_module.py
│ │ ├── cache_module.py
│ │ ├── confluence_module.py
│ │ ├── datasets_module.py
│ │ ├── excel_module.py
│ │ ├── gdoc_module.py
│ │ ├── gsheet_module.py
│ │ ├── html_module.py
│ │ ├── intake_module.py
│ │ ├── isoweek_module.py
│ │ ├── jinja_module.py
│ │ ├── jira_module.py
│ │ ├── org_module.py
│ │ ├── stats_module.py
│ │ ├── svg_module.py
│ │ ├── trino_module.py
│ │ ├── ui_module.py
│ │ └── wiki_status_module.py
│ │ ├── profile.py
│ │ ├── tokenizer.py
│ │ └── tokens.py
├── setup.py
└── setup_helpers.py
├── forthic-js
├── Makefile
├── css
│ └── forthic.css
├── global_module.mjs
├── interpreter.mjs
├── module.mjs
├── modules
│ ├── html_module.mjs
│ └── org_module.mjs
├── run-server.sh
├── test_browser_all.mjs
├── tests.html
├── tests
│ ├── modules
│ │ └── test_html_module.mjs
│ ├── sample_date_module.mjs
│ ├── test_all.mjs
│ ├── test_global_module.mjs
│ ├── test_interpreter.mjs
│ ├── test_tokenizer.mjs
│ ├── test_tokenizer_errors.mjs
│ └── utils.mjs
└── tokenizer.mjs
├── forthic-py
├── .gitignore
├── LICENSE
├── Makefile
├── README.md
├── __init__.py
├── docs
│ ├── cache_module.md
│ ├── datasets_module.md
│ ├── global_module.md
│ ├── gsheet_module.md
│ ├── intake_module.md
│ ├── isoweek_module.md
│ ├── jinja_module.md
│ ├── jira_module.md
│ └── org_module.md
├── pyproject.toml
├── src
│ ├── README.md
│ ├── __init__.py
│ └── forthic
│ │ ├── __init__.py
│ │ ├── global_module.py
│ │ ├── interfaces.py
│ │ ├── interpreter.py
│ │ ├── module.py
│ │ ├── modules
│ │ ├── __init__.py
│ │ ├── airtable_module.py
│ │ ├── alation_module.py
│ │ ├── cache_module.py
│ │ ├── confluence_module.py
│ │ ├── datasets_module.py
│ │ ├── excel_module.py
│ │ ├── gdoc_module.py
│ │ ├── gsheet_module.py
│ │ ├── html_module.py
│ │ ├── intake_module.py
│ │ ├── isoweek_module.py
│ │ ├── jinja_module.py
│ │ ├── jira_module.py
│ │ ├── org_module.py
│ │ ├── stats_module.py
│ │ ├── svg_module.py
│ │ ├── ui_module.py
│ │ └── wiki_status_module.py
│ │ ├── profile.py
│ │ ├── tokenizer.py
│ │ ├── tokens.py
│ │ └── utils
│ │ ├── __init__.py
│ │ ├── creds.py
│ │ └── errors.py
├── tests
│ ├── __init__.py
│ ├── modules
│ │ ├── __init__.py
│ │ ├── datasets_data
│ │ │ ├── .gitignore
│ │ │ └── README.md
│ │ ├── jira_context.py
│ │ ├── test_datasets_module.py
│ │ ├── test_isoweek_module.py
│ │ ├── test_jira_module.py
│ │ └── test_org_module.py
│ ├── sample_date_module.py
│ ├── test_global_module.py
│ ├── test_interpreter.py
│ ├── test_tokenizer.py
│ └── tests_py
│ │ └── v3
│ │ └── modules
│ │ └── datasets_data
│ │ └── datasets
│ │ └── greek.dataset
└── tox.ini
├── forthic-rb
├── .gitignore
├── .standard.yml
├── CHANGELOG.md
├── Gemfile
├── Gemfile.lock
├── Guardfile
├── README.md
├── Rakefile
├── bin
│ ├── console
│ └── setup
├── forthic.gemspec
├── lib
│ ├── forthic.rb
│ └── forthic
│ │ ├── code_location.rb
│ │ ├── forthic_error.rb
│ │ ├── forthic_module.rb
│ │ ├── global_module.rb
│ │ ├── interpreter.rb
│ │ ├── positioned_string.rb
│ │ ├── token.rb
│ │ ├── tokenizer.rb
│ │ ├── variable.rb
│ │ ├── version.rb
│ │ └── words
│ │ ├── definition_word.rb
│ │ ├── end_array_word.rb
│ │ ├── end_module_word.rb
│ │ ├── imported_word.rb
│ │ ├── map_word.rb
│ │ ├── module_memo_bang_at_word.rb
│ │ ├── module_memo_bang_word.rb
│ │ ├── module_memo_word.rb
│ │ ├── module_word.rb
│ │ ├── push_value_word.rb
│ │ ├── start_module_word.rb
│ │ └── word.rb
├── sig
│ └── forthic.rbs
└── test
│ ├── test_forthic.rb
│ ├── test_global_module.rb
│ ├── test_helper.rb
│ ├── test_interpreter.rb
│ └── test_tokenizer.rb
├── forthic-react
└── v1
│ ├── .gitignore
│ ├── Makefile
│ ├── README.md
│ ├── docs
│ ├── elements
│ │ ├── ForthicPage.md
│ │ ├── RecordsTable.md
│ │ ├── TicketsModal.md
│ │ └── UserNav.md
│ └── modules
│ │ ├── global_module.md
│ │ └── recharts_module.md
│ ├── package-lock.json
│ ├── package.json
│ ├── public
│ ├── favicon.ico
│ ├── index.html
│ ├── logo192.png
│ ├── logo512.png
│ ├── manifest.json
│ └── robots.txt
│ ├── src
│ ├── forthic
│ │ ├── elements
│ │ │ ├── ForthicButton.jsx
│ │ │ ├── ForthicPage.js
│ │ │ ├── RawHTML.js
│ │ │ ├── RecordsTable.js
│ │ │ ├── TicketsModal.js
│ │ │ ├── UserNav.js
│ │ │ └── form
│ │ │ │ ├── Attachment.jsx
│ │ │ │ ├── ConfigurableForm.jsx
│ │ │ │ ├── DateInput.jsx
│ │ │ │ ├── Dropdown.jsx
│ │ │ │ ├── Html.jsx
│ │ │ │ ├── Markdown.jsx
│ │ │ │ ├── MultiCheckbox.jsx
│ │ │ │ ├── RadioCheckbox.jsx
│ │ │ │ ├── TextInput.jsx
│ │ │ │ └── Textarea.jsx
│ │ ├── global_module.js
│ │ ├── global_module.test.js
│ │ ├── interpreter.js
│ │ ├── interpreter.test.js
│ │ ├── module.js
│ │ ├── modules
│ │ │ ├── intake_module.js
│ │ │ └── recharts_module.js
│ │ ├── tokenizer.js
│ │ ├── tokenizer.test.js
│ │ └── utils.js
│ ├── index.css
│ ├── index.js
│ └── setupTests.js
│ └── update_template.py
├── forthic-ts
├── .gitignore
├── .prettierignore
├── .prettierrc
├── LICENSE
├── README.md
├── eslint.config.mjs
├── jest.config.js
├── package-lock.json
├── package.json
├── src
│ ├── forthic
│ │ ├── errors.ts
│ │ ├── global_module.ts
│ │ ├── global_module
│ │ │ └── map_word.ts
│ │ ├── interpreter.ts
│ │ ├── module.ts
│ │ ├── tests
│ │ │ ├── error.test.ts
│ │ │ ├── global_module.test.ts
│ │ │ ├── interp_recovery.test.ts
│ │ │ ├── interpreter.test.ts
│ │ │ ├── interpreter_validation.test.ts
│ │ │ ├── streamingRun.test.ts
│ │ │ └── tokenizer.test.ts
│ │ ├── tokenizer.ts
│ │ └── utils.ts
│ └── index.ts
├── tsconfig.cjs.json
├── tsconfig.esm.json
└── tsconfig.json
├── make-delete-secrets.ps1
├── make-install.ps1
├── make-server.ps1
└── server
├── __init__.py
├── apps
├── README.md
├── archetypes
│ └── jira-time-in-state
│ │ ├── README.md
│ │ ├── config.json
│ │ └── main.forthic
├── coding-forthic
│ ├── cache-example
│ │ ├── config.json
│ │ └── main.forthic
│ ├── gsheet-example
│ │ ├── config.json
│ │ └── main.forthic
│ ├── intake-branched
│ │ ├── .cache
│ │ ├── README.md
│ │ ├── config.json
│ │ ├── intake-branched - Branched.tsv
│ │ ├── intake-branched - Continue.tsv
│ │ ├── intake-branched - Self-service.tsv
│ │ └── main.forthic
│ ├── intake-multistep
│ │ ├── .cache
│ │ ├── README.md
│ │ ├── config.json
│ │ ├── intake-multistep - Multistep 2.tsv
│ │ ├── intake-multistep - Multistep.tsv
│ │ └── main.forthic
│ ├── intake-simple
│ │ ├── .cache
│ │ ├── README.md
│ │ ├── config.json
│ │ ├── intake-simple - Simple.tsv
│ │ └── main.forthic
│ ├── jira-example
│ │ ├── config.json
│ │ └── main.forthic
│ ├── simple
│ │ ├── config.json
│ │ └── main.forthic
│ └── time-in-state
│ │ ├── README.md
│ │ ├── config.json
│ │ ├── main.forthic
│ │ ├── main.forthic.part1-final
│ │ ├── main.forthic.part1-start
│ │ ├── main.forthic.part2-final
│ │ ├── main.forthic.part2-start
│ │ └── main.forthic.start
├── talks
│ ├── jira
│ │ ├── config.json
│ │ └── main.forthic
│ ├── map
│ │ ├── config.json
│ │ └── main.forthic
│ └── simple
│ │ ├── config.json
│ │ └── main.forthic
└── tests
│ ├── forthic-react-smoke-test
│ ├── config.json
│ └── main.forthic
│ ├── gsheet-smoke-test
│ ├── config.json
│ └── main.forthic
│ ├── screen-smoke-test
│ ├── config.json
│ ├── main.forthic
│ └── screens
│ │ └── screen1.forthic
│ ├── server-interpret-test
│ ├── config.json
│ └── main.forthic
│ └── smoke-test
│ ├── config.json
│ └── main.forthic
├── contexts_module.py
├── interp.py
├── oauth_cfg.json
├── run.py
├── simple_module.py
├── static
├── js
│ ├── babel.min.js
│ ├── prop-types.min.js
│ ├── react-dom.production.min.js
│ └── react.production.min.js
└── react
│ └── react-app
│ └── v1
│ ├── main.29ad0b1c.js
│ ├── main.29ad0b1c.js.LICENSE.txt
│ ├── main.29ad0b1c.js.map
│ ├── main.add8d827.css
│ └── manifest.json
└── templates
├── basic.html
├── example.html
├── home.html
├── main.html
├── react
└── react-app
│ └── v1
│ └── main.html
├── talks.html
├── update_app_creds_form.html
└── update_password_form.html
/.gitignore:
--------------------------------------------------------------------------------
1 | forthic-env
2 | myenv
3 | *.swp
4 | TODO
5 | *.pyc
6 | .secrets*
7 | .key*
8 | one-ofs
9 | *.cache
10 | apps/examples/static/forthic/*
11 | *.DS_Store
12 | *.ignore
13 | .vscode
14 | .coverage
15 | forthic.egg-info
16 | build
17 | .tox
18 | tmp
--------------------------------------------------------------------------------
/Makefile:
--------------------------------------------------------------------------------
1 | SHELL := /bin/bash
2 | TOX_INI = -c ./forthic-py/tox.ini
3 |
4 | .PHONY: install-forthic test credentials-server
5 |
6 | # ----- Example server --------------------------------------------------------
7 | example-server: install-forthic
8 | source myenv/bin/activate && cd server && FLASK_APP=run.py FLASK_DEBUG=true flask run --port=8000
9 |
10 | myenv:
11 | python3 -m venv myenv
12 |
13 | install-forthic: myenv
14 | source myenv/bin/activate && python -m pip install -U pip && cd ./forthic-py && pip install . && pip install Flask
15 |
16 | delete-secrets:
17 | rm server/.key
18 | rm server/.secrets
19 |
20 | credentials-server:
21 | FLASK_APP=apps/setup/run.py flask run --port=8000
22 |
23 | build-forthic-react:
24 | cd forthic-react/v1 && make build
25 |
26 |
27 | # ----- Tests ------------------------------------------------------------------
28 |
29 | test-py:
30 | cd forthic-py && make test
31 |
32 | test-js:
33 | cd forthic-js && make test
34 |
35 | test-react:
36 | cd forthic-react/v1 && make test
37 |
38 | test: test-py test-react
39 |
40 |
41 | test-rs:
42 | cd experimental/forthic-rs && make test
43 |
44 | test-zig:
45 | cd experimental/forthic-zig && make test
46 |
47 | test-experimental: test-rs test-zig
48 |
--------------------------------------------------------------------------------
/NOTES:
--------------------------------------------------------------------------------
1 | # NOTES
2 |
3 | This shows how to build and install a python module without publishing: https://towardsdatascience.com/building-a-python-package-without-publishing-e2d36c4686cd
4 |
5 | To create and use a virtual python environment:
6 | * python3 -m venv myenv
7 | * .\myenv\Scripts\activate
8 |
9 | To install locally, use `pip install .`
--------------------------------------------------------------------------------
/NOTICE:
--------------------------------------------------------------------------------
1 | Copyright 2020 LinkedIn Corporation
2 | All Rights Reserved.
3 |
4 | Licensed under the BSD 2-Clause License (the "License").
5 | See LICENSE in the project root for license information.
6 |
7 |
8 | This product includes:
9 |
10 | * N/A
11 |
--------------------------------------------------------------------------------
/docs/app-architecture.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linkedin/forthic/dd84e4145e2a89df83026313d22e8885835502ab/docs/app-architecture.png
--------------------------------------------------------------------------------
/docs/code-architecture.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linkedin/forthic/dd84e4145e2a89df83026313d22e8885835502ab/docs/code-architecture.png
--------------------------------------------------------------------------------
/docs/index.md:
--------------------------------------------------------------------------------
1 | # Forthic
2 |
3 | Forthic is a language for concisely creating user-tweakable apps.
4 |
5 | ## Contents
6 | ```{toctree}
7 | ---
8 | maxdepth: 3
9 | ---
10 |
11 | OVERVIEW
12 | EXAMPLES
13 | ARCHITECTURE
14 | IDIOMS
15 | PHILOSOPHY
16 | THREAT_MODEL
17 | ```
18 |
19 | ## Module Reference
20 | ```{toctree}
21 | ---
22 | maxdepth: 3
23 | ---
24 |
25 | modules/global_module
26 | modules/cache_module
27 | modules/confluence_module
28 | modules/datasets_module
29 | modules/excel_module
30 | modules/gsheet_module
31 | modules/html_module
32 | modules/jinja_module
33 | modules/jira_module
34 | modules/org_module
35 | ```
36 |
37 |
--------------------------------------------------------------------------------
/docs/modules/cache_module.md:
--------------------------------------------------------------------------------
1 | # cache_module
2 |
3 | The cache module allows you to store the top of the stack on disk as JSON (the
4 | stored object must be JSON serializable) and retrieve it later. This is useful
5 | for storing expensive computations or API responses.
6 |
7 | The data is stored in a `.cache` file in the working directory. The directory
8 | can be set using the `CWD!` word.
9 |
10 | Every object is stored and retrieved using a label.
11 |
12 | ## Example
13 | ```
14 | ["cache"] USE-MODULES
15 |
16 | "~/my_stuff" cache.CWD! # Sets the current working directory
17 | [1 2 3 "Howdy"] "my_array" cache.CACHE! # Stores the array in the cache
18 |
19 | "my_array" cache.CACHE@ # Retrieves the array from cache
20 | 3 NTH # ([1 2 3 "Howdy"] -- "Howdy")
21 | ```
22 |
23 | ## Reference
24 |
25 | ### CACHE!
26 | `(object key --)`
27 |
28 | Stores `object` in the cache at the specified `key`. The object will be
29 | serialized to JSON.
30 |
31 |
32 | ### CACHE@
33 | `(key -- object)`
34 |
35 | Retrieves an object from the cache at the specified `key`. The object will be
36 | deserialized from JSON.
--------------------------------------------------------------------------------
/docs/modules/jinja_module.md:
--------------------------------------------------------------------------------
1 | # jinja_module
2 |
3 | The jinja module uses the Python [jinja templating
4 | package](https://jinja.palletsprojects.com/en/2.11.x/) to render arbitrary
5 | strings using record data.
6 |
7 | Typically, this is the best choice for rendering html, emails, or anything that
8 | involves looping along with interpolation.
9 |
10 | ## Example
11 | ```
12 | ["jinja"] USE-MODULES
13 |
14 | : MY-DATA [
15 | ["letters" ["alpha" "beta" "gamma"]]
16 | ] REC;
17 |
18 | : MY-TEMPLATE "
19 |
20 | {% for letter in letters %}
21 | - {{ letter }}
22 | {% endfor %}
23 |
24 | ";
25 |
26 | MY-TEMPLATE MY-DATA jira.RENDER
27 | ```
28 |
29 | ## Reference
30 |
31 | ### RENDER
32 | `(template record -- string)`
33 | Given a jinja template and a Forthic record, renders a string using the jinja engine.
34 |
35 | NOTE: The record must have fields that are valid Python variable names since
36 | these are used within the jinja template.
--------------------------------------------------------------------------------
/experimental/forthic-cpp/.gitignore:
--------------------------------------------------------------------------------
1 | .vs/
2 | *.swp
3 | */bin/
4 | */obj/
5 | obj
6 | bin
7 | packages/
8 | Debug/
9 | App2/
10 | Direct3D/
11 | Generated\ Files
12 |
--------------------------------------------------------------------------------
/experimental/forthic-cpp/ForthicLib/Defines.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | #define FORTHICLIB_API __declspec(dllexport)
4 |
--------------------------------------------------------------------------------
/experimental/forthic-cpp/ForthicLib/ForthicLib.cpp:
--------------------------------------------------------------------------------
1 | #include "pch.h"
2 | #include "ForthicLib.h"
3 |
--------------------------------------------------------------------------------
/experimental/forthic-cpp/ForthicLib/ForthicLib.h:
--------------------------------------------------------------------------------
1 | #pragma once
--------------------------------------------------------------------------------
/experimental/forthic-cpp/ForthicLib/Modules/GlobalItemGetters.cpp:
--------------------------------------------------------------------------------
1 | #include "pch.h"
2 | #include "GlobalItemGetters.h"
3 |
4 | string FORTHICLIB_API ForthicGetString(StackItem *item)
5 | {
6 | if (auto i = dynamic_cast(item))
7 | {
8 | return i->GetString();
9 | }
10 | else
11 | {
12 | throw "Item does not implement IGetString";
13 | }
14 | }
15 |
16 | vector> FORTHICLIB_API ForthicGetArray(StackItem *item)
17 | {
18 | if (auto i = dynamic_cast(item))
19 | {
20 | return i->GetArray();
21 | }
22 | else
23 | {
24 | throw "Item does not implement IGetArray";
25 | }
26 | }
27 |
28 | shared_ptr FORTHICLIB_API ForthicGetValue(StackItem *item)
29 | {
30 | if (auto i = dynamic_cast(item))
31 | {
32 | return i->GetValue();
33 | }
34 | else
35 | {
36 | throw "Item does not implement IGetVariable";
37 | }
38 | }
39 |
40 | shared_ptr FORTHICLIB_API ForthicGetModule(StackItem *item)
41 | {
42 | if (auto i = dynamic_cast(item))
43 | {
44 | return i->GetModule();
45 | }
46 | else
47 | {
48 | throw "Item does not implement IGetModule";
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/experimental/forthic-cpp/ForthicLib/Modules/GlobalItemGetters.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 | #include
3 | #include
4 |
5 | #include "../Defines.h"
6 | #include "../StackItems/StackItem.h"
7 |
8 | class Module;
9 |
10 | using namespace std;
11 |
12 | class FORTHICLIB_API IGetString {
13 | public:
14 | virtual string GetString() = 0;
15 | };
16 |
17 | class FORTHICLIB_API IGetArray {
18 | public:
19 | virtual vector> GetArray() = 0;
20 | };
21 |
22 | class FORTHICLIB_API IGetValue {
23 | public:
24 | virtual shared_ptr GetValue() = 0;
25 | };
26 |
27 | class FORTHICLIB_API IGetModule {
28 | public:
29 | virtual shared_ptr GetModule() = 0;
30 | };
31 |
32 | string FORTHICLIB_API ForthicGetString(StackItem *item);
33 | vector> FORTHICLIB_API ForthicGetArray(StackItem *item);
34 | shared_ptr FORTHICLIB_API ForthicGetValue(StackItem *item);
35 | shared_ptr FORTHICLIB_API ForthicGetModule(StackItem *item);
36 |
--------------------------------------------------------------------------------
/experimental/forthic-cpp/ForthicLib/Modules/GlobalModule.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | #include
4 | #include
5 | #include
6 | #include