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