File: scummtheme.py

package info (click to toggle)
scummvm 2.9.1%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 450,580 kB
  • sloc: cpp: 4,299,825; asm: 28,322; python: 12,901; sh: 11,302; java: 9,289; xml: 7,895; perl: 2,639; ansic: 2,465; yacc: 1,670; javascript: 1,020; makefile: 933; lex: 578; awk: 275; objc: 82; sed: 11; php: 1
file content (140 lines) | stat: -rwxr-xr-x 3,782 bytes parent folder | download | duplicates (2)
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
#!/usr/bin/env python
# encoding: utf-8
import sys
import re
import os
import zipfile

THEME_FILE_EXTENSIONS = ('.stx', '.bmp', '.fcc', '.ttf', '.png', '.svg')

def zip_directory(zf, path):
	if len(path):
		os.chdir(path)
		if not path.endswith("/"):
			path += "/"

	filenames = os.listdir('.')
	filenames.sort()
	for filename in filenames:
		if os.path.isfile(filename) and not filename[0] == '.' and filename.endswith(THEME_FILE_EXTENSIONS):
			zf.write(filename, './' + filename)
			print ("    Adding file: " + path + filename)

def buildTheme(themeName):
	if not os.path.isdir(themeName) or not os.path.isfile(os.path.join(themeName, "THEMERC")):
		print ("Invalid theme name: " + themeName)
		return

	zf = zipfile.ZipFile(themeName + ".zip", 'w', zipfile.ZIP_DEFLATED, 9)

	print ("Building '" + themeName + "' theme:")
	os.chdir(themeName)

	zf.write('THEMERC', './THEMERC')

	zip_directory(zf, "")

	oldpwd = os.getcwd()

	themercFile = open("THEMERC", "r")
	for line in themercFile:
		if line.startswith("%using "):
			path = line[len("%using "):-1].strip()
			zip_directory(zf, path)

	os.chdir(oldpwd)

	os.chdir('../')

	zf.close()

def buildAllThemes():
	for f in os.listdir('.'):
		if os.path.isdir(os.path.join('.', f)) and not f[0] == '.' and not f.startswith("common") and not f == "fonts" and not f == "fonts-cjk":
			buildTheme(f)

def parseSTX(theme_file, def_file, subcount):
	comm = re.compile("<!--(.*?)-->", re.DOTALL)
	head = re.compile("<\?(.*?)\?>")

	strlitcount = 0
	subcount += 1

	def_file.write(";\n const char *defaultXML" + str(subcount) + " = ")

	output = ""
	for line in theme_file:
		output +=  line.rstrip("\r\n\t ").lstrip()
		if not output.endswith('>'):
			output += ' '
		output += "\n"

	output = re.sub(comm, "", output)
	output = re.sub(head, "", output)
	output = output.replace("\t", " ").replace("  ", " ").replace("\"", "'")
	output = output.replace(" = ", "=").replace(", ", ",")

	for line in output.splitlines():
		if line and not line.isspace():
			strlitcount += len(line)
			if strlitcount > 65535:
				subcount += 1
				def_file.write(";\n const char *defaultXML" + str(subcount) + " = ")
				strlitcount = len(line)
			def_file.write("\"" + line + "\"\n")
	return subcount

def buildDefTheme(themeName):
	def_file = open("default.inc", mode="w", newline="\n")

	if not os.path.isdir(themeName):
		print ("Cannot open default theme dir.")

	def_file.write("""const char *defaultXML1 = "<?xml version = '1.0'?>"\n""")
	subcount = 1

	filenames = os.listdir(themeName)
	filenames.sort()
	for filename in filenames:
		filename = os.path.join(themeName, filename)
		if os.path.isfile(filename) and filename.endswith(".stx"):
			theme_file = open(filename, "r")
			subcount = parseSTX(theme_file, def_file, subcount)
			theme_file.close()

	def_file.write(";\nconst char *defaultXML[] = { defaultXML1")
	for sub in range(2, subcount + 1):
		def_file.write(", defaultXML" + str(sub))

	def_file.write(" };\n")

	def_file.close()

def printUsage():
	print ("===============================")
	print ("ScummVM Theme Generation Script")
	print ("===============================")
	print ("Usage:")
	print ("scummtheme.py makeall")
	print ("    Builds all the available themes.\n")
	print ("scummtheme.py make [themename]")
	print ("    Builds the theme called 'themename'.\n")
	print ("scummtheme.py default [themename]")
	print ("    Creates a 'default.inc' file to embed the given theme in the source code.\n")

def main():

	if len(sys.argv) == 2 and sys.argv[1] == "makeall":
		buildAllThemes()

	elif len(sys.argv) == 3 and sys.argv[1] == "make":
		buildTheme(sys.argv[2])

	elif len(sys.argv) == 3 and sys.argv[1] == "default":
		buildDefTheme(sys.argv[2])

	else:
		printUsage()

if __name__ == "__main__":
	sys.exit(main())