forked from Mirror/wren
145 lines
3.6 KiB
Python
Executable File
145 lines
3.6 KiB
Python
Executable File
#!/usr/bin/python
|
|
|
|
import glob
|
|
import markdown
|
|
import os
|
|
import shutil
|
|
import sys
|
|
import time
|
|
from datetime import datetime
|
|
|
|
TEMPLATE = """
|
|
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
|
|
<title>Wren - {title}</title>
|
|
<link rel="stylesheet" type="text/css" href="style.css" />
|
|
<link href='http://fonts.googleapis.com/css?family=Sanchez:400|Source+Sans+Pro:300,400,700,400italic,700italic|Source+Code+Pro:300,400' rel='stylesheet' type='text/css'>
|
|
</head>
|
|
<body id="top">
|
|
<a href="https://github.com/munificent/wren">
|
|
<img style="position: absolute; top: 0; right: 0; border: 0; z-index: 100;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub">
|
|
</a>
|
|
<div class="header">
|
|
<div class="page">
|
|
<h1><a href="index.html">wren</a></h1>
|
|
<h2>a minimal class-based scripting language</h2>
|
|
</div>
|
|
</div>
|
|
<div class="page">
|
|
<div class="nav">
|
|
<h2>Welcome</h2>
|
|
<ul>
|
|
<li>Getting Started</li>
|
|
</ul>
|
|
<h2>Language</h2>
|
|
<ul>
|
|
<li><a href="syntax.html">Syntax</a></li>
|
|
<li>Method calls</li>
|
|
<li>Variables</li>
|
|
<li>Blocks</li>
|
|
<li><a href="flow-control.html">Flow control</a></li>
|
|
</ul>
|
|
<h2>Objects</h2>
|
|
<ul>
|
|
<li>Primitives</li>
|
|
<li>Classes</li>
|
|
<li>Functions</li>
|
|
<li>Fibers</li>
|
|
<li>Lists</li>
|
|
<li>Maps</li>
|
|
</ul>
|
|
<h2>Usage</h2>
|
|
<ul>
|
|
<li>Standalone</li>
|
|
<li>Embedding</li>
|
|
</ul>
|
|
</div>
|
|
<div class="content">
|
|
<h1>{title}</h1>
|
|
{html}
|
|
<p class="footer">Last modified on {mod}. By Bob Nystrom.</p>
|
|
</div>
|
|
</body>
|
|
</html>
|
|
"""
|
|
|
|
def format_file(path, skip_up_to_date):
|
|
basename = os.path.basename(path)
|
|
basename = basename.split('.')[0]
|
|
|
|
out_path = "build/site/" + basename + ".html"
|
|
|
|
# See if it's up to date.
|
|
source_mod = os.path.getmtime(path)
|
|
source_mod = max(source_mod, os.path.getmtime('doc/site/template.html'))
|
|
|
|
dest_mod = 0
|
|
if os.path.exists(out_path):
|
|
dest_mod = os.path.getmtime(out_path)
|
|
|
|
if skip_up_to_date and source_mod < dest_mod:
|
|
return
|
|
|
|
title = ""
|
|
|
|
# Read the markdown file and preprocess it.
|
|
contents = ""
|
|
with open(path, "r") as input:
|
|
# Read each line, preprocessing the special codes.
|
|
for line in input:
|
|
stripped = line.lstrip()
|
|
indentation = line[:len(line) - len(stripped)]
|
|
|
|
if stripped.startswith("^"):
|
|
command,_,args = stripped.rstrip("\n").lstrip("^").partition(" ")
|
|
args = args.strip()
|
|
|
|
if command == "title":
|
|
title = args
|
|
else:
|
|
print "UNKNOWN COMMAND:", command, args
|
|
|
|
else:
|
|
contents = contents + line
|
|
|
|
html = markdown.markdown(contents, ['def_list', 'codehilite'])
|
|
|
|
modified = datetime.fromtimestamp(os.path.getmtime(path))
|
|
mod_str = modified.strftime('%B %d, %Y')
|
|
|
|
fields = {'title': title, 'html': html, 'mod': mod_str}
|
|
|
|
with open("doc/site/template.html") as f:
|
|
template = f.read()
|
|
|
|
# Write the html output.
|
|
with open(out_path, 'w') as out:
|
|
out.write(template.format(**fields))
|
|
|
|
print "converted", basename
|
|
|
|
|
|
def format_files(skip_up_to_date):
|
|
for f in glob.iglob("doc/site/*.markdown"):
|
|
format_file(f, skip_up_to_date)
|
|
|
|
|
|
# Clean the output directory.
|
|
if os.path.exists("build/site"):
|
|
shutil.rmtree("build/site")
|
|
os.mkdir("build/site")
|
|
|
|
# Process each markdown file.
|
|
format_files(False)
|
|
|
|
# Copy the CSS file.
|
|
shutil.copyfile("doc/site/style.css", "build/site/style.css")
|
|
|
|
# TODO(bob): Check for CSS modification.
|
|
if len(sys.argv) == 2 and sys.argv[1] == '--watch':
|
|
while True:
|
|
format_files(True)
|
|
time.sleep(0.3)
|