diff options
| author | 2025-10-23 10:17:00 +0300 | |
|---|---|---|
| committer | 2025-10-23 10:32:36 +0300 | |
| commit | fec434a4e2d0ff65510581e461d87a945d25759a (patch) | |
| tree | 676891233e6121f8801f4751d3e2d1ca7ad4e09c /src/tg/user.lisp | |
| parent | Use alexandria's make-keyword & symbolicate (diff) | |
| download | ukkoclot-fec434a4e2d0ff65510581e461d87a945d25759a.tar.gz ukkoclot-fec434a4e2d0ff65510581e461d87a945d25759a.tar.xz ukkoclot-fec434a4e2d0ff65510581e461d87a945d25759a.zip | |
Use serapeum's -> & defsubst
Diffstat (limited to 'src/tg/user.lisp')
| -rw-r--r-- | src/tg/user.lisp | 37 |
1 files changed, 16 insertions, 21 deletions
diff --git a/src/tg/user.lisp b/src/tg/user.lisp index 0768d12..aefdeeb 100644 --- a/src/tg/user.lisp +++ b/src/tg/user.lisp | |||
| @@ -3,6 +3,8 @@ | |||
| 3 | (defpackage :ukkoclot/src/tg/user | 3 | (defpackage :ukkoclot/src/tg/user |
| 4 | (:documentation "User Telegram type") | 4 | (:documentation "User Telegram type") |
| 5 | (:use :c2cl :ukkoclot/src/tg/type-macros) | 5 | (:use :c2cl :ukkoclot/src/tg/type-macros) |
| 6 | (:import-from :serapeum :->) | ||
| 7 | (:import-from :ukkoclot/src/streams :with-format-like-stream) | ||
| 6 | (:import-from :ukkoclot/src/strings :escape-xml) | 8 | (:import-from :ukkoclot/src/strings :escape-xml) |
| 7 | (:export | 9 | (:export |
| 8 | #:user | 10 | #:user |
| @@ -39,26 +41,19 @@ | |||
| 39 | (supports-inline-queries boolean nil) | 41 | (supports-inline-queries boolean nil) |
| 40 | (can-connect-to-business boolean nil)) | 42 | (can-connect-to-business boolean nil)) |
| 41 | 43 | ||
| 42 | (defun user-format-name% (user out) | 44 | (-> user-format-name (user &optional (or stream boolean)) (or string null)) |
| 43 | "Format the USER's name in a nice way to stream OUT." | 45 | (defun user-format-name (user &optional out-spec) |
| 44 | (format out "<a href=\"tg://user?id=~A\"><i>" (user-id user)) | 46 | "Format the `user''s name in a nice way." |
| 45 | (escape-xml (user-first-name user) out) | 47 | (with-format-like-stream (out out-spec) |
| 46 | (when (user-last-name user) | 48 | (format out "<a href=\"tg://user?id=~A\"><i>" (user-id user)) |
| 47 | (write-char #\Space out) | 49 | (escape-xml (user-first-name user) out) |
| 48 | (escape-xml (user-last-name user) out)) | 50 | (when (user-last-name user) |
| 49 | (write-string "</i>" out) | 51 | (write-char #\Space out) |
| 52 | (escape-xml (user-last-name user) out)) | ||
| 53 | (write-string "</i>" out) | ||
| 50 | 54 | ||
| 51 | (when (user-username user) | 55 | (when (user-username user) |
| 52 | (write-string " @" out) | 56 | (write-string " @" out) |
| 53 | (escape-xml (user-username user) out)) | 57 | (escape-xml (user-username user) out)) |
| 54 | 58 | ||
| 55 | (format out "</a> [<code>~A</code>]" (user-id user))) | 59 | (format out "</a> [<code>~A</code>]" (user-id user)))) |
| 56 | |||
| 57 | (defun user-format-name (user &optional out) | ||
| 58 | "Format the USER's name in a nice way to stream OUT. | ||
| 59 | |||
| 60 | If OUT is `nil', return the formatted name as a string instead." | ||
| 61 | (if out | ||
| 62 | (user-format-name% user out) | ||
| 63 | (with-output-to-string (stream) | ||
| 64 | (user-format-name% user stream)))) | ||