示例#1
0
 def presentFrag(self, node):
     name = s4frag(s4ns(node.__class__.__module__), ".",
                   s4fragname(node.__class__.__qualname__))
     if len(node):
         if not self._inattr:  # skip "(" for attributes, they will be added by presentElement()
             yield Line(node, node.startloc, self._path[:],
                        astyle.style_default(self._indent(), name, "("))
         self._level += 1
         self._path.append(0)
         for (i, child) in enumerate(node):
             if i == len(node) - 1:
                 yield from child.present(self)
             else:
                 lines = list(child.present(self))
                 for (j, line) in enumerate(lines):
                     if j == len(lines) - 1:
                         line.content += ","
                     yield line
             self._path[-1] += 1
         self._level -= 1
         self._path.pop()
         if not self._inattr:
             yield Line(node, node.startloc, self._path[:],
                        astyle.style_default(self._indent(), ")"))
     else:
         if not self._inattr:
             yield Line(node, node.startloc, self._path[:],
                        astyle.style_default(self._indent(), name, "()"))
示例#2
0
 def copyone(urlread, urlwrite):
     strurlread = str(urlread)
     if urlread.isdir():
         if args.recursive:
             for u in urlread.walkfiles(include=args.include,
                                        exclude=args.exclude,
                                        enterdir=args.enterdir,
                                        skipdir=args.skipdir,
                                        ignorecase=args.ignorecase):
                 copyone(urlread / u, urlwrite / u)
         else:
             if args.verbose:
                 msg = astyle.style_default(
                     "ucp: ", astyle.style_url(strurlread),
                     astyle.style_warn(" (directory skipped)"))
                 stderr.writeln(msg)
     else:
         if args.verbose:
             msg = astyle.style_default("ucp: ",
                                        astyle.style_url(strurlread),
                                        " -> ")
             stderr.write(msg)
         try:
             with contextlib.closing(urlread.open("rb")) as fileread:
                 with contextlib.closing(urlwrite.open("wb")) as filewrite:
                     size = 0
                     while True:
                         data = fileread.read(262144)
                         if data:
                             filewrite.write(data)
                             size += len(data)
                         else:
                             break
             if user or group:
                 urlwrite.chown(user, group)
         except Exception as exc:
             if args.ignoreerrors:
                 if args.verbose:
                     exctype = misc.format_class(exc)
                     excmsg = str(exc).replace("\n", " ").strip()
                     msg = astyle.style_error(
                         f" (failed with {exctype}: {excmsg})")
                     stderr.writeln(msg)
             else:
                 raise
         else:
             if args.verbose:
                 msg = astyle.style_default(astyle.style_url(str(urlwrite)),
                                            f" ({size:,} bytes)")
                 stderr.writeln(msg)
