mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-07 10:14:46 -04:00
New formatter functions: list_sort, list_difference, list_intersection. Make merge_lists not sort its result.
This commit is contained in:
parent
5383af193f
commit
2609287896
@ -851,7 +851,58 @@ class BuiltinMergeLists(BuiltinFormatterFunction):
|
|||||||
for i in l2:
|
for i in l2:
|
||||||
if icu_lower(i) not in lcl1:
|
if icu_lower(i) not in lcl1:
|
||||||
res.append(i)
|
res.append(i)
|
||||||
return ', '.join(sorted(res, key=sort_key))
|
return ', '.join(res)
|
||||||
|
|
||||||
|
class BuiltinListDifference(BuiltinFormatterFunction):
|
||||||
|
name = 'list_difference'
|
||||||
|
arg_count = 3
|
||||||
|
category = 'List Manipulation'
|
||||||
|
__doc__ = doc = _('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.')
|
||||||
|
|
||||||
|
def evaluate(self, formatter, kwargs, mi, locals, list1, list2, separator):
|
||||||
|
l1 = [l.strip() for l in list1.split(separator) if l.strip()]
|
||||||
|
l2 = [icu_lower(l.strip()) for l in list2.split(separator) if l.strip()]
|
||||||
|
|
||||||
|
res = []
|
||||||
|
for i in l1:
|
||||||
|
if icu_lower(i) not in l2:
|
||||||
|
res.append(i)
|
||||||
|
return ', '.join(res)
|
||||||
|
|
||||||
|
class BuiltinListIntersection(BuiltinFormatterFunction):
|
||||||
|
name = 'list_intersection'
|
||||||
|
arg_count = 3
|
||||||
|
category = 'List Manipulation'
|
||||||
|
__doc__ = doc = _('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.')
|
||||||
|
|
||||||
|
def evaluate(self, formatter, kwargs, mi, locals, list1, list2, separator):
|
||||||
|
l1 = [l.strip() for l in list1.split(separator) if l.strip()]
|
||||||
|
l2 = [icu_lower(l.strip()) for l in list2.split(separator) if l.strip()]
|
||||||
|
|
||||||
|
res = []
|
||||||
|
for i in l1:
|
||||||
|
if icu_lower(i) in l2:
|
||||||
|
res.append(i)
|
||||||
|
return ', '.join(res)
|
||||||
|
|
||||||
|
class BuiltinListSort(BuiltinFormatterFunction):
|
||||||
|
name = 'list_sort'
|
||||||
|
arg_count = 3
|
||||||
|
category = 'List Manipulation'
|
||||||
|
__doc__ = doc = _('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.')
|
||||||
|
|
||||||
|
def evaluate(self, formatter, kwargs, mi, locals, list1, direction, separator):
|
||||||
|
res = [l.strip() for l in list1.split(separator) if l.strip()]
|
||||||
|
return ', '.join(sorted(res, key=sort_key, reverse=direction != 0))
|
||||||
|
|
||||||
class BuiltinToday(BuiltinFormatterFunction):
|
class BuiltinToday(BuiltinFormatterFunction):
|
||||||
name = 'today'
|
name = 'today'
|
||||||
@ -893,12 +944,13 @@ formatter_builtins = [
|
|||||||
BuiltinFirstNonEmpty(), BuiltinField(), BuiltinFormatDate(),
|
BuiltinFirstNonEmpty(), BuiltinField(), BuiltinFormatDate(),
|
||||||
BuiltinFormatNumber(), BuiltinFormatsModtimes(), BuiltinFormatsSizes(),
|
BuiltinFormatNumber(), BuiltinFormatsModtimes(), BuiltinFormatsSizes(),
|
||||||
BuiltinHasCover(), BuiltinHumanReadable(), BuiltinIdentifierInList(),
|
BuiltinHasCover(), BuiltinHumanReadable(), BuiltinIdentifierInList(),
|
||||||
BuiltinIfempty(), BuiltinInList(), BuiltinListitem(), BuiltinLookup(),
|
BuiltinIfempty(), BuiltinInList(), BuiltinListDifference(),
|
||||||
|
BuiltinListIntersection(), BuiltinListitem(), BuiltinListSort(), BuiltinLookup(),
|
||||||
BuiltinLowercase(), BuiltinMergeLists(), BuiltinMultiply(), BuiltinNot(),
|
BuiltinLowercase(), BuiltinMergeLists(), BuiltinMultiply(), BuiltinNot(),
|
||||||
BuiltinOndevice(), BuiltinOr(), BuiltinPrint(), BuiltinRawField(),
|
BuiltinOndevice(), BuiltinOr(), BuiltinPrint(), BuiltinRawField(),
|
||||||
BuiltinRe(), BuiltinSelect(), BuiltinShorten(), BuiltinStrcat(),
|
BuiltinRe(), BuiltinSelect(), BuiltinShorten(), BuiltinStrcat(),
|
||||||
BuiltinStrcmp(), BuiltinStrInList(), BuiltinSubitems(), BuiltinSublist(),
|
BuiltinStrcmp(), BuiltinStrInList(), BuiltinSubitems(),
|
||||||
BuiltinSubstr(), BuiltinSubtract(), BuiltinSwapAroundComma(),
|
BuiltinSublist(),BuiltinSubstr(), BuiltinSubtract(), BuiltinSwapAroundComma(),
|
||||||
BuiltinSwitch(), BuiltinTemplate(), BuiltinTest(), BuiltinTitlecase(),
|
BuiltinSwitch(), BuiltinTemplate(), BuiltinTest(), BuiltinTitlecase(),
|
||||||
BuiltinToday(), BuiltinUppercase(),
|
BuiltinToday(), BuiltinUppercase(),
|
||||||
]
|
]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user