| @@ 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'}) |
|