1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- Substitution Expressions (subex)
- ================================
- A *subex* (*Substitution Expression*) represents an advanced string
- substitution. In contrast to a `regex`:idx: which deals with string analysis, a
- *subex* deals with string synthesis.
- Thanks to its conditional construct ``$[0|1|2|else]`` it supports
- `internationalization`:idx: of format string literals quite well.
- ===================== =====================================================
- Notation meaning
- ===================== =====================================================
- ``$#`` use first or next argument
- ``$name`` use named argument, you can wrap the named argument
- in curly braces (eg. ``${name}``) to separate it from
- the next characters.
- ``$$`` produces a single ``$``
- ``$1`` use first argument
- ``$-1`` use last argument
- ``${1..3}`` use arguments 1 to 3
- ``${..}`` use all arguments
- ``$*`` use all arguments (same as ``${..}``)
- ``${#..}`` use all remaining arguments
- ``${..-2}`` use all arguments except the last argument
- ``${$1}`` use argument X where ``X = parseInt(arg[1])``
- ``${$1..$2}`` use arguments X to Y where ``X = parseInt(arg[1])``
- and ``Y = parseInt(arg[2])``
- ``$','{1..3}`` use arguments 1 to 3 and join them with ','
- ``$','80c'\n'{..}`` use all arguments, join them with ','. Insert '\\n'
- before the resulting string exceeds 80 chars.
- ``$','8i'\n'{..}`` use all arguments, join them with ','. Insert '\\n'
- after every 8th item.
- ``$' '~{1..3}`` use arguments 1 to 3 with a leading space if the
- concatenation of ``1..3`` is not the empty string
- ``$[zero|one|def]1`` use ``X = parseInt(arg[1])`` to determine which
- branch to use. If ``X == 0`` the 'zero' branch is
- selected, if ``X == 1`` the 'one' branch is
- selected, etc. Otherwise the 'def' branch is
- selected. ``$x`` is interpreted in branches too.
- If a branch needs to contain ``|``, ``]`` put
- them in single quotes. To produce a verbatim single
- quote, use ``''``.
- ===================== =====================================================
- Examples
- ========
- .. code-block:: nim
- subex"$1($', '{2..})" % ["f", "a", "b", "c"] == "f(a, b, c)"
- subex"$1 $[files|file|files]{1} copied" % ["1"] == "1 file copied"
- subex"$['''|'|''''|']']#" % "0" == "'|"
- subex("type\n TEnum = enum\n $', '40c'\n '{..}") % [
- "fieldNameA", "fieldNameB", "fieldNameC", "fieldNameD"]
|