markitecture 0.1.15__tar.gz

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.
Files changed (101) hide show
  1. markitecture-0.1.15/.gitignore +41 -0
  2. markitecture-0.1.15/.ruff.toml +63 -0
  3. markitecture-0.1.15/CONTRIBUTING.md +123 -0
  4. markitecture-0.1.15/LICENSE +21 -0
  5. markitecture-0.1.15/Makefile +171 -0
  6. markitecture-0.1.15/PKG-INFO +271 -0
  7. markitecture-0.1.15/README.md +237 -0
  8. markitecture-0.1.15/docs/assets/badges/compact.svg +14 -0
  9. markitecture-0.1.15/docs/assets/badges/detailed.svg +49 -0
  10. markitecture-0.1.15/docs/assets/badges/minimal.svg +7 -0
  11. markitecture-0.1.15/docs/assets/badges/modern.svg +3 -0
  12. markitecture-0.1.15/docs/assets/badges/retro.svg +15 -0
  13. markitecture-0.1.15/docs/assets/badges/shields.svg +150 -0
  14. markitecture-0.1.15/docs/assets/buttons/rectangle.svg +23 -0
  15. markitecture-0.1.15/docs/assets/buttons/vesica-piscis.svg +30 -0
  16. markitecture-0.1.15/docs/assets/callouts/designs.svg +82 -0
  17. markitecture-0.1.15/docs/assets/callouts/info.svg +43 -0
  18. markitecture-0.1.15/docs/assets/cookbooks/examples.mdx +218 -0
  19. markitecture-0.1.15/docs/assets/favicon.svg +63 -0
  20. markitecture-0.1.15/docs/assets/line.svg +11 -0
  21. markitecture-0.1.15/docs/assets/logos/circle-dark.svg +64 -0
  22. markitecture-0.1.15/docs/assets/logos/circle-light.svg +64 -0
  23. markitecture-0.1.15/docs/assets/logos/logo-box.svg +42 -0
  24. markitecture-0.1.15/docs/assets/logos/logo-rectangle.svg +57 -0
  25. markitecture-0.1.15/docs/assets/logos/logo.svg +59 -0
  26. markitecture-0.1.15/docs/assets/shield.svg +37 -0
  27. markitecture-0.1.15/docs/community.mdx +0 -0
  28. markitecture-0.1.15/docs/features/content-analysis.mdx +327 -0
  29. markitecture-0.1.15/docs/features/health-score.mdx +17 -0
  30. markitecture-0.1.15/docs/features/link-management.mdx +0 -0
  31. markitecture-0.1.15/docs/features/static-site-generation.mdx +0 -0
  32. markitecture-0.1.15/docs/features/text-splitting.mdx +0 -0
  33. markitecture-0.1.15/docs/guides/api-reference.mdx +0 -0
  34. markitecture-0.1.15/docs/guides/cli-reference.mdx +244 -0
  35. markitecture-0.1.15/docs/guides/configuration.mdx +214 -0
  36. markitecture-0.1.15/docs/guides/installation.mdx +37 -0
  37. markitecture-0.1.15/docs/guides/quickstart.mdx +145 -0
  38. markitecture-0.1.15/docs/index.mdx +119 -0
  39. markitecture-0.1.15/docs/mint.json +124 -0
  40. markitecture-0.1.15/docs/philosophy.mdx +175 -0
  41. markitecture-0.1.15/pyproject.toml +188 -0
  42. markitecture-0.1.15/src/markitecture/__init__.py +41 -0
  43. markitecture-0.1.15/src/markitecture/__main__.py +4 -0
  44. markitecture-0.1.15/src/markitecture/cli/__init__.py +3 -0
  45. markitecture-0.1.15/src/markitecture/cli/app.py +38 -0
  46. markitecture-0.1.15/src/markitecture/cli/commands/__init__.py +21 -0
  47. markitecture-0.1.15/src/markitecture/cli/commands/config.py +84 -0
  48. markitecture-0.1.15/src/markitecture/cli/commands/links.py +146 -0
  49. markitecture-0.1.15/src/markitecture/cli/commands/metrics.py +193 -0
  50. markitecture-0.1.15/src/markitecture/cli/commands/mkdocs.py +39 -0
  51. markitecture-0.1.15/src/markitecture/cli/commands/split.py +48 -0
  52. markitecture-0.1.15/src/markitecture/errors.py +64 -0
  53. markitecture-0.1.15/src/markitecture/generators/__init__.py +3 -0
  54. markitecture-0.1.15/src/markitecture/generators/configs/__init__.py +0 -0
  55. markitecture-0.1.15/src/markitecture/generators/configs/mintlify_json.py +0 -0
  56. markitecture-0.1.15/src/markitecture/generators/configs/mkdocs_yaml.py +317 -0
  57. markitecture-0.1.15/src/markitecture/metrics/__init__.py +9 -0
  58. markitecture-0.1.15/src/markitecture/metrics/analyzer.py +109 -0
  59. markitecture-0.1.15/src/markitecture/metrics/badges/__init__.py +28 -0
  60. markitecture-0.1.15/src/markitecture/metrics/badges/base.py +7 -0
  61. markitecture-0.1.15/src/markitecture/metrics/badges/compact.py +35 -0
  62. markitecture-0.1.15/src/markitecture/metrics/badges/detailed.py +60 -0
  63. markitecture-0.1.15/src/markitecture/metrics/badges/minimal.py +19 -0
  64. markitecture-0.1.15/src/markitecture/metrics/badges/modern.py +45 -0
  65. markitecture-0.1.15/src/markitecture/metrics/badges/retro.py +23 -0
  66. markitecture-0.1.15/src/markitecture/metrics/badges/shields.py +124 -0
  67. markitecture-0.1.15/src/markitecture/metrics/svg_generator.py +70 -0
  68. markitecture-0.1.15/src/markitecture/processing/__init__.py +0 -0
  69. markitecture-0.1.15/src/markitecture/processing/link_validator.py +133 -0
  70. markitecture-0.1.15/src/markitecture/processing/reflink_converter.py +198 -0
  71. markitecture-0.1.15/src/markitecture/processing/reflink_extractor.py +82 -0
  72. markitecture-0.1.15/src/markitecture/processing/text_splitter.py +290 -0
  73. markitecture-0.1.15/src/markitecture/settings/__init__.py +9 -0
  74. markitecture-0.1.15/src/markitecture/settings/config.py +61 -0
  75. markitecture-0.1.15/src/markitecture/settings/validators.py +26 -0
  76. markitecture-0.1.15/src/markitecture/utils/__init__.py +5 -0
  77. markitecture-0.1.15/src/markitecture/utils/file_handler.py +24 -0
  78. markitecture-0.1.15/src/markitecture/utils/printer.py +195 -0
  79. markitecture-0.1.15/src/markitecture/utils/sanitizer.py +78 -0
  80. markitecture-0.1.15/tests/__init__.py +0 -0
  81. markitecture-0.1.15/tests/cli/__init__.py +0 -0
  82. markitecture-0.1.15/tests/cli/commands/__init__.py +0 -0
  83. markitecture-0.1.15/tests/cli/test_app.py +45 -0
  84. markitecture-0.1.15/tests/conftest.py +24 -0
  85. markitecture-0.1.15/tests/data/mistletoe.md +268 -0
  86. markitecture-0.1.15/tests/data/pydantic.md +55 -0
  87. markitecture-0.1.15/tests/data/readme-ai.html +966 -0
  88. markitecture-0.1.15/tests/data/readme-ai.md +916 -0
  89. markitecture-0.1.15/tests/generators/__init__.py +0 -0
  90. markitecture-0.1.15/tests/metrics/__init__.py +0 -0
  91. markitecture-0.1.15/tests/metrics/test_analyzer.py +123 -0
  92. markitecture-0.1.15/tests/metrics/test_svg_generator.py +0 -0
  93. markitecture-0.1.15/tests/processing/__init__.py +0 -0
  94. markitecture-0.1.15/tests/processing/test_link_validator.py +84 -0
  95. markitecture-0.1.15/tests/processing/test_reflink_converter.py +36 -0
  96. markitecture-0.1.15/tests/settings/__init__.py +0 -0
  97. markitecture-0.1.15/tests/settings/test_validators.py +16 -0
  98. markitecture-0.1.15/tests/test_validators.py +27 -0
  99. markitecture-0.1.15/tests/utils/__init__.py +0 -0
  100. markitecture-0.1.15/tests/utils/test_sanitizer.py +35 -0
  101. markitecture-0.1.15/uv.lock +3876 -0
