fragment.py 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. #coding=utf-8
  2. class FragmentBox():
  3. def __init__(self, fragment):
  4. self.fragments = [fragment,]
  5. def getFragments(self):
  6. return self.fragments
  7. def cut(self, fragment):
  8. new_fragments = []
  9. for item in self.fragments:
  10. new_fragments.extend(item.cut(fragment))
  11. self.fragments = new_fragments
  12. class Fragment():
  13. def __init__(self, start, end, prefix, length):
  14. self.start = int(start)
  15. self.end = int(end)
  16. self.prefix = prefix
  17. self.length = length
  18. @property
  19. def start_code(self):
  20. num = str(self.start)
  21. num = "0" * (self.length - len(num)) + num
  22. return self.prefix + num
  23. @property
  24. def end_code(self):
  25. num = str(self.end)
  26. num = "0" * (self.length - len(num)) + num
  27. return self.prefix + num
  28. def cut(self, fragment):
  29. if self.start == self.end:
  30. if fragment.end == self.start or fragment.start == self.start:
  31. return []
  32. if fragment.start < self.start and fragment.end > self.end:
  33. return []
  34. return [self,]
  35. if fragment.start <= self.start and fragment.end >= self.end:
  36. return []
  37. if fragment.start > self.start and fragment.end < self.end:
  38. start_fragment = Fragment(self.start, fragment.start - 1, self.prefix, self.length)
  39. end_fragment = Fragment(fragment.end + 1, self.end, self.prefix, self.length)
  40. return [start_fragment, end_fragment]
  41. if fragment.end >= self.start and fragment.start <= self.start:
  42. new_fragment = Fragment(fragment.end + 1, self.end, self.prefix, self.length)
  43. return [new_fragment, ]
  44. if fragment.start <= self.end and fragment.end >= self.end:
  45. new_fragment = Fragment(self.start, fragment.start - 1, self.prefix, self.length)
  46. return [new_fragment, ]
  47. return [self,]