99 lines
2.1 KiB
PHP
99 lines
2.1 KiB
PHP
<?php
|
|
|
|
if (empty($argv[1])) {
|
|
die("Usage: make.php SOURCE_MARKDOWN > DESTINATION_HTML\n");
|
|
}
|
|
|
|
$lines = file($argv[1]);
|
|
$out = '';
|
|
$in_list = $in_section = false;
|
|
$section_class = null;
|
|
|
|
function escape($str) {
|
|
$str = htmlspecialchars($str);
|
|
$str = str_replace('<!--', '<sup>', $str);
|
|
$str = str_replace('-->', '</sup>', $str);
|
|
|
|
$str = preg_replace_callback('/`(.*?)`/', function ($match) {
|
|
return '<code>' . $match[1] . '</code>';
|
|
}, $str);
|
|
|
|
$str = preg_replace_callback('/\[(.*?)\]\((.*?)\)/', function ($match) {
|
|
return sprintf('<a href="%s">%s</a>', $match[2], $match[1]);
|
|
}, $str);
|
|
|
|
return $str;
|
|
}
|
|
|
|
foreach ($lines as $line)
|
|
{
|
|
if (preg_match('/^---+(?:\s*=(\w+))?$/', $line, $match)) {
|
|
if ($in_section) {
|
|
if ($in_list) {
|
|
$out .= ' </ul>' . PHP_EOL;
|
|
$in_list = false;
|
|
}
|
|
|
|
$out .= '</section>' . PHP_EOL . PHP_EOL;
|
|
$in_section = false;
|
|
}
|
|
|
|
$section_class = !empty($match[1]) ? $match[1] : null;
|
|
|
|
continue;
|
|
}
|
|
|
|
if ('' === trim($line)) {
|
|
continue;
|
|
}
|
|
|
|
if (!$in_section) {
|
|
$out .= sprintf('<section class="%s">', $section_class) . PHP_EOL;
|
|
$in_section = true;
|
|
}
|
|
|
|
if (preg_match('/^(#+)\s+/', $line, $match)) {
|
|
$size = strlen($match[1]);
|
|
$title = trim(substr($line, strlen($match[0])));
|
|
$out .= sprintf(' <h%d>%s</h%d>', $size, escape($title), $size) . PHP_EOL;
|
|
}
|
|
elseif (preg_match('/^\*\s+/', $line)) {
|
|
if (!$in_list) {
|
|
$out .= ' <ul>' . PHP_EOL;
|
|
$in_list = true;
|
|
}
|
|
|
|
$out .= sprintf(' <li>%s</li>', escape(trim(substr($line, 2)))) . PHP_EOL;
|
|
}
|
|
else {
|
|
$out .= ' ' . trim($line) . PHP_EOL;
|
|
}
|
|
}
|
|
|
|
if ($in_section) {
|
|
if ($in_list) {
|
|
$out .= ' </ul>' . PHP_EOL;
|
|
$in_list = false;
|
|
}
|
|
|
|
$out .= '</section>' . PHP_EOL . PHP_EOL;
|
|
$in_section = false;
|
|
}
|
|
|
|
?>
|
|
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<title>Slides</title>
|
|
<link rel="stylesheet" type="text/css" href="style.css" media="screen,presentation" />
|
|
<link rel="stylesheet" type="text/css" href="print.css" media="print" />
|
|
<script type="text/javascript" src="slides.js"></script>
|
|
</head>
|
|
|
|
<body>
|
|
|
|
<?=$out?>
|
|
|
|
</body>
|
|
</html>
|