home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 626a.lha / Textra_v1.12 / Scripts / paragraph.textra < prev    next >
Text File  |  1991-12-16  |  6KB  |  212 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. /* Usage:  Paragraph <1st-line-indent> <left-margin> <right-margin>
  10.  *
  11.  * Paragraph is a general purpose formatting script.  It operates on
  12.  * the current SELECT range and accepts 3 arguments, all required...
  13.  *
  14.  * <1st-line-indent> - the amount to indent the FIRST line of
  15.  *                     each paragraph (counted from leftmost column)
  16.  *
  17.  * <left-margin> - the amount to indent the rest of each paragraph
  18.  *
  19.  * <right-margin> - the 'word wrap' point for all lines of all
  20.  *                  selected paragraphs
  21.  *
  22.  * Paragraphs are recognized as single-spaced blocks of text which
  23.  * are separated by a blank line.
  24.  *
  25.  * NOTE: Paragraph.textra supercedes the earlier WrapAt.textra script.
  26.  *       This script does all that one did plus more.
  27.  *
  28.  */
  29.  
  30. OPTIONS results
  31.  
  32.  
  33. parse arg numIndent leftMargin rightMargin   /* get the arguments */
  34.  
  35. if ((numIndent == "") | (leftMargin == "") | (rightMargin == "")) then do
  36.     notify "Usage:  Paragraph <1st-line-indent> <left-margin> <right-margin>"
  37.     exit
  38. end
  39.  
  40. /* make sure rightMargin is legal */
  41.  
  42. if ((rightMargin > 120) | (rightMargin <= leftMargin)) then
  43.     do
  44.         notify "Right-Margin must > Left-Margin AND < 120"
  45.         exit
  46.     end
  47.  
  48. get select position
  49.  
  50. if (result == "NO SELECT") then   /* is nothing selected? */
  51.  
  52.     do
  53.         notify "There MUST be a select range to use the Paragraph script."
  54.         exit
  55.     end
  56.  
  57.  
  58. /* yes, there is a selection, get it's boundaries */
  59. parse var result   startx ' ' starty ' ' endx ' ' endy
  60.  
  61. currx = startx
  62. curry = starty
  63. nomore = 0
  64. bsto = -1
  65.  
  66. /* temporarily make sure auto indent is off */
  67. prefs autoindent read; autoistate = result
  68. prefs autoindent off
  69.  
  70. /* if nothing on the endline is actually selected, don't include it */
  71. if (endx == 0) then  endy = endy - 1
  72.  
  73. gotoxy 0 curry
  74. get cursor char
  75. do while ((result == " ") | (result == "    ") /*TAB*/)
  76.    del
  77.    get cursor char
  78. end
  79. do for (numIndent)
  80.     text '" "'
  81. end
  82.  
  83. do while ((curry <= endy) & (nomore == 0))
  84.     do
  85.  
  86.         if (bsto == -1) then do
  87.             gotoxy 0 curry
  88.             currx = 0; nowony = curry
  89.         end
  90.         else do
  91.             currx = bsto; bsto = -1
  92.         end
  93.         
  94.         do while ((currx <= rightMargin) & (nowony == curry) & (nomore == 0))
  95.             hopselect next word
  96.             if (result == "NOT FOUND") then do
  97.                 nomore = 1
  98.                 gotoxy 1000 curry
  99.             end
  100.             else do
  101.                 get select position
  102.                 parse var result dummy' 'dummy' 'currx' 'nowony
  103.                 gotoxy currx nowony
  104.             end
  105.         end
  106.  
  107.         inbetween = (nowony - 1) - curry
  108.  
  109. /* COMMENTED OUT delete any blank lines between
  110.         notify "deleting"
  111.         todelete = (nowony - 1) - curry
  112.         if (todelete > 0) then do
  113.            tmp = todelete
  114.            do while (tmp > 0)
  115.               selectline curry+1; del
  116.               tmp = tmp - 1
  117.            end
  118.            endy = endy - todelete
  119.            nowony = nowony - todelete
  120.            gotoxy currx nowony
  121.         end
  122. */
  123.  
  124.         if (currx > rightMargin) then do
  125.            
  126.            /* line is too long */
  127.            
  128.            hopto prev word;
  129.            get cursor position; parse var result PrevEndsAt' 'dummy
  130.            
  131.            if (PrevEndsAt > rightMargin) then
  132.                hopto prev word
  133.            
  134.            hopto next word
  135.            newline
  136.            
  137.            get cursor char
  138.            do while ((result == " ") | (result == "    ") /*TAB*/)
  139.               del
  140.               get cursor char
  141.            end
  142.            do for (leftMargin)
  143.                text '" "'
  144.            end
  145.  
  146.  
  147.            endy = endy + 1     /* cause we inserted a newline */
  148.            curry = curry + 1
  149.            nomore = 0
  150.     
  151.         end
  152.         else if (nomore == 0) then do
  153.         
  154.            /* curr line is not long enough */
  155.     
  156.            gotoxy 0 nowony
  157.            
  158.            if ((curry < endy) & (inbetween == 0)) then do
  159.                backspace; get cursor position; parse var result tempx' 'tempy
  160.                thechar = " "
  161.                do while (((thechar == " ") | (thechar == "    ") /*TAB*/ ) & (tempx ~= 0))
  162.                    do
  163.                        left 1
  164.                        tempx = tempx - (1)
  165.                        get cursor char; thechar = result
  166.                    end
  167.                end
  168.                if (tempx ~= 0) then
  169.                    right 1
  170.                get cursor char
  171.                do while  ((result == " ") | (result == "    ") /*TAB*/ )
  172.                   do
  173.                      del
  174.                      get cursor char
  175.                   end
  176.                end
  177.                if (tempx ~= 0) then do
  178.                    if (thechar == ".") then
  179.                       text '"  "'
  180.                    else
  181.                       text '" "'
  182.                end
  183.                if (tempx == 0) then
  184.                    do for (numIndent)
  185.                        text '" "'
  186.                    end               
  187.                get cursor position; parse var result bsto' 'nowony
  188.                endy = endy - 1
  189.            end
  190.            else
  191.                if (curry < endy) then do
  192.                    get cursor char
  193.                    do while ((result == " ") | (result == "    ") /*TAB*/)
  194.                       del
  195.                       get cursor char
  196.                    end
  197.                    do for (numIndent)
  198.                        text '" "'
  199.                    end
  200.                end
  201.                curry = nowony
  202.         end
  203. /*
  204.         ask "Do it again?"
  205.         if (result == "NO") then exit
  206. */
  207.     end
  208. end
  209.  
  210. /* restore autoindent */
  211. prefs autoindent autoistate
  212.