aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlbert Krewinkel <[email protected]>2025-08-11 19:18:21 +0200
committerJohn MacFarlane <[email protected]>2025-09-02 17:50:47 +0200
commit64757254ab6e1d005cf8f4ee6c491d97aed7b16f (patch)
tree0b07d7d825ddcfd2d9fbae6363ac88797989720b /src
parent3a298067ae0fc022a2047e590d97602542a9e201 (diff)
T.P.Options: add type `HighlightMethod` and patterns [API Change]
The Text.Pandoc.Options module exports the `HighlightMethod` data type and it's constructors. Furthermore, three pattern synonyms are exported, `NoHighlightingString`, `DefaultHighlightingString`, and `IdiomaticHighlightingString`, which hold the string value that's used for decoding and encoding of HighlightMethod values.
Diffstat (limited to 'src')
-rw-r--r--src/Text/Pandoc/Options.hs52
1 files changed, 46 insertions, 6 deletions
diff --git a/src/Text/Pandoc/Options.hs b/src/Text/Pandoc/Options.hs
index 8e0046d0b..1079a3748 100644
--- a/src/Text/Pandoc/Options.hs
+++ b/src/Text/Pandoc/Options.hs
@@ -3,6 +3,7 @@
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
{-# LANGUAGE TemplateHaskell #-}
{- |
Module : Text.Pandoc.Options
@@ -21,6 +22,10 @@ module Text.Pandoc.Options ( module Text.Pandoc.Extensions
, HTMLMathMethod (..)
, CiteMethod (..)
, ObfuscationMethod (..)
+ , HighlightMethod (..)
+ , pattern NoHighlightingString
+ , pattern DefaultHighlightingString
+ , pattern IdiomaticHighlightingString
, HTMLSlideVariant (..)
, EPUBVersion (..)
, WrapOption (..)
@@ -42,13 +47,14 @@ import Data.Default
import Data.Char (toLower)
import Data.Text (Text)
import qualified Data.Set as Set
+import qualified Data.Text as T
import Data.Typeable (Typeable)
import GHC.Generics (Generic)
import Skylighting (SyntaxMap, defaultSyntaxMap)
import Text.DocTemplates (Context(..), Template)
import Text.Pandoc.Extensions
import Text.Pandoc.Chunks (PathTemplate)
-import Text.Pandoc.Highlighting (Style, defaultStyle)
+import Text.Pandoc.Highlighting (Style)
import Text.Pandoc.UTF8 (toStringLazy)
import Data.Aeson.TH (deriveJSON)
import Data.Aeson
@@ -186,6 +192,43 @@ instance ToJSON ObfuscationMethod where
toJSON ReferenceObfuscation = String "references"
toJSON JavascriptObfuscation = String "javascript"
+-- | Method to provide code highlighting.
+data HighlightMethod =
+ Skylighting Style
+ | IdiomaticHighlighting
+ | DefaultHighlighting
+ | NoHighlighting
+ deriving (Show, Read, Eq, Data, Typeable, Generic)
+
+-- | String representation of the idiomatic highlighting option.
+pattern IdiomaticHighlightingString :: Text
+pattern IdiomaticHighlightingString = "idiomatic"
+
+-- | String representation of the default highlighting option.
+pattern DefaultHighlightingString :: Text
+pattern DefaultHighlightingString = "default"
+
+-- | String representation of the no highlighting option
+pattern NoHighlightingString :: Text
+pattern NoHighlightingString = "none"
+
+instance ToJSON HighlightMethod where
+ toJSON NoHighlighting = String NoHighlightingString
+ toJSON IdiomaticHighlighting = String IdiomaticHighlightingString
+ toJSON DefaultHighlighting = String DefaultHighlightingString
+ toJSON (Skylighting style) = toJSON style
+
+instance FromJSON HighlightMethod where
+ parseJSON = \case
+ String NoHighlightingString -> pure NoHighlighting
+ String IdiomaticHighlightingString -> pure IdiomaticHighlighting
+ String DefaultHighlightingString -> pure DefaultHighlighting
+ String x -> fail $ "Unknown highlighting method " <> T.unpack x
+ Bool True -> pure DefaultHighlighting
+ Bool False -> pure NoHighlighting
+ Null -> pure NoHighlighting
+ v -> Skylighting <$> parseJSON v
+
-- | Varieties of HTML slide shows.
data HTMLSlideVariant = S5Slides
| SlidySlides
@@ -330,9 +373,7 @@ data WriterOptions = WriterOptions
, writerHtmlQTags :: Bool -- ^ Use @<q>@ tags for quotes in HTML
, writerSlideLevel :: Maybe Int -- ^ Force header level of slides
, writerTopLevelDivision :: TopLevelDivision -- ^ Type of top-level divisions
- , writerListings :: Bool -- ^ Use listings package for code
- , writerHighlightStyle :: Maybe Style -- ^ Style to use for highlighting
- -- (Nothing = no highlighting)
+ , writerHighlightMethod :: HighlightMethod -- ^ Style to use for highlighting
, writerSetextHeaders :: Bool -- ^ Use setext headers for levels 1-2 in markdown
, writerListTables :: Bool -- ^ Use list tables for RST tables
, writerEpubSubdirectory :: Text -- ^ Subdir for epub in OCF
@@ -374,8 +415,7 @@ instance Default WriterOptions where
, writerHtmlQTags = False
, writerSlideLevel = Nothing
, writerTopLevelDivision = TopLevelDefault
- , writerListings = False
- , writerHighlightStyle = Just defaultStyle
+ , writerHighlightMethod = DefaultHighlighting
, writerSetextHeaders = False
, writerListTables = False
, writerEpubSubdirectory = "EPUB"