Back to index

tetex-bin  3.0
Classes | Defines | Functions | Variables
insertion.c File Reference
#include "system.h"
#include "cmds.h"
#include "defun.h"
#include "float.h"
#include "html.h"
#include "insertion.h"
#include "macro.h"
#include "makeinfo.h"
#include "multi.h"
#include "xml.h"

Go to the source code of this file.

Classes

struct  DIGIT_ALPHA

Defines

#define max_stack_depth   100
#define ENUM_DIGITS   1
#define ENUM_ALPHA   2

Functions

void init_insertion_stack (void)
static enum insertion_type current_insertion_type (void)
static char * current_item_function (void)
static char * get_item_function (void)
static void push_insertion (enum insertion_type type, char *item_function)
void pop_insertion (void)
static const char * insertion_type_pname (enum insertion_type type)
enum insertion_type find_type_from_name (char *name)
int is_in_insertion_of_type (int type)
static int defun_insertion (enum insertion_type type)
static void start_enumerating (int at, int type)
static void stop_enumerating (void)
static void enumerate_item (void)
static void enum_html (void)
void command_name_condition (void)
void begin_insertion (enum insertion_type type)
static void end_insertion (int type)
void discard_insertions (int specials_ok)
void cm_quotation (void)
void cm_example (void)
void cm_smallexample (void)
void cm_lisp (void)
void cm_smalllisp (void)
void cm_cartouche (void)
void cm_copying (void)
void cm_insert_copying (void)
void cm_format (void)
void cm_smallformat (void)
void cm_display (void)
void cm_smalldisplay (void)
void cm_direntry (void)
void cm_documentdescription (void)
void cm_itemize (void)
static void do_enumeration (int type, char *default_string)
void cm_enumerate (void)
void handle_verbatim_environment (int find_end_verbatim)
void cm_verbatim (void)
void cm_table (void)
void cm_multitable (void)
void cm_ftable (void)
void cm_vtable (void)
void cm_group (void)
void cm_html (int arg)
void cm_xml (int arg)
void cm_docbook (int arg)
void cm_ifdocbook (void)
void cm_ifnotdocbook (void)
void cm_ifhtml (void)
void cm_ifnothtml (void)
void cm_ifinfo (void)
void cm_ifnotinfo (void)
void cm_ifplaintext (void)
void cm_ifnotplaintext (void)
void cm_tex (void)
void cm_iftex (void)
void cm_ifnottex (void)
void cm_ifxml (void)
void cm_ifnotxml (void)
void cm_float (void)
void cm_caption (int arg)
void cm_flushleft (void)
void cm_flushright (void)
void cm_menu (void)
void cm_detailmenu (void)
void cm_titlepage (void)
void cm_author (void)
void cm_titlepage_cmds (void)
void cm_end (void)
int command_needs_braces (char *cmd)
void cm_item (void)
void cm_itemx (void)
void cm_headitem (void)

Variables

static char * insertion_type_names []
INSERTION_ELTinsertion_stack = NULL
int insertion_level = 0
int had_menu_commentary
int in_detailmenu = 0
int in_menu = 0
int in_paragraph = 0
static int float_active = 0
static int raw_output_block = 0
static int html_deflist_has_term = 0
DIGIT_ALPHA enumstack [max_stack_depth]
int enumstack_offset = 0
int current_enumval = 1
int current_enumtype = ENUM_DIGITS
char * enumeration_arg = NULL
static int itemx_flag = 0
int headitem_flag = 0

Class Documentation

struct DIGIT_ALPHA

Definition at line 318 of file insertion.c.

Class Members
int enumtype
int enumval

Define Documentation

#define ENUM_ALPHA   2

Definition at line 317 of file insertion.c.

#define ENUM_DIGITS   1

Definition at line 316 of file insertion.c.

#define max_stack_depth   100

Definition at line 315 of file insertion.c.


Function Documentation

Definition at line 420 of file insertion.c.

