text: #!/usr/bin/python
  
  """
  
  Linkfix - a companion to sphinx's linkcheck builder.
  
  Uses the linkcheck's output file to fix links in docs.
  
  Originally created for this issue:
  https://github.com/scrapy/scrapy/issues/606
  
  Author: dufferzafar
  """
  
  import re
  
  # Used for remembering the file (and its contents)
  # so we don't have to open the same file again.
  _filename = None
  _contents = None
  
  # A regex that matches standard linkcheck output lines
  line_re = re.compile(ur'(.*)\:\d+\:\s\[(.*)\]\s(?:(.*)\sto\s(.*)|(.*))')
  
  # Read lines from the linkcheck output file
  try:
      with open("build/linkcheck/output.txt") as out:
          output_lines = out.readlines()
  except IOError:
      print("linkcheck output not found; please run linkcheck first.")
      exit(1)
  
  # For every line, fix the respective file
  for line in output_lines:
      match = re.match(line_re, line)
  
      if match:
          newfilename = match.group(1)
          errortype = match.group(2)
  
          # Broken links can't be fixed and
          # I am not sure what do with the local ones.
          if errortype.lower() in ["broken", "local"]:
              print("Not Fixed: " + line)
          else:
              # If this is a new file
              if newfilename != _filename:
  
                  # Update the previous file
                  if _filename:
                      with open(_filename, "w") as _file:
                          _file.write(_contents)
  
                  _filename = newfilename
  
                  # Read the new file to memory
                  with open(_filename) as _file:
                      _contents = _file.read()
  
              _contents = _contents.replace(match.group(3), match.group(4))
      else:
          # We don't understand what the current line means!
          print("Not Understood: " + line)
  