diff options
| -rw-r--r-- | feed.scm | 79 | ||||
| -rw-r--r-- | main.scm | 22 | ||||
| -rw-r--r-- | static/Merriweather-Black.ttf | bin | 0 -> 141700 bytes | |||
| -rw-r--r-- | static/Merriweather-BlackItalic.ttf | bin | 0 -> 142620 bytes | |||
| -rw-r--r-- | static/Merriweather-Bold.ttf | bin | 0 -> 142040 bytes | |||
| -rw-r--r-- | static/Merriweather-BoldItalic.ttf | bin | 0 -> 143832 bytes | |||
| -rw-r--r-- | static/Merriweather-Italic.ttf | bin | 0 -> 142648 bytes | |||
| -rw-r--r-- | static/Merriweather-Light.ttf | bin | 0 -> 148124 bytes | |||
| -rw-r--r-- | static/Merriweather-LightItalic.ttf | bin | 0 -> 142056 bytes | |||
| -rw-r--r-- | static/Merriweather-Regular.ttf | bin | 0 -> 149120 bytes | |||
| -rw-r--r-- | static/OFL.txt | 93 | ||||
| -rw-r--r-- | static/style.css | 164 | ||||
| -rw-r--r-- | template.html | 8 | ||||
| -rw-r--r-- | utils.scm | 10 | ||||
| -rwxr-xr-x | vendor/bin/pandoc-rss | 227 | ||||
| -rw-r--r-- | vendor/share/pandoc-rss/data/language-codes | 103 | ||||
| -rw-r--r-- | vendor/share/pandoc-rss/data/templates/date.value | 1 | ||||
| -rw-r--r-- | vendor/share/pandoc-rss/data/templates/item.xml | 14 |
18 files changed, 713 insertions, 8 deletions
@@ -1,4 +1,4 @@ -(module feed (generate-feed) +(module feed (generate-feed generate-archive-index) (import scheme (chicken base) (chicken format) @@ -6,12 +6,16 @@ (chicken io) (chicken process) (chicken pathname) + (chicken irregex) + srfi-1 + srfi-13 + srfi-132 utils) - (define (generate-feed archive-dir out-dir) + (define (generate-feed src-dir archive-dir out-dir) (define paths (glob (format "~A/*" archive-dir))) (define output-port - (process "pandoc-rss" + (process "vendor/bin/pandoc-rss" (apply list "-s" "-t" "jan's garden" "-d" "RSS feed for Jan's personal digital garden" @@ -22,5 +26,70 @@ "-w" "https://jan.systems" paths))) (define output (read-string #f output-port)) - (with-output-to-file (make-pathname out-dir "feed.xml") - (λ () (print output))))) + (define out-path (make-pathname out-dir "feed.xml")) + (printf "[info] writing RSS feed to \"~A\"~%" out-path) + (with-output-to-file out-path + (λ () (print output)))) + + (define (collect-fm-lines lines #!optional (acc '())) + (if (string=? "---" (car lines)) + acc + (collect-fm-lines (cdr lines) (cons (car lines) acc)))) + + (define (extract-field field fm) (call/cc (@ extract-field* field fm))) + (define (extract-field* field fm return) + (define (search line) + (define irx (format "^~A: (.+?)$" field)) + (define m (irregex-search irx line)) + (if m + (return (submatch m)))) + + (for-each search fm) + #f) + + (define (read-md-frontmatter md-path) + (define lines (with-input-from-file md-path + (λ () (read-lines)))) + + (define (inner return) + (if (not (string=? "---" (car lines))) + (return #f)) + + (define fm (collect-fm-lines (cdr lines))) + `((title . ,(extract-field "title" fm)) + (date . ,(extract-field "date" fm)) + (kind . ,(extract-field "kind" fm)))) + + (call/cc (@ inner))) + + (define (generate-archive-index archive-dir src-dir) + (define paths (pipe (glob (format "~A/*" archive-dir)) + (@ filter (@ irregex-search "\\.md$")))) + + (define index-alist (map (λ (path) (cons path (read-md-frontmatter path))) paths)) + ;; newest first + (define (compare a b) + (string>? (assocdr 'date (cdr a)) (assocdr 'date (cdr b)))) + + (list-sort! compare index-alist) + + (define (to-li pair) + (define path (car pair)) + (define title (assocdr 'title (cdr pair))) + (define date (assocdr 'date (cdr pair))) + (define kind (assocdr 'kind (cdr pair))) + (define link (pipe path + (@ replace (format "^~A\\/?" src-dir) "/") + (@ replace "\\.md$" ".html"))) + (format "* [~A (~A) [~A]](~A)" title date kind link)) + + (define index-lis (map to-li index-alist)) + (define out-md (string-append "---\n" + "title: Archive\n" + "---\n" + "# Archive\n\n" + (string-join index-lis "\n"))) + + (with-output-to-file (make-pathname archive-dir "index.md") + (λ () (print out-md)))) + ) @@ -27,6 +27,8 @@ "template.html")) (define feed-dir (or (get-environment-variable "FEED_DIR") (make-pathname src-dir "archive"))) +(define static-dir (or (get-environment-variable "STATIC_DIR") + "static")) (assert (> (string-length src-dir) 0)) (assert (> (string-length out-dir) 0)) @@ -118,12 +120,28 @@ (delete-file path))) (for-each (@ delete) (glob (format "~A/*" dir)))) +(define (remove-old-archive-index) + (define path (make-pathname feed-dir "index.md")) + (if (file-exists? path) + (delete-file path))) + +(define (copy-directory from to) + (read-string #f (process "cp" (list "-r" + from + to)))) + ;; run -(printf "[info] generating feed from directory \"~A\"~%" feed-dir) -(generate-feed feed-dir out-dir) +(printf "[info] removing old archive index.md~%") +(remove-old-archive-index) (printf "[info] cleaning up output directory \"~A\"~%" out-dir) (clean-dir out-dir) +(printf "[info] generating feed from archive directory \"~A\"~%" feed-dir) +(generate-feed src-dir feed-dir out-dir) +(printf "[info] generating archive index.md~%") +(generate-archive-index feed-dir src-dir) (printf "[info] generating site with pages from \"~A\"~%" src-dir) (process-dir src-dir) +(printf "[info] copying static files from \"~A\"~%" static-dir) +(copy-directory static-dir (make-pathname out-dir static-dir)) (printf "[info] done.~%") diff --git a/static/Merriweather-Black.ttf b/static/Merriweather-Black.ttf Binary files differnew file mode 100644 index 0000000..50c3b33 --- /dev/null +++ b/static/Merriweather-Black.ttf diff --git a/static/Merriweather-BlackItalic.ttf b/static/Merriweather-BlackItalic.ttf Binary files differnew file mode 100644 index 0000000..4879aba --- /dev/null +++ b/static/Merriweather-BlackItalic.ttf diff --git a/static/Merriweather-Bold.ttf b/static/Merriweather-Bold.ttf Binary files differnew file mode 100644 index 0000000..3e10e02 --- /dev/null +++ b/static/Merriweather-Bold.ttf diff --git a/static/Merriweather-BoldItalic.ttf b/static/Merriweather-BoldItalic.ttf Binary files differnew file mode 100644 index 0000000..5b9d0ec --- /dev/null +++ b/static/Merriweather-BoldItalic.ttf diff --git a/static/Merriweather-Italic.ttf b/static/Merriweather-Italic.ttf Binary files differnew file mode 100644 index 0000000..8e9d03d --- /dev/null +++ b/static/Merriweather-Italic.ttf diff --git a/static/Merriweather-Light.ttf b/static/Merriweather-Light.ttf Binary files differnew file mode 100644 index 0000000..034ef03 --- /dev/null +++ b/static/Merriweather-Light.ttf diff --git a/static/Merriweather-LightItalic.ttf b/static/Merriweather-LightItalic.ttf Binary files differnew file mode 100644 index 0000000..4d19550 --- /dev/null +++ b/static/Merriweather-LightItalic.ttf diff --git a/static/Merriweather-Regular.ttf b/static/Merriweather-Regular.ttf Binary files differnew file mode 100644 index 0000000..3fecc77 --- /dev/null +++ b/static/Merriweather-Regular.ttf diff --git a/static/OFL.txt b/static/OFL.txt new file mode 100644 index 0000000..03dd415 --- /dev/null +++ b/static/OFL.txt @@ -0,0 +1,93 @@ +Copyright 2016 The Merriweather Project Authors (https://github.com/EbenSorkin/Merriweather), with Reserved Font Name "Merriweather".
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at:
+https://openfontlicense.org
+
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/static/style.css b/static/style.css new file mode 100644 index 0000000..d6ee94d --- /dev/null +++ b/static/style.css @@ -0,0 +1,164 @@ +body { + font-size: 16px; + margin: 20px auto; + padding: 10px 15px; + max-width: 800px; + + font-family: "Merriweather", serif; + font-optical-sizing: auto; + font-weight: 400; + font-style: normal; + + line-height: 35px; + + hyphens: initial; +} + +:root { + --dark--text-color: #fff; + --dark--link-color: #bbf; + --dark--bg-color: #222; + --dark--blockquote-color: #ccc; + --dark--blockquote-bg-color: #60606020; + --dark--code-bg-color: #353535; + + --light--text-color: #1a1a1a; + --light--link-color: #0090a0; + --light--bg-color: #fff; + --light--blockquote-color: #606060; + --light--blockquote-bg-color: #c8c8c820; + --light--code-bg-color: #eee; +} + +@media (prefers-color-scheme: dark) { + :root { + --text-color: var(--dark--text-color); + --link-color: var(--dark--link-color); + --bg-color: var(--dark--bg-color); + --blockquote-color: var(--dark--blockquote-color); + --blockquote-bg-color: var(--dark--blockquote-bg-color); + --code-bg-color: var(--dark--code-bg-color); + } +} +@media (prefers-color-scheme: light) { + :root { + --text-color: var(--light--text-color); + --link-color: var(--light--link-color); + --bg-color: var(--light--bg-color); + --blockquote-color: var(--light--blockquote-color); + --blockquote-bg-color: var(--light--blockquote-bg-color); + --code-bg-color: var(--light--code-bg-color); + } +} + +html.dark { + --text-color: var(--dark--text-color); + --link-color: var(--dark--link-color); + --bg-color: var(--dark--bg-color); + --blockquote-color: var(--dark--blockquote-color); + --blockquote-bg-color: var(--dark--blockquote-bg-color); + --code-bg-color: var(--dark--code-bg-color); +} + +html.light { + --text-color: var(--light--text-color); + --link-color: var(--light--link-color); + --bg-color: var(--light--bg-color); + --blockquote-color: var(--light--blockquote-color); + --blockquote-bg-color: var(--light--blockquote-bg-color); + --code-bg-color: var(--light--code-bg-color); +} + +html { + color: var(--text-color); + background-color: var(--bg-color); +} + +a, a:visited { + color: var(--link-color); +} + +blockquote { + color: var(--blockquote-color); +} + +#dark-mode-btn { + border: none; + background: none; + font-size: 30px; + cursor: pointer; +} + +.header-row { + display: flex; + flex-flow: row nowrap; + align-items: center; + justify-content: space-between; + + margin: 30px 0; +} + +.header-row h1 { + margin: 0; +} + +.page-title { + text-decoration: none; + color: var(--text-color) !important; + font-size: 32px; + font-weight: 700; +} + +.page-title:hover { + text-decoration: underline; +} + +code { + padding: 8px 10px; + background-color: var(--code-bg-color); +} + +pre, div.sourceCode { + padding: 8px 10px; + overflow-x: scroll; + background-color: var(--code-bg-color); +} + +img { + max-width: 100%; + width: 100%; + margin: 20px 0; +} + +blockquote { + display: block; + background-color: var(--blockquote-bg-color); + border-left: 10px solid var(--link-color); + margin: 20px 0; + padding: 2px 10px; + quotes: "\201C""\201D""\2018""\2019"; +} + +figure { + max-width: 100%; + padding: 0; + margin: 10px 0; + display: block; +} + +hr { + background: none !important; + height: 0; + margin: 40px auto; + border: none; + border-top: 2px dotted var(--text-color) !important; + width: 50%; +} + +.nojs-hidden { + display: none; +} + +small { + color: grey; +} diff --git a/template.html b/template.html index d0160cd..b6c4aaf 100644 --- a/template.html +++ b/template.html @@ -63,7 +63,7 @@ $endif$ </head> <body> <div class="header-row"> - <h1><a class="page-title" href="/">jan's garden</a></h1> + <a class="page-title" href="/">jan's garden</a> <div id="dark-mode-btn"></div> </div> <nav> @@ -73,6 +73,12 @@ $endif$ <a href="/archive">archive</a> </nav> + $if(title)$ + $if(hide-body-title)$ + $else$ + <h1>$title$ $if(date)$<small>($date$)</small>$endif$ $if(kind)$<small>[$kind$]</small>$endif$</h1> + $endif$ + $endif$ $body$ <script> @@ -35,4 +35,14 @@ (define (submatch m #!optional (index 1)) (irregex-match-substring m index)) + + (define (assocar key alist) + (match (assoc key alist) + [#f #f] + [pair (car pair)])) + + (define (assocdr key alist) + (match (assoc key alist) + [#f #f] + [pair (cdr pair)])) ) diff --git a/vendor/bin/pandoc-rss b/vendor/bin/pandoc-rss new file mode 100755 index 0000000..f1a1d7d --- /dev/null +++ b/vendor/bin/pandoc-rss @@ -0,0 +1,227 @@ +#!/bin/sh + +# Forked from https://github.com/chambln/pandoc-rss +# MIT/X Consortium License + +# © 2020 Gregory Chamberlain <greg@cosine.blue> + +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: + +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. + +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. + +SHARE=${0%/*}/../share/${0##*/} +TEMPLATES_DIR=$SHARE/data/templates +DOMAIN=${PWD##*/} +EMAIL=${EMAIL:-webmaster@$DOMAIN} + +usage () +{ + cat <<EOF +Usage: ${0##*/} [OPTIONS] [FILE]... + -s Produce standalone XML + -t TITLE 'Example Feed' + -d DESCRIPTION 'Short description of the feed' + -l LINK http://example.net + -f FORMAT blog/%s.html => http://example.net/blog/%s.html + -w WEBMASTER 'webmaster@example.net (Real Name)' + -c COPYRIGHT 'Year © Name, CC BY-SA 4.0' + -n LANGUAGE en-GB +EOF +} + +get_language_code () +{ + [ -n "$LANG" ] || exit 1 + code=${LANG%%.*} + primary_code=${code%%_*} + subcode=${code#$primary_code} + subcode=${subcode#_} + printf %s\\n "$primary_code${subcode:+-$subcode}" +} + +is_valid_language_code () +{ + arg=$(printf %s "$1" | tr [A-Z] [a-z]) + while IFS=' ' read -r code _ + do + [ x"$code" = x"#" ] && continue + [ x"$code" = x"$arg" ] && return 0 + done < $SHARE/data/language-codes + return 1 +} + +get_user_fullname () +{ + while IFS=':' read -r user _ _ _ gecos _ + do + if [ x"$user" = x"$LOGNAME" ] + then + user_fullname="${gecos%%,*}" + [ -n "$user_fullname" ] || exit 1 + printf %s\\n "$user_fullname" + return 0 + fi + done < /etc/passwd + return 1 +} + +get_user_contact () +{ + user_fullname="${NAME:-$(get_user_fullname)}" + printf '%s\n' "$EMAIL${user_fullname:+ ($user_fullname)}" +} + +get_metadata_value () +{ + key=$1 + shift + value=$(pandoc --template="$TEMPLATES_DIR/$key.value" "$@") + [ -n "$value" ] || return 1 + printf %s\\n "$value" +} + +get_date () +{ + input_file=$1 + shift + if date=$(get_metadata_value date "$input_file") + then + if [ -f /opt/homebrew/bin/gdate ]; then + date_cmd=/opt/homebrew/bin/gdate + else + date_cmd=/usr/bin/date + fi + $date_cmd --utc --date "$date" +'%a, %d %b %Y %T +0000' + fi +} + +generate_feed_item () +{ + input_file=$1 + shift + + case $guid_format in + *%s*) + filename=${input_file##*/} + basename=${filename%.*} + guid=$(printf "$guid_format" "$basename") + set -- -V "guid:$guid" "$@" + esac + + if date=$(get_date "$input_file") + then + set -- -V "date:$date" "$@" + fi + + if $omit_body + then + set -- -V body: "$@" + fi + + pandoc --template="$TEMPLATES_DIR/item.xml" "$@" "$input_file" +} + +generate_feed_items () +{ + for input_file do + generate_feed_item "$input_file" + done +} + +print_xml_element () +{ + [ -n "$2" ] || return 1 + printf '<%s>%s</%s>\n' "$1" "$2" "$1" +} + +generate_standalone_feed () +{ + if [ -z "$channel_language" ] + then + if language_code=$(get_language_code) + then + channel_language=$language_code + fi + fi + + if ! is_valid_language_code "$channel_language" + then + >&2 printf 'Invalid language code: ‘%s’\n' "$channel_language" + >&2 printf 'See %s\n' "$SHARE"/data/language-codes + exit 1 + fi + + echo '<?xml version="1.0" encoding="UTF-8" ?>' + echo '<rss version="2.0">' + echo '<channel>' + print_xml_element title "$channel_title" + print_xml_element link "$channel_link" + print_xml_element description "$channel_description" + print_xml_element language "$channel_language" + print_xml_element webMaster "${channel_webmaster:=$(get_user_contact)}" + print_xml_element copyright "$channel_copyright" + print_xml_element docs https://www.rssboard.org/rss-specification + echo '<generator>pandoc-rss</generator>' + generate_feed_items "$@" + echo '</channel>' + echo '</rss>' +} + +channel_title=$DOMAIN +channel_link=https://$DOMAIN +channel_description="Posts from $DOMAIN" +unset channel_webmaster +unset channel_copyright +unset channel_language +omit_body=false +guid_optarg=auto +standalone=false +while getopts t:l:d:w:c:n:of:hs OPT +do + case "$OPT" in + t) channel_title=$OPTARG ;; + l) channel_link=${OPTARG%/} ;; + d) channel_description=$OPTARG ;; + w) channel_webmaster=$OPTARG ;; + c) channel_copyright=$OPTARG ;; + n) channel_language=$OPTARG ;; + o) omit_body=true ;; + f) guid_optarg=$OPTARG ;; + s) standalone=true ;; + ?) usage; exit 2 ;; + esac +done +shift $((OPTIND - 1)) + +case $guid_optarg in + auto) guid_optarg=%s.html +esac +case $guid_optarg in + omit) guid_format= ;; + *://*%s*) guid_format=$guid_optarg ;; + *%s*) [ "$channel_link" ] && + guid_format=$channel_link/${guid_optarg#/} ;; + *) >&2 printf 'Invalid guid format ‘%s’\n' "$guid_optarg" + exit 1 +esac + +if $standalone +then + generate_standalone_feed "$@" +else + generate_feed_items "$@" +fi diff --git a/vendor/share/pandoc-rss/data/language-codes b/vendor/share/pandoc-rss/data/language-codes new file mode 100644 index 0000000..a2e774a --- /dev/null +++ b/vendor/share/pandoc-rss/data/language-codes @@ -0,0 +1,103 @@ +# Canonical list of valid RSS 2.0 language codes. +# +# Data extracted from "RSS Language Codes" by the RSS Advisory Board +# https://www.rssboard.org/rss-language-codes#table +# +# CC-BY-SA 2.0 +# https://creativecommons.org/licenses/by-sa/2.0/ +af Afrikaans +sq Albanian +eu Basque +be Belarusian +bg Bulgarian +ca Catalan +zh-cn Chinese (Simplified) +zh-tw Chinese (Traditional) +hr Croatian +cs Czech +da Danish +nl Dutch +nl-be Dutch (Belgium) +nl-nl Dutch (Netherlands) +en English +en-au English (Australia) +en-bz English (Belize) +en-ca English (Canada) +en-ie English (Ireland) +en-jm English (Jamaica) +en-nz English (New Zealand) +en-ph English (Phillipines) +en-za English (South Africa) +en-tt English (Trinidad) +en-gb English (United Kingdom) +en-us English (United States) +en-zw English (Zimbabwe) +et Estonian +fo Faeroese +fi Finnish +fr French +fr-be French (Belgium) +fr-ca French (Canada) +fr-fr French (France) +fr-lu French (Luxembourg) +fr-mc French (Monaco) +fr-ch French (Switzerland) +gl Galician +gd Gaelic +de German +de-at German (Austria) +de-de German (Germany) +de-li German (Liechtenstein) +de-lu German (Luxembourg) +de-ch German (Switzerland) +el Greek +haw Hawaiian +hu Hungarian +is Icelandic +in Indonesian +ga Irish +it Italian +it-it Italian (Italy) +it-ch Italian (Switzerland) +ja Japanese +ko Korean +mk Macedonian +no Norwegian +pl Polish +pt Portuguese +pt-br Portuguese (Brazil) +pt-pt Portuguese (Portugal) +ro Romanian +ro-mo Romanian (Moldova) +ro-ro Romanian (Romania) +ru Russian +ru-mo Russian (Moldova) +ru-ru Russian (Russia) +sr Serbian +sk Slovak +sl Slovenian +es Spanish +es-ar Spanish (Argentina) +es-bo Spanish (Bolivia) +es-cl Spanish (Chile) +es-co Spanish (Colombia) +es-cr Spanish (Costa Rica) +es-do Spanish (Dominican Republic) +es-ec Spanish (Ecuador) +es-sv Spanish (El Salvador) +es-gt Spanish (Guatemala) +es-hn Spanish (Honduras) +es-mx Spanish (Mexico) +es-ni Spanish (Nicaragua) +es-pa Spanish (Panama) +es-py Spanish (Paraguay) +es-pe Spanish (Peru) +es-pr Spanish (Puerto Rico) +es-es Spanish (Spain) +es-uy Spanish (Uruguay) +es-ve Spanish (Venezuela) +sv Swedish +sv-fi Swedish (Finland) +sv-se Swedish (Sweden) +tr Turkish +uk Ukranian diff --git a/vendor/share/pandoc-rss/data/templates/date.value b/vendor/share/pandoc-rss/data/templates/date.value new file mode 100644 index 0000000..fb43da6 --- /dev/null +++ b/vendor/share/pandoc-rss/data/templates/date.value @@ -0,0 +1 @@ +$date$ diff --git a/vendor/share/pandoc-rss/data/templates/item.xml b/vendor/share/pandoc-rss/data/templates/item.xml new file mode 100644 index 0000000..deb86fe --- /dev/null +++ b/vendor/share/pandoc-rss/data/templates/item.xml @@ -0,0 +1,14 @@ +<item> +$if(pagetitle)$ +<title>$if(kind)$<small>[$kind$]</small> $endif$$pagetitle$</title> +$endif$ +$if(date)$ +<pubDate>$date$</pubDate> +$endif$ +$if(guid)$ +<guid>$guid$</guid> +$endif$ +$if(body)$ +<description><![CDATA[$body$]]></description> +$endif$ +</item> |
