From d96b504bc4f926de86d06c3797b2fbcafb8727bf Mon Sep 17 00:00:00 2001 From: Linus Torvalds Date: Mon, 27 Aug 2012 13:19:06 -0700 Subject: [PATCH] Only quote the quote characters in xml attributes The quoting of single and double quotes is only necessary for attributes, and is irritating for other fields in that it makes the fields almost unreadable in the xml file. Single quotes in particular are common, and turning "it's" into "it's" is just not reasonable for dive notes etc. So add a flag to whether the xml quoting is for an attribute or not, and take that into account. Signed-off-by: Linus Torvalds --- save-xml.c | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/save-xml.c b/save-xml.c index 6b08c95..3464cd6 100644 --- a/save-xml.c +++ b/save-xml.c @@ -67,10 +67,9 @@ static void show_pressure(FILE *f, pressure_t pressure, const char *pre, const c * characters, but at least libxml2 doesn't like them. It doesn't even * allow them quoted. So we just skip them and replace them with '?'. * - * Nothing else (and if we ever do this using attributes, we'd need to - * quote the quotes we use too). + * If we do this for attributes, we need to quote the quotes we use too. */ -static void quote(FILE *f, const char *text) +static void quote(FILE *f, const char *text, int is_attribute) { const char *p = text; @@ -98,9 +97,13 @@ static void quote(FILE *f, const char *text) escape = "&"; break; case '\'': + if (!is_attribute) + continue; escape = "'"; break; case '\"': + if (!is_attribute) + continue; escape = """; break; } @@ -112,7 +115,7 @@ static void quote(FILE *f, const char *text) } } -static void show_utf8(FILE *f, const char *text, const char *pre, const char *post) +static void show_utf8(FILE *f, const char *text, const char *pre, const char *post, int is_attribute) { int len; @@ -127,7 +130,7 @@ static void show_utf8(FILE *f, const char *text, const char *pre, const char *po len--; /* FIXME! Quoting! */ fputs(pre, f); - quote(f, text); + quote(f, text, is_attribute); fputs(post, f); } @@ -177,7 +180,7 @@ static void show_location(FILE *f, struct dive *dive) } prefix = buffer; } - show_utf8(f, dive->location, prefix,"\n"); + show_utf8(f, dive->location, prefix,"\n", 0); } static void save_overview(FILE *f, struct dive *dive) @@ -186,10 +189,10 @@ static void save_overview(FILE *f, struct dive *dive) save_temperatures(f, dive); show_duration(f, dive->surfacetime, " ", "\n"); show_location(f, dive); - show_utf8(f, dive->divemaster, " ","\n"); - show_utf8(f, dive->buddy, " ","\n"); - show_utf8(f, dive->notes, " ","\n"); - show_utf8(f, dive->suit, " ","\n"); + show_utf8(f, dive->divemaster, " ","\n", 0); + show_utf8(f, dive->buddy, " ","\n", 0); + show_utf8(f, dive->notes, " ","\n", 0); + show_utf8(f, dive->suit, " ","\n", 0); } static void save_cylinder_info(FILE *f, struct dive *dive) @@ -268,7 +271,7 @@ static void save_one_event(FILE *f, struct event *ev) show_index(f, ev->type, "type='", "'"); show_index(f, ev->flags, "flags='", "'"); show_index(f, ev->value, "value='", "'"); - show_utf8(f, ev->name, " name='", "'"); + show_utf8(f, ev->name, " name='", "'", 1); fprintf(f, " />\n"); } -- 2.45.2