blob: 19cc96208a5a09eb5b85999c48994c7b430c9e57 (
plain)
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
|
#!/bin/bash
# vim: fdm=marker
getMeta() { # getMeta <metafield> <file> #{{{
local field="$1" file="$2";
sed -n '/^---$/,/^\.\.\.$/p' $file | \
grep "^${field}:" | \
cut -d' ' -f2- \
|| return 1;
} #}}}
firstLineOf() { # firstLineOf <file> #{{{
local endOfYaml=$(sed -n '/^\.\.\.$/=' "$1")
local tryLine="" tryNum=$((endOfYaml + 1))
while [[ -z $tryLine ]]; do
tryLine=$(sed -n -e "${tryNum}p" "$1" | \
sed -e 's/^[|>] //' \
-e 's/[][]//g' \
-e 's/^#.*//' \
-e 's/^--.*//');
(( tryNum ++ ));
done
echo "$tryLine";
} #}}}
backLinksOf() { # backLinksOf <file> <in files> #{{{
local search="${1}"; shift; local glob="$@";
grep -ql "$search" $glob || return 1;
} #}}}
FILE="$1"; shift;
case "$FILE" in
*.back) # backlinks: compile.sh a.back a.txt #{{{
found=( $(backLinksOf "$(basename ${FILE%.*}).html" ${1%/*}/*.${1##*.}) );
if [[ $? -ne 0 ]]; then
echo "[_island._](../islands.html) <!--__ISLAND__-->"; exit;
fi
for f in "${found[@]}"; do
echo -n "- [$(getMeta title "$f")](../$(basename ${f%.*}).html)";
echo -n '<span class="daisy">'
echo -n "[φ]($(basename ${f%.*}).html)";
echo '</span>'
done
;; #}}}
*island*) # islands: compile.sh islands.txt *.txt #{{{
for f in $(grep -l "__ISLAND__" "$@"); do
echo "- [$(getMeta title "$f")]($(basename ${f%.*}).html)";
done
;; #}}}
*hapax*) # hapax: compile.sh hapax.txt *.hapax #{{{
for word in $(sort $FILE); do
f=$(grep -liwq "^$word$" "$@");
grep -qv "^[^0-9A-Za-z]" <<< $word && \
echo "[$word]($(basename ${f%.*}).html)";
done
;; #}}}
*first-*) # first-lines: compile.sh first-lines.txt *.txt #{{{
for f in "$@"; do
echo "[$(firstLineOf "$f")]($(basename ${f%.*}).html)";
done
;; #}}}
*common-*) # common-titles: compile.sh common-titles.txt *.txt #{{{
for f in "$@"; do
echo "[$(getMeta title "$f")]($(basename ${f%.*}).html)";
done
;; #}}}
*toc*) # table of contents: compile.sh toc.txt *.txt #{{{
for f in "$@"; do
echo "#. [$(getMeta toc "$f")]($(basename ${f%.*}).html)" >> $FILE;
done
;; #}}}
*random*) # randomize.js: compile.sh randomize.js *.html #{{{
rlist=$(echo "$@" | sed -e 's/\(\S\+.html\) \?/"\1",/g' \
-e 's/^\(.*\),$/var files=[\1]/')
sed -i "s/var files=.*/$rlist/" $FILE;
;; #}}}
--fix-head) # fix backlink head: compile.sh --fix-head a.back a.txt #{{{
title="$(getMeta toc "$2")";
id="$(getMeta id "$2")";
sed -i "/__TITLE__/c\
title: $title" "$1";
sed -i "/__ID__/c\
id: $id" "$1";
;; #}}}
*) # bad argument {{{
echo "Bad argument";
exit 1;
;; #}}}
esac
|