{
  int no_discard = 0;

  if (defun_insertion (type))
    {
      push_insertion (type, xstrdup (""));
      no_discard++;
    }
  else
    {
      push_insertion (type, get_item_function ());
    }

  switch (type)
    {
    case menu:
      if (!no_headers)
        close_paragraph ();

      filling_enabled = no_indent = 0;
      inhibit_paragraph_indentation = 1;

      if (html)
        {
          had_menu_commentary = 1;
        }
      else if (!no_headers && !xml)
        add_word ("* Menu:\n");

      if (xml)
        xml_insert_element (MENU, START);
      else
        in_fixed_width_font++;

      next_menu_item_number = 1;
      in_menu++;
      no_discard++;
      break;

    case detailmenu:
      if (!in_menu)
        {
          if (!no_headers)
            close_paragraph ();

          filling_enabled = no_indent = 0;
          inhibit_paragraph_indentation = 1;

          no_discard++;
        }

      if (xml)
        {
          xml_insert_element (DETAILMENU, START);
          skip_whitespace_and_newlines();
        }
      else
        in_fixed_width_font++;

      in_detailmenu++;
      break;

    case direntry:
      close_single_paragraph ();
      filling_enabled = no_indent = 0;
      inhibit_paragraph_indentation = 1;
      insert_string ("START-INFO-DIR-ENTRY\n");
      break;

    case documentdescription:
      {
        char *desc;
        int start_of_end;
        int save_fixed_width;

        discard_until ("\n"); /* ignore the @documentdescription line */
        start_of_end = get_until ("\n@end documentdescription", &desc);
        save_fixed_width = in_fixed_width_font;

        in_fixed_width_font = 0;
        document_description = expansion (desc, 0);
        free (desc);

        in_fixed_width_font = save_fixed_width;
        input_text_offset = start_of_end; /* go back to the @end to match */
      }
      break;

    case copying:
        /* Save the copying text away for @insertcopying,
           typically used on the back of the @titlepage (for TeX) and
           the Top node (for info/html).  */
      if (input_text[input_text_offset] != '\n')
        discard_until ("\n"); /* ignore remainder of @copying line */

        input_text_offset = get_until ("\n@end copying", &copying_text);
        canon_white (copying_text);

      /* For info, output the copying text right away, so it will end up
         in the header of the Info file, before the first node, and thus
         get copied automatically to all the split files.  For xml, also
         output it right away since xml output is never split.
         For html, we output it specifically in html_output_head. 
         For plain text, there's no way to hide it, so the author must
          use @insertcopying in the desired location.  */
      if (docbook)
       {
         if (!xml_in_bookinfo)
           {
             xml_insert_element (BOOKINFO, START);
             xml_in_bookinfo = 1;
           }
          xml_insert_element (LEGALNOTICE, START);
       }

      if (!html && !no_headers)
        cm_insert_copying ();

      if (docbook)
        xml_insert_element (LEGALNOTICE, END);

      break;

    case quotation:
      /* @quotation does filling (@display doesn't).  */
      if (html)
        add_html_block_elt ("<blockquote>\n");
      else
        {
          /* with close_single_paragraph, we get no blank line above
             within @copying.  */
          close_paragraph ();
          last_char_was_newline = no_indent = 0;
          indented_fill = filling_enabled = 1;
          inhibit_paragraph_indentation = 1;
        }
      current_indent += default_indentation_increment;
      if (xml)
        xml_insert_quotation (insertion_stack->item_function, START);
      else if (strlen(insertion_stack->item_function))
        execute_string ("@b{%s:} ", insertion_stack->item_function);
      break;

    case example:
    case smallexample:
    case lisp:
    case smalllisp:
      in_fixed_width_font++;
      /* fall through */

      /* Like @example but no fixed width font. */
    case display:
    case smalldisplay:
      /* Like @display but without indentation. */
    case smallformat:
    case format:
      close_single_paragraph ();
      inhibit_paragraph_indentation = 1;
      filling_enabled = 0;
      last_char_was_newline = 0;

      if (html)
        /* Kludge alert: if <pre> is followed by a newline, IE3,
           mozilla, maybe others render an extra blank line before the
           pre-formatted block.  So don't output a newline.  */
        add_html_block_elt_args ("<pre class=\"%s\">", command);

      if (type != format && type != smallformat)
        {
          current_indent += example_indentation_increment;
          if (html)
            {
              /* Since we didn't put \n after <pre>, we need to insert
                 the indentation by hand.  */
              int i;
              for (i = current_indent; i > 0; i--)
                add_char (' ');
            }
        }
      break;

    case multitable:
      do_multitable ();
      break;

    case table:
    case ftable:
    case vtable:
    case itemize:
      close_single_paragraph ();
      current_indent += default_indentation_increment;
      filling_enabled = indented_fill = 1;
#if defined (INDENT_PARAGRAPHS_IN_TABLE)
      inhibit_paragraph_indentation = 0;
#else
      inhibit_paragraph_indentation = 1;
#endif /* !INDENT_PARAGRAPHS_IN_TABLE */

      /* Make things work for losers who forget the itemize syntax. */
      if (type == itemize)
        {
          if (!(*insertion_stack->item_function))
            {
              free (insertion_stack->item_function);
              insertion_stack->item_function = xstrdup ("@bullet");
            }
        }

      if (!*insertion_stack->item_function)
        {
          line_error (_("%s requires an argument: the formatter for %citem"),
                      insertion_type_pname (type), COMMAND_PREFIX);
        }

      if (html)
        {
          if (type == itemize)
            {
              add_html_block_elt ("<ul>\n");
              in_paragraph = 0;
            }
          else
            { /* We are just starting, so this <dl>
                 has no <dt> children yet.  */
              html_deflist_has_term = 0;
              add_html_block_elt ("<dl>\n");
            }
        }
      if (xml)
        xml_begin_table (type, insertion_stack->item_function);

      while (input_text[input_text_offset] == '\n'
          && input_text[input_text_offset+1] == '\n')
        {
          line_number++;
          input_text_offset++;
        }

      break;

    case enumerate:
      close_single_paragraph ();
      no_indent = 0;
#if defined (INDENT_PARAGRAPHS_IN_TABLE)
      inhibit_paragraph_indentation = 0;
#else
      inhibit_paragraph_indentation = 1;
#endif /* !INDENT_PARAGRAPHS_IN_TABLE */

      current_indent += default_indentation_increment;
      filling_enabled = indented_fill = 1;

      if (html)
        {
          enum_html ();
          in_paragraph = 0;
        }

      if (xml)
        xml_begin_enumerate (enumeration_arg);
      
      if (isdigit (*enumeration_arg))
        start_enumerating (atoi (enumeration_arg), ENUM_DIGITS);
      else
        start_enumerating (*enumeration_arg, ENUM_ALPHA);
      break;

      /* @group produces no output in info. */
    case group:
      /* Only close the paragraph if we are not inside of an
         @example-like environment. */
      if (xml)
        xml_insert_element (GROUP, START);
      else if (!insertion_stack->next
          || (insertion_stack->next->insertion != display
              && insertion_stack->next->insertion != smalldisplay
              && insertion_stack->next->insertion != example
              && insertion_stack->next->insertion != smallexample
              && insertion_stack->next->insertion != lisp
              && insertion_stack->next->insertion != smalllisp
              && insertion_stack->next->insertion != format
              && insertion_stack->next->insertion != smallformat
              && insertion_stack->next->insertion != flushleft
              && insertion_stack->next->insertion != flushright))
        close_single_paragraph ();
      break;

    case cartouche:
      if (html)
       add_html_block_elt ("<p><table class=\"cartouche\" summary=\"cartouche\" border=\"1\"><tr><td>\n");
      if (in_menu)
        no_discard++;
      break;

    case floatenv:
      /* Cannot nest floats, so complain.  */
      if (float_active)
        {
          line_error (_("%cfloat environments cannot be nested"), COMMAND_PREFIX);
          pop_insertion ();
          break;
        }

      float_active++;

      { /* Collect data about this float.  */
        /* Example: @float [FLOATTYPE][,XREFLABEL][,POSITION] */
        char floattype[200] = "";
        char xreflabel[200] = "";
        char position[200]  = "";
        char *text;
        char *caption;
        char *shortcaption;
        int start_of_end;
        int save_line_number = line_number;
        int save_input_text_offset = input_text_offset;
        int i;

        if (strlen (insertion_stack->item_function) > 0)
          {
            int i = 0, t = 0, c = 0;
            while (insertion_stack->item_function[i])
              {
                if (insertion_stack->item_function[i] == ',')
                  {
                    switch (t)
                      {
                      case 0:
                        floattype[c] = '\0';
                        break;
                      case 1:
                        xreflabel[c] = '\0';
                        break;
                      case 2:
                        position[c] = '\0';
                        break;
                      }
                    c = 0;
                    t++;
                    i++;
                    continue;
                  }

                switch (t)
                  {
                  case 0:
                    floattype[c] = insertion_stack->item_function[i];
                    break;
                  case 1:
                    xreflabel[c] = insertion_stack->item_function[i];
                    break;
                  case 2:
                    position[c] = insertion_stack->item_function[i];
                    break;
                  }
                c++;
                i++;
              }
          }

        skip_whitespace_and_newlines ();

        start_of_end = get_until ("\n@end float", &text);

        /* Get also the @caption.  */
        i = search_forward_until_pos ("\n@caption{",
            save_input_text_offset, start_of_end);
        if (i > -1)
          {
            input_text_offset = i + sizeof ("\n@caption{") - 1;
            get_until_in_braces ("\n@end float", &caption);
            input_text_offset = save_input_text_offset;
          }
        else
          caption = "";

        /* ... and the @shortcaption.  */
        i = search_forward_until_pos ("\n@shortcaption{",
            save_input_text_offset, start_of_end);
        if (i > -1)
          {
            input_text_offset = i + sizeof ("\n@shortcaption{") - 1;
            get_until_in_braces ("\n@end float", &shortcaption);
            input_text_offset = save_input_text_offset;
          }
        else
          shortcaption = "";

        canon_white (xreflabel);
        canon_white (floattype);
        canon_white (position);
        canon_white (caption);
        canon_white (shortcaption);

        add_new_float (xstrdup (xreflabel),
            xstrdup (caption), xstrdup (shortcaption),
            xstrdup (floattype), xstrdup (position));

        /* Move to the start of the @float so the contents get processed as
           usual.  */
        input_text_offset = save_input_text_offset;
        line_number = save_line_number;
      }

      if (html)
        add_html_block_elt ("<div class=\"float\">\n");
      else if (docbook)
        xml_insert_element (FLOAT, START);
      else if (xml)
        {
          xml_insert_element_with_attribute (FLOAT, START,
              "name=\"%s\"", current_float_id ());

          xml_insert_element (FLOATTYPE, START);
          execute_string ("%s", current_float_type ());
          xml_insert_element (FLOATTYPE, END);

          xml_insert_element (FLOATPOS, START);
          execute_string ("%s", current_float_position ());
          xml_insert_element (FLOATPOS, END);
        }
      else
        { /* Info */
          close_single_paragraph ();
          inhibit_paragraph_indentation = 1;
        }

      /* Anchor now.  Note that XML documents get their
         anchors with <float name="anchor"> tag.  */
      if ((!xml || docbook) && strlen (current_float_id ()) > 0)
        execute_string ("@anchor{%s}", current_float_id ());

      break;

      /* Insertions that are no-ops in info, but do something in TeX. */
    case ifclear:
    case ifdocbook:
    case ifhtml:
    case ifinfo:
    case ifnotdocbook:
    case ifnothtml:
    case ifnotinfo:
    case ifnotplaintext:
    case ifnottex:
    case ifnotxml:
    case ifplaintext:
    case ifset:
    case iftex:
    case ifxml:
    case rawtex:
      if (in_menu)
        no_discard++;
      break;

    case rawdocbook:
    case rawhtml:
    case rawxml:
      raw_output_block++;

      if (raw_output_block > 0)
        {
          xml_no_para = 1;
          escape_html = 0;
          xml_keep_space++;
        }

      {
        /* Some deuglification for improved readability.  */
        extern int xml_in_para;
        if (xml && !xml_in_para && xml_indentation_increment > 0)
          add_char ('\n');
      }

      break;

    case defcv:
    case deffn:
    case defivar:
    case defmac:
    case defmethod:
    case defop:
    case defopt:
    case defspec:
    case deftp:
    case deftypecv:
    case deftypefn:
    case deftypefun:
    case deftypeivar:
    case deftypemethod:
    case deftypeop:
    case deftypevar:
    case deftypevr:
    case defun:
    case defvar:
    case defvr:
      inhibit_paragraph_indentation = 1;
      filling_enabled = indented_fill = 1;
      current_indent += default_indentation_increment;
      no_indent = 0;
      if (xml)
       xml_begin_definition ();
      break;

    case flushleft:
      close_single_paragraph ();
      inhibit_paragraph_indentation = 1;
      filling_enabled = indented_fill = no_indent = 0;
      if (html)
        add_html_block_elt ("<div align=\"left\">");
      break;

    case flushright:
      close_single_paragraph ();
      filling_enabled = indented_fill = no_indent = 0;
      inhibit_paragraph_indentation = 1;
      force_flush_right++;
      if (html)
        add_html_block_elt ("<div align=\"right\">");
      break;

    case titlepage:
      xml_insert_element (TITLEPAGE, START);
      break;

    default:
      line_error ("begin_insertion internal error: type=%d", type);
    }

  if (!no_discard)
    discard_until ("\n");
}

