1/*	$NetBSD: index.h,v 1.1.1.1 2016/01/14 00:11:29 christos Exp $	*/
2
3/* index.h -- declarations for index.c.
4   Id: index.h,v 1.2 2004/04/11 17:56:47 karl Exp
5
6   Copyright (C) 1998, 99 Free Software Foundation, Inc.
7
8   This program is free software; you can redistribute it and/or modify
9   it under the terms of the GNU General Public License as published by
10   the Free Software Foundation; either version 2, or (at your option)
11   any later version.
12
13   This program is distributed in the hope that it will be useful,
14   but WITHOUT ANY WARRANTY; without even the implied warranty of
15   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16   GNU General Public License for more details.
17
18   You should have received a copy of the GNU General Public License
19   along with this program; if not, write to the Free Software Foundation,
20   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
21
22#ifndef INDEX_H
23#define INDEX_H
24
25#include "makeinfo.h"
26#include "cmds.h"
27
28/* User commands are only new indices.  (Macros are handled separately.)  */
29extern COMMAND **user_command_array;
30extern int user_command_array_len;
31
32/* An index element... */
33typedef struct index_elt
34{
35  struct index_elt *next;
36  char *entry;                  /* The index entry itself, after expansion. */
37  char *entry_text;             /* The original, non-expanded entry text. */
38  char *node;                   /* The node from whence it came. */
39  char *section;                /* Current section number we are in, */
40  char *section_name;           /* ... and its title.  */
41  int code;                     /* Nonzero means add `@code{...}' when
42                                   printing this element. */
43  int defining_line;            /* Line number where this entry was written. */
44  int output_line;              /* And line number where it is in the output. */
45  char *defining_file;          /* Source file for defining_line. */
46  char *output_file;            /* Output file for output_line. */
47  int entry_number;             /* Entry number.  */
48} INDEX_ELT;
49
50
51/* A list of short-names for each index.
52   There are two indices into the the_indices array.
53   * read_index is the index that points to the list of index
54     entries that we will find if we ask for the list of entries for
55     this name.
56   * write_index is the index that points to the list of index entries
57     that we will add new entries to.
58
59   Initially, read_index and write_index are the same, but the
60   @syncodeindex and @synindex commands can change the list we add
61   entries to.
62
63   For example, after the commands
64     @cindex foo
65     @defindex ii
66     @synindex cp ii
67     @cindex bar
68
69   the cp index will contain the entry `foo', and the new ii
70   index will contain the entry `bar'.  This is consistent with the
71   way texinfo.tex handles the same situation.
72
73   In addition, for each index, it is remembered whether that index is
74   a code index or not.  Code indices have @code{} inserted around the
75   first word when they are printed with printindex. */
76typedef struct
77{
78  char *name;
79  int read_index;   /* index entries for `name' */
80  int write_index;  /* store index entries here, @synindex can change it */
81  int code;
82} INDEX_ALIST;
83
84extern INDEX_ALIST **name_index_alist;
85
86/* Initialize all indices.  */
87extern void init_indices (void);
88
89extern int defined_indices;
90extern int printing_index;
91extern int index_counter;
92
93INDEX_ELT *index_list (char *name);
94
95#endif /* !INDEX_H */
96