824eaf6c02773ba97a1f23fa284eaa9bf3636195fieldingDescription : extract Haskell code in structured specs
824eaf6c02773ba97a1f23fa284eaa9bf3636195fieldingCopyright : (c) C. Maeder, Uni Bremen 2003
824eaf6c02773ba97a1f23fa284eaa9bf3636195fieldingLicense : GPLv2 or higher, see LICENSE.txt
db878466c5e95073429dda0bdd001f45e9486e16fieldingMaintainer : Christian.Maeder@dfki.de
824eaf6c02773ba97a1f23fa284eaa9bf3636195fieldingStability : provisional
824eaf6c02773ba97a1f23fa284eaa9bf3636195fieldingPortability : portable
824eaf6c02773ba97a1f23fa284eaa9bf3636195fieldingextract Haskell code from String
6ace32dacb8313226eb9019275d0e4fa45a15148rse stops at unbalanced "}"
6ace32dacb8313226eb9019275d0e4fa45a15148rse "then" may be recognized if it is not preceded by "if"
6ace32dacb8313226eb9019275d0e4fa45a15148rse but that's not worth the trouble, because ...
02c7b3fa1c2c34a3a9bd236f6cbf2fc5486b8bb0rse "and" is used by Haskell,
02c7b3fa1c2c34a3a9bd236f6cbf2fc5486b8bb0rse "with", "hide", "reveal", "within", "end"
02c7b3fa1c2c34a3a9bd236f6cbf2fc5486b8bb0rse may be userdefined in Haskell
02c7b3fa1c2c34a3a9bd236f6cbf2fc5486b8bb0rsehStuff :: CharParser st String
02c7b3fa1c2c34a3a9bd236f6cbf2fc5486b8bb0rsehStuff = flat $ many stuff
02c7b3fa1c2c34a3a9bd236f6cbf2fc5486b8bb0rsestuff :: CharParser st String
02c7b3fa1c2c34a3a9bd236f6cbf2fc5486b8bb0rsestuff = lineComment <|> nestComment <|> stringLit <|> charLit
39c7699ec0799d394d3f67145d4a12ed82f587b8jorton <|> balanced "{}"
39c7699ec0799d394d3f67145d4a12ed82f587b8jorton <|> balanced "()"
02c7b3fa1c2c34a3a9bd236f6cbf2fc5486b8bb0rse <|> balanced "[]"
6ace32dacb8313226eb9019275d0e4fa45a15148rse <|> letter <:> many (alphaNum <|> char '\'')
8c2ac56b3654234237ca3a943407361c45a3a4d1sf <|> single (noneOf "])}") <?> ""
4281cf6a722c99ae21394dc2000bd48efcebdb3akbrandbalanced :: String -> CharParser st String
8c2ac56b3654234237ca3a943407361c45a3a4d1sfbalanced [o, c] = char o <:> hStuff <++> string [c]
8c2ac56b3654234237ca3a943407361c45a3a4d1sfbalanced _ = error "balanced"
75093d320edb4f9637eccc37b4f37f76456ce4cdkbrandnestComment :: CharParser st String
8c2ac56b3654234237ca3a943407361c45a3a4d1sfnestComment = nestedComment "{-" "-}"
8c2ac56b3654234237ca3a943407361c45a3a4d1sflineComment :: CharParser st String
854bdf16f253f5b1e12ed5c4975054c60c7fcc48jortonlineComment =
6ace32dacb8313226eb9019275d0e4fa45a15148rse try ((char '-' <:> many1 (char '-'))
6ace32dacb8313226eb9019275d0e4fa45a15148rse << notFollowedBy (oneOf "!#$%&*+./<=>?@\\^|~"))
70535d6421eb979ac79d8f49d31cd94d75dd8b2fjorton <++> many (noneOf "\n")
70535d6421eb979ac79d8f49d31cd94d75dd8b2fjortoncharLit :: CharParser st String
75f5c2db254c0167a0e396254460de09b775d203trawickcharLit = tryString "'''" <|> sQuoted