diff options
author | Frederic Peters <fpeters@entrouvert.com> | 2008-04-29 12:06:30 +0000 |
---|---|---|
committer | Frederic Peters <fpeters@entrouvert.com> | 2008-04-29 12:06:30 +0000 |
commit | 3b93e1b952d046ca20459194e8ea649e1e0794bc (patch) | |
tree | d882a011f53ea0d7b53bcde22696d7d272bafa96 /bindings/utils.py | |
parent | 34e4fd0b5aae872344a16267efac847f45108ca7 (diff) | |
download | lasso-3b93e1b952d046ca20459194e8ea649e1e0794bc.tar.gz lasso-3b93e1b952d046ca20459194e8ea649e1e0794bc.tar.xz lasso-3b93e1b952d046ca20459194e8ea649e1e0794bc.zip |
[project @ fpeters@0d.be-20080217115557-8qtcrc1vzb75f75c]
merged Benjamin branch
Original author: Frederic Peters <fpeters@0d.be>
Date: 2008-02-17 12:55:57.088000+01:00
Diffstat (limited to 'bindings/utils.py')
-rw-r--r-- | bindings/utils.py | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/bindings/utils.py b/bindings/utils.py index c313bce3..2f6408f2 100644 --- a/bindings/utils.py +++ b/bindings/utils.py @@ -48,3 +48,55 @@ def format_underscore_as_camelcase(var): var = re.sub(r'([a-z])(ID)([A-Z]|$)', r'\1Id\3', var) # replace standing ID by Id return var + + +def last(x): + return x[len(x)-1] + +def common_prefix(x,y): + max = min(len(x),len(y)) + last = 0 + for i in range(max): + if x[i] != y[i]: + return min(i,last+1) + if x[i] == '_': + last = i + return max + +def pgroup(group,prev): + level, l = group + i = 0 + for x in l: + if i == 0: + prefix = prev + else: + prefix = level + if isinstance(x,tuple): + pgroup(x,prefix) + else: + print prefix * ' ' + x[prefix:] + i = i + 1 + +def group(list): + list.sort() + pile = [(0,[])] + prev = "" + for x in list: + l, g = last(pile) + u = common_prefix(x,prev) + # Find the good level of insertion + while u < l: + pile.pop() + l, g = last(pile) + # Insert here + if u == l: + g.append(x) + elif u > l: + t = (u, [g.pop(),x]) + g.append(t) + pile.append(t) + prev = x + return pile[0] + + + |