]> git.donarmstrong.com Git - lilypond.git/blob - stepmake/bin/ls-latex.py
a2bbda225b29309134c6ddba1f25ece1a610448b
[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
19 import re
20
21 class Latex_head:
22     def __init__ (self):
23         self.author = ''
24         self.title = ''
25         self.date = ''
26         self.format = ''
27
28         
29 def read_latex_header (fn):
30     s = gulp_file (fn)
31     header = Latex_head()
32     m = re.search(r'\\author{([^}]+)}', s)
33     if m:
34         header.author = m.group (1)
35
36     m = re.search (r'\\title{([^}]+)}',s )
37     if m:
38         header.title = m.group (1)
39     else:
40         header.title = 'No title'
41
42     header.outfile = fn
43     header.outfile = re.sub ('\.latex$', '.ps.gz', header.outfile)
44     header.outfile = re.sub ('\.tex$', '.ps.gz', header.outfile)
45     header.outfile = re.sub ('\.doc$', '.ps.gz', header.outfile)
46     header.format = 'gzipped postscript'
47     return  header
48
49
50 def bib_header (fn):
51     s = gulp_file (fn)
52     m = re.search ('% *AUTHOR *= *(.*)$',s)
53     header = Latex_head()    
54     if m:
55         header.author = m.group (1)
56
57
58     m = re.search ('% *TITLE *= *(.*)$',s )
59     if m:
60         header.title = m.group (1)
61     else:
62         header.title = '(bibliography without title)'
63
64     header.outfile = re.sub ( '\.bib$', '.html' , fn)
65     header.format = 'HTML'    
66     return header
67
68
69 def read_pod_header (fn):
70     header = Latex_head ()
71     s = gulp_file (fn)
72     i = re.search( '[^\n \t]', s)
73     s = s[i:]
74     i = re.search( '\n\n', s)
75     s = s[i+2:]    
76     if i < 0:
77         sys.stderr.write ('gulped file: ' + fn + '\n')
78         raise 'huh?'
79     i = re.search( '\n\n', s)
80     header.title = s[:i]
81     header.filename = fn
82     header.outfile = re.sub ('\.pod$', '.html', fn)
83     return  header
84
85 def read_texinfo_header (fn):
86     header = Latex_head ()
87     s = gulp_file (fn)
88     m = re.search( '@settitle (.*$)', s)
89     if m:
90         header.title = m.group (1)
91     header.filename = fn
92     header.outfile = re.sub ('\.tely', '.html', fn)
93     header.format = 'HTML'
94     return header
95
96 def read_tely_header (fn):
97     header = Latex_head ()
98     s = gulp_file (fn)
99     m = re.search( '@settitle (.*$)', s)
100     if m:
101         header.title = m.group (1)
102     header.filename = fn
103     header.outfile = re.sub ('\.tely', '.html', fn)
104     header.format = 'HTML'
105     return header
106
107
108 def print_html_head (l,o,h):
109     pre =o
110
111     l.write ('<li><a href=%s>%s (%s)</a>' % (pre + h.outfile, h.title, h.format ))
112     if h.author:
113         l.write ('<p>by %s</p>' % h.author)
114     l.write ('</li>\n')
115
116 def help ():
117     sys.stdout.write ("Usage: ls-latex [OPTION]... FILE...\n"
118                  "Generate html index file for FILE...\n\n"
119                  + "Options:\n"
120                  + "  -h, --help             print this help\n"
121                       )
122     sys.exit (0)
123
124 import getopt
125
126 (options, files) = getopt.getopt(sys.argv[1:], 
127     'e:h', ['help', 'prefix=',  'title='])
128
129 tex = ''
130 output =''
131 pre = ''
132 title = ''
133 for opt in options:
134     o = opt[0]
135     a = opt[1]
136     if o == '--prefix':
137         pre = a
138     elif o == '--title':
139         title = a  
140     elif o == '-h' or o == '--help':
141         help ()
142
143
144 l = sys.stdout
145
146 l.write ('<html><title>%s</title><h1> %s</h1><ul>\n' % (title, title))
147
148
149 for x in files:
150     if re.search ('\\.bib$', x) :
151         head = bib_header (x)
152     elif re.search ('\\.pod$', x) :
153         head = read_pod_header (x)
154     elif re.search ('\\.texinfo$', x) :
155         head = read_texinfo_header (x)
156     elif re.search ('\\.tely$', x):
157         head = read_tely_header (x)
158     else:
159         head = read_latex_header (x)
160     if head.title == '':
161         head.title = head.filename
162     print_html_head (l, pre, head)
163
164 l.write ('</ul></html>')
165