aboutsummaryrefslogtreecommitdiff
path: root/src/Model
diff options
context:
space:
mode:
Diffstat (limited to 'src/Model')
-rw-r--r--src/Model/Content.kt6
-rw-r--r--src/Model/DocumentationReference.kt27
2 files changed, 30 insertions, 3 deletions
diff --git a/src/Model/Content.kt b/src/Model/Content.kt
index 01d7b206..5688e2b8 100644
--- a/src/Model/Content.kt
+++ b/src/Model/Content.kt
@@ -39,7 +39,7 @@ public class ContentCode() : ContentBlock()
public class ContentBlockCode() : ContentBlock()
public abstract class ContentNodeLink() : ContentBlock() {
- abstract val node: DocumentationNode
+ abstract val node: DocumentationNode?
}
public class ContentNodeDirectLink(override val node: DocumentationNode): ContentNodeLink() {
@@ -50,8 +50,8 @@ public class ContentNodeDirectLink(override val node: DocumentationNode): Conten
children.hashCode() * 31 + node.name.hashCode()
}
-public class ContentNodeLazyLink(val linkText: String, val lazyNode: () -> DocumentationNode): ContentNodeLink() {
- override val node: DocumentationNode get() = lazyNode()
+public class ContentNodeLazyLink(val linkText: String, val lazyNode: () -> DocumentationNode?): ContentNodeLink() {
+ override val node: DocumentationNode? get() = lazyNode()
override fun equals(other: Any?): Boolean =
super.equals(other) && other is ContentNodeLazyLink && linkText == other.linkText
diff --git a/src/Model/DocumentationReference.kt b/src/Model/DocumentationReference.kt
index 4bc819f6..73d883e6 100644
--- a/src/Model/DocumentationReference.kt
+++ b/src/Model/DocumentationReference.kt
@@ -26,3 +26,30 @@ class PendingDocumentationReference(val lazyNodeFrom: () -> DocumentationNode?,
}
}
}
+
+class NodeReferenceGraph() {
+ private val nodeMap = hashMapOf<String, DocumentationNode>()
+ val references = arrayListOf<PendingDocumentationReference>()
+
+ fun register(signature: String, node: DocumentationNode) {
+ nodeMap.put(signature, node)
+ }
+
+ fun link(fromNode: DocumentationNode, toSignature: String, kind: DocumentationReference.Kind) {
+ references.add(PendingDocumentationReference({() -> fromNode}, {() -> nodeMap[toSignature]}, kind))
+ }
+
+ fun link(fromSignature: String, toNode: DocumentationNode, kind: DocumentationReference.Kind) {
+ references.add(PendingDocumentationReference({() -> nodeMap[fromSignature]}, {() -> toNode}, kind))
+ }
+
+ fun link(fromSignature: String, toSignature: String, kind: DocumentationReference.Kind) {
+ references.add(PendingDocumentationReference({() -> nodeMap[fromSignature]}, {() -> nodeMap[toSignature]}, kind))
+ }
+
+ fun lookup(signature: String): DocumentationNode? = nodeMap[signature]
+
+ fun resolveReferences() {
+ references.forEach { it.resolve() }
+ }
+}