freebsd-dev/contrib/texinfo/makeinfo/index.h
2005-05-23 10:46:22 +00:00

94 lines
3.3 KiB
C

/* index.h -- declarations for index.c.
$Id: index.h,v 1.2 2004/04/11 17:56:47 karl Exp $
Copyright (C) 1998, 99 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#ifndef INDEX_H
#define INDEX_H
#include "makeinfo.h"
#include "cmds.h"
/* User commands are only new indices. (Macros are handled separately.) */
extern COMMAND **user_command_array;
extern int user_command_array_len;
/* An index element... */
typedef struct index_elt
{
struct index_elt *next;
char *entry; /* The index entry itself, after expansion. */
char *entry_text; /* The original, non-expanded entry text. */
char *node; /* The node from whence it came. */
char *section; /* Current section number we are in, */
char *section_name; /* ... and its title. */
int code; /* Nonzero means add `@code{...}' when
printing this element. */
int defining_line; /* Line number where this entry was written. */
int output_line; /* And line number where it is in the output. */
char *defining_file; /* Source file for defining_line. */
char *output_file; /* Output file for output_line. */
int entry_number; /* Entry number. */
} INDEX_ELT;
/* A list of short-names for each index.
There are two indices into the the_indices array.
* read_index is the index that points to the list of index
entries that we will find if we ask for the list of entries for
this name.
* write_index is the index that points to the list of index entries
that we will add new entries to.
Initially, read_index and write_index are the same, but the
@syncodeindex and @synindex commands can change the list we add
entries to.
For example, after the commands
@cindex foo
@defindex ii
@synindex cp ii
@cindex bar
the cp index will contain the entry `foo', and the new ii
index will contain the entry `bar'. This is consistent with the
way texinfo.tex handles the same situation.
In addition, for each index, it is remembered whether that index is
a code index or not. Code indices have @code{} inserted around the
first word when they are printed with printindex. */
typedef struct
{
char *name;
int read_index; /* index entries for `name' */
int write_index; /* store index entries here, @synindex can change it */
int code;
} INDEX_ALIST;
extern INDEX_ALIST **name_index_alist;
/* Initialize all indices. */
extern void init_indices (void);
extern int defined_indices;
extern int printing_index;
extern int index_counter;
INDEX_ELT *index_list (char *name);
#endif /* !INDEX_H */