Skip to content

Instantly share code, notes, and snippets.

@jart
Created March 15, 2022 15:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jart/e0554c9b9672d670e664a0ff5eeca37a to your computer and use it in GitHub Desktop.
Save jart/e0554c9b9672d670e664a0ff5eeca37a to your computer and use it in GitHub Desktop.
;;; text2math.el --- keyboard shortcuts for converting to math charsets
;; Copyright (C) 2022 Justine Alexandra Roberts Tunney
;; License: ISC
;; Author: Justine Tunney <jtunney@gmail.com>
;; Version: 0.1
;; URL: http://github.com/jart/justinemacs
;;
;; Permission to use, copy, modify, and/or distribute this software for
;; any purpose with or without fee is hereby granted, provided that the
;; above copyright notice and this permission notice appear in all copies.
;;
;; THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
;; WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
;; WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
;; AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
;; DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
;; PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
;; TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
;; PERFORMANCE OF THIS SOFTWARE.
;;; Commentary:
;;
;; This is messy and better APIs exist in Emacs for implementing it.
;;; Code:
(defun jart-text-hook ()
(dolist (key jart-text-keys)
(local-set-key (car key) (cdr key))))
(defun jart-text-to-gothic (start end)
"Convert buffer text from START to END to gothic characters."
(interactive "r")
(jart--text-to-math (jart--get-bounds start end) jart--gothic))
(defun jart-text-to-doublestruck (start end)
"Convert buffer text from START to END to doublestruck characters."
(interactive "r")
(jart--text-to-math (jart--get-bounds start end) jart--doublestruck))
(defun jart-text-to-fraktur (start end)
"Convert buffer text from START to END to fraktur characters."
(interactive "r")
(jart--text-to-math (jart--get-bounds start end) jart--fraktur))
(defun jart-text-to-fraktur-bold (start end)
"Convert buffer text from START to END to fraktur-bold characters."
(interactive "r")
(jart--text-to-math (jart--get-bounds start end) jart--fraktur-bold))
(defun jart-text-to-italic (start end)
"Convert buffer text from START to END to italic characters."
(interactive "r")
(jart--text-to-math (jart--get-bounds start end) jart--italic))
(defun jart-text-replace (b s)
(delete-region (car b) (cdr b))
(goto-char (car b))
(insert s)
(goto-char (+ (car b) (length s))))
(defun jart-text-to-math-italic (start end)
"Convert buffer text from START to END to italic math characters."
(interactive "r")
(let* ((b (jart--get-bounds start end))
(s (downcase (buffer-substring-no-properties (car b) (cdr b)))))
(cond ((equal s "lambda") (jart-text-replace b "ฮป"))
((equal s "list") (jart-text-replace b "โ„’"))
((equal s "lambda") (jart-text-replace b "ฮป"))
((equal s "closure") (jart-text-replace b "โ…„"))
((equal s "macro") (jart-text-replace b "ฯˆ"))
((equal s "defmacro") (jart-text-replace b "ฮจ"))
((equal s "syntax") (jart-text-replace b "ฮพ"))
((equal s "define") (jart-text-replace b "โ‰"))
((equal s "atom") (jart-text-replace b "ฮฑ"))
((equal s "cons") (jart-text-replace b "โ„ถ"))
((equal s "cond") (jart-text-replace b "ฮถ"))
((equal s "quote") (jart-text-replace b "โ„ฆ"))
((equal s "defun") (jart-text-replace b "ฮ›"))
((equal s "subset") (jart-text-replace b "โŠ‚"))
((equal s "superset") (jart-text-replace b "โŠƒ"))
((equal s "reverse") (jart-text-replace b "ะฏ"))
((equal s "expand") (jart-text-replace b "ษ™"))
((equal s "eq") (jart-text-replace b "โ‰ก"))
((equal s "car") (jart-text-replace b "โ…"))
((equal s "cdr") (jart-text-replace b "โ†"))
((equal s "compose") (jart-text-replace b "โˆ˜"))
((equal s "true") (jart-text-replace b "โŠค"))
((equal s "nil") (jart-text-replace b "โŠฅ"))
((equal s "and") (jart-text-replace b "โˆง"))
((equal s "or") (jart-text-replace b "โˆจ"))
((equal s "member") (jart-text-replace b "โˆŠ"))
((equal s "xor") (jart-text-replace b "โŠป"))
((equal s "nand") (jart-text-replace b "โŠผ"))
((equal s "nor") (jart-text-replace b "โŠฝ"))
((equal s "implies") (jart-text-replace b "โŸถ"))
((equal s "union") (jart-text-replace b "โˆช"))
((equal s "intersection") (jart-text-replace b "โˆฉ"))
((equal s "not") (jart-text-replace b "ยฌ"))
((equal s "sqrt") (jart-text-replace b "โˆš"))
((equal s "therefore") (jart-text-replace b "โˆด"))
((equal s "unreachable") (jart-text-replace b "โˆ…"))
((equal s "because") (jart-text-replace b "โˆต"))
((equal s "function") (jart-text-replace b "๐‘“"))
((equal s "iff") (jart-text-replace b "โŸบ"))
((equal s "if") (jart-text-replace b "โ‚"))
((equal s "order") (jart-text-replace b "โŠ™"))
((equal s "asterism") (jart-text-replace b "โ‚"))
((equal s "append") (jart-text-replace b "โ•‘"))
((equal s "partial") (jart-text-replace b "โˆ‚"))
((equal s "integrate") (jart-text-replace b "โˆซ"))
((equal s "cmp") (jart-text-replace b "โ‰ท"))
((equal s "fork") (jart-text-replace b "โ‹”"))
((equal s "ycombinator") (jart-text-replace b "๐•"))
((equal s "beta") (jart-text-replace b "ฮฒ"))
((equal s "gamma") (jart-text-replace b "ฮ“"))
((equal s "delta") (jart-text-replace b "ฮด"))
((equal s "epsilon") (jart-text-replace b "ฮต"))
((equal s "zeta") (jart-text-replace b "ฮถ"))
((equal s "eta") (jart-text-replace b "ฮท"))
((equal s "theta") (jart-text-replace b "ฮธ"))
((equal s "iota") (jart-text-replace b "ฮน"))
((equal s "kappa") (jart-text-replace b "ฮบ"))
((equal s "mu") (jart-text-replace b "ฮผ"))
((equal s "nu") (jart-text-replace b "ฮฝ"))
((equal s "xi") (jart-text-replace b "ฮพ"))
((equal s "rho") (jart-text-replace b "ฯ"))
((equal s "pi") (jart-text-replace b "ฯ€"))
((equal s "sum") (jart-text-replace b "ฮฃ"))
((equal s "sigma") (jart-text-replace b "ฯƒ"))
((equal s "rho") (jart-text-replace b "ฯ"))
((equal s "tau") (jart-text-replace b "ฯ„"))
((equal s "phi") (jart-text-replace b "ฯ†"))
((equal s "psi") (jart-text-replace b "ฯˆ"))
((equal s "chi") (jart-text-replace b "ฯ‡"))
((equal s "omega") (jart-text-replace b "ฯ‰"))
((equal s "cycle") (jart-text-replace b "โŸณ"))
((equal s "bet") (jart-text-replace b "โ„ถ"))
((equal s "gimel") (jart-text-replace b "โ„ท"))
((equal s "dalet") (jart-text-replace b "โ„ธ"))
((equal s "alef") (jart-text-replace b "โ„ต"))
((equal s "copy") (jart-text-replace b "ยฉ"))
((equal s "registered") (jart-text-replace b "ยฎ"))
((equal s "yen") (jart-text-replace b "ยฅ"))
((equal s "pound") (jart-text-replace b "ยฃ"))
((equal s "cent") (jart-text-replace b "ยข"))
((equal s "le") (jart-text-replace b "โ‰ค"))
((equal s "ge") (jart-text-replace b "โ‰ฅ"))
((equal s "eval") (jart-text-replace b "โŸน"))
((equal s "expands") (jart-text-replace b "โŸถ"))
(t (jart--text-to-math b jart--math-italic)))))
(defun jart-text-to-subscript (start end)
"Convert buffer text from START to END to subscript math characters."
(interactive "r")
(jart--text-to-math (jart--get-bounds start end) jart--subscript))
(defun jart-text-to-superscript (start end)
"Convert buffer text from START to END to superscript math characters."
(interactive "r")
(jart--text-to-math (jart--get-bounds start end) jart--superscript))
(defun jart-text-to-bold (start end)
"Convert buffer text from START to END to bold characters."
(interactive "r")
(jart--text-to-math (jart--get-bounds start end) jart--bold))
(defconst jart--gothic '((?A ?Z . ?๐”„)
(?a ?z . ?๐”ž)))
(defconst jart--doublestruck '(
(?A ?A . ?๐”ธ)
(?B ?B . ?๐”น)
(?C ?C . ?โ„‚)
(?D ?D . ?๐”ป)
(?E ?E . ?๐”ผ)
(?F ?F . ?๐”ฝ)
(?G ?G . ?๐”พ)
(?H ?H . ?โ„)
(?I ?I . ?๐•€)
(?J ?J . ?๐•)
(?K ?K . ?๐•‚)
(?L ?L . ?๐•ƒ)
(?M ?M . ?๐•„)
(?N ?N . ?โ„•)
(?O ?O . ?๐•†)
(?P ?P . ?โ„™)
(?Q ?Q . ?โ„š)
(?R ?R . ?โ„)
(?S ?S . ?๐•Š)
(?T ?T . ?๐•‹)
(?U ?U . ?๐•Œ)
(?V ?V . ?๐•)
(?W ?W . ?๐•Ž)
(?X ?X . ?๐•)
(?Y ?Y . ?๐•)
(?Z ?Z . ?โ„ค)
(?0 ?0 . ?๐Ÿ˜)
(?1 ?1 . ?๐Ÿ™)
(?2 ?2 . ?๐Ÿš)
(?3 ?3 . ?๐Ÿ›)
(?4 ?4 . ?๐Ÿ)
(?5 ?5 . ?๐Ÿœ)
(?6 ?6 . ?๐Ÿž)
(?7 ?7 . ?๐ŸŸ)
(?8 ?8 . ?๐Ÿ )
(?9 ?9 . ?๐Ÿก)
(?a ?a . ?๐•’)
(?b ?b . ?๐•“)
(?c ?c . ?๐•”)
(?d ?d . ?๐••)
(?e ?e . ?๐•–)
(?f ?f . ?๐•—)
(?g ?g . ?๐•˜)
(?h ?h . ?๐•™)
(?i ?i . ?๐•š)
(?j ?j . ?๐•›)
(?k ?k . ?๐•œ)
(?l ?l . ?๐•)
(?m ?m . ?๐•ž)
(?n ?n . ?๐•Ÿ)
(?o ?o . ?๐• )
(?p ?p . ?๐•ก)
(?q ?q . ?๐•ข)
(?r ?r . ?๐•ฃ)
(?s ?s . ?๐•ค)
(?t ?t . ?๐•ฅ)
(?u ?u . ?๐•ฆ)
(?v ?v . ?๐•ง)
(?w ?w . ?๐•จ)
(?x ?x . ?๐•ฉ)
(?y ?y . ?๐•ช)
(?z ?z . ?๐•ซ)
))
;; static const wchar_t A[2][10][26] = {
;; {L"ABCDEFGHIJKLMNOPQRSTUVWXYZ",
;; L"abcdefghijklmnopqrstuvwxyz",
;; L"๐•ฌ๐•ญ๐•ฎ๐•ฏ๐•ฐ๐•ฑ๐•ฒ๐•ณ๐•ด๐•ต๐•ถ๐•ท๐•ธ๐•น๐•บ๐•ป๐•ผ๐•ฝ๐•พ๐•ฟ๐–€๐–๐–‚๐–ƒ๐–„๐–…",
;; L"๐–†๐–‡๐–ˆ๐–‰๐–Š๐–‹๐–Œ๐–๐–Ž๐–๐–๐–‘๐–’๐–“๐–”๐–•๐––๐–—๐–˜๐–™๐–š๐–›๐–œ๐–๐–ž๐–Ÿ",
;; L"๐˜ˆ๐˜‰๐˜Š๐˜‹๐˜Œ๐˜๐˜Ž๐˜๐˜๐˜‘๐˜’๐˜“๐˜”๐˜•๐˜–๐˜—๐˜˜๐˜™๐˜š๐˜›๐˜œ๐˜๐˜ž๐˜Ÿ๐˜ ๐˜ก",
;; L"๐˜ข๐˜ฃ๐˜ค๐˜ฅ๐˜ฆ๐˜ง๐˜จ๐˜ฉ๐˜ช๐˜ซ๐˜ฌ๐˜ญ๐˜ฎ๐˜ฏ๐˜ฐ๐˜ฑ๐˜ฒ๐˜ณ๐˜ด๐˜ต๐˜ถ๐˜ท๐˜ธ๐˜น๐˜บ๐˜ป",
;; L"๐ด๐ต๐ถ๐ท๐ธ๐น๐บ๐ป๐ผ๐ฝ๐พ๐ฟ๐‘€๐‘๐‘‚๐‘ƒ๐‘„๐‘…๐‘†๐‘‡๐‘ˆ๐‘‰๐‘Š๐‘‹๐‘Œ๐‘",
;; L"๐‘Ž๐‘๐‘๐‘‘๐‘’๐‘“๐‘”๐‘•๐‘–๐‘—๐‘˜๐‘™๐‘š๐‘›๐‘œ๐‘๐‘ž๐‘Ÿ๐‘ ๐‘ก๐‘ข๐‘ฃ๐‘ค๐‘ฅ๐‘ฆ๐‘ง",
;; L"๐€๐๐‚๐ƒ๐„๐…๐†๐‡๐ˆ๐‰๐Š๐‹๐Œ๐๐Ž๐๐๐‘๐’๐“๐”๐•๐–๐—๐˜๐™",
;; L"๐—ฎ๐—ฏ๐—ฐ๐—ฑ๐—ฒ๐—ณ๐—ด๐—ต๐—ถ๐—ท๐—ธ๐—น๐—บ๐—ป๐—ผ๐—ฝ๐—พ๐—ฟ๐˜€๐˜๐˜‚๐˜ƒ๐˜„๐˜…๐˜†๐˜‡"},
;; {L"ABCDEFGHIJKLMNOPQRSTUVWXYZ",
;; L"abcdefghijklmnopqrstuvwxyz",
;; L"๐”„๐”…โ„ญ๐”‡๐”ˆ๐”‰๐”Šโ„Œโ„‘๐”๐”Ž๐”๐”๐”‘๐”’๐”“๐””โ„œ๐”–๐”—๐”˜๐”™๐”š๐”›๐”œโ„จ",
;; L"๐”ž๐”Ÿ๐” ๐”ก๐”ข๐”ฃ๐”ค๐”ฅ๐”ฆ๐”ง๐”จ๐”ฉ๐”ช๐”ซ๐”ฌ๐”ญ๐”ฎ๐”ฏ๐”ฐ๐”ฑ๐”ฒ๐”ณ๐”ด๐”ต๐”ถ๐”ท",
;; L"๐˜ˆ๐˜‰๐˜Š๐˜‹๐˜Œ๐˜๐˜Ž๐˜๐˜๐˜‘๐˜’๐˜“๐˜”๐˜•๐˜–๐˜—๐˜˜๐˜™๐˜š๐˜›๐˜œ๐˜๐˜ž๐˜Ÿ๐˜ ๐˜ก",
;; L"๐˜ข๐˜ฃ๐˜ค๐˜ฅ๐˜ฆ๐˜ง๐˜จ๐˜ฉ๐˜ช๐˜ซ๐˜ฌ๐˜ญ๐˜ฎ๐˜ฏ๐˜ฐ๐˜ฑ๐˜ฒ๐˜ณ๐˜ด๐˜ต๐˜ถ๐˜ท๐˜ธ๐˜น๐˜บ๐˜ป",
;; L"๐ด๐ต๐ถ๐ท๐ธ๐น๐บ๐ป๐ผ๐ฝ๐พ๐ฟ๐‘€๐‘๐‘‚๐‘ƒ๐‘„๐‘…๐‘†๐‘‡๐‘ˆ๐‘‰๐‘Š๐‘‹๐‘Œ๐‘",
;; L"๐‘Ž๐‘๐‘๐‘‘๐‘’๐‘“๐‘”๐‘•๐‘–๐‘—๐‘˜๐‘™๐‘š๐‘›๐‘œ๐‘๐‘ž๐‘Ÿ๐‘ ๐‘ก๐‘ข๐‘ฃ๐‘ค๐‘ฅ๐‘ฆ๐‘ง",
;; L"๐€๐๐‚๐ƒ๐„๐…๐†๐‡๐ˆ๐‰๐Š๐‹๐Œ๐๐Ž๐๐๐‘๐’๐“๐”๐•๐–๐—๐˜๐™",
;; L"๐—ฎ๐—ฏ๐—ฐ๐—ฑ๐—ฒ๐—ณ๐—ด๐—ต๐—ถ๐—ท๐—ธ๐—น๐—บ๐—ป๐—ผ๐—ฝ๐—พ๐—ฟ๐˜€๐˜๐˜‚๐˜ƒ๐˜„๐˜…๐˜†๐˜‡"},
;; };
;;
;; static const wchar_t B[2][10][26] = {
;; {L"๐”„๐”…โ„ญ๐”‡๐”ˆ๐”‰๐”Šโ„Œโ„‘๐”๐”Ž๐”๐”๐”‘๐”’๐”“๐””โ„œ๐”–๐”—๐”˜๐”™๐”š๐”›๐”œโ„จ",
;; L"๐”ž๐”Ÿ๐” ๐”ก๐”ข๐”ฃ๐”ค๐”ฅ๐”ฆ๐”ง๐”จ๐”ฉ๐”ช๐”ซ๐”ฌ๐”ญ๐”ฎ๐”ฏ๐”ฐ๐”ฑ๐”ฒ๐”ณ๐”ด๐”ต๐”ถ๐”ท",
;; L"๐”„๐”…โ„ญ๐”‡๐”ˆ๐”‰๐”Šโ„Œโ„‘๐”๐”Ž๐”๐”๐”‘๐”’๐”“๐””โ„œ๐”–๐”—๐”˜๐”™๐”š๐”›๐”œโ„จ",
;; L"๐”ž๐”Ÿ๐” ๐”ก๐”ข๐”ฃ๐”ค๐”ฅ๐”ฆ๐”ง๐”จ๐”ฉ๐”ช๐”ซ๐”ฌ๐”ญ๐”ฎ๐”ฏ๐”ฐ๐”ฑ๐”ฒ๐”ณ๐”ด๐”ต๐”ถ๐”ท",
;; L"๐”„๐”…โ„ญ๐”‡๐”ˆ๐”‰๐”Šโ„Œโ„‘๐”๐”Ž๐”๐”๐”‘๐”’๐”“๐””โ„œ๐”–๐”—๐”˜๐”™๐”š๐”›๐”œโ„จ",
;; L"๐”ž๐”Ÿ๐” ๐”ก๐”ข๐”ฃ๐”ค๐”ฅ๐”ฆ๐”ง๐”จ๐”ฉ๐”ช๐”ซ๐”ฌ๐”ญ๐”ฎ๐”ฏ๐”ฐ๐”ฑ๐”ฒ๐”ณ๐”ด๐”ต๐”ถ๐”ท",
;; L"๐”„๐”…โ„ญ๐”‡๐”ˆ๐”‰๐”Šโ„Œโ„‘๐”๐”Ž๐”๐”๐”‘๐”’๐”“๐””โ„œ๐”–๐”—๐”˜๐”™๐”š๐”›๐”œโ„จ",
;; L"๐”ž๐”Ÿ๐” ๐”ก๐”ข๐”ฃ๐”ค๐”ฅ๐”ฆ๐”ง๐”จ๐”ฉ๐”ช๐”ซ๐”ฌ๐”ญ๐”ฎ๐”ฏ๐”ฐ๐”ฑ๐”ฒ๐”ณ๐”ด๐”ต๐”ถ๐”ท",
;; L"๐”„๐”…โ„ญ๐”‡๐”ˆ๐”‰๐”Šโ„Œโ„‘๐”๐”Ž๐”๐”๐”‘๐”’๐”“๐””โ„œ๐”–๐”—๐”˜๐”™๐”š๐”›๐”œโ„จ",
;; L"๐”ž๐”Ÿ๐” ๐”ก๐”ข๐”ฃ๐”ค๐”ฅ๐”ฆ๐”ง๐”จ๐”ฉ๐”ช๐”ซ๐”ฌ๐”ญ๐”ฎ๐”ฏ๐”ฐ๐”ฑ๐”ฒ๐”ณ๐”ด๐”ต๐”ถ๐”ท"},
;; {L"๐•ฌ๐•ญ๐•ฎ๐•ฏ๐•ฐ๐•ฑ๐•ฒ๐•ณ๐•ด๐•ต๐•ถ๐•ท๐•ธ๐•น๐•บ๐•ป๐•ผ๐•ฝ๐•พ๐•ฟ๐–€๐–๐–‚๐–ƒ๐–„๐–…",
;; L"๐–†๐–‡๐–ˆ๐–‰๐–Š๐–‹๐–Œ๐–๐–Ž๐–๐–๐–‘๐–’๐–“๐–”๐–•๐––๐–—๐–˜๐–™๐–š๐–›๐–œ๐–๐–ž๐–Ÿ",
;; L"๐•ฌ๐•ญ๐•ฎ๐•ฏ๐•ฐ๐•ฑ๐•ฒ๐•ณ๐•ด๐•ต๐•ถ๐•ท๐•ธ๐•น๐•บ๐•ป๐•ผ๐•ฝ๐•พ๐•ฟ๐–€๐–๐–‚๐–ƒ๐–„๐–…",
;; L"๐–†๐–‡๐–ˆ๐–‰๐–Š๐–‹๐–Œ๐–๐–Ž๐–๐–๐–‘๐–’๐–“๐–”๐–•๐––๐–—๐–˜๐–™๐–š๐–›๐–œ๐–๐–ž๐–Ÿ",
;; L"๐•ฌ๐•ญ๐•ฎ๐•ฏ๐•ฐ๐•ฑ๐•ฒ๐•ณ๐•ด๐•ต๐•ถ๐•ท๐•ธ๐•น๐•บ๐•ป๐•ผ๐•ฝ๐•พ๐•ฟ๐–€๐–๐–‚๐–ƒ๐–„๐–…",
;; L"๐–†๐–‡๐–ˆ๐–‰๐–Š๐–‹๐–Œ๐–๐–Ž๐–๐–๐–‘๐–’๐–“๐–”๐–•๐––๐–—๐–˜๐–™๐–š๐–›๐–œ๐–๐–ž๐–Ÿ",
;; L"๐•ฌ๐•ญ๐•ฎ๐•ฏ๐•ฐ๐•ฑ๐•ฒ๐•ณ๐•ด๐•ต๐•ถ๐•ท๐•ธ๐•น๐•บ๐•ป๐•ผ๐•ฝ๐•พ๐•ฟ๐–€๐–๐–‚๐–ƒ๐–„๐–…",
;; L"๐–†๐–‡๐–ˆ๐–‰๐–Š๐–‹๐–Œ๐–๐–Ž๐–๐–๐–‘๐–’๐–“๐–”๐–•๐––๐–—๐–˜๐–™๐–š๐–›๐–œ๐–๐–ž๐–Ÿ",
;; L"๐•ฌ๐•ญ๐•ฎ๐•ฏ๐•ฐ๐•ฑ๐•ฒ๐•ณ๐•ด๐•ต๐•ถ๐•ท๐•ธ๐•น๐•บ๐•ป๐•ผ๐•ฝ๐•พ๐•ฟ๐–€๐–๐–‚๐–ƒ๐–„๐–…",
;; L"๐–†๐–‡๐–ˆ๐–‰๐–Š๐–‹๐–Œ๐–๐–Ž๐–๐–๐–‘๐–’๐–“๐–”๐–•๐––๐–—๐–˜๐–™๐–š๐–›๐–œ๐–๐–ž๐–Ÿ"},
;; };
;;
;; int main(int argc, char *argv[]) {
;; int a, b, i, j, k;
;; for (i = 0; i < ARRAYLEN(A); ++i) {
;; for (j = 0; j < ARRAYLEN(A[0]); ++j) {
;; for (a = b = k = 0; k < 26; ++k) {
;; if (!a) {
;; a = A[i][j][k];
;; b = B[i][j][k];
;; }
;; if (k == 25 || (A[i][j][k] + 1 != A[i][j][k + 1] ||
;; B[i][j][k] + 1 != B[i][j][k + 1])) {
;; kprintf("(?%lc ?%lc . ?%lc) ;; %05X-%05X โ†’ %05X-%05X\n", a, A[i][j][k],
;; b, a, A[i][j][k], b, B[i][j][k]);
;; a = 0;
;; }
;; }
;; }
;; kprintf("\n");
;; }
;; }
(defconst jart--fraktur '( ;;C-c C-z
(?A ?B . ?๐”„) ;; 00041-00042 โ†’ 1D504-1D505
(?C ?C . ?โ„ญ) ;; 00043-00043 โ†’ 0212D-0212D
(?D ?G . ?๐”‡) ;; 00044-00047 โ†’ 1D507-1D50A
(?H ?H . ?โ„Œ) ;; 00048-00048 โ†’ 0210C-0210C
(?I ?I . ?โ„‘) ;; 00049-00049 โ†’ 02111-02111
(?J ?Q . ?๐”) ;; 0004A-00051 โ†’ 1D50D-1D514
(?R ?R . ?โ„œ) ;; 00052-00052 โ†’ 0211C-0211C
(?S ?Y . ?๐”–) ;; 00053-00059 โ†’ 1D516-1D51C
(?Z ?Z . ?โ„จ) ;; 0005A-0005A โ†’ 02128-02128
(?a ?z . ?๐”ž) ;; 00061-0007A โ†’ 1D51E-1D537
(?๐•ฌ ?๐•ญ . ?๐”„) ;; 1D56C-1D56D โ†’ 1D504-1D505
(?๐•ฎ ?๐•ฎ . ?โ„ญ) ;; 1D56E-1D56E โ†’ 0212D-0212D
(?๐•ฏ ?๐•ฒ . ?๐”‡) ;; 1D56F-1D572 โ†’ 1D507-1D50A
(?๐•ณ ?๐•ณ . ?โ„Œ) ;; 1D573-1D573 โ†’ 0210C-0210C
(?๐•ด ?๐•ด . ?โ„‘) ;; 1D574-1D574 โ†’ 02111-02111
(?๐•ต ?๐•ผ . ?๐”) ;; 1D575-1D57C โ†’ 1D50D-1D514
(?๐•ฝ ?๐•ฝ . ?โ„œ) ;; 1D57D-1D57D โ†’ 0211C-0211C
(?๐•พ ?๐–„ . ?๐”–) ;; 1D57E-1D584 โ†’ 1D516-1D51C
(?๐–… ?๐–… . ?โ„จ) ;; 1D585-1D585 โ†’ 02128-02128
(?๐–† ?๐–Ÿ . ?๐”ž) ;; 1D586-1D59F โ†’ 1D51E-1D537
(?๐˜ˆ ?๐˜‰ . ?๐”„) ;; 1D608-1D609 โ†’ 1D504-1D505
(?๐˜Š ?๐˜Š . ?โ„ญ) ;; 1D60A-1D60A โ†’ 0212D-0212D
(?๐˜‹ ?๐˜Ž . ?๐”‡) ;; 1D60B-1D60E โ†’ 1D507-1D50A
(?๐˜ ?๐˜ . ?โ„Œ) ;; 1D60F-1D60F โ†’ 0210C-0210C
(?๐˜ ?๐˜ . ?โ„‘) ;; 1D610-1D610 โ†’ 02111-02111
(?๐˜‘ ?๐˜˜ . ?๐”) ;; 1D611-1D618 โ†’ 1D50D-1D514
(?๐˜™ ?๐˜™ . ?โ„œ) ;; 1D619-1D619 โ†’ 0211C-0211C
(?๐˜š ?๐˜  . ?๐”–) ;; 1D61A-1D620 โ†’ 1D516-1D51C
(?๐˜ก ?๐˜ก . ?โ„จ) ;; 1D621-1D621 โ†’ 02128-02128
(?๐˜ข ?๐˜ป . ?๐”ž) ;; 1D622-1D63B โ†’ 1D51E-1D537
(?๐ด ?๐ต . ?๐”„) ;; 1D434-1D435 โ†’ 1D504-1D505
(?๐ถ ?๐ถ . ?โ„ญ) ;; 1D436-1D436 โ†’ 0212D-0212D
(?๐ท ?๐บ . ?๐”‡) ;; 1D437-1D43A โ†’ 1D507-1D50A
(?๐ป ?๐ป . ?โ„Œ) ;; 1D43B-1D43B โ†’ 0210C-0210C
(?๐ผ ?๐ผ . ?โ„‘) ;; 1D43C-1D43C โ†’ 02111-02111
(?๐ฝ ?๐‘„ . ?๐”) ;; 1D43D-1D444 โ†’ 1D50D-1D514
(?๐‘… ?๐‘… . ?โ„œ) ;; 1D445-1D445 โ†’ 0211C-0211C
(?๐‘† ?๐‘Œ . ?๐”–) ;; 1D446-1D44C โ†’ 1D516-1D51C
(?๐‘ ?๐‘ . ?โ„จ) ;; 1D44D-1D44D โ†’ 02128-02128
(?๐‘Ž ?๐‘ง . ?๐”ž) ;; 1D44E-1D467 โ†’ 1D51E-1D537
(?๐€ ?๐ . ?๐”„) ;; 1D400-1D401 โ†’ 1D504-1D505
(?๐‚ ?๐‚ . ?โ„ญ) ;; 1D402-1D402 โ†’ 0212D-0212D
(?๐ƒ ?๐† . ?๐”‡) ;; 1D403-1D406 โ†’ 1D507-1D50A
(?๐‡ ?๐‡ . ?โ„Œ) ;; 1D407-1D407 โ†’ 0210C-0210C
(?๐ˆ ?๐ˆ . ?โ„‘) ;; 1D408-1D408 โ†’ 02111-02111
(?๐‰ ?๐ . ?๐”) ;; 1D409-1D410 โ†’ 1D50D-1D514
(?๐‘ ?๐‘ . ?โ„œ) ;; 1D411-1D411 โ†’ 0211C-0211C
(?๐’ ?๐˜ . ?๐”–) ;; 1D412-1D418 โ†’ 1D516-1D51C
(?๐™ ?๐™ . ?โ„จ) ;; 1D419-1D419 โ†’ 02128-02128
(?๐—ฎ ?๐˜‡ . ?๐”ž) ;; 1D5EE-1D607 โ†’ 1D51E-1D537
))
(defconst jart--fraktur-bold '( ;;C-c C-v
(?A ?Z . ?๐•ฌ) ;; 00041-0005A โ†’ 1D56C-1D585
(?a ?z . ?๐–†) ;; 00061-0007A โ†’ 1D586-1D59F
(?๐”„ ?๐”… . ?๐•ฌ) ;; 1D504-1D505 โ†’ 1D56C-1D56D
(?โ„ญ ?โ„ญ . ?๐•ฎ) ;; 0212D-0212D โ†’ 1D56E-1D56E
(?๐”‡ ?๐”Š . ?๐•ฏ) ;; 1D507-1D50A โ†’ 1D56F-1D572
(?โ„Œ ?โ„Œ . ?๐•ณ) ;; 0210C-0210C โ†’ 1D573-1D573
(?โ„‘ ?โ„‘ . ?๐•ด) ;; 02111-02111 โ†’ 1D574-1D574
(?๐” ?๐”” . ?๐•ต) ;; 1D50D-1D514 โ†’ 1D575-1D57C
(?โ„œ ?โ„œ . ?๐•ฝ) ;; 0211C-0211C โ†’ 1D57D-1D57D
(?๐”– ?๐”œ . ?๐•พ) ;; 1D516-1D51C โ†’ 1D57E-1D584
(?โ„จ ?โ„จ . ?๐–…) ;; 02128-02128 โ†’ 1D585-1D585
(?๐”ž ?๐”ท . ?๐–†) ;; 1D51E-1D537 โ†’ 1D586-1D59F
(?๐˜ˆ ?๐˜ก . ?๐•ฌ) ;; 1D608-1D621 โ†’ 1D56C-1D585
(?๐˜ข ?๐˜ป . ?๐–†) ;; 1D622-1D63B โ†’ 1D586-1D59F
(?๐ด ?๐‘ . ?๐•ฌ) ;; 1D434-1D44D โ†’ 1D56C-1D585
(?๐‘Ž ?๐‘ง . ?๐–†) ;; 1D44E-1D467 โ†’ 1D586-1D59F
(?๐€ ?๐™ . ?๐•ฌ) ;; 1D400-1D419 โ†’ 1D56C-1D585
(?๐—ฎ ?๐˜‡ . ?๐–†) ;; 1D5EE-1D607 โ†’ 1D586-1D59F
))
(defconst jart--italic '((?A ?Z . ?๐˜ˆ)
(?a ?z . ?๐˜ข)))
(defconst jart--math-italic '((?' ?' . ?โ€ฒ)
(?0 ?9 . ?๐Ÿถ)
(?A ?Z . ?๐ด)
(?a ?z . ?๐‘Ž)))
(defconst jart--bold
'((?0 ?9 . ?๐Ÿฌ) (?๐Ÿข ?๐Ÿซ . ?๐Ÿฌ) (?๐Ÿถ ?๐Ÿฟ . ?๐Ÿฌ) (?๐Ÿถ ?๐Ÿฟ . ?๐Ÿฌ)
(?A ?Z . ?๐€) (?a ?z . ?๐—ฎ) (?๐ด ?๐‘ . ?๐‘จ) (?๐‘Ž ?๐‘ง . ?๐’‚)
(?๐˜ˆ ?๐˜ก . ?๐˜ผ) (?๐˜ข ?๐˜ป . ?๐™–) (?๐›ข ?๐›ป . ?๐šจ) (?๐›ผ ?๐œ• . ?๐›‚)))
(defconst jart--subscript
'((?0 ?9 . ?โ‚€) (?๐Ÿถ ?๐Ÿฟ . ?โ‚€) (?๐Ÿข ?๐Ÿซ . ?โ‚€) (?๐ŸŽ ?๐Ÿ— . ?โ‚€) (?๐Ÿ˜ ?๐Ÿก . ?โ‚€)
(?. ?. . ?โ€ค) (?+ ?+ . ?โ‚Š) (?- ?- . ?โ‚‹) (?= ?= . ?โ‚Œ) (?a ?a . ?โ‚)
(?e ?e . ?โ‚‘) (?o ?o . ?โ‚’) (?x ?x . ?โ‚“) (?h ?h . ?โ‚•) (?k ?k . ?โ‚–)
(?m ?m . ?โ‚˜) (?n ?n . ?โ‚™) (?p ?p . ?โ‚š) (?s ?s . ?โ‚›) (?t ?t . ?โ‚œ)
(?\( ?\) . ?โ‚)
(?i ?i . ?แตข)
(?j ?j . ?โฑผ)
(?l ?l . ?โ‚—)
(?m ?m . ?โ‚˜)
(?r ?r . ?แตฃ)
(?u ?u . ?แตค)
(?v ?v . ?แตฅ)
(?x ?x . ?โ‚“)))
(defconst jart--superscript
'((?0 ?0 . ?โฐ) (?๐Ÿถ ?๐Ÿถ . ?โฐ) (?๐Ÿข ?๐Ÿข . ?โฐ) (?๐ŸŽ ?๐ŸŽ . ?โฐ) (?๐Ÿ˜ ?๐Ÿ˜ . ?โฐ)
(?1 ?1 . ?ยน)
(?2 ?3 . ?ยฒ)
(?4 ?9 . ?โด) (?๐Ÿบ ?๐Ÿฟ . ?โด) (?๐Ÿฆ ?๐Ÿซ . ?โด) (?๐Ÿ’ ?๐Ÿ— . ?โด) (?๐Ÿœ ?๐Ÿก . ?โด)
(?i ?i . ?โฑ)
(?a ?a . ?แตƒ)
(?b ?b . ?แต‡)
(?c ?c . ?แถœ)
(?d ?d . ?แตˆ)
(?e ?e . ?แต‰)
(?f ?f . ?แถ )
(?g ?g . ?แต)
(?h ?h . ?สฐ)
(?j ?j . ?สฒ)
(?k ?k . ?แต)
(?l ?l . ?หก)
(?m ?m . ?แต)
(?n ?n . ?โฟ)
(?o ?o . ?แต’)
(?p ?p . ?แต–)
(?r ?r . ?สณ)
(?s ?s . ?หข)
(?t ?t . ?แต—)
(?u ?u . ?แต˜)
(?v ?v . ?แต›)
(?w ?w . ?สท)
(?x ?x . ?หฃ)
(?y ?y . ?สธ)
(?z ?z . ?แถป)
(?A ?B . ?แดฌ)
(?D ?E . ?แดฐ)
(?G ?P . ?แดณ)
(?R ?R . ?แดฟ)
(?T ?W . ?แต€)
(?+ ?+ . ?โบ)
(?- ?- . ?โป)
(?= ?= . ?โ€ง)
(?\( ?\) . ?โฝ)))
(defun jart--get-bounds (start end)
(or (and (use-region-p)
(cons start end))
(bounds-of-thing-at-point 'symbol)
(bounds-of-thing-at-point 'number)
(save-excursion
(forward-thing 'symbol)
(bounds-of-thing-at-point 'symbol))
(user-error "no region or thing at point")))
(defun jart--text-to-math (bounds ranges)
"Convert buffer text from START to END to italic math characters."
(let ((n 0)
(text (buffer-substring-no-properties
(car bounds) (cdr bounds))))
(while (< n (length text))
(let ((c (string-to-char (substring text n (+ n 1)))))
(dolist (r ranges)
(when (and (>= c (car r))
(<= c (cadr r)))
(store-substring
text n (char-to-string (+ (- c (car r)) (cddr r)))))))
(setq n (+ n 1)))
(delete-region (car bounds) (cdr bounds))
(goto-char (car bounds))
(insert text)
(goto-char (+ (car bounds) (length text)))))
(defconst jart-text-keys
(list (cons (kbd "C-c C-f") 'jart-text-to-math-italic)
(cons (kbd "C-c f") 'jart-text-to-italic)
(cons (kbd "C-c C-z") 'jart-text-to-fraktur)
(cons (kbd "C-c C-v") 'jart-text-to-fraktur-bold)
(cons (kbd "C-c d") 'jart-text-to-doublestruck)
(cons (kbd "C-c C-g") 'jart-text-to-gothic)
(cons (kbd "C-c b") 'jart-text-to-bold)
(cons (kbd "C-c .") 'jart-text-to-superscript)
(cons (kbd "C-c ,") 'jart-text-to-subscript)))
(let (i)
(dolist (i jart-text-keys)
(global-set-key (car i) (cdr i)))
(dolist (i (list (cons 'sh-script 'sh-mode-hook)
(cons 'text-mode 'text-mode-hook)
(cons 'gnuplot-mode 'gnuplot-mode-hook)))
(eval-after-load (car i)
`(progn
(add-hook ',(cdr i) 'jart-text-hook)))))
(provide 'text2math)
;;; text2math.el ends here
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment