@@ -25,6 +25,7 @@ from searx.engines import (
26from searx.languages import language_codes
26from searx.languages import language_codes
27from searx.utils import gen_useragent
27from searx.utils import gen_useragent
28+from searx.query import Query
30number_of_searches = 0
31number_of_searches = 0
@@ -235,7 +236,15 @@ class Search(object):
235 self.pageno = int(pageno_param)
236 self.pageno = int(pageno_param)
237 # parse query, if tags are set, which change the serch engine or search-language
238 # parse query, if tags are set, which change the serch engine or search-language
239+ query_obj = Query(self.query, self.blocked_engines)
238− self.parse_query()
240+ query_obj.parse_query()
242+ # get last selected language in query, if possible
243+ # TODO support search with multible languages
244+ if len(query_obj.languages):
245+ self.lang = query_obj.languages[-1]
247+ self.engines = query_obj.engines
240 self.categories = []
249 self.categories = []
@@ -276,60 +285,6 @@ class Search(object):
276 for x in categories[categ]
285 for x in categories[categ]
277 if not x.name in self.blocked_engines)
286 if not x.name in self.blocked_engines)
279− # parse query, if tags are set, which change the serch engine or search-language
280− def parse_query(self):
281− query_parts = self.query.split()
284− # check if language-prefix is set
285− if query_parts[0].startswith(':'):
286− lang = query_parts[0][1:].lower()
288− # check if any language-code is equal with declared language-codes
289− for lc in language_codes:
290− lang_id, lang_name, country = map(str.lower, lc)
292− # if correct language-code is found, set it as new search-language
294− or lang_id.startswith(lang)\
295− or lang == lang_name\
301− # check if category/engine prefix is set
302− elif query_parts[0].startswith('!'):
303− prefix = query_parts[0][1:].replace('_', ' ')
305− # check if prefix is equal with engine shortcut
306− if prefix in engine_shortcuts\
307− and not engine_shortcuts[prefix] in self.blocked_engines:
309− self.engines.append({'category': 'none',
310− 'name': engine_shortcuts[prefix]})
312− # check if prefix is equal with engine name
313− elif prefix in engines\
314− and not prefix in self.blocked_engines:
316− self.engines.append({'category': 'none',
319− # check if prefix is equal with categorie name
320− elif prefix in categories:
322− # using all engines for that search, which are declared under that categorie name
323− self.engines.extend({'category': prefix,
324− 'name': engine.name}
325− for engine in categories[prefix]
326− if not engine in self.blocked_engines)
328− # if language, category or engine were specificed in this query, search for more tags which does the same
330− self.query = self.query.replace(query_parts[0], '', 1).strip()
333 # do search-request
288 # do search-request
334 def search(self, request):
289 def search(self, request):
335 global number_of_searches
290 global number_of_searches