| @@ 3921-3955 (lines=35) @@ | ||
| 3918 | ret += lines if lo in ['top-to-bottom', 'left-to-right'] else list(reversed(lines)) |
|
| 3919 | return ret |
|
| 3920 | ||
| 3921 | def get_ReadingOrderGroups(self) -> dict: |
|
| 3922 | """ |
|
| 3923 | Aggregate recursive ReadingOrder into a dictionary, mapping each regionRef |
|
| 3924 | (i.e. segment `@id`) to its referring group object (i.e one of |
|
| 3925 | ||
| 3926 | \b |
|
| 3927 | - :py:class:`.RegionRefType` |
|
| 3928 | - :py:class:`.RegionRefIndexedType` |
|
| 3929 | - :py:class:`.OrderedGroupType` |
|
| 3930 | - :py:class:`.OrderedGroupIndexedType` |
|
| 3931 | - :py:class:`.UnoderedGroupType` |
|
| 3932 | - :py:class:`.UnoderedGroupIndexedType` |
|
| 3933 | """ |
|
| 3934 | from collections import OrderedDict as odict |
|
| 3935 | def get_groupdict(group): |
|
| 3936 | regionrefs = list() |
|
| 3937 | if isinstance(group, (OrderedGroupType, OrderedGroupIndexedType)): |
|
| 3938 | regionrefs = (group.get_RegionRefIndexed() + |
|
| 3939 | group.get_OrderedGroupIndexed() + |
|
| 3940 | group.get_UnorderedGroupIndexed()) |
|
| 3941 | regionrefs = sorted(regionrefs, key=lambda x: x.index) |
|
| 3942 | if isinstance(group, (UnorderedGroupType, UnorderedGroupIndexedType)): |
|
| 3943 | regionrefs = (group.get_RegionRef() + |
|
| 3944 | group.get_OrderedGroup() + |
|
| 3945 | group.get_UnorderedGroup()) |
|
| 3946 | refdict = odict() |
|
| 3947 | for elem in regionrefs: |
|
| 3948 | refdict[elem.get_regionRef()] = elem |
|
| 3949 | if not isinstance(elem, (RegionRefType, RegionRefIndexedType)): |
|
| 3950 | refdict = odict(**refdict, **get_groupdict(elem)) |
|
| 3951 | return refdict |
|
| 3952 | ro = self.get_ReadingOrder() |
|
| 3953 | if ro is None: |
|
| 3954 | return {} |
|
| 3955 | return get_groupdict(ro.get_OrderedGroup() or ro.get_UnorderedGroup()) |
|
| 3956 | def set_orientation(self, orientation): |
|
| 3957 | """ |
|
| 3958 | Set deskewing angle to given `orientation` number. |
|
| @@ 1-35 (lines=35) @@ | ||
| 1 | def get_ReadingOrderGroups(self) -> dict: |
|
| 2 | """ |
|
| 3 | Aggregate recursive ReadingOrder into a dictionary, mapping each regionRef |
|
| 4 | (i.e. segment `@id`) to its referring group object (i.e one of |
|
| 5 | ||
| 6 | \b |
|
| 7 | - :py:class:`.RegionRefType` |
|
| 8 | - :py:class:`.RegionRefIndexedType` |
|
| 9 | - :py:class:`.OrderedGroupType` |
|
| 10 | - :py:class:`.OrderedGroupIndexedType` |
|
| 11 | - :py:class:`.UnoderedGroupType` |
|
| 12 | - :py:class:`.UnoderedGroupIndexedType` |
|
| 13 | """ |
|
| 14 | from collections import OrderedDict as odict |
|
| 15 | def get_groupdict(group): |
|
| 16 | regionrefs = list() |
|
| 17 | if isinstance(group, (OrderedGroupType, OrderedGroupIndexedType)): |
|
| 18 | regionrefs = (group.get_RegionRefIndexed() + |
|
| 19 | group.get_OrderedGroupIndexed() + |
|
| 20 | group.get_UnorderedGroupIndexed()) |
|
| 21 | regionrefs = sorted(regionrefs, key=lambda x: x.index) |
|
| 22 | if isinstance(group, (UnorderedGroupType, UnorderedGroupIndexedType)): |
|
| 23 | regionrefs = (group.get_RegionRef() + |
|
| 24 | group.get_OrderedGroup() + |
|
| 25 | group.get_UnorderedGroup()) |
|
| 26 | refdict = odict() |
|
| 27 | for elem in regionrefs: |
|
| 28 | refdict[elem.get_regionRef()] = elem |
|
| 29 | if not isinstance(elem, (RegionRefType, RegionRefIndexedType)): |
|
| 30 | refdict = odict(**refdict, **get_groupdict(elem)) |
|
| 31 | return refdict |
|
| 32 | ro = self.get_ReadingOrder() |
|
| 33 | if ro is None: |
|
| 34 | return {} |
|
| 35 | return get_groupdict(ro.get_OrderedGroup() or ro.get_UnorderedGroup()) |
|
| 36 | ||