[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nongnu] elpa/devhelp 01dc4222bf 10/13: Generate SXML instead of HTML wh
From: |
ELPA Syncer |
Subject: |
[nongnu] elpa/devhelp 01dc4222bf 10/13: Generate SXML instead of HTML while render special pages |
Date: |
Sun, 27 Nov 2022 15:59:12 -0500 (EST) |
branch: elpa/devhelp
commit 01dc4222bfce8e454b20d1752692cbe44084291c
Author: Akib Azmain Turja <akib@disroot.org>
Commit: Akib Azmain Turja <akib@disroot.org>
Generate SXML instead of HTML while render special pages
---
devhelp.el | 241 ++++++++++++++++++++++++++++++++++---------------------------
1 file changed, 133 insertions(+), 108 deletions(-)
diff --git a/devhelp.el b/devhelp.el
index aa7b89959f..f523c408ab 100644
--- a/devhelp.el
+++ b/devhelp.el
@@ -123,7 +123,7 @@ to it, CHAPTER is a list of form (SECTION...) and KEYWORDS
is a list
of form (KEYWORD...). SECTION is a list of form (NAME PATH
SUB-SECTIONS...), where NAME is the name of the section, PATH is the
absolute path to the file and SUB-SECTION is a list of form
-(SECTION...). KEYWORD is a list of (NAME TYPE PATH), where NAME the
+\(SECTION...). KEYWORD is a list of (NAME TYPE PATH), where NAME the
keyword name, TYPE is the type of keyword and PATH is the absolute
path to it."
(unless (fboundp 'libxml-parse-html-region)
@@ -228,58 +228,62 @@ If a single file was opened, only show that book's table
of contents."
See `devhelp-toc' for more details."
(let ((inhibit-read-only t))
- (erase-buffer)
- (insert
- "<html><head><title>Table of contents</title></head><body><ul>"
- (let ((book-tocs
- (mapcar
- (lambda (book)
- (cl-labels ((section-to-html (section)
- (concat
- "<li>"
- (format
- "<a href=%S>%s</a>"
- (devhelp--file-to-url (nth 1 section))
- (nth 0 section))
- (when (nth 2 section)
- (format
- "<ul>%s</ul>"
- (mapconcat #'section-to-html
- (nth 2 section) "")))
- "</li>")))
- (cons
- (nth 2 book)
- (concat
- (format
- "<b><a href=%S>%s</a></b>"
- (devhelp--file-to-url (nth 3 book)) (nth 0 book))
- (when (nth 4 book)
- (format
- "<ul>%s</ul>"
- (mapconcat #'section-to-html
- (nth 4 book) "")))))))
- devhelp--books)))
- (if (not devhelp-toc-group-books-by-language)
- (mapconcat (lambda (toc) (format "<li>%s</li>" (cdr toc)))
- book-tocs "")
- (let ((groups nil))
- (dolist (toc book-tocs)
- (if-let ((pair (assoc (car toc) groups)))
- (setf (cdr pair) (nconc (cdr pair) (list (cdr toc))))
- (push (cons (car toc) (list (cdr toc))) groups)))
- (setq groups (sort groups (lambda (a b)
- (string< (car a) (car b)))))
- (mapconcat
- (lambda (group)
- (when (cdr group)
- (format
- "<li><b><u>Language: %s</u></b><ul>%s</ul></li>"
- (capitalize (car group))
- (mapconcat (lambda (toc) (format "<li>%s</li>" toc))
- (cdr group) ""))))
- groups ""))))
- "</ul></body></html>")
- (devhelp--render-html)
+ (devhelp--render-html-dom
+ `( html nil
+ ( head nil
+ (title nil "Table of Contents"))
+ ( body nil
+ ( ul nil
+ ,@(let ((book-tocs
+ (mapcar
+ (lambda (book)
+ (cl-labels
+ ((section-to-html (section)
+ `( li nil
+ ( a ((href . ,(devhelp--file-to-url
+ (nth 1 section))))
+ ,(nth 0 section))
+ ,@(when (nth 2 section)
+ `(( ul nil
+ ,@(mapcar
+ #'section-to-html
+ (nth 2 section))))))))
+ (cons
+ (nth 2 book)
+ `(( b nil
+ ( a ((href . ,(devhelp--file-to-url
+ (nth 3 book))))
+ ,(nth 0 book)))
+ ,@(when (nth 4 book)
+ `(( ul nil
+ ,@(mapcar #'section-to-html
+ (nth 4 book)))))))))
+ devhelp--books)))
+ (if (not devhelp-toc-group-books-by-language)
+ (mapcar (lambda (toc) `(li nil ,@(cdr toc)))
+ book-tocs)
+ (let ((groups nil))
+ (dolist (toc book-tocs)
+ (if-let ((pair (assoc (car toc) groups)))
+ (setf (cdr pair)
+ (nconc (cdr pair) (list (cdr toc))))
+ (push (cons (car toc) (list (cdr toc)))
+ groups)))
+ (setq groups
+ (sort groups (lambda (a b)
+ (string< (car a) (car b)))))
+ (mapcar
+ (lambda (group)
+ `( li nil
+ ( b nil
+ ( u nil
+ ,(format "Language: %s"
+ (capitalize (car group)))))
+ ( ul nil
+ ,@(mapcar (lambda (toc) `(li nil ,@toc))
+ (cdr group)))))
+ (seq-remove (lambda (g) (null (cdr g)))
+ groups)))))))))
(goto-char (point-min))))
(defun devhelp-index ()
@@ -309,43 +313,54 @@ If a single file was opened, only show that book's index."
See `devhelp-index' for more details."
(let ((inhibit-read-only t))
- (erase-buffer)
- (insert
- "<html><head><title>Index</title></head><body><ul>"
- (let ((keywords (mapcan (lambda (book)
- (copy-sequence (nth 5 book)))
- devhelp--books)))
- (sort keywords (lambda (a b) (string< (car a) (car b))))
- (if (not devhelp-index-group-keywords-by-type)
- (mapconcat (lambda (keyword)
- (format "<li>%s <a href=%S>%s</a></li>"
- (capitalize (nth 1 keyword))
- (devhelp--file-to-url (nth 2 keyword))
- (nth 0 keyword)))
- keywords "")
- (let ((groups nil))
- (dolist (keyword keywords)
- (let ((entry
- (format "<a href=%S>%s</a>"
- (devhelp--file-to-url (nth 2 keyword))
+ (devhelp--render-html-dom
+ `( html nil
+ ( head nil
+ (title nil "Index"))
+ ( body nil
+ ( ul nil
+ ,@(let ((keywords (mapcan (lambda (book)
+ (copy-sequence (nth 5 book)))
+ devhelp--books)))
+ (sort keywords (lambda (a b)
+ (string< (car a) (car b))))
+ (if (not devhelp-index-group-keywords-by-type)
+ (mapcar
+ (lambda (keyword)
+ `( li nil
+ ,(format "%s " (capitalize (nth 1 keyword)))
+ ( a ((href . ,(devhelp--file-to-url
+ (nth 2 keyword))))
(nth 0 keyword))))
- (if-let ((pair (assoc (nth 1 keyword) groups)))
- (setf (cdr pair) (nconc (cdr pair) (list entry)))
- (push (cons (nth 1 keyword) (list entry)) groups))))
- (setq groups (sort groups (lambda (a b)
- (string< (car a) (car b)))))
- (mapconcat
- (lambda (group)
- (when (cdr group)
- (format
- "<li><b><u>Type: %s</u></b><ul>%s</ul></li>"
- (capitalize (car group))
- (mapconcat (lambda (entry)
- (format "<li>%s</li>" entry))
- (cdr group) ""))))
- groups ""))))
- "</ul></body></html>")
- (devhelp--render-html)
+ keywords)
+ (let ((groups nil))
+ (dolist (keyword keywords)
+ (let ((entry
+ `( a ((href . ,(devhelp--file-to-url
+ (nth 2 keyword))))
+ (nth 0 keyword))))
+ (if-let ((pair
+ (assoc (nth 1 keyword) groups)))
+ (setf (cdr pair) (nconc (cdr pair)
+ (list entry)))
+ (push (cons (nth 1 keyword) (list entry))
+ groups))))
+ (setq groups
+ (sort groups (lambda (a b)
+ (string< (car a) (car b)))))
+ (mapconcat
+ (lambda (group)
+ `( li nil
+ ( b nil
+ ( u nil
+ (format "Type: %s"
+ (capitalize (car group)))))
+ ( ul nil
+ ,@(mapcar (lambda (entry)
+ `( li nil ,entry))
+ (cdr group)))))
+ (seq-remove (lambda (g) (null (cdr g)))
+ groups)))))))))
(goto-char (point-min))))
(defun devhelp--set-title (title)
@@ -399,10 +414,11 @@ EVENT is a mouse event, if any."
(setf (nth 2 (nth 0 (cdr devhelp--history))) (point)))
(browse-url url))))
-(defun devhelp--render-html (&optional base)
- "Render HTML in current buffer.
+(defun devhelp--render-html-dom (dom &optional base)
+ "Render HTML DOM \"DOM\" in current buffer.
When BASE is given, use it to make relative URLs absolute."
+ (erase-buffer)
(let ((shr-map
(let ((map (make-sparse-keymap)))
(set-keymap-parent map shr-map)
@@ -420,13 +436,18 @@ When BASE is given, use it to make relative URLs
absolute."
(car (dom-children dom))))))
shr-external-rendering-functions))
(shr-use-fonts devhelp-use-variable-pitch-font)
- (shr-width devhelp-text-width)
- (dom (libxml-parse-html-region (point-min) (point-max))))
- (erase-buffer)
+ (shr-width devhelp-text-width))
(shr-insert-document
(if base `(base ((href . ,base)) (,dom)) dom))
(goto-char (point-min))))
+(defun devhelp--render-html (&optional base)
+ "Render HTML in current buffer.
+
+When BASE is given, use it to make relative URLs absolute."
+ (devhelp--render-html-dom
+ (libxml-parse-html-region (point-min) (point-max)) base))
+
(defun devhelp--render-html-file (file)
"Load and render HTML file FILE in current buffer."
(let ((inhibit-read-only t))
@@ -503,22 +524,26 @@ EVENT is a mouse event, if any."
(setf (nth 2 (nth (car devhelp--history) (cdr devhelp--history)))
(point))
(let ((inhibit-read-only t))
- (erase-buffer)
- (insert
- "<html><head><title>History of visited pages</title></head>"
- "<body><h1>History of visited pages</h1><ul>")
- (dolist (i (number-sequence
- 0 (1- (length (cdr devhelp--history)))))
- (insert (format
- "<li><a href=\"%i\">%s</a></li>" i
- (let ((title (car (nth i (cdr devhelp--history)))))
- (if (eq i (car devhelp--history))
- (format "<i>%s</i>" title)
- title)))))
- (insert "</ul></body></html>")
(push (list nil 'history (point-min))
(nthcdr (car devhelp--history) (cdr devhelp--history)))
- (devhelp--render-html)))
+ (devhelp--render-html-dom
+ `( html nil
+ ( head nil
+ (title nil "History of visited pages"))
+ ( body nil
+ (h1 nil "History of visited pages")
+ ( ul nil
+ ,@(mapcar
+ (lambda (i)
+ `( li nil
+ ( a ((href . ,(number-to-string i)))
+ ,(let ((title
+ (car (nth i (cdr devhelp--history)))))
+ (if (eq i (car devhelp--history))
+ `(i nil title)
+ title)))))
+ (number-sequence
+ 0 (1- (length (cdr devhelp--history)))))))))))
(defun devhelp--directory ()
"List all available Devhelp books."
- [nongnu] branch elpa/devhelp created (now 3a31a672f4), ELPA Syncer, 2022/11/27
- [nongnu] elpa/devhelp ac3c9e9563 03/13: Change the behavior of devhelp function to be a bit more like info, ELPA Syncer, 2022/11/27
- [nongnu] elpa/devhelp cb97d3d05d 05/13: Fix parent customization group, ELPA Syncer, 2022/11/27
- [nongnu] elpa/devhelp a694a5f1db 06/13: Show off with a GIF, ELPA Syncer, 2022/11/27
- [nongnu] elpa/devhelp 682dcb637f 08/13: Some cleanup and fix wrong-type-argument error, ELPA Syncer, 2022/11/27
- [nongnu] elpa/devhelp d0c781c865 09/13: Make lines less long than 75 characters, ELPA Syncer, 2022/11/27
- [nongnu] elpa/devhelp 01dc4222bf 10/13: Generate SXML instead of HTML while render special pages,
ELPA Syncer <=
- [nongnu] elpa/devhelp 54538cd01c 11/13: Add .dir-locals.el, ELPA Syncer, 2022/11/27
- [nongnu] elpa/devhelp 3a31a672f4 13/13: Add Guix-specific search directories by default, ELPA Syncer, 2022/11/27
- [nongnu] elpa/devhelp 66e23a6339 02/13: Don't allow to bookmark history page, ELPA Syncer, 2022/11/27
- [nongnu] elpa/devhelp 139715e6b1 04/13: Reuse existing buffers for bookmark jump, ELPA Syncer, 2022/11/27
- [nongnu] elpa/devhelp e8dfb03110 07/13: Fix file name extension of demo, ELPA Syncer, 2022/11/27
- [nongnu] elpa/devhelp f8d6422007 12/13: Add .elpaignore to ignore devhelp-demo.gif, ELPA Syncer, 2022/11/27
- [nongnu] elpa/devhelp 2e257e2d12 01/13: Add devhelp.el, README.org and COPYING, ELPA Syncer, 2022/11/27