aboutsummaryrefslogtreecommitdiffstats
path: root/plugins/LocalFilesEditor/editarea/reg_syntax.js
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--plugins/LocalFilesEditor/editarea/reg_syntax.js166
1 files changed, 166 insertions, 0 deletions
diff --git a/plugins/LocalFilesEditor/editarea/reg_syntax.js b/plugins/LocalFilesEditor/editarea/reg_syntax.js
new file mode 100644
index 000000000..11518cc13
--- /dev/null
+++ b/plugins/LocalFilesEditor/editarea/reg_syntax.js
@@ -0,0 +1,166 @@
+ 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";