Skip to content

Commit 827ecab

Browse files
committed
OMML reader: further code simplification.
1 parent 2460489 commit 827ecab

File tree

1 file changed

+31
-26
lines changed

1 file changed

+31
-26
lines changed

src/Text/TeXMath/Readers/OMML.hs

+31-26
Original file line numberDiff line numberDiff line change
@@ -117,19 +117,6 @@ data OMathTextStyle = OPlain
117117
| OBoldItalic
118118
deriving (Show, Eq)
119119

120-
elemToBase :: Element -> Maybe Exp
121-
elemToBase element | isElem "m" "e" element = do
122-
bs <- elemToBases element
123-
return $ case bs of
124-
(e : []) -> e
125-
exps -> EGrouped exps
126-
elemToBase _ = Nothing
127-
128-
elemToBases :: Element -> Maybe [Exp]
129-
elemToBases element | isElem "m" "e" element =
130-
return $ concat $ mapMaybe elemToExps' (elChildren element)
131-
elemToBases _ = Nothing
132-
133120

134121
breakOnAmpersand :: [Exp] -> [[Exp]]
135122
breakOnAmpersand = splitWhen isAmpersand
@@ -234,9 +221,27 @@ oMathRunTextStyleToTextType (Styled scr sty)
234221
Just $ TextBoldItalic
235222
| otherwise = Nothing
236223

224+
elemsToExps :: [Element] -> [Exp]
225+
elemsToExps = concat . mapMaybe elemToExps
226+
237227
elemToExps :: Element -> Maybe [Exp]
238228
elemToExps element = unGroup <$> elemToExps' element
239229

