0 | module Language.XML.Prolog.DocType
2 | import Data.String.Parser
4 | import Language.XML.Attribute
7 | data ExternalID = System String | Public String String
9 | %name ExternalID
externalID
12 | Show ExternalID where
13 | show (System sysID) = "SYSTEM \{show sysID}"
14 | show (Public pubID sysID) = "PUBLIC \{show pubID} \{show sysID}"
17 | record DocType where
18 | constructor MkDocType
20 | externalID : Maybe ExternalID
25 | <!DOCTYPE \{docType.name}\
26 | \{maybe "" (\eID => " " ++ show eID) docType.externalID}\
31 | systemID : Parser ExternalID
33 | ignore $
string "SYSTEM"
35 | System <$> quotedString
38 | publicID : Parser ExternalID
40 | ignore $
string "PUBLIC"
42 | pubID <- quotedString
44 | sysID <- quotedString
45 | pure $
Public pubID sysID
48 | externalID : Parser ExternalID
49 | externalID = systemID <|> publicID
52 | docType : Parser DocType
54 | ignore $
string "<!DOCTYPE"
56 | name <- pack <$> many letter
57 | externalID <- optional (spaces1 *> externalID)
60 | pure $
MkDocType name externalID
61 | ) <?> "XML document type"