X-Git-Url: http://nitlanguage.org diff --git a/lib/gen_nit.nit b/lib/gen_nit.nit index ea410a2..c80229b 100644 --- a/lib/gen_nit.nit +++ b/lib/gen_nit.nit @@ -15,6 +15,8 @@ # Support to generate and otherwise manipulate Nit code module gen_nit +import template + redef class Sys # Reserved keywords in the Nit language var keywords: Set[String] is lazy do return new HashSet[String].from([ @@ -39,3 +41,58 @@ redef class Sys var methods_in_pointer: Array[String] is lazy do return methods_in_object + [ "free"] end + +# Template of a Nit module to generate Nit code +class NitModule + super Template + + # Header on top of the module, usually the documentation + var header: nullable Writable = null is writable + + # The module's name + var name: Writable is writable + + # Annotations on the module declaration + var annotations = new Array[Writable] + + # Importation declarations + # + # Accepts two formats: + # * Module name only, short or qualified: `json`, `gamnit::flat`, etc. + # * Full importation declaration: `import json`, `private import gamnit::flat`, etc. + var imports = new Set[Writable] + + # Main content of this module + var content = new Array[Writable] + + redef fun rendering + do + var header = header + if header != null then add header + + var name = name + if annotations.is_empty then + add "module {name}\n\n" + else + add "module {name} is\n" + for annotation in annotations do add "\t{annotation}\n" + add "end\n\n" + end + + for i in imports do + if i.to_s.has("import ") then + add i + else + add "import " + add i + end + add "\n" + end + add "\n" + + for l in content do + add l + add "\n" + end + end +end