Introduction
Introduction Statistics Contact Development Disclaimer Help
compare attributes case-sensitively, remove duplicate comparisons - jfconvert -…
git clone git://git.codemadness.org/jfconvert
Log
Files
Refs
README
LICENSE
---
commit 59db718080ecd81eeaff6ac50298d488044c3001
parent f7cde52eef12a6e77c28199a678de8665836e9e6
Author: Hiltjo Posthuma <[email protected]>
Date: Mon, 3 Apr 2023 18:30:22 +0200
compare attributes case-sensitively, remove duplicate comparisons
Diffstat:
M jf2atom.c | 97 +++++++++++++++--------------…
1 file changed, 47 insertions(+), 50 deletions(-)
---
diff --git a/jf2atom.c b/jf2atom.c
@@ -16,6 +16,9 @@
/* control-character in the ASCII range 0-127: compatible with UTF-8 */
#define ISCNTRL(c) ((c) < ' ' || (c) == 0x7f)
+/* compare attributes case-sensitively */
+#define attrcmp strcmp
+
static int itemisopen = 0, enclosureisopen = 0;
/* Escape characters below as HTML 2.0 / XML 1.0. */
@@ -43,15 +46,15 @@ processnode(struct json_node *nodes, size_t depth, const ch…
if (depth == 2) {
if (nodes[0].type == JSON_TYPE_OBJECT) {
if (nodes[1].type == JSON_TYPE_STRING) {
- if (!strcasecmp(nodes[1].name, "title")) {
+ if (!attrcmp(nodes[1].name, "title")) {
fputs("<title type=\"text\">", stdout);
xmlencode(value, stdout);
fputs("</title>\n", stdout);
- } else if (!strcasecmp(nodes[1].name, "home_pa…
+ } else if (!attrcmp(nodes[1].name, "home_page_…
fputs("<link rel=\"alternate\" type=\"…
xmlencode(value, stdout);
fputs("\" />\n", stdout);
- } else if (!strcasecmp(nodes[1].name, "descrip…
+ } else if (!attrcmp(nodes[1].name, "descriptio…
fputs("<subtitle>", stdout);
xmlencode(value, stdout);
fputs("</subtitle>\n", stdout);
@@ -65,7 +68,7 @@ processnode(struct json_node *nodes, size_t depth, const char…
if (nodes[0].type == JSON_TYPE_OBJECT &&
nodes[1].type == JSON_TYPE_ARRAY &&
nodes[2].type == JSON_TYPE_OBJECT &&
- !strcasecmp(nodes[1].name, "items")) {
+ !attrcmp(nodes[1].name, "items")) {
if (enclosureisopen) {
fputs(" />\n", stdout);
enclosureisopen = 0;
@@ -82,28 +85,28 @@ processnode(struct json_node *nodes, size_t depth, const ch…
if (nodes[0].type == JSON_TYPE_OBJECT &&
nodes[1].type == JSON_TYPE_ARRAY &&
nodes[2].type == JSON_TYPE_OBJECT &&
- !strcasecmp(nodes[1].name, "items")) {
+ !attrcmp(nodes[1].name, "items")) {
outtag = NULL;
outtype = NULL;
outhref = NULL;
- if (!strcasecmp(nodes[3].name, "content_html")) {
+ if (!attrcmp(nodes[3].name, "content_html")) {
outtag = "content";
outtype = "html";
- } else if (!strcasecmp(nodes[3].name, "content_text"))…
+ } else if (!attrcmp(nodes[3].name, "content_text")) {
outtag = "content";
outtype = "text";
- } else if (!strcasecmp(nodes[3].name, "date_published"…
+ } else if (!attrcmp(nodes[3].name, "date_published")) {
outtag = "published";
- } else if (!strcasecmp(nodes[3].name, "date_modified")…
+ } else if (!attrcmp(nodes[3].name, "date_modified")) {
outtag = "updated";
- } else if (!strcasecmp(nodes[3].name, "id")) {
+ } else if (!attrcmp(nodes[3].name, "id")) {
outtag = "id";
- } else if (!strcasecmp(nodes[3].name, "summary")) {
+ } else if (!attrcmp(nodes[3].name, "summary")) {
outtag = "summary";
- } else if (!strcasecmp(nodes[3].name, "title")) {
+ } else if (!attrcmp(nodes[3].name, "title")) {
outtag = "title";
- } else if (!strcasecmp(nodes[3].name, "url")) {
+ } else if (!attrcmp(nodes[3].name, "url")) {
outtag = "link";
outhref = value;
value = NULL;
@@ -132,63 +135,42 @@ processnode(struct json_node *nodes, size_t depth, const …
}
}
- /* 1.0 author name */
if (depth == 5) {
+ /* 1.0 author name */
if (nodes[0].type == JSON_TYPE_OBJECT &&
nodes[1].type == JSON_TYPE_ARRAY &&
nodes[2].type == JSON_TYPE_OBJECT &&
nodes[3].type == JSON_TYPE_OBJECT &&
nodes[4].type == JSON_TYPE_STRING &&
- !strcasecmp(nodes[1].name, "items") &&
- !strcasecmp(nodes[3].name, "author") &&
- !strcasecmp(nodes[4].name, "name")) {
+ !attrcmp(nodes[1].name, "items") &&
+ !attrcmp(nodes[3].name, "author") &&
+ !attrcmp(nodes[4].name, "name")) {
fputs("\t<author><name>", stdout);
xmlencode(value, stdout);
fputs("</name></author>\n", stdout);
}
- }
- /* 1.1 author name */
- if (depth == 6) {
- if (nodes[0].type == JSON_TYPE_OBJECT &&
- nodes[1].type == JSON_TYPE_ARRAY &&
- nodes[2].type == JSON_TYPE_OBJECT &&
- nodes[3].type == JSON_TYPE_ARRAY &&
- nodes[4].type == JSON_TYPE_OBJECT &&
- nodes[5].type == JSON_TYPE_STRING &&
- !strcasecmp(nodes[1].name, "items") &&
- !strcasecmp(nodes[3].name, "authors") &&
- !strcasecmp(nodes[5].name, "name")) {
- fputs("\t<author><name>", stdout);
- xmlencode(value, stdout);
- fputs("</name></author>\n", stdout);
- }
- }
-
- /* tags / categories */
- if (depth == 5) {
+ /* tags / categories */
if (nodes[0].type == JSON_TYPE_OBJECT &&
nodes[1].type == JSON_TYPE_ARRAY &&
nodes[2].type == JSON_TYPE_OBJECT &&
nodes[3].type == JSON_TYPE_ARRAY &&
nodes[4].type == JSON_TYPE_STRING &&
- !strcasecmp(nodes[1].name, "items") &&
- !strcasecmp(nodes[3].name, "tags")) {
+ !attrcmp(nodes[1].name, "items") &&
+ !attrcmp(nodes[3].name, "tags")) {
fputs("\t<category term=\"", stdout);
xmlencode(value, stdout);
fputs("\" />\n", stdout);
}
- }
- /* enclosure */
- if (depth == 5) {
+ /* enclosure */
if (nodes[0].type == JSON_TYPE_OBJECT &&
nodes[1].type == JSON_TYPE_ARRAY &&
nodes[2].type == JSON_TYPE_OBJECT &&
nodes[3].type == JSON_TYPE_ARRAY &&
nodes[4].type == JSON_TYPE_OBJECT &&
- !strcasecmp(nodes[1].name, "items") &&
- !strcasecmp(nodes[3].name, "attachments")) {
+ !attrcmp(nodes[1].name, "items") &&
+ !attrcmp(nodes[3].name, "attachments")) {
if (enclosureisopen)
fputs(" />\n", stdout);
fputs("\t<link rel=\"enclosure\"", stdout);
@@ -196,25 +178,40 @@ processnode(struct json_node *nodes, size_t depth, const …
}
}
- /* enclosure attributes */
if (depth == 6) {
+ /* 1.1 author name */
+ if (nodes[0].type == JSON_TYPE_OBJECT &&
+ nodes[1].type == JSON_TYPE_ARRAY &&
+ nodes[2].type == JSON_TYPE_OBJECT &&
+ nodes[3].type == JSON_TYPE_ARRAY &&
+ nodes[4].type == JSON_TYPE_OBJECT &&
+ nodes[5].type == JSON_TYPE_STRING &&
+ !attrcmp(nodes[1].name, "items") &&
+ !attrcmp(nodes[3].name, "authors") &&
+ !attrcmp(nodes[5].name, "name")) {
+ fputs("\t<author><name>", stdout);
+ xmlencode(value, stdout);
+ fputs("</name></author>\n", stdout);
+ }
+
+ /* enclosure attributes */
if (nodes[0].type == JSON_TYPE_OBJECT &&
nodes[1].type == JSON_TYPE_ARRAY &&
nodes[2].type == JSON_TYPE_OBJECT &&
nodes[3].type == JSON_TYPE_ARRAY &&
nodes[4].type == JSON_TYPE_OBJECT &&
(nodes[5].type == JSON_TYPE_STRING || nodes[5].type == JSO…
- !strcasecmp(nodes[1].name, "items") &&
- !strcasecmp(nodes[3].name, "attachments")) {
- if (!strcasecmp(nodes[5].name, "url")) {
+ !attrcmp(nodes[1].name, "items") &&
+ !attrcmp(nodes[3].name, "attachments")) {
+ if (!attrcmp(nodes[5].name, "url")) {
fputs(" href=\"", stdout);
xmlencode(value, stdout);
fputs("\"", stdout);
- } else if (!strcasecmp(nodes[5].name, "mime_type")) {
+ } else if (!attrcmp(nodes[5].name, "mime_type")) {
fputs(" type=\"", stdout);
xmlencode(value, stdout);
fputs("\"", stdout);
- } else if (!strcasecmp(nodes[5].name, "size_in_bytes")…
+ } else if (!attrcmp(nodes[5].name, "size_in_bytes")) {
fputs(" length=\"", stdout);
xmlencode(value, stdout);
fputs("\"", stdout);
You are viewing proxied material from codemadness.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.