@@ -42,7 +42,7 @@ import System.Exit ( exitWith, ExitCode (..) )
4242import System.FilePath
4343import System.Console.GetOpt
4444import Data.Maybe ( fromMaybe )
45−import Data.Char ( toLower )
45+import Data.Char ( toLower, isDigit )
4646import Data.List ( intercalate, isSuffixOf )
4747import System.Directory ( getAppUserDataDirectory )
4848import System.IO ( stdout, stderr )
@@ -59,7 +59,7 @@ import Text.CSL
5959import Text.Pandoc.Biblio
6060#endif
6161import Control.Monad (when, unless, liftM)
62−import Network.HTTP
62+import Network.HTTP (simpleHTTP, mkRequest, getResponseBody, RequestMethod(..))
6363import Network.URI (parseURI)
6464import Data.ByteString.Lazy.UTF8 (toString)
6565
@@ -145,6 +145,7 @@ data Opt = Opt
145145 , optWriter :: String -- ^ Writer format
146146 , optParseRaw :: Bool -- ^ Parse unconvertable HTML and TeX
147147 , optTableOfContents :: Bool -- ^ Include table of contents
148+ , optHeaderShift :: Int -- ^ Headers base level
148149 , optTemplate :: String -- ^ Custom template
149150 , optVariables :: [(String,String)] -- ^ Template variables to set
150151 , optBefore :: [String] -- ^ Texts to include before body
@@ -184,6 +185,7 @@ defaultOpts = Opt
184185 , optWriter = "" -- null for default writer
185186 , optParseRaw = False
186187 , optTableOfContents = False
188+ , optHeaderShift = 1
187189 , optTemplate = ""
188190 , optVariables = []
189191 , optBefore = []
@@ -352,6 +354,17 @@ options =
352354 (\opt -> return opt { optTableOfContents = True }))
353355 "" -- "Include table of contents"
354356
357+ , Option "" ["base-header-level"]
358+ (ReqArg
359+ (\arg opt -> do
360+ if all isDigit arg && (read arg :: Int) >= 1
361+ then return opt { optHeaderShift = read arg - 1 }
362+ else do
363+ hPutStrLn stderr $ "base-header-level must be a number >= 1"
364+ exitWith $ ExitFailure 19)
365+ "LEVEL")
366+ "" -- "Headers base level"
367+
355368 , Option "" ["template"]
356369 (ReqArg
357370 (\arg opt -> do
@@ -559,6 +572,10 @@ defaultWriterName x =
559572 ['.',y] | y `elem` ['1'..'9'] -> "man"
560573 _ -> "html"
561574
575+shiftHeaderLevels :: Int -> Block -> Block
576+shiftHeaderLevels shift (Header level inner) = Header (level + shift) inner
577+shiftHeaderLevels _ x = x
578+
562579main :: IO ()
563580main = do
564581
@@ -595,6 +612,7 @@ main = do
595612 , optBefore = befores
596613 , optAfter = afters
597614 , optTableOfContents = toc
615+ , optHeaderShift = headerShift
598616 , optTemplate = template
599617 , optOutputFile = outputFile
600618 , optNumberSections = numberSections
@@ -748,14 +766,18 @@ main = do
748766
749767 doc <- fmap (reader startParserState . convertTabs . intercalate "\n") (readSources sources)
750768
751− doc' <- do
769+ let doc' = if headerShift > 1
770+ then processWith (shiftHeaderLevels headerShift) doc
771+ else doc
772+
773+ doc'' <- do
752774#ifdef _CITEPROC
753− processBiblio cslFile refs doc
775+ processBiblio cslFile refs doc'
754776#else
755− return doc
777+ return doc'
756778#endif
757779
758− let writerOutput = writer writerOptions doc' ++ "\n"
780+ let writerOutput = writer writerOptions doc'' ++ "\n"
759781
760782 case writerName' of
761783 "odt" -> saveOpenDocumentAsODT datadir outputFile sourceDirRelative referenceODT writerOutput