-# Convert value to array of hashes for use in sub-template expansion.
-# This adds flexibility to how you represent your data.
-function tem_value_as_rows($value) {
- if(is_array($value)) {
- # numeric keys, is already array of arrays -- expand sub-template for each.
- if(array_key_exists(0, $value)) return $value;
- # key/value pairs -- expand sub-template once.
- else return array($value);
- } elseif($value) {
- # value -- expand sub-template once using only parent values
- return array(array());
- } else {
- # empty value -- don't expand sub-template
- return array();
+ function prepend($key, $value) {
+ $this->data[$key] = $value . $this->data[$key];
+ }
+
+ function clear($key) {
+ unset($this->data[$key]);
+ }
+
+ function get($key) {
+ if (isset($this->data[$key])) {
+ return $this->data[$key];
+ } else {
+ return;
+ }
+ }
+
+ function show($name) {
+ $tem = tem_is_old_sub($name, $this->template);
+ if($tem) {
+ if (!isset($this->data[$name])) {
+ $this->data[$name] = '';
+ }
+ $this->data[$name] .= fill_template($tem, $this->data);
+ }
+ }
+
+ function show_separated($name) {
+ if($this->get($name)) {
+ $this->show($name . '_sep');
+ }
+ $this->show($name);
+ }
+
+ function load_str($str) {
+ $this->template =& parse_template($str);
+ }
+
+ function load($filename) {
+ $this->template =& parse_template_file($filename);
+ }
+
+ function run($tem = false) {
+ if($tem) {
+ if(strlen($tem < 150 && file_exists($tem))) $this->load($tem);
+ else $this->load_str($tem);
+ }
+
+ return fill_template($this->template, $this->data);
+ }
+
+ function output($tem = false) {
+ print($this->run($tem));
+ }
+
+ # merge top-level sub-templates of $tem (object) into $this,
+ # supporting both new and old semantics.
+ function merge($tem) {
+ # append expansions to $this->data (old style)
+
+ $subs = $tem->top_subs('is_shown_sub_template');
+ if($subs) foreach($subs as $name => $val) {
+ $this->append($name, $val);
+ unset($tem->data[$name]); # so array_merge() won't overwrite things
+ }
+
+ # merge the data arrays and template trees (new style)
+ $this->data = array_merge($this->data, $tem->data);
+ merge_templates($this->template, $tem->template);
+ }
+
+ # see merge() above
+ function merge_file($filename) {
+ $other_tem = new tem();
+ $other_tem->load($filename);
+ $this->merge($other_tem);
+ }
+
+ function top_sub_names($is_sub = 'is_sub_template') {
+ return array_keys(top_sub_templates($this->template, $is_sub));
+ }
+
+ function top_subs($is_sub = 'is_sub_template') {
+ $ret = array();
+ $names = $this->top_sub_names($is_sub);
+ foreach($names as $name) {
+ $ret[$name] = $this->get($name);
+ }
+ return $ret;
+ }
+
+ # old name for show (deprecated)
+ function sub($name) {
+ $this->show($name);