Skip to content

Commit d17bf51

Browse files
8295914: Add a header to generated HTML files in specs
Reviewed-by: erikj, iris
1 parent 9911405 commit d17bf51

File tree

3 files changed

+143
-5
lines changed

3 files changed

+143
-5
lines changed

make/Docs.gmk

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -593,6 +593,9 @@ ifeq ($(ENABLE_PANDOC), true)
593593
# html, if we have pandoc (otherwise we'll just skip this).
594594

595595
GLOBAL_SPECS_DEFAULT_CSS_FILE := $(DOCS_OUTPUTDIR)/resources/jdk-default.css
596+
# Unset the following to suppress the link to the tool guides
597+
NAV_LINK_GUIDES := --nav-link-guides
598+
HEADER_RIGHT_SIDE_INFO := '<strong>$(subst &amp;,&,$(JDK_SHORT_NAME))$(DRAFT_MARKER_STR)</strong>'
596599

597600
$(foreach m, $(ALL_MODULES), \
598601
$(eval SPECS_$m := $(call FindModuleSpecsDirs, $m)) \
@@ -609,7 +612,8 @@ ifeq ($(ENABLE_PANDOC), true)
609612
REPLACEMENTS := \
610613
@@VERSION_SPECIFICATION@@ => $(VERSION_SPECIFICATION) ; \
611614
@@VERSION_STRING@@ => $(VERSION_STRING), \
612-
POST_PROCESS := $(TOOL_FIXUPPANDOC), \
615+
POST_PROCESS := $(TOOL_FIXUPPANDOC) --insert-nav --nav-right-info $(HEADER_RIGHT_SIDE_INFO) \
616+
--nav-subdirs $($m_$f_NOF_SUBDIRS) $(NAV_LINK_GUIDES), \
613617
)) \
614618
$(eval JDK_SPECS_TARGETS += $($($m_$f_NAME))) \
615619
) \
@@ -643,7 +647,8 @@ ifeq ($(ENABLE_PANDOC), true)
643647
@@VERSION_SHORT@@ => $(VERSION_SHORT) ; \
644648
@@VERSION_SPECIFICATION@@ => $(VERSION_SPECIFICATION), \
645649
OPTIONS := --toc -V include-before='$(SPECS_TOP)' -V include-after='$(SPECS_BOTTOM_1)', \
646-
POST_PROCESS := $(TOOL_FIXUPPANDOC), \
650+
POST_PROCESS := $(TOOL_FIXUPPANDOC) --insert-nav --nav-right-info $(HEADER_RIGHT_SIDE_INFO) \
651+
--nav-subdirs 1 --nav-link-guides, \
647652
EXTRA_DEPS := $(PANDOC_HTML_MANPAGE_FILTER) \
648653
$(PANDOC_HTML_MANPAGE_FILTER_SOURCE), \
649654
)) \

make/data/docs-resources/resources/jdk-default.css

Lines changed: 52 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,6 @@ table.centered td {
157157
font-size: 80%;
158158
padding: 6px;
159159
margin: -2.5em -2.5em 2.5em -2.5em;
160-
background-color: #CBDAE4;
161160
}
162161

163162
.legal-footer {
@@ -183,3 +182,55 @@ nav#TOC ul ul li {
183182
nav#TOC ul ul li::before {
184183
content: " \2022 "
185184
}
185+
186+
header#title-block-header {
187+
margin-top:-2em;
188+
}
189+
190+
header#title-block-header div.navbar {
191+
margin: 0 -2.5em 2.5em -2.5em;
192+
padding: 0 2.5em;
193+
background-color:#4D7A97;
194+
color:#FFFFFF;
195+
float:left;
196+
width:100%;
197+
clear:right;
198+
min-height:2.8em;
199+
padding-top:10px;
200+
overflow:hidden;
201+
font-size:12px;
202+
}
203+
204+
header#title-block-header div.navbar div {
205+
float:right;
206+
font-size:11px;
207+
height:2.9em;
208+
margin: auto 0;
209+
}
210+
211+
header#title-block-header ul {
212+
display:block;
213+
margin:0 25px 0 0;
214+
padding:0;
215+
}
216+
header#title-block-header ul li {
217+
list-style:none;
218+
float:left;
219+
padding: 5px 6px;
220+
text-transform:uppercase;
221+
}
222+
223+
header#title-block-header li.no-link {
224+
background-color:#F8981D;
225+
color:#253441;
226+
margin: auto 5px;
227+
}
228+
229+
header#title-block-header a:link, header#title-block-header a:active, header#title-block-header a:visited {
230+
color:#ffffff;
231+
text-decoration:none;
232+
text-transform:uppercase;
233+
}
234+
header#title-block-header a:hover {
235+
color:#bb7a2a;
236+
}

make/jdk/src/classes/build/tools/fixuppandoc/Main.java

Lines changed: 84 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import java.nio.file.Files;
3838
import java.nio.file.Path;
3939
import java.util.ArrayList;
40+
import java.util.Arrays;
4041
import java.util.LinkedHashMap;
4142
import java.util.LinkedHashSet;
4243
import java.util.List;
@@ -46,6 +47,8 @@
4647
import java.util.Set;
4748
import java.util.regex.Matcher;
4849
import java.util.regex.Pattern;
50+
import java.util.stream.Collectors;
51+
4952
import static java.nio.charset.StandardCharsets.UTF_8;
5053

