--- yelp-2.18.1/src/yelp-man-parser.c.man-xrefs 2007-04-18 23:05:11.000000000 -0400 +++ yelp-2.18.1/src/yelp-man-parser.c 2007-04-18 23:11:46.000000000 -0400 @@ -339,6 +339,20 @@ else parser->ins = parser_append_node (parser, b); + if (ptr->next) { + gchar *tmp = ptr->next->data; + + if (tmp[0] == '(' && g_ascii_isdigit (tmp[1]) && + (tmp[2] == ')' || (g_ascii_isalpha (tmp[2]) && tmp[3] == ')'))) { + tmp = g_strconcat (ptr->data, " ", tmp, NULL); + parser_append_given_text_handle_escapes (parser, tmp, TRUE); + g_free (tmp); + parser->ins = parser->ins->parent; + ptr = ptr->next->next; + continue; + } + } + parser_append_given_text_handle_escapes (parser, ptr->data, TRUE); parser->ins = parser->ins->parent; @@ -1554,25 +1568,36 @@ } else if ((make_links) && (*ptr == '(')) { gchar *space_pos; - gchar *tmp_cur; gchar *url; gchar c; + gchar *name_end; + gchar *num_start; + gchar *num_end; space_pos = ptr; + while (space_pos != anc && *(space_pos - 1) == ' ') { + space_pos--; + } + name_end = space_pos; + while (space_pos != anc && *(space_pos - 1) != ' ') { space_pos--; } if (space_pos != ptr && g_ascii_isdigit(*(ptr+1)) && - *(ptr+2) == ')') { - + (*(ptr+2) == ')' || (g_ascii_isalpha (*(ptr+2)) && *(ptr+3) == ')'))) { + num_start = ptr; + if (*(ptr+2) == ')') + num_end = ptr + 2; + else + num_end = ptr + 3; + ptr+=3; - + parser_ensure_P (parser); - tmp_cur = ptr; ptr = space_pos; c = (*ptr); @@ -1580,13 +1605,13 @@ parser_append_given_text (parser, anc); *ptr = c; anc = ptr; + ptr = num_start; - ptr = tmp_cur; - - c = *(ptr); - *(ptr) = '\0'; - url = g_strdup_printf ("man:%s", anc); - + c = *name_end; + *name_end = '\0'; + *num_end = '\0'; + url = g_strdup_printf ("man:%s(%s)", anc, num_start + 1); + parser->ins = parser_append_node (parser, "UR"); parser->ins = parser_append_node (parser, "URI"); @@ -1596,7 +1621,8 @@ parser_append_given_text (parser, anc); parser->ins = parser->ins->parent; - *(ptr) = c; + *name_end = c; + *num_end = ')'; anc = ptr; g_free (url);