0 | module Language.XML.Name
2 | import Data.String.Parser
5 | data Name = MkName String
15 | MkName n1 == MkName n2 = n1 == n2
20 | namespacePrefix : Maybe Name
27 | show (MkQName Nothing localPart) = show localPart
28 | show (MkQName (Just namespacePrefix) localPart) = show namespacePrefix ++ ":" ++ show localPart
32 | n1 == n2 = n1.namespacePrefix == n2.namespacePrefix && n1.localPart == n2.localPart
35 | isNameStartChar : Char -> Bool
36 | isNameStartChar c = isAlpha c || c == '_'
39 | isNameChar : Char -> Bool
40 | isNameChar c = isAlphaNum c || c == '.' || c == '-' || c == '_'
44 | name = MkName <$> pack <$> [| satisfy isNameStartChar :: many (satisfy isNameChar) |]
47 | qName : Parser QName
50 | Just localPart <- optional (char ':' *> name)
51 | | Nothing => pure $
MkQName Nothing n
52 | pure $
MkQName (Just n) localPart