) where
import Control.Applicative (Applicative(..), Alternative(..))
+import Control.Monad (Monad(..))
import Data.Eq (Eq)
import Data.Function ((.), id)
import Data.Functor (Functor(..), (<$>))
import qualified Language.Symantic.XML as XML
-infixl 2 <$$>, <$?>, <$*>, <$:>
-infixl 1 <||>, <|?>, <|*>{-, <|:>-}
-
-- * Class 'Sym_RNC'
class
( Applicative repr
, Alternative repr
, Sym_Rule repr
- , Sym_Interleaved repr
+ , Sym_Permutation repr
) => Sym_RNC repr where
namespace :: Maybe XML.NCName -> XML.Namespace -> repr ()
element :: XML.QName -> repr a -> repr a
| RuleMode_Def -- ^ Request to generate a definition of the rule.
deriving (Eq, Show)
--- * Class 'Sym_Interleaved'
-class Sym_Interleaved repr where
- interleaved :: Perm repr a -> repr a
- (<$$>) :: (a -> b) -> repr a -> Perm repr b
+-- * Class 'Sym_Permutation'
+class (Alternative repr, Applicative (Permutation repr)) => Sym_Permutation repr where
+ runPermutation :: Permutation repr a -> repr a
+ toPermutation :: repr a -> Permutation repr a
+ toPermutationWithDefault :: a -> repr a -> Permutation repr a
+
+ (<$$>) :: (a -> b) -> repr a -> Permutation repr b
+ (<$?>) :: (a -> b) -> (a, repr a) -> Permutation repr b
+ (<$*>) :: ([a] -> b) -> repr a -> Permutation repr b
+ (<$:>) :: (Seq a -> b) -> repr a -> Permutation repr b
+ infixl 2 <$$>, <$?>, <$*>, <$:>
+ {-# INLINE (<$$>) #-}
+ {-# INLINE (<$?>) #-}
+ {-# INLINE (<$*>) #-}
+ {-# INLINE (<$:>) #-}
- (<$?>) :: (a -> b) -> (a, repr a) -> Perm repr b
- (<||>) :: Perm repr (a -> b) -> repr a -> Perm repr b
- (<|?>) :: Perm repr (a -> b) -> (a, repr a) -> Perm repr b
+ (<||>) :: Permutation repr (a -> b) -> repr a -> Permutation repr b
+ (<|?>) :: Permutation repr (a -> b) -> (a, repr a) -> Permutation repr b
+ (<|*>) :: Permutation repr ([a] -> b) -> repr a -> Permutation repr b
+ (<|:>) :: Permutation repr (Seq a -> b) -> repr a -> Permutation repr b
+ infixl 1 <||>, <|?>, <|*>, <|:>
+ {-# INLINE (<||>) #-}
+ {-# INLINE (<|?>) #-}
+ {-# INLINE (<|*>) #-}
+ {-# INLINE (<|:>) #-}
- (<$*>) :: ([a] -> b) -> repr a -> Perm repr b
- (<|*>) :: Perm repr ([a] -> b) -> repr a -> Perm repr b
+ f <$$> x = f <$> toPermutation x
+ f <$?> (d,x) = f <$> toPermutationWithDefault d x
+ f <$*> x = f <$> toPermutationWithDefault [] (many x)
+ f <$:> x = f . Seq.fromList <$> toPermutationWithDefault [] (many x)
- (<$:>) :: (Seq a -> b) -> repr a -> Perm repr b
- (<$:>) f = (f . Seq.fromList <$*>)
- {- NOTE: Megaparsec's PermParser has no Functor instance.
- (<|:>) :: Perm repr (Seq a -> b) -> repr a -> Perm repr b
- default (<|:>) :: Functor (Perm repr) => Perm repr (Seq a -> b) -> repr a -> Perm repr b
- (<|:>) f x = (. Seq.fromList) <$> f <|*> x
- -}
+ f <||> x = f <*> toPermutation x
+ f <|?> (d,x) = f <*> toPermutationWithDefault d x
+ f <|*> x = f <*> toPermutationWithDefault [] (many x)
+ f <|:> x = f <*> toPermutationWithDefault Seq.empty (Seq.fromList <$> many x)
--- ** Type family 'Perm'
+-- ** Type family 'Permutation'
-- | Type of permutations, depending on the representation.
-type family Perm (repr:: * -> *) = (r :: * -> *) | r -> repr
--- type instance Perm (Dup x y) = Dup (Perm x) (Perm y)
--- type instance Perm (Rule repr) = Rule (Perm repr) -- Compose [] (Rule (Perm repr))
+type family Permutation (repr:: * -> *) = (r :: * -> *) | r -> repr
{-# OPTIONS_GHC -fno-warn-orphans #-}
module Language.Symantic.RNC.Validate where
-import Control.Applicative (Applicative(..))
+import Control.Applicative (Applicative(..), Alternative(..), optional)
+import Control.Monad (Monad(..))
import Data.Bool
import Data.Either (Either(..))
import Data.Eq (Eq(..))
import Data.Foldable (Foldable(..), all)
import Data.Function (($), const, id)
-import Data.List.NonEmpty (NonEmpty(..))
-import Data.Maybe (Maybe(..))
+import Data.Functor (Functor(..), (<$>))
+import Data.Maybe (Maybe(..), maybe)
import Data.Monoid (Monoid(..))
import Data.Ord (Ord(..))
import Data.Semigroup (Semigroup(..))
+import Data.Tuple (snd)
+import Prelude (error)
import qualified Data.Char as Char
import qualified Data.Sequence as Seq
import qualified Data.Set as Set
import qualified Data.Text.Lazy as TL
import qualified Text.Megaparsec as P
-import qualified Text.Megaparsec.Perm as P
-import Language.Symantic.XML (XMLs)
+import Language.Symantic.XML (XMLs)
import qualified Language.Symantic.XML as XML
import qualified Language.Symantic.RNC.Sym as RNC
-validateXML :: Ord e => P.Parsec e XMLs a -> XMLs -> Either (P.ParseError (P.Token XMLs) e) a
-validateXML p = XML.runParser p (P.initialPos "":|[])
-
-type instance RNC.Perm (P.ParsecT e XMLs m) = P.PermParser XMLs (P.ParsecT e XMLs m)
-instance Ord e => RNC.Sym_Interleaved (P.ParsecT e XMLs m) where
- interleaved = P.makePermParser
- (<$$>) = (P.<$$>)
- (<||>) = (P.<||>)
- (<$?>) = (P.<$?>)
- (<|?>) = (P.<|?>)
- f <$*> a = f P.<$?> ([],P.some a)
- f <|*> a = f P.<|?> ([],P.some a)
-instance Ord e => RNC.Sym_Rule (P.ParsecT e XMLs m) where
- -- rule n p = P.dbg s p {-(p P.<?> s)-} where s = Text.unpack n
- rule _n = id
- arg _n = pure ()
+validateXML ::
+ Ord e => P.Parsec e XMLs a -> XMLs ->
+ Either (P.ParseErrorBundle XMLs e) a
+validateXML p stateInput =
+ snd $
+ P.runParser' p P.State
+ { P.stateInput
+ , P.stateOffset = 0
+ , P.statePosState = error "[BUG] validateXML: getSourcePos is not helpful here, please use annotated source locations"
+ -- NOTE: reporting the node number is less helpful
+ -- than the source text line and number where the node is;
+ -- P.statePosState is only used by P.getSourcePos.
+ }
-- | Like 'P.satisfy' but with a predicate returning 'Maybe' instead of 'Bool'.
p_satisfyMaybe :: P.MonadParsec e s m => (P.Token s -> Maybe a) -> m a
-p_satisfyMaybe f = check `P.token` Nothing
- where
- check c =
- case f c of
- Just a -> Right a
- Nothing -> Left (Just $ P.Tokens $ c:|[], Set.empty)
+p_satisfyMaybe = (`P.token` Set.empty)
instance Ord e => RNC.Sym_RNC (P.Parsec e XMLs) where
{-
-}
namespace _p _n = pure ()
element n p = do
- ts <- P.token check $ Just expected
- parserElement n p ts
+ ts <- P.token check $ Set.singleton $ P.Tokens $ pure expected
+ XML.subParser p ts
where
expected = XML.Tree (XML.notSourced $ XML.NodeElem n) mempty
check (XML.Tree (XML.unSourced -> XML.NodeElem e) ts)
| e == n
- = Right $ removePI $ removeXMLNS $ removeSpaces ts
+ = Just $ removePI $ removeXMLNS $ removeSpaces ts
where
removePI xs =
(`Seq.filter` xs) $ \case
XML.QName ns _l -> ns /= XML.xmlns_xmlns
_ -> True in
attrs' <> rest
- check t = Left
- ( Just $ P.Tokens $ pure t
- , Set.singleton $ P.Tokens $ pure expected )
+ check _t = Nothing
attribute n p = do
- v <- P.token check $ Just expected
- XML.parser p v
+ v <- P.token check $ Set.singleton $ P.Tokens $ pure expected
+ XML.subParser p v
where
expected = XML.Tree0 (XML.notSourced $ XML.NodeAttr n)
check (XML.Tree (XML.unSourced -> XML.NodeAttr k)
v@(toList -> [XML.Tree0 (XML.unSourced -> XML.NodeText _v)])) | k == n =
- Right v
- check t = Left
- ( Just $ P.Tokens $ pure t
- , Set.singleton $ P.Tokens $ pure expected )
+ Just v
+ check _t = Nothing
any = P.label "any" $ p_satisfyMaybe $ const $ Just ()
anyElem ns p = P.label "anyElem" $ do
- (n,ts) <- P.token check $ Just expected
- parserElement n (p $ XML.qNameLocal n) ts
+ (n,ts) <- P.token check $ Set.singleton $ P.Tokens $ pure expected
+ XML.subParser (p $ XML.qNameLocal n) ts
where
expected = XML.Tree (XML.notSourced $ XML.NodeElem $ XML.QName ns $ XML.NCName "*") mempty
check (XML.Tree (XML.unSourced -> XML.NodeElem e) ts)
| XML.qNameSpace e == ns
- = Right $ (e,ts)
- check t = Left
- ( Just $ P.Tokens $ pure t
- , Set.singleton $ P.Tokens $ pure expected )
+ = Just $ (e,ts)
+ check _t = Nothing
{-
comment = do
s <- P.getInput
expected = XML.Tree0 (XML.notSourced $ XML.NodeComment "")
-}
escapedText = do
- P.token check (Just expected)
- <* XML.setFilePosToNextNode
+ P.token check $ Set.singleton $ P.Tokens $ pure expected
where
expected = XML.Tree0 (XML.notSourced $ XML.NodeText $ XML.EscapedText mempty)
- check (XML.Tree0 (XML.unSourced -> XML.NodeText t)) = Right t
- check t = Left
- ( Just $ P.Tokens $ pure t
- , Set.singleton $ P.Tokens $ pure expected )
+ check (XML.Tree0 (XML.unSourced -> XML.NodeText t)) = Just t
+ check _t = Nothing
optional = P.optional
option = P.option
choice = P.choice
try = P.try
fail = P.label "fail" $ P.failure Nothing mempty
-parserElement :: Ord e => XML.QName -> P.Parsec e XMLs a -> XMLs -> P.Parsec e XMLs a
-parserElement _n = XML.parser
+instance Ord e => RNC.Sym_Permutation (P.ParsecT e XMLs m) where
+ runPermutation (P value parser) = optional parser >>= f
+ where
+ -- NOTE: copy Control.Applicative.Permutations.runPermutation
+ -- to replace the commented empty below so that P.TrivialError
+ -- has the unexpected token.
+ f Nothing = maybe {-empty-}(P.token (const Nothing) Set.empty) pure value
+ f (Just p) = RNC.runPermutation p
+ toPermutation p = P Nothing $ pure <$> p
+ toPermutationWithDefault v p = P (Just v) $ pure <$> p
+
+-- | Unprivatized 'Control.Applicative.Permutations.Permutation' to fix 'runPermutation'.
+-- so that the 'P.TrivialError' has an unexpected token
+-- which is an 'XML.Node' containing a 'XML.FileSource' useful when reporting errors.
+data Permutation m a = P (Maybe a) (m (Permutation m a))
+type instance RNC.Permutation (P.ParsecT e XMLs m) = Permutation (P.ParsecT e XMLs m)
+instance Functor m => Functor (Permutation m) where
+ fmap f (P v p) = P (f <$> v) (fmap f <$> p)
+instance Alternative m => Applicative (Permutation m) where
+ pure value = P (Just value) empty
+ lhs@(P f v) <*> rhs@(P g w) = P (f <*> g) (lhsAlt <|> rhsAlt)
+ where
+ lhsAlt = (<*> rhs) <$> v
+ rhsAlt = (lhs <*>) <$> w
+
+instance Ord e => RNC.Sym_Rule (P.ParsecT e XMLs m) where
+ -- rule n p = P.dbg s p {-(p P.<?> s)-} where s = Text.unpack n
+ rule _n = id
+ arg _n = pure ()
RuleMode_Ref -> fromString n
RuleMode_Body -> ""
RuleMode_Def -> ""
-type instance Perm Writer = Compose [] Writer
-instance Sym_Interleaved Writer where
- interleaved (Compose []) = writeText "empty"
- interleaved (Compose [Writer w]) = Writer w
- interleaved (Compose l@(_:_)) = Writer $ \ns rm po pp ->
+type instance Permutation Writer = Compose [] Writer
+instance Sym_Permutation Writer where
+ runPermutation (Compose []) = writeText "empty"
+ runPermutation (Compose [Writer w]) = Writer w
+ runPermutation (Compose l@(_:_)) = Writer $ \ns rm po pp ->
pairIfNeeded pp po op $
TL.intercalate " & " $
List.filter (not . TL.null) $
(unWriter <$> l) <*> pure ns <*> pure rm <*> pure (op, SideL) <*> pure pairParen
where op = infixB SideL 1
- _f <$$> Writer w = Compose [Writer w]
- _f <$?> (_,Writer w) = Compose [coerceWriter $ optional $ Writer w]
- _f <$*> Writer w = Compose [coerceWriter $ many (Writer w)]
- Compose ws <||> Writer w = Compose (coerceWriter <$> ws <> [Writer w])
- Compose ws <|?> (_,Writer w) =
- Compose ((coerceWriter <$> ws) <>
- [coerceWriter $ optional $ Writer w])
- Compose ws <|*> (Writer w) =
- Compose (coerceWriter <$> ws <>
- [coerceWriter $ many $ Writer w])
+ toPermutation = Compose . pure
+ toPermutationWithDefault _ = Compose . pure
instance Sym_RNC Writer where
namespace _p _n = writeText ""
element n (Writer w) = Writer $ \ns rm po pp ->
S.put $ st{state_rules = HS.insert n state_rules}
ns
arg _n = mempty
-type instance Perm NS = NS
-instance Sym_Interleaved NS where
- interleaved = coerceNS
- _f <$$> NS x = NS x
- _f <$?> (_, NS x) = NS x
- _f <$*> NS x = NS x
- _f <$:> NS x = NS x
- NS f <||> NS x = NS f <> NS x
- NS f <|?> (_, NS x) = NS f <> NS x
- NS f <|*> NS x = NS f <> NS x
+type instance Permutation NS = NS
+instance Sym_Permutation NS where
+ runPermutation = coerceNS
+ toPermutation = id
+ toPermutationWithDefault _def = id
instance Sym_RNC NS where
-- namespace n ns =
-- NS $ return $ HM.singleton ns $ HS.singleton n
module Language.Symantic.XML
( module Language.Symantic.XML.Document
, module Language.Symantic.XML.Parser
- , FilePos(..)
+ , Offset
+ , LineColumn(..)
, FileRange(..)
, NoSource(..)
, Sourced(..)
import Data.Sequence (Seq)
import Data.String (String, IsString(..))
import GHC.Generics (Generic)
-import Prelude ((-), error, fromIntegral)
+import Prelude ((+), (-), error, fromIntegral)
import System.IO (FilePath)
import Text.Show (Show(..), showsPrec, showChar, showParen, showString)
import qualified Data.Char.Properties.XMLCharProps as XC
import qualified Data.TreeSeq.Strict as TS
-- * Type 'XML'
-type XML = TS.Tree (Sourced FileSource Node)
+type XML = TS.Tree (Sourced (FileSource Offset) Node)
type XMLs = Seq XML
-- | Unify two 'XMLs', merging border 'NodeText's if any.
case (Seq.viewr x, Seq.viewl y) of
(xs Seq.:> x0, y0 Seq.:< ys) ->
case (x0,y0) of
- ( Tree0 (Sourced ssx@(FileRange {fileRange_file=fx}:|_sx) (NodeText tx))
- , Tree0 (Sourced ssy@(FileRange {fileRange_file=fy}:|_sy) (NodeText ty)) ) | fx == fy ->
+ ( Tree0 (Sourced sx (NodeText tx))
+ , Tree0 (Sourced sy (NodeText ty)) ) ->
xs `union`
- Seq.singleton (Tree0 $ (NodeText <$>) $ Sourced ssx tx <> Sourced ssy ty) `union`
+ Seq.singleton (Tree0 $ (NodeText <$>) $ Sourced sx tx <> Sourced sy ty) `union`
ys
_ -> x <> y
(Seq.EmptyR, _) -> y
showParen (p > 10) $
showsPrec 11 unSourced .
showString " @" . showsPrec 10 source
-instance (FromPad a, Semigroup a) => Semigroup (Sourced FileSource a) where
- Sourced (FileRange fx bx ex :| lx) x <> Sourced (FileRange _fy by ey :| _ly) y =
- Sourced (FileRange fx bx ey :| lx) $
- x<>fromPad (FilePos lines columns)<>y
- where
- lines = filePos_line by - filePos_line ex
- columns = filePos_column by - filePos_column (if lines <= 0 then ex else bx)
+instance Semigroup a => Semigroup (Sourced (FileSource Offset) a) where
+ (<>)
+ (Sourced rx@(FileRange xf xb xe :| xs) x)
+ (Sourced (FileRange yf yb ye :| _ys) y)
+ | xf == yf && xe == yb = Sourced (FileRange xf xb ye :| xs) $ x<>y
+ | otherwise = Sourced rx (x<>y)
+{-
+instance (FromPad a, Semigroup a) => Semigroup (Sourced (FileSource LineCol) a) where
+ (<>)
+ (Sourced rx@(FileRange xf xb xe :| xs) x)
+ (Sourced (FileRange yf yb ye :| _ys) y)
+ | xf == yf = Sourced (FileRange xf xb ye :| xs) $ x<>fromPad (LineColumn l c)<>y
+ | otherwise = Sourced rx (x<>y)
+ where
+ l = lineNum yb - lineNum xe
+ c = colNum yb - colNum (if l <= 0 then xe else xb)
-- ** Class 'FromPad'
class FromPad a where
- fromPad :: FilePos -> a
+ fromPad :: LineColumn -> a
instance FromPad T.Text where
- fromPad FilePos{..} =
- T.replicate filePos_line "\n" <>
- T.replicate filePos_column " "
+ fromPad LineColumn{..} =
+ T.replicate lineNum "\n" <>
+ T.replicate colNum " "
instance FromPad TL.Text where
- fromPad FilePos{..} =
- TL.replicate (fromIntegral filePos_line) "\n" <>
- TL.replicate (fromIntegral filePos_column) " "
+ fromPad LineColumn{..} =
+ TL.replicate (fromIntegral lineNum) "\n" <>
+ TL.replicate (fromIntegral colNum) " "
instance FromPad EscapedText where
fromPad = EscapedText . pure . fromPad
instance FromPad Escaped where
fromPad = EscapedPlain . fromPad
+-}
-- ** Class 'NoSource'
class NoSource src where
noSource :: src
-instance NoSource FileSource where
+instance NoSource pos => NoSource (FileSource pos) where
noSource = noSource :| []
-instance NoSource FileRange where
- noSource = FileRange "" filePos1 filePos1
+instance NoSource pos => NoSource (FileRange pos) where
+ noSource = FileRange "" noSource noSource
+instance NoSource Offset where
+ noSource = Offset def
+instance NoSource LineColumn where
+ noSource = LineColumn def def
{-
instance (FromPad a, Semigroup a, Monoid a) => Monoid (Sourced a) where
mempty = sourced0 mempty
notSourced = Sourced noSource
-- * Type 'FileSource'
-type FileSource = NonEmpty FileRange
+type FileSource pos = NonEmpty (FileRange pos)
+
+-- ** Type 'FileSourced'
+type FileSourced = Sourced (FileSource Offset)
-- ** Type 'FileRange'
-data FileRange
+data FileRange pos
= FileRange
{ fileRange_file :: FilePath
- , fileRange_begin :: FilePos
- , fileRange_end :: FilePos
+ , fileRange_begin :: pos
+ , fileRange_end :: pos
} deriving (Eq, Ord)
-instance Default FileRange where
- def = FileRange "" filePos1 filePos1
-instance Show FileRange where
+instance Default (FileRange Offset) where
+ def = FileRange "" def def
+instance Default (FileRange LineColumn) where
+ def = FileRange "" def def
+instance Show (FileRange Offset) where
+ showsPrec _p FileRange{..} =
+ showString fileRange_file .
+ showChar '@' . showsPrec 10 fileRange_begin .
+ showChar '-' . showsPrec 10 fileRange_end
+instance Show (FileRange LineColumn) where
showsPrec _p FileRange{..} =
showString fileRange_file .
showChar '#' . showsPrec 10 fileRange_begin .
showChar '-' . showsPrec 10 fileRange_end
--- *** Type 'FilePos'
+-- *** Type 'Offset'
+newtype Offset = Offset Int
+ deriving (Eq, Ord)
+instance Show Offset where
+ showsPrec p (Offset o) = showsPrec p o
+instance Default Offset where
+ def = Offset 0
+instance Semigroup Offset where
+ Offset x <> Offset y = Offset (x+y)
+instance Monoid Offset where
+ mempty = def
+ mappend = (<>)
+
+-- *** Type 'LineColumn'
-- | Absolute text file position.
-data FilePos = FilePos
- { filePos_line :: {-# UNPACK #-} LineNum
- , filePos_column :: {-# UNPACK #-} ColNum
+data LineColumn = LineColumn
+ { lineNum :: {-# UNPACK #-} Offset
+ , colNum :: {-# UNPACK #-} Offset
} deriving (Eq, Ord)
-instance Default FilePos where
- def = filePos1
-instance Show FilePos where
- showsPrec _p FilePos{..} =
- showsPrec 11 filePos_line .
+instance Default LineColumn where
+ def = LineColumn def def
+instance Show LineColumn where
+ showsPrec _p LineColumn{..} =
+ showsPrec 11 lineNum .
showChar ':' .
- showsPrec 11 filePos_column
-
-filePos1 :: FilePos
-filePos1 = FilePos 1 1
-
--- **** Type 'LineNum'
-type LineNum = Int
+ showsPrec 11 colNum
--- **** Type 'ColNum'
-type ColNum = Int
+filePos1 :: LineColumn
+filePos1 = def
import Data.Either (Either(..))
import Data.Foldable (Foldable(..))
import Data.Function (($), (.))
-import Data.Functor ((<$>), (<$))
-import Data.Functor.Identity (Identity(..))
-import Data.List.NonEmpty (NonEmpty(..))
+import Data.Functor ((<$>))
import Data.Maybe (Maybe(..))
import Data.Monoid (Monoid(..))
import Data.Ord (Ord(..))
-import Data.Proxy (Proxy(..))
import Data.Semigroup (Semigroup(..))
import Data.Sequence (ViewL(..))
import Data.String (String)
-import Data.Tuple (snd)
+import Prelude (error)
import Text.Show (Show(..))
-import qualified Control.Monad.Trans.State as S
import qualified Data.List as List
+import qualified Data.List.NonEmpty as NonEmpty
import qualified Data.Sequence as Seq
import qualified Text.Megaparsec as P
-import Language.Symantic.XML.Document (XML, XMLs)
+import Language.Symantic.XML.Document (XML, XMLs)
import qualified Language.Symantic.XML.Document as XML
-- | Whether the given 'XML.Node' must be ignored by the parser.
t@(XML.Tree XML.Sourced{XML.unSourced=n} _) :< ts
| isIgnoredNode n -> P.take1_ ts
| otherwise -> Just (t, ts)
- positionAt1 _s pos (XML.Tree (XML.Sourced (XML.FileRange{XML.fileRange_begin=XML.FilePos l c}:|_) _n) _ts) =
- pos{ P.sourceLine = P.mkPos l
- , P.sourceColumn = P.mkPos c }
- positionAtN s pos ts =
- case Seq.viewl ts of
- t :< _ -> P.positionAt1 s pos t
- EmptyL -> pos
- advance1 _s _indent pos (XML.Tree (XML.Sourced (XML.FileRange{XML.fileRange_end=XML.FilePos l c}:|_) _n) _ts) =
- -- WARNING: the end of a 'FileRange' is not necessarily
- -- the beginning of the next 'FileRange'.
- pos{ P.sourceLine = P.mkPos l
- , P.sourceColumn = P.mkPos c }
- advanceN s = foldl' . P.advance1 s
takeN_ n s | n <= 0 = Just (mempty, s)
| null s = Nothing
| otherwise =
case P.takeN_ (Seq.length ko) rs of
Nothing -> Just (ok, rs)
Just (ns',rs') -> Just (ok<>ns', rs')
- tokensToChunk _s = Seq.fromList
- chunkToTokens _s = toList
- chunkLength _s = Seq.length
- takeWhile_ = Seq.spanl
+ tokensToChunk _s = Seq.fromList
+ chunkToTokens _s = toList
+ chunkLength _s = Seq.length
+ takeWhile_ = Seq.spanl
+ -- | NOTE: unimplemented: useless since each 'XML.Node' is annotated with its 'FileSource'.
+ reachOffset = error "[BUG] P.Stream XMLs: reachOffset is not helpful, please use annotated source locations"
+ -- | NOTE: useless since each 'XML.Node' is annotated with its 'FileSource'.
+ reachOffsetNoLine = error "[BUG] P.Stream XMLs: reachOffsetNoLine is not helpful, please use annotated source locations"
+ showTokens _s toks = List.intercalate ", " $ toList $ showTree <$> toks
+ where
+ showTree :: XML -> String
+ showTree (XML.Tree a _ts) =
+ showCell a $ \case
+ XML.NodeElem n -> "element "<>show n<>""
+ XML.NodeAttr n -> "attribute "<>show n<>""
+ XML.NodeText _t -> "text"
+ XML.NodeComment _c -> "comment"
+ XML.NodePI n _t -> "processing-instruction "<>show n<>""
+ XML.NodeCDATA _t -> "cdata"
+
+ showCell (XML.Sourced path@(XML.FileRange{XML.fileRange_file} NonEmpty.:| _) a) f =
+ if null fileRange_file
+ then f a
+ else f a <> foldMap (\p -> "\n in "<>show p) path
--- | Adjust the current 'P.SourcePos'
--- to be the begining of the following-sibling 'XML' node
--- so that on error 'P.toHints' keeps expected 'P.Token's in the list,
--- and thus makes useful error messages.
---
--- This is needed because the end of a 'FileRange'
--- is not necessarily the begin of the next 'FileRange'.
-
--- type Parser = S.StateT State (P.Parsec ErrorRead XMLs)
-
-setFilePosToNextNode :: P.MonadParsec e XMLs m => m ()
-setFilePosToNextNode = do
- P.State
- { P.stateInput = inp
- , P.statePos = pos :| _
- } <- P.getParserState
- case Seq.viewl inp of
- EmptyL -> return ()
- t :< _ -> P.setPosition $ P.positionAt1 (Proxy::Proxy XMLs) pos t
-
--- | @runParserT st pos p xs@ runs a 'Parser' @p@ to parse @xs@,
--- using state @st@ from position @pos@.
-runParserT ::
- Ord err =>
- Monad m =>
- P.ParsecT err XMLs m a ->
- NonEmpty P.SourcePos ->
- XMLs ->
- m (Either (P.ParseError (P.Token XMLs) err) a)
-runParserT p pos inp =
- snd <$>
- P.runParserT' p P.State
- { P.stateInput = inp
- , P.statePos =
- case Seq.viewl inp of
- EmptyL -> pos
- XML.Tree (XML.Sourced ss _) _ :< _ ->
- (<$> ss) $ \XML.FileRange{fileRange_begin=bp, fileRange_file} ->
- P.SourcePos fileRange_file
- (P.mkPos $ XML.filePos_line bp)
- (P.mkPos $ XML.filePos_column bp)
- , P.stateTabWidth = P.pos1
- , P.stateTokensProcessed = 0
- }
-
--- | Like 'runParser', but using 'Identity' as the inner-monad of 'P.ParsecT'.
-runParser ::
- Ord err =>
- P.Parsec err XMLs a ->
- NonEmpty P.SourcePos ->
- XMLs ->
- Either (P.ParseError (P.Token XMLs) err) a
-runParser p pos xs = runIdentity $ runParserT p pos xs
-
--- | @parser p xs@ returns a parser parsing @xs@ entirely with @p@,
--- applying 'setFilePosToNextNode' in case of success,
--- or resetting 'P.statePos' and re-raising the exception in case of error.
-parser :: Ord err => P.Parsec err XMLs a -> XMLs -> P.Parsec err XMLs a
-parser p xs = do
- P.State{P.statePos=pos} <- P.getParserState
- case runParser (p <* P.eof) pos xs of
- Left (P.TrivialError statePos un ex) -> do
- s <- P.getParserState
- P.setParserState s{P.statePos}
- P.failure un ex
- Left (P.FancyError statePos errs) -> do
- s <- P.getParserState
- P.setParserState s{P.statePos}
- P.fancyFailure errs
- Right a -> a <$ setFilePosToNextNode
-
--- | @stateParser p xs@ returns a stateful parser parsing @xs@ with @p@,
--- applying 'setFilePosToNextNode' in case of success.
-stateParser ::
- Ord err =>
- S.StateT st (P.Parsec err XMLs) a ->
- XMLs ->
- S.StateT st (P.Parsec err XMLs) a
-stateParser p xs = do
- st <- S.get
- P.State{P.statePos=pos} <- P.getParserState
- case runParser (S.runStateT (p <* P.eof) st) pos xs of
- Left (P.TrivialError statePos un ex) -> do
- -- NOTE: just re-raising exception.
- s <- P.getParserState
- P.setParserState s{P.statePos}
- P.failure un ex
- Left (P.FancyError statePos errs) -> do
- -- NOTE: just re-raising exception.
- s <- P.getParserState
- P.setParserState s{P.statePos}
- P.fancyFailure errs
- Right (a, st') -> do
- S.put st'
- a <$ setFilePosToNextNode
+-- | @subParser p xs@ returns a parser parsing @xs@ entirely with @p@,
+-- updating 'P.stateOffset' and re-raising any exception.
+subParser :: Ord err => P.Parsec err XMLs a -> XMLs -> P.Parsec err XMLs a
+subParser p xs = do
+ st <- P.getParserState
+ let (st', res) = P.runParser' (p <* P.eof) st
+ { P.stateInput = xs
+ , P.stateOffset = P.stateOffset st
+ }
+ P.updateParserState (\s -> s{P.stateOffset = P.stateOffset st'})
+ case res of
+ Right a -> return a
+ Left (P.ParseErrorBundle errs _) ->
+ case NonEmpty.head errs of
+ P.TrivialError _o us es -> P.failure us es
+ P.FancyError _o es -> P.fancyFailure es
import Language.Symantic.XML.Document
import Language.Symantic.XML.Read.Parser
-readXML :: FilePath -> TL.Text -> Either (P.ParseError (P.Token TL.Text) Error) XMLs
+readXML :: FilePath -> TL.Text -> Either (P.ParseErrorBundle TL.Text Error) XMLs
readXML filePath stateInput =
snd $
P.runParser'
(R.runReaderT p_document def)
P.State
{ P.stateInput
- , P.statePos = pure $ P.initialPos filePath
- , P.stateTabWidth = P.pos1 -- NOTE: do not expand tabs.
- , P.stateTokensProcessed = 0
+ , P.stateOffset = 0
+ , P.statePosState = P.PosState
+ { P.pstateInput = stateInput
+ , P.pstateOffset = 0
+ , P.pstateSourcePos = P.initialPos filePath
+ , P.pstateTabWidth = P.pos1
+ , P.pstateLinePrefix = ""
+ }
}
readFile :: FilePath -> IO (Either ErrorRead TL.Text)
| otherwise -> do
ns <- lookupNamePrefix prefix
return QName{qNameSpace=ns, qNameLocal=pNameLocal n}
- elemAttrs :: [Sourced FileSource (QName, Sourced FileSource EscapedText)] <-
+ elemAttrs :: [FileSourced (QName, FileSourced EscapedText)] <-
-- NOTE: expand attributes' PName into QName.
forM as $ \s@Sourced{unSourced=(an, av)} -> do
ns <- maybe (return "") lookupNamePrefix $ pNameSpace an
let qn = QName{qNameSpace=ns, qNameLocal=pNameLocal an}
return s{unSourced=(qn, av)}
-- NOTE: check for attribute collision.
- let attrsByQName :: HM.HashMap QName [Sourced FileSource (QName, Sourced FileSource EscapedText)] =
+ let attrsByQName :: HM.HashMap QName [FileSourced (QName, FileSourced EscapedText)] =
HM.fromListWith (<>) $ (<$> elemAttrs) $ \a@(Sourced _c (an, _av)) -> (an, [a])
case HM.toList $ HM.filter (\x -> length x > 1) attrsByQName of
(an, _):_ -> p_error $ Error_Attribute_collision an
return $ Tree (cell $ NodeElem elemName) content
-- *** Attribute
-p_Attribute :: P.Tokens s ~ TL.Text => Parser Error s (Sourced FileSource (PName, Sourced FileSource EscapedText))
+p_Attribute :: P.Tokens s ~ TL.Text => Parser Error s (FileSourced (PName, FileSourced EscapedText))
p_Attribute = p_Sourced $ (,) <$> p_PName <* p_Eq <*> p_AttValue
-p_AttValue :: P.Tokens s ~ TL.Text => Parser Error s (Sourced FileSource EscapedText)
+p_AttValue :: P.Tokens s ~ TL.Text => Parser Error s (FileSourced EscapedText)
p_AttValue = P.label "AttValue" $ p_quoted p_AttValueText
-p_AttValueText :: P.Tokens s ~ TL.Text => Char -> Parser Error s (Sourced FileSource EscapedText)
+p_AttValueText :: P.Tokens s ~ TL.Text => Char -> Parser Error s (FileSourced EscapedText)
p_AttValueText q = p_Sourced $
EscapedText . Seq.fromList <$> P.many
( p_Reference
{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE FlexibleContexts #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE Rank2Types #-}
{-# LANGUAGE StrictData #-}
import Data.Bool
import Data.Char (Char)
import Data.Default.Class (Default(..))
-import Data.Either (Either(..))
import Data.Eq (Eq(..))
import Data.Function (($), (.))
import Data.Functor ((<$>))
-import Data.Functor.Identity (Identity(..))
-import Data.List.NonEmpty (NonEmpty(..), nonEmpty)
-import Data.Maybe (Maybe(..), fromMaybe)
+import Data.List.NonEmpty (NonEmpty(..))
+import Data.Maybe (Maybe(..))
import Data.Ord (Ord(..))
-import Data.Proxy (Proxy(..))
-import Data.Semigroup (Semigroup(..))
import Data.String (IsString)
-import Data.Tuple (snd)
import Prelude (Integer)
import Text.Show (Show(..))
import qualified Control.Monad.Trans.Reader as R
-- | Convenient alias.
type Parser e s a =
Parsable e s a =>
- R.ReaderT Reader (P.ParsecT e s Identity) a
+ R.ReaderT Reader (P.Parsec e s) a
-- ** Type 'Parsable'
type Parsable e s a =
-- ** Type 'Reader'
data Reader = Reader
- { reader_source :: FileSource
+ { reader_source :: FileSource Offset
, reader_ns_scope :: HM.HashMap NCName Namespace
, reader_ns_default :: Namespace
} deriving (Show)
, reader_ns_default = ""
}
-p_FilePos :: Parser e s FilePos
-p_FilePos = do
- pos :| _ <- P.statePos <$> P.getParserState
- return $ FilePos (P.unPos $ P.sourceLine pos) (P.unPos $ P.sourceColumn pos)
+p_Offset :: Parser e s Offset
+p_Offset = Offset <$> P.getOffset
+{-# INLINE p_Offset #-}
-p_Sourced :: Parser e s a -> Parser e s (Sourced FileSource a)
+p_Sourced :: Parser e s a -> Parser e s (Sourced (FileSource Offset) a)
p_Sourced pa = do
Reader{reader_source} <- R.ask
- beginPos :| _ <- P.statePos <$> P.getParserState
+ b <- P.getParserState
+ let fileRange_file = P.sourceName $ P.pstateSourcePos $ P.statePosState b
+ let fileRange_begin = Offset $ P.stateOffset b
a <- pa
- fileRange_end <- p_FilePos
- let fileRange = FileRange
- { fileRange_file = P.sourceName beginPos
- , fileRange_begin =
- FilePos
- (P.unPos $ P.sourceLine beginPos)
- (P.unPos $ P.sourceColumn beginPos)
- , fileRange_end
- }
- return $ Sourced (setSource fileRange reader_source) a
-
-setSource :: FileRange -> FileSource -> FileSource
+ e <- P.getParserState
+ let fileRange_end = Offset $ P.stateOffset e
+ return $ Sourced (setSource FileRange{..} reader_source) a
+
+setSource :: FileRange pos -> FileSource pos -> FileSource pos
setSource fileRange (_curr:|next) = fileRange :| next
--- | Like 'p_Sourced' but uncoupled for more flexibility.
+-- | Like 'p_Sourced' but uncoupled (through the use of 'p_SourcedEnd') for more flexibility.
p_SourcedBegin :: Parser e s a -> Parser e s a
p_SourcedBegin pa = do
- currPos :| _ <- P.statePos <$> P.getParserState
- let fileRange_begin = FilePos
- (P.unPos $ P.sourceLine currPos)
- (P.unPos $ P.sourceColumn currPos)
- let fileRange = FileRange
- { fileRange_file = P.sourceName currPos
- , fileRange_begin
- , fileRange_end = fileRange_begin
- }
+ b <- P.getParserState
+ let fileRange_file = P.sourceName $ P.pstateSourcePos $ P.statePosState b
+ let fileRange_begin = Offset $ P.stateOffset b
+ let fileRange_end = fileRange_begin
(`R.local` pa) $ \ro@Reader{..} ->
- ro{ reader_source = setSource fileRange reader_source }
+ ro{ reader_source = setSource FileRange{..} reader_source }
--- | Only to be used within a 'p_SourcedBegin'.
-p_SourcedEnd :: Parser e s (a -> Sourced FileSource a)
+-- | WARNING: Only to be used within a 'p_SourcedBegin'.
+p_SourcedEnd :: Parser e s (a -> Sourced (FileSource Offset) a)
p_SourcedEnd = do
- fileRange_end <- p_FilePos
Reader{..} <- R.ask
+ e <- P.getParserState
+ let fileRange_end = Offset $ P.stateOffset e
return $ Sourced $
(\(curr:|path) -> curr{fileRange_end}:|path)
reader_source
+{-
-- ** Type 'StreamSourced'
-- | Wrap 'TL.Text' to have a 'P.Stream' instance
-- whose 'P.advance1' method abuses the tab width state
tokensToChunk _s = P.tokensToChunk (Proxy::Proxy TL.Text)
chunkToTokens _s = P.chunkToTokens (Proxy::Proxy TL.Text)
chunkLength _s = P.chunkLength (Proxy::Proxy TL.Text)
+ {-
advance1 _s indent (P.SourcePos n line col) c =
case c of
'\n' -> P.SourcePos n (line <> P.pos1) indent
_ -> P.SourcePos n line (col <> P.pos1)
advanceN s indent = TL.foldl' (P.advance1 s indent)
+ -}
-- | Wrapper around |P.runParser'|
-- to use given 'Sourced' as starting position.
where
indent = P.mkPos $ filePos_column bp
ro = def{ reader_source = fromMaybe (pure def) $ nonEmpty path }
-
+-}
-- * Type 'Error'
data Error
-resolver: lts-12.25
+resolver: lts-12.26
packages:
- '.'
- location: '../treeseq'
extra-dep: true
- location: '../symantic/symantic-grammar'
extra-dep: true
-
+extra-deps:
+- megaparsec-7.0.4@sha256:a7397151601cbe6b8f831f8bdad1a10118dcd6d9a7ee50d6bbdcfbd1181b4ba2
-- PVP: +-+------- breaking API changes
-- | | +----- non-breaking API additions
-- | | | +--- code changes with no API change
-version: 0.0.0.20181221
+version: 0.0.0.20190118
category: Data Structures
synopsis: Library for reading, validating and writing a subset of the XML format.
description: Symantics for an approximative implementation
build-type: Simple
cabal-version: 1.24
-tested-with: GHC==8.4.3
+tested-with: GHC==8.4.4
extra-source-files:
stack.yaml
extra-tmp-files:
, filepath >= 1.4
, hashable >= 1.2.6
, hxt-charproperties >= 9.2
- , megaparsec >= 6.3
+ , megaparsec >= 7.0.4
+ -- , parser-combinators >= 1.0
, safe >= 0.3
, text >= 1.2
, transformers >= 0.5
, containers >= 0.5
, deepseq >= 1.4
, filepath >= 1.4
- , megaparsec >= 6.3
+ , megaparsec >= 7.0.4
, tasty >= 0.11
, tasty-golden >= 2.3
, text >= 1.2
import Control.Monad (Monad(..), sequence)
import Data.Bool
import Data.Either (Either(..))
-import Data.Foldable (Foldable(..))
import Data.Function (($), (.))
import Data.Functor ((<$>))
-import Data.List.NonEmpty (NonEmpty(..))
import Data.Semigroup (Semigroup(..))
import Data.String (String)
import System.FilePath (FilePath)
import Test.Tasty
import Test.Tasty.Golden
-import Language.Symantic.XML (XML, XMLs)
+import Language.Symantic.XML (XMLs)
import qualified Language.Symantic.XML as XML
-- * Golden testing utilities
XML.readFile inputFile >>= \case
Left err -> return $ Left $ show err
Right input ->
- return $ left P.parseErrorPretty $
+ return $ left P.errorBundlePretty $
XML.readXML inputFile input
-instance P.ShowToken XML where
- showTokens toks = List.intercalate ", " $ toList $ showTree <$> toks
- where
- showTree :: XML -> String
- showTree (XML.Tree a _ts) =
- showCell a $ \case
- XML.NodeElem n -> "<"<>show n
- XML.NodeAttr n -> show n<>"="
- XML.NodeText _t -> "text"
- XML.NodeComment _c -> "<!--"
- XML.NodePI n _t -> "<?"<>show n
- XML.NodeCDATA _t -> "<[CDATA[["
-
- showCell (XML.Sourced path@(XML.FileRange{XML.fileRange_file} :| _) a) f =
- if null fileRange_file
- then f a
- else f a <> foldMap (\p -> "\n in "<>show p) path
-
goldensIO :: IO TestTree
goldensIO =
testGroup "Golden" <$>
-(NodeElem root) @(test/Golden/XML/0001.xml#1:1-1:8 :| [])
+(NodeElem root) @(test/Golden/XML/0001.xml@0-7 :| [])
-(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0001.xml#1:8-2:1 :| [])
+(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0001.xml@7-8 :| [])
-(NodeElem root) @(test/Golden/XML/0002.xml#1:1-1:14 :| [])
+(NodeElem root) @(test/Golden/XML/0002.xml@0-13 :| [])
-(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0002.xml#1:14-2:1 :| [])
+(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0002.xml@13-14 :| [])
-(NodeElem root) @(test/Golden/XML/0003.xml#1:1-1:15 :| [])
+(NodeElem root) @(test/Golden/XML/0003.xml@0-14 :| [])
|
-`- (NodeAttr n) @(test/Golden/XML/0003.xml#1:7-1:12 :| [])
+`- (NodeAttr n) @(test/Golden/XML/0003.xml@6-11 :| [])
|
- `- (NodeText (EscapedText (fromList [EscapedPlain "v"]))) @(test/Golden/XML/0003.xml#1:10-1:11 :| [])
+ `- (NodeText (EscapedText (fromList [EscapedPlain "v"]))) @(test/Golden/XML/0003.xml@9-10 :| [])
-(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0003.xml#1:15-2:1 :| [])
+(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0003.xml@14-15 :| [])
-(NodeElem doc) @(test/Golden/XML/0004.xml#1:1-3:7 :| [])
+(NodeElem doc) @(test/Golden/XML/0004.xml@0-33 :| [])
|
-+- (NodeText (EscapedText (fromList [EscapedPlain "\r\n"]))) @(test/Golden/XML/0004.xml#1:6-2:1 :| [])
++- (NodeText (EscapedText (fromList [EscapedPlain "\r\n"]))) @(test/Golden/XML/0004.xml@5-7 :| [])
|
-+- (NodeElem a) @(test/Golden/XML/0004.xml#2:1-2:19 :| [])
++- (NodeElem a) @(test/Golden/XML/0004.xml@7-25 :| [])
| |
-| `- (NodeElem b) @(test/Golden/XML/0004.xml#2:4-2:15 :| [])
+| `- (NodeElem b) @(test/Golden/XML/0004.xml@10-21 :| [])
| |
-| `- (NodeElem c) @(test/Golden/XML/0004.xml#2:7-2:11 :| [])
+| `- (NodeElem c) @(test/Golden/XML/0004.xml@13-17 :| [])
|
-`- (NodeText (EscapedText (fromList [EscapedPlain "\r\n"]))) @(test/Golden/XML/0004.xml#2:19-3:1 :| [])
+`- (NodeText (EscapedText (fromList [EscapedPlain "\r\n"]))) @(test/Golden/XML/0004.xml@25-27 :| [])
-(NodeElem doc) @(test/Golden/XML/0005.xml#1:1-3:7 :| [])
+(NodeElem doc) @(test/Golden/XML/0005.xml@0-33 :| [])
|
-+- (NodeText (EscapedText (fromList [EscapedPlain "\r\n"]))) @(test/Golden/XML/0005.xml#1:6-2:1 :| [])
++- (NodeText (EscapedText (fromList [EscapedPlain "\r\n"]))) @(test/Golden/XML/0005.xml@5-7 :| [])
|
-+- (NodeElem a) @(test/Golden/XML/0005.xml#2:1-2:19 :| [])
++- (NodeElem a) @(test/Golden/XML/0005.xml@7-25 :| [])
| |
-| `- (NodeElem b) @(test/Golden/XML/0005.xml#2:4-2:15 :| [])
+| `- (NodeElem b) @(test/Golden/XML/0005.xml@10-21 :| [])
| |
-| `- (NodeElem c) @(test/Golden/XML/0005.xml#2:7-2:11 :| [])
+| `- (NodeElem c) @(test/Golden/XML/0005.xml@13-17 :| [])
|
-`- (NodeText (EscapedText (fromList [EscapedPlain "\r\n"]))) @(test/Golden/XML/0005.xml#2:19-3:1 :| [])
+`- (NodeText (EscapedText (fromList [EscapedPlain "\r\n"]))) @(test/Golden/XML/0005.xml@25-27 :| [])
-(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0005.xml#3:7-4:1 :| [])
+(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0005.xml@33-35 :| [])
-(NodeComment " comment after document element") @(test/Golden/XML/0005.xml#4:1-4:39 :| [])
+(NodeComment " comment after document element") @(test/Golden/XML/0005.xml@35-73 :| [])
-(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0005.xml#4:39-5:1 :| [])
+(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0005.xml@73-75 :| [])
-(NodePI PI "after document element") @(test/Golden/XML/0005.xml#5:1-5:30 :| [])
+(NodePI PI "after document element") @(test/Golden/XML/0005.xml@75-104 :| [])
-(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0005.xml#5:30-6:1 :| [])
+(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0005.xml@104-106 :| [])
-(NodeComment " comment after document element") @(test/Golden/XML/0005.xml#6:1-6:39 :| [])
+(NodeComment " comment after document element") @(test/Golden/XML/0005.xml@106-144 :| [])
-(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0005.xml#6:39-7:1 :| [])
+(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0005.xml@144-146 :| [])
-(NodePI PI "after document element") @(test/Golden/XML/0005.xml#7:1-7:30 :| [])
+(NodePI PI "after document element") @(test/Golden/XML/0005.xml@146-175 :| [])
-(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0005.xml#7:30-8:1 :| [])
+(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0005.xml@175-177 :| [])
-(NodeComment " comment after document element") @(test/Golden/XML/0005.xml#8:1-8:39 :| [])
+(NodeComment " comment after document element") @(test/Golden/XML/0005.xml@177-215 :| [])
-(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0005.xml#8:39-9:1 :| [])
+(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0005.xml@215-217 :| [])
-(NodePI PI "after document element") @(test/Golden/XML/0005.xml#9:1-9:30 :| [])
+(NodePI PI "after document element") @(test/Golden/XML/0005.xml@217-246 :| [])
-(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0005.xml#9:30-10:1 :| [])
+(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0005.xml@246-248 :| [])
-(NodeText (EscapedText (fromList [EscapedPlain "\t\n "]))) @(test/Golden/XML/0006.xml#1:1-2:2 :| [])
+(NodeText (EscapedText (fromList [EscapedPlain "\t\n "]))) @(test/Golden/XML/0006.xml@0-4 :| [])
-(NodeElem doc) @(test/Golden/XML/0006.xml#2:2-2:8 :| [])
+(NodeElem doc) @(test/Golden/XML/0006.xml@4-10 :| [])
-(NodeElem doc) @(test/Golden/XML/0007.xml#1:1-6:7 :| [])
+(NodeElem doc) @(test/Golden/XML/0007.xml@0-72 :| [])
|
-+- (NodeText (EscapedText (fromList [EscapedPlain "\r\n"]))) @(test/Golden/XML/0007.xml#1:6-2:1 :| [])
++- (NodeText (EscapedText (fromList [EscapedPlain "\r\n"]))) @(test/Golden/XML/0007.xml@5-7 :| [])
|
-+- (NodeElem A) @(test/Golden/XML/0007.xml#2:1-4:8 :| [])
++- (NodeElem A) @(test/Golden/XML/0007.xml@7-40 :| [])
| |
-| `- (NodeAttr a) @(test/Golden/XML/0007.xml#2:4-4:6 :| [])
+| `- (NodeAttr a) @(test/Golden/XML/0007.xml@10-38 :| [])
| |
-| `- (NodeText (EscapedText (fromList [EscapedPlain "asdf",EscapedEntityRef (EntityRef {entityRef_name = gt, entityRef_value = ">"}),EscapedEntityRef (EntityRef {entityRef_name = apos, entityRef_value = "'"}),EscapedCharRef (CharRef '"'),EscapedEntityRef (EntityRef {entityRef_name = gt, entityRef_value = ">"}),EscapedPlain "\r\nasdf\r\n\t?",EscapedEntityRef (EntityRef {entityRef_name = gt, entityRef_value = ">"}),EscapedPlain "%"]))) @(test/Golden/XML/0007.xml#2:7-4:5 :| [])
+| `- (NodeText (EscapedText (fromList [EscapedPlain "asdf",EscapedEntityRef (EntityRef {entityRef_name = gt, entityRef_value = ">"}),EscapedEntityRef (EntityRef {entityRef_name = apos, entityRef_value = "'"}),EscapedCharRef (CharRef '"'),EscapedEntityRef (EntityRef {entityRef_name = gt, entityRef_value = ">"}),EscapedPlain "\r\nasdf\r\n\t?",EscapedEntityRef (EntityRef {entityRef_name = gt, entityRef_value = ">"}),EscapedPlain "%"]))) @(test/Golden/XML/0007.xml@13-37 :| [])
|
-+- (NodeText (EscapedText (fromList [EscapedPlain "\r\n"]))) @(test/Golden/XML/0007.xml#4:8-5:1 :| [])
++- (NodeText (EscapedText (fromList [EscapedPlain "\r\n"]))) @(test/Golden/XML/0007.xml@40-42 :| [])
|
-+- (NodeElem A) @(test/Golden/XML/0007.xml#5:1-5:23 :| [])
++- (NodeElem A) @(test/Golden/XML/0007.xml@42-64 :| [])
| |
-| `- (NodeAttr a) @(test/Golden/XML/0007.xml#5:4-5:21 :| [])
+| `- (NodeAttr a) @(test/Golden/XML/0007.xml@45-62 :| [])
| |
-| `- (NodeText (EscapedText (fromList [EscapedEntityRef (EntityRef {entityRef_name = quot, entityRef_value = "\""}),EscapedEntityRef (EntityRef {entityRef_name = quot, entityRef_value = "\""}),EscapedEntityRef (EntityRef {entityRef_name = gt, entityRef_value = ">"}),EscapedCharRef (CharRef '\''),EscapedCharRef (CharRef '"')]))) @(test/Golden/XML/0007.xml#5:7-5:20 :| [])
+| `- (NodeText (EscapedText (fromList [EscapedEntityRef (EntityRef {entityRef_name = quot, entityRef_value = "\""}),EscapedEntityRef (EntityRef {entityRef_name = quot, entityRef_value = "\""}),EscapedEntityRef (EntityRef {entityRef_name = gt, entityRef_value = ">"}),EscapedCharRef (CharRef '\''),EscapedCharRef (CharRef '"')]))) @(test/Golden/XML/0007.xml@48-61 :| [])
|
-`- (NodeText (EscapedText (fromList [EscapedPlain "\r\n"]))) @(test/Golden/XML/0007.xml#5:23-6:1 :| [])
+`- (NodeText (EscapedText (fromList [EscapedPlain "\r\n"]))) @(test/Golden/XML/0007.xml@64-66 :| [])
-(NodeElem doc) @(test/Golden/XML/0008.xml#1:1-1:46 :| [])
+(NodeElem doc) @(test/Golden/XML/0008.xml@0-45 :| [])
|
-`- (NodeText (EscapedText (fromList [EscapedPlain "a%b%",EscapedEntityRef (EntityRef {entityRef_name = lt, entityRef_value = "<"}),EscapedPlain "/doc",EscapedEntityRef (EntityRef {entityRef_name = gt, entityRef_value = ">"}),EscapedCharRef (CharRef '<'),EscapedPlain "/doc",EscapedEntityRef (EntityRef {entityRef_name = gt, entityRef_value = ">"}),EscapedPlain "]]",EscapedEntityRef (EntityRef {entityRef_name = lt, entityRef_value = "<"}),EscapedEntityRef (EntityRef {entityRef_name = amp, entityRef_value = "&"})]))) @(test/Golden/XML/0008.xml#1:6-1:40 :| [])
+`- (NodeText (EscapedText (fromList [EscapedPlain "a%b%",EscapedEntityRef (EntityRef {entityRef_name = lt, entityRef_value = "<"}),EscapedPlain "/doc",EscapedEntityRef (EntityRef {entityRef_name = gt, entityRef_value = ">"}),EscapedCharRef (CharRef '<'),EscapedPlain "/doc",EscapedEntityRef (EntityRef {entityRef_name = gt, entityRef_value = ">"}),EscapedPlain "]]",EscapedEntityRef (EntityRef {entityRef_name = lt, entityRef_value = "<"}),EscapedEntityRef (EntityRef {entityRef_name = amp, entityRef_value = "&"})]))) @(test/Golden/XML/0008.xml@5-39 :| [])
-(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0008.xml#1:46-2:1 :| [])
+(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0008.xml@45-47 :| [])
-(NodePI pitarget "'") @(test/Golden/XML/0009.xml#1:1-1:15 :| [])
+(NodePI pitarget "'") @(test/Golden/XML/0009.xml@0-14 :| [])
-(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0009.xml#1:15-2:1 :| [])
+(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0009.xml@14-16 :| [])
-(NodeElem doc) @(test/Golden/XML/0009.xml#2:1-2:7 :| [])
+(NodeElem doc) @(test/Golden/XML/0009.xml@16-22 :| [])
-(NodePI pitarget "\"") @(test/Golden/XML/0010.xml#1:1-1:15 :| [])
+(NodePI pitarget "\"") @(test/Golden/XML/0010.xml@0-14 :| [])
-(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0010.xml#1:15-2:1 :| [])
+(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0010.xml@14-16 :| [])
-(NodeElem doc) @(test/Golden/XML/0010.xml#2:1-2:7 :| [])
+(NodeElem doc) @(test/Golden/XML/0010.xml@16-22 :| [])
-(NodeElem doc) @(test/Golden/XML/0011.xml#1:1-1:7 :| [])
+(NodeElem doc) @(test/Golden/XML/0011.xml@0-6 :| [])
-(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0011.xml#1:7-2:1 :| [])
+(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0011.xml@6-8 :| [])
-(NodePI xml "") @(test/Golden/XML/0012.xml#1:1-1:22 :| [])
+(NodePI xml "") @(test/Golden/XML/0012.xml@0-21 :| [])
|
-`- (NodeAttr version) @(test/Golden/XML/0012.xml#1:6-1:20 :| [])
+`- (NodeAttr version) @(test/Golden/XML/0012.xml@5-19 :| [])
|
- `- (NodeText (EscapedText (fromList [EscapedPlain "1.0"]))) @(test/Golden/XML/0012.xml#1:16-1:19 :| [])
+ `- (NodeText (EscapedText (fromList [EscapedPlain "1.0"]))) @(test/Golden/XML/0012.xml@15-18 :| [])
-(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0012.xml#1:22-2:1 :| [])
+(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0012.xml@21-23 :| [])
-(NodeElem doc) @(test/Golden/XML/0012.xml#2:1-2:7 :| [])
+(NodeElem doc) @(test/Golden/XML/0012.xml@23-29 :| [])
-(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0012.xml#2:7-3:1 :| [])
+(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0012.xml@29-31 :| [])
-(NodePI xml "") @(test/Golden/XML/0013.xml#1:1-1:22 :| [])
+(NodePI xml "") @(test/Golden/XML/0013.xml@0-21 :| [])
|
-`- (NodeAttr version) @(test/Golden/XML/0013.xml#1:6-1:20 :| [])
+`- (NodeAttr version) @(test/Golden/XML/0013.xml@5-19 :| [])
|
- `- (NodeText (EscapedText (fromList [EscapedPlain "1.0"]))) @(test/Golden/XML/0013.xml#1:16-1:19 :| [])
+ `- (NodeText (EscapedText (fromList [EscapedPlain "1.0"]))) @(test/Golden/XML/0013.xml@15-18 :| [])
-(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0013.xml#1:22-2:1 :| [])
+(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0013.xml@21-23 :| [])
-(NodeComment "comment") @(test/Golden/XML/0013.xml#2:1-2:15 :| [])
+(NodeComment "comment") @(test/Golden/XML/0013.xml@23-37 :| [])
-(NodeText (EscapedText (fromList [EscapedPlain " "]))) @(test/Golden/XML/0013.xml#2:15-2:16 :| [])
+(NodeText (EscapedText (fromList [EscapedPlain " "]))) @(test/Golden/XML/0013.xml@37-38 :| [])
-(NodePI pi "") @(test/Golden/XML/0013.xml#2:16-2:22 :| [])
+(NodePI pi "") @(test/Golden/XML/0013.xml@38-44 :| [])
-(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0013.xml#2:22-3:1 :| [])
+(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0013.xml@44-46 :| [])
-(NodeElem doc) @(test/Golden/XML/0013.xml#3:1-3:7 :| [])
+(NodeElem doc) @(test/Golden/XML/0013.xml@46-52 :| [])
-(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0013.xml#3:7-4:1 :| [])
+(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0013.xml@52-54 :| [])
-(NodePI xml "") @(test/Golden/XML/0014.xml#1:1-1:22 :| [])
+(NodePI xml "") @(test/Golden/XML/0014.xml@0-21 :| [])
|
-`- (NodeAttr version) @(test/Golden/XML/0014.xml#1:6-1:20 :| [])
+`- (NodeAttr version) @(test/Golden/XML/0014.xml@5-19 :| [])
|
- `- (NodeText (EscapedText (fromList [EscapedPlain "1.0"]))) @(test/Golden/XML/0014.xml#1:16-1:19 :| [])
+ `- (NodeText (EscapedText (fromList [EscapedPlain "1.0"]))) @(test/Golden/XML/0014.xml@15-18 :| [])
-(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0014.xml#1:22-2:1 :| [])
+(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0014.xml@21-23 :| [])
-(NodeElem doc) @(test/Golden/XML/0014.xml#2:1-2:7 :| [])
+(NodeElem doc) @(test/Golden/XML/0014.xml@23-29 :| [])
-(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0014.xml#2:7-3:1 :| [])
+(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0014.xml@29-31 :| [])
-(NodePI xml "") @(test/Golden/XML/0015.xml#1:1-1:39 :| [])
+(NodePI xml "") @(test/Golden/XML/0015.xml@0-38 :| [])
|
-+- (NodeAttr version) @(test/Golden/XML/0015.xml#1:6-1:20 :| [])
++- (NodeAttr version) @(test/Golden/XML/0015.xml@5-19 :| [])
| |
-| `- (NodeText (EscapedText (fromList [EscapedPlain "1.0"]))) @(test/Golden/XML/0015.xml#1:16-1:19 :| [])
+| `- (NodeText (EscapedText (fromList [EscapedPlain "1.0"]))) @(test/Golden/XML/0015.xml@15-18 :| [])
|
-`- (NodeAttr encoding) @(test/Golden/XML/0015.xml#1:20-1:37 :| [])
+`- (NodeAttr encoding) @(test/Golden/XML/0015.xml@19-36 :| [])
|
- `- (NodeText (EscapedText (fromList [EscapedPlain "UTF-8"]))) @(test/Golden/XML/0015.xml#1:31-1:36 :| [])
+ `- (NodeText (EscapedText (fromList [EscapedPlain "UTF-8"]))) @(test/Golden/XML/0015.xml@30-35 :| [])
-(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0015.xml#1:39-2:1 :| [])
+(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0015.xml@38-40 :| [])
-(NodeElem doc) @(test/Golden/XML/0015.xml#2:1-2:7 :| [])
+(NodeElem doc) @(test/Golden/XML/0015.xml@40-46 :| [])
-(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0015.xml#2:7-3:1 :| [])
+(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0015.xml@46-48 :| [])
-(NodePI xml "") @(test/Golden/XML/0016.xml#1:1-1:39 :| [])
+(NodePI xml "") @(test/Golden/XML/0016.xml@0-38 :| [])
|
-+- (NodeAttr version) @(test/Golden/XML/0016.xml#1:6-1:20 :| [])
++- (NodeAttr version) @(test/Golden/XML/0016.xml@5-19 :| [])
| |
-| `- (NodeText (EscapedText (fromList [EscapedPlain "1.0"]))) @(test/Golden/XML/0016.xml#1:16-1:19 :| [])
+| `- (NodeText (EscapedText (fromList [EscapedPlain "1.0"]))) @(test/Golden/XML/0016.xml@15-18 :| [])
|
-`- (NodeAttr standalone) @(test/Golden/XML/0016.xml#1:20-1:31 :| [])
+`- (NodeAttr standalone) @(test/Golden/XML/0016.xml@19-30 :| [])
|
- `- (NodeText (EscapedText (fromList [EscapedPlain "yes"]))) @(test/Golden/XML/0016.xml#1:33-1:36 :| [])
+ `- (NodeText (EscapedText (fromList [EscapedPlain "yes"]))) @(test/Golden/XML/0016.xml@32-35 :| [])
-(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0016.xml#1:39-2:1 :| [])
+(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0016.xml@38-40 :| [])
-(NodeElem doc) @(test/Golden/XML/0016.xml#2:1-2:7 :| [])
+(NodeElem doc) @(test/Golden/XML/0016.xml@40-46 :| [])
-(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0016.xml#2:7-3:1 :| [])
+(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0016.xml@46-48 :| [])
-(NodePI xml "") @(test/Golden/XML/0017.xml#1:1-1:56 :| [])
+(NodePI xml "") @(test/Golden/XML/0017.xml@0-55 :| [])
|
-+- (NodeAttr version) @(test/Golden/XML/0017.xml#1:6-1:20 :| [])
++- (NodeAttr version) @(test/Golden/XML/0017.xml@5-19 :| [])
| |
-| `- (NodeText (EscapedText (fromList [EscapedPlain "1.0"]))) @(test/Golden/XML/0017.xml#1:16-1:19 :| [])
+| `- (NodeText (EscapedText (fromList [EscapedPlain "1.0"]))) @(test/Golden/XML/0017.xml@15-18 :| [])
|
-+- (NodeAttr encoding) @(test/Golden/XML/0017.xml#1:20-1:37 :| [])
++- (NodeAttr encoding) @(test/Golden/XML/0017.xml@19-36 :| [])
| |
-| `- (NodeText (EscapedText (fromList [EscapedPlain "UTF-8"]))) @(test/Golden/XML/0017.xml#1:31-1:36 :| [])
+| `- (NodeText (EscapedText (fromList [EscapedPlain "UTF-8"]))) @(test/Golden/XML/0017.xml@30-35 :| [])
|
-`- (NodeAttr standalone) @(test/Golden/XML/0017.xml#1:37-1:48 :| [])
+`- (NodeAttr standalone) @(test/Golden/XML/0017.xml@36-47 :| [])
|
- `- (NodeText (EscapedText (fromList [EscapedPlain "yes"]))) @(test/Golden/XML/0017.xml#1:50-1:53 :| [])
+ `- (NodeText (EscapedText (fromList [EscapedPlain "yes"]))) @(test/Golden/XML/0017.xml@49-52 :| [])
-(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0017.xml#1:56-2:1 :| [])
+(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0017.xml@55-57 :| [])
-(NodeElem doc) @(test/Golden/XML/0017.xml#2:1-2:7 :| [])
+(NodeElem doc) @(test/Golden/XML/0017.xml@57-63 :| [])
-(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0017.xml#2:7-3:1 :| [])
+(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0017.xml@63-65 :| [])
-(NodePI xml "") @(test/Golden/XML/0018.xml#1:1-1:22 :| [])
+(NodePI xml "") @(test/Golden/XML/0018.xml@0-21 :| [])
|
-`- (NodeAttr version) @(test/Golden/XML/0018.xml#1:6-1:20 :| [])
+`- (NodeAttr version) @(test/Golden/XML/0018.xml@5-19 :| [])
|
- `- (NodeText (EscapedText (fromList [EscapedPlain "1.0"]))) @(test/Golden/XML/0018.xml#1:16-1:19 :| [])
+ `- (NodeText (EscapedText (fromList [EscapedPlain "1.0"]))) @(test/Golden/XML/0018.xml@15-18 :| [])
-(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0018.xml#1:22-2:1 :| [])
+(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0018.xml@21-23 :| [])
-(NodeElem doc) @(test/Golden/XML/0018.xml#2:1-2:7 :| [])
+(NodeElem doc) @(test/Golden/XML/0018.xml@23-29 :| [])
-(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0018.xml#2:7-3:1 :| [])
+(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0018.xml@29-31 :| [])
-(NodePI xml "") @(test/Golden/XML/0019.xml#1:1-1:22 :| [])
+(NodePI xml "") @(test/Golden/XML/0019.xml@0-21 :| [])
|
-`- (NodeAttr version) @(test/Golden/XML/0019.xml#1:6-1:20 :| [])
+`- (NodeAttr version) @(test/Golden/XML/0019.xml@5-19 :| [])
|
- `- (NodeText (EscapedText (fromList [EscapedPlain "1.0"]))) @(test/Golden/XML/0019.xml#1:16-1:19 :| [])
+ `- (NodeText (EscapedText (fromList [EscapedPlain "1.0"]))) @(test/Golden/XML/0019.xml@15-18 :| [])
-(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0019.xml#1:22-2:1 :| [])
+(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0019.xml@21-23 :| [])
-(NodeElem doc) @(test/Golden/XML/0019.xml#2:1-2:7 :| [])
+(NodeElem doc) @(test/Golden/XML/0019.xml@23-29 :| [])
-(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0019.xml#2:7-3:1 :| [])
+(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0019.xml@29-31 :| [])
-(NodePI xml "") @(test/Golden/XML/0020.xml#1:1-7:3 :| [])
+(NodePI xml "") @(test/Golden/XML/0020.xml@0-32 :| [])
|
-`- (NodeAttr version) @(test/Golden/XML/0020.xml#1:6-6:6 :| [])
+`- (NodeAttr version) @(test/Golden/XML/0020.xml@5-28 :| [])
|
- `- (NodeText (EscapedText (fromList [EscapedPlain "1.0"]))) @(test/Golden/XML/0020.xml#6:2-6:5 :| [])
+ `- (NodeText (EscapedText (fromList [EscapedPlain "1.0"]))) @(test/Golden/XML/0020.xml@24-27 :| [])
-(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0020.xml#7:3-8:1 :| [])
+(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0020.xml@32-34 :| [])
-(NodeElem doc) @(test/Golden/XML/0020.xml#8:1-8:7 :| [])
+(NodeElem doc) @(test/Golden/XML/0020.xml@34-40 :| [])
-(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0020.xml#8:7-9:1 :| [])
+(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0020.xml@40-42 :| [])
-(NodePI xml "") @(test/Golden/XML/0021.xml#1:1-1:24 :| [])
+(NodePI xml "") @(test/Golden/XML/0021.xml@0-23 :| [])
|
-`- (NodeAttr version) @(test/Golden/XML/0021.xml#1:6-1:22 :| [])
+`- (NodeAttr version) @(test/Golden/XML/0021.xml@5-21 :| [])
|
- `- (NodeText (EscapedText (fromList [EscapedPlain "1.0"]))) @(test/Golden/XML/0021.xml#1:18-1:21 :| [])
+ `- (NodeText (EscapedText (fromList [EscapedPlain "1.0"]))) @(test/Golden/XML/0021.xml@17-20 :| [])
-(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0021.xml#1:24-2:1 :| [])
+(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0021.xml@23-25 :| [])
-(NodeElem doc) @(test/Golden/XML/0021.xml#2:1-2:7 :| [])
+(NodeElem doc) @(test/Golden/XML/0021.xml@25-31 :| [])
-(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0021.xml#2:7-3:1 :| [])
+(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0021.xml@31-33 :| [])
-(NodePI xml "") @(test/Golden/XML/0022.xml#1:1-1:22 :| [])
+(NodePI xml "") @(test/Golden/XML/0022.xml@0-21 :| [])
|
-`- (NodeAttr version) @(test/Golden/XML/0022.xml#1:6-1:20 :| [])
+`- (NodeAttr version) @(test/Golden/XML/0022.xml@5-19 :| [])
|
- `- (NodeText (EscapedText (fromList [EscapedPlain "1.0"]))) @(test/Golden/XML/0022.xml#1:16-1:19 :| [])
+ `- (NodeText (EscapedText (fromList [EscapedPlain "1.0"]))) @(test/Golden/XML/0022.xml@15-18 :| [])
-(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0022.xml#1:22-2:1 :| [])
+(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0022.xml@21-23 :| [])
-(NodeElem doc) @(test/Golden/XML/0022.xml#2:1-2:7 :| [])
+(NodeElem doc) @(test/Golden/XML/0022.xml@23-29 :| [])
-(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0022.xml#2:7-3:1 :| [])
+(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0022.xml@29-31 :| [])
-(NodePI xml "") @(test/Golden/XML/0023.xml#1:1-7:8 :| [])
+(NodePI xml "") @(test/Golden/XML/0023.xml@0-37 :| [])
|
-`- (NodeAttr version) @(test/Golden/XML/0023.xml#1:6-7:6 :| [])
+`- (NodeAttr version) @(test/Golden/XML/0023.xml@5-35 :| [])
|
- `- (NodeText (EscapedText (fromList [EscapedPlain "1.0"]))) @(test/Golden/XML/0023.xml#7:2-7:5 :| [])
+ `- (NodeText (EscapedText (fromList [EscapedPlain "1.0"]))) @(test/Golden/XML/0023.xml@31-34 :| [])
-(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0023.xml#7:8-8:1 :| [])
+(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0023.xml@37-39 :| [])
-(NodeElem doc) @(test/Golden/XML/0023.xml#8:1-8:7 :| [])
+(NodeElem doc) @(test/Golden/XML/0023.xml@39-45 :| [])
-(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0023.xml#8:7-9:1 :| [])
+(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0023.xml@45-47 :| [])
-(NodePI xml "") @(test/Golden/XML/0024.xml#1:1-1:22 :| [])
+(NodePI xml "") @(test/Golden/XML/0024.xml@0-21 :| [])
|
-`- (NodeAttr version) @(test/Golden/XML/0024.xml#1:6-1:20 :| [])
+`- (NodeAttr version) @(test/Golden/XML/0024.xml@5-19 :| [])
|
- `- (NodeText (EscapedText (fromList [EscapedPlain "1.0"]))) @(test/Golden/XML/0024.xml#1:16-1:19 :| [])
+ `- (NodeText (EscapedText (fromList [EscapedPlain "1.0"]))) @(test/Golden/XML/0024.xml@15-18 :| [])
-(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0024.xml#1:22-2:1 :| [])
+(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0024.xml@21-23 :| [])
-(NodeComment "because we are testing conformace to XML 1.0, there can be no\r\n exhaustive tests of the VersionNum production. The only\r\n VersionNum a 1.0-compliant processor is required to pass\r\n is \"1.0\" ") @(test/Golden/XML/0024.xml#2:1-5:17 :| [])
+(NodeComment "because we are testing conformace to XML 1.0, there can be no\r\n exhaustive tests of the VersionNum production. The only\r\n VersionNum a 1.0-compliant processor is required to pass\r\n is \"1.0\" ") @(test/Golden/XML/0024.xml@23-230 :| [])
-(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0024.xml#5:17-6:1 :| [])
+(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0024.xml@230-232 :| [])
-(NodeElem doc) @(test/Golden/XML/0024.xml#6:1-6:7 :| [])
+(NodeElem doc) @(test/Golden/XML/0024.xml@232-238 :| [])
-(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0024.xml#6:7-7:1 :| [])
+(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0024.xml@238-240 :| [])
-(NodePI xml "") @(test/Golden/XML/0025.xml#1:1-1:22 :| [])
+(NodePI xml "") @(test/Golden/XML/0025.xml@0-21 :| [])
|
-`- (NodeAttr version) @(test/Golden/XML/0025.xml#1:6-1:20 :| [])
+`- (NodeAttr version) @(test/Golden/XML/0025.xml@5-19 :| [])
|
- `- (NodeText (EscapedText (fromList [EscapedPlain "1.0"]))) @(test/Golden/XML/0025.xml#1:16-1:19 :| [])
+ `- (NodeText (EscapedText (fromList [EscapedPlain "1.0"]))) @(test/Golden/XML/0025.xml@15-18 :| [])
-(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0025.xml#1:22-2:1 :| [])
+(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0025.xml@21-23 :| [])
-(NodeComment "Non-terminal Misc only appears as Misc*, so we cannot test the fact\r\n that Misc must match exactly one comment, PI, or S") @(test/Golden/XML/0025.xml#2:1-3:58 :| [])
+(NodeComment "Non-terminal Misc only appears as Misc*, so we cannot test the fact\r\n that Misc must match exactly one comment, PI, or S") @(test/Golden/XML/0025.xml@23-153 :| [])
-(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0025.xml#3:58-4:1 :| [])
+(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0025.xml@153-155 :| [])
-(NodeElem doc) @(test/Golden/XML/0025.xml#4:1-4:7 :| [])
+(NodeElem doc) @(test/Golden/XML/0025.xml@155-161 :| [])
-(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0025.xml#4:7-5:1 :| [])
+(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0025.xml@161-163 :| [])
-(NodePI xml "") @(test/Golden/XML/0026.xml#1:1-1:22 :| [])
+(NodePI xml "") @(test/Golden/XML/0026.xml@0-21 :| [])
|
-`- (NodeAttr version) @(test/Golden/XML/0026.xml#1:6-1:20 :| [])
+`- (NodeAttr version) @(test/Golden/XML/0026.xml@5-19 :| [])
|
- `- (NodeText (EscapedText (fromList [EscapedPlain "1.0"]))) @(test/Golden/XML/0026.xml#1:16-1:19 :| [])
+ `- (NodeText (EscapedText (fromList [EscapedPlain "1.0"]))) @(test/Golden/XML/0026.xml@15-18 :| [])
-(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0026.xml#1:22-2:1 :| [])
+(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0026.xml@21-23 :| [])
-(NodePI pi "") @(test/Golden/XML/0026.xml#2:1-2:7 :| [])
+(NodePI pi "") @(test/Golden/XML/0026.xml@23-29 :| [])
-(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0026.xml#2:7-3:1 :| [])
+(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0026.xml@29-31 :| [])
-(NodeElem doc) @(test/Golden/XML/0026.xml#3:1-3:7 :| [])
+(NodeElem doc) @(test/Golden/XML/0026.xml@31-37 :| [])
-(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0026.xml#3:7-4:1 :| [])
+(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0026.xml@37-39 :| [])
-(NodePI xml "") @(test/Golden/XML/0027.xml#1:1-1:22 :| [])
+(NodePI xml "") @(test/Golden/XML/0027.xml@0-21 :| [])
|
-`- (NodeAttr version) @(test/Golden/XML/0027.xml#1:6-1:20 :| [])
+`- (NodeAttr version) @(test/Golden/XML/0027.xml@5-19 :| [])
|
- `- (NodeText (EscapedText (fromList [EscapedPlain "1.0"]))) @(test/Golden/XML/0027.xml#1:16-1:19 :| [])
+ `- (NodeText (EscapedText (fromList [EscapedPlain "1.0"]))) @(test/Golden/XML/0027.xml@15-18 :| [])
-(NodeText (EscapedText (fromList [EscapedPlain "\n\n \t\n\n"]))) @(test/Golden/XML/0027.xml#1:22-5:1 :| [])
+(NodeText (EscapedText (fromList [EscapedPlain "\n\n \t\n\n"]))) @(test/Golden/XML/0027.xml@21-31 :| [])
-(NodeElem doc) @(test/Golden/XML/0027.xml#5:1-5:7 :| [])
+(NodeElem doc) @(test/Golden/XML/0027.xml@31-37 :| [])
-(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0027.xml#5:7-6:1 :| [])
+(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0027.xml@37-39 :| [])
-(NodePI xml "") @(test/Golden/XML/0028.xml#1:1-1:22 :| [])
+(NodePI xml "") @(test/Golden/XML/0028.xml@0-21 :| [])
|
-`- (NodeAttr version) @(test/Golden/XML/0028.xml#1:6-1:20 :| [])
+`- (NodeAttr version) @(test/Golden/XML/0028.xml@5-19 :| [])
|
- `- (NodeText (EscapedText (fromList [EscapedPlain "1.0"]))) @(test/Golden/XML/0028.xml#1:16-1:19 :| [])
+ `- (NodeText (EscapedText (fromList [EscapedPlain "1.0"]))) @(test/Golden/XML/0028.xml@15-18 :| [])
-(NodePI pi "") @(test/Golden/XML/0028.xml#1:22-1:28 :| [])
+(NodePI pi "") @(test/Golden/XML/0028.xml@21-27 :| [])
-(NodeText (EscapedText (fromList [EscapedPlain "\n\n \t\n\n"]))) @(test/Golden/XML/0028.xml#1:28-5:1 :| [])
+(NodeText (EscapedText (fromList [EscapedPlain "\n\n \t\n\n"]))) @(test/Golden/XML/0028.xml@27-37 :| [])
-(NodeComment "comment") @(test/Golden/XML/0028.xml#5:1-5:15 :| [])
+(NodeComment "comment") @(test/Golden/XML/0028.xml@37-51 :| [])
-(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0028.xml#5:15-6:1 :| [])
+(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0028.xml@51-53 :| [])
-(NodePI pi "") @(test/Golden/XML/0028.xml#6:1-6:7 :| [])
+(NodePI pi "") @(test/Golden/XML/0028.xml@53-59 :| [])
-(NodeText (EscapedText (fromList [EscapedPlain "\n\n \t\n\n"]))) @(test/Golden/XML/0028.xml#6:7-10:1 :| [])
+(NodeText (EscapedText (fromList [EscapedPlain "\n\n \t\n\n"]))) @(test/Golden/XML/0028.xml@59-69 :| [])
-(NodeComment "comment") @(test/Golden/XML/0028.xml#10:1-10:15 :| [])
+(NodeComment "comment") @(test/Golden/XML/0028.xml@69-83 :| [])
-(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0028.xml#10:15-11:1 :| [])
+(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0028.xml@83-85 :| [])
-(NodePI pi "") @(test/Golden/XML/0028.xml#11:1-11:7 :| [])
+(NodePI pi "") @(test/Golden/XML/0028.xml@85-91 :| [])
-(NodeElem doc) @(test/Golden/XML/0028.xml#11:7-11:13 :| [])
+(NodeElem doc) @(test/Golden/XML/0028.xml@91-97 :| [])
-(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0028.xml#11:13-12:1 :| [])
+(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0028.xml@97-99 :| [])
-(NodePI xml "") @(test/Golden/XML/0029.xml#1:1-1:39 :| [])
+(NodePI xml "") @(test/Golden/XML/0029.xml@0-38 :| [])
|
-+- (NodeAttr version) @(test/Golden/XML/0029.xml#1:6-1:20 :| [])
++- (NodeAttr version) @(test/Golden/XML/0029.xml@5-19 :| [])
| |
-| `- (NodeText (EscapedText (fromList [EscapedPlain "1.0"]))) @(test/Golden/XML/0029.xml#1:16-1:19 :| [])
+| `- (NodeText (EscapedText (fromList [EscapedPlain "1.0"]))) @(test/Golden/XML/0029.xml@15-18 :| [])
|
-`- (NodeAttr standalone) @(test/Golden/XML/0029.xml#1:20-1:31 :| [])
+`- (NodeAttr standalone) @(test/Golden/XML/0029.xml@19-30 :| [])
|
- `- (NodeText (EscapedText (fromList [EscapedPlain "yes"]))) @(test/Golden/XML/0029.xml#1:33-1:36 :| [])
+ `- (NodeText (EscapedText (fromList [EscapedPlain "yes"]))) @(test/Golden/XML/0029.xml@32-35 :| [])
-(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0029.xml#1:39-2:1 :| [])
+(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0029.xml@38-40 :| [])
-(NodeElem doc) @(test/Golden/XML/0029.xml#2:1-2:7 :| [])
+(NodeElem doc) @(test/Golden/XML/0029.xml@40-46 :| [])
-(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0029.xml#2:7-3:1 :| [])
+(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0029.xml@46-48 :| [])
-(NodePI xml "") @(test/Golden/XML/0030.xml#1:1-1:38 :| [])
+(NodePI xml "") @(test/Golden/XML/0030.xml@0-37 :| [])
|
-+- (NodeAttr version) @(test/Golden/XML/0030.xml#1:6-1:20 :| [])
++- (NodeAttr version) @(test/Golden/XML/0030.xml@5-19 :| [])
| |
-| `- (NodeText (EscapedText (fromList [EscapedPlain "1.0"]))) @(test/Golden/XML/0030.xml#1:16-1:19 :| [])
+| `- (NodeText (EscapedText (fromList [EscapedPlain "1.0"]))) @(test/Golden/XML/0030.xml@15-18 :| [])
|
-`- (NodeAttr standalone) @(test/Golden/XML/0030.xml#1:20-1:31 :| [])
+`- (NodeAttr standalone) @(test/Golden/XML/0030.xml@19-30 :| [])
|
- `- (NodeText (EscapedText (fromList [EscapedPlain "no"]))) @(test/Golden/XML/0030.xml#1:33-1:35 :| [])
+ `- (NodeText (EscapedText (fromList [EscapedPlain "no"]))) @(test/Golden/XML/0030.xml@32-34 :| [])
-(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0030.xml#1:38-2:1 :| [])
+(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0030.xml@37-39 :| [])
-(NodeElem doc) @(test/Golden/XML/0030.xml#2:1-2:7 :| [])
+(NodeElem doc) @(test/Golden/XML/0030.xml@39-45 :| [])
-(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0030.xml#2:7-3:1 :| [])
+(NodeText (EscapedText (fromList [EscapedPlain "\n"]))) @(test/Golden/XML/0030.xml@45-47 :| [])
-(NodeElem doc) @(test/Golden/XML/0031.xml#1:1-1:7 :| [])
+(NodeElem doc) @(test/Golden/XML/0031.xml@0-6 :| [])
-(NodeElem doc) @(test/Golden/XML/0032.xml#1:1-1:19 :| [])
+(NodeElem doc) @(test/Golden/XML/0032.xml@0-18 :| [])
|
-`- (NodeText (EscapedText (fromList [EscapedPlain "content"]))) @(test/Golden/XML/0032.xml#1:6-1:13 :| [])
+`- (NodeText (EscapedText (fromList [EscapedPlain "content"]))) @(test/Golden/XML/0032.xml@5-12 :| [])
-(NodeElem doc) @(test/Golden/XML/0033.xml#1:1-1:12 :| [])
+(NodeElem doc) @(test/Golden/XML/0033.xml@0-11 :| [])
-(NodeElem doc) @(test/Golden/XML/0034.xml#1:1-3:8 :| [])
+(NodeElem doc) @(test/Golden/XML/0034.xml@0-16 :| [])
-(NodeElem doc) @(test/Golden/XML/0035.xml#1:1-1:22 :| [])
+(NodeElem doc) @(test/Golden/XML/0035.xml@0-21 :| [])
|
-`- (NodeAttr att) @(test/Golden/XML/0035.xml#1:6-1:15 :| [])
+`- (NodeAttr att) @(test/Golden/XML/0035.xml@5-14 :| [])
|
- `- (NodeText (EscapedText (fromList [EscapedPlain "val"]))) @(test/Golden/XML/0035.xml#1:11-1:14 :| [])
+ `- (NodeText (EscapedText (fromList [EscapedPlain "val"]))) @(test/Golden/XML/0035.xml@10-13 :| [])
-(NodeElem doc) @(test/Golden/XML/0036.xml#1:1-3:8 :| [])
+(NodeElem doc) @(test/Golden/XML/0036.xml@0-48 :| [])
|
-+- (NodeAttr att) @(test/Golden/XML/0036.xml#1:6-1:15 :| [])
++- (NodeAttr att) @(test/Golden/XML/0036.xml@5-14 :| [])
| |
-| `- (NodeText (EscapedText (fromList [EscapedPlain "val"]))) @(test/Golden/XML/0036.xml#1:11-1:14 :| [])
+| `- (NodeText (EscapedText (fromList [EscapedPlain "val"]))) @(test/Golden/XML/0036.xml@10-13 :| [])
|
-+- (NodeAttr att2) @(test/Golden/XML/0036.xml#1:16-1:27 :| [])
++- (NodeAttr att2) @(test/Golden/XML/0036.xml@15-26 :| [])
| |
-| `- (NodeText (EscapedText (fromList [EscapedPlain "val2"]))) @(test/Golden/XML/0036.xml#1:22-1:26 :| [])
+| `- (NodeText (EscapedText (fromList [EscapedPlain "val2"]))) @(test/Golden/XML/0036.xml@21-25 :| [])
|
-`- (NodeAttr att3) @(test/Golden/XML/0036.xml#2:1-2:12 :| [])
+`- (NodeAttr att3) @(test/Golden/XML/0036.xml@28-39 :| [])
|
- `- (NodeText (EscapedText (fromList [EscapedPlain "val3"]))) @(test/Golden/XML/0036.xml#2:7-2:11 :| [])
+ `- (NodeText (EscapedText (fromList [EscapedPlain "val3"]))) @(test/Golden/XML/0036.xml@34-38 :| [])
-(NodeElem doc) @(test/Golden/XML/0037.xml#1:1-1:22 :| [])
+(NodeElem doc) @(test/Golden/XML/0037.xml@0-21 :| [])
|
-`- (NodeAttr att) @(test/Golden/XML/0037.xml#1:6-1:15 :| [])
+`- (NodeAttr att) @(test/Golden/XML/0037.xml@5-14 :| [])
|
- `- (NodeText (EscapedText (fromList [EscapedPlain "val"]))) @(test/Golden/XML/0037.xml#1:11-1:14 :| [])
+ `- (NodeText (EscapedText (fromList [EscapedPlain "val"]))) @(test/Golden/XML/0037.xml@10-13 :| [])
-(NodeElem doc) @(test/Golden/XML/0038.xml#1:1-3:15 :| [])
+(NodeElem doc) @(test/Golden/XML/0038.xml@0-28 :| [])
|
-`- (NodeAttr att) @(test/Golden/XML/0038.xml#1:6-3:8 :| [])
+`- (NodeAttr att) @(test/Golden/XML/0038.xml@5-21 :| [])
|
- `- (NodeText (EscapedText (fromList [EscapedPlain "val"]))) @(test/Golden/XML/0038.xml#3:4-3:7 :| [])
+ `- (NodeText (EscapedText (fromList [EscapedPlain "val"]))) @(test/Golden/XML/0038.xml@17-20 :| [])
-(NodeElem doc) @(test/Golden/XML/0039.xml#1:1-1:12 :| [])
+(NodeElem doc) @(test/Golden/XML/0039.xml@0-11 :| [])
-(NodeElem doc) @(test/Golden/XML/0040.xml#1:1-2:2 :| [])
+(NodeElem doc) @(test/Golden/XML/0040.xml@0-15 :| [])
-(NodeElem doc) @(test/Golden/XML/0041.xml#1:1-1:7 :| [])
+(NodeElem doc) @(test/Golden/XML/0041.xml@0-6 :| [])
-(NodeElem doc) @(test/Golden/XML/0042.xml#1:1-1:17 :| [])
+(NodeElem doc) @(test/Golden/XML/0042.xml@0-16 :| [])
|
-`- (NodeAttr att) @(test/Golden/XML/0042.xml#1:6-1:15 :| [])
+`- (NodeAttr att) @(test/Golden/XML/0042.xml@5-14 :| [])
|
- `- (NodeText (EscapedText (fromList [EscapedPlain "val"]))) @(test/Golden/XML/0042.xml#1:11-1:14 :| [])
+ `- (NodeText (EscapedText (fromList [EscapedPlain "val"]))) @(test/Golden/XML/0042.xml@10-13 :| [])
-(NodeElem doc) @(test/Golden/XML/0043.xml#1:1-4:3 :| [])
+(NodeElem doc) @(test/Golden/XML/0043.xml@0-22 :| [])
|
-`- (NodeAttr att) @(test/Golden/XML/0043.xml#1:6-1:15 :| [])
+`- (NodeAttr att) @(test/Golden/XML/0043.xml@5-14 :| [])
|
- `- (NodeText (EscapedText (fromList [EscapedPlain "val"]))) @(test/Golden/XML/0043.xml#1:11-1:14 :| [])
+ `- (NodeText (EscapedText (fromList [EscapedPlain "val"]))) @(test/Golden/XML/0043.xml@10-13 :| [])
-(NodeElem doc) @(test/Golden/XML/0044.xml#1:1-3:3 :| [])
+(NodeElem doc) @(test/Golden/XML/0044.xml@0-12 :| [])
-(NodeElem doc) @(test/Golden/XML/0045.xml#1:1-2:26 :| [])
+(NodeElem doc) @(test/Golden/XML/0045.xml@0-41 :| [])
|
-+- (NodeAttr att) @(test/Golden/XML/0045.xml#1:6-1:15 :| [])
++- (NodeAttr att) @(test/Golden/XML/0045.xml@5-14 :| [])
| |
-| `- (NodeText (EscapedText (fromList [EscapedPlain "val"]))) @(test/Golden/XML/0045.xml#1:11-1:14 :| [])
+| `- (NodeText (EscapedText (fromList [EscapedPlain "val"]))) @(test/Golden/XML/0045.xml@10-13 :| [])
|
-+- (NodeAttr att2) @(test/Golden/XML/0045.xml#2:1-2:12 :| [])
++- (NodeAttr att2) @(test/Golden/XML/0045.xml@16-27 :| [])
| |
-| `- (NodeText (EscapedText (fromList [EscapedPlain "val2"]))) @(test/Golden/XML/0045.xml#2:7-2:11 :| [])
+| `- (NodeText (EscapedText (fromList [EscapedPlain "val2"]))) @(test/Golden/XML/0045.xml@22-26 :| [])
|
-`- (NodeAttr att3) @(test/Golden/XML/0045.xml#2:13-2:24 :| [])
+`- (NodeAttr att3) @(test/Golden/XML/0045.xml@28-39 :| [])
|
- `- (NodeText (EscapedText (fromList [EscapedPlain "val3"]))) @(test/Golden/XML/0045.xml#2:19-2:23 :| [])
+ `- (NodeText (EscapedText (fromList [EscapedPlain "val3"]))) @(test/Golden/XML/0045.xml@34-38 :| [])
-(NodeElem doc) @(test/Golden/XML/0046.xml#1:1-4:7 :| [])
+(NodeElem doc) @(test/Golden/XML/0046.xml@0-81 :| [])
|
-`- (NodeText (EscapedText (fromList [EscapedPlain "\r\n",EscapedCharRef (CharRef 'A'),EscapedCharRef (CharRef '\t'),EscapedCharRef (CharRef 'A'),EscapedCharRef (CharRef 'O'),EscapedCharRef (CharRef 'O'),EscapedCharRef (CharRef '\t'),EscapedPlain "\r\n",EscapedCharRef (CharRef '\1110764'),EscapedCharRef (CharRef '\n'),EscapedPlain "\r\n"]))) @(test/Golden/XML/0046.xml#1:6-4:1 :| [])
+`- (NodeText (EscapedText (fromList [EscapedPlain "\r\n",EscapedCharRef (CharRef 'A'),EscapedCharRef (CharRef '\t'),EscapedCharRef (CharRef 'A'),EscapedCharRef (CharRef 'O'),EscapedCharRef (CharRef 'O'),EscapedCharRef (CharRef '\t'),EscapedPlain "\r\n",EscapedCharRef (CharRef '\1110764'),EscapedCharRef (CharRef '\n'),EscapedPlain "\r\n"]))) @(test/Golden/XML/0046.xml@5-75 :| [])
test/Golden/XML/Error/0000.xml:3:5:
+ |
+3 | </ro
+ | ^
unexpected end of input
-expecting '>' or the rest of QName
+expecting ':' or '>'
test/Golden/XML/Error/0001.xml:3:7:
+ |
+3 | </root
+ | ^
unexpected end of input
-expecting '>' or the rest of QName
+expecting ':' or '>'
test/Golden/XML/Error/0002.xml:1:31:
+ |
+1 | <?xml version="1.0" encoding=" utf-8"?>
+ | ^
unexpected space
expecting EncName
test/Golden/XML/Error/0003.xml:1:32:
+ |
+1 | <?xml version="1.0" encoding="a/b"?>
+ | ^
unexpected '/'
expecting '"'
test/Golden/XML/Error/0004.xml:1:35:
+ |
+1 | <?xml version="1.0" encoding="just)word"?>
+ | ^
unexpected '&'
expecting '"'
test/Golden/XML/Error/0005.xml:1:34:
+ |
+1 | <?xml version="1.0" encoding="utf:8"?>
+ | ^
unexpected ':'
expecting '"'
test/Golden/XML/Error/0006.xml:1:31:
+ |
+1 | <?xml version="1.0" encoding="@import(sys-encoding)"?>
+ | ^
unexpected '@'
expecting EncName
test/Golden/XML/Error/0007.xml:1:34:
+ |
+1 | <?xml version="1.0" encoding="XYZ+999"?>
+ | ^
unexpected '+'
expecting '"'
test/Golden/XML/Error/0008.xml:3:1:
+ |
+3 | ?\r
+ | ^^
unexpected "?<carriage return>"
expecting "/>" or '>'
test/Golden/XML/Error/0009.xml:2:2:
+ |
+2 | <.doc></.doc>\r
+ | ^
unexpected '.'
expecting '!', '?', or Element
test/Golden/XML/Error/0010.xml:1:8:
+ |
+1 | <doc><? ?></doc>\r
+ | ^
unexpected space
expecting PI
test/Golden/XML/Error/0011.xml:2:1:
+ |
+2 | <empty line>
+ | ^
unexpected end of input
expecting "?>" or '?'
test/Golden/XML/Error/0012.xml:2:1:
+ |
+2 | <empty line>
+ | ^
unexpected end of input
expecting "?>" or '?'
test/Golden/XML/Error/0013.xml:1:21:
+ |
+1 | <doc><!-- a comment -- another --></doc>\r
+ | ^^^
unexpected "-- "
expecting "-->"
test/Golden/XML/Error/0014.xml:1:10:
+ |
+1 | <doc>& no refc</doc>\r
+ | ^
unexpected space
expecting ';'
test/Golden/XML/Error/0015.xml:1:7:
+ |
+1 | <doc>&.entity;</doc>\r
+ | ^
unexpected '.'
expecting NCName
test/Golden/XML/Error/0016.xml:1:8:
+ |
+1 | <doc>&#RE;</doc>\r
+ | ^
unexpected 'R'
expecting digit
test/Golden/XML/Error/0017.xml:1:9:
+ |
+1 | <doc>A & B</doc>\r
+ | ^
unexpected space
expecting NCName
test/Golden/XML/Error/0018.xml:1:6:
+ |
+1 | <doc a1></doc>\r
+ | ^^
unexpected "a1"
expecting "/>" or '>'
test/Golden/XML/Error/0019.xml:1:6:
+ |
+1 | <doc a1=v1></doc>\r
+ | ^^
unexpected "a1"
expecting "/>" or '>'
test/Golden/XML/Error/0020.xml:1:6:
+ |
+1 | <doc a1="v1'></doc>\r
+ | ^^
unexpected "a1"
expecting "/>" or '>'
test/Golden/XML/Error/0021.xml:1:6:
+ |
+1 | <doc a1="<foo>"></doc>\r
+ | ^^
unexpected "a1"
expecting "/>" or '>'
test/Golden/XML/Error/0022.xml:1:6:
+ |
+1 | <doc a1=></doc>\r
+ | ^^
unexpected "a1"
expecting "/>" or '>'
test/Golden/XML/Error/0023.xml:1:14:
+ |
+1 | <doc a1="v1" "v2"></doc>\r
+ | ^^
unexpected ""v"
expecting "/>" or '>'
test/Golden/XML/Error/0024.xml:2:1:
+ |
+2 | <empty line>
+ | ^
unexpected end of input
expecting "]]>" or ']'
test/Golden/XML/Error/0025.xml:1:8:
+ |
+1 | <doc><![CDATA [ stuff]]></doc>\r
+ | ^^^^^^^
unexpected "[CDATA "
expecting "--" or "[CDATA["
test/Golden/XML/Error/0026.xml:1:8:
+ |
+1 | <doc></>\r
+ | ^
unexpected '>'
expecting QName
test/Golden/XML/Error/0027.xml:1:6:
+ |
+1 | <doc a1="A & B"></doc>\r
+ | ^^
unexpected "a1"
expecting "/>" or '>'
test/Golden/XML/Error/0028.xml:1:6:
+ |
+1 | <doc a1="a&b"></doc>\r
+ | ^^
unexpected "a1"
expecting "/>" or '>'
test/Golden/XML/Error/0029.xml:1:6:
+ |
+1 | <doc a1="{:"></doc>\r
+ | ^^
unexpected "a1"
expecting "/>" or '>'
test/Golden/XML/Error/0030.xml:1:6:
+ |
+1 | <doc 12="34"></doc>\r
+ | ^^
unexpected "12"
expecting "/>" or '>'
test/Golden/XML/Error/0031.xml:2:2:
+ |
+2 | <123></123>\r
+ | ^
unexpected '1'
expecting '!', '?', or Element
test/Golden/XML/Error/0032.xml:1:6:
+ |
+1 | <doc>]]></doc>\r
+ | ^^
unexpected "]]"
expecting "</"
test/Golden/XML/Error/0033.xml:1:7:
+ |
+1 | <doc>]]]></doc>\r
+ | ^^
unexpected "]]"
expecting "</"
test/Golden/XML/Error/0034.xml:4:1:
+ |
+4 | <empty line>
+ | ^
unexpected end of input
expecting "-->" or '-'
test/Golden/XML/Error/0035.xml:5:1:
+ |
+5 | <empty line>
+ | ^
unexpected end of input
expecting "?>" or '?'
test/Golden/XML/Error/0036.xml:1:10:
+ |
+1 | <doc>abc]]]>def</doc>\r
+ | ^^
unexpected "]]"
expecting "</"
test/Golden/XML/Error/0037.xml:1:19:
+ |
+1 | <doc>A form feed (\f) is not legal in data</doc>\r
+ | ^^
unexpected "<form feed>)"
expecting "</", '<', ']', CharRef, or EntityRef
test/Golden/XML/Error/0038.xml:1:24:
+ |
+1 | <doc><?pi a form feed (\f) is not allowed in a pi?></doc>\r
+ | ^^
unexpected "<form feed>)"
expecting "?>" or '?'
test/Golden/XML/Error/0039.xml:1:24:
+ |
+1 | <doc><!-- a form feed (\f) is not allowed in a comment --></doc>\r
+ | ^^^
unexpected "<form feed>) "
expecting "-->" or '-'
test/Golden/XML/Error/0040.xml:1:9:
+ |
+1 | <doc>abc\edef</doc>\r
+ | ^^
unexpected "<escape>d"
expecting "</", '<', ']', CharRef, or EntityRef
test/Golden/XML/Error/0041.xml:1:5:
+ |
+1 | <doc\f>A form-feed is not white space or a name character</doc\f>\r
+ | ^^
unexpected "<form feed>>"
-expecting "/>", '>', Spaces1, or the rest of PName
+expecting "/>", ':', '>', or Spaces1
test/Golden/XML/Error/0042.xml:1:9:
+ |
+1 | <doc>1 < 2 but not in XML</doc>\r
+ | ^
unexpected space
expecting '!', '?', or Element
test/Golden/XML/Error/0043.xml:2:1:
+ |
+2 | Illegal data\r
+ | ^
unexpected 'I'
-expecting "<!--", "<?", Spaces, end of input, or the rest of Spaces
+expecting "<!--", "<?", CRLF, Spaces, or end of input
test/Golden/XML/Error/0044.xml:2:1:
+ |
+2 |  \r
+ | ^
unexpected '&'
-expecting "<!--", "<?", Spaces, end of input, or the rest of Spaces
+expecting "<!--", "<?", CRLF, Spaces, or end of input
test/Golden/XML/Error/0045.xml:1:29:
+ |
+1 | <doc x="foo" y="bar" x="baz"></doc>\r
+ | ^
Error_Attribute_collision x
test/Golden/XML/Error/0046.xml:1:14:
+ |
+1 | <doc><a></aa></doc>\r
+ | ^
Error_Closing_tag_unexpected aa a
test/Golden/XML/Error/0047.xml:2:1:
+ |
+2 | <doc></doc>\r
+ | ^
unexpected '<'
-expecting "<!--", "<?", Spaces, end of input, or the rest of Spaces
+expecting "<!--", "<?", CRLF, Spaces, or end of input
test/Golden/XML/Error/0048.xml:2:1:
+ |
+2 | <doc></doc>\r
+ | ^
unexpected '<'
-expecting "<!--", "<?", Spaces, end of input, or the rest of Spaces
+expecting "<!--", "<?", CRLF, Spaces, or end of input
test/Golden/XML/Error/0049.xml:1:7:
+ |
+1 | <doc/></doc/>\r
+ | ^
unexpected '<'
expecting "<!--", "<?", Spaces, or end of input
test/Golden/XML/Error/0050.xml:2:1:
+ |
+2 | Illegal data\r
+ | ^
unexpected 'I'
-expecting "<!--", "<?", Spaces, end of input, or the rest of Spaces
+expecting "<!--", "<?", CRLF, Spaces, or end of input
test/Golden/XML/Error/0051.xml:1:7:
+ |
+1 | <doc/><doc/>\r
+ | ^
unexpected '<'
expecting "<!--", "<?", Spaces, or end of input
test/Golden/XML/Error/0052.xml:2:3:
+ |
+2 | <a/\r
+ | ^^
unexpected "/<carriage return>"
-expecting "/>", '>', Spaces1, or the rest of PName
+expecting "/>", ':', '>', or Spaces1
test/Golden/XML/Error/0053.xml:2:3:
+ |
+2 | <a/</a>\r
+ | ^^
unexpected "/<"
-expecting "/>", '>', Spaces1, or the rest of PName
+expecting "/>", ':', '>', or Spaces1
test/Golden/XML/Error/0054.xml:2:4:
+ |
+2 | <a / >\r
+ | ^^
unexpected "/ "
expecting "/>" or '>'
test/Golden/XML/Error/0055.xml:3:1:
+ |
+3 | <![CDATA[]]>\r
+ | ^
unexpected '<'
-expecting "<!--", "<?", Spaces, end of input, or the rest of Spaces
+expecting "<!--", "<?", CRLF, Spaces, or end of input
test/Golden/XML/Error/0056.xml:3:17:
+ |
+3 | <![CDATA[]]></a>\r
+ | ^
Error_Closing_tag_unexpected a doc
test/Golden/XML/Error/0057.xml:1:1:
+ |
+1 | <empty line>
+ | ^
unexpected end of input
expecting "<!--", "<?", '<', Spaces, or XMLDecl
test/Golden/XML/Error/0058.xml:2:2:
+ |
+2 | <![CDATA[]]>\r
+ | ^
unexpected '!'
expecting Element
test/Golden/XML/Error/0059.xml:2:1:
+ |
+2 |  \r
+ | ^
unexpected '&'
-expecting "<!--", "<?", '<', Spaces, or the rest of Spaces
+expecting "<!--", "<?", '<', CRLF, or Spaces
test/Golden/XML/Error/0060.xml:1:12:
+ |
+1 | <doc></DOC>\r
+ | ^
Error_Closing_tag_unexpected DOC doc
test/Golden/XML/Error/0061.xml:1:2:
+ |
+1 | <!-- a comment ending with three dashes --->\r
+ | ^
unexpected '!'
expecting Element
test/Golden/XML/Error/0062.xml:1:11:
+ |
+1 | <doc>&foo;</doc>\r
+ | ^
Error_EntityRef_unknown foo
test/Golden/XML/Error/0063.xml:1:6:
+ |
+1 | <doc a="&foo;"></doc>\r
+ | ^^
unexpected "a="
expecting "/>" or '>'
test/Golden/XML/Error/0064.xml:1:8:
+ |
+1 | <doc>X</doc>\r
+ | ^
unexpected 'X'
expecting digit
test/Golden/XML/Error/0065.xml:1:7:
+ |
+1 | <?xml VERSION="1.0"?>\r
+ | ^^^^^^^
unexpected "VERSION"
expecting VersionInfo
test/Golden/XML/Error/0066.xml:1:7:
+ |
+1 | <?xml encoding="UTF-8" version="1.0"?>\r
+ | ^^^^^^^
unexpected "encodin"
expecting VersionInfo
test/Golden/XML/Error/0067.xml:1:20:
+ |
+1 | <?xml version="1.0"encoding="UTF-8" ?>\r
+ | ^^
unexpected "en"
expecting "?>", EncodingDecl, or SDDecl
test/Golden/XML/Error/0068.xml:1:19:
+ |
+1 | <?xml version="1.0' encoding="UTF-8" ?>\r
+ | ^
unexpected '''
expecting '"'
test/Golden/XML/Error/0069.xml:1:21:
+ |
+1 | <?xml version="1.0" version="1.0"?>\r
+ | ^^
unexpected "ve"
expecting "?>"
test/Golden/XML/Error/0070.xml:1:21:
+ |
+1 | <?xml version="1.0" valid="no" ?>\r
+ | ^^
unexpected "va"
expecting "?>"
test/Golden/XML/Error/0071.xml:1:33:
+ |
+1 | <?xml version="1.0" standalone="YES" ?>\r
+ | ^^^
unexpected "YES"
expecting "no" or "yes"
test/Golden/XML/Error/0072.xml:1:31:
+ |
+1 | <?xml version="1.0" encoding=" UTF-8"?>\r
+ | ^
unexpected space
expecting EncName
test/Golden/XML/Error/0073.xml:1:19:
+ |
+1 | <?xml version="1.0 " ?>\r
+ | ^
unexpected space
expecting '"'
test/Golden/XML/Error/0074.xml:2:2:
+ |
+2 | <![CDATA[]]>\r
+ | ^
unexpected '!'
expecting Element
test/Golden/XML/Error/0075.xml:2:1:
+ |
+2 |  <doc></doc>\r
+ | ^
unexpected '&'
-expecting "<!--", "<?", '<', Spaces, or the rest of Spaces
+expecting "<!--", "<?", '<', CRLF, or Spaces
test/Golden/XML/Error/0076.xml:2:3:
+ |
+2 | <![CDATA [ ]]>\r
+ | ^^^^^^^
unexpected "[CDATA "
expecting "--" or "[CDATA["
test/Golden/XML/Error/0077.xml:2:3:
+ |
+2 | <![cdata[data]]>\r
+ | ^^^^^^^
unexpected "[cdata["
expecting "--" or "[CDATA["
test/Golden/XML/Error/0078.xml:2:2:
+ |
+2 | <?xml version="1.0"?>\r
+ | ^
unexpected '?'
expecting Element
test/Golden/XML/Error/0079.xml:2:2:
+ |
+2 | <?xml version="1.0"?>\r
+ | ^
unexpected '?'
expecting Element
test/Golden/XML/Error/0080.xml:2:6:
+ |
+2 | <?xml version="1.0"?>\r
+ | ^
Error_PI_reserved xml
test/Golden/XML/Error/0081.xml:3:1:
+ |
+3 | <?xml version="1.0"?>\r
+ | ^
unexpected '<'
-expecting end of input or the rest of Spaces
+expecting CRLF or end of input
test/Golden/XML/Error/0082.xml:1:7:
+ |
+1 | <?xml encoding="UTF-8"?>\r
+ | ^^^^^^^
unexpected "encodin"
expecting VersionInfo
test/Golden/XML/Error/0083.xml:1:2:
+ |
+1 | <?XML version="1.0"?>\r
+ | ^
unexpected '?'
expecting Element
test/Golden/XML/Error/0084.xml:1:2:
+ |
+1 | <?xmL version="1.0"?>\r
+ | ^
unexpected '?'
expecting Element
test/Golden/XML/Error/0085.xml:2:6:
+ |
+2 | <?xMl version="1.0"?>\r
+ | ^
Error_PI_reserved xMl
test/Golden/XML/Error/0086.xml:2:6:
+ |
+2 | <?xmL?>\r
+ | ^
Error_PI_reserved xmL