|
| 1 | +module Syllable.Port (mkSyllables,strSyllables) where |
| 2 | + |
| 3 | +import Syllable.Base |
| 4 | + |
| 5 | +groupLetters :: String -> [CV] |
| 6 | +groupLetters (c1:'u':c3:cs) |
| 7 | + | isDiphtong [c1,'u'] = V [c1, 'u'] : groupLetters (c3:cs) |
| 8 | + | c1 `elem` "qg" = C [c1, 'u'] : groupLetters (c3:cs) |
| 9 | + | isConsonant [c3] = [C [c1], V "u"] ++ groupLetters (c3:cs) |
| 10 | + | isDiphtong [c1,'U'] = V [c1, 'U'] : groupLetters (c3:cs) |
| 11 | + | c1 `elem` "QG" = C [c1, 'U'] : groupLetters (c3:cs) |
| 12 | + | isConsonant [c3] = [C [c1], V "U"] ++ groupLetters (c3:cs) |
| 13 | +groupLetters (c1:c2:cs) |
| 14 | + | isCluster [c1,c2] = C [c1, c2] : groupLetters cs |
| 15 | + | isDiphtong [c1,c2] = V [c1, c2] : groupLetters cs |
| 16 | + | isDigraph [c1,c2] = C [c1, c2] : groupLetters cs |
| 17 | + | isVowel [c1] = V [c1] : groupLetters (c2:cs) |
| 18 | + | isConsonant [c1] = C [c1] : groupLetters (c2:cs) |
| 19 | +groupLetters (c1:cs) |
| 20 | + | isVowel [c1] = V [c1] : groupLetters cs |
| 21 | + | isConsonant [c1] = C [c1] : groupLetters cs |
| 22 | +groupLetters [] = [] |
| 23 | + |
| 24 | +groupSyllables :: [CV] -> [[CV]] |
| 25 | +groupSyllables [] = [] |
| 26 | +groupSyllables [C a , V b , C c ] = [[C a, V b, C c] ] |
| 27 | +groupSyllables [ V b , C c ] = [[ V b, C c] ] |
| 28 | +groupSyllables (C a : V b : C "n" : C "s" : V e : cvs) = [C a, V b, C "n" ] : groupSyllables (C "s" : V e : cvs) |
| 29 | +groupSyllables (C a : V b : C "ss" : V e : cvs) = [C a, V b, C "s" ] : groupSyllables (C "s" : V e : cvs) |
| 30 | +groupSyllables (C a : V b : C "rr" : V e : cvs) = [C a, V b, C "r" ] : groupSyllables (C "r" : V e : cvs) |
| 31 | +groupSyllables ( V b : C "ss" : V e : cvs) = [ V b, C "s" ] : groupSyllables (C "s" : V e : cvs) |
| 32 | +groupSyllables ( V b : C "rr" : V e : cvs) = [ V b, C "r" ] : groupSyllables (C "r" : V e : cvs) |
| 33 | +groupSyllables (C a : V b : C "n" : C "s" : cvs) = [C a, V b, C "n", C "s"] : groupSyllables cvs |
| 34 | +groupSyllables (C a : V b : C "N" : C "S" : V e : cvs) = [C a, V b, C "N" ] : groupSyllables (C "S" : V e : cvs) |
| 35 | +groupSyllables (C a : V b : C "SS" : V e : cvs) = [C a, V b, C "S" ] : groupSyllables (C "S" : V e : cvs) |
| 36 | +groupSyllables (C a : V b : C "RR" : V e : cvs) = [C a, V b, C "R" ] : groupSyllables (C "R" : V e : cvs) |
| 37 | +groupSyllables ( V b : C "SS" : V e : cvs) = [ V b, C "S" ] : groupSyllables (C "S" : V e : cvs) |
| 38 | +groupSyllables ( V b : C "RR" : V e : cvs) = [ V b, C "R" ] : groupSyllables (C "R" : V e : cvs) |
| 39 | +groupSyllables (C a : V b : C "N" : C "S" : cvs) = [C a, V b, C "N", C "S"] : groupSyllables cvs |
| 40 | +groupSyllables (C a : V b : C c : C d : cvs) = [C a, V b, C c ] : groupSyllables (C d : cvs) |
| 41 | +groupSyllables ( V b : C c : C d : cvs) = [ V b, C c ] : groupSyllables (C d : cvs) |
| 42 | +groupSyllables (C a : V b : C c : V d : cvs) = [C a, V b ] : groupSyllables (C c : V d : cvs) |
| 43 | +groupSyllables ( V b : C c : V d : cvs) = [ V b ] : groupSyllables (C c : V d : cvs) |
| 44 | +groupSyllables (C a : V b : V c : cvs) = [C a, V b ] : groupSyllables (V c : cvs) |
| 45 | +groupSyllables ( V b : V c : cvs) = [ V b ] : groupSyllables (V c : cvs) |
| 46 | +groupSyllables (C a : V b : cvs) = [C a, V b ] : groupSyllables cvs |
| 47 | +groupSyllables ( V b : cvs) = [ V b ] : groupSyllables cvs |
| 48 | + |
| 49 | +showSyllables :: String -> [[CV]] |
| 50 | +showSyllables = groupSyllables . groupLetters |
| 51 | + |
| 52 | +mkSyllable :: [CV] -> Syllable |
| 53 | +mkSyllable [C a, V b, C c, C d] = Syllable a b (c ++ d) |
| 54 | +mkSyllable [C a, V b, C c ] = Syllable a b c |
| 55 | +mkSyllable [C a, V b ] = Syllable a b "" |
| 56 | +mkSyllable [ V b, C c ] = Syllable "" b c |
| 57 | +mkSyllable [ V b ] = Syllable "" b "" |
| 58 | + |
| 59 | +mkSyllables :: String -> [Syllable] |
| 60 | +mkSyllables s = map mkSyllable x |
| 61 | + where x = showSyllables s |
| 62 | + |
| 63 | +strSyllable :: Syllable -> String |
| 64 | +strSyllable (Syllable a b c) = a ++ b ++ c |
| 65 | + |
| 66 | +strSyllables :: String -> String |
| 67 | +strSyllables s = unwords $ map strSyllable $ mkSyllables s |
0 commit comments