Function: idlwave-convert-xml-system-routine-info
idlwave-convert-xml-system-routine-info is an interactive and
byte-compiled function defined in idlwave.el.gz.
Signature
(idlwave-convert-xml-system-routine-info)
Documentation
Convert XML supplied IDL routine info into internal form.
Cache to disk for quick recovery.
Key Bindings
Source Code
;; Defined in /usr/src/emacs/lisp/progmodes/idlwave.el.gz
(defun idlwave-convert-xml-system-routine-info ()
"Convert XML supplied IDL routine info into internal form.
Cache to disk for quick recovery."
(interactive)
(let* ((dir (file-name-as-directory
(expand-file-name "help/online_help" (idlwave-sys-dir))))
(catalog-file (expand-file-name "idl_catalog.xml" dir))
(elem-cnt 0)
props rinfo msg-cnt elem type nelem class-result alias
routines routine-aliases statement-aliases sysvar-aliases)
(if (not (file-exists-p catalog-file))
(error "No such XML routine info file: %s" catalog-file)
(if (not (file-readable-p catalog-file))
(error "Cannot read XML routine info file: %s" catalog-file)))
(message "Reading XML routine info...")
(setq rinfo (xml-parse-file catalog-file))
(message "Reading XML routine info...done")
(setq rinfo (assq 'CATALOG rinfo))
(unless rinfo (error "Failed to parse XML routine info"))
;;(setq rinfo (car rinfo)) ; Skip the catalog stuff.
(setq rinfo (cddr rinfo))
(setq nelem (length rinfo)
msg-cnt (/ nelem 20))
(setq idlwave-xml-routine-info-file nil)
(message "Converting XML routine info...")
(setq idlwave-system-routines nil
idlwave-system-variables-alist nil
idlwave-system-class-info nil
idlwave-executive-commands-alist nil
idlwave-help-special-topic-words nil)
(while rinfo
(setq elem (car rinfo)
rinfo (cdr rinfo))
(cl-incf elem-cnt)
(when (listp elem)
(setq type (car elem)
props (car (cdr elem)))
(if (= (mod elem-cnt msg-cnt) 0)
(message "Converting XML routine info...%2d%%"
(floor (* elem-cnt 100.0) nelem)))
(cond
((eq type 'ROUTINE)
(if (setq alias (assq 'alias_to props))
(push (cons (cdr (assq 'name props)) (cdr alias))
routine-aliases)
(setq routines (idlwave-xml-create-rinfo-list elem))
(if (listp (cdr routines))
(setq idlwave-system-routines
(nconc idlwave-system-routines routines))
;; a cons cell is an executive commands
(push routines idlwave-executive-commands-alist))))
((eq type 'CLASS)
(setq class-result (idlwave-xml-create-class-method-lists elem))
(push (car class-result) idlwave-system-class-info)
(setq idlwave-system-routines
(nconc idlwave-system-routines (cdr class-result))))
((eq type 'STATEMENT)
(push (cons (cdr (assq 'name props))
(cdr (assq 'link props)))
idlwave-help-special-topic-words)
;; Save the links to those which are statement aliases (not routines)
(if (setq alias (assq 'alias_to props))
(unless (member (cdr alias) statement-aliases)
(push (cdr alias) statement-aliases))))
((eq type 'SYSVAR)
(if (setq alias (cdr (assq 'alias_to props)))
(push (cons (substring (cdr (assq 'name props)) 1)
(substring alias 1))
sysvar-aliases)
(push (idlwave-xml-create-sysvar-alist elem)
idlwave-system-variables-alist)))
(t))))
(idlwave-convert-xml-clean-routine-aliases routine-aliases)
(idlwave-convert-xml-clean-statement-aliases statement-aliases)
(idlwave-convert-xml-clean-sysvar-aliases sysvar-aliases)
(setq idlwave-xml-routine-info-file catalog-file)
(idlwave-save-routine-info)
(message "Converting XML routine info...done")))