diff --git a/pubs/query.py b/pubs/query.py index 52b96c9..40f3460 100644 --- a/pubs/query.py +++ b/pubs/query.py @@ -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() diff --git a/tests/test_queries.py b/tests/test_queries.py index 59c71cd..0508794 100644 --- a/tests/test_queries.py +++ b/tests/test_queries.py @@ -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()