[dia] Implementation of javascript code generation.
- From: Hans Breuer <hans src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [dia] Implementation of javascript code generation.
- Date: Sun, 2 Sep 2012 18:09:17 +0000 (UTC)
commit eebd028fd80b37d01bc97cc312e66f9dcaebea7f
Author: Sullivan MATAS <smatas viotech net>
Date: Wed Aug 29 13:39:38 2012 +0200
Implementation of javascript code generation.
Add the JsRenderer class in plug-ins/python/codegen.py providing
javascript 'objects' generation. All attributes and methods are
public. "use strict" is automatically added to all methods.
This module was needed for implementing a complex media center
in javascript.
Signed-off-by: Hans Breuer <hans breuer org>
plug-ins/python/codegen.py | 70 ++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 70 insertions(+), 0 deletions(-)
---
diff --git a/plug-ins/python/codegen.py b/plug-ins/python/codegen.py
index 3face4b..60b4ed5 100644
--- a/plug-ins/python/codegen.py
+++ b/plug-ins/python/codegen.py
@@ -211,6 +211,75 @@ class CxxRenderer(ObjRenderer) :
ObjRenderer.end_render(self)
# #############################################################################
+# JsRenderer: export Dia UML diagram to Object style ECMA5 javascript code.
+#
+# Features:
+# - All methods and attributes are public.
+# - Inheriting from one class.
+# - Comments for classes, attributes and operations are supported.
+# - Method parameter default values are supported.
+# - Order of attributes and operations is preserved.
+# - Auto generate type check.
+#
+class JsRenderer(ObjRenderer) :
+ def __init__(self) :
+ ObjRenderer.__init__(self)
+ def end_render(self) :
+ f = open(self.filename, "w")
+ f.write("/* generated by dia/codegen.py */\n\n")
+ for sk in self.klasses.keys() :
+ f.write("// class definition : %s\n" % (sk, ))
+ parents = self.klasses[sk].parents
+ #add inheritance
+ if parents:
+ f.write("// Inherits from %s.\n" % (parents[0], ))
+ f.write("%s.prototype = new %s();\n" % (sk, parents[0]))
+ f.write("%s.prototype.constructor = %s;\n\n" % (sk, sk))
+ f.write ("function %s () {\n" % (sk,))
+ k = self.klasses[sk]
+ if len(k.comment) > 0 :
+ f.write ("\n\t/*" + k.comment + "*/\n")
+ #use strict
+ f.write("\t\"use strict\";\n")
+ if k.attributes:
+ f.write("\n")
+ #all attributes are public
+ for sa, attr in k.attributes :
+ value = attr[2] == "" and "null" or attr[2]
+ f.write("\tthis.%s = %s;\n" % (sa, value))
+ #expected types checks (constructor)
+ if attr[0]:
+ f.write("\tif (typeof(this.%s) !== '%s') {\n" % (sa, attr[0]));
+ f.write("\t\tthrow \"Unexpected type '\"+typeof(this.%s)+\"' for attribute this.%s.\";\n" % (sa, sa))
+ f.write("\t}\n")
+ f.write("}\n\n")
+ #operations are defined out of class definition
+ #return the first item of given p (tuple) ie : parameter name
+ def p_name(p):
+ return p[0]
+ for so, op in k.operations :
+ # only parameter names needed
+ pars = ", ".join(map(p_name,op[2]))
+ f.write("%s.prototype.%s = function(%s) {\n" % (sk, so, pars))
+ if op[4]: f.write("\t/* %s */\n" % op[4])
+ f.write("\t\"use strict\";\n\n")
+ for p in op[2]:
+ #default values :
+ if len(p[2]) > 0 :
+ t = (p[0], p[0], p[2])
+ f.write("\tif (%s === undefined) {\n\t%s = %s;\n\t}\n" % t)
+ #expected types checks
+ if len(p[3]) > 0 :
+ f.write("\tif (typeof(%s) !== '%s') {\n" % (p[0], p[3]));
+ f.write("\t\tthrow \"Unexpected type '\"+typeof(%s)+\"' for parameter %s.\";\n" % (p[0], p[0]))
+ f.write("\t}\n");
+ f.write("\t// returns %s\n" % (op[0], ))
+ f.write("\treturn ;\n")
+ f.write("};\n\n")
+ f.close()
+ ObjRenderer.end_render(self)
+
+# #############################################################################
# PascalRenderer: export Dia UML diagram to Object Pascal (Free Pascal, Delphi)
#
# Please follow some "drawing guidelines" and "naming conventions" so that the
@@ -632,4 +701,5 @@ dia.register_export ("PyDia Code Generation (Python)", "py", PyRenderer())
dia.register_export ("PyDia Code Generation (C++)", "cxx", CxxRenderer())
dia.register_export ("PyDia Code Generation (Pascal)", "pas", PascalRenderer())
dia.register_export ("PyDia Code Generation (Java)", "java", JavaRenderer())
+dia.register_export ("PyDia Code Generation (JavaScript)", "js", JsRenderer())
dia.register_export ("PyDia Code Generation (PHP)", "php", PhpRenderer())
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]