mkht.php/README.md

90 lines
3.3 KiB
Markdown
Raw Permalink Normal View History

# mkht.php
2024-01-15 18:55:39 +00:00
mkht.php is a PHP script for building HTML/CSS sites from source documents in PHP, Gemtext, Pandoc Markdown, Gettext translation files, HTML and CSS.
2023-09-04 21:31:16 +00:00
This is used to generate the static websites for:
* Antopie [repo](https://code.antopie.org/Antopie/antopie) [live](https://antopie.org/)
* ServNest [repo](https://code.antopie.org/servnest/docs) [live](https://servnest.niv.re/)
* Niver [repo](https://code.antopie.org/Antopie/about-niver) [live](https://about.niv.re/)
* Miraty [live](https://miraty.niv.re/)
This is an accumulation of code designed for my specific use-cases without much consideration for affordance, readability, maintainability or performance. You probably don't want to use it as is for your own sites.
2021-10-09 18:13:55 +00:00
## Usage
2021-10-09 18:13:55 +00:00
2023-09-04 21:31:16 +00:00
Place your pages tree in `/*.md`.
`mkht.php [-f] [site_path] [destination]`
2021-10-09 18:13:55 +00:00
2023-09-04 21:31:16 +00:00
`-f` forces generation of every file, erasing already generated files.
2021-10-09 18:13:55 +00:00
2023-09-04 21:31:16 +00:00
If `site_path` is not set, it will default to current directory.
2021-10-09 18:13:55 +00:00
2023-09-04 21:31:16 +00:00
`destination` is optional and can be:
* `onion` if you want links ending with .onion when available (function `clearnetOrOnion`)
2021-10-09 18:13:55 +00:00
## Input
2024-01-15 18:55:39 +00:00
Source pages must end in `.md` and can use Gemtext, Markdown, HTML and PHP.
2023-09-04 21:31:16 +00:00
2024-01-15 18:55:39 +00:00
The following optional files have special meaning:
2023-09-04 21:31:16 +00:00
`/config.ini`
: some default settings can be changed by this file
`/style.css`
: additional CSS
`/head.inc.html`
: added just before `</head>`
`/header.inc.php`
: added just after `<body>`
`/end.inc.html`
: added just before `</body>`
2021-10-09 18:13:55 +00:00
2024-01-15 18:55:39 +00:00
`/po4a.cfg`
: [po4a](https://po4a.org/) configuration file
2023-11-24 19:49:37 +00:00
Files starting with a dot (except for `.htaccess` and `.well-known`) are ignored.
2021-10-09 18:13:55 +00:00
2023-09-04 21:31:16 +00:00
Files containing `draft` in their name (separated from other characters by `.`) are ignored.
2023-10-14 23:18:44 +00:00
Security note: any PHP code in input files is executed with the same permissions as `mkht.php`
## Output
2021-10-09 18:13:55 +00:00
2023-09-04 21:31:16 +00:00
* `/target/*.md`
* `/target/*.html`
* `/target/*.html.gz`
2021-10-09 18:13:55 +00:00
Note that format translation is only done in the following order:
Gemini > Markdown > HTML, which means that the last of these formats you will use will be the first that will be readable by hypertext browsers. (PHP is always executed first.)
2023-09-04 21:31:16 +00:00
## Metadata persistence
HTML IDs are attributed to headings according to their content, therefore modifying a title breaks links to page sections.
### For atom feeds
* Except when a page name start with a date formated as `YYYY-MM-DD-`, the `updated` element of each Atom entry is determined by the modification timestamp of the source file. If using `cp` to backup or transfer files, its `--preserve=timestamps` option should be added.
* Renaming/moving a page creates a new page and deletes the older.
2021-10-09 18:13:55 +00:00
2023-11-24 19:49:37 +00:00
## Dependencies
2021-10-09 18:13:55 +00:00
* PHP
* gzip
2024-01-15 18:55:39 +00:00
* pandoc for Markdown → HTML
* [po4a](https://po4a.org/) for Gettext translation
2021-10-09 18:13:55 +00:00
## License
2021-10-09 18:13:55 +00:00
[AGPLv3+](LICENSE)
This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
2021-10-11 22:03:18 +00:00
You should have received a copy of the GNU Affero General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.