USAGE

  jf TEMPLATE [VALUE]... [NAME=VALUE]...

  Where TEMPLATE may contain the following placeholders:

  `%q`  quoted and safely escaped JSON string.
  `%s`  JSON values other than string.
  `%v`  the `jf` version number.
  `%%`  a literal `%` character.

  And [VALUE]... [NAME=VALUE]... are the values for the placeholders.

SYNTAX

  `%s`, `%q`                             posiitonal placeholder.
  `%(NAME)s`, `%(NAME)q`                 named placeholder.
  `%(NAME=DEFAULT)s`, `%(NAME=DEFAULT)q` placeholder with default value.
  `%(NAME)?s`, `%(NAME)?q`               placeholder with optional value.
  `%*s`, `%*q`                           expand positional values as array items.
  `%**s`, `%**q`                         expand positional values as key value pairs.
  `%(NAME)*s`, `%(NAME)*q`               expand named values as array items.
  `%(NAME)**s`, `%(NAME)**q`             expand named values as key value pairs.

RULES

  * Pass values for positional placeholders in the same order as in the template.
  * Pass values for named placeholders using `NAME=VALUE` syntax.
  * Pass values for named array items using `NAME=ITEM_N` syntax.
  * Pass values for named key value pairs using `NAME=KEY_N NAME=VALUE_N` syntax.
  * Optional placeholders default to empty string, which is considered as null.
  * Do not declare or pass positional placeholders or values after named ones.
  * Expandable positional placeholder should be the last placeholder in a template.

EXAMPLES

  $ jf %s 1
  - 1

  $ jf %q 1
  - "1"

  $ jf [%*s] 1 2 3
  - [1,2,3]

  $ jf {%**q} one 1 two 2 three 3
  - {"one":"1","two":"2","three":"3"}

  $ jf "{%q: %(value=default)q, %(bar)**q}" foo value=bar bar=biz bar=baz
  - {"foo":"bar","biz":"baz"}

  $ jf "{str_or_bool: %(str)?q %(bool)?s, optional: %(optional)?q}" str=true
  - {"str_or_bool":"true","optional":null}

  $ jf '{1: %s, two: %q, 3: %(3)s, four: %(four=4)q, "%%": %(pct)q}' 1 2 3=3 pct=100%
  - {"1":1,"two":"2","3":3,"four":"4","%":"100%"}