Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var meta = null;
- if (Context.getLocalClass().get().meta.has(":xml") == true) {
- meta = Context.getLocalClass().get().meta.extract(":xml");
- } else if (Context.getLocalClass().get().meta.has("xml") == true) {
- meta = Context.getLocalClass().get().meta.extract("xml");
- }
- if (meta != null) {
- var m = null;
- for (t in meta) {
- if (t.name == "xml" || t.name == ":xml") {
- m = t;
- break;
- }
- }
- var ctor = MacroHelpers.getConstructor(fields);
- if (MacroHelpers.hasSuperClass(Context.getLocalType(), "haxe.ui.core.Component") == false) {
- Context.error("Must have a superclass of haxe.ui.core.Component", Context.currentPos());
- }
- if (ctor == null) Context.error("A class building component must have a constructor", Context.currentPos());
- var xml = ExprTools.toString(m.params[0]);
- xml = StringTools.trim(xml.substring(1, xml.length - 1));
- xml = StringTools.replace(xml, "\\n", "");
- xml = StringTools.replace(xml, "\\r", "");
- xml = StringTools.replace(xml, "\\\"", "\"");
- xml = StringTools.replace(xml, "\\'", "'");
- ModuleMacros.populateClassMap();
- var namedComponents:Map<String, String> = new Map<String, String>();
- var expr = ComponentMacros.buildComponentFromString([], xml, namedComponents, null);
- switch (expr.expr) {
- case EBlock(el): el.push(Context.parseInlineString("addComponent(c0)", pos));
- case _:
- }
- var currentCreateChildrenFn = MacroHelpers.getFunction(fields, "createChildren");
- if (currentCreateChildrenFn != null) {
- MacroHelpers.appendLine(currentCreateChildrenFn, expr);
- } else {
- var code:String = "";
- code += "function() {\n";
- code += "super.createChildren();\n";
- code += ExprTools.toString(expr);
- code += "}";
- var access:Array<Access> = [APrivate, AOverride];
- MacroHelpers.addFunction("createChildren", Context.parseInlineString(code, pos), access, fields, pos);
- }
- var n = 1;
- for (id in namedComponents.keys()) {
- var safeId:String = StringUtil.capitalizeHyphens(id);
- var cls:String = namedComponents.get(id);
- var classArray:Array<String> = cls.split(".");
- var className = classArray.pop();
- var ttype = TPath( { pack : classArray, name : className, params : [], sub : null } );
- fields.push( { name : safeId, doc : null, meta : [], access : [APublic], kind : FVar(ttype, null), pos : pos } );
- var e:Expr = Context.parseInlineString('this.${safeId} = findComponent("${id}", ${cls}, true)', Context.currentPos());
- ctor.expr = switch(ctor.expr.expr) {
- case EBlock(el): macro $b{MacroHelpers.insertExpr(el, n, e)};
- case _: macro $b { MacroHelpers.insertExpr([ctor.expr], n, e) }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement