@@ -9,40 +9,44 @@ module HaskellWorks.Data.Xml.RawValue
99 , RawValueAt (.. )
1010 ) where
1111
12+ import Data.ByteString (ByteString )
1213import Data.List
1314import Data.Semigroup ((<>) )
15+ import Data.Text (Text )
1416import HaskellWorks.Data.Xml.Grammar
17+ import HaskellWorks.Data.Xml.Internal.Show
1518import HaskellWorks.Data.Xml.Succinct.Index
1619import Text.PrettyPrint.ANSI.Leijen hiding ((<$>) , (<>) )
1720
1821import qualified Data.Attoparsec.ByteString.Char8 as ABC
1922import qualified Data.ByteString as BS
23+ import qualified Data.Text as T
2024
2125data RawValue
2226 = RawDocument [RawValue ]
23- | RawText String
24- | RawElement String [RawValue ]
25- | RawCData String
26- | RawComment String
27- | RawMeta String [RawValue ]
28- | RawAttrName String
29- | RawAttrValue String
27+ | RawText Text
28+ | RawElement Text [RawValue ]
29+ | RawCData Text
30+ | RawComment Text
31+ | RawMeta Text [RawValue ]
32+ | RawAttrName Text
33+ | RawAttrValue Text
3034 | RawAttrList [RawValue ]
31- | RawError String
35+ | RawError Text
3236 deriving (Eq , Show )
3337
3438instance Pretty RawValue where
3539 pretty mjpv = case mjpv of
36- RawText s -> ctext $ text s
37- RawAttrName s -> text s
38- RawAttrValue s -> (ctext . dquotes . text) s
40+ RawText s -> ctext $ text ( T. unpack s)
41+ RawAttrName s -> text ( T. unpack s)
42+ RawAttrValue s -> (ctext . dquotes . text) ( T. unpack s)
3943 RawAttrList ats -> formatAttrs ats
4044 RawComment s -> text $ " <!-- " <> show s <> " -->"
41- RawElement s xs -> formatElem s xs
45+ RawElement s xs -> formatElem ( T. unpack s) xs
4246 RawDocument xs -> formatMeta " ?" " xml" xs
43- RawError s -> red $ text " [error " <> text s <> text " ]"
44- RawCData s -> cangle " <!" <> ctag (text " [CDATA[" ) <> text s <> cangle (text " ]]>" )
45- RawMeta s xs -> formatMeta " !" s xs
47+ RawError s -> red $ text " [error " <> text ( T. unpack s) <> text " ]"
48+ RawCData s -> cangle " <!" <> ctag (text " [CDATA[" ) <> text ( T. unpack s) <> cangle (text " ]]>" )
49+ RawMeta s xs -> formatMeta " !" ( T. unpack s) xs
4650 where
4751 formatAttr at = case at of
4852 RawAttrName a -> text " " <> pretty (RawAttrName a)
@@ -69,28 +73,31 @@ class RawValueAt a where
6973
7074instance RawValueAt XmlIndex where
7175 rawValueAt i = case i of
72- XmlIndexCData s -> parseTextUntil " ]]>" s `as` RawCData
73- XmlIndexComment s -> parseTextUntil " -->" s `as` RawComment
74- XmlIndexMeta s cs -> RawMeta s (rawValueAt <$> cs)
75- XmlIndexElement s cs -> RawElement s (rawValueAt <$> cs)
76- XmlIndexDocument cs -> RawDocument (rawValueAt <$> cs)
77- XmlIndexAttrName cs -> parseAttrName cs `as` RawAttrName
78- XmlIndexAttrValue cs -> parseString cs `as` RawAttrValue
76+ XmlIndexCData s -> parseTextUntil " ]]>" s `as` ( RawCData . T. pack)
77+ XmlIndexComment s -> parseTextUntil " -->" s `as` ( RawComment . T. pack)
78+ XmlIndexMeta s cs -> RawMeta s (rawValueAt <$> cs)
79+ XmlIndexElement s cs -> RawElement s (rawValueAt <$> cs)
80+ XmlIndexDocument cs -> RawDocument (rawValueAt <$> cs)
81+ XmlIndexAttrName cs -> parseAttrName cs `as` RawAttrName
82+ XmlIndexAttrValue cs -> parseString cs `as` RawAttrValue
7983 XmlIndexAttrList cs -> RawAttrList (rawValueAt <$> cs)
80- XmlIndexValue s -> parseTextUntil " <" s `as` RawText
84+ XmlIndexValue s -> parseTextUntil " <" s `as` ( RawText . T. pack)
8185 XmlIndexError s -> RawError s
8286 -- unknown -> XmlError ("Not yet supported: " <> show unknown)
8387 where
8488 parseUntil s = ABC. manyTill ABC. anyChar (ABC. string s)
8589
90+ parseTextUntil :: ByteString -> ByteString -> Either Text [Char ]
8691 parseTextUntil s bs = case ABC. parse (parseUntil s) bs of
87- ABC. Fail {} -> decodeErr (" Unable to find " <> show s <> " ." ) bs
88- ABC. Partial _ -> decodeErr (" Unexpected end, expected " <> show s <> " ." ) bs
92+ ABC. Fail {} -> decodeErr (" Unable to find " <> tshow s <> " ." ) bs
93+ ABC. Partial _ -> decodeErr (" Unexpected end, expected " <> tshow s <> " ." ) bs
8994 ABC. Done _ r -> Right r
95+ parseString :: ByteString -> Either Text Text
9096 parseString bs = case ABC. parse parseXmlString bs of
9197 ABC. Fail {} -> decodeErr " Unable to parse string" bs
9298 ABC. Partial _ -> decodeErr " Unexpected end of string, expected" bs
9399 ABC. Done _ r -> Right r
100+ parseAttrName :: ByteString -> Either Text Text
94101 parseAttrName bs = case ABC. parse parseXmlAttributeName bs of
95102 ABC. Fail {} -> decodeErr " Unable to parse attribute name" bs
96103 ABC. Partial _ -> decodeErr " Unexpected end of attr name, expected" bs
@@ -116,9 +123,8 @@ isAttr v = case v of
116123 RawAttrList _ -> True
117124 _ -> False
118125
119- as :: Either String a -> (a -> RawValue ) -> RawValue
126+ as :: Either Text a -> (a -> RawValue ) -> RawValue
120127as = flip $ either RawError
121128
122- decodeErr :: String -> BS. ByteString -> Either String a
123- decodeErr reason bs =
124- Left $ reason <> " (" <> show (BS. take 20 bs) <> " ...)"
129+ decodeErr :: Text -> BS. ByteString -> Either Text a
130+ decodeErr reason bs = Left $ reason <> " (" <> tshow (BS. take 20 bs) <> " ...)"
0 commit comments