Compare commits

..

No commits in common. "207a2b2a898cff427562fd1c68f9e8d2d28b0fe6" and "70cec103a716721011f543d4957284713460877c" have entirely different histories.

2 changed files with 11 additions and 107 deletions

View file

@ -1,82 +0,0 @@
# 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,5 +1,4 @@
import sys as _sys import sys as _sys
import re as _re
import json as _json import json as _json
import yaml as _yaml import yaml as _yaml
import argparse as _argparse import argparse as _argparse
@ -23,29 +22,23 @@ def string_coin(
options = ( options = (
{ {
"character_open": "{{", "character_open": "{{",
"character_close": "}}", "character_close": "}}"
"ignore_whitespaces": True,
} }
| |
(options or {}) (options or {})
) )
result = template result = template
for (key, value, ) in arguments.items(): for (key, value, ) in arguments.items():
pattern = ( result = result.replace(
_re.escape(options["character_open"]) (
+ "%s%s%s"
("\s*" if options["ignore_whitespaces"] else "") % (
+ options["character_open"],
_re.escape(key) key,
+ options["character_close"],
("\s*" if options["ignore_whitespaces"] else "")
+
_re.escape(options["character_close"])
) )
result = _re.sub( ),
pattern, value
value,
result
) )
return result return result
@ -161,12 +154,6 @@ def main(
metavar = "<character-close>", metavar = "<character-close>",
help = "placeholder closing character", 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() args = argument_parser.parse_args()
## exec ## exec
@ -182,7 +169,6 @@ def main(
{ {
"character_open": args.character_open, "character_open": args.character_open,
"character_close": args.character_close, "character_close": args.character_close,
"ignore_whitespaces": (not args.heed_whitespaces),
} }
) )
_sys.stdout.write(content_out) _sys.stdout.write(content_out)