Compare commits

..

2 commits

Author SHA1 Message Date
fenris 207a2b2a89 [mod] Schalter für Beachtung von Leerzeichen 2025-07-17 14:15:27 +02:00
fenris cad4cf931a [add] readme 2025-07-17 14:15:04 +02:00
2 changed files with 107 additions and 11 deletions

82
readme.md Normal file
View file

@ -0,0 +1,82 @@
# coin
## Description
transforms a template string to its refined version by substituting its placeholders with concrete values
## Building
### Requirements
- shell interpreter
### Instructions
- execute `tools/build`
## Installation
### Requirements
- shell interpreter
### Instructions
- (as `root`) execute `tools/install`
## Usage
### Requirements
- Python 3 interpreter
### Examples
#### basic
```
echo '{{flowers}} are {{color}}' | coin -a 'flowers:roses' -a 'color:red'
# roses are red
```
The same result can be produced by using multiple `coin` calls:
```
echo '{{flowers}} are {{color}}' | coin -a 'flowers:roses' | coin -a 'color:red'
```
In some contextes curly brackets might might be reserved or not available for other reasons. This can be mitigated by using different placeholder indicators:
```
echo '<<flowers>> are <<color>>' | coin -o '<<' -c '>>' -a 'flowers:roses' -a 'color:red'
```
#### file arguments
```
echo -n "cornflowers" > /tmp/flowers.txt
echo -n "blue" > /tmp/color.txt
echo '{{flowers}} are {{color}}' | coin -a 'flowers:@/tmp/flowers.txt' -a 'color:@/tmp/color.txt'
# cornflowers are blue
```
#### data file
```
echo -e "flowers: daffodills\ncolor: yellow" > /tmp/data.yaml
echo '{{flowers}} are {{color}}' | coin -d /tmp/data.yaml
# daffodills are yellow
```

View file

@ -1,4 +1,5 @@
import sys as _sys
import re as _re
import json as _json
import yaml as _yaml
import argparse as _argparse
@ -22,23 +23,29 @@ def string_coin(
options = (
{
"character_open": "{{",
"character_close": "}}"
"character_close": "}}",
"ignore_whitespaces": True,
}
|
(options or {})
)
result = template
for (key, value, ) in arguments.items():
result = result.replace(
(
"%s%s%s"
% (
options["character_open"],
key,
options["character_close"],
)
),
value
pattern = (
_re.escape(options["character_open"])
+
("\s*" if options["ignore_whitespaces"] else "")
+
_re.escape(key)
+
("\s*" if options["ignore_whitespaces"] else "")
+
_re.escape(options["character_close"])
)
result = _re.sub(
pattern,
value,
result
)
return result
@ -154,6 +161,12 @@ def main(
metavar = "<character-close>",
help = "placeholder closing character",
)
argument_parser.add_argument(
"-w",
"--heed-whitespaces",
action = "store_true",
help = "whether whitespace characters in the template string shall be heeded, i.e. not be ignored",
)
args = argument_parser.parse_args()
## exec
@ -169,6 +182,7 @@ def main(
{
"character_open": args.character_open,
"character_close": args.character_close,
"ignore_whitespaces": (not args.heed_whitespaces),
}
)
_sys.stdout.write(content_out)