--- texinfo-4.13.orig/makeinfo/cmds.c 2008-05-22 05:11:34.000000000 -0700 +++ texinfo-4.13/makeinfo/cmds.c 2012-05-23 18:31:57.108264307 -0700 @@ -1560,7 +1560,7 @@ cm_setfilename (void) char *filename; get_rest_of_line (1, &filename); /* warning ("`@%s %s' encountered and ignored", command, filename); */ - if (xml) + if (xml && !docbook) add_word_args ("%s", filename); free (filename); } --- texinfo-4.13.orig/makeinfo/node.c 2008-07-05 16:59:47.000000000 -0700 +++ texinfo-4.13/makeinfo/node.c 2012-05-23 17:02:46.517345024 -0700 @@ -1233,10 +1233,12 @@ cm_anchor (int arg) } else if (xml || docbook) { + char *id = xml_id(anchor); xml_insert_element_with_attribute (ANCHOR, START, docbook ? "id=\"%s\"" : "name=\"%s\"", - anchor); + id); xml_insert_element (ANCHOR, END); + free(id); } /* Save it in the tag table. */ --- texinfo-4.13.orig/makeinfo/xml.c 2008-02-12 17:00:55.000000000 -0800 +++ texinfo-4.13/makeinfo/xml.c 2012-05-23 17:20:13.698858895 -0700 @@ -586,21 +586,27 @@ static int in_indexterm = 0; char * xml_id (char *id) { - char *tem = xmalloc (strlen (id) + 1); + /* Get an extra space to accomodate adding an i-prefix. */ + char *tem = xmalloc (strlen (id) + 2); char *p = tem; - strcpy (tem, id); + + /* First character cannot be a number, '-' or '.'. Just always add + an i if we're not starting with a alphanumeric character + already, to simplify the code. + */ + if (!isalpha(*id)) + { + *p++ = 'i'; + } + + strcpy (p, id); + while (*p) { - if (strchr (":\" \t\f\r\n", *p)) + if (!isalnum (*p) && !strchr (":_.-", *p)) *p = '-'; p++; } - p = tem; - - /* First character cannot be a number. Clearly we should make this - dependent on the actual numeral found. */ - if (strchr ("0123456789", *p)) - *p = 'i'; return tem; }