aboutsummaryrefslogtreecommitdiffhomepage
path: root/libs/pysubs2/txt_generic.py
blob: 70bf3e31cd4b1fe04c2cd8c05cc3e00a88210837 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# coding=utf-8

from __future__ import print_function, division, unicode_literals
import re
from numbers import Number

from pysubs2.time import times_to_ms
from .formatbase import FormatBase
from .ssaevent import SSAEvent
from .ssastyle import SSAStyle


# thanks to http://otsaloma.io/gaupol/doc/api/aeidon.files.mpl2_source.html
MPL2_FORMAT = re.compile(r"^(?um)\[(-?\d+)\]\[(-?\d+)\](.*?)$")


class TXTGenericFormat(FormatBase):
    @classmethod
    def guess_format(cls, text):
        if MPL2_FORMAT.match(text):
            return "mpl2"


class MPL2Format(FormatBase):
    @classmethod
    def guess_format(cls, text):
        return TXTGenericFormat.guess_format(text)

    @classmethod
    def from_file(cls, subs, fp, format_, **kwargs):
        def prepare_text(lines):
            out = []
            for s in lines.split("|"):
                if s.startswith("/"):
                    out.append(r"{\i1}%s{\i0}" % s[1:])
                    continue
                out.append(s)
            return "\n".join(out)

        subs.events = [SSAEvent(start=times_to_ms(s=float(start) / 10), end=times_to_ms(s=float(end) / 10),
                       text=prepare_text(text)) for start, end, text in MPL2_FORMAT.findall(fp.getvalue())]

    @classmethod
    def to_file(cls, subs, fp, format_, **kwargs):
        raise NotImplemented