Skip to content

Commit

Permalink
fix: convert in two steps
Browse files Browse the repository at this point in the history
to allow all links to be registered before rendering
  • Loading branch information
schoero committed Aug 22, 2023
1 parent 826c0b4 commit 7bdbd76
Show file tree
Hide file tree
Showing 5 changed files with 51 additions and 19 deletions.
2 changes: 1 addition & 1 deletion src/renderer/markup/ast-converter/types/type-reference.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ export function convertTypeReferenceTypeInline(ctx: MarkupRenderContexts, typeRe
return fallback;
}

const anchor = createAnchorNode(typeReferenceType.target.name ?? "", id, fallback);
const anchor = createAnchorNode(typeReferenceType.target.name ?? "", id);

const typeArguments = typeReferenceType.typeArguments && typeReferenceType.typeArguments.length > 0
? convertTypeArguments(ctx, typeReferenceType.typeArguments)
Expand Down
26 changes: 18 additions & 8 deletions src/renderer/markup/html/index.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/* eslint-disable arrow-body-style */
import { BuiltInRenderers } from "unwritten:renderer/enums/renderer.js";
import { renderConditionalNode } from "unwritten:renderer/markup/html/ast/conditional.js";
import { setCurrentSourceFile } from "unwritten:renderer/markup/registry/registry.js";
import { createCurrentSourceFile, setCurrentSourceFile } from "unwritten:renderer/markup/registry/registry.js";
import { getDestinationFilePath } from "unwritten:renderer/markup/utils/file.js";
import { renderNewLine } from "unwritten:renderer/utils/new-line.js";
import { renderAnchorNode } from "unwritten:renderer:html/ast/anchor.js";
Expand Down Expand Up @@ -124,19 +124,30 @@ const htmlRenderer: HTMLRenderer = {

htmlRenderer.initializeContext(ctx);

return sourceFileEntities.reduce<RenderOutput>((files, sourceFileEntity) => {
return sourceFileEntities.reduce<(SourceFileEntity & { convertedAST: ASTNode; })[]>((convertedSourceFileEntities, sourceFileEntity) => {

const destination = getDestinationFilePath(ctx, sourceFileEntities, sourceFileEntity);
createCurrentSourceFile(ctx, sourceFileEntity, destination);
setCurrentSourceFile(ctx, sourceFileEntity);

convertedSourceFileEntities.push({
...sourceFileEntity,
convertedAST: convertToMarkupAST(ctx, sourceFileEntity.exports)
});

return convertedSourceFileEntities;

}, [])
.reduce<RenderOutput>((files, convertedSourceFileEntity) => {

// Reset context
ctx.nesting = 1;
ctx.indentation = 0;

const destination = getDestinationFilePath(ctx, sourceFileEntities, sourceFileEntity);
setCurrentSourceFile(ctx, sourceFileEntity, destination);
setCurrentSourceFile(ctx, convertedSourceFileEntity);

const renderedNewLine = renderNewLine(ctx);

const markupAST = convertToMarkupAST(ctx, sourceFileEntity.exports);
const renderedContent = renderNode(ctx, markupAST);
const renderedContent = renderNode(ctx, convertedSourceFileEntity.convertedAST);

const filePath = ctx.currentFile.dst;

Expand All @@ -147,7 +158,6 @@ const htmlRenderer: HTMLRenderer = {

})


};

export function renderNode(ctx: HTMLRenderContext, node: ASTNode): string {
Expand Down
25 changes: 18 additions & 7 deletions src/renderer/markup/markdown/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import { BuiltInRenderers } from "unwritten:renderer/enums/renderer.js";
import { renderConditionalNode } from "unwritten:renderer/markup/markdown/ast/conditional.js";
import { escapeMarkdown } from "unwritten:renderer/markup/markdown/utils/escape.js";
import { setCurrentSourceFile } from "unwritten:renderer/markup/registry/registry.js";
import { createCurrentSourceFile, setCurrentSourceFile } from "unwritten:renderer/markup/registry/registry.js";
import { getDestinationFilePath } from "unwritten:renderer/markup/utils/file.js";
import { renderNewLine } from "unwritten:renderer/utils/new-line.js";
import { renderAnchorNode } from "unwritten:renderer:markdown/ast/anchor.js";
Expand Down Expand Up @@ -127,19 +127,30 @@ const markdownRenderer: MarkdownRenderer = {

markdownRenderer.initializeContext(ctx);

return sourceFileEntities.reduce<RenderOutput>((files, sourceFileEntity) => {
return sourceFileEntities.reduce<(SourceFileEntity & { convertedAST: ASTNode; })[]>((convertedSourceFileEntities, sourceFileEntity) => {

const destination = getDestinationFilePath(ctx, sourceFileEntities, sourceFileEntity);
createCurrentSourceFile(ctx, sourceFileEntity, destination);
setCurrentSourceFile(ctx, sourceFileEntity);

convertedSourceFileEntities.push({
...sourceFileEntity,
convertedAST: convertToMarkupAST(ctx, sourceFileEntity.exports)
});

return convertedSourceFileEntities;

}, [])
.reduce<RenderOutput>((files, convertedSourceFileEntity) => {

// Reset context
ctx.nesting = 1;
ctx.indentation = 0;

const destination = getDestinationFilePath(ctx, sourceFileEntities, sourceFileEntity);
setCurrentSourceFile(ctx, sourceFileEntity, destination);
setCurrentSourceFile(ctx, convertedSourceFileEntity);

const renderedNewLine = renderNewLine(ctx);

const markupAST = convertToMarkupAST(ctx, sourceFileEntity.exports);
const renderedContent = renderNode(ctx, markupAST);
const renderedContent = renderNode(ctx, convertedSourceFileEntity.convertedAST);

const filePath = ctx.currentFile.dst;

Expand Down
15 changes: 13 additions & 2 deletions src/renderer/markup/registry/registry.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import { assert } from "unwritten:utils/general.js";

import type { MarkupRenderContexts } from "../types-definitions/markup.js";

import type { SourceFileEntity } from "unwritten:interpreter/type-definitions/entities.js";
Expand Down Expand Up @@ -120,7 +122,7 @@ function isSymbolExportedFromSourceFile(sourceFile: SourceFile, symbolId: ID): b
return Object.values(sourceFile.links).some(linkIds => linkIds.includes(symbolId));
}

export function setCurrentSourceFile(ctx: MarkupRenderContexts, sourceFileEntity: SourceFileEntity, destination: FilePath): void {
export function createCurrentSourceFile(ctx: MarkupRenderContexts, sourceFileEntity: SourceFileEntity, destination: FilePath): void {

// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
const index = ctx.links.findIndex(sourceFile => sourceFile.id === sourceFileEntity.symbolId);
Expand All @@ -139,6 +141,15 @@ export function setCurrentSourceFile(ctx: MarkupRenderContexts, sourceFileEntity
ctx.links[index] = sourceFile;
}

ctx.currentFile = ctx.links.at(-1)!;
}

export function setCurrentSourceFile(ctx: MarkupRenderContexts, sourceFileEntity: SourceFileEntity): void {

// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
const index = ctx.links.findIndex(sourceFile => sourceFile.id === sourceFileEntity.symbolId);

assert(index !== -1, `Source file ${sourceFileEntity.path} is not registered`);

ctx.currentFile = ctx.links.at(index)!;

}
2 changes: 1 addition & 1 deletion src/renderer/markup/utils/nodes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ import type { AnchorTarget } from "unwritten:renderer/markup/registry/registry.j
import type { SectionType } from "unwritten:renderer:markup/types-definitions/sections.js";


export function createAnchorNode(name: Name, id: ID, inlineFallback?: ASTNode): AnchorNode {
export function createAnchorNode(name: Name, id: ID): AnchorNode {
return {
children: [name],
id,
Expand Down

0 comments on commit 7bdbd76

Please sign in to comment.