Main.hs 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. {-# LANGUAGE RecordWildCards #-}
  2. module Main where
  3. import qualified Data.Text as T
  4. import qualified Data.Text.IO as T
  5. import Data.TeLML.Parse
  6. data Weapon = Weapon
  7. { weaponType :: T.Text
  8. , weaponName :: T.Text
  9. , weaponAbility :: T.Text
  10. , weaponEffect :: T.Text
  11. } deriving (Eq, Show)
  12. data Equipment = Equipment
  13. { equipmentName :: T.Text
  14. , equipmentAbility :: T.Text
  15. , equipmentEffect :: T.Text
  16. } deriving (Eq, Show)
  17. data Item = Item
  18. { itemName :: T.Text
  19. , itemAbility :: T.Text
  20. , itemEffect :: T.Text
  21. } deriving (Eq, Show)
  22. pWeapon :: Parse Document [Weapon]
  23. pWeapon = select "weapon" $ arg $ do
  24. weaponType <- field "type" (arg text)
  25. weaponName <- field "name" (arg text)
  26. weaponAbility <- field "ability" (arg text)
  27. weaponEffect <- field "effect" (arg text)
  28. return Weapon { .. }
  29. prettyWeapon :: Weapon -> IO ()
  30. prettyWeapon Weapon { .. } = do
  31. case weaponType of
  32. "melee" -> putStr "\x1b[31m"
  33. "ranged" -> putStr "\x1b[34m"
  34. "magic" -> putStr "\x1b[33m"
  35. _ -> return ()
  36. T.putStr weaponName
  37. putStr " ("
  38. T.putStr weaponType
  39. putStrLn " weapon)\x1b[39m"
  40. putStr " "
  41. T.putStr weaponAbility
  42. putStr ": "
  43. T.putStrLn (T.unwords (T.words weaponEffect))
  44. pEquipment :: Parse Document [Equipment]
  45. pEquipment = select "equipment" $ arg $ do
  46. equipmentName <- field "name" (arg text)
  47. equipmentAbility <- field "ability" (arg text)
  48. equipmentEffect <- field "effect" (arg text)
  49. return Equipment { .. }
  50. prettyEquipment :: Equipment -> IO ()
  51. prettyEquipment Equipment { .. } = do
  52. putStr "\x1b[32m"
  53. T.putStr equipmentName
  54. putStrLn " (equipment)\x1b[39m"
  55. putStr " "
  56. T.putStr equipmentAbility
  57. putStr ": "
  58. T.putStrLn (T.unwords (T.words equipmentEffect))
  59. pItem :: Parse Document [Item]
  60. pItem = select "item" $ arg $ do
  61. itemName <- field "name" (arg text)
  62. itemAbility <- field "ability" (arg text)
  63. itemEffect <- field "effect" (arg text)
  64. return Item { .. }
  65. prettyItem :: Item -> IO ()
  66. prettyItem Item { .. } = do
  67. putStr "\x1b[35m"
  68. T.putStr itemName
  69. putStrLn " (item)\x1b[39m"
  70. putStr " "
  71. T.putStr itemAbility
  72. putStr ": "
  73. T.putStrLn (T.unwords (T.words itemEffect))
  74. main :: IO ()
  75. main = do
  76. rs <- getContents
  77. case decode rs pWeapon of
  78. Left err -> putStrLn err
  79. Right x -> mapM_ prettyWeapon x
  80. case decode rs pEquipment of
  81. Left err -> putStrLn err
  82. Right x -> mapM_ prettyEquipment x
  83. case decode rs pItem of
  84. Left err -> putStrLn err
  85. Right x -> mapM_ prettyItem x