Move the last SPECIAL_SECTION special case into the proper handler function, getting rid of more if/then/else logic. The leading-space tracking was tightened up a bit in the move. Add some comments describing what is going on. No changes to the generated output.
Showing the changes to scripts (1 of 1 file). Show all
Unified · Split
| @@ -1405,10 +1405,53 @@ class KernelDoc: · 1404 unmodified lines | ||
| 1405 | 1405 | """ |
| 1406 | 1406 | STATE_SPECIAL_SECTION: a section ending with a blank line |
| 1407 | 1407 | """ |
| 1408 | + # | |
| 1409 | + # If we have hit a blank line (only the " * " marker), then this | |
| 1410 | + # section is done. | |
| 1411 | + # | |
| 1408 | 1412 | if KernRe(r"\s*\*\s*$").match(line): |
| 1409 | 1413 | self.entry.begin_section(ln, dump = True) |
| 1414 | + self.entry.contents += '\n' | |
| 1410 | 1415 | self.state = state.BODY |
| 1411 | − self.process_body(ln, line) | |
| 1416 | + return | |
| 1417 | + # | |
| 1418 | + # Not a blank line, look for the other ways to end the section. | |
| 1419 | + # | |
| 1420 | + if self.is_new_section(ln, line) or self.is_comment_end(ln, line): | |
| 1421 | + return | |
| 1422 | + # | |
| 1423 | + # OK, we should have a continuation of the text for this section. | |
| 1424 | + # | |
| 1425 | + if doc_content.search(line): | |
| 1426 | + cont = doc_content.group(1) | |
| 1427 | + # | |
| 1428 | + # If the lines of text after the first in a special section have | |
| 1429 | + # leading white space, we need to trim it out or Sphinx will get | |
| 1430 | + # confused. For the second line (the None case), see what we | |
| 1431 | + # find there and remember it. | |
| 1432 | + # | |
| 1433 | + if self.entry.leading_space is None: | |
| 1434 | + r = KernRe(r'^(\s+)') | |
| 1435 | + if r.match(cont): | |
| 1436 | + self.entry.leading_space = len(r.group(1)) | |
| 1437 | + else: | |
| 1438 | + self.entry.leading_space = 0 | |
| 1439 | + # | |
| 1440 | + # Otherwise, before trimming any leading chars, be *sure* | |
| 1441 | + # that they are white space. We should maybe warn if this | |
| 1442 | + # isn't the case. | |
| 1443 | + # | |
| 1444 | + for i in range(0, self.entry.leading_space): | |
| 1445 | + if cont[i] != " ": | |
| 1446 | + self.entry.leading_space = i | |
| 1447 | + break | |
| 1448 | + # | |
| 1449 | + # Add the trimmed result to the section and we're done. | |
| 1450 | + # | |
| 1451 | + self.entry.contents += cont[self.entry.leading_space:] + '\n' | |
| 1452 | + else: | |
| 1453 | + # Unknown line, ignore | |
| 1454 | + self.emit_msg(ln, f"bad line: {line}") | |
| 1412 | 1455 | |
| 1413 | 1456 | def process_body(self, ln, line): |
| 1414 | 1457 | """ |
| @@ -1419,37 +1462,10 @@ class KernelDoc: · 4 unmodified lines | ||
| 1419 | 1462 | |
| 1420 | 1463 | if doc_content.search(line): |
| 1421 | 1464 | cont = doc_content.group(1) |
| 1422 | − | |
| 1423 | − if cont == "": | |
| 1424 | − self.entry.contents += "\n" | |
| 1425 | − else: | |
| 1426 | − if self.state == state.SPECIAL_SECTION: | |
| 1427 | − if self.entry.leading_space is None: | |
| 1428 | − r = KernRe(r'^(\s+)') | |
| 1429 | − if r.match(cont): | |
| 1430 | − self.entry.leading_space = len(r.group(1)) | |
| 1431 | − else: | |
| 1432 | − self.entry.leading_space = 0 | |
| 1433 | − | |
| 1434 | − # Double-check if leading space are realy spaces | |
| 1435 | − pos = 0 | |
| 1436 | − for i in range(0, self.entry.leading_space): | |
| 1437 | − if cont[i] != " ": | |
| 1438 | − break | |
| 1439 | − pos += 1 | |
| 1440 | − | |
| 1441 | − cont = cont[pos:] | |
| 1442 | − | |
| 1443 | − # NEW LOGIC: | |
| 1444 | − # In case it is different, update it | |
| 1445 | − if self.entry.leading_space != pos: | |
| 1446 | − self.entry.leading_space = pos | |
| 1447 | − | |
| 1448 | − self.entry.contents += cont + "\n" | |
| 1449 | − return | |
| 1450 | − | |
| 1451 | − # Unknown line, ignore | |
| 1452 | − self.emit_msg(ln, f"bad line: {line}") | |
| 1465 | + self.entry.contents += cont + "\n" | |
| 1466 | + else: | |
| 1467 | + # Unknown line, ignore | |
| 1468 | + self.emit_msg(ln, f"bad line: {line}") | |
| 1453 | 1469 | |
| 1454 | 1470 | def process_inline(self, ln, line): |
| 1455 | 1471 | """STATE_INLINE: docbook comments within a prototype.""" |