示例#3
0
    def presentAttrs(self, node):
        name = s4attrs(s4ns(node.__class__.__module__), ".",
                       s4attrsname(node.__class__.__qualname__))
        if len(node):
            globalattrs = {}
            localattrs = {}
            for ((attrxmlns, attrname), attrvalue) in node.items():
                if attrxmlns is None:
                    localattrs[attrname] = attrvalue
                else:
                    globalattrs[(attrxmlns, attrname)] = attrvalue

            yield Line(node, node.startloc, self._path[:],
                       astyle.style_default(self._indent(), name, "("))
            self._level += 1
            if globalattrs:
                yield Line(node, node.startloc, self._path[:],
                           astyle.style_default(self._indent(), "{"))
                for (i, ((attrxmlns, attrname),
                         attrvalue)) in enumerate(globalattrs.items()):
                    self._path.append(attrname)
                    attrname = astyle.style_default("{",
                                                    s4ns(attrname[0]), ".",
                                                    s4attrname(attrname[1]))
                    self._inattr += 1
                    attrtext = self._formatattrvalue(attrvalue)
                    self._inattr -= 1
                    self._level += 1
                    line = astyle.style_default(self._indent(), attrname, ": ",
                                                s4attrvalue(attrtext))
                    if i != len(globalattrs) or not localattrs:
                        line += ","
                    yield Line(attrvalue, attrvalue.startloc, self._path[:],
                               line)
                    self._path.pop()
                    self._level -= 1
                line = astyle.style_default(self._indent(), "}")
                if localattrs:
                    line += ","
                yield Line(node, node.startloc, self._path[:], line)
            for (i, (attrname, attrvalue)) in enumerate(localattrs.items()):
                self._path.append(attrname)
                self._inattr += 1
                attrtext = self._formatattrvalue(attrvalue)
                self._inattr -= 1
                line = astyle.style_default(self._indent(),
                                            s4attrname(attrname), "=",
                                            s4attrvalue(attrtext))
                if i != len(localattrs) - 1:
                    line += ","
                yield Line(attrvalue, attrvalue.startloc, self._path[:], line)
                self._path.pop()
            self._level -= 1
            yield Line(node, node.endloc, self._path[:],
                       astyle.style_default(self._indent(), ")"))
        else:
            yield Line(node, node.startloc, self._path[:],
                       astyle.style_default(self._indent(), name, "()"))
示例#4
0
 def printone(url):
     if args.long:
         sep = style_pad(args.separator)
         stat = url.stat()
         owner = url.owner()
         group = url.group()
         mtime = datetime.datetime.fromtimestamp(
             stat.st_mtime).strftime("%Y-%m-%d %H:%M:%S")
         mode = "".join(
             [text[bool(stat.st_mode & bit)] for (bit, text) in modedata])
         size = stat.st_size
         if args.human:
             s = "BKMGTP"
             for c in s:
                 if size < 2048:
                     if c == "B":
                         size = str(int(size))
                     else:
                         size = astyle.style_default(
                             str(int(size)), style_sizeunit(c))
                     break
                 size /= 1024.
         stdout.write(mode, sep, rpad(owner, 8), sep, rpad(group, 8), sep,
                      lpad(size, 5 if args.human else 12), sep,
                      lpad(stat.st_nlink, 3), sep, mtime, sep)
     if url.isdir():
         stdout.writeln(style_dir(str(url)))
     else:
         stdout.writeln(style_file(str(url)))
示例#5
0
 def presentDocType(self, node):
     name = s4doctype(s4ns(node.__class__.__module__), ".",
                      node.__class__.__qualname__)
     yield Line(
         node, node.startloc, self._path[:],
         astyle.style_default(self._indent(), name, "(",
                              s4doctypetext(repr(self._text(node.content))),
                              ")"))
示例#6
0
 def presentProcInst(self, node):
     name = s4procinst(s4ns(node.__class__.__module__), ".",
                       s4procinsttarget(node.__class__.__qualname__))
     yield Line(
         node, node.startloc, self._path[:],
         astyle.style_default(
             self._indent(), name, "(",
             s4procinstcontent(repr(self._text(node.content))), ")"))
示例#7
0
 def presentText(self, node):
     if self._inattr:
         formatter = s4attrvalue
     else:
         formatter = s4text
     yield Line(
         node, node.startloc, self._path[:],
         astyle.style_default(self._indent(),
                              formatter(repr(self._text(node.content)))))
