aboutsummaryrefslogtreecommitdiff
path: root/doc/gen_manual.lua
blob: 5fa06bfe942b411d9ae559065084b3f6c151020e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
-- Copyright 2007-2012 Mitchell mitchell.att.foicica.com. See LICENSE.

local HTML = [[
  <!doctype html>
  <html>
    <head>
      <title>%(title)</title>
      <link rel="stylesheet" href="../style.css" type="text/css" />
      <meta charset="utf-8" />
    </head>
    <body>
      <div id="content">
        <div id="nav">
          <h2>Manual</h2>
          %(nav)
        </div>
        <div id="toc">
          <h2>Contents</h2>
          %(toc)
        </div>
        <div id="main">
          %(main)
        </div>
      </div>
    </body>
  </html>
]]

-- Get manual pages.
local pages = {}
local lfs = require 'lfs'
for file in lfs.dir('manual/') do
  if file:find('^%d+_.-%.md$') then pages[#pages + 1] = file end
end
table.sort(pages)
pages[#pages + 1] = '../../README.md'
pages[#pages + 1] = '../../CHANGELOG.md'
pages[#pages + 1] = '../../THANKS.md'

-- Create the navigation list.
local navfile = 'manual/.nav.md'
local f = io.open(navfile, 'wb')
for _, page in ipairs(pages) do
  local name = page:match('^%A+(.-)%.md$'):gsub('(%l)(%u)', '%1 %2')
  if page:find('^%.%./') then page = page:match('^%A+(.+)$') end
  f:write('* [', name, '](', page:gsub('%.md$', '.html'), ')\n')
end
f:close()
local p = io.popen('markdown "'..navfile..'"')
local nav = p:read('*all')
p:close()

-- Write HTML.
for _, page in ipairs(pages) do
  local name = page:match('^%A+(.-)%.md$'):gsub('(%l)(%u)', '%1 %2')
  local p = io.popen('markdown -f toc -T "manual/'..page..'"')
  local toc, main = p:read('*all'):match('^(.-\n</ul>\n)(.+)$')
  p:close()
  if page:find('^%.%./') then page = page:match('^%A+(.+)$') end
  f = io.open('manual/'..page:gsub('%.md$', '.html'), 'wb')
  local html = HTML:gsub('%%%(([^)]+)%)', {
    title = name..' - Textadept Manual', nav = nav, toc = toc, main = main
  })
  f:write(html)
  f:close()
end