git.iko.soy/typeable/pandoc
on master help sign in
MediaWiki reader: Got alignments working.

They only work on headers, because pandoc forces same alignment for all cells in a column.

commit26fb63e2946da932662127bddde5005048f10855 authorJohn MacFarlane <jgm@berkeley.edu> dateSat 15 Sep 2012, 14:20 (14 years ago) parenteca9eea
3 files changed+33−7
src/Text/Pandoc/Readers/MediaWiki.hs+12−6 tests/mediawiki-reader.native+11−1 tests/mediawiki-reader.wiki+10
src/Text/Pandoc/Readers/MediaWiki.hs+12−6
@@ -190,15 +190,15 @@ table = do
190190 caption <- option mempty tableCaption
191191 optional rowsep
192192 hasheader <- option False $ True <$ (lookAhead (char '!'))
193− hdr <- tableRow
194− rows' <- many $ try $ rowsep *> tableRow
193+ (aligns,hdr) <- unzip <$> tableRow
194+ rows' <- many $ try $ rowsep *> (map snd <$> tableRow)
195195 tableEnd
196196 -- TODO handle cellspecs from styles and aligns...
197197 let cols = length hdr
198198 let (headers,rows) = if hasheader
199199 then (hdr, rows')
200200 else (replicate cols mempty, hdr:rows')
201− let cellspecs = replicate cols (AlignDefault, 0.0)
201+ let cellspecs = zip aligns (repeat 0.0)
202202 return $ B.table caption cellspecs headers rows
203203
204204parseAttrs :: String -> [(String,String)]
@@ -238,10 +238,10 @@ tableCaption = try $ do
238238 res <- manyTill anyChar newline >>= parseFromString (many inline)
239239 return $ trimInlines $ mconcat res
240240
241−tableRow :: MWParser [Blocks]
241+tableRow :: MWParser [(Alignment, Blocks)]
242242tableRow = try $ many tableCell
243243
244−tableCell :: MWParser Blocks
244+tableCell :: MWParser (Alignment, Blocks)
245245tableCell = try $ do
246246 cellsep
247247 skipMany spaceChar
@@ -249,7 +249,13 @@ tableCell = try $ do
249249 manyTill (satisfy (/='\n')) (char '|' <* notFollowedBy (char '|'))
250250 skipMany spaceChar
251251 ls <- many (notFollowedBy (cellsep <|> rowsep <|> tableEnd) *> anyChar)
252− parseFromString (mconcat <$> many block) ls
252+ bs <- parseFromString (mconcat <$> many block) ls
253+ let align = case lookup "align" attrs of
254+ Just "left" -> AlignLeft
255+ Just "right" -> AlignRight
256+ Just "center" -> AlignCenter
257+ _ -> AlignDefault
258+ return (align, bs)
253259
254260template :: MWParser String
255261template = try $ do
tests/mediawiki-reader.native+11−1
@@ -213,4 +213,14 @@ Pandoc (Meta {docTitle = [], docAuthors = [], docDate = []})
213213 ,[Para [Str "more"]]]
214214 ,[[Para [Str "Butter"]]
215215 ,[Para [Str "Ice",Space,Str "cream"]]
216− ,[Para [Str "and",Space,Str "more"]]]]]
216+ ,[Para [Str "and",Space,Str "more"]]]]
217+,Table [] [AlignLeft,AlignRight,AlignCenter] [0.0,0.0,0.0]
218+ [[Para [Str "Left"]]
219+ ,[Para [Str "Right"]]
220+ ,[Para [Str "Center"]]]
221+ [[[Para [Str "left"]]
222+ ,[Para [Str "15.00"]]
223+ ,[Para [Str "centered"]]]
224+ ,[[Para [Str "more"]]
225+ ,[Para [Str "2.0"]]
226+ ,[Para [Str "more"]]]]]
tests/mediawiki-reader.wiki+10
@@ -330,3 +330,13 @@ and cheese
330330| Butter || Ice cream || and more
331331|}
332332
333+{|
334+! align="left"| Left
335+! align="right"|Right
336+! align="center"|Center
337+|-
338+| left || 15.00 || centered
339+|-
340+| more || 2.0 || more
341+|}
342+