EditAreaLoader.prototype.get_regexp= function(text_array){ //res="( |=|\\n|\\r|\\[|\\(|ยต|)("; res="(\\b)("; for(i=0; i0) 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)*\*/)|())/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";