0
|
1 ;;!emacs
|
|
2 ;;
|
|
3 ;; FILE: br-info.el
|
|
4 ;; SUMMARY: Support routines for Info file hierarchy browsing.
|
|
5 ;; USAGE: GNU Emacs Lisp Library
|
|
6 ;; KEYWORDS: docs, help, hypermedia
|
|
7 ;;
|
|
8 ;; AUTHOR: Bob Weiner
|
100
|
9 ;; ORG: InfoDock Associates
|
0
|
10 ;;
|
|
11 ;; ORIG-DATE: 7-Dec-89
|
100
|
12 ;; LAST-MOD: 20-Feb-97 at 07:01:43 by Bob Weiner
|
0
|
13 ;;
|
100
|
14 ;; Copyright (C) 1989-1995, 1997 Free Software Foundation, Inc.
|
0
|
15 ;; See the file BR-COPY for license information.
|
|
16 ;;
|
|
17 ;; This file is part of the OO-Browser.
|
|
18 ;;
|
|
19 ;; DESCRIPTION:
|
|
20 ;;
|
100
|
21 ;; See `info-class-def-regexp' for regular expression that matches class
|
0
|
22 ;; definitions.
|
|
23 ;;
|
|
24 ;; DESCRIP-END.
|
|
25
|
|
26 ;;; ************************************************************************
|
|
27 ;;; Other required Elisp libraries
|
|
28 ;;; ************************************************************************
|
|
29
|
|
30 (require 'br-lib)
|
|
31
|
|
32 ;;; ************************************************************************
|
|
33 ;;; User visible variables
|
|
34 ;;; ************************************************************************
|
|
35
|
|
36 (defvar info-lib-search-dirs nil
|
|
37 "List of directories below which Info Library source files are found.
|
|
38 Subdirectories of Library source are also searched. A Library is a stable
|
|
39 group of classes.")
|
|
40
|
|
41 (defvar info-sys-search-dirs nil
|
|
42 "List of directories below which Info System source files are found.
|
|
43 Subdirectories of System source are also searched. A System class is one
|
|
44 that is not yet reusable and is likely to change before release.")
|
|
45
|
|
46 (defconst info-narrow-view-to-class t
|
|
47 "*Non-nil means narrow buffer to just the matching class definition when displayed.")
|
|
48
|
|
49 ;;; ************************************************************************
|
|
50 ;;; Internal functions
|
|
51 ;;; ************************************************************************
|
|
52
|
|
53 (defun info-find-nd (filename node edit)
|
|
54 "Show (FILENAME)NODE in current window.
|
|
55 If EDIT is non-nil, NODE is made editable."
|
|
56 (if (string-match "-[1-9][0-9]*$" filename)
|
|
57 (setq filename (substring filename 0 (match-beginning 0))) )
|
|
58 (Info-find-node filename node t)
|
|
59 (if edit (let ((Info-enable-edit t))
|
|
60 (Info-edit))))
|
|
61
|
|
62 (defun info-get-classes-from-source (filename &rest ignore)
|
|
63 "Scans FILENAME and returns cons of class list with parents-class alist.
|
|
64 Handles multiple inheritance. Assumes file existence and readability have
|
|
65 already been checked."
|
|
66 (let ((no-kill (get-file-buffer filename))
|
|
67 classes class parents parent-cons)
|
|
68 (if no-kill
|
|
69 (set-buffer no-kill)
|
|
70 (funcall br-view-file-function filename))
|
|
71 (save-restriction
|
|
72 (save-excursion
|
|
73 (widen)
|
|
74 (goto-char (point-min))
|
|
75 (while (re-search-forward info-class-def-regexp nil t)
|
|
76 (setq class (buffer-substring (match-beginning 1) (match-end 1))
|
|
77 parent-cons
|
|
78 (cons
|
|
79 (if (looking-at info-parent-regexp)
|
|
80 (list (buffer-substring
|
|
81 (match-beginning 1)
|
|
82 (match-end 1))))
|
|
83 class)
|
|
84 classes (cons class classes)
|
|
85 parents (cons parent-cons parents)))))
|
|
86 (or no-kill (kill-buffer (current-buffer)))
|
|
87 (cons classes (delq nil parents))))
|
|
88
|
|
89 (defun info-get-parents-from-source (filename class-name)
|
|
90 "Scan source in FILENAME and return list of parents of CLASS-NAME.
|
|
91 Assume file existence has already been checked."
|
|
92 (or (null class-name)
|
|
93 (car (car (br-rassoc
|
|
94 class-name
|
|
95 (cdr (info-get-classes-from-source filename)))))))
|
|
96
|
|
97 (defun info-select-path (paths-htable-elt &optional feature-p)
|
|
98 "Select proper pathname from PATHS-HTABLE-ELT based upon value of optional FEATURE-P.
|
|
99 Selection is between path of class definition and path for features associated
|
|
100 with the class."
|
|
101 (cdr paths-htable-elt))
|
|
102
|
|
103 (defun info-set-case (type)
|
|
104 "Return string TYPE identifier for use as a class name."
|
|
105 type)
|
|
106
|
|
107 (defun info-set-case-type (class-name)
|
|
108 "Return string CLASS-NAME for use as a type identifier."
|
|
109 class-name)
|
|
110
|
|
111 (defun info-to-class-end ()
|
|
112 "Assuming point is at start of node, move to start of line after end of node."
|
|
113 (interactive)
|
|
114 (skip-chars-forward " \t\n")
|
|
115 (if (re-search-forward "[]" nil t)
|
|
116 (beginning-of-line)
|
|
117 (goto-char (point-max))))
|
|
118
|
|
119 (defun info-to-comments-begin ()
|
|
120 "Skip back from current point past any preceding Info comments."
|
|
121 (skip-chars-forward " \t\n"))
|
|
122
|
|
123 ;;; ************************************************************************
|
|
124 ;;; Internal variables
|
|
125 ;;; ************************************************************************
|
|
126
|
|
127 (defconst info-class-name-before
|
|
128 "?[\n][\n\t ]*.*Node:[ \t]+"
|
|
129 "Regexp preceding the class name in a class definition.")
|
|
130
|
|
131 (defconst info-identifier-chars "-_()a-zA-Z0-9 "
|
|
132 "String of chars and char ranges that may be used within an Info identifier.")
|
|
133
|
|
134 (defconst info-identifier (concat "\\([a-zA-Z0-9()][" info-identifier-chars "]*\\)")
|
|
135 "Regular expression matching an Info identifier.")
|
|
136
|
|
137 (defconst info-class-name-after
|
|
138 "[\t,\n]+"
|
|
139 "Regexp following the class name in a class definition.")
|
|
140
|
|
141 (defconst info-class-def-regexp
|
|
142 (concat info-class-name-before info-identifier info-class-name-after)
|
|
143 "Regular expression used to match to class definitions in source text.
|
|
144 Class name identifier is grouped expression 1.")
|
|
145
|
|
146 (defconst info-parent-regexp
|
|
147 (concat ".*Up:[ \t]+" info-identifier)
|
|
148 "Regular expression whose grouping number 1 matches Info parent identifier.")
|
|
149
|
|
150 (defconst info-lang-prefix "info-"
|
|
151 "Prefix string that starts \"br-info.el\" symbol names.")
|
|
152
|
|
153 (defconst info-src-file-regexp ".$"
|
|
154 "Regular expression matching a unique part of Info source.")
|
|
155
|
|
156 (defvar info-children-htable nil
|
|
157 "Htable whose elements are of the form: (LIST-OF-CHILD-CLASSES . CLASS-NAME).
|
100
|
158 Used to traverse Info inheritance graph. `br-build-children-htable' builds
|
0
|
159 this list.")
|
|
160 (defvar info-parents-htable nil
|
|
161 "Htable whose elements are of the form: (LIST-OF-PARENT-CLASSES . CLASS-NAME).
|
100
|
162 Used to traverse Info inheritance graph. `br-build-parents-htable' builds
|
0
|
163 this list.")
|
|
164 (defvar info-paths-htable nil
|
|
165 "Htable whose elements are of the form: (LIST-OF-CLASS-NAMES . FILE-PATH).
|
|
166 FILE-PATH gives the location of classes found in LIST-OF-CLASS-NAMES.
|
100
|
167 `br-build-paths-htable' builds this list.")
|
0
|
168
|
|
169
|
|
170 (defvar info-lib-parents-htable nil
|
|
171 "Htable whose elements are of the form: (LIST-OF-PARENT-CLASSES . CLASS-NAME).
|
|
172 Only classes from stable software libraries are used to build the list.")
|
|
173 (defvar info-lib-paths-htable nil
|
|
174 "Htable whose elements are of the form: (LIST-OF-CLASS-NAMES . FILE-PATH).
|
|
175 FILE-PATH gives the location of classes found in LIST-OF-CLASS-NAMES.
|
|
176 Only classes from stable software libraries are used to build the list.")
|
|
177
|
|
178 (defvar info-sys-parents-htable nil
|
|
179 "Htable whose elements are of the form: (LIST-OF-PARENT-CLASSES . CLASS-NAME).
|
|
180 Only classes from systems that are likely to change are used to build the list.")
|
|
181 (defvar info-sys-paths-htable nil
|
|
182 "Alist whose elements are of the form: (LIST-OF-CLASS-NAMES . FILE-PATH).
|
|
183 FILE-PATH gives the location of classes found in LIST-OF-CLASS-NAMES.
|
|
184 Only classes from systems that are likely to change are used to build the
|
|
185 list.")
|
|
186
|
|
187 (defvar info-lib-prev-search-dirs nil
|
100
|
188 "Used to check if `info-lib-classes-htable' must be regenerated.")
|
0
|
189 (defvar info-sys-prev-search-dirs nil
|
100
|
190 "Used to check if `info-sys-classes-htable' must be regenerated.")
|
0
|
191
|
|
192 (defvar info-env-spec nil
|
|
193 "Non-nil value means Environment specification has been given but not yet built.
|
|
194 Nil means current Environment has been built, though it may still require updating.")
|
|
195
|
|
196 (provide 'br-info)
|