ILIAS  Release_5_0_x_branch Revision 61816
 All Data Structures Namespaces Files Functions Variables Groups Pages
StringHashParser.php
Go to the documentation of this file.
1 <?php
2 
29 {
30 
34  public $default = 'ID';
35 
41  public function parseFile($file)
42  {
43  if (!file_exists($file)) {
44  return false;
45  }
46  $fh = fopen($file, 'r');
47  if (!$fh) {
48  return false;
49  }
50  $ret = $this->parseHandle($fh);
51  fclose($fh);
52  return $ret;
53  }
54 
60  public function parseMultiFile($file)
61  {
62  if (!file_exists($file)) {
63  return false;
64  }
65  $ret = array();
66  $fh = fopen($file, 'r');
67  if (!$fh) {
68  return false;
69  }
70  while (!feof($fh)) {
71  $ret[] = $this->parseHandle($fh);
72  }
73  fclose($fh);
74  return $ret;
75  }
76 
86  protected function parseHandle($fh)
87  {
88  $state = false;
89  $single = false;
90  $ret = array();
91  do {
92  $line = fgets($fh);
93  if ($line === false) {
94  break;
95  }
96  $line = rtrim($line, "\n\r");
97  if (!$state && $line === '') {
98  continue;
99  }
100  if ($line === '----') {
101  break;
102  }
103  if (strncmp('--#', $line, 3) === 0) {
104  // Comment
105  continue;
106  } elseif (strncmp('--', $line, 2) === 0) {
107  // Multiline declaration
108  $state = trim($line, '- ');
109  if (!isset($ret[$state])) {
110  $ret[$state] = '';
111  }
112  continue;
113  } elseif (!$state) {
114  $single = true;
115  if (strpos($line, ':') !== false) {
116  // Single-line declaration
117  list($state, $line) = explode(':', $line, 2);
118  $line = trim($line);
119  } else {
120  // Use default declaration
121  $state = $this->default;
122  }
123  }
124  if ($single) {
125  $ret[$state] = $line;
126  $single = false;
127  $state = false;
128  } else {
129  $ret[$state] .= "$line\n";
130  }
131  } while (!feof($fh));
132  return $ret;
133  }
134 }
135 
136 // vim: et sw=4 sts=4