diff --git a/resource.c b/resource.c index 05cd794..7147dfb 100644 --- a/resource.c +++ b/resource.c @@ -152,18 +152,20 @@ mkd_cleanup(Document *doc) void ___mkd_xml(char *p, int size, FILE *out) { - char c; + unsigned char c; while ( size-- > 0 ) { - if ( !isascii(c = *p++) ) - continue; + c = *p++; + switch (c) { - case '<': fputs("<", out); break; - case '>': fputs(">", out); break; - case '&': fputs("&", out); break; - case '"': fputs(""", out); break; - case '\'':fputs("'", out); break; - default: putc(c,out); break; + case '<': fputs("<", out); break; + case '>': fputs(">", out); break; + case '&': fputs("&", out); break; + case '"': fputs(""", out); break; + case '\'': fputs("'", out); break; + default: if ( isascii(c) || (c & 0x80) ) + putc(c, out); + break; } } } diff --git a/tests/xml.t b/tests/xml.t index 6418a43..1e3acdf 100644 --- a/tests/xml.t +++ b/tests/xml.t @@ -41,4 +41,13 @@ else ./echo "ok" fi +./echo -n ' xml output with multibyte utf-8 .. ' + +if ./echo 'tecnología y servicios más confiables' | ./markdown -fcdata | grep 'tecnología y servicios más confiables' >/dev/null; then + ./echo "ok" +else + ./echo "FAILED" + rc=1 +fi + exit $rc