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
|
This tool was made so I could write my content only in `gmi` and publish both a
|
||||||
gemini capsule and a website.
|
gemini capsule and a website.
|
||||||
|
|
||||||
For now, this is very rudimentary and things are bound to change, especially the way
|
For now, this is very rudimentary and things are bound to change... and break from
|
||||||
I structure the directory where my content lives.
|
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
|
## TODO
|
||||||
|
|
||||||
|
@ -23,12 +34,14 @@ I structure the directory where my content lives.
|
||||||
- [ ] move config file to `~/.config` with placeholder values
|
- [ ] move config file to `~/.config` with placeholder values
|
||||||
- [X] check for a config file in `~/.config`
|
- [X] check for a config file in `~/.config`
|
||||||
- [ ] maybe save the old Bash script somewhere for posterity ?
|
- [ ] maybe save the old Bash script somewhere for posterity ?
|
||||||
|
- [ ] reorganise the directory where the content is
|
||||||
|
|
||||||
## My setup
|
## My setup
|
||||||
|
|
||||||
My current folder structure for my capsule+website looks something like this:
|
My current folder structure for my capsule+website looks something like this:
|
||||||
|
|
||||||
```
|
```
|
||||||
my-internet
|
myinternet
|
||||||
├── assets
|
├── assets
|
||||||
│ ├── favicon.ico
|
│ ├── favicon.ico
|
||||||
│ └── style.css
|
│ └── style.css
|
||||||
|
@ -37,9 +50,20 @@ my-internet
|
||||||
│ │ └── index.gmi
|
│ │ └── index.gmi
|
||||||
│ ├── index.gmi
|
│ ├── index.gmi
|
||||||
│ └── projects.gmi
|
│ └── projects.gmi
|
||||||
├── footer.gmi
|
├── gmi-helper
|
||||||
├── html-output
|
│ └── footer.gmi
|
||||||
└── html-parts
|
├── html-helper
|
||||||
├── footer-part.html
|
│ ├── footer-part.html
|
||||||
└── header-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
|
||||||
|
|
16
config.json
16
config.json
|
@ -1,11 +1,11 @@
|
||||||
{
|
{
|
||||||
"workdir" : "where/your/sources/live",
|
"dir_assets" : "path/to/assets",
|
||||||
"dir_assets" : "assets",
|
"dir_gmi_content" : "path/to/content",
|
||||||
"dir_source" : "content",
|
"dir_gmi_helper" : "path/to/gmi-helper",
|
||||||
"dir_helper" : "html-parts",
|
"dir_html_helper" : "path/to/html-helper",
|
||||||
"dir_o_html" : "html-output",
|
"dir_html_out" : "path/to/web",
|
||||||
"rem_gmi" : "your/remote/gemini/path",
|
"rem_gmi" : "remote_server:path/to/gmi",
|
||||||
"rem_html" : "your/remote/html/path",
|
"rem_html" : "remote_server:path/to/gmi",
|
||||||
"port" : "1312"
|
"port" : "1312"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7,13 +7,14 @@ cfg_file = xdg_path if xdg_path.exists() else "config.json"
|
||||||
with open(cfg_file) as f:
|
with open(cfg_file) as f:
|
||||||
config = json.load(f)
|
config = json.load(f)
|
||||||
|
|
||||||
WORKDIR = Path(config["workdir"])
|
DIR_ASSETS = Path(config["dir_assets"])
|
||||||
DIR_ASSETS = WORKDIR / config["dir_assets"]
|
DIR_SOURCE = Path(config["dir_gmi_content"])
|
||||||
DIR_SOURCE = WORKDIR / config["dir_source"]
|
DIR_GMI_HELPER = Path(config["dir_gmi_helper"])
|
||||||
DIR_HELPER = WORKDIR / config["dir_helper"]
|
DIR_HELPER = Path(config["dir_html_helper"])
|
||||||
DIR_O_HTML = WORKDIR / config["dir_o_html"]
|
DIR_O_HTML = Path(config["dir_html_out"])
|
||||||
GMI_FOOTER = WORKDIR / "footer.gmi"
|
|
||||||
|
|
||||||
REM_HTML = config["rem_html"]
|
GMI_FOOTER = DIR_GMI_HELPER / "footer.gmi"
|
||||||
REM_GMI = config["rem_gmi"]
|
|
||||||
RPORT = config["port"]
|
REM_HTML = config["rem_html"]
|
||||||
|
REM_GMI = config["rem_gmi"]
|
||||||
|
RPORT = config["port"]
|
||||||
|
|
|
@ -156,7 +156,7 @@ def process_inline(line: str):
|
||||||
|
|
||||||
def repl_url(matchobj: re.Match):
|
def repl_url(matchobj: re.Match):
|
||||||
url, text = matchobj.groupdict().values()
|
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)
|
url = re.sub(r'gmi$', r'html', url)
|
||||||
return f'<a href="{url}">=> {text if text else url}</a><br>\n'
|
return f'<a href="{url}">=> {text if text else url}</a><br>\n'
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
import re
|
||||||
from gmirator.generate import (
|
from gmirator.generate import (
|
||||||
process_file,
|
process_file,
|
||||||
process_list,
|
process_list,
|
||||||
|
@ -11,13 +12,26 @@ def test_process_file():
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def test_process_list():
|
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
|
pass
|
||||||
|
|
||||||
def test_process_inline():
|
def test_process_inline():
|
||||||
assert process_inline("*Hello* ~~world~~!") == "<em>Hello</em> <s>world</s>!"
|
assert process_inline("*Hello* ~~world~~!") == "<em>Hello</em> <s>world</s>!"
|
||||||
|
|
||||||
def test_repl_url():
|
def test_repl_url_external_gmi_url():
|
||||||
pass
|
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():
|
def test_repl_heading():
|
||||||
pass
|
pass
|
||||||
|
|
Loading…
Reference in a new issue