Fix a documentation link

PiperOrigin-RevId: 179416493
diff --git a/src/main/java/com/google/devtools/build/docgen/DocgenConsts.java b/src/main/java/com/google/devtools/build/docgen/DocgenConsts.java
index d5e0037..ebdf3f3 100644
--- a/src/main/java/com/google/devtools/build/docgen/DocgenConsts.java
+++ b/src/main/java/com/google/devtools/build/docgen/DocgenConsts.java
@@ -45,10 +45,6 @@
   public static final String SKYLARK_OVERVIEW_TEMPLATE =
       "com/google/devtools/build/docgen/templates/skylark-overview.vm";
 
-  // Build Encyclopedia documentation root
-  // Can be overridden from SkylarkDocumentationProcessor#parseOptions
-  public static String BEDocsRoot = "/versions/master/be";
-
   public static final String VAR_LEFT_PANEL = "LEFT_PANEL";
 
   public static final String VAR_SECTION_BINARY = "SECTION_BINARY";
@@ -173,6 +169,15 @@
       .put("hdrs", -90)
       .build();
 
+  // The following variables are not constants as they can be overridden from
+  // SkylarkDocumentationProcessor#parseOptions
+
+  // Build Encyclopedia documentation root
+  public static String BeDocsRoot = "/versions/master/be";
+
+  // Documentation files extension
+  public static String documentationExtension = "html";
+
   static String toCommandLineFormat(String cmdDoc) {
     // Replace html <br> tags with line breaks
     cmdDoc = cmdDoc.replaceAll("(<br>|<br[\\s]*/>)", "\n") + "\n";
diff --git a/src/main/java/com/google/devtools/build/docgen/SkylarkDocumentationProcessor.java b/src/main/java/com/google/devtools/build/docgen/SkylarkDocumentationProcessor.java
index f6525f6..34a1b23 100644
--- a/src/main/java/com/google/devtools/build/docgen/SkylarkDocumentationProcessor.java
+++ b/src/main/java/com/google/devtools/build/docgen/SkylarkDocumentationProcessor.java
@@ -243,7 +243,10 @@
   private static void parseOptions(String... args) {
     for (String arg : args) {
       if (arg.startsWith("--be_root=")) {
-        DocgenConsts.BEDocsRoot = arg.split("--be_root=", 2)[1];
+        DocgenConsts.BeDocsRoot = arg.split("--be_root=", 2)[1];
+      }
+      if (arg.startsWith("--doc_extension=")) {
+        DocgenConsts.documentationExtension = arg.split("--doc_extension=", 2)[1];
       }
     }
   }
diff --git a/src/main/java/com/google/devtools/build/docgen/skylark/SkylarkBuiltinMethodDoc.java b/src/main/java/com/google/devtools/build/docgen/skylark/SkylarkBuiltinMethodDoc.java
index e352fb3..bcb5292 100644
--- a/src/main/java/com/google/devtools/build/docgen/skylark/SkylarkBuiltinMethodDoc.java
+++ b/src/main/java/com/google/devtools/build/docgen/skylark/SkylarkBuiltinMethodDoc.java
@@ -53,7 +53,7 @@
 
   @Override
   public String getDocumentation() {
-    return annotation.doc();
+    return SkylarkDocUtils.substituteVariables(annotation.doc());
   }
 
   /**
diff --git a/src/main/java/com/google/devtools/build/docgen/skylark/SkylarkDocUtils.java b/src/main/java/com/google/devtools/build/docgen/skylark/SkylarkDocUtils.java
new file mode 100644
index 0000000..ac73f65
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/docgen/skylark/SkylarkDocUtils.java
@@ -0,0 +1,33 @@
+// Copyright 2014 The Bazel Authors. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.google.devtools.build.docgen.skylark;
+
+import com.google.devtools.build.docgen.DocgenConsts;
+
+/** A utility class for the documentation generator. */
+public final class SkylarkDocUtils {
+  private SkylarkDocUtils() {}
+
+  /**
+   * Substitute special variables in the documentation with their actual values
+   *
+   * @return a string with substituted variables
+   */
+  static String substituteVariables(String documentation) {
+    return documentation
+        .replace("$BE_ROOT", DocgenConsts.BeDocsRoot)
+        .replace("$DOC_EXT", DocgenConsts.documentationExtension);
+  }
+}
diff --git a/src/main/java/com/google/devtools/build/docgen/skylark/SkylarkParamDoc.java b/src/main/java/com/google/devtools/build/docgen/skylark/SkylarkParamDoc.java
index d61aef6..74d26a9 100644
--- a/src/main/java/com/google/devtools/build/docgen/skylark/SkylarkParamDoc.java
+++ b/src/main/java/com/google/devtools/build/docgen/skylark/SkylarkParamDoc.java
@@ -13,7 +13,6 @@
 // limitations under the License.
 package com.google.devtools.build.docgen.skylark;
 
-import com.google.devtools.build.docgen.DocgenConsts;
 import com.google.devtools.build.lib.skylarkinterface.Param;
 import com.google.devtools.build.lib.skylarkinterface.ParamType;
 
@@ -74,6 +73,6 @@
 
   @Override
   public String getDocumentation() {
-    return param.doc().replace("$BE_ROOT", DocgenConsts.BEDocsRoot);
+    return SkylarkDocUtils.substituteVariables(param.doc());
   }
 }
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkAttr.java b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkAttr.java
index 82561c3..d6c795f 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkAttr.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkAttr.java
@@ -639,7 +639,7 @@
             + "referred to by the label. "
             + "It is the only way to specify a dependency to another target. "
             + "If you need a dependency that the user cannot overwrite, "
-            + "<a href=\"../rules.html#private-attributes\">make the attribute private</a>.",
+            + "<a href=\"../rules.$DOC_EXT#private-attributes\">make the attribute private</a>.",
     objectType = SkylarkAttr.class,
     returnType = Descriptor.class,
     parameters = {
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleClassFunctions.java b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleClassFunctions.java
index 28c0313..82370f1 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleClassFunctions.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleClassFunctions.java
@@ -247,7 +247,8 @@
             + "Instantiate this provider with <br>"
             + "<pre class=language-python>"
             + "OutputGroupInfo(group1 = &lt;files&gt;, group2 = &lt;files&gt;...)</pre>"
-            + "See <a href=\"../rules.html#output-groups\">Output Groups</a> for more information"
+            + "See <a href=\"../rules.$DOC_EXT#output-groups\">Output Groups</a> "
+            + "for more information."
   )
   private static final Provider outputGroupInfo = OutputGroupInfo.SKYLARK_CONSTRUCTOR;