|
7 | 7 |
|
8 | 8 | <style> |
9 | 9 |
|
| 10 | + :host |
| 11 | + {} |
| 12 | + |
| 13 | + |
| 14 | + #hdr |
| 15 | + {} |
| 16 | + |
| 17 | + |
| 18 | + #list |
| 19 | + {} |
| 20 | + .fn |
| 21 | + {} |
| 22 | + .label |
| 23 | + {} |
| 24 | + |
| 25 | + |
10 | 26 | </style> |
11 | 27 |
|
| 28 | + <div id=hdr> |
| 29 | + </div> |
| 30 | + |
| 31 | + <div id=view> |
| 32 | + <div class=fn> |
| 33 | + </div> |
| 34 | + <div class=label> |
| 35 | + </div> |
| 36 | + </div> |
| 37 | + |
12 | 38 | </template> |
13 | 39 |
|
14 | 40 | <script> |
|
21 | 47 |
|
22 | 48 | var df=true,did='code-explorer'; |
23 | 49 |
|
24 | | - var debug |
| 50 | + var debug,$,editor |
25 | 51 | ; |
26 | 52 |
|
27 | 53 | obj.initmod = function(...list){ |
|
31 | 57 | df = mod.rd(params,'df',df); |
32 | 58 | debug = mod.rd(params,'debug',debug); |
33 | 59 | $ = mod.rd(params,'$',$); |
| 60 | + editor = mod.rd(params,'editor',editor); |
34 | 61 |
|
35 | 62 | }); |
36 | 63 |
|
|
43 | 70 | var shadow; |
44 | 71 |
|
45 | 72 |
|
| 73 | + var view; |
| 74 | + var ui = {}; |
| 75 | + |
| 76 | + |
| 77 | + |
| 78 | + |
| 79 | + var sort = {}; |
| 80 | + sort.alpha = {}; |
| 81 | + sort.source = {}; |
| 82 | + |
| 83 | + |
| 84 | + |
46 | 85 | //: |
47 | 86 |
|
48 | 87 |
|
|
60 | 99 | shadow = host.shadowRoot; |
61 | 100 |
|
62 | 101 |
|
| 102 | + view = $(shadow,'#view'); |
| 103 | + |
| 104 | + ui.fn = $(shadow,'.fn'); |
| 105 | + ui.fn.remove(); |
| 106 | + |
| 107 | + ui.label = $(shadow,'.label'); |
| 108 | + ui.label.remove(); |
| 109 | + |
| 110 | + |
| 111 | + |
63 | 112 | }//initdom |
64 | 113 |
|
65 | 114 |
|
66 | 115 | //: |
67 | 116 |
|
68 | 117 |
|
69 | 118 |
|
| 119 | + obj.update = update; |
| 120 | + |
| 121 | + function update(){ //d |
| 122 | + //var d=debug('update'); |
| 123 | + var txt = editor.getvalue(); |
| 124 | + parse(txt); |
| 125 | + |
| 126 | + console.log(list); |
| 127 | + |
| 128 | + }//update |
| 129 | + |
| 130 | + |
70 | 131 | //: |
71 | 132 |
|
72 | 133 |
|
| 134 | + |
| 135 | + |
| 136 | + function parse(txt){ |
| 137 | + |
| 138 | + list = {}; |
| 139 | + list.fn = parse.fn(txt); |
| 140 | + list.label = parse.label(txt); |
| 141 | + |
| 142 | + }//parse |
| 143 | + |
| 144 | + |
| 145 | + parse.fn = function(txt){ |
| 146 | + |
| 147 | + var list = []; |
| 148 | + var index = 0; |
| 149 | + var ec = true; |
| 150 | + while(ec){ |
| 151 | + |
| 152 | + var i1 = line.indexOf('function',index); |
| 153 | + if(i1==-1)break; |
| 154 | + |
| 155 | + var o; |
| 156 | + |
| 157 | + o = parse.type1(txt,i1); |
| 158 | + if(o){ |
| 159 | + list.push(o); |
| 160 | + } |
| 161 | + o = parse.type2(txt,i1); |
| 162 | + if(o){ |
| 163 | + list.push(o); |
| 164 | + } |
| 165 | + |
| 166 | + }//while |
| 167 | + |
| 168 | + return list; |
| 169 | + |
| 170 | + }//fn |
| 171 | + |
| 172 | + |
| 173 | + parse.label = function(txt){ |
| 174 | + |
| 175 | + var list = []; |
| 176 | + var regex = /\/\/\s*([^:\r\n]+):/g; |
| 177 | + |
| 178 | + var ec = true; |
| 179 | + while(ec){ |
| 180 | + |
| 181 | + var match = regex.exec(code); |
| 182 | + if(match===null)break; |
| 183 | + |
| 184 | + var line = lineno(txt,match.index); |
| 185 | + var label = match[1].trim(); |
| 186 | + |
| 187 | + list.push({line,label}); |
| 188 | + |
| 189 | + }//while |
| 190 | + |
| 191 | + return list; |
| 192 | + |
| 193 | + }//label |
| 194 | + |
| 195 | + |
| 196 | + parse.type1 = function(txt,i1){ |
| 197 | + |
| 198 | + i1 += 8; |
| 199 | + var i2 = txt.indexOf('(',i1); |
| 200 | + var name = txt.slice(i1,i2).trim(); |
| 201 | + if(!valid(name))return; |
| 202 | + |
| 203 | + var args = parse.args(txt,i1); |
| 204 | + |
| 205 | + var line = lineno(txt,i1); |
| 206 | + return {line,name,args}; |
| 207 | + |
| 208 | + }//type1 |
| 209 | + |
| 210 | + |
| 211 | + parse.type2 = function(txt,i1){ |
| 212 | + |
| 213 | + var i2 = txt.lastIndexOf('='); |
| 214 | + if(i2==-1)return; |
| 215 | + |
| 216 | + var str = txt.slice(i2+1,i1); |
| 217 | + if(!/^\s*$/.test(str))return; |
| 218 | + |
| 219 | + for(var i3=i2-1;i3>=0;i3--){ |
| 220 | + |
| 221 | + var c = txt[i3]; |
| 222 | + if(!/^\s*$/.test(c))break; |
| 223 | + |
| 224 | + }//for |
| 225 | + |
| 226 | + for(var i4=i3;i4>=0;i4--){ |
| 227 | + |
| 228 | + var c = txt[i4]; |
| 229 | + if(/^\s*$/.test(c))break; |
| 230 | + |
| 231 | + }//for |
| 232 | + |
| 233 | + var name = txt.slice(i4+1,i3); |
| 234 | + if(!valid(name))return; |
| 235 | + |
| 236 | + var args = parse.args(txt,i1); |
| 237 | + |
| 238 | + var line = lineno(txt,i1); |
| 239 | + return {line,name,args}; |
| 240 | + |
| 241 | + }//type2 |
| 242 | + |
| 243 | + |
| 244 | + parse.args = function(txt,i1){ |
| 245 | + |
| 246 | + var i2 = txt.indexOf('(',i1); |
| 247 | + var i3 = txt.indexOf(')',i2); |
| 248 | + var args = txt.slice(i2-1,i3+1); |
| 249 | + args = args.replace(' ',''); |
| 250 | + return args; |
| 251 | + |
| 252 | + }//args |
| 253 | + |
| 254 | + |
| 255 | + parse.label = function(txt){ |
| 256 | + }//label |
| 257 | + |
| 258 | + |
| 259 | + //: |
| 260 | + |
| 261 | + |
| 262 | + function valid(str){ |
| 263 | + |
| 264 | + var regex = /^[a-zA-Z_$][0-9a-zA-Z_$]*$/ |
| 265 | + var result = regex.test(str); |
| 266 | + return result; |
| 267 | + |
| 268 | + }//valid |
| 269 | + |
| 270 | + |
| 271 | + function line(txt,i){ |
| 272 | + |
| 273 | + var start = 0; |
| 274 | + var end = i; |
| 275 | + var substring = str.slice(start,end); |
| 276 | + var newlines = substring.match(/\r\n|\n|\r/g); |
| 277 | + var count = newlines ? newlines.length : 0; |
| 278 | + return count; |
| 279 | + |
| 280 | + }//line |
| 281 | + |
| 282 | + |
| 283 | + function ws(txt,i1){ |
| 284 | + |
| 285 | + var regex = /\s*/y; |
| 286 | + regex.lastIndex = index; |
| 287 | + var match = txt.match(regex); |
| 288 | + var n = math.length; |
| 289 | + return n; |
| 290 | + |
| 291 | + }//ws |
| 292 | + |
| 293 | + |
| 294 | + |
| 295 | + |
| 296 | + |
| 297 | + |
| 298 | + |
| 299 | + |
| 300 | + |
| 301 | + |
| 302 | + |
| 303 | + |
| 304 | + |
| 305 | + |
| 306 | + |
| 307 | + |
| 308 | + |
| 309 | + |
| 310 | + |
| 311 | + |
| 312 | + |
| 313 | + |
73 | 314 | return obj; |
74 | 315 |
|
75 | 316 | //code-explorer |
|
0 commit comments