blob: b3ef0ddfcfceff4ca9e73b3f8b3eccd0c647b63e (
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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
|
#!/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 - ${2:-0}" | bc -l)"
printf "%.3fs $1\n" $dur
}
# }}}
# 0.5 Fix hardlinks {{{
startTimer
for folder in $(find "$REPO_FOLDER/src" -maxdepth 1 -type d); do
if [ -f "$folder.md" ] && [ ! "$folder.md" -ef "$folder/index.md" ]; then
rm "$folder/index.md" >/dev/null 2>&1
ln "$folder.md" "$folder/index.md"
fi
done
endTimer "[Stage 0.5] Fixed folder/index.md hardlinks"
# }}}
# 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 -rf "$GEN_FOLDER"
mkdir "$GEN_FOLDER"
startTimer
ssg "$REPO_FOLDER/src" "$GEN_FOLDER" "Syndamia" "https://syndamia.com" >/dev/null 2>&1
endTimer "[Stage 1] Converted Markdown to HTML"
# }}}
# 1.5 Custom logic - timestamps.txt {{{
headc=$(git rev-parse HEAD)
if [ ! -f 'timestamps.txt' ] || [ "$headc" != "$(head -1 timestamps.txt)" ]; then
echo "$headc" > timestamps.txt
startTimer
for file in $(find "$REPO_FOLDER/src" -type f -regex '.*src/[^/]*/[^/]*/.*md'); do
dates=($(git log --follow --pretty=format:%ad --date="format:%d %B %Y" -- $file))
line="./website${file:5:-2}html\t${dates[@]: -3:3}\t${dates[@]:0:3}"
echo -e $line >> timestamps.txt
done
endTimer "[Stage 1.5] Recreated timestamps.txt"
fi
# }}}
# 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"
}
# $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
startTimer
runAWKscript
endTimer "[Stage 2] Ran $AWK_FILE"
elif [ "$1" == 'dev' ]; then
startTimer
createAWKscript
endTimer "[Stage 2] Created $AWK_FILE"
startTimer
runAWKscript
endTimer "[Stage 2] Ran $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
# We only care about how long the script itself was executed, without the time it takes to
# open and close every file, this way we'll subtract this delay
AWK_FILE="$REPO_FOLDER/awk-edits/empty"
startTimer
runAWKscript "$libs"
fileOpenOffset="$(endTimer "[Stage 2] Subtracted time for file open/close")"
printf "$fileOpenOffset\n"
fileOpenOffset="${fileOpenOffset:0:5}"
for i in $(find "$REPO_FOLDER/awk-edits" -type f -name "[A-Z]*.awk"); do
AWK_FILE="$i"
startTimer
runAWKscript "$libs"
endTimer "[Stage 2] Ran $i" "$fileOpenOffset"
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 "[Stage 3] Tiny website improvements"
fi
# }}}
|