Here is the call graph for this function:

Definition at line 1981 of file insertion.c.

{
  char *rest;
  get_rest_of_line (1, &rest);

  if (is_in_insertion_of_type (quotation))
    {
      if (html)
        add_word_args ("&mdash; %s", rest);
      else if (docbook)
        {
          /* FIXME Ideally, we should use an attribution element,
             but they are supposed to be at the start of quotation
             blocks.  So to avoid looking ahead mess, let's just
             use mdash like HTML for now.  */
          xml_insert_entity ("mdash");
          add_word (rest);
        }
      else if (xml)
        {
          xml_insert_element (AUTHOR, START);
          add_word (rest);
          xml_insert_element (AUTHOR, END);
        }
      else
        add_word_args ("-- %s", rest);
    }
  else if (is_in_insertion_of_type (titlepage))
    {
      if (xml && !docbook)
        {
          xml_insert_element (AUTHOR, START);
          add_word (rest);
          xml_insert_element (AUTHOR, END);
        }
    }
  else
    line_error (_("@%s not meaningful outside `@titlepage' and `@quotation' environments"),
        command);

  free (rest);
}

Here is the call graph for this function:

void cm_caption ( int  arg)

Definition at line 1899 of file insertion.c.

{
  char *temp;

  /* This is a no_op command for most formats, as we handle it during @float
     insertion.  For XML though, we handle it here to keep document structure
     as close as possible, to the Texinfo source.  */

  /* Everything is already handled at START.  */
  if (arg == END)
    return;

  /* Check if it's mislocated.  */
  if (current_insertion_type () != floatenv)
    line_error (_("@%s not meaningful outside `@float' environment"), command);

  get_until_in_braces ("\n@end float", &temp);

  if (xml)
    {
      int elt = STREQ (command, "shortcaption") ? SHORTCAPTION : CAPTION;
      xml_insert_element (elt, START);
      if (!docbook)
        execute_string ("%s", temp);
      xml_insert_element (elt, END);
    }

  free (temp);
}

Here is the call graph for this function:

Definition at line 1436 of file insertion.c.

Here is the call graph for this function:

Definition at line 1447 of file insertion.c.

Here is the call graph for this function:

Definition at line 1958 of file insertion.c.

{
  if (current_node == NULL && !macro_expansion_output_stream)
    { /* Problems anyway, @detailmenu should always be inside @menu.  */
      warning (_("@detailmenu seen before first node, creating `Top' node"));
      execute_string ("@node top\n@top Top\n");
    }
  begin_insertion (detailmenu);
}

Here is the call graph for this function:

Definition at line 1545 of file insertion.c.

{
  if (html || xml || no_headers)
    command_name_condition ();
  else
    begin_insertion (direntry);
}

Here is the call graph for this function:

Definition at line 1513 of file insertion.c.

{
  if (xml)
    {
      /* See cm_example comments about newlines.  */
      if (output_paragraph[output_paragraph_offset-1] == '\n')
        output_paragraph_offset--;
      xml_insert_element (DISPLAY, START);
      if (docbook)
        add_char ('\n');
    }

  begin_insertion (display);
}

Here is the call graph for this function:

void cm_docbook ( int  arg)

Definition at line 1762 of file insertion.c.

{
  if (process_docbook)
    begin_insertion (rawdocbook);
  else
    command_name_condition ();
}

Here is the call graph for this function:

Definition at line 1554 of file insertion.c.

Here is the call graph for this function:

void cm_end ( void  )

Definition at line 2054 of file insertion.c.

{
  char *temp;
  int type;

  get_rest_of_line (0, &temp);

  if (!insertion_level)
    {
      line_error (_("Unmatched `%c%s'"), COMMAND_PREFIX, command);
      return;
    }

  if (temp[0] == 0)
    line_error (_("`%c%s' needs something after it"), COMMAND_PREFIX, command);

  type = find_type_from_name (temp);

  if (type == bad_type)
    {
      line_error (_("Bad argument `%s' to `@%s', using `%s'"),
           temp, command, insertion_type_pname (current_insertion_type ()));
    }
  if (xml && type == menu) /* fixme */
    {
      xml_end_menu ();
    }
  end_insertion (type);
  free (temp);
}

Here is the call graph for this function:

Definition at line 1606 of file insertion.c.

Here is the call graph for this function:

Definition at line 1355 of file insertion.c.

{
  if (docbook && current_insertion_type () == floatenv)
    xml_begin_docbook_float (FLOATEXAMPLE);

  if (xml)
    {
      /* Rollback previous newlines.  These occur between
         </para> and <example>.  */
      if (output_paragraph[output_paragraph_offset-1] == '\n')
        output_paragraph_offset--;

      xml_insert_element (EXAMPLE, START);

      /* Make sure example text is starting on a new line
         for improved readability.  */
      if (docbook)
        add_char ('\n');
    }

  begin_insertion (example);
}

Here is the call graph for this function:

Definition at line 1893 of file insertion.c.

Here is the call graph for this function:

Definition at line 1931 of file insertion.c.

Here is the call graph for this function:

Definition at line 1939 of file insertion.c.

Here is the call graph for this function:

Definition at line 1474 of file insertion.c.

{
  if (xml)
    {
      if (docbook && xml_in_bookinfo)
       {
         xml_insert_element (ABSTRACT, START);
         xml_in_abstract = 1;
       }
      else
        {
          /* See cm_example comments about newlines.  */
          if (output_paragraph[output_paragraph_offset-1] == '\n')
            output_paragraph_offset--;
          xml_insert_element (FORMAT, START);
          if (docbook)
            add_char ('\n');
        }
    }
  begin_insertion (format);
}

