Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

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

Last change on this file since 2710 was 2710, checked in by rgrieder, 15 years ago

Merged buildsystem3 containing buildsystem2 containing Adi's buildsystem branch back to the trunk.
Please update the media directory if you were not using buildsystem3 before.

  • Property svn:eol-style set to native
File size: 2.5 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, '(.)',
55        function (c)
56            local e = ''
57            t.n=t.n+1
58            if t.n==15 then
59             t.n=0 e='\n'..pre..'  '
60            end
61            return format('%3u,%s',strbyte(c),e)
62        end
63    )
64    output(b..strbyte(" "))
65    output('\n'..pre..' };\n')
66    if first_line and first_line ~= "" then
67        output(pre..' tolua_dobuffer(tolua_S,(char*)B,sizeof(B),"tolua embedded: '..first_line..'");')
68    else
69        output(pre..' tolua_dobuffer(tolua_S,(char*)B,sizeof(B),"tolua: embedded Lua code '..code_n..'");')
70    end
71    output(pre..' lua_settop(tolua_S, top);')
72    output(pre..'} /* end of embedded lua code */\n\n')
73    code_n = code_n +1
74end
75
76
77-- Print method
78function classCode:print (ident,close)
79    print(ident.."Code{")
80    print(ident.." text = [["..self.text.."]],")
81    print(ident.."}"..close)
82end
83
84
85-- Internal constructor
86function _Code (t)
87    setmetatable(t,classCode)
88    append(t)
89    return t
90end
91
92-- Constructor
93-- Expects a string representing the code text
94function Code (l)
95    return _Code {
96        text = l
97    }
98end
99
100
Note: See TracBrowser for help on using the repository browser.