--- /dev/null
+package org.simantics.scl.compiler.markdown.html;\r
+\r
+import java.io.IOException;\r
+import java.nio.file.Files;\r
+import java.nio.file.Path;\r
+import java.util.List;\r
+\r
+import org.simantics.scl.compiler.module.repository.ModuleRepository;\r
+\r
+public class GenerateAllHtmlDocumentation {\r
+ public static void generate(ModuleRepository moduleRepository, Path directory) throws IOException {\r
+ HierarchicalDocumentationRef root = HierarchicalDocumentationRef.generateTree(moduleRepository.getSourceRepository());\r
+ generate(moduleRepository, directory, root.getChildren(), 0, root);\r
+ generateIndex(directory, 0, "StandardLibrary/Prelude.html");\r
+ }\r
+\r
+ private static void generateIndex(Path directory, int level, String url) throws IOException {\r
+ Path documentationFile = directory.resolve("index.html");\r
+ for(int i=0;i<level;++i)\r
+ url = "../" + url;\r
+ String content = "<html><head><meta http-equiv=\"refresh\" content=\"1;url="+url+"\">" +\r
+ "<script type=\"text/javascript\">window.location.href = \""+url+"\"</script>" +\r
+ "</head><body>If you are not redirected automatically, <a href=\""+url+"\">follow the link</a>.</body></html>";\r
+ Files.write(documentationFile, content.getBytes());\r
+ }\r
+\r
+ private static void generate(ModuleRepository moduleRepository, Path directory, List<HierarchicalDocumentationRef> refs, int level, HierarchicalDocumentationRef root) throws IOException {\r
+ String navigation = generateNavigation(level, root);\r
+ for(HierarchicalDocumentationRef ref : refs) {\r
+ String name = ref.getName();\r
+ \r
+ // Documentation for this ref\r
+ String documentationName = ref.getDocumentationName();\r
+ if(documentationName != null) {\r
+ String documentation = HtmlDocumentationGeneration.generate(moduleRepository, documentationName, navigation);\r
+ Path documentationFile = directory.resolve(name + ".html"); \r
+ Files.write(documentationFile, documentation.getBytes());\r
+ }\r
+ \r
+ // Children of the ref\r
+ List<HierarchicalDocumentationRef> children = ref.getChildren();\r
+ if(!children.isEmpty()) {\r
+ Path childDirectory = directory.resolve(name);\r
+ if(!Files.exists(childDirectory))\r
+ Files.createDirectory(childDirectory);\r
+ generate(moduleRepository, childDirectory, children, level+1, root);\r
+ if(documentationName != null)\r
+ generateIndex(childDirectory, 1, ref.getName() + ".html");\r
+ else\r
+ generateIndex(childDirectory, level+1, "StandardLibrary/Prelude.html");\r
+ }\r
+ }\r
+ }\r
+\r
+ private static String generateNavigation(int level,\r
+ HierarchicalDocumentationRef root) {\r
+ StringBuilder b = new StringBuilder();\r
+ generateNavigation(b, level, root.getChildren());\r
+ return b.toString();\r
+ }\r
+\r
+ private static void generateNavigation(StringBuilder b, int level,\r
+ List<HierarchicalDocumentationRef> refs) {\r
+ b.append("<ul>");\r
+ for(HierarchicalDocumentationRef ref : refs) {\r
+ b.append("<li>");\r
+ String documentationName = ref.getDocumentationName();\r
+ if(documentationName != null) {\r
+ if(!documentationName.contains("/"))\r
+ documentationName = "StandardLibrary/" + documentationName;\r
+ b.append("<a href=\"");\r
+ for(int i=0;i<level;++i)\r
+ b.append("../");\r
+ b.append(documentationName);\r
+ b.append(".html\">");\r
+ }\r
+ b.append(ref.getName());\r
+ if(documentationName != null)\r
+ b.append("</a>");\r
+ List<HierarchicalDocumentationRef> children = ref.getChildren();\r
+ if(children != null)\r
+ generateNavigation(b, level, children);\r
+ b.append("</li>");\r
+ }\r
+ b.append("</ul>");\r
+ }\r
+}\r