GNU bug report logs -
#70907
[PATCH] Render using Haunt; per dthompson's recommendation.
Previous Next
To reply to this bug, email your comments to 70907 AT debbugs.gnu.org.
Toggle the display of automated, internal messages from the tracker.
Report forwarded
to
bug-mumi <at> gnu.org
:
bug#70907
; Package
mumi
.
(Mon, 13 May 2024 04:42:01 GMT)
Full text and
rfc822 format available.
Acknowledgement sent
to
Felix Lechner <felix.lechner <at> lease-up.com>
:
New bug report received and forwarded. Copy sent to
bug-mumi <at> gnu.org
.
(Mon, 13 May 2024 04:42:02 GMT)
Full text and
rfc822 format available.
Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
Per a conversation with David on IRC, it's better to serve UTF-8
directly instead of transcoding to HTML entities. The new code in
Haunt, which David authored and from where the previous code came,
does just that.
Please add 'haunt' as an "input" to the Mumi package definition in
Guix after accepting this commit.
A preview of this code is live at patchwise.org.
---
Makefile.am | 1 -
mumi/web/render.scm | 2 +-
mumi/web/sxml.scm | 370 --------------------------------------------
3 files changed, 1 insertion(+), 372 deletions(-)
delete mode 100644 mumi/web/sxml.scm
diff --git a/Makefile.am b/Makefile.am
index 3e57e63..ae279df 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -40,7 +40,6 @@ SOURCES = \
mumi/web/server.scm \
mumi/web/render.scm \
mumi/web/controller.scm \
- mumi/web/sxml.scm \
mumi/web/util.scm \
mumi/web/graphql.scm \
mumi/web/view/html.scm \
diff --git a/mumi/web/render.scm b/mumi/web/render.scm
index ad3ae0e..231e892 100644
--- a/mumi/web/render.scm
+++ b/mumi/web/render.scm
@@ -33,9 +33,9 @@
#:use-module (web response)
#:use-module (web uri)
#:use-module (webutils multipart)
+ #:use-module (haunt html)
#:use-module (json)
#:use-module (mumi config)
- #:use-module (mumi web sxml)
#:use-module (mumi web util)
#:export (render-static-asset
render-html
diff --git a/mumi/web/sxml.scm b/mumi/web/sxml.scm
deleted file mode 100644
index a3d1056..0000000
--- a/mumi/web/sxml.scm
+++ /dev/null
@@ -1,370 +0,0 @@
-;;; mumi -- Mediocre, uh, mail interface
-;;; Copyright © 2016, 2017 Ricardo Wurmus <rekado <at> elephly.net>
-;;; Copyright © 2015 David Thompson <davet <at> gnu.org>
-;;;
-;;; This program is free software: you can redistribute it and/or
-;;; modify it under the terms of the GNU Affero General Public License
-;;; as published by the Free Software Foundation, either version 3 of
-;;; the License, or (at your option) any later version.
-;;;
-;;; This program is distributed in the hope that it will be useful,
-;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-;;; Affero General Public License for more details.
-;;;
-;;; You should have received a copy of the GNU Affero General Public
-;;; License along with this program. If not, see
-;;; <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-;;
-;; SXML to HTML conversion.
-;;
-;;; Code:
-
-(define-module (mumi web sxml)
- #:use-module (sxml simple)
- #:use-module (srfi srfi-26)
- #:use-module (ice-9 match)
- #:use-module (ice-9 format)
- #:use-module (ice-9 hash-table)
- #:export (sxml->html))
-
-(define %self-closing-tags
- '(area
- base
- br
- col
- command
- embed
- hr
- img
- input
- keygen
- link
- meta
- param
- source
- track
- wbr))
-
-(define (self-closing-tag? tag)
- "Return #t if TAG is self-closing."
- (pair? (memq tag %self-closing-tags)))
-
-(define %escape-chars
- (alist->hash-table
- '((#\" . "quot")
- (#\& . "amp")
- (#\' . "apos")
- (#\< . "lt")
- (#\> . "gt")
- (#\¡ . "iexcl")
- (#\¢ . "cent")
- (#\£ . "pound")
- (#\¤ . "curren")
- (#\¥ . "yen")
- (#\¦ . "brvbar")
- (#\§ . "sect")
- (#\¨ . "uml")
- (#\© . "copy")
- (#\ª . "ordf")
- (#\« . "laquo")
- (#\¬ . "not")
- (#\® . "reg")
- (#\¯ . "macr")
- (#\° . "deg")
- (#\± . "plusmn")
- (#\² . "sup2")
- (#\³ . "sup3")
- (#\´ . "acute")
- (#\µ . "micro")
- (#\¶ . "para")
- (#\· . "middot")
- (#\¸ . "cedil")
- (#\¹ . "sup1")
- (#\º . "ordm")
- (#\» . "raquo")
- (#\¼ . "frac14")
- (#\½ . "frac12")
- (#\¾ . "frac34")
- (#\¿ . "iquest")
- (#\À . "Agrave")
- (#\Á . "Aacute")
- (#\Â . "Acirc")
- (#\Ã . "Atilde")
- (#\Ä . "Auml")
- (#\Å . "Aring")
- (#\Æ . "AElig")
- (#\Ç . "Ccedil")
- (#\È . "Egrave")
- (#\É . "Eacute")
- (#\Ê . "Ecirc")
- (#\Ë . "Euml")
- (#\Ì . "Igrave")
- (#\Í . "Iacute")
- (#\Î . "Icirc")
- (#\Ï . "Iuml")
- (#\Ð . "ETH")
- (#\Ñ . "Ntilde")
- (#\Ò . "Ograve")
- (#\Ó . "Oacute")
- (#\Ô . "Ocirc")
- (#\Õ . "Otilde")
- (#\Ö . "Ouml")
- (#\× . "times")
- (#\Ø . "Oslash")
- (#\Ù . "Ugrave")
- (#\Ú . "Uacute")
- (#\Û . "Ucirc")
- (#\Ü . "Uuml")
- (#\Ý . "Yacute")
- (#\Þ . "THORN")
- (#\ß . "szlig")
- (#\à . "agrave")
- (#\á . "aacute")
- (#\â . "acirc")
- (#\ã . "atilde")
- (#\ä . "auml")
- (#\å . "aring")
- (#\æ . "aelig")
- (#\ç . "ccedil")
- (#\è . "egrave")
- (#\é . "eacute")
- (#\ê . "ecirc")
- (#\ë . "euml")
- (#\ì . "igrave")
- (#\í . "iacute")
- (#\î . "icirc")
- (#\ï . "iuml")
- (#\ð . "eth")
- (#\ñ . "ntilde")
- (#\ò . "ograve")
- (#\ó . "oacute")
- (#\ô . "ocirc")
- (#\õ . "otilde")
- (#\ö . "ouml")
- (#\÷ . "divide")
- (#\ø . "oslash")
- (#\ù . "ugrave")
- (#\ú . "uacute")
- (#\û . "ucirc")
- (#\ü . "uuml")
- (#\ý . "yacute")
- (#\þ . "thorn")
- (#\ÿ . "yuml")
- (#\Œ . "OElig")
- (#\œ . "oelig")
- (#\Š . "Scaron")
- (#\š . "scaron")
- (#\Ÿ . "Yuml")
- (#\ƒ . "fnof")
- (#\ˆ . "circ")
- (#\˜ . "tilde")
- (#\Α . "Alpha")
- (#\Β . "Beta")
- (#\Γ . "Gamma")
- (#\Δ . "Delta")
- (#\Ε . "Epsilon")
- (#\Ζ . "Zeta")
- (#\Η . "Eta")
- (#\Θ . "Theta")
- (#\Ι . "Iota")
- (#\Κ . "Kappa")
- (#\Λ . "Lambda")
- (#\Μ . "Mu")
- (#\Ν . "Nu")
- (#\Ξ . "Xi")
- (#\Ο . "Omicron")
- (#\Π . "Pi")
- (#\Ρ . "Rho")
- (#\Σ . "Sigma")
- (#\Τ . "Tau")
- (#\Υ . "Upsilon")
- (#\Φ . "Phi")
- (#\Χ . "Chi")
- (#\Ψ . "Psi")
- (#\Ω . "Omega")
- (#\α . "alpha")
- (#\β . "beta")
- (#\γ . "gamma")
- (#\δ . "delta")
- (#\ε . "epsilon")
- (#\ζ . "zeta")
- (#\η . "eta")
- (#\θ . "theta")
- (#\ι . "iota")
- (#\κ . "kappa")
- (#\λ . "lambda")
- (#\μ . "mu")
- (#\ν . "nu")
- (#\ξ . "xi")
- (#\ο . "omicron")
- (#\π . "pi")
- (#\ρ . "rho")
- (#\ς . "sigmaf")
- (#\σ . "sigma")
- (#\τ . "tau")
- (#\υ . "upsilon")
- (#\φ . "phi")
- (#\χ . "chi")
- (#\ψ . "psi")
- (#\ω . "omega")
- (#\ϑ . "thetasym")
- (#\ϒ . "upsih")
- (#\ϖ . "piv")
- (#\ . "ensp")
- (#\ . "emsp")
- (#\ . "thinsp")
- (#\– . "ndash")
- (#\— . "mdash")
- (#\‘ . "lsquo")
- (#\’ . "rsquo")
- (#\‚ . "sbquo")
- (#\“ . "ldquo")
- (#\” . "rdquo")
- (#\„ . "bdquo")
- (#\† . "dagger")
- (#\‡ . "Dagger")
- (#\• . "bull")
- (#\… . "hellip")
- (#\‰ . "permil")
- (#\′ . "prime")
- (#\″ . "Prime")
- (#\‹ . "lsaquo")
- (#\› . "rsaquo")
- (#\‾ . "oline")
- (#\⁄ . "frasl")
- (#\€ . "euro")
- (#\ℑ . "image")
- (#\℘ . "weierp")
- (#\ℜ . "real")
- (#\™ . "trade")
- (#\ℵ . "alefsym")
- (#\← . "larr")
- (#\↑ . "uarr")
- (#\→ . "rarr")
- (#\↓ . "darr")
- (#\↔ . "harr")
- (#\↵ . "crarr")
- (#\⇐ . "lArr")
- (#\⇑ . "uArr")
- (#\⇒ . "rArr")
- (#\⇓ . "dArr")
- (#\⇔ . "hArr")
- (#\∀ . "forall")
- (#\∂ . "part")
- (#\∃ . "exist")
- (#\∅ . "empty")
- (#\∇ . "nabla")
- (#\∈ . "isin")
- (#\∉ . "notin")
- (#\∋ . "ni")
- (#\∏ . "prod")
- (#\∑ . "sum")
- (#\− . "minus")
- (#\∗ . "lowast")
- (#\√ . "radic")
- (#\∝ . "prop")
- (#\∞ . "infin")
- (#\∠ . "ang")
- (#\∧ . "and")
- (#\∨ . "or")
- (#\∩ . "cap")
- (#\∪ . "cup")
- (#\∫ . "int")
- (#\∴ . "there4")
- (#\∼ . "sim")
- (#\≅ . "cong")
- (#\≈ . "asymp")
- (#\≠ . "ne")
- (#\≡ . "equiv")
- (#\≤ . "le")
- (#\≥ . "ge")
- (#\⊂ . "sub")
- (#\⊃ . "sup")
- (#\⊄ . "nsub")
- (#\⊆ . "sube")
- (#\⊇ . "supe")
- (#\⊕ . "oplus")
- (#\⊗ . "otimes")
- (#\⊥ . "perp")
- (#\⋅ . "sdot")
- (#\⋮ . "vellip")
- (#\⌈ . "lceil")
- (#\⌉ . "rceil")
- (#\⌊ . "lfloor")
- (#\⌋ . "rfloor")
- (#\〈 . "lang")
- (#\〉 . "rang")
- (#\◊ . "loz")
- (#\♠ . "spades")
- (#\♣ . "clubs")
- (#\♥ . "hearts")
- (#\♦ . "diams"))))
-
-(define (string->escaped-html s port)
- "Write the HTML escaped form of S to PORT."
- (define (escape c)
- (let ((escaped (hash-ref %escape-chars c)))
- (if escaped
- (format port "&~a;" escaped)
- (display c port))))
- (string-for-each escape s))
-
-(define (object->escaped-html obj port)
- "Write the HTML escaped form of OBJ to PORT."
- (string->escaped-html
- (call-with-output-string (cut display obj <>))
- port))
-
-(define (attribute-value->html value port)
- "Write the HTML escaped form of VALUE to PORT."
- (if (string? value)
- (string->escaped-html value port)
- (object->escaped-html value port)))
-
-(define (attribute->html attr value port)
- "Write ATTR and VALUE to PORT."
- (format port "~a=\"" attr)
- (attribute-value->html value port)
- (display #\" port))
-
-(define (element->html tag attrs body port)
- "Write the HTML TAG to PORT, where TAG has the attributes in the
-list ATTRS and the child nodes in BODY."
- (format port "<~a" tag)
- (for-each (match-lambda
- ((attr value)
- (display #\space port)
- (attribute->html attr value port)))
- attrs)
- (if (and (null? body) (self-closing-tag? tag))
- (display " />" port)
- (begin
- (display #\> port)
- (for-each (cut sxml->html <> port) body)
- (format port "</~a>" tag))))
-
-(define (doctype->html doctype port)
- (format port "<!DOCTYPE ~a>" doctype))
-
-(define* (sxml->html tree #:optional (port (current-output-port)))
- "Write the serialized HTML form of TREE to PORT."
- (match tree
- (() *unspecified*)
- (('doctype type)
- (doctype->html type port))
- ;; Unescaped, raw HTML output
- (('raw html)
- (display html port))
- (((? symbol? tag) ('@ attrs ...) body ...)
- (element->html tag attrs body port))
- (((? symbol? tag) body ...)
- (element->html tag '() body port))
- ((nodes ...)
- (for-each (cut sxml->html <> port) nodes))
- ((? string? text)
- (string->escaped-html text port))
- ;; Render arbitrary Scheme objects, too.
- (obj (object->escaped-html obj port))))
base-commit: 99416ed5c7d950eaf54d52023a2efd975bccac92
--
2.41.0
Information forwarded
to
bug-mumi <at> gnu.org
:
bug#70907
; Package
mumi
.
(Mon, 13 May 2024 10:10:02 GMT)
Full text and
rfc822 format available.
Message #8 received at 70907 <at> debbugs.gnu.org (full text, mbox):
Hi Felix,
> Per a conversation with David on IRC, it's better to serve UTF-8
> directly instead of transcoding to HTML entities.
I agree. But I don't want mumi to depend on haunt, a static site
generator. It feels like too large of a dependency. Could we achieve the
same effect using sxml->html from guile-lib? If not, could we patch
guile-lib to that effect?
Thanks,
Arun
Information forwarded
to
bug-mumi <at> gnu.org
:
bug#70907
; Package
mumi
.
(Mon, 13 May 2024 10:49:02 GMT)
Full text and
rfc822 format available.
Message #11 received at 70907 <at> debbugs.gnu.org (full text, mbox):
Hi,
On Mon, May 13, 2024 at 6:09 AM Arun Isaac <arunisaac <at> systemreboot.net> wrote:
>
>
> Hi Felix,
>
> > Per a conversation with David on IRC, it's better to serve UTF-8
> > directly instead of transcoding to HTML entities.
>
> I agree. But I don't want mumi to depend on haunt, a static site
> generator. It feels like too large of a dependency. Could we achieve the
> same effect using sxml->html from guile-lib? If not, could we patch
> guile-lib to that effect?
Feel free to just snarf the relevant code from haunt if it's useful to
you. No need to add a hard dependency.
- Dave
Information forwarded
to
bug-mumi <at> gnu.org
:
bug#70907
; Package
mumi
.
(Tue, 14 May 2024 13:30:02 GMT)
Full text and
rfc822 format available.
Message #14 received at 70907 <at> debbugs.gnu.org (full text, mbox):
Hi Arun,
On Mon, May 13 2024, Arun Isaac wrote:
> I don't want mumi to depend on haunt, a static site generator.
Well, Mumi does, and has. Pulling the code from Haunt is the honest and
right thing to do. What does 'want' have to do with it?
> It feels like too large of a dependency.
I don't think it has much bearing. Which other packages consume Mumi?
The effect in the dependency graphs is almost zero.
> Could we achieve the same effect using sxml->html from guile-lib? If
> not, could we patch guile-lib to that effect?
That's an appealing idea---and maybe David could shed some light on the
need to reimplement sxml->html---but it should not stand in the way of
fixing things.
It could be something to consider for the future. If David were to
contribute the routine to guile-lib, it would disappear from Haunt.
That would cause us to inquire where it went and then switch to
guile-lib as a prerequisite instead.
On Mon, May 13 2024, David Thompson wrote:
> Feel free to just snarf the relevant code from haunt
While your offer is generous, it would be an error. Let's learn from
the past: That decision was made at an earlier point in time. By
failing to keep up, it caused the need for this patch.
Kind regards
Felix
Information forwarded
to
bug-mumi <at> gnu.org
:
bug#70907
; Package
mumi
.
(Tue, 14 May 2024 19:03:02 GMT)
Full text and
rfc822 format available.
Message #17 received at 70907 <at> debbugs.gnu.org (full text, mbox):
Hi Arun,
On Mon, May 13 2024, Arun Isaac wrote:
> I don't want mumi to depend on haunt
On that note, does the recent addition of 'mumi www' in commit a98099be,
which now requires xdg-utils, pull in several X11 client libraries like
libx11, libxau and libxcb; as well as python (via libxslt), ncurses (via
gettext-minimal), and xz?
Is that more substantial than depending on haunt (and texinfo)?
Kind regards
Felix
Added indication that bug 70907 blocks69381
Request was from
Felix Lechner <felix.lechner <at> lease-up.com>
to
control <at> debbugs.gnu.org
.
(Tue, 14 May 2024 23:16:02 GMT)
Full text and
rfc822 format available.
Information forwarded
to
bug-mumi <at> gnu.org
:
bug#70907
; Package
mumi
.
(Sun, 19 May 2024 02:33:01 GMT)
Full text and
rfc822 format available.
Message #22 received at 70907 <at> debbugs.gnu.org (full text, mbox):
Hi Felix,
Haunt is an end-user application, not a library. It is not a good idea
to depend on end-user applications as though they were libraries. It is
not so much a question of how big those end-user applications are,
though sometimes that may be a consideration. Imagine getting mumi to
depend on inkscape or something! Depending on end-user applications is
the last resort when all other options have been exhausted.
To describe just one problem: end-user applications such as Haunt may
bring in other guile packages that we don't need. Since guile packages
need all of these to be propagated inputs, this can cause trouble with
package collisions in profiles, or maybe even circular
dependencies. Now, Haunt doesn't pull in that many dependencies, and
it's probably fine for now. But, depending on end-user applications is
simply not good practice.
Ultimately, mumi has no real need to depend on Haunt. It is so much
easier to simply copy the relevant html.scm file from Haunt into mumi
like David suggested. Or, better still, get it into the sxml->html of
guile-lib.
About xdg-utils: I see your point about xdg-utils being a large
dependency. I completely agree. However, xdg-open is well established as
the standard way to open the user's preferred web browser and email
client. I am not fond of it, but it is what it is. If there is a way to
do this without xdg-utils, I am all ears and happy to switch.
Regards,
Arun
Information forwarded
to
bug-mumi <at> gnu.org
:
bug#70907
; Package
mumi
.
(Sun, 09 Mar 2025 06:14:01 GMT)
Full text and
rfc822 format available.
Message #25 received at 70907 <at> debbugs.gnu.org (full text, mbox):
Hi Felix,
"Thompson, David" <dthompson2 <at> worcester.edu> writes:
> Hi,
>
> On Mon, May 13, 2024 at 6:09 AM Arun Isaac <arunisaac <at> systemreboot.net> wrote:
>>
>>
>> Hi Felix,
>>
>> > Per a conversation with David on IRC, it's better to serve UTF-8
>> > directly instead of transcoding to HTML entities.
>>
>> I agree. But I don't want mumi to depend on haunt, a static site
>> generator. It feels like too large of a dependency. Could we achieve the
>> same effect using sxml->html from guile-lib? If not, could we patch
>> guile-lib to that effect?
>
> Feel free to just snarf the relevant code from haunt if it's useful to
> you. No need to add a hard dependency.
Would you mind to do this and submit a v2? It's suboptimal, but you
could add a TODO mentioning that this fragment of Haunt should be
re-homed somewhere suitable such as the guile-lib library.
--
Thanks,
Maxim
This bug report was last modified 152 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.