XOOPS 2.5.6  Final
 All Classes Namespaces Files Functions Variables Pages
StringHashParser.php
Go to the documentation of this file.
1 <?php
2 
29 {
30 
31  public $default = 'ID';
32 
36  public function parseFile($file) {
37  if (!file_exists($file)) return false;
38  $fh = fopen($file, 'r');
39  if (!$fh) return false;
40  $ret = $this->parseHandle($fh);
41  fclose($fh);
42  return $ret;
43  }
44 
48  public function parseMultiFile($file) {
49  if (!file_exists($file)) return false;
50  $ret = array();
51  $fh = fopen($file, 'r');
52  if (!$fh) return false;
53  while (!feof($fh)) {
54  $ret[] = $this->parseHandle($fh);
55  }
56  fclose($fh);
57  return $ret;
58  }
59 
68  protected function parseHandle($fh) {
69  $state = false;
70  $single = false;
71  $ret = array();
72  do {
73  $line = fgets($fh);
74  if ($line === false) break;
75  $line = rtrim($line, "\n\r");
76  if (!$state && $line === '') continue;
77  if ($line === '----') break;
78  if (strncmp('--#', $line, 3) === 0) {
79  // Comment
80  continue;
81  } elseif (strncmp('--', $line, 2) === 0) {
82  // Multiline declaration
83  $state = trim($line, '- ');
84  if (!isset($ret[$state])) $ret[$state] = '';
85  continue;
86  } elseif (!$state) {
87  $single = true;
88  if (strpos($line, ':') !== false) {
89  // Single-line declaration
90  list($state, $line) = explode(':', $line, 2);
91  $line = trim($line);
92  } else {
93  // Use default declaration
94  $state = $this->default;
95  }
96  }
97  if ($single) {
98  $ret[$state] = $line;
99  $single = false;
100  $state = false;
101  } else {
102  $ret[$state] .= "$line\n";
103  }
104  } while (!feof($fh));
105  return $ret;
106  }
107 
108 }
109 
110 // vim: et sw=4 sts=4