;;; -*-emacs-lisp-*-
+(defun skelrc-dribble (msg &rest args)
+ "Write MSG (a `format'-style string, with ARGS) to the debug buffer."
+ (let ((buffer (get-buffer "*skel-debug*")))
+ (and buffer
+ (with-current-buffer buffer
+ (goto-char (point-max))
+ (insert (apply #'format msg args) "\n")))))
+
(defun skelrc-strip-trailing-whitespace (string)
"Return STRING, but with trailing whitespace removed.
(let ((val (assq key alist)))
(and val (cdr val))))
+(defun skelrc-expand-text (text)
+ "Return the result of expanding TEXT in the current context.
+
+The context is extended with any new associations formed during
+the expansion."
+ (let* ((alist skel-alist)
+ (expanded (with-temp-buffer
+ (let ((skel-alist alist))
+ (insert text)
+ (goto-char (point-min))
+ (skelrc-dribble "before: alist = `%s'" skel-alist)
+ (skel-do-fill-in)
+ (setq alist skel-alist)
+ (buffer-string)))))
+ (setq skel-alist alist)
+ expanded))
+
(defun skelrc-prefix-lines (prefix lines)
"Return LINES, each with PREFIX prepended to the beginning.
(forward-line))
(buffer-string)))
+(defun skelrc-prefix-and-reflow (prefix text)
+ "Return LINES, reflowed to `fill-column', with PREFIX at the start."
+ (let ((expanded-prefix (skelrc-expand-text prefix))
+ (expanded-text (skelrc-expand-text text))
+ (col (string-to-number (skel-lookup 'fill-column))))
+ (with-temp-buffer
+ (let* ((fill-prefix expanded-prefix)
+ (paragraph-start (concat (skelrc-strip-trailing-whitespace
+ (regexp-quote expanded-prefix))
+ "[ \t\f]*$"))
+ (paragraph-separate paragraph-start)
+ (fill-column col))
+
+ (insert (skelrc-prefix-lines expanded-prefix expanded-text))
+
+ (goto-char (point-min))
+ (while (< (point) (point-max))
+ (fill-paragraph)
+ (forward-paragraph))
+
+ (buffer-string)))))
+
(defun skelrc-component ()
"Return a suitable a `This file is part of ...' line."
(if (assq 'full-title skel-alist)