Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/trunk/src/external/tolua/lua/feature.lua @ 5747

Last change on this file since 5747 was 5738, checked in by landauf, 15 years ago

merged libraries2 back to trunk

  • Property svn:eol-style set to native
File size: 2.8 KB
Line 
1-- tolua: abstract feature class
2-- Written by Waldemar Celes
3-- TeCGraf/PUC-Rio
4-- Jul 1998
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
13-- Feature class
14-- Represents the base class of all mapped feature.
15classFeature = {
16}
17classFeature.__index = classFeature
18
19-- write support code
20function classFeature:supcode ()
21end
22
23-- output tag
24function classFeature:decltype ()
25end
26
27-- register feature
28function classFeature:register (pre)
29end
30
31-- translate verbatim
32function classFeature:preamble ()
33end
34
35-- check if it is a variable
36function classFeature:isvariable ()
37 return false
38end
39
40-- check if it requires collection
41function classFeature:requirecollection (t)
42    return false
43end
44
45-- build names
46function classFeature:buildnames ()
47    if self.name and self.name~='' then
48        local n = split(self.name,'@')
49        self.name = n[1]
50        if not n[2] then
51            n[2] = applyrenaming(n[1])
52        end
53        self.lname = n[2] or gsub(n[1],"%[.-%]","")
54        self.original_name = self.name
55        self.lname = clean_template(self.lname)
56    end
57    if not self.is_parameter then
58        self.name = getonlynamespace() .. self.name
59    end
60
61    local parent = classContainer.curr
62    if parent then
63        self.access = parent.curr_member_access
64    else
65    end
66end
67
68function classFeature:check_public_access()
69
70    if self.access and self.access ~= 0 then
71        return false
72    end
73
74    local parent = classContainer.curr
75    while parent do
76        if parent.access and parent.access ~= 0 then
77            return false
78        end
79        parent = parent.prox
80    end
81    return true
82end
83
84function clean_template(t)
85
86    return string.gsub(t, "[<>:, %*]", "_")
87end
88
89-- check if feature is inside a container definition
90-- it returns the container class name or nil.
91function classFeature:incontainer (which)
92    if self.parent then
93        local parent = self.parent
94        while parent do
95            if parent.classtype == which then
96                return parent.name
97            end
98            parent = parent.parent
99        end
100    end
101    return nil
102end
103
104function classFeature:inclass ()
105    return self:incontainer('class')
106end
107
108function classFeature:inmodule ()
109    return self:incontainer('module')
110end
111
112function classFeature:innamespace ()
113    return self:incontainer('namespace')
114end
115
116-- return C binding function name based on name
117-- the client specifies a prefix
118function classFeature:cfuncname (n)
119
120    if self.parent then
121        n = self.parent:cfuncname(n)
122    end
123
124    n = string.gsub(n..'_'.. (self.lname or self.name), "[<>:, \.%*&]", "_")
125
126    return n
127end
128
Note: See TracBrowser for help on using the repository browser.