You are here

function _patterns_parse_tag in Patterns 5

Same name and namespace in other branches
  1. 6.2 patterns.module \_patterns_parse_tag()
  2. 6 patterns.module \_patterns_parse_tag()

Recurse through the values of a parsed xml file to create a multi-dimensional representation of the data.

1 call to _patterns_parse_tag()
patterns_from_source in ./patterns.module
Create a pattern from an XML data source

File

./patterns.module, line 733
Enables extremely simple adding/removing features to your site with minimal to no configuration

Code

function _patterns_parse_tag($data, $index) {
  $pattern = array();
  while ($current = $data[$index]) {
    $type = $current['type'];
    foreach ((array) $current['attributes'] as $key => $value) {
      $current[strtolower($key)] = $value;
    }
    $current['tag'] = strtolower($current['tag']);
    unset($current['type'], $current['level'], $current['attributes']);
    if (!trim($current['value']) && $current['value'] != "0") {
      unset($current['value']);
    }
    switch ($type) {
      case 'open':
        $index++;
        $current += _patterns_parse_tag($data, &$index);
        $pattern[] = $current;
        break;
      case 'close':
        $index++;
        return $pattern;
        break;
      case 'complete':

        // In order to support more complex/non-standard features we can use serialized data
        if ($current['attributes']['serialized']) {
          $value = unserialize($current['value']);
          if (isset($value)) {
            $current['value'] = $value;
          }
        }

        // This enables tags like <blog /> to turn into array('blog' => 'blog')
        // which is useful for checkbox/select type forms
        if (!isset($current['value'])) {
          $current['value'] = $current['tag'];
        }
        $pattern[] = $current;
        break;
    }
    $index++;
  }
  return $pattern;
}