Here is the call graph for this function:

Definition at line 1725 of file insertion.c.

Here is the call graph for this function:

Definition at line 1737 of file insertion.c.

Here is the call graph for this function:

Definition at line 2372 of file insertion.c.

{
  headitem_flag = 1;
  cm_item ();
}

Here is the call graph for this function:

void cm_html ( int  arg)

Definition at line 1744 of file insertion.c.

{
  if (process_html)
    begin_insertion (rawhtml);
  else
    command_name_condition ();
}

Here is the call graph for this function:

Definition at line 1771 of file insertion.c.

{
  if (process_docbook)
    begin_insertion (ifdocbook);
  else
    command_name_condition ();
}

Here is the call graph for this function:

Definition at line 1789 of file insertion.c.

{
  if (process_html)
    begin_insertion (ifhtml);
  else
    command_name_condition ();
}

Here is the call graph for this function:

Definition at line 1808 of file insertion.c.

{
  if (process_info)
    begin_insertion (ifinfo);
  else
    command_name_condition ();
}

Here is the call graph for this function:

Definition at line 1780 of file insertion.c.

{
  if (!process_docbook)
    begin_insertion (ifnotdocbook);
  else
    command_name_condition ();
}

Here is the call graph for this function:

Definition at line 1798 of file insertion.c.

{
  if (!process_html)
    begin_insertion (ifnothtml);
  else
    command_name_condition ();
}

Here is the call graph for this function:

Definition at line 1817 of file insertion.c.

{
  if (!process_info)
    begin_insertion (ifnotinfo);
  else
    command_name_condition ();
}

Here is the call graph for this function:

Definition at line 1836 of file insertion.c.

{
  if (!process_plaintext)
    begin_insertion (ifnotplaintext);
  else
    command_name_condition ();
}

Here is the call graph for this function:

Definition at line 1864 of file insertion.c.

{
  if (!process_tex)
    begin_insertion (ifnottex);
  else
    command_name_condition ();
}

Here is the call graph for this function:

Definition at line 1882 of file insertion.c.

{
  if (!process_xml)
    begin_insertion (ifnotxml);
  else
    command_name_condition ();
}

Here is the call graph for this function:

Definition at line 1827 of file insertion.c.

{
  if (process_plaintext)
    begin_insertion (ifplaintext);
  else
    command_name_condition ();
}

Here is the call graph for this function:

Definition at line 1855 of file insertion.c.

{
  if (process_tex)
    begin_insertion (iftex);
  else
    command_name_condition ();
}

Here is the call graph for this function:

Definition at line 1873 of file insertion.c.

{
  if (process_xml)
    begin_insertion (ifxml);
  else
    command_name_condition ();
}

Here is the call graph for this function:

Definition at line 1454 of file insertion.c.

{
  if (!copying_text)
    {
      warning ("@copying not used before %s", command);
      return;
    }

  execute_string ("%s", copying_text);

  if (!xml && !html)
    {
      add_word ("\n\n");
      /* Update output_position so that the node positions in the tag
         tables will take account of the copying text.  */
      flush_output ();
    }
}

Here is the call graph for this function:

void cm_item ( void  )

Definition at line 2105 of file insertion.c.

{
  char *rest_of_line, *item_func;

  /* Can only hack "@item" while inside of an insertion. */
  if (insertion_level)
    {
      INSERTION_ELT *stack = insertion_stack;
      int original_input_text_offset;

      skip_whitespace ();
      original_input_text_offset = input_text_offset;

      get_rest_of_line (0, &rest_of_line);
      item_func = current_item_function ();

    /* Do the right thing depending on which insertion function is active. */
    switch_top:
      switch (stack->insertion)
        {
        case multitable:
          multitable_item ();
          /* Support text directly after the @item.  */
          if (*rest_of_line)
            {
              line_number--;
              input_text_offset = original_input_text_offset;
            }
          break;

        case ifclear:
        case ifhtml:
        case ifinfo:
        case ifnothtml:
        case ifnotinfo:
        case ifnotplaintext:
        case ifnottex:
       case ifnotxml:
        case ifplaintext:
        case ifset:
        case iftex:
       case ifxml:
        case rawdocbook:
        case rawhtml:
        case rawxml:
        case rawtex:
        case tex:
        case cartouche:
          stack = stack->next;
          if (!stack)
            goto no_insertion;
          else
            goto switch_top;
          break;

        case menu:
        case quotation:
        case example:
        case smallexample:
        case lisp:
        case smalllisp:
        case format:
        case smallformat:
        case display:
        case smalldisplay:
        case group:
          line_error (_("@%s not meaningful inside `@%s' block"),
                      command,
                      insertion_type_pname (current_insertion_type ()));
          break;

        case itemize:
        case enumerate:
          if (itemx_flag)
            {
              line_error (_("@itemx not meaningful inside `%s' block"),
                          insertion_type_pname (current_insertion_type ()));
            }
          else
            {
              if (html)
                add_html_block_elt ("<li>");
              else if (xml)
                xml_begin_item ();
              else
                {
                  start_paragraph ();
                  kill_self_indent (-1);
                  filling_enabled = indented_fill = 1;

                  if (current_item_function ())
                    {
                      output_column = current_indent - 2;
                      indent (output_column);

                      /* The item marker can be given with or without
                         braces -- @bullet and @bullet{} are both ok.
                         Or it might be something that doesn't take
                         braces at all, such as "o" or "#" or "@ ".
                         Thus, only supply braces if the item marker is
                         a command, they haven't supplied braces
                         themselves, and we know it needs them.  */
                      if (item_func && *item_func)
                        {
                          if (*item_func == COMMAND_PREFIX
                              && item_func[strlen (item_func) - 1] != '}'
                              && command_needs_braces (item_func + 1))
                            execute_string ("%s{}", item_func);
                          else
                            execute_string ("%s", item_func);
                        }
                      insert (' ');
                      output_column++;
                    }
                  else
                    enumerate_item ();

                  /* Special hack.  This makes `close_paragraph' a no-op until
                     `start_paragraph' has been called. */
                  must_start_paragraph = 1;
                }

              /* Handle text directly after the @item.  */
              if (*rest_of_line)
                {
                  line_number--;
                  input_text_offset = original_input_text_offset;
                }
            }
          break;

        case table:
        case ftable:
        case vtable:
          if (html)
            { /* If nothing has been output since the last <dd>,
                 remove the empty <dd> element.  Some browsers render
                 an extra empty line for <dd><dt>, which makes @itemx
                 conversion look ugly.  */
              rollback_empty_tag ("dd");

              /* Force the browser to render one blank line before
                 each new @item in a table.  But don't do that if
                 this is the first <dt> after the <dl>, or if we are
                 converting @itemx.

                 Note that there are some browsers which ignore <br>
                 in this context, but I cannot find any way to force
                 them all render exactly one blank line.  */
              if (!itemx_flag && html_deflist_has_term)
                add_html_block_elt ("<br>");

              /* We are about to insert a <dt>, so this <dl> has a term.
                 Feel free to insert a <br> next time. :)  */
              html_deflist_has_term = 1;
   
              add_html_block_elt ("<dt>");
              if (item_func && *item_func)
                execute_string ("%s{%s}", item_func, rest_of_line);
              else
                execute_string ("%s", rest_of_line);

              if (current_insertion_type () == ftable)
                execute_string ("%cfindex %s\n", COMMAND_PREFIX, rest_of_line);

              if (current_insertion_type () == vtable)
                execute_string ("%cvindex %s\n", COMMAND_PREFIX, rest_of_line);

              add_html_block_elt ("<dd>");
            }
          else if (xml) /* && docbook)*/ /* 05-08 */
            {
              xml_begin_table_item ();

              if (!docbook && current_insertion_type () == ftable)
                execute_string ("%cfindex %s\n", COMMAND_PREFIX, rest_of_line);

              if (!docbook && current_insertion_type () == vtable)
                execute_string ("%cvindex %s\n", COMMAND_PREFIX, rest_of_line);

              if (item_func && *item_func)
                execute_string ("%s{%s}", item_func, rest_of_line);
              else
                execute_string ("%s", rest_of_line);
              xml_continue_table_item ();
            }
          else
            {
              /* We need this to determine if we have two @item's in a row
                 (see test just below).  */
              static int last_item_output_position = 0;

              /* Get rid of extra characters. */
              kill_self_indent (-1);

              /* If we have one @item followed directly by another @item,
                 we need to insert a blank line.  This is not true for
                 @itemx, though.  */
              if (!itemx_flag && last_item_output_position == output_position)
                insert ('\n');

              /* `close_paragraph' almost does what we want.  The problem
                 is when paragraph_is_open, and last_char_was_newline, and
                 the last newline has been turned into a space, because
                 filling_enabled. I handle it here. */
              if (last_char_was_newline && filling_enabled &&
                  paragraph_is_open)
                insert ('\n');
              close_paragraph ();

#if defined (INDENT_PARAGRAPHS_IN_TABLE)
              /* Indent on a new line, but back up one indentation level. */
              {
                int save = inhibit_paragraph_indentation;
                inhibit_paragraph_indentation = 1;
                /* At this point, inserting any non-whitespace character will
                   force the existing indentation to be output. */
                add_char ('i');
                inhibit_paragraph_indentation = save;
              }
#else /* !INDENT_PARAGRAPHS_IN_TABLE */
              add_char ('i');
#endif /* !INDENT_PARAGRAPHS_IN_TABLE */

              output_paragraph_offset--;
              kill_self_indent (default_indentation_increment + 1);

              /* Add item's argument to the line. */
              filling_enabled = 0;
              if (item_func && *item_func)
                execute_string ("%s{%s}", item_func, rest_of_line);
              else
                execute_string ("%s", rest_of_line);

              if (current_insertion_type () == ftable)
                execute_string ("%cfindex %s\n", COMMAND_PREFIX, rest_of_line);
              else if (current_insertion_type () == vtable)
                execute_string ("%cvindex %s\n", COMMAND_PREFIX, rest_of_line);

              /* Start a new line, and let start_paragraph ()
                 do the indenting of it for you. */
              close_single_paragraph ();
              indented_fill = filling_enabled = 1;
              last_item_output_position = output_position;
            }
        }
      free (rest_of_line);
    }
  else
    {
    no_insertion:
      line_error (_("%c%s found outside of an insertion block"),
                  COMMAND_PREFIX, command);
    }
}

