Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/trunk/src/tolua/lua/code.lua @ 2087

Last change on this file since 2087 was 2087, checked in by landauf, 16 years ago

merged objecthierarchy branch back to trunk

  • Property svn:eol-style set to native
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.