From 313e059f367f2ac291cd409e77d22673f9595848 Mon Sep 17 00:00:00 2001 From: Qrius Date: Wed, 5 Mar 2025 08:41:05 +0100 Subject: First iteration of py skaldpress version --- Makefile | 38 ++++ pyproject.toml | 4 +- skaldpress.1 | 96 ++++++++++ skaldpress_main.rs | 324 +++++++++++++++++++++++++++++++ smp.1 | 105 ++++++++++ src/skaldpress/__init__.py | 6 + src/skaldpress/file_metadata_extract.rs | 0 src/skaldpress/main.py | 326 ++++++++++++++++++++++++++++++++ src/skaldpress/metadata_parser.py | 74 ++++++++ src/skaldpress/smp_macros.py | 1 + src/smp/__init__.py | 13 +- src/smp/builtins.py | 6 +- src/smp/macro_processor.py | 76 +++++--- tests/input_files/array_each_1 | 7 - tests/input_files/array_push_1 | 5 - tests/input_files/array_push_2 | 5 - tests/input_files/array_push_3 | 8 - tests/input_files/define_1 | 5 - tests/input_files/define_2 | 3 - tests/input_files/dnl_1 | 4 - tests/input_files/dnl_2 | 4 - tests/input_files/dnl_3 | 4 - tests/input_files/dnl_4 | 4 - tests/input_files/explode_1 | 5 - tests/input_files/explode_2 | 6 - tests/input_files/format_time_1 | 3 - tests/input_files/ifdef_1 | 6 - tests/input_files/ifdef_2 | 3 - tests/input_files/ifdef_3 | 3 - tests/input_files/ifeq_1 | 3 - tests/input_files/ifeq_2 | 3 - tests/input_files/ifeq_3 | 3 - tests/input_files/ifeq_4 | 3 - tests/input_files/ifndef_1 | 3 - tests/input_files/ifndef_2 | 4 - tests/input_files/ifndef_3 | 4 - tests/input_files/ifneq_1 | 3 - tests/input_files/ifneq_2 | 3 - tests/input_files/ifneq_3 | 3 - tests/input_files/ifneq_4 | 3 - tests/input_files/include_1 | 3 - tests/input_files/include_2 | 4 - tests/input_files/markdown_html_1 | 5 - tests/input_files/markdown_html_2 | 5 - tests/input_files/non_macro_html | 7 - tests/input_files/shell_1 | 3 - tests/input_files/snnl_1 | 4 - tests/input_files/snnl_2 | 4 - tests/input_files/snnl_3 | 5 - tests/input_files/whitespace_deleting_1 | 3 - tests/input_files/whitespace_deleting_2 | 3 - tests/input_files/wodl_1 | 3 - tests/input_files/wodl_2 | 3 - tests/skaldpress/content/article.md | 11 ++ tests/skaldpress/templates/article.html | 22 +++ tests/skaldpress/templates/base.html | 14 ++ tests/smp/array_each_1 | 7 + tests/smp/array_push_1 | 5 + tests/smp/array_push_2 | 5 + tests/smp/array_push_3 | 8 + tests/smp/define_1 | 5 + tests/smp/define_2 | 3 + tests/smp/dnl_1 | 4 + tests/smp/dnl_2 | 4 + tests/smp/dnl_3 | 4 + tests/smp/dnl_4 | 4 + tests/smp/explode_1 | 5 + tests/smp/explode_2 | 6 + tests/smp/format_time_1 | 3 + tests/smp/ifdef_1 | 6 + tests/smp/ifdef_2 | 3 + tests/smp/ifdef_3 | 3 + tests/smp/ifeq_1 | 3 + tests/smp/ifeq_2 | 3 + tests/smp/ifeq_3 | 3 + tests/smp/ifeq_4 | 3 + tests/smp/ifndef_1 | 3 + tests/smp/ifndef_2 | 4 + tests/smp/ifndef_3 | 4 + tests/smp/ifneq_1 | 3 + tests/smp/ifneq_2 | 3 + tests/smp/ifneq_3 | 3 + tests/smp/ifneq_4 | 3 + tests/smp/include_1 | 3 + tests/smp/include_2 | 4 + tests/smp/markdown_html_1 | 5 + tests/smp/markdown_html_2 | 5 + tests/smp/non_macro_html | 7 + tests/smp/shell_1 | 3 + tests/smp/snnl_1 | 4 + tests/smp/snnl_2 | 4 + tests/smp/snnl_3 | 5 + tests/smp/whitespace_deleting_1 | 3 + tests/smp/whitespace_deleting_2 | 3 + tests/smp/wodl_1 | 3 + tests/smp/wodl_2 | 3 + tests/test_macro_processor.sh | 4 +- tests/test_skaldpress.sh | 7 + tests/test_unittests.sh | 27 +++ tests/unit_tests/metadata_parser_1.py | 28 +++ 100 files changed, 1303 insertions(+), 203 deletions(-) create mode 100644 Makefile create mode 100644 skaldpress.1 create mode 100644 skaldpress_main.rs create mode 100644 smp.1 create mode 100644 src/skaldpress/__init__.py create mode 100644 src/skaldpress/file_metadata_extract.rs create mode 100644 src/skaldpress/main.py create mode 100644 src/skaldpress/metadata_parser.py create mode 100644 src/skaldpress/smp_macros.py delete mode 100644 tests/input_files/array_each_1 delete mode 100644 tests/input_files/array_push_1 delete mode 100644 tests/input_files/array_push_2 delete mode 100644 tests/input_files/array_push_3 delete mode 100644 tests/input_files/define_1 delete mode 100644 tests/input_files/define_2 delete mode 100644 tests/input_files/dnl_1 delete mode 100644 tests/input_files/dnl_2 delete mode 100644 tests/input_files/dnl_3 delete mode 100644 tests/input_files/dnl_4 delete mode 100644 tests/input_files/explode_1 delete mode 100644 tests/input_files/explode_2 delete mode 100644 tests/input_files/format_time_1 delete mode 100644 tests/input_files/ifdef_1 delete mode 100644 tests/input_files/ifdef_2 delete mode 100644 tests/input_files/ifdef_3 delete mode 100644 tests/input_files/ifeq_1 delete mode 100644 tests/input_files/ifeq_2 delete mode 100644 tests/input_files/ifeq_3 delete mode 100644 tests/input_files/ifeq_4 delete mode 100644 tests/input_files/ifndef_1 delete mode 100644 tests/input_files/ifndef_2 delete mode 100644 tests/input_files/ifndef_3 delete mode 100644 tests/input_files/ifneq_1 delete mode 100644 tests/input_files/ifneq_2 delete mode 100644 tests/input_files/ifneq_3 delete mode 100644 tests/input_files/ifneq_4 delete mode 100644 tests/input_files/include_1 delete mode 100644 tests/input_files/include_2 delete mode 100644 tests/input_files/markdown_html_1 delete mode 100644 tests/input_files/markdown_html_2 delete mode 100644 tests/input_files/non_macro_html delete mode 100644 tests/input_files/shell_1 delete mode 100644 tests/input_files/snnl_1 delete mode 100644 tests/input_files/snnl_2 delete mode 100644 tests/input_files/snnl_3 delete mode 100644 tests/input_files/whitespace_deleting_1 delete mode 100644 tests/input_files/whitespace_deleting_2 delete mode 100644 tests/input_files/wodl_1 delete mode 100644 tests/input_files/wodl_2 create mode 100644 tests/skaldpress/content/article.md create mode 100644 tests/skaldpress/templates/article.html create mode 100644 tests/skaldpress/templates/base.html create mode 100644 tests/smp/array_each_1 create mode 100644 tests/smp/array_push_1 create mode 100644 tests/smp/array_push_2 create mode 100644 tests/smp/array_push_3 create mode 100644 tests/smp/define_1 create mode 100644 tests/smp/define_2 create mode 100644 tests/smp/dnl_1 create mode 100644 tests/smp/dnl_2 create mode 100644 tests/smp/dnl_3 create mode 100644 tests/smp/dnl_4 create mode 100644 tests/smp/explode_1 create mode 100644 tests/smp/explode_2 create mode 100644 tests/smp/format_time_1 create mode 100644 tests/smp/ifdef_1 create mode 100644 tests/smp/ifdef_2 create mode 100644 tests/smp/ifdef_3 create mode 100644 tests/smp/ifeq_1 create mode 100644 tests/smp/ifeq_2 create mode 100644 tests/smp/ifeq_3 create mode 100644 tests/smp/ifeq_4 create mode 100644 tests/smp/ifndef_1 create mode 100644 tests/smp/ifndef_2 create mode 100644 tests/smp/ifndef_3 create mode 100644 tests/smp/ifneq_1 create mode 100644 tests/smp/ifneq_2 create mode 100644 tests/smp/ifneq_3 create mode 100644 tests/smp/ifneq_4 create mode 100644 tests/smp/include_1 create mode 100644 tests/smp/include_2 create mode 100644 tests/smp/markdown_html_1 create mode 100644 tests/smp/markdown_html_2 create mode 100644 tests/smp/non_macro_html create mode 100644 tests/smp/shell_1 create mode 100644 tests/smp/snnl_1 create mode 100644 tests/smp/snnl_2 create mode 100644 tests/smp/snnl_3 create mode 100644 tests/smp/whitespace_deleting_1 create mode 100644 tests/smp/whitespace_deleting_2 create mode 100644 tests/smp/wodl_1 create mode 100644 tests/smp/wodl_2 create mode 100755 tests/test_skaldpress.sh create mode 100755 tests/test_unittests.sh create mode 100644 tests/unit_tests/metadata_parser_1.py diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..dc25faa --- /dev/null +++ b/Makefile @@ -0,0 +1,38 @@ +.PHONY: test build minorbump publish install clean + +venv/bin/tt: src/timetracker/*.py venv + . venv/bin/activate && \ + python -m pip install -e .[dev] + +venv: pyproject.toml + python3 -m venv venv + +build: venv + . venv/bin/activate && \ + python -m pip install build twine && \ + python -m build && \ + python -m twine check dist/* + +minorbump: + . venv/bin/activate && \ + bumpver update --patch + +publish: minorbump build + . venv/bin/activate && \ + twine upload dist/* + +install: venv + python -m pip install . + +clean: + rm -rf venv + rm -rf dist + +test: + . venv/bin/activate && \ + black --check src && \ + mypy src/ && \ + pyflakes src/ && \ + ./tests/test_macro_processor.sh && \ + ./tests/test_skaldpress.sh + diff --git a/pyproject.toml b/pyproject.toml index e467c66..56b91d6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -26,7 +26,7 @@ classifiers = [ dependencies = ["markdown", "py-gfm"] [project.optional-dependencies] -dev = ["check-manifest", "black"] +dev = ["check-manifest", "black", "pyflakes", "mypy", "types-Markdown"] test = ["coverage"] [project.urls] @@ -34,6 +34,6 @@ test = ["coverage"] [project.scripts] smp = "smp:main" -#skaldpress = "skaldpress:main" +skaldpress = "skaldpress.main:main" [tool.setuptools] diff --git a/skaldpress.1 b/skaldpress.1 new file mode 100644 index 0000000..5ed2046 --- /dev/null +++ b/skaldpress.1 @@ -0,0 +1,96 @@ +.TH SKALDPRESS 1 2024-06-08 +.SH name +Skaldpress \- Templating engine +.SH SYNOPSIS +.B skaldpress [OPTIONS] + +.SH DESCRIPTION +.B smp +smp is a macro processor, made specifically for a usecase when doing templating of websites. + + +Macros which are available using skaldpress, in addition to the builtin smp(1)-macros +.IP "\fBtemplate(