(defvar emacs-wiki-boxes-queued-boxes nil
"A list of boxes to create.")
(defun emacs-wiki-boxes-markup (string)
"Markup string using EmacsWiki markup, and return the results."
(let ((project emacs-wiki-current-project))
(with-temp-buffer
(let* ((emacs-wiki-current-project project)
(emacs-wiki-publishing-header "<--!STARTHERE!-->")
(emacs-wiki-publishing-footer "<--!ENDHERE!-->"))
(insert string)
(goto-char (point-min))
(emacs-wiki-replace-markup "BOX!")
(let ((beg (point-min))
(end (point-max)))
(goto-char beg)
(search-forward emacs-wiki-publishing-header)
(setq beg (point))
(search-forward emacs-wiki-publishing-footer)
(setq end (- (point) (length emacs-wiki-publishing-footer)))
(replace-regexp-in-string "%23" "#" (buffer-substring beg end)))))))
(defun emacs-wiki-boxes-create-box (beg end &optional highlightp)
"Create a box."
(unless highlightp
(add-to-list 'emacs-wiki-boxes-queued-boxes (buffer-substring beg end) t)
(delete-region beg end)))
(defun emacs-wiki-boxes-render-boxes ()
"Insert DIV-tags for all boxes on the page."
(let ((result ""))
(while emacs-wiki-boxes-queued-boxes
(setq result (concat result
"<div class=\"soapbox\">\n"
(emacs-wiki-boxes-markup (car emacs-wiki-boxes-queued-boxes))
"\n</div>\n<br>\n"))
(setq emacs-wiki-boxes-queued-boxes (cdr emacs-wiki-boxes-queued-boxes)))
result))
(add-to-list 'emacs-wiki-markup-tags
'("box" t nil nil emacs-wiki-boxes-create-box))
(provide 'emacs-wiki-boxes)