docs: def build_files(outdir):
      """Build the files!"""
      # Make sure there is actually a configuration file
      config_file_dir = os.path.join(cwd, "config.py")
      if not os.path.exists(config_file_dir):
          sys.exit(
              "There dosen't seem to be a configuration file. Have you run the init command?")
      else:
          sys.path.insert(0, cwd)
          try:
              from config import website_name, website_description, website_language, home_page_list
          except:
              sys.exit(
                  "ERROR: Some of the crucial configuration values could not be found! Maybe your config.py is too old. Run 'blended init' to fix.")
          try:
              from config import website_description_long, website_license, website_url, author_name, author_bio, plugins, minify_css, minify_js, custom_variables
          except:
              website_description_long = ""
              website_license = ""
              website_url = ""
              author_name = ""
              author_bio = ""
              plugins = []
              custom_variables = {}
              minify_css = False
              minify_js = False
              print("WARNING: Some of the optional configuration values could not be found! Maybe your config.py is too old. Run 'blended init' to fix.\n")
  
      # Create the build folder
      build_dir = os.path.join(cwd, outdir)
      if "." not in outdir and ".." not in outdir and "..." not in outdir and "...." not in outdir and "....." not in outdir:
          replace_folder(build_dir)
  
      # Make sure there is actually a header template file
      header_file_dir = os.path.join(cwd, "templates", "header.html")
      if not os.path.exists(header_file_dir):
          sys.exit(
              "There dosen't seem to be a header template file. You need one to generate.")
  
      # Make sure there is actually a footer template file
      footer_file_dir = os.path.join(cwd, "templates", "footer.html")
      if not os.path.exists(footer_file_dir):
          sys.exit(
              "There dosen't seem to be a footer template file. You need one to generate.")
  
      # Open the header and footer files for reading
      header_file = open(header_file_dir, "r")
      footer_file = open(footer_file_dir, "r")
  
      # Create the HTML page listing
      page_list_item_file = os.path.join(cwd, "templates", "page_list_item.html")
      if not os.path.exists(page_list_item_file):
          page_list = '<ul class="page-list">\n'
          for root, dirs, files in os.walk(os.path.join(cwd, "content")):
              for filename in files:
                  top = os.path.dirname(os.path.join(root, filename))
                  top2 = top.replace(os.path.join(cwd, "content"), "", 1)
                  if platform != "win32":
                      subfolder = top2.replace("/", "", 1)
                  else:
                      subfolder = top2.replace("\\", "", 1)
  
                  if subfolder == "":
                      subfolder_link = ""
                  else:
                      subfolder_link = subfolder + "/"
                  file_modified = time.ctime(
                      os.path.getmtime(os.path.join(root, filename)))
                  newFilename = get_html_filename(filename)
                  newFilename2 = get_html_clear_filename(filename)
                  page_list = page_list + '<li class="page-list-item"><a href="' + subfolder_link + newFilename + \
                      '">' + newFilename2 + '</a><span class="page-list-item-time"> - ' + \
                      str(file_modified) + '</span></li>\n'
          page_list = page_list + '</ul>'
      else:
          with open(page_list_item_file, 'r') as f:
              page_list_item = f.read()
  
          page_list = ""
          for root, dirs, files in os.walk(os.path.join(cwd, "content")):
              dirs[:] = [d for d in dirs if "_" not in d]
              for filename in files:
                  p_content = convert_text(os.path.join(root, filename))
                  top = os.path.dirname(os.path.join(root, filename))
                  top2 = top.replace(os.path.join(cwd, "content"), "", 1)
                  if platform != "win32":
                      subfolder = top2.replace("/", "", 1)
                  else:
                      subfolder = top2.replace("\\", "", 1)
  
                  if subfolder == "":
                      subfolder_link = ""
                  else:
                      subfolder_link = subfolder + "/"
                  file_modified = time.ctime(
                      os.path.getmtime(os.path.join(root, filename)))
                  file_modified_day = str(datetime.strptime(
                  file_modified, "%a %b %d %H:%M:%S %Y"))[8:10]
                  file_modified_year = str(datetime.strptime(
                      file_modified, "%a %b %d %H:%M:%S %Y"))[:4]
                  file_modified_month = str(datetime.strptime(
                      file_modified, "%a %b %d %H:%M:%S %Y"))[5:7]
                  month_name = calendar.month_name[int(file_modified_month)]
                  newFilename = get_html_filename(filename)
                  newFilename2 = get_html_clear_filename(filename)
  
                  page_list = page_list + page_list_item.replace("{path}", subfolder_link + newFilename).replace("{name}", newFilename2).replace(
                      "{date}", str(file_modified)).replace("{content}", p_content).replace("{content_short}", p_content[:250] + "...").replace("{day}", file_modified_day).replace("{month}", file_modified_month).replace("{month_name}", month_name).replace("{year}", file_modified_year)
  
      if home_page_list == "yes" or home_page_list:
          # Open the home page file (index.html) for writing
          home_working_file = open(os.path.join(cwd, outdir, "index.html"), "w")
  
          home_working_file.write(header_file.read())
  
          # Make sure there is actually a home page template file
          home_templ_dir = os.path.join(cwd, "templates", "home_page.html")
          if os.path.exists(home_templ_dir):
              home_templ_file = open(home_templ_dir, "r")
              home_working_file.write(home_templ_file.read())
          else:
              print("\nNo home page template file found. Writing page list to index.html")
              home_working_file.write(page_list)
  
          home_working_file.write(footer_file.read())
  
          home_working_file.close()
  
      for root, dirs, files in os.walk(os.path.join(cwd, "content")):
          dirs[:] = [d for d in dirs if "_" not in d]
          for filename in files:
              if not filename.startswith("_"):
                  header_file = open(header_file_dir, "r")
                  footer_file = open(footer_file_dir, "r")
                  newFilename = get_html_filename(filename)
  
                  top = os.path.dirname(os.path.join(root, filename))
                  top2 = top.replace(os.path.join(cwd, "content"), "", 1)
                  if platform != "win32":
                      subfolder = top2.replace("/", "", 1)
                  else:
                      subfolder = top2.replace("\\", "", 1)
  
                  if subfolder == "":
                      currents_working_file = open(
                          os.path.join(cwd, outdir, newFilename), "w")
                  else:
                      create_folder(os.path.join(cwd, outdir, subfolder))
                      currents_working_file = open(os.path.join(
                          cwd, outdir, subfolder, newFilename), "w")
  
                  # Write the header
                  currents_working_file.write(header_file.read())
  
                  text_cont1 = convert_text(os.path.join(root, filename))
  
                  if "+++++" in text_cont1.splitlines()[1]:
                      page_template_file = text_cont1.splitlines()[0]
                      text_cont1 = text_cont1.replace(
                          text_cont1.splitlines()[0], "")
                      text_cont1 = text_cont1.replace(
                          text_cont1.splitlines()[1], "")
                  else:
                      page_template_file = "content_page"
  
                  # Write the text content into the content template and onto the
                  # build file
                  content_templ_dir = os.path.join(
                      cwd, "templates", page_template_file + ".html")
                  if os.path.exists(content_templ_dir):
                      content_templ_file = open(content_templ_dir, "r")
                      content_templ_file1 = content_templ_file.read()
                      content_templ_file2 = content_templ_file1.replace(
                          "{page_content}", text_cont1)
                      currents_working_file.write(content_templ_file2)
                  else:
                      currents_working_file.write(text_cont1)
  
                  # Write the footer to the build file
                  currents_working_file.write("\n" + footer_file.read())
  
                  # Close the build file
                  currents_working_file.close()
  
      # Find all the nav(something) templates in the `templates` folder and
      # Read their content to the dict
      navs = {}
  
      for file in os.listdir(os.path.join(cwd, "templates")):
          if "nav" in file:
              nav_cont = open(os.path.join(cwd, "templates", file), "r")
              navs[file.replace(".html", "")] = nav_cont.read()
              nav_cont.close()
  
      forbidden_dirs = set(["assets", "templates"])
      blended_version_message = "Built with Blended v" + \
          str(app_version)
      build_date = str(datetime.now().date())
      build_time = str(datetime.now().time())
      build_datetime = str(datetime.now())
  
      # Replace global variables such as site name and language
      for root, dirs, files in os.walk(os.path.join(cwd, outdir)):
          dirs[:] = [d for d in dirs if d not in forbidden_dirs]
          for filename in files:
              if filename != "config.pyc" and filename != "config.py":
                  newFilename = get_html_clear_filename(filename)
                  page_file = filename.replace(".html", "")
                  page_folder = os.path.basename(os.path.dirname(os.path.join(
                      root, filename))).replace("-", "").replace("_", "").title()
                  page_folder_orig = os.path.basename(
                      os.path.dirname(os.path.join(root, filename)))
                  top = os.path.dirname(os.path.join(root, filename))
                  top2 = top.replace(os.path.join(cwd, outdir), "", 1)
                  if platform != "win32":
                      subfolder = top2.replace("/", "", 1)
                  else:
                      subfolder = top2.replace("\\", "", 1)
                  if subfolder == "":
                      subfolder_folder = os.path.join(cwd, outdir, filename)
                  else:
                      subfolder_folder = os.path.join(
                          cwd, outdir, subfolder, filename)
                  file_modified = time.ctime(
                      os.path.getmtime(os.path.join(root, filename)))
                  file_modified_day = str(datetime.strptime(
                      file_modified, "%a %b %d %H:%M:%S %Y"))[8:10]
                  file_modified_year = str(datetime.strptime(
                      file_modified, "%a %b %d %H:%M:%S %Y"))[:4]
                  file_modified_month = str(datetime.strptime(
                  file_modified, "%a %b %d %H:%M:%S %Y"))[5:7]
                  month_name = calendar.month_name[int(file_modified_month)]
  
                  # The Loop!
                  for line in fileinput.input(subfolder_folder, inplace=1):
                      for var in custom_variables:
                          line = line.replace(
                              "{" + var + "}", custom_variables[var])
                      if len(plugins) != 0:
                          for i in range(len(plugins)):
                              if sys.version_info[0] < 2:
                                  main = importlib.import_module(plugins[i])
                              elif sys.version_info[0] < 3:
                                  main = __import__(plugins[i])
                              content = main.main()
                              line = line.replace(
                                  "{" + plugins[i] + "}", content)
                      if "{nav" in line:
                          navname = line.split("{")[1].split("}")[0]
                          line = line.replace(
                              "{" + navname + "}", navs[(line.split("{"))[1].split("}")[0]])
                      line = line.replace(
                          "{website_description}", website_description)
                      line = line.replace(
                          "{website_description_long}", website_description_long)
                      line = line.replace("{website_license}", website_license)
                      line = line.replace("{website_language}", website_language)
                      line = line.replace("{website_url}", website_url)
                      line = line.replace("{author_name}", author_name)
                      line = line.replace("{author_bio}", author_bio)
                      line = line.replace("{random_number}",
                                          str(randint(0, 100000000)))
                      line = line.replace("{build_date}", build_date)
                      line = line.replace("{build_time}", build_time)
                      line = line.replace("{build_datetime}", build_datetime)
                      line = line.replace("{page_list}", page_list)
                      line = line.replace("{page_name}", newFilename)
                      line = line.replace("{page_filename}", page_file)
                      line = line.replace("{page_file}", filename)
                      line = line.replace("{" + filename + "_active}", "active")
                      if page_folder != outdir.title():
                          line = line.replace("{page_folder}", page_folder)
                      else:
                          line = line.replace("{page_folder}", "")
                      if page_folder_orig != outdir:
                          line = line.replace(
                              "{page_folder_orig}", page_folder_orig)
                      else:
                          line = line.replace("{page_folder_orig}", "")
                      line = line.replace("{page_date}", str(file_modified))
                      line = line.replace("{page_day}", str(file_modified_day))
                      line = line.replace("{page_year}", str(file_modified_year))
                      line = line.replace(
                          "{page_month}", str(file_modified_month))
                      line = line.replace(
                          "{page_month_name}", str(month_name))
                      line = line.replace("{blended_version}", str(app_version))
                      line = line.replace(
                          "{blended_version_message}", blended_version_message)
                      line = line.replace("{website_name}", website_name)
                      top = os.path.join(cwd, outdir)
                      startinglevel = top.count(os.sep)
                      relative_path = ""
                      level = root.count(os.sep) - startinglevel
                      for i in range(level):
                          relative_path = relative_path + "../"
                      line = line.replace("{relative_root}", relative_path)
                      print(line.rstrip('\n'))
                  fileinput.close()
  
      # Copy the asset folder to the build folder
      if os.path.exists(os.path.join(cwd, "templates", "assets")):
          if os.path.exists(os.path.join(cwd, outdir, "assets")):
              shutil.rmtree(os.path.join(cwd, outdir, "assets"))
          shutil.copytree(os.path.join(cwd, "templates", "assets"),
                          os.path.join(cwd, outdir, "assets"))
  
      for root, dirs, files in os.walk(os.path.join(cwd, outdir, "assets")):
          for file in files:
              if not file.startswith("_"):
                  if (file.endswith(".sass")) or (file.endswith(".scss")):
                      sass_text = open(os.path.join(root, file)).read()
                      text_file = open(os.path.join(
                          root, file[:-4] + "css"), "w")
                      if sass_text != "":
                          text_file.write(sass.compile(string=sass_text))
                      else:
                          print(file + " is empty! Not compiling Sass.")
                      text_file.close()
                  if file.endswith(".less"):
                      less_text = open(os.path.join(root, file)).read()
                      text_file = open(os.path.join(
                          root, file[:-4] + "css"), "w")
                      if less_text != "":
                          text_file.write(lesscpy.compile(StringIO(less_text)))
                      else:
                          print(file + " is empty! Not compiling Less.")
                      text_file.close()
                  if file.endswith(".styl"):
                      try:
                          styl_text = open(os.path.join(root, file)).read()
                          text_file = open(os.path.join(
                              root, file[:-4] + "css"), "w")
                          if styl_text != "":
                              text_file.write(Stylus().compile(styl_text))
                          else:
                              print(file + " is empty! Not compiling Styl.")
                          text_file.close()
                      except:
                          print("Not able to build with Stylus! Is it installed?")
                          try:
                              subprocess.call["npm", "install", "-g", "stylus"]
                          except:
                              print("NPM (NodeJS) not working. Is it installed?")
                  if file.endswith(".coffee"):
                      coffee_text = open(os.path.join(root, file)).read()
                      text_file = open(os.path.join(root, file[:-6] + "js"), "w")
                      if coffee_text != "":
                          text_file.write(coffeescript.compile(coffee_text))
                      else:
                          print(file + " is empty! Not compiling CoffeeScript.")
                      text_file.close()
                  if minify_css:
                      if file.endswith(".css"):
                          css_text = open(os.path.join(root, file)).read()
                          text_file = open(os.path.join(root, file), "w")
                          if css_text != "":
                              text_file.write(cssmin(css_text))
                          text_file.close()
                  if minify_js:
                      if file.endswith(".js"):
                          js_text = open(os.path.join(root, file)).read()
                          text_file = open(os.path.join(root, file), "w")
                          if js_text != "":
                              text_file.write(jsmin(js_text))
                          text_file.close()