mirror of
https://github.com/therootcompany/golib.git
synced 2026-01-28 07:28:14 +00:00
67 lines
2.3 KiB
Markdown
67 lines
2.3 KiB
Markdown
# [textvars](https://github.com/therootcompany/golib/tree/main/text/textvars)
|
|
|
|
[](https://pkg.go.dev/github.com/therootcompany/golib/text/textvars)
|
|
|
|
Text replacement functions that handle the empty string / trailing comma problem in a sane way: \
|
|
(cuts the character to the left when empty)
|
|
|
|
Example: Leading space:
|
|
|
|
```go
|
|
textvars.ReplaceVar(`Hey {Name}!`, "Name", "Joe")
|
|
// "Hey Joe!"
|
|
|
|
textvars.ReplaceVar(`Hey {Name}!`, "Name", "")
|
|
// "Hey!" 👍
|
|
|
|
strings.ReplaceAll(`Hey {Name}!`, "{Name}", "")
|
|
// "Hey !" 🫤
|
|
```
|
|
|
|
Example: Leading comma:
|
|
|
|
```go
|
|
textvars.ReplaceVar(`Apples,{Fruit},Bananas`, "Fruit", "Oranges")
|
|
// "Apples,Oranges,Bananas"
|
|
|
|
textvars.ReplaceVar(`Apples,{Fruit},Bananas`, "Fruit", "")
|
|
// "Apples,Bananas" 👍
|
|
|
|
strings.ReplaceAll(`Apples,{Fruit},Bananas`, "{Fruit}", "")
|
|
// "Apples,,Bananas" 🫤
|
|
```
|
|
|
|
Example: Multiple Vars
|
|
|
|
```go
|
|
tmpl := `{#}. {Name}`
|
|
vars := map[string]string{
|
|
"#": "1",
|
|
"Name": "Joe",
|
|
}
|
|
text, err := textvars.ReplaceVars(tmpl, vars)
|
|
// "1. Joe"
|
|
// errors if any {...} are left over
|
|
```
|
|
|
|
**Note**: This is the sort of thing that's it's probably better to copy and paste rather than to have as a dependency, but I wanted to have it for myself as a convenience in my own repo of tools, so here it is.
|
|
|
|
## Other Uses
|
|
|
|
It seemed like an okay idea at the time, so I also baked in some other uses:
|
|
|
|
| Syntax | Example | "Joe" | Empty ("") | Comment |
|
|
| ---------- | -------------- | ----------- | ---------- | ----------------------------- |
|
|
| `{Name}` | `Hey {Name}!` | `Hey Joe!` | `Hey!` | cuts left character if empty |
|
|
| `{Name-}` | `1,{Name-},3` | `1,Joe,3` | `1,3` | cuts right character if empty |
|
|
| `{-Name-}` | `Hey! {Name}!` | `Hey! Joe!` | `Hey!` | cuts left and right if empty |
|
|
| `{+Name}` | `Name:{+Name}` | `Name:Joe` | `Name:` | keeps left character always |
|
|
|
|
However, I haven't actually had the use case for those yet and you probably won't either... so don't use what you don't need. 🙃
|
|
|
|
I DO NOT plan on making a robust template system. I was only interested in solving the _leading space_ / _trailing comma_ problem for [sendsms](https://github.com/therootcompany/golib/tree/main/cmd/sendsms).
|
|
|
|
# Legal
|
|
|
|
CC0-1.0 (Public Domain)
|