Skip to content

Commit 348937f

Browse files
committed
docs: updated documentation after latest changes
1 parent b20f282 commit 348937f

File tree

5 files changed

+67
-46
lines changed

5 files changed

+67
-46
lines changed

README.md

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ the
1414
npm install react react-marked-renderer
1515
```
1616

17-
Or with [yarn](https://yarnpkg.com)
17+
Or with [yarn](https://yarnpkg.com):
1818

1919
```sh
2020
yarn add react react-marked-renderer
@@ -65,15 +65,17 @@ add styles or additional functionality.
6565
import { useState } from "react";
6666
import { render } from "react-dom";
6767
import {
68+
DEFAULT_MARKDOWN_RENDERERS,
6869
ListRenderer,
69-
getTokensText,
7070
Markdown,
7171
Renderers,
72+
getTokensText,
7273
} from "react-marked-renderer";
7374
import { BrowserRouter as Router, Link } from "react-router-dom";
7475

75-
const renderers: Partial<Renderers> = {
76-
link: function CustomLink({ href, title, children }: LinkRendererProps) {
76+
const renderers: Renderers = {
77+
...DEFAULT_MARKDOWN_RENDERERS,
78+
link: function CustomLink({ href, title, children }) {
7779
// make links use html5 history and not cause reloads
7880
return (
7981
<Link to={href} title={title}>
@@ -128,11 +130,16 @@ function that will modify a `<code>` element to be highlighted:
128130

129131
```tsx
130132
import { render } from "react-dom";
131-
import { Markdown, Renderers } from "react-marked-renderer";
133+
import {
134+
DEFAULT_MARKDOWN_RENDERERS,
135+
Markdown,
136+
Renderers,
137+
} from "react-marked-renderer";
132138
import Prism from "prismjs";
133-
// import prism theme/components or use babel-plugin-prismjs
139+
// import prism theme/components or use `babel-plugin-prismjs`
134140

135-
const renderers: Partial<Renderers> = {
141+
const renderers: Renderers = {
142+
...DEFAULT_MARKDOWN_RENDERERS,
136143
codespan: function CodeSpan({ children }) {
137144
// just so it gets some prism styling
138145
return <code className="language-none">{children}</code>;
@@ -157,14 +164,16 @@ highlighted for SSR and in the browser, provide a `highlightCode` function:
157164
```tsx
158165
import { render } from "react-dom";
159166
import {
160-
CodeGetCodeLanguage,
167+
DEFAULT_MARKDOWN_RENDERERS,
161168
DangerouslyHighlight,
169+
GetCodeLanguage,
162170
Markdown,
163171
Renderers,
164172
} from "react-marked-renderer";
165173
import Prism from "prismjs";
166174

167-
const renderers: Partial<Renderers> = {
175+
const renderers: Renderers = {
176+
...DEFAULT_MARKDOWN_RENDERERS,
168177
codespan: function CodeSpan({ children }) {
169178
// just so it gets some prism styling
170179
return <code className="language-none">{children}</code>;
@@ -178,7 +187,7 @@ const getLanguage: GetCodeLanguage = (lang, _rawCode) => {
178187
// if the Prism doesn't support the language, default to nothing instead
179188
// of crashing
180189
if (!Prism.languages[lang]) {
181-
return "";
190+
return "none";
182191
}
183192

184193
return lang;

components/MarkdownPreview.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ export function MarkdownPreview(): ReactElement {
2525
<Markdown
2626
markdown={markdown}
2727
renderers={customRenderers ? renderers : undefined}
28-
getLanguage={getLanguage}
28+
getLanguage={customRenderers ? undefined : getLanguage}
2929
highlightCode={customRenderers ? highlightCode : undefined}
3030
/>
3131
</div>

components/renderers.tsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ import styles from "./renderers.module.scss";
2525
const PRISM_LANGUAGES = Object.keys(languages).filter(
2626
(name) => name !== "insertBefore" && name !== "extend"
2727
);
28-
PRISM_LANGUAGES.push("none");
2928

3029
export const renderers: MarkdownRenderers = {
3130
...DEFAULT_MARKDOWN_RENDERERS,
@@ -87,10 +86,10 @@ export const renderers: MarkdownRenderers = {
8786
);
8887
},
8988

90-
codeblock: function CodeBlock({ lang = "", text }) {
89+
codeblock: function CodeBlock({ lang, text }) {
9190
// allow `sh` alias for bash
9291
lang = lang === "sh" ? "bash" : lang;
93-
const invalid = !PRISM_LANGUAGES.includes(lang);
92+
const invalid = lang && !PRISM_LANGUAGES.includes(lang);
9493

9594
let message: string | undefined;
9695
if (invalid) {
@@ -99,6 +98,8 @@ export const renderers: MarkdownRenderers = {
9998
Valid languages for the playground are:
10099
${PRISM_LANGUAGES.map((lang) => `- ${lang}`).join("\n")}
101100
`;
101+
102+
lang = "none";
102103
}
103104

104105
return (

src/Markdown.tsx

Lines changed: 29 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -24,23 +24,8 @@ export interface BaseMarkdownProps extends HighlightCodeOptions {
2424
/**
2525
* Any options to use while parsing the markdown string.
2626
*
27-
* Note: This will always be called as:
28-
*
29-
* ```ts
30-
* const tokens = lexer(markdown, {
31-
* ...marked.getDefaults(),
32-
* mangle: false,
33-
* ...options,
34-
* });
35-
* ```
36-
*
37-
* The default options are always merged with the new options since most of
38-
* the time you only want to change a few options instead of all of them.
39-
* `marked` does not merge by default, so everything omitted will be set to
40-
* `false`.
41-
*
42-
* In addition, the `mangle` option is set to `false` by default since it
43-
* would prevent emails from being displayed correctly.
27+
* @see {@link DEFAULT_MARKDOWN_OPTIONS}
28+
* @defaultValue `DEFAULT_MARKDOWN_OPTIONS`
4429
*/
4530
options?: Readonly<MarkdownOptions>;
4631

@@ -75,6 +60,8 @@ export interface BaseMarkdownProps extends HighlightCodeOptions {
7560
* document.getElementById("root")
7661
* );
7762
* ```
63+
*
64+
* @defaultValue = `new marked.Slugger()`
7865
*/
7966
slugger?: marked.Slugger;
8067

@@ -116,15 +103,17 @@ export type MarkdownProps = BaseMarkdownProps & ValidHighlightCodeOptions;
116103
* import { useState } from "react";
117104
* import { render } from "react-dom";
118105
* import {
106+
* DEFAULT_MARKDOWN_RENDERERS,
119107
* ListRenderer,
120-
* getTokensText,
121108
* Markdown,
122109
* Renderers,
110+
* getTokensText,
123111
* } from "react-marked-renderer";
124112
* import { BrowserRouter as Router, Link } from "react-router-dom";
125113
*
126-
* const renderers: Partial<Renderers> = {
127-
* link: function CustomLink({ href, title, children }: LinkRendererProps) {
114+
* const renderers: Renderers = {
115+
* ...DEFAULT_MARKDOWN_RENDERERS,
116+
* link: function CustomLink({ href, title, children }) {
128117
* // make links use html5 history and not cause reloads
129118
* return (
130119
* <Link to={href} title={title}>
@@ -173,17 +162,23 @@ export type MarkdownProps = BaseMarkdownProps & ValidHighlightCodeOptions;
173162
* ```
174163
*
175164
* @example
176-
* Code Highlighting (PrismJS)
165+
* PrismJS Code Highlighting (Browser)
177166
* ```tsx
178167
* import { render } from "react-dom";
179-
* import { Markdown, Renderers } from "react-marked-renderer";
168+
* import {
169+
* DEFAULT_MARKDOWN_RENDERERS,
170+
* Markdown,
171+
* Renderers,
172+
* } from "react-marked-renderer";
180173
* import Prism from "prismjs";
174+
* // import prism theme/components or use `babel-plugin-prismjs`
181175
*
182-
* const renderers: Partial<Renderers> = {
176+
* const renderers: Renderers = {
177+
* ...DEFAULT_MARKDOWN_RENDERERS,
183178
* codespan: function CodeSpan({ children }) {
184179
* // just so it gets some prism styling
185-
* return <code className="language-none">{children}</code>
186-
* }
180+
* return <code className="language-none">{children}</code>;
181+
* },
187182
* };
188183
*
189184
* render(
@@ -197,22 +192,24 @@ export type MarkdownProps = BaseMarkdownProps & ValidHighlightCodeOptions;
197192
* ```
198193
*
199194
* @example
200-
* SSR Code Highlighting (PrismJS)
195+
* PrismJS Code Highlighting (Node an Browser)
201196
* ```tsx
202197
* import { render } from "react-dom";
203198
* import {
204-
* CodeGetCodeLanguage,
199+
* DEFAULT_MARKDOWN_RENDERERS,
205200
* DangerouslyHighlight,
201+
* GetCodeLanguage,
206202
* Markdown,
207-
* Renderers
203+
* Renderers,
208204
* } from "react-marked-renderer";
209205
* import Prism from "prismjs";
210206
*
211-
* const renderers: Partial<Renderers> = {
207+
* const renderers: Renderers = {
208+
* ...DEFAULT_MARKDOWN_RENDERERS,
212209
* codespan: function CodeSpan({ children }) {
213210
* // just so it gets some prism styling
214-
* return <code className="language-none">{children}</code>
215-
* }
211+
* return <code className="language-none">{children}</code>;
212+
* },
216213
* };
217214
*
218215
* const getLanguage: GetCodeLanguage = (lang, _rawCode) => {
@@ -222,7 +219,7 @@ export type MarkdownProps = BaseMarkdownProps & ValidHighlightCodeOptions;
222219
* // if the Prism doesn't support the language, default to nothing instead
223220
* // of crashing
224221
* if (!Prism.languages[lang]) {
225-
* return "";
222+
* return "none";
226223
* }
227224
*
228225
* return lang;

src/renderers/useMarkdownRenderers.tsx

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ import {
1111
import { TableRenderers, TABLE_RENDERERS } from "./table";
1212
import { TextRenderers, TEXT_RENDERERS } from "./text";
1313

14+
/**
15+
* @see {@link DEFAULT_MARKDOWN_RENDERERS} for the default implementation
16+
*/
1417
export interface MarkdownRenderers
1518
extends CodeRenderers,
1619
HtmlRenderers,
@@ -20,6 +23,17 @@ export interface MarkdownRenderers
2023
TableRenderers,
2124
TextRenderers {}
2225

26+
/**
27+
* The default implementation for the {@link MarkdownRenderers}
28+
*
29+
* @see {@link CODE_RENDERERS}
30+
* @see {@link HTML_RENDERERS}
31+
* @see {@link LIST_RENDERERS}
32+
* @see {@link MEDIA_RENDERERS}
33+
* @see {@link PRESENTATIONAL_RENDERERS}
34+
* @see {@link TABLE_RENDERERS}
35+
* @see {@link TEXT_RENDERERS}
36+
*/
2337
export const DEFAULT_MARKDOWN_RENDERERS: MarkdownRenderers = {
2438
...CODE_RENDERERS,
2539
...HTML_RENDERERS,

0 commit comments

Comments
 (0)