home *** CD-ROM | disk | FTP | other *** search
/ Amiga Elysian Archive / AmigaElysianArchive.iso / wp_dtp / textra_1.lha / Scripts / indent.textra < prev    next >
Text File  |  1992-11-20  |  4KB  |  173 lines

  1.     /*******************************************************************
  2.      *   TEXTRA AREXX script -- Mike Haas, 1991, All Rights Reserved.  *
  3.      * Freely distributable ONLY as a component of the TEXTRA package. *
  4.      * This banner may not be removed or altered (improvements to the  *
  5.      *    actual program welcome).  Please document and send to me.    *
  6.      *        !!! PLACE THIS FILE IN YOUR REXX: DIRECTORY !!!          *
  7.      *******************************************************************/
  8.  
  9. /* INDENT <num> {DIC}
  10.  *
  11.  * this routine moves lines containing any portion of a selection
  12.  * (or the current cursor line) by <NUM> TABs.
  13.  *
  14.  * If <num> is positive, the move is to the right. Negative, left.
  15.  *
  16.  * If <num> is not provided, it's default value is 1.  A move to
  17.  * the left will terminate if a line either runs out of characters
  18.  * or some character other than BLANK enters the first column.
  19.  *
  20.  * If DIC is specified, then Don't Indent Comments
  21.  */
  22.  
  23. /* Converted from SLIDE.TEXTRA by Phil Burk */
  24.  
  25. /* 00001 mdh 10-nov-92  Added ability to cancel script */
  26. /* 00002 mdh 20-nov-92  check version (cause of 'CheckCancel') */
  27.  
  28. OPTIONS results
  29.  
  30. rex = 0; result = "NOTSUPPORTED"    /*00002*/
  31. textraversion
  32. parse var result maj min rex
  33. if (result == "NOTSUPPORTED") | (rex < 3) then do
  34.     notify "Textra V1.13 or later required for this script."
  35.     exit
  36. end
  37.  
  38. tabchar = d2c(9)
  39.  
  40. parse upper arg num ' ' dic  /* get the argument */
  41. if (num == "") then num = 1   /* set 1 as default */
  42.  
  43. moveleft = 0
  44. if (num < 0) then
  45.     do
  46.         moveleft = 1
  47.         num = abs(num)
  48.         prefs TabWidth read
  49.         tabwidth = result
  50.     end
  51.  
  52. get select position   /* get the select boundary, if any */
  53.  
  54. if (result == "NO SELECT") then   /* is nothing selected? */
  55.  
  56.     do
  57.         get cursor position   /* nothing selected, get cursor pos */
  58.         parse var result   cursx ' ' cursy
  59.         LinesSelected = 0   /* means 'just cursor' */
  60.     
  61.     end
  62.     
  63. else
  64.  
  65.     do
  66.         /* yes, there is a selection, get it's boundaries */
  67.         parse var result   startx ' ' starty ' ' endx ' ' endy
  68.         LinesSelected = (endy - starty)
  69.     
  70.         /* if only the 'eol' of the previous line is selected
  71.            (nothing on this line is actually included, i.e. x==0),
  72.            then don't include it.
  73.         */
  74.         if (endx > 0) then  LinesSelected = LinesSelected + 1
  75.     
  76.     end
  77.  
  78. if (LinesSelected == 0) then
  79.  
  80.     do
  81.         gotoxy 0 cursy
  82.         call addtabs
  83.         if (moveleft == 0) then
  84.             gotoxy cursx+num cursy
  85.         else
  86.             do
  87.                 newx = max(cursx-num,0)
  88.                 gotoxy newx cursy
  89.             end
  90.     end
  91.  
  92. else
  93.  
  94.     do
  95.         currline = starty; numLeft = LinesSelected
  96.         do while (numLeft > 0)
  97.             CheckCancel; if (result == CANCEL) then exit   /*00001*/
  98.             do
  99.                 gotoxy 0 currline
  100.                 call addtabs
  101.                 currline = currline + 1
  102.                 numLeft = numLeft - 1
  103.             end
  104.         end
  105.         gotoxy 0 starty
  106.         selectto 0 starty+LinesSelected
  107.     end
  108.     
  109. exit
  110.  
  111.  
  112. addtabs:
  113.     if (moveleft == 0) then
  114.         do
  115.             if (dic = 'DIC') then
  116.                 do
  117.                     get cursor char; firstchar = result
  118.                     if (firstchar = '\') then return
  119.                     if (firstchar = '(') then return
  120.                     if (firstchar = '/') then return /* Arexx comment. */
  121.                 end
  122.             do
  123.                 blstr = '"' || tabchar
  124.                 i = 1
  125.                 do while (i < num)
  126.                     do
  127.                         blstr = blstr || tabchar
  128.                         i = i + 1
  129.                     end
  130.                 end
  131.                 blstr = blstr || '"'
  132.     
  133.                 /* insert tabs at beginning of line */
  134.                 text blstr
  135.             end
  136.         end
  137.     else
  138. /* delete characters from beginning of line */
  139.         if (num > 0) then
  140.             do i = 1 to num
  141.                 get cursor char; firstchar = result
  142.                 if (firstchar = tabchar) then del
  143. /* If it's a SPACE, remove enough for a TAB */
  144.                 if (firstchar = d2c(32)) then
  145.                     do j = 1 to tabwidth
  146.                         get cursor char; firstchar = result
  147.                         if (firstchar = d2c(32)) then del
  148.                     end
  149.                 
  150.             end
  151. return
  152.  
  153. Debug: procedure
  154.     parse arg theString
  155.     get select position   /* get the select boundary, if any */
  156.     if (result == "NO SELECT") then   /* is nothing selected? */
  157.         do
  158.             get cursor position   /* nothing selected, get cursor pos */
  159.             parse var result   cursxdbg ' ' cursydbg
  160.             WasSelected = 0   /* means 'just cursor' */
  161.         end
  162.     else
  163.         do
  164.             /* yes, there is a selection, get it's boundaries */
  165.             parse var result   cursxdbg ' ' cursydbg ' ' endxdbg ' ' endydbg
  166.             WasSelected = 1
  167.         end
  168.     lastline
  169.     text theString
  170.     gotoxy cursxdbg cursydbg
  171.     if (WasSelected == 1) then   selectto endxdbg endydbg
  172. return
  173.