diff --git a/packages/vjudge/package.json b/packages/vjudge/package.json index b59a403c2..6140c8a8a 100644 --- a/packages/vjudge/package.json +++ b/packages/vjudge/package.json @@ -1,6 +1,6 @@ { "name": "@hydrooj/vjudge", - "version": "1.5.0", + "version": "1.5.1", "description": "Submit problems to remote oj", "main": "package.json", "repository": "https://github.com/hydro-dev/Hydro.git", diff --git a/packages/vjudge/src/providers/poj.ts b/packages/vjudge/src/providers/poj.ts index 7a01ddde4..51f75d0ae 100644 --- a/packages/vjudge/src/providers/poj.ts +++ b/packages/vjudge/src/providers/poj.ts @@ -59,9 +59,7 @@ poj.6: const langs = { default: 'en', - 'zh-CN': 'zh_CN', - es: 'es', - ja: 'ja', + 'zh-CN': 'zh', }; export default class POJProvider implements IBasicProvider { @@ -129,6 +127,7 @@ export default class POJProvider implements IBasicProvider { const memory = info.children[2].innerHTML.split(' ')[1].toLowerCase().trim(); const contents = {}; const images = {}; + let tag = ''; for (const lang of languages) { await sleep(1000); const { text } = await this.get(`/problem?id=${id.split('P')[1]}&lang=${lang}&change=true`); @@ -157,6 +156,10 @@ export default class POJProvider implements IBasicProvider { if (node.className.includes('pst')) { if (!node.innerHTML.startsWith('Sample ')) { html += `

${htmlEncode(node.innerHTML)}

`; + if (node.textContent === 'Source') { + tag = node.nextElementSibling.textContent.trim(); + node.nextElementSibling.innerHTML = tag; + } } else if (node.innerHTML.startsWith('Sample Input')) { lastId++; markNext = 'input'; @@ -164,16 +167,37 @@ export default class POJProvider implements IBasicProvider { markNext = 'output'; } } else if (node.className.includes('sio')) { - html += `
${htmlEncode(node.innerHTML)}
`; + html += `\n\n
${node.innerHTML}
\n\n`; } else if (node.className.includes('ptx')) { - for (const item of node.innerHTML.split('\n
\n
')) { - const p = page.createElement('p'); - p.innerHTML = item.trim(); - html += p.outerHTML; + for (const primaryTd of node.querySelectorAll('td')) { + const td = page.createElement('td'); + td.textContent = primaryTd.textContent; + if (primaryTd.colSpan > 1) td.colSpan = primaryTd.colSpan; + primaryTd.replaceWith(td); + } + for (const primaryPre of node.querySelectorAll('pre')) { + const pre = page.createElement('pre'); + for (const inner of primaryPre.innerHTML.split('
')) { + if (inner !== '') { + const preP = page.createElement('p'); + preP.innerHTML = inner; + pre.append(preP); + } + } + primaryPre.replaceWith(pre); + } + for (const item of node.innerHTML.split('\n
')) { + if (item !== '') { + const p = page.createElement('p'); + p.innerHTML = item.trim().replace(/\$/g, '$'); + html += p.outerHTML; + } } } else html += node.innerHTML; } - contents[langs[lang]] = html; + if (lang in langs) { + contents[langs[lang]] = html; + } } return { title: main.getElementsByClassName('ptt')[0].innerHTML, @@ -181,7 +205,7 @@ export default class POJProvider implements IBasicProvider { 'config.yaml': Buffer.from(`time: ${time}\nmemory: ${memory}\ntype: remote_judge\nsubType: poj\ntarget: ${id}`), }, files, - tag: [], + tag: [tag], content: JSON.stringify(contents), }; }