Add missing xref.html XSLT postprocessing
[senf.git] / doclib / SConscript
1 # -*- python -*-
2
3 Import('env')
4 import SENFSCons
5
6 ###########################################################################
7
8 import yaptu
9
10 def modules():
11     global EXTRA_MODULES
12     rv = []
13     ix = len(env.Dir('#').abspath)+1
14     for module in env.Alias('all_docs')[0].sources:
15         if module.name != 'html.stamp' : continue 
16         if not [ x for x in EXTRA_MODULES if env.Dir(x[1]).abspath == module.dir.abspath]:
17             rv.append(('lib%s' % module.dir.dir.dir.name, module.dir.abspath[ix:]))
18     rv.sort()
19     return [ (name, env.Dir(path).abspath[ix:]) for name,path in EXTRA_MODULES ] + rv
20
21 def indices():
22     ix = len(env.Dir('#').abspath)+1
23     return [ doc.dir.abspath[ix:]
24              for doc in env.Alias('all_docs')[0].sources
25              if doc.name == "search.idx" ]
26
27 def writeTemplate(target = None, source = None, env = None):
28     file(target[0].abspath,"w").write(yaptu.process(env['TEMPLATE'], globals(), env.Dictionary()))
29
30 writeTemplate = env.Action(writeTemplate, varlist = [ 'TEMPLATE' ])
31
32 ###########################################################################
33
34 # Extra documentation modules which are handled (named) different from
35 # library modules
36 EXTRA_MODULES = [
37     ('Overview', '#/doc/html'),
38     ('Examples', '#/Examples/doc/html'),
39     ('SENFScons', '#/senfscons/doc/html') ]
40
41 HEADER = """<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
42 <html>
43 <head>
44 <title>$title</title>
45 <link href="@TOPDIR@/doc/html/doxygen.css" rel="stylesheet" type="text/css">
46 <link href="@TOPDIR@/doclib/senf.css" rel="stylesheet" type="text/css">
47 <style type="text/css">
48 div.tabs ul li.$projectname a {obr} background-color: #EDE497; {cbr}
49 </style>
50 </head>
51 <body>
52
53 <div id="head">
54   <div id="search">
55     <form action="@TOPDIR@/doclib/search.php" method="get">
56       Search: <input type="text" name="query" size="20" accesskey="s"/> 
57     </form>
58   </div>
59   <h1>SENF Extensible Network Framework</h1>
60   <h2>{TITLE}</h2>
61 </div>
62
63 <div id="content1">
64   <div id="content2">
65     <div class="tabs menu">
66       <ul>
67 {{      for name, path in modules():
68           <li class="{name}"><a href="@TOPDIR@/{path}/index.html">{name}</a></li>
69 }}
70       </ul>
71     </div>"""
72
73 OVERVIEW_EXTRA_HEADER="""
74     <div class="tabs">
75       <ul>
76       <li><a href="@TOPDIR@/doc/html/xref.html">Open Issues</a></li>
77         <li><a class="ext" href="http://svn.berlios.de/wsvn/senf/?op=log&rev=0&sc=0&isdir=1">SVN ChangeLog</a></li>
78         <li><a class="ext" href="http://developer.berlios.de/projects/senf">SENF @ BerliOS</a></li>
79         <li><a class="ext" href="http://openfacts.berlios.de/index-en.phtml?title=SENF+Network+Framework">Wiki</a></li>
80       </ul>
81     </div>"""
82
83 FOOTER = """<hr style="width:0px;border:none;clear:both;margin:0;padding:0" />
84   </div>
85 </div>
86 <div id="footer">
87   <span>
88     <a href="mailto:senf-dev@lists.berlios.de">Contact: senf-dev@lists.berlios.de</a> |
89     Copyright &copy; 2006 Fraunhofer Gesellschaft, SatCom, Stefan Bund
90   </span>
91 </div>
92 </body></html>"""
93
94 SEARCH_PHP="""
95 <?php include 'search_functions.php'; ?>
96 <?php search(); ?>"""
97
98 SEARCH_PATHS_PHP="""<?php
99 function paths() {
100   return array(
101 {{  for index in indices():
102       "../{index}/",
103 }}
104   );
105 }
106 ?>"""
107
108 env.Command('doxy-header.html', None, writeTemplate,
109             TEMPLATE = HEADER,
110             TITLE = "Documentation and API reference")
111 env.Command('doxy-header-overview.html', None, writeTemplate,
112             TEMPLATE = HEADER+OVERVIEW_EXTRA_HEADER,
113             TITLE = "Introduction and Overview")
114 env.Command('doxy-footer.html', None, writeTemplate,
115             TEMPLATE = FOOTER)
116 env.Alias('all_docs',
117           env.Command('search.php', 'html-munge.xsl',
118                       [ writeTemplate,
119                         'xsltproc --nonet --html --stringparam topdir .. -o - $SOURCE $TARGET 2>/dev/null'
120                         + r'| sed -e "s/\[\[/<?/g" -e "s/\]\]/?>/g" > ${TARGET}.tmp',
121                         'mv ${TARGET}.tmp ${TARGET}' ],
122                       TEMPLATE = (HEADER
123                                   + OVERVIEW_EXTRA_HEADER
124                                   + SEARCH_PHP.replace('<?','[[').replace('?>',']]')
125                                   + FOOTER),
126                       TITLE = "Search results"))
127 env.Alias('all_docs',
128           env.Command('search_paths.php', None, writeTemplate,
129                       TEMPLATE = SEARCH_PATHS_PHP))