4 # name isn't really appropriate now ...
5 # see mudela-book: cater for different formats in uniform way
21 sys.stderr.write ("can't open file: %s\n" % f)
25 sys.stderr.write ("gulped emty file: %s\n" % f)
33 latex_author_re = regex.compile(r'\\author{\([^}]+\)}')
34 latex_title_re = regex.compile(r'\\title{\([^}]+\)}')
44 def read_latex_header (fn):
46 i = regex.search( '\\\\begin{document}', s)
49 sys.stderr.write ("ls-latex: no \\begin{document} in %s\n" % fn)
50 s = "\\author{(unknown)}\\title{(file: %s)}" % fn
53 s = regsub.gsub('%.*$', '', s)
54 s = regsub.gsub('\n', ' ', s)
59 if latex_author_re.search (s) == -1 :
60 sys.stderr.write ("ls-latex: can't find author in %s\n" % fn)
61 header.author = 'unknown'
63 header.author = latex_author_re.group (1)
64 if latex_title_re.search (s) == -1:
65 sys.stderr.write ("ls-latex: can't find title in %s\n" % fn)
66 header.title = "(file: %s)" % fn
68 header.title = latex_title_re.group (1)
70 header.outfile = regsub.gsub ('\.latex$', '.ps.gz', header.outfile)
71 header.outfile = regsub.gsub ('\.tex$', '.ps.gz', header.outfile)
72 header.outfile = regsub.gsub ('\.doc$', '.ps.gz', header.outfile)
73 header.format = 'gzipped postscript'
77 bib_author_re = regex.compile('% *AUTHOR *= *\(.*\)$')
78 bib_title_re = regex.compile('% *TITLE *= *\(.*\)$')
82 if bib_author_re.search (s) == -1 :
83 sys.stderr.write ('gulped file: ' + fn + '\n')
88 header.author = bib_author_re.group (1)
89 if bib_title_re.search (s) == -1:
90 sys.stderr.write ('gulped file: ' + fn + '\n')
92 header.title = bib_title_re.group (1)
93 header.outfile = regsub.gsub ( '\.bib$', '.html' , fn)
94 header.format = 'HTML'
98 def read_pod_header (fn):
99 header = Latex_head ()
101 i = regex.search( '[^\n \t]', s)
103 i = regex.search( '\n\n', s)
106 sys.stderr.write ('gulped file: ' + fn + '\n')
108 i = regex.search( '\n\n', s)
111 header.outfile = regsub.gsub ('\.pod$', '.html', fn)
114 texinfo_author_re = regex.compile(r'^@author *\(.*\) *$')
115 texinfo_title_re = regex.compile(r'^@title *\(.*\) *$')
117 def read_texinfo_header (fn):
118 header = Latex_head ()
120 if texinfo_author_re.search (s) == -1 :
121 sys.stderr.write ("ls-latex: can't find author in %s\n" % fn)
122 header.author = 'unknown'
124 header.author = texinfo_author_re.group (1)
125 if texinfo_title_re.search (s) == -1:
126 sys.stderr.write ("ls-latex: can't find title in %s\n" % fn)
127 header.title = "(file: %s)" % fn
128 i = regex.search( '@node ', s)
130 i = regex.search( ',', s)
132 sys.stderr.write ('gulped file: ' + fn + '\n')
137 header.outfile = regsub.gsub ('\.texinfo$', '.html', fn)
138 header.format = 'HTML'
141 def read_tely_header (fn):
142 header = Latex_head ()
144 if texinfo_author_re.search (s) == -1 :
145 sys.stderr.write ("ls-latex: can't find author in %s\n" % fn)
146 header.author = 'unknown'
148 header.author = texinfo_author_re.group (1)
149 if texinfo_title_re.search (s) == -1:
150 sys.stderr.write ("ls-latex: can't find title in %s\n" % fn)
151 header.title = "(file: %s)" % fn
152 i = regex.search( '@settitle', s)
154 i = regex.search( '\n', s)
156 sys.stderr.write ('gulped file: ' + fn + '\n')
161 header.outfile = regsub.gsub ('\.tely', '.html', fn)
162 header.format = 'HTML'
166 # should make a 'next_parens'
167 yo_article_re = regex.compile('article(\\([^)]*\\))[ \t\n]*(\\([^)]*\\))')
168 yo_report_re = regex.compile('report(\\([^)]*\\))[\t\n ]*(\\([^)]*\\))')
169 yo_sect_re = regex.compile('sect(\\([^)]*\\))')
170 yo_chap_re = regex.compile('sect(\\([^)]*\\))')
172 def read_yo_header (fn):
173 header = Latex_head ()
177 elif yo_report_re.search (s) <> -1:
178 header.author = yo_report_re.group(2)
179 header.title = yo_report_re.group(1)
180 elif yo_article_re.search (s) <> -1:
181 header.author = yo_article_re.group(2)
182 header.title = yo_article_re.group(1)
183 elif yo_chap_re.search (s) <> -1:
184 header.title = yo_chap_re.group (1)
185 elif yo_sect_re.search (s) <> -1:
186 header.title = yo_sect_re.group (1)
188 header.outfile = regsub.gsub ('\.yo$', '.html', fn)
189 header.format = 'HTML'
192 def print_html_head (l,o,h):
195 l.write ('<li><a href=%s>%s (%s)</a>' % (pre + h.outfile, h.title, h.format ))
197 l.write ('<p>by %s</p>' % h.author)
201 sys.stdout.write ("Usage: ls-latex [OPTION]... FILE...\n"
202 "Generate html index file for FILE...\n\n"
204 + " -h, --help print this help\n"
205 + " -p, --package=DIR specify package\n"
211 (options, files) = getopt.getopt(sys.argv[1:],
212 'e:hp:', ['help', 'prefix=', 'package=', 'title='])
225 elif o == '-h' or o == '--help':
227 elif o == '-p' or o == '--package':
230 sys.path.append (topdir + '/stepmake/bin')
231 from packagepython import *
232 package = Package (topdir)
233 packager = Packager ()
237 l.write ('<html><title>%s</title><h1> %s</h1><ul>\n' % (title, title))
241 if regex.search ('\\.bib$', x) <> -1:
242 head = bib_header (x)
243 elif regex.search ('\\.pod$', x) <> -1:
244 head = read_pod_header (x)
245 elif regex.search ('\\.texinfo$', x) <> -1:
246 head = read_texinfo_header (x)
247 elif regex.search ('\\.tely$', x) <> -1:
248 head = read_tely_header (x)
249 elif regex.search ('\\.yo$', x) <> -1:
250 head = read_yo_header (x)
252 head = read_latex_header (x)
254 head.title = head.filename
255 print_html_head (l, pre, head)
257 l.write ('</ul></html>')