git.iko.soy/typeable/pandoc
on master help sign in
Regularized the scheme for unique header identifiers in HTML writer:
2d4a22dfiddlosopher
src/Text/Pandoc/Writers/HTML.hs+14−4
@@ -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
40
40
@@ -169,22 +169,32 @@ obfuscateChar char =
169obfuscateString :: String -> String
169obfuscateString :: String -> String
170obfuscateString = (concatMap obfuscateChar) . decodeEntities
170obfuscateString = (concatMap obfuscateChar) . decodeEntities
171
171
172+-- | True if character is a punctuation character (unicode).
173+isPunctuation :: Char -> Bool
174+isPunctuation c =
175+ let c' = ord c in
176+ if (c `elem` "!\"'()*,-./:;<>?[\\]`{|}~") || (c' >= 0x2000 && c' <= 0x206F) ||
177+ (c' >= 0xE000 && c' <= 0xE0FF)
178+ then True
179+ else False
180+
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 _ -> ""
tests/s5.basic.html+3−3
@@ -749,7 +749,7 @@ window.onresize = function(){setTimeout('fontScale()', 50);}</script>
749<div id="currentSlide"></div>
749<div id="currentSlide"></div>
750<div id="header"></div>
750<div id="header"></div>
751<div id="footer">
751<div id="footer">
752−<h1 id="july 15, 2006"
752+<h1 id="july-15-2006"
753 >July 15, 2006</h1
753 >July 15, 2006</h1
754 ><h2 id="my-s5-document"
754 ><h2 id="my-s5-document"
755 >My S5 Document</h2
755 >My S5 Document</h2
@@ -760,9 +760,9 @@ window.onresize = function(){setTimeout('fontScale()', 50);}</script>
760<div class="slide">
760<div class="slide">
761<h1 id="my-s5-document-1"
761<h1 id="my-s5-document-1"
762 >My S5 Document</h1
762 >My S5 Document</h1
763− ><h3 id="sam smith, jen jones"
763+ ><h3 id="sam-smith-jen-jones"
764 >Sam Smith, Jen Jones</h3
764 >Sam Smith, Jen Jones</h3
765− ><h4 id="july 15, 2006-1"
765+ ><h4 id="july-15-2006-1"
766 >July 15, 2006</h4
766 >July 15, 2006</h4
767 ></div>
767 ></div>
768<div class="slide">
768<div class="slide">
tests/s5.fancy.html+3−3
@@ -1661,7 +1661,7 @@ else
1661<div id="currentSlide"></div>
1661<div id="currentSlide"></div>
1662<div id="header"></div>
1662<div id="header"></div>
1663<div id="footer">
1663<div id="footer">
1664−<h1 id="july 15, 2006"
1664+<h1 id="july-15-2006"
1665 >July 15, 2006</h1
1665 >July 15, 2006</h1
1666 ><h2 id="my-s5-document"
1666 ><h2 id="my-s5-document"
1667 >My S5 Document</h2
1667 >My S5 Document</h2
@@ -1672,9 +1672,9 @@ else
1672<div class="slide">
1672<div class="slide">
1673<h1 id="my-s5-document-1"
1673<h1 id="my-s5-document-1"
1674 >My S5 Document</h1
1674 >My S5 Document</h1
1675− ><h3 id="sam smith, jen jones"
1675+ ><h3 id="sam-smith-jen-jones"
1676 >Sam Smith, Jen Jones</h3
1676 >Sam Smith, Jen Jones</h3
1677− ><h4 id="july 15, 2006-1"
1677+ ><h4 id="july-15-2006-1"
1678 >July 15, 2006</h4
1678 >July 15, 2006</h4
1679 ></div>
1679 ></div>
1680<div class="slide">
1680<div class="slide">
tests/writer.html+1−1
@@ -636,7 +636,7 @@ Blah
636 >&lt;html&gt;</code
636 >&lt;html&gt;</code
637 >.</p
637 >.</p
638 ><hr
638 ><hr
639− /><h1 id="smart-quotes,-ellipses,-dashes"
639+ /><h1 id="smart-quotes-ellipses-dashes"
640 >Smart quotes, ellipses, dashes</h1
640 >Smart quotes, ellipses, dashes</h1
641 ><p
641 ><p
642 >&ldquo;Hello,&rdquo; said the spider. &ldquo;&lsquo;Shelob&rsquo; is my name.&rdquo;</p
642 >&ldquo;Hello,&rdquo; said the spider. &ldquo;&lsquo;Shelob&rsquo; is my name.&rdquo;</p