emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

emacs-28 bcc84ac7fe 2/2: Add version headlines to HTML NEWS export


From: Stefan Kangas
Subject: emacs-28 bcc84ac7fe 2/2: Add version headlines to HTML NEWS export
Date: Fri, 16 Sep 2022 13:35:24 -0400 (EDT)

branch: emacs-28
commit bcc84ac7feccf285811d3bc3254fa10062c9334c
Author: Stefan Kangas <stefankangas@gmail.com>
Commit: Stefan Kangas <stefankangas@gmail.com>

    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.
---
 admin/admin.el | 49 +++++++++++++++++++++++++++++++++++++++----------
 1 file changed, 39 insertions(+), 10 deletions(-)

diff --git a/admin/admin.el b/admin/admin.el
index 60b043a351..14f0f80188 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.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]