diff options
| author | Emanuel Evans <mail@emanuel.industries> | 2016-04-24 21:58:53 -0700 | 
|---|---|---|
| committer | Emanuel Evans <mail@emanuel.industries> | 2016-04-26 10:29:59 -0700 | 
| commit | 1bfe39e24cb58c361a05f419ef9a4a5263f558f6 (patch) | |
| tree | 8ad6987956b848c0be1470eea36140bc6d28fb0b /src | |
| parent | a0fae92847207493eff5a2d2a5ac3b483ed00087 (diff) | |
| download | pandoc-1bfe39e24cb58c361a05f419ef9a4a5263f558f6.tar.gz | |
Ignore leading space in org code blocks
Fixes #2862
Also fix up tab handling for leading whitespace in code blocks.
Diffstat (limited to 'src')
| -rw-r--r-- | src/Text/Pandoc/Readers/Org.hs | 24 | 
1 files changed, 20 insertions, 4 deletions
| diff --git a/src/Text/Pandoc/Readers/Org.hs b/src/Text/Pandoc/Readers/Org.hs index 7dd611be3..5e98be31d 100644 --- a/src/Text/Pandoc/Readers/Org.hs +++ b/src/Text/Pandoc/Readers/Org.hs @@ -391,6 +391,9 @@ lookupBlockAttribute key =  type BlockProperties = (Int, String)  -- (Indentation, Block-Type) +updateIndent :: BlockProperties -> Int -> BlockProperties +updateIndent (_, blkType) indent = (indent, blkType) +  orgBlock :: OrgParser (F Blocks)  orgBlock = try $ do    blockProp@(_, blkType) <- blockHeaderStart @@ -407,11 +410,23 @@ orgBlock = try $ do        _         -> withParsed (fmap $ divWithClass blkType)  blockHeaderStart :: OrgParser (Int, String) -blockHeaderStart = try $ (,) <$> indent <*> blockType +blockHeaderStart = try $ (,) <$> indentation <*> blockType   where -  indent    = length      <$> many spaceChar    blockType = map toLower <$> (stringAnyCase "#+begin_" *> orgArgWord) +indentation :: OrgParser Int +indentation = try $ do +  tabStop  <- getOption readerTabStop +  s        <- many spaceChar +  return $ spaceLength tabStop s + +spaceLength :: Int -> String -> Int +spaceLength tabStop s = (sum . map charLen) s + where +  charLen ' '  = 1 +  charLen '\t' = tabStop +  charLen _    = 0 +  withRaw'   :: (String   -> F Blocks) -> BlockProperties -> OrgParser (F Blocks)  withRaw'   f blockProp = (ignHeaders *> (f <$> rawBlockContent blockProp)) @@ -450,7 +465,8 @@ codeBlock blkProp = do    skipSpaces    (classes, kv)     <- codeHeaderArgs <|> (mempty <$ ignHeaders)    id'               <- fromMaybe "" <$> lookupBlockAttribute "name" -  content           <- rawBlockContent blkProp +  leadingIndent     <- lookAhead indentation +  content           <- rawBlockContent (updateIndent blkProp leadingIndent)    resultsContent    <- followingResultsBlock    let includeCode    = exportsCode kv    let includeResults = exportsResults kv @@ -472,7 +488,7 @@ rawBlockContent (indent, blockType) = try $    unlines . map commaEscaped <$> manyTill indentedLine blockEnder   where     indentedLine = try $ ("" <$ blankline) <|> (indentWith indent *> anyLine) -   blockEnder = try $ indentWith indent *> stringAnyCase ("#+end_" <> blockType) +   blockEnder = try $ skipSpaces *> stringAnyCase ("#+end_" <> blockType)  parsedBlockContent :: BlockProperties -> OrgParser (F Blocks)  parsedBlockContent blkProps = try $ do | 
