Compare commits

..

4 commits

Author SHA1 Message Date
e364217734 update README 2023-09-09 14:08:04 +02:00
99288c294a add new tests 2023-09-09 14:07:55 +02:00
06bc97ab77 fix repl_url() which was broken 2023-09-09 14:07:11 +02:00
d7090b836a change constants 2023-09-09 14:06:35 +02:00
5 changed files with 67 additions and 28 deletions

View file

@ -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

View file

@ -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",
"port" : "1312"
"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"
}

View file

@ -7,13 +7,14 @@ 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"])
REM_HTML = config["rem_html"]
REM_GMI = config["rem_gmi"]
RPORT = config["port"]
GMI_FOOTER = DIR_GMI_HELPER / "footer.gmi"
REM_HTML = config["rem_html"]
REM_GMI = config["rem_gmi"]
RPORT = config["port"]

View file

@ -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'

View file

@ -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