---------
Nift TODO 
---------

emojis: 🌈 🦄 ⚡ 💥 📂 🔥 📦 ⚠️ ⚙️ 🐰 🦡
 ascii: ⧨ ❖ ▶

TODO List (not in order of priority)
* [TODO] lua modules to recommend
	- https://luarocks.org/modules/openresty/lua-cjson https://luarocks.org/modules/xpol/rapidjson https://luarocks.org/modules/grafi/lunajson https://luarocks.org/modules/harningt/luajson https://luarocks.org/modules/x25/luajwt
	- https://luarocks.org/modules/gaspard/xml
	- https://luarocks.org/modules/gvvaughan/lyaml
	- https://luarocks.org/modules/gaspard/yaml
	- https://luarocks.org/modules/tomasguisasola/luasql-mysql 
	- https://luarocks.org/modules/dougcurrie/lsqlite3 (http://lua.sqlite.org/)
	- https://luarocks.org/modules/tomasguisasola/luasql-sqlite3 ()
	- https://luarocks.org/modules/leafo/moonscript (https://stackoverflow.com/questions/28511552/how-to-require-and-use-moonscript-functions https://stackoverflow.com/questions/41664338/how-to-call-a-function-from-moonscript-in-lua)
	- https://urn-lang.com/ 
	- https://amulet.works/
	- https://fennel-lang.org/
	- https://github.com/hengestone/lua-languages
	- http://terralang.org/getting-started.html#embedding-terra-lua-inside-of-c
	- https://github.com/gopherjs/gopherjs
	- https://luarocks.org/modules/hisham/luafilesystem https://luarocks.org/modules/moteus/lua-path
	- https://luarocks.org/modules/starius/luacrypto https://luarocks.org/modules/daurnimator/luaossl https://luarocks.org/modules/tomasguisasola/md5
	- https://luarocks.org/modules/olim/luasystem
	- https://luarocks.org/modules/luasocket/luasocket
	- https://luarocks.org/modules/ckobus/sys
	- https://luarocks.org/modules/daurnimator/http
	- https://luarocks.org/modules/luarocks/nixio (https://neopallium.github.io/nixio/modules/nixio.html https://github.com/openwrt/luci/blob/master/libs/luci-lib-nixio/docsrc/nixio.lua)
	- https://luarocks.org/modules/luarocks/lua-discount https://luarocks.org/modules/mpeterv/markdown
	- http://olivinelabs.com/lustache/
	- https://github.com/leafo/etlua
	- https://luarocks.org/modules/luarocks/luahaml
	- https://luarocks.org/modules/bungle/lua-resty-template
	- https://luarocks.org/modules/gvvaughan/luaposix http://25thandclement.com/~william/projects/lunix.html
	- https://luarocks.org/modules/moteus/lua-curl / https://luarocks.org/modules/luarocks/luacurl / https://luarocks.org/modules/sena-networks/luajit-curl 
	- https://leafo.net/lapis/
	- https://luarocks.org/modules/jakeg/lua-requests
	- https://luarocks.org/modules/benoitgermain/lanes https://luarocks.org/modules/moteus/lua-llthreads2
	- https://luajit.org/ext_ffi.html
	- https://scilua.org/ http://torch.ch/docs/getting-started.html#_ 
	- 
	- https://github.com/leafo/web_sanitize
	- https://github.com/leafo/cloud_storage
	- https://github.com/leafo/pgmoon
	- https://luarocks.org/modules/gvvaughan/lpeg (http://www.inf.puc-rio.br/~roberto/lpeg/lpeg.html)
	- https://libgit2.org/ (https://github.com/libgit2/luagit2)
	- https://github.com/pyericz/redux-lua
	- https://github.com/leafo/lua-mailgun
	- https://github.com/fengari-lua/fengari (https://fengari.io/)
	- http://moonstalk.org/
	- https://idevz.org/vanilla/
	- https://losinggeneration.com/gimlet/
	- http://keplerproject.github.io/xavante/
	- http://www.keplerproject.org/
	- https://github.com/sailorproject/sailor
	- https://github.com/sailorproject/valua


* [TODO] blog series on embedding lua in c++ worth checking
	- http://acamara.es/blog/2012/08/passing-variables-from-lua-5-2-to-c-and-vice-versa/

