home *** CD-ROM | disk | FTP | other *** search
/ PC Active 2002 December / pca1412.iso / intface / pca / pcaFormat.js < prev    next >
Encoding:
Text File  |  2002-09-23  |  5.1 KB  |  186 lines

  1. var htmlTagOpen = "<";                var htmlOpen = '<SPAN class="html">' + htmlTagOpen + '</SPAN><SPAN class="html">' ;
  2. var htmlTagClose = ">";                var htmlClose = '</SPAN><SPAN class="html">' + htmlTagClose + '</SPAN>' ;
  3.  
  4. // this part is language dependent. Different values needed here for PHP, ASP...
  5. var scriptDelimOpen = '<%';
  6. var scriptDelimClose = '%>'
  7. var scriptCommentOpen = "'";
  8. var scriptCommentClose = "\n";
  9.  
  10. reserved = new stringArray(18);
  11. reserved[1] = "end";
  12. reserved[2] = "sub";
  13. reserved[3] = "set";
  14. reserved[4] = "do";
  15. reserved[5] = "loop";
  16. reserved[6] = "until";
  17. reserved[7] = "while";
  18. reserved[8] = "wend";
  19. reserved[9] = "for";
  20. reserved[10] = "each";
  21. reserved[11] = "next";
  22. reserved[12] = "function";
  23. reserved[13] = "in";
  24. reserved[14] = "true";
  25. reserved[15] = "false";
  26. reserved[16] = "if";
  27. reserved[17] = "then";
  28. reserved[18] = "else";
  29. // end language dependent part
  30.  
  31. function formatScript(scr) {
  32.     return _formatScript(scr);
  33. }
  34.  
  35. function formatHtml(html) {    
  36.     return _formatHtml(html);
  37. }
  38.  
  39. function formatSyntax(text) {
  40.     return _formatSyntax(text);
  41. }
  42.  
  43.  
  44. function stringArray(howMany) {
  45.     this.length = howMany;
  46.     for (var i = 1; i <= howMany; i++) {
  47.         this[i] = '';
  48.     }
  49. }
  50.  
  51. function replace(s, src, trg) {
  52.     var sp = s.split(src);
  53.     return sp.join(trg);
  54. }
  55. function isRegChar(ch) {
  56.     var resb = false;
  57.     if ( (ch >= 'a') && (ch <= 'z') ) resb = true;
  58.     if ( (ch >= 'A') && (ch <= 'Z') ) resb = true;
  59.     if ( (ch >= '0') && (ch <= '9') ) resb = true;
  60.     return resb;
  61. }
  62.  
  63. function replaceWord(s, src, trg) {
  64.     var sp = s.split(src);
  65.     var resb = sp[0];
  66.     for (var q = 1; q < sp.length; q++) {
  67.         // check if character before and character after are seperation chars, or if src is just part of another word
  68.         if ( (!isRegChar(sp[q].charAt(0) ) )  && (!isRegChar(resb.charAt(resb.length - 1) ) ) ) {
  69.             resb = resb + "" + trg + "" + sp[q];
  70.         } else {
  71.             // alert("Kan [" + src + "] niet omzetten in [" + trg + "]");
  72.             resb = resb + "" + src + "" + sp[q];
  73.         }
  74.     }
  75.     return resb;
  76. }
  77.  
  78. function markReservedWords(snippet) {
  79.         for (var i = 1; i <= reserved.length; i++) {
  80.             snippet = replaceWord(snippet, reserved[i], '<SPAN class="res">' + reserved[i] + '</SPAN>');
  81.         }
  82.         return snippet;
  83. }
  84.  
  85. function markScriptComment(snippet) {
  86.         comment = snippet.split(scriptCommentOpen);
  87.         if (comment.length > 1) {
  88.             for (var i = 1; i < comment.length; i ++) {
  89.                 commentEnd = comment[i].split(scriptCommentClose);
  90.                 comment[i] = commentEnd.join(scriptCommentClose + "</SPAN>");
  91.             }
  92.             snippet = comment.join('<SPAN class="comment">' + scriptCommentOpen);
  93.         }
  94.         return snippet;
  95. }
  96.  
  97. function _formatScript(scr) {
  98.  
  99.     scr = replace(replace(scr, '<', '<'), '>', '>');
  100.  
  101.     var newScr = "";
  102.     
  103.     var idx1, idx2;
  104.     var preQuote;
  105.     var quoteChar = '"';
  106.     
  107.     while ( (idx1 = scr.indexOf(quoteChar)) > -1) {
  108.         preQuote = scr.substring(0, idx1); 
  109.         preQuote = markReservedWords(preQuote);
  110.         
  111.         preQuote = markScriptComment(preQuote);
  112.         
  113.         preQuote = replace(preQuote, "  ", "  "); 
  114.         newScr += preQuote + '<SPAN class="string">' + quoteChar;
  115.         scr = scr.substring(idx1 + 1, scr.length);
  116.         idx2 = scr.indexOf(quoteChar);
  117.         if (idx2 == -1) idx2 = scr.length;
  118.         newScr += scr.substring(0, idx2 + 1) + "</SPAN>";
  119.         scr = scr.substring(idx2 + 1, scr.length);
  120.     }
  121.     newScr += replace(markScriptComment(markReservedWords(scr)), "  ", "  ");
  122.  
  123.     scr = newScr;
  124.     scr = replace(scr, scriptDelimOpen, '<SPAN class="script">' + scriptDelimOpen + '</SPAN>');
  125.     scr = replace(scr, scriptDelimClose, '<SPAN class="script">' + scriptDelimClose + '</SPAN>');
  126.     
  127.     return replace(scr, "\n", "<br>\n");
  128. }
  129.  
  130. function _formatHtml(html) {
  131.     
  132.     html = replace(replace(html, '<', '<'), '>', '>');
  133.  
  134.     var newHtml = "", nonHtml = "";
  135.     
  136.     var oldHtml = html;
  137.     
  138.     var idx1, idx2;
  139.     
  140.     while ( (idx1 = html.indexOf(htmlTagOpen)) > -1) {
  141.         idx2 = html.indexOf(htmlTagClose);
  142.         
  143.         if (idx1 > 0) nonHtml = html.substring(0, idx1); else nonHtml = "";
  144.  
  145.         idxScript = html.indexOf(scriptDelimOpen);
  146.         if (idxScript > idx1 && idxScript < idx2) {
  147.         }
  148.  
  149.         if (html.substring(idx1 + htmlTagOpen.length, idx1 + 3 + htmlTagOpen.length) == "!--") {
  150.             // we have comment!
  151.             newHtml = newHtml + nonHtml + '<SPAN class="comment">' + html.substring(idx1, idx2 + htmlTagClose.length) + "</SPAN>";
  152.         } else {
  153.             // regular html tag
  154.             newHtml = newHtml + nonHtml + htmlOpen + html.substring(idx1 + htmlTagOpen.length, idx2) + htmlClose;
  155.         }
  156.         html = html.substring(idx2 + htmlTagClose.length, html.length);
  157.     }
  158.         
  159.     return replace(newHtml + "" + html, "\n", "<br>\n");
  160.  
  161. }
  162.  
  163. function _formatSyntax(text) {
  164.  
  165.     text = replace(replace(text, '<', '<'), '>', '>');
  166.  
  167.     var newText = "";
  168.  
  169.     var idx1, idx2;
  170.     
  171.     while ( (idx1 = text.indexOf(scriptDelimOpen)) > -1) {
  172.         idx2 =text.indexOf(scriptDelimClose);
  173.         if (-1 == idx2) idx2 = text.length;
  174.  
  175.         html = formatHtml(text.substring(0, idx1));
  176.         script = formatScript(text.substring(idx1, idx2 + scriptDelimClose.length));
  177.  
  178.         newText = newText + html + script;
  179.  
  180.         text = text.substring(idx2 + scriptDelimClose.length, text.length);
  181.     }
  182.     text = newText + formatHtml(text);
  183.  
  184.     return text;
  185. }
  186.