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/ html/
./.*/ ./.*/
[articles/**/.static/] [articles/**/.static/]

View File

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

View File

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

View File

@ -1,7 +1,7 @@
Title: Cached Neocities Uploads Title: Cached Neocities Uploads
Brief: Making uploading of directories to Neocities less painful. Brief: Making uploading of directories to Neocities less painful.
Date: 1707585916 Date: 1707585916
Tags: Bash Tags: Programming, Bash
CSS: /style.css CSS: /style.css
Quick and dirty Bash-based sha256sum checksum solution to create stamps for later checking and rejection. 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") cd $(dirname "$0")
mkdir -p ./.dynamic mkdir -p ./.dynamic
mkdir -p ./.temp 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 ./.temp/waveforms

View File

@ -1,7 +1,12 @@
#!/bin/sh #!/usr/bin/env bash
set +e set +e
# Settings:
# =========
export CC=cc
export URL=https://mjestecko.neocities.org
mkdir -p ./html/articles mkdir -p ./html/articles
./tools/main_page_generator.py ./articles | ./tools/mmd/build/multimarkdown > ./html/index.html ./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 for d in ./articles/*/; do
if [ -d "$d" ]; then if [ -d "$d" ]; then
if test -f "$d/make"; then if test -f "$d/make"; then
"$d/make" ("$d/make")
fi fi
if test -d "$d/.dynamic"; then if test -d "$d/.dynamic"; then
mkdir -p "./html/articles/$(basename -- $d)" mkdir -p "./html/articles/$(basename -- $d)"
@ -19,8 +24,15 @@ for d in ./articles/*/; do
mkdir -p "./html/articles/$(basename -- $d)" mkdir -p "./html/articles/$(basename -- $d)"
cp -r "$d/.static/." "./html/articles/$(basename -- $d)/" cp -r "$d/.static/." "./html/articles/$(basename -- $d)/"
fi 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 fi
done 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 set +e
shopt -s extglob 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 init
git submodule update git submodule update

View File

@ -18,7 +18,7 @@ def parse_metadata(filepath: str) -> {}:
if key == "Date": if key == "Date":
result["Date"] = time.gmtime(int(val)) result["Date"] = time.gmtime(int(val))
elif key == "Tags": elif key == "Tags":
result["Tags"] = val.split(",") result["Tags"] = [v.strip() for v in val.split(",")]
else: else:
result[key] = val result[key] = val
result["Last Edit"] = time.gmtime(int(subprocess.getoutput(r"stat -c %Y " + filepath))) 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]) metadata = parse_metadata(argv[1])
directory = path.split(path.dirname(path.abspath(argv[1])))[-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" article_head = "\n# " + title + "\n"
brief = metadata.get("Brief") 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: 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" 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") tags = metadata.get("Tags")
if 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" 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="/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 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 rel="me" href="https://poto.cafe/@veclavtalica">mastodon</a></li>
<li><a href="/tags.html">tags</a></li>
</ul> </ul>
</nav> </nav>
@ -17,7 +18,7 @@ HEAD_EMBED = """
NOTICE = """ NOTICE = """
<footer> <footer>
<a href="#top">Take me home </a> <a href="#top">^ Return</a>
</footer> </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 for cur in ./html/{*,*/*,*/*/*}; do
if [ -f "$cur" ] && [[ ! "$cur" == *.upload-checksum ]]; then if [ -f "$cur" ] && [[ ! "$cur" == *.upload-checksum ]]; then