From 79834eda77cf2ce6f896269c242b357f6f1fe9d2 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Thu, 1 Aug 2013 16:30:22 +0400 Subject: experimentally simplify highlight searching --- include/functions.php | 47 ++++++++++++++++++++--------------------------- 1 file changed, 20 insertions(+), 27 deletions(-) (limited to 'include/functions.php') diff --git a/include/functions.php b/include/functions.php index ea31a40cc..b4789aec9 100644 --- a/include/functions.php +++ b/include/functions.php @@ -2864,35 +2864,28 @@ // http://stackoverflow.com/questions/4081372/highlight-keywords-in-a-paragraph - $also_query = ''; - foreach(array(strtolower($word), strtoupper($word), ucfirst(strtolower($word))) as $word_cap) { - $also_query .= ' or contains(.,"'.$word_cap.'")' ; - } - $elements = $xpath->query('//*[contains(.,"'.$word.'")' . $also_query . ']'); - - foreach ($elements as $element) { - foreach ($element->childNodes as $child) { - - if (!$child instanceof DomText) continue; - - $fragment = $doc->createDocumentFragment(); - $text = $child->textContent; - $stubs = array(); - - while (($pos = mb_stripos($text, $word)) !== false) { - $fragment->appendChild(new DomText(mb_substr($text, 0, $pos))); - $word = mb_substr($text, $pos, mb_strlen($word)); - $highlight = $doc->createElement('span'); - $highlight->appendChild(new DomText($word)); - $highlight->setAttribute('class', 'highlight'); - $fragment->appendChild($highlight); - $text = mb_substr($text, $pos + mb_strlen($word)); - } + $elements = $xpath->query("//*/text()"); + + foreach ($elements as $child) { + if (!$child instanceof DomText) continue; + + $fragment = $doc->createDocumentFragment(); + $text = $child->textContent; + $stubs = array(); + + while (($pos = mb_stripos($text, $word)) !== false) { + $fragment->appendChild(new DomText(mb_substr($text, 0, $pos))); + $word = mb_substr($text, $pos, mb_strlen($word)); + $highlight = $doc->createElement('span'); + $highlight->appendChild(new DomText($word)); + $highlight->setAttribute('class', 'highlight'); + $fragment->appendChild($highlight); + $text = mb_substr($text, $pos + mb_strlen($word)); + } - if (!empty($text)) $fragment->appendChild(new DomText($text)); + if (!empty($text)) $fragment->appendChild(new DomText($text)); - $element->replaceChild($fragment, $child); - } + $child->parentNode->replaceChild($fragment, $child); } } } -- cgit v1.2.3