Ignore:
Timestamp:
Dec 30, 2014, 8:50:23 AM (4 years ago)
Author:
cameron
Message:

UCD set to run list function

File:
1 edited

Legend:

Unmodified
Added
Removed
  • proto/charsetcompiler/UCD/unicode_set.py

    r4365 r4372  
    351351   return iset
    352352
     353def uset_to_range_list(s):
     354    i = Uset_Iterator(s)
     355    rl = []
     356    open_range = False
     357    range_first = 0
     358    pos = 0
     359    while not i.at_end():
     360        (q_type, q_length) = i.current_run()
     361        if q_type == Empty:
     362            if open_range:
     363                rl.append((range_first, pos - 1))
     364                open_range = False
     365            pos += q_length * quad_bits
     366            i.advance(q_length)
     367        elif q_type == Full:
     368            if not open_range:
     369                range_first = pos
     370                open_range = True
     371            pos += q_length * quad_bits
     372            i.advance(q_length)
     373        else:  # mixed quad
     374            q = i.get_quad()
     375            qpos = pos
     376            while q:
     377                if q & 1 == 0:
     378                    if open_range:
     379                        rl.append((range_first, qpos - 1))
     380                        open_range = False
     381                else:
     382                    if not open_range:
     383                        range_first = qpos
     384                        open_range = True
     385                q >>= 1
     386                qpos += 1
     387            pos += quad_bits
     388            i.advance(1)
     389    if open_range:
     390        rl.append((range_first, 0x10FFFF))
     391    return rl
     392
    353393UCD_point_regexp = re.compile("^([0-9A-F]{4,6})\s+;")
    354394UCD_range_regexp = re.compile("^([0-9A-F]{4,6})[.][.]([0-9A-F]{4,6})\s+;")
Note: See TracChangeset for help on using the changeset viewer.