lib: Write.Spreadsheet.headerCell, addRowSpanHeader, rawTableContent: taken from Commands.Balance

This commit is contained in:
Henning Thielemann 2024-10-12 20:52:36 +02:00 committed by Simon Michael
parent b8570c2aa0
commit b8497c830e
3 changed files with 25 additions and 21 deletions

View File

@ -14,9 +14,12 @@ module Hledger.Write.Spreadsheet (
NumLines(..), NumLines(..),
noBorder, noBorder,
defaultCell, defaultCell,
headerCell,
emptyCell, emptyCell,
transposeCell, transposeCell,
transpose, transpose,
addRowSpanHeader,
rawTableContent,
) where ) where
import Hledger.Data.Types (Amount) import Hledger.Data.Types (Amount)
@ -151,6 +154,9 @@ defaultCell text =
cellContent = 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 :: (Lines border, Monoid text) => Cell border text
emptyCell = defaultCell mempty emptyCell = defaultCell mempty
@ -163,3 +169,20 @@ transposeCell cell =
transpose :: [[Cell border text]] -> [[Cell border text]] transpose :: [[Cell border text]] -> [[Cell border text]]
transpose = List.transpose . map (map transposeCell) 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)

View File

@ -265,7 +265,6 @@ module Hledger.Cli.Commands.Balance (
,multiBalanceReportAsSpreadsheetParts ,multiBalanceReportAsSpreadsheetParts
,multiBalanceHasTotalsColumn ,multiBalanceHasTotalsColumn
,addTotalBorders ,addTotalBorders
,addRowSpanHeader
,simpleDateSpanCell ,simpleDateSpanCell
,RowClass(..) ,RowClass(..)
-- ** Tests -- ** Tests
@ -307,6 +306,7 @@ import Hledger.Cli.Utils
import Hledger.Write.Csv (CSV, printCSV, printTSV) import Hledger.Write.Csv (CSV, printCSV, printTSV)
import Hledger.Write.Ods (printFods) import Hledger.Write.Ods (printFods)
import Hledger.Write.Html.Lucid (printHtml) import Hledger.Write.Html.Lucid (printHtml)
import Hledger.Write.Spreadsheet (rawTableContent, addRowSpanHeader, headerCell)
import qualified Hledger.Write.Spreadsheet as Ods 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 :: [Text] -> Text
registerQueryUrl query = registerQueryUrl query =
Uri.render $ Uri.render $
@ -664,22 +661,6 @@ addTotalBorders =
Ods.cellBorder = Ods.noBorder {Ods.borderTop = border}})) Ods.cellBorder = Ods.noBorder {Ods.borderTop = border}}))
(Ods.DoubleLine : repeat Ods.NoLine) (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 :: setAccountAnchor ::
Maybe Text -> [Text] -> Text -> Ods.Cell border text -> Ods.Cell border text Maybe Text -> [Text] -> Text -> Ods.Cell border text -> Ods.Cell border text
setAccountAnchor base query acct cell = setAccountAnchor base query acct cell =

View File

@ -378,7 +378,7 @@ compoundBalanceReportAsHtml ropts cbr =
Total simpleDateSpanCell totalrow Total simpleDateSpanCell totalrow
-- make a table of rendered lines of the report totals row -- make a table of rendered lines of the report totals row
& map (map (fmap wbToText)) & map (map (fmap wbToText))
& addRowSpanHeader & Spr.addRowSpanHeader
((Spr.defaultCell "Net:") {Spr.cellClass = Spr.Class "account"}) ((Spr.defaultCell "Net:") {Spr.cellClass = Spr.Class "account"})
-- insert a headings column, with Net: on the first line only -- insert a headings column, with Net: on the first line only
& addTotalBorders -- marking the first for special styling & addTotalBorders -- marking the first for special styling