1/* $NetBSD: info-utils.h,v 1.1.1.1 2016/01/14 00:11:29 christos Exp $ */ 2 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 5 6 Copyright (C) 1993, 1996, 1998, 2002, 2003, 2004 Free Software 7 Foundation, Inc. 8 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) 12 any later version. 13 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. 18 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. 22 23 Written by Brian Fox (bfox@ai.mit.edu). */ 24 25#ifndef INFO_UTILS_H 26#define INFO_UTILS_H 27 28#include "nodes.h" 29#include "window.h" 30#include "search.h" 31 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 (). */ 35typedef struct { 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. */ 41} REFERENCE; 42 43/* When non-zero, various display and input functions handle ISO Latin 44 character sets correctly. */ 45extern int ISO_Latin_p; 46 47/* Variable which holds the most recent filename parsed as a result of 48 calling info_parse_xxx (). */ 49extern char *info_parsed_filename; 50 51/* Variable which holds the most recent nodename parsed as a result of 52 calling info_parse_xxx (). */ 53extern char *info_parsed_nodename; 54 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). */ 60void info_parse_node (char *string, int newlines_okay); 61 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. */ 64extern REFERENCE **info_menu_of_node (NODE *node); 65 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. */ 69extern REFERENCE **info_xrefs_of_node (NODE *node); 70 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. */ 74extern REFERENCE **info_xrefs (SEARCH_BINDING *binding); 75 76/* Get the entry associated with LABEL in REFERENCES. Return a pointer to 77 the reference if found, or NULL. */ 78extern REFERENCE *info_get_labeled_reference (char *label, 79 REFERENCE **references); 80 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. */ 84extern REFERENCE **info_menu_items (SEARCH_BINDING *binding); 85 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. */ 89REFERENCE **info_concatenate_references (REFERENCE **ref1, REFERENCE **ref2); 90 91/* Copy an existing reference into new memory. */ 92extern REFERENCE *info_copy_reference (REFERENCE *src); 93 94/* Free the data associated with REFERENCES. */ 95extern void info_free_references (REFERENCE **references); 96 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. */ 100void canonicalize_whitespace (char *string); 101 102/* Return a pointer to a string which is the printed representation 103 of CHARACTER if it were printed at HPOS. */ 104extern char *printed_representation (unsigned char character, int hpos); 105 106/* Return a pointer to the part of PATHNAME that simply defines the file. */ 107extern char *filename_non_directory (char *pathname); 108 109/* Return non-zero if NODE is one especially created by Info. */ 110extern int internal_info_node_p (NODE *node); 111 112/* Make NODE appear to be one especially created by Info, and give it NAME. */ 113extern void name_internal_node (NODE *node, char *name); 114 115/* Return the window displaying NAME, the name of an internally created 116 Info window. */ 117extern WINDOW *get_internal_info_window (char *name); 118 119/* Return a window displaying the node NODE. */ 120extern WINDOW *get_window_of_node (NODE *node); 121 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 125 the information. */ 126extern void info_parse_label (char *label, NODE *node); 127 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) \ 132 do { \ 133 info_parse_label (INFO_PREV_LABEL, n); \ 134 if (!info_parsed_nodename && !info_parsed_filename) \ 135 info_parse_label (INFO_ALTPREV_LABEL, n); \ 136 } while (0) 137 138#endif /* not INFO_UTILS_H */ 139