diff options
| author | Paul Buetow <paul@buetow.org> | 2025-01-15 21:30:28 +0200 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2025-01-15 21:30:28 +0200 |
| commit | 5c3813b593415615116acbe8d21f262c1f20e9f8 (patch) | |
| tree | 614c4aeec89c24587eee7123b9a901aceb4b6788 | |
| parent | 94d9b5f48147ee9cc6ca57177e00f8679224603d (diff) | |
fix bug in regards to inline tags extractions involving newlines
| -rw-r--r-- | go.mod | 22 | ||||
| -rw-r--r-- | go.sum | 32 | ||||
| -rw-r--r-- | internal/tags/inline.go | 5 | ||||
| -rw-r--r-- | internal/tags/inline_test.go | 10 |
4 files changed, 59 insertions, 10 deletions
@@ -3,14 +3,24 @@ module codeberg.org/snonux/gos go 1.23.2 require ( - github.com/fatih/color v1.17.0 - golang.org/x/exp v0.0.0-20220909182711-5c715a9e8561 - golang.org/x/net v0.30.0 - golang.org/x/oauth2 v0.23.0 + github.com/fatih/color v1.18.0 + golang.org/x/exp v0.0.0-20250106191152-7588d65b2ba8 + golang.org/x/net v0.34.0 + golang.org/x/oauth2 v0.25.0 ) require ( - github.com/mattn/go-colorable v0.1.13 // indirect + cloud.google.com/go/compute/metadata v0.6.0 // indirect + github.com/google/go-cmp v0.6.0 // indirect + github.com/mattn/go-colorable v0.1.14 // indirect github.com/mattn/go-isatty v0.0.20 // indirect - golang.org/x/sys v0.26.0 // indirect + github.com/yuin/goldmark v1.7.8 // indirect + golang.org/x/crypto v0.32.0 // indirect + golang.org/x/mod v0.22.0 // indirect + golang.org/x/sync v0.10.0 // indirect + golang.org/x/sys v0.29.0 // indirect + golang.org/x/telemetry v0.0.0-20250105011419-6d9ea865d014 // indirect + golang.org/x/term v0.28.0 // indirect + golang.org/x/text v0.21.0 // indirect + golang.org/x/tools v0.29.0 // indirect ) @@ -1,19 +1,51 @@ +cloud.google.com/go/compute/metadata v0.6.0 h1:A6hENjEsCDtC1k8byVsgwvVcioamEHvZ4j01OwKxG9I= +cloud.google.com/go/compute/metadata v0.6.0/go.mod h1:FjyFAW1MW0C203CEOMDTu3Dk1FlqW3Rga40jzHL4hfg= github.com/fatih/color v1.17.0 h1:GlRw1BRJxkpqUCBKzKOw098ed57fEsKeNjpTe3cSjK4= github.com/fatih/color v1.17.0/go.mod h1:YZ7TlrGPkiz6ku9fK3TLD/pl3CpsiFyu8N92HLgmosI= +github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM= +github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE= +github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/yuin/goldmark v1.7.8 h1:iERMLn0/QJeHFhxSt3p6PeN9mGnvIKSpG9YYorDMnic= +github.com/yuin/goldmark v1.7.8/go.mod h1:uzxRWxtg69N339t3louHJ7+O03ezfj6PlliRlaOzY1E= +golang.org/x/crypto v0.32.0 h1:euUpcYgM8WcP71gNpTqQCn6rC2t6ULUPiOzfWaXVVfc= +golang.org/x/crypto v0.32.0/go.mod h1:ZnnJkOaASj8g0AjIduWNlq2NRxL0PlBrbKVyZ6V/Ugc= golang.org/x/exp v0.0.0-20220909182711-5c715a9e8561 h1:MDc5xs78ZrZr3HMQugiXOAkSZtfTpbJLDr/lwfgO53E= golang.org/x/exp v0.0.0-20220909182711-5c715a9e8561/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= +golang.org/x/exp v0.0.0-20250106191152-7588d65b2ba8 h1:yqrTHse8TCMW1M1ZCP+VAR/l0kKxwaAIqN/il7x4voA= +golang.org/x/exp v0.0.0-20250106191152-7588d65b2ba8/go.mod h1:tujkw807nyEEAamNbDrEGzRav+ilXA7PCRAd6xsmwiU= +golang.org/x/mod v0.22.0 h1:D4nJWe9zXqHOmWqj4VMOJhvzj7bEZg4wEYa759z1pH4= +golang.org/x/mod v0.22.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= golang.org/x/net v0.30.0 h1:AcW1SDZMkb8IpzCdQUaIq2sP4sZ4zw+55h6ynffypl4= golang.org/x/net v0.30.0/go.mod h1:2wGyMJ5iFasEhkwi13ChkO/t1ECNC4X4eBKkVFyYFlU= +golang.org/x/net v0.34.0 h1:Mb7Mrk043xzHgnRM88suvJFwzVrRfHEHJEl5/71CKw0= +golang.org/x/net v0.34.0/go.mod h1:di0qlW3YNM5oh6GqDGQr92MyTozJPmybPK4Ev/Gm31k= golang.org/x/oauth2 v0.23.0 h1:PbgcYx2W7i4LvjJWEbf0ngHV6qJYr86PkAV3bXdLEbs= golang.org/x/oauth2 v0.23.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= +golang.org/x/oauth2 v0.25.0 h1:CY4y7XT9v0cRI9oupztF8AgiIu99L/ksR/Xp/6jrZ70= +golang.org/x/oauth2 v0.25.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= +golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= +golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo= golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU= +golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/telemetry v0.0.0-20250105011419-6d9ea865d014 h1:r3fGtUghGlLJqjla3K3bVBiP7WyAWj8p6m1HNYae4Ho= +golang.org/x/telemetry v0.0.0-20250105011419-6d9ea865d014/go.mod h1:Vee8NMPWD3JyoiukFTC6ehhS08hoyu5WYDePTtR6e6s= +golang.org/x/term v0.28.0 h1:/Ts8HFuMR2E6IP/jlo7QVLZHggjKQbhu/7H0LJFr3Gg= +golang.org/x/term v0.28.0/go.mod h1:Sw/lC2IAUZ92udQNf3WodGtn4k/XoLyZoh8v/8uiwek= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= +golang.org/x/tools v0.29.0 h1:Xx0h3TtM9rzQpQuR4dKLrdglAmCEN5Oi+P74JdhdzXE= +golang.org/x/tools v0.29.0/go.mod h1:KMQVMRsVxU6nHCFXrBPhDB8XncLNLM0lIy/F14RP588= diff --git a/internal/tags/inline.go b/internal/tags/inline.go index da31acf..a4d90cc 100644 --- a/internal/tags/inline.go +++ b/internal/tags/inline.go @@ -57,7 +57,7 @@ func inlineExtractTagsFromContent(content string) ([]string, string, error) { isShare := func(tag string) bool { return strings.HasPrefix(tag, "share:") } - parts := strings.Split(content, " ") + parts := strings.Fields(content) // First word must contain certain symbols to clarify as (inline) tags. if !inlineTagRE.MatchString(parts[0]) { return []string{}, content, nil @@ -77,7 +77,8 @@ func inlineExtractTagsFromContent(content string) ([]string, string, error) { } } } - return tags, strings.TrimSpace(strings.Join(parts[1:], " ")), nil + content = strings.TrimPrefix(content, parts[0]) + return tags, strings.TrimSpace(content), nil } return []string{}, content, nil diff --git a/internal/tags/inline_test.go b/internal/tags/inline_test.go index 9fafcf8..af089ed 100644 --- a/internal/tags/inline_test.go +++ b/internal/tags/inline_test.go @@ -17,6 +17,7 @@ func TestInlineExtractTagsToFilePath(t *testing.T) { "share:li,foo this is the main content": "./gosdir/foo.golang.rox.share:linkedin.foo.extracted.txt", "share:li:ma this is the main content": "./gosdir/foo.golang.rox.share:linkedin:mastodon.extracted.txt", "share:li:ma,now this is the main content": "./gosdir/foo.golang.rox.share:linkedin:mastodon.now.extracted.txt", + "share,soon this will be shared soon": "./gosdir/foo.golang.rox.share.soon.extracted.txt", } for content, expectedFilePath := range table { @@ -42,6 +43,11 @@ func TestInlineExtractTagsFromContent(t *testing.T) { "share:li,foo this is the main content": {"share:linkedin", "foo"}, "shar()e:li,foo this is the main content": {"shar()e:li", "foo"}, "share this post": {}, + "share,soon the main content here": {"share", "soon"}, + `share,soon + + the main content here + #foo`: {"share", "soon"}, } for input, expectedTags := range table { @@ -63,9 +69,9 @@ func TestInlineExtractTagsFromContent(t *testing.T) { } expectedMainContent := input - parts := strings.Split(input, " ") + parts := strings.Fields(input) if inlineTagRE.MatchString(parts[0]) { - expectedMainContent = strings.Join(parts[1:], " ") + expectedMainContent = strings.TrimPrefix(expectedMainContent, parts[0]) } if contentWithoutTags != strings.TrimSpace(expectedMainContent) { |
