Skip to content

Commit b1ed14d

Browse files
committed
Allow nested begin/end in bare blocks
microsoft/vscode#141905
1 parent 820d902 commit b1ed14d

File tree

2 files changed

+32
-7
lines changed

2 files changed

+32
-7
lines changed

index.js

+11-7
Original file line numberDiff line numberDiff line change
@@ -203,14 +203,13 @@ function bare_math_block(state, start, end, silent) {
203203
const endRe = /^\\end/;
204204

205205
if (!beginRe.test(firstLine)) { return false; }
206-
206+
207207
if (silent) { return true; }
208208

209+
let nestingCount = 0;
209210
let next;
210211
for (next = start; !found;) {
211-
212212
next++;
213-
214213
if (next >= end) { break; }
215214

216215
pos = state.bMarks[next] + state.tShift[next];
@@ -221,10 +220,15 @@ function bare_math_block(state, start, end, silent) {
221220
break;
222221
}
223222
const line = state.src.slice(pos, max);
224-
if (endRe.test(line)) {
225-
const lastPos = max;
226-
lastLine = state.src.slice(pos, lastPos);
227-
found = true;
223+
if (beginRe.test(line)) {
224+
++nestingCount;
225+
} else if (endRe.test(line)) {
226+
--nestingCount;
227+
if (nestingCount < 0) {
228+
const lastPos = max;
229+
lastLine = state.src.slice(pos, lastPos);
230+
found = true;
231+
}
228232
}
229233
}
230234

test/fixtures/bare.txt

+21
Original file line numberDiff line numberDiff line change
@@ -29,3 +29,24 @@ end
2929
\end{equation}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.2000000000000002em;vertical-align:-0.35000000000000003em;"></span><span class="mtable"><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8500000000000001em;"><span style="top:-3.01em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.35000000000000003em;"><span></span></span></span></span></span></span></span><span class="tag"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8500000000000001em;"><span style="top:-2.8499999999999996em;"><span class="pstrut" style="height:2.84em;"></span><span class="eqn-num"></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.35000000000000003em;"><span></span></span></span></span></span></span></span></span></p>
3030
<p>end</p>
3131
.
32+
33+
Bare block with multiple begin/ends
34+
.
35+
start
36+
\begin{equation}
37+
\begin{split}
38+
a = b \\
39+
c = c
40+
\end{split}
41+
\end{equation}
42+
end
43+
.
44+
<p>start</p>
45+
<p class="katex-block"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mtable rowspacing="0.1600em" columnspacing="1em"><mtr><mtd class ="mtr-glue"></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mtable rowspacing="0.2500em" columnalign="right" columnspacing=""><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mi>a</mi><mo>=</mo><mi>b</mi></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mi>c</mi><mo>=</mo><mi>c</mi></mrow></mstyle></mtd></mtr></mtable></mstyle></mtd><mtd class ="mtr-glue"></mtd><mtd class ="mml-eqn-num"></mtd></mtr></mtable><annotation encoding="application/x-tex">\begin{equation}
46+
\begin{split}
47+
a = b \\
48+
c = c
49+
\end{split}
50+
\end{equation}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:3.0000000000000004em;vertical-align:-1.2500000000000002em;"></span><span class="mtable"><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.7500000000000002em;"><span style="top:-3.75em;"><span class="pstrut" style="height:3.75em;"></span><span class="mord"><span class="mord"><span class="mtable"><span class="col-align-r"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.7500000000000002em;"><span style="top:-3.91em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mord mathnormal">b</span></span></span><span style="top:-2.41em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">c</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mord mathnormal">c</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.2500000000000002em;"><span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.2500000000000002em;"><span></span></span></span></span></span></span></span><span class="tag"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.7500000000000002em;"><span style="top:-3.75em;"><span class="pstrut" style="height:3.75em;"></span><span class="eqn-num"></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.2500000000000002em;"><span></span></span></span></span></span></span></span></span></p>
51+
<p>end</p>
52+
.

0 commit comments

Comments
 (0)