示例#8
0
 def lpad(s, l):
     meas = str(s)
     if not isinstance(s, (str, astyle.Text)):
         s = str(s)
     if len(meas) < l:
         size = l - len(meas)
         psize = len(args.padding)
         repeats = (size + psize - 1) // psize
         padding = (args.padding * repeats)[:size]
         return astyle.style_default(style_pad(padding), s)
     return s
	def copyone(urlread, urlwrite):
		strurlread = str(urlread)
		if urlread.isdir():
			if args.recursive:
				for u in urlread.walkfiles(include=args.include, exclude=args.exclude, enterdir=args.enterdir, skipdir=args.skipdir, ignorecase=args.ignorecase):
					copyone(urlread/u, urlwrite/u)
			else:
				if args.verbose:
					msg = astyle.style_default("ucp: ", astyle.style_url(strurlread), astyle.style_warn(" (directory skipped)"))
					stderr.writeln(msg)
		else:
			if args.verbose:
				msg = astyle.style_default("ucp: ", astyle.style_url(strurlread), " -> ")
				stderr.write(msg)
			try:
				with contextlib.closing(urlread.open("rb")) as fileread:
					with contextlib.closing(urlwrite.open("wb")) as filewrite:
						size = 0
						while True:
							data = fileread.read(262144)
							if data:
								filewrite.write(data)
								size += len(data)
							else:
								break
				if user or group:
					urlwrite.chown(user, group)
			except Exception as exc:
				if args.ignoreerrors:
					if args.verbose:
						exctype = misc.format_class(exc)
						excmsg = str(exc).replace("\n", " ").strip()
						msg = astyle.style_error(f" (failed with {exctype}: {excmsg})")
						stderr.writeln(msg)
				else:
					raise
			else:
				if args.verbose:
					msg = astyle.style_default(astyle.style_url(str(urlwrite)), f" ({size:,} bytes)")
					stderr.writeln(msg)
	def presentFrag(self, node):
		name = s4frag(s4ns(node.__class__.__module__), ".", s4fragname(node.__class__.__qualname__))
		if len(node):
			if not self._inattr: # skip "(" for attributes, they will be added by presentElement()
				yield Line(node, node.startloc, self._path[:], astyle.style_default(self._indent(), name, "("))
			self._level += 1
			self._path.append(0)
			for (i, child) in enumerate(node):
				if i == len(node)-1:
					yield from child.present(self)
				else:
					lines = list(child.present(self))
					for (j, line) in enumerate(lines):
						if j == len(lines)-1:
							line.content += ","
						yield line
				self._path[-1] += 1
			self._level -= 1
			self._path.pop()
			if not self._inattr:
				yield Line(node, node.startloc, self._path[:], astyle.style_default(self._indent(), ")"))
		else:
			if not self._inattr:
				yield Line(node, node.startloc, self._path[:], astyle.style_default(self._indent(), name, "()"))
	def presentAttrs(self, node):
		name = s4attrs(s4ns(node.__class__.__module__), ".", s4attrsname(node.__class__.__qualname__))
		if len(node):
			globalattrs = {}
			localattrs = {}
			for ((attrxmlns, attrname), attrvalue) in node.items():
				if attrxmlns is None:
					localattrs[attrname] = attrvalue
				else:
					globalattrs[(attrxmlns, attrname)] = attrvalue

			yield Line(node, node.startloc, self._path[:], astyle.style_default(self._indent(), name, "("))
			self._level += 1
			if globalattrs:
				yield Line(node, node.startloc, self._path[:], astyle.style_default(self._indent(), "{"))
				for (i, ((attrxmlns, attrname), attrvalue)) in enumerate(globalattrs.items()):
					self._path.append(attrname)
					attrname = astyle.style_default("{", s4ns(attrname[0]), ".", s4attrname(attrname[1]))
					self._inattr += 1
					attrtext = self._formatattrvalue(attrvalue)
					self._inattr -= 1
					self._level += 1
					line = astyle.style_default(self._indent(), attrname, ": ", s4attrvalue(attrtext))
					if i != len(globalattrs) or not localattrs:
						line += ","
					yield Line(attrvalue, attrvalue.startloc, self._path[:], line)
					self._path.pop()
					self._level -= 1
				line = astyle.style_default(self._indent(), "}")
				if localattrs:
					line += ","
				yield Line(node, node.startloc, self._path[:], line)
			for (i, (attrname, attrvalue)) in enumerate(localattrs.items()):
				self._path.append(attrname)
				self._inattr += 1
				attrtext = self._formatattrvalue(attrvalue)
				self._inattr -= 1
				line = astyle.style_default(self._indent(), s4attrname(attrname), "=", s4attrvalue(attrtext))
				if i != len(localattrs)-1:
					line += ","
				yield Line(attrvalue, attrvalue.startloc, self._path[:], line)
				self._path.pop()
			self._level -= 1
			yield Line(node, node.endloc, self._path[:], astyle.style_default(self._indent(), ")"))
		else:
			yield Line(node, node.startloc, self._path[:], astyle.style_default(self._indent(), name, "()"))
	def presentDocType(self, node):
		name = s4doctype(s4ns(node.__class__.__module__), ".", node.__class__.__qualname__)
		yield Line(node, node.startloc, self._path[:], astyle.style_default(self._indent(), name, "(", s4doctypetext(repr(self._text(node.content))), ")"))
	def presentProcInst(self, node):
		name = s4procinst(s4ns(node.__class__.__module__), ".", s4procinsttarget(node.__class__.__qualname__))
		yield Line(node, node.startloc, self._path[:], astyle.style_default(self._indent(), name, "(", s4procinstcontent(repr(self._text(node.content))), ")"))
	def presentEntity(self, node):
		name = s4entity(s4ns(node.__class__.__module__), ".", s4entityname(node.__class__.__qualname__))
		yield Line(node, node.startloc, self._path[:], astyle.style_default(self._indent(), name, "()"))
	def presentText(self, node):
		if self._inattr:
			formatter = s4attrvalue
		else:
			formatter = s4text
		yield Line(node, node.startloc, self._path[:], astyle.style_default(self._indent(), formatter(repr(self._text(node.content)))))
	def presentElement(self, node):
		name = s4element(s4ns(node.__class__.__module__), ".", s4elementname(node.__class__.__qualname__))
		if len(node.content) or len(node.attrs):
			yield Line(node, node.startloc, self._path[:], astyle.style_default(self._indent(), name, "("))
			self._level += 1
			self._path.append(0)
			for (i, child) in enumerate(node):
				if i == len(node)-1 and not node.attrs:
					yield from child.present(self)
				else:
					lines = list(child.present(self))
					for (j, line) in enumerate(lines):
						if j == len(lines)-1:
							line.content += ","
						yield line
				self._path[-1] += 1
			self._path.pop()

			pyattrs = []
			otherattrs = []
			for attrvalue in node.attrs.values():
				if node.attrs.isdeclared(attrvalue):
					pyattrs.append((attrvalue.__class__.__name__, attrvalue))
				elif attrvalue.__class__ is xsc.Attr:
					if attrvalue.xmlns is None:
						otherattrs.append((repr(attrvalue.xmlname), attrvalue))
					else:
						otherattrs.append((repr(f"{{{attrvalue.xmlns}}}{attrvalue.xmlname}"), attrvalue))
				else:
					otherattrs.append((f"{attrvalue.__class__.__module__}.{attrvalue.__class__.__qualname__}", attrvalue))

			if otherattrs:
				yield Line(node.attrs, node.attrs.startloc, self._path[:], astyle.style_default(self._indent(), "{"))
				for (i, (attrname, attrvalue)) in enumerate(otherattrs):
					self._path.append(attrname)
					attrname = astyle.style_default(attrname)
					self._inattr += 1
					attrtext = self._formatattrvalue(attrvalue)
					self._inattr -= 1
					self._level += 1
					line = astyle.style_default(self._indent(), attrname, ": ", s4attrvalue(attrtext))
					if i != len(otherattrs) or not pyattrs:
						line += ","
					yield Line(attrvalue, attrvalue.startloc, self._path[:], line)
					self._path.pop()
					self._level -= 1
				line = astyle.style_default(self._indent(), "}")
				if pyattrs:
					line += ","
				yield Line(node.attrs, node.attrs.startloc, self._path[:], line)
			for (i, (pyname, attrvalue)) in enumerate(pyattrs):
				self._inattr += 1
				attrtext = self._formatattrvalue(attrvalue)
				self._inattr -= 1
				line = astyle.style_default(self._indent(), s4attrname(pyname), "=", s4attrvalue(attrtext))
				if i != len(pyattrs)-1:
					line += ","
				self._path.append(attrvalue.xmlname)
				yield Line(attrvalue, attrvalue.startloc, self._path[:], line)
				self._path.pop()
			self._level -= 1
			yield Line(node, node.endloc, self._path[:], astyle.style_default(self._indent(), ")"))
		else:
			yield Line(node, node.startloc, self._path[:], astyle.style_default(self._indent(), name, "()"))
	def presentEntity(self, node):
		name = s4entity(s4ns(node.__class__.__module__), ".", s4entityname(node.__class__.__qualname__))
		yield Line(node, node.startloc, self._path[:], astyle.style_default(self._indent(), name, "()"))
	def presentElement(self, node):
		name = s4element(s4ns(node.__class__.__module__), ".", s4elementname(node.__class__.__qualname__))
		if len(node.content) or len(node.attrs):
			yield Line(node, node.startloc, self._path[:], astyle.style_default(self._indent(), name, "("))
			self._level += 1
			self._path.append(0)
			for (i, child) in enumerate(node):
				if i == len(node)-1 and not node.attrs:
					yield from child.present(self)
				else:
					lines = list(child.present(self))
					for (j, line) in enumerate(lines):
						if j == len(lines)-1:
							line.content += ","
						yield line
				self._path[-1] += 1
			self._path.pop()

			pyattrs = []
			otherattrs = []
			for attrvalue in sorted(node.attrs.values(), key=xsc.Attrs._sortorder):
				if node.attrs.isdeclared(attrvalue):
					pyattrs.append((attrvalue.__class__.__name__, attrvalue))
				elif attrvalue.__class__ is xsc.Attr:
					if attrvalue.xmlns is None:
						otherattrs.append((repr(attrvalue.xmlname), attrvalue))
					else:
						otherattrs.append((repr("{{{}}}{}".format(attrvalue.xmlns, attrvalue.xmlname)), attrvalue))
				else:
					otherattrs.append(("{}.{}".format(attrvalue.__class__.__module__, attrvalue.__class__.__qualname__), attrvalue))

			if otherattrs:
				yield Line(node.attrs, node.attrs.startloc, self._path[:], astyle.style_default(self._indent(), "{"))
				for (i, (attrname, attrvalue)) in enumerate(otherattrs):
					self._path.append(attrname)
					attrname = astyle.style_default(attrname)
					self._inattr += 1
					attrtext = self._formatattrvalue(attrvalue)
					self._inattr -= 1
					self._level += 1
					line = astyle.style_default(self._indent(), attrname, ": ", s4attrvalue(attrtext))
					if i != len(otherattrs) or not pyattrs:
						line += ","
					yield Line(attrvalue, attrvalue.startloc, self._path[:], line)
					self._path.pop()
					self._level -= 1
				line = astyle.style_default(self._indent(), "}")
				if pyattrs:
					line += ","
				yield Line(node.attrs, node.attrs.startloc, self._path[:], line)
			for (i, (pyname, attrvalue)) in enumerate(pyattrs):
				self._inattr += 1
				attrtext = self._formatattrvalue(attrvalue)
				self._inattr -= 1
				line = astyle.style_default(self._indent(), s4attrname(pyname), "=", s4attrvalue(attrtext))
				if i != len(pyattrs)-1:
					line += ","
				self._path.append(attrvalue.xmlname)
				yield Line(attrvalue, attrvalue.startloc, self._path[:], line)
				self._path.pop()
			self._level -= 1
			yield Line(node, node.endloc, self._path[:], astyle.style_default(self._indent(), ")"))
		else:
			yield Line(node, node.startloc, self._path[:], astyle.style_default(self._indent(), name, "()"))