@@ -192,14 +192,14 @@ data Numbering = Numbering NameSpaces [Numb] [AbstractNumb]
192192data Numb = Numb String String [LevelOverride]
193193 deriving Show
194194
195−-- ilvl, startOverride, lvl
196−data LevelOverride = LevelOverride String (Maybe String) (Maybe Level)
195+-- ilvl startOverride lvl
196+data LevelOverride = LevelOverride String (Maybe Integer) (Maybe Level)
197197 deriving Show
198198
199199data AbstractNumb = AbstractNumb String [Level]
200200 deriving Show
201201
202−-- (ilvl, format, string, start)
202+-- ilvl format string start
203203data Level = Level String String String (Maybe Integer)
204204 deriving Show
205205
@@ -509,9 +509,19 @@ filePathIsMedia fp =
509509
510510lookupLevel :: String -> String -> Numbering -> Maybe Level
511511lookupLevel numId ilvl (Numbering _ numbs absNumbs) = do
512− absNumId <- lookup numId $ map (\(Numb nid absnumid _) -> (nid, absnumid)) numbs
513− lvls <- lookup absNumId $ map (\(AbstractNumb aid ls) -> (aid, ls)) absNumbs
514− lookup ilvl $ map (\l@(Level i _ _ _) -> (i, l)) lvls
512+ (absNumId, ovrrides) <- lookup numId $
513+ map (\(Numb nid absnumid ovrRides) -> (nid, (absnumid, ovrRides))) numbs
514+ lvls <- lookup absNumId $
515+ map (\(AbstractNumb aid ls) -> (aid, ls)) absNumbs
516+ -- this can be a maybe, so we do a let
517+ let lvlOverride = lookup ilvl $
518+ map (\lo@(LevelOverride ilvl' _ _) -> (ilvl', lo)) ovrrides
519+ case lvlOverride of
520+ Just (LevelOverride _ _ (Just lvl')) -> Just lvl'
521+ Just (LevelOverride _ (Just strt) _) ->
522+ lookup ilvl $ map (\(Level i fmt s _) -> (i, (Level i fmt s (Just strt)))) lvls
523+ _ ->
524+ lookup ilvl $ map (\l@(Level i _ _ _) -> (i, l)) lvls
515525
516526loElemToLevelOverride :: NameSpaces -> Element -> Maybe LevelOverride
517527loElemToLevelOverride ns element
@@ -519,6 +529,7 @@ loElemToLevelOverride ns element
519529 ilvl <- findAttrByName ns "w" "ilvl" element
520530 let startOverride = findChildByName ns "w" "startOverride" element
521531 >>= findAttrByName ns "w" "val"
532+ >>= (\s -> listToMaybe (map fst (reads s :: [(Integer, String)])))
522533 lvl = findChildByName ns "w" "lvl" element
523534 >>= levelElemToLevel ns
524535 return $ LevelOverride ilvl startOverride lvl