mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Tag mapper: Add rule types to upper-case, lower-case or capitalize tags
This commit is contained in:
parent
5a488dc7fd
commit
b53305c316
@ -71,6 +71,15 @@ def apply_rules(tag, rules):
|
|||||||
break
|
break
|
||||||
tags.appendleft(tag)
|
tags.appendleft(tag)
|
||||||
break
|
break
|
||||||
|
if ac == 'capitalize':
|
||||||
|
ans.append(tag.capitalize())
|
||||||
|
break
|
||||||
|
if ac == 'lower':
|
||||||
|
ans.append(icu_lower(tag))
|
||||||
|
break
|
||||||
|
if ac == 'upper':
|
||||||
|
ans.append(icu_upper(tag))
|
||||||
|
break
|
||||||
else: # no rule matched, default keep
|
else: # no rule matched, default keep
|
||||||
ans.append(tag)
|
ans.append(tag)
|
||||||
|
|
||||||
@ -99,34 +108,36 @@ def map_tags(tags, rules=()):
|
|||||||
return uniq(filter(None, ans))
|
return uniq(filter(None, ans))
|
||||||
|
|
||||||
def test():
|
def test():
|
||||||
rules = [{'action':'replace', 'query':'t1', 'match_type':'one_of', 'replace':'t2'}]
|
|
||||||
assert map_tags(['t1', 'x1'], rules) == ['t2', 'x1']
|
def rule(action, query, replace=None, match_type='one_of'):
|
||||||
rules = [{'action':'replace', 'query':'(.)1', 'match_type':'matches', 'replace':r'\g<1>2'}]
|
ans = {'action':action, 'query': query, 'match_type':match_type}
|
||||||
assert map_tags(['t1', 'x1'], rules) == ['t2', 'x2']
|
if replace is not None:
|
||||||
rules = [{'action':'replace', 'query':'t1', 'match_type':'one_of', 'replace':'t2, t3'}]
|
ans['replace'] = replace
|
||||||
assert map_tags(['t1', 'x1'], rules) == ['t2', 't3', 'x1']
|
return ans
|
||||||
rules = [{'action':'replace', 'query':'(.)1', 'match_type':'matches', 'replace':r'\g<1>2,3'}]
|
|
||||||
assert map_tags(['t1', 'x1'], rules) == ['t2', '3', 'x2']
|
def run(rules, tags, expected):
|
||||||
rules = [
|
if isinstance(rules, dict):
|
||||||
{'action':'replace', 'query':'t1', 'match_type':'one_of', 'replace':r't2,t3'},
|
rules = [rules]
|
||||||
{'action':'remove', 'query':'t2', 'match_type':'one_of'},
|
if isinstance(tags, type('')):
|
||||||
]
|
tags = [x.strip() for x in tags.split(',')]
|
||||||
assert map_tags(['t1', 'x1'], rules) == ['t3', 'x1']
|
if isinstance(expected, type('')):
|
||||||
rules = [{'action':'replace', 'query':'t1', 'match_type':'one_of', 'replace':'t1'}]
|
expected = [x.strip() for x in expected.split(',')]
|
||||||
assert map_tags(['t1', 'x1'], rules) == ['t1', 'x1']
|
ans = map_tags(tags, rules)
|
||||||
rules = [
|
if ans != expected:
|
||||||
{'action':'replace', 'query':'t1', 'match_type':'one_of', 'replace':'t2'},
|
raise AssertionError('Expected: %r != %r' % (expected, ans))
|
||||||
{'action':'replace', 'query':'t2', 'match_type':'one_of', 'replace':'t1'},
|
|
||||||
]
|
run(rule('capitalize', 't1,t2'), 't1,x1', 'T1,x1')
|
||||||
assert map_tags(['t1', 't2'], rules) == ['t1', 't2']
|
run(rule('upper', 'ta,t2'), 'ta,x1', 'TA,x1')
|
||||||
rules = [
|
run(rule('lower', 'ta,x1'), 'TA,X1', 'ta,x1')
|
||||||
{'action':'replace', 'query':'a', 'match_type':'one_of', 'replace':'A'},
|
run(rule('replace', 't1', 't2'), 't1,x1', 't2,x1')
|
||||||
]
|
run(rule('replace', '(.)1', r'\g<1>2', 'matches'), 't1,x1', 't2,x2')
|
||||||
assert map_tags(['a', 'b'], rules) == ['A', 'b']
|
run(rule('replace', '(.)1', r'\g<1>2,3', 'matches'), 't1,x1', 't2,3,x2')
|
||||||
rules = [
|
run(rule('replace', 't1', 't2, t3'), 't1,x1', 't2,t3,x1')
|
||||||
{'action':'replace', 'query':'a,b', 'match_type':'one_of', 'replace':'A,B'},
|
run([rule('replace', 't1', 't2,t3'), rule('remove', 't2')], 't1,x1', 't3,x1')
|
||||||
]
|
run(rule('replace', 't1', 't1'), 't1,x1', 't1,x1')
|
||||||
assert map_tags(['a', 'b'], rules) == ['A', 'B']
|
run([rule('replace', 't1', 't2'), rule('replace', 't2', 't1')], 't1,t2', 't1,t2')
|
||||||
|
run(rule('replace', 'a', 'A'), 'a,b', 'A,b')
|
||||||
|
run(rule('replace', 'a,b', 'A,B'), 'a,b', 'A,B')
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
test()
|
test()
|
||||||
|
@ -26,7 +26,10 @@ class RuleEdit(QWidget):
|
|||||||
ACTION_MAP = OrderedDict((
|
ACTION_MAP = OrderedDict((
|
||||||
('remove', _('Remove')),
|
('remove', _('Remove')),
|
||||||
('replace', _('Replace')),
|
('replace', _('Replace')),
|
||||||
('keep', _('Keep'))
|
('keep', _('Keep')),
|
||||||
|
('capitalize', _('Capitalize')),
|
||||||
|
('lower', _('Lower-case')),
|
||||||
|
('upper', _('Upper-case')),
|
||||||
))
|
))
|
||||||
|
|
||||||
MATCH_TYPE_MAP = OrderedDict((
|
MATCH_TYPE_MAP = OrderedDict((
|
||||||
|
Loading…
x
Reference in New Issue
Block a user