4a841bfc54
+ Added library Text.Pandoc.Include, with a template haskell function $(includeStrFrom fname) to include a file as a string constant at compile time. + This removes the need for the 'templates' directory or Makefile target. These have been removed. + The base source directory has been changed from src to . + A new 'data' directory has been added, containing the ASCIIMathML.js script, writer headers, and S5 files. + The src/wrappers directory has been moved to 'wrappers'. + The Text.Pandoc.ASCIIMathML library is no longer needed, since Text.Pandoc.Writers.HTML can use includeStrFrom to include the ASCIIMathML.js code directly. It has been removed. git-svn-id: https://pandoc.googlecode.com/svn/trunk@1063 788f1e2b-df1e-0410-8736-df70ead52e1b
45 lines
1.6 KiB
Haskell
45 lines
1.6 KiB
Haskell
-- | Functions for converting Unicode strings to UTF-8 and vice versa.
|
|
--
|
|
-- Taken from <http://www.cse.ogi.edu/~hallgren/Talks/LHiH/base/lib/UTF8.hs>.
|
|
-- (c) 2003, OGI School of Science & Engineering, Oregon Health and
|
|
-- Science University.
|
|
--
|
|
-- Modified by Martin Norbaeck
|
|
-- to pass illegal UTF-8 sequences through unchanged.
|
|
module Text.Pandoc.UTF8 (
|
|
fromUTF8,
|
|
toUTF8
|
|
) where
|
|
|
|
-- From the Char module supplied with HBC.
|
|
|
|
-- | Take a UTF-8 string and decode it into a Unicode string.
|
|
fromUTF8 :: String -> String
|
|
fromUTF8 "" = ""
|
|
fromUTF8 ('\xef':'\xbb':'\xbf':cs) = fromUTF8 cs -- skip BOM (byte order marker)
|
|
fromUTF8 (c:c':cs) | '\xc0' <= c && c <= '\xdf' &&
|
|
'\x80' <= c' && c' <= '\xbf' =
|
|
toEnum ((fromEnum c `mod` 0x20) * 0x40 + fromEnum c' `mod` 0x40) : fromUTF8 cs
|
|
fromUTF8 (c:c':c'':cs) | '\xe0' <= c && c <= '\xef' &&
|
|
'\x80' <= c' && c' <= '\xbf' &&
|
|
'\x80' <= c'' && c'' <= '\xbf' =
|
|
toEnum ((fromEnum c `mod` 0x10 * 0x1000) + (fromEnum c' `mod` 0x40) * 0x40 + fromEnum c'' `mod` 0x40) : fromUTF8 cs
|
|
fromUTF8 (c:cs) = c : fromUTF8 cs
|
|
|
|
-- | Take a Unicode string and encode it as a UTF-8 string.
|
|
toUTF8 :: String -> String
|
|
toUTF8 "" = ""
|
|
toUTF8 (c:cs) =
|
|
if c > '\x0000' && c < '\x0080' then
|
|
c : toUTF8 cs
|
|
else if c < toEnum 0x0800 then
|
|
let i = fromEnum c
|
|
in toEnum (0xc0 + i `div` 0x40) :
|
|
toEnum (0x80 + i `mod` 0x40) :
|
|
toUTF8 cs
|
|
else
|
|
let i = fromEnum c
|
|
in toEnum (0xe0 + i `div` 0x1000) :
|
|
toEnum (0x80 + (i `mod` 0x1000) `div` 0x40) :
|
|
toEnum (0x80 + i `mod` 0x40) :
|
|
toUTF8 cs
|