| *␊ | 
| * @author Thomas Keller <me@thomaskeller.biz>␊ | 
| */␊ | 
| class IDF_Scm_Monotone_BasicIO extends IDF_Scm␊ | 
| class IDF_Scm_Monotone_BasicIO␊ | 
| {␊ | 
| /**␊ | 
| * Parses monotone's basic_io format␊ | 
|  | 
| }␊ | 
| ␊ | 
| if ($in[$pos] == '[') {␊ | 
| unset($stanzaLine['values']);␊ | 
| ++$pos; // opening square bracket␊ | 
| $stanzaLine['hash'] = substr($in, $pos, 40);␊ | 
| $pos += 40;␊ | 
|  | 
| }␊ | 
| else␊ | 
| {␊ | 
| unset($stanzaLine['hash']);␊ | 
| $valCount = 0;␊ | 
| while ($in[$pos] == '"') {␊ | 
| ++$pos; // opening quote␊ | 
|  | 
| */␊ | 
| public static function compile($in)␊ | 
| {␊ | 
| throw new IDF_Scm_Exception("not yet implemented");␊ | 
| $out = "";␊ | 
| $first = true;␊ | 
| foreach ((array)$in as $sx => $stanza) {␊ | 
| if ($first)␊ | 
| $first = false;␊ | 
| else␊ | 
| $out .= "\n";␊ | 
| ␊ | 
| $maxkeylength = 0;␊ | 
| foreach ((array)$stanza as $lx => $line) {␊ | 
| if (!array_key_exists('key', $line)) {␊ | 
| throw new IDF_Scm_Exception(␊ | 
| '"key" not found in basicio stanza '.$sx.', line '.$lx␊ | 
| );␊ | 
| }␊ | 
| $maxkeylength = max($maxkeylength, strlen($line['key']));␊ | 
| }␊ | 
| ␊ | 
| foreach ((array)$stanza as $lx => $line) {␊ | 
| $out .= str_pad($line['key'], $maxkeylength, ' ', STR_PAD_LEFT);␊ | 
| ␊ | 
| if (array_key_exists('hash', $line)) {␊ | 
| $out .= ' ['.$line['hash'].']';␊ | 
| } else␊ | 
| if (array_key_exists('values', $line)) {␊ | 
| if (!is_array($line['values']) || count($line['values']) == 0) {␊ | 
| throw new IDF_Scm_Exception(␊ | 
| '"values" must be an array of a size >= 1 '.␊ | 
| 'in basicio stanza '.$sx.', line '.$lx␊ | 
| );␊ | 
| }␊ | 
| foreach ($line['values'] as $value) {␊ | 
| $out .= ' "'.str_replace(␊ | 
| array("\\", "\""),␊ | 
| array("\\\\", "\\\""),␊ | 
| $value).'"';␊ | 
| }␊ | 
| }␊ | 
| else␊ | 
| {␊ | 
| throw new IDF_Scm_Exception(␊ | 
| 'neither "hash" nor "values" found in basicio '.␊ | 
| 'stanza '.$sx.', line '.$lx␊ | 
| );␊ | 
| }␊ | 
| ␊ | 
| $out .= "\n";␊ | 
| }␊ | 
| }␊ | 
| return $out;␊ | 
| }␊ | 
| }␊ | 
| ␊ |