3 /* info-utils.h -- Exported functions and variables from info-utils.c.
4 Id: info-utils.h,v 1.4 2004/04/11 17:56:45 karl Exp
6 Copyright (C) 1993, 1996, 1998, 2002, 2003, 2004 Free Software
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2, or (at your option)
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with this program; if not, write to the Free Software
21 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
23 Written by Brian Fox (bfox@ai.mit.edu). */
32 /* Structure which describes a node reference, such as a menu entry or
33 cross reference. Arrays of such references can be built by calling
34 info_menus_of_node () or info_xrefs_of_node (). */
36 char *label
; /* User Label. */
37 char *filename
; /* File where this node can be found. */
38 char *nodename
; /* Name of the node. */
39 int start
, end
; /* Offsets within the containing node of LABEL. */
40 int line_number
; /* Specific line number a menu item points to. */
43 /* When non-zero, various display and input functions handle ISO Latin
44 character sets correctly. */
45 extern int ISO_Latin_p
;
47 /* Variable which holds the most recent filename parsed as a result of
48 calling info_parse_xxx (). */
49 extern char *info_parsed_filename
;
51 /* Variable which holds the most recent nodename parsed as a result of
52 calling info_parse_xxx (). */
53 extern char *info_parsed_nodename
;
55 /* Parse the filename and nodename out of STRING. If STRING doesn't
56 contain a filename (i.e., it is NOT (FILENAME)NODENAME) then set
57 INFO_PARSED_FILENAME to NULL. If second argument NEWLINES_OKAY is
58 non-zero, it says to allow the nodename specification to cross a
59 newline boundary (i.e., only `,', `.', or `TAB' can end the spec). */
60 void info_parse_node (char *string
, int newlines_okay
);
62 /* Return a NULL terminated array of REFERENCE * which represents the menu
63 found in NODE. If there is no menu in NODE, just return a NULL pointer. */
64 extern REFERENCE
**info_menu_of_node (NODE
*node
);
66 /* Return a NULL terminated array of REFERENCE * which represents the cross
67 refrences found in NODE. If there are no cross references in NODE, just
68 return a NULL pointer. */
69 extern REFERENCE
**info_xrefs_of_node (NODE
*node
);
71 /* Glean cross references from BINDING->buffer + BINDING->start until
72 BINDING->end. Return an array of REFERENCE * that represents each
73 cross reference in this range. */
74 extern REFERENCE
**info_xrefs (SEARCH_BINDING
*binding
);
76 /* Get the entry associated with LABEL in REFERENCES. Return a pointer to
77 the reference if found, or NULL. */
78 extern REFERENCE
*info_get_labeled_reference (char *label
,
79 REFERENCE
**references
);
81 /* Glean menu entries from BINDING->buffer + BINDING->start until we
82 have looked at the entire contents of BINDING. Return an array
83 of REFERENCE * that represents each menu item in this range. */
84 extern REFERENCE
**info_menu_items (SEARCH_BINDING
*binding
);
86 /* A utility function for concatenating REFERENCE **. Returns a new
87 REFERENCE ** which is the concatenation of REF1 and REF2. The REF1
88 and REF2 arrays are freed, but their contents are not. */
89 REFERENCE
**info_concatenate_references (REFERENCE
**ref1
, REFERENCE
**ref2
);
91 /* Copy an existing reference into new memory. */
92 extern REFERENCE
*info_copy_reference (REFERENCE
*src
);
94 /* Free the data associated with REFERENCES. */
95 extern void info_free_references (REFERENCE
**references
);
97 /* Search for sequences of whitespace or newlines in STRING, replacing
98 all such sequences with just a single space. Remove whitespace from
99 start and end of string. */
100 void canonicalize_whitespace (char *string
);
102 /* Return a pointer to a string which is the printed representation
103 of CHARACTER if it were printed at HPOS. */
104 extern char *printed_representation (unsigned char character
, int hpos
);
106 /* Return a pointer to the part of PATHNAME that simply defines the file. */
107 extern char *filename_non_directory (char *pathname
);
109 /* Return non-zero if NODE is one especially created by Info. */
110 extern int internal_info_node_p (NODE
*node
);
112 /* Make NODE appear to be one especially created by Info, and give it NAME. */
113 extern void name_internal_node (NODE
*node
, char *name
);
115 /* Return the window displaying NAME, the name of an internally created
117 extern WINDOW
*get_internal_info_window (char *name
);
119 /* Return a window displaying the node NODE. */
120 extern WINDOW
*get_window_of_node (NODE
*node
);
122 /* Return the node addressed by LABEL in NODE (usually one of "Prev:",
123 "Next:", "Up:", "File:", or "Node:". After a call to this function,
124 the globals `info_parsed_nodename' and `info_parsed_filename' contain
126 extern void info_parse_label (char *label
, NODE
*node
);
128 #define info_file_label_of_node(n) info_parse_label (INFO_FILE_LABEL, n)
129 #define info_next_label_of_node(n) info_parse_label (INFO_NEXT_LABEL, n)
130 #define info_up_label_of_node(n) info_parse_label (INFO_UP_LABEL, n)
131 #define info_prev_label_of_node(n) \
133 info_parse_label (INFO_PREV_LABEL, n); \
134 if (!info_parsed_nodename && !info_parsed_filename) \
135 info_parse_label (INFO_ALTPREV_LABEL, n); \
138 #endif /* not INFO_UTILS_H */