From df3a6ed7cc95d999480d7a1c5921af819d014ceb Mon Sep 17 00:00:00 2001 From: Charles Haley <> Date: Thu, 8 Dec 2011 05:12:10 +0100 Subject: [PATCH] Slight performance improvement for formatter function subitems --- src/calibre/utils/formatter_functions.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/calibre/utils/formatter_functions.py b/src/calibre/utils/formatter_functions.py index cbcf33f32f..b7e3f78824 100644 --- a/src/calibre/utils/formatter_functions.py +++ b/src/calibre/utils/formatter_functions.py @@ -712,6 +712,8 @@ class BuiltinSubitems(BuiltinFormatterFunction): 'value of "A.B.C, D.E.F", {#genre:subitems(0,1)} returns "A, D". ' '{#genre:subitems(0,2)} returns "A.B, D.E"') + period_pattern = re.compile(r'(?<=[^\.\s])\.(?=[^\.\s])', re.U) + def evaluate(self, formatter, kwargs, mi, locals, val, start_index, end_index): if not val: return '' @@ -720,13 +722,9 @@ class BuiltinSubitems(BuiltinFormatterFunction): has_periods = '.' in val items = [v.strip() for v in val.split(',')] rv = set() - if has_periods: - pp = re.compile(r'(?<=[^\.\s])\.(?=[^\.\s])', re.U) - else: - pp = None for item in items: if has_periods and '.' in item: - components = pp.split(item) + components = self.period_pattern.split(item) else: components = [item] try: