Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/gui/src/tolua/lua/clean.lua @ 2030

Last change on this file since 2030 was 1650, checked in by rgrieder, 16 years ago

added preliminary automatic creation of tolua generator that creates the actual executable
(please don't ask about the egg-hen question…)

File size: 1.3 KB
Line 
1-- mark up comments and strings
2STR1 = "\001"
3STR2 = "\002"
4STR3 = "\003"
5STR4 = "\004"
6REM  = "\005"
7ANY  = "([\001-\005])"
8ESC1 = "\006"
9ESC2 = "\007"
10
11MASK = { -- the substitution order is important
12 {ESC1, "\\'"},
13 {ESC2, '\\"'},
14 {STR1, "'"},
15 {STR2, '"'},
16 {STR3, "%[%["},
17 {STR4, "%]%]"},
18 {REM , "%-%-"},
19}
20
21function mask (s)
22 for i = 1,getn(MASK)  do
23  s = gsub(s,MASK[i][2],MASK[i][1])
24 end
25 return s
26end
27
28function unmask (s)
29 for i = 1,getn(MASK)  do
30  s = gsub(s,MASK[i][1],MASK[i][2])
31 end
32 return s
33end
34
35function clean (s)
36 -- check for compilation error
37 local code = "return function ()\n" .. s .. "\n end"
38 if not dostring(code) then
39  return nil
40 end
41
42 if flags['C'] then
43        return s
44 end
45
46 local S = "" -- saved string
47
48 s = mask(s)
49
50 -- remove blanks and comments
51 while 1 do
52  local b,e,d = strfind(s,ANY)
53  if b then
54   S = S..strsub(s,1,b-1)
55   s = strsub(s,b+1)
56   if d==STR1 or d==STR2 then
57    e = strfind(s,d)
58    S = S ..d..strsub(s,1,e)
59    s = strsub(s,e+1)
60   elseif d==STR3 then
61    e = strfind(s,STR4)
62    S = S..d..strsub(s,1,e)
63    s = strsub(s,e+1)
64   elseif d==REM then
65    s = gsub(s,"[^\n]*(\n?)","%1",1)
66   end
67  else
68   S = S..s
69   break
70  end
71 end
72 -- eliminate unecessary spaces
73 S = gsub(S,"[ \t]+"," ")
74 S = gsub(S,"[ \t]*\n[ \t]*","\n")
75        S = gsub(S,"\n+","\n")
76 S = unmask(S)
77 return S
78end
79
Note: See TracBrowser for help on using the repository browser.