'Generate a list of continguous UDL-family ranges.
Generates 3-tuples:
(<udl-family>, <start-byte-offset>, <end-byte-offset>)
where
<udl-family> is one of "M", "CSS", "CSL", "SSL", "TPL"
<start-byte-offset> is inclusive
<end-byte-offset> is exclusive (like a Python range)
Note: For non-UDL languages this will return on chunk that is the
whole document and <udl-family> will be None.'

@property
def udl_family_chunk_ranges(self):

    scimoz = self.scimoz()
    DECORATOR_UDL_FAMILY_TRANSITION = 18
    pos = 0
    length = scimoz.length
    while (pos < length):
        start = scimoz.indicatorStart(DECORATOR_UDL_FAMILY_TRANSITION, pos)
        end = scimoz.indicatorEnd(DECORATOR_UDL_FAMILY_TRANSITION, (start + 1))
        if (start == end == 0):
            (yield (None, 0, length))
            break
        start = max((start - 1), 0)
        (yield (self._udl_family_from_style(scimoz.getStyleAt(pos)), start, end))
        pos = (end + 1)
