|
@@ 431-450 (lines=20) @@
|
| 428 |
|
def test(self, parent, block): |
| 429 |
|
return bool(self.RE.search(block)) |
| 430 |
|
|
| 431 |
|
def run(self, parent, blocks): |
| 432 |
|
block = blocks.pop(0) |
| 433 |
|
m = self.RE.search(block) |
| 434 |
|
if m: |
| 435 |
|
before = block[:m.start()] # All lines before header |
| 436 |
|
after = block[m.end():] # All lines after header |
| 437 |
|
if before: |
| 438 |
|
# As the header was not the first line of the block and the |
| 439 |
|
# lines before the header must be parsed first, |
| 440 |
|
# recursively parse this lines as a block. |
| 441 |
|
self.parser.parseBlocks(parent, [before]) |
| 442 |
|
# Create header using named groups from RE |
| 443 |
|
h = util.etree.SubElement(parent, 'h%d' % len(m.group('level'))) |
| 444 |
|
h.text = m.group('header').strip() |
| 445 |
|
if after: |
| 446 |
|
# Insert remaining lines as first block for future parsing. |
| 447 |
|
blocks.insert(0, after) |
| 448 |
|
else: # pragma: no cover |
| 449 |
|
# This should never happen, but just in case... |
| 450 |
|
logger.warn("We've got a problem header: %r" % block) |
| 451 |
|
|
| 452 |
|
|
| 453 |
|
class SetextHeaderProcessor(BlockProcessor): |
|
@@ 494-508 (lines=15) @@
|
| 491 |
|
return True |
| 492 |
|
return False |
| 493 |
|
|
| 494 |
|
def run(self, parent, blocks): |
| 495 |
|
block = blocks.pop(0) |
| 496 |
|
match = self.match |
| 497 |
|
# Check for lines in block before hr. |
| 498 |
|
prelines = block[:match.start()].rstrip('\n') |
| 499 |
|
if prelines: |
| 500 |
|
# Recursively parse lines before hr so they get parsed first. |
| 501 |
|
self.parser.parseBlocks(parent, [prelines]) |
| 502 |
|
# create hr |
| 503 |
|
util.etree.SubElement(parent, 'hr') |
| 504 |
|
# check for lines in block after hr. |
| 505 |
|
postlines = block[match.end():].lstrip('\n') |
| 506 |
|
if postlines: |
| 507 |
|
# Add lines after hr to master blocks for later parsing. |
| 508 |
|
blocks.insert(0, postlines) |
| 509 |
|
|
| 510 |
|
|
| 511 |
|
class EmptyBlockProcessor(BlockProcessor): |