def partition_raw_range(range): """takes a text range and breaks it up into its constituents: /foo/+10;$-15 ...would yield... left: /foo/ left_offset: +10 separator: ; right: $ right_offset: -15 """ # At this point we can be sure that ``range`` is a valid prefix range. # ``EX_PREFIX_RANGE`` won't match correctly here because the suffixed # command has been stripped, so we use ``EX_STANDALONE_RANGE`` instead. # parts = EX_PREFIX_RANGE.search(range).groupdict() parts = EX_STANDALONE_RANGE.search(range).groupdict() if parts['incomplete']: return EX_RANGE( left=parts['inc_laddress'] or '.', left_offset=parts['inc_loffset'] or '0', separator=parts['suf_alt_separator'] or parts['pref_alt_separator'], right=parts['inc_raddress'] or '.', right_offset=parts['inc_loffset'] or '0', ) return EX_RANGE(left=parts['laddress'], left_offset=parts['loffset'] or '0', separator=parts['separator'], right=parts['raddress'], right_offset=parts['roffset'] or '0')
def partition_raw_range(range): """takes a text range and breaks it up into its constituents: /foo/+10;$-15 ...would yield... left: /foo/ left_offset: +10 separator: ; right: $ right_offset: -15 """ # At this point we can be sure that ``range`` is a valid prefix range. # ``EX_PREFIX_RANGE`` won't match correctly here because the suffixed # command has been stripped, so we use ``EX_STANDALONE_RANGE`` instead. # parts = EX_PREFIX_RANGE.search(range).groupdict() parts = EX_STANDALONE_RANGE.search(range).groupdict() if parts['incomplete']: return EX_RANGE( left=parts['inc_laddress'] or '.', left_offset=parts['inc_loffset'] or '0', separator=parts['suf_alt_separator'] or parts['pref_alt_separator'], right=parts['inc_raddress'] or '.', right_offset=parts['inc_loffset'] or '0', ) return EX_RANGE( left=parts['laddress'], left_offset=parts['loffset'] or '0', separator=parts['separator'], right=parts['raddress'], right_offset=parts['roffset'] or '0' )
def partition_raw_only_range(range): parts = EX_STANDALONE_RANGE.search(range).groupdict() if parts['openended']: return EX_RANGE(left=parts['openended'], left_offset='0', separator='', right='', right_offset='0') elif parts['incomplete']: return EX_RANGE( left=parts['inc_laddress'] or '.', left_offset=parts['inc_loffset'] or '0', separator=parts['suf_alt_separator'] or parts['pref_alt_separator'], right=parts['inc_raddress'] or '.', right_offset=parts['inc_loffset'] or '0', ) else: return EX_RANGE( left=parts['laddress'], left_offset=parts['loffset'] or '0', separator=parts['separator'], right=parts['raddress'], right_offset=parts['roffset'] or '0', )
def partition_raw_only_range(range): parts = EX_STANDALONE_RANGE.search(range).groupdict() if parts['openended']: return EX_RANGE( left=parts['openended'], left_offset='0', separator='', right='', right_offset='0' ) elif parts['incomplete']: return EX_RANGE( left=parts['inc_laddress'] or '.', left_offset=parts['inc_loffset'] or '0', separator=parts['suf_alt_separator'] or parts['pref_alt_separator'], right=parts['inc_raddress'] or '.', right_offset=parts['inc_loffset'] or '0', ) else: return EX_RANGE( left=parts['laddress'], left_offset=parts['loffset'] or '0', separator=parts['separator'], right=parts['raddress'], right_offset=parts['roffset'] or '0', )