Skip to content

Commit d437936

Browse files
content [nfc]: Reintroduce KatexNode as a base sealed class
And rename previous type to KatexSpanNode, also while making it a subtype of KatexNode.
1 parent b433cc1 commit d437936

File tree

5 files changed

+70
-62
lines changed

5 files changed

+70
-62
lines changed

lib/model/content.dart

+6-2
Original file line numberDiff line numberDiff line change
@@ -369,8 +369,12 @@ abstract class MathNode extends ContentNode {
369369
}
370370
}
371371

372-
class KatexNode extends ContentNode {
373-
const KatexNode({
372+
sealed class KatexNode extends ContentNode {
373+
const KatexNode({super.debugHtmlNode});
374+
}
375+
376+
class KatexSpanNode extends KatexNode {
377+
const KatexSpanNode({
374378
required this.styles,
375379
required this.text,
376380
required this.nodes,

lib/model/katex.dart

+1-1
Original file line numberDiff line numberDiff line change
@@ -358,7 +358,7 @@ class _KatexParser {
358358

359359
final inlineStyles = _parseSpanInlineStyles(element);
360360

361-
return KatexNode(
361+
return KatexSpanNode(
362362
styles: inlineStyles != null
363363
? styles.merge(inlineStyles)
364364
: styles,

lib/widgets/content.dart

+4-2
Original file line numberDiff line numberDiff line change
@@ -878,15 +878,17 @@ class _KatexNodeList extends StatelessWidget {
878878
return WidgetSpan(
879879
alignment: PlaceholderAlignment.baseline,
880880
baseline: TextBaseline.alphabetic,
881-
child: _KatexSpan(e));
881+
child: switch (e) {
882+
KatexSpanNode() => _KatexSpan(e),
883+
});
882884
}))));
883885
}
884886
}
885887

886888
class _KatexSpan extends StatelessWidget {
887889
const _KatexSpan(this.node);
888890

889-
final KatexNode node;
891+
final KatexSpanNode node;
890892

891893
@override
892894
Widget build(BuildContext context) {

test/model/content_test.dart

+52-52
Original file line numberDiff line numberDiff line change
@@ -518,9 +518,9 @@ class ContentExample {
518518
'<annotation encoding="application/x-tex"> \\lambda </annotation></semantics></math></span>'
519519
'<span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal">λ</span></span></span></span></p>',
520520
MathInlineNode(texSource: r'\lambda', nodes: [
521-
KatexNode(styles: KatexSpanStyles(), text: null, nodes: [
522-
KatexNode(styles: KatexSpanStyles(heightEm: 0.6944), text: null, nodes: []),
523-
KatexNode(
521+
KatexSpanNode(styles: KatexSpanStyles(), text: null, nodes: [
522+
KatexSpanNode(styles: KatexSpanStyles(heightEm: 0.6944), text: null, nodes: []),
523+
KatexSpanNode(
524524
styles: KatexSpanStyles(
525525
fontFamily: 'KaTeX_Math',
526526
fontStyle: KatexSpanFontStyle.italic),
@@ -538,9 +538,9 @@ class ContentExample {
538538
'<annotation encoding="application/x-tex">\\lambda</annotation></semantics></math></span>'
539539
'<span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal">λ</span></span></span></span></span></p>',
540540
[MathBlockNode(texSource: r'\lambda', nodes: [
541-
KatexNode(styles: KatexSpanStyles(), text: null, nodes: [
542-
KatexNode(styles: KatexSpanStyles(heightEm: 0.6944), text: null, nodes: []),
543-
KatexNode(
541+
KatexSpanNode(styles: KatexSpanStyles(), text: null, nodes: [
542+
KatexSpanNode(styles: KatexSpanStyles(heightEm: 0.6944), text: null, nodes: []),
543+
KatexSpanNode(
544544
styles: KatexSpanStyles(
545545
fontFamily: 'KaTeX_Math',
546546
fontStyle: KatexSpanFontStyle.italic),
@@ -563,9 +563,9 @@ class ContentExample {
563563
'<annotation encoding="application/x-tex">b</annotation></semantics></math></span>'
564564
'<span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal">b</span></span></span></span></span></p>', [
565565
MathBlockNode(texSource: 'a', nodes: [
566-
KatexNode(styles: KatexSpanStyles(), text: null, nodes: [
567-
KatexNode(styles: KatexSpanStyles(heightEm: 0.4306), text: null, nodes: []),
568-
KatexNode(
566+
KatexSpanNode(styles: KatexSpanStyles(), text: null, nodes: [
567+
KatexSpanNode(styles: KatexSpanStyles(heightEm: 0.4306), text: null, nodes: []),
568+
KatexSpanNode(
569569
styles: KatexSpanStyles(
570570
fontFamily: 'KaTeX_Math',
571571
fontStyle: KatexSpanFontStyle.italic),
@@ -574,9 +574,9 @@ class ContentExample {
574574
]),
575575
]),
576576
MathBlockNode(texSource: 'b', nodes: [
577-
KatexNode(styles: KatexSpanStyles(), text: null, nodes: [
578-
KatexNode(styles: KatexSpanStyles(heightEm: 0.6944), text: null, nodes: []),
579-
KatexNode(
577+
KatexSpanNode(styles: KatexSpanStyles(), text: null, nodes: [
578+
KatexSpanNode(styles: KatexSpanStyles(heightEm: 0.6944), text: null, nodes: []),
579+
KatexSpanNode(
580580
styles: KatexSpanStyles(
581581
fontFamily: 'KaTeX_Math',
582582
fontStyle: KatexSpanFontStyle.italic),
@@ -602,9 +602,9 @@ class ContentExample {
602602
'<br>\n</p>\n</blockquote>',
603603
[QuotationNode([
604604
MathBlockNode(texSource: r'\lambda', nodes: [
605-
KatexNode(styles: KatexSpanStyles(), text: null, nodes: [
606-
KatexNode(styles: KatexSpanStyles(heightEm: 0.6944), text: null, nodes: []),
607-
KatexNode(
605+
KatexSpanNode(styles: KatexSpanStyles(), text: null, nodes: [
606+
KatexSpanNode(styles: KatexSpanStyles(heightEm: 0.6944), text: null, nodes: []),
607+
KatexSpanNode(
608608
styles: KatexSpanStyles(
609609
fontFamily: 'KaTeX_Math',
610610
fontStyle: KatexSpanFontStyle.italic),
@@ -631,9 +631,9 @@ class ContentExample {
631631
'<br>\n</p>\n</blockquote>',
632632
[QuotationNode([
633633
MathBlockNode(texSource: 'a', nodes: [
634-
KatexNode(styles: KatexSpanStyles(), text: null, nodes: [
635-
KatexNode(styles: KatexSpanStyles(heightEm: 0.4306), text: null, nodes: []),
636-
KatexNode(
634+
KatexSpanNode(styles: KatexSpanStyles(), text: null, nodes: [
635+
KatexSpanNode(styles: KatexSpanStyles(heightEm: 0.4306), text: null, nodes: []),
636+
KatexSpanNode(
637637
styles: KatexSpanStyles(
638638
fontFamily: 'KaTeX_Math',
639639
fontStyle: KatexSpanFontStyle.italic),
@@ -642,9 +642,9 @@ class ContentExample {
642642
]),
643643
]),
644644
MathBlockNode(texSource: 'b', nodes: [
645-
KatexNode(styles: KatexSpanStyles(), text: null, nodes: [
646-
KatexNode(styles: KatexSpanStyles(heightEm: 0.6944), text: null, nodes: []),
647-
KatexNode(
645+
KatexSpanNode(styles: KatexSpanStyles(), text: null, nodes: [
646+
KatexSpanNode(styles: KatexSpanStyles(heightEm: 0.6944), text: null, nodes: []),
647+
KatexSpanNode(
648648
styles: KatexSpanStyles(
649649
fontFamily: 'KaTeX_Math',
650650
fontStyle: KatexSpanFontStyle.italic),
@@ -680,9 +680,9 @@ class ContentExample {
680680
originalHeight: null),
681681
]),
682682
MathBlockNode(texSource: 'a', nodes: [
683-
KatexNode(styles: KatexSpanStyles(), text: null, nodes: [
684-
KatexNode(styles: KatexSpanStyles(heightEm: 0.4306),text: null, nodes: []),
685-
KatexNode(
683+
KatexSpanNode(styles: KatexSpanStyles(), text: null, nodes: [
684+
KatexSpanNode(styles: KatexSpanStyles(heightEm: 0.4306),text: null, nodes: []),
685+
KatexSpanNode(
686686
styles: KatexSpanStyles(
687687
fontFamily: 'KaTeX_Math',
688688
fontStyle: KatexSpanFontStyle.italic),
@@ -727,51 +727,51 @@ class ContentExample {
727727
MathBlockNode(
728728
texSource: "\\Huge 1\n\\huge 2\n\\LARGE 3\n\\Large 4\n\\large 5\n\\normalsize 6\n\\small 7\n\\footnotesize 8\n\\scriptsize 9\n\\tiny 0",
729729
nodes: [
730-
KatexNode(
730+
KatexSpanNode(
731731
styles: KatexSpanStyles(),
732732
text: null,
733733
nodes: [
734-
KatexNode(
734+
KatexSpanNode(
735735
styles: KatexSpanStyles(heightEm: 1.6034),
736736
text: null,
737737
nodes: []),
738-
KatexNode(
738+
KatexSpanNode(
739739
styles: KatexSpanStyles(fontSizeEm: 2.488), // .reset-size6.size11
740740
text: '1',
741741
nodes: null),
742-
KatexNode(
742+
KatexSpanNode(
743743
styles: KatexSpanStyles(fontSizeEm: 2.074), // .reset-size6.size10
744744
text: '2',
745745
nodes: null),
746-
KatexNode(
746+
KatexSpanNode(
747747
styles: KatexSpanStyles(fontSizeEm: 1.728), // .reset-size6.size9
748748
text: '3',
749749
nodes: null),
750-
KatexNode(
750+
KatexSpanNode(
751751
styles: KatexSpanStyles(fontSizeEm: 1.44), // .reset-size6.size8
752752
text: '4',
753753
nodes: null),
754-
KatexNode(
754+
KatexSpanNode(
755755
styles: KatexSpanStyles(fontSizeEm: 1.2), // .reset-size6.size7
756756
text: '5',
757757
nodes: null),
758-
KatexNode(
758+
KatexSpanNode(
759759
styles: KatexSpanStyles(fontSizeEm: 1.0), // .reset-size6.size6
760760
text: '6',
761761
nodes: null),
762-
KatexNode(
762+
KatexSpanNode(
763763
styles: KatexSpanStyles(fontSizeEm: 0.9), // .reset-size6.size5
764764
text: '7',
765765
nodes: null),
766-
KatexNode(
766+
KatexSpanNode(
767767
styles: KatexSpanStyles(fontSizeEm: 0.8), // .reset-size6.size4
768768
text: '8',
769769
nodes: null),
770-
KatexNode(
770+
KatexSpanNode(
771771
styles: KatexSpanStyles(fontSizeEm: 0.7), // .reset-size6.size3
772772
text: '9',
773773
nodes: null),
774-
KatexNode(
774+
KatexSpanNode(
775775
styles: KatexSpanStyles(fontSizeEm: 0.5), // .reset-size6.size1
776776
text: '0',
777777
nodes: null),
@@ -796,23 +796,23 @@ class ContentExample {
796796
MathBlockNode(
797797
texSource: '\\tiny {1 \\Huge 2}',
798798
nodes: [
799-
KatexNode(
799+
KatexSpanNode(
800800
styles: KatexSpanStyles(),
801801
text: null,
802802
nodes: [
803-
KatexNode(
803+
KatexSpanNode(
804804
styles: KatexSpanStyles(heightEm: 1.6034),
805805
text: null,
806806
nodes: []),
807-
KatexNode(
807+
KatexSpanNode(
808808
styles: KatexSpanStyles(fontSizeEm: 0.5), // reset-size6 size1
809809
text: null,
810810
nodes: [
811-
KatexNode(
811+
KatexSpanNode(
812812
styles: KatexSpanStyles(),
813813
text: '1',
814814
nodes: null),
815-
KatexNode(
815+
KatexSpanNode(
816816
styles: KatexSpanStyles(fontSizeEm: 4.976), // reset-size1 size11
817817
text: '2',
818818
nodes: null),
@@ -841,52 +841,52 @@ class ContentExample {
841841
MathBlockNode(
842842
texSource: '⟨ \\big( \\Big[ \\bigg⌈ \\Bigg⌊',
843843
nodes: [
844-
KatexNode(
844+
KatexSpanNode(
845845
styles: KatexSpanStyles(),
846846
text: null,
847847
nodes: [
848-
KatexNode(
848+
KatexSpanNode(
849849
styles: KatexSpanStyles(
850850
heightEm: 3.0,
851851
verticalAlignEm: -1.25),
852852
text: null,
853853
nodes: []),
854-
KatexNode(
854+
KatexSpanNode(
855855
styles: KatexSpanStyles(),
856856
text: '⟨',
857857
nodes: null),
858-
KatexNode(
858+
KatexSpanNode(
859859
styles: KatexSpanStyles(),
860860
text: null,
861861
nodes: [
862-
KatexNode(
862+
KatexSpanNode(
863863
styles: KatexSpanStyles(fontFamily: 'KaTeX_Size1'),
864864
text: '(',
865865
nodes: null),
866866
]),
867-
KatexNode(
867+
KatexSpanNode(
868868
styles: KatexSpanStyles(),
869869
text: null,
870870
nodes: [
871-
KatexNode(
871+
KatexSpanNode(
872872
styles: KatexSpanStyles(fontFamily: 'KaTeX_Size2'),
873873
text: '[',
874874
nodes: null),
875875
]),
876-
KatexNode(
876+
KatexSpanNode(
877877
styles: KatexSpanStyles(),
878878
text: null,
879879
nodes: [
880-
KatexNode(
880+
KatexSpanNode(
881881
styles: KatexSpanStyles(fontFamily: 'KaTeX_Size3'),
882882
text: '⌈',
883883
nodes: null),
884884
]),
885-
KatexNode(
885+
KatexSpanNode(
886886
styles: KatexSpanStyles(),
887887
text: null,
888888
nodes: [
889-
KatexNode(
889+
KatexSpanNode(
890890
styles: KatexSpanStyles(fontFamily: 'KaTeX_Size4'),
891891
text: '⌊',
892892
nodes: null),

test/widgets/content_test.dart

+7-5
Original file line numberDiff line numberDiff line change
@@ -600,9 +600,10 @@ void main() {
600600
mkBaseKatexTextStyle(ContentTheme.of(context).textStylePlainParagraph);
601601

602602
final mathBlockNode = content.expectedNodes.single as MathBlockNode;
603-
final baseNode = mathBlockNode.nodes!.single;
603+
final baseNode = mathBlockNode.nodes!.single as KatexSpanNode;
604604
final nodes = baseNode.nodes!.skip(1); // Skip .strut node.
605-
for (final katexNode in nodes) {
605+
for (var katexNode in nodes) {
606+
katexNode = katexNode as KatexSpanNode;
606607
final fontSize = katexNode.styles.fontSizeEm! * baseTextStyle.fontSize!;
607608
checkKatexText(tester, katexNode.text!,
608609
fontFamily: 'KaTeX_Main',
@@ -647,22 +648,23 @@ void main() {
647648
await prepareContent(tester, plainContent(content.html));
648649

649650
final mathBlockNode = content.expectedNodes.single as MathBlockNode;
650-
final baseNode = mathBlockNode.nodes!.single;
651+
final baseNode = mathBlockNode.nodes!.single as KatexSpanNode;
651652
var nodes = baseNode.nodes!.skip(1); // Skip .strut node.
652653

653654
final context = tester.element(find.byType(MathBlock));
654655
final baseTextStyle =
655656
mkBaseKatexTextStyle(ContentTheme.of(context).textStylePlainParagraph);
656657

657-
final firstNode = nodes.first;
658+
final firstNode = nodes.first as KatexSpanNode;
658659
checkKatexText(tester, firstNode.text!,
659660
fontFamily: 'KaTeX_Main',
660661
fontSize: baseTextStyle.fontSize!,
661662
fontHeight: baseTextStyle.height!);
662663
nodes = nodes.skip(1);
663664

664665
for (var katexNode in nodes) {
665-
katexNode = katexNode.nodes!.single; // Skip empty .mord parent.
666+
katexNode = katexNode as KatexSpanNode;
667+
katexNode = katexNode.nodes!.single as KatexSpanNode; // Skip empty .mord parent.
666668
final fontFamily = katexNode.styles.fontFamily!;
667669
checkKatexText(tester, katexNode.text!,
668670
fontFamily: fontFamily,

0 commit comments

Comments
 (0)