0 | module Text.Molfile.Writer.Util
2 | import Data.Linear.Traverse1
3 | import Data.SortedMap
5 | import Data.String.Builder
6 | import Text.Molfile.Types
12 | dispIso : Isotope -> String
13 | dispIso (MkI H (Just 2)) = "D"
14 | dispIso (MkI H (Just 3)) = "T"
15 | dispIso (MkI e _) = symbol e
19 | dispRadical : Radical -> String
20 | dispRadical NoRadical = "0"
21 | dispRadical Singlet = "1"
22 | dispRadical Doublet = "2"
23 | dispRadical Triplet = "3"
25 | parameters {auto b : Builder q}
27 | writeV : SDValue -> F1' q
28 | writeV "" = linebreak
30 | traverse1_ putCharsLn (grouped 200 $
unpack v.value)
34 | writeStructureData : StructureData -> F1' q
35 | writeStructureData (SD h v) = putTextLn "> <\{h}>" >> writeV v
38 | sdfDelimiter : F1' q
39 | sdfDelimiter = putTextLn "$$$$"
43 | GroupMap = SortedMap Nat (String, SnocList Nat)
46 | appendLbl : Fin k -> Adj k b (MolAtom' x y z) -> GroupMap -> GroupMap
48 | case a.label.label of
50 | Just (G n l) => case lookup n m of
51 | Just (l,sx) => insert n (l, sx :< S (cast x)) m
52 | Nothing => case trim l of
54 | l2 => insert n (l2, [<S (cast x)]) m