summaryrefslogtreecommitdiff
path: root/admin
diff options
context:
space:
mode:
authorStefan Kangas <stefankangas@gmail.com>2022-09-16 19:33:02 +0200
committerStefan Kangas <stefankangas@gmail.com>2022-09-16 19:34:46 +0200
commitbcc84ac7feccf285811d3bc3254fa10062c9334c (patch)
treea54cffb8aae39b879889edfffcf6b10ad4871332 /admin
parent5d227ae83e57eb5ef2144e3af3e3431d26d77bc1 (diff)
downloademacs-bcc84ac7feccf285811d3bc3254fa10062c9334c.tar.gz
Add version headlines to HTML NEWS export
This allows linking to, e.g. "NEWS.28.html#28.1" to go directly to those release notes. * admin/admin.el (admin--org-export-headers-format) (make-news-html-file): Add XX.Y version headlines with an HTML anchor.
Diffstat (limited to 'admin')
-rw-r--r--admin/admin.el49
1 files changed, 39 insertions, 10 deletions
diff --git a/admin/admin.el b/admin/admin.el
index 60b043a3516..14f0f80188b 100644
--- a/admin/admin.el
+++ b/admin/admin.el
@@ -773,7 +773,7 @@ Optional argument TYPE is type of output (nil means all)."
(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
@@ -851,12 +851,13 @@ $Date: %s $
(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))
@@ -931,6 +932,34 @@ $Date: %s $
(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\">&nbsp;</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
@@ -942,12 +971,12 @@ $Date: %s $
(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))))
;; Stuff to check new `defcustom's got :version tags.