}
-function is_sub_template($piece) {
+function is_sub_template(&$piece) {
return is_array($piece) and $piece['pieces'];
}
+function is_value_slot(&$piece) {
+ return is_array($piece) and !$piece['pieces'];
+}
+
# Return a hash containing the top-level sub-templates of tem.
function top_sub_templates($tem, $is_sub = 'is_sub_template') {
function_exists($is_sub) or die("no such function '$is_sub'.");
return $subs;
}
-# Replace top-level values in $main with top-level templates from $tem.
-function merge_templates($main, $tem) {
- $out = array('name' => $main['name'], 'pieces' => array());
-
- $subs = top_sub_templates($tem);
-
- foreach($main['pieces'] as $piece) {
- $sub = $subs[$piece['name']];
- if(is_array($piece) and !$piece['pieces'] and $sub and $sub['args'][0] != 'hide') {
- $piece = $subs[$piece['name']];
+# merge $subs (sub_templates) into variables in $main (template)
+function merge_sub_templates(&$main, &$subs) {
+ foreach($main['pieces'] as &$piece) {
+ if(is_array($piece)) { # not just text
+ if($piece['pieces']) {
+ # a sub-template in main
+ merge_sub_templates($piece, $subs);
+ } else {
+ # a value-slot in main
+ $sub = $subs[$piece['name']];
+ if($sub and $sub['args'][0] != 'hide') {
+ $piece = $subs[$piece['name']];
+ $piece['parent'] =& $main;
+ }
+ }
}
- $out['pieces'][] = $piece;
}
return $out;
}
+# Replace values in $main with top-level templates from $tem.
+function merge_templates(&$main, &$tem) {
+ $subs = top_sub_templates($tem);
+
+ merge_sub_templates($main, $subs);
+}
+
# tem_auto functions
# merge the data arrays and template trees (new style)
$this->data = array_merge($this->data, $tem->data);
- $this->template = merge_templates($this->template, $tem->template);
+ merge_templates($this->template, $tem->template);
}
# see merge() above