Here is the call graph for this function:

Definition at line 1571 of file insertion.c.

Here is the call graph for this function:

Definition at line 2362 of file insertion.c.

Here is the call graph for this function:

void cm_lisp ( void  )

Definition at line 1398 of file insertion.c.

{
  if (docbook && current_insertion_type () == floatenv)
    xml_begin_docbook_float (FLOATEXAMPLE);

  if (xml)
    {
      /* See cm_example comments about newlines.  */
      if (output_paragraph[output_paragraph_offset-1] == '\n')
        output_paragraph_offset--;
      xml_insert_element (LISP, START);
      if (docbook)
        add_char ('\n');
    }

  begin_insertion (lisp);
}

Here is the call graph for this function:

void cm_menu ( void  )

Definition at line 1945 of file insertion.c.

{
  if (current_node == NULL && !macro_expansion_output_stream)
    {
      warning (_("@menu seen before first @node, creating `Top' node"));
      warning (_("perhaps your @top node should be wrapped in @ifnottex rather than @ifinfo?"));
      /* Include @top command so we can construct the implicit node tree.  */
      execute_string ("@node top\n@top Top\n");
    }
  begin_insertion (menu);
}

Here is the call graph for this function:

Definition at line 1719 of file insertion.c.

{
  begin_insertion (multitable); /* @@ */
}

Here is the call graph for this function:

Definition at line 1348 of file insertion.c.

{
  /* We start the blockquote element in the insertion.  */
  begin_insertion (quotation);
}

Here is the call graph for this function:

Definition at line 1529 of file insertion.c.

{
  if (xml)
    {
      /* See cm_example comments about newlines.  */
      if (output_paragraph[output_paragraph_offset-1] == '\n')
        output_paragraph_offset--;
      xml_insert_element (SMALLDISPLAY, START);
      if (docbook)
        add_char ('\n');
    }

  begin_insertion (smalldisplay);
}

Here is the call graph for this function:

Definition at line 1379 of file insertion.c.

{
  if (docbook && current_insertion_type () == floatenv)
    xml_begin_docbook_float (FLOATEXAMPLE);

  if (xml)
    {
      /* See cm_example comments about newlines.  */
      if (output_paragraph[output_paragraph_offset-1] == '\n')
        output_paragraph_offset--;
      xml_insert_element (SMALLEXAMPLE, START);
      if (docbook)
        add_char ('\n');
    }

  begin_insertion (smallexample);
}

Here is the call graph for this function:

Definition at line 1497 of file insertion.c.

{
  if (xml)
    {
      /* See cm_example comments about newlines.  */
      if (output_paragraph[output_paragraph_offset-1] == '\n')
        output_paragraph_offset--;
      xml_insert_element (SMALLFORMAT, START);
      if (docbook)
        add_char ('\n');
    }

  begin_insertion (smallformat);
}

Here is the call graph for this function:

Definition at line 1417 of file insertion.c.

{
  if (docbook && current_insertion_type () == floatenv)
    xml_begin_docbook_float (FLOATEXAMPLE);

  if (xml)
    {
      /* See cm_example comments about newlines.  */
      if (output_paragraph[output_paragraph_offset-1] == '\n')
        output_paragraph_offset--;
      xml_insert_element (SMALLLISP, START);
      if (docbook)
        add_char ('\n');
    }

  begin_insertion (smalllisp);
}

Here is the call graph for this function:

Definition at line 1713 of file insertion.c.

Here is the call graph for this function:

void cm_tex ( void  )

Definition at line 1846 of file insertion.c.

{
  if (process_tex)
    begin_insertion (rawtex);
  else
    command_name_condition ();
}

Here is the call graph for this function:

Definition at line 1971 of file insertion.c.

{
  titlepage_cmd_present = 1;
  if (xml && !docbook)
    begin_insertion (titlepage);
  else
    command_name_condition ();
}

Here is the call graph for this function:

Definition at line 2025 of file insertion.c.

{
  char *rest;

  get_rest_of_line (1, &rest);

  if (!is_in_insertion_of_type (titlepage))
    line_error (_("@%s not meaningful outside `@titlepage' environment"),
        command);

  if (xml && !docbook)
    {
      int elt = 0;

      if (STREQ (command, "title"))
        elt = BOOKTITLE;
      else if (STREQ (command, "subtitle"))
        elt = BOOKSUBTITLE;

      xml_insert_element (elt, START);
      add_word (rest);
      xml_insert_element (elt, END);
    }

    free (rest);
}

Here is the call graph for this function:

Definition at line 1707 of file insertion.c.

Here is the call graph for this function:

Definition at line 1731 of file insertion.c.

Here is the call graph for this function:

void cm_xml ( int  arg)

