12. Templates NG

12.1. Inleiding

Templates zijn technieken die in de software wereld worden aangeduid als declaratief: eerder dan aan te geven hoe een bepaald resultaat wordt bereikt, gaat een template tonen wat dit resultaat moet zijn. De template software moet dan zelf maar uitvissen hoe dit resultaat kan worden bereikt en hoe dit op de meest efficiënte wijze moet gebeuren.

Templates zijn zeer populair in de wereld van de webtoepassingen. Het hier voorgestelde systeem richt zich op Brocade toepassingen en heeft een aantal specifieke eigenschappen:

  • Het template systeem werd ontwikkeld in de MUMPS omgeving: dicht tegen de data.
  • Een template heeft niet de ambitie om een complete webpagina te modeleren: een webpagina wordt eerder gezien als een vel papier waarop verschillende knipsels worden geplakt. Voor elk knipsel bestaat dan een template.
  • BTS is niet beperkt tot webtoepassingen: ook andere onderdelen van de Bocade toepassing - zoals parametisering - kunnen genieten van de faciliteiten van templates.
  • BTS richt zich zowel naar ontwikkelaars als naar kerngebruikers.

Template systemen zoals BTS werken volgen het MVC patroon. Model-View-Controller is een manier van werken dat in de loop van de jaren ‘70 - tegelijk met de object-georienteerde programmeertalen - werd ontwikkeld.

  • Model staat voor data inhoud: zoals we later zullen zien wordt in BTS deze rol opgenomen door de sleutels.
  • View staat voor het resultaat, zeg maar het specifieke knipsel.
  • De rol van de Controller wordt dan opgenomen door de gebruikte template.

12.2. Achtergrond

Het hoe en waarom van templates wordt pas duidelijk indien je weet wat de problematiek is en hoe een template systeem zoals BTS deze problemen aanpakt.

Maak kennis met Tom. Tom is kritisch en hij weet al lang dat hij zijn job pas behoorlijk kan uitoefenen indien hij kan inschatten wat de diverse technieken echt betekenen.

Tom stelt daarom (moeilijke) vragen.

Wat is een template?

Een template is een constructie die modeleert hoe een stukje tekst - een tekstfragment - er precies uit ziet.

Als je al op voorhand weet wat het tekstfragment is, dan wordt de template wel heel eenvoudig: het is gewoon het tekstfragment zelf.

Dat boek kost 15,2 EUR

Deze template staat model voor 1 tekstfragment: Dat boek kost 15,2 EUR

Bouwers van toepassingen - zowel ontwikkelaars als kerngebruikers - zitten meestal niet in deze luxueuze situatie. Als ze bijvoorbeeld een webpagina willen construeren waarop de kost moet staan van het boek dan wordt deze constuctie niet dunnetjes overgedaan voor elk boek uit de catalogus, maar wordt in de template het variabele gedeelte (de specifieke kost) vervangen door een placeholder (zie Placeholders en sleutels).

Dat boek kost %prijs EUR

%prijs is de placeholder: deze term staat in de plaats van de specifieke kostprijs van een boek. Als we nu het tekstfragment willen samenstellen voor een specifieke boek (met kostprijs 15,2 EUR), dan moeten we, behalve de template, ook nog de specifieke waarde meegeven voor de sleutel prijs. Op basis hiervan kan dan in de placeholder %prijs worden vervangen door de juiste waarde en kan het tekstfragment worden geconstrueerd.

Kan zo´n systeem wel werken?

Neem bijvoorbeeld een webpagina in Brocade: stel het formulier voor de catalografie! Het opstellen van de template is al geen sinecure en dan moet je nog eens letterlijk honderden placeholders inlassen…

Hoewel templates - theoretisch - in staat zijn om dergelijke complexe tekstfamenten te modeleren, is dit niet iets wat BTS nastreeft. BTS ziet het scherm van de catalografie als een vel papier waarop knipsels worden geplakt. Elk knipsel vertelt een stukje van het verhaal, elk knipsel kan worden gemodeleerd door een template en voor elke template bestaat dan een verzameling sleutels. Door het probleem op te splitsen in veel kleinere en onafhankelijke problemen wordt het geheel beheersbaar.

Wat is precies het verschil tussen placeholders en sleutels?

… en zijn twee termen niet een beetje teveel van het goede!

Placeholders zijn constructies die staan in de template. Sleutels staan voor gegevens uit de Brocade databank. Bij het vullen van de template wordt de link gelegd tussen de placeholder en de sleutel. Dit gebeurt via de naam.

Het zal vlug duidelijk worden dat placeholders verder gaan dan enkel de naam opsommen voor een stukje data. Door twee termen te gebruiken blijft het steeds duidelijk dat er twee begrippen bestaan:

  • placeholder: zoals de gebruiker het gegeven ervaart
  • sleutel: hoe dit gegeven opgeslagen zit in de Brocade databank.

Een voorbeeld om dit te illustreren.

18 januari 2016

wordt in de databank opgeslagen op een wel heel vreemde manier: het ziet er uit als:

63935,

Het cijfer voor de , is het aantal dagen dat er zijn verstreken sinds 31 december 1840. Dit lijkt absurd maar is wel degelijk een goed systeem en maakt het werken met tijdstippen heel gemakkelijk … althans voor een computer! Voor de menselijke gebruiker is dit echter onvoldoende: de sleutel 63935, moet worden omgevormd naar:

18.01.2016

Op voorwaarde althans dat de gebruiker in België woont. Een Zuidafrikaan verwacht dat er:

2016-01-18

staat! We zullen later zien dat door de placeholder passend te formuleren dit allemaal mogelijk wordt.

Hoe herkennen we placeholders ?

Placeholders worden ingeleid door speciale karakters. In BTS zijn er verschillende constructies mogelijk en deze zullen later allemaal worden behandeld. De principes blijven echter dezelfde en daarom zal hier - voor de eenvoud van de discussie - enkel worden gesproken over % als inleidend karakter.

We weten nu al hoe een placeholder begint, nu moeten we nog enkel het eindpunt van een placeholder herkennen. Hoe dit eindpunt wordt bepaald is afhankelijk van dit inleidende karakter(s). Bij een % is dat best eenvoudig: de placeholders slorpt alle letters en cijfers op. In ons voorbeeld stopt de placeholder net voor de spatie:

Dat boek kost %prijs EUR

Ja, maar wat als ik in mijn tekstfragment een letterlijke ´%´ wil?

Tom, ondertussen weten we al dat sommige karakters speciaal zijn: zo worden ze gebruikt om placeholders in te leiden. Later zullen we ook nog ander gebruik zien van speciale karakters. BTS kiest deze speciale karakters zorgvuldig:

  • ze mogen de leesbaarheid van de templates niet aantasten
  • ze mogen niet al teveel voorkomen in gewone tekst
  • hun werking moet ondubbelzinnig zijn

Tom: “En antwoord nu eens op mijn vraag…”

Wat je eigenlijk wil, is dat het speciaal statuut van deze karakters, op sommige plaatsen, wordt weggenomen! Je wil aanduiden in de template: “dit speciaal karakter is nu even niet speciaal”.

Er bestaan diverse oplossingen voor dit probleem. In BTS werd gekozen voor een techniek die je ook ziet in veel andere software omgevingen: er wordt … een nieuw speciaal karakter geïntroduceerd. In navolging van de meeste software omgevingen zal ook in BTS dit escape karakter de BACKSLASH zijn: \.

Dat boek kost %prijs EUR: het komt met een korting van %percent\%

Het laatste % teken wordt voorafgegaan door het escape karakter. Met deze template kan je tekstfragmenten van de gedaante “Dat boek kost 10,5 EUR: het komt met een korting van 10%” modeleren.

Tom biedt weerwerk: “Ja, maar wat als je het escape karakter zelf wil voorstellen? En let wel, dit karakter komt meer voor dan je denkt! Bestandsnamen op mijn computer bijvoorbeeld”.

Indien het escape karakter zelf ‘as-is’ moet worden voorgesteld, dan moet dit ook worden geëscapet!

Het bestand C:\\Users\\rphilips\\brocade.rst op mijn Windows computer

Wie kan die speciale karakters allemaal onthouden ?

Er zijn inderdaad heel wat speciale karakters. En om het geheel nog wat complexer te maken, op sommige plaatsen is een zelfde karakter speciaal en op een andere plaats dan weer niet.

Er zijn echter een aantal eenvoudige regels:

  • speciale karakters zijn relatief zeldzaam in gewone tekst
  • het enige karakter waar je echt zorgvuldig moet mee omgaan is het escape karakter zelf: overal in BTS waar je het karakter \ letterlijk wil, moet je het escapen.
  • elk karakter - speciaal of niet - dat wordt geëscapet wordt steeds letterlijk genomen. Je mag dus overtollige escape karakters plaatsen. Toch raden we aan hiermee niet te overdrijven: hoe complexer de template wordt, hoe moeilijker je er kan op redeneren.
  • Brocade doet zijn best om uit te maken of een karakter wel speciaal is.

Zo hoeft in:

Dat boek kost %prijs EUR: het komt met een korting van %percent\%

het laatste percent teken niet te worden geëscapet: aangezien % niet wordt gevolgd door letters of cijfers, leidt het teken ook geen placeholder in en kan het ook niet speciaal zijn.

Van waar komen de templates en wie levert de sleutels?

BTS splitst de wereld op in twee soorten mensen:

  • templatebouwers: ze construeren de statische templates
  • ontwikkelaars: ze leveren de veranderlijke data (sleutels) aan.

(Heel dikwijls zijn dit dezelfde personen die gewoon snel van hoedje wisselen)

Om de voordelen van dit systeem te appreciëren, moet je je eens een software zonder templates voorstellen: de knipsels op het vel A4 worden dan opgemaakt door diegenen die toegang hebben tot de data en dat zijn de ontwikkelaars. Dit betekent nog dat de knipsels zelf de eigenlijke data zijn. De ontwikkelaars zijn echter niet het beste geplaatst om te communiceren met de klanten (zij die de knipsels lezen).

De scheiding van de machten - presentatie en data - zorgt ervoor dat de twee belangen beter en onafhankelijk kunnen worden gediend.

Deze machten ontmoeten elkaar door middel van de namen van de placeholders/sleutels: hier moet er consensus zijn.

Ja, maar … ik wil de data zelf op MIJN manier voorstellen!

Dit is een heel terechte wens. Neem bijvoorbeeld een datum waarop een boek werd uitgeleend. Zoals reeds eerder gezegd, bewaart Brocade dit op een speciale manier: het is het aantal dagen die er verstreken zijn sinds 31 december 1840 en de dag van uitlenen!

Dit is heel handig om mee te rekenen maar onze lezers hebben er weinig baat bij om op hun rappelbrieven de datum als een getal te zien.

BTS voorziet in een systeem van transformaties die waarden kunnen omvormen tot andere waarden. Het speciale er aan is dat deze transformaties kunnen worden uitgedrukt in de templates zelf. Dit gebeurt door middel van constructies die we modifiers (zie Modifiers) noemen.

In het volgende voorbeeld is loaned een sleutel voor de datum van uitlening (aantal dagen sinds 31 december 1840).

Dit boek werd uitgeleend op ${loaned | date}

Meteen maak je kennis met nieuwe speciale karakters: ${ is een andere manier om placeholders in te leiden: placeholders strekken zich dan uit tot de volgende }. Met dien verstande dat er ook delen in voorkomen die niet strikt tot de naam van de placeholder behoren. Deze delen zijn de modifiers en ze worden ingeleid door het speciale karakter |.

Deze template werkt met de placeholder loaned. De sleutel wordt echter - op vraag van de templatebouwer - eerst omgezet naar een leesbare datumpresentatie door toepassing van de modifier date.

Ok. Op deze wijze kan ik vlot omgaan met de sleutels. Maar behalve de sleutels zelf wil ik ook de andere gegevens van de template kunnen bespelen.

BTS maakt het mogelijk om de templates op te splitsen in delen - sub-templates genaamd - waarop je dezelfde modifiers kan laten werken. Deze sub-templates worden ingeleid door het speciale karakter { en eindigt bij het corresponderende } karakter. Deze sub-templates kan je ook gaan nesten. Op deze wijze kan je heel vernuftige constructies maken. Dit is een vorm van programmeren!

Het volgende voorbeeld geeft aan wat mogelijk is.

Stel: je wil een tekst opbouwen die aangeeft tot wanneer een boek is uitgeleend. Als deze datum samenvalt met de datum van vandaag, dan wil je aangeven dat de uitlening best wordt verlengd.

De ontwikkelaars leveren een sleutel aan. Laten we deze bijvoorbeeld until noemen: deze bevat de specifieke datum waarop de leentermijn vervalt. De templatebouwer kan nu volledig autonoom aan de slag:

Dit boek werd uitgeleend tot ${until | date}{ Gelieve dit werk te verlengen! | ?: until=date}

Deze template werkt voor elk uitgeleend boek en enkel voor die werken waarvoor de uitleentermijn vandaag vervalt, komt dat extra stukje tekst erbij. Later zien we wel hoe één en ander precies in elkaar zit.

12.3. Invocatie van een template

In BTS worden templates geactiveerd door de Brocade software zelf: dit betekent nog dat een template slechts in een bepaalde context als template wordt beschouwd. Binnen deze context speelt iedereen zijn rol:

De volgende elementen bepalen wat het resultaat zal zijn van de invocatie van een template:

Het template voorschrift
Dit is wat we kortweg de template noemen. Het is een formule die uit tekst, placeholders en modifiers bestaat. Deze kan - naargelang de context - worden samengesteld door ontwikkelaars of kerngebruikers.
De sleutels
Dit is een MUMPS array waarbij de namen van de placeholders worden verbonden met effectieve waarden. Deze constructie wordt samengesteld door de ontwikkelaars. Aan de auteurs van het template voorschrift wordt het lijstje met placeholdernamen gecommuniceerd.
De index
Bij een meervoudige sleutel moet BTS kunnen uitvissen welke van de waarden moet worden gebruikt. Dit gebeurt aan de hand van de index. De index is een getal dat, beginnend van 1, in volgorde aanduidt welke waarde dient te worden geselecteerd. De templatebouwer kan de index manipuleren door middel van loops. Een loop heeft een startwaarde en een eindwaarde en laat de sleutels incrementeel variëren tussen deze 2 waarden.
De dialoogtaal
De dialoogtaal die wordt gevoerd tijdens de Brocade sessie is belangrijk: deze maakt het mogelijk om taalonafhankelijke templates te construeren. De dialoogtaal kan zowel impliciet als expliciet worden gebruikt.
De store
Dit is een geavanceerd concept. Zoals later zal blijken, is het mogelijk om, binnen een template, andere templates te invoceren. De voorschriften van deze templates moeten kunnen worden gelokaliseerd. Dit gebeurt via de store.
De Brocade sessie
Templates worden uitgevoerd in een Brocade proces. De gegevens van dit Brocade proces zijn te gebruiken in placeholders.
De default waarde
In een template wordt de waarde van een placeholder berekend door middel van een watervalsysteem. Soms gebeurt het dat deze cascade geen waarde vindt. In deze situatie wordt er gegrepen naar een noodoplossing: de default waarde. Het gebruik van een default waarde is echter niet altijd wenselijk: de default waarde kan immers fouten in templates maskeren. De ontwikkelaar beslist of er een default waarde moet zijn en wat de waarde dan is.

Het invoceren van een template is een complexe zaak die (relatief) heel wat computertijd kan nemen. Daarom wordt dit invoceren opgesplitst in 2 fasen:

  • compilatie: het template voorschrift wordt verwerkt naar een efficiënte, interne, voorstelling
  • invocatie: de placeholders worden ingevuld en de modifiers worden toegepast.

De voorstelling na compilatie wordt weggeschreven in een cache. Dit is een structuur die snel toegankelijk is maar niet echt nodig is, deze structuur kan immers steeds worden herberekend. Het principe is eenvoudig: vooraleer de template wordt gecompileerd, wordt er gekeken of er al geen compilatie bestaat in de cache. Pas indien dit niet zo is, wordt de compilatiefase uitgevoerd en de cache aangevuld.

Het invoceren van een template in de Brocade software gebeurt door het oproepen van een macro:

macro template($value, $template, $keys=MAkeys3, $lg="", $store="", $index="", $default=MDdef3, $ref="", $hash=""):
    '''
    $editfile: /stdlib/template/template.d
    $synopsis:  Bereken de waarde van een template in een verzameling van sleutels
    $value: Te berekenen waarde
    $template: Template
    $keys: Sleutelverzameling
    $lg: Dialoogtaal
    $store: Verzameling van templates
    $index: Indexwaarde voor meervoudige sleutels
    $default: Default waarde bij berekeningen. kan ook niet gedefinieerd zijn
    $ref: Referentie naar de template uitvoering.
          Door middel van deze referentie kan de gebruiker de template
          en zijn waarden ophalen in /menu/templatepractice
    $hash: Alternatief voor hash
    $example: m4_template(RDresult, "{hello World}", RAkeys)
    '''

    «k MDdef3,MAkeys3 s $value=$$%Tmplate^utpslate($template,.$keys,$lg,$store,$index,.$default,$ref,$hash)»

Notitie

Template bouwers kunnen oefenen door middel van de Brocade toepassing: Systeembeheer ‣ Diverse ‣ Werken met templatesNG [link]

12.4. Specificatie van een template

In een BTS template worden enkel ASCII karakters toegelaten. Zoals later zal blijken, verhindert dit geenszins dat er in het eindresultaat andere karakters verschijnen.

12.4.1. Speciale karakters in een template

