]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/markdown/html/GenerateAllHtmlDocumentation.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / markdown / html / GenerateAllHtmlDocumentation.java
1 package org.simantics.scl.compiler.markdown.html;\r
2 \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
7 \r
8 import org.simantics.scl.compiler.module.repository.ModuleRepository;\r
9 \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
15     }\r
16 \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
20             url = "../" + url;\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
25     }\r
26 \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
31             \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
38             }\r
39             \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
49                 else\r
50                     generateIndex(childDirectory, level+1, "StandardLibrary/Prelude.html");\r
51             }\r
52         }\r
53     }\r
54 \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
60     }\r
61 \r
62     private static void generateNavigation(StringBuilder b, int level,\r
63             List<HierarchicalDocumentationRef> refs) {\r
64         b.append("<ul>");\r
65         for(HierarchicalDocumentationRef ref : refs) {\r
66             b.append("<li>");\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
73                     b.append("../");\r
74                 b.append(documentationName);\r
75                 b.append(".html\">");\r
76             }\r
77             b.append(ref.getName());\r
78             if(documentationName != null)\r
79                 b.append("</a>");\r
80             List<HierarchicalDocumentationRef> children = ref.getChildren();\r
81             if(children != null)\r
82                 generateNavigation(b, level, children);\r
83             b.append("</li>");\r
84         }\r
85         b.append("</ul>");\r
86     }\r
87 }\r