Definition at line 1753 of file insertion.c.

{
  if (process_xml)
    begin_insertion (rawxml);
  else
    command_name_condition ();
}

Here is the call graph for this function:

Definition at line 405 of file insertion.c.

{
  char *discarder = xmalloc (8 + strlen (command));

  sprintf (discarder, "\n%cend %s", COMMAND_PREFIX, command);
  discard_until (discarder);
  discard_until ("\n");

  free (discarder);
}

Here is the call graph for this function:

Here is the caller graph for this function:

int command_needs_braces ( char *  cmd)

Definition at line 2091 of file insertion.c.

{
  int i;
  for (i = 0; command_table[i].name; i++)
    {
      if (STREQ (command_table[i].name, cmd))
        return command_table[i].argument_in_braces == BRACE_ARGS;
    }

  return 0; /* macro or alias */
}

Here is the caller graph for this function:

static enum insertion_type current_insertion_type ( void  ) [static]

Definition at line 91 of file insertion.c.

Here is the caller graph for this function:

static char* current_item_function ( void  ) [static]

Definition at line 99 of file insertion.c.

{
  int done = 0;
  INSERTION_ELT *elt = insertion_stack;

  /* Skip down through the stack until we find an insertion with an
     itemize function defined, i.e., skip conditionals, @cartouche, etc.  */
  while (!done && elt)
    {
      switch (elt->insertion)
        {
        /* This list should match the one in cm_item.  */
        case ifclear:
        case ifhtml:
        case ifinfo:
        case ifnothtml:
        case ifnotinfo:
        case ifnotplaintext:
        case ifnottex:
       case ifnotxml:
        case ifplaintext:
        case ifset:
        case iftex:
       case ifxml:
        case rawdocbook:
        case rawhtml:
        case rawxml:
        case rawtex:
        case tex:
        case cartouche:
          elt = elt->next;
          break;
      
        default:
          done = 1;
        }
    }

  /* item_function usually gets assigned the empty string.  */
  return done && (*elt->item_function) ? elt->item_function : NULL;
}

Here is the caller graph for this function:

static int defun_insertion ( enum insertion_type  type) [static]

Definition at line 286 of file insertion.c.

{
  return 0
     || (type == defcv)
     || (type == deffn)
     || (type == defivar)
     || (type == defmac)
     || (type == defmethod)
     || (type == defop)
     || (type == defopt)
     || (type == defspec)
     || (type == deftp)
     || (type == deftypecv)
     || (type == deftypefn)
     || (type == deftypefun)
     || (type == deftypeivar)
     || (type == deftypemethod)
     || (type == deftypeop)
     || (type == deftypevar)
     || (type == deftypevr)
     || (type == defun)
     || (type == defvar)
     || (type == defvr)
  ;
}

Here is the caller graph for this function:

void discard_insertions ( int  specials_ok)

Definition at line 1318 of file insertion.c.

{
  int real_line_number = line_number;
  while (insertion_stack)
    {
      if (specials_ok
          && ((ifclear <= insertion_stack->insertion
               && insertion_stack->insertion <= iftex)
              || insertion_stack->insertion == rawdocbook
              || insertion_stack->insertion == rawhtml
              || insertion_stack->insertion == rawxml
              || insertion_stack->insertion == rawtex))
        break;
      else
        {
          const char *offender = insertion_type_pname (insertion_stack->insertion);

          file_line_error (insertion_stack->filename,
                           insertion_stack->line_number,
                           _("No matching `%cend %s'"), COMMAND_PREFIX,
                           offender);
          pop_insertion ();
        }
    }
  line_number = real_line_number;
}

Here is the call graph for this function:

Here is the caller graph for this function:

static void do_enumeration ( int  type,
char *  default_string 
) [static]

Definition at line 1579 of file insertion.c.

{
  get_until_in_line (0, ".", &enumeration_arg);
  canon_white (enumeration_arg);

  if (!*enumeration_arg)
    {
      free (enumeration_arg);
      enumeration_arg = xstrdup (default_string);
    }

  if (!isdigit (*enumeration_arg) && !isletter (*enumeration_arg))
    {
      warning (_("%s requires letter or digit"), insertion_type_pname (type));

      switch (type)
        {
        case enumerate:
          default_string = "1";
          break;
        }
      enumeration_arg = xstrdup (default_string);
    }
  begin_insertion (type);
}

Here is the call graph for this function:

Here is the caller graph for this function:

static void end_insertion ( int  type) [static]

Definition at line 958 of file insertion.c.