Decimaal Naam Teken Speciaal gebruik
33 EXCLAMATION MARK ! Modifiers, namen van placeholders, logische uitdrukkingen
34 QUOTATION MARK Argumenten van modifiers, logische uitdrukkingen en rekenkundige uitdrukkingen
35 NUMBER SIGN # Modifiers, rekenkundige uitdrukkingen
36 DOLLAR SIGN $ Namen van placeholders
37 PERCENT SIGN % Namen van placeholders, rekenkundige uitdrukkingen
38 AMPERSAND & Logische uitdrukkingen
39 APOSTROPHE Logische uitdrukkingen
40 LEFT PARENTHESIS ( Logische uitdrukkingen en rekenkundige uitdrukkingen
41 RIGHT PARENTHESIS ) Logische uitdrukkingen en rekenkundige uitdrukkingen
42 ASTERIX * Argumenten van modifiers, rekenkundige uitdrukkingen
43 PLUS SIGN + Rekenkundige uitdrukkingen
45 HYPHEN-MINUS - Rekenkundige uitdrukkingen
47 SOLIDUS / Rekenkundige uitdrukkingen
58 COLON : Modifiers
60 LESS-THAN SIGN < Logische uitdrukkingen
61 EQUALS SIGN = Modifiers, logische uitdrukkingen
62 GREATER-THAN SIGN > Logische uitdrukkingen
63 QUESTION MARK ? Modifiers
64 COMMERCIAL AT @ Namen van placeholders
92 REVERSE SOLIDUS \ Escape karakter
95 LOW LINE _ Namen van placeholders
96 GRAVE ACCENT ` Modifiers
123 LEFT CURLY BRACKET { Namen van placeholders, sub-templates
124 VERTICAL LINE | Modifiers, logische uitdrukkingen
125 RIGHT CURLY BRACKET } Namen van placeholders, sub-templates
171 LEFT-POINTING DOUBLE ANGLE QUOTATION MARK « Niet rechtstreeks in BTS
187 RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK » Niet rechtstreeks in BTS

12.4.2. Whitespace

Met whitespace wordt elke opeenvolging bedoeld van de ASCII whitespace karakters: spaties, tabs, …

De karakters die in aanmerking komen om als whitespace te worden behandeld, zijn:

Decimaal Naam
9 CHARACTER TABULATION
10 LINE FEED
11 LINE TABULATION
12 FORM FEED
13 CARRIAGE RETURN
32 SPACE

12.4.3. Constructies met meerdere karakters

Er zijn ook een aantal constructies waarbij meerdere karakters worden gebruikt:

Karakters Betekenis
${ Deze karakters leiden een complexe placeholder in.
@{ Deze karakters leiden een complexe placeholder in.

Verder zijn er nog de constructies die in logische uitdrukkingen worden gebruikt. Deze constructies zijn in overeenstemming met de constructies die in andere softwareomgevingen worden gebruikt.

Karakters Betekenis
|| De logische OR uitdrukking.
&& De logische AND uitdrukking.
!>, <= … is kleiner of gelijk aan …
!<, >= … is groter of gelijk aan …
!=, <> … is verschillend met …

12.4.4. Placeholders en sleutels

Placeholders zijn de stille kracht van elk templatesysteem: zij zorgen ervoor dat de template model kan staan voor een ganse familie van karakterrijen. Hoe krachtiger de placeholders zijn, des te beter het templatesysteem zijn werk kan doen.

BTS hanteert een verscheidenheid aan technieken om placeholders te kunnen gebruiken.

Er zijn 2 soorten placeholders:

  • Placeholders die verwijzen naar waarden (sleutels)
  • Placeholders die verwijzen naar andere templates

Hoewel beide soorten placeholders erg verschillend zijn, hebben ze heel wat gemeenschappelijke kenmerken:

  • Beiden leiden tot een waarde die de placeholder vervangen in het voorschrift
  • De gevonden waarde kan worden gemanipuleerd door modifiers
  • Beiden kunnen optioneel zijn
  • Beiden kunnen vernietigend werken

In beide gevallen zijn er 2 technieken mogelijk om de placeholder te kunnen herkennen in het templatevoorschrift:

  • op basis van de samenstelling van de naam van de placeholder
  • door een expliciet begin en einde aan te geven

12.4.4.1. Placeholders die verwijzen naar waarden

Deze placeholders komen veruit het meeste voor.

De waarden waar de placeholders kunnen divers van aard zijn:

  • waarden uit de sleutelverzameling
  • waarden gevonden in de runtime omgeving van het Brocade proces
  • de Brocade tekstfragmenten
  • de tekstfragmenten uit de Brocade namespaces

Vooraleer we hier dieper op in gaan, geven we nog aan hoe we deze placeholders kunnen identificeren in een template.

Deze placeholders beginnen steeds met een (niet-escapet) % of $.

Regels (toe te passen in volgorde)

Begint de placeholder met:

${
De naam begint vanaf het eerste niet-whitespace karakter en eindigt met het eerstvolgende (niet-escapet) } of |. Whitespace op het begin en einde wordt verwijderd. Deze methode is ook de enige om modifiers te definiëren op de corresponderende waarde.
$
De naam begint bij het volgende karakter en neemt alle karakters uit a-z, A-Z, 0-9, ., _, %, !
%
De naam begint bij het volgende karakter en neemt alle karakters uit a-z, A-Z, 0-9, !

Indien de placeholder een ! bevat, dan wordt de !-vlag van de placeholder aangezet (later hierover meer uitleg). Uit de naam worden dan steeds alle !-karakters verwijderd.

Pas op

De naam van een placeholder mag niet leeg zijn en moet beginnen met een letter.

Voorbeelden:

Template Naam !-vlag
Kost is 20 %valuta valuta Uit
De tweede auteur $author!_2 author_2 Aan
Eerste programma: $.helloworld .helloworld Uit
De auteur heet ${author_%index | xml} author_%index Uit

12.4.4.2. Placeholders die verwijzen naar een template

Deze constructie is eerder zeldzaam en wordt vooral door ontwikkelaars gebruikt. De template wordt gezocht in de store. Dit is een MUMPS-structuur waarbij @store@(name) dan het templatevoorschrift is.

Regels (toe te passen in volgorde)

Begint de placeholder met:

@{
De naam begint vanaf het eerste niet-whitespace karakter en eindigt met het eerstvolgende (niet-escapet) } of |. Whitespace aan het begin en einde wordt verwijderd. Deze methode is ook de enige om modifiers te definieren op de corresponderende waarde.
@
De naam begint bij het volgende karakter en neemt alle karakters in a-z, A-Z, 0-9, ., _, %, !

Indien de placeholder een ! bevat, dan wordt de !-vlag van de placeholder aangezet (later hierover meer uitleg). Uit de naam worden dan steeds alle !-karakters verwijderd.

Als de naam van de template niet begint met een @, dan wordt deze er vooraan aan toegevoegd.

Pas op

de naam van een placeholder mag niet leeg zijn.

Zoals je merkt, de syntax van beide soorten placeholders is nauwelijks verschillend.

Voorbeelden:

Template Naam !-vlag
Auteurs in volgorde: @authors @authors Uit
Auteurs in volgorde: @{authors | xml} @authors Uit

12.4.4.3. Sleutels

Sleutels komen in een verzameling. Deze verzameling wordt samengesteld door de ontwikkelaars en hangen samen met de context waarin de template wordt gebruikt.

Voor de ontwikkelaars gedraagt deze verzameling zich zoals een associatieve MUMPS-array die namen verbindt met waarden. Deze namen en hun betekenis moeten worden gecommuniceerd met de templatebouwer.

De waarden zijn meestal eenvoudige karakterrijen. Het kan echter gebeuren dat deze waarden meervoudig zijn: neem bijvoorbeeld auteurs die samen een boek schrijven. BTS voorziet in een mechanisme dat toelaat om met meerdere waarden onder dezelfde naam te werken.

Het volgende voorbeeld illustreert hoe de ontwikkelaar de sleutels moet representeren in MUMPS:

Stel dat we een boek beschrijven. Het datamodel voor dit boek laat toe dat er meerdere titels, meerdere auteurs, maar slechts 1 OCLC nummer bestaat.

Het boek:

Fortran / Charet, G. ; Riche, A. - OCLC 901048860 - Paris : Société d’édition d’enseignement supérieur, 1969. - 239 p.

zou dan als sleutelverzameling kunnen hebben:

GT.M>s RAkeys("title",1)="Fortran"

GT.M>s RAkeys("author",1)="Charet, G."

GT.M>s RAkeys("author",2)="Riche, A."

GT.M>s RAkeys("oclc")="901048860"

Opmerkingen:

  • De ontwikkelaar moet de namen title, author, oclc en hun betekenis communiceren met de templatebouwer
  • De syntax van de namen is eenvoudig: het is good practice enkel kleine letters te gebruiken. Zijn cijfers nodig, plaats ze dan aan het einde van de naam. Kies voor de namen Engelstalige codes: ze zijn compact en zonder accenten.
  • Meestal zijn sleutels (zoals oclc) enkelvoudig
  • Hoewel er slechts 1 waarde is voor title is deze naam in wezen toch meervoudig: gebruik dan een extra index. De templatebouwer moet immers weten of een naam enkelvoudig of meervoudig is: hij zal - zonder de effectieve waarde(n) te kennen - op basis van deze informatie de template moeten bouwen.
  • De ontwikkelaar neemt het best waarden die zo dicht mogelijk bij de databank staan: de templatebouwer kan deze dan beter zelf transformeren via de modifiers.

Let op

Ontwikkelaar, gebruik - over template-contexten heen - vaste namen met een vaste betekenis: het communicatieproces met de templatebouwer wordt er eenvoudiger op en is beter voorspelbaar.

12.4.4.4. Van placeholder naar waarde

De omzetting van een placeholder naar een waarde gebeurt stapsgewijs, in een watervalsysteem:

  1. Vooreerst wordt de naam bepaald
  2. Begint de naam met een @, dan wordt de naam opgezocht in de store. Bestaat de naam niet in de store, dan wordt de default waarde de waarde van de placeholder (indien er geen default waarde werd gespecificeerd, dan faalt de invocatie van de template). Wordt de naam wel teruggevonden, dan wordt de corresponderende waarde als template beschouwd en geïnvoceerd met dezelfde parameters. Dit resultaat komt dan in de plaats van onze placeholder.
  3. De naam wordt opgezocht in de sleutelverzameling en er wordt gekeken of deze naam meervoudig is. Indien de naam meervoudig is, dan wordt de sleutel met de gegeven index geselecteerd. Bestaat de naam niet met deze index, dan wordt de default waarde, de waarde van de placeholder (indien er geen default waarde werd gespecificeerd, dan faalt de invocatie van de template). Wordt de naam wel teruggevonden met deze index, dan wordt de corresponderende waarde, de waarde van onze placeholder.
  4. Bestaat de naam in de sleutelverzameling dan wordt de corresponderende waarde, de waarde van de placeholder.
  5. Bevat de naam een ., dan wordt de naam als een tekstfragment beschouwd. Dit tekstfragment wordt dan geëvalueerd in de gespecificeerde taal en als waarde voor de placeholder meegegeven.
  6. (Voor ontwikkelaars) Begint de naam met een hoofdletter en bevat de naam geen _, dan wordt de waarde uit de runtime omgeving opgevist. Bestaat deze naam niet in de runtime omgeving, dan wordt de default waarde, de waarde van de placeholder (indien er geen default waarde werd gespecificeerd, dan faalt de invocatie van de template).
  7. (Voor ontwikkelaars) Begint de naam met een hoofdletter en bevat de naam wel een _, dan wordt in de runtime gezocht naar de naam met als subscripts, de delen gescheiden door _, met dien verstande dat delen die beginnen met een % ook als placeholder worden geëvalueerd. Wordt de waarde niet gevonden in de runtime, dan wordt de default waarde, de waarde van de placeholder (indien er geen default waarde werd gespecificeerd, dan faalt de invocatie van de template).
  8. Namen die enkel uit kleine letters bestaan en uit een vaste verzameling komen:
Naam Waarde
apostrophe
brocade Brocade
crlf CARRIAGE RETURN gevolgd door LINE FEED
date Brocade notatie voor de datum (aantal dagen sinds 1840-12-31 gevolgd door COMMA)
default Default waarde
desktop Naam van de actuele desktop
e 2.71828182846
empty De lege karakterrij
false 0
grave `
index De actuele index voor meervoudige sleutels
input De tot dusver berekende waarde
job Het procesnummer van de runtime
lg De dialoogtaal: N, E, D, F, U
maxindex De maximale waarde die de index kan hebben bij meervoudige sleutels.
minus -
page Het Brocade paginanummer
placeholder De actuele placeholder
planet Meervoudige sleutel die de planeten - in volgorde - bevat.
question ?
quotation
service De actuele Brocade service
session Het actuele Brocade sessie nummer
space SPACE
staff Userid van het personeelslid dat het Brocade proces heeft opgestart.
time Brocade notatie voor het huidige tijdstip (op de seconde)
true 1
undefined De niet gedefinieerde waarde. Kan enkel in uitzonderlijke situaties worden gebruikt.
unique Een uniek nummer binnen de huidige Brocade installatie.
alpha «03B1» (=α)
beta «03B2» (=β)
gamma «03B3» (=γ)
delta «03B4» (=δ)
epsilon «03B5» (=ε)
zeta «03B6» (=ζ)
eta «03B7» (=η)
theta «03B8» (=θ)
iota «03B9» (=ι)
kappa «03BA» (=κ)
lambda «03BB» (=λ)
mu «03BC» (=μ)
nu «03BD» (=ν)
xi «03BE» (=ξ)
omicron «03BF» (=ο)
pi «03C0» (=π)
rho «03C1» (=ρ)
sigma «03C3» (=σ)
tau «03C4» (=τ)
upsilon «03C5» (=υ)
phi «03C6» (=φ)
chi «03C7» (=χ)
psi «03C8» (=ψ)
omega «03C9» (=ω)
  1. De default waarde wordt teruggeven. Indien deze niet bestaat, faalt de invocatie.

12.4.5. Rekenkundige uitdrukkingen

In modifiers wordt er op verschillende plaatsen gebruik gemaakt van getallen. Een goed voorbeeld hiervan is de modifier substr. Deze transformeert de reeds gevonden waarde naar een deel-karakterrij. Hierbij wordt de beginwaarde en de eindwaarde opgegeven.

Soms is het handig dat deze waarden worden berekend op het moment van invocatie van de template (en dit in tegenstelling tot waarden die gekend zijn op het ogenblik dat de templatebouwer het voorschrift formuleert)

BTS voorziet in de mogelijkheid om deze getallen te specificeren aan de hand van een formule (zoals in een spreadsheet). Een formule is iets wat we heel goed kennen: getallen, haakjes en bewerkingen worden gecombineerd en leiden tot een waarde. Rigoureus kunnen we een formule als volgt (recursief) definiëren:

  • Een geheel getal is een formule. De waarde ervan is het getal zelf.
  • Een placeholder is een formule. De waarde van de placeholder wordt de waarde van de formule.
  • ## gevolgd door een placeholder is een formule. Verwijst de placeholder naar een enkelvoudige sleutel, dan is de waarde van de formule maxindex. Is de sleutel meervoudig, dan is de waarde van de formule gelijk aan het aantal indexen bij die sleutel.
  • # gevolgd door een placeholder is een formule. De lengte van de waarde van de placeholder wordt de waarde van de formule.

Er bestaan verschillende bewerkingen die 1 of 2 formules kunnen combineren.

In de volgende tabel gebruiken we de volgende notaties:

  • F en G zijn formules
  • Is F een formule, dan is het getal val(F) de waarde van de formule
Geconstrueerde formule Waarde van deze formule
(F) val(F)
-F -val(F)
F^G val(F) tot de macht val(G)
F*G val(F)*val(G)
F/G val(F)/val(G) (enkel het geheel gedeelte wordt behouden)
F%G De rest van val(F)/val(G)
F+G val(F)+val(G)
F-G val(F)-val(G)

Notitie

rekenkundige uitdrukkingen (formules) bevatten geen spaties.

Voorbeelden

In de volgende voorbeelden wordt er gebruik gemaakt van de placeholders one, two, three en authors: one heeft de waarde 1, two heeft de waarde 2, three heeft de waarde 3. authors is meervoudig en heeft de waarden Hugo en Stijn.

Rekenkundige uitdrukking Waarde
-3 -3
-3+two -1
two*three 6
three^2 9
7%4 3
9/2 4
8-3 5
2+3*4 14
(two+three)*4 20
#two 1
##authors 2
##one-maxindex 0

12.4.6. Logische uitdrukkingen

Behalve rekenkundige uitdrukkingen bewijzen ook logische uitdrukkingen hun nut bij het gebruik van modifiers.

Logische uitdrukkingen worden herleid tot twee mogelijke waarden: true en false.

