From 0972d720795403b4cdeea31ac56e57467c2613de Mon Sep 17 00:00:00 2001 From: Nick Hall Date: Sat, 25 Jan 2014 19:18:28 +0000 Subject: [PATCH] 7183: Fix source note citation filter --- po/POTFILES.in | 1 + src/Filters/Rules/Citation/Makefile.am | 1 + .../Rules/Citation/_HasSourceNoteRegexp.py | 60 +++++++++++++++++++ src/Filters/Rules/Citation/__init__.py | 2 + src/Filters/SideBar/_CitationSidebarFilter.py | 7 ++- 5 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 src/Filters/Rules/Citation/_HasSourceNoteRegexp.py diff --git a/po/POTFILES.in b/po/POTFILES.in index 3147a64ab..d5844bedc 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -642,6 +642,7 @@ src/Filters/Rules/Citation/_HasNoteRegexp.py src/Filters/Rules/Citation/_HasReferenceCountOf.py src/Filters/Rules/Citation/_HasSource.py src/Filters/Rules/Citation/_HasSourceIdOf.py +src/Filters/Rules/Citation/_HasSourceNoteRegexp.py src/Filters/Rules/Citation/_MatchesFilter.py src/Filters/Rules/Citation/_MatchesPageSubstringOf.py src/Filters/Rules/Citation/_RegExpIdOf.py diff --git a/src/Filters/Rules/Citation/Makefile.am b/src/Filters/Rules/Citation/Makefile.am index b4358ac3c..af5e19021 100644 --- a/src/Filters/Rules/Citation/Makefile.am +++ b/src/Filters/Rules/Citation/Makefile.am @@ -17,6 +17,7 @@ pkgpython_PYTHON = \ _HasReferenceCountOf.py \ _HasSource.py \ _HasSourceIdOf.py \ + _HasSourceNoteRegexp.py \ _MatchesFilter.py \ _MatchesPageSubstringOf.py \ _MatchesRepositoryFilter.py \ diff --git a/src/Filters/Rules/Citation/_HasSourceNoteRegexp.py b/src/Filters/Rules/Citation/_HasSourceNoteRegexp.py new file mode 100644 index 000000000..23602f961 --- /dev/null +++ b/src/Filters/Rules/Citation/_HasSourceNoteRegexp.py @@ -0,0 +1,60 @@ +# +# Gramps - a GTK+/GNOME based genealogy program +# +# Copyright (C) 2014 Nick Hall +# +# 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. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +""" +Filter rule to match citations whose source notes contain a substring or +match a regular expression. +""" + +#------------------------------------------------------------------------- +# +# Standard python modules +# +#------------------------------------------------------------------------- +from gen.ggettext import gettext as _ + +#------------------------------------------------------------------------- +# +# Gramps modules +# +#------------------------------------------------------------------------- +from Filters.Rules._HasNoteRegexBase import HasNoteRegexBase + +#------------------------------------------------------------------------- +# +# HasSourceNoteRegexp +# +#------------------------------------------------------------------------- +class HasSourceNoteRegexp(HasNoteRegexBase): + """ + Rule that checks if a citation has a source note that contains a + substring or matches a regular expression. + """ + + name = _('Citations having source notes containing ') + description = _("Matches citations whose source notes contain a substring " + "or match a regular expression") + category = _('Source filters') + + def apply(self, db, citation): + source = db.get_source_from_handle(citation.get_reference_handle()) + if HasNoteRegexBase.apply(self, db, source): + return True + return False diff --git a/src/Filters/Rules/Citation/__init__.py b/src/Filters/Rules/Citation/__init__.py index 301178322..0ed838cbe 100644 --- a/src/Filters/Rules/Citation/__init__.py +++ b/src/Filters/Rules/Citation/__init__.py @@ -38,6 +38,7 @@ from _HasNoteRegexp import HasNoteRegexp from _HasReferenceCountOf import HasReferenceCountOf from _HasSource import HasSource from _HasSourceIdOf import HasSourceIdOf +from _HasSourceNoteRegexp import HasSourceNoteRegexp from _MatchesFilter import MatchesFilter from _MatchesPageSubstringOf import MatchesPageSubstringOf from _MatchesRepositoryFilter import MatchesRepositoryFilter @@ -57,6 +58,7 @@ editor_rule_list = [ HasReferenceCountOf, HasSource, HasSourceIdOf, + HasSourceNoteRegexp, MatchesFilter, MatchesPageSubstringOf, MatchesRepositoryFilter, diff --git a/src/Filters/SideBar/_CitationSidebarFilter.py b/src/Filters/SideBar/_CitationSidebarFilter.py index bbfe431e9..e75bf4aac 100644 --- a/src/Filters/SideBar/_CitationSidebarFilter.py +++ b/src/Filters/SideBar/_CitationSidebarFilter.py @@ -45,7 +45,8 @@ import gen.lib from Filters.SideBar import SidebarFilter from Filters import GenericFilterFactory, build_filter_model, Rules from Filters.Rules.Citation import (RegExpIdOf, HasCitation, HasNoteRegexp, - MatchesFilter, HasSource, RegExpSourceIdOf) + MatchesFilter, HasSource, RegExpSourceIdOf, + HasSourceNoteRegexp) from Utils import confidence GenericCitationFilter = GenericFilterFactory('Citation') #------------------------------------------------------------------------- @@ -173,6 +174,10 @@ class CitationSidebarFilter(SidebarFilter): rule = HasNoteRegexp([note], use_regex=regex) generic_filter.add_rule(rule) + if src_note: + rule = HasSourceNoteRegexp([src_note], use_regex=regex) + generic_filter.add_rule(rule) + if self.generic.get_active() != 0: model = self.generic.get_model() node = self.generic.get_active_iter()