Skip to content

Commit

Permalink
fix(html): improve multiline rendering
Browse files Browse the repository at this point in the history
  • Loading branch information
schoero committed Aug 30, 2023
1 parent 69abda1 commit e77d0f5
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 8 deletions.
16 changes: 13 additions & 3 deletions src/renderer/markup/html/ast/list.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
import { renderNewLine } from "unwritten:renderer/utils/new-line.js";
import { isListNode } from "unwritten:renderer:markup/typeguards/renderer.js";
import {
isInlineTitleNode,
isListNode,
isMultilineNode,
isParagraphNode,
isTitleNode
} from "unwritten:renderer:markup/typeguards/renderer.js";
import { renderIndentation } from "unwritten:renderer:utils/indentation.js";

import { renderNode } from "../index.js";
Expand Down Expand Up @@ -86,8 +92,12 @@ function renderListItem(ctx: HTMLRenderContext, item: ASTNode): string {

}

// Render directly nested lists on a new line
if(isListNode(item)){
// Render nodes with indentation on a new line
if(isListNode(item) ||
isMultilineNode(item) ||
isTitleNode(item) ||
isInlineTitleNode(item) ||
isParagraphNode(item)){

const renderedStartTag = `${renderIndentation(ctx)}<li>`;
ctx.indentation++;
Expand Down
13 changes: 8 additions & 5 deletions src/renderer/markup/html/ast/multiline.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { isListNode, isParagraphNode, isTitleNode } from "unwritten:renderer/markup/typeguards/renderer.js";
import { renderIndentation } from "unwritten:renderer/utils/indentation.js";
import { renderNewLine } from "unwritten:renderer/utils/new-line.js";
import { renderNode } from "unwritten:renderer:html/index.js";

Expand All @@ -9,6 +9,7 @@ import type { MultilineNode } from "unwritten:renderer:markup/types-definitions/
export function renderMultilineNode(ctx: HTMLRenderContext, multilineNode: MultilineNode): string {

const renderedNewLine = renderNewLine(ctx);
const renderedIndentation = renderIndentation(ctx);

return multilineNode.children.map((subNode, index) => {

Expand All @@ -18,10 +19,12 @@ export function renderMultilineNode(ctx: HTMLRenderContext, multilineNode: Multi
return "";
}

// Render a new line before nodes that require it
return index > 0 && (isListNode(subNode) || isTitleNode(subNode) || isParagraphNode(subNode))
? `${renderNewLine(ctx)}${renderedNode}`
: renderedNode;
// Render indentation for all children
const renderedNodeWithIndentation = renderedNode.startsWith(renderedIndentation)
? renderedNode
: `${renderedIndentation}${renderedNode}`;

return renderedNodeWithIndentation;

}).filter(renderedChild => renderedChild !== "")
.join(renderedNewLine);
Expand Down

0 comments on commit e77d0f5

Please sign in to comment.