text-ansi 0.2.0 → 0.2.1
raw patch · 3 files changed
+352/−2 lines, 3 filesdep ~base
Dependency ranges changed: base
Files
- CHANGELOG.md +5/−1
- src/String/ANSI.hs +345/−0
- text-ansi.cabal +2/−1
CHANGELOG.md view
@@ -1,8 +1,12 @@+## [0.2.1] - 2022-11-05++- Add `String.ANSI` module+ ## [0.2.0] - 2022-10-28 - Drop the `Data` prefix from `Data.Text.ANSI` and `Data.Text.Builder.ANSI` modules - Rename `Text.Builder.ANSI` to `Text.Lazy.Builder.ANSI`-- Add `Text.Builder.ANSI` back, but based on `text-builder`'s builder instead of `text`'s builder.+- Add `Text.Builder.ANSI` back, but based on `text-builder`'s builder instead of `text`'s builder ## [0.1.1] - 2021-01-07
+ src/String/ANSI.hs view
@@ -0,0 +1,345 @@+module String.ANSI+ ( -- $intro++ -- * Foreground color+ black,+ red,+ green,+ yellow,+ blue,+ magenta,+ cyan,+ white,+ brightBlack,+ brightRed,+ brightGreen,+ brightYellow,+ brightBlue,+ brightMagenta,+ brightCyan,+ brightWhite,+ rgb,++ -- * Background color+ blackBg,+ redBg,+ greenBg,+ yellowBg,+ blueBg,+ magentaBg,+ cyanBg,+ whiteBg,+ brightBlackBg,+ brightRedBg,+ brightGreenBg,+ brightYellowBg,+ brightBlueBg,+ brightMagentaBg,+ brightCyanBg,+ brightWhiteBg,+ rgbBg,++ -- * Style+ bold,+ faint,+ italic,+ underline,+ doubleUnderline,+ strikethrough,+ frame,+ encircle,+ overline,+ )+where++import qualified Data.Text as Text+import Data.Word (Word8)+import Text.Builder (Builder)+import qualified Text.Builder as Builder+import qualified Text.Builder.ANSI as Builder.ANSI++-- $intro+--+-- Text styling for ANSI terminals using SGR codes, as defined by the+-- <https://www.ecma-international.org/publications/files/ECMA-ST/Ecma-048.pdf ECMA-48>+-- standard.+--+-- Supports foreground\/background color, bold\/faint intensity, italic,+-- single\/double underline, strikethrough, frame, encircle, and overline escape+-- sequences. Some styles may not work on your terminal.+--+-- Also features terminal detection, so redirecting styled output to a file will+-- automatically strip the ANSI escape sequences.++-- | Black foreground.+black :: String -> String+black =+ lift Builder.ANSI.black+{-# INLINE black #-}++-- | Red foreground.+red :: String -> String+red =+ lift Builder.ANSI.red+{-# INLINE red #-}++-- | Green foreground.+green :: String -> String+green =+ lift Builder.ANSI.green+{-# INLINE green #-}++-- | Yellow foreground.+yellow :: String -> String+yellow =+ lift Builder.ANSI.yellow+{-# INLINE yellow #-}++-- | Blue foreground.+blue :: String -> String+blue =+ lift Builder.ANSI.blue+{-# INLINE blue #-}++-- | Magenta foreground.+magenta :: String -> String+magenta =+ lift Builder.ANSI.magenta+{-# INLINE magenta #-}++-- | Cyan foreground.+cyan :: String -> String+cyan =+ lift Builder.ANSI.cyan+{-# INLINE cyan #-}++-- | White foreground.+white :: String -> String+white =+ lift Builder.ANSI.white+{-# INLINE white #-}++-- | Bright black foreground.+brightBlack :: String -> String+brightBlack =+ lift Builder.ANSI.brightBlack+{-# INLINE brightBlack #-}++-- | Bright red foreground.+brightRed :: String -> String+brightRed =+ lift Builder.ANSI.brightRed+{-# INLINE brightRed #-}++-- | Bright green foreground.+brightGreen :: String -> String+brightGreen =+ lift Builder.ANSI.brightGreen+{-# INLINE brightGreen #-}++-- | Bright yellow foreground.+brightYellow :: String -> String+brightYellow =+ lift Builder.ANSI.brightYellow+{-# INLINE brightYellow #-}++-- | Bright blue foreground.+brightBlue :: String -> String+brightBlue =+ lift Builder.ANSI.brightBlue+{-# INLINE brightBlue #-}++-- | Bright magenta foreground.+brightMagenta :: String -> String+brightMagenta =+ lift Builder.ANSI.brightMagenta+{-# INLINE brightMagenta #-}++-- | Bright cyan foreground.+brightCyan :: String -> String+brightCyan =+ lift Builder.ANSI.brightCyan+{-# INLINE brightCyan #-}++-- | Bright white foreground.+brightWhite :: String -> String+brightWhite =+ lift Builder.ANSI.brightWhite+{-# INLINE brightWhite #-}++-- | RGB foreground.+rgb :: Word8 -> Word8 -> Word8 -> String -> String+rgb r g b =+ lift (Builder.ANSI.rgb r g b)+{-# INLINE rgb #-}++-- | Black background.+blackBg :: String -> String+blackBg =+ lift Builder.ANSI.blackBg+{-# INLINE blackBg #-}++-- | Red background.+redBg :: String -> String+redBg =+ lift Builder.ANSI.redBg+{-# INLINE redBg #-}++-- | Green background.+greenBg :: String -> String+greenBg =+ lift Builder.ANSI.greenBg+{-# INLINE greenBg #-}++-- | Yellow background.+yellowBg :: String -> String+yellowBg =+ lift Builder.ANSI.yellowBg+{-# INLINE yellowBg #-}++-- | Blue background.+blueBg :: String -> String+blueBg =+ lift Builder.ANSI.blueBg+{-# INLINE blueBg #-}++-- | Magenta background.+magentaBg :: String -> String+magentaBg =+ lift Builder.ANSI.magentaBg+{-# INLINE magentaBg #-}++-- | Cyan background.+cyanBg :: String -> String+cyanBg =+ lift Builder.ANSI.cyanBg+{-# INLINE cyanBg #-}++-- | White background.+whiteBg :: String -> String+whiteBg =+ lift Builder.ANSI.whiteBg+{-# INLINE whiteBg #-}++-- | Bright black background.+brightBlackBg :: String -> String+brightBlackBg =+ lift Builder.ANSI.brightBlackBg+{-# INLINE brightBlackBg #-}++-- | Bright red background.+brightRedBg :: String -> String+brightRedBg =+ lift Builder.ANSI.brightRedBg+{-# INLINE brightRedBg #-}++-- | Bright green background.+brightGreenBg :: String -> String+brightGreenBg =+ lift Builder.ANSI.brightGreenBg+{-# INLINE brightGreenBg #-}++-- | Bright yellow background.+brightYellowBg :: String -> String+brightYellowBg =+ lift Builder.ANSI.brightYellowBg+{-# INLINE brightYellowBg #-}++-- | Bright blue background.+brightBlueBg :: String -> String+brightBlueBg =+ lift Builder.ANSI.brightBlueBg+{-# INLINE brightBlueBg #-}++-- | Bright magenta background.+brightMagentaBg :: String -> String+brightMagentaBg =+ lift Builder.ANSI.brightMagentaBg+{-# INLINE brightMagentaBg #-}++-- | Bright cyan background.+brightCyanBg :: String -> String+brightCyanBg =+ lift Builder.ANSI.brightCyanBg+{-# INLINE brightCyanBg #-}++-- | Bright white background.+brightWhiteBg :: String -> String+brightWhiteBg =+ lift Builder.ANSI.brightWhiteBg+{-# INLINE brightWhiteBg #-}++-- | RGB background.+rgbBg :: Word8 -> Word8 -> Word8 -> String -> String+rgbBg r g b =+ lift (Builder.ANSI.rgbBg r g b)+{-# INLINE rgbBg #-}++-- | __Bold__ style (high intensity).+bold :: String -> String+bold =+ lift Builder.ANSI.bold+{-# INLINE bold #-}++-- | Faint style (low intensity).+faint :: String -> String+faint =+ lift Builder.ANSI.faint+{-# INLINE faint #-}++-- | /Italic/ style.+italic :: String -> String+italic =+ lift Builder.ANSI.italic+{-# INLINE italic #-}++-- | U̲n̲d̲e̲r̲l̲i̲n̲e̲ style.+underline :: String -> String+underline =+ lift Builder.ANSI.underline+{-# INLINE underline #-}++-- | D̳o̳u̳b̳l̳e̳ ̳u̳n̳d̳e̳r̳l̳i̳n̳e̳ style.+doubleUnderline :: String -> String+doubleUnderline =+ lift Builder.ANSI.doubleUnderline+{-# INLINE doubleUnderline #-}++-- | S̶t̶r̶i̶k̶e̶t̶h̶r̶o̶u̶g̶h̶ style.+strikethrough :: String -> String+strikethrough =+ lift Builder.ANSI.strikethrough+{-# INLINE strikethrough #-}++-- | Frame style.+frame :: String -> String+frame =+ lift Builder.ANSI.frame+{-# INLINE frame #-}++-- | Encircle style.+encircle :: String -> String+encircle =+ lift Builder.ANSI.encircle+{-# INLINE encircle #-}++-- | O̅v̅e̅r̅l̅i̅n̅e̅ style.+overline :: String -> String+overline =+ lift Builder.ANSI.overline+{-# INLINE overline #-}++--++lift :: (Builder -> Builder) -> String -> String+lift f =+ Text.unpack . Builder.run . f . Builder.string+-- Don't inline before phase 2+{-# NOINLINE [2] lift #-}++-- Collapse lift/lift to a single lift before phase 2+{-# RULES+"lift/lift" [~2] forall f g s.+ lift f (lift g s) =+ lift (f . g) s+ #-}
text-ansi.cabal view
@@ -1,7 +1,7 @@ cabal-version: 2.2 name: text-ansi-version: 0.2.0+version: 0.2.1 category: Data synopsis: Text styling for ANSI terminals. description:@@ -41,6 +41,7 @@ default-language: Haskell2010 exposed-modules:+ String.ANSI Text.ANSI Text.Builder.ANSI Text.Lazy.Builder.ANSI