Logische uitdrukkingen worden samengesteld uit:

  • placeholders
  • karakterrijen: deze beginnen en eindigen steeds met of met `. Bevat een karakterrij deze delimiter of een \ dan moeten deze worden geëscapet.
  • rekenkundige uitdrukkingen
  • symbolen: =, !, <, >, ~, (, ), ||, &&

Pas op

Logische uitdrukkingen bevatten geen whitespace (tenzij in karakterrijen).

Net zoals rekenkundige uitdrukkingen worden ook logische uitdrukkingen recursief gedefinieerd. De constructies zijn iets gecompliceerder omdat rekenkundige uitdrukkingen een essentieel onderdeel vormen van logische uitdrukkingen. In hetgeen volgt zijn F en G twee rekenkundige uitdrukkingen, S en T twee karakterrijen, L en M twee logische uitdrukkingen.

Met val(F) duiden we waarde aan van de rekenkundige uitdrukkingen F.

  • De lege karakterrij “” is false, de karakterrij “0” is false, alle andere karakterrijen zijn true
  • Het getal 0 is false, alle andere getallen zijn true
  • Is L een logische uitdrukking, dan is ook (L) een logische uitdrukking met dezelfde waarde
  • Is L een logische uitdrukking, dan is ook !(L) een logische uitdrukking die true is als L false is en omgekeerd.
  • S=T is een logische uitdrukking met waarde true indien de karakterrijen karakter per karakter gelijk zijn. In de andere gevallen is de waarde false
  • S!=T is een logische uitdrukking die equivalent is met !(S=T)
  • S~T is een logische uitdrukking die true is indien S het patroon T volgt
  • S!~T is een logische uitdrukking die equivalent is met !(S~T)
  • F=G (resp. F!=G) is een logische uitdrukking met waarde true indien val(F) = val(G) (resp. val(F) != val(G))
  • F<G (resp. F!<G) is een logische uitdrukking met waarde true indien val(F) < val(G) (resp. val(F) !< val(G))
  • F>G (resp. F!>G) is een logische uitdrukking met waarde true indien val(F) > val(G) (resp. val(F) !> val(G))
  • L&&M is een logische uitdrukking die de waarde true heeft indien L en M beiden true zijn
  • L||M is een logische uitdrukking die enkel false is indien ze beiden false zijn.

Een woordje uitleg bij de ~ operator: deze operator werkt met 2 karakterrijen. De tweede karakterrij is een patroon en de eerste wordt afgemeten tegen dit patroon. Het resultaat is true indien de eerste karakterrij beantwoordt aan het patroon. Een patroon wordt gespecificeerd met behulp van gewone karakters (die verschillend moeten zijn van [, ], *, ?) en wildcards.

Deze wildcards staan dan voor 1 of meer karakters:

Wildcard Betekenis
* Elke opeenvolging van karakters
? Precies 1 karakter
[set] set staat voor een opsomming van karakters

Voorbeelden

In de volgende voorbeelden wordt er gebruik gemaakt van de placeholders one, two, three en authors: one heeft de waarde 1, two heeft de waarde 2, three heeft de waarde 3. authors is meervoudig en heeft de waarden Hugo en Stijn.

Logische uitdrukking Waarde
-3 true
-3+two true
two*three=6 true
three^2<8 false
(7%4=3)&&(9/2=4) true
##one<maxindex false
“UA-CST”~”UA-*” true

12.4.7. Algemene uitdrukkingen

In tegenstelling tot rekenkundige en logische uitdrukkingen worden algemene uitdrukkingen steeds geëvalueerd tot een karakterrij (een string).

Hiertoe wordt gebruik gemaakt van een Brocade macro:

macro eval($value, $expression, $keys=MAkeys1, $context="", $lg="", $store="", $index="", $default=MDdef1):
    '''
    $editfile: /stdlib/template/template.d
    $synopsis:  Evalueer een uitdrukking tegenover een sleutelverzameling
    $value: Te berekenen waarde
    $expression: Uitdrukking
    $keys: Sleutelverzameling
    $context: b (booleaans) | m (math) | anders
    $lg: Dialoogtaal
    $store: verzameling van templates
    $index: indexwaarde voor meervoudige sleutels
    $default: Default waarde bij berekeningen. kan ook niet gedefinieerd zijn
    $example: m4_eval(RDresult, "key", RAkeys)
    '''

    «k MDdef1,MAkeys1 s $value=$$%Evalc^utpslate($context,$expression,.$keys,$lg,$store,$index,.$default)»

Essentieel komt het erop neer:

  1. Begint de uitdrukking met een QUOTATION MARK of een GRAVE ACCENT dan wordt de BACKSLASH als een escape karakter beschouwd (de BACKSLASH en het QUOTATION MARK of de GRAVE ACCENT in de uitdrukking moeten worden geëscapet)
  2. Bestaat de uitdrukking enkel uit cijfers, dan wordt de uitdrukking herleid tot dit getal
  3. Begint de uitdrukking met PLUS SIGN of HYPHEN-MINUS, gevolgd door cijfers, dan wordt de uitdrukking herleid tot dit getal.
  4. Anders wordt de uitdrukking beschouwd als een placeholder en geëvalueerd.
Algemene uitdrukking Waarde
-3 -3
##planet 9
brocade Brocade
“Hello World” Hello World
“Hello "Moon"” Hello “Moon”
`Hello “Moon”` Hello “Moon”

12.4.8. Templates en sub-templates

Een template is een S-expressie. Als delimiters worden (niet-geescapet) { en } gebruikt. Templates bestaan dus uit andere templates (sub-templates)

Voorbeelden

Template Opmerkingen
A Eenvoudige templates hoeven geen delimiters te bevatten
{A} A is een sub-template
A{B}C Een template kan meerdere delen bevatten
{{{{{A}A}A}A}A} De delimiters { en } moeten precies genest zijn.

Notitie

De evaluatie van templates gebeurt van links naar rechts (en is op deze wijze ook recursief gedefinieerd).

Dit is belangrijk: zoals later zal blijken kunnen diverse onderdelen van de template gedurende het evalueren zelf, worden aangepast. Zo kunnen er ook sleutels worden aangemaakt door de templatebouwer!

Een template is een S-expressie: dit is een boomstructuur van sub-templates. Deze worden van links naar rechts geëvalueerd en in de diepte eerst.

Een voorbeeld maakt dit duidelijk: stel dat A, B, C, D sub-templates zijn.

In de template A{B{C}D}E worden in volgorde A, B, C, D, E geëvalueerd.

12.4.9. Modifiers

Modifiers zijn nog het beste te omschrijven zoals een wiskundige functie: een modifier krijgt een input en verwerkt deze tot een output.

Een modifier wordt geïdentificeerd door middel van een specifieke naam (BTS telt meer dan 100 modifiers) en argumenten. De betekenis van deze argumenten en hun impact op de werking van de modifier wordt eveneens binnenin BTS gespecificeerd. Het aantal argumenten is belangrijk! Het is wel zo dat de betekenis van een argument niet wijzigt met het aantal argumenten: als een modifier kan voorkomen met 2 argumenten en met 3 argumenten, dan zal het eerste (en het tweede) argument steeds dezelfde betekenis hebben.

Syntactisch worden de naam en de diverse argumenten gescheiden door whitespace. De naam mag ook van de argumenten worden gescheiden door : of =. Deze delimiters hebben verder geen invloed op de werking van de modifier en verdwijnen bij het compileren.

Net zoals in de wiskunde functies samenstelbaar zijn, kunnen ook modifiers worden geketend. De output van de ene modifier is de input van de volgende modifier. Zo een aaneenschakeling van modifiers noemen we een modifierketting.

Pas op

  • Het aantal argumenten is bepalend voor de specifieke werking van de modifier.
  • Bij modifiers zijn QUOTATION en GRAVE ACCENT mogelijke begin/eindd-delimiters. Binnen eenzelfde modifierketting moet echter steeds ook dezelfde delimiter worden gebruikt. M.a.w. steeds ofwel QUOTATION ofwel GRAVE ACCENT.

12.4.9.1. BTS modifiers

12.4.9.1.1. ? modifier

De evaluatie van een template kan tijdrovend zijn en daarom wordt er gebruik gemaakt van een speciale modifier ?. Dit is de enige modifier die wordt gebruikt vooraleer zijn input is gekend!

Als ? voorkomt in de modifierketting van een sub-template, dan moet deze ook vooraan staan. Deze modifier heeft 1 argument: een logische uitdrukking. Pas indien deze logische uitdrukking tot true evalueert, wordt ook de sub-template berekend. Deze modifier speelt verder geen rol meer.

Indien de logische uitdrukking tot false evalueert, dan wordt de sub-template geëvalueerd als een lege string.

Notitie

De modifierketting wordt steeds toegepast. Ook indien de logische uitdrukking tot false evalueert.

? werkt evengoed op placeholders. Ook deze worden pas berekend indien de logische uitdrukking true oplevert.

? speelt nog een andere rol die nuttig is bij het werken met meervoudige sleutels maar die ook wel kan worden gebruikt in andere situaties.

Behalve de test (het eerste argument), kunnen er nog 2 andere argumenten bestaan die dan rekenkundig zijn. De placeholder of de sub-template wordt dan berekend met steeds een andere index voor de meervoudige sleutels. De eerste waarde voor de index is dan het tweede argument, de laatste waarde is het derde argument. Deze constructie is dus analoog aan een loop-constructie bij programmeertalen.

12.4.9.1.2. # modifier

De # modifier is een shortcut.

De modifier werkt met 1 rekenkundig argument. De modifier wordt tijdens het parsen vervangen door de ? modifier met als eerste argument true en als tweede en derde argument dit rekenkundig argument.

Het is nuttig om de index aan te geven waarmee meervoudige sleutels worden behandeld. Verder voldoet deze aan dezelfde voorwaarden als ? modifier.

12.4.9.1.3. ! modifier

Ook ! is een speciale modifier die zowel op placeholders als op sub-templates een wel heel speciale kracht kan uitoefenen. Deze modifier komt met 0 argumenten of met 1 argument. Indien er een argument is, dan is dit een logische uitdrukking. Zonder argumenten werkt deze modifier alsof deze logische uitdrukking true is.

Deze modifier komt pas in actie indien de placeholder of de sub-template evalueert tot de lege string (na toepassing van de volledige modifierketting). De logische uitdrukking wordt berekend en indien deze true oplevert, dan wordt de ouder (dit is de sub-template waartoe de placeholder of de sub-template behoort) op de lege string gezet. Deze ouder wordt niet verder berekend. Zijn modifierketting wordt echter wel toegepast (en kan dus ook de grootouders op leeg zetten).

Hoewel deze modifier op de ‘traditionele’ manier kan worden gespecificeerd bij placeholders, bestaat er ook een syntactische shortcut: het is voldoende een ! te plaatsen ergens in de naam (of net achter de naam) van de placeholder.

12.4.9.1.4. arg modifier

De arg modifier laat toe om argumenten te verzamelen.

Er zijn 2 argumenten:

  • het eerste argument wordt de naam van het verzameling (na evaluatie)
  • het tweede argument wordt as-is in de verzameling opgenomen.

Dergelijke verzameling kan dus meerdere waarden bevatten. Deze verzamelingen worden dan gebruikt in andere modifiers door de argumenten van deze modifiers te laten beginnen met een *. Het stuk na de * wordt geëvalueerd en levert de naam van de verzameling op. De verzamelde waarden worden dan in de plaats gebracht van dit argument.

Notitie

De argumenten uit de verzameling worden pas berekend bij de toepassing van de modifier waarin de * staat.

12.4.9.1.5. skip modifier

De skip modifier laat toe om juist 1 modifier over te slaan.

Het eerste argument is een logisch uitdrukking: pas indien deze tot true evalueert, wordt de volgende modifier ‘geskipt’.

Het tweede argument is optioneel. Indien het bestaat wordt dit eveneens geëvalueerd. Als het resultaat verschilt van de lege string, dan wordt dit meteen de naam van een sleutel! De waarde in deze sleutel is 1 indien het eerste argument tot true evalueert, anders wordt de waarde 0.

Notitie

De skip modifier levert een uiterst krachtig instrument om modifiers al dan niet uit de modifierketting te halen.

12.4.9.1.6. label modifier

De label modifier wordt gebruikt om de sequentiele opeenvolging te doorbreken. Deze modifier gaat samen met goto modifier.

De label modifier kan werken met 0 of met 1 argumenten (met 0 argumenten wordt er verondersteld dat het argument de lege string is). Dit ene argument wordt geëvalueerd en opgeslagen. De input zelf wordt niet aangepast.

12.4.9.1.7. goto modifier

De goto modifier kan worden gebruikt om onvoorwaardelijk naar een punt in de modifierketting te springen.

De goto modifier kan werken met 0 of met 1 argumenten (met 0 argumenten wordt er verondersteld dat het argument de lege string is). Dit ene argument wordt geëvalueerd en de uitvoering herneemt met de modifier die zich bevindt na de corresponderende label modifier modifier. De input wordt niet aangepast.

Notitie

Indien het label niet bestaat, heeft de goto geen effect.

12.4.9.2. ‘Form’ modifiers

Er zijn een aantal modifiers die te maken hebben met de constructie van HTML elementen die gebruikt worden in een <form>.

Deze worden volgens dezelfde principes geconstrueerd:

  • De input bestaat uit 2 elementen die van elkaar gescheiden zijn door een COLON. Het eerste element is dan de naam van het HTML element (in underscore notatie: vb. FDid_1_ti). Beginnende en eindigende WHITESPACE wordt steeds weggehaald. Het tweede element is steeds de waarde dat het element moet krijgen.
  • In het gedeelte na de COLON is WHITESPACE wel belangrijk.
  • De waarde van het element moet STEEDS in Brocade codering staan.
  • Indien input echter geen colon bevat, dan wordt de waarde geëvalueerd op basis van de naam. In het gegeven voorbeeld wordt FDid(1,”ti”) opgezocht (met de lege string als default waarde).
  • De modifier-naam is steeds de naam van het HTML element
  • Indien de modifier een argument bevat dan wordt dit steeds behandeld als een JSON object. Dit object - een dict - bevat de attributen die het HTML element krijgt. Er worden wel steeds een aantal attributen standaard gedefinieerd.

Standaard wordt het id attribuut van het element steeds gelijkgesteld aan de naam. Men kan dit vermijden door het id attribuut zelf te definiëren. Een leeg id attribuut wordt niet weggeschreven.

Pas op

De waarde van het element - aangeleverd in input of via de JSON structuur - moet STEEDS in Brocade codering staan.

12.5. Definitie van de modifiers

Bij de bespreking van de diverse modifiers onderscheiden we volgende soorten argumenten:

Natuur Notatie
Geen argumenten null
Rekenkundige argumenten getal
Logische argumenten test
Algemene uitdrukking string
Encoding codec
DateTime datetime

Een encoding is een algemene uitdrukking die geëvalueerd wordt tot één van de waarden:

  • xml: alle Brocade Unicode waarden met code point kleiner dan 32 of groter dan 126 worden als numeric character references voorgesteld; ook de karakters QUOTATION MARK, AMPERSAND, APOSTROPHE, LESS-THAN SIGN worden omgezet in references. GREATER-THAN SIGN wordt niet omgezet.
  • xmll: werkt zoals xml encoding maar code points groter dan 255 worden niet omgezet.
  • xmlr: werkt zoals xml encoding maar behalve GREATER-THAN SIGN, wordt ook AMPERSAND en LESS-THAN SIGN niet omgezet.
  • xmlb: werkt zoals xml encoding maar werkt enkel op Brocade ISO-Latin-1 strings.
  • js: zet een Brocade string om in een string die in een Javascript context tussen QUOTATION MARKs of tussen APOSTROPHEs kan worden geplaatst
  • utf8: zet een Brocade Unicode string om in UTF-8
  • lutf8: zet een Brocade Unicode string om in ISO-Latin-1 of in UTF-8
  • py: zet een Brocade string om in een string die in een Python context tussen QUOTATION MARKs of tussen APOSTROPHEs kan worden geplaatst
  • url: zet een Brocade string om in een URL-veilige string.
  • hex: zet een byte string om in hexadecimale waarden (resultaat is 2x zo lang en bevat enkel 1234567890abcdef)
  • HEX: zet een byte string om in hexadecimale waarden (resultaat is 2x zo lang en bevat enkel 1234567890ABCDEF)

Een DateTime uitdrukking kan 3 gedaanten hebben:

  • een getal (vb. 56665)
  • een karakterrij die begint met cijfers en eindigt op COMMA
  • een karakterrij beginnend met cijfers, gevolgd door een COMMA en eindigend met cijfers.

De eerste situatie wordt behandeld alsof er een COMMA wordt toegevoegd.

Indien de uitdrukking eindigt op een COMMA wordt er een datum bedoeld: het getal geeft aan hoeveel dagen er verstreken zijn sinds 32 december 1840.

Indien de uitdrukking een COMMA bevat maar er niet op eindigt, dan wordt er een tijdstip bedoeld: het getal voor de COMMA geeft aan hoeveel dagen er verstreken zijn sinds 32 december 1840, het getal na de COMMA geeft het aantal verstreken seconden weer.

Met input wordt steeds de reeds gevonden getransformeerde waarde, net voor de bewuste modifier wordt toegepast, bedoeld.

Notitie

  • Het ligt in de natuur van de modifiers om de input te transformeren. Toch zijn er heel wat modifiers die worden gebruikt voor hun neveneffecten en waarbij de input NIET wordt aangepast en waarbij dus output = input. De synopsis bij deze modifiers wordt steeds gemarkeerd met een *.
  • Tenzij het anders vermeld is, worden de argumenten steeds geëvalueerd: rekenkundige uitdrukkingen worden getallen, logische uitdrukkingen worden true of false, algemene uitdrukkingen worden karakterrijen. Ten overvloede, worden getal, test en string gemarkeerd met een * indien de argumenten NIET geëvalueerd zouden worden. (Zie bijvoorbeeld arg)
  • Met string[b→xml] wordt de Brocade encodering naar XML bedoeld: toepassing van de modifier gaat er van uit dat de string zelf in de Brocade karakterset wordt gegeven en dat deze naar XML wordt omgevormd. De ontwikkelaar hoeft geen actie te ondernemen. Merk op dat de input zelf nooit impliciet wordt geëncodeerd. Elke encodering komt immers met een - kleine - performantie prijs en de templatebouwer kan het beste zelf uitmaken of de encodering nodig is.

12.5.1. Overzicht

BTS
  • ! Vernietig ouder!
  • arg Definieer een argument
  • # Index voor meervoudige sleutels
  • boole Evalueer logische uitdrukking
  • break, stop Stop de modifier ketting
  • ? Conditie of sub-template wordt uitgevoerd
  • def Alternatief voor een lege waarde
  • eval Evalueer uitdrukking
  • exec Evalueer uitdrukking
  • get Haal een waarde op met eventuele default waarde
  • goto Ga naar een plaats in de modifierketting
  • key Maak enkelvoudige sleutel aan
  • label Plaats een label
  • lang Van Dialoogtaal naar taalcode
  • math Evalueer rekenkundige uitdrukking
  • mmultike Definieer een meervoudige sleutel
  • ng Verwerk als templateNG
  • rm, delete Verwijder
  • round Rond af
  • setdefault Zet default waarde
  • skip Skip modifier
  • stay Behoud input
  • stop Behoud input
  • template Verwerk als template
Brocade concept
  • copy copy knop
  • counter Teller in Brocade
  • dloi Verwerk een d-LOI
  • docman Verwerk een docmanid
  • info Maak een informatie attribuut
  • loiview Toon een LOI
  • lookup Brocade lookup
  • menu Maak menu link
  • meta Verwerk metainformatie volgens een template
  • registry Registry waarden
  • saymeta Verwoord meta
  • sbytes Suffix bytes
  • scope Verwoord scopes
  • scopemeta Verwoord een scope uit een meta object
  • short Korte verwoording van LOI
  • staff Maak een verwijzing naar personeelslid
  • text Verwerk als tekstfragment
  • textfragment Verwijzing naar tekstfragment
  • toc Verwerk afkortingen
  • typemeta Verwerk van of naar meta loi
Codec
  • enc Encodeer
  • hex Encodeer hexadecimaal
  • js Encodeer naar javascript
  • json MUMPS structuur naar JSON
  • lutf8 Codeer naar lutf8
  • py Codeer naar Python
  • url Codeer URL path segmenten
  • urlapplication Start Brocade applicatie
  • utf8 Codeer naar UTF-8
  • xml Codeer naar XML
  • xmlb Codeer naar xmlb
  • xmll Codeer naar xmll
  • xmlr Codeer naar xmlr (restricted XML)
<FORM> element
  • checkbox Maak een <INPUT type=”checkbox”> HTML element
  • hidden Maak een <INPUT type=”hidden”> HTML element
  • inputtext Maak een <INPUT type=”text”> HTML element
  • option Maak een <option> HTML element
  • radio Maak een <INPUT type=”radio”> HTML element
  • select Maak een <SELECT> HTML element
  • textarea Maak een <TEXTAREA> HTML element
Stringbewerking
Tijd en datum
Web
  • anchor Maak een HTML anker
  • attrib Maak een HTML attribuut
  • class class attribuut
  • context Context menu
  • div Maak een div
  • elm Maak een HTML element
  • email Maak een e-mail link
  • href Maak een hyperlink
  • id Maak een id attribuut
  • idname Maak een id en een name attribuut
  • markdown Toon Markdown in HTML
  • name Maak een name attribuut
  • nbsp Spaties naar 160
  • rss RSS feeds
  • span Maak span element
  • style Maak een style attribuut
  • td Maak een td element
  • municode Toon Unicode karakters
  • urlize Maak van URL een link

12.5.2. ?

Titel Conditie of sub-template wordt uitgevoerd
Synopsis Bepaalt of de placeholder/sub-template wel moet worden geëvalueerd. Staat vooraan in de modifierketting. Met 3 argumenten ontstaat een cyclus waarbij de sub-template of de placeholder wordt berekend met een incrementele index.
Categorie BTS
Zie ook ? modifier
(test) Het argument test of de placeholder/sub-template wel van toepassing is
(test, getal1, getal2) getal1 is de startwaarde voor de index. getal2 is de eindwaarde voor de index.

Voorbeeld 1

{Hello World| ? lg="E"}{Dag Wereld| ? lg="N"}

wordt:

Dag␣Wereld

Voorbeeld 2

${planet | ? true 1 ##planet-1 | after ", "}${planet | ? true ##planet ##planet}

wordt:

Mercurius,␣Venus,␣Aarde,␣Mars,␣Jupiter,␣Saturnus,␣Uranus,␣Neptunus,␣Pluto

Voorbeeld 3

${planet | ? true 1 ##planet-2 | after ", "}${planet | # ##planet-1} en ${planet | # ##planet}

wordt:

Mercurius,␣Venus,␣Aarde,␣Mars,␣Jupiter,␣Saturnus,␣Uranus,␣Neptunus␣en␣Pluto

12.5.3. #

Titel Index voor meervoudige sleutels
Synopsis Zet de index voor de meervoudige sleutels Staat vooraan in de modifierketting.
Categorie BTS
Zie ook ? modifier en # modifier
(getal) getal is de waarde voor de subscripten van de meervoudige sleutels

Voorbeeld 1

${planet | # 3}

wordt:

Aarde

12.5.4. !

Titel Vernietig ouder!
Synopsis* Bepaalt of de placeholder/sub-template de ouder mag vernietigen (Dit is deze op leeg zetten). Vergeet niet dat de modifierketting van de ouder nog wordt uitgevoerd.
Categorie BTS
Zie ook ! modifier
(none) Zonder argumenten wordt de modifier steeds uitgevoerd
(test) Wordt enkel uitgevoerd indien de test true is.

Voorbeeld 1

Voelt {wereld is ${empty| !}}leeg aan ...

wordt:

Voelt␣leeg␣aan␣...

Voorbeeld 2

Voelt de {wereld ${empty| ! lg="Q" | def "vol en niet "}}leeg aan ?

wordt:

Voelt␣de␣wereld␣vol␣en␣niet␣leeg␣aan␣?

12.5.5. after

Titel Voeg toe aan input
Synopsis De input wordt achteraan aangevuld
Categorie Stringbewerking
Zie ook before
(string) De input wordt hiermee aangevuld
(string, codec) string wordt eerst nog geëncodeeerd volgens codec

Voorbeeld 1

{Hello Earth | after: " and Moon"}

wordt:

Hello␣Earth␣and␣Moon

Voorbeeld 2

{<b>| after alpha "xml" | after " en " | after omega "xml"}</b>

wordt:

<b>&#x03B1;␣en␣&#x03C9;</b>

12.5.6. anchor

Titel Maak een HTML anker
Synopsis Verwerkt input tot een HTML anchor. Is input leeg, dan wordt er verder gewerkt alsof input de waarde here had.
Categorie Web
Zie ook -
(null) Wordt (“”, “”, “”)
(string[b→xml]) Wordt (string, “”, “”)
(string[b→xml], string) Wordt (string, “”, “”, “”)
(string[b→xml], string, string) Het resultaat is een HTML <a> element met als name attribuut de samenstelling van input en de 3e string. <a> kan ook een id attribuut hebben met als waarde de 2e string (op voorwaarde dat deze niet leeg is). Is dit tweede argument trouwens het EQUALS SIGN, dan wordt dit tweede argument gelijk gesteld aan input. Tenslotte kan er ook een attribuut data-title bestaan met als waarde de inhoud van de 1e string.

Voorbeeld 1

{here | anchor "myTitle"}

wordt:

<a␣name='here'␣data-title='myTitle'></a>

Voorbeeld 2

{here | anchor "myTitle" "anchorid" 15}

wordt:

<a␣id='anchorid'␣name='here15'␣data-title='myTitle'></a>

Voorbeeld 3

{here | anchor alpha "anchorid" 15}

wordt:

<a␣id='anchorid'␣name='here15'␣data-title='&#x03B1;'></a>

Voorbeeld 4

{here | anchor "myTitle" "=" 15}

wordt:

<a␣id='here15'␣name='here15'␣data-title='myTitle'></a>

12.5.7. arg

Titel Definieer een argument
Synopsis* Dit is een techniek om argumenten te verzamelen. Deze argumenten worden dan later in de modifierketting toegepast door middel van de * notatie. De input zelf wordt niet veranderd!
Categorie BTS
Zie ook arg modifier
(string, string*) Het eerste argument wordt geëvalueerd en geeft de naam van de verzameling op waartoe dit argument behoort. Het tweede argument wordt as-is in de argumenten verzameling opgenomen.

Voorbeeld 1

{Hello Earth | arg "aft" " and hello Moon" | after *"aft"}

wordt:

Hello␣Earth␣and␣hello␣Moon

Voorbeeld 2

{Hello World | arg "piece" 7 | arg "piece" 11 | substr *"piece"}

wordt:

World

12.5.8. attrib

Titel Maak een HTML attribuut
Synopsis Plaatst de input in een XML (HTML) attribuut. Opgelet! input wordt niet automatisch geëncodeerd in XML.
Categorie Web
Zie ook  
(string) De identifier van het attribuut.

Voorbeeld 1

{myID|attrib "title"}

wordt:

title="myID"

Voorbeeld 2

{$alpha|attrib "title"}

wordt:

title="«03B1»"

Voorbeeld 3

{$alpha| xml| attrib "title"}

wordt:

title="&#x03B1;"

12.5.9. before

Titel Voeg in in input
Synopsis input wordt vooraan aangevuld.
Categorie Stringbewerking
Zie ook after
(string) De tekst die wordt gebruikt om aan te vullen.
(string, codec)` string wordt eerst nog geëncodeeerd volgens codec

