From a18559e6d0521ac55abc30637c9777c1a4fe2441 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Tue, 16 Jul 2024 23:44:15 +0800 Subject: [PATCH] :art: Improve database template field exporting Fix https://github.com/siyuan-note/siyuan/issues/11988 --- kernel/av/table.go | 9 ++++++++ kernel/model/export.go | 50 +++++++++++++++++++++++++++++++++++------- 2 files changed, 51 insertions(+), 8 deletions(-) diff --git a/kernel/av/table.go b/kernel/av/table.go index 3818121aa..23c2b6597 100644 --- a/kernel/av/table.go +++ b/kernel/av/table.go @@ -110,6 +110,15 @@ func (row *TableRow) GetValue(keyID string) (ret *Value) { return } +func (table *Table) GetColumn(id string) *TableColumn { + for _, column := range table.Columns { + if column.ID == id { + return column + } + } + return nil +} + func (table *Table) GetType() LayoutType { return LayoutTypeTable } diff --git a/kernel/model/export.go b/kernel/model/export.go index b7db9e573..182fac2ed 100644 --- a/kernel/model/export.go +++ b/kernel/model/export.go @@ -2246,10 +2246,16 @@ func exportTree(tree *parse.Tree, wysiwyg, keepFold bool, val = string(lex.EscapeProtyleMarkers([]byte(val))) val = strings.ReplaceAll(val, "\\|", "|") val = strings.ReplaceAll(val, "|", "\\|") - lines := strings.Split(val, "\n") - for _, line := range lines { - mdTableCell.AppendChild(&ast.Node{Type: ast.NodeText, Tokens: []byte(line)}) - mdTableCell.AppendChild(&ast.Node{Type: ast.NodeHardBreak}) + col := table.GetColumn(cell.Value.KeyID) + if nil != col && col.Wrap { + lines := strings.Split(val, "\n") + for _, line := range lines { + mdTableCell.AppendChild(&ast.Node{Type: ast.NodeText, Tokens: []byte(line)}) + mdTableCell.AppendChild(&ast.Node{Type: ast.NodeHardBreak}) + } + } else { + val = strings.ReplaceAll(val, "\n", " ") + mdTableCell.AppendChild(&ast.Node{Type: ast.NodeText, Tokens: []byte(val)}) } continue } @@ -2259,10 +2265,38 @@ func exportTree(tree *parse.Tree, wysiwyg, keepFold bool, val = string(lex.EscapeProtyleMarkers([]byte(val))) val = strings.ReplaceAll(val, "\\|", "|") val = strings.ReplaceAll(val, "|", "\\|") - lines := strings.Split(val, "\n") - for _, line := range lines { - mdTableCell.AppendChild(&ast.Node{Type: ast.NodeText, Tokens: []byte(line)}) - mdTableCell.AppendChild(&ast.Node{Type: ast.NodeHardBreak}) + col := table.GetColumn(cell.Value.KeyID) + if nil != col && col.Wrap { + lines := strings.Split(val, "\n") + for _, line := range lines { + mdTableCell.AppendChild(&ast.Node{Type: ast.NodeText, Tokens: []byte(line)}) + mdTableCell.AppendChild(&ast.Node{Type: ast.NodeHardBreak}) + } + } else { + val = strings.ReplaceAll(val, "\n", " ") + mdTableCell.AppendChild(&ast.Node{Type: ast.NodeText, Tokens: []byte(val)}) + } + continue + } + } else if av.KeyTypeTemplate == cell.Value.Type { + if nil != cell.Value.Template { + val = cell.Value.Template.Content + if "" == val { + val = "" + } + + val = strings.ReplaceAll(val, "\\|", "|") + val = strings.ReplaceAll(val, "|", "\\|") + col := table.GetColumn(cell.Value.KeyID) + if nil != col && col.Wrap { + lines := strings.Split(val, "\n") + for _, line := range lines { + mdTableCell.AppendChild(&ast.Node{Type: ast.NodeText, Tokens: []byte(line)}) + mdTableCell.AppendChild(&ast.Node{Type: ast.NodeHardBreak}) + } + } else { + val = strings.ReplaceAll(val, "\n", " ") + mdTableCell.AppendChild(&ast.Node{Type: ast.NodeText, Tokens: []byte(val)}) } continue }