|
@@ -933,6 +933,37 @@ class YoutubeDL(object):
|
|
|
else:
|
|
|
filter_parts.append(string)
|
|
|
|
|
|
+ def _remove_unused_ops(tokens):
|
|
|
+ # Remove operators that we don't use and join them with the sourrounding strings
|
|
|
+ # for example: 'mp4' '-' 'baseline' '-' '16x9' is converted to 'mp4-baseline-16x9'
|
|
|
+ ALLOWED_OPS = ('/', '+', ',', '(', ')')
|
|
|
+ last_string, last_start, last_end, last_line = None, None, None, None
|
|
|
+ for type, string, start, end, line in tokens:
|
|
|
+ if type == tokenize.OP and string == '[':
|
|
|
+ if last_string:
|
|
|
+ yield tokenize.NAME, last_string, last_start, last_end, last_line
|
|
|
+ last_string = None
|
|
|
+ yield type, string, start, end, line
|
|
|
+ # everything inside brackets will be handled by _parse_filter
|
|
|
+ for type, string, start, end, line in tokens:
|
|
|
+ yield type, string, start, end, line
|
|
|
+ if type == tokenize.OP and string == ']':
|
|
|
+ break
|
|
|
+ elif type == tokenize.OP and string in ALLOWED_OPS:
|
|
|
+ if last_string:
|
|
|
+ yield tokenize.NAME, last_string, last_start, last_end, last_line
|
|
|
+ last_string = None
|
|
|
+ yield type, string, start, end, line
|
|
|
+ elif type in [tokenize.NAME, tokenize.NUMBER, tokenize.OP]:
|
|
|
+ if not last_string:
|
|
|
+ last_string = string
|
|
|
+ last_start = start
|
|
|
+ last_end = end
|
|
|
+ else:
|
|
|
+ last_string += string
|
|
|
+ if last_string:
|
|
|
+ yield tokenize.NAME, last_string, last_start, last_end, last_line
|
|
|
+
|
|
|
def _parse_format_selection(tokens, inside_merge=False, inside_choice=False, inside_group=False):
|
|
|
selectors = []
|
|
|
current_selector = None
|
|
@@ -1111,7 +1142,7 @@ class YoutubeDL(object):
|
|
|
|
|
|
stream = io.BytesIO(format_spec.encode('utf-8'))
|
|
|
try:
|
|
|
- tokens = list(compat_tokenize_tokenize(stream.readline))
|
|
|
+ tokens = list(_remove_unused_ops(compat_tokenize_tokenize(stream.readline)))
|
|
|
except tokenize.TokenError:
|
|
|
raise syntax_error('Missing closing/opening brackets or parenthesis', (0, len(format_spec)))
|
|
|
|