Index: template_helper.php
===================================================================
--- template_helper.php (revision 12883)
+++ template_helper.php (working copy)
@@ -227,23 +227,33 @@
{
preg_match_all('/(
]*>)|(<\/div>)/s', $data, $divs, PREG_SET_ORDER + PREG_OFFSET_CAPTURE);
- $skip_count = 0;
+ $deep_level = 0;
+
$pairs = Array ();
+ $skip_count = Array (); // by deep level!
foreach ($divs as $div) {
if (strpos($div[0][0], '/') === false) {
// opening div
+ $skip_count[$deep_level] = 0;
+
if (strpos($div[0][0], $class) !== false) {
+ // ours opening (this deep level) -> save
$pair = Array ('open_pos' => $div[0][1], 'open_len' => strlen($div[0][0]));
- $skip_count = 0;
}
else {
- $skip_count++;
+ // not ours opening -> skip next closing (this deep level)
+ $skip_count[$deep_level]++;
}
+
+ $deep_level++;
}
else {
// closing div
- if ($skip_count == 0) {
+ $deep_level--;
+
+ if ($skip_count[$deep_level] == 0) {
+ // nothing to skip (this deep level) -> save
$pair['close_len'] = strlen($div[0][0]);
$pair['close_pos'] = $div[0][1] + $pair['close_len'];
$pair['data'] = substr($data, $pair['open_pos'], $pair['close_pos'] - $pair['open_pos']);
@@ -259,7 +269,8 @@
}
}
else {
- $skip_count--;
+ // skip closing div as requested
+ $skip_count[$deep_level]--;
}
}
}