Skip navigation links
Automatiseer uw tekstdocumenten expressief en gemakkelijk met TExpressive!
Menu
TExpressive
Automatiseer uw tekstdocumenten expressief en gemakkelijk met TExpressive!

Taal syntax

Scripts en tekst

TExpressive sjablonen bevatten zowel normale tekst en scripts.  De normale tekst wordt een-op-een gebruikt, en de scripts worden eerst verwerkt waarna hun resultaat aan de uitvoer wordt toegevoegd.  Scripts gebruiken de notatie:

<# ... #>

waar de ... de inhoud van het script voorstelt.

Als u meer dan één functie in een script opneemt, dan dient u deze functies met een ";" van elkaar te scheiden.

Script start- en sluittekens in normale tekst gebruiken

Als u de speciale TExpressive script start- en sluittekens (<# en #>) in uw normale tekst wilt gebruiken dan moet u ze verdubbelen.  Het tekstfragment

voor <#<#binnen#>#> na

wordt dus verwerkt tot:

voor <#binnen#> na

Commentaar

De inhoud van commentaar wordt niet door TExpressive verwerkt.  Hun inhoud komt niet in het uiteindelijke resultaat terug.  Commentaar kan overal in scripts voorkomen maar niet in letterlijke tekst.  Commentaren kunnen worden genest.

De opbouw van commentaar is:

Commentaar
{ ... }

Een voorbeeld:

  • <# { commentaar dat een <#script fragment#> bevat welke niet wordt verwerkt } #>

Geldigheid namen

Er zijn meerdere plekken waar TExpressive een naam verwacht.  Namen worden in functies gebruikt (de functienaam en argumentnamen) en in parameters (de parameternaam en subparameternamen).  Er is &eactute;&eactute;n algemene regel voor de geldigheid van namen: ze mogen alleen de karakters "a" t/m "z", "A" t/m "Z", "0" t/m "9", "-" en "_" bevatten.  TExpressive let niet op hoofd/kleine letters bij het herkennen van namen.  Merk echter wel op dat namen die met een "_" beginnen gereserveerd zijn voor gebruik door TExpressive zelf; het is niet raadzaam om uw eigen namen met een "_" te laten beginnen.  Zie de lijst met voorgedefinieëde parameters voor meer informatie.

De opbouw van namen is:

Naam
NaamKarakter[NaamKarakter[NaamKarakter[...]]]
NaamKarakter
a-z | A-Z | 0-9 | - | _

Enkele voorbeelden:

  • MijnNaam
  • 2345
  • een-andere-naam_9_alles-toegestaan

Indexering

Alle indexen in TExpressive starten op 1.  Het eerste karakter in een tekst staat dus op positie 1, de eerste subparameter vind u op index 1 en lussen (For, ForEach, While en Until) starten op lusnummer 1.

Functies

Functies hebben enkele dingen gemeen.  Ze worden geschreven in scripts (tussen <# en #>), ze hebben een functienaam en 0 of meer argumenten.  Elk argument heeft een naam en eventueel een waarde.  De waarde wordt, indien aanwezig, van de argumentnaam gescheiden met een ":"

U kunt drie typen argumentwaarden opgeven: letterlijke tekst (tekst tussen aanhalingstekens die letterlijk gebruikt wordt; bv. "tekst"), parameternamen (van wie de waarde gebruikt wordt voor het argument) en scriptfragmenten (welke apart worden verwerkt waarna het resultaat in het argument wordt opgeslagen).

Letterlijke tekst is ideaal voor het gebruik van simpele tekst of numerieke waarden.  Letterlijke tekst kan alle karakters bevatten, ook regeleinden; deze blijven behouden in het resultaat.  Om het aanhalingsteken zelf in te voegen dient u het te verdubbelen.  Parameters stellen u in staat om informatie in het ene deel van uw TExpressive script op te slaan en in een ander deel weer te gebruiken.  Scriptfragmenten stellen u in staat om (conditioneel) sub-scripts te verwerken.  Scriptfragmenten starten een tijdelijke subcontext met ( welke weer wordt afgesloten met een bijpassende ).  Wanneer het scriptfragment volledig is verwerkt wordt het resultaat (een tekstfragment) in het argument opgeslagen.  Hierdoor kunt u op een makkelijke manier complexere waarden opbouwen om aan argumenten toe te kennen.

Tussen elk onderdeel van een functie kunt u spatiering invoegen, inclusief regeleinden.  Deze hebben geen effect op het uiteindelijke resultaat.

De opbouw van functies is:

Functie
FunctieNaam [Argumenten]
FunctieNaam
een geldige naam
Argumenten
Argument [Argument [Argument [...]]]
Argument
ArgumentNaam[:ArgumentWaarde]
ArgumentNaam
een geldige naam
ArgumentWaarde
"letterlijke tekst" | ParameterNaam | (ScriptFragment)
ParameterNaam
een geldige parameternaam (incl. indexen)
ScriptFragment
functies en commentaar

Enkele voorbeelden:

  • <#
      Set Param:"HuisdierNaam" To:(
        #>Woezel<#
      );
      If
        What:(
          Count What:"z" In:HuisdierNaam
        )
        IsGreaterThan:"0"
        Then:HuisdierNaam
        Else:"-gecensureerd-"
    #>

Parameters

TExpressive stelt u in staat om parameters op te zetten om waarden op te slaan en later weer op te vragen.  Op deze manier kunt u informatie van het ene deel van uw script naar het andere deel overbrengen.

De parameters kunnen genest worden en zo parameterbomen vormen (parameters die subparameters bevatten); er is geen beperking aan de diepte van deze nesting.  Om een subparameter te benaderen moet u het parameterpad er naartoe opgeven.  Afzonderlijke onderdelen in het parameterpad moeten met een "." gescheiden worden.  U kunt subparameters weer benaderen door hun naam te gebruiken (hoofdparam.subparam) of door hun volgnummer onder de hoofdparameter te gebruiken (bv. hoofdparam.#2).  Volgnummers mogen ook negatief zijn; in dat geval telt TExpressive vanaf de laatste subparameter achteruit.  Volgnummer -1 is dus de laatste subparameter, -2 de voorlaatste, etc.  Merk op dat spatiëring tussen de "#" en het nummer niet is toegestaan in volgnummers.

Waar u een parameter op kunt geven kun u ook een parameterpad opgeven.  Het is niet toegestaan om twee gelijknamige subparameters onder dezelfde hoofdparameter te hebben.

Sommige functies stellen u in staat om (sub)parameters te maken zonder een naam voor ze op te geven.  In dat geval kent TExpressive een unieke naam toe aan die parameter.  De naam zal "Param<nr>" worden waarbij "nr" een volgordenummer is zodat het niet met een andere subparameter ernaast conflicteerd.

De opbouw van parameterpaden en parameternamen is:

ParameterPad
ParameterIndex[.ParameterIndex[.ParameterIndex[...]]]
ParameterIndex
ParameterNaam | ParameterNr
ParameterNaam
een geldige naam
ParameterNr
#<index nummer>

Enkele voorbeelden:

  • MijnParam
  • HoofdParam.#2.SubSubParam