"/\n([ ]*)-/", 'replacement' => "\n$1\\-"], ['pattern' => "/_/", 'replacement' => "\\_"], ['pattern' => "/\|/", 'replacement' => "\\\|"], ['pattern' => "/\*/", 'replacement' => "\\\*"], ['pattern' => "/\[/", 'replacement' => "\\\["], ['pattern' => "/\]/", 'replacement' => "\\\]"], ]; $result = $string; foreach ($replacements as $replacement) { $result = \preg_replace($replacement['pattern'], $replacement['replacement'], $result); } return $result; } /** */ function bold( string $piece ) : string { return sprintf('__%s__', $piece); } /** */ function link( string $label, string $url ) : string { return sprintf('[%s](%s)', $label, $url); } /** */ function image( string $label, string $url ) : string { return sprintf('![%s](%s)', $label, $url); } /** */ function headline( int $level, string $string ) : string { if ($level < 1) { throw (new \Exception(sprintf('invalid level: %d', $level))); } return sprintf("%s %s\n\n", str_repeat('#', $level), $string); } /** */ function sectionend( ) : string { return sprintf("\n\n"); } /** */ function paragraph( string $string ) : string { return sprintf("%s\n\n", $string); } /** */ function code( string $string ) : string { return sprintf("```\n%s\n```", $string); } /** */ function item( int $level, string $string ) : string { if ($level < 1) { throw (new \Exception(sprintf('invalid level: %d', $level))); } return sprintf("%s- %s\n", str_repeat(' ', $level-1), $string); } /** */ function rule( ) : string { return sprintf("---\n\n"); } /** * @param null|array $titles {null|list} * @param array $data {list>} */ function table( array $titles, array $data ) : string { $md = ''; if (! is_null($titles)) { $md .= sprintf( "| %s |\n", implode(' | ', $titles) ); $md .= sprintf( "| %s |\n", implode(' | ', array_map(function (string $title) {return ':--';}, $titles)) ); } foreach ($data as $line) { $md .= sprintf( "| %s |\n", implode(' | ', $line) ); } return $md; } ?>