Implements latex escape in queries.

main
Olivier Mangin 7 years ago
parent cff028d345
commit 1bcbf65dd8

@ -1,3 +1,4 @@
from bibtexparser.latexenc import latex_to_unicode
from . import bibstruct
@ -24,15 +25,16 @@ class QueryFilter(object):
if case_sensitive is None:
case_sensitive = not query.islower()
self.case = case_sensitive
self.query = self._lower(query)
self.query = self._normalize(query)
def __call__(self, paper):
raise NotImplementedError
def _is_query_in(self, field_value):
return self.query in self._lower(field_value)
return self.query in self._normalize(field_value)
def _lower(self, s):
def _normalize(self, s):
s = latex_to_unicode(s)
return s if self.case else s.lower()

@ -84,6 +84,14 @@ class TestCheckField(unittest.TestCase):
self.assertFalse(
FieldFilter('title', 'nice', case_sensitive=True)(doe_paper))
def test_latex_enc(self):
latexenc_paper = doe_paper.deepcopy()
latexenc_paper.bibentry['Doe2013']['title'] = "{G}r{\\\"u}n"
self.assertTrue(
FieldFilter('title', 'Grün')(latexenc_paper))
self.assertTrue(
FieldFilter('title', 'Gr{\\\"u}n')(latexenc_paper))
class TestCheckQueryBlock(unittest.TestCase):
@ -122,6 +130,14 @@ class TestFilterPaper(unittest.TestCase):
self.assertFalse(get_paper_filter(['author:doe', 'year:2014-'])(doe_paper))
self.assertFalse(get_paper_filter(['author:doee', 'year:2014'])(doe_paper))
def test_latex_enc(self):
latexenc_paper = doe_paper.deepcopy()
latexenc_paper.bibentry['Doe2013']['title'] = "{E}l Ni{\~n}o"
latexenc_paper.bibentry['Doe2013']['author'][0] = "Erd\H{o}s, Paul"
self.assertTrue(get_paper_filter(['title:El'])(latexenc_paper))
self.assertTrue(get_paper_filter(['title:Niño'])(latexenc_paper))
self.assertTrue(get_paper_filter(['author:erdős'])(latexenc_paper))
if __name__ == '__main__':
unittest.main()

Loading…
Cancel
Save