Skip to content

Commit b64754a

Browse files
committed
update generateStylesheet to deal with prism properly
1 parent 4daff6f commit b64754a

File tree

1 file changed

+41
-15
lines changed

1 file changed

+41
-15
lines changed

src/index.js

Lines changed: 41 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,32 @@ import { prism as prismDefaultStyle } from'react-syntax-highlighter/styles/prism
88

99
const styleCache = new Map();
1010

11+
const topLevelPropertiesToRemove = [
12+
"color",
13+
"textShadow",
14+
"textAlign",
15+
"whiteSpace",
16+
"wordSpacing",
17+
"wordBreak",
18+
"wordWrap",
19+
"lineHeight",
20+
"MozTabSize",
21+
"OTabSize",
22+
"tabSize",
23+
"WebkitHyphens",
24+
"MozHyphens",
25+
"msHyphens",
26+
"hyphens",
27+
"fontFamily"
28+
];
29+
1130
function generateNewStylesheet({ stylesheet, highlighter }) {
1231
if (styleCache.has(stylesheet)) {
1332
return styleCache.get(stylesheet);
1433
}
1534
const transformedStyle = Object.entries(stylesheet).reduce((newStylesheet, [className, style]) => {
1635
newStylesheet[className] = Object.entries(style).reduce((newStyle, [key, value]) => {
17-
if (key === 'overflowX') {
36+
if (key === 'overflowX' || key === "overflow") {
1837
newStyle.overflow = value === 'auto' ? 'scroll' : value;
1938
}
2039
else if (value.includes('em')) {
@@ -34,20 +53,27 @@ function generateNewStylesheet({ stylesheet, highlighter }) {
3453
}, {});
3554
return newStylesheet;
3655
}, {});
37-
const defaultColor = (
38-
highlighter === "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-
);
48-
if (transformedStyle.hljs && transformedStyle.hljs.color) {
49-
delete transformedStyle.hljs.color;
50-
}
56+
const topLevel = highlighter === "prism" ? transformedStyle['pre[class*=\"language-\"]'] : transformedStyle.hljs;
57+
const defaultColor = topLevel && topLevel.color || "#000";
58+
topLevelPropertiesToRemove.forEach(property => {
59+
if (topLevel[property]) {
60+
delete topLevel[property];
61+
}
62+
});
63+
if (topLevel.backgroundColor === "none") {
64+
delete topLevel.backgroundColor;
65+
}
66+
const codeLevel = transformedStyle['code[class*=\"language-\"]'];
67+
if (highlighter === "prism" && !!codeLevel) {
68+
topLevelPropertiesToRemove.forEach(property => {
69+
if (codeLevel[property]) {
70+
delete codeLevel[property];
71+
}
72+
});
73+
if (codeLevel.backgroundColor === "none") {
74+
delete codeLevel.backgroundColor;
75+
}
76+
}
5177
styleCache.set(stylesheet, { transformedStyle, defaultColor });
5278
return { transformedStyle, defaultColor };
5379
}

0 commit comments

Comments
 (0)