From 369d72be24dccb98c8e8306ecc649539bf0e4dbd Mon Sep 17 00:00:00 2001 From: audetv Date: Sun, 4 Aug 2024 02:08:35 +0300 Subject: [PATCH 1/2] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20=D1=81=D1=87=D0=B5=D1=82=D1=87=D0=B8=D0=BA=20=D1=81?= =?UTF-8?q?=D0=B8=D0=BC=D0=B2=D0=BE=D0=BB=D0=BE=D0=B2=20=D0=B4=D0=BB=D1=8F?= =?UTF-8?q?=20utf-8=20=D0=BA=D0=B8=D1=80=D0=B8=D0=BB=D0=B8=D1=86=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- consumer/internal/infra/msgparser/msgparser.go | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/consumer/internal/infra/msgparser/msgparser.go b/consumer/internal/infra/msgparser/msgparser.go index d9bc39a..e4a4acd 100644 --- a/consumer/internal/infra/msgparser/msgparser.go +++ b/consumer/internal/infra/msgparser/msgparser.go @@ -206,17 +206,24 @@ func getInnerText(node *html.Node) string { // It takes a string input text and truncates it based on the maximum characters and words allowed. // Returns the truncated text. func (p *Parser) truncateText(text string) string { + count := utf8.RuneCountInString(text) words := strings.Split(text, " ") if len(words) <= p.maxWords { return text } truncatedText := "" + // TODO улучшить формулу расчета, т.к. символы "", ) и ( и др, установить какие еще. + // в рунах эти символы занимают 3 позиции, надо определять эти символы и пересчитывать count for _, word := range words { - if len(truncatedText)+len(word)+1 <= p.maxChars { + if utf8.RuneCountInString(truncatedText)+utf8.RuneCountInString(word)+1 <= p.maxChars+10 { truncatedText += word + " " } else { break } } - return truncatedText + "…" + + if utf8.RuneCountInString(truncatedText) < count { + return truncatedText + "…" + } + return truncatedText } From 1db7ae8dc4a91c3ae9d473cbd67e7faf23e3a1ba Mon Sep 17 00:00:00 2001 From: audetv Date: Sun, 4 Aug 2024 02:12:25 +0300 Subject: [PATCH 2/2] fixed gofmt --- consumer/internal/infra/msgparser/msgparser.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/consumer/internal/infra/msgparser/msgparser.go b/consumer/internal/infra/msgparser/msgparser.go index e4a4acd..c77ba30 100644 --- a/consumer/internal/infra/msgparser/msgparser.go +++ b/consumer/internal/infra/msgparser/msgparser.go @@ -212,7 +212,7 @@ func (p *Parser) truncateText(text string) string { return text } truncatedText := "" - // TODO улучшить формулу расчета, т.к. символы "", ) и ( и др, установить какие еще. + // TODO улучшить формулу расчета, т.к. символы "", ) и ( и др, установить какие еще. // в рунах эти символы занимают 3 позиции, надо определять эти символы и пересчитывать count for _, word := range words { if utf8.RuneCountInString(truncatedText)+utf8.RuneCountInString(word)+1 <= p.maxChars+10 {