diff --git a/src/generatedoc.c b/src/generatedoc.c
index fc6929e1..a60610e1 100644
--- a/src/generatedoc.c
+++ b/src/generatedoc.c
@@ -51,6 +51,9 @@ const char * const skins[] = {
/// Export the help to HTML files
static int Export_help(const char * path);
+/// Convert from latin1 to utf-8
+static int fputs_utf8(const char * str, size_t len, FILE * f);
+
int main(int argc,char * argv[])
{
int r;
@@ -193,7 +196,7 @@ static const char * Export_help_table(FILE * f, unsigned int page)
fprintf(f, "\n");
fprintf(f, "
\n");
fprintf(f, "%s\n", title);
- fprintf(f, "\n");
+ fprintf(f, "\n");
fprintf(f, "\n");
fprintf(f, "\n");
fprintf(f, "\n");
@@ -253,9 +256,10 @@ static const char * Export_help_table(FILE * f, unsigned int page)
if (link_end == NULL)
link_end = link + strlen(link);
}
- fprintf(f, "%.*s", (int)(link - table[index].Text), table[index].Text);
- fprintf(f, "%.*s%s", prefix,
- (int)(link_end - link), link, (int)(link_end - link), link, link_end);
+ fputs_utf8(table[index].Text, (size_t)(link - table[index].Text), f);
+ fprintf(f, "%.*s", prefix,
+ (int)(link_end - link), link, (int)(link_end - link), link);
+ fputs_utf8(link_end, (size_t)-1, f);
}
else
{
@@ -263,16 +267,19 @@ static const char * Export_help_table(FILE * f, unsigned int page)
const char * text = table[index].Text;
while (text[0] != '\0')
{
- size_t i = strcspn(text, "<>");
+ size_t i = strcspn(text, "<>&");
if (text[i] == '\0')
{ // no character to escape
- fprintf(f, "%s", text);
+ fputs_utf8(text, (size_t)-1, f);
break;
}
if (i > 0)
- fprintf(f, "%.*s", (int)i, text);
+ fputs_utf8(text, (size_t)i, f);
switch(text[i])
{
+ case '&':
+ fprintf(f, "&");
+ break;
case '<':
fprintf(f, "<");
break;
@@ -343,7 +350,7 @@ static int Export_help(const char * path)
fprintf(findex, "\n");
fprintf(findex, "\n");
fprintf(findex, "GrafX2 Help\n");
- fprintf(findex, "\n");
+ fprintf(findex, "\n");
fprintf(findex, "\n");
fprintf(findex, "