docs: def __parse(self, lines):
          """ Parse a list of lines and create
          an internal property dictionary """
  
          # Every line in the file must consist of either a comment
          # or a key-value pair. A key-value pair is a line consisting
          # of a key which is a combination of non-white space characters
          # The separator character between key-value pairs is a '=',
          # ':' or a whitespace character not including the newline.
          # If the '=' or ':' characters are found, in the line, even
          # keys containing whitespace chars are allowed.
  
          # A line with only a key according to the rules above is also
          # fine. In such case, the value is considered as the empty string.
          # In order to include characters '=' or ':' in a key or value,
          # they have to be properly escaped using the backslash character.
  
          # Some examples of valid key-value pairs:
          #
          # key     value
          # key=value
          # key:value
          # key     value1,value2,value3
          # key     value1,value2,value3 \
          #         value4, value5
          # key
          # This key= this value
          # key = value1 value2 value3
  
          # Any line that starts with a '#' or '!' is considerered a comment
          # and skipped. Also any trailing or preceding whitespaces
          # are removed from the key/value.
  
          # This is a line parser. It parses the
          # contents like by line.
  
          lineno=0
          i = iter(lines)
  
          for line in i:
              lineno += 1
              line = line.strip()
              # Skip null lines
              if not line: continue
              # Skip lines which are comments
              if line[0] in ('#','!'): continue
              # Some flags
              escaped=False
              # Position of first separation char
              sepidx = -1
              # A flag for performing wspace re check
              flag = 0
              # Check for valid space separation
              # First obtain the max index to which we
              # can search.
              m = self.othercharre.search(line)
              if m:
                  first, last = m.span()
                  start, end = 0, first
                  flag = 1
                  wspacere = re.compile(r'(?<![\\\=\:])(\s)')
              else:
                  if self.othercharre2.search(line):
                      # Check if either '=' or ':' is present
                      # in the line. If they are then it means
                      # they are preceded by a backslash.
  
                      # This means, we need to modify the
                      # wspacere a bit, not to look for
                      # : or = characters.
                      wspacere = re.compile(r'(?<![\\])(\s)')
                  start, end = 0, len(line)
  
              m2 = wspacere.search(line, start, end)
              if m2:
                  # print 'Space match=>',line
                  # Means we need to split by space.
                  first, last = m2.span()
                  sepidx = first
              elif m:
                  # print 'Other match=>',line
                  # No matching wspace char found, need
                  # to split by either '=' or ':'
                  first, last = m.span()
                  sepidx = last - 1
                  # print line[sepidx]
  
  
              # If the last character is a backslash
              # it has to be preceded by a space in which
              # case the next line is read as part of the
              # same property
              while line[-1] == '\\':
                  # Read next line
                  nextline = next(i)
                  nextline = nextline.strip()
                  lineno += 1
                  # This line will become part of the value
                  line = line[:-1] + nextline
  
              # Now split to key,value according to separation char
              if sepidx != -1:
                  key, value = line[:sepidx], line[sepidx+1:]
              else:
                  key,value = line,''
              self._keyorder.append(key)
              self.process_pair(key, value)