Code Duplication    Length = 33-33 lines in 2 locations

src/ocrd_page_user_methods/get_ReadingOrderGroups.py 1 location

@@ 1-33 (lines=33) @@
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
    def get_groupdict(group):
15
        regionrefs = list()
16
        if isinstance(group, (OrderedGroupType, OrderedGroupIndexedType)):
17
            regionrefs = (group.get_RegionRefIndexed() +
18
                          group.get_OrderedGroupIndexed() +
19
                          group.get_UnorderedGroupIndexed())
20
        if isinstance(group, (UnorderedGroupType, UnorderedGroupIndexedType)):
21
            regionrefs = (group.get_RegionRef() +
22
                          group.get_OrderedGroup() +
23
                          group.get_UnorderedGroup())
24
        refdict = {}
25
        for elem in regionrefs:
26
            refdict[elem.get_regionRef()] = elem
27
            if not isinstance(elem, (RegionRefType, RegionRefIndexedType)):
28
                refdict = {**refdict, **get_groupdict(elem)}
29
        return refdict
30
    ro = self.get_ReadingOrder()
31
    if ro is None:
32
        return {}
33
    return get_groupdict(ro.get_OrderedGroup() or ro.get_UnorderedGroup())
34

src/ocrd_models/ocrd_page_generateds.py 1 location

@@ 3919-3951 (lines=33) @@
3916
                ret += lines if lo in ['top-to-bottom', 'left-to-right'] else list(reversed(lines))
3917
        return ret
3918
    
3919
    def get_ReadingOrderGroups(self) -> dict:
3920
        """
3921
        Aggregate recursive ReadingOrder into a dictionary, mapping each regionRef
3922
        (i.e. segment `@id`) to its referring group object (i.e one of
3923
    
3924
        \b
3925
        - :py:class:`.RegionRefType`
3926
        - :py:class:`.RegionRefIndexedType`
3927
        - :py:class:`.OrderedGroupType`
3928
        - :py:class:`.OrderedGroupIndexedType`
3929
        - :py:class:`.UnoderedGroupType`
3930
        - :py:class:`.UnoderedGroupIndexedType`
3931
        """
3932
        def get_groupdict(group):
3933
            regionrefs = list()
3934
            if isinstance(group, (OrderedGroupType, OrderedGroupIndexedType)):
3935
                regionrefs = (group.get_RegionRefIndexed() +
3936
                              group.get_OrderedGroupIndexed() +
3937
                              group.get_UnorderedGroupIndexed())
3938
            if isinstance(group, (UnorderedGroupType, UnorderedGroupIndexedType)):
3939
                regionrefs = (group.get_RegionRef() +
3940
                              group.get_OrderedGroup() +
3941
                              group.get_UnorderedGroup())
3942
            refdict = {}
3943
            for elem in regionrefs:
3944
                refdict[elem.get_regionRef()] = elem
3945
                if not isinstance(elem, (RegionRefType, RegionRefIndexedType)):
3946
                    refdict = {**refdict, **get_groupdict(elem)}
3947
            return refdict
3948
        ro = self.get_ReadingOrder()
3949
        if ro is None:
3950
            return {}
3951
        return get_groupdict(ro.get_OrderedGroup() or ro.get_UnorderedGroup())
3952
    def set_orientation(self, orientation):
3953
        """
3954
        Set deskewing angle to given `orientation` number.