From 49fc5fa02bf06ccc419a8ec26abe3dcdf61a57b0 Mon Sep 17 00:00:00 2001 From: Yuchen Pei Date: Mon, 10 Jul 2023 11:23:31 +1000 Subject: Fixing stacking of multiple fonts There may be italics in header and links, say --- wiki-engine.el | 10 ++++++++++ wiki-markup.el | 18 +++++++++++++++--- wiki-utils.el | 1 + 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/wiki-engine.el b/wiki-engine.el index da4dfb3..a201c72 100644 --- a/wiki-engine.el +++ b/wiki-engine.el @@ -89,5 +89,15 @@ The site name is passed as a symbol WIKI-SITE." (defun-wiki-fetchers) +(defun wiki-open-url (url) + "Open the wiki corresponding to URL. + +If URL points to html title, open the corresponding raw title. +If URL points to a raw title, open directly. +If URL points to a host, assume it is mediawiki try to open main page." + (interactive "sURL: ") + + ) + (provide 'wiki-engine) ;;; wiki-engine.el ends here diff --git a/wiki-markup.el b/wiki-markup.el index d9cc2c9..63bec0e 100644 --- a/wiki-markup.el +++ b/wiki-markup.el @@ -51,6 +51,7 @@ (defvar wiki-font-lock-keywords (list + ;; Headers (cons "^======.*======\\ *$" 'wiki-level-6) (cons "^=====.*=====\\ *$" 'wiki-level-5) (cons "^====.*====\\ *$" 'wiki-level-4) @@ -58,10 +59,9 @@ (cons "^==.*==\\ *$" 'wiki-level-2) (cons "^=.*=\\ *$" 'wiki-level-1) (cons "^----+\\ *$" 'wiki-hr-face) - (cons "'''''[^ \t\n].*?[^ \t\n]'''''" 'wiki-bold-italic) - (cons "'''[^ \t\n'].*?[^ \t\n']'''" 'wiki-bold) - (cons "''[^ \t\n'].*?[^ \t\n']''" 'wiki-italic) + (cons "^ .*$" 'wiki-pre-face) + '(wiki-do-emphasis-faces) '(wiki-activate-external-links) '(wiki-activate-internal-links) )) @@ -80,6 +80,17 @@ (length (match-string 2)) 6))) +;; Like `org-do-emphasis-faces' +(defun wiki-do-emphasis-faces (limit) + (while (re-search-forward "\\(''+\\)[^ \t\n].*?[^ \t\n']\\(''+\\)" limit t) + (let ((start (match-beginning 0)) + (end (match-end 0))) + (pcase (min (length (match-string 1)) (length (match-string 2))) + (2 (add-face-text-property start end 'wiki-italic)) + (3 (add-face-text-property start end 'wiki-bold)) + (_ (add-face-text-property start end 'wiki-bold-italic)) + )))) + ;; Like `org-activate-links' (defun wiki-activate-links (link-re limit) (save-excursion @@ -96,6 +107,7 @@ (make-text-button start end 'action 'wiki-follow-wikilink-action 'button-data `((title . ,title))) + (add-face-text-property start end 'org-link) (put-text-property visible-end end 'invisible t) (add-text-properties (1- visible-start) visible-start '(rear-nonsticky (invisible))) diff --git a/wiki-utils.el b/wiki-utils.el index 810e7ec..56e3e02 100644 --- a/wiki-utils.el +++ b/wiki-utils.el @@ -66,6 +66,7 @@ Then calls CALLBACK which is a closure taking no argument." (url-unhex-string url))))))) ;; TODO: add wikihow; generalise fandom +;; TODO: default engine to mediawiki (defvar wiki-sites '((local) (archwiki-en :base-url "https://wiki.archlinux.org/title/" -- cgit v1.2.3