packages feed

bookhound 0.1.10.0 → 0.1.11.0

raw patch · 13 files changed

+2/−957 lines, 13 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

- Bookhound.Operations.Finder: class Finder a
- Bookhound.Operations.Finder: find :: Finder a => ((String, a) -> Bool) -> a -> Maybe a
- Bookhound.Operations.Finder: findAll :: Finder a => ((String, a) -> Bool) -> a -> [a]
- Bookhound.Operations.Finder: findByKeys :: Finder a => [String] -> a -> Maybe a
- Bookhound.Operations.Finder: findByPath :: Finder a => String -> a -> Maybe a
- Bookhound.Operations.Finder: instance Bookhound.Operations.Finder.Finder Bookhound.SyntaxTrees.Json.JsExpression
- Bookhound.Operations.Finder: instance Bookhound.Operations.Finder.Finder Bookhound.SyntaxTrees.Toml.TomlExpression
- Bookhound.Operations.Finder: instance Bookhound.Operations.Finder.Finder Bookhound.SyntaxTrees.Yaml.YamlExpression
- Bookhound.Operations.Finder: toList :: Finder a => a -> [(String, a)]
- Bookhound.Operations.ToJson: class ToJson a
- Bookhound.Operations.ToJson: instance Bookhound.Operations.ToJson.ToJson Bookhound.SyntaxTrees.Json.JsExpression
- Bookhound.Operations.ToJson: instance Bookhound.Operations.ToJson.ToJson Bookhound.SyntaxTrees.Toml.TomlExpression
- Bookhound.Operations.ToJson: instance Bookhound.Operations.ToJson.ToJson Bookhound.SyntaxTrees.Xml.XmlExpression
- Bookhound.Operations.ToJson: instance Bookhound.Operations.ToJson.ToJson Bookhound.SyntaxTrees.Yaml.YamlExpression
- Bookhound.Operations.ToJson: instance Bookhound.Operations.ToJson.ToJson GHC.Base.String
- Bookhound.Operations.ToJson: instance Bookhound.Operations.ToJson.ToJson GHC.Integer.Type.Integer
- Bookhound.Operations.ToJson: instance Bookhound.Operations.ToJson.ToJson GHC.Types.Bool
- Bookhound.Operations.ToJson: instance Bookhound.Operations.ToJson.ToJson GHC.Types.Char
- Bookhound.Operations.ToJson: instance Bookhound.Operations.ToJson.ToJson GHC.Types.Double
- Bookhound.Operations.ToJson: instance Bookhound.Operations.ToJson.ToJson GHC.Types.Int
- Bookhound.Operations.ToJson: instance Bookhound.Operations.ToJson.ToJson a => Bookhound.Operations.ToJson.ToJson (Data.Map.Internal.Map GHC.Base.String a)
- Bookhound.Operations.ToJson: instance Bookhound.Operations.ToJson.ToJson a => Bookhound.Operations.ToJson.ToJson (GHC.Maybe.Maybe a)
- Bookhound.Operations.ToJson: instance Bookhound.Operations.ToJson.ToJson a => Bookhound.Operations.ToJson.ToJson [a]
- Bookhound.Operations.ToJson: toJson :: ToJson a => a -> JsExpression
- Bookhound.Operations.ToXml: class ToXml a
- Bookhound.Operations.ToXml: instance Bookhound.Operations.ToJson.ToJson a => Bookhound.Operations.ToXml.ToXml a
- Bookhound.Operations.ToXml: instance Bookhound.Operations.ToXml.ToXml Bookhound.SyntaxTrees.Json.JsExpression
- Bookhound.Operations.ToXml: instance Bookhound.Operations.ToXml.ToXml Bookhound.SyntaxTrees.Xml.XmlExpression
- Bookhound.Operations.ToXml: toXml :: ToXml a => a -> XmlExpression
- Bookhound.Operations.ToYaml: class ToYaml a
- Bookhound.Operations.ToYaml: instance Bookhound.Operations.ToJson.ToJson a => Bookhound.Operations.ToYaml.ToYaml a
- Bookhound.Operations.ToYaml: instance Bookhound.Operations.ToYaml.ToYaml Bookhound.SyntaxTrees.Json.JsExpression
- Bookhound.Operations.ToYaml: instance Bookhound.Operations.ToYaml.ToYaml Bookhound.SyntaxTrees.Yaml.YamlExpression
- Bookhound.Operations.ToYaml: toYaml :: ToYaml a => a -> YamlExpression
- Bookhound.Parsers.Json: array :: Parser JsExpression
- Bookhound.Parsers.Json: bool :: Parser JsExpression
- Bookhound.Parsers.Json: json :: Parser JsExpression
- Bookhound.Parsers.Json: nil :: Parser JsExpression
- Bookhound.Parsers.Json: number :: Parser JsExpression
- Bookhound.Parsers.Json: object :: Parser JsExpression
- Bookhound.Parsers.Json: string :: Parser JsExpression
- Bookhound.Parsers.Toml: array :: Parser TomlExpression
- Bookhound.Parsers.Toml: bool :: Parser TomlExpression
- Bookhound.Parsers.Toml: float :: Parser TomlExpression
- Bookhound.Parsers.Toml: inlineTable :: Parser TomlExpression
- Bookhound.Parsers.Toml: integer :: Parser TomlExpression
- Bookhound.Parsers.Toml: nil :: Parser TomlExpression
- Bookhound.Parsers.Toml: string :: Parser TomlExpression
- Bookhound.Parsers.Toml: toml :: Parser TomlExpression
- Bookhound.Parsers.Xml: branchExpr :: Parser XmlExpression
- Bookhound.Parsers.Xml: leafExpr :: Parser XmlExpression
- Bookhound.Parsers.Xml: literal :: Parser [XmlExpression]
- Bookhound.Parsers.Xml: xml :: Parser XmlExpression
- Bookhound.Parsers.Yaml: bool :: Parser YamlExpression
- Bookhound.Parsers.Yaml: float :: Parser YamlExpression
- Bookhound.Parsers.Yaml: integer :: Parser YamlExpression
- Bookhound.Parsers.Yaml: list :: Int -> Parser YamlExpression
- Bookhound.Parsers.Yaml: mapping :: Int -> Parser YamlExpression
- Bookhound.Parsers.Yaml: nil :: Parser YamlExpression
- Bookhound.Parsers.Yaml: string :: Int -> Parser YamlExpression
- Bookhound.Parsers.Yaml: yaml :: Parser YamlExpression
- Bookhound.SyntaxTrees.Json: JsArray :: [JsExpression] -> JsExpression
- Bookhound.SyntaxTrees.Json: JsBool :: Bool -> JsExpression
- Bookhound.SyntaxTrees.Json: JsNull :: JsExpression
- Bookhound.SyntaxTrees.Json: JsNumber :: Double -> JsExpression
- Bookhound.SyntaxTrees.Json: JsObject :: Map String JsExpression -> JsExpression
- Bookhound.SyntaxTrees.Json: JsString :: String -> JsExpression
- Bookhound.SyntaxTrees.Json: data JsExpression
- Bookhound.SyntaxTrees.Json: instance GHC.Classes.Eq Bookhound.SyntaxTrees.Json.JsExpression
- Bookhound.SyntaxTrees.Json: instance GHC.Classes.Ord Bookhound.SyntaxTrees.Json.JsExpression
- Bookhound.SyntaxTrees.Json: instance GHC.Show.Show Bookhound.SyntaxTrees.Json.JsExpression
- Bookhound.SyntaxTrees.Toml: Inline :: TableType
- Bookhound.SyntaxTrees.Toml: Standard :: TableType
- Bookhound.SyntaxTrees.Toml: TomlArray :: [TomlExpression] -> TomlExpression
- Bookhound.SyntaxTrees.Toml: TomlBool :: Bool -> TomlExpression
- Bookhound.SyntaxTrees.Toml: TomlDate :: Day -> TomlExpression
- Bookhound.SyntaxTrees.Toml: TomlDateTime :: ZonedTime -> TomlExpression
- Bookhound.SyntaxTrees.Toml: TomlFloat :: Double -> TomlExpression
- Bookhound.SyntaxTrees.Toml: TomlInteger :: Integer -> TomlExpression
- Bookhound.SyntaxTrees.Toml: TomlNull :: TomlExpression
- Bookhound.SyntaxTrees.Toml: TomlString :: String -> TomlExpression
- Bookhound.SyntaxTrees.Toml: TomlTable :: TableType -> Map String TomlExpression -> TomlExpression
- Bookhound.SyntaxTrees.Toml: TomlTime :: TimeOfDay -> TomlExpression
- Bookhound.SyntaxTrees.Toml: TopLevel :: TableType
- Bookhound.SyntaxTrees.Toml: data TableType
- Bookhound.SyntaxTrees.Toml: data TomlExpression
- Bookhound.SyntaxTrees.Toml: instance GHC.Classes.Eq Bookhound.SyntaxTrees.Toml.TableType
- Bookhound.SyntaxTrees.Toml: instance GHC.Classes.Eq Bookhound.SyntaxTrees.Toml.TomlExpression
- Bookhound.SyntaxTrees.Toml: instance GHC.Classes.Ord Bookhound.SyntaxTrees.Toml.TableType
- Bookhound.SyntaxTrees.Toml: instance GHC.Classes.Ord Bookhound.SyntaxTrees.Toml.TomlExpression
- Bookhound.SyntaxTrees.Toml: instance GHC.Show.Show Bookhound.SyntaxTrees.Toml.TomlExpression
- Bookhound.SyntaxTrees.Xml: XmlExpression :: String -> Map String String -> [XmlExpression] -> XmlExpression
- Bookhound.SyntaxTrees.Xml: [$sel:expressions:XmlExpression] :: XmlExpression -> [XmlExpression]
- Bookhound.SyntaxTrees.Xml: [$sel:fields:XmlExpression] :: XmlExpression -> Map String String
- Bookhound.SyntaxTrees.Xml: [$sel:tagName:XmlExpression] :: XmlExpression -> String
- Bookhound.SyntaxTrees.Xml: data XmlExpression
- Bookhound.SyntaxTrees.Xml: find :: (XmlExpression -> Bool) -> XmlExpression -> Maybe XmlExpression
- Bookhound.SyntaxTrees.Xml: findAll :: (XmlExpression -> Bool) -> XmlExpression -> [XmlExpression]
- Bookhound.SyntaxTrees.Xml: flatten :: XmlExpression -> [XmlExpression]
- Bookhound.SyntaxTrees.Xml: instance GHC.Classes.Eq Bookhound.SyntaxTrees.Xml.XmlExpression
- Bookhound.SyntaxTrees.Xml: instance GHC.Classes.Ord Bookhound.SyntaxTrees.Xml.XmlExpression
- Bookhound.SyntaxTrees.Xml: instance GHC.Show.Show Bookhound.SyntaxTrees.Xml.XmlExpression
- Bookhound.SyntaxTrees.Xml: literalExpression :: String -> XmlExpression
- Bookhound.SyntaxTrees.Yaml: Inline :: CollectionType
- Bookhound.SyntaxTrees.Yaml: Standard :: CollectionType
- Bookhound.SyntaxTrees.Yaml: YamlBool :: Bool -> YamlExpression
- Bookhound.SyntaxTrees.Yaml: YamlDate :: Day -> YamlExpression
- Bookhound.SyntaxTrees.Yaml: YamlDateTime :: ZonedTime -> YamlExpression
- Bookhound.SyntaxTrees.Yaml: YamlFloat :: Double -> YamlExpression
- Bookhound.SyntaxTrees.Yaml: YamlInteger :: Integer -> YamlExpression
- Bookhound.SyntaxTrees.Yaml: YamlList :: CollectionType -> [YamlExpression] -> YamlExpression
- Bookhound.SyntaxTrees.Yaml: YamlMap :: CollectionType -> Map String YamlExpression -> YamlExpression
- Bookhound.SyntaxTrees.Yaml: YamlNull :: YamlExpression
- Bookhound.SyntaxTrees.Yaml: YamlString :: String -> YamlExpression
- Bookhound.SyntaxTrees.Yaml: YamlTime :: TimeOfDay -> YamlExpression
- Bookhound.SyntaxTrees.Yaml: data CollectionType
- Bookhound.SyntaxTrees.Yaml: data YamlExpression
- Bookhound.SyntaxTrees.Yaml: instance GHC.Classes.Eq Bookhound.SyntaxTrees.Yaml.CollectionType
- Bookhound.SyntaxTrees.Yaml: instance GHC.Classes.Eq Bookhound.SyntaxTrees.Yaml.YamlExpression
- Bookhound.SyntaxTrees.Yaml: instance GHC.Classes.Ord Bookhound.SyntaxTrees.Yaml.CollectionType
- Bookhound.SyntaxTrees.Yaml: instance GHC.Classes.Ord Bookhound.SyntaxTrees.Yaml.YamlExpression
- Bookhound.SyntaxTrees.Yaml: instance GHC.Show.Show Bookhound.SyntaxTrees.Yaml.YamlExpression

