feat: release undergraduate integration 0.7.0
This commit is contained in:
@@ -26,13 +26,15 @@ List<UndergraduateActivity> parseActivityData(
|
||||
final m = matches[i], args = _strings(m[1]!);
|
||||
if (args.length != 7) throw const FormatException('课程活动字段不完整');
|
||||
final suffix = RegExp(r'\(([A-Za-z0-9_.-]+)\)$').firstMatch(args[3]);
|
||||
if (suffix == null || args[1].trim().isEmpty || args[5].trim().isEmpty)
|
||||
if (suffix == null || args[1].trim().isEmpty || args[5].trim().isEmpty) {
|
||||
throw const FormatException('教师、教室或课程序号缺失');
|
||||
}
|
||||
final bitmap = args[6];
|
||||
if (!RegExp(r'^0[01]+$').hasMatch(bitmap) ||
|
||||
bitmap.length > 64 ||
|
||||
(bitmap.length > 31 && bitmap.substring(31).contains('1')))
|
||||
(bitmap.length > 31 && bitmap.substring(31).contains('1'))) {
|
||||
throw const FormatException('上课周次超出1–30周');
|
||||
}
|
||||
final weeks = {
|
||||
for (var w = 1; w < bitmap.length && w <= 30; w++)
|
||||
if (bitmap[w] == '1') w,
|
||||
@@ -49,15 +51,17 @@ List<UndergraduateActivity> parseActivityData(
|
||||
final appends = RegExp(
|
||||
r'table\d+\.activities\[index\]\s*\[[^;]+?\]\s*=\s*activity\s*;',
|
||||
).allMatches(body).length;
|
||||
if (assignments.isEmpty || assignments.length != appends)
|
||||
if (assignments.isEmpty || assignments.length != appends) {
|
||||
throw const FormatException('课程节次赋值不完整');
|
||||
}
|
||||
for (final assignment in assignments) {
|
||||
final expression = RegExp(r'^\s*(\d+)\s*\*\s*unitCount\s*\+\s*(\d+)\s*$')
|
||||
.firstMatch(assignment[1]!);
|
||||
if (expression == null) throw const FormatException('不支持的节次表达式');
|
||||
final day = int.parse(expression[1]!), period = int.parse(expression[2]!);
|
||||
if (day > 6 || period >= unitCount)
|
||||
if (day > 6 || period >= unitCount) {
|
||||
throw const FormatException('课程星期或节次无效');
|
||||
}
|
||||
indices.add(day * unitCount + period);
|
||||
}
|
||||
result.add(
|
||||
@@ -113,8 +117,9 @@ List<String> _strings(String input) {
|
||||
final count = c == 'u' ? 4 : 2;
|
||||
if (p + count > input.length) throw const FormatException('字符串转义无效');
|
||||
final hex = input.substring(p, p + count);
|
||||
if (!RegExp(r'^[0-9a-fA-F]+$').hasMatch(hex))
|
||||
if (!RegExp(r'^[0-9a-fA-F]+$').hasMatch(hex)) {
|
||||
throw const FormatException('字符串转义无效');
|
||||
}
|
||||
b.writeCharCode(int.parse(hex, radix: 16));
|
||||
p += count;
|
||||
} else if (escapes.containsKey(c)) {
|
||||
|
||||
Reference in New Issue
Block a user