Skip to content

Commit 4680a66

Browse files
committed
add support for highlighting with prism ast
1 parent 08b1c07 commit 4680a66

File tree

2 files changed

+34
-10
lines changed

2 files changed

+34
-10
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,6 @@
3434
"babel-preset-es2015": "^6.24.1",
3535
"babel-preset-react": "^6.24.1",
3636
"babel-runtime": "^6.23.0",
37-
"react-syntax-highlighter": "^5.6.2"
37+
"react-syntax-highlighter": "^6.0.4"
3838
}
3939
}

src/index.js

Lines changed: 33 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
import React from 'react';
22
import { Text, ScrollView, Platform } from 'react-native';
33
import SyntaxHighlighter from 'react-syntax-highlighter';
4-
import { createStyleObject } from 'react-syntax-highlighter/dist/create-element';
5-
import { defaultStyle } from'react-syntax-highlighter/dist/styles';
6-
4+
import SyntaxHighlighterPrism from 'react-syntax-highlighter/prism';
5+
import { createStyleObject } from 'react-syntax-highlighter/create-element';
6+
import { defaultStyle } from'react-syntax-highlighter/styles/hljs';
7+
import { prism as prismDefaultStyle } from'react-syntax-highlighter/styles/prism';
78

89
const styleCache = new Map();
910

10-
function generateNewStylesheet(stylesheet) {
11+
function generateNewStylesheet({ stylesheet, renderer }) {
1112
if (styleCache.has(stylesheet)) {
1213
return styleCache.get(stylesheet);
1314
}
@@ -33,7 +34,17 @@ function generateNewStylesheet(stylesheet) {
3334
}, {});
3435
return newStylesheet;
3536
}, {});
36-
const defaultColor = transformedStyle.hljs && transformedStyle.hljs.color || '#000';
37+
const defaultColor = (
38+
renderer === "prism"
39+
?
40+
(
41+
transformedStyle['pre[class*=\"language-\"]'] &&
42+
transformedStyle['pre[class*=\"language-\"]'].color ||
43+
'#000'
44+
)
45+
:
46+
transformedStyle.hljs && transformedStyle.hljs.color || '#000'
47+
);
3748
if (transformedStyle.hljs && transformedStyle.hljs.color) {
3849
delete transformedStyle.hljs.color;
3950
}
@@ -96,10 +107,24 @@ function nativeRenderer({ defaultColor, fontFamily, fontSize }) {
96107
}
97108

98109

99-
function NativeSyntaxHighlighter({ fontFamily, fontSize, style, children, ...rest}) {
110+
function NativeSyntaxHighlighter({
111+
fontFamily,
112+
fontSize,
113+
children,
114+
highlighter = "highlightjs",
115+
style = highlighter === "prism" ? prismDefaultStyle : defaultStyle,
116+
...rest
117+
}) {
100118
const { transformedStyle, defaultColor } = generateNewStylesheet(style);
119+
const Highlighter = (
120+
highlighter === "prism"
121+
?
122+
SyntaxHighlighterPrism
123+
:
124+
SyntaxHighlighter
125+
);
101126
return (
102-
<SyntaxHighlighter
127+
<Highlighter
103128
{...rest}
104129
style={transformedStyle}
105130
horizontal={true}
@@ -110,14 +135,13 @@ function NativeSyntaxHighlighter({ fontFamily, fontSize, style, children, ...res
110135
}))}
111136
>
112137
{children}
113-
</SyntaxHighlighter>
138+
</Highlighter>
114139
);
115140
}
116141

117142
NativeSyntaxHighlighter.defaultProps = {
118143
fontFamily: Platform.OS === 'ios' ? 'Menlo-Regular' : 'monospace',
119144
fontSize: 12,
120-
style: defaultStyle,
121145
PreTag: ScrollView,
122146
CodeTag: ScrollView
123147
};

0 commit comments

Comments
 (0)