diff --git a/src/parsers/contest/HydroContestParser.ts b/src/parsers/contest/HydroContestParser.ts index 62859e2..37f5895 100644 --- a/src/parsers/contest/HydroContestParser.ts +++ b/src/parsers/contest/HydroContestParser.ts @@ -5,13 +5,9 @@ export class HydroContestParser extends SimpleContestParser { protected linkSelector = '.col--problem.col--problem-name > a'; protected problemParser = new HydroProblemParser(); - public getMatchPatterns(): string[] { - const patterns = []; - - for (const domain of ['hydro.ac', 'oiclass.com']) { - patterns.push(`https://${domain}/contest/*`); - } + protected domain = 'hydro.ac'; - return patterns; + public getMatchPatterns(): string[] { + return [`https://${this.domain}/contest/*`]; } } diff --git a/src/parsers/contest/OIClassContestParser.ts b/src/parsers/contest/OIClassContestParser.ts new file mode 100644 index 0000000..460c28f --- /dev/null +++ b/src/parsers/contest/OIClassContestParser.ts @@ -0,0 +1,8 @@ +import { OIClassProblemParser } from '../problem/OIClassProblemParser'; +import { HydroContestParser } from './HydroContestParser'; + +export class OIClassContestParser extends HydroContestParser { + protected problemParser = new OIClassProblemParser(); + + protected domain = 'oiclass.com'; +} diff --git a/src/parsers/parsers.ts b/src/parsers/parsers.ts index b671e8a..e1f0d70 100644 --- a/src/parsers/parsers.ts +++ b/src/parsers/parsers.ts @@ -29,6 +29,7 @@ import { LanqiaoContestParser } from './contest/LanqiaoContestParser'; import { LibreOJContestParser } from './contest/LibreOJContestParser'; import { LuoguContestParser } from './contest/LuoguContestParser'; import { NOJContestParser } from './contest/NOJContestParser'; +import { OIClassContestParser } from './contest/OIClassContestParser'; import { OpenJudgeContestParser } from './contest/OpenJudgeContestParser'; import { PEGJudgeContestParser } from './contest/PEGJudgeContestParser'; import { POJContestParser } from './contest/POJContestParser'; @@ -104,6 +105,7 @@ import { NepsAcademyProblemParser } from './problem/NepsAcademyProblemParser'; import { NewtonSchoolProblemParser } from './problem/NewtonSchoolProblemParser'; import { NOJProblemParser } from './problem/NOJProblemParser'; import { NowCoderProblemParser } from './problem/NowCoderProblemParser'; +import { OIClassProblemParser } from './problem/OIClassProblemParser'; import { OmegaUpProblemParser } from './problem/OmegaUpProblemParser'; import { OpenJudgeProblemParser } from './problem/OpenJudgeProblemParser'; import { OTOGProblemParser } from './problem/OTOGProblemParser'; @@ -285,6 +287,9 @@ export const parsers: Parser[] = [ new NowCoderProblemParser(), + new OIClassProblemParser(), + new OIClassContestParser(), + new OmegaUpProblemParser(), new OpenJudgeProblemParser(), diff --git a/src/parsers/problem/HydroProblemParser.ts b/src/parsers/problem/HydroProblemParser.ts index d694499..f1ecc02 100644 --- a/src/parsers/problem/HydroProblemParser.ts +++ b/src/parsers/problem/HydroProblemParser.ts @@ -4,21 +4,16 @@ import { htmlToElement } from '../../utils/dom'; import { Parser } from '../Parser'; export class HydroProblemParser extends Parser { - public getMatchPatterns(): string[] { - const patterns = []; - - for (const domain of ['hydro.ac', 'oiclass.com']) { - for (const path of ['p/*', 'd/*/p/*', 'contest/*/p/*']) { - patterns.push(`https://${domain}/${path}`); - } - } + protected domain = 'hydro.ac'; + protected judge = 'Hydro'; - return patterns; + public getMatchPatterns(): string[] { + return [`https://${this.domain}/p/*`, `https://${this.domain}/d/*/p/*`, `https://${this.domain}/contest/*/p/*`]; } public async parse(url: string, html: string): Promise { const elem = htmlToElement(html); - const task = new TaskBuilder('Hydro').setUrl(url); + const task = new TaskBuilder(this.judge).setUrl(url); task.setName(elem.querySelector('.section__title').lastChild.textContent.trim()); diff --git a/src/parsers/problem/OIClassProblemParser.ts b/src/parsers/problem/OIClassProblemParser.ts new file mode 100644 index 0000000..5b70eae --- /dev/null +++ b/src/parsers/problem/OIClassProblemParser.ts @@ -0,0 +1,6 @@ +import { HydroProblemParser } from './HydroProblemParser'; + +export class OIClassProblemParser extends HydroProblemParser { + protected domain = 'oiclass.com'; + protected judge = 'oiClass'; +}