git.iko.soy/typeable/pandoc
on master help sign in
[ODT Parser] Include list's starting value
edc951eHubert Plociniczak
src/Text/Pandoc/Readers/Odt/ContentReader.hs+1−1
@@ -386,7 +386,7 @@ getListConstructor ListLevelStyle{..} =
386 LltNumbered -> let listNumberStyle = toListNumberStyle listItemFormat
386 LltNumbered -> let listNumberStyle = toListNumberStyle listItemFormat
387 listNumberDelim = toListNumberDelim listItemPrefix
387 listNumberDelim = toListNumberDelim listItemPrefix
388 listItemSuffix
388 listItemSuffix
389− in orderedListWith (1, listNumberStyle, listNumberDelim)
389+ in orderedListWith (listItemStart, listNumberStyle, listNumberDelim)
390 where
390 where
391 toListNumberStyle LinfNone = DefaultStyle
391 toListNumberStyle LinfNone = DefaultStyle
392 toListNumberStyle LinfNumber = Decimal
392 toListNumberStyle LinfNumber = Decimal
src/Text/Pandoc/Readers/Odt/StyleReader.hs+19−12
@@ -76,8 +76,9 @@ import Control.Applicative hiding ( liftA, liftA2, liftA3 )
76import qualified Data.Foldable as F
76import qualified Data.Foldable as F
77import qualified Data.Map as M
77import qualified Data.Map as M
78import qualified Data.Set as S
78import qualified Data.Set as S
79−import Data.List ( unfoldr )
79+import Data.Char ( isDigit )
80import Data.Default
80import Data.Default
81+import Data.List ( unfoldr )
81import Data.Maybe
82import Data.Maybe
82
83
83import qualified Text.XML.Light as XML
84import qualified Text.XML.Light as XML
@@ -390,6 +391,7 @@ data ListLevelStyle = ListLevelStyle { listLevelType :: ListLevelType
390 , listItemPrefix :: Maybe String
391 , listItemPrefix :: Maybe String
391 , listItemSuffix :: Maybe String
392 , listItemSuffix :: Maybe String
392 , listItemFormat :: ListItemNumberFormat
393 , listItemFormat :: ListItemNumberFormat
394+ , listItemStart :: Int
393 }
395 }
394 deriving ( Eq, Ord )
396 deriving ( Eq, Ord )
395
397
@@ -578,25 +580,30 @@ readListLevelStyles namespace elementName levelType =
578readListLevelStyle :: ListLevelType -> StyleReader _x (Int, ListLevelStyle)
580readListLevelStyle :: ListLevelType -> StyleReader _x (Int, ListLevelStyle)
579readListLevelStyle levelType = readAttr NsText "level"
581readListLevelStyle levelType = readAttr NsText "level"
580 >>?! keepingTheValue
582 >>?! keepingTheValue
581− ( liftA4 toListLevelStyle
583+ ( liftA5 toListLevelStyle
582− ( returnV levelType )
584+ ( returnV levelType )
583− ( findAttr' NsStyle "num-prefix" )
585+ ( findAttr' NsStyle "num-prefix" )
584− ( findAttr' NsStyle "num-suffix" )
586+ ( findAttr' NsStyle "num-suffix" )
585− ( getAttr NsStyle "num-format" )
587+ ( getAttr NsStyle "num-format" )
588+ ( findAttr' NsText "start-value" )
586 )
589 )
587 where
590 where
588− toListLevelStyle _ p s LinfNone = ListLevelStyle LltBullet p s LinfNone
591+ toListLevelStyle _ p s LinfNone b = ListLevelStyle LltBullet p s LinfNone (startValue b)
589− toListLevelStyle _ p s f@(LinfString _) = ListLevelStyle LltBullet p s f
592+ toListLevelStyle _ p s f@(LinfString _) b = ListLevelStyle LltBullet p s f (startValue b)
590− toListLevelStyle t p s f = ListLevelStyle t p s f
593+ toListLevelStyle t p s f b = ListLevelStyle t p s f (startValue b)
594+ startValue (Just v) = if all isDigit v
595+ then read v
596+ else 1
597+ startValue Nothing = 1
591
598
592--
599--
593chooseMostSpecificListLevelStyle :: S.Set ListLevelStyle -> Maybe ListLevelStyle
600chooseMostSpecificListLevelStyle :: S.Set ListLevelStyle -> Maybe ListLevelStyle
594chooseMostSpecificListLevelStyle ls | ls == mempty = Nothing
601chooseMostSpecificListLevelStyle ls | ls == mempty = Nothing
595 | otherwise = Just ( F.foldr1 select ls )
602 | otherwise = Just ( F.foldr1 select ls )
596 where
603 where
597− select ( ListLevelStyle t1 p1 s1 f1 )
604+ select ( ListLevelStyle t1 p1 s1 f1 b1 )
598− ( ListLevelStyle t2 p2 s2 f2 )
605+ ( ListLevelStyle t2 p2 s2 f2 _ )
599− = ListLevelStyle (select' t1 t2) (p1 <|> p2) (s1 <|> s2) (selectLinf f1 f2)
606+ = ListLevelStyle (select' t1 t2) (p1 <|> p2) (s1 <|> s2) (selectLinf f1 f2) b1
600 select' LltNumbered _ = LltNumbered
607 select' LltNumbered _ = LltNumbered
601 select' _ LltNumbered = LltNumbered
608 select' _ LltNumbered = LltNumbered
602 select' _ _ = LltBullet
609 select' _ _ = LltBullet