[kazehakase-svn] [3480] Don't split at the making highlight.

Back to archive index

svnno****@sourc***** svnno****@sourc*****
Wed Mar 12 18:47:48 JST 2008


Revision: 3480
          http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=kazehakase&view=rev&rev=3480
Author:   pal_gene
Date:     2008-03-12 18:47:48 +0900 (Wed, 12 Mar 2008)

Log Message:
-----------
Don't split at the making highlight.

Modified Paths:
--------------
    kazehakase/trunk/module/search/kz-hyper-estraier-search.c

Modified: kazehakase/trunk/module/search/kz-hyper-estraier-search.c
===================================================================
--- kazehakase/trunk/module/search/kz-hyper-estraier-search.c	2008-03-12 01:57:57 UTC (rev 3479)
+++ kazehakase/trunk/module/search/kz-hyper-estraier-search.c	2008-03-12 09:47:48 UTC (rev 3480)
@@ -374,8 +374,7 @@
 		ESTDOC *doc;
 		const gchar *title, *date, *cache_link;
 		gchar *cache_str, *thumb_filename, *uri, *thumb_uri;
-		gchar *desc, **desc_highlight;
-		guint desc_len, desc_i;
+		gchar *desc, *p, *l;
 
 		doc = est_mtdb_get_doc(he_search->db, results[i], 0);
 		if (!doc)
@@ -413,28 +412,44 @@
 		desc = est_doc_make_snippet(doc, highlights, num_summary,
 					    half_of_summary, half_of_summary);
 		/* make highlight keyword */
-		//TODO:more fast that don't split
-		desc_highlight = g_strsplit_set(desc, "\n", 0);
-		free(desc);		/* don't g_free because born from estraier func */
-		desc_len = g_strv_length(desc_highlight);
 		desc_str->len = 0;	/* reset contain length */
-		for (desc_i = 0; desc_i < desc_len; desc_i++)
+		l = p = desc;
+		while (*p)
 		{
-		    char *found = strchr(desc_highlight[desc_i], '\t');
-		    if (found)
-		    {
-			*found = '\0';
-			g_string_append(desc_str, "<b>");
-			g_string_append(desc_str, desc_highlight[desc_i]);
-			g_string_append(desc_str, "</b>");
-		    }
-		    else
-		    {
-			g_string_append(desc_str, desc_highlight[desc_i]);
-		    }
+			if (*p == '\n')
+			{
+				g_string_append_len(desc_str, l, p - l);
+				l = ++p;
+				continue;
+			}
+
+			if (*p == '\t')
+			{
+				g_string_append(desc_str, "<b>");
+				g_string_append_len(desc_str, l, p - l);
+				g_string_append(desc_str, "</b>");
+				while (*p)
+				{
+					if (*p == '\n')
+					{
+						l = ++p;
+						break;
+					}
+					p++;
+				}
+				if (*p == '\0')
+				{
+					l = NULL;
+					break;
+				}
+				continue;
+			}
+			p++;
 		}
-		g_strfreev(desc_highlight);
-		
+		if (p != l && l)
+			g_string_append_len(desc_str, l, p - l);
+		free(desc);		/* don't g_free because born from estraier func */
+
 		g_string_append_printf(html,
 				       CONTENT,
 				       uri,
@@ -684,7 +699,7 @@
 		g_warning("register error: %s", est_err_msg(est_mtdb_error(he_search->db)));
 		g_warning("retry...");
 		est_mtdb_sync(he_search->db);
-		if(est_mtdb_put_doc(he_search->db, doc, 0))
+		if((success = est_mtdb_put_doc(he_search->db, doc, 0)))
 		{
 		    g_warning("succeed!");
 		}
@@ -752,7 +767,6 @@
  * @param path path to the directory contains contents to register
  * @return void
  */
-//TODO:don't register image type
 //TODO:correctly parse title (get_document_title())
 static void
 register_documents_in_path (KzSearch *search, const gchar *path)
@@ -783,16 +797,11 @@
 			//TODO:history search result, optional
 			/* NOTE:string pointer compare is designed */
 			if (path == he_search->cache_path && strcmp(file, "time-stamp") == 0)
-			{
-				g_free(new_path);
-				continue;
-			}
+				goto  END_NEW_PATH;
 
 			contents = get_utf8_contents(new_path);
-			if (!contents) {
-				g_free(new_path);
-				continue;
-			}
+			if (!contents)
+				goto END_NEW_PATH;
 
 			g_stat(new_path, &st);
 			mtime = st.st_mtime;
@@ -807,6 +816,7 @@
 			g_free(uri);
 			g_free(contents);
 		}
+		END_NEW_PATH:
 		g_free(new_path);
 	}
 	g_dir_close (gd);




More information about the Kazehakase-cvs mailing list
Back to archive index