Mercurial > public > mercurial-scm > hg
comparison mercurial/encoding.py @ 21861:b515c3a63e96
encoding: add 'leftside' argument into 'trim' to switch trimming side
author | FUJIWARA Katsunori <foozy@lares.dti.ne.jp> |
---|---|
date | Sun, 06 Jul 2014 02:56:41 +0900 |
parents | d24969ee272f |
children | 6fd944c204a9 |
comparison
equal
deleted
inserted
replaced
21860:e382cf9ec30b | 21861:b515c3a63e96 |
---|---|
163 for x in xrange(start + c, len(s)): | 163 for x in xrange(start + c, len(s)): |
164 t = s[start:x] | 164 t = s[start:x] |
165 if colwidth(t) == c: | 165 if colwidth(t) == c: |
166 return t | 166 return t |
167 | 167 |
168 def trim(s, width, ellipsis=''): | 168 def trim(s, width, ellipsis='', leftside=False): |
169 """Trim string 's' to at most 'width' columns (including 'ellipsis'). | 169 """Trim string 's' to at most 'width' columns (including 'ellipsis'). |
170 | |
171 If 'leftside' is True, left side of string 's' is trimmed. | |
172 'ellipsis' is always placed at trimmed side. | |
170 | 173 |
171 >>> ellipsis = '+++' | 174 >>> ellipsis = '+++' |
172 >>> from mercurial import encoding | 175 >>> from mercurial import encoding |
173 >>> encoding.encoding = 'utf-8' | 176 >>> encoding.encoding = 'utf-8' |
174 >>> t= '1234567890' | 177 >>> t= '1234567890' |
176 1234567890 | 179 1234567890 |
177 >>> print trim(t, 10, ellipsis=ellipsis) | 180 >>> print trim(t, 10, ellipsis=ellipsis) |
178 1234567890 | 181 1234567890 |
179 >>> print trim(t, 8, ellipsis=ellipsis) | 182 >>> print trim(t, 8, ellipsis=ellipsis) |
180 12345+++ | 183 12345+++ |
184 >>> print trim(t, 8, ellipsis=ellipsis, leftside=True) | |
185 +++67890 | |
181 >>> print trim(t, 8) | 186 >>> print trim(t, 8) |
182 12345678 | 187 12345678 |
188 >>> print trim(t, 8, leftside=True) | |
189 34567890 | |
183 >>> print trim(t, 3, ellipsis=ellipsis) | 190 >>> print trim(t, 3, ellipsis=ellipsis) |
184 +++ | 191 +++ |
185 >>> print trim(t, 1, ellipsis=ellipsis) | 192 >>> print trim(t, 1, ellipsis=ellipsis) |
186 + | 193 + |
187 >>> u = u'\u3042\u3044\u3046\u3048\u304a' # 2 x 5 = 10 columns | 194 >>> u = u'\u3042\u3044\u3046\u3048\u304a' # 2 x 5 = 10 columns |
190 \xe3\x81\x82\xe3\x81\x84\xe3\x81\x86\xe3\x81\x88\xe3\x81\x8a | 197 \xe3\x81\x82\xe3\x81\x84\xe3\x81\x86\xe3\x81\x88\xe3\x81\x8a |
191 >>> print trim(t, 10, ellipsis=ellipsis) | 198 >>> print trim(t, 10, ellipsis=ellipsis) |
192 \xe3\x81\x82\xe3\x81\x84\xe3\x81\x86\xe3\x81\x88\xe3\x81\x8a | 199 \xe3\x81\x82\xe3\x81\x84\xe3\x81\x86\xe3\x81\x88\xe3\x81\x8a |
193 >>> print trim(t, 8, ellipsis=ellipsis) | 200 >>> print trim(t, 8, ellipsis=ellipsis) |
194 \xe3\x81\x82\xe3\x81\x84+++ | 201 \xe3\x81\x82\xe3\x81\x84+++ |
202 >>> print trim(t, 8, ellipsis=ellipsis, leftside=True) | |
203 +++\xe3\x81\x88\xe3\x81\x8a | |
195 >>> print trim(t, 5) | 204 >>> print trim(t, 5) |
196 \xe3\x81\x82\xe3\x81\x84 | 205 \xe3\x81\x82\xe3\x81\x84 |
206 >>> print trim(t, 5, leftside=True) | |
207 \xe3\x81\x88\xe3\x81\x8a | |
197 >>> print trim(t, 4, ellipsis=ellipsis) | 208 >>> print trim(t, 4, ellipsis=ellipsis) |
209 +++ | |
210 >>> print trim(t, 4, ellipsis=ellipsis, leftside=True) | |
198 +++ | 211 +++ |
199 >>> t = '\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa' # invalid byte sequence | 212 >>> t = '\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa' # invalid byte sequence |
200 >>> print trim(t, 12, ellipsis=ellipsis) | 213 >>> print trim(t, 12, ellipsis=ellipsis) |
201 \x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa | 214 \x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa |
202 >>> print trim(t, 10, ellipsis=ellipsis) | 215 >>> print trim(t, 10, ellipsis=ellipsis) |
203 \x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa | 216 \x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa |
204 >>> print trim(t, 8, ellipsis=ellipsis) | 217 >>> print trim(t, 8, ellipsis=ellipsis) |
205 \x11\x22\x33\x44\x55+++ | 218 \x11\x22\x33\x44\x55+++ |
219 >>> print trim(t, 8, ellipsis=ellipsis, leftside=True) | |
220 +++\x66\x77\x88\x99\xaa | |
206 >>> print trim(t, 8) | 221 >>> print trim(t, 8) |
207 \x11\x22\x33\x44\x55\x66\x77\x88 | 222 \x11\x22\x33\x44\x55\x66\x77\x88 |
223 >>> print trim(t, 8, leftside=True) | |
224 \x33\x44\x55\x66\x77\x88\x99\xaa | |
208 >>> print trim(t, 3, ellipsis=ellipsis) | 225 >>> print trim(t, 3, ellipsis=ellipsis) |
209 +++ | 226 +++ |
210 >>> print trim(t, 1, ellipsis=ellipsis) | 227 >>> print trim(t, 1, ellipsis=ellipsis) |
211 + | 228 + |
212 """ | 229 """ |
216 if len(s) <= width: # trimming is not needed | 233 if len(s) <= width: # trimming is not needed |
217 return s | 234 return s |
218 width -= len(ellipsis) | 235 width -= len(ellipsis) |
219 if width <= 0: # no enough room even for ellipsis | 236 if width <= 0: # no enough room even for ellipsis |
220 return ellipsis[:width + len(ellipsis)] | 237 return ellipsis[:width + len(ellipsis)] |
238 if leftside: | |
239 return ellipsis + s[-width:] | |
221 return s[:width] + ellipsis | 240 return s[:width] + ellipsis |
222 | 241 |
223 if ucolwidth(u) <= width: # trimming is not needed | 242 if ucolwidth(u) <= width: # trimming is not needed |
224 return s | 243 return s |
225 | 244 |
226 width -= len(ellipsis) | 245 width -= len(ellipsis) |
227 if width <= 0: # no enough room even for ellipsis | 246 if width <= 0: # no enough room even for ellipsis |
228 return ellipsis[:width + len(ellipsis)] | 247 return ellipsis[:width + len(ellipsis)] |
229 | 248 |
230 uslice = lambda i: u[:-i] | 249 if leftside: |
231 concat = lambda s: s + ellipsis | 250 uslice = lambda i: u[i:] |
251 concat = lambda s: ellipsis + s | |
252 else: | |
253 uslice = lambda i: u[:-i] | |
254 concat = lambda s: s + ellipsis | |
232 for i in xrange(1, len(u)): | 255 for i in xrange(1, len(u)): |
233 usub = uslice(i) | 256 usub = uslice(i) |
234 if ucolwidth(usub) <= width: | 257 if ucolwidth(usub) <= width: |
235 return concat(usub.encode(encoding)) | 258 return concat(usub.encode(encoding)) |
236 return ellipsis # no enough room for multi-column characters | 259 return ellipsis # no enough room for multi-column characters |