socsvn commit: r272600 - soc2014/zkorchev/freebsd_head/lib/libsol
zkorchev at FreeBSD.org
zkorchev at FreeBSD.org
Mon Aug 18 10:31:39 UTC 2014
Author: zkorchev
Date: Mon Aug 18 10:31:38 2014
New Revision: 272600
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=272600
Log:
xml special characters handling
Modified:
soc2014/zkorchev/freebsd_head/lib/libsol/sol.c
Modified: soc2014/zkorchev/freebsd_head/lib/libsol/sol.c
==============================================================================
--- soc2014/zkorchev/freebsd_head/lib/libsol/sol.c Mon Aug 18 10:23:41 2014 (r272599)
+++ soc2014/zkorchev/freebsd_head/lib/libsol/sol.c Mon Aug 18 10:31:38 2014 (r272600)
@@ -52,6 +52,32 @@
// TODO track whether a key or a value is expected and generate error when appropriate?
+static void xml_tag(const char *tag)
+{
+ for(; *tag; ++tag)
+ switch (*tag)
+ {
+ case ' ':
+ putchar('_');
+ break;
+ case '(':
+ case ')':
+ break;
+ case '%':
+ fputs(" percent", stdout);
+ break;
+ case '|':
+ fputs(" or ", stdout);
+ break;
+ case '/':
+ putchar('.');
+ break;
+ default:
+ putchar(*tag);
+ break;
+ }
+}
+
static void xml_open(struct sol_stream *restrict stream)
{
const char *tag;
@@ -62,8 +88,11 @@
if (!tag && (stream->ctx.c.depth > 1))
tag = stream->ctx.c.stack[stream->ctx.c.depth - 2];
- if (tag)
- printf("<%s>", tag);
+ if (tag) {
+ putchar('<');
+ xml_tag(tag);
+ putchar('>');
+ }
else
printf("<item>");
}
@@ -86,7 +115,9 @@
if (tag)
{
- printf("</%s>", tag);
+ fputs("</", stdout);
+ xml_tag(tag);
+ putchar('>');
if (clean) free(tag);
}
else
More information about the svn-soc-all
mailing list