ZimWiki writer: number ordered list items sequentially...
rather than always with 1.
This commit is contained in:
parent
e0290fd18b
commit
714e0eb834
2 changed files with 44 additions and 48 deletions
|
@ -52,14 +52,13 @@ import Text.Pandoc.Templates (renderTemplate')
|
|||
import Text.Pandoc.Writers.Shared (defField, metaToJSON)
|
||||
|
||||
data WriterState = WriterState {
|
||||
stItemNum :: Int,
|
||||
stIndent :: String, -- Indent after the marker at the beginning of list items
|
||||
stInTable :: Bool, -- Inside a table
|
||||
stInLink :: Bool -- Inside a link description
|
||||
}
|
||||
|
||||
instance Default WriterState where
|
||||
def = WriterState { stItemNum = 1, stIndent = "", stInTable = False, stInLink = False }
|
||||
def = WriterState { stIndent = "", stInTable = False, stInLink = False }
|
||||
|
||||
type ZW = StateT WriterState
|
||||
|
||||
|
@ -188,7 +187,7 @@ blockToZimWiki opts (BulletList items) = do
|
|||
return $ vcat contents ++ if null indent then "\n" else ""
|
||||
|
||||
blockToZimWiki opts (OrderedList _ items) = do
|
||||
contents <- mapM (orderedListItemToZimWiki opts) items
|
||||
contents <- zipWithM (orderedListItemToZimWiki opts) [1..] items
|
||||
indent <- gets stIndent
|
||||
return $ vcat contents ++ if null indent then "\n" else ""
|
||||
|
||||
|
@ -210,25 +209,24 @@ definitionListItemToZimWiki opts (label, items) = do
|
|||
indentFromHTML :: PandocMonad m => WriterOptions -> String -> ZW m String
|
||||
indentFromHTML _ str = do
|
||||
indent <- gets stIndent
|
||||
itemnum <- gets stItemNum
|
||||
if "<li>" `isInfixOf` str then return $ indent ++ show itemnum ++ "."
|
||||
else if "</li>" `isInfixOf` str then return "\n"
|
||||
else if "<li value=" `isInfixOf` str then do
|
||||
-- poor man's cut
|
||||
let val = drop 10 $ reverse $ drop 1 $ reverse str
|
||||
--let val = take ((length valls) - 2) valls
|
||||
modify $ \s -> s { stItemNum = read val }
|
||||
return ""
|
||||
else if "<ol>" `isInfixOf` str then do
|
||||
let olcount=countSubStrs "<ol>" str
|
||||
modify $ \s -> s { stIndent = stIndent s ++ replicate olcount '\t', stItemNum = 1 }
|
||||
return ""
|
||||
else if "</ol>" `isInfixOf` str then do
|
||||
let olcount=countSubStrs "/<ol>" str
|
||||
modify $ \s -> s{ stIndent = drop olcount (stIndent s) }
|
||||
return ""
|
||||
else
|
||||
return ""
|
||||
if "<li>" `isInfixOf` str
|
||||
then return indent
|
||||
else if "</li>" `isInfixOf` str
|
||||
then return "\n"
|
||||
else if "<li value=" `isInfixOf` str
|
||||
then return ""
|
||||
else if "<ol>" `isInfixOf` str
|
||||
then do
|
||||
let olcount=countSubStrs "<ol>" str
|
||||
modify $ \s -> s { stIndent = stIndent s ++
|
||||
replicate olcount '\t' }
|
||||
return ""
|
||||
else if "</ol>" `isInfixOf` str
|
||||
then do
|
||||
let olcount=countSubStrs "/<ol>" str
|
||||
modify $ \s -> s{ stIndent = drop olcount (stIndent s) }
|
||||
return ""
|
||||
else return ""
|
||||
|
||||
countSubStrs :: String -> String -> Int
|
||||
countSubStrs sub str = length $ breakOnAll (pack sub) (pack str)
|
||||
|
@ -250,14 +248,12 @@ listItemToZimWiki opts items = do
|
|||
|
||||
-- | Convert ordered list item (list of blocks) to ZimWiki.
|
||||
orderedListItemToZimWiki :: PandocMonad m
|
||||
=> WriterOptions -> [Block] -> ZW m String
|
||||
orderedListItemToZimWiki opts items = do
|
||||
=> WriterOptions -> Int -> [Block] -> ZW m String
|
||||
orderedListItemToZimWiki opts itemnum items = do
|
||||
indent <- gets stIndent
|
||||
modify $ \s -> s { stIndent = indent ++ "\t" }
|
||||
contents <- blockListToZimWiki opts items
|
||||
modify $ \s -> s{ stIndent = indent }
|
||||
itemnum <- gets stItemNum
|
||||
--modify $ \s -> s { stItemNum = itemnum + 1 } -- this is not strictly necessary for zim as zim does its own renumbering
|
||||
return $ indent ++ show itemnum ++ ". " ++ contents
|
||||
|
||||
-- Auxiliary functions for tables:
|
||||
|
@ -343,8 +339,8 @@ inlineToZimWiki _ (Math mathType str) = return $ delim ++ str ++ delim -- note
|
|||
-- | f == Format "html" = return $ "<html>" ++ str ++ "</html>"
|
||||
inlineToZimWiki opts il@(RawInline f str)
|
||||
| f == Format "zimwiki" = return str
|
||||
| f == Format "html" = indentFromHTML opts str
|
||||
| otherwise = do
|
||||
| f == Format "html" = indentFromHTML opts str
|
||||
| otherwise = do
|
||||
report $ InlineNotRendered il
|
||||
return ""
|
||||
|
||||
|
|
|
@ -62,7 +62,7 @@ E-mail style:
|
|||
> A list:
|
||||
>
|
||||
> 1. item one
|
||||
> 1. item two
|
||||
> 2. item two
|
||||
>
|
||||
> Nested block quotes:
|
||||
>
|
||||
|
@ -147,33 +147,33 @@ Minuses loose:
|
|||
Tight:
|
||||
|
||||
1. First
|
||||
1. Second
|
||||
1. Third
|
||||
2. Second
|
||||
3. Third
|
||||
|
||||
and:
|
||||
|
||||
1. One
|
||||
1. Two
|
||||
1. Three
|
||||
2. Two
|
||||
3. Three
|
||||
|
||||
Loose using tabs:
|
||||
|
||||
1. First
|
||||
1. Second
|
||||
1. Third
|
||||
2. Second
|
||||
3. Third
|
||||
|
||||
and using spaces:
|
||||
|
||||
1. One
|
||||
1. Two
|
||||
1. Three
|
||||
2. Two
|
||||
3. Three
|
||||
|
||||
Multiple paragraphs:
|
||||
|
||||
1. Item 1, graf one.
|
||||
Item 1. graf two. The quick brown fox jumped over the lazy dog’s back.
|
||||
1. Item 2.
|
||||
1. Item 3.
|
||||
2. Item 2.
|
||||
3. Item 3.
|
||||
|
||||
===== Nested =====
|
||||
|
||||
|
@ -184,20 +184,20 @@ Item 1. graf two. The quick brown fox jumped over the lazy dog’s back.
|
|||
Here’s another:
|
||||
|
||||
1. First
|
||||
1. Second:
|
||||
2. Second:
|
||||
* Fee
|
||||
* Fie
|
||||
* Foe
|
||||
1. Third
|
||||
3. Third
|
||||
|
||||
Same thing but with paragraphs:
|
||||
|
||||
1. First
|
||||
1. Second:
|
||||
2. Second:
|
||||
* Fee
|
||||
* Fie
|
||||
* Foe
|
||||
1. Third
|
||||
3. Third
|
||||
|
||||
===== Tabs and spaces =====
|
||||
|
||||
|
@ -209,12 +209,12 @@ Same thing but with paragraphs:
|
|||
===== Fancy list markers =====
|
||||
|
||||
1. begins with 2
|
||||
1. and now 3
|
||||
2. and now 3
|
||||
with a continuation
|
||||
1. sublist with roman numerals, starting with 4
|
||||
1. more items
|
||||
1. a subsublist
|
||||
2. more items
|
||||
1. a subsublist
|
||||
2. a subsublist
|
||||
|
||||
Nesting:
|
||||
|
||||
|
@ -226,7 +226,7 @@ Nesting:
|
|||
Autonumbering:
|
||||
|
||||
1. Autonumber.
|
||||
1. More.
|
||||
2. More.
|
||||
1. Nested.
|
||||
|
||||
Should not be a list item:
|
||||
|
@ -292,7 +292,7 @@ computer
|
|||
* **orange** orange fruit
|
||||
|
||||
1. sublist
|
||||
1. sublist
|
||||
2. sublist
|
||||
|
||||
====== HTML Blocks ======
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue