@@ 282-320 (lines=39) @@ | ||
279 | self._process_list_item(cap, bull) |
|
280 | self.tokens.append({'type': 'list_end'}) |
|
281 | ||
282 | def _process_list_item(self, cap, bull): |
|
283 | cap = self.rules.list_item.findall(cap) |
|
284 | ||
285 | _next = False |
|
286 | length = len(cap) |
|
287 | ||
288 | for i in range(length): |
|
289 | item = cap[i][0] |
|
290 | ||
291 | # remove the bullet |
|
292 | space = len(item) |
|
293 | item = self.rules.list_bullet.sub('', item) |
|
294 | ||
295 | # outdent |
|
296 | if '\n ' in item: |
|
297 | space = space - len(item) |
|
298 | pattern = re.compile(r'^ {1,%d}' % space, flags=re.M) |
|
299 | item = pattern.sub('', item) |
|
300 | ||
301 | # determine whether item is loose or not |
|
302 | loose = _next |
|
303 | if not loose and re.search(r'\n\n(?!\s*$)', item): |
|
304 | loose = True |
|
305 | ||
306 | rest = len(item) |
|
307 | if i != length - 1 and rest: |
|
308 | _next = item[rest-1] == '\n' |
|
309 | if not loose: |
|
310 | loose = _next |
|
311 | ||
312 | if loose: |
|
313 | t = 'loose_item_start' |
|
314 | else: |
|
315 | t = 'list_item_start' |
|
316 | ||
317 | self.tokens.append({'type': t}) |
|
318 | # recurse |
|
319 | self.parse(item, self.list_rules) |
|
320 | self.tokens.append({'type': 'list_item_end'}) |
|
321 | ||
322 | def parse_block_quote(self, m): |
|
323 | self.tokens.append({'type': 'block_quote_start'}) |
@@ 269-307 (lines=39) @@ | ||
266 | self._process_list_item(cap, bull) |
|
267 | self.tokens.append({'type': 'list_end'}) |
|
268 | ||
269 | def _process_list_item(self, cap, bull): |
|
270 | cap = self.rules.list_item.findall(cap) |
|
271 | ||
272 | _next = False |
|
273 | length = len(cap) |
|
274 | ||
275 | for i in range(length): |
|
276 | item = cap[i][0] |
|
277 | ||
278 | # remove the bullet |
|
279 | space = len(item) |
|
280 | item = self.rules.list_bullet.sub('', item) |
|
281 | ||
282 | # outdent |
|
283 | if '\n ' in item: |
|
284 | space = space - len(item) |
|
285 | pattern = re.compile(r'^ {1,%d}' % space, flags=re.M) |
|
286 | item = pattern.sub('', item) |
|
287 | ||
288 | # determin whether item is loose or not |
|
289 | loose = _next |
|
290 | if not loose and re.search(r'\n\n(?!\s*$)', item): |
|
291 | loose = True |
|
292 | ||
293 | rest = len(item) |
|
294 | if i != length - 1 and rest: |
|
295 | _next = item[rest-1] == '\n' |
|
296 | if not loose: |
|
297 | loose = _next |
|
298 | ||
299 | if loose: |
|
300 | t = 'loose_item_start' |
|
301 | else: |
|
302 | t = 'list_item_start' |
|
303 | ||
304 | self.tokens.append({'type': t}) |
|
305 | # recurse |
|
306 | self.parse(item, self.list_rules) |
|
307 | self.tokens.append({'type': 'list_item_end'}) |
|
308 | ||
309 | def parse_block_quote(self, m): |
|
310 | self.tokens.append({'type': 'block_quote_start'}) |