git.iko.soy/typeable/pandoc
on master help sign in
Implemented tight lists in context, latex writers.
1a9193cJohn MacFarlane
src/Text/Pandoc/Writers/ConTeXt.hs+15−11
@@ -46,8 +46,8 @@ data WriterState =
46 , stOptions :: WriterOptions -- writer options
46 , stOptions :: WriterOptions -- writer options
47 }
47 }
48
48
49−orderedListStyles :: [[Char]]
49+orderedListStyles :: [Char]
50−orderedListStyles = cycle ["[n]","[a]", "[r]", "[g]"]
50+orderedListStyles = cycle "narg"
51
51
52-- | Convert Pandoc to ConTeXt.
52-- | Convert Pandoc to ConTeXt.
53writeConTeXt :: WriterOptions -> Pandoc -> String
53writeConTeXt :: WriterOptions -> Pandoc -> String
@@ -148,7 +148,10 @@ blockToConTeXt (RawBlock "context" str) = return $ text str <> blankline
148blockToConTeXt (RawBlock _ _ ) = return empty
148blockToConTeXt (RawBlock _ _ ) = return empty
149blockToConTeXt (BulletList lst) = do
149blockToConTeXt (BulletList lst) = do
150 contents <- mapM listItemToConTeXt lst
150 contents <- mapM listItemToConTeXt lst
151+ return $ ("\\startitemize" <> if isTightList lst
152+ then brackets "packed"
153+ else empty) $$
151− return $ "\\startitemize" $$ vcat contents $$ text "\\stopitemize" <> blankline
154+ vcat contents $$ text "\\stopitemize" <> blankline
152blockToConTeXt (OrderedList (start, style', delim) lst) = do
155blockToConTeXt (OrderedList (start, style', delim) lst) = do
153 st <- get
156 st <- get
154 let level = stOrderedListLevel st
157 let level = stOrderedListLevel st
@@ -171,14 +174,15 @@ blockToConTeXt (OrderedList (start, style', delim) lst) = do
171 let specs2 = if null specs2Items
174 let specs2 = if null specs2Items
172 then ""
175 then ""
173 else "[" ++ intercalate "," specs2Items ++ "]"
176 else "[" ++ intercalate "," specs2Items ++ "]"
174− let style'' = case style' of
177+ let style'' = '[': (case style' of
175− DefaultStyle -> orderedListStyles !! level
178+ DefaultStyle -> orderedListStyles !! level
176− Decimal -> "[n]"
179+ Decimal -> 'n'
177− Example -> "[n]"
180+ Example -> 'n'
178− LowerRoman -> "[r]"
181+ LowerRoman -> 'r'
179− UpperRoman -> "[R]"
182+ UpperRoman -> 'R'
180− LowerAlpha -> "[a]"
183+ LowerAlpha -> 'a'
181− UpperAlpha -> "[A]"
184+ UpperAlpha -> 'A') :
185+ if isTightList lst then ",packed]" else "]"
182 let specs = style'' ++ specs2
186 let specs = style'' ++ specs2
183 return $ "\\startitemize" <> text specs $$ vcat contents $$
187 return $ "\\startitemize" <> text specs $$ vcat contents $$
184 "\\stopitemize" <> blankline
188 "\\stopitemize" <> blankline
src/Text/Pandoc/Writers/LaTeX.hs+12−2
@@ -351,7 +351,10 @@ blockToLaTeX (BulletList lst) = do
351 incremental <- gets stIncremental
351 incremental <- gets stIncremental
352 let inc = if incremental then "[<+->]" else ""
352 let inc = if incremental then "[<+->]" else ""
353 items <- mapM listItemToLaTeX lst
353 items <- mapM listItemToLaTeX lst
354+ let spacing = if isTightList lst
355+ then text "\\itemsep1pt\\parskip0pt\\parsep0pt"
356+ else empty
354− return $ text ("\\begin{itemize}" ++ inc) $$ vcat items $$
357+ return $ text ("\\begin{itemize}" ++ inc) $$ spacing $$ vcat items $$
355 "\\end{itemize}"
358 "\\end{itemize}"
356blockToLaTeX (OrderedList (start, numstyle, numdelim) lst) = do
359blockToLaTeX (OrderedList (start, numstyle, numdelim) lst) = do
357 st <- get
360 st <- get
@@ -381,16 +384,23 @@ blockToLaTeX (OrderedList (start, numstyle, numdelim) lst) = do
381 then empty
384 then empty
382 else "\\setcounter" <> braces enum <>
385 else "\\setcounter" <> braces enum <>
383 braces (text $ show $ start - 1)
386 braces (text $ show $ start - 1)
387+ let spacing = if isTightList lst
388+ then text "\\itemsep1pt\\parskip0pt\\parsep0pt"
389+ else empty
384 return $ text ("\\begin{enumerate}" ++ inc)
390 return $ text ("\\begin{enumerate}" ++ inc)
385 $$ stylecommand
391 $$ stylecommand
386 $$ resetcounter
392 $$ resetcounter
393+ $$ spacing
387 $$ vcat items
394 $$ vcat items
388 $$ "\\end{enumerate}"
395 $$ "\\end{enumerate}"
389blockToLaTeX (DefinitionList lst) = do
396blockToLaTeX (DefinitionList lst) = do
390 incremental <- gets stIncremental
397 incremental <- gets stIncremental
391 let inc = if incremental then "[<+->]" else ""
398 let inc = if incremental then "[<+->]" else ""
392 items <- mapM defListItemToLaTeX lst
399 items <- mapM defListItemToLaTeX lst
400+ let spacing = if and $ map isTightList (map snd lst)
401+ then text "\\itemsep1pt\\parskip0pt\\parsep0pt"
402+ else empty
393− return $ text ("\\begin{description}" ++ inc) $$ vcat items $$
403+ return $ text ("\\begin{description}" ++ inc) $$ spacing $$ vcat items $$
394 "\\end{description}"
404 "\\end{description}"
395blockToLaTeX HorizontalRule = return $
405blockToLaTeX HorizontalRule = return $
396 "\\begin{center}\\rule{3in}{0.4pt}\\end{center}"
406 "\\begin{center}\\rule{3in}{0.4pt}\\end{center}"