cakyrespa 0.0.1 → 0.0.3
raw patch · 3 files changed
+52/−27 lines, 3 filesdep ~gluturtledep ~lojbanParser
Dependency ranges changed: gluturtle, lojbanParser
Files
- cakyrespa.cabal +6/−3
- src/Language/Lojban/Read.hs +44/−22
- src/cakyrespa.hs +2/−2
cakyrespa.cabal view
@@ -2,11 +2,14 @@ cabal-version: >= 1.6 name: cakyrespa-version: 0.0.1+version: 0.0.3 stability: Alpha license: BSD3 license-file: LICENSE +author: iocikun juj <PAF01143@nifty.ne.jp>+maintainer: iocikun juj <PAF01143@nifty.ne.jp>+ category: Teaching synopsis: run turtle like LOGO with lojban description: run turtle like LOGO with lojban@@ -17,6 +20,6 @@ hs-source-dirs: src main-is: cakyrespa.hs other-modules: Language.Lojban.Read- build-depends: base >3 && <5, lojbanParser >= 0.1.4,- gluturtle >= 0.0.7, GLUT+ build-depends: base >3 && <5, lojbanParser >= 0.1.5,+ gluturtle >= 0.0.8, GLUT ghc-options: -Wall
src/Language/Lojban/Read.hs view
@@ -13,21 +13,20 @@ Time, KU, Linkargs, FIhO) import qualified Language.Lojban.Parser as P import Data.Maybe--main = do- let ret = readLojban ".i ko carna fi lo zunle la'u li panono"- print ret+import Data.Char data Lojban = Bridi Selbri [(Tag, Sumti)] | Vocative String | Free [Free] | ParseError String+ | NotImplemented String deriving (Show, Eq) data Selbri = Brivla String | Linkargs Selbri Sumti+ | NotImplementedSelbri String deriving (Show, Eq) data Sumti@@ -38,15 +37,18 @@ | LI Mex | KU | SFIhO Selbri Sumti+ | NotImplementedSumti String deriving (Show, Eq) data RelativeClause = POI Lojban | Debug String+ | NotImplementedRelativeClause String deriving (Show, Eq) data Mex = Number Double+ | NotImplementedMex String deriving (Show, Eq) data Tag@@ -54,6 +56,7 @@ | FIhO Selbri | BAI String | Time [String]+ | NotImplementedTag String deriving (Show, Eq) readLojban :: String -> Lojban@@ -70,7 +73,7 @@ process (TermsBridiTail ss _ _ (P.Selbri selbri)) = Bridi (readSelbri selbri) $ processTagSumti ss [] process (P.Selbri selbri) = Bridi (readSelbri selbri) []-process t = error $ "process: " ++ show t+process t = NotImplemented $ "process: " ++ show t processTagSumti :: [P.Sumti] -> [P.Sumti] -> [(Tag, Sumti)] processTagSumti s t = let@@ -92,10 +95,11 @@ readTag (P.FA (_, f, _) _) = let n = fromJust $ lookup f faList in (Just n, FA n) readTag (P.BAI _ _ (_, b, _) _ _) = (Nothing, BAI b) readTag (P.Time _ _ _ ts) = (Nothing, Time $ map readTime ts)-readTag t = error $ "readTag: " ++ show t+readTag t = (Nothing, NotImplementedTag $ "readTag: " ++ show t) readTime :: IntervalProperty -> String readTime (ZAhO (_, z, _) _) = z+readTime ip = "readTime: " ++ show ip faList :: [(String, Int)] faList = [@@ -114,31 +118,48 @@ readSumti (P.KU _ _) = KU readSumti (TagSumti (P.FIhO (_, "fi'o", _) _ selbri _ _) sumti) = SFIhO (readSelbri selbri) (readSumti sumti)-readSumti s = error $ "readSumti: " ++ show s+readSumti s = NotImplementedSumti $ "readSumti: " ++ show s readMex :: Operand -> Mex readMex (P.Number n _ _) = readNumber n+readMex o = NotImplementedMex $ "readMex: " ++ show o --- readNumber :: P.Number -> Mex+readNumber :: [Clause] -> Mex readNumber = Number . paToInt . map (\(_, p, _) -> p) +processKIhO :: [String] -> [String]+processKIhO = reverse . pk 3 . reverse+ where+ pk _ [] = []+ pk n ("ki'o" : rest) = replicate n "no" ++ pk 3 rest+ pk n (pa : rest)+ | n > 0 = pa : pk (n - 1) rest+ | otherwise = pa : pk 2 rest+ paToInt :: [String] -> Double-paToInt = pti . reverse+paToInt = pti . reverse . processKIhO where pti [] = 0- pti (p : rest) = fromJust (lookup p paList) + 10 * pti rest+ pti (p : rest) = fromJust (lookup' p paList) + 10 * pti rest +lookup' :: Eq a => a -> [([a], b)] -> Maybe b+lookup' _ [] = Nothing+lookup' x ((xs, y) : ys)+ | x `elem` xs = Just y+ | otherwise = lookup' x ys++paList :: [([String], Double)] paList = [- ("no", 0),- ("pa", 1),- ("re", 2),- ("ci", 3),- ("vo", 4),- ("mu", 5),- ("xa", 6),- ("ze", 7),- ("bi", 8),- ("so", 9)+ (["no", "0"], 0),+ (["pa", "1"], 1),+ (["re", "2"], 2),+ (["ci", "3"], 3),+ (["vo", "4"], 4),+ (["mu", "5"], 5),+ (["xa", "6"], 6),+ (["ze", "7"], 7),+ (["bi", "8"], 8),+ (["so", "9"], 9) ] readSumtiTail :: SumtiTail -> (Selbri, Maybe RelativeClause)@@ -146,6 +167,7 @@ (readSelbri s, Nothing) readSumtiTail (SelbriRelativeClauses s (Just r)) = (readSelbri s, Just $ readRelativeClauses r)+readSumtiTail st = (NotImplementedSelbri $ "readSumtiTail: " ++ show st, Nothing) readRelativeClauses :: P.RelativeClause -> RelativeClause readRelativeClauses (NOI (_, "poi", _) _ bridi _ _) =@@ -153,10 +175,10 @@ readRelativeClauses r = Debug $ show r readSelbri :: P.Selbri -> Selbri-readSelbri (P.Brivla (_, b, _) _) = Brivla b+readSelbri (P.Brivla (_, b, _) _) = Brivla $ map toLower b readSelbri (P.Linkargs selbri (BE (_, "be", _) _ sumti _ _ _)) = Linkargs (readSelbri selbri) (readSumti sumti)-readSelbri s = error $ "readSelbri: " ++ show s+readSelbri s = NotImplementedSelbri $ "readSelbri: " ++ show s next :: Int -> [Int] -> Int next n e
src/cakyrespa.hs view
@@ -147,11 +147,11 @@ processInput _ _ COhO = return False processInput f _ u@(Unknown _) = do outputString f ".i mi na jimpe"- putStrLn $ show u+ print u return True processInput f _ u@(UnknownSelpli _) = do outputString f ".i mi na djuno lo bi'unai selpli"- putStrLn $ show u+ print u return True processInput f _ ParseErrorC = do outputString f ".i di'u na drani fo lo gerna"