@@ -32,7 +32,7 @@ writers.
3232module Main where
3333import Text.Pandoc
3434import Text.Pandoc.ODT
35−import Text.Pandoc.Shared ( HTMLMathMethod (..), splitBy )
35+import Text.Pandoc.Shared ( HTMLMathMethod (..), splitBy, ObfuscationMethod (..) )
3636import Text.Pandoc.Highlighting ( languages )
3737import System.Environment ( getArgs, getProgName, getEnvironment )
3838import System.Exit ( exitWith, ExitCode (..) )
@@ -156,6 +156,7 @@ data Opt = Opt
156156 , optWrapText :: Bool -- ^ Wrap text
157157 , optSanitizeHTML :: Bool -- ^ Sanitize HTML
158158 , optPlugins :: [Pandoc -> IO Pandoc] -- ^ Plugins to apply
159+ , optEmailObfuscation :: ObfuscationMethod
159160#ifdef _CITEPROC
160161 , optBiblioFile :: String
161162 , optBiblioFormat :: String
@@ -191,6 +192,7 @@ defaultOpts = Opt
191192 , optWrapText = True
192193 , optSanitizeHTML = False
193194 , optPlugins = []
195+ , optEmailObfuscation = JavascriptObfuscation
194196#ifdef _CITEPROC
195197 , optBiblioFile = []
196198 , optBiblioFormat = []
@@ -301,6 +303,19 @@ options =
301303 (\opt -> return opt { optSanitizeHTML = True }))
302304 "" -- "Sanitize HTML"
303305
306+ , Option "" ["email-obfuscation"]
307+ (ReqArg
308+ (\arg opt -> do
309+ method <- case arg of
310+ "references" -> return ReferenceObfuscation
311+ "javascript" -> return JavascriptObfuscation
312+ "none" -> return NoObfuscation
313+ _ -> hPutStrLn stderr ("Error: Unknown obfuscation method: " ++ arg) >>
314+ exitWith (ExitFailure 6)
315+ return opt { optEmailObfuscation = method })
316+ "none|javascript|references")
317+ "" -- "Method for obfuscating email in HTML"
318+
304319 , Option "" ["toc", "table-of-contents"]
305320 (NoArg
306321 (\opt -> return opt { optTableOfContents = True }))
@@ -533,10 +548,11 @@ main = do
533548 , optWrapText = wrap
534549 , optSanitizeHTML = sanitize
535550 , optPlugins = plugins
551+ , optEmailObfuscation = obfuscationMethod
536552#ifdef _CITEPROC
537− , optBiblioFile = biblioFile
538− , optBiblioFormat = biblioFormat
539− , optCslFile = cslFile
553+ , optBiblioFile = biblioFile
554+ , optBiblioFormat = biblioFormat
555+ , optCslFile = cslFile
540556#endif
541557 } = opts
542558
@@ -614,25 +630,28 @@ main = do
614630 let header = (if (customHeader == "DEFAULT")
615631 then defaultHeader
616632 else customHeader) ++ csslink ++ includeHeader
617− let writerOptions = WriterOptions { writerStandalone = standalone',
618− writerHeader = header,
619− writerTitlePrefix = titlePrefix,
620− writerTabStop = tabStop,
621− writerTableOfContents = toc &&
622− (not strict) &&
623− writerName' /= "s5",
624− writerHTMLMathMethod = mathMethod,
625− writerS5 = (writerName' == "s5"),
626− writerIgnoreNotes = False,
627− writerIncremental = incremental,
628− writerNumberSections = numberSections,
629− writerIncludeBefore = includeBefore,
630− writerIncludeAfter = includeAfter,
631− writerStrictMarkdown = strict,
632− writerReferenceLinks = referenceLinks,
633− writerWrapText = wrap,
634− writerLiterateHaskell = "+lhs" `isSuffixOf` writerName' ||
635− lhsExtension [outputFile] }
633+ let writerOptions = WriterOptions { writerStandalone = standalone',
634+ writerHeader = header,
635+ writerTitlePrefix = titlePrefix,
636+ writerTabStop = tabStop,
637+ writerTableOfContents = toc &&
638+ (not strict) &&
639+ writerName' /= "s5",
640+ writerHTMLMathMethod = mathMethod,
641+ writerS5 = (writerName' == "s5"),
642+ writerIgnoreNotes = False,
643+ writerIncremental = incremental,
644+ writerNumberSections = numberSections,
645+ writerIncludeBefore = includeBefore,
646+ writerIncludeAfter = includeAfter,
647+ writerStrictMarkdown = strict,
648+ writerReferenceLinks = referenceLinks,
649+ writerWrapText = wrap,
650+ writerLiterateHaskell = "+lhs" `isSuffixOf` writerName' ||
651+ lhsExtension [outputFile],
652+ writerEmailObfuscation = if strict
653+ then ReferenceObfuscation
654+ else obfuscationMethod }
636655
637656 if isNonTextOutput writerName' && outputFile == "-"
638657 then do hPutStrLn stderr ("Error: Cannot write " ++ writerName ++ " output to stdout.\n" ++