Print_AS_Annotation.hs revision 42c01284bba8d7c8d995c8dfb96ace57d28ed1bc
7abd0c58a5ce51db13f93de82407b2188d55d298Christian Maeder{- |
7abd0c58a5ce51db13f93de82407b2188d55d298Christian MaederModule : $Header$
81d182b21020b815887e9057959228546cf61b6bChristian MaederCopyright : (c) Klaus L�ttich, Christian Maeder, Uni Bremen 2002-2004
14a1af9d9909dc47dc7fee6b0170b7ac0aef85daChristian MaederLicense : similar to LGPL, see HetCATS/LICENSE.txt or LIZENZ.txt
97018cf5fa25b494adffd7e9b4e87320dae6bf47Christian Maeder
c00adad2e9459b422dee09e3a2bddba66b433bb7Christian MaederMaintainer : maeder@tzi.de
3f69b6948966979163bdfe8331c38833d5d90ecdChristian MaederStability : provisional
7abd0c58a5ce51db13f93de82407b2188d55d298Christian MaederPortability : portable
2ac1742771a267119f1d839054b5e45d0a468085Christian Maeder
7abd0c58a5ce51db13f93de82407b2188d55d298Christian MaederThis module contains all instances of PrettyPrint for AS_Annotation.hs
35597678f1c9da703de8d0b6b66ea63247ebe884Christian Maeder-}
c00adad2e9459b422dee09e3a2bddba66b433bb7Christian Maeder
c00adad2e9459b422dee09e3a2bddba66b433bb7Christian Maedermodule Common.Print_AS_Annotation where
e8ffec0fa3d3061061bdc16e44247b9cf96b050fChristian Maeder
c00adad2e9459b422dee09e3a2bddba66b433bb7Christian Maederimport Common.AS_Annotation
e8ffec0fa3d3061061bdc16e44247b9cf96b050fChristian Maederimport Common.GlobalAnnotations
950e053ba55ac9c7d9c26a1ab48bd00202b29511Christian Maederimport Common.Id
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maederimport Common.PrettyPrint
e8ffec0fa3d3061061bdc16e44247b9cf96b050fChristian Maederimport Common.Lib.Pretty
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maederimport Common.Lexer(whiteChars)
14a1af9d9909dc47dc7fee6b0170b7ac0aef85daChristian Maeder
ad270004874ce1d0697fb30d7309f180553bb315Christian Maederinstance PrettyPrint Annotation where
ad270004874ce1d0697fb30d7309f180553bb315Christian Maeder printText0 _ (Unparsed_anno aw at _) =
4ef2a978e66e2246ff0b7f00c77deb7aabb28b8eChristian Maeder case at of
8197d0be8b81692f311ad5ca34e125e2cf9eecb8Christian Maeder Line_anno str ->
e8ffec0fa3d3061061bdc16e44247b9cf96b050fChristian Maeder (case aw of
ccf3de3d66b521a260e5c22d335c64a48e3f0195Christian Maeder Comment_start -> ptext "%%"
d42a01c4eb6892fe23ca9eff107bb29f4a229480Christian Maeder Annote_word w -> ptext $ "%" ++ w)
b1bd8688a1ce545444792a307412711c2c61df5fChristian Maeder <> (if all (`elem` whiteChars) str
c18e9c3c6d5039618f1f2c05526ece84c7794ea3Christian Maeder then empty else ptext str)
35597678f1c9da703de8d0b6b66ea63247ebe884Christian Maeder Group_anno strs ->
c18e9c3c6d5039618f1f2c05526ece84c7794ea3Christian Maeder let docs = map ptext strs
35597678f1c9da703de8d0b6b66ea63247ebe884Christian Maeder (o, c) = case aw of
f26a1fc3851297e6483cf3fb56e9c0967b8f8b13Christian Maeder Comment_start -> (ptext "%{", ptext "}%")
2ac1742771a267119f1d839054b5e45d0a468085Christian Maeder Annote_word w -> (ptext ("%" ++ w ++ "("),
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder ptext ")%")
2ac1742771a267119f1d839054b5e45d0a468085Christian Maeder in case docs of
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder [] -> empty
f26a1fc3851297e6483cf3fb56e9c0967b8f8b13Christian Maeder [h] -> o <> h <> c
f26a1fc3851297e6483cf3fb56e9c0967b8f8b13Christian Maeder h : t -> vcat ((o <> h) : init t ++ [last t <> c])
b1bd8688a1ce545444792a307412711c2c61df5fChristian Maeder printText0 ga (Display_anno aa ab _) =
f26a1fc3851297e6483cf3fb56e9c0967b8f8b13Christian Maeder let aa' = printText0 ga aa
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder ab' = fcat $ punctuate space $ map printPair $ filter nullSnd ab
35597678f1c9da703de8d0b6b66ea63247ebe884Christian Maeder in printGroup (ptext "display") $ aa' <+> ab'
f26a1fc3851297e6483cf3fb56e9c0967b8f8b13Christian Maeder where printPair (s1,s2) = ptext ("%" ++ lookupDisplayFormat s1)
f26a1fc3851297e6483cf3fb56e9c0967b8f8b13Christian Maeder <+> ptext s2
2ac1742771a267119f1d839054b5e45d0a468085Christian Maeder nullSnd (_,s2) = not $ null s2
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder printText0 ga (String_anno aa ab _) =
2ac1742771a267119f1d839054b5e45d0a468085Christian Maeder let aa' = printText0 ga aa
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder ab' = printText0 ga ab
f26a1fc3851297e6483cf3fb56e9c0967b8f8b13Christian Maeder in printLine (ptext "string") $ aa' <> comma <+> ab'
f26a1fc3851297e6483cf3fb56e9c0967b8f8b13Christian Maeder printText0 ga (List_anno aa ab ac _) =
81946e2b3f6dde6167f48769bd02c7a634736856Christian Maeder let aa' = printText0 ga aa
f26a1fc3851297e6483cf3fb56e9c0967b8f8b13Christian Maeder ab' = printText0 ga ab
f26a1fc3851297e6483cf3fb56e9c0967b8f8b13Christian Maeder ac' = printText0 ga ac
f26a1fc3851297e6483cf3fb56e9c0967b8f8b13Christian Maeder in printLine (ptext "list") $ aa' <> comma <+> ab' <> comma <+> ac'
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder printText0 ga (Number_anno aa _) =
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder let aa' = printText0 ga aa
f26a1fc3851297e6483cf3fb56e9c0967b8f8b13Christian Maeder in printLine (ptext "number") aa'
f26a1fc3851297e6483cf3fb56e9c0967b8f8b13Christian Maeder printText0 ga (Float_anno aa ab _) =
2ac1742771a267119f1d839054b5e45d0a468085Christian Maeder let aa' = printText0 ga aa
f26a1fc3851297e6483cf3fb56e9c0967b8f8b13Christian Maeder ab' = printText0 ga ab
ce7653c9c71e23bf04a5ec0ca5cb600c3738a909Christian Maeder in printLine (ptext "floating") $ aa' <> comma <+> ab'
2ac1742771a267119f1d839054b5e45d0a468085Christian Maeder printText0 ga (Prec_anno pflag ab ac _) =
f26a1fc3851297e6483cf3fb56e9c0967b8f8b13Christian Maeder let aa' = ptext $ showPrecRel pflag
f26a1fc3851297e6483cf3fb56e9c0967b8f8b13Christian Maeder ab' = fcat $ punctuate (comma <> space) $ map (printText0 ga) ab
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder ac' = fcat $ punctuate (comma <> space) $ map (printText0 ga) ac
b1bd8688a1ce545444792a307412711c2c61df5fChristian Maeder in printGroup (ptext "prec") $ braces ab' <+> aa' <+> braces ac'
b1bd8688a1ce545444792a307412711c2c61df5fChristian Maeder printText0 ga (Assoc_anno as aa _) =
b1bd8688a1ce545444792a307412711c2c61df5fChristian Maeder printGroup (case as of ARight -> ptext "right_assoc"
b1bd8688a1ce545444792a307412711c2c61df5fChristian Maeder ALeft -> ptext "left_assoc") $ fcat $
b1bd8688a1ce545444792a307412711c2c61df5fChristian Maeder punctuate (comma <> space) $
b1bd8688a1ce545444792a307412711c2c61df5fChristian Maeder map (printText0 ga) aa
b1bd8688a1ce545444792a307412711c2c61df5fChristian Maeder printText0 _ (Label [] _) = empty
b1bd8688a1ce545444792a307412711c2c61df5fChristian Maeder printText0 _ (Label aa _) =
b1bd8688a1ce545444792a307412711c2c61df5fChristian Maeder let aa' = vcat $ map ptext aa
b1bd8688a1ce545444792a307412711c2c61df5fChristian Maeder in ptext "%(" <> aa' <> ptext ")%"
b1bd8688a1ce545444792a307412711c2c61df5fChristian Maeder printText0 _ (Semantic_anno sa _) =
b1bd8688a1ce545444792a307412711c2c61df5fChristian Maeder printLine (ptext $ lookupSemanticAnno sa) empty
b1bd8688a1ce545444792a307412711c2c61df5fChristian Maeder-- -------------------------------------------------------------------------
b1bd8688a1ce545444792a307412711c2c61df5fChristian Maeder-- utilies
b1bd8688a1ce545444792a307412711c2c61df5fChristian Maeder-- -------------------------------------------------------------------------
b1bd8688a1ce545444792a307412711c2c61df5fChristian MaedershowPrecRel :: PrecRel -> String
b1bd8688a1ce545444792a307412711c2c61df5fChristian MaedershowPrecRel p = case p of Lower -> "<"
b1bd8688a1ce545444792a307412711c2c61df5fChristian Maeder Higher -> ">"
b1bd8688a1ce545444792a307412711c2c61df5fChristian Maeder BothDirections -> "<>"
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder NoDirection -> error "showPrecRel"
f26a1fc3851297e6483cf3fb56e9c0967b8f8b13Christian Maeder
f26a1fc3851297e6483cf3fb56e9c0967b8f8b13Christian MaederprintCommaIds :: GlobalAnnos -> [Id] -> Doc
5ba383b1607c20c57e14324e72cee2c789436d5fChristian MaederprintCommaIds ga = fcat . punctuate (comma <> space) . map (printText0 ga)
ce7653c9c71e23bf04a5ec0ca5cb600c3738a909Christian Maeder
2ac1742771a267119f1d839054b5e45d0a468085Christian MaederprintGroup :: Doc -> Doc -> Doc
14a1af9d9909dc47dc7fee6b0170b7ac0aef85daChristian MaederprintGroup key grp = ptext "%" <> key <> ptext "(" <> grp <> ptext ")%"
2ac1742771a267119f1d839054b5e45d0a468085Christian Maeder
2ac1742771a267119f1d839054b5e45d0a468085Christian MaederprintLine :: Doc -> Doc -> Doc
0f0aa53f11a0d1ab08c76428b9de73db5b17c977Christian MaederprintLine key line = if isEmpty line then pkey else pkey <+> line
7c35990c03276d1e675ea6f4ba38f47081620d77Christian Maeder where pkey = ptext "%" <> key
7c35990c03276d1e675ea6f4ba38f47081620d77Christian Maeder
0f0aa53f11a0d1ab08c76428b9de73db5b17c977Christian MaederprintAnnotationList_Text0 :: GlobalAnnos -> [Annotation] -> Doc
f26a1fc3851297e6483cf3fb56e9c0967b8f8b13Christian MaederprintAnnotationList_Text0 ga l = (vcat $ map (printText0 ga) l)
14a1af9d9909dc47dc7fee6b0170b7ac0aef85daChristian Maeder
f26a1fc3851297e6483cf3fb56e9c0967b8f8b13Christian Maederinstance (PrettyPrint a) => PrettyPrint (Annoted a) where
f26a1fc3851297e6483cf3fb56e9c0967b8f8b13Christian Maeder printText0 ga (Annoted i _ las ras) =
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder let i' = printText0 ga i
f26a1fc3851297e6483cf3fb56e9c0967b8f8b13Christian Maeder las' = printAnnotationList_Text0 ga las
f26a1fc3851297e6483cf3fb56e9c0967b8f8b13Christian Maeder (la,rras) = case ras of
840b2a6f37ec58f3281da16fafbc4121462c856aChristian Maeder [] -> (empty,[])
5ba383b1607c20c57e14324e72cee2c789436d5fChristian Maeder r@(l:xs)
5ba383b1607c20c57e14324e72cee2c789436d5fChristian Maeder | isLabel l -> (printText0 ga l,xs)
0f0aa53f11a0d1ab08c76428b9de73db5b17c977Christian Maeder | otherwise -> (empty,r)
f26a1fc3851297e6483cf3fb56e9c0967b8f8b13Christian Maeder ras' = printAnnotationList_Text0 ga rras
f26a1fc3851297e6483cf3fb56e9c0967b8f8b13Christian Maeder in las' $+$ (hang i' 0 la) $$ ras'
f26a1fc3851297e6483cf3fb56e9c0967b8f8b13Christian Maeder
5ba383b1607c20c57e14324e72cee2c789436d5fChristian Maederinstance PrettyPrint s => PrettyPrint (Named s) where
2ac1742771a267119f1d839054b5e45d0a468085Christian Maeder printText0 ga (NamedSen{senName = label, sentence = s}) =
72909c6c1cfe9702f5910d0a135c8b55729c7917Christian Maeder printText0 ga s <> if null label then empty else
72909c6c1cfe9702f5910d0a135c8b55729c7917Christian Maeder space <> printText0 ga (Label [label] nullRange)
14a1af9d9909dc47dc7fee6b0170b7ac0aef85daChristian Maeder
f26a1fc3851297e6483cf3fb56e9c0967b8f8b13Christian Maeder-- | function to split the annotation to the right of an item
72909c6c1cfe9702f5910d0a135c8b55729c7917Christian Maeder-- * fst contains printed label and implied annotion
2ac1742771a267119f1d839054b5e45d0a468085Christian Maeder-- if any at the begining of the list of annotations
d5b008ac61f0f3d99f41ad3476f945e2b65bd3c0Christian Maeder-- * snd contains the remaining annos
d5b008ac61f0f3d99f41ad3476f945e2b65bd3c0Christian MaedersplitAndPrintRAnnos :: (GlobalAnnos -> Annotation -> Doc)
d5b008ac61f0f3d99f41ad3476f945e2b65bd3c0Christian Maeder -> (GlobalAnnos -> [Annotation] -> Doc)
32a7cc7177ecf70e35ec831ff86887b9acc40dcaChristian Maeder -> (Doc -> Doc -> Doc) -- ^ a beside with space
f26a1fc3851297e6483cf3fb56e9c0967b8f8b13Christian Maeder -- like <+> or <\+>
2118d66b6aa3c90458925019c9b2fb986e2b2aabChristian Maeder -> Doc -- ^ for Latex something to move the label
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder -- and \/ or implied annotation to the right
35597678f1c9da703de8d0b6b66ea63247ebe884Christian Maeder -- margin
2ac1742771a267119f1d839054b5e45d0a468085Christian Maeder -> GlobalAnnos -> [Annotation] -> (Doc,Doc)
d5b008ac61f0f3d99f41ad3476f945e2b65bd3c0Christian MaedersplitAndPrintRAnnos pf pf_list sepF move ga ras =
d5b008ac61f0f3d99f41ad3476f945e2b65bd3c0Christian Maeder case ras of
d5b008ac61f0f3d99f41ad3476f945e2b65bd3c0Christian Maeder [] -> (empty,empty)
d5b008ac61f0f3d99f41ad3476f945e2b65bd3c0Christian Maeder r@(l:[])
35597678f1c9da703de8d0b6b66ea63247ebe884Christian Maeder | isLabel l -> (pf ga l,empty)
d5b008ac61f0f3d99f41ad3476f945e2b65bd3c0Christian Maeder | isImplied l -> (move <> pf ga l, empty)
32a7cc7177ecf70e35ec831ff86887b9acc40dcaChristian Maeder | otherwise -> (empty,pf_list ga r)
d5b008ac61f0f3d99f41ad3476f945e2b65bd3c0Christian Maeder r@(l:impl:xs)
d5b008ac61f0f3d99f41ad3476f945e2b65bd3c0Christian Maeder | isLabel l && not (isImplied impl)
d5b008ac61f0f3d99f41ad3476f945e2b65bd3c0Christian Maeder -> (pf ga l, pf_list ga (impl:xs))
d5b008ac61f0f3d99f41ad3476f945e2b65bd3c0Christian Maeder | isLabel l && isImplied impl
d5b008ac61f0f3d99f41ad3476f945e2b65bd3c0Christian Maeder -> (pf ga l `sepF` pf ga impl, pf_list ga xs)
d5b008ac61f0f3d99f41ad3476f945e2b65bd3c0Christian Maeder | isImplied l
35597678f1c9da703de8d0b6b66ea63247ebe884Christian Maeder -> (move <> pf ga l, pf_list ga (impl:xs))
2ac1742771a267119f1d839054b5e45d0a468085Christian Maeder | otherwise -> (empty,pf_list ga r)
89dc77946055c0e4cb4671c4a74c3dcd55ed41a1Christian Maeder