Joshua Moerman
2 years ago
commit
95f2449117
3 changed files with 612 additions and 0 deletions
@ -0,0 +1,145 @@ |
|||||
|
{-# language OverloadedStrings #-} |
||||
|
|
||||
|
import Data.Text hiding (concat) |
||||
|
import Data.Text.IO |
||||
|
import Prelude hiding (putStr) |
||||
|
|
||||
|
flatten ls = [ (l, r) | (l, rs) <- ls, r <- rs ] |
||||
|
convLatex ls = [ (l, replace "\\" "«" r) | (l, r) <- ls ] |
||||
|
|
||||
|
-- not used, doesn't work well in conjunction with lower |
||||
|
greekUpper = convLatex |
||||
|
[ ("Α", "\\Alpha") |
||||
|
, ("Β", "\\Beta") |
||||
|
, ("Γ", "\\Gamma") |
||||
|
, ("Δ", "\\Delta") |
||||
|
, ("Ε", "\\Epsilon") |
||||
|
, ("Ζ", "\\Zeta") |
||||
|
, ("Η", "\\Eta") |
||||
|
, ("Θ", "\\Theta") |
||||
|
, ("Ι", "\\Iota") |
||||
|
, ("Κ", "\\Kappa") |
||||
|
, ("Λ", "\\Lambda") |
||||
|
, ("Μ", "\\Mu") |
||||
|
, ("Ν", "\\Nu") |
||||
|
, ("Ξ", "\\Xi") |
||||
|
, ("Ο", "\\Omikron") |
||||
|
, ("Π", "\\Pi") |
||||
|
, ("Ρ", "\\Rho") |
||||
|
, ("Σ", "\\Sigma") |
||||
|
, ("Τ", "\\Tau") |
||||
|
, ("Υ", "\\Upsilon") |
||||
|
, ("Φ", "\\Phi") |
||||
|
, ("Χ", "\\Chi") |
||||
|
, ("Ψ", "\\Psi") |
||||
|
, ("Ω", "\\Omega") |
||||
|
] |
||||
|
|
||||
|
greek = convLatex |
||||
|
[ ("α", "\\alpha") |
||||
|
, ("β", "\\beta") |
||||
|
, ("γ", "\\gamma") |
||||
|
, ("δ", "\\delta") |
||||
|
, ("ε", "\\epsilon") |
||||
|
, ("ζ", "\\zeta") |
||||
|
, ("η", "\\eta") |
||||
|
, ("θ", "\\theta") |
||||
|
, ("ι", "\\iota") |
||||
|
, ("κ", "\\kappa") |
||||
|
, ("λ", "\\lambda") |
||||
|
, ("μ", "\\mu") |
||||
|
, ("ν", "\\nu") |
||||
|
, ("ξ", "\\xi") |
||||
|
, ("ο", "\\omikron") |
||||
|
, ("π", "\\pi") |
||||
|
, ("ρ", "\\rho") |
||||
|
, ("σ", "\\sigma") |
||||
|
, ("τ", "\\tau") |
||||
|
, ("υ", "\\upsilon") |
||||
|
, ("φ", "\\phi") |
||||
|
, ("χ", "\\chi") |
||||
|
, ("ψ", "\\psi") |
||||
|
, ("ω", "\\omega") |
||||
|
] |
||||
|
|
||||
|
logic = (convLatex . flatten) |
||||
|
[ ("∧", ["\\wedge", "\\and"]) |
||||
|
, ("∨", ["\\vee", "\\vee"]) |
||||
|
, ("¬", ["\\not", "\\neg"]) |
||||
|
, ("⇔", ["\\iff"]) |
||||
|
, ("⇒", ["\\implies"]) |
||||
|
, ("⊤", ["\\top"]) |
||||
|
, ("⊥", ["\\bottom", "\\perp"]) |
||||
|
, ("∃", ["\\exists"]) |
||||
|
, ("∀", ["\\forall"]) |
||||
|
] |
||||
|
|
||||
|
set = (convLatex . flatten) |
||||
|
[ ("∅", ["\\emptyset"]) |
||||
|
, ("∪", ["\\union", "\\cup"]) |
||||
|
, ("∩", ["\\intersection", "\\cap"]) |
||||
|
, ("≠", ["\\neq"]) |
||||
|
, ("⊂", ["\\subset"]) |
||||
|
, ("⊆", ["\\subseteq"]) |
||||
|
, ("⊊", ["\\subsetneq"]) |
||||
|
, ("∊", ["\\in"]) |
||||
|
, ("∉", ["\\notin"]) |
||||
|
] |
||||
|
|
||||
|
others = convLatex |
||||
|
[ ("≈", "\\iso") |
||||
|
, ("~", "\\sim") |
||||
|
, ("≤", "\\leq") |
||||
|
, ("≥", "\\geq") |
||||
|
, ("∞", "\\infty") |
||||
|
, ("→", "\\to") |
||||
|
, ("↦", "\\mapsto") |
||||
|
, ("↠", "\\epi") |
||||
|
, ("↪", "\\mono") |
||||
|
, ("∘", "\\circ") |
||||
|
, ("·", "\\cdot") |
||||
|
, ("×", "\\times") |
||||
|
, ("∑", "\\sum") |
||||
|
, ("∏", "\\prod") |
||||
|
, ("∐", "\\coprod") |
||||
|
, ("⊕", "\\oplus") |
||||
|
, ("⊗", "\\otimes") |
||||
|
] |
||||
|
|
||||
|
mathbb = (convLatex . flatten) |
||||
|
[ ("𝔸", ["\\atoms", "\\AA"]) |
||||
|
, ("ℕ", ["\\naturals", "\\NN"]) |
||||
|
, ("ℚ", ["\\rationals", "\\QQ"]) |
||||
|
, ("ℝ", ["\\reals", "\\RR"]) |
||||
|
, ("ℤ", ["\\integers", "\\ZZ"]) |
||||
|
] |
||||
|
|
||||
|
allReplacements :: [(Text, Text)] |
||||
|
allReplacements = concat [greek, logic, set, others, mathbb] |
||||
|
|
||||
|
header = |
||||
|
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\ |
||||
|
\<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n\ |
||||
|
\<plist version=\"1.0\">\n\ |
||||
|
\<array>\n\ |
||||
|
\" |
||||
|
|
||||
|
footer = |
||||
|
"</array>\n\ |
||||
|
\</plist>\n\ |
||||
|
\" |
||||
|
|
||||
|
dict l r = |
||||
|
"\t<dict>\n\ |
||||
|
\\t\t<key>phrase</key>\n\ |
||||
|
\\t\t<string>" <> l <> "</string>\n\ |
||||
|
\\t\t<key>shortcut</key>\n\ |
||||
|
\\t\t<string>" <> r <> "</string>\n\ |
||||
|
\\t</dict>\n\ |
||||
|
\" |
||||
|
|
||||
|
main = do |
||||
|
let allReplacements = (concat [greek, logic, set, others, mathbb]) :: [(Text, Text)] |
||||
|
putStr header |
||||
|
mapM (putStr . uncurry dict) allReplacements |
||||
|
putStr footer |
@ -0,0 +1,11 @@ |
|||||
|
Replacements |
||||
|
============ |
||||
|
|
||||
|
For Mac OS. Run the following command: |
||||
|
|
||||
|
``` |
||||
|
runhaskell Main.hs > "Text Substitutions.plist" |
||||
|
``` |
||||
|
|
||||
|
Then drag & drop the file into the keyboard settings. |
||||
|
|
@ -0,0 +1,456 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> |
||||
|
<plist version="1.0"> |
||||
|
<array> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>α</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«alpha</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>β</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«beta</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>γ</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«gamma</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>δ</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«delta</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>ε</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«epsilon</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>ζ</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«zeta</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>η</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«eta</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>θ</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«theta</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>ι</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«iota</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>κ</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«kappa</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>λ</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«lambda</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>μ</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«mu</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>ν</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«nu</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>ξ</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«xi</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>ο</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«omikron</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>π</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«pi</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>ρ</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«rho</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>σ</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«sigma</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>τ</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«tau</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>υ</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«upsilon</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>φ</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«phi</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>χ</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«chi</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>ψ</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«psi</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>ω</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«omega</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>∧</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«wedge</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>∧</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«and</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>∨</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«vee</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>∨</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«vee</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>¬</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«not</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>¬</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«neg</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>⇔</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«iff</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>⇒</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«implies</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>⊤</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«top</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>⊥</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«bottom</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>⊥</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«perp</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>∃</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«exists</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>∀</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«forall</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>∅</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«emptyset</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>∪</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«union</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>∪</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«cup</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>∩</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«intersection</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>∩</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«cap</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>≠</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«neq</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>⊂</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«subset</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>⊆</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«subseteq</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>⊊</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«subsetneq</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>∊</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«in</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>∉</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«notin</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>≈</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«iso</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>~</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«sim</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>≤</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«leq</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>≥</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«geq</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>∞</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«infty</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>→</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«to</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>↦</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«mapsto</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>↠</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«epi</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>↪</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«mono</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>∘</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«circ</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>·</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«cdot</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>×</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«times</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>∑</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«sum</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>∏</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«prod</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>∐</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«coprod</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>⊕</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«oplus</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>⊗</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«otimes</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>𝔸</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«atoms</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>𝔸</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«AA</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>ℕ</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«naturals</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>ℕ</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«NN</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>ℚ</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«rationals</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>ℚ</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«QQ</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>ℝ</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«reals</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>ℝ</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«RR</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>ℤ</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«integers</string> |
||||
|
</dict> |
||||
|
<dict> |
||||
|
<key>phrase</key> |
||||
|
<string>ℤ</string> |
||||
|
<key>shortcut</key> |
||||
|
<string>«ZZ</string> |
||||
|
</dict> |
||||
|
</array> |
||||
|
</plist> |
Loading…
Reference in new issue