Skip to content

Commit 110486a

Browse files
committed
Fix to use underscore suffixes for subscopes
Closes GH-43.
1 parent 1eb5286 commit 110486a

9 files changed

Lines changed: 36 additions & 31 deletions

File tree

lib/core.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,12 @@ class HastEmitter {
264264
* @param {string} name
265265
*/
266266
openNode(name) {
267-
const className = name.split('.').map((d) => this.options.classPrefix + d)
267+
// First “class” gets the prefix. Rest gets a repeated underscore suffix.
268+
// See: <https://github.com/highlightjs/highlight.js/commit/51806aa>
269+
// See: <https://github.com/wooorm/lowlight/issues/43>
270+
const className = name
271+
.split('.')
272+
.map((d, i) => (i ? d + '_'.repeat(i) : this.options.classPrefix + d))
268273
const current = this.stack[this.stack.length - 1]
269274
/** @type {Span} */
270275
const child = {

test/fixture/js-class/output.txt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
<span class="hljs-keyword">class</span> <span class="hljs-title hljs-class">Car</span> <span class="hljs-keyword">extends</span> <span class="hljs-title hljs-class hljs-inherited">Vehicle</span> {
2-
<span class="hljs-title hljs-function">constructor</span>(<span class="hljs-params">speed, cost</span>) {
3-
<span class="hljs-variable hljs-language">super</span>(speed);
1+
<span class="hljs-keyword">class</span> <span class="hljs-title class_">Car</span> <span class="hljs-keyword">extends</span> <span class="hljs-title class_ inherited__">Vehicle</span> {
2+
<span class="hljs-title function_">constructor</span>(<span class="hljs-params">speed, cost</span>) {
3+
<span class="hljs-variable language_">super</span>(speed);
44

5-
<span class="hljs-keyword">var</span> c = <span class="hljs-title hljs-class">Symbol</span>(<span class="hljs-string">'cost'</span>);
6-
<span class="hljs-variable hljs-language">this</span>[c] = cost;
5+
<span class="hljs-keyword">var</span> c = <span class="hljs-title class_">Symbol</span>(<span class="hljs-string">'cost'</span>);
6+
<span class="hljs-variable language_">this</span>[c] = cost;
77

8-
<span class="hljs-variable hljs-language">this</span>.<span class="hljs-property">intro</span> = <span class="hljs-string">`This is a car runs at
8+
<span class="hljs-variable language_">this</span>.<span class="hljs-property">intro</span> = <span class="hljs-string">`This is a car runs at
99
<span class="hljs-subst">${speed}</span>.`</span>;
1010
}
1111
}
Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<span class="hljs-keyword">function</span> <span class="hljs-title hljs-function">visibleTodoFilter</span>(<span class="hljs-params">state = <span class="hljs-string">'watch'</span>, action</span>) {
1+
<span class="hljs-keyword">function</span> <span class="hljs-title function_">visibleTodoFilter</span>(<span class="hljs-params">state = <span class="hljs-string">'watch'</span>, action</span>) {
22
<span class="hljs-keyword">switch</span> (action.<span class="hljs-property">type</span>) {
33
<span class="hljs-keyword">case</span> <span class="hljs-string">'CHANGE_VISIBLE_FILTER'</span>:
44
<span class="hljs-keyword">return</span> action.<span class="hljs-property">filter</span>;
@@ -7,7 +7,7 @@
77
}
88
}
99

10-
<span class="hljs-keyword">function</span> <span class="hljs-title hljs-function">todos</span>(<span class="hljs-params">state, action</span>) {
10+
<span class="hljs-keyword">function</span> <span class="hljs-title function_">todos</span>(<span class="hljs-params">state, action</span>) {
1111
<span class="hljs-keyword">switch</span> (action.<span class="hljs-property">type</span>) {
1212
<span class="hljs-keyword">case</span> <span class="hljs-string">'ADD_TODO'</span>:
1313
<span class="hljs-keyword">return</span> [...state, {
@@ -16,17 +16,17 @@
1616
}];
1717
<span class="hljs-keyword">case</span> <span class="hljs-string">'COMPLETE_TODO'</span>:
1818
<span class="hljs-keyword">return</span> [
19-
...state.<span class="hljs-title hljs-function">slice</span>(<span class="hljs-number">0</span>, action.<span class="hljs-property">index</span>),
20-
<span class="hljs-title hljs-class">Object</span>.<span class="hljs-title hljs-function">assign</span>({}, state[action.<span class="hljs-property">index</span>], {
19+
...state.<span class="hljs-title function_">slice</span>(<span class="hljs-number">0</span>, action.<span class="hljs-property">index</span>),
20+
<span class="hljs-title class_">Object</span>.<span class="hljs-title function_">assign</span>({}, state[action.<span class="hljs-property">index</span>], {
2121
<span class="hljs-attr">completed</span>: <span class="hljs-literal">true</span>
2222
}),
23-
...state.<span class="hljs-title hljs-function">slice</span>(action.<span class="hljs-property">index</span> + <span class="hljs-number">1</span>)
23+
...state.<span class="hljs-title function_">slice</span>(action.<span class="hljs-property">index</span> + <span class="hljs-number">1</span>)
2424
]
2525
<span class="hljs-attr">default</span>:
2626
<span class="hljs-keyword">return</span> state;
2727
}
2828
}
2929

3030
<span class="hljs-keyword">import</span> { combineReducers, createStore } <span class="hljs-keyword">from</span> <span class="hljs-string">'redux'</span>;
31-
<span class="hljs-keyword">let</span> reducer = <span class="hljs-title hljs-function">combineReducers</span>({ visibleTodoFilter, todos });
32-
<span class="hljs-keyword">let</span> store = <span class="hljs-title hljs-function">createStore</span>(reducer);
31+
<span class="hljs-keyword">let</span> reducer = <span class="hljs-title function_">combineReducers</span>({ visibleTodoFilter, todos });
32+
<span class="hljs-keyword">let</span> store = <span class="hljs-title function_">createStore</span>(reducer);
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
1-
<span class="hljs-keyword">function</span> <span class="hljs-title hljs-function">$initHighlight</span>(<span class="hljs-params">block, cls</span>) {
1+
<span class="hljs-keyword">function</span> <span class="hljs-title function_">$initHighlight</span>(<span class="hljs-params">block, cls</span>) {
22
<span class="hljs-keyword">try</span> {
3-
<span class="hljs-keyword">if</span> (cls.<span class="hljs-title hljs-function">search</span>(<span class="hljs-regexp">/\bno\-highlight\b/</span>) != -<span class="hljs-number">1</span>)
4-
<span class="hljs-keyword">return</span> <span class="hljs-title hljs-function">process</span>(block, <span class="hljs-literal">true</span>, <span class="hljs-number">0x0F</span>) +
3+
<span class="hljs-keyword">if</span> (cls.<span class="hljs-title function_">search</span>(<span class="hljs-regexp">/\bno\-highlight\b/</span>) != -<span class="hljs-number">1</span>)
4+
<span class="hljs-keyword">return</span> <span class="hljs-title function_">process</span>(block, <span class="hljs-literal">true</span>, <span class="hljs-number">0x0F</span>) +
55
<span class="hljs-string">' class=""'</span>;
66
} <span class="hljs-keyword">catch</span> (e) {
77
<span class="hljs-comment">/* handle exception */</span>
88
}
99
<span class="hljs-keyword">for</span> (<span class="hljs-keyword">var</span> i = <span class="hljs-number">0</span> / <span class="hljs-number">2</span>; i &lt; classes.<span class="hljs-property">length</span>; i++) {
10-
<span class="hljs-keyword">if</span> (<span class="hljs-title hljs-function">checkCondition</span>(classes[i]) === <span class="hljs-literal">undefined</span>)
10+
<span class="hljs-keyword">if</span> (<span class="hljs-title function_">checkCondition</span>(classes[i]) === <span class="hljs-literal">undefined</span>)
1111
<span class="hljs-keyword">return</span> <span class="hljs-regexp">/\d+[\s/]/g</span>;
1212
}
1313
}

test/fixture/js-modules/output.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
<span class="hljs-comment">//------ underscore.js ------</span>
22
<span class="hljs-keyword">export</span> <span class="hljs-keyword">default</span> <span class="hljs-keyword">function</span> (<span class="hljs-params">obj</span>) {};
3-
<span class="hljs-keyword">export</span> <span class="hljs-keyword">function</span> <span class="hljs-title hljs-function">each</span>(<span class="hljs-params">obj, iterator, context</span>) {};
3+
<span class="hljs-keyword">export</span> <span class="hljs-keyword">function</span> <span class="hljs-title function_">each</span>(<span class="hljs-params">obj, iterator, context</span>) {};
44
<span class="hljs-keyword">export</span> { each <span class="hljs-keyword">as</span> forEach };
5-
<span class="hljs-keyword">export</span> <span class="hljs-keyword">function</span> <span class="hljs-title hljs-function">something</span>(<span class="hljs-params"></span>) {};
5+
<span class="hljs-keyword">export</span> <span class="hljs-keyword">function</span> <span class="hljs-title function_">something</span>(<span class="hljs-params"></span>) {};
66

77
<span class="hljs-comment">//------ main.js ------</span>
88
<span class="hljs-keyword">import</span> _, { each, something <span class="hljs-keyword">as</span> otherthing } <span class="hljs-keyword">from</span> <span class="hljs-string">'underscore'</span>;

test/fixture/ruby-heredoc/output.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
<span class="hljs-keyword">def</span> <span class="hljs-title hljs-function">foo</span>()
1+
<span class="hljs-keyword">def</span> <span class="hljs-title function_">foo</span>()
22
msg = <span class="hljs-string">&lt;&lt;-HTML
33
&lt;div>
44
&lt;h4><span class="hljs-subst">#{bar}</span>&lt;/h4>
55
&lt;/div>
66
HTML</span>
77
<span class="hljs-keyword">end</span>
88

9-
<span class="hljs-keyword">def</span> <span class="hljs-title hljs-function">baz</span>()
9+
<span class="hljs-keyword">def</span> <span class="hljs-title function_">baz</span>()
1010
msg = <span class="hljs-string">&lt;&lt;~FOO
1111
&lt;div>
1212
&lt;h4><span class="hljs-subst">#{bar}</span>&lt;/h4>
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
<span class="hljs-keyword">fn</span> <span class="hljs-title hljs-function">sqr</span>(i: <span class="hljs-type">i32</span>) { i * i }
2-
<span class="hljs-keyword">trait</span> <span class="hljs-title hljs-class">Minimum</span> : <span class="hljs-built_in">Copy</span> {}
3-
<span class="hljs-keyword">pub</span> <span class="hljs-keyword">trait</span> <span class="hljs-title hljs-class">Builder</span> <span class="hljs-keyword">where</span> <span class="hljs-keyword">Self</span>: <span class="hljs-built_in">Sized</span> + <span class="hljs-built_in">Iterator</span>&lt;Item=Event> {}
1+
<span class="hljs-keyword">fn</span> <span class="hljs-title function_">sqr</span>(i: <span class="hljs-type">i32</span>) { i * i }
2+
<span class="hljs-keyword">trait</span> <span class="hljs-title class_">Minimum</span> : <span class="hljs-built_in">Copy</span> {}
3+
<span class="hljs-keyword">pub</span> <span class="hljs-keyword">trait</span> <span class="hljs-title class_">Builder</span> <span class="hljs-keyword">where</span> <span class="hljs-keyword">Self</span>: <span class="hljs-built_in">Sized</span> + <span class="hljs-built_in">Iterator</span>&lt;Item=Event> {}
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
<span class="hljs-keyword">protocol</span> <span class="hljs-title hljs-class">Protocol</span> {
2-
<span class="hljs-keyword">func</span> <span class="hljs-title hljs-function">f1</span>()
3-
<span class="hljs-keyword">func</span> <span class="hljs-title hljs-function">f2</span>()
1+
<span class="hljs-keyword">protocol</span> <span class="hljs-title class_">Protocol</span> {
2+
<span class="hljs-keyword">func</span> <span class="hljs-title function_">f1</span>()
3+
<span class="hljs-keyword">func</span> <span class="hljs-title function_">f2</span>()
44
}
55

6-
<span class="hljs-keyword">class</span> <span class="hljs-title hljs-class">MyClass</span> {
7-
<span class="hljs-keyword">func</span> <span class="hljs-title hljs-function">f</span>() {
6+
<span class="hljs-keyword">class</span> <span class="hljs-title class_">MyClass</span> {
7+
<span class="hljs-keyword">func</span> <span class="hljs-title function_">f</span>() {
88
<span class="hljs-keyword">return</span> <span class="hljs-literal">true</span>
99
}
1010
}

test/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ test('lowlight.highlight(language, value[, options])', (t) => {
107107
{
108108
type: 'element',
109109
tagName: 'span',
110-
properties: {className: ['hljs-title', 'hljs-function']},
110+
properties: {className: ['hljs-title', 'function_']},
111111
children: [{type: 'text', value: 'moveTo'}]
112112
},
113113
{

0 commit comments

Comments
 (0)