Engine 0.0.4
Game engine in lua
Loading...
Searching...
No Matches
bundler.lua
Go to the documentation of this file.
1--! @short unify files
2--! @brief groups code into a single source
3--! @param[in] src_path folder with lua includes
4--! @param[in] src_file entry file
5--! @param[in] dest_file packaged file output
6--! @par Input
7--! @li @c lib_common_math.lua
8--! @code
9--! local function sum(a, b)
10--! return a + b
11--! end
12--!
13--! local P = {
14--! sum = sum
15--! }
16--!
17--! return P
18--! @endcode
19--!
20--! @li @c main.lua
21--! @code
22--! local os = require('os')
23--! local zeebo_math = require('lib_common_math')
24--!
25--! print(zeebo_math.sum(1, 2))
26--! os.exit(0)
27--! @endcode
28--!
29--! @par Output
30--! @li @c main.lua
31--! @code
32--! local os = require('os')
33--! local lib_common_math = nil
34--!
35--! local function main()
36--! local zeebo_math = lib_common_math()
37--! print(zeebo_math.sum(1, 2))
38--! os.exit(0)
39--! end
40--!
41--! lib_common_math = function()
42--! local function sum(a, b)
43--! return a + b
44--! end
45--!
46--! local P = {
47--! sum = sum
48--! }
49--!
50--! return P
51--! end
52--!
53--! main()
54--! @endcode
55local function build(src_path, src_filename, dest)
56 local pattern = "local ([%w_%-]+) = require%('(.-)'%)"
57 local from = 'main'
58 local src_in = src_path..src_filename
59 local src_file = io.open(src_in, 'r')
60 local dest_file = io.open(dest, 'w')
61 local relative_path = src_path:gsub('[%w_-]+', '..')
62 local deps_imported = {}
63 local deps_var_name = {}
64 local deps_module_path = {}
65 local main_content = ''
66 local main_before = ''
67 local main_after = ''
68 local lib_module = nil
69 local lib_name = nil
70 local lib_var = nil
71 local index = nil
72
73 repeat
74 if from == 'system' then
75 main_before = 'local '..lib_var..' = require(\''..lib_module..'\')\n'..main_before
76 end
77 if src_file then
78 if from == 'lib' then
79 main_before = main_before..'local '..lib_name..' = nil\n'
80 main_after = main_after..lib_name..' = function()\n'
81 end
82 repeat
83 local line = src_file:read()
84 if line then
85 line = line:gsub('\n', '')
86 line = line:gsub('^%s*', '')
87 line = line:gsub('*%s$', '')
88 line = line:gsub('^%-%-$', '')
89 line = line:gsub('^_ENV = nil$', '')
90 line = line:gsub('%s*%-%-([^\'\"%[%]].*)$', '')
91 end
92
93 local line_require = line and { line:match(pattern) }
94
95 if line_require and #line_require > 0 then
96 local index = #deps_var_name + 1
97 deps_var_name[index] = line_require[1]
98 deps_module_path[index] = line_require[2]
99 if from == 'main' then
100 main_content = main_content..'--'..line_require[2]..line_require[1]..'--\n'
101 else
102 main_after = main_after..'--'..line_require[2]..line_require[1]..'--\n'
103 end
104 elseif line and #line > 0 and from == 'main' then
105 main_content = main_content..line..'\n'
106 elseif line and #line > 0 and from == 'lib' then
107 main_after = main_after..line..'\n'
108 end
109 until not line
110 if from == 'lib' then
111 main_after = main_after..'end\n'
112 end
113 end
114
115 if src_file then
116 src_file:close()
117 src_file = nil
118 end
119
120 index = 1
121 src_in = nil
122 while not src_in and index <= #deps_var_name do
123 lib_module = deps_module_path[index]
124 lib_var = deps_var_name[index]
125 local lib = lib_module and lib_var and lib_module..lib_var
126 if lib and not deps_imported[lib] then
127 lib_name = lib_module:gsub('/', '_')
128 src_in = src_path..lib_module..'.lua'
129 src_file = io.open(src_in, 'r') or io.open(lib_module..'.lua')
130 src_file = src_file or io.open(src_path..relative_path..lib_module..'.lua')
131 from = src_file and 'lib' or 'system'
132 deps_imported[lib] = from
133 end
134 index = index + 1
135 end
136 until not src_in
137
138 index = 1
139 while index <= #deps_var_name do
140 lib_module = deps_module_path[index]
141 lib_name = lib_module:gsub('/', '_')
142 lib_var = deps_var_name[index]
143 local lib = lib_module and lib_var and lib_module..lib_var
144 if lib and deps_imported[lib] then
145 local search = '%-%-'..lib_module..lib_var..'%-%-\n'
146 local replace = 'local '..lib_var..' = '..lib_name..'()\n'
147 local replacer = deps_imported[lib] == 'system' and '' or replace
148 main_after = main_after:gsub(search, replacer)
149 main_content = main_content:gsub(search, replacer)
150 end
151 index = index + 1
152 end
153
154 do
155 main_content = 'local function main()\n'..main_content..'end\n'
156 main_content = main_before..main_content..main_after
157 main_content = main_content..'return main()\n'
158 end
159
160 dest_file:write(main_content)
161 dest_file:close()
162end
163
164local P = {
166}
167
168return P
local function replace(src, meta, default)
local function file(self, file)
local function build(src_path, src_filename, dest)
unify files
local function require(std, game, application)
local function param(self, name, value)
local os
Definition main.lua:1
_ENV
clear ENV
Definition main.lua:30
local function main()
local function line(x1, y1, x2, y2)