sfeed

Simple RSS and Atom feed parser
git clone https://git.sinitax.com/codemadness/sfeed
Log | Files | Refs | README | LICENSE | Upstream | sfeed.txt

sfeed_content (1276B)


      1#!/bin/sh
      2# Content viewer for sfeed(5) lines.
      3
      4# The locale is set to "C" for performance. The input is always UTF-8.
      5LC_ALL=C awk -F '\t' '
      6function unescape(s) {
      7	# use the character "\x01" as a temporary replacement for "\".
      8	gsub("\\\\\\\\", "\x01", s);
      9	gsub("\\\\n", "\n", s);
     10	gsub("\\\\t", "\t", s);
     11	gsub("\x01", "\\", s); # restore "\x01" to "\".
     12	return s;
     13}
     14BEGIN {
     15	htmlconv = ENVIRON["SFEED_HTMLCONV"];
     16	if (!length(htmlconv))
     17		htmlconv = "lynx -stdin -dump " \
     18			"-underline_links -image_links " \
     19			"-display_charset=\"utf-8\" -assume_charset=\"utf-8\" ";
     20}
     21{
     22	if (previtem)
     23		print "\f";
     24	previtem = 1;
     25
     26	print "Title:     " $2;
     27	if (length($7))
     28		print "Author:    " $7;
     29	if (length($9)) {
     30		categories = $9;
     31		gsub("\\|", ", ", categories);
     32		print "Category:  " categories;
     33	}
     34	if (length($3))
     35		print "Link:      " $3;
     36	if (length($8))
     37		print "Enclosure: " $8;
     38	if (!length($4))
     39		next;
     40	print "";
     41	if ($5 == "html") {
     42		# use the link of the item as the base URL for relative URLs in
     43		# HTML content.
     44		base = $3;
     45		if (length(base)) {
     46			gsub("\"", "%22", base); # encode quotes.
     47			base = "<base href=\"" base "\"/>\n";
     48		}
     49		print base unescape($4) | htmlconv;
     50		close(htmlconv);
     51	} else {
     52		print unescape($4);
     53	}
     54}' "$@" | \
     55${PAGER:-less -R}