Muunnossäännöt

Ominaisuuksien muunnostiedosto on tekstitiedosto, jossa on vähintään kaksi välilyönneillä tai tabuloinneilla erotettua saraketta. Muunnos suoritetaan kahden ensimmäisen sarakkeen välillä. Kooditaulukko-toiminnossa valitaan asetuksella kumpaan suuntaan muunnos tehdään. Formaatinmuuntimien Kenttäasetuksissa suunta määräytyy sen mukaan luetaanko vai kirjoitetaanko. Luettaessa muunnos tehdään oikealta vasemmalle ja kirjoitettaessa vasemmalta oikealle. Samaa tiedostoa voi siis käyttää molempiin suuntiin ja ohjelman käyttämä koodi on tällöin aina vasemmssa sarakkeessa. Kommentti voidaan antaa omalla rivillään tai määrittelyrivin lopussa puolipisteellä tai huutomerkillä erotettuna.

Muunnostiedostoa luetaan alusta alkaen kunnes etsittävä sarake täsmää kohteen ominaisuuteen. Tällöin luku lopetetaan ja toisen sarakkeen ominaisuus sijoitetaan kohteelle. Mikäli tiedostossa on annettu kolmas sarake, sen ominaisuus sijoitetaan kohteelle aina riippumatta siitä kumpaan suuntaan muunnosta ollaan tekemässä.

Muunnettava ominaisuus määräytyy Kooditaulukko-toiminnossa asetuksen mukaan. Formaatinmuuntimen Kenttä-asetuksessa oletus on aina T3. Kolmannen sarakkeen oletusominaisuus on aina T1, jotta yhteensopivuus vanhoihin koodimuunnostiedostoihin säilyy. Samasta syysta sen arvo sijoitetaan oletuksena vain puuttuviin ominaisuuksiin. Katso ehdollinen sijoitus alla.

Perusmuodossaan koodin T3 muunnostiedosto näyttää seuraavalta:

3002    147     1
3007    146     9   ! kommentti
3010    140         ; kommentti
4001    "12 34"
4002    '123 5'

Jos kohteen koodi täsmää suunnasta riippuen ensimmäisen tai toisen sarakkeen arvoon, sijoitetaan koodiksi vastakkaisen sarakkeen arvo. Jos rivillä on annettu kolmas sarake, sen arvo sijoitetaan aina pintatunnukseksi kenttään T1. Välilyöntejä sisältävät arvot voidaan antaa lainaus- tai heittomerkkien välissä. Lainausmerkeissä annettu arvo voi sisältää heittomerkkejä ja päinvastoin.

Laajennetut säännöt

Muunnostiedoston toimintaa voidaan laajentaa käsittelemään usean ominaisuuden yhdistelmiä. Teknisesti etsittävä sarake on hakusääntö ja sijoitettava sarake on sijoitussääntö. Molempien syntaksit ovat suurelta osin yhteensopivia eli niitä on mahdollista käyttää molempiin suuntiin. Yhteen suuntaan toimiva muunnostiedosto voi tietysti käyttää kaikkia haku- ja sijoitussääntöjä rajoituksetta.

Edellinen esimerkki voidaan määritellä myös seuraavasti:

T3=3002    T3=147     T1!=1
T3=3007    T3=146     T1!=9  ! kommentti
T3=3010    T3=140            ; kommentti
T3=4001    T3="12 34"
T3=4002    T3='123 5'

Oletusominaisuuksilla ei ole enää merkitystä, koska kussakin sarakkeessa määritellään erikseen etsittävä tai sijoitettava ominaisuus. Kummassakin tapauksessa voidaan nyt antaa usean ominaisuuden yhdistelmiä puolipisteellä erotettuna:

T3=3002    RYHMA=1;LUOKKA=3     T1!=1
T3=3007    RYHMA=1;LUOKKA=4     T1!=9
T3=4001    RYHMA=2;LUOKKA=5
T3=4002    RYHMA=2;LUOKKA=6

Vasemmalta oikealle muunnettaessa täsmäävä koodi T3 muuttuu vastaaviksi RYHMA- ja LUOKKA-ominaisuuksiksi. Toiseen suuntaan ominaisuuksien yhdistelmä muuttuu vastaavaksi T3-koodiksi, kun kaikki puolipisteellä erotetut ominaisuudet täsmäävät. Tällainen muunnos eri ominaisuuksiksi ei poista kohteelta alkuperäisiä ominaisuuksia.

Ryhmäehdot

Vaihtoehtoisia ominaisuuden arvoja voidaan antaa normaalin hakusäännön mukaan pilkulla erotettuina:

T3=3002    RYHMA=1;LUOKKA=3,5     T1!=1
T3=3007    RYHMA=1;LUOKKA=4,6     T1!=9
T3=4001    RYHMA=2;LUOKKA=8,7,5
T3=4002    RYHMA=2;LUOKKA=6,9

Oikealta vasemmalle muunnettaessa ominaisuuden arvon on täsmättävä johonkin pikulla erotetuista arvoista. Toiseen suuntaan sijoituksessa arvoksi laitetaan listan ensimmäinen arvo.

