143 lines
4.3 KiB
Python
Executable File
143 lines
4.3 KiB
Python
Executable File
#!/usr/bin/python
|
|
|
|
import sys
|
|
import getopt
|
|
|
|
headerTemplate = """/*
|
|
* Copyright 2010-present Facebook.
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
/*
|
|
* This is is a generated file during the SDK build process.
|
|
* Please do not hand edit this file.
|
|
* It can be rebuilt by running
|
|
*
|
|
* ./image_to_code.py %(args)s
|
|
*
|
|
*/
|
|
"""
|
|
|
|
def bytes_from_file(filename, chunksize=8192):
|
|
with open(filename, "rb") as f:
|
|
while True:
|
|
chunk = f.read(chunksize)
|
|
if chunk:
|
|
for b in chunk:
|
|
yield b
|
|
else:
|
|
break
|
|
|
|
def write_header_file(header, className, outputFile):
|
|
with open(outputFile, "w") as f:
|
|
f.write(header)
|
|
f.write("""
|
|
#import <Foundation/Foundation.h>
|
|
#import <UIKit/UIKit.h>
|
|
|
|
""")
|
|
f.write("@interface " + className + " : NSObject\n\n")
|
|
f.write("+ (UIImage *)image;\n\n")
|
|
f.write("@end")
|
|
|
|
def write_implementation_file(inputFile, header, className, outputFile):
|
|
formattedBytes = ["0x{0:02x}".format(ord(x)) for x in bytes_from_file(inputFile)]
|
|
with open(outputFile, "w") as f:
|
|
f.write(header)
|
|
f.write("\n")
|
|
f.write("#import \"" + className + ".h\"\n")
|
|
f.write("#import \"FBImageResourceLoader.h\"\n\n")
|
|
|
|
# Write standard bytes out
|
|
f.write("const Byte " + className + "_standard[] = {\n")
|
|
f.write(", ".join(formattedBytes))
|
|
f.write("\n")
|
|
f.write("};\n")
|
|
|
|
|
|
# Write retina if present
|
|
useRetina = True
|
|
try:
|
|
(name, ext) = inputFile.rsplit(".", 1)
|
|
name = name + "@2x"
|
|
formattedBytes = ["0x{0:02x}".format(ord(x)) for x in bytes_from_file(name + "." + ext)]
|
|
f.write("const Byte " + className + "_retina[] = {\n")
|
|
f.write(", ".join(formattedBytes))
|
|
f.write("\n")
|
|
f.write("};\n")
|
|
except IOError:
|
|
useRetina = False
|
|
|
|
# Enter the bundle path override
|
|
# strip of the PNG that was added for our class name for the resource name
|
|
bundlepath = "@\"" + "FacebookSDKImages/" + className[0:-3] + ".png\""
|
|
|
|
f.write("\n")
|
|
f.write("@implementation " + className + "\n\n")
|
|
f.write("+ (UIImage *)image {\n")
|
|
f.write(" return [FBImageResourceLoader imageNamed:")
|
|
f.write(bundlepath)
|
|
f.write("\n")
|
|
f.write(" fromBytes:" + className + "_standard\n")
|
|
f.write(" length:sizeof(" + className + "_standard)/sizeof(" + className + "_standard[0])\n")
|
|
if useRetina:
|
|
f.write(" fromRetinaBytes:" + className + "_retina\n")
|
|
f.write(" retinaLength:sizeof(" + className + "_retina)/sizeof(" + className + "_retina[0])];\n")
|
|
else:
|
|
f.write(" fromRetinaBytes:NULL\n")
|
|
f.write(" retinaLength:0];\n")
|
|
f.write("}\n")
|
|
f.write("@end\n")
|
|
|
|
def main(argv):
|
|
inputFile = ''
|
|
outputClass = ''
|
|
outputDir = ''
|
|
|
|
try:
|
|
opts, args = getopt.getopt(argv,"hi:c:o:")
|
|
except getopt.GetoptError:
|
|
print 'image_to_code.py -i <inputFile> -c <class> -o <outputDir>'
|
|
sys.exit(2)
|
|
for opt, arg in opts:
|
|
if opt == '-h':
|
|
print 'image_to_code.py -i <inputFile> -c <class> -o <outputDir>'
|
|
sys.exit()
|
|
elif opt == '-i':
|
|
inputFile = arg
|
|
elif opt == '-c':
|
|
outputClass = arg
|
|
elif opt in '-o':
|
|
outputDir = arg
|
|
|
|
# Build file headers
|
|
header = headerTemplate % {"args" : " ".join(argv)}
|
|
|
|
# outputClass needs to add PNG as part of it
|
|
outputClass = outputClass + "PNG"
|
|
|
|
# Build the output base filename
|
|
outputFileBase = outputDir + "/" + outputClass
|
|
|
|
# Build .h file
|
|
outputFile = outputFileBase + ".h"
|
|
write_header_file(header, outputClass, outputFile)
|
|
|
|
# Build .m file
|
|
outputFile = outputFileBase + ".m"
|
|
write_implementation_file(inputFile, header, outputClass, outputFile)
|
|
|
|
if __name__ == "__main__":
|
|
main(sys.argv[1:])
|