mirror of
https://github.com/jgm/pandoc.git
synced 2026-08-26 18:26:36 +00:00
Merge pull request #3146 from hubertp-lshift/feature/odt-list-start-value
[ODT Parser] Include list's starting value
This commit is contained in:
@@ -386,7 +386,7 @@ getListConstructor ListLevelStyle{..} =
|
||||
LltNumbered -> let listNumberStyle = toListNumberStyle listItemFormat
|
||||
listNumberDelim = toListNumberDelim listItemPrefix
|
||||
listItemSuffix
|
||||
in orderedListWith (1, listNumberStyle, listNumberDelim)
|
||||
in orderedListWith (listItemStart, listNumberStyle, listNumberDelim)
|
||||
where
|
||||
toListNumberStyle LinfNone = DefaultStyle
|
||||
toListNumberStyle LinfNumber = Decimal
|
||||
|
||||
@@ -76,8 +76,9 @@ import Control.Applicative hiding ( liftA, liftA2, liftA3 )
|
||||
import qualified Data.Foldable as F
|
||||
import qualified Data.Map as M
|
||||
import qualified Data.Set as S
|
||||
import Data.List ( unfoldr )
|
||||
import Data.Char ( isDigit )
|
||||
import Data.Default
|
||||
import Data.List ( unfoldr )
|
||||
import Data.Maybe
|
||||
|
||||
import qualified Text.XML.Light as XML
|
||||
@@ -390,6 +391,7 @@ data ListLevelStyle = ListLevelStyle { listLevelType :: ListLevelType
|
||||
, listItemPrefix :: Maybe String
|
||||
, listItemSuffix :: Maybe String
|
||||
, listItemFormat :: ListItemNumberFormat
|
||||
, listItemStart :: Int
|
||||
}
|
||||
deriving ( Eq, Ord )
|
||||
|
||||
@@ -578,25 +580,31 @@ readListLevelStyles namespace elementName levelType =
|
||||
readListLevelStyle :: ListLevelType -> StyleReader _x (Int, ListLevelStyle)
|
||||
readListLevelStyle levelType = readAttr NsText "level"
|
||||
>>?! keepingTheValue
|
||||
( liftA4 toListLevelStyle
|
||||
( returnV levelType )
|
||||
( findAttr' NsStyle "num-prefix" )
|
||||
( findAttr' NsStyle "num-suffix" )
|
||||
( getAttr NsStyle "num-format" )
|
||||
( liftA5 toListLevelStyle
|
||||
( returnV levelType )
|
||||
( findAttr' NsStyle "num-prefix" )
|
||||
( findAttr' NsStyle "num-suffix" )
|
||||
( getAttr NsStyle "num-format" )
|
||||
( findAttr' NsText "start-value" )
|
||||
)
|
||||
where
|
||||
toListLevelStyle _ p s LinfNone = ListLevelStyle LltBullet p s LinfNone
|
||||
toListLevelStyle _ p s f@(LinfString _) = ListLevelStyle LltBullet p s f
|
||||
toListLevelStyle t p s f = ListLevelStyle t p s f
|
||||
toListLevelStyle _ p s LinfNone b = ListLevelStyle LltBullet p s LinfNone (startValue b)
|
||||
toListLevelStyle _ p s f@(LinfString _) b = ListLevelStyle LltBullet p s f (startValue b)
|
||||
toListLevelStyle t p s f b = ListLevelStyle t p s f (startValue b)
|
||||
startValue (Just "") = 1
|
||||
startValue (Just v) = if all isDigit v
|
||||
then read v
|
||||
else 1
|
||||
startValue Nothing = 1
|
||||
|
||||
--
|
||||
chooseMostSpecificListLevelStyle :: S.Set ListLevelStyle -> Maybe ListLevelStyle
|
||||
chooseMostSpecificListLevelStyle ls | ls == mempty = Nothing
|
||||
| otherwise = Just ( F.foldr1 select ls )
|
||||
where
|
||||
select ( ListLevelStyle t1 p1 s1 f1 )
|
||||
( ListLevelStyle t2 p2 s2 f2 )
|
||||
= ListLevelStyle (select' t1 t2) (p1 <|> p2) (s1 <|> s2) (selectLinf f1 f2)
|
||||
select ( ListLevelStyle t1 p1 s1 f1 b1 )
|
||||
( ListLevelStyle t2 p2 s2 f2 _ )
|
||||
= ListLevelStyle (select' t1 t2) (p1 <|> p2) (s1 <|> s2) (selectLinf f1 f2) b1
|
||||
select' LltNumbered _ = LltNumbered
|
||||
select' _ LltNumbered = LltNumbered
|
||||
select' _ _ = LltBullet
|
||||
|
||||
@@ -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?"]]]]
|
||||
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."]]]]
|
||||
@@ -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?"]]]]
|
||||
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."]]]]
|
||||
@@ -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?"]]]]
|
||||
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."]]]]
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user