From 4c5629df62c0a694b6ef3aada2ec86890bfeceaa Mon Sep 17 00:00:00 2001 From: Syndamia Date: Sat, 12 Sep 2026 14:11:59 +0300 Subject: feat!: Rework website generation - Move src.du into src/INIT.du - Replace generate.sh with make.sh, which uses multiple stages for execution and allows customising them. - Added a stage for sitemap generation in make.sh --- generate.sh | 138 ------------------- make.sh | 149 +++++++++++++++++++++ meta/meta.awk | 18 --- src.du | 415 ---------------------------------------------------------- src/INIT.du | 415 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 564 insertions(+), 571 deletions(-) delete mode 100755 generate.sh create mode 100755 make.sh delete mode 100644 meta/meta.awk delete mode 100644 src.du create mode 100644 src/INIT.du diff --git a/generate.sh b/generate.sh deleted file mode 100755 index da4a600..0000000 --- a/generate.sh +++ /dev/null @@ -1,138 +0,0 @@ -#!/bin/sh - -set -e - -: ${SRC:=$PWD/src} -: ${DST:=./website} -: ${URL:=https://syndamia.com} -: ${AWK:="mawk"} - -: ${HEADER:=$PWD/meta/header.html} -: ${FOOTER:=$PWD/meta/footer.html} -: ${META:=$PWD/meta/meta.tsv} - -export SRC DST URL AWK HEADER FOOTER META - -NO_FIX= -NO_META= -NO_TINY= -FORCE_GEN= -HIGHLIGHT= -while [ -n "$1" ] -do - case "$1" in - (-x|--no_fix) NO_FIX=y ;; - (-m|--no_meta) NO_META=y ;; - (-t|--no_tiny) NO_TINY=y ;; - (-f|--force) FORCE_GEN=y ;; - (-hi|--highlight) - if command -v highlight >/dev/null 2>&1 - then - HIGHLIGHT="$(command -v highlight)" - else - echo 'Requested highlighting but could not find "highlight" command!' - exit 1 - fi - ;; - (*) echo "Unknown argument '$1'!" ; exit 1 ;; - esac - shift -done - -export HIGHLIGHT - -#== 0. Check for changes ==# - -if [ -z "$FORCE_GEN" ] \ - && [ -d "$DST" ] \ - && [ -f "$DST/.commit" ] \ - && command -v git >/dev/null 2>&1 \ - && [ -z "$(git status -s)" ] \ - && [ "$(cat "$DST"/.commit)" = "$(git rev-parse HEAD)" ] -then - echo "Output '$DST' is up to date with website source '$SRC'!" - echo "Refusing to generate..." - exit 0 -fi - -#== 1. Fix hardlinks ==# - -if [ -z "$NO_FIX" ] -then - while read -r folder - do - if [ -f "$folder.du" ] && [ ! "$folder.du" -ef "$folder/index.du" ] - then - rm "$folder/index.du" >/dev/null 2>&1 - ln "$folder.du" "$folder/index.du" - fi - done << EOF -$(find "$SRC" -maxdepth 1 -type d) -EOF - - if [ ! "src/favicon.ico" -ef "src/img/favicon.ico" ] - then - rm "src/favicon.ico" >/dev/null 2>&1 - ln "src/img/favicon.ico" "src/favicon.ico" - fi - - echo "[1/4] Fixed folder/index.md hardlinks" -else - echo "[1/4] Skipping..." -fi - -#== 2. Dunbar source to HTML ==# - -mkdir -p "$DST" -rm -r "$DST"/* 2>/dev/null || true -cp -a "$SRC/." "$DST" - -OUTPUT_FORMAT=HTML $AWK \ - -f ./dunbar/dunbar_awk/dunbar.awk \ - ./dunbar/stdenv/sgml.du \ - -c --ignore-errors \ - ./src.du \ - $(find "$DST" -type f -name "*.du") - -date '+%e.%m.%Y %H:%M:%S %Z' > "$DST"/.build - -echo "[2/4] Converted '$SRC' to dunbar in '$DST'" - -#== 3. Meta handling ==# - -if [ -z "$NO_META" ] -then - $AWK -f ./meta/meta.awk \ - -v date="$(date +%Y-%m-%d)" \ - $(find "$DST" -type f -name "*.html") - - if command -v git >/dev/null 2>&1 - then - git rev-parse HEAD > "$DST"/.commit - fi - - echo "[3/4] Added HTML header/footer, generated sitemap" -else - echo "[3/4] Skipping" -fi - -#== 4. Tiny version, strip away styles and other stuff ==# - -if [ -z "$NO_TINY" ] -then - mkdir -p "$DST.tiny" - rm -r "$DST.tiny"/* 2>/dev/null || true - cp -a "$DST/." "$DST.tiny" - rm -rf "$DST.tiny"/*.css "$DST.tiny"/fonts/ - - sed -i \ - -e '/rel="stylesheet"/d' \ - -e '/\ - \ - \ - \ - \ - \ - \ - \ - {title} — Syndamia\ -\ -\ - Jump to content

\ -\ - \ -\ -
\ - \ - \ -
{def href_section;0}{def href_url;0}{def slide;0}{def URL;{trimStart {query inputFile};./website/}} - -# FOOTER - -'def FOOTER
\ - \ -
\ -
\ -\ -
︽
\ -\ -\ -\ -\ -\ -\ -\ - - -# Blocks - -'if {env HIGHLIGHT} -'cmdprocess code highlight -O html -f -S {default {normalise {LANG}};text} -'endif - -## Attention - -'let start question
question -'let end question
- -'let start warn
warn -'let end warn
- -'let start important
important -'let end important
- -'let start note
-'let end note
- -## Headers - -For each header (except H1) we'll add a "gap" element and an anchor link to the end. -The gap is only for visual purposes. - -href function -'def fhref {default {normalise {1}};section-{inc {2}}} -auto href -'def ahref {def href;{fhref {query line};href_section}}{href} -url href -'def uhref {url {1};#{fhref {1};href_url}} - -'let start header2

-'let end header2

-'let start header3

-'let end header3

-'let start header4

-'let end header4

-'let start header5
-'let end header5
-'let start header6
-'let end header6
- -## Teaching - -'let start solution-link
< -'let end solution-link >
- -## Contents - -'let start contents

Contents

-'let end contents
- -## Presentations - -'let start font18
-'let end font18
-'let start centered18
-'let end centered18
-'let start slide18
-'let end slide18
-'let start middle_slide18
-'let end middle_slide18
-'let start title_slide18
-'let end title_slide18
- -'let start font20
-'let end font20
-'let start centered20
-'let end centered20
-'let start slide20
-'let end slide20
-'let start middle_slide20
-'let end middle_slide20
-'let start title_slide20
-'let end title_slide20
- -'let start font22
-'let end font22
-'let start centered22
-'let end centered22
-'let start slide22
-'let end slide22
-'let start middle_slide22
-'let end middle_slide22
-'let start title_slide22
-'let end title_slide22
- -'let start font25
-'let end font25
-'let start centered25
-'let end centered25
-'let start slide25
-'let end slide25
-'let start middle_slide25
-'let end middle_slide25
-'let start title_slide25
-'let end title_slide25
- -'let start font27
-'let end font27
-'let start centered27
-'let end centered27
-'let start slide27
-'let end slide27
-'let start middle_slide27
-'let end middle_slide27
-'let start title_slide27
-'let end title_slide27
- -'let start font35
-'let end font35
-'let start centered35
-'let end centered35
-'let start slide35
-'let end slide35
-'let start middle_slide35
-'let end middle_slide35
-'let start title_slide35
-'let end title_slide35
- -'let start font
-'let end font
-'let start centered
-'let end centered
-'let start slide
-'let end slide
-'let start middle_slide
-'let end middle_slide
-'let start title_slide
-'let end title_slide
- -'let start row
-'let end row
-'let start sqrow
-'let end sqrow
- -'let start width5%
-'let end width5%
-'let start width10%
-'let end width10%
-'let start width15%
-'let end width15%
-'let start width20%
-'let end width20%
-'let start width25%
-'let end width25%
-'let start width30%
-'let end width30%
-'let start width35%
-'let end width35%
-'let start width40%
-'let end width40%
-'let start width45%
-'let end width45%
-'let start width50%
-'let end width50%
-'let start width55%
-'let end width55%
-'let start width60%
-'let end width60%
-'let start width65%
-'let end width65%
-'let start width70%
-'let end width70%
-'let start width75%
-'let end width75%
-'let start width80%
-'let end width80%
-'let start width85%
-'let end width85%
-'let start width90%
-'let end width90%
-'let start width95%
-'let end width95%
- -'let start fright
-'let end fright
-'let start column
-'let end column
- -# Substitutions - -'def due_for_rework {url {b {i Due for rework}};/rework.html} -'def nohtml {greplace {1};<;<\;} - -## Country flags - -'def gb ENG -'def bg BGN - -## File types - -'def ft-photo -'def ft-text -'def ft-zip -'def ft-movie -'def ft-markdown -'def ft-browser - -## Pagenav - -Expects substitutions: -reading -created -edited - -'def breadcrumb » {def x/...;{>= {count {1};/};1}}{if {x/...};{url {substrBefore {1};/};{default {2};./}};{italic {substrAfter {1};/}}} {{if {x/...};breadcrumb;none} {substrAfter {1};/};{substrAfter {2};../}} - -'def pagenav - -## Presentations - -'def line
- -'def presentation-controller

