(defvar admin--org-export-headers-format "\
#+title: GNU Emacs %s NEWS -- history of user-visible changes
#+author:
-#+options: author:nil creator:nil toc:1 num:2 *:nil \\n:t ^:nil tex:nil
+#+options: author:nil creator:nil toc:2 num:3 *:nil \\n:t ^:nil tex:nil
#+language: en
#+HTML_LINK_HOME: /software/emacs
#+HTML_LINK_UP: /software/emacs
(unless (file-exists-p (expand-file-name "src/emacs.c" root))
(user-error "%s doesn't seem to be the root of an Emacs source tree" root))
(admin--require-external-package 'htmlize)
- (let* ((orig (expand-file-name "etc/NEWS" root))
- (new (expand-file-name (format "etc/NEWS.%s.org" version) root))
- (html-file (format "%s.html" (file-name-base new)))
+ (let* ((newsfile (expand-file-name "etc/NEWS" root))
+ (orgfile (expand-file-name (format "etc/NEWS.%s.org" version) root))
+ (html (format "%s.html" (file-name-base orgfile)))
(copyright-years (format-time-string "%Y")))
- (copy-file orig new t)
- (find-file new)
+ (delete-file orgfile)
+ (copy-file newsfile orgfile t)
+ (find-file orgfile)
;; Find the copyright range.
(goto-char (point-min))
(org-mode)
(save-buffer)
+ ;; Make everything one level lower.
+ (goto-char (point-min))
+ (while (re-search-forward (rx bol (group (+ "*")) " ") nil t)
+ (replace-match "*\\1" nil nil nil 1))
+
+ ;; Insert anchors for different versions.
+ (goto-char (point-min))
+ (let (last-major last-minor)
+ (while (re-search-forward (rx bol "** " (+ (not "\n")) "in Emacs "
+ (group digit digit) "." (group digit)
+ eol)
+ nil t)
+ (unless (and (equal (match-string 1) last-major)
+ (equal (match-string 2) last-minor))
+ (setq last-major (match-string 1))
+ (setq last-minor (match-string 2))
+ (forward-line -1)
+ (insert (format
+ (concat
+ ;; Add anchor to allow linking to
+ ;; e.g. "NEWS.28.html#28.1".
+ "#+HTML: <p id=\"%s.%s\"> </p>\n"
+ "* Changes in Emacs %s.%s\n")
+ last-major last-minor
+ last-major last-minor)))))
+
+ (save-buffer)
+
;; Make the HTML export.
(let* ((org-html-postamble
(format admin--org-html-postamble
(org-html-export-as-html))
;; Write HTML to file.
- (let ((new (expand-file-name html-file (expand-file-name "etc" root))))
- (write-file new)
+ (let ((html (expand-file-name html (expand-file-name "etc" root))))
+ (write-file html)
(unless noninteractive
- (find-file new)
+ (find-file html)
(html-mode))
- (message "Successfully exported HTML to %s" new))))
+ (message "Successfully exported HTML to %s" html))))
\f
;; Stuff to check new `defcustom's got :version tags.