| // 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.base.Joiner; | |
| import com.google.common.collect.ImmutableList; | |
| import com.google.common.collect.ImmutableMap; | |
| import com.google.devtools.build.lib.util.FileType; | |
| import com.google.devtools.build.lib.util.FileTypeSet; | |
| import java.util.Map; | |
| import java.util.regex.Pattern; | |
| /** | |
| * All the constants for the Docgen project. | |
| */ | |
| public class DocgenConsts { | |
| public static final String LS = "\n"; | |
| public static final String BE_TEMPLATE_DIR = | |
| "com/google/devtools/build/docgen/templates/be"; | |
| public static final String SINGLE_BE_TEMPLATE = BE_TEMPLATE_DIR + "/single-page.vm"; | |
| public static final String COMMON_DEFINITIONS_TEMPLATE = | |
| BE_TEMPLATE_DIR + "/common-definitions.vm"; | |
| public static final String OVERVIEW_TEMPLATE = BE_TEMPLATE_DIR + "/overview.vm"; | |
| public static final String RULES_TEMPLATE = BE_TEMPLATE_DIR + "/rules.vm"; | |
| public static final String BE_NAV_TEMPLATE = BE_TEMPLATE_DIR + "/be-nav.vm"; | |
| public static final String SKYLARK_LIBRARY_TEMPLATE = | |
| "com/google/devtools/build/docgen/templates/skylark-library.vm"; | |
| public static final String SKYLARK_NAV_TEMPLATE = | |
| "com/google/devtools/build/docgen/templates/skylark-nav.vm"; | |
| public static final String SKYLARK_MODULE_CATEGORY_TEMPLATE = | |
| "com/google/devtools/build/docgen/templates/skylark-category.vm"; | |
| public static final String VAR_LEFT_PANEL = "LEFT_PANEL"; | |
| public static final String VAR_SECTION_BINARY = "SECTION_BINARY"; | |
| public static final String VAR_SECTION_LIBRARY = "SECTION_LIBRARY"; | |
| public static final String VAR_SECTION_TEST = "SECTION_TEST"; | |
| public static final String VAR_SECTION_OTHER = "SECTION_OTHER"; | |
| public static final String VAR_IMPLICIT_OUTPUTS = "IMPLICIT_OUTPUTS"; | |
| public static final String VAR_NAME = "NAME"; | |
| public static final String VAR_LANG_SPECIFIC_HEADER_TABLE = "LANG_SPECIFIC_HEADER_TABLE"; | |
| public static final String VAR_OTHER_RULES_HEADER_TABLE = "OTHER_RULES_HEADER_TABLE"; | |
| public static final String VAR_COMMON_ATTRIBUTE_DEFINITION = "COMMON_ATTRIBUTE_DEFINITION"; | |
| public static final String VAR_TEST_ATTRIBUTE_DEFINITION = "TEST_ATTRIBUTE_DEFINITION"; | |
| public static final String VAR_BINARY_ATTRIBUTE_DEFINITION = "BINARY_ATTRIBUTE_DEFINITION"; | |
| public static final String VAR_SECTION_SKYLARK_BUILTIN = "SECTION_BUILTIN"; | |
| public static final String COMMON_ATTRIBUTES = "common"; | |
| public static final String TEST_ATTRIBUTES = "test"; | |
| public static final String BINARY_ATTRIBUTES = "binary"; | |
| /** | |
| * Mark the attribute as deprecated in the Build Encyclopedia. | |
| */ | |
| public static final String FLAG_DEPRECATED = "DEPRECATED"; | |
| public static final String FLAG_GENERIC_RULE = "GENERIC_RULE"; | |
| public static final String HEADER_COMMENT = Joiner.on("\n").join(ImmutableList.<String>of( | |
| "<!DOCTYPE html>", | |
| "<!--", | |
| " This document is synchronized with Blaze releases.", | |
| " To edit, submit changes to the Blaze source code.", | |
| "-->", | |
| "", | |
| "<!-- Generated by //java/com/google/devtools/build/docgen:build-encyclopedia.zip -->")); | |
| public static final FileTypeSet JAVA_SOURCE_FILE_SUFFIX = FileTypeSet.of(FileType.of(".java")); | |
| public static final String META_KEY_NAME = "NAME"; | |
| public static final String META_KEY_TYPE = "TYPE"; | |
| public static final String META_KEY_FAMILY = "FAMILY"; | |
| /** | |
| * Types a rule can have (Binary, Library, Test or Other). | |
| */ | |
| public static enum RuleType { | |
| BINARY, LIBRARY, TEST, OTHER | |
| } | |
| /** | |
| * Reference to another rule or Build Encyclopedia section. | |
| * | |
| * <p>The format of a link reference is rule.attribute (e.g. cc_library.deps). In the case of | |
| * static pages such as common definitions the format is page.heading | |
| * (e.g. common-definitions.label-expansion). | |
| */ | |
| public static final Pattern BLAZE_RULE_LINK = Pattern.compile( | |
| "\\$\\{link (([a-zA-Z_-]+)(\\.([a-zA-Z_\\.-]+))?)\\}"); | |
| public static final Pattern BLAZE_RULE_HEADING_LINK = Pattern.compile( | |
| "\\$\\{link (([a-zA-Z_-]+)\\#([a-zA-Z_\\.-]+))\\}"); | |
| /** | |
| * i.e. <!-- #BLAZE_RULE(NAME = RULE_NAME, TYPE = RULE_TYPE, FAMILY = RULE_FAMILY) --> | |
| * i.e. <!-- #BLAZE_RULE(...)[DEPRECATED] --> | |
| */ | |
| public static final Pattern BLAZE_RULE_START = Pattern.compile( | |
| "^[\\s]*/\\*[\\s]*\\<!\\-\\-[\\s]*#BLAZE_RULE[\\s]*\\(([\\w\\s=,+/()-]+)\\)" | |
| + "(\\[[\\w,]+\\])?[\\s]*\\-\\-\\>"); | |
| /** | |
| * i.e. <!-- #END_BLAZE_RULE --> | |
| */ | |
| public static final Pattern BLAZE_RULE_END = Pattern.compile( | |
| "^[\\s]*\\<!\\-\\-[\\s]*#END_BLAZE_RULE[\\s]*\\-\\-\\>[\\s]*\\*/"); | |
| /** | |
| * i.e. <!-- #BLAZE_RULE.EXAMPLE --> | |
| */ | |
| public static final Pattern BLAZE_RULE_EXAMPLE_START = Pattern.compile( | |
| "[\\s]*\\<!--[\\s]*#BLAZE_RULE.EXAMPLE[\\s]*--\\>[\\s]*"); | |
| /** | |
| * i.e. <!-- #BLAZE_RULE.END_EXAMPLE --> | |
| */ | |
| public static final Pattern BLAZE_RULE_EXAMPLE_END = Pattern.compile( | |
| "[\\s]*\\<!--[\\s]*#BLAZE_RULE.END_EXAMPLE[\\s]*--\\>[\\s]*"); | |
| /** | |
| * i.e. <!-- #BLAZE_RULE(RULE_NAME).VARIABLE_NAME --> | |
| */ | |
| public static final Pattern BLAZE_RULE_VAR_START = Pattern.compile( | |
| "^[\\s]*/\\*[\\s]*\\<!\\-\\-[\\s]*#BLAZE_RULE\\(([\\w\\$]+)\\)\\.([\\w]+)[\\s]*\\-\\-\\>"); | |
| /** | |
| * i.e. <!-- #END_BLAZE_RULE.VARIABLE_NAME --> | |
| */ | |
| public static final Pattern BLAZE_RULE_VAR_END = Pattern.compile( | |
| "^[\\s]*\\<!\\-\\-[\\s]*#END_BLAZE_RULE\\.([\\w]+)[\\s]*\\-\\-\\>[\\s]*\\*/"); | |
| /** | |
| * i.e. <!-- #BLAZE_RULE(RULE_NAME).ATTRIBUTE(ATTR_NAME) --> | |
| * i.e. <!-- #BLAZE_RULE(RULE_NAME).ATTRIBUTE(ATTR_NAME)[DEPRECATED] --> | |
| */ | |
| public static final Pattern BLAZE_RULE_ATTR_START = Pattern.compile( | |
| "^[\\s]*/\\*[\\s]*\\<!\\-\\-[\\s]*#BLAZE_RULE\\(([\\w\\$]+)\\)\\." | |
| + "ATTRIBUTE\\(([\\w]+)\\)(\\[[\\w,]+\\])?[\\s]*\\-\\-\\>"); | |
| /** | |
| * i.e. <!-- #END_BLAZE_RULE.ATTRIBUTE --> | |
| */ | |
| public static final Pattern BLAZE_RULE_ATTR_END = Pattern.compile( | |
| "^[\\s]*\\<!\\-\\-[\\s]*#END_BLAZE_RULE\\.ATTRIBUTE[\\s]*\\-\\-\\>[\\s]*\\*/"); | |
| /** e.g. "[DEPRECATED]" in <!-- #BLAZE_RULE(...).ATTRIBUTE(...)[DEPRECATED] --> */ | |
| public static final Pattern BLAZE_RULE_FLAGS = Pattern.compile("^.*\\[(.*)\\].*$"); | |
| public static final Map<String, Integer> ATTRIBUTE_ORDERING = ImmutableMap | |
| .<String, Integer>builder() | |
| .put("name", -99) | |
| .put("deps", -98) | |
| .put("src", -97) | |
| .put("srcs", -96) | |
| .put("data", -95) | |
| .put("resource", -94) | |
| .put("resources", -93) | |
| .put("out", -92) | |
| .put("outs", -91) | |
| .put("hdrs", -90) | |
| .build(); | |
| static String toCommandLineFormat(String cmdDoc) { | |
| // Replace html <br> tags with line breaks | |
| cmdDoc = cmdDoc.replaceAll("(<br>|<br[\\s]*/>)", "\n") + "\n"; | |
| // Replace other links <a href=".*">s with human readable links | |
| cmdDoc = cmdDoc.replaceAll("\\<a href=\"([^\"]+)\">[^\\<]*\\</a\\>", "$1"); | |
| // Delete other html tags | |
| cmdDoc = cmdDoc.replaceAll("\\<[/]?[^\\>]+\\>", ""); | |
| // Delete docgen variables | |
| cmdDoc = cmdDoc.replaceAll("\\$\\{[\\w_]+\\}", ""); | |
| // Substitute more than 2 line breaks in a row with 2 line breaks | |
| cmdDoc = cmdDoc.replaceAll("[\\n]{2,}", "\n\n"); | |
| // Ensure that the doc starts and ends with exactly two line breaks | |
| cmdDoc = cmdDoc.replaceAll("^[\\n]+", "\n\n"); | |
| cmdDoc = cmdDoc.replaceAll("[\\n]+$", "\n\n"); | |
| return cmdDoc; | |
| } | |
| static String removeDuplicatedNewLines(String doc) { | |
| return doc.replaceAll("[\\n][\\s]*[\\n]", "\n"); | |
| } | |
| } |