Skip to content

Instantly share code, notes, and snippets.

@pasberth
Last active January 1, 2016 10:18
Show Gist options
  • Save pasberth/8130120 to your computer and use it in GitHub Desktop.
Save pasberth/8130120 to your computer and use it in GitHub Desktop.

INSTALL

cabal-dev install
name: coolch
version: 0.0.1
synopsis: TODO
description: TODO
author: Pasberth
maintainer: Pasberth <pasberth@gmail.com>
copyright: Copyright (C) 2013 Pasberth
build-type: Simple
stability: experimental
cabal-version: >=1.10
Executable coolch
Build-Depends:
base==4.6.0.1,
hashable==1.2.1.0,
unordered-containers==0.2.3.3
ghc-options: -Wall -O2
Main-Is: Main.hs
Hs-Source-Dirs: .
require 'nokogiri'
require 'open-uri'
doc = Nokogiri::HTML(open('http://www.w3.org/TR/MathML2/sans-serif.html'))
chs = ('A'..'Z').to_a + ('a'..'z').to_a + ('0'..'9').to_a
doc.xpath('//table/tr').each do |x|
y = x.children[0]
next if y.name != "td"
ch = chs.shift
puts " ('%s', '\\x%s')," % [ch, y.text]
end
import qualified System.Environment as E
import qualified Data.HashMap.Strict as M
mathematicalScriptMap :: M.HashMap Char Char
mathematicalScriptMap = M.fromList [
('A', '\x1D49C'),
('B', '\x0212C'),
('C', '\x1D49E'),
('D', '\x1D49F'),
('E', '\x02130'),
('F', '\x02131'),
('G', '\x1D4A2'),
('H', '\x0210B'),
('I', '\x02110'),
('J', '\x1D4A5'),
('K', '\x1D4A6'),
('L', '\x02112'),
('M', '\x02133'),
('N', '\x1D4A9'),
('O', '\x1D4AA'),
('P', '\x1D4AB'),
('Q', '\x1D4AC'),
('R', '\x0211B'),
('S', '\x1D4AE'),
('T', '\x1D4AF'),
('U', '\x1D4B0'),
('V', '\x1D4B1'),
('W', '\x1D4B2'),
('X', '\x1D4B3'),
('Y', '\x1D4B4'),
('Z', '\x1D4B5'),
('a', '\x1D4B6'),
('b', '\x1D4B7'),
('c', '\x1D4B8'),
('d', '\x1D4B9'),
('e', '\x0212F'),
('f', '\x1D4BB'),
('g', '\x0210A'),
('h', '\x1D4BD'),
('i', '\x1D4BE'),
('j', '\x1D4BF'),
('k', '\x1D4C0'),
('l', '\x1D4C1'),
('m', '\x1D4C2'),
('n', '\x1D4C3'),
('o', '\x02134'),
('p', '\x1D4C5'),
('q', '\x1D4C6'),
('r', '\x1D4C7'),
('s', '\x1D4C8'),
('t', '\x1D4C9'),
('u', '\x1D4CA'),
('v', '\x1D4CB'),
('w', '\x1D4CC'),
('x', '\x1D4CD'),
('y', '\x1D4CE'),
('z', '\x1D4CF')
]
mathematicalBoldScriptMap :: M.HashMap Char Char
mathematicalBoldScriptMap = M.fromList [
('A', '\x1D4D0'),
('B', '\x1D4D1'),
('C', '\x1D4D2'),
('D', '\x1D4D3'),
('E', '\x1D4D4'),
('F', '\x1D4D5'),
('G', '\x1D4D6'),
('H', '\x1D4D7'),
('I', '\x1D4D8'),
('J', '\x1D4D9'),
('K', '\x1D4DA'),
('L', '\x1D4DB'),
('M', '\x1D4DC'),
('N', '\x1D4DD'),
('O', '\x1D4DE'),
('P', '\x1D4DF'),
('Q', '\x1D4E0'),
('R', '\x1D4E1'),
('S', '\x1D4E2'),
('T', '\x1D4E3'),
('U', '\x1D4E4'),
('V', '\x1D4E5'),
('W', '\x1D4E6'),
('X', '\x1D4E7'),
('Y', '\x1D4E8'),
('Z', '\x1D4E9'),
('a', '\x1D4EA'),
('b', '\x1D4EB'),
('c', '\x1D4EC'),
('d', '\x1D4ED'),
('e', '\x1D4EE'),
('f', '\x1D4EF'),
('g', '\x1D4F0'),
('h', '\x1D4F1'),
('i', '\x1D4F2'),
('j', '\x1D4F3'),
('k', '\x1D4F4'),
('l', '\x1D4F5'),
('m', '\x1D4F6'),
('n', '\x1D4F7'),
('o', '\x1D4F8'),
('p', '\x1D4F9'),
('q', '\x1D4FA'),
('r', '\x1D4FB'),
('s', '\x1D4FC'),
('t', '\x1D4FD'),
('u', '\x1D4FE'),
('v', '\x1D4FF'),
('w', '\x1D500'),
('x', '\x1D501'),
('y', '\x1D502'),
('z', '\x1D503')
]
mathematicalBoldFrakturMap :: M.HashMap Char Char
mathematicalBoldFrakturMap = M.fromList [
('A', '\x1D56C'),
('B', '\x1D56D'),
('C', '\x1D56E'),
('D', '\x1D56F'),
('E', '\x1D570'),
('F', '\x1D571'),
('G', '\x1D572'),
('H', '\x1D573'),
('I', '\x1D574'),
('J', '\x1D575'),
('K', '\x1D576'),
('L', '\x1D577'),
('M', '\x1D578'),
('N', '\x1D579'),
('O', '\x1D57A'),
('P', '\x1D57B'),
('Q', '\x1D57C'),
('R', '\x1D57D'),
('S', '\x1D57E'),
('T', '\x1D57F'),
('U', '\x1D580'),
('V', '\x1D581'),
('W', '\x1D582'),
('X', '\x1D583'),
('Y', '\x1D584'),
('Z', '\x1D585'),
('a', '\x1D586'),
('b', '\x1D587'),
('c', '\x1D588'),
('d', '\x1D589'),
('e', '\x1D58A'),
('f', '\x1D58B'),
('g', '\x1D58C'),
('h', '\x1D58D'),
('i', '\x1D58E'),
('j', '\x1D58F'),
('k', '\x1D590'),
('l', '\x1D591'),
('m', '\x1D592'),
('n', '\x1D593'),
('o', '\x1D594'),
('p', '\x1D595'),
('q', '\x1D596'),
('r', '\x1D597'),
('s', '\x1D598'),
('t', '\x1D599'),
('u', '\x1D59A'),
('v', '\x1D59B'),
('w', '\x1D59C'),
('x', '\x1D59D'),
('y', '\x1D59E'),
('z', '\x1D59F')
]
mathematicalFrakturMap :: M.HashMap Char Char
mathematicalFrakturMap = M.fromList [
('A', '\x1D504'),
('B', '\x1D505'),
('C', '\x212D'),
('D', '\x1D507'),
('E', '\x1D508'),
('F', '\x1D509'),
('G', '\x1D50A'),
('H', '\x210C'),
('I', '\x2111'),
('J', '\x1D50D'),
('K', '\x1D50E'),
('L', '\x1D50F'),
('M', '\x1D510'),
('N', '\x1D511'),
('O', '\x1D512'),
('P', '\x1D513'),
('Q', '\x1D514'),
('R', '\x211C'),
('S', '\x1D516'),
('T', '\x1D517'),
('U', '\x1D518'),
('V', '\x1D519'),
('W', '\x1D51A'),
('X', '\x1D51B'),
('Y', '\x1D51C'),
('Z', '\x2128'),
('a', '\x1D51E'),
('b', '\x1D51F'),
('c', '\x1D520'),
('d', '\x1D521'),
('e', '\x1D522'),
('f', '\x1D523'),
('g', '\x1D524'),
('h', '\x1D525'),
('i', '\x1D526'),
('j', '\x1D527'),
('k', '\x1D528'),
('l', '\x1D529'),
('m', '\x1D52A'),
('n', '\x1D52B'),
('o', '\x1D52C'),
('p', '\x1D52D'),
('q', '\x1D52E'),
('r', '\x1D52F'),
('s', '\x1D530'),
('t', '\x1D531'),
('u', '\x1D532'),
('v', '\x1D533'),
('w', '\x1D534'),
('x', '\x1D535'),
('y', '\x1D536'),
('z', '\x1D537')
]
mathematicalDoubleStruckMap :: M.HashMap Char Char
mathematicalDoubleStruckMap = M.fromList [
('A', '\x1D538'),
('B', '\x1D539'),
('C', '\x02102'),
('D', '\x1D53B'),
('E', '\x1D53C'),
('F', '\x1D53D'),
('G', '\x1D53E'),
('H', '\x0210D'),
('I', '\x1D540'),
('J', '\x1D541'),
('K', '\x1D542'),
('L', '\x1D543'),
('M', '\x1D544'),
('N', '\x02115'),
('O', '\x1D546'),
('P', '\x02119'),
('Q', '\x0211A'),
('R', '\x0211D'),
('S', '\x1D54A'),
('T', '\x1D54B'),
('U', '\x1D54C'),
('V', '\x1D54D'),
('W', '\x1D54E'),
('X', '\x1D54F'),
('Y', '\x1D550'),
('Z', '\x02124'),
('a', '\x1D552'),
('b', '\x1D553'),
('c', '\x1D554'),
('d', '\x1D555'),
('e', '\x1D556'),
('f', '\x1D557'),
('g', '\x1D558'),
('h', '\x1D559'),
('i', '\x1D55A'),
('j', '\x1D55B'),
('k', '\x1D55C'),
('l', '\x1D55D'),
('m', '\x1D55E'),
('n', '\x1D55F'),
('o', '\x1D560'),
('p', '\x1D561'),
('q', '\x1D562'),
('r', '\x1D563'),
('s', '\x1D564'),
('t', '\x1D565'),
('u', '\x1D566'),
('v', '\x1D567'),
('w', '\x1D568'),
('x', '\x1D569'),
('y', '\x1D56A'),
('z', '\x1D56B'),
('0', '\x1D7D8'),
('1', '\x1D7D9'),
('2', '\x1D7DA'),
('3', '\x1D7DB'),
('4', '\x1D7DC'),
('5', '\x1D7DD'),
('6', '\x1D7DE'),
('7', '\x1D7DF'),
('8', '\x1D7E0'),
('9', '\x1D7E1')
]
mathematicalSansSerifMap :: M.HashMap Char Char
mathematicalSansSerifMap = M.fromList [
('A', '\x1D5A0'),
('B', '\x1D5A1'),
('C', '\x1D5A2'),
('D', '\x1D5A3'),
('E', '\x1D5A4'),
('F', '\x1D5A5'),
('G', '\x1D5A6'),
('H', '\x1D5A7'),
('I', '\x1D5A8'),
('J', '\x1D5A9'),
('K', '\x1D5AA'),
('L', '\x1D5AB'),
('M', '\x1D5AC'),
('N', '\x1D5AD'),
('O', '\x1D5AE'),
('P', '\x1D5AF'),
('Q', '\x1D5B0'),
('R', '\x1D5B1'),
('S', '\x1D5B2'),
('T', '\x1D5B3'),
('U', '\x1D5B4'),
('V', '\x1D5B5'),
('W', '\x1D5B6'),
('X', '\x1D5B7'),
('Y', '\x1D5B8'),
('Z', '\x1D5B9'),
('a', '\x1D5BA'),
('b', '\x1D5BB'),
('c', '\x1D5BC'),
('d', '\x1D5BD'),
('e', '\x1D5BE'),
('f', '\x1D5BF'),
('g', '\x1D5C0'),
('h', '\x1D5C1'),
('i', '\x1D5C2'),
('j', '\x1D5C3'),
('k', '\x1D5C4'),
('l', '\x1D5C5'),
('m', '\x1D5C6'),
('n', '\x1D5C7'),
('o', '\x1D5C8'),
('p', '\x1D5C9'),
('q', '\x1D5CA'),
('r', '\x1D5CB'),
('s', '\x1D5CC'),
('t', '\x1D5CD'),
('u', '\x1D5CE'),
('v', '\x1D5CF'),
('w', '\x1D5D0'),
('x', '\x1D5D1'),
('y', '\x1D5D2'),
('z', '\x1D5D3'),
('0', '\x1D7E2'),
('1', '\x1D7E3'),
('2', '\x1D7E4'),
('3', '\x1D7E5'),
('4', '\x1D7E6'),
('5', '\x1D7E7'),
('6', '\x1D7E8'),
('7', '\x1D7E9'),
('8', '\x1D7EA'),
('9', '\x1D7EB')
]
convertWith :: String -> M.HashMap Char Char -> String
convertWith s m = map (\ch -> maybe ch id (M.lookup ch m)) s
printWith :: String -> M.HashMap Char Char -> IO ()
printWith s = putStrLn . convertWith s
main = do
argv <- E.getArgs
case argv of
s : [] -> printWith s mathematicalScriptMap
"--script" : s : [] -> printWith s mathematicalScriptMap
"-s" : s : [] -> printWith s mathematicalScriptMap
"--boldscript" : s : [] -> printWith s mathematicalBoldScriptMap
"-bs" : s : [] -> printWith s mathematicalBoldScriptMap
"--double-struck" : s : [] -> printWith s mathematicalDoubleStruckMap
"-ds" : s : [] -> printWith s mathematicalDoubleStruckMap
"--fraktur" : s : [] -> printWith s mathematicalFrakturMap
"-f" : s : [] -> printWith s mathematicalFrakturMap
"--bold-fraktur" : s : [] -> printWith s mathematicalBoldFrakturMap
"-bf" : s : [] -> printWith s mathematicalBoldFrakturMap
"--sans-serif" : s : [] -> printWith s mathematicalSansSerifMap
"-ss" : s : [] -> printWith s mathematicalSansSerifMap
_ -> error "argument error"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment