From 08f039928f8ea2767d1cebd606258a440518558f Mon Sep 17 00:00:00 2001 From: Greg Kempe Date: Tue, 11 Feb 2025 14:22:59 +0200 Subject: [PATCH] correctly look up plural schedules --- indigo/analysis/refs/provision_refs.peg | 2 ++ indigo/analysis/refs/provisions.py | 14 ++++++++++++-- indigo/tests/test_provision_refs_grammar.py | 11 +++++++++-- 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/indigo/analysis/refs/provision_refs.peg b/indigo/analysis/refs/provision_refs.peg index a9cd6081a..6738d5453 100644 --- a/indigo/analysis/refs/provision_refs.peg +++ b/indigo/analysis/refs/provision_refs.peg @@ -154,9 +154,11 @@ grammar ProvisionRefs `sous-reglements` / `sous-reglement` / `sous-sections` / `sous-section` + # changes or additions to these must also be made in attachment_num_ref in provisions.py schedule_eng <- `schedules` / `schedule` schedule_afr <- `bylae` / `bylaag` schedule_fra <- `annexes` / `annexe` + the_schedule_eng <- `the schedule` the_schedule_afr <- `die bylaag` the_schedule_fra <- `l'annexe` diff --git a/indigo/analysis/refs/provisions.py b/indigo/analysis/refs/provisions.py index 488c437d8..f06dd7399 100644 --- a/indigo/analysis/refs/provisions.py +++ b/indigo/analysis/refs/provisions.py @@ -114,17 +114,27 @@ def root(self, input, start, end, elements): return ParseResult(refs, target, elements[3].offset) def attachment_num_ref(self, input, start, end, elements): + headings = { + "schedules": "Schedule", + "schedule": "Schedule", + "bylae": "Bylaag", + "bylaag": "Bylaag", + "annexe": "Annexe", + "annexes": "Annexe", + } + # extend the ref to cover the full thing, not just the number ref = elements[2] refs = [MainProvisionRef("attachment", ref)] # "2" -> "Schedule 2" + heading = headings[elements[0].text.lower()] ref.start_pos = start - ref.text = input[start:ref.end_pos] + ref.text = f'{heading} {ref.text}' for el in elements[3].elements or []: ref = MainProvisionRef("attachment", el.main_num) # "2" -> "Schedule 2" - ref.ref.text = elements[0].text + elements[1].text + ref.ref.text + ref.ref.text = f'{heading} {ref.ref.text}' ref.ref.separator = el.elements[0] refs.append(ref) diff --git a/indigo/tests/test_provision_refs_grammar.py b/indigo/tests/test_provision_refs_grammar.py index e1062b747..2dddaa94c 100644 --- a/indigo/tests/test_provision_refs_grammar.py +++ b/indigo/tests/test_provision_refs_grammar.py @@ -359,7 +359,7 @@ def test_schedules_num(self): ], result.references) self.assertIsNone(result.target) - result = parse_provision_refs("Schedule 2a.") + result = parse_provision_refs("schedule 2a.") self.assertEqual([ MainProvisionRef( "attachment", @@ -369,13 +369,20 @@ def test_schedules_num(self): self.assertIsNone(result.target) def test_schedules_num_range(self): - result = parse_provision_refs("Schedule 2 to 30") + result = parse_provision_refs("schedule 2 to 30") self.assertEqual([ MainProvisionRef('attachment', ProvisionRef('Schedule 2', 0, 10)), MainProvisionRef('attachment', ProvisionRef('Schedule 30', 14, 16, separator='range')), ], result.references) self.assertIsNone(result.target) + result = parse_provision_refs("Schedules 2 and 30") + self.assertEqual([ + MainProvisionRef('attachment', ProvisionRef('Schedule 2', 0, 11)), + MainProvisionRef('attachment', ProvisionRef('Schedule 30', 16, 18, separator='and_or')), + ], result.references) + self.assertIsNone(result.target) + def test_schedules_the_eng(self): result = parse_provision_refs("the Schedule") self.assertEqual([