* [TODO] Possible image processing libraries
	- https://github.com/libvips/libvips
	- https://github.com/libvips/lua-vips
	- http://libvips.github.io/libvips/API/current/func-list.html


	sudo apt-get install libvips42 libvips-dev libvips-tools
	sudo luarocks install lua-vips

	- http://cimg.eu/
	- https://github.com/leafo/magick
	- http://ittner.github.io/lua-gd/
	- http://smallip.sourceforge.net/


* [TODO] Add in sql library/ies, eg. maybe:
	- http://cppcms.com/sql/cppdb/index.html
	- https://www.sqlapi.com/

* [TODO] add in json library/ies, eg. maybe:
	- https://www.quora.com/What-is-the-best-C-JSON-library
	- https://github.com/danielaparker/jsoncons/
	- https://github.com/nlohmann/json (considered good)
	- https://rapidjson.org/ (fast)
	- https://github.com/kazuho/picojson

* [TODO] add in inja template language
	- https://github.com/pantor/inja
	- https://pantor.github.io/inja/
see also
	- https://github.com/hughperkins/Jinja2CppLight
	- https://www.catnapgames.com/2013/04/09/nltemplate-html-template-library-for-c/

* [TODO] add documentation for compiling other languages to lua, eg.:
	- https://github.com/PaulBernier/castl
	- https://github.com/TypeScriptToLua/TypeScriptToLua
	- https://github.com/roblox-ts/roblox-ts (https://roblox-ts.github.io/)
	- https://github.com/bakpakin/Fennel (https://fennel-lang.org/)
	- https://github.com/dmitrii-eremin/python-lua

* [TODO] graphql for lua
	- https://github.com/bjornbytes/graphql-lua

* [TODO] check out for regular expressions:
	- 
	- https://github.com/VerbalExpressions/CppVerbalExpressions
	- https://github.com/google/re2
	-
	-

* [TODO] check out with javascript:
	- https://duktape.org/ (https://github.com/svaarala/duktape)
	-

* [TODO] suggested parsers - javascript/node, ruby (irb, pry), python, lua, bash

* [TODO] check out POCO https://pocoproject.org/about.html

* [TODO**] try passing string rather than istream to read_and_process()
* [TODO**] changed how variable layers are done so it works with multithreading (add VLayer* parent to each layer)
		-- lots of reasons why that's unlikely to work still, eg. shared resources within Parser


* [TODO] add multi-threading to Nift command `status`

* [TODO] output @system/@script without piping to file if using std::cout and 1 build thread (don't forget to use os_mtx)
	- https://stackoverflow.com/questions/3318714/check-if-ostream-object-is-cout-or-ofstream-c

* [TODO] build output file if it doesn't already exist when tracking, makes sure other files with paths to it don't fail to build before they are successfully built themselves

* [TODO] add project name to ProjectInfo.h, .nsm/nift.config etc. with @[projectname] variable/syntax

* [TODO] add script extension option to track commands

* [TODO] add error handling for rename etc. throughout

* [TODO] add \a, \0 and \r escape characters when reading parameters
* [TODO] add more html entities (try to be similar to latex)
* [TODO] add @char/@ch syntax to template language (do both latex and html equivalents)

* [TODO] need syntax in the template language to ensure existence of a file given relative path from the page
* [TODO] further clean up reading parameters and parsing them
* [TODO] implement better variable types with scoping, constants and privates (with privates say you have x.first and x.second, only allow x.* functions to modify x.[first/second] .. but how to do that, and what about ??
	- https://www.geeksforgeeks.org/regex-regular-expression-in-c/
	- https://www.regular-expressions.info/stdregex.html
* [TODO] implement type defs and function defs
* [TODO] can we add run_function() function for multithreading, including hard-coded functions?

* [TODO] consider using file hashes for incremental builds, or even just keep a copy of files to compare against
	- eg. https://github.com/d-bahr/CRCpp

* [TODO] add way to build non-tracked pages (including without even being a site, and/or without having a page to output to)
	- need to be able to do both outputfile to stdout as well as programmingoutput
	- maybe:
		- nsm build cont-path (template-path) output-path
		- nsm render cont-path (template-path)
		- nsm render-name name
		- nsm run cont-path (template-path)
		- nsm run-name name
