sep_comp: SeparateRuntimeFunction::compile_to_c only declare if module is dead
[nit.git] / src / doc / doc_down.nit
index 1c77939..e1a5348 100644 (file)
@@ -26,17 +26,25 @@ redef class MDoc
        # Full comment HTML escaped
        var full_comment: String is lazy do return content.join("\n").html_escape
 
+       private var markdown_proc: MarkdownProcessor is lazy do
+               return original_mentity.model.nitdoc_md_processor
+       end
+
+       private var inline_proc: MarkdownProcessor is lazy do
+               return original_mentity.model.nitdoc_inline_processor
+       end
+
        # Synopsys in a template
-       var tpl_short_comment: Streamable is lazy do
+       var tpl_short_comment: Writable is lazy do
                var res = new Template
-               var syn = nitdoc_inline_processor.process(content.first)
+               var syn = inline_proc.process(content.first)
                res.add "<span class=\"synopsys nitdoc\">{syn}</span>"
                return res
 
        end
 
        # Full comment in a template
-       var tpl_comment: Streamable is lazy do
+       var tpl_comment: Writable is lazy do
                var res = new Template
                var lines = content.to_a
                res.add "<div class=\"nitdoc\">"
@@ -44,22 +52,22 @@ redef class MDoc
                if not content.first.has_prefix("    ") and
                   not content.first.has_prefix("\t") then
                        # parse synopsys
-                       var syn = nitdoc_inline_processor.process(lines.shift)
+                       var syn = inline_proc.process(lines.shift)
                        res.add "<p class=\"synopsys\">{syn}</p>"
                end
                # check for annotations
                for i in [0 .. lines.length[ do
                        var line = lines[i]
                        if line.to_upper.has_prefix("ENSURE") or line.to_upper.has_prefix("REQUIRE") then
-                               var html = nitdoc_inline_processor.process(line)
+                               var html = inline_proc.process(line)
                                lines[i] = "<p class=\"contract\">{html}</p>"
                        else if line.to_upper.has_prefix("TODO") or line.to_upper.has_prefix("FIXME") then
-                               var html = nitdoc_inline_processor.process(line)
+                               var html = inline_proc.process(line)
                                lines[i] = "<p class=\"todo\">{html}</p>"
                        end
                end
                # add other lines
-               res.add nitdoc_md_processor.process(lines.join("\n"))
+               res.add markdown_proc.process(lines.join("\n"))
                res.add "</div>"
                return res
        end
@@ -143,6 +151,10 @@ private class NitdocDecorator
        end
 end
 
+# Decorator for span elements.
+#
+# Because inline comments can appear as span elements,
+# InlineDecorator do not decorate things like paragraphs or headers.
 private class InlineDecorator
        super NitdocDecorator
 
@@ -150,6 +162,10 @@ private class InlineDecorator
                v.emit_in block
        end
 
+       redef fun add_headline(v, block) do
+               v.emit_in block
+       end
+
        redef fun add_code(v, block) do
                # Try to parse code
                var ast = toolcontext.parse_something(block.block.text.to_s)
@@ -167,18 +183,20 @@ private class InlineDecorator
        end
 end
 
-# Get a markdown processor for Nitdoc comments.
-private fun nitdoc_md_processor: MarkdownProcessor do
-       var proc = new MarkdownProcessor
-       proc.emitter.decorator = new NitdocDecorator
-       return once proc
-end
+redef class Model
+       # Get a markdown processor for Nitdoc comments.
+       private var nitdoc_md_processor: MarkdownProcessor is lazy do
+               var proc = new MarkdownProcessor
+               proc.emitter.decorator = new NitdocDecorator
+               return proc
+       end
 
-# Get a markdown inline processor for Nitdoc comments.
-#
-# This processor is specificaly designed to inlinable doc elements like synopsys.
-private fun nitdoc_inline_processor: MarkdownProcessor do
-       var proc = new MarkdownProcessor
-       proc.emitter.decorator = new InlineDecorator
-       return once proc
+       # Get a markdown inline processor for Nitdoc comments.
+       #
+       # This processor is specificaly designed to inlinable doc elements like synopsys.
+       private var nitdoc_inline_processor: MarkdownProcessor is lazy do
+               var proc = new MarkdownProcessor
+               proc.emitter.decorator = new InlineDecorator
+               return proc
+       end
 end