diff options
Diffstat (limited to 'haunt/jakob/dynamic/util.scm')
| -rw-r--r-- | haunt/jakob/dynamic/util.scm | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/haunt/jakob/dynamic/util.scm b/haunt/jakob/dynamic/util.scm index a7fd38d..f6f0382 100644 --- a/haunt/jakob/dynamic/util.scm +++ b/haunt/jakob/dynamic/util.scm @@ -26,7 +26,8 @@ base64-length decode-form date<? - hash-append!)) + hash-append! + emoji?)) (define (assoc-value alist key) "Return the `car' of `(assoc alist key)' if truthy" @@ -82,3 +83,30 @@ If KEY does not exist in TABLE, initialize kEY to (list ITEM)" (if (hash-ref table key) (hash-set! table key (cons item (hash-ref table key))) (hash-set! table key (list item)))) + +(define (emoji? str) + "Determine if `str' is an 'acceptable' emoji character + +Acceptable is the following subset: + +- The 'Emoticons' block +- The 'Supplemental Symbols and Pictographs' block, excluding U+1F900 + through U+1F90B +- The hand symbols from the 'Miscellaneous Symbols and Pictographs' + block +- The hand symbols from the 'Dingbats' block +- U+1F37B and U+1F440 + +Notably, U+1F946 isn't normally treated an emoji, but it is here. I +think it should be! As an American, I should be able to use pictographs +to express my God-given constitutional rights!" + (and (string? str) + (= 1 (string-length str)) + (let ((codepoint (char->integer + (first (string->list str))))) + (or (<= #x1F600 codepoint #x1F64F) + (<= #x1F90C codepoint #x1F9FF) + (<= #x1F446 codepoint #x1F450) + (<= #x270A codepoint #x270D) + (= codepoint #x1F37B) + (= codepoint #x1F440))))) |