- Index
Een HTML pagina in powerbasic genereren is enkel aangeraden voor korte pagina's of pagina's met repeterende inhoud (tabellen) omdat de tekst niet aangepast kan worden (de source zou iedere keer opnieuw gecompileerd moeten worden als je de tekst zou willen wijzigen). HTML gebruikt enkel het ASCII character set, zodat het gebruik van Unicode zinloos is (Visual basic gebruikt standaard Unicode).
FUNCTION PBMAIN() ... OPEN $path + "template1.htm" FOR BINARY ACCESS READ SHARED AS #1 GET$ #1, LOF(1), a$: CLOSE #1 REPLACE "<*customer*>" WITH customer$ IN a$ REPLACE "<*address*>" WITH address$ IN a$ OPEN ENVIRON$("CGI_STDOUT") FOR OUTPUT AS #1 PRINT #1, a$ CLOSE ... END FUNCTION |
Een template lijkt een beetje op een PHP-bestand, waarbij tags door variabelen in het programma gewijzigd worden. Een extreem voorbeeld zou zijn dat je je eigen PHP interpreter zou schrijven.
Het voordeel van een template is dat je de output volledig kan wijzigen enkel door de template aan te passen.
Met de header in de kop van je HTML file >meta charset='ISO-8859-1'< geef je aan de browser aan dat je dezelfde encoding zal gebruiken in je HTML bestanden als de standaard windows TEXT encoding.
Er bestaan zo'n 70-tal tekens die omgezet moeten worden in HTML entities. In deze zipfile kan je de conversiebestanden vinden voor dostext en wintext. Dostext kan je lezen met EDIT (een oude dos programma), wintext met NOTEPAD.
Dit is de kode voor het lezen van één van de vertalingsfiles. Om de vertaling te versnellen is het aangeraden het configuratiebestand te trimmen zodat het enkel de tekens bevat die effektief gebruikt worden. Het configuratiebestand wordt dan text2html.txt genoemd. Als je de bovenvermelde mata charset gebruikt in de header van je HTML file, dan moet je de meeste letters met accenten zoals é è à ù,... niet meer converteren.
Het HTML kan meer tekens weergeven dan de 256 tekens van het ASCII tekenset, daarom zal je nog steeds HTML entities moeten gebruiken, bijvoorbeeld voor het €-symbool, die niet gedefinieerd is in ASCII.
GLOBAL htm GLOBAL zi$() GLOBAL zp$() FUNCTION PBMAIN() ... OPEN $path + "text2html.txt" FOR INPUT ACCESS READ SHARED AS #1 FILESCAN #1, RECORDS TO htm SEEK #1, 1 DIM zi(1 TO htm) AS GLOBAL STRING * 1, zp(1 TO htm) AS GLOBAL STRING FOR i = 1 TO htm LINE INPUT #1, a$ zi$(i) = LEFT$(a$, 1) zp$(i) = MID$(a$, 2) + ";" NEXT i CLOSE #1 ... END FUNCTION |
Hier vindt de conversie plaats:
FUNCTION html$ (c$) STATIC d$ = "" FOR i = 1 TO LEN(c$) b$ = MID$(c$, i, 1): j = ASC(b$) IF j > 31 THEN ' ASCII kodes lager dan 32 worden verwijderd IF j = 60 THEN b$ = "<" ' Dit zijn de standaard HTML entities ELSEIF j = 62 THEN ' die altijd aanwezig zijn b$ = ">" ELSEIF OR j = 38 THEN b$ = "&" ELSEIF j > 122 THEN ' We bekijken enkel de ASCII-waarden die buiten FOR k = 1 TO htm ' het alfanumeriek en symbolic gebied liggen. IF zi$(k) = b$ THEN b$ = zp$(k) EXIT FOR ' Er kan hier geen optimalisatie (gebruik van END IF ' pointers) omdat de resulterende string groter NEXT k ' is dan het origineel END IF d$ = d$ + b$ END IF NEXT i html$ = d$ END FUNCTION |
Ondanks alles is de kode redelijk snel omdat de binnenste lussen enkel uitgevoerd worden als er een teken omgezet moet worden. De kode is in ieder geval veel sneller dan deze eenvoudige loop:
FOR k = 1 TO htm REPLACE zi$(k) WITH zp$(k) IN c$ NEXT k
Individuele landingspage bezoekers: