home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / euphoria / retab.ex < prev    next >
Text File  |  1994-03-10  |  2KB  |  80 lines

  1.         -- re-tab a file --
  2. -- make better use of tabs to minimize file size
  3. -- and also delete blanks at end of line
  4. -- usage:  ex retab < src > dest
  5.  
  6. constant TAB_WIDTH = 8
  7.  
  8. type natural(integer x)
  9.     return x >= 0
  10. end type
  11.  
  12. function tab(natural pos)
  13. -- compute equivalent number of spaces for tab
  14.     return(floor(pos / TAB_WIDTH) + 1) * TAB_WIDTH
  15. end function
  16.  
  17. function retab(sequence line)
  18. -- make better use of tabs & delete trailing blanks
  19. -- to shrink line if possible
  20.     natural i, leading_white
  21.     sequence better_line
  22.  
  23.     i = 1
  24.     leading_white = 0
  25.     better_line = ""
  26.     while i < length(line) do
  27.     -- count leading white space
  28.     if line[i] = ' ' then
  29.         leading_white = leading_white + 1
  30.     elsif line[i] = '\t' then
  31.         leading_white = tab(leading_white)
  32.     else
  33.         exit
  34.     end if
  35.     i = i + 1
  36.     end while
  37.     while leading_white >= TAB_WIDTH do
  38.     better_line = better_line & '\t'
  39.     leading_white = leading_white - TAB_WIDTH
  40.     end while
  41.     while leading_white >= 1 do
  42.     better_line = better_line & ' '
  43.     leading_white = leading_white - 1
  44.     end while
  45.     better_line = better_line & line[i..length(line)]
  46.     i = length(better_line)
  47.     while i >= 1 do
  48.     -- delete trailing blanks
  49.     if find(better_line[i], " \t") then
  50.         better_line = better_line[1..i-1] &
  51.               better_line[i+1..length(better_line)]
  52.     elsif better_line[i] != '\n' then
  53.         exit
  54.     end if
  55.     i = i - 1
  56.     end while
  57.     return better_line
  58. end function
  59.  
  60. procedure process_file()
  61.     object line
  62.     sequence better_line
  63.     natural savings
  64.  
  65.     savings = 0
  66.     while 1 do
  67.     line = gets(0)
  68.     if atom(line) then
  69.         exit
  70.     end if
  71.     better_line = retab(line)
  72.     savings = savings + length(line) - length(better_line)
  73.     puts(1, better_line)
  74.     end while
  75.     printf(2, "saved %d bytes\n", savings)
  76. end procedure
  77.  
  78. process_file()
  79.  
  80.