src/doc/commands: merge `doc_down` intro `templates_html`
authorAlexandre Terrasa <alexandre@moz-code.org>
Tue, 12 Jun 2018 16:02:28 +0000 (12:02 -0400)
committerAlexandre Terrasa <alexandre@moz-code.org>
Fri, 22 Jun 2018 03:42:27 +0000 (23:42 -0400)
Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>

src/doc/commands/commands_docdown.nit
src/doc/commands/commands_html.nit
src/doc/doc_down.nit [deleted file]
src/doc/templates/templates_html.nit
src/doc/templates/templates_json.nit
src/frontend/parse_examples.nit
src/nitcatalog.nit
src/nitweb.nit

index c05195b..596f549 100644 (file)
@@ -19,7 +19,6 @@ import commands::commands_parser
 import commands::commands_html
 import commands::commands_md
 
-intrude import doc_down
 intrude import markdown::wikilinks
 
 # Retrieve the MDoc summary
index 56d0e5b..df8b43a 100644 (file)
@@ -22,8 +22,6 @@ import commands_main
 import commands_usage
 
 import templates::templates_html
-import doc_down
-import highlight
 
 redef class DocCommand
 
diff --git a/src/doc/doc_down.nit b/src/doc/doc_down.nit
deleted file mode 100644 (file)
index 1fddb06..0000000
+++ /dev/null
@@ -1,207 +0,0 @@
-# This file is part of NIT ( http://www.nitlanguage.org ).
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# Handle markdown formatting in Nit comments.
-module doc_down
-
-import markdown
-import htmlight
-private import parser_util
-
-redef class MDoc
-
-       private var markdown_proc: MarkdownProcessor is lazy, writable do
-               return original_mentity.as(not null).model.nitdoc_md_processor
-       end
-
-       private var inline_proc: MarkdownProcessor is lazy, writable do
-               return original_mentity.as(not null).model.nitdoc_inline_processor
-       end
-
-       # Renders the synopsis as a HTML comment block.
-       var html_synopsis: Writable is lazy do
-               var res = new Template
-               var syn = inline_proc.process(content.first)
-               res.add "<span class=\"synopsys nitdoc\">{syn}</span>"
-               return res
-       end
-
-       # Renders the comment without the synopsis as a HTML comment block.
-       var html_comment: Writable is lazy do
-               var lines = content.to_a
-               if not lines.is_empty then lines.shift
-               return lines_to_html(lines)
-       end
-
-       # Renders the synopsis and the comment as a HTML comment block.
-       var html_documentation: Writable is lazy do return lines_to_html(content.to_a)
-
-       # Renders markdown line as a HTML comment block.
-       private fun lines_to_html(lines: Array[String]): Writable do
-               var res = new Template
-               var decorator = markdown_proc.decorator.as(NitdocDecorator)
-               decorator.current_mdoc = self
-               res.add "<div class=\"nitdoc\">"
-               # do not use DocUnit as synopsys
-               if not lines.is_empty then
-                       if not lines.first.has_prefix("    ") and
-                          not lines.first.has_prefix("\t") then
-                               # parse synopsys
-                               var syn = inline_proc.process(lines.shift)
-                               res.add "<h1 class=\"synopsys\">{syn}</h1>"
-                       end
-               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 = 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 = inline_proc.process(line)
-                               lines[i] = "<p class=\"todo\">{html}</p>"
-                       end
-               end
-               # add other lines
-               res.add markdown_proc.process(lines.join("\n"))
-               res.add "</div>"
-               decorator.current_mdoc = null
-               return res
-       end
-end
-
-# The specific markdown decorator used internally to process MDoc object.
-#
-# You should use the various methods of `MDoc` like `MDoc::html_documentation`
-#
-# The class is public so specific behavior can be plugged on it.
-class NitdocDecorator
-       super HTMLDecorator
-
-       private var toolcontext = new ToolContext
-
-       # The currently processed mdoc.
-       #
-       # Unfortunately, this seems to be the simpler way to get the currently processed `MDoc` object.
-       var current_mdoc: nullable MDoc = null
-
-       redef fun add_code(v, block) do
-               var meta = block.meta or else "nit"
-
-               # Do not try to highlight non-nit code.
-               if meta != "nit" and meta != "nitish" then
-                       v.add "<pre class=\"{meta}\"><code>"
-                       v.emit_in block
-                       v.add "</code></pre>\n"
-                       return
-               end
-               # Try to parse code
-               var code = block.raw_content
-               var ast = toolcontext.parse_something(code)
-               if ast isa AError then
-                       v.add "<pre class=\"{meta}\"><code>"
-                       v.emit_in block
-                       v.add "</code></pre>\n"
-                       return
-               end
-               v.add "<pre class=\"nitcode\"><code>"
-               var hl = new HtmlightVisitor
-               hl.line_id_prefix = ""
-               hl.highlight_node(ast)
-               v.add(hl.html)
-               v.add "</code></pre>\n"
-       end
-
-       redef fun add_span_code(v, text, from, to) do
-               # Try to parse it
-               var code = code_from_text(text, from, to)
-               var ast = toolcontext.parse_something(code)
-
-               if ast isa AError then
-                       v.add "<code class=\"rawcode\">"
-                       append_code(v, text, from, to)
-               else
-                       v.add "<code class=\"nitcode\">"
-                       var hl = new HtmlightVisitor
-                       hl.line_id_prefix = ""
-                       hl.highlight_node(ast)
-                       v.add(hl.html)
-               end
-               v.add "</code>"
-       end
-
-       private fun code_from_text(buffer: Text, from, to: Int): String do
-               var out = new FlatBuffer
-               for i in [from..to[ do out.add buffer[i]
-               return out.write_to_string
-       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
-
-       redef fun add_paragraph(v, block) do
-               v.emit_in block
-       end
-
-       redef fun add_headline(v, block) do
-               # save headline
-               var line = block.block.first_line
-               if line == null then return
-               var txt = line.value
-               var id = strip_id(txt)
-               var lvl = block.depth
-               headlines[id] = new HeadLine(id, txt, lvl)
-
-               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)
-               if ast isa AError then
-                       v.add "<code>"
-                       v.emit_in block
-                       v.add "</code>"
-                       return
-               end
-               v.add "<code class=\"nitcode\">"
-               var hl = new HtmlightVisitor
-               hl.highlight_node(ast)
-               v.add(hl.html)
-               v.add "</code>"
-       end
-end
-
-redef class Model
-       # Get a markdown processor for Nitdoc comments.
-       var nitdoc_md_processor: MarkdownProcessor is lazy, writable do
-               var proc = new MarkdownProcessor
-               proc.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.
-       var nitdoc_inline_processor: MarkdownProcessor is lazy, writable do
-               var proc = new MarkdownProcessor
-               proc.decorator = new InlineDecorator
-               return proc
-       end
-end
index 77e3980..d715d7b 100644 (file)
 module templates_html
 
 import model::model_collect
-import doc::doc_down
-import html::bootstrap
 import catalog
 
+import markdown
+import htmlight
+import html::bootstrap
+private import parser_util
+
 redef class MEntity
 
        # The MEntity unique ID in the HTML output
@@ -352,6 +355,8 @@ redef class MParameter
        end
 end
 
+# Catalog
+
 redef class Person
 
        # HTML uniq id
@@ -377,3 +382,192 @@ redef class Person
                return tpl.write_to_string
        end
 end
+
+# MDoc
+
+redef class MDoc
+
+       private var markdown_proc: MarkdownProcessor is lazy, writable do
+               return original_mentity.as(not null).model.nitdoc_md_processor
+       end
+
+       private var inline_proc: MarkdownProcessor is lazy, writable do
+               return original_mentity.as(not null).model.nitdoc_inline_processor
+       end
+
+       # Renders the synopsis as a HTML comment block.
+       var html_synopsis: Writable is lazy do
+               var res = new Template
+               var syn = inline_proc.process(content.first)
+               res.add "<span class=\"synopsys nitdoc\">{syn}</span>"
+               return res
+       end
+
+       # Renders the comment without the synopsis as a HTML comment block.
+       var html_comment: Writable is lazy do
+               var lines = content.to_a
+               if not lines.is_empty then lines.shift
+               return lines_to_html(lines)
+       end
+
+       # Renders the synopsis and the comment as a HTML comment block.
+       var html_documentation: Writable is lazy do return lines_to_html(content.to_a)
+
+       # Renders markdown line as a HTML comment block.
+       private fun lines_to_html(lines: Array[String]): Writable do
+               var res = new Template
+               var decorator = markdown_proc.decorator.as(NitdocDecorator)
+               decorator.current_mdoc = self
+               res.add "<div class=\"nitdoc\">"
+               # do not use DocUnit as synopsys
+               if not lines.is_empty then
+                       if not lines.first.has_prefix("    ") and
+                          not lines.first.has_prefix("\t") then
+                               # parse synopsys
+                               var syn = inline_proc.process(lines.shift)
+                               res.add "<h1 class=\"synopsys\">{syn}</h1>"
+                       end
+               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 = 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 = inline_proc.process(line)
+                               lines[i] = "<p class=\"todo\">{html}</p>"
+                       end
+               end
+               # add other lines
+               res.add markdown_proc.process(lines.join("\n"))
+               res.add "</div>"
+               decorator.current_mdoc = null
+               return res
+       end
+end
+
+# The specific markdown decorator used internally to process MDoc object.
+#
+# You should use the various methods of `MDoc` like `MDoc::html_documentation`
+#
+# The class is public so specific behavior can be plugged on it.
+class NitdocDecorator
+       super HTMLDecorator
+
+       private var toolcontext = new ToolContext
+
+       # The currently processed mdoc.
+       #
+       # Unfortunately, this seems to be the simpler way to get the currently processed `MDoc` object.
+       var current_mdoc: nullable MDoc = null
+
+       redef fun add_code(v, block) do
+               var meta = block.meta or else "nit"
+
+               # Do not try to highlight non-nit code.
+               if meta != "nit" and meta != "nitish" then
+                       v.add "<pre class=\"{meta}\"><code>"
+                       v.emit_in block
+                       v.add "</code></pre>\n"
+                       return
+               end
+               # Try to parse code
+               var code = block.raw_content
+               var ast = toolcontext.parse_something(code)
+               if ast isa AError then
+                       v.add "<pre class=\"{meta}\"><code>"
+                       v.emit_in block
+                       v.add "</code></pre>\n"
+                       return
+               end
+               v.add "<pre class=\"nitcode\"><code>"
+               var hl = new HtmlightVisitor
+               hl.line_id_prefix = ""
+               hl.highlight_node(ast)
+               v.add(hl.html)
+               v.add "</code></pre>\n"
+       end
+
+       redef fun add_span_code(v, text, from, to) do
+               # Try to parse it
+               var code = code_from_text(text, from, to)
+               var ast = toolcontext.parse_something(code)
+
+               if ast isa AError then
+                       v.add "<code class=\"rawcode\">"
+                       append_code(v, text, from, to)
+               else
+                       v.add "<code class=\"nitcode\">"
+                       var hl = new HtmlightVisitor
+                       hl.line_id_prefix = ""
+                       hl.highlight_node(ast)
+                       v.add(hl.html)
+               end
+               v.add "</code>"
+       end
+
+       private fun code_from_text(buffer: Text, from, to: Int): String do
+               var out = new FlatBuffer
+               for i in [from..to[ do out.add buffer[i]
+               return out.write_to_string
+       end
+end
+
+# Decorator for span elements.
+#
+# Because inline comments can appear as span elements,
+# InlineDecorator do not decorate things like paragraphs or headers.
+class InlineDecorator
+       super NitdocDecorator
+
+       redef fun add_paragraph(v, block) do
+               v.emit_in block
+       end
+
+       redef fun add_headline(v, block) do
+               # save headline
+               var line = block.block.first_line
+               if line == null then return
+               var txt = line.value
+               var id = strip_id(txt)
+               var lvl = block.depth
+               headlines[id] = new HeadLine(id, txt, lvl)
+
+               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)
+               if ast isa AError then
+                       v.add "<code>"
+                       v.emit_in block
+                       v.add "</code>"
+                       return
+               end
+               v.add "<code class=\"nitcode\">"
+               var hl = new HtmlightVisitor
+               hl.highlight_node(ast)
+               v.add(hl.html)
+               v.add "</code>"
+       end
+end
+
+redef class Model
+       # Get a markdown processor for Nitdoc comments.
+       var nitdoc_md_processor: MarkdownProcessor is lazy, writable do
+               var proc = new MarkdownProcessor
+               proc.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.
+       var nitdoc_inline_processor: MarkdownProcessor is lazy, writable do
+               var proc = new MarkdownProcessor
+               proc.decorator = new InlineDecorator
+               return proc
+       end
+end
index 1135460..e1dacf8 100644 (file)
@@ -27,7 +27,8 @@ module templates_json
 import model::model_collect
 import json::serialization_write
 import catalog
-import doc_down
+
+import templates_html
 
 redef class MEntity
        serialize
index 84c83a6..78258fa 100644 (file)
@@ -22,7 +22,6 @@ module parse_examples
 import counter
 import typing
 import parse_annotations
-import doc_down
 import model::model_examples
 
 redef class ToolContext
index 244be79..a8b3192 100644 (file)
 module nitcatalog
 
 import loader # Scan&load packages, groups and modules
-import doc::doc_down # Display mdoc
 import catalog
 
+import templates_html
+
 # A HTML page in a catalog
 #
 # This is just a template with the header pre-filled and the footer injected at rendering.
index ab16edc..4ba30f5 100644 (file)
@@ -17,7 +17,6 @@ module nitweb
 
 import frontend
 import doc::api
-import doc::doc_down
 
 redef class ToolContext