home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyc (Python 2.6)
-
- import re
- import string
- import traceback
- from calibre.constants import DEBUG
- from calibre.utils.titlecase import titlecase
-
- class TemplateFormatter(string.Formatter):
- composite_values = { }
-
- def __init__(self):
- string.Formatter.__init__(self)
- self.book = None
- self.kwargs = None
-
-
- def _lookup(self, val, *args):
- if len(args) == 2:
- if val:
- return self.vformat('{' + args[0].strip() + '}', [], self.kwargs)
- return self.vformat('{' + args[1].strip() + '}', [], self.kwargs)
- len(args) == 2
- if len(args) % 2 != 1:
- raise ValueError(_('lookup requires either 2 or an odd number of arguments'))
- len(args) % 2 != 1
- i = 0
- while i < len(args):
- if i + 1 >= len(args):
- return self.vformat('{' + args[i].strip() + '}', [], self.kwargs)
- if re.search(args[i], val):
- return self.vformat('{' + args[i + 1].strip() + '}', [], self.kwargs)
- i += 2
- continue
- re.search(args[i], val)
-
-
- def _test(self, val, value_if_set, value_not_set):
- if val:
- return value_if_set
- return value_not_set
-
-
- def _contains(self, val, test, value_if_present, value_if_not):
- if re.search(test, val):
- return value_if_present
- return value_if_not
-
-
- def _switch(self, val, *args):
- if len(args) % 2 != 1:
- raise ValueError(_('switch requires an odd number of arguments'))
- len(args) % 2 != 1
- i = 0
- while i < len(args):
- if i + 1 >= len(args):
- return args[i]
- if re.search(args[i], val):
- return args[i + 1]
- i += 2
- continue
- re.search(args[i], val)
-
-
- def _re(self, val, pattern, replacement):
- return re.sub(pattern, replacement, val)
-
-
- def _ifempty(self, val, value_if_empty):
- if val:
- return val
- return value_if_empty
-
-
- def _shorten(self, val, leading, center_string, trailing):
- l = max(0, int(leading))
- t = max(0, int(trailing))
- if len(val) > l + len(center_string) + t:
- return None + val[0:l] + center_string if t == 0 else val[-t:]
- return val
-
- functions = {
- 'uppercase': (0, (lambda s, x: x.upper())),
- 'lowercase': (0, (lambda s, x: x.lower())),
- 'titlecase': (0, (lambda s, x: titlecase(x))),
- 'capitalize': (0, (lambda s, x: x.capitalize())),
- 'contains': (3, _contains),
- 'ifempty': (1, _ifempty),
- 'lookup': (-1, _lookup),
- 're': (2, _re),
- 'shorten': (3, _shorten),
- 'switch': (-1, _switch),
- 'test': (2, _test) }
- format_string_re = re.compile('^(.*)\\|(.*)\\|(.*)$')
- compress_spaces = re.compile('\\s+')
- backslash_comma_to_comma = re.compile('\\\\,')
- arg_parser = re.Scanner([
- (',', (lambda x, t: '')),
- ('.*?((?<!\\\\),)', (lambda x, t: t[:-1])),
- ('.*?\\)', (lambda x, t: t[:-1]))])
-
- def get_value(self, key, args, kwargs):
- raise Exception('get_value must be implemented in the subclass')
-
-
- def _explode_format_string(self, fmt):
-
- try:
- matches = self.format_string_re.match(fmt)
- if matches is None or matches.lastindex != 3:
- return (fmt, '', '')
- return matches.groups()
- except:
- if DEBUG:
- traceback.print_exc()
-
- return (fmt, '', '')
-
-
-
- def format_field(self, val, fmt):
- (fmt, prefix, suffix) = self._explode_format_string(fmt)
- p = fmt.find('(')
- dispfmt = fmt
- if val:
- val = string.Formatter.format_field(self, val, dispfmt)
-
- if not val:
- return ''
- return prefix + val + suffix
-
-
- def vformat(self, fmt, args, kwargs):
- ans = string.Formatter.vformat(self, fmt, args, kwargs)
- return self.compress_spaces.sub(' ', ans).strip()
-
-
- def safe_format(self, fmt, kwargs, error_value, book):
- self.kwargs = kwargs
- self.book = book
- self.composite_values = { }
-
- try:
- ans = self.vformat(fmt, [], kwargs).strip()
- except:
- if DEBUG:
- traceback.print_exc()
-
- ans = error_value
-
- return ans
-
-
-
- class ValidateFormat(TemplateFormatter):
-
- def get_value(self, key, args, kwargs):
- return 'this is some text that should be long enough'
-
-
- def validate(self, x):
- return self.vformat(x, [], { })
-
-
- validation_formatter = ValidateFormat()
-