-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathParser.gs
131 lines (91 loc) · 3.18 KB
/
Parser.gs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
/*
* @author Ivan Kutil
* @email codeasi@gmail.com
* @library_key: M1lugvAXKKtUxn_vdAG9JZleS6DrsjUUV
*/
var Parser_ = function(content) {
this.content = content;
this.direction = "from";
this._from = {};
this._to = {};
this.index = 0;
this.log = false;
this.position = 0;
}
Parser_.prototype.from = function(pattern,offset) {
if (this.log) Logger.log("Parser.from: "+ pattern)
this._from.text = pattern;
this._from.offset= offset || 0
return this;
}
Parser_.prototype.to = function(pattern,offset) {
if (this.log) Logger.log("Parser.to: "+ pattern);
this._to.text = pattern;
this._to.offset= offset || 0;
return this;
}
Parser_.prototype.offset = function(index) {
this.index =index
return this;
}
Parser_.prototype.setDirection = function(way) {
this.direction = way;
return this;
}
Parser_.prototype.setLog = function() {
this.log = true;
return this;
}
Parser_.prototype.build = function() {
var txt = this.content;
var temp = 0;
var obj = {}
obj.from = this._from;
obj.to = this._to
obj.index = this.index;
if (this.log) Logger.log("Index offset %s", this.index);
var keyword = {};
if (this.direction == "from") {
if (this.log) Logger.log("from_mode");
this.position = txt.indexOf(obj.from.text,obj.index);
if (this.log) Logger.log("Iterate offset: %s", this.position);
keyword.from = this.position + parseInt(obj.from.offset,10) + obj.from.text.length;
keyword.to = txt.indexOf(obj.to.text,keyword.from+1) + parseInt(obj.to.offset,10);
if (this.log) Logger.log("to:"+txt.indexOf(obj.to.text,keyword.from+1))
} else {
if (this.log) Logger.log("to_mode");
keyword.to = txt.indexOf(obj.to.text)+ parseInt(obj.to.offset,10);
keyword.from = txt.lastIndexOf(obj.from.text, keyword.to) + parseInt(obj.from.offset,10) + obj.from.text.length;
}
if (this.log) Logger.log(keyword);
this.end = keyword.to;
this.last = txt.lastIndexOf(obj.from.text);
return txt.substring(keyword.from,keyword.to);
}
Parser_.prototype.iterate = function() {
var keywords = [];
var start = true;
while(start || this.last != this.position) {
var keyword = this.build();
if (this.log) {
Logger.log("LastIndexOf: %s", this.last);
Logger.log("Now indexOf: %s", this.position);
Logger.log(keyword);
Logger.log("End at %s", this.end)
Logger.log("------------------------");
}
this.index = this.end;
keywords.push(keyword);
start = false;
}
return keywords;
}
/*
* Extract parts from long content
*
* @param {String} content Text to parse
* @return {object} the result of the exponential calculation
*/
function data(content) {
return new Parser_(content);
}