1 package org.simantics.scl.compiler.markdown.html;
\r
3 import java.io.IOException;
\r
4 import java.nio.file.Files;
\r
5 import java.nio.file.Path;
\r
6 import java.util.List;
\r
8 import org.simantics.scl.compiler.module.repository.ModuleRepository;
\r
10 public class GenerateAllHtmlDocumentation {
\r
11 public static void generate(ModuleRepository moduleRepository, Path directory) throws IOException {
\r
12 HierarchicalDocumentationRef root = HierarchicalDocumentationRef.generateTree(moduleRepository.getSourceRepository());
\r
13 generate(moduleRepository, directory, root.getChildren(), 0, root);
\r
14 generateIndex(directory, 0, "StandardLibrary/Prelude.html");
\r
17 private static void generateIndex(Path directory, int level, String url) throws IOException {
\r
18 Path documentationFile = directory.resolve("index.html");
\r
19 for(int i=0;i<level;++i)
\r
21 String content = "<html><head><meta http-equiv=\"refresh\" content=\"1;url="+url+"\">" +
\r
22 "<script type=\"text/javascript\">window.location.href = \""+url+"\"</script>" +
\r
23 "</head><body>If you are not redirected automatically, <a href=\""+url+"\">follow the link</a>.</body></html>";
\r
24 Files.write(documentationFile, content.getBytes());
\r
27 private static void generate(ModuleRepository moduleRepository, Path directory, List<HierarchicalDocumentationRef> refs, int level, HierarchicalDocumentationRef root) throws IOException {
\r
28 String navigation = generateNavigation(level, root);
\r
29 for(HierarchicalDocumentationRef ref : refs) {
\r
30 String name = ref.getName();
\r
32 // Documentation for this ref
\r
33 String documentationName = ref.getDocumentationName();
\r
34 if(documentationName != null) {
\r
35 String documentation = HtmlDocumentationGeneration.generate(moduleRepository, documentationName, navigation);
\r
36 Path documentationFile = directory.resolve(name + ".html");
\r
37 Files.write(documentationFile, documentation.getBytes());
\r
40 // Children of the ref
\r
41 List<HierarchicalDocumentationRef> children = ref.getChildren();
\r
42 if(!children.isEmpty()) {
\r
43 Path childDirectory = directory.resolve(name);
\r
44 if(!Files.exists(childDirectory))
\r
45 Files.createDirectory(childDirectory);
\r
46 generate(moduleRepository, childDirectory, children, level+1, root);
\r
47 if(documentationName != null)
\r
48 generateIndex(childDirectory, 1, ref.getName() + ".html");
\r
50 generateIndex(childDirectory, level+1, "StandardLibrary/Prelude.html");
\r
55 private static String generateNavigation(int level,
\r
56 HierarchicalDocumentationRef root) {
\r
57 StringBuilder b = new StringBuilder();
\r
58 generateNavigation(b, level, root.getChildren());
\r
59 return b.toString();
\r
62 private static void generateNavigation(StringBuilder b, int level,
\r
63 List<HierarchicalDocumentationRef> refs) {
\r
65 for(HierarchicalDocumentationRef ref : refs) {
\r
67 String documentationName = ref.getDocumentationName();
\r
68 if(documentationName != null) {
\r
69 if(!documentationName.contains("/"))
\r
70 documentationName = "StandardLibrary/" + documentationName;
\r
71 b.append("<a href=\"");
\r
72 for(int i=0;i<level;++i)
\r
74 b.append(documentationName);
\r
75 b.append(".html\">");
\r
77 b.append(ref.getName());
\r
78 if(documentationName != null)
\r
80 List<HierarchicalDocumentationRef> children = ref.getChildren();
\r
81 if(children != null)
\r
82 generateNavigation(b, level, children);
\r