{
  int temp_type;

  if (!insertion_level)
    return;

  temp_type = current_insertion_type ();

  if (type == bad_type)
    type = temp_type;

  if (type != temp_type)
    {
      line_error
        (_("`@end' expected `%s', but saw `%s'"),
         insertion_type_pname (temp_type), insertion_type_pname (type));
      return;
    }

  pop_insertion ();

  if (xml)
    {
      switch (type)
        {
        case ifinfo:
        case documentdescription:       
          break;
        case quotation:
          xml_insert_quotation ("", END);
          break;
        case example:
          xml_insert_element (EXAMPLE, END);
          if (docbook && current_insertion_type () == floatenv)
            xml_insert_element (FLOATEXAMPLE, END);
          break;
        case smallexample:
          xml_insert_element (SMALLEXAMPLE, END);
          if (docbook && current_insertion_type () == floatenv)
            xml_insert_element (FLOATEXAMPLE, END);
          break;
        case lisp:
          xml_insert_element (LISP, END);
          if (docbook && current_insertion_type () == floatenv)
            xml_insert_element (FLOATEXAMPLE, END);
          break;
        case smalllisp:
          xml_insert_element (SMALLLISP, END);
          if (docbook && current_insertion_type () == floatenv)
            xml_insert_element (FLOATEXAMPLE, END);
          break;
        case cartouche:
          xml_insert_element (CARTOUCHE, END);
          break;
        case format:
         if (docbook && xml_in_bookinfo && xml_in_abstract)
           {
             xml_insert_element (ABSTRACT, END);
             xml_in_abstract = 0;
           }
         else
           xml_insert_element (FORMAT, END);
          break;
        case smallformat:
          xml_insert_element (SMALLFORMAT, END);
          break;
        case display:
          xml_insert_element (DISPLAY, END);
          break;
        case smalldisplay:
          xml_insert_element (SMALLDISPLAY, END);
          break;
        case table:
        case ftable:
        case vtable:      
        case itemize:
          xml_end_table (type);
          break;
        case enumerate:
          xml_end_enumerate ();
          break;
        case group:
          xml_insert_element (GROUP, END);
          break;
       case titlepage:
         xml_insert_element (TITLEPAGE, END);
         break;
        }
    }
  switch (type)
    {
      /* Insertions which have no effect on paragraph formatting. */
    case copying:
      line_number--;
      break;

    case ifclear:
    case ifdocbook:
    case ifinfo:
    case ifhtml:
    case ifnotdocbook:
    case ifnothtml:
    case ifnotinfo:
    case ifnotplaintext:
    case ifnottex:
    case ifnotxml:
    case ifplaintext:
    case ifset:
    case iftex:
    case ifxml:
    case rawtex:
    case titlepage:
      break;

    case rawdocbook:
    case rawhtml:
    case rawxml:
      raw_output_block--;

      if (raw_output_block <= 0)
        {
          xml_no_para = 0;
          escape_html = 1;
          xml_keep_space--;
        }

      if ((xml || html) && output_paragraph[output_paragraph_offset-1] == '\n')
        output_paragraph_offset--;
      break;

    case detailmenu:
      if (xml)
        xml_insert_element (DETAILMENU, END);

      in_detailmenu--;          /* No longer hacking menus. */
      if (!in_menu)
        {
          if (!no_headers)
            close_insertion_paragraph ();
        }
      break;

    case direntry:              /* Eaten if html. */
      insert_string ("END-INFO-DIR-ENTRY\n\n");
      close_insertion_paragraph ();
      break;

    case documentdescription:
      if (xml)
        insert_string (document_description);
        xml_insert_element (DOCUMENTDESCRIPTION, END);
      break;
      
    case menu:
      in_menu--;                /* No longer hacking menus. */
      if (html && !no_headers)
        add_html_block_elt ("</ul>\n");
      else if (!no_headers && !xml)
        close_insertion_paragraph ();
      break;

    case multitable:
      end_multitable ();
      break;

    case enumerate:
      stop_enumerating ();
      close_insertion_paragraph ();
      current_indent -= default_indentation_increment;
      if (html)
        add_html_block_elt ("</ol>\n");
      break;

    case flushleft:
      if (html)
        add_html_block_elt ("</div>\n");
      close_insertion_paragraph ();
      break;

    case cartouche:
      if (html)
       add_html_block_elt ("</td></tr></table>\n");
      close_insertion_paragraph ();
      break;

    case group:
      if (!xml || docbook)
        close_insertion_paragraph ();
      break;

    case floatenv:
      if (xml)
        xml_insert_element (FLOAT, END);
      else
        {
          if (html)
            add_html_block_elt ("<p><strong class=\"float-caption\">");
          else
            close_paragraph ();

          no_indent = 1;

          /* Legend:
               1) @float Foo,lbl & no caption:    Foo 1.1
               2) @float Foo & no caption:        Foo
               3) @float ,lbl & no caption:       1.1
               4) @float & no caption:                    */

          if (!xml && !html)
            indent (current_indent);

          if (strlen (current_float_type ()))
            execute_string ("%s", current_float_type ());

          if (strlen (current_float_id ()) > 0)
            {
              if (strlen (current_float_type ()) > 0)
                add_char (' ');

              add_word (current_float_number ());
            }

          if (strlen (current_float_title ()) > 0)
            {
              if (strlen (current_float_type ()) > 0
                  || strlen (current_float_id ()) > 0)
                insert_string (": ");

              execute_string ("%s", current_float_title ());
            }

          /* Indent the following paragraph. */
          inhibit_paragraph_indentation = 0;

          if (html)
            add_word ("</strong></p></div>\n");
          else
            close_paragraph ();
        }
      float_active--;
      break;

    case format:
    case smallformat:
    case display:
    case smalldisplay:
    case example:
    case smallexample:
    case lisp:
    case smalllisp:
    case quotation:
      /* @format and @smallformat are the only fixed_width insertion
         without a change in indentation. */
      if (type != format && type != smallformat && type != quotation)
        current_indent -= example_indentation_increment;
      else if (type == quotation)
        current_indent -= default_indentation_increment;

      if (html)
        { /* The complex code in close_paragraph that kills whitespace
             does not function here, since we've inserted non-whitespace
             (the </whatever>) before it.  The indentation already got
             inserted at the end of the last example line, so we have to
             delete it, or browsers wind up showing an extra blank line.  */
          kill_self_indent (default_indentation_increment);
          add_html_block_elt (type == quotation
              ? "</blockquote>\n" : "</pre>\n");
        }

      /* The ending of one of these insertions always marks the
         start of a new paragraph, except for the XML output. */
      if (!xml || docbook)
        close_insertion_paragraph ();

      /* </pre> closes paragraph without messing with </p>.  */
      if (html && type != quotation)
          paragraph_is_open = 0;
      break;

    case table:
    case ftable:
    case vtable:
      current_indent -= default_indentation_increment;
      if (html)
        add_html_block_elt ("</dl>\n");
      close_insertion_paragraph ();
      break;

    case itemize:
      current_indent -= default_indentation_increment;
      if (html)
        add_html_block_elt ("</ul>\n");
      close_insertion_paragraph ();
      break;

    case flushright:
      force_flush_right--;
      if (html)
        add_html_block_elt ("</div>\n");
      close_insertion_paragraph ();
      break;

    /* Handle the @defun insertions with this default clause. */
    default:
      {
        int base_type;

        if (type < defcv || type > defvr)
          line_error ("end_insertion internal error: type=%d", type);
  
        base_type = get_base_type (type);
        switch (base_type)
          {
          case deffn:
          case defvr:
          case deftp:
          case deftypecv:
          case deftypefn:
          case deftypevr:
          case defcv:
          case defop:
          case deftypemethod:
          case deftypeop:
          case deftypeivar:
            if (html)
              {
                if (paragraph_is_open)
                  add_html_block_elt ("</p>");
                /* close the div and blockquote which has been opened in defun.c */
                if (!rollback_empty_tag ("blockquote"))
                  add_html_block_elt ("</blockquote>");
                add_html_block_elt ("</div>\n");
              }
           if (xml)
             xml_end_definition ();
            break;
          } /* switch (base_type)... */
  
        current_indent -= default_indentation_increment;
        close_insertion_paragraph ();
      }
      break;
      
    }

  if (current_indent < 0)
    line_error ("end_insertion internal error: current indent=%d",
                current_indent);
}

Here is the call graph for this function:

Here is the caller graph for this function:

static void enum_html ( void  ) [static]

Definition at line 379 of file insertion.c.

{
  char type;
  int start;

  if (isdigit (*enumeration_arg))
    {
      type = '1';
      start = atoi (enumeration_arg);
    }
  else if (isupper (*enumeration_arg))
    {
      type = 'A';
      start = *enumeration_arg - 'A' + 1;
    }
  else
    {
      type = 'a';
      start = *enumeration_arg - 'a' + 1;
    }

  add_html_block_elt_args ("<ol type=%c start=%d>\n", type, start);
}

Here is the call graph for this function:

Here is the caller graph for this function:

static void enumerate_item ( void  ) [static]

Definition at line 357 of file insertion.c.

{
  char temp[10];

  if (current_enumtype == ENUM_ALPHA)
    {
      if (current_enumval == ('z' + 1) || current_enumval == ('Z' + 1))
        {
          current_enumval = ((current_enumval - 1) == 'z' ? 'a' : 'A');
          warning (_("lettering overflow, restarting at %c"), current_enumval);
        }
      sprintf (temp, "%c. ", current_enumval);
    }
  else
    sprintf (temp, "%d. ", current_enumval);

  indent (output_column += (current_indent - strlen (temp)));
  add_word (temp);
  current_enumval++;
}

Here is the call graph for this function:

Here is the caller graph for this function:

enum insertion_type find_type_from_name ( char *  name)

Definition at line 244 of file insertion.c.

{
  int index = 0;
  while (index < (int) bad_type)
    {
      if (STREQ (name, insertion_type_names[index]))
        return (enum insertion_type) index;
      if (index == rawdocbook && STREQ (name, "docbook"))
        return rawdocbook;
      if (index == rawhtml && STREQ (name, "html"))
        return rawhtml;
      if (index == rawxml && STREQ (name, "xml"))
        return rawxml;
      if (index == rawtex && STREQ (name, "tex"))
        return rawtex;
      index++;
    }
  return bad_type;
}

Here is the caller graph for this function:

static char* get_item_function ( void  ) [static]

Definition at line 146 of file insertion.c.

