This file is indexed.

/usr/lib/python2.7/dist-packages/uniconvertor/app/Graphics/clone.py is in python-uniconvertor 1.1.5-2.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
# -*- coding: utf-8 -*-

# Copyright (C) 2003-2006 by Igor E. Novikov
# Copyright (C) 1998, 1999 by Bernhard Herzog
#
# This library is covered by GNU Library General Public License.
# For more info see COPYRIGHTS file in sK1 root directory.

#
#	The Clone Object
#

#from traceback import print_stack

from app import Translation, NullPoint, Trafo
from app import PointType, Undo, NullUndo
from app.conf.const import CHANGED
from base import Bounded, HierarchyNode



_clone_registry = {}

def _register_clone(original):
	original = id(original)
	_clone_registry[original] = _clone_registry.get(original, 0) + 1

def _unregister_clone(original):
	original = id(original)
	_clone_registry[original]= _clone_registry[original] - 1
	if _clone_registry[original] == 0:
		del _clone_registry[original]

class Clone(Bounded, HierarchyNode):

	is_Clone = 1

	def __init__(self, original = None, duplicate = None):
		HierarchyNode.__init__(self, duplicate = duplicate)
		if original is not None and original.is_Clone:
			duplicate = original
			original = None
		if duplicate is not None:
			self._original = duplicate._original
			self._center = duplicate._center
			self._offset = duplicate._offset
		else:
			self._original = original
			self._center = self._original.coord_rect.center()
			self._offset = NullPoint
		self.register()

	def register(self):
		_register_clone(self._original)
		self._original.Subscribe(CHANGED, self.orig_changed)

	def unregister(self):
		self._original.Unsubscribe(CHANGED, self.orig_changed)
		_unregister_clone(self._original)

	def __getattr__(self, attr):
		if self._lazy_attrs.has_key(attr):
			return Bounded.__getattr__(self, attr)
		#print 'Clone.__getattr__: from original:', attr
		#if attr in ('__nonzero__', 'document'):
		#    print_stack()
		return getattr(self._original, attr)

	def update_rects(self):
		off = self._offset
		self.bounding_rect = self._original.bounding_rect.translated(off)
		self.coord_rect = self._original.coord_rect.translated(off)

	def Translate(self, offset):
		self._offset = self._offset + offset
		self.del_lazy_attrs()
		return self.Translate, -offset

	def _set_offset(self, offset):
		undo = (self._set_offset, self._offset)
		self._offset = offset
		self.del_lazy_attrs()
		return undo

	def offset_center(self, offset):
		undo = (self.offset_center, -offset)
		self._center = self._center + offset
		return undo

	def Transform(self, trafo):
		center = self._center + self._offset
		offset = trafo(center) - center
		if self.document is not None:
			self.document.AddAfterHandler(_transform, (self._original, trafo.matrix()), -1)
		return self.offset_center(offset)

	def orig_changed(self, *args):
		if self.document is not None:
			self.document.AddClearRect(self.bounding_rect)
		self.del_lazy_attrs()
		center = self._center
		self._center = self._original.coord_rect.center()
		self._offset = self._offset + center - self._center
		if self.document is not None:
			self.document.AddClearRect(self.bounding_rect)

	def DrawShape(self, device, rect = None):
		device.PushTrafo()
		try:
			device.Translate(self._offset)
			self._original.DrawShape(device, rect)
		finally:
			device.PopTrafo()

	def Hit(self, p, rect, device):
		off = -self._offset
		return self._original.Hit(p + off, rect.translated(off), device)


	def Info(self):
		return 'Clone of ' + self._original.Info()


	# overwrite Selectable methods
	def SelectSubobject(self, p, rect, device, path = None, *rest):
		return self

	def GetObjectHandle(self, multiple):
		trafo = Translation(self._offset)
		handle = self._original.GetObjectHandle(multiple)
		if type(handle) == PointType:
			return trafo(handle)
		else:
			return map(trafo, handle)

	# overwrite Bounded methods
	def LayoutPoint(self):
		return self._original.LayoutPoint() + self._offset

	def GetSnapPoints(self):
		return map(Translation(self._offset), self._original.GetSnapPoints())


def _transform(original, matrix):
	trafo = apply(Trafo, matrix)
	undo = original.Transform(trafo)
	doc = original.document
	doc.AddUndo((_undo, doc, [undo]))

def _after_handler(undo, list):
	list[0] = Undo(undo)

def _undo(doc, undo):
	list = [NullUndo]
	doc.AddAfterHandler(_after_handler, (undo[0], list), -1)
	return (_undo, doc, list)

def CreateClone(object):
	clone = Clone(object)
	undo = object.parent.ReplaceChild(object, clone)
	return clone.Duplicate(), undo