Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 41 additions & 0 deletions docs/features.md
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,47 @@ Here's a simple footnote,[^1] and here's a longer one.[^bignote]

---

### LaTeX / Math

```
Inline math: $E = mc^2$ and $a^2 + b^2 = c^2$
```

Inline math: $E = mc^2$ and $a^2 + b^2 = c^2$

Block math with `$$`:

```
$$
\int_0^\infty e^{-x^2} dx = \frac{\sqrt{\pi}}{2}
$$
```

$$
\int_0^\infty e^{-x^2} dx = \frac{\sqrt{\pi}}{2}
$$

Math code block:

````
```math
\sum_{n=1}^{\infty} \frac{1}{n^2} = \frac{\pi^2}{6}
```
````

```math
\sum_{n=1}^{\infty} \frac{1}{n^2} = \frac{\pi^2}{6}
```

> [!NOTE]
> Consumers must include KaTeX CSS for proper rendering:
>
> ```html
> <link rel="stylesheet" href="katex/dist/katex.min.css" />
> ```

---

### Mermaid

Take a look at [how Pantsdown's demo is built](https://github.com/wallpants/pantsdown/blob/main/docs/build.ts)
Expand Down
16 changes: 11 additions & 5 deletions src/renderer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,18 +26,24 @@ export class Renderer {

code(code: string, infostring: string | undefined, sourceMap: SourceMap): string {
const lang = /^\S*/.exec(infostring ?? "")?.[0];
code = code.replace(/\n$/, "") + "\n";
code = code.replace(/\n$/, "");

const attrs: HTMLAttrs = [];

if (lang === "mermaid") {
attrs.push(["class", "mermaid-container mermaid"]);
} else {
const language = lang && hljs.getLanguage(lang) ? lang : "plaintext";
code = hljs.highlight(code, { language }).value;
code = `<code class="hljs language-${escape(language)}">${code}</code>`;
const result = `<pre style="position: relative;">` + code + "\n" + `</pre>`;
return injectHtmlAttributes(result, attrs, sourceMap);
}

if (lang === "math") {
return this.latexBlock(code, sourceMap);
}

const language = lang && hljs.getLanguage(lang) ? lang : "plaintext";
code = hljs.highlight(code + "\n", { language }).value;
code = `<code class="hljs language-${escape(language)}">${code}</code>`;

const result = `<pre style="position: relative;">` + code + `</pre>`;
return injectHtmlAttributes(result, attrs, sourceMap);
}
Expand Down