Home | History | Annotate | Line # | Download | only in info
info-utils.h revision 1.1.1.1
      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 (at) 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 (). */
     35 typedef 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. */
     45 extern int ISO_Latin_p;
     46 
     47 /* Variable which holds the most recent filename parsed as a result of
     48    calling info_parse_xxx (). */
     49 extern char *info_parsed_filename;
     50 
     51 /* Variable which holds the most recent nodename parsed as a result of
     52    calling info_parse_xxx (). */
     53 extern 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). */
     60 void 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. */
     64 extern 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. */
     69 extern 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. */
     74 extern 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. */
     78 extern 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. */
     84 extern 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. */
     89 REFERENCE **info_concatenate_references (REFERENCE **ref1, REFERENCE **ref2);
     90 
     91 /* Copy an existing reference into new memory.  */
     92 extern REFERENCE *info_copy_reference (REFERENCE *src);
     93 
     94 /* Free the data associated with REFERENCES. */
     95 extern 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. */
    100 void 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. */
    104 extern char *printed_representation (unsigned char character, int hpos);
    105 
    106 /* Return a pointer to the part of PATHNAME that simply defines the file. */
    107 extern char *filename_non_directory (char *pathname);
    108 
    109 /* Return non-zero if NODE is one especially created by Info. */
    110 extern int internal_info_node_p (NODE *node);
    111 
    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);
    114 
    115 /* Return the window displaying NAME, the name of an internally created
    116    Info window. */
    117 extern WINDOW *get_internal_info_window (char *name);
    118 
    119 /* Return a window displaying the node NODE. */
    120 extern 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. */
    126 extern 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