57 lines
3.4 KiB
JavaScript
57 lines
3.4 KiB
JavaScript
import fs from 'node:fs';
|
|
import path from 'node:path';
|
|
import one from './docs-ko-001.mjs';
|
|
import two from './docs-ko-002.mjs';
|
|
import three from './docs-ko-003.mjs';
|
|
import four from './docs-ko-004.mjs';
|
|
import five from './docs-ko-005.mjs';
|
|
import six from './docs-ko-006.mjs';
|
|
import seven from './docs-ko-007.mjs';
|
|
import eight from './docs-ko-008.mjs';
|
|
import nine from './docs-ko-009.mjs';
|
|
import ten from './docs-ko-010.mjs';
|
|
import eleven from './docs-ko-011.mjs';
|
|
import twelve from './docs-ko-012.mjs';
|
|
import thirteen from './docs-ko-013.mjs';
|
|
import fourteen from './docs-ko-014.mjs';
|
|
import fifteen from './docs-ko-015.mjs';
|
|
import sixteen from './docs-ko-016.mjs';
|
|
import seventeen from './docs-ko-017.mjs';
|
|
import eighteen from './docs-ko-018.mjs';
|
|
import nineteen from './docs-ko-019.mjs';
|
|
import twenty from './docs-ko-020.mjs';
|
|
import twentyone from './docs-ko-021.mjs';
|
|
import twentytwo from './docs-ko-022.mjs';
|
|
import twentythree from './docs-ko-023.mjs';
|
|
import twentyfour from './docs-ko-024.mjs';
|
|
import twentyfive from './docs-ko-025.mjs';
|
|
import twentysix from './docs-ko-026.mjs';
|
|
import twentyseven from './docs-ko-027.mjs';
|
|
import twentyeight from './docs-ko-028.mjs';
|
|
import twentynine from './docs-ko-029.mjs';
|
|
import thirty from './docs-ko-030.mjs';
|
|
import thirtyone from './docs-ko-031.mjs';
|
|
import thirtytwo from './docs-ko-032.mjs';
|
|
const translations={...one,...two,...three,...four,...five,...six,...seven,...eight,...nine,...ten,...eleven,...twelve,...thirteen,...fourteen,...fifteen,...sixteen,...seventeen,...eighteen,...nineteen,...twenty,...twentyone,...twentytwo,...twentythree,...twentyfour,...twentyfive,...twentysix,...twentyseven,...twentyeight,...twentynine,...thirty,...thirtyone,...thirtytwo};
|
|
const order=JSON.parse(fs.readFileSync('work/trilium/docs-order.json','utf8'));
|
|
const base='work/trilium/scoped/doc_notes/en',out='work/trilium/release/doc_notes/en';
|
|
const errors=[];
|
|
const escape=s=>s.replaceAll('&','&').replaceAll('"','"').replaceAll('<','<');
|
|
const assets=s=>[...s.matchAll(/\b(?:href|src)\s*=\s*["']([^"']+)["']/g)].map(m=>m[1]).sort();
|
|
for(const [key,render]of Object.entries(translations)){
|
|
const original=fs.readFileSync(base+'/'+order[key],'utf8');
|
|
const anchors=[...original.matchAll(/<a\b([^>]*?)>([\s\S]*?)<\/a>/g)];
|
|
const images=[...original.matchAll(/<img\b[^>]*>/g)];
|
|
const pres=[...original.matchAll(/<pre\b[^>]*>[\s\S]*?<\/pre>/g)];
|
|
const translated=render({
|
|
a:(i,label)=>{if(!anchors[i])throw Error('Missing anchor '+key+':'+i);return '<a'+anchors[i][1]+'>'+label+'</a>';},
|
|
img:(i,alt)=>{if(!images[i])throw Error('Missing image '+key+':'+i);return images[i][0].replace(/\s+alt\s*=\s*(?:"[^"]*"|'[^']*')/g,'').replace(/\s*\/?\s*>$/,' alt="'+escape(alt)+'">');},
|
|
pre:i=>{if(!pres[i])throw Error('Missing code '+key+':'+i);return pres[i][0];}
|
|
});
|
|
if(JSON.stringify(assets(original))!==JSON.stringify(assets(translated)))errors.push({index:Number(key),path:order[key],reason:'Links or image references changed',original:assets(original),translated:assets(translated)});
|
|
const dest=out+'/'+order[key];fs.mkdirSync(path.dirname(dest),{recursive:true});fs.writeFileSync(dest,translated+'\n');
|
|
}
|
|
fs.writeFileSync('work/trilium/docs-validation.json',JSON.stringify({translated:Object.keys(translations).length,total:order.length,errors},null,2));
|
|
console.log(JSON.stringify({translated:Object.keys(translations).length,total:order.length,errors},null,2));
|
|
if(errors.length)process.exitCode=1;
|