in repo-scripts/api-documenter/src/markdown/CustomMarkdownEmitter.ts [67:181]
protected writeNode(
docNode: DocNode,
context: IMarkdownEmitterContext,
docNodeSiblings: boolean
): void {
const writer: IndentedWriter = context.writer;
switch (docNode.kind) {
case CustomDocNodeKind.Heading: {
const docHeading: DocHeading = docNode as DocHeading;
writer.ensureSkippedLine();
let prefix: string;
switch (docHeading.level) {
case 1:
prefix = '##';
break;
case 2:
prefix = '###';
break;
case 3:
prefix = '###';
break;
default:
prefix = '####';
}
writer.writeLine(prefix + ' ' + this.getEscapedText(docHeading.title));
writer.writeLine();
break;
}
case CustomDocNodeKind.NoteBox: {
const docNoteBox: DocNoteBox = docNode as DocNoteBox;
writer.ensureNewLine();
writer.increaseIndent('> ');
this.writeNode(docNoteBox.content, context, false);
writer.ensureNewLine();
writer.decreaseIndent();
writer.writeLine();
break;
}
case CustomDocNodeKind.Table: {
const docTable: DocTable = docNode as DocTable;
// GitHub's markdown renderer chokes on tables that don't have a blank line above them,
// whereas VS Code's renderer is totally fine with it.
writer.ensureSkippedLine();
context.insideTable = true;
// Markdown table rows can have inconsistent cell counts. Size the table based on the longest row.
let columnCount: number = 0;
if (docTable.header) {
columnCount = docTable.header.cells.length;
}
for (const row of docTable.rows) {
if (row.cells.length > columnCount) {
columnCount = row.cells.length;
}
}
// write the table header (which is required by Markdown)
writer.write('| ');
for (let i: number = 0; i < columnCount; ++i) {
writer.write(' ');
if (docTable.header) {
const cell: DocTableCell | undefined = docTable.header.cells[i];
if (cell) {
this.writeNode(cell.content, context, false);
}
}
writer.write(' |');
}
writer.writeLine();
// write the divider
writer.write('| ');
for (let i: number = 0; i < columnCount; ++i) {
writer.write(' --- |');
}
writer.writeLine();
for (const row of docTable.rows) {
writer.write('| ');
for (const cell of row.cells) {
writer.write(' ');
this.writeNode(cell.content, context, false);
writer.write(' |');
}
writer.writeLine();
}
writer.writeLine();
context.insideTable = false;
break;
}
case CustomDocNodeKind.EmphasisSpan: {
const docEmphasisSpan: DocEmphasisSpan = docNode as DocEmphasisSpan;
const oldBold: boolean = context.boldRequested;
const oldItalic: boolean = context.italicRequested;
context.boldRequested = docEmphasisSpan.bold;
context.italicRequested = docEmphasisSpan.italic;
this.writeNodes(docEmphasisSpan.nodes, context);
context.boldRequested = oldBold;
context.italicRequested = oldItalic;
break;
}
default:
super.writeNode(docNode, context, false);
}
}