*/ declare(strict_types = 1); /** * Applies plain text formatting. */ final class MDFormatter { /** @var boolean */ public static bool $use_underlined_hl = true; /** * Applies markdown formatting for main headline. * * @param string $input Headline text. * * @return string */ public static function formatMarkdownHeadline1(string $input):string { if (self::$use_underlined_hl === false) { return '# ' . $input . PHP_EOL . PHP_EOL; } $hlLength = mb_strlen($input); $output = $input . PHP_EOL; for ($i = 0; $i < $hlLength; $i++) { $output .= '='; } $output .= PHP_EOL . PHP_EOL; return $output; } /** * Applies markdown formatting for secondary headline. * * @param string $input Headline text. * * @return string */ public static function formatMarkdownHeadline2(string $input):string { if (self::$use_underlined_hl === false) { return '## ' . $input . PHP_EOL . PHP_EOL; } $hlLength = mb_strlen($input); $output = $input . PHP_EOL; for ($i = 0; $i < $hlLength; $i++) { $output .= '-'; } $output .= PHP_EOL . PHP_EOL; return $output; } /** * Applies markdown formatting for tertiary headline. * * @param string $input Headline text. * * @return string */ public static function formatMarkdownHeadline3(string $input):string { return '### ' . $input . PHP_EOL; } /** * Returns a horizontal rule in markdown. * * @return string */ public static function formatMarkdownHorizontalRule():string { return '___' . PHP_EOL; } /** * Applies markdown formatting for a named link. * * @param string $link_name Link text. * @param string $link_url Target URL. * * @return string */ public static function formatMarkdownNamedLink(string $link_name, string $link_url):string { return "[{$link_name}]({$link_url})"; } /** * Applies markdown formatting for a block quote. * * @param string $content Content of the block quote. * * @return string */ public static function formatMarkdownBlockQuote(string $content):string { $output = ''; $lines = \explode(PHP_EOL, $content); foreach ($lines as $line) { $output .= '> ' . $line . PHP_EOL; } return $output; } /** * Applies markdown formatting for a code block. * * @param string $content Content of the code block. * @param string $language Progamming language for syntax highlighting. Optional. * * @return string */ public static function formatMarkdownCodeBlock(string $content, string $language = ''):string { $output = '```' . $language . ' ' . $content . ' ```' . PHP_EOL; return $output; } /** * Applies markdown formatting for an unordered list item. * * @param string $content Content of the list item. * @param string $delimiter Starting character of a line. * * @return string */ public static function formatMarkdownUnorderedListItem(string $content, string $delimiter = '-'):string { if (\strpos($content, PHP_EOL) === false) { return $delimiter . ' ' . $content . PHP_EOL; } $lines = \explode(PHP_EOL, $content); $output = $delimiter . ' ' . $lines[0] . PHP_EOL; foreach ($lines as $i => $line) { if ($i === 0) continue; $output .= ' ' . $line . PHP_EOL; } return $output; } }