Compare commits

..

8 Commits

Author SHA1 Message Date
veclav talica
c36ce7dd20 tag listings 2024-02-16 18:29:50 +05:00
veclav talica
715ddbc39f rework to-the-toop footer once again 2024-02-16 17:10:59 +05:00
veclav talica
b8b551869f host.sh 2024-02-16 17:05:17 +05:00
veclav talica
c9ae970a59 format style.css 2024-02-16 17:01:58 +05:00
veclav talica
eb7b9f114e .gitignore: ignore __pycache__ folder 2024-02-16 16:54:24 +05:00
veclav talica
18098a6859 use #!/usr/bin/env bash 2024-02-16 16:53:21 +05:00
veclav talica
f1d6e8e0a2 use $CC in make 2024-02-16 16:50:30 +05:00
veclav talica
f56f102530 add new tags 2024-02-16 16:29:54 +05:00
15 changed files with 137 additions and 65 deletions

2
.gitignore vendored
View File

@ -1,4 +1,4 @@
**/__pycache__/*
**/__pycache__/
html/
./.*/
[articles/**/.static/]

View File

@ -1,7 +1,7 @@
Title: Testing Firefox Wasm Tail Call
Brief: Or why assumptions are not always correct.
Date: 1708076705
Tags: Wasm, Interpreters
Tags: Optimization, Wasm, Interpreters
CSS: /style.css
### Lore ###

View File

@ -1,7 +1,7 @@
Title: Hand Optimized Simplex 2D
Brief: Results of messing around with moving and hoisting stuff around.
Date: 1688995095
Tags: Programming, GLSL, OpenGL
Tags: Programming, GLSL, OpenGL, Optimization
CSS: /style.css
![](/articles/hand-opt-simplex-2d/noise.png)

View File

@ -1,7 +1,7 @@
Title: Cached Neocities Uploads
Brief: Making uploading of directories to Neocities less painful.
Date: 1707585916
Tags: Bash
Tags: Programming, Bash
CSS: /style.css
Quick and dirty Bash-based sha256sum checksum solution to create stamps for later checking and rejection.

View File

@ -1,7 +1,7 @@
#!/bin/sh
#!/usr/bin/env bash
cd $(dirname "$0")
mkdir -p ./.dynamic
mkdir -p ./.temp
gcc -Wno-unused-result -Wno-incompatible-pointer-types waveforms.c ../../tools/gifenc/gifenc.c -I../../tools -O2 -o ./.temp/waveforms
$CC -Wno-unused-result -Wno-incompatible-pointer-types waveforms.c ../../tools/gifenc/gifenc.c -I../../tools -O2 -o ./.temp/waveforms
./.temp/waveforms

View File

