aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorroot <root@vworld>2017-05-08 20:55:31 -0400
committerroot <root@vworld>2017-05-08 20:55:31 -0400
commit0be74c655188d02c7242fd927d356669c268ab3d (patch)
treeb78e6f106d9f69823bb96abb321c740d32788c2f
parent40c8549cf5438aa12db68c6ec2c98493f6707bda (diff)
downloadvolse-hubzilla-0be74c655188d02c7242fd927d356669c268ab3d.tar.gz
volse-hubzilla-0be74c655188d02c7242fd927d356669c268ab3d.tar.bz2
volse-hubzilla-0be74c655188d02c7242fd927d356669c268ab3d.zip
Implemented switch statement logic in Comanche layout parser.
-rw-r--r--Zotlabs/Render/Comanche.php44
1 files changed, 43 insertions, 1 deletions
diff --git a/Zotlabs/Render/Comanche.php b/Zotlabs/Render/Comanche.php
index 5c1ca7d10..beee9796e 100644
--- a/Zotlabs/Render/Comanche.php
+++ b/Zotlabs/Render/Comanche.php
@@ -18,7 +18,49 @@ class Comanche {
$s = str_replace($mtch[0], '', $s);
}
}
-
+
+ /*
+ * This section supports the "switch" statement of the form given by the following
+ * example. The [default][/default] block must be the last in the arbitrary
+ * list of cases. The first case that matches the switch variable is used
+ * and the rest are not evaluated.
+ *
+ * [switch observer.language]
+ * [case de]
+ * [block]german-content[/block]
+ * [/case]
+ * [case es]
+ * [block]spanish-content[/block]
+ * [/case]
+ * [default]
+ * [block]english-content[/block]
+ * [/default]
+ * [/switch]
+ */
+
+ $cnt = preg_match_all("/\[switch (.*?)\](.*?)\[default\](.*?)\[\/default\]\s*\[\/switch\]/ism", $s, $matches, PREG_SET_ORDER);
+ if($cnt) {
+ foreach($matches as $mtch) {
+ $switch_done = 0;
+ $switch_var = $this->get_condition_var($mtch[1]);
+ $default = $mtch[3];
+ $cases = array();
+ $cntt = preg_match_all("/\[case (.*?)\](.*?)\[\/case\]/ism", $mtch[2], $cases, PREG_SET_ORDER);
+ if($cntt) {
+ foreach($cases as $case) {
+ if($case[1] === $switch_var) {
+ $switch_done = 1;
+ $s = str_replace($mtch[0], $case[2], $s);
+ break;
+ }
+ }
+ if($switch_done === 0) {
+ $s = str_replace($mtch[0], $default, $s);
+ }
+ }
+ }
+ }
+
$cnt = preg_match_all("/\[if (.*?)\](.*?)\[else\](.*?)\[\/if\]/ism", $s, $matches, PREG_SET_ORDER);
if($cnt) {
foreach($matches as $mtch) {