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),
};
}