d165ae8174ca82d67a6bf10f31de89e3c75c827c
[platform/framework/web/crosswalk-tizen.git] /
1 module.exports = balanced;
2 function balanced(a, b, str) {
3   var bal = 0;
4   var m = {};
5   var ended = false;
6
7   for (var i = 0; i < str.length; i++) {
8     if (a == str.substr(i, a.length)) {
9       if (!('start' in m)) m.start = i;
10       bal++;
11     }
12     else if (b == str.substr(i, b.length) && 'start' in m) {
13       ended = true;
14       bal--;
15       if (!bal) {
16         m.end = i;
17         m.pre = str.substr(0, m.start);
18         m.body = (m.end - m.start > 1)
19           ? str.substring(m.start + a.length, m.end)
20           : '';
21         m.post = str.slice(m.end + b.length);
22         return m;
23       }
24     }
25   }
26
27   // if we opened more than we closed, find the one we closed
28   if (bal && ended) {
29     var start = m.start + a.length;
30     m = balanced(a, b, str.substr(start));
31     if (m) {
32       m.start += start;
33       m.end += start;
34       m.pre = str.slice(0, start) + m.pre;
35     }
36     return m;
37   }
38 }