diff --git a/packages/backend/package.json b/packages/backend/package.json index 3ace82166..bbc058bd1 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -60,6 +60,7 @@ "json5-loader": "4.0.1", "jsonld": "6.0.0", "jsrsasign": "10.5.25", + "katex": "^0.16.0", "koa": "2.13.4", "koa-bodyparser": "4.3.0", "koa-favicon": "2.1.0", diff --git a/packages/backend/src/mfm/to-html.ts b/packages/backend/src/mfm/to-html.ts index 06acaeceb..35ca6b1e6 100644 --- a/packages/backend/src/mfm/to-html.ts +++ b/packages/backend/src/mfm/to-html.ts @@ -1,4 +1,5 @@ import { JSDOM } from 'jsdom'; +import katex from 'katex'; import * as mfm from 'mfm-js'; import config from '@/config/index.js'; import { UserProfiles } from '@/models/index.js'; @@ -6,6 +7,14 @@ import { extractMentions } from '@/misc/extract-mentions.js'; import { intersperse } from '@/prelude/array.js'; import { toPunyNullable } from '@/misc/convert-host.js'; +function toMathMl(code: string): HTMLElement { + const rendered = katex.renderToString(code, { + throwOnError: false, + output: 'mathml', + }); + return JSDOM.fragment(rendered).querySelector('math'); +} + // Transforms MFM to HTML, given the MFM text and a list of user IDs that are // mentioned in the text. If the list of mentions is not given, all mentions // from the text will be extracted. @@ -98,15 +107,11 @@ export async function toHtml(mfmText: string, mentions?: string[]): Promise