dart-app-core/lib/subtitle/parser_srt.dart
2023-04-01 22:02:59 +09:00

49 lines
1.7 KiB
Dart

// ignore: file_names
import 'package:dart_framework/subtitle/parser_base.dart';
class ParserSRT extends ParserBase {
@override
RegExp get regExp => RegExp(
r'((\d{2}):(\d{2}):(\d{2})\,(\d+)) +--> +((\d{2}):(\d{2}):(\d{2})\,(\d{3})).*[\r\n]+\s*((?:(?!\r?\n\r?).)*(\r\n|\r|\n)(?:.*))',
caseSensitive: false,
multiLine: true,
);
@override
Subtitles getSubtitlesData(String subtitlesContent) {
final matches = regExp.allMatches(subtitlesContent).toList();
final subtitleList = <Subtitle>[];
for (final regExpMatch in matches) {
final startTimeHours = int.parse(regExpMatch.group(2)!);
final startTimeMinutes = int.parse(regExpMatch.group(3)!);
final startTimeSeconds = int.parse(regExpMatch.group(4)!);
final startTimeMilliseconds = int.parse(regExpMatch.group(5)!);
final endTimeHours = int.parse(regExpMatch.group(7)!);
final endTimeMinutes = int.parse(regExpMatch.group(8)!);
final endTimeSeconds = int.parse(regExpMatch.group(9)!);
final endTimeMilliseconds = int.parse(regExpMatch.group(10)!);
final text = removeAllHtmlTags(regExpMatch.group(11)!);
final startTime = Time(Duration(
hours: startTimeHours,
minutes: startTimeMinutes,
seconds: startTimeSeconds,
milliseconds: startTimeMilliseconds,
));
final endTime = Time(Duration(
hours: endTimeHours,
minutes: endTimeMinutes,
seconds: endTimeSeconds,
milliseconds: endTimeMilliseconds,
));
subtitleList.add(
Subtitle(startTime: startTime, endTime: endTime, text: text.trim()),
);
}
return Subtitles(subtitles: subtitleList);
}
}