docs: def _process_config_item(item, dirname):
      """
      Process one item from the configuration file, which contains multiple items
      saved as dictionary.
  
      This function reads additional data from the config and do some
      replacements - for example, if you specify url, it will download data
      from this url and so on.
  
      Args:
          item (dict): Item, which will be processed.
  
      Note:
          Returned data format::
              {
                  "link": "link to html page/file",
                  "html": "html code from file/url",
                  "vars": {
                      "varname": {
                          "data": "matching data..",
                          ...
                      }
                  }
              }
  
      Returns:
          dict: Dictionary in format showed above.
      """
      item = copy.deepcopy(item)
      html = item.get("html", None)
  
      if not html:
          raise UserWarning("Can't find HTML source for item:\n%s" % str(item))
  
      # process HTML link
      link = html if "://" in html else os.path.join(dirname, html)
      del item["html"]
  
      # replace $name with the actual name of the field
      for key, val in item.items():
          if "notfoundmsg" in val:
              val["notfoundmsg"] = val["notfoundmsg"].replace("$name", key)
  
      return {
          "html": _get_source(link),
          "link": link,
          "vars": item
      }