Esempio n. 1
0
    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)
Esempio n. 2
0
 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])
Esempio n. 3
0
	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)
Esempio n. 4
0
 def mangled_name(self):
     return mangle_package(get_package(self.name)) + '.' + self.class_name