UNPKG

@rshirohara/repixe-stringify

Version:
109 lines (108 loc) 2.69 kB
export function toPixivNovel(tree) { return [...tree.children] .map((node) => compileRootChildren(node)) .filter((text) => text !== "") .join("\n\n"); } function compileRootChildren(node) { switch (node.type) { case "heading": case "pageBreak": case "paragraph": { return compileFlowContent(node); } case "break": case "image": case "link": case "pageReference": case "ruby": case "text": { return compilePhrasingContent(node); } default: { return ""; } } } // FlowContent function compileFlowContent(node) { switch (node.type) { case "heading": { return compileHeading(node); } case "pageBreak": { return compilePageBreak(node); } case "paragraph": { return compileParagraph(node); } default: { return ""; } } } function compileHeading(node) { return `[chapter: ${[...node.children].map(compileInlinePhrasingContent).join("")}]`; } function compilePageBreak(_) { return "[newpage]"; } function compileParagraph(node) { return [...node.children].map(compilePhrasingContent).join(""); } // PhrasingContent function compilePhrasingContent(node) { switch (node.type) { case "break": { return compileBreak(node); } case "image": { return compileImage(node); } case "link": { return compileLink(node); } case "pageReference": { return compilePageReference(node); } case "ruby": case "text": { return compileInlinePhrasingContent(node); } default: { return ""; } } } function compileBreak(_) { return "\n"; } function compileImage(node) { return `[pixivimage:${node.illustId}${node.pageNumber !== undefined ? `-${node.pageNumber}` : ""}]`; } function compileLink(node) { return `[[jumpuri: ${[...node.children].map(compileInlinePhrasingContent).join("")} > ${node.url}]]`; } function compilePageReference(node) { return `[jump:${node.pageNumber}]`; } // InlinePhrasingContent function compileInlinePhrasingContent(node) { switch (node.type) { case "ruby": { return compileRuby(node); } case "text": { return compileText(node); } default: { return ""; } } } function compileRuby(node) { return `[[rb: ${node.value} > ${node.ruby}]]`; } function compileText(node) { return node.value; }