/* A URL reference. */ void cm_uref (int arg) { if (arg == START) { extern int printing_index; char *url = get_xref_token (1); /* expands all macros in uref */ char *desc = get_xref_token (0); char *replacement = get_xref_token (0); if (docbook) { xml_insert_element_with_attribute (UREF, START, "url=\"%s\"", text_expansion (url)); if (*replacement) execute_string ("%s", replacement); else if (*desc) execute_string ("%s", desc); else execute_string ("%s", url); xml_insert_element (UREF, END); } else if (xml) { xml_insert_element (UREF, START); xml_insert_element (UREFURL, START); execute_string ("%s", url); xml_insert_element (UREFURL, END); if (*desc) { xml_insert_element (UREFDESC, START); execute_string ("%s", desc); xml_insert_element (UREFDESC, END); } if (*replacement) { xml_insert_element (UREFREPLACEMENT, START); execute_string ("%s", replacement); xml_insert_element (UREFREPLACEMENT, END); } xml_insert_element (UREF, END); } else if (html) { /* never need to show the url */ add_html_elt ("<a href="); /* don't collapse `--' etc. in the url */ in_fixed_width_font++; execute_string ("\"%s\"", url); in_fixed_width_font--; add_word (">"); execute_string ("%s", *replacement ? replacement : (*desc ? desc : url)); add_word ("</a>"); } else if (*replacement) /* do not show the url */ execute_string ("%s", replacement); else if (*desc) /* show both text and url */ { execute_string ("%s ", desc); in_fixed_width_font++; execute_string ("(%s)", url); in_fixed_width_font--; } else /* no text at all, so have the url to show */ { in_fixed_width_font++; execute_string ("%s%s%s", printing_index ? "" : "`", url, printing_index ? "" : "'"); in_fixed_width_font--; } if (url) free (url); if (desc) free (desc); if (replacement) free (replacement); } }
void sectioning_underscore (char *cmd) { char *temp, *secname; int level; /* If we're not indenting the first paragraph, we shall make it behave like @noindent is called directly after the section heading. */ if (! do_first_par_indent) cm_noindent (); temp = xmalloc (2 + strlen (cmd)); temp[0] = COMMAND_PREFIX; strcpy (&temp[1], cmd); level = what_section (temp, &secname); level -= 2; if (level < 0) level = 0; free (temp); /* If the argument to @top is empty, we try using the one from @settitle. Warn if both are unusable. */ if (STREQ (command, "top")) { int save_input_text_offset = input_text_offset; get_rest_of_line (0, &temp); /* Due to get_rest_of_line ... */ line_number--; if (strlen (temp) == 0 && (!title || strlen (title) == 0)) warning ("Must specify a title with least one of @settitle or @top"); input_text_offset = save_input_text_offset; } if (xml) { /* If the section appears in the toc, it means it's a real section unlike majorheading, chapheading etc. */ if (section_alist[search_sectioning (cmd)].toc == TOC_YES) { xml_close_sections (level); /* Mark the beginning of the section If the next command is printindex, we will remove the section and put an Index instead */ flush_output (); xml_last_section_output_position = output_paragraph_offset; get_rest_of_line (0, &temp); /* Use @settitle value if @top parameter is empty. */ if (STREQ (command, "top") && strlen(temp) == 0) temp = xstrdup (title ? title : ""); /* Docbook does not support @unnumbered at all. So we provide numbers that other formats use. @appendix seems to be fine though, so we let Docbook handle that as usual. */ if (docbook && enum_marker != APPENDIX_MAGIC) { if (section_alist[search_sectioning (cmd)].num == ENUM_SECT_NO && section_alist[search_sectioning (cmd)].toc == TOC_YES) xml_insert_element_with_attribute (xml_element (secname), START, "label=\"%s\" xreflabel=\"%s\"", handle_enum_increment (level, search_sectioning (cmd)), text_expansion (temp)); else xml_insert_element_with_attribute (xml_element (secname), START, "label=\"%s\"", handle_enum_increment (level, search_sectioning (cmd))); } else xml_insert_element (xml_element (secname), START); xml_insert_element (TITLE, START); xml_open_section (level, secname); execute_string ("%s", temp); xml_insert_element (TITLE, END); free (temp); } else { if (docbook) { if (level > 0) xml_insert_element_with_attribute (xml_element (secname), START, "renderas=\"sect%d\"", level); else xml_insert_element_with_attribute (xml_element (secname), START, "renderas=\"other\""); } else xml_insert_element (xml_element (secname), START); get_rest_of_line (0, &temp); execute_string ("%s", temp); free (temp); xml_insert_element (xml_element (secname), END); } } else if (html) sectioning_html (level, secname); else insert_and_underscore (level, secname); }