aboutsummaryrefslogtreecommitdiff
path: root/scripts/update_doc
blob: ccd424444d191a6537b871e9552c038f25f14502 (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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#!/usr/bin/lua
-- Copyright 2007-2012 Mitchell mitchell<att>caladbolg.net. See LICENSE.

local all = false
if #arg == 0 then all = true end

local luadoc = all
local manual = all
local doxygen = all
local adeptsense = all

for _, doctype in ipairs(arg) do
  if doctype == 'luadoc' then
    luadoc = true
  elseif doctype == 'manual' then
    manual = true
  elseif doctype == 'doxygen' then
    doxygen = true
  elseif doctype == 'adeptsense' then
    adeptsense = true
  end
end

-- Generate LuaDoc.
if luadoc then
  os.execute('rm -r ../doc/api/*')
  os.execute('luadoc -d ../doc -doclet markdowndoc '..
             '../modules ../core ../lexers/lexer.lua')
end

-- Generate the Manual.
if manual then
  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">
            <div class="title">Manual</div>
            %(nav)
          </div>
          <div id="toc">
            <div class="title">Contents</div>
            %(toc)
          </div>
          <div id="main">
            %(main)
          </div>
        </div>
      </body>
    </html>
  ]]

  -- Get manual pages.
  local pages = {}
  local lfs = require 'lfs'
  for file in lfs.dir('../doc/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 = '../doc/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 "../doc/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('../doc/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
end

-- Generate Doxygen documentation.
if doxygen then
  os.execute('cd ../; doxygen Doxyfile')
end

-- Create Lua adeptsense for textadept.
if adeptsense then
  os.execute('luadoc -d ../modules/lua -doclet adeptsensedoc '..
             '../modules ../core ../lexers/lexer.lua')
end