From 1bcbf65dd843fae38d72114f406c4a3ed22b5387 Mon Sep 17 00:00:00 2001 From: Olivier Mangin Date: Tue, 30 Jan 2018 17:56:00 -0500 Subject: [PATCH] Implements latex escape in queries. --- pubs/query.py | 8 +++++--- tests/test_queries.py | 16 ++++++++++++++++ 2 files changed, 21 insertions(+), 3 deletions(-) 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()