commit 50d0bc170c2b7c783e09d81d38a824422712b6e5
parent 6df391bcd6dc4cd03349907400d98e6445211f66
Author: Hiltjo Posthuma <hiltjo@codemadness.org>
Date: Fri, 3 Aug 2012 14:59:22 +0200
Rename sfeed_opml_config to sfeed_opml_import
Because I'm adding a sfeed_opml_export script.
Signed-off-by: Hiltjo Posthuma <hiltjo@codemadness.org>
Diffstat:
4 files changed, 100 insertions(+), 98 deletions(-)
diff --git a/sfeed_opml_config.1 b/sfeed_opml_config.1
@@ -1,11 +0,0 @@
-.TH SFEED 1 sfeed\-VERSION
-.SH NAME
-sfeed_opml_config \- generate a sfeedrc config file based on an opml file
-.SH SYNOPSIS
-.B sfeed_opml_config
-.SH DESCRIPTION
-Reads the opml XML data from stdin and writes the config file text to stdout.
-.SH SEE ALSO
-.BR sfeed_update(1)
-.SH BUGS
-Please report them!
diff --git a/sfeed_opml_config.c b/sfeed_opml_config.c
@@ -1,87 +0,0 @@
-/* convert an opml file to sfeedrc file */
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <strings.h>
-#include <expat.h> /* libexpat */
-
-XML_Parser parser; /* expat XML parser state */
-
-char * /* search for attr value by attr name in attributes list */
-getattrvalue(const char **atts, const char *name) {
- const char **attr = NULL, *key, *value;
- if(!atts || !(*atts))
- return NULL;
- for(attr = atts; *attr; ) {
- key = *(attr++);
- value = *(attr++);
- if(key && value && !strcasecmp(key, name))
- return (char *)value;
- }
- return NULL;
-}
-
-void XMLCALL
-xml_handler_start_element(void *data, const char *name, const char **atts) {
- char *feedurl = NULL, *feedname = NULL;;
-
- if(!strcasecmp(name, "outline")) {
- if(!(feedname = getattrvalue(atts, "text")) &&
- !(feedname = getattrvalue(atts, "title")))
- feedname = "unnamed";
- if(!(feedurl = getattrvalue(atts, "xmlurl")))
- feedurl = "";
- printf("\tfeed \"%s\" \"%s\"\n", feedname, feedurl);
- }
-}
-
-void XMLCALL
-xml_handler_end_element(void *data, const char *name) {
-}
-
-int /* parse XML from stream using setup parser, return 1 on success, 0 on failure. */
-xml_parse_stream(XML_Parser parser, FILE *fp) {
- char buffer[BUFSIZ];
- int done = 0, len = 0;
-
- while(!feof(fp)) {
- len = fread(buffer, 1, sizeof(buffer), fp);
- done = (feof(fp) || ferror(fp));
- if(XML_Parse(parser, buffer, len, done) == XML_STATUS_ERROR && (len > 0)) {
- if(XML_GetErrorCode(parser) == XML_ERROR_NO_ELEMENTS)
- return 1; /* Ignore "no elements found" / empty document as an error */
- fprintf(stderr, "sfeed_opml_config: error parsing xml %s at line %lu column %lu\n",
- XML_ErrorString(XML_GetErrorCode(parser)), (unsigned long)XML_GetCurrentLineNumber(parser),
- (unsigned long)XML_GetCurrentColumnNumber(parser));
- return 0;
- }
- } while(!done);
- return 1;
-}
-
-int main(void) {
- int status;
-
- if(!(parser = XML_ParserCreate("UTF-8"))) {
- fputs("sfeed_opml_config: can't create parser", stderr);
- exit(EXIT_FAILURE);
- }
- XML_SetElementHandler(parser, xml_handler_start_element, xml_handler_end_element);
-
- fputs(
- "# paths\n"
- "# NOTE: make sure to uncomment all these if you change it.\n"
- "#sfeedpath=\"$HOME/.sfeed\"\n"
- "#sfeedfile=\"$sfeedpath/feeds\"\n"
- "#sfeedfilenew=\"$sfeedfile.new\"\n"
- "\n"
- "# list of feeds to fetch:\n"
- "feeds() {\n"
- " # feed <name> <url> [encoding]\n", stdout);
- status = xml_parse_stream(parser, stdin);
- fputs("}\n", stdout);
-
- XML_ParserFree(parser);
-
- return status ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/sfeed_opml_import.1 b/sfeed_opml_import.1
@@ -0,0 +1,11 @@
+.TH SFEED 1 sfeed\-VERSION
+.SH NAME
+sfeed_opml_import \- generate a sfeedrc config file based on an opml file
+.SH SYNOPSIS
+.B sfeed_opml_import
+.SH DESCRIPTION
+Reads the opml XML data from stdin and writes the config file text to stdout.
+.SH SEE ALSO
+.BR sfeed_update(1)
+.SH BUGS
+Please report them!
diff --git a/sfeed_opml_import.c b/sfeed_opml_import.c
@@ -0,0 +1,89 @@
+/* convert an opml file to sfeedrc file */
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <strings.h>
+#include <expat.h> /* libexpat */
+
+XML_Parser parser; /* expat XML parser state */
+
+char * /* search for attr value by attr name in attributes list */
+getattrvalue(const char **atts, const char *name) {
+ const char **attr = NULL, *key, *value;
+ if(!atts || !(*atts))
+ return NULL;
+ for(attr = atts; *attr; ) {
+ key = *(attr++);
+ value = *(attr++);
+ if(key && value && !strcasecmp(key, name))
+ return (char *)value;
+ }
+ return NULL;
+}
+
+void XMLCALL
+xml_handler_start_element(void *data, const char *name, const char **atts) {
+ char *feedurl = NULL, *feedname = NULL, *basesiteurl = NULL;
+
+ if(!strcasecmp(name, "outline")) {
+ if(!(feedname = getattrvalue(atts, "text")) &&
+ !(feedname = getattrvalue(atts, "title")))
+ feedname = "unnamed";
+ if(!(basesiteurl = getattrvalue(atts, "htmlurl")))
+ basesiteurl = "";
+ if(!(feedurl = getattrvalue(atts, "xmlurl")))
+ feedurl = "";
+ printf("\tfeed \"%s\" \"%s\" \"%s\"\n", feedname, feedurl, basesiteurl);
+ }
+}
+
+void XMLCALL
+xml_handler_end_element(void *data, const char *name) {
+}
+
+int /* parse XML from stream using setup parser, return 1 on success, 0 on failure. */
+xml_parse_stream(XML_Parser parser, FILE *fp) {
+ char buffer[BUFSIZ];
+ int done = 0, len = 0;
+
+ while(!feof(fp)) {
+ len = fread(buffer, 1, sizeof(buffer), fp);
+ done = (feof(fp) || ferror(fp));
+ if(XML_Parse(parser, buffer, len, done) == XML_STATUS_ERROR && (len > 0)) {
+ if(XML_GetErrorCode(parser) == XML_ERROR_NO_ELEMENTS)
+ return 1; /* Ignore "no elements found" / empty document as an error */
+ fprintf(stderr, "sfeed_opml_config: error parsing xml %s at line %lu column %lu\n",
+ XML_ErrorString(XML_GetErrorCode(parser)), (unsigned long)XML_GetCurrentLineNumber(parser),
+ (unsigned long)XML_GetCurrentColumnNumber(parser));
+ return 0;
+ }
+ } while(!done);
+ return 1;
+}
+
+int main(void) {
+ int status;
+
+ if(!(parser = XML_ParserCreate("UTF-8"))) {
+ fputs("sfeed_opml_config: can't create parser", stderr);
+ exit(EXIT_FAILURE);
+ }
+ XML_SetElementHandler(parser, xml_handler_start_element, xml_handler_end_element);
+
+ fputs(
+ "# paths\n"
+ "# NOTE: make sure to uncomment all these if you change it.\n"
+ "#sfeedpath=\"$HOME/.sfeed\"\n"
+ "#sfeedfile=\"$sfeedpath/feeds\"\n"
+ "#sfeedfilenew=\"$sfeedfile.new\"\n"
+ "\n"
+ "# list of feeds to fetch:\n"
+ "feeds() {\n"
+ " # feed <name> <url> [encoding]\n", stdout);
+ status = xml_parse_stream(parser, stdin);
+ fputs("}\n", stdout);
+
+ XML_ParserFree(parser);
+
+ return status ? EXIT_SUCCESS : EXIT_FAILURE;
+}