aboutsummaryrefslogtreecommitdiffhomepage
path: root/scripts/update_doc
blob: 5457c214414963a505d1596c3a600ccbad251aae (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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
#!/usr/bin/lua
-- Copyright 2007-2011 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 -rf ../doc/modules/')
  os.execute('cd ../; luadoc -d doc/ --nofiles modules/ core/ lexers/lexer.lua')

  -- Insert Markdown in modules into LuaDoc.
  local p = io.popen('grep -r "\\-\\- Markdown:" ../*')
  for file in p:lines() do
    local module

    -- Open the Lua file and extract the Markdown lines.
    local f = io.open(file:match('^[^:]+'))
    local markdown, flag = {}, false
    for line in f:lines() do
      if flag and line:match('^%-%-') then
        local match = line:match('^%-%- ([^\n]+)')
        markdown[#markdown + 1] = match or ''
      elseif flag then -- markdown ended
        break
      elseif line:match('^%-%- Markdown:') then
        flag = true
      elseif line:match('^module') then
        module = line:match("^module%('([^']+)")
      end
    end
    f:close()

    -- Convert the Markdown into HTML.
    markdown = table.concat(markdown, '\n')
    f = io.open('tmp', 'w')
    f:write(markdown)
    f:close()
    f = io.popen('perl ../doc/MultiMarkdown.pl tmp')
    markdown = f:read('*all')
    f:close()
    os.execute('rm tmp')

    -- Insert the Marked down HTML in the LuaDoc HTML file.
    local filename = '../doc/modules/'..module..'.html'
    f = io.open(filename)
    local contents = f:read('*all')
    f:close()
    local s = contents:find('<h2>Functions</h2>')
    if not s then s = contents:find('<h2>Tables</h2>') end
    contents = contents:sub(1, s - 1)..markdown..contents:sub(s)
    f = io.open(filename, 'w')
    f:write(contents)
    f:close()
  end
  p:close()

  -- Modify default CSS.
  os.execute("sed -i 's/pre.example/pre, pre.example/;' ../doc/luadoc.css")
end

-- Generate the Manual.
if manual then
  p = io.popen('ls -1 ../doc/manual/*.md')
  for mdfile in p:lines() do
    local htmlfile = mdfile:match('^(.+).md$')..'.html'
    html = [[
      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
      <html>
      <head>
          <title>Textadept Manual</title>
          <meta charset="utf-8" />
          <link rel="stylesheet" href="luadoc.css" type="text/css" />
      </head>

      <body>
      <div id="container">
      <div id="main">
      <div id="navigation">

        %sidebar%

      </div>
      <div id="content">

        %content%

      </div>
      </div>
      <div id="about">
        <p><a href="http://validator.w3.org/check?uri=referer"><img src="http://www.w3.org/Icons/valid-xhtml10" alt="Valid XHTML 1.0!" height="31" width="88" /></a></p>
      </div>
      </div>
      </body>
      </html>
    ]]

    local sidebar_md = io.popen('../doc/MultiMarkdown.pl ../doc/sidebar.md')
    html = html:gsub('%%sidebar%%', sidebar_md:read('*all'))
    sidebar_md:close()
    local content_md = io.popen('../doc/MultiMarkdown.pl '..mdfile)
    local md = content_md:read('*all'):gsub('%%', '%%%%')
    md = md:gsub('(<h%d>)([^<]+)(</h%d>)',
                 function(s, text, e)
                   return string.format('%s<a name="%s"></a>%s%s', s,
                                        text:gsub(' ', '_'):lower(), text, e)
                 end)
    html = html:gsub('%%content%%', md)
    content_md:close()

    local f = io.open(htmlfile, 'w')
    f:write(html)
    f:close()
  end
  p:close()
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