home *** CD-ROM | disk | FTP | other *** search
/ PC User 2001 August / APC_Aug2001_CD2.iso / features / web_dev / files / mwjpp516.exe / %MAINDIR% / Tools / Misc / alignBraces.script < prev    next >
Encoding:
Text File  |  2001-06-19  |  2.3 KB  |  97 lines

  1. !!Script
  2. // Copyright ⌐ 1997-1998 - Modelworks Software
  3. // @Modified build 225 cm19981007 - pulled the Align function out of the DoCommand function
  4.  
  5. /**
  6. @Tool: alignBraces~moves '{' to next line if needed to 
  7. make '{' align with the '}'. Can be used on any file type. 
  8. @EndTool: 
  9. @Summary: alignBraces~align braces 
  10. */
  11.  
  12. function DoCommand()
  13. {
  14.     var editor = getActiveEditor();
  15.     if (editor == null)
  16.     {
  17.         return;
  18.     }
  19.     Align(editor);
  20.     editor.setActive("Align Braces");
  21. }
  22.  
  23. function GetOpenInsert(editor, lineIndex)
  24. {
  25.     var tabs = "\n";
  26.     var indentLevel = editor.getSmartIndentLevel(lineIndex);
  27.     while (indentLevel-- > 0)
  28.     {
  29.         tabs += "\t";
  30.     }
  31.     return tabs;
  32. }
  33.  
  34. function GetCloseInsert(editor, lineIndex)
  35. {
  36.     var tabs = "\n";
  37.     var indentLevel = editor.getSmartIndentLevel(lineIndex);
  38.     while (indentLevel-- > 1)
  39.     {
  40.         tabs += "\t";
  41.     }
  42.     return tabs;
  43. }
  44.  
  45. // cm19981007
  46. function Align(editor) 
  47. {
  48.     var  bracesToMove = newList();
  49.     var delimiterList = editor.findNextDelimiters("{", "}", 0, 0);
  50.     while (delimiterList)
  51.     {
  52.         var position = delimiterList.getHeadPosition(); 
  53.         while (position && position.valid)
  54.         {
  55.             var delimiterRange = delimiterList.getNext(position);
  56.             if (delimiterRange)
  57.             {
  58.                 if (delimiterRange && delimiterRange.endLineIndex > delimiterRange.startLineIndex 
  59.                 && (delimiterRange.endCharIndex - delimiterRange.startCharIndex) != 1)
  60.                 {
  61.                     // only move the '{' to the next line if needed
  62.                     bracesToMove.addTail(delimiterRange);
  63.                 }
  64.             }
  65.         }
  66.         
  67.         var delimiterRange = delimiterList.getHead();
  68.         if (delimiterRange && delimiterRange.endLineIndex > delimiterRange.startLineIndex)
  69.         {
  70.             delimiterList = editor.findNextDelimiters("{", "}", delimiterRange.endLineIndex + 1, 0);
  71.         }
  72.         else
  73.         {
  74.             delimiterList = null;
  75.         }
  76.     }
  77.     
  78.     var position = bracesToMove.getTailPosition();
  79.     while (position && position.valid)
  80.     {
  81.         var delimiterRange =  bracesToMove.getPrevious(position);
  82.         var line = editor.copy(delimiterRange.startLineIndex);
  83.         var result = searchInString(line, "[^ \t{]");
  84.         if (result && result.value < delimiterRange.startCharIndex)
  85.         {
  86.             var insert = GetOpenInsert(editor, delimiterRange.startLineIndex);
  87.             editor.replace(insert, delimiterRange.startLineIndex, 
  88.             delimiterRange.startCharIndex, delimiterRange.startLineIndex, 
  89.             delimiterRange.startCharIndex);
  90.         }
  91.     }
  92. }
  93.  
  94.  
  95. !!/Script
  96.  
  97.