1 | EditAreaLoader.prototype.get_regexp= function(text_array){ |
---|
2 | //res="( |=|\\n|\\r|\\[|\\(|µ|)("; |
---|
3 | res="(\\b)("; |
---|
4 | for(i=0; i<text_array.length; i++){ |
---|
5 | if(i>0) |
---|
6 | res+="|"; |
---|
7 | //res+="("+ tab_text[i] +")"; |
---|
8 | //res+=tab_text[i].replace(/(\.|\?|\*|\+|\\|\(|\)|\[|\]|\{|\})/g, "\\$1"); |
---|
9 | res+=this.get_escaped_regexp(text_array[i]); |
---|
10 | } |
---|
11 | //res+=")( |\\.|:|\\{|\\(|\\)|\\[|\\]|\'|\"|\\r|\\n|\\t|$)"; |
---|
12 | res+=")(\\b)"; |
---|
13 | reg= new RegExp(res); |
---|
14 | |
---|
15 | return res; |
---|
16 | }; |
---|
17 | |
---|
18 | |
---|
19 | EditAreaLoader.prototype.get_escaped_regexp= function(str){ |
---|
20 | return str.toString().replace(/(\.|\?|\*|\+|\\|\(|\)|\[|\]|\}|\{|\$|\^|\|)/g, "\\$1"); |
---|
21 | }; |
---|
22 | |
---|
23 | EditAreaLoader.prototype.init_syntax_regexp= function(){ |
---|
24 | var lang_style= {}; |
---|
25 | for(var lang in this.load_syntax){ |
---|
26 | if(!this.syntax[lang]) // init the regexp if not already initialized |
---|
27 | { |
---|
28 | this.syntax[lang]= {}; |
---|
29 | this.syntax[lang]["keywords_reg_exp"]= {}; |
---|
30 | this.keywords_reg_exp_nb=0; |
---|
31 | |
---|
32 | if(this.load_syntax[lang]['KEYWORDS']){ |
---|
33 | param="g"; |
---|
34 | if(this.load_syntax[lang]['KEYWORD_CASE_SENSITIVE']===false) |
---|
35 | param+="i"; |
---|
36 | for(var i in this.load_syntax[lang]['KEYWORDS']){ |
---|
37 | if(typeof(this.load_syntax[lang]['KEYWORDS'][i])=="function") continue; |
---|
38 | this.syntax[lang]["keywords_reg_exp"][i]= new RegExp(this.get_regexp( this.load_syntax[lang]['KEYWORDS'][i] ), param); |
---|
39 | this.keywords_reg_exp_nb++; |
---|
40 | } |
---|
41 | } |
---|
42 | |
---|
43 | if(this.load_syntax[lang]['OPERATORS']){ |
---|
44 | var str=""; |
---|
45 | var nb=0; |
---|
46 | for(var i in this.load_syntax[lang]['OPERATORS']){ |
---|
47 | if(typeof(this.load_syntax[lang]['OPERATORS'][i])=="function") continue; |
---|
48 | if(nb>0) |
---|
49 | str+="|"; |
---|
50 | str+=this.get_escaped_regexp(this.load_syntax[lang]['OPERATORS'][i]); |
---|
51 | nb++; |
---|
52 | } |
---|
53 | if(str.length>0) |
---|
54 | this.syntax[lang]["operators_reg_exp"]= new RegExp("("+str+")","g"); |
---|
55 | } |
---|
56 | |
---|
57 | if(this.load_syntax[lang]['DELIMITERS']){ |
---|
58 | var str=""; |
---|
59 | var nb=0; |
---|
60 | for(var i in this.load_syntax[lang]['DELIMITERS']){ |
---|
61 | if(typeof(this.load_syntax[lang]['DELIMITERS'][i])=="function") continue; |
---|
62 | if(nb>0) |
---|
63 | str+="|"; |
---|
64 | str+=this.get_escaped_regexp(this.load_syntax[lang]['DELIMITERS'][i]); |
---|
65 | nb++; |
---|
66 | } |
---|
67 | if(str.length>0) |
---|
68 | this.syntax[lang]["delimiters_reg_exp"]= new RegExp("("+str+")","g"); |
---|
69 | } |
---|
70 | |
---|
71 | |
---|
72 | // /(("(\\"|[^"])*"?)|('(\\'|[^'])*'?)|(//(.|\r|\t)*\n)|(/\*(.|\n|\r|\t)*\*/)|(<!--(.|\n|\r|\t)*-->))/gi |
---|
73 | var syntax_trace=[]; |
---|
74 | |
---|
75 | // /("(?:[^"\\]*(\\\\)*(\\"?)?)*("|$))/g |
---|
76 | |
---|
77 | this.syntax[lang]["quotes"]={}; |
---|
78 | var quote_tab= []; |
---|
79 | if(this.load_syntax[lang]['QUOTEMARKS']){ |
---|
80 | for(var i in this.load_syntax[lang]['QUOTEMARKS']){ |
---|
81 | if(typeof(this.load_syntax[lang]['QUOTEMARKS'][i])=="function") continue; |
---|
82 | var x=this.get_escaped_regexp(this.load_syntax[lang]['QUOTEMARKS'][i]); |
---|
83 | this.syntax[lang]["quotes"][x]=x; |
---|
84 | //quote_tab[quote_tab.length]="("+x+"(?:\\\\"+x+"|[^"+x+"])*("+x+"|$))"; |
---|
85 | //previous working : quote_tab[quote_tab.length]="("+x+"(?:[^"+x+"\\\\]*(\\\\\\\\)*(\\\\"+x+"?)?)*("+x+"|$))"; |
---|
86 | quote_tab[quote_tab.length]="("+ x +"(\\\\.|[^"+ x +"])*(?:"+ x +"|$))"; |
---|
87 | |
---|
88 | syntax_trace.push(x); |
---|
89 | } |
---|
90 | } |
---|
91 | |
---|
92 | this.syntax[lang]["comments"]={}; |
---|
93 | if(this.load_syntax[lang]['COMMENT_SINGLE']){ |
---|
94 | for(var i in this.load_syntax[lang]['COMMENT_SINGLE']){ |
---|
95 | if(typeof(this.load_syntax[lang]['COMMENT_SINGLE'][i])=="function") continue; |
---|
96 | var x=this.get_escaped_regexp(this.load_syntax[lang]['COMMENT_SINGLE'][i]); |
---|
97 | quote_tab[quote_tab.length]="("+x+"(.|\\r|\\t)*(\\n|$))"; |
---|
98 | syntax_trace.push(x); |
---|
99 | this.syntax[lang]["comments"][x]="\n"; |
---|
100 | } |
---|
101 | } |
---|
102 | // (/\*(.|[\r\n])*?\*/) |
---|
103 | if(this.load_syntax[lang]['COMMENT_MULTI']){ |
---|
104 | for(var i in this.load_syntax[lang]['COMMENT_MULTI']){ |
---|
105 | if(typeof(this.load_syntax[lang]['COMMENT_MULTI'][i])=="function") continue; |
---|
106 | var start=this.get_escaped_regexp(i); |
---|
107 | var end=this.get_escaped_regexp(this.load_syntax[lang]['COMMENT_MULTI'][i]); |
---|
108 | quote_tab[quote_tab.length]="("+start+"(.|\\n|\\r)*?("+end+"|$))"; |
---|
109 | syntax_trace.push(start); |
---|
110 | syntax_trace.push(end); |
---|
111 | this.syntax[lang]["comments"][i]=this.load_syntax[lang]['COMMENT_MULTI'][i]; |
---|
112 | } |
---|
113 | } |
---|
114 | if(quote_tab.length>0) |
---|
115 | this.syntax[lang]["comment_or_quote_reg_exp"]= new RegExp("("+quote_tab.join("|")+")","gi"); |
---|
116 | |
---|
117 | if(syntax_trace.length>0) // /((.|\n)*?)(\\*("|'|\/\*|\*\/|\/\/|$))/g |
---|
118 | this.syntax[lang]["syntax_trace_regexp"]= new RegExp("((.|\n)*?)(\\\\*("+ syntax_trace.join("|") +"|$))", "gmi"); |
---|
119 | |
---|
120 | if(this.load_syntax[lang]['SCRIPT_DELIMITERS']){ |
---|
121 | this.syntax[lang]["script_delimiters"]= {}; |
---|
122 | for(var i in this.load_syntax[lang]['SCRIPT_DELIMITERS']){ |
---|
123 | if(typeof(this.load_syntax[lang]['SCRIPT_DELIMITERS'][i])=="function") continue; |
---|
124 | this.syntax[lang]["script_delimiters"][i]= this.load_syntax[lang]['SCRIPT_DELIMITERS']; |
---|
125 | } |
---|
126 | } |
---|
127 | |
---|
128 | this.syntax[lang]["custom_regexp"]= {}; |
---|
129 | if(this.load_syntax[lang]['REGEXPS']){ |
---|
130 | for(var i in this.load_syntax[lang]['REGEXPS']){ |
---|
131 | if(typeof(this.load_syntax[lang]['REGEXPS'][i])=="function") continue; |
---|
132 | var val= this.load_syntax[lang]['REGEXPS'][i]; |
---|
133 | if(!this.syntax[lang]["custom_regexp"][val['execute']]) |
---|
134 | this.syntax[lang]["custom_regexp"][val['execute']]= {}; |
---|
135 | this.syntax[lang]["custom_regexp"][val['execute']][i]={'regexp' : new RegExp(val['search'], val['modifiers']) |
---|
136 | , 'class' : val['class']}; |
---|
137 | } |
---|
138 | } |
---|
139 | |
---|
140 | if(this.load_syntax[lang]['STYLES']){ |
---|
141 | lang_style[lang]= {}; |
---|
142 | for(var i in this.load_syntax[lang]['STYLES']){ |
---|
143 | if(typeof(this.load_syntax[lang]['STYLES'][i])=="function") continue; |
---|
144 | if(typeof(this.load_syntax[lang]['STYLES'][i]) != "string"){ |
---|
145 | for(var j in this.load_syntax[lang]['STYLES'][i]){ |
---|
146 | lang_style[lang][j]= this.load_syntax[lang]['STYLES'][i][j]; |
---|
147 | } |
---|
148 | }else{ |
---|
149 | lang_style[lang][i]= this.load_syntax[lang]['STYLES'][i]; |
---|
150 | } |
---|
151 | } |
---|
152 | } |
---|
153 | // build style string |
---|
154 | var style=""; |
---|
155 | for(var i in lang_style[lang]){ |
---|
156 | if(lang_style[lang][i].length>0){ |
---|
157 | style+= "."+ lang +" ."+ i.toLowerCase() +" span{"+lang_style[lang][i]+"}\n"; |
---|
158 | style+= "."+ lang +" ."+ i.toLowerCase() +"{"+lang_style[lang][i]+"}\n"; |
---|
159 | } |
---|
160 | } |
---|
161 | this.syntax[lang]["styles"]=style; |
---|
162 | } |
---|
163 | } |
---|
164 | }; |
---|
165 | |
---|
166 | editAreaLoader.waiting_loading["reg_syntax.js"]= "loaded"; |
---|