@@ -5,11 +5,13 @@ module HaskellWorks.Data.Xml.Blank
55 ( blankXml
66 ) where
77
8- import Data.ByteString as BS
8+ import Data.ByteString ( ByteString )
99import Data.Word
1010import Data.Word8
11- import HaskellWorks.Data.Xml.Conduit.Words
12- import Prelude as P
11+ import HaskellWorks.Data.Xml.Internal.Words
12+ import Prelude
13+
14+ import qualified Data.ByteString as BS
1315
1416type ExpectedChar = Word8
1517
@@ -35,66 +37,66 @@ blankXml :: BS.ByteString -> BS.ByteString
3537blankXml as = fst (BS. unfoldrN (BS. length as) go (InXml , as))
3638 where go :: (BlankState , ByteString ) -> Maybe (Word8 , (BlankState , ByteString ))
3739 go (InXml , bs) = case BS. uncons bs of
38- Just (! c, ! cs) | isMetaStart c cs -> Just (_bracketleft , (InMeta , cs))
39- Just (! c, ! cs) | isEndTag c cs -> Just (_space , (InCloseTag , cs))
40- Just (! c, ! cs) | isTextStart c -> Just (_t , (InText , cs))
41- Just (! c, ! cs) | c == _less -> Just (_less , (InTag , cs))
42- Just (! c, ! cs) | isSpace c -> Just (c , (InXml , cs))
43- Just ( _, ! cs) -> Just (_space , (InXml , cs))
44- Nothing -> Nothing
40+ Just (! c, ! cs) | isMetaStart c cs -> Just (_bracketleft , (InMeta , cs))
41+ Just (! c, ! cs) | isEndTag c cs -> Just (_space , (InCloseTag , cs))
42+ Just (! c, ! cs) | isTextStart c -> Just (_t , (InText , cs))
43+ Just (! c, ! cs) | c == _less -> Just (_less , (InTag , cs))
44+ Just (! c, ! cs) | isSpace c -> Just (c , (InXml , cs))
45+ Just ( _, ! cs) -> Just (_space , (InXml , cs))
46+ Nothing -> Nothing
4547 go (InTag , bs) = case BS. uncons bs of
46- Just (! c, ! cs) | isSpace c -> Just (_parenleft , (InAttrList , cs))
47- Just (! c, ! cs) | isTagClose c cs -> Just (_space , (InClose , cs))
48- Just (! c, ! cs) | c == _greater -> Just (_space , (InXml , cs))
49- Just (! c, ! cs) | isSpace c -> Just (c , (InTag , cs))
50- Just ( _, ! cs) -> Just (_space , (InTag , cs))
51- Nothing -> Nothing
48+ Just (! c, ! cs) | isSpace c -> Just (_parenleft , (InAttrList , cs))
49+ Just (! c, ! cs) | isTagClose c cs -> Just (_space , (InClose , cs))
50+ Just (! c, ! cs) | c == _greater -> Just (_space , (InXml , cs))
51+ Just (! c, ! cs) | isSpace c -> Just (c , (InTag , cs))
52+ Just ( _, ! cs) -> Just (_space , (InTag , cs))
53+ Nothing -> Nothing
5254 go (InCloseTag , bs) = case BS. uncons bs of
53- Just (! c, ! cs) | c == _greater -> Just (_greater , (InXml , cs))
54- Just ( _, ! cs) -> Just (_space , (InCloseTag , cs))
55- Nothing -> Nothing
55+ Just (! c, ! cs) | c == _greater -> Just (_greater , (InXml , cs))
56+ Just ( _, ! cs) -> Just (_space , (InCloseTag , cs))
57+ Nothing -> Nothing
5658 go (InAttrList , bs) = case BS. uncons bs of
57- Just (! c, ! cs) | c == _greater -> Just (_parenright , (InXml , cs))
58- Just (! c, ! cs) | isTagClose c cs -> Just (_parenright , (InClose , cs))
59- Just (! c, ! cs) | isNameStartChar c -> Just (_a , (InIdent , cs))
60- Just (! c, ! cs) | isQuote c -> Just (_v , (InString c , cs))
61- Just (! c, ! cs) | isSpace c -> Just (c , (InAttrList , cs))
62- Just ( _, ! cs) -> Just (_space , (InAttrList , cs))
63- Nothing -> Nothing
59+ Just (! c, ! cs) | c == _greater -> Just (_parenright , (InXml , cs))
60+ Just (! c, ! cs) | isTagClose c cs -> Just (_parenright , (InClose , cs))
61+ Just (! c, ! cs) | isNameStartChar c -> Just (_a , (InIdent , cs))
62+ Just (! c, ! cs) | isQuote c -> Just (_v , (InString c , cs))
63+ Just (! c, ! cs) | isSpace c -> Just (c , (InAttrList , cs))
64+ Just ( _, ! cs) -> Just (_space , (InAttrList , cs))
65+ Nothing -> Nothing
6466 go (InClose , bs) = case BS. uncons bs of
65- Just (_, ! cs) -> Just (_greater , (InXml , cs))
66- Nothing -> Nothing
67+ Just (_, ! cs) -> Just (_greater , (InXml , cs))
68+ Nothing -> Nothing
6769 go (InIdent , bs) = case BS. uncons bs of
68- Just (! c, ! cs) | isNameChar c -> Just (_space , (InIdent , cs))
69- Just (! c, ! cs) | isSpace c -> Just (_space , (InAttrList , cs))
70- Just (! c, ! cs) | c == _equal -> Just (_space , (InAttrList , cs))
71- Just (! c, ! cs) | isSpace c -> Just (c , (InAttrList , cs))
72- Just ( _, ! cs) -> Just (_space , (InAttrList , cs))
73- Nothing -> Nothing
70+ Just (! c, ! cs) | isNameChar c -> Just (_space , (InIdent , cs))
71+ Just (! c, ! cs) | isSpace c -> Just (_space , (InAttrList , cs))
72+ Just (! c, ! cs) | c == _equal -> Just (_space , (InAttrList , cs))
73+ Just (! c, ! cs) | isSpace c -> Just (c , (InAttrList , cs))
74+ Just ( _, ! cs) -> Just (_space , (InAttrList , cs))
75+ Nothing -> Nothing
7476 go (InString q, bs) = case BS. uncons bs of
75- Just (! c, ! cs) | c == q -> Just (_space , (InAttrList , cs))
76- Just (! c, ! cs) | isSpace c -> Just (c , (InString q , cs))
77- Just ( _, ! cs) -> Just (_space , (InString q , cs))
78- Nothing -> Nothing
77+ Just (! c, ! cs) | c == q -> Just (_space , (InAttrList , cs))
78+ Just (! c, ! cs) | isSpace c -> Just (c , (InString q , cs))
79+ Just ( _, ! cs) -> Just (_space , (InString q , cs))
80+ Nothing -> Nothing
7981 go (InText , bs) = case BS. uncons bs of
80- Just (! c, ! cs) | isEndTag c cs -> Just (_space , (InCloseTag , cs))
81- Just ( _, ! cs) | headIs (== _less) cs -> Just (_space , (InXml , cs))
82- Just (! c, ! cs) | isSpace c -> Just (c , (InText , cs))
83- Just ( _, ! cs) -> Just (_space , (InText , cs))
84- Nothing -> Nothing
82+ Just (! c, ! cs) | isEndTag c cs -> Just (_space , (InCloseTag , cs))
83+ Just ( _, ! cs) | headIs (== _less) cs -> Just (_space , (InXml , cs))
84+ Just (! c, ! cs) | isSpace c -> Just (c , (InText , cs))
85+ Just ( _, ! cs) -> Just (_space , (InText , cs))
86+ Nothing -> Nothing
8587 go (InMeta , bs) = case BS. uncons bs of
86- Just (! c, ! cs) | c == _exclam -> Just (_space , (InMeta , cs))
87- Just (! c, ! cs) | c == _hyphen -> Just (_space , (InRem 0 , cs))
88- Just (! c, ! cs) | c == _bracketleft -> Just (_space , (InCdataTag , cs))
89- Just (! c, ! cs) | c == _greater -> Just (_bracketright, (InXml , cs))
90- Just (! c, ! cs) | isSpace c -> Just (c , (InBang 1 , cs))
91- Just ( _, ! cs) -> Just (_space , (InBang 1 , cs))
92- Nothing -> Nothing
88+ Just (! c, ! cs) | c == _exclam -> Just (_space , (InMeta , cs))
89+ Just (! c, ! cs) | c == _hyphen -> Just (_space , (InRem 0 , cs))
90+ Just (! c, ! cs) | c == _bracketleft -> Just (_space , (InCdataTag , cs))
91+ Just (! c, ! cs) | c == _greater -> Just (_bracketright, (InXml , cs))
92+ Just (! c, ! cs) | isSpace c -> Just (c , (InBang 1 , cs))
93+ Just ( _, ! cs) -> Just (_space , (InBang 1 , cs))
94+ Nothing -> Nothing
9395 go (InCdataTag , bs) = case BS. uncons bs of
94- Just (! c, ! cs) | c == _bracketleft -> Just (_space , (InCdata 0 , cs))
95- Just (! c, ! cs) | isSpace c -> Just (c , (InCdataTag , cs))
96- Just ( _, ! cs) -> Just (_space , (InCdataTag , cs))
97- Nothing -> Nothing
96+ Just (! c, ! cs) | c == _bracketleft -> Just (_space , (InCdata 0 , cs))
97+ Just (! c, ! cs) | isSpace c -> Just (c , (InCdataTag , cs))
98+ Just ( _, ! cs) -> Just (_space , (InCdataTag , cs))
99+ Nothing -> Nothing
98100 go (InCdata n, bs) = case BS. uncons bs of
99101 Just (! c, ! cs) | c == _greater && n >= 2 -> Just (_bracketright, (InXml , cs))
100102 Just (! c, ! cs) | isCdataEnd c cs && n > 0 -> Just (_space , (InCdata (n+ 1 ), cs))
@@ -103,18 +105,18 @@ blankXml as = fst (BS.unfoldrN (BS.length as) go (InXml, as))
103105 Just ( _, ! cs) -> Just (_space , (InCdata 0 , cs))
104106 Nothing -> Nothing
105107 go (InRem n, bs) = case BS. uncons bs of
106- Just (! c, ! cs) | c == _greater && n >= 2 -> Just (_bracketright, (InXml , cs))
107- Just (! c, ! cs) | c == _hyphen -> Just (_space , (InRem (n+ 1 ) , cs))
108- Just (! c, ! cs) | isSpace c -> Just (c , (InRem 0 , cs))
109- Just ( _, ! cs) -> Just (_space , (InRem 0 , cs))
110- Nothing -> Nothing
108+ Just (! c, ! cs) | c == _greater && n >= 2 -> Just (_bracketright, (InXml , cs))
109+ Just (! c, ! cs) | c == _hyphen -> Just (_space , (InRem (n+ 1 ) , cs))
110+ Just (! c, ! cs) | isSpace c -> Just (c , (InRem 0 , cs))
111+ Just ( _, ! cs) -> Just (_space , (InRem 0 , cs))
112+ Nothing -> Nothing
111113 go (InBang n, bs) = case BS. uncons bs of
112- Just (! c, ! cs) | c == _less -> Just (_bracketleft , (InBang (n+ 1 ) , cs))
113- Just (! c, ! cs) | c == _greater && n == 1 -> Just (_bracketright, (InXml , cs))
114- Just (! c, ! cs) | c == _greater -> Just (_bracketright, (InBang (n- 1 ) , cs))
115- Just (! c, ! cs) | isSpace c -> Just (c , (InBang n , cs))
116- Just ( _, ! cs) -> Just (_space , (InBang n , cs))
117- Nothing -> Nothing
114+ Just (! c, ! cs) | c == _less -> Just (_bracketleft , (InBang (n+ 1 ) , cs))
115+ Just (! c, ! cs) | c == _greater && n == 1 -> Just (_bracketright, (InXml , cs))
116+ Just (! c, ! cs) | c == _greater -> Just (_bracketright, (InBang (n- 1 ) , cs))
117+ Just (! c, ! cs) | isSpace c -> Just (c , (InBang n , cs))
118+ Just ( _, ! cs) -> Just (_space , (InBang n , cs))
119+ Nothing -> Nothing
118120
119121isEndTag :: Word8 -> ByteString -> Bool
120122isEndTag c cs = c == _less && headIs (== _slash) cs
0 commit comments