Skip to content

Commit 31e0bf0

Browse files
committed
katex [nfc]: Handle error immediately on spanClasses overrun
Like an early return, this (a) brings the consequence of the error immediately next to the condition defining it, and (b) lets the normal happy case continue vertically down without adding indentation.
1 parent 9854bb8 commit 31e0bf0

File tree

1 file changed

+37
-48
lines changed

1 file changed

+37
-48
lines changed

lib/model/katex.dart

Lines changed: 37 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -278,73 +278,62 @@ class _KatexParser {
278278
case 'fontsize-ensurer':
279279
// .sizing,
280280
// .fontsize-ensurer { ... }
281-
if (index + 1 < spanClasses.length) {
282-
final resetSizeClass = spanClasses[index++];
283-
final sizeClass = spanClasses[index++];
281+
if (index + 2 > spanClasses.length) throw KatexHtmlParseError();
282+
final resetSizeClass = spanClasses[index++];
283+
final sizeClass = spanClasses[index++];
284284

285-
final resetSizeClassSuffix = _resetSizeClassRegExp.firstMatch(resetSizeClass)?.group(1);
286-
final sizeClassSuffix = _sizeClassRegExp.firstMatch(sizeClass)?.group(1);
285+
final resetSizeClassSuffix = _resetSizeClassRegExp.firstMatch(resetSizeClass)?.group(1);
286+
final sizeClassSuffix = _sizeClassRegExp.firstMatch(sizeClass)?.group(1);
287287

288-
if (resetSizeClassSuffix != null && sizeClassSuffix != null) {
289-
const sizes = <double>[0.5, 0.6, 0.7, 0.8, 0.9, 1, 1.2, 1.44, 1.728, 2.074, 2.488];
288+
if (resetSizeClassSuffix != null && sizeClassSuffix != null) {
289+
const sizes = <double>[0.5, 0.6, 0.7, 0.8, 0.9, 1, 1.2, 1.44, 1.728, 2.074, 2.488];
290290

291-
final resetSizeIdx = int.parse(resetSizeClassSuffix, radix: 10);
292-
final sizeIdx = int.parse(sizeClassSuffix, radix: 10);
291+
final resetSizeIdx = int.parse(resetSizeClassSuffix, radix: 10);
292+
final sizeIdx = int.parse(sizeClassSuffix, radix: 10);
293293

294-
// These indexes start at 1.
295-
if (resetSizeIdx <= sizes.length && sizeIdx <= sizes.length) {
296-
styles.fontSizeEm = sizes[sizeIdx - 1] / sizes[resetSizeIdx - 1];
297-
continue;
298-
}
294+
// These indexes start at 1.
295+
if (resetSizeIdx <= sizes.length && sizeIdx <= sizes.length) {
296+
styles.fontSizeEm = sizes[sizeIdx - 1] / sizes[resetSizeIdx - 1];
297+
continue;
299298
}
300299
}
301300

302301
throw KatexHtmlParseError();
303302

304303
case 'delimsizing':
305304
// .delimsizing { ... }
306-
if (index < spanClasses.length) {
307-
final nextClass = spanClasses[index++];
308-
switch (nextClass) {
309-
case 'size1':
310-
styles.fontFamily = 'KaTeX_Size1';
311-
case 'size2':
312-
styles.fontFamily = 'KaTeX_Size2';
313-
case 'size3':
314-
styles.fontFamily = 'KaTeX_Size3';
315-
case 'size4':
316-
styles.fontFamily = 'KaTeX_Size4';
317-
318-
case 'mult':
319-
// TODO handle nested spans with `.delim-size{1,4}` class.
320-
break;
321-
}
322-
323-
if (styles.fontFamily == null) throw KatexHtmlParseError();
324-
325-
continue;
305+
if (index + 1 > spanClasses.length) throw KatexHtmlParseError();
306+
final nextClass = spanClasses[index++];
307+
switch (nextClass) {
308+
case 'size1':
309+
styles.fontFamily = 'KaTeX_Size1';
310+
case 'size2':
311+
styles.fontFamily = 'KaTeX_Size2';
312+
case 'size3':
313+
styles.fontFamily = 'KaTeX_Size3';
314+
case 'size4':
315+
styles.fontFamily = 'KaTeX_Size4';
316+
317+
case 'mult':
318+
// TODO handle nested spans with `.delim-size{1,4}` class.
319+
break;
326320
}
327321

328-
throw KatexHtmlParseError();
322+
if (styles.fontFamily == null) throw KatexHtmlParseError();
329323

330324
// TODO handle .nulldelimiter and .delimcenter .
331325

332326
case 'op-symbol':
333327
// .op-symbol { ... }
334-
if (index < spanClasses.length) {
335-
final nextClass = spanClasses[index++];
336-
switch (nextClass) {
337-
case 'small-op':
338-
styles.fontFamily = 'KaTeX_Size1';
339-
case 'large-op':
340-
styles.fontFamily = 'KaTeX_Size2';
341-
}
342-
if (styles.fontFamily == null) throw KatexHtmlParseError();
343-
344-
continue;
328+
if (index + 1 > spanClasses.length) throw KatexHtmlParseError();
329+
final nextClass = spanClasses[index++];
330+
switch (nextClass) {
331+
case 'small-op':
332+
styles.fontFamily = 'KaTeX_Size1';
333+
case 'large-op':
334+
styles.fontFamily = 'KaTeX_Size2';
345335
}
346-
347-
throw KatexHtmlParseError();
336+
if (styles.fontFamily == null) throw KatexHtmlParseError();
348337

349338
// TODO handle more classes from katex.scss
350339

0 commit comments

Comments
 (0)