SFF(LOCAL) SFF(LOCAL) NIMI sff - rivitä yksi tekstikappale SYNOPSIS sff [-e] [-p] [-t] [-l leveys] KUVAUS sff rivittää ja tavuttaa (suomen kielen sääntöjen mukaan) yhden tekstikappaleen. Ohjelmaa on tarkoitus käyttää vi:n tai jonkin muun tekstieditorin sisältä (kts. kohta Kytkem­ inen vi:hin), jolloin valmiiksi kirjoitettu kappale voidaan rivittää uudelleen yhdellä näppäimen painalluk­ sella. sff sisentää tekstin kappaleen ensimmäiselle riv­ ille laitetun sisennyksen mukaisesti ja yhdistää tarvit­ taessa eri riveille jaetut sanat. Koska ohjelmaa tuskin koskaan kutsutaan suoraan komen­ toriviltä, ei sille voi antaa syöttö- ja tulostiedostojen nimiä, vaan ne on ohjattava perussyötteen ja perustu­ losteen kautta. OPTIOT Ohjelma tunnistaa seuraavat optiot: -e Ei tavutusta, Englantia. sff ei tavuta sanoja eikä yhdistä rivin lopussa tavuviivaan päättyvää sanaa seuraavan rivin ensimmäiseen sanaa. -p Peru tavutus. sff ei tavuta sanoja mutta yhdistää rivin lopussa tavuviivaan päättyvän sanan seuraavan rivin ensimmäiseen sanaan. Voidaan käyttää halut­ taessa perua aiemmin tehdyt tavutukset. -t Tuplatyhje. Normaalisti sff erottaa tuloksessa sanat toisistaan yhdellä tyhjeellä (olipa niiden välissä alunperin kuinka monta tyhjettä tai tabu­ laattoria tahansa). Optiolla -t sff laittaa sell­ aisten pisteiden, huutomerkkien ja kysymysmerkkien, joita ei seuraa suuri kirjain, perään kaksi tyh­ jettä. -r Rajoitettu sisennyksen etsintä. Katso alla olevaa sisennysten määräytymisen kuvausta. -l leveys Rivinleveys. Tulokselle käytettävä rivin leveys. Oletusarvoisesti rivin leveys on 69 merkkiä. 12.5.1994 1 SFF(LOCAL) SFF(LOCAL) SISENNYKSEN MÄÄRÄYTYMINEN sff määrää kappaleelle käyttämänsä sisennyksen ensimmäisen syöttörivinsä perusteella seuraavasti (missä "valkoinen" tarkoittaa tyhjeitä ja tabulaattoreita): - Jos rivillä on tabulaattoreita, niin sisennysko­ hdaksi tulee viimeistä tabulaattoria seuraavan ei- valkoisen merkin kohta. - Jos rivin alussa on "ranskalainen viiva" (jol­ laiseksi katsotaan "-", "+", "*") niin sisennysko­ hdaksi tulee ranskalaista viivaa seuraavan ei- valkoisen merkin kohta (paitsi jos sen perässä on tabulaattoreita, jolloin sisennys tapahtuu kuten edellä on kuvattu). - Jos rivin alussa on merkkiin ":" tai ")" päättyvä sana (esim. "Esim:"), niin sisennyskohdaksi tulee seuraavan ei-valkoisen merkin kohta (paitsi jos myöhemmin vielä tabulaattoreita ...). Tämä voidaan estää optiolla -r. - Jos rivin alussa on pisteillä erotettuja numeroita, jotka päättyvät pisteeseen (esim: "1.34."), niin sisennyskohdaksi tulee seuraavan ei-valkoisen merkin kohta (paitsi jos myöhemmin vielä tabulaat­ toreita ...). - Muuten sisennyskohdaksi tulee rivin ensimmäisen sanan alkukohta. KAPPALEEN PÄÄTTYMISEN MÄÄRÄYTYMINEN Kappale katsotaan päättyneeksi (jolloin sff lopettaa rivi­ tyksen ja tulostaa loput rivit sellaisinaan), kun syöttötiedosto loppuu tai vastaan tulee: - pelkkää valkoista sisältävä rivi - rivi, jonka ensimmäinen merkki on: sivunvaihtomerkki ^L (koska sivunvaihtoa halutaan harvemmin keskelle tekstikappaletta) "." (koska nroff:in komennot alkavat näin) "~" (koska ohjelman tekijän oma dokument­ tijärjestelmä käyttää näitä erikoistarkoituksiin) - rivi, jonka ensimmäinen ei-valkoinen merkki on: "-", "+" tai "*" (koska alkaa uusi ranskalainen viiva) 12.5.1994 2 SFF(LOCAL) SFF(LOCAL) "$", "%" tai "#" (koska vaikuttaa UNIX:in komen­ toesimerkiltä) On huomattava, että vaikka esimerkiksi muoto "Esim:" tun­ nistetaan määrättäessä sopivaa sisennystä, niin sitä ei tunnisteta päätettäessä kappaleen loppumiskohtaa. TAVUTUS sff tavuttaa parhaansa mukaan suomenkielisiä sanoja, mutta varoo tavuttamasta ohjelmatekstiä yms. erikoismerkintöjä. Niinpä se ei tavuta sanoja, joissa on keskellä suuria kir­ jaimia, erikoismerkkejä tms. Tavutettavan sanan alussa voi kuitenkin olla sulkumerkki tms. normaalitekstissä esiin­ tyvää. Yleisenä sääntönä voisi todeta, että sff jättää sanan mieluummin tavuttamatta, jos se on vähänkin "epäilyttävä". sff yhdistää riviltä toiselle jatkuvat sanat vain, jos - rivin lopussa oleva sana päättyy merkkiin "-" ja sen perässä ei ole mitään muuta (ei siis edes tyh­ jettä) - rivin lopussa oleva sana on sff:n mielestä tavu­ tuskelpoinen Jos sff joutuu sijoittamaan rivin loppuun tavuviivaan päättyvän sanan (esim. lauseesta "alku- ja loppuosa"), niin se ei kuitenkaan laita tavuviivan perään ylimääräistä tyhjettä, joten seuraavalla rivityskerralla sana voi yhdistyä seuraavan rivin ensimmäiseen sanaan (ja syntyy "alkuja loppuosa"). KYTKEMINEN vi:HIN Ohjelma on tarkoitettu käytettäväksi sellaisten tekstiedi­ torien kanssa, jotka eivät itsessään sisällä automaattista rivitystä. vi:tä käytettäessä sff voidaan kytkeä funk­ tionäppäimiin laittamalla kotihakemistossa olevaan tiedos­ toon .exrc seuraavanlaisia rivejä: :map ^[[M !}sff^M :map ^[[N !}sff -e^M :map ^[[O !}sff -p^M missä "^[[M" on halutusta funktionäppäimestä lähtevä merkkisekvenssi (joka saadaan kirjoitettua vi:lla paina­ malla ^V (eli ctrl-V) ja sen perään haluttua näppäintä) ja ^M on kontrollimerkki (joka saadaan vi:ssä painamalla ^V ja perään ^M). (Näitä rivejä ei siis voi siirtää maalaa­ malla ikkunasta toiseen.) Edellä on kytketty sff eri optioilla kolmeen eri funktionäppäimeen. 12.5.1994 3 SFF(LOCAL) SFF(LOCAL) Kun vi käynnistetään, se lukee kyseisen tiedoston. Nyt voit siirtyä haluamasi kappaleen alkuun ja painaa jotain em. funktionäppäintä - ja voila' - kappale rivittyy uudelleen. Jos tiedostoon .exrc laittaa vielä seuraavat rivit :set autoindent :set wrapmargin=11 niin vi alkaa jo käydä tekstinkäsittelyjärjestelmästä, koska se säilyttää sisennyksen (edelliselle sisennysta­ solle päsee painamalla ä) ja vaihtaa riviä automaattis­ esti niin että rivien pituus vastaa sff:n oletuspituutta. Jos vielä laittaa rivin :set notimeout niin nuolinäppäimien käyttökin toimii varmemmin kuin nor­ maalisti. ILMOITUS No more processes sff:n käynnistäminen vi:n sisältä aiheuttaa joka kerta uuden prosessin syntymisen. Joissakin käyttöjärjestelmissä nämä prosessit jäävät roikkumaan ja poistuvat vasta, kun vi:n käyttö lopetetaan. Tällöin voi käydä niin, että prosessien maksimimäärä ylittyy jossain vaiheessa. Silloin rivitettävänä oleva kappale häviää ja tilalle ilmestyy teksti "No more processes.". Nyt on syytä rauhoittua ja olla tekemättä tyhmyyksiä, koska kadonneen tekstikappaleen saa takaisin komennolla "u" (undo) - kunhan ei sitä ennen tee mitään muuta. Kun olet saanut tekstikappaleen takaisin, kirjoita tiedosto levylle, lopeta vi (jolloin prosessit vapautuvat) ja käynnistä vi uudelleen. LAATIJA Jorma Sajaniemi - saja@cs.joensuu.fi 12.5.1994 4