diff --git a/ass_tag_parser/__init__.py b/ass_tag_parser/__init__.py index a7cfec9..286a132 100644 --- a/ass_tag_parser/__init__.py +++ b/ass_tag_parser/__init__.py @@ -1,3 +1,4 @@ +from __future__ import annotations from .ass_composer import compose_ass from .ass_parser import ass_to_plaintext, parse_ass from .ass_struct import * diff --git a/ass_tag_parser/ass_composer.py b/ass_tag_parser/ass_composer.py index c65589b..765342d 100644 --- a/ass_tag_parser/ass_composer.py +++ b/ass_tag_parser/ass_composer.py @@ -1,3 +1,4 @@ +from __future__ import annotations from dataclasses import dataclass from ass_tag_parser.ass_struct import ( diff --git a/ass_tag_parser/ass_parser.py b/ass_tag_parser/ass_parser.py index 3898463..96f2094 100644 --- a/ass_tag_parser/ass_parser.py +++ b/ass_tag_parser/ass_parser.py @@ -1,8 +1,15 @@ +from __future__ import annotations import re from dataclasses import dataclass -from functools import cache from typing import Any, Iterable, Optional, Union +import sys +sys_version=int(sys.version_info[1]) +if sys_version >= 9: + from functools import cache +elif sys_version < 9: + pass + from ass_tag_parser.ass_struct import ( AssItem, AssTag, @@ -698,20 +705,38 @@ def parse_ass(text: str) -> list[AssItem]: return list(_parse_ass(ctx)) -@cache -def ass_to_plaintext(text: str) -> str: - """Strip ASS tags from an ASS line. +if sys_version >= 9: + @cache + def ass_to_plaintext(text: str) -> str: + """Strip ASS tags from an ASS line. - :param text: input ASS line - :return: plain text - """ - try: - ass_line = parse_ass(text) - except ParseError: - ret = str(re.sub("{[^}]*}", "", text)) - else: - ret = "" - for item in ass_line: - if isinstance(item, AssText): - ret += item.text - return ret.replace("\\h", " ").replace("\\n", " ").replace("\\N", "\n") + :param text: input ASS line + :return: plain text + """ + try: + ass_line = parse_ass(text) + except ParseError: + ret = str(re.sub("{[^}]*}", "", text)) + else: + ret = "" + for item in ass_line: + if isinstance(item, AssText): + ret += item.text + return ret.replace("\\h", " ").replace("\\n", " ").replace("\\N", "\n") +elif sys_version < 9: + def ass_to_plaintext(text: str) -> str: + """Strip ASS tags from an ASS line. + + :param text: input ASS line + :return: plain text + """ + try: + ass_line = parse_ass(text) + except ParseError: + ret = str(re.sub("{[^}]*}", "", text)) + else: + ret = "" + for item in ass_line: + if isinstance(item, AssText): + ret += item.text + return ret.replace("\\h", " ").replace("\\n", " ").replace("\\N", "\n") diff --git a/ass_tag_parser/ass_struct.py b/ass_tag_parser/ass_struct.py index ba54f5d..a7b4898 100644 --- a/ass_tag_parser/ass_struct.py +++ b/ass_tag_parser/ass_struct.py @@ -1,3 +1,4 @@ +from __future__ import annotations from dataclasses import dataclass, field from typing import Optional diff --git a/ass_tag_parser/common.py b/ass_tag_parser/common.py index ebd68ec..fafca6a 100644 --- a/ass_tag_parser/common.py +++ b/ass_tag_parser/common.py @@ -1,7 +1,7 @@ +from __future__ import annotations from dataclasses import dataclass from typing import Union - @dataclass class Meta: start: int diff --git a/ass_tag_parser/draw_composer.py b/ass_tag_parser/draw_composer.py index 05a16b6..6235682 100644 --- a/ass_tag_parser/draw_composer.py +++ b/ass_tag_parser/draw_composer.py @@ -1,3 +1,4 @@ +from __future__ import annotations from typing import Any from ass_tag_parser.common import smart_float diff --git a/ass_tag_parser/draw_parser.py b/ass_tag_parser/draw_parser.py index 376d0f0..c0bc42d 100644 --- a/ass_tag_parser/draw_parser.py +++ b/ass_tag_parser/draw_parser.py @@ -1,6 +1,10 @@ +from __future__ import annotations from dataclasses import dataclass from typing import Iterable, Optional, Union, cast +import sys +sys_version=int(sys.version_info[1]) + from ass_tag_parser.common import Meta from ass_tag_parser.draw_struct import ( AssDrawCmd, @@ -81,12 +85,10 @@ def _parse_draw_commands(ctx: _ParseContext) -> Iterable[AssDrawCmd]: elif cmd == "l": ret = AssDrawCmdLine(list(_read_points(ctx.io, min_count=1))) elif cmd == "b": - ret = AssDrawCmdBezier( - cast( - tuple[AssDrawPoint, AssDrawPoint, AssDrawPoint], - tuple(_read_points(ctx.io, min_count=3, max_count=3)), - ) - ) + if sys_version >= 9: + ret = AssDrawCmdBezier(cast(tuple[AssDrawPoint, AssDrawPoint, AssDrawPoint], tuple(_read_points(ctx.io, min_count=3, max_count=3)),)) + elif sys_version < 9: + ret = AssDrawCmdBezier(cast(tuple, tuple(_read_points(ctx.io, min_count=3, max_count=3)),)) elif cmd == "s": ret = AssDrawCmdSpline( list(_read_points(ctx.io, min_count=3, max_count=None)) diff --git a/ass_tag_parser/draw_struct.py b/ass_tag_parser/draw_struct.py index bfeeaef..fc2186f 100644 --- a/ass_tag_parser/draw_struct.py +++ b/ass_tag_parser/draw_struct.py @@ -1,3 +1,4 @@ +from __future__ import annotations from dataclasses import dataclass from typing import Optional diff --git a/ass_tag_parser/errors.py b/ass_tag_parser/errors.py index 198ade9..9c3b8fc 100644 --- a/ass_tag_parser/errors.py +++ b/ass_tag_parser/errors.py @@ -1,6 +1,6 @@ +from __future__ import annotations from typing import Optional - class BaseError(Exception): pass diff --git a/ass_tag_parser/io.py b/ass_tag_parser/io.py index 1853c47..45d6025 100644 --- a/ass_tag_parser/io.py +++ b/ass_tag_parser/io.py @@ -1,7 +1,7 @@ +from __future__ import annotations import io from typing import Optional - class MyIO: def __init__( self,