Exemple #1
0
def enter_head(obj):
    if mutable.isstruct(obj) and len(obj) > 0:
        return enter_head(obj[0])
    if mutable.isstruct(obj):
        return obj
    else:
        return mutable.Selection(obj, 0)
Exemple #2
0
def enter_tail(obj):
    if mutable.isstruct(obj) and len(obj) > 0:
        return enter_tail(obj[len(obj)-1])
    if mutable.isstruct(obj):
        return obj
    else:
        return mutable.Selection(obj, len(obj))
Exemple #3
0
def next_selection(obj):
    if isinstance(obj, mutable.Document):
        return mutable.Selection(obj, len(obj))
    index = obj.parent.index(obj)
    if mutable.isstruct(obj.parent):
        if index + 1 < len(obj.parent):
            nxt = obj.parent[index+1]
            if mutable.islist(nxt):
                return mutable.Selection(nxt, 0)
            else:
                return nxt
        else:
            return next_selection(obj.parent)
    else:
        return mutable.Selection(obj.parent, index+1)
Exemple #4
0
def prev_selection(obj):
    if isinstance(obj, mutable.Document):
        return mutable.Selection(obj, 0)
    index = obj.parent.index(obj)
    if mutable.isstruct(obj.parent):
        if index > 0:
            nxt = obj.parent[index-1]
            if mutable.islist(nxt):
                return mutable.Selection(nxt, len(nxt))
            else:
                return nxt
        else:
            return prev_selection(obj.parent)
    else:
        return mutable.Selection(obj.parent, index)
Exemple #5
0
def walk_next_selection(obj):
    if isinstance(obj, mutable.Selection):
        if mutable.iscont(obj.container) and obj.head < obj.last:
            return enter_head(obj.container[obj.head])
        else:
            obj = obj.container
    if isinstance(obj, mutable.Document):
        return mutable.Selection(obj, len(obj))
    index = obj.parent.index(obj)
    if mutable.isstruct(obj.parent):
        if index + 1 < len(obj.parent):
            nxt = obj.parent[index+1]
            return enter_head(nxt)
        else:
            return walk_next_selection(obj.parent)
    else:
        return mutable.Selection(obj.parent, index+1)
Exemple #6
0
def walk_prev_selection(obj):
    if isinstance(obj, mutable.Selection):
        if mutable.iscont(obj.container) and obj.head > 0:
            return enter_tail(obj.container[obj.head-1])
        else:
            obj = obj.container
    if isinstance(obj, mutable.Document):
        return mutable.Selection(obj, 0)
    index = obj.parent.index(obj)
    if mutable.isstruct(obj.parent):
        if index > 0:
            nxt = obj.parent[index-1]
            return enter_tail(nxt)
        else:
            return walk_prev_selection(obj.parent)
    else:
        return mutable.Selection(obj.parent, index)