Voorbeeld 1

{Hello World| before "Hi, "}

wordt:

Hi,␣Hello␣World

Voorbeeld 2

<b>{</b>| before omega "xml" | before " en " | before alpha "xml"}

wordt:

<b>&#x03B1;␣en␣&#x03C9;</b>

12.5.10. boole

Titel Evalueer logische uitdrukking
Synopsis input wordt berekend alsof het een logische uitdrukking was.
Categorie BTS
Zie ook math, mgenexp
(none)  

Voorbeeld 1

{true || false | boole}

wordt:

true

12.5.11. break, stop

Titel Stop de modifier ketting
Synopsis* Stopt de verdere verwerking van de modifier ketting
Categorie BTS
Zie ook -
(null) -
(test) Voert de modifier enkel uit indien de test lukt.

Voorbeeld 1

{Hello World | break | after "s"}

wordt:

Hello␣World

Voorbeeld 2

{Hello World | break false | after "s"}

wordt:

Hello␣Worlds

12.5.12. capitalize

Titel Zet de eerste letter om naar een hoofdletter
Synopsis Zet de eerste letter om naar een hoofdletter.
Categorie Stringbewerking
Zie ook  
(null)  

Voorbeeld 1

{hello World | capital}

wordt:

Hello␣World

12.5.13. center

Titel Centreer
Synopsis input wordt rechts en links aangevuld indien input te kort is
Categorie Stringbewerking
Zie ook rjust, ljust
(getal) De minimale lengte voor input, het padding karakter string staat op SPACE
(getal, string) string is het padding karakter

Voorbeeld 1

{Hello | center: 3}

wordt:

Hello

Voorbeeld 2

{Hello | center: 8}

wordt:

␣Hello␣␣

Voorbeeld 3

{Hello | center: 8 "-"}

wordt:

-Hello--

12.5.14. checkbox

Titel Maak een <INPUT type=”checkbox”> element
Synopsis input wordt omgezet naar een <INPUT type=”checkbox”> element.
Categorie <FORM> element
Zie ook ‘Form’ modifiers
(null)  
(string) JSON string met de diverse attributen
Default attr.
  • data-on=1 Geef hiervoor de waarde die hoort bij de checked toestand
  • data-off=0 Geef hiervoor de waarde die hoort bij de unchecked toestand
  • data-help=”“
  • style=”vertical-align:middle”

Voorbeeld 1

{FDid_choice: | checkbox}

wordt:

<input␣id='FDid_choice'␣style='vertical-align:middle'␣type='checkbox'␣value='0'␣onclick='var␣h=this.form["FDid_choice"];var␣v0=h.getAttribute("data-off");var␣v1=h.getAttribute("data-on");var␣v=h.value;h.value=v==v1?v0:v1;return␣true'␣/><input␣type='hidden'␣name='FDid_choice'␣value='0'␣data-on='1'␣data-off='0'␣/>

In HTML:

<input
   id='FDid_choice'
   style='vertical-align:middle'
   type='checkbox'
   value='0'
   onclick='var h=this.form["FDid_choice"];var v0=h.getAttribute("data-off");var v1=h.getAttribute("data-on");var v=h.value;h.value=v==v1?v0:v1;return true' />
   <input type='hidden' name='FDid_choice' value='0' data-on='1' data-off='0' />

Voorbeeld 2

{FDid_choice: | checkbox `{"data-on":"white","data-off":"black"}`}

wordt:

<input␣id='FDid_choice'␣style='vertical-align:middle'␣type='checkbox'␣value='0'␣onclick='var␣h=this.form["FDid_choice"];var␣v0=h.getAttribute("data-off");var␣v1=h.getAttribute("data-on");var␣v=h.value;h.value=v==v1?v0:v1;return␣true'␣/><input␣type='hidden'␣name='FDid_choice'␣value='black'␣data-on='white'␣data-off='black'␣/>

In HTML:

<input
   id='FDid_choice'
   style='vertical-align:middle'
   type='checkbox'
   value='0'
   onclick='var h=this.form["FDid_choice"];var v0=h.getAttribute("data-off");var v1=h.getAttribute("data-on");var v=h.value;h.value=v==v1?v0:v1;return true' />
   <input type='hidden' name='FDid_choice' value='black' data-on='white' data-off='black' />

Voorbeeld 3

{FDid_choice:white | checkbox `{"data-on":"white","data-off":"black"}`}

wordt:

<input␣checked='checked'␣id='FDid_choice'␣style='vertical-align:middle'␣type='checkbox'␣value='1'␣onclick='var␣h=this.form["FDid_choice"];var␣v0=h.getAttribute("data-off");var␣v1=h.getAttribute("data-on");var␣v=h.value;h.value=v==v1?v0:v1;return␣true'␣/><input␣type='hidden'␣name='FDid_choice'␣value='white'␣data-on='white'␣data-off='black'␣/>

In HTML:

<input
   checked='checked'
   id='FDid_choice'
   style='vertical-align:middle'
   type='checkbox'
   value='1'
   onclick='var h=this.form["FDid_choice"];var v0=h.getAttribute("data-off");var v1=h.getAttribute("data-on");var v=h.value;h.value=v==v1?v0:v1;return true' />
   <input type='hidden' name='FDid_choice' value='white' data-on='white' data-off='black' />

12.5.15. chr

Titel Brocade karakter
Synopsis Vormt de input om naar een Brocade karakter
Categorie Stringbewerking
Zie ook ord
(null) Interpreteert input als een getal en vervangt input door het corresponderende Brocade karakter
(getal) Vult input aan met het corresponderende Brocade karakter

Voorbeeld 1

{64| chr}

wordt:

@

Voorbeeld 2

{tricky.dicky | chr: 64}gmial.com

wordt:

tricky.dicky@gmial.com

12.5.16. class

Titel class attribuut
Synopsis input wordt omgevormd tot een HTML class attribuut
Categorie Web
Zie ook style
(null)  

Voorbeeld 1

{myID|class}

wordt:

class="myID"

12.5.17. context

Titel Context menu
Synopsis input wordt omgevormd naar een HTML context menu.
Categorie Web
Zie ook info
(null)  

Voorbeeld 1

[{.|context}]

wordt:

[]

Voorbeeld 2

{myContext|context}

wordt:

oncontextmenu='return␣WORKSPACE.contextmenu(event,this,"myContext")'

12.5.18. copy

Titel copy knop
Synopsis input wordt omgevormd naar een copy & paste knop. De code gaat input zelf Javascript veilig maken.
Categorie Brocade concept
Zie ook  
(null)  

Voorbeeld 1

[{|copy}]

wordt:

[]

Voorbeeld 2

{c:lvd:2378461|copy}

wordt:

<span␣class='lookup-copy'␣onclick="return␣WORKSPACE.insertClipBoard('c:lvd:2378461')"␣alt='copy'>&#160;</span>

12.5.19. counter

Titel Teller in Brocade
Synopsis input wordt gezien als een Brocade teller. Indien string verschillend van leeg is, dan wordt tevens gekeken of deze teller bestaat (zoniet, dan wordt deze geïnitialiseerd met de waarde van string). input wort uiteindelijk getransformeerd naar de volgende waarde van de teller.
Categorie Brocade concept
Zie ook  
(null)  
(string)  

12.5.20. crlf

Titel CARRIAGE RETURN + LINE FEED
Synopsis Vervangt CARRIAGE RETURN gevolgd door LINE FEED door een string.
Categorie Stringbewerking
Zie ook  
(null) CARRIAGE RETURN, gevolgd door LINE FEED, wordt vervangen door de lege string
(string) De betreffende string

Voorbeeld 1

{AB {13|chr}{10|chr} CD | crlf}

wordt:

AB␣␣CD

Voorbeeld 2

{AB {13|chr}{10|chr} CD | crlf "<crlf>"}

wordt:

AB␣<crlf>␣CD

12.5.21. cutchar

Zie delchar, cutchar

12.5.22. cutword

Titel Verwijder substring
Synopsis Schrapt een substring uit input
Categorie Stringbewerking
Zie ook replace
(string) De substring. test is steeds true
(string, test) Indien test false is wordt enkel het eerste optreden van de substring geschrapt. Anders worden ze allemaal geschrapt.

Voorbeeld 1

{World, hello World | cutword: "World"}

wordt:

,␣hello␣

Voorbeeld 2

{World, hello World | cutword: "World" false}

wordt:

,␣hello␣World

12.5.23. date

Titel Datum
Synopsis

input kan 2 vormen aannemen:

  • bevat input een COLON, dan wordt er van uitgegaan dat input een tijdsperiode is. De datumaanduidingen worden dan ook in ISO-formaat getoond. Het eerste argument is dan de delimiter tussen YYYY, MM en DD. De default waarde is MINUS
  • bevat input geen COLON, dan wordt de input getoond als een datum/tijd aanduiding. het eerste argument moet dan “”, “h”, “m”, “s”, of “w” en geeft aan tot op welk niveau de display moet zijn (dag, uur, minuut, seconde of week). Het tweede argument is “d”, “m” of “y” en is een aanwijzing hoe input moet worden geïnterpreteerd (dag, maand of jaar).
