| @@ 3124-3148 (lines=25) @@ | ||
| 3121 | def _region_class(self, x): # pylint: disable=unused-argument |
|
| 3122 | return x.__class__.__name__.replace('RegionType', '') |
|
| 3123 | ||
| 3124 | def _get_recursive_regions(self, regions, level, classes=None): |
|
| 3125 | from .constants import PAGE_REGION_TYPES # pylint: disable=relative-beyond-top-level,import-outside-toplevel |
|
| 3126 | if level == 1: |
|
| 3127 | # stop recursion, filter classes |
|
| 3128 | if classes: |
|
| 3129 | return [r for r in regions if self._region_class(r) in classes] |
|
| 3130 | if regions and regions[0].__class__.__name__ == 'PageType': |
|
| 3131 | regions = regions[1:] |
|
| 3132 | return regions |
|
| 3133 | # find more regions recursively |
|
| 3134 | more_regions = [] |
|
| 3135 | for region in regions: |
|
| 3136 | more_regions.append([]) |
|
| 3137 | for class_ in PAGE_REGION_TYPES: |
|
| 3138 | if class_ == 'Map' and not isinstance(region, PageType): # pylint: disable=undefined-variable |
|
| 3139 | # 'Map' is not recursive in 2019 schema |
|
| 3140 | continue |
|
| 3141 | more_regions[-1] += getattr(region, 'get_{}Region'.format(class_))() |
|
| 3142 | if not any(more_regions): |
|
| 3143 | return self._get_recursive_regions(regions, 1, classes) |
|
| 3144 | ret = [] |
|
| 3145 | for r, more in zip(regions, more_regions): |
|
| 3146 | ret.append(r) |
|
| 3147 | ret += self._get_recursive_regions(more, level - 1 if level else 0, classes) |
|
| 3148 | return self._get_recursive_regions(ret, 1, classes) |
|
| 3149 | ||
| 3150 | def _get_recursive_reading_order(self, rogroup): |
|
| 3151 | if isinstance(rogroup, (OrderedGroupType, OrderedGroupIndexedType)): # pylint: disable=undefined-variable |
|
| @@ 5-29 (lines=25) @@ | ||
| 2 | def _region_class(self, x): # pylint: disable=unused-argument |
|
| 3 | return x.__class__.__name__.replace('RegionType', '') |
|
| 4 | ||
| 5 | def _get_recursive_regions(self, regions, level, classes=None): |
|
| 6 | from .constants import PAGE_REGION_TYPES # pylint: disable=relative-beyond-top-level,import-outside-toplevel |
|
| 7 | if level == 1: |
|
| 8 | # stop recursion, filter classes |
|
| 9 | if classes: |
|
| 10 | return [r for r in regions if self._region_class(r) in classes] |
|
| 11 | if regions and regions[0].__class__.__name__ == 'PageType': |
|
| 12 | regions = regions[1:] |
|
| 13 | return regions |
|
| 14 | # find more regions recursively |
|
| 15 | more_regions = [] |
|
| 16 | for region in regions: |
|
| 17 | more_regions.append([]) |
|
| 18 | for class_ in PAGE_REGION_TYPES: |
|
| 19 | if class_ == 'Map' and not isinstance(region, PageType): # pylint: disable=undefined-variable |
|
| 20 | # 'Map' is not recursive in 2019 schema |
|
| 21 | continue |
|
| 22 | more_regions[-1] += getattr(region, 'get_{}Region'.format(class_))() |
|
| 23 | if not any(more_regions): |
|
| 24 | return self._get_recursive_regions(regions, 1, classes) |
|
| 25 | ret = [] |
|
| 26 | for r, more in zip(regions, more_regions): |
|
| 27 | ret.append(r) |
|
| 28 | ret += self._get_recursive_regions(more, level - 1 if level else 0, classes) |
|
| 29 | return self._get_recursive_regions(ret, 1, classes) |
|
| 30 | ||
| 31 | def _get_recursive_reading_order(self, rogroup): |
|
| 32 | if isinstance(rogroup, (OrderedGroupType, OrderedGroupIndexedType)): # pylint: disable=undefined-variable |
|