summaryrefslogtreecommitdiffstats
path: root/vendor
diff options
context:
space:
mode:
authorJan Tuomi <jans.tuomi@gmail.com>2024-03-26 19:06:18 +0200
committerJan Tuomi <jans.tuomi@gmail.com>2024-03-26 21:25:10 +0200
commit1dcfacfa22cc50a95ab057023ed58dcb0608c05e (patch)
tree62176995c34486ec812c01e38ce57b039d5ce064 /vendor
parent7debfa9aa2f19ea12345accc5b1213ef01f61f71 (diff)
Improve stuff
Diffstat (limited to 'vendor')
-rwxr-xr-xvendor/bin/pandoc-rss227
-rw-r--r--vendor/share/pandoc-rss/data/language-codes103
-rw-r--r--vendor/share/pandoc-rss/data/templates/date.value1
-rw-r--r--vendor/share/pandoc-rss/data/templates/item.xml14
4 files changed, 345 insertions, 0 deletions
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>