fun seek(entry: String) do
if entry.is_empty then exit(0)
- var flag = false
+ var pager = new Pager
# seek return types
if entry.has_prefix("return:") then
var ret = entry.split_with(":")[1].replace(" ", "")
var matches = seek_returns(ret)
- if not matches.is_empty then
- flag = true
- props_fulldoc(matches)
- end
+ props_fulldoc(pager, matches)
else if entry.has_prefix("param:") then
var param = entry.split_with(":")[1].replace(" ", "")
var matches = seek_params(param)
- if not matches.is_empty then
- flag = true
- props_fulldoc(matches)
- end
+ props_fulldoc(pager, matches)
else
# seek for modules
var mmatches = new List[MModule]
for m in model.mmodules do
- if m.name == entry then
- flag = true
- mmatches.add(m)
- end
+ if m.name == entry then mmatches.add(m)
end
- if not mmatches.is_empty then modules_fulldoc(mmatches)
+ if not mmatches.is_empty then modules_fulldoc(pager, mmatches)
# seek for classes
var cmatches = new List[MClass]
for c in model.mclasses do
- if c.name == entry then
- flag = true
- cmatches.add(c)
- end
+ if c.name == entry then cmatches.add(c)
end
- if not cmatches.is_empty then classes_fulldoc(cmatches)
+ if not cmatches.is_empty then classes_fulldoc(pager, cmatches)
# seek for properties
var matches = new List[MProperty]
for p in model.mproperties do
- if p.name == entry then
- flag = true
- matches.add(p)
- end
+ if p.name == entry then matches.add(p)
end
- if not matches.is_empty then props_fulldoc(matches)
+ if not matches.is_empty then props_fulldoc(pager, matches)
end
# no matches
- if not flag then print "Nothing known about '{entry}'"
+ if pager.content.is_empty then
+ print "Nothing known about '{entry}'"
+ else
+ pager.render
+ end
if arguments.length == 1 then prompt
end
- private fun modules_fulldoc(mmodules: List[MModule]) do
- var pager = new Pager
+ private fun modules_fulldoc(pager: Pager, mmodules: List[MModule]) do
for mmodule in mmodules do
# name and prototype
pager.add("# {mmodule.namespace}\n".bold)
for comment in nmodule.n_moduledecl.n_doc.comment do pager.add(comment.green)
end
end
- pager.add("{mmodule.prototype}")
- pager.add_rule
+ pager.add("{mmodule.prototype}\n")
# imports
var msorter = new MModuleNameSorter
var ms = mmodule.in_importation.greaters.to_a
if ms.length > 1 then
msorter.sort(ms)
- pager.add("# imported modules".bold)
+ pager.add("## imported modules".bold)
pager.addn("\t")
for i in [0..ms.length[ do
if ms[i] == mmodule then continue
ms = mmodule.in_importation.smallers.to_a
if ms.length > 1 then
msorter.sort(ms)
- pager.add("# known modules".bold)
+ pager.add("## known modules".bold)
pager.addn("\t")
for i in [0..ms.length[ do
if ms[i] == mmodule then continue
# intro
if not intro_mclassdefs.is_empty then
sorter.sort(intro_mclassdefs)
- pager.add("\n# introduced classes".bold)
+ pager.add("\n## introduced classes".bold)
for mclassdef in intro_mclassdefs do
pager.add("")
var nclass = mbuilder.mclassdef2nclassdef[mclassdef]
# redefs
if not redef_mclassdefs.is_empty then
sorter.sort(redef_mclassdefs)
- pager.add("\n# refined classes".bold)
+ pager.add("\n## refined classes".bold)
for mclassdef in redef_mclassdefs do
pager.add("")
#TODO intro comment?
end
end
#TODO add inherited classes?
+ pager.add_rule
end
- pager.render
end
- private fun classes_fulldoc(mclasses: List[MClass]) do
- var pager = new Pager
+ private fun classes_fulldoc(pager: Pager, mclasses: List[MClass]) do
for mclass in mclasses do
# title
pager.add("# {mclass.namespace}\n".bold)
pager.addn(supers[i].name)
if i < mclass.in_hierarchy(mainmodule).direct_greaters.length -1 then pager.addn(", ")
end
- pager.add("")
+ pager.add("\n")
end
- pager.add_rule
# formal types
if not mclass.parameter_types.is_empty then
- pager.add("# formal types".bold)
+ pager.add("## formal types".bold)
for ft, bound in mclass.parameter_types do
pager.add("")
pager.add("\t{ft.to_s.green}: {bound}")
sorted.add_all(list)
var sorter = new MPropDefNameSorter
sorter.sort(sorted)
- pager.add("# {cat}".bold)
+ pager.add("## {cat}".bold)
for mpropdef in sorted do
pager.add("")
if mbuilder.mpropdef2npropdef.has_key(mpropdef) then
end
end
if not inhs.is_empty then
- pager.add("# inherited properties".bold)
+ pager.add("## inherited properties".bold)
for a, ps in inhs do
pager.add("\n\tfrom {a.namespace.bold}: {ps.join(", ")}")
end
end
+ pager.add_rule
end
- pager.render
end
- private fun props_fulldoc(raw_mprops: List[MProperty]) do
- var pager = new Pager
+ private fun props_fulldoc(pager: Pager, raw_mprops: List[MProperty]) do
# group by module
var cats = new HashMap[MModule, Array[MProperty]]
for mprop in raw_mprops do
sorted.add_all(cats.keys)
sorter.sort(sorted)
# display
- for mclass in sorted do
- var mprops = cats[mclass]
- pager.add("# {mclass.namespace}".bold)
+ for mmodule in sorted do
+ var mprops = cats[mmodule]
+ pager.add("# matches in module {mmodule.namespace.bold}")
var sorterp = new MPropertyNameSorter
sorterp.sort(mprops)
for mprop in mprops do
end
end
end
+ pager.add_rule
end
- pager.render
end
private fun seek_returns(entry: String): List[MProperty] do