Jeg har lige prøve at lege lidt med en ASP-konverteringsfunktion, der tager en streng med blandet HTML og ASP-kode og omsætter det til ASP, hvorefter den udfører det. Det er et udgangspunkt for en mere komplet udgave (denne kan f.eks. ikke håndtere include-filer og pagedirectives). Koden ser således ud:
<%@ language="vbscript" %>
<%
Server.ScriptTimeout = 5
aspStartTAG = "<" & "%"
aspEndTAG = "%" & ">"
function ExpandASP(strHTML)
dim resHTML
dim htmlStart, aspStart, aspEnd
aspEnd = 0
htmlStart = 1
aspStart = 1
do
aspStart = instr(aspStart, strHTML, aspStartTAG)
if aspStart > 0 then
' Der er fundet en ASP-sektion i teksten, så den skal udtages og behandles
if htmlStart < aspStart then
' hvis der er HTML-kode imellem det forrige ASP-tag og det nye, så skal den bare udskrives med response.write
resHTML = resHTML & "Response.Write """ & replace(mid(strHTML, htmlStart, aspStart - htmlStart),"""","""""") & """" & vbCrLf
end if
' Find slutningen af ASP-sektionen
aspEnd = instr(aspStart+2, strHTML, aspEndTAG)
if aspEnd > htmlStart then
htmlStart = aspEnd + 2
else
htmlStart = len(strHTML)
end if
'response.Write "htmlStart: " & htmlStart & " / " & len(strHTML) & "<br>" & vbCrLf
' Udtag den aktuelle ASP-kode fra strengen
strASP = trim(mid(strHTML, aspStart+2, aspEnd-aspStart-2))
if left(strASP,1) = "=" then
strASP = "Response.Write " & mid(strASP, 2, len(strASP) - 1)
end if
resHTML = resHTML & strASP & vbCrLf
aspStart = aspEnd + 2
else
' Der er ikke mere ASP-kode tilbage, så resten skal bare udskrives
resHTML = resHTML & "Response.Write """ & replace(mid(strHTML,htmlStart,len(strHTML)),"""","""""") & """" & vbCrLf
htmlStart = len(strHTML)
end if
loop while htmlStart < len(strHTML)
ExpandASP = resHTML
end function
s = "<b>" & aspStartTAG & "=Session.Timeout" & aspEndTAG & "</b><br>" & _
"<u>" & aspStartTAG & "For i = 1 to 10" & vbCrLf & "Response.Write ""Looper lige lidt i en for-løkke<br>"" & vbCrLf" & vbCrLf & "Next" & aspEndTAG & "</u>" & _
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "
http://www.w3.org/TR/html4/loose.dtd"> <html>
<head>
<title>ASPfortolker</title>
</head>
<body>
<%
Execute ExpandASP(s)
'Response.Write Replace(Server.HTMLEncode(ExpandASP(s)),vbCrLf,"<br>" & vbCrLf)
%>
</body>
</html>