Documentation
¶
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Encoder ¶
type Encoder struct { LocaleTag string // e.g. en_US, de_DE, ... Prefix model.Nullable[string] // prefix to impose on table (overrides table prefix) ColumnFlags []model.ColumnFlags // per-column alignment preferences ColumnWidths []model.ColumnWidth // per-column width details // contains filtered or unexported fields }
Encoder encodes a single table
Encoding typically consists of several stages, which may be used independently (e.g. when coordinating encoding of an entire document) or via the single Encode() method.
A Table Encoder cannot be re-used for multiple tables.
func (*Encoder) CollateWidths ¶
func (enc *Encoder) CollateWidths()
CollateWidths determines how wide each column should be in order to vertically align each column of data.
Column alignment hints are also included in the column width calculations.
[EncodeData] should have been called prior to calling CollateWidths
func (*Encoder) Encode ¶
Encode performs all steps necessary to encode the table as a UTF-8 string.
This includes:
- filtering columns (TODO)
- sorting rows (TODO)
- encoding row data (e.g. escaping `|`s)
- collating column widths
- and rendering the resulting table
Example (Simple) ¶
package main import ( "fmt" "codeberg.org/japh/psv/encoding/table" "codeberg.org/japh/psv/model" ) func main() { // create a simple table tbl := &model.Table{} tbl.AppendRow([]string{"Name", "Points", "Color"}) // 3 column names (no special significance) tbl.AppendRow([]string{"Adam", "6"}) // 2 fields, no color tbl.AppendRow([]string{"Alice", "", "red", "pasta"}) // 4 fields, incl. an extra, unamed field tbl.AppendRow([]string{"Anon"}) // 1 field, an almost empty row tbl.AppendRow([]string{"Charlie", "", "green"}) // 3 fields, no points enc := &table.Encoder{} enc.SetTable(tbl) output := enc.Encode() fmt.Println("rendered table without rulers") fmt.Print(string(output)) }
Output: rendered table without rulers | Name | Points | Color | | | Adam | 6 | | | | Alice | | red | pasta | | Anon | | | | | Charlie | | green | |
Example (Table_with_rulers) ¶
package main import ( "fmt" "codeberg.org/japh/psv/encoding/table" "codeberg.org/japh/psv/model" ) func main() { // create a simple table tbl := &model.Table{} tbl.AppendRuler("") tbl.AppendRow([]string{"Name", "Points", "Color"}) // 3 column names (no special significance) tbl.AppendRuler("") tbl.AppendRow([]string{"Adam", "6"}) // 2 fields, no color tbl.AppendRow([]string{"Alice", "", "red", "pasta"}) // 4 fields, incl. an extra, unamed field tbl.AppendRow([]string{"Anon"}) // 1 field, an almost empty row tbl.AppendRow([]string{"Charlie", "", "green"}) // 3 fields, no points tbl.AppendRuler("") enc := &table.Encoder{} enc.SetTable(tbl) output := enc.Encode() fmt.Println("rendered table with rulers") fmt.Println(" - first row is center aligned") fmt.Print(string(output)) }
Output: rendered table with rulers - first row is center aligned | ------- | ------ | ----- | ----- | | Name | Points | Color | | | ------- | ------ | ----- | ----- | | Adam | 6 | | | | Alice | | red | pasta | | Anon | | | | | Charlie | | green | | | ------- | ------ | ----- | ----- |
func (*Encoder) EncodeData ¶
func (enc *Encoder) EncodeData()
EncodeData encodes the row data by escaping critical characters within the data.
Note that column widths are calculated using the encoded data!
func (*Encoder) FilterColumns ¶
func (enc *Encoder) FilterColumns()
FilterColumns merges the configured list of column names with the table's actual list of columns
TODO: 2025-02-26 create a simple field mapping
func (*Encoder) Prepare ¶
func (enc *Encoder) Prepare()
Prepare performs all preliminary steps required prior to rendering a table.
This is used by the document encoder, to enable document-wide alignment. i.e. all tables are first prepared, then their column widths are merged and updated thus aligning all tables such that all data can be represented consistently.
See also [Encode]
func (*Encoder) Render ¶
Render renders a single table
The following functions should have been called already:
- FilterColumns()
- Sort()
- EncodeData()
- CollateWidths()