Mercurial > hg > xemacs-beta
comparison lisp/psgml/psgml-debug.el @ 0:376386a54a3c r19-14
Import from CVS: tag r19-14
author | cvs |
---|---|
date | Mon, 13 Aug 2007 08:45:50 +0200 |
parents | |
children | ac2d302a0011 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:376386a54a3c |
---|---|
1 ;;;;\filename dump.el | |
2 ;;;\Last edited: Fri Nov 25 18:30:01 1994 by lenst@dell (Lennart Staflin) | |
3 ;;;\RCS $Id: psgml-debug.el,v 1.1.1.1 1996/12/18 03:35:18 steve Exp $ | |
4 ;;;\author {Lennart Staflin} | |
5 ;;;\maketitle | |
6 | |
7 ;;\begin{codeseg} | |
8 (provide 'psgml-debug) | |
9 (require 'psgml) | |
10 (require 'psgml-parse) | |
11 (require 'psgml-edit) | |
12 ;;(require 'psgml-dtd) | |
13 (autoload 'sgml-translate-model "psgml-dtd" "" nil) | |
14 | |
15 ;;;; Debugging | |
16 | |
17 (define-key sgml-mode-map "\C-c," 'sgml-goto-cache) | |
18 (define-key sgml-mode-map "\C-c\C-x" 'sgml-dump-tree) | |
19 | |
20 (defun sgml-this-element () | |
21 (interactive) | |
22 (let ((tree (sgml-find-element-of (point)))) | |
23 (sgml-dump-rec tree))) | |
24 | |
25 (defun sgml-goto-cache () | |
26 (interactive) | |
27 (setq sgml-dtd-info (sgml-pstate-dtd sgml-buffer-parse-state) | |
28 sgml-top-tree (sgml-pstate-top-tree sgml-buffer-parse-state)) | |
29 (sgml-find-start-point (point)) | |
30 (message "%s" (sgml-element-context-string sgml-top-tree))) | |
31 | |
32 (defun sgml-dump-tree (arg) | |
33 (interactive "P") | |
34 (when arg | |
35 (sgml-parse-to-here)) | |
36 (with-output-to-temp-buffer "*Dump*" | |
37 (sgml-dump-rec (sgml-pstate-top-tree sgml-buffer-parse-state)))) | |
38 | |
39 (defun sgml-comepos (epos) | |
40 (if (sgml-strict-epos-p epos) | |
41 (format "%s:%s" | |
42 (sgml-entity-name (sgml-eref-entity (sgml-epos-eref epos))) | |
43 (sgml-epos-pos epos)) | |
44 (format "%s" epos))) | |
45 | |
46 (defun sgml-dump-rec (u) | |
47 (while u | |
48 (princ | |
49 (format | |
50 "%s%s start:%s(%s) end:%s(%s) epos:%s/%s net:%s\n" | |
51 (make-string (sgml-tree-level u) ?. ) | |
52 (sgml-element-gi u) | |
53 (sgml-element-start u) (sgml-tree-stag-len u) | |
54 (if (sgml-tree-etag-epos u) (sgml-tree-end u)) (sgml-tree-etag-len u) | |
55 (sgml-comepos (sgml-tree-stag-epos u)) | |
56 (sgml-comepos (sgml-tree-etag-epos u)) | |
57 (sgml-tree-net-enabled u))) | |
58 (sgml-dump-rec (sgml-tree-content u)) | |
59 (setq u (sgml-tree-next u)))) | |
60 | |
61 ;;;; For edebug | |
62 | |
63 ;;(put 'when 'edebug-form-hook t) | |
64 ;;(put 'unless 'edebug-form-hook t) | |
65 ;;(put 'push 'edebug-form-hook '(form sexp)) | |
66 ;;(put 'setf 'edebug-form-hook '(sexp form)) | |
67 | |
68 (eval-when (load) | |
69 (def-edebug-spec sgml-with-parser-syntax (&rest form)) | |
70 (def-edebug-spec sgml-skip-upto (sexp)) | |
71 (def-edebug-spec sgml-check-delim (sexp &optional sexp)) | |
72 (def-edebug-spec sgml-parse-delim (sexp &optional sexp)) | |
73 (def-edebug-spec sgml-is-delim (sexp &optional sexp sexp sexp))) | |
74 | |
75 ;;;; dump | |
76 | |
77 (defun sgml-dump-dtd (&optional dtd) | |
78 (interactive ) | |
79 (unless dtd | |
80 (setq dtd (sgml-pstate-dtd sgml-buffer-parse-state))) | |
81 (with-output-to-temp-buffer "*DTD dump*" | |
82 (princ (format "Dependencies: %S\n" | |
83 (sgml-dtd-dependencies dtd))) | |
84 (loop for et being the symbols of (sgml-dtd-eltypes dtd) | |
85 do (sgml-dp-element et)))) | |
86 | |
87 (defun sgml-dump-element (el-name) | |
88 (interactive | |
89 (list (completing-read "Element: " | |
90 (sgml-dtd-eltypes | |
91 (sgml-pstate-dtd sgml-buffer-parse-state)) | |
92 nil t))) | |
93 (with-output-to-temp-buffer "*Element dump*" | |
94 (sgml-dp-element (sgml-lookup-eltype el-name)))) | |
95 | |
96 | |
97 (defun sgml-dp-element (el) | |
98 (cond | |
99 ((sgml-eltype-defined el) | |
100 (princ (format "Element %s %s %s%s:\n" | |
101 (sgml-eltype-name el) | |
102 (if (sgml-eltype-stag-optional el) "O" "-") | |
103 (if (sgml-eltype-etag-optional el) "O" "-") | |
104 (if (sgml-eltype-mixed el) " mixed" ""))) | |
105 (cond | |
106 ((sgml-model-group-p (sgml-eltype-model el)) | |
107 (sgml-dp-model (sgml-eltype-model el))) | |
108 (t | |
109 (prin1 (sgml-eltype-model el)) | |
110 (terpri))) | |
111 (princ (format "Exeptions: +%S -%S\n" | |
112 (sgml-eltype-includes el) | |
113 (sgml-eltype-excludes el))) | |
114 (princ (format "Attlist: %S\n" (sgml-eltype-attlist el))) | |
115 (princ (format "Plist: %S\n" (symbol-plist el)))) | |
116 (t | |
117 (princ (format "Undefined element %s\n" (sgml-eltype-name el))))) | |
118 (terpri)) | |
119 | |
120 | |
121 (defun sgml-dp-model (model &optional indent) | |
122 (or indent (setq indent 0)) | |
123 (let ((sgml-code-xlate (sgml-translate-model model))) | |
124 (loop | |
125 for i from 0 | |
126 for x in sgml-code-xlate do | |
127 (cond ((sgml-normal-state-p (car x)) | |
128 (princ (format "%s%d: opts=%s reqs=%s\n" | |
129 (make-string indent ? ) i | |
130 (sgml-untangel-moves (sgml-state-opts (car x))) | |
131 (sgml-untangel-moves (sgml-state-reqs (car x)))))) | |
132 (t ; &node | |
133 (princ (format "%s%d: &node next=%d\n" | |
134 (make-string indent ? ) i | |
135 (sgml-code-xlate (sgml-&node-next (car x))))) | |
136 (loop for m in (sgml-&node-dfas (car x)) | |
137 do (sgml-dp-model m (+ indent 2)))))))) | |
138 | |
139 (defun sgml-untangel-moves (moves) | |
140 (loop for m in moves | |
141 collect (list (sgml-move-token m) | |
142 (sgml-code-xlate (sgml-move-dest m))))) | |
143 | |
144 | |
145 ;;;; Build autoloads for all interactive functions in psgml-parse | |
146 | |
147 (defun sgml-build-autoloads () | |
148 (interactive) | |
149 (with-output-to-temp-buffer "*autoload*" | |
150 (loop | |
151 for file in '("psgml-parse" "psgml-edit" "psgml-dtd" | |
152 "psgml-info" "psgml-charent") | |
153 do | |
154 (set-buffer (find-file-noselect (concat file ".el"))) | |
155 (goto-char (point-min)) | |
156 (while (and | |
157 (not (eobp)) | |
158 (re-search-forward "^(defun +\\([^ ]+\\)" nil t)) | |
159 (let ((name (buffer-substring (match-beginning 1) | |
160 (match-end 1))) | |
161 doc) | |
162 (forward-sexp 1) ; skip argument list | |
163 (skip-chars-forward " \n\t") | |
164 (when (eq ?\" (following-char)) ; doc string | |
165 (setq doc (buffer-substring (point) | |
166 (progn (forward-sexp 1) | |
167 (point))))) | |
168 (skip-chars-forward " \n\t") | |
169 (when (looking-at "(interactive") | |
170 (if (null doc) | |
171 (message "No doc for %s" name)) | |
172 (princ (format | |
173 "(autoload '%s \"%s\" %s t)\n" | |
174 name file doc)))))))) | |
175 | |
176 ;;;; Test psgml with sgmls test cases | |
177 | |
178 (defun test-sgml (start) | |
179 (interactive "p") | |
180 (let (file | |
181 (sgml-show-warnings t)) | |
182 (with-output-to-temp-buffer "*Testing psgml*" | |
183 (while | |
184 (progn | |
185 (setq file (format "/usr/local/src/sgmls-1.1/test/test%03d.sgm" | |
186 start)) | |
187 (file-exists-p file)) | |
188 (princ (format "*** File test%03d ***\n" start)) | |
189 (find-file file) | |
190 (condition-case errcode | |
191 (progn | |
192 (sgml-parse-prolog) | |
193 ;;(sgml-next-trouble-spot) | |
194 (sgml-parse-until-end-of nil) | |
195 ) | |
196 (error | |
197 (princ errcode) | |
198 (terpri))) | |
199 (if (get-buffer sgml-log-buffer-name) | |
200 (princ (save-excursion | |
201 (set-buffer sgml-log-buffer-name) | |
202 (buffer-string)))) | |
203 (terpri) | |
204 (terpri) | |
205 (sit-for 0) | |
206 (kill-buffer (current-buffer)) | |
207 (setq start (1+ start)))))) | |
208 | |
209 | |
210 ;;;; Profiling | |
211 | |
212 (defun profile-sgml (&optional file) | |
213 (interactive) | |
214 (or file (setq file (expand-file-name "~/src/psgml/test/shortref.sgml"))) | |
215 (find-file file) | |
216 (sgml-need-dtd) | |
217 (sgml-instrument-parser) | |
218 (elp-reset-all) | |
219 (dotimes (i 20) | |
220 (garbage-collect) | |
221 (sgml-reparse-buffer (function sgml-handle-shortref))) | |
222 (elp-results)) | |
223 | |
224 (defun sgml-instrument-parser () | |
225 (interactive) | |
226 (require 'elp) | |
227 (setq elp-function-list nil) | |
228 (elp-restore-all) | |
229 (setq elp-function-list | |
230 '( | |
231 sgml-parse-to | |
232 sgml-parser-loop | |
233 sgml-parse-markup-declaration | |
234 sgml-do-processing-instruction | |
235 sgml-pop-entity | |
236 sgml-tree-net-enabled | |
237 sgml-do-end-tag | |
238 sgml-do-data | |
239 sgml-deref-shortmap | |
240 sgml-handle-shortref | |
241 sgml-do-start-tag | |
242 sgml-do-general-entity-ref | |
243 sgml-set-face-for | |
244 sgml-pcdata-move | |
245 sgml-shortmap-skipstring | |
246 ;; | |
247 )) | |
248 (elp-instrument-list)) | |
249 | |
250 | |
251 (defun sgml-instrument-dtd-parser () | |
252 (interactive) | |
253 (require 'elp) | |
254 (setq elp-function-list nil) | |
255 (elp-restore-all) | |
256 (setq elp-function-list | |
257 '( | |
258 sgml-parse-prolog | |
259 sgml-skip-ds | |
260 sgml-parse-markup-declaration | |
261 sgml-check-doctype-body | |
262 ;; | |
263 sgml-check-dtd-subset | |
264 sgml-parse-ds | |
265 sgml-declare-attlist | |
266 sgml-declare-entity | |
267 sgml-declare-element | |
268 sgml-declare-shortref | |
269 ;; | |
270 sgml-parse-parameter-literal | |
271 sgml-check-element-type | |
272 sgml-check-primitive-content-token | |
273 sgml-check-model-group | |
274 ;; In sgml-check-model-group | |
275 sgml-parse-modifier | |
276 sgml-make-pcdata | |
277 sgml-skip-ts | |
278 sgml-make-opt | |
279 sgml-make-* | |
280 sgml-make-+ | |
281 sgml-reduce-, | |
282 sgml-reduce-| | |
283 sgml-make-& | |
284 sgml-make-conc | |
285 sgml-copy-moves | |
286 ;; is ps* | |
287 sgml-do-parameter-entity-ref | |
288 ;; | |
289 sgml-make-primitive-content-token | |
290 sgml-push-to-entity | |
291 sgml-lookup-entity | |
292 sgml-lookup-eltype | |
293 sgml-one-final-state | |
294 sgml-remove-redundant-states-1 | |
295 )) | |
296 (elp-instrument-list)) | |
297 | |
298 | |
299 ;¤¤\end{codeseg} |