/***************************************************************************

    supportware
    Copyright (C) 2001-2008 by c.holzheuer
    c.holzheuer@sourceworx.org

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

***************************************************************************/


#include <ddwebsearchkey.h>
#include <string.h>

/**
	Stopwortliste und die 'bösen Zeichen' laden.
*/

void ddwebsearchkey::init_stop_words( const ddstring& content, const ddstring& evilchars )
{	
	_stopwords.from_string( content );
	// hack: das '"' nachreichen, das passt nicht in die Config
	_evilchars = evilchars + '"';
}
	

/**
	den Suchschlüssel bauen: den Suchstring in Einzelworte teilen, Stopworte wegschmeissen
	und jedes wort als '+wort*' in den Suchschlüssel schreiben.
	
	Neu: Das Mysql 5.1 bei der Volltextsuche mit Sonderzeichen abraucht, werden diese
	vorher 'ausgeblankt'.
*/

ddstring ddwebsearchkey::prepare_key( const ddstring& rawkey )
{	
	static const char* allow = "+-\"~";
	
	// mysql 5.1 hack: sonderzeichen weg
	ddstring repkey = rawkey;
	//repkey.replace_all( '-', ' ' );
	//repkey.replace_all( '!', ' ' );
	repkey.blank_all_of( _evilchars ); 
	
	ddstringrow words;
	words.create_lazy( repkey );
	// max. 5 suchbegriffe zulassen
	if( words.size() > 5 )
		return "";
	
	// automatisch verunden
	for( size_t i=0; i<words.size(); ++i )
	{
		// stopworte ignorieren
		if( _stopwords.contains_key( words[i].as_lower() ) || words[i].size() <= 2 )
		{
			words[i] = "";
			continue;
		}
		// HACK: &quot; wieder raus
		words[i].replace_all( "&quot;", "\"" );
		if( ::strchr( allow, words[i][0] ) == 0 )
			words[i] = "+"+words[i];
		if( words[i].last_byte() != '*' && words[i].last_byte() != '"')
			words[i] = words[i] + "*";
	}	

	return words.join( " " );
	
}
	
