fix snippet display
[wolnelektury.git] / apps / search / templatetags / search_tags.py
index 0e20913..57734c1 100644 (file)
@@ -35,17 +35,28 @@ def book_searched(context, result):
 
     # We don't need hits which lead to sections but do not have
     # snippets.
-    hits = filter(lambda h: 'fragment' in h or
-                  h['snippets'], result.hits)
-
-    for hit in hits:
-        hit['snippets'] = map(lambda s: s.replace("\n", "<br />").replace('---', '&mdash;'), hit['snippets'])
+    hits = filter(lambda (idx, h):
+                  result.snippets[idx] is not None
+                  or 'fragment' in h, enumerate(result.hits))
+    print "[tmpl: from %d hits selected %d]" % (len(result.hits), len(hits))
+
+    for (idx, hit) in hits:
+        # currently we generate one snipper per hit though.
+        if result.snippets[idx] is None:
+            continue
+        snip = result.snippets[idx]
+        # fix some formattting
+        snip = re.subn(r"(^[ \t\n]+|[ \t\n]+$)", u"",
+                              re.subn(r"[ \t\n]*\n[ \t\n]*", u"\n", snip))
+
+        snip = snip.replace("\n", "<br />").replace('---', '&mdash;')
+        hit['snippet'] = snip
 
     return {
         'related': book.related_info(),
         'book': book,
         'main_link': book.get_absolute_url(),
         'request': context.get('request'),
-        'hits': hits,
+        'hits': hits and zip(*hits)[1] or [],
         'main_link': book.get_absolute_url(),
     }