@@ -19,6 +19,10 @@ slugify() {
1919 echo " $1 " | tr ' [:upper:]' ' [:lower:]' | sed ' s/[^a-z0-9]/-/g' | sed ' s/--*/-/g' | sed ' s/^-//' | sed ' s/-$//'
2020}
2121
22+ xml_escape () {
23+ sed ' s/&/\&/g; s/</\</g; s/>/\>/g; s/"/\"/g; s/' " '" ' /\'/g'
24+ }
25+
2226cmd_new () {
2327 open_editor=false
2428 [ " $1 " = " -e" ] && open_editor=true && shift
@@ -104,6 +108,44 @@ cmd_build() {
104108 sed -i.bak " s/__BUILD_TIME__/$page_time /g" " $DIST /index.html"
105109 rm -f " $DIST /index.html.bak"
106110
111+ # Generate Atom feed
112+ site_url=$( sed -n ' s/^site_url: *"\{0,1\}\([^"]*\)"\{0,1\} *$/\1/p' " $SCRIPT_DIR /config.yaml" 2> /dev/null | head -1)
113+ site_title=$( sed -n ' s/^site_title: *"\{0,1\}\([^"]*\)"\{0,1\} *$/\1/p' " $SCRIPT_DIR /config.yaml" 2> /dev/null | head -1)
114+ site_author=$( sed -n ' s/^site_author: *"\{0,1\}\([^"]*\)"\{0,1\} *$/\1/p' " $SCRIPT_DIR /config.yaml" 2> /dev/null | head -1)
115+
116+ if [ -n " $site_url " ]; then
117+ feed_updated=$( echo " $sorted " | head -1 | cut -f1)
118+ [ -z " $feed_updated " ] && feed_updated=$( date -u +%Y-%m-%d)
119+ site_url_escaped=$( echo " $site_url " | xml_escape)
120+
121+ cat > " $DIST /feed.xml" << 'FEED_HEADER '
122+ <?xml version="1.0" encoding="utf-8"?>
123+ <feed xmlns="http://www.w3.org/2005/Atom">
124+ FEED_HEADER
125+ printf ' <title>%s</title>\n' " $( echo " $site_title " | xml_escape) " >> " $DIST /feed.xml"
126+ printf ' <link href="%s/feed.xml" rel="self"/>\n' " $site_url_escaped " >> " $DIST /feed.xml"
127+ printf ' <link href="%s/"/>\n' " $site_url_escaped " >> " $DIST /feed.xml"
128+ printf ' <id>%s/</id>\n' " $site_url_escaped " >> " $DIST /feed.xml"
129+ printf ' <updated>%sT00:00:00Z</updated>\n' " $feed_updated " >> " $DIST /feed.xml"
130+ [ -n " $site_author " ] && printf ' <author><name>%s</name></author>\n' " $( echo " $site_author " | xml_escape) " >> " $DIST /feed.xml"
131+
132+ echo " $sorted " | while IFS=' ' read -r date slug title; do
133+ [ -z " $date " ] && continue
134+ article=$( sed -n ' /<article>/,/<\/article>/p' " $DIST /$slug /index.html" )
135+ title_escaped=$( echo " $title " | xml_escape)
136+ content_escaped=$( printf ' %s' " $article " | xml_escape)
137+ printf ' <entry>\n' >> " $DIST /feed.xml"
138+ printf ' <title>%s</title>\n' " $title_escaped " >> " $DIST /feed.xml"
139+ printf ' <link href="%s/%s/"/>\n' " $site_url_escaped " " $slug " >> " $DIST /feed.xml"
140+ printf ' <id>%s/%s/</id>\n' " $site_url_escaped " " $slug " >> " $DIST /feed.xml"
141+ printf ' <updated>%sT00:00:00Z</updated>\n' " $date " >> " $DIST /feed.xml"
142+ printf ' <content type="html">%s</content>\n' " $content_escaped " >> " $DIST /feed.xml"
143+ printf ' </entry>\n' >> " $DIST /feed.xml"
144+ done
145+
146+ echo " </feed>" >> " $DIST /feed.xml"
147+ fi
148+
107149 # Replace commit SHA in all pages
108150 find " $DIST " -name ' *.html' -exec sed -i.bak " s/__COMMIT_SHA__/$commit_sha /g" {} \;
109151 find " $DIST " -name ' *.bak' -delete
0 commit comments