Compare commits
4 commits
d492b67dc1
...
e364217734
Author | SHA1 | Date | |
---|---|---|---|
e364217734 | |||
99288c294a | |||
06bc97ab77 | |||
d7090b836a |
5 changed files with 67 additions and 28 deletions
40
README.md
40
README.md
|
@ -3,8 +3,19 @@
|
|||
This tool was made so I could write my content only in `gmi` and publish both a
|
||||
gemini capsule and a website.
|
||||
|
||||
For now, this is very rudimentary and things are bound to change, especially the way
|
||||
I structure the directory where my content lives.
|
||||
For now, this is very rudimentary and things are bound to change... and break from
|
||||
version to version.
|
||||
|
||||
## Features
|
||||
|
||||
- generates HTML from gemtext
|
||||
- can synchronise your files with your server using rsync
|
||||
|
||||
## Notes on usage
|
||||
|
||||
Good practice for gemini dictates that we don't use multiple `h1` titles in one page
|
||||
and for that reason, the last (and therefore the first) `h1` title encountered will
|
||||
be used as the title of the HTML page.
|
||||
|
||||
## TODO
|
||||
|
||||
|
@ -23,12 +34,14 @@ I structure the directory where my content lives.
|
|||
- [ ] move config file to `~/.config` with placeholder values
|
||||
- [X] check for a config file in `~/.config`
|
||||
- [ ] maybe save the old Bash script somewhere for posterity ?
|
||||
- [ ] reorganise the directory where the content is
|
||||
|
||||
## My setup
|
||||
|
||||
My current folder structure for my capsule+website looks something like this:
|
||||
|
||||
```
|
||||
my-internet
|
||||
myinternet
|
||||
├── assets
|
||||
│ ├── favicon.ico
|
||||
│ └── style.css
|
||||
|
@ -37,9 +50,20 @@ my-internet
|
|||
│ │ └── index.gmi
|
||||
│ ├── index.gmi
|
||||
│ └── projects.gmi
|
||||
├── footer.gmi
|
||||
├── html-output
|
||||
└── html-parts
|
||||
├── footer-part.html
|
||||
└── header-part.html
|
||||
├── gmi-helper
|
||||
│ └── footer.gmi
|
||||
├── html-helper
|
||||
│ ├── footer-part.html
|
||||
│ └── header-part.html
|
||||
├── README.md
|
||||
└── web
|
||||
├── favicon.ico
|
||||
├── gemlog
|
||||
│ └── index.html
|
||||
├── index.html
|
||||
├── projects.html
|
||||
└── style.css
|
||||
```
|
||||
|
||||
This is only meant as a reference if my code isn't clear enough and had too much
|
||||
implicits
|
||||
|
|
14
config.json
14
config.json
|
@ -1,11 +1,11 @@
|
|||
{
|
||||
"workdir" : "where/your/sources/live",
|
||||
"dir_assets" : "assets",
|
||||
"dir_source" : "content",
|
||||
"dir_helper" : "html-parts",
|
||||
"dir_o_html" : "html-output",
|
||||
"rem_gmi" : "your/remote/gemini/path",
|
||||
"rem_html" : "your/remote/html/path",
|
||||
"dir_assets" : "path/to/assets",
|
||||
"dir_gmi_content" : "path/to/content",
|
||||
"dir_gmi_helper" : "path/to/gmi-helper",
|
||||
"dir_html_helper" : "path/to/html-helper",
|
||||
"dir_html_out" : "path/to/web",
|
||||
"rem_gmi" : "remote_server:path/to/gmi",
|
||||
"rem_html" : "remote_server:path/to/gmi",
|
||||
"port" : "1312"
|
||||
}
|
||||
|
||||
|
|
|
@ -7,12 +7,13 @@ cfg_file = xdg_path if xdg_path.exists() else "config.json"
|
|||
with open(cfg_file) as f:
|
||||
config = json.load(f)
|
||||
|
||||
WORKDIR = Path(config["workdir"])
|
||||
DIR_ASSETS = WORKDIR / config["dir_assets"]
|
||||
DIR_SOURCE = WORKDIR / config["dir_source"]
|
||||
DIR_HELPER = WORKDIR / config["dir_helper"]
|
||||
DIR_O_HTML = WORKDIR / config["dir_o_html"]
|
||||
GMI_FOOTER = WORKDIR / "footer.gmi"
|
||||
DIR_ASSETS = Path(config["dir_assets"])
|
||||
DIR_SOURCE = Path(config["dir_gmi_content"])
|
||||
DIR_GMI_HELPER = Path(config["dir_gmi_helper"])
|
||||
DIR_HELPER = Path(config["dir_html_helper"])
|
||||
DIR_O_HTML = Path(config["dir_html_out"])
|
||||
|
||||
GMI_FOOTER = DIR_GMI_HELPER / "footer.gmi"
|
||||
|
||||
REM_HTML = config["rem_html"]
|
||||
REM_GMI = config["rem_gmi"]
|
||||
|
|
|
@ -156,7 +156,7 @@ def process_inline(line: str):
|
|||
|
||||
def repl_url(matchobj: re.Match):
|
||||
url, text = matchobj.groupdict().values()
|
||||
if not re.findall(r'=> (http|gemini)', url):
|
||||
if not re.findall(r'(http|gemini)', url):
|
||||
url = re.sub(r'gmi$', r'html', url)
|
||||
return f'<a href="{url}">=> {text if text else url}</a><br>\n'
|
||||
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
import re
|
||||
from gmirator.generate import (
|
||||
process_file,
|
||||
process_list,
|
||||
|
@ -11,13 +12,26 @@ def test_process_file():
|
|||
pass
|
||||
|
||||
def test_process_list():
|
||||
test_str = "this is a line outside a list"
|
||||
assert process_list(test_str, True) == ("</ul>\n\n", False)
|
||||
assert process_list(test_str, False) == (test_str, False)
|
||||
test_str = "* this is a list item"
|
||||
assert process_list(test_str, True) == ("<li>this is a list item</li>", True)
|
||||
assert process_list(test_str, False) == ("<ul>\n<li>this is a list item</li>", True)
|
||||
pass
|
||||
|
||||
def test_process_inline():
|
||||
assert process_inline("*Hello* ~~world~~!") == "<em>Hello</em> <s>world</s>!"
|
||||
|
||||
def test_repl_url():
|
||||
pass
|
||||
def test_repl_url_external_gmi_url():
|
||||
external_url = "=> gemini://domain/gempage.gmi\n"
|
||||
new_url = re.sub(r'^=> (?P<url>[^ ]*) ?(?P<text>.*)\n', repl_url, external_url)
|
||||
assert new_url == '<a href="gemini://domain/gempage.gmi">=> gemini://domain/gempage.gmi</a><br>\n'
|
||||
|
||||
def test_repl_url_internal_gmi_url():
|
||||
external_url = "=> /gempage.gmi title\n"
|
||||
new_url = re.sub(r'^=> (?P<url>[^ ]*) ?(?P<text>.*)\n', repl_url, external_url)
|
||||
assert new_url == '<a href="/gempage.html">=> title</a><br>\n'
|
||||
|
||||
def test_repl_heading():
|
||||
pass
|
||||
|
|
Loading…
Reference in a new issue