@ -1,7 +1,12 @@
#!/bin/sh
#!/usr/bin/env bash
set +e
# Settings:
# =========
export CC=cc
export URL=https://mjestecko.neocities.org
mkdir -p ./html/articles
./tools/main_page_generator.py ./articles | ./tools/mmd/build/multimarkdown > ./html/index.html
@ -9,7 +14,7 @@ mkdir -p ./html/articles
for d in ./articles/*/; do
if [ -d "$d" ]; then
if test -f "$d/make"; then
"$d/make"
("$d/make")
fi
if test -d "$d/.dynamic"; then
mkdir -p "./html/articles/$(basename -- $d)"
@ -19,8 +24,15 @@ for d in ./articles/*/; do
mkdir -p "./html/articles/$(basename -- $d)"
cp -r "$d/.static/." "./html/articles/$(basename -- $d)/"
fi
./tools/article_wrapper.py "$d/page.mmd" https://mjestecko.neocities.org | ./tools/mmd/build/multimarkdown > "./html/articles/$(basename -- $d).html"
./tools/article_wrapper.py "$d/page.mmd" $URL | ./tools/mmd/build/multimarkdown > "./html/articles/$(basename -- $d).html"
fi
done
./tools/feed_generator.py ./articles/ https://mjestecko.neocities.org > ./html/feed.xml
mkdir -p "./html/tags/"
./tools/tag_listing_generator.py ./articles/ ./html/ | ./tools/mmd/build/multimarkdown > "./html/tags.html"
for f in ./html/tags/*.html; do
echo $(cat "$f" | ./tools/mmd/build/multimarkdown) > "$f"
done
./tools/feed_generator.py ./articles/ $URL > ./html/feed.xml

View File

@ -1,4 +1,4 @@
#!/usr/bin/bash
#!/usr/bin/env bash
set +e
shopt -s extglob

3
host.sh Executable file
View File

@ -0,0 +1,3 @@
#!/usr/bin/env bash
python3 -m http.server --directory ./html/

View File

@ -1,4 +1,4 @@
#!/bin/sh
#!/usr/bin/env bash
git submodule init
git submodule update

View File

@ -18,7 +18,7 @@ def parse_metadata(filepath: str) -> {}:
if key == "Date":
result["Date"] = time.gmtime(int(val))
elif key == "Tags":
result["Tags"] = val.split(",")
result["Tags"] = [v.strip() for v in val.split(",")]
else:
result[key] = val
result["Last Edit"] = time.gmtime(int(subprocess.getoutput(r"stat -c %Y " + filepath)))

View File

@ -24,7 +24,7 @@ with open(argv[1], "r") as f:
metadata = parse_metadata(argv[1])
directory = path.split(path.dirname(path.abspath(argv[1])))[-1]
title = metadata.get("Title", "Oopsie, somebody forgot to name the article!")
title = metadata["Title"]
article_head = "\n# " + title + "\n"
brief = metadata.get("Brief")
@ -41,10 +41,12 @@ if not last_edit is None:
last_edit.tm_mday != date.tm_mday or last_edit.tm_year != date.tm_year:
article_head += f"-- Edited: *{MONTHS[last_edit.tm_mon]} {last_edit.tm_mday}, {last_edit.tm_year} UTC*\n\n"
# todo: Hyperlinks to appropriate tag pages.
tags = metadata.get("Tags")
if tags:
article_head += f"""-- Tags: *{",".join(tags)}*\n\n"""
tag_links = []
for tag in tags:
tag_links.append(f"[{tag}](/tags/{urllib.parse.quote(tag.lower())}.html)")
article_head += f"""-- Tags: *{", ".join(tag_links)}*\n\n"""
article_head += "---\n\n"

View File

@ -10,6 +10,7 @@ HEAD_EMBED = """
<li><a href="/articles/mjestečko.html">about</a></li>
<li><a href="https://modarchive.org/index.php?request=view_artist_modules&query=96070">tracks</a></li>
<li><a rel="me" href="https://poto.cafe/@veclavtalica">mastodon</a></li>
<li><a href="/tags.html">tags</a></li>
</ul>
</nav>
@ -17,7 +18,7 @@ HEAD_EMBED = """
NOTICE = """
<footer>
<a href="#top">Take me home </a>
<a href="#top">^ Return</a>
</footer>
"""

54
tools/tag_listing_generator.py Executable file
View File

@ -0,0 +1,54 @@
#!/usr/bin/env python3
# todo: Problems might arise with casing if there are overlaps such as 'Tag' and 'tag'.
from sys import argv, exit
import time, urllib.parse, re
from os import walk
import os.path as path
from article_utils import the_line_after_metadata, parse_metadata
from page_shares import wrap_page
tag_listing_header = "CSS: /style.css\n\n"
main_listing_header = "CSS: /style.css\n\n"
if len(argv) <= 1:
print("No article directory was supplied")
exit(-1)
if len(argv) <= 2:
print("No tag listing output directory was supplied")
exit(-1)
tag_to_tag_page = {}
tag_to_articles = {}
tag_counts = {}
article_to_title = {}
for root, dirs, _ in walk(argv[1]):
for d in dirs:
metadata = parse_metadata(path.abspath(root + '/' + d + "/page.mmd"))
article = "/articles/" + urllib.parse.quote(d) + ".html"
for tag in metadata.get('Tags', []):
tag_to_articles[tag] = tag_to_articles.get(tag, []) + [article]
tag_counts[tag] = tag_counts.get(tag, 0) + 1
article_to_title[article] = metadata['Title']
break
for tag in tag_to_articles:
tag_page = f"/tags/{urllib.parse.quote(tag.lower())}.html"
tag_to_tag_page[tag] = tag_page
with open(argv[2] + tag_page, 'w') as f:
tagged_article_listing = f"\n# Tagged {tag} #\n---\n" + \
'\n'.join(f"- [{article_to_title[article]}]({article})" \
for article in tag_to_articles[tag])
f.write(tag_listing_header + wrap_page(tagged_article_listing))
main_listing = "\n# Tag Listing #\n---\n" + \
', '.join(f"[{tag}]({tag_to_tag_page[tag]}) ({tag_counts[tag]})" \
for tag in sorted(tag_counts.keys(), key=lambda x: tag_counts[x], reverse=True)) + \
'\n\n'
print(main_listing_header + wrap_page(main_listing))

View File

@ -1,4 +1,4 @@
#!/usr/bin/bash
#!/usr/bin/env bash
for cur in ./html/{*,*/*,*/*/*}; do
if [ -f "$cur" ] && [[ ! "$cur" == *.upload-checksum ]]; then