Categorie Tijd en datum
Zie ook dati, time
(null)  
(string)  
(string, string)  

Voorbeeld 1

{63963:63973 | date | xml}

wordt:

2016-00-00&#x2012;2016-00-00

Voorbeeld 2

{63993,52891 | date}

wordt:

16.03.2016

Voorbeeld 3

{63993,52891 | date "h"}

wordt:

16.03.2016␣14

Voorbeeld 4

{63993,52891 | date "m"}

wordt:

16.03.2016␣14:41

Voorbeeld 5

{63993,52891 | date "s"}

wordt:

16.03.2016␣14:41:31

Voorbeeld 6

{63993,52891 | date "w"}

wordt:

16.03.2016␣(woe)

Voorbeeld 7

{63993,52891 | date "" "y"}

wordt:

00.00.2016

Voorbeeld 8

{63993,52891 | date "" "m"}

wordt:

00.03.2016

12.5.24. dati

Titel Datum/tijd
Synopsis Transformeert input naar een datum/tijd aanduiding. input is een DateTime uitdrukking.
Categorie Tijd en datum
Zie ook date
(null)  

Voorbeeld 1

{63963 | dati}

wordt:

15.02.2016

Voorbeeld 2

{63963, | dati}

wordt:

15.02.2016

Voorbeeld 3

{63963,57666 | dati}

wordt:

15.02.2016␣16:01:06

12.5.25. def

Titel Vervang leeg
Synopsis Indien input leeg is, kan input worden vervangen door een gegeven string
Zie ook empty
(string) Eventuele vervanger van input

Voorbeeld 1

{Hello|def "?"}

wordt:

Hello

Voorbeeld 2

{|def "?"}

wordt:

?

12.5.26. delchar, cutchar

Titel Schrap karakters
Synopsis Verwijdert uit input alle karakters uit een gegeven verzameling
Categorie Stringbewerking
Zie ook keepchar
(string) string is de verzameling van karakters.

Voorbeeld 1

{Hello World | delchar "olx"}

wordt:

He␣Wrd

Voorbeeld 2

{Hello World | delchar "o"}

wordt:

Hell␣Wrld

12.5.27. dict

Titel Vertaaltabel
Synopsis Transformeert input volgens een tabel.
Categorie Stringbewerking
Zie ook  
(string) Dit is JSON object. input wordt opgezocht in dit object en de corresponderende waarde wordt teruggegeven.
(string, string) Het tweede argument is een default waarde die wordt gebruikt indien input niet in het JSON object voorkomt.

Voorbeeld 1

{A | dict="{\"A\": \"a\", \"B\": \"b\"}"}

wordt:

a

Voorbeeld 2

[{C | dict="{\"A\": \"a\", \"B\": \"b\"}"}]

wordt:

[]

Voorbeeld 3

{E | dict="{\"A\": \"a\", \"B\": \"b\"}" "e"}

wordt:

e

Voorbeeld 4

{E | dict=`{"A": "a", "B": "b"}` `e`}

wordt:

e

Voorbeeld 5

{2 | dict="[\"A\",\"B\",\"C\"]"}

wordt:

B

Voorbeeld 6

{2 | dict=`["A","B","C"]`}

wordt:

B

12.5.28. div

Titel Maak een div
Synopsis input wordt de tekst van een <div> element. De codering naar XML gebeurt niet automatisch.
Categorie Web
Zie ook span, elm
(null)  
(string) JSON string met HTML attributen

Voorbeeld 1

{Hello World | div}

wordt:

<div>Hello␣World</div>

Voorbeeld 2

{Hello World | div `{"style": "color: red", "class": "title text"}`}

wordt:

<div␣class='title␣text'␣style='color:␣red'>Hello␣World</div>

12.5.29. dloi

Titel Verwerk een d-LOI
Synopsis

input wordt gezien als een d-LOI en omgevormd tot een hyperlink. De tekst van de hyperlink wordt als volgt bepaald:

  • indien string bestaat, dan wordt string de tekst
  • zoniet, de titel wordt opgehaald bij de d-LOI.
  • zoniet, de URL (opgehaald uit de d-LOI) van het document wordt gebruikt.
Categorie Brocade concept
Zie ook docman
(null)  
(string[b→xml]) Titel bij de dloi
(string[b→xml], test) Indien test, dan wordt de hyperlink aangevuld met een link naar de beheersomgeving van de d-LOI.
(string[b→xml], test, instruction)

instruction is een string,

  • indien deze titleonly bevat, dan wordt ENKEL de titel bij de d-loi, teruggegeven. Deze titel moet nog passend worden gecodeerd.
  • indien deze image bevat, dan wordt de titel ook in het alt attribuut gezet van de link
  • indien deze longdesc bevat, dan moet de titel van de d-loi een URL zijn. Deze titel komt dan in het longdesc attribuut van de link. Dit is enkel zinvol voor afbeeldingen.

Voorbeeld 1

{d:ua:209|dloi}

wordt:

<a␣target="_blank"␣href="/docman/docstore/31d0ff/0c63c9f87db2245b70ff9656f7d60aab927d79b2.csv">Hallo␣World!</a>

Voorbeeld 2

{d:ua:208|dloi "Bye Moon"}

wordt:

<a␣target="_blank"␣href="/docman/docstore/04e920/4b2c8a90099e48b8d8cb17d5228dc5348e395280.png">Bye␣Moon</a>

Voorbeeld 3

{d:ua:207|dloi "Bye Moon!" true}

wordt:

<a␣target="_blank"␣href="/docman/docstore/403f25/fc51ba9ea77cce41169cce3b0062313f914791aa.pup">Bye␣Moon!</a>␣<a␣target="_blank"␣href="/menu/docstoreinode/d:ua:207">[bewerk]</a>&#160;<span␣class='lookup-copy'␣data-copy='d:ua:207'␣onclick="return␣WORKSPACE.insertClipBoard(this.getAttribute('data-copy'))"␣alt='copy'>&#160;</span>

Voorbeeld 4

{d:ua:208|dloi "Bye Moon!" true "alt"}

wordt:

<img␣src="/docman/docstore/04e920/4b2c8a90099e48b8d8cb17d5228dc5348e395280.png"␣alt="Bye␣Moon!"␣/>

12.5.30. docman

Titel Verwerk een docmanid
Synopsis input wordt de tekst in een hyperlink die verwijst naar een docman-document.
Categorie Brocade concept
Zie ook dloi
(null) input moet het docmanid zijn
(string) string is het docmanid.

Voorbeeld 1

{Hello World | docman "/docman/abcd/hello.pdf"}

wordt:

<a␣target="_blank"␣href="/docman/abcd/hello.pdf">Hello␣World</a>

Voorbeeld 2

{/abcd/hello.pdf | docman}

wordt:

<a␣target="_blank"␣href="/docman/abcd/hello.pdf">/abcd/hello.pdf</a>

12.5.31. elapse

Titel Toon een tijdsverloop
Synopsis

Geeft de tijd aan, onder de vorm uren:minuten:seconden, die er verlopen is. input kan van de gedaante zijn:

  • getal: de verlopen tijd in seconden
  • begin-einde (begin en einde in een aantal seconden)
  • begin-einde (begin en einde in $H formaat)
Categorie Tijd en datum
Zie ook  
(null)  

Voorbeeld 1

{90100|elapse}

wordt:

25:01:40

Voorbeeld 2

{10-25|elapse}

wordt:

00:00:15

Voorbeeld 3

{63963,53803-63960,54803|elapse}

wordt:

71:43:20

12.5.32. elm

Titel Maak een HTML element
Synopsis Maakt van input de tekst van een HTML element. De codering naar XML gebeurt niet automatisch.
Categorie Web
Zie ook div
(string) De naam van het element
(string, string) JSON object met de HTML attributen

Voorbeeld 1

{Hello World | elm "div"}

wordt:

<div>Hello␣World</div>

Voorbeeld 2

{Hello World | elm `div` `{"style": "color: red", "class": "title text"}`}

wordt:

<div␣class='title␣text'␣style='color:␣red'>Hello␣World</div>

12.5.33. email

Titel Maak een e-mail link
Synopsis input is een e-mailadres. De codering naar XML gebeurt niet automatisch.
Categorie Web
Zie ook  
(null)  

Voorbeeld 1

{richard.philips\@gmail.com|email}

wordt:

<a␣href="mailto:richard.philips@gmail.com">richard.philips@gmail.com</a>

12.5.34. empty

Titel Maak leeg
Synopsis Zet, indien input enkel is opgebouwd uit karakters uit een gegeven verzameling, input op leeg
Categorie Stringbewerking
Zie ook  
(null) De verzameling van de karakters bestaat uit de WHITESPACE karakters.
(string) Dit is de verzameling met de gegeven karakters

Voorbeeld 1

A{12 | chr | empty}B

wordt:

AB

Voorbeeld 2

A{aaa | empty: "a"}B

wordt:

AB

Voorbeeld 2

{abc | empty: "a"}

wordt:

abc

12.5.35. enc

Titel Encodeer
Synopsis input wordt geëncodeerd volgens een gegeven codec
Categorie Codec
Zie ook xml, js, url
(codec) Codec

Voorbeeld 1

{Hello World| enc="hex"}

wordt:

48656c6c6f20576f726c64

Voorbeeld 2

${alpha| enc="xml"}

wordt:

&#x03B1;

12.5.36. eval

Titel Evalueer uitdrukking
Synopsis input wordt berekend alsof het een algemene uitdrukking was.
Categorie BTS
Zie ook math, boole, get
(none)  

Voorbeeld 1

{brocade | eval}

wordt:

Brocade

12.5.37. exec

Tijd Voer een instructie uit
Synopsis

input wordt geïnterpreteerd als een concretisering van het metatype templateexec. De corresponderende code wordt opgehaald en uitgevoerd.

De volgende gegevens staan ter beschikking:

  • RDlg: de taal waarin de template wordt geëvalueerd.
  • RDstore: de identifier die de verzameling van de geassocieerde templates aangeeft.
  • RDindex: het index nummer voor meervoudige sleutels
  • RDdef: de default waarde (kan ook niet gedefinieerd zijn)
  • RAkeys: de sleutelverzameling

De M code wordt uitgevoerd en kan eventueel de sleutelverzameling aanpassen.

Categorie BTS
Zie ook  
(null)  
(test) Indien test, dan wordt input op leeg gezet.
(test, string) Indien strings niet leeg is, dan wordt deze gebruikt als concretisering van het metatype templateexec in de plaats van input

Voorbeeld 1

{test | exec | after hello}

wordt:

testWorld

Voorbeeld 2

{test | exec "" true | after hello}

wordt:

World

Voorbeeld 3

{| exec "test" | after hello}

wordt:

World

12.5.38. get

Titel Haal een waarde op met eventuele default waarde
Synopsis input wordt berekend alsof het een algemene uitdrukking was. Er wordt wel een default waarde meegegeven.
Categorie BTS
Zie ook math, boole, eval
(null) De default is de lege string
(string) De nieuwe default waarde

Voorbeeld 1

[{unknown|get}]

wordt:

[]

Voorbeeld 2

{unknown|get "A"}

wordt:

A

12.5.39. goto

Titel Ga naar een plaats in de modifierketting
Synopsis* Gaat naar een punt in de modifierketting.
Categorie BTS
Zie ook goto modifier, label modifier
(test) Indien test, ga naar de modifier achter een label zonder argument (indien dit label bestaat)
(test, string) Indien test, ga naar de modifier achter een label met naam string (indien dit label bestaat)

Voorbeeld 1

{Hello World | goto true "skip" | after "s" | label "skip"}

wordt:

Hello␣World

Voorbeeld 2

{Hello World | goto true "skip" | after "s" | skip 1<2 | label "skip"}

wordt:

Hello␣Worlds

Voorbeeld 3

{Hello World | goto false "skip" | after "s" | label "skip"}

wordt:

Hello␣Worlds

12.5.40. hex

Titel Encodeer hexadecimaal
Synopsis De bytes van input worden omgezet in de hexadecimale waarde (kleine letters)
Categorie Codec
Zie ook  
(null)  
(test) indien test, dan zijn de hexadecimale waarden in hoofdletter

Voorbeeld 1

{Hello World| hex}

wordt:

48656c6c6f20576f726c64

Voorbeeld 2

{Hello World| hex true}

wordt:

48656C6C6F20576F726C64

12.5.41. hidden

Titel Maak een <INPUT type=”hidden”> element
Synopsis input wordt omgezet naar een <INPUT type=”hidden”> element
Categorie <FORM> element
Zie ook ‘Form’ modifiers
(null)  
(string) JSON string met de diverse attributen

Voorbeeld 1

{FDid_staff:rphilips | hidden}

wordt:

<input␣id='FDid_staff'␣name='FDid_staff'␣type='hidden'␣value='rphilips'␣/>

Voorbeeld 2

{FDid_greek:$alpha | hidden}

wordt:

<input␣id='FDid_greek'␣name='FDid_greek'␣type='hidden'␣value='�03B1�'␣/>

Voorbeeld 3

{FDid_greek:${alpha|xml} | hidden}

wordt:

<input␣id='FDid_greek'␣name='FDid_greek'␣type='hidden'␣value='&#x03B1;'␣/>

Voorbeeld 4

GT.M>k FDid s FDid("hello")="World"
{FDid_hello: | hidden}

wordt:

<input␣id='FDid_hello'␣name='FDid_hello'␣type='hidden'␣value=''␣/>

Voorbeeld 5

GT.M>k FDid s FDid("greek")=$C(171)_"03B1"_$C(187)
{FDid_greek | hidden}

wordt:

<input␣id='FDid_greek'␣name='FDid_greek'␣type='hidden'␣value='&#x03B1;'␣/>

12.5.42. href

Titel Maak een hyperlink
Synopsis input wordt omgezet naar een hyperlink met input als tekst (moet eventueel worden omgezet naar XML)
Categorie Web
Zie ook urlize
(string) URL
(string, string) URL en target

Voorbeeld 1

{World Wide Web Consortium | href "w3c.org"}

wordt:

<a␣href="w3c.org">World␣Wide␣Web␣Consortium</a>

Voorbeeld 2

{World Wide Web Consortium | href "w3c.org" "_blank"}

wordt:

<a␣href="w3c.org"␣target="_blank">World␣Wide␣Web␣Consortium</a>

12.5.43. id

Titel Maak een id attribuut
Synopsis input wordt behandeld als een id van een XML element en omgevormd naar een passend attribuut
Categorie Web
Zie ook idname
(null)  

Voorbeeld 1

{myID|id}

wordt:

id="myID"

12.5.44. idname

Titel Maak een id en een name attribuut
Synopsis input wordt behandeld als een id en een name van een XML element en omgevormd naar de passende attributen
Categorie Web
Zie ook id
(null)  

Voorbeeld 1

{myID|idname}

wordt:

name="myID"␣id="myID"

12.5.45. info

Titel Maak een informatie-attribuut
Synopsis input wordt geïnterpreteerd als een informatieveld. De modifier zorgt ervoor dat de juiste HTML wordt aangemaakt. input moet, indien nodig, naar XML worden geëncodeerd.
Categorie Brocade concept
Zie ook context
(null)  
(string[b→XML]) Wordt de titel van het informatieveld.

Voorbeeld 1

{|info}

wordt:

<img␣style='vertical-align:middle'␣src='r4_brocade_layout_url/ninfo.png'␣alt='?'␣/>

Voorbeeld 2

{Hallo |info "World"}

wordt:

<span␣class='brocade-info-font␣icon-info'␣data-title='World'␣data-info='Hallo'␣onclick='return␣WORKSPACE.showInfo(this)'␣>&#160;</span>

12.5.46. inputtext

Titel Maak een <INPUT type=”text”> HTML element
Synopsis input wordt omgevormd naar een <INPUT type=”text”> HTML element
Categorie <FORM> element
Zie ook ‘Form’ modifiers
(null)  
(string) JSON string met de diverse attributen Op deze wijze kan ook een loopobject worden toegevoegd. Voeg hiertoein de JSON string de attributen: - lookup - extra - context toe.
Default attr.
  • tabindex=2

  • subtype=”“. Ook mogelijk:

    • identifier: enkel cijfers en letters
    • integer: enkel cijfers
    • letter: enkel letters
    • lower: enkel kleine letters
    • lower1: enkel kleine letters en cijfers
    • upper: enkel hoofdletters
    • upper1: enkel hoofdletters en cijfers
    • money: geldbedrag
  • data-paste=”overwrite”

  • data-help=”“

  • onblur=”return WORKSPACE.blurTextElement(this);”

  • style=”width:64ex”

  • data-lookupref=”“

  • data-jump=”“

  • type=”text”

Voorbeeld 1

GT.M>k RAkeys s RAkeys("nr")=2

GT.M>s RAkeys("title")="Petite syntaxe de l'ancien fran"_$C(231)_"ais"

GT.M>s FDid(2,"ti")="Petite syntaxe de l'ancien fran"_$C(231)_"ais"
{FDid_%nr_ti | inputtext}

wordt:

<input␣data-paste='overwrite'␣id='FDid_2_ti'␣name='FDid_2_ti'␣onblur='return␣WORKSPACE.blurTextElement(this);'␣style='width:64ex'␣tabindex='2'␣type='text'␣value='Petite␣syntaxe␣de␣l&#x27;ancien␣fran&#xE7;ais'␣/>

In HTML:

<input
   data-paste='overwrite'
   id='FDid_2_ti'
   name='FDid_2_ti'
   onblur='return␣WORKSPACE.blurTextElement(this);'
   style='width:64ex'
   tabindex='2'
   type='text'
   value='Petite syntaxe de l&#x27;ancien fran&#xE7;ais' />

Voorbeeld 2

{FDid_%nr_ti: | inputtext}

wordt:

