@@ -34,7 +34,7 @@ import Text.Pandoc.Entities (decodeEntities)
34import Text.Regex ( mkRegex, matchRegex )
34import Text.Regex ( mkRegex, matchRegex )
35import Numeric ( showHex )
35import Numeric ( showHex )
36import Data.Char ( ord, toLower )
36import Data.Char ( ord, toLower )
37−import Data.List ( isPrefixOf, partition )
37+import Data.List ( isPrefixOf, partition, intersperse )
38import Control.Monad.State
38import Control.Monad.State
39import Text.XHtml.Strict
39import Text.XHtml.Strict
@@ -169,22 +169,32 @@ obfuscateChar char =
169obfuscateString :: String -> String
169obfuscateString :: String -> String
170obfuscateString = (concatMap obfuscateChar) . decodeEntities
170obfuscateString = (concatMap obfuscateChar) . decodeEntities
172+-- | True if character is a punctuation character (unicode).
173+isPunctuation :: Char -> Bool
176+ if (c `elem` "!\"'()*,-./:;<>?[\\]`{|}~") || (c' >= 0x2000 && c' <= 0x206F) ||
177+ (c' >= 0xE000 && c' <= 0xE0FF)
172-- | Convert Pandoc inline list to plain text identifier.
181-- | Convert Pandoc inline list to plain text identifier.
173inlineListToIdentifier :: [Inline] -> String
182inlineListToIdentifier :: [Inline] -> String
174inlineListToIdentifier [] = ""
183inlineListToIdentifier [] = ""
175inlineListToIdentifier (x:xs) =
184inlineListToIdentifier (x:xs) =
176 xAsText ++ inlineListToIdentifier xs
185 xAsText ++ inlineListToIdentifier xs
177 where xAsText = case x of
186 where xAsText = case x of
187+ Str s -> filter (\c -> (c == '-') || not (isPunctuation c)) $
178− Str s -> map toLower s
188+ concat $ intersperse "-" $ words $ map toLower s
179 Emph lst -> inlineListToIdentifier lst
189 Emph lst -> inlineListToIdentifier lst
180 Strong lst -> inlineListToIdentifier lst
190 Strong lst -> inlineListToIdentifier lst
181 Quoted _ lst -> inlineListToIdentifier lst
191 Quoted _ lst -> inlineListToIdentifier lst
182 Code s -> s
192 Code s -> s
183 Space -> "-"
193 Space -> "-"
184− EmDash -> "--"
194+ EmDash -> "-"
185 EnDash -> "-"
195 EnDash -> "-"
186 Apostrophe -> ""
196 Apostrophe -> ""
187− Ellipses -> "..."
197+ Ellipses -> ""
188 LineBreak -> "-"
198 LineBreak -> "-"
189 TeX _ -> ""
199 TeX _ -> ""
190 HtmlInline _ -> ""
200 HtmlInline _ -> ""