@@ -0,0 +1,41 @@
1
+ __pycache__/
2
+ *.py[cod]
3
+ *$py.class
4
+ *.so
5
+ .Python
6
+ build/
7
+ develop-eggs/
8
+ dist/
9
+ downloads/
10
+ eggs/
11
+ .eggs/
12
+ lib/
13
+ lib64/
14
+ parts/
15
+ sdist/
16
+ var/
17
+ wheels/
18
+ *.egg-info/
19
+ .installed.cfg
20
+ *.egg
21
+ MANIFEST
22
+ .env
23
+ .venv
24
+ env/
25
+ venv/
26
+ ENV/
27
+ .idea/
28
+ .vscode/
29
+ *.swp
30
+ .DS_Store
31
+ .mypy_cache/
32
+ .pytest_cache/
33
+ .ruff_cache/
34
+ .reports/
35
+ site/
36
+ .continuerules
37
+
38
+ # -- Markitect ---------
39
+ markitect.yml
40
+ .markitecture/
41
+ notebooks/
@@ -0,0 +1,63 @@
1
+ exclude = [
2
+ ".env,",
3
+ ".git",
4
+ ".ipynb_checkpoints",
5
+ ".mypy_cache",
6
+ ".nox",
7
+ ".pyenv",
8
+ ".pytest_cache",
9
+ ".ruff_cache",
10
+ "venv",
11
+ ".venv",
12
+ ".vscode",
13
+ ]
14
+ line-length = 88
15
+ indent-width = 4
16
+ target-version = "py311"
17
+
18
+ [lint]
19
+ preview = true
20
+ extend-select = [
21
+ "E305", # 2 blank lines before class or function
22
+ ]
23
+ select = [
24
+ "ARG", # unused arguments
25
+ "B", # flake8-bugbear
26
+ "E", # pycodestyle
27
+ "E303", # too many blank lines
28
+ "E722", # bare except statements
29
+ "F", # pyflakes
30
+ "F401", # remove unused imports
31
+ "I", # isort
32
+ "N", # pep8-naming
33
+ "RUF", # ruff
34
+ "SIM", # flake8-simplify
35
+ "UP", # pyupgrade
36
+ "W", # pycodestyle
37
+ "W291", # trailing whitespace
38
+ "W293", # blank line contains whitespace
39
+ "F821", # undefined name
40
+ ]
41
+ fixable = ["ALL"]
42
+ ignore = [
43
+ "UP006",
44
+ "UP007",
45
+ "UP035",
46
+ ]
47
+ unfixable = []
48
+
49
+ [lint.isort]
50
+ known-third-party = ["readmeai"]
51
+ relative-imports-order = "closest-to-furthest"
52
+ split-on-trailing-comma=true
53
+
54
+ [lint.pydocstyle]
55
+ convention = "numpy"
56
+
57
+ [format]
58
+ docstring-code-format = true
59
+ docstring-code-line-length = 88
60
+ indent-style = "space"
61
+ line-ending = "auto"
62
+ preview = true
63
+ quote-style = "double"
@@ -0,0 +1,123 @@
1
+ # Contributing to Markitecture
2
+
3
+ 👋 Welcome, thank you for considering contributing to Markitecture! Happy to have you join our community. Every contribution, no matter how small, helps make Markitecture better for everyone.
4
+
5
+ This document outlines how to contribute to the project and the standards we follow. Please take a few moments to read through it before submitting your first contribution.
6
+
7
+ ## How You Can Contribute
8
+
9
+ There are many ways you can contribute to Markitecture:
10
+
11
+ * **🐛 Report Bugs:** Found a bug? Let us know by opening a [new issue][issues]. Please provide a clear description of the issue, including steps to reproduce it, your operating system, Python version, and Markitecture version.
12
+ * **✨ Suggest Enhancements:** Have an idea for a new feature or improvement? We'd love to hear it! Open a [new issue][issues] and describe your suggestion.
13
+ * **📖 Improve Documentation:** Help us make the documentation clearer, more comprehensive, or more accurate.
14
+ * **🛠️ Contribute Code:** Contribute new features, fix bugs, or improve existing code.
15
+ * **📣 Spread the Word:** Share Markitecture with others who might find it useful!
16
+
17
+ ## Getting Started
18
+
19
+ Here's how to get started with contributing code or documentation:
20
+
21
+ 1. **Fork the Repository:** Start by forking the [Markitecture repository][markitecture] on GitHub (or your chosen platform).
22
+
23
+ 2. **Clone Your Fork:** Clone your forked repository to your local machine:
24
+
25
+ ```bash
26
+ git clone https://github.com/eli64s/markitecture.git
27
+ cd markitecture
28
+ ```
29
+
30
+ 3. **Create a Branch:** Create a new branch for your changes:
31
+
32
+ ```bash
33
+ git checkout -b feature/your-feature-name
34
+ ```
35
+
36
+ Use a descriptive branch name that reflects your changes (e.g., `bugfix/link-validation-edge-case`, `feature/new-feature`, `docs/update-readme`). This will help you and others easily identify the purpose of the branch.
37
+
38
+ 4. **Set Up Your Development Environment:**
39
+
40
+ Follow these steps to get a development version of Markitecture up and running:
41
+
42
+ 1. **Create a virtual environment:**
43
+
44
+ ```bash
45
+ make venv
46
+ ```
47
+
48
+ 2. **Install project dependencies:**
49
+
50
+ ```bash
51
+ make install
52
+ make lock
53
+ ```
54
+
55
+ 3. **Install pre-commit hooks:**
56
+
57
+ ```bash
58
+ pre-commit install
59
+ ```
60
+
61
+ 5. **Make Your Changes:** Implement your bug fix, feature, or documentation update.
62
+
63
+ 6. **Test Your Changes:** Ensure your changes don't break existing functionality by running the tests:
64
+
65
+ ```bash
66
+ make test
67
+ ```
68
+
69
+ 7. **Commit Your Changes:** Commit your changes with clear and concise commit messages:
70
+
71
+ ```bash
72
+ git commit -m "fix: Resolved issue with link validation"
73
+ ```
74
+
75
+ 8. **Push to Your Fork:** Push your branch to your forked repository:
76
+
77
+ ```bash
78
+ git push origin feature/your-feature-name
79
+ ```
80
+
81
+ 9. **Open a Pull Request:** Go to the original Markitecture repository and open a pull request from your branch. Provide a clear description of your changes in the pull request.
82
+
83
+ ## Code Style and Standards
84
+
85
+ * We adhere to the [PEP 8](https://www.python.org/dev/peps/pep-0008/) style guide for Python code.
86
+ * We use `ruff` for code formatting and linting. You can run it locally before committing:
87
+
88
+ ```bash
89
+ make format-and-lint
90
+ ```
91
+ * Add tests for any new features or bug fixes.
92
+ * Document any new or changed functionality in the code using docstrings and, if necessary, update the user-facing documentation.
93
+ * Keep your code clean, well-commented, and easy to understand.
94
+
95
+ ## Code of Conduct
96
+
97
+ We expect all contributors to follow our [Code of Conduct]([link to your Code of Conduct - e.g., CODE_OF_CONDUCT.md]). Please be respectful and considerate of others in all your interactions within the project.
98
+
99
+ ## Pull Request Process
100
+
101
+ 1. We'll review your pull request as soon as possible.
102
+ 2. We may suggest changes or improvements. We encourage open feedback and collaboration.
103
+ 3. Once your pull request is approved, it will be merged into the `main` branch.
104
+
105
+ ## Questions and Support
106
+
107
+ If you have any questions or need help with contributing, please don't hesitate to:
108
+
109
+ * Open an [issue][issues] in the project's issue tracker.
110
+ * Join our [discussion forum][discussions] and ask your question there.
111
+
112
+ We appreciate your contributions and look forward to collaborating with you!
113
+
114
+ ---
115
+
116
+ **Cheers!**
117
+
118
+ The Markitecture Team
119
+
120
+ <!-- REFERENCE LINKS -->
121
+ [discussions]: https://github.com/eli64s/markitecture/discussions
122
+ [issues]: https://github.com/eli64s/markitecture/issues
123
+ [markitecture]: https://github.com/eli64s/markitecture/
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 to present Markitecture and individual contributors.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,171 @@
1
+ SHELL := /bin/bash
2
+ .ONESHELL:
3
+ .SHELLFLAGS := -eu -o pipefail -c
4
+ .DELETE_ON_ERROR:
5
+ MAKEFLAGS += --warn-undefined-variables
6
+ MAKEFLAGS += --no-builtin-rules
7
+
8
+ DOCS_DIR := docs
9
+ PYPROJECT_TOML := pyproject.toml
10
+ PYPI_VERSION := 0.1.15
11
+ PYTHON_VERSION := 3.11
12
+ TARGET := src/markitecture
13
+ TARGET_TEST := tests
14
+ TEST_DATA := tests/data/readme-ai.md
15
+
16
+
17
+ # -------------------------------------------------------------------
18
+ # Build: Build the distribution package using uv
19
+ # -------------------------------------------------------------------
20
+
21
+
22
+ .PHONY: build
23
+ build: ## Build the distribution package using uv
24
+ uv build
25
+ uv pip install dist/markitecture-$(PYPI_VERSION)-py3-none-any.whl
26
+
27
+ .PHONY: install
28
+ install: ## Install all dependencies from pyproject.toml
29
+ uv sync --dev --group lint --group test --all-extras
30
+
31
+ .PHONY: lock
32
+ lock: ## Lock dependencies declared in pyproject.toml
33
+ uv pip compile $(PYPROJECT_TOML) --all-extras
34
+
35
+ .PHONY: requirements
36
+ requirements: ## Generate requirements files from pyproject.toml
37
+ uv pip compile $(PYPROJECT_TOML) -o requirements.txtiu
38
+ uv pip compile $(PYPROJECT_TOML) --all-extras -o requirements-dev.txt
39
+
40
+ .PHONY: sync
41
+ sync: ## Sync environment with pyproject.toml
42
+ uv sync --all-groups --dev
43
+
44
+ .PHONY: update
45
+ update: ## Update all dependencies from pyproject.toml
46
+ uv lock --upgrade
47
+
48
+ .PHONY: venv
49
+ venv: ## Create a virtual environment
50
+ uv venv --python $(PYTHON_VERSION)
51
+
52
+
53
+ # -------------------------------------------------------------------
54
+ # Documenation: Build and serve static site using MkDocs
55
+ # -------------------------------------------------------------------
56
+
57
+ .PHONY: docs
58
+ docs: ## Serve mintlify documentation locally
59
+ cd $(DOCS_DIR) && npx mintlify dev --verbose
60
+
61
+
62
+ # -------------------------------------------------------------------
63
+ # Format & Lint: Format and lint Python files using Ruff and MyPy
64
+ # -------------------------------------------------------------------
65
+
66
+
67
+ .PHONY: format-toml
68
+ format-toml: ## Format TOML files using pyproject-fmt
69
+ uvx --isolated pyproject-fmt $(TOML_FILE) --indent 4
70
+
71
+ .PHONY: format
72
+ format: ## Format Python files using Ruff
73
+ @echo -e "\n► Running the Ruff formatter..."
74
+ uvx --isolated ruff format $(TARGET)
75
+
76
+ .PHONY: lint
77
+ lint: ## Lint Python files using Ruff
78
+ @echo -e "\n ►Running the Ruff linter..."
79
+ uvx --isolated ruff check $(TARGET) --fix
80
+
81
+ .PHONY: format-and-lint
82
+ format-and-lint: format lint ## Format and lint Python files
83
+
84
+ .PHONY: typecheck-mypy
85
+ typecheck-mypy: ## Type-check Python files using MyPy
86
+ uv run mypy $(TARGET)
87
+
88
+ .PHONY: typecheck-pyright
89
+ typecheck-pyright: ## Type-check Python files using Pyright
90
+ uv run pyright $(TARGET)
91
+
92
+
93
+ # -------------------------------------------------------------------
94
+ # Tests: Run test suite using Pytest
95
+ # -------------------------------------------------------------------
96
+
97
+
98
+ .PHONY: test
99
+ test: ## Run test suite using Pytest
100
+ uv run pytest $(TARGET_TEST) --config-file $(PYPROJECT_TOML)
101
+
102
+
103
+ # -------------------------------------------------------------------
104
+ # Examples: Batch run CLI examples for documentation and testing
105
+ # -------------------------------------------------------------------
106
+
107
+
108
+ .PHONY: run-examples
109
+ run-examples: ## Run examples for documentation and testing
110
+ @echo -e "\n► Running split commands..."
111
+ uv run markitect --split.i $(TEST_DATA) --split.o examples/text-splitter/header-2 --split.level "##"
112
+ @echo -e "\n--------------------------------------------------------------------------------\n"
113
+ uv run markitect --split.i $(TEST_DATA) --split.o examples/text-splitter/header-3/ --split.level "###"
114
+ @echo -e "\n--------------------------------------------------------------------------------\n"
115
+ uv run markitect --split.i $(TEST_DATA) --split.o examples/text-splitter/header-4/ --split.level "####"
116
+ @echo -e "\n--------------------------------------------------------------------------------\n"
117
+ uv run markitect --reflinks.i tests/data/pydantic.md --reflinks.o examples/reference-links/reflinks_conversion.md
118
+ @echo -e "\n--------------------------------------------------------------------------------\n"
119
+ @echo -e "\n► Checking for markdown files in examples/text-splitter/header-2..."
120
+ @if [ -z "$$(find examples/text-splitter/header-2 -maxdepth 1 -type f -name '*.md')" ]; then \
121
+ echo "Warning: No markdown files found in examples/text-splitter/header-2. Skipping MkDocs config generation."; \
122
+ else \
123
+ echo "Generating MkDocs static site config for: examples/text-splitter/header-2"; \
124
+ uv run markitect --metrics.input $(TEST_DATA) --metrics.style all --metrics.output-dir examples/metrics; \
125
+ fi
126
+ @echo -e "\n--------------------------------------------------------------------------------\n"
127
+
128
+ .PHONY: run-pypi
129
+ run-pypi: ## Run examples for documentation
130
+ uvx --isolated markitect --split.i $(TEST_DATA) --split.o examples/text-splitter/pypi/header-2/ --split.level "##"
131
+ uvx --isolated markitect --split.i $(TEST_DATA) --split.o examples/text-splitter/pypi/header-3/ --split.level "###"
132
+ uvx --isolated markitect --split.i $(TEST_DATA) --split.o examples/text-splitter/pypi/header-4/ --split.level "####"
133
+ uvx --isolated markitect --reflinks.i tests/data/pydantic.md --reflinks.o examples/reference-links/reflinks_conversion.md
134
+
135
+
136
+ # -------------------------------------------------------------------
137
+ # Utils: Utility commands for managing the project
138
+ # -------------------------------------------------------------------
139
+
140
+
141
+ clean: clean-build clean-pyc clean-test ## remove all build, test, coverage and Python artifacts
142
+
143
+ clean-build: ## remove build artifacts
144
+ rm -fr build/
145
+ rm -fr dist/
146
+ rm -fr .eggs/
147
+ rm -fr .venv/
148
+ find . -name '*.egg-info' -exec rm -fr {} +
149
+ find . -name '*.egg' -exec rm -f {} +
150
+
151
+ clean-pyc: ## remove Python file artifacts
152
+ find . -name '*.pyc' -exec rm -f {} +
153
+ find . -name '*.pyo' -exec rm -f {} +
154
+ find . -name '*~' -exec rm -f {} +
155
+ find . -name '__pycache__' -exec rm -fr {} +
156
+
157
+ clean-test: ## remove test and coverage artifacts
158
+ rm -fr .tox/
159
+ rm -f .coverage
160
+ rm -fr htmlcov/
161
+ rm -fr .pytest_cache
162
+
163
+ .PHONY: help
164
+ help: ## Display this help
165
+ @echo ""
166
+ @echo "Usage: make [target]"
167
+ @echo ""
168
+ @awk 'BEGIN {FS = ":.*?## "; printf "\033[1m%-20s %-50s\033[0m\n", "Target", "Description"; \
169
+ printf "%-20s %-50s\n", "------", "-----------";} \
170
+ /^[a-zA-Z_-]+:.*?## / {printf "\033[36m%-20s\033[0m %-50s\n", $$1, $$2}' $(MAKEFILE_LIST)
171
+ @echo ""
@@ -0,0 +1,271 @@
1
+ Metadata-Version: 2.4
2
+ Name: markitecture
3
+ Version: 0.1.15
4
+ Summary: ❂ Markdown tools for modular and flexible docs: link validation, reference link conversion, text splitting, & more.
5
+ Project-URL: documentation, https://github.com/eli64s/markitecture/blob/main/README.md
6
+ Project-URL: homepage, https://github.com/eli64s/markitecture
7
+ Project-URL: repository, https://github.com/eli64s/markitecture
8
+ Author-email: Eli Salamie <egsalamie@gmail.com>
9
+ License-Expression: MIT
10
+ License-File: LICENSE
11
+ Keywords: automated-markdown,content-management,documentation-tools,intelligent-documentation,markdown-ai,markdown-link-checker,markdown-parser,markdown-splitter,markdown-tools,mkdocs,modular-docs,readme-generator,reference-links,smart-markdown
12
+ Classifier: Development Status :: 3 - Alpha
13
+ Classifier: Framework :: Pydantic
14
+ Classifier: Framework :: Pytest
15
+ Classifier: Intended Audience :: Developers
16
+ Classifier: License :: OSI Approved :: MIT License
17
+ Classifier: Operating System :: OS Independent
18
+ Classifier: Programming Language :: Python :: 3.10
19
+ Classifier: Programming Language :: Python :: 3.11
20
+ Classifier: Programming Language :: Python :: 3.12
21
+ Classifier: Programming Language :: Python :: 3.13
22
+ Classifier: Topic :: Software Development :: Documentation
23
+ Classifier: Topic :: Software Development :: Libraries
24
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
25
+ Classifier: Typing :: Typed
26
+ Requires-Python: <=3.14,>=3.10
27
+ Requires-Dist: httpx
28
+ Requires-Dist: pydantic
29
+ Requires-Dist: pydantic-settings
30
+ Requires-Dist: pyyaml
31
+ Requires-Dist: rich
32
+ Requires-Dist: toml; python_full_version < '3.11'
33
+ Description-Content-Type: text/markdown
34
+
35
+ <div id="top" align="center">
36
+
37
+ <!-- HEADER -->
38
+ <picture>
39
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/eli64s/markitecture/13c4b28213fb8e8c75299ef5c905ce1d195a6988/docs/assets/logos/circle-dark.svg">
40
+ <source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/eli64s/markitecture/13c4b28213fb8e8c75299ef5c905ce1d195a6988/docs/assets/logos/circle-light.svg">
41
+ <img alt="markitecture Logo" src="https://raw.githubusercontent.com/eli64s/markitecture/13c4b28213fb8e8c75299ef5c905ce1d195a6988/docs/assets/logos/circle-light.svg" width="900" style="max-width: 100%;">
42
+ </picture>
43
+
44
+ <h3 align="center">
45
+ Building Blocks for Brilliant Documentation.
46
+ </h3>
47
+ <p align="center">
48
+ <em>Markitecture: The Python toolkit that empowers modular Markdown workflows.</em>
49
+ </p>
50
+
51
+ <!-- BADGES -->
52
+ <div align="center">
53
+ <p align="center" style="margin-bottom: 20px;">
54
+ <a href="https://github.com/eli64s/markitecture/actions">
55
+ <img src="https://img.shields.io/github/actions/workflow/status/eli64s/markitecture/ci.yml?label=CI&style=flat&logo=githubactions&logoColor=white&labelColor=2A2A2A&color=FFD700" alt="GitHub Actions" />
56
+ </a>
57
+ <a href="https://app.codecov.io/gh/eli64s/markitecture">
58
+ <img src="https://img.shields.io/codecov/c/github/eli64s/markitecture?label=Coverage&style=flat&logo=codecov&logoColor=white&labelColor=2A2A2A&color=3fe1c0" alt="Coverage" />
59
+ </a>
60
+ <a href="https://pypi.org/project/markitecture/">
61
+ <img src="https://img.shields.io/pypi/v/markitecture?label=PyPI&style=flat&logo=pypi&logoColor=white&labelColor=2A2A2A&color=00E5FF" alt="PyPI Version" />
62
+ </a>
63
+ <a href="https://github.com/eli64s/markitecture">
64
+ <img src="https://img.shields.io/pypi/pyversions/markitecture?label=Python&style=flat&logo=python&logoColor=white&labelColor=2A2A2A&color=7934C5" alt="Python Version" />
65
+ </a>
66
+ <a href="https://opensource.org/license/mit/">
67
+ <img src="https://img.shields.io/github/license/eli64s/markitecture?label=License&style=flat&logo=opensourceinitiative&logoColor=white&labelColor=2A2A2A&color=FF00FF" alt="MIT License">
68
+ </a>
69
+ </p>
70
+ </div>
71
+
72
+ <div align="center">
73
+ <img src="https://raw.githubusercontent.com/eli64s/markitecture/216a92894e6f30c707a214fad5a5fba417e3bc39/docs/assets/line.svg" alt="separator" width="100%" height="2px" style="margin: 20px 0;">
74
+ </div>
75
+
76
+ </div>
77
+ <!-- HEADER END -->
78
+
79
+ ## What is Markitecture?
80
+
81
+ **Markitecture** is a comprehensive Python toolkit designed to streamline your Markdown workflow. Whether you're managing documentation, writing technical content, or maintaining a knowledge base, Markitecture provides essential utilities to make working with Markdown files easier and more efficient.
82
+
83
+ ### Key Features
84
+
85
+ - **Text Splitting:** Break down large Markdown files into manageable sections based on headings or custom rules.
86
+ - **Link Management:** Convert between inline and reference-style links, validate URLs, and identify broken links.
87
+ - **Content Analysis:** Analyze document structure, extract metadata, and ensure consistent formatting.
88
+ - **Documentation Tools:** Generate configurations for static site generators like [MkDocs][mkdocs].
89
+
90
+ ---
91
+
92
+ ## Quick Start
93
+
94
+ ### Installation
95
+
96
+ Install from [PyPI][pypi] using your preferred package manager.
97
+
98
+ #### <img width="2%" src="https://simpleicons.org/icons/python.svg">&emsp13;pip
99
+
100
+ Use [pip][pip] (recommended for most users):
101
+
102
+ ```sh
103
+ pip install -U markitecture
104
+ ```
105
+
106
+ #### <img width="2%" src="https://simpleicons.org/icons/pipx.svg">&emsp13;pipx
107
+
108
+ Install in an isolated environment with [pipx][pipx]:
109
+
110
+ ```sh
111
+ ❯ pipx install markitecture
112
+ ```
113
+
114
+ #### <img width="2%" src="https://simpleicons.org/icons/uv.svg">&emsp13;uv
115
+
116
+ For the fastest installation use [uv][uv]:
117
+
118
+ ```sh
119
+ ❯ uv tool install markitecture
120
+ ```
121
+
122
+ ### Using the CLI
123
+
124
+ #### Text Splitting
125
+
126
+ Split large Markdown files into smaller, organized sections:
127
+
128
+ ```sh
129
+ markitect \
130
+ --split.i tests/data/readme-ai.md \
131
+ --split.o examples/split-sections-h2
132
+ ```
133
+
134
+ #### Link Validation
135
+
136
+ Check for broken links in your documentation:
137
+
138
+ ```sh
139
+ markitect --check-links.input tests/data/pydantic.md
140
+ ```
141
+
142
+ In your terminal, you'll see a summary of the results:
143
+
144
+ ```console
145
+
146
+ Markdown Link Check Results
147
+
148
+ ┏━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━┓
149
+ ┃ Status ┃ Line ┃ Link ┃ Error ┃
150
+ ┡━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━┩
151
+ │ ✓ │ 2 │ https://img.shields.io/github/actions/workflow/status/pydantic/pydantic/ci.yml?b… │ │
152
+ │ ✓ │ 3 │ https://coverage-badge.samuelcolvin.workers.dev/pydantic/pydantic.svg │ │
153
+ │ ✓ │ 4 │ https://img.shields.io/pypi/v/pydantic.svg │ │
154
+ │ ✓ │ 5 │ https://img.shields.io/conda/v/conda-forge/pydantic.svg │ │
155
+ │ ✓ │ 6 │ https://static.pepy.tech/badge/pydantic/month │ │
156
+ │ ✓ │ 7 │ https://img.shields.io/pypi/pyversions/pydantic.svg │ │
157
+ │ ✓ │ 8 │ https://img.shields.io/github/license/pydantic/pydantic.svg │ │
158
+ │ ✓ │ 9 │ https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/pydantic/p… │ │
159
+ │ ✓ │ 18 │ https://pydantic.dev/articles/logfire-announcement │ │
160
+ │ ✓ │ 24 │ https://docs.pydantic.dev/ │ │
161
+ │ ✓ │ 24 │ https://github.com/pydantic/pydantic/tree/1.10.X-fixes │ │
162
+ │ ✓ │ 28 │ https://docs.pydantic.dev/ │ │
163
+ │ 𝗫 │ 34 │ https://docs.pydantic.dev/install/invalid-link │ HTTP 404 │
164
+ └────────┴──────┴───────────────────────────────────────────────────────────────────────────────────┴──────────┘
165
+
166
+ Summary: 1 broken links out of 13 total links.
167
+ ```
168
+
169
+ #### Reference Link Conversion
170
+
171
+ In Markdown, [reference-style links][reflinks] let you write cleaner text by keeping URLs in a reference section - think footnotes for the web.
172
+
173
+ To convert inline links to reference-style links:
174
+
175
+ ```sh
176
+ markitect \
177
+ --reflinks.input tests/data/pydantic.md \
178
+ --reflinks.output with_refs.md
179
+ ```
180
+
181
+ #### Static Site Configuration Generation
182
+
183
+ Generate a MkDocs configuration [(mkdocs.yml)][mkdocs.yml] from a given Markdown file.
184
+
185
+ 1. Split the Markdown file into sections:
186
+
187
+ ```sh
188
+ markitect \
189
+ --split.i tests/data/readme-ai.md \
190
+ --split.o examples/split-sections-h2
191
+ ```
192
+
193
+ 2. Generate the MkDocs configuration:
194
+
195
+ ```sh
196
+ markitect \
197
+ --mkdocs.dir examples/split-sections-h2 \
198
+ --mkdocs.site-name "MyDocsSite"
199
+ ```
200
+
201
+ <sub>
202
+
203
+ See additional example and usage details in the [here][examples].
204
+
205
+ </sub>
206
+
207
+ <!--
208
+ >[!NOTE]
209
+ > Explore the [Official Documentation][docs] for more detailed guides and examples.
210
+ -->
211
+
212
+ ---
213
+
214
+ ## Roadmap
215
+
216
+ - [ ] Support for additional documentation formats (e.g., reStructuredText, HTML)
217
+ - [ ] Enhanced link management utilities
218
+ - [ ] Improved content analysis features
219
+ - [ ] Integration with more static site generators
220
+ - [ ] Plugin system for custom utilities
221
+ - [ ] More intuitive CLI commands and options
222
+
223
+ ---
224
+
225
+ ## Contributing
226
+
227
+ Contributions are welcome! Whether it's bug reports, feature requests, or code contributions, please feel free to:
228
+
229
+ - Open an [issue][github-issues]
230
+ - Submit a [pull request][github-pulls]
231
+ - Improve documentation, write tutorials, etc.
232
+ - Share your feedback and suggestions
233
+
234
+ ---
235
+
236
+ ## License
237
+
238
+ Copyright © 2024-2025 [Markitecture][markitecture]. <br />
239
+ Released under the [MIT][mit-license] license.
240
+
241
+ <div align="left">
242
+ <a href="#top">
243
+ <img src="https://raw.githubusercontent.com/eli64s/markitecture/77bec69129dd3a075d7d0816c7bd826da131ccc7/docs/assets/buttons/rectangle.svg" width="100px" height="100px" alt="Return to Top">
244
+ </a>
245
+ </div>
246
+
247
+ <div align="center">
248
+ <img src="https://raw.githubusercontent.com/eli64s/markitecture/216a92894e6f30c707a214fad5a5fba417e3bc39/docs/assets/line.svg" alt="separator" width="100%" height="2px" style="margin: 20px 0;">
249
+ </div>
250
+
251
+
252
+ <!-- REFERENCE LINKS -->
253
+
254
+ <!-- PROJECT RESOURCES -->
255
+ [pypi]: https://pypi.org/project/markitecture/
256
+ [markitecture]: https://github.com/eli64s/markitecture
257
+ [github-issues]: https://github.com/eli64s/markitecture/issues
258
+ [github-pulls]: https://github.com/eli64s/markitecture/pulls
259
+ [mit-license]: https://github.com/eli64s/markitecture/blob/main/LICENSE
260
+ [examples]: https://github.com/eli64s/markitecture/tree/main/examples
261
+
262
+ <!-- DEVELOPER TOOLS -->
263
+ [python]: https://www.python.org/
264
+ [pip]: https://pip.pypa.io/en/stable/
265
+ [pipx]: https://pipx.pypa.io/stable/
266
+ [uv]: https://docs.astral.sh/uv/
267
+ [mkdocs]: https://www.mkdocs.org/
268
+ [mkdocs.yml]: https://www.mkdocs.org/user-guide/configuration/
269
+
270
+ <!-- RESOURCES -->
271
+ [reflinks]: https://www.markdownguide.org/basic-syntax/#reference-style-links