<input␣data-paste='overwrite'␣id='FDid_2_ti'␣name='FDid_2_ti'␣onblur='return␣WORKSPACE.blurTextElement(this);'␣style='width:64ex'␣tabindex='2'␣type='text'␣value=''␣/>

In HTML:

<input
   data-paste='overwrite'
   id='FDid_2_ti'
   name='FDid_2_ti'
   onblur='return WORKSPACE.blurTextElement(this);'
   style='width:64ex'
   tabindex='2'
   type='text'
   value='' />

Voorbeeld 3

{FDid_%nr_ti:${title|xml}| inputtext}

wordt:

<input␣data-paste='overwrite'␣id='FDid_2_ti'␣name='FDid_2_ti'␣onblur='return␣WORKSPACE.blurTextElement(this);'␣style='width:64ex'␣tabindex='2'␣type='text'␣value='Petite␣syntaxe␣de␣l&#x27;ancien␣fran&#xE7;ais'␣/>

In HTML:

<input
   data-paste='overwrite'
   id='FDid_2_ti'
   name='FDid_2_ti'
   onblur='return␣WORKSPACE.blurTextElement(this);'
   style='width:64ex'
   tabindex='2'
   type='text'
   value='Petite syntaxe de l&#x27;ancien fran&#xE7;ais' />

Voorbeeld 4

{FDid_%nr_euros:| inputtext `{"subtype": "money"}`}

wordt:

<input␣data-paste='overwrite'␣id='FDid_2_euros'␣name='FDid_2_euros'␣onblur='return␣WORKSPACE.blurTextElement(this);'␣onkeypress='return␣WORKSPACE.allowCharacters(event,"","m",this);'␣style='width:64ex'␣tabindex='2'␣type='text'␣value=''␣/>

In HTML:

<input
   data-paste='overwrite'
   id='FDid_2_euros'
   name='FDid_2_euros'
   onblur='return WORKSPACE.blurTextElement(this);'
   onkeypress='return␣WORKSPACE.allowCharacters(event,"","m",this);'
   style='width:64ex'
   tabindex='2'
   type='text'
   value='' />

12.5.47. int

Titel input wordt herleid tot een geheel getal
Synopsis input wordt herleid tot een geheel getal
Categorie Stringbewerking
Zie ook  
(null)  

Voorbeeld 1

{3M | int}

wordt:

3

Voorbeeld 2

{Hello World | int}

wordt:

0

Voorbeeld 3

{$e | int}

wordt:

2

12.5.48. join

Titel Stel meervoudige sleutel samen
Synopsis input wordt gezien als de naam van een meervoudige sleutel. output ontstaat door de waarden van de sleute - met een tussenliggende delimiter - samen te stellen.
Categorie Stringbewerking
Zie ook  
(string) Delimiter
(getal) Eerste index (indien negatief, dan wordt daar het aantal sleutels bij opgeteld)
(getal, getal) Tweede index (indien negatief, dan wordt daar het aantal sleutels bij opgeteld)

Voorbeeld 1

{planet | join ", " }

wordt:

Mercurius,␣Venus,␣Aarde,␣Mars,␣Jupiter,␣Saturnus,␣Uranus,␣Neptunus,␣Pluto

Voorbeeld 2

{planet | join ", " 2 -1}

wordt:

Venus,␣Aarde,␣Mars,␣Jupiter,␣Saturnus,␣Uranus,␣Neptunus

12.5.49. js

Titel Encodeer naar javascript
Synopsis input wordt omgezet naar een Javascript en HTML veilige string. Kan zowel tussen APOSTROPHE als tussen QUOTATION MARK worden geplaatst.
Categorie Codec
Zie ook enc
(null)  

Voorbeeld 1

{Hij zei: "Hello Word"| js}

wordt:

Hij␣zei:␣\u0022Hello␣Word\u0022

12.5.50. json

Titel MUMPS structuur naar JSON
Synopsis input wordt gezien als de naam van een MUMPS array en als JSON geëncodeerd.
Categorie Codec
Zie ook  
(null)  

Voorbeeld 1

GT.M>k RAset s RAset("a")="A",RAset("b")="B"
{|after "RAset" | json}

wordt:

{"a":"A","b":"B"}

12.5.51. keepchar

Titel Behoud karakters
Synopsis Laat in input enkel de karakters over die uit een gegeven verzameling komen
Categorie Stringbewerking
Zie ook delchar, cutchar
(string) De verzameling met de karakters die moeten worden behouden

Voorbeeld 1

{Hello World | keepchar "ol"}

wordt:

llool

Voorbeeld 2

{Hello World | keepchar "o"}

wordt:

oo

12.5.52. key

Titel Maak enkelvoudige sleutel aan
Synopsis* Voegt een enkelvoudige sleutel toe (of overschijft een bestaande sleutel)
Categorie BTS
Zie ook mmultike
(test, string) Indien de overwrite test false is, dan wordt de sleutel enkel op zijn nieuwe waarde gezet als hij nog niet bestaat string is de naam van de sleutel. De input wordt de waarde
(test, string, string) Indien de overwrite test false is, dan wordt de sleutel enkel op zijn nieuwe waarde gezet als hij nog niet bestaat string is de naam van de sleutel. Het tweede argument wordt de waarde

Voorbeeld 1

{|key true "k" "KEY"}$k

wordt:

KEY

Voorbeeld 2

{Hello World |key true "k"}$k

wordt:

Hello WorldHello World

Voorbeeld 3

{Hello World |key true "k" | rm}$k

wordt:

Hello World

Voorbeeld 4

{|key true "k" "KEY"|key false "k" "key"}$k

wordt:

KEY

Voorbeeld 5

{|key true "k" "KEY"|key true "k" "key"}$k

wordt:

key

12.5.53. label

Titel Plaats een label
Synopsis* Markeert een modifier binnen de modifierketting
Categorie BTS
Zie ook label modifier, goto modifier
(null) De labelnaam wordt leeg
(string) Dit argument evalueert tot de labelnaam

Voorbeeld 1

{Hello World | goto: "skipme" | after: "s" | label: "skipme"}

wordt:

Hello␣World

Voorbeeld 2

{Hello World | goto: "skipme" | after: "s" | skip: 1<2 | label: "skipme"}

wordt:

Hello␣Worlds

Voorbeeld 3

{Hello World | goto: "skipme" | after: "s" | skip: 1>2 | label: "skipme"}

wordt:

Hello␣World

12.5.54. lang

Titel Van Dialoogtaal naar taalcode
Synopsis input wordt gezien als een dialoog taal (een hoofdletter: ‘N’, ‘E’, ‘D’, ‘F’, ‘U’). input wordt geconverteerd naar de corresponderende ISO 639-2 code
categorie Brocade concept
Zie ook  
(null)  

Voorbeeld 1

{N | lang}

wordt:

dut

12.5.55. ljust

Titel Aligneer naar links
Synopsis input wordt rechts aangevuld indien input te kort is
Categorie Stringbewerking
Zie ook rjust, center
(getal) De minimale lengte voor input, het padding karakter string staat op SPACE
(getal, string) string is het padding karakter

Voorbeeld 1

{Hello | ljust: 3}

wordt:

Hello

Voorbeeld 2

{Hello | ljust: 8}

wordt:

Hello␣␣␣

Voorbeeld 3

{Hello | ljust: 8 "-"}

wordt:

Hello---

12.5.56. loiview

Titel Toon een LOI
Synopsis input is een LOI en wordt vervangen door een verwoording. De meta-informatie van de LOI geeft aan hoe dit moet gebeuren. Een goed voorbeeld is een o-LOI: deze wordt vervangen door zijn streepjescode.
Categorie Brocade concept
Zie ook short
(null)  
(string) Een extra hint voor de software.

Voorbeeld 1

{o:lvd:9|loiview "bc"}

wordt:

03020562630

12.5.57. lookup

Titel Brocade lookup
Synopsis

input wordt gezien als het doelwit van een lookup object en het corresponderende HTML wordt aangemaakt.

  • Het eerste argument is de naam van het lookup object
  • Het tweede argument is extra
  • Het derde argument is de context
Categorie Brocade concept
Zie ook textarea, inputtext
(string)  
(string, string)  
(string, string, string)  

Voorbeeld 1

{FDloi | lookup "bibrec"}

wordt:

<a␣href="#"␣onmouseover="LOOKUP.dropdownmenu(this,␣event,␣'lookupmenu1','FDloi','bibrec');"><span␣class="lookup">&#160;</span></a>

12.5.58. lower

Titel Naar kleine letters
Synopsis Vervangt in input hoofdletters door kleine letters
Categorie Stringbewerking
Zie ook upper
(null) Behandelt alle Unicode karakters
(test) Indien true, behandelt enkel ASCII karakters (default: false)

Voorbeeld 1

{Hello World | lower}

wordt:

hello␣world

12.5.59. lstrip

Titel Verwijder karakters aan het begin
Synopsis Verwijdert overtollige karakters aan het begin van de input
Categorie Stringbewerking
Zie ook rstrip, strip
(null) Whitespace aan het begin wordt weggehaald
(string) Argument somt de karakters op die worden verwijderd

Voorbeeld 1

{{  Hello World   }| lstrip}}

wordt:

Hello␣World␣␣␣

Voorbeeld 2

{{Hello World}| lstrip: "Held"}}

wordt:

o␣World

12.5.60. lutf8

Titel Codeer naar lutf8
Synopsis input wordt geëncodeerd naar lutf8
Categorie Codec
Zie ook  
(null)  

Voorbeeld 1

{233|chr|lutf8|hex}

wordt:

e9

12.5.61. markdown

Titel Toon Markdown in HTML
Synopsis input is een tekst die in Markdown (en in Brocade karakterset) is gedefinieerd. Deze tekst wordt in een webbrowser omgezet naar HTML
Categorie Web
Zie ook  
(null)  
(test) Indien true, dan wordt de omringende <p> … </p> verwijderd.

Voorbeeld 1

{a *star* is born | markdown}

wordt:

<script␣type='text/javascript'>document.write(unpmarked('a␣*star*␣is␣born'));</script>

Voorbeeld 2

{a *star* is born | markdown false}

wordt:

<script␣type='text/javascript'>document.write(marked('a␣*star*␣is␣born'));</script>

12.5.62. math

Titel Evalueer rekenkundige uitdrukking
Synopsis input wordt berekend alsof het een rekenkundige uitdrukking was.
Categorie BTS
Zie ook boole, mgenexp
(none)  

Voorbeeld 1

{1+2 | math}

wordt:

3

12.5.64. meta

Titel Verwerk metainformatie volgens een template
Synopsis* Gebrik de attributen van een meta concretisering als sleutels in een template
Categorie Brocade concept
Zie ook saymeta, scopemeta, typemeta
(string) string is een template en input wordt gezien als een mt-loi. De template wordt berekend op basis van de attributen van de mt-loi. Het resultaat wordt ondergebracht in input.

Voorbeeld 1

