MD_STD/MDFormatter.php

168 lines
3.7 KiB
PHP

<?PHP
/**
* Applies plain text formatting.
*
* @author Joshua Ramon Enslin <joshua@museum-digital.de>
*/
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.
*
* @return string
*/
public static function formatMarkdownUnorderedListItem(string $content):string {
if (\strpos($content, PHP_EOL) === false) {
return '- ' . $content . PHP_EOL;
}
$lines = \explode(PHP_EOL, $content);
$output = '- ' . $lines[0] . PHP_EOL;
foreach ($lines as $i => $line) {
if ($i === 0) continue;
$output .= ' ' . $line . PHP_EOL;
}
return $output;
}
}