From 40dcb80ad16f928174a22304eca5896ae60a581c Mon Sep 17 00:00:00 2001 From: Charles Haley <> Date: Mon, 1 Aug 2011 13:35:37 +0100 Subject: [PATCH] Make merge_list into an alias of list_union. Change documentation. If running from source, get source code for new functions via inspection. --- src/calibre/gui2/dialogs/template_dialog.py | 5 ++--- src/calibre/manual/template_lang.rst | 2 +- src/calibre/utils/formatter_functions.py | 12 ++++++++---- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/calibre/gui2/dialogs/template_dialog.py b/src/calibre/gui2/dialogs/template_dialog.py index 7d30f37bc1..9b31c3c929 100644 --- a/src/calibre/gui2/dialogs/template_dialog.py +++ b/src/calibre/gui2/dialogs/template_dialog.py @@ -289,9 +289,8 @@ class TemplateDialog(QDialog, Ui_TemplateDialog): self.documentation.clear() if name in self.funcs: self.documentation.setPlainText(self.funcs[name].doc) - if name in self.builtins: - if name in self.builtin_source_dict: - self.source_code.setPlainText(self.builtin_source_dict[name]) + if name in self.builtins and name in self.builtin_source_dict: + self.source_code.setPlainText(self.builtin_source_dict[name]) else: self.source_code.setPlainText(self.funcs[name].program_text) diff --git a/src/calibre/manual/template_lang.rst b/src/calibre/manual/template_lang.rst index b452525848..f2d01474b6 100644 --- a/src/calibre/manual/template_lang.rst +++ b/src/calibre/manual/template_lang.rst @@ -266,7 +266,7 @@ The following functions are available in addition to those described in single-f * ``list_difference(list1, list2, separator)`` -- return a list made by removing from `list1` any item found in `list2`, using a case-insensitive compare. The items in `list1` and `list2` are separated by separator, as are the items in the returned list. * ``list_intersection(list1, list2, separator)`` -- return a list made by removing from `list1` any item not found in `list2`, using a case-insensitive compare. The items in `list1` and `list2` are separated by separator, as are the items in the returned list. * ``list_sort(list, direction, separator)`` -- return list sorted using a case-insensitive sort. If `direction` is zero, the list is sorted ascending, otherwise descending. The list items are separated by separator, as are the items in the returned list. - * ``merge_lists(list1, list2, separator)`` -- return a list made by merging the items in list1 and list2, removing duplicate items using a case-insensitive compare. If items differ in case, the one in list1 is used. The items in list1 and list2 are separated by separator, as are the items in the returned list. + * ``list_union(list1, list2, separator)`` -- return a list made by merging the items in list1 and list2, removing duplicate items using a case-insensitive compare. If items differ in case, the one in list1 is used. The items in list1 and list2 are separated by separator, as are the items in the returned list. * ``multiply(x, y)`` -- returns x * y. Throws an exception if either x or y are not numbers. * ``ondevice()`` -- return the string "Yes" if ondevice is set, otherwise return the empty string * ``or(value, value, ...)`` -- returns the string "1" if any value is not empty, otherwise returns the empty string. This function works well with test or first_non_empty. You can have as many values as you want. diff --git a/src/calibre/utils/formatter_functions.py b/src/calibre/utils/formatter_functions.py index 79713c432c..8cefe909b2 100644 --- a/src/calibre/utils/formatter_functions.py +++ b/src/calibre/utils/formatter_functions.py @@ -829,11 +829,11 @@ class BuiltinNot(BuiltinFormatterFunction): def evaluate(self, formatter, kwargs, mi, locals, val): return '' if val else '1' -class BuiltinMergeLists(BuiltinFormatterFunction): - name = 'merge_lists' +class BuiltinListUnion(BuiltinFormatterFunction): + name = 'list_union' arg_count = 3 category = 'List Manipulation' - __doc__ = doc = _('merge_lists(list1, list2, separator) -- ' + __doc__ = doc = _('list_union(list1, list2, separator) -- ' 'return a list made by merging the items in list1 and list2, ' 'removing duplicate items using a case-insensitive compare. If ' 'items differ in case, the one in list1 is used. ' @@ -853,6 +853,9 @@ class BuiltinMergeLists(BuiltinFormatterFunction): res.append(i) return ', '.join(res) +class BuiltinMergeLists(BuiltinListUnion): + name = 'merge_lists' + class BuiltinListDifference(BuiltinFormatterFunction): name = 'list_difference' arg_count = 3 @@ -945,7 +948,8 @@ formatter_builtins = [ BuiltinFormatNumber(), BuiltinFormatsModtimes(), BuiltinFormatsSizes(), BuiltinHasCover(), BuiltinHumanReadable(), BuiltinIdentifierInList(), BuiltinIfempty(), BuiltinInList(), BuiltinListDifference(), - BuiltinListIntersection(), BuiltinListitem(), BuiltinListSort(), BuiltinLookup(), + BuiltinListIntersection(), BuiltinListitem(), BuiltinListSort(), + BuiltinListUnion(), BuiltinLookup(), BuiltinLowercase(), BuiltinMergeLists(), BuiltinMultiply(), BuiltinNot(), BuiltinOndevice(), BuiltinOr(), BuiltinPrint(), BuiltinRawField(), BuiltinRe(), BuiltinSelect(), BuiltinShorten(), BuiltinStrcat(),