FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
unity-python/Lib/UserString.py at master · marios97/unity-python · GitHub
marios97
/
unity-python
Public
forked from
exodrifter/unity-python
Notifications
You must be signed in to change notification settings
Fork
0
Star
0
Code
Pull requests
0
Actions
Projects
Security and quality
0
Insights
Additional navigation options
Code
Pull requests
Actions
Projects
Security and quality
Insights
Expand file tree
Breadcrumbs
unity-python
/
Lib
/
UserString.py
Copy path
More file actions
More file actions
Latest commit
History
History
History
executable file
·
228 lines (214 loc) · 9.46 KB
Breadcrumbs
unity-python
/
Lib
/
UserString.py
Copy path
File metadata and controls
executable file
·
228 lines (214 loc) · 9.46 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
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
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
#!/usr/bin/env python
## vim:ts=4:et:nowrap
"""A user-defined wrapper around string objects
Note: string objects have grown methods in Python 1.6
This module requires Python 1.6 or later.
"""
import
sys
import
collections
__all__
=
[
"UserString"
,
"MutableString"
]
class
UserString
(
collections
.
Sequence
):
def
__init__
(
self
,
seq
):
if
isinstance
(
seq
,
basestring
):
self
.
data
=
seq
elif
isinstance
(
seq
,
UserString
):
self
.
data
=
seq
.
data
[:]
else
:
self
.
data
=
str
(
seq
)
def
__str__
(
self
):
return
str
(
self
.
data
)
def
__repr__
(
self
):
return
repr
(
self
.
data
)
def
__int__
(
self
):
return
int
(
self
.
data
)
def
__long__
(
self
):
return
long
(
self
.
data
)
def
__float__
(
self
):
return
float
(
self
.
data
)
def
__complex__
(
self
):
return
complex
(
self
.
data
)
def
__hash__
(
self
):
return
hash
(
self
.
data
)
def
__cmp__
(
self
,
string
):
if
isinstance
(
string
,
UserString
):
return
cmp
(
self
.
data
,
string
.
data
)
else
:
return
cmp
(
self
.
data
,
string
)
def
__contains__
(
self
,
char
):
return
char
in
self
.
data
def
__len__
(
self
):
return
len
(
self
.
data
)
def
__getitem__
(
self
,
index
):
return
self
.
__class__
(
self
.
data
[
index
])
def
__getslice__
(
self
,
start
,
end
):
start
=
max
(
start
,
0
);
end
=
max
(
end
,
0
)
return
self
.
__class__
(
self
.
data
[
start
:
end
])
def
__add__
(
self
,
other
):
if
isinstance
(
other
,
UserString
):
return
self
.
__class__
(
self
.
data
+
other
.
data
)
elif
isinstance
(
other
,
basestring
):
return
self
.
__class__
(
self
.
data
+
other
)
else
:
return
self
.
__class__
(
self
.
data
+
str
(
other
))
def
__radd__
(
self
,
other
):
if
isinstance
(
other
,
basestring
):
return
self
.
__class__
(
other
+
self
.
data
)
else
:
return
self
.
__class__
(
str
(
other
)
+
self
.
data
)
def
__mul__
(
self
,
n
):
return
self
.
__class__
(
self
.
data
*
n
)
__rmul__
=
__mul__
def
__mod__
(
self
,
args
):
return
self
.
__class__
(
self
.
data
%
args
)
# the following methods are defined in alphabetical order:
def
capitalize
(
self
):
return
self
.
__class__
(
self
.
data
.
capitalize
())
def
center
(
self
,
width
,
*
args
):
return
self
.
__class__
(
self
.
data
.
center
(
width
,
*
args
))
def
count
(
self
,
sub
,
start
=
0
,
end
=
sys
.
maxint
):
return
self
.
data
.
count
(
sub
,
start
,
end
)
def
decode
(
self
,
encoding
=
None
,
errors
=
None
):
# XXX improve this?
if
encoding
:
if
errors
:
return
self
.
__class__
(
self
.
data
.
decode
(
encoding
,
errors
))
else
:
return
self
.
__class__
(
self
.
data
.
decode
(
encoding
))
else
:
return
self
.
__class__
(
self
.
data
.
decode
())
def
encode
(
self
,
encoding
=
None
,
errors
=
None
):
# XXX improve this?
if
encoding
:
if
errors
:
return
self
.
__class__
(
self
.
data
.
encode
(
encoding
,
errors
))
else
:
return
self
.
__class__
(
self
.
data
.
encode
(
encoding
))
else
:
return
self
.
__class__
(
self
.
data
.
encode
())
def
endswith
(
self
,
suffix
,
start
=
0
,
end
=
sys
.
maxint
):
return
self
.
data
.
endswith
(
suffix
,
start
,
end
)
def
expandtabs
(
self
,
tabsize
=
8
):
return
self
.
__class__
(
self
.
data
.
expandtabs
(
tabsize
))
def
find
(
self
,
sub
,
start
=
0
,
end
=
sys
.
maxint
):
return
self
.
data
.
find
(
sub
,
start
,
end
)
def
index
(
self
,
sub
,
start
=
0
,
end
=
sys
.
maxint
):
return
self
.
data
.
index
(
sub
,
start
,
end
)
def
isalpha
(
self
):
return
self
.
data
.
isalpha
()
def
isalnum
(
self
):
return
self
.
data
.
isalnum
()
def
isdecimal
(
self
):
return
self
.
data
.
isdecimal
()
def
isdigit
(
self
):
return
self
.
data
.
isdigit
()
def
islower
(
self
):
return
self
.
data
.
islower
()
def
isnumeric
(
self
):
return
self
.
data
.
isnumeric
()
def
isspace
(
self
):
return
self
.
data
.
isspace
()
def
istitle
(
self
):
return
self
.
data
.
istitle
()
def
isupper
(
self
):
return
self
.
data
.
isupper
()
def
join
(
self
,
seq
):
return
self
.
data
.
join
(
seq
)
def
ljust
(
self
,
width
,
*
args
):
return
self
.
__class__
(
self
.
data
.
ljust
(
width
,
*
args
))
def
lower
(
self
):
return
self
.
__class__
(
self
.
data
.
lower
())
def
lstrip
(
self
,
chars
=
None
):
return
self
.
__class__
(
self
.
data
.
lstrip
(
chars
))
def
partition
(
self
,
sep
):
return
self
.
data
.
partition
(
sep
)
def
replace
(
self
,
old
,
new
,
maxsplit
=
-
1
):
return
self
.
__class__
(
self
.
data
.
replace
(
old
,
new
,
maxsplit
))
def
rfind
(
self
,
sub
,
start
=
0
,
end
=
sys
.
maxint
):
return
self
.
data
.
rfind
(
sub
,
start
,
end
)
def
rindex
(
self
,
sub
,
start
=
0
,
end
=
sys
.
maxint
):
return
self
.
data
.
rindex
(
sub
,
start
,
end
)
def
rjust
(
self
,
width
,
*
args
):
return
self
.
__class__
(
self
.
data
.
rjust
(
width
,
*
args
))
def
rpartition
(
self
,
sep
):
return
self
.
data
.
rpartition
(
sep
)
def
rstrip
(
self
,
chars
=
None
):
return
self
.
__class__
(
self
.
data
.
rstrip
(
chars
))
def
split
(
self
,
sep
=
None
,
maxsplit
=
-
1
):
return
self
.
data
.
split
(
sep
,
maxsplit
)
def
rsplit
(
self
,
sep
=
None
,
maxsplit
=
-
1
):
return
self
.
data
.
rsplit
(
sep
,
maxsplit
)
def
splitlines
(
self
,
keepends
=
0
):
return
self
.
data
.
splitlines
(
keepends
)
def
startswith
(
self
,
prefix
,
start
=
0
,
end
=
sys
.
maxint
):
return
self
.
data
.
startswith
(
prefix
,
start
,
end
)
def
strip
(
self
,
chars
=
None
):
return
self
.
__class__
(
self
.
data
.
strip
(
chars
))
def
swapcase
(
self
):
return
self
.
__class__
(
self
.
data
.
swapcase
())
def
title
(
self
):
return
self
.
__class__
(
self
.
data
.
title
())
def
translate
(
self
,
*
args
):
return
self
.
__class__
(
self
.
data
.
translate
(
*
args
))
def
upper
(
self
):
return
self
.
__class__
(
self
.
data
.
upper
())
def
zfill
(
self
,
width
):
return
self
.
__class__
(
self
.
data
.
zfill
(
width
))
class
MutableString
(
UserString
,
collections
.
MutableSequence
):
"""mutable string objects
Python strings are immutable objects. This has the advantage, that
strings may be used as dictionary keys. If this property isn't needed
and you insist on changing string values in place instead, you may cheat
and use MutableString.
But the purpose of this class is an educational one: to prevent
people from inventing their own mutable string class derived
from UserString and than forget thereby to remove (override) the
__hash__ method inherited from UserString. This would lead to
errors that would be very hard to track down.
A faster and better solution is to rewrite your program using lists."""
def
__init__
(
self
,
string
=
""
):
from
warnings
import
warnpy3k
warnpy3k
(
'the class UserString.MutableString has been removed in '
'Python 3.0'
,
stacklevel
=
2
)
self
.
data
=
string
# We inherit object.__hash__, so we must deny this explicitly
__hash__
=
None
def
__setitem__
(
self
,
index
,
sub
):
if
isinstance
(
index
,
slice
):
if
isinstance
(
sub
,
UserString
):
sub
=
sub
.
data
elif
not
isinstance
(
sub
,
basestring
):
sub
=
str
(
sub
)
start
,
stop
,
step
=
index
.
indices
(
len
(
self
.
data
))
if
step
==
-
1
:
start
,
stop
=
stop
+
1
,
start
+
1
sub
=
sub
[::
-
1
]
elif
step
!=
1
:
# XXX(twouters): I guess we should be reimplementing
# the extended slice assignment/deletion algorithm here...
raise
TypeError
,
"invalid step in slicing assignment"
start
=
min
(
start
,
stop
)
self
.
data
=
self
.
data
[:
start
]
+
sub
+
self
.
data
[
stop
:]
else
:
if
index
<
0
:
index
+=
len
(
self
.
data
)
if
index
<
0
or
index
>=
len
(
self
.
data
):
raise
IndexError
self
.
data
=
self
.
data
[:
index
]
+
sub
+
self
.
data
[
index
+
1
:]
def
__delitem__
(
self
,
index
):
if
isinstance
(
index
,
slice
):
start
,
stop
,
step
=
index
.
indices
(
len
(
self
.
data
))
if
step
==
-
1
:
start
,
stop
=
stop
+
1
,
start
+
1
elif
step
!=
1
:
# XXX(twouters): see same block in __setitem__
raise
TypeError
,
"invalid step in slicing deletion"
start
=
min
(
start
,
stop
)
self
.
data
=
self
.
data
[:
start
]
+
self
.
data
[
stop
:]
else
:
if
index
<
0
:
index
+=
len
(
self
.
data
)
if
index
<
0
or
index
>=
len
(
self
.
data
):
raise
IndexError
self
.
data
=
self
.
data
[:
index
]
+
self
.
data
[
index
+
1
:]
def
__setslice__
(
self
,
start
,
end
,
sub
):
start
=
max
(
start
,
0
);
end
=
max
(
end
,
0
)
if
isinstance
(
sub
,
UserString
):
self
.
data
=
self
.
data
[:
start
]
+
sub
.
data
+
self
.
data
[
end
:]
elif
isinstance
(
sub
,
basestring
):
self
.
data
=
self
.
data
[:
start
]
+
sub
+
self
.
data
[
end
:]
else
:
self
.
data
=
self
.
data
[:
start
]
+
str
(
sub
)
+
self
.
data
[
end
:]
def
__delslice__
(
self
,
start
,
end
):
start
=
max
(
start
,
0
);
end
=
max
(
end
,
0
)
self
.
data
=
self
.
data
[:
start
]
+
self
.
data
[
end
:]
def
immutable
(
self
):
return
UserString
(
self
.
data
)
def
__iadd__
(
self
,
other
):
if
isinstance
(
other
,
UserString
):
self
.
data
+=
other
.
data
elif
isinstance
(
other
,
basestring
):
self
.
data
+=
other
else
:
self
.
data
+=
str
(
other
)
return
self
def
__imul__
(
self
,
n
):
self
.
data
*=
n
return
self
def
insert
(
self
,
index
,
value
):
self
[
index
:
index
]
=
value
if
__name__
==
"__main__"
:
# execute the regression test to stdout, if called as a script:
import
os
called_in_dir
,
called_as
=
os
.
path
.
split
(
sys
.
argv
[
0
])
called_as
,
py
=
os
.
path
.
splitext
(
called_as
)
if
'-q'
in
sys
.
argv
:
from
test
import
test_support
test_support
.
verbose
=
0
__import__
(
'test.test_'
+
called_as
.
lower
())
Back
|
FazBrowse Home
|
New Git URL