emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] master d181366: Add a new function to say whether a string


From: Lars Ingebrigtsen
Subject: [Emacs-diffs] master d181366: Add a new function to say whether a string is restrictive
Date: Tue, 29 Dec 2015 11:41:10 +0000

branch: master
commit d181366dc39620eb0f249fc3f1d58b6199b9e44d
Author: Lars Ingebrigtsen <address@hidden>
Commit: Lars Ingebrigtsen <address@hidden>

    Add a new function to say whether a string is restrictive
    
    * puny.el (puny-highly-restrictive-p): New function.
---
 lisp/net/puny.el |   20 ++++++++++++++++++++
 1 files changed, 20 insertions(+), 0 deletions(-)

diff --git a/lisp/net/puny.el b/lisp/net/puny.el
index d96c6c2..08da51b 100644
--- a/lisp/net/puny.el
+++ b/lisp/net/puny.el
@@ -190,6 +190,26 @@ For instance \"xn--bcher-kva\" => \"bücher\"."
         (cl-incf i)))
     (buffer-string)))
 
+;; http://www.unicode.org/reports/tr39/#Restriction_Level_Detection
+
+(defun puny-highly-restrictive-p (string)
+  (let ((scripts
+         (seq-uniq
+          (seq-map (lambda (char)
+                     (aref char-script-table char))
+                   string))))
+    (or
+     ;; Every character uses the same script.
+     (= (length scripts) 1)
+     (seq-some 'identity
+               (mapcar (lambda (list)
+                         (seq-every-p (lambda (script)
+                                        (memq script list))
+                                      scripts))
+                       '((latin han hiragana kana)
+                         (latin han bopomofo)
+                         (latin han hangul)))))))
+
 (provide 'puny)
 
 ;;; puny.el ends here



reply via email to

[Prev in Thread] Current Thread [Next in Thread]