Browse Source

implemented a xmpp version datatype, a parsec validator and parser, and ord and show functions

master
Jon Kristensen 15 years ago
parent
commit
d385c4a533
  1. 63
      Network/XMPP/Stream.hs

63
Network/XMPP/Stream.hs

@ -458,6 +458,69 @@ messageTypeToString Normal = "normal"
messageTypeToString (OtherMessageType s) = s messageTypeToString (OtherMessageType s) = s
data Version = Version { majorVersion :: Integer
, minorVersion :: Integer } deriving (Eq)
-- Version numbers are displayed as "<major>.<minor>".
instance Show Version where
show (Version major minor) = (show major) ++ "." ++ (show minor)
-- If the major version numbers are the same, compare the minor versions.
-- Otherwise, compare the major version numbers.
instance Ord Version where
compare (Version major aminor) (Version major bminor) = compare aminor bminor
compare (Version amajor _) (Version bmajor _) = compare amajor bmajor
-- Converts a "<major>.<minor>" numeric version number to a "Version" object.
versionFromString :: String -> Maybe Version
versionFromString s = case parse version "" (DBC.pack s) of
Right version -> Just version
Left _ -> Nothing
-- Constructs a "Version" based on the major and minor version numbers.
versionFromNumbers :: Integer -> Integer -> Version
versionFromNumbers major minor = Version major minor
languageTag :: GenParser Char st LangTag
languageTag = do
-- Read until we reach a '-' character, or EOF. This is the `primary tag'.
primTag <- tag
-- Read zero or more subtags.
subTags <- subtags
eof
return $ LangTag primTag subTags
where
subtags :: GenParser Char st [String]
subtags = many $ do
char '-'
subtag <- tag
return subtag
tag :: GenParser Char st String
tag = do
a <- many1 $ oneOf tagChars
return a
tagChars :: [Char]
tagChars = ['a'..'z'] ++ ['A'..'Z']
data LangTag = LangTag { primaryTag :: String data LangTag = LangTag { primaryTag :: String
, subtags :: [String] } , subtags :: [String] }

Loading…
Cancel
Save