]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - 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
diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/markdown/html/GenerateAllHtmlDocumentation.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/markdown/html/GenerateAllHtmlDocumentation.java
new file mode 100644 (file)
index 0000000..350c655
--- /dev/null
@@ -0,0 +1,87 @@
+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