Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/gui/src/tolua/lua/code.lua @ 2030

Last change on this file since 2030 was 1650, checked in by rgrieder, 16 years ago

added preliminary automatic creation of tolua generator that creates the actual executable
(please don't ask about the egg-hen question…)

File size: 2.3 KB
Line 
1-- tolua: code class
2-- Written by Waldemar Celes
3-- TeCGraf/PUC-Rio
4-- Jul 1999
5-- $Id: $
6
7-- This code is free software; you can redistribute it and/or modify it.
8-- The software provided hereunder is on an "as is" basis, and
9-- the author has no obligation to provide maintenance, support, updates,
10-- enhancements, or modifications.
11
12-- global
13code_n = 1
14
15-- Code class
16-- Represents Lua code to be compiled and included
17-- in the initialization function.
18-- The following fields are stored:
19--   text = text code
20classCode = {
21 text = '',
22}
23classCode.__index = classCode
24setmetatable(classCode,classFeature)
25
26-- register code
27function classCode:register (pre)
28 pre = pre or ''
29 -- clean Lua code
30 local s = clean(self.text)
31 if not s then
32  --print(self.text)
33  error("parser error in embedded code")
34 end
35
36 -- get first line
37 local _, _, first_line=string.find(self.text, "^([^\n\r]*)")
38 if string.find(first_line, "^%s*%-%-") then
39         if string.find(first_line, "^%-%-##") then
40                first_line = string.gsub(first_line, "^%-%-##", "")
41                if flags['C'] then
42                        s = string.gsub(s, "^%-%-##[^\n\r]*\n", "")
43                end
44         end
45 else
46        first_line = ""
47 end
48
49 -- convert to C
50 output('\n'..pre..'{ /* begin embedded lua code */\n')
51 output(pre..' int top = lua_gettop(tolua_S);')
52 output(pre..' static unsigned char B[] = {\n   ')
53 local t={n=0}
54 local b = gsub(s,'(.)',function (c)
55                         local e = ''
56                         t.n=t.n+1 if t.n==15 then t.n=0 e='\n'..pre..'  ' end
57                         return format('%3u,%s',strbyte(c),e)
58                        end
59               )
60 output(b..strbyte(" "))
61 output('\n'..pre..' };\n')
62 if first_line and first_line ~= "" then
63        output(pre..' tolua_dobuffer(tolua_S,(char*)B,sizeof(B),"tolua embedded: '..first_line..'");')
64 else
65        output(pre..' tolua_dobuffer(tolua_S,(char*)B,sizeof(B),"tolua: embedded Lua code '..code_n..'");')
66 end
67 output(pre..' lua_settop(tolua_S, top);')
68 output(pre..'} /* end of embedded lua code */\n\n')
69 code_n = code_n +1
70end
71
72
73-- Print method
74function classCode:print (ident,close)
75 print(ident.."Code{")
76 print(ident.." text = [["..self.text.."]],")
77 print(ident.."}"..close)
78end
79
80
81-- Internal constructor
82function _Code (t)
83 setmetatable(t,classCode)
84 append(t)
85 return t
86end
87
88-- Constructor
89-- Expects a string representing the code text
90function Code (l)
91 return _Code {
92  text = l
93 }
94end
95
96
Note: See TracBrowser for help on using the repository browser.