172
172
class Format(Processor):
175
def _truncate(self, line):
176
return line.encode('utf-8')[:489].decode('utf-8', 'ignore') \
177
+ u'\N{horizontal ellipsis}'
175
179
def process(self, event):
177
181
for response in event.responses:
182
186
response['reply'] = u'*%s*' % response['reply']
184
188
conflate = response.get('conflate', True)
189
# Expand response into multiple single-line responses:
185
190
if (not conflate and 'multiline' not in supports):
186
191
for line in response['reply'].split('\n'):
192
if 'trim' in supports and len(line.encode('utf-8')) > 490:
193
line = self._truncate(line)
187
194
r = {'reply': line}
188
195
for k in response.iterkeys():
189
196
if k not in ('reply'):
190
197
r[k] = response[k]
191
198
filtered.append(r)
200
# Expand response into multiple multi-line responses:
201
elif (not conflate and 'multiline' in supports
202
and 'trim' in supports):
203
message = response['reply']
204
while len(message.encode('utf-8')) > 490:
205
splitpoint = len(message.encode('utf-8')[:490] \
206
.decode('utf-8', 'ignore'))
207
parts = [message[:splitpoint].rstrip(),
208
message[splitpoint:].lstrip()]
209
for sep in u'\n.;:, ':
211
splitpoint = parts[0].rindex(sep)
212
parts = [message[:splitpoint], message[splitpoint:]]
214
parts[1] = parts[1][1:]
216
r = {'reply': parts[0]}
217
for k in response.iterkeys():
218
if k not in ('reply'):
223
response['reply'] = message
224
filtered.append(response)
227
line = response['reply']
228
# Remove any characters that make no sense on IRC-like sources:
193
229
if 'multiline' not in supports:
194
response['reply'] = response['reply'].expandtabs(1) \
195
.replace('\n', conflate == True
196
and u' ' or conflate or u'')
230
line = line.expandtabs(1) \
231
.replace('\n', conflate == True
232
and u' ' or conflate or u'')
234
if 'trim' in supports and len(line.encode('utf-8')) > 490:
235
line = self._truncate(line)
236
response['reply'] = line
197
238
filtered.append(response)
199
240
event.responses = filtered