Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/trunk/src/external/tolua/lua/doit.lua @ 12216

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

merged libraries2 back to trunk

  • Property svn:eol-style set to native
File size: 3.2 KB
Line 
1-- Generate binding code
2-- Written by Waldemar Celes
3-- TeCGraf/PUC-Rio
4-- Jul 1998
5-- Last update: Apr 2003
6-- $Id: $
7
8
9-- This code is free software; you can redistribute it and/or modify it.
10-- The software provided hereunder is on an "as is" basis, and
11-- the author has no obligation to provide maintenance, support, updates,
12-- enhancements, or modifications.
13
14function parse_extra()
15
16    for k,v in ipairs(_extra_parameters or {}) do
17       
18        local b,e,name,value = string.find(v, "^([^=])=(.*)$")
19        if b then
20            _extra_parameters[name] = value
21        else
22            _extra_parameters[v] = true
23        end
24    end
25end
26
27function doit ()
28    -- define package name, if not provided
29    if not flags.n then
30        if flags.f then
31            flags.n = gsub(flags.f,"%..*$","")
32            _,_,flags.n = string.find(flags.n, "([^/\\]*)$")
33        else
34            error("#no package name nor input file provided")
35        end
36    end
37
38    -- parse table with extra paramters
39    parse_extra()
40
41    -- get potential working directory
42    if not flags.w then
43        flags.w = ''
44    end
45
46    -- do this after setting the package name
47    if flags.L then
48        if string.sub(flags.L, 1, 1) == '/' or string.sub(flags.L, 1, 1) == '\\' or (string.len(flags.L) > 1 and string.sub(flags.L, 2, 2) == ':') then
49            dofile(flags.L)
50        else
51            dofile(flags.w..'/'..flags.L)
52        end
53    end
54
55    -- add cppstring
56    if not flags.S then
57        _basic['string'] = 'cppstring'
58        _basic['std::string'] = 'cppstring'
59        _basic_ctype.cppstring = 'const char*'
60    end
61
62    -- proccess package
63    local file
64    if flags.f then
65        if string.sub(flags.f, 1, 1) == '/' or string.sub(flags.f, 1, 1) == '\\' or (string.len(flags.f) > 1 and string.sub(flags.f, 2, 2) == ':') then
66            file = flags.f
67        else
68            file = flags.w..'/'..flags.f
69        end
70    else
71        file = flags.f
72    end
73    local p  = Package(flags.n, file)
74
75    if flags.p then
76        return        -- only parse
77    end
78
79    if flags.o then
80        local file
81        if string.sub(flags.o, 1, 1) == '/' or string.sub(flags.o, 1, 1) == '\\' or (string.len(flags.o) > 1 and string.sub(flags.o, 2, 2) == ':') then
82            file = flags.o
83        else
84            file = flags.w..'/'..flags.o
85        end
86        local st,msg = writeto(file)
87        if not st then
88            error('#'..msg)
89        end
90    end
91
92    p:decltype()
93    if flags.P then
94        p:print()
95    else
96        p:preamble()
97        p:supcode()
98        p:register()
99        push(p)
100        post_output_hook(p)
101        pop()
102    end
103
104    if flags.o then
105        writeto()
106    end
107
108    -- write header file
109    if not flags.P then
110        if flags.H then
111            local file
112            if string.sub(flags.H, 1, 1) == '/' or string.sub(flags.H, 1, 1) == '\\' or (string.len(flags.H) > 1 and string.sub(flags.H, 2, 2) == ':') then
113                file = flags.H
114            else
115                file = flags.w..'/'..flags.H
116            end
117            local st,msg = writeto(file)
118            if not st then
119                error('#'..msg)
120            end
121            p:header()
122            writeto()
123        end
124    end
125end
126
Note: See TracBrowser for help on using the repository browser.