-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathUtils.hs
77 lines (67 loc) · 2.12 KB
/
Utils.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
module Parser.Utils
( between'
, space'
, space''
, asterisk'
, asterisk''
, codeBlock
, transliterateCharacter
, tableDivider
, tableColumn
) where
import Data.Attoparsec.Combinator (lookAhead, many1)
import Data.Attoparsec.Text
import Data.Char (isLetter)
transliterateCharacter :: Char -> String
transliterateCharacter 'а' = "a"
transliterateCharacter 'б' = "b"
transliterateCharacter 'в' = "v"
transliterateCharacter 'г' = "g"
transliterateCharacter 'д' = "d"
transliterateCharacter 'е' = "e"
transliterateCharacter 'ё' = "e"
transliterateCharacter 'ж' = "zh"
transliterateCharacter 'з' = "z"
transliterateCharacter 'и' = "i"
transliterateCharacter 'й' = "i"
transliterateCharacter 'к' = "k"
transliterateCharacter 'л' = "l"
transliterateCharacter 'м' = "m"
transliterateCharacter 'н' = "n"
transliterateCharacter 'о' = "o"
transliterateCharacter 'п' = "p"
transliterateCharacter 'р' = "r"
transliterateCharacter 'с' = "s"
transliterateCharacter 'т' = "t"
transliterateCharacter 'у' = "y"
transliterateCharacter 'ф' = "f"
transliterateCharacter 'х' = "h"
transliterateCharacter 'ц' = "c"
transliterateCharacter 'ч' = "ch"
transliterateCharacter 'ш' = "sh"
transliterateCharacter 'щ' = "sch"
transliterateCharacter 'ъ' = ""
transliterateCharacter 'ы' = "i"
transliterateCharacter 'ь' = ""
transliterateCharacter 'э' = "e"
transliterateCharacter 'ю' = "yu"
transliterateCharacter 'я' = "ya"
transliterateCharacter ' ' = " "
transliterateCharacter s | isLetter s = [s]
| otherwise = []
between' :: Parser a -> Parser b -> Parser c -> Parser [c]
between' a b c = a *> manyTill c (try b)
space' :: Parser String
space' = choice [try $ many1 (char ' '), return ""]
space'' :: Parser String
space'' = many1 (char ' ')
asterisk' :: Parser String
asterisk' = count 1 $ char '*'
asterisk'' :: Parser String
asterisk'' = count 2 $ char '*'
codeBlock :: Parser String
codeBlock = count 3 (char '`')
tableDivider :: Parser String
tableDivider = many1 (choice [char '|', char '-'])
tableColumn :: Parser Char
tableColumn = char '|' <* space'