\ - - -'def newrow
- -'def br1
-'def br2
-'def br3
-'def br4
-'def br5
-'def br6
-'def br7
-'def br8
-'def br9
- -## Pagination - - 1 2 3 4 5 -{pagination START_URL;PREV_TITLE;PREV_URL;NEXT;NEXT_URL} - -'def pagination {if {1};{code {url {nohtml <<};{1}}} || }{if {2};{code {url {nohtml <} {2};{3}}}}{if {2}{4}; || }{if {4};{code {url {4} {nohtml >};{5}}}} - -'else -'exit 1 -'endif diff --git a/src/INIT.du b/src/INIT.du new file mode 100644 index 0000000..717f259 --- /dev/null +++ b/src/INIT.du @@ -0,0 +1,415 @@ +'hide Necessary definitions for all pages under src + +'if {eq {ifn {OUTPUT_FORMAT};{env OUTPUT_FORMAT}};HTML} + +# FILENAME + +'def FILENAME {trimEnd {1};du}html + +# HEADER + +Expected substitutions: +title - Page title +desc - Page description + +'def HEADER \ +\ +\ +\ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + {title} — Syndamia\ +\ +\ + Jump to content

\ +\ + \ +\ +
\ + \ + \ +
{def href_section;0}{def href_url;0}{def slide;0}{def URL;{trimStart {query inputFile};./website/}} + +# FOOTER + +'def FOOTER
\ + \ +
\ +
\ +\ +
︽
\ +\ +\ +\ +\ +\ +\ +\ + + +# Blocks + +'if {env HIGHLIGHT} +'cmdprocess code highlight -O html -f -S {default {normalise {LANG}};text} +'endif + +## Attention + +'let start question
question +'let end question
+ +'let start warn
warn +'let end warn
+ +'let start important
important +'let end important
+ +'let start note
+'let end note
+ +## Headers + +For each header (except H1) we'll add a "gap" element and an anchor link to the end. +The gap is only for visual purposes. + +href function +'def fhref {default {normalise {1}};section-{inc {2}}} +auto href +'def ahref {def href;{fhref {query line};href_section}}{href} +url href +'def uhref {url {1};#{fhref {1};href_url}} + +'let start header2

+'let end header2

+'let start header3

+'let end header3

+'let start header4

+'let end header4

+'let start header5
+'let end header5
+'let start header6
+'let end header6
+ +## Teaching + +'let start solution-link
< +'let end solution-link >
+ +## Contents + +'let start contents

