Implemented switch statement logic in Comanche layout parser.
This commit is contained in:
parent
40c8549cf5
commit
0be74c6551
@ -18,7 +18,49 @@ class Comanche {
|
|||||||
$s = str_replace($mtch[0], '', $s);
|
$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);
|
$cnt = preg_match_all("/\[if (.*?)\](.*?)\[else\](.*?)\[\/if\]/ism", $s, $matches, PREG_SET_ORDER);
|
||||||
if($cnt) {
|
if($cnt) {
|
||||||
foreach($matches as $mtch) {
|
foreach($matches as $mtch) {
|
||||||
|
Reference in New Issue
Block a user