protected function getDocumentationBody()

in src/DocumentationBuilder.hack [104:151]


  protected function getDocumentationBody(
    Documentable $documentable,
  ): string {
    $docs = DocBlock\DocBlock::nullable(
      $documentable['definition']->getDocComment(),
    );
    $ctx = $this->getContext();

    $md = $this->getPageSections()
      |> Vec\map($$, $s ==> (new $s($ctx, $documentable, $docs))->getMarkdown())
      |> Vec\filter_nulls($$)
      |> Str\join($$, "\n\n");

    $parser_ctx = new Markdown\ParserContext();
    $parser_ctx->setSourceType(Markdown\SourceType::TRUSTED);
    $ast = Markdown\parse($parser_ctx, $md);

    $render_ctx = (new MarkdownExt\RenderContext())
      ->setOutputFormat($this->getContext()->getOutputFormat())
      ->setDocumentable($documentable)
      ->setPathProvider(
        new IndexedPathProvider(
          $this->getContext()->getIndex(),
          $this->getContext()->getPathProvider(),
        ),
      )
      ->appendFilters(
        new MarkdownExt\AutoLinkifyFilter(),
      );
    if ($ctx->isSyntaxHighlightingEnabled()) {
      $render_ctx = $render_ctx->appendFilters(new MarkdownExt\SyntaxHighlightingFilter());
    }
    switch ($ctx->getOutputFormat()) {
      case OutputFormat::MARKDOWN:
        $renderer = new Markdown\MarkdownRenderer($render_ctx);
        break;
      case OutputFormat::HTML:
        $renderer = new Markdown\HTMLRenderer($render_ctx);
        break;
    }
    $out = $renderer->render($ast);
    $fm =
      (new PageSections\FrontMatter($ctx, $documentable, $docs))->getMarkdown();
    if ($fm is nonnull) {
      $out = $fm.$out;
    }
    return $out;
  }