export declare enum ScheduleType { PRIMARY = 0, SECONDARY = 1, EXAM = 2, CUSTOM = 3 } export declare const MAX_WEEK_LIST: number[]; /** * 区分两个概念。 * 时间块:指的是指明星期数、周几、从第几节开始到第几节结束的一段时间。 * 时间片:指的是给定周几、从第几节开始到第几节结束后,额外指定在哪些星期活跃的几段时间。 * - 可以用仅有某一周活跃的时间片表示一个时间块 */ export interface TimeSlice { dayOfWeek: number; begin: number; end: number; activeWeeks: number[]; } export interface ExamTimeSlice { dayOfWeek: number; weekNumber: number; begin: string; end: string; } /** * 确定两个时间片发生时间块重叠的星期数 * @param slice 一个时间片 * @param other 另一个时间片 * @return 数字数组,表示发生重叠的星期数 */ export declare const overlappedWeeks: (slice: TimeSlice, other: TimeSlice) => number[]; /** * 确定两个时间片发生时间块相邻的星期数 * @param slice 一个时间片 * @param other 另一个时间片 * @return 数字数组,表示发生相邻的星期数 */ export declare const adjacentWeeks: (slice: TimeSlice, other: TimeSlice) => number[]; /** * 时间块的比较函数 * 不考虑 activeWeeks,其余三个属性优先级从高到低是 dayOfWeek > begin > end * @param slice 一个时间片 * @param other 另一个时间块 * @returns 数字类型,负数表示前者小,正数表示前者大,零表示相等 */ export declare const timeSliceComp: (slice: TimeSlice, other: TimeSlice) => number; export interface ScheduleTime { base: TimeSlice[]; exams?: ExamTimeSlice[]; } /** * 查询该计划时间在给定的星期是否有安排 * @param time 计划时间 * @param week 要查询的星期数 * @returns 布尔值,表示是否安排 */ export declare const activeWeek: (time: ScheduleTime, week: number) => boolean; /** * 给计划时间插入新的时间片,如果发生时间块相邻,则自动合并 * @note 必须保证插入的时间块和已有的不重叠,若重叠,插入失败 * @param time 接受新时间片的计划时间 * @param elem 需要插入的时间片 * @return 布尔类型,表示插入是否成功 */ export declare const scheduleTimeAdd: (time: ScheduleTime, elem: TimeSlice) => boolean; /** * 从 time.base 中删除一个时间片 * @param time 需要删除时间片的计划时间 * @param elem 要删除的时间片 * @note 本函数实际是保证操作后的 time.base 中对应的时间片的 activeWeeks 不包含 elem 中所指定的星期数 * 所以 elem 的 activeWeeks 可以冗余 * @returns 实际上 time.base 中对应的时间片中 activeWeeks 被删除掉的星期数构成的列表 * 如果删除失败(time.base 中没有 elem 对应的时间片),返回空列表 */ export declare const scheduleTimeRemove: (time: ScheduleTime, elem: TimeSlice) => number[]; export interface Schedule { name: string; location: string; type: ScheduleType; activeTime: ScheduleTime; delOrHideTime: ScheduleTime; } /** * 返回计划的深拷贝 * @param schedule 需要拷贝的计划 * @returns 拷贝得到的计划 * @note 这个函数的是为了触发 redux 的重新渲染,仅仅修改内部成员无法触发 * 如果有更好的解决方法,欢迎废弃该函数 */ export declare const scheduleDeepCopy: (schedule: Schedule) => Schedule; /** * 用于删除或隐藏某一个时间片 * @param schedule 需要操作的计划 * @param elem 需要删除或隐藏的时间片 * @returns 实际删除或隐藏的星期数列表 * @note 允许传入的 elem 有冗余甚至不存在于活跃时间列表中 */ export declare const delOrHide: (schedule: Schedule, elem: TimeSlice) => number[]; /** * 用于取消删除或隐藏某一个时间片 * @param schedule 需要操作的计划 * @param elem 需要取消删除或隐藏的时间片 * @returns 实际取消删除或隐藏的星期数列表 * @note 允许传入的 elem 有冗余甚至不存在于已删除或隐藏时间列表中 */ export declare const removeDelOrHide: (schedule: Schedule, elem: TimeSlice) => number[]; /** * 合并计划列表中相同的计划,名称和地点相同的计划认为是同一个计划 * @param base 需要去重的计划列表 * @returns 返回去重后的计划列表 */ export declare const mergeSchedules: (base: Schedule[]) => Schedule[]; /** * 给定一个新计划以及一个计划列表,求出计划列表中所有和该新计划发生重叠的时间块 * @param tester 新计划 * @param base 计划列表 * @return 返回类型为 [string, ScheduleType, TimeSlice] 的元组的列表 * 元组三项的含义分别为计划名称、计划类型、发生重叠的时间块 * @note 由于这里判定冲突的量级是时间块而不是时间片,所以 TimeSlice 的 activeWeeks 必然只有一项 */ export declare const getOverlappedBlock: (tester: Schedule, base: Schedule[]) => [string, ScheduleType, TimeSlice][]; export declare const parseJSON: (json: any[], firstDay: string) => Schedule[]; export declare const parseSecondaryWeek: (src: string, callback: (week: number) => void) => boolean; export declare const parseScript: (script: string, verbose?: boolean) => Schedule[] | [string, string, boolean][];