230+
elemToBase :: Element -> Maybe Exp
231+
elemToBase element | isElem "m" "e" element = do
232+
bs <- elemToBases element
233+
return $ case bs of
234+
(e : []) -> e
235+
exps -> EGrouped exps
236+
elemToBase _ = Nothing
237+
238+
elemToBases :: Element -> Maybe [Exp]
239+
elemToBases element | isElem "m" "e" element =
240+
return $ concat $ mapMaybe elemToExps' (elChildren element)
241+
elemToBases _ = Nothing
242+
243+
244+
240245
elemToExps' :: Element -> Maybe [Exp]
241246
elemToExps' element | isElem "m" "acc" element = do
242247
let chr = filterChildName (hasElemName "m" "accPr") element >>=
@@ -301,8 +306,8 @@ elemToExps' element | isElem "m" "f" element = do
301306
let barType = filterChildName (hasElemName "m" "fPr") element >>=
302307
filterChildName (hasElemName "m" "type") >>=
303308
findAttrBy (hasElemName "m" "val")
304-
let numExp = EGrouped $ concat $ mapMaybe elemToExps (elChildren num)
305-
denExp = EGrouped $ concat $ mapMaybe elemToExps (elChildren den)
309+
let numExp = EGrouped $ elemsToExps (elChildren num)
310+
denExp = EGrouped $ elemsToExps (elChildren den)
306311
case barType of
307312
Just "noBar" -> Just [EFraction NoLineFrac numExp denExp]
308313
_ -> Just [EFraction NormalFrac numExp denExp]
@@ -350,14 +355,14 @@ elemToExps' element | isElem "m" "limLow" element = do
350355
baseExp <- filterChildName (hasElemName "m" "e") element
351356
>>= elemToBase
352357
limExp <- filterChildName (hasElemName "m" "lim") element
353-
>>= (\e -> Just $ concat $ mapMaybe elemToExps (elChildren e))
358+
>>= (\e -> Just $ elemsToExps (elChildren e))
354359
>>= (return . EGrouped)
355360
return [EUnder True baseExp limExp]
356361
elemToExps' element | isElem "m" "limUpp" element = do
357362
baseExp <- filterChildName (hasElemName "m" "e") element
358363
>>= elemToBase
359364
limExp <- filterChildName (hasElemName "m" "lim") element
360-
>>= (\e -> Just $ concat $ mapMaybe elemToExps (elChildren e))
365+
>>= (\e -> Just $ elemsToExps (elChildren e))
361366
>>= (return . EGrouped)
362367
return [EOver True baseExp limExp]
363368
elemToExps' element | isElem "m" "m" element =
@@ -381,9 +386,9 @@ elemToExps' element | isElem "m" "nary" element = do
381386
filterChildName (hasElemName "m" "limLoc") >>=
382387
findAttrBy (hasElemName "m" "val")
383388
subExps <- filterChildName (hasElemName "m" "sub") element >>=
384-
(\e -> return $ concat $ mapMaybe elemToExps (elChildren e))
389+
return . elemsToExps . elChildren
385390
supExps <- filterChildName (hasElemName "m" "sup") element >>=
386-
(\e -> return $ concat $ mapMaybe elemToExps (elChildren e))
391+
return . elemsToExps . elChildren
387392
let baseExp = maybeToList $
388393
filterChildName (hasElemName "m" "e") element >>= elemToBase
389394
case limLoc of
@@ -404,17 +409,17 @@ elemToExps' element | isElem "m" "phant" element = do
404409
return [EPhantom baseExp]
405410
elemToExps' element | isElem "m" "rad" element = do
406411
degExps <- filterChildName (hasElemName "m" "deg") element >>=
407-
(\e -> return $ concat $ mapMaybe elemToExps (elChildren e))
412+
return . elemsToExps . elChildren
408413
baseExp <- filterChildName (hasElemName "m" "e") element >>=
409414
elemToBase
410415
return $ case degExps of
411416
[] -> [ESqrt baseExp]
412417
ds -> [ERoot (EGrouped ds) baseExp]
413418
elemToExps' element | isElem "m" "sPre" element = do
414419
subExps <- filterChildName (hasElemName "m" "sub") element >>=
415-
(\e -> return $ concat $ mapMaybe elemToExps (elChildren e))
420+
return . elemsToExps . elChildren
416421
supExps <- filterChildName (hasElemName "m" "sup") element >>=
417-
(\e -> return $ concat $ mapMaybe elemToExps (elChildren e))
422+
return . elemsToExps . elChildren
418423
baseExp <- filterChildName (hasElemName "m" "e") element >>=
419424
elemToBase
420425
return [ESubsup
@@ -426,21 +431,21 @@ elemToExps' element | isElem "m" "sSub" element = do
426431
baseExp <- filterChildName (hasElemName "m" "e") element >>=
427432
elemToBase
428433
subExps <- filterChildName (hasElemName "m" "sub") element >>=
429-
(\e -> return $ concat $ mapMaybe elemToExps (elChildren e))
434+
return . elemsToExps . elChildren
430435
return [ESub baseExp (EGrouped subExps)]
431436
elemToExps' element | isElem "m" "sSubSup" element = do
432437
baseExp <- filterChildName (hasElemName "m" "e") element >>=
433438
elemToBase
434439
subExps <- filterChildName (hasElemName "m" "sub") element >>=
435-
(\e -> return $ concat $ mapMaybe elemToExps (elChildren e))
440+
return . elemsToExps . elChildren
436441
supExps <- filterChildName (hasElemName "m" "sup") element >>=
437-
(\e -> return $ concat $ mapMaybe elemToExps (elChildren e))
442+
return . elemsToExps . elChildren
438443
return [ESubsup baseExp (EGrouped subExps) (EGrouped supExps)]
439444
elemToExps' element | isElem "m" "sSup" element = do
440445
baseExp <- filterChildName (hasElemName "m" "e") element >>=
441446
elemToBase
442447
supExps <- filterChildName (hasElemName "m" "sup") element >>=
443-
(\e -> return $ concat $ mapMaybe elemToExps (elChildren e))
448+
return . elemsToExps . elChildren
444449
return [ESuper baseExp (EGrouped supExps)]
445450
elemToExps' element | isElem "m" "r" element = do
446451
let mrPr = filterChildName (hasElemName "m" "rPr") element

0 commit comments

Comments
 (0)