]> git.donarmstrong.com Git - lilypond.git/blob - stepmake/bin/ls-latex.py
98eb250d51f3a0a40915d76c6c445c31c8c0116f
[lilypond.git] / stepmake / bin / ls-latex.py
1 #!@PYTHON@
2
3 # name isn't really appropriate now ...
4
5 name = 'ls-latex'
6 version = '0.1'
7
8 import sys
9 import os
10 import string
11
12 def gulp_file (fn):
13         f = open (fn)
14         return f.read ()
15
16 import __main__
17 import glob
18 import regex
19
20 latex_author_re = regex.compile(r'\\author{\([^}]+\)}')
21 latex_title_re = regex.compile(r'\\title{\([^}]+\)}')
22
23 class Latex_head:
24     def __init__ (self):
25         self.author = ''
26         self.title = ''
27         self.date = ''
28         self.format = ''
29
30         
31 def read_latex_header (fn):
32     s = gulp_file (fn)
33     i = regex.search( '\\\\begin{document}', s)
34
35     if i < 0:
36         sys.stderr.write( 'Huh? empty file?')
37         s = '\\author{(unknown)}\\title{(unknown)}'
38         
39     s = s[:i]
40     s = regsub.gsub('%.*$', '', s)
41     s = regsub.gsub('\n', ' ', s)
42
43     header = Latex_head()
44     header.filename= fn;
45
46     if latex_author_re.search (s) == -1 :
47         sys.stderr.write( 'huh? No author?')
48         header.author = 'unknown'
49     else:
50         header.author = latex_author_re.group (1)
51     if latex_title_re.search (s) == -1:
52         sys.stderr.write( 'huh?  No title?')
53         header.title = 'unknown'
54     else:
55             header.title = latex_title_re.group (1)
56     header.outfile = fn
57     header.outfile = regsub.gsub ('\.latex$', '.ps.gz', header.outfile)
58     header.outfile = regsub.gsub ('\.tex$', '.ps.gz', header.outfile)
59     header.outfile = regsub.gsub ('\.doc$', '.ps.gz', header.outfile)
60     header.format = 'gzipped postscript'
61     return  header
62
63
64 bib_author_re = regex.compile('% *AUTHOR *= *\(.*\)$')
65 bib_title_re = regex.compile('% *TITLE *= *\(.*\)$')
66
67 def bib_header (fn):
68     s = gulp_file (fn)
69     if bib_author_re.search (s) == -1 :
70         sys.stderr.write ('gulped file: ' + fn + '\n')
71         raise 'huh?'
72
73     header = Latex_head()
74     header.filename= fn;
75     header.author = bib_author_re.group (1)
76     if bib_title_re.search (s) == -1:
77         sys.stderr.write ('gulped file: ' + fn + '\n')
78         raise 'huh?'    
79     header.title = bib_title_re.group (1)
80     header.outfile = regsub.gsub ( '\.bib$', '.html' , fn)
81     header.format = 'HTML'    
82     return header
83
84
85 def read_pod_header (fn):
86     header = Latex_head ()
87     s = gulp_file (fn)
88     i = regex.search( '[^\n \t]', s)
89     s = s[i:]
90     i = regex.search( '\n\n', s)
91     s = s[i+2:]    
92     if i < 0:
93         sys.stderr.write ('gulped file: ' + fn + '\n')
94         raise 'huh?'
95     i = regex.search( '\n\n', s)
96     header.title = s[:i]
97     header.filename = fn
98     header.outfile = regsub.gsub ('\.pod$', '.html', fn)
99     return  header
100
101 def read_texinfo_header (fn):
102     header = Latex_head ()
103     s = gulp_file (fn)
104     i = regex.search( '@node ', s)
105     s = s[i+5:]
106     i = regex.search( ',', s)
107     if i < 0:
108         sys.stderr.write ('gulped file: ' + fn + '\n')
109         raise 'huh?'
110     header.title = s[:i]
111     header.filename = fn
112     header.outfile = regsub.gsub ('\.texinfo$', '.html', fn)
113     header.format = 'HTML'
114     return  header
115
116 def read_tely_header (fn):
117     header = Latex_head ()
118     s = gulp_file (fn)
119     i = regex.search( '@settitle', s)
120     s = s[i+10:]
121     i = regex.search( '\n', s)
122     if i < 0:
123         sys.stderr.write ('gulped file: ' + fn + '\n')
124         raise 'huh?'
125     header.title = s[:i]
126     header.filename = fn
127     header.outfile = regsub.gsub ('\.tely', '.html', fn)
128     header.format = 'HTML'
129     return  header
130
131 # urg
132 # should make a 'next_parens'
133 yo_article_re = regex.compile('article(\\([^)]*\\))[ \t\n]*(\\([^)]*\\))')
134 yo_report_re = regex.compile('report(\\([^)]*\\))[\t\n ]*(\\([^)]*\\))')
135 yo_sect_re  =  regex.compile('sect(\\([^)]*\\))')
136 yo_chap_re  =  regex.compile('sect(\\([^)]*\\))')
137
138 def read_yo_header (fn):
139     header = Latex_head ()
140     s = gulp_file (fn)
141     if 0:
142             pass
143     elif yo_report_re.search (s) <> -1:
144             header.author = yo_report_re.group(2)
145             header.title = yo_report_re.group(1)
146     elif yo_article_re.search (s) <> -1:
147             header.author = yo_article_re.group(2)
148             header.title = yo_article_re.group(1)
149     elif yo_chap_re.search (s) <> -1:
150             header.title = yo_chap_re.group (1)
151     elif yo_sect_re.search (s) <> -1:
152             header.title = yo_sect_re.group (1)
153     header.filename = fn
154     header.outfile = regsub.gsub ('\.yo$', '.html', fn)
155     header.format = 'HTML'
156     return  header
157
158 def print_html_head (l,o,h):
159     pre =o
160
161     l.write ('<li><a href=%s>%s (%s)</a>' % (pre + h.outfile, h.title, h.format ))
162     if h.author:
163         l.write ('<p>by %s</p>' % h.author)
164     l.write ('</li>\n')
165
166 def help ():
167     sys.stdout.write ("Usage: ls-latex [OPTION]... FILE...\n"
168                  "Generate html index file for FILE...\n\n"
169                  + "Options:\n"
170                  + "  -h, --help             print this help\n"
171                  + "  -p, --package=DIR      specify package\n"
172                       )
173     sys.exit (0)
174
175 import getopt
176
177 (options, files) = getopt.getopt(sys.argv[1:], 
178     'e:hp:', ['help', 'prefix=', 'package=', 'title='])
179
180 tex = ''
181 output =''
182 pre = ''
183 title = ''
184 for opt in options:
185     o = opt[0]
186     a = opt[1]
187     if o == '--prefix':
188         pre = a
189     elif o == '--title':
190         title = a  
191     elif o == '-h' or o == '--help':
192         help ()
193     elif o == '-p' or o == '--package':
194         topdir = a
195
196 sys.path.append (topdir + '/stepmake/bin')
197 from packagepython import *
198 package = Package (topdir)
199 packager = Packager ()
200
201 l = sys.stdout
202
203 l.write ('<html><title>%s</title><h1> %s</h1><ul>\n' % (title, title))
204
205
206 for x in files:
207     if regex.search ('\\.bib$', x) <> -1:
208         head = bib_header (x)
209     elif regex.search ('\\.pod$', x) <> -1:
210         head = read_pod_header (x)
211     elif regex.search ('\\.texinfo$', x) <> -1:
212         head = read_texinfo_header (x)
213     elif regex.search ('\\.tely$', x) <> -1:
214         head = read_tely_header (x)
215     elif regex.search ('\\.yo$', x) <> -1:
216         head = read_yo_header (x)
217     else:
218         head = read_latex_header (x)
219     if head.title == '':
220         head.title = head.filename
221     print_html_head (l, pre, head)
222
223 l.write ('</ul></html>')
224