|  | // 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; | 
|  |  | 
|  | import com.google.common.collect.Sets; | 
|  | import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider; | 
|  | import java.io.IOException; | 
|  | import java.util.List; | 
|  | import java.util.Map; | 
|  |  | 
|  | /** | 
|  | * Assembles the single-page version of the Build Encyclopedia. | 
|  | */ | 
|  | public class SinglePageBuildEncyclopediaProcessor extends BuildEncyclopediaProcessor { | 
|  | public SinglePageBuildEncyclopediaProcessor(ConfiguredRuleClassProvider ruleClassProvider) { | 
|  | super(ruleClassProvider); | 
|  | } | 
|  |  | 
|  | /** | 
|  | * Collects and processes all the rule and attribute documentation in inputDirs and | 
|  | * generates the Build Encyclopedia into the outputDir. | 
|  | * | 
|  | * @param inputDirs list of directory to scan for document in the source code | 
|  | * @param outputDir output directory where to write the build encyclopedia | 
|  | * @param blackList optional path to a file listing rules to not document | 
|  | */ | 
|  | @Override | 
|  | public void generateDocumentation(List<String> inputDirs, String outputDir, String blackList) | 
|  | throws BuildEncyclopediaDocException, IOException { | 
|  | BuildDocCollector collector = new BuildDocCollector(ruleClassProvider, false); | 
|  | RuleLinkExpander expander = new RuleLinkExpander(ruleClassProvider.getProductName(), true); | 
|  | Map<String, RuleDocumentation> ruleDocEntries = collector.collect( | 
|  | inputDirs, blackList, expander); | 
|  | warnAboutUndocumentedRules( | 
|  | Sets.difference(ruleClassProvider.getRuleClassMap().keySet(), ruleDocEntries.keySet())); | 
|  | RuleFamilies ruleFamilies = assembleRuleFamilies(ruleDocEntries.values()); | 
|  |  | 
|  | Page page = TemplateEngine.newPage(DocgenConsts.SINGLE_BE_TEMPLATE); | 
|  |  | 
|  | // Add the rule link expander. | 
|  | page.add("expander", expander); | 
|  |  | 
|  | // Populate variables for Common Definitions section. | 
|  | page.add("commonAttributes", | 
|  | expandCommonAttributes(PredefinedAttributes.COMMON_ATTRIBUTES, expander)); | 
|  | page.add("testAttributes", | 
|  | expandCommonAttributes(PredefinedAttributes.TEST_ATTRIBUTES, expander)); | 
|  | page.add("binaryAttributes", | 
|  | expandCommonAttributes(PredefinedAttributes.BINARY_ATTRIBUTES, expander)); | 
|  |  | 
|  | // Popualte variables for Overview section. | 
|  | page.add("langSpecificRuleFamilies", ruleFamilies.langSpecific); | 
|  | page.add("genericRuleFamilies", ruleFamilies.generic); | 
|  |  | 
|  | // Populate variables for Rules section. | 
|  | page.add("ruleFamilies", ruleFamilies.all); | 
|  | page.add("singlePage", true); | 
|  |  | 
|  | writePage(page, outputDir, "build-encyclopedia.html"); | 
|  | } | 
|  | } |