(*
LineNumbers 0.9

Numeroi käyttäjän osoittaman tekstitiedoston kappaleet juoksevalla numeroinnilla.
Aja skripti joko skriptieditoristasi tai kaksoisosoittamalla, jos olet tallentanut sen ohjelmaksi. 
Alkuperäiseen tekstitiedostoon ei tehdä muutoksia.
Rivinumeroitu tulostiedosto tallennetaan Työpöydälle.

Vaatimukset: AppleScript ladattuna käynnistyksessä, Standard additions.
Testattu AppleScript 1.3.4:llä ja toimii hitaasti.
Jos alkuperäisessä tiedostossa on yli 32 kt dataa, numerointi saattaa keskeytyä.

2001 Tuomas Rosberg <vanhentunut>
Lähdekoodi on ilmaista ja tarkoitettu yleiseen käyttöön (public domain).
Sitä lainattessa kirjoittajan nimi on mainittava.
Koodilla ei ole mitään takuuta, ja sen sisältävää ohjelmaa käyttävät
toimivat omalla vastuullaan.
*)


property fileSpec : "" -- Tulostiedoston polku.

tell application "Finder"
   set fileSpec to (startup disk as string) & "Desktop Folder:aFile.txt"
   try
      alias fileSpec -- Onko tulostiedosto ennestään olemassa?
   on error
      -- Tulostiedostoa ei ole olemassa, joten sellainen luodaan, sisällöksi tyhjää.
      open for access file fileSpec with write permission
      close access file fileSpec
   end try
end tell

choose file of type "TEXT" with prompt "Valitse tekstitiedosto."
set originalFile to result
if originalFile is not "" then
   -- Tulostiedoston tyhjennys:
   open for access file fileSpec with write permission
   set theFile to result
   write "" starting at 1 to theFile
   close access file fileSpec
   --
   open for access originalFile
   set originalText to result -- Avoin tiedosto.
   set counter to 0
   -- Numerointi rivi kerrallaan:
   repeat
      try
         set aParagraph to read originalText until return
         if (count of aParagraph) is 1 then -- Kappale sisältää yksinäisen rivinvaihdon, ei numeroida sitä.
         else -- Kappale sisältää tekstiäkin.         
            set counter to counter + 1
            set lineNum to counter as string
            -- Muotoillaan rivin numerointia:
            if (count of lineNum) < 2 then
               set lineNum to "0" & lineNum
            end if
            set aParagraph to lineNum & space & aParagraph
            my writeFile(aParagraph) -- Kirjoitetaan rivi tulostiedostoon.
         end if
      on error -- Tultiin tiedoston loppuun tai joku potkaisi tuolin alta.
         exit repeat
      end try
   end repeat
   --
   close access originalFile -- Muistetaan sulkea avoimet tiedostot.
   tell application "Finder"
      set fileName to name of originalFile & ".txt"
      set name of file fileSpec to fileName
      open file fileName
   end tell
end if

-- Tulostiedoston avaus, kirjoitus sen loppuun ja sulku:
on writeFile(aContent)
   open for access file fileSpec with write permission
   set theFile to result
   set theEnd to (get eof theFile) + 1
   write aContent starting at theEnd to theFile
   close access file fileSpec
end writeFile