Parse individual entries within a section. Handles both: - Bulleted entries: * text - Numbered entries: 1. text, 2. text, etc. (older format)
(self, section_content: str, change_type: str)
| 512 | return version_section |
| 513 | |
| 514 | def _parse_entries(self, section_content: str, change_type: str) -> List[ChangeEntry]: |
| 515 | """Parse individual entries within a section. |
| 516 | |
| 517 | Handles both: |
| 518 | - Bulleted entries: * text |
| 519 | - Numbered entries: 1. text, 2. text, etc. (older format) |
| 520 | """ |
| 521 | entries = [] |
| 522 | |
| 523 | # First try to split by bulleted entries (* prefix) |
| 524 | bulleted_pattern = re.compile(r'^\*\s+', re.MULTILINE) |
| 525 | bulleted_entries = bulleted_pattern.split(section_content) |
| 526 | |
| 527 | if len(bulleted_entries) > 1: |
| 528 | # Has bulleted entries |
| 529 | for entry_text in bulleted_entries[1:]: # Skip first empty split |
| 530 | entry_text = entry_text.strip() |
| 531 | if not entry_text or entry_text == "(No changes)": |
| 532 | continue |
| 533 | entry = self._parse_single_entry(entry_text, change_type) |
| 534 | if entry: |
| 535 | entries.append(entry) |
| 536 | else: |
| 537 | # No bulleted entries, try numbered entries (old format: "1. text", "2. text", etc.) |
| 538 | numbered_pattern = re.compile(r'^\s{0,2}\d+\.\s+', re.MULTILINE) |
| 539 | if numbered_pattern.search(section_content): |
| 540 | # Has numbered entries |
| 541 | numbered_entries = numbered_pattern.split(section_content) |
| 542 | for entry_text in numbered_entries[1:]: # Skip first empty split |
| 543 | entry_text = entry_text.strip() |
| 544 | if not entry_text: |
| 545 | continue |
| 546 | entry = self._parse_single_entry(entry_text, change_type) |
| 547 | if entry: |
| 548 | entries.append(entry) |
| 549 | else: |
| 550 | # No standard entries found, try as paragraph |
| 551 | entry_text = section_content.strip() |
| 552 | if entry_text and entry_text != "(No changes)": |
| 553 | entry = self._parse_single_entry(entry_text, change_type) |
| 554 | if entry: |
| 555 | entries.append(entry) |
| 556 | |
| 557 | return entries |
| 558 | |
| 559 | def _parse_single_entry(self, entry_text: str, change_type: str) -> Optional[ChangeEntry]: |
| 560 | """Parse a single entry into a ChangeEntry object.""" |
no test coverage detected