/* Add an entry for a function, macro, special form, variable, or option. If the name of the calling command ends in `x', then this is an extra entry included in the body of an insertion of the same type. */ void cm_defun (void) { int type; char *base_command = xstrdup (command); /* command with any `x' removed */ int x_p = (command[strlen (command) - 1] == 'x'); if (x_p) base_command[strlen (base_command) - 1] = 0; type = find_type_from_name (base_command); /* If we are adding to an already existing insertion, then make sure that we are already in an insertion of type TYPE. */ if (x_p) { INSERTION_ELT *i = insertion_stack; /* Skip over ifclear and ifset conditionals. */ while (i && (i->insertion == ifset || i->insertion == ifclear)) i = i->next; if (!i || i->insertion != type) { line_error (_("Must be in `@%s' environment to use `@%s'"), base_command, command); discard_until ("\n"); return; } } defun_internal (type, x_p); free (base_command); }
/* Shift the meaning of @chapter to @section. */ void cm_lowersections (void) { discard_until ("\n"); section_alist_offset++; }
/* Shift the meaning of @section to @chapter. */ void cm_raisesections (void) { discard_until ("\n"); section_alist_offset--; }