class DocCommandParser
# List of allowed command names for this parser
- var allowed_commands: Array[String] = [ "doc", "comment", "list", "param",
- "return", "new", "call", "code", "graph"] is writable
+ var allowed_commands: Array[String] = [ "doc", "list", "param", "return",
+ "new", "call", "code", "graph"] is writable
# Parse `string` as a DocCommand
#
# ~~~
# var parser = new DocCommandParser
#
- # var command = parser.parse("comment: core::Array")
+ # var command = parser.parse("doc: core::Array")
# assert command isa CommentCommand
# assert command.arg == "core::Array"
#
#
# You must redefine this method to add new custom commands.
fun new_command(name, string: String): nullable DocCommand do
- if name == "doc" then return new ArticleCommand(string)
- if name == "comment" then return new CommentCommand(string)
+ if name == "doc" then return new CommentCommand(string)
if name == "list" then return new ListCommand(string)
if name == "param" then return new ParamCommand(string)
if name == "return" then return new ReturnCommand(string)
# A `DocCommand` that includes the documentation article of a `MEntity`.
#
# Syntax: `doc: MEntity::name`.
-class ArticleCommand
- super DocCommand
-
- redef var name = "doc"
-end
-
-# A `DocCommand` that includes the MDoc of a `MEntity`.
-#
-# Syntax: `comment: MEntity::name`.
class CommentCommand
super DocCommand
- redef var name = "comment"
+ redef var name = "doc"
end
# A `DocCommand` that includes a list of something.
end
end
-# A query to search a Nitdoc documentation page by its name.
-redef class ArticleCommand
- redef fun perform(nitx, doc) do
- var res = new Array[NitxMatch]
- var name = arg
- for page in doc.pages.values do
- if name == "*" then # FIXME dev only
- res.add new PageMatch(self, page)
- else if page.title == name then
- res.add new PageMatch(self, page)
- else if page isa MEntityPage and page.mentity.cs_namespace == name then
- res.add new PageMatch(self, page)
- end
- end
- return res
- end
-
- redef fun make_results(nitx, results, suggest) do
- var len = results.length
- # FIXME how to render the pager for one worded namespaces like "core"?
- if len == 1 then
- var page = results.first.as(PageMatch).page
- var pager = new Pager
- pager.add page.write_to_string
- pager.render
- return page
- else
- return super
- end
- end
-end
-
# A match between a `DocPage` and a `MEntity`.
class PageMatch
super NitxMatch
fun render(v: ReadmeMdEmitter, token: TokenWikiLink) is abstract
end
-redef class ArticleCommand
+redef class CommentCommand
redef fun render(v, token) do
var string = args.first
var res = v.find_mentities(string)
fun test_no_opts is test do
var command = parser.parse("doc: core::Array")
- assert command isa ArticleCommand
+ assert command isa CommentCommand
assert command.name == "doc"
assert command.arg == "core::Array"
assert parser.errors.is_empty
fun test_opts_empty is test do
var command = parser.parse("doc: core::Array | ")
- assert command isa ArticleCommand
+ assert command isa CommentCommand
assert command.name == "doc"
assert command.arg == "core::Array"
assert parser.errors.is_empty
fun test_1_opt is test do
var command = parser.parse("doc: core::Array | opt1: val1 ")
- assert command isa ArticleCommand
+ assert command isa CommentCommand
assert command.name == "doc"
assert command.arg == "core::Array"
assert command.opts.length == 1
fun test_2_opts is test do
var command = parser.parse("doc: core::Array | opt1: val1 , opt2: val2, ")
- assert command isa ArticleCommand
+ assert command isa CommentCommand
assert command.name == "doc"
assert command.arg == "core::Array"
assert command.opts.length == 2
fun test_empty_opt_name is test do
var command = parser.parse("doc: core::Array | opt1: val1 , :")
- assert command isa ArticleCommand
+ assert command isa CommentCommand
assert command.name == "doc"
assert command.arg == "core::Array"
assert command.opts.length == 1
fun test_empty_opt_value is test do
var command = parser.parse("doc: core::Array | opt1: , opt2: val2, ")
- assert command isa ArticleCommand
+ assert command isa CommentCommand
assert command.name == "doc"
assert command.arg == "core::Array"
assert command.opts.length == 2
fun test_empty_opt_value2 is test do
var command = parser.parse("doc: core::Array | opt1")
- assert command isa ArticleCommand
+ assert command isa CommentCommand
assert command.name == "doc"
assert command.arg == "core::Array"
assert command.opts.length == 1
fun test_empty_opt_value3 is test do
var command = parser.parse("doc: core::Array | opt1, opt2: val2")
- assert command isa ArticleCommand
+ assert command isa CommentCommand
assert command.name == "doc"
assert command.arg == "core::Array"
assert command.opts.length == 2
end
end
-redef class ArticleCommand
+redef class CommentCommand
redef fun render(v, token, model) do
var name = arg
var mentity = v.find_mentity(model, name)
return
end
v.add "<h3>"
- v.write_mentity_link(mentity)
- v.add " - "
- v.emit_text mdoc.synopsis
+ if not opts.has_key("no-link") then
+ v.write_mentity_link(mentity)
+ end
+ if not opts.has_key("no-link") and not opts.has_key("no-synopsis") then
+ v.add " - "
+ end
+ if not opts.has_key("no-synopsis") then
+ v.emit_text mdoc.html_synopsis.write_to_string
+ end
v.add "</h3>"
- v.add v.processor.process(mdoc.comment).write_to_string
- end
-end
-
-redef class CommentCommand
- redef fun render(v, token, model) do
- var name = arg
- var mentity = v.find_mentity(model, name)
- if mentity == null then return
- var mdoc = mentity.mdoc_or_fallback
- if mdoc == null then
- v.write_warning("no MDoc for mentity `{name}`")
- return
+ if not opts.has_key("no-comment") then
+ v.add v.processor.process(mdoc.comment).write_to_string
end
- v.add v.processor.process(mdoc.comment).write_to_string
end
end