code: def parse_dimensions(text):
      
      components = _dimension_separator.split(text)
      if len(components) == 0:
          raise DimensionError("No dimensions found in string.")
  
      # Split each component into size and units
      pairs = []
      units = 0
      for component in components:
          value, unit = _split_dimension(component)
          pairs.append((value, unit))
          if unit is not None: units += 1
  
      # Work out what to do with empty units
      if units == 1 and pairs[-1][1]:
          # We need to infer the units
          empty_unit = _unit_lookup[pairs[-1][1]]
      else:
          empty_unit = 1
  
      # Compile and return the result
      result = []
      for value, unit in pairs:
          if unit: result.append(value * _unit_lookup[unit])
          else: result.append(value * empty_unit)
      return tuple(result)
docs: Parses a set of dimensions into tuple of values representing the
      sizes in points.
  
      The dimensions that this method supports are exactly as for
      parse_dimension. It supports multiple dimensions, separated by
      whitespace, comma, semicolon, hyphen, or the letter x. The units
      may follow each dimension (in which case they can be different in
      each case) or only after the last one. Because no-units also means
      points, if you have some dimensions in the middle of the set with
      units and some without, then those without will be interpreted as
      points: i.e. the 2 in "1in, 2, 3mm" will be treated as 2 points,
      where as the 1 and 2 in "1, 2, 3mm" will be treated as
      millimeters.