From 5cd475be7057487ba4f63e2257b6f65b975acd58 Mon Sep 17 00:00:00 2001
From: Mauro Bieg <mb21@users.noreply.github.com>
Date: Fri, 3 Feb 2017 09:53:43 +0100
Subject: [PATCH] HTML and DocBook writers: fix internal links with
 writerIdentifierPrefix opt (#3398)

closes #3397
---
 MANUAL.txt                         | 8 ++++----
 src/Text/Pandoc/Writers/Docbook.hs | 2 +-
 src/Text/Pandoc/Writers/HTML.hs    | 8 +++++---
 3 files changed, 10 insertions(+), 8 deletions(-)

diff --git a/MANUAL.txt b/MANUAL.txt
index 3e4425a72..29fde9168 100644
--- a/MANUAL.txt
+++ b/MANUAL.txt
@@ -733,10 +733,10 @@ Options affecting specific writers
 
 `--id-prefix=`*STRING*
 
-:   Specify a prefix to be added to all automatically generated identifiers
-    in HTML and DocBook output, and to footnote numbers in Markdown output.
-    This is useful for preventing duplicate identifiers when generating
-    fragments to be included in other pages.
+:   Specify a prefix to be added to all identifiers and internal links
+    in HTML and DocBook output, and to footnote numbers in Markdown
+    and Haddock output. This is useful for preventing duplicate
+    identifiers when generating fragments to be included in other pages.
 
 `-T` *STRING*, `--title-prefix=`*STRING*
 
diff --git a/src/Text/Pandoc/Writers/Docbook.hs b/src/Text/Pandoc/Writers/Docbook.hs
index 4c5b255d8..482cae3db 100644
--- a/src/Text/Pandoc/Writers/Docbook.hs
+++ b/src/Text/Pandoc/Writers/Docbook.hs
@@ -405,7 +405,7 @@ inlineToDocbook opts (Link attr txt (src, _))
   | otherwise = do
       version <- ask
       (if isPrefixOf "#" src
-            then inTags False "link" $ ("linkend", drop 1 src) : idAndRole attr
+            then inTags False "link" $ ("linkend", writerIdentifierPrefix opts ++ drop 1 src) : idAndRole attr
             else if version == DocBook5
                     then inTags False "link" $ ("xlink:href", src) : idAndRole attr
                     else inTags False "ulink" $ ("url", src) : idAndRole attr )
diff --git a/src/Text/Pandoc/Writers/HTML.hs b/src/Text/Pandoc/Writers/HTML.hs
index d1fb3dda7..64eccd35e 100644
--- a/src/Text/Pandoc/Writers/HTML.hs
+++ b/src/Text/Pandoc/Writers/HTML.hs
@@ -933,9 +933,11 @@ inlineToHtml opts inline = do
                         linkText <- inlineListToHtml opts txt
                         slideVariant <- gets stSlideVariant
                         let s' = case s of
-                                      '#':xs | slideVariant == RevealJsSlides
-                                        -> '#':'/':xs
-                                      _ -> s
+                                   '#':xs -> let prefix = if slideVariant == RevealJsSlides
+                                                             then "/"
+                                                             else writerIdentifierPrefix opts
+                                             in  '#' : prefix ++ xs
+                                   _ -> s
                         let link = H.a ! A.href (toValue s') $ linkText
                         let link' = if txt == [Str (unEscapeString s)]
                                        then link ! A.class_ "uri"