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")))