def scan_using(self, code): for m in generator.used_re.finditer(code): name = m.group(1).strip() package, component_name = split_name(name) package = escape_package(package) self.used_components.add(name) self.used_packages.add(package)
def check(path, packages): for ns in packages.iterkeys(): if not ns: raise Exception('internal bug, empty name in packages') package = escape_package(path + "." + ns) r.append("if (!%s) /** @const */ %s = {}" %(package, package)) check(package, packages[ns])
def generate_import(self, name, code): r = [] safe_name = name if safe_name.endswith(".js"): safe_name = safe_name[:-3] safe_name = escape_package(safe_name.replace('/', '.')) code = "//=====[import %s]=====================\n\n" %name + code r.append("_globals.%s = %s()" %(safe_name, self.wrap(code, name == "core.core"))) #hack: core.core use _globals as its exports return "\n".join(r)
def generate_components(self): #finding explicit @used declarations in code for name, code in self.imports.iteritems(): for m in generator.used_re.finditer(code): name = m.group(1).strip() package, component_name = split_name(name) package = escape_package(package) self.used_components.add(name) self.used_packages.add(package) generated = set([root_type]) queue = ['core.Context'] code, base_class = {}, {} while queue or self.used_components: for component in self.used_components: if component not in generated: queue.append(component) self.used_components = set() if queue: name = queue.pop(0) component = self.components[name] base_type = self.find_component(component.package, component.component.name) base_class[name] = base_type code[name] = self.generate_component(component) generated.add(name) r = '' order = [] visited = set([root_type]) def visit(type): if type in visited: return visit(base_class[type]) order.append(type) visited.add(type) for type in base_class.iterkeys(): visit(type) for type in order: r += code[type] return r
def add_component(self, name, component, declaration): if name in self.components: raise Exception("duplicate component " + name) package, component_name = split_name(name) package = escape_package(package) if not declaration: name = "%s.Ui%s" %(package, component_name[0].upper() + component_name[1:]) self.used_components.add(name) self.used_packages.add(package) self.startup.append("\tcontext.start(new qml.%s(context))" %name) self.startup.append("\tcontext.run()") else: name = package + '.' + component_name if package not in self.packages: self.packages[package] = set() self.packages[package].add(component_name) gen = component_generator(self.ns, name, component, True) self.components[name] = gen