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 +2/−14
- src/Bookhound/Operations/Finder.hs +0/−85
- src/Bookhound/Operations/ToJson.hs +0/−97
- src/Bookhound/Operations/ToXml.hs +0/−42
- src/Bookhound/Operations/ToYaml.hs +0/−32
- src/Bookhound/Parsers/Json.hs +0/−58
- src/Bookhound/Parsers/Toml.hs +0/−138
- src/Bookhound/Parsers/Xml.hs +0/−66
- src/Bookhound/Parsers/Yaml.hs +0/−213
- src/Bookhound/SyntaxTrees/Json.hs +0/−28
- src/Bookhound/SyntaxTrees/Toml.hs +0/−57
- src/Bookhound/SyntaxTrees/Xml.hs +0/−58
- src/Bookhound/SyntaxTrees/Yaml.hs +0/−69
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 = ['#', '&', '*', ',', '?', '-', ':', '[', ']', '{', '}'] <>- ['>', '|', ':', '!']