def find_component(self, package, name, register_used=True, mangle=False, use_globals=False): if name == root_type_name: package = root_type_package #fixme: copypasted if mangle: package = mangle_package(root_type_package) if use_globals: package = "_globals." + package return package + "." + root_type_name original_name = name name_package, name = split_name(name) candidates = [] for package_name, components in self.packages.items(): if name in components: if name_package: #match package/subpackage if package_name != name_package and not package_name.endswith( '.' + name_package): continue candidates.append(package_name) if not candidates: raise Exception("component %s was not found" % (original_name)) if len(candidates) > 1: if name_package in candidates: #specified in name, e.g. core.Text package_name = name_package if package in candidates: #local to current package package_name = package elif 'core' in candidates: #implicit core lookup package_name = 'core' else: raise Exception("ambiguous component %s, you have to specify one of the packages explicitly: %s" \ %(name, " ".join(["%s.%s" %(p, name) for p in candidates]))) else: package_name = candidates[0] if register_used: self.used_components.add(package_name + '.' + name) if mangle: package_name = mangle_package(package_name) if use_globals: package_name = "_globals." + package_name return "%s.%s" % (package_name, name)
def check(path, packages): for ns in packages.keys(): if not ns: raise Exception('internal bug, empty name in packages') package = escape_package(path + "." + ns) r.append("if (!%s) /** @const */ %s = {}" % (package, package)) r.append("var %s = %s" % (mangle_package(package), package)) check(package, packages[ns])
def generate(self, registry): base_type = self.get_base_type(registry, mangle = True) r = [] r.append("\tvar %s = %s" %(self.base_local_name, base_type)) r.append("\tvar %s = %s.prototype" %(self.base_proto_name, self.base_local_name)) r.append("") r.append("/**\n * @constructor") r.append(" * @extends {%s}" %base_type) r.append(" */") r.append("\tvar %s = %s.%s = function(parent, row) {" %(self.local_name, mangle_package(self.package), self.class_name)) r.append("\t\t%s.apply(this, arguments)" % self.base_local_name) r.append(self.ctor) r.append("\t}") r.append("") return "\n".join(r)
def mangled_name(self): return mangle_package(get_package(self.name)) + '.' + self.class_name