antsibull-docs
Version:
TypeScript library for processing Ansible documentation markup
52 lines (47 loc) • 2.14 kB
text/typescript
/*
Simplified BSD License (see LICENSES/BSD-2-Clause.txt or https://opensource.org/licenses/BSD-2-Clause)
SPDX-FileCopyrightText: Ansible Project
SPDX-License-Identifier: BSD-2-Clause
*/
import { AnsibleDocTextOptions, AllFormatOptions, mergeOpts, LinkProviders } from './opts';
import { OptionNamePart, Paragraph, ReturnValuePart } from './dom';
import { addToDestination } from './format';
function formatOptionLike(part: OptionNamePart | ReturnValuePart): string {
let text = part.value === undefined ? `\`${part.name}'` : `\`${part.name}=${part.value}'`;
if (part.plugin) {
const plugin_suffix = ['role', 'module', 'playbook'].includes(part.plugin.type) ? '' : ' plugin';
let plugin = `${part.plugin.type}${plugin_suffix} ${part.plugin.fqcn}`;
if (part.plugin.type === 'role' && part.entrypoint !== undefined) {
plugin = `${plugin}, ${part.entrypoint} entrypoint`;
}
text = `${text} (of ${plugin})`;
}
return text;
}
const DEFAULT_FORMATTER: AllFormatOptions = {
formatError: (part) => `[[ERROR while parsing: ${part.message}]]`,
formatBold: (part) => `*${part.text}*`,
formatCode: (part) => `\`${part.text}'`,
formatHorizontalLine: () => '\n-------------\n',
formatItalic: (part) => `\`${part.text}'`,
formatLink: (part) => `${part.text} <${part.url}>`,
formatModule: (part) => `[${part.fqcn}]`,
formatRSTRef: (part) => part.text,
formatURL: (part) => part.url,
formatText: (part) => part.text,
formatEnvVariable: (part) => `\`${part.name}'`,
formatOptionName: (part) => formatOptionLike(part),
formatOptionValue: (part) => `\`${part.value}'`,
formatPlugin: (part) => `[${part.plugin.fqcn}]`,
formatReturnValue: (part) => formatOptionLike(part),
};
export function toAnsibleDocText(paragraphs: Paragraph[], opts?: AnsibleDocTextOptions): string {
const mergedOpts = mergeOpts(Object.assign({} as LinkProviders, opts), DEFAULT_FORMATTER);
const result: string[] = [];
for (const paragraph of paragraphs) {
const line: string[] = [];
addToDestination(line, paragraph, mergedOpts);
result.push(line.join(''));
}
return result.join('\n\n');
}