Clean up code

This commit is contained in:
Sarmonsiill 2021-10-27 11:50:33 +00:00
parent 82b8200632
commit 24eaa0c223
1 changed files with 69 additions and 75 deletions

144
gtc_gen.v
View File

@ -1,104 +1,98 @@
module main module main
import os import os
import regex import regex { regex_opt }
import time { now } import time { now }
const ( const (
bdir = '${os.getenv('HOME')}/.gtc_gen'
ed = os.getenv('EDITOR')
name = 'gtc_gen'
afile = '${os.getenv('HOME')}/.gtc_gen.about'
/* regexp */
query = r"(?P<format>https?)|(?P<format>ftps?)://(?P<token>[\w_]+.)+" query = r"(?P<format>https?)|(?P<format>ftps?)://(?P<token>[\w_]+.)+"
header = "<!DOCTYPE html><html><head><title>::TTL::</title><style>*{box-sizing:border-box;border-spacing:0}html{font:12pt/1.6 Helvetica, sans-serif}body{position:relative;margin:auto;max-width:50rem;color:#433;padding:3.1rem 0.6rem 0;overflow-x:hidden}footer{margin:10rem 0 0}a{color:#07c;cursor:pointer}a{text-decoration:underline solid #d1d1d1;text-underline-position:under}a:hover{color:#088;border-color:#088}ul{padding-top:0.5rem}li{margin-bottom:0.5rem}h1,h2{margin:1.5em 0 0;line-height:1.2em;margin-top:0.5em}h1{font-size:2.2em;font-weight:300}h2{font-size:2.0em;font-weight:300;font-variant-caps:small-caps}hr{border:0;border-top:0.1rem solid #d1d1d1}p > cite:before{content:' ('}p > cite:after{content:') '}</style></head><body>"
/* html templates */ footer = '</body><footer>::FTR::</footer></html>'
hdr = "<!DOCTYPE html><html><head><title>::TTL::</title><style>*{box-sizing:border-box;border-spacing:0}html{font:12pt/1.6 Helvetica, sans-serif}body{position:relative;margin:auto;max-width:50rem;color:#433;padding:3.1rem 0.6rem 0;overflow-x:hidden}footer{margin:10rem 0 0}a{color:#07c;cursor:pointer}a{text-decoration:underline solid #d1d1d1;text-underline-position:under}a:hover{color:#088;border-color:#088}ul{padding-top:0.5rem}li{margin-bottom:0.5rem}h1,h2{margin:1.5em 0 0;line-height:1.2em;margin-top:0.5em}h1{font-size:2.2em;font-weight:300}h2{font-size:2.0em;font-weight:300;font-variant-caps:small-caps}hr{border:0;border-top:0.1rem solid #d1d1d1}p > cite:before{content:' ('}p > cite:after{content:') '}</style></head><body>"
ftr = '</body><footer>::FTR::</footer></html>'
) )
struct Cfg {
base_directory string = '${os.getenv('HOME')}/.gtc_gen'
editor string = os.getenv('EDITOR')
application_name string = 'gtc_gen'
about_file string = '${os.getenv('HOME')}/.gtc_gen.about'
auth string = genv('GTC_GEN_AUTH', 'unknown')
mail string = genv('GTC_GEN_MAIL', 'unknown@example.org')
site_name string = genv('GTC_GEN_SITE', 'gtc_gen -site')
target string = genv('GTC_GEN_TARGET', './site')
url string = genv('GTC_GEN_URL', 'https://example.org')
entries_dir string = os.join_path(genv('GTC_GEN_TARGET', './site'),'entries')
copyleft string = 'License: <a href="https://creativecommons.org/licenses/by-sa/4.0/">CC-BY-SA-4.0</a>'
}
fn main() { fn main() {
if !os.is_dir(bdir) { c := Cfg{}
os.mkdir(bdir) or { panic(err) } if !os.is_dir(c.base_directory) {os.mkdir(c.base_directory) or {panic(err)}}
} if os.args.len != 2 { help() }
if os.args.len != 2 {
help()
}
match os.args[1] { match os.args[1] {
'a' { os.execvp(ed, [os.join_path(bdir, '${now().unix}.post')]) or { panic(err) } } 'a' { os.execvp(c.editor,
'm' { make() } [os.join_path(c.base_directory, '${now().unix}.post')])
or { panic(err) } }
'm' { c.make() }
else { help() } else { help() }
} }
} }
fn genv(k string, d string) string { fn genv(k string, d string) string {
if os.getenv(k) != '' { return os.getenv(k) } if os.getenv(k) != '' { return os.getenv(k) } else {return d}
return d
} }
fn make() { fn parse_links(input string) string {
mut re := regex.regex_opt(query) or { panic(err) } mut re := regex.regex_opt(query) or { panic(err) }
auth := genv('GTC_GEN_AUTH', 'unknown') mut output := ''
mail := genv('GTC_GEN_MAIL', 'no@example.org') for l in re.find_all_str(input) {output=input.replace(l, "<a href='${l}' target='_blank'>${l}</a>")}
site := genv('GTC_GEN_SITE', 'gtc_gen -site') return output
trgt := genv('GTC_GEN_TARGET', './site') }
url := genv('GTC_GEN_URL', 'https://example.org')
ptrgt := os.join_path(trgt, 'entries') fn (c Cfg) make_entries_list() string {
cp_rgt := 'License: <a href="https://creativecommons.org/licenses/by-sa/4.0/">CC-BY-SA-4.0</a>' posts := os.glob('${c.base_directory}/*.post') or {panic(err)}
if !os.is_dir(ptrgt) {os.mkdir_all(ptrgt) or { panic(err) }} mut arr := ''
fls := os.glob('$bdir/*.post') or { panic(err) } for p in posts {
mut indx_arr := []string{} content := os.read_file(p) or { panic(err) }
for f in fls { lines := content.split_into_lines()
cnt := os.read_file(f) or { panic(err) } if lines.len < 1 { continue }
cnt_arr := cnt.split_into_lines() name := p.split('/').last().trim('.post')
if cnt_arr.len < 1 { continue } ts := time.unix(name.int())
n := f.split('/').last().trim('.post') title := lines[0].capitalize()
lt := time.unix(n.int()) parsed_content := parse_links(lines[1..].join('<br>'))
ttl := cnt_arr[0].capitalize() arr = "<li><a href='${c.url}/entries/${name}.html'>$title</a></li>"+arr
mut p_cnt := cnt_arr[1..].join('<br>') os.write_file(
lnks := re.find_all_str(p_cnt) os.join_path(c.entries_dir, '${name}.html'),
for lnk in lnks { header.replace('::TTL::', '$title | $c.site_name') +
p_cnt = p_cnt.replace(lnk, "<a href='${lnk}' target='_blank'>${lnk}</a>") "<h1><a href='$c.url'>$c.site_name</a></h1><h2>$title</h2><p>written:
} $ts.ymmdd() $ts.hhmm() by $c.auth ($c.mail)</p>
indx_arr << "<li><a href='${url}/entries/${n}.html'>$ttl</a></li>" <p>${parsed_content}</p>" +
os.write_file(os.join_path(ptrgt, '${n}.html'), hdr.replace('::TTL::', '$ttl | $site') + footer.replace('::FTR::', c.copyleft)) or { panic(err) }
"<h1><a href='$url'>$site</a></h1><h2>$ttl</h2><p>written:
$lt.ymmdd() $lt.hhmm() by $auth ($mail)</p>
<p>${p_cnt}</p>" +
ftr.replace('::FTR::', cp_rgt)) or { panic(err) }
} }
indx_arr = indx_arr.reverse() return arr
/* if we find ~/.gtc_gen.about we use that text content as an about }
* -section on the index page. */
fn (c Cfg) make() {
if !os.is_dir(c.entries_dir){os.mkdir_all(c.entries_dir) or {panic(err)}}
mut about := '' mut about := ''
if os.is_file(afile) { if os.is_file(c.about_file) {
acnt := os.read_file(afile) or { panic(err) } content := os.read_file(c.about_file) or { panic(err) }
about = '<h2>About</h2><p>${acnt}</p><hr />' about = '<h2>About</h2><p>${parse_links(content)}</p><hr />'
lnks := re.find_all_str(about)
for lnk in lnks {
about = about.replace(lnk, "<a href='${lnk}' target='_blank'>${lnk}</a>")
}
} }
os.write_file(os.join_path(trgt, 'index.html'), hdr.replace('::TTL::', site) + os.write_file(
"<h1><a href='$url'>$site</a></h1>${about}<ul>${indx_arr.join('')}</ul>" + os.join_path(c.target, 'index.html'),
ftr.replace('::FTR::', cp_rgt)) or { panic(err) } header.replace('::TTL::', c.site_name)+
"<h1><a href='$c.url'>$c.site_name</a></h1>${about}"+
"<ul>${c.make_entries_list()}</ul>"+
footer.replace('::FTR::', c.copyleft)) or { panic(err) }
} }
fn help() { fn help() {
println("gtc_gen help - made by sarmonsiill <sarmonsiill@tilde.guru>\n println("gtc_gen - made by sarmonsiill <sarmonsiill@tilde.guru>\n
\t$name a\tadd a new post \tgtc_gen a\tadd a new post\n\tgtc_gen m\ttranspile posts
\t$name m\ttranspile posts into site \n--\nEnvironment variables\n\n\tGTC_GEN_AUTH\tname of author
\n--\nEnvironment variables\n \tGTC_GEN_MAIL\temail of author\n\tGTC_GEN_SITE\tsite title
\tGTC_GEN_AUTH\tPrinted as author in site if defined \tGTC_GEN_TARGET\tsite output\n\tGTC_GEN_URL\tdomain of the site. incl https://
\tGTC_GEN_MAIL\tPrinted as email in site if defined
\tGTC_GEN_SITE\tUsed as site title if defined
\tGTC_GEN_TARGET\tLocation of transpiled website if defined
\tGTC_GEN_URL\tThe domain of the site. Don't forget to include https:// or http://
\nFirst line of the post will become the header. Filename will become timestamp. \nFirst line of the post will become the header. Filename will become timestamp.
Raw posts are stored in \$HOME/.gtc_gen posts are stored in \$HOME/.gtc_gen\n~/.gtc_gen.about is uses as an about -section on the index.")
If ~/.gtc_gen.about exists it uses that text content as an about -section on the index.
That is it.")
exit(1) exit(1)
} }