Files

bookhound.cabal view
@@ -5,8 +5,8 @@ -- see: https://github.com/sol/hpack  name:           bookhound-version:        0.1.10.0-synopsis:       Simple Parser Combinators & Parsers+version:        0.1.11.0+synopsis:       Simple Parser Combinators description:    Please see the README on GitHub at <https://github.com/albertprz/bookhound#readme> category:       Parsers homepage:       https://github.com/albertprz/bookhound#readme@@ -31,25 +31,13 @@       Bookhound.Internal.Foldable       Bookhound.Internal.Map       Bookhound.Internal.String-      Bookhound.Operations.Finder-      Bookhound.Operations.ToJson-      Bookhound.Operations.ToXml-      Bookhound.Operations.ToYaml       Bookhound.Parser       Bookhound.ParserCombinators       Bookhound.Parsers.Char       Bookhound.Parsers.Collections       Bookhound.Parsers.DateTime-      Bookhound.Parsers.Json       Bookhound.Parsers.Number       Bookhound.Parsers.String-      Bookhound.Parsers.Toml-      Bookhound.Parsers.Xml-      Bookhound.Parsers.Yaml-      Bookhound.SyntaxTrees.Json-      Bookhound.SyntaxTrees.Toml-      Bookhound.SyntaxTrees.Xml-      Bookhound.SyntaxTrees.Yaml   other-modules:       Paths_bookhound   hs-source-dirs:
− src/Bookhound/Operations/Finder.hs
@@ -1,85 +0,0 @@-module Bookhound.Operations.Finder (Finder(..)) where---import Bookhound.Parser            (runParser)-import Bookhound.ParserCombinators (IsMatch (..), (<|>), (|*))-import Bookhound.Parsers.Char      (dot)-import Bookhound.Parsers.Number    (unsignedInt)-import Bookhound.Parsers.String    (withinSquareBrackets)-import Bookhound.SyntaxTrees.Json  (JsExpression (..))-import Bookhound.SyntaxTrees.Toml  (TomlExpression (..))-import Bookhound.SyntaxTrees.Yaml  (YamlExpression (..))---import Data.Either (fromRight)-import Data.Maybe  (listToMaybe)--import qualified Data.Map  as Map-import           Data.Text (pack)----class Finder a where--  toList :: a -> [(String, a)]-  findAll :: ((String, a) -> Bool) -> a -> [a]-  find :: ((String, a) -> Bool) -> a -> Maybe a-  findByKeys :: [String] -> a -> Maybe a-  findByPath :: String -> a -> Maybe a---  findAll f = fmap snd . filter f . toList-  find f = listToMaybe . findAll f--  findByKeys []       expr = Just expr-  findByKeys (x : xs) expr = findByKey x expr >>= findByKeys xs  where--    findByKey key = find (\(str, _) -> str == key)--  findByPath path = findByKeys pathSeq where--    pathSeq = fromRight [] $ runParser parsePath $ pack path-    parsePath = is '$' *> ((index <|> key) |*)--    index = show <$> withinSquareBrackets unsignedInt-    key   = dot *> word-    word  = (noneOf ['.', '['] |*)----instance Finder JsExpression where-  toList = \case-    nil@JsNull       -> [("", nil)]-    n@(JsNumber _)   -> [("", n)]-    bool@(JsBool _)  -> [("", bool)]-    str@(JsString _) -> [("", str)]-    JsArray arr      -> zip (show <$> [0 .. length arr - 1]) arr-    JsObject obj     -> Map.toList obj---instance Finder YamlExpression where-  toList = \case-    nil@YamlNull              -> [("", nil)]-    n@(YamlInteger _)         -> [("", n)]-    n@(YamlFloat _)           -> [("", n)]-    bool@(YamlBool _)         -> [("", bool)]-    str@(YamlString _)        -> [("", str)]-    date@(YamlDate _)         -> [("", date)]-    time@(YamlTime _)         -> [("", time)]-    dateTime@(YamlDateTime _) -> [("", dateTime)]-    YamlList _ arr            -> zip (show <$> [0 .. length arr - 1]) arr-    YamlMap _ obj             -> Map.toList obj---instance Finder TomlExpression where-  toList = \case-    nil@TomlNull              -> [("", nil)]-    n@(TomlInteger _)         -> [("", n)]-    n@(TomlFloat _)           -> [("", n)]-    bool@(TomlBool _)         -> [("", bool)]-    str@(TomlString _)        -> [("", str)]-    date@(TomlDate _)         -> [("", date)]-    time@(TomlTime _)         -> [("", time)]-    dateTime@(TomlDateTime _) -> [("", dateTime)]-    TomlArray arr             -> zip (show <$> [0 .. length arr - 1]) arr-    TomlTable _ obj           -> Map.toList obj
− src/Bookhound/Operations/ToJson.hs
@@ -1,97 +0,0 @@-module Bookhound.Operations.ToJson (ToJson(..)) where--import Bookhound.Parser            (runParser)-import Bookhound.ParserCombinators (IsMatch (..), maybeWithin, (<|>), (|*))-import Bookhound.Parsers.Json      (json)-import Bookhound.Parsers.String    (spacing)-import Bookhound.SyntaxTrees.Json  (JsExpression (..))-import Bookhound.SyntaxTrees.Toml  (TomlExpression (..))-import Bookhound.SyntaxTrees.Xml   (XmlExpression (..))-import Bookhound.SyntaxTrees.Yaml  (YamlExpression (..))--import Data.Either (fromRight)-import Data.Text   (pack)--import           Data.Map (Map, elems)-import qualified Data.Map as Map---class ToJson a where-  toJson :: a -> JsExpression---instance {-# OVERLAPPABLE #-} ToJson JsExpression where-  toJson = id--instance ToJson XmlExpression where--  toJson XmlExpression { tagName = tag, expressions = exprs, .. }-    | tag == "literal"  = fromRight JsNull . runParser literalParser .-                              pack . head . elems $ fields-    | tag == "array"    = JsArray $ childExprToJson <$> exprs-    | tag == "object"   = JsObject . Map.fromList $ (\x -> (tagName x, childExprToJson x)) <$>-                                        exprs-    | otherwise          = JsNull   where--        literalParser = json <|> (JsString <$> maybeWithin spacing (isNot '<' |*))--        childExprToJson = toJson . head . (expressions)---instance ToJson YamlExpression where--  toJson = \case-    YamlNull              -> JsNull-    YamlInteger n         -> JsNumber $ fromIntegral n-    YamlFloat n           -> JsNumber n-    YamlBool bool         -> JsBool bool-    YamlString str        -> JsString str-    YamlDate date         -> JsString $ show date-    YamlTime time         -> JsString $ show time-    YamlDateTime dateTime -> JsString $ show dateTime-    YamlList _ list       -> JsArray $ toJson <$> list-    YamlMap  _ mapping    -> JsObject $ toJson <$> mapping---instance ToJson TomlExpression where--  toJson = \case-    TomlNull              -> JsNull-    TomlInteger n         -> JsNumber $ fromIntegral n-    TomlFloat n           -> JsNumber n-    TomlBool bool         -> JsBool bool-    TomlString str        -> JsString str-    TomlDate date         -> JsString $ show date-    TomlTime time         -> JsString $ show time-    TomlDateTime dateTime -> JsString $ show dateTime-    TomlArray list        -> JsArray $ toJson <$> list-    TomlTable _ mapping   -> JsObject $ toJson <$> mapping----instance ToJson String where-  toJson = JsString--instance ToJson Char where-  toJson = JsString . pure--instance ToJson Int where-  toJson = JsNumber . fromIntegral--instance ToJson Integer where-  toJson = JsNumber . fromIntegral--instance ToJson Double where-  toJson = JsNumber--instance ToJson Bool where-  toJson = JsBool--instance ToJson a => ToJson [a] where-  toJson = JsArray . fmap toJson--instance ToJson a => ToJson (Map String a) where-  toJson = JsObject . fmap toJson--instance ToJson a => ToJson (Maybe a) where-  toJson = maybe JsNull toJson
− src/Bookhound/Operations/ToXml.hs
@@ -1,42 +0,0 @@-{-# LANGUAGE UndecidableInstances #-}--module Bookhound.Operations.ToXml (ToXml(..)) where--import Bookhound.Operations.ToJson (ToJson (..))-import Bookhound.SyntaxTrees.Json  (JsExpression (..))-import Bookhound.SyntaxTrees.Xml   (XmlExpression (..), literalExpression)--import           Data.Char (toLower)-import qualified Data.Map  as Map---class ToXml a where-  toXml :: a -> XmlExpression---instance {-# OVERLAPPABLE #-} ToJson a => ToXml a where-  toXml = toXml . toJson--instance ToXml XmlExpression where-  toXml = id---instance ToXml JsExpression where--  toXml = \case-    JsNull       -> literalExpression "null"-    JsNumber n   -> literalExpression $ show n-    JsBool bool  -> literalExpression $ toLower <$> show bool-    JsString str -> literalExpression str--    JsArray arr  -> XmlExpression "array" Map.empty (elemExpr <$> arr) where--      elemExpr element = XmlExpression { tagName = "elem",-                                       fields = Map.empty,-                                       expressions = [toXml element] }--    JsObject obj -> XmlExpression "object" Map.empty (keyValueExpr <$> Map.toList obj)  where--      keyValueExpr (key, value) = XmlExpression { tagName = key,-                                                  fields = Map.empty,-                                                  expressions = [toXml value] }
− src/Bookhound/Operations/ToYaml.hs
@@ -1,32 +0,0 @@-{-# LANGUAGE UndecidableInstances #-}--module Bookhound.Operations.ToYaml (ToYaml(..)) where--import Bookhound.Operations.ToJson (ToJson (..))-import Bookhound.Parser            (runParser)-import Bookhound.Parsers.Number    (intLike)-import Bookhound.SyntaxTrees.Json  (JsExpression (..))-import Bookhound.SyntaxTrees.Yaml  (CollectionType (..), YamlExpression (..))-import Data.Text                   (pack)----class ToYaml a where-  toYaml :: a -> YamlExpression--instance {-# OVERLAPPABLE #-} ToJson a => ToYaml a where-  toYaml = toYaml . toJson--instance ToYaml YamlExpression where-  toYaml = id--instance ToYaml JsExpression where--  toYaml = \case-    JsNull       -> YamlNull-    JsNumber n   -> either (const (YamlFloat n)) YamlInteger $-      runParser intLike $ pack $ show n-    JsBool bool  -> YamlBool bool-    JsString str -> YamlString str-    JsArray arr  -> YamlList Standard $ toYaml <$> arr-    JsObject obj -> YamlMap  Standard $ toYaml <$> obj
− src/Bookhound/Parsers/Json.hs
@@ -1,58 +0,0 @@-module Bookhound.Parsers.Json (json, nil, number, bool, string, array, object) where--import Bookhound.Parser              (Parser, withError)-import Bookhound.ParserCombinators   (IsMatch (..), maybeWithin, (<|>), (|*))-import Bookhound.Parsers.Char        (colon, doubleQuote)-import Bookhound.Parsers.Collections (listOf, mapOf)-import Bookhound.Parsers.Number      (double)-import Bookhound.Parsers.String      (spacing, withinDoubleQuotes)-import Bookhound.SyntaxTrees.Json    (JsExpression (..))---json :: Parser JsExpression-json = maybeWithin spacing jsValue-  where-    jsValue = element <|> container---nil :: Parser JsExpression-nil = withError "Json Null"-  $ JsNull <$ is "null"--number :: Parser JsExpression-number = withError "Json Number"-  $ JsNumber <$> double---bool :: Parser JsExpression-bool = withError "Json Bool"-  $ JsBool <$> (True  <$ is "true" <|>-                False <$ is "false")---string :: Parser JsExpression-string = withError "Json String"-  $ JsString <$> text---array :: Parser JsExpression-array = withError "Json Array"-  $ JsArray <$> listOf json---object :: Parser JsExpression-object = withError "Json Object"-  $ JsObject <$> mapOf colon text json----element :: Parser JsExpression-element = number <|> bool <|> nil <|> string--container :: Parser JsExpression-container = array <|> object----text :: Parser String-text = withinDoubleQuotes (inverse doubleQuote |*)
− src/Bookhound/Parsers/Toml.hs
@@ -1,138 +0,0 @@-module Bookhound.Parsers.Toml (toml, nil, integer, float, bool, string,-                     array, inlineTable) where--import Bookhound.Parser              (Parser, withError)-import Bookhound.ParserCombinators   (IsMatch (..), maybeWithin, within, (<#>),-                                      (<|>), (>>>), (|*), (|+), (|?))-import Bookhound.Parsers.Char        (dash, digit, dot, doubleQuote, equal,-                                      hashTag, letter, newLine, quote,-                                      spaceOrTab, underscore, whiteSpace)-import Bookhound.Parsers.Collections (listOf, mapOf)-import Bookhound.Parsers.Number      (double, hexInt, int, octInt)-import Bookhound.Parsers.String      (blankLine, blankLines, spacesOrTabs,-                                      spacing, withinDoubleQuotes, withinQuotes,-                                      withinSquareBrackets)-import Bookhound.SyntaxTrees.Toml    (TableType (..), TomlExpression (..))--import qualified Bookhound.Parsers.DateTime as Dt--import qualified Data.Map   as Map-import           Data.Maybe (maybeToList)----toml :: Parser TomlExpression-toml = maybeWithin (((pure <$> whiteSpace) <|> comment) |+) topLevelTable------ TODO: Add support for table arrays--nil :: Parser TomlExpression-nil = withError "Toml Null"-  $ TomlNull <$ is "null"--integer :: Parser TomlExpression-integer = withError "Toml Integer"-  $ TomlInteger <$> (hexInt <|> octInt <|> int)--float :: Parser TomlExpression-float = withError "Toml Float"-  $ TomlFloat <$> double--bool :: Parser TomlExpression-bool = withError "Toml Bool"-  $ TomlBool <$> (True  <$ is "true"  <|>-                False <$ is "false")---dateTime :: Parser TomlExpression-dateTime = withError "Toml DateTime"-  $ TomlDateTime <$> Dt.dateTime--date :: Parser TomlExpression-date = withError "Toml Date"-  $ TomlDate <$> Dt.date--time :: Parser TomlExpression-time = withError "Toml Time"-  $ TomlTime <$> Dt.time---string :: Parser TomlExpression-string = withError "Toml String"-  $ TomlString <$> text-  where-    text = within (doubleQuote <#> 3) (multiline (inverse doubleQuote |*)) <|>-           within  (quote <#> 3)      (multiline (inverse quote |*))       <|>-           withinDoubleQuotes         (inverse doubleQuote |*)             <|>-           withinQuotes               (inverse quote       |*)--    multiline parser = mconcat <$> (((blankLine |?) *> line parser) |*)--    line parser = is "\\" *> (whiteSpace |*) *> parser---array :: Parser TomlExpression-array = withError "Toml Array"-  $ TomlArray <$> listOf (maybeWithin spacing tomlExpr)---key :: Parser String-key = keyParser >>> ((dot >>> keyParser) |*)-  where-    keyParser = maybeWithin spacesOrTabs $ freeText      <|>-                withinDoubleQuotes (inverse doubleQuote |*) <|>-                withinQuotes (inverse quote |*)--    freeText = ((letter <|> digit <|> underscore <|> dash) |+)---inlineTable :: Parser TomlExpression-inlineTable = withError "Toml Table"-  $ TomlTable Inline <$> mapOf equal key tomlExpr---topLevelTable :: Parser TomlExpression-topLevelTable = withError "Toml Table"-  $ TomlTable TopLevel . Map.fromList <$> maybeWithin spacing tables-  where-    tables = do xs <- keyValueSeqParser-                ys <- (tableParser |*)-                pure (ys <> [("", TomlTable Standard . Map.fromList $ xs)])--    tableParser = do k <- withinSquareBrackets key-                     v <- maybeWithin spacing standardTable-                     pure (k, v)--    standardTable = TomlTable Standard . Map.fromList <$> keyValueSeqParser---    keyValueSeqParser = do xs <- ((keyValueParser <* (blankLine *> (blankLines |?))) |*)-                           x  <- (keyValueParser |?)-                           pure  (xs <> maybeToList x)--    keyValueParser = do k <- key-                        maybeWithin spacesOrTabs equal-                        v <- tomlExpr-                        pure (k, v)----element :: Parser TomlExpression-element = dateTime <|> date <|> time <|> float <|>-          integer  <|> bool <|> nil  <|> string---container :: Parser TomlExpression-container = array <|> inlineTable---comment :: Parser String-comment = hashTag *> (inverse newLine |+) <* newLine---tomlExpr :: Parser TomlExpression-tomlExpr = maybeWithin (((pure <$> spaceOrTab) <|> comment) |+) tomlValue-  where-    tomlValue = element <|> container
− src/Bookhound/Parsers/Xml.hs
@@ -1,66 +0,0 @@-module Bookhound.Parsers.Xml (xml, branchExpr, leafExpr, literal) where--import Bookhound.Parser            (Parser, withError)-import Bookhound.ParserCombinators (IsMatch (..), maybeWithin, (<|>), (|*),-                                    (|+))-import Bookhound.Parsers.Char      (doubleQuote)-import Bookhound.Parsers.String    (spacing, withinAngleBrackets,-                                    withinDoubleQuotes)-import Bookhound.SyntaxTrees.Xml   (XmlExpression (..), literalExpression)--import           Data.Map (Map)-import qualified Data.Map as Map---xml :: Parser XmlExpression-xml = maybeWithin  ((header <|> comment) |+)-    $ maybeWithin spacing $ branchExpr <|> leafExpr----field :: Parser (String, String)-field = withError "Xml Field" $-  (,) <$> text <* is '=' <*> quotedText-  where-    quotedText = withinDoubleQuotes (inverse doubleQuote |*)---fullTag :: Parser (String, Map String String)-fullTag = withError "Xml Tag" $-  do tag  <- text-     flds <- Map.fromList <$> ((spacing *> field) |*)-     pure (tag, flds)---branchExpr :: Parser XmlExpression-branchExpr = withError "Xml Branch Expression" $-  do (tag, flds) <- withinAngleBrackets fullTag-     exprs       <- (xml |+) <|> literal-     maybeWithin spacing (is ("</" <> tag <> ">"))-     pure $ XmlExpression { tagName = tag, fields = flds, expressions = exprs }---literal :: Parser [XmlExpression]-literal = withError "Xml Literal" $-  pure . literalExpression <$> maybeWithin spacing (isNot '<' |*)---leafExpr :: Parser XmlExpression-leafExpr = withError "Xml Leaf Expression" $-  do (tag, flds) <- withinAngleBrackets (fullTag <* is '/')-     pure $ XmlExpression { tagName = tag, fields = flds, expressions = [] }---header :: Parser String-header = maybeWithin spacing $-  is "<?" *> (isNot '?' |*) <* is "?>"---comment :: Parser String-comment = maybeWithin spacing $-  is "<!--" *> (isNot '-' |*) <* is "-->"----text :: Parser String-text = (noneOf ['/', '>', ' ', '='] |+)
− src/Bookhound/Parsers/Yaml.hs
@@ -1,213 +0,0 @@-module Bookhound.Parsers.Yaml (yaml, nil, integer, float, bool, string,-                     list, mapping) where---import Bookhound.Parser              (Parser, andThen, check, exactly,-                                      withError)-import Bookhound.ParserCombinators   (IsMatch (..), maybeWithin, (<#>), (<|>),-                                      (>>>), (|*), (|+), (|++), (|?))-import Bookhound.Parsers.Char        (char, colon, dash, dot, doubleQuote,-                                      hashTag, newLine, question, quote, space,-                                      whiteSpace)-import Bookhound.Parsers.Collections (listOf, mapOf)-import Bookhound.Parsers.Number      (double, hexInt, int, octInt)-import Bookhound.Parsers.String      (blankLine, blankLines, spaces,-                                      spacesOrTabs, tabs, withinDoubleQuotes,-                                      withinQuotes)-import Bookhound.SyntaxTrees.Yaml    (CollectionType (..), YamlExpression (..))--import qualified Bookhound.Parsers.DateTime as Dt--import           Data.List (nub)-import qualified Data.Map  as Map----yaml :: Parser YamlExpression-yaml =  normalize `andThen` yamlWithIndent (-1)------- TODO: Add support for anchors and aliases--nil :: Parser YamlExpression-nil = withError "Yaml Null"-  $ YamlNull <$ oneOf ["null", "Null", "NULL"]--integer :: Parser YamlExpression-integer = withError "Yaml Integer"-  $ YamlInteger <$> (hexInt <|> octInt <|> int)--float :: Parser YamlExpression-float = withError "Yaml Float"-  $ YamlFloat <$> double--bool :: Parser YamlExpression-bool = withError "Yaml Bool"-  $ YamlBool <$> (True  <$ oneOf ["true", "True", "TRUE"]    <|>-                  False <$ oneOf ["false", "False", "FALSE"])---dateTime :: Parser YamlExpression-dateTime = withError "Yaml DateTime"-  $ YamlDateTime <$> Dt.dateTime--date :: Parser YamlExpression-date = withError "Yaml Date"-  $ YamlDate <$> Dt.date--time :: Parser YamlExpression-time = withError "Yaml Time"-  $ YamlTime <$> Dt.time---string :: Int -> Parser YamlExpression-string indent = withError "Yaml String"-  $ YamlString <$> text indent---sequential :: Parser a -> Int -> Parser [YamlExpression]-sequential sep indent = listParser-  where--  listParser = indentationCheck elemParser indent--  elemParser = do n <- length <$> (space |*)-                  sep *> whiteSpace-                  elm <- yamlWithIndent n-                  pure (n, elm)---list :: Int -> Parser YamlExpression-list indent = withError "Json List"-  $   (YamlList Inline   <$> jsonList)-  <|> (YamlList Standard <$> yamlList)-  where-    yamlList = sequential dash indent-    jsonList = maybeWithin spacesOrTabs $ listOf $ yamlWithIndent (-1)---set :: Int -> Parser YamlExpression-set indent = withError "Yaml Set"-  $ YamlList Standard . nub <$> sequential question indent---mapping :: Int -> Parser YamlExpression-mapping indent = withError "Yaml Mapping"-  $   (YamlMap Inline   <$> jsonMap)-  <|> (YamlMap Standard <$> yamlMap)-  where-    yamlMap = Map.fromList <$> mapParser-    jsonMap = maybeWithin spacesOrTabs $ mapOf colon (text 100) $ yamlWithIndent (-1)--    mapParser = indentationCheck keyValueParser indent--    keyValueParser = do n <- length <$> (space |*)-                        key <- show <$> element indent-                        (spacesOrTabs |?)-                        colon *> whiteSpace-                        value <- yamlWithIndent n-                        pure (n, (key, value))----element :: Int -> Parser YamlExpression-element indent = exactly (dateTime <|> date <|> time <|> float <|>-                          integer <|> bool <|> nil) <|>-                    string indent--container :: Int -> Parser YamlExpression-container indent = list indent <|> mapping indent <|> set indent----yamlWithIndent :: Int -> Parser YamlExpression-yamlWithIndent indent = maybeWithin ((blankLine <|> comment <|> directive <|>-                                      docStart <|> docEnd) |+)-                        yamlValue-  where-    yamlValue = container indent <|> maybeWithin spacesOrTabs (element indent)-    comment = hashTag *> (inverse newLine |+) <* newLine-    directive = is "%" *> (inverse space *> (inverse newLine |+)) <* newLine-    docStart = dash <#> 3-    docEnd = dot <#> 3----text :: Int -> Parser String-text indent = withinDoubleQuotes (quotedParser (inverse doubleQuote |*))                      <|>-              withinQuotes       (quotedParser (inverse quote       |*))                      <|>-              (is "|" *> blankLine *> plainTextParser literalLineParser)                      <|>-              (is ">" *> blankLine *> (spacesOrTabs |?) *> plainTextParser foldingLineParser) <|>-              plainTextParser foldingLineParser-  where--    quotedParser parser = mconcat <$> ((snd <$> foldingLineParser parser) |*)--    plainTextParser styleParser = allowedStart >>> allowedString >>>-                                  (indentationCheck (styleParser allowedString) indent |*)--    foldingLineParser parser = do sep <- ("\n" <$ newLine <* blankLines) <|> (" " <$ newLine)-                                  n   <- maybeWithin tabs $ length <$> (space |*)-                                  str <- parser-                                  pure (n, sep <> str)--    literalLineParser parser = do sep <- pure <$> newLine-                                  n   <- length <$> (space |*)-                                  str <- parser-                                  pure (n, sep <> replicate (n - indent) ' ' <> str)--    allowedStart = noneOf $ forbiddenChar <> ['>', '|', ':', '!']--    allowedString = (noneOf forbiddenChar |*)--    forbiddenChar = ['\n', '#', '&', '*', ',', '?', '-', ':', '[', ']', '{', '}']----indentationCheck :: Parser (Int, a) -> Int -> Parser [a]-indentationCheck parser indent = ((snd <$> check "indentation"-                                  (\(n, _) -> n > indent) parser) |+)---normalize :: Parser String-normalize = withError "Normalize Yaml"-  $ (parserActions >>> normalize) <|> (char |*)-  where--    parserActions = spreadDashes     <|>-                    spreadDashKey    <|>-                    spreadKeyDash    <|>-                    next--    next = pure <$> char--    spreadDashes = ((<>) "- ") . genDashes <$> dashesParser--    genDashes (offset, n) = concatMap (\x -> "- " <> replicate (offset + 2 * x) ' ')-                                      [1 .. n - 1]--    dashesParser = do offset <- length <$> (spaces |?)-                      n <- length <$> ((dash <* spacesOrTabs) |++)-                      pure (offset, n)---    spreadDashKey = (\(offset, key) -> replicate offset ' ' <> "- " <>-                                      replicate (offset + 2) ' ' <> key <> ": ")-                    <$> dashKeyParser--    dashKeyParser = do offset <- length <$> (spaces |?)-                       dash <* spacesOrTabs-                       key <- text 100 <* maybeWithin spacesOrTabs colon-                       pure (offset, key)---    spreadKeyDash = (\(offset, key) -> replicate offset ' ' <> key <> ": " <>-                                      replicate (offset + 2) ' ' <> "- ")-                    <$> keyDashParser--    keyDashParser = do offset <- length <$> (spaces |?)-                       key <- text 100 <* maybeWithin spacesOrTabs colon-                       dash <* spacesOrTabs-                       pure (offset, key)
− src/Bookhound/SyntaxTrees/Json.hs
@@ -1,28 +0,0 @@-module Bookhound.SyntaxTrees.Json (JsExpression(..)) where--import Bookhound.Internal.Foldable (stringify)-import Bookhound.Internal.Map      (showMap)--import Data.Char (toLower)-import Data.Map  (Map)----data JsExpression-  = JsNumber Double-  | JsBool Bool-  | JsString String-  | JsArray [JsExpression]-  | JsObject (Map String JsExpression)-  | JsNull-  deriving (Eq, Ord)---instance Show JsExpression where-  show = \case-    JsNull       -> "null"-    JsNumber n   -> show n-    JsBool bool  -> toLower <$> show bool-    JsString str -> show str-    JsArray arr  -> stringify ",\n" "[\n" "\n]" 2 $ show   <$> arr-    JsObject obj -> stringify ",\n" "{\n" "\n}" 2 $ showMap ": " id show obj
− src/Bookhound/SyntaxTrees/Toml.hs
@@ -1,57 +0,0 @@-module Bookhound.SyntaxTrees.Toml (TomlExpression(..), TableType(..)) where--import Bookhound.Internal.DateTime (showDateTime)-import Bookhound.Internal.Foldable (stringify)-import Bookhound.Internal.Map      (showMap)--import Data.Char (toLower)-import Data.Time (Day, TimeOfDay, ZonedTime (..))--import           Data.Map (Map)-import qualified Data.Map as Map----data TomlExpression-  = TomlInteger Integer-  | TomlFloat Double-  | TomlBool Bool-  | TomlString String-  | TomlDate Day-  | TomlTime TimeOfDay-  | TomlDateTime ZonedTime-  | TomlArray [TomlExpression]-  | TomlTable TableType (Map String TomlExpression)-  | TomlNull-  deriving (Eq, Ord)---data TableType-  = TopLevel-  | Standard-  | Inline-  deriving (Eq, Ord)---instance Show TomlExpression where-  show = \case-    TomlNull                   -> "null"-    TomlInteger n              -> show n-    TomlFloat n                -> show n-    TomlBool bool              -> toLower <$> show bool-    TomlDate date              -> show date-    TomlTime time              -> show time-    TomlDateTime dateTime      -> showDateTime dateTime-    TomlString str             -> show str--    TomlTable Standard table   -> stringify "\n" "" "" 0 $ showMap " = " id show table--    TomlTable TopLevel table   -> stringify "\n\n" "\n" "\n" 0 $ showMap "" showTableHeader show table where-      showTableHeader header = if header /= "" then "[" <> header <> "]" <> "\n"  else ""--    TomlTable Inline table     -> stringify (", " <> sep) ("{ " <> sep) (" }" <> sep) n $-                                    showMap " = " id show table where-      (sep, n) = if (length . mconcat) (show <$> Map.toList table) >= 80 then ("\n", 2) else ("", 0)--    TomlArray arr              -> stringify (", " <> sep) ("[ " <> sep) (" ]" <> sep) n $ show <$> arr where-      (sep, n) = if (length . mconcat) (show <$> arr) >= 80 then ("\n", 2) else ("", 0)
− src/Bookhound/SyntaxTrees/Xml.hs
@@ -1,58 +0,0 @@-module Bookhound.SyntaxTrees.Xml (XmlExpression(..), literalExpression, flatten, findAll, find) where--import Bookhound.Internal.Foldable (stringify)--import Data.Maybe (listToMaybe)--import           Data.Map (Map, elems, keys)-import qualified Data.Map as Map---data XmlExpression-  = XmlExpression-      { tagName     :: String-      , fields      :: Map String String-      , expressions :: [XmlExpression]-      }-  deriving (Eq, Ord)---instance Show XmlExpression where--  show XmlExpression { tagName = tag, .. }-    | tag == "literal" = head . elems $ fields-    | otherwise        = "<" <> tag <> flds <> innerExprs   where--        innerExprs = if | null expressions -> "/>"-                        | otherwise        -> ">"  <> ending--        (sep, n) = if | ((tagName) . head) expressions == "literal" -> ("", 0)-                      | otherwise                                   -> ("\n", 2)--        ending = stringify sep sep sep n (show <$> expressions) <> "</" <> tag <> ">"--        flds | null fields = ""-             | otherwise = " " <> fieldsString where--            fieldsString = stringify " " "" "" 0 $ showFn <$> tuples-            showFn (x, y) = x <> "=" <> show y-            tuples = zip (keys fields) (elems fields)----literalExpression :: String -> XmlExpression-literalExpression val = XmlExpression { tagName = "literal",-                                        fields = Map.fromList [("value", val)],-                                        expressions = [] }---flatten :: XmlExpression -> [XmlExpression]-flatten expr = expr : expressions expr >>= flatten---findAll :: (XmlExpression -> Bool) -> XmlExpression -> [XmlExpression]-findAll f = filter f . flatten---find :: (XmlExpression -> Bool) -> XmlExpression -> Maybe XmlExpression-find f = listToMaybe . findAll f
− src/Bookhound/SyntaxTrees/Yaml.hs
@@ -1,69 +0,0 @@-module Bookhound.SyntaxTrees.Yaml (YamlExpression(..), CollectionType(..)) where--import Bookhound.Internal.DateTime ()-import Bookhound.Internal.Foldable (stringify)-import Bookhound.Internal.Map      (showMap)--import           Data.Char (toLower)-import           Data.Map  (Map)-import qualified Data.Map  as Map-import           Data.Time (Day, TimeOfDay, ZonedTime (..))----data YamlExpression-  = YamlInteger Integer-  | YamlFloat Double-  | YamlBool Bool-  | YamlString String-  | YamlDate Day-  | YamlTime TimeOfDay-  | YamlDateTime ZonedTime-  | YamlList CollectionType [YamlExpression]-  | YamlMap CollectionType (Map String YamlExpression)-  | YamlNull-  deriving (Eq, Ord)--data CollectionType-  = Standard-  | Inline-  deriving (Eq, Ord)---instance Show YamlExpression where-  show = \case-    YamlNull                   -> "null"-    YamlInteger n              -> show n-    YamlFloat n                -> show n-    YamlBool bool              -> toLower <$> show bool-    YamlDate date              -> show date-    YamlTime time              -> show time-    YamlDateTime dateTime      -> show dateTime-    YamlString str             -> showStr str-    YamlList Standard list     -> stringify "\n" "\n" "" 2 $ ("- " <>) . show <$> list-    YamlMap  Standard mapping  -> stringify "\n" "\n" "" 2 $ showMap ": " id show mapping--    YamlList Inline   list     -> stringify (", " <> sep) ("[ " <> sep) (" ]" <> sep) n $ show <$> list where-      (sep, n) = if (length . mconcat) (show <$> list) >= 80 then ("\n", 2) else ("", 0)--    YamlMap  Inline   mapping  -> stringify (", " <> sep) ("{ " <> sep) (" }" <> sep) n $-                                    showMap ": " id show mapping where-      (sep, n) = if (length . mconcat) (show <$> Map.toList mapping) >= 80 then ("\n", 2) else ("", 0)----showStr :: String -> String-showStr str = (if (length (lines str) > 1) && not (any (`elem` str) forbiddenChar)-                    then "| \n"-                    else if length (lines str) > 1 then "\n"-                    else "") <>--                   (if not $ any (`elem` str) forbiddenChar  then str-                   else if '"' `elem` str  then "'"  <> indented 3 <> "'"-                   else                         "\"" <> indented 3) <> "\""  where--  indented n = head (lines str) <>-               mconcat ((("\n" <> replicate n ' ') <>) <$> tail (lines str))--  forbiddenChar = ['#', '&', '*', ',', '?', '-', ':', '[', ']', '{', '}'] <>-                  ['>', '|', ':', '!']