Contents

+'let end contents
+ +## Presentations + +'let start font18
+'let end font18
+'let start centered18
+'let end centered18
+'let start slide18
+'let end slide18
+'let start middle_slide18
+'let end middle_slide18
+'let start title_slide18
+'let end title_slide18
+ +'let start font20
+'let end font20
+'let start centered20
+'let end centered20
+'let start slide20
+'let end slide20
+'let start middle_slide20
+'let end middle_slide20
+'let start title_slide20
+'let end title_slide20
+ +'let start font22
+'let end font22
+'let start centered22
+'let end centered22
+'let start slide22
+'let end slide22
+'let start middle_slide22
+'let end middle_slide22
+'let start title_slide22
+'let end title_slide22
+ +'let start font25
+'let end font25
+'let start centered25
+'let end centered25
+'let start slide25
+'let end slide25
+'let start middle_slide25
+'let end middle_slide25
+'let start title_slide25
+'let end title_slide25
+ +'let start font27
+'let end font27
+'let start centered27
+'let end centered27
+'let start slide27
+'let end slide27
+'let start middle_slide27
+'let end middle_slide27
+'let start title_slide27
+'let end title_slide27
+ +'let start font35
+'let end font35
+'let start centered35
+'let end centered35
+'let start slide35
+'let end slide35
+'let start middle_slide35
+'let end middle_slide35
+'let start title_slide35
+'let end title_slide35
+ +'let start font
+'let end font
+'let start centered
+'let end centered
+'let start slide
+'let end slide
+'let start middle_slide
+'let end middle_slide
+'let start title_slide
+'let end title_slide
+ +'let start row
+'let end row
+'let start sqrow
+'let end sqrow
+ +'let start width5%
+'let end width5%
+'let start width10%
+'let end width10%
+'let start width15%
+'let end width15%
+'let start width20%
+'let end width20%
+'let start width25%
+'let end width25%
+'let start width30%
+'let end width30%
+'let start width35%
+'let end width35%
+'let start width40%
+'let end width40%
+'let start width45%
+'let end width45%
+'let start width50%
+'let end width50%
+'let start width55%
+'let end width55%
+'let start width60%
+'let end width60%
+'let start width65%
+'let end width65%
+'let start width70%
+'let end width70%
+'let start width75%
+'let end width75%
+'let start width80%
+'let end width80%
+'let start width85%
+'let end width85%
+'let start width90%
+'let end width90%
+'let start width95%
+'let end width95%
+ +'let start fright
+'let end fright
+'let start column
+'let end column
+ +# Substitutions + +'def due_for_rework {url {b {i Due for rework}};/rework.html} +'def nohtml {greplace {1};<;<\;} + +## Country flags + +'def gb ENG +'def bg BGN + +## File types + +'def ft-photo +'def ft-text +'def ft-zip +'def ft-movie +'def ft-markdown +'def ft-browser + +## Pagenav + +Expects substitutions: +reading +created +edited + +'def breadcrumb » {def x/...;{>= {count {1};/};1}}{if {x/...};{url {substrBefore {1};/};{default {2};./}};{italic {substrAfter {1};/}}} {{if {x/...};breadcrumb;none} {substrAfter {1};/};{substrAfter {2};../}} + +'def pagenav + +## Presentations + +'def line
+ +'def presentation-controller

\ + + +'def newrow
+ +'def br1
+'def br2
+'def br3
+'def br4
+'def br5
+'def br6
+'def br7
+'def br8
+'def br9
+ +## Pagination + + 1 2 3 4 5 +{pagination START_URL;PREV_TITLE;PREV_URL;NEXT;NEXT_URL} + +'def pagination {if {1};{code {url {nohtml <<};{1}}} || }{if {2};{code {url {nohtml <} {2};{3}}}}{if {2}{4}; || }{if {4};{code {url {4} {nohtml >};{5}}}} + +'else +'exit 1 +'endif -- cgit v1.3.1-23-gd82d