//initialize a buffer // If you're using JDK 1.5 or later and want some extra performance this can be a StringBuilder //variables.buffer=createObject("java","java.lang.StringBuilder").init(); variables.buffer=createObject("java","java.lang.StringBuffer").init(); // initialize private variables // TODO : Change the parser state to be a struct rather than individual variables. variables.isCommented=false; variables.isTag=false; variables.isValue=false; variables.isCFSETTag=false; variables.isCFScript=false; variables.isCFQueryTag=false; variables.isOneLineComment=false; variables.isMXML=false; variables.isActionscript=false; variables.isSQL=false; variables.isSQLValue=false; variables.initialparser=""; variables.spansOpened = 0; variables.spansClosed = 0; var BIstream = createObject("java","java.io.StringBufferInputStream").init(arguments.code); var IStream = createObject("java","java.io.InputStreamReader").init(BIstream); var reader = createObject("java","java.io.BufferedReader").init(IStream); var line = reader.readLine(); var linenumber = 0; if (arguments.parser neq "") { "variables.is#arguments.parser#" = true; } if (getConfig().getShowToolbar()) { getToolbarHTML(arguments.code,arguments.codesig); } variables.buffer.append(""); while (isdefined("line")) { if (getConfig().getShowLineNumbers()) { linenumber = linenumber + 1; variables.buffer.append("" & linenumber & ""); } formatLine(line); line = reader.readLine(); } // there appears to be more spans created than cleaned up... closing up any extras... will need to review to see what is keeping extra spans while (variables.spansOpened gt variables.spansClosed) { variables.spansClosed = variables.spansClosed + 1; variables.buffer.append(""); } variables.buffer.append(""); reader.close(); return variables.buffer;
view plain print about
")/>
var character = ""; var thisLine=arguments.line; var i = 0; var endtagPos = 0; var startAttributePos = 0; var keywordskip = 0; if (variables.isOneLineComment) endOneLineComment(); for (i=0; i LT thisLine.length(); i=i+1) { character=thisLine.charAt(javacast('int',i)); if (character EQ '<') { if (variables.isCFScript AND NOT variables.isValue) endCFScript(); if (regionMatches(thisLine, 1, i+1, "!--", 0, 3)) { if (regionMatches(thisLine, 1, i+4, "-", 0, 1)) { startComment("CF"); } else { startComment("HTML"); } } else { if (regionMatches(thisLine, 1, i+1, "CF", 0, 2) OR regionMatches(thisLine, 1, i+1, "/CF", 0, 3)) { startTag("CF"); if (regionMatches(thisLine, 1, i+3, "SET", 0, 3) AND NOT regionMatches(thisLine, 1, i+6, "T", 0, 1)) // CFSET Tag { variables.buffer.append(thisLine.substring(javacast('int',i+1), javacast('int',i+6))); i=i+5; startCFSET(); } else if (regionMatches(thisLine, 1, i+3, "SCRIPT>", 0, 6)) // CFSCRIPT TAG { variables.buffer.append(thisLine.substring(javacast('int',i+1), javacast('int',i+9)) & ">"); i=i+9; startCFScript(); } else if (regionMatches(thisLine, 1, i+3, "QUERY", 0, 5)) // START CFQUERY TAG { // TODO: This sets the value color immediately to match SQL values including the CFQuery tag... variables.isCFQueryTag = true; } else if (regionMatches(thisLine, 1, i+4, "QUERY", 0, 5)) // END CFQUERY TAG { variables.isCFQueryTag = false; endSQL(); } } else if ( regionMatches(thisLine, 1, i+1, "TA", 0, 2) OR regionMatches(thisLine, 1, i+1, "/TA", 0, 3) OR regionMatches(thisLine, 1, i+1, "TB", 0, 2) OR regionMatches(thisLine, 1, i+1, "/TB", 0, 3) OR regionMatches(thisLine, 1, i+1, "TD", 0, 2) OR regionMatches(thisLine, 1, i+1, "/TD", 0, 3) OR regionMatches(thisLine, 1, i+1, "TF", 0, 2) OR regionMatches(thisLine, 1, i+1, "/TF", 0, 3) OR regionMatches(thisLine, 1, i+1, "TH", 0, 2) OR regionMatches(thisLine, 1, i+1, "/TH", 0, 3) OR regionMatches(thisLine, 1, i+1, "TR", 0, 2) OR regionMatches(thisLine, 1, i+1, "/TR", 0, 3) ) // HTML TABLE { startTag("HTMLTABLES"); } else if (regionMatches(thisLine, 1, i+1, "IMG", 0, 3) OR regionMatches(thisLine, 1, i+1, "STY", 0, 3) OR regionMatches(thisLine, 1, i+1, "/STY", 0, 4)) //IMG or STYLE Tag // TODO: Do separate syntax highlighting for stuff inside style { startTag("HTMLSTYLES"); } else if ( regionMatches(thisLine, 1, i+1, "FORM", 0, 4) OR regionMatches(thisLine, 1, i+1, "/FORM", 0, 5) OR regionMatches(thisLine, 1, i+1, "INPUT", 0, 5) OR regionMatches(thisLine, 1, i+1, "/INPUT", 0, 5) OR regionMatches(thisLine, 1, i+1, "TEXT", 0, 4) OR regionMatches(thisLine, 1, i+1, "/TEXT", 0, 5) OR regionMatches(thisLine, 1, i+1, "SELECT", 0, 6) OR regionMatches(thisLine, 1, i+1, "/SELECT", 0, 7) OR regionMatches(thisLine, 1, i+1, "OPT", 0, 3) OR regionMatches(thisLine, 1, i+1, "/OPT", 0, 3) ) { startTag("HTMLFORMS"); } else if ( regionMatches(thisLine, 1, i+1, "MX:", 0, 3) OR regionMatches(thisLine, 1, i+1, "/MX:", 0, 4) ) { if (regionMatches(thisLine, 1, i+4, "SCRIPT>", 0, 6)) // MX:SCRIPT TAG { startTag("ACTIONSCRIPTTAG"); variables.buffer.append(thisLine.substring(javacast('int',i+1), javacast('int',i+10)) & ">"); i=i+10; startActionscript(); } else if (regionMatches(thisLine, 1, i+5, "SCRIPT>", 0, 6)) // END MX:SCRIPT TAG { endActionscript(); startTag("ACTIONSCRIPTTAG"); variables.buffer.append(thisLine.substring(javacast('int',i+1), javacast('int',i+11))); i=i+12; endTag(); } else { startTag("MXML"); startAttributePos=find(' ',thisLine,i+1); //start finding the next space from current position endtagPos=find('>',thisLine,i+1); //start finding the end tag from current position if (startAttributePos neq 0) { // start attribute colors variables.buffer.append(thisLine.substring(javacast('int',i+1), javacast('int',startAttributePos))); i=startAttributePos-1; startMXMLTag(); } else { if (endtagPos neq 0) { // found > variables.buffer.append(thisLine.substring(javacast('int',i+1), javacast('int',endtagPos-1))); i=i+endtagPos; variables.buffer.append(">"); endHighlight(); } } } } else { if (variables.isActionscript or variables.isSQL) { variables.buffer.append("<"); } else { startTag("HTML"); } } } } else if (character EQ '>') { if (variables.isCommented AND regionMatches(thisLine, 1, i-2, "--", 0, 2)) { if (regionMatches(thisLine, 1, i-3, "-", 0, 1)) { endComment("CF"); } else { endComment("HTML"); } } else { if (variables.isCFSETTag) { endCFSET(); } else if (variables.isActionscript) { //This is where a CDATA for AS ends variables.buffer.append(">"); } else if (variables.isSQL) { variables.buffer.append(">"); } else if (variables.isCFQueryTag) { endTag(); startSQL(); } else if (variables.isMXML) { endMXMLTag(); } else { endTag(); } } } else if (character EQ '"') { if (variables.isTag OR variables.isCFScript OR variables.isActionscript) { if (NOT variables.isValue) { startValue(); variables.buffer.append('"'); } else { variables.buffer.append('"'); endValue(); } } else { variables.buffer.append('"'); } } else if (character EQ '{') { startBind(); variables.buffer.append("{"); endBind(); } else if (character EQ '}') { startBind(); variables.buffer.append("}"); endBind(); } else if (character EQ '/') { if ((variables.isCFScript OR variables.isActionscript) AND regionMatches(thisLine, 1, i+1, "/", 0, 1) AND NOT variables.isCommented) { if (variables.isActionscript) { startOneLineComment("MXMLCOMMENT"); variables.buffer.append("/"); } else { startOneLineComment("HTMLCOMMENT"); variables.buffer.append("/"); } } else if (variables.isCommented) { if (regionMatches(thisLine, 1, i-1, "*", 0, 1)) { endComment("SCRIPT"); } else { variables.buffer.append("/"); } } else { if (regionMatches(thisLine, 1, i+1, "*", 0, 1)) { startComment("SCRIPT"); } else { variables.buffer.append("/"); } } } else if (variables.isSQL AND character EQ '-') { if (regionMatches(thisLine, 1, i+1, "-", 0, 1) AND NOT variables.isCommented) { startOneLineComment("SQLCOMMENT"); variables.buffer.append("-"); } else { variables.buffer.append("-"); } } else if (variables.isSQL AND character EQ "'" AND NOT variables.isCommented) { if (NOT variables.isValue) { startValue(); variables.buffer.append("'"); } else { variables.buffer.append("'"); endValue(); } } // straight up replacements else if (character EQ '\t' OR character EQ ' ') { variables.buffer.append("    "); } else if (character EQ ' ') { variables.buffer.append(" "); } else if (character EQ '&') { if (regionMatches(thisLine, 1, i+1, "##", 0, 1)) { variables.buffer.append("&"); } else { variables.buffer.append("&"); } } else { if (not variables.isCommented AND not variables.isValue and (i eq 0 OR NOT listcontainsnocase('a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,@', thisLine.substring(javacast('int',i-1),javacast('int',i))))) { keywordskip = 0; // would like this to be much more generic rather than checking "is" if (variables.isActionscript) { keywordskip = keywordsearch(thisLine,i,"Actionscript"); } else if (variables.isCFscript or variables.isCFSetTag) { keywordskip = keywordsearch(thisLine,i,"CFscript"); } else if (variables.isSQL) { keywordskip = keywordsearch(thisLine,i,"sql"); } if (keywordskip) { i = i + keywordskip; } else { variables.buffer.append(character.toString()); } } else { variables.buffer.append(character.toString()); } } } variables.buffer.append("
");
" & keyword & "")/> ")/> ")/> startHighlight(type); variables.isOneLineComment=true; variables.isCommented=true; endHighlight(); variables.isOneLineComment=false; variables.isCommented=false; if (type EQ "CF") { startHighlight("CFCOMMENT"); variables.buffer.append("<"); } else if (type EQ "HTML") { if (variables.isMXML) { startHighlight("MXMLCOMMENT"); } else { startHighlight("HTMLCOMMENT"); } variables.buffer.append("<"); } else { if (variables.isActionscript) { startHighlight("ACTIONSCRIPTCOMMENT"); } else if (variables.isSQL) { startHighlight("SQLCOMMENT"); } else { startHighlight("CFSCRIPTCOMMENT"); } variables.buffer.append("/"); } variables.isCommented=true; if (type EQ "SCRIPT") { variables.buffer.append("/"); } else { variables.buffer.append(">"); } endHighlight(); variables.isCommented=false; if (NOT variables.isCommented AND NOT variables.isValue) { if (type EQ "CF") { startHighlight("CFTAG"); } else if (type EQ "HTMLSTYLES") { startHighlight("HTMLSTYLES"); } else if (type EQ "HTMLTABLES") { startHighlight("HTMLTABLES"); } else if (type EQ "HTMLFORMS") { startHighlight("HTMLFORMS"); } else if (type EQ "MXML") { startHighlight("MXML"); } else if (type EQ "ACTIONSCRIPTTAG") { startHighlight("ACTIONSCRIPTTAG"); } else { // type is HTML startHighlight("HTML"); } variables.isTag=true; } variables.buffer.append("<"); variables.buffer.append(">"); if (NOT variables.isCommented AND NOT variables.isValue) { endHighlight(); variables.isTag=false; } if (NOT variables.isCommented) { if (variables.isCFSETTag OR variables.isCFScript) { startHighlight("CFSCRIPTVALUE"); } else if (variables.isActionscript) { startHighlight("ACTIONSCRIPTVALUE"); } else if (variables.isMXML) { startHighlight("MXMLVALUE"); } else if (variables.isSQL) { startHighlight("SQLVALUE"); } else { startHighlight("VALUE"); } variables.isValue=true; } if (NOT variables.isCommented) { endHighlight(); variables.isValue=false; } if (NOT variables.isCommented) { startHighlight("BIND"); } if (NOT variables.isCommented) { endHighlight(); } if (NOT variables.isCommented) { startHighlight("CFSET"); variables.isCFSETTag=true; } if (NOT variables.isCommented) { endHighlight(); variables.buffer.append(">"); endHighlight(); variables.isCFSETTag=false; } else { variables.buffer.append(">"); } if (NOT variables.isCommented) { startHighlight("MXMLATTRIBUTES"); // TODO: Add in MXML Value colors. // setStyle("VALUE","color:##900"); variables.isMXML=true; } if (NOT variables.isCommented) { endHighlight(); variables.buffer.append(">"); endHighlight(); // TODO: Add in MXML Value colors. // setStyle("VALUE","color:##0000CC"); variables.isMXML=false; } else { variables.buffer.append(">"); } if (NOT variables.isCommented) { endHighlight(); startHighlight("CFSCRIPT"); variables.isCFScript=true; } if (NOT variables.isCommented) { endHighlight(); variables.isCFScript=false; } if (NOT variables.isCommented) { endHighlight(); startHighlight("ACTIONSCRIPT"); variables.isActionscript=true; } if (NOT variables.isCommented) { variables.isActionscript=false; } if (NOT variables.isCommented) { variables.isSQL=true; } if (NOT variables.isCommented) { variables.isSQL=false; }