forked from paradigm/bedrocklinux-website
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgenerate_website.sh
executable file
·123 lines (110 loc) · 2.86 KB
/
generate_website.sh
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
#!/bin/sh
# ensure working directory is clean
rm -r html 2>/dev/null
mkdir html 2>/dev/null
# move into markdown directory to make some path stuff easier
cd markdown
# make directory structure
for DIRECTORY in $(find . -mindepth 1 -type d)
do
mkdir ../html/$DIRECTORY
done
# generate pages from markdown
for PAGE in $(find . -type f -name "*.md")
do
echo $PAGE
OUTFILE=$(echo "../html/$PAGE" | sed 's/.md$/.html/')
DIRNAME=$(dirname $PAGE)
TITLE=$(cat $PAGE | sed -n 's/^Title:[ ]\+//p')
NAVFILE=$(cat $PAGE | sed -n 's/^Nav:[ ]\+//p')
RELATIVEPATH=$(echo $DIRNAME | sed 's/[^\/]\+/../g' | sed 's/^.//')
cat header1 |\
sed "s/TITLEGOESHERE/$TITLE/" |\
sed "s,RELATIVEPATH,$RELATIVEPATH," > $OUTFILE
markdown $DIRNAME/$NAVFILE |\
sed 's/<ul>/<ul id=nav>/' >> $OUTFILE
cat header2 >> $OUTFILE
sed '1,2d' $PAGE |\
markdown |\
awk -F"{|}" '
/^<ul>$/{
X=1
}
/^<li>{/ && X==1{
print "<ul "$2">"
X=2
}
!/^<ul>$/{
if(X==1){
print "<ul>"
print $0
}else
if(X==0){
print $0
}
X=0
}
' |\
sed 's,~(,<code class="changethis">,g' |\
sed 's,~),</code>,g' |\
sed 's/<\([^>]\+\)>{\([^}]\+\)}[ ]\+/<\1 \2>/g' |\
sed 's,<pre><code,<pre,g' |\
sed 's,</code></pre>,</pre>,g' >> $OUTFILE
cat footer >> $OUTFILE
done
# copy non-page files
for FILE in $(find . -type f)
do
if ! basename $FILE | grep -q '.md$' &&\
! basename $FILE | grep -q '.nav$' &&\
! basename $FILE | grep -q '^header1$' &&\
! basename $FILE | grep -q '^header2$' &&\
! basename $FILE | grep -q '^footer$'
then
cp $FILE ../html/$FILE
fi
done
# generate atom.xml
OUTFILE="../html/atom.xml"
LASTUPDATE=$(gawk '/^<p><small>[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]<\/small><\/p>$/{print substr($0,11,10);exit}' ../html/news.html)
NUMBER_OF_ITEMS=$(grep -c "<h2 id" ../html/news.html)
cat << EOF >$OUTFILE
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>Bedrock Linux</title>
<link href="http://bedrocklinux.org/atom.xml" rel="self" />
<link href="http://bedrocklinux.org/"/>
<id>http://bedrocklinux.org/atom.xml</id>
<updated>$LASTUPDATE</updated>
EOF
gawk -F\" '
BEGIN{
ITEMCOUNTER='$NUMBER_OF_ITEMS'
}
/^<h2 id=/||/^<\/section>$/{
URL="http://bedrocklinux.org/news.html#"$2
TITLE=substr($3,2,length($3)-6)
if(IN_CONTENT==1){
print "\t\t</content>"
print "\t</entry>"
}
IN_CONTENT=0
}
!/^$/&&(IN_CONTENT==1){
gsub(/</,"\\<",$0)
gsub(/>/,"\\>",$0)
print "\t\t\t"$0
}
/^<p><small>[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]<\/small><\/p>/{
DATE=substr($0,11,10)
print "\t<entry>"
print "\t\t<id>http://bedrocklinux.org/news/"ITEMCOUNTER"</id>"
print "\t\t<title>"TITLE"</title>"
print "\t\t<link href=\""URL"\"/>"
print "\t\t<updated>"DATE"</updated>"
print "\t\t<content type=\"html\">"
IN_CONTENT=1
ITEMCOUNTER=ITEMCOUNTER-1
}
' ../html/news.html >> $OUTFILE
echo '</feed>' >> $OUTFILE