docs: def parseListOfPoints(s):
      """
         Parse string into a list of points.
  
         Returns a list containing an even number of coordinate strings
      """
      i = 0
  
      # (wsp)? comma-or-wsp-separated coordinate pairs (wsp)?
      # coordinate-pair = coordinate comma-or-wsp coordinate
      # coordinate = sign? integer
      # comma-wsp: (wsp+ comma? wsp*) | (comma wsp*)
      ws_nums = re.split(r"\s*[\s,]\s*", s.strip())
      nums = []
  
      # also, if 100-100 is found, split it into two also
      #  <polygon points="100,-100,100-100,100-100-100,-100-100" />
      for i in range(len(ws_nums)):
          negcoords = ws_nums[i].split("-")
  
          # this string didn't have any negative coordinates
          if len(negcoords) == 1:
              nums.append(negcoords[0])
          # we got negative coords
          else:
              for j in range(len(negcoords)):
                  # first number could be positive
                  if j == 0:
                      if negcoords[0] != '':
                          nums.append(negcoords[0])
                  # otherwise all other strings will be negative
                  else:
                      # unless we accidentally split a number that was in scientific notation
                      # and had a negative exponent (500.00e-1)
                      prev = ""
                      if len(nums):
                          prev = nums[len(nums) - 1]
                      if prev and prev[len(prev) - 1] in ['e', 'E']:
                          nums[len(nums) - 1] = prev + '-' + negcoords[j]
                      else:
                          nums.append('-' + negcoords[j])
  
      # if we have an odd number of points, return empty
      if len(nums) % 2 != 0:
          return []
  
      # now resolve into Decimal values
      i = 0
      while i < len(nums):
          try:
              nums[i] = getcontext().create_decimal(nums[i])
              nums[i + 1] = getcontext().create_decimal(nums[i + 1])
          except InvalidOperation:  # one of the lengths had a unit or is an invalid number
              return []
  
          i += 2
  
      return nums