{-| Module : Data.Matrix.SymmetryOperationsSymbols.PlainText Description : Output as plain text Copyright : (c) Jun Narumi, 2018-2020 License : MIT Maintainer : narumij@gmail.com Stability : experimental -} module Data.Matrix.SymmetryOperationsSymbols.PlainText ( showAsPlainText, ) where import Data.List import Data.Ratio import Data.Ratio.Slash import Data.Matrix import Data.Matrix.AsXYZ import Data.Matrix.SymmetryOperationsSymbols.SymopGeom -- | -- >>> triplet (1%2,3%4,5%6) -- "1/2,3/4,5/6" triplet :: Integral a => (Ratio a,Ratio a,Ratio a) -> String triplet (a,b,c) = intercalate "," . map (show . Slash) $ [a,b,c] -- | -- >>> triplet (1%2,3%4,5%6) -- "(1/2,3/4,5/6)" tripletParen :: Integral a => (Ratio a,Ratio a,Ratio a) -> String tripletParen = ("(" ++) . (++ ")") . triplet showSense :: Sense -> String showSense Positive = "+" showSense Negative = "-" showPlane :: Integral a => SymopGeom a -> String showPlane = prettyXYZ . fromLists . plane showAxis :: Integral a => SymopGeom a -> String showAxis = prettyXYZ . fromLists . axis showAsPlainText :: Integral a => SymopGeom a -> String showAsPlainText Identity = " 1 " showAsPlainText val@Translation {} = concat [" t ",tripletParen $ vector val," "] showAsPlainText val@Reflection {} = concat [" m ", showPlane val] showAsPlainText val@GlideABC {} = concat [" ",showABC $ abc val," ", showPlane val] showAsPlainText val@GlideDGN {} = concat [" ",showDGN $ dgn val," ",tripletParen $ glide val," ", showPlane val] showAsPlainText val@TwoFoldRotation {} = concat [" 2 ",showAxis val] showAsPlainText val@TwoFoldScrew {} = concat [" 2 ",tripletParen $ vector val," ",showAxis val] showAsPlainText val@NFoldRotation {} = concat [" ",showSymbol (nFold val),showSense (sense val)," ",showAxis val] showAsPlainText val@NFoldScrew {} = concat [" ",showSymbol (nFold val),showSense (sense val),tripletParen $ vector val," ",showAxis val] showAsPlainText val@Inversion {} = concat ["-1 ",triplet $ centre val] showAsPlainText val@RotInversion {} = concat ["-",showSymbol (nFold val),showSense (sense val)," ",showAxis val,"; ",triplet $ point val]