Add Text.Pandoc.GroffChar.
This will hold common escaping data for groff characters.
This commit is contained in:
parent
24f388e1a7
commit
bbd94eae2b
3 changed files with 421 additions and 20 deletions
|
@ -545,6 +545,7 @@ library
|
|||
Text.Pandoc.Lua.Util,
|
||||
Text.Pandoc.CSS,
|
||||
Text.Pandoc.CSV,
|
||||
Text.Pandoc.GroffChar,
|
||||
Text.Pandoc.UUID,
|
||||
Text.Pandoc.Translations,
|
||||
Text.Pandoc.Slides,
|
||||
|
|
418
src/Text/Pandoc/GroffChar.hs
Normal file
418
src/Text/Pandoc/GroffChar.hs
Normal file
|
@ -0,0 +1,418 @@
|
|||
{-# LANGUAGE NoImplicitPrelude #-}
|
||||
{-
|
||||
Copyright (C) 2018 John MacFarlane <jgm@berkeley.edu>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
-}
|
||||
|
||||
{- |
|
||||
Module : Text.Pandoc.GroffChar
|
||||
Copyright : Copyright (C) 2007-2018 John MacFarlane
|
||||
License : GNU GPL, version 2 or above
|
||||
|
||||
Maintainer : John MacFarlane <jgm@berkeley.edu>
|
||||
Stability : alpha
|
||||
Portability : portable
|
||||
|
||||
Groff character escaping/unescaping.
|
||||
-}
|
||||
|
||||
module Text.Pandoc.GroffChar (
|
||||
essentialEscapes
|
||||
, characterCodes
|
||||
, combiningAccents
|
||||
) where
|
||||
import Prelude
|
||||
import qualified Data.Map as Map
|
||||
|
||||
essentialEscapes :: Map.Map Char String
|
||||
essentialEscapes = Map.fromList
|
||||
[ ('\160', "\\~")
|
||||
, ('\'', "\\[aq]")
|
||||
, ('`', "\\[ga]")
|
||||
, ('"', "\\[dq]")
|
||||
, ('~', "\\[ti]")
|
||||
, ('^', "\\[ha]")
|
||||
, ('@', "\\[at]")
|
||||
, ('\\', "\\[rs]")
|
||||
, ('\x2026', "\\&...") -- because u2026 doesn't render on tty
|
||||
, ('\x2212', "\\-") -- minus
|
||||
]
|
||||
|
||||
characterCodes :: [(Char, String)]
|
||||
characterCodes =
|
||||
[ ('Ð', "-D")
|
||||
, ('ð', "Sd")
|
||||
, ('Þ', "TP")
|
||||
, ('þ', "Tp")
|
||||
, ('ß', "ss")
|
||||
, ('ff', "ff")
|
||||
, ('fi', "fi")
|
||||
, ('fl', "fl")
|
||||
, ('ffi', "Fi")
|
||||
, ('ffl', "Fl")
|
||||
, ('Ł', "/L")
|
||||
, ('ł', "/l")
|
||||
, ('Ø', "/O")
|
||||
, ('ø', "/o")
|
||||
, ('Æ', "AE")
|
||||
, ('æ', "ae")
|
||||
, ('Œ', "OE")
|
||||
, ('œ', "oe")
|
||||
, ('IJ', "IJ")
|
||||
, ('ij', "ij")
|
||||
, ('ı', ".i")
|
||||
, ('ȷ', ".j")
|
||||
, ('Á', "'A")
|
||||
, ('Ć', "'C")
|
||||
, ('É', "'E")
|
||||
, ('Í', "'I")
|
||||
, ('Ó', "'O")
|
||||
, ('Ú', "'U")
|
||||
, ('Ý', "'Y")
|
||||
, ('á', "'a")
|
||||
, ('ć', "'c")
|
||||
, ('é', "'e")
|
||||
, ('í', "'i")
|
||||
, ('ó', "'o")
|
||||
, ('ú', "'u")
|
||||
, ('ý', "'y")
|
||||
, ('Ä', ":A")
|
||||
, ('Ë', ":E")
|
||||
, ('Ï', ":I")
|
||||
, ('Ö', ":O")
|
||||
, ('Ü', ":U")
|
||||
, ('Ÿ', ":Y")
|
||||
, ('ä', ":a")
|
||||
, ('ë', ":e")
|
||||
, ('ï', ":i")
|
||||
, ('ö', ":o")
|
||||
, ('ü', ":u")
|
||||
, ('ÿ', ":y")
|
||||
, ('Â', "^A")
|
||||
, ('Ê', "^E")
|
||||
, ('Î', "^I")
|
||||
, ('Ô', "^O")
|
||||
, ('Û', "^U")
|
||||
, ('â', "^a")
|
||||
, ('ê', "^e")
|
||||
, ('î', "^i")
|
||||
, ('ô', "^o")
|
||||
, ('û', "^u")
|
||||
, ('À', "`A")
|
||||
, ('È', "`E")
|
||||
, ('Ì', "`I")
|
||||
, ('Ò', "`O")
|
||||
, ('Ù', "`U")
|
||||
, ('à', "`a")
|
||||
, ('è', "`e")
|
||||
, ('ì', "`i")
|
||||
, ('ò', "`o")
|
||||
, ('ù', "`u")
|
||||
, ('Ã', "~A")
|
||||
, ('Ñ', "~N")
|
||||
, ('Õ', "~O")
|
||||
, ('ã', "~a")
|
||||
, ('ñ', "~n")
|
||||
, ('õ', "~o")
|
||||
, ('Š', "vS")
|
||||
, ('š', "vs")
|
||||
, ('Ž', "vZ")
|
||||
, ('ž', "vz")
|
||||
, ('Ç', ",C")
|
||||
, ('ç', ",c")
|
||||
, ('Å', "oA")
|
||||
, ('å', "oa")
|
||||
, ('˝', "a\"")
|
||||
, ('¯', "a-")
|
||||
, ('˙', "a.")
|
||||
, ('^', "a^")
|
||||
, ('´', "aa")
|
||||
, ('`', "ga")
|
||||
, ('˘', "ab")
|
||||
, ('¸', "ac")
|
||||
, ('¨', "ad")
|
||||
, ('ˇ', "ah")
|
||||
, ('˚', "ao")
|
||||
, ('~', "a~")
|
||||
, ('˛', "ho")
|
||||
, ('^', "ha")
|
||||
, ('~', "ti")
|
||||
, ('„', "Bq")
|
||||
, ('‚', "bq")
|
||||
, ('“', "lq")
|
||||
, ('”', "rq")
|
||||
, ('‘', "oq")
|
||||
, ('’', "cq")
|
||||
, ('\'', "aq")
|
||||
, ('"', "dq")
|
||||
, ('«', "Fo")
|
||||
, ('»', "Fc")
|
||||
, ('‹', "fo")
|
||||
, ('›', "fc")
|
||||
, ('¡', "r!")
|
||||
, ('¿', "r?")
|
||||
, ('—', "em")
|
||||
, ('–', "en")
|
||||
, ('‐', "hy")
|
||||
, ('[', "lB")
|
||||
, (']', "rB")
|
||||
, ('{', "lC")
|
||||
, ('}', "rC")
|
||||
, ('⟨', "la")
|
||||
, ('⟩', "ra")
|
||||
, ('⎪', "bv")
|
||||
, ('⎪', "braceex")
|
||||
, ('⎡', "bracketlefttp")
|
||||
, ('⎣', "bracketleftbt")
|
||||
, ('⎢', "bracketleftex")
|
||||
, ('⎤', "bracketrighttp")
|
||||
, ('⎦', "bracketrightbt")
|
||||
, ('⎥', "bracketrightex")
|
||||
, ('╭', "lt")
|
||||
, ('⎧', "bracelefttp")
|
||||
, ('┥', "lk")
|
||||
, ('⎨', "braceleftmid")
|
||||
, ('╰', "lb")
|
||||
, ('⎩', "braceleftbt")
|
||||
, ('⎪', "braceleftex")
|
||||
, ('╮', "rt")
|
||||
, ('⎫', "bracerighttp")
|
||||
, ('┝', "rk")
|
||||
, ('⎬', "bracerightmid")
|
||||
, ('╯', "rb")
|
||||
, ('⎭', "bracerightbt")
|
||||
, ('⎪', "bracerightex")
|
||||
, ('⎛', "parenlefttp")
|
||||
, ('⎝', "parenleftbt")
|
||||
, ('⎜', "parenleftex")
|
||||
, ('⎞', "parenrighttp")
|
||||
, ('⎠', "parenrightbt")
|
||||
, ('⎟', "parenrightex")
|
||||
, ('←', "<-")
|
||||
, ('→', "->")
|
||||
, ('↔', "<>")
|
||||
, ('↓', "da")
|
||||
, ('↑', "ua")
|
||||
, ('↕', "va")
|
||||
, ('⇐', "lA")
|
||||
, ('⇒', "rA")
|
||||
, ('⇔', "hA")
|
||||
, ('⇓', "dA")
|
||||
, ('⇑', "uA")
|
||||
, ('⇕', "vA")
|
||||
, ('⎯', "an")
|
||||
, ('|', "ba")
|
||||
, ('│', "br")
|
||||
, ('_', "ul")
|
||||
, ('‾', "rn")
|
||||
, ('_', "ru")
|
||||
, ('¦', "bb")
|
||||
, ('/', "sl")
|
||||
, ('\\', "rs")
|
||||
, ('○', "ci")
|
||||
, ('·', "bu")
|
||||
, ('‡', "dd")
|
||||
, ('†', "dg")
|
||||
, ('◊', "lz")
|
||||
, ('□', "sq")
|
||||
, ('¶', "ps")
|
||||
, ('§', "sc")
|
||||
, ('☜', "lh")
|
||||
, ('☞', "rh")
|
||||
, ('@', "at")
|
||||
, ('#', "sh")
|
||||
, ('↵', "CR")
|
||||
, ('✓', "OK")
|
||||
, ('©', "co")
|
||||
, ('®', "rg")
|
||||
, ('™', "tm")
|
||||
, ('$', "Do")
|
||||
, ('¢', "ct")
|
||||
, ('€', "eu")
|
||||
, ('€', "Eu")
|
||||
, ('¥', "Ye")
|
||||
, ('£', "Po")
|
||||
, ('¤', "Cs")
|
||||
, ('ƒ', "Fn")
|
||||
, ('°', "de")
|
||||
, ('‰', "%0")
|
||||
, ('′', "fm")
|
||||
, ('″', "sd")
|
||||
, ('µ', "mc")
|
||||
, ('ª', "Of")
|
||||
, ('º', "Om")
|
||||
, ('∧', "AN")
|
||||
, ('∨', "OR")
|
||||
, ('¬', "no")
|
||||
, ('¬', "tno")
|
||||
, ('∃', "te")
|
||||
, ('∀', "fa")
|
||||
, ('∋', "st")
|
||||
, ('∴', "3d")
|
||||
, ('∴', "tf")
|
||||
, ('|', "or")
|
||||
, ('½', "12")
|
||||
, ('¼', "14")
|
||||
, ('¾', "34")
|
||||
, ('⅛', "18")
|
||||
, ('⅜', "38")
|
||||
, ('⅝', "58")
|
||||
, ('⅞', "78")
|
||||
, ('¹', "S1")
|
||||
, ('²', "S2")
|
||||
, ('³', "S3")
|
||||
, ('+', "pl")
|
||||
, ('−', "mi")
|
||||
, ('∓', "-+")
|
||||
, ('±', "+-")
|
||||
, ('±', "t+-")
|
||||
, ('·', "pc")
|
||||
, ('⋅', "md")
|
||||
, ('×', "mu")
|
||||
, ('×', "tmu")
|
||||
, ('⊗', "c*")
|
||||
, ('⊕', "c+")
|
||||
, ('÷', "di")
|
||||
, ('÷', "tdi")
|
||||
, ('⁄', "f/")
|
||||
, ('∗', "**")
|
||||
, ('≤', "<=")
|
||||
, ('≥', ">=")
|
||||
, ('≪', "<<")
|
||||
, ('≫', ">>")
|
||||
, ('=', "eq")
|
||||
, ('≠', "!=")
|
||||
, ('≡', "==")
|
||||
, ('≢', "ne")
|
||||
, ('≅', "=~")
|
||||
, ('≃', "|=")
|
||||
, ('∼', "ap")
|
||||
, ('≈', "~~")
|
||||
, ('≈', "~=")
|
||||
, ('∝', "pt")
|
||||
, ('∅', "es")
|
||||
, ('∈', "mo")
|
||||
, ('∉', "nm")
|
||||
, ('⊂', "sb")
|
||||
, ('⊄', "nb")
|
||||
, ('⊃', "sp")
|
||||
, ('⊅', "nc")
|
||||
, ('⊆', "ib")
|
||||
, ('⊇', "ip")
|
||||
, ('∩', "ca")
|
||||
, ('∪', "cu")
|
||||
, ('∠', "/_")
|
||||
, ('⊥', "pp")
|
||||
, ('∫', "is")
|
||||
, ('∫', "integral")
|
||||
, ('∑', "sum")
|
||||
, ('∏', "product")
|
||||
, ('∐', "coproduct")
|
||||
, ('∇', "gr")
|
||||
, ('√', "sr")
|
||||
, ('√', "sqrt")
|
||||
-- , "radicalex"
|
||||
-- "sqrtex"
|
||||
, ('⌈', "lc")
|
||||
, ('⌉', "rc")
|
||||
, ('⌊', "lf")
|
||||
, ('⌋', "rf")
|
||||
, ('∞', "if")
|
||||
, ('ℵ', "Ah")
|
||||
, ('ℑ', "Im")
|
||||
, ('ℜ', "Re")
|
||||
, ('℘', "wp")
|
||||
, ('∂', "pd")
|
||||
, ('ℏ', "-h")
|
||||
, ('ℏ', "hbar")
|
||||
, ('Α', "*A")
|
||||
, ('Β', "*B")
|
||||
, ('Γ', "*G")
|
||||
, ('Δ', "*D")
|
||||
, ('Ε', "*E")
|
||||
, ('Ζ', "*Z")
|
||||
, ('Η', "*Y")
|
||||
, ('Θ', "*H")
|
||||
, ('Ι', "*I")
|
||||
, ('Κ', "*K")
|
||||
, ('Λ', "*L")
|
||||
, ('Μ', "*M")
|
||||
, ('Ν', "*N")
|
||||
, ('Ξ', "*C")
|
||||
, ('Ο', "*O")
|
||||
, ('Π', "*P")
|
||||
, ('Ρ', "*R")
|
||||
, ('Σ', "*S")
|
||||
, ('Τ', "*T")
|
||||
, ('Υ', "*U")
|
||||
, ('Φ', "*F")
|
||||
, ('Χ', "*X")
|
||||
, ('Ψ', "*Q")
|
||||
, ('Ω', "*W")
|
||||
, ('α', "*a")
|
||||
, ('β', "*b")
|
||||
, ('γ', "*g")
|
||||
, ('δ', "*d")
|
||||
, ('ε', "*e")
|
||||
, ('ζ', "*z")
|
||||
, ('η', "*y")
|
||||
, ('θ', "*h")
|
||||
, ('ι', "*i")
|
||||
, ('κ', "*k")
|
||||
, ('λ', "*l")
|
||||
, ('μ', "*m")
|
||||
, ('ν', "*n")
|
||||
, ('ξ', "*c")
|
||||
, ('ο', "*o")
|
||||
, ('π', "*p")
|
||||
, ('ρ', "*r")
|
||||
, ('ς', "ts")
|
||||
, ('σ', "*s")
|
||||
, ('τ', "*t")
|
||||
, ('υ', "*u")
|
||||
, ('ϕ', "*f")
|
||||
, ('χ', "*x")
|
||||
, ('ψ', "*q")
|
||||
, ('ω', "*w")
|
||||
, ('ϑ', "+h")
|
||||
, ('φ', "+f")
|
||||
, ('ϖ', "+p")
|
||||
, ('ϵ', "+e")
|
||||
, ('♣', "CL")
|
||||
, ('♠', "SP")
|
||||
, ('♥', "HE")
|
||||
, ('♦', "DI")
|
||||
]
|
||||
|
||||
-- use like: \\[E a^ aa]
|
||||
combiningAccents :: [(Char, String)]
|
||||
combiningAccents =
|
||||
[ ('˝' , "\\[a\"]")
|
||||
, ('¯', "\\[a-]")
|
||||
, ('˙', "\\[a.]")
|
||||
, ('^', "\\[a^]")
|
||||
, ('´', "\\[aa]")
|
||||
, ('`', "\\[ga]")
|
||||
, ('˘', "\\[ab]")
|
||||
, ('¸', "\\[ac]")
|
||||
, ('¨', "\\[ad]")
|
||||
, ('ˇ', "\\[ah]")
|
||||
, ('˚', "\\[ao]")
|
||||
, ('~', "\\[a~]")
|
||||
, ('˛', "\\[ho]")
|
||||
, ('^', "\\[ha]")
|
||||
, ('~', "\\[ti]")
|
||||
]
|
|
@ -51,6 +51,7 @@ import Text.Pandoc.Class (PandocMonad)
|
|||
import Text.Pandoc.Definition
|
||||
import Text.Pandoc.Pretty
|
||||
import Text.Printf (printf)
|
||||
import Text.Pandoc.GroffChar (essentialEscapes)
|
||||
|
||||
data WriterState = WriterState { stHasInlineMath :: Bool
|
||||
, stFirstPara :: Bool
|
||||
|
@ -81,28 +82,9 @@ type Note = [Block]
|
|||
|
||||
type MS = StateT WriterState
|
||||
|
||||
-- | Association list of characters to escape.
|
||||
groffEscapes :: Map.Map Char String
|
||||
groffEscapes = Map.fromList
|
||||
[ ('\160', "\\~")
|
||||
, ('\'', "\\[aq]")
|
||||
, ('`', "\\`")
|
||||
, ('"', "\\[dq]")
|
||||
, ('\x201C', "\\[lq]")
|
||||
, ('\x201D', "\\[rq]")
|
||||
, ('\x2018', "\\[oq]")
|
||||
, ('\x2019', "\\[cq]")
|
||||
, ('\x2014', "\\[em]")
|
||||
, ('\x2013', "\\[en]")
|
||||
, ('\x2026', "\\&...")
|
||||
, ('~', "\\[ti]")
|
||||
, ('^', "\\[ha]")
|
||||
, ('@', "\\[at]")
|
||||
, ('\\', "\\\\")
|
||||
]
|
||||
|
||||
escapeChar :: Char -> String
|
||||
escapeChar c = fromMaybe [c] (Map.lookup c groffEscapes)
|
||||
escapeChar c = fromMaybe [c] (Map.lookup c essentialEscapes)
|
||||
|
||||
-- | Escape special characters for groff.
|
||||
escapeString :: String -> String
|
||||
|
|
Loading…
Add table
Reference in a new issue