1
0
mirror of https://github.com/Llewellynvdm/conky.git synced 2025-01-16 12:10:31 +00:00
conky/web/utils/doc-utils.ts
Tin Švagelj f5b7106088
Enable use of HTML in docs (#1900)
Fix alignment documentation:
- while it renders fine on the web, it's stripped from man pages.
  Inline HTML renders fine in some cases, but tables don't.

There's no unified (remark) plugin that works well with headless
tables pandoc supports as well, so the only way to achieve a similar
effect is to leave header cells empty.

Signed-off-by: Tin Švagelj <tin.svagelj@live.com>
2024-05-06 18:51:19 +00:00

74 lines
1.7 KiB
TypeScript

import fs from 'fs'
import path from 'path'
import yaml from 'js-yaml'
import { unified } from 'unified'
import remarkParse from 'remark-parse'
import remarkGfm from 'remark-gfm'
import remarkRehype from 'remark-rehype'
import rehypeStringify from 'rehype-stringify'
const DOC_PATH = path.join(process.cwd(), '..', 'doc')
export interface Documentation {
desc: string
desc_md: string
values: DocItem[]
}
export interface DocItem {
name: string
desc: string
desc_md: string
default: string | undefined
args: string[]
}
function getDocumentation(source: string): Documentation {
const configSettingsFile = fs.readFileSync(
path.join(DOC_PATH, source),
'utf-8'
)
const parsed = yaml.load(configSettingsFile.toString()) as Documentation
const docs = {
...parsed,
desc_md: processMarkdown(parsed.desc),
values: parsed.values.map((c) => ({
...c,
desc_md: processMarkdown(c.desc),
})),
}
return docs
}
export function filterDesc(docs: Documentation): Documentation {
return {
...docs,
desc: '',
values: docs.values.map((v) => ({
...v,
desc: '',
})),
}
}
export function getConfigSettings(): Documentation {
return getDocumentation('config_settings.yaml')
}
export function getVariables(): Documentation {
return getDocumentation('variables.yaml')
}
export function getLua(): Documentation {
return getDocumentation('lua.yaml')
}
function processMarkdown(input: string): string {
return unified()
.use(remarkParse)
.use(remarkGfm)
.use(remarkRehype, {allowDangerousHtml: true})
.use(rehypeStringify, {allowDangerousHtml: true})
.processSync(input)
.toString()
}