Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/pch/src/tolua/lua/code.lua @ 3127

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

Update to tolua 1.0.93

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