{
  char *item_function;
  char *item_loc;
  
  get_rest_of_line (0, &item_function);

  /* If the document erroneously says
       @itemize @bullet @item foobar
     it's nicer to give an error up front than repeat `@bullet expected
     braces' until we get a segmentation fault.  */
  item_loc = strstr (item_function, "@item");
  if (item_loc)
    {
      line_error (_("@item not allowed in argument to @itemize"));
      *item_loc = 0;
    }

  /* If we hit the end of text in get_rest_of_line, backing up
     input pointer will cause the last character of the last line
     be pushed back onto the input, which is wrong.  */
  if (input_text_offset < input_text_length)
    backup_input_pointer ();

  if (STREQ (item_function, "@"))
    {
      free (item_function);
      item_function = xstrdup ("@ ");
    }

  return item_function;
}

Here is the call graph for this function:

Here is the caller graph for this function:

void handle_verbatim_environment ( int  find_end_verbatim)

Definition at line 1620 of file insertion.c.

{
  int character;
  int seen_end = 0;
  int save_filling_enabled = filling_enabled;
  int save_inhibit_paragraph_indentation = inhibit_paragraph_indentation;
  int save_escape_html = escape_html;

  if (!insertion_stack)
    close_single_paragraph (); /* no blank lines if not at outer level */
  inhibit_paragraph_indentation = 1;
  filling_enabled = 0;
  in_fixed_width_font++;
  last_char_was_newline = 0;

  /* No indentation: this is verbatim after all
     If you want indent, enclose @verbatim in @example
       current_indent += default_indentation_increment;
   */

  if (html)
    { /* If inside @example, we'll be preceded by the indentation
         already.  Browsers will ignore those spaces because we're about
         to start another <pre> (don't ask me).  So, wipe them out for
         cleanliness, and re-insert.  */
      int i;
      kill_self_indent (default_indentation_increment);
      add_html_block_elt ("<pre class=\"verbatim\">");
      for (i = current_indent; i > 0; i--)
        add_char (' ');
    }
  else if (xml)
    {
      xml_insert_element (VERBATIM, START);
      escape_html = 0;
      add_word ("<![CDATA[");
    }

  while (input_text_offset < input_text_length)
    {
      character = curchar ();

      if (character == '\n')
        line_number++;

      /* Assume no newlines in END_VERBATIM. */
      else if (find_end_verbatim && (character == COMMAND_PREFIX) /* @ */
          && (input_text_length - input_text_offset > sizeof (END_VERBATIM))
          && !strncmp (&input_text[input_text_offset+1], END_VERBATIM,
                       sizeof (END_VERBATIM)-1))
        {
          input_text_offset += sizeof (END_VERBATIM);
          seen_end = 1;
          break;
        }

      if (html && character == '&' && escape_html)
        add_word ("&amp;");
      else if (html && character == '<' && escape_html)
        add_word ("&lt;");
      else
        add_char (character);

      input_text_offset++;
    }

  if (find_end_verbatim && !seen_end)
    warning (_("end of file inside verbatim block"));

  if (html)
    { /* See comments in example case above.  */
      kill_self_indent (default_indentation_increment);
      add_word ("</pre>");
    }
  else if (xml)
    {
      add_word ("]]>");
      xml_insert_element (VERBATIM, END);
      escape_html = save_escape_html;
    }
  
  in_fixed_width_font--;
  filling_enabled = save_filling_enabled;
  inhibit_paragraph_indentation = save_inhibit_paragraph_indentation;
}

Here is the call graph for this function:

Here is the caller graph for this function:

Definition at line 84 of file insertion.c.

Here is the caller graph for this function:

static const char* insertion_type_pname ( enum insertion_type  type) [static]

Definition at line 222 of file insertion.c.

{
  if ((int) type < (int) bad_type)
  {
    if (type == rawdocbook)
      return "docbook";
    else if (type == rawhtml)
      return "html";
    else if (type == rawxml)
      return "xml";
    else if (type == rawtex)
      return "tex";
    else
      return insertion_type_names[(int) type];
  }
  else
    return _("Broken-Type in insertion_type_pname");
}

Here is the caller graph for this function:

Definition at line 267 of file insertion.c.

{
  INSERTION_ELT *temp = insertion_stack;

  if (!insertion_level)
    return 0;

  while (temp)
    {
      if (temp->insertion == type)
        return 1;
      temp = temp->next;
    }

  return 0;
}

Here is the caller graph for this function:

Definition at line 201 of file insertion.c.

{
  INSERTION_ELT *temp = insertion_stack;

  if (temp == NULL)
    return;

  in_fixed_width_font = temp->in_fixed_width_font;
  inhibit_paragraph_indentation = temp->inhibited;
  filling_enabled = temp->filling_enabled;
  indented_fill = temp->indented_fill;
  free_and_clear (&(temp->item_function));
  free_and_clear (&(temp->filename));
  insertion_stack = insertion_stack->next;
  free (temp);
  insertion_level--;
}

Here is the call graph for this function:

Here is the caller graph for this function:

static void push_insertion ( enum insertion_type  type,
char *  item_function 
) [static]

Definition at line 181 of file insertion.c.

{
  INSERTION_ELT *new = xmalloc (sizeof (INSERTION_ELT));

  new->item_function = item_function;
  new->filling_enabled = filling_enabled;
  new->indented_fill = indented_fill;
  new->insertion = type;
  new->line_number = line_number;
  new->filename = xstrdup (input_filename);
  new->inhibited = inhibit_paragraph_indentation;
  new->in_fixed_width_font = in_fixed_width_font;
  new->next = insertion_stack;
  insertion_stack = new;
  insertion_level++;
}

Here is the call graph for this function:

Here is the caller graph for this function:

static void start_enumerating ( int  at,
int  type 
) [static]

Definition at line 330 of file insertion.c.

Here is the call graph for this function:

Here is the caller graph for this function:

static void stop_enumerating ( void  ) [static]

Definition at line 345 of file insertion.c.

Here is the caller graph for this function:


Variable Documentation

Definition at line 326 of file insertion.c.

Definition at line 325 of file insertion.c.

Definition at line 327 of file insertion.c.

Definition at line 323 of file insertion.c.

Definition at line 324 of file insertion.c.

int float_active = 0 [static]

Definition at line 73 of file insertion.c.

Definition at line 57 of file insertion.c.

Definition at line 2369 of file insertion.c.

int html_deflist_has_term = 0 [static]

Definition at line 81 of file insertion.c.

Definition at line 60 of file insertion.c.

int in_menu = 0

Definition at line 63 of file insertion.c.

Definition at line 67 of file insertion.c.

Definition at line 53 of file insertion.c.

Definition at line 50 of file insertion.c.

char* insertion_type_names[] [static]
Initial value:
{ 
  "cartouche", "copying", "defcv", "deffn", "defivar", "defmac",
  "defmethod", "defop", "defopt", "defspec", "deftp", "deftypecv",
  "deftypefn", "deftypefun", "deftypeivar", "deftypemethod",
  "deftypeop", "deftypevar", "deftypevr", "defun", "defvar", "defvr",
  "detailmenu", "direntry", "display", "documentdescription",
  "enumerate", "example", "float", "flushleft", "flushright", "format",
  "ftable", "group", "ifclear", "ifdocbook", "ifhtml", "ifinfo",
  "ifnotdocbook", "ifnothtml", "ifnotinfo", "ifnotplaintext", "ifnottex",
  "ifnotxml", "ifplaintext", "ifset", "iftex", "ifxml", "itemize", "lisp",
  "menu", "multitable", "quotation", "rawdocbook", "rawhtml", "rawtex",
  "rawxml", "smalldisplay", "smallexample", "smallformat", "smalllisp",
  "verbatim", "table", "tex", "vtable", "titlepage", "bad_type"
}

Definition at line 33 of file insertion.c.

int itemx_flag = 0 [static]

Definition at line 2087 of file insertion.c.

int raw_output_block = 0 [static]

Definition at line 77 of file insertion.c.