git.iko.soy/typeable/pandoc
on master help sign in
Merge pull request #3146 from hubertp-lshift/feature/odt-list-start-value

[ODT Parser] Include list's starting value

commit9bd1da122a72a9f3f3b5800a19542327353e897f authorJohn MacFarlane <jgm@berkeley.edu> dateFri 14 Oct 2016, 15:15 (10 years ago) parent85cf7b19282fad
8 files changed+24−16
src/Text/Pandoc/Readers/Odt/ContentReader.hs+1−1 src/Text/Pandoc/Readers/Odt/StyleReader.hs+20−12 tests/odt/native/orderedListMixed.native+1−1 tests/odt/native/orderedListRoman.native+1−1 tests/odt/native/orderedListSimple.native+1−1 tests/odt/odt/orderedListMixed.odt tests/odt/odt/orderedListRoman.odt tests/odt/odt/orderedListSimple.odt
src/Text/Pandoc/Readers/Odt/ContentReader.hs+1−1
@@ -386,7 +386,7 @@ getListConstructor ListLevelStyle{..} =
386386 LltNumbered -> let listNumberStyle = toListNumberStyle listItemFormat
387387 listNumberDelim = toListNumberDelim listItemPrefix
388388 listItemSuffix
389− in orderedListWith (1, listNumberStyle, listNumberDelim)
389+ in orderedListWith (listItemStart, listNumberStyle, listNumberDelim)
390390 where
391391 toListNumberStyle LinfNone = DefaultStyle
392392 toListNumberStyle LinfNumber = Decimal
src/Text/Pandoc/Readers/Odt/StyleReader.hs+20−12
@@ -76,8 +76,9 @@ import Control.Applicative hiding ( liftA, liftA2, liftA3 )
7676import qualified Data.Foldable as F
7777import qualified Data.Map as M
7878import qualified Data.Set as S
79−import Data.List ( unfoldr )
79+import Data.Char ( isDigit )
8080import Data.Default
81+import Data.List ( unfoldr )
8182import Data.Maybe
8283
8384import qualified Text.XML.Light as XML
@@ -390,6 +391,7 @@ data ListLevelStyle = ListLevelStyle { listLevelType :: ListLevelType
390391 , listItemPrefix :: Maybe String
391392 , listItemSuffix :: Maybe String
392393 , listItemFormat :: ListItemNumberFormat
394+ , listItemStart :: Int
393395 }
394396 deriving ( Eq, Ord )
395397
@@ -578,25 +580,31 @@ readListLevelStyles namespace elementName levelType =
578580readListLevelStyle :: ListLevelType -> StyleReader _x (Int, ListLevelStyle)
579581readListLevelStyle levelType = readAttr NsText "level"
580582 >>?! keepingTheValue
581− ( liftA4 toListLevelStyle
582− ( returnV levelType )
583− ( findAttr' NsStyle "num-prefix" )
584− ( findAttr' NsStyle "num-suffix" )
585− ( getAttr NsStyle "num-format" )
583+ ( liftA5 toListLevelStyle
584+ ( returnV levelType )
585+ ( findAttr' NsStyle "num-prefix" )
586+ ( findAttr' NsStyle "num-suffix" )
587+ ( getAttr NsStyle "num-format" )
588+ ( findAttr' NsText "start-value" )
586589 )
587590 where
588− toListLevelStyle _ p s LinfNone = ListLevelStyle LltBullet p s LinfNone
589− toListLevelStyle _ p s f@(LinfString _) = ListLevelStyle LltBullet p s f
590− toListLevelStyle t p s f = ListLevelStyle t p s f
591+ toListLevelStyle _ p s LinfNone b = ListLevelStyle LltBullet p s LinfNone (startValue b)
592+ toListLevelStyle _ p s f@(LinfString _) b = ListLevelStyle LltBullet p s f (startValue b)
593+ toListLevelStyle t p s f b = ListLevelStyle t p s f (startValue b)
594+ startValue (Just "") = 1
595+ startValue (Just v) = if all isDigit v
596+ then read v
597+ else 1
598+ startValue Nothing = 1
591599
592600--
593601chooseMostSpecificListLevelStyle :: S.Set ListLevelStyle -> Maybe ListLevelStyle
594602chooseMostSpecificListLevelStyle ls | ls == mempty = Nothing
595603 | otherwise = Just ( F.foldr1 select ls )
596604 where
597− select ( ListLevelStyle t1 p1 s1 f1 )
598− ( ListLevelStyle t2 p2 s2 f2 )
599− = ListLevelStyle (select' t1 t2) (p1 <|> p2) (s1 <|> s2) (selectLinf f1 f2)
605+ select ( ListLevelStyle t1 p1 s1 f1 b1 )
606+ ( ListLevelStyle t2 p2 s2 f2 _ )
607+ = ListLevelStyle (select' t1 t2) (p1 <|> p2) (s1 <|> s2) (selectLinf f1 f2) b1
600608 select' LltNumbered _ = LltNumbered
601609 select' _ LltNumbered = LltNumbered
602610 select' _ _ = LltBullet
tests/odt/native/orderedListMixed.native+1−1
@@ -1 +1 @@
1−Pandoc (Meta {unMeta = fromList []}) [OrderedList (1,Decimal,Period) [[Plain [Str "A",Space,Str "list",Space,Str "item"]],[Plain [Str "A",Space,Str "second"]],[Para [Str "A",Space,Str "third"],OrderedList (1,Decimal,Period) [[Para [Str "New",Space,Str "level!"],OrderedList (1,LowerAlpha,OneParen) [[Plain [Str "And",Space,Str "another!"]],[Plain [Str "It's",Space,Str "great",Space,Str "up",Space,Str "here!"]]]],[Plain [Str "Oh",Space,Str "noes"]],[Plain [Str "We",Space,Str "fell!"]]]],[Plain [Str "Maybe",Space,Str "someone"]],[Plain [Str "Pushed",Space,Str "us?"]]]]
1+Pandoc (Meta {unMeta = fromList []}) [OrderedList (1,Decimal,Period) [[Plain [Str "A",Space,Str "list",Space,Str "item"]],[Plain [Str "A",Space,Str "second"]],[Para [Str "A",Space,Str "third"],OrderedList (1,Decimal,Period) [[Para [Str "New",Space,Str "level!"],OrderedList (1,LowerAlpha,OneParen) [[Plain [Str "And",Space,Str "another!"]],[Plain [Str "It's",Space,Str "great",Space,Str "up",Space,Str "here!"]]]],[Plain [Str "Oh",Space,Str "noes"]],[Plain [Str "We",Space,Str "fell!"]]]],[Plain [Str "Maybe",Space,Str "someone"]],[Plain [Str "Pushed",Space,Str "us?"]]],Para [],OrderedList (4,Decimal,Period) [[Plain [Str "Start",Space,Str "new",Space,Str "list,",Space,Str "but",Space,Str "a",Space,Str "different",Space,Str "starting",Space,Str "point."]] ,[Plain [Str "Because",Space,Str "we",Space,Str "can."]]]]
tests/odt/native/orderedListRoman.native+1−1
@@ -1 +1 @@
1−Pandoc (Meta {unMeta = fromList []}) [OrderedList (1,UpperRoman,Period) [[Plain[Str "A",Space,Str "list",Space,Str "item"]],[Plain [Str "A",Space,Str "second"]],[Para [Str "A",Space,Str "third"],OrderedList (1,UpperRoman,Period) [[Para [Str "New",Space,Str "level!"],OrderedList (1,UpperRoman,Period) [[Plain [Str "And",Space,Str "another!"]],[Plain [Str "It's",Space,Str "great",Space,Str "up",Space,Str "here!"]]]],[Plain [Str "Oh",Space,Str "noes"]],[Plain [Str "We",Space,Str "fell!"]]]],[Plain [Str "Maybe",Space,Str "someone"]],[Plain [Str "Pushed",Space,Str "us?"]]]]
1+Pandoc (Meta {unMeta = fromList []}) [OrderedList (1,UpperRoman,Period) [[Plain[Str "A",Space,Str "list",Space,Str "item"]],[Plain [Str "A",Space,Str "second"]],[Para [Str "A",Space,Str "third"],OrderedList (1,UpperRoman,Period) [[Para [Str "New",Space,Str "level!"],OrderedList (1,UpperRoman,Period) [[Plain [Str "And",Space,Str "another!"]],[Plain [Str "It's",Space,Str "great",Space,Str "up",Space,Str "here!"]]]],[Plain [Str "Oh",Space,Str "noes"]],[Plain [Str "We",Space,Str "fell!"]]]],[Plain [Str "Maybe",Space,Str "someone"]],[Plain [Str "Pushed",Space,Str "us?"]]],Para [],OrderedList (4,UpperRoman,Period) [[Plain [Str "Start",Space,Str "new",Space,Str "list,",Space,Str "but",Space,Str "a",Space,Str "different",Space,Str "starting",Space,Str "point."]] ,[Plain [Str "Because",Space,Str "we",Space,Str "can."]]]]
tests/odt/native/orderedListSimple.native+1−1
@@ -1 +1 @@
1−Pandoc (Meta {unMeta = fromList []}) [OrderedList (1,Decimal,Period) [[Plain [Str "A",Space,Str "list",Space,Str "item"]],[Plain [Str "A",Space,Str "second"]],[Para [Str "A",Space,Str "third"],OrderedList (1,Decimal,Period) [[Para [Str "New",Space,Str "level!"],OrderedList (1,Decimal,Period) [[Plain [Str "And",Space,Str "another!"]],[Plain [Str "It's",Space,Str "great",Space,Str "up",Space,Str "here!"]]]],[Plain [Str "Oh",Space,Str "noes"]],[Plain [Str "We",Space,Str "fell!"]]]],[Plain [Str "Maybe",Space,Str "someone"]],[Plain [Str "Pushed",Space,Str "us?"]]]]
1+Pandoc (Meta {unMeta = fromList []}) [OrderedList (1,Decimal,Period) [[Plain [Str "A",Space,Str "list",Space,Str "item"]],[Plain [Str "A",Space,Str "second"]],[Para [Str "A",Space,Str "third"],OrderedList (1,Decimal,Period) [[Para [Str "New",Space,Str "level!"],OrderedList (1,Decimal,Period) [[Plain [Str "And",Space,Str "another!"]],[Plain [Str "It's",Space,Str "great",Space,Str "up",Space,Str "here!"]]]],[Plain [Str "Oh",Space,Str "noes"]],[Plain [Str "We",Space,Str "fell!"]]]],[Plain [Str "Maybe",Space,Str "someone"]],[Plain [Str "Pushed",Space,Str "us?"]]],Para [],OrderedList (4,Decimal,Period) [[Plain [Str "Start",Space,Str "new",Space,Str "list,",Space,Str "but",Space,Str "a",Space,Str "different",Space,Str "starting",Space,Str "point."]] ,[Plain [Str "Because",Space,Str "we",Space,Str "can."]]]]
tests/odt/odt/orderedListMixed.odt

Binary file not shown.

tests/odt/odt/orderedListRoman.odt

Binary file not shown.

tests/odt/odt/orderedListSimple.odt

Binary file not shown.