From dc5b0ba09b9ba33ed4a0260417c44f90eca9a1cb Mon Sep 17 00:00:00 2001
From: Jesse Rosenthal <jrosenthal@jhu.edu>
Date: Sun, 17 Aug 2014 08:20:00 -0400
Subject: Docx reader: Change behavior of Super/Subscript

In docx, super- and subscript are attributes of Vertalign. It makes more
sense to follow this, and have different possible values of Vertalign in
runStyle. This is mainly a preparatory step for real style parsing,
since it can distinguish between vertical align being explicitly turned
off and it not being set.

In addition, it makes parsing a bit clearer, and makes sure we don't do
docx-impossible things like being simultaneously super and sub.
---
 src/Text/Pandoc/Readers/Docx/Parse.hs | 25 +++++++++++++------------
 1 file changed, 13 insertions(+), 12 deletions(-)

(limited to 'src/Text/Pandoc/Readers/Docx')

diff --git a/src/Text/Pandoc/Readers/Docx/Parse.hs b/src/Text/Pandoc/Readers/Docx/Parse.hs
index 939fcde27..1775a19c3 100644
--- a/src/Text/Pandoc/Readers/Docx/Parse.hs
+++ b/src/Text/Pandoc/Readers/Docx/Parse.hs
@@ -43,6 +43,7 @@ module Text.Pandoc.Readers.Docx.Parse ( Docx(..)
                                       , Relationship
                                       , Media
                                       , RunStyle(..)
+                                      , VertAlign(..)
                                       , ParIndentation(..)
                                       , ParagraphStyle(..)
                                       , Row(..)
@@ -196,12 +197,14 @@ data Run = Run RunStyle [RunElem]
 data RunElem = TextRun String | LnBrk | Tab
              deriving Show
 
+data VertAlign = BaseLn | SupScrpt | SubScrpt
+               deriving Show
+
 data RunStyle = RunStyle { isBold :: Maybe Bool
                          , isItalic :: Maybe Bool
                          , isSmallCaps :: Maybe Bool
                          , isStrike :: Maybe Bool
-                         , isSuperScript :: Bool
-                         , isSubScript :: Bool
+                         , rVertAlign :: Maybe VertAlign
                          , rUnderline :: Maybe String
                          , rStyle :: Maybe String }
                 deriving Show
@@ -211,8 +214,7 @@ defaultRunStyle = RunStyle { isBold = Nothing
                            , isItalic = Nothing
                            , isSmallCaps = Nothing
                            , isStrike = Nothing
-                           , isSuperScript = False
-                           , isSubScript = False
+                           , rVertAlign = Nothing
                            , rUnderline = Nothing
                            , rStyle = Nothing
                            }
@@ -677,14 +679,13 @@ elemToRunStyle ns element
       , isItalic = checkOnOff ns rPr (elemName ns "w" "i")
       , isSmallCaps = checkOnOff ns rPr (elemName ns "w" "smallCaps")
       , isStrike = checkOnOff ns rPr (elemName ns "w" "strike")
-      , isSuperScript =
-        (Just "superscript" ==
-         (findChild (elemName ns "w" "vertAlign") rPr >>=
-          findAttr (elemName ns "w" "val")))
-      , isSubScript =
-        (Just "subscript" ==
-         (findChild (elemName ns "w" "vertAlign") rPr >>=
-          findAttr (elemName ns "w" "val")))
+      , rVertAlign =
+           findChild (elemName ns "w" "vertAlign") rPr >>=
+           findAttr (elemName ns "w" "val") >>=
+           \v -> Just $ case v of
+             "superscript" -> SupScrpt
+             "subscript"   -> SubScrpt
+             _             -> BaseLn
       , rUnderline =
           findChild (elemName ns "w" "u") rPr >>=
           findAttr (elemName ns "w" "val")
-- 
cgit v1.2.3