Skip to content

Commit 99759d4

Browse files
committed
Fix splitting of emphasis against word characters
Fixes: #5 References: jgm/pandoc#5821
1 parent 54f489b commit 99759d4

File tree

5 files changed

+42
-9
lines changed

5 files changed

+42
-9
lines changed

grammars/muse.cson

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -144,23 +144,23 @@ repository:
144144
end: "(?<=\\S)\\1(?=\\W|$)|(?=^[ \\t]*$)"
145145
beginCaptures: 1: name: "punctuation.definition.emphasis.begin.muse"
146146
endCaptures: 0: name: "punctuation.definition.emphasis.end.muse"
147-
patterns: [include: "#inline"]
147+
patterns: [include: "#inlineInnards"]
148148
},{
149149
# **Bold**
150150
name: "markup.bold.strong.emphasis.muse"
151151
begin: "(?<=\\W|^)(\\*{2})(?=\\S)"
152152
end: "(?<=\\S)\\1(?=\\W|$)|(?=^[ \\t]*$)"
153153
beginCaptures: 1: name: "punctuation.definition.emphasis.begin.muse"
154154
endCaptures: 0: name: "punctuation.definition.emphasis.end.muse"
155-
patterns: [include: "#inline"]
155+
patterns: [include: "#inlineInnards"]
156156
},{
157157
# *Italic*
158158
name: "markup.italic.emphasis.muse"
159159
begin: "(?<=\\W|^)\\*(?=\\S)"
160160
end: "(?<=\\S)\\*(?=\\W|$)|(?=^[ \\t]*$)"
161161
beginCaptures: 0: name: "punctuation.definition.emphasis.begin.muse"
162162
endCaptures: 0: name: "punctuation.definition.emphasis.end.muse"
163-
patterns: [include: "#inline"]
163+
patterns: [include: "#inlineInnards"]
164164
}]
165165

166166

@@ -257,6 +257,15 @@ repository:
257257
{include: "#underline"}
258258
]
259259

260+
# Stuff matched inside an span of inline markup
261+
inlineInnards:
262+
patterns: [{
263+
# Swallow asterisks embedded between word characters.
264+
# See: Alhadis/language-emacs-lisp#5, jgm/pandoc#5821
265+
match: "(?<=\\w)\\*+(?=\\w)"
266+
267+
}, include: "#inline"]
268+
260269

261270
# Hyperlink
262271
link:

