13 def find(pattern
, dir = os
.curdir
):
15 names
= os
.listdir(dir)
18 if name
in (os
.curdir
, os
.pardir
):
20 fullname
= os
.path
.join(dir, name
)
21 if fnmatch
.fnmatch(name
, pattern
):
23 if os
.path
.isdir(fullname
) and not os
.path
.islink(fullname
):
25 if fnmatch
.fnmatch(name
, p
):
26 if _debug
: print "skip", `fullname`
29 if _debug
: print "descend into", `fullname`
30 list = list + find(pattern
, fullname
)
43 raise 'not there' , fn
46 def file_exist_b (fn
):
56 <p>You're looking at a page with some LilyPond samples. These files
57 are also included in the distribution. The output is completely
58 generated from the <tt>.ly</tt> source file, without any further touch
63 The pictures are 90 dpi anti-aliased snapshots of the printed output.
64 If you want a better impression of the appearance, do print out one of
65 the PDF or PostScript files; they use scalable fonts, and should look
66 good at any resolution.
70 headertext_nopics
= r
"""
71 <p>Nothing to be seen here, move along.
75 # FIXME breaks on multiple strings.
77 def read_lilypond_header (fn
):
79 s
= re
.sub('%.*$', '', s
)
80 s
= re
.sub('\n', ' ', s
)
83 m
= re
.search (r
"""\\header\s*{([^}]*)}""", s
)
91 m
= re
.search (r
'''\s*(\S+)\s*=\s*"([^"]+)"''', s
)
99 left
= re
.sub ('"', '', left
)
100 right
= re
.sub ('"', '', right
)
106 sys
.stdout
.write (r
"""Usage: mutopia-index [OPTIONS] INFILE OUTFILE
107 Generate index for mutopia.
110 -h, --help print this help
111 -o, --output=FILE write output to file
112 -s, --subdirs=DIR add subdir
113 --suffix=SUF specify suffix
120 def gen_list(inputs
, filename
):
121 print "generating HTML list %s\n" % filename
123 list = open(filename
, 'w')
126 list.write ('<html><title>Rendered Examples</title>\n')
127 list.write ('<body bgcolor=white>\n')
130 list.write (headertext
)
132 list.write (headertext_nopics
)
136 (base
, ext
) = os
.path
.splitext (ex
)
137 (base
, ext2
) = os
.path
.splitext (base
)
140 header
= read_lilypond_header(ex
)
141 def read_dict(s
, default
, h
=header
):
147 head
= read_dict('title', os
.path
.basename (base
))
148 composer
= read_dict('composer', '')
149 desc
= read_dict('description', '')
151 list.write('<h1>%s</h1>\n' % head
);
153 list.write('<h2>%s</h2>\n' % composer
)
155 list.write('%s<p>' % desc
)
156 list.write ('<ul>\n')
157 def list_item(filename
, desc
, type, l
= list):
158 if file_exist_b(filename
):
160 l
.write ('<li><a href="%s">%s</a>' % (filename
, desc
))
162 # todo: include warning if it uses \include
165 size
=os
.stat(filename
)[stat
.ST_SIZE
]
166 kB
=(size
+ 512) / 1024
168 l
.write (' (%s %d kB)' % (type, kB
))
170 l
.write (' (%s %d characters)' % (type, size
))
171 pictures
= ['jpeg', 'png', 'xpm']
174 list_item(base
+ ext
, 'The input', 'ASCII')
175 for pageno
in range(1,100):
176 f
= base
+ '-page%d.png' % pageno
177 if not file_exist_b (f
):
179 list_item(f
, 'See a picture of page %d' % pageno
, 'png')
180 list_item(base
+ '.pdf', 'Print', 'PDF')
181 list_item(base
+ '.ps.gz', 'Print', 'gzipped PostScript')
182 list_item(base
+ '.midi', 'Listen', 'MIDI')
183 list.write ("</ul>\n");
185 list.write('</body></html>\n');
190 (options
, files
) = getopt
.getopt(sys
.argv
[1:],
191 'ho:', ['help', 'output='])
192 outfile
= 'examples.html'
198 if o
== '--help' or o
== '-h':
200 elif o
== '--output' or o
== '-o':
205 dirs
= dirs
+ find ('out-www', f
)
213 allfiles
= allfiles
+ find ('*.ly.txt', d
)
215 gen_list (allfiles
, outfile
)