@@ -38,6 +38,10 @@ module Text.Pandoc.Readers.Org.ParserState
38 , trimInlinesF
38 , trimInlinesF
41+ , ExportSettingSetter
42+ , exportSubSuperscripts
43+ , setExportSubSuperscripts
44+ , modifyExportSettings
43import Control.Monad (liftM, liftM2)
47import Control.Monad (liftM, liftM2)
@@ -70,6 +74,12 @@ type OrgBlockAttributes = M.Map String String
70-- link-type, the corresponding function transforms the given link string.
74-- link-type, the corresponding function transforms the given link string.
71type OrgLinkFormatters = M.Map String (String -> String)
75type OrgLinkFormatters = M.Map String (String -> String)
77+-- | Export settings <http://orgmode.org/manual/Export-settings.html>
78+-- These settings can be changed via OPTIONS statements.
79+data ExportSettings = ExportSettings
80+ { exportSubSuperscripts :: Bool -- ^ TeX-like syntax for sub- and superscripts
73-- | Org-mode parser state
83-- | Org-mode parser state
74data OrgParserState = OrgParserState
84data OrgParserState = OrgParserState
75 { orgStateOptions :: ReaderOptions
85 { orgStateOptions :: ReaderOptions
@@ -77,6 +87,7 @@ data OrgParserState = OrgParserState
77 , orgStateBlockAttributes :: OrgBlockAttributes
87 , orgStateBlockAttributes :: OrgBlockAttributes
78 , orgStateEmphasisCharStack :: [Char]
88 , orgStateEmphasisCharStack :: [Char]
79 , orgStateEmphasisNewlines :: Maybe Int
89 , orgStateEmphasisNewlines :: Maybe Int
90+ , orgStateExportSettings :: ExportSettings
80 , orgStateLastForbiddenCharPos :: Maybe SourcePos
91 , orgStateLastForbiddenCharPos :: Maybe SourcePos
81 , orgStateLastPreCharPos :: Maybe SourcePos
92 , orgStateLastPreCharPos :: Maybe SourcePos
82 , orgStateLastStrPos :: Maybe SourcePos
93 , orgStateLastStrPos :: Maybe SourcePos
@@ -119,6 +130,8 @@ instance HasHeaderMap OrgParserState where
119 extractHeaderMap = orgStateHeaderMap
130 extractHeaderMap = orgStateHeaderMap
120 updateHeaderMap f s = s{ orgStateHeaderMap = f (orgStateHeaderMap s) }
131 updateHeaderMap f s = s{ orgStateHeaderMap = f (orgStateHeaderMap s) }
133+instance Default ExportSettings where
134+ def = defaultExportSettings
123instance Default OrgParserState where
136instance Default OrgParserState where
124 def = defaultOrgParserState
137 def = defaultOrgParserState
@@ -130,6 +143,7 @@ defaultOrgParserState = OrgParserState
130 , orgStateBlockAttributes = M.empty
143 , orgStateBlockAttributes = M.empty
131 , orgStateEmphasisCharStack = []
144 , orgStateEmphasisCharStack = []
132 , orgStateEmphasisNewlines = Nothing
145 , orgStateEmphasisNewlines = Nothing
146+ , orgStateExportSettings = def
133 , orgStateLastForbiddenCharPos = Nothing
147 , orgStateLastForbiddenCharPos = Nothing
134 , orgStateLastPreCharPos = Nothing
148 , orgStateLastPreCharPos = Nothing
135 , orgStateLastStrPos = Nothing
149 , orgStateLastStrPos = Nothing
@@ -142,6 +156,24 @@ defaultOrgParserState = OrgParserState
142 , orgStateHeaderMap = M.empty
156 , orgStateHeaderMap = M.empty
159+defaultExportSettings :: ExportSettings
160+defaultExportSettings = ExportSettings
161+ { exportSubSuperscripts = True
166+-- Setter for exporting options
168+type ExportSettingSetter a = a -> ExportSettings -> ExportSettings
170+setExportSubSuperscripts :: ExportSettingSetter Bool
171+setExportSubSuperscripts val es = es { exportSubSuperscripts = val }
173+-- | Modify a parser state
174+modifyExportSettings :: ExportSettingSetter a -> a -> OrgParserState -> OrgParserState
175+modifyExportSettings setter val state =
176+ state { orgStateExportSettings = setter val . orgStateExportSettings $ state }
147-- Parser state reader
179-- Parser state reader