Docx reader: Avoid 0-level headers.
We used to parse paragraphs styled with "HeadingN" as "nth-level header." But if a document has a custom style named "Heading0", this will produce a 0-level header, which shouldn't exist. We only parse this style if N>0. Otherwise we treat it as a normal style name, and follow its dependencies, if any. Closes #3830.
This commit is contained in:
parent
8164a005c0
commit
a36a56b8ac
1 changed files with 5 additions and 6 deletions
|
@ -61,7 +61,7 @@ import Control.Monad.Reader
|
|||
import Control.Monad.State.Strict
|
||||
import Data.Bits ((.|.))
|
||||
import qualified Data.ByteString.Lazy as B
|
||||
import Data.Char (chr, isDigit, ord, readLitChar)
|
||||
import Data.Char (chr, ord, readLitChar)
|
||||
import Data.List
|
||||
import qualified Data.Map as M
|
||||
import Data.Maybe
|
||||
|
@ -939,19 +939,18 @@ elemToRunStyle ns element parentStyle
|
|||
}
|
||||
elemToRunStyle _ _ _ = defaultRunStyle
|
||||
|
||||
isNumericNotNull :: String -> Bool
|
||||
isNumericNotNull str = (str /= []) && (all isDigit str)
|
||||
|
||||
getHeaderLevel :: NameSpaces -> Element -> Maybe (String,Int)
|
||||
getHeaderLevel ns element
|
||||
| Just styleId <- findAttrByName ns "w" "styleId" element
|
||||
, Just index <- stripPrefix "Heading" styleId
|
||||
, isNumericNotNull index = Just (styleId, read index)
|
||||
, Just n <- stringToInteger index
|
||||
, n > 0 = Just (styleId, fromInteger n)
|
||||
| Just styleId <- findAttrByName ns "w" "styleId" element
|
||||
, Just index <- findChildByName ns "w" "name" element >>=
|
||||
findAttrByName ns "w" "val" >>=
|
||||
stripPrefix "heading "
|
||||
, isNumericNotNull index = Just (styleId, read index)
|
||||
, Just n <- stringToInteger index
|
||||
, n > 0 = Just (styleId, fromInteger n)
|
||||
getHeaderLevel _ _ = Nothing
|
||||
|
||||
blockQuoteStyleIds :: [String]
|
||||
|
|
Loading…
Add table
Reference in a new issue