mirror of
https://github.com/openjdk/jdk.git
synced 2026-03-15 10:23:28 +00:00
8213354: Support package-specific stylesheets
Reviewed-by: jjg
This commit is contained in:
parent
e6f6863cbc
commit
dcf38e3cfe
@ -153,10 +153,10 @@ public class AnnotationTypeWriterImpl extends SubWriterHolderWriter
|
||||
@Override
|
||||
public void printDocument(Content contentTree) throws DocFileIOException {
|
||||
String description = getDescription("declaration", annotationType);
|
||||
PackageElement pkg = utils.containingPackage(this.annotationType);
|
||||
Content stylesheetContent = getLocalStylesheetContent(pkg);
|
||||
printHtmlDocument(configuration.metakeywords.getMetaKeywords(annotationType),
|
||||
description,
|
||||
true,
|
||||
contentTree);
|
||||
description, true, stylesheetContent, contentTree);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -178,10 +178,10 @@ public class ClassWriterImpl extends SubWriterHolderWriter implements ClassWrite
|
||||
@Override
|
||||
public void printDocument(Content contentTree) throws DocFileIOException {
|
||||
String description = getDescription("declaration", typeElement);
|
||||
PackageElement pkg = utils.containingPackage(typeElement);
|
||||
Content stylesheetContent = getLocalStylesheetContent(pkg);
|
||||
printHtmlDocument(configuration.metakeywords.getMetaKeywords(typeElement),
|
||||
description,
|
||||
true,
|
||||
contentTree);
|
||||
description, true, stylesheetContent, contentTree);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -31,7 +31,6 @@ import com.sun.source.doctree.StartElementTree;
|
||||
import com.sun.source.doctree.TextTree;
|
||||
import com.sun.source.util.DocTreeFactory;
|
||||
import com.sun.tools.doclint.HtmlTag;
|
||||
import jdk.javadoc.internal.doclets.formats.html.markup.ContentBuilder;
|
||||
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTree;
|
||||
import jdk.javadoc.internal.doclets.formats.html.markup.Navigation;
|
||||
import jdk.javadoc.internal.doclets.toolkit.Content;
|
||||
@ -125,6 +124,16 @@ public class DocFilesHandlerImpl implements DocFilesHandler {
|
||||
}
|
||||
}
|
||||
|
||||
public List<DocPath> getStylesheets() throws DocFileIOException {
|
||||
List<DocPath> stylesheets = new ArrayList<DocPath>();
|
||||
for (DocFile srcdir : DocFile.list(configuration, location, source)) {
|
||||
for (DocFile srcFile : srcdir.list()) {
|
||||
if (srcFile.getName().endsWith(".css"))
|
||||
stylesheets.add(DocPaths.DOC_FILES.resolve(srcFile.getName()));
|
||||
}
|
||||
}
|
||||
return stylesheets;
|
||||
}
|
||||
|
||||
private void copyDirectory(DocFile srcdir, final DocPath dstDocPath,
|
||||
boolean first) throws DocFileIOException {
|
||||
|
||||
@ -240,6 +240,8 @@ public class HtmlConfiguration extends BaseConfiguration {
|
||||
|
||||
public DocPaths docPaths;
|
||||
|
||||
public Map<Element, List<DocPath>> localStylesheetMap = new HashMap<>();
|
||||
|
||||
/**
|
||||
* Creates an object to hold the configuration for a doclet.
|
||||
*
|
||||
|
||||
@ -2219,4 +2219,21 @@ public class HtmlDocletWriter {
|
||||
Script getMainBodyScript() {
|
||||
return mainBodyScript;
|
||||
}
|
||||
|
||||
Content getLocalStylesheetContent(Element element) throws DocFileIOException {
|
||||
Content stylesheetContent = new ContentBuilder();
|
||||
List<DocPath> localStylesheets = configuration.localStylesheetMap.get(element);
|
||||
if (localStylesheets == null) {
|
||||
DocFilesHandlerImpl docFilesHandler = (DocFilesHandlerImpl)configuration
|
||||
.getWriterFactory().getDocFilesHandler(element);
|
||||
localStylesheets = docFilesHandler.getStylesheets();
|
||||
configuration.localStylesheetMap.put(element, localStylesheets);
|
||||
}
|
||||
for (DocPath stylesheet : localStylesheets) {
|
||||
stylesheetContent.addContent(HtmlTree.LINK("stylesheet",
|
||||
"text/css", stylesheet.getPath(), "Style"));
|
||||
}
|
||||
return stylesheetContent;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -317,9 +317,8 @@ public class PackageWriterImpl extends HtmlDocletWriter
|
||||
@Override
|
||||
public void printDocument(Content contentTree) throws DocFileIOException {
|
||||
String description = getDescription("declaration", packageElement);
|
||||
Content stylesheetContent = getLocalStylesheetContent(packageElement);
|
||||
printHtmlDocument(configuration.metakeywords.getMetaKeywords(packageElement),
|
||||
description,
|
||||
true,
|
||||
contentTree);
|
||||
description, true, stylesheetContent, contentTree);
|
||||
}
|
||||
}
|
||||
|
||||
@ -26,6 +26,9 @@
|
||||
|
||||
package jdk.javadoc.internal.doclets.toolkit;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import jdk.javadoc.internal.doclets.toolkit.util.DocPath;
|
||||
/**
|
||||
* The interface for copying doc-files to the output.
|
||||
*
|
||||
@ -37,4 +40,5 @@ package jdk.javadoc.internal.doclets.toolkit;
|
||||
|
||||
public interface DocFilesHandler {
|
||||
void copyDocFiles() throws DocletException;
|
||||
List<DocPath> getStylesheets() throws DocletException;
|
||||
}
|
||||
|
||||
@ -0,0 +1,96 @@
|
||||
/*
|
||||
* Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License version 2 only, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* version 2 for more details (a copy is included in the LICENSE file that
|
||||
* accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License version
|
||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
* or visit www.oracle.com if you need additional information or have any
|
||||
* questions.
|
||||
*/
|
||||
|
||||
/*
|
||||
* @test
|
||||
* @bug 8213354
|
||||
* @summary Support package-specific stylesheets
|
||||
* @library /tools/lib ../../lib
|
||||
* @modules jdk.javadoc/jdk.javadoc.internal.tool
|
||||
* @build javadoc.tester.* toolbox.ToolBox builder.ClassBuilder
|
||||
* @run main TestPackageSpecificStylesheet
|
||||
*/
|
||||
|
||||
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.List;
|
||||
|
||||
import builder.ClassBuilder;
|
||||
import toolbox.ToolBox;
|
||||
|
||||
import javadoc.tester.JavadocTester;
|
||||
|
||||
public class TestPackageSpecificStylesheet extends JavadocTester {
|
||||
|
||||
final ToolBox tb;
|
||||
|
||||
public static void main(String... args) throws Exception {
|
||||
TestPackageSpecificStylesheet tester = new TestPackageSpecificStylesheet();
|
||||
tester.runTests(m -> new Object[]{Paths.get(m.getName())});
|
||||
}
|
||||
|
||||
TestPackageSpecificStylesheet() {
|
||||
tb = new ToolBox();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test(Path base) throws Exception {
|
||||
Path srcDir = base.resolve("src");
|
||||
Path outDir = base.resolve("out");
|
||||
|
||||
new ClassBuilder(tb, "pkg.A")
|
||||
.setComments("<span>test span style</span>")
|
||||
.setModifiers("public", "class")
|
||||
.write(srcDir);
|
||||
|
||||
Path docFilesDir = Files.createDirectories(srcDir.resolve("pkg").resolve("doc-files"));
|
||||
Path stylesheet = docFilesDir.resolve("spanstyle.css");
|
||||
Files.createFile(stylesheet);
|
||||
Files.write(stylesheet, List.of("span{ color:blue; }"));
|
||||
|
||||
new ClassBuilder(tb, "pkg2.B")
|
||||
.setModifiers("public", "class")
|
||||
.write(srcDir);
|
||||
|
||||
javadoc("-d", outDir.toString(),
|
||||
"-sourcepath", srcDir.toString(),
|
||||
"pkg", "pkg2");
|
||||
|
||||
checkExit(Exit.OK);
|
||||
|
||||
checkOutput("pkg/A.html", true,
|
||||
"<link rel=\"stylesheet\" type=\"text/css\" href=\"doc-files/spanstyle.css\"" +
|
||||
" title=\"Style\">");
|
||||
|
||||
checkOutput("pkg/package-summary.html", true,
|
||||
"<link rel=\"stylesheet\" type=\"text/css\" href=\"doc-files/spanstyle.css\"" +
|
||||
" title=\"Style\">");
|
||||
|
||||
checkOutput("pkg2/B.html", false,
|
||||
"<link rel=\"stylesheet\" type=\"text/css\" href=\"doc-files/spanstyle.css\"" +
|
||||
" title=\"Style\">");
|
||||
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user