spec/fixtures/output/inline-bold-italic.muse.json

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,13 +117,17 @@
117117
],[
118118
["Foo ", "text.muse", "meta.document.muse", "meta.paragraph.align.left.muse"],
119119
["***", "text.muse", "meta.document.muse", "meta.paragraph.align.left.muse", "markup.bold.italic.strong.emphasis.muse", "punctuation.definition.emphasis.begin.muse"],
120-
["bolditalic*unclosed bolditalic", "text.muse", "meta.document.muse", "meta.paragraph.align.left.muse", "markup.bold.italic.strong.emphasis.muse"]
120+
["bolditalic", "text.muse", "meta.document.muse", "meta.paragraph.align.left.muse", "markup.bold.italic.strong.emphasis.muse"],
121+
["*", "text.muse", "meta.document.muse", "meta.paragraph.align.left.muse", "markup.bold.italic.strong.emphasis.muse"],
122+
["unclosed bolditalic", "text.muse", "meta.document.muse", "meta.paragraph.align.left.muse", "markup.bold.italic.strong.emphasis.muse"]
121123
],[
122124
["", "text.muse", "meta.document.muse"]
123125
],[
124126
["Foo ", "text.muse", "meta.document.muse", "meta.paragraph.align.left.muse"],
125127
["***", "text.muse", "meta.document.muse", "meta.paragraph.align.left.muse", "markup.bold.italic.strong.emphasis.muse", "punctuation.definition.emphasis.begin.muse"],
126-
["bolditalic*bolditalic", "text.muse", "meta.document.muse", "meta.paragraph.align.left.muse", "markup.bold.italic.strong.emphasis.muse"],
128+
["bolditalic", "text.muse", "meta.document.muse", "meta.paragraph.align.left.muse", "markup.bold.italic.strong.emphasis.muse"],
129+
["*", "text.muse", "meta.document.muse", "meta.paragraph.align.left.muse", "markup.bold.italic.strong.emphasis.muse"],
130+
["bolditalic", "text.muse", "meta.document.muse", "meta.paragraph.align.left.muse", "markup.bold.italic.strong.emphasis.muse"],
127131
["***", "text.muse", "meta.document.muse", "meta.paragraph.align.left.muse", "markup.bold.italic.strong.emphasis.muse", "punctuation.definition.emphasis.end.muse"],
128132
[" baz", "text.muse", "meta.document.muse", "meta.paragraph.align.left.muse"]
129133
],[

spec/fixtures/output/inline-bold.muse.json

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,13 +81,17 @@
8181
],[
8282
["Foo ", "text.muse", "meta.document.muse", "meta.paragraph.align.left.muse"],
8383
["**", "text.muse", "meta.document.muse", "meta.paragraph.align.left.muse", "markup.bold.strong.emphasis.muse", "punctuation.definition.emphasis.begin.muse"],
84-
["bold*unclosed bold", "text.muse", "meta.document.muse", "meta.paragraph.align.left.muse", "markup.bold.strong.emphasis.muse"]
84+
["bold", "text.muse", "meta.document.muse", "meta.paragraph.align.left.muse", "markup.bold.strong.emphasis.muse"],
85+
["*", "text.muse", "meta.document.muse", "meta.paragraph.align.left.muse", "markup.bold.strong.emphasis.muse"],
86+
["unclosed bold", "text.muse", "meta.document.muse", "meta.paragraph.align.left.muse", "markup.bold.strong.emphasis.muse"]
8587
],[
8688
["", "text.muse", "meta.document.muse"]
8789
],[
8890
["Foo ", "text.muse", "meta.document.muse", "meta.paragraph.align.left.muse"],
8991
["**", "text.muse", "meta.document.muse", "meta.paragraph.align.left.muse", "markup.bold.strong.emphasis.muse", "punctuation.definition.emphasis.begin.muse"],
90-
["bold*bold", "text.muse", "meta.document.muse", "meta.paragraph.align.left.muse", "markup.bold.strong.emphasis.muse"],
92+
["bold", "text.muse", "meta.document.muse", "meta.paragraph.align.left.muse", "markup.bold.strong.emphasis.muse"],
93+
["*", "text.muse", "meta.document.muse", "meta.paragraph.align.left.muse", "markup.bold.strong.emphasis.muse"],
94+
["bold", "text.muse", "meta.document.muse", "meta.paragraph.align.left.muse", "markup.bold.strong.emphasis.muse"],
9195
["**", "text.muse", "meta.document.muse", "meta.paragraph.align.left.muse", "markup.bold.strong.emphasis.muse", "punctuation.definition.emphasis.end.muse"],
9296
[" baz", "text.muse", "meta.document.muse", "meta.paragraph.align.left.muse"]
9397
],[

spec/fixtures/output/inline-italic.muse.json

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,13 +81,17 @@
8181
],[
8282
["Foo ", "text.muse", "meta.document.muse", "meta.paragraph.align.left.muse"],
8383
["*", "text.muse", "meta.document.muse", "meta.paragraph.align.left.muse", "markup.italic.emphasis.muse", "punctuation.definition.emphasis.begin.muse"],
84-
["italic*unclosed italic", "text.muse", "meta.document.muse", "meta.paragraph.align.left.muse", "markup.italic.emphasis.muse"]
84+
["italic", "text.muse", "meta.document.muse", "meta.paragraph.align.left.muse", "markup.italic.emphasis.muse"],
85+
["*", "text.muse", "meta.document.muse", "meta.paragraph.align.left.muse", "markup.italic.emphasis.muse"],
86+
["unclosed italic", "text.muse", "meta.document.muse", "meta.paragraph.align.left.muse", "markup.italic.emphasis.muse"]
8587
],[
8688
["", "text.muse", "meta.document.muse"]
8789
],[
8890
["Foo ", "text.muse", "meta.document.muse", "meta.paragraph.align.left.muse"],
8991
["*", "text.muse", "meta.document.muse", "meta.paragraph.align.left.muse", "markup.italic.emphasis.muse", "punctuation.definition.emphasis.begin.muse"],
90-
["italic*italic", "text.muse", "meta.document.muse", "meta.paragraph.align.left.muse", "markup.italic.emphasis.muse"],
92+
["italic", "text.muse", "meta.document.muse", "meta.paragraph.align.left.muse", "markup.italic.emphasis.muse"],
93+
["*", "text.muse", "meta.document.muse", "meta.paragraph.align.left.muse", "markup.italic.emphasis.muse"],
94+
["italic", "text.muse", "meta.document.muse", "meta.paragraph.align.left.muse", "markup.italic.emphasis.muse"],
9195
["*", "text.muse", "meta.document.muse", "meta.paragraph.align.left.muse", "markup.italic.emphasis.muse", "punctuation.definition.emphasis.end.muse"],
9296
[" baz", "text.muse", "meta.document.muse", "meta.paragraph.align.left.muse"]
9397
],[

spec/muse-spec.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,18 @@ describe("Muse grammar", () => {
6363
expect(tokens[1]).to.eql({value: "=", scopes: [...baseScopes]});
6464
expect(tokens[2]).to.eql({value: "=", scopes: [...baseScopes, "punctuation.definition.literal.end.muse"]});
6565
});
66+
67+
it("doesn't terminate emphasis at embedded asterisks", () => {
68+
const {tokens} = muse.tokenizeLine("Foo **bold**bar baz qux** qul");
69+
const baseScopes = ["text.muse", "meta.document.muse", "meta.paragraph.align.left.muse"];
70+
expect(tokens[0]).to.eql({value: "Foo ", scopes: [...baseScopes]});
71+
expect(tokens[1]).to.eql({value: "**", scopes: [...baseScopes, "markup.bold.strong.emphasis.muse", "punctuation.definition.emphasis.begin.muse"]});
72+
expect(tokens[2]).to.eql({value: "bold", scopes: [...baseScopes, "markup.bold.strong.emphasis.muse"]});
73+
expect(tokens[3]).to.eql({value: "**", scopes: [...baseScopes, "markup.bold.strong.emphasis.muse"]});
74+
expect(tokens[4]).to.eql({value: "bar baz qux", scopes: [...baseScopes, "markup.bold.strong.emphasis.muse"]});
75+
expect(tokens[5]).to.eql({value: "**", scopes: [...baseScopes, "markup.bold.strong.emphasis.muse", "punctuation.definition.emphasis.end.muse"]});
76+
expect(tokens[6]).to.eql({value: " qul", scopes: [...baseScopes]});
77+
});
6678
});
6779

6880
describe("Fixture highlighting", function(){

0 commit comments

Comments
 (0)