Function: calc-read-parse-table-part
calc-read-parse-table-part is an autoloaded and byte-compiled function
defined in calc-prog.el.gz.
Signature
(calc-read-parse-table-part TERM ETERM)
Source Code
;; Defined in /usr/src/emacs/lisp/calc/calc-prog.el.gz
(defun calc-read-parse-table-part (term eterm)
(let ((part nil)
(quoted nil))
(while (progn
(skip-chars-forward "\n\t ")
(if (eobp) (error "Expected `%s'" eterm))
(not (looking-at term)))
(cond ((looking-at "%%")
(end-of-line))
((looking-at "{[\n\t ]")
(forward-char 2)
(let ((p (calc-read-parse-table-part "}" "}")))
(or (looking-at "[+*?]")
(error "Expected `+', `*', or `?'"))
(let ((sym (intern (buffer-substring (point) (1+ (point))))))
(forward-char 1)
(looking-at "[^\n\t ]*")
(let ((sep (buffer-substring (point) (match-end 0))))
(goto-char (match-end 0))
(and (eq sym '\?) (> (length sep) 0)
(not (equal sep "$")) (not (equal sep "."))
(error "Separator not allowed with { ... }?"))
(if (string-match "\\`\"" sep)
(setq sep (read-from-string sep)))
(if (> (length sep) 0)
(setq sep (calc-fix-token-name sep)))
(setq part (nconc part
(list (list sym p
(and (> (length sep) 0)
(cons sep p))))))))))
((looking-at "}")
(error "Too many }'s"))
((looking-at "\"")
(setq quoted (calc-fix-token-name (read (current-buffer)))
part (nconc part (list quoted))))
((looking-at "#\\(\\(/[0-9]+\\)?\\)[\n\t ]")
(setq part (nconc part (list (if (= (match-beginning 1)
(match-end 1))
0
(string-to-number
(buffer-substring
(1+ (match-beginning 1))
(match-end 1)))))))
(goto-char (match-end 0)))
((looking-at ":=[\n\t ]")
(error "Misplaced `:='"))
(t
(looking-at "[^\n\t ]*")
(let ((end (match-end 0)))
(setq part (nconc part (list (calc-fix-token-name
(buffer-substring
(point) end) t))))
(goto-char end)))))
(goto-char (match-end 0))
(let ((len (length part)))
(while (and (> len 1)
(let ((last (nthcdr (setq len (1- len)) part)))
(and (assoc (car last) '((")") ("]") (">")))
(not (eq (car last) quoted))
(setcar last
(list '\? (list (car last)) '("$$"))))))))
part))