refactor: split the repo into self-contained validator, directory, quickstart, spec and site folders

validator/ holds mewslint (lint, css, fetch, DTD/CSS data); directory/ holds
the mews.page service (app, db, check, pages, cli) and depends on validator/;
quickstart/ holds mews-quickstart and md2mews.py for third parties who want
to create Mews content without cloning the repo; spec/ consolidates doc/ and
dtd/ with the canonical mews-0.1.css; site/ becomes a Pelican project with
the forward-facing pages as Markdown, the check form kept as a raw HTML
snippet. Root pyproject.toml is now a virtual uv workspace over validator,
directory and quickstart, with cross-cutting tests that span more than one
of them staying at the repo root. Makefile and flake.nix updated to match.
This commit is contained in:
randogoth 2026-10-13 12:29:23 +03:00
parent 5fa8708bd1
commit 060d4e00fd
90 changed files with 1290 additions and 287 deletions

44
site/pelicanconf.py Normal file
View file

@ -0,0 +1,44 @@
AUTHOR = "randogoth"
SITENAME = "the mews"
SITEURL = ""
PATH = "content"
TIMEZONE = "UTC"
DEFAULT_LANG = "en"
THEME = "theme"
# The plugin reads the allowed elements and attributes from the Mews DTD and
# brings every page inside that subset.
PLUGINS = ["pelican.plugins.mews"]
# This whole site is Mews, so its pages are plain .html, and index.html is
# the directory index everywhere. The CSS dir is left empty so the plugin
# writes and links mews-0.1.css at the site root, where the spec's examples
# and every other Mews page expect to find it.
MEWS_SUFFIX = ".html"
MEWS_CSS_DIR = ""
# mews.page is the reference deployment: a page that doesn't conform must
# fail the build, not ship with the offending markup quietly stripped.
MEWS_STRICT = True
PAGE_URL = PAGE_SAVE_AS = "{slug}.html"
# Markdown has to produce XML for the plugin to parse. Tables and definition
# lists are both in the Mews subset but need their extensions turned on.
MARKDOWN = {
"output_format": "xhtml",
"extension_configs": {
"markdown.extensions.tables": {},
"markdown.extensions.def_list": {},
},
}
# This site is two hand-written pages, not a blog: no article stream, so none
# of Pelican's own listing templates are needed.
DIRECT_TEMPLATES = []
AUTHOR_SAVE_AS = CATEGORY_SAVE_AS = TAG_SAVE_AS = ""
AUTHORS_SAVE_AS = CATEGORIES_SAVE_AS = TAGS_SAVE_AS = ARCHIVES_SAVE_AS = ""
FEED_ALL_ATOM = FEED_ALL_RSS = None
CATEGORY_FEED_ATOM = CATEGORY_FEED_RSS = None
AUTHOR_FEED_ATOM = AUTHOR_FEED_RSS = None
TAG_FEED_ATOM = TAG_FEED_RSS = None
TRANSLATION_FEED_ATOM = TRANSLATION_FEED_RSS = None