Add support for additional edge cases to RuleLinkExpander.

* Add support for rules with capital letters, such as Fileset
* Add support for static page headings with periods.
* Run the expander on the HTML doc for the name attribute.
* Add functions to initial rule index.

--
MOS_MIGRATED_REVID=115925884
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 d50a299..da7a1da 100644
--- a/src/main/java/com/google/devtools/build/docgen/DocgenConsts.java
+++ b/src/main/java/com/google/devtools/build/docgen/DocgenConsts.java
@@ -100,7 +100,7 @@
    * (e.g. common-definitions.label-expansion).
    */
   public static final Pattern BLAZE_RULE_LINK = Pattern.compile(
-      "\\$\\{link (([a-z_-]+)(\\.([a-z_-]+))?)\\}");
+      "\\$\\{link (([a-zA-Z_-]+)(\\.([a-zA-Z_\\.-]+))?)\\}");
 
   /**
    * i.e. <!-- #BLAZE_RULE(NAME = RULE_NAME, TYPE = RULE_TYPE, FAMILY = RULE_FAMILY) -->
diff --git a/src/main/java/com/google/devtools/build/docgen/RuleDocumentation.java b/src/main/java/com/google/devtools/build/docgen/RuleDocumentation.java
index 2fec7c4..f173bdf 100644
--- a/src/main/java/com/google/devtools/build/docgen/RuleDocumentation.java
+++ b/src/main/java/com/google/devtools/build/docgen/RuleDocumentation.java
@@ -209,10 +209,18 @@
    * Returns a string containing any extra documentation for the name attribute for this
    * rule.
    */
-  public String getNameExtraHtmlDoc() {
-    return docVariables.containsKey(DocgenConsts.VAR_NAME)
+  public String getNameExtraHtmlDoc() throws BuildEncyclopediaDocException {
+    String expandedDoc = docVariables.containsKey(DocgenConsts.VAR_NAME)
         ? docVariables.get(DocgenConsts.VAR_NAME)
         : "";
+    if (linkExpander != null) {
+      try {
+        expandedDoc = linkExpander.expand(expandedDoc);
+      } catch (IllegalArgumentException e) {
+        throw new BuildEncyclopediaDocException(fileName, startLineCount, e.getMessage());
+      }
+    }
+    return expandedDoc;
   }
 
   /**
diff --git a/src/main/java/com/google/devtools/build/docgen/RuleLinkExpander.java b/src/main/java/com/google/devtools/build/docgen/RuleLinkExpander.java
index 8ac8cbc..65147d0 100644
--- a/src/main/java/com/google/devtools/build/docgen/RuleLinkExpander.java
+++ b/src/main/java/com/google/devtools/build/docgen/RuleLinkExpander.java
@@ -13,8 +13,10 @@
 // limitations under the License.
 package com.google.devtools.build.docgen;
 
+import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
 
+import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;
 import java.util.regex.Matcher;
@@ -28,16 +30,32 @@
 class RuleLinkExpander {
   private static final String EXAMPLES_SUFFIX = "_examples";
   private static final String ARGS_SUFFIX = "_args";
+  private static final String FUNCTIONS_PAGE = "functions";
 
   private static final Set<String> STATIC_PAGES = ImmutableSet.<String>of(
       "common-definitions",
       "make-variables",
       "predefined-python-variables");
+  private static final Map<String, String> FUNCTIONS = ImmutableMap.<String, String>builder()
+      .put("load", FUNCTIONS_PAGE)
+      .put("subinclude", FUNCTIONS_PAGE)
+      .put("PYTHON-PREPROCESSING-REQUIRED", FUNCTIONS_PAGE)
+      .put("package", FUNCTIONS_PAGE)
+      .put("package_group", FUNCTIONS_PAGE)
+      .put("description", FUNCTIONS_PAGE)
+      .put("distribs", FUNCTIONS_PAGE)
+      .put("licenses", FUNCTIONS_PAGE)
+      .put("exports_files", FUNCTIONS_PAGE)
+      .put("glob", FUNCTIONS_PAGE)
+      .put("select", FUNCTIONS_PAGE)
+      .put("workspace", FUNCTIONS_PAGE)
+      .build();
 
-  private final Map<String, String> ruleIndex;
+  private final Map<String, String> ruleIndex = new HashMap<>();
 
   RuleLinkExpander(Map<String, String> ruleIndex) {
-    this.ruleIndex = ruleIndex;
+    this.ruleIndex.putAll(ruleIndex);
+    this.ruleIndex.putAll(FUNCTIONS);
   }
 
   private void appendRuleLink(Matcher matcher, StringBuffer sb, String ruleName, String ref) {