1 """
2 Character offset tools.
3 """
4 __version__ = "$Revision: 1.11 $"
5
6 import types
7
9 mergedRange = [0,0]
10 assert(overlap(range1, range2))
11 if range1[0] < range2[0]:
12 mergedRange[0] = range1[0]
13 else:
14 mergedRange[0] = range2[0]
15 if range1[1] > range2[1]:
16 mergedRange[1] = range1[1]
17 else:
18 mergedRange[1] = range2[1]
19 return (mergedRange[0],mergedRange[1])
20
22 tuples = charOffsetToTuples(charOffset)
23 assert(len(tuples) == 1)
24 return tuples[0]
25
27 """ Splits a comma separated list of character offsets into tuples of integers.
28
29 Keyword arguments:
30 charOffset -- a string in the format "0-2,5-20"
31
32 Returns:
33 A list of tuples of two integers each
34 """
35 tuples = []
36 ranges = charOffset.split(",")
37 for r in ranges:
38 numbers = r.split("-")
39 tuples.append( (int(numbers[0]),int(numbers[1])) )
40 return tuples
41
43 if range1[0] <= range2[0] and range1[1] >= range2[1]:
44 return True
45 else:
46 return False
47
49 return range[1] - range[0]
50
52 l1 = length(range1)
53 l2 = length(range2)
54 if contains(range1, range2):
55 return l1 - l2
56 elif contains(range2, range1):
57 return l2 - l1
58 elif overlap(range1, range2):
59 if range1[1] >= range2[0]:
60 return length( (range1[0], range2[1]) )
61 else:
62 return length( (range2[0], range1[1]) )
63 else:
64 return l1 + l2
65
67 """ Checks whether two ranges (f.e. character offsets overlap)
68
69 This snippet by Steven D'Aprano is from the forum of
70 www.thescripts.com.
71
72 Keyword arguments:
73 range1 -- a tuple where range1[0] <= range1[1]
74 range1 -- a tuple where range2[0] <= range2[1]
75
76 Returns:
77 True (ranges overlap) or False (no overlap)
78 """
79 assert(range1[0] <= range1[1]), (range1, range2)
80 assert(range2[0] <= range2[1]), (range1, range2)
81
82
83
84
85
86
87
88
89
90 return not (range1[1] <= range2[0] or range2[1] <= range1[0])
91
93 if len(tuples) == 2 and type(tuples[0]) == types.IntType and type(tuples[1]) == types.IntType:
94 tuples = [tuples]
95 charOffset = ""
96 isFirst = True
97 for tuple in tuples:
98 if not isFirst:
99 charOffset += ","
100 charOffset += str(tuple[0]) + "-" + str(tuple[1])
101 isFirst = False
102 return charOffset
103