Summary Files Commits Branches @commit @diff @stats
path: root / generate.sh
blob: 2434378f6d3b6cadee82ed11aab5d5f288cdae11 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#!/bin/bash

: ${REPO_FOLDER:=.}
: ${GEN_FOLDER:=./website}
: ${GEN_TINY_FOLDER:=./website.tiny}
: ${AWK_FILE:=/tmp/syndamiadotcom-awk}

# 0. Helper functions {{{
	dur=0
	startTimer() {
		dur="$(date +%s%N)"
	}

	endTimer() {
		dur="$(echo "scale=4 ; ($(date +%s%N) - $dur) / 1000000000" | bc -l)"
		printf "%.3fs    $1\n" $dur
	}
# }}}
# 1. Markdown source to HTML {{{
	[ $# -eq 0 -a "$(id -u -n)" != "www-data" ] && echo "[Warning] Running in \"production\" by a user that isn't www-root!"
	
	[ ! -d "$GEN_FOLDER" ] && mkdir "$GEN_FOLDER"
	[ $# -eq 0 -a "$(stat -c %U "$GEN_FOLDER")" != "www-data" ] && echo "[Warning] Running in \"production\" while $GEN_FOLDER isn't owned by www-data!"
	
	# Remove record of previously generated files
	rm -f "$GEN_FOLDER/.files"
	ssg "$REPO_FOLDER/src" "$GEN_FOLDER" "Syndamia" "https://syndamia.com" >/dev/null
# }}}
# 2. Editing HTML files with AWK {{{
	createAWKscript() {
		# "librarires"
		find "$REPO_FOLDER/awk-edits" -type f -name "#*.awk"     -exec cat {} +  > "$AWK_FILE"
		# Scripts
		find "$REPO_FOLDER/awk-edits" -type f -name "[A-Z]*.awk" -exec cat {} + >> "$AWK_FILE"
		echo '{if ($0 != 0) print}' >> "$AWK_FILE"
		# Post-print part of scripts
		find "$REPO_FOLDER/awk-edits" -type f -name "[a-z]*.awk" -exec cat {} + >> "$AWK_FILE"
	}
	# $1 - $libs, for devs
	runAWKscript() {
		[ -z "$1" ] && params="-f $AWK_FILE" \
		            || params="$1 -f $AWK_FILE -f /tmp/awk-print $postfile"
		for file in $(find "$GEN_FOLDER" -type f -name "*.html"); do
			awk --posix $params "$file" > tmp && mv -f tmp "$file"
		done
	}

	if [ $# -eq 0 ]; then # Run in "production"
		createAWKscript
		runAWKscript


	elif [ "$1" == 'dev' ]; then
		startTimer
			createAWKscript
		endTimer "generation of $AWK_FILE"
		startTimer
			runAWKscript
		endTimer "$AWK_FILE"


	elif [ "$1" == 'devs' ]; then
		echo '{if ($0 != 0) print}' > /tmp/awk-print
		libs=""
		for l in $(find "$REPO_FOLDER/awk-edits" -type f -name "#*.awk"); do
			libs+=" -f $l "
		done

		for i in $(find "$REPO_FOLDER/awk-edits" -type f -name "[A-Z]*.awk") $(find "$REPO_FOLDER/awk-edits" -type f -name "[a-z]*.awk" -not -name "post-[A-Z]*.awk"); do
			AWK_FILE="$i"

			postfile="$(find "$REPO_FOLDER/awk-edits" -type f -name "post-${AWK_FILE##*/}")"
			if [ -n "$postfile" ]; then
				i="$i + $postfile"
				postfile=" -f ${postfile}"
			fi

			startTimer
				runAWKscript "$libs"
			endTimer "$i"
		done
	fi
# }}}
# 3. Tiny version, strip away styles and other stuff {{{
	[ ! -d "$GEN_TINY_FOLDER" ] && mkdir "$GEN_TINY_FOLDER"
	[ $# -eq 0 -a "$(stat -c %U "$GEN_TINY_FOLDER")" != "www-data" ] && echo "[Warning] Running in \"production\" while $GEN_TINY_FOLDER isn't owned by www-data!"

	# Just take what is already made, no need to regenerate everything
	cp -r "$GEN_FOLDER"/* "$GEN_TINY_FOLDER"

	# Remove unnecessary files
	rm -f  "$GEN_TINY_FOLDER"/*.css
	rm -rf "$GEN_TINY_FOLDER"/fonts/
	rm -f  "$GEN_TINY_FOLDER"/.files

	improveForTINY() {
		for file in $(find "$GEN_TINY_FOLDER" -type f -name "*.html"); do
			# Remove references to stylesheets in all files
			sed -i -E 's/^.*(rel="stylesheet|\<script|btn).*//g' $file
			sed -i 's/<span>Content/<br><span>Content/g' $file
			# Fix svg images being too big (scaling without limit)
			sed -i 's/<\/head>/\t<style>img[src$="svg"] { max-height: 1em; } #index-contents-img { max-width: 7.6em; }<\/style>\n<\/head>/' $file
		done
	}

	if [ $# -eq 0 ]; then
		improveForTINY

	
	else
		startTimer
			improveForTINY
		endTimer "tiny website page improvements"
	fi
# }}}