5154
/**
@@ -120,21 +123,31 @@ public static void main(String... args) {
120123
private void run(String... args) throws IOException {
121124
Path inFile = null;
122125
Path outFile = null;
126+
NavBar navbar = null;
123127

124128
for (int i = 0; i < args.length; i++) {
125129
String arg = args[i];
126130
if (arg.equals("-o") && i + 1 < args.length) {
127131
outFile = Path.of(args[++i]);
132+
} else if (arg.equals("--insert-nav")) {
133+
navbar = new NavBar();
134+
} else if (arg.equals("--nav-right-info") && i + 1 < args.length) {
135+
navbar.rightSideInfo(args[++i]);
136+
} else if (arg.equals("--nav-subdirs") && i + 1 < args.length) {
137+
navbar.subdirs(Integer.parseInt(args[++i]));
138+
} else if (arg.equals("--nav-link-guides")) {
139+
navbar.linkGuides(true);
128140
} else if (arg.startsWith("-")) {
129141
throw new IllegalArgumentException(arg);
130142
} else if (inFile == null) {
131143
inFile = Path.of(arg);
132144
} else {
145+
System.err.println("ARGV: " + Arrays.toString(args));
133146
throw new IllegalArgumentException(arg);
134147
}
135148
}
136149

137-
new Fixup().run(inFile, outFile);
150+
new Fixup(navbar).run(inFile, outFile);
138151
}
139152

140153
/**
@@ -148,6 +161,9 @@ class Fixup extends HtmlParser {
148161
/** A stream for reporting errors. */
149162
PrintStream err = System.err;
150163

164+
/** A manager for the navigation bar, null if not required. */
165+
NavBar navbar;
166+
151167
/**
152168
* Flag to indicate when {@code <main>} is permitted around palpable content.
153169
* Set within {@code <body>}; disabled within elements in which {@code <main>}
@@ -174,6 +190,10 @@ class Fixup extends HtmlParser {
174190
*/
175191
Table table;
176192

193+
Fixup(NavBar navbar) {
194+
this.navbar = navbar;
195+
}
196+
177197
/**
178198
* Run the program, copying an input file to an output file.
179199
* If the input file is {@code null}, input is read from the standard input.
@@ -282,7 +302,10 @@ protected void startElement(String name, Map<String,String> attrs, boolean selfC
282302
}
283303
// <main> is not permitted within these elements
284304
allowMain = false;
285-
if (name.equals("nav") && Objects.equals(attrs.get("id"), "TOC")) {
305+
if (navbar != null && name.equals("header") && Objects.equals(attrs.get("id"), "title-block-header")) {
306+
flushBuffer();
307+
navbar.write(out);
308+
} else if (name.equals("nav") && Objects.equals(attrs.get("id"), "TOC")) {
286309
out.write(buffer.toString()
287310
.replaceAll(">$", " title=\"Table Of Contents\">"));
288311
buffer.setLength(0);
@@ -436,6 +459,65 @@ private void flushBuffer() {
436459
}
437460
}
438461

462+
class NavBar {
463+
private int subdirs = 0;
464+
private boolean linkGuides = false;
465+
private String rightSideInfo = "";
466+
467+
void subdirs(int subdirs) {
468+
this.subdirs = subdirs;
469+
}
470+
471+
void linkGuides(boolean linkGuides) {
472+
this.linkGuides = linkGuides;
473+
}
474+
475+
void rightSideInfo(String rightSideInfo) {
476+
this.rightSideInfo = rightSideInfo;
477+
}
478+
479+
void write(PrintWriter out) {
480+
get().lines().forEach(out::println);
481+
}
482+
483+
String get() {
484+
String pathToSpecs = "../".repeat(subdirs);
485+
String api = pathToSpecs + "../api/index.html";
486+
String specs = pathToSpecs + "index.html";
487+
String guides = pathToSpecs + "man/index.html";
488+
489+
StringBuilder sb = new StringBuilder();
490+
sb.append("\n");
491+
sb.append("<div class=\"navbar\">"); // full enclosing banner
492+
if (rightSideInfo != null) {
493+
sb.append("<div>").append(rightSideInfo).append("</div>");
494+
}
495+
sb.append("<nav>"); // nav links
496+
var links = new ArrayList<>(List.of(
497+
link(api, "API"),
498+
link(specs, "OTHER SPECIFICATIONS")
499+
));
500+
if (linkGuides) {
501+
links.add(link(guides, "TOOL GUIDES"));
502+
}
503+
sb.append(list(links));
504+
sb.append("</nav>");
505+
sb.append("</div>");
506+
sb.append("\n");
507+
return sb.toString();
508+
}
509+
510+
String list(List<String> items) {
511+
return items.stream()
512+
.map(i -> "<li>" + i)
513+
.collect(Collectors.joining("\n", "<ul>", "</ul>"));
514+
}
515+
516+
private String link(String href, String label) {
517+
return "<a href=\"" + href + "\">" + label + "</a>";
518+
}
519+
}
520+
439521
/**
440522
* Storage for the content of a {@code <table>} element} until we can determine
441523
* whether we should add {@code scope="row"} to the cells in a given column,

0 commit comments

Comments
 (0)