code: def parse_include(self, start):
          i = start
          while i:
              if self.text[i] == '\n':
                  i += 1
                  break
              i -= 1
          line_start = i
          if not (self.text[line_start:start] == "" or self.text[line_start:start].isspace()):
              self.env.msg.fatal(
                  "Unexpected text before include",
                  messages.SourceRef(line_start, start-1, filename=self.path)
              )
          inc_regex = re.compile(r'`include\s+("([^\r\n]+)"|<([^\r\n]+)>)')
          m_inc = inc_regex.match(self.text, start)
          if m_inc is None:
              self.env.msg.fatal(
                  "Invalid usage of include directive",
                  messages.SourceRef(start, start+7, filename=self.path)
              )
          incl_path_raw = m_inc.group(2) or m_inc.group(3)
          end = m_inc.end(0)-1
          path_start = m_inc.start(1)
          tail_regex = re.compile(r'(?:[ \t]*/\*[^\r\n]*?\*/)*[ \t]*(?://[^\r\n]*?|/\*[^\r\n]*?)?\r?\n')
          if not tail_regex.match(self.text, end+1):
              tail_capture_regex = re.compile(r'[^\r\n]*?\r?\n')
              m = tail_capture_regex.match(self.text, end+1)
              self.env.msg.fatal(
                  "Unexpected text after include",
                  messages.SourceRef(end+1, m.end(0)-1, filename=self.path)
              )
          if os.path.isabs(incl_path_raw):
              incl_path = incl_path_raw
          else:
              for search_path in self.search_paths:
                  incl_path = os.path.join(search_path, incl_path_raw)
                  if os.path.isfile(incl_path):
                      break
              else:
                  incl_path = os.path.join(os.path.dirname(self.path), incl_path_raw)
          if not os.path.isfile(incl_path):
              self.env.msg.fatal(
                  "Could not find '%s' in include search paths" % incl_path_raw,
                  messages.SourceRef(path_start, end, filename=self.path)
              )
          incl_ref = self.incl_ref
          while incl_ref:
              if os.path.samefile(incl_path, incl_ref.path):
                  self.env.msg.fatal(
                      "Include of '%s' results in a circular reference" % incl_path_raw,
                      messages.SourceRef(path_start, end, filename=self.path)
                  )
              incl_ref = incl_ref.parent
          return(end, incl_path)