Function: icalendar-print-param-node

icalendar-print-param-node is a byte-compiled function defined in icalendar-parser.el.gz.

Signature

(icalendar-print-param-node NODE)

Documentation

Serialize a parameter syntax node NODE to a string.

NODE should be a syntax node whose type is an iCalendar parameter type.

Source Code

;; Defined in /usr/src/emacs/lisp/calendar/icalendar-parser.el.gz
(defun ical:print-param-node (node)
  "Serialize a parameter syntax node NODE to a string.
NODE should be a syntax node whose type is an iCalendar
parameter type."
  (let* ((param-type (ical:ast-node-type node))
         (param-name (car (rassq param-type ical:param-types)))
         (name-str (or param-name
                       ;; set by parse-params for unrecognized params:
                       (ical:ast-node-meta-get :original-name node))))

    (unless (and name-str (stringp name-str) (not (equal name-str "")))
      (ical:signal-print-error "No printable parameter name" :node node))

    (let* ((list-sep (get param-type 'ical:list-sep))
           (val/s (ical:ast-node-value node))
           (vals (if (and list-sep (listp val/s))
                     val/s
                   (list val/s)))
           ;; any ical:print-error here propagates:
           (printed (mapcar #'ical:default-value-printer vals))
           ;; add quotes to each value as needed, even if :quoted
           ;; does not require it:
           (must-quote (get param-type 'ical:is-quoted))
           (quoted (mapcar
                    (lambda (v) (ical:maybe-quote-param-value v must-quote))
                    printed))
           (val-str (or (ical:ast-node-meta-get :original-value node)
                        (string-join quoted list-sep)
                        quoted)))

      (unless (and (stringp val-str) (not (equal val-str "")))
        (ical:signal-print-error "Unable to print parameter value" :node node))

      (format ";%s=%s" name-str val-str))))