git.iko.soy/typeable/pandoc
on master help sign in
MediaWiki reader: Parse styles after '{|' table start.
9a54a94John MacFarlane
src/Text/Pandoc/Readers/MediaWiki.hs+18−1
@@ -164,6 +164,9 @@ para = B.para . trimInlines . mconcat <$> many1 inline
164table :: MWParser Blocks
164table :: MWParser Blocks
165table = do
165table = do
166 tableStart
166 tableStart
167+ styles <- manyTill anyChar newline
168+ let tableWidth = maybe (1.0 :: Double) read
169+ $ lookup "width" $ parseAttrs styles
167 caption <- option mempty tableCaption
170 caption <- option mempty tableCaption
168 optional rowsep
171 optional rowsep
169 hasheader <- option False $ True <$ (lookAhead (char '!'))
172 hasheader <- option False $ True <$ (lookAhead (char '!'))
@@ -178,8 +181,22 @@ table = do
178 let cellspecs = replicate cols (AlignDefault, 0.0)
181 let cellspecs = replicate cols (AlignDefault, 0.0)
179 return $ B.table caption cellspecs headers rows
182 return $ B.table caption cellspecs headers rows
180
183
184+parseAttrs :: String -> [(String,String)]
185+parseAttrs s = case parse (many parseAttr) "attributes" s of
186+ Right r -> r
187+ Left _ -> []
188+
189+parseAttr :: Parser String () (String, String)
190+parseAttr = try $ do
191+ skipMany spaceChar
192+ k <- many1 letter
193+ char '='
194+ char '"'
195+ v <- many1Till anyChar (char '"')
196+ return (k,v)
197+
181tableStart :: MWParser ()
198tableStart :: MWParser ()
182−tableStart = try $ guardColumnOne *> sym "{|" <* blanklines
199+tableStart = try $ guardColumnOne *> sym "{|"
183
200
184tableEnd :: MWParser ()
201tableEnd :: MWParser ()
185tableEnd = try $ guardColumnOne *> sym "|}" <* blanklines
202tableEnd = try $ guardColumnOne *> sym "|}" <* blanklines
tests/mediawiki-reader.native+14−1
@@ -199,4 +199,17 @@ Pandoc (Meta {docTitle = [], docAuthors = [], docDate = []})
199 ,[Para [Str "Pie"]
199 ,[Para [Str "Pie"]
200 ,OrderedList (1,DefaultStyle,DefaultDelim)
200 ,OrderedList (1,DefaultStyle,DefaultDelim)
201 [[Plain [Str "apple"]]
201 [[Plain [Str "apple"]]
202− ,[Plain [Str "carrot"]]]]]]]
202+ ,[Plain [Str "carrot"]]]]]]
203+,Table [] [AlignDefault,AlignDefault,AlignDefault] [0.0,0.0,0.0]
204+ [[]
205+ ,[]
206+ ,[]]
207+ [[[Para [Str "Orange"]]
208+ ,[Para [Str "Apple"]]
209+ ,[Para [Str "more"]]]
210+ ,[[Para [Str "Bread"]]
211+ ,[Para [Str "Pie"]]
212+ ,[Para [Str "more"]]]
213+ ,[[Para [Str "Butter"]]
214+ ,[Para [Str "Ice",Space,Str "cream"]]
215+ ,[Para [Str "and",Space,Str "more"]]]]]
tests/mediawiki-reader.wiki+7−1
@@ -322,5 +322,11 @@ and cheese
322
322
323|}
323|}
324
324
325−
325+{|
326+| Orange || Apple || more
327+|-
328+| Bread || Pie || more
329+|-
330+| Butter || Ice cream || and more
331+|}
326
332