;;; Package --- Summary
;;;
;;; Code:
(defvar 3/ht-unicode nil)
(setq 3/ht-unicode (ht))
(defun 3/unicodify (str)
"Get a corresponding unicode symbol, to `STR'."
(ht-get 3/ht-unicode str))
(cl-defun uni3/region (&optional beg end)
"Replace the first mapped char sequence (to a unicode char) between `BEG' and `END'"
(interactive)
(let* ((m 0))
(save-excursion
(let* ((e (or end (point)))
(b (or beg (progn (beginning-of-line) (point))))
;; Current line
(s (buffer-substring-no-properties b e))
;; ∀ KEY ∈ HT, STR ∈ LINE;
;; LINE[(|LINE|-|KEY|), |LINE|] = KEY)
;; -⟶ |KEY| ∈ `mtch'
;; `mtch' := all keys which are present as a substring at end of
;; region.
(mtch (list))
;; All keys which map to some string
(uk (ht-keys 3/ht-unicode)))
(progn
;; Check all keys in the unicode mapping
;; (string which maps to a unicode/pretty string)
;; if they begin with a string in the mapping of keys.
;; infront of the cursor/marker/(region end).
(dotimes (n (length uk))
(when (string-suffix-p (nth n uk) s)
;; As different keys can begin with the same char
;; all the matching keys are added to a list.
;; ex: [=>] and =[=>]
(push (nth n uk) mtch)))
(when (>= (length mtch) 1)
;; Sort the matches and pick the longest matching string
(setq m (car (sort mtch
#'(lambda (n m)
(> (length n) (length m))))))
;; Replace matched string with the mapped string
(goto-char e)
(delete-backward-char (length m))
(insert (ht-get 3/ht-unicode m))
(setq m (length (ht-get 3/ht-unicode m)))))))
(forward-char m)))
(defun uni3 (str ustr)
"Map `STR' to a Unicode string `USTR'."
(ht-set 3/ht-unicode str ustr))
(seq-do
`(lambda (x) (interactive)
(uni3 (car x) (cdr x)))
`(("==>" . "⟹") ("[[" . "⟦")
("<==" . "⟸") ("__" . "⸏")
("\\" . "\") ("joker" . "🂿")
("joker" . "🂿") ("Bin" . "Bin(n, p)")
("PY" . "P(X)") ("PX" . "P(Y)")
("AX" . "P(A)") ("BX" . "P(B)")
("C" . "C(X, Y)") ("PY=" . "P(X = x)")
("fx" . "𝑓(x)") ("px" . "p(x)")
("pxy" . "p(x, y)") ("P|" . "P(A|B) = P(A ∩ B)/P(B)")
("P-" . "P(A ∩ B) = P(B|A)P(A)") ("P^" . "P(A ∩ B) = P(B|A)P(A)")
("PB" . "P(B|L) = P(L|R)P(B)/P(L)") ("PA*" . "P(B ∩ A*) = P(B) - P(A ∩ B)")
("PU" . "P(A ∪ B) = P(A) + P(B) - P(A ∩ B)") ("PU*" . "P(A* ∪ B*) = 1 - P(A ∩ B)")
("P+" . "P(A ∪ B) = P(A) + P(B)") ("P*" . "P(A*) = 1 - P(A)")
("PX=" . "P(Y = y)") ("AX=" . "P(A = x)")
("BX=" . "P(B = x)") ("Ge" . "Ge(p)")
("Po" . "Po(μ)") ("Re" . "Re(a, b)")
("Exp" . "Exp(𝜆)") ("Re" . "Re(n, Γ)")
("N" . "N(μ)") ("\\" . "⟍")
("/" . "⟋")
("fool" . "🃠") ("\\tautologi" . "⫟")
("\\falseness" . "⫠") ("|>" . "⮚")
("<|" . "⮘") ("<==>" . "⟺")
("<(" . "⟨") (")>" . "⟩")
("<<" . "⟪") (">>" . "⟫")
("O" . "𝛀") ("\\beta" . "𝛃")
("𝛃" . "𝛽") ("𝛽" . "𝛃")
("\\alpha" . "𝛂") ( "𝛂" . "𝛼")
( "𝛼" . "𝛂") ("3.14" . "𝝅")
("\\pi" . "𝝅") ("𝜋" . "𝝅")
("𝝅" . "𝜋") ("\\gamma" . "𝛄")
("𝛾" . "𝛄") ("𝛄" . "𝛾")
("\\sigma" . "𝚺") ("\\chi" . "𝛘")
("𝜒" . "𝛘") ("𝛘" . "𝜒")
("\\kappa" . "𝛞") ("𝜘" . "𝛞")
("𝛞" . "𝜘") ("/x" . "𝑥")
("/y" . "𝑦") ("/z" . "𝑧")
("/v" . "𝑣") ("/u" . "𝑢")
("/r" . "𝑟") ("/s" . "𝑠")
("/n" . "𝑛") ("/m" . "𝑚")
("/k" . "𝑘") ("/j" . "𝑗")
("/i" . "𝑖") ("/g" . "𝑔")
("/f" . "𝑓") ("/e" . "𝑒")
("*" . "∙") ("\\unions" . "⨅")
("\\intersections" . "⨆") ("AND" . "⨁")
("XOR" . "⨂") ("dot" . "⋅")
("\\Psi" . "𝛙") ("\\psi" . "𝛗")
("𝜑" . "𝛗") ("𝛗" . "𝜑")
("\\Theta" . "𝜽") ("𝜽" . "𝜭")
("𝜭" . "𝜃") ("𝜃" . "𝜽")
("\\Lambda" . "𝜦") ("\\sigma" . "𝛔")
("𝜎" . "𝛔") ("𝛔" . "𝜎")
("\\mu" . "𝝁") ("μ" . "𝝁")
("𝝁" . "𝜇") ("𝜇" . "μ")
("/f" . "𝑓") ("\\tau" . "𝛕")
("𝜏" . "𝛕") ("𝛕" . "𝜏")
("\\blam" . "𝝀") ("\\lam" . "𝜆")
("\\." . "𝜆") ("\\\\" . "𝜆")
("lambda" . "𝜆") ("𝛌" . "𝝀")
("𝝀" . "𝜆") ("𝜆" . "𝛌")
("*K" . "𝐊") ("*L" . "𝐋")
("*M" . "𝐌") ("*N" . "𝐍")
("*W" . "𝑊") ("\\mark" . "🠷")
("\\doc" . "🖹") ("\\folder" . "🗀")
("[v]" . "🗹") ("[x]" . "🗷")
("pen" . "✎") ("cross" . "❌")
("<->" . "⟷") ("<--" . "⟵")
("-->" . "⟶") ("⟶" . "→")
("→" . "↦") ("↦" . "➞")
("➞" . "⇥") ("⇥" . "⟿")
("⟿" . "⟼") ("|==>" . "⟾")
("⟹" . "⟾") ("⟺" . "⟻")
("<--|" . "⟻") ("⟻" . "⟽")
("⇣" . "↓") ("↓" . "↑")
("⇡" . "ꜛ") ("ꜛ" . "⌃")
("⇍" . "⇏") ("⇏" . "⃗")
("^<--" . "⃖") ("⃖" . "⃡")
("^<->" . "⃡") ("⃡" . "᷾")
("^<" . "᷾") ("__>" . "ࣺ")
("__<" . "ࣹ") ("ࣺ" . "˲")
("_<" . "˱") ("_v" . "˯")
("_>" . "˲") ("_^" . "˰")
("/X" . "𝑋") ("/Y" . "𝑌")
("\\Omega" . "𝜴") ("𝜴" . "𝛺")
("𝛺" . "𝜴") ("\\omega" . "𝜔")
("\\phi" . "𝜱") ("𝜱" . "ϕ")
("ϕ" . "ɸ") ("ɸ" . "Φ")
("Φ" . "𝜱") ("/Z" . "𝑍")
("(~)" . "☯") ("point" . "☞")
("\\equiv" . "≡") ("\\nequiv" . "≢")
("\\divides" . "∣") ("\\sum" . "∑")
("∑" . "𝜮") ("𝜮" . "∑")
("\\product" . "∏") ("\\coproduct" . "∐")
("∐" . "⨿") ("⨿" . "∐")
("\\integral" . "∫") ("\\integral1" . "⌠")
("\\integral2" . "⎮") ("\\integral3" . "⌡")
("\\sum1" . "⎲") ("\\sum2" . "⎳")
("\\sqrt" . "√") ("\\in" . "∈")
("\\notin" . "∉") ("\\thereexists" . "∃")
("\\theredoesnotexist" . "∄") ("\\exists" . "∃")
("\\notexists" . "∄") ("\\forall" . "∀")
("\\all" . "∀") ("\\prod" . "∏")
("\\product" . "∏") ("\\inf" . "∞")
("oo" . "∞") ("//R" . "ℝ")
("//Q" . "ℚ") ("//N" . "ℕ")
("//Z" . "ℤ")
("_0" . "₀") ("_1" . "₁")
("_2" . "₂") ("_3" . "₃")
("_4" . "₄") ("_5" . "₅")
("_6" . "₆") ("_7" . "₇")
("_8" . "₈") ("_9" . "₉")
("_+" . "₊") ("_-" . "₋")
("_=" . "₌") ("[]" . "🞎")
("><" . "🟇") ("star" . "🟇")
("def" . "≔") (":=" . "≔")
("/=" . "≠") ("!=" . "≠")
("\\neq" . "≠") ("\\leq" . "≤")
("\\geq" . "≥") ("\\union" . "∪")
("\\intersect" . "∩") ("\\sect" . "∩")
("\\snitt" . "∩") (">x" . "𝚡")
(">y" . "𝚢") (">z" . "𝚣")
(">v" . "𝚟") (">w" . "𝚠")))
(global-unset-key (kbd "M-u") )
(global-set-key (kbd "M-u") 'uni3/region)
(provide 'unit3)
;;; unit3 ends here.