1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
|
#! /usr/bin/env python
import os
import os.path
import stat
import re
import sys
print "#include <cstring>"
def print_array( filename, basename ):
myfile = file( filename, "r" )
data = myfile.read()
print "static char %s[] = {" % basename
counter = 0
for byte in data:
print "0x%02x," % ord(byte),
counter = counter + 1
if counter == 12:
counter = 0
print
print "};"
class tFileDescription:
pass
filelist = [];
for real_filename in sys.argv[1:]:
filename = os.path.basename( real_filename )
statbuf = os.stat( real_filename )
if stat.S_ISREG( statbuf.st_mode ):
c_name = filename.replace( ".", "_" )
print_array( real_filename, c_name )
if re.search( "\\.css$", filename ) is not None:
mime_type = "text/css"
else:
mime_type = os.popen( "file -i %s" % real_filename, "r" ).read()
mime_type = mime_type[ mime_type.find( ": " ) + 2: ].strip()
mime_type = re.sub( "charset=.+$", "charset=UTF-8", mime_type )
description = tFileDescription()
description.c_name = c_name
description.filename = filename
description.mime_type = mime_type
description.size = statbuf.st_size
filelist.append( description )
print "const char *getFile( const char *name )\n{"
for description in filelist:
print " if ( strcmp( name, \"%s\" ) == 0 ) return %s;" % ( description.filename, description.c_name );
print " return NULL;"
print "}"
print "const char *getFileType( const char *name )\n{"
for description in filelist:
print " if ( strcmp( name, \"%s\" ) == 0 ) return \"%s\";" % ( description.filename, description.mime_type );
print " return NULL;"
print "}"
print "int getFileSize( const char *name )\n{"
for description in filelist:
print " if ( strcmp( name, \"%s\" ) == 0 ) return %d;" % ( description.filename, description.size );
print " return -1;"
print "}"
|