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