diff --git a/gramps/gen/filters/rules/citation/__init__.py b/gramps/gen/filters/rules/citation/__init__.py index 692874d3e..1bdcbe313 100644 --- a/gramps/gen/filters/rules/citation/__init__.py +++ b/gramps/gen/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 @@ -58,6 +59,7 @@ editor_rule_list = [ HasReferenceCountOf, HasSource, HasSourceIdOf, + HasSourceNoteRegexp, MatchesFilter, MatchesPageSubstringOf, MatchesRepositoryFilter, diff --git a/gramps/gen/filters/rules/citation/_hassourcenoteregexp.py b/gramps/gen/filters/rules/citation/_hassourcenoteregexp.py new file mode 100644 index 000000000..3295922d1 --- /dev/null +++ b/gramps/gen/filters/rules/citation/_hassourcenoteregexp.py @@ -0,0 +1,61 @@ +# +# 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 ....const import GRAMPS_LOCALE as glocale +_ = glocale.translation.gettext + +#------------------------------------------------------------------------- +# +# Gramps modules +# +#------------------------------------------------------------------------- +from .._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/gramps/gui/filters/sidebar/_citationsidebarfilter.py b/gramps/gui/filters/sidebar/_citationsidebarfilter.py index 1757aef1a..f05ba950a 100644 --- a/gramps/gui/filters/sidebar/_citationsidebarfilter.py +++ b/gramps/gui/filters/sidebar/_citationsidebarfilter.py @@ -46,7 +46,8 @@ from gramps.gen.constfunc import cuni from gramps.gen.filters import GenericFilterFactory, rules from gramps.gen.filters.rules.citation import (RegExpIdOf, HasCitation, HasTag, HasNoteRegexp, MatchesFilter, - HasSource, RegExpSourceIdOf) + HasSource, RegExpSourceIdOf, + HasSourceNoteRegexp) from gramps.gen.utils.string import conf_strings GenericCitationFilter = GenericFilterFactory('Citation') #------------------------------------------------------------------------- @@ -184,6 +185,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) + # check the Tag if tag: model = self.tag.get_model() diff --git a/po/POTFILES.in b/po/POTFILES.in index b85409434..aa803c978 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -56,6 +56,7 @@ gramps/gen/filters/rules/citation/_hasnoteregexp.py gramps/gen/filters/rules/citation/_hasreferencecountof.py gramps/gen/filters/rules/citation/_hassource.py gramps/gen/filters/rules/citation/_hassourceidof.py +gramps/gen/filters/rules/citation/_hassourcenoteregexp.py gramps/gen/filters/rules/citation/_hastag.py gramps/gen/filters/rules/citation/_matchesfilter.py gramps/gen/filters/rules/citation/_matchespagesubstringof.py