Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Latest commit

 

History

History
History
97 lines (76 loc) · 4.64 KB

File metadata and controls

97 lines (76 loc) · 4.64 KB
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
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
import sys
import os
def split_javascript_file(input_filename, output_filename_prefix, max_part_size_in_bytes):
try:
# Contains the entire Emscripten generated Javascript code
input_file = open(input_filename,'r')
# Javascript main file. On execution, this file needs to be loaded at last (!)
output_main_filename = output_filename_prefix + ".js"
output_main_file = open(output_main_filename,'w')
# File with HTML script tags to load the Javascript files in HTML later on
output_html_include_file = open(output_filename_prefix + ".include.html",'w')
# Variable will contain the source of a Javascript function if we find one during parsing
js_function = None
# Dictionary with lower case source file as key and a tupel of case sensitive source file name (first encountered case wins)
# and an array of functions associated to that source file as value
function_buckets = {};
output_part_file = None
# Iterate over Javascript source; write main file; parse function declarations.
for line in input_file:
if line == "//FUNCTION_BEGIN_MARKER\n":
js_function = "//Func\n"
elif line.startswith("//FUNCTION_END_MARKER_OF_SOURCE_FILE_"):
# At the end of the function marker we get the source file that is associated to that function.
associated_source_file_base = line[len("//FUNCTION_END_MARKER_OF_SOURCE_FILE_"):len(line)-1]
if associated_source_file_base == "NO_SOURCE":
# Functions without associated source file are stored in a file in the base directory
associated_source_file_base = output_filename_prefix + "_functions";
else:
# Functions with a known associated source file are stored in a file in the directory `output_filename_prefix`
associated_source_file_base = output_filename_prefix + os.path.realpath(associated_source_file_base)
associated_source_file_base_lower = associated_source_file_base.lower()
# Add the function to its respective file
if associated_source_file_base_lower not in function_buckets:
function_buckets[associated_source_file_base_lower] = [associated_source_file_base, []]
function_buckets[associated_source_file_base_lower][1] += [js_function]
# Clear the function read cache
js_function = None
else:
if js_function is None:
output_main_file.write(line)
else:
js_function += line
# Iterate over all function buckets and write their functions to the associated files
# An associated file is split into chunks of `max_part_size_in_bytes`
for associated_source_file_base in function_buckets:
# At first we try to name the Javascript source file to match the assoicated source file + `.js`
js_source_file = function_buckets[associated_source_file_base][0] + ".js"
# Check if the directory of the Javascript source file exists
js_source_dir = os.path.dirname(js_source_file)
if len(js_source_dir) > 0 and not os.path.exists(js_source_dir):
os.makedirs(js_source_dir)
output_part_file_counter = 0
output_part_file = None
for js_function in function_buckets[associated_source_file_base][1]:
if output_part_file is None:
output_html_include_file.write("<script type=\"text/javascript\" src=\"" + js_source_file + "\"></script>")
output_part_file = open(js_source_file,'w')
output_part_file.write(js_function)
if output_part_file is not None and output_part_file.tell() > max_part_size_in_bytes:
output_part_file.close()
output_part_file = None
output_part_file_counter += 1
js_source_file = function_buckets[associated_source_file_base][0] + ".part" + str(output_part_file_counter) + ".js"
if output_part_file is not None:
output_part_file.close()
output_part_file = None
# Write the main Javascript file at last to the HTML includes because this file contains the code to start
# the execution of the generated Emscripten application and requires all the extracted functions.
output_html_include_file.write("<script type=\"text/javascript\" src=\"" + output_main_filename + "\"></script>")
except Exception, e:
print >> sys.stderr, 'error: Splitting of Emscripten generated Javascript failed: %s' % str(e)
finally:
if input_file is not None: input_file.close()
if output_main_file is not None: output_main_file.close()
if output_part_file is not None: output_part_file.close()
if output_html_include_file is not None: output_html_include_file.close()
Morty Proxy This is a proxified and sanitized view of the page, visit original site.