Add $lenmulti function

This commit is contained in:
Sophist
2017-04-29 13:51:18 +01:00
parent 60983a2a22
commit 602dfbb36e
2 changed files with 33 additions and 0 deletions

View File

@@ -666,6 +666,23 @@ def func_len(parser, text=""):
return string_(len(text))
def func_lenmulti(parser, multi, separator=MULTI_VALUED_JOINER):
if (isinstance(multi, ScriptExpression) and
len(multi) == 1 and
isinstance(multi[0], ScriptVariable)):
multi = multi[0]
if isinstance(multi, ScriptVariable):
if multi.name.startswith(u"_"):
name = u"~" + multi.name[1:]
else:
name = multi.name
return func_len(parser, parser.context.getall(name))
multi = multi.eval(parser)
return func_len(parser, multi.split(separator) if separator else [multi])
def func_performer(parser, pattern="", join=", "):
values = []
for name, value in parser.context.items():
@@ -853,6 +870,7 @@ register_script_function(func_inmulti, "inmulti", eval_args=False)
register_script_function(func_copy, "copy")
register_script_function(func_copymerge, "copymerge")
register_script_function(func_len, "len")
register_script_function(func_lenmulti, "lenmulti", eval_args=False)
register_script_function(func_performer, "performer")
register_script_function(func_matchedtracks, "matchedtracks")
register_script_function(func_is_complete, "is_complete")

View File

@@ -418,3 +418,18 @@ class ScriptParserTest(unittest.TestCase):
self.parser.eval("$inmulti(%foo%,irst; Second; Thi)", context), "")
self.assertEqual(
self.parser.eval("$inmulti(%foo%,First; Second; Third)", context), "")
def test_cmd_lenmulti(self):
context = Metadata()
context["foo"] = "First; Second; Third"
context["bar"] = ["First", "Second", "Third"]
self.assertEqual(
self.parser.eval("$len(%foo%)", context), "20")
self.assertEqual(
self.parser.eval("$len(%bar%)", context), "20")
self.assertEqual(
self.parser.eval("$lenmulti(%foo%)", context), "1")
self.assertEqual(
self.parser.eval("$lenmulti(%bar%)", context), "3")
self.assertEqual(
self.parser.eval("$lenmulti(%foo%.)", context), "3")