Revision c5f7412e Ganeti/HTools/Utils.hs
b/Ganeti/HTools/Utils.hs | ||
---|---|---|
35 | 35 |
, asObjectList |
36 | 36 |
, fromJResult |
37 | 37 |
, tryRead |
38 |
, formatTable |
|
38 | 39 |
) where |
39 | 40 |
|
40 | 41 |
import Data.List |
... | ... | |
140 | 141 |
-- | Safe 'read' function returning data encapsulated in a Result. |
141 | 142 |
tryRead :: (Monad m, Read a) => String -> String -> m a |
142 | 143 |
tryRead name s = parseChoices name s $ reads s |
144 |
|
|
145 |
-- | Format a table of strings to maintain consistent length |
|
146 |
formatTable :: [[String]] -> [Bool] -> [[String]] |
|
147 |
formatTable vals numpos = |
|
148 |
let vtrans = transpose vals -- transpose, so that we work on rows |
|
149 |
-- rather than columns |
|
150 |
mlens = map (maximum . map length) vtrans |
|
151 |
expnd = map (\(flds, isnum, ml) -> |
|
152 |
map (\val -> |
|
153 |
let delta = ml - length val |
|
154 |
filler = replicate delta ' ' |
|
155 |
in if delta > 0 |
|
156 |
then if isnum |
|
157 |
then filler ++ val |
|
158 |
else val ++ filler |
|
159 |
else val |
|
160 |
) flds |
|
161 |
) (zip3 vtrans numpos mlens) |
|
162 |
in transpose expnd |
Also available in: Unified diff