[orx-fcurve] Replace |repeat-block| with (repeat-block)
This commit is contained in:
@@ -178,24 +178,24 @@ For example: `M0 L{3 * 4},4` evaluates to `M0 L12,4`.
|
|||||||
## Repetitions
|
## Repetitions
|
||||||
|
|
||||||
EFCurves add support for repetitions. Repetitions are expanded by replacing
|
EFCurves add support for repetitions. Repetitions are expanded by replacing
|
||||||
occurrences of `|<text-to-repeat>|[<number-of-repetitions>]` with `number-of-repetitions` copies
|
occurrences of `(<text-to-repeat>)[<number-of-repetitions>]` with `number-of-repetitions` copies
|
||||||
of `text-to-repeat`.
|
of `text-to-repeat`.
|
||||||
|
|
||||||
For example:
|
For example:
|
||||||
* `M0 |h1 m1|[3]` expands to `M0 h1 m1 h1 m1 h1 m1`
|
* `M0 (h1 m1)[3]` expands to `M0 h1 m1 h1 m1 h1 m1`
|
||||||
* `M0 |h1 m1|[0]` expands to `M0`
|
* `M0 (h1 m1)[0]` expands to `M0`
|
||||||
|
|
||||||
### Nested repetitions
|
### Nested repetitions
|
||||||
|
|
||||||
Repetitions can be nested.
|
Repetitions can be nested.
|
||||||
|
|
||||||
For example `|M0 |h1 m1|[3]|[2]` expands to `M0 h1 m1 h1 m1 h1 m1 M0 h1 m1 h1 m1 h1 m1`.
|
For example `(M0 (h1 m1)[3])[2]` expands to `M0 h1 m1 h1 m1 h1 m1 M0 h1 m1 h1 m1 h1 m1`.
|
||||||
|
|
||||||
### Interaction between repetitions and expressions
|
### Interaction between repetitions and expressions
|
||||||
|
|
||||||
`M0 |H{it + 1} m1][3]` expands to `M0 H1 m1 H2 m1 H3 m1`
|
`M0 (H{it + 1} m1)[3]` expands to `M0 H1 m1 H2 m1 H3 m1`
|
||||||
|
|
||||||
`M0 |H{index + 1} m{it}]{1.2, 1.3, 1.4}` expands to `M0 H1 m1.2 H2 m1.3 H3 m1.4`
|
`M0 (H{index + 1} m{it}){1.2, 1.3, 1.4}` expands to `M0 H1 m1.2 H2 m1.3 H3 m1.4`
|
||||||
|
|
||||||
|
|
||||||
# References
|
# References
|
||||||
|
|||||||
@@ -8,17 +8,18 @@ import org.openrndr.extra.expressions.evaluateExpression
|
|||||||
* @param constants a map of constants that is passed to [evaluateExpression]
|
* @param constants a map of constants that is passed to [evaluateExpression]
|
||||||
*/
|
*/
|
||||||
fun efcurve(ef: String, constants: Map<String, Double> = emptyMap()): String {
|
fun efcurve(ef: String, constants: Map<String, Double> = emptyMap()): String {
|
||||||
val expression = Regex("\\{([^_]+)\\}")
|
|
||||||
|
|
||||||
// IntelliJ falsely reports a redundant escape character. the escape character is required when running the regular
|
// IntelliJ falsely reports a redundant escape character. the escape character is required when running the regular
|
||||||
// expression on a javascript target. Removing the escape character will result in a `Lone quantifier brackets`
|
// expression on a javascript target. Removing the escape character will result in a `Lone quantifier brackets`
|
||||||
// syntax error.
|
// syntax error.
|
||||||
|
|
||||||
@Suppress("RegExpRedundantEscape")
|
@Suppress("RegExpRedundantEscape")
|
||||||
val repetition = Regex("""\|([^|]+)\|\[([^\[\]]+)\]""")
|
val expression = Regex("\\{([^{}]+)\\}")
|
||||||
|
|
||||||
@Suppress("RegExpRedundantEscape")
|
@Suppress("RegExpRedundantEscape")
|
||||||
val list = Regex("\\|([^|]+)\\|\\{([^\\[\\]]+)\\}")
|
val repetition = Regex("""\(([^()]+)\)\[([^\[\]]+)\]""")
|
||||||
|
|
||||||
|
@Suppress("RegExpRedundantEscape")
|
||||||
|
val list = Regex("\\(([^()]+)\\)\\{([^\\[\\]]+)\\}")
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* perform comment substitution
|
* perform comment substitution
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import kotlin.test.assertEquals
|
|||||||
class TestEFCurve {
|
class TestEFCurve {
|
||||||
@Test
|
@Test
|
||||||
fun comments() {
|
fun comments() {
|
||||||
val text = """M1 |h5 m3|{
|
val text = """M1 (h5 m3){
|
||||||
|10.3 # toch wel handig zo'n comment
|
|10.3 # toch wel handig zo'n comment
|
||||||
|11.2
|
|11.2
|
||||||
|14.5
|
|14.5
|
||||||
@@ -21,13 +21,13 @@ class TestEFCurve {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun listExpansion() {
|
fun listExpansion() {
|
||||||
assertEquals("M0 L1.0, ${3.0} L1.0, ${6.0}", efcurve("M0 |L1.0, {it}|{3, 6}"))
|
assertEquals("M0 L1.0, ${3.0} L1.0, ${6.0}", efcurve("M0 (L1.0, {it}){3, 6}"))
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun repetition() {
|
fun repetition() {
|
||||||
assertEquals("M0 L1.0, 3.0 L1.0, 3.0", efcurve("M0 |L1.0, 3.0|[2]"))
|
assertEquals("M0 L1.0, 3.0 L1.0, 3.0", efcurve("M0 (L1.0, 3.0)[2]"))
|
||||||
assertEquals("M0 L1.0, ${0.0} L1.0, ${1.0}", efcurve("M0 |L1.0, {it}|[2]"))
|
assertEquals("M0 L1.0, ${0.0} L1.0, ${1.0}", efcurve("M0 (L1.0, {it})[2]"))
|
||||||
assertEquals("M0 L1.0, ${0.0} L1.0, ${1.0} L1.0, ${0.0} L1.0, ${1.0} L1.0, ${0.0} L1.0, ${1.0}", efcurve("M0 ||L1.0, {it}|[2]|[3]"))
|
assertEquals("M0 L1.0, ${0.0} L1.0, ${1.0} L1.0, ${0.0} L1.0, ${1.0} L1.0, ${0.0} L1.0, ${1.0}", efcurve("M0 ((L1.0, {it})[2])[3]"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user