Exemplo n.º 1
0
 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)
Exemplo n.º 2
0
		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])
Exemplo n.º 3
0
	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)
Exemplo n.º 4
0
	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
Exemplo n.º 5
0
	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