Function: forms--make-parser-elt
forms--make-parser-elt is a byte-compiled function defined in
forms.el.gz.
Signature
(forms--make-parser-elt EL)
Documentation
Helper routine to generate forms parser function.
Source Code
;; Defined in /usr/src/emacs/lisp/forms.el.gz
(defun forms--make-parser-elt (el)
"Helper routine to generate forms parser function."
;; The parse routine will look like:
;;
;; (lambda nil
;; (let (here)
;; (goto-char (point-min))
;;
;; ;; "text: "
;; (if (not (looking-at "text: "))
;; (error "Parse error: cannot find \"text: \""))
;; (forward-char 6) ; past "text: "
;;
;; ;; 6
;; ;; "\nmore text: "
;; (setq here (point))
;; (if (not (search-forward "\nmore text: " nil t nil))
;; (error "Parse error: cannot find \"\\nmore text: \""))
;; (aset forms--recordv 5 (buffer-substring-no-properties here (- (point) 12)))
;;
;; ;; (tocol 40)
;; (let ((forms--dyntext (car-safe forms--dynamic-text)))
;; (if (not (looking-at (regexp-quote forms--dyntext)))
;; (error "Parse error: not looking at \"%s\"" forms--dyntext))
;; (forward-char (length forms--dyntext))
;; (setq forms--dynamic-text (cdr-safe forms--dynamic-text)))
;; ...
;; ;; final flush (due to terminator sentinel, see below)
;; (aset forms--recordv 7 (buffer-substring-no-properties (point) (point-max)))
(cond
((stringp el)
(prog1
(if forms--field
`((setq here (point))
(if (not (search-forward ,el nil t nil))
(error "Parse error: cannot find `%s'" ,el))
(aset forms--recordv ,(1- forms--field)
(buffer-substring-no-properties here
(- (point) ,(length el)))))
`((if (not (looking-at ,(regexp-quote el)))
(error "Parse error: not looking at `%s'" ,el))
(forward-char ,(length el))))
(setq forms--seen-text t)
(setq forms--field nil)))
((numberp el)
(if forms--field
(error "Cannot parse adjacent fields %d and %d"
forms--field el)
(setq forms--field el)
nil))
((null el)
(if forms--field
`((aset forms--recordv ,(1- forms--field)
(buffer-substring-no-properties (point) (point-max))))))
((listp el)
(prog1
(if forms--field
`((let ((here (point))
(forms--dyntext (aref forms--dyntexts ,forms--dyntext)))
(if (not (search-forward forms--dyntext nil t nil))
(error "Parse error: cannot find `%s'" forms--dyntext))
(aset forms--recordv ,(1- forms--field)
(buffer-substring-no-properties here
(- (point) (length forms--dyntext))))))
`((let ((forms--dyntext (aref forms--dyntexts ,forms--dyntext)))
(if (not (looking-at (regexp-quote forms--dyntext)))
(error "Parse error: not looking at `%s'" forms--dyntext))
(forward-char (length forms--dyntext)))))
(setq forms--dyntext (1+ forms--dyntext))
(setq forms--seen-text t)
(setq forms--field nil)))
))