{mtmultikey`

Titel Definieer een meervoudige sleutel
Synopsis* Voegt een meervoudige sleutel toe (of overschijft een bestaande sleutel)
Categorie BTS
Zie ook key
(test, string) Indien de overwrite test false is, dan wordt de sleutel enkel op zijn nieuwe waarde gezet als hij nog niet bestaat string is de naam van de sleutel. De input wordt de waarde
(test, string, string) Indien de overwrite test false is, dan wordt de sleutel enkel op zijn nieuwe waarde gezet als hij nog niet bestaat string is de naam van de sleutel. Het tweede argument wordt de waarde

Voorbeeld 1

{|multikey true "k" "KEY1" | multikey true "k" "KEY2"}${k|? true 1 2}

wordt:

KEY1KEY2

Voorbeeld 2

{KEY1|multikey true "k"}{KEY2 | multikey true "k"}${k|? true 1 2}

wordt:

KEY1KEY2KEY1KEY2

12.5.65. name

Titel Maak een name attribuut
Synopsis Maakt van input een name attribuut in een HTML element
Categorie Web
Zie ook idname
(null)  

Voorbeeld 1

{myID|name}

wordt:

name="myID"

12.5.66. nbsp

Titel Spaties naar 160
Synopsis Vormt de spaties in input om naar karakter 160.
Categorie Web
Zie ook  
(null)  

Voorbeeld 1

{Hello World | nbsp | xml}

wordt:

Hello&#xA0;World

12.5.67. ng

Titel Verwerk als templateNG
Synopsis

Bij het werken met templates kan het zijn dat de ontwikkelaar heeft gekozen voor templates oude stijl (uit historische redenen). De gebruiker wil echter misschien wel een templateNG specificeren. Er zijn 2 mogelijkheden:

  • door een sleutel __templateng__ te specifieren.
  • door de template te laten beginnen met {|ng}

In templateNG heeft deze modifier dezelfde werking als rm

(string) Het is mogelijk een argument op te geven: dit wordt dan de default waarde voor ontbrekende sleutels
Categorie BTS
Zie ook ng
(null) Call code voor de menu-ingang

Voorbeeld 1

A{Titelbeschrijven | ng}B

wordt:

AB

Voorbeeld 2

+{Hello | ng "X"}$unknown+

wordt:

+X+

12.5.68. num

Titel Toon getallen
Synopsis Formateert een numerieke input voor display. Deze modifier heeft enkel effect indien input begint met cijfers of een ‘.’, eventueel gevolgd door een spatie en willekeurige data: de suffix. lc-decimalseparator
Categorie Stringbewerking
Zie ook  
(null) Het getal wordt getoond op 2 cijfers na de COMMA (en, indien deze bestaat, gevolgd door zijn suffix)
(getal) test wordt op true gezet
(getal, test) Indien input (of althans het gedeelte voor de SPACE) geheel is en test is false, dan wordt input niet veranderd. In alle andere gevallen stelt getal het aantal cijfers voor die worden getoond (de suffix, indien deze bestaat, wordt samen met SPACE toegevoegd)

Voorbeeld 1

{Hello | num}

wordt:

Hello

Voorbeeld 2

{3.126 | num}

wordt:

3,13

Voorbeeld 3

{3.1 | num}

wordt:

3,10

Voorbeeld 4

{3 | num}

wordt:

3,00

Voorbeeld 5

{2 EUR | num 4}

wordt:

2,0000␣EUR

Voorbeeld 6

{2 EUR | num 4 false}

wordt:

2␣EUR

Voorbeeld 7

{2.7836 EUR | num 3 true}

wordt:

2,784␣EUR

Voorbeeld 8

{2.7836 EUR | num 3 false}

wordt:

2,784␣EUR

Voorbeeld 9

{2.7836 EUR | num 3}

wordt:

2,784␣EUR

12.5.69. option

Titel Maak een <OPTION> HTML element
Synopsis input wordt omgezet naar een <OPTION> element. Er moet wel reeds een <SELECT> element met dezelfde naam bestaan.
Categorie <FORM> element
Zie ook ‘Form’ modifiers, select
(none)  
(string) JSON string met de diverse attributen. Het data-say attribuut is verplicht! Dit element geeft de specifieke verwoording voor dit option element. BTS doet de omvorming naar XML
Default attr.
  • data-help=”“
Andere attr.
  • data-say: geef de verwoording van de value

Voorbeeld 1

{FDid_lg:N | select}
{FDid_lg:N | option `{"say": "Nederlands"}`}
{FDid_lg:E | option `{"say": "Engels"}`}
{FDid_lg:F | option `{"say": "Frans"}`}
{FDid_lg | select}

wordt:

<select␣name='s1'␣onchange='this.form["FDid_lg"]=this.value;␣return␣false;'>
<option␣value='N'␣checked='checked'>Nederlands</option>
<option␣value='E'>Engels</option>
<option␣value='F'>Frans</option>
</select>
<input␣type='hidden'␣name='FDid_lg'␣value='N'␣/>

In HTML:

<select
   name='s1'
   onchange='this.form["FDid_lg"]=this.value; return false;'>
   <option
      value='N'
      checked='checked'>Nederlands</option>
   <option
      value='E'>Engels</option>
   <option
      value='F'>Frans</option>
</select>
<input type='hidden' name='FDid_lg' value='N' />

Voorbeeld 2

{FDid_lg:X | select `{"say": "Onbekend"}`}
{FDid_lg:N | option `{"say": "Nederlands"}`}
{FDid_lg:E | option `{"say": "Engels"}`}
{FDid_lg:F | option `{"say": "Frans"}`}
{FDid_lg | select}

wordt:

<select␣name='s1'␣onchange='this.form["FDid_lg"]=this.value;␣return␣false;'>
<option␣value='N'>Nederlands</option>
<option␣value='E'>Engels</option>
<option␣value='F'>Frans</option>
<option␣value='X'␣checked='checked'␣/><i>Onbekend</i></option>
</select>
<input␣type='hidden'␣name='FDid_lg'␣value='X'␣/>

In HTML:

<select
   name='s1'
   onchange='this.form["FDid_lg"]=this.value; return false;'>
   <option
      value='N'>Nederlands</option>
   <option
      value='E'>Engels</option>
   <option
      value='F'>Frans</option>
   <option
      value='X'
      checked='checked' /><em>Onbekend</em></option>
</select>
<input type='hidden' name='FDid_lg' value='N' />

12.5.70. ord

Titel Toon code point
Synopsis Enkel het eerste karakter van input wordt behouden en dit karakter wordt omgevormd naar het decimale code point binnen Unicode. Lege string wordt omgevormd naar -1
Categorie Stringbewerking
Zie ook chr
(null) Het eerste character van input wordt omgevormd naar het decimale code point binnen Unicode
(string) Het eerste character van string wordt omgevormd naar het decimale code point binnen Unicode

Voorbeeld 1

{AB| ord}

wordt:

65

Voorbeeld 2

{| ord}

wordt:

-1

Voorbeeld 3

{Hello | ord: "AB"}

wordt:

65

12.5.71. partition

Titel Partition string
Synopsis input wordt in 3 delen gesplitst op basis van een delimiter (te beginnen vanaf links) Deze delen worden genummerd met 1, 2, en 3 De andere parameters geven dan aan hoe op basis van deze nummers input terug wordt samengesteld.
Categorie Stringbewerking
Zie ook mrpartiti
(string, getal) string is de delimiter. Getal geeft het deel aan dat moet overblijven
(string, getal1, getal2) string is de delimiter. Getal1 en getal2 geeft de delen aan die moet overblijven
(string, getal1, getal2, getal3) string is de delimiter. Getal1, getal2 en getal3 geeft de delen aan die moet overblijven

Voorbeeld 1

{Hello | partition: "l" 3}

wordt:

lo

Voorbeeld 2

{Hello | partition: "l" 3 1}

wordt:

loHe

Voorbeeld 3

{Hello | partition: "l" 1 5}

wordt:

He

12.5.72. pbytes

Titel Prefix met bytes
Synopsis Plaatst voor input een string waarvan de code points worden opgesomd.
Categorie Stringbewerking
Zie ook sbytes
(null) string wordt op 10,13 gezet.
(string) De string bevat de code punten gescheiden door een COMMA
(string, codec) De toegevoegde string kan nog worden omgevormd door de codec

Voorbeeld 1

{Hello World | pbytes: "65,66"}

wordt:

ABHello␣World

12.5.73. piece

Titel Splits op delimiter
Synopsis Splitst input op basis van een delimiter in velden en herleidt input tot een opeenvolging van deze velden (met behoud van de delimiter indien meerdere velden). Indien een getal negatief is, wordt bij dit getal 1+aantal maal dat de delimiter voorkomt in input bijgeteld
Categorie Stringbewerking
Zie ook  
(string, getal) string is de delimiter. getal is de index van het eerste veld. Alle velden met een gelijke of hogere index worden opgenomen.
(string, getal, getal) Zowel eerste index als laatste index zijn opgegeven.

Voorbeeld 1

{Hello World | piece: "l" 2 3}

wordt:

lo␣Wor

Voorbeeld 2

{Hello World | piece: "l" 3}

wordt:

o␣World

Voorbeeld 3

{Hello World | piece: "l" -2 -1}

wordt:

lo␣Wor

12.5.74. poor

Titel Vervang een string zoals bij indexen voor een OPAC
Synopsis De zoekterm in een publikescatalogus wordt, qua typografie, verarmd (kleine letters naar hoofdletter, punctuaties worden soms weggelaten)
Categorie Stringbewerking
Zie ook

Voorbeeld 1

{Hello Anne-Marie, how are you?|poor}

wordt:

HELLO␣ANNE␣MARIE␣HOW␣ARE␣YOU

12.5.75. py

Titel Codeer naar Python
Synopsis Vormt input om naar de inhoud van een Python string. Kan tussen zowel tussen APOSTROPHE als tussen QUOTATION MARK worden geplaatst.
Categorie Codec
Zie ook  
(null)  

Voorbeeld 1

{Hij zei: "Hello Word"| py}

wordt:

Hij␣zei:␣\x22Hello␣Word\x22

12.5.76. radio

Titel Maak een <INPUT type=”radio”> element
Synopsis input wordt omgezet naar een <INPUT type=”radio”> element.
Categorie <FORM> element
Zie ook ‘Form’ modifiers
(string) JSON string met de diverse attributen. Het data-on attribuut is verplicht! Dit element geeft de specifieke waarde (value) bij dit radio element
Default attr.
  • data-help=”“
  • style=”vertical-align:middle”

Voorbeeld 1

{FDid_choice:A | radio `{"data-on":"A"}`}
{FDid_choice:A | radio `{"data-on":"B"}`}
{FDid_choice:A | radio `{"data-on":"C"}`}

wordt:

<input␣type='hidden'␣name='FDid_choice'␣value='A'␣/><input␣checked='checked'␣style='vertical-align:middle'␣type='radio'␣value='A'␣name='r1'␣onchange='var␣h=this.form["FDid_choice"];var␣w=this.value;var␣v=h.value;h.value=w;return␣false'␣/>
<input␣style='vertical-align:middle'␣type='radio'␣value='B'␣name='r1'␣onchange='var␣h=this.form["FDid_choice"];var␣w=this.value;var␣v=h.value;h.value=w;return␣false'␣/>
<input␣style='vertical-align:middle'␣type='radio'␣value='C'␣name='r1'␣onchange='var␣h=this.form["FDid_choice"];var␣w=this.value;var␣v=h.value;h.value=w;return␣false'␣/>

In HTML:

<input
   type='hidden'
   name='FDid_choice'
   value='A'
   />
   <input
      checked='checked'
      style='vertical-align:middle'
      type='radio'
      value='A'
      name='r1'
      onchange='var␣h=this.form["FDid_choice"];var␣w=this.value;var␣v=h.value;h.value=w;return␣false'␣/>
   <input
      style='vertical-align:middle'
      type='radio'
      value='B'
      name='r1'
      onchange='var h=this.form["FDid_choice"];var w=this.value;var v=h.value;h.value=w;return false' />
   <input
      style='vertical-align:middle'
      type='radio'
      value='C'
      name='r1'
      onchange='var h=this.form["FDid_choice"];var w=this.value;var v=h.value;h.value=w;return false' />

Voorbeeld 2

GT.M>k FDid s FDid("choice")="A"
{FDid_choice | radio `{"data-on":"A"}`}
{FDid_choice | radio `{"data-on":"B"}`}
{FDid_choice | radio `{"data-on":"C"}`}

wordt:

<input␣type='hidden'␣name='FDid_choice'␣value='A'␣/><input␣checked='checked'␣style='vertical-align:middle'␣type='radio'␣value='A'␣name='r1'␣onchange='var␣h=this.form["FDid_choice"];var␣w=this.value;var␣v=h.value;h.value=w;return␣false'␣/>
<input␣style='vertical-align:middle'␣type='radio'␣value='B'␣name='r1'␣onchange='var␣h=this.form["FDid_choice"];var␣w=this.value;var␣v=h.value;h.value=w;return␣false'␣/>
<input␣style='vertical-align:middle'␣type='radio'␣value='C'␣name='r1'␣onchange='var␣h=this.form["FDid_choice"];var␣w=this.value;var␣v=h.value;h.value=w;return␣false'␣/>
<input
   type='hidden'
   name='FDid_choice'
   value='A' />
   <input
      checked='checked'
      style='vertical-align:middle'
      type='radio'
      value='A'
      name='r1'
      onchange='var h=this.form["FDid_choice"];var w=this.value;var v=h.value;h.value=w;return␣false' />
   <input
      style='vertical-align:middle'
      type='radio'
      value='B'
      name='r1'
      onchange='var h=this.form["FDid_choice"];var w=this.value;var v=h.value;h.value=w;return␣false' />
   <input
      style='vertical-align:middle'
      type='radio'
      value='C'
      name='r1'
      onchange='var h=this.form["FDid_choice"];var w=this.value;var v=h.value;h.value=w;return false' />

12.5.77. registry

Titel Registry waarden
Synopsis input wordt gezien als een registry waarde. input wordt omgezet naar de corresponderende waarde.
Categorie Brocade concept
Zie ook  
(null)  

Voorbeeld 1

{os-sep | registry}

wordt:

/

Voorbeeld 2

{os_sep | registry}

wordt:

/

Voorbeeld 3

{r4_os_sep | registry}

wordt:

/

12.5.78. replace

Titel Vervang strings
Synopsis Vervangt in input een string door een andere string. Standaard wordt elk voorkomen van de string vervangen.
Categorie Stringbewerking
Zie ook  
(string) string is de gezochte string. De vervangende string is leeg.
(string, string) Eerste string is de gezochte string, tweede string is de vervanger
(string, string, test) Indien test false is, wordt enkel het eerste voorkomen van string vervangen. Indien test true is, wordt elk voorkomen van string vervangen. true is de default waarde.

Voorbeeld 1

{Hello World | replace: "ll" "L2"}

wordt:

HeL2o␣World

Voorbeeld 2

{Hello World | replace: "o" "a"}

wordt:

Hella␣Warld

Voorbeeld 3

{Hello World | replace: "l" ""}

wordt:

Heo␣Word

Voorbeeld 4

{Hello World | replace: "l" "L" false}

wordt:

HeLlo␣World

12.5.79. rjust

Titel Aligneer rechts
Synopsis input wordt links aangevuld indien input te kort is
Categorie Stringbewerking
Zie ook ljust, center
(getal) De minimale lengte voor input, het padding karakter string staat op SPACE
(getal, string) string is het padding karakter

Voorbeeld 1

{Hello | rjust: 3}

wordt:

Hello

Voorbeeld 2

{Hello | rjust: 8}

wordt:

␣␣␣Hello

Voorbeeld 3

{Hello | rjust: 8 "-"}

wordt:

---Hello

12.5.80. rpartition

Titel R-partition string
Synopsis input wordt in 3 delen gesplitst op basis van een delimiter (te beginnen vanaf rechts) Deze delen worden genummerd met 1, 2, en 3 De andere parameters geven dan aan hoe op basis van deze nummers input terug wordt samengesteld.
Categorie Stringbewerking
Zie ook partition
(string, getal) string is de delimiter. Getal geeft het deel aan dat moet overblijven
(string, getal1, getal2) string is de delimiter. Getal1 en getal2 geeft de delen aan die moet overblijven
(string, getal1, getal2, getal3) string is de delimiter. Getal1, getal2 en getal3 geeft de delen aan die moet overblijven

Voorbeeld 1

{Hello | rpartition: "l" 3}

wordt:

o

Voorbeeld 2

{Hello | rpartition: "l" 3 1}

wordt:

oHel

Voorbeeld 3

{Hello | rpartition: "l" 1 5}

wordt:

Hel

12.5.81. rm, delete

Titel Verwijder
Synopsis Zet input op leeg.
Categorie BTS
Zie ook stay
(null)  
(test) Enkel indien true, wordt de modifier uitgevoerd.

Voorbeeld 1

{Hello World | rm}

wordt:


Voorbeeld 2

{Hello World | rm false}

wordt:

Hello␣World

Voorbeeld 3

{Hello World | rm true}

wordt:


12.5.82. round

Titel Rond af
Synopsis Rond input af naar een gegeven aantal cijfers.
Zie ook int
(null) Werkt net zoals int
(getal) Geeft het aantal beduidende cijfers.

Voorbeeld 1

{3.56 | round}

wordt:

4

Voorbeeld 2

{3.56 | round: 1}

wordt:

3.6

Voorbeeld 3

{3.56 | round: 2}

wordt:

3.56

Voorbeeld 4

{3.56 | round: 3}

wordt:

3.560

12.5.83. rss

Titel RSS feeds
Synopsis input wordt gezien als de link naar een RSS feed en wordt omgezet naar een hyperlink met passend icoon.
Categorie Web
Zie ook  
(null)  
(test) Indien true, dan is input een verwijzing naar een docmanid.

Voorbeeld 1

{http:\/\/anet.be/rss/catfeed|rss}

wordt:

<a␣href="http://anet.be/rss/catfeed"␣target="rssscreen"><img␣src="/brocade/layout/rss-icon.gif"␣border="0"></a>

Voorbeeld 2

{/docman/catfeed|rss}

wordt:

<a␣href="/docman/catfeed"␣target="rssscreen"><img␣src="/brocade/layout/rss-icon.gif"␣border="0"></a>

Voorbeeld 3

{/catfeed|rss true}

wordt:

<a␣href="/docman/catfeed"␣target="rssscreen"><img␣src="/brocade/layout/rss-icon.gif"␣border="0"></a>

12.5.84. rstrip

Titel Verwijder karakters achteraan
Synopsis Verwijdert overtollige karakters aan het einde van de input
Categorie Stringbewerking
Zie ook lstrip, strip
(null) Whitespace aan het einde wordt weggehaald
(string) Argument somt de karakters op die worden verwijderd

Voorbeeld 1

{{  Hello World   }| rstrip}}

wordt:

␣␣Hello␣World

Voorbeeld 2

{{Hello World}| rstrip: "Held"}}

wordt:

Hello␣Wor

12.5.85. saymeta

Titel Verwoord meta
Synopsis input wordt gezien als een Brocade mt-LOI en in de passende taal verwoord.
Categorie Brocade concept
Zie ook scopemeta, mtypemet`, meta
(null) input is van de gedaante mt:type:metaid
(string) Indien input niet van het type mt:type:metaid is, dan wordt input gebruikt als metaid en string is dan het type van de mt-LOI

Voorbeeld 1

{mt:digisys:boeken | saymeta | lower}

wordt:

testplatform␣voor␣boeken

Voorbeeld 2

{boeken | saymeta "digisys" | lower}

wordt:

testplatform␣voor␣boeken

12.5.86. sbytes

Titel Suffix bytes
Synopsis Plaatst na input een string waarvan de code points worden opgesomd.
Zie ook pbytes
(null) string wordt op 10,13 gezet.
(string) De string bevat de code punten gescheiden door een COMMA
(string, codec) De toegevoegde string kan nog worden omgevormd door de codec

Voorbeeld 1

{Hello World | sbytes: "65,66"}

wordt:

Hello␣WorldAB

12.5.87. scope

Titel Verwoord scopes
Synopsis input wordt gezien als een tekstfragment en omgezet in de verwoording van de scope
Categorie Brocade concept
Zie ook text
(null) Indien het tekstfragment niet bestaat, dan wordt in debug mode een aanduiding van fout geplaatst. Anders wordt de lege string teruggeven.
(string) Indien het tekstfragment niet bestaat, dan wordt in debug mode een aanduiding van fout geplaatst. Anders wordt deze string teruggeven.

Voorbeeld 1

{templatetest.first.scope|scope}

wordt:

Eerste␣Scope

Voorbeeld 2

{templatetest.first1.scope| exec "debugoff" false |scope "A"}

wordt:

A

Voorbeeld 3

{templatetest.first1.scope| exec "debugon" false |scope "A"}

wordt:

[N?scope:templatetest.first1]

12.5.88. scopemeta

Titel Verwoord een scope uit een meta object
Synopsis input wordt gezien als een Brocade mt-LOI en wordt vervangen door de scope in de passende taal.
Categorie Brocade concept
Zie ook saymeta, typemeta, :ref:`mscopeme, meta
(null) input is van de gedaante mt:type:metaid
(string) Indien input niet van het type mt:type:metaid is, dan wordt input gebruikt als metaid en string is dan het type van de mt-LOI
(string, string) De tweede string is een eventuele defaultwaarde

Voorbeeld 1

{mt:digisys:boeken | scopemeta | lower}

wordt:

[n?scope:metadigisys.cgboeken]

Voorbeeld 2

{boeken | scopemeta "digisys" | lower}

wordt:

[n?scope:metadigisys.cgboeken]

Voorbeeld 3

{mt:digisys:boeken | scopemeta "" "BOEKEN"| lower}

wordt:

boeken

12.5.89. select

Titel Maak een <SELECT> HTML element
Synopsis input wordt omgezet naar een <SELECT> element. De eerste keer dat de modifier wordt aangeboden met een gegeven naam (name attribuut) wordt het element ‘geopend’. De volgende keer wordt het afgesloten.
Categorie <FORM> element
Zie ook ‘Form’ modifiers, option
(none)  
(string) JSON string met de diverse attributen.
Default attr.
  • data-help=”“
Andere attr.
  • data-say: geef de verwoording van de value

Voorbeeld 1

{FDid_lg:N | select}

wordt:

<select␣name='s1'␣onchange='this.form["FDid_lg"]=this.value;␣return␣false;'>

In HTML:

<select
   name='s1'
   onchange='this.form["FDid_lg"]=this.value; return false;'>

12.5.90. setdefault

Titel Zet default waarde
Synopsis* Verandert de default waarde. Zonder argument wordt de default waarde vernietigd.
Categorie BTS
Zie ook  
(null) Vernietigt de default waarde
(string) string wordt de nieuwe default waarde

Voorbeeld 1

{| setdefault: 13}$unknown

wordt:

13

12.5.91. short

Titel Korte verwoording van LOI
Synopsis input wordt gezien als een LOI en omgezet naar een korte uitdrukking (volgens de meta-informatie van het LOI type)
Categorie Brocade concept
Zie ook loiview
(null)  
(string) Extra hint die kan worden meegegeven.

Voorbeeld 1

{c:lvd:3 | short}

wordt:

Readings␣on␣economic␣sociology␣**␣Englewood␣Cliffs,␣N.J.,␣1965

12.5.93. span

Titel Maak span element
Synopsis
input wordt de tekst van een <span> element. De codering naar XML
gebeurt niet automatisch.
Categorie Web
Zie ook div, elm
(null)  
(string) JSON string met HTML attributen

Voorbeeld 1

{Hello World | span}

wordt:

<span>Hello␣World</span>

Voorbeeld 2

{Hello World | span `{"style": "color: red", "class": "title text"}`}

wordt:

<span␣class='title␣text'␣style='color:␣red'>Hello␣World</span>

12.5.94. staff

Titel Maak een verwijzing naar personeelslid
Synopsis input wordt gezien als een userid van een medewerker. input wordt omgezet naar een HTML element met een verwoording (en een eventuele link naar het mailadres).
Categorie Brocade concept
Zie ook  
(null)  

Voorbeeld 1

{rphilips|staff}

wordt:

<a␣href="mailto:richard.philips@uantwerpen.be">Richard␣Philips</a>

12.5.95. stay

Titel Behoud input
Synopsis Zet input niet op leeg.
Categorie BTS
Zie ook rm, delete
(null)  
(test) Indien false, de input wordt wel op leeg gezet.

Voorbeeld 1

{Hello World | stay}

wordt:

Hello␣World

Voorbeeld 2

{Hello World | stay false}

wordt:


Voorbeeld 3

{Hello World | stay true}

wordt:

Hello␣World

12.5.96. stop

Zie break, stop

12.5.97. strip

Titel Verwijder vooraan en achteraan
Synopsis Verwijdert overtollige karakters aan het begin en einde van de input
Categorie Stringbewerking
Zie ook rstrip, lstrip
(null) Whitespace aan het begin en einde wordt weggehaald
(string) Argument somt de karakters op die worden verwijderd

Voorbeeld 1:

{  Hello World   | strip}

wordt:

Hello␣World

Voorbeeld 2:

{Hello World| strip "Held"}

wordt:

o␣Wor

12.5.98. style

Titel Maak een style attribuut
Synopsis input wordt omgevormd tot een HTML style attribuut
Categorie Web
Zie ook class
(null)  

Voorbeeld 1

{myID|style}

wordt:

style="myID"

12.5.99. substr

Titel Substring
Synopsis Vervangt input door een substring. De getallen zijn 1-gebaseerd. Indien de getallen negatief zijn, wordt er de lengte bij opgeteld.
Categorie Stringbewerking
Zie ook  
(getal) Dit getal duidt de positie aan van de eerste byte van input Alle verdere karakters van input worden geselecteerd
(getal, getal) Geven begin- en eindpunt van eerste en laatste byte.

Voorbeeld 1

{Hello World | substr 1 5}

wordt:

Hello

Voorbeeld 2

{Hello World | substr 3}

wordt:

llo␣World

Voorbeeld 3

{Hello World | substr: -2 -1}

wordt:

rl

12.5.100. td

Titel Maak een td element
Synopsis input wordt de tekst van een <div> element. De codering naar XML gebeurt niet automatisch.
Categorie Web
Zie ook  
(null)  
(string) JSON string met HTML attributen

Voorbeeld 1

{Hello World | td}

wordt:

<td>Hello␣World</td>

Voorbeeld 2

{Hello World | td `{"style": "color: red", "class": "title text"}`}

wordt:

<td␣class='title␣text'␣style='color:␣red'>Hello␣World</td>

12.5.101. template

Titel Verwerk als template
Synopsis input wordt geïnterpreteerd als een template en uitgevoerd onder dezelfde voorwaarden als de gegeven template.
Categorie BTS
Zie ook  
(null)  

Voorbeeld 1

$percent

wordt:

%

Voorbeeld 2

\$percent

wordt:

$percent

Voorbeeld 3

{\$percent|template}

wordt:

%

12.5.102. text

Titel verwerk als tekstfragment
Synopsis input wordt gezien als een tekstfragment en omgezet in de verwoording
Categorie Brocade concept
Zie ook scope
(null) Indien het tekstfragment niet bestaat, dan wordt in debug mode een aanduiding van fout geplaatst. Anders wordt de lege string teruggeven.
(string) Indien het tekstfragment niet bestaat, dan wordt in debug mode een aanduiding van fout geplaatst. Anders wordt deze string teruggeven.

Voorbeeld 1

{templatetest.first|text}

wordt:

Eerst

Voorbeeld 2

{templatetestfirst|text}

wordt:

Eerste␣test

Voorbeeld 3

{templatetest.first1|exec false "debugoff" | text "A"}

wordt:

A

Voorbeeld 4

{templatetest.first1|exec false "debugon" | text "A"}

wordt:

[N?say:templatetest.first1]

12.5.103. textarea

Titel Maak een <TEXTAREA> element aan
Synopsis input wordt omgevormd naar een <TEXTAREA> element
Categorie <FORM> element
Zie ook ‘Form’ modifiers
(null)  
(string) JSON string met de diverse attributen Op deze wijze kan ook een loopobject worden toegevoegd. Voeg hiertoein de JSON string de attributen: - lookup - extra - context toe.
Default attr.
  • tabindex=2
  • wrap=soft
  • data-paste=”“
  • data-help=”“
  • onblur=”return WORKSPACE.blurTextElement(this);”
  • rows=4
  • style=”width:64ex”
  • data-lookupref=”“

Voorbeeld 1

GT.M>k RAkeys s RAkeys("nr")=2

GT.M>s RAkeys("title")="Petite syntaxe de l'ancien fran"_$C(231)_"ais"

GT.M>s FDid(2,"ti")="Petite syntaxe de l'ancien fran"_$C(231)_"ais"
{FDid_%nr_ti | textarea}

wordt:

<textarea␣id='FDid_2_ti'␣name='FDid_2_ti'␣onblur='return␣WORKSPACE.blurTextElement(this);'␣rows='4'␣style='width:64ex'␣tabindex='2'␣wrap='soft'>Petite␣syntaxe␣de␣l&#x27;ancien␣fran&#xE7;ais</textarea>

In HTML:

<textarea
   id='FDid_2_ti'
   name='FDid_2_ti'
   onblur='return WORKSPACE.blurTextElement(this);'
   rows='4'
   style='width:64ex'
   tabindex='2'
   wrap='soft'>Petite syntaxe de l'ancien fran&#xE7;ais</textarea>

Voorbeeld 2

{FDid_%nr_ti: | textarea}

wordt:

<textarea␣id='FDid_2_ti'␣name='FDid_2_ti'␣onblur='return␣WORKSPACE.blurTextElement(this);'␣rows='4'␣style='width:64ex'␣tabindex='2'␣wrap='soft'></textarea>

In HTML:

<textarea
   id='FDid_2_ti'
   name='FDid_2_ti'
   onblur='return WORKSPACE.blurTextElement(this);'
   rows='4'
   style='width:64ex'
   tabindex='2'
   wrap='soft'></textarea>

Voorbeeld 3

{FDid_%nr_ti:${title|xml}| textarea}

wordt:

<textarea␣id='FDid_2_ti'␣name='FDid_2_ti'␣onblur='return␣WORKSPACE.blurTextElement(this);'␣rows='4'␣style='width:64ex'␣tabindex='2'␣wrap='soft'>Petite␣syntaxe␣de␣l&#x27;ancien␣fran&#xE7;ais</textarea>

In HTML:

<textarea
   id='FDid_2_ti'
   name='FDid_2_ti'
   onblur='return WORKSPACE.blurTextElement(this);'
   rows='4'
   style='width:64ex'
   tabindex='2'
   wrap='soft'>Petite syntaxe de l&#x27;ancien fran&#xE7;ais</textarea>

Voorbeeld 4

{FDid_%nr_ti:${title|xml}| textarea `{"rows":10}`}

wordt:

<textarea␣id='FDid_2_ti'␣name='FDid_2_ti'␣onblur='return␣WORKSPACE.blurTextElement(this);'␣rows='10'␣style='width:64ex'␣tabindex='2'␣wrap='soft'>Petite␣syntaxe␣de␣l&#x27;ancien␣fran&#xE7;ais</textarea>

In HTML:

<textarea
   id='FDid_2_ti'
   name='FDid_2_ti'
   onblur='return WORKSPACE.blurTextElement(this);'
   rows='10'
   style='width:64ex'
   tabindex='2'
   wrap='soft'>Petite syntaxe de l&#x27;ancien fran&#xE7;ais</textarea>

Voorbeeld 5

{FDcloi: | textarea `{"lookup":"bibrec"}`}

wordt:

<textarea␣id='FDcloi'␣name='FDcloi'␣onblur='return␣WORKSPACE.blurTextElement(this);'␣rows='4'␣style='width:64ex'␣tabindex='2'␣wrap='soft'></textarea>&#160;<a␣href="#"␣onmouseover="LOOKUP.dropdownmenu(this,␣event,␣'lookupmenu1','FDcloi','bibrec');"><span␣class="lookup">&#160;</span></a>

12.5.104. textfragment

Titel Verwijzing naar tekstfragment
Synopsis input wordt gezien als de naam van een tekstfragment. Deze naam wordt omgevormd naar een link naar de Brocadetoepassing die dit tekstfragment beheert.
Categorie Brocade concept
Zie ook  
(null)  
(string) Levert de waarde “edit” of “view” op en zorgt ervoor of de link het tekstfragment kan editeren.

Voorbeeld 1

{templatetest.first|textfragment}

wordt:

<a␣title="templatetest.first"␣target="_blank"␣href="/menu/text/templatetest.first">Eerst&#160;<span␣class="icon-quill"␣style="font-size:␣1.1em">&#160;</span></a>

12.5.105. time

Titel Toon tijd
Synopsis Toont input (een DateTime uitdrukking) tot op de seconde nauwkeurig
Categorie Tijd en datum
Zie ook date, dati, elapse
(null)  

Voorbeeld 1

{63963,58417 | time}

wordt:

15.02.2016␣16:13:37

12.5.106. toc

Titel Verwerk afkortingen
Synopsis Er wordt gekeken of input Brocade afkortingen bevat en deze worden dan vervangen door de corresponderende verwoording.
Categorie Brocade concept
Zie ook  
(null)  

Voorbeeld 1

{<AUC> & <AUTO>|toc}

wordt:

Veilingcatalogus␣&␣Autograaf

12.5.107. translate

Titel Transformeer karakters
Synopsis Vervangt in input karakters uit een gegeven string door het corresponderend (in positie) karakter uit een andere string.
Categorie Stringbewerking
Zie ook keepchar, delchar, cutchar
(string) Heeft dezelfde functionaliteit als delchar, cutchar
(string, string) De eerste string is de verzameling van karakters die moeten worden vervangen. De tweede string geeft de nieuwe karakters. Is deze string korter, dan worden de betreffende karakters geschrapt.

Voorbeeld 1

{Hello World | translate "ol" "1"}

wordt:

He1␣W1rd

Voorbeeld 2

{Hello World | translate "ol" "lo"}

wordt:

Heool␣Wlrod

12.5.108. truncch

Titel Kort in op lengte
Synopsis Indien input te lang is, wordt input korter gemaakt en aangevuld met “…” Er wordt niet gekeken of input wordt afgekort midden een woord.
Categorie Stringbewerking
Zie ook truncwo
(getal) Maximale lengte van input

Voorbeeld 1

{Hello World| truncch: 100}

wordt:

Hello␣World

Voorbeeld 2

{Hello World| truncch: 10}

wordt:

Hello␣W...

12.5.109. truncwo

Titel Kort in op spatie
Synopsis Indien input te lang is, wordt input korter gemaakt en aangevuld met “…” Er wordt gekeken of input wordt afgekort midden een woord en, indien mogelijk, wordt de afkorting gedaan net voor een SPACE
Categorie Stringbewerking
Zie ook truncch
(getal) Maximale lengte van input

Voorbeeld 1

{Hello World| truncwo: 100}

wordt:

Hello␣World

Voorbeeld 2

{Hello World| truncwo: 10}

wordt:

Hello...

12.5.110. typemeta

Titel Verwerk van of naar meta loi
Synopsis input is ofwel een metaconcretisering ofwel een string die wordt omgezet naar een meta-loi groter dan 255, goed in de verf zetten.
Categorie Brocade concept
Zie ook saymeta, scopemeta, meta
(null) Hou in input enkel de derde component over
(string) Interpreteer het argument als het type en pas input passend aan.

Voorbeeld 1

{mtunicode`

Titel Toon Unicode karakters
Synopsis input is een string in Brocade karaktercodering en wordt omgevormd naar een HTML fragment voorzien van speciale markup die de code punten groter dan 255, goed in de verf zetten.
Categorie Web
Zie ook  
(null)  

Voorbeeld 1

{.alphatoomega|unicode}

wordt:

<span␣class='workspace-unichar'␣title='U+0391:␣GREEK␣CAPITAL␣LETTER␣ALPHA'>&#x0391;</span>␣to␣<span␣class='workspace-unichar'␣title='U+03A9:␣GREEK␣CAPITAL␣LETTER␣OMEGA'>&#x03A9;</span>

12.5.111. untag

Titel Haal XML tags weg
Synopsis Verwijdert de XML tags uit de input
Categorie Stringbewerking
Zie ook  
(null)  

Voorbeeld 1

{<a target="_blank" href="w3.org">w3.org</a> | untag}

wordt:

w3.org

Voorbeeld 2

{<b>Bold</b> and <b>Beautiful</b> | untag}

wordt:

Bold␣and␣Beautiful

12.5.112. upper

Titel Naar hoofdletters
Synopsis Vervangt in input kleine letters door hoofdletters
Categorie Stringbewerking
Zie ook lower
(null) Behandelt alle Unicode karakters
(test) Indien true, behandelt enkel ASCII karakters (default: false)

Voorbeeld 1

{Hello World | upper}

wordt:

HELLO␣WORLD

12.5.113. url

Titel Codeer URL path segmenten
Synopsis input wordt gezien als een path segment en passend geëncodeerd.
Categorie Codec
Zie ook  
(null)  

Voorbeeld 1

{Stijn Streuvels|url}

wordt:

Stijn%20Streuvels

12.5.114. urlapplication

Titel Start Brocade applicatie
Synopsis input wordt omgezet naar een link naar Brocade application. input is de tekst (zorg ervoor dat deze in XML staat).
Zie ook menu
(string) string is de call code voor de menu ingang.
(string, string[b→js]) De tweede string is het extra gegeven. Deze wordt automatisch omgevormd naar Javascript-veilige waarde.

Voorbeeld 1

{Titelbescrijven | urlapplication: "bibrec"}

wordt:

<a␣class="workspace-application-text"␣href="#"␣onclick="return␣WORKSPACE.urlApplication('bibrec',␣'')">Titelbescrijven</a>

Voorbeeld 2

{Titelbescrijven | urlapplication: "bibrec" "c:lvd:3"}

wordt:

<a␣class="workspace-application-text"␣href="#"␣onclick="return␣WORKSPACE.urlApplication('bibrec',␣'c:lvd:3')">Titelbescrijven</a>

12.5.115. urlize

Titel Maak van URL een link
Synopsis input wordt geïnterpreteerd als een URL en er wordt een hyperlink gemaakt van input met input als tekst (na automatische omzetting naar XML)
Categorie Web
Zie ook href
(null)  
(string) Indien string gelijk is aan “docman”, dan wordt de input behandeld als een docmanid

Voorbeeld 1

{w3.org | urlize}

wordt:

<a␣target="_blank"␣href="w3.org">w3.org</a>

Voorbeeld 2

{/docman/help.phtml | urlize}

wordt:

<a␣target="_blank"␣href="/docman/help.phtml">/docman/help.phtml</a>

Voorbeeld 3

{help.phtml | urlize "docman"}

wordt:

<a␣target="_blank"␣href="/docmanhelp.phtml">/docmanhelp.phtml</a>

12.5.116. utf8

Titel Codeer naar UTF-8
Synopsis input is een string in Brocade karakterset en wordt omgezet naar UTF-8
Categorie Codec
Zie ook enc
(null)  

Voorbeeld 1

{233|chr|utf8|hex}

wordt:

c3a9

12.5.117. xml

Titel Codeer naar XML
Synopsis input is een string in Brocade karakterset en wordt omgezet naar hexadecimal character references
Categorie Codec
Zie ook enc
(null)  

Voorbeeld 1

{Het <XML> handboek|xml}

wordt:

Het␣&#x3C;XML>␣handboek

12.5.118. xmlb

Titel Codeer naar xmlb
Synopsis input is een string in Brocade karakterset. De ISO-Latin-1 karakters worden omgezet naar hexadecimal character references. (Deze restrictie is vooral voor performantie redenen: te gebruiken als je reeds op voorhand weet dat de string enkel uit ISO-Latin-1 bestaat).
Categorie Codec
Zie ook enc
(null)  

Voorbeeld 1

{Het <XML> handboek|xmlb}

wordt:

Het␣&#60;XML&#62;␣handboek

12.5.119. xmll

Titel Codeer naar xmll
Synopsis input is een string in Brocade karakterset. De ISO-Latin-1 karakters worden omgezet naar hexadecimal character references. In het bijzonder worden « en » omgezet. Deze encoding is vooral interessant om te worden gebruikt bij strings in Brocade codering die ook zo moeten in de template worden gegenereerd.
Categorie Codec
Zie ook enc
(null)  

Voorbeeld 1

{Het <XML> handboek|xmll}

wordt:

Het␣&#60;XML&#62;␣handboek

12.5.120. xmlr

Titel Codeer naar xmlr
Synopsis input is een string in Brocade karakterset. Enkel karakters met een code punt groter dan 127 worden omgezet naar hexadecimal character references.
Categorie Codec
Zie ook enc
(null)  

Voorbeeld 1

{Het <XML> handboek|xmlr}

wordt:

Het␣<XML>␣handboek

12.6. Geavanceerde voorbeelden

12.6.1. Creatie van een <SELECT> element

GT.M>d ^uprompt

GT.M>s RAkeys("value",1)="green",RAkeys("say",1)="Groen"

GT.M>s RAkeys("value",2)="blue",RAkeys("say",2)="Blauw"

GT.M>s RAkeys("value",3)="red",RAkeys("say",3)="Rood"

GT.M>r template
{FDsel:red|select}{{\{"say":"$say"\}|key true "k"|rm}{FDsel:$value|option k}|? t
rue 1 3}{FDsel|select}

GT.M>m4_template(result, template, RAkeys)

GT.M>w !,result

<select name='s1' onchange='this.form["FDsel"]=this.value; return false;'><optio
n value='green'>Groen</option><option value='blue'>Blauw</option><option value='
red' checked='checked'>Rood</option></select><input type='hidden' name='FDsel' v
alue='red' />

GT.M>

De sleutelverzameling bevat zowel de waarden als de verwoordingen van de <OPTION>s. Merk op hoe in de loop (bepaald door de ? modifier), de JSON string wordt samengesteld:

  • binnen de loop
  • wordt de sleutel k, door middel van de key modifier, steeds voorzien van een JSON structuur
  • let op het escapen van { en }
  • de rm modifier schrapt de overtollige tekst