From c91576ef37ac616c0dd3149749d22a84e088ca64 Mon Sep 17 00:00:00 2001 From: Moh Achun Armando Date: Thu, 5 Jun 2025 09:50:31 +0700 Subject: [PATCH] bugfix: handle space on node link --- slate_converter.go | 4 ++++ slate_converter_test.go | 50 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+) diff --git a/slate_converter.go b/slate_converter.go index 814933f..2318ed5 100644 --- a/slate_converter.go +++ b/slate_converter.go @@ -30,6 +30,7 @@ const ( _nodeTypeInline = "inline" _nodeTypeCaption = "caption" _nodeTypeFigure = "figure" + _nodeTypeLink = "link" ) // SlateLeaf represents a text element with optional formatting. @@ -103,6 +104,9 @@ func serializeSlateNodes(nodes []SlateNode, nodeSeparator, leaveSeparator string case _nodeTypeInline: modifiedSlateNodeSeparator = _spaceSeparator result.WriteString(serializeSlateNodes(node.Nodes, modifiedSlateNodeSeparator, leaveSeparator) + leaveSeparator) + case _nodeTypeLink: + modifiedSlateNodeSeparator = _spaceSeparator + result.WriteString(serializeSlateNodes(node.Nodes, modifiedSlateNodeSeparator, leaveSeparator)) case _nodeTypeListItem: modifiedSlateNodeSeparator = _commaSeparator if node.isLastInList { diff --git a/slate_converter_test.go b/slate_converter_test.go index f510797..ebae673 100644 --- a/slate_converter_test.go +++ b/slate_converter_test.go @@ -22,3 +22,53 @@ RedMagic 10 Pro+ berada di posisi ketiga dengan skor AnTuTu 2.879.356, diikuti o assert.Nil(t, err) assert.Equal(t, expected, result) } + +func Test_ToPlainText_Link(t *testing.T) { + t.Run("text link not contain space", func(t *testing.T) { + inputJSON := `{"document":{"nodes":[{"object":"block","type":"heading-large","data":{},"nodes":[{"object":"text","leaves":[{"object":"leaf","text":"ini adalah judul","marks":[]}]}]},{"object":"block","type":"paragraph","data":{},"nodes":[{"object":"text","leaves":[{"object":"leaf","text":"tanda kemunculan ","marks":[]}]},{"object":"inline","type":"link","data":{"href":"https://kumparan.com"},"nodes":[{"object":"text","leaves":[{"object":"leaf","text":"suzuki fronx","marks":[]}]}]},{"object":"text","leaves":[{"object":"leaf","text":" di indonesia.","marks":[]}]}]}]}}` + expected := `tanda kemunculan suzuki fronx di indonesia.` + + input, err := ParseSlateDocument(inputJSON) + assert.NoError(t, err) + + result, err := input.ToPlainText() + assert.NoError(t, err) + assert.Equal(t, expected, result) + }) + + t.Run("text link include space on prefix", func(t *testing.T) { + inputJSON := `{"document":{"nodes":[{"object":"block","type":"heading-large","data":{},"nodes":[{"object":"text","leaves":[{"object":"leaf","text":"ini adalah judul","marks":[]}]}]},{"object":"block","type":"paragraph","data":{},"nodes":[{"object":"text","leaves":[{"object":"leaf","text":"tanda kemunculan","marks":[]}]},{"object":"inline","type":"link","data":{"href":"https://kumparan.com"},"nodes":[{"object":"text","leaves":[{"object":"leaf","text":" suzuki fronx","marks":[]}]}]},{"object":"text","leaves":[{"object":"leaf","text":" di indonesia.","marks":[]}]}]}]}}` + expected := `tanda kemunculan suzuki fronx di indonesia.` + + input, err := ParseSlateDocument(inputJSON) + assert.NoError(t, err) + + result, err := input.ToPlainText() + assert.NoError(t, err) + assert.Equal(t, expected, result) + }) + + t.Run("text link include space on suffix", func(t *testing.T) { + inputJSON := `{"document":{"nodes":[{"object":"block","type":"heading-large","data":{},"nodes":[{"object":"text","leaves":[{"object":"leaf","text":"ini adalah judul","marks":[]}]}]},{"object":"block","type":"paragraph","data":{},"nodes":[{"object":"text","leaves":[{"object":"leaf","text":"tanda kemunculan ","marks":[]}]},{"object":"inline","type":"link","data":{"href":"https://kumparan.com"},"nodes":[{"object":"text","leaves":[{"object":"leaf","text":"suzuki fronx ","marks":[]}]}]},{"object":"text","leaves":[{"object":"leaf","text":"di indonesia.","marks":[]}]}]}]}}` + expected := `tanda kemunculan suzuki fronx di indonesia.` + + input, err := ParseSlateDocument(inputJSON) + assert.NoError(t, err) + + result, err := input.ToPlainText() + assert.NoError(t, err) + assert.Equal(t, expected, result) + }) + + t.Run("text link include space on prefix and suffix", func(t *testing.T) { + inputJSON := `{"document":{"nodes":[{"object":"block","type":"heading-large","data":{},"nodes":[{"object":"text","leaves":[{"object":"leaf","text":"ini adalah judul","marks":[]}]}]},{"object":"block","type":"paragraph","data":{},"nodes":[{"object":"text","leaves":[{"object":"leaf","text":"tanda kemunculan","marks":[]}]},{"object":"inline","type":"link","data":{"href":"https://kumparan.com"},"nodes":[{"object":"text","leaves":[{"object":"leaf","text":" suzuki fronx ","marks":[]}]}]},{"object":"text","leaves":[{"object":"leaf","text":"di indonesia.","marks":[]}]}]}]}}` + expected := `tanda kemunculan suzuki fronx di indonesia.` + + input, err := ParseSlateDocument(inputJSON) + assert.NoError(t, err) + + result, err := input.ToPlainText() + assert.NoError(t, err) + assert.Equal(t, expected, result) + }) +}