diff --git a/src/IDF/Scm/Monotone/BasicIO.php b/src/IDF/Scm/Monotone/BasicIO.php index 9c8c286..e783a90 100644 --- a/src/IDF/Scm/Monotone/BasicIO.php +++ b/src/IDF/Scm/Monotone/BasicIO.php @@ -68,17 +68,30 @@ class IDF_Scm_Monotone_BasicIO { unset($stanzaLine['hash']); $valCount = 0; - while ($in[$pos] == '"') { - ++$pos; // opening quote + // if hashs and plain values are encountered in the same + // value list, we add the hash values as simple values as well + while ($in[$pos] == '"' || $in[$pos] == '[') { + $isHashValue = $in[$pos] == '['; + ++$pos; // opening quote / bracket $stanzaLine['values'][$valCount] = ''; while ($pos < $length) { $ch = $in[$pos]; $pr = $in[$pos-1]; - if ($ch == '"' && $pr != '\\') break; + if (($isHashValue && $ch == ']') + ||(!$isHashValue && $ch == '"' && $pr != '\\')) + break; ++$pos; $stanzaLine['values'][$valCount] .= $ch; } ++$pos; // closing quote + if (!$isHashValue) { + $stanzaLine['values'][$valCount] = str_replace( + array("\\\\", "\\\""), + array("\\", "\""), + $stanzaLine['values'][$valCount] + ); + } + if ($pos >= $length) break; @@ -87,14 +100,6 @@ class IDF_Scm_Monotone_BasicIO ++$valCount; } } - - for ($i = 0; $i <= $valCount; $i++) { - $stanzaLine['values'][$i] = str_replace( - array("\\\\", "\\\""), - array("\\", "\""), - $stanzaLine['values'][$i] - ); - } } $stanza[] = $stanzaLine;