docs: def parse_zone(zonefile=None, zone=None):
      '''
      Parses a zone file. Can be passed raw zone data on the API level.
  
      CLI Example:
  
      .. code-block:: bash
  
          salt ns1 dnsutil.parse_zone /var/lib/named/example.com.zone
      '''
      if zonefile:
          try:
              with salt.utils.files.fopen(zonefile, 'r') as fp_:
                  zone = salt.utils.stringutils.to_unicode(fp_.read())
          except Exception:
              pass
  
      if not zone:
          return 'Error: Zone data was not found'
  
      zonedict = {}
      mode = 'single'
      for line in zone.splitlines():
          comps = line.split(';')
          line = comps[0].strip()
          if not line:
              continue
          comps = line.split()
          if line.startswith('$'):
              zonedict[comps[0].replace('$', '')] = comps[1]
              continue
          if '(' in line and ')' not in line:
              mode = 'multi'
              multi = ''
          if mode == 'multi':
              multi += ' {0}'.format(line)
              if ')' in line:
                  mode = 'single'
                  line = multi.replace('(', '').replace(')', '')
              else:
                  continue
          if 'ORIGIN' in zonedict:
              comps = line.replace('@', zonedict['ORIGIN']).split()
          else:
              comps = line.split()
          if 'SOA' in line:
              if comps[1] != 'IN':
                  comps.pop(1)
              zonedict['ORIGIN'] = comps[0]
              zonedict['NETWORK'] = comps[1]
              zonedict['SOURCE'] = comps[3]
              zonedict['CONTACT'] = comps[4].replace('.', '@', 1)
              zonedict['SERIAL'] = comps[5]
              zonedict['REFRESH'] = _to_seconds(comps[6])
              zonedict['RETRY'] = _to_seconds(comps[7])
              zonedict['EXPIRE'] = _to_seconds(comps[8])
              zonedict['MINTTL'] = _to_seconds(comps[9])
              continue
          if comps[0] == 'IN':
              comps.insert(0, zonedict['ORIGIN'])
          if not comps[0].endswith('.') and 'NS' not in line:
              comps[0] = '{0}.{1}'.format(comps[0], zonedict['ORIGIN'])
          if comps[2] == 'NS':
              zonedict.setdefault('NS', []).append(comps[3])
          elif comps[2] == 'MX':
              if 'MX' not in zonedict:
                  zonedict.setdefault('MX', []).append({'priority': comps[3],
                                                        'host': comps[4]})
          elif comps[3] in ('A', 'AAAA'):
              zonedict.setdefault(comps[3], {})[comps[0]] = {
                  'TARGET': comps[4],
                  'TTL': comps[1],
              }
          else:
              zonedict.setdefault(comps[2], {})[comps[0]] = comps[3]
      return zonedict