AnnoState.hs revision 2eb84fc82d3ffa9116bc471fda3742bd9e5a24bb
43b4c41fbb07705c9df321221ab9cb9832460407Christian Maeder
c63ebf815c8a874525cf18670ad74847f7fc7b26Christian Maeder{- HetCATS/CASL/AnnoState.hs
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder $Id$
25cc5fbba63f84b47e389af749f55abbbde71c8cChristian Maeder Authors: Christian Maeder
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder Year: 2003
43b4c41fbb07705c9df321221ab9cb9832460407Christian Maeder
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder a state to collect annotations
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder-}
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder
43b4c41fbb07705c9df321221ab9cb9832460407Christian Maedermodule Common.AnnoState where
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder
f4a2a20e49f41b2afa657e5e64d9e349c7faa091Christian Maederimport Common.Lexer
f2f9df2e17e70674f0bf426ed1763c973ee4cde0Christian Maederimport Common.AS_Annotation
c9a7e6af169a2adfb92f42331cd578065ed83a2bChristian Maederimport Common.Anno_Parser
c9a7e6af169a2adfb92f42331cd578065ed83a2bChristian Maederimport Common.Lib.Parsec
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder-- ----------------------------------------------
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder-- annotations
a53841f6d6e86ac751c12a33dc8aadf53f59d977Klaus Luettich-- ----------------------------------------------
a53841f6d6e86ac751c12a33dc8aadf53f59d977Klaus Luettichtype AParser a = GenParser Char AnnoState a
a53841f6d6e86ac751c12a33dc8aadf53f59d977Klaus Luettich
a53841f6d6e86ac751c12a33dc8aadf53f59d977Klaus Luettichdata AnnoState = AnnoState { toAnnos :: [Annotation] }
a737caf82de97c1907027c03e4b4509eb492b4b8Christian Maeder
68d10d143f29fcff3c637ba24f90e983995ceae6Christian MaederemptyAnnos :: AnnoState
96646aed2ae087b942ae23f15bbe729a8f7c43d3Christian MaederemptyAnnos = AnnoState []
01e383014b555bbcf639c0ca60c5810b3eff83c0Christian Maeder
3b06e23643a9f65390cb8c1caabe83fa7e87a708Till MossakowskiparseAnnos :: AnnoState -> GenParser Char st AnnoState
9dac90ec2be2a72e03893095461960d483fe2fc2Christian MaederparseAnnos (AnnoState as) =
5e5d3e82af3bc2834f8718a52d9f45da80220273Dominik Luecke do a <- skip >> annotations
d54cd08a4cfa26256c38d8ed12c343adbfe1a0e3Christian Maeder return $ AnnoState (as ++ a)
ce8b15da31cd181b7e90593cbbca98f47eda29d6Till Mossakowski
e7757995211bd395dc79d26fe017d99375f7d2a6Christian MaederparseLineAnnos :: AnnoState -> GenParser Char st AnnoState
e7757995211bd395dc79d26fe017d99375f7d2a6Christian MaederparseLineAnnos (AnnoState as) =
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder do l <- mLineAnnos
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder return $ AnnoState (as ++ l)
a1ed34933c266ce85066acb0d7b20c90cb8eb213Christian Maeder
c0c2380bced8159ff0297ece14eba948bd236471Christian MaederaddAnnos :: AParser ()
8410667510a76409aca9bb24ff0eda0420088274Christian MaederaddAnnos = getState >>= parseAnnos >>= setState
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian Maeder
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian MaederaddLineAnnos :: AParser ()
8410667510a76409aca9bb24ff0eda0420088274Christian MaederaddLineAnnos = getState >>= parseLineAnnos >>= setState
404166b9366552e9ec5abb87a37c76ec8a815fb7Klaus Luettich
b1f59a4ea7c96f4c03a4d7cfcb9c5e66871cfbbbChristian MaedergetAnnos :: AParser [Annotation]
ad270004874ce1d0697fb30d7309f180553bb315Christian MaedergetAnnos = do AnnoState a <- getState
4d56f2fa72e4aec20eb827c11ed49c8cbb7014bdChristian Maeder setState emptyAnnos
4cb215739e9ab13447fa21162482ebe485b47455Christian Maeder return a
8ef75f1cc0437656bf622cec5ac9e8ea221da8f2Christian Maeder
404166b9366552e9ec5abb87a37c76ec8a815fb7Klaus Luettich-- annotations on one line
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian MaedermLineAnnos :: GenParser Char st [Annotation]
74eed04be26f549d2f7ca35c370e1c03879b28b1Christian MaedermLineAnnos =
d23b0cc79c0d204e6ec758dff8d0ba71c9f693f7Christian Maeder do p <- getPosition
8d97ef4f234681b11bb5924bd4d03adef858d2d2Christian Maeder do a <- annotationL
f4a2a20e49f41b2afa657e5e64d9e349c7faa091Christian Maeder skipSmart
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder do l <- mLineAnnos
e593b89bfd4952698dc37feced21cefe869d87a2Christian Maeder return (a:l)
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder <|> return [a]
f38b3687c5558128515e34fb85d8b466d22dc300Christian Maeder <|> return []
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder