docs: def _get_properties(self, rule, p_selectors, p_parents, p_children, scope, media, c_lineno, c_property, c_codestr):
          """
          Implements properties and variables extraction
          """
          prop, value = (_prop_split_re.split(c_property, 1) + [None])[:2]
          try:
              is_var = (c_property[len(prop)] == '=')
          except IndexError:
              is_var = False
          prop = prop.strip()
          prop = self.do_glob_math(
              prop, rule[CONTEXT], rule[OPTIONS], rule, True)
          if prop:
              if value:
                  value = value.strip()
                  value = self.calculate(
                      value, rule[CONTEXT], rule[OPTIONS], rule)
              _prop = (scope or '') + prop
              if is_var or prop.startswith('$') and value is not None:
                  if isinstance(value, basestring):
                      if '!default' in value:
                          if _prop in rule[CONTEXT]:
                              value = None
                          else:
                              value = value.replace(
                                  '!default', '').replace('  ', ' ').strip()
                  elif isinstance(value, ListValue):
                      value = ListValue(value)
                      for k, v in value.value.items():
                          if v == '!default':
                              if _prop in rule[CONTEXT]:
                                  value = None
                              else:
                                  del value.value[k]
                                  value = value.first(
                                  ) if len(value) == 1 else value
                              break
                  if value is not None:
                      rule[CONTEXT][_prop] = value
              else:
                  _prop = self.apply_vars(
                      _prop, rule[CONTEXT], rule[OPTIONS], rule, True)
                  rule[PROPERTIES].append((c_lineno, _prop,
                                           to_str(value) if value is not None else None))