mirror of
https://gitcode.com/gh_mirrors/hy/Hydro.git
synced 2026-10-20 01:38:19 +08:00
core: 添加buildContent方法
This commit is contained in:
1 parent
f81d7daa54
commit
19ebf5e9a8
5 files changed
+116
-92
No files matched your search
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "hydrooj",
|
||||
"version": "2.13.52",
|
||||
"version": "2.13.53",
|
||||
"bin": "bin/hydrooj.js",
|
||||
"main": "dist/loader.js",
|
||||
"typings": "dist/loader.d.ts",
|
||||
|
||||
@@ -201,3 +201,71 @@ export function sleep(timeout: number) {
|
||||
}, timeout);
|
||||
});
|
||||
}
|
||||
|
||||
function deepen(modifyString: (source: string) => string) {
|
||||
function modifyObject<T>(source: T): T {
|
||||
if (typeof source !== 'object' || !source) return source;
|
||||
if (Array.isArray(source)) return source.map(modifyObject) as any;
|
||||
const result = {} as T;
|
||||
for (const key in source) {
|
||||
result[modifyString(key)] = modifyObject(source[key]);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
return function t<T>(source: T): T {
|
||||
if (typeof source === 'string') {
|
||||
return modifyString(source) as any;
|
||||
}
|
||||
return modifyObject(source);
|
||||
};
|
||||
}
|
||||
|
||||
export const camelCase = deepen((source) => source.replace(/[_-][a-z]/g, (str) => str.slice(1).toUpperCase()));
|
||||
export const paramCase = deepen((source) => source.replace(/_/g, '-').replace(/(?<!^)[A-Z]/g, (str) => `-${str.toLowerCase()}`));
|
||||
export const snakeCase = deepen((source) => source.replace(/-/g, '_').replace(/(?<!^)[A-Z]/g, (str) => `_${str.toLowerCase()}`));
|
||||
|
||||
interface ProblemSource {
|
||||
description?: string,
|
||||
input?: string,
|
||||
output?: string,
|
||||
samples?: [string, string][],
|
||||
hint?: string,
|
||||
source?: string,
|
||||
}
|
||||
|
||||
export function buildContent(source: ProblemSource, type: 'markdown' | 'html' = 'markdown', translate?: Function) {
|
||||
const _ = translate || ((s: string) => s);
|
||||
return type === 'html'
|
||||
? [
|
||||
...source.description ? [`<h2>${_('Description')}</h2>`, source.description] : [],
|
||||
...source.input ? [`<h2>${_('Input Format')}</h2>`, source.input] : [],
|
||||
...source.output ? [`<h2>'${_('Output Format')}</h2>`, source.output] : [],
|
||||
...(source.samples).map((sample, i) => [
|
||||
`<h2>${_('Sample Input')} ${i + 1}</h2><pre>`,
|
||||
sample[0],
|
||||
`</pre><h2>${_('Sample Output')} ${i + 1}</h2><pre>`,
|
||||
sample[1],
|
||||
'</pre>',
|
||||
].join('\n')),
|
||||
...source.hint ? [`<h2>${_('Hint')}</h2>`, source.hint] : [],
|
||||
...source.source ? [`<h2>${_('Source')}</h2>`, source.source] : [],
|
||||
].join('\n')
|
||||
: [
|
||||
...source.description ? [`## ${_('Description')}`, source.description] : [],
|
||||
...source.input ? [`## ${_('Input Format')}`, source.input] : [],
|
||||
...source.output ? [`## '${_('Output Format')}`, source.output] : [],
|
||||
...(source.samples).map((sample, i) => [
|
||||
`## ${_('Sample Input')} ${i + 1}`,
|
||||
'```',
|
||||
sample[0],
|
||||
'```',
|
||||
`## ${_('Sample Output')} ${i + 1}`,
|
||||
'```',
|
||||
sample[1],
|
||||
'```',
|
||||
].join('\n')),
|
||||
...source.hint ? [`## ${_('Hint')}`, source.hint] : [],
|
||||
...source.source ? [`## ${_('Source')}`, source.source] : [],
|
||||
].join('\n');
|
||||
}
|
||||
Reference in new issue
Block a user