Hakuehdossa kysymysmerkki (?) täsmää mihin tahansa yhteen merkkiin ja tähti (*) mihin tahansa merkkijonoon, mutta ei tyhjään eli puuttuvaan ominaisuuteen. Pilkku ja tähti yhdessä (,* tai *,) täsmäävät myös tyhjiin arvoihin. Sijoituksessa arvossa olevat kysymysmerkit muuttuvat aina nolliksi (esim. 2?? -> 200). Pelkkä tähti yksi ei tee koskaan sijoituksessa mitään ja arvossa olevat tähdet poistetaan (esim. *TIE -> TIE). Pilkku ja tähti sijoituksessa noudattaa normaalia listasääntöä eli käytetään ensimmäistä arvoa (*, -> ei mitään tai ,* -> tyhjä arvo). Hakuehdon arvoväli muuttuu sijoituksessa välin alkuarvoksi (esim. 100-200 -> 100).

Näitä voidaan hyödyntää esimerkiksi oletusarvojen käsittelyssä seuraavasti:

T3=3002         RYHMA=1;LUOKKA=3,5     T1!=1
T3=3007,3???    RYHMA=1;LUOKKA=4,6     T1!=9
T3=4001-4005    RYHMA=2;LUOKKA=8,7,5
T3=4008,,*      RYHMA=2;LUOKKA=6,9

Toisella rivillä olevat kysymysmerkit täsmäävät kaikkiin nelimerkkisiin kolmella alkaviin arvoihin. Toiseen suuntaan oletusarvoksi tulee kuitenkin listalla ensimmäisenä oleva 3007. Vastaavasti kolmannen rivin arvoväli täsmää arvoihin 4001-4005 ja toiseen suuntaan saa alkuarvon 4001. Edelleen viimeisellä rivillä tyhjä arvo ja tähti (,*) täsmäävät kaikkiin jäljellä oleviin arvoihin ja toiseen suuntaan arvoksi tulee listan ensimmäinen 4008.

Arvot ja makrot

Ominaisuuden arvoksi voidaan antaa toisen ominaisuuden arvo ja ominaisuus voidaan poistaa tyhjällä arvolla:

T3=$KOODI,*;KOODI=,*    KOODI=$T3,*;T3=,*
T3=999,                 KOODI=999,

Edellinen vasemmalta oikealle muuttaa ominaisuuden T3 ominaisuudeksi KOODI, poistaa vanhan ominaisuuden ja laittaa puuttuville oletusarvon. Ensimmäisen rivin ehto täsmää kaikkiin kohteisiin, joilla on jokin arvo. T3 on joko KOODI-ominaisuuden arvo ($KOODI) tai mikä tahansa arvo (*). Vastaavasti KOODI on aina joko tyhjä tai mikä tahansa arvo (,*). Sijoituksessa KOODI-ominaisuuteen sijoitetaan T3-ominaisuuden arvo ja T3-ominaisuuden arvoksi tulee listan ensimmäinen tyhjä. Tyhjä T3 arvo täsmää toiseen riviin, joka sijoittaa ominaisuuteen oletusarvon 999. Sama toimii käänteisenä toiseen suuntaan.

Myös makroja voidaan käyttää normaalien sääntöjen puitteissa. Hakuehtona voi olla mikä tahansa makro. Sijoituksessa laskennalliset makrot (esim. #DZ, #TYPE) eivät tee mitään, mutta piirtotietomakroihin (esim. #SIZE, #COLOR) voidaan sijoittaa. Tyyppimakroilla (esim. #TYPE=POINT, #TYPE=LINE) voidaan muunnos rajoittaa vain tietyn tyyppisiin kohteisiin.

#COLOR=$_RGB,*;_RGB=,*  _RGB=#COLOR,*;#COLOR=,*

Edellinen vasemmalta oikealle siirtää värin piirtotiedosta _RGB-ominaisuuteen ja oikealta vasemmalle toisinpäin.

Ehdollinen sijoitus

Kolmannen sarakkeen sijoituksessa voidaan käyttää ehdollista sijoitusta. Syntaksilla != voidaan sijoittaa arvo vain kohteille, joilta ominaisuus puuttuu. Syntaksilla ?= puolestaan voidaan sijoittaa arvo vain kohteille, joilla ominaisuus on jo ennestään. Vanhojen koodimuunnostiedostojen yhteensopivuuden vuoksi oletuksena on sijoitus huutomerkin kanssa eli arvo sijoitetaan vain puuttuviin ominaisuuksiin.

*,   *,   T1!=1;T2?=2

Edellinen esimerkki sijoittaa kaikille kohteille oletusarvon 1 puuttuviin ominaisuuksiin T1 sekä ylikirjoittaa arvon 2 olemassa oleviin ominaisuuksiin T2.

Moniosainen tiedosto

Koska kohteen muunnoksen suoritus loppuu aina täsmäävään hakuehtoon, voidaan normaalisti yhdellä tiedostolla käsitellä yhden ominaisuusyhdistelmän muunnos. Tiedosto voidaan kuitenkin tarvittaessa jakaa erillisiin osiin hakasuluissa olevilla otsakeriveillä. Jokainen näin määritelty osio suoritetaan erikseen aivan kuin ne olisivat erillisiä tiedostoja. Osioiden suoritusjärjestys on sama kuin niiden järjestys tiedostossa.

[Koodi]
T3=$KOODI,*;KOODI=,*    KOODI=$T3,*;T3=,*
T3=999,                 KOODI=999,

[Väri]
#COLOR=$_RGB,*;_RGB=,*  _RGB=#COLOR,*;#COLOR=,*

Edellä oleva yhdistää aikaisemmat muunnokset yhteen tiedostoon.