@@ -873,41 +873,48 @@ String? _parseMath(dom.Element element, {required bool block}) {
873
873
} else {
874
874
assert(element.localName == 'span' && element.className == 'katex-display');
875
875
876
- if (element.nodes.length != 1) return null;
877
- final child = element.nodes.single;
878
- if (child is! dom.Element) return null;
879
- if (child.localName != 'span') return null;
880
- if (child.className != 'katex') return null;
881
- katexElement = child;
876
+ if (element.nodes case [
877
+ dom.Element(localName: 'span', className: 'katex') && final child,
878
+ ]) {
879
+ katexElement = child;
880
+ } else {
881
+ return null;
882
+ }
882
883
}
883
884
884
885
// Expect two children span.katex-mathml, span.katex-html .
885
886
// For now we only care about the .katex-mathml .
886
- if (katexElement.nodes.isEmpty) return null;
887
- final child = katexElement.nodes.first;
888
- if (child is! dom.Element) return null;
889
- if (child.localName != 'span') return null;
890
- if (child.className != 'katex-mathml') return null;
891
-
892
- if (child.nodes.length != 1) return null;
893
- final grandchild = child.nodes.single;
894
- if (grandchild is! dom.Element) return null;
895
- if (grandchild.localName != 'math') return null;
896
- if (grandchild.attributes['display'] != (block ? 'block' : null)) return null;
897
- if (grandchild.namespaceUri != 'http://www.w3.org/1998/Math/MathML') return null;
898
-
899
- if (grandchild.nodes.length != 1) return null;
900
- final greatgrand = grandchild.nodes.single;
901
- if (greatgrand is! dom.Element) return null;
902
- if (greatgrand.localName != 'semantics') return null;
903
-
904
- if (greatgrand.nodes.isEmpty) return null;
905
- final descendant4 = greatgrand.nodes.last;
906
- if (descendant4 is! dom.Element) return null;
907
- if (descendant4.localName != 'annotation') return null;
908
- if (descendant4.attributes['encoding'] != 'application/x-tex') return null;
909
-
910
- return descendant4.text.trim();
887
+ if (katexElement.nodes case [
888
+ dom.Element(localName: 'span', className: 'katex-mathml', nodes: [
889
+ dom.Element(
890
+ localName: 'math',
891
+ namespaceUri: 'http://www.w3.org/1998/Math/MathML')
892
+ && final mathElement,
893
+ ]),
894
+ ...
895
+ ]) {
896
+ if (mathElement.attributes['display'] != (block ? 'block' : null)) {
897
+ return null;
898
+ }
899
+
900
+ final String texSource;
901
+ if (mathElement.nodes case [
902
+ dom.Element(localName: 'semantics', nodes: [
903
+ ...,
904
+ dom.Element(
905
+ localName: 'annotation',
906
+ attributes: {'encoding': 'application/x-tex'},
907
+ :final text),
908
+ ]),
909
+ ]) {
910
+ texSource = text.trim();
911
+ } else {
912
+ return null;
913
+ }
914
+ return texSource;
915
+ } else {
916
+ return null;
917
+ }
911
918
}
912
919
913
920
/// Parser for the inline-content subtrees within Zulip content HTML.
0 commit comments