generated from VLADIMIR/template
add modules
This commit is contained in:
@@ -0,0 +1,6 @@
|
|||||||
|
package cleaner
|
||||||
|
|
||||||
|
type ICleaner interface {
|
||||||
|
ClearCode(code string) string
|
||||||
|
ClearText(text string) string
|
||||||
|
}
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
package cleaner
|
||||||
|
|
||||||
|
import (
|
||||||
|
"regexp"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
replaceMap = map[string]string{
|
||||||
|
"a": "а",
|
||||||
|
"e": "е",
|
||||||
|
"o": "о",
|
||||||
|
"c": "с",
|
||||||
|
"p": "р",
|
||||||
|
"x": "х",
|
||||||
|
"y": "у",
|
||||||
|
"k": "к",
|
||||||
|
"m": "м",
|
||||||
|
"t": "т",
|
||||||
|
"h": "н",
|
||||||
|
"b": "в",
|
||||||
|
"u": "и",
|
||||||
|
}
|
||||||
|
re = regexp.MustCompile(`\(\[[a-zA-Zа-яА-Я\d-]+\]\)`)
|
||||||
|
)
|
||||||
|
|
||||||
|
type service struct{}
|
||||||
|
|
||||||
|
func NewCleaner() ICleaner {
|
||||||
|
return &service{}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *service) ClearCode(code string) string {
|
||||||
|
code = strings.TrimPrefix(code, "(")
|
||||||
|
code = strings.TrimPrefix(code, "[")
|
||||||
|
code = strings.TrimSuffix(code, ")")
|
||||||
|
code = strings.TrimSuffix(code, "]")
|
||||||
|
code = strings.ToLower(code)
|
||||||
|
code = strings.TrimSpace(code)
|
||||||
|
code = strings.ReplaceAll(code, "-", "")
|
||||||
|
for latin, cyrillic := range replaceMap {
|
||||||
|
code = strings.ReplaceAll(code, latin, cyrillic)
|
||||||
|
}
|
||||||
|
return code
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *service) ClearText(text string) string {
|
||||||
|
return strings.TrimSpace(re.ReplaceAllString(text, ""))
|
||||||
|
}
|
||||||
@@ -0,0 +1,72 @@
|
|||||||
|
package cleaner
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func Test_service_ClearCode(t *testing.T) {
|
||||||
|
tests := []struct {
|
||||||
|
code string
|
||||||
|
want string
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
code: "ы",
|
||||||
|
want: "ы",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
code: "Ы",
|
||||||
|
want: "ы",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
code: "Ы-1",
|
||||||
|
want: "ы1",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
code: "[Ы]",
|
||||||
|
want: "ы",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
code: "([Ы])",
|
||||||
|
want: "ы",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
for _, tt := range tests {
|
||||||
|
t.Run(fmt.Sprintf("%s->%s", tt.code, tt.want), func(t *testing.T) {
|
||||||
|
var s service
|
||||||
|
got := s.ClearCode(tt.code)
|
||||||
|
if got != tt.want {
|
||||||
|
t.Errorf("ClearCode() = %v, want %v", got, tt.want)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func Test_service_ClearText(t *testing.T) {
|
||||||
|
tests := []struct {
|
||||||
|
text string
|
||||||
|
want string
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
text: "text",
|
||||||
|
want: "text",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: "text ([Ы])",
|
||||||
|
want: "text",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: "text ([Ы-3])",
|
||||||
|
want: "text",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
for _, tt := range tests {
|
||||||
|
t.Run(tt.text, func(t *testing.T) {
|
||||||
|
var s service
|
||||||
|
got := s.ClearText(tt.text)
|
||||||
|
if got != tt.want {
|
||||||
|
t.Errorf("ClearText() = %v, want %v", got, tt.want)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
package formatter
|
||||||
|
|
||||||
|
type IFormatter interface {
|
||||||
|
FormatText(text string) string
|
||||||
|
FormatString(text string) string
|
||||||
|
}
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
package formatter
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bufio"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
type service struct{}
|
||||||
|
|
||||||
|
func NewFormatter() IFormatter {
|
||||||
|
return &service{}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *service) FormatText(text string) string {
|
||||||
|
scanner := bufio.NewScanner(strings.NewReader(text))
|
||||||
|
|
||||||
|
scanner.Split(bufio.ScanLines)
|
||||||
|
|
||||||
|
lines := []string{}
|
||||||
|
for scanner.Scan() {
|
||||||
|
lines = append(lines, scanner.Text())
|
||||||
|
}
|
||||||
|
|
||||||
|
var res strings.Builder
|
||||||
|
for i, line := range lines {
|
||||||
|
l := strings.TrimSpace(line)
|
||||||
|
if strings.HasPrefix(l, "--") {
|
||||||
|
l = strings.Replace(l, "--", "—", 1)
|
||||||
|
}
|
||||||
|
if i == 0 && strings.HasPrefix(l, "—") {
|
||||||
|
res.WriteString(" ")
|
||||||
|
}
|
||||||
|
if i > 0 {
|
||||||
|
res.WriteString("\n")
|
||||||
|
if len(l) > 0 {
|
||||||
|
res.WriteString(" ")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
res.WriteString(l)
|
||||||
|
}
|
||||||
|
return res.String()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *service) FormatString(text string) string {
|
||||||
|
l := strings.TrimSpace(text)
|
||||||
|
if strings.HasPrefix(l, "--") {
|
||||||
|
l = strings.Replace(l, "--", "—", 1)
|
||||||
|
}
|
||||||
|
return l
|
||||||
|
}
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
package formatter
|
||||||
|
|
||||||
|
import "testing"
|
||||||
|
|
||||||
|
func Test_service_FormatText(t *testing.T) {
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
text string
|
||||||
|
want string
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "Простой текст",
|
||||||
|
text: "Привет",
|
||||||
|
want: "Привет",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Текст с двумя абзацами",
|
||||||
|
text: "Привет\nМир",
|
||||||
|
want: "Привет\n Мир",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Прямая речь",
|
||||||
|
text: "— Привет",
|
||||||
|
want: " — Привет",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Прямая речь через 2 минуса",
|
||||||
|
text: "-- Привет",
|
||||||
|
want: " — Привет",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
for _, tt := range tests {
|
||||||
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
var s service
|
||||||
|
got := s.FormatText(tt.text)
|
||||||
|
if got != tt.want {
|
||||||
|
t.Errorf("FormatText() = %v, want %v", got, tt.want)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user