167 lines
6.5 KiB
JavaScript
167 lines
6.5 KiB
JavaScript
|
EditAreaLoader.prototype.get_regexp= function(text_array){
|
||
|
//res="( |=|\\n|\\r|\\[|\\(|µ|)(";
|
||
|
res="(\\b)(";
|
||
|
for(i=0; i<text_array.length; i++){
|
||
|
if(i>0)
|
||
|
res+="|";
|
||
|
//res+="("+ tab_text[i] +")";
|
||
|
//res+=tab_text[i].replace(/(\.|\?|\*|\+|\\|\(|\)|\[|\]|\{|\})/g, "\\$1");
|
||
|
res+=this.get_escaped_regexp(text_array[i]);
|
||
|
}
|
||
|
//res+=")( |\\.|:|\\{|\\(|\\)|\\[|\\]|\'|\"|\\r|\\n|\\t|$)";
|
||
|
res+=")(\\b)";
|
||
|
reg= new RegExp(res);
|
||
|
|
||
|
return res;
|
||
|
};
|
||
|
|
||
|
|
||
|
EditAreaLoader.prototype.get_escaped_regexp= function(str){
|
||
|
return str.toString().replace(/(\.|\?|\*|\+|\\|\(|\)|\[|\]|\}|\{|\$|\^|\|)/g, "\\$1");
|
||
|
};
|
||
|
|
||
|
EditAreaLoader.prototype.init_syntax_regexp= function(){
|
||
|
var lang_style= {};
|
||
|
for(var lang in this.load_syntax){
|
||
|
if(!this.syntax[lang]) // init the regexp if not already initialized
|
||
|
{
|
||
|
this.syntax[lang]= {};
|
||
|
this.syntax[lang]["keywords_reg_exp"]= {};
|
||
|
this.keywords_reg_exp_nb=0;
|
||
|
|
||
|
if(this.load_syntax[lang]['KEYWORDS']){
|
||
|
param="g";
|
||
|
if(this.load_syntax[lang]['KEYWORD_CASE_SENSITIVE']===false)
|
||
|
param+="i";
|
||
|
for(var i in this.load_syntax[lang]['KEYWORDS']){
|
||
|
if(typeof(this.load_syntax[lang]['KEYWORDS'][i])=="function") continue;
|
||
|
this.syntax[lang]["keywords_reg_exp"][i]= new RegExp(this.get_regexp( this.load_syntax[lang]['KEYWORDS'][i] ), param);
|
||
|
this.keywords_reg_exp_nb++;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if(this.load_syntax[lang]['OPERATORS']){
|
||
|
var str="";
|
||
|
var nb=0;
|
||
|
for(var i in this.load_syntax[lang]['OPERATORS']){
|
||
|
if(typeof(this.load_syntax[lang]['OPERATORS'][i])=="function") continue;
|
||
|
if(nb>0)
|
||
|
str+="|";
|
||
|
str+=this.get_escaped_regexp(this.load_syntax[lang]['OPERATORS'][i]);
|
||
|
nb++;
|
||
|
}
|
||
|
if(str.length>0)
|
||
|
this.syntax[lang]["operators_reg_exp"]= new RegExp("("+str+")","g");
|
||
|
}
|
||
|
|
||
|
if(this.load_syntax[lang]['DELIMITERS']){
|
||
|
var str="";
|
||
|
var nb=0;
|
||
|
for(var i in this.load_syntax[lang]['DELIMITERS']){
|
||
|
if(typeof(this.load_syntax[lang]['DELIMITERS'][i])=="function") continue;
|
||
|
if(nb>0)
|
||
|
str+="|";
|
||
|
str+=this.get_escaped_regexp(this.load_syntax[lang]['DELIMITERS'][i]);
|
||
|
nb++;
|
||
|
}
|
||
|
if(str.length>0)
|
||
|
this.syntax[lang]["delimiters_reg_exp"]= new RegExp("("+str+")","g");
|
||
|
}
|
||
|
|
||
|
|
||
|
// /(("(\\"|[^"])*"?)|('(\\'|[^'])*'?)|(//(.|\r|\t)*\n)|(/\*(.|\n|\r|\t)*\*/)|(<!--(.|\n|\r|\t)*-->))/gi
|
||
|
var syntax_trace=[];
|
||
|
|
||
|
// /("(?:[^"\\]*(\\\\)*(\\"?)?)*("|$))/g
|
||
|
|
||
|
this.syntax[lang]["quotes"]={};
|
||
|
var quote_tab= [];
|
||
|
if(this.load_syntax[lang]['QUOTEMARKS']){
|
||
|
for(var i in this.load_syntax[lang]['QUOTEMARKS']){
|
||
|
if(typeof(this.load_syntax[lang]['QUOTEMARKS'][i])=="function") continue;
|
||
|
var x=this.get_escaped_regexp(this.load_syntax[lang]['QUOTEMARKS'][i]);
|
||
|
this.syntax[lang]["quotes"][x]=x;
|
||
|
//quote_tab[quote_tab.length]="("+x+"(?:\\\\"+x+"|[^"+x+"])*("+x+"|$))";
|
||
|
//previous working : quote_tab[quote_tab.length]="("+x+"(?:[^"+x+"\\\\]*(\\\\\\\\)*(\\\\"+x+"?)?)*("+x+"|$))";
|
||
|
quote_tab[quote_tab.length]="("+ x +"(\\\\.|[^"+ x +"])*(?:"+ x +"|$))";
|
||
|
|
||
|
syntax_trace.push(x);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
this.syntax[lang]["comments"]={};
|
||
|
if(this.load_syntax[lang]['COMMENT_SINGLE']){
|
||
|
for(var i in this.load_syntax[lang]['COMMENT_SINGLE']){
|
||
|
if(typeof(this.load_syntax[lang]['COMMENT_SINGLE'][i])=="function") continue;
|
||
|
var x=this.get_escaped_regexp(this.load_syntax[lang]['COMMENT_SINGLE'][i]);
|
||
|
quote_tab[quote_tab.length]="("+x+"(.|\\r|\\t)*(\\n|$))";
|
||
|
syntax_trace.push(x);
|
||
|
this.syntax[lang]["comments"][x]="\n";
|
||
|
}
|
||
|
}
|
||
|
// (/\*(.|[\r\n])*?\*/)
|
||
|
if(this.load_syntax[lang]['COMMENT_MULTI']){
|
||
|
for(var i in this.load_syntax[lang]['COMMENT_MULTI']){
|
||
|
if(typeof(this.load_syntax[lang]['COMMENT_MULTI'][i])=="function") continue;
|
||
|
var start=this.get_escaped_regexp(i);
|
||
|
var end=this.get_escaped_regexp(this.load_syntax[lang]['COMMENT_MULTI'][i]);
|
||
|
quote_tab[quote_tab.length]="("+start+"(.|\\n|\\r)*?("+end+"|$))";
|
||
|
syntax_trace.push(start);
|
||
|
syntax_trace.push(end);
|
||
|
this.syntax[lang]["comments"][i]=this.load_syntax[lang]['COMMENT_MULTI'][i];
|
||
|
}
|
||
|
}
|
||
|
if(quote_tab.length>0)
|
||
|
this.syntax[lang]["comment_or_quote_reg_exp"]= new RegExp("("+quote_tab.join("|")+")","gi");
|
||
|
|
||
|
if(syntax_trace.length>0) // /((.|\n)*?)(\\*("|'|\/\*|\*\/|\/\/|$))/g
|
||
|
this.syntax[lang]["syntax_trace_regexp"]= new RegExp("((.|\n)*?)(\\\\*("+ syntax_trace.join("|") +"|$))", "gmi");
|
||
|
|
||
|
if(this.load_syntax[lang]['SCRIPT_DELIMITERS']){
|
||
|
this.syntax[lang]["script_delimiters"]= {};
|
||
|
for(var i in this.load_syntax[lang]['SCRIPT_DELIMITERS']){
|
||
|
if(typeof(this.load_syntax[lang]['SCRIPT_DELIMITERS'][i])=="function") continue;
|
||
|
this.syntax[lang]["script_delimiters"][i]= this.load_syntax[lang]['SCRIPT_DELIMITERS'];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
this.syntax[lang]["custom_regexp"]= {};
|
||
|
if(this.load_syntax[lang]['REGEXPS']){
|
||
|
for(var i in this.load_syntax[lang]['REGEXPS']){
|
||
|
if(typeof(this.load_syntax[lang]['REGEXPS'][i])=="function") continue;
|
||
|
var val= this.load_syntax[lang]['REGEXPS'][i];
|
||
|
if(!this.syntax[lang]["custom_regexp"][val['execute']])
|
||
|
this.syntax[lang]["custom_regexp"][val['execute']]= {};
|
||
|
this.syntax[lang]["custom_regexp"][val['execute']][i]={'regexp' : new RegExp(val['search'], val['modifiers'])
|
||
|
, 'class' : val['class']};
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if(this.load_syntax[lang]['STYLES']){
|
||
|
lang_style[lang]= {};
|
||
|
for(var i in this.load_syntax[lang]['STYLES']){
|
||
|
if(typeof(this.load_syntax[lang]['STYLES'][i])=="function") continue;
|
||
|
if(typeof(this.load_syntax[lang]['STYLES'][i]) != "string"){
|
||
|
for(var j in this.load_syntax[lang]['STYLES'][i]){
|
||
|
lang_style[lang][j]= this.load_syntax[lang]['STYLES'][i][j];
|
||
|
}
|
||
|
}else{
|
||
|
lang_style[lang][i]= this.load_syntax[lang]['STYLES'][i];
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
// build style string
|
||
|
var style="";
|
||
|
for(var i in lang_style[lang]){
|
||
|
if(lang_style[lang][i].length>0){
|
||
|
style+= "."+ lang +" ."+ i.toLowerCase() +" span{"+lang_style[lang][i]+"}\n";
|
||
|
style+= "."+ lang +" ."+ i.toLowerCase() +"{"+lang_style[lang][i]+"}\n";
|
||
|
}
|
||
|
}
|
||
|
this.syntax[lang]["styles"]=style;
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
editAreaLoader.waiting_loading["reg_syntax.js"]= "loaded";
|