-package org.simantics.scl.compiler.markdown.html;\r
-\r
-import gnu.trove.map.hash.THashMap;\r
-import gnu.trove.procedure.TObjectProcedure;\r
-import gnu.trove.set.hash.THashSet;\r
-\r
-import java.util.ArrayList;\r
-import java.util.Collections;\r
-import java.util.List;\r
-\r
-import org.simantics.scl.compiler.source.repository.ModuleSourceRepository;\r
-\r
-public class HierarchicalDocumentationRef implements Comparable<HierarchicalDocumentationRef> {\r
- final String name;\r
- final ArrayList<HierarchicalDocumentationRef> children = new ArrayList<HierarchicalDocumentationRef>();\r
- String documentationName;\r
- \r
- public HierarchicalDocumentationRef(String name) {\r
- this.name = name;\r
- }\r
- \r
- public String getName() {\r
- return name;\r
- }\r
- \r
- public String getDocumentationName() {\r
- return documentationName;\r
- }\r
- \r
- public List<HierarchicalDocumentationRef> getChildren() {\r
- return children;\r
- }\r
-\r
- @Override\r
- public int compareTo(HierarchicalDocumentationRef o) {\r
- return name.compareTo(o.name);\r
- }\r
- \r
- public static HierarchicalDocumentationRef generateTree(ModuleSourceRepository sourceRepository) {\r
- final THashMap<String,HierarchicalDocumentationRef> refMap = new THashMap<String,HierarchicalDocumentationRef>();\r
- HierarchicalDocumentationRef root = new HierarchicalDocumentationRef("");\r
- refMap.put("", root);\r
- final THashSet<String> documentationPaths = new THashSet<String>(); \r
- TObjectProcedure<String> collector = new TObjectProcedure<String>() {\r
- @Override\r
- public boolean execute(String path) {\r
- documentationPaths.add(path);\r
- return true;\r
- }\r
- };\r
- sourceRepository.forAllDocumentations(collector);\r
- sourceRepository.forAllModules(collector);\r
- documentationPaths.forEach(new TObjectProcedure<String>() {\r
- HierarchicalDocumentationRef getRef(String path) {\r
- HierarchicalDocumentationRef ref = refMap.get(path);\r
- if(ref == null) {\r
- String name;\r
- String parentName;\r
- int p = path.lastIndexOf('/');\r
- if(p >= 0) {\r
- name = path.substring(p+1);\r
- parentName = path.substring(0, p);\r
- }\r
- else {\r
- name = path;\r
- parentName = "";\r
- }\r
- ref = new HierarchicalDocumentationRef(name);\r
- refMap.put(path, ref);\r
- getRef(parentName).children.add(ref);\r
- }\r
- return ref;\r
- } \r
- \r
- @Override\r
- public boolean execute(String documentationName) {\r
- getRef(documentationName.contains("/")\r
- ? documentationName : "StandardLibrary/" + documentationName)\r
- .documentationName = documentationName;\r
- return true;\r
- }\r
- });\r
- \r
- root.sort();\r
- \r
- return root;\r
- }\r
-\r
- private void sort() {\r
- Collections.sort(children);\r
- for(HierarchicalDocumentationRef child : children)\r
- child.sort();\r
- }\r
+package org.simantics.scl.compiler.markdown.html;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.simantics.scl.compiler.source.repository.ModuleSourceRepository;
+
+import gnu.trove.map.hash.THashMap;
+import gnu.trove.procedure.TObjectProcedure;
+import gnu.trove.set.hash.THashSet;
+
+public class HierarchicalDocumentationRef implements Comparable<HierarchicalDocumentationRef> {
+ final String name;
+ final ArrayList<HierarchicalDocumentationRef> children = new ArrayList<HierarchicalDocumentationRef>();
+ String documentationName;
+
+ public HierarchicalDocumentationRef(String name) {
+ this.name = name;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public String getDocumentationName() {
+ return documentationName;
+ }
+
+ public List<HierarchicalDocumentationRef> getChildren() {
+ return children;
+ }
+
+ @Override
+ public int compareTo(HierarchicalDocumentationRef o) {
+ return name.compareTo(o.name);
+ }
+
+ public static HierarchicalDocumentationRef generateTree(ModuleSourceRepository sourceRepository) {
+ final THashMap<String,HierarchicalDocumentationRef> refMap = new THashMap<String,HierarchicalDocumentationRef>();
+ HierarchicalDocumentationRef root = new HierarchicalDocumentationRef("");
+ refMap.put("", root);
+ final THashSet<String> documentationPaths = new THashSet<String>();
+ TObjectProcedure<String> collector = new TObjectProcedure<String>() {
+ @Override
+ public boolean execute(String path) {
+ documentationPaths.add(path);
+ return true;
+ }
+ };
+ sourceRepository.forAllDocumentations(collector);
+ sourceRepository.forAllModules(collector);
+ documentationPaths.forEach(new TObjectProcedure<String>() {
+ HierarchicalDocumentationRef getRef(String path) {
+ HierarchicalDocumentationRef ref = refMap.get(path);
+ if(ref == null) {
+ String name;
+ String parentName;
+ int p = path.lastIndexOf('/');
+ if(p >= 0) {
+ name = path.substring(p+1);
+ parentName = path.substring(0, p);
+ }
+ else {
+ name = path;
+ parentName = "";
+ }
+ ref = new HierarchicalDocumentationRef(name);
+ refMap.put(path, ref);
+ getRef(parentName).children.add(ref);
+ }
+ return ref;
+ }
+
+ @Override
+ public boolean execute(String documentationName) {
+ getRef(documentationName.contains("/")
+ ? documentationName : "StandardLibrary/" + documentationName)
+ .documentationName = documentationName;
+ return true;
+ }
+ });
+
+ root.sort();
+
+ return root;
+ }
+
+ private void sort() {
+ Collections.sort(children);
+ for(HierarchicalDocumentationRef child : children)
+ child.sort();
+ }
}
\ No newline at end of file