[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] elpa-admin 1f5d7b4: * elpa-admin.el: Improve badge generation
From: |
Stefan Monnier |
Subject: |
[elpa] elpa-admin 1f5d7b4: * elpa-admin.el: Improve badge generation |
Date: |
Wed, 24 Nov 2021 17:53:04 -0500 (EST) |
branch: elpa-admin
commit 1f5d7b41336c28784d3fbd76583d654899758973
Author: Stefan Monnier <monnier@iro.umontreal.ca>
Commit: Stefan Monnier <monnier@iro.umontreal.ca>
* elpa-admin.el: Improve badge generation
(elpaa--string-width): Try and sanity check the output.
(elpaa--make-badge): HTML-quote the strings we insert.
---
elpa-admin.el | 32 ++++++++++++++++++++------------
1 file changed, 20 insertions(+), 12 deletions(-)
diff --git a/elpa-admin.el b/elpa-admin.el
index c3fde34..6f51db1 100644
--- a/elpa-admin.el
+++ b/elpa-admin.el
@@ -752,9 +752,15 @@ auxillary files unless TARBALL-ONLY is non-nil ."
"convert" "-debug" "annotate" "xc:" "-font" "DejaVu-Sans"
"-pointsize" "110" "-annotate" "0" str "null:")
(goto-char (point-min))
- (if (re-search-forward "Metrics:.*?width: \\([0-9]+\\)")
- (string-to-number (match-string 1))
- (error "Could not determine string width"))))
+ (if (not (re-search-forward "Metrics:.*?width: \\([0-9]+\\)"))
+ (error "Could not determine string width")
+ (let ((width (string-to-number (match-string 1))))
+ ;; This test aims to catch the case where the font is missing,
+ ;; but it seems it only works in some cases :-(
+ (if (and (> (string-width str) 0) (not (> width 0)))
+ (progn (message "convert:\n%s" (buffer-string))
+ (error "Could not determine string width"))
+ width)))))
(defun elpaa--make-badge (file left right)
"Make badge svg FILE with LEFT and RIGHT string."
@@ -776,14 +782,16 @@ auxillary files unless TARBALL-ONLY is non-nil ."
(with-temp-buffer
(insert
(replace-regexp-in-string
- "[ \t\n]+" " "
- (replace-regexp-in-string
- "{\\([^}]+\\)}"
- (lambda (str)
- (format "%s" (eval (read (match-string 1 str)) ctx)))
- (replace-regexp-in-string
- "'" "\""
- "<?xml version='1.0'?>
+ "{\\([^}]+\\)}"
+ (lambda (str)
+ (elpaa--html-quote
+ (format "%s" (eval (read (match-string 1 str)) ctx))))
+ (eval-when-compile
+ (replace-regexp-in-string
+ "[ \t\n]+" " "
+ (replace-regexp-in-string
+ "'" "\""
+ "<?xml version='1.0'?>
<svg xmlns='http://www.w3.org/2000/svg'
xmlns:xlink='http://www.w3.org/1999/xlink'
width='{width}'
@@ -829,7 +837,7 @@ auxillary files unless TARBALL-ONLY is non-nil ."
transform='scale(.1)'
fill='#fff' textLength='{rw}'>{right}</text>
</g>
-</svg>"))))
+</svg>")))))
(write-region (point-min) (point-max) file))))
(defun elpaa--make-one-package (pkg-spec &optional tarball-only)
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [elpa] elpa-admin 1f5d7b4: * elpa-admin.el: Improve badge generation,
Stefan Monnier <=