lib: Write.Spreadsheet.headerCell, addRowSpanHeader, rawTableContent: taken from Commands.Balance
This commit is contained in:
parent
b8570c2aa0
commit
b8497c830e
@ -14,9 +14,12 @@ module Hledger.Write.Spreadsheet (
|
||||
NumLines(..),
|
||||
noBorder,
|
||||
defaultCell,
|
||||
headerCell,
|
||||
emptyCell,
|
||||
transposeCell,
|
||||
transpose,
|
||||
addRowSpanHeader,
|
||||
rawTableContent,
|
||||
) where
|
||||
|
||||
import Hledger.Data.Types (Amount)
|
||||
@ -151,6 +154,9 @@ defaultCell text =
|
||||
cellContent = text
|
||||
}
|
||||
|
||||
headerCell :: (Lines borders) => Text -> Cell borders Text
|
||||
headerCell text = (defaultCell text) {cellStyle = Head}
|
||||
|
||||
emptyCell :: (Lines border, Monoid text) => Cell border text
|
||||
emptyCell = defaultCell mempty
|
||||
|
||||
@ -163,3 +169,20 @@ transposeCell cell =
|
||||
|
||||
transpose :: [[Cell border text]] -> [[Cell border text]]
|
||||
transpose = List.transpose . map (map transposeCell)
|
||||
|
||||
|
||||
addRowSpanHeader ::
|
||||
Cell border text ->
|
||||
[[Cell border text]] -> [[Cell border text]]
|
||||
addRowSpanHeader header rows =
|
||||
case rows of
|
||||
[] -> []
|
||||
[row] -> [header:row]
|
||||
_ ->
|
||||
zipWith (:)
|
||||
(header{cellSpan = SpanVertical (length rows)} :
|
||||
repeat header{cellSpan = Covered})
|
||||
rows
|
||||
|
||||
rawTableContent :: [[Cell border text]] -> [[text]]
|
||||
rawTableContent = map (map cellContent)
|
||||
|
||||
@ -265,7 +265,6 @@ module Hledger.Cli.Commands.Balance (
|
||||
,multiBalanceReportAsSpreadsheetParts
|
||||
,multiBalanceHasTotalsColumn
|
||||
,addTotalBorders
|
||||
,addRowSpanHeader
|
||||
,simpleDateSpanCell
|
||||
,RowClass(..)
|
||||
-- ** Tests
|
||||
@ -307,6 +306,7 @@ import Hledger.Cli.Utils
|
||||
import Hledger.Write.Csv (CSV, printCSV, printTSV)
|
||||
import Hledger.Write.Ods (printFods)
|
||||
import Hledger.Write.Html.Lucid (printHtml)
|
||||
import Hledger.Write.Spreadsheet (rawTableContent, addRowSpanHeader, headerCell)
|
||||
import qualified Hledger.Write.Spreadsheet as Ods
|
||||
|
||||
|
||||
@ -587,9 +587,6 @@ renderComponent topaligned oneline opts (acctname, dep, total) (FormatField ljus
|
||||
}
|
||||
|
||||
|
||||
headerCell :: (Ods.Lines borders) => Text -> Ods.Cell borders Text
|
||||
headerCell text = (Ods.defaultCell text) {Ods.cellStyle = Ods.Head}
|
||||
|
||||
registerQueryUrl :: [Text] -> Text
|
||||
registerQueryUrl query =
|
||||
Uri.render $
|
||||
@ -664,22 +661,6 @@ addTotalBorders =
|
||||
Ods.cellBorder = Ods.noBorder {Ods.borderTop = border}}))
|
||||
(Ods.DoubleLine : repeat Ods.NoLine)
|
||||
|
||||
rawTableContent :: [[Ods.Cell border text]] -> [[text]]
|
||||
rawTableContent = map (map Ods.cellContent)
|
||||
|
||||
addRowSpanHeader ::
|
||||
Ods.Cell border text ->
|
||||
[[Ods.Cell border text]] -> [[Ods.Cell border text]]
|
||||
addRowSpanHeader header rows =
|
||||
case rows of
|
||||
[] -> []
|
||||
[row] -> [header:row]
|
||||
_ ->
|
||||
zipWith (:)
|
||||
(header{Ods.cellSpan = Ods.SpanVertical (length rows)} :
|
||||
repeat header{Ods.cellSpan = Ods.Covered})
|
||||
rows
|
||||
|
||||
setAccountAnchor ::
|
||||
Maybe Text -> [Text] -> Text -> Ods.Cell border text -> Ods.Cell border text
|
||||
setAccountAnchor base query acct cell =
|
||||
|
||||
@ -378,7 +378,7 @@ compoundBalanceReportAsHtml ropts cbr =
|
||||
Total simpleDateSpanCell totalrow
|
||||
-- make a table of rendered lines of the report totals row
|
||||
& map (map (fmap wbToText))
|
||||
& addRowSpanHeader
|
||||
& Spr.addRowSpanHeader
|
||||
((Spr.defaultCell "Net:") {Spr.cellClass = Spr.Class "account"})
|
||||
-- insert a headings column, with Net: on the first line only
|
||||
& addTotalBorders -- marking the first for special styling
|
||||